sellmate-design-system-react 9.0.0-beta.103 → 9.0.0-beta.104

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.
Files changed (52) hide show
  1. package/AGENTS.md +4 -2
  2. package/dist/components/SAccountListBox/accountListBox.config.d.ts +4 -1
  3. package/dist/components/SBarcodeInput/README.md +1 -1
  4. package/dist/components/SBarcodeInput/SBarcodeInput.d.ts +1 -0
  5. package/dist/components/SCalendarBoard/CalendarDayEventListBox.d.ts +1 -1
  6. package/dist/components/SCalendarBoard/README.md +1 -1
  7. package/dist/components/SCalendarBoard/SCalendarBoard.d.ts +1 -1
  8. package/dist/components/SChatInput/README.md +1 -1
  9. package/dist/components/SChatInput/SChatInput.d.ts +1 -1
  10. package/dist/components/SConfirmModal/README.md +1 -1
  11. package/dist/components/SConfirmModal/SConfirmModal.d.ts +2 -2
  12. package/dist/components/SEditor/README.md +1 -1
  13. package/dist/components/SEditor/SEditor.d.ts +1 -1
  14. package/dist/components/SEditor/editor.config.d.ts +8 -1
  15. package/dist/components/SFooter/README.md +1 -1
  16. package/dist/components/SFooter/SFooter.d.ts +1 -1
  17. package/dist/components/SGnbSystem/gnbSystem.config.d.ts +0 -4
  18. package/dist/components/SGuide/README.md +1 -1
  19. package/dist/components/SGuide/SGuide.d.ts +1 -1
  20. package/dist/components/SIcon/README.md +1 -1
  21. package/dist/components/SIcon/SIcon.d.ts +5 -1
  22. package/dist/components/SIcon/icons.gen.d.ts +3 -1
  23. package/dist/components/SMeatballButton/README.md +2 -2
  24. package/dist/components/SMeatballButton/SMeatballButton.d.ts +5 -2
  25. package/dist/components/SModalContainer/README.md +1 -1
  26. package/dist/components/SModalContainer/SModalContainer.d.ts +5 -2
  27. package/dist/components/SNumberInput/README.md +1 -1
  28. package/dist/components/SSearchInput/README.md +1 -1
  29. package/dist/components/SSearchInput/SSearchInput.d.ts +1 -1
  30. package/dist/components/SStepper/README.md +1 -1
  31. package/dist/components/SStepper/SStepper.d.ts +2 -2
  32. package/dist/components/STable/README.md +3 -3
  33. package/dist/components/STable/STable.d.ts +3 -1
  34. package/dist/components/STableBar/README.md +1 -1
  35. package/dist/components/STableBar/STableBar.d.ts +1 -1
  36. package/dist/components/STimePicker/timepicker.config.d.ts +2 -1
  37. package/dist/components/STimeRangePicker/time-range-picker.config.d.ts +2 -1
  38. package/dist/components/STimeline/README.md +1 -1
  39. package/dist/components/STimeline/STimeline.d.ts +1 -0
  40. package/dist/index.cjs +1492 -478
  41. package/dist/index.cjs.map +1 -1
  42. package/dist/index.js +1492 -478
  43. package/dist/index.js.map +1 -1
  44. package/dist/lib/chart/radial.d.ts +2 -2
  45. package/dist/lib/date.d.ts +9 -5
  46. package/dist/lib/form.d.ts +5 -2
  47. package/dist/lib/locale.d.ts +274 -0
  48. package/dist/lib/tree-row.d.ts +1 -1
  49. package/dist/llms-full.txt +23 -21
  50. package/dist/llms.txt +4 -2
  51. package/dist/styles.css +3 -0
  52. package/package.json +1 -1
package/dist/index.cjs CHANGED
@@ -276,8 +276,211 @@ var fieldWidthValue = (v) => {
276
276
  // src/lib/locale.ts
277
277
  var SLOCALES = ["ko", "en", "ja", "zh"];
278
278
  var DEFAULT_LOCALE = "ko";
279
+ var koreanParticle = (word, consonant, vowel) => {
280
+ const code = word.charCodeAt(word.length - 1);
281
+ if (code < 44032 || code > 55203) return consonant;
282
+ return (code - 44032) % 28 === 0 ? vowel : consonant;
283
+ };
279
284
  var BUNDLES = {
280
285
  ko: {
286
+ accountListBox: { accountSetting: "\uACC4\uC815 \uC124\uC815", language: "\uC5B8\uC5B4 \uBCC0\uACBD", logout: "\uACC4\uC815 \uB85C\uADF8\uC544\uC6C3" },
287
+ gnbSystem: { alert: "\uC54C\uB9BC", setting: "\uC124\uC815" },
288
+ editor: {
289
+ placeholder: "\uB0B4\uC6A9\uC744 \uC785\uB825\uD574 \uC8FC\uC138\uC694.",
290
+ toolbarLabel: "\uC11C\uC2DD \uB3C4\uAD6C",
291
+ tableSize: "\uD45C \uD06C\uAE30",
292
+ linkUrl: "\uB9C1\uD06C \uC8FC\uC18C",
293
+ apply: "\uC801\uC6A9",
294
+ remove: "\uC81C\uAC70",
295
+ headingLevel: "\uC81C\uBAA9 \uB2E8\uACC4",
296
+ headingBody: "\uBCF8\uBB38",
297
+ fontSize: "\uAE00\uC790 \uD06C\uAE30",
298
+ fontSizeDefaultLabel: "\uAE30\uBCF8",
299
+ bold: "\uAD75\uAC8C",
300
+ italic: "\uAE30\uC6B8\uC784",
301
+ underline: "\uBC11\uC904",
302
+ strike: "\uCDE8\uC18C\uC120",
303
+ inlineCode: "\uC778\uB77C\uC778 \uCF54\uB4DC",
304
+ textColor: "\uAE00\uC790\uC0C9",
305
+ clearColor: "\uC0C9 \uC9C0\uC6B0\uAE30",
306
+ alignLeft: "\uC67C\uCABD \uC815\uB82C",
307
+ alignCenter: "\uAC00\uC6B4\uB370 \uC815\uB82C",
308
+ alignRight: "\uC624\uB978\uCABD \uC815\uB82C",
309
+ alignJustify: "\uC591\uCABD \uC815\uB82C",
310
+ bulletList: "\uAE00\uBA38\uB9AC \uAE30\uD638 \uBAA9\uB85D",
311
+ orderedList: "\uBC88\uD638 \uB9E4\uAE30\uAE30 \uBAA9\uB85D",
312
+ taskList: "\uCCB4\uD06C \uBAA9\uB85D",
313
+ list: "\uBAA9\uB85D",
314
+ blockquote: "\uC778\uC6A9\uAD6C",
315
+ codeBlock: "\uCF54\uB4DC \uBE14\uB85D",
316
+ divider: "\uAD6C\uBD84\uC120",
317
+ link: "\uB9C1\uD06C",
318
+ insertImage: "\uC774\uBBF8\uC9C0 \uB123\uAE30",
319
+ image: "\uC774\uBBF8\uC9C0",
320
+ table: "\uD45C",
321
+ addRowAbove: "\uC704\uC5D0 \uD589 \uCD94\uAC00",
322
+ addRowBelow: "\uC544\uB798\uC5D0 \uD589 \uCD94\uAC00",
323
+ addColLeft: "\uC67C\uCABD\uC5D0 \uC5F4 \uCD94\uAC00",
324
+ addColRight: "\uC624\uB978\uCABD\uC5D0 \uC5F4 \uCD94\uAC00",
325
+ mergeCells: "\uC140 \uBCD1\uD569",
326
+ splitCell: "\uBCD1\uD569 \uD574\uC81C",
327
+ toggleHeaderRow: "\uD5E4\uB354 \uD589 \uD1A0\uAE00",
328
+ toggleHeaderCol: "\uD5E4\uB354 \uC5F4 \uD1A0\uAE00",
329
+ deleteRow: "\uD589 \uC0AD\uC81C",
330
+ deleteCol: "\uC5F4 \uC0AD\uC81C",
331
+ deleteTable: "\uD45C \uC0AD\uC81C",
332
+ undo: "\uC2E4\uD589 \uCDE8\uC18C",
333
+ redo: "\uB2E4\uC2DC \uC2E4\uD589",
334
+ colorDefault: "\uAE30\uBCF8",
335
+ colorSecondary: "\uBCF4\uC870",
336
+ colorMuted: "\uD750\uB9BC",
337
+ colorAccent: "\uAC15\uC870",
338
+ colorBrand: "\uBE0C\uB79C\uB4DC",
339
+ colorSuccess: "\uC131\uACF5",
340
+ colorWarning: "\uC8FC\uC758",
341
+ colorDanger: "\uC704\uD5D8",
342
+ tableCell: (r3, c) => `${r3}\uD589 ${c}\uC5F4`,
343
+ tableSizeText: (rows, cols) => `${rows}\uD589 \xD7 ${cols}\uC5F4`,
344
+ heading: (level) => `\uC81C\uBAA9 ${level}`,
345
+ fontSizeDefault: (px) => `\uAE30\uBCF8 (\uBCF8\uBB38 ${px}px)`,
346
+ closeEditing: (label) => `${label} \uB2EB\uAE30`
347
+ },
348
+ form: { invalid: "\uC720\uD6A8\uD558\uC9C0 \uC54A\uC740 \uAC12\uC785\uB2C8\uB2E4." },
349
+ date: {
350
+ weekdays: ["\uC77C", "\uC6D4", "\uD654", "\uC218", "\uBAA9", "\uAE08", "\uD1A0"],
351
+ weekdaysLong: ["\uC77C\uC694\uC77C", "\uC6D4\uC694\uC77C", "\uD654\uC694\uC77C", "\uC218\uC694\uC77C", "\uBAA9\uC694\uC77C", "\uAE08\uC694\uC77C", "\uD1A0\uC694\uC77C"],
352
+ today: "\uC624\uB298",
353
+ prevYear: "\uC774\uC804 \uD574",
354
+ nextYear: "\uB2E4\uC74C \uD574",
355
+ prevMonth: "\uC774\uC804 \uB2EC",
356
+ nextMonth: "\uB2E4\uC74C \uB2EC",
357
+ monthLabel: (month) => `${month}\uC6D4`,
358
+ dayLabel: (day) => `${day}\uC77C`,
359
+ unitYear: "\uB144",
360
+ unitMonth: "\uC6D4",
361
+ unitDay: "\uC77C",
362
+ hourItem: (hour) => `${hour}\uC2DC`,
363
+ minuteItem: (minute) => `${minute}\uBD84`,
364
+ hourAria: (prefix) => prefix ? `${prefix} \uC2DC` : "\uC2DC",
365
+ minuteAria: (prefix) => prefix ? `${prefix} \uBD84` : "\uBD84",
366
+ meridiemAria: (prefix) => prefix ? `${prefix} \uC624\uC804/\uC624\uD6C4` : "\uC624\uC804/\uC624\uD6C4",
367
+ am: "\uC624\uC804",
368
+ pm: "\uC624\uD6C4",
369
+ rangeFrom: "\uBD80\uD130",
370
+ rangeTo: "\uAE4C\uC9C0",
371
+ clearDate: "\uB0A0\uC9DC \uC9C0\uC6B0\uAE30",
372
+ clearMonth: "\uC6D4 \uC9C0\uC6B0\uAE30",
373
+ clearYear: "\uC5F0\uB3C4 \uC9C0\uC6B0\uAE30",
374
+ clearPeriod: "\uAE30\uAC04 \uC9C0\uC6B0\uAE30",
375
+ clearTime: "\uC2DC\uAC04 \uC9C0\uC6B0\uAE30",
376
+ clearTimeRange: "\uC2DC\uAC04 \uBC94\uC704 \uC9C0\uC6B0\uAE30",
377
+ start: "\uC2DC\uC791",
378
+ end: "\uC885\uB8CC",
379
+ startTime: "\uC2DC\uC791 \uC2DC\uAC04",
380
+ endTime: "\uC885\uB8CC \uC2DC\uAC04"
381
+ },
382
+ chart: {
383
+ unit: (unit) => `\uB2E8\uC704 : ${unit}`,
384
+ pie: "\uD30C\uC774 \uADF8\uB798\uD504",
385
+ donut: "\uB3C4\uB11B \uADF8\uB798\uD504",
386
+ radialSummary: (count, kind) => `${count}\uAC1C \uD56D\uBAA9 ${kind}`,
387
+ barSummary: (c, s, stacked) => `${c}\uAC1C \uD56D\uBAA9, ${s}\uAC1C \uACC4\uC5F4 ${stacked ? "\uB204\uC801 " : ""}\uB9C9\uB300 \uADF8\uB798\uD504`,
388
+ lineSummary: (c, s, stacked) => `${c}\uAC1C \uD56D\uBAA9, ${s}\uAC1C \uACC4\uC5F4 ${stacked ? "\uB204\uC801 " : ""}\uAEBE\uC740\uC120 \uADF8\uB798\uD504`
389
+ },
390
+ chipFilter: {
391
+ periodDay: "\uC77C\uBCC4",
392
+ periodMonth: "\uC6D4\uBCC4",
393
+ periodQuarter: "\uBD84\uAE30\uBCC4",
394
+ periodHalf: "\uBC18\uAE30\uBCC4",
395
+ periodYear: "\uC5F0\uB3C4\uBCC4",
396
+ custom: "\uC0AC\uC6A9\uC790 \uC9C0\uC815",
397
+ today: "\uC624\uB298",
398
+ last7: "\uC9C0\uB09C 7\uC77C",
399
+ last30: "\uC9C0\uB09C 30\uC77C",
400
+ maxWord: "\uCD5C\uB300",
401
+ maxRangeHint: (days) => `\uCD5C\uB300 ${days}\uC77C\uC529`,
402
+ requireAll: "\uD56D\uBAA9\uC744 \uBAA8\uB450 \uC120\uD0DD\uD574 \uC8FC\uC138\uC694.",
403
+ requireAnyDefault: "\uCD5C\uC18C 1\uAC1C\uC758 \uD544\uD130\uB97C \uC120\uD0DD\uD574\uC8FC\uC138\uC694.",
404
+ requireAnyNamed: (name) => `\uCD5C\uC18C 1\uAC1C\uC758 ${name}${koreanParticle(name, "\uC744", "\uB97C")} \uC120\uD0DD\uD574\uC8FC\uC138\uC694.`,
405
+ requireField: (label) => `${label}${koreanParticle(label, "\uC744", "\uB97C")} \uC120\uD0DD\uD574 \uC8FC\uC138\uC694.`,
406
+ fieldFallback: "\uD56D\uBAA9",
407
+ valueListMore: (first, rest) => `${first} \uC678 ${rest}\uAC1C`,
408
+ quarter: (n) => `${n}\uBD84\uAE30`,
409
+ firstHalf: "\uC0C1\uBC18\uAE30",
410
+ secondHalf: "\uD558\uBC18\uAE30",
411
+ removeFilter: (label) => `${label} \uD544\uD130 \uC81C\uAC70`,
412
+ clearFilter: (label) => `${label} \uD544\uD130 \uC9C0\uC6B0\uAE30`,
413
+ resetSearch: "\uAC80\uC0C9 \uCD08\uAE30\uD654",
414
+ addFilter: "\uD544\uD130 \uCD94\uAC00",
415
+ noAddableFilter: "\uCD94\uAC00\uD560 \uD544\uD130\uAC00 \uC5C6\uC2B5\uB2C8\uB2E4.",
416
+ selectNone: "\uC120\uD0DD \uD574\uC81C",
417
+ selectAll: "\uC804\uCCB4 \uC120\uD0DD",
418
+ removeItem: (label) => `${label} \uC0AD\uC81C`,
419
+ keywordContains: "\uD3EC\uD568",
420
+ keywordExact: "\uC77C\uCE58",
421
+ keywordExcludes: "\uBBF8\uD3EC\uD568",
422
+ keywordHintCsv: "\uB2E4\uC911 \uD0A4\uC6CC\uB4DC\uB294 \uCF64\uB9C8(,)\uB85C \uAD6C\uBD84",
423
+ keywordHintEnter: "\uC785\uB825 \uD6C4 Enter\uB85C \uCD94\uAC00",
424
+ keywordCondition: "\uAC80\uC0C9 \uC870\uAC74 :",
425
+ noSearchResults: "\uAC80\uC0C9 \uACB0\uACFC\uAC00 \uC5C6\uC2B5\uB2C8\uB2E4."
426
+ },
427
+ numberInput: {
428
+ rangeBetween: (min, max) => `${min}~${max} \uC0AC\uC774\uB85C \uC785\uB825\uD574 \uC8FC\uC138\uC694.`,
429
+ atLeast: (min) => `${min} \uC774\uC0C1\uC73C\uB85C \uC785\uB825\uD574 \uC8FC\uC138\uC694.`,
430
+ atMost: (max) => `${max} \uC774\uD558\uB85C \uC785\uB825\uD574 \uC8FC\uC138\uC694.`,
431
+ increase: "\uC99D\uAC00",
432
+ decrease: "\uAC10\uC18C"
433
+ },
434
+ chipInput: {
435
+ placeholderWithComma: "\uD0DC\uADF8 \uC785\uB825 (Enter\xB7\uCF64\uB9C8\uB85C \uB4F1\uB85D)",
436
+ placeholder: "\uD0DC\uADF8 \uC785\uB825 (Enter\uB85C \uB4F1\uB85D)",
437
+ duplicateNamed: (label) => `\uC774\uBBF8 \uC785\uB825\uB41C ${label}\uC785\uB2C8\uB2E4.`,
438
+ duplicate: "\uC911\uBCF5\uB41C \uAC12\uC774 \uC874\uC7AC\uD569\uB2C8\uB2E4.",
439
+ maxCount: (max) => `\uCD5C\uB300 ${max}\uAC1C`
440
+ },
441
+ slider: { minValue: "\uCD5C\uC19F\uAC12", maxValue: "\uCD5C\uB313\uAC12" },
442
+ chat: {
443
+ removeAttachment: (name) => `${name} \uC81C\uAC70`,
444
+ placeholder: "\uBA54\uC2DC\uC9C0\uB97C \uC785\uB825\uD574 \uC8FC\uC138\uC694...",
445
+ attachFile: "\uD30C\uC77C \uCCA8\uBD80",
446
+ stopResponse: "\uC751\uB2F5 \uC911\uC9C0",
447
+ send: "\uC804\uC1A1",
448
+ read: "\uC77D\uC74C",
449
+ unread: "\uC548 \uC77D\uC74C"
450
+ },
451
+ loadingModal: {
452
+ loadingMessage: "\uC791\uC5C5 \uC9C4\uD589\uC911...",
453
+ errorMessage: "\uC791\uC5C5\uC5D0 \uC2E4\uD328\uD558\uC600\uC2B5\uB2C8\uB2E4. \uB2E4\uC2DC \uC2DC\uB3C4\uD574 \uC8FC\uC138\uC694.",
454
+ errorButton: "\uB2E4\uC2DC \uC2DC\uB3C4",
455
+ ariaTitle: "\uB85C\uB529 \uC911"
456
+ },
457
+ stepper: { errorTooltip: "\uD655\uC778\uC774 \uD544\uC694\uD55C \uD56D\uBAA9\uC774 \uC788\uC2B5\uB2C8\uB2E4.", ariaLabel: "\uC9C4\uD589 \uB2E8\uACC4" },
458
+ timeline: { empty: "\uB0B4\uC5ED\uC774 \uC5C6\uC2B5\uB2C8\uB2E4." },
459
+ callout: { dangerTitle: "\uC8FC\uC758\uC0AC\uD56D" },
460
+ guide: { tip: "\uD65C\uC6A9 TIP", notion: "\uC0AC\uC6A9\uBC95 \uC548\uB0B4" },
461
+ loginCard: { login: "\uD1B5\uD569 \uACC4\uC815\uC73C\uB85C \uB85C\uADF8\uC778" },
462
+ modal: { defaultTitle: "\uBAA8\uB2EC" },
463
+ launcher: { opensInNewTab: "\uC0C8 \uD0ED\uC5D0\uC11C \uC5F4\uB9BC" },
464
+ common: {
465
+ close: "\uB2EB\uAE30",
466
+ clear: "\uC9C0\uC6B0\uAE30",
467
+ confirm: "\uD655\uC778",
468
+ all: "\uC804\uCCB4",
469
+ back: "\uB4A4\uB85C\uAC00\uAE30",
470
+ more: "\uB354\uBCF4\uAE30",
471
+ moreActions: "\uAE30\uB2A5 \uB354 \uBCF4\uAE30",
472
+ openMenu: "\uBA54\uB274 \uC5F4\uAE30",
473
+ dragHandle: "\uB4DC\uB798\uADF8 \uD578\uB4E4",
474
+ resizeDrawer: "Drawer \uB108\uBE44 \uC870\uC808",
475
+ search: "\uAC80\uC0C9",
476
+ count: (n) => `${n}\uAC1C`
477
+ },
478
+ input: {
479
+ placeholder: "\uC785\uB825\uD574 \uC8FC\uC138\uC694.",
480
+ searchWithinResults: "\uACB0\uACFC \uB0B4 \uAC80\uC0C9",
481
+ clearInput: "\uC785\uB825 \uCD08\uAE30\uD654",
482
+ showPassword: "\uBE44\uBC00\uBC88\uD638 \uD45C\uC2DC"
483
+ },
281
484
  pagination: {
282
485
  firstPage: "\uCCAB \uD398\uC774\uC9C0",
283
486
  prevPage: "\uC774\uC804 \uD398\uC774\uC9C0",
@@ -294,9 +497,228 @@ var BUNDLES = {
294
497
  searchPlaceholder: "\uAC80\uC0C9",
295
498
  empty: "\uD45C\uC2DC\uD560 \uD56D\uBAA9\uC774 \uC5C6\uC2B5\uB2C8\uB2E4.",
296
499
  loading: "\uBD88\uB7EC\uC624\uB294 \uC911..."
500
+ },
501
+ table: {
502
+ selectAll: "\uC804\uCCB4 \uC120\uD0DD",
503
+ selectRow: "\uD589 \uC120\uD0DD",
504
+ empty: "\uB370\uC774\uD130\uAC00 \uC5C6\uC2B5\uB2C8\uB2E4.",
505
+ rowsPerPage: (count) => `${count}\uAC1C\uC529 \uBCF4\uAE30`,
506
+ editable: "\uC218\uC815 \uAC00\uB2A5",
507
+ opensInNewScreen: "\uC0C8 \uD654\uBA74\uC5D0\uC11C \uC5F4\uAE30",
508
+ sortBy: (label) => `${label} \uC815\uB82C`,
509
+ denseOff: "\uB113\uAC8C \uBCF4\uAE30",
510
+ denseOn: "\uC881\uAC8C \uBCF4\uAE30"
511
+ },
512
+ tableBar: {
513
+ totalBefore: "\uCD1D ",
514
+ totalAfter: " \uAC74",
515
+ selectedBefore: "",
516
+ selectedAfter: " \uAC74 \uC120\uD0DD"
297
517
  }
298
518
  },
299
519
  en: {
520
+ accountListBox: {
521
+ accountSetting: "Account settings",
522
+ language: "Change language",
523
+ logout: "Log out"
524
+ },
525
+ gnbSystem: { alert: "Notifications", setting: "Settings" },
526
+ editor: {
527
+ placeholder: "Enter your content.",
528
+ toolbarLabel: "Formatting tools",
529
+ tableSize: "Table size",
530
+ linkUrl: "Link URL",
531
+ apply: "Apply",
532
+ remove: "Remove",
533
+ headingLevel: "Heading level",
534
+ headingBody: "Body",
535
+ fontSize: "Font size",
536
+ fontSizeDefaultLabel: "Default",
537
+ bold: "Bold",
538
+ italic: "Italic",
539
+ underline: "Underline",
540
+ strike: "Strikethrough",
541
+ inlineCode: "Inline code",
542
+ textColor: "Text color",
543
+ clearColor: "Clear color",
544
+ alignLeft: "Align left",
545
+ alignCenter: "Align center",
546
+ alignRight: "Align right",
547
+ alignJustify: "Justify",
548
+ bulletList: "Bullet list",
549
+ orderedList: "Numbered list",
550
+ taskList: "Checklist",
551
+ list: "List",
552
+ blockquote: "Quote",
553
+ codeBlock: "Code block",
554
+ divider: "Divider",
555
+ link: "Link",
556
+ insertImage: "Insert image",
557
+ image: "Image",
558
+ table: "Table",
559
+ addRowAbove: "Add row above",
560
+ addRowBelow: "Add row below",
561
+ addColLeft: "Add column left",
562
+ addColRight: "Add column right",
563
+ mergeCells: "Merge cells",
564
+ splitCell: "Split cell",
565
+ toggleHeaderRow: "Toggle header row",
566
+ toggleHeaderCol: "Toggle header column",
567
+ deleteRow: "Delete row",
568
+ deleteCol: "Delete column",
569
+ deleteTable: "Delete table",
570
+ undo: "Undo",
571
+ redo: "Redo",
572
+ colorDefault: "Default",
573
+ colorSecondary: "Secondary",
574
+ colorMuted: "Muted",
575
+ colorAccent: "Accent",
576
+ colorBrand: "Brand",
577
+ colorSuccess: "Success",
578
+ colorWarning: "Warning",
579
+ colorDanger: "Danger",
580
+ tableCell: (r3, c) => `Row ${r3}, column ${c}`,
581
+ tableSizeText: (rows, cols) => `${rows} rows \xD7 ${cols} columns`,
582
+ heading: (level) => `Heading ${level}`,
583
+ fontSizeDefault: (px) => `Default (body ${px}px)`,
584
+ closeEditing: (label) => `Close ${label}`
585
+ },
586
+ form: { invalid: "Invalid value." },
587
+ date: {
588
+ weekdays: ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"],
589
+ weekdaysLong: ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"],
590
+ today: "Today",
591
+ prevYear: "Previous year",
592
+ nextYear: "Next year",
593
+ prevMonth: "Previous month",
594
+ nextMonth: "Next month",
595
+ monthLabel: (month) => ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"][month - 1] ?? String(month),
596
+ dayLabel: (day) => String(day),
597
+ unitYear: "-",
598
+ unitMonth: "-",
599
+ unitDay: "",
600
+ hourItem: (hour) => hour,
601
+ minuteItem: (minute) => minute,
602
+ hourAria: (prefix) => prefix ? `${prefix} hour` : "Hour",
603
+ minuteAria: (prefix) => prefix ? `${prefix} minute` : "Minute",
604
+ meridiemAria: (prefix) => prefix ? `${prefix} AM/PM` : "AM/PM",
605
+ am: "AM",
606
+ pm: "PM",
607
+ rangeFrom: "From",
608
+ rangeTo: "To",
609
+ clearDate: "Clear date",
610
+ clearMonth: "Clear month",
611
+ clearYear: "Clear year",
612
+ clearPeriod: "Clear period",
613
+ clearTime: "Clear time",
614
+ clearTimeRange: "Clear time range",
615
+ start: "Start",
616
+ end: "End",
617
+ startTime: "Start time",
618
+ endTime: "End time"
619
+ },
620
+ chart: {
621
+ unit: (unit) => `Unit: ${unit}`,
622
+ pie: "Pie chart",
623
+ donut: "Donut chart",
624
+ radialSummary: (count, kind) => `${kind} with ${count} ${count === 1 ? "item" : "items"}`,
625
+ barSummary: (c, s, stacked) => `${stacked ? "Stacked bar chart" : "Bar chart"} with ${c} ${c === 1 ? "item" : "items"} and ${s} series`,
626
+ lineSummary: (c, s, stacked) => `${stacked ? "Stacked line chart" : "Line chart"} with ${c} ${c === 1 ? "item" : "items"} and ${s} series`
627
+ },
628
+ chipFilter: {
629
+ periodDay: "Daily",
630
+ periodMonth: "Monthly",
631
+ periodQuarter: "Quarterly",
632
+ periodHalf: "Half-yearly",
633
+ periodYear: "Yearly",
634
+ custom: "Custom",
635
+ today: "Today",
636
+ last7: "Last 7 days",
637
+ last30: "Last 30 days",
638
+ maxWord: "max",
639
+ maxRangeHint: (days) => `max ${days} days at a time`,
640
+ requireAll: "Select all items.",
641
+ requireAnyDefault: "Select at least one filter.",
642
+ requireAnyNamed: (name) => `Select at least one ${name}.`,
643
+ requireField: (label) => `Select ${label}.`,
644
+ fieldFallback: "item",
645
+ valueListMore: (first, rest) => `${first} +${rest} more`,
646
+ quarter: (n) => `Q${n}`,
647
+ firstHalf: "H1",
648
+ secondHalf: "H2",
649
+ removeFilter: (label) => `Remove ${label} filter`,
650
+ clearFilter: (label) => `Clear ${label} filter`,
651
+ resetSearch: "Reset search",
652
+ addFilter: "Add filter",
653
+ noAddableFilter: "No filters to add.",
654
+ selectNone: "Deselect all",
655
+ selectAll: "Select all",
656
+ removeItem: (label) => `Delete ${label}`,
657
+ keywordContains: "Contains",
658
+ keywordExact: "Exact",
659
+ keywordExcludes: "Excludes",
660
+ keywordHintCsv: "Separate multiple keywords with commas (,)",
661
+ keywordHintEnter: "Press Enter to add",
662
+ keywordCondition: "Search condition:",
663
+ noSearchResults: "No search results."
664
+ },
665
+ numberInput: {
666
+ rangeBetween: (min, max) => `Enter a value between ${min} and ${max}.`,
667
+ atLeast: (min) => `Enter ${min} or more.`,
668
+ atMost: (max) => `Enter ${max} or less.`,
669
+ increase: "Increase",
670
+ decrease: "Decrease"
671
+ },
672
+ chipInput: {
673
+ placeholderWithComma: "Add a tag (press Enter or comma)",
674
+ placeholder: "Add a tag (press Enter)",
675
+ duplicateNamed: (label) => `This ${label} has already been entered.`,
676
+ duplicate: "Duplicate values exist.",
677
+ maxCount: (max) => `Up to ${max}`
678
+ },
679
+ slider: { minValue: "Minimum", maxValue: "Maximum" },
680
+ chat: {
681
+ removeAttachment: (name) => `Remove ${name}`,
682
+ placeholder: "Enter a message...",
683
+ attachFile: "Attach file",
684
+ stopResponse: "Stop response",
685
+ send: "Send",
686
+ read: "Read",
687
+ unread: "Unread"
688
+ },
689
+ loadingModal: {
690
+ loadingMessage: "Working...",
691
+ errorMessage: "The task failed. Please try again.",
692
+ errorButton: "Retry",
693
+ ariaTitle: "Loading"
694
+ },
695
+ stepper: { errorTooltip: "Some items need your attention.", ariaLabel: "Progress steps" },
696
+ timeline: { empty: "No history." },
697
+ callout: { dangerTitle: "Caution" },
698
+ guide: { tip: "Tip", notion: "How-to guide" },
699
+ loginCard: { login: "Sign in with unified account" },
700
+ modal: { defaultTitle: "Modal" },
701
+ launcher: { opensInNewTab: "Opens in a new tab" },
702
+ common: {
703
+ close: "Close",
704
+ clear: "Clear",
705
+ confirm: "OK",
706
+ all: "All",
707
+ back: "Back",
708
+ more: "More",
709
+ moreActions: "More actions",
710
+ openMenu: "Open menu",
711
+ dragHandle: "Drag handle",
712
+ resizeDrawer: "Resize drawer width",
713
+ search: "Search",
714
+ count: (n) => String(n)
715
+ },
716
+ input: {
717
+ placeholder: "Please enter a value.",
718
+ searchWithinResults: "Search within results",
719
+ clearInput: "Reset input",
720
+ showPassword: "Show password"
721
+ },
300
722
  pagination: {
301
723
  firstPage: "First page",
302
724
  prevPage: "Previous page",
@@ -313,9 +735,228 @@ var BUNDLES = {
313
735
  searchPlaceholder: "Search",
314
736
  empty: "No items to display.",
315
737
  loading: "Loading..."
738
+ },
739
+ table: {
740
+ selectAll: "Select all",
741
+ selectRow: "Select row",
742
+ empty: "No data.",
743
+ rowsPerPage: (count) => `${count} per page`,
744
+ editable: "Editable",
745
+ opensInNewScreen: "Opens in a new screen",
746
+ sortBy: (label) => `Sort by ${label}`,
747
+ denseOff: "Comfortable view",
748
+ denseOn: "Compact view"
749
+ },
750
+ tableBar: {
751
+ totalBefore: "Total ",
752
+ totalAfter: "",
753
+ selectedBefore: "",
754
+ selectedAfter: " selected"
316
755
  }
317
756
  },
318
757
  ja: {
758
+ accountListBox: {
759
+ accountSetting: "\u30A2\u30AB\u30A6\u30F3\u30C8\u8A2D\u5B9A",
760
+ language: "\u8A00\u8A9E\u306E\u5909\u66F4",
761
+ logout: "\u30ED\u30B0\u30A2\u30A6\u30C8"
762
+ },
763
+ gnbSystem: { alert: "\u901A\u77E5", setting: "\u8A2D\u5B9A" },
764
+ editor: {
765
+ placeholder: "\u5185\u5BB9\u3092\u5165\u529B\u3057\u3066\u304F\u3060\u3055\u3044\u3002",
766
+ toolbarLabel: "\u66F8\u5F0F\u30C4\u30FC\u30EB",
767
+ tableSize: "\u8868\u306E\u30B5\u30A4\u30BA",
768
+ linkUrl: "\u30EA\u30F3\u30AFURL",
769
+ apply: "\u9069\u7528",
770
+ remove: "\u524A\u9664",
771
+ headingLevel: "\u898B\u51FA\u3057\u30EC\u30D9\u30EB",
772
+ headingBody: "\u672C\u6587",
773
+ fontSize: "\u6587\u5B57\u30B5\u30A4\u30BA",
774
+ fontSizeDefaultLabel: "\u6A19\u6E96",
775
+ bold: "\u592A\u5B57",
776
+ italic: "\u659C\u4F53",
777
+ underline: "\u4E0B\u7DDA",
778
+ strike: "\u53D6\u308A\u6D88\u3057\u7DDA",
779
+ inlineCode: "\u30A4\u30F3\u30E9\u30A4\u30F3\u30B3\u30FC\u30C9",
780
+ textColor: "\u6587\u5B57\u8272",
781
+ clearColor: "\u8272\u3092\u30AF\u30EA\u30A2",
782
+ alignLeft: "\u5DE6\u63C3\u3048",
783
+ alignCenter: "\u4E2D\u592E\u63C3\u3048",
784
+ alignRight: "\u53F3\u63C3\u3048",
785
+ alignJustify: "\u4E21\u7AEF\u63C3\u3048",
786
+ bulletList: "\u7B87\u6761\u66F8\u304D",
787
+ orderedList: "\u756A\u53F7\u4ED8\u304D\u30EA\u30B9\u30C8",
788
+ taskList: "\u30C1\u30A7\u30C3\u30AF\u30EA\u30B9\u30C8",
789
+ list: "\u30EA\u30B9\u30C8",
790
+ blockquote: "\u5F15\u7528",
791
+ codeBlock: "\u30B3\u30FC\u30C9\u30D6\u30ED\u30C3\u30AF",
792
+ divider: "\u533A\u5207\u308A\u7DDA",
793
+ link: "\u30EA\u30F3\u30AF",
794
+ insertImage: "\u753B\u50CF\u3092\u633F\u5165",
795
+ image: "\u753B\u50CF",
796
+ table: "\u8868",
797
+ addRowAbove: "\u4E0A\u306B\u884C\u3092\u8FFD\u52A0",
798
+ addRowBelow: "\u4E0B\u306B\u884C\u3092\u8FFD\u52A0",
799
+ addColLeft: "\u5DE6\u306B\u5217\u3092\u8FFD\u52A0",
800
+ addColRight: "\u53F3\u306B\u5217\u3092\u8FFD\u52A0",
801
+ mergeCells: "\u30BB\u30EB\u3092\u7D50\u5408",
802
+ splitCell: "\u7D50\u5408\u3092\u89E3\u9664",
803
+ toggleHeaderRow: "\u30D8\u30C3\u30C0\u30FC\u884C\u3092\u5207\u308A\u66FF\u3048",
804
+ toggleHeaderCol: "\u30D8\u30C3\u30C0\u30FC\u5217\u3092\u5207\u308A\u66FF\u3048",
805
+ deleteRow: "\u884C\u3092\u524A\u9664",
806
+ deleteCol: "\u5217\u3092\u524A\u9664",
807
+ deleteTable: "\u8868\u3092\u524A\u9664",
808
+ undo: "\u5143\u306B\u623B\u3059",
809
+ redo: "\u3084\u308A\u76F4\u3057",
810
+ colorDefault: "\u6A19\u6E96",
811
+ colorSecondary: "\u88DC\u52A9",
812
+ colorMuted: "\u8584\u3044",
813
+ colorAccent: "\u5F37\u8ABF",
814
+ colorBrand: "\u30D6\u30E9\u30F3\u30C9",
815
+ colorSuccess: "\u6210\u529F",
816
+ colorWarning: "\u6CE8\u610F",
817
+ colorDanger: "\u5371\u967A",
818
+ tableCell: (r3, c) => `${r3}\u884C${c}\u5217`,
819
+ tableSizeText: (rows, cols) => `${rows}\u884C \xD7 ${cols}\u5217`,
820
+ heading: (level) => `\u898B\u51FA\u3057${level}`,
821
+ fontSizeDefault: (px) => `\u6A19\u6E96\uFF08\u672C\u6587 ${px}px\uFF09`,
822
+ closeEditing: (label) => `${label}\u3092\u9589\u3058\u308B`
823
+ },
824
+ form: { invalid: "\u7121\u52B9\u306A\u5024\u3067\u3059\u3002" },
825
+ date: {
826
+ weekdays: ["\u65E5", "\u6708", "\u706B", "\u6C34", "\u6728", "\u91D1", "\u571F"],
827
+ weekdaysLong: ["\u65E5\u66DC\u65E5", "\u6708\u66DC\u65E5", "\u706B\u66DC\u65E5", "\u6C34\u66DC\u65E5", "\u6728\u66DC\u65E5", "\u91D1\u66DC\u65E5", "\u571F\u66DC\u65E5"],
828
+ today: "\u4ECA\u65E5",
829
+ prevYear: "\u524D\u306E\u5E74",
830
+ nextYear: "\u6B21\u306E\u5E74",
831
+ prevMonth: "\u524D\u306E\u6708",
832
+ nextMonth: "\u6B21\u306E\u6708",
833
+ monthLabel: (month) => `${month}\u6708`,
834
+ dayLabel: (day) => `${day}\u65E5`,
835
+ unitYear: "\u5E74",
836
+ unitMonth: "\u6708",
837
+ unitDay: "\u65E5",
838
+ hourItem: (hour) => `${hour}\u6642`,
839
+ minuteItem: (minute) => `${minute}\u5206`,
840
+ hourAria: (prefix) => `${prefix}\u6642`,
841
+ minuteAria: (prefix) => `${prefix}\u5206`,
842
+ meridiemAria: (prefix) => `${prefix}\u5348\u524D/\u5348\u5F8C`,
843
+ am: "\u5348\u524D",
844
+ pm: "\u5348\u5F8C",
845
+ rangeFrom: "\u958B\u59CB",
846
+ rangeTo: "\u7D42\u4E86",
847
+ clearDate: "\u65E5\u4ED8\u3092\u30AF\u30EA\u30A2",
848
+ clearMonth: "\u6708\u3092\u30AF\u30EA\u30A2",
849
+ clearYear: "\u5E74\u3092\u30AF\u30EA\u30A2",
850
+ clearPeriod: "\u671F\u9593\u3092\u30AF\u30EA\u30A2",
851
+ clearTime: "\u6642\u523B\u3092\u30AF\u30EA\u30A2",
852
+ clearTimeRange: "\u6642\u9593\u7BC4\u56F2\u3092\u30AF\u30EA\u30A2",
853
+ start: "\u958B\u59CB",
854
+ end: "\u7D42\u4E86",
855
+ startTime: "\u958B\u59CB\u6642\u523B",
856
+ endTime: "\u7D42\u4E86\u6642\u523B"
857
+ },
858
+ chart: {
859
+ unit: (unit) => `\u5358\u4F4D\uFF1A${unit}`,
860
+ pie: "\u5186\u30B0\u30E9\u30D5",
861
+ donut: "\u30C9\u30FC\u30CA\u30C4\u30B0\u30E9\u30D5",
862
+ radialSummary: (count, kind) => `${count}\u9805\u76EE\u306E${kind}`,
863
+ barSummary: (c, s, stacked) => `${c}\u9805\u76EE\u3001${s}\u7CFB\u5217\u306E${stacked ? "\u7A4D\u307F\u4E0A\u3052" : ""}\u68D2\u30B0\u30E9\u30D5`,
864
+ lineSummary: (c, s, stacked) => `${c}\u9805\u76EE\u3001${s}\u7CFB\u5217\u306E${stacked ? "\u7A4D\u307F\u4E0A\u3052" : ""}\u6298\u308C\u7DDA\u30B0\u30E9\u30D5`
865
+ },
866
+ chipFilter: {
867
+ periodDay: "\u65E5\u5225",
868
+ periodMonth: "\u6708\u5225",
869
+ periodQuarter: "\u56DB\u534A\u671F\u5225",
870
+ periodHalf: "\u534A\u671F\u5225",
871
+ periodYear: "\u5E74\u5225",
872
+ custom: "\u30E6\u30FC\u30B6\u30FC\u6307\u5B9A",
873
+ today: "\u4ECA\u65E5",
874
+ last7: "\u904E\u53BB7\u65E5",
875
+ last30: "\u904E\u53BB30\u65E5",
876
+ maxWord: "\u6700\u5927",
877
+ maxRangeHint: (days) => `\u6700\u5927${days}\u65E5`,
878
+ requireAll: "\u3059\u3079\u3066\u306E\u9805\u76EE\u3092\u9078\u629E\u3057\u3066\u304F\u3060\u3055\u3044\u3002",
879
+ requireAnyDefault: "1\u3064\u4EE5\u4E0A\u306E\u30D5\u30A3\u30EB\u30BF\u30FC\u3092\u9078\u629E\u3057\u3066\u304F\u3060\u3055\u3044\u3002",
880
+ requireAnyNamed: (name) => `${name}\u30921\u3064\u4EE5\u4E0A\u9078\u629E\u3057\u3066\u304F\u3060\u3055\u3044\u3002`,
881
+ requireField: (label) => `${label}\u3092\u9078\u629E\u3057\u3066\u304F\u3060\u3055\u3044\u3002`,
882
+ fieldFallback: "\u9805\u76EE",
883
+ valueListMore: (first, rest) => `${first} \u4ED6${rest}\u4EF6`,
884
+ quarter: (n) => `\u7B2C${n}\u56DB\u534A\u671F`,
885
+ firstHalf: "\u4E0A\u534A\u671F",
886
+ secondHalf: "\u4E0B\u534A\u671F",
887
+ removeFilter: (label) => `${label}\u30D5\u30A3\u30EB\u30BF\u30FC\u3092\u524A\u9664`,
888
+ clearFilter: (label) => `${label}\u30D5\u30A3\u30EB\u30BF\u30FC\u3092\u30AF\u30EA\u30A2`,
889
+ resetSearch: "\u691C\u7D22\u3092\u30EA\u30BB\u30C3\u30C8",
890
+ addFilter: "\u30D5\u30A3\u30EB\u30BF\u30FC\u3092\u8FFD\u52A0",
891
+ noAddableFilter: "\u8FFD\u52A0\u3067\u304D\u308B\u30D5\u30A3\u30EB\u30BF\u30FC\u304C\u3042\u308A\u307E\u305B\u3093\u3002",
892
+ selectNone: "\u9078\u629E\u3092\u89E3\u9664",
893
+ selectAll: "\u3059\u3079\u3066\u9078\u629E",
894
+ removeItem: (label) => `${label}\u3092\u524A\u9664`,
895
+ keywordContains: "\u542B\u3080",
896
+ keywordExact: "\u4E00\u81F4",
897
+ keywordExcludes: "\u542B\u307E\u306A\u3044",
898
+ keywordHintCsv: "\u8907\u6570\u306E\u30AD\u30FC\u30EF\u30FC\u30C9\u306F\u30AB\u30F3\u30DE(,)\u3067\u533A\u5207\u308A\u307E\u3059",
899
+ keywordHintEnter: "\u5165\u529B\u5F8C Enter \u3067\u8FFD\u52A0",
900
+ keywordCondition: "\u691C\u7D22\u6761\u4EF6\uFF1A",
901
+ noSearchResults: "\u691C\u7D22\u7D50\u679C\u304C\u3042\u308A\u307E\u305B\u3093\u3002"
902
+ },
903
+ numberInput: {
904
+ rangeBetween: (min, max) => `${min}\u301C${max}\u306E\u7BC4\u56F2\u3067\u5165\u529B\u3057\u3066\u304F\u3060\u3055\u3044\u3002`,
905
+ atLeast: (min) => `${min}\u4EE5\u4E0A\u3067\u5165\u529B\u3057\u3066\u304F\u3060\u3055\u3044\u3002`,
906
+ atMost: (max) => `${max}\u4EE5\u4E0B\u3067\u5165\u529B\u3057\u3066\u304F\u3060\u3055\u3044\u3002`,
907
+ increase: "\u5897\u3084\u3059",
908
+ decrease: "\u6E1B\u3089\u3059"
909
+ },
910
+ chipInput: {
911
+ placeholderWithComma: "\u30BF\u30B0\u3092\u5165\u529B\uFF08Enter\u307E\u305F\u306F\u30AB\u30F3\u30DE\u3067\u767B\u9332\uFF09",
912
+ placeholder: "\u30BF\u30B0\u3092\u5165\u529B\uFF08Enter\u3067\u767B\u9332\uFF09",
913
+ duplicateNamed: (label) => `\u3059\u3067\u306B\u5165\u529B\u3055\u308C\u305F${label}\u3067\u3059\u3002`,
914
+ duplicate: "\u91CD\u8907\u3057\u305F\u5024\u304C\u3042\u308A\u307E\u3059\u3002",
915
+ maxCount: (max) => `\u6700\u5927${max}\u4EF6`
916
+ },
917
+ slider: { minValue: "\u6700\u5C0F\u5024", maxValue: "\u6700\u5927\u5024" },
918
+ chat: {
919
+ removeAttachment: (name) => `${name}\u3092\u524A\u9664`,
920
+ placeholder: "\u30E1\u30C3\u30BB\u30FC\u30B8\u3092\u5165\u529B\u3057\u3066\u304F\u3060\u3055\u3044...",
921
+ attachFile: "\u30D5\u30A1\u30A4\u30EB\u3092\u6DFB\u4ED8",
922
+ stopResponse: "\u5FDC\u7B54\u3092\u505C\u6B62",
923
+ send: "\u9001\u4FE1",
924
+ read: "\u65E2\u8AAD",
925
+ unread: "\u672A\u8AAD"
926
+ },
927
+ loadingModal: {
928
+ loadingMessage: "\u51E6\u7406\u4E2D...",
929
+ errorMessage: "\u51E6\u7406\u306B\u5931\u6557\u3057\u307E\u3057\u305F\u3002\u3082\u3046\u4E00\u5EA6\u304A\u8A66\u3057\u304F\u3060\u3055\u3044\u3002",
930
+ errorButton: "\u518D\u8A66\u884C",
931
+ ariaTitle: "\u8AAD\u307F\u8FBC\u307F\u4E2D"
932
+ },
933
+ stepper: { errorTooltip: "\u78BA\u8A8D\u304C\u5FC5\u8981\u306A\u9805\u76EE\u304C\u3042\u308A\u307E\u3059\u3002", ariaLabel: "\u9032\u884C\u30B9\u30C6\u30C3\u30D7" },
934
+ timeline: { empty: "\u5C65\u6B74\u304C\u3042\u308A\u307E\u305B\u3093\u3002" },
935
+ callout: { dangerTitle: "\u6CE8\u610F\u4E8B\u9805" },
936
+ guide: { tip: "\u30D2\u30F3\u30C8", notion: "\u4F7F\u3044\u65B9\u30AC\u30A4\u30C9" },
937
+ loginCard: { login: "\u7D71\u5408\u30A2\u30AB\u30A6\u30F3\u30C8\u3067\u30ED\u30B0\u30A4\u30F3" },
938
+ modal: { defaultTitle: "\u30E2\u30FC\u30C0\u30EB" },
939
+ launcher: { opensInNewTab: "\u65B0\u3057\u3044\u30BF\u30D6\u3067\u958B\u304D\u307E\u3059" },
940
+ common: {
941
+ close: "\u9589\u3058\u308B",
942
+ clear: "\u30AF\u30EA\u30A2",
943
+ confirm: "\u78BA\u8A8D",
944
+ all: "\u3059\u3079\u3066",
945
+ back: "\u623B\u308B",
946
+ more: "\u3082\u3063\u3068\u898B\u308B",
947
+ moreActions: "\u305D\u306E\u4ED6\u306E\u6A5F\u80FD",
948
+ openMenu: "\u30E1\u30CB\u30E5\u30FC\u3092\u958B\u304F",
949
+ dragHandle: "\u30C9\u30E9\u30C3\u30B0\u30CF\u30F3\u30C9\u30EB",
950
+ resizeDrawer: "\u30C9\u30ED\u30EF\u30FC\u306E\u5E45\u3092\u8ABF\u6574",
951
+ search: "\u691C\u7D22",
952
+ count: (n) => `${n}\u4EF6`
953
+ },
954
+ input: {
955
+ placeholder: "\u5165\u529B\u3057\u3066\u304F\u3060\u3055\u3044\u3002",
956
+ searchWithinResults: "\u7D50\u679C\u5185\u3092\u691C\u7D22",
957
+ clearInput: "\u5165\u529B\u3092\u30EA\u30BB\u30C3\u30C8",
958
+ showPassword: "\u30D1\u30B9\u30EF\u30FC\u30C9\u3092\u8868\u793A"
959
+ },
319
960
  pagination: {
320
961
  firstPage: "\u6700\u521D\u306E\u30DA\u30FC\u30B8",
321
962
  prevPage: "\u524D\u306E\u30DA\u30FC\u30B8",
@@ -332,9 +973,224 @@ var BUNDLES = {
332
973
  searchPlaceholder: "\u691C\u7D22",
333
974
  empty: "\u8868\u793A\u3059\u308B\u9805\u76EE\u304C\u3042\u308A\u307E\u305B\u3093\u3002",
334
975
  loading: "\u8AAD\u307F\u8FBC\u307F\u4E2D..."
976
+ },
977
+ table: {
978
+ selectAll: "\u3059\u3079\u3066\u9078\u629E",
979
+ selectRow: "\u884C\u3092\u9078\u629E",
980
+ empty: "\u30C7\u30FC\u30BF\u304C\u3042\u308A\u307E\u305B\u3093\u3002",
981
+ rowsPerPage: (count) => `${count}\u4EF6\u305A\u3064\u8868\u793A`,
982
+ editable: "\u7DE8\u96C6\u53EF\u80FD",
983
+ opensInNewScreen: "\u65B0\u3057\u3044\u753B\u9762\u3067\u958B\u304F",
984
+ sortBy: (label) => `${label} \u3067\u4E26\u3079\u66FF\u3048`,
985
+ denseOff: "\u5E83\u304F\u8868\u793A",
986
+ denseOn: "\u72ED\u304F\u8868\u793A"
987
+ },
988
+ tableBar: {
989
+ totalBefore: "\u5408\u8A08 ",
990
+ totalAfter: "\u4EF6",
991
+ selectedBefore: "",
992
+ selectedAfter: "\u4EF6\u9078\u629E"
335
993
  }
336
994
  },
337
995
  zh: {
996
+ accountListBox: { accountSetting: "\u8D26\u53F7\u8BBE\u7F6E", language: "\u66F4\u6539\u8BED\u8A00", logout: "\u9000\u51FA\u767B\u5F55" },
997
+ gnbSystem: { alert: "\u901A\u77E5", setting: "\u8BBE\u7F6E" },
998
+ editor: {
999
+ placeholder: "\u8BF7\u8F93\u5165\u5185\u5BB9\u3002",
1000
+ toolbarLabel: "\u683C\u5F0F\u5DE5\u5177",
1001
+ tableSize: "\u8868\u683C\u5927\u5C0F",
1002
+ linkUrl: "\u94FE\u63A5\u5730\u5740",
1003
+ apply: "\u5E94\u7528",
1004
+ remove: "\u79FB\u9664",
1005
+ headingLevel: "\u6807\u9898\u7EA7\u522B",
1006
+ headingBody: "\u6B63\u6587",
1007
+ fontSize: "\u5B57\u53F7",
1008
+ fontSizeDefaultLabel: "\u9ED8\u8BA4",
1009
+ bold: "\u52A0\u7C97",
1010
+ italic: "\u659C\u4F53",
1011
+ underline: "\u4E0B\u5212\u7EBF",
1012
+ strike: "\u5220\u9664\u7EBF",
1013
+ inlineCode: "\u884C\u5185\u4EE3\u7801",
1014
+ textColor: "\u6587\u5B57\u989C\u8272",
1015
+ clearColor: "\u6E05\u9664\u989C\u8272",
1016
+ alignLeft: "\u5DE6\u5BF9\u9F50",
1017
+ alignCenter: "\u5C45\u4E2D\u5BF9\u9F50",
1018
+ alignRight: "\u53F3\u5BF9\u9F50",
1019
+ alignJustify: "\u4E24\u7AEF\u5BF9\u9F50",
1020
+ bulletList: "\u9879\u76EE\u7B26\u53F7\u5217\u8868",
1021
+ orderedList: "\u7F16\u53F7\u5217\u8868",
1022
+ taskList: "\u5F85\u529E\u5217\u8868",
1023
+ list: "\u5217\u8868",
1024
+ blockquote: "\u5F15\u7528",
1025
+ codeBlock: "\u4EE3\u7801\u5757",
1026
+ divider: "\u5206\u9694\u7EBF",
1027
+ link: "\u94FE\u63A5",
1028
+ insertImage: "\u63D2\u5165\u56FE\u7247",
1029
+ image: "\u56FE\u7247",
1030
+ table: "\u8868\u683C",
1031
+ addRowAbove: "\u5728\u4E0A\u65B9\u63D2\u5165\u884C",
1032
+ addRowBelow: "\u5728\u4E0B\u65B9\u63D2\u5165\u884C",
1033
+ addColLeft: "\u5728\u5DE6\u4FA7\u63D2\u5165\u5217",
1034
+ addColRight: "\u5728\u53F3\u4FA7\u63D2\u5165\u5217",
1035
+ mergeCells: "\u5408\u5E76\u5355\u5143\u683C",
1036
+ splitCell: "\u53D6\u6D88\u5408\u5E76",
1037
+ toggleHeaderRow: "\u5207\u6362\u6807\u9898\u884C",
1038
+ toggleHeaderCol: "\u5207\u6362\u6807\u9898\u5217",
1039
+ deleteRow: "\u5220\u9664\u884C",
1040
+ deleteCol: "\u5220\u9664\u5217",
1041
+ deleteTable: "\u5220\u9664\u8868\u683C",
1042
+ undo: "\u64A4\u9500",
1043
+ redo: "\u91CD\u505A",
1044
+ colorDefault: "\u9ED8\u8BA4",
1045
+ colorSecondary: "\u6B21\u8981",
1046
+ colorMuted: "\u6DE1\u5316",
1047
+ colorAccent: "\u5F3A\u8C03",
1048
+ colorBrand: "\u54C1\u724C",
1049
+ colorSuccess: "\u6210\u529F",
1050
+ colorWarning: "\u8B66\u544A",
1051
+ colorDanger: "\u5371\u9669",
1052
+ tableCell: (r3, c) => `${r3}\u884C${c}\u5217`,
1053
+ tableSizeText: (rows, cols) => `${rows}\u884C \xD7 ${cols}\u5217`,
1054
+ heading: (level) => `\u6807\u9898 ${level}`,
1055
+ fontSizeDefault: (px) => `\u9ED8\u8BA4\uFF08\u6B63\u6587 ${px}px\uFF09`,
1056
+ closeEditing: (label) => `\u5173\u95ED${label}`
1057
+ },
1058
+ form: { invalid: "\u65E0\u6548\u7684\u503C\u3002" },
1059
+ date: {
1060
+ weekdays: ["\u65E5", "\u4E00", "\u4E8C", "\u4E09", "\u56DB", "\u4E94", "\u516D"],
1061
+ weekdaysLong: ["\u661F\u671F\u65E5", "\u661F\u671F\u4E00", "\u661F\u671F\u4E8C", "\u661F\u671F\u4E09", "\u661F\u671F\u56DB", "\u661F\u671F\u4E94", "\u661F\u671F\u516D"],
1062
+ today: "\u4ECA\u5929",
1063
+ prevYear: "\u4E0A\u4E00\u5E74",
1064
+ nextYear: "\u4E0B\u4E00\u5E74",
1065
+ prevMonth: "\u4E0A\u4E2A\u6708",
1066
+ nextMonth: "\u4E0B\u4E2A\u6708",
1067
+ monthLabel: (month) => `${month}\u6708`,
1068
+ dayLabel: (day) => `${day}\u65E5`,
1069
+ unitYear: "\u5E74",
1070
+ unitMonth: "\u6708",
1071
+ unitDay: "\u65E5",
1072
+ hourItem: (hour) => `${hour}\u65F6`,
1073
+ minuteItem: (minute) => `${minute}\u5206`,
1074
+ hourAria: (prefix) => `${prefix}\u5C0F\u65F6`,
1075
+ minuteAria: (prefix) => `${prefix}\u5206\u949F`,
1076
+ meridiemAria: (prefix) => `${prefix}\u4E0A\u5348/\u4E0B\u5348`,
1077
+ am: "\u4E0A\u5348",
1078
+ pm: "\u4E0B\u5348",
1079
+ rangeFrom: "\u5F00\u59CB",
1080
+ rangeTo: "\u7ED3\u675F",
1081
+ clearDate: "\u6E05\u9664\u65E5\u671F",
1082
+ clearMonth: "\u6E05\u9664\u6708\u4EFD",
1083
+ clearYear: "\u6E05\u9664\u5E74\u4EFD",
1084
+ clearPeriod: "\u6E05\u9664\u65F6\u95F4\u6BB5",
1085
+ clearTime: "\u6E05\u9664\u65F6\u95F4",
1086
+ clearTimeRange: "\u6E05\u9664\u65F6\u95F4\u8303\u56F4",
1087
+ start: "\u5F00\u59CB",
1088
+ end: "\u7ED3\u675F",
1089
+ startTime: "\u5F00\u59CB\u65F6\u95F4",
1090
+ endTime: "\u7ED3\u675F\u65F6\u95F4"
1091
+ },
1092
+ chart: {
1093
+ unit: (unit) => `\u5355\u4F4D\uFF1A${unit}`,
1094
+ pie: "\u997C\u56FE",
1095
+ donut: "\u73AF\u5F62\u56FE",
1096
+ radialSummary: (count, kind) => `${kind}\uFF0C\u5171 ${count} \u9879`,
1097
+ barSummary: (c, s, stacked) => `${stacked ? "\u5806\u53E0" : ""}\u67F1\u72B6\u56FE\uFF0C${c} \u9879\uFF0C${s} \u4E2A\u7CFB\u5217`,
1098
+ lineSummary: (c, s, stacked) => `${stacked ? "\u5806\u53E0" : ""}\u6298\u7EBF\u56FE\uFF0C${c} \u9879\uFF0C${s} \u4E2A\u7CFB\u5217`
1099
+ },
1100
+ chipFilter: {
1101
+ periodDay: "\u6309\u65E5",
1102
+ periodMonth: "\u6309\u6708",
1103
+ periodQuarter: "\u6309\u5B63\u5EA6",
1104
+ periodHalf: "\u6309\u534A\u5E74",
1105
+ periodYear: "\u6309\u5E74",
1106
+ custom: "\u81EA\u5B9A\u4E49",
1107
+ today: "\u4ECA\u5929",
1108
+ last7: "\u6700\u8FD17\u5929",
1109
+ last30: "\u6700\u8FD130\u5929",
1110
+ maxWord: "\u6700\u591A",
1111
+ maxRangeHint: (days) => `\u6700\u591A${days}\u5929`,
1112
+ requireAll: "\u8BF7\u9009\u62E9\u6240\u6709\u9879\u76EE\u3002",
1113
+ requireAnyDefault: "\u8BF7\u81F3\u5C11\u9009\u62E9\u4E00\u4E2A\u7B5B\u9009\u6761\u4EF6\u3002",
1114
+ requireAnyNamed: (name) => `\u8BF7\u81F3\u5C11\u9009\u62E9\u4E00\u4E2A${name}\u3002`,
1115
+ requireField: (label) => `\u8BF7\u9009\u62E9${label}\u3002`,
1116
+ fieldFallback: "\u9879\u76EE",
1117
+ valueListMore: (first, rest) => `${first} \u7B49${rest + 1}\u9879`,
1118
+ quarter: (n) => `\u7B2C${n}\u5B63\u5EA6`,
1119
+ firstHalf: "\u4E0A\u534A\u5E74",
1120
+ secondHalf: "\u4E0B\u534A\u5E74",
1121
+ removeFilter: (label) => `\u79FB\u9664${label}\u7B5B\u9009`,
1122
+ clearFilter: (label) => `\u6E05\u9664${label}\u7B5B\u9009`,
1123
+ resetSearch: "\u91CD\u7F6E\u641C\u7D22",
1124
+ addFilter: "\u6DFB\u52A0\u7B5B\u9009",
1125
+ noAddableFilter: "\u6CA1\u6709\u53EF\u6DFB\u52A0\u7684\u7B5B\u9009\u6761\u4EF6\u3002",
1126
+ selectNone: "\u53D6\u6D88\u5168\u9009",
1127
+ selectAll: "\u5168\u9009",
1128
+ removeItem: (label) => `\u5220\u9664${label}`,
1129
+ keywordContains: "\u5305\u542B",
1130
+ keywordExact: "\u5B8C\u5168\u5339\u914D",
1131
+ keywordExcludes: "\u4E0D\u5305\u542B",
1132
+ keywordHintCsv: "\u591A\u4E2A\u5173\u952E\u8BCD\u7528\u9017\u53F7(,)\u5206\u9694",
1133
+ keywordHintEnter: "\u8F93\u5165\u540E\u6309 Enter \u6DFB\u52A0",
1134
+ keywordCondition: "\u641C\u7D22\u6761\u4EF6\uFF1A",
1135
+ noSearchResults: "\u6CA1\u6709\u641C\u7D22\u7ED3\u679C\u3002"
1136
+ },
1137
+ numberInput: {
1138
+ rangeBetween: (min, max) => `\u8BF7\u8F93\u5165 ${min}~${max} \u4E4B\u95F4\u7684\u503C\u3002`,
1139
+ atLeast: (min) => `\u8BF7\u8F93\u5165\u4E0D\u5C0F\u4E8E ${min} \u7684\u503C\u3002`,
1140
+ atMost: (max) => `\u8BF7\u8F93\u5165\u4E0D\u5927\u4E8E ${max} \u7684\u503C\u3002`,
1141
+ increase: "\u589E\u52A0",
1142
+ decrease: "\u51CF\u5C11"
1143
+ },
1144
+ chipInput: {
1145
+ placeholderWithComma: "\u8F93\u5165\u6807\u7B7E\uFF08\u6309 Enter \u6216\u9017\u53F7\u6DFB\u52A0\uFF09",
1146
+ placeholder: "\u8F93\u5165\u6807\u7B7E\uFF08\u6309 Enter \u6DFB\u52A0\uFF09",
1147
+ duplicateNamed: (label) => `${label}\u5DF2\u5B58\u5728\u3002`,
1148
+ duplicate: "\u5B58\u5728\u91CD\u590D\u7684\u503C\u3002",
1149
+ maxCount: (max) => `\u6700\u591A ${max} \u4E2A`
1150
+ },
1151
+ slider: { minValue: "\u6700\u5C0F\u503C", maxValue: "\u6700\u5927\u503C" },
1152
+ chat: {
1153
+ removeAttachment: (name) => `\u79FB\u9664${name}`,
1154
+ placeholder: "\u8BF7\u8F93\u5165\u6D88\u606F...",
1155
+ attachFile: "\u9644\u52A0\u6587\u4EF6",
1156
+ stopResponse: "\u505C\u6B62\u56DE\u590D",
1157
+ send: "\u53D1\u9001",
1158
+ read: "\u5DF2\u8BFB",
1159
+ unread: "\u672A\u8BFB"
1160
+ },
1161
+ loadingModal: {
1162
+ loadingMessage: "\u5904\u7406\u4E2D...",
1163
+ errorMessage: "\u64CD\u4F5C\u5931\u8D25\uFF0C\u8BF7\u91CD\u8BD5\u3002",
1164
+ errorButton: "\u91CD\u8BD5",
1165
+ ariaTitle: "\u52A0\u8F7D\u4E2D"
1166
+ },
1167
+ stepper: { errorTooltip: "\u6709\u9700\u8981\u786E\u8BA4\u7684\u9879\u76EE\u3002", ariaLabel: "\u8FDB\u5EA6\u6B65\u9AA4" },
1168
+ timeline: { empty: "\u6CA1\u6709\u8BB0\u5F55\u3002" },
1169
+ callout: { dangerTitle: "\u6CE8\u610F\u4E8B\u9879" },
1170
+ guide: { tip: "\u4F7F\u7528\u63D0\u793A", notion: "\u4F7F\u7528\u6307\u5357" },
1171
+ loginCard: { login: "\u4F7F\u7528\u7EDF\u4E00\u8D26\u53F7\u767B\u5F55" },
1172
+ modal: { defaultTitle: "\u6A21\u6001\u6846" },
1173
+ launcher: { opensInNewTab: "\u5728\u65B0\u6807\u7B7E\u9875\u4E2D\u6253\u5F00" },
1174
+ common: {
1175
+ close: "\u5173\u95ED",
1176
+ clear: "\u6E05\u9664",
1177
+ confirm: "\u786E\u5B9A",
1178
+ all: "\u5168\u90E8",
1179
+ back: "\u8FD4\u56DE",
1180
+ more: "\u66F4\u591A",
1181
+ moreActions: "\u66F4\u591A\u529F\u80FD",
1182
+ openMenu: "\u6253\u5F00\u83DC\u5355",
1183
+ dragHandle: "\u62D6\u52A8\u624B\u67C4",
1184
+ resizeDrawer: "\u8C03\u6574\u62BD\u5C49\u5BBD\u5EA6",
1185
+ search: "\u641C\u7D22",
1186
+ count: (n) => `${n}\u4E2A`
1187
+ },
1188
+ input: {
1189
+ placeholder: "\u8BF7\u8F93\u5165\u3002",
1190
+ searchWithinResults: "\u5728\u7ED3\u679C\u4E2D\u641C\u7D22",
1191
+ clearInput: "\u91CD\u7F6E\u8F93\u5165",
1192
+ showPassword: "\u663E\u793A\u5BC6\u7801"
1193
+ },
338
1194
  pagination: {
339
1195
  firstPage: "\u7B2C\u4E00\u9875",
340
1196
  prevPage: "\u4E0A\u4E00\u9875",
@@ -351,6 +1207,23 @@ var BUNDLES = {
351
1207
  searchPlaceholder: "\u641C\u7D22",
352
1208
  empty: "\u6CA1\u6709\u53EF\u663E\u793A\u7684\u9879\u76EE\u3002",
353
1209
  loading: "\u52A0\u8F7D\u4E2D..."
1210
+ },
1211
+ table: {
1212
+ selectAll: "\u5168\u9009",
1213
+ selectRow: "\u9009\u62E9\u884C",
1214
+ empty: "\u6CA1\u6709\u6570\u636E\u3002",
1215
+ rowsPerPage: (count) => `\u6BCF\u9875 ${count} \u6761`,
1216
+ editable: "\u53EF\u7F16\u8F91",
1217
+ opensInNewScreen: "\u5728\u65B0\u9875\u9762\u4E2D\u6253\u5F00",
1218
+ sortBy: (label) => `\u6309${label}\u6392\u5E8F`,
1219
+ denseOff: "\u5BBD\u677E\u663E\u793A",
1220
+ denseOn: "\u7D27\u51D1\u663E\u793A"
1221
+ },
1222
+ tableBar: {
1223
+ totalBefore: "\u5171 ",
1224
+ totalAfter: " \u6761",
1225
+ selectedBefore: "\u5DF2\u9009 ",
1226
+ selectedAfter: " \u6761"
354
1227
  }
355
1228
  }
356
1229
  };
@@ -367,11 +1240,40 @@ function mergeDefined(base, override) {
367
1240
  }
368
1241
  return next;
369
1242
  }
1243
+ function mergeDateDefined(base, override) {
1244
+ const merged = mergeDefined(base, override);
1245
+ if (merged.weekdays.length !== 7) merged.weekdays = base.weekdays;
1246
+ if (merged.weekdaysLong.length !== 7) merged.weekdaysLong = base.weekdaysLong;
1247
+ return merged;
1248
+ }
370
1249
  function resolveMessages(locale, override) {
371
1250
  const base = BUNDLES[normalizeLocale(locale)];
372
1251
  return {
1252
+ common: mergeDefined(base.common, override?.common),
1253
+ input: mergeDefined(base.input, override?.input),
1254
+ chart: mergeDefined(base.chart, override?.chart),
1255
+ date: mergeDateDefined(base.date, override?.date),
1256
+ form: mergeDefined(base.form, override?.form),
1257
+ accountListBox: mergeDefined(base.accountListBox, override?.accountListBox),
1258
+ gnbSystem: mergeDefined(base.gnbSystem, override?.gnbSystem),
1259
+ editor: mergeDefined(base.editor, override?.editor),
1260
+ chipFilter: mergeDefined(base.chipFilter, override?.chipFilter),
1261
+ numberInput: mergeDefined(base.numberInput, override?.numberInput),
1262
+ chipInput: mergeDefined(base.chipInput, override?.chipInput),
1263
+ slider: mergeDefined(base.slider, override?.slider),
1264
+ chat: mergeDefined(base.chat, override?.chat),
1265
+ loadingModal: mergeDefined(base.loadingModal, override?.loadingModal),
1266
+ stepper: mergeDefined(base.stepper, override?.stepper),
1267
+ timeline: mergeDefined(base.timeline, override?.timeline),
1268
+ callout: mergeDefined(base.callout, override?.callout),
1269
+ guide: mergeDefined(base.guide, override?.guide),
1270
+ loginCard: mergeDefined(base.loginCard, override?.loginCard),
1271
+ modal: mergeDefined(base.modal, override?.modal),
1272
+ launcher: mergeDefined(base.launcher, override?.launcher),
373
1273
  pagination: mergeDefined(base.pagination, override?.pagination),
374
- select: mergeDefined(base.select, override?.select)
1274
+ select: mergeDefined(base.select, override?.select),
1275
+ table: mergeDefined(base.table, override?.table),
1276
+ tableBar: mergeDefined(base.tableBar, override?.tableBar)
375
1277
  };
376
1278
  }
377
1279
  function createValue(locale, override) {
@@ -392,6 +1294,11 @@ function SLocaleProvider({ locale, messages, children }) {
392
1294
  function useLocale() {
393
1295
  return react.useContext(LocaleContext);
394
1296
  }
1297
+ var strokeProps = (strokeWidth) => ({
1298
+ stroke: "currentColor",
1299
+ strokeWidth: strokeWidth ?? 1.5,
1300
+ vectorEffect: strokeWidth ? "non-scaling-stroke" : void 0
1301
+ });
395
1302
  var Icon_account = (p) => {
396
1303
  const { size = 24, ...rest } = p;
397
1304
  return /* @__PURE__ */ jsxRuntime.jsxs(
@@ -2201,7 +3108,8 @@ var Icon_helpFill = (p) => {
2201
3108
  );
2202
3109
  };
2203
3110
  var Icon_helpOutline = (p) => {
2204
- const { size = 24, ...rest } = p;
3111
+ const { size = 24, strokeWidth, ...rest } = p;
3112
+ const stroke = strokeProps(strokeWidth);
2205
3113
  return /* @__PURE__ */ jsxRuntime.jsxs(
2206
3114
  "svg",
2207
3115
  {
@@ -2215,23 +3123,24 @@ var Icon_helpOutline = (p) => {
2215
3123
  /* @__PURE__ */ jsxRuntime.jsx(
2216
3124
  "path",
2217
3125
  {
2218
- d: "M12 15.75C12.5522 15.7501 13 16.1978 13 16.75C12.9999 17.3021 12.5521 17.7499 12 17.75C11.4478 17.75 11.0001 17.3022 11 16.75C11 16.1977 11.4477 15.75 12 15.75Z",
2219
- fill: "currentColor"
3126
+ d: "M22.1998 11.9998C22.1998 6.3665 17.6331 1.7998 11.9998 1.7998C6.3665 1.7998 1.7998 6.3665 1.7998 11.9998C1.7998 17.6331 6.3665 22.1998 11.9998 22.1998C17.6331 22.1998 22.1998 17.6331 22.1998 11.9998Z",
3127
+ strokeLinecap: "round",
3128
+ ...stroke
2220
3129
  }
2221
3130
  ),
2222
3131
  /* @__PURE__ */ jsxRuntime.jsx(
2223
3132
  "path",
2224
3133
  {
2225
- d: "M12 5.625C13.4155 5.62505 14.3879 6.17365 14.9883 6.93164C15.5622 7.65643 15.75 8.51261 15.75 9.10254C15.7498 10.0616 15.2169 11.8923 13.1826 12.4336C13.039 12.4719 12.9188 12.5466 12.8428 12.6279C12.7715 12.7043 12.7501 12.7716 12.75 12.8291V13.875C12.7499 14.2891 12.4141 14.6249 12 14.625C11.5859 14.625 11.2501 14.2891 11.25 13.875V12.8291C11.2502 11.8236 12.0595 11.1807 12.7969 10.9844C13.9244 10.6843 14.2498 9.68018 14.25 9.10254C14.25 8.78353 14.1382 8.27475 13.8125 7.86328C13.5129 7.48502 12.9842 7.12504 12 7.125C11.0157 7.125 10.4871 7.485 10.1875 7.86328C9.86168 8.27478 9.75 8.78348 9.75 9.10254C9.74975 9.51648 9.41397 9.85244 9 9.85254C8.58594 9.85254 8.25025 9.51654 8.25 9.10254C8.25 8.51256 8.43767 7.65647 9.01172 6.93164C9.61212 6.17361 10.5844 5.625 12 5.625Z",
2226
- fill: "currentColor"
3134
+ d: "M8.99982 9.10203C8.99982 8.19294 9.59982 6.37476 11.9998 6.37476C14.3998 6.37476 14.9998 8.19294 14.9998 9.10203C14.9998 9.87031 14.5713 11.2879 12.9899 11.7086C12.4562 11.8506 11.9998 12.277 11.9998 12.8293V13.8748",
3135
+ strokeLinecap: "round",
3136
+ strokeLinejoin: "round",
3137
+ ...stroke
2227
3138
  }
2228
3139
  ),
2229
3140
  /* @__PURE__ */ jsxRuntime.jsx(
2230
3141
  "path",
2231
3142
  {
2232
- fillRule: "evenodd",
2233
- clipRule: "evenodd",
2234
- d: "M12 1.0498C18.0474 1.04991 22.9502 5.95255 22.9502 12C22.9501 18.0474 18.0474 22.9501 12 22.9502C5.95255 22.9502 1.04991 18.0474 1.0498 12C1.0498 5.95248 5.95248 1.0498 12 1.0498ZM12 2.5498C6.78091 2.5498 2.5498 6.78091 2.5498 12C2.54991 17.219 6.78097 21.4502 12 21.4502C17.2189 21.4501 21.4501 17.2189 21.4502 12C21.4502 6.78097 17.219 2.54991 12 2.5498Z",
3143
+ d: "M11.9998 15.7498C12.5521 15.7498 12.9998 16.1975 12.9998 16.7498C12.9998 17.302 12.5521 17.7498 11.9998 17.7498C11.4475 17.7498 10.9998 17.302 10.9998 16.7498C10.9998 16.1975 11.4475 15.7498 11.9998 15.7498Z",
2235
3144
  fill: "currentColor"
2236
3145
  }
2237
3146
  )
@@ -2760,7 +3669,8 @@ var Icon_notificationFill = (p) => {
2760
3669
  );
2761
3670
  };
2762
3671
  var Icon_notificationOutline = (p) => {
2763
- const { size = 24, ...rest } = p;
3672
+ const { size = 24, strokeWidth, ...rest } = p;
3673
+ const stroke = strokeProps(strokeWidth);
2764
3674
  return /* @__PURE__ */ jsxRuntime.jsxs(
2765
3675
  "svg",
2766
3676
  {
@@ -2774,23 +3684,16 @@ var Icon_notificationOutline = (p) => {
2774
3684
  /* @__PURE__ */ jsxRuntime.jsx(
2775
3685
  "path",
2776
3686
  {
2777
- d: "M12 15.5C12.5523 15.5 13 15.9477 13 16.5C13 17.0523 12.5523 17.5 12 17.5C11.4477 17.5 11 17.0523 11 16.5C11 15.9477 11.4477 15.5 12 15.5Z",
2778
- fill: "currentColor"
2779
- }
2780
- ),
2781
- /* @__PURE__ */ jsxRuntime.jsx(
2782
- "path",
2783
- {
2784
- d: "M12 6.375C12.4142 6.375 12.75 6.71079 12.75 7.125V13.125C12.75 13.5392 12.4142 13.875 12 13.875C11.5858 13.875 11.25 13.5392 11.25 13.125V7.125C11.25 6.71079 11.5858 6.375 12 6.375Z",
2785
- fill: "currentColor"
3687
+ d: "M22.2 12C22.2 6.36674 17.6333 1.80005 12 1.80005C6.36668 1.80005 1.79999 6.36674 1.79999 12C1.79999 17.6334 6.36668 22.2 12 22.2C17.6333 22.2 22.2 17.6334 22.2 12Z",
3688
+ strokeLinecap: "round",
3689
+ ...stroke
2786
3690
  }
2787
3691
  ),
3692
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M12 13.125L12 7.125", strokeLinecap: "round", strokeLinejoin: "round", ...stroke }),
2788
3693
  /* @__PURE__ */ jsxRuntime.jsx(
2789
3694
  "path",
2790
3695
  {
2791
- fillRule: "evenodd",
2792
- clipRule: "evenodd",
2793
- d: "M12 1.0498C18.0474 1.04991 22.9501 5.95264 22.9502 12C22.9501 18.0474 18.0474 22.9501 12 22.9502C5.95263 22.9501 1.04991 18.0474 1.0498 12C1.04991 5.95263 5.95263 1.0499 12 1.0498ZM12 2.5498C6.78106 2.5499 2.54991 6.78106 2.5498 12C2.54991 17.2189 6.78106 21.4501 12 21.4502C17.2189 21.4501 21.4501 17.2189 21.4502 12C21.4501 6.78107 17.2189 2.54991 12 2.5498Z",
3696
+ d: "M12 15.5C12.5523 15.5 13 15.9477 13 16.5C13 17.0523 12.5523 17.5 12 17.5C11.4477 17.5 11 17.0523 11 16.5C11 15.9477 11.4477 15.5 12 15.5Z",
2794
3697
  fill: "currentColor"
2795
3698
  }
2796
3699
  )
@@ -3253,7 +4156,8 @@ var Icon_setting = (p) => {
3253
4156
  );
3254
4157
  };
3255
4158
  var Icon_settingOutline = (p) => {
3256
- const { size = 24, ...rest } = p;
4159
+ const { size = 24, strokeWidth, ...rest } = p;
4160
+ const stroke = strokeProps(strokeWidth);
3257
4161
  return /* @__PURE__ */ jsxRuntime.jsxs(
3258
4162
  "svg",
3259
4163
  {
@@ -3264,22 +4168,12 @@ var Icon_settingOutline = (p) => {
3264
4168
  xmlns: "http://www.w3.org/2000/svg",
3265
4169
  ...rest,
3266
4170
  children: [
4171
+ /* @__PURE__ */ jsxRuntime.jsx("circle", { cx: "12", cy: "12", r: "3", ...stroke }),
3267
4172
  /* @__PURE__ */ jsxRuntime.jsx(
3268
4173
  "path",
3269
4174
  {
3270
- fillRule: "evenodd",
3271
- clipRule: "evenodd",
3272
- d: "M11.9996 8C14.2087 8 15.9996 9.79086 15.9996 12C15.9996 14.2091 14.2087 16 11.9996 16C9.79065 15.9998 7.9996 14.209 7.9996 12C7.9996 9.791 9.79065 8.00022 11.9996 8ZM11.9996 9.5C10.6191 9.50022 9.4996 10.6194 9.4996 12C9.4996 13.3806 10.6191 14.4998 11.9996 14.5C13.3803 14.5 14.4996 13.3807 14.4996 12C14.4996 10.6193 13.3803 9.5 11.9996 9.5Z",
3273
- fill: "currentColor"
3274
- }
3275
- ),
3276
- /* @__PURE__ */ jsxRuntime.jsx(
3277
- "path",
3278
- {
3279
- fillRule: "evenodd",
3280
- clipRule: "evenodd",
3281
- d: "M13.1851 1C13.5085 1 13.7979 1.20161 13.9068 1.50293L14.6832 3.65527C14.9613 3.72452 15.2006 3.79367 15.4029 3.86621C15.5134 3.90579 15.64 3.95628 15.7828 4.0166L16.2613 4.22949L18.0689 3.27246C18.2163 3.19438 18.3856 3.16661 18.5504 3.19238C18.7153 3.21835 18.8676 3.29735 18.984 3.41699L20.5748 5.06152C20.7859 5.28042 20.8459 5.60054 20.7271 5.87988L19.8785 7.86719C20.0192 8.12546 20.1316 8.34655 20.2174 8.53125C20.3097 8.73243 20.4239 9.01001 20.5601 9.36719L22.5377 10.2148L22.6432 10.2695C22.8771 10.4155 23.016 10.6779 22.9986 10.9561L22.8531 13.2383L22.8375 13.3486C22.8141 13.4565 22.7672 13.5589 22.6998 13.6475L22.6266 13.7305C22.5476 13.8076 22.4523 13.8674 22.3473 13.9043L20.4752 14.5693C20.4213 14.8278 20.3647 15.0493 20.3053 15.2363L20.1519 15.666C20.0973 15.8078 20.0394 15.9488 19.9781 16.0879L20.9185 18.166L20.9586 18.2793C20.9899 18.3941 20.9942 18.5153 20.9693 18.6328L20.9351 18.7471C20.8923 18.8584 20.823 18.959 20.733 19.0391L18.9449 20.6357L18.8512 20.707C18.753 20.7705 18.6411 20.812 18.524 20.8262L18.4059 20.8311C18.2889 20.8272 18.1732 20.7964 18.0689 20.7412L16.2262 19.7647C15.9378 19.9173 15.6394 20.0519 15.3346 20.168L14.5299 20.4697L13.815 22.4502L13.7672 22.5547C13.7121 22.6552 13.6346 22.7424 13.5406 22.8096L13.442 22.8701C13.3398 22.9219 13.2264 22.9498 13.1109 22.9522L11.0211 23C10.9023 23.0031 10.7841 22.9783 10.6773 22.9287L10.5748 22.8711C10.4431 22.7831 10.3415 22.6557 10.2848 22.5078L9.44198 20.2783C9.1547 20.1801 8.86973 20.0733 8.58847 19.959C8.35848 19.8594 8.13142 19.7518 7.90878 19.6367L5.81894 20.5303L5.71347 20.5664C5.64162 20.5854 5.56705 20.594 5.49276 20.5918L5.38241 20.5801C5.27208 20.5606 5.1671 20.5175 5.07577 20.4541L4.98886 20.3838L3.44198 18.9326C3.35574 18.8519 3.28988 18.7525 3.2496 18.6426L3.21737 18.5303C3.18685 18.376 3.20586 18.2154 3.27109 18.0723L4.1705 16.1143C4.05101 15.8824 3.93933 15.6454 3.83749 15.4053C3.71871 15.1116 3.60934 14.814 3.50839 14.5137L1.53866 13.9141C1.41879 13.8777 1.31002 13.8122 1.22226 13.7246L1.14218 13.6299C1.04481 13.4941 0.994151 13.3291 0.999601 13.1621L1.07675 11.0498C1.08222 10.9121 1.1259 10.7782 1.20175 10.6631C1.25874 10.5767 1.33262 10.5026 1.41855 10.4463L1.50839 10.3965L3.57382 9.4043C3.6695 9.05348 3.75306 8.78014 3.82675 8.58106C3.9305 8.31518 4.0461 8.05376 4.17245 7.79785L3.27694 5.90625C3.20906 5.76263 3.18873 5.6004 3.21835 5.44434C3.24057 5.3276 3.2899 5.21813 3.36191 5.125L3.44198 5.03711L4.98593 3.57813C5.09409 3.47611 5.23034 3.40784 5.37655 3.38086C5.52273 3.354 5.67376 3.37002 5.81112 3.42676L7.89901 4.28906C8.12988 4.13515 8.33881 4.01023 8.52792 3.91016C8.75326 3.79034 9.05504 3.66547 9.43417 3.53027L10.1607 1.50488C10.2143 1.35699 10.3122 1.22899 10.441 1.13867C10.57 1.04839 10.7249 0.999723 10.8824 1H13.1851ZM10.8463 4.03613C10.6946 4.45908 10.3613 4.79149 9.93808 4.94238C9.5875 5.06739 9.36381 5.16528 9.23202 5.23535L9.23007 5.23633C9.09075 5.31005 8.9247 5.40801 8.73105 5.53711C8.31531 5.81413 7.78855 5.86633 7.32675 5.67578L5.67343 4.99219L4.86484 5.75586L5.52792 7.15625C5.72387 7.57031 5.71997 8.05117 5.51718 8.46192C5.41394 8.67102 5.31944 8.88459 5.23398 9.10156L5.14218 9.37598C5.10686 9.491 5.06681 9.63118 5.02109 9.79883C4.90655 10.2184 4.6153 10.5675 4.22323 10.7559L2.55917 11.5547L2.51913 12.6436L3.94491 13.0781L4.11386 13.1416C4.49659 13.3106 4.79411 13.6335 4.92929 14.0352C5.01804 14.2992 5.11534 14.5609 5.21933 14.8193L5.35507 15.126C5.40249 15.2271 5.45233 15.3275 5.50351 15.4268C5.71457 15.8364 5.72588 16.3204 5.53378 16.7393L4.85898 18.2061L5.66659 18.9639L7.31894 18.2578L7.47616 18.2012C7.84698 18.0894 8.24932 18.125 8.59726 18.3047C8.78187 18.4001 8.97024 18.4892 9.16073 18.5723C9.28594 18.6231 9.41211 18.6724 9.53866 18.7197L9.92733 18.8594L10.0816 18.9219C10.4317 19.0869 10.7069 19.382 10.8453 19.748L11.5025 21.4883L12.5748 21.4639L13.1187 19.96L13.1832 19.8096C13.3508 19.4678 13.6433 19.2005 14.0035 19.0654L14.8004 18.7666L15.1676 18.6143C15.288 18.5597 15.4071 18.5013 15.524 18.4395L15.692 18.3623C16.0928 18.2097 16.5441 18.236 16.9283 18.4395L18.3238 19.1787L19.3248 18.2842L18.6109 16.7061C18.4355 16.318 18.4336 15.8732 18.6051 15.4834C18.7075 15.2508 18.7973 15.0126 18.8775 14.7715C18.9163 14.6479 18.9608 14.4825 19.0064 14.2637L19.0582 14.0762C19.2064 13.6503 19.5409 13.3098 19.9723 13.1563L21.3873 12.6523L21.4674 11.3877L19.9703 10.7461C19.5971 10.5861 19.3035 10.2817 19.1588 9.90234C19.0283 9.56034 18.9273 9.31663 18.8541 9.15723C18.7854 9.00988 18.689 8.81973 18.5611 8.58496C18.3418 8.18212 18.3187 7.70024 18.4986 7.27832L19.1519 5.74707L18.2867 4.85352L16.9625 5.55567C16.5475 5.77509 16.0531 5.78799 15.6275 5.58984C15.2974 5.43614 15.0582 5.33606 14.8971 5.27832C14.7581 5.22851 14.5701 5.17338 14.3209 5.11133C13.8356 4.99032 13.4418 4.63455 13.2721 4.16406L12.6715 2.5H11.3971L10.8463 4.03613Z",
3282
- fill: "currentColor"
4175
+ d: "M13.078 2C13.372 2 13.635 2.183 13.734 2.457L14.4399 4.41397C14.6929 4.47697 14.9099 4.53997 15.0939 4.60597C15.2949 4.67797 15.5539 4.78697 15.8739 4.93597L17.5178 4.06598C17.652 3.99488 17.8056 3.96922 17.9556 3.99284C18.1057 4.01646 18.244 4.08809 18.3498 4.19698L19.7958 5.69196C19.9877 5.89095 20.0417 6.18195 19.9337 6.43595L19.1628 8.24293C19.2908 8.47792 19.3928 8.67892 19.4708 8.84692C19.5548 9.02992 19.6588 9.28191 19.7828 9.60691L21.5797 10.3769C21.8497 10.4919 22.0167 10.7619 21.9987 11.0509L21.8667 13.1259C21.8577 13.2607 21.8093 13.3899 21.7275 13.4974C21.6457 13.605 21.5342 13.6861 21.4067 13.7309L19.7048 14.3359C19.6558 14.5708 19.6048 14.7718 19.5508 14.9418C19.4637 15.2044 19.3642 15.4627 19.2528 15.7158L20.1077 17.6058C20.1681 17.7386 20.1843 17.8872 20.1541 18.0299C20.1239 18.1726 20.0488 18.3019 19.9397 18.3988L18.3138 19.8508C18.2067 19.946 18.0731 20.0062 17.9308 20.0234C17.7886 20.0405 17.6445 20.0138 17.5178 19.9468L15.8419 19.0588C15.5797 19.1976 15.3092 19.3202 15.0319 19.4258L14.2999 19.6998L13.65 21.4998C13.6018 21.6316 13.5149 21.7458 13.4007 21.8273C13.2865 21.9089 13.1503 21.954 13.01 21.9568L11.1101 21.9998C10.966 22.0035 10.8244 21.9626 10.7046 21.8825C10.5848 21.8025 10.4927 21.6873 10.4411 21.5528L9.6751 19.5258C9.41376 19.4365 9.155 19.3398 8.89913 19.2358C8.68985 19.1452 8.48374 19.0475 8.28115 18.9428L6.38122 19.7548C6.25603 19.8082 6.11801 19.8241 5.98397 19.8004C5.84993 19.7768 5.72564 19.7148 5.62624 19.6218L4.22029 18.3028C4.11562 18.205 4.04433 18.0768 4.01651 17.9363C3.9887 17.7958 4.00576 17.6501 4.0653 17.5198L4.88227 15.7398C4.77362 15.529 4.67288 15.3142 4.58028 15.0958C4.47218 14.8286 4.37214 14.5581 4.28029 14.2849L2.49035 13.7399C2.34486 13.6959 2.21795 13.6051 2.12935 13.4816C2.04075 13.3581 1.99541 13.2088 2.00037 13.0569L2.07037 11.1359C2.07535 11.0106 2.1145 10.889 2.18359 10.7843C2.25268 10.6796 2.34907 10.5958 2.46235 10.5419L4.34029 9.63991C4.42728 9.32091 4.50328 9.07292 4.57028 8.89192C4.66462 8.65017 4.76938 8.41261 4.88427 8.17993L4.0703 6.45995C4.00852 6.32933 3.98977 6.18249 4.01672 6.04054C4.04367 5.89859 4.11494 5.76884 4.22029 5.66996L5.62424 4.34397C5.72266 4.25115 5.8458 4.18874 5.97886 4.16426C6.11191 4.13977 6.2492 4.15426 6.37422 4.20598L8.27215 4.98997C8.48214 4.84997 8.67214 4.73697 8.84413 4.64597C9.04912 4.53697 9.32311 4.42297 9.6681 4.29997L10.3281 2.459C10.3769 2.32427 10.4661 2.20788 10.5835 2.12573C10.7009 2.04358 10.8408 1.99967 10.9841 2H13.078Z",
4176
+ ...stroke
3283
4177
  }
3284
4178
  )
3285
4179
  ]
@@ -3926,6 +4820,19 @@ var ICONS = {
3926
4820
  warningOutline: Icon_warningOutline,
3927
4821
  youtube: Icon_youtube
3928
4822
  };
4823
+ var STROKE_BY_SIZE = {
4824
+ 8: 1,
4825
+ 10: 1,
4826
+ 12: 1,
4827
+ 16: 1.25,
4828
+ 20: 1.5,
4829
+ 24: 1.5,
4830
+ 32: 2
4831
+ };
4832
+ function toPx(size) {
4833
+ if (typeof size === "number") return size;
4834
+ return /^\d+(\.\d+)?(px)?$/.test(size) ? parseFloat(size) : void 0;
4835
+ }
3929
4836
  var SIcon = /* @__PURE__ */ react.forwardRef(function SIcon2({ name, size = 24, color, rotate, label, className, style }, ref) {
3930
4837
  const Svg = ICONS[name];
3931
4838
  if (!Svg) return null;
@@ -3944,7 +4851,7 @@ var SIcon = /* @__PURE__ */ react.forwardRef(function SIcon2({ name, size = 24,
3944
4851
  role: label ? "img" : void 0,
3945
4852
  "aria-label": label,
3946
4853
  "aria-hidden": label ? void 0 : true,
3947
- children: /* @__PURE__ */ jsxRuntime.jsx(Svg, { size: cssSize ? "100%" : size })
4854
+ children: /* @__PURE__ */ jsxRuntime.jsx(Svg, { size: cssSize ? "100%" : size, strokeWidth: STROKE_BY_SIZE[toPx(size) ?? 0] })
3948
4855
  }
3949
4856
  );
3950
4857
  });
@@ -4583,6 +5490,7 @@ function SFooter({
4583
5490
  leftClassName,
4584
5491
  style
4585
5492
  }) {
5493
+ const tc = useLocale().messages.common;
4586
5494
  const isGrey = bg === "grey";
4587
5495
  const hasSlot = left != null || children != null;
4588
5496
  const hasButton = button != null;
@@ -4614,7 +5522,7 @@ function SFooter({
4614
5522
  ...button,
4615
5523
  size,
4616
5524
  color: button.color ?? "primary",
4617
- label: button.label ?? "\uD655\uC778"
5525
+ label: button.label ?? tc.confirm
4618
5526
  }
4619
5527
  )
4620
5528
  ]
@@ -4995,6 +5903,7 @@ var STooltipImpl = /* @__PURE__ */ react.forwardRef(function STooltip({
4995
5903
  style,
4996
5904
  contentProps
4997
5905
  }, ref) {
5906
+ const tc = useLocale().messages.common;
4998
5907
  const portalContainer = usePortalContainer();
4999
5908
  const [internalOpen, setInternalOpen] = react.useState(false);
5000
5909
  const isControlled = openProp !== void 0;
@@ -5112,7 +6021,7 @@ var STooltipImpl = /* @__PURE__ */ react.forwardRef(function STooltip({
5112
6021
  icon: "close",
5113
6022
  size: "xs",
5114
6023
  intent: tooltipType === "default" ? "inverse" : "default",
5115
- ariaLabel: "\uB2EB\uAE30",
6024
+ ariaLabel: tc.close,
5116
6025
  className: "shrink-0",
5117
6026
  onClick: () => {
5118
6027
  cancelHide();
@@ -5128,14 +6037,21 @@ var STooltipImpl = /* @__PURE__ */ react.forwardRef(function STooltip({
5128
6037
  ] });
5129
6038
  });
5130
6039
  var STooltip2 = /* @__PURE__ */ withDisplayName(STooltipImpl, "STooltip");
5131
- function runRules(value, rules) {
6040
+ function runRules(value, rules, invalidMessage = "\uC720\uD6A8\uD558\uC9C0 \uC54A\uC740 \uAC12\uC785\uB2C8\uB2E4.") {
5132
6041
  if (!rules || rules.length === 0) return "";
5133
6042
  for (const rule of rules) {
5134
6043
  const result = rule(value ?? "");
5135
- if (result !== true) return typeof result === "string" ? result : "\uC720\uD6A8\uD558\uC9C0 \uC54A\uC740 \uAC12\uC785\uB2C8\uB2E4.";
6044
+ if (result !== true) return typeof result === "string" ? result : invalidMessage;
5136
6045
  }
5137
6046
  return "";
5138
6047
  }
6048
+ function useRunRules() {
6049
+ const invalid = useLocale().messages.form.invalid;
6050
+ return react.useCallback(
6051
+ (value, rules) => runRules(value, rules, invalid),
6052
+ [invalid]
6053
+ );
6054
+ }
5139
6055
  var FormContext = /* @__PURE__ */ react.createContext(null);
5140
6056
  function useFormContext() {
5141
6057
  return react.useContext(FormContext);
@@ -5467,12 +6383,15 @@ var STextarea = /* @__PURE__ */ react.forwardRef(function STextarea2({
5467
6383
  width,
5468
6384
  disabled = false,
5469
6385
  readOnly = false,
5470
- placeholder = "\uC785\uB825\uD574 \uC8FC\uC138\uC694.",
6386
+ placeholder: placeholderProp,
5471
6387
  onBlur,
5472
6388
  className,
5473
6389
  style,
5474
6390
  ...rest
5475
6391
  }, ref) {
6392
+ const runRules2 = useRunRules();
6393
+ const ti = useLocale().messages.input;
6394
+ const placeholder = placeholderProp ?? ti.placeholder;
5476
6395
  const p = TEXTAREA_SIZE[size];
5477
6396
  const heightForRows = (n) => `calc(${p.lineHeight * n}px + ${p.paddingY} * 2)`;
5478
6397
  const minHeight = heightForRows(MIN_ROWS);
@@ -5507,7 +6426,7 @@ var STextarea = /* @__PURE__ */ react.forwardRef(function STextarea2({
5507
6426
  useFormField({
5508
6427
  name: rest.name,
5509
6428
  validate: () => {
5510
- const msg = runRules(value, rules);
6429
+ const msg = runRules2(value, rules);
5511
6430
  setRuleError(msg);
5512
6431
  return msg === "";
5513
6432
  },
@@ -5556,11 +6475,11 @@ var STextarea = /* @__PURE__ */ react.forwardRef(function STextarea2({
5556
6475
  onChange: (e) => {
5557
6476
  onChange?.(e);
5558
6477
  onValueChange?.(e.target.value);
5559
- if (ruleError !== "") setRuleError(runRules(e.target.value, rules));
6478
+ if (ruleError !== "") setRuleError(runRules2(e.target.value, rules));
5560
6479
  },
5561
6480
  onBlur: (e) => {
5562
6481
  onBlur?.(e);
5563
- if (rules && rules.length > 0) setRuleError(runRules(e.target.value, rules));
6482
+ if (rules && rules.length > 0) setRuleError(runRules2(e.target.value, rules));
5564
6483
  },
5565
6484
  className: cn(
5566
6485
  "w-full border-0 bg-transparent outline-none placeholder:text-[color:var(--sys-color-field-text-placeholder)] disabled:cursor-not-allowed",
@@ -5587,7 +6506,6 @@ var STextarea = /* @__PURE__ */ react.forwardRef(function STextarea2({
5587
6506
  }
5588
6507
  );
5589
6508
  });
5590
- var DEFAULT_PLACEHOLDER = "\uBA54\uC2DC\uC9C0\uB97C \uC785\uB825\uD574 \uC8FC\uC138\uC694...";
5591
6509
  var FIELD_BORDER = 1;
5592
6510
  var TEXTAREA_MIN_HEIGHT = `calc(var(--cmp-chatInput-buttonFrame-height) - ${FIELD_BORDER * 2}px)`;
5593
6511
  var BUTTON_BOTTOM_INSET = `calc((var(--cmp-chatInput-buttonFrame-height) - var(--cmp-ghostButton-md-size)) / 2)`;
@@ -5598,7 +6516,7 @@ function BarButton(props) {
5598
6516
  var SChatInputImpl = /* @__PURE__ */ react.forwardRef(function SChatInput({
5599
6517
  value = "",
5600
6518
  onValueChange,
5601
- placeholder = DEFAULT_PLACEHOLDER,
6519
+ placeholder: placeholderProp,
5602
6520
  disabled = false,
5603
6521
  onSend,
5604
6522
  hasAttachments = false,
@@ -5619,6 +6537,8 @@ var SChatInputImpl = /* @__PURE__ */ react.forwardRef(function SChatInput({
5619
6537
  textareaClassName,
5620
6538
  ...rest
5621
6539
  }, ref) {
6540
+ const t = useLocale().messages.chat;
6541
+ const placeholder = placeholderProp ?? t.placeholder;
5622
6542
  const hasText = value.trim() !== "";
5623
6543
  const canSend = !disabled && !busy && !sendDisabled && (hasText || hasAttachments);
5624
6544
  const send = () => {
@@ -5658,7 +6578,7 @@ var SChatInputImpl = /* @__PURE__ */ react.forwardRef(function SChatInput({
5658
6578
  BarButton,
5659
6579
  {
5660
6580
  icon: "attachFile",
5661
- ariaLabel: "\uD30C\uC77C \uCCA8\uBD80",
6581
+ ariaLabel: t.attachFile,
5662
6582
  tooltipText: attachTooltip,
5663
6583
  disabled: attachLocked,
5664
6584
  onClick: handleAttachClick
@@ -5704,7 +6624,7 @@ var SChatInputImpl = /* @__PURE__ */ react.forwardRef(function SChatInput({
5704
6624
  {
5705
6625
  icon: "stop",
5706
6626
  intent: "danger",
5707
- ariaLabel: "\uC751\uB2F5 \uC911\uC9C0",
6627
+ ariaLabel: t.stopResponse,
5708
6628
  disabled,
5709
6629
  onClick: onStop
5710
6630
  }
@@ -5714,7 +6634,7 @@ var SChatInputImpl = /* @__PURE__ */ react.forwardRef(function SChatInput({
5714
6634
  {
5715
6635
  icon: "send",
5716
6636
  intent: "subAction",
5717
- ariaLabel: "\uC804\uC1A1",
6637
+ ariaLabel: t.send,
5718
6638
  disabled: !canSend,
5719
6639
  onClick: send
5720
6640
  }
@@ -5745,6 +6665,7 @@ var CHAT_ATTACHED_FILE_CONFIG = {
5745
6665
  };
5746
6666
  var SChatAttachedFileImpl = /* @__PURE__ */ react.forwardRef(
5747
6667
  function SChatAttachedFile({ name, onRemove, className, ...rest }, ref) {
6668
+ const t = useLocale().messages.chat;
5748
6669
  return /* @__PURE__ */ jsxRuntime.jsxs(
5749
6670
  "div",
5750
6671
  {
@@ -5785,7 +6706,7 @@ var SChatAttachedFileImpl = /* @__PURE__ */ react.forwardRef(
5785
6706
  {
5786
6707
  icon: "close",
5787
6708
  size: "xs",
5788
- ariaLabel: `${name} \uC81C\uAC70`,
6709
+ ariaLabel: t.removeAttachment(name),
5789
6710
  onClick: onRemove,
5790
6711
  className: "shrink-0"
5791
6712
  }
@@ -5912,10 +6833,6 @@ var OUTGOING_SURFACE = {
5912
6833
  admin: "admin"
5913
6834
  };
5914
6835
  var CHAT_MESSAGE_READ_STATUSES = ["read", "unread"];
5915
- var READ_STATUS_LABEL = {
5916
- read: "\uC77D\uC74C",
5917
- unread: "\uC548 \uC77D\uC74C"
5918
- };
5919
6836
  var READ_STATUS_COLOR = {
5920
6837
  read: "text-(--cmp-chatTimeStamp-color)",
5921
6838
  unread: "text-(--cmp-chatReadMark-color)"
@@ -5964,6 +6881,7 @@ var SChatMessageImpl = /* @__PURE__ */ react.forwardRef(function SChatMessage({
5964
6881
  className,
5965
6882
  ...rest
5966
6883
  }, ref) {
6884
+ const t = useLocale().messages.chat;
5967
6885
  const outgoing = direction === "outgoing";
5968
6886
  const surface = outgoing ? OUTGOING_SURFACE[variant] : "incoming";
5969
6887
  const bubbles = messages ?? [];
@@ -6034,7 +6952,7 @@ var SChatMessageImpl = /* @__PURE__ */ react.forwardRef(function SChatMessage({
6034
6952
  ),
6035
6953
  (readStatus != null || time != null) && // 읽음 표시와 시각은 한 줄에 선다 — 읽음이 먼저, 시각이 뒤다.
6036
6954
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-(--cmp-chatMessage-subData-gap) px-(--cmp-chatMessage-subData-paddingX)", children: [
6037
- readStatus != null && /* @__PURE__ */ jsxRuntime.jsx("span", { className: cn("typo-body-sm-bold", READ_STATUS_COLOR[readStatus]), children: READ_STATUS_LABEL[readStatus] }),
6955
+ readStatus != null && /* @__PURE__ */ jsxRuntime.jsx("span", { className: cn("typo-body-sm-bold", READ_STATUS_COLOR[readStatus]), children: t[readStatus] }),
6038
6956
  time != null && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "typo-body-sm-medium text-(--cmp-chatTimeStamp-color)", children: time })
6039
6957
  ] }),
6040
6958
  actions != null && // 버튼이 많아 한 줄에 안 들어가면 감싼다 — 넘쳐서 잘리는 것보다 낫다.
@@ -6132,6 +7050,7 @@ var SDraggableItemView = /* @__PURE__ */ react.forwardRef(
6132
7050
  style,
6133
7051
  ...rest
6134
7052
  }, ref) {
7053
+ const tc = useLocale().messages.common;
6135
7054
  const renderState = { hovered, dragging, disabled };
6136
7055
  const titleNode = renderSlot(title, renderState);
6137
7056
  const supportingTextNode = renderSlot(supportingText, renderState);
@@ -6195,7 +7114,7 @@ var SDraggableItemView = /* @__PURE__ */ react.forwardRef(
6195
7114
  ...dragHandleProps,
6196
7115
  role: dragHandleProps?.role ?? "button",
6197
7116
  tabIndex: dragHandleProps?.tabIndex ?? (disabled ? -1 : 0),
6198
- "aria-label": dragHandleProps?.["aria-label"] ?? "\uB4DC\uB798\uADF8 \uD578\uB4E4",
7117
+ "aria-label": dragHandleProps?.["aria-label"] ?? tc.dragHandle,
6199
7118
  "aria-disabled": disabled || void 0,
6200
7119
  onMouseDown: onDragHandleMouseDown,
6201
7120
  className: cn(
@@ -7800,7 +8719,6 @@ var SLogo = /* @__PURE__ */ react.forwardRef(function SLogo2({
7800
8719
  }
7801
8720
  );
7802
8721
  });
7803
- var BUTTON_LABEL = "\uD1B5\uD569 \uACC4\uC815\uC73C\uB85C \uB85C\uADF8\uC778";
7804
8722
  var SERVICE_LABEL = {
7805
8723
  sellmate: "Sellmate",
7806
8724
  wms: "Sellmate WMS",
@@ -7816,6 +8734,7 @@ var SERVICE_LABEL = {
7816
8734
  };
7817
8735
  var LOGO_SIZE = 70;
7818
8736
  var SLoginCardImpl = /* @__PURE__ */ react.forwardRef(function SLoginCard({ service, title, description, onLogin, footerNote, bottomAction, className, ...rest }, ref) {
8737
+ const t = useLocale().messages.loginCard;
7819
8738
  const hasIntro = title != null || description != null;
7820
8739
  return /* @__PURE__ */ jsxRuntime.jsxs(
7821
8740
  "div",
@@ -7863,7 +8782,7 @@ var SLoginCardImpl = /* @__PURE__ */ react.forwardRef(function SLoginCard({ serv
7863
8782
  {
7864
8783
  color: "secondary",
7865
8784
  size: "lg",
7866
- label: BUTTON_LABEL,
8785
+ label: t.login,
7867
8786
  onClick: onLogin,
7868
8787
  className: "w-[320px]"
7869
8788
  }
@@ -8118,7 +9037,7 @@ function TreeConnector({
8118
9037
  ] });
8119
9038
  }
8120
9039
  function TreeAllRow({
8121
- label = "\uC804\uCCB4",
9040
+ label: labelProp,
8122
9041
  selected,
8123
9042
  indeterminate = false,
8124
9043
  size = "sm",
@@ -8130,6 +9049,8 @@ function TreeAllRow({
8130
9049
  className,
8131
9050
  ...rest
8132
9051
  }) {
9052
+ const tc = useLocale().messages.common;
9053
+ const label = labelProp ?? tc.all;
8133
9054
  return /* @__PURE__ */ jsxRuntime.jsx(
8134
9055
  "div",
8135
9056
  {
@@ -8177,7 +9098,7 @@ function collectSelectableIds(node) {
8177
9098
  function toSelectedSet(value) {
8178
9099
  return new Set(value ?? []);
8179
9100
  }
8180
- var TREE_ALL_NODE = { id: "__all__", label: "\uC804\uCCB4" };
9101
+ var TREE_ALL_ID = "__all__";
8181
9102
  function getSelectionState(node, selectedSet) {
8182
9103
  const selectableChildren = (node.children ?? []).filter(
8183
9104
  (child) => collectSelectableIds(child).length > 0
@@ -8376,6 +9297,8 @@ var STreeImpl = /* @__PURE__ */ react.forwardRef(function STree({
8376
9297
  className,
8377
9298
  ...rest
8378
9299
  }, ref) {
9300
+ const tc = useLocale().messages.common;
9301
+ const allNode = react.useMemo(() => ({ id: TREE_ALL_ID, label: tc.all }), [tc.all]);
8379
9302
  const [internalValue, setInternalValue] = react.useState(defaultValue ?? []);
8380
9303
  const [internalExpandedIds, setInternalExpandedIds] = react.useState(
8381
9304
  defaultExpandedIds ?? items.filter((item4) => item4.children?.length).map((item4) => item4.id)
@@ -8392,7 +9315,7 @@ var STreeImpl = /* @__PURE__ */ react.forwardRef(function STree({
8392
9315
  const visibleRows = react.useMemo(() => {
8393
9316
  const rows = [];
8394
9317
  if (showAllItem) {
8395
- rows.push({ id: TREE_ALL_NODE.id, node: TREE_ALL_NODE, parentId: null, expanded: false });
9318
+ rows.push({ id: TREE_ALL_ID, node: allNode, parentId: null, expanded: false });
8396
9319
  }
8397
9320
  const walk = (nodes, parentId) => {
8398
9321
  nodes.forEach((node) => {
@@ -8403,7 +9326,7 @@ var STreeImpl = /* @__PURE__ */ react.forwardRef(function STree({
8403
9326
  };
8404
9327
  walk(items, null);
8405
9328
  return rows;
8406
- }, [items, expandedSet, showAllItem]);
9329
+ }, [items, expandedSet, showAllItem, allNode]);
8407
9330
  const [focusedId, setFocusedId] = react.useState(null);
8408
9331
  const activeRowId = focusedId != null && visibleRows.some((row) => row.id === focusedId) ? focusedId : visibleRows[0]?.id ?? null;
8409
9332
  const treeRef = react.useRef(null);
@@ -8448,7 +9371,7 @@ var STreeImpl = /* @__PURE__ */ react.forwardRef(function STree({
8448
9371
  });
8449
9372
  const orderedIds = collectIds(items).filter((id) => next.has(id));
8450
9373
  if (value === void 0) setInternalValue(orderedIds);
8451
- onValueChange?.(orderedIds, TREE_ALL_NODE);
9374
+ onValueChange?.(orderedIds, allNode);
8452
9375
  };
8453
9376
  const handleTreeKeyDown = (event) => {
8454
9377
  const target = event.target;
@@ -8492,7 +9415,7 @@ var STreeImpl = /* @__PURE__ */ react.forwardRef(function STree({
8492
9415
  }
8493
9416
  case "Enter":
8494
9417
  case " ": {
8495
- if (row.id === TREE_ALL_NODE.id) updateAllSelected();
9418
+ if (row.id === TREE_ALL_ID) updateAllSelected();
8496
9419
  else if (selectable) updateSelected(row.node);
8497
9420
  else if (hasChildren) updateExpanded(row.node);
8498
9421
  else return;
@@ -8553,8 +9476,8 @@ var STreeImpl = /* @__PURE__ */ react.forwardRef(function STree({
8553
9476
  showAllItem && /* @__PURE__ */ jsxRuntime.jsx(
8554
9477
  STreeAllItem,
8555
9478
  {
8556
- rowId: TREE_ALL_NODE.id,
8557
- tabIndex: activeRowId === TREE_ALL_NODE.id ? 0 : -1,
9479
+ rowId: TREE_ALL_ID,
9480
+ tabIndex: activeRowId === TREE_ALL_ID ? 0 : -1,
8558
9481
  onKeyDown: handleTreeKeyDown,
8559
9482
  selected: allSelected,
8560
9483
  indeterminate: allIndeterminate,
@@ -9190,7 +10113,6 @@ var SURFACE = {
9190
10113
  content: "var(--cmp-callout-default-content)"
9191
10114
  }
9192
10115
  };
9193
- var DANGER_TITLE_LABEL = "\uC8FC\uC758\uC0AC\uD56D";
9194
10116
  function renderItems(message, depth = 1) {
9195
10117
  const out = [];
9196
10118
  message.forEach((m, i) => {
@@ -9222,6 +10144,7 @@ function renderItems(message, depth = 1) {
9222
10144
  return out;
9223
10145
  }
9224
10146
  var SCallout = /* @__PURE__ */ react.forwardRef(function SCallout2({ type = "default", showTitle = true, message = [], children, className, style }, ref) {
10147
+ const t = useLocale().messages.callout;
9225
10148
  const hasDangerTitle = type === "danger" && showTitle;
9226
10149
  const surface = SURFACE[type];
9227
10150
  const vars = {
@@ -9258,7 +10181,7 @@ var SCallout = /* @__PURE__ */ react.forwardRef(function SCallout2({ type = "def
9258
10181
  color: "var(--cmp-callout-danger-title-color)"
9259
10182
  }
9260
10183
  ),
9261
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "whitespace-nowrap", children: DANGER_TITLE_LABEL })
10184
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "whitespace-nowrap", children: t.dangerTitle })
9262
10185
  ]
9263
10186
  }
9264
10187
  ),
@@ -9806,6 +10729,7 @@ var SDropdownButtonImpl = /* @__PURE__ */ react.forwardRef(
9806
10729
  className,
9807
10730
  style
9808
10731
  }, ref) {
10732
+ const tc = useLocale().messages.common;
9809
10733
  const insideModal = useInsideModal();
9810
10734
  const [open, setOpen] = react.useState(false);
9811
10735
  const splitWrapRef = react.useRef(null);
@@ -9912,7 +10836,7 @@ var SDropdownButtonImpl = /* @__PURE__ */ react.forwardRef(
9912
10836
  ref: splitToggleRef,
9913
10837
  type: "button",
9914
10838
  disabled,
9915
- "aria-label": "\uBA54\uB274 \uC5F4\uAE30",
10839
+ "aria-label": tc.openMenu,
9916
10840
  className: cn(
9917
10841
  triggerBase,
9918
10842
  "justify-center border-l-[length:var(--cmp-button-border-width-default)]"
@@ -9959,14 +10883,12 @@ var SDropdownButtonImpl = /* @__PURE__ */ react.forwardRef(
9959
10883
  }
9960
10884
  );
9961
10885
  var SDropdownButton2 = /* @__PURE__ */ withDisplayName(SDropdownButtonImpl, "SDropdownButton");
9962
- var DEFAULT_LABEL = "\uAE30\uB2A5 \uB354 \uBCF4\uAE30";
9963
10886
  var SMeatballButtonImpl = /* @__PURE__ */ react.forwardRef(
9964
10887
  function SMeatballButton({
9965
10888
  size = "sm",
9966
10889
  intent = "default",
9967
10890
  items = [],
9968
- // 기본값을 리터럴로 둬야 README(docs:gen)에 실제 문구가 찍힌다
9969
- tooltipText = "\uAE30\uB2A5 \uB354 \uBCF4\uAE30",
10891
+ tooltipText: tooltipTextProp,
9970
10892
  ariaLabel,
9971
10893
  disabled = false,
9972
10894
  onItemClick,
@@ -9975,6 +10897,8 @@ var SMeatballButtonImpl = /* @__PURE__ */ react.forwardRef(
9975
10897
  style
9976
10898
  }, ref) {
9977
10899
  const insideModal = useInsideModal();
10900
+ const tc = useLocale().messages.common;
10901
+ const tooltipText = tooltipTextProp ?? tc.moreActions;
9978
10902
  const [open, setOpen] = react.useState(false);
9979
10903
  const buttonRef = react.useRef(null);
9980
10904
  const pointerRef = react.useRef(false);
@@ -9990,7 +10914,7 @@ var SMeatballButtonImpl = /* @__PURE__ */ react.forwardRef(
9990
10914
  }),
9991
10915
  []
9992
10916
  );
9993
- const label = ariaLabel?.trim() || tooltipText.trim() || DEFAULT_LABEL;
10917
+ const label = ariaLabel?.trim() || tooltipText.trim() || tc.moreActions;
9994
10918
  return /* @__PURE__ */ jsxRuntime.jsxs(
9995
10919
  RDropdown5__namespace.Root,
9996
10920
  {
@@ -10373,13 +11297,14 @@ function Row({
10373
11297
  }
10374
11298
  var SAccountListBox = /* @__PURE__ */ react.forwardRef(
10375
11299
  function SAccountListBox2({ email, name, authority, accountSetting, language, logout, className, style, ...rest }, ref) {
11300
+ const tl = useLocale().messages.accountListBox;
10376
11301
  const hasUserdata = email != null || name != null || authority != null;
10377
11302
  const languageOptions = language?.options ?? [];
10378
11303
  const hasLanguageMenu = languageOptions.length > 0;
10379
11304
  const [languageMenuOpen, setLanguageMenuOpen] = react.useState(false);
10380
11305
  const languageValueRef = react.useRef(null);
10381
11306
  const languageRowRef = react.useRef(null);
10382
- const languageLabel = language?.label ?? ACCOUNT_LIST_BOX_LABELS.language;
11307
+ const languageLabel = language?.label ?? tl.language;
10383
11308
  const languageDoesNothing = Boolean(language) && !hasLanguageMenu && !language?.onClick;
10384
11309
  react.useEffect(() => {
10385
11310
  if (isDev() && languageDoesNothing) {
@@ -10432,7 +11357,7 @@ var SAccountListBox = /* @__PURE__ */ react.forwardRef(
10432
11357
  Row,
10433
11358
  {
10434
11359
  icon: ACCOUNT_LIST_BOX_ICONS.accountSetting,
10435
- label: accountSetting.label ?? ACCOUNT_LIST_BOX_LABELS.accountSetting,
11360
+ label: accountSetting.label ?? tl.accountSetting,
10436
11361
  onClick: accountSetting.onClick
10437
11362
  }
10438
11363
  ),
@@ -10476,7 +11401,7 @@ var SAccountListBox = /* @__PURE__ */ react.forwardRef(
10476
11401
  {
10477
11402
  tone: "negative",
10478
11403
  icon: ACCOUNT_LIST_BOX_ICONS.logout,
10479
- label: logout?.label ?? ACCOUNT_LIST_BOX_LABELS.logout,
11404
+ label: logout?.label ?? tl.logout,
10480
11405
  onClick: logout?.onClick
10481
11406
  }
10482
11407
  )
@@ -10889,6 +11814,7 @@ function SPopover({
10889
11814
  menuClassName,
10890
11815
  style
10891
11816
  }) {
11817
+ const tc = useLocale().messages.common;
10892
11818
  const portalContainer = usePortalContainer();
10893
11819
  const [internalOpen, setInternalOpen] = react.useState(defaultOpen ?? false);
10894
11820
  const isControlled = open !== void 0;
@@ -10927,7 +11853,7 @@ function SPopover({
10927
11853
  {
10928
11854
  icon: "close",
10929
11855
  size: "xs",
10930
- ariaLabel: "\uB2EB\uAE30",
11856
+ ariaLabel: tc.close,
10931
11857
  onClick: () => setOpen(false),
10932
11858
  className: "absolute right-[12px] top-[12px]"
10933
11859
  }
@@ -11044,7 +11970,6 @@ var SPopup = /* @__PURE__ */ react.forwardRef(function SPopup2({
11044
11970
  }
11045
11971
  );
11046
11972
  });
11047
- var DEFAULT_LABEL2 = { tip: "\uD65C\uC6A9 TIP", notion: "\uC0AC\uC6A9\uBC95 \uC548\uB0B4" };
11048
11973
  var ICON = { tip: "helpOutline", notion: "notion" };
11049
11974
  var VIEWPORT_GUTTER = 24;
11050
11975
  var CLOSE_INSET = 12;
@@ -11062,11 +11987,12 @@ function SGuide({
11062
11987
  className,
11063
11988
  style
11064
11989
  }) {
11990
+ const tg = useLocale().messages.guide;
11065
11991
  const [open, setOpen] = react.useState(false);
11066
11992
  const portalContainer = usePortalContainer();
11067
11993
  const isNotion = type === "notion";
11068
11994
  const isAutoWidth = popupWidth === "auto";
11069
- const defaultLabel = DEFAULT_LABEL2[type];
11995
+ const defaultLabel = type === "notion" ? tg.notion : tg.tip;
11070
11996
  const iconName = ICON[type];
11071
11997
  const messages = flattenMessages(message);
11072
11998
  const active = open;
@@ -11211,7 +12137,7 @@ var CLOSE_ANIMATION_DURATION = 300;
11211
12137
  function SModalContainer({
11212
12138
  open,
11213
12139
  onOpenChange,
11214
- ariaTitle = "\uBAA8\uB2EC",
12140
+ ariaTitle: ariaTitleProp,
11215
12141
  showClose = false,
11216
12142
  onClose,
11217
12143
  persistent = true,
@@ -11221,6 +12147,8 @@ function SModalContainer({
11221
12147
  className,
11222
12148
  style
11223
12149
  }) {
12150
+ const { common: tc, modal: tm } = useLocale().messages;
12151
+ const ariaTitle = ariaTitleProp ?? tm.defaultTitle;
11224
12152
  const [shaking, setShaking] = react.useState(false);
11225
12153
  const [rendered, setRendered] = react.useState(() => Boolean(open));
11226
12154
  const contentRef = react.useRef(null);
@@ -11314,7 +12242,7 @@ function SModalContainer({
11314
12242
  SGhostButton,
11315
12243
  {
11316
12244
  icon: "close",
11317
- ariaLabel: "\uB2EB\uAE30",
12245
+ ariaLabel: tc.close,
11318
12246
  onClick: () => {
11319
12247
  if (closeRequested.current) return;
11320
12248
  closeRequested.current = true;
@@ -11380,7 +12308,7 @@ function SConfirmModal({
11380
12308
  tagSlot,
11381
12309
  optionSlot,
11382
12310
  contentSlot,
11383
- mainButtonLabel = "\uD655\uC778",
12311
+ mainButtonLabel: mainButtonLabelProp,
11384
12312
  mainButtonOutline,
11385
12313
  mainButtonDisabled = false,
11386
12314
  subButtonLabel,
@@ -11388,6 +12316,8 @@ function SConfirmModal({
11388
12316
  onCancel,
11389
12317
  onClose
11390
12318
  }) {
12319
+ const tc = useLocale().messages.common;
12320
+ const mainButtonLabel = mainButtonLabelProp ?? tc.confirm;
11391
12321
  const iconName = TYPE_ICON[type];
11392
12322
  const mainColor = MAIN_BUTTON_COLOR[type];
11393
12323
  const mainOutline = mainButtonOutline ?? MAIN_BUTTON_OUTLINE[type];
@@ -11502,6 +12432,7 @@ function SOverlayHeader({
11502
12432
  descriptionClassName,
11503
12433
  style
11504
12434
  }) {
12435
+ const tc = useLocale().messages.common;
11505
12436
  const hasDescription = description != null && description !== "";
11506
12437
  return /* @__PURE__ */ jsxRuntime.jsxs(
11507
12438
  "header",
@@ -11540,7 +12471,7 @@ function SOverlayHeader({
11540
12471
  SGhostButton,
11541
12472
  {
11542
12473
  icon: "close",
11543
- ariaLabel: "\uB2EB\uAE30",
12474
+ ariaLabel: tc.close,
11544
12475
  onClick: () => onClose?.(),
11545
12476
  className: "absolute right-[12px] top-[12px]"
11546
12477
  }
@@ -11595,14 +12526,6 @@ function SActionModal({
11595
12526
  }
11596
12527
  );
11597
12528
  }
11598
- var DEFAULT_MESSAGE = {
11599
- loading: "\uC791\uC5C5 \uC9C4\uD589\uC911...",
11600
- error: "\uC791\uC5C5\uC5D0 \uC2E4\uD328\uD558\uC600\uC2B5\uB2C8\uB2E4. \uB2E4\uC2DC \uC2DC\uB3C4\uD574 \uC8FC\uC138\uC694."
11601
- };
11602
- var DEFAULT_BUTTON_LABEL = {
11603
- loading: "\uD655\uC778",
11604
- error: "\uB2E4\uC2DC \uC2DC\uB3C4"
11605
- };
11606
12529
  function SLoadingModal({
11607
12530
  open,
11608
12531
  onOpenChange,
@@ -11617,7 +12540,8 @@ function SLoadingModal({
11617
12540
  width = "var(--cmp-modal-loading-width)",
11618
12541
  height = "var(--cmp-modal-loading-height)"
11619
12542
  }) {
11620
- const resolvedMessage = message ?? DEFAULT_MESSAGE[state2];
12543
+ const { loadingModal: t, common: tc } = useLocale().messages;
12544
+ const resolvedMessage = message ?? (state2 === "loading" ? t.loadingMessage : t.errorMessage);
11621
12545
  const lines = Array.isArray(resolvedMessage) ? resolvedMessage : resolvedMessage ? [resolvedMessage] : [];
11622
12546
  const buttonVisible = showButton || state2 === "error";
11623
12547
  return /* @__PURE__ */ jsxRuntime.jsx(
@@ -11628,7 +12552,7 @@ function SLoadingModal({
11628
12552
  onClose,
11629
12553
  showClose: state2 === "error",
11630
12554
  persistent,
11631
- ariaTitle: lines[0] || "\uB85C\uB529 \uC911",
12555
+ ariaTitle: lines[0] || t.ariaTitle,
11632
12556
  width,
11633
12557
  height,
11634
12558
  children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex min-h-0 flex-auto flex-col overflow-y-auto px-[32px]", children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "m-auto flex flex-col items-center gap-(--cmp-modal-loading-gap)", children: [
@@ -11658,7 +12582,7 @@ function SLoadingModal({
11658
12582
  onButtonClick?.();
11659
12583
  onOpenChange?.(false);
11660
12584
  },
11661
- label: buttonLabel ?? DEFAULT_BUTTON_LABEL[state2]
12585
+ label: buttonLabel ?? (state2 === "loading" ? tc.confirm : t.errorButton)
11662
12586
  }
11663
12587
  )
11664
12588
  ] }) })
@@ -11668,7 +12592,7 @@ function SLoadingModal({
11668
12592
  var CLOSE_ANIMATION_DURATION2 = 300;
11669
12593
  var RESIZE_KEY_STEP = { normal: 10, large: 50 };
11670
12594
  var RESIZE_HIT_WIDTH = "calc(var(--cmp-splitter-border-width) + var(--cmp-splitter-border-padding) * 2)";
11671
- function toPx(value, percentBase) {
12595
+ function toPx2(value, percentBase) {
11672
12596
  if (typeof value === "number") return value;
11673
12597
  if (typeof value !== "string") return void 0;
11674
12598
  const normalized = value.trim();
@@ -11712,6 +12636,7 @@ function SDrawer({
11712
12636
  className,
11713
12637
  style
11714
12638
  }) {
12639
+ const tc = useLocale().messages.common;
11715
12640
  const [shaking, setShaking] = react.useState(false);
11716
12641
  const [rendered, setRendered] = react.useState(() => Boolean(open));
11717
12642
  const [entered, setEntered] = react.useState(false);
@@ -11803,8 +12728,8 @@ function SDrawer({
11803
12728
  const resizeBounds = () => {
11804
12729
  const limit = viewportWidth;
11805
12730
  if (limit === void 0) return { min: void 0, max: void 0 };
11806
- const min = toPx(minWidth, limit);
11807
- const max = toPx(maxWidth, limit);
12731
+ const min = toPx2(minWidth, limit);
12732
+ const max = toPx2(maxWidth, limit);
11808
12733
  return {
11809
12734
  min: min === void 0 ? void 0 : Math.min(min, limit),
11810
12735
  max: max === void 0 ? limit : Math.min(max, limit)
@@ -11938,7 +12863,7 @@ function SDrawer({
11938
12863
  {
11939
12864
  role: "separator",
11940
12865
  "aria-orientation": "vertical",
11941
- "aria-label": "Drawer \uB108\uBE44 \uC870\uC808",
12866
+ "aria-label": tc.resizeDrawer,
11942
12867
  "aria-valuenow": resizeValueNow,
11943
12868
  "aria-valuemin": resizeValueMin,
11944
12869
  "aria-valuemax": resizeValueMax,
@@ -12504,6 +13429,7 @@ function resolveRows(items) {
12504
13429
  }
12505
13430
  var SLauncherListBox = /* @__PURE__ */ react.forwardRef(
12506
13431
  function SLauncherListBox2({ items, onSelect, consoleHref, onConsoleClick, ariaLabel, className, style, ...rest }, ref) {
13432
+ const tl = useLocale().messages.launcher;
12507
13433
  const rows = items ? resolveRows(items) : [];
12508
13434
  if (rows.length === 0) return null;
12509
13435
  return /* @__PURE__ */ jsxRuntime.jsxs(
@@ -12622,7 +13548,7 @@ var SLauncherListBox = /* @__PURE__ */ react.forwardRef(
12622
13548
  onClick: () => onSelect?.(row.service),
12623
13549
  children: [
12624
13550
  content,
12625
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "sr-only", children: "\uC0C8 \uD0ED\uC5D0\uC11C \uC5F4\uB9BC" })
13551
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "sr-only", children: tl.opensInNewTab })
12626
13552
  ]
12627
13553
  }
12628
13554
  )
@@ -12649,7 +13575,7 @@ var SLauncherListBox = /* @__PURE__ */ react.forwardRef(
12649
13575
  window.open(consoleHref, "_blank", "noopener,noreferrer");
12650
13576
  onConsoleClick?.();
12651
13577
  },
12652
- "aria-label": `${LAUNCHER_LIST_BOX_CONSOLE_LABEL} (\uC0C8 \uD0ED\uC5D0\uC11C \uC5F4\uB9BC)`
13578
+ "aria-label": `${LAUNCHER_LIST_BOX_CONSOLE_LABEL} (${tl.opensInNewTab})`
12653
13579
  }
12654
13580
  )
12655
13581
  }
@@ -13784,8 +14710,6 @@ var GNB_SYSTEM_LAYOUT = {
13784
14710
  domainRadius: domain("radius")
13785
14711
  };
13786
14712
  var GNB_SYSTEM_ALERT_DOT_SIZE = 6;
13787
- var GNB_SYSTEM_ALERT_LABEL = "\uC54C\uB9BC";
13788
- var GNB_SYSTEM_SETTING_LABEL = "\uC124\uC815";
13789
14713
  function TokenIcon3({ name, size }) {
13790
14714
  return /* @__PURE__ */ jsxRuntime.jsx(SIcon, { name, size: "100%", style: { width: size, height: size } });
13791
14715
  }
@@ -13893,6 +14817,7 @@ var SGnbSystem = /* @__PURE__ */ react.forwardRef(function SGnbSystem2({
13893
14817
  style,
13894
14818
  ...rest
13895
14819
  }, ref) {
14820
+ const tg = useLocale().messages.gnbSystem;
13896
14821
  const gnb3 = react.useContext(SGnbSystemContext);
13897
14822
  const color = colorProp ?? gnb3?.color ?? "light";
13898
14823
  const placement = gnb3?.placement ?? "panel";
@@ -13951,8 +14876,8 @@ var SGnbSystem = /* @__PURE__ */ react.forwardRef(function SGnbSystem2({
13951
14876
  setAlertTooltipDismissed(true);
13952
14877
  alert2?.onTooltipDismiss?.();
13953
14878
  };
13954
- const alertLabel = alert2?.label ?? GNB_SYSTEM_ALERT_LABEL;
13955
- const settingLabel = setting?.label ?? GNB_SYSTEM_SETTING_LABEL;
14879
+ const alertLabel = alert2?.label ?? tg.alert;
14880
+ const settingLabel = setting?.label ?? tg.setting;
13956
14881
  const alertButton = alert2 && /* @__PURE__ */ jsxRuntime.jsx(
13957
14882
  SystemButton,
13958
14883
  {
@@ -13988,7 +14913,7 @@ var SGnbSystem = /* @__PURE__ */ react.forwardRef(function SGnbSystem2({
13988
14913
  align: "end",
13989
14914
  offset: 8,
13990
14915
  viewportPadding: 8,
13991
- ariaLabel: alert2.label ?? GNB_SYSTEM_ALERT_LABEL,
14916
+ ariaLabel: alertLabel,
13992
14917
  onOpenAutoFocus: (event) => event.preventDefault(),
13993
14918
  className: "rounded-(--radius-8)",
13994
14919
  children: alert2.listBox
@@ -14316,6 +15241,7 @@ var PAGE_CONTENT_WIDTHS = ["full", "fixed", "fixedCenter"];
14316
15241
  var PAGE_HEADER_VARIANTS = ["plain", "bar"];
14317
15242
  var SPageHeader = /* @__PURE__ */ withDisplayName(
14318
15243
  react.forwardRef(function SPageHeader2({ title, subText, titleSlot, variant, onBack, slot, scrolled, className, style, ...rest }, ref) {
15244
+ const tc = useLocale().messages.common;
14319
15245
  const hasBack = onBack != null;
14320
15246
  const hasTitleSlot = titleSlot != null && titleSlot !== false;
14321
15247
  const titleEl = /* @__PURE__ */ jsxRuntime.jsx("span", { className: "typo-heading-lg min-w-0 truncate text-(--cmp-pageHeader-title-text)", children: title });
@@ -14354,7 +15280,7 @@ var SPageHeader = /* @__PURE__ */ withDisplayName(
14354
15280
  {
14355
15281
  icon: "chevronLeft",
14356
15282
  size: "xs",
14357
- ariaLabel: "\uB4A4\uB85C\uAC00\uAE30",
15283
+ ariaLabel: tc.back,
14358
15284
  onClick: onBack,
14359
15285
  className: cn("shrink-0", bar ? "" : "mt-[3px]")
14360
15286
  }
@@ -14931,7 +15857,6 @@ var STEPPER_VERTICAL_COLORS = {
14931
15857
  sequenceIconCompleted: STEPPER_COLORS.sequenceText.completed,
14932
15858
  errorBadge: "#FB4444"
14933
15859
  };
14934
- var ERROR_TOOLTIP_MESSAGE = "\uD655\uC778\uC774 \uD544\uC694\uD55C \uD56D\uBAA9\uC774 \uC788\uC2B5\uB2C8\uB2E4.";
14935
15860
  function getItemValue(item4, index) {
14936
15861
  return item4.value ?? String(index + 1);
14937
15862
  }
@@ -14973,10 +15898,12 @@ var SStepper = /* @__PURE__ */ react.forwardRef(function SStepper2({
14973
15898
  vertical = false,
14974
15899
  clickable,
14975
15900
  onValueChange,
14976
- ariaLabel = "\uC9C4\uD589 \uB2E8\uACC4",
15901
+ ariaLabel: ariaLabelProp,
14977
15902
  className,
14978
15903
  style
14979
15904
  }, ref) {
15905
+ const t = useLocale().messages.stepper;
15906
+ const ariaLabel = ariaLabelProp ?? t.ariaLabel;
14980
15907
  const config = STEPPER_SIZE_CONFIG[size];
14981
15908
  const isClickable = clickable ?? vertical;
14982
15909
  const [hoveredIndex, setHoveredIndex] = react.useState(null);
@@ -15258,7 +16185,7 @@ var SStepper = /* @__PURE__ */ react.forwardRef(function SStepper2({
15258
16185
  {
15259
16186
  trigger: "none",
15260
16187
  open: showTooltip,
15261
- content: ERROR_TOOLTIP_MESSAGE,
16188
+ content: t.errorTooltip,
15262
16189
  tooltipType: "danger",
15263
16190
  placement: "right",
15264
16191
  children: /* @__PURE__ */ jsxRuntime.jsxs(
@@ -15436,16 +16363,20 @@ function monthCells(year, month) {
15436
16363
  }
15437
16364
  return cells;
15438
16365
  }
15439
- var WEEK_LABELS = ["\uC77C", "\uC6D4", "\uD654", "\uC218", "\uBAA9", "\uAE08", "\uD1A0"];
15440
- var WEEKDAY_SUFFIX_EM = 0.25 + 3 * 1;
15441
- var weekdaySuffixWidth = (fontSize) => Math.ceil(fontSize * WEEKDAY_SUFFIX_EM);
15442
- function withWeekday(value) {
16366
+ var glyphEm = (char) => /[\u1100-\u11ff\u3040-\u30ff\u3130-\u318f\u3400-\u9fff\uac00-\ud7a3]/.test(char) ? 1 : 0.58;
16367
+ var weekdaySuffixWidth = (fontSize, t) => {
16368
+ const longest = Math.max(
16369
+ ...t.weekdaysLong.map((name) => Array.from(name).reduce((sum, char) => sum + glyphEm(char), 0))
16370
+ );
16371
+ return Math.ceil(fontSize * (0.25 + longest));
16372
+ };
16373
+ function withWeekday(value, t) {
15443
16374
  const [date = "", ...rest] = value.split(" ");
15444
16375
  const match = /^(\d{4})-(\d{2})-(\d{2})$/.exec(date);
15445
16376
  if (!match) return value;
15446
16377
  const day = new Date(Number(match[1]), Number(match[2]) - 1, Number(match[3])).getDay();
15447
16378
  if (Number.isNaN(day)) return value;
15448
- return [date, `${WEEK_LABELS[day]}\uC694\uC77C`, ...rest].join(" ");
16379
+ return [date, t.weekdaysLong[day], ...rest].join(" ");
15449
16380
  }
15450
16381
 
15451
16382
  // src/components/SCalendarBoard/calendar-board-layout.ts
@@ -15680,7 +16611,9 @@ function CalendarEventButton({
15680
16611
  }
15681
16612
  );
15682
16613
  }
15683
- var CalendarMoreButton = /* @__PURE__ */ react.forwardRef(function CalendarMoreButton2({ count, label = "\uB354\uBCF4\uAE30", dimmed = false, onClick, className, style }, ref) {
16614
+ var CalendarMoreButton = /* @__PURE__ */ react.forwardRef(function CalendarMoreButton2({ count, label: labelProp, dimmed = false, onClick, className, style }, ref) {
16615
+ const tc = useLocale().messages.common;
16616
+ const label = labelProp ?? tc.more;
15684
16617
  return /* @__PURE__ */ jsxRuntime.jsxs(
15685
16618
  "button",
15686
16619
  {
@@ -15703,10 +16636,7 @@ var CalendarMoreButton = /* @__PURE__ */ react.forwardRef(function CalendarMoreB
15703
16636
  className: "pointer-events-none absolute inset-0 rounded-(--cmp-calendarBoard-item-radius) bg-(--cmp-calendarBoard-moreButton-hover-overlay-color) opacity-0 transition-opacity group-hover:opacity-(--cmp-calendarBoard-moreButton-hover-overlay-opacity)"
15704
16637
  }
15705
16638
  ),
15706
- /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "typo-body-sm-semibold shrink-0 text-(--cmp-calendarBoard-moreButton-count-color)", children: [
15707
- count,
15708
- "\uAC1C"
15709
- ] }),
16639
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "typo-body-sm-semibold shrink-0 text-(--cmp-calendarBoard-moreButton-count-color)", children: tc.count(count) }),
15710
16640
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "typo-body-sm-default min-w-0 truncate text-(--cmp-calendarBoard-moreButton-label-color)", children: label })
15711
16641
  ]
15712
16642
  }
@@ -15844,10 +16774,12 @@ function CalendarDayEventListBox({
15844
16774
  minWidth,
15845
16775
  minHeight,
15846
16776
  onClose,
15847
- closeLabel = "\uB2EB\uAE30"
16777
+ closeLabel: closeLabelProp
15848
16778
  }) {
16779
+ const { common: tc, date: t } = useLocale().messages;
16780
+ const closeLabel = closeLabelProp ?? tc.close;
15849
16781
  const [y, m, d] = date.split("-").map(Number);
15850
- const weekday = WEEK_LABELS[new Date(y, m - 1, d).getDay()];
16782
+ const weekday = t.weekdays[new Date(y, m - 1, d).getDay()];
15851
16783
  return /* @__PURE__ */ jsxRuntime.jsxs(
15852
16784
  "div",
15853
16785
  {
@@ -15855,10 +16787,7 @@ function CalendarDayEventListBox({
15855
16787
  style: { minWidth, maxWidth: MAX_WIDTH, minHeight, maxHeight: MAX_HEIGHT },
15856
16788
  children: [
15857
16789
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex shrink-0 items-center gap-(--cmp-calendarBoard-dayEvent-header-gap) px-(--cmp-calendarBoard-dayEvent-header-paddingX) py-(--cmp-calendarBoard-dayEvent-header-paddingY)", children: [
15858
- /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "typo-heading-md text-(--cmp-calendarBoard-header-content-color)", children: [
15859
- d,
15860
- "\uC77C"
15861
- ] }),
16790
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "typo-heading-md text-(--cmp-calendarBoard-header-content-color)", children: t.dayLabel(d) }),
15862
16791
  /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "typo-body-lg-default flex-1 text-(--cmp-calendarBoard-header-content-color)", children: [
15863
16792
  "(",
15864
16793
  weekday,
@@ -15919,12 +16848,14 @@ function SCalendarBoard({
15919
16848
  focusedEventId,
15920
16849
  onEventClick,
15921
16850
  onMoreClick,
15922
- todayLabel = "\uC624\uB298",
16851
+ todayLabel: todayLabelProp,
15923
16852
  moreLabel,
15924
16853
  headerRight,
15925
16854
  className,
15926
16855
  style
15927
16856
  }) {
16857
+ const t = useLocale().messages.date;
16858
+ const todayLabel = todayLabelProp ?? t.today;
15928
16859
  const today = todayStr();
15929
16860
  const [ty, tm] = [Number(today.slice(0, 4)), Number(today.slice(5, 7))];
15930
16861
  const [innerView, setInnerView] = react.useState(() => ({
@@ -16030,7 +16961,7 @@ function SCalendarBoard({
16030
16961
  {
16031
16962
  icon: "chevronLeft",
16032
16963
  size: "xxs",
16033
- ariaLabel: "\uC774\uC804 \uD574",
16964
+ ariaLabel: t.prevYear,
16034
16965
  onClick: () => setView({ year: view.year - 1, month: view.month })
16035
16966
  }
16036
16967
  ),
@@ -16040,7 +16971,7 @@ function SCalendarBoard({
16040
16971
  {
16041
16972
  icon: "chevronRight",
16042
16973
  size: "xxs",
16043
- ariaLabel: "\uB2E4\uC74C \uD574",
16974
+ ariaLabel: t.nextYear,
16044
16975
  onClick: () => setView({ year: view.year + 1, month: view.month })
16045
16976
  }
16046
16977
  )
@@ -16052,20 +16983,17 @@ function SCalendarBoard({
16052
16983
  {
16053
16984
  icon: "chevronLeft",
16054
16985
  size: "xxs",
16055
- ariaLabel: "\uC774\uC804 \uB2EC",
16986
+ ariaLabel: t.prevMonth,
16056
16987
  onClick: () => setView(calcYearMonth(view.year, view.month, "prev"))
16057
16988
  }
16058
16989
  ),
16059
- /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "typo-heading-lg inline-flex min-w-[48px] justify-center text-(--cmp-calendarBoard-header-content-color)", children: [
16060
- view.month,
16061
- "\uC6D4"
16062
- ] }),
16990
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "typo-heading-lg inline-flex min-w-[48px] justify-center text-(--cmp-calendarBoard-header-content-color)", children: t.monthLabel(view.month) }),
16063
16991
  /* @__PURE__ */ jsxRuntime.jsx(
16064
16992
  SGhostButton,
16065
16993
  {
16066
16994
  icon: "chevronRight",
16067
16995
  size: "xxs",
16068
- ariaLabel: "\uB2E4\uC74C \uB2EC",
16996
+ ariaLabel: t.nextMonth,
16069
16997
  onClick: () => setView(calcYearMonth(view.year, view.month, "next"))
16070
16998
  }
16071
16999
  )
@@ -16088,7 +17016,7 @@ function SCalendarBoard({
16088
17016
  {
16089
17017
  className: "grid shrink-0 bg-(--cmp-calendarBoard-grid-bg) pt-(--cmp-calendarBoard-grid-paddingTop) pb-(--cmp-calendarBoard-grid-gap)",
16090
17018
  style: { gridTemplateColumns: columns },
16091
- children: WEEK_LABELS.map((label) => /* @__PURE__ */ jsxRuntime.jsx(
17019
+ children: t.weekdays.map((label) => /* @__PURE__ */ jsxRuntime.jsx(
16092
17020
  "div",
16093
17021
  {
16094
17022
  className: "typo-body-md-default flex justify-center text-(--cmp-calendarBoard-grid-weekRow-color)",
@@ -16443,7 +17371,7 @@ var SSearchInput = /* @__PURE__ */ react.forwardRef(function SSearchInput2({
16443
17371
  onChange,
16444
17372
  onSearch,
16445
17373
  size = "sm",
16446
- placeholder = "\uACB0\uACFC \uB0B4 \uAC80\uC0C9",
17374
+ placeholder: placeholderProp,
16447
17375
  clearable = false,
16448
17376
  disabled = false,
16449
17377
  width,
@@ -16456,6 +17384,8 @@ var SSearchInput = /* @__PURE__ */ react.forwardRef(function SSearchInput2({
16456
17384
  onKeyDown,
16457
17385
  ...rest
16458
17386
  }, ref) {
17387
+ const { common: tc, input: ti } = useLocale().messages;
17388
+ const placeholder = placeholderProp ?? ti.searchWithinResults;
16459
17389
  const f = FONT[size];
16460
17390
  const hasValue = value !== void 0 && value !== null && String(value) !== "";
16461
17391
  return /* @__PURE__ */ jsxRuntime.jsx(
@@ -16523,7 +17453,7 @@ var SSearchInput = /* @__PURE__ */ react.forwardRef(function SSearchInput2({
16523
17453
  {
16524
17454
  icon: "close",
16525
17455
  size: "xxs",
16526
- ariaLabel: "\uC9C0\uC6B0\uAE30",
17456
+ ariaLabel: tc.clear,
16527
17457
  className: "flex-shrink-0",
16528
17458
  onClick: () => onValueChange?.("")
16529
17459
  }
@@ -16708,6 +17638,7 @@ var SSelectImpl = /* @__PURE__ */ react.forwardRef(function SSelect({
16708
17638
  className,
16709
17639
  style
16710
17640
  }, ref) {
17641
+ const runRules2 = useRunRules();
16711
17642
  const multi = type === "multi" || type === "multi_depth" || type === "multi_tree";
16712
17643
  const isDepth = type === "default_depth" || type === "multi_depth";
16713
17644
  const isTree = type === "tree" || type === "multi_tree";
@@ -16820,7 +17751,7 @@ var SSelectImpl = /* @__PURE__ */ react.forwardRef(function SSelect({
16820
17751
  setSearch("");
16821
17752
  if (rules && rules.length > 0) {
16822
17753
  const current = valueForRules ?? selectedRef.current;
16823
- setRuleError(runRules(multi ? current : current[0] ?? "", rules));
17754
+ setRuleError(runRules2(multi ? current : current[0] ?? "", rules));
16824
17755
  }
16825
17756
  }
16826
17757
  };
@@ -16859,7 +17790,7 @@ var SSelectImpl = /* @__PURE__ */ react.forwardRef(function SSelect({
16859
17790
  useFormField({
16860
17791
  name,
16861
17792
  validate: () => {
16862
- const msg = runRules(multi ? selected : selected[0] ?? "", rules);
17793
+ const msg = runRules2(multi ? selected : selected[0] ?? "", rules);
16863
17794
  setRuleError(msg);
16864
17795
  return msg === "";
16865
17796
  },
@@ -17132,14 +18063,14 @@ var SSelectImpl = /* @__PURE__ */ react.forwardRef(function SSelect({
17132
18063
  const showClear = clearable && !effectiveDisabled && !isPlaceholder;
17133
18064
  const handleClear = () => {
17134
18065
  emit3([]);
17135
- if (rules && rules.length > 0) setRuleError(runRules(multi ? [] : "", rules));
18066
+ if (rules && rules.length > 0) setRuleError(runRules2(multi ? [] : "", rules));
17136
18067
  triggerRef.current?.focus();
17137
18068
  };
17138
18069
  const handleRemoveChip = (targets) => {
17139
18070
  const remove = new Set(targets);
17140
18071
  const next = selected.filter((v) => !remove.has(v));
17141
18072
  emit3(next);
17142
- if (rules && rules.length > 0) setRuleError(runRules(next, rules));
18073
+ if (rules && rules.length > 0) setRuleError(runRules2(next, rules));
17143
18074
  triggerRef.current?.focus();
17144
18075
  };
17145
18076
  const handleSelect = (nextValue, index, extend = false) => {
@@ -18021,12 +18952,7 @@ var NO_KEYS = /* @__PURE__ */ new Set();
18021
18952
  var DEFAULT_ROW_HEIGHT = 44;
18022
18953
  var DENSE_ROW_HEIGHT = 32;
18023
18954
  var SELECTABLE_COLUMN_WIDTH = 48;
18024
- var DEFAULT_ROWS_PER_PAGE_OPTION = [
18025
- { label: "10\uAC1C\uC529 \uBCF4\uAE30", value: 10 },
18026
- { label: "25\uAC1C\uC529 \uBCF4\uAE30", value: 25 },
18027
- { label: "50\uAC1C\uC529 \uBCF4\uAE30", value: 50 },
18028
- { label: "100\uAC1C\uC529 \uBCF4\uAE30", value: 100 }
18029
- ];
18955
+ var DEFAULT_ROWS_PER_PAGE_COUNTS = [10, 25, 50, 100];
18030
18956
  var cellValue = (col, row) => {
18031
18957
  const raw = col.field == null ? void 0 : typeof col.field === "function" ? col.field(row) : row[col.field];
18032
18958
  return col.format ? col.format(raw, row) : raw;
@@ -18066,7 +18992,7 @@ var STableImpl = /* @__PURE__ */ react.forwardRef(function STable({
18066
18992
  rowKey = "id",
18067
18993
  selectable = false,
18068
18994
  rowSelectLabel,
18069
- selectAllLabel = "\uC804\uCCB4 \uC120\uD0DD",
18995
+ selectAllLabel: selectAllLabelProp,
18070
18996
  dragSelectable = false,
18071
18997
  contextMenuItems,
18072
18998
  onContextMenuItemClick,
@@ -18083,7 +19009,7 @@ var STableImpl = /* @__PURE__ */ react.forwardRef(function STable({
18083
19009
  stickyColumn,
18084
19010
  radius = "default",
18085
19011
  bordered = true,
18086
- emptyLabel = "\uB370\uC774\uD130\uAC00 \uC5C6\uC2B5\uB2C8\uB2E4.",
19012
+ emptyLabel: emptyLabelProp,
18087
19013
  emptySlot,
18088
19014
  loading: loading2 = false,
18089
19015
  dense = false,
@@ -18093,7 +19019,7 @@ var STableImpl = /* @__PURE__ */ react.forwardRef(function STable({
18093
19019
  onPageChange,
18094
19020
  internalPagination = false,
18095
19021
  showRowsPerPageSelect = false,
18096
- rowsPerPageOption = DEFAULT_ROWS_PER_PAGE_OPTION,
19022
+ rowsPerPageOption: rowsPerPageOptionProp,
18097
19023
  onRowsPerPageChange,
18098
19024
  virtualScroll = false,
18099
19025
  rowHeight,
@@ -18115,6 +19041,13 @@ var STableImpl = /* @__PURE__ */ react.forwardRef(function STable({
18115
19041
  }, ref) {
18116
19042
  const autoId = react.useId();
18117
19043
  const resolvedTableId = tableId ?? autoId;
19044
+ const t = useLocale().messages.table;
19045
+ const selectAllLabel = selectAllLabelProp ?? t.selectAll;
19046
+ const emptyLabel = emptyLabelProp ?? t.empty;
19047
+ const rowsPerPageOption = react.useMemo(
19048
+ () => rowsPerPageOptionProp ?? DEFAULT_ROWS_PER_PAGE_COUNTS.map((count) => ({ label: t.rowsPerPage(count), value: count })),
19049
+ [rowsPerPageOptionProp, t]
19050
+ );
18118
19051
  const [innerDense, setInnerDense] = react.useState(dense);
18119
19052
  react.useEffect(() => {
18120
19053
  setInnerDense(dense);
@@ -18926,7 +19859,7 @@ var STableImpl = /* @__PURE__ */ react.forwardRef(function STable({
18926
19859
  name: "pageEdit",
18927
19860
  size: 12,
18928
19861
  color: "var(--sys-color-link-accent)",
18929
- label: "\uC218\uC815 \uAC00\uB2A5",
19862
+ label: t.editable,
18930
19863
  className: "shrink-0"
18931
19864
  }
18932
19865
  ),
@@ -18936,7 +19869,7 @@ var STableImpl = /* @__PURE__ */ react.forwardRef(function STable({
18936
19869
  name: "pageMove",
18937
19870
  size: 12,
18938
19871
  color: "var(--sys-color-link-accent)",
18939
- label: "\uC0C8 \uD654\uBA74\uC5D0\uC11C \uC5F4\uAE30",
19872
+ label: t.opensInNewScreen,
18940
19873
  className: "shrink-0"
18941
19874
  }
18942
19875
  ),
@@ -18960,7 +19893,7 @@ var STableImpl = /* @__PURE__ */ react.forwardRef(function STable({
18960
19893
  size: "xxs",
18961
19894
  intent: sortDir ? "action" : "default",
18962
19895
  icon: sortDir === "asc" ? "arrowUp" : sortDir === "desc" ? "arrowDown" : "updown",
18963
- ariaLabel: `${col.label} \uC815\uB82C`,
19896
+ ariaLabel: t.sortBy(col.label),
18964
19897
  onClick: () => toggleSort(col)
18965
19898
  }
18966
19899
  ) })
@@ -19110,7 +20043,7 @@ var STableImpl = /* @__PURE__ */ react.forwardRef(function STable({
19110
20043
  value: isSel || !isRowIndeterminate?.(row) ? isSel : null,
19111
20044
  disabled: !canSelectRow(row),
19112
20045
  onValueChange: () => toggleRow(row, rowOffset + ri),
19113
- ariaLabel: rowSelectLabel?.(row) ?? "\uD589 \uC120\uD0DD"
20046
+ ariaLabel: rowSelectLabel?.(row) ?? t.selectRow
19114
20047
  }
19115
20048
  ) })
19116
20049
  }
@@ -19263,7 +20196,7 @@ var STableImpl = /* @__PURE__ */ react.forwardRef(function STable({
19263
20196
  icon: innerDense ? "row" : "rowDense",
19264
20197
  iconRotate: 90,
19265
20198
  iconColor: "var(--sys-color-fg-quaternary)",
19266
- label: innerDense ? "\uB113\uAC8C \uBCF4\uAE30" : "\uC881\uAC8C \uBCF4\uAE30",
20199
+ label: innerDense ? t.denseOff : t.denseOn,
19267
20200
  onClick: () => changeDense(!innerDense)
19268
20201
  }
19269
20202
  ),
@@ -19370,6 +20303,8 @@ var STableBar = /* @__PURE__ */ react.forwardRef(function STableBar2({ title, to
19370
20303
  const hasTitle = title != null;
19371
20304
  const hasLeading = hasTitle || hasCount;
19372
20305
  const titleId = react.useId();
20306
+ const { messages, formatNumber } = useLocale();
20307
+ const t = messages.tableBar;
19373
20308
  const isToolbar = Boolean(actions || rightActions);
19374
20309
  return /* @__PURE__ */ jsxRuntime.jsxs(
19375
20310
  "div",
@@ -19395,9 +20330,9 @@ var STableBar = /* @__PURE__ */ react.forwardRef(function STableBar2({ title, to
19395
20330
  ),
19396
20331
  hasCount && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-[var(--cmp-table-content-gap)]", children: [
19397
20332
  hasTotal && /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "typo-table-accent whitespace-nowrap text-[var(--sys-color-fg-primary)]", children: [
19398
- "\uCD1D ",
19399
- /* @__PURE__ */ jsxRuntime.jsx("b", { style: { color: totalColor(total) }, children: total.toLocaleString() }),
19400
- " \uAC74"
20333
+ t.totalBefore,
20334
+ /* @__PURE__ */ jsxRuntime.jsx("b", { style: { color: totalColor(total) }, children: formatNumber(total) }),
20335
+ t.totalAfter
19401
20336
  ] }),
19402
20337
  hasTotal && hasSelected && /* @__PURE__ */ jsxRuntime.jsx(
19403
20338
  "span",
@@ -19408,8 +20343,9 @@ var STableBar = /* @__PURE__ */ react.forwardRef(function STableBar2({ title, to
19408
20343
  }
19409
20344
  ),
19410
20345
  hasSelected && /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "typo-table-body whitespace-nowrap text-[var(--sys-color-fg-primary)]", children: [
19411
- /* @__PURE__ */ jsxRuntime.jsx("b", { style: { color: selectedColor(selected) }, children: selected.toLocaleString() }),
19412
- " \uAC74 \uC120\uD0DD"
20346
+ t.selectedBefore,
20347
+ /* @__PURE__ */ jsxRuntime.jsx("b", { style: { color: selectedColor(selected) }, children: formatNumber(selected) }),
20348
+ t.selectedAfter
19413
20349
  ] })
19414
20350
  ] }),
19415
20351
  actions && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-[var(--cmp-table-bar-section-gap)] has-[>div:empty]:hidden", children: [
@@ -19822,12 +20758,15 @@ var SInput = /* @__PURE__ */ react.forwardRef(function SInput2({
19822
20758
  width,
19823
20759
  disabled = false,
19824
20760
  readOnly = false,
19825
- placeholder = "\uC785\uB825\uD574 \uC8FC\uC138\uC694.",
20761
+ placeholder: placeholderProp,
19826
20762
  onBlur,
19827
20763
  className,
19828
20764
  style,
19829
20765
  ...rest
19830
20766
  }, ref) {
20767
+ const runRules2 = useRunRules();
20768
+ const { common: tc, input: ti } = useLocale().messages;
20769
+ const placeholder = placeholderProp ?? ti.placeholder;
19831
20770
  const [visible, setVisible] = react.useState(false);
19832
20771
  const [ruleError, setRuleError] = react.useState("");
19833
20772
  const controlId = useFieldControlId(rest.id);
@@ -19838,7 +20777,7 @@ var SInput = /* @__PURE__ */ react.forwardRef(function SInput2({
19838
20777
  useFormField({
19839
20778
  name: rest.name,
19840
20779
  validate: () => {
19841
- const msg = runRules(value, rules);
20780
+ const msg = runRules2(value, rules);
19842
20781
  setRuleError(msg);
19843
20782
  return msg === "";
19844
20783
  },
@@ -19903,11 +20842,11 @@ var SInput = /* @__PURE__ */ react.forwardRef(function SInput2({
19903
20842
  onChange: (e) => {
19904
20843
  onChange?.(e);
19905
20844
  onValueChange?.(e.target.value);
19906
- if (ruleError !== "") setRuleError(runRules(e.target.value, rules));
20845
+ if (ruleError !== "") setRuleError(runRules2(e.target.value, rules));
19907
20846
  },
19908
20847
  onBlur: (e) => {
19909
20848
  onBlur?.(e);
19910
- if (rules && rules.length > 0) setRuleError(runRules(e.target.value, rules));
20849
+ if (rules && rules.length > 0) setRuleError(runRules2(e.target.value, rules));
19911
20850
  },
19912
20851
  className: cn(
19913
20852
  "h-full min-w-0 flex-1 border-0 bg-transparent p-0 outline-none placeholder:text-[color:var(--sys-color-field-text-placeholder)] disabled:cursor-not-allowed",
@@ -19937,7 +20876,7 @@ var SInput = /* @__PURE__ */ react.forwardRef(function SInput2({
19937
20876
  {
19938
20877
  icon: "close",
19939
20878
  size: "xxs",
19940
- ariaLabel: "\uC9C0\uC6B0\uAE30",
20879
+ ariaLabel: tc.clear,
19941
20880
  className: "flex-shrink-0",
19942
20881
  onClick: () => onValueChange?.("")
19943
20882
  }
@@ -19947,7 +20886,7 @@ var SInput = /* @__PURE__ */ react.forwardRef(function SInput2({
19947
20886
  {
19948
20887
  icon: visible ? "visibilityOn" : "visibilityOff",
19949
20888
  size: "xxs",
19950
- ariaLabel: "\uBE44\uBC00\uBC88\uD638 \uD45C\uC2DC",
20889
+ ariaLabel: ti.showPassword,
19951
20890
  disabled: disabled || readOnly,
19952
20891
  className: "flex-shrink-0",
19953
20892
  onClick: () => setVisible((v) => !v)
@@ -19988,15 +20927,15 @@ var formatInputWithCommas = (value) => {
19988
20927
  const formattedInt = addCommas(intPart === "" ? "0" : intPart);
19989
20928
  return `${isNeg ? "-" : ""}${formattedInt}${hasDecimal ? `.${decPart}` : ""}`;
19990
20929
  };
19991
- var getRangeError = (value, min, max) => {
20930
+ var getRangeError = (value, min, max, t) => {
19992
20931
  if (value === null) return "";
19993
20932
  const belowMin = value < min;
19994
20933
  const aboveMax = value > max;
19995
20934
  if (!belowMin && !aboveMax) return "";
19996
20935
  if (Number.isFinite(min) && Number.isFinite(max)) {
19997
- return `${formatWithCommas(min)}~${formatWithCommas(max)} \uC0AC\uC774\uB85C \uC785\uB825\uD574 \uC8FC\uC138\uC694.`;
20936
+ return t.rangeBetween(formatWithCommas(min), formatWithCommas(max));
19998
20937
  }
19999
- return belowMin ? `${formatWithCommas(min)} \uC774\uC0C1\uC73C\uB85C \uC785\uB825\uD574 \uC8FC\uC138\uC694.` : `${formatWithCommas(max)} \uC774\uD558\uB85C \uC785\uB825\uD574 \uC8FC\uC138\uC694.`;
20938
+ return belowMin ? t.atLeast(formatWithCommas(min)) : t.atMost(formatWithCommas(max));
20000
20939
  };
20001
20940
  var getDecimalLimit = (allowDecimal, maxDecimalLength) => {
20002
20941
  if (!allowDecimal || maxDecimalLength === void 0 || !Number.isFinite(maxDecimalLength)) {
@@ -20040,7 +20979,7 @@ var SNumberInput = /* @__PURE__ */ react.forwardRef(function SNumberInput2({
20040
20979
  onFocus,
20041
20980
  onBlur,
20042
20981
  name,
20043
- placeholder = "\uC785\uB825\uD574 \uC8FC\uC138\uC694.",
20982
+ placeholder: placeholderProp,
20044
20983
  disabled = false,
20045
20984
  readOnly = false,
20046
20985
  rules,
@@ -20064,6 +21003,9 @@ var SNumberInput = /* @__PURE__ */ react.forwardRef(function SNumberInput2({
20064
21003
  className,
20065
21004
  style
20066
21005
  }, ref) {
21006
+ const runRules2 = useRunRules();
21007
+ const { input: ti, numberInput: t } = useLocale().messages;
21008
+ const placeholder = placeholderProp ?? ti.placeholder;
20067
21009
  const p = PAD2[size];
20068
21010
  const padX = `var(--cmp-numberInput-${size}-paddingX)`;
20069
21011
  const decimalLimit = getDecimalLimit(allowDecimal, maxDecimalLength);
@@ -20087,9 +21029,9 @@ var SNumberInput = /* @__PURE__ */ react.forwardRef(function SNumberInput2({
20087
21029
  useFormField({
20088
21030
  name,
20089
21031
  validate: () => {
20090
- const msg = runRules(numValue, rules);
21032
+ const msg = runRules2(numValue, rules);
20091
21033
  setRuleError(msg);
20092
- const range = clampOnBlur ? "" : getRangeError(numValue, min, max);
21034
+ const range = clampOnBlur ? "" : getRangeError(numValue, min, max, t);
20093
21035
  setRangeError(range);
20094
21036
  return msg === "" && range === "";
20095
21037
  },
@@ -20192,7 +21134,7 @@ var SNumberInput = /* @__PURE__ */ react.forwardRef(function SNumberInput2({
20192
21134
  type: "button",
20193
21135
  tabIndex: -1,
20194
21136
  disabled: off,
20195
- "aria-label": dir === "inc" ? "\uC99D\uAC00" : "\uAC10\uC18C",
21137
+ "aria-label": dir === "inc" ? t.increase : t.decrease,
20196
21138
  onClick: dir === "inc" ? increment : decrement,
20197
21139
  className: cn(
20198
21140
  "flex flex-shrink-0 items-center justify-center border border-solid border-transparent transition-colors",
@@ -20284,8 +21226,8 @@ var SNumberInput = /* @__PURE__ */ react.forwardRef(function SNumberInput2({
20284
21226
  const clamped = !clampOnBlur || n === null ? n : Math.min(Math.max(n, min), max);
20285
21227
  if (clamped !== n) emit3(clamped);
20286
21228
  else setDisplay(n === null ? "" : formatInputWithCommas(cleaned));
20287
- if (rules && rules.length > 0) setRuleError(runRules(clamped, rules));
20288
- setRangeError(clampOnBlur ? "" : getRangeError(clamped, min, max));
21229
+ if (rules && rules.length > 0) setRuleError(runRules2(clamped, rules));
21230
+ setRangeError(clampOnBlur ? "" : getRangeError(clamped, min, max, t));
20289
21231
  onBlur?.(e);
20290
21232
  },
20291
21233
  className: cn(
@@ -20463,6 +21405,7 @@ function SCalendar({
20463
21405
  className,
20464
21406
  style
20465
21407
  }) {
21408
+ const t = useLocale().messages.date;
20466
21409
  const today = todayStr();
20467
21410
  const base = value || today;
20468
21411
  const [y, setY] = react.useState(() => Number(base.split("-")[0]));
@@ -20531,7 +21474,7 @@ function SCalendar({
20531
21474
  {
20532
21475
  icon: "chevronLeft",
20533
21476
  size: "xxs",
20534
- ariaLabel: "prevYear",
21477
+ ariaLabel: t.prevYear,
20535
21478
  onClick: () => view(y - 1, m)
20536
21479
  }
20537
21480
  ),
@@ -20541,7 +21484,7 @@ function SCalendar({
20541
21484
  {
20542
21485
  icon: "chevronRight",
20543
21486
  size: "xxs",
20544
- ariaLabel: "nextYear",
21487
+ ariaLabel: t.nextYear,
20545
21488
  onClick: () => view(y + 1, m)
20546
21489
  }
20547
21490
  )
@@ -20553,23 +21496,20 @@ function SCalendar({
20553
21496
  {
20554
21497
  icon: "chevronLeft",
20555
21498
  size: "xxs",
20556
- ariaLabel: "prevMonth",
21499
+ ariaLabel: t.prevMonth,
20557
21500
  onClick: () => {
20558
21501
  const n = calcYearMonth(y, m, "prev");
20559
21502
  view(n.year, n.month);
20560
21503
  }
20561
21504
  }
20562
21505
  ),
20563
- /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "inline-flex w-full min-w-[40px] items-center justify-center text-center typo-field-md-medium", children: [
20564
- m,
20565
- "\uC6D4"
20566
- ] }),
21506
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "inline-flex w-full min-w-[40px] items-center justify-center text-center typo-field-md-medium", children: t.monthLabel(m) }),
20567
21507
  /* @__PURE__ */ jsxRuntime.jsx(
20568
21508
  SGhostButton,
20569
21509
  {
20570
21510
  icon: "chevronRight",
20571
21511
  size: "xxs",
20572
- ariaLabel: "nextMonth",
21512
+ ariaLabel: t.nextMonth,
20573
21513
  onClick: () => {
20574
21514
  const n = calcYearMonth(y, m, "next");
20575
21515
  view(n.year, n.month);
@@ -20578,7 +21518,7 @@ function SCalendar({
20578
21518
  )
20579
21519
  ] })
20580
21520
  ] }),
20581
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "grid grid-cols-7", children: WEEK_LABELS.map((label) => /* @__PURE__ */ jsxRuntime.jsx(
21521
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "grid grid-cols-7", children: t.weekdays.map((label) => /* @__PURE__ */ jsxRuntime.jsx(
20582
21522
  "span",
20583
21523
  {
20584
21524
  className: "flex h-[20px] items-center justify-center text-[12px] font-normal text-[color:var(--cmp-datepicker-calendar-week-color)]",
@@ -20670,11 +21610,6 @@ var modeListItemClass = (selected, disabled) => cn(
20670
21610
  !disabled && !selected && "typo-field-sm-medium cursor-pointer bg-[var(--cmp-datepicker-mode-item-bg-default)] text-[color:var(--cmp-datepicker-mode-item-content-default)] hover:bg-[var(--cmp-datepicker-mode-item-bg-hover)] hover:text-[color:var(--cmp-datepicker-mode-item-content-hover)]",
20671
21611
  !disabled && selected && "typo-field-sm-bold cursor-pointer bg-[var(--cmp-datepicker-mode-item-bg-default)] text-[color:var(--cmp-datepicker-mode-item-content-selected)]"
20672
21612
  );
20673
- var MODE_NOUN = {
20674
- date: "\uB0A0\uC9DC",
20675
- month: "\uC6D4",
20676
- year: "\uC5F0\uB3C4"
20677
- };
20678
21613
  var YEAR_LIST_EDGE_BUFFER = 24;
20679
21614
  var YEAR_LIST_EXPAND_SIZE = 80;
20680
21615
  var MONTHS = Array.from({ length: 12 }, (_, i) => i + 1);
@@ -20828,6 +21763,7 @@ function SDatePickerYearListbox({
20828
21763
  );
20829
21764
  }
20830
21765
  function MonthWheel({ year, value, selectable, onCommit }) {
21766
+ const t = useLocale().messages.date;
20831
21767
  const listRef = react.useRef(null);
20832
21768
  const initialValueRef = react.useRef(value);
20833
21769
  react.useLayoutEffect(() => {
@@ -20848,7 +21784,7 @@ function MonthWheel({ year, value, selectable, onCommit }) {
20848
21784
  children: MONTHS.map((month) => {
20849
21785
  const selected = month === value;
20850
21786
  const disabled = isMonthDisabled(year, month, selectable);
20851
- return /* @__PURE__ */ jsxRuntime.jsxs(
21787
+ return /* @__PURE__ */ jsxRuntime.jsx(
20852
21788
  "button",
20853
21789
  {
20854
21790
  type: "button",
@@ -20857,10 +21793,7 @@ function MonthWheel({ year, value, selectable, onCommit }) {
20857
21793
  disabled,
20858
21794
  className: modeListItemClass(selected, disabled),
20859
21795
  onClick: () => !disabled && onCommit(month),
20860
- children: [
20861
- month,
20862
- "\uC6D4"
20863
- ]
21796
+ children: t.monthLabel(month)
20864
21797
  },
20865
21798
  month
20866
21799
  );
@@ -20957,6 +21890,8 @@ function SDatePicker({
20957
21890
  className,
20958
21891
  style
20959
21892
  }) {
21893
+ const runRules2 = useRunRules();
21894
+ const t = useLocale().messages.date;
20960
21895
  const portalContainer = usePortalContainer();
20961
21896
  const [open, setOpen] = react.useState(false);
20962
21897
  const triggerId = useFieldControlId();
@@ -20965,11 +21900,16 @@ function SDatePicker({
20965
21900
  const [ruleError, setRuleError] = react.useState("");
20966
21901
  const hasValue = value != null && value !== "";
20967
21902
  const weekday = showWeekday && mode === "date";
21903
+ const clearLabel = {
21904
+ date: t.clearDate,
21905
+ month: t.clearMonth,
21906
+ year: t.clearYear
21907
+ };
20968
21908
  const resolvedPlaceholder = placeholder ?? (mode === "year" ? "YYYY" : mode === "month" ? "YYYY-MM" : "YYYY-MM-DD");
20969
21909
  useFormField({
20970
21910
  name,
20971
21911
  validate: () => {
20972
- const msg = runRules(value, rules);
21912
+ const msg = runRules2(value, rules);
20973
21913
  setRuleError(msg);
20974
21914
  return msg === "";
20975
21915
  },
@@ -21003,7 +21943,7 @@ function SDatePicker({
21003
21943
  typo: "typo-field-sm-default",
21004
21944
  radius: "var(--cmp-datepicker-sm-radius)"
21005
21945
  };
21006
- const weekdayW = weekday ? weekdaySuffixWidth(baseDims.fontSize) : 0;
21946
+ const weekdayW = weekday ? weekdaySuffixWidth(baseDims.fontSize, t) : 0;
21007
21947
  const dims = {
21008
21948
  ...baseDims,
21009
21949
  minW: baseDims.minW + weekdayW,
@@ -21012,16 +21952,16 @@ function SDatePicker({
21012
21952
  };
21013
21953
  const select = (date) => {
21014
21954
  onValueChange?.(date);
21015
- if (rules && rules.length > 0) setRuleError(runRules(date, rules));
21955
+ if (rules && rules.length > 0) setRuleError(runRules2(date, rules));
21016
21956
  setOpen(false);
21017
21957
  };
21018
21958
  const clear = () => {
21019
21959
  onValueChange?.(null);
21020
- if (rules && rules.length > 0) setRuleError(runRules(null, rules));
21960
+ if (rules && rules.length > 0) setRuleError(runRules2(null, rules));
21021
21961
  };
21022
21962
  const selectListboxValue = (nextValue) => {
21023
21963
  onValueChange?.(nextValue);
21024
- if (rules && rules.length > 0) setRuleError(runRules(nextValue, rules));
21964
+ if (rules && rules.length > 0) setRuleError(runRules2(nextValue, rules));
21025
21965
  };
21026
21966
  return /* @__PURE__ */ jsxRuntime.jsx(
21027
21967
  SField,
@@ -21092,7 +22032,7 @@ function SDatePicker({
21092
22032
  minWidth: dims.minW,
21093
22033
  color: disabled ? "var(--cmp-datepicker-text-disabled)" : hasValue ? "var(--cmp-datepicker-text-default)" : "var(--cmp-field-hint-color)"
21094
22034
  },
21095
- children: hasValue ? weekday ? withWeekday(value) : value : resolvedPlaceholder
22035
+ children: hasValue ? weekday ? withWeekday(value, t) : value : resolvedPlaceholder
21096
22036
  }
21097
22037
  ),
21098
22038
  clearable && hasValue && !disabled && /* @__PURE__ */ jsxRuntime.jsx(
@@ -21100,7 +22040,7 @@ function SDatePicker({
21100
22040
  {
21101
22041
  icon: "close",
21102
22042
  size: "xxs",
21103
- ariaLabel: `${MODE_NOUN[mode]} \uC9C0\uC6B0\uAE30`,
22043
+ ariaLabel: clearLabel[mode],
21104
22044
  onClick: (event) => {
21105
22045
  event.stopPropagation();
21106
22046
  clear();
@@ -21169,6 +22109,7 @@ function RangeCalendar({
21169
22109
  onPendingStartChange,
21170
22110
  onViewChange
21171
22111
  }) {
22112
+ const t = useLocale().messages.date;
21172
22113
  const today = todayStr();
21173
22114
  const initial = splitDateTime(value?.[0]);
21174
22115
  const base = initial.date || today;
@@ -21239,8 +22180,8 @@ function RangeCalendar({
21239
22180
  const RANGE_BG = "var(--cmp-datepicker-calendar-range-bg)";
21240
22181
  const pad = (v) => String(Number(v) || 0).padStart(2, "0");
21241
22182
  const emit3 = (dateStart, dateEnd, time) => {
21242
- const t = time ?? { sH, sM, eH, eM };
21243
- const range = showTimePicker ? [`${dateStart} ${pad(t.sH)}:${pad(t.sM)}`, `${dateEnd} ${pad(t.eH)}:${pad(t.eM)}`] : [dateStart, dateEnd];
22183
+ const t2 = time ?? { sH, sM, eH, eM };
22184
+ const range = showTimePicker ? [`${dateStart} ${pad(t2.sH)}:${pad(t2.sM)}`, `${dateEnd} ${pad(t2.eH)}:${pad(t2.eM)}`] : [dateStart, dateEnd];
21244
22185
  lastEmitted.current = JSON.stringify(range);
21245
22186
  onSelect(range);
21246
22187
  };
@@ -21295,7 +22236,7 @@ function RangeCalendar({
21295
22236
  {
21296
22237
  icon: "chevronLeft",
21297
22238
  size: "xxs",
21298
- ariaLabel: "prevMonth",
22239
+ ariaLabel: t.prevMonth,
21299
22240
  onClick: goPrevMonth,
21300
22241
  className: cn(!isLeft && "invisible pointer-events-none")
21301
22242
  }
@@ -21310,13 +22251,13 @@ function RangeCalendar({
21310
22251
  {
21311
22252
  icon: "chevronRight",
21312
22253
  size: "xxs",
21313
- ariaLabel: "nextMonth",
22254
+ ariaLabel: t.nextMonth,
21314
22255
  onClick: goNextMonth,
21315
22256
  className: cn(isLeft && "invisible pointer-events-none")
21316
22257
  }
21317
22258
  )
21318
22259
  ] }),
21319
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: GRID_COLS, children: WEEK_LABELS.map((l) => /* @__PURE__ */ jsxRuntime.jsx(
22260
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: GRID_COLS, children: t.weekdays.map((l) => /* @__PURE__ */ jsxRuntime.jsx(
21320
22261
  "span",
21321
22262
  {
21322
22263
  className: "flex h-[20px] items-center justify-center text-[12px] font-normal text-[color:var(--cmp-datepicker-calendar-week-color)]",
@@ -21381,11 +22322,11 @@ function RangeCalendar({
21381
22322
  children: [
21382
22323
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "inline-flex items-center gap-[var(--cmp-datepicker-calendar-time-date-gap)]", children: [
21383
22324
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: LABEL, children: num(yy, false) }),
21384
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: UNIT, children: "\uB144" }),
22325
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: UNIT, children: t.unitYear }),
21385
22326
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: LABEL, children: num(mm, true) }),
21386
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: UNIT, children: "\uC6D4" }),
22327
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: UNIT, children: t.unitMonth }),
21387
22328
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: LABEL, children: num(dd, true) }),
21388
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: UNIT, children: "\uC77C" })
22329
+ t.unitDay && /* @__PURE__ */ jsxRuntime.jsx("span", { className: UNIT, children: t.unitDay })
21389
22330
  ] }),
21390
22331
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "inline-flex items-center gap-[var(--cmp-datepicker-calendar-time-unit-gap)]", children: [
21391
22332
  /* @__PURE__ */ jsxRuntime.jsx(
@@ -21394,7 +22335,7 @@ function RangeCalendar({
21394
22335
  type: "text",
21395
22336
  inputMode: "numeric",
21396
22337
  maxLength: 2,
21397
- "aria-label": `${suffix} \uC2DC`,
22338
+ "aria-label": t.hourAria(suffix),
21398
22339
  disabled: !active,
21399
22340
  value: active ? hour : "",
21400
22341
  placeholder: "--",
@@ -21410,7 +22351,7 @@ function RangeCalendar({
21410
22351
  type: "text",
21411
22352
  inputMode: "numeric",
21412
22353
  maxLength: 2,
21413
- "aria-label": `${suffix} \uBD84`,
22354
+ "aria-label": t.minuteAria(suffix),
21414
22355
  disabled: !active,
21415
22356
  value: active ? minute : "",
21416
22357
  placeholder: "--",
@@ -21438,9 +22379,17 @@ function RangeCalendar({
21438
22379
  children: [
21439
22380
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "relative flex items-center justify-center", children: [
21440
22381
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center justify-center gap-[var(--cmp-datepicker-calendar-gap)] typo-field-md-medium", children: [
21441
- /* @__PURE__ */ jsxRuntime.jsx(SGhostButton, { icon: "chevronLeft", size: "xxs", ariaLabel: "prevYear", onClick: goPrevYear }),
22382
+ /* @__PURE__ */ jsxRuntime.jsx(SGhostButton, { icon: "chevronLeft", size: "xxs", ariaLabel: t.prevYear, onClick: goPrevYear }),
21442
22383
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "inline-flex min-w-[40px] items-center justify-center text-center", children: y }),
21443
- /* @__PURE__ */ jsxRuntime.jsx(SGhostButton, { icon: "chevronRight", size: "xxs", ariaLabel: "nextYear", onClick: goNextYear })
22384
+ /* @__PURE__ */ jsxRuntime.jsx(
22385
+ SGhostButton,
22386
+ {
22387
+ icon: "chevronRight",
22388
+ size: "xxs",
22389
+ ariaLabel: t.nextYear,
22390
+ onClick: goNextYear
22391
+ }
22392
+ )
21444
22393
  ] }),
21445
22394
  /* @__PURE__ */ jsxRuntime.jsx(
21446
22395
  "button",
@@ -21448,7 +22397,7 @@ function RangeCalendar({
21448
22397
  type: "button",
21449
22398
  onClick: goToday,
21450
22399
  className: "absolute right-0 h-[24px] min-w-[37px] cursor-pointer bg-transparent text-center text-[12px] font-medium leading-[24px] text-[color:var(--cmp-datepicker-calendar-day-default-text)] hover:underline",
21451
- children: "\uC624\uB298"
22400
+ children: t.today
21452
22401
  }
21453
22402
  )
21454
22403
  ] }),
@@ -21469,8 +22418,8 @@ function RangeCalendar({
21469
22418
  showTimePicker && /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
21470
22419
  /* @__PURE__ */ jsxRuntime.jsx(SDivider, {}),
21471
22420
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex gap-[var(--cmp-datepicker-calendar-time-gap)]", children: [
21472
- renderTimeSection("start", start, "\uBD80\uD130"),
21473
- renderTimeSection("end", end, "\uAE4C\uC9C0")
22421
+ renderTimeSection("start", start, t.rangeFrom),
22422
+ renderTimeSection("end", end, t.rangeTo)
21474
22423
  ] })
21475
22424
  ] })
21476
22425
  ]
@@ -21510,6 +22459,8 @@ function SDateRangePicker({
21510
22459
  className,
21511
22460
  style
21512
22461
  }) {
22462
+ const runRules2 = useRunRules();
22463
+ const t = useLocale().messages.date;
21513
22464
  const portalContainer = usePortalContainer();
21514
22465
  const [open, setOpen] = react.useState(false);
21515
22466
  const triggerId = useFieldControlId();
@@ -21520,12 +22471,12 @@ function SDateRangePicker({
21520
22471
  const hasDisplay = pendingStart != null || hasValue;
21521
22472
  const rawStart = pendingStart ?? (hasValue ? value[0] : "");
21522
22473
  const rawEnd = pendingStart ? "" : hasValue ? value[1] : "";
21523
- const startText = showWeekday && rawStart ? withWeekday(rawStart) : rawStart;
21524
- const endText = showWeekday && rawEnd ? withWeekday(rawEnd) : rawEnd;
22474
+ const startText = showWeekday && rawStart ? withWeekday(rawStart, t) : rawStart;
22475
+ const endText = showWeekday && rawEnd ? withWeekday(rawEnd, t) : rawEnd;
21525
22476
  useFormField({
21526
22477
  name,
21527
22478
  validate: () => {
21528
- const msg = runRules(value, rules);
22479
+ const msg = runRules2(value, rules);
21529
22480
  setRuleError(msg);
21530
22481
  return msg === "";
21531
22482
  },
@@ -21558,7 +22509,7 @@ function SDateRangePicker({
21558
22509
  typo: "typo-field-sm-default",
21559
22510
  radius: "var(--cmp-datepicker-sm-radius)"
21560
22511
  };
21561
- const weekdayW = showWeekday ? weekdaySuffixWidth(baseDims.fontSize) * 2 : 0;
22512
+ const weekdayW = showWeekday ? weekdaySuffixWidth(baseDims.fontSize, t) * 2 : 0;
21562
22513
  const dims = {
21563
22514
  ...baseDims,
21564
22515
  minW: baseDims.minW + weekdayW,
@@ -21568,13 +22519,13 @@ function SDateRangePicker({
21568
22519
  const select = (r3) => {
21569
22520
  setPendingStart(null);
21570
22521
  onValueChange?.(r3);
21571
- if (rules && rules.length > 0) setRuleError(runRules(r3, rules));
22522
+ if (rules && rules.length > 0) setRuleError(runRules2(r3, rules));
21572
22523
  if (!showTimePicker) setOpen(false);
21573
22524
  };
21574
22525
  const clear = () => {
21575
22526
  setPendingStart(null);
21576
22527
  onValueChange?.(null);
21577
- if (rules && rules.length > 0) setRuleError(runRules(null, rules));
22528
+ if (rules && rules.length > 0) setRuleError(runRules2(null, rules));
21578
22529
  };
21579
22530
  const resolvedPlaceholder = showTimePicker && placeholder === "YYYY-MM-DD ~ YYYY-MM-DD" ? "YYYY-MM-DD HH:mm ~ YYYY-MM-DD HH:mm" : placeholder;
21580
22531
  return /* @__PURE__ */ jsxRuntime.jsx(
@@ -21669,7 +22620,7 @@ function SDateRangePicker({
21669
22620
  {
21670
22621
  icon: "close",
21671
22622
  size: "xxs",
21672
- ariaLabel: "\uAE30\uAC04 \uC9C0\uC6B0\uAE30",
22623
+ ariaLabel: t.clearPeriod,
21673
22624
  onClick: (event) => {
21674
22625
  event.stopPropagation();
21675
22626
  clear();
@@ -21737,6 +22688,7 @@ var SChipImpl = /* @__PURE__ */ react.forwardRef(function SChip({
21737
22688
  className,
21738
22689
  style
21739
22690
  }, ref) {
22691
+ const runRules2 = useRunRules();
21740
22692
  const [editing, setEditing] = react.useState(false);
21741
22693
  const [error, setError] = react.useState(errorProp);
21742
22694
  const inputRef = react.useRef(null);
@@ -21777,7 +22729,7 @@ var SChipImpl = /* @__PURE__ */ react.forwardRef(function SChip({
21777
22729
  const changed = next !== draftRef.current;
21778
22730
  setEditing(false);
21779
22731
  if (changed) onValueChange?.(next);
21780
- if (rules && rules.length > 0) setError(runRules(next, rules) !== "");
22732
+ if (rules && rules.length > 0) setError(runRules2(next, rules) !== "");
21781
22733
  onBlur?.();
21782
22734
  };
21783
22735
  const cancel = () => {
@@ -21908,6 +22860,7 @@ function SFilePicker({
21908
22860
  className,
21909
22861
  style
21910
22862
  }) {
22863
+ const runRules2 = useRunRules();
21911
22864
  const autoId = react.useId();
21912
22865
  const resolvedName = name ?? autoId;
21913
22866
  const triggerId = `${autoId}-trigger`;
@@ -21923,7 +22876,7 @@ function SFilePicker({
21923
22876
  useFormField({
21924
22877
  name,
21925
22878
  validate: () => {
21926
- const msg = runRules(files, rules);
22879
+ const msg = runRules2(files, rules);
21927
22880
  setRuleError(msg);
21928
22881
  return msg === "";
21929
22882
  },
@@ -21955,7 +22908,7 @@ function SFilePicker({
21955
22908
  }
21956
22909
  const merged = [...existing, ...accepted];
21957
22910
  onValueChange?.(merged);
21958
- if (rules?.length) setRuleError(runRules(merged, rules));
22911
+ if (rules?.length) setRuleError(runRules2(merged, rules));
21959
22912
  } else {
21960
22913
  const { accepted, rejected, reason } = validate(arr);
21961
22914
  if (reason) {
@@ -21963,7 +22916,7 @@ function SFilePicker({
21963
22916
  return;
21964
22917
  }
21965
22918
  onValueChange?.(accepted[0]);
21966
- if (rules?.length) setRuleError(runRules(accepted[0], rules));
22919
+ if (rules?.length) setRuleError(runRules2(accepted[0], rules));
21967
22920
  }
21968
22921
  };
21969
22922
  const clear = (e) => {
@@ -22123,6 +23076,7 @@ function SKeyValueTable({
22123
23076
  className,
22124
23077
  style
22125
23078
  }) {
23079
+ const tc = useLocale().messages.common;
22126
23080
  if (fields.length === 0) return null;
22127
23081
  const emit3 = (name, value) => onChange?.({
22128
23082
  name,
@@ -22300,7 +23254,7 @@ function SKeyValueTable({
22300
23254
  {
22301
23255
  className: "flex flex-shrink-0 items-center justify-center border-l border-solid border-[color:var(--cmp-table-border-color)] px-[var(--cmp-table-keyValue-search-paddingX)]",
22302
23256
  style: { background: "var(--cmp-table-keyValue-search-bg)" },
22303
- children: /* @__PURE__ */ jsxRuntime.jsx(SButton, { color: "neutral", outline: true, size: "md", label: "\uAC80\uC0C9", onClick: () => onSearch?.() })
23257
+ children: /* @__PURE__ */ jsxRuntime.jsx(SButton, { color: "neutral", outline: true, size: "md", label: tc.search, onClick: () => onSearch?.() })
22304
23258
  }
22305
23259
  )
22306
23260
  ] });
@@ -22594,6 +23548,7 @@ function ChartRotatedCategoryLabels({
22594
23548
  );
22595
23549
  }
22596
23550
  var ChartFrame = /* @__PURE__ */ react.forwardRef(function ChartFrame2({ title, unit, legend, legendPosition = "top", children, className, style, ...props }, ref) {
23551
+ const t = useLocale().messages.chart;
22597
23552
  return /* @__PURE__ */ jsxRuntime.jsxs(
22598
23553
  "div",
22599
23554
  {
@@ -22609,10 +23564,7 @@ var ChartFrame = /* @__PURE__ */ react.forwardRef(function ChartFrame2({ title,
22609
23564
  (title || unit) && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-(--cmp-chart-gap)", children: [
22610
23565
  title && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "typo-body-md-medium text-(--cmp-chart-title-color)", children: title }),
22611
23566
  unit && // ml-auto — title 유무와 관계없이 항상 오른쪽 끝에 붙는다.
22612
- /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "ml-auto whitespace-nowrap typo-body-sm-default text-(--cmp-chart-unit-color)", children: [
22613
- "\uB2E8\uC704 : ",
22614
- unit
22615
- ] })
23567
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "ml-auto whitespace-nowrap typo-body-sm-default text-(--cmp-chart-unit-color)", children: t.unit(unit) })
22616
23568
  ] }),
22617
23569
  legend && legendPosition === "top" && legend,
22618
23570
  children,
@@ -22956,6 +23908,7 @@ var SBarChart = /* @__PURE__ */ react.forwardRef(function SBarChart2({
22956
23908
  className,
22957
23909
  style
22958
23910
  }, ref) {
23911
+ const t = useLocale().messages.chart;
22959
23912
  const vertical = direction === "vertical";
22960
23913
  const rotateLabels = rotateCategoryLabels && vertical;
22961
23914
  const { ref: plotRef, size } = useElementSize();
@@ -23333,7 +24286,7 @@ var SBarChart = /* @__PURE__ */ react.forwardRef(function SBarChart2({
23333
24286
  width: size.width,
23334
24287
  height: size.height,
23335
24288
  role: "img",
23336
- "aria-label": `${categories.length}\uAC1C \uD56D\uBAA9, ${series.length}\uAC1C \uACC4\uC5F4 ${stacked ? "\uB204\uC801 " : ""}\uB9C9\uB300 \uADF8\uB798\uD504`,
24289
+ "aria-label": t.barSummary(categories.length, series.length, !!stacked),
23337
24290
  children: [
23338
24291
  /* @__PURE__ */ jsxRuntime.jsx(
23339
24292
  "text",
@@ -23583,6 +24536,7 @@ var SLineChart = /* @__PURE__ */ react.forwardRef(function SLineChart2({
23583
24536
  className,
23584
24537
  style
23585
24538
  }, ref) {
24539
+ const t = useLocale().messages.chart;
23586
24540
  const smooth = curve === "smooth";
23587
24541
  const { ref: plotRef, size } = useElementSize();
23588
24542
  const { ref: axisTextRef, size: axisText } = useElementSize(rotateCategoryLabels);
@@ -23909,7 +24863,7 @@ var SLineChart = /* @__PURE__ */ react.forwardRef(function SLineChart2({
23909
24863
  height: size.height,
23910
24864
  overflow: "visible",
23911
24865
  role: "img",
23912
- "aria-label": `${categories.length}\uAC1C \uD56D\uBAA9, ${series.length}\uAC1C \uACC4\uC5F4 ${stacked ? "\uB204\uC801 " : ""}\uAEBE\uC740\uC120 \uADF8\uB798\uD504`,
24866
+ "aria-label": t.lineSummary(categories.length, series.length, !!stacked),
23913
24867
  children: [
23914
24868
  /* @__PURE__ */ jsxRuntime.jsx(
23915
24869
  "text",
@@ -24093,6 +25047,7 @@ var RadialChart = /* @__PURE__ */ react.forwardRef(function RadialChart2({
24093
25047
  innerRatio,
24094
25048
  kind
24095
25049
  }, ref) {
25050
+ const t = useLocale().messages.chart;
24096
25051
  const { ref: plotRef, size } = useElementSize();
24097
25052
  const [hovered, setHovered] = react.useState(null);
24098
25053
  const arcs = react.useMemo(() => {
@@ -24171,7 +25126,7 @@ var RadialChart = /* @__PURE__ */ react.forwardRef(function RadialChart2({
24171
25126
  height: diameter,
24172
25127
  overflow: "visible",
24173
25128
  role: "img",
24174
- "aria-label": `${arcs.length}\uAC1C \uD56D\uBAA9 ${kind}`,
25129
+ "aria-label": t.radialSummary(arcs.length, t[kind]),
24175
25130
  onMouseLeave: () => setHovered(null),
24176
25131
  children: [
24177
25132
  arcs.length === 0 ? (
@@ -24285,7 +25240,7 @@ var SPieChart = /* @__PURE__ */ react.forwardRef(function SPieChart2({
24285
25240
  legendPosition,
24286
25241
  showTooltip,
24287
25242
  innerRatio: 0,
24288
- kind: "\uD30C\uC774 \uADF8\uB798\uD504"
25243
+ kind: "pie"
24289
25244
  }
24290
25245
  );
24291
25246
  });
@@ -24310,7 +25265,7 @@ var SDonutChart = /* @__PURE__ */ react.forwardRef(function SDonutChart2({
24310
25265
  legendVariant,
24311
25266
  showTooltip,
24312
25267
  innerRatio: DONUT_INNER_RATIO,
24313
- kind: "\uB3C4\uB11B \uADF8\uB798\uD504"
25268
+ kind: "donut"
24314
25269
  }
24315
25270
  );
24316
25271
  });
@@ -24770,7 +25725,9 @@ var SSkeleton = /* @__PURE__ */ react.forwardRef(function SSkeleton2({
24770
25725
  }
24771
25726
  );
24772
25727
  });
24773
- var STimelineImpl = /* @__PURE__ */ react.forwardRef(function STimeline({ groups, emptyText = "\uB0B4\uC5ED\uC774 \uC5C6\uC2B5\uB2C8\uB2E4.", className, ...rest }, ref) {
25728
+ var STimelineImpl = /* @__PURE__ */ react.forwardRef(function STimeline({ groups, emptyText: emptyTextProp, className, ...rest }, ref) {
25729
+ const t = useLocale().messages.timeline;
25730
+ const emptyText = emptyTextProp === void 0 ? t.empty : emptyTextProp;
24774
25731
  const filled = groups.filter((group) => group.entries.length > 0);
24775
25732
  if (filled.length === 0) {
24776
25733
  return /* @__PURE__ */ jsxRuntime.jsx(
@@ -25655,14 +26612,14 @@ var SEDITOR_HEADING_LABELS = {
25655
26612
  var SEDITOR_FONT_SIZES = [8, 9, 10, 11, 12, 14, 16, 18, 24, 30, 36, 48, 60, 72];
25656
26613
  var SEDITOR_DEFAULT_FONT_SIZE = 12;
25657
26614
  var SEDITOR_DEFAULT_COLORS = [
25658
- { label: "\uAE30\uBCF8", color: "var(--color-fg-primary)" },
25659
- { label: "\uBCF4\uC870", color: "var(--color-fg-secondary)" },
25660
- { label: "\uD750\uB9BC", color: "var(--color-fg-tertiary)" },
25661
- { label: "\uAC15\uC870", color: "var(--color-fg-accent)" },
25662
- { label: "\uBE0C\uB79C\uB4DC", color: "var(--color-fg-brand)" },
25663
- { label: "\uC131\uACF5", color: "var(--color-fg-success)" },
25664
- { label: "\uC8FC\uC758", color: "var(--color-fg-warning)" },
25665
- { label: "\uC704\uD5D8", color: "var(--color-fg-danger)" }
26615
+ { key: "colorDefault", label: "\uAE30\uBCF8", color: "var(--color-fg-primary)" },
26616
+ { key: "colorSecondary", label: "\uBCF4\uC870", color: "var(--color-fg-secondary)" },
26617
+ { key: "colorMuted", label: "\uD750\uB9BC", color: "var(--color-fg-tertiary)" },
26618
+ { key: "colorAccent", label: "\uAC15\uC870", color: "var(--color-fg-accent)" },
26619
+ { key: "colorBrand", label: "\uBE0C\uB79C\uB4DC", color: "var(--color-fg-brand)" },
26620
+ { key: "colorSuccess", label: "\uC131\uACF5", color: "var(--color-fg-success)" },
26621
+ { key: "colorWarning", label: "\uC8FC\uC758", color: "var(--color-fg-warning)" },
26622
+ { key: "colorDanger", label: "\uC704\uD5D8", color: "var(--color-fg-danger)" }
25666
26623
  ];
25667
26624
  var TASK_LIST_CLASS = "sd-editor-task-list";
25668
26625
  var TASK_ITEM_CLASS = "sd-editor-task-item";
@@ -25803,7 +26760,6 @@ var scrollMenuClass = cn(
25803
26760
  FLOATING_SLIDE_ANIM,
25804
26761
  SCROLLBAR_CLASS
25805
26762
  );
25806
- var FONT_SIZE_DEFAULT_LABEL = "\uAE30\uBCF8";
25807
26763
  var FONT_SIZE_MENU_MAX_HEIGHT = "min(280px, var(--radix-dropdown-menu-content-available-height))";
25808
26764
  var swatchClass = cn(
25809
26765
  "flex h-[24px] w-[24px] cursor-pointer items-center justify-center rounded-[4px] outline-none",
@@ -25871,6 +26827,7 @@ var TableSizePicker = ({
25871
26827
  disabled,
25872
26828
  onPick
25873
26829
  }) => {
26830
+ const t = useLocale().messages.editor;
25874
26831
  const [size, setSize] = react.useState({ rows: 1, cols: 1 });
25875
26832
  const gridRef = react.useRef(null);
25876
26833
  react.useEffect(() => {
@@ -25889,7 +26846,7 @@ var TableSizePicker = ({
25889
26846
  {
25890
26847
  ref: gridRef,
25891
26848
  role: "grid",
25892
- "aria-label": "\uD45C \uD06C\uAE30",
26849
+ "aria-label": t.tableSize,
25893
26850
  "aria-disabled": disabled || void 0,
25894
26851
  tabIndex: disabled ? -1 : 0,
25895
26852
  className: cn("flex flex-col outline-none", disabled && "pointer-events-none opacity-40"),
@@ -25921,7 +26878,7 @@ var TableSizePicker = ({
25921
26878
  {
25922
26879
  type: "button",
25923
26880
  role: "gridcell",
25924
- "aria-label": `${r3 + 1}\uD589 ${c + 1}\uC5F4`,
26881
+ "aria-label": t.tableCell(r3 + 1, c + 1),
25925
26882
  "aria-selected": on,
25926
26883
  tabIndex: -1,
25927
26884
  className: "box-border cursor-pointer rounded-[3px] border border-solid p-0 outline-none",
@@ -25940,17 +26897,12 @@ var TableSizePicker = ({
25940
26897
  }) }, r3))
25941
26898
  }
25942
26899
  ),
25943
- /* @__PURE__ */ jsxRuntime.jsxs(
26900
+ /* @__PURE__ */ jsxRuntime.jsx(
25944
26901
  "div",
25945
26902
  {
25946
26903
  "aria-live": "polite",
25947
26904
  className: "mt-[6px] text-center text-[12px] leading-[20px] text-[color:var(--sys-color-fg-secondary)]",
25948
- children: [
25949
- size.rows,
25950
- "\uD589 \xD7 ",
25951
- size.cols,
25952
- "\uC5F4"
25953
- ]
26905
+ children: t.tableSizeText(size.rows, size.cols)
25954
26906
  }
25955
26907
  )
25956
26908
  ] });
@@ -25974,27 +26926,30 @@ var LinkEditor = ({
25974
26926
  onApply,
25975
26927
  onRemove,
25976
26928
  hasLink
25977
- }) => /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex min-w-0 items-center gap-[8px]", children: [
25978
- /* @__PURE__ */ jsxRuntime.jsx(
25979
- SInput,
25980
- {
25981
- value: href,
25982
- onValueChange: onHrefChange,
25983
- type: "url",
25984
- placeholder: "https://",
25985
- width: "md",
25986
- "aria-label": "\uB9C1\uD06C \uC8FC\uC18C",
25987
- onKeyDown: (e) => {
25988
- if (e.key === "Enter") {
25989
- e.preventDefault();
25990
- onApply();
26929
+ }) => {
26930
+ const t = useLocale().messages.editor;
26931
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex min-w-0 items-center gap-[8px]", children: [
26932
+ /* @__PURE__ */ jsxRuntime.jsx(
26933
+ SInput,
26934
+ {
26935
+ value: href,
26936
+ onValueChange: onHrefChange,
26937
+ type: "url",
26938
+ placeholder: "https://",
26939
+ width: "md",
26940
+ "aria-label": t.linkUrl,
26941
+ onKeyDown: (e) => {
26942
+ if (e.key === "Enter") {
26943
+ e.preventDefault();
26944
+ onApply();
26945
+ }
25991
26946
  }
25992
26947
  }
25993
- }
25994
- ),
25995
- /* @__PURE__ */ jsxRuntime.jsx(SButton, { size: "sm", label: "\uC801\uC6A9", onClick: onApply }),
25996
- hasLink && /* @__PURE__ */ jsxRuntime.jsx(SButton, { size: "sm", color: "neutral", outline: true, label: "\uC81C\uAC70", onClick: onRemove })
25997
- ] });
26948
+ ),
26949
+ /* @__PURE__ */ jsxRuntime.jsx(SButton, { size: "sm", label: t.apply, onClick: onApply }),
26950
+ hasLink && /* @__PURE__ */ jsxRuntime.jsx(SButton, { size: "sm", color: "neutral", outline: true, label: t.remove, onClick: onRemove })
26951
+ ] });
26952
+ };
25998
26953
  var TOOLBAR_BAR_CLASS = "sticky top-0 z-[1] flex flex-wrap items-center gap-[2px] border-b border-solid bg-inherit px-[8px] py-[4px]";
25999
26954
  var TOOLBAR_BAR_STYLE = { borderBottomColor: "var(--sys-color-border-default)" };
26000
26955
  var BUBBLE_BAR_CLASS = cn(
@@ -26061,6 +27016,11 @@ function EditorToolbarBar({
26061
27016
  disabled,
26062
27017
  variant = "bar"
26063
27018
  }) {
27019
+ const t = useLocale().messages.editor;
27020
+ const colorOptions = react.useMemo(
27021
+ () => SEDITOR_DEFAULT_COLORS.map((option) => ({ color: option.color, label: t[option.key] })),
27022
+ [t]
27023
+ );
26064
27024
  const portalContainer = usePortalContainer();
26065
27025
  const insideModal = useInsideModal();
26066
27026
  const isMobile = useIsMobile();
@@ -26131,7 +27091,7 @@ function EditorToolbarBar({
26131
27091
  /* @__PURE__ */ jsxRuntime.jsx(RDropdown5__namespace.Trigger, { asChild: true, disabled: off, children: /* @__PURE__ */ jsxRuntime.jsxs(
26132
27092
  ToolbarButton,
26133
27093
  {
26134
- label: "\uC81C\uBAA9 \uB2E8\uACC4",
27094
+ label: t.headingLevel,
26135
27095
  active: state2.heading !== 0,
26136
27096
  disabled: off,
26137
27097
  className: "px-[4px]",
@@ -26147,7 +27107,7 @@ function EditorToolbarBar({
26147
27107
  {
26148
27108
  className: menuItemClass,
26149
27109
  onSelect: () => chain()?.setParagraph().run(),
26150
- children: SEDITOR_HEADING_LABELS[0]
27110
+ children: t.headingBody
26151
27111
  }
26152
27112
  ),
26153
27113
  SEDITOR_HEADING_LEVELS.map((level) => /* @__PURE__ */ jsxRuntime.jsx(
@@ -26155,7 +27115,7 @@ function EditorToolbarBar({
26155
27115
  {
26156
27116
  className: menuItemClass,
26157
27117
  onSelect: () => chain()?.setHeading({ level }).run(),
26158
- children: /* @__PURE__ */ jsxRuntime.jsx("span", { className: HEADING_ITEM_CLASS[level], children: SEDITOR_HEADING_LABELS[level] })
27118
+ children: /* @__PURE__ */ jsxRuntime.jsx("span", { className: HEADING_ITEM_CLASS[level], children: t.heading(level) })
26159
27119
  },
26160
27120
  level
26161
27121
  ))
@@ -26163,8 +27123,8 @@ function EditorToolbarBar({
26163
27123
  ] }, item4);
26164
27124
  case "fontSize":
26165
27125
  return /* @__PURE__ */ jsxRuntime.jsxs(RDropdown5__namespace.Root, { modal: !insideModal, children: [
26166
- /* @__PURE__ */ jsxRuntime.jsx(RDropdown5__namespace.Trigger, { asChild: true, disabled: off, children: /* @__PURE__ */ jsxRuntime.jsxs(ToolbarButton, { label: "\uAE00\uC790 \uD06C\uAE30", disabled: off, className: "px-[6px]", children: [
26167
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-[12px] leading-[20px]", children: activeFontSize ?? FONT_SIZE_DEFAULT_LABEL }),
27126
+ /* @__PURE__ */ jsxRuntime.jsx(RDropdown5__namespace.Trigger, { asChild: true, disabled: off, children: /* @__PURE__ */ jsxRuntime.jsxs(ToolbarButton, { label: t.fontSize, disabled: off, className: "px-[6px]", children: [
27127
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-[12px] leading-[20px]", children: activeFontSize ?? t.fontSizeDefaultLabel }),
26168
27128
  /* @__PURE__ */ jsxRuntime.jsx(SIcon, { name: "caretDown", size: 12 })
26169
27129
  ] }) }),
26170
27130
  /* @__PURE__ */ jsxRuntime.jsx(RDropdown5__namespace.Portal, { container: portalContainer, children: /* @__PURE__ */ jsxRuntime.jsxs(
@@ -26179,9 +27139,9 @@ function EditorToolbarBar({
26179
27139
  RDropdown5__namespace.Item,
26180
27140
  {
26181
27141
  className: cn(menuItemClass, activeFontSize === null && menuItemSelectedClass),
26182
- title: `${FONT_SIZE_DEFAULT_LABEL} (\uBCF8\uBB38 ${SEDITOR_DEFAULT_FONT_SIZE}px)`,
27142
+ title: t.fontSizeDefault(SEDITOR_DEFAULT_FONT_SIZE),
26183
27143
  onSelect: () => chain()?.unsetFontSize().run(),
26184
- children: FONT_SIZE_DEFAULT_LABEL
27144
+ children: t.fontSizeDefaultLabel
26185
27145
  }
26186
27146
  ),
26187
27147
  SEDITOR_FONT_SIZES.map((size) => /* @__PURE__ */ jsxRuntime.jsx(
@@ -26204,7 +27164,7 @@ function EditorToolbarBar({
26204
27164
  return /* @__PURE__ */ jsxRuntime.jsx(
26205
27165
  ToolbarButton,
26206
27166
  {
26207
- label: "\uAD75\uAC8C",
27167
+ label: t.bold,
26208
27168
  active: state2.bold,
26209
27169
  "aria-pressed": state2.bold,
26210
27170
  disabled: off,
@@ -26217,7 +27177,7 @@ function EditorToolbarBar({
26217
27177
  return /* @__PURE__ */ jsxRuntime.jsx(
26218
27178
  ToolbarButton,
26219
27179
  {
26220
- label: "\uAE30\uC6B8\uC784",
27180
+ label: t.italic,
26221
27181
  active: state2.italic,
26222
27182
  "aria-pressed": state2.italic,
26223
27183
  disabled: off,
@@ -26230,7 +27190,7 @@ function EditorToolbarBar({
26230
27190
  return /* @__PURE__ */ jsxRuntime.jsx(
26231
27191
  ToolbarButton,
26232
27192
  {
26233
- label: "\uBC11\uC904",
27193
+ label: t.underline,
26234
27194
  active: state2.underline,
26235
27195
  "aria-pressed": state2.underline,
26236
27196
  disabled: off,
@@ -26243,7 +27203,7 @@ function EditorToolbarBar({
26243
27203
  return /* @__PURE__ */ jsxRuntime.jsx(
26244
27204
  ToolbarButton,
26245
27205
  {
26246
- label: "\uCDE8\uC18C\uC120",
27206
+ label: t.strike,
26247
27207
  active: state2.strike,
26248
27208
  "aria-pressed": state2.strike,
26249
27209
  disabled: off,
@@ -26256,7 +27216,7 @@ function EditorToolbarBar({
26256
27216
  return /* @__PURE__ */ jsxRuntime.jsx(
26257
27217
  ToolbarButton,
26258
27218
  {
26259
- label: "\uC778\uB77C\uC778 \uCF54\uB4DC",
27219
+ label: t.inlineCode,
26260
27220
  active: state2.code,
26261
27221
  "aria-pressed": state2.code,
26262
27222
  disabled: off,
@@ -26270,7 +27230,7 @@ function EditorToolbarBar({
26270
27230
  return /* @__PURE__ */ jsxRuntime.jsx(
26271
27231
  ToolbarButton,
26272
27232
  {
26273
- label: "\uAE00\uC790\uC0C9",
27233
+ label: t.textColor,
26274
27234
  disabled: off,
26275
27235
  onClick: () => setMobileView("color"),
26276
27236
  children: /* @__PURE__ */ jsxRuntime.jsx(ColorIndicator, { color: off ? "currentColor" : activeColor, children: /* @__PURE__ */ jsxRuntime.jsx(IconTextColor, { size: ICON_SIZE }) })
@@ -26278,14 +27238,14 @@ function EditorToolbarBar({
26278
27238
  item4
26279
27239
  );
26280
27240
  return /* @__PURE__ */ jsxRuntime.jsxs(RDropdown5__namespace.Root, { modal: !insideModal, children: [
26281
- /* @__PURE__ */ jsxRuntime.jsx(RDropdown5__namespace.Trigger, { asChild: true, disabled: off, children: /* @__PURE__ */ jsxRuntime.jsx(ToolbarButton, { label: "\uAE00\uC790\uC0C9", disabled: off, children: /* @__PURE__ */ jsxRuntime.jsx(ColorIndicator, { color: off ? "currentColor" : activeColor, children: /* @__PURE__ */ jsxRuntime.jsx(IconTextColor, { size: ICON_SIZE }) }) }) }),
27241
+ /* @__PURE__ */ jsxRuntime.jsx(RDropdown5__namespace.Trigger, { asChild: true, disabled: off, children: /* @__PURE__ */ jsxRuntime.jsx(ToolbarButton, { label: t.textColor, disabled: off, children: /* @__PURE__ */ jsxRuntime.jsx(ColorIndicator, { color: off ? "currentColor" : activeColor, children: /* @__PURE__ */ jsxRuntime.jsx(IconTextColor, { size: ICON_SIZE }) }) }) }),
26282
27242
  /* @__PURE__ */ jsxRuntime.jsx(RDropdown5__namespace.Portal, { container: portalContainer, children: /* @__PURE__ */ jsxRuntime.jsx(RDropdown5__namespace.Content, { sideOffset: 4, align: "start", className: menuClass, children: /* @__PURE__ */ jsxRuntime.jsx(
26283
27243
  ColorPalette,
26284
27244
  {
26285
27245
  asMenu: true,
26286
- colors: SEDITOR_DEFAULT_COLORS,
27246
+ colors: colorOptions,
26287
27247
  columns: 4,
26288
- clearLabel: "\uC0C9 \uC9C0\uC6B0\uAE30",
27248
+ clearLabel: t.clearColor,
26289
27249
  onPick: applyColor,
26290
27250
  onClear: clearColor
26291
27251
  }
@@ -26295,7 +27255,7 @@ function EditorToolbarBar({
26295
27255
  return /* @__PURE__ */ jsxRuntime.jsx(
26296
27256
  ToolbarButton,
26297
27257
  {
26298
- label: "\uC67C\uCABD \uC815\uB82C",
27258
+ label: t.alignLeft,
26299
27259
  active: state2.alignLeft,
26300
27260
  "aria-pressed": state2.alignLeft,
26301
27261
  disabled: off,
@@ -26308,7 +27268,7 @@ function EditorToolbarBar({
26308
27268
  return /* @__PURE__ */ jsxRuntime.jsx(
26309
27269
  ToolbarButton,
26310
27270
  {
26311
- label: "\uAC00\uC6B4\uB370 \uC815\uB82C",
27271
+ label: t.alignCenter,
26312
27272
  active: state2.alignCenter,
26313
27273
  "aria-pressed": state2.alignCenter,
26314
27274
  disabled: off,
@@ -26321,7 +27281,7 @@ function EditorToolbarBar({
26321
27281
  return /* @__PURE__ */ jsxRuntime.jsx(
26322
27282
  ToolbarButton,
26323
27283
  {
26324
- label: "\uC624\uB978\uCABD \uC815\uB82C",
27284
+ label: t.alignRight,
26325
27285
  active: state2.alignRight,
26326
27286
  "aria-pressed": state2.alignRight,
26327
27287
  disabled: off,
@@ -26334,7 +27294,7 @@ function EditorToolbarBar({
26334
27294
  return /* @__PURE__ */ jsxRuntime.jsx(
26335
27295
  ToolbarButton,
26336
27296
  {
26337
- label: "\uC591\uCABD \uC815\uB82C",
27297
+ label: t.alignJustify,
26338
27298
  active: state2.alignJustify,
26339
27299
  "aria-pressed": state2.alignJustify,
26340
27300
  disabled: off,
@@ -26347,7 +27307,7 @@ function EditorToolbarBar({
26347
27307
  return /* @__PURE__ */ jsxRuntime.jsx(
26348
27308
  ToolbarButton,
26349
27309
  {
26350
- label: "\uAE00\uBA38\uB9AC \uAE30\uD638 \uBAA9\uB85D",
27310
+ label: t.bulletList,
26351
27311
  active: state2.bulletList,
26352
27312
  "aria-pressed": state2.bulletList,
26353
27313
  disabled: off,
@@ -26360,7 +27320,7 @@ function EditorToolbarBar({
26360
27320
  return /* @__PURE__ */ jsxRuntime.jsx(
26361
27321
  ToolbarButton,
26362
27322
  {
26363
- label: "\uBC88\uD638 \uB9E4\uAE30\uAE30 \uBAA9\uB85D",
27323
+ label: t.orderedList,
26364
27324
  active: state2.orderedList,
26365
27325
  "aria-pressed": state2.orderedList,
26366
27326
  disabled: off,
@@ -26373,7 +27333,7 @@ function EditorToolbarBar({
26373
27333
  return /* @__PURE__ */ jsxRuntime.jsx(
26374
27334
  ToolbarButton,
26375
27335
  {
26376
- label: "\uCCB4\uD06C \uBAA9\uB85D",
27336
+ label: t.taskList,
26377
27337
  active: state2.taskList,
26378
27338
  "aria-pressed": state2.taskList,
26379
27339
  disabled: off,
@@ -26386,7 +27346,7 @@ function EditorToolbarBar({
26386
27346
  const ListIcon = state2.orderedList ? IconOrderedList : state2.taskList ? IconTaskList : IconBulletList;
26387
27347
  const listActive = state2.bulletList || state2.orderedList || state2.taskList;
26388
27348
  return /* @__PURE__ */ jsxRuntime.jsxs(RDropdown5__namespace.Root, { modal: !insideModal, children: [
26389
- /* @__PURE__ */ jsxRuntime.jsx(RDropdown5__namespace.Trigger, { asChild: true, disabled: off, children: /* @__PURE__ */ jsxRuntime.jsxs(ToolbarButton, { label: "\uBAA9\uB85D", active: listActive, disabled: off, className: "px-[4px]", children: [
27349
+ /* @__PURE__ */ jsxRuntime.jsx(RDropdown5__namespace.Trigger, { asChild: true, disabled: off, children: /* @__PURE__ */ jsxRuntime.jsxs(ToolbarButton, { label: t.list, active: listActive, disabled: off, className: "px-[4px]", children: [
26390
27350
  /* @__PURE__ */ jsxRuntime.jsx(ListIcon, { size: ICON_SIZE }),
26391
27351
  /* @__PURE__ */ jsxRuntime.jsx(SIcon, { name: "caretDown", size: CARET_SIZE })
26392
27352
  ] }) }),
@@ -26398,7 +27358,7 @@ function EditorToolbarBar({
26398
27358
  onSelect: () => chain()?.toggleBulletList().run(),
26399
27359
  children: [
26400
27360
  /* @__PURE__ */ jsxRuntime.jsx(IconBulletList, { size: 16, className: "mr-[6px]" }),
26401
- "\uAE00\uBA38\uB9AC \uAE30\uD638 \uBAA9\uB85D"
27361
+ t.bulletList
26402
27362
  ]
26403
27363
  }
26404
27364
  ),
@@ -26409,7 +27369,7 @@ function EditorToolbarBar({
26409
27369
  onSelect: () => chain()?.toggleOrderedList().run(),
26410
27370
  children: [
26411
27371
  /* @__PURE__ */ jsxRuntime.jsx(IconOrderedList, { size: 16, className: "mr-[6px]" }),
26412
- "\uBC88\uD638 \uB9E4\uAE30\uAE30 \uBAA9\uB85D"
27372
+ t.orderedList
26413
27373
  ]
26414
27374
  }
26415
27375
  ),
@@ -26420,7 +27380,7 @@ function EditorToolbarBar({
26420
27380
  onSelect: () => chain()?.toggleTaskList().run(),
26421
27381
  children: [
26422
27382
  /* @__PURE__ */ jsxRuntime.jsx(IconTaskList, { size: 16, className: "mr-[6px]" }),
26423
- "\uCCB4\uD06C \uBAA9\uB85D"
27383
+ t.taskList
26424
27384
  ]
26425
27385
  }
26426
27386
  )
@@ -26431,7 +27391,7 @@ function EditorToolbarBar({
26431
27391
  return /* @__PURE__ */ jsxRuntime.jsx(
26432
27392
  ToolbarButton,
26433
27393
  {
26434
- label: "\uC778\uC6A9\uAD6C",
27394
+ label: t.blockquote,
26435
27395
  active: state2.blockquote,
26436
27396
  "aria-pressed": state2.blockquote,
26437
27397
  disabled: off,
@@ -26444,7 +27404,7 @@ function EditorToolbarBar({
26444
27404
  return /* @__PURE__ */ jsxRuntime.jsx(
26445
27405
  ToolbarButton,
26446
27406
  {
26447
- label: "\uCF54\uB4DC \uBE14\uB85D",
27407
+ label: t.codeBlock,
26448
27408
  active: state2.codeBlock,
26449
27409
  "aria-pressed": state2.codeBlock,
26450
27410
  disabled: off,
@@ -26457,7 +27417,7 @@ function EditorToolbarBar({
26457
27417
  return /* @__PURE__ */ jsxRuntime.jsx(
26458
27418
  ToolbarButton,
26459
27419
  {
26460
- label: "\uAD6C\uBD84\uC120",
27420
+ label: t.divider,
26461
27421
  disabled: off,
26462
27422
  onClick: () => chain()?.setHorizontalRule().run(),
26463
27423
  children: /* @__PURE__ */ jsxRuntime.jsx(IconHorizontalRule, { size: ICON_SIZE })
@@ -26469,7 +27429,7 @@ function EditorToolbarBar({
26469
27429
  return /* @__PURE__ */ jsxRuntime.jsx(
26470
27430
  ToolbarButton,
26471
27431
  {
26472
- label: "\uB9C1\uD06C",
27432
+ label: t.link,
26473
27433
  active: state2.link,
26474
27434
  disabled: off,
26475
27435
  onClick: () => setMobileView("link"),
@@ -26478,7 +27438,7 @@ function EditorToolbarBar({
26478
27438
  item4
26479
27439
  );
26480
27440
  return /* @__PURE__ */ jsxRuntime.jsxs(RPopover13__namespace.Root, { open: linkOpen, onOpenChange: setLinkOpen, children: [
26481
- /* @__PURE__ */ jsxRuntime.jsx(RPopover13__namespace.Trigger, { asChild: true, disabled: off, children: /* @__PURE__ */ jsxRuntime.jsx(ToolbarButton, { label: "\uB9C1\uD06C", active: state2.link, disabled: off, children: /* @__PURE__ */ jsxRuntime.jsx(IconLink, { size: ICON_SIZE }) }) }),
27441
+ /* @__PURE__ */ jsxRuntime.jsx(RPopover13__namespace.Trigger, { asChild: true, disabled: off, children: /* @__PURE__ */ jsxRuntime.jsx(ToolbarButton, { label: t.link, active: state2.link, disabled: off, children: /* @__PURE__ */ jsxRuntime.jsx(IconLink, { size: ICON_SIZE }) }) }),
26482
27442
  /* @__PURE__ */ jsxRuntime.jsx(RPopover13__namespace.Portal, { container: portalContainer, children: /* @__PURE__ */ jsxRuntime.jsx(
26483
27443
  RPopover13__namespace.Content,
26484
27444
  {
@@ -26505,13 +27465,13 @@ function EditorToolbarBar({
26505
27465
  return /* @__PURE__ */ jsxRuntime.jsxs(
26506
27466
  ToolbarButton,
26507
27467
  {
26508
- label: "\uC774\uBBF8\uC9C0 \uB123\uAE30",
27468
+ label: t.insertImage,
26509
27469
  disabled: off || uploading,
26510
27470
  className: "px-[6px]",
26511
27471
  onClick: () => fileInputRef.current?.click(),
26512
27472
  children: [
26513
27473
  /* @__PURE__ */ jsxRuntime.jsx(SIcon, { name: "image", size: ICON_SIZE }),
26514
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-[12px] leading-[20px]", children: "\uC774\uBBF8\uC9C0" })
27474
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-[12px] leading-[20px]", children: t.image })
26515
27475
  ]
26516
27476
  },
26517
27477
  item4
@@ -26524,10 +27484,19 @@ function EditorToolbarBar({
26524
27484
  onOpenChange: setTableOpen,
26525
27485
  modal: !insideModal,
26526
27486
  children: [
26527
- /* @__PURE__ */ jsxRuntime.jsx(RDropdown5__namespace.Trigger, { asChild: true, disabled: off, children: /* @__PURE__ */ jsxRuntime.jsxs(ToolbarButton, { label: "\uD45C", active: state2.inTable, disabled: off, className: "px-[6px]", children: [
26528
- /* @__PURE__ */ jsxRuntime.jsx(IconTable, { size: ICON_SIZE }),
26529
- /* @__PURE__ */ jsxRuntime.jsx(SIcon, { name: "caretDown", size: CARET_SIZE })
26530
- ] }) }),
27487
+ /* @__PURE__ */ jsxRuntime.jsx(RDropdown5__namespace.Trigger, { asChild: true, disabled: off, children: /* @__PURE__ */ jsxRuntime.jsxs(
27488
+ ToolbarButton,
27489
+ {
27490
+ label: t.table,
27491
+ active: state2.inTable,
27492
+ disabled: off,
27493
+ className: "px-[6px]",
27494
+ children: [
27495
+ /* @__PURE__ */ jsxRuntime.jsx(IconTable, { size: ICON_SIZE }),
27496
+ /* @__PURE__ */ jsxRuntime.jsx(SIcon, { name: "caretDown", size: CARET_SIZE })
27497
+ ]
27498
+ }
27499
+ ) }),
26531
27500
  /* @__PURE__ */ jsxRuntime.jsx(RDropdown5__namespace.Portal, { container: portalContainer, children: /* @__PURE__ */ jsxRuntime.jsxs(RDropdown5__namespace.Content, { sideOffset: 4, align: "start", className: menuClass, children: [
26532
27501
  !state2.inTable && /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
26533
27502
  /* @__PURE__ */ jsxRuntime.jsx(
@@ -26545,7 +27514,7 @@ function EditorToolbarBar({
26545
27514
  /* @__PURE__ */ jsxRuntime.jsx(
26546
27515
  TableMenuItem,
26547
27516
  {
26548
- label: "\uC704\uC5D0 \uD589 \uCD94\uAC00",
27517
+ label: t.addRowAbove,
26549
27518
  disabled: !state2.inTable,
26550
27519
  onSelect: () => chain()?.addRowBefore().run()
26551
27520
  }
@@ -26553,7 +27522,7 @@ function EditorToolbarBar({
26553
27522
  /* @__PURE__ */ jsxRuntime.jsx(
26554
27523
  TableMenuItem,
26555
27524
  {
26556
- label: "\uC544\uB798\uC5D0 \uD589 \uCD94\uAC00",
27525
+ label: t.addRowBelow,
26557
27526
  disabled: !state2.inTable,
26558
27527
  onSelect: () => chain()?.addRowAfter().run()
26559
27528
  }
@@ -26561,7 +27530,7 @@ function EditorToolbarBar({
26561
27530
  /* @__PURE__ */ jsxRuntime.jsx(
26562
27531
  TableMenuItem,
26563
27532
  {
26564
- label: "\uC67C\uCABD\uC5D0 \uC5F4 \uCD94\uAC00",
27533
+ label: t.addColLeft,
26565
27534
  disabled: !state2.inTable,
26566
27535
  onSelect: () => chain()?.addColumnBefore().run()
26567
27536
  }
@@ -26569,7 +27538,7 @@ function EditorToolbarBar({
26569
27538
  /* @__PURE__ */ jsxRuntime.jsx(
26570
27539
  TableMenuItem,
26571
27540
  {
26572
- label: "\uC624\uB978\uCABD\uC5D0 \uC5F4 \uCD94\uAC00",
27541
+ label: t.addColRight,
26573
27542
  disabled: !state2.inTable,
26574
27543
  onSelect: () => chain()?.addColumnAfter().run()
26575
27544
  }
@@ -26578,7 +27547,7 @@ function EditorToolbarBar({
26578
27547
  /* @__PURE__ */ jsxRuntime.jsx(
26579
27548
  TableMenuItem,
26580
27549
  {
26581
- label: "\uC140 \uBCD1\uD569",
27550
+ label: t.mergeCells,
26582
27551
  disabled: !state2.canMergeCells,
26583
27552
  onSelect: () => chain()?.mergeCells().run()
26584
27553
  }
@@ -26586,7 +27555,7 @@ function EditorToolbarBar({
26586
27555
  /* @__PURE__ */ jsxRuntime.jsx(
26587
27556
  TableMenuItem,
26588
27557
  {
26589
- label: "\uBCD1\uD569 \uD574\uC81C",
27558
+ label: t.splitCell,
26590
27559
  disabled: !state2.canSplitCell,
26591
27560
  onSelect: () => chain()?.splitCell().run()
26592
27561
  }
@@ -26594,7 +27563,7 @@ function EditorToolbarBar({
26594
27563
  /* @__PURE__ */ jsxRuntime.jsx(
26595
27564
  TableMenuItem,
26596
27565
  {
26597
- label: "\uD5E4\uB354 \uD589 \uD1A0\uAE00",
27566
+ label: t.toggleHeaderRow,
26598
27567
  disabled: !state2.inTable,
26599
27568
  onSelect: () => chain()?.toggleHeaderRow().run()
26600
27569
  }
@@ -26602,7 +27571,7 @@ function EditorToolbarBar({
26602
27571
  /* @__PURE__ */ jsxRuntime.jsx(
26603
27572
  TableMenuItem,
26604
27573
  {
26605
- label: "\uD5E4\uB354 \uC5F4 \uD1A0\uAE00",
27574
+ label: t.toggleHeaderCol,
26606
27575
  disabled: !state2.inTable,
26607
27576
  onSelect: () => chain()?.toggleHeaderColumn().run()
26608
27577
  }
@@ -26611,7 +27580,7 @@ function EditorToolbarBar({
26611
27580
  /* @__PURE__ */ jsxRuntime.jsx(
26612
27581
  TableMenuItem,
26613
27582
  {
26614
- label: "\uD589 \uC0AD\uC81C",
27583
+ label: t.deleteRow,
26615
27584
  disabled: !state2.inTable,
26616
27585
  onSelect: () => chain()?.deleteRow().run()
26617
27586
  }
@@ -26619,7 +27588,7 @@ function EditorToolbarBar({
26619
27588
  /* @__PURE__ */ jsxRuntime.jsx(
26620
27589
  TableMenuItem,
26621
27590
  {
26622
- label: "\uC5F4 \uC0AD\uC81C",
27591
+ label: t.deleteCol,
26623
27592
  disabled: !state2.inTable,
26624
27593
  onSelect: () => chain()?.deleteColumn().run()
26625
27594
  }
@@ -26627,7 +27596,7 @@ function EditorToolbarBar({
26627
27596
  /* @__PURE__ */ jsxRuntime.jsx(
26628
27597
  TableMenuItem,
26629
27598
  {
26630
- label: "\uD45C \uC0AD\uC81C",
27599
+ label: t.deleteTable,
26631
27600
  disabled: !state2.inTable,
26632
27601
  onSelect: () => chain()?.deleteTable().run()
26633
27602
  }
@@ -26641,7 +27610,7 @@ function EditorToolbarBar({
26641
27610
  return /* @__PURE__ */ jsxRuntime.jsx(
26642
27611
  ToolbarButton,
26643
27612
  {
26644
- label: "\uC2E4\uD589 \uCDE8\uC18C",
27613
+ label: t.undo,
26645
27614
  disabled: off || !state2.canUndo,
26646
27615
  onClick: () => chain()?.undo().run(),
26647
27616
  children: /* @__PURE__ */ jsxRuntime.jsx(IconUndo, { size: ICON_SIZE })
@@ -26652,7 +27621,7 @@ function EditorToolbarBar({
26652
27621
  return /* @__PURE__ */ jsxRuntime.jsx(
26653
27622
  ToolbarButton,
26654
27623
  {
26655
- label: "\uB2E4\uC2DC \uC2E4\uD589",
27624
+ label: t.redo,
26656
27625
  disabled: off || !state2.canRedo,
26657
27626
  onClick: () => chain()?.redo().run(),
26658
27627
  children: /* @__PURE__ */ jsxRuntime.jsx(IconRedo, { size: ICON_SIZE })
@@ -26665,21 +27634,21 @@ function EditorToolbarBar({
26665
27634
  };
26666
27635
  const shell = {
26667
27636
  "role": "toolbar",
26668
- "aria-label": "\uC11C\uC2DD \uB3C4\uAD6C",
27637
+ "aria-label": t.toolbarLabel,
26669
27638
  "aria-disabled": disabled || void 0,
26670
27639
  "className": variant === "bubble" ? BUBBLE_BAR_CLASS : TOOLBAR_BAR_CLASS,
26671
27640
  "style": variant === "bubble" ? void 0 : TOOLBAR_BAR_STYLE
26672
27641
  };
26673
27642
  if (mobileView !== "main") {
26674
27643
  const editing = {
26675
- color: { icon: /* @__PURE__ */ jsxRuntime.jsx(IconTextColor, { size: ICON_SIZE }), label: "\uAE00\uC790\uC0C9" },
26676
- link: { icon: /* @__PURE__ */ jsxRuntime.jsx(IconLink, { size: ICON_SIZE }), label: "\uB9C1\uD06C" }
27644
+ color: { icon: /* @__PURE__ */ jsxRuntime.jsx(IconTextColor, { size: ICON_SIZE }), label: t.textColor },
27645
+ link: { icon: /* @__PURE__ */ jsxRuntime.jsx(IconLink, { size: ICON_SIZE }), label: t.link }
26677
27646
  }[mobileView];
26678
27647
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { ...shell, children: [
26679
27648
  /* @__PURE__ */ jsxRuntime.jsx("div", { role: "group", className: "flex items-center gap-[2px]", children: /* @__PURE__ */ jsxRuntime.jsxs(
26680
27649
  ToolbarButton,
26681
27650
  {
26682
- label: `${editing.label} \uB2EB\uAE30`,
27651
+ label: t.closeEditing(editing.label),
26683
27652
  className: "px-[4px]",
26684
27653
  onClick: () => setMobileView("main"),
26685
27654
  children: [
@@ -26701,9 +27670,9 @@ function EditorToolbarBar({
26701
27670
  ) : /* @__PURE__ */ jsxRuntime.jsx(
26702
27671
  ColorPalette,
26703
27672
  {
26704
- colors: SEDITOR_DEFAULT_COLORS,
27673
+ colors: colorOptions,
26705
27674
  columns: 4,
26706
- clearLabel: "\uC0C9 \uC9C0\uC6B0\uAE30",
27675
+ clearLabel: t.clearColor,
26707
27676
  onPick: applyColor,
26708
27677
  onClear: clearColor
26709
27678
  }
@@ -27000,7 +27969,7 @@ var SEditor = /* @__PURE__ */ react.forwardRef(function SEditor2({
27000
27969
  value,
27001
27970
  defaultValue,
27002
27971
  onValueChange,
27003
- placeholder = "\uB0B4\uC6A9\uC744 \uC785\uB825\uD574 \uC8FC\uC138\uC694.",
27972
+ placeholder: placeholderProp,
27004
27973
  minHeight = 200,
27005
27974
  maxHeight,
27006
27975
  simple = false,
@@ -27033,6 +28002,9 @@ var SEditor = /* @__PURE__ */ react.forwardRef(function SEditor2({
27033
28002
  className,
27034
28003
  style
27035
28004
  }, ref) {
28005
+ const runRules2 = useRunRules();
28006
+ const t = useLocale().messages.editor;
28007
+ const placeholder = placeholderProp ?? t.placeholder;
27036
28008
  const [ruleError, setRuleError] = react.useState("");
27037
28009
  const [selfFocused, setSelfFocused] = react.useState(false);
27038
28010
  const controlId = useFieldControlId();
@@ -27043,7 +28015,7 @@ var SEditor = /* @__PURE__ */ react.forwardRef(function SEditor2({
27043
28015
  const editable = !disabled && !readOnly;
27044
28016
  const handleInput = (html) => {
27045
28017
  onValueChange?.(html);
27046
- if (ruleError !== "") setRuleError(runRules(html, rules));
28018
+ if (ruleError !== "") setRuleError(runRules2(html, rules));
27047
28019
  };
27048
28020
  const handleFocusChange = (next) => {
27049
28021
  setSelfFocused(next);
@@ -27052,7 +28024,7 @@ var SEditor = /* @__PURE__ */ react.forwardRef(function SEditor2({
27052
28024
  return;
27053
28025
  }
27054
28026
  onBlur?.();
27055
- if (rules && rules.length > 0) setRuleError(runRules(htmlRef.current, rules));
28027
+ if (rules && rules.length > 0) setRuleError(runRules2(htmlRef.current, rules));
27056
28028
  };
27057
28029
  const handleReady = () => {
27058
28030
  if (!pendingFocusRef.current) return;
@@ -27062,7 +28034,7 @@ var SEditor = /* @__PURE__ */ react.forwardRef(function SEditor2({
27062
28034
  useFormField({
27063
28035
  name,
27064
28036
  validate: () => {
27065
- const msg = runRules(htmlRef.current, rules);
28037
+ const msg = runRules2(htmlRef.current, rules);
27066
28038
  setRuleError(msg);
27067
28039
  return msg === "";
27068
28040
  },
@@ -27236,6 +28208,8 @@ var SSlider = /* @__PURE__ */ react.forwardRef(function SSlider2({
27236
28208
  className,
27237
28209
  style
27238
28210
  }, ref) {
28211
+ const runRules2 = useRunRules();
28212
+ const t = useLocale().messages.slider;
27239
28213
  const isRange = Array.isArray(value);
27240
28214
  const values = isRange ? value : [value ?? min];
27241
28215
  const toOut = (v) => isRange ? [v[0], v[1]] : v[0];
@@ -27243,7 +28217,7 @@ var SSlider = /* @__PURE__ */ react.forwardRef(function SSlider2({
27243
28217
  useFormField({
27244
28218
  name,
27245
28219
  validate: () => {
27246
- const msg = runRules(value, rules);
28220
+ const msg = runRules2(value, rules);
27247
28221
  setRuleError(msg);
27248
28222
  return msg === "";
27249
28223
  },
@@ -27339,13 +28313,13 @@ var SSlider = /* @__PURE__ */ react.forwardRef(function SSlider2({
27339
28313
  if (!interactive) return;
27340
28314
  const next = toOut(v);
27341
28315
  onValueChange?.(next);
27342
- if (ruleError !== "") setRuleError(runRules(next, rules));
28316
+ if (ruleError !== "") setRuleError(runRules2(next, rules));
27343
28317
  },
27344
28318
  onValueCommit: (v) => {
27345
28319
  if (!interactive) return;
27346
28320
  const next = toOut(v);
27347
28321
  onValueCommit?.(next);
27348
- if (rules && rules.length > 0) setRuleError(runRules(next, rules));
28322
+ if (rules && rules.length > 0) setRuleError(runRules2(next, rules));
27349
28323
  },
27350
28324
  onPointerDown: () => interactive && setDragging(true),
27351
28325
  onPointerUp: () => setDragging(false),
@@ -27394,7 +28368,7 @@ var SSlider = /* @__PURE__ */ react.forwardRef(function SSlider2({
27394
28368
  RSlider__namespace.Thumb,
27395
28369
  {
27396
28370
  id: i === 0 ? thumbId : void 0,
27397
- "aria-label": isRange ? `${label ?? ""} ${i === 0 ? "\uCD5C\uC19F\uAC12" : "\uCD5C\uB313\uAC12"}`.trim() : label,
28371
+ "aria-label": isRange ? `${label ?? ""} ${i === 0 ? t.minValue : t.maxValue}`.trim() : label,
27398
28372
  "aria-valuetext": formatValue(v),
27399
28373
  "aria-readonly": readOnly || void 0,
27400
28374
  onFocus: () => setFocusIndex(i),
@@ -27520,28 +28494,41 @@ var CHIPFILTER = {
27520
28494
  itemTextSelected: "var(--cmp-chipFilter-item-text-selected)"
27521
28495
  };
27522
28496
  var DEFAULT_CUSTOM_MAX_RANGE = 90;
27523
- var DEFAULT_PERIOD_PRESETS = [
27524
- { value: "day", label: "\uC77C\uBCC4" },
27525
- { value: "month", label: "\uC6D4\uBCC4" },
27526
- { value: "quarter", label: "\uBD84\uAE30\uBCC4" },
27527
- { value: "half", label: "\uBC18\uAE30\uBCC4" },
27528
- { value: "year", label: "\uC5F0\uB3C4\uBCC4" },
27529
- { value: "custom", label: "\uC0AC\uC6A9\uC790 \uC9C0\uC815", custom: true }
27530
- ];
27531
- var DEFAULT_DATE_RANGE_PRESETS = [
27532
- { value: "today", label: "\uC624\uB298", resolve: () => todayIso() },
27533
- {
27534
- value: "last7",
27535
- label: "\uC9C0\uB09C 7\uC77C",
27536
- resolve: () => [rangeStartIso(todayIso(), 7), todayIso()]
27537
- },
27538
- {
27539
- value: "last30",
27540
- label: "\uC9C0\uB09C 30\uC77C",
27541
- resolve: () => [rangeStartIso(todayIso(), 30), todayIso()]
27542
- },
27543
- { value: "custom", label: "\uC0AC\uC6A9\uC790 \uC9C0\uC815", custom: true }
27544
- ];
28497
+ var defaultPresetCache = /* @__PURE__ */ new WeakMap();
28498
+ var STRUCTURE_MESSAGES = resolveMessages(DEFAULT_LOCALE);
28499
+ var getDefaultPresets = (m) => {
28500
+ const cached = defaultPresetCache.get(m.chipFilter);
28501
+ if (cached) return cached;
28502
+ const t = m.chipFilter;
28503
+ const created = {
28504
+ period: [
28505
+ { value: "day", label: t.periodDay },
28506
+ { value: "month", label: t.periodMonth },
28507
+ { value: "quarter", label: t.periodQuarter },
28508
+ { value: "half", label: t.periodHalf },
28509
+ { value: "year", label: t.periodYear },
28510
+ { value: "custom", label: t.custom, custom: true }
28511
+ ],
28512
+ /** presets 를 지정하지 않은 datepicker-range 필드가 쓰는 기본 프리셋 목록.
28513
+ * 프리셋 라디오 자체를 없애고 캘린더 하나만 두려면 presets: [] 를 명시한다 */
28514
+ range: [
28515
+ { value: "today", label: t.today, resolve: () => todayIso() },
28516
+ {
28517
+ value: "last7",
28518
+ label: t.last7,
28519
+ resolve: () => [rangeStartIso(todayIso(), 7), todayIso()]
28520
+ },
28521
+ {
28522
+ value: "last30",
28523
+ label: t.last30,
28524
+ resolve: () => [rangeStartIso(todayIso(), 30), todayIso()]
28525
+ },
28526
+ { value: "custom", label: t.custom, custom: true }
28527
+ ]
28528
+ };
28529
+ defaultPresetCache.set(m.chipFilter, created);
28530
+ return created;
28531
+ };
27545
28532
  var isKeywordValue = (value) => typeof value === "object" && value != null && !Array.isArray(value) && "keywords" in value;
27546
28533
  var isPeriodValue = (value) => typeof value === "object" && value != null && !Array.isArray(value) && "unit" in value;
27547
28534
  var keywordEntries = (value) => {
@@ -27633,18 +28620,20 @@ var addDaysIso = (iso, n) => {
27633
28620
  };
27634
28621
  var rangeStartIso = (today, days) => addDaysIso(today, -(days - 1));
27635
28622
  var isInlineDateField = (field) => field.type === "datepicker-range" && field.radioButton === true && (field.presets?.length ?? 0) > 0;
27636
- var getFieldPresets = (field) => {
27637
- if (field.type === "datepicker-statistics") return field.presets ?? DEFAULT_PERIOD_PRESETS;
27638
- return field.presets ?? DEFAULT_DATE_RANGE_PRESETS;
28623
+ var getFieldPresets = (field, m) => {
28624
+ if (field.type === "datepicker-statistics") return field.presets ?? getDefaultPresets(m).period;
28625
+ return field.presets ?? getDefaultPresets(m).range;
27639
28626
  };
27640
- var getEffectiveMaxRange = (field) => {
28627
+ var getEffectiveMaxRange = (field, m) => {
27641
28628
  if (field.maxRange !== void 0) return field.maxRange;
27642
- const hasCustomPreset = getFieldPresets(field).some((preset) => preset.custom);
28629
+ const hasCustomPreset = getFieldPresets(field, m).some((preset) => preset.custom);
27643
28630
  return hasCustomPreset ? DEFAULT_CUSTOM_MAX_RANGE : void 0;
27644
28631
  };
27645
- var getPresetLabel = (preset, maxRange) => {
27646
- if (!preset.custom || !maxRange || preset.label.includes("\uCD5C\uB300")) return preset.label;
27647
- return `${preset.label} (\uCD5C\uB300 ${maxRange}\uC77C\uC529)`;
28632
+ var getPresetLabel = (preset, maxRange, m) => {
28633
+ const t = m.chipFilter;
28634
+ if (!preset.custom || !maxRange || preset.label.toLowerCase().includes(t.maxWord.toLowerCase()))
28635
+ return preset.label;
28636
+ return `${preset.label} (${t.maxRangeHint(maxRange)})`;
27648
28637
  };
27649
28638
  var getDefaultPeriodInputValue = (unit, maxRange) => {
27650
28639
  const today = todayIso();
@@ -27681,7 +28670,7 @@ var resolveFieldDefault = (field) => {
27681
28670
  if (field.type === "datepicker-day") return todayIso();
27682
28671
  if (field.type === "select" || field.type === "select-depth") return leafOptions(field)[0]?.value;
27683
28672
  if (field.type === "datepicker-statistics") {
27684
- const presets = getFieldPresets(field).filter((preset) => !preset.custom);
28673
+ const presets = getFieldPresets(field, STRUCTURE_MESSAGES).filter((preset) => !preset.custom);
27685
28674
  const unit = presets.some((preset) => preset.value === "day") ? "day" : presets[0]?.value;
27686
28675
  return unit ? createPeriodValue(unit) : void 0;
27687
28676
  }
@@ -27729,20 +28718,16 @@ var isGroupSatisfied = (group, values) => {
27729
28718
  if (group.rule.type === "requireAny") return keys.some((k) => !isEmptyValue(values[k]));
27730
28719
  return true;
27731
28720
  };
27732
- var koreanParticle = (word, consonant, vowel) => {
27733
- const code = word.charCodeAt(word.length - 1);
27734
- if (code < 44032 || code > 55203) return consonant;
27735
- return (code - 44032) % 28 === 0 ? vowel : consonant;
27736
- };
27737
- var defaultGroupTooltipMessage = (rule, fields) => {
27738
- if (rule.type === "requireAll") return "\uD56D\uBAA9\uC744 \uBAA8\uB450 \uC120\uD0DD\uD574 \uC8FC\uC138\uC694.";
28721
+ var defaultGroupTooltipMessage = (rule, fields, m) => {
28722
+ const t = m.chipFilter;
28723
+ if (rule.type === "requireAll") return t.requireAll;
27739
28724
  if (rule.type === "requireAny") {
27740
28725
  const name = rule.dataGroupName;
27741
- if (!name) return "\uCD5C\uC18C 1\uAC1C\uC758 \uD544\uD130\uB97C \uC120\uD0DD\uD574\uC8FC\uC138\uC694.";
27742
- return `\uCD5C\uC18C 1\uAC1C\uC758 ${name}${koreanParticle(name, "\uC744", "\uB97C")} \uC120\uD0DD\uD574\uC8FC\uC138\uC694.`;
28726
+ if (!name) return t.requireAnyDefault;
28727
+ return t.requireAnyNamed(name);
27743
28728
  }
27744
- const label = fields.find((f) => f.key === rule.key)?.label ?? "\uD56D\uBAA9";
27745
- return `${label}${koreanParticle(label, "\uC744", "\uB97C")} \uC120\uD0DD\uD574 \uC8FC\uC138\uC694.`;
28729
+ const label = fields.find((f) => f.key === rule.key)?.label ?? t.fieldFallback;
28730
+ return t.requireField(label);
27746
28731
  };
27747
28732
  var toDateRange = (value) => Array.isArray(value) ? [value[0], value[1]] : [value, value];
27748
28733
  var sameDateValue = (a, b) => {
@@ -27761,20 +28746,24 @@ var matchPresetId = (presets, value) => {
27761
28746
  return presets.find((preset) => preset.custom)?.value ?? null;
27762
28747
  };
27763
28748
  var optionLabel = (field, value) => leafOptions(field).find((option) => option.value === value)?.label ?? String(value);
27764
- var formatValueList = (labels) => {
28749
+ var formatValueList = (labels, m) => {
27765
28750
  if (labels.length <= 1) return labels[0] ?? "";
27766
- return `${labels[0]} \uC678 ${labels.length - 1}\uAC1C`;
28751
+ return m.chipFilter.valueListMore(labels[0], labels.length - 1);
27767
28752
  };
27768
- var displayValue = (field, value) => {
28753
+ var displayValue = (field, value, m) => {
28754
+ const t = m.chipFilter;
27769
28755
  if (isEmptyValue(value)) return "";
27770
28756
  if (isMultiSelectType(field.type)) {
27771
28757
  const optionsField = field;
27772
28758
  const values = toArrayValue(value);
27773
28759
  const selectableValues = selectableLeafValues(optionsField);
27774
28760
  if (selectableValues.length > 1 && selectableValues.every((selectableValue) => values.includes(selectableValue))) {
27775
- return "\uC804\uCCB4";
28761
+ return m.common.all;
27776
28762
  }
27777
- return formatValueList(values.map((v) => optionLabel(optionsField, v)));
28763
+ return formatValueList(
28764
+ values.map((v) => optionLabel(optionsField, v)),
28765
+ m
28766
+ );
27778
28767
  }
27779
28768
  if (field.type === "select" || field.type === "select-depth") {
27780
28769
  return optionLabel(field, value);
@@ -27785,23 +28774,24 @@ var displayValue = (field, value) => {
27785
28774
  }
27786
28775
  if (field.type === "datepicker-statistics") {
27787
28776
  if (!isPeriodValue(value)) {
27788
- const preset2 = getFieldPresets(field).find((p) => p.value === value);
28777
+ const preset2 = getFieldPresets(field, m).find((p) => p.value === value);
27789
28778
  return preset2?.label ?? String(value);
27790
28779
  }
27791
- const preset = getFieldPresets(field).find((p) => p.value === value.unit);
28780
+ const preset = getFieldPresets(field, m).find((p) => p.value === value.unit);
27792
28781
  const label = preset?.label ?? value.unit;
27793
- if (value.unit === "quarter") return `${label}(${value.value ?? 1}\uBD84\uAE30)`;
27794
- if (value.unit === "half") return `${label}(${value.value === "second" ? "\uD558\uBC18\uAE30" : "\uC0C1\uBC18\uAE30"})`;
28782
+ if (value.unit === "quarter") return `${label}(${t.quarter(Number(value.value ?? 1))})`;
28783
+ if (value.unit === "half")
28784
+ return `${label}(${value.value === "second" ? t.secondHalf : t.firstHalf})`;
27795
28785
  if (Array.isArray(value.value)) return `${value.value[0]} ~ ${value.value[1]}`;
27796
28786
  return value.value != null && value.value !== "" ? String(value.value) : label;
27797
28787
  }
27798
- if (field.type === "keyword") return formatValueList(keywordEntries(value));
28788
+ if (field.type === "keyword") return formatValueList(keywordEntries(value), m);
27799
28789
  return String(value);
27800
28790
  };
27801
- var chipDisplayValue = (field, value) => {
27802
- const text = displayValue(field, value);
28791
+ var chipDisplayValue = (field, value, m) => {
28792
+ const text = displayValue(field, value, m);
27803
28793
  if (field.type !== "datepicker-range" || isEmptyValue(value)) return text;
27804
- const presets = getFieldPresets(field);
28794
+ const presets = getFieldPresets(field, m);
27805
28795
  if (presets.length === 0) return text;
27806
28796
  const preset = presets.find((p) => p.value === matchPresetId(presets, value));
27807
28797
  return preset && !preset.custom ? `${preset.label}(${text})` : text;
@@ -27820,6 +28810,8 @@ var SChipFilter = /* @__PURE__ */ react.forwardRef(function SChipFilter2({
27820
28810
  className,
27821
28811
  style
27822
28812
  }, ref) {
28813
+ const messages = useLocale().messages;
28814
+ const t = messages.chipFilter;
27823
28815
  const fields = react.useMemo(() => groups.flatMap((group) => group.fields), [groups]);
27824
28816
  const values = normalizeValues(value);
27825
28817
  const portalContainer = usePortalContainer();
@@ -27966,7 +28958,7 @@ var SChipFilter = /* @__PURE__ */ react.forwardRef(function SChipFilter2({
27966
28958
  if (currentOpenField?.type === "keyword") {
27967
28959
  return { width: CHIPFILTER_LISTBOX_WIDTH };
27968
28960
  }
27969
- if ((currentOpenField?.type === "datepicker-range" || currentOpenField?.type === "datepicker-statistics") && getFieldPresets(currentOpenField).length > 0) {
28961
+ if ((currentOpenField?.type === "datepicker-range" || currentOpenField?.type === "datepicker-statistics") && getFieldPresets(currentOpenField, STRUCTURE_MESSAGES).length > 0) {
27970
28962
  return { width: CHIPFILTER_DATE_PRESET_LISTBOX_WIDTH };
27971
28963
  }
27972
28964
  return { width: CHIPFILTER_LISTBOX_WIDTH };
@@ -28073,7 +29065,7 @@ var SChipFilter = /* @__PURE__ */ react.forwardRef(function SChipFilter2({
28073
29065
  const flushRun = () => {
28074
29066
  if (runBuffer.length === 0) return;
28075
29067
  const group = runGroupIndex != null ? groups[runGroupIndex] : void 0;
28076
- const message = group?.rule ? group.tooltipMessage ?? defaultGroupTooltipMessage(group.rule, group.fields) : void 0;
29068
+ const message = group?.rule ? group.tooltipMessage ?? defaultGroupTooltipMessage(group.rule, group.fields, messages) : void 0;
28077
29069
  if (message) {
28078
29070
  nodes.push(
28079
29071
  /* @__PURE__ */ jsxRuntime.jsx(
@@ -28138,7 +29130,7 @@ var SChipFilter = /* @__PURE__ */ react.forwardRef(function SChipFilter2({
28138
29130
  {
28139
29131
  icon: "close",
28140
29132
  size: "xxs",
28141
- ariaLabel: `${field.label} \uD544\uD130 \uC81C\uAC70`,
29133
+ ariaLabel: t.removeFilter(field.label),
28142
29134
  className: "shrink-0",
28143
29135
  onClick: handleClear
28144
29136
  }
@@ -28147,7 +29139,7 @@ var SChipFilter = /* @__PURE__ */ react.forwardRef(function SChipFilter2({
28147
29139
  FilterChip,
28148
29140
  {
28149
29141
  field,
28150
- valueText: chipDisplayValue(field, values[field.key]),
29142
+ valueText: chipDisplayValue(field, values[field.key], messages),
28151
29143
  active: openKey === field.key,
28152
29144
  applied: !isEmptyValue(values[field.key]),
28153
29145
  disabled: disabled || field.disabled,
@@ -28199,7 +29191,7 @@ var SChipFilter = /* @__PURE__ */ react.forwardRef(function SChipFilter2({
28199
29191
  color: disabled || inactiveFields.length === 0 ? CHIPFILTER.addTextDisabled : CHIPFILTER.addText
28200
29192
  }
28201
29193
  ),
28202
- /* @__PURE__ */ jsxRuntime.jsx("span", { children: "\uD544\uD130 \uCD94\uAC00" })
29194
+ /* @__PURE__ */ jsxRuntime.jsx("span", { children: t.addFilter })
28203
29195
  ]
28204
29196
  }
28205
29197
  ) }),
@@ -28215,7 +29207,7 @@ var SChipFilter = /* @__PURE__ */ react.forwardRef(function SChipFilter2({
28215
29207
  event.preventDefault();
28216
29208
  },
28217
29209
  className: cn("z-50 min-w-[180px]", FLOATING_SLIDE_ANIM),
28218
- children: /* @__PURE__ */ jsxRuntime.jsx(ListBox, { children: inactiveFields.length > 0 ? inactiveFields.map((field) => /* @__PURE__ */ jsxRuntime.jsx(MenuItem, { onClick: () => addField(field.key), children: field.label }, field.key)) : /* @__PURE__ */ jsxRuntime.jsx(EmptyItem, { children: "\uCD94\uAC00\uD560 \uD544\uD130\uAC00 \uC5C6\uC2B5\uB2C8\uB2E4." }) })
29210
+ children: /* @__PURE__ */ jsxRuntime.jsx(ListBox, { children: inactiveFields.length > 0 ? inactiveFields.map((field) => /* @__PURE__ */ jsxRuntime.jsx(MenuItem, { onClick: () => addField(field.key), children: field.label }, field.key)) : /* @__PURE__ */ jsxRuntime.jsx(EmptyItem, { children: t.noAddableFilter }) })
28219
29211
  }
28220
29212
  ) })
28221
29213
  ] }),
@@ -28225,7 +29217,7 @@ var SChipFilter = /* @__PURE__ */ react.forwardRef(function SChipFilter2({
28225
29217
  size: "sm",
28226
29218
  icon: "reset",
28227
29219
  iconColor: "grey_80",
28228
- label: "\uAC80\uC0C9 \uCD08\uAE30\uD654",
29220
+ label: t.resetSearch,
28229
29221
  labelClassName: "text-grey-80",
28230
29222
  disabled: disabled || !canReset,
28231
29223
  onClick: reset,
@@ -28324,6 +29316,7 @@ function FilterChip({
28324
29316
  onOpen,
28325
29317
  onClear
28326
29318
  }) {
29319
+ const t = useLocale().messages.chipFilter;
28327
29320
  const border = disabled ? CHIPFILTER.chipDisabledBorder : warning ? CHIPFILTER.chipWarningBorder : applied ? active ? "var(--color-blue-strong)" : CHIPFILTER.chipAppliedBorder : active ? CHIPFILTER.chipActiveBorder : CHIPFILTER.chipDefaultBorder;
28328
29321
  const background = disabled ? CHIPFILTER.chipDisabledBg : applied ? CHIPFILTER.chipAppliedBg : CHIPFILTER.chipDefaultBg;
28329
29322
  const textColor = disabled ? CHIPFILTER.chipDisabledText : CHIPFILTER.chipDefaultText;
@@ -28415,7 +29408,7 @@ function FilterChip({
28415
29408
  {
28416
29409
  icon: "close",
28417
29410
  size: "xxs",
28418
- ariaLabel: `${field.label} \uD544\uD130 \uC9C0\uC6B0\uAE30`,
29411
+ ariaLabel: t.clearFilter(field.label),
28419
29412
  className: "shrink-0 self-center",
28420
29413
  onClick: onClear
28421
29414
  }
@@ -28433,6 +29426,8 @@ function EditorPanel({
28433
29426
  onDraftChange,
28434
29427
  onClose
28435
29428
  }) {
29429
+ const messages = useLocale().messages;
29430
+ const t = messages.chipFilter;
28436
29431
  const wrapsInPaddedTop = field.type === "datepicker-day" || field.type === "datepicker-range" || field.type === "datepicker-statistics";
28437
29432
  const isScrollableListField = isSelectType(field.type) || field.type === "keyword";
28438
29433
  const isMulti = isMultiSelectType(field.type);
@@ -28477,7 +29472,7 @@ function EditorPanel({
28477
29472
  STextLink,
28478
29473
  {
28479
29474
  size: "sm",
28480
- label: allSelected ? "\uC120\uD0DD \uD574\uC81C" : "\uC804\uCCB4 \uC120\uD0DD",
29475
+ label: allSelected ? t.selectNone : t.selectAll,
28481
29476
  labelClassName: "font-bold",
28482
29477
  disabled,
28483
29478
  onClick: toggleSelectAll,
@@ -28500,7 +29495,7 @@ function EditorPanel({
28500
29495
  STextLink,
28501
29496
  {
28502
29497
  size: "sm",
28503
- label: "\uAC80\uC0C9",
29498
+ label: messages.common.search,
28504
29499
  labelClassName: "font-bold",
28505
29500
  onClick: onClose,
28506
29501
  style: { color: CHIPFILTER.chipAppliedValue }
@@ -28586,8 +29581,9 @@ function DatePresetEditor({
28586
29581
  disabled,
28587
29582
  onValueChange
28588
29583
  }) {
28589
- const presets = getFieldPresets(field);
28590
- const maxRange = getEffectiveMaxRange(field);
29584
+ const messages = useLocale().messages;
29585
+ const presets = getFieldPresets(field, messages);
29586
+ const maxRange = getEffectiveMaxRange(field, messages);
28591
29587
  const [selectedId, setSelectedId] = react.useState(() => matchPresetId(presets, value));
28592
29588
  const syncedInitialValueRef = react.useRef(!isEmptyValue(value));
28593
29589
  react.useEffect(() => {
@@ -28625,7 +29621,7 @@ function DatePresetEditor({
28625
29621
  {
28626
29622
  val: preset.value,
28627
29623
  value: selectedId,
28628
- label: getPresetLabel(preset, maxRange),
29624
+ label: getPresetLabel(preset, maxRange, messages),
28629
29625
  disabled,
28630
29626
  onValueChange: () => selectPreset(preset)
28631
29627
  },
@@ -28649,8 +29645,10 @@ function PeriodPresetEditor({
28649
29645
  disabled,
28650
29646
  onValueChange
28651
29647
  }) {
28652
- const presets = getFieldPresets(field);
28653
- const maxRange = getEffectiveMaxRange(field);
29648
+ const messages = useLocale().messages;
29649
+ const t = messages.chipFilter;
29650
+ const presets = getFieldPresets(field, messages);
29651
+ const maxRange = getEffectiveMaxRange(field, messages);
28654
29652
  const firstUnit = presets.find((preset) => !preset.custom)?.value ?? "day";
28655
29653
  const [selectedId, setSelectedId] = react.useState(() => matchPresetId(presets, value) ?? firstUnit);
28656
29654
  const periodValue = isPeriodValue(value) ? value : createPeriodValue(selectedId ?? firstUnit, maxRange);
@@ -28703,10 +29701,10 @@ function PeriodPresetEditor({
28703
29701
  onValueChange: updateInputValue,
28704
29702
  disabled,
28705
29703
  options: [
28706
- { value: 1, label: "1\uBD84\uAE30" },
28707
- { value: 2, label: "2\uBD84\uAE30" },
28708
- { value: 3, label: "3\uBD84\uAE30" },
28709
- { value: 4, label: "4\uBD84\uAE30" }
29704
+ { value: 1, label: t.quarter(1) },
29705
+ { value: 2, label: t.quarter(2) },
29706
+ { value: 3, label: t.quarter(3) },
29707
+ { value: 4, label: t.quarter(4) }
28710
29708
  ]
28711
29709
  }
28712
29710
  );
@@ -28719,8 +29717,8 @@ function PeriodPresetEditor({
28719
29717
  onValueChange: updateInputValue,
28720
29718
  disabled,
28721
29719
  options: [
28722
- { value: "first", label: "\uC0C1\uBC18\uAE30" },
28723
- { value: "second", label: "\uD558\uBC18\uAE30" }
29720
+ { value: "first", label: t.firstHalf },
29721
+ { value: "second", label: t.secondHalf }
28724
29722
  ]
28725
29723
  }
28726
29724
  );
@@ -28757,7 +29755,7 @@ function PeriodPresetEditor({
28757
29755
  {
28758
29756
  val: preset.value,
28759
29757
  value: selectedId,
28760
- label: getPresetLabel(preset, maxRange),
29758
+ label: getPresetLabel(preset, maxRange, messages),
28761
29759
  disabled,
28762
29760
  onValueChange: () => selectPreset(preset)
28763
29761
  },
@@ -28775,6 +29773,8 @@ function InlineDatePresetFilter({
28775
29773
  onValueChange,
28776
29774
  onClear
28777
29775
  }) {
29776
+ const messages = useLocale().messages;
29777
+ const t = messages.chipFilter;
28778
29778
  const presets = (field.presets ?? []).filter((preset) => !preset.custom);
28779
29779
  const [selectedId, setSelectedId] = react.useState(() => matchPresetId(presets, value));
28780
29780
  const syncedInitialValueRef = react.useRef(!isEmptyValue(value));
@@ -28807,7 +29807,7 @@ function InlineDatePresetFilter({
28807
29807
  field.label,
28808
29808
  ":"
28809
29809
  ] }),
28810
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "typo-body-sm-bold", style: { color: badgeValueColor }, children: displayValue(field, value) })
29810
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "typo-body-sm-bold", style: { color: badgeValueColor }, children: displayValue(field, value, messages) })
28811
29811
  ] });
28812
29812
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex shrink-0 items-center gap-[8px]", children: [
28813
29813
  /* @__PURE__ */ jsxRuntime.jsx(
@@ -28877,7 +29877,7 @@ function InlineDatePresetFilter({
28877
29877
  {
28878
29878
  icon: "close",
28879
29879
  size: "xxs",
28880
- ariaLabel: `${field.label} \uD544\uD130 \uC9C0\uC6B0\uAE30`,
29880
+ ariaLabel: t.clearFilter(field.label),
28881
29881
  className: "shrink-0 self-center",
28882
29882
  onClick: onClear
28883
29883
  }
@@ -28887,14 +29887,14 @@ function InlineDatePresetFilter({
28887
29887
  )
28888
29888
  ] });
28889
29889
  }
28890
- var MATCH_MODE_OPTIONS = [
28891
- { value: "contains", label: "\uD3EC\uD568" },
28892
- { value: "exact", label: "\uC77C\uCE58" }
29890
+ var matchModeOptions = (t) => [
29891
+ { value: "contains", label: t.keywordContains },
29892
+ { value: "exact", label: t.keywordExact }
28893
29893
  ];
28894
- var EXCLUDE_MATCH_MODE_OPTION = {
29894
+ var excludeMatchModeOption = (t) => ({
28895
29895
  value: "excludes",
28896
- label: "\uBBF8\uD3EC\uD568"
28897
- };
29896
+ label: t.keywordExcludes
29897
+ });
28898
29898
  function KeywordEditor({
28899
29899
  field,
28900
29900
  value,
@@ -28903,6 +29903,7 @@ function KeywordEditor({
28903
29903
  onValueCommit,
28904
29904
  onDraftChange
28905
29905
  }) {
29906
+ const t = useLocale().messages.chipFilter;
28906
29907
  const entries4 = keywordEntries(value);
28907
29908
  const [draftText, setDraftText] = react.useState("");
28908
29909
  const [mode, setMode] = react.useState(
@@ -28975,7 +29976,7 @@ function KeywordEditor({
28975
29976
  {
28976
29977
  className: "shrink-0 whitespace-nowrap typo-body-sm-medium",
28977
29978
  style: { color: CHIPFILTER.listboxLabel },
28978
- children: "\uAC80\uC0C9 \uC870\uAC74 :"
29979
+ children: t.keywordCondition
28979
29980
  }
28980
29981
  ),
28981
29982
  /* @__PURE__ */ jsxRuntime.jsx(
@@ -28983,7 +29984,7 @@ function KeywordEditor({
28983
29984
  {
28984
29985
  size: "xs",
28985
29986
  style: { width: 150 },
28986
- options: field.excludeMode ? [...MATCH_MODE_OPTIONS, EXCLUDE_MATCH_MODE_OPTION] : MATCH_MODE_OPTIONS,
29987
+ options: field.excludeMode ? [...matchModeOptions(t), excludeMatchModeOption(t)] : matchModeOptions(t),
28987
29988
  value: mode,
28988
29989
  disabled,
28989
29990
  onValueChange: (next) => changeMode(next)
@@ -28998,7 +29999,7 @@ function KeywordEditor({
28998
29999
  ref: inputRef,
28999
30000
  value: draftText,
29000
30001
  disabled,
29001
- placeholder: field.placeholder ?? (field.input === "csv" ? "\uB2E4\uC911 \uD0A4\uC6CC\uB4DC\uB294 \uCF64\uB9C8(,)\uB85C \uAD6C\uBD84" : "\uC785\uB825 \uD6C4 Enter\uB85C \uCD94\uAC00"),
30002
+ placeholder: field.placeholder ?? (field.input === "csv" ? t.keywordHintCsv : t.keywordHintEnter),
29002
30003
  onChange: (event) => changeDraft(event.target.value),
29003
30004
  onPaste,
29004
30005
  onKeyDown,
@@ -29030,6 +30031,7 @@ function KeywordEntryRow({
29030
30031
  disabled,
29031
30032
  onRemove
29032
30033
  }) {
30034
+ const t = useLocale().messages.chipFilter;
29033
30035
  return /* @__PURE__ */ jsxRuntime.jsxs(
29034
30036
  "div",
29035
30037
  {
@@ -29048,7 +30050,7 @@ function KeywordEntryRow({
29048
30050
  {
29049
30051
  icon: "close",
29050
30052
  size: "xxs",
29051
- ariaLabel: `${label} \uC0AD\uC81C`,
30053
+ ariaLabel: t.removeItem(label),
29052
30054
  className: "invisible shrink-0 group-hover:visible",
29053
30055
  onClick: onRemove
29054
30056
  }
@@ -29067,6 +30069,7 @@ function OptionList({
29067
30069
  disabled,
29068
30070
  onValueChange
29069
30071
  }) {
30072
+ const messages = useLocale().messages;
29070
30073
  const selected = multiple ? toArrayValue(value) : [];
29071
30074
  const singleValue = !multiple && (typeof value === "string" || typeof value === "number") ? value : null;
29072
30075
  const [search, setSearch] = react.useState("");
@@ -29098,7 +30101,7 @@ function OptionList({
29098
30101
  allSelected ? selected.filter((v) => !leafValues.includes(v)) : [...selected, ...leafValues.filter((v) => !selected.includes(v))]
29099
30102
  );
29100
30103
  };
29101
- if (flat.length === 0) return /* @__PURE__ */ jsxRuntime.jsx(EmptyItem, { children: "\uD45C\uC2DC\uD560 \uD56D\uBAA9\uC774 \uC5C6\uC2B5\uB2C8\uB2E4." });
30104
+ if (flat.length === 0) return /* @__PURE__ */ jsxRuntime.jsx(EmptyItem, { children: messages.select.empty });
29102
30105
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex min-h-0 flex-1 flex-col", children: [
29103
30106
  showSearch && /* @__PURE__ */ jsxRuntime.jsx(
29104
30107
  "div",
@@ -29113,7 +30116,7 @@ function OptionList({
29113
30116
  value: search,
29114
30117
  onValueChange: setSearch,
29115
30118
  disabled,
29116
- placeholder: "\uAC80\uC0C9",
30119
+ placeholder: messages.common.search,
29117
30120
  clearable: true,
29118
30121
  width: "100%"
29119
30122
  }
@@ -29131,7 +30134,7 @@ function OptionList({
29131
30134
  "pb-[var(--cmp-chipFilter-listbox-list-paddingY)]"
29132
30135
  ),
29133
30136
  children: [
29134
- showSearch && filteredOptions.length === 0 && /* @__PURE__ */ jsxRuntime.jsx(EmptyItem, { children: "\uAC80\uC0C9 \uACB0\uACFC\uAC00 \uC5C6\uC2B5\uB2C8\uB2E4." }),
30137
+ showSearch && filteredOptions.length === 0 && /* @__PURE__ */ jsxRuntime.jsx(EmptyItem, { children: messages.chipFilter.noSearchResults }),
29135
30138
  filteredOptions.map((option, index) => {
29136
30139
  const rowKey = `${option.value}-${index}`;
29137
30140
  if (option.isGroup) {
@@ -29417,7 +30420,9 @@ var SChipInput = /* @__PURE__ */ react.forwardRef(function SChipInput2({
29417
30420
  className,
29418
30421
  style
29419
30422
  }, ref) {
29420
- const placeholder = placeholderProp ?? (separators?.includes(",") ? "\uD0DC\uADF8 \uC785\uB825 (Enter\xB7\uCF64\uB9C8\uB85C \uB4F1\uB85D)" : "\uD0DC\uADF8 \uC785\uB825 (Enter\uB85C \uB4F1\uB85D)");
30423
+ const runRules2 = useRunRules();
30424
+ const { input: ti, chipInput: t, select: selectT } = useLocale().messages;
30425
+ const placeholder = placeholderProp ?? (separators?.includes(",") ? t.placeholderWithComma : t.placeholder);
29421
30426
  const autoId = react.useId();
29422
30427
  const controlId = `${autoId}-input`;
29423
30428
  const resolvedName = name ?? autoId;
@@ -29447,19 +30452,18 @@ var SChipInput = /* @__PURE__ */ react.forwardRef(function SChipInput2({
29447
30452
  const duplicateMessage = react.useMemo(() => {
29448
30453
  const seen = /* @__PURE__ */ new Set();
29449
30454
  for (const v of values) {
29450
- if (seen.has(v))
29451
- return duplicateLabel ? `\uC774\uBBF8 \uC785\uB825\uB41C ${duplicateLabel}\uC785\uB2C8\uB2E4.` : "\uC911\uBCF5\uB41C \uAC12\uC774 \uC874\uC7AC\uD569\uB2C8\uB2E4.";
30455
+ if (seen.has(v)) return duplicateLabel ? t.duplicateNamed(duplicateLabel) : t.duplicate;
29452
30456
  seen.add(v);
29453
30457
  }
29454
30458
  return "";
29455
- }, [values, duplicateLabel]);
29456
- const ruleMessage = react.useMemo(() => runRules(values, rules), [values, rules]);
30459
+ }, [values, duplicateLabel, t]);
30460
+ const ruleMessage = react.useMemo(() => runRules2(values, rules), [runRules2, values, rules]);
29457
30461
  const resolvedErrorMessage = duplicateMessage || ruleMessage || errorMessage;
29458
30462
  const resolvedError = error || duplicateMessage !== "" || ruleMessage !== "";
29459
30463
  const resolvedStatus = status ?? (resolvedError ? "error" : void 0);
29460
30464
  useFormField({
29461
30465
  name,
29462
- validate: () => runRules(values, rules) === "" && duplicateMessage === "",
30466
+ validate: () => runRules2(values, rules) === "" && duplicateMessage === "",
29463
30467
  resetValidation: () => {
29464
30468
  }
29465
30469
  });
@@ -29759,18 +30763,14 @@ var SChipInput = /* @__PURE__ */ react.forwardRef(function SChipInput2({
29759
30763
  style: { width: 1, height: 12, backgroundColor: "var(--color-divider-default)" }
29760
30764
  }
29761
30765
  ),
29762
- showMaxCount && /* @__PURE__ */ jsxRuntime.jsxs(
30766
+ showMaxCount && /* @__PURE__ */ jsxRuntime.jsx(
29763
30767
  "span",
29764
30768
  {
29765
30769
  className: cn(
29766
30770
  "s-chip-input__max-count text-12",
29767
30771
  isMax ? "text-(--sys-color-fg-warning)" : "text-(--cmp-chipInput-text-placeholder)"
29768
30772
  ),
29769
- children: [
29770
- "\uCD5C\uB300 ",
29771
- maxCount,
29772
- "\uAC1C"
29773
- ]
30773
+ children: t.maxCount(maxCount)
29774
30774
  }
29775
30775
  ),
29776
30776
  showResetLink && /* @__PURE__ */ jsxRuntime.jsx(
@@ -29779,7 +30779,7 @@ var SChipInput = /* @__PURE__ */ react.forwardRef(function SChipInput2({
29779
30779
  className: "s-chip-input__reset",
29780
30780
  icon: "reset",
29781
30781
  iconColor: "var(--color-grey-65)",
29782
- label: "\uC785\uB825 \uCD08\uAE30\uD654",
30782
+ label: ti.clearInput,
29783
30783
  underline: true,
29784
30784
  disabled,
29785
30785
  onClick: reset,
@@ -29810,7 +30810,7 @@ var SChipInput = /* @__PURE__ */ react.forwardRef(function SChipInput2({
29810
30810
  className: "s-chip-input__suggestions flex w-full flex-col outline-none",
29811
30811
  onMouseDown: (e) => e.preventDefault(),
29812
30812
  children: [
29813
- loading2 && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "s-chip-input__suggestions-empty p-sd-12 text-center text-12 leading-sd-20 text-(--color-grey-65)", children: "\uBD88\uB7EC\uC624\uB294 \uC911..." }),
30813
+ loading2 && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "s-chip-input__suggestions-empty p-sd-12 text-center text-12 leading-sd-20 text-(--color-grey-65)", children: selectT.loading }),
29814
30814
  !effectiveAutocomplete ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex flex-wrap gap-sd-8 px-sd-12 py-sd-6", children: items.map((item4, i) => {
29815
30815
  const selected = values.includes(item4);
29816
30816
  const active = i === activeIndex && !selected;
@@ -29897,7 +30897,7 @@ var SBarcodeInput = /* @__PURE__ */ react.forwardRef(
29897
30897
  clearable = false,
29898
30898
  autoFocus,
29899
30899
  name,
29900
- placeholder = "\uC785\uB825\uD574 \uC8FC\uC138\uC694.",
30900
+ placeholder: placeholderProp,
29901
30901
  disabled = false,
29902
30902
  readOnly = false,
29903
30903
  rules,
@@ -29925,6 +30925,9 @@ var SBarcodeInput = /* @__PURE__ */ react.forwardRef(
29925
30925
  className,
29926
30926
  style
29927
30927
  }, ref) {
30928
+ const runRules2 = useRunRules();
30929
+ const { common: tc, input: ti } = useLocale().messages;
30930
+ const placeholder = placeholderProp ?? ti.placeholder;
29928
30931
  const f = FONT3[size];
29929
30932
  const [ruleError, setRuleError] = react.useState("");
29930
30933
  const controlId = useFieldControlId();
@@ -29932,7 +30935,7 @@ var SBarcodeInput = /* @__PURE__ */ react.forwardRef(
29932
30935
  useFormField({
29933
30936
  name,
29934
30937
  validate: () => {
29935
- const msg = runRules(value, rules);
30938
+ const msg = runRules2(value, rules);
29936
30939
  setRuleError(msg);
29937
30940
  return msg === "";
29938
30941
  },
@@ -29998,11 +31001,11 @@ var SBarcodeInput = /* @__PURE__ */ react.forwardRef(
29998
31001
  autoFocus,
29999
31002
  onChange: (e) => {
30000
31003
  onValueChange?.(e.target.value);
30001
- if (ruleError !== "") setRuleError(runRules(e.target.value, rules));
31004
+ if (ruleError !== "") setRuleError(runRules2(e.target.value, rules));
30002
31005
  },
30003
31006
  onFocus: () => onFocus?.(),
30004
31007
  onBlur: (e) => {
30005
- if (rules && rules.length > 0) setRuleError(runRules(e.target.value, rules));
31008
+ if (rules && rules.length > 0) setRuleError(runRules2(e.target.value, rules));
30006
31009
  onBlur?.();
30007
31010
  },
30008
31011
  className: cn(
@@ -30026,10 +31029,10 @@ var SBarcodeInput = /* @__PURE__ */ react.forwardRef(
30026
31029
  {
30027
31030
  icon: "close",
30028
31031
  size: "xxs",
30029
- ariaLabel: "\uC9C0\uC6B0\uAE30",
31032
+ ariaLabel: tc.clear,
30030
31033
  onClick: () => {
30031
31034
  onValueChange?.("");
30032
- setRuleError(runRules("", rules));
31035
+ setRuleError(runRules2("", rules));
30033
31036
  }
30034
31037
  }
30035
31038
  )
@@ -30090,11 +31093,11 @@ function parseTimeValue(value) {
30090
31093
  function formatTimeValue(hour, minute) {
30091
31094
  return `${padTimePart(clampTimePart(hour, 0, 23))}:${padTimePart(clampTimePart(minute, 0, 59))}`;
30092
31095
  }
30093
- function formatTimeDisplay(value, type) {
31096
+ function formatTimeDisplay(value, type, t) {
30094
31097
  if (value == null || value === "") return "";
30095
31098
  const { hour, minute } = parseTimeValue(value);
30096
31099
  if (type === "default") return formatTimeValue(hour, minute);
30097
- const meridiem = hour >= 12 ? "\uC624\uD6C4" : "\uC624\uC804";
31100
+ const meridiem = hour >= 12 ? t.pm : t.am;
30098
31101
  const displayHour = hour % 12 === 0 ? 12 : hour % 12;
30099
31102
  return `${meridiem} ${padTimePart(displayHour)}:${padTimePart(minute)}`;
30100
31103
  }
@@ -30177,6 +31180,7 @@ function TimeListbox({
30177
31180
  labelPrefix,
30178
31181
  elevated = true
30179
31182
  }) {
31183
+ const t = useLocale().messages.date;
30180
31184
  const toState = (v) => v ? parseTimeValue(v) : null;
30181
31185
  const [time, setTime] = react.useState(() => toState(value));
30182
31186
  react.useEffect(() => {
@@ -30200,13 +31204,13 @@ function TimeListbox({
30200
31204
  const hour = time?.hour;
30201
31205
  const minute = time?.minute ?? 0;
30202
31206
  const meridiem = hour === void 0 ? void 0 : hour >= 12 ? "PM" : "AM";
30203
- const prefix = labelPrefix ? `${labelPrefix} ` : "";
31207
+ const prefix = labelPrefix ?? "";
30204
31208
  const meridiemItems = ["AM", "PM"].map((item4) => {
30205
31209
  const base = item4 === "AM" ? 0 : 12;
30206
31210
  const range = HOURS_24.slice(base, base + 12);
30207
31211
  return {
30208
31212
  key: item4,
30209
- label: item4 === "AM" ? "\uC624\uC804" : "\uC624\uD6C4",
31213
+ label: item4 === "AM" ? t.am : t.pm,
30210
31214
  selected: meridiem === item4,
30211
31215
  disabled: range.every(hourBlocked),
30212
31216
  onSelect: () => {
@@ -30220,14 +31224,14 @@ function TimeListbox({
30220
31224
  const h = display % 12 + (meridiem === "PM" ? 12 : 0);
30221
31225
  return {
30222
31226
  key: String(display),
30223
- label: `${padTimePart(display)}\uC2DC`,
31227
+ label: t.hourItem(padTimePart(display)),
30224
31228
  selected: hour === h,
30225
31229
  disabled: hourBlocked(h),
30226
31230
  onSelect: () => commit([h], { hour: h, minute }, "hour")
30227
31231
  };
30228
31232
  }) : HOURS_24.map((h) => ({
30229
31233
  key: String(h),
30230
- label: `${padTimePart(h)}\uC2DC`,
31234
+ label: t.hourItem(padTimePart(h)),
30231
31235
  selected: hour === h,
30232
31236
  disabled: hourBlocked(h),
30233
31237
  onSelect: () => commit([h], { hour: h, minute }, "hour")
@@ -30235,7 +31239,7 @@ function TimeListbox({
30235
31239
  const minuteHour = hour ?? (meridiem === "PM" ? 12 : 0);
30236
31240
  const minuteItems = minutes.map((m) => ({
30237
31241
  key: String(m),
30238
- label: `${padTimePart(m)}\uBD84`,
31242
+ label: t.minuteItem(padTimePart(m)),
30239
31243
  selected: time != null && minute === m,
30240
31244
  disabled: blocked(minuteHour, m),
30241
31245
  onSelect: () => commit([minuteHour], { hour: minuteHour, minute: m }, "minute")
@@ -30257,12 +31261,12 @@ function TimeListbox({
30257
31261
  style: { height: MODE_LIST_HEIGHT },
30258
31262
  children: [
30259
31263
  showMeridiem && /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
30260
- /* @__PURE__ */ jsxRuntime.jsx(ListColumn, { ariaLabel: `${prefix}\uC624\uC804/\uC624\uD6C4`, items: meridiemItems }),
31264
+ /* @__PURE__ */ jsxRuntime.jsx(ListColumn, { ariaLabel: t.meridiemAria(prefix), items: meridiemItems }),
30261
31265
  divider
30262
31266
  ] }),
30263
- /* @__PURE__ */ jsxRuntime.jsx(ListColumn, { ariaLabel: `${prefix}\uC2DC`, items: hourItems }),
31267
+ /* @__PURE__ */ jsxRuntime.jsx(ListColumn, { ariaLabel: t.hourAria(prefix), items: hourItems }),
30264
31268
  divider,
30265
- /* @__PURE__ */ jsxRuntime.jsx(ListColumn, { ariaLabel: `${prefix}\uBD84`, items: minuteItems })
31269
+ /* @__PURE__ */ jsxRuntime.jsx(ListColumn, { ariaLabel: t.minuteAria(prefix), items: minuteItems })
30266
31270
  ]
30267
31271
  }
30268
31272
  );
@@ -30299,6 +31303,8 @@ function STimePicker({
30299
31303
  className,
30300
31304
  style
30301
31305
  }) {
31306
+ const runRules2 = useRunRules();
31307
+ const t = useLocale().messages.date;
30302
31308
  const portalContainer = usePortalContainer();
30303
31309
  const [open, setOpen] = react.useState(false);
30304
31310
  const triggerId = useFieldControlId();
@@ -30308,12 +31314,16 @@ function STimePicker({
30308
31314
  const dims = TIMEPICKER_SIZE_CONFIG[size] ?? TIMEPICKER_SIZE_CONFIG.sm;
30309
31315
  const normalized = value ? formatTimeValue(parseTimeValue(value).hour, parseTimeValue(value).minute) : null;
30310
31316
  const effectiveShowMeridiem = showMeridiem ?? type === "midday";
30311
- const displayText = formatTimeDisplay(normalized, effectiveShowMeridiem ? "midday" : "default");
31317
+ const displayText = formatTimeDisplay(
31318
+ normalized,
31319
+ effectiveShowMeridiem ? "midday" : "default",
31320
+ t
31321
+ );
30312
31322
  const hasValue = normalized != null && normalized !== "";
30313
31323
  useFormField({
30314
31324
  name,
30315
31325
  validate: () => {
30316
- const msg = runRules(value, rules);
31326
+ const msg = runRules2(value, rules);
30317
31327
  setRuleError(msg);
30318
31328
  return msg === "";
30319
31329
  },
@@ -30325,11 +31335,11 @@ function STimePicker({
30325
31335
  if (disabled) return;
30326
31336
  setOpen(next);
30327
31337
  onOpenChange?.(next);
30328
- if (!next && rules && rules.length > 0) setRuleError(runRules(value, rules));
31338
+ if (!next && rules && rules.length > 0) setRuleError(runRules2(value, rules));
30329
31339
  };
30330
31340
  const commitValue = (next) => {
30331
31341
  onValueChange?.(next);
30332
- if (rules && rules.length > 0) setRuleError(runRules(next, rules));
31342
+ if (rules && rules.length > 0) setRuleError(runRules2(next, rules));
30333
31343
  };
30334
31344
  return /* @__PURE__ */ jsxRuntime.jsx(
30335
31345
  SField,
@@ -30408,7 +31418,7 @@ function STimePicker({
30408
31418
  {
30409
31419
  icon: "close",
30410
31420
  size: "xs",
30411
- ariaLabel: "\uC2DC\uAC04 \uC9C0\uC6B0\uAE30",
31421
+ ariaLabel: t.clearTime,
30412
31422
  onClick: (event) => {
30413
31423
  event.stopPropagation();
30414
31424
  commitValue(null);
@@ -30463,9 +31473,9 @@ function normalizeTimeRangeValue(value, rangeOrder = "strict") {
30463
31473
  }
30464
31474
  return normalized;
30465
31475
  }
30466
- function formatTimeRangeDisplay(value, type) {
31476
+ function formatTimeRangeDisplay(value, type, t) {
30467
31477
  if (value == null || value[0] === "" || value[1] === "") return "";
30468
- return `${formatTimeDisplay(value[0], type)} ~ ${formatTimeDisplay(value[1], type)}`;
31478
+ return `${formatTimeDisplay(value[0], type, t)} ~ ${formatTimeDisplay(value[1], type, t)}`;
30469
31479
  }
30470
31480
  var MIDDAY_FIELD_MIN_WIDTH = {
30471
31481
  sm: 178,
@@ -30486,6 +31496,7 @@ function RangeTimeSelector({
30486
31496
  rangeOrder,
30487
31497
  onChange
30488
31498
  }) {
31499
+ const t = useLocale().messages.date;
30489
31500
  const range = value ?? ["00:00", "23:59"];
30490
31501
  const strict = rangeOrder !== "allow-cross-day";
30491
31502
  const change = (side, time) => {
@@ -30508,7 +31519,7 @@ function RangeTimeSelector({
30508
31519
  value: side === "start" ? range[0] : range[1],
30509
31520
  showMeridiem,
30510
31521
  minuteStep,
30511
- labelPrefix: side === "start" ? "\uC2DC\uC791" : "\uC885\uB8CC",
31522
+ labelPrefix: side === "start" ? t.start : t.end,
30512
31523
  elevated: false,
30513
31524
  isDisabled: strict && side === "end" ? (minutes) => minutes < toMinutes(range[0]) : void 0,
30514
31525
  onChange: (time) => change(side, time)
@@ -30529,9 +31540,9 @@ function RangeTimeSelector({
30529
31540
  boxShadow: "var(--shadow-spread-sm), var(--shadow-spread-md)"
30530
31541
  },
30531
31542
  children: [
30532
- renderPanel("start", "\uC2DC\uC791 \uC2DC\uAC04"),
31543
+ renderPanel("start", t.startTime),
30533
31544
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "self-stretch w-px bg-[var(--sys-color-divider-default)]" }),
30534
- renderPanel("end", "\uC885\uB8CC \uC2DC\uAC04")
31545
+ renderPanel("end", t.endTime)
30535
31546
  ]
30536
31547
  }
30537
31548
  );
@@ -30569,6 +31580,8 @@ function STimeRangePicker({
30569
31580
  className,
30570
31581
  style
30571
31582
  }) {
31583
+ const runRules2 = useRunRules();
31584
+ const t = useLocale().messages.date;
30572
31585
  const portalContainer = usePortalContainer();
30573
31586
  const [open, setOpen] = react.useState(false);
30574
31587
  const triggerId = useFieldControlId();
@@ -30580,13 +31593,14 @@ function STimeRangePicker({
30580
31593
  const effectiveShowMeridiem = showMeridiem ?? type === "midday";
30581
31594
  const displayText = formatTimeRangeDisplay(
30582
31595
  normalized,
30583
- effectiveShowMeridiem ? "midday" : "default"
31596
+ effectiveShowMeridiem ? "midday" : "default",
31597
+ t
30584
31598
  );
30585
31599
  const hasValue = normalized != null && normalized[0] !== "" && normalized[1] !== "";
30586
31600
  useFormField({
30587
31601
  name,
30588
31602
  validate: () => {
30589
- const msg = runRules(value, rules);
31603
+ const msg = runRules2(value, rules);
30590
31604
  setRuleError(msg);
30591
31605
  return msg === "";
30592
31606
  },
@@ -30598,11 +31612,11 @@ function STimeRangePicker({
30598
31612
  if (disabled) return;
30599
31613
  setOpen(next);
30600
31614
  onOpenChange?.(next);
30601
- if (!next && rules && rules.length > 0) setRuleError(runRules(value, rules));
31615
+ if (!next && rules && rules.length > 0) setRuleError(runRules2(value, rules));
30602
31616
  };
30603
31617
  const commitValue = (next) => {
30604
31618
  onValueChange?.(next);
30605
- if (rules && rules.length > 0) setRuleError(runRules(next, rules));
31619
+ if (rules && rules.length > 0) setRuleError(runRules2(next, rules));
30606
31620
  };
30607
31621
  return /* @__PURE__ */ jsxRuntime.jsx(
30608
31622
  SField,
@@ -30681,7 +31695,7 @@ function STimeRangePicker({
30681
31695
  {
30682
31696
  icon: "close",
30683
31697
  size: "xs",
30684
- ariaLabel: "\uC2DC\uAC04 \uBC94\uC704 \uC9C0\uC6B0\uAE30",
31698
+ ariaLabel: t.clearTimeRange,
30685
31699
  onClick: (event) => {
30686
31700
  event.stopPropagation();
30687
31701
  commitValue(null);