@teriusu/rich-editor 0.10.8 → 0.11.0

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 (147) hide show
  1. package/dist/components/BubbleToolbar.svelte +40 -36
  2. package/dist/components/BubbleToolbar.svelte.d.ts +3 -0
  3. package/dist/components/BubbleToolbar.svelte.d.ts.map +1 -1
  4. package/dist/components/EmojiSuggestionMenu.svelte +291 -0
  5. package/dist/components/EmojiSuggestionMenu.svelte.d.ts +9 -0
  6. package/dist/components/EmojiSuggestionMenu.svelte.d.ts.map +1 -0
  7. package/dist/components/FixedToolbar.svelte +53 -47
  8. package/dist/components/FixedToolbar.svelte.d.ts +3 -0
  9. package/dist/components/FixedToolbar.svelte.d.ts.map +1 -1
  10. package/dist/components/FloatingHelper.svelte +219 -0
  11. package/dist/components/FloatingHelper.svelte.d.ts +14 -0
  12. package/dist/components/FloatingHelper.svelte.d.ts.map +1 -0
  13. package/dist/components/InputModal.svelte +7 -3
  14. package/dist/components/InputModal.svelte.d.ts +3 -0
  15. package/dist/components/InputModal.svelte.d.ts.map +1 -1
  16. package/dist/components/MathModal.svelte +33 -29
  17. package/dist/components/MathModal.svelte.d.ts +3 -0
  18. package/dist/components/MathModal.svelte.d.ts.map +1 -1
  19. package/dist/components/MediaPickerModal.svelte +7 -3
  20. package/dist/components/MediaPickerModal.svelte.d.ts +3 -0
  21. package/dist/components/MediaPickerModal.svelte.d.ts.map +1 -1
  22. package/dist/components/SlashCommandMenu.svelte +88 -72
  23. package/dist/components/SlashCommandMenu.svelte.d.ts +3 -0
  24. package/dist/components/SlashCommandMenu.svelte.d.ts.map +1 -1
  25. package/dist/components/TableBubbleMenu.svelte +41 -33
  26. package/dist/components/TableBubbleMenu.svelte.d.ts +3 -0
  27. package/dist/components/TableBubbleMenu.svelte.d.ts.map +1 -1
  28. package/dist/components/TipTapEditor.svelte +239 -127
  29. package/dist/components/TipTapEditor.svelte.d.ts +7 -0
  30. package/dist/components/TipTapEditor.svelte.d.ts.map +1 -1
  31. package/dist/extensions/CardBlock.d.ts.map +1 -1
  32. package/dist/extensions/CardBlock.js +6 -4
  33. package/dist/extensions/FileAttachment.d.ts.map +1 -1
  34. package/dist/extensions/FileAttachment.js +2 -1
  35. package/dist/extensions/FixedDetails.d.ts.map +1 -1
  36. package/dist/extensions/FixedDetails.js +5 -3
  37. package/dist/extensions/LegacyBlock.d.ts.map +1 -1
  38. package/dist/extensions/LegacyBlock.js +8 -6
  39. package/dist/extensions/Math.d.ts.map +1 -1
  40. package/dist/extensions/Math.js +5 -2
  41. package/dist/extensions/MbusVideo.d.ts.map +1 -1
  42. package/dist/extensions/MbusVideo.js +73 -9
  43. package/dist/extensions/MediaToolbar.d.ts +41 -0
  44. package/dist/extensions/MediaToolbar.d.ts.map +1 -0
  45. package/dist/extensions/MediaToolbar.js +196 -0
  46. package/dist/extensions/MediaToolbar.test.d.ts +2 -0
  47. package/dist/extensions/MediaToolbar.test.d.ts.map +1 -0
  48. package/dist/extensions/MediaToolbar.test.js +231 -0
  49. package/dist/extensions/OrderedListMarker.d.ts +2 -0
  50. package/dist/extensions/OrderedListMarker.d.ts.map +1 -0
  51. package/dist/extensions/OrderedListMarker.js +114 -0
  52. package/dist/extensions/OrderedListMarker.test.d.ts +2 -0
  53. package/dist/extensions/OrderedListMarker.test.d.ts.map +1 -0
  54. package/dist/extensions/OrderedListMarker.test.js +176 -0
  55. package/dist/extensions/PdfBlock.d.ts.map +1 -1
  56. package/dist/extensions/PdfBlock.js +25 -23
  57. package/dist/extensions/ResizableImage.d.ts.map +1 -1
  58. package/dist/extensions/ResizableImage.js +20 -1
  59. package/dist/extensions/TableKeymap.d.ts +16 -0
  60. package/dist/extensions/TableKeymap.d.ts.map +1 -0
  61. package/dist/extensions/TableKeymap.js +97 -0
  62. package/dist/extensions/TableKeymap.test.d.ts +2 -0
  63. package/dist/extensions/TableKeymap.test.d.ts.map +1 -0
  64. package/dist/extensions/TableKeymap.test.js +147 -0
  65. package/dist/extensions/TabsBlock.d.ts.map +1 -1
  66. package/dist/extensions/TabsBlock.js +12 -9
  67. package/dist/extensions/TiptapMidibus.d.ts.map +1 -1
  68. package/dist/extensions/TiptapMidibus.js +60 -6
  69. package/dist/extensions/UploadSkeleton.d.ts +61 -0
  70. package/dist/extensions/UploadSkeleton.d.ts.map +1 -0
  71. package/dist/extensions/UploadSkeleton.js +233 -0
  72. package/dist/extensions/UploadSkeleton.test.d.ts +2 -0
  73. package/dist/extensions/UploadSkeleton.test.d.ts.map +1 -0
  74. package/dist/extensions/UploadSkeleton.test.js +128 -0
  75. package/dist/extensions/VideoEmbed.d.ts +8 -0
  76. package/dist/extensions/VideoEmbed.d.ts.map +1 -1
  77. package/dist/extensions/VideoEmbed.js +226 -45
  78. package/dist/extensions/VideoEmbed.test.js +131 -2
  79. package/dist/i18n/en.d.ts +3 -0
  80. package/dist/i18n/en.d.ts.map +1 -0
  81. package/dist/i18n/en.js +191 -0
  82. package/dist/i18n/es.d.ts +3 -0
  83. package/dist/i18n/es.d.ts.map +1 -0
  84. package/dist/i18n/es.js +191 -0
  85. package/dist/i18n/index.d.ts +43 -0
  86. package/dist/i18n/index.d.ts.map +1 -0
  87. package/dist/i18n/index.js +109 -0
  88. package/dist/i18n/index.test.d.ts +2 -0
  89. package/dist/i18n/index.test.d.ts.map +1 -0
  90. package/dist/i18n/index.test.js +173 -0
  91. package/dist/i18n/ja.d.ts +3 -0
  92. package/dist/i18n/ja.d.ts.map +1 -0
  93. package/dist/i18n/ja.js +191 -0
  94. package/dist/i18n/ko.d.ts +198 -0
  95. package/dist/i18n/ko.d.ts.map +1 -0
  96. package/dist/i18n/ko.js +215 -0
  97. package/dist/i18n/zh-hans.d.ts +3 -0
  98. package/dist/i18n/zh-hans.d.ts.map +1 -0
  99. package/dist/i18n/zh-hans.js +191 -0
  100. package/dist/i18n/zh-hant.d.ts +3 -0
  101. package/dist/i18n/zh-hant.d.ts.map +1 -0
  102. package/dist/i18n/zh-hant.js +192 -0
  103. package/dist/index.d.ts +7 -1
  104. package/dist/index.d.ts.map +1 -1
  105. package/dist/index.js +13 -1
  106. package/dist/static/highlight.d.ts +13 -0
  107. package/dist/static/highlight.d.ts.map +1 -0
  108. package/dist/static/highlight.js +99 -0
  109. package/dist/static/index.d.ts +33 -0
  110. package/dist/static/index.d.ts.map +1 -0
  111. package/dist/static/index.js +367 -0
  112. package/dist/static/index.test.d.ts +2 -0
  113. package/dist/static/index.test.d.ts.map +1 -0
  114. package/dist/static/index.test.js +194 -0
  115. package/dist/static/tokenizer.d.ts +52 -0
  116. package/dist/static/tokenizer.d.ts.map +1 -0
  117. package/dist/static/tokenizer.js +289 -0
  118. package/dist/styles/editor.css +1 -1
  119. package/dist/utils/emoji-data.d.ts +15 -0
  120. package/dist/utils/emoji-suggestion.d.ts +48 -0
  121. package/dist/utils/emoji-suggestion.d.ts.map +1 -0
  122. package/dist/utils/emoji-suggestion.js +51 -0
  123. package/dist/utils/emoji-suggestion.test.d.ts +2 -0
  124. package/dist/utils/emoji-suggestion.test.d.ts.map +1 -0
  125. package/dist/utils/emoji-suggestion.test.js +117 -0
  126. package/dist/utils/floating-helper.d.ts +60 -0
  127. package/dist/utils/floating-helper.d.ts.map +1 -0
  128. package/dist/utils/floating-helper.js +63 -0
  129. package/dist/utils/floating-helper.test.d.ts +2 -0
  130. package/dist/utils/floating-helper.test.d.ts.map +1 -0
  131. package/dist/utils/floating-helper.test.js +141 -0
  132. package/dist/utils/guard-vscode-paste.d.ts +19 -0
  133. package/dist/utils/guard-vscode-paste.d.ts.map +1 -0
  134. package/dist/utils/guard-vscode-paste.js +46 -0
  135. package/dist/utils/guard-vscode-paste.test.d.ts +2 -0
  136. package/dist/utils/guard-vscode-paste.test.d.ts.map +1 -0
  137. package/dist/utils/guard-vscode-paste.test.js +86 -0
  138. package/dist/utils/media-size.d.ts +29 -0
  139. package/dist/utils/media-size.d.ts.map +1 -0
  140. package/dist/utils/media-size.js +90 -0
  141. package/dist/utils/resize.d.ts +12 -0
  142. package/dist/utils/resize.d.ts.map +1 -1
  143. package/dist/utils/resize.js +5 -5
  144. package/dist/utils/sanitize.d.ts +2 -0
  145. package/dist/utils/sanitize.d.ts.map +1 -1
  146. package/dist/utils/sanitize.js +28 -3
  147. package/package.json +8 -1
@@ -1,5 +1,6 @@
1
1
  <script lang="ts">
2
2
  import { X } from "lucide-svelte";
3
+ import { defaultTranslator, type EditorTranslator } from "../i18n";
3
4
 
4
5
  let {
5
6
  title,
@@ -7,12 +8,15 @@
7
8
  defaultValue = "",
8
9
  onConfirm,
9
10
  onCancel,
11
+ t = defaultTranslator,
10
12
  }: {
11
13
  title: string;
12
14
  placeholder?: string;
13
15
  defaultValue?: string;
14
16
  onConfirm: (value: string) => void;
15
17
  onCancel: () => void;
18
+ /** 에디터 UI 번역 함수. 미주입 시 ko. */
19
+ t?: EditorTranslator;
16
20
  } = $props();
17
21
 
18
22
  let value = $state(defaultValue);
@@ -71,7 +75,7 @@
71
75
  type="button"
72
76
  class="p-1 rounded-md hover:bg-muted text-muted-foreground"
73
77
  onclick={onCancel}
74
- aria-label="닫기"
78
+ aria-label={t('close')}
75
79
  >
76
80
  <X size={14} />
77
81
  </button>
@@ -91,14 +95,14 @@
91
95
  class="px-3.5 py-1.5 text-sm rounded-md border border-border hover:bg-muted transition-colors"
92
96
  onclick={onCancel}
93
97
  >
94
- 취소
98
+ {t('cancel')}
95
99
  </button>
96
100
  <button
97
101
  type="button"
98
102
  class="px-3.5 py-1.5 text-sm rounded-md hce-btn-primary hover:opacity-90 transition-opacity"
99
103
  onclick={handleSubmit}
100
104
  >
101
- 확인
105
+ {t('confirm')}
102
106
  </button>
103
107
  </div>
104
108
  </div>
@@ -1,9 +1,12 @@
1
+ import { type EditorTranslator } from "../i18n";
1
2
  type $$ComponentProps = {
2
3
  title: string;
3
4
  placeholder?: string;
4
5
  defaultValue?: string;
5
6
  onConfirm: (value: string) => void;
6
7
  onCancel: () => void;
8
+ /** 에디터 UI 번역 함수. 미주입 시 ko. */
9
+ t?: EditorTranslator;
7
10
  };
8
11
  declare const InputModal: import("svelte").Component<$$ComponentProps, {}, "">;
9
12
  type InputModal = ReturnType<typeof InputModal>;
@@ -1 +1 @@
1
- {"version":3,"file":"InputModal.svelte.d.ts","sourceRoot":"","sources":["../../src/components/InputModal.svelte.ts"],"names":[],"mappings":"AAKC,KAAK,gBAAgB,GAAI;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACnC,QAAQ,EAAE,MAAM,IAAI,CAAC;CACtB,CAAC;AA+EJ,QAAA,MAAM,UAAU,sDAAwC,CAAC;AACzD,KAAK,UAAU,GAAG,UAAU,CAAC,OAAO,UAAU,CAAC,CAAC;AAChD,eAAe,UAAU,CAAC"}
1
+ {"version":3,"file":"InputModal.svelte.d.ts","sourceRoot":"","sources":["../../src/components/InputModal.svelte.ts"],"names":[],"mappings":"AAIA,OAAO,EAAqB,KAAK,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAElE,KAAK,gBAAgB,GAAI;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACnC,QAAQ,EAAE,MAAM,IAAI,CAAC;IACrB,8BAA8B;IAC9B,CAAC,CAAC,EAAE,gBAAgB,CAAC;CACtB,CAAC;AAiFJ,QAAA,MAAM,UAAU,sDAAwC,CAAC;AACzD,KAAK,UAAU,GAAG,UAAU,CAAC,OAAO,UAAU,CAAC,CAAC;AAChD,eAAe,UAAU,CAAC"}
@@ -11,18 +11,22 @@
11
11
  */
12
12
  import { X } from "lucide-svelte";
13
13
  import katex from "katex";
14
+ import { defaultTranslator, type EditorMessageKey, type EditorTranslator } from "../i18n";
14
15
 
15
16
  let {
16
17
  latex = "",
17
18
  displayMode = false,
18
19
  onConfirm,
19
20
  onCancel,
21
+ t = defaultTranslator,
20
22
  }: {
21
23
  latex?: string;
22
24
  displayMode?: boolean;
23
25
  /** 빈 문자열로 확인하면 호출부가 노드를 지운다(편집 중일 때). */
24
26
  onConfirm: (value: string) => void;
25
27
  onCancel: () => void;
28
+ /** 에디터 UI 번역 함수. 미주입 시 ko. */
29
+ t?: EditorTranslator;
26
30
  } = $props();
27
31
 
28
32
  let value = $state(latex);
@@ -87,27 +91,27 @@
87
91
  *
88
92
  * `$` 는 커서를 놓을 자리다(아래 `insert` 가 그 자리에 커서를 둔다). 없으면 끝에 놓인다.
89
93
  */
90
- const SYMBOLS: { label: string; snippet: string; title: string }[] = [
91
- { label: "x²", snippet: "^{$}", title: "위첨자" },
92
- { label: "xᵢ", snippet: "_{$}", title: "아래첨자" },
93
- { label: "a/b", snippet: "\\frac{$}{}", title: "분수" },
94
- { label: "√", snippet: "\\sqrt{$}", title: "제곱근" },
95
- { label: "∑", snippet: "\\sum_{i=1}^{n} $", title: "합" },
96
- { label: "∏", snippet: "\\prod_{i=1}^{n} $", title: "곱" },
97
- { label: "log", snippet: "\\log $", title: "로그" },
98
- { label: "O(n)", snippet: "O($)", title: "빅오 표기" },
99
- { label: "≤", snippet: "\\le $", title: "작거나 같다" },
100
- { label: "≥", snippet: "\\ge $", title: "크거나 같다" },
101
- { label: "≠", snippet: "\\ne $", title: "같지 않다" },
102
- { label: "×", snippet: "\\times $", title: "곱하기" },
103
- { label: "÷", snippet: "\\div $", title: "나누기" },
104
- { label: "∈", snippet: "\\in $", title: "원소" },
105
- { label: "∞", snippet: "\\infty $", title: "무한대" },
106
- { label: "α", snippet: "\\alpha $", title: "알파" },
107
- { label: "θ", snippet: "\\theta $", title: "세타" },
108
- { label: "π", snippet: "\\pi $", title: "파이" },
109
- { label: "→", snippet: "\\to $", title: "화살표" },
110
- { label: "⋯", snippet: "\\cdots $", title: "가운데 말줄임" },
94
+ const SYMBOLS: { label: string; snippet: string; titleKey: EditorMessageKey }[] = [
95
+ { label: "x²", snippet: "^{$}", titleKey: "mathSuperscript" },
96
+ { label: "xᵢ", snippet: "_{$}", titleKey: "mathSubscript" },
97
+ { label: "a/b", snippet: "\\frac{$}{}", titleKey: "mathFraction" },
98
+ { label: "√", snippet: "\\sqrt{$}", titleKey: "mathSqrt" },
99
+ { label: "∑", snippet: "\\sum_{i=1}^{n} $", titleKey: "mathSum" },
100
+ { label: "∏", snippet: "\\prod_{i=1}^{n} $", titleKey: "mathProduct" },
101
+ { label: "log", snippet: "\\log $", titleKey: "mathLog" },
102
+ { label: "O(n)", snippet: "O($)", titleKey: "mathBigO" },
103
+ { label: "≤", snippet: "\\le $", titleKey: "mathLe" },
104
+ { label: "≥", snippet: "\\ge $", titleKey: "mathGe" },
105
+ { label: "≠", snippet: "\\ne $", titleKey: "mathNe" },
106
+ { label: "×", snippet: "\\times $", titleKey: "mathTimes" },
107
+ { label: "÷", snippet: "\\div $", titleKey: "mathDivide" },
108
+ { label: "∈", snippet: "\\in $", titleKey: "mathIn" },
109
+ { label: "∞", snippet: "\\infty $", titleKey: "mathInfinity" },
110
+ { label: "α", snippet: "\\alpha $", titleKey: "mathAlpha" },
111
+ { label: "θ", snippet: "\\theta $", titleKey: "mathTheta" },
112
+ { label: "π", snippet: "\\pi $", titleKey: "mathPi" },
113
+ { label: "→", snippet: "\\to $", titleKey: "mathArrow" },
114
+ { label: "⋯", snippet: "\\cdots $", titleKey: "mathCdots" },
111
115
  ];
112
116
 
113
117
  /**
@@ -158,13 +162,13 @@
158
162
  >
159
163
  <div class="flex items-center justify-between mb-3">
160
164
  <span class="text-sm font-semibold">
161
- {displayMode ? "수식 블록" : "인라인 수식"}
165
+ {displayMode ? t('mathBlock') : t('mathInline')}
162
166
  </span>
163
167
  <button
164
168
  type="button"
165
169
  class="p-1 rounded-md hover:bg-muted text-muted-foreground"
166
170
  onclick={onCancel}
167
- aria-label="닫기"
171
+ aria-label={t('close')}
168
172
  >
169
173
  <X size={14} />
170
174
  </button>
@@ -189,8 +193,8 @@
189
193
  <button
190
194
  type="button"
191
195
  class="hce-math-sym"
192
- title={sym.title}
193
- aria-label={sym.title}
196
+ title={t(sym.titleKey)}
197
+ aria-label={t(sym.titleKey)}
194
198
  onclick={() => insert(sym.snippet)}
195
199
  >
196
200
  {sym.label}
@@ -215,26 +219,26 @@
215
219
  <!-- eslint-disable-next-line svelte/no-at-html-tags -->
216
220
  {@html preview.html}
217
221
  {:else}
218
- <span class="text-xs text-muted-foreground">미리보기</span>
222
+ <span class="text-xs text-muted-foreground">{t('preview')}</span>
219
223
  {/if}
220
224
  </div>
221
225
 
222
226
  <div class="hce-math-actions flex items-center justify-between gap-2 mt-4">
223
- <span class="text-[11px] text-muted-foreground">⌘/Ctrl + Enter 로 확인</span>
227
+ <span class="text-[11px] text-muted-foreground">{t('mathConfirmHint')}</span>
224
228
  <div class="flex gap-2">
225
229
  <button
226
230
  type="button"
227
231
  class="px-3.5 py-1.5 text-sm rounded-md border border-border hover:bg-muted transition-colors"
228
232
  onclick={onCancel}
229
233
  >
230
- 취소
234
+ {t('cancel')}
231
235
  </button>
232
236
  <button
233
237
  type="button"
234
238
  class="px-3.5 py-1.5 text-sm rounded-md hce-btn-primary hover:opacity-90 transition-opacity"
235
239
  onclick={handleSubmit}
236
240
  >
237
- 확인
241
+ {t('confirm')}
238
242
  </button>
239
243
  </div>
240
244
  </div>
@@ -1,9 +1,12 @@
1
+ import { type EditorTranslator } from "../i18n";
1
2
  type $$ComponentProps = {
2
3
  latex?: string;
3
4
  displayMode?: boolean;
4
5
  /** 빈 문자열로 확인하면 호출부가 노드를 지운다(편집 중일 때). */
5
6
  onConfirm: (value: string) => void;
6
7
  onCancel: () => void;
8
+ /** 에디터 UI 번역 함수. 미주입 시 ko. */
9
+ t?: EditorTranslator;
7
10
  };
8
11
  declare const MathModal: import("svelte").Component<$$ComponentProps, {}, "">;
9
12
  type MathModal = ReturnType<typeof MathModal>;
@@ -1 +1 @@
1
- {"version":3,"file":"MathModal.svelte.d.ts","sourceRoot":"","sources":["../../src/components/MathModal.svelte.ts"],"names":[],"mappings":"AAgBC,KAAK,gBAAgB,GAAI;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,yCAAyC;IACzC,SAAS,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACnC,QAAQ,EAAE,MAAM,IAAI,CAAC;CACtB,CAAC;AAuLJ,QAAA,MAAM,SAAS,sDAAwC,CAAC;AACxD,KAAK,SAAS,GAAG,UAAU,CAAC,OAAO,SAAS,CAAC,CAAC;AAC9C,eAAe,SAAS,CAAC"}
1
+ {"version":3,"file":"MathModal.svelte.d.ts","sourceRoot":"","sources":["../../src/components/MathModal.svelte.ts"],"names":[],"mappings":"AAeA,OAAO,EAA4C,KAAK,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAEzF,KAAK,gBAAgB,GAAI;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,yCAAyC;IACzC,SAAS,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACnC,QAAQ,EAAE,MAAM,IAAI,CAAC;IACrB,8BAA8B;IAC9B,CAAC,CAAC,EAAE,gBAAgB,CAAC;CACtB,CAAC;AAyLJ,QAAA,MAAM,SAAS,sDAAwC,CAAC;AACxD,KAAK,SAAS,GAAG,UAAU,CAAC,OAAO,SAAS,CAAC,CAAC;AAC9C,eAAe,SAAS,CAAC"}
@@ -11,6 +11,7 @@
11
11
  * 업로드 함수도, 노드를 만드는 방법도 거기 있기 때문이다.
12
12
  */
13
13
  import { X } from "lucide-svelte";
14
+ import { defaultTranslator, type EditorTranslator } from "../i18n";
14
15
 
15
16
  let {
16
17
  title,
@@ -22,6 +23,7 @@
22
23
  onUpload,
23
24
  onLink,
24
25
  onCancel,
26
+ t = defaultTranslator,
25
27
  }: {
26
28
  title: string;
27
29
  /** 파일 선택창에서 거를 확장자. 파일 첨부처럼 아무거나 받는 곳은 비운다. */
@@ -35,6 +37,8 @@
35
37
  onUpload: (file: File) => void;
36
38
  onLink: (url: string) => void;
37
39
  onCancel: () => void;
40
+ /** 에디터 UI 번역 함수. 미주입 시 ko. */
41
+ t?: EditorTranslator;
38
42
  } = $props();
39
43
 
40
44
  let tab: "upload" | "link" = $state("upload");
@@ -82,7 +86,7 @@
82
86
  type="button"
83
87
  class="p-1 rounded-md hover:bg-muted text-muted-foreground"
84
88
  onclick={onCancel}
85
- aria-label="닫기"
89
+ aria-label={t('close')}
86
90
  >
87
91
  <X size={14} />
88
92
  </button>
@@ -101,7 +105,7 @@
101
105
  class:hce-picker-tab-on={tab === "upload"}
102
106
  onclick={() => (tab = "upload")}
103
107
  >
104
- 업로드
108
+ {t('upload')}
105
109
  </button>
106
110
  <button
107
111
  type="button"
@@ -111,7 +115,7 @@
111
115
  class:hce-picker-tab-on={tab === "link"}
112
116
  onclick={() => (tab = "link")}
113
117
  >
114
- 링크
118
+ {t('link')}
115
119
  </button>
116
120
  </div>
117
121
 
@@ -1,3 +1,4 @@
1
+ import { type EditorTranslator } from "../i18n";
1
2
  type $$ComponentProps = {
2
3
  title: string;
3
4
  /** 파일 선택창에서 거를 확장자. 파일 첨부처럼 아무거나 받는 곳은 비운다. */
@@ -11,6 +12,8 @@ type $$ComponentProps = {
11
12
  onUpload: (file: File) => void;
12
13
  onLink: (url: string) => void;
13
14
  onCancel: () => void;
15
+ /** 에디터 UI 번역 함수. 미주입 시 ko. */
16
+ t?: EditorTranslator;
14
17
  };
15
18
  declare const MediaPickerModal: import("svelte").Component<$$ComponentProps, {}, "">;
16
19
  type MediaPickerModal = ReturnType<typeof MediaPickerModal>;
@@ -1 +1 @@
1
- {"version":3,"file":"MediaPickerModal.svelte.d.ts","sourceRoot":"","sources":["../../src/components/MediaPickerModal.svelte.ts"],"names":[],"mappings":"AAgBC,KAAK,gBAAgB,GAAI;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,+CAA+C;IAC/C,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe,EAAE,MAAM,CAAC;IACxB,gBAAgB,EAAE,MAAM,CAAC;IACzB,iCAAiC;IACjC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,kDAAkD;IAClD,QAAQ,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,IAAI,CAAC;IAC/B,MAAM,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IAC9B,QAAQ,EAAE,MAAM,IAAI,CAAC;CACtB,CAAC;AAkGJ,QAAA,MAAM,gBAAgB,sDAAwC,CAAC;AAC/D,KAAK,gBAAgB,GAAG,UAAU,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAC5D,eAAe,gBAAgB,CAAC"}
1
+ {"version":3,"file":"MediaPickerModal.svelte.d.ts","sourceRoot":"","sources":["../../src/components/MediaPickerModal.svelte.ts"],"names":[],"mappings":"AAeA,OAAO,EAAqB,KAAK,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAElE,KAAK,gBAAgB,GAAI;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,+CAA+C;IAC/C,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe,EAAE,MAAM,CAAC;IACxB,gBAAgB,EAAE,MAAM,CAAC;IACzB,iCAAiC;IACjC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,kDAAkD;IAClD,QAAQ,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,IAAI,CAAC;IAC/B,MAAM,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IAC9B,QAAQ,EAAE,MAAM,IAAI,CAAC;IACrB,8BAA8B;IAC9B,CAAC,CAAC,EAAE,gBAAgB,CAAC;CACtB,CAAC;AAoGJ,QAAA,MAAM,gBAAgB,sDAAwC,CAAC;AAC/D,KAAK,gBAAgB,GAAG,UAAU,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAC5D,eAAe,gBAAgB,CAAC"}