@designbasekorea/figma-ui 0.6.9 → 0.6.10

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.js CHANGED
@@ -3,9 +3,426 @@
3
3
  var React = require('react');
4
4
  var react = require('@designbasekorea/ui-wc/react');
5
5
  var icons = require('@designbasekorea/icons');
6
+ var figmaLicenseCore = require('@designbasekorea/figma-license-core');
6
7
 
7
8
  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}
8
9
 
10
+ const FIGMA_UI_TRANSLATIONS = {
11
+ ko: {
12
+ close: '닫기',
13
+ back: '뒤로가기',
14
+ officialWebsite: '공식 웹사이트',
15
+ youtube: '유튜브',
16
+ instagram: '인스타그램',
17
+ figmaCommunity: '피그마 커뮤니티',
18
+ contact: '문의하기',
19
+ languageSettings: '언어 설정',
20
+ languageSettingsDescription: '플러그인에 표시할 언어를 선택하세요.',
21
+ 'language.korean': '한국어',
22
+ 'language.english': 'English',
23
+ 'language.japanese': '日本語',
24
+ unlimitedUsage: '무제한 사용',
25
+ proUser: '프로',
26
+ usingFree: '무료 사용',
27
+ free: '무료',
28
+ trialPlan: '체험판',
29
+ planSuffix: '플랜',
30
+ usageDetails: '사용량 상세',
31
+ dailyUsage: '오늘 사용량',
32
+ usedToday: '오늘 사용',
33
+ remainingToday: '오늘 남은 사용량',
34
+ remainingUsage: '오늘 남은 사용량',
35
+ managePlan: '플랜 관리',
36
+ upgradePlan: '플랜 업그레이드',
37
+ remainingShort: '남음',
38
+ usageCountCaption: '오늘 사용',
39
+ remainingCopy: '{{count}}회 남음 · 매일 리셋',
40
+ usageUnavailable: '사용량 제한이 없습니다',
41
+ unlimitedUsageTooltip: '모든 기능을 제한 없이 사용할 수 있습니다',
42
+ betaUsageDescription: '베타 기간에는 사용량 제한이 적용되지 않습니다',
43
+ perDay: '일',
44
+ resetsDaily: '매일 리셋',
45
+ donationPrompt: '이 플러그인이 유용했나요?',
46
+ betaStatus: 'BETA',
47
+ 'donation.buy_me_a_coffee': '커피 한 잔 사기',
48
+ 'donation.prompt': '도움이 되었다면 커피 한 잔 사주세요!',
49
+ 'form.license_key': '라이선스 키',
50
+ 'form.license_placeholder': 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx',
51
+ 'form.submit': '제출',
52
+ 'form.verifying': '확인 중...',
53
+ 'license.youtube_membership': 'YouTube 멤버십',
54
+ 'license.pro_account': '프로 계정',
55
+ 'license.upgrade_to_pro': '프로로 업그레이드',
56
+ 'license.all_features_available': '모든 기능을 사용할 수 있습니다.',
57
+ 'license.youtube_membership_description': 'YouTube 멤버십에 가입하면 Designbase 플러그인을 무제한으로 사용할 수 있습니다.',
58
+ 'license.purchase_for_unlimited': '디자인베이스 멤버십 또는 라이선스로 무제한 이용이 가능합니다.',
59
+ 'license.usage_unlimited': '사용 횟수 제한 없음',
60
+ 'license.usage_daily': '오늘 남은 횟수 {{remaining}}/{{limit}}',
61
+ 'license.usage_weekly': '이번 주 남은 횟수 {{remaining}}/{{limit}}',
62
+ 'license.usage_monthly': '이번 달 남은 횟수 {{remaining}}/{{limit}}',
63
+ 'license.usage_generic': '남은 횟수 {{remaining}}/{{limit}}',
64
+ 'license.activated': '라이선스 활성화됨',
65
+ 'license.activations_remaining': '활성',
66
+ 'license.spots_remaining': '자리 남음',
67
+ 'license.deactivating': '비활성화 중...',
68
+ 'license.deactivate': '라이선스 비활성화',
69
+ 'license.designbase_account': '디자인베이스 계정',
70
+ 'license.designbase_account_hint': 'WordPress 계정으로 로그인하거나 멤버십을 구매하면 플러그인이 자동으로 활성화됩니다.',
71
+ 'license.authenticating': '인증 중...',
72
+ 'license.login_with_designbase': '디자인베이스로 로그인',
73
+ 'license.purchase_membership': '멤버십 안내',
74
+ 'license.manage_account': '계정·멤버십 관리',
75
+ 'license.enter_key': '라이선스 키 입력',
76
+ 'license.key': '라이선스 키',
77
+ 'license.submit': '활성화',
78
+ 'license.verifying': '확인 중...',
79
+ 'license.enter_from_email': '이메일로 받은 라이선스 키를 입력하세요.',
80
+ 'license.enter_from_youtube': '멤버 전용 커뮤니티에서 받은 키를 입력하세요.',
81
+ 'license.help_link': '라이선스·결제 도움말',
82
+ 'license.youtube_membership_howto': '이용 방법',
83
+ 'license.youtube_membership_step_1': 'Designbase YouTube 채널 멤버십에 가입합니다.',
84
+ 'license.youtube_membership_step_2': '멤버 전용 커뮤니티에서 이번 달 키를 복사합니다.',
85
+ 'license.youtube_membership_step_3': '아래 입력창에 키를 붙여 넣고 활성화합니다.',
86
+ 'license.youtube_membership_join': '멤버십 가입',
87
+ 'license.youtube_membership_guide': '안내보기',
88
+ 'license.all_plugins': '모든 플러그인',
89
+ 'license.source_youtube_membership': 'YouTube 멤버십',
90
+ 'license.source_purchase': '구매 라이선스',
91
+ 'license.status_active': '활성',
92
+ 'license.status_inactive': '라이선스 확인 실패',
93
+ 'license.status_label': '라이선스 상태',
94
+ 'license.key_label': '라이선스 키',
95
+ 'license.hide_key': '숨기기',
96
+ 'license.reveal_key': '보기',
97
+ 'license.source': '출처',
98
+ 'license.access': '접근 범위',
99
+ 'license.expires': '만료일',
100
+ 'license.last_checked': '최근 확인',
101
+ 'payment.license_key_label': '라이선스 키',
102
+ 'payment.activations_remaining': '활성',
103
+ 'payment.spots_remaining': '자리 남음',
104
+ 'payment.deactivating': '비활성화 중...',
105
+ 'payment.deactivate_license': '라이선스 비활성화',
106
+ lifetimeAccess: '평생 이용',
107
+ perYear: '년',
108
+ perMonth: '월',
109
+ monthlyBilling: '월간 결제',
110
+ yearlyBilling: '연간 결제',
111
+ oneTimePaymentLifetime: '평생 이용을 위한 일회성 결제입니다.',
112
+ feature: '기능',
113
+ freePrice: '$0',
114
+ pro: '프로',
115
+ recommended: '추천',
116
+ 'pricing.usage_limit': '사용 제한',
117
+ 'pricing.daily_limit': '일일 제한',
118
+ 'pricing.unlimited': '무제한',
119
+ 'pricing.all_topics': '모든 주제 사용',
120
+ 'pricing.max_selection': '최대 선택 제한',
121
+ 'pricing.max_selection_free': '최대 5개',
122
+ 'pricing.max_selection_pro': '최대 30개',
123
+ 'pricing.dummy_count': '더미 개수',
124
+ 'pricing.dummy_count_free': '1,400개',
125
+ 'pricing.dummy_count_pro': '4,400개 이상',
126
+ 'pricing.custom_number': '커스텀 숫자 사용',
127
+ 'pricing.discount_suffix': '절약',
128
+ 'settings.modal_title': '목록 변경',
129
+ 'settings.modal_description': '드래그하여 순서를 변경하거나, 토글하여 카테고리를 숨길 수 있습니다.',
130
+ 'settings.reset': '초기화',
131
+ 'settings.cancel': '취소',
132
+ 'settings.save': '저장',
133
+ 'progress.working': '작업 중',
134
+ 'progress.processing': '처리 중...',
135
+ 'progress.completed': '완료되었습니다',
136
+ 'progress.stop': '중지',
137
+ 'progress.confirm': '확인',
138
+ 'banner.upgrade_title': '프로로 업그레이드하세요',
139
+ 'banner.upgrade_description': '무제한 기능을 사용하고 더 많은 혜택을 누리세요.',
140
+ 'banner.upgrade_button': '지금 업그레이드',
141
+ loading: '불러오는 중',
142
+ },
143
+ en: {
144
+ close: 'Close',
145
+ back: 'Back',
146
+ officialWebsite: 'Official website',
147
+ youtube: 'YouTube',
148
+ instagram: 'Instagram',
149
+ figmaCommunity: 'Figma Community',
150
+ contact: 'Contact',
151
+ languageSettings: 'Language settings',
152
+ languageSettingsDescription: 'Choose the language to display in the plugin.',
153
+ 'language.korean': 'Korean',
154
+ 'language.english': 'English',
155
+ 'language.japanese': 'Japanese',
156
+ unlimitedUsage: 'Unlimited use',
157
+ proUser: 'Pro',
158
+ usingFree: 'Free use',
159
+ free: 'Free',
160
+ trialPlan: 'Trial',
161
+ planSuffix: 'plan',
162
+ usageDetails: 'Usage details',
163
+ dailyUsage: "Today's usage",
164
+ usedToday: 'Used today',
165
+ remainingToday: 'Remaining today',
166
+ remainingUsage: 'Remaining today',
167
+ managePlan: 'Manage plan',
168
+ upgradePlan: 'Upgrade plan',
169
+ remainingShort: 'left',
170
+ usageCountCaption: 'Used today',
171
+ remainingCopy: '{{count}} remaining · resets daily',
172
+ usageUnavailable: 'No usage limit',
173
+ unlimitedUsageTooltip: 'Use every feature without limits',
174
+ betaUsageDescription: 'Usage limits are not applied during the beta period',
175
+ perDay: 'day',
176
+ resetsDaily: 'Resets daily',
177
+ donationPrompt: 'Is this plugin useful?',
178
+ betaStatus: 'BETA',
179
+ 'donation.buy_me_a_coffee': 'Buy me a coffee',
180
+ 'donation.prompt': 'If this helped, buy me a coffee!',
181
+ 'form.license_key': 'License key',
182
+ 'form.license_placeholder': 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx',
183
+ 'form.submit': 'Activate',
184
+ 'form.verifying': 'Verifying...',
185
+ 'license.youtube_membership': 'YouTube Membership',
186
+ 'license.pro_account': 'Pro account',
187
+ 'license.upgrade_to_pro': 'Upgrade to Pro',
188
+ 'license.all_features_available': 'All features are available.',
189
+ 'license.youtube_membership_description': 'Join YouTube Membership to use Designbase plugins without limits.',
190
+ 'license.purchase_for_unlimited': 'Get unlimited access with a Designbase membership or license.',
191
+ 'license.usage_unlimited': 'Unlimited usage',
192
+ 'license.usage_daily': '{{remaining}}/{{limit}} remaining today',
193
+ 'license.usage_weekly': '{{remaining}}/{{limit}} remaining this week',
194
+ 'license.usage_monthly': '{{remaining}}/{{limit}} remaining this month',
195
+ 'license.usage_generic': '{{remaining}}/{{limit}} remaining',
196
+ 'license.activated': 'License activated',
197
+ 'license.activations_remaining': 'activations',
198
+ 'license.spots_remaining': 'spots remaining',
199
+ 'license.deactivating': 'Deactivating...',
200
+ 'license.deactivate': 'Deactivate license',
201
+ 'license.designbase_account': 'Designbase account',
202
+ 'license.designbase_account_hint': 'Sign in with your WordPress account or purchase a membership to activate the plugin automatically.',
203
+ 'license.authenticating': 'Authenticating...',
204
+ 'license.login_with_designbase': 'Sign in with Designbase',
205
+ 'license.purchase_membership': 'Membership details',
206
+ 'license.manage_account': 'Manage account · membership',
207
+ 'license.enter_key': 'Enter license key',
208
+ 'license.key': 'License key',
209
+ 'license.submit': 'Activate',
210
+ 'license.verifying': 'Verifying...',
211
+ 'license.enter_from_email': 'Enter the license key you received by email.',
212
+ 'license.enter_from_youtube': 'Enter the key from the members-only community.',
213
+ 'license.help_link': 'License · payment help',
214
+ 'license.youtube_membership_howto': 'How to use',
215
+ 'license.youtube_membership_step_1': 'Join the Designbase YouTube channel membership.',
216
+ 'license.youtube_membership_step_2': 'Copy this month’s key from the members-only community.',
217
+ 'license.youtube_membership_step_3': 'Paste the key below and activate it.',
218
+ 'license.youtube_membership_join': 'Join membership',
219
+ 'license.youtube_membership_guide': 'View guide',
220
+ 'license.all_plugins': 'All plugins',
221
+ 'license.source_youtube_membership': 'YouTube Membership',
222
+ 'license.source_purchase': 'Purchased license',
223
+ 'license.status_active': 'Active',
224
+ 'license.status_inactive': 'License check failed',
225
+ 'license.status_label': 'License status',
226
+ 'license.key_label': 'License key',
227
+ 'license.hide_key': 'Hide',
228
+ 'license.reveal_key': 'Show',
229
+ 'license.source': 'Source',
230
+ 'license.access': 'Access',
231
+ 'license.expires': 'Expires',
232
+ 'license.last_checked': 'Last checked',
233
+ 'payment.license_key_label': 'License key',
234
+ 'payment.activations_remaining': 'activations',
235
+ 'payment.spots_remaining': 'spots remaining',
236
+ 'payment.deactivating': 'Deactivating...',
237
+ 'payment.deactivate_license': 'Deactivate license',
238
+ lifetimeAccess: 'Lifetime access',
239
+ perYear: 'year',
240
+ perMonth: 'month',
241
+ monthlyBilling: 'Monthly billing',
242
+ yearlyBilling: 'Yearly billing',
243
+ oneTimePaymentLifetime: 'One-time payment for lifetime access.',
244
+ feature: 'Feature',
245
+ freePrice: '$0',
246
+ pro: 'Pro',
247
+ recommended: 'Recommended',
248
+ 'pricing.usage_limit': 'Usage limit',
249
+ 'pricing.daily_limit': 'Daily limit',
250
+ 'pricing.unlimited': 'Unlimited',
251
+ 'pricing.all_topics': 'All topics',
252
+ 'pricing.max_selection': 'Selection limit',
253
+ 'pricing.max_selection_free': 'Up to 5',
254
+ 'pricing.max_selection_pro': 'Up to 30',
255
+ 'pricing.dummy_count': 'Dummy count',
256
+ 'pricing.dummy_count_free': '1,400',
257
+ 'pricing.dummy_count_pro': '4,400+',
258
+ 'pricing.custom_number': 'Custom numbers',
259
+ 'pricing.discount_suffix': 'saved',
260
+ 'settings.modal_title': 'Change list',
261
+ 'settings.modal_description': 'Drag to reorder or toggle a category to hide it.',
262
+ 'settings.reset': 'Reset',
263
+ 'settings.cancel': 'Cancel',
264
+ 'settings.save': 'Save',
265
+ 'progress.working': 'Working',
266
+ 'progress.processing': 'Processing...',
267
+ 'progress.completed': 'Completed',
268
+ 'progress.stop': 'Stop',
269
+ 'progress.confirm': 'Done',
270
+ 'banner.upgrade_title': 'Upgrade to Pro',
271
+ 'banner.upgrade_description': 'Unlock unlimited features and more benefits.',
272
+ 'banner.upgrade_button': 'Upgrade now',
273
+ loading: 'Loading',
274
+ },
275
+ ja: {
276
+ close: '閉じる',
277
+ back: '戻る',
278
+ officialWebsite: '公式ウェブサイト',
279
+ youtube: 'YouTube',
280
+ instagram: 'Instagram',
281
+ figmaCommunity: 'Figmaコミュニティ',
282
+ contact: 'お問い合わせ',
283
+ languageSettings: '言語設定',
284
+ languageSettingsDescription: 'プラグインに表示する言語を選択してください。',
285
+ 'language.korean': '韓国語',
286
+ 'language.english': '英語',
287
+ 'language.japanese': '日本語',
288
+ unlimitedUsage: '無制限で使用',
289
+ proUser: 'Pro',
290
+ usingFree: '無料で使用中',
291
+ free: '無料',
292
+ trialPlan: 'トライアル',
293
+ planSuffix: 'プラン',
294
+ usageDetails: '使用量の詳細',
295
+ dailyUsage: '今日の使用量',
296
+ usedToday: '今日の使用',
297
+ remainingToday: '今日の残り使用量',
298
+ remainingUsage: '今日の残り使用量',
299
+ managePlan: 'プランを管理',
300
+ upgradePlan: 'プランをアップグレード',
301
+ remainingShort: '残り',
302
+ usageCountCaption: '今日の使用',
303
+ remainingCopy: '{{count}}回残り · 毎日リセット',
304
+ usageUnavailable: '使用制限はありません',
305
+ unlimitedUsageTooltip: 'すべての機能を無制限で使用できます',
306
+ betaUsageDescription: 'ベータ期間中は使用制限がありません',
307
+ perDay: '日',
308
+ resetsDaily: '毎日リセット',
309
+ donationPrompt: 'このプラグインは役に立ちましたか?',
310
+ betaStatus: 'BETA',
311
+ 'donation.buy_me_a_coffee': 'コーヒーを一杯おごる',
312
+ 'donation.prompt': '役に立ったらコーヒーを一杯おごってください!',
313
+ 'form.license_key': 'ライセンスキー',
314
+ 'form.license_placeholder': 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx',
315
+ 'form.submit': '有効化',
316
+ 'form.verifying': '確認中...',
317
+ 'license.youtube_membership': 'YouTubeメンバーシップ',
318
+ 'license.pro_account': 'Proアカウント',
319
+ 'license.upgrade_to_pro': 'Proにアップグレード',
320
+ 'license.all_features_available': 'すべての機能を使用できます。',
321
+ 'license.youtube_membership_description': 'YouTubeメンバーシップに参加すると、Designbaseプラグインを無制限で使用できます。',
322
+ 'license.purchase_for_unlimited': 'Designbaseのメンバーシップまたはライセンスで無制限に利用できます。',
323
+ 'license.usage_unlimited': '使用回数の制限なし',
324
+ 'license.usage_daily': '今日の残り {{remaining}}/{{limit}}回',
325
+ 'license.usage_weekly': '今週の残り {{remaining}}/{{limit}}回',
326
+ 'license.usage_monthly': '今月の残り {{remaining}}/{{limit}}回',
327
+ 'license.usage_generic': '残り {{remaining}}/{{limit}}回',
328
+ 'license.activated': 'ライセンス有効化済み',
329
+ 'license.activations_remaining': '有効化',
330
+ 'license.spots_remaining': '枠残り',
331
+ 'license.deactivating': '無効化中...',
332
+ 'license.deactivate': 'ライセンスを無効化',
333
+ 'license.designbase_account': 'Designbaseアカウント',
334
+ 'license.designbase_account_hint': 'WordPressアカウントでサインインするか、メンバーシップを購入するとプラグインが自動的に有効化されます。',
335
+ 'license.authenticating': '認証中...',
336
+ 'license.login_with_designbase': 'Designbaseでサインイン',
337
+ 'license.purchase_membership': 'メンバーシップの詳細',
338
+ 'license.manage_account': 'アカウント・メンバーシップを管理',
339
+ 'license.enter_key': 'ライセンスキーを入力',
340
+ 'license.key': 'ライセンスキー',
341
+ 'license.submit': '有効化',
342
+ 'license.verifying': '確認中...',
343
+ 'license.enter_from_email': 'メールで受け取ったライセンスキーを入力してください。',
344
+ 'license.enter_from_youtube': 'メンバー限定コミュニティのキーを入力してください。',
345
+ 'license.help_link': 'ライセンス・支払いヘルプ',
346
+ 'license.youtube_membership_howto': '利用方法',
347
+ 'license.youtube_membership_step_1': 'Designbase YouTubeチャンネルのメンバーシップに参加します。',
348
+ 'license.youtube_membership_step_2': 'メンバー限定コミュニティから今月のキーをコピーします。',
349
+ 'license.youtube_membership_step_3': '下の入力欄にキーを貼り付けて有効化します。',
350
+ 'license.youtube_membership_join': 'メンバーシップに参加',
351
+ 'license.youtube_membership_guide': 'ガイドを見る',
352
+ 'license.all_plugins': 'すべてのプラグイン',
353
+ 'license.source_youtube_membership': 'YouTubeメンバーシップ',
354
+ 'license.source_purchase': '購入ライセンス',
355
+ 'license.status_active': '有効',
356
+ 'license.status_inactive': 'ライセンス確認に失敗しました',
357
+ 'license.status_label': 'ライセンス状態',
358
+ 'license.key_label': 'ライセンスキー',
359
+ 'license.hide_key': '隠す',
360
+ 'license.reveal_key': '表示',
361
+ 'license.source': '取得元',
362
+ 'license.access': 'アクセス範囲',
363
+ 'license.expires': '有効期限',
364
+ 'license.last_checked': '最終確認',
365
+ 'payment.license_key_label': 'ライセンスキー',
366
+ 'payment.activations_remaining': '有効化',
367
+ 'payment.spots_remaining': '枠残り',
368
+ 'payment.deactivating': '無効化中...',
369
+ 'payment.deactivate_license': 'ライセンスを無効化',
370
+ lifetimeAccess: '生涯利用',
371
+ perYear: '年',
372
+ perMonth: '月',
373
+ monthlyBilling: '月払い',
374
+ yearlyBilling: '年払い',
375
+ oneTimePaymentLifetime: '生涯利用のための一括払いです。',
376
+ feature: '機能',
377
+ freePrice: '$0',
378
+ pro: 'Pro',
379
+ recommended: 'おすすめ',
380
+ 'pricing.usage_limit': '使用制限',
381
+ 'pricing.daily_limit': '1日の制限',
382
+ 'pricing.unlimited': '無制限',
383
+ 'pricing.all_topics': 'すべてのトピック',
384
+ 'pricing.max_selection': '選択上限',
385
+ 'pricing.max_selection_free': '最大5個',
386
+ 'pricing.max_selection_pro': '最大30個',
387
+ 'pricing.dummy_count': 'ダミー数',
388
+ 'pricing.dummy_count_free': '1,400個',
389
+ 'pricing.dummy_count_pro': '4,400個以上',
390
+ 'pricing.custom_number': 'カスタム数値',
391
+ 'pricing.discount_suffix': '割引',
392
+ 'settings.modal_title': 'リストを変更',
393
+ 'settings.modal_description': 'ドラッグして並べ替えるか、トグルでカテゴリを非表示にできます。',
394
+ 'settings.reset': 'リセット',
395
+ 'settings.cancel': 'キャンセル',
396
+ 'settings.save': '保存',
397
+ 'progress.working': '処理中',
398
+ 'progress.processing': '処理しています...',
399
+ 'progress.completed': '完了しました',
400
+ 'progress.stop': '停止',
401
+ 'progress.confirm': '完了',
402
+ 'banner.upgrade_title': 'Proにアップグレード',
403
+ 'banner.upgrade_description': '無制限の機能とさらに多くの特典を利用できます。',
404
+ 'banner.upgrade_button': '今すぐアップグレード',
405
+ loading: '読み込み中',
406
+ },
407
+ };
408
+ function normalizeFigmaUiLocale(locale) {
409
+ const normalized = (locale || '').toLowerCase().split(/[-_]/)[0];
410
+ if (normalized === 'en' || normalized === 'ja')
411
+ return normalized;
412
+ return 'ko';
413
+ }
414
+ function createFigmaUiTranslator(locale = 'ko', parentT) {
415
+ const normalizedLocale = normalizeFigmaUiLocale(locale);
416
+ const translations = FIGMA_UI_TRANSLATIONS[normalizedLocale];
417
+ return (key, values) => {
418
+ const parentValue = parentT?.(key, values);
419
+ if (parentValue && parentValue !== key) {
420
+ return interpolateText(parentValue, values);
421
+ }
422
+ const value = translations[key] ?? FIGMA_UI_TRANSLATIONS.ko[key] ?? key;
423
+ return interpolateText(value, values);
424
+ };
425
+ }
9
426
  function interpolateText(template, values) {
10
427
  if (!values)
11
428
  return template;
@@ -32,11 +449,34 @@ function resolveText(t, input, fallback) {
32
449
  return input.key;
33
450
  }
34
451
 
452
+ const defaultContextValue = {
453
+ locale: 'ko',
454
+ t: createFigmaUiTranslator('ko'),
455
+ };
456
+ const FigmaUiI18nContext = React.createContext(defaultContextValue);
457
+ const FigmaUiI18nProvider = ({ locale = 'ko', t: parentT, children, }) => {
458
+ const normalizedLocale = normalizeFigmaUiLocale(locale);
459
+ const value = React.useMemo(() => ({
460
+ locale: normalizedLocale,
461
+ parentT,
462
+ t: createFigmaUiTranslator(normalizedLocale, parentT),
463
+ }), [normalizedLocale, parentT]);
464
+ return React.createElement(FigmaUiI18nContext.Provider, { value: value }, children);
465
+ };
466
+ function useFigmaUiI18n(localeOverride, tOverride) {
467
+ const context = React.useContext(FigmaUiI18nContext);
468
+ const locale = normalizeFigmaUiLocale(localeOverride ?? context.locale);
469
+ const parentT = tOverride ?? context.parentT;
470
+ const t = React.useMemo(() => createFigmaUiTranslator(locale, parentT), [locale, parentT]);
471
+ return { locale, parentT, t };
472
+ }
473
+
35
474
  const DONATION_ICON_NAMES = {
36
475
  heart: 'star-filled',
37
476
  coffee: 'cart',
38
477
  };
39
- const DonationBadge = ({ donationUrl = 'https://buymeacoffee.com/designbase', text = { key: 'donation.buy_me_a_coffee' }, iconType = 'heart', size = 's', variant = 'tertiary', fullWidth = false, iconOnly = false, disabled = false, showPrompt = false, promptText = { key: 'donation.prompt' }, className, onClick, t }) => {
478
+ const DonationBadge = ({ donationUrl = 'https://buymeacoffee.com/designbase', text = { key: 'donation.buy_me_a_coffee' }, iconType = 'heart', size = 's', variant = 'tertiary', fullWidth = false, iconOnly = false, disabled = false, showPrompt = false, promptText = { key: 'donation.prompt' }, className, onClick, t, locale, }) => {
479
+ const { t: translate } = useFigmaUiI18n(locale, t);
40
480
  const handleClick = () => {
41
481
  if (onClick) {
42
482
  onClick();
@@ -45,8 +485,8 @@ const DonationBadge = ({ donationUrl = 'https://buymeacoffee.com/designbase', te
45
485
  window.open(donationUrl, '_blank', 'noopener,noreferrer');
46
486
  }
47
487
  };
48
- const displayText = resolveText(t, text, 'Buy me a coffee');
49
- const displayPromptText = resolveText(t, promptText, '도움이 되었다면 커피 한 잔 사주세요!');
488
+ const displayText = resolveText(translate, text, 'Buy me a coffee');
489
+ const displayPromptText = resolveText(translate, promptText, '도움이 되었다면 커피 한 잔 사주세요!');
50
490
  const buttonSize = size;
51
491
  return (React.createElement("div", { className: clsx('designbase-figma-donation-badge-container', className) },
52
492
  showPrompt && !iconOnly && (React.createElement("div", { className: "designbase-figma-donation-badge__prompt" }, displayPromptText)),
@@ -97,13 +537,14 @@ const FigmaHeader = ({ children, actions = [], searchBar, sticky = true, classNa
97
537
  };
98
538
  FigmaHeader.displayName = 'FigmaHeader';
99
539
 
100
- const FigmaPageHead = ({ onBack, title, description, actions = [], moreActions = [], className, t }) => {
540
+ const FigmaPageHead = ({ onBack, title, description, actions = [], moreActions = [], className, t, locale, }) => {
541
+ const { t: translate } = useFigmaUiI18n(locale, t);
101
542
  const classes = clsx('designbase-figma-page-head', className);
102
- const displayTitle = resolveText(t, title);
103
- const displayDescription = description ? resolveText(t, description) : undefined;
543
+ const displayTitle = resolveText(translate, title);
544
+ const displayDescription = description ? resolveText(translate, description) : undefined;
104
545
  const dropdownItems = moreActions.map((action) => ({
105
546
  id: action.id,
106
- label: resolveText(t, action.label),
547
+ label: resolveText(translate, action.label),
107
548
  }));
108
549
  const handleDropdownChange = (event) => {
109
550
  const actionId = event.detail?.id ?? event.detail?.value;
@@ -112,7 +553,7 @@ const FigmaPageHead = ({ onBack, title, description, actions = [], moreActions =
112
553
  };
113
554
  return (React.createElement("div", { className: classes },
114
555
  React.createElement("div", { className: "designbase-figma-page-head__left" },
115
- React.createElement(react.Button, { variant: "tertiary", size: "s", iconOnly: true, startIcon: "chevron-left", onPress: onBack, "aria-label": "\uB4A4\uB85C\uAC00\uAE30" }),
556
+ React.createElement(react.Button, { variant: "tertiary", size: "s", iconOnly: true, startIcon: "chevron-left", onPress: onBack, "aria-label": translate('back') }),
116
557
  React.createElement("div", { className: "designbase-figma-page-head__titles" },
117
558
  React.createElement("h2", null, displayTitle),
118
559
  displayDescription && React.createElement("p", null, displayDescription))),
@@ -122,7 +563,8 @@ const FigmaPageHead = ({ onBack, title, description, actions = [], moreActions =
122
563
  };
123
564
  FigmaPageHead.displayName = 'FigmaPageHead';
124
565
 
125
- const FigmaSection = ({ title, dataCategory, iconButton, children, marginBottom, isEnabled = true, onToggle, className, enableScrollNavigation = false, headerHeight = 94, onActiveSectionChange, t, collapsible = false, defaultCollapsed = false, onCollapseChange, badge, overflowVisible = false, }) => {
566
+ const FigmaSection = ({ title, dataCategory, iconButton, children, marginBottom, isEnabled = true, onToggle, className, enableScrollNavigation = false, headerHeight = 94, onActiveSectionChange, t, locale, collapsible = false, defaultCollapsed = false, onCollapseChange, badge, overflowVisible = false, }) => {
567
+ const { t: translate } = useFigmaUiI18n(locale, t);
126
568
  const sectionRef = React.useRef(null);
127
569
  const clipRef = React.useRef(null);
128
570
  const innerRef = React.useRef(null);
@@ -242,7 +684,7 @@ const FigmaSection = ({ title, dataCategory, iconButton, children, marginBottom,
242
684
  React.createElement("div", { className: "designbase-figma-section__title-area" },
243
685
  React.createElement("h2", { className: "designbase-figma-section__title" },
244
686
  typeof title === 'string' || (typeof title === 'object' && 'key' in title)
245
- ? resolveText(t, title)
687
+ ? resolveText(translate, title)
246
688
  : title,
247
689
  badge && (React.createElement(react.Badge, { variant: "secondary", size: "s" }, badge)))),
248
690
  React.createElement("div", { className: "designbase-figma-section__controls", onClick: (e) => e.stopPropagation() },
@@ -395,54 +837,30 @@ const FigmaSidebar = ({ categories, categoryGroups = {}, categoryLabels = {}, ac
395
837
  };
396
838
  FigmaSidebar.displayName = 'FigmaSidebar';
397
839
 
398
- let useTranslation$2 = null;
399
- try {
400
- const reactI18next = require('react-i18next');
401
- useTranslation$2 = reactI18next.useTranslation;
402
- }
403
- catch (e) {
404
- }
405
840
  const DEFAULT_LANGUAGES$1 = [
406
- { code: 'ko', label: '한국어' },
407
- { code: 'en', label: 'English' },
408
- { code: 'ja', label: '日本語' },
841
+ { code: 'ko', label: { key: 'language.korean' } },
842
+ { code: 'en', label: { key: 'language.english' } },
843
+ { code: 'ja', label: { key: 'language.japanese' } },
409
844
  ];
410
- const defaultT$2 = (key) => {
411
- const translations = {
412
- languageSettings: '언어 설정',
413
- languageSettingsDescription: '플러그인에 표시할 언어를 선택하세요.',
414
- 'language.korean': '한국어',
415
- 'language.english': 'English',
416
- 'language.japanese': '日本語',
417
- };
418
- return translations[key] || key;
419
- };
420
- const LanguageSettingsModal = ({ isOpen, onClose, languages = DEFAULT_LANGUAGES$1, currentLanguage, onLanguageChange, title, description, className, t = defaultT$2, }) => {
421
- const i18n = useTranslation$2 ? useTranslation$2().i18n : null;
422
- const resolvedCurrentLanguage = currentLanguage || i18n?.language || languages[0]?.code;
845
+ const LanguageSettingsModal = ({ isOpen, onClose, languages = DEFAULT_LANGUAGES$1, currentLanguage, onLanguageChange, title, description, className, t, }) => {
846
+ const { t: translate } = useFigmaUiI18n(currentLanguage, t);
847
+ const resolvedCurrentLanguage = currentLanguage || languages[0]?.code;
423
848
  const [pendingLanguage, setPendingLanguage] = React.useState(resolvedCurrentLanguage);
424
849
  React.useEffect(() => {
425
850
  if (isOpen) {
426
851
  setPendingLanguage(resolvedCurrentLanguage);
427
852
  }
428
853
  }, [isOpen, resolvedCurrentLanguage]);
429
- const translate = (key, fallback) => {
430
- const translated = t(key);
431
- return translated && translated !== key ? translated : fallback;
432
- };
433
854
  const handleSelect = React.useCallback((languageCode) => {
434
855
  setPendingLanguage(languageCode);
435
- if (i18n) {
436
- i18n.changeLanguage(languageCode);
437
- }
438
856
  onLanguageChange?.(languageCode);
439
857
  onClose();
440
- }, [i18n, onClose, onLanguageChange]);
441
- return (React.createElement(react.Modal, { isOpen: isOpen, onClose: onClose, title: title || translate('languageSettings', '언어 설정'), size: "s", className: clsx('designbase-figma-language-settings-modal', className) },
858
+ }, [onClose, onLanguageChange]);
859
+ return (React.createElement(react.Modal, { isOpen: isOpen, onClose: onClose, title: title || translate('languageSettings'), size: "s", className: clsx('designbase-figma-language-settings-modal', className) },
442
860
  React.createElement(react.ModalBody, { className: "designbase-figma-language-settings-modal__content" },
443
- React.createElement("p", { className: "designbase-figma-language-settings-modal__description" }, description || translate('languageSettingsDescription', '플러그인에 표시할 언어를 선택하세요.')),
444
- React.createElement("ul", { className: "designbase-figma-language-settings-modal__list", role: "listbox", "aria-label": translate('languageSettings', '언어 설정') }, languages.map((language) => {
445
- const label = resolveText(t, language.label, language.code.toUpperCase());
861
+ React.createElement("p", { className: "designbase-figma-language-settings-modal__description" }, description || translate('languageSettingsDescription')),
862
+ React.createElement("ul", { className: "designbase-figma-language-settings-modal__list", role: "listbox", "aria-label": translate('languageSettings') }, languages.map((language) => {
863
+ const label = resolveText(translate, language.label, language.code.toUpperCase());
446
864
  const isActive = language.code === pendingLanguage;
447
865
  return (React.createElement("li", { key: language.code, role: "presentation" },
448
866
  React.createElement(react.Button, { type: "button", variant: "tertiary", size: "m", fullWidth: true, className: clsx('designbase-figma-language-settings-modal__option', { 'designbase-figma-language-settings-modal__option--active': isActive }), role: "option", "aria-selected": isActive, onPress: () => handleSelect(language.code) },
@@ -452,13 +870,6 @@ const LanguageSettingsModal = ({ isOpen, onClose, languages = DEFAULT_LANGUAGES$
452
870
  };
453
871
  LanguageSettingsModal.displayName = 'LanguageSettingsModal';
454
872
 
455
- let useTranslation$1 = null;
456
- try {
457
- const reactI18next = require('react-i18next');
458
- useTranslation$1 = reactI18next.useTranslation;
459
- }
460
- catch (e) {
461
- }
462
873
  const defaultLinks = [
463
874
  {
464
875
  name: 'officialWebsite',
@@ -486,33 +897,20 @@ const defaultLinks = [
486
897
  icon: React.createElement(icons.MailIcon, { size: 20 }),
487
898
  },
488
899
  ];
489
- const defaultTranslations$1 = {
490
- officialWebsite: '공식 웹사이트',
491
- youtube: '유튜브',
492
- instagram: '인스타그램',
493
- figmaCommunity: '피그마 커뮤니티',
494
- contact: '문의하기',
495
- languageSettings: '언어 설정',
496
- };
497
- const defaultT$1 = (key) => defaultTranslations$1[key] || key;
498
900
  const defaultLanguages = [
499
- { code: 'ko', label: '한국어' },
500
- { code: 'en', label: 'English' },
501
- { code: 'ja', label: '日本語' },
901
+ { code: 'ko', label: { key: 'language.korean' } },
902
+ { code: 'en', label: { key: 'language.english' } },
903
+ { code: 'ja', label: { key: 'language.japanese' } },
502
904
  ];
503
- const LogoDropdown = ({ logoSrc, logoAlt = 'DesignBase', logoType = 'designbase', logoSize = 'xs', links = defaultLinks, position = 'top-left', className, t = defaultT$1, showLanguageSelector = true, languages = defaultLanguages, currentLanguage, onLanguageChange, }) => {
905
+ const LogoDropdown = ({ logoSrc, logoAlt = 'DesignBase', logoType = 'designbase', logoSize = 'xs', links = defaultLinks, position = 'top-left', className, t, showLanguageSelector = true, languages = defaultLanguages, currentLanguage, onLanguageChange, }) => {
504
906
  const [isOpen, setIsOpen] = React.useState(false);
505
907
  const [isLanguageModalOpen, setIsLanguageModalOpen] = React.useState(false);
506
908
  const [internalLanguage, setInternalLanguage] = React.useState();
507
- const i18n = useTranslation$1 ? useTranslation$1().i18n : null;
909
+ const { t: translate } = useFigmaUiI18n(currentLanguage ?? internalLanguage, t);
508
910
  const rootRef = React.useRef(null);
509
911
  const triggerRef = React.useRef(null);
510
912
  const menuId = `designbase-figma-logo-menu-${React.useId().replace(/:/g, '')}`;
511
- const activeLanguage = currentLanguage ?? internalLanguage ?? i18n?.language ?? languages[0]?.code;
512
- const translate = (key, fallback) => {
513
- const translated = t(key);
514
- return translated && translated !== key ? translated : fallback;
515
- };
913
+ const activeLanguage = currentLanguage ?? internalLanguage ?? languages[0]?.code;
516
914
  React.useEffect(() => {
517
915
  if (!isOpen) {
518
916
  return undefined;
@@ -551,9 +949,6 @@ const LogoDropdown = ({ logoSrc, logoAlt = 'DesignBase', logoType = 'designbase'
551
949
  if (currentLanguage === undefined) {
552
950
  setInternalLanguage(languageCode);
553
951
  }
554
- if (i18n) {
555
- i18n.changeLanguage(languageCode);
556
- }
557
952
  onLanguageChange?.(languageCode);
558
953
  };
559
954
  const classes = clsx('designbase-figma-logo-dropdown', `designbase-figma-logo-dropdown--${position}`, {
@@ -568,14 +963,14 @@ const LogoDropdown = ({ logoSrc, logoAlt = 'DesignBase', logoType = 'designbase'
568
963
  links.map((link, index) => (React.createElement("li", { key: index, className: "designbase-figma-logo-dropdown__item", role: "none" },
569
964
  React.createElement("button", { type: "button", className: "designbase-figma-logo-dropdown__link", role: "menuitem", onClick: () => handleLinkClick(link.url) },
570
965
  link.icon && (React.createElement("span", { className: "designbase-figma-logo-dropdown__icon" }, link.icon)),
571
- React.createElement("span", { className: "designbase-figma-logo-dropdown__text" }, t(link.name)),
966
+ React.createElement("span", { className: "designbase-figma-logo-dropdown__text" }, translate(link.name)),
572
967
  React.createElement(icons.ExternalLinkIcon, { size: 16, className: "designbase-figma-logo-dropdown__arrow" }))))),
573
968
  showLanguageSelector && (React.createElement("li", { className: "designbase-figma-logo-dropdown__item designbase-figma-logo-dropdown__language-item", role: "none" },
574
969
  React.createElement("button", { type: "button", className: "designbase-figma-logo-dropdown__link", role: "menuitem", onClick: handleLanguageSettingsClick },
575
970
  React.createElement("span", { className: "designbase-figma-logo-dropdown__icon" },
576
971
  React.createElement(icons.TranslateIcon, { size: 20, "aria-hidden": "true" })),
577
- React.createElement("span", { className: "designbase-figma-logo-dropdown__text" }, translate('languageSettings', '언어 설정'))))))),
578
- showLanguageSelector && (React.createElement(LanguageSettingsModal, { isOpen: isLanguageModalOpen, onClose: () => setIsLanguageModalOpen(false), languages: languages, currentLanguage: activeLanguage, onLanguageChange: handleLanguageChange, t: t }))));
972
+ React.createElement("span", { className: "designbase-figma-logo-dropdown__text" }, translate('languageSettings'))))))),
973
+ showLanguageSelector && (React.createElement(LanguageSettingsModal, { isOpen: isLanguageModalOpen, onClose: () => setIsLanguageModalOpen(false), languages: languages, currentLanguage: activeLanguage, onLanguageChange: handleLanguageChange, t: translate }))));
579
974
  };
580
975
  LogoDropdown.displayName = 'LogoDropdown';
581
976
 
@@ -583,7 +978,8 @@ const fallbackText = (t, key, fallback) => {
583
978
  const translated = t?.(key);
584
979
  return translated && translated !== key ? translated : fallback;
585
980
  };
586
- const UsageStatusPopover = ({ paymentStatus, usageCount = 0, maxDailyUsage = 20, showUsage = true, showPlan = true, isLoading = false, onLicensePageClick, t, className, }) => {
981
+ const UsageStatusPopover = ({ paymentStatus, usageCount = 0, maxDailyUsage = 20, showUsage = true, showPlan = true, isLoading = false, onLicensePageClick, t, locale, className, }) => {
982
+ const { t: translate } = useFigmaUiI18n(locale, t);
587
983
  const [isOpen, setIsOpen] = React.useState(false);
588
984
  const rootRef = React.useRef(null);
589
985
  const triggerRef = React.useRef(null);
@@ -597,25 +993,25 @@ const UsageStatusPopover = ({ paymentStatus, usageCount = 0, maxDailyUsage = 20,
597
993
  const usedPercent = hasDailyLimit ? Math.round((used / limit) * 100) : 0;
598
994
  const hasControl = showUsage || showPlan;
599
995
  const planLabel = isPaid
600
- ? fallbackText(t, 'proUser', '프로')
996
+ ? fallbackText(translate, 'proUser', '프로')
601
997
  : isBeta
602
- ? fallbackText(t, 'betaStatus', 'BETA')
998
+ ? fallbackText(translate, 'betaStatus', 'BETA')
603
999
  : paymentStatus === 'TRIAL'
604
- ? fallbackText(t, 'trialPlan', '체험판')
605
- : fallbackText(t, 'free', '무료');
1000
+ ? fallbackText(translate, 'trialPlan', '체험판')
1001
+ : fallbackText(translate, 'free', '무료');
606
1002
  const planTitle = isBeta
607
1003
  ? planLabel
608
- : `${planLabel} ${fallbackText(t, 'planSuffix', '플랜')}`;
1004
+ : `${planLabel} ${fallbackText(translate, 'planSuffix', '플랜')}`;
609
1005
  const triggerLabel = isPaid
610
- ? `${planLabel}, ${fallbackText(t, 'unlimitedUsage', '무제한 사용 가능')}`
1006
+ ? `${planLabel}, ${fallbackText(translate, 'unlimitedUsage', '무제한 사용 가능')}`
611
1007
  : isBeta
612
1008
  ? planLabel
613
1009
  : hasDailyLimit
614
- ? `${remaining}/${limit} ${fallbackText(t, 'remainingShort', '남음')}`
1010
+ ? `${remaining}/${limit} ${fallbackText(translate, 'remainingShort', '남음')}`
615
1011
  : planLabel;
616
1012
  const upgradeLabel = isPaid
617
- ? fallbackText(t, 'managePlan', '플랜 관리')
618
- : fallbackText(t, 'upgradePlan', '플랜 업그레이드');
1013
+ ? fallbackText(translate, 'managePlan', '플랜 관리')
1014
+ : fallbackText(translate, 'upgradePlan', '플랜 업그레이드');
619
1015
  React.useEffect(() => {
620
1016
  if (!isOpen)
621
1017
  return undefined;
@@ -650,7 +1046,7 @@ const UsageStatusPopover = ({ paymentStatus, usageCount = 0, maxDailyUsage = 20,
650
1046
  'designbase-figma-usage-status--loading': isLoading,
651
1047
  }, className) },
652
1048
  React.createElement("div", { className: "designbase-figma-usage-status__control" },
653
- showUsage && (React.createElement("button", { ref: triggerRef, type: "button", className: "designbase-figma-usage-status__trigger", "aria-expanded": isOpen, "aria-controls": popoverId, "aria-haspopup": "dialog", "aria-label": isLoading ? fallbackText(t, 'loading', '불러오는 중') : triggerLabel, disabled: isLoading, onClick: togglePopover }, isLoading ? (React.createElement("span", { className: "designbase-figma-usage-status__skeleton", "aria-hidden": "true" })) : isPaid ? (React.createElement("span", { className: "designbase-figma-usage-status__unlimited-mark", "aria-hidden": "true" }, "\u221E")) : hasDailyLimit ? (React.createElement(React.Fragment, null,
1049
+ showUsage && (React.createElement("button", { ref: triggerRef, type: "button", className: "designbase-figma-usage-status__trigger", "aria-expanded": isOpen, "aria-controls": popoverId, "aria-haspopup": "dialog", "aria-label": isLoading ? fallbackText(translate, 'loading', '불러오는 중') : triggerLabel, disabled: isLoading, onClick: togglePopover }, isLoading ? (React.createElement("span", { className: "designbase-figma-usage-status__skeleton", "aria-hidden": "true" })) : isPaid ? (React.createElement("span", { className: "designbase-figma-usage-status__unlimited-mark", "aria-hidden": "true" }, "\u221E")) : hasDailyLimit ? (React.createElement(React.Fragment, null,
654
1050
  React.createElement("span", { className: "designbase-figma-usage-status__mini-progress", "aria-hidden": "true" },
655
1051
  React.createElement("span", { style: { width: `${usedPercent}%` } })),
656
1052
  React.createElement("span", { className: "designbase-figma-usage-status__usage-value" },
@@ -659,53 +1055,27 @@ const UsageStatusPopover = ({ paymentStatus, usageCount = 0, maxDailyUsage = 20,
659
1055
  "/",
660
1056
  limit)))) : (React.createElement("span", { className: "designbase-figma-usage-status__plan-label" }, planLabel)))),
661
1057
  showPlan && !isLoading && (React.createElement("button", { type: "button", className: "designbase-figma-usage-status__plan-badge", "aria-expanded": isOpen, "aria-controls": popoverId, "aria-haspopup": "dialog", "aria-label": planTitle, onClick: togglePopover }, planLabel))),
662
- isOpen && (React.createElement("div", { id: popoverId, className: "designbase-figma-usage-status__popover", role: "dialog", "aria-label": fallbackText(t, 'usageDetails', '사용량 상세') },
1058
+ isOpen && (React.createElement("div", { id: popoverId, className: "designbase-figma-usage-status__popover", role: "dialog", "aria-label": fallbackText(translate, 'usageDetails', '사용량 상세') },
663
1059
  React.createElement("div", { className: "designbase-figma-usage-status__popover-header" },
664
1060
  React.createElement("span", { className: "designbase-figma-usage-status__plan-title" }, planTitle),
665
1061
  !isBeta && (React.createElement(react.Button, { className: "designbase-figma-usage-status__upgrade", variant: isPaid ? 'secondary' : 'primary', size: "s", endIcon: "chevron-right", onPress: handleManageClick }, upgradeLabel))),
666
1062
  isPaid ? (React.createElement("div", { className: "designbase-figma-usage-status__unlimited-copy" },
667
1063
  React.createElement("span", { className: "designbase-figma-usage-status__unlimited-mark", "aria-hidden": "true" }, "\u221E"),
668
- React.createElement("span", null, fallbackText(t, 'unlimitedUsageTooltip', '모든 기능을 제한 없이 사용할 수 있습니다')))) : isBeta ? (React.createElement("p", { className: "designbase-figma-usage-status__note" }, fallbackText(t, 'betaUsageDescription', '베타 기간에는 사용량 제한이 적용되지 않습니다'))) : hasDailyLimit ? (React.createElement("div", { className: "designbase-figma-usage-status__usage-detail" },
1064
+ React.createElement("span", null, fallbackText(translate, 'unlimitedUsageTooltip', '모든 기능을 제한 없이 사용할 수 있습니다')))) : isBeta ? (React.createElement("p", { className: "designbase-figma-usage-status__note" }, fallbackText(translate, 'betaUsageDescription', '베타 기간에는 사용량 제한이 적용되지 않습니다'))) : hasDailyLimit ? (React.createElement("div", { className: "designbase-figma-usage-status__usage-detail" },
669
1065
  React.createElement("div", { className: "designbase-figma-usage-status__usage-summary" },
670
1066
  React.createElement("strong", { className: "designbase-figma-usage-status__usage-count" },
671
1067
  used,
672
1068
  React.createElement("span", { className: "designbase-figma-usage-status__usage-divider" }, "/"),
673
1069
  limit),
674
- React.createElement("span", { className: "designbase-figma-usage-status__usage-caption" }, fallbackText(t, 'usageCountCaption', '오늘 사용'))),
675
- React.createElement("div", { className: "designbase-figma-usage-status__progress", role: "progressbar", "aria-label": fallbackText(t, 'usageCountCaption', '오늘 사용'), "aria-valuemin": 0, "aria-valuemax": limit, "aria-valuenow": used, "aria-valuetext": `${used} / ${limit}` },
1070
+ React.createElement("span", { className: "designbase-figma-usage-status__usage-caption" }, fallbackText(translate, 'usageCountCaption', '오늘 사용'))),
1071
+ React.createElement("div", { className: "designbase-figma-usage-status__progress", role: "progressbar", "aria-label": fallbackText(translate, 'usageCountCaption', '오늘 사용'), "aria-valuemin": 0, "aria-valuemax": limit, "aria-valuenow": used, "aria-valuetext": `${used} / ${limit}` },
676
1072
  React.createElement("span", { style: { width: `${usedPercent}%` } })),
677
- React.createElement("p", { className: "designbase-figma-usage-status__remaining-copy" }, resolveText(t, { key: 'remainingCopy', values: { count: remaining } }, `${remaining}회 남음 · 매일 리셋`)))) : (React.createElement("p", { className: "designbase-figma-usage-status__note" }, fallbackText(t, 'usageUnavailable', '사용량 제한이 없습니다')))))));
1073
+ React.createElement("p", { className: "designbase-figma-usage-status__remaining-copy" }, resolveText(translate, { key: 'remainingCopy', values: { count: remaining } }, `${remaining}회 남음 · 매일 리셋`)))) : (React.createElement("p", { className: "designbase-figma-usage-status__note" }, fallbackText(translate, 'usageUnavailable', '사용량 제한이 없습니다')))))));
678
1074
  };
679
1075
  UsageStatusPopover.displayName = 'UsageStatusPopover';
680
1076
 
681
- const defaultTranslations = {
682
- unlimitedUsage: '무제한 사용',
683
- proUser: '프로',
684
- free: '무료',
685
- trialPlan: '체험판',
686
- planSuffix: '플랜',
687
- usageDetails: '사용량 상세',
688
- dailyUsage: '오늘 사용량',
689
- usedToday: '오늘 사용',
690
- remainingToday: '오늘 남은 사용량',
691
- remainingUsage: '오늘 남은 사용량',
692
- managePlan: '플랜 관리',
693
- upgradePlan: '플랜 업그레이드',
694
- remainingShort: '남음',
695
- usageCountCaption: '오늘 사용',
696
- remainingCopy: '{{count}}회 남음 · 매일 리셋',
697
- usageUnavailable: '사용량 제한이 없습니다',
698
- betaUsageDescription: '베타 기간에는 사용량 제한이 적용되지 않습니다',
699
- perDay: '일',
700
- resetsDaily: '매일 리셋',
701
- donationPrompt: '이 플러그인이 유용했나요?',
702
- betaStatus: 'BETA',
703
- };
704
- const defaultT = (key, values) => {
705
- const template = defaultTranslations[key] || key;
706
- return interpolateText(template, values);
707
- };
708
- const FigmaFooter = ({ onLicensePageClick, paymentStatus = 'FREE', usageCount = 0, isLoading = false, showPaymentStatus = true, showUsageInfo = true, maxDailyUsage = 20, showPaymentBadge = true, showDonation = true, donationUrl = 'https://buymeacoffee.com/designbase', donationText = 'Buy me a coffee', showDonationText = true, donationPromptText, showLanguageSelector = true, currentLanguage = 'ko', languages, onLanguageChange, logoSrc, logoAlt = 'DesignBase', logoType = 'designbase', logoSize = 'xs', logoLinks, className, t = defaultT, children, }) => {
1077
+ const FigmaFooter = ({ onLicensePageClick, paymentStatus = 'FREE', usageCount = 0, isLoading = false, showPaymentStatus = true, showUsageInfo = true, maxDailyUsage = 20, showPaymentBadge = true, showDonation = true, donationUrl = 'https://buymeacoffee.com/designbase', donationText = { key: 'donation.buy_me_a_coffee' }, showDonationText = true, donationPromptText, showLanguageSelector = true, currentLanguage = 'ko', languages, onLanguageChange, logoSrc, logoAlt = 'DesignBase', logoType = 'designbase', logoSize = 'xs', logoLinks, className, t, children, }) => {
1078
+ const { t: translate } = useFigmaUiI18n(currentLanguage, t);
709
1079
  const resolvedShowUsageInfo = showPaymentStatus && showUsageInfo;
710
1080
  const resolvedShowPaymentBadge = showPaymentStatus && showPaymentBadge;
711
1081
  const resolvedLicensePageClick = paymentStatus === 'BETA' ? undefined : onLicensePageClick;
@@ -716,10 +1086,10 @@ const FigmaFooter = ({ onLicensePageClick, paymentStatus = 'FREE', usageCount =
716
1086
  return (React.createElement("footer", { className: classes },
717
1087
  React.createElement("div", { className: "designbase-figma-footer__wrap" },
718
1088
  React.createElement("div", { className: "designbase-figma-footer__left" },
719
- React.createElement(LogoDropdown, { logoSrc: logoSrc, logoAlt: logoAlt, logoType: logoType, logoSize: logoSize, links: logoLinks, languages: languages, currentLanguage: currentLanguage, showLanguageSelector: showLanguageSelector, onLanguageChange: onLanguageChange, t: t })),
1089
+ React.createElement(LogoDropdown, { logoSrc: logoSrc, logoAlt: logoAlt, logoType: logoType, logoSize: logoSize, links: logoLinks, languages: languages, currentLanguage: currentLanguage, showLanguageSelector: showLanguageSelector, onLanguageChange: onLanguageChange, t: translate })),
720
1090
  React.createElement("div", { className: "designbase-figma-footer__right" },
721
- (resolvedShowUsageInfo || resolvedShowPaymentBadge) && (React.createElement(UsageStatusPopover, { paymentStatus: paymentStatus, usageCount: usageCount, maxDailyUsage: maxDailyUsage, showUsage: resolvedShowUsageInfo, showPlan: resolvedShowPaymentBadge, isLoading: isLoading, onLicensePageClick: resolvedLicensePageClick, t: t })),
722
- showDonation && (React.createElement(DonationBadge, { donationUrl: donationUrl, text: donationText, iconType: "heart", size: "s", iconOnly: true, showPrompt: false, t: t })))),
1091
+ (resolvedShowUsageInfo || resolvedShowPaymentBadge) && (React.createElement(UsageStatusPopover, { paymentStatus: paymentStatus, usageCount: usageCount, maxDailyUsage: maxDailyUsage, showUsage: resolvedShowUsageInfo, showPlan: resolvedShowPaymentBadge, isLoading: isLoading, onLicensePageClick: resolvedLicensePageClick, t: translate })),
1092
+ showDonation && (React.createElement(DonationBadge, { donationUrl: donationUrl, text: donationText, iconType: "heart", size: "s", iconOnly: true, showPrompt: false, t: translate })))),
723
1093
  children));
724
1094
  };
725
1095
  FigmaFooter.displayName = 'FigmaFooter';
@@ -795,7 +1165,8 @@ const useFigmaToast = () => {
795
1165
  FigmaToastProvider.displayName = 'FigmaToastProvider';
796
1166
  FigmaToast.displayName = 'FigmaToast';
797
1167
 
798
- const FormWithSubmit = ({ onLicenseSubmit, disabled = false, isSubmitting = false, value = '', onValueChange, label = { key: 'form.license_key' }, placeholder = { key: 'form.license_placeholder' }, submitText = { key: 'form.submit' }, submittingText = { key: 'form.verifying' }, helperText, className, t }) => {
1168
+ const FormWithSubmit = ({ onLicenseSubmit, disabled = false, isSubmitting = false, value = '', onValueChange, label = { key: 'form.license_key' }, placeholder = { key: 'form.license_placeholder' }, submitText = { key: 'form.submit' }, submittingText = { key: 'form.verifying' }, helperText, className, t, locale, }) => {
1169
+ const { t: translate } = useFigmaUiI18n(locale, t);
799
1170
  const [inputValue, setInputValue] = React.useState(value);
800
1171
  React.useEffect(() => {
801
1172
  setInputValue(value);
@@ -808,11 +1179,11 @@ const FormWithSubmit = ({ onLicenseSubmit, disabled = false, isSubmitting = fals
808
1179
  setInputValue(value);
809
1180
  onValueChange?.(value);
810
1181
  };
811
- const displayLabel = resolveText(t, label, 'License Key');
812
- const displayPlaceholder = resolveText(t, placeholder, 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx');
813
- const displaySubmitText = resolveText(t, submitText, 'Submit');
814
- const displaySubmittingText = resolveText(t, submittingText, 'Verifying...');
815
- const displayHelperText = helperText ? resolveText(t, helperText, '') : undefined;
1182
+ const displayLabel = resolveText(translate, label, 'License Key');
1183
+ const displayPlaceholder = resolveText(translate, placeholder, 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx');
1184
+ const displaySubmitText = resolveText(translate, submitText, 'Submit');
1185
+ const displaySubmittingText = resolveText(translate, submittingText, 'Verifying...');
1186
+ const displayHelperText = helperText ? resolveText(translate, helperText, '') : undefined;
816
1187
  return (React.createElement("form", { className: `designbase-figma-form-with-submit ${className || ''}`, onSubmit: handleSubmit },
817
1188
  React.createElement("div", { className: "designbase-figma-form-with-submit__field" },
818
1189
  React.createElement("label", { className: "designbase-figma-form-with-submit__label" }, displayLabel),
@@ -826,7 +1197,8 @@ const FormWithSubmit = ({ onLicenseSubmit, disabled = false, isSubmitting = fals
826
1197
  };
827
1198
  FormWithSubmit.displayName = 'FormWithSubmit';
828
1199
 
829
- const InteractionFeedback = ({ status = 'default', message, statusMessage, leftContent, rightAction, visible = true, className, t }) => {
1200
+ const InteractionFeedback = ({ status = 'default', message, statusMessage, leftContent, rightAction, visible = true, className, t, locale, }) => {
1201
+ const { t: translate } = useFigmaUiI18n(locale, t);
830
1202
  const feedbackClasses = clsx('designbase-figma-interaction', `designbase-figma-interaction--${status}`, {
831
1203
  'designbase-figma-interaction--visible': visible,
832
1204
  }, className);
@@ -835,38 +1207,28 @@ const InteractionFeedback = ({ status = 'default', message, statusMessage, leftC
835
1207
  return (React.createElement("div", { className: feedbackClasses },
836
1208
  React.createElement("div", { className: "designbase-figma-interaction__content" },
837
1209
  React.createElement("div", { className: "designbase-figma-interaction__left" }, leftContent || (React.createElement("div", { className: "designbase-figma-interaction__message" },
838
- status === 'loading' && (React.createElement(react.Spinner, { size: "s", type: "circular", label: "\uBD88\uB7EC\uC624\uB294 \uC911\uC785\uB2C8\uB2E4...", showLabel: false })),
839
- (message || status === 'loading') && (React.createElement("span", { className: "designbase-figma-interaction__text" }, resolveText(t, message || '불러오는 중입니다...'))),
840
- statusMessage && (React.createElement("span", { className: "designbase-figma-interaction__status-text" }, resolveText(t, statusMessage)))))),
1210
+ status === 'loading' && (React.createElement(react.Spinner, { size: "s", type: "circular", label: translate('loading'), showLabel: false })),
1211
+ (message || status === 'loading') && (React.createElement("span", { className: "designbase-figma-interaction__text" }, resolveText(translate, message || { key: 'loading' }))),
1212
+ statusMessage && (React.createElement("span", { className: "designbase-figma-interaction__status-text" }, resolveText(translate, statusMessage)))))),
841
1213
  rightAction && (React.createElement("div", { className: "designbase-figma-interaction__right" }, rightAction)))));
842
1214
  };
843
1215
  InteractionFeedback.displayName = 'InteractionFeedback';
844
1216
 
845
- let useTranslation = null;
846
- try {
847
- const reactI18next = require('react-i18next');
848
- useTranslation = reactI18next.useTranslation;
849
- }
850
- catch (e) {
851
- }
852
1217
  const DEFAULT_LANGUAGES = [
853
1218
  { code: 'ko', label: 'KO' },
854
1219
  { code: 'en', label: 'EN' },
855
1220
  ];
856
1221
  const LanguageSelector = ({ currentLanguage, languages = DEFAULT_LANGUAGES, onLanguageChange, size = 's', className, t }) => {
857
- const i18n = useTranslation ? useTranslation().i18n : null;
858
- const activeLanguage = currentLanguage || (i18n?.language) || 'ko';
1222
+ const { locale, t: translate } = useFigmaUiI18n(currentLanguage, t);
1223
+ const activeLanguage = currentLanguage || locale;
859
1224
  const handleLanguageChange = (languageCode) => {
860
- if (i18n) {
861
- i18n.changeLanguage(languageCode);
862
- }
863
1225
  if (onLanguageChange) {
864
1226
  onLanguageChange(languageCode);
865
1227
  }
866
1228
  };
867
1229
  const segmentOptions = languages.map((language) => ({
868
1230
  value: language.code,
869
- label: resolveText(t, language.label),
1231
+ label: resolveText(translate, language.label, language.code.toUpperCase()),
870
1232
  disabled: false,
871
1233
  }));
872
1234
  return (React.createElement("div", { className: `designbase-figma-language-selector ${className || ''}` },
@@ -898,25 +1260,26 @@ function openExternalUrl(url) {
898
1260
  }
899
1261
  }
900
1262
 
901
- const LicenseOffer = ({ joinUrl, guideUrl, membershipUrl, t, className, }) => {
1263
+ const LicenseOffer = ({ joinUrl, guideUrl, membershipUrl, t, locale, className, }) => {
1264
+ const { t: translate } = useFigmaUiI18n(locale, t);
902
1265
  const titleId = `designbase-license-offer-title-${React.useId().replace(/:/g, '')}`;
903
1266
  const resolvedJoinUrl = joinUrl || membershipUrl;
904
1267
  const steps = [
905
- resolveText(t, { key: 'license.youtube_membership_step_1' }, 'Designbase YouTube 채널 멤버십에 가입합니다.'),
906
- resolveText(t, { key: 'license.youtube_membership_step_2' }, '멤버 전용 커뮤니티에서 이번 달 키를 복사합니다.'),
907
- resolveText(t, { key: 'license.youtube_membership_step_3' }, '아래 입력창에 키를 붙여 넣고 활성화합니다.'),
1268
+ resolveText(translate, { key: 'license.youtube_membership_step_1' }, 'Designbase YouTube 채널 멤버십에 가입합니다.'),
1269
+ resolveText(translate, { key: 'license.youtube_membership_step_2' }, '멤버 전용 커뮤니티에서 이번 달 키를 복사합니다.'),
1270
+ resolveText(translate, { key: 'license.youtube_membership_step_3' }, '아래 입력창에 키를 붙여 넣고 활성화합니다.'),
908
1271
  ];
909
1272
  return (React.createElement("section", { className: `designbase-figma-license-offer ${className || ''}`, "aria-labelledby": titleId },
910
- React.createElement("h3", { id: titleId, className: "designbase-figma-license-offer__title" }, resolveText(t, { key: 'license.youtube_membership_howto' }, '이용 방법')),
1273
+ React.createElement("h3", { id: titleId, className: "designbase-figma-license-offer__title" }, resolveText(translate, { key: 'license.youtube_membership_howto' }, '이용 방법')),
911
1274
  React.createElement("ol", { className: "designbase-figma-license-offer__steps" }, steps.map((step, index) => (React.createElement("li", { key: index },
912
1275
  React.createElement("span", { className: "designbase-figma-license-offer__step-index", "aria-hidden": "true" },
913
1276
  index + 1,
914
1277
  "."),
915
1278
  React.createElement("span", null, step))))),
916
1279
  (resolvedJoinUrl || guideUrl) && (React.createElement("div", { className: "designbase-figma-license-offer__actions" },
917
- resolvedJoinUrl && (React.createElement(react.Button, { onPress: () => openExternalUrl(resolvedJoinUrl), variant: "primary", size: "m", fullWidth: true }, resolveText(t, { key: 'license.youtube_membership_join' }, '멤버십 가입'))),
1280
+ resolvedJoinUrl && (React.createElement(react.Button, { onPress: () => openExternalUrl(resolvedJoinUrl), variant: "primary", size: "m", fullWidth: true }, resolveText(translate, { key: 'license.youtube_membership_join' }, '멤버십 가입'))),
918
1281
  guideUrl && (React.createElement(react.Button, { onPress: () => openExternalUrl(guideUrl), variant: "secondary", size: "m", fullWidth: true },
919
- React.createElement("span", null, resolveText(t, { key: 'license.youtube_membership_guide' }, '안내보기')),
1282
+ React.createElement("span", null, resolveText(translate, { key: 'license.youtube_membership_guide' }, '안내보기')),
920
1283
  React.createElement(icons.ExternalLinkIcon, { size: 16, "aria-hidden": "true" })))))));
921
1284
  };
922
1285
  LicenseOffer.displayName = 'LicenseOffer';
@@ -926,13 +1289,13 @@ function maskLicenseKey(value) {
926
1289
  return '••••••••';
927
1290
  return `${value.slice(0, 4)}••••${value.slice(-4)}`;
928
1291
  }
929
- function formatDate(value) {
1292
+ function formatDate(value, locale) {
930
1293
  if (!value)
931
1294
  return undefined;
932
1295
  const date = new Date(value);
933
1296
  if (Number.isNaN(date.getTime()))
934
1297
  return value;
935
- return new Intl.DateTimeFormat(undefined, { dateStyle: 'medium' }).format(date);
1298
+ return new Intl.DateTimeFormat(locale, { dateStyle: 'medium' }).format(date);
936
1299
  }
937
1300
  function formatScope(value, t) {
938
1301
  if (!value)
@@ -953,43 +1316,44 @@ function formatSource(value, t) {
953
1316
  }
954
1317
  return value;
955
1318
  }
956
- const LicenseStatusCard = ({ status, licenseKey = '', licenseStatus, licenseSource, accessScope, expiresAt, lastVerifiedAt, validationMessage, allowRevealKey = false, t, className, }) => {
1319
+ const LicenseStatusCard = ({ status, licenseKey = '', licenseStatus, licenseSource, accessScope, expiresAt, lastVerifiedAt, validationMessage, allowRevealKey = false, t, locale, className, }) => {
1320
+ const { locale: resolvedLocale, t: translate } = useFigmaUiI18n(locale, t);
957
1321
  const [isKeyRevealed, setIsKeyRevealed] = React.useState(false);
958
1322
  const normalizedLicenseStatus = licenseStatus?.toLowerCase();
959
1323
  const isInactiveStatus = ['expired', 'revoked', 'invalid', 'inactive'].includes(normalizedLicenseStatus || '');
960
1324
  const isActive = status === 'PAID' && !isInactiveStatus;
961
1325
  const statusText = isActive
962
- ? resolveText(t, { key: 'license.status_active' }, 'Active')
963
- : resolveText(t, { key: 'license.status_inactive' }, 'License check failed');
1326
+ ? resolveText(translate, { key: 'license.status_active' }, 'Active')
1327
+ : resolveText(translate, { key: 'license.status_inactive' }, 'License check failed');
964
1328
  const statusClass = isActive ? 'active' : 'inactive';
965
1329
  return (React.createElement("section", { className: `designbase-figma-license-status-card designbase-figma-license-status-card--${statusClass} ${className || ''}`, "aria-label": statusText },
966
1330
  React.createElement("div", { className: "designbase-figma-license-status-card__header" },
967
1331
  React.createElement("div", null,
968
1332
  React.createElement("div", { className: "designbase-figma-license-status-card__eyebrow" }, isActive
969
- ? resolveText(t, { key: 'license.activated' }, '라이선스 활성화됨')
970
- : resolveText(t, { key: 'license.status_label' }, '라이선스 상태')),
1333
+ ? resolveText(translate, { key: 'license.activated' }, '라이선스 활성화됨')
1334
+ : resolveText(translate, { key: 'license.status_label' }, '라이선스 상태')),
971
1335
  React.createElement("h3", null, statusText)),
972
1336
  React.createElement("span", { className: "designbase-figma-license-status-card__badge" }, licenseStatus || (isActive ? 'active' : 'inactive'))),
973
1337
  validationMessage && !isActive && (React.createElement("p", { className: "designbase-figma-license-status-card__message" }, validationMessage)),
974
1338
  licenseKey && (React.createElement("div", { className: "designbase-figma-license-status-card__key-row" },
975
- React.createElement("span", null, resolveText(t, { key: 'license.key_label' }, '라이선스 키')),
1339
+ React.createElement("span", null, resolveText(translate, { key: 'license.key_label' }, '라이선스 키')),
976
1340
  React.createElement("code", null, allowRevealKey && isKeyRevealed ? licenseKey : maskLicenseKey(licenseKey)),
977
1341
  allowRevealKey && (React.createElement(react.Button, { type: "button", onPress: () => setIsKeyRevealed((value) => !value), variant: "tertiary", size: "s" }, isKeyRevealed
978
- ? resolveText(t, { key: 'license.hide_key' }, '숨기기')
979
- : resolveText(t, { key: 'license.reveal_key' }, '보기'))))),
1342
+ ? resolveText(translate, { key: 'license.hide_key' }, '숨기기')
1343
+ : resolveText(translate, { key: 'license.reveal_key' }, '보기'))))),
980
1344
  (licenseSource || accessScope || expiresAt || lastVerifiedAt) && (React.createElement("dl", { className: "designbase-figma-license-status-card__meta" },
981
- formatSource(licenseSource, t) && React.createElement(React.Fragment, null,
982
- React.createElement("dt", null, resolveText(t, { key: 'license.source' }, '출처')),
983
- React.createElement("dd", null, formatSource(licenseSource, t))),
984
- formatScope(accessScope, t) && React.createElement(React.Fragment, null,
985
- React.createElement("dt", null, resolveText(t, { key: 'license.access' }, '접근 범위')),
986
- React.createElement("dd", null, formatScope(accessScope, t))),
1345
+ formatSource(licenseSource, translate) && React.createElement(React.Fragment, null,
1346
+ React.createElement("dt", null, resolveText(translate, { key: 'license.source' }, '출처')),
1347
+ React.createElement("dd", null, formatSource(licenseSource, translate))),
1348
+ formatScope(accessScope, translate) && React.createElement(React.Fragment, null,
1349
+ React.createElement("dt", null, resolveText(translate, { key: 'license.access' }, '접근 범위')),
1350
+ React.createElement("dd", null, formatScope(accessScope, translate))),
987
1351
  expiresAt && React.createElement(React.Fragment, null,
988
- React.createElement("dt", null, resolveText(t, { key: 'license.expires' }, '만료일')),
989
- React.createElement("dd", null, formatDate(expiresAt) || expiresAt)),
1352
+ React.createElement("dt", null, resolveText(translate, { key: 'license.expires' }, '만료일')),
1353
+ React.createElement("dd", null, formatDate(expiresAt, resolvedLocale) || expiresAt)),
990
1354
  lastVerifiedAt && React.createElement(React.Fragment, null,
991
- React.createElement("dt", null, resolveText(t, { key: 'license.last_checked' }, '최근 확인')),
992
- React.createElement("dd", null, formatDate(lastVerifiedAt) || lastVerifiedAt))))));
1355
+ React.createElement("dt", null, resolveText(translate, { key: 'license.last_checked' }, '최근 확인')),
1356
+ React.createElement("dd", null, formatDate(lastVerifiedAt, resolvedLocale) || lastVerifiedAt))))));
993
1357
  };
994
1358
  LicenseStatusCard.displayName = 'LicenseStatusCard';
995
1359
 
@@ -1010,15 +1374,16 @@ function resolvePaymentFeedbackVariant(errorCode, explicitVariant) {
1010
1374
  }
1011
1375
  return 'error';
1012
1376
  }
1013
- const PaymentStatusSection = ({ activationLimit, activationUsage, licenseKey, onDeactivate, isDeactivating = false, showDetails = false, actionMessage, actionMessageVariant, errorCode, className, t, }) => {
1377
+ const PaymentStatusSection = ({ activationLimit, activationUsage, licenseKey, onDeactivate, isDeactivating = false, showDetails = false, actionMessage, actionMessageVariant, errorCode, className, t, locale, }) => {
1378
+ const { t: translate } = useFigmaUiI18n(locale, t);
1014
1379
  const remainingActivations = Math.max(0, activationLimit - activationUsage);
1015
- const resolvedActionMessage = actionMessage ? resolveText(t, actionMessage) : undefined;
1380
+ const resolvedActionMessage = actionMessage ? resolveText(translate, actionMessage) : undefined;
1016
1381
  const feedbackVariant = resolvedActionMessage
1017
1382
  ? resolvePaymentFeedbackVariant(errorCode, actionMessageVariant)
1018
1383
  : undefined;
1019
1384
  return (React.createElement("div", { className: clsx('designbase-figma-payment-status', className) },
1020
1385
  React.createElement("div", { className: "designbase-figma-payment-status__license-key" },
1021
- resolveText(t, { key: 'payment.license_key_label' }, '라이선스 키'),
1386
+ resolveText(translate, { key: 'payment.license_key_label' }, '라이선스 키'),
1022
1387
  ": ",
1023
1388
  React.createElement("span", null, licenseKey)),
1024
1389
  showDetails && (React.createElement("div", { className: "designbase-figma-payment-status__details" },
@@ -1026,41 +1391,60 @@ const PaymentStatusSection = ({ activationLimit, activationUsage, licenseKey, on
1026
1391
  React.createElement("div", { className: "designbase-figma-payment-status__remaining" },
1027
1392
  remainingActivations,
1028
1393
  ' ',
1029
- resolveText(t, { key: 'payment.activations_remaining' }, '활성'),
1394
+ resolveText(translate, { key: 'payment.activations_remaining' }, '활성'),
1030
1395
  ' ',
1031
- resolveText(t, { key: 'payment.spots_remaining' }, '자리 남음')),
1396
+ resolveText(translate, { key: 'payment.spots_remaining' }, '자리 남음')),
1032
1397
  React.createElement("div", { className: "designbase-figma-payment-status__usage" },
1033
1398
  activationUsage,
1034
1399
  "/",
1035
1400
  activationLimit)),
1036
1401
  React.createElement("div", { className: "designbase-figma-payment-status__action" },
1037
1402
  React.createElement(react.Button, { onPress: onDeactivate, variant: "secondary", size: "s", fullWidth: true, disabled: isDeactivating }, isDeactivating
1038
- ? resolveText(t, { key: 'payment.deactivating' }, '비활성화중...')
1039
- : resolveText(t, { key: 'payment.deactivate_license' }, '라이선스 비활성화')),
1403
+ ? resolveText(translate, { key: 'payment.deactivating' }, '비활성화중...')
1404
+ : resolveText(translate, { key: 'payment.deactivate_license' }, '라이선스 비활성화')),
1040
1405
  resolvedActionMessage && feedbackVariant && (React.createElement("p", { className: clsx('designbase-figma-payment-status__feedback', `designbase-figma-payment-status__feedback--${feedbackVariant}`), role: feedbackVariant === 'error' ? 'alert' : 'status', "aria-live": "polite" }, resolvedActionMessage)))))));
1041
1406
  };
1042
1407
  PaymentStatusSection.displayName = 'PaymentStatusSection';
1043
1408
 
1044
- const defaultFeatures = [
1045
- { name: '사용 제한', free: '일일 제한', pro: '무제한' },
1046
- { name: '모든 주제 사용', free: false, pro: true },
1047
- { name: '최대 선택 제한', free: '최대 5개', pro: '최대 30개' },
1048
- { name: '더미 개수', free: '1,400개', pro: '4,400개 +' },
1049
- { name: '커스텀 숫자 사용', free: false, pro: true },
1050
- ];
1409
+ const defaultFeaturesByLocale = {
1410
+ ko: [
1411
+ { name: '사용 제한', free: '일일 제한', pro: '무제한' },
1412
+ { name: '모든 주제 사용', free: false, pro: true },
1413
+ { name: '최대 선택 제한', free: '최대 5개', pro: '최대 30개' },
1414
+ { name: '더미 개수', free: '1,400개', pro: '4,400개 이상' },
1415
+ { name: '커스텀 숫자 사용', free: false, pro: true },
1416
+ ],
1417
+ en: [
1418
+ { name: 'Usage limit', free: 'Daily limit', pro: 'Unlimited' },
1419
+ { name: 'All topics', free: false, pro: true },
1420
+ { name: 'Selection limit', free: 'Up to 5', pro: 'Up to 30' },
1421
+ { name: 'Dummy count', free: '1,400', pro: '4,400+' },
1422
+ { name: 'Custom numbers', free: false, pro: true },
1423
+ ],
1424
+ ja: [
1425
+ { name: '使用制限', free: '1日の制限', pro: '無制限' },
1426
+ { name: 'すべてのトピック', free: false, pro: true },
1427
+ { name: '選択上限', free: '最大5個', pro: '最大30個' },
1428
+ { name: 'ダミー数', free: '1,400個', pro: '4,400個以上' },
1429
+ { name: 'カスタム数値', free: false, pro: true },
1430
+ ],
1431
+ };
1051
1432
  const defaultPricing = {
1052
1433
  monthly: 2,
1053
1434
  yearly: 21.6,
1054
1435
  lifetime: 50,
1055
1436
  };
1056
- const PricingComparison = ({ features = defaultFeatures, pricing = defaultPricing, paymentType = 'subscription', t = (key) => key, className, }) => {
1437
+ const PricingComparison = ({ features, pricing = defaultPricing, paymentType = 'subscription', t, locale, className, }) => {
1438
+ const { locale: resolvedLocale, t: translate } = useFigmaUiI18n(locale, t);
1057
1439
  const [isYearly, setIsYearly] = React.useState(false);
1440
+ const resolvedFeatures = features ?? defaultFeaturesByLocale[resolvedLocale];
1441
+ const resolveFeatureValue = (value) => typeof value === 'boolean' ? (value ? '✓' : '✗') : value;
1058
1442
  const getPrice = () => {
1059
1443
  if (paymentType === 'lifetime') {
1060
- return `$${pricing.lifetime?.toLocaleString()} - ${t('lifetimeAccess') || '평생 이용'}`;
1444
+ return `$${pricing.lifetime?.toLocaleString()} - ${translate('lifetimeAccess')}`;
1061
1445
  }
1062
1446
  const price = isYearly ? pricing.yearly : pricing.monthly;
1063
- return `$${price?.toLocaleString()} / ${isYearly ? t('perYear') : t('perMonth')}`;
1447
+ return `$${price?.toLocaleString()} / ${isYearly ? translate('perYear') : translate('perMonth')}`;
1064
1448
  };
1065
1449
  const getDiscountPercentage = () => {
1066
1450
  if (paymentType === 'lifetime') {
@@ -1083,46 +1467,34 @@ const PricingComparison = ({ features = defaultFeatures, pricing = defaultPricin
1083
1467
  }, options: [
1084
1468
  {
1085
1469
  value: 'monthly',
1086
- label: t('monthlyBilling') || '월간 결제',
1470
+ label: translate('monthlyBilling'),
1087
1471
  },
1088
1472
  {
1089
1473
  value: 'yearly',
1090
- label: `${t('yearlyBilling') || '연간 결제'} (${getDiscountPercentage()}% 절약)`,
1474
+ label: `${translate('yearlyBilling')} (${getDiscountPercentage()}% ${translate('pricing.discount_suffix')})`,
1091
1475
  },
1092
1476
  ], size: "s" }))),
1093
1477
  paymentType === 'lifetime' && (React.createElement("div", { className: "designbase-figma-pricing-comparison__lifetime-info" },
1094
- React.createElement("p", { className: "designbase-figma-pricing-comparison__lifetime-text" }, t('oneTimePaymentLifetime') || 'One-time payment for lifetime access!'))),
1478
+ React.createElement("p", { className: "designbase-figma-pricing-comparison__lifetime-text" }, translate('oneTimePaymentLifetime')))),
1095
1479
  React.createElement("table", { className: "designbase-figma-pricing-comparison__table" },
1096
1480
  React.createElement("thead", null,
1097
1481
  React.createElement("tr", null,
1098
- React.createElement("th", null, t('feature') || '기능'),
1482
+ React.createElement("th", null, translate('feature')),
1099
1483
  React.createElement("th", null,
1100
- React.createElement("div", { className: "designbase-figma-pricing-comparison__plan-name" }, t('free') || 'Free'),
1101
- React.createElement("div", null, t('freePrice') || '$0')),
1484
+ React.createElement("div", { className: "designbase-figma-pricing-comparison__plan-name" }, translate('free')),
1485
+ React.createElement("div", null, translate('freePrice'))),
1102
1486
  React.createElement("th", { className: "designbase-figma-pricing-comparison__recommended" },
1103
1487
  React.createElement("div", { className: "designbase-figma-pricing-comparison__plan-name" },
1104
- t('pro') || 'Pro',
1105
- React.createElement("span", { className: "designbase-figma-pricing-comparison__recommended-badge" }, t('recommended') || '추천')),
1488
+ translate('pro'),
1489
+ React.createElement("span", { className: "designbase-figma-pricing-comparison__recommended-badge" }, translate('recommended'))),
1106
1490
  React.createElement("div", null, getPrice())))),
1107
- React.createElement("tbody", null, features.map((feature, index) => (React.createElement("tr", { key: index },
1491
+ React.createElement("tbody", null, resolvedFeatures.map((feature, index) => (React.createElement("tr", { key: index },
1108
1492
  React.createElement("td", null, feature.name),
1109
- React.createElement("td", null, typeof feature.free === 'boolean'
1110
- ? (feature.free ? '✓' : '✗')
1111
- : feature.free),
1112
- React.createElement("td", null, typeof feature.pro === 'boolean'
1113
- ? (feature.pro ? '✓' : '✗')
1114
- : feature.pro))))))));
1493
+ React.createElement("td", null, resolveFeatureValue(feature.free)),
1494
+ React.createElement("td", null, resolveFeatureValue(feature.pro)))))))));
1115
1495
  };
1116
1496
  PricingComparison.displayName = 'PricingComparison';
1117
1497
 
1118
- const DEFAULT_LICENSE_MESSAGE_TYPES = {
1119
- initialize: 'initialize',
1120
- verifyLicense: 'verify-license',
1121
- deactivateLicense: 'deactivate-license',
1122
- updateStatus: 'update-plugin-status',
1123
- verifyResult: 'license-verification-result',
1124
- deactivateResult: 'license-deactivation-result',
1125
- };
1126
1498
  const START_DESIGNBASE_AUTH_MESSAGE = 'start-designbase-auth';
1127
1499
  const INITIAL_LICENSE_PAGE_STATE = {
1128
1500
  paymentStatus: 'FREE',
@@ -1196,7 +1568,7 @@ function parseLicenseMessage(data) {
1196
1568
  };
1197
1569
  }
1198
1570
  function useFigmaLicenseBridge(options = {}) {
1199
- const messageTypes = React.useMemo(() => ({ ...DEFAULT_LICENSE_MESSAGE_TYPES, ...options.messageTypes }), [options.messageTypes]);
1571
+ const messageTypes = React.useMemo(() => ({ ...figmaLicenseCore.DEFAULT_LICENSE_MESSAGE_TYPES, ...options.messageTypes }), [options.messageTypes]);
1200
1572
  const [state, setState] = React.useState({
1201
1573
  ...INITIAL_LICENSE_PAGE_STATE,
1202
1574
  ...options.initialState,
@@ -1277,6 +1649,9 @@ function useFigmaLicenseBridge(options = {}) {
1277
1649
  applyPatch({ lastMessage: payload.message });
1278
1650
  }
1279
1651
  }
1652
+ if (type === messageTypes.featureAccessResult || type === messageTypes.usageConsumeResult) {
1653
+ applyPatch(parseLicenseMessage(payload));
1654
+ }
1280
1655
  };
1281
1656
  window.addEventListener('message', handleMessage);
1282
1657
  postPluginMessage({ type: messageTypes.initialize });
@@ -1301,6 +1676,20 @@ function useFigmaLicenseBridge(options = {}) {
1301
1676
  setIsStartingAuth(true);
1302
1677
  postPluginMessage({ type: START_DESIGNBASE_AUTH_MESSAGE });
1303
1678
  }, []);
1679
+ const checkFeatureAccess = React.useCallback((featureKey, amount = 1) => {
1680
+ postPluginMessage({
1681
+ type: messageTypes.checkFeatureAccess,
1682
+ ...(featureKey ? { featureKey } : {}),
1683
+ amount,
1684
+ });
1685
+ }, [messageTypes.checkFeatureAccess]);
1686
+ const consumeUsage = React.useCallback((amount = 1, featureKey) => {
1687
+ postPluginMessage({
1688
+ type: messageTypes.consumeUsage,
1689
+ amount,
1690
+ ...(featureKey ? { featureKey } : {}),
1691
+ });
1692
+ }, [messageTypes.consumeUsage]);
1304
1693
  return {
1305
1694
  state,
1306
1695
  isVerifying,
@@ -1309,6 +1698,8 @@ function useFigmaLicenseBridge(options = {}) {
1309
1698
  verifyLicense,
1310
1699
  deactivateLicense,
1311
1700
  startDesignbaseAuth,
1701
+ checkFeatureAccess,
1702
+ consumeUsage,
1312
1703
  setLicenseKeyInput: (licenseKey) => applyPatch({ licenseKey }),
1313
1704
  };
1314
1705
  }
@@ -1322,17 +1713,23 @@ function formatUsageLabel(state, t) {
1322
1713
  const remaining = remainingUsage ?? Math.max(0, limit - usageUsed);
1323
1714
  if (usageReset === 'daily') {
1324
1715
  const fallback = `오늘 남은 횟수 ${remaining}/${limit}`;
1325
- const translated = resolveText(t, { key: 'license.usage_daily' }, fallback) ?? fallback;
1716
+ const translated = resolveText(t, { key: 'license.usage_daily', values: { remaining, limit } }, fallback) ?? fallback;
1326
1717
  return translated.includes(String(remaining)) ? translated : fallback;
1327
1718
  }
1328
1719
  if (usageReset === 'monthly') {
1329
1720
  const fallback = `이번 달 남은 횟수 ${remaining}/${limit}`;
1330
- const translated = resolveText(t, { key: 'license.usage_monthly' }, fallback) ?? fallback;
1721
+ const translated = resolveText(t, { key: 'license.usage_monthly', values: { remaining, limit } }, fallback) ?? fallback;
1722
+ return translated.includes(String(remaining)) ? translated : fallback;
1723
+ }
1724
+ if (usageReset === 'weekly') {
1725
+ const fallback = `이번 주 남은 횟수 ${remaining}/${limit}`;
1726
+ const translated = resolveText(t, { key: 'license.usage_weekly', values: { remaining, limit } }, fallback) ?? fallback;
1331
1727
  return translated.includes(String(remaining)) ? translated : fallback;
1332
1728
  }
1333
- return `남은 횟수 ${remaining}/${limit}`;
1729
+ return resolveText(t, { key: 'license.usage_generic', values: { remaining, limit } }, `남은 횟수 ${remaining}/${limit}`) ?? `남은 횟수 ${remaining}/${limit}`;
1334
1730
  }
1335
- 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, }) => {
1731
+ 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, locale, className, }) => {
1732
+ const { t: translate } = useFigmaUiI18n(locale, t);
1336
1733
  const links = React.useMemo(() => ({
1337
1734
  purchaseUrl: wordpressLinks?.purchaseUrl ?? paymentPageUrl,
1338
1735
  membershipUrl: membershipUrl ?? wordpressLinks?.membershipUrl,
@@ -1354,7 +1751,7 @@ const PageLicense = ({ status: initialStatus, onClose, licenseKey: initialLicens
1354
1751
  const [licenseKeyDraft, setLicenseKeyDraft] = React.useState(initialLicenseKey);
1355
1752
  const isPaid = state.isLicenseRegistered && state.paymentStatus === 'PAID';
1356
1753
  const isMembershipMode = mode === 'youtube-membership';
1357
- const usageLabel = formatUsageLabel(state, t);
1754
+ const usageLabel = formatUsageLabel(state, translate);
1358
1755
  const handleLicenseSubmit = async (submittedLicenseKey) => {
1359
1756
  if (onLicenseSubmit) {
1360
1757
  await onLicenseSubmit(submittedLicenseKey);
@@ -1371,79 +1768,80 @@ const PageLicense = ({ status: initialStatus, onClose, licenseKey: initialLicens
1371
1768
  React.createElement("div", { className: "designbase-figma-page-license__header" },
1372
1769
  React.createElement("div", { className: "designbase-figma-page-license__title" },
1373
1770
  React.createElement("h2", null, isMembershipMode
1374
- ? resolveText(t, { key: 'license.youtube_membership' }, 'YouTube 멤버십')
1771
+ ? resolveText(translate, { key: 'license.youtube_membership' }, 'YouTube 멤버십')
1375
1772
  : isPaid
1376
- ? resolveText(t, { key: 'license.pro_account' }, '프로 계정')
1377
- : resolveText(t, { key: 'license.upgrade_to_pro' }, '프로로 업그레이드')),
1773
+ ? resolveText(translate, { key: 'license.pro_account' }, '프로 계정')
1774
+ : resolveText(translate, { key: 'license.upgrade_to_pro' }, '프로로 업그레이드')),
1378
1775
  state.planTier && state.planTier !== 'FREE' && (React.createElement("span", { className: "designbase-figma-page-license__tier" }, state.planTier))),
1379
1776
  React.createElement("p", { className: "designbase-figma-page-license__description" }, isPaid
1380
- ? resolveText(t, { key: 'license.all_features_available' }, '모든 기능을 사용할 수 있습니다.')
1777
+ ? resolveText(translate, { key: 'license.all_features_available' }, '모든 기능을 사용할 수 있습니다.')
1381
1778
  : isMembershipMode
1382
- ? resolveText(t, { key: 'license.youtube_membership_description' }, 'YouTube 멤버십에 가입하면 Designbase 플러그인을 무제한으로 사용할 수 있습니다.')
1383
- : resolveText(t, { key: 'license.purchase_for_unlimited' }, '디자인베이스 멤버십 또는 라이선스로 무제한 이용이 가능합니다.')),
1779
+ ? resolveText(translate, { key: 'license.youtube_membership_description' }, 'YouTube 멤버십에 가입하면 Designbase 플러그인을 무제한으로 사용할 수 있습니다.')
1780
+ : resolveText(translate, { key: 'license.purchase_for_unlimited' }, '디자인베이스 멤버십 또는 라이선스로 무제한 이용이 가능합니다.')),
1384
1781
  !isPaid && !isMembershipMode && (React.createElement("p", { className: "designbase-figma-page-license__usage" }, usageLabel))),
1385
- !isMembershipMode && (React.createElement(PricingComparison, { features: pricingFeatures, pricing: pricing, paymentType: paymentType, t: t })),
1782
+ !isMembershipMode && (React.createElement(PricingComparison, { features: pricingFeatures, pricing: pricing, paymentType: paymentType, t: translate })),
1386
1783
  state.lastMessage && !state.deactivateMessage && (React.createElement("p", { className: `designbase-figma-page-license__feedback ${state.lastErrorCode ? 'designbase-figma-page-license__feedback--error' : ''}`, "aria-live": "polite" }, state.lastMessage)),
1387
1784
  isPaid && (React.createElement("div", { className: "designbase-figma-page-license__section" },
1388
1785
  React.createElement("div", { className: "designbase-figma-page-license__section-header" },
1389
- React.createElement("h3", null, resolveText(t, { key: 'license.activated' }, '라이선스 활성화됨')),
1786
+ React.createElement("h3", null, resolveText(translate, { key: 'license.activated' }, '라이선스 활성화됨')),
1390
1787
  React.createElement(react.Button, { onPress: () => setShowDetails(!showDetails), variant: "tertiary", size: "s", iconOnly: true },
1391
1788
  React.createElement(icons.MoreHorizontalIcon, { size: 16 }))),
1392
- 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, allowRevealKey: false, t: t }),
1789
+ 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, allowRevealKey: false, t: translate }),
1393
1790
  React.createElement("p", { className: "designbase-figma-page-license__usage" }, usageLabel),
1394
1791
  showDetails && (React.createElement("div", { className: "designbase-figma-page-license__details" },
1395
1792
  React.createElement("div", { className: "designbase-figma-page-license__activation-info" },
1396
1793
  React.createElement("div", { className: "designbase-figma-page-license__remaining" },
1397
1794
  Math.max(0, state.activationLimit - state.activationUsage),
1398
1795
  ' ',
1399
- resolveText(t, { key: 'license.activations_remaining' }, '활성'),
1796
+ resolveText(translate, { key: 'license.activations_remaining' }, '활성'),
1400
1797
  ' ',
1401
- resolveText(t, { key: 'license.spots_remaining' }, '자리 남음')),
1798
+ resolveText(translate, { key: 'license.spots_remaining' }, '자리 남음')),
1402
1799
  React.createElement("div", { className: "designbase-figma-page-license__usage-count" },
1403
1800
  state.activationUsage,
1404
1801
  "/",
1405
1802
  state.activationLimit)),
1406
1803
  React.createElement("div", { className: "designbase-figma-page-license__action" },
1407
1804
  React.createElement(react.Button, { onPress: deactivateLicense, variant: "secondary", size: "s", fullWidth: true, disabled: isDeactivating }, isDeactivating
1408
- ? resolveText(t, { key: 'license.deactivating' }, '비활성화 중...')
1409
- : resolveText(t, { key: 'license.deactivate' }, '라이선스 비활성화')),
1805
+ ? resolveText(translate, { key: 'license.deactivating' }, '비활성화 중...')
1806
+ : resolveText(translate, { key: 'license.deactivate' }, '라이선스 비활성화')),
1410
1807
  state.deactivateMessage && (React.createElement("p", { className: `designbase-figma-page-license__action-feedback designbase-figma-page-license__action-feedback--${resolvePaymentFeedbackVariant(state.deactivateErrorCode)}`, role: state.deactivateErrorCode ? 'alert' : 'status', "aria-live": "polite" }, state.deactivateMessage))))))),
1411
1808
  !isPaid && (React.createElement(React.Fragment, null,
1412
- isMembershipMode && (React.createElement(LicenseOffer, { joinUrl: links.membershipUrl || links.purchaseUrl, guideUrl: links.helpUrl || links.purchaseUrl, t: t })),
1809
+ isMembershipMode && (React.createElement(LicenseOffer, { joinUrl: links.membershipUrl || links.purchaseUrl, guideUrl: links.helpUrl || links.purchaseUrl, t: translate })),
1413
1810
  !isMembershipMode && (enableAccountAuth || links.purchaseUrl || links.accountUrl) && (React.createElement("div", { className: "designbase-figma-page-license__section" },
1414
1811
  React.createElement("div", { className: "designbase-figma-page-license__section-header" },
1415
- React.createElement("h3", null, resolveText(t, { key: 'license.designbase_account' }, '디자인베이스 계정'))),
1416
- React.createElement("p", { className: "designbase-figma-page-license__hint" }, resolveText(t, { key: 'license.designbase_account_hint' }, 'WordPress 계정으로 로그인하거나 멤버십을 구매하면 플러그인이 자동으로 활성화됩니다.')),
1812
+ React.createElement("h3", null, resolveText(translate, { key: 'license.designbase_account' }, '디자인베이스 계정'))),
1813
+ React.createElement("p", { className: "designbase-figma-page-license__hint" }, resolveText(translate, { key: 'license.designbase_account_hint' }, 'WordPress 계정으로 로그인하거나 멤버십을 구매하면 플러그인이 자동으로 활성화됩니다.')),
1417
1814
  React.createElement("div", { className: "designbase-figma-page-license__actions" },
1418
1815
  enableAccountAuth && (React.createElement(react.Button, { onPress: startDesignbaseAuth, variant: "primary", size: "m", disabled: isStartingAuth || isVerifying, fullWidth: true }, isStartingAuth
1419
- ? resolveText(t, { key: 'license.authenticating' }, '인증 중...')
1420
- : resolveText(t, { key: 'license.login_with_designbase' }, '디자인베이스로 로그인'))),
1816
+ ? resolveText(translate, { key: 'license.authenticating' }, '인증 중...')
1817
+ : resolveText(translate, { key: 'license.login_with_designbase' }, '디자인베이스로 로그인'))),
1421
1818
  links.purchaseUrl && (React.createElement(react.Button, { onPress: () => openExternalUrl(links.purchaseUrl), variant: "secondary", size: "m", fullWidth: true },
1422
- React.createElement("span", null, resolveText(t, { key: 'license.purchase_membership' }, '멤버십 안내')),
1819
+ React.createElement("span", null, resolveText(translate, { key: 'license.purchase_membership' }, '멤버십 안내')),
1423
1820
  React.createElement(icons.ExternalLinkIcon, { size: 16 }))),
1424
1821
  links.accountUrl && (React.createElement(react.Button, { onPress: () => openExternalUrl(links.accountUrl), variant: "tertiary", size: "s", fullWidth: true },
1425
- React.createElement("span", null, resolveText(t, { key: 'license.manage_account' }, '계정·멤버십 관리')),
1822
+ React.createElement("span", null, resolveText(translate, { key: 'license.manage_account' }, '계정·멤버십 관리')),
1426
1823
  React.createElement(icons.ExternalLinkIcon, { size: 16 })))))),
1427
1824
  showLicenseKeyInput && (React.createElement("div", { className: isMembershipMode
1428
1825
  ? 'designbase-figma-page-license__key-form'
1429
1826
  : 'designbase-figma-page-license__section' },
1430
1827
  React.createElement("div", { className: "designbase-figma-page-license__section-header" },
1431
- React.createElement("h3", null, resolveText(t, { key: 'license.enter_key' }, '라이선스 키 입력'))),
1432
- React.createElement(FormWithSubmit, { onLicenseSubmit: handleLicenseSubmit, disabled: false, isSubmitting: isVerifying, value: licenseKeyDraft, onValueChange: handleLicenseKeyChange, label: { key: 'license.key' }, submitText: { key: 'license.submit' }, submittingText: { key: 'license.verifying' }, helperText: { key: isMembershipMode ? 'license.enter_from_youtube' : 'license.enter_from_email' }, t: t }))))),
1828
+ React.createElement("h3", null, resolveText(translate, { key: 'license.enter_key' }, '라이선스 키 입력'))),
1829
+ React.createElement(FormWithSubmit, { onLicenseSubmit: handleLicenseSubmit, disabled: false, isSubmitting: isVerifying, value: licenseKeyDraft, onValueChange: handleLicenseKeyChange, label: { key: 'license.key' }, submitText: { key: 'license.submit' }, submittingText: { key: 'license.verifying' }, helperText: { key: isMembershipMode ? 'license.enter_from_youtube' : 'license.enter_from_email' }, t: translate }))))),
1433
1830
  links.helpUrl && !isMembershipMode && (React.createElement("p", { className: "designbase-figma-page-license__disclaimer" },
1434
- React.createElement("button", { type: "button", className: "designbase-figma-page-license__link", onClick: () => openExternalUrl(links.helpUrl) }, resolveText(t, { key: 'license.help_link' }, '라이선스·결제 도움말'))))),
1435
- React.createElement(react.Button, { className: "designbase-figma-page-license__close", onPress: onClose, variant: "tertiary", size: "s", iconOnly: true, "aria-label": "Close" },
1831
+ React.createElement("button", { type: "button", className: "designbase-figma-page-license__link", onClick: () => openExternalUrl(links.helpUrl) }, resolveText(translate, { key: 'license.help_link' }, '라이선스·결제 도움말'))))),
1832
+ React.createElement(react.Button, { className: "designbase-figma-page-license__close", onPress: onClose, variant: "tertiary", size: "s", iconOnly: true, "aria-label": translate('close') },
1436
1833
  React.createElement(icons.CloseIcon, { size: 16 }))));
1437
1834
  };
1438
1835
  PageLicense.displayName = 'PageLicense';
1439
1836
 
1440
- const PaymentBadge = ({ isActive, onClick, isLoading = false, text, t = (key) => key, className, }) => {
1837
+ const PaymentBadge = ({ isActive, onClick, isLoading = false, text, t, locale, className, }) => {
1838
+ const { t: translate } = useFigmaUiI18n(locale, t);
1441
1839
  const getBadgeText = () => {
1442
1840
  if (text)
1443
1841
  return text;
1444
1842
  return isActive
1445
- ? (t('proUser') || '프로 계정')
1446
- : (t('usingFree') || '무료 사용');
1843
+ ? translate('proUser')
1844
+ : translate('usingFree');
1447
1845
  };
1448
1846
  const getBadgeVariant = () => {
1449
1847
  return isActive ? 'success' : 'secondary';
@@ -1452,7 +1850,8 @@ const PaymentBadge = ({ isActive, onClick, isLoading = false, text, t = (key) =>
1452
1850
  };
1453
1851
  PaymentBadge.displayName = 'PaymentBadge';
1454
1852
 
1455
- 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, autoComplete = true, autoCloseOnComplete = false }) => {
1853
+ 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, locale, autoComplete = true, autoCloseOnComplete = false }) => {
1854
+ const { t: translate } = useFigmaUiI18n(locale, t);
1456
1855
  const [isCompleted, setIsCompleted] = React.useState(false);
1457
1856
  const completeFiredRef = React.useRef(false);
1458
1857
  const { processedNodes, totalNodes } = progress;
@@ -1482,11 +1881,11 @@ const ProgressModal = ({ isOpen, onClose, progress, title = { key: 'progress.wor
1482
1881
  onClose();
1483
1882
  };
1484
1883
  const modalClasses = clsx('designbase-figma-progress-modal', className);
1485
- const displayTitle = resolveText(t, isCompleted ? completedMessage : title, isCompleted ? '완료되었습니다' : '작업 중');
1486
- const displayMessage = resolveText(t, isCompleted ? completedMessage : processingMessage, isCompleted ? '완료되었습니다' : '처리 중...');
1487
- const displayStopText = resolveText(t, stopButtonText, '중지');
1488
- const displayConfirmText = resolveText(t, confirmButtonText, '확인');
1489
- const displayHelpText = resolveText(t, helpText);
1884
+ const displayTitle = resolveText(translate, isCompleted ? completedMessage : title, isCompleted ? '완료되었습니다' : '작업 중');
1885
+ const displayMessage = resolveText(translate, isCompleted ? completedMessage : processingMessage, isCompleted ? '완료되었습니다' : '처리 중...');
1886
+ const displayStopText = resolveText(translate, stopButtonText, '중지');
1887
+ const displayConfirmText = resolveText(translate, confirmButtonText, '확인');
1888
+ const displayHelpText = resolveText(translate, helpText);
1490
1889
  return (React.createElement(react.Modal, { isOpen: isOpen, onClose: isCompleted ? onClose : undefined, title: displayTitle, size: "s", className: modalClasses, showCloseButton: false },
1491
1890
  React.createElement("div", { className: "designbase-figma-progress-modal__content" },
1492
1891
  React.createElement("div", { className: "designbase-figma-progress-modal__icon", "aria-hidden": "true" }, isCompleted ? (completeIcon || (React.createElement("div", { className: "designbase-figma-progress-modal__icon-success" },
@@ -1540,7 +1939,8 @@ const ResizablePlugin = ({ children, minWidth = 360, maxWidth = 460, minHeight =
1540
1939
  };
1541
1940
  ResizablePlugin.displayName = 'ResizablePlugin';
1542
1941
 
1543
- const SettingsModal = ({ isOpen, onClose, categories: initialCategories, categoryGroups, onSave, onReset, title = { key: 'settings.modal_title' }, description = { key: 'settings.modal_description' }, className, t }) => {
1942
+ const SettingsModal = ({ isOpen, onClose, categories: initialCategories, categoryGroups, onSave, onReset, title = { key: 'settings.modal_title' }, description = { key: 'settings.modal_description' }, className, t, locale, }) => {
1943
+ const { t: translate } = useFigmaUiI18n(locale, t);
1544
1944
  const [tempCategories, setTempCategories] = React.useState(initialCategories);
1545
1945
  const [draggedIndex, setDraggedIndex] = React.useState(null);
1546
1946
  React.useEffect(() => {
@@ -1633,8 +2033,8 @@ const SettingsModal = ({ isOpen, onClose, categories: initialCategories, categor
1633
2033
  }
1634
2034
  };
1635
2035
  const modalClasses = clsx('designbase-figma-settings-modal', className);
1636
- const displayTitle = resolveText(t, title, '목록 변경');
1637
- const displayDescription = resolveText(t, description, '드래그하여 순서를 변경하거나, 토글하여 카테고리를 숨길 수 있습니다.');
2036
+ const displayTitle = resolveText(translate, title, '목록 변경');
2037
+ const displayDescription = resolveText(translate, description, '드래그하여 순서를 변경하거나, 토글하여 카테고리를 숨길 수 있습니다.');
1638
2038
  return (React.createElement(react.Modal, { isOpen: isOpen, onClose: onClose, title: displayTitle, size: "m", className: modalClasses },
1639
2039
  React.createElement("div", { className: "designbase-figma-settings-modal__content" },
1640
2040
  displayDescription && (React.createElement("p", { className: "designbase-figma-settings-modal__description" }, displayDescription)),
@@ -1646,32 +2046,33 @@ const SettingsModal = ({ isOpen, onClose, categories: initialCategories, categor
1646
2046
  React.createElement("span", { className: "designbase-figma-settings-modal__drag-handle" },
1647
2047
  React.createElement(icons.GripVerticalIcon, { size: 16 })),
1648
2048
  category.icon && (React.createElement("span", { className: "designbase-figma-settings-modal__category-icon" }, category.icon)),
1649
- React.createElement("span", { className: "designbase-figma-settings-modal__category-title" }, resolveText(t, category.title))),
2049
+ React.createElement("span", { className: "designbase-figma-settings-modal__category-title" }, resolveText(translate, category.title))),
1650
2050
  React.createElement(react.Toggle, { checked: category.enabled, onChange: () => handleToggle(category.id), size: "s" })))))),
1651
2051
  React.createElement("div", { className: "designbase-figma-settings-modal__footer" },
1652
- onReset && (React.createElement(react.Button, { onPress: handleReset, variant: "tertiary", size: "s" }, resolveText(t, { key: 'settings.reset' }, '초기화'))),
2052
+ onReset && (React.createElement(react.Button, { onPress: handleReset, variant: "tertiary", size: "s" }, resolveText(translate, { key: 'settings.reset' }, '초기화'))),
1653
2053
  React.createElement("div", { className: "designbase-figma-settings-modal__footer-right" },
1654
- React.createElement(react.Button, { onPress: handleCancel, variant: "tertiary", size: "s" }, resolveText(t, { key: 'settings.cancel' }, '취소')),
1655
- React.createElement(react.Button, { onPress: handleSave, variant: "primary", size: "s" }, resolveText(t, { key: 'settings.save' }, '저장'))))));
2054
+ React.createElement(react.Button, { onPress: handleCancel, variant: "tertiary", size: "s" }, resolveText(translate, { key: 'settings.cancel' }, '취소')),
2055
+ React.createElement(react.Button, { onPress: handleSave, variant: "primary", size: "s" }, resolveText(translate, { key: 'settings.save' }, '저장'))))));
1656
2056
  };
1657
2057
  SettingsModal.displayName = 'SettingsModal';
1658
2058
 
1659
- const TitleDescription = ({ iconSrc, iconAlt = 'Icon', title, description, button, features, className, t }) => {
2059
+ const TitleDescription = ({ iconSrc, iconAlt = 'Icon', title, description, button, features, className, t, locale, }) => {
2060
+ const { t: translate } = useFigmaUiI18n(locale, t);
1660
2061
  const classes = [
1661
2062
  'designbase-figma-title-description',
1662
2063
  className,
1663
2064
  ]
1664
2065
  .filter(Boolean)
1665
2066
  .join(' ');
1666
- const displayTitle = resolveText(t, title);
1667
- const displayDescription = resolveText(t, description);
2067
+ const displayTitle = resolveText(translate, title);
2068
+ const displayDescription = resolveText(translate, description);
1668
2069
  return (React.createElement("div", { className: classes },
1669
2070
  iconSrc && (React.createElement("img", { className: "designbase-figma-title-description__icon", src: iconSrc, alt: iconAlt })),
1670
2071
  React.createElement("h5", { className: "designbase-figma-title-description__title" }, displayTitle),
1671
2072
  React.createElement("p", { className: "designbase-figma-title-description__description" }, displayDescription),
1672
2073
  button && React.createElement("div", { className: "designbase-figma-title-description__button" }, button),
1673
2074
  features && features.length > 0 && (React.createElement("ul", { className: "designbase-figma-title-description__features" }, features.map((feature, index) => {
1674
- const displayFeature = resolveText(t, feature);
2075
+ const displayFeature = resolveText(translate, feature);
1675
2076
  return (React.createElement("li", { key: index, className: "designbase-figma-title-description__feature-item" },
1676
2077
  React.createElement("span", { className: "designbase-figma-title-description__check-icon" },
1677
2078
  React.createElement("svg", { width: "16", height: "16", viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg" },
@@ -1682,10 +2083,11 @@ const TitleDescription = ({ iconSrc, iconAlt = 'Icon', title, description, butto
1682
2083
  };
1683
2084
  TitleDescription.displayName = 'TitleDescription';
1684
2085
 
1685
- const UpgradeBanner = ({ onClick, variant = 'button', isLoading = false, title = { key: 'banner.upgrade_title' }, description = { key: 'banner.upgrade_description' }, buttonText = { key: 'banner.upgrade_button' }, useGradient = false, gradientScheme = 'primary', gradientTone = 'light', gradientAnimated = true, className, t }) => {
1686
- const displayTitle = resolveText(t, title, '프로로 업그레이드하세요');
1687
- const displayDescription = resolveText(t, description, '무제한 기능을 사용하고 더 많은 혜택을 누리세요.');
1688
- const displayButtonText = resolveText(t, buttonText, '지금 업그레이드');
2086
+ const UpgradeBanner = ({ onClick, variant = 'button', isLoading = false, title = { key: 'banner.upgrade_title' }, description = { key: 'banner.upgrade_description' }, buttonText = { key: 'banner.upgrade_button' }, useGradient = false, gradientScheme = 'primary', gradientTone = 'light', gradientAnimated = true, className, t, locale, }) => {
2087
+ const { t: translate } = useFigmaUiI18n(locale, t);
2088
+ const displayTitle = resolveText(translate, title, '프로로 업그레이드하세요');
2089
+ const displayDescription = resolveText(translate, description, '무제한 기능을 사용하고 더 많은 혜택을 누리세요.');
2090
+ const displayButtonText = resolveText(translate, buttonText, '지금 업그레이드');
1689
2091
  const bannerContent = (React.createElement("div", { className: `designbase-figma-upgrade-banner__content designbase-figma-upgrade-banner__content--${variant}`, onClick: variant === 'clickable' ? onClick : undefined, role: variant === 'clickable' ? 'button' : undefined, tabIndex: variant === 'clickable' ? 0 : undefined, onKeyDown: variant === 'clickable' ? (e) => {
1690
2092
  if (e.key === 'Enter' || e.key === ' ') {
1691
2093
  e.preventDefault();
@@ -1701,540 +2103,544 @@ const UpgradeBanner = ({ onClick, variant = 'button', isLoading = false, title =
1701
2103
  };
1702
2104
  UpgradeBanner.displayName = 'UpgradeBanner';
1703
2105
 
1704
- Object.defineProperty(exports, 'Accordion', {
2106
+ Object.defineProperty(exports, "Accordion", {
1705
2107
  enumerable: true,
1706
2108
  get: function () { return react.Accordion; }
1707
2109
  });
1708
- Object.defineProperty(exports, 'ActivityHeatmap', {
2110
+ Object.defineProperty(exports, "ActivityHeatmap", {
1709
2111
  enumerable: true,
1710
2112
  get: function () { return react.ActivityHeatmap; }
1711
2113
  });
1712
- Object.defineProperty(exports, 'AdBanner', {
2114
+ Object.defineProperty(exports, "AdBanner", {
1713
2115
  enumerable: true,
1714
2116
  get: function () { return react.AdBanner; }
1715
2117
  });
1716
- Object.defineProperty(exports, 'AiChat', {
2118
+ Object.defineProperty(exports, "AiChat", {
1717
2119
  enumerable: true,
1718
2120
  get: function () { return react.AiChat; }
1719
2121
  });
1720
- Object.defineProperty(exports, 'AiChatList', {
2122
+ Object.defineProperty(exports, "AiChatList", {
1721
2123
  enumerable: true,
1722
2124
  get: function () { return react.AiChatList; }
1723
2125
  });
1724
- Object.defineProperty(exports, 'Alert', {
2126
+ Object.defineProperty(exports, "Alert", {
1725
2127
  enumerable: true,
1726
2128
  get: function () { return react.Alert; }
1727
2129
  });
1728
- Object.defineProperty(exports, 'AnimationBackground', {
2130
+ Object.defineProperty(exports, "AnimationBackground", {
1729
2131
  enumerable: true,
1730
2132
  get: function () { return react.AnimationBackground; }
1731
2133
  });
1732
- Object.defineProperty(exports, 'AnimationText', {
2134
+ Object.defineProperty(exports, "AnimationText", {
1733
2135
  enumerable: true,
1734
2136
  get: function () { return react.AnimationText; }
1735
2137
  });
1736
- Object.defineProperty(exports, 'AppBadge', {
2138
+ Object.defineProperty(exports, "AppBadge", {
1737
2139
  enumerable: true,
1738
2140
  get: function () { return react.AppBadge; }
1739
2141
  });
1740
- Object.defineProperty(exports, 'AudioPlayer', {
2142
+ Object.defineProperty(exports, "AudioPlayer", {
1741
2143
  enumerable: true,
1742
2144
  get: function () { return react.AudioPlayer; }
1743
2145
  });
1744
- Object.defineProperty(exports, 'Avatar', {
2146
+ Object.defineProperty(exports, "Avatar", {
1745
2147
  enumerable: true,
1746
2148
  get: function () { return react.Avatar; }
1747
2149
  });
1748
- Object.defineProperty(exports, 'Backdrop', {
2150
+ Object.defineProperty(exports, "Backdrop", {
1749
2151
  enumerable: true,
1750
2152
  get: function () { return react.Backdrop; }
1751
2153
  });
1752
- Object.defineProperty(exports, 'Badge', {
2154
+ Object.defineProperty(exports, "Badge", {
1753
2155
  enumerable: true,
1754
2156
  get: function () { return react.Badge; }
1755
2157
  });
1756
- Object.defineProperty(exports, 'Banner', {
2158
+ Object.defineProperty(exports, "Banner", {
1757
2159
  enumerable: true,
1758
2160
  get: function () { return react.Banner; }
1759
2161
  });
1760
- Object.defineProperty(exports, 'BottomNavigation', {
2162
+ Object.defineProperty(exports, "BottomNavigation", {
1761
2163
  enumerable: true,
1762
2164
  get: function () { return react.BottomNavigation; }
1763
2165
  });
1764
- Object.defineProperty(exports, 'BottomSheet', {
2166
+ Object.defineProperty(exports, "BottomSheet", {
1765
2167
  enumerable: true,
1766
2168
  get: function () { return react.BottomSheet; }
1767
2169
  });
1768
- Object.defineProperty(exports, 'Breadcrumbs', {
2170
+ Object.defineProperty(exports, "Breadcrumbs", {
1769
2171
  enumerable: true,
1770
2172
  get: function () { return react.Breadcrumbs; }
1771
2173
  });
1772
- Object.defineProperty(exports, 'Button', {
2174
+ Object.defineProperty(exports, "Button", {
1773
2175
  enumerable: true,
1774
2176
  get: function () { return react.Button; }
1775
2177
  });
1776
- Object.defineProperty(exports, 'Calendar', {
2178
+ Object.defineProperty(exports, "Calendar", {
1777
2179
  enumerable: true,
1778
2180
  get: function () { return react.Calendar; }
1779
2181
  });
1780
- Object.defineProperty(exports, 'Card', {
2182
+ Object.defineProperty(exports, "Card", {
1781
2183
  enumerable: true,
1782
2184
  get: function () { return react.Card; }
1783
2185
  });
1784
- Object.defineProperty(exports, 'Carousel', {
2186
+ Object.defineProperty(exports, "Carousel", {
1785
2187
  enumerable: true,
1786
2188
  get: function () { return react.Carousel; }
1787
2189
  });
1788
- Object.defineProperty(exports, 'ChatComposer', {
2190
+ Object.defineProperty(exports, "ChatComposer", {
1789
2191
  enumerable: true,
1790
2192
  get: function () { return react.ChatComposer; }
1791
2193
  });
1792
- Object.defineProperty(exports, 'ChatList', {
2194
+ Object.defineProperty(exports, "ChatList", {
1793
2195
  enumerable: true,
1794
2196
  get: function () { return react.ChatList; }
1795
2197
  });
1796
- Object.defineProperty(exports, 'ChatMessage', {
2198
+ Object.defineProperty(exports, "ChatMessage", {
1797
2199
  enumerable: true,
1798
2200
  get: function () { return react.ChatMessage; }
1799
2201
  });
1800
- Object.defineProperty(exports, 'ChatOrb', {
2202
+ Object.defineProperty(exports, "ChatOrb", {
1801
2203
  enumerable: true,
1802
2204
  get: function () { return react.ChatOrb; }
1803
2205
  });
1804
- Object.defineProperty(exports, 'ChatRoom', {
2206
+ Object.defineProperty(exports, "ChatRoom", {
1805
2207
  enumerable: true,
1806
2208
  get: function () { return react.ChatRoom; }
1807
2209
  });
1808
- Object.defineProperty(exports, 'ChatSuggestions', {
2210
+ Object.defineProperty(exports, "ChatSuggestions", {
1809
2211
  enumerable: true,
1810
2212
  get: function () { return react.ChatSuggestions; }
1811
2213
  });
1812
- Object.defineProperty(exports, 'ChatTyping', {
2214
+ Object.defineProperty(exports, "ChatTyping", {
1813
2215
  enumerable: true,
1814
2216
  get: function () { return react.ChatTyping; }
1815
2217
  });
1816
- Object.defineProperty(exports, 'ChatWelcome', {
2218
+ Object.defineProperty(exports, "ChatWelcome", {
1817
2219
  enumerable: true,
1818
2220
  get: function () { return react.ChatWelcome; }
1819
2221
  });
1820
- Object.defineProperty(exports, 'ChatWidget', {
2222
+ Object.defineProperty(exports, "ChatWidget", {
1821
2223
  enumerable: true,
1822
2224
  get: function () { return react.ChatWidget; }
1823
2225
  });
1824
- Object.defineProperty(exports, 'Checkbox', {
2226
+ Object.defineProperty(exports, "Checkbox", {
1825
2227
  enumerable: true,
1826
2228
  get: function () { return react.Checkbox; }
1827
2229
  });
1828
- Object.defineProperty(exports, 'Chip', {
2230
+ Object.defineProperty(exports, "Chip", {
1829
2231
  enumerable: true,
1830
2232
  get: function () { return react.Chip; }
1831
2233
  });
1832
- Object.defineProperty(exports, 'CodeBlock', {
2234
+ Object.defineProperty(exports, "CodeBlock", {
1833
2235
  enumerable: true,
1834
2236
  get: function () { return react.CodeBlock; }
1835
2237
  });
1836
- Object.defineProperty(exports, 'ColorPicker', {
2238
+ Object.defineProperty(exports, "ColorPicker", {
1837
2239
  enumerable: true,
1838
2240
  get: function () { return react.ColorPicker; }
1839
2241
  });
1840
- Object.defineProperty(exports, 'ColorSwatch', {
2242
+ Object.defineProperty(exports, "ColorSwatch", {
1841
2243
  enumerable: true,
1842
2244
  get: function () { return react.ColorSwatch; }
1843
2245
  });
1844
- Object.defineProperty(exports, 'Confirm', {
2246
+ Object.defineProperty(exports, "Confirm", {
1845
2247
  enumerable: true,
1846
2248
  get: function () { return react.Confirm; }
1847
2249
  });
1848
- Object.defineProperty(exports, 'Container', {
2250
+ Object.defineProperty(exports, "Container", {
1849
2251
  enumerable: true,
1850
2252
  get: function () { return react.Container; }
1851
2253
  });
1852
- Object.defineProperty(exports, 'ContextMenu', {
2254
+ Object.defineProperty(exports, "ContextMenu", {
1853
2255
  enumerable: true,
1854
2256
  get: function () { return react.ContextMenu; }
1855
2257
  });
1856
- Object.defineProperty(exports, 'CookieBanner', {
2258
+ Object.defineProperty(exports, "CookieBanner", {
1857
2259
  enumerable: true,
1858
2260
  get: function () { return react.CookieBanner; }
1859
2261
  });
1860
- Object.defineProperty(exports, 'Countdown', {
2262
+ Object.defineProperty(exports, "Countdown", {
1861
2263
  enumerable: true,
1862
2264
  get: function () { return react.Countdown; }
1863
2265
  });
1864
- Object.defineProperty(exports, 'CursorFollower', {
2266
+ Object.defineProperty(exports, "CursorFollower", {
1865
2267
  enumerable: true,
1866
2268
  get: function () { return react.CursorFollower; }
1867
2269
  });
1868
- Object.defineProperty(exports, 'DatePicker', {
2270
+ Object.defineProperty(exports, "DatePicker", {
1869
2271
  enumerable: true,
1870
2272
  get: function () { return react.DatePicker; }
1871
2273
  });
1872
- Object.defineProperty(exports, 'Divider', {
2274
+ Object.defineProperty(exports, "Divider", {
1873
2275
  enumerable: true,
1874
2276
  get: function () { return react.Divider; }
1875
2277
  });
1876
- Object.defineProperty(exports, 'DownloadProgress', {
2278
+ Object.defineProperty(exports, "DownloadProgress", {
1877
2279
  enumerable: true,
1878
2280
  get: function () { return react.DownloadProgress; }
1879
2281
  });
1880
- Object.defineProperty(exports, 'Drawer', {
2282
+ Object.defineProperty(exports, "Drawer", {
1881
2283
  enumerable: true,
1882
2284
  get: function () { return react.Drawer; }
1883
2285
  });
1884
- Object.defineProperty(exports, 'Dropdown', {
2286
+ Object.defineProperty(exports, "Dropdown", {
1885
2287
  enumerable: true,
1886
2288
  get: function () { return react.Dropdown; }
1887
2289
  });
1888
- Object.defineProperty(exports, 'Dropzone', {
2290
+ Object.defineProperty(exports, "Dropzone", {
1889
2291
  enumerable: true,
1890
2292
  get: function () { return react.Dropzone; }
1891
2293
  });
1892
- Object.defineProperty(exports, 'EmailVerify', {
2294
+ Object.defineProperty(exports, "EmailVerify", {
1893
2295
  enumerable: true,
1894
2296
  get: function () { return react.EmailVerify; }
1895
2297
  });
1896
- Object.defineProperty(exports, 'EmptyState', {
2298
+ Object.defineProperty(exports, "EmptyState", {
1897
2299
  enumerable: true,
1898
2300
  get: function () { return react.EmptyState; }
1899
2301
  });
1900
- Object.defineProperty(exports, 'FileUploader', {
2302
+ Object.defineProperty(exports, "FileUploader", {
1901
2303
  enumerable: true,
1902
2304
  get: function () { return react.FileUploader; }
1903
2305
  });
1904
- Object.defineProperty(exports, 'FloatingActionButton', {
2306
+ Object.defineProperty(exports, "FloatingActionButton", {
1905
2307
  enumerable: true,
1906
2308
  get: function () { return react.FloatingActionButton; }
1907
2309
  });
1908
- Object.defineProperty(exports, 'Footer', {
2310
+ Object.defineProperty(exports, "Footer", {
1909
2311
  enumerable: true,
1910
2312
  get: function () { return react.Footer; }
1911
2313
  });
1912
- Object.defineProperty(exports, 'Form', {
2314
+ Object.defineProperty(exports, "Form", {
1913
2315
  enumerable: true,
1914
2316
  get: function () { return react.Form; }
1915
2317
  });
1916
- Object.defineProperty(exports, 'Gantt', {
2318
+ Object.defineProperty(exports, "Gantt", {
1917
2319
  enumerable: true,
1918
2320
  get: function () { return react.Gantt; }
1919
2321
  });
1920
- Object.defineProperty(exports, 'Gradient', {
2322
+ Object.defineProperty(exports, "Gradient", {
1921
2323
  enumerable: true,
1922
2324
  get: function () { return react.Gradient; }
1923
2325
  });
1924
- Object.defineProperty(exports, 'Grid', {
2326
+ Object.defineProperty(exports, "Grid", {
1925
2327
  enumerable: true,
1926
2328
  get: function () { return react.Grid; }
1927
2329
  });
1928
- Object.defineProperty(exports, 'GridBackground', {
2330
+ Object.defineProperty(exports, "GridBackground", {
1929
2331
  enumerable: true,
1930
2332
  get: function () { return react.GridBackground; }
1931
2333
  });
1932
- Object.defineProperty(exports, 'GridItem', {
2334
+ Object.defineProperty(exports, "GridItem", {
1933
2335
  enumerable: true,
1934
2336
  get: function () { return react.GridItem; }
1935
2337
  });
1936
- Object.defineProperty(exports, 'Image', {
2338
+ Object.defineProperty(exports, "Image", {
1937
2339
  enumerable: true,
1938
2340
  get: function () { return react.Image; }
1939
2341
  });
1940
- Object.defineProperty(exports, 'ImageList', {
2342
+ Object.defineProperty(exports, "ImageList", {
1941
2343
  enumerable: true,
1942
2344
  get: function () { return react.ImageList; }
1943
2345
  });
1944
- Object.defineProperty(exports, 'ImagePlaceholder', {
2346
+ Object.defineProperty(exports, "ImagePlaceholder", {
1945
2347
  enumerable: true,
1946
2348
  get: function () { return react.ImagePlaceholder; }
1947
2349
  });
1948
- Object.defineProperty(exports, 'Indicator', {
2350
+ Object.defineProperty(exports, "Indicator", {
1949
2351
  enumerable: true,
1950
2352
  get: function () { return react.Indicator; }
1951
2353
  });
1952
- Object.defineProperty(exports, 'Input', {
2354
+ Object.defineProperty(exports, "Input", {
1953
2355
  enumerable: true,
1954
2356
  get: function () { return react.Input; }
1955
2357
  });
1956
- Object.defineProperty(exports, 'Kanban', {
2358
+ Object.defineProperty(exports, "Kanban", {
1957
2359
  enumerable: true,
1958
2360
  get: function () { return react.Kanban; }
1959
2361
  });
1960
- Object.defineProperty(exports, 'Label', {
2362
+ Object.defineProperty(exports, "Label", {
1961
2363
  enumerable: true,
1962
2364
  get: function () { return react.Label; }
1963
2365
  });
1964
- Object.defineProperty(exports, 'Lightbox', {
2366
+ Object.defineProperty(exports, "Lightbox", {
1965
2367
  enumerable: true,
1966
2368
  get: function () { return react.Lightbox; }
1967
2369
  });
1968
- Object.defineProperty(exports, 'List', {
2370
+ Object.defineProperty(exports, "List", {
1969
2371
  enumerable: true,
1970
2372
  get: function () { return react.List; }
1971
2373
  });
1972
- Object.defineProperty(exports, 'Logo', {
2374
+ Object.defineProperty(exports, "Logo", {
1973
2375
  enumerable: true,
1974
2376
  get: function () { return react.Logo; }
1975
2377
  });
1976
- Object.defineProperty(exports, 'MarkdownEditor', {
2378
+ Object.defineProperty(exports, "MarkdownEditor", {
1977
2379
  enumerable: true,
1978
2380
  get: function () { return react.MarkdownEditor; }
1979
2381
  });
1980
- Object.defineProperty(exports, 'Marquee', {
2382
+ Object.defineProperty(exports, "Marquee", {
1981
2383
  enumerable: true,
1982
2384
  get: function () { return react.Marquee; }
1983
2385
  });
1984
- Object.defineProperty(exports, 'Masonry', {
2386
+ Object.defineProperty(exports, "Masonry", {
1985
2387
  enumerable: true,
1986
2388
  get: function () { return react.Masonry; }
1987
2389
  });
1988
- Object.defineProperty(exports, 'MenuItem', {
2390
+ Object.defineProperty(exports, "MenuItem", {
1989
2391
  enumerable: true,
1990
2392
  get: function () { return react.MenuItem; }
1991
2393
  });
1992
- Object.defineProperty(exports, 'Modal', {
2394
+ Object.defineProperty(exports, "Modal", {
1993
2395
  enumerable: true,
1994
2396
  get: function () { return react.Modal; }
1995
2397
  });
1996
- Object.defineProperty(exports, 'ModalBody', {
2398
+ Object.defineProperty(exports, "ModalBody", {
1997
2399
  enumerable: true,
1998
2400
  get: function () { return react.ModalBody; }
1999
2401
  });
2000
- Object.defineProperty(exports, 'ModalFooter', {
2402
+ Object.defineProperty(exports, "ModalFooter", {
2001
2403
  enumerable: true,
2002
2404
  get: function () { return react.ModalFooter; }
2003
2405
  });
2004
- Object.defineProperty(exports, 'ModalHeader', {
2406
+ Object.defineProperty(exports, "ModalHeader", {
2005
2407
  enumerable: true,
2006
2408
  get: function () { return react.ModalHeader; }
2007
2409
  });
2008
- Object.defineProperty(exports, 'Navbar', {
2410
+ Object.defineProperty(exports, "Navbar", {
2009
2411
  enumerable: true,
2010
2412
  get: function () { return react.Navbar; }
2011
2413
  });
2012
- Object.defineProperty(exports, 'OnboardingModal', {
2414
+ Object.defineProperty(exports, "OnboardingModal", {
2013
2415
  enumerable: true,
2014
2416
  get: function () { return react.OnboardingModal; }
2015
2417
  });
2016
- Object.defineProperty(exports, 'OtpInput', {
2418
+ Object.defineProperty(exports, "OtpInput", {
2017
2419
  enumerable: true,
2018
2420
  get: function () { return react.OtpInput; }
2019
2421
  });
2020
- Object.defineProperty(exports, 'PageHeader', {
2422
+ Object.defineProperty(exports, "PageHeader", {
2021
2423
  enumerable: true,
2022
2424
  get: function () { return react.PageHeader; }
2023
2425
  });
2024
- Object.defineProperty(exports, 'Pagination', {
2426
+ Object.defineProperty(exports, "Pagination", {
2025
2427
  enumerable: true,
2026
2428
  get: function () { return react.Pagination; }
2027
2429
  });
2028
- Object.defineProperty(exports, 'PhoneVerify', {
2430
+ Object.defineProperty(exports, "PhoneVerify", {
2029
2431
  enumerable: true,
2030
2432
  get: function () { return react.PhoneVerify; }
2031
2433
  });
2032
- Object.defineProperty(exports, 'Popover', {
2434
+ Object.defineProperty(exports, "Popover", {
2033
2435
  enumerable: true,
2034
2436
  get: function () { return react.Popover; }
2035
2437
  });
2036
- Object.defineProperty(exports, 'Progress', {
2438
+ Object.defineProperty(exports, "Progress", {
2037
2439
  enumerable: true,
2038
2440
  get: function () { return react.Progress; }
2039
2441
  });
2040
- Object.defineProperty(exports, 'ProgressStep', {
2442
+ Object.defineProperty(exports, "ProgressStep", {
2041
2443
  enumerable: true,
2042
2444
  get: function () { return react.ProgressStep; }
2043
2445
  });
2044
- Object.defineProperty(exports, 'Progressbar', {
2446
+ Object.defineProperty(exports, "Progressbar", {
2045
2447
  enumerable: true,
2046
2448
  get: function () { return react.Progressbar; }
2047
2449
  });
2048
- Object.defineProperty(exports, 'Radio', {
2450
+ Object.defineProperty(exports, "Radio", {
2049
2451
  enumerable: true,
2050
2452
  get: function () { return react.Radio; }
2051
2453
  });
2052
- Object.defineProperty(exports, 'RandomGradient', {
2454
+ Object.defineProperty(exports, "RandomGradient", {
2053
2455
  enumerable: true,
2054
2456
  get: function () { return react.RandomGradient; }
2055
2457
  });
2056
- Object.defineProperty(exports, 'RangeSlider', {
2458
+ Object.defineProperty(exports, "RangeSlider", {
2057
2459
  enumerable: true,
2058
2460
  get: function () { return react.RangeSlider; }
2059
2461
  });
2060
- Object.defineProperty(exports, 'Rating', {
2462
+ Object.defineProperty(exports, "Rating", {
2061
2463
  enumerable: true,
2062
2464
  get: function () { return react.Rating; }
2063
2465
  });
2064
- Object.defineProperty(exports, 'Reorder', {
2466
+ Object.defineProperty(exports, "Reorder", {
2065
2467
  enumerable: true,
2066
2468
  get: function () { return react.Reorder; }
2067
2469
  });
2068
- Object.defineProperty(exports, 'ResizablePanels', {
2470
+ Object.defineProperty(exports, "ResizablePanels", {
2069
2471
  enumerable: true,
2070
2472
  get: function () { return react.ResizablePanels; }
2071
2473
  });
2072
- Object.defineProperty(exports, 'ScrollArea', {
2474
+ Object.defineProperty(exports, "ScrollArea", {
2073
2475
  enumerable: true,
2074
2476
  get: function () { return react.ScrollArea; }
2075
2477
  });
2076
- Object.defineProperty(exports, 'SearchBar', {
2478
+ Object.defineProperty(exports, "SearchBar", {
2077
2479
  enumerable: true,
2078
2480
  get: function () { return react.SearchBar; }
2079
2481
  });
2080
- Object.defineProperty(exports, 'Section', {
2482
+ Object.defineProperty(exports, "Section", {
2081
2483
  enumerable: true,
2082
2484
  get: function () { return react.Section; }
2083
2485
  });
2084
- Object.defineProperty(exports, 'SectionAppDownload', {
2486
+ Object.defineProperty(exports, "SectionAppDownload", {
2085
2487
  enumerable: true,
2086
2488
  get: function () { return react.SectionAppDownload; }
2087
2489
  });
2088
- Object.defineProperty(exports, 'SectionContact', {
2490
+ Object.defineProperty(exports, "SectionContact", {
2089
2491
  enumerable: true,
2090
2492
  get: function () { return react.SectionContact; }
2091
2493
  });
2092
- Object.defineProperty(exports, 'SectionCta', {
2494
+ Object.defineProperty(exports, "SectionCta", {
2093
2495
  enumerable: true,
2094
2496
  get: function () { return react.SectionCta; }
2095
2497
  });
2096
- Object.defineProperty(exports, 'SectionFaq', {
2498
+ Object.defineProperty(exports, "SectionFaq", {
2097
2499
  enumerable: true,
2098
2500
  get: function () { return react.SectionFaq; }
2099
2501
  });
2100
- Object.defineProperty(exports, 'SectionFeature', {
2502
+ Object.defineProperty(exports, "SectionFeature", {
2101
2503
  enumerable: true,
2102
2504
  get: function () { return react.SectionFeature; }
2103
2505
  });
2104
- Object.defineProperty(exports, 'SectionFeatureGrid', {
2506
+ Object.defineProperty(exports, "SectionFeatureGrid", {
2105
2507
  enumerable: true,
2106
2508
  get: function () { return react.SectionFeatureGrid; }
2107
2509
  });
2108
- Object.defineProperty(exports, 'SectionHero', {
2510
+ Object.defineProperty(exports, "SectionHero", {
2109
2511
  enumerable: true,
2110
2512
  get: function () { return react.SectionHero; }
2111
2513
  });
2112
- Object.defineProperty(exports, 'SectionLogoCloud', {
2514
+ Object.defineProperty(exports, "SectionLogoCloud", {
2113
2515
  enumerable: true,
2114
2516
  get: function () { return react.SectionLogoCloud; }
2115
2517
  });
2116
- Object.defineProperty(exports, 'SectionPricing', {
2518
+ Object.defineProperty(exports, "SectionPricing", {
2117
2519
  enumerable: true,
2118
2520
  get: function () { return react.SectionPricing; }
2119
2521
  });
2120
- Object.defineProperty(exports, 'SectionStats', {
2522
+ Object.defineProperty(exports, "SectionStats", {
2121
2523
  enumerable: true,
2122
2524
  get: function () { return react.SectionStats; }
2123
2525
  });
2124
- Object.defineProperty(exports, 'SectionTestimonials', {
2526
+ Object.defineProperty(exports, "SectionTestimonials", {
2125
2527
  enumerable: true,
2126
2528
  get: function () { return react.SectionTestimonials; }
2127
2529
  });
2128
- Object.defineProperty(exports, 'SegmentControl', {
2530
+ Object.defineProperty(exports, "SegmentControl", {
2129
2531
  enumerable: true,
2130
2532
  get: function () { return react.SegmentControl; }
2131
2533
  });
2132
- Object.defineProperty(exports, 'Select', {
2534
+ Object.defineProperty(exports, "Select", {
2133
2535
  enumerable: true,
2134
2536
  get: function () { return react.Select; }
2135
2537
  });
2136
- Object.defineProperty(exports, 'Share', {
2538
+ Object.defineProperty(exports, "Share", {
2137
2539
  enumerable: true,
2138
2540
  get: function () { return react.Share; }
2139
2541
  });
2140
- Object.defineProperty(exports, 'Sidebar', {
2542
+ Object.defineProperty(exports, "Sidebar", {
2141
2543
  enumerable: true,
2142
2544
  get: function () { return react.Sidebar; }
2143
2545
  });
2144
- Object.defineProperty(exports, 'Signature', {
2546
+ Object.defineProperty(exports, "Signature", {
2145
2547
  enumerable: true,
2146
2548
  get: function () { return react.Signature; }
2147
2549
  });
2148
- Object.defineProperty(exports, 'Skeleton', {
2550
+ Object.defineProperty(exports, "Skeleton", {
2149
2551
  enumerable: true,
2150
2552
  get: function () { return react.Skeleton; }
2151
2553
  });
2152
- Object.defineProperty(exports, 'Spinner', {
2554
+ Object.defineProperty(exports, "Spinner", {
2153
2555
  enumerable: true,
2154
2556
  get: function () { return react.Spinner; }
2155
2557
  });
2156
- Object.defineProperty(exports, 'SplitView', {
2558
+ Object.defineProperty(exports, "SplitView", {
2157
2559
  enumerable: true,
2158
2560
  get: function () { return react.SplitView; }
2159
2561
  });
2160
- Object.defineProperty(exports, 'Stack', {
2562
+ Object.defineProperty(exports, "Stack", {
2161
2563
  enumerable: true,
2162
2564
  get: function () { return react.Stack; }
2163
2565
  });
2164
- Object.defineProperty(exports, 'Stat', {
2566
+ Object.defineProperty(exports, "Stat", {
2165
2567
  enumerable: true,
2166
2568
  get: function () { return react.Stat; }
2167
2569
  });
2168
- Object.defineProperty(exports, 'Stepper', {
2570
+ Object.defineProperty(exports, "Stepper", {
2169
2571
  enumerable: true,
2170
2572
  get: function () { return react.Stepper; }
2171
2573
  });
2172
- Object.defineProperty(exports, 'Table', {
2574
+ Object.defineProperty(exports, "Table", {
2173
2575
  enumerable: true,
2174
2576
  get: function () { return react.Table; }
2175
2577
  });
2176
- Object.defineProperty(exports, 'Tabs', {
2578
+ Object.defineProperty(exports, "Tabs", {
2177
2579
  enumerable: true,
2178
2580
  get: function () { return react.Tabs; }
2179
2581
  });
2180
- Object.defineProperty(exports, 'Testimonial', {
2582
+ Object.defineProperty(exports, "Testimonial", {
2181
2583
  enumerable: true,
2182
2584
  get: function () { return react.Testimonial; }
2183
2585
  });
2184
- Object.defineProperty(exports, 'Textarea', {
2586
+ Object.defineProperty(exports, "Textarea", {
2185
2587
  enumerable: true,
2186
2588
  get: function () { return react.Textarea; }
2187
2589
  });
2188
- Object.defineProperty(exports, 'TimePicker', {
2590
+ Object.defineProperty(exports, "TimePicker", {
2189
2591
  enumerable: true,
2190
2592
  get: function () { return react.TimePicker; }
2191
2593
  });
2192
- Object.defineProperty(exports, 'Timeline', {
2594
+ Object.defineProperty(exports, "Timeline", {
2193
2595
  enumerable: true,
2194
2596
  get: function () { return react.Timeline; }
2195
2597
  });
2196
- Object.defineProperty(exports, 'Toast', {
2598
+ Object.defineProperty(exports, "Toast", {
2197
2599
  enumerable: true,
2198
2600
  get: function () { return react.Toast; }
2199
2601
  });
2200
- Object.defineProperty(exports, 'Toggle', {
2602
+ Object.defineProperty(exports, "Toggle", {
2201
2603
  enumerable: true,
2202
2604
  get: function () { return react.Toggle; }
2203
2605
  });
2204
- Object.defineProperty(exports, 'Toolbar', {
2606
+ Object.defineProperty(exports, "Toolbar", {
2205
2607
  enumerable: true,
2206
2608
  get: function () { return react.Toolbar; }
2207
2609
  });
2208
- Object.defineProperty(exports, 'Tooltip', {
2610
+ Object.defineProperty(exports, "Tooltip", {
2209
2611
  enumerable: true,
2210
2612
  get: function () { return react.Tooltip; }
2211
2613
  });
2212
- Object.defineProperty(exports, 'TopBanner', {
2614
+ Object.defineProperty(exports, "TopBanner", {
2213
2615
  enumerable: true,
2214
2616
  get: function () { return react.TopBanner; }
2215
2617
  });
2216
- Object.defineProperty(exports, 'Tutorial', {
2618
+ Object.defineProperty(exports, "Tutorial", {
2217
2619
  enumerable: true,
2218
2620
  get: function () { return react.Tutorial; }
2219
2621
  });
2220
- Object.defineProperty(exports, 'TwoFactor', {
2622
+ Object.defineProperty(exports, "TwoFactor", {
2221
2623
  enumerable: true,
2222
2624
  get: function () { return react.TwoFactor; }
2223
2625
  });
2224
- Object.defineProperty(exports, 'VideoPlayer', {
2626
+ Object.defineProperty(exports, "VideoPlayer", {
2225
2627
  enumerable: true,
2226
2628
  get: function () { return react.VideoPlayer; }
2227
2629
  });
2228
- Object.defineProperty(exports, 'YouTubePlayer', {
2630
+ Object.defineProperty(exports, "YouTubePlayer", {
2229
2631
  enumerable: true,
2230
2632
  get: function () { return react.YouTubePlayer; }
2231
2633
  });
2232
- Object.defineProperty(exports, 'useContextMenu', {
2634
+ Object.defineProperty(exports, "useContextMenu", {
2233
2635
  enumerable: true,
2234
2636
  get: function () { return react.useContextMenu; }
2235
2637
  });
2236
- exports.DEFAULT_LICENSE_MESSAGE_TYPES = DEFAULT_LICENSE_MESSAGE_TYPES;
2638
+ Object.defineProperty(exports, "DEFAULT_LICENSE_MESSAGE_TYPES", {
2639
+ enumerable: true,
2640
+ get: function () { return figmaLicenseCore.DEFAULT_LICENSE_MESSAGE_TYPES; }
2641
+ });
2237
2642
  exports.DonationBadge = DonationBadge;
2643
+ exports.FIGMA_UI_TRANSLATIONS = FIGMA_UI_TRANSLATIONS;
2238
2644
  exports.FigmaContainer = FigmaContainer;
2239
2645
  exports.FigmaFooter = FigmaFooter;
2240
2646
  exports.FigmaHeader = FigmaHeader;
@@ -2243,6 +2649,7 @@ exports.FigmaSection = FigmaSection;
2243
2649
  exports.FigmaSidebar = FigmaSidebar;
2244
2650
  exports.FigmaToast = FigmaToast;
2245
2651
  exports.FigmaToastProvider = FigmaToastProvider;
2652
+ exports.FigmaUiI18nProvider = FigmaUiI18nProvider;
2246
2653
  exports.FormWithSubmit = FormWithSubmit;
2247
2654
  exports.InteractionFeedback = InteractionFeedback;
2248
2655
  exports.LanguageSelector = LanguageSelector;
@@ -2261,13 +2668,16 @@ exports.SettingsModal = SettingsModal;
2261
2668
  exports.TitleDescription = TitleDescription;
2262
2669
  exports.UpgradeBanner = UpgradeBanner;
2263
2670
  exports.UsageStatusPopover = UsageStatusPopover;
2671
+ exports.createFigmaUiTranslator = createFigmaUiTranslator;
2264
2672
  exports.getActiveSection = getActiveSection;
2265
2673
  exports.interpolateText = interpolateText;
2674
+ exports.normalizeFigmaUiLocale = normalizeFigmaUiLocale;
2266
2675
  exports.resolvePaymentFeedbackVariant = resolvePaymentFeedbackVariant;
2267
2676
  exports.resolveText = resolveText;
2268
2677
  exports.scrollToSection = scrollToSection;
2269
2678
  exports.useFigmaLicenseBridge = useFigmaLicenseBridge;
2270
2679
  exports.useFigmaToast = useFigmaToast;
2680
+ exports.useFigmaUiI18n = useFigmaUiI18n;
2271
2681
  exports.useToast = useToast;
2272
2682
  Object.keys(react).forEach(function (k) {
2273
2683
  if (k !== 'default' && !Object.prototype.hasOwnProperty.call(exports, k)) Object.defineProperty(exports, k, {