@underverse-ui/underverse 1.0.202 → 1.0.204

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 (39) hide show
  1. package/README.md +8 -2
  2. package/api-reference.json +1 -1
  3. package/dist/EmojiPicker-UN6N7YVB.js +14 -0
  4. package/dist/EmojiPicker-UN6N7YVB.js.map +1 -0
  5. package/dist/chunk-4TYW5K4J.js +769 -0
  6. package/dist/chunk-4TYW5K4J.js.map +1 -0
  7. package/dist/chunk-CC3QO2YM.js +14506 -0
  8. package/dist/chunk-CC3QO2YM.js.map +1 -0
  9. package/dist/chunk-CKKLFVOY.js +206 -0
  10. package/dist/chunk-CKKLFVOY.js.map +1 -0
  11. package/dist/chunk-GSBRTFP2.js +2464 -0
  12. package/dist/chunk-GSBRTFP2.js.map +1 -0
  13. package/dist/chunk-KFTYWTJR.js +4481 -0
  14. package/dist/chunk-KFTYWTJR.js.map +1 -0
  15. package/dist/chunk-NSBPE2FW.js +17 -0
  16. package/dist/chunk-NSBPE2FW.js.map +1 -0
  17. package/dist/chunk-QVQTWZ24.js +199 -0
  18. package/dist/chunk-QVQTWZ24.js.map +1 -0
  19. package/dist/chunk-ZUAIBY2Z.js +74 -0
  20. package/dist/chunk-ZUAIBY2Z.js.map +1 -0
  21. package/dist/emojis-I5AMZ3EE.js +8 -0
  22. package/dist/emojis-I5AMZ3EE.js.map +1 -0
  23. package/dist/index.cjs +36680 -35147
  24. package/dist/index.cjs.map +1 -1
  25. package/dist/index.d.cts +19 -134
  26. package/dist/index.d.ts +19 -134
  27. package/dist/index.js +2801 -25223
  28. package/dist/index.js.map +1 -1
  29. package/dist/lowlight-runtime-Y43Y7YTW.js +11 -0
  30. package/dist/lowlight-runtime-Y43Y7YTW.js.map +1 -0
  31. package/dist/menu-bar-6U5S4PS7.js +947 -0
  32. package/dist/menu-bar-6U5S4PS7.js.map +1 -0
  33. package/dist/ueditor.cjs +23503 -0
  34. package/dist/ueditor.cjs.map +1 -0
  35. package/dist/ueditor.d.cts +136 -0
  36. package/dist/ueditor.d.ts +136 -0
  37. package/dist/ueditor.js +20 -0
  38. package/dist/ueditor.js.map +1 -0
  39. package/package.json +54 -46
@@ -0,0 +1,2464 @@
1
+ // src/utils/cn.ts
2
+ import { clsx } from "clsx";
3
+ import { twMerge } from "tailwind-merge";
4
+ function cn(...inputs) {
5
+ return twMerge(clsx(inputs));
6
+ }
7
+
8
+ // src/contexts/GlobalI18nContext.tsx
9
+ import * as React from "react";
10
+ import { Fragment, jsx } from "react/jsx-runtime";
11
+ var GlobalI18nContext = React.createContext(null);
12
+ function useGlobalI18n() {
13
+ return React.useContext(GlobalI18nContext) ?? {};
14
+ }
15
+ function GlobalI18nProvider({ children, i18n }) {
16
+ if (!i18n) return /* @__PURE__ */ jsx(Fragment, { children });
17
+ return /* @__PURE__ */ jsx(GlobalI18nContext.Provider, { value: i18n, children });
18
+ }
19
+
20
+ // locales/en.json
21
+ var en_default = {
22
+ Common: {
23
+ close: "Close",
24
+ closeAlert: "Close alert",
25
+ notifications: "Notifications",
26
+ newNotification: "New",
27
+ readStatus: "Read",
28
+ openLink: "Open link",
29
+ theme: "Theme",
30
+ lightTheme: "Light",
31
+ darkTheme: "Dark",
32
+ systemTheme: "System",
33
+ density: "Density",
34
+ compact: "Compact",
35
+ normal: "Normal",
36
+ comfortable: "Comfortable",
37
+ columns: "Columns",
38
+ loading: "Loading",
39
+ noData: "No data",
40
+ clearFilter: "Clear filter",
41
+ selectAll: "Select all",
42
+ default: "Default",
43
+ other: "Other",
44
+ headerAlign: "Header alignment",
45
+ alignLeft: "Align left",
46
+ alignCenter: "Align center",
47
+ alignRight: "Align right"
48
+ },
49
+ ValidationInput: {
50
+ required: "This field is required",
51
+ typeMismatch: "Invalid format",
52
+ pattern: "Invalid pattern",
53
+ tooShort: "Too short",
54
+ tooLong: "Too long",
55
+ rangeUnderflow: "Below minimum",
56
+ rangeOverflow: "Above maximum",
57
+ stepMismatch: "Step mismatch",
58
+ badInput: "Bad input",
59
+ invalid: "Invalid value"
60
+ },
61
+ Loading: {
62
+ loadingPage: "Loading page",
63
+ pleaseWait: "Please wait"
64
+ },
65
+ DatePicker: {
66
+ placeholder: "Select date",
67
+ today: "Today",
68
+ clear: "Clear",
69
+ lunarFormat: "Month {month} {day}, {year}",
70
+ lunarLeapFormat: "Month {month} {day}, {year} (Leap)",
71
+ lunarMonth: "Month {month}",
72
+ lunarLeap: "Leap"
73
+ },
74
+ DateTimePicker: {
75
+ time: "Time",
76
+ clear: "Clear",
77
+ done: "Done"
78
+ },
79
+ CalendarTimeline: {
80
+ today: "Today",
81
+ prev: "Previous",
82
+ next: "Next",
83
+ month: "Month",
84
+ week: "Week",
85
+ day: "Day",
86
+ sprint: "Sprint",
87
+ newEvent: "New event",
88
+ createEventTitle: "Create event",
89
+ create: "Create",
90
+ cancel: "Cancel",
91
+ resource: "Resource",
92
+ start: "Start",
93
+ end: "End",
94
+ resourcesHeader: "Resources",
95
+ expandGroup: "Expand group",
96
+ collapseGroup: "Collapse group",
97
+ more: "+{n} more",
98
+ sprints: "{n} sprints",
99
+ deleteConfirm: "Delete?"
100
+ },
101
+ Pagination: {
102
+ navigationLabel: "Pagination navigation",
103
+ showingResults: "Showing {startItem}\u2013{endItem} of {totalItems}",
104
+ firstPage: "First page",
105
+ previousPage: "Previous page",
106
+ previous: "Previous",
107
+ nextPage: "Next page",
108
+ next: "Next",
109
+ lastPage: "Last page",
110
+ pageNumber: "Page {page}",
111
+ itemsPerPage: "Items per page",
112
+ search: "Search",
113
+ noOptions: "No options"
114
+ },
115
+ OCR: {
116
+ imageUpload: {
117
+ dragDropText: "Drag & drop files here",
118
+ browseFiles: "Browse files",
119
+ supportedFormats: "Supported formats: images"
120
+ }
121
+ },
122
+ FileUpload: {
123
+ dragDropText: "Drag & drop files here",
124
+ browseFiles: "Browse files",
125
+ uploadFiles: "Upload files",
126
+ supportedFormats: "All file types supported",
127
+ uploadedFiles: "Uploaded files",
128
+ clearAll: "Clear all",
129
+ fileTooLarge: "exceeds size limit",
130
+ maxFilesReached: "Maximum file limit reached",
131
+ uploadSuccess: "uploaded successfully",
132
+ uploadFailed: "upload failed"
133
+ },
134
+ UEditor: {
135
+ placeholder: "Type '/' for commands, or just start writing...",
136
+ loading: "Loading editor...",
137
+ words: "words",
138
+ characters: "characters",
139
+ colors: {
140
+ default: "Default",
141
+ muted: "Muted",
142
+ primary: "Primary",
143
+ secondary: "Secondary",
144
+ success: "Success",
145
+ warning: "Warning",
146
+ destructive: "Destructive",
147
+ info: "Info",
148
+ accent: "Accent",
149
+ textColor: "Text Color",
150
+ highlight: "Highlight",
151
+ automatic: "Automatic",
152
+ moreColors: "More Colors...",
153
+ color: "Color",
154
+ done: "Done"
155
+ },
156
+ toolbar: {
157
+ bold: "Bold",
158
+ boldShortcut: "Bold (Ctrl+B)",
159
+ italic: "Italic",
160
+ italicShortcut: "Italic (Ctrl+I)",
161
+ underline: "Underline",
162
+ underlineShortcut: "Underline (Ctrl+U)",
163
+ strike: "Strikethrough",
164
+ code: "Inline Code",
165
+ subscript: "Subscript",
166
+ superscript: "Superscript",
167
+ link: "Link",
168
+ removeLink: "Remove Link",
169
+ image: "Insert Image",
170
+ table: "Insert Table",
171
+ alignment: "Alignment",
172
+ alignLeft: "Align Left",
173
+ alignCenter: "Align Center",
174
+ alignRight: "Align Right",
175
+ justify: "Justify",
176
+ decreaseIndent: "Decrease Indent",
177
+ increaseIndent: "Increase Indent",
178
+ bulletList: "Bullet List",
179
+ orderedList: "Numbered List",
180
+ taskList: "Task List",
181
+ quote: "Quote",
182
+ codeBlock: "Code Block",
183
+ undo: "Undo (Ctrl+Z)",
184
+ redo: "Redo (Ctrl+Y)",
185
+ textStyle: "Text Style",
186
+ fontFamily: "Font Family",
187
+ fontSize: "Font Size",
188
+ lineHeight: "Line Height",
189
+ fontDefault: "Default Font",
190
+ sizeDefault: "Default Size",
191
+ lineHeightDefault: "Default Leading",
192
+ letterSpacing: "Letter Spacing",
193
+ letterSpacingDefault: "Default Tracking",
194
+ fontSans: "Sans",
195
+ fontSerif: "Serif",
196
+ fontMono: "Mono",
197
+ normal: "Normal text",
198
+ heading1: "Heading 1",
199
+ heading2: "Heading 2",
200
+ heading3: "Heading 3",
201
+ emoji: "Insert Emoji",
202
+ imageLayoutBlock: "Image Block",
203
+ imageLayoutLeft: "Wrap Text Right",
204
+ imageLayoutRight: "Wrap Text Left",
205
+ imageWidthSm: "Image Width Small",
206
+ imageWidthMd: "Image Width Medium",
207
+ imageWidthLg: "Image Width Large",
208
+ imageResetSize: "Reset Image Size",
209
+ imageDelete: "Delete Image"
210
+ },
211
+ slashCommand: {
212
+ basicBlocks: "Basic Blocks",
213
+ text: "Text",
214
+ textDesc: "Plain text block",
215
+ heading1: "Heading 1",
216
+ heading1Desc: "Large section heading",
217
+ heading2: "Heading 2",
218
+ heading2Desc: "Medium section heading",
219
+ heading3: "Heading 3",
220
+ heading3Desc: "Small section heading",
221
+ bulletList: "Bullet List",
222
+ bulletListDesc: "Simple bulleted list",
223
+ orderedList: "Numbered List",
224
+ orderedListDesc: "Numbered list",
225
+ todoList: "To-do List",
226
+ todoListDesc: "Checkboxes for tasks",
227
+ quote: "Quote",
228
+ quoteDesc: "Capture a quote",
229
+ codeBlock: "Code Block",
230
+ codeBlockDesc: "Code with syntax highlighting",
231
+ divider: "Divider",
232
+ dividerDesc: "Visual divider",
233
+ table: "Table",
234
+ tableDesc: "Add a table",
235
+ noResults: "No matching blocks found",
236
+ callout: "Callout",
237
+ calloutDesc: "Highlight key info with a callout block",
238
+ bookmark: "Bookmark Card",
239
+ bookmarkDesc: "Embed a link as a bookmark card",
240
+ fileCard: "File Attachment",
241
+ fileCardDesc: "Upload a file card attachment",
242
+ formCheckbox: "Form Checkbox",
243
+ formCheckboxDesc: "Insert an interactive checkbox field",
244
+ roundCheckbox: "Round Checkbox",
245
+ roundCheckboxDesc: "Insert a circular interactive checkbox",
246
+ formRadio: "Form Radio Button",
247
+ formRadioDesc: "Insert an interactive radio button field"
248
+ },
249
+ floatingMenu: {
250
+ addBlock: "Add block"
251
+ },
252
+ linkInput: {
253
+ placeholder: "Paste or type a link...",
254
+ invalid: "Enter a valid link, such as https://example.com."
255
+ },
256
+ imageInput: {
257
+ urlTab: "URL",
258
+ uploadTab: "Upload",
259
+ urlLabel: "Image URL",
260
+ urlPlaceholder: "https://example.com/image.jpg",
261
+ uploadLabel: "Choose Image",
262
+ uploadPlaceholder: "Click to upload image",
263
+ uploading: "Uploading...",
264
+ uploadError: "Upload failed. Please try again.",
265
+ altLabel: "Alt text (optional)",
266
+ altPlaceholder: "Describe the image...",
267
+ addBtn: "Add Image",
268
+ cancelBtn: "Cancel",
269
+ addFromUrl: "Add from URL"
270
+ },
271
+ emojiPicker: {
272
+ searchPlaceholder: "Search emoji",
273
+ noResults: "No emoji found",
274
+ tryDifferentSearch: "Try a different keyword"
275
+ },
276
+ stickerPicker: {
277
+ searchPlaceholder: "Search stickers",
278
+ noResults: "No stickers found",
279
+ tryDifferentSearch: "Try a different keyword"
280
+ },
281
+ emojiSuggestion: {
282
+ title: "Emoji",
283
+ noResults: "No emoji found",
284
+ showingCount: "Showing first {shown} of {total} emojis"
285
+ },
286
+ formulaSuggestion: {
287
+ title: "Functions",
288
+ noResults: "No function found",
289
+ sum: "Add values in a range",
290
+ avg: "Average values in a range",
291
+ min: "Smallest value in a range",
292
+ max: "Largest value in a range",
293
+ count: "Count numeric cells in a range"
294
+ },
295
+ tableMenu: {
296
+ insert3x3: "Insert 3\xD73 Table",
297
+ insertTable: "Insert Table",
298
+ gridPreview: "Insert {rows}\xD7{cols} Table",
299
+ addColumnBefore: "Add Column Before",
300
+ addColumnAfter: "Add Column After",
301
+ addRowBefore: "Add Row Before",
302
+ addRowAfter: "Add Row After",
303
+ duplicateColumn: "Duplicate Column",
304
+ duplicateRow: "Duplicate Row",
305
+ clearColumnContents: "Clear Column Contents",
306
+ clearRowContents: "Clear Row Contents",
307
+ deleteColumn: "Delete Column",
308
+ deleteRow: "Delete Row",
309
+ deleteTable: "Delete Table",
310
+ toggleHeaderRow: "Toggle Header Row",
311
+ toggleHeaderColumn: "Toggle Header Column",
312
+ mergeCells: "Merge Cells",
313
+ splitCell: "Split Cell",
314
+ openControls: "Open Table Controls",
315
+ cellFormatting: "Cell Formatting",
316
+ quickAddColumnAfter: "Quick Add Column After",
317
+ quickAddRowAfter: "Quick Add Row After",
318
+ expandTable: "Expand Table",
319
+ dragRow: "Drag Row",
320
+ dragColumn: "Drag Column",
321
+ resizeBoth: "Resize Table",
322
+ resizeCtrlHint: "Drag freely. Hold Ctrl to lock to one axis; hold Ctrl+Shift to preserve proportions",
323
+ alignLeft: "Align Table Left",
324
+ alignCenter: "Align Table Center",
325
+ alignRight: "Align Table Right",
326
+ cellBackground: "Cell Background",
327
+ cellBorder: "Cell Border",
328
+ borderStyle: "Border Style",
329
+ borderWidth: "Border Width",
330
+ borderColor: "Border Color",
331
+ borderPosition: "Border placement",
332
+ borderMode: "Border mode",
333
+ borderDraw: "Draw borders",
334
+ borderErase: "Hide borders",
335
+ borderAll: "All borders",
336
+ borderOuter: "Outer borders",
337
+ borderInner: "Inner borders",
338
+ borderHorizontal: "Inner horizontal borders",
339
+ borderVertical: "Inner vertical borders",
340
+ borderTop: "Top border",
341
+ borderRight: "Right border",
342
+ borderBottom: "Bottom border",
343
+ borderLeft: "Left border",
344
+ clearBorder: "Clear Border",
345
+ formula: "Formula",
346
+ formulaBar: "Formula bar",
347
+ formulaError: "Formula error",
348
+ editFormula: "Edit formula",
349
+ clearCell: "Clear cell",
350
+ convertToValue: "Convert to value",
351
+ numberFormat: "Number Format",
352
+ formatText: "Text",
353
+ formatDate: "Date",
354
+ apply: "Apply",
355
+ clear: "Clear",
356
+ recalculate: "Recalculate",
357
+ done: "Done",
358
+ alignVertical: "Vertical Alignment",
359
+ alignVerticalTop: "Top Align",
360
+ alignVerticalMiddle: "Middle Align",
361
+ alignVerticalBottom: "Bottom Align",
362
+ textDirection: "Text Direction",
363
+ horizontalText: "Horizontal Text",
364
+ verticalText: "Vertical Text"
365
+ },
366
+ callout: {
367
+ selectEmoji: "Select Emoji",
368
+ backgroundColor: "Background Color"
369
+ },
370
+ radio: {
371
+ groupName: "Group Name",
372
+ editGroup: "Edit Group Name"
373
+ },
374
+ bookmark: {
375
+ clickToOpenNewTab: "Click to open this link in a new tab.",
376
+ clickToOpenLink: "Click to open link.",
377
+ noDescription: "No description available.",
378
+ failedToLoad: "Failed to load link preview. Click to open link.",
379
+ previewFailed: "Preview failed to load",
380
+ retryPreview: "Retry preview"
381
+ },
382
+ fileCard: {
383
+ unnamed: "Unnamed file",
384
+ uploading: "(Uploading...)",
385
+ uploadFailed: "Upload failed",
386
+ retryUpload: "Retry upload"
387
+ },
388
+ menubar: {
389
+ file: "File",
390
+ edit: "Edit",
391
+ view: "View",
392
+ insert: "Insert",
393
+ format: "Format",
394
+ tools: "Tools",
395
+ table: "Table",
396
+ save: "Save",
397
+ exportHtml: "Export HTML",
398
+ undo: "Undo",
399
+ undoShortcut: "Ctrl+Z",
400
+ redo: "Redo",
401
+ redoShortcut: "Ctrl+Y",
402
+ cut: "Cut",
403
+ cutShortcut: "Ctrl+X",
404
+ copy: "Copy",
405
+ copyShortcut: "Ctrl+C",
406
+ paste: "Paste",
407
+ pasteShortcut: "Ctrl+V",
408
+ pasteAsText: "Paste as plain text",
409
+ selectAll: "Select All",
410
+ selectAllShortcut: "Ctrl+A",
411
+ sourceCode: "Source code",
412
+ preview: "Preview",
413
+ fullscreen: "Fullscreen",
414
+ fullscreenShortcut: "Ctrl+Shift+F",
415
+ image: "Image",
416
+ link: "Link",
417
+ linkShortcut: "Ctrl+K",
418
+ insertTable: "Table",
419
+ horizontalRule: "Horizontal line",
420
+ bold: "Bold",
421
+ boldShortcut: "Ctrl+B",
422
+ italic: "Italic",
423
+ italicShortcut: "Ctrl+I",
424
+ underline: "Underline",
425
+ underlineShortcut: "Ctrl+U",
426
+ strike: "Strikethrough",
427
+ superscript: "Superscript",
428
+ subscript: "Subscript",
429
+ code: "Code",
430
+ wrap: "Block",
431
+ align: "Align",
432
+ clearFormatting: "Clear formatting",
433
+ paragraph: "Paragraph",
434
+ heading1: "Heading 1",
435
+ heading2: "Heading 2",
436
+ heading3: "Heading 3",
437
+ blockquote: "Blockquote",
438
+ codeBlock: "Code block",
439
+ taskList: "Task list",
440
+ alignLeft: "Left",
441
+ alignCenter: "Center",
442
+ alignRight: "Right",
443
+ alignJustify: "Justify",
444
+ tableProperties: "Table properties",
445
+ deleteTable: "Delete table",
446
+ row: "Row",
447
+ column: "Column",
448
+ cell: "Cell",
449
+ addRowBefore: "Insert row above",
450
+ addRowAfter: "Insert row below",
451
+ deleteRow: "Delete row",
452
+ addColumnBefore: "Insert column left",
453
+ addColumnAfter: "Insert column right",
454
+ deleteColumn: "Delete column",
455
+ mergeCells: "Merge cells",
456
+ splitCell: "Split cell",
457
+ imageUpload: "Upload Image",
458
+ formFields: "Form Fields",
459
+ formCheckbox: "Form Checkbox",
460
+ formRadio: "Form Radio Button",
461
+ applySource: "Apply",
462
+ closeDialog: "Close",
463
+ copyHtml: "Copy HTML",
464
+ exportDefault: "Export HTML",
465
+ previewEmpty: "Nothing to preview.",
466
+ sourceCodeHint: "Edit HTML directly and click Apply to update the editor."
467
+ }
468
+ }
469
+ };
470
+
471
+ // locales/vi.json
472
+ var vi_default = {
473
+ Common: {
474
+ close: "\u0110\xF3ng",
475
+ closeAlert: "\u0110\xF3ng c\u1EA3nh b\xE1o",
476
+ notifications: "Th\xF4ng b\xE1o",
477
+ newNotification: "M\u1EDBi",
478
+ readStatus: "\u0110\xE3 \u0111\u1ECDc",
479
+ openLink: "M\u1EDF li\xEAn k\u1EBFt",
480
+ theme: "Ch\u1EE7 \u0111\u1EC1",
481
+ lightTheme: "Giao di\u1EC7n s\xE1ng",
482
+ darkTheme: "Giao di\u1EC7n t\u1ED1i",
483
+ systemTheme: "Theo h\u1EC7 th\u1ED1ng",
484
+ density: "M\u1EADt \u0111\u1ED9",
485
+ compact: "G\u1ECDn",
486
+ normal: "Th\u01B0\u1EDDng",
487
+ comfortable: "Tho\u1EA3i m\xE1i",
488
+ columns: "C\u1ED9t",
489
+ loading: "\u0110ang t\u1EA3i",
490
+ noData: "Kh\xF4ng c\xF3 d\u1EEF li\u1EC7u",
491
+ clearFilter: "X\xF3a b\u1ED9 l\u1ECDc",
492
+ selectAll: "Ch\u1ECDn t\u1EA5t c\u1EA3",
493
+ default: "M\u1EB7c \u0111\u1ECBnh",
494
+ other: "Kh\xE1c",
495
+ headerAlign: "C\u0103n ch\u1EC9nh ti\xEAu \u0111\u1EC1",
496
+ alignLeft: "C\u0103n tr\xE1i",
497
+ alignCenter: "C\u0103n gi\u1EEFa",
498
+ alignRight: "C\u0103n ph\u1EA3i"
499
+ },
500
+ ValidationInput: {
501
+ required: "Tr\u01B0\u1EDDng n\xE0y l\xE0 b\u1EAFt bu\u1ED9c.",
502
+ typeMismatch: "\u0110\u1ECBnh d\u1EA1ng kh\xF4ng h\u1EE3p l\u1EC7.",
503
+ pattern: "Sai m\u1EABu",
504
+ tooShort: "Qu\xE1 ng\u1EAFn",
505
+ tooLong: "Qu\xE1 d\xE0i",
506
+ rangeUnderflow: "Gi\xE1 tr\u1ECB nh\u1ECF h\u01A1n m\u1EE9c t\u1ED1i thi\u1EC3u.",
507
+ rangeOverflow: "Gi\xE1 tr\u1ECB v\u01B0\u1EE3t qu\xE1 m\u1EE9c t\u1ED1i \u0111a.",
508
+ stepMismatch: "Sai b\u01B0\u1EDBc",
509
+ badInput: "Gi\xE1 tr\u1ECB kh\xF4ng h\u1EE3p l\u1EC7",
510
+ invalid: "Gi\xE1 tr\u1ECB kh\xF4ng h\u1EE3p l\u1EC7"
511
+ },
512
+ Loading: {
513
+ loadingPage: "\u0110ang t\u1EA3i trang",
514
+ pleaseWait: "Vui l\xF2ng ch\u1EDD"
515
+ },
516
+ DatePicker: {
517
+ placeholder: "Ch\u1ECDn ng\xE0y",
518
+ today: "H\xF4m nay",
519
+ clear: "X\xF3a",
520
+ lunarFormat: "{day} th\xE1ng {month}, {year}",
521
+ lunarLeapFormat: "{day} th\xE1ng {month}, {year} (Nhu\u1EADn)",
522
+ lunarMonth: "Th\xE1ng {month}",
523
+ lunarLeap: "Nhu\u1EADn"
524
+ },
525
+ DateTimePicker: {
526
+ time: "Th\u1EDDi gian",
527
+ clear: "X\xF3a",
528
+ done: "Xong"
529
+ },
530
+ CalendarTimeline: {
531
+ today: "H\xF4m nay",
532
+ prev: "Tr\u01B0\u1EDBc",
533
+ next: "Sau",
534
+ month: "Th\xE1ng",
535
+ week: "Tu\u1EA7n",
536
+ day: "Ng\xE0y",
537
+ sprint: "Sprint",
538
+ newEvent: "Th\xEAm s\u1EF1 ki\u1EC7n",
539
+ createEventTitle: "T\u1EA1o s\u1EF1 ki\u1EC7n",
540
+ create: "T\u1EA1o",
541
+ cancel: "H\u1EE7y",
542
+ resource: "T\xE0i nguy\xEAn",
543
+ start: "B\u1EAFt \u0111\u1EA7u",
544
+ end: "K\u1EBFt th\xFAc",
545
+ resourcesHeader: "T\xE0i nguy\xEAn",
546
+ expandGroup: "M\u1EDF r\u1ED9ng nh\xF3m",
547
+ collapseGroup: "Thu g\u1ECDn nh\xF3m",
548
+ more: "+{n} th\xEAm",
549
+ sprints: "{n} sprint",
550
+ deleteConfirm: "X\xF3a?"
551
+ },
552
+ Pagination: {
553
+ navigationLabel: "\u0110i\u1EC1u h\u01B0\u1EDBng ph\xE2n trang",
554
+ showingResults: "Hi\u1EC3n th\u1ECB {startItem}\u2013{endItem} trong t\u1ED5ng {totalItems}",
555
+ firstPage: "Trang \u0111\u1EA7u",
556
+ previousPage: "Trang tr\u01B0\u1EDBc",
557
+ previous: "Tr\u01B0\u1EDBc",
558
+ nextPage: "Trang sau",
559
+ next: "Sau",
560
+ lastPage: "Trang cu\u1ED1i",
561
+ pageNumber: "Trang {page}",
562
+ itemsPerPage: "S\u1ED1 m\u1EE5c/trang",
563
+ search: "T\xECm ki\u1EBFm",
564
+ noOptions: "Kh\xF4ng c\xF3 l\u1EF1a ch\u1ECDn"
565
+ },
566
+ OCR: {
567
+ imageUpload: {
568
+ dragDropText: "K\xE9o & th\u1EA3 \u1EA3nh v\xE0o \u0111\xE2y",
569
+ browseFiles: "Ch\u1ECDn t\u1EC7p",
570
+ supportedFormats: "H\u1ED7 tr\u1EE3 c\xE1c \u0111\u1ECBnh d\u1EA1ng \u1EA3nh"
571
+ }
572
+ },
573
+ FileUpload: {
574
+ dragDropText: "K\xE9o & th\u1EA3 t\u1EC7p v\xE0o \u0111\xE2y",
575
+ browseFiles: "Ch\u1ECDn t\u1EC7p",
576
+ uploadFiles: "T\u1EA3i t\u1EC7p l\xEAn",
577
+ supportedFormats: "H\u1ED7 tr\u1EE3 m\u1ECDi \u0111\u1ECBnh d\u1EA1ng t\u1EC7p",
578
+ uploadedFiles: "T\u1EC7p \u0111\xE3 t\u1EA3i l\xEAn",
579
+ clearAll: "X\xF3a t\u1EA5t c\u1EA3",
580
+ fileTooLarge: "v\u01B0\u1EE3t qu\xE1 gi\u1EDBi h\u1EA1n k\xEDch th\u01B0\u1EDBc",
581
+ maxFilesReached: "\u0110\xE3 \u0111\u1EA1t gi\u1EDBi h\u1EA1n s\u1ED1 t\u1EC7p.",
582
+ uploadSuccess: "\u0110\xE3 t\u1EA3i l\xEAn th\xE0nh c\xF4ng.",
583
+ uploadFailed: "T\u1EA3i l\xEAn th\u1EA5t b\u1EA1i."
584
+ },
585
+ UEditor: {
586
+ placeholder: "Nh\u1EADp '/' \u0111\u1EC3 m\u1EDF l\u1EC7nh, ho\u1EB7c b\u1EAFt \u0111\u1EA7u vi\u1EBFt...",
587
+ loading: "\u0110ang t\u1EA3i tr\xECnh so\u1EA1n th\u1EA3o...",
588
+ words: "t\u1EEB",
589
+ characters: "k\xFD t\u1EF1",
590
+ colors: {
591
+ default: "M\u1EB7c \u0111\u1ECBnh",
592
+ muted: "M\u1EDD",
593
+ primary: "Ch\xEDnh",
594
+ secondary: "Ph\u1EE5",
595
+ success: "Th\xE0nh c\xF4ng",
596
+ warning: "C\u1EA3nh b\xE1o",
597
+ destructive: "Nguy hi\u1EC3m",
598
+ info: "Th\xF4ng tin",
599
+ accent: "Nh\u1EA5n",
600
+ textColor: "M\xE0u ch\u1EEF",
601
+ highlight: "N\u1ED5i b\u1EADt",
602
+ automatic: "T\u1EF1 \u0111\u1ED9ng",
603
+ moreColors: "Th\xEAm m\xE0u...",
604
+ color: "M\xE0u",
605
+ done: "Xong"
606
+ },
607
+ toolbar: {
608
+ bold: "In \u0111\u1EADm",
609
+ boldShortcut: "In \u0111\u1EADm (Ctrl+B)",
610
+ italic: "In nghi\xEAng",
611
+ italicShortcut: "In nghi\xEAng (Ctrl+I)",
612
+ underline: "G\u1EA1ch ch\xE2n",
613
+ underlineShortcut: "G\u1EA1ch ch\xE2n (Ctrl+U)",
614
+ strike: "G\u1EA1ch ngang",
615
+ code: "Code n\u1ED9i d\xF2ng",
616
+ subscript: "Ch\u1EC9 s\u1ED1 d\u01B0\u1EDBi",
617
+ superscript: "Ch\u1EC9 s\u1ED1 tr\xEAn",
618
+ link: "Li\xEAn k\u1EBFt",
619
+ removeLink: "G\u1EE1 li\xEAn k\u1EBFt",
620
+ image: "Ch\xE8n \u1EA3nh",
621
+ table: "Ch\xE8n b\u1EA3ng",
622
+ alignment: "C\u0103n ch\u1EC9nh",
623
+ alignLeft: "C\u0103n tr\xE1i",
624
+ alignCenter: "C\u0103n gi\u1EEFa",
625
+ alignRight: "C\u0103n ph\u1EA3i",
626
+ justify: "C\u0103n \u0111\u1EC1u",
627
+ decreaseIndent: "Gi\u1EA3m l\u1EC1",
628
+ increaseIndent: "T\u0103ng l\u1EC1",
629
+ bulletList: "Danh s\xE1ch d\u1EA5u ch\u1EA5m",
630
+ orderedList: "Danh s\xE1ch s\u1ED1",
631
+ taskList: "Danh s\xE1ch c\xF4ng vi\u1EC7c",
632
+ quote: "Tr\xEDch d\u1EABn",
633
+ codeBlock: "Kh\u1ED1i m\xE3",
634
+ undo: "Ho\xE0n t\xE1c (Ctrl+Z)",
635
+ redo: "L\xE0m l\u1EA1i (Ctrl+Y)",
636
+ textStyle: "Ki\u1EC3u ch\u1EEF",
637
+ fontFamily: "Ph\xF4ng ch\u1EEF",
638
+ fontSize: "C\u1EE1 ch\u1EEF",
639
+ lineHeight: "Gi\xE3n d\xF2ng",
640
+ fontDefault: "Ph\xF4ng m\u1EB7c \u0111\u1ECBnh",
641
+ sizeDefault: "C\u1EE1 m\u1EB7c \u0111\u1ECBnh",
642
+ lineHeightDefault: "Gi\xE3n d\xF2ng m\u1EB7c \u0111\u1ECBnh",
643
+ letterSpacing: "Gi\xE3n ch\u1EEF",
644
+ letterSpacingDefault: "Gi\xE3n ch\u1EEF m\u1EB7c \u0111\u1ECBnh",
645
+ fontSans: "Sans",
646
+ fontSerif: "Serif",
647
+ fontMono: "Mono",
648
+ normal: "V\u0103n b\u1EA3n th\u01B0\u1EDDng",
649
+ heading1: "Ti\xEAu \u0111\u1EC1 1",
650
+ heading2: "Ti\xEAu \u0111\u1EC1 2",
651
+ heading3: "Ti\xEAu \u0111\u1EC1 3",
652
+ emoji: "Ch\xE8n Emoji",
653
+ imageLayoutBlock: "\u1EA2nh D\u1EA1ng Kh\u1ED1i",
654
+ imageLayoutLeft: "\u1EA2nh Tr\xE1i, Ch\u1EEF Ph\u1EA3i",
655
+ imageLayoutRight: "\u1EA2nh Ph\u1EA3i, Ch\u1EEF Tr\xE1i",
656
+ imageWidthSm: "\u1EA2nh Nh\u1ECF",
657
+ imageWidthMd: "\u1EA2nh V\u1EEBa",
658
+ imageWidthLg: "\u1EA2nh L\u1EDBn",
659
+ imageResetSize: "\u0110\u1EB7t L\u1EA1i K\xEDch Th\u01B0\u1EDBc \u1EA2nh",
660
+ imageDelete: "X\xF3a \u1EA2nh"
661
+ },
662
+ slashCommand: {
663
+ basicBlocks: "Kh\u1ED1i c\u01A1 b\u1EA3n",
664
+ text: "V\u0103n b\u1EA3n",
665
+ textDesc: "Kh\u1ED1i v\u0103n b\u1EA3n thu\u1EA7n",
666
+ heading1: "Ti\xEAu \u0111\u1EC1 1",
667
+ heading1Desc: "Ti\xEAu \u0111\u1EC1 ph\u1EA7n l\u1EDBn",
668
+ heading2: "Ti\xEAu \u0111\u1EC1 2",
669
+ heading2Desc: "Ti\xEAu \u0111\u1EC1 ph\u1EA7n v\u1EEBa",
670
+ heading3: "Ti\xEAu \u0111\u1EC1 3",
671
+ heading3Desc: "Ti\xEAu \u0111\u1EC1 ph\u1EA7n nh\u1ECF",
672
+ bulletList: "Danh s\xE1ch d\u1EA5u ch\u1EA5m",
673
+ bulletListDesc: "Danh s\xE1ch li\u1EC7t k\xEA \u0111\u01A1n gi\u1EA3n",
674
+ orderedList: "Danh s\xE1ch s\u1ED1",
675
+ orderedListDesc: "Danh s\xE1ch c\xF3 th\u1EE9 t\u1EF1",
676
+ todoList: "Danh s\xE1ch c\xF4ng vi\u1EC7c",
677
+ todoListDesc: "Checkbox c\xF4ng vi\u1EC7c",
678
+ quote: "Tr\xEDch d\u1EABn",
679
+ quoteDesc: "T\u1EA1o tr\xEDch d\u1EABn",
680
+ codeBlock: "Kh\u1ED1i m\xE3",
681
+ codeBlockDesc: "M\xE3 v\u1EDBi t\xF4 m\xE0u c\xFA ph\xE1p",
682
+ divider: "Ph\xE2n c\xE1ch",
683
+ dividerDesc: "\u0110\u01B0\u1EDDng k\u1EBB ngang",
684
+ table: "B\u1EA3ng",
685
+ tableDesc: "Th\xEAm b\u1EA3ng",
686
+ noResults: "Kh\xF4ng t\xECm th\u1EA5y kh\u1ED1i ph\xF9 h\u1EE3p",
687
+ callout: "H\u1ED9p th\xF4ng tin",
688
+ calloutDesc: "L\xE0m n\u1ED5i b\u1EADt th\xF4ng tin ch\xEDnh b\u1EB1ng h\u1ED9p ch\xFA th\xEDch",
689
+ bookmark: "Th\u1EBB li\xEAn k\u1EBFt",
690
+ bookmarkDesc: "Nh\xFAng m\u1ED9t li\xEAn k\u1EBFt d\u01B0\u1EDBi d\u1EA1ng th\u1EBB xem tr\u01B0\u1EDBc",
691
+ fileCard: "T\u1EC7p \u0111\xEDnh k\xE8m",
692
+ fileCardDesc: "T\u1EA3i l\xEAn t\u1EC7p tin \u0111\xEDnh k\xE8m",
693
+ formCheckbox: "Checkbox bi\u1EC3u m\u1EABu",
694
+ formCheckboxDesc: "Th\xEAm \xF4 checkbox bi\u1EC3u m\u1EABu",
695
+ roundCheckbox: "Checkbox tr\xF2n",
696
+ roundCheckboxDesc: "Th\xEAm checkbox t\u01B0\u01A1ng t\xE1c h\xECnh tr\xF2n",
697
+ formRadio: "Radio bi\u1EC3u m\u1EABu",
698
+ formRadioDesc: "Th\xEAm n\xFAt ch\u1ECDn m\u1ED9t (Radio) bi\u1EC3u m\u1EABu"
699
+ },
700
+ floatingMenu: {
701
+ addBlock: "Th\xEAm kh\u1ED1i"
702
+ },
703
+ linkInput: {
704
+ placeholder: "D\xE1n ho\u1EB7c nh\u1EADp li\xEAn k\u1EBFt...",
705
+ invalid: "Vui l\xF2ng nh\u1EADp li\xEAn k\u1EBFt h\u1EE3p l\u1EC7, v\xED d\u1EE5: https://example.com."
706
+ },
707
+ imageInput: {
708
+ urlTab: "URL",
709
+ uploadTab: "T\u1EA3i l\xEAn",
710
+ urlLabel: "URL h\xECnh \u1EA3nh",
711
+ urlPlaceholder: "https://example.com/image.jpg",
712
+ uploadLabel: "Ch\u1ECDn h\xECnh \u1EA3nh",
713
+ uploadPlaceholder: "Nh\u1EA5n \u0111\u1EC3 t\u1EA3i \u1EA3nh l\xEAn",
714
+ uploading: "\u0110ang t\u1EA3i l\xEAn...",
715
+ uploadError: "T\u1EA3i l\xEAn th\u1EA5t b\u1EA1i. Vui l\xF2ng th\u1EED l\u1EA1i.",
716
+ altLabel: "M\xF4 t\u1EA3 \u1EA3nh (tu\u1EF3 ch\u1ECDn)",
717
+ altPlaceholder: "M\xF4 t\u1EA3 h\xECnh \u1EA3nh...",
718
+ addBtn: "Th\xEAm \u1EA3nh",
719
+ cancelBtn: "H\u1EE7y",
720
+ addFromUrl: "Th\xEAm t\u1EEB URL"
721
+ },
722
+ emojiPicker: {
723
+ searchPlaceholder: "T\xECm ki\u1EBFm bi\u1EC3u t\u01B0\u1EE3ng c\u1EA3m x\xFAc",
724
+ noResults: "Kh\xF4ng t\xECm th\u1EA5y emoji",
725
+ tryDifferentSearch: "Th\u1EED t\u1EEB kh\xF3a kh\xE1c"
726
+ },
727
+ stickerPicker: {
728
+ searchPlaceholder: "T\xECm ki\u1EBFm nh\xE3n d\xE1n",
729
+ noResults: "Kh\xF4ng t\xECm th\u1EA5y nh\xE3n d\xE1n n\xE0o",
730
+ tryDifferentSearch: "Th\u1EED t\u1EEB kh\xF3a kh\xE1c"
731
+ },
732
+ emojiSuggestion: {
733
+ title: "Emoji",
734
+ noResults: "Kh\xF4ng t\xECm th\u1EA5y emoji",
735
+ showingCount: "Hi\u1EC3n th\u1ECB {shown} trong t\u1ED5ng s\u1ED1 {total} emoji"
736
+ },
737
+ formulaSuggestion: {
738
+ title: "H\xE0m",
739
+ noResults: "Kh\xF4ng t\xECm th\u1EA5y h\xE0m",
740
+ sum: "C\u1ED9ng c\xE1c gi\xE1 tr\u1ECB trong v\xF9ng",
741
+ avg: "T\xEDnh trung b\xECnh c\xE1c gi\xE1 tr\u1ECB trong v\xF9ng",
742
+ min: "Gi\xE1 tr\u1ECB nh\u1ECF nh\u1EA5t trong v\xF9ng",
743
+ max: "Gi\xE1 tr\u1ECB l\u1EDBn nh\u1EA5t trong v\xF9ng",
744
+ count: "\u0110\u1EBFm c\xE1c \xF4 d\u1EA1ng s\u1ED1 trong v\xF9ng"
745
+ },
746
+ tableMenu: {
747
+ insert3x3: "Ch\xE8n b\u1EA3ng 3\xD73",
748
+ insertTable: "Ch\xE8n b\u1EA3ng",
749
+ gridPreview: "Ch\xE8n b\u1EA3ng {rows}\xD7{cols}",
750
+ addColumnBefore: "Th\xEAm c\u1ED9t tr\u01B0\u1EDBc",
751
+ addColumnAfter: "Th\xEAm c\u1ED9t sau",
752
+ addRowBefore: "Th\xEAm h\xE0ng tr\u01B0\u1EDBc",
753
+ addRowAfter: "Th\xEAm h\xE0ng sau",
754
+ duplicateColumn: "Nh\xE2n \u0111\xF4i c\u1ED9t",
755
+ duplicateRow: "Nh\xE2n \u0111\xF4i h\xE0ng",
756
+ clearColumnContents: "X\xF3a n\u1ED9i dung c\u1ED9t",
757
+ clearRowContents: "X\xF3a n\u1ED9i dung h\xE0ng",
758
+ deleteColumn: "X\xF3a c\u1ED9t",
759
+ deleteRow: "X\xF3a h\xE0ng",
760
+ deleteTable: "X\xF3a b\u1EA3ng",
761
+ toggleHeaderRow: "B\u1EADt/t\u1EAFt h\xE0ng ti\xEAu \u0111\u1EC1",
762
+ toggleHeaderColumn: "B\u1EADt/t\u1EAFt c\u1ED9t ti\xEAu \u0111\u1EC1",
763
+ mergeCells: "G\u1ED9p \xF4",
764
+ splitCell: "T\xE1ch \xF4",
765
+ openControls: "M\u1EDF \u0111i\u1EC1u khi\u1EC3n b\u1EA3ng",
766
+ cellFormatting: "\u0110\u1ECBnh d\u1EA1ng \xF4",
767
+ quickAddColumnAfter: "Th\xEAm nhanh c\u1ED9t sau",
768
+ quickAddRowAfter: "Th\xEAm nhanh h\xE0ng sau",
769
+ expandTable: "M\u1EDF r\u1ED9ng b\u1EA3ng",
770
+ dragRow: "K\xE9o h\xE0ng",
771
+ dragColumn: "K\xE9o c\u1ED9t",
772
+ resizeBoth: "\u0110\u1ED5i k\xEDch th\u01B0\u1EDBc b\u1EA3ng",
773
+ resizeCtrlHint: "K\xE9o t\u1EF1 do; gi\u1EEF Ctrl \u0111\u1EC3 kh\xF3a m\u1ED9t chi\u1EC1u, ho\u1EB7c Ctrl+Shift \u0111\u1EC3 gi\u1EEF nguy\xEAn t\u1EF7 l\u1EC7",
774
+ alignLeft: "C\u0103n b\u1EA3ng tr\xE1i",
775
+ alignCenter: "C\u0103n b\u1EA3ng gi\u1EEFa",
776
+ alignRight: "C\u0103n b\u1EA3ng ph\u1EA3i",
777
+ cellBackground: "M\xE0u n\u1EC1n \xF4",
778
+ cellBorder: "Vi\u1EC1n \xF4",
779
+ borderStyle: "Ki\u1EC3u vi\u1EC1n",
780
+ borderWidth: "\u0110\u1ED9 d\xE0y vi\u1EC1n",
781
+ borderColor: "M\xE0u vi\u1EC1n",
782
+ borderPosition: "V\u1ECB tr\xED vi\u1EC1n",
783
+ borderMode: "Ch\u1EBF \u0111\u1ED9 vi\u1EC1n",
784
+ borderDraw: "V\u1EBD vi\u1EC1n",
785
+ borderErase: "\u1EA8n c\u1EA1nh",
786
+ borderAll: "T\u1EA5t c\u1EA3 vi\u1EC1n",
787
+ borderOuter: "Vi\u1EC1n ngo\xE0i",
788
+ borderInner: "Vi\u1EC1n trong",
789
+ borderHorizontal: "Vi\u1EC1n ngang b\xEAn trong",
790
+ borderVertical: "Vi\u1EC1n d\u1ECDc b\xEAn trong",
791
+ borderTop: "Vi\u1EC1n tr\xEAn",
792
+ borderRight: "Vi\u1EC1n ph\u1EA3i",
793
+ borderBottom: "Vi\u1EC1n d\u01B0\u1EDBi",
794
+ borderLeft: "Vi\u1EC1n tr\xE1i",
795
+ clearBorder: "X\xF3a vi\u1EC1n",
796
+ formula: "C\xF4ng th\u1EE9c",
797
+ formulaBar: "Thanh c\xF4ng th\u1EE9c",
798
+ formulaError: "L\u1ED7i c\xF4ng th\u1EE9c",
799
+ editFormula: "S\u1EEDa c\xF4ng th\u1EE9c",
800
+ clearCell: "X\xF3a n\u1ED9i dung \xF4",
801
+ convertToValue: "Chuy\u1EC3n th\xE0nh gi\xE1 tr\u1ECB",
802
+ numberFormat: "\u0110\u1ECBnh d\u1EA1ng s\u1ED1",
803
+ formatText: "Ch\u1EEF",
804
+ formatDate: "Ng\xE0y",
805
+ apply: "\xC1p d\u1EE5ng",
806
+ clear: "X\xF3a",
807
+ recalculate: "T\xEDnh l\u1EA1i",
808
+ done: "Xong",
809
+ alignVertical: "C\u0103n l\u1EC1 d\u1ECDc",
810
+ alignVerticalTop: "C\u0103n tr\xEAn",
811
+ alignVerticalMiddle: "C\u0103n gi\u1EEFa",
812
+ alignVerticalBottom: "C\u0103n d\u01B0\u1EDBi",
813
+ textDirection: "H\u01B0\u1EDBng ch\u1EEF",
814
+ horizontalText: "Ch\u1EEF ngang",
815
+ verticalText: "Ch\u1EEF d\u1ECDc"
816
+ },
817
+ callout: {
818
+ selectEmoji: "Ch\u1ECDn Bi\u1EC3u t\u01B0\u1EE3ng",
819
+ backgroundColor: "M\xE0u n\u1EC1n"
820
+ },
821
+ radio: {
822
+ groupName: "T\xEAn nh\xF3m",
823
+ editGroup: "S\u1EEDa t\xEAn nh\xF3m"
824
+ },
825
+ bookmark: {
826
+ clickToOpenNewTab: "B\u1EA5m \u0111\u1EC3 m\u1EDF li\xEAn k\u1EBFt n\xE0y trong tab m\u1EDBi.",
827
+ clickToOpenLink: "B\u1EA5m \u0111\u1EC3 m\u1EDF li\xEAn k\u1EBFt.",
828
+ noDescription: "Kh\xF4ng c\xF3 m\xF4 t\u1EA3.",
829
+ failedToLoad: "T\u1EA3i b\u1EA3n xem tr\u01B0\u1EDBc th\u1EA5t b\u1EA1i. B\u1EA5m \u0111\u1EC3 m\u1EDF li\xEAn k\u1EBFt.",
830
+ previewFailed: "Kh\xF4ng t\u1EA3i \u0111\u01B0\u1EE3c b\u1EA3n xem tr\u01B0\u1EDBc",
831
+ retryPreview: "Th\u1EED l\u1EA1i"
832
+ },
833
+ fileCard: {
834
+ unnamed: "T\u1EC7p kh\xF4ng t\xEAn",
835
+ uploading: "(\u0110ang t\u1EA3i l\xEAn...)",
836
+ uploadFailed: "T\u1EA3i l\xEAn th\u1EA5t b\u1EA1i",
837
+ retryUpload: "T\u1EA3i l\u1EA1i"
838
+ },
839
+ menubar: {
840
+ file: "T\u1EADp tin",
841
+ edit: "S\u1EEDa",
842
+ view: "Xem",
843
+ insert: "Th\xEAm",
844
+ format: "\u0110\u1ECBnh d\u1EA1ng",
845
+ tools: "C\xF4ng c\u1EE5",
846
+ table: "B\u1EA3ng",
847
+ save: "L\u01B0u",
848
+ exportHtml: "Xu\u1EA5t HTML",
849
+ undo: "Ho\xE0n t\xE1c",
850
+ undoShortcut: "Ctrl+Z",
851
+ redo: "L\xE0m l\u1EA1i",
852
+ redoShortcut: "Ctrl+Y",
853
+ cut: "C\u1EAFt",
854
+ cutShortcut: "Ctrl+X",
855
+ copy: "Ch\xE9p",
856
+ copyShortcut: "Ctrl+C",
857
+ paste: "D\xE1n",
858
+ pasteShortcut: "Ctrl+V",
859
+ pasteAsText: "D\xE1n nh\u01B0 v\u0103n b\u1EA3n",
860
+ selectAll: "Ch\u1ECDn t\u1EA5t c\u1EA3",
861
+ selectAllShortcut: "Ctrl+A",
862
+ sourceCode: "M\xE3 ngu\u1ED3n",
863
+ preview: "Xem tr\u01B0\u1EDBc",
864
+ fullscreen: "\u0110\u1EA7y m\xE0n h\xECnh",
865
+ fullscreenShortcut: "Ctrl+Shift+F",
866
+ image: "H\xECnh \u1EA3nh",
867
+ link: "Li\xEAn k\u1EBFt",
868
+ linkShortcut: "Ctrl+K",
869
+ insertTable: "B\u1EA3ng",
870
+ horizontalRule: "\u0110\u01B0\u1EDDng k\u1EBB ngang",
871
+ bold: "T\xF4 \u0111\u1EADm",
872
+ boldShortcut: "Ctrl+B",
873
+ italic: "In nghi\xEAng",
874
+ italicShortcut: "Ctrl+I",
875
+ underline: "G\u1EA1ch d\u01B0\u1EDBi",
876
+ underlineShortcut: "Ctrl+U",
877
+ strike: "G\u1EA1ch ngang",
878
+ superscript: "Tr\xEAn d\xF2ng",
879
+ subscript: "D\u01B0\u1EDBi d\xF2ng",
880
+ code: "M\xE3",
881
+ wrap: "Ng\u1EAFt d\xF2ng",
882
+ align: "C\u0103n ch\u1EC9nh",
883
+ clearFormatting: "Xo\xE1 \u0111\u1ECBnh d\u1EA1ng",
884
+ paragraph: "\u0110o\u1EA1n v\u0103n",
885
+ heading1: "Ti\xEAu \u0111\u1EC1 1",
886
+ heading2: "Ti\xEAu \u0111\u1EC1 2",
887
+ heading3: "Ti\xEAu \u0111\u1EC1 3",
888
+ blockquote: "Tr\xEDch d\u1EABn",
889
+ codeBlock: "Kh\u1ED1i m\xE3",
890
+ taskList: "Danh s\xE1ch vi\u1EC7c",
891
+ alignLeft: "Tr\xE1i",
892
+ alignCenter: "Gi\u1EEFa",
893
+ alignRight: "Ph\u1EA3i",
894
+ alignJustify: "\u0110\u1EC1u",
895
+ tableProperties: "Thu\u1ED9c t\xEDnh b\u1EA3ng",
896
+ deleteTable: "Xo\xE1 b\u1EA3ng",
897
+ row: "D\xF2ng",
898
+ column: "C\u1ED9t",
899
+ cell: "\xD4",
900
+ addRowBefore: "Th\xEAm h\xE0ng ph\xEDa tr\xEAn",
901
+ addRowAfter: "Th\xEAm h\xE0ng ph\xEDa d\u01B0\u1EDBi",
902
+ deleteRow: "Xo\xE1 h\xE0ng",
903
+ addColumnBefore: "Th\xEAm c\u1ED9t b\xEAn tr\xE1i",
904
+ addColumnAfter: "Th\xEAm c\u1ED9t b\xEAn ph\u1EA3i",
905
+ deleteColumn: "Xo\xE1 c\u1ED9t",
906
+ mergeCells: "G\u1ED9p \xF4",
907
+ splitCell: "T\xE1ch \xF4",
908
+ imageUpload: "T\u1EA3i \u1EA3nh l\xEAn",
909
+ formFields: "Tr\u01B0\u1EDDng bi\u1EC3u m\u1EABu",
910
+ formCheckbox: "Checkbox bi\u1EC3u m\u1EABu",
911
+ formRadio: "N\xFAt ch\u1ECDn m\u1ED9t (Radio)",
912
+ applySource: "\xC1p d\u1EE5ng",
913
+ closeDialog: "\u0110\xF3ng",
914
+ copyHtml: "Sao ch\xE9p HTML",
915
+ exportDefault: "Xu\u1EA5t HTML",
916
+ previewEmpty: "Kh\xF4ng c\xF3 n\u1ED9i dung \u0111\u1EC3 xem tr\u01B0\u1EDBc.",
917
+ sourceCodeHint: "Ch\u1EC9nh s\u1EEDa HTML tr\u1EF1c ti\u1EBFp v\xE0 nh\u1EA5n \xC1p d\u1EE5ng \u0111\u1EC3 c\u1EADp nh\u1EADt n\u1ED9i dung."
918
+ }
919
+ }
920
+ };
921
+
922
+ // locales/ko.json
923
+ var ko_default = {
924
+ Common: {
925
+ close: "\uB2EB\uAE30",
926
+ closeAlert: "\uC54C\uB9BC \uB2EB\uAE30",
927
+ notifications: "\uC54C\uB9BC",
928
+ newNotification: "\uC0C8\uB85C\uC6B4",
929
+ readStatus: "\uC77D\uC74C",
930
+ openLink: "\uB9C1\uD06C \uC5F4\uAE30",
931
+ theme: "\uD14C\uB9C8",
932
+ lightTheme: "\uB77C\uC774\uD2B8",
933
+ darkTheme: "\uB2E4\uD06C",
934
+ systemTheme: "\uC2DC\uC2A4\uD15C",
935
+ density: "\uBC00\uB3C4",
936
+ compact: "\uCEF4\uD329\uD2B8",
937
+ normal: "\uBCF4\uD1B5",
938
+ comfortable: "\uC5EC\uC720",
939
+ columns: "\uC5F4",
940
+ loading: "\uB85C\uB529 \uC911",
941
+ noData: "\uB370\uC774\uD130 \uC5C6\uC74C",
942
+ clearFilter: "\uD544\uD130 \uC9C0\uC6B0\uAE30",
943
+ selectAll: "\uC804\uCCB4 \uC120\uD0DD",
944
+ default: "\uAE30\uBCF8\uAC12",
945
+ other: "\uAE30\uD0C0",
946
+ headerAlign: "\uD5E4\uB354 \uC815\uB82C",
947
+ alignLeft: "\uC67C\uCABD \uC815\uB82C",
948
+ alignCenter: "\uAC00\uC6B4\uB370 \uC815\uB82C",
949
+ alignRight: "\uC624\uB978\uCABD \uC815\uB82C"
950
+ },
951
+ ValidationInput: {
952
+ required: "\uD544\uC218 \uC785\uB825 \uD56D\uBAA9\uC785\uB2C8\uB2E4",
953
+ typeMismatch: "\uD615\uC2DD\uC774 \uC62C\uBC14\uB974\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4",
954
+ pattern: "\uD328\uD134\uC774 \uC77C\uCE58\uD558\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4",
955
+ tooShort: "\uB108\uBB34 \uC9E7\uC2B5\uB2C8\uB2E4",
956
+ tooLong: "\uB108\uBB34 \uAE41\uB2C8\uB2E4",
957
+ rangeUnderflow: "\uCD5C\uC19F\uAC12\uBCF4\uB2E4 \uC791\uC2B5\uB2C8\uB2E4",
958
+ rangeOverflow: "\uCD5C\uB313\uAC12\uC744 \uCD08\uACFC\uD588\uC2B5\uB2C8\uB2E4",
959
+ stepMismatch: "\uB2E8\uACC4\uAC00 \uC77C\uCE58\uD558\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4",
960
+ badInput: "\uC798\uBABB\uB41C \uC785\uB825\uC785\uB2C8\uB2E4",
961
+ invalid: "\uC720\uD6A8\uD558\uC9C0 \uC54A\uC740 \uAC12\uC785\uB2C8\uB2E4"
962
+ },
963
+ Loading: {
964
+ loadingPage: "\uD398\uC774\uC9C0 \uB85C\uB529 \uC911",
965
+ pleaseWait: "\uC7A0\uC2DC\uB9CC \uAE30\uB2E4\uB824 \uC8FC\uC138\uC694"
966
+ },
967
+ DatePicker: {
968
+ placeholder: "\uB0A0\uC9DC \uC120\uD0DD",
969
+ today: "\uC624\uB298",
970
+ clear: "\uC9C0\uC6B0\uAE30",
971
+ lunarFormat: "{year}\uB144 {month}\uC6D4 {day}\uC77C",
972
+ lunarLeapFormat: "{year}\uB144 \uC724{month}\uC6D4 {day}\uC77C",
973
+ lunarMonth: "{month}\uC6D4",
974
+ lunarLeap: "\uC724\uB2EC"
975
+ },
976
+ DateTimePicker: {
977
+ time: "\uC2DC\uAC04",
978
+ clear: "\uC9C0\uC6B0\uAE30",
979
+ done: "\uC644\uB8CC"
980
+ },
981
+ CalendarTimeline: {
982
+ today: "\uC624\uB298",
983
+ prev: "\uC774\uC804",
984
+ next: "\uB2E4\uC74C",
985
+ month: "\uC6D4",
986
+ week: "\uC8FC",
987
+ day: "\uC77C",
988
+ sprint: "\uC2A4\uD504\uB9B0\uD2B8",
989
+ newEvent: "\uC0C8 \uC774\uBCA4\uD2B8",
990
+ createEventTitle: "\uC774\uBCA4\uD2B8 \uC0DD\uC131",
991
+ create: "\uC0DD\uC131",
992
+ cancel: "\uCDE8\uC18C",
993
+ resource: "\uB9AC\uC18C\uC2A4",
994
+ start: "\uC2DC\uC791",
995
+ end: "\uC885\uB8CC",
996
+ resourcesHeader: "\uB9AC\uC18C\uC2A4",
997
+ expandGroup: "\uADF8\uB8F9 \uD3BC\uCE58\uAE30",
998
+ collapseGroup: "\uADF8\uB8F9 \uC811\uAE30",
999
+ more: "+{n}\uAC1C \uB354",
1000
+ sprints: "{n} \uC2A4\uD504\uB9B0\uD2B8",
1001
+ deleteConfirm: "\uC0AD\uC81C\uD558\uC2DC\uACA0\uC2B5\uB2C8\uAE4C?"
1002
+ },
1003
+ Pagination: {
1004
+ navigationLabel: "\uD398\uC774\uC9C0 \uB124\uBE44\uAC8C\uC774\uC158",
1005
+ showingResults: "{startItem}\u2013{endItem} / \uCD1D {totalItems}\uAC1C",
1006
+ firstPage: "\uCCAB \uD398\uC774\uC9C0",
1007
+ previousPage: "\uC774\uC804 \uD398\uC774\uC9C0",
1008
+ previous: "\uC774\uC804",
1009
+ nextPage: "\uB2E4\uC74C \uD398\uC774\uC9C0",
1010
+ next: "\uB2E4\uC74C",
1011
+ lastPage: "\uB9C8\uC9C0\uB9C9 \uD398\uC774\uC9C0",
1012
+ pageNumber: "{page}\uD398\uC774\uC9C0",
1013
+ itemsPerPage: "\uD398\uC774\uC9C0\uB2F9 \uD56D\uBAA9 \uC218",
1014
+ search: "\uAC80\uC0C9",
1015
+ noOptions: "\uC635\uC158 \uC5C6\uC74C"
1016
+ },
1017
+ OCR: {
1018
+ imageUpload: {
1019
+ dragDropText: "\uC5EC\uAE30\uC5D0 \uD30C\uC77C\uC744 \uB4DC\uB798\uADF8 \uC564 \uB4DC\uB86D\uD558\uC138\uC694",
1020
+ browseFiles: "\uD30C\uC77C \uCC3E\uC544\uBCF4\uAE30",
1021
+ supportedFormats: "\uC9C0\uC6D0 \uD615\uC2DD: \uC774\uBBF8\uC9C0"
1022
+ }
1023
+ },
1024
+ FileUpload: {
1025
+ dragDropText: "\uC5EC\uAE30\uC5D0 \uD30C\uC77C\uC744 \uB4DC\uB798\uADF8 \uC564 \uB4DC\uB86D\uD558\uC138\uC694",
1026
+ browseFiles: "\uD30C\uC77C \uC120\uD0DD",
1027
+ uploadFiles: "\uD30C\uC77C \uC5C5\uB85C\uB4DC",
1028
+ supportedFormats: "\uBAA8\uB4E0 \uD30C\uC77C \uD615\uC2DD \uC9C0\uC6D0",
1029
+ uploadedFiles: "\uC5C5\uB85C\uB4DC\uB41C \uD30C\uC77C",
1030
+ clearAll: "\uBAA8\uB450 \uC9C0\uC6B0\uAE30",
1031
+ fileTooLarge: "\uD30C\uC77C \uD06C\uAE30\uAC00 \uC81C\uD55C\uC744 \uCD08\uACFC\uD588\uC2B5\uB2C8\uB2E4.",
1032
+ maxFilesReached: "\uCD5C\uB300 \uD30C\uC77C \uC218\uC5D0 \uB3C4\uB2EC\uD588\uC2B5\uB2C8\uB2E4.",
1033
+ uploadSuccess: "\uC5C5\uB85C\uB4DC\uB418\uC5C8\uC2B5\uB2C8\uB2E4.",
1034
+ uploadFailed: "\uC5C5\uB85C\uB4DC\uC5D0 \uC2E4\uD328\uD588\uC2B5\uB2C8\uB2E4."
1035
+ },
1036
+ UEditor: {
1037
+ placeholder: "\uBA85\uB839\uC5B4\uB294 '/'\uB97C \uC785\uB825\uD558\uAC70\uB098 \uC785\uB825\uC744 \uC2DC\uC791\uD558\uC138\uC694...",
1038
+ loading: "\uC5D0\uB514\uD130 \uB85C\uB529 \uC911...",
1039
+ words: "\uB2E8\uC5B4",
1040
+ characters: "\uC790",
1041
+ colors: {
1042
+ default: "\uAE30\uBCF8",
1043
+ muted: "\uD750\uB9BC",
1044
+ primary: "\uAE30\uBCF8",
1045
+ secondary: "\uBCF4\uC870",
1046
+ success: "\uC131\uACF5",
1047
+ warning: "\uACBD\uACE0",
1048
+ destructive: "\uC704\uD5D8",
1049
+ info: "\uC815\uBCF4",
1050
+ accent: "\uAC15\uC870",
1051
+ textColor: "\uD14D\uC2A4\uD2B8 \uC0C9\uC0C1",
1052
+ highlight: "\uD615\uAD11\uD39C",
1053
+ automatic: "\uC790\uB3D9",
1054
+ moreColors: "\uB2E4\uB978 \uC0C9...",
1055
+ color: "\uC0C9\uC0C1",
1056
+ done: "\uC644\uB8CC"
1057
+ },
1058
+ toolbar: {
1059
+ bold: "\uAD75\uAC8C",
1060
+ boldShortcut: "\uAD75\uAC8C (Ctrl+B)",
1061
+ italic: "\uAE30\uC6B8\uC784",
1062
+ italicShortcut: "\uAE30\uC6B8\uC784 (Ctrl+I)",
1063
+ underline: "\uBC11\uC904",
1064
+ underlineShortcut: "\uBC11\uC904 (Ctrl+U)",
1065
+ strike: "\uCDE8\uC18C\uC120",
1066
+ code: "\uCF54\uB4DC",
1067
+ subscript: "\uC544\uB798 \uCCA8\uC790",
1068
+ superscript: "\uC704 \uCCA8\uC790",
1069
+ link: "\uB9C1\uD06C",
1070
+ removeLink: "\uB9C1\uD06C \uC81C\uAC70",
1071
+ image: "\uC774\uBBF8\uC9C0",
1072
+ table: "\uD45C",
1073
+ alignment: "\uC815\uB82C",
1074
+ alignLeft: "\uC67C\uCABD \uC815\uB82C",
1075
+ alignCenter: "\uAC00\uC6B4\uB370 \uC815\uB82C",
1076
+ alignRight: "\uC624\uB978\uCABD \uC815\uB82C",
1077
+ justify: "\uC591\uCABD \uB9DE\uCDA4",
1078
+ decreaseIndent: "\uB0B4\uC5B4\uC4F0\uAE30",
1079
+ increaseIndent: "\uB4E4\uC5EC\uC4F0\uAE30",
1080
+ bulletList: "\uAE00\uBA38\uB9AC \uAE30\uD638 \uBAA9\uB85D",
1081
+ orderedList: "\uBC88\uD638 \uB9E4\uAE30\uAE30 \uBAA9\uB85D",
1082
+ taskList: "\uD560 \uC77C \uBAA9\uB85D",
1083
+ quote: "\uC778\uC6A9\uAD6C",
1084
+ codeBlock: "\uCF54\uB4DC \uBE14\uB85D",
1085
+ undo: "\uC2E4\uD589 \uCDE8\uC18C",
1086
+ redo: "\uB2E4\uC2DC \uC2E4\uD589",
1087
+ textStyle: "\uD14D\uC2A4\uD2B8 \uC2A4\uD0C0\uC77C",
1088
+ fontFamily: "\uAE00\uAF34",
1089
+ fontSize: "\uAE00\uC790 \uD06C\uAE30",
1090
+ lineHeight: "\uC904 \uAC04\uACA9",
1091
+ fontDefault: "\uAE30\uBCF8 \uAE00\uAF34",
1092
+ sizeDefault: "\uAE30\uBCF8 \uD06C\uAE30",
1093
+ lineHeightDefault: "\uAE30\uBCF8 \uC904 \uAC04\uACA9",
1094
+ letterSpacing: "\uC790\uAC04",
1095
+ letterSpacingDefault: "\uAE30\uBCF8 \uC790\uAC04",
1096
+ fontSans: "Sans",
1097
+ fontSerif: "Serif",
1098
+ fontMono: "Mono",
1099
+ normal: "\uC77C\uBC18 \uD14D\uC2A4\uD2B8",
1100
+ heading1: "\uC81C\uBAA9 1",
1101
+ heading2: "\uC81C\uBAA9 2",
1102
+ heading3: "\uC81C\uBAA9 3",
1103
+ emoji: "\uC774\uBAA8\uC9C0 \uC0BD\uC785",
1104
+ imageLayoutBlock: "\uC774\uBBF8\uC9C0 \uBE14\uB85D",
1105
+ imageLayoutLeft: "\uC67C\uCABD \uC774\uBBF8\uC9C0, \uC624\uB978\uCABD \uD14D\uC2A4\uD2B8",
1106
+ imageLayoutRight: "\uC624\uB978\uCABD \uC774\uBBF8\uC9C0, \uC67C\uCABD \uD14D\uC2A4\uD2B8",
1107
+ imageWidthSm: "\uC791\uC740 \uC774\uBBF8\uC9C0",
1108
+ imageWidthMd: "\uC911\uAC04 \uC774\uBBF8\uC9C0",
1109
+ imageWidthLg: "\uD070 \uC774\uBBF8\uC9C0",
1110
+ imageResetSize: "\uC774\uBBF8\uC9C0 \uD06C\uAE30 \uCD08\uAE30\uD654",
1111
+ imageDelete: "\uC774\uBBF8\uC9C0 \uC0AD\uC81C"
1112
+ },
1113
+ slashCommand: {
1114
+ basicBlocks: "\uAE30\uBCF8 \uBE14\uB85D",
1115
+ text: "\uD14D\uC2A4\uD2B8",
1116
+ textDesc: "\uC77C\uBC18 \uD14D\uC2A4\uD2B8 \uBE14\uB85D",
1117
+ heading1: "\uC81C\uBAA9 1",
1118
+ heading1Desc: "\uB300\uD615 \uC139\uC158 \uC81C\uBAA9",
1119
+ heading2: "\uC81C\uBAA9 2",
1120
+ heading2Desc: "\uC911\uD615 \uC139\uC158 \uC81C\uBAA9",
1121
+ heading3: "\uC81C\uBAA9 3",
1122
+ heading3Desc: "\uC18C\uD615 \uC139\uC158 \uC81C\uBAA9",
1123
+ bulletList: "\uAE00\uBA38\uB9AC \uAE30\uD638 \uBAA9\uB85D",
1124
+ bulletListDesc: "\uAC04\uB2E8\uD55C \uAE00\uBA38\uB9AC \uAE30\uD638 \uBAA9\uB85D",
1125
+ orderedList: "\uBC88\uD638 \uB9E4\uAE30\uAE30 \uBAA9\uB85D",
1126
+ orderedListDesc: "\uBC88\uD638\uAC00 \uB9E4\uACA8\uC9C4 \uBAA9\uB85D",
1127
+ todoList: "\uD560 \uC77C \uBAA9\uB85D",
1128
+ todoListDesc: "\uCCB4\uD06C\uBC15\uC2A4\uAC00 \uC788\uB294 \uD560 \uC77C \uBAA9\uB85D",
1129
+ quote: "\uC778\uC6A9\uAD6C",
1130
+ quoteDesc: "\uC778\uC6A9\uBB38 \uBE14\uB85D",
1131
+ codeBlock: "\uCF54\uB4DC \uBE14\uB85D",
1132
+ codeBlockDesc: "\uAD6C\uBB38 \uAC15\uC870\uAC00 \uC788\uB294 \uCF54\uB4DC",
1133
+ divider: "\uAD6C\uBD84\uC120",
1134
+ dividerDesc: "\uC2DC\uAC01\uC801 \uAD6C\uBD84\uC120",
1135
+ table: "\uD45C",
1136
+ tableDesc: "\uD45C \uCD94\uAC00",
1137
+ noResults: "\uC77C\uCE58\uD558\uB294 \uBE14\uB85D\uC774 \uC5C6\uC2B5\uB2C8\uB2E4",
1138
+ callout: "\uCF5C\uC544\uC6C3",
1139
+ calloutDesc: "\uC911\uC694\uD55C \uC815\uBCF4\uB97C \uCF5C\uC544\uC6C3 \uBE14\uB85D\uC73C\uB85C \uAC15\uC870\uD569\uB2C8\uB2E4",
1140
+ bookmark: "\uBD81\uB9C8\uD06C \uCE74\uB4DC",
1141
+ bookmarkDesc: "\uB9C1\uD06C\uB97C \uBD81\uB9C8\uD06C \uCE74\uB4DC\uB85C \uC0BD\uC785\uD569\uB2C8\uB2E4",
1142
+ fileCard: "\uD30C\uC77C \uCCA8\uBD80",
1143
+ fileCardDesc: "\uD30C\uC77C \uCE74\uB4DC \uCCA8\uBD80 \uD30C\uC77C\uC744 \uC5C5\uB85C\uB4DC\uD569\uB2C8\uB2E4",
1144
+ formCheckbox: "\uC591\uC2DD \uCCB4\uD06C\uBC15\uC2A4",
1145
+ formCheckboxDesc: "\uB300\uD654\uD615 \uCCB4\uD06C\uBC15\uC2A4 \uD544\uB4DC \uC0BD\uC785",
1146
+ roundCheckbox: "\uC6D0\uD615 \uCCB4\uD06C\uBC15\uC2A4",
1147
+ roundCheckboxDesc: "\uC6D0\uD615 \uB300\uD654\uD615 \uCCB4\uD06C\uBC15\uC2A4 \uC0BD\uC785",
1148
+ formRadio: "\uC591\uC2DD \uB77C\uB514\uC624 \uBC84\uD2BC",
1149
+ formRadioDesc: "\uB300\uD654\uD615 \uB77C\uB514\uC624 \uBC84\uD2BC \uD544\uB4DC \uC0BD\uC785"
1150
+ },
1151
+ floatingMenu: {
1152
+ addBlock: "\uBE14\uB85D \uCD94\uAC00"
1153
+ },
1154
+ linkInput: {
1155
+ placeholder: "\uB9C1\uD06C \uBD99\uC5EC\uB123\uAE30 \uB610\uB294 \uC785\uB825...",
1156
+ invalid: "https://example.com\uACFC \uAC19\uC740 \uC62C\uBC14\uB978 \uB9C1\uD06C\uB97C \uC785\uB825\uD574 \uC8FC\uC138\uC694."
1157
+ },
1158
+ imageInput: {
1159
+ urlTab: "URL",
1160
+ uploadTab: "\uC5C5\uB85C\uB4DC",
1161
+ urlLabel: "\uC774\uBBF8\uC9C0 URL",
1162
+ urlPlaceholder: "https://example.com/image.jpg",
1163
+ uploadLabel: "\uC774\uBBF8\uC9C0 \uC120\uD0DD",
1164
+ uploadPlaceholder: "\uD074\uB9AD\uD558\uC5EC \uC774\uBBF8\uC9C0 \uC5C5\uB85C\uB4DC",
1165
+ uploading: "\uC5C5\uB85C\uB4DC \uC911...",
1166
+ uploadError: "\uC5C5\uB85C\uB4DC \uC2E4\uD328. \uB2E4\uC2DC \uC2DC\uB3C4\uD574 \uC8FC\uC138\uC694.",
1167
+ altLabel: "\uB300\uCCB4 \uD14D\uC2A4\uD2B8 (\uC120\uD0DD \uC0AC\uD56D)",
1168
+ altPlaceholder: "\uC774\uBBF8\uC9C0\uC5D0 \uB300\uD55C \uC124\uBA85...",
1169
+ addBtn: "\uC774\uBBF8\uC9C0 \uCD94\uAC00",
1170
+ cancelBtn: "\uCDE8\uC18C",
1171
+ addFromUrl: "URL\uC5D0\uC11C \uCD94\uAC00"
1172
+ },
1173
+ emojiPicker: {
1174
+ searchPlaceholder: "\uC774\uBAA8\uC9C0 \uAC80\uC0C9",
1175
+ noResults: "\uC774\uBAA8\uC9C0\uB97C \uCC3E\uC744 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4",
1176
+ tryDifferentSearch: "\uB2E4\uB978 \uAC80\uC0C9\uC5B4\uB97C \uC2DC\uB3C4\uD574 \uBCF4\uC138\uC694"
1177
+ },
1178
+ stickerPicker: {
1179
+ searchPlaceholder: "\uC2A4\uD2F0\uCEE4 \uAC80\uC0C9",
1180
+ noResults: "\uAC80\uC0C9\uB41C \uC2A4\uD2F0\uCEE4\uAC00 \uC5C6\uC2B5\uB2C8\uB2E4.",
1181
+ tryDifferentSearch: "\uB2E4\uB978 \uAC80\uC0C9\uC5B4\uB97C \uC2DC\uB3C4\uD574 \uBCF4\uC138\uC694"
1182
+ },
1183
+ emojiSuggestion: {
1184
+ title: "\uC774\uBAA8\uC9C0",
1185
+ noResults: "\uC774\uBAA8\uC9C0\uB97C \uCC3E\uC744 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4",
1186
+ showingCount: "\uCD1D {total}\uAC1C \uC911 \uCC98\uC74C {shown}\uAC1C\uC758 \uC774\uBAA8\uC9C0\uB97C \uD45C\uC2DC \uC911"
1187
+ },
1188
+ formulaSuggestion: {
1189
+ title: "\uD568\uC218",
1190
+ noResults: "\uD568\uC218\uB97C \uCC3E\uC744 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4",
1191
+ sum: "\uBC94\uC704\uC758 \uAC12\uC744 \uD569\uC0B0",
1192
+ avg: "\uBC94\uC704\uC758 \uAC12 \uD3C9\uADE0",
1193
+ min: "\uBC94\uC704\uC758 \uCD5C\uC19F\uAC12",
1194
+ max: "\uBC94\uC704\uC758 \uCD5C\uB313\uAC12",
1195
+ count: "\uBC94\uC704\uC758 \uC22B\uC790 \uC140 \uAC1C\uC218"
1196
+ },
1197
+ tableMenu: {
1198
+ insert3x3: "3x3 \uD45C \uC0BD\uC785",
1199
+ insertTable: "\uD45C \uC0BD\uC785",
1200
+ gridPreview: "{rows}\xD7{cols} \uD45C \uC0BD\uC785",
1201
+ addColumnBefore: "\uC55E\uC5D0 \uC5F4 \uCD94\uAC00",
1202
+ addColumnAfter: "\uB4A4\uC5D0 \uC5F4 \uCD94\uAC00",
1203
+ addRowBefore: "\uC704\uC5D0 \uD589 \uCD94\uAC00",
1204
+ addRowAfter: "\uC544\uB798\uC5D0 \uD589 \uCD94\uAC00",
1205
+ duplicateColumn: "\uC5F4 \uBCF5\uC81C",
1206
+ duplicateRow: "\uD589 \uBCF5\uC81C",
1207
+ clearColumnContents: "\uC5F4 \uB0B4\uC6A9 \uC9C0\uC6B0\uAE30",
1208
+ clearRowContents: "\uD589 \uB0B4\uC6A9 \uC9C0\uC6B0\uAE30",
1209
+ deleteColumn: "\uC5F4 \uC0AD\uC81C",
1210
+ deleteRow: "\uD589 \uC0AD\uC81C",
1211
+ deleteTable: "\uD45C \uC0AD\uC81C",
1212
+ toggleHeaderRow: "\uD5E4\uB354 \uD589 \uC804\uD658",
1213
+ toggleHeaderColumn: "\uD5E4\uB354 \uC5F4 \uC804\uD658",
1214
+ mergeCells: "\uC140 \uBCD1\uD569",
1215
+ splitCell: "\uC140 \uBD84\uD560",
1216
+ openControls: "\uD45C \uCEE8\uD2B8\uB864 \uC5F4\uAE30",
1217
+ cellFormatting: "\uC140 \uC11C\uC2DD",
1218
+ quickAddColumnAfter: "\uC624\uB978\uCABD \uC5F4 \uBE60\uB974\uAC8C \uCD94\uAC00",
1219
+ quickAddRowAfter: "\uC544\uB798 \uD589 \uBE60\uB974\uAC8C \uCD94\uAC00",
1220
+ expandTable: "\uD45C \uD655\uC7A5",
1221
+ dragRow: "\uD589 \uB4DC\uB798\uADF8",
1222
+ dragColumn: "\uC5F4 \uB4DC\uB798\uADF8",
1223
+ resizeBoth: "\uD45C \uD06C\uAE30 \uC870\uC808",
1224
+ resizeCtrlHint: "\uC790\uC720\uB86D\uAC8C \uB4DC\uB798\uADF8\uD569\uB2C8\uB2E4. Ctrl \uD0A4\uB97C \uB204\uB974\uBA74 \uD55C \uCD95\uC73C\uB85C \uACE0\uC815\uB418\uACE0, Ctrl+Shift \uD0A4\uB97C \uB204\uB974\uBA74 \uBE44\uC728\uC774 \uC720\uC9C0\uB429\uB2C8\uB2E4",
1225
+ alignLeft: "\uD45C \uC67C\uCABD \uC815\uB82C",
1226
+ alignCenter: "\uD45C \uAC00\uC6B4\uB370 \uC815\uB82C",
1227
+ alignRight: "\uD45C \uC624\uB978\uCABD \uC815\uB82C",
1228
+ cellBackground: "\uC140 \uBC30\uACBD\uC0C9",
1229
+ cellBorder: "\uC140 \uD14C\uB450\uB9AC",
1230
+ borderStyle: "\uD14C\uB450\uB9AC \uC2A4\uD0C0\uC77C",
1231
+ borderWidth: "\uD14C\uB450\uB9AC \uB450\uAED8",
1232
+ borderColor: "\uD14C\uB450\uB9AC \uC0C9\uC0C1",
1233
+ borderPosition: "\uD14C\uB450\uB9AC \uC704\uCE58",
1234
+ borderMode: "\uD14C\uB450\uB9AC \uBAA8\uB4DC",
1235
+ borderDraw: "\uD14C\uB450\uB9AC \uADF8\uB9AC\uAE30",
1236
+ borderErase: "\uD14C\uB450\uB9AC \uC228\uAE30\uAE30",
1237
+ borderAll: "\uBAA8\uB4E0 \uD14C\uB450\uB9AC",
1238
+ borderOuter: "\uBC14\uAE65\uCABD \uD14C\uB450\uB9AC",
1239
+ borderInner: "\uC548\uCABD \uD14C\uB450\uB9AC",
1240
+ borderHorizontal: "\uC548\uCABD \uAC00\uB85C \uD14C\uB450\uB9AC",
1241
+ borderVertical: "\uC548\uCABD \uC138\uB85C \uD14C\uB450\uB9AC",
1242
+ borderTop: "\uC704\uCABD \uD14C\uB450\uB9AC",
1243
+ borderRight: "\uC624\uB978\uCABD \uD14C\uB450\uB9AC",
1244
+ borderBottom: "\uC544\uB798\uCABD \uD14C\uB450\uB9AC",
1245
+ borderLeft: "\uC67C\uCABD \uD14C\uB450\uB9AC",
1246
+ clearBorder: "\uD14C\uB450\uB9AC \uC9C0\uC6B0\uAE30",
1247
+ formula: "\uC218\uC2DD",
1248
+ formulaBar: "\uC218\uC2DD \uC785\uB825\uC904",
1249
+ formulaError: "\uC218\uC2DD \uC624\uB958",
1250
+ editFormula: "\uC218\uC2DD \uD3B8\uC9D1",
1251
+ clearCell: "\uC140 \uB0B4\uC6A9 \uC0AD\uC81C",
1252
+ convertToValue: "\uAC12\uC73C\uB85C \uBCC0\uD658",
1253
+ numberFormat: "\uD45C\uC2DC \uD615\uC2DD",
1254
+ formatText: "\uD14D\uC2A4\uD2B8",
1255
+ formatDate: "\uB0A0\uC9DC",
1256
+ apply: "\uC801\uC6A9",
1257
+ clear: "\uC9C0\uC6B0\uAE30",
1258
+ recalculate: "\uB2E4\uC2DC \uACC4\uC0B0",
1259
+ done: "\uC644\uB8CC",
1260
+ alignVertical: "\uC138\uB85C \uB9DE\uCDA4",
1261
+ alignVerticalTop: "\uC704\uCABD \uB9DE\uCDA4",
1262
+ alignVerticalMiddle: "\uAC00\uC6B4\uB370 \uB9DE\uCDA4",
1263
+ alignVerticalBottom: "\uC544\uB798\uCABD \uB9DE\uCDA4",
1264
+ textDirection: "\uD14D\uC2A4\uD2B8 \uBC29\uD5A5",
1265
+ horizontalText: "\uAC00\uB85C\uC4F0\uAE30",
1266
+ verticalText: "\uC138\uB85C\uC4F0\uAE30"
1267
+ },
1268
+ callout: {
1269
+ selectEmoji: "\uC774\uBAA8\uC9C0 \uC120\uD0DD",
1270
+ backgroundColor: "\uBC30\uACBD \uC0C9\uC0C1"
1271
+ },
1272
+ radio: {
1273
+ groupName: "\uADF8\uB8F9 \uC774\uB984",
1274
+ editGroup: "\uADF8\uB8F9 \uC774\uB984 \uD3B8\uC9D1"
1275
+ },
1276
+ bookmark: {
1277
+ clickToOpenNewTab: "\uD074\uB9AD\uD558\uC5EC \uC774 \uB9C1\uD06C\uB97C \uC0C8 \uD0ED\uC5D0\uC11C \uC5FD\uB2C8\uB2E4.",
1278
+ clickToOpenLink: "\uD074\uB9AD\uD558\uC5EC \uB9C1\uD06C\uB97C \uC5FD\uB2C8\uB2E4.",
1279
+ noDescription: "\uC124\uBA85\uC774 \uC5C6\uC2B5\uB2C8\uB2E4.",
1280
+ failedToLoad: "\uB9C1\uD06C \uBBF8\uB9AC\uBCF4\uAE30\uB97C \uBD88\uB7EC\uC624\uC9C0 \uBABB\uD588\uC2B5\uB2C8\uB2E4. \uD074\uB9AD\uD558\uC5EC \uB9C1\uD06C\uB97C \uC5FD\uB2C8\uB2E4.",
1281
+ previewFailed: "\uBBF8\uB9AC\uBCF4\uAE30\uB97C \uBD88\uB7EC\uC624\uC9C0 \uBABB\uD588\uC2B5\uB2C8\uB2E4",
1282
+ retryPreview: "\uB2E4\uC2DC \uC2DC\uB3C4"
1283
+ },
1284
+ fileCard: {
1285
+ unnamed: "\uC774\uB984 \uC5C6\uB294 \uD30C\uC77C",
1286
+ uploading: "(\uC5C5\uB85C\uB4DC \uC911...)",
1287
+ uploadFailed: "\uC5C5\uB85C\uB4DC\uC5D0 \uC2E4\uD328\uD588\uC2B5\uB2C8\uB2E4.",
1288
+ retryUpload: "\uB2E4\uC2DC \uC5C5\uB85C\uB4DC"
1289
+ },
1290
+ menubar: {
1291
+ file: "\uD30C\uC77C",
1292
+ edit: "\uD3B8\uC9D1",
1293
+ view: "\uBCF4\uAE30",
1294
+ insert: "\uC0BD\uC785",
1295
+ format: "\uC11C\uC2DD",
1296
+ tools: "\uB3C4\uAD6C",
1297
+ table: "\uD45C",
1298
+ save: "\uC800\uC7A5",
1299
+ exportHtml: "HTML \uCD94\uCD9C",
1300
+ undo: "\uC2E4\uD589 \uCDE8\uC18C",
1301
+ undoShortcut: "Ctrl+Z",
1302
+ redo: "\uB2E4\uC2DC \uC2E4\uD589",
1303
+ redoShortcut: "Ctrl+Y",
1304
+ cut: "\uC798\uB77C\uB0B4\uAE30",
1305
+ cutShortcut: "Ctrl+X",
1306
+ copy: "\uBCF5\uC0AC",
1307
+ copyShortcut: "Ctrl+C",
1308
+ paste: "\uBD99\uC5EC\uB123\uAE30",
1309
+ pasteShortcut: "Ctrl+V",
1310
+ pasteAsText: "\uC77C\uBC18 \uD14D\uC2A4\uD2B8\uB85C \uBD99\uC5EC\uB123\uAE30",
1311
+ selectAll: "\uC804\uCCB4 \uC120\uD0DD",
1312
+ selectAllShortcut: "Ctrl+A",
1313
+ sourceCode: "\uC18C\uC2A4 \uCF54\uB4DC",
1314
+ preview: "\uBBF8\uB9AC\uBCF4\uAE30",
1315
+ fullscreen: "\uC804\uCCB4 \uD654\uBA74",
1316
+ fullscreenShortcut: "Ctrl+Shift+F",
1317
+ image: "\uC774\uBBF8\uC9C0",
1318
+ link: "\uB9C1\uD06C",
1319
+ linkShortcut: "Ctrl+K",
1320
+ insertTable: "\uD45C",
1321
+ horizontalRule: "\uAC00\uB85C\uC904",
1322
+ bold: "\uAD75\uAC8C",
1323
+ boldShortcut: "Ctrl+B",
1324
+ italic: "\uAE30\uC6B8\uC784\uAF34",
1325
+ italicShortcut: "Ctrl+I",
1326
+ underline: "\uBC11\uC904",
1327
+ underlineShortcut: "Ctrl+U",
1328
+ strike: "\uCDE8\uC18C\uC120",
1329
+ superscript: "\uC704 \uCCA8\uC790",
1330
+ subscript: "\uC544\uB798 \uCCA8\uC790",
1331
+ code: "\uCF54\uB4DC",
1332
+ wrap: "\uBE14\uB85D",
1333
+ align: "\uC815\uB82C",
1334
+ clearFormatting: "\uC11C\uC2DD \uC9C0\uC6B0\uAE30",
1335
+ paragraph: "\uB2E8\uB77D",
1336
+ heading1: "\uC81C\uBAA9 1",
1337
+ heading2: "\uC81C\uBAA9 2",
1338
+ heading3: "\uC81C\uBAA9 3",
1339
+ blockquote: "\uC778\uC6A9",
1340
+ codeBlock: "\uCF54\uB4DC \uBE14\uB85D",
1341
+ taskList: "\uC791\uC5C5 \uBAA9\uB85D",
1342
+ alignLeft: "\uC67C\uCABD",
1343
+ alignCenter: "\uAC00\uC6B4\uB370",
1344
+ alignRight: "\uC624\uB978\uCABD",
1345
+ alignJustify: "\uC591\uCABD",
1346
+ tableProperties: "\uD45C \uC18D\uC131",
1347
+ deleteTable: "\uD45C \uC0AD\uC81C",
1348
+ row: "\uD589",
1349
+ column: "\uC5F4",
1350
+ cell: "\uC140",
1351
+ addRowBefore: "\uC704\uC5D0 \uD589 \uC0BD\uC785",
1352
+ addRowAfter: "\uC544\uB798\uC5D0 \uD589 \uC0BD\uC785",
1353
+ deleteRow: "\uD589 \uC0AD\uC81C",
1354
+ addColumnBefore: "\uC67C\uCABD\uC5D0 \uC5F4 \uC0BD\uC785",
1355
+ addColumnAfter: "\uC624\uB978\uCABD\uC5D0 \uC5F4 \uC0BD\uC785",
1356
+ deleteColumn: "\uC5F4 \uC0AD\uC81C",
1357
+ mergeCells: "\uC140 \uBCD1\uD569",
1358
+ splitCell: "\uC140 \uBD84\uD560",
1359
+ imageUpload: "\uC774\uBBF8\uC9C0 \uC5C5\uB85C\uB4DC",
1360
+ formFields: "\uC591\uC2DD \uD544\uB4DC",
1361
+ formCheckbox: "\uC591\uC2DD \uCCB4\uD06C\uBC15\uC2A4",
1362
+ formRadio: "\uC591\uC2DD \uB77C\uB514\uC624 \uBC84\uD2BC",
1363
+ applySource: "\uC801\uC6A9",
1364
+ closeDialog: "\uB2EB\uAE30",
1365
+ copyHtml: "HTML \uBCF5\uC0AC",
1366
+ exportDefault: "HTML \uCD94\uCD9C",
1367
+ previewEmpty: "\uBBF8\uB9AC\uBCFC \uB0B4\uC6A9\uC774 \uC5C6\uC2B5\uB2C8\uB2E4.",
1368
+ sourceCodeHint: "HTML\uC744 \uC9C1\uC811 \uD3B8\uC9D1\uD558\uACE0 \uC801\uC6A9\uC744 \uD074\uB9AD\uD558\uC5EC \uC5D0\uB514\uD130\uB97C \uC5C5\uB370\uC774\uD2B8\uD558\uC138\uC694."
1369
+ }
1370
+ }
1371
+ };
1372
+
1373
+ // locales/ja.json
1374
+ var ja_default = {
1375
+ Common: {
1376
+ close: "\u9589\u3058\u308B",
1377
+ closeAlert: "\u30A2\u30E9\u30FC\u30C8\u3092\u9589\u3058\u308B",
1378
+ notifications: "\u901A\u77E5",
1379
+ newNotification: "\u65B0\u898F",
1380
+ readStatus: "\u65E2\u8AAD",
1381
+ openLink: "\u30EA\u30F3\u30AF\u3092\u958B\u304F",
1382
+ theme: "\u30C6\u30FC\u30DE",
1383
+ lightTheme: "\u30E9\u30A4\u30C8",
1384
+ darkTheme: "\u30C0\u30FC\u30AF",
1385
+ systemTheme: "\u30B7\u30B9\u30C6\u30E0",
1386
+ density: "\u5BC6\u5EA6",
1387
+ compact: "\u30B3\u30F3\u30D1\u30AF\u30C8",
1388
+ normal: "\u901A\u5E38",
1389
+ comfortable: "\u3086\u3063\u305F\u308A",
1390
+ columns: "\u5217",
1391
+ loading: "\u8AAD\u307F\u8FBC\u307F\u4E2D",
1392
+ noData: "\u30C7\u30FC\u30BF\u304C\u3042\u308A\u307E\u305B\u3093",
1393
+ clearFilter: "\u30D5\u30A3\u30EB\u30BF\u30FC\u3092\u30AF\u30EA\u30A2",
1394
+ selectAll: "\u3059\u3079\u3066\u9078\u629E",
1395
+ default: "\u30C7\u30D5\u30A9\u30EB\u30C8",
1396
+ other: "\u305D\u306E\u4ED6",
1397
+ headerAlign: "\u30D8\u30C3\u30C0\u30FC\u914D\u7F6E",
1398
+ alignLeft: "\u5DE6\u63C3\u3048",
1399
+ alignCenter: "\u4E2D\u592E\u63C3\u3048",
1400
+ alignRight: "\u53F3\u63C3\u3048"
1401
+ },
1402
+ ValidationInput: {
1403
+ required: "\u3053\u306E\u9805\u76EE\u306F\u5FC5\u9808\u3067\u3059",
1404
+ typeMismatch: "\u5F62\u5F0F\u304C\u6B63\u3057\u304F\u3042\u308A\u307E\u305B\u3093",
1405
+ pattern: "\u30D1\u30BF\u30FC\u30F3\u304C\u4E00\u81F4\u3057\u307E\u305B\u3093",
1406
+ tooShort: "\u77ED\u3059\u304E\u307E\u3059",
1407
+ tooLong: "\u9577\u3059\u304E\u307E\u3059",
1408
+ rangeUnderflow: "\u6700\u5C0F\u5024\u3088\u308A\u5C0F\u3055\u3044\u3067\u3059",
1409
+ rangeOverflow: "\u6700\u5927\u5024\u3092\u8D85\u3048\u3066\u3044\u307E\u3059",
1410
+ stepMismatch: "\u30B9\u30C6\u30C3\u30D7\u304C\u4E00\u81F4\u3057\u307E\u305B\u3093",
1411
+ badInput: "\u5165\u529B\u304C\u7121\u52B9\u3067\u3059",
1412
+ invalid: "\u7121\u52B9\u306A\u5024\u3067\u3059"
1413
+ },
1414
+ Loading: {
1415
+ loadingPage: "\u30DA\u30FC\u30B8\u3092\u8AAD\u307F\u8FBC\u307F\u4E2D",
1416
+ pleaseWait: "\u3057\u3070\u3089\u304F\u304A\u5F85\u3061\u304F\u3060\u3055\u3044"
1417
+ },
1418
+ DatePicker: {
1419
+ placeholder: "\u65E5\u4ED8\u3092\u9078\u629E",
1420
+ today: "\u4ECA\u65E5",
1421
+ clear: "\u30AF\u30EA\u30A2",
1422
+ lunarFormat: "{year}\u5E74{month}\u6708{day}\u65E5",
1423
+ lunarLeapFormat: "{year}\u5E74\u958F{month}\u6708{day}\u65E5",
1424
+ lunarMonth: "{month}\u6708",
1425
+ lunarLeap: "\u958F\u6708"
1426
+ },
1427
+ DateTimePicker: {
1428
+ time: "\u6642\u9593",
1429
+ clear: "\u30AF\u30EA\u30A2",
1430
+ done: "\u5B8C\u4E86"
1431
+ },
1432
+ CalendarTimeline: {
1433
+ today: "\u4ECA\u65E5",
1434
+ prev: "\u524D\u3078",
1435
+ next: "\u6B21\u3078",
1436
+ month: "\u6708",
1437
+ week: "\u9031",
1438
+ day: "\u65E5",
1439
+ sprint: "\u30B9\u30D7\u30EA\u30F3\u30C8",
1440
+ newEvent: "\u65B0\u898F\u30A4\u30D9\u30F3\u30C8",
1441
+ createEventTitle: "\u30A4\u30D9\u30F3\u30C8\u4F5C\u6210",
1442
+ create: "\u4F5C\u6210",
1443
+ cancel: "\u30AD\u30E3\u30F3\u30BB\u30EB",
1444
+ resource: "\u30EA\u30BD\u30FC\u30B9",
1445
+ start: "\u958B\u59CB",
1446
+ end: "\u7D42\u4E86",
1447
+ resourcesHeader: "\u30EA\u30BD\u30FC\u30B9",
1448
+ expandGroup: "\u30B0\u30EB\u30FC\u30D7\u3092\u5C55\u958B",
1449
+ collapseGroup: "\u30B0\u30EB\u30FC\u30D7\u3092\u6298\u308A\u305F\u305F\u3080",
1450
+ more: "+{n}\u4EF6",
1451
+ sprints: "{n} \u30B9\u30D7\u30EA\u30F3\u30C8",
1452
+ deleteConfirm: "\u524A\u9664\u3057\u307E\u3059\u304B\uFF1F"
1453
+ },
1454
+ Pagination: {
1455
+ navigationLabel: "\u30DA\u30FC\u30B8\u30CA\u30D3\u30B2\u30FC\u30B7\u30E7\u30F3",
1456
+ showingResults: "{startItem}\u2013{endItem} / \u5168{totalItems}\u4EF6",
1457
+ firstPage: "\u6700\u521D\u306E\u30DA\u30FC\u30B8",
1458
+ previousPage: "\u524D\u306E\u30DA\u30FC\u30B8",
1459
+ previous: "\u524D\u3078",
1460
+ nextPage: "\u6B21\u306E\u30DA\u30FC\u30B8",
1461
+ next: "\u6B21\u3078",
1462
+ lastPage: "\u6700\u5F8C\u306E\u30DA\u30FC\u30B8",
1463
+ pageNumber: "{page}\u30DA\u30FC\u30B8",
1464
+ itemsPerPage: "1\u30DA\u30FC\u30B8\u3042\u305F\u308A\u306E\u9805\u76EE\u6570",
1465
+ search: "\u691C\u7D22",
1466
+ noOptions: "\u30AA\u30D7\u30B7\u30E7\u30F3\u306A\u3057"
1467
+ },
1468
+ OCR: {
1469
+ imageUpload: {
1470
+ dragDropText: "\u3053\u3053\u306B\u30D5\u30A1\u30A4\u30EB\u3092\u30C9\u30E9\u30C3\u30B0\uFF06\u30C9\u30ED\u30C3\u30D7",
1471
+ browseFiles: "\u30D5\u30A1\u30A4\u30EB\u3092\u53C2\u7167",
1472
+ supportedFormats: "\u5BFE\u5FDC\u5F62\u5F0F\uFF1A\u753B\u50CF"
1473
+ }
1474
+ },
1475
+ FileUpload: {
1476
+ dragDropText: "\u3053\u3053\u306B\u30D5\u30A1\u30A4\u30EB\u3092\u30C9\u30E9\u30C3\u30B0\uFF06\u30C9\u30ED\u30C3\u30D7",
1477
+ browseFiles: "\u30D5\u30A1\u30A4\u30EB\u3092\u9078\u629E",
1478
+ uploadFiles: "\u30D5\u30A1\u30A4\u30EB\u3092\u30A2\u30C3\u30D7\u30ED\u30FC\u30C9",
1479
+ supportedFormats: "\u3059\u3079\u3066\u306E\u30D5\u30A1\u30A4\u30EB\u5F62\u5F0F\u306B\u5BFE\u5FDC",
1480
+ uploadedFiles: "\u30A2\u30C3\u30D7\u30ED\u30FC\u30C9\u3055\u308C\u305F\u30D5\u30A1\u30A4\u30EB",
1481
+ clearAll: "\u3059\u3079\u3066\u30AF\u30EA\u30A2",
1482
+ fileTooLarge: "\u30B5\u30A4\u30BA\u5236\u9650\u3092\u8D85\u3048\u3066\u3044\u307E\u3059\u3002",
1483
+ maxFilesReached: "\u6700\u5927\u30D5\u30A1\u30A4\u30EB\u6570\u306B\u9054\u3057\u307E\u3057\u305F\u3002",
1484
+ uploadSuccess: "\u30A2\u30C3\u30D7\u30ED\u30FC\u30C9\u3057\u307E\u3057\u305F\u3002",
1485
+ uploadFailed: "\u30A2\u30C3\u30D7\u30ED\u30FC\u30C9\u306B\u5931\u6557\u3057\u307E\u3057\u305F\u3002"
1486
+ },
1487
+ UEditor: {
1488
+ placeholder: "\u30B3\u30DE\u30F3\u30C9\u3092\u4F7F\u7528\u3059\u308B\u306B\u306F '/' \u3092\u5165\u529B\u3001\u307E\u305F\u306F\u5165\u529B\u3092\u958B\u59CB...",
1489
+ loading: "\u30A8\u30C7\u30A3\u30BF\u3092\u8AAD\u307F\u8FBC\u307F\u4E2D...",
1490
+ words: "\u5358\u8A9E",
1491
+ characters: "\u6587\u5B57",
1492
+ colors: {
1493
+ default: "\u30C7\u30D5\u30A9\u30EB\u30C8",
1494
+ muted: "\u30DF\u30E5\u30FC\u30C8",
1495
+ primary: "\u30D7\u30E9\u30A4\u30DE\u30EA",
1496
+ secondary: "\u30BB\u30AB\u30F3\u30C0\u30EA",
1497
+ success: "\u6210\u529F",
1498
+ warning: "\u8B66\u544A",
1499
+ destructive: "\u7834\u58CA\u7684",
1500
+ info: "\u60C5\u5831",
1501
+ accent: "\u30A2\u30AF\u30BB\u30F3\u30C8",
1502
+ textColor: "\u30C6\u30AD\u30B9\u30C8\u8272",
1503
+ highlight: "\u30CF\u30A4\u30E9\u30A4\u30C8",
1504
+ automatic: "\u81EA\u52D5",
1505
+ moreColors: "\u305D\u306E\u4ED6\u306E\u8272...",
1506
+ color: "\u8272",
1507
+ done: "\u5B8C\u4E86"
1508
+ },
1509
+ toolbar: {
1510
+ bold: "\u592A\u5B57",
1511
+ boldShortcut: "\u592A\u5B57 (Ctrl+B)",
1512
+ italic: "\u659C\u4F53",
1513
+ italicShortcut: "\u659C\u4F53 (Ctrl+I)",
1514
+ underline: "\u4E0B\u7DDA",
1515
+ underlineShortcut: "\u4E0B\u7DDA (Ctrl+U)",
1516
+ strike: "\u53D6\u308A\u6D88\u3057\u7DDA",
1517
+ code: "\u30B3\u30FC\u30C9",
1518
+ subscript: "\u4E0B\u4ED8\u304D",
1519
+ superscript: "\u4E0A\u4ED8\u304D",
1520
+ link: "\u30EA\u30F3\u30AF",
1521
+ removeLink: "\u30EA\u30F3\u30AF\u3092\u89E3\u9664",
1522
+ image: "\u753B\u50CF",
1523
+ table: "\u8868",
1524
+ alignment: "\u914D\u7F6E",
1525
+ alignLeft: "\u5DE6\u63C3\u3048",
1526
+ alignCenter: "\u4E2D\u592E\u63C3\u3048",
1527
+ alignRight: "\u53F3\u63C3\u3048",
1528
+ justify: "\u4E21\u7AEF\u63C3\u3048",
1529
+ decreaseIndent: "\u30A4\u30F3\u30C7\u30F3\u30C8\u3092\u6E1B\u3089\u3059",
1530
+ increaseIndent: "\u30A4\u30F3\u30C7\u30F3\u30C8\u3092\u5897\u3084\u3059",
1531
+ bulletList: "\u7B87\u6761\u66F8\u304D",
1532
+ orderedList: "\u756A\u53F7\u4ED8\u304D\u30EA\u30B9\u30C8",
1533
+ taskList: "\u30BF\u30B9\u30AF\u30EA\u30B9\u30C8",
1534
+ quote: "\u5F15\u7528",
1535
+ codeBlock: "\u30B3\u30FC\u30C9\u30D6\u30ED\u30C3\u30AF",
1536
+ undo: "\u5143\u306B\u623B\u3059",
1537
+ redo: "\u3084\u308A\u76F4\u3057",
1538
+ textStyle: "\u30C6\u30AD\u30B9\u30C8\u30B9\u30BF\u30A4\u30EB",
1539
+ fontFamily: "\u30D5\u30A9\u30F3\u30C8",
1540
+ fontSize: "\u6587\u5B57\u30B5\u30A4\u30BA",
1541
+ lineHeight: "\u884C\u9593",
1542
+ fontDefault: "\u6A19\u6E96\u30D5\u30A9\u30F3\u30C8",
1543
+ sizeDefault: "\u6A19\u6E96\u30B5\u30A4\u30BA",
1544
+ lineHeightDefault: "\u6A19\u6E96\u306E\u884C\u9593",
1545
+ letterSpacing: "\u6587\u5B57\u9593\u9694",
1546
+ letterSpacingDefault: "\u6A19\u6E96\u306E\u5B57\u9593",
1547
+ fontSans: "Sans",
1548
+ fontSerif: "Serif",
1549
+ fontMono: "Mono",
1550
+ normal: "\u6A19\u6E96\u30C6\u30AD\u30B9\u30C8",
1551
+ heading1: "\u898B\u51FA\u3057 1",
1552
+ heading2: "\u898B\u51FA\u3057 2",
1553
+ heading3: "\u898B\u51FA\u3057 3",
1554
+ emoji: "\u7D75\u6587\u5B57\u3092\u633F\u5165",
1555
+ imageLayoutBlock: "\u753B\u50CF\u30D6\u30ED\u30C3\u30AF",
1556
+ imageLayoutLeft: "\u753B\u50CF\u3092\u5DE6\u3001\u6587\u5B57\u3092\u53F3\u306B\u56DE\u308A\u8FBC\u307F",
1557
+ imageLayoutRight: "\u753B\u50CF\u3092\u53F3\u3001\u6587\u5B57\u3092\u5DE6\u306B\u56DE\u308A\u8FBC\u307F",
1558
+ imageWidthSm: "\u753B\u50CF\uFF08\u5C0F\uFF09",
1559
+ imageWidthMd: "\u753B\u50CF\uFF08\u4E2D\uFF09",
1560
+ imageWidthLg: "\u753B\u50CF\uFF08\u5927\uFF09",
1561
+ imageResetSize: "\u753B\u50CF\u30B5\u30A4\u30BA\u3092\u30EA\u30BB\u30C3\u30C8",
1562
+ imageDelete: "\u753B\u50CF\u3092\u524A\u9664"
1563
+ },
1564
+ slashCommand: {
1565
+ basicBlocks: "\u57FA\u672C\u30D6\u30ED\u30C3\u30AF",
1566
+ text: "\u30C6\u30AD\u30B9\u30C8",
1567
+ textDesc: "\u30D7\u30EC\u30FC\u30F3\u30C6\u30AD\u30B9\u30C8\u30D6\u30ED\u30C3\u30AF",
1568
+ heading1: "\u898B\u51FA\u3057 1",
1569
+ heading1Desc: "\u5927\u898B\u51FA\u3057",
1570
+ heading2: "\u898B\u51FA\u3057 2",
1571
+ heading2Desc: "\u4E2D\u898B\u51FA\u3057",
1572
+ heading3: "\u898B\u51FA\u3057 3",
1573
+ heading3Desc: "\u5C0F\u898B\u51FA\u3057",
1574
+ bulletList: "\u7B87\u6761\u66F8\u304D",
1575
+ bulletListDesc: "\u30B7\u30F3\u30D7\u30EB\u306A\u7B87\u6761\u66F8\u304D\u30EA\u30B9\u30C8",
1576
+ orderedList: "\u756A\u53F7\u4ED8\u304D\u30EA\u30B9\u30C8",
1577
+ orderedListDesc: "\u756A\u53F7\u9806\u306E\u30EA\u30B9\u30C8",
1578
+ todoList: "\u30BF\u30B9\u30AF\u30EA\u30B9\u30C8",
1579
+ todoListDesc: "\u30C1\u30A7\u30C3\u30AF\u30DC\u30C3\u30AF\u30B9\u4ED8\u304D\u30EA\u30B9\u30C8",
1580
+ quote: "\u5F15\u7528",
1581
+ quoteDesc: "\u5F15\u7528\u30D6\u30ED\u30C3\u30AF",
1582
+ codeBlock: "\u30B3\u30FC\u30C9\u30D6\u30ED\u30C3\u30AF",
1583
+ codeBlockDesc: "\u30B7\u30F3\u30BF\u30C3\u30AF\u30B9\u30CF\u30A4\u30E9\u30A4\u30C8\u4ED8\u304D\u30B3\u30FC\u30C9",
1584
+ divider: "\u533A\u5207\u308A\u7DDA",
1585
+ dividerDesc: "\u8996\u899A\u7684\u306A\u533A\u5207\u308A\u7DDA",
1586
+ table: "\u8868",
1587
+ tableDesc: "\u8868\u3092\u8FFD\u52A0",
1588
+ noResults: "\u4E00\u81F4\u3059\u308B\u30D6\u30ED\u30C3\u30AF\u304C\u898B\u3064\u304B\u308A\u307E\u305B\u3093",
1589
+ callout: "\u30B3\u30FC\u30EB\u30A2\u30A6\u30C8",
1590
+ calloutDesc: "\u91CD\u8981\u306A\u60C5\u5831\u3092\u30B3\u30FC\u30EB\u30A2\u30A6\u30C8\u30D6\u30ED\u30C3\u30AF\u3067\u5F37\u8ABF\u3057\u307E\u3059",
1591
+ bookmark: "\u30D6\u30C3\u30AF\u30DE\u30FC\u30AF\u30AB\u30FC\u30C9",
1592
+ bookmarkDesc: "\u30EA\u30F3\u30AF\u3092\u30D6\u30C3\u30AF\u30DE\u30FC\u30AF\u30AB\u30FC\u30C9\u3068\u3057\u3066\u57CB\u3081\u8FBC\u307F\u307E\u3059",
1593
+ fileCard: "\u30D5\u30A1\u30A4\u30EB\u6DFB\u4ED8",
1594
+ fileCardDesc: "\u30D5\u30A1\u30A4\u30EB\u30AB\u30FC\u30C9\u306E\u6DFB\u4ED8\u30D5\u30A1\u30A4\u30EB\u3092\u30A2\u30C3\u30D7\u30ED\u30FC\u30C9\u3057\u307E\u3059",
1595
+ formCheckbox: "\u30D5\u30A9\u30FC\u30E0\u30C1\u30A7\u30C3\u30AF\u30DC\u30C3\u30AF\u30B9",
1596
+ formCheckboxDesc: "\u30A4\u30F3\u30BF\u30E9\u30AF\u30C6\u30A3\u30D6\u306A\u30C1\u30A7\u30C3\u30AF\u30DC\u30C3\u30AF\u30B9\u3092\u633F\u5165\u3057\u307E\u3059",
1597
+ roundCheckbox: "\u4E38\u578B\u30C1\u30A7\u30C3\u30AF\u30DC\u30C3\u30AF\u30B9",
1598
+ roundCheckboxDesc: "\u4E38\u578B\u306E\u30A4\u30F3\u30BF\u30E9\u30AF\u30C6\u30A3\u30D6\u306A\u30C1\u30A7\u30C3\u30AF\u30DC\u30C3\u30AF\u30B9\u3092\u633F\u5165\u3057\u307E\u3059",
1599
+ formRadio: "\u30D5\u30A9\u30FC\u30E0\u30E9\u30B8\u30AA\u30DC\u30BF\u30F3",
1600
+ formRadioDesc: "\u30A4\u30F3\u30BF\u30E9\u30AF\u30C6\u30A3\u30D6\u306A\u30E9\u30B8\u30AA\u30DC\u30BF\u30F3\u3092\u633F\u5165\u3057\u307E\u3059"
1601
+ },
1602
+ floatingMenu: {
1603
+ addBlock: "\u30D6\u30ED\u30C3\u30AF\u3092\u8FFD\u52A0"
1604
+ },
1605
+ linkInput: {
1606
+ placeholder: "\u30EA\u30F3\u30AF\u3092\u8CBC\u308A\u4ED8\u3051\u307E\u305F\u306F\u5165\u529B...",
1607
+ invalid: "https://example.com \u306E\u3088\u3046\u306A\u6709\u52B9\u306A\u30EA\u30F3\u30AF\u3092\u5165\u529B\u3057\u3066\u304F\u3060\u3055\u3044\u3002"
1608
+ },
1609
+ imageInput: {
1610
+ urlTab: "URL",
1611
+ uploadTab: "\u30A2\u30C3\u30D7\u30ED\u30FC\u30C9",
1612
+ urlLabel: "\u753B\u50CF URL",
1613
+ urlPlaceholder: "https://example.com/image.jpg",
1614
+ uploadLabel: "\u753B\u50CF\u3092\u9078\u629E",
1615
+ uploadPlaceholder: "\u30AF\u30EA\u30C3\u30AF\u3057\u3066\u753B\u50CF\u3092\u30A2\u30C3\u30D7\u30ED\u30FC\u30C9",
1616
+ uploading: "\u30A2\u30C3\u30D7\u30ED\u30FC\u30C9\u4E2D...",
1617
+ uploadError: "\u30A2\u30C3\u30D7\u30ED\u30FC\u30C9\u5931\u6557\u3002\u3082\u3046\u4E00\u5EA6\u304A\u8A66\u3057\u304F\u3060\u3055\u3044\u3002",
1618
+ altLabel: "\u4EE3\u66FF\u30C6\u30AD\u30B9\u30C8 (\u4EFB\u610F)",
1619
+ altPlaceholder: "\u753B\u50CF\u306E\u8AAC\u660E...",
1620
+ addBtn: "\u753B\u50CF\u3092\u8FFD\u52A0",
1621
+ cancelBtn: "\u30AD\u30E3\u30F3\u30BB\u30EB",
1622
+ addFromUrl: "URL\u304B\u3089\u8FFD\u52A0"
1623
+ },
1624
+ emojiPicker: {
1625
+ searchPlaceholder: "\u7D75\u6587\u5B57\u3092\u691C\u7D22",
1626
+ noResults: "\u7D75\u6587\u5B57\u304C\u898B\u3064\u304B\u308A\u307E\u305B\u3093",
1627
+ tryDifferentSearch: "\u5225\u306E\u30AD\u30FC\u30EF\u30FC\u30C9\u3067\u304A\u8A66\u3057\u304F\u3060\u3055\u3044"
1628
+ },
1629
+ stickerPicker: {
1630
+ searchPlaceholder: "\u30B9\u30C6\u30C3\u30AB\u30FC\u3092\u691C\u7D22",
1631
+ noResults: "\u30B9\u30C6\u30C3\u30AB\u30FC\u304C\u898B\u3064\u304B\u308A\u307E\u305B\u3093",
1632
+ tryDifferentSearch: "\u5225\u306E\u30AD\u30FC\u30EF\u30FC\u30C9\u3067\u304A\u8A66\u3057\u304F\u3060\u3055\u3044"
1633
+ },
1634
+ emojiSuggestion: {
1635
+ title: "\u7D75\u6587\u5B57",
1636
+ noResults: "\u7D75\u6587\u5B57\u304C\u898B\u3064\u304B\u308A\u307E\u305B\u3093",
1637
+ showingCount: "{total} \u4EF6\u4E2D {shown} \u4EF6\u306E\u7D75\u6587\u5B57\u3092\u8868\u793A\u4E2D"
1638
+ },
1639
+ formulaSuggestion: {
1640
+ title: "\u95A2\u6570",
1641
+ noResults: "\u95A2\u6570\u304C\u898B\u3064\u304B\u308A\u307E\u305B\u3093",
1642
+ sum: "\u7BC4\u56F2\u5185\u306E\u5024\u3092\u5408\u8A08",
1643
+ avg: "\u7BC4\u56F2\u5185\u306E\u5024\u306E\u5E73\u5747",
1644
+ min: "\u7BC4\u56F2\u5185\u306E\u6700\u5C0F\u5024",
1645
+ max: "\u7BC4\u56F2\u5185\u306E\u6700\u5927\u5024",
1646
+ count: "\u7BC4\u56F2\u5185\u306E\u6570\u5024\u30BB\u30EB\u3092\u30AB\u30A6\u30F3\u30C8"
1647
+ },
1648
+ tableMenu: {
1649
+ insert3x3: "3x3 \u8868\u3092\u633F\u5165",
1650
+ insertTable: "\u8868\u3092\u633F\u5165",
1651
+ gridPreview: "{rows}\xD7{cols} \u306E\u8868\u3092\u633F\u5165",
1652
+ addColumnBefore: "\u524D\u306B\u5217\u3092\u8FFD\u52A0",
1653
+ addColumnAfter: "\u5F8C\u306B\u5217\u3092\u8FFD\u52A0",
1654
+ addRowBefore: "\u524D\u306B\u884C\u3092\u8FFD\u52A0",
1655
+ addRowAfter: "\u5F8C\u306B\u884C\u3092\u8FFD\u52A0",
1656
+ duplicateColumn: "\u5217\u3092\u8907\u88FD",
1657
+ duplicateRow: "\u884C\u3092\u8907\u88FD",
1658
+ clearColumnContents: "\u5217\u306E\u5185\u5BB9\u3092\u30AF\u30EA\u30A2",
1659
+ clearRowContents: "\u884C\u306E\u5185\u5BB9\u3092\u30AF\u30EA\u30A2",
1660
+ deleteColumn: "\u5217\u3092\u524A\u9664",
1661
+ deleteRow: "\u884C\u3092\u524A\u9664",
1662
+ deleteTable: "\u8868\u3092\u524A\u9664",
1663
+ toggleHeaderRow: "\u30D8\u30C3\u30C0\u30FC\u884C\u3092\u5207\u308A\u66FF\u3048",
1664
+ toggleHeaderColumn: "\u30D8\u30C3\u30C0\u30FC\u5217\u3092\u5207\u308A\u66FF\u3048",
1665
+ mergeCells: "\u30BB\u30EB\u3092\u7D50\u5408",
1666
+ splitCell: "\u30BB\u30EB\u3092\u5206\u5272",
1667
+ openControls: "\u8868\u30B3\u30F3\u30C8\u30ED\u30FC\u30EB\u3092\u958B\u304F",
1668
+ cellFormatting: "\u30BB\u30EB\u306E\u66F8\u5F0F\u8A2D\u5B9A",
1669
+ quickAddColumnAfter: "\u53F3\u5074\u306B\u5217\u3092\u3059\u3070\u3084\u304F\u8FFD\u52A0",
1670
+ quickAddRowAfter: "\u4E0B\u306B\u884C\u3092\u3059\u3070\u3084\u304F\u8FFD\u52A0",
1671
+ expandTable: "\u8868\u3092\u62E1\u5F35",
1672
+ dragRow: "\u884C\u3092\u30C9\u30E9\u30C3\u30B0",
1673
+ dragColumn: "\u5217\u3092\u30C9\u30E9\u30C3\u30B0",
1674
+ resizeBoth: "\u8868\u306E\u30B5\u30A4\u30BA\u3092\u5909\u66F4",
1675
+ resizeCtrlHint: "\u81EA\u7531\u306B\u30C9\u30E9\u30C3\u30B0\u3067\u304D\u307E\u3059\u3002Ctrl\u30AD\u30FC\u30671\u65B9\u5411\u306B\u56FA\u5B9A\u3057\u3001Ctrl+Shift\u30AD\u30FC\u3067\u7E26\u6A2A\u6BD4\u3092\u7DAD\u6301\u3057\u307E\u3059",
1676
+ alignLeft: "\u8868\u3092\u5DE6\u5BC4\u305B",
1677
+ alignCenter: "\u8868\u3092\u4E2D\u592E\u63C3\u3048",
1678
+ alignRight: "\u8868\u3092\u53F3\u5BC4\u305B",
1679
+ cellBackground: "\u30BB\u30EB\u80CC\u666F\u8272",
1680
+ cellBorder: "\u30BB\u30EB\u306E\u67A0\u7DDA",
1681
+ borderStyle: "\u67A0\u7DDA\u30B9\u30BF\u30A4\u30EB",
1682
+ borderWidth: "\u67A0\u7DDA\u306E\u592A\u3055",
1683
+ borderColor: "\u67A0\u7DDA\u306E\u8272",
1684
+ borderPosition: "\u67A0\u7DDA\u306E\u4F4D\u7F6E",
1685
+ borderMode: "\u67A0\u7DDA\u30E2\u30FC\u30C9",
1686
+ borderDraw: "\u67A0\u7DDA\u3092\u5F15\u304F",
1687
+ borderErase: "\u67A0\u7DDA\u3092\u975E\u8868\u793A",
1688
+ borderAll: "\u3059\u3079\u3066\u306E\u67A0\u7DDA",
1689
+ borderOuter: "\u5916\u67A0",
1690
+ borderInner: "\u5185\u5074\u306E\u67A0\u7DDA",
1691
+ borderHorizontal: "\u5185\u5074\u306E\u6A2A\u7F6B\u7DDA",
1692
+ borderVertical: "\u5185\u5074\u306E\u7E26\u7F6B\u7DDA",
1693
+ borderTop: "\u4E0A\u7F6B\u7DDA",
1694
+ borderRight: "\u53F3\u7F6B\u7DDA",
1695
+ borderBottom: "\u4E0B\u7F6B\u7DDA",
1696
+ borderLeft: "\u5DE6\u7F6B\u7DDA",
1697
+ clearBorder: "\u67A0\u7DDA\u3092\u30AF\u30EA\u30A2",
1698
+ formula: "\u6570\u5F0F",
1699
+ formulaBar: "\u6570\u5F0F\u30D0\u30FC",
1700
+ formulaError: "\u6570\u5F0F\u30A8\u30E9\u30FC",
1701
+ editFormula: "\u6570\u5F0F\u3092\u7DE8\u96C6",
1702
+ clearCell: "\u30BB\u30EB\u3092\u30AF\u30EA\u30A2",
1703
+ convertToValue: "\u5024\u306B\u5909\u63DB",
1704
+ numberFormat: "\u8868\u793A\u5F62\u5F0F",
1705
+ formatText: "\u30C6\u30AD\u30B9\u30C8",
1706
+ formatDate: "\u65E5\u4ED8",
1707
+ apply: "\u9069\u7528",
1708
+ clear: "\u30AF\u30EA\u30A2",
1709
+ recalculate: "\u518D\u8A08\u7B97",
1710
+ done: "\u5B8C\u4E86",
1711
+ alignVertical: "\u5782\u76F4\u63C3\u3048",
1712
+ alignVerticalTop: "\u4E0A\u63C3\u3048",
1713
+ alignVerticalMiddle: "\u4E0A\u4E0B\u4E2D\u592E\u63C3\u3048",
1714
+ alignVerticalBottom: "\u4E0B\u63C3\u3048",
1715
+ textDirection: "\u6587\u5B57\u65B9\u5411",
1716
+ horizontalText: "\u6A2A\u66F8\u304D",
1717
+ verticalText: "\u7E26\u66F8\u304D"
1718
+ },
1719
+ callout: {
1720
+ selectEmoji: "\u7D75\u6587\u5B57\u3092\u9078\u629E",
1721
+ backgroundColor: "\u80CC\u666F\u8272"
1722
+ },
1723
+ radio: {
1724
+ groupName: "\u30B0\u30EB\u30FC\u30D7\u540D",
1725
+ editGroup: "\u30B0\u30EB\u30FC\u30D7\u540D\u7DE8\u96C6"
1726
+ },
1727
+ bookmark: {
1728
+ clickToOpenNewTab: "\u30AF\u30EA\u30C3\u30AF\u3057\u3066\u3053\u306E\u30EA\u30F3\u30AF\u3092\u65B0\u3057\u3044\u30BF\u30D6\u3067\u958B\u304F\u3002",
1729
+ clickToOpenLink: "\u30AF\u30EA\u30C3\u30AF\u3057\u3066\u30EA\u30F3\u30AF\u3092\u958B\u304F\u3002",
1730
+ noDescription: "\u8AAC\u660E\u306F\u3042\u308A\u307E\u305B\u3093\u3002",
1731
+ failedToLoad: "\u30D7\u30EC\u30D3\u30E5\u30FC\u306E\u8AAD\u307F\u8FBC\u307F\u306B\u5931\u6557\u3057\u307E\u3057\u305F\u3002\u30AF\u30EA\u30C3\u30AF\u3057\u3066\u30EA\u30F3\u30AF\u3092\u958B\u304F\u3002",
1732
+ previewFailed: "\u30D7\u30EC\u30D3\u30E5\u30FC\u3092\u8AAD\u307F\u8FBC\u3081\u307E\u305B\u3093\u3067\u3057\u305F",
1733
+ retryPreview: "\u518D\u8A66\u884C"
1734
+ },
1735
+ fileCard: {
1736
+ unnamed: "\u540D\u524D\u306A\u3057\u30D5\u30A1\u30A4\u30EB",
1737
+ uploading: "(\u30A2\u30C3\u30D7\u30ED\u30FC\u30C9\u4E2D...)",
1738
+ uploadFailed: "\u30A2\u30C3\u30D7\u30ED\u30FC\u30C9\u5931\u6557",
1739
+ retryUpload: "\u518D\u30A2\u30C3\u30D7\u30ED\u30FC\u30C9"
1740
+ },
1741
+ menubar: {
1742
+ file: "\u30D5\u30A1\u30A4\u30EB",
1743
+ edit: "\u7DE8\u96C6",
1744
+ view: "\u8868\u793A",
1745
+ insert: "\u633F\u5165",
1746
+ format: "\u66F8\u5F0F",
1747
+ tools: "\u30C4\u30FC\u30EB",
1748
+ table: "\u8868",
1749
+ save: "\u4FDD\u5B58",
1750
+ exportHtml: "HTML\u30A8\u30AF\u30B9\u30DD\u30FC\u30C8",
1751
+ undo: "\u5143\u306B\u623B\u3059",
1752
+ undoShortcut: "Ctrl+Z",
1753
+ redo: "\u3084\u308A\u76F4\u3057",
1754
+ redoShortcut: "Ctrl+Y",
1755
+ cut: "\u5207\u308A\u53D6\u308A",
1756
+ cutShortcut: "Ctrl+X",
1757
+ copy: "\u30B3\u30D4\u30FC",
1758
+ copyShortcut: "Ctrl+C",
1759
+ paste: "\u8CBC\u308A\u4ED8\u3051",
1760
+ pasteShortcut: "Ctrl+V",
1761
+ pasteAsText: "\u30C6\u30AD\u30B9\u30C8\u3068\u3057\u3066\u8CBC\u308A\u4ED8\u3051",
1762
+ selectAll: "\u3059\u3079\u3066\u9078\u629E",
1763
+ selectAllShortcut: "Ctrl+A",
1764
+ sourceCode: "\u30BD\u30FC\u30B9\u30B3\u30FC\u30C9",
1765
+ preview: "\u30D7\u30EC\u30D3\u30E5\u30FC",
1766
+ fullscreen: "\u30D5\u30EB\u30B9\u30AF\u30EA\u30FC\u30F3",
1767
+ fullscreenShortcut: "Ctrl+Shift+F",
1768
+ image: "\u753B\u50CF",
1769
+ link: "\u30EA\u30F3\u30AF",
1770
+ linkShortcut: "Ctrl+K",
1771
+ insertTable: "\u8868",
1772
+ horizontalRule: "\u6C34\u5E73\u7DDA",
1773
+ bold: "\u592A\u5B57",
1774
+ boldShortcut: "Ctrl+B",
1775
+ italic: "\u659C\u4F53",
1776
+ italicShortcut: "Ctrl+I",
1777
+ underline: "\u4E0B\u7DDA",
1778
+ underlineShortcut: "Ctrl+U",
1779
+ strike: "\u53D6\u308A\u6D88\u3057\u7DDA",
1780
+ superscript: "\u4E0A\u4ED8\u304D\u6587\u5B57",
1781
+ subscript: "\u4E0B\u4ED8\u304D\u6587\u5B57",
1782
+ code: "\u30B3\u30FC\u30C9",
1783
+ wrap: "\u30D6\u30ED\u30C3\u30AF",
1784
+ align: "\u914D\u7F6E",
1785
+ clearFormatting: "\u66F8\u5F0F\u3092\u30AF\u30EA\u30A2",
1786
+ paragraph: "\u6BB5\u843D",
1787
+ heading1: "\u898B\u51FA\u3057 1",
1788
+ heading2: "\u898B\u51FA\u3057 2",
1789
+ heading3: "\u898B\u51FA\u3057 3",
1790
+ blockquote: "\u5F15\u7528",
1791
+ codeBlock: "\u30B3\u30FC\u30C9\u30D6\u30ED\u30C3\u30AF",
1792
+ taskList: "\u30BF\u30B9\u30AF\u30EA\u30B9\u30C8",
1793
+ alignLeft: "\u5DE6\u63C3\u3048",
1794
+ alignCenter: "\u4E2D\u592E\u63C3\u3048",
1795
+ alignRight: "\u53F3\u63C3\u3048",
1796
+ alignJustify: "\u4E21\u7AEF\u63C3\u3048",
1797
+ tableProperties: "\u8868\u306E\u30D7\u30ED\u30D1\u30C6\u30A3",
1798
+ deleteTable: "\u8868\u3092\u524A\u9664",
1799
+ row: "\u884C",
1800
+ column: "\u5217",
1801
+ cell: "\u30BB\u30EB",
1802
+ addRowBefore: "\u4E0A\u306B\u884C\u3092\u633F\u5165",
1803
+ addRowAfter: "\u4E0B\u306B\u884C\u3092\u633F\u5165",
1804
+ deleteRow: "\u884C\u3092\u524A\u9664",
1805
+ addColumnBefore: "\u5DE6\u306B\u5217\u3092\u633F\u5165",
1806
+ addColumnAfter: "\u53F3\u306B\u5217\u3092\u633F\u5165",
1807
+ deleteColumn: "\u5217\u3092\u524A\u9664",
1808
+ mergeCells: "\u30BB\u30EB\u3092\u7D50\u5408",
1809
+ splitCell: "\u30BB\u30EB\u3092\u5206\u5272",
1810
+ imageUpload: "\u753B\u50CF\u3092\u30A2\u30C3\u30D7\u30ED\u30FC\u30C9",
1811
+ formFields: "\u30D5\u30A9\u30FC\u30E0\u30D5\u30A3\u30FC\u30EB\u30C9",
1812
+ formCheckbox: "\u30D5\u30A9\u30FC\u30E0\u30C1\u30A7\u30C3\u30AF\u30DC\u30C3\u30AF\u30B9",
1813
+ formRadio: "\u30D5\u30A9\u30FC\u30E0\u30E9\u30B8\u30AA\u30DC\u30BF\u30F3",
1814
+ applySource: "\u9069\u7528",
1815
+ closeDialog: "\u9589\u3058\u308B",
1816
+ copyHtml: "HTML\u3092\u30B3\u30D4\u30FC",
1817
+ exportDefault: "HTML\u30A8\u30AF\u30B9\u30DD\u30FC\u30C8",
1818
+ previewEmpty: "\u30D7\u30EC\u30D3\u30E5\u30FC\u3059\u308B\u30B3\u30F3\u30C6\u30F3\u30C4\u304C\u3042\u308A\u307E\u305B\u3093\u3002",
1819
+ sourceCodeHint: "HTML\u3092\u76F4\u63A5\u7DE8\u96C6\u3057\u3001\u9069\u7528\u3092\u30AF\u30EA\u30C3\u30AF\u3057\u3066\u30A8\u30C7\u30A3\u30BF\u30FC\u3092\u66F4\u65B0\u3057\u307E\u3059\u3002"
1820
+ }
1821
+ }
1822
+ };
1823
+
1824
+ // src/contexts/TranslationContext.tsx
1825
+ import * as React2 from "react";
1826
+ import { jsx as jsx2 } from "react/jsx-runtime";
1827
+ var defaultTranslations = {
1828
+ en: en_default,
1829
+ vi: vi_default,
1830
+ ko: ko_default,
1831
+ ja: ja_default
1832
+ };
1833
+ function resolveObjectPath(input, path) {
1834
+ const parts = path.split(".");
1835
+ let current = input;
1836
+ for (const part of parts) {
1837
+ if (current && typeof current === "object" && part in current) {
1838
+ current = current[part];
1839
+ } else {
1840
+ return null;
1841
+ }
1842
+ }
1843
+ return current;
1844
+ }
1845
+ function resolveTranslationValue(translations, namespace, key) {
1846
+ const namespaceValue = resolveObjectPath(translations, namespace);
1847
+ const value = resolveObjectPath(namespaceValue, key);
1848
+ return typeof value === "string" ? value : null;
1849
+ }
1850
+ function getUnderverseDefaultTranslation(locale, namespace, key) {
1851
+ return resolveTranslationValue(defaultTranslations[locale] ?? defaultTranslations.en, namespace, key) ?? resolveTranslationValue(defaultTranslations.en, namespace, key) ?? key;
1852
+ }
1853
+ var TranslationContext = React2.createContext(null);
1854
+ var TranslationProvider = ({ children, locale = "en", translations, i18n }) => {
1855
+ const t = React2.useCallback(
1856
+ (namespace) => {
1857
+ return (key) => {
1858
+ const mergedTranslations = {
1859
+ ...defaultTranslations[locale],
1860
+ ...translations?.[locale]
1861
+ };
1862
+ return resolveTranslationValue(mergedTranslations, namespace, key) ?? key;
1863
+ };
1864
+ },
1865
+ [locale, translations]
1866
+ );
1867
+ return /* @__PURE__ */ jsx2(GlobalI18nProvider, { i18n, children: /* @__PURE__ */ jsx2(TranslationContext.Provider, { value: { locale, t }, children }) });
1868
+ };
1869
+ var useUnderverseTranslations = (namespace) => {
1870
+ const context = React2.useContext(TranslationContext);
1871
+ if (!context) {
1872
+ return (key) => {
1873
+ return getUnderverseDefaultTranslation("en", namespace, key);
1874
+ };
1875
+ }
1876
+ return context.t(namespace);
1877
+ };
1878
+ var useUnderverseLocale = () => {
1879
+ const context = React2.useContext(TranslationContext);
1880
+ return context?.locale || "en";
1881
+ };
1882
+
1883
+ // src/contexts/NextIntlAdapter.tsx
1884
+ import * as React3 from "react";
1885
+ import { createTranslator, useLocale, useMessages } from "next-intl";
1886
+ import { jsx as jsx3 } from "react/jsx-runtime";
1887
+ function normalizeLocale(locale, fallback) {
1888
+ const normalized = locale?.toLowerCase().split("-")[0];
1889
+ if (normalized === "en" || normalized === "vi" || normalized === "ko" || normalized === "ja") {
1890
+ return normalized;
1891
+ }
1892
+ return fallback;
1893
+ }
1894
+ var NextIntlBridgeContext = React3.createContext(null);
1895
+ function isMissingIntlContextError(error) {
1896
+ if (!(error instanceof Error)) return false;
1897
+ const message = error.message || "";
1898
+ const stack = error.stack || "";
1899
+ return message.includes("No intl context found.") || !message && stack.includes("use-intl/dist/esm/") && stack.includes("NextIntlAdapterWithContext");
1900
+ }
1901
+ var NextIntlAdapterBoundary = class extends React3.Component {
1902
+ constructor() {
1903
+ super(...arguments);
1904
+ this.state = { error: null };
1905
+ }
1906
+ static getDerivedStateFromError(error) {
1907
+ return { error };
1908
+ }
1909
+ componentDidUpdate(prevProps) {
1910
+ if (this.state.error && prevProps.children !== this.props.children) {
1911
+ this.setState({ error: null });
1912
+ }
1913
+ }
1914
+ render() {
1915
+ if (!this.state.error) {
1916
+ return this.props.children;
1917
+ }
1918
+ if (isMissingIntlContextError(this.state.error)) {
1919
+ return this.props.fallback;
1920
+ }
1921
+ throw this.state.error;
1922
+ }
1923
+ };
1924
+ function NextIntlAdapterProvider({
1925
+ children,
1926
+ locale,
1927
+ messages
1928
+ }) {
1929
+ const normalizedLocale = normalizeLocale(locale, "en");
1930
+ const translatorCache = React3.useMemo(
1931
+ () => /* @__PURE__ */ new Map(),
1932
+ [normalizedLocale, messages]
1933
+ );
1934
+ const translate = React3.useCallback((namespace, key, values) => {
1935
+ let translator = translatorCache.get(namespace);
1936
+ if (!translator) {
1937
+ const runtimeTranslator = createTranslator({
1938
+ locale: normalizedLocale,
1939
+ messages,
1940
+ namespace,
1941
+ onError: () => {
1942
+ }
1943
+ });
1944
+ translator = (translationKey, translationValues) => runtimeTranslator(translationKey, translationValues);
1945
+ translatorCache.set(namespace, translator);
1946
+ }
1947
+ try {
1948
+ return {
1949
+ locale: normalizedLocale,
1950
+ translated: translator(key, values)
1951
+ };
1952
+ } catch {
1953
+ return {
1954
+ locale: normalizedLocale,
1955
+ translated: null
1956
+ };
1957
+ }
1958
+ }, [messages, normalizedLocale, translatorCache]);
1959
+ const value = React3.useMemo(() => ({
1960
+ locale: normalizedLocale,
1961
+ translate
1962
+ }), [normalizedLocale, translate]);
1963
+ return /* @__PURE__ */ jsx3(NextIntlBridgeContext.Provider, { value, children });
1964
+ }
1965
+ function NextIntlAdapterWithContext({ children }) {
1966
+ const locale = useLocale();
1967
+ const messages = useMessages();
1968
+ return /* @__PURE__ */ jsx3(NextIntlAdapterProvider, { locale, messages, children });
1969
+ }
1970
+ function NextIntlAdapter({ children, locale, messages, i18n }) {
1971
+ const inner = locale && messages ? /* @__PURE__ */ jsx3(NextIntlAdapterProvider, { locale, messages, children }) : /* @__PURE__ */ jsx3(NextIntlAdapterBoundary, { fallback: children, children: /* @__PURE__ */ jsx3(NextIntlAdapterWithContext, { children }) });
1972
+ return /* @__PURE__ */ jsx3(GlobalI18nProvider, { i18n, children: inner });
1973
+ }
1974
+ var UnderverseNextIntlProvider = NextIntlAdapter;
1975
+ function useNextIntlBridge() {
1976
+ return React3.useContext(NextIntlBridgeContext);
1977
+ }
1978
+
1979
+ // src/hooks/useSmartTranslations.tsx
1980
+ import * as React4 from "react";
1981
+ import { jsx as jsx4 } from "react/jsx-runtime";
1982
+ var ForceInternalContext = React4.createContext(false);
1983
+ var ForceInternalTranslationsProvider = ({ children }) => {
1984
+ return /* @__PURE__ */ jsx4(ForceInternalContext.Provider, { value: true, children });
1985
+ };
1986
+ function normalizeLocale2(locale, fallback) {
1987
+ const normalized = locale?.toLowerCase().split("-")[0];
1988
+ if (normalized === "en" || normalized === "vi" || normalized === "ko" || normalized === "ja") {
1989
+ return normalized;
1990
+ }
1991
+ return fallback;
1992
+ }
1993
+ function isUnresolvedTranslation(value, namespace, key) {
1994
+ return value === key || value === `${namespace}.${key}`;
1995
+ }
1996
+ function getEnvironmentLocale(fallback) {
1997
+ if (typeof document !== "undefined") {
1998
+ const documentLocale = document.documentElement?.lang?.trim();
1999
+ if (documentLocale) {
2000
+ return normalizeLocale2(documentLocale, fallback);
2001
+ }
2002
+ }
2003
+ if (typeof navigator !== "undefined") {
2004
+ const navigatorLocale = navigator.language?.trim();
2005
+ if (navigatorLocale) {
2006
+ return normalizeLocale2(navigatorLocale, fallback);
2007
+ }
2008
+ }
2009
+ return fallback;
2010
+ }
2011
+ function useSmartTranslations(namespace) {
2012
+ const forceInternal = React4.useContext(ForceInternalContext);
2013
+ const nextIntlBridge = useNextIntlBridge();
2014
+ const internalT = useUnderverseTranslations(namespace);
2015
+ const internalLocale = useUnderverseLocale();
2016
+ const [environmentLocale, setEnvironmentLocale] = React4.useState(null);
2017
+ React4.useEffect(() => {
2018
+ if (forceInternal) return;
2019
+ if (nextIntlBridge) return;
2020
+ if (internalLocale !== "en") return;
2021
+ const detected = getEnvironmentLocale(internalLocale);
2022
+ if (detected !== internalLocale) {
2023
+ setEnvironmentLocale(detected);
2024
+ }
2025
+ }, [forceInternal, internalLocale, nextIntlBridge]);
2026
+ if (forceInternal) {
2027
+ return internalT;
2028
+ }
2029
+ return (key) => {
2030
+ const resolvedEnvironmentLocale = environmentLocale && environmentLocale !== internalLocale ? environmentLocale : null;
2031
+ const primaryLocale = nextIntlBridge?.locale ?? resolvedEnvironmentLocale ?? internalLocale;
2032
+ const fallbackLocale = resolvedEnvironmentLocale && resolvedEnvironmentLocale !== primaryLocale ? resolvedEnvironmentLocale : null;
2033
+ let translated = null;
2034
+ if (nextIntlBridge) {
2035
+ const nextIntlResult = nextIntlBridge.translate(namespace, key);
2036
+ translated = nextIntlResult.translated;
2037
+ }
2038
+ const localizedDefault = getUnderverseDefaultTranslation(primaryLocale, namespace, key);
2039
+ const fallbackLocalizedDefault = fallbackLocale ? getUnderverseDefaultTranslation(fallbackLocale, namespace, key) : key;
2040
+ const englishDefault = getUnderverseDefaultTranslation("en", namespace, key);
2041
+ const internalValue = internalT(key);
2042
+ if (translated && !isUnresolvedTranslation(translated, namespace, key) && !(primaryLocale !== "en" && localizedDefault !== englishDefault && translated === englishDefault)) {
2043
+ return translated;
2044
+ }
2045
+ if (internalLocale === primaryLocale && internalValue !== key) {
2046
+ return internalValue;
2047
+ }
2048
+ if (localizedDefault !== key) {
2049
+ return localizedDefault;
2050
+ }
2051
+ if (fallbackLocalizedDefault !== key) {
2052
+ return fallbackLocalizedDefault;
2053
+ }
2054
+ if (internalValue !== key) {
2055
+ return internalValue;
2056
+ }
2057
+ return key;
2058
+ };
2059
+ }
2060
+ function useSmartLocale() {
2061
+ const forceInternal = React4.useContext(ForceInternalContext);
2062
+ const nextIntlBridge = useNextIntlBridge();
2063
+ const internalLocale = useUnderverseLocale();
2064
+ const [environmentLocale, setEnvironmentLocale] = React4.useState(null);
2065
+ React4.useEffect(() => {
2066
+ if (forceInternal) return;
2067
+ if (nextIntlBridge) return;
2068
+ if (internalLocale !== "en") return;
2069
+ const detected = getEnvironmentLocale(internalLocale);
2070
+ if (detected !== internalLocale) {
2071
+ setEnvironmentLocale(detected);
2072
+ }
2073
+ }, [forceInternal, internalLocale, nextIntlBridge]);
2074
+ if (forceInternal) {
2075
+ return internalLocale;
2076
+ }
2077
+ return nextIntlBridge?.locale ?? environmentLocale ?? internalLocale;
2078
+ }
2079
+
2080
+ // src/components/Tooltip.tsx
2081
+ import * as React5 from "react";
2082
+ import { createPortal } from "react-dom";
2083
+
2084
+ // src/hooks/useHydrated.ts
2085
+ import { useSyncExternalStore } from "react";
2086
+ var subscribe = () => () => {
2087
+ };
2088
+ var getSnapshot = () => true;
2089
+ var getServerSnapshot = () => false;
2090
+ function useHydrated() {
2091
+ return useSyncExternalStore(subscribe, getSnapshot, getServerSnapshot);
2092
+ }
2093
+
2094
+ // src/utils/react-compose.ts
2095
+ function chainEventHandlers(...handlers) {
2096
+ return (event) => {
2097
+ handlers.forEach((handler) => handler?.(event));
2098
+ };
2099
+ }
2100
+ function setRefValue(ref, value) {
2101
+ if (!ref) return;
2102
+ if (typeof ref === "function") {
2103
+ ref(value);
2104
+ return;
2105
+ }
2106
+ ref.current = value;
2107
+ }
2108
+ function mergeRefs(...refs) {
2109
+ return (value) => {
2110
+ refs.forEach((ref) => setRefValue(ref, value));
2111
+ };
2112
+ }
2113
+
2114
+ // src/components/Tooltip.tsx
2115
+ import { Fragment as Fragment2, jsx as jsx5, jsxs } from "react/jsx-runtime";
2116
+ var variantStyles = {
2117
+ default: "bg-popover text-popover-foreground border-border/50",
2118
+ info: "bg-info text-info-foreground border-info/20",
2119
+ warning: "bg-warning text-warning-foreground border-warning/20",
2120
+ error: "bg-destructive text-destructive-foreground border-destructive/20",
2121
+ success: "bg-success text-success-foreground border-success/20"
2122
+ };
2123
+ var clamp = (value, min, max) => Math.max(min, Math.min(max, value));
2124
+ function getTransformOrigin(side) {
2125
+ switch (side) {
2126
+ case "top":
2127
+ return "center bottom";
2128
+ case "bottom":
2129
+ return "center top";
2130
+ case "left":
2131
+ return "right center";
2132
+ case "right":
2133
+ return "left center";
2134
+ }
2135
+ }
2136
+ function computeTooltipPosition(args) {
2137
+ const { triggerRect, contentSize, placement, offset, padding, viewport } = args;
2138
+ let side = placement;
2139
+ const fitsTop = triggerRect.top - offset - contentSize.height >= padding;
2140
+ const fitsBottom = triggerRect.bottom + offset + contentSize.height <= viewport.height - padding;
2141
+ const fitsLeft = triggerRect.left - offset - contentSize.width >= padding;
2142
+ const fitsRight = triggerRect.right + offset + contentSize.width <= viewport.width - padding;
2143
+ if (side === "top" && !fitsTop && fitsBottom) side = "bottom";
2144
+ if (side === "bottom" && !fitsBottom && fitsTop) side = "top";
2145
+ if (side === "left" && !fitsLeft && fitsRight) side = "right";
2146
+ if (side === "right" && !fitsRight && fitsLeft) side = "left";
2147
+ const centerX = triggerRect.left + triggerRect.width / 2;
2148
+ const centerY = triggerRect.top + triggerRect.height / 2;
2149
+ let left = 0;
2150
+ let top = 0;
2151
+ if (side === "top") {
2152
+ top = triggerRect.top - offset - contentSize.height;
2153
+ left = centerX - contentSize.width / 2;
2154
+ } else if (side === "bottom") {
2155
+ top = triggerRect.bottom + offset;
2156
+ left = centerX - contentSize.width / 2;
2157
+ } else if (side === "left") {
2158
+ top = centerY - contentSize.height / 2;
2159
+ left = triggerRect.left - offset - contentSize.width;
2160
+ } else {
2161
+ top = centerY - contentSize.height / 2;
2162
+ left = triggerRect.right + offset;
2163
+ }
2164
+ left = clamp(left, padding, viewport.width - contentSize.width - padding);
2165
+ top = clamp(top, padding, viewport.height - contentSize.height - padding);
2166
+ return { top, left, side };
2167
+ }
2168
+ var Tooltip = React5.forwardRef(({
2169
+ children,
2170
+ content,
2171
+ placement = "top",
2172
+ delay = { open: 200, close: 300 },
2173
+ className,
2174
+ disabled = false,
2175
+ variant = "default",
2176
+ asChild = true,
2177
+ ...triggerPassthroughProps
2178
+ }, forwardedRef) => {
2179
+ const [isOpen, setIsOpen] = React5.useState(false);
2180
+ const isMounted = useHydrated();
2181
+ const triggerRef = React5.useRef(null);
2182
+ const positionerRef = React5.useRef(null);
2183
+ const panelRef = React5.useRef(null);
2184
+ const timeoutRef = React5.useRef(void 0);
2185
+ const lastAppliedRef = React5.useRef(null);
2186
+ const openedByPointerRef = React5.useRef(false);
2187
+ const triggerSelector = React5.useId();
2188
+ const delayOpen = typeof delay === "object" ? delay.open || 700 : delay;
2189
+ const delayClose = typeof delay === "object" ? delay.close || 300 : delay;
2190
+ const offset = 8;
2191
+ const padding = 8;
2192
+ React5.useLayoutEffect(() => {
2193
+ if (typeof document === "undefined") return;
2194
+ const triggerEl = document.querySelector(`[data-underverse-tooltip-trigger="${triggerSelector}"]`);
2195
+ if (triggerEl) {
2196
+ triggerRef.current = triggerEl;
2197
+ }
2198
+ }, [children, triggerSelector]);
2199
+ const updatePosition = React5.useCallback(() => {
2200
+ const triggerEl = triggerRef.current;
2201
+ const positionerEl = positionerRef.current;
2202
+ const panelEl = panelRef.current;
2203
+ if (!triggerEl || !positionerEl || !panelEl) return;
2204
+ const triggerRect = triggerEl.getBoundingClientRect();
2205
+ const measuredWidth = panelEl.offsetWidth;
2206
+ const measuredHeight = panelEl.offsetHeight;
2207
+ const rect = panelEl.getBoundingClientRect();
2208
+ const contentWidth = measuredWidth || rect.width;
2209
+ const contentHeight = measuredHeight || rect.height;
2210
+ const next = computeTooltipPosition({
2211
+ triggerRect,
2212
+ contentSize: { width: contentWidth, height: contentHeight },
2213
+ placement,
2214
+ offset,
2215
+ padding,
2216
+ viewport: { width: window.innerWidth, height: window.innerHeight }
2217
+ });
2218
+ const top = Math.round(next.top);
2219
+ const left = Math.round(next.left);
2220
+ const prev = lastAppliedRef.current;
2221
+ const same = prev && Math.abs(prev.top - top) < 0.5 && Math.abs(prev.left - left) < 0.5 && prev.side === next.side;
2222
+ if (same) return;
2223
+ lastAppliedRef.current = { top, left, side: next.side };
2224
+ positionerEl.style.transform = `translate3d(${left}px, ${top}px, 0)`;
2225
+ panelEl.style.transformOrigin = getTransformOrigin(next.side);
2226
+ if (positionerEl.style.visibility !== "visible") positionerEl.style.visibility = "visible";
2227
+ }, [placement]);
2228
+ const handleMouseEnter = () => {
2229
+ if (disabled) return;
2230
+ openedByPointerRef.current = true;
2231
+ clearTimeout(timeoutRef.current);
2232
+ timeoutRef.current = setTimeout(() => {
2233
+ setIsOpen(true);
2234
+ }, delayOpen);
2235
+ };
2236
+ const handleMouseLeave = () => {
2237
+ clearTimeout(timeoutRef.current);
2238
+ timeoutRef.current = setTimeout(() => {
2239
+ setIsOpen(false);
2240
+ }, delayClose);
2241
+ };
2242
+ const closeNow = React5.useCallback(() => {
2243
+ clearTimeout(timeoutRef.current);
2244
+ openedByPointerRef.current = false;
2245
+ setIsOpen(false);
2246
+ }, []);
2247
+ const handleFocus = () => {
2248
+ if (disabled) return;
2249
+ openedByPointerRef.current = false;
2250
+ setIsOpen(true);
2251
+ };
2252
+ const handleBlur = () => {
2253
+ openedByPointerRef.current = false;
2254
+ setIsOpen(false);
2255
+ };
2256
+ React5.useEffect(() => {
2257
+ return () => clearTimeout(timeoutRef.current);
2258
+ }, []);
2259
+ React5.useEffect(() => {
2260
+ if (isOpen) return;
2261
+ clearTimeout(timeoutRef.current);
2262
+ }, [isOpen]);
2263
+ React5.useLayoutEffect(() => {
2264
+ if (!isOpen) {
2265
+ lastAppliedRef.current = null;
2266
+ return;
2267
+ }
2268
+ updatePosition();
2269
+ let raf1 = 0;
2270
+ let raf2 = 0;
2271
+ raf1 = window.requestAnimationFrame(() => {
2272
+ updatePosition();
2273
+ raf2 = window.requestAnimationFrame(() => updatePosition());
2274
+ });
2275
+ return () => {
2276
+ cancelAnimationFrame(raf1);
2277
+ cancelAnimationFrame(raf2);
2278
+ };
2279
+ }, [isOpen, updatePosition]);
2280
+ React5.useEffect(() => {
2281
+ if (!isOpen) return;
2282
+ let raf = 0;
2283
+ const handler = () => {
2284
+ cancelAnimationFrame(raf);
2285
+ raf = window.requestAnimationFrame(() => updatePosition());
2286
+ };
2287
+ handler();
2288
+ window.addEventListener("resize", handler);
2289
+ window.addEventListener("scroll", handler, true);
2290
+ document.addEventListener("scroll", handler, true);
2291
+ return () => {
2292
+ cancelAnimationFrame(raf);
2293
+ window.removeEventListener("resize", handler);
2294
+ window.removeEventListener("scroll", handler, true);
2295
+ document.removeEventListener("scroll", handler, true);
2296
+ };
2297
+ }, [isOpen, updatePosition]);
2298
+ React5.useEffect(() => {
2299
+ if (!isOpen) return;
2300
+ if (typeof ResizeObserver === "undefined") return;
2301
+ const ro = new ResizeObserver(() => updatePosition());
2302
+ if (triggerRef.current) ro.observe(triggerRef.current);
2303
+ if (panelRef.current) ro.observe(panelRef.current);
2304
+ return () => ro.disconnect();
2305
+ }, [isOpen, updatePosition]);
2306
+ React5.useEffect(() => {
2307
+ if (!isOpen) return;
2308
+ const handleDocumentKeyDown = (event) => {
2309
+ if (event.key === "Escape") closeNow();
2310
+ };
2311
+ const handleDocumentPointerMove = (event) => {
2312
+ if (!openedByPointerRef.current) return;
2313
+ const triggerEl = triggerRef.current;
2314
+ if (!triggerEl) {
2315
+ closeNow();
2316
+ return;
2317
+ }
2318
+ const rect = triggerEl.getBoundingClientRect();
2319
+ const tolerance = 2;
2320
+ const insideTrigger = event.clientX >= rect.left - tolerance && event.clientX <= rect.right + tolerance && event.clientY >= rect.top - tolerance && event.clientY <= rect.bottom + tolerance;
2321
+ if (!insideTrigger) closeNow();
2322
+ };
2323
+ document.addEventListener("pointerdown", closeNow, true);
2324
+ document.addEventListener("keydown", handleDocumentKeyDown);
2325
+ document.addEventListener("pointermove", handleDocumentPointerMove, true);
2326
+ return () => {
2327
+ document.removeEventListener("pointerdown", closeNow, true);
2328
+ document.removeEventListener("keydown", handleDocumentKeyDown);
2329
+ document.removeEventListener("pointermove", handleDocumentPointerMove, true);
2330
+ };
2331
+ }, [closeNow, isOpen]);
2332
+ const childProps = children.props;
2333
+ const childRef = childProps.ref;
2334
+ const passthroughRef = mergeRefs(forwardedRef, childRef, (node) => {
2335
+ triggerRef.current = node;
2336
+ });
2337
+ if (disabled || !content) {
2338
+ if (!asChild) return children;
2339
+ return React5.cloneElement(children, {
2340
+ ...triggerPassthroughProps,
2341
+ ref: passthroughRef
2342
+ });
2343
+ }
2344
+ const triggerProps = {
2345
+ ...triggerPassthroughProps,
2346
+ ref: passthroughRef,
2347
+ "data-underverse-tooltip-trigger": triggerSelector,
2348
+ onMouseEnter: chainEventHandlers(
2349
+ triggerPassthroughProps.onMouseEnter,
2350
+ childProps.onMouseEnter,
2351
+ (e) => {
2352
+ triggerRef.current = e.currentTarget;
2353
+ handleMouseEnter();
2354
+ }
2355
+ ),
2356
+ onMouseLeave: chainEventHandlers(
2357
+ triggerPassthroughProps.onMouseLeave,
2358
+ childProps.onMouseLeave,
2359
+ (e) => {
2360
+ triggerRef.current = e.currentTarget;
2361
+ handleMouseLeave();
2362
+ }
2363
+ ),
2364
+ onPointerDown: chainEventHandlers(
2365
+ triggerPassthroughProps.onPointerDown,
2366
+ childProps.onPointerDown,
2367
+ (e) => {
2368
+ triggerRef.current = e.currentTarget;
2369
+ closeNow();
2370
+ }
2371
+ ),
2372
+ onClick: chainEventHandlers(
2373
+ triggerPassthroughProps.onClick,
2374
+ childProps.onClick,
2375
+ (e) => {
2376
+ triggerRef.current = e.currentTarget;
2377
+ closeNow();
2378
+ }
2379
+ ),
2380
+ onFocus: chainEventHandlers(
2381
+ triggerPassthroughProps.onFocus,
2382
+ childProps.onFocus,
2383
+ (e) => {
2384
+ triggerRef.current = e.currentTarget;
2385
+ handleFocus();
2386
+ }
2387
+ ),
2388
+ onBlur: chainEventHandlers(
2389
+ triggerPassthroughProps.onBlur,
2390
+ childProps.onBlur,
2391
+ (e) => {
2392
+ handleBlur();
2393
+ }
2394
+ )
2395
+ };
2396
+ const trigger = asChild ? React5.cloneElement(children, triggerProps) : /* @__PURE__ */ jsx5("span", { ...triggerProps, children });
2397
+ return /* @__PURE__ */ jsxs(Fragment2, { children: [
2398
+ trigger,
2399
+ isMounted && isOpen && createPortal(
2400
+ /* @__PURE__ */ jsx5(
2401
+ "div",
2402
+ {
2403
+ ref: positionerRef,
2404
+ style: {
2405
+ position: "fixed",
2406
+ top: 0,
2407
+ left: 0,
2408
+ transform: "translate3d(0, 0, 0)",
2409
+ zIndex: 99999,
2410
+ visibility: "hidden",
2411
+ pointerEvents: "none",
2412
+ willChange: "transform"
2413
+ },
2414
+ children: /* @__PURE__ */ jsx5(
2415
+ "div",
2416
+ {
2417
+ ref: panelRef,
2418
+ role: "tooltip",
2419
+ style: {
2420
+ opacity: 1,
2421
+ transition: "opacity 150ms",
2422
+ transformOrigin: getTransformOrigin(placement)
2423
+ },
2424
+ className: cn(
2425
+ "px-3 py-2 text-sm font-medium rounded-xl shadow-lg border",
2426
+ "max-w-xs wrap-break-word backdrop-blur-sm",
2427
+ variantStyles[variant],
2428
+ className
2429
+ ),
2430
+ children: content
2431
+ }
2432
+ )
2433
+ }
2434
+ ),
2435
+ document.body
2436
+ )
2437
+ ] });
2438
+ });
2439
+ Tooltip.displayName = "Tooltip";
2440
+
2441
+ export {
2442
+ cn,
2443
+ useGlobalI18n,
2444
+ en_default,
2445
+ vi_default,
2446
+ ko_default,
2447
+ ja_default,
2448
+ getUnderverseDefaultTranslation,
2449
+ TranslationProvider,
2450
+ useUnderverseTranslations,
2451
+ useUnderverseLocale,
2452
+ NextIntlAdapter,
2453
+ UnderverseNextIntlProvider,
2454
+ useNextIntlBridge,
2455
+ ForceInternalTranslationsProvider,
2456
+ useSmartTranslations,
2457
+ useSmartLocale,
2458
+ useHydrated,
2459
+ chainEventHandlers,
2460
+ setRefValue,
2461
+ mergeRefs,
2462
+ Tooltip
2463
+ };
2464
+ //# sourceMappingURL=chunk-GSBRTFP2.js.map