diff --git a/components/admin/AdminMarkdownEditor.vue b/components/admin/AdminMarkdownEditor.vue
index 920d6b4..de7e2cc 100644
--- a/components/admin/AdminMarkdownEditor.vue
+++ b/components/admin/AdminMarkdownEditor.vue
@@ -22,6 +22,7 @@ import {
getEditorHistoryEntryValue
} from '../../lib/markdown-editor-history.js'
import {
+ buildMediaPickerEmptyMessage,
buildMediaPickerUploadHint,
buildMediaPickerPageItems,
buildMediaPickerRangeLabel,
@@ -3366,6 +3367,12 @@ const mediaPickerUploadHint = computed(() => buildMediaPickerUploadHint(
uploadSizeLimits.value
))
+/**
+ * 미디어 라이브러리 빈 상태 문구를 반환한다.
+ * @returns {string} 빈 상태 문구
+ */
+const mediaPickerEmptyMessage = computed(() => buildMediaPickerEmptyMessage(mediaSearchQuery.value))
+
/**
* 붙여넣은 이미지 파일을 업로드한다.
* @param {ClipboardEvent} event - 붙여넣기 이벤트
@@ -3702,12 +3709,7 @@ const handleKeydown = (event) => {
-
- 「{{ mediaSearchQuery.trim() }}」에 맞는 미디어가 없습니다.
-
-
- 선택할 미디어가 없습니다. 업로드 탭에서 파일을 추가할 수 있습니다.
-
+ {{ mediaPickerEmptyMessage }}
{
return `단일 이미지가 본문에 삽입됩니다. (최대 ${formatUploadSizeLimit(uploadSizeLimits.image)})`
}
+/**
+ * 미디어 선택 라이브러리 빈 상태 문구를 만든다.
+ * @param {string} searchQuery - 검색어
+ * @returns {string} 빈 상태 문구
+ */
+export const buildMediaPickerEmptyMessage = (searchQuery) => {
+ const normalizedQuery = String(searchQuery || '').trim()
+
+ if (normalizedQuery) {
+ return `「${normalizedQuery}」에 맞는 미디어가 없습니다.`
+ }
+
+ return '선택할 미디어가 없습니다. 업로드 탭에서 파일을 추가할 수 있습니다.'
+}
+
/**
* 미디어 항목으로 Prose 미디어 블록을 만든다.
* @param {'video'|'audio'|'file'} blockType - 블록 유형
diff --git a/package-lock.json b/package-lock.json
index bc4cddd..aa65718 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1,12 +1,12 @@
{
"name": "sori.studio",
- "version": "1.11.75",
+ "version": "1.11.76",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "sori.studio",
- "version": "1.11.75",
+ "version": "1.11.76",
"hasInstallScript": true,
"dependencies": {
"@nuxtjs/tailwindcss": "^6.14.0",
diff --git a/package.json b/package.json
index 76ec122..a330fdf 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "sori.studio",
- "version": "1.11.75",
+ "version": "1.11.76",
"private": true,
"type": "module",
"imports": {
diff --git a/tests/markdown-editor-media.test.js b/tests/markdown-editor-media.test.js
index 77dadcb..aeeaa0f 100644
--- a/tests/markdown-editor-media.test.js
+++ b/tests/markdown-editor-media.test.js
@@ -1,6 +1,7 @@
import assert from 'node:assert/strict'
import test from 'node:test'
import {
+ buildMediaPickerEmptyMessage,
buildMediaPickerPageItems,
buildMediaPickerRangeLabel,
buildMediaPickerUploadHint,
@@ -107,6 +108,11 @@ test('미디어 선택 대상별 갤러리 여부와 업로드 안내 문구를
assert.equal(buildMediaPickerUploadHint('image', uploadSizeLimits), '단일 이미지가 본문에 삽입됩니다. (최대 10MB)')
})
+test('미디어 선택 라이브러리 빈 상태 문구를 계산한다', () => {
+ assert.equal(buildMediaPickerEmptyMessage(''), '선택할 미디어가 없습니다. 업로드 탭에서 파일을 추가할 수 있습니다.')
+ assert.equal(buildMediaPickerEmptyMessage(' car '), '「car」에 맞는 미디어가 없습니다.')
+})
+
test('미디어 항목으로 fenced 미디어 블록을 만든다', () => {
assert.deepEqual(createMediaBlockMarkdown('video', {
url: '/uploads/a.mp4',