@templatical/editor 0.8.4 → 0.8.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{AiChatSidebar-CnRXeK77.js → AiChatSidebar-uhkhnXQd.js} +1 -1
- package/dist/{AiFeatureMenu-BYDDrpj6.js → AiFeatureMenu-DXNKvXP5.js} +1 -1
- package/dist/{CloudEditor-B9a_K6Cm.js → CloudEditor-BSkPQjwo.js} +6 -6
- package/dist/{CollaboratorBar-HN4whzM-.js → CollaboratorBar-CP76Sh6c.js} +1 -1
- package/dist/{DesignReferenceSidebar-0GwjUn2V.js → DesignReferenceSidebar-CfJqJ7l6.js} +1 -1
- package/dist/{ModuleBrowserModal-DPZBsvqk.js → ModuleBrowserModal-BFQTm6uY.js} +4 -4
- package/dist/{ModulePreviewCanvas-CK4j11-e.js → ModulePreviewCanvas-DeqMpo73.js} +1 -1
- package/dist/{ParagraphEditor-DBus_iHH.js → ParagraphEditor-DqomSbW3.js} +13 -13
- package/dist/{SaveModuleDialog-DORRSbBo.js → SaveModuleDialog-DKcpPeWd.js} +2 -2
- package/dist/{SnapshotHistory-DTMVEk03.js → SnapshotHistory-Z9RQj53S.js} +1 -1
- package/dist/{TestEmailModal-DJmYp0Qi.js → TestEmailModal-C8DhylO1.js} +2 -2
- package/dist/{TitleEditor-70d9AF1V.js → TitleEditor-CgLrn6R3.js} +5 -5
- package/dist/{TplModal-BEfwlvPC.js → TplModal-CbwRwmR3.js} +1 -1
- package/dist/{blockTypeIcons-2DRoPa3K.js → blockTypeIcons-CccKujXP.js} +1 -1
- package/dist/bundle-stats.json +6 -6
- package/dist/cdn/chunks/{AiFeatureMenu-CcuKnisc.js → AiFeatureMenu-ChNv7XXj.js} +2 -2
- package/dist/cdn/chunks/{AiFeatureMenu-CcuKnisc.js.map → AiFeatureMenu-ChNv7XXj.js.map} +1 -1
- package/dist/cdn/chunks/{BlockIssueBadge-Sr3is7Wr.js → BlockIssueBadge-BovmWgok.js} +2 -2
- package/dist/cdn/chunks/{BlockIssueBadge-Sr3is7Wr.js.map → BlockIssueBadge-BovmWgok.js.map} +1 -1
- package/dist/cdn/chunks/{CloudEditor-Bi10d2Gq.js → CloudEditor-CHF_P5OL.js} +7 -7
- package/dist/cdn/chunks/{CloudEditor-Bi10d2Gq.js.map → CloudEditor-CHF_P5OL.js.map} +1 -1
- package/dist/cdn/chunks/{CollaboratorBar-C0zeecvl.js → CollaboratorBar-Bjr5YSh0.js} +3 -3
- package/dist/cdn/chunks/{CollaboratorBar-C0zeecvl.js.map → CollaboratorBar-Bjr5YSh0.js.map} +1 -1
- package/dist/cdn/chunks/{CountdownBlock-CpSUUDDs.js → CountdownBlock-KyzvhjMF.js} +2 -2
- package/dist/cdn/chunks/{CountdownBlock-CpSUUDDs.js.map → CountdownBlock-KyzvhjMF.js.map} +1 -1
- package/dist/cdn/chunks/{CountdownToolbar-BBzdR-00.js → CountdownToolbar-bJtMHGYz.js} +3 -3
- package/dist/cdn/chunks/{CountdownToolbar-BBzdR-00.js.map → CountdownToolbar-bJtMHGYz.js.map} +1 -1
- package/dist/cdn/chunks/{IssuesPanel-Bthq6qoZ.js → IssuesPanel-DFSYTQXy.js} +3 -3
- package/dist/cdn/chunks/{IssuesPanel-Bthq6qoZ.js.map → IssuesPanel-DFSYTQXy.js.map} +1 -1
- package/dist/cdn/chunks/{ModuleBrowserModal-CFMd6M7E.js → ModuleBrowserModal-DS0BGRhZ.js} +5 -5
- package/dist/cdn/chunks/{ModuleBrowserModal-CFMd6M7E.js.map → ModuleBrowserModal-DS0BGRhZ.js.map} +1 -1
- package/dist/cdn/chunks/{ModulePreviewCanvas-BkcPcF5C.js → ModulePreviewCanvas-Dwn2cA5a.js} +2 -2
- package/dist/cdn/chunks/{ModulePreviewCanvas-BkcPcF5C.js.map → ModulePreviewCanvas-Dwn2cA5a.js.map} +1 -1
- package/dist/cdn/chunks/{NumberWithSuffix-C2hH_ZIK.js → NumberWithSuffix-BNBeHv0P.js} +2 -2
- package/dist/cdn/chunks/{NumberWithSuffix-C2hH_ZIK.js.map → NumberWithSuffix-BNBeHv0P.js.map} +1 -1
- package/dist/cdn/chunks/{ParagraphEditor-BIWXLPfu.js → ParagraphEditor-C4TrTIOm.js} +16 -16
- package/dist/cdn/chunks/{ParagraphEditor-BIWXLPfu.js.map → ParagraphEditor-C4TrTIOm.js.map} +1 -1
- package/dist/cdn/chunks/{RichTextEditorContent-DU0gc4bi.js → RichTextEditorContent-HNFFL4aK.js} +2 -2
- package/dist/cdn/chunks/{RichTextEditorContent-DU0gc4bi.js.map → RichTextEditorContent-HNFFL4aK.js.map} +1 -1
- package/dist/cdn/chunks/{SaveModuleDialog-DR9EZlWe.js → SaveModuleDialog-CbHqqeID.js} +2 -2
- package/dist/cdn/chunks/{SaveModuleDialog-DR9EZlWe.js.map → SaveModuleDialog-CbHqqeID.js.map} +1 -1
- package/dist/cdn/chunks/{TitleEditor-DZcx2N4R.js → TitleEditor-gr-eBUq_.js} +8 -8
- package/dist/cdn/chunks/{TitleEditor-DZcx2N4R.js.map → TitleEditor-gr-eBUq_.js.map} +1 -1
- package/dist/cdn/chunks/{blockTypeIcons-eVGGIdne.js → blockTypeIcons-BUlgu9JL.js} +3 -3
- package/dist/cdn/chunks/{blockTypeIcons-eVGGIdne.js.map → blockTypeIcons-BUlgu9JL.js.map} +1 -1
- package/dist/cdn/chunks/{extensions-CvCoOuWB.js → extensions-DK_lVs7A.js} +3 -3
- package/dist/cdn/chunks/{extensions-CvCoOuWB.js.map → extensions-DK_lVs7A.js.map} +1 -1
- package/dist/cdn/chunks/{features-CUYy5kZQ.js → features-LiilsBqW.js} +806 -773
- package/dist/cdn/chunks/features-LiilsBqW.js.map +1 -0
- package/dist/cdn/chunks/{icons-C4zY5-I3.js → icons-Bn2SIR30.js} +2 -2
- package/dist/cdn/chunks/{icons-C4zY5-I3.js.map → icons-Bn2SIR30.js.map} +1 -1
- package/dist/cdn/chunks/{media-library-BNt3msId.js → media-library-Bb2PavAd.js} +3 -3
- package/dist/cdn/chunks/{media-library-BNt3msId.js.map → media-library-Bb2PavAd.js.map} +1 -1
- package/dist/cdn/chunks/{quality-BTPRPGB-.js → quality-Bpj6kNxR.js} +180 -154
- package/dist/cdn/chunks/{quality-BTPRPGB-.js.map → quality-Bpj6kNxR.js.map} +1 -1
- package/dist/cdn/chunks/{renderer-IOmuuZjJ.js → renderer-CYYyu-Di.js} +130 -96
- package/dist/cdn/chunks/{renderer-IOmuuZjJ.js.map → renderer-CYYyu-Di.js.map} +1 -1
- package/dist/cdn/chunks/{src-Dp0ZFQ4-.js → src-CQjZnxvw.js} +4 -4
- package/dist/cdn/chunks/{src-Dp0ZFQ4-.js.map → src-CQjZnxvw.js.map} +1 -1
- package/dist/cdn/chunks/{styles-DtgjgsBH.js → styles-5g8XOS68.js} +8 -8
- package/dist/cdn/chunks/{styles-DtgjgsBH.js.map → styles-5g8XOS68.js.map} +1 -1
- package/dist/cdn/chunks/{tiptap-BErAJEvo.js → tiptap-BBbH3IT9.js} +849 -725
- package/dist/cdn/chunks/tiptap-BBbH3IT9.js.map +1 -0
- package/dist/cdn/editor.js +5 -5
- package/dist/{cloud-Dz8Ay2FM.js → cloud-VxYMtfXC.js} +1 -1
- package/dist/{dist-BygsE-n3.js → dist-BDgf2G-V.js} +453 -314
- package/dist/{dist-BtDBsF3N.js → dist-BxP6TB0l.js} +2 -2
- package/dist/{dist-DWhP3Dp2.js → dist-BzuC8o3y.js} +1209 -1217
- package/dist/{dist-v-O2Subd.js → dist-C0jo8wtG.js} +2 -2
- package/dist/{dist-BTgujVMy.js → dist-C8wMh_gi.js} +2 -2
- package/dist/{dist-Cipw2HFH.js → dist-CIV3Brg-.js} +37 -4
- package/dist/{dist-BS5Oi67L.js → dist-CUpJmrjt.js} +2 -2
- package/dist/dist-D5lmdi1F.js +5 -0
- package/dist/{dist-T-ORzNfM.js → dist-D8C6jIXM.js} +168 -175
- package/dist/dist-DILjuzSv.js +5 -0
- package/dist/{dist-CDtcJMB2.js → dist-DXaxGLsw.js} +33 -33
- package/dist/{dist-DnGTaPRX.js → dist-DYO-w_Jf.js} +2 -2
- package/dist/{dist-CDZCyoRy.js → dist-UK-lbEBc.js} +2 -2
- package/dist/{extensions-BmGiz8Oo.js → extensions-DeNHyWwh.js} +27 -27
- package/dist/{styles-DFeOGKa_.js → styles-Bgqv7rLA.js} +4 -4
- package/dist/templatical-editor.js +3 -3
- package/dist/{useEditorCore-BXz-UXPd.js → useEditorCore-CaOVDL_m.js} +4 -4
- package/dist/{useMergeTag-CS2bmWA0.js → useMergeTag-RWsgUcSh.js} +1 -1
- package/package.json +21 -21
- package/dist/cdn/chunks/features-CUYy5kZQ.js.map +0 -1
- package/dist/cdn/chunks/tiptap-BErAJEvo.js.map +0 -1
- package/dist/dist-BySzGkeC.js +0 -5
- package/dist/dist-D7JUZ2Kd.js +0 -5
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"media-library-BNt3msId.js","names":["t","e","i","n","s","o","r","a","h","c","l","u","d","m"],"sources":["../../../../media-library/src/api-client.ts","../../../../media-library/src/composable.ts","../../../../media-library/src/composables/useI18n.ts","../../../../media-library/src/components/media/MediaBreadcrumb.vue","../../../../media-library/src/components/media/MediaBreadcrumb.vue","../../../../media-library/src/composables/useMediaCategories.ts","../../../../media-library/src/composables/useImageCrop.ts","../../../../media-library/src/keys.ts","../../../../../node_modules/.pnpm/vue-advanced-cropper@2.8.9_vue@3.5.34_typescript@6.0.3_/node_modules/vue-advanced-cropper/dist/index.esm-bundler.js","../../../../media-library/src/components/media/MediaEditModal.vue","../../../../media-library/src/components/media/MediaEditModal.vue","../../../../media-library/src/components/media/MediaFolderTreeNode.vue","../../../../media-library/src/components/media/MediaFolderTreeNode.vue","../../../../media-library/src/components/media/MediaFolderTree.vue","../../../../media-library/src/components/media/MediaFolderTree.vue","../../../../media-library/src/components/media/MediaFileIcon.vue","../../../../media-library/src/components/media/MediaFileIcon.vue","../../../../media-library/src/components/media/MediaGrid.vue","../../../../media-library/src/components/media/MediaGrid.vue","../../../../media-library/src/components/media/MediaImportUrlModal.vue","../../../../media-library/src/components/media/MediaImportUrlModal.vue","../../../../media-library/src/components/media/MediaMovePicker.vue","../../../../media-library/src/components/media/MediaMovePicker.vue","../../../../media-library/src/components/media/MediaPreviewPanel.vue","../../../../media-library/src/components/media/MediaPreviewPanel.vue","../../../../media-library/src/components/media/MediaReplaceModal.vue","../../../../media-library/src/components/media/MediaReplaceModal.vue","../../../../media-library/src/components/media/MediaUploadZone.vue","../../../../media-library/src/components/media/MediaUploadZone.vue","../../../../media-library/src/components/media/StorageProgressRing.vue","../../../../media-library/src/components/media/StorageProgressRing.vue","../../../../media-library/src/composables/useMediaLibraryUI.ts","../../../../media-library/src/components/MediaLibraryModal.vue","../../../../media-library/src/components/MediaLibraryModal.vue"],"sourcesContent":["import type { ApiError, ApiResponse } from \"@templatical/types\";\nimport type { AuthManager } from \"@templatical/core/cloud\";\nimport { API_ROUTES, buildUrl } from \"@templatical/core/cloud\";\nimport type {\n MediaBrowseParams,\n MediaBrowseResponse,\n MediaFolder,\n MediaItem,\n MediaUsageResponse,\n} from \"./types\";\n\nexport class MediaApiClient {\n constructor(private readonly authManager: AuthManager) {}\n\n private get projectId(): string {\n return this.authManager.projectId;\n }\n\n private get tenantSlug(): string {\n return this.authManager.tenantSlug;\n }\n\n private get baseParams(): Record<string, string> {\n return { project: this.projectId, tenant: this.tenantSlug };\n }\n\n private async request<T>(\n path: string,\n options: RequestInit = {},\n ): Promise<T> {\n const response = await this.authManager.authenticatedFetch(path, {\n ...options,\n headers: {\n \"Content-Type\": \"application/json\",\n Accept: \"application/json\",\n ...options.headers,\n },\n });\n\n if (!response.ok) {\n const error: ApiError = await response.json().catch(() => ({\n message: `HTTP error ${response.status}`,\n }));\n throw new Error(error.message, { cause: error });\n }\n\n if (response.status === 204) {\n return undefined as T;\n }\n\n const json: ApiResponse<T> = await response.json();\n return json.data;\n }\n\n async browseMedia(\n params: Omit<MediaBrowseParams, \"project_id\">,\n ): Promise<MediaBrowseResponse> {\n const query = new URLSearchParams();\n if (params.folder_id) query.set(\"folder_id\", params.folder_id);\n if (params.search) query.set(\"search\", params.search);\n if (params.category) query.set(\"category\", params.category);\n if (params.sort) query.set(\"sort\", params.sort);\n if (params.cursor) query.set(\"cursor\", params.cursor);\n\n const queryString = query.toString();\n const url = `${buildUrl(API_ROUTES[\"media.browse\"], this.baseParams)}${queryString ? `?${queryString}` : \"\"}`;\n const response = await this.authManager.authenticatedFetch(url, {\n headers: { Accept: \"application/json\" },\n });\n\n if (!response.ok) {\n const error: ApiError = await response.json().catch(() => ({\n message: `HTTP error ${response.status}`,\n }));\n throw new Error(error.message, { cause: error });\n }\n\n return response.json();\n }\n\n async uploadMedia(file: File, folderId?: string | null): Promise<MediaItem> {\n const formData = new FormData();\n formData.append(\"file\", file);\n if (folderId) formData.append(\"folder_id\", folderId);\n\n const url = buildUrl(API_ROUTES[\"media.upload\"], this.baseParams);\n const response = await this.authManager.authenticatedFetch(url, {\n method: \"POST\",\n headers: { Accept: \"application/json\" },\n body: formData,\n });\n\n if (!response.ok) {\n const error: ApiError = await response.json().catch(() => ({\n message: `HTTP error ${response.status}`,\n }));\n throw new Error(error.message, { cause: error });\n }\n\n const json: ApiResponse<MediaItem> = await response.json();\n return json.data;\n }\n\n async updateMedia(\n mediaId: string,\n filename: string,\n altText?: string,\n ): Promise<MediaItem> {\n return this.request<MediaItem>(\n buildUrl(API_ROUTES[\"media.update\"], {\n ...this.baseParams,\n media: mediaId,\n }),\n {\n method: \"PUT\",\n body: JSON.stringify({\n filename,\n alt_text: altText,\n }),\n },\n );\n }\n\n async deleteMedia(ids: string[]): Promise<void> {\n return this.request<void>(\n buildUrl(API_ROUTES[\"media.delete\"], this.baseParams),\n {\n method: \"POST\",\n body: JSON.stringify({ ids }),\n },\n );\n }\n\n async moveMedia(\n ids: string[],\n folderId: string | null,\n ): Promise<MediaItem[]> {\n return this.request<MediaItem[]>(\n buildUrl(API_ROUTES[\"media.move\"], this.baseParams),\n {\n method: \"POST\",\n body: JSON.stringify({ ids, folder_id: folderId }),\n },\n );\n }\n\n async getMediaFolders(): Promise<MediaFolder[]> {\n return this.request<MediaFolder[]>(\n buildUrl(API_ROUTES[\"folders.index\"], this.baseParams),\n );\n }\n\n async createMediaFolder(\n name: string,\n parentId?: string | null,\n ): Promise<MediaFolder> {\n return this.request<MediaFolder>(\n buildUrl(API_ROUTES[\"folders.store\"], this.baseParams),\n {\n method: \"POST\",\n body: JSON.stringify({\n name,\n parent_id: parentId ?? null,\n }),\n },\n );\n }\n\n async renameMediaFolder(\n folderId: string,\n name: string,\n ): Promise<MediaFolder> {\n return this.request<MediaFolder>(\n buildUrl(API_ROUTES[\"folders.update\"], {\n ...this.baseParams,\n mediaFolder: folderId,\n }),\n {\n method: \"PUT\",\n body: JSON.stringify({ name }),\n },\n );\n }\n\n async deleteMediaFolder(folderId: string): Promise<void> {\n return this.request<void>(\n buildUrl(API_ROUTES[\"folders.destroy\"], {\n ...this.baseParams,\n mediaFolder: folderId,\n }),\n {\n method: \"DELETE\",\n },\n );\n }\n\n async checkMediaUsage(ids: string[]): Promise<MediaUsageResponse> {\n const response = await this.authManager.authenticatedFetch(\n buildUrl(API_ROUTES[\"media.checkUsage\"], this.baseParams),\n {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n Accept: \"application/json\",\n },\n body: JSON.stringify({ ids }),\n },\n );\n\n if (!response.ok) {\n const error: ApiError = await response.json().catch(() => ({\n message: `HTTP error ${response.status}`,\n }));\n throw new Error(error.message, { cause: error });\n }\n\n return response.json();\n }\n\n async getFrequentlyUsed(): Promise<MediaItem[]> {\n return this.request<MediaItem[]>(\n buildUrl(API_ROUTES[\"media.frequentlyUsed\"], this.baseParams),\n );\n }\n\n async importFromUrl(\n url: string,\n folderId?: string | null,\n ): Promise<MediaItem> {\n return this.request<MediaItem>(\n buildUrl(API_ROUTES[\"media.importFromUrl\"], this.baseParams),\n {\n method: \"POST\",\n body: JSON.stringify({\n url,\n folder_id: folderId ?? null,\n }),\n },\n );\n }\n\n async replaceMedia(mediaId: string, file: File): Promise<MediaItem> {\n const formData = new FormData();\n formData.append(\"file\", file);\n\n const url = buildUrl(API_ROUTES[\"media.replace\"], {\n ...this.baseParams,\n media: mediaId,\n });\n const response = await this.authManager.authenticatedFetch(url, {\n method: \"POST\",\n headers: { Accept: \"application/json\" },\n body: formData,\n });\n\n if (!response.ok) {\n const error: ApiError = await response.json().catch(() => ({\n message: `HTTP error ${response.status}`,\n }));\n throw new Error(error.message, { cause: error });\n }\n\n const json: ApiResponse<MediaItem> = await response.json();\n return json.data;\n }\n}\n","import type { AuthManager } from \"@templatical/core/cloud\";\nimport { MediaApiClient } from \"./api-client\";\nimport { ref, type Ref } from \"vue\";\nimport type { MediaFolder, MediaItem, MediaUsageInfo } from \"./types\";\n\nexport type MediaViewMode = \"files\" | \"frequently-used\";\n\nexport interface UseMediaLibraryOptions {\n projectId: string;\n authManager: AuthManager;\n onError?: (error: Error) => void;\n}\n\nexport function useMediaLibrary(options: UseMediaLibraryOptions) {\n if (!options.projectId) {\n throw new Error(\"projectId is required for useMediaLibrary\");\n }\n\n const api = new MediaApiClient(options.authManager);\n\n const items: Ref<MediaItem[]> = ref([]);\n const folders: Ref<MediaFolder[]> = ref([]);\n const currentFolderId: Ref<string | null> = ref(null);\n const viewMode: Ref<MediaViewMode> = ref(\"files\");\n const searchQuery: Ref<string> = ref(\"\");\n const categoryFilter: Ref<string | null> = ref(null);\n const sortOption: Ref<string> = ref(\"newest\");\n const isLoading = ref(false);\n const isUploading = ref(false);\n const hasMore = ref(false);\n const nextCursor: Ref<string | null> = ref(null);\n const uploadProgress: Ref<{ current: number; total: number } | null> =\n ref(null);\n const selectedItems: Ref<Set<string>> = ref(new Set());\n const previewItem: Ref<MediaItem | null> = ref(null);\n const frequentlyUsedItems: Ref<MediaItem[]> = ref([]);\n const deleteUsageInfo: Ref<Record<string, MediaUsageInfo>> = ref({});\n const showDeleteWarning = ref(false);\n const pendingDeleteIds: Ref<string[]> = ref([]);\n const isImportingFromUrl = ref(false);\n const importFromUrlError: Ref<string | null> = ref(null);\n const isReplacing = ref(false);\n const replaceError: Ref<string | null> = ref(null);\n const showReplaceWarning = ref(false);\n const pendingReplaceItem: Ref<MediaItem | null> = ref(null);\n const replaceUsageInfo: Ref<MediaUsageInfo | null> = ref(null);\n\n // Monotonic token so out-of-order browseMedia responses (folder switch /\n // search change before the previous request settled) don't overwrite the\n // current view with stale data.\n let browseRequestId = 0;\n\n async function loadItems(): Promise<void> {\n const requestId = ++browseRequestId;\n isLoading.value = true;\n try {\n const response = await api.browseMedia({\n folder_id: searchQuery.value ? undefined : currentFolderId.value,\n search: searchQuery.value || undefined,\n category: categoryFilter.value || undefined,\n sort: sortOption.value !== \"newest\" ? sortOption.value : undefined,\n });\n if (requestId !== browseRequestId) return;\n items.value = response.data;\n nextCursor.value = response.meta.next_cursor;\n hasMore.value = !!response.meta.next_cursor;\n } catch (error) {\n if (requestId !== browseRequestId) return;\n options.onError?.(error as Error);\n } finally {\n if (requestId === browseRequestId) {\n isLoading.value = false;\n }\n }\n }\n\n async function loadMore(): Promise<void> {\n if (!hasMore.value || !nextCursor.value || isLoading.value) return;\n\n const requestId = ++browseRequestId;\n isLoading.value = true;\n try {\n const response = await api.browseMedia({\n folder_id: searchQuery.value ? undefined : currentFolderId.value,\n search: searchQuery.value || undefined,\n category: categoryFilter.value || undefined,\n sort: sortOption.value !== \"newest\" ? sortOption.value : undefined,\n cursor: nextCursor.value,\n });\n if (requestId !== browseRequestId) return;\n items.value = [...items.value, ...response.data];\n nextCursor.value = response.meta.next_cursor;\n hasMore.value = !!response.meta.next_cursor;\n } catch (error) {\n if (requestId !== browseRequestId) return;\n options.onError?.(error as Error);\n } finally {\n if (requestId === browseRequestId) {\n isLoading.value = false;\n }\n }\n }\n\n async function search(query: string): Promise<void> {\n searchQuery.value = query;\n await loadItems();\n }\n\n async function filterByCategory(category: string | null): Promise<void> {\n categoryFilter.value = category;\n await loadItems();\n }\n\n async function sortBy(option: string): Promise<void> {\n sortOption.value = option;\n await loadItems();\n }\n\n async function navigateToFolder(folderId: string | null): Promise<void> {\n viewMode.value = \"files\";\n currentFolderId.value = folderId;\n searchQuery.value = \"\";\n selectedItems.value = new Set();\n previewItem.value = null;\n await loadItems();\n }\n\n async function showFrequentlyUsed(): Promise<void> {\n viewMode.value = \"frequently-used\";\n currentFolderId.value = null;\n searchQuery.value = \"\";\n selectedItems.value = new Set();\n previewItem.value = null;\n await loadFrequentlyUsed();\n }\n\n async function uploadFile(file: File): Promise<MediaItem | null> {\n isUploading.value = true;\n try {\n const media = await api.uploadMedia(file, currentFolderId.value);\n items.value = [media, ...items.value];\n return media;\n } catch (error) {\n options.onError?.(error as Error);\n return null;\n } finally {\n isUploading.value = false;\n }\n }\n\n async function uploadFiles(files: File[]): Promise<void> {\n isUploading.value = true;\n uploadProgress.value = { current: 0, total: files.length };\n try {\n for (let i = 0; i < files.length; i++) {\n uploadProgress.value = { current: i + 1, total: files.length };\n try {\n const media = await api.uploadMedia(files[i], currentFolderId.value);\n items.value = [media, ...items.value];\n } catch (error) {\n options.onError?.(error as Error);\n }\n }\n } finally {\n isUploading.value = false;\n uploadProgress.value = null;\n }\n }\n\n async function moveSelected(targetFolderId: string | null): Promise<void> {\n if (selectedItems.value.size === 0) {\n return;\n }\n\n try {\n const movedItems = await api.moveMedia(\n [...selectedItems.value],\n targetFolderId,\n );\n if (currentFolderId.value === null) {\n const movedMap = new Map(movedItems.map((item) => [item.id, item]));\n items.value = items.value.map((item) => movedMap.get(item.id) ?? item);\n } else {\n items.value = items.value.filter(\n (item) => !selectedItems.value.has(item.id),\n );\n }\n selectedItems.value = new Set();\n previewItem.value = null;\n } catch (error) {\n options.onError?.(error as Error);\n }\n }\n\n async function updateFile(\n mediaId: string,\n filename: string,\n altText?: string,\n ): Promise<void> {\n try {\n const updated = await api.updateMedia(mediaId, filename, altText);\n items.value = items.value.map((item) =>\n item.id === mediaId ? updated : item,\n );\n if (previewItem.value?.id === mediaId) {\n previewItem.value = updated;\n }\n } catch (error) {\n options.onError?.(error as Error);\n }\n }\n\n async function deleteSelected(): Promise<void> {\n if (selectedItems.value.size === 0) return;\n\n try {\n await api.deleteMedia([...selectedItems.value]);\n items.value = items.value.filter(\n (item) => !selectedItems.value.has(item.id),\n );\n frequentlyUsedItems.value = frequentlyUsedItems.value.filter(\n (item) => !selectedItems.value.has(item.id),\n );\n selectedItems.value = new Set();\n previewItem.value = null;\n } catch (error) {\n options.onError?.(error as Error);\n }\n }\n\n async function loadFrequentlyUsed(): Promise<void> {\n try {\n frequentlyUsedItems.value = await api.getFrequentlyUsed();\n } catch (error) {\n options.onError?.(error as Error);\n }\n }\n\n async function checkUsageBeforeDelete(): Promise<boolean> {\n if (selectedItems.value.size === 0) {\n return false;\n }\n\n pendingDeleteIds.value = [...selectedItems.value];\n\n try {\n const response = await api.checkMediaUsage(pendingDeleteIds.value);\n deleteUsageInfo.value = response.data;\n\n const hasUsage = Object.values(response.data).some(\n (info) => info.template_count > 0,\n );\n\n showDeleteWarning.value = true;\n return hasUsage;\n } catch (error) {\n options.onError?.(error as Error);\n return false;\n }\n }\n\n async function confirmDelete(): Promise<void> {\n showDeleteWarning.value = false;\n\n if (pendingDeleteIds.value.length === 0) {\n return;\n }\n\n try {\n await api.deleteMedia(pendingDeleteIds.value);\n items.value = items.value.filter(\n (item) => !pendingDeleteIds.value.includes(item.id),\n );\n frequentlyUsedItems.value = frequentlyUsedItems.value.filter(\n (item) => !pendingDeleteIds.value.includes(item.id),\n );\n selectedItems.value = new Set();\n previewItem.value = null;\n pendingDeleteIds.value = [];\n deleteUsageInfo.value = {};\n } catch (error) {\n options.onError?.(error as Error);\n }\n }\n\n function cancelDelete(): void {\n showDeleteWarning.value = false;\n pendingDeleteIds.value = [];\n deleteUsageInfo.value = {};\n }\n\n async function importFromUrl(url: string): Promise<MediaItem | null> {\n isImportingFromUrl.value = true;\n importFromUrlError.value = null;\n try {\n const media = await api.importFromUrl(url, currentFolderId.value);\n items.value = [media, ...items.value];\n return media;\n } catch (error) {\n importFromUrlError.value =\n error instanceof Error ? error.message : \"Import failed\";\n options.onError?.(error as Error);\n return null;\n } finally {\n isImportingFromUrl.value = false;\n }\n }\n\n function toggleSelection(id: string): void {\n const next = new Set(selectedItems.value);\n if (next.has(id)) {\n next.delete(id);\n } else {\n next.add(id);\n }\n selectedItems.value = next;\n }\n\n function clearSelection(): void {\n selectedItems.value = new Set();\n previewItem.value = null;\n }\n\n function selectItem(item: MediaItem): void {\n previewItem.value = item;\n selectedItems.value = new Set([item.id]);\n }\n\n async function loadFolders(): Promise<void> {\n try {\n folders.value = await api.getMediaFolders();\n } catch (error) {\n options.onError?.(error as Error);\n }\n }\n\n async function createFolder(\n name: string,\n parentId?: string | null,\n ): Promise<MediaFolder | null> {\n try {\n const folder = await api.createMediaFolder(name, parentId);\n await loadFolders();\n return folder;\n } catch (error) {\n options.onError?.(error as Error);\n return null;\n }\n }\n\n function findFolderInTree(\n folderList: MediaFolder[],\n id: string,\n ): MediaFolder | null {\n for (const folder of folderList) {\n if (folder.id === id) return folder;\n if (folder.children) {\n const found = findFolderInTree(folder.children, id);\n if (found) return found;\n }\n }\n return null;\n }\n\n async function renameFolder(folderId: string, name: string): Promise<void> {\n try {\n await api.renameMediaFolder(folderId, name);\n await loadFolders();\n } catch (error) {\n options.onError?.(error as Error);\n }\n }\n\n async function deleteFolder(folderId: string): Promise<void> {\n try {\n const folder = findFolderInTree(folders.value, folderId);\n const parentId = folder?.parent_id ?? null;\n\n await api.deleteMediaFolder(folderId);\n\n if (currentFolderId.value === folderId) {\n currentFolderId.value = parentId;\n }\n\n await loadFolders();\n await loadItems();\n } catch (error) {\n options.onError?.(error as Error);\n }\n }\n\n async function checkUsageBeforeReplace(item: MediaItem): Promise<void> {\n pendingReplaceItem.value = item;\n replaceError.value = null;\n\n try {\n const response = await api.checkMediaUsage([item.id]);\n replaceUsageInfo.value = response.data[item.id] ?? null;\n showReplaceWarning.value = true;\n } catch (error) {\n options.onError?.(error as Error);\n }\n }\n\n function cancelReplace(): void {\n showReplaceWarning.value = false;\n pendingReplaceItem.value = null;\n replaceUsageInfo.value = null;\n replaceError.value = null;\n }\n\n async function replaceFile(file: File): Promise<MediaItem | null> {\n if (!pendingReplaceItem.value) {\n return null;\n }\n\n isReplacing.value = true;\n replaceError.value = null;\n\n try {\n const updated = await api.replaceMedia(pendingReplaceItem.value.id, file);\n\n items.value = items.value.map((item) =>\n item.id === updated.id ? updated : item,\n );\n\n frequentlyUsedItems.value = frequentlyUsedItems.value.map((item) =>\n item.id === updated.id ? updated : item,\n );\n\n if (previewItem.value?.id === updated.id) {\n previewItem.value = updated;\n }\n\n showReplaceWarning.value = false;\n pendingReplaceItem.value = null;\n replaceUsageInfo.value = null;\n\n return updated;\n } catch (error) {\n replaceError.value =\n error instanceof Error ? error.message : \"Replace failed\";\n options.onError?.(error as Error);\n return null;\n } finally {\n isReplacing.value = false;\n }\n }\n\n async function replaceMediaDirectly(\n mediaId: string,\n file: File,\n ): Promise<MediaItem | null> {\n try {\n const updated = await api.replaceMedia(mediaId, file);\n\n items.value = items.value.map((item) =>\n item.id === updated.id ? updated : item,\n );\n\n frequentlyUsedItems.value = frequentlyUsedItems.value.map((item) =>\n item.id === updated.id ? updated : item,\n );\n\n if (previewItem.value?.id === updated.id) {\n previewItem.value = updated;\n }\n\n return updated;\n } catch (error) {\n options.onError?.(error as Error);\n return null;\n }\n }\n\n return {\n items,\n folders,\n currentFolderId,\n viewMode,\n searchQuery,\n categoryFilter,\n sortOption,\n isLoading,\n isUploading,\n uploadProgress,\n hasMore,\n selectedItems,\n previewItem,\n frequentlyUsedItems,\n deleteUsageInfo,\n showDeleteWarning,\n loadItems,\n loadMore,\n search,\n filterByCategory,\n sortBy,\n navigateToFolder,\n showFrequentlyUsed,\n uploadFile,\n uploadFiles,\n moveSelected,\n updateFile,\n deleteSelected,\n isImportingFromUrl,\n importFromUrlError,\n importFromUrl,\n toggleSelection,\n clearSelection,\n selectItem,\n loadFolders,\n createFolder,\n renameFolder,\n deleteFolder,\n findFolderInTree,\n loadFrequentlyUsed,\n checkUsageBeforeDelete,\n confirmDelete,\n cancelDelete,\n isReplacing,\n replaceError,\n showReplaceWarning,\n pendingReplaceItem,\n replaceUsageInfo,\n checkUsageBeforeReplace,\n cancelReplace,\n replaceFile,\n replaceMediaDirectly,\n };\n}\n","import type { MediaTranslations } from \"../i18n\";\nimport { type Ref, inject, isRef } from \"vue\";\n\nexport interface UseI18nReturn {\n /** Current translations object */\n t: MediaTranslations;\n /** Format a string with placeholders */\n format: (template: string, values: Record<string, string | number>) => string;\n}\n\n/**\n * Composable for internationalization.\n * Provides access to the current locale's translations.\n *\n * @param translationsOverride - Optional translations to use instead of injected value\n */\nexport function useI18n(\n translationsOverride?: MediaTranslations,\n): UseI18nReturn {\n const injected =\n translationsOverride ??\n inject<MediaTranslations | Ref<MediaTranslations>>(\"translations\")!;\n const t = isRef(injected) ? injected.value : injected;\n\n /**\n * Format a string with placeholders.\n * e.g., format('{minutes}m ago', { minutes: 5 }) -> '5m ago'\n */\n function format(\n template: string,\n values: Record<string, string | number>,\n ): string {\n return template.replace(/\\{(\\w+)\\}/g, (_, key) => {\n return key in values ? String(values[key]) : `{${key}}`;\n });\n }\n\n return {\n t,\n format,\n };\n}\n","<script setup lang=\"ts\">\nimport { useI18n } from \"../../composables/useI18n\";\nimport type { MediaFolder } from \"../../types\";\nimport { ChevronRight } from \"@lucide/vue\";\nimport { computed } from \"vue\";\n\nconst props = defineProps<{\n folders: MediaFolder[];\n currentFolderId: string | null;\n}>();\n\nconst emit = defineEmits<{\n (e: \"navigate\", folderId: string | null): void;\n}>();\n\nconst { t } = useI18n();\n\nconst breadcrumbPath = computed(() => {\n if (!props.currentFolderId) return [];\n const path: MediaFolder[] = [];\n buildPath(props.folders, props.currentFolderId, path);\n return path;\n});\n\nfunction buildPath(\n folderList: MediaFolder[],\n targetId: string,\n path: MediaFolder[],\n): boolean {\n for (const folder of folderList) {\n if (folder.id === targetId) {\n path.push(folder);\n return true;\n }\n if (folder.children && buildPath(folder.children, targetId, path)) {\n path.unshift(folder);\n return true;\n }\n }\n return false;\n}\n</script>\n\n<template>\n <div\n v-if=\"breadcrumbPath.length > 0\"\n class=\"tpl:flex tpl:items-center tpl:gap-1 tpl:text-xs\"\n style=\"color: var(--tpl-text-muted)\"\n >\n <button\n class=\"tpl:transition-colors tpl:duration-150 tpl:hover:underline\"\n style=\"color: var(--tpl-primary)\"\n @click=\"emit('navigate', null)\"\n >\n {{ t.mediaLibrary.allFiles }}\n </button>\n <template v-for=\"(folder, index) in breadcrumbPath\" :key=\"folder.id\">\n <ChevronRight :size=\"12\" :stroke-width=\"2\" />\n <button\n v-if=\"index < breadcrumbPath.length - 1\"\n class=\"tpl:transition-colors tpl:duration-150 tpl:hover:underline\"\n style=\"color: var(--tpl-primary)\"\n @click=\"emit('navigate', folder.id)\"\n >\n {{ folder.name }}\n </button>\n <span v-else style=\"color: var(--tpl-text)\">{{ folder.name }}</span>\n </template>\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport { useI18n } from \"../../composables/useI18n\";\nimport type { MediaFolder } from \"../../types\";\nimport { ChevronRight } from \"@lucide/vue\";\nimport { computed } from \"vue\";\n\nconst props = defineProps<{\n folders: MediaFolder[];\n currentFolderId: string | null;\n}>();\n\nconst emit = defineEmits<{\n (e: \"navigate\", folderId: string | null): void;\n}>();\n\nconst { t } = useI18n();\n\nconst breadcrumbPath = computed(() => {\n if (!props.currentFolderId) return [];\n const path: MediaFolder[] = [];\n buildPath(props.folders, props.currentFolderId, path);\n return path;\n});\n\nfunction buildPath(\n folderList: MediaFolder[],\n targetId: string,\n path: MediaFolder[],\n): boolean {\n for (const folder of folderList) {\n if (folder.id === targetId) {\n path.push(folder);\n return true;\n }\n if (folder.children && buildPath(folder.children, targetId, path)) {\n path.unshift(folder);\n return true;\n }\n }\n return false;\n}\n</script>\n\n<template>\n <div\n v-if=\"breadcrumbPath.length > 0\"\n class=\"tpl:flex tpl:items-center tpl:gap-1 tpl:text-xs\"\n style=\"color: var(--tpl-text-muted)\"\n >\n <button\n class=\"tpl:transition-colors tpl:duration-150 tpl:hover:underline\"\n style=\"color: var(--tpl-primary)\"\n @click=\"emit('navigate', null)\"\n >\n {{ t.mediaLibrary.allFiles }}\n </button>\n <template v-for=\"(folder, index) in breadcrumbPath\" :key=\"folder.id\">\n <ChevronRight :size=\"12\" :stroke-width=\"2\" />\n <button\n v-if=\"index < breadcrumbPath.length - 1\"\n class=\"tpl:transition-colors tpl:duration-150 tpl:hover:underline\"\n style=\"color: var(--tpl-primary)\"\n @click=\"emit('navigate', folder.id)\"\n >\n {{ folder.name }}\n </button>\n <span v-else style=\"color: var(--tpl-text)\">{{ folder.name }}</span>\n </template>\n </div>\n</template>\n","import type { UsePlanConfigReturn } from \"@templatical/core/cloud\";\nimport type { MediaCategory, MediaCategoryData } from \"../types\";\nimport { computed, inject, type ComputedRef } from \"vue\";\n\nexport type { MediaCategory };\n\nexport interface UseMediaCategoriesReturn {\n isMediaLibraryEnabled: ComputedRef<boolean>;\n allAcceptedMimeTypes: ComputedRef<string[]>;\n allAcceptedInputString: ComputedRef<string>;\n maxFileSize: ComputedRef<number>;\n availableCategories: ComputedRef<MediaCategory[]>;\n isAcceptedMimeType: (\n mimeType: string,\n filterCategories?: MediaCategory[],\n ) => boolean;\n isImageMimeType: (mimeType: string) => boolean;\n getCategoryForMimeType: (mimeType: string) => MediaCategory | null;\n}\n\nexport function useMediaCategories(): UseMediaCategoriesReturn {\n const planConfig = inject<UsePlanConfigReturn>(\"planConfig\")!;\n\n const mediaConfig = computed(() => planConfig.config.value?.media ?? null);\n\n const isMediaLibraryEnabled = computed(\n () => mediaConfig.value?.use_media_library ?? true,\n );\n\n const categories = computed(\n () =>\n (mediaConfig.value?.categories as Record<\n MediaCategory,\n MediaCategoryData\n > | null) ?? null,\n );\n\n const allAcceptedMimeTypes = computed(() => {\n if (!categories.value) {\n return [];\n }\n\n return Object.values(categories.value).flatMap((c) => c.mime_types);\n });\n\n const allAcceptedInputString = computed(() =>\n allAcceptedMimeTypes.value.join(\",\"),\n );\n\n const maxFileSize = computed(() => mediaConfig.value?.max_file_size ?? 0);\n\n function isAcceptedMimeType(\n mimeType: string,\n filterCategories?: MediaCategory[],\n ): boolean {\n if (!categories.value) {\n return false;\n }\n\n if (!filterCategories || filterCategories.length === 0) {\n return allAcceptedMimeTypes.value.includes(mimeType);\n }\n\n return filterCategories.some((category) =>\n categories.value![category]?.mime_types.includes(mimeType),\n );\n }\n\n function isImageMimeType(mimeType: string): boolean {\n if (!categories.value) {\n return false;\n }\n\n return categories.value.images?.mime_types.includes(mimeType) ?? false;\n }\n\n function getCategoryForMimeType(mimeType: string): MediaCategory | null {\n if (!categories.value) {\n return null;\n }\n\n for (const [category, data] of Object.entries(categories.value)) {\n if (data.mime_types.includes(mimeType)) {\n return category as MediaCategory;\n }\n }\n\n return null;\n }\n\n const availableCategories = computed((): MediaCategory[] => {\n if (!categories.value) {\n return [];\n }\n\n return Object.keys(categories.value) as MediaCategory[];\n });\n\n return {\n isMediaLibraryEnabled,\n allAcceptedMimeTypes,\n allAcceptedInputString,\n maxFileSize,\n availableCategories,\n isAcceptedMimeType,\n isImageMimeType,\n getCategoryForMimeType,\n };\n}\n","export type AspectRatioPreset =\n | \"free\"\n | \"square\"\n | \"landscape43\"\n | \"landscape169\"\n | \"original\";\n\nexport interface AspectRatioOption {\n key: AspectRatioPreset;\n value: number | undefined;\n}\n\nexport const ASPECT_RATIO_VALUES: Record<\n AspectRatioPreset,\n number | undefined\n> = {\n free: undefined,\n square: 1,\n landscape43: 4 / 3,\n landscape169: 16 / 9,\n original: undefined,\n};\n\nexport interface ExportSettings {\n mimeType: string;\n quality: number;\n}\n\nexport function getExportSettings(originalMimeType: string): ExportSettings {\n if (originalMimeType === \"image/png\") {\n return { mimeType: \"image/png\", quality: 1 };\n }\n if (originalMimeType === \"image/gif\") {\n return { mimeType: \"image/png\", quality: 1 };\n }\n if (originalMimeType === \"image/webp\") {\n return { mimeType: \"image/webp\", quality: 0.92 };\n }\n\n return { mimeType: \"image/jpeg\", quality: 0.92 };\n}\n\nexport function resizeCanvas(\n sourceCanvas: HTMLCanvasElement,\n maxWidth?: number,\n maxHeight?: number,\n): HTMLCanvasElement {\n const sourceWidth = sourceCanvas.width;\n const sourceHeight = sourceCanvas.height;\n\n if (!maxWidth && !maxHeight) {\n return sourceCanvas;\n }\n\n let targetWidth = sourceWidth;\n let targetHeight = sourceHeight;\n\n if (maxWidth && sourceWidth > maxWidth) {\n targetWidth = maxWidth;\n targetHeight = Math.round(sourceHeight * (maxWidth / sourceWidth));\n }\n\n if (maxHeight && targetHeight > maxHeight) {\n targetHeight = maxHeight;\n targetWidth = Math.round(\n targetWidth *\n (maxHeight / (sourceHeight * (maxWidth ? maxWidth / sourceWidth : 1))),\n );\n }\n\n if (targetWidth === sourceWidth && targetHeight === sourceHeight) {\n return sourceCanvas;\n }\n\n const resizedCanvas = document.createElement(\"canvas\");\n resizedCanvas.width = targetWidth;\n resizedCanvas.height = targetHeight;\n\n const ctx = resizedCanvas.getContext(\"2d\");\n if (ctx) {\n ctx.imageSmoothingEnabled = true;\n ctx.imageSmoothingQuality = \"high\";\n ctx.drawImage(sourceCanvas, 0, 0, targetWidth, targetHeight);\n }\n\n return resizedCanvas;\n}\n\nexport function canvasToFile(\n canvas: HTMLCanvasElement,\n filename: string,\n settings: ExportSettings,\n): Promise<File> {\n return new Promise((resolve, reject) => {\n canvas.toBlob(\n (blob) => {\n if (!blob) {\n reject(new Error(\"Failed to create blob from canvas\"));\n return;\n }\n\n const extension = settings.mimeType.split(\"/\")[1];\n const baseFilename = filename.replace(/\\.[^.]+$/, \"\");\n const finalFilename = `${baseFilename}.${extension}`;\n\n const file = new File([blob], finalFilename, {\n type: settings.mimeType,\n });\n resolve(file);\n },\n settings.mimeType,\n settings.quality,\n );\n });\n}\n\nexport function calculateOutputDimensions(\n cropWidth: number,\n cropHeight: number,\n maxWidth?: number,\n maxHeight?: number,\n): { width: number; height: number } {\n let width = cropWidth;\n let height = cropHeight;\n\n if (maxWidth && width > maxWidth) {\n const ratio = maxWidth / width;\n width = maxWidth;\n height = Math.round(height * ratio);\n }\n\n if (maxHeight && height > maxHeight) {\n const ratio = maxHeight / height;\n height = maxHeight;\n width = Math.round(width * ratio);\n }\n\n return { width, height };\n}\n","import type { InjectionKey, Ref } from \"vue\";\n\n/**\n * Mount target for modal/overlay teleports inside `MediaLibraryModal` and\n * its nested sub-modals (replace, edit, import URL). Set via the\n * `popoverTarget` prop on `MediaLibraryModal` and provided here so the\n * sub-modals can teleport to the same element.\n *\n * When the ref resolves to `null` (or no provider is in scope, e.g. the\n * standalone visual SDK from `./standalone/visual.ts`), modals fall back\n * to `document.body` — preserving the original teleport behavior.\n *\n * Host integration: editors that mount `MediaLibraryModal` inside a\n * shadow-aware tree should pass their popover root element (e.g.\n * `core.popoverRoot.value`) through the prop so media-library modals land\n * inside the editor's shadow boundary rather than escaping to body.\n */\nexport const POPOVER_TARGET_KEY: InjectionKey<Ref<HTMLElement | null>> = Symbol(\n \"templaticalMediaPopoverTarget\",\n);\n","import{openBlock as t,createBlock as e,renderSlot as i,resolveComponent as n,createVNode as s,withCtx as o,Fragment as r,renderList as a,resolveDynamicComponent as h,withDirectives as c,vShow as l,mergeProps as u,withModifiers as d,createCommentVNode as m}from\"vue\";function p(t,e){var i=Object.keys(t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(t);e&&(n=n.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),i.push.apply(i,n)}return i}function g(t){for(var e=1;e<arguments.length;e++){var i=null!=arguments[e]?arguments[e]:{};e%2?p(Object(i),!0).forEach((function(e){f(t,e,i[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(i)):p(Object(i)).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(i,e))}))}return t}function f(t,e,i){return e in t?Object.defineProperty(t,e,{value:i,enumerable:!0,configurable:!0,writable:!0}):t[e]=i,t}function v(t,e){if(null==t)return{};var i,n,s=function(t,e){if(null==t)return{};var i,n,s={},o=Object.keys(t);for(n=0;n<o.length;n++)i=o[n],e.indexOf(i)>=0||(s[i]=t[i]);return s}(t,e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(t);for(n=0;n<o.length;n++)i=o[n],e.indexOf(i)>=0||Object.prototype.propertyIsEnumerable.call(t,i)&&(s[i]=t[i])}return s}function b(t){return function(t){if(Array.isArray(t))return w(t)}(t)||function(t){if(\"undefined\"!=typeof Symbol&&null!=t[Symbol.iterator]||null!=t[\"@@iterator\"])return Array.from(t)}(t)||function(t,e){if(!t)return;if(\"string\"==typeof t)return w(t,e);var i=Object.prototype.toString.call(t).slice(8,-1);\"Object\"===i&&t.constructor&&(i=t.constructor.name);if(\"Map\"===i||\"Set\"===i)return Array.from(t);if(\"Arguments\"===i||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(i))return w(t,e)}(t)||function(){throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}()}function w(t,e){(null==e||e>t.length)&&(e=t.length);for(var i=0,n=new Array(e);i<e;i++)n[i]=t[i];return n}var y,z,R,A=(y=function(t){\n/*!\n Copyright (c) 2018 Jed Watson.\n Licensed under the MIT License (MIT), see\n http://jedwatson.github.io/classnames\n*/\n!function(){var e={}.hasOwnProperty;function i(){for(var t=[],n=0;n<arguments.length;n++){var s=arguments[n];if(s){var o=typeof s;if(\"string\"===o||\"number\"===o)t.push(s);else if(Array.isArray(s)){if(s.length){var r=i.apply(null,s);r&&t.push(r)}}else if(\"object\"===o)if(s.toString===Object.prototype.toString)for(var a in s)e.call(s,a)&&s[a]&&t.push(a);else t.push(s.toString())}}return t.join(\" \")}t.exports?(i.default=i,t.exports=i):window.classNames=i}()},y(R={path:z,exports:{},require:function(t,e){return function(){throw new Error(\"Dynamic requires are not currently supported by @rollup/plugin-commonjs\")}(null==e&&R.path)}},R.exports),R.exports),M=function(t){return function(e,i){if(!e)return t;var n;\"string\"==typeof e?n=e:i=e;var s=t;return n&&(s+=\"__\"+n),s+(i?Object.keys(i).reduce((function(t,e){var n=i[e];return n&&(t+=\" \"+(\"boolean\"==typeof n?s+\"--\"+e:s+\"--\"+e+\"_\"+n)),t}),\"\"):\"\")}};function S(t,e,i){var n,s,o,r,a;function h(){var c=Date.now()-r;c<e&&c>=0?n=setTimeout(h,e-c):(n=null,i||(a=t.apply(o,s),o=s=null))}null==e&&(e=100);var c=function(){o=this,s=arguments,r=Date.now();var c=i&&!n;return n||(n=setTimeout(h,e)),c&&(a=t.apply(o,s),o=s=null),a};return c.clear=function(){n&&(clearTimeout(n),n=null)},c.flush=function(){n&&(a=t.apply(o,s),o=s=null,clearTimeout(n),n=null)},c}S.debounce=S;var x=S,C=function(){return C=Object.assign||function(t){for(var e,i=1,n=arguments.length;i<n;i++)for(var s in e=arguments[i])Object.prototype.hasOwnProperty.call(e,s)&&(t[s]=e[s]);return t},C.apply(this,arguments)};\n/*! *****************************************************************************\nCopyright (c) Microsoft Corporation.\n\nPermission to use, copy, modify, and/or distribute this software for any\npurpose with or without fee is hereby granted.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THIS SOFTWARE.\n***************************************************************************** */function E(t,e){var i,n;return t&&e?(i=\"\"+t+e[0].toUpperCase()+e.slice(1),n=t+\"-\"+e):(i=t||e,n=t||e),{name:i,classname:n}}function W(t){return/^blob:/.test(t)}function T(t){return W(t)||function(t){return/^data:/.test(t)}(t)}function O(t){return!!(t&&t.constructor&&t.call&&t.apply)}function D(t){return void 0===t}function H(t){return\"object\"==typeof t&&null!==t}function j(t,e,i){var n={};return H(t)?(Object.keys(e).forEach((function(s){D(t[s])?n[s]=e[s]:H(e[s])?H(t[s])?n[s]=j(t[s],e[s],i[s]):n[s]=t[s]?e[s]:i[s]:!0===e[s]||!1===e[s]?n[s]=Boolean(t[s]):n[s]=t[s]})),n):t?e:i}function L(t){var e=Number(t);return Number.isNaN(e)?t:e}function P(t){return typeof(\"number\"==t||function(t){return\"object\"==typeof t&&null!==t}(t)&&\"[object Number]\"==toString.call(t))&&!$(t)}function $(t){return t!=t}function I(t,e){return Math.sqrt(Math.pow(t.x-e.x,2)+Math.pow(t.y-e.y,2))}var B=function(t,e){void 0===t&&(t={}),void 0===e&&(e={}),this.type=\"manipulateImage\",this.move=t,this.scale=e},X=function(t,e){void 0===e&&(e={}),this.type=\"resize\",this.directions=t,this.params=e},Y=function(t){this.type=\"move\",this.directions=t},k=function(){function t(t,e,i,n,s){this.type=\"drag\",this.nativeEvent=t,this.position=i,this.previousPosition=n,this.element=e,this.anchor=s}return t.prototype.shift=function(){var t=this,e=t.element,i=t.anchor,n=t.position;if(e){var s=e.getBoundingClientRect(),o=s.left,r=s.top;return{left:n.left-o-i.left,top:n.top-r-i.top}}return{left:0,top:0}},t}(),F={name:\"DraggableElement\",props:{classname:{type:String}},beforeMount:function(){window.addEventListener(\"mouseup\",this.onMouseUp,{passive:!1}),window.addEventListener(\"mousemove\",this.onMouseMove,{passive:!1}),window.addEventListener(\"touchmove\",this.onTouchMove,{passive:!1}),window.addEventListener(\"touchend\",this.onTouchEnd,{passive:!1})},beforeUnmount:function(){window.removeEventListener(\"mouseup\",this.onMouseUp),window.removeEventListener(\"mousemove\",this.onMouseMove),window.removeEventListener(\"touchmove\",this.onTouchMove),window.removeEventListener(\"touchend\",this.onTouchEnd)},mounted:function(){if(!this.$refs.draggable)throw new Error('You should add ref \"draggable\" to your root element to use draggable mixin');this.touches=[],this.hovered=!1},methods:{onMouseOver:function(){this.hovered||(this.hovered=!0,this.$emit(\"enter\"))},onMouseLeave:function(){this.hovered&&!this.touches.length&&(this.hovered=!1,this.$emit(\"leave\"))},onTouchStart:function(t){t.cancelable&&!this.disabled&&1===t.touches.length&&(this.touches=b(t.touches),this.hovered||(this.$emit(\"enter\"),this.hovered=!0),t.touches.length&&this.initAnchor(this.touches.reduce((function(e,i){return{clientX:e.clientX+i.clientX/t.touches.length,clientY:e.clientY+i.clientY/t.touches.length}}),{clientX:0,clientY:0})),t.preventDefault&&t.preventDefault(),t.stopPropagation())},onTouchEnd:function(){this.processEnd()},onTouchMove:function(t){this.touches.length&&(this.processMove(t,t.touches),t.preventDefault&&t.preventDefault(),t.stopPropagation&&t.stopPropagation())},onMouseDown:function(t){if(!this.disabled){var e={fake:!0,clientX:t.clientX,clientY:t.clientY};this.touches=[e],this.initAnchor(e),t.stopPropagation()}},onMouseMove:function(t){this.touches.length&&(this.processMove(t,[{fake:!0,clientX:t.clientX,clientY:t.clientY}]),t.preventDefault&&t.preventDefault())},onMouseUp:function(){this.processEnd()},initAnchor:function(t){var e=this.$refs.draggable.getBoundingClientRect(),i=e.left,n=e.right,s=e.bottom,o=e.top;this.anchor={left:t.clientX-i,top:t.clientY-o,bottom:s-t.clientY,right:n-t.clientX}},processMove:function(t,e){var i=b(e);if(this.touches.length){if(1===this.touches.length&&1===i.length){var n=this.$refs.draggable;this.$emit(\"drag\",new k(t,n,{left:i[0].clientX,top:i[0].clientY},{left:this.touches[0].clientX,top:this.touches[0].clientY},this.anchor))}this.touches=i}},processEnd:function(){this.touches.length&&this.$emit(\"drag-end\"),this.hovered&&(this.$emit(\"leave\"),this.hovered=!1),this.touches=[]}},emits:[\"drag\",\"drag-end\",\"leave\",\"enter\"]};F.render=function(n,s,o,r,a,h){return t(),e(\"div\",{ref:\"draggable\",class:o.classname,onTouchstart:s[1]||(s[1]=function(){return h.onTouchStart&&h.onTouchStart.apply(h,arguments)}),onMousedown:s[2]||(s[2]=function(){return h.onMouseDown&&h.onMouseDown.apply(h,arguments)}),onMouseover:s[3]||(s[3]=function(){return h.onMouseOver&&h.onMouseOver.apply(h,arguments)}),onMouseleave:s[4]||(s[4]=function(){return h.onMouseLeave&&h.onMouseLeave.apply(h,arguments)})},[i(n.$slots,\"default\")],34)};var U=M(\"vue-handler-wrapper\"),N={name:\"HandlerWrapper\",components:{DraggableElement:F},props:{horizontalPosition:{type:String},verticalPosition:{type:String},disabled:{type:Boolean,default:!1}},computed:{classes:function(){var t;if(this.horizontalPosition||this.verticalPosition){var e,i=E(this.horizontalPosition,this.verticalPosition);t=U((f(e={},i.classname,!0),f(e,\"disabled\",this.disabled),e))}else t=U({disabled:this.disabled});return{root:t,draggable:U(\"draggable\")}}},emits:[\"leave\",\"enter\",\"drag\",\"drag-end\"]};N.render=function(r,a,h,c,l,u){var d=n(\"DraggableElement\");return t(),e(\"div\",{class:u.classes.root},[s(d,{class:u.classes.draggable,onDrag:a[1]||(a[1]=function(t){return r.$emit(\"drag\",t)}),onDragEnd:a[2]||(a[2]=function(t){return r.$emit(\"drag-end\")}),onLeave:a[3]||(a[3]=function(t){return r.$emit(\"leave\")}),onEnter:a[4]||(a[4]=function(t){return r.$emit(\"enter\")})},{default:o((function(){return[i(r.$slots,\"default\")]})),_:3},8,[\"class\"])],2)};var Z=M(\"vue-line-wrapper\"),q={name:\"LineWrapper\",components:{DraggableElement:F},props:{position:{type:String,required:!0},disabled:{type:Boolean,default:!1}},computed:{classname:function(){var t;return Z((f(t={},this.position,!0),f(t,\"disabled\",this.disabled),t))}},emits:[\"leave\",\"enter\",\"drag\",\"drag-end\"]};q.render=function(s,r,a,h,c,l){var u=n(\"DraggableElement\");return t(),e(u,{class:l.classname,onDrag:r[1]||(r[1]=function(t){return s.$emit(\"drag\",t)}),onDragEnd:r[2]||(r[2]=function(t){return s.$emit(\"drag-end\")}),onLeave:r[3]||(r[3]=function(t){return s.$emit(\"leave\")}),onEnter:r[4]||(r[4]=function(t){return s.$emit(\"enter\")})},{default:o((function(){return[i(s.$slots,\"default\")]})),_:3},8,[\"class\"])};var V=[\"left\",\"right\",\"top\",\"bottom\"],_=[\"left\",\"right\"],G=[\"top\",\"bottom\"],Q=[\"left\",\"top\"],K=[\"fill-area\",\"fit-area\",\"stencil\",\"none\"],J={left:0,top:0,width:0,height:0};function tt(t,e,i){return!(i=i||[\"width\",\"height\",\"left\",\"top\"]).some((function(i){return t[i]!==e[i]}))}function et(t){return{left:t.left,top:t.top,right:t.left+t.width,bottom:t.top+t.height}}function it(t,e){return{left:t.left-e.left,top:t.top-e.top}}function nt(t){return{left:t.left+t.width/2,top:t.top+t.height/2}}function st(t,e){var i={left:0,top:0,right:0,bottom:0};return V.forEach((function(n){var s=e[n],o=et(t)[n];i[n]=void 0!==s&&void 0!==o?\"left\"===n||\"top\"===n?Math.max(0,s-o):Math.max(0,o-s):0})),i}function ot(t,e){return{left:t.left-e.left,top:t.top-e.top,width:t.width+e.left+e.right,height:t.height+e.top+e.bottom}}function rt(t){return{left:-t.left,top:-t.top}}function at(t,e){return C(C({},t),{left:t.left+e.left,top:t.top+e.top})}function ht(t,e,i,n){if(1!==e){if(i){var s=nt(t);return{width:t.width*e,height:t.height*e,left:t.left+t.width*(1-e)/2+(i.left-s.left)*(n||1-e),top:t.top+t.height*(1-e)/2+(i.top-s.top)*(n||1-e)}}return{width:t.width*e,height:t.height*e,left:t.left+t.width*(1-e)/2,top:t.top+t.height*(1-e)/2}}return t}function ct(t){return t.width/t.height}function lt(t,e){return Math.min(void 0!==e.right&&void 0!==e.left?(e.right-e.left)/t.width:1/0,void 0!==e.bottom&&void 0!==e.top?(e.bottom-e.top)/t.height:1/0)}function ut(t,e){var i={left:0,top:0},n=st(t,e);return n.left&&n.left>0?i.left=n.left:n.right&&n.right>0&&(i.left=-n.right),n.top&&n.top>0?i.top=n.top:n.bottom&&n.bottom>0&&(i.top=-n.bottom),i}function dt(t,e){var i;return e.minimum&&t<e.minimum?i=e.minimum:e.maximum&&t>e.maximum&&(i=e.maximum),i}function mt(t,e){var i=ct(t),n=ct(e);return e.width<1/0&&e.height<1/0?i>n?{width:e.width,height:e.width/i}:{width:e.height*i,height:e.height}:e.width<1/0?{width:e.width,height:e.width/i}:e.height<1/0?{width:e.height*i,height:e.height}:t}function pt(t,e){var i=e*Math.PI/180;return{width:Math.abs(t.width*Math.cos(i))+Math.abs(t.height*Math.sin(i)),height:Math.abs(t.width*Math.sin(i))+Math.abs(t.height*Math.cos(i))}}function gt(t,e){var i=e*Math.PI/180;return{left:t.left*Math.cos(i)-t.top*Math.sin(i),top:t.left*Math.sin(i)+t.top*Math.cos(i)}}function ft(t,e){var i=st(vt(t,e),e);return i.left+i.right+i.top+i.bottom?i.left+i.right>i.top+i.bottom?Math.min((t.width+i.left+i.right)/t.width,lt(t,e)):Math.min((t.height+i.top+i.bottom)/t.height,lt(t,e)):1}function vt(t,e,i){void 0===i&&(i=!1);var n=ut(t,e);return at(t,i?rt(n):n)}function bt(t){return{width:void 0!==t.right&&void 0!==t.left?t.right-t.left:1/0,height:void 0!==t.bottom&&void 0!==t.top?t.bottom-t.top:1/0}}function wt(t,e){return C(C({},t),{minWidth:Math.min(e.width,t.minWidth),minHeight:Math.min(e.height,t.minHeight),maxWidth:Math.min(e.width,t.maxWidth),maxHeight:Math.min(e.height,t.maxHeight)})}function yt(t,e,i){void 0===i&&(i=!0);var n={};return V.forEach((function(s){var o=t[s],r=e[s];void 0!==o&&void 0!==r?n[s]=\"left\"===s||\"top\"===s?i?Math.max(o,r):Math.min(o,r):i?Math.min(o,r):Math.max(o,r):void 0!==r?n[s]=r:void 0!==o&&(n[s]=o)})),n}function zt(t,e){return yt(t,e,!0)}function Rt(t){var e=t.size,i=t.aspectRatio,n=t.ignoreMinimum,s=t.sizeRestrictions;return Boolean((e.correctRatio||ct(e)>=i.minimum&&ct(e)<=i.maximum)&&e.height<=s.maxHeight&&e.width<=s.maxWidth&&e.width&&e.height&&(n||e.height>=s.minHeight&&e.width>=s.minWidth))}function At(t,e){return Math.pow(t.width-e.width,2)+Math.pow(t.height-e.height,2)}function Mt(t){var e=t.width,i=t.height,n=t.sizeRestrictions,s={minimum:t.aspectRatio&&t.aspectRatio.minimum||0,maximum:t.aspectRatio&&t.aspectRatio.maximum||1/0},o={width:Math.max(n.minWidth,Math.min(n.maxWidth,e)),height:Math.max(n.minHeight,Math.min(n.maxHeight,i))};function r(t,o){return void 0===o&&(o=!1),t.reduce((function(t,r){return Rt({size:r,aspectRatio:s,sizeRestrictions:n,ignoreMinimum:o})&&(!t||At(r,{width:e,height:i})<At(t,{width:e,height:i}))?r:t}),null)}var a=[];s&&[s.minimum,s.maximum].forEach((function(t){t&&a.push({width:o.width,height:o.width/t,correctRatio:!0},{width:o.height*t,height:o.height,correctRatio:!0})})),Rt({size:o,aspectRatio:s,sizeRestrictions:n})&&a.push(o);var h=r(a)||r(a,!0);return h&&{width:h.width,height:h.height}}function St(t){var e=t.event,i=t.coordinates,n=t.positionRestrictions,s=void 0===n?{}:n,o=at(i,e.directions);return at(o,ut(o,s))}function xt(t){var e=t.coordinates,i=t.transform,n=t.imageSize,s=t.sizeRestrictions,o=t.positionRestrictions,r=t.aspectRatio,a=t.visibleArea,h=function(t,e){return St({coordinates:t,positionRestrictions:o,event:new Y({left:e.left-t.left,top:e.top-t.top})})},c=C({},e);return(Array.isArray(i)?i:[i]).forEach((function(t){var e={};D((e=\"function\"==typeof t?t({coordinates:c,imageSize:n,visibleArea:a}):t).width)&&D(e.height)||(c=function(t,e){var i=C(C(C({},t),Mt({width:e.width,height:e.height,sizeRestrictions:s,aspectRatio:r})),{left:0,top:0});return h(i,{left:t.left,top:t.top})}(c,C(C({},c),e))),D(e.left)&&D(e.top)||(c=h(c,C(C({},c),e)))})),c}function Ct(t){t.event;var e=t.getAreaRestrictions,i=t.boundaries,n=t.coordinates,s=t.visibleArea;t.aspectRatio;var o=t.stencilSize,r=t.sizeRestrictions,a=t.positionRestrictions;t.stencilReference;var h,c,l,u=C({},n),d=C({},s),m=C({},o);h=ct(m),c=ct(u),void 0===l&&(l=.001),(0===h||0===c?Math.abs(c-h)<l:Math.abs(c/h)<1+l&&Math.abs(c/h)>1-l)||(u=C(C({},u),Mt({sizeRestrictions:r,width:u.width,height:u.height,aspectRatio:{minimum:ct(m),maximum:ct(m)}})));var p=ft(d=ht(d,u.width*i.width/(d.width*m.width)),e({visibleArea:d,type:\"resize\"}));return 1!==p&&(d=ht(d,p),u=ht(u,p)),d=vt(d=at(d,it(nt(u),nt(d))),e({visibleArea:d,type:\"move\"})),{coordinates:u=vt(u,zt(et(d),a)),visibleArea:d}}function Et(t){var e=t.event,i=t.getAreaRestrictions,n=t.boundaries,s=t.coordinates,o=t.visibleArea;t.aspectRatio,t.stencilSize,t.sizeRestrictions;var r=t.positionRestrictions;t.stencilReference;var a=C({},s),h=C({},o);if(s&&o&&\"manipulateImage\"!==e.type){var c={width:0,height:0};h.width,n.width,ct(n)>ct(a)?(c.height=.8*n.height,c.width=c.height*ct(a)):(c.width=.8*n.width,c.height=c.width*ct(a));var l=ft(h=ht(h,a.width*n.width/(h.width*c.width)),i({visibleArea:h,type:\"resize\"}));h=ht(h,l),1!==l&&(c.height/=l,c.width/=l),h=vt(h=at(h,it(nt(a),nt(h))),i({visibleArea:h,type:\"move\"})),a=vt(a,zt(et(h),r))}return{coordinates:a,visibleArea:h}}function Wt(t){var e=t.event,i=t.coordinates,n=t.visibleArea,s=t.getAreaRestrictions,o=C({},n),r=C({},i);if(\"setCoordinates\"===e.type){var a=Math.max(0,r.width-o.width),h=Math.max(0,r.height-o.height);a>h?o=ht(o,Math.min(r.width/o.width,lt(o,s({visibleArea:o,type:\"resize\"})))):h>a&&(o=ht(o,Math.min(r.height/o.height,lt(o,s({visibleArea:o,type:\"resize\"}))))),o=vt(o=at(o,rt(ut(r,et(o)))),s({visibleArea:o,type:\"move\"}))}return{visibleArea:o,coordinates:r}}function Tt(t){var e=t.imageSize,i=t.visibleArea,n=t.coordinates,s=i||e;return{left:(i?i.left:0)+s.width/2-n.width/2,top:(i?i.top:0)+s.height/2-n.height/2}}function Ot(t){var e=t.imageSize,i=t.visibleArea,n=t.aspectRatio,s=t.sizeRestrictions,o=i||e,r=Math.min(n.maximum||1/0,Math.max(n.minimum||0,ct(o))),a=o.width<o.height?{width:.8*o.width,height:.8*o.width/r}:{height:.8*o.height,width:.8*o.height*r};return Mt(C(C({},a),{aspectRatio:n,sizeRestrictions:s}))}function Dt(t){var e,i,n=t.imageSize,s=t.visibleArea,o=t.boundaries,r=t.aspectRatio,a=t.sizeRestrictions,h=t.stencilSize,c=s||n;return ct(c)>ct(o)?i=(e=h.height*c.height/o.height)*ct(h):e=(i=h.width*c.width/o.width)/ct(h),Mt({width:i,height:e,aspectRatio:r,sizeRestrictions:a})}function Ht(t){var e=t.getAreaRestrictions,i=t.coordinates,n=t.imageSize,s=ct(t.boundaries);if(i){var o={height:Math.max(i.height,n.height),width:Math.max(i.width,n.width)},r=mt({width:ct(o)>s?o.width:o.height*s,height:ct(o)>s?o.width/s:o.height},bt(e())),a={left:i.left+i.width/2-r.width/2,top:i.top+i.height/2-r.height/2,width:r.width,height:r.height},h=st(i,et(C({left:0,top:0},n))),c={};return!h.left&&!h.right&&a.width<=n.width&&(c.left=0,c.right=n.width),!h.top&&!h.bottom&&a.height<=n.height&&(c.top=0,c.bottom=n.height),vt(a,c)}var l=ct(n);r={height:l>s?n.height:n.width/s,width:l>s?n.height*s:n.width};return{left:n.width/2-r.width/2,top:n.height/2-r.height/2,width:r.width,height:r.height}}function jt(t,e){return yt(t,et(e))}function Lt(t){var e=t.event,i=t.coordinates,n=t.visibleArea,s=t.sizeRestrictions,o=t.getAreaRestrictions,r=t.positionRestrictions,a=t.adjustStencil,h=e.scale,c=e.move,l=C({},n),u=C({},i),d=1,m=1,p=h.factor&&Math.abs(h.factor-1)>.001;l=at(l,{left:c.left||0,top:c.top||0});var g={stencil:{minimum:Math.max(s.minWidth?s.minWidth/u.width:0,s.minHeight?s.minHeight/u.height:0),maximum:Math.min(s.maxWidth?s.maxWidth/u.width:1/0,s.maxHeight?s.maxHeight/u.height:1/0,lt(u,r))},area:{maximum:lt(l,o({visibleArea:l,type:\"resize\"}))}};h.factor&&p&&(h.factor<1?(m=Math.max(h.factor,g.stencil.minimum))>1&&(m=1):h.factor>1&&(m=Math.min(h.factor,Math.min(g.area.maximum,g.stencil.maximum)))<1&&(m=1)),m&&(l=ht(l,m,h.center));var f=i.left-n.left,v=n.width+n.left-(i.width+i.left),b=i.top-n.top,w=n.height+n.top-(i.height+i.top);return l=vt(l=at(l,ut(l,{left:void 0!==r.left?r.left-f*m:void 0,top:void 0!==r.top?r.top-b*m:void 0,bottom:void 0!==r.bottom?r.bottom+w*m:void 0,right:void 0!==r.right?r.right+v*m:void 0})),o({visibleArea:l,type:\"move\"})),u.width=u.width*m,u.height=u.height*m,u.left=l.left+f*m,u.top=l.top+b*m,u=vt(u,zt(et(l),r)),h.factor&&p&&a&&(h.factor>1?d=Math.min(g.area.maximum,h.factor)/m:h.factor<1&&(d=Math.max(u.height/l.height,u.width/l.width,h.factor/m)),1!==d&&(l=at(l=vt(l=ht(l,d,h.factor>1?h.center:nt(u)),o({visibleArea:l,type:\"move\"})),rt(ut(u,et(l)))))),{coordinates:u,visibleArea:l}}function Pt(t){var e=t.aspectRatio,i=t.getAreaRestrictions,n=t.coordinates,s=t.visibleArea,o=t.sizeRestrictions,r=t.positionRestrictions,a=t.imageSize,h=t.previousImageSize,c=t.angle,l=C({},n),u=C({},s),d=gt(nt(C({left:0,top:0},h)),c);return(l=C(C({},Mt({sizeRestrictions:o,aspectRatio:e,width:l.width,height:l.height})),gt(nt(l),c))).left-=d.left-a.width/2+l.width/2,l.top-=d.top-a.height/2+l.height/2,u=ht(u,ft(u,i({visibleArea:u,type:\"resize\"}))),{coordinates:l=vt(l,r),visibleArea:u=vt(u=at(u,it(nt(l),nt(n))),i({visibleArea:u,type:\"move\"}))}}function $t(t){var e=t.flip,i=t.previousFlip,n=t.rotate;t.aspectRatio;var s=t.getAreaRestrictions,o=t.coordinates,r=t.visibleArea,a=t.imageSize,h=C({},o),c=C({},r),l=i.horizontal!==e.horizontal,u=i.vertical!==e.vertical;if(l||u){var d=gt({left:a.width/2,top:a.height/2},-n),m=gt(nt(h),-n),p=gt({left:l?d.left-(m.left-d.left):m.left,top:u?d.top-(m.top-d.top):m.top},n);h=at(h,it(p,nt(h))),m=gt(nt(c),-n),c=vt(c=at(c,it(p=gt({left:l?d.left-(m.left-d.left):m.left,top:u?d.top-(m.top-d.top):m.top},n),nt(c))),s({visibleArea:c,type:\"move\"}))}return{coordinates:h,visibleArea:c}}function It(t){var e=t.directions,i=t.coordinates,n=t.positionRestrictions,s=void 0===n?{}:n,o=t.sizeRestrictions,r=t.preserveRatio,a=t.compensate,h=C({},e),c=ot(i,h).width,l=ot(i,h).height;c<0&&(h.left<0&&h.right<0?(h.left=-(i.width-o.minWidth)/(h.left/h.right),h.right=-(i.width-o.minWidth)/(h.right/h.left)):h.left<0?h.left=-(i.width-o.minWidth):h.right<0&&(h.right=-(i.width-o.minWidth))),l<0&&(h.top<0&&h.bottom<0?(h.top=-(i.height-o.minHeight)/(h.top/h.bottom),h.bottom=-(i.height-o.minHeight)/(h.bottom/h.top)):h.top<0?h.top=-(i.height-o.minHeight):h.bottom<0&&(h.bottom=-(i.height-o.minHeight)));var u=st(ot(i,h),s);a&&(u.left&&u.left>0&&0===u.right?(h.right+=u.left,h.left-=u.left):u.right&&u.right>0&&0===u.left&&(h.left+=u.right,h.right-=u.right),u.top&&u.top>0&&0===u.bottom?(h.bottom+=u.top,h.top-=u.top):u.bottom&&u.bottom>0&&0===u.top&&(h.top+=u.bottom,h.bottom-=u.bottom),u=st(ot(i,h),s));var d={width:1/0,height:1/0,left:1/0,right:1/0,top:1/0,bottom:1/0};if(V.forEach((function(t){var e=u[t];e&&h[t]&&(d[t]=Math.max(0,1-e/h[t]))})),r){var m=Math.min.apply(null,V.map((function(t){return d[t]})));m!==1/0&&V.forEach((function(t){h[t]*=m}))}else V.forEach((function(t){d[t]!==1/0&&(h[t]*=d[t])}));if(c=ot(i,h).width,l=ot(i,h).height,h.right+h.left&&(c>o.maxWidth?d.width=(o.maxWidth-i.width)/(h.right+h.left):c<o.minWidth&&(d.width=(o.minWidth-i.width)/(h.right+h.left))),h.bottom+h.top&&(l>o.maxHeight?d.height=(o.maxHeight-i.height)/(h.bottom+h.top):l<o.minHeight&&(d.height=(o.minHeight-i.height)/(h.bottom+h.top))),r){var p=Math.min(d.width,d.height);p!==1/0&&V.forEach((function(t){h[t]*=p}))}else d.width!==1/0&&_.forEach((function(t){h[t]*=d.width})),d.height!==1/0&&G.forEach((function(t){h[t]*=d.height}));return h}function Bt(t,e,i){return 0==e&&0==i?t/2:0==e?0:0==i?t:t*Math.abs(e/(e+i))}var Xt=M(\"vue-simple-handler\"),Yt=M(\"vue-simple-handler-wrapper\"),kt={name:\"SimpleHandler\",components:{HandlerWrapper:N},props:{defaultClass:{type:String},hoverClass:{type:String},wrapperClass:{type:String},horizontalPosition:{type:String},verticalPosition:{type:String},disabled:{type:Boolean,default:!1}},data:function(){return{hover:!1}},computed:{classes:function(){var t,e=(f(t={},this.horizontalPosition,Boolean(this.horizontalPosition)),f(t,this.verticalPosition,Boolean(this.verticalPosition)),f(t,\"\".concat(this.horizontalPosition,\"-\").concat(this.verticalPosition),Boolean(this.verticalPosition&&this.horizontalPosition)),f(t,\"hover\",this.hover),t);return{default:A(Xt(e),this.defaultClass,this.hover&&this.hoverClass),wrapper:A(Yt(e),this.wrapperClass)}}},methods:{onDrag:function(t){this.$emit(\"drag\",t)},onEnter:function(){this.hover=!0},onLeave:function(){this.hover=!1},onDragEnd:function(){this.$emit(\"drag-end\")}},emits:[\"drag\",\"drag-end\"]};kt.render=function(i,r,a,h,c,l){var u=n(\"HandlerWrapper\");return t(),e(u,{class:l.classes.wrapper,\"vertical-position\":a.verticalPosition,\"horizontal-position\":a.horizontalPosition,disabled:a.disabled,onDrag:l.onDrag,onDragEnd:l.onDragEnd,onEnter:l.onEnter,onLeave:l.onLeave},{default:o((function(){return[s(\"div\",{class:l.classes.default},null,2)]})),_:1},8,[\"class\",\"vertical-position\",\"horizontal-position\",\"disabled\",\"onDrag\",\"onDragEnd\",\"onEnter\",\"onLeave\"])};var Ft=M(\"vue-simple-line\"),Ut=M(\"vue-simple-line-wrapper\"),Nt={name:\"SimpleLine\",components:{LineWrapper:q},props:{defaultClass:{type:String},hoverClass:{type:String},wrapperClass:{type:String},position:{type:String},disabled:{type:Boolean,default:!1}},data:function(){return{hover:!1}},computed:{classes:function(){return{root:A(Ft(f({},this.position,!0)),this.defaultClass,this.hover&&this.hoverClass),wrapper:A(Ut(f({},this.position,!0)),this.wrapperClass)}}},methods:{onDrag:function(t){this.$emit(\"drag\",t)},onEnter:function(){this.hover=!0},onLeave:function(){this.hover=!1},onDragEnd:function(){this.$emit(\"drag-end\")}},emits:[\"drag\",\"drag-end\"]};Nt.render=function(i,r,a,h,c,l){var u=n(\"LineWrapper\");return t(),e(u,{class:l.classes.wrapper,position:a.position,disabled:a.disabled,onDrag:l.onDrag,onDragEnd:l.onDragEnd,onEnter:l.onEnter,onLeave:l.onLeave},{default:o((function(){return[s(\"div\",{class:l.classes.root},null,2)]})),_:1},8,[\"class\",\"position\",\"disabled\",\"onDrag\",\"onDragEnd\",\"onEnter\",\"onLeave\"])};var Zt=M(\"vue-bounding-box\"),qt=[\"east\",\"west\",null],Vt=[\"south\",\"north\",null],_t={name:\"BoundingBox\",props:{width:{type:Number},height:{type:Number},transitions:{type:Object},handlers:{type:Object,default:function(){return{eastNorth:!0,north:!0,westNorth:!0,west:!0,westSouth:!0,south:!0,eastSouth:!0,east:!0}}},handlersComponent:{type:[Object,String],default:function(){return kt}},handlersClasses:{type:Object,default:function(){return{}}},handlersWrappersClasses:{type:Object,default:function(){return{}}},lines:{type:Object,default:function(){return{west:!0,north:!0,east:!0,south:!0}}},linesComponent:{type:[Object,String],default:function(){return Nt}},linesClasses:{type:Object,default:function(){return{}}},linesWrappersClasses:{type:Object,default:function(){return{}}},resizable:{type:Boolean,default:!0}},data:function(){var t=[];return qt.forEach((function(e){Vt.forEach((function(i){if(e!==i){var n=E(e,i),s=n.name,o=n.classname;t.push({name:s,classname:o,verticalDirection:i,horizontalDirection:e})}}))})),{points:t}},computed:{style:function(){var t={};return this.width&&this.height&&(t.width=\"\".concat(this.width,\"px\"),t.height=\"\".concat(this.height,\"px\"),this.transitions&&this.transitions.enabled&&(t.transition=\"\".concat(this.transitions.time,\"ms \").concat(this.transitions.timingFunction))),t},classes:function(){var t=this.handlersClasses,e=this.handlersWrappersClasses,i=this.linesClasses,n=this.linesWrappersClasses;return{root:Zt(),handlers:t,handlersWrappers:e,lines:i,linesWrappers:n}},lineNodes:function(){var t=this,e=[];return this.points.forEach((function(i){i.horizontalDirection&&i.verticalDirection||!t.lines[i.name]||e.push({name:i.name,component:t.linesComponent,class:A(t.classes.lines.default,t.classes.lines[i.name],!t.resizable&&t.classes.lines.disabled),wrapperClass:A(t.classes.linesWrappers.default,t.classes.linesWrappers[i.name],!t.resizable&&t.classes.linesWrappers.disabled),hoverClass:t.classes.lines.hover,verticalDirection:i.verticalDirection,horizontalDirection:i.horizontalDirection,disabled:!t.resizable})})),e},handlerNodes:function(){var t=this,e=[],i=this.width,n=this.height;return this.points.forEach((function(s){if(t.handlers[s.name]){var o={name:s.name,component:t.handlersComponent,class:A(t.classes.handlers.default,t.classes.handlers[s.name]),wrapperClass:A(t.classes.handlersWrappers.default,t.classes.handlersWrappers[s.name]),hoverClass:t.classes.handlers.hover,verticalDirection:s.verticalDirection,horizontalDirection:s.horizontalDirection,disabled:!t.resizable};if(i&&n){var r=s.horizontalDirection,a=s.verticalDirection,h=\"east\"===r?i:\"west\"===r?0:i/2,c=\"south\"===a?n:\"north\"===a?0:n/2;o.wrapperClass=Zt(\"handler\"),o.wrapperStyle={transform:\"translate(\".concat(h,\"px, \").concat(c,\"px)\")},t.transitions&&t.transitions.enabled&&(o.wrapperStyle.transition=\"\".concat(t.transitions.time,\"ms \").concat(t.transitions.timingFunction))}else o.wrapperClass=Zt(\"handler\",f({},s.classname,!0));e.push(o)}})),e}},beforeMount:function(){window.addEventListener(\"mouseup\",this.onMouseUp,{passive:!1}),window.addEventListener(\"mousemove\",this.onMouseMove,{passive:!1}),window.addEventListener(\"touchmove\",this.onTouchMove,{passive:!1}),window.addEventListener(\"touchend\",this.onTouchEnd,{passive:!1})},beforeUnmount:function(){window.removeEventListener(\"mouseup\",this.onMouseUp),window.removeEventListener(\"mousemove\",this.onMouseMove),window.removeEventListener(\"touchmove\",this.onTouchMove),window.removeEventListener(\"touchend\",this.onTouchEnd)},mounted:function(){this.touches=[]},methods:{onEnd:function(){this.$emit(\"resize-end\")},onHandlerDrag:function(t,e,i){var n,s=t.shift(),o=s.left,r=s.top,a={left:0,right:0,top:0,bottom:0};\"west\"===e?a.left-=o:\"east\"===e&&(a.right+=o),\"north\"===i?a.top-=r:\"south\"===i&&(a.bottom+=r),!i&&e?n=\"width\":i&&!e&&(n=\"height\"),this.resizable&&this.$emit(\"resize\",new X(a,{allowedDirections:{left:\"west\"===e||!e,right:\"east\"===e||!e,bottom:\"south\"===i||!i,top:\"north\"===i||!i},preserveAspectRatio:t.nativeEvent&&t.nativeEvent.shiftKey,respectDirection:n}))}},emits:[\"resize\",\"resize-end\"]};_t.render=function(n,o,c,l,u,d){return t(),e(\"div\",{ref:\"box\",class:d.classes.root,style:d.style},[i(n.$slots,\"default\"),s(\"div\",null,[(t(!0),e(r,null,a(d.lineNodes,(function(i){return t(),e(h(i.component),{key:i.name,\"default-class\":i.class,\"hover-class\":i.hoverClass,\"wrapper-class\":i.wrapperClass,position:i.name,disabled:i.disabled,onDrag:function(t){return d.onHandlerDrag(t,i.horizontalDirection,i.verticalDirection)},onDragEnd:o[1]||(o[1]=function(t){return d.onEnd()})},null,8,[\"default-class\",\"hover-class\",\"wrapper-class\",\"position\",\"disabled\",\"onDrag\"])})),128))]),(t(!0),e(r,null,a(d.handlerNodes,(function(i){return t(),e(\"div\",{key:i.name,style:i.wrapperStyle,class:i.wrapperClass},[(t(),e(h(i.component),{\"default-class\":i.class,\"hover-class\":i.hoverClass,\"wrapper-class\":i.wrapperClass,\"horizontal-position\":i.horizontalDirection,\"vertical-position\":i.verticalDirection,disabled:i.disabled,onDrag:function(t){return d.onHandlerDrag(t,i.horizontalDirection,i.verticalDirection)},onDragEnd:o[2]||(o[2]=function(t){return d.onEnd()})},null,8,[\"default-class\",\"hover-class\",\"wrapper-class\",\"horizontal-position\",\"vertical-position\",\"disabled\",\"onDrag\"]))],6)})),128))],6)};var Gt=M(\"vue-draggable-area\"),Qt={name:\"DraggableArea\",props:{movable:{type:Boolean,default:!0},activationDistance:{type:Number,default:20}},computed:{classnames:function(){return{default:Gt()}}},beforeMount:function(){window.addEventListener(\"mouseup\",this.onMouseUp,{passive:!1}),window.addEventListener(\"mousemove\",this.onMouseMove,{passive:!1}),window.addEventListener(\"touchmove\",this.onTouchMove,{passive:!1}),window.addEventListener(\"touchend\",this.onTouchEnd,{passive:!1})},beforeUnmount:function(){window.removeEventListener(\"mouseup\",this.onMouseUp),window.removeEventListener(\"mousemove\",this.onMouseMove),window.removeEventListener(\"touchmove\",this.onTouchMove),window.removeEventListener(\"touchend\",this.onTouchEnd)},mounted:function(){this.touches=[],this.touchStarted=!1},methods:{onTouchStart:function(t){if(t.cancelable){var e=this.movable&&1===t.touches.length;e&&(this.touches=b(t.touches)),(this.touchStarted||e)&&(t.preventDefault(),t.stopPropagation())}},onTouchEnd:function(){this.touchStarted=!1,this.processEnd()},onTouchMove:function(t){this.touches.length>=1&&(this.touchStarted?(this.processMove(t,t.touches),t.preventDefault(),t.stopPropagation()):I({x:this.touches[0].clientX,y:this.touches[0].clientY},{x:t.touches[0].clientX,y:t.touches[0].clientY})>this.activationDistance&&(this.initAnchor({clientX:t.touches[0].clientX,clientY:t.touches[0].clientY}),this.touchStarted=!0))},onMouseDown:function(t){if(this.movable&&0===t.button){var e={fake:!0,clientX:t.clientX,clientY:t.clientY};this.touches=[e],this.initAnchor(e),t.stopPropagation()}},onMouseMove:function(t){this.touches.length&&(this.processMove(t,[{fake:!0,clientX:t.clientX,clientY:t.clientY}]),t.preventDefault&&t.cancelable&&t.preventDefault(),t.stopPropagation())},onMouseUp:function(){this.processEnd()},initAnchor:function(t){var e=this.$refs.container.getBoundingClientRect(),i=e.left,n=e.top;this.anchor={x:t.clientX-i,y:t.clientY-n}},processMove:function(t,e){var i=b(e);if(this.touches.length){var n=this.$refs.container.getBoundingClientRect(),s=n.left,o=n.top;1===this.touches.length&&1===i.length&&this.$emit(\"move\",new Y({left:i[0].clientX-(s+this.anchor.x),top:i[0].clientY-(o+this.anchor.y)}))}},processEnd:function(){this.touches.length&&this.$emit(\"move-end\"),this.touches=[]}},emits:[\"move\",\"move-end\"]};Qt.render=function(n,s,o,r,a,h){return t(),e(\"div\",{ref:\"container\",onTouchstart:s[1]||(s[1]=function(){return h.onTouchStart&&h.onTouchStart.apply(h,arguments)}),onMousedown:s[2]||(s[2]=function(){return h.onMouseDown&&h.onMouseDown.apply(h,arguments)})},[i(n.$slots,\"default\")],544)};function Kt(t){var e,i;return{rotate:t.rotate||0,flip:{horizontal:(null===(e=null==t?void 0:t.flip)||void 0===e?void 0:e.horizontal)||!1,vertical:(null===(i=null==t?void 0:t.flip)||void 0===i?void 0:i.vertical)||!1}}}function Jt(t){return new Promise((function(e,i){try{if(t)if(/^data:/i.test(t))e(function(t){t=t.replace(/^data:([^;]+);base64,/gim,\"\");for(var e=atob(t),i=e.length,n=new ArrayBuffer(i),s=new Uint8Array(n),o=0;o<i;o++)s[o]=e.charCodeAt(o);return n}(t));else if(/^blob:/i.test(t)){var n=new FileReader;n.onload=function(t){e(t.target.result)},o=t,r=function(t){n.readAsArrayBuffer(t)},(a=new XMLHttpRequest).open(\"GET\",o,!0),a.responseType=\"blob\",a.onload=function(){200!=this.status&&0!==this.status||r(this.response)},a.send()}else{var s=new XMLHttpRequest;s.onreadystatechange=function(){4===s.readyState&&(200===s.status||0===s.status?e(s.response):i(\"Warning: could not load an image to parse its orientation\"),s=null)},s.onprogress=function(){\"image/jpeg\"!==s.getResponseHeader(\"content-type\")&&s.abort()},s.withCredentials=!1,s.open(\"GET\",t,!0),s.responseType=\"arraybuffer\",s.send(null)}else i(\"Error: the image is empty\")}catch(t){i(t)}var o,r,a}))}function te(t){var e=t.rotate,i=t.flip,n=t.scaleX,s=t.scaleY,o=\"\";return o+=\" rotate(\"+e+\"deg) \",o+=\" scaleX(\"+n*(i.horizontal?-1:1)+\") \",o+=\" scaleY(\"+s*(i.vertical?-1:1)+\") \"}function ee(t){try{var e,i=new DataView(t),n=void 0,s=void 0,o=void 0,r=void 0;if(255===i.getUint8(0)&&216===i.getUint8(1))for(var a=i.byteLength,h=2;h+1<a;){if(255===i.getUint8(h)&&225===i.getUint8(h+1)){o=h;break}h++}if(o&&(n=o+10,\"Exif\"===function(t,e,i){var n,s=\"\";for(n=e,i+=e;n<i;n++)s+=String.fromCharCode(t.getUint8(n));return s}(i,o+4,4))){var c=i.getUint16(n);if(((s=18761===c)||19789===c)&&42===i.getUint16(n+2,s)){var l=i.getUint32(n+4,s);l>=8&&(r=n+l)}}if(r)for(var u=i.getUint16(r,s),d=0;d<u;d++){h=r+12*d+2;if(274===i.getUint16(h,s)){h+=8,e=i.getUint16(h,s),i.setUint16(h,1,s);break}}return e}catch(t){return null}}var ie=M(\"vue-preview-result\"),ne={name:\"PreviewResult\",props:{image:{type:Object},transitions:{type:Object},stencilCoordinates:{type:Object,default:function(){return{width:0,height:0,left:0,top:0}}},imageClass:{type:String}},computed:{classes:function(){return{root:ie(),wrapper:ie(\"wrapper\"),imageWrapper:ie(\"image-wrapper\"),image:A(ie(\"image\"),this.imageClass)}},wrapperStyle:function(){var t={width:\"\".concat(this.stencilCoordinates.width,\"px\"),height:\"\".concat(this.stencilCoordinates.height,\"px\"),left:\"calc(50% - \".concat(this.stencilCoordinates.width/2,\"px)\"),top:\"calc(50% - \".concat(this.stencilCoordinates.height/2,\"px)\")};return this.transitions&&this.transitions.enabled&&(t.transition=\"\".concat(this.transitions.time,\"ms \").concat(this.transitions.timingFunction)),t},imageStyle:function(){var t=this.image.transforms,e=pt({width:this.image.width,height:this.image.height},t.rotate),i={width:\"\".concat(this.image.width,\"px\"),height:\"\".concat(this.image.height,\"px\"),left:\"0px\",top:\"0px\"},n={left:(this.image.width-e.width)*t.scaleX/2,top:(this.image.height-e.height)*t.scaleY/2},s={left:(1-t.scaleX)*this.image.width/2,top:(1-t.scaleY)*this.image.height/2};return i.transform=\"translate(\\n\\t\\t\\t\\t\".concat(-this.stencilCoordinates.left-t.translateX-n.left-s.left,\"px,\").concat(-this.stencilCoordinates.top-t.translateY-n.top-s.top,\"px) \")+te(t),this.transitions&&this.transitions.enabled&&(i.transition=\"\".concat(this.transitions.time,\"ms \").concat(this.transitions.timingFunction)),i}}};function se(t,e){var i=e.getBoundingClientRect(),n=i.left,s=i.top,o={left:0,top:0},r=0;return t.forEach((function(e){o.left+=(e.clientX-n)/t.length,o.top+=(e.clientY-s)/t.length})),t.forEach((function(t){r+=I({x:o.left,y:o.top},{x:t.clientX-n,y:t.clientY-s})})),{centerMass:o,spread:r,count:t.length}}ne.render=function(i,n,o,r,a,h){return t(),e(\"div\",{class:h.classes.root},[s(\"div\",{ref:\"wrapper\",class:h.classes.wrapper,style:h.wrapperStyle},[s(\"img\",{ref:\"image\",src:o.image.src,class:h.classes.image,style:h.imageStyle},null,14,[\"src\"])],6)],2)};var oe={props:{touchMove:{type:Boolean,required:!0},mouseMove:{type:Boolean,required:!0},touchResize:{type:Boolean,required:!0},wheelResize:{type:[Boolean,Object],required:!0},eventsFilter:{type:Function,required:!1}},beforeMount:function(){window.addEventListener(\"mouseup\",this.onMouseUp,{passive:!1}),window.addEventListener(\"mousemove\",this.onMouseMove,{passive:!1}),window.addEventListener(\"touchmove\",this.onTouchMove,{passive:!1}),window.addEventListener(\"touchend\",this.onTouchEnd,{passive:!1})},beforeUnmount:function(){window.removeEventListener(\"mouseup\",this.onMouseUp),window.removeEventListener(\"mousemove\",this.onMouseMove),window.removeEventListener(\"touchmove\",this.onTouchMove),window.removeEventListener(\"touchend\",this.onTouchEnd)},created:function(){this.transforming=!1,this.debouncedProcessEnd=x(this.processEnd),this.touches=[]},methods:{processMove:function(t,e){if(this.touches.length){if(1===this.touches.length&&1===e.length)this.$emit(\"move\",new B({left:this.touches[0].clientX-e[0].clientX,top:this.touches[0].clientY-e[0].clientY}));else if(this.touches.length>1&&this.touchResize){var i=se(e,this.$refs.container),n=this.oldGeometricProperties;n.count===i.count&&n.count>1&&this.$emit(\"resize\",new B({left:n.centerMass.left-i.centerMass.left,top:n.centerMass.top-i.centerMass.top},{factor:n.spread/i.spread,center:i.centerMass})),this.oldGeometricProperties=i}this.touches=e}},processEnd:function(){this.transforming&&(this.transforming=!1,this.$emit(\"transform-end\"))},processStart:function(){this.transforming=!0,this.debouncedProcessEnd.clear()},processEvent:function(t){return this.eventsFilter?!1!==this.eventsFilter(t,this.transforming):(t.preventDefault(),t.stopPropagation(),!0)},onTouchStart:function(t){if(t.cancelable&&(this.touchMove||this.touchResize&&t.touches.length>1)&&this.processEvent(t)){var e=this.$refs.container,i=e.getBoundingClientRect(),n=i.left,s=i.top,o=i.bottom,r=i.right;this.touches=b(t.touches).filter((function(t){return t.clientX>n&&t.clientX<r&&t.clientY>s&&t.clientY<o})),this.oldGeometricProperties=se(this.touches,e)}},onTouchEnd:function(t){0===t.touches.length&&(this.touches=[],this.processEnd())},onTouchMove:function(t){var e=this;if(this.touches.length){var i=b(t.touches).filter((function(t){return!t.identifier||e.touches.find((function(e){return e.identifier===t.identifier}))}));this.processEvent(t)&&(this.processMove(t,i),this.processStart())}},onMouseDown:function(t){if(this.mouseMove&&\"buttons\"in t&&1===t.buttons&&this.processEvent(t)){var e={fake:!0,clientX:t.clientX,clientY:t.clientY};this.touches=[e],this.processStart()}},onMouseMove:function(t){this.touches.length&&this.processEvent(t)&&this.processMove(t,[{clientX:t.clientX,clientY:t.clientY}])},onMouseUp:function(){this.touches=[],this.processEnd()},onWheel:function(t){if(this.wheelResize&&this.processEvent(t)){var e=this.$refs.container.getBoundingClientRect(),i=e.left,n=e.top,s=1+this.wheelResize.ratio*(r=t.deltaY||t.detail||t.wheelDelta,0===(a=+r)||$(a)?a:a>0?1:-1),o={left:t.clientX-i,top:t.clientY-n};this.$emit(\"resize\",new B({},{factor:s,center:o})),this.touches.length||this.debouncedProcessEnd()}var r,a}},emits:[\"resize\",\"move\",\"transform-end\"]};oe.render=function(n,s,o,r,a,h){return t(),e(\"div\",{ref:\"container\",onTouchstart:s[1]||(s[1]=function(){return h.onTouchStart&&h.onTouchStart.apply(h,arguments)}),onMousedown:s[2]||(s[2]=function(){return h.onMouseDown&&h.onMouseDown.apply(h,arguments)}),onWheel:s[3]||(s[3]=function(){return h.onWheel&&h.onWheel.apply(h,arguments)})},[i(n.$slots,\"default\")],544)};var re={components:{TransformableImage:oe},props:{touchMove:{type:Boolean,required:!0},mouseMove:{type:Boolean,required:!0},touchResize:{type:Boolean,required:!0},wheelResize:{type:[Boolean,Object],required:!0}},emits:[\"resize\",\"move\"]};re.render=function(s,r,a,h,c,l){var u=n(\"transformable-image\");return t(),e(u,{\"touch-move\":a.touchMove,\"touch-resize\":a.touchResize,\"mouse-move\":a.mouseMove,\"wheel-resize\":a.wheelResize,onMove:r[1]||(r[1]=function(t){return s.$emit(\"move\",t)}),onResize:r[2]||(r[2]=function(t){return s.$emit(\"resize\",t)})},{default:o((function(){return[i(s.$slots,\"default\")]})),_:3},8,[\"touch-move\",\"touch-resize\",\"mouse-move\",\"wheel-resize\"])};var ae=M(\"vue-preview\"),he={props:{coordinates:{type:Object},transitions:{type:Object},image:{type:Object,default:function(){return{}}},imageClass:{type:String},width:{type:Number},height:{type:Number},fill:{type:Boolean}},data:function(){return{calculatedImageSize:{width:0,height:0},calculatedSize:{width:0,height:0}}},computed:{classes:function(){return{root:ae({fill:this.fill}),wrapper:ae(\"wrapper\"),imageWrapper:ae(\"image-wrapper\"),image:A(ae(\"image\"),this.imageClass)}},style:function(){if(this.fill)return{};var t={};return this.width&&(t.width=\"\".concat(this.size.width,\"px\")),this.height&&(t.height=\"\".concat(this.size.height,\"px\")),this.transitions&&this.transitions.enabled&&(t.transition=\"\".concat(this.transitions.time,\"ms \").concat(this.transitions.timingFunction)),t},wrapperStyle:function(){var t={width:\"\".concat(this.size.width,\"px\"),height:\"\".concat(this.size.height,\"px\"),left:\"calc(50% - \".concat(this.size.width/2,\"px)\"),top:\"calc(50% - \".concat(this.size.height/2,\"px)\")};return this.transitions&&this.transitions.enabled&&(t.transition=\"\".concat(this.transitions.time,\"ms \").concat(this.transitions.timingFunction)),t},imageStyle:function(){if(this.coordinates&&this.image){var t=this.coordinates.width/this.size.width,e=g(g({rotate:0,flip:{horizontal:!1,vertical:!1}},this.image.transforms),{},{scaleX:1/t,scaleY:1/t}),i=this.imageSize.width,n=this.imageSize.height,s=pt({width:i,height:n},e.rotate),o={width:\"\".concat(i,\"px\"),height:\"\".concat(n,\"px\"),left:\"0px\",top:\"0px\"},r={rotate:{left:(i-s.width)*e.scaleX/2,top:(n-s.height)*e.scaleY/2},scale:{left:(1-e.scaleX)*i/2,top:(1-e.scaleY)*n/2}};return o.transform=\"translate(\\n\\t\\t\\t\\t\".concat(-this.coordinates.left/t-r.rotate.left-r.scale.left,\"px,\").concat(-this.coordinates.top/t-r.rotate.top-r.scale.top,\"px) \")+te(e),this.transitions&&this.transitions.enabled&&(o.transition=\"\".concat(this.transitions.time,\"ms \").concat(this.transitions.timingFunction)),o}return{}},size:function(){return{width:this.width||this.calculatedSize.width,height:this.height||this.calculatedSize.height}},imageSize:function(){return{width:this.image.width||this.calculatedImageSize.width,height:this.image.height||this.calculatedImageSize.height}}},watch:{image:function(t){(t.width||t.height)&&this.onChangeImage()}},mounted:function(){var t=this;this.onChangeImage(),this.$refs.image.addEventListener(\"load\",(function(){t.refreshImage()})),window.addEventListener(\"resize\",this.refresh),window.addEventListener(\"orientationchange\",this.refresh)},unmounted:function(){window.removeEventListener(\"resize\",this.refresh),window.removeEventListener(\"orientationchange\",this.refresh)},methods:{refreshImage:function(){var t=this.$refs.image;this.calculatedImageSize.height=t.naturalHeight,this.calculatedImageSize.width=t.naturalWidth},refresh:function(){var t=this.$refs.root;this.width||(this.calculatedSize.width=t.clientWidth),this.height||(this.calculatedSize.height=t.clientHeight)},onChangeImage:function(){var t=this.$refs.image;t&&t.complete&&this.refreshImage(),this.refresh()}}};he.render=function(i,n,o,r,a,h){return t(),e(\"div\",{ref:\"root\",class:h.classes.root,style:h.style},[s(\"div\",{ref:\"wrapper\",class:h.classes.wrapper,style:h.wrapperStyle},[c(s(\"img\",{ref:\"image\",src:o.image&&o.image.src,class:h.classes.image,style:h.imageStyle},null,14,[\"src\"]),[[l,o.image&&o.image.src]])],6)],6)};var ce={components:{Preview:he},inheritAttrs:!1};ce.render=function(i,s,o,r,a,h){var c=n(\"preview\");return t(),e(c,u(i.$attrs,{fill:!0}),null,16)};var le=M(\"vue-rectangle-stencil\"),ue={name:\"RectangleStencil\",components:{StencilPreview:ce,BoundingBox:_t,DraggableArea:Qt},props:{image:{type:Object},coordinates:{type:Object},stencilCoordinates:{type:Object},handlers:{type:Object},handlersComponent:{type:[Object,String],default:function(){return kt}},lines:{type:Object},linesComponent:{type:[Object,String],default:function(){return Nt}},aspectRatio:{type:[Number,String]},minAspectRatio:{type:[Number,String]},maxAspectRatio:{type:[Number,String]},movable:{type:Boolean,default:!0},resizable:{type:Boolean,default:!0},transitions:{type:Object},movingClass:{type:String},resizingClass:{type:String},previewClass:{type:String},boundingBoxClass:{type:String},linesClasses:{type:Object,default:function(){return{}}},linesWrappersClasses:{type:Object,default:function(){return{}}},handlersClasses:{type:Object,default:function(){return{}}},handlersWrappersClasses:{type:Object,default:function(){return{}}}},data:function(){return{moving:!1,resizing:!1}},computed:{classes:function(){return{stencil:A(le({movable:this.movable,moving:this.moving,resizing:this.resizing}),this.moving&&this.movingClass,this.resizing&&this.resizingClass),preview:A(le(\"preview\"),this.previewClass),boundingBox:A(le(\"bounding-box\"),this.boundingBoxClass)}},style:function(){var t=this.stencilCoordinates,e=t.height,i=t.width,n=t.left,s=t.top,o={width:\"\".concat(i,\"px\"),height:\"\".concat(e,\"px\"),transform:\"translate(\".concat(n,\"px, \").concat(s,\"px)\")};return this.transitions&&this.transitions.enabled&&(o.transition=\"\".concat(this.transitions.time,\"ms \").concat(this.transitions.timingFunction)),o}},methods:{onMove:function(t){this.$emit(\"move\",t),this.moving=!0},onMoveEnd:function(){this.$emit(\"move-end\"),this.moving=!1},onResize:function(t){this.$emit(\"resize\",t),this.resizing=!0},onResizeEnd:function(){this.$emit(\"resize-end\"),this.resizing=!1},aspectRatios:function(){return{minimum:this.aspectRatio||this.minAspectRatio,maximum:this.aspectRatio||this.maxAspectRatio}}},emits:[\"resize\",\"resize-end\",\"move\",\"move-end\"]};ue.render=function(i,r,a,h,c,l){var u=n(\"stencil-preview\"),d=n(\"draggable-area\"),m=n(\"bounding-box\");return t(),e(\"div\",{class:l.classes.stencil,style:l.style},[s(m,{width:a.stencilCoordinates.width,height:a.stencilCoordinates.height,transitions:a.transitions,class:l.classes.boundingBox,handlers:a.handlers,\"handlers-component\":a.handlersComponent,\"handlers-classes\":a.handlersClasses,\"handlers-wrappers-classes\":a.handlersWrappersClasses,lines:a.lines,\"lines-component\":a.linesComponent,\"lines-classes\":a.linesClasses,\"lines-wrappers-classes\":a.linesWrappersClasses,resizable:a.resizable,onResize:l.onResize,onResizeEnd:l.onResizeEnd},{default:o((function(){return[s(d,{movable:a.movable,onMove:l.onMove,onMoveEnd:l.onMoveEnd},{default:o((function(){return[s(u,{image:a.image,coordinates:a.coordinates,width:a.stencilCoordinates.width,height:a.stencilCoordinates.height,class:l.classes.preview,transitions:a.transitions},null,8,[\"image\",\"coordinates\",\"width\",\"height\",\"class\",\"transitions\"])]})),_:1},8,[\"movable\",\"onMove\",\"onMoveEnd\"])]})),_:1},8,[\"width\",\"height\",\"transitions\",\"class\",\"handlers\",\"handlers-component\",\"handlers-classes\",\"handlers-wrappers-classes\",\"lines\",\"lines-component\",\"lines-classes\",\"lines-wrappers-classes\",\"resizable\",\"onResize\",\"onResizeEnd\"])],6)};var de=M(\"vue-circle-stencil\"),me={components:{StencilPreview:ce,BoundingBox:_t,DraggableArea:Qt},props:{image:{type:Object},coordinates:{type:Object},stencilCoordinates:{type:Object},handlers:{type:Object,default:function(){return{eastNorth:!0,westNorth:!0,westSouth:!0,eastSouth:!0}}},handlersComponent:{type:[Object,String],default:function(){return kt}},handlersClasses:{type:Object,default:function(){return{}}},handlersWrappersClasses:{type:Object,default:function(){return{}}},lines:{type:Object},linesComponent:{type:[Object,String],default:function(){return Nt}},linesClasses:{type:Object,default:function(){return{}}},linesWrappersClasses:{type:Object,default:function(){return{}}},movable:{type:Boolean,default:!0},resizable:{type:Boolean,default:!0},transitions:{type:Object},movingClass:{type:String},resizingClass:{type:String},previewClass:{type:String},boundingBoxClass:{type:String}},data:function(){return{moving:!1,resizing:!1}},computed:{classes:function(){return{stencil:A(de({movable:this.movable,moving:this.moving,resizing:this.resizing}),this.moving&&this.movingClass,this.resizing&&this.resizingClass),preview:A(de(\"preview\"),this.previewClass),boundingBox:A(de(\"bounding-box\"),this.boundingBoxClass)}},style:function(){var t=this.stencilCoordinates,e=t.height,i=t.width,n=t.left,s=t.top,o={width:\"\".concat(i,\"px\"),height:\"\".concat(e,\"px\"),transform:\"translate(\".concat(n,\"px, \").concat(s,\"px)\")};return this.transitions&&this.transitions.enabled&&(o.transition=\"\".concat(this.transitions.time,\"ms \").concat(this.transitions.timingFunction)),o}},methods:{onMove:function(t){this.$emit(\"move\",t),this.moving=!0},onMoveEnd:function(){this.$emit(\"move-end\"),this.moving=!1},onResize:function(t){this.$emit(\"resize\",t),this.resizing=!0},onResizeEnd:function(){this.$emit(\"resize-end\"),this.resizing=!1},aspectRatios:function(){return{minimum:1,maximum:1}}},emits:[\"resize\",\"resize-end\",\"move\",\"move-end\"]};me.render=function(i,r,a,h,c,l){var u=n(\"stencil-preview\"),d=n(\"draggable-area\"),m=n(\"bounding-box\");return t(),e(\"div\",{class:l.classes.stencil,style:l.style},[s(m,{width:a.stencilCoordinates.width,height:a.stencilCoordinates.height,transitions:a.transitions,class:l.classes.boundingBox,handlers:a.handlers,\"handlers-component\":a.handlersComponent,\"handlers-classes\":a.handlersClasses,\"handlers-wrappers-classes\":a.handlersWrappersClasses,lines:a.lines,\"lines-component\":a.linesComponent,\"lines-classes\":a.linesClasses,\"lines-wrappers-classes\":a.linesWrappersClasses,resizable:a.resizable,onResize:l.onResize,onResizeEnd:l.onResizeEnd},{default:o((function(){return[s(d,{movable:a.movable,onMove:l.onMove,onMoveEnd:l.onMoveEnd},{default:o((function(){return[s(u,{image:a.image,coordinates:a.coordinates,width:a.stencilCoordinates.width,height:a.stencilCoordinates.height,class:l.classes.preview,transitions:a.transitions},null,8,[\"image\",\"coordinates\",\"width\",\"height\",\"class\",\"transitions\"])]})),_:1},8,[\"movable\",\"onMove\",\"onMoveEnd\"])]})),_:1},8,[\"width\",\"height\",\"transitions\",\"class\",\"handlers\",\"handlers-component\",\"handlers-classes\",\"handlers-wrappers-classes\",\"lines\",\"lines-component\",\"lines-classes\",\"lines-wrappers-classes\",\"resizable\",\"onResize\",\"onResizeEnd\"])],6)};var pe=[\"transitions\"],ge=M(\"vue-advanced-cropper\"),fe={name:\"Cropper\",components:{BackgroundWrapper:re},props:{src:{type:String,default:null},stencilComponent:{type:[Object,String],default:function(){return ue}},backgroundWrapperComponent:{type:[Object,String],default:function(){return re}},stencilProps:{type:Object,default:function(){return{}}},autoZoom:{type:Boolean,default:!1},imageClass:{type:String},boundariesClass:{type:String},backgroundClass:{type:String},foregroundClass:{type:String},minWidth:{type:[Number,String]},minHeight:{type:[Number,String]},maxWidth:{type:[Number,String]},maxHeight:{type:[Number,String]},debounce:{type:[Boolean,Number],default:500},transitions:{type:Boolean,default:!0},checkOrientation:{type:Boolean,default:!0},canvas:{type:[Object,Boolean],default:!0},crossOrigin:{type:[Boolean,String],default:void 0},transitionTime:{type:Number,default:300},imageRestriction:{type:String,default:\"fit-area\",validator:function(t){return-1!==K.indexOf(t)}},roundResult:{type:Boolean,default:!0},defaultSize:{type:[Function,Object]},defaultPosition:{type:[Function,Object]},defaultVisibleArea:{type:[Function,Object]},defaultTransforms:{type:[Function,Object]},defaultBoundaries:{type:[Function,String],validator:function(t){return!(\"string\"==typeof t&&\"fill\"!==t&&\"fit\"!==t)}},priority:{type:String,default:\"coordinates\"},stencilSize:{type:[Object,Function]},resizeImage:{type:[Boolean,Object],default:!0},moveImage:{type:[Boolean,Object],default:!0},autoZoomAlgorithm:{type:Function},resizeAlgorithm:{type:Function,default:function(t){var e=t.event,i=t.coordinates,n=t.aspectRatio,s=t.positionRestrictions,o=t.sizeRestrictions,r=C(C({},i),{right:i.left+i.width,bottom:i.top+i.height}),a=e.params||{},h=C({},e.directions),c=a.allowedDirections||{left:!0,right:!0,bottom:!0,top:!0};o.widthFrozen&&(h.left=0,h.right=0),o.heightFrozen&&(h.top=0,h.bottom=0),V.forEach((function(t){c[t]||(h[t]=0)}));var l=ot(r,h=It({coordinates:r,directions:h,sizeRestrictions:o,positionRestrictions:s})).width,u=ot(r,h).height,d=a.preserveRatio?ct(r):dt(l/u,n);if(d){var m=a.respectDirection;if(m||(m=r.width>=r.height||1===d?\"width\":\"height\"),\"width\"===m){var p=l/d-r.height;if(c.top&&c.bottom){var g=h.top,f=h.bottom;h.bottom=Bt(p,f,g),h.top=Bt(p,g,f)}else c.bottom?h.bottom=p:c.top?h.top=p:c.right?h.right=0:c.left&&(h.left=0)}else if(\"height\"===m){var v=r.width-u*d;if(c.left&&c.right){var b=h.left,w=h.right;h.left=-Bt(v,b,w),h.right=-Bt(v,w,b)}else c.left?h.left=-v:c.right?h.right=-v:c.top?h.top=0:c.bottom&&(h.bottom=0)}h=It({directions:h,coordinates:r,sizeRestrictions:o,positionRestrictions:s,preserveRatio:!0,compensate:a.compensate})}return l=ot(r,h).width,u=ot(r,h).height,(d=a.preserveRatio?ct(r):dt(l/u,n))&&Math.abs(d-l/u)>.001&&V.forEach((function(t){c[t]||(h[t]=0)})),St({event:new Y({left:-h.left,top:-h.top}),coordinates:{width:i.width+h.right+h.left,height:i.height+h.top+h.bottom,left:i.left,top:i.top},positionRestrictions:s})}},moveAlgorithm:{type:Function,default:St},initStretcher:{type:Function,default:function(t){var e=t.stretcher,i=t.imageSize,n=ct(i);e.style.width=i.width+\"px\",e.style.height=e.clientWidth/n+\"px\",e.style.width=e.clientWidth+\"px\"}},fitCoordinates:{type:Function,default:function(t){var e=t.visibleArea,i=t.coordinates,n=t.aspectRatio,s=t.sizeRestrictions,o=t.positionRestrictions,r=C(C({},i),Mt({width:i.width,height:i.height,aspectRatio:n,sizeRestrictions:{maxWidth:e.width,maxHeight:e.height,minHeight:Math.min(e.height,s.minHeight),minWidth:Math.min(e.width,s.minWidth)}}));return r=vt(r=at(r,it(nt(i),nt(r))),zt(et(e),o))}},fitVisibleArea:{type:Function,default:function(t){var e=t.visibleArea,i=t.boundaries,n=t.getAreaRestrictions,s=t.coordinates,o=C({},e);o.height=o.width/ct(i),o.top+=(e.height-o.height)/2,(s.height-o.height>0||s.width-o.width>0)&&(o=ht(o,Math.max(s.height/o.height,s.width/o.width)));var r=rt(ut(s,et(o=ht(o,ft(o,n({visibleArea:o,type:\"resize\"}))))));return o.width<s.width&&(r.left=0),o.height<s.height&&(r.top=0),o=vt(o=at(o,r),n({visibleArea:o,type:\"move\"}))}},areaRestrictionsAlgorithm:{type:Function,default:function(t){var e=t.visibleArea,i=t.boundaries,n=t.imageSize,s=t.imageRestriction,o=t.type,r={};return\"fill-area\"===s?r={left:0,top:0,right:n.width,bottom:n.height}:\"fit-area\"===s&&(ct(i)>ct(n)?(r={top:0,bottom:n.height},e&&\"move\"===o&&(e.width>n.width?(r.left=-(e.width-n.width)/2,r.right=n.width-r.left):(r.left=0,r.right=n.width))):(r={left:0,right:n.width},e&&\"move\"===o&&(e.height>n.height?(r.top=-(e.height-n.height)/2,r.bottom=n.height-r.top):(r.top=0,r.bottom=n.height)))),r}},sizeRestrictionsAlgorithm:{type:Function,default:function(t){return{minWidth:t.minWidth,minHeight:t.minHeight,maxWidth:t.maxWidth,maxHeight:t.maxHeight}}},positionRestrictionsAlgorithm:{type:Function,default:function(t){var e=t.imageSize,i={};return\"none\"!==t.imageRestriction&&(i={left:0,top:0,right:e.width,bottom:e.height}),i}}},data:function(){return{transitionsActive:!1,imageLoaded:!1,imageAttributes:{width:null,height:null,crossOrigin:null,src:null},defaultImageTransforms:{rotate:0,flip:{horizontal:!1,vertical:!1}},appliedImageTransforms:{rotate:0,flip:{horizontal:!1,vertical:!1}},boundaries:{width:0,height:0},visibleArea:null,coordinates:g({},J)}},computed:{image:function(){return{src:this.imageAttributes.src,width:this.imageAttributes.width,height:this.imageAttributes.height,transforms:this.imageTransforms}},imageTransforms:function(){return{rotate:this.appliedImageTransforms.rotate,flip:{horizontal:this.appliedImageTransforms.flip.horizontal,vertical:this.appliedImageTransforms.flip.vertical},translateX:this.visibleArea?this.visibleArea.left/this.coefficient:0,translateY:this.visibleArea?this.visibleArea.top/this.coefficient:0,scaleX:1/this.coefficient,scaleY:1/this.coefficient}},imageSize:function(){var t=function(t){return t*Math.PI/180}(this.imageTransforms.rotate);return{width:Math.abs(this.imageAttributes.width*Math.cos(t))+Math.abs(this.imageAttributes.height*Math.sin(t)),height:Math.abs(this.imageAttributes.width*Math.sin(t))+Math.abs(this.imageAttributes.height*Math.cos(t))}},initialized:function(){return Boolean(this.visibleArea&&this.imageLoaded)},settings:function(){var t=j(this.resizeImage,{touch:!0,wheel:{ratio:.1},adjustStencil:!0},{touch:!1,wheel:!1,adjustStencil:!1});return{moveImage:j(this.moveImage,{touch:!0,mouse:!0},{touch:!1,mouse:!1}),resizeImage:t}},coefficient:function(){return this.visibleArea?this.visibleArea.width/this.boundaries.width:0},areaRestrictions:function(){return this.imageLoaded?this.areaRestrictionsAlgorithm({imageSize:this.imageSize,imageRestriction:this.imageRestriction,boundaries:this.boundaries}):{}},transitionsOptions:function(){return{enabled:this.transitionsActive,timingFunction:\"ease-in-out\",time:350}},sizeRestrictions:function(){if(this.boundaries.width&&this.boundaries.height&&this.imageSize.width&&this.imageSize.height){var t=this.sizeRestrictionsAlgorithm({imageSize:this.imageSize,minWidth:D(this.minWidth)?0:L(this.minWidth),minHeight:D(this.minHeight)?0:L(this.minHeight),maxWidth:D(this.maxWidth)?1/0:L(this.maxWidth),maxHeight:D(this.maxHeight)?1/0:L(this.maxHeight)});if(t=function(t){var e=t.areaRestrictions,i=t.sizeRestrictions;t.imageSize;var n=t.boundaries,s=t.positionRestrictions;t.imageRestriction;var o=C(C({},i),{minWidth:void 0!==i.minWidth?i.minWidth:0,minHeight:void 0!==i.minHeight?i.minHeight:0,maxWidth:void 0!==i.maxWidth?i.maxWidth:1/0,maxHeight:void 0!==i.maxHeight?i.maxHeight:1/0});void 0!==s.left&&void 0!==s.right&&(o.maxWidth=Math.min(o.maxWidth,s.right-s.left)),void 0!==s.bottom&&void 0!==s.top&&(o.maxHeight=Math.min(o.maxHeight,s.bottom-s.top));var r=bt(e),a=mt(n,r);return r.width<1/0&&(!o.maxWidth||o.maxWidth>a.width)&&(o.maxWidth=Math.min(o.maxWidth,a.width)),r.height<1/0&&(!o.maxHeight||o.maxHeight>a.height)&&(o.maxHeight=Math.min(o.maxHeight,a.height)),o.minWidth>o.maxWidth&&(o.minWidth=o.maxWidth,o.widthFrozen=!0),o.minHeight>o.maxHeight&&(o.minHeight=o.maxHeight,o.heightFrozen=!0),o}({sizeRestrictions:t,areaRestrictions:this.getAreaRestrictions({visibleArea:this.visibleArea,type:\"resize\"}),imageSize:this.imageSize,boundaries:this.boundaries,positionRestrictions:this.positionRestrictions,imageRestriction:this.imageRestriction,visibleArea:this.visibleArea,stencilSize:this.getStencilSize()}),this.visibleArea&&this.stencilSize){var e=this.getStencilSize(),i=bt(this.getAreaRestrictions({visibleArea:this.visibleArea,type:\"resize\"}));t.maxWidth=Math.min(t.maxWidth,i.width*e.width/this.boundaries.width),t.maxHeight=Math.min(t.maxHeight,i.height*e.height/this.boundaries.height),t.maxWidth<t.minWidth&&(t.minWidth=t.maxWidth),t.maxHeight<t.minHeight&&(t.minHeight=t.maxHeight)}return t}return{minWidth:0,minHeight:0,maxWidth:0,maxHeight:0}},positionRestrictions:function(){return this.positionRestrictionsAlgorithm({imageSize:this.imageSize,imageRestriction:this.imageRestriction})},classes:function(){return{cropper:ge(),image:A(ge(\"image\"),this.imageClass),stencil:ge(\"stencil\"),boundaries:A(ge(\"boundaries\"),this.boundariesClass),stretcher:A(ge(\"stretcher\")),background:A(ge(\"background\"),this.backgroundClass),foreground:A(ge(\"foreground\"),this.foregroundClass),imageWrapper:A(ge(\"image-wrapper\")),cropperWrapper:A(ge(\"cropper-wrapper\"))}},stencilCoordinates:function(){if(this.initialized){var t=this.coordinates,e=t.width,i=t.height,n=t.left,s=t.top;return{width:e/this.coefficient,height:i/this.coefficient,left:(n-this.visibleArea.left)/this.coefficient,top:(s-this.visibleArea.top)/this.coefficient}}return this.defaultCoordinates()},boundariesStyle:function(){var t={width:this.boundaries.width?\"\".concat(Math.round(this.boundaries.width),\"px\"):\"auto\",height:this.boundaries.height?\"\".concat(Math.round(this.boundaries.height),\"px\"):\"auto\",transition:\"opacity \".concat(this.transitionTime,\"ms\"),pointerEvents:this.imageLoaded?\"all\":\"none\"};return this.imageLoaded||(t.opacity=\"0\"),t},imageStyle:function(){var t=this.imageAttributes.width>this.imageAttributes.height?{width:Math.min(1024,this.imageAttributes.width),height:Math.min(1024,this.imageAttributes.width)/(this.imageAttributes.width/this.imageAttributes.height)}:{height:Math.min(1024,this.imageAttributes.height),width:Math.min(1024,this.imageAttributes.height)*(this.imageAttributes.width/this.imageAttributes.height)},e={left:(t.width-this.imageSize.width)/(2*this.coefficient),top:(t.height-this.imageSize.height)/(2*this.coefficient)},i={left:(1-1/this.coefficient)*t.width/2,top:(1-1/this.coefficient)*t.height/2},n=g(g({},this.imageTransforms),{},{scaleX:this.imageTransforms.scaleX*(this.imageAttributes.width/t.width),scaleY:this.imageTransforms.scaleY*(this.imageAttributes.height/t.height)}),s={width:\"\".concat(t.width,\"px\"),height:\"\".concat(t.height,\"px\"),left:\"0px\",top:\"0px\",transform:\"translate(\".concat(-e.left-i.left-this.imageTransforms.translateX,\"px, \").concat(-e.top-i.top-this.imageTransforms.translateY,\"px)\")+te(n)};return this.transitionsOptions.enabled&&(s.transition=\"\".concat(this.transitionsOptions.time,\"ms \").concat(this.transitionsOptions.timingFunction)),s}},watch:{src:function(){this.onChangeImage()},stencilComponent:function(){var t=this;this.$nextTick((function(){t.resetCoordinates(),t.runAutoZoom(\"setCoordinates\"),t.onChange()}))},minWidth:function(){this.onPropsChange()},maxWidth:function(){this.onPropsChange()},minHeight:function(){this.onPropsChange()},maxHeight:function(){this.onPropsChange()},imageRestriction:function(){this.reset()},stencilProps:function(t,e){[\"aspectRatio\",\"minAspectRatio\",\"maxAspectRatio\"].find((function(i){return t[i]!==e[i]}))&&this.$nextTick(this.onPropsChange)}},created:function(){this.debouncedUpdate=x(this.update,this.debounce),this.debouncedDisableTransitions=x(this.disableTransitions,this.transitionsOptions.time),this.awaiting=!1},mounted:function(){this.$refs.image.addEventListener(\"load\",this.onSuccessLoadImage),this.$refs.image.addEventListener(\"error\",this.onFailLoadImage),this.onChangeImage(),window.addEventListener(\"resize\",this.refresh),window.addEventListener(\"orientationchange\",this.refresh)},unmounted:function(){window.removeEventListener(\"resize\",this.refresh),window.removeEventListener(\"orientationchange\",this.refresh),this.imageAttributes.revoke&&this.imageAttributes.src&&URL.revokeObjectURL(this.imageAttributes.src),this.debouncedUpdate.clear(),this.debouncedDisableTransitions.clear()},methods:{getResult:function(){var t=this.initialized?this.prepareResult(g({},this.coordinates)):this.defaultCoordinates(),e={rotate:this.imageTransforms.rotate%360,flip:g({},this.imageTransforms.flip)};if(this.src&&this.imageLoaded){var i=this;return{image:this.image,coordinates:t,visibleArea:this.visibleArea?g({},this.visibleArea):null,imageTransforms:e,get canvas(){return i.canvas?i.getCanvas():void 0}}}return{image:this.image,coordinates:t,visibleArea:this.visibleArea?g({},this.visibleArea):null,canvas:void 0,imageTransforms:e}},zoom:function(t,e){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},n=i.transitions,s=void 0===n||n;this.onManipulateImage(new B({},{factor:1/t,center:e}),{normalize:!1,transitions:s})},move:function(t,e){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},n=i.transitions,s=void 0===n||n;this.onManipulateImage(new B({left:t||0,top:e||0}),{normalize:!1,transitions:s})},setCoordinates:function(t){var e=this,i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=i.autoZoom,s=void 0===n||n,o=i.transitions,r=void 0===o||o;this.$nextTick((function(){e.imageLoaded?(e.transitionsActive||(r&&e.enableTransitions(),e.coordinates=e.applyTransform(t),s&&e.runAutoZoom(\"setCoordinates\"),r&&e.debouncedDisableTransitions()),e.onChange()):e.delayedTransforms=t}))},refresh:function(){var t=this,e=this.$refs.image;if(this.src&&e)return this.initialized?this.updateVisibleArea().then((function(){t.onChange()})):this.resetVisibleArea().then((function(){t.onChange()}))},reset:function(){var t=this;return this.resetVisibleArea().then((function(){t.onChange(!1)}))},awaitRender:function(t){var e=this;this.awaiting||(this.awaiting=!0,this.$nextTick((function(){t(),e.awaiting=!1})))},prepareResult:function(t){return this.roundResult?function(t){var e=t.coordinates,i=t.sizeRestrictions,n=t.positionRestrictions,s={width:Math.round(e.width),height:Math.round(e.height),left:Math.round(e.left),top:Math.round(e.top)};return s.width>i.maxWidth?s.width=Math.floor(e.width):s.width<i.minWidth&&(s.width=Math.ceil(e.width)),s.height>i.maxHeight?s.height=Math.floor(e.height):s.height<i.minHeight&&(s.height=Math.ceil(e.height)),vt(s,n)}(g(g({},this.getPublicProperties()),{},{positionRestrictions:jt(this.positionRestrictions,this.visibleArea),coordinates:t})):t},processAutoZoom:function(t,e,i,n){var s=this.autoZoomAlgorithm;s||(s=this.stencilSize?Ct:this.autoZoom?Et:Wt);var o=s({event:{type:t,params:n},visibleArea:e,coordinates:i,boundaries:this.boundaries,aspectRatio:this.getAspectRatio(),positionRestrictions:this.positionRestrictions,getAreaRestrictions:this.getAreaRestrictions,sizeRestrictions:this.sizeRestrictions,stencilSize:this.getStencilSize()});return g(g({},o),{},{changed:!tt(o.visibleArea,e)||!tt(o.coordinates,i)})},runAutoZoom:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},i=e.transitions,n=void 0!==i&&i,s=v(e,pe),o=this.processAutoZoom(t,this.visibleArea,this.coordinates,s),r=o.visibleArea,a=o.coordinates,h=o.changed;n&&h&&this.enableTransitions(),this.visibleArea=r,this.coordinates=a,n&&h&&this.debouncedDisableTransitions()},normalizeEvent:function(t){return function(t){var e=t.event,i=t.visibleArea,n=t.coefficient;if(\"manipulateImage\"===e.type)return C(C({},e),{move:{left:e.move&&e.move.left?n*e.move.left:0,top:e.move&&e.move.top?n*e.move.top:0},scale:{factor:e.scale&&e.scale.factor?e.scale.factor:1,center:e.scale&&e.scale.center?{left:e.scale.center.left*n+i.left,top:e.scale.center.top*n+i.top}:null}});if(\"resize\"===e.type){var s=C(C({},e),{directions:C({},e.directions)});return V.forEach((function(t){s.directions[t]*=n})),s}if(\"move\"===e.type){var o=C(C({},e),{directions:C({},e.directions)});return Q.forEach((function(t){o.directions[t]*=n})),o}return e}(g(g({},this.getPublicProperties()),{},{event:t}))},getCanvas:function(){if(this.$refs.canvas){var t=this.$refs.canvas,e=this.$refs.image,i=0!==this.imageTransforms.rotate||this.imageTransforms.flip.horizontal||this.imageTransforms.flip.vertical?function(t,e,i){var n=i.rotate,s=i.flip,o={width:e.naturalWidth,height:e.naturalHeight},r=pt(o,n),a=t.getContext(\"2d\");t.height=r.height,t.width=r.width,a.save();var h=gt(nt(C({left:0,top:0},o)),n);return a.translate(-(h.left-r.width/2),-(h.top-r.height/2)),a.rotate(n*Math.PI/180),a.translate(s.horizontal?o.width:0,s.vertical?o.height:0),a.scale(s.horizontal?-1:1,s.vertical?-1:1),a.drawImage(e,0,0,o.width,o.height),a.restore(),t}(this.$refs.sourceCanvas,e,this.imageTransforms):e,n=g({minWidth:0,minHeight:0,maxWidth:1/0,maxHeight:1/0,maxArea:this.maxCanvasSize,imageSmoothingEnabled:!0,imageSmoothingQuality:\"high\",fillColor:\"transparent\"},this.canvas),s=function(t){return t.find((function(t){return e=t,!Number.isNaN(parseFloat(e))&&isFinite(e);var e}))},o=Mt({sizeRestrictions:{minWidth:s([n.width,n.minWidth])||0,minHeight:s([n.height,n.minHeight])||0,maxWidth:s([n.width,n.maxWidth])||1/0,maxHeight:s([n.height,n.maxHeight])||1/0},width:this.coordinates.width,height:this.coordinates.height,aspectRatio:{minimum:this.coordinates.width/this.coordinates.height,maximum:this.coordinates.width/this.coordinates.height}});if(n.maxArea&&o.width*o.height>n.maxArea){var r=Math.sqrt(n.maxArea/(o.width*o.height));o={width:Math.round(r*o.width),height:Math.round(r*o.height)}}return function(t,e,i,n,s){t.width=n?n.width:i.width,t.height=n?n.height:i.height;var o=t.getContext(\"2d\");o.clearRect(0,0,t.width,t.height),s&&(s.imageSmoothingEnabled&&(o.imageSmoothingEnabled=s.imageSmoothingEnabled),s.imageSmoothingQuality&&(o.imageSmoothingQuality=s.imageSmoothingQuality),s.fillColor&&(o.fillStyle=s.fillColor,o.fillRect(0,0,t.width,t.height),o.save()));var r=i.left<0?-i.left:0,a=i.top<0?-i.top:0;o.drawImage(e,i.left+r,i.top+a,i.width,i.height,r*(t.width/i.width),a*(t.height/i.height),t.width,t.height)}(t,i,this.coordinates,o,n),t}},update:function(){this.$emit(\"change\",this.getResult())},applyTransform:function(t){var e=arguments.length>1&&void 0!==arguments[1]&&arguments[1],i=this.visibleArea&&e?wt(this.sizeRestrictions,this.visibleArea):this.sizeRestrictions,n=this.visibleArea&&e?jt(this.positionRestrictions,this.visibleArea):this.positionRestrictions;return xt({transform:t,coordinates:this.coordinates,imageSize:this.imageSize,sizeRestrictions:i,positionRestrictions:n,aspectRatio:this.getAspectRatio(),visibleArea:this.visibleArea})},resetCoordinates:function(){var t=this;if(this.$refs.image){this.$refs.cropper,this.$refs.image;var e=this.defaultSize;e||(e=this.stencilSize?Dt:Ot);var i=this.sizeRestrictions;i.minWidth,i.minHeight,i.maxWidth,i.maxHeight;var n=O(e)?e({boundaries:this.boundaries,imageSize:this.imageSize,aspectRatio:this.getAspectRatio(),sizeRestrictions:this.sizeRestrictions,stencilSize:this.getStencilSize(),visibleArea:this.visibleArea}):e,s=this.defaultPosition||Tt,o=[n,function(e){var i=e.coordinates;return g({},O(s)?s({coordinates:i,imageSize:t.imageSize,visibleArea:t.visibleArea}):t.defaultPosition)}];this.delayedTransforms&&o.push.apply(o,b(Array.isArray(this.delayedTransforms)?this.delayedTransforms:[this.delayedTransforms])),this.coordinates=this.applyTransform(o,!0),this.delayedTransforms=null}},clearImage:function(){var t=this;this.imageLoaded=!1,setTimeout((function(){var e=t.$refs.stretcher;e&&(e.style.height=\"auto\",e.style.width=\"auto\"),t.coordinates=t.defaultCoordinates(),t.boundaries={width:0,height:0}}),this.transitionTime)},enableTransitions:function(){this.transitions&&(this.transitionsActive=!0)},disableTransitions:function(){this.transitionsActive=!1},updateBoundaries:function(){var t=this,e=this.$refs.stretcher,i=this.$refs.cropper;return this.initStretcher({cropper:i,stretcher:e,imageSize:this.imageSize}),this.$nextTick().then((function(){var e={cropper:i,imageSize:t.imageSize};if(O(t.defaultBoundaries)?t.boundaries=t.defaultBoundaries(e):\"fit\"===t.defaultBoundaries?t.boundaries=function(t){var e=t.cropper,i=t.imageSize,n=e.clientHeight,s=e.clientWidth,o=n,r=i.width*n/i.height;return r>s&&(r=s,o=i.height*s/i.width),{width:r,height:o}}(e):t.boundaries=function(t){var e=t.cropper;return{width:e.clientWidth,height:e.clientHeight}}(e),!t.boundaries.width||!t.boundaries.height)throw new Error(\"It's impossible to fit the cropper in the current container\")}))},resetVisibleArea:function(){var t=this;return this.appliedImageTransforms=g(g({},this.defaultImageTransforms),{},{flip:g({},this.defaultImageTransforms.flip)}),this.updateBoundaries().then((function(){\"visible-area\"!==t.priority&&(t.visibleArea=null,t.resetCoordinates());var e,i,n,s,o,r,a=t.defaultVisibleArea||Ht;t.visibleArea=O(a)?a({imageSize:t.imageSize,boundaries:t.boundaries,coordinates:\"visible-area\"!==t.priority?t.coordinates:null,getAreaRestrictions:t.getAreaRestrictions,stencilSize:t.getStencilSize()}):t.defaultVisibleArea,t.visibleArea=(e={visibleArea:t.visibleArea,boundaries:t.boundaries,getAreaRestrictions:t.getAreaRestrictions},i=e.visibleArea,n=e.boundaries,s=e.getAreaRestrictions,o=C({},i),r=ct(n),o.width/o.height!==r&&(o.height=o.width/r),vt(o,s({visibleArea:o,type:\"move\"}))),\"visible-area\"===t.priority?t.resetCoordinates():t.coordinates=t.fitCoordinates({visibleArea:t.visibleArea,coordinates:t.coordinates,aspectRatio:t.getAspectRatio(),positionRestrictions:t.positionRestrictions,sizeRestrictions:t.sizeRestrictions}),t.runAutoZoom(\"resetVisibleArea\")})).catch((function(){t.visibleArea=null}))},updateVisibleArea:function(){var t=this;return this.updateBoundaries().then((function(){t.visibleArea=t.fitVisibleArea({imageSize:t.imageSize,boundaries:t.boundaries,visibleArea:t.visibleArea,coordinates:t.coordinates,getAreaRestrictions:t.getAreaRestrictions}),t.coordinates=t.fitCoordinates({visibleArea:t.visibleArea,coordinates:t.coordinates,aspectRatio:t.getAspectRatio(),positionRestrictions:t.positionRestrictions,sizeRestrictions:t.sizeRestrictions}),t.runAutoZoom(\"updateVisibleArea\")})).catch((function(){t.visibleArea=null}))},onChange:function(){var t=!(arguments.length>0&&void 0!==arguments[0])||arguments[0];t&&this.debounce?this.debouncedUpdate():this.update()},onChangeImage:function(){var t,e=this;if(this.imageLoaded=!1,this.delayedTransforms=null,this.src){if(function(t){if(T(t))return!1;var e=window.location,i=/(\\w+:)?(?:\\/\\/)([\\w.-]+)?(?::(\\d+))?\\/?/.exec(t)||[],n={protocol:i[1]||\"\",host:i[2]||\"\",port:i[3]||\"\"},s=function(t){return t.port||(\"http\"===(t.protocol||e.protocol)?80:433)};return!(!n.protocol&&!n.host&&!n.port||Boolean(n.protocol&&n.protocol==e.protocol&&n.host&&n.host==e.host&&n.host&&s(n)==s(e)))}(this.src)){var i=D(this.crossOrigin)?this.canvas:this.crossOrigin;!0===i&&(i=\"anonymous\"),this.imageAttributes.crossOrigin=i||null}if(this.checkOrientation){var n=(t=this.src,new Promise((function(e){Jt(t).then((function(i){var n=ee(i);e(i?{source:t,arrayBuffer:i,orientation:n}:{source:t,arrayBuffer:null,orientation:null})})).catch((function(i){console.warn(i),e({source:t,arrayBuffer:null,orientation:null})}))})));setTimeout((function(){n.then(e.onParseImage)}),this.transitionTime)}else setTimeout((function(){e.onParseImage({source:e.src})}),this.transitionTime)}else this.clearImage()},onFailLoadImage:function(){this.imageAttributes.src&&(this.clearImage(),this.$emit(\"error\"))},onSuccessLoadImage:function(){var t=this,e=this.$refs.image;e&&!this.imageLoaded&&(this.imageAttributes.height=e.naturalHeight,this.imageAttributes.width=e.naturalWidth,this.imageLoaded=!0,this.resetVisibleArea().then((function(){t.$emit(\"ready\"),t.onChange(!1)})))},onParseImage:function(t){var e=this,i=t.source,n=t.arrayBuffer,s=t.orientation;this.imageAttributes.revoke&&this.imageAttributes.src&&URL.revokeObjectURL(this.imageAttributes.src),this.imageAttributes.revoke=!1,n&&s&&s>1?W(i)||!T(i)?(this.imageAttributes.src=URL.createObjectURL(new Blob([n])),this.imageAttributes.revoke=!0):this.imageAttributes.src=function(t){for(var e=[],i=new Uint8Array(t);i.length>0;){var n=i.subarray(0,8192);e.push(String.fromCharCode.apply(null,Array.from?Array.from(n):n.slice())),i=i.subarray(8192)}return\"data:image/jpeg;base64,\"+btoa(e.join(\"\"))}(n):this.imageAttributes.src=i,O(this.defaultTransforms)?this.appliedImageTransforms=Kt(this.defaultTransforms()):H(this.defaultTransforms)?this.appliedImageTransforms=Kt(this.defaultTransforms):this.appliedImageTransforms=function(t){var e=Kt({});if(t)switch(t){case 2:e.flip.horizontal=!0;break;case 3:e.rotate=-180;break;case 4:e.flip.vertical=!0;break;case 5:e.rotate=90,e.flip.vertical=!0;break;case 6:e.rotate=90;break;case 7:e.rotate=90,e.flip.horizontal=!0;break;case 8:e.rotate=-90}return e}(s),this.defaultImageTransforms=g(g({},this.appliedImageTransforms),{},{flip:g({},this.appliedImageTransforms.flip)}),this.$nextTick((function(){var t=e.$refs.image;t&&t.complete&&(!function(t){return Boolean(t.naturalWidth)}(t)?e.onFailLoadImage():e.onSuccessLoadImage())}))},onResizeEnd:function(){this.runAutoZoom(\"resize\",{transitions:!0})},onMoveEnd:function(){this.runAutoZoom(\"move\",{transitions:!0})},onMove:function(t){var e=this;this.transitionsOptions.enabled||this.awaitRender((function(){e.coordinates=e.moveAlgorithm(g(g({},e.getPublicProperties()),{},{positionRestrictions:jt(e.positionRestrictions,e.visibleArea),coordinates:e.coordinates,event:e.normalizeEvent(t)})),e.onChange()}))},onResize:function(t){var e=this;this.transitionsOptions.enabled||this.stencilSize&&!this.autoZoom||this.awaitRender((function(){var i=e.sizeRestrictions,n=Math.min(e.coordinates.width,e.coordinates.height,20*e.coefficient);e.coordinates=e.resizeAlgorithm(g(g({},e.getPublicProperties()),{},{positionRestrictions:jt(e.positionRestrictions,e.visibleArea),sizeRestrictions:{maxWidth:Math.min(i.maxWidth,e.visibleArea.width),maxHeight:Math.min(i.maxHeight,e.visibleArea.height),minWidth:Math.max(i.minWidth,n),minHeight:Math.max(i.minHeight,n)},event:e.normalizeEvent(t)})),e.onChange(),e.ticking=!1}))},onManipulateImage:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(!this.transitionsOptions.enabled){var i=e.transitions,n=void 0!==i&&i,s=e.normalize,o=void 0===s||s;n&&this.enableTransitions();var r=Lt(g(g({},this.getPublicProperties()),{},{event:o?this.normalizeEvent(t):t,getAreaRestrictions:this.getAreaRestrictions,imageRestriction:this.imageRestriction,adjustStencil:!this.stencilSize&&this.settings.resizeImage.adjustStencil})),a=r.visibleArea,h=r.coordinates;this.visibleArea=a,this.coordinates=h,this.runAutoZoom(\"manipulateImage\"),this.onChange(),n&&this.debouncedDisableTransitions()}},onPropsChange:function(){this.coordinates=this.applyTransform(this.coordinates,!0),this.onChange(!1)},getAreaRestrictions:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=t.visibleArea,i=t.type,n=void 0===i?\"move\":i;return this.areaRestrictionsAlgorithm({boundaries:this.boundaries,imageSize:this.imageSize,imageRestriction:this.imageRestriction,visibleArea:e,type:n})},getAspectRatio:function(t){var e,i,n=this.stencilProps,s=n.aspectRatio,o=n.minAspectRatio,r=n.maxAspectRatio;if(this.$refs.stencil&&this.$refs.stencil.aspectRatios){var a=this.$refs.stencil.aspectRatios();e=a.minimum,i=a.maximum}if(D(e)&&(e=D(s)?o:s),D(i)&&(i=D(s)?r:s),!t&&(D(e)||D(i))){var h=this.getStencilSize(),c=h?ct(h):null;D(e)&&(e=P(c)?c:void 0),D(i)&&(i=P(c)?c:void 0)}return{minimum:e,maximum:i}},getStencilSize:function(){if(this.stencilSize)return t={currentStencilSize:{width:this.stencilCoordinates.width,height:this.stencilCoordinates.height},stencilSize:this.stencilSize,boundaries:this.boundaries,coefficient:this.coefficient,coordinates:this.coordinates,aspectRatio:this.getAspectRatio(!0)},e=t.boundaries,i=t.stencilSize,n=t.aspectRatio,dt(ct(s=O(i)?i({boundaries:e,aspectRatio:n}):i),n)&&(s=Mt({sizeRestrictions:{maxWidth:e.width,maxHeight:e.height,minWidth:0,minHeight:0},width:s.width,height:s.height,aspectRatio:{minimum:n.minimum,maximum:n.maximum}})),(s.width>e.width||s.height>e.height)&&(s=Mt({sizeRestrictions:{maxWidth:e.width,maxHeight:e.height,minWidth:0,minHeight:0},width:s.width,height:s.height,aspectRatio:{minimum:ct(s),maximum:ct(s)}})),s;var t,e,i,n,s},getPublicProperties:function(){return{coefficient:this.coefficient,visibleArea:this.visibleArea,coordinates:this.coordinates,boundaries:this.boundaries,sizeRestrictions:this.sizeRestrictions,positionRestrictions:this.positionRestrictions,aspectRatio:this.getAspectRatio(),imageRestriction:this.imageRestriction}},defaultCoordinates:function(){return g({},J)},flip:function(t,e){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},n=i.transitions,s=void 0===n||n;if(!this.transitionsActive){s&&this.enableTransitions();var o=g({},this.imageTransforms.flip),r=$t({flip:{horizontal:t?!o.horizontal:o.horizontal,vertical:e?!o.vertical:o.vertical},previousFlip:o,rotate:this.imageTransforms.rotate,visibleArea:this.visibleArea,coordinates:this.coordinates,imageSize:this.imageSize,positionRestrictions:this.positionRestrictions,sizeRestrictions:this.sizeRestrictions,getAreaRestrictions:this.getAreaRestrictions,aspectRatio:this.getAspectRatio()}),a=r.visibleArea,h=r.coordinates;t&&(this.appliedImageTransforms.flip.horizontal=!this.appliedImageTransforms.flip.horizontal),e&&(this.appliedImageTransforms.flip.vertical=!this.appliedImageTransforms.flip.vertical),this.visibleArea=a,this.coordinates=h,this.onChange(),s&&this.debouncedDisableTransitions()}},rotate:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},i=e.transitions,n=void 0===i||i;if(!this.transitionsActive){n&&this.enableTransitions();var s=g({},this.imageSize);this.appliedImageTransforms.rotate+=t;var o=Pt({visibleArea:this.visibleArea,coordinates:this.coordinates,previousImageSize:s,imageSize:this.imageSize,angle:t,positionRestrictions:this.positionRestrictions,sizeRestrictions:this.sizeRestrictions,getAreaRestrictions:this.getAreaRestrictions,aspectRatio:this.getAspectRatio()}),r=o.visibleArea,a=o.coordinates,h=this.processAutoZoom(\"rotateImage\",r,a);r=h.visibleArea,a=h.coordinates,this.visibleArea=r,this.coordinates=a,this.onChange(),n&&this.debouncedDisableTransitions()}}},emits:[\"change\",\"error\",\"ready\"]},ve={key:0,ref:\"canvas\",style:{display:\"none\"}},be={key:1,ref:\"sourceCanvas\",style:{display:\"none\"}};fe.render=function(i,n,r,a,p,g){return t(),e(\"div\",{ref:\"cropper\",class:g.classes.cropper},[s(\"div\",{ref:\"stretcher\",class:g.classes.stretcher},null,2),s(\"div\",{class:g.classes.boundaries,style:g.boundariesStyle},[(t(),e(h(r.backgroundWrapperComponent),{class:g.classes.cropperWrapper,\"wheel-resize\":g.settings.resizeImage.wheel,\"touch-resize\":g.settings.resizeImage.touch,\"touch-move\":g.settings.moveImage.touch,\"mouse-move\":g.settings.moveImage.mouse,onMove:g.onManipulateImage,onResize:g.onManipulateImage},{default:o((function(){return[s(\"div\",{class:g.classes.background,style:g.boundariesStyle},null,6),s(\"div\",{class:g.classes.imageWrapper},[s(\"img\",{ref:\"image\",crossorigin:p.imageAttributes.crossOrigin,src:p.imageAttributes.src,class:g.classes.image,style:g.imageStyle,onMousedown:n[1]||(n[1]=d((function(){}),[\"prevent\"]))},null,46,[\"crossorigin\",\"src\"])],2),s(\"div\",{class:g.classes.foreground,style:g.boundariesStyle},null,6),c((t(),e(h(r.stencilComponent),u({ref:\"stencil\",image:g.image,coordinates:p.coordinates,\"stencil-coordinates\":g.stencilCoordinates,transitions:g.transitionsOptions},r.stencilProps,{onResize:g.onResize,onResizeEnd:g.onResizeEnd,onMove:g.onMove,onMoveEnd:g.onMoveEnd}),null,16,[\"image\",\"coordinates\",\"stencil-coordinates\",\"transitions\",\"onResize\",\"onResizeEnd\",\"onMove\",\"onMoveEnd\"])),[[l,p.imageLoaded]]),r.canvas?(t(),e(\"canvas\",ve,null,512)):m(\"\",!0),r.canvas?(t(),e(\"canvas\",be,null,512)):m(\"\",!0)]})),_:1},8,[\"class\",\"wheel-resize\",\"touch-resize\",\"touch-move\",\"mouse-move\",\"onMove\",\"onResize\"]))],6)],2)};export{re as BackgroundWrapper,_t as BoundingBox,me as CircleStencil,fe as Cropper,k as DragEvent,Qt as DraggableArea,F as DraggableElement,N as HandlerWrapper,q as LineWrapper,Y as MoveEvent,he as Preview,ne as PreviewResult,ue as RectangleStencil,X as ResizeEvent,kt as SimpleHandler,Nt as SimpleLine,ce as StencilPreview,oe as TransformableImage};\n","<script setup lang=\"ts\">\nimport { useI18n } from \"../../composables/useI18n\";\nimport { useMediaCategories } from \"../../composables/useMediaCategories\";\nimport {\n ASPECT_RATIO_VALUES,\n calculateOutputDimensions,\n canvasToFile,\n getExportSettings,\n resizeCanvas,\n type AspectRatioPreset,\n} from \"../../composables/useImageCrop\";\nimport { POPOVER_TARGET_KEY } from \"../../keys\";\nimport type { MediaItem } from \"../../types\";\nimport { computed, inject, ref, watch, type Ref } from \"vue\";\nimport { Cropper, type CropperResult } from \"vue-advanced-cropper\";\nimport \"vue-advanced-cropper/dist/style.css\";\n\nexport interface CropData {\n file: File;\n}\n\nconst props = defineProps<{\n visible: boolean;\n item: MediaItem | null;\n}>();\n\nconst emit = defineEmits<{\n (\n e: \"save\",\n id: string,\n filename: string,\n altText?: string,\n cropData?: CropData,\n ): void;\n (e: \"close\"): void;\n}>();\n\nconst { t } = useI18n();\nconst tplUiTheme = inject<Ref<\"light\" | \"dark\">>(\"tplUiTheme\");\nconst popoverTarget = inject(POPOVER_TARGET_KEY, ref<HTMLElement | null>(null));\nconst mediaT = t.mediaLibrary as Record<string, string>;\n\nconst { isImageMimeType } = useMediaCategories();\n\nconst filenameValue = ref(\"\");\nconst altTextValue = ref(\"\");\n\nconst cropperRef = ref<InstanceType<typeof Cropper> | null>(null);\nconst aspectRatio = ref<AspectRatioPreset>(\"free\");\nconst maxWidth = ref<number | undefined>(undefined);\nconst maxHeight = ref<number | undefined>(undefined);\nconst maxWidthInput = ref(\"\");\nconst maxHeightInput = ref(\"\");\nconst originalAspectRatio = ref<number | undefined>(undefined);\nconst cropCoordinates = ref<{ width: number; height: number } | null>(null);\nconst imageLoaded = ref(false);\nconst isSaving = ref(false);\nconst hasModifiedCrop = ref(false);\n\nconst isCroppableImage = computed(() => {\n if (!props.item) {\n return false;\n }\n\n const croppableMimeTypes = [\n \"image/jpeg\",\n \"image/png\",\n \"image/webp\",\n \"image/gif\",\n ];\n\n return croppableMimeTypes.includes(props.item.mime_type);\n});\n\nconst aspectRatioValue = computed(() => {\n if (aspectRatio.value === \"original\") {\n return originalAspectRatio.value;\n }\n\n return ASPECT_RATIO_VALUES[aspectRatio.value];\n});\n\nconst outputDimensions = computed(() => {\n if (!cropCoordinates.value) {\n return null;\n }\n\n return calculateOutputDimensions(\n cropCoordinates.value.width,\n cropCoordinates.value.height,\n maxWidth.value,\n maxHeight.value,\n );\n});\n\nwatch(\n () => props.visible,\n (visible) => {\n if (visible && props.item) {\n filenameValue.value = props.item.filename;\n altTextValue.value = props.item.alt_text || \"\";\n aspectRatio.value = \"free\";\n maxWidth.value = undefined;\n maxHeight.value = undefined;\n maxWidthInput.value = \"\";\n maxHeightInput.value = \"\";\n originalAspectRatio.value = undefined;\n cropCoordinates.value = null;\n imageLoaded.value = false;\n hasModifiedCrop.value = false;\n\n if (props.item.width && props.item.height) {\n originalAspectRatio.value = props.item.width / props.item.height;\n }\n }\n },\n);\n\nfunction handleCropChange(result: CropperResult): void {\n if (result.coordinates) {\n cropCoordinates.value = {\n width: Math.round(result.coordinates.width),\n height: Math.round(result.coordinates.height),\n };\n hasModifiedCrop.value = true;\n }\n}\n\nfunction handleImageReady(): void {\n imageLoaded.value = true;\n\n if (!originalAspectRatio.value && props.item?.width && props.item?.height) {\n originalAspectRatio.value = props.item.width / props.item.height;\n }\n}\n\nfunction handleMaxWidthInput(event: Event): void {\n const value = (event.target as HTMLInputElement).value;\n maxWidthInput.value = value;\n maxWidth.value = value ? parseInt(value, 10) || undefined : undefined;\n}\n\nfunction handleMaxHeightInput(event: Event): void {\n const value = (event.target as HTMLInputElement).value;\n maxHeightInput.value = value;\n maxHeight.value = value ? parseInt(value, 10) || undefined : undefined;\n}\n\nasync function handleSave(): Promise<void> {\n const trimmedFilename = filenameValue.value.trim();\n if (!trimmedFilename || !props.item || isSaving.value) {\n return;\n }\n\n const isImage = isImageMimeType(props.item.mime_type);\n let cropData: CropData | undefined;\n\n if (isCroppableImage.value && cropperRef.value && hasModifiedCrop.value) {\n isSaving.value = true;\n try {\n const { canvas } = cropperRef.value.getResult();\n if (canvas) {\n const resizedCanvas = resizeCanvas(\n canvas,\n maxWidth.value,\n maxHeight.value,\n );\n const settings = getExportSettings(props.item.mime_type);\n const file = await canvasToFile(\n resizedCanvas,\n props.item.filename,\n settings,\n );\n cropData = { file };\n }\n } catch {\n isSaving.value = false;\n return;\n }\n isSaving.value = false;\n }\n\n emit(\n \"save\",\n props.item.id,\n trimmedFilename,\n isImage ? altTextValue.value : undefined,\n cropData,\n );\n emit(\"close\");\n}\n\nfunction handleKeydown(event: KeyboardEvent): void {\n if (event.key === \"Enter\" && !isSaving.value) {\n event.preventDefault();\n handleSave();\n }\n if (event.key === \"Escape\") {\n emit(\"close\");\n }\n}\n</script>\n\n<template>\n <Teleport :to=\"popoverTarget || 'body'\">\n <Transition\n enter-active-class=\"tpl:transition tpl:ease-out tpl:duration-150\"\n enter-from-class=\"tpl:opacity-0\"\n enter-to-class=\"tpl:opacity-100\"\n leave-active-class=\"tpl:transition tpl:ease-in tpl:duration-100\"\n leave-from-class=\"tpl:opacity-100\"\n leave-to-class=\"tpl:opacity-0\"\n >\n <div\n v-if=\"visible && item\"\n :data-tpl-theme=\"tplUiTheme\"\n class=\"tpl tpl:fixed tpl:inset-0 tpl:z-[10000] tpl:flex tpl:items-center tpl:justify-center\"\n style=\"background-color: var(--tpl-overlay)\"\n @click.self=\"emit('close')\"\n @keydown=\"handleKeydown\"\n >\n <div\n class=\"tpl:mx-4 tpl:flex tpl:max-h-[90vh] tpl:w-full tpl:flex-col tpl:overflow-hidden tpl:rounded-lg tpl:shadow-xl\"\n :class=\"isCroppableImage ? 'tpl:max-w-2xl' : 'tpl:max-w-sm'\"\n style=\"background-color: var(--tpl-bg-elevated)\"\n >\n <!-- Header -->\n <div class=\"tpl:shrink-0 tpl:p-5 tpl:pb-4\">\n <h3\n class=\"tpl:text-sm tpl:font-semibold\"\n style=\"color: var(--tpl-text)\"\n >\n {{ t.mediaLibrary.editFile }}\n </h3>\n </div>\n\n <!-- Scrollable content -->\n <div class=\"tpl:min-h-0 tpl:flex-1 tpl:overflow-y-auto tpl:px-5\">\n <!-- Image Cropper (for images only) -->\n <div v-if=\"isCroppableImage\" class=\"tpl:mb-4\">\n <!-- Cropper -->\n <div\n class=\"tpl:relative tpl:mb-3 tpl:overflow-hidden tpl:rounded-md tpl:border\"\n style=\"\n border-color: var(--tpl-border);\n height: 300px;\n background-color: var(--tpl-bg);\n \"\n >\n <Cropper\n ref=\"cropperRef\"\n :src=\"item.url\"\n :stencil-props=\"{\n aspectRatio: aspectRatioValue,\n }\"\n class=\"tpl:h-full tpl:w-full\"\n background-class=\"tpl-cropper-background\"\n @change=\"handleCropChange\"\n @ready=\"handleImageReady\"\n />\n </div>\n\n <!-- Crop controls -->\n <div class=\"tpl:space-y-3\">\n <!-- Aspect ratio -->\n <div>\n <label\n class=\"tpl:mb-1.5 tpl:block tpl:text-xs tpl:font-medium\"\n style=\"color: var(--tpl-text-muted)\"\n >\n {{ t.mediaLibrary.cropAspectRatio }}\n </label>\n <div class=\"tpl:flex tpl:flex-wrap tpl:gap-1.5\">\n <button\n v-for=\"preset in [\n 'free',\n 'square',\n 'landscape43',\n 'landscape169',\n 'original',\n ] as const\"\n :key=\"preset\"\n type=\"button\"\n class=\"tpl:cursor-pointer tpl:rounded-md tpl:border tpl:px-2.5 tpl:py-1 tpl:text-xs tpl:font-medium tpl:transition-all tpl:duration-150\"\n :style=\"{\n borderColor:\n aspectRatio === preset\n ? 'var(--tpl-primary)'\n : 'var(--tpl-border)',\n backgroundColor:\n aspectRatio === preset\n ? 'var(--tpl-primary-light)'\n : 'var(--tpl-bg)',\n color:\n aspectRatio === preset\n ? 'var(--tpl-primary)'\n : 'var(--tpl-text)',\n }\"\n @click=\"aspectRatio = preset\"\n >\n {{\n mediaT[\n `crop${preset.charAt(0).toUpperCase()}${preset.slice(1)}`\n ]\n }}\n </button>\n </div>\n </div>\n\n <!-- Max dimensions -->\n <div class=\"tpl:flex tpl:gap-3\">\n <div class=\"tpl:flex-1\">\n <label\n class=\"tpl:mb-1 tpl:block tpl:text-xs tpl:font-medium\"\n style=\"color: var(--tpl-text-muted)\"\n >\n {{ t.mediaLibrary.cropMaxWidth }}\n <span\n class=\"tpl:font-normal\"\n style=\"color: var(--tpl-text-dim)\"\n >\n {{ t.mediaLibrary.cropOptional }}\n </span>\n </label>\n <div class=\"tpl:relative\">\n <input\n :value=\"maxWidthInput\"\n type=\"number\"\n min=\"1\"\n class=\"tpl:w-full tpl:rounded-md tpl:border tpl:py-1.5 tpl:pr-8 tpl:pl-3 tpl:text-xs tpl:outline-none\"\n style=\"\n border-color: var(--tpl-border);\n background-color: var(--tpl-bg);\n color: var(--tpl-text);\n \"\n :placeholder=\"cropCoordinates?.width?.toString() || ''\"\n @input=\"handleMaxWidthInput\"\n />\n <span\n class=\"tpl:absolute tpl:top-1/2 tpl:right-2.5 tpl:-translate-y-1/2 tpl:text-xs\"\n style=\"color: var(--tpl-text-dim)\"\n >\n {{ t.mediaLibrary.cropPixels }}\n </span>\n </div>\n </div>\n <div class=\"tpl:flex-1\">\n <label\n class=\"tpl:mb-1 tpl:block tpl:text-xs tpl:font-medium\"\n style=\"color: var(--tpl-text-muted)\"\n >\n {{ t.mediaLibrary.cropMaxHeight }}\n <span\n class=\"tpl:font-normal\"\n style=\"color: var(--tpl-text-dim)\"\n >\n {{ t.mediaLibrary.cropOptional }}\n </span>\n </label>\n <div class=\"tpl:relative\">\n <input\n :value=\"maxHeightInput\"\n type=\"number\"\n min=\"1\"\n class=\"tpl:w-full tpl:rounded-md tpl:border tpl:py-1.5 tpl:pr-8 tpl:pl-3 tpl:text-xs tpl:outline-none\"\n style=\"\n border-color: var(--tpl-border);\n background-color: var(--tpl-bg);\n color: var(--tpl-text);\n \"\n :placeholder=\"cropCoordinates?.height?.toString() || ''\"\n @input=\"handleMaxHeightInput\"\n />\n <span\n class=\"tpl:absolute tpl:top-1/2 tpl:right-2.5 tpl:-translate-y-1/2 tpl:text-xs\"\n style=\"color: var(--tpl-text-dim)\"\n >\n {{ t.mediaLibrary.cropPixels }}\n </span>\n </div>\n </div>\n </div>\n\n <!-- Output dimensions -->\n <div\n v-if=\"outputDimensions\"\n class=\"tpl:flex tpl:items-center tpl:gap-1 tpl:text-xs\"\n style=\"color: var(--tpl-text-muted)\"\n >\n <span> {{ t.mediaLibrary.cropOutputSize }}: </span>\n <span class=\"tpl:font-medium\" style=\"color: var(--tpl-text)\">\n {{ outputDimensions.width }} x\n {{ outputDimensions.height }}\n {{ t.mediaLibrary.cropPixels }}\n </span>\n </div>\n </div>\n </div>\n\n <!-- Filename -->\n <div class=\"tpl:mb-3\">\n <label\n class=\"tpl:mb-1 tpl:block tpl:text-xs tpl:font-medium\"\n style=\"color: var(--tpl-text-muted)\"\n >\n {{ t.mediaLibrary.fileName }}\n </label>\n <input\n v-model=\"filenameValue\"\n type=\"text\"\n class=\"tpl:w-full tpl:rounded-md tpl:border tpl:px-3 tpl:py-1.5 tpl:text-xs tpl:outline-none\"\n style=\"\n border-color: var(--tpl-border);\n background-color: var(--tpl-bg);\n color: var(--tpl-text);\n \"\n :autofocus=\"!isCroppableImage\"\n />\n </div>\n\n <!-- Alt Text (images only) -->\n <div v-if=\"isImageMimeType(item.mime_type)\" class=\"tpl:mb-4\">\n <label\n class=\"tpl:mb-1 tpl:block tpl:text-xs tpl:font-medium\"\n style=\"color: var(--tpl-text-muted)\"\n >\n {{ t.mediaLibrary.altText }}\n </label>\n <input\n v-model=\"altTextValue\"\n type=\"text\"\n class=\"tpl:w-full tpl:rounded-md tpl:border tpl:px-3 tpl:py-1.5 tpl:text-xs tpl:outline-none\"\n style=\"\n border-color: var(--tpl-border);\n background-color: var(--tpl-bg);\n color: var(--tpl-text);\n \"\n :placeholder=\"t.mediaLibrary.altTextPlaceholder\"\n />\n </div>\n </div>\n\n <!-- Actions -->\n <div\n class=\"tpl:flex tpl:shrink-0 tpl:justify-end tpl:gap-2 tpl:p-5 tpl:pt-4\"\n >\n <button\n class=\"tpl:cursor-pointer tpl:rounded-md tpl:border tpl:px-3 tpl:py-1.5 tpl:text-xs tpl:font-medium tpl:transition-all tpl:duration-150\"\n style=\"\n border-color: var(--tpl-border);\n color: var(--tpl-text);\n background-color: var(--tpl-bg);\n \"\n @click=\"emit('close')\"\n >\n {{ t.mediaLibrary.cancel }}\n </button>\n <button\n class=\"tpl:cursor-pointer tpl:rounded-md tpl:px-3 tpl:py-1.5 tpl:text-xs tpl:font-medium tpl:text-white tpl:transition-all tpl:duration-150 tpl:disabled:cursor-not-allowed tpl:disabled:opacity-50\"\n style=\"\n background: linear-gradient(\n 135deg,\n var(--tpl-primary),\n var(--tpl-primary-hover)\n );\n \"\n :disabled=\"isSaving\"\n @click=\"handleSave\"\n >\n {{\n isSaving ? t.mediaLibrary.saving : t.mediaLibrary.saveChanges\n }}\n </button>\n </div>\n </div>\n </div>\n </Transition>\n </Teleport>\n</template>\n\n<style scoped>\n:deep(.tpl-cropper-background) {\n background-color: var(--tpl-bg) !important;\n}\n\n:deep(.vue-advanced-cropper) {\n background-color: transparent !important;\n}\n\n:deep(.vue-advanced-cropper__background) {\n background-color: var(--tpl-bg) !important;\n}\n\n:deep(.vue-advanced-cropper__foreground) {\n background-color: var(--tpl-overlay) !important;\n}\n</style>\n","<script setup lang=\"ts\">\nimport { useI18n } from \"../../composables/useI18n\";\nimport { useMediaCategories } from \"../../composables/useMediaCategories\";\nimport {\n ASPECT_RATIO_VALUES,\n calculateOutputDimensions,\n canvasToFile,\n getExportSettings,\n resizeCanvas,\n type AspectRatioPreset,\n} from \"../../composables/useImageCrop\";\nimport { POPOVER_TARGET_KEY } from \"../../keys\";\nimport type { MediaItem } from \"../../types\";\nimport { computed, inject, ref, watch, type Ref } from \"vue\";\nimport { Cropper, type CropperResult } from \"vue-advanced-cropper\";\nimport \"vue-advanced-cropper/dist/style.css\";\n\nexport interface CropData {\n file: File;\n}\n\nconst props = defineProps<{\n visible: boolean;\n item: MediaItem | null;\n}>();\n\nconst emit = defineEmits<{\n (\n e: \"save\",\n id: string,\n filename: string,\n altText?: string,\n cropData?: CropData,\n ): void;\n (e: \"close\"): void;\n}>();\n\nconst { t } = useI18n();\nconst tplUiTheme = inject<Ref<\"light\" | \"dark\">>(\"tplUiTheme\");\nconst popoverTarget = inject(POPOVER_TARGET_KEY, ref<HTMLElement | null>(null));\nconst mediaT = t.mediaLibrary as Record<string, string>;\n\nconst { isImageMimeType } = useMediaCategories();\n\nconst filenameValue = ref(\"\");\nconst altTextValue = ref(\"\");\n\nconst cropperRef = ref<InstanceType<typeof Cropper> | null>(null);\nconst aspectRatio = ref<AspectRatioPreset>(\"free\");\nconst maxWidth = ref<number | undefined>(undefined);\nconst maxHeight = ref<number | undefined>(undefined);\nconst maxWidthInput = ref(\"\");\nconst maxHeightInput = ref(\"\");\nconst originalAspectRatio = ref<number | undefined>(undefined);\nconst cropCoordinates = ref<{ width: number; height: number } | null>(null);\nconst imageLoaded = ref(false);\nconst isSaving = ref(false);\nconst hasModifiedCrop = ref(false);\n\nconst isCroppableImage = computed(() => {\n if (!props.item) {\n return false;\n }\n\n const croppableMimeTypes = [\n \"image/jpeg\",\n \"image/png\",\n \"image/webp\",\n \"image/gif\",\n ];\n\n return croppableMimeTypes.includes(props.item.mime_type);\n});\n\nconst aspectRatioValue = computed(() => {\n if (aspectRatio.value === \"original\") {\n return originalAspectRatio.value;\n }\n\n return ASPECT_RATIO_VALUES[aspectRatio.value];\n});\n\nconst outputDimensions = computed(() => {\n if (!cropCoordinates.value) {\n return null;\n }\n\n return calculateOutputDimensions(\n cropCoordinates.value.width,\n cropCoordinates.value.height,\n maxWidth.value,\n maxHeight.value,\n );\n});\n\nwatch(\n () => props.visible,\n (visible) => {\n if (visible && props.item) {\n filenameValue.value = props.item.filename;\n altTextValue.value = props.item.alt_text || \"\";\n aspectRatio.value = \"free\";\n maxWidth.value = undefined;\n maxHeight.value = undefined;\n maxWidthInput.value = \"\";\n maxHeightInput.value = \"\";\n originalAspectRatio.value = undefined;\n cropCoordinates.value = null;\n imageLoaded.value = false;\n hasModifiedCrop.value = false;\n\n if (props.item.width && props.item.height) {\n originalAspectRatio.value = props.item.width / props.item.height;\n }\n }\n },\n);\n\nfunction handleCropChange(result: CropperResult): void {\n if (result.coordinates) {\n cropCoordinates.value = {\n width: Math.round(result.coordinates.width),\n height: Math.round(result.coordinates.height),\n };\n hasModifiedCrop.value = true;\n }\n}\n\nfunction handleImageReady(): void {\n imageLoaded.value = true;\n\n if (!originalAspectRatio.value && props.item?.width && props.item?.height) {\n originalAspectRatio.value = props.item.width / props.item.height;\n }\n}\n\nfunction handleMaxWidthInput(event: Event): void {\n const value = (event.target as HTMLInputElement).value;\n maxWidthInput.value = value;\n maxWidth.value = value ? parseInt(value, 10) || undefined : undefined;\n}\n\nfunction handleMaxHeightInput(event: Event): void {\n const value = (event.target as HTMLInputElement).value;\n maxHeightInput.value = value;\n maxHeight.value = value ? parseInt(value, 10) || undefined : undefined;\n}\n\nasync function handleSave(): Promise<void> {\n const trimmedFilename = filenameValue.value.trim();\n if (!trimmedFilename || !props.item || isSaving.value) {\n return;\n }\n\n const isImage = isImageMimeType(props.item.mime_type);\n let cropData: CropData | undefined;\n\n if (isCroppableImage.value && cropperRef.value && hasModifiedCrop.value) {\n isSaving.value = true;\n try {\n const { canvas } = cropperRef.value.getResult();\n if (canvas) {\n const resizedCanvas = resizeCanvas(\n canvas,\n maxWidth.value,\n maxHeight.value,\n );\n const settings = getExportSettings(props.item.mime_type);\n const file = await canvasToFile(\n resizedCanvas,\n props.item.filename,\n settings,\n );\n cropData = { file };\n }\n } catch {\n isSaving.value = false;\n return;\n }\n isSaving.value = false;\n }\n\n emit(\n \"save\",\n props.item.id,\n trimmedFilename,\n isImage ? altTextValue.value : undefined,\n cropData,\n );\n emit(\"close\");\n}\n\nfunction handleKeydown(event: KeyboardEvent): void {\n if (event.key === \"Enter\" && !isSaving.value) {\n event.preventDefault();\n handleSave();\n }\n if (event.key === \"Escape\") {\n emit(\"close\");\n }\n}\n</script>\n\n<template>\n <Teleport :to=\"popoverTarget || 'body'\">\n <Transition\n enter-active-class=\"tpl:transition tpl:ease-out tpl:duration-150\"\n enter-from-class=\"tpl:opacity-0\"\n enter-to-class=\"tpl:opacity-100\"\n leave-active-class=\"tpl:transition tpl:ease-in tpl:duration-100\"\n leave-from-class=\"tpl:opacity-100\"\n leave-to-class=\"tpl:opacity-0\"\n >\n <div\n v-if=\"visible && item\"\n :data-tpl-theme=\"tplUiTheme\"\n class=\"tpl tpl:fixed tpl:inset-0 tpl:z-[10000] tpl:flex tpl:items-center tpl:justify-center\"\n style=\"background-color: var(--tpl-overlay)\"\n @click.self=\"emit('close')\"\n @keydown=\"handleKeydown\"\n >\n <div\n class=\"tpl:mx-4 tpl:flex tpl:max-h-[90vh] tpl:w-full tpl:flex-col tpl:overflow-hidden tpl:rounded-lg tpl:shadow-xl\"\n :class=\"isCroppableImage ? 'tpl:max-w-2xl' : 'tpl:max-w-sm'\"\n style=\"background-color: var(--tpl-bg-elevated)\"\n >\n <!-- Header -->\n <div class=\"tpl:shrink-0 tpl:p-5 tpl:pb-4\">\n <h3\n class=\"tpl:text-sm tpl:font-semibold\"\n style=\"color: var(--tpl-text)\"\n >\n {{ t.mediaLibrary.editFile }}\n </h3>\n </div>\n\n <!-- Scrollable content -->\n <div class=\"tpl:min-h-0 tpl:flex-1 tpl:overflow-y-auto tpl:px-5\">\n <!-- Image Cropper (for images only) -->\n <div v-if=\"isCroppableImage\" class=\"tpl:mb-4\">\n <!-- Cropper -->\n <div\n class=\"tpl:relative tpl:mb-3 tpl:overflow-hidden tpl:rounded-md tpl:border\"\n style=\"\n border-color: var(--tpl-border);\n height: 300px;\n background-color: var(--tpl-bg);\n \"\n >\n <Cropper\n ref=\"cropperRef\"\n :src=\"item.url\"\n :stencil-props=\"{\n aspectRatio: aspectRatioValue,\n }\"\n class=\"tpl:h-full tpl:w-full\"\n background-class=\"tpl-cropper-background\"\n @change=\"handleCropChange\"\n @ready=\"handleImageReady\"\n />\n </div>\n\n <!-- Crop controls -->\n <div class=\"tpl:space-y-3\">\n <!-- Aspect ratio -->\n <div>\n <label\n class=\"tpl:mb-1.5 tpl:block tpl:text-xs tpl:font-medium\"\n style=\"color: var(--tpl-text-muted)\"\n >\n {{ t.mediaLibrary.cropAspectRatio }}\n </label>\n <div class=\"tpl:flex tpl:flex-wrap tpl:gap-1.5\">\n <button\n v-for=\"preset in [\n 'free',\n 'square',\n 'landscape43',\n 'landscape169',\n 'original',\n ] as const\"\n :key=\"preset\"\n type=\"button\"\n class=\"tpl:cursor-pointer tpl:rounded-md tpl:border tpl:px-2.5 tpl:py-1 tpl:text-xs tpl:font-medium tpl:transition-all tpl:duration-150\"\n :style=\"{\n borderColor:\n aspectRatio === preset\n ? 'var(--tpl-primary)'\n : 'var(--tpl-border)',\n backgroundColor:\n aspectRatio === preset\n ? 'var(--tpl-primary-light)'\n : 'var(--tpl-bg)',\n color:\n aspectRatio === preset\n ? 'var(--tpl-primary)'\n : 'var(--tpl-text)',\n }\"\n @click=\"aspectRatio = preset\"\n >\n {{\n mediaT[\n `crop${preset.charAt(0).toUpperCase()}${preset.slice(1)}`\n ]\n }}\n </button>\n </div>\n </div>\n\n <!-- Max dimensions -->\n <div class=\"tpl:flex tpl:gap-3\">\n <div class=\"tpl:flex-1\">\n <label\n class=\"tpl:mb-1 tpl:block tpl:text-xs tpl:font-medium\"\n style=\"color: var(--tpl-text-muted)\"\n >\n {{ t.mediaLibrary.cropMaxWidth }}\n <span\n class=\"tpl:font-normal\"\n style=\"color: var(--tpl-text-dim)\"\n >\n {{ t.mediaLibrary.cropOptional }}\n </span>\n </label>\n <div class=\"tpl:relative\">\n <input\n :value=\"maxWidthInput\"\n type=\"number\"\n min=\"1\"\n class=\"tpl:w-full tpl:rounded-md tpl:border tpl:py-1.5 tpl:pr-8 tpl:pl-3 tpl:text-xs tpl:outline-none\"\n style=\"\n border-color: var(--tpl-border);\n background-color: var(--tpl-bg);\n color: var(--tpl-text);\n \"\n :placeholder=\"cropCoordinates?.width?.toString() || ''\"\n @input=\"handleMaxWidthInput\"\n />\n <span\n class=\"tpl:absolute tpl:top-1/2 tpl:right-2.5 tpl:-translate-y-1/2 tpl:text-xs\"\n style=\"color: var(--tpl-text-dim)\"\n >\n {{ t.mediaLibrary.cropPixels }}\n </span>\n </div>\n </div>\n <div class=\"tpl:flex-1\">\n <label\n class=\"tpl:mb-1 tpl:block tpl:text-xs tpl:font-medium\"\n style=\"color: var(--tpl-text-muted)\"\n >\n {{ t.mediaLibrary.cropMaxHeight }}\n <span\n class=\"tpl:font-normal\"\n style=\"color: var(--tpl-text-dim)\"\n >\n {{ t.mediaLibrary.cropOptional }}\n </span>\n </label>\n <div class=\"tpl:relative\">\n <input\n :value=\"maxHeightInput\"\n type=\"number\"\n min=\"1\"\n class=\"tpl:w-full tpl:rounded-md tpl:border tpl:py-1.5 tpl:pr-8 tpl:pl-3 tpl:text-xs tpl:outline-none\"\n style=\"\n border-color: var(--tpl-border);\n background-color: var(--tpl-bg);\n color: var(--tpl-text);\n \"\n :placeholder=\"cropCoordinates?.height?.toString() || ''\"\n @input=\"handleMaxHeightInput\"\n />\n <span\n class=\"tpl:absolute tpl:top-1/2 tpl:right-2.5 tpl:-translate-y-1/2 tpl:text-xs\"\n style=\"color: var(--tpl-text-dim)\"\n >\n {{ t.mediaLibrary.cropPixels }}\n </span>\n </div>\n </div>\n </div>\n\n <!-- Output dimensions -->\n <div\n v-if=\"outputDimensions\"\n class=\"tpl:flex tpl:items-center tpl:gap-1 tpl:text-xs\"\n style=\"color: var(--tpl-text-muted)\"\n >\n <span> {{ t.mediaLibrary.cropOutputSize }}: </span>\n <span class=\"tpl:font-medium\" style=\"color: var(--tpl-text)\">\n {{ outputDimensions.width }} x\n {{ outputDimensions.height }}\n {{ t.mediaLibrary.cropPixels }}\n </span>\n </div>\n </div>\n </div>\n\n <!-- Filename -->\n <div class=\"tpl:mb-3\">\n <label\n class=\"tpl:mb-1 tpl:block tpl:text-xs tpl:font-medium\"\n style=\"color: var(--tpl-text-muted)\"\n >\n {{ t.mediaLibrary.fileName }}\n </label>\n <input\n v-model=\"filenameValue\"\n type=\"text\"\n class=\"tpl:w-full tpl:rounded-md tpl:border tpl:px-3 tpl:py-1.5 tpl:text-xs tpl:outline-none\"\n style=\"\n border-color: var(--tpl-border);\n background-color: var(--tpl-bg);\n color: var(--tpl-text);\n \"\n :autofocus=\"!isCroppableImage\"\n />\n </div>\n\n <!-- Alt Text (images only) -->\n <div v-if=\"isImageMimeType(item.mime_type)\" class=\"tpl:mb-4\">\n <label\n class=\"tpl:mb-1 tpl:block tpl:text-xs tpl:font-medium\"\n style=\"color: var(--tpl-text-muted)\"\n >\n {{ t.mediaLibrary.altText }}\n </label>\n <input\n v-model=\"altTextValue\"\n type=\"text\"\n class=\"tpl:w-full tpl:rounded-md tpl:border tpl:px-3 tpl:py-1.5 tpl:text-xs tpl:outline-none\"\n style=\"\n border-color: var(--tpl-border);\n background-color: var(--tpl-bg);\n color: var(--tpl-text);\n \"\n :placeholder=\"t.mediaLibrary.altTextPlaceholder\"\n />\n </div>\n </div>\n\n <!-- Actions -->\n <div\n class=\"tpl:flex tpl:shrink-0 tpl:justify-end tpl:gap-2 tpl:p-5 tpl:pt-4\"\n >\n <button\n class=\"tpl:cursor-pointer tpl:rounded-md tpl:border tpl:px-3 tpl:py-1.5 tpl:text-xs tpl:font-medium tpl:transition-all tpl:duration-150\"\n style=\"\n border-color: var(--tpl-border);\n color: var(--tpl-text);\n background-color: var(--tpl-bg);\n \"\n @click=\"emit('close')\"\n >\n {{ t.mediaLibrary.cancel }}\n </button>\n <button\n class=\"tpl:cursor-pointer tpl:rounded-md tpl:px-3 tpl:py-1.5 tpl:text-xs tpl:font-medium tpl:text-white tpl:transition-all tpl:duration-150 tpl:disabled:cursor-not-allowed tpl:disabled:opacity-50\"\n style=\"\n background: linear-gradient(\n 135deg,\n var(--tpl-primary),\n var(--tpl-primary-hover)\n );\n \"\n :disabled=\"isSaving\"\n @click=\"handleSave\"\n >\n {{\n isSaving ? t.mediaLibrary.saving : t.mediaLibrary.saveChanges\n }}\n </button>\n </div>\n </div>\n </div>\n </Transition>\n </Teleport>\n</template>\n\n<style scoped>\n:deep(.tpl-cropper-background) {\n background-color: var(--tpl-bg) !important;\n}\n\n:deep(.vue-advanced-cropper) {\n background-color: transparent !important;\n}\n\n:deep(.vue-advanced-cropper__background) {\n background-color: var(--tpl-bg) !important;\n}\n\n:deep(.vue-advanced-cropper__foreground) {\n background-color: var(--tpl-overlay) !important;\n}\n</style>\n","<script setup lang=\"ts\">\nimport { useI18n } from \"../../composables/useI18n\";\nimport type { MediaFolder } from \"../../types\";\nimport { ChevronRight, Folder, Pencil, Plus, Trash2 } from \"@lucide/vue\";\nimport { computed, ref } from \"vue\";\n\nconst props = defineProps<{\n folder: MediaFolder;\n currentFolderId: string | null;\n depth: number;\n}>();\n\nconst emit = defineEmits<{\n (e: \"navigate\", folderId: string | null): void;\n (e: \"createFolder\", name: string, parentId?: string | null): void;\n (e: \"renameFolder\", folderId: string, name: string): void;\n (e: \"deleteFolder\", folderId: string): void;\n}>();\n\nconst { t } = useI18n();\n\nconst isExpanded = ref(false);\nconst isRenaming = ref(false);\nconst renameValue = ref(\"\");\nconst isCreatingSubfolder = ref(false);\nconst subfolderName = ref(\"\");\n\nconst MAX_DEPTH = 5;\n\nconst hasChildren = computed(() => (props.folder.children?.length ?? 0) > 0);\n\nconst canCreateSubfolder = computed(() => props.depth < MAX_DEPTH - 1);\n\nconst isActive = computed(() => props.currentFolderId === props.folder.id);\n\nconst isDescendantActive = computed(() => {\n if (!props.currentFolderId || !props.folder.children) return false;\n return containsFolder(props.folder.children, props.currentFolderId);\n});\n\nconst shouldExpand = computed(\n () => isExpanded.value || isDescendantActive.value,\n);\n\nfunction containsFolder(folders: MediaFolder[], id: string): boolean {\n for (const folder of folders) {\n if (folder.id === id) return true;\n if (folder.children && containsFolder(folder.children, id)) return true;\n }\n return false;\n}\n\nfunction toggleExpand(): void {\n isExpanded.value = !isExpanded.value;\n}\n\nfunction startRename(): void {\n isRenaming.value = true;\n renameValue.value = props.folder.name;\n}\n\nfunction confirmRename(): void {\n const trimmed = renameValue.value.trim();\n if (trimmed && trimmed !== props.folder.name) {\n emit(\"renameFolder\", props.folder.id, trimmed);\n }\n isRenaming.value = false;\n renameValue.value = \"\";\n}\n\nfunction cancelRename(): void {\n isRenaming.value = false;\n renameValue.value = \"\";\n}\n\nfunction startCreateSubfolder(): void {\n isCreatingSubfolder.value = true;\n subfolderName.value = \"\";\n isExpanded.value = true;\n}\n\nfunction confirmCreateSubfolder(): void {\n if (subfolderName.value.trim()) {\n emit(\"createFolder\", subfolderName.value.trim(), props.folder.id);\n }\n isCreatingSubfolder.value = false;\n subfolderName.value = \"\";\n}\n\nfunction cancelCreateSubfolder(): void {\n isCreatingSubfolder.value = false;\n subfolderName.value = \"\";\n}\n</script>\n\n<template>\n <div>\n <!-- Folder row -->\n <div\n class=\"tpl:group tpl:flex tpl:w-full tpl:items-center tpl:gap-1 tpl:py-1.5 tpl:pr-2 tpl:text-left tpl:text-xs tpl:transition-all tpl:duration-150\"\n :style=\"{\n paddingLeft: `${depth * 16 + 8}px`,\n backgroundColor: isActive ? 'var(--tpl-bg-active)' : 'transparent',\n color: isActive ? 'var(--tpl-primary)' : 'var(--tpl-text)',\n }\"\n >\n <!-- Expand/collapse chevron -->\n <button\n v-if=\"hasChildren || isCreatingSubfolder\"\n class=\"tpl:flex tpl:size-4 tpl:shrink-0 tpl:items-center tpl:justify-center tpl:rounded tpl:transition-colors\"\n @click.stop=\"toggleExpand\"\n >\n <ChevronRight\n class=\"tpl:transition-transform tpl:duration-150\"\n :class=\"{ 'tpl:rotate-90': shouldExpand }\"\n :size=\"10\"\n :stroke-width=\"2\"\n />\n </button>\n <span v-else class=\"tpl:size-4 tpl:shrink-0\" />\n\n <!-- Folder icon + name (clickable) -->\n <button\n class=\"tpl:flex tpl:min-w-0 tpl:flex-1 tpl:items-center tpl:gap-1.5\"\n @click=\"emit('navigate', folder.id)\"\n >\n <Folder class=\"tpl:shrink-0\" :size=\"14\" :stroke-width=\"1.5\" />\n <template v-if=\"!isRenaming\">\n <span class=\"tpl:truncate\">{{ folder.name }}</span>\n </template>\n </button>\n\n <!-- Inline rename input -->\n <input\n v-if=\"isRenaming\"\n v-model=\"renameValue\"\n type=\"text\"\n class=\"tpl:min-w-0 tpl:flex-1 tpl:rounded tpl:border tpl:px-1.5 tpl:py-0.5 tpl:text-xs tpl:outline-none\"\n style=\"\n border-color: var(--tpl-primary);\n background-color: var(--tpl-bg);\n color: var(--tpl-text);\n \"\n autofocus\n @keydown.enter=\"confirmRename\"\n @keydown.escape=\"cancelRename\"\n @blur=\"confirmRename\"\n @click.stop\n />\n\n <!-- Hover actions -->\n <span\n v-if=\"!isRenaming\"\n class=\"tpl:flex tpl:shrink-0 tpl:items-center tpl:gap-0.5 tpl:opacity-0 tpl:transition-opacity tpl:group-hover:opacity-100\"\n >\n <!-- Add subfolder -->\n <button\n v-if=\"canCreateSubfolder\"\n class=\"tpl:flex tpl:size-6 tpl:items-center tpl:justify-center tpl:rounded tpl:transition-colors\"\n :title=\"t.mediaLibrary.addSubfolder\"\n @click.stop=\"startCreateSubfolder\"\n >\n <Plus :size=\"12\" :stroke-width=\"2\" />\n </button>\n <!-- Rename -->\n <button\n class=\"tpl:flex tpl:size-6 tpl:items-center tpl:justify-center tpl:rounded tpl:transition-colors\"\n :title=\"t.mediaLibrary.renameFolder\"\n @click.stop=\"startRename\"\n >\n <Pencil :size=\"12\" :stroke-width=\"2\" />\n </button>\n <!-- Delete -->\n <button\n class=\"tpl:flex tpl:size-6 tpl:items-center tpl:justify-center tpl:rounded tpl:transition-colors\"\n @click.stop=\"emit('deleteFolder', folder.id)\"\n >\n <Trash2\n :size=\"12\"\n :stroke-width=\"2\"\n style=\"color: var(--tpl-danger)\"\n />\n </button>\n </span>\n </div>\n\n <!-- Children (expanded) -->\n <div v-if=\"shouldExpand\">\n <MediaFolderTreeNode\n v-for=\"child in folder.children\"\n :key=\"child.id\"\n :folder=\"child\"\n :current-folder-id=\"currentFolderId\"\n :depth=\"depth + 1\"\n @navigate=\"emit('navigate', $event)\"\n @create-folder=\"\n (name, parentId) => emit('createFolder', name, parentId)\n \"\n @rename-folder=\"(id, name) => emit('renameFolder', id, name)\"\n @delete-folder=\"emit('deleteFolder', $event)\"\n />\n\n <!-- Subfolder creation input -->\n <div\n v-if=\"isCreatingSubfolder\"\n :style=\"{ paddingLeft: `${(depth + 1) * 16 + 8}px` }\"\n class=\"tpl:py-1.5 tpl:pr-2\"\n >\n <input\n v-model=\"subfolderName\"\n type=\"text\"\n class=\"tpl:w-full tpl:rounded tpl:border tpl:px-2 tpl:py-1 tpl:text-xs tpl:outline-none\"\n style=\"\n border-color: var(--tpl-primary);\n background-color: var(--tpl-bg);\n color: var(--tpl-text);\n \"\n :placeholder=\"t.mediaLibrary.subfolderName\"\n autofocus\n @keydown.enter=\"confirmCreateSubfolder\"\n @keydown.escape=\"cancelCreateSubfolder\"\n @blur=\"confirmCreateSubfolder\"\n />\n </div>\n </div>\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport { useI18n } from \"../../composables/useI18n\";\nimport type { MediaFolder } from \"../../types\";\nimport { ChevronRight, Folder, Pencil, Plus, Trash2 } from \"@lucide/vue\";\nimport { computed, ref } from \"vue\";\n\nconst props = defineProps<{\n folder: MediaFolder;\n currentFolderId: string | null;\n depth: number;\n}>();\n\nconst emit = defineEmits<{\n (e: \"navigate\", folderId: string | null): void;\n (e: \"createFolder\", name: string, parentId?: string | null): void;\n (e: \"renameFolder\", folderId: string, name: string): void;\n (e: \"deleteFolder\", folderId: string): void;\n}>();\n\nconst { t } = useI18n();\n\nconst isExpanded = ref(false);\nconst isRenaming = ref(false);\nconst renameValue = ref(\"\");\nconst isCreatingSubfolder = ref(false);\nconst subfolderName = ref(\"\");\n\nconst MAX_DEPTH = 5;\n\nconst hasChildren = computed(() => (props.folder.children?.length ?? 0) > 0);\n\nconst canCreateSubfolder = computed(() => props.depth < MAX_DEPTH - 1);\n\nconst isActive = computed(() => props.currentFolderId === props.folder.id);\n\nconst isDescendantActive = computed(() => {\n if (!props.currentFolderId || !props.folder.children) return false;\n return containsFolder(props.folder.children, props.currentFolderId);\n});\n\nconst shouldExpand = computed(\n () => isExpanded.value || isDescendantActive.value,\n);\n\nfunction containsFolder(folders: MediaFolder[], id: string): boolean {\n for (const folder of folders) {\n if (folder.id === id) return true;\n if (folder.children && containsFolder(folder.children, id)) return true;\n }\n return false;\n}\n\nfunction toggleExpand(): void {\n isExpanded.value = !isExpanded.value;\n}\n\nfunction startRename(): void {\n isRenaming.value = true;\n renameValue.value = props.folder.name;\n}\n\nfunction confirmRename(): void {\n const trimmed = renameValue.value.trim();\n if (trimmed && trimmed !== props.folder.name) {\n emit(\"renameFolder\", props.folder.id, trimmed);\n }\n isRenaming.value = false;\n renameValue.value = \"\";\n}\n\nfunction cancelRename(): void {\n isRenaming.value = false;\n renameValue.value = \"\";\n}\n\nfunction startCreateSubfolder(): void {\n isCreatingSubfolder.value = true;\n subfolderName.value = \"\";\n isExpanded.value = true;\n}\n\nfunction confirmCreateSubfolder(): void {\n if (subfolderName.value.trim()) {\n emit(\"createFolder\", subfolderName.value.trim(), props.folder.id);\n }\n isCreatingSubfolder.value = false;\n subfolderName.value = \"\";\n}\n\nfunction cancelCreateSubfolder(): void {\n isCreatingSubfolder.value = false;\n subfolderName.value = \"\";\n}\n</script>\n\n<template>\n <div>\n <!-- Folder row -->\n <div\n class=\"tpl:group tpl:flex tpl:w-full tpl:items-center tpl:gap-1 tpl:py-1.5 tpl:pr-2 tpl:text-left tpl:text-xs tpl:transition-all tpl:duration-150\"\n :style=\"{\n paddingLeft: `${depth * 16 + 8}px`,\n backgroundColor: isActive ? 'var(--tpl-bg-active)' : 'transparent',\n color: isActive ? 'var(--tpl-primary)' : 'var(--tpl-text)',\n }\"\n >\n <!-- Expand/collapse chevron -->\n <button\n v-if=\"hasChildren || isCreatingSubfolder\"\n class=\"tpl:flex tpl:size-4 tpl:shrink-0 tpl:items-center tpl:justify-center tpl:rounded tpl:transition-colors\"\n @click.stop=\"toggleExpand\"\n >\n <ChevronRight\n class=\"tpl:transition-transform tpl:duration-150\"\n :class=\"{ 'tpl:rotate-90': shouldExpand }\"\n :size=\"10\"\n :stroke-width=\"2\"\n />\n </button>\n <span v-else class=\"tpl:size-4 tpl:shrink-0\" />\n\n <!-- Folder icon + name (clickable) -->\n <button\n class=\"tpl:flex tpl:min-w-0 tpl:flex-1 tpl:items-center tpl:gap-1.5\"\n @click=\"emit('navigate', folder.id)\"\n >\n <Folder class=\"tpl:shrink-0\" :size=\"14\" :stroke-width=\"1.5\" />\n <template v-if=\"!isRenaming\">\n <span class=\"tpl:truncate\">{{ folder.name }}</span>\n </template>\n </button>\n\n <!-- Inline rename input -->\n <input\n v-if=\"isRenaming\"\n v-model=\"renameValue\"\n type=\"text\"\n class=\"tpl:min-w-0 tpl:flex-1 tpl:rounded tpl:border tpl:px-1.5 tpl:py-0.5 tpl:text-xs tpl:outline-none\"\n style=\"\n border-color: var(--tpl-primary);\n background-color: var(--tpl-bg);\n color: var(--tpl-text);\n \"\n autofocus\n @keydown.enter=\"confirmRename\"\n @keydown.escape=\"cancelRename\"\n @blur=\"confirmRename\"\n @click.stop\n />\n\n <!-- Hover actions -->\n <span\n v-if=\"!isRenaming\"\n class=\"tpl:flex tpl:shrink-0 tpl:items-center tpl:gap-0.5 tpl:opacity-0 tpl:transition-opacity tpl:group-hover:opacity-100\"\n >\n <!-- Add subfolder -->\n <button\n v-if=\"canCreateSubfolder\"\n class=\"tpl:flex tpl:size-6 tpl:items-center tpl:justify-center tpl:rounded tpl:transition-colors\"\n :title=\"t.mediaLibrary.addSubfolder\"\n @click.stop=\"startCreateSubfolder\"\n >\n <Plus :size=\"12\" :stroke-width=\"2\" />\n </button>\n <!-- Rename -->\n <button\n class=\"tpl:flex tpl:size-6 tpl:items-center tpl:justify-center tpl:rounded tpl:transition-colors\"\n :title=\"t.mediaLibrary.renameFolder\"\n @click.stop=\"startRename\"\n >\n <Pencil :size=\"12\" :stroke-width=\"2\" />\n </button>\n <!-- Delete -->\n <button\n class=\"tpl:flex tpl:size-6 tpl:items-center tpl:justify-center tpl:rounded tpl:transition-colors\"\n @click.stop=\"emit('deleteFolder', folder.id)\"\n >\n <Trash2\n :size=\"12\"\n :stroke-width=\"2\"\n style=\"color: var(--tpl-danger)\"\n />\n </button>\n </span>\n </div>\n\n <!-- Children (expanded) -->\n <div v-if=\"shouldExpand\">\n <MediaFolderTreeNode\n v-for=\"child in folder.children\"\n :key=\"child.id\"\n :folder=\"child\"\n :current-folder-id=\"currentFolderId\"\n :depth=\"depth + 1\"\n @navigate=\"emit('navigate', $event)\"\n @create-folder=\"\n (name, parentId) => emit('createFolder', name, parentId)\n \"\n @rename-folder=\"(id, name) => emit('renameFolder', id, name)\"\n @delete-folder=\"emit('deleteFolder', $event)\"\n />\n\n <!-- Subfolder creation input -->\n <div\n v-if=\"isCreatingSubfolder\"\n :style=\"{ paddingLeft: `${(depth + 1) * 16 + 8}px` }\"\n class=\"tpl:py-1.5 tpl:pr-2\"\n >\n <input\n v-model=\"subfolderName\"\n type=\"text\"\n class=\"tpl:w-full tpl:rounded tpl:border tpl:px-2 tpl:py-1 tpl:text-xs tpl:outline-none\"\n style=\"\n border-color: var(--tpl-primary);\n background-color: var(--tpl-bg);\n color: var(--tpl-text);\n \"\n :placeholder=\"t.mediaLibrary.subfolderName\"\n autofocus\n @keydown.enter=\"confirmCreateSubfolder\"\n @keydown.escape=\"cancelCreateSubfolder\"\n @blur=\"confirmCreateSubfolder\"\n />\n </div>\n </div>\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport MediaFolderTreeNode from \"./MediaFolderTreeNode.vue\";\nimport { useI18n } from \"../../composables/useI18n\";\nimport type { MediaViewMode } from \"../../composable\";\nimport type { MediaFolder } from \"../../types\";\nimport { File, Plus, Star } from \"@lucide/vue\";\nimport { ref } from \"vue\";\n\ndefineProps<{\n folders: MediaFolder[];\n currentFolderId: string | null;\n viewMode: MediaViewMode;\n hasFrequentlyUsed: boolean;\n}>();\n\nconst emit = defineEmits<{\n (e: \"navigate\", folderId: string | null): void;\n (e: \"createFolder\", name: string, parentId?: string | null): void;\n (e: \"renameFolder\", folderId: string, name: string): void;\n (e: \"deleteFolder\", folderId: string): void;\n (e: \"showFrequentlyUsed\"): void;\n}>();\n\nconst { t } = useI18n();\n\nconst isCreating = ref(false);\nconst newFolderName = ref(\"\");\n\nfunction startCreateFolder(): void {\n isCreating.value = true;\n newFolderName.value = \"\";\n}\n\nfunction confirmCreateFolder(): void {\n if (newFolderName.value.trim()) {\n emit(\"createFolder\", newFolderName.value.trim());\n }\n isCreating.value = false;\n newFolderName.value = \"\";\n}\n\nfunction cancelCreate(): void {\n isCreating.value = false;\n newFolderName.value = \"\";\n}\n</script>\n\n<template>\n <div class=\"tpl:flex tpl:h-full tpl:flex-col tpl:overflow-y-auto\">\n <!-- All Images root -->\n <button\n class=\"tpl:flex tpl:w-full tpl:items-center tpl:gap-2 tpl:px-3 tpl:py-2 tpl:text-left tpl:text-xs tpl:font-medium tpl:transition-all tpl:duration-150\"\n :style=\"{\n backgroundColor:\n viewMode === 'files' && currentFolderId === null\n ? 'var(--tpl-bg-active)'\n : 'transparent',\n color:\n viewMode === 'files' && currentFolderId === null\n ? 'var(--tpl-primary)'\n : 'var(--tpl-text)',\n }\"\n @click=\"emit('navigate', null)\"\n >\n <File :size=\"14\" :stroke-width=\"1.5\" />\n {{ t.mediaLibrary.allFiles }}\n </button>\n\n <!-- Recursive folder tree -->\n <MediaFolderTreeNode\n v-for=\"folder in folders\"\n :key=\"folder.id\"\n :folder=\"folder\"\n :current-folder-id=\"currentFolderId\"\n :depth=\"0\"\n @navigate=\"emit('navigate', $event)\"\n @create-folder=\"(name, parentId) => emit('createFolder', name, parentId)\"\n @rename-folder=\"(id, name) => emit('renameFolder', id, name)\"\n @delete-folder=\"emit('deleteFolder', $event)\"\n />\n\n <!-- New folder input -->\n <div v-if=\"isCreating\" class=\"tpl:px-3 tpl:py-2\">\n <input\n v-model=\"newFolderName\"\n type=\"text\"\n class=\"tpl:w-full tpl:rounded tpl:border tpl:px-2 tpl:py-1 tpl:text-xs tpl:outline-none\"\n style=\"\n border-color: var(--tpl-primary);\n background-color: var(--tpl-bg);\n color: var(--tpl-text);\n \"\n :placeholder=\"t.mediaLibrary.folderName\"\n autofocus\n @keydown.enter=\"confirmCreateFolder\"\n @keydown.escape=\"cancelCreate\"\n @blur=\"confirmCreateFolder\"\n />\n </div>\n\n <!-- New folder button -->\n <button\n v-if=\"!isCreating\"\n class=\"tpl:flex tpl:w-full tpl:items-center tpl:gap-2 tpl:px-3 tpl:py-2 tpl:text-left tpl:text-xs tpl:transition-all tpl:duration-150\"\n style=\"color: var(--tpl-text-muted)\"\n @click=\"startCreateFolder\"\n >\n <Plus :size=\"14\" :stroke-width=\"1.5\" />\n {{ t.mediaLibrary.newFolder }}\n </button>\n\n <!-- Spacer to push frequently used to bottom -->\n <div class=\"tpl:flex-1\" />\n\n <!-- Frequently Used -->\n <button\n v-if=\"hasFrequentlyUsed\"\n class=\"tpl:flex tpl:w-full tpl:items-center tpl:gap-2 tpl:border-t tpl:px-3 tpl:py-2 tpl:text-left tpl:text-xs tpl:font-medium tpl:transition-all tpl:duration-150\"\n :style=\"{\n borderColor: 'var(--tpl-border)',\n backgroundColor:\n viewMode === 'frequently-used'\n ? 'var(--tpl-bg-active)'\n : 'transparent',\n color:\n viewMode === 'frequently-used'\n ? 'var(--tpl-primary)'\n : 'var(--tpl-text)',\n }\"\n @click=\"emit('showFrequentlyUsed')\"\n >\n <Star :size=\"14\" :stroke-width=\"1.5\" />\n {{ t.mediaLibrary.frequentlyUsed }}\n </button>\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport MediaFolderTreeNode from \"./MediaFolderTreeNode.vue\";\nimport { useI18n } from \"../../composables/useI18n\";\nimport type { MediaViewMode } from \"../../composable\";\nimport type { MediaFolder } from \"../../types\";\nimport { File, Plus, Star } from \"@lucide/vue\";\nimport { ref } from \"vue\";\n\ndefineProps<{\n folders: MediaFolder[];\n currentFolderId: string | null;\n viewMode: MediaViewMode;\n hasFrequentlyUsed: boolean;\n}>();\n\nconst emit = defineEmits<{\n (e: \"navigate\", folderId: string | null): void;\n (e: \"createFolder\", name: string, parentId?: string | null): void;\n (e: \"renameFolder\", folderId: string, name: string): void;\n (e: \"deleteFolder\", folderId: string): void;\n (e: \"showFrequentlyUsed\"): void;\n}>();\n\nconst { t } = useI18n();\n\nconst isCreating = ref(false);\nconst newFolderName = ref(\"\");\n\nfunction startCreateFolder(): void {\n isCreating.value = true;\n newFolderName.value = \"\";\n}\n\nfunction confirmCreateFolder(): void {\n if (newFolderName.value.trim()) {\n emit(\"createFolder\", newFolderName.value.trim());\n }\n isCreating.value = false;\n newFolderName.value = \"\";\n}\n\nfunction cancelCreate(): void {\n isCreating.value = false;\n newFolderName.value = \"\";\n}\n</script>\n\n<template>\n <div class=\"tpl:flex tpl:h-full tpl:flex-col tpl:overflow-y-auto\">\n <!-- All Images root -->\n <button\n class=\"tpl:flex tpl:w-full tpl:items-center tpl:gap-2 tpl:px-3 tpl:py-2 tpl:text-left tpl:text-xs tpl:font-medium tpl:transition-all tpl:duration-150\"\n :style=\"{\n backgroundColor:\n viewMode === 'files' && currentFolderId === null\n ? 'var(--tpl-bg-active)'\n : 'transparent',\n color:\n viewMode === 'files' && currentFolderId === null\n ? 'var(--tpl-primary)'\n : 'var(--tpl-text)',\n }\"\n @click=\"emit('navigate', null)\"\n >\n <File :size=\"14\" :stroke-width=\"1.5\" />\n {{ t.mediaLibrary.allFiles }}\n </button>\n\n <!-- Recursive folder tree -->\n <MediaFolderTreeNode\n v-for=\"folder in folders\"\n :key=\"folder.id\"\n :folder=\"folder\"\n :current-folder-id=\"currentFolderId\"\n :depth=\"0\"\n @navigate=\"emit('navigate', $event)\"\n @create-folder=\"(name, parentId) => emit('createFolder', name, parentId)\"\n @rename-folder=\"(id, name) => emit('renameFolder', id, name)\"\n @delete-folder=\"emit('deleteFolder', $event)\"\n />\n\n <!-- New folder input -->\n <div v-if=\"isCreating\" class=\"tpl:px-3 tpl:py-2\">\n <input\n v-model=\"newFolderName\"\n type=\"text\"\n class=\"tpl:w-full tpl:rounded tpl:border tpl:px-2 tpl:py-1 tpl:text-xs tpl:outline-none\"\n style=\"\n border-color: var(--tpl-primary);\n background-color: var(--tpl-bg);\n color: var(--tpl-text);\n \"\n :placeholder=\"t.mediaLibrary.folderName\"\n autofocus\n @keydown.enter=\"confirmCreateFolder\"\n @keydown.escape=\"cancelCreate\"\n @blur=\"confirmCreateFolder\"\n />\n </div>\n\n <!-- New folder button -->\n <button\n v-if=\"!isCreating\"\n class=\"tpl:flex tpl:w-full tpl:items-center tpl:gap-2 tpl:px-3 tpl:py-2 tpl:text-left tpl:text-xs tpl:transition-all tpl:duration-150\"\n style=\"color: var(--tpl-text-muted)\"\n @click=\"startCreateFolder\"\n >\n <Plus :size=\"14\" :stroke-width=\"1.5\" />\n {{ t.mediaLibrary.newFolder }}\n </button>\n\n <!-- Spacer to push frequently used to bottom -->\n <div class=\"tpl:flex-1\" />\n\n <!-- Frequently Used -->\n <button\n v-if=\"hasFrequentlyUsed\"\n class=\"tpl:flex tpl:w-full tpl:items-center tpl:gap-2 tpl:border-t tpl:px-3 tpl:py-2 tpl:text-left tpl:text-xs tpl:font-medium tpl:transition-all tpl:duration-150\"\n :style=\"{\n borderColor: 'var(--tpl-border)',\n backgroundColor:\n viewMode === 'frequently-used'\n ? 'var(--tpl-bg-active)'\n : 'transparent',\n color:\n viewMode === 'frequently-used'\n ? 'var(--tpl-primary)'\n : 'var(--tpl-text)',\n }\"\n @click=\"emit('showFrequentlyUsed')\"\n >\n <Star :size=\"14\" :stroke-width=\"1.5\" />\n {{ t.mediaLibrary.frequentlyUsed }}\n </button>\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport { computed } from \"vue\";\n\nconst props = defineProps<{\n mimeType: string;\n}>();\n\ninterface FileTypeConfig {\n label: string;\n color: string;\n bgColor: string;\n icon: \"document\" | \"video\" | \"audio\";\n}\n\nconst FILE_TYPE_MAP: Record<string, FileTypeConfig> = {\n \"application/pdf\": {\n label: \"PDF\",\n color: \"#dc2626\",\n bgColor: \"#fef2f2\",\n icon: \"document\",\n },\n \"application/vnd.openxmlformats-officedocument.wordprocessingml.document\": {\n label: \"DOC\",\n color: \"#2563eb\",\n bgColor: \"#eff6ff\",\n icon: \"document\",\n },\n \"application/msword\": {\n label: \"DOC\",\n color: \"#2563eb\",\n bgColor: \"#eff6ff\",\n icon: \"document\",\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\": {\n label: \"XLS\",\n color: \"#16a34a\",\n bgColor: \"#f0fdf4\",\n icon: \"document\",\n },\n \"application/vnd.ms-excel\": {\n label: \"XLS\",\n color: \"#16a34a\",\n bgColor: \"#f0fdf4\",\n icon: \"document\",\n },\n \"application/vnd.openxmlformats-officedocument.presentationml.presentation\": {\n label: \"PPT\",\n color: \"#ea580c\",\n bgColor: \"#fff7ed\",\n icon: \"document\",\n },\n \"application/vnd.ms-powerpoint\": {\n label: \"PPT\",\n color: \"#ea580c\",\n bgColor: \"#fff7ed\",\n icon: \"document\",\n },\n \"text/csv\": {\n label: \"CSV\",\n color: \"#16a34a\",\n bgColor: \"#f0fdf4\",\n icon: \"document\",\n },\n \"text/plain\": {\n label: \"TXT\",\n color: \"#6b7280\",\n bgColor: \"#f9fafb\",\n icon: \"document\",\n },\n \"video/mp4\": {\n label: \"MP4\",\n color: \"#9333ea\",\n bgColor: \"#faf5ff\",\n icon: \"video\",\n },\n \"video/quicktime\": {\n label: \"MOV\",\n color: \"#9333ea\",\n bgColor: \"#faf5ff\",\n icon: \"video\",\n },\n \"video/webm\": {\n label: \"WEBM\",\n color: \"#9333ea\",\n bgColor: \"#faf5ff\",\n icon: \"video\",\n },\n \"audio/mpeg\": {\n label: \"MP3\",\n color: \"#0d9488\",\n bgColor: \"#f0fdfa\",\n icon: \"audio\",\n },\n \"audio/wav\": {\n label: \"WAV\",\n color: \"#0d9488\",\n bgColor: \"#f0fdfa\",\n icon: \"audio\",\n },\n \"audio/ogg\": {\n label: \"OGG\",\n color: \"#0d9488\",\n bgColor: \"#f0fdfa\",\n icon: \"audio\",\n },\n};\n\nconst DEFAULT_CONFIG: FileTypeConfig = {\n label: \"FILE\",\n color: \"#6b7280\",\n bgColor: \"#f9fafb\",\n icon: \"document\",\n};\n\nconst config = computed(\n (): FileTypeConfig => FILE_TYPE_MAP[props.mimeType] ?? DEFAULT_CONFIG,\n);\n</script>\n\n<template>\n <div\n class=\"tpl:flex tpl:aspect-square tpl:flex-col tpl:items-center tpl:justify-center tpl:gap-2\"\n >\n <!-- Document icon -->\n <svg\n v-if=\"config.icon === 'document'\"\n width=\"60\"\n height=\"60\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"1.5\"\n :style=\"{ color: config.color }\"\n >\n <path d=\"M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z\" />\n <polyline points=\"14 2 14 8 20 8\" />\n <line x1=\"8\" y1=\"13\" x2=\"16\" y2=\"13\" />\n <line x1=\"8\" y1=\"17\" x2=\"12\" y2=\"17\" />\n </svg>\n\n <!-- Video icon -->\n <svg\n v-else-if=\"config.icon === 'video'\"\n width=\"40\"\n height=\"40\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"1.5\"\n :style=\"{ color: config.color }\"\n >\n <rect x=\"2\" y=\"4\" width=\"20\" height=\"16\" rx=\"2\" />\n <polygon points=\"10,8 16,12 10,16\" fill=\"currentColor\" stroke=\"none\" />\n </svg>\n\n <!-- Audio icon -->\n <svg\n v-else\n width=\"40\"\n height=\"40\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"1.5\"\n :style=\"{ color: config.color }\"\n >\n <path d=\"M9 18V5l12-2v13\" />\n <circle cx=\"6\" cy=\"18\" r=\"3\" />\n <circle cx=\"18\" cy=\"16\" r=\"3\" />\n </svg>\n\n <span\n class=\"tpl:text-xs tpl:font-bold tpl:tracking-wider\"\n :style=\"{ color: config.color }\"\n >\n {{ config.label }}\n </span>\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport { computed } from \"vue\";\n\nconst props = defineProps<{\n mimeType: string;\n}>();\n\ninterface FileTypeConfig {\n label: string;\n color: string;\n bgColor: string;\n icon: \"document\" | \"video\" | \"audio\";\n}\n\nconst FILE_TYPE_MAP: Record<string, FileTypeConfig> = {\n \"application/pdf\": {\n label: \"PDF\",\n color: \"#dc2626\",\n bgColor: \"#fef2f2\",\n icon: \"document\",\n },\n \"application/vnd.openxmlformats-officedocument.wordprocessingml.document\": {\n label: \"DOC\",\n color: \"#2563eb\",\n bgColor: \"#eff6ff\",\n icon: \"document\",\n },\n \"application/msword\": {\n label: \"DOC\",\n color: \"#2563eb\",\n bgColor: \"#eff6ff\",\n icon: \"document\",\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\": {\n label: \"XLS\",\n color: \"#16a34a\",\n bgColor: \"#f0fdf4\",\n icon: \"document\",\n },\n \"application/vnd.ms-excel\": {\n label: \"XLS\",\n color: \"#16a34a\",\n bgColor: \"#f0fdf4\",\n icon: \"document\",\n },\n \"application/vnd.openxmlformats-officedocument.presentationml.presentation\": {\n label: \"PPT\",\n color: \"#ea580c\",\n bgColor: \"#fff7ed\",\n icon: \"document\",\n },\n \"application/vnd.ms-powerpoint\": {\n label: \"PPT\",\n color: \"#ea580c\",\n bgColor: \"#fff7ed\",\n icon: \"document\",\n },\n \"text/csv\": {\n label: \"CSV\",\n color: \"#16a34a\",\n bgColor: \"#f0fdf4\",\n icon: \"document\",\n },\n \"text/plain\": {\n label: \"TXT\",\n color: \"#6b7280\",\n bgColor: \"#f9fafb\",\n icon: \"document\",\n },\n \"video/mp4\": {\n label: \"MP4\",\n color: \"#9333ea\",\n bgColor: \"#faf5ff\",\n icon: \"video\",\n },\n \"video/quicktime\": {\n label: \"MOV\",\n color: \"#9333ea\",\n bgColor: \"#faf5ff\",\n icon: \"video\",\n },\n \"video/webm\": {\n label: \"WEBM\",\n color: \"#9333ea\",\n bgColor: \"#faf5ff\",\n icon: \"video\",\n },\n \"audio/mpeg\": {\n label: \"MP3\",\n color: \"#0d9488\",\n bgColor: \"#f0fdfa\",\n icon: \"audio\",\n },\n \"audio/wav\": {\n label: \"WAV\",\n color: \"#0d9488\",\n bgColor: \"#f0fdfa\",\n icon: \"audio\",\n },\n \"audio/ogg\": {\n label: \"OGG\",\n color: \"#0d9488\",\n bgColor: \"#f0fdfa\",\n icon: \"audio\",\n },\n};\n\nconst DEFAULT_CONFIG: FileTypeConfig = {\n label: \"FILE\",\n color: \"#6b7280\",\n bgColor: \"#f9fafb\",\n icon: \"document\",\n};\n\nconst config = computed(\n (): FileTypeConfig => FILE_TYPE_MAP[props.mimeType] ?? DEFAULT_CONFIG,\n);\n</script>\n\n<template>\n <div\n class=\"tpl:flex tpl:aspect-square tpl:flex-col tpl:items-center tpl:justify-center tpl:gap-2\"\n >\n <!-- Document icon -->\n <svg\n v-if=\"config.icon === 'document'\"\n width=\"60\"\n height=\"60\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"1.5\"\n :style=\"{ color: config.color }\"\n >\n <path d=\"M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z\" />\n <polyline points=\"14 2 14 8 20 8\" />\n <line x1=\"8\" y1=\"13\" x2=\"16\" y2=\"13\" />\n <line x1=\"8\" y1=\"17\" x2=\"12\" y2=\"17\" />\n </svg>\n\n <!-- Video icon -->\n <svg\n v-else-if=\"config.icon === 'video'\"\n width=\"40\"\n height=\"40\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"1.5\"\n :style=\"{ color: config.color }\"\n >\n <rect x=\"2\" y=\"4\" width=\"20\" height=\"16\" rx=\"2\" />\n <polygon points=\"10,8 16,12 10,16\" fill=\"currentColor\" stroke=\"none\" />\n </svg>\n\n <!-- Audio icon -->\n <svg\n v-else\n width=\"40\"\n height=\"40\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"1.5\"\n :style=\"{ color: config.color }\"\n >\n <path d=\"M9 18V5l12-2v13\" />\n <circle cx=\"6\" cy=\"18\" r=\"3\" />\n <circle cx=\"18\" cy=\"16\" r=\"3\" />\n </svg>\n\n <span\n class=\"tpl:text-xs tpl:font-bold tpl:tracking-wider\"\n :style=\"{ color: config.color }\"\n >\n {{ config.label }}\n </span>\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport MediaFileIcon from \"./MediaFileIcon.vue\";\nimport { useI18n } from \"../../composables/useI18n\";\nimport { useMediaCategories } from \"../../composables/useMediaCategories\";\nimport type { MediaCategory, MediaItem } from \"../../types\";\nimport { useIntersectionObserver } from \"@vueuse/core\";\nimport { Check, File, LoaderCircle, Pencil, RefreshCw } from \"@lucide/vue\";\nimport { ref } from \"vue\";\n\nconst props = defineProps<{\n items: MediaItem[];\n selectedIds: Set<string>;\n isLoading: boolean;\n hasMore: boolean;\n accept?: MediaCategory[];\n layout?: \"grid\" | \"list\";\n}>();\n\nconst emit = defineEmits<{\n (e: \"select\", item: MediaItem): void;\n (e: \"toggle\", id: string): void;\n (e: \"loadMore\"): void;\n (e: \"edit\", item: MediaItem): void;\n (e: \"replace\", item: MediaItem): void;\n}>();\n\nconst { isAcceptedMimeType, isImageMimeType } = useMediaCategories();\n\nfunction isSelectable(item: MediaItem): boolean {\n if (!props.accept || props.accept.length === 0) {\n return true;\n }\n\n return isAcceptedMimeType(item.mime_type, props.accept);\n}\n\nfunction handleItemClick(item: MediaItem): void {\n emit(\"select\", item);\n}\n\nconst { t } = useI18n();\n\nconst sentinelRef = ref<HTMLElement | null>(null);\n\nuseIntersectionObserver(\n sentinelRef,\n ([{ isIntersecting }]) => {\n if (isIntersecting && props.hasMore && !props.isLoading) {\n emit(\"loadMore\");\n }\n },\n { threshold: 0.1 },\n);\n\nfunction formatSize(bytes: number): string {\n if (bytes < 1024) return `${bytes} B`;\n if (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(1)} KB`;\n return `${(bytes / (1024 * 1024)).toFixed(1)} MB`;\n}\n\nfunction formatDate(dateStr: string): string {\n return new Date(dateStr).toLocaleDateString(undefined, {\n year: \"numeric\",\n month: \"short\",\n day: \"numeric\",\n });\n}\n</script>\n\n<template>\n <div class=\"tpl:p-4\">\n <!-- Skeleton loading -->\n <div\n v-if=\"isLoading && items.length === 0\"\n :class=\"\n layout === 'list'\n ? 'tpl:flex tpl:flex-col tpl:gap-1'\n : 'tpl:grid tpl:grid-cols-4 tpl:gap-3'\n \"\n >\n <div\n v-for=\"i in 8\"\n :key=\"i\"\n class=\"tpl-pulse tpl:rounded-lg\"\n :class=\"layout === 'list' ? 'tpl:h-12' : 'tpl:aspect-square'\"\n style=\"background-color: var(--tpl-bg-hover)\"\n />\n </div>\n\n <!-- Empty state -->\n <div\n v-else-if=\"items.length === 0\"\n class=\"tpl:flex tpl:flex-col tpl:items-center tpl:justify-center tpl:py-16\"\n >\n <File\n class=\"tpl:mb-3\"\n :size=\"40\"\n :stroke-width=\"1\"\n style=\"color: var(--tpl-text-dim)\"\n />\n <p class=\"tpl:text-xs\" style=\"color: var(--tpl-text-muted)\">\n {{ t.mediaLibrary.noFiles }}\n </p>\n </div>\n\n <!-- Grid -->\n <div\n v-else-if=\"layout !== 'list'\"\n class=\"tpl:grid tpl:grid-cols-4 tpl:gap-3\"\n >\n <div\n v-for=\"item in items\"\n :key=\"item.id\"\n class=\"tpl-media-item tpl:group tpl:relative tpl:overflow-hidden tpl:rounded-lg tpl:border-2 tpl:transition-all tpl:duration-150\"\n :class=\"[\n 'tpl:cursor-pointer',\n !isSelectable(item) && !selectedIds.has(item.id)\n ? 'tpl:opacity-60'\n : '',\n selectedIds.has(item.id) ? 'tpl-media-item--selected' : '',\n ]\"\n :style=\"{\n borderColor: selectedIds.has(item.id)\n ? 'var(--tpl-primary)'\n : 'transparent',\n backgroundColor:\n !isSelectable(item) && !selectedIds.has(item.id)\n ? 'var(--tpl-bg)'\n : 'var(--tpl-bg-hover)',\n }\"\n @click=\"handleItemClick(item)\"\n >\n <div class=\"tpl:aspect-square\">\n <img\n v-if=\"isImageMimeType(item.mime_type)\"\n :src=\"item.small_url || item.url\"\n :alt=\"item.filename\"\n class=\"tpl:size-full tpl:object-cover\"\n loading=\"lazy\"\n />\n <MediaFileIcon v-else :mime-type=\"item.mime_type\" />\n </div>\n <div class=\"tpl:px-2 tpl:py-1.5\">\n <p\n class=\"tpl:truncate tpl:text-[10px] tpl:font-medium\"\n style=\"color: var(--tpl-text)\"\n >\n {{ item.filename }}\n </p>\n <p\n class=\"tpl:flex tpl:justify-between tpl:text-[9px]\"\n style=\"color: var(--tpl-text-muted)\"\n >\n <span>{{ formatSize(item.size) }}</span>\n <span\n v-if=\"\n isImageMimeType(item.mime_type) && item.width && item.height\n \"\n >\n {{ item.width }}×{{ item.height }}\n </span>\n </p>\n </div>\n <!-- Action buttons -->\n <div\n class=\"tpl:absolute tpl:top-1.5 tpl:left-1.5 tpl:flex tpl:gap-1 tpl:opacity-0 tpl:transition-opacity tpl:duration-150 tpl:group-hover:opacity-100\"\n >\n <!-- Edit button -->\n <button\n class=\"tpl:flex tpl:size-6 tpl:items-center tpl:justify-center tpl:rounded-full tpl:text-white\"\n style=\"background-color: rgba(0, 0, 0, 0.6)\"\n :title=\"t.mediaLibrary.editFile\"\n @click.stop=\"emit('edit', item)\"\n >\n <Pencil :size=\"11\" :stroke-width=\"2\" />\n </button>\n <!-- Replace button -->\n <button\n class=\"tpl:flex tpl:size-6 tpl:items-center tpl:justify-center tpl:rounded-full tpl:text-white\"\n style=\"background-color: rgba(0, 0, 0, 0.6)\"\n :title=\"t.mediaLibrary.replaceFile\"\n @click.stop=\"emit('replace', item)\"\n >\n <RefreshCw :size=\"11\" :stroke-width=\"2\" />\n </button>\n </div>\n <!-- Selection check -->\n <div\n v-if=\"selectedIds.has(item.id)\"\n class=\"tpl:absolute tpl:top-1.5 tpl:right-1.5 tpl:flex tpl:size-5 tpl:items-center tpl:justify-center tpl:rounded-full tpl:text-white\"\n style=\"background-color: var(--tpl-primary)\"\n >\n <Check :size=\"12\" :stroke-width=\"3\" />\n </div>\n </div>\n </div>\n\n <!-- List -->\n <div v-else class=\"tpl:flex tpl:flex-col tpl:gap-1\">\n <div\n v-for=\"item in items\"\n :key=\"item.id\"\n class=\"tpl-media-list-item tpl:group tpl:flex tpl:cursor-pointer tpl:items-center tpl:gap-3 tpl:rounded-lg tpl:px-3 tpl:py-2 tpl:transition-all tpl:duration-150\"\n :class=\"[\n !isSelectable(item) && !selectedIds.has(item.id)\n ? 'tpl:opacity-60'\n : '',\n ]\"\n :style=\"{\n backgroundColor: selectedIds.has(item.id)\n ? 'var(--tpl-bg-hover)'\n : 'transparent',\n }\"\n @click=\"handleItemClick(item)\"\n >\n <!-- Thumbnail -->\n <div\n class=\"tpl:size-10 tpl:shrink-0 tpl:overflow-hidden tpl:rounded\"\n style=\"background-color: var(--tpl-bg-hover)\"\n >\n <img\n v-if=\"isImageMimeType(item.mime_type)\"\n :src=\"item.small_url || item.url\"\n :alt=\"item.filename\"\n class=\"tpl:size-full tpl:object-cover\"\n loading=\"lazy\"\n />\n <div v-else class=\"tpl-list-icon tpl:size-full\">\n <MediaFileIcon :mime-type=\"item.mime_type\" />\n </div>\n </div>\n\n <!-- Info -->\n <div class=\"tpl:min-w-0 tpl:flex-1\">\n <p\n class=\"tpl:truncate tpl:text-xs tpl:font-medium\"\n style=\"color: var(--tpl-text)\"\n >\n {{ item.filename }}\n </p>\n <p class=\"tpl:text-[10px]\" style=\"color: var(--tpl-text-muted)\">\n {{ formatSize(item.size) }} ·\n {{ formatDate(item.created_at) }}\n <template\n v-if=\"\n isImageMimeType(item.mime_type) && item.width && item.height\n \"\n >\n ·\n {{ item.width }}×{{ item.height }}\n </template>\n </p>\n </div>\n\n <!-- Action buttons -->\n <div\n class=\"tpl:flex tpl:gap-1 tpl:opacity-0 tpl:transition-opacity tpl:duration-150 tpl:group-hover:opacity-100\"\n >\n <!-- Edit button -->\n <button\n class=\"tpl:flex tpl:size-6 tpl:shrink-0 tpl:cursor-pointer tpl:items-center tpl:justify-center tpl:rounded\"\n style=\"color: var(--tpl-text-muted)\"\n :title=\"t.mediaLibrary.editFile\"\n @click.stop=\"emit('edit', item)\"\n >\n <Pencil :size=\"12\" :stroke-width=\"2\" />\n </button>\n <!-- Replace button -->\n <button\n class=\"tpl:flex tpl:size-6 tpl:shrink-0 tpl:cursor-pointer tpl:items-center tpl:justify-center tpl:rounded\"\n style=\"color: var(--tpl-text-muted)\"\n :title=\"t.mediaLibrary.replaceFile\"\n @click.stop=\"emit('replace', item)\"\n >\n <RefreshCw :size=\"12\" :stroke-width=\"2\" />\n </button>\n </div>\n\n <!-- Selection check -->\n <div\n v-if=\"selectedIds.has(item.id)\"\n class=\"tpl:flex tpl:size-5 tpl:shrink-0 tpl:items-center tpl:justify-center tpl:rounded-full tpl:text-white\"\n style=\"background-color: var(--tpl-primary)\"\n >\n <Check :size=\"12\" :stroke-width=\"3\" />\n </div>\n </div>\n </div>\n\n <!-- Infinite scroll sentinel -->\n <div ref=\"sentinelRef\" class=\"tpl:h-4\" />\n\n <!-- Loading more indicator -->\n <div\n v-if=\"isLoading && items.length > 0\"\n class=\"tpl:flex tpl:justify-center tpl:py-4\"\n >\n <LoaderCircle\n class=\"tpl-spinner\"\n :size=\"20\"\n :stroke-width=\"2\"\n style=\"color: var(--tpl-primary)\"\n />\n </div>\n </div>\n</template>\n\n<style scoped>\n.tpl-media-item:not(.tpl-media-item--selected):hover {\n border-color: var(--tpl-border) !important;\n}\n\n.tpl-media-list-item:hover {\n background-color: var(--tpl-bg-hover) !important;\n}\n\n.tpl-list-icon {\n transform: scale(0.35);\n transform-origin: center;\n}\n</style>\n","<script setup lang=\"ts\">\nimport MediaFileIcon from \"./MediaFileIcon.vue\";\nimport { useI18n } from \"../../composables/useI18n\";\nimport { useMediaCategories } from \"../../composables/useMediaCategories\";\nimport type { MediaCategory, MediaItem } from \"../../types\";\nimport { useIntersectionObserver } from \"@vueuse/core\";\nimport { Check, File, LoaderCircle, Pencil, RefreshCw } from \"@lucide/vue\";\nimport { ref } from \"vue\";\n\nconst props = defineProps<{\n items: MediaItem[];\n selectedIds: Set<string>;\n isLoading: boolean;\n hasMore: boolean;\n accept?: MediaCategory[];\n layout?: \"grid\" | \"list\";\n}>();\n\nconst emit = defineEmits<{\n (e: \"select\", item: MediaItem): void;\n (e: \"toggle\", id: string): void;\n (e: \"loadMore\"): void;\n (e: \"edit\", item: MediaItem): void;\n (e: \"replace\", item: MediaItem): void;\n}>();\n\nconst { isAcceptedMimeType, isImageMimeType } = useMediaCategories();\n\nfunction isSelectable(item: MediaItem): boolean {\n if (!props.accept || props.accept.length === 0) {\n return true;\n }\n\n return isAcceptedMimeType(item.mime_type, props.accept);\n}\n\nfunction handleItemClick(item: MediaItem): void {\n emit(\"select\", item);\n}\n\nconst { t } = useI18n();\n\nconst sentinelRef = ref<HTMLElement | null>(null);\n\nuseIntersectionObserver(\n sentinelRef,\n ([{ isIntersecting }]) => {\n if (isIntersecting && props.hasMore && !props.isLoading) {\n emit(\"loadMore\");\n }\n },\n { threshold: 0.1 },\n);\n\nfunction formatSize(bytes: number): string {\n if (bytes < 1024) return `${bytes} B`;\n if (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(1)} KB`;\n return `${(bytes / (1024 * 1024)).toFixed(1)} MB`;\n}\n\nfunction formatDate(dateStr: string): string {\n return new Date(dateStr).toLocaleDateString(undefined, {\n year: \"numeric\",\n month: \"short\",\n day: \"numeric\",\n });\n}\n</script>\n\n<template>\n <div class=\"tpl:p-4\">\n <!-- Skeleton loading -->\n <div\n v-if=\"isLoading && items.length === 0\"\n :class=\"\n layout === 'list'\n ? 'tpl:flex tpl:flex-col tpl:gap-1'\n : 'tpl:grid tpl:grid-cols-4 tpl:gap-3'\n \"\n >\n <div\n v-for=\"i in 8\"\n :key=\"i\"\n class=\"tpl-pulse tpl:rounded-lg\"\n :class=\"layout === 'list' ? 'tpl:h-12' : 'tpl:aspect-square'\"\n style=\"background-color: var(--tpl-bg-hover)\"\n />\n </div>\n\n <!-- Empty state -->\n <div\n v-else-if=\"items.length === 0\"\n class=\"tpl:flex tpl:flex-col tpl:items-center tpl:justify-center tpl:py-16\"\n >\n <File\n class=\"tpl:mb-3\"\n :size=\"40\"\n :stroke-width=\"1\"\n style=\"color: var(--tpl-text-dim)\"\n />\n <p class=\"tpl:text-xs\" style=\"color: var(--tpl-text-muted)\">\n {{ t.mediaLibrary.noFiles }}\n </p>\n </div>\n\n <!-- Grid -->\n <div\n v-else-if=\"layout !== 'list'\"\n class=\"tpl:grid tpl:grid-cols-4 tpl:gap-3\"\n >\n <div\n v-for=\"item in items\"\n :key=\"item.id\"\n class=\"tpl-media-item tpl:group tpl:relative tpl:overflow-hidden tpl:rounded-lg tpl:border-2 tpl:transition-all tpl:duration-150\"\n :class=\"[\n 'tpl:cursor-pointer',\n !isSelectable(item) && !selectedIds.has(item.id)\n ? 'tpl:opacity-60'\n : '',\n selectedIds.has(item.id) ? 'tpl-media-item--selected' : '',\n ]\"\n :style=\"{\n borderColor: selectedIds.has(item.id)\n ? 'var(--tpl-primary)'\n : 'transparent',\n backgroundColor:\n !isSelectable(item) && !selectedIds.has(item.id)\n ? 'var(--tpl-bg)'\n : 'var(--tpl-bg-hover)',\n }\"\n @click=\"handleItemClick(item)\"\n >\n <div class=\"tpl:aspect-square\">\n <img\n v-if=\"isImageMimeType(item.mime_type)\"\n :src=\"item.small_url || item.url\"\n :alt=\"item.filename\"\n class=\"tpl:size-full tpl:object-cover\"\n loading=\"lazy\"\n />\n <MediaFileIcon v-else :mime-type=\"item.mime_type\" />\n </div>\n <div class=\"tpl:px-2 tpl:py-1.5\">\n <p\n class=\"tpl:truncate tpl:text-[10px] tpl:font-medium\"\n style=\"color: var(--tpl-text)\"\n >\n {{ item.filename }}\n </p>\n <p\n class=\"tpl:flex tpl:justify-between tpl:text-[9px]\"\n style=\"color: var(--tpl-text-muted)\"\n >\n <span>{{ formatSize(item.size) }}</span>\n <span\n v-if=\"\n isImageMimeType(item.mime_type) && item.width && item.height\n \"\n >\n {{ item.width }}×{{ item.height }}\n </span>\n </p>\n </div>\n <!-- Action buttons -->\n <div\n class=\"tpl:absolute tpl:top-1.5 tpl:left-1.5 tpl:flex tpl:gap-1 tpl:opacity-0 tpl:transition-opacity tpl:duration-150 tpl:group-hover:opacity-100\"\n >\n <!-- Edit button -->\n <button\n class=\"tpl:flex tpl:size-6 tpl:items-center tpl:justify-center tpl:rounded-full tpl:text-white\"\n style=\"background-color: rgba(0, 0, 0, 0.6)\"\n :title=\"t.mediaLibrary.editFile\"\n @click.stop=\"emit('edit', item)\"\n >\n <Pencil :size=\"11\" :stroke-width=\"2\" />\n </button>\n <!-- Replace button -->\n <button\n class=\"tpl:flex tpl:size-6 tpl:items-center tpl:justify-center tpl:rounded-full tpl:text-white\"\n style=\"background-color: rgba(0, 0, 0, 0.6)\"\n :title=\"t.mediaLibrary.replaceFile\"\n @click.stop=\"emit('replace', item)\"\n >\n <RefreshCw :size=\"11\" :stroke-width=\"2\" />\n </button>\n </div>\n <!-- Selection check -->\n <div\n v-if=\"selectedIds.has(item.id)\"\n class=\"tpl:absolute tpl:top-1.5 tpl:right-1.5 tpl:flex tpl:size-5 tpl:items-center tpl:justify-center tpl:rounded-full tpl:text-white\"\n style=\"background-color: var(--tpl-primary)\"\n >\n <Check :size=\"12\" :stroke-width=\"3\" />\n </div>\n </div>\n </div>\n\n <!-- List -->\n <div v-else class=\"tpl:flex tpl:flex-col tpl:gap-1\">\n <div\n v-for=\"item in items\"\n :key=\"item.id\"\n class=\"tpl-media-list-item tpl:group tpl:flex tpl:cursor-pointer tpl:items-center tpl:gap-3 tpl:rounded-lg tpl:px-3 tpl:py-2 tpl:transition-all tpl:duration-150\"\n :class=\"[\n !isSelectable(item) && !selectedIds.has(item.id)\n ? 'tpl:opacity-60'\n : '',\n ]\"\n :style=\"{\n backgroundColor: selectedIds.has(item.id)\n ? 'var(--tpl-bg-hover)'\n : 'transparent',\n }\"\n @click=\"handleItemClick(item)\"\n >\n <!-- Thumbnail -->\n <div\n class=\"tpl:size-10 tpl:shrink-0 tpl:overflow-hidden tpl:rounded\"\n style=\"background-color: var(--tpl-bg-hover)\"\n >\n <img\n v-if=\"isImageMimeType(item.mime_type)\"\n :src=\"item.small_url || item.url\"\n :alt=\"item.filename\"\n class=\"tpl:size-full tpl:object-cover\"\n loading=\"lazy\"\n />\n <div v-else class=\"tpl-list-icon tpl:size-full\">\n <MediaFileIcon :mime-type=\"item.mime_type\" />\n </div>\n </div>\n\n <!-- Info -->\n <div class=\"tpl:min-w-0 tpl:flex-1\">\n <p\n class=\"tpl:truncate tpl:text-xs tpl:font-medium\"\n style=\"color: var(--tpl-text)\"\n >\n {{ item.filename }}\n </p>\n <p class=\"tpl:text-[10px]\" style=\"color: var(--tpl-text-muted)\">\n {{ formatSize(item.size) }} ·\n {{ formatDate(item.created_at) }}\n <template\n v-if=\"\n isImageMimeType(item.mime_type) && item.width && item.height\n \"\n >\n ·\n {{ item.width }}×{{ item.height }}\n </template>\n </p>\n </div>\n\n <!-- Action buttons -->\n <div\n class=\"tpl:flex tpl:gap-1 tpl:opacity-0 tpl:transition-opacity tpl:duration-150 tpl:group-hover:opacity-100\"\n >\n <!-- Edit button -->\n <button\n class=\"tpl:flex tpl:size-6 tpl:shrink-0 tpl:cursor-pointer tpl:items-center tpl:justify-center tpl:rounded\"\n style=\"color: var(--tpl-text-muted)\"\n :title=\"t.mediaLibrary.editFile\"\n @click.stop=\"emit('edit', item)\"\n >\n <Pencil :size=\"12\" :stroke-width=\"2\" />\n </button>\n <!-- Replace button -->\n <button\n class=\"tpl:flex tpl:size-6 tpl:shrink-0 tpl:cursor-pointer tpl:items-center tpl:justify-center tpl:rounded\"\n style=\"color: var(--tpl-text-muted)\"\n :title=\"t.mediaLibrary.replaceFile\"\n @click.stop=\"emit('replace', item)\"\n >\n <RefreshCw :size=\"12\" :stroke-width=\"2\" />\n </button>\n </div>\n\n <!-- Selection check -->\n <div\n v-if=\"selectedIds.has(item.id)\"\n class=\"tpl:flex tpl:size-5 tpl:shrink-0 tpl:items-center tpl:justify-center tpl:rounded-full tpl:text-white\"\n style=\"background-color: var(--tpl-primary)\"\n >\n <Check :size=\"12\" :stroke-width=\"3\" />\n </div>\n </div>\n </div>\n\n <!-- Infinite scroll sentinel -->\n <div ref=\"sentinelRef\" class=\"tpl:h-4\" />\n\n <!-- Loading more indicator -->\n <div\n v-if=\"isLoading && items.length > 0\"\n class=\"tpl:flex tpl:justify-center tpl:py-4\"\n >\n <LoaderCircle\n class=\"tpl-spinner\"\n :size=\"20\"\n :stroke-width=\"2\"\n style=\"color: var(--tpl-primary)\"\n />\n </div>\n </div>\n</template>\n\n<style scoped>\n.tpl-media-item:not(.tpl-media-item--selected):hover {\n border-color: var(--tpl-border) !important;\n}\n\n.tpl-media-list-item:hover {\n background-color: var(--tpl-bg-hover) !important;\n}\n\n.tpl-list-icon {\n transform: scale(0.35);\n transform-origin: center;\n}\n</style>\n","<script setup lang=\"ts\">\nimport { useI18n } from \"../../composables/useI18n\";\nimport { POPOVER_TARGET_KEY } from \"../../keys\";\nimport { LoaderCircle } from \"@lucide/vue\";\nimport { inject, ref, watch, type Ref } from \"vue\";\n\nconst props = defineProps<{\n visible: boolean;\n isImporting: boolean;\n error: string | null;\n}>();\n\nconst emit = defineEmits<{\n (e: \"import\", url: string): void;\n (e: \"close\"): void;\n}>();\n\nconst { t } = useI18n();\nconst tplUiTheme = inject<Ref<\"light\" | \"dark\">>(\"tplUiTheme\");\nconst popoverTarget = inject(POPOVER_TARGET_KEY, ref<HTMLElement | null>(null));\n\nconst urlValue = ref(\"\");\n\nwatch(\n () => props.visible,\n (visible) => {\n if (visible) {\n urlValue.value = \"\";\n }\n },\n);\n\nfunction handleImport(): void {\n const trimmedUrl = urlValue.value.trim();\n if (!trimmedUrl || props.isImporting) {\n return;\n }\n\n emit(\"import\", trimmedUrl);\n}\n\nfunction handleClose(): void {\n if (!props.isImporting) {\n emit(\"close\");\n }\n}\n\nfunction handleKeydown(event: KeyboardEvent): void {\n if (event.key === \"Enter\") {\n event.preventDefault();\n handleImport();\n }\n if (event.key === \"Escape\") {\n handleClose();\n }\n}\n</script>\n\n<template>\n <Teleport :to=\"popoverTarget || 'body'\">\n <Transition\n enter-active-class=\"tpl:transition tpl:ease-out tpl:duration-150\"\n enter-from-class=\"tpl:opacity-0\"\n enter-to-class=\"tpl:opacity-100\"\n leave-active-class=\"tpl:transition tpl:ease-in tpl:duration-100\"\n leave-from-class=\"tpl:opacity-100\"\n leave-to-class=\"tpl:opacity-0\"\n >\n <div\n v-if=\"visible\"\n :data-tpl-theme=\"tplUiTheme\"\n class=\"tpl tpl:fixed tpl:inset-0 tpl:z-[10000] tpl:flex tpl:items-center tpl:justify-center\"\n style=\"background-color: var(--tpl-overlay)\"\n @click.self=\"handleClose\"\n @keydown=\"handleKeydown\"\n >\n <div\n class=\"tpl:mx-4 tpl:w-full tpl:max-w-sm tpl:rounded-lg tpl:p-5 tpl:shadow-xl\"\n style=\"background-color: var(--tpl-bg-elevated)\"\n >\n <h3\n class=\"tpl:mb-4 tpl:text-sm tpl:font-semibold\"\n style=\"color: var(--tpl-text)\"\n >\n {{ t.mediaLibrary.importFromUrl }}\n </h3>\n\n <!-- URL Input -->\n <div class=\"tpl:mb-3\">\n <input\n v-model=\"urlValue\"\n type=\"url\"\n class=\"tpl:w-full tpl:rounded-md tpl:border tpl:px-3 tpl:py-1.5 tpl:text-xs tpl:outline-none\"\n style=\"\n border-color: var(--tpl-border);\n background-color: var(--tpl-bg);\n color: var(--tpl-text);\n \"\n :placeholder=\"t.mediaLibrary.importUrlPlaceholder\"\n :disabled=\"isImporting\"\n autofocus\n />\n </div>\n\n <!-- Error message -->\n <p\n v-if=\"error\"\n class=\"tpl:mb-3 tpl:text-xs\"\n style=\"color: var(--tpl-danger)\"\n >\n {{ error }}\n </p>\n\n <!-- Actions -->\n <div class=\"tpl:flex tpl:justify-end tpl:gap-2\">\n <button\n class=\"tpl:cursor-pointer tpl:rounded-md tpl:border tpl:px-3 tpl:py-1.5 tpl:text-xs tpl:font-medium tpl:transition-all tpl:duration-150\"\n style=\"\n border-color: var(--tpl-border);\n color: var(--tpl-text);\n background-color: var(--tpl-bg);\n \"\n :disabled=\"isImporting\"\n :class=\"{\n 'tpl:cursor-not-allowed tpl:opacity-50': isImporting,\n }\"\n @click=\"handleClose\"\n >\n {{ t.mediaLibrary.cancel }}\n </button>\n <button\n class=\"tpl:cursor-pointer tpl:rounded-md tpl:px-3 tpl:py-1.5 tpl:text-xs tpl:font-medium tpl:text-white tpl:transition-all tpl:duration-150 tpl:disabled:cursor-not-allowed tpl:disabled:opacity-50\"\n style=\"\n background: linear-gradient(\n 135deg,\n var(--tpl-primary),\n var(--tpl-primary-hover)\n );\n \"\n :disabled=\"!urlValue.trim() || isImporting\"\n @click=\"handleImport\"\n >\n <span\n v-if=\"isImporting\"\n class=\"tpl:flex tpl:items-center tpl:gap-1.5\"\n >\n <LoaderCircle\n class=\"tpl:animate-spin\"\n :size=\"12\"\n :stroke-width=\"2\"\n />\n {{ t.mediaLibrary.importing }}\n </span>\n <span v-else>\n {{ t.mediaLibrary.import }}\n </span>\n </button>\n </div>\n </div>\n </div>\n </Transition>\n </Teleport>\n</template>\n","<script setup lang=\"ts\">\nimport { useI18n } from \"../../composables/useI18n\";\nimport { POPOVER_TARGET_KEY } from \"../../keys\";\nimport { LoaderCircle } from \"@lucide/vue\";\nimport { inject, ref, watch, type Ref } from \"vue\";\n\nconst props = defineProps<{\n visible: boolean;\n isImporting: boolean;\n error: string | null;\n}>();\n\nconst emit = defineEmits<{\n (e: \"import\", url: string): void;\n (e: \"close\"): void;\n}>();\n\nconst { t } = useI18n();\nconst tplUiTheme = inject<Ref<\"light\" | \"dark\">>(\"tplUiTheme\");\nconst popoverTarget = inject(POPOVER_TARGET_KEY, ref<HTMLElement | null>(null));\n\nconst urlValue = ref(\"\");\n\nwatch(\n () => props.visible,\n (visible) => {\n if (visible) {\n urlValue.value = \"\";\n }\n },\n);\n\nfunction handleImport(): void {\n const trimmedUrl = urlValue.value.trim();\n if (!trimmedUrl || props.isImporting) {\n return;\n }\n\n emit(\"import\", trimmedUrl);\n}\n\nfunction handleClose(): void {\n if (!props.isImporting) {\n emit(\"close\");\n }\n}\n\nfunction handleKeydown(event: KeyboardEvent): void {\n if (event.key === \"Enter\") {\n event.preventDefault();\n handleImport();\n }\n if (event.key === \"Escape\") {\n handleClose();\n }\n}\n</script>\n\n<template>\n <Teleport :to=\"popoverTarget || 'body'\">\n <Transition\n enter-active-class=\"tpl:transition tpl:ease-out tpl:duration-150\"\n enter-from-class=\"tpl:opacity-0\"\n enter-to-class=\"tpl:opacity-100\"\n leave-active-class=\"tpl:transition tpl:ease-in tpl:duration-100\"\n leave-from-class=\"tpl:opacity-100\"\n leave-to-class=\"tpl:opacity-0\"\n >\n <div\n v-if=\"visible\"\n :data-tpl-theme=\"tplUiTheme\"\n class=\"tpl tpl:fixed tpl:inset-0 tpl:z-[10000] tpl:flex tpl:items-center tpl:justify-center\"\n style=\"background-color: var(--tpl-overlay)\"\n @click.self=\"handleClose\"\n @keydown=\"handleKeydown\"\n >\n <div\n class=\"tpl:mx-4 tpl:w-full tpl:max-w-sm tpl:rounded-lg tpl:p-5 tpl:shadow-xl\"\n style=\"background-color: var(--tpl-bg-elevated)\"\n >\n <h3\n class=\"tpl:mb-4 tpl:text-sm tpl:font-semibold\"\n style=\"color: var(--tpl-text)\"\n >\n {{ t.mediaLibrary.importFromUrl }}\n </h3>\n\n <!-- URL Input -->\n <div class=\"tpl:mb-3\">\n <input\n v-model=\"urlValue\"\n type=\"url\"\n class=\"tpl:w-full tpl:rounded-md tpl:border tpl:px-3 tpl:py-1.5 tpl:text-xs tpl:outline-none\"\n style=\"\n border-color: var(--tpl-border);\n background-color: var(--tpl-bg);\n color: var(--tpl-text);\n \"\n :placeholder=\"t.mediaLibrary.importUrlPlaceholder\"\n :disabled=\"isImporting\"\n autofocus\n />\n </div>\n\n <!-- Error message -->\n <p\n v-if=\"error\"\n class=\"tpl:mb-3 tpl:text-xs\"\n style=\"color: var(--tpl-danger)\"\n >\n {{ error }}\n </p>\n\n <!-- Actions -->\n <div class=\"tpl:flex tpl:justify-end tpl:gap-2\">\n <button\n class=\"tpl:cursor-pointer tpl:rounded-md tpl:border tpl:px-3 tpl:py-1.5 tpl:text-xs tpl:font-medium tpl:transition-all tpl:duration-150\"\n style=\"\n border-color: var(--tpl-border);\n color: var(--tpl-text);\n background-color: var(--tpl-bg);\n \"\n :disabled=\"isImporting\"\n :class=\"{\n 'tpl:cursor-not-allowed tpl:opacity-50': isImporting,\n }\"\n @click=\"handleClose\"\n >\n {{ t.mediaLibrary.cancel }}\n </button>\n <button\n class=\"tpl:cursor-pointer tpl:rounded-md tpl:px-3 tpl:py-1.5 tpl:text-xs tpl:font-medium tpl:text-white tpl:transition-all tpl:duration-150 tpl:disabled:cursor-not-allowed tpl:disabled:opacity-50\"\n style=\"\n background: linear-gradient(\n 135deg,\n var(--tpl-primary),\n var(--tpl-primary-hover)\n );\n \"\n :disabled=\"!urlValue.trim() || isImporting\"\n @click=\"handleImport\"\n >\n <span\n v-if=\"isImporting\"\n class=\"tpl:flex tpl:items-center tpl:gap-1.5\"\n >\n <LoaderCircle\n class=\"tpl:animate-spin\"\n :size=\"12\"\n :stroke-width=\"2\"\n />\n {{ t.mediaLibrary.importing }}\n </span>\n <span v-else>\n {{ t.mediaLibrary.import }}\n </span>\n </button>\n </div>\n </div>\n </div>\n </Transition>\n </Teleport>\n</template>\n","<script setup lang=\"ts\">\nimport { useI18n } from \"../../composables/useI18n\";\nimport type { MediaFolder } from \"../../types\";\nimport { onClickOutside } from \"@vueuse/core\";\nimport { File, Folder } from \"@lucide/vue\";\nimport { ref } from \"vue\";\n\ndefineProps<{\n folders: MediaFolder[];\n currentFolderId: string | null;\n}>();\n\nconst emit = defineEmits<{\n (e: \"select\", folderId: string | null): void;\n (e: \"close\"): void;\n}>();\n\nconst { t } = useI18n();\nconst pickerRef = ref<HTMLDivElement | null>(null);\n\ninterface FlatFolder {\n id: string;\n name: string;\n depth: number;\n}\n\nfunction flattenFolders(\n folders: MediaFolder[],\n depth: number = 0,\n): FlatFolder[] {\n const result: FlatFolder[] = [];\n for (const folder of folders) {\n result.push({ id: folder.id, name: folder.name, depth });\n if (folder.children?.length) {\n result.push(...flattenFolders(folder.children, depth + 1));\n }\n }\n return result;\n}\n\nonClickOutside(pickerRef, () => {\n emit(\"close\");\n});\n</script>\n\n<template>\n <div\n ref=\"pickerRef\"\n class=\"tpl:absolute tpl:bottom-full tpl:left-0 tpl:z-10 tpl:mb-2 tpl:w-56 tpl:overflow-hidden tpl:rounded-lg tpl:border tpl:shadow-lg\"\n style=\"\n border-color: var(--tpl-border);\n background-color: var(--tpl-bg-elevated);\n \"\n >\n <div class=\"tpl:max-h-56 tpl:overflow-y-auto tpl:py-1\">\n <button\n v-if=\"currentFolderId !== null\"\n class=\"tpl:flex tpl:w-full tpl:items-center tpl:gap-1.5 tpl:px-3 tpl:py-1.5 tpl:text-left tpl:text-xs tpl:transition-colors tpl:duration-100\"\n style=\"color: var(--tpl-text)\"\n @click=\"emit('select', null)\"\n >\n <File class=\"tpl:shrink-0\" :size=\"14\" :stroke-width=\"1.5\" />\n {{ t.mediaLibrary.moveToRoot }}\n </button>\n <button\n v-for=\"folder in flattenFolders(folders)\"\n :key=\"folder.id\"\n class=\"tpl:flex tpl:w-full tpl:items-center tpl:gap-1.5 tpl:py-1.5 tpl:pr-3 tpl:text-left tpl:text-xs tpl:transition-colors tpl:duration-100\"\n :style=\"{\n paddingLeft: `${folder.depth * 16 + 12}px`,\n color:\n folder.id === currentFolderId\n ? 'var(--tpl-text-dim)'\n : 'var(--tpl-text)',\n opacity: folder.id === currentFolderId ? 0.5 : 1,\n }\"\n :disabled=\"folder.id === currentFolderId\"\n @click=\"emit('select', folder.id)\"\n >\n <Folder class=\"tpl:shrink-0\" :size=\"14\" :stroke-width=\"1.5\" />\n <span class=\"tpl:truncate\">{{ folder.name }}</span>\n <span\n v-if=\"folder.id === currentFolderId\"\n class=\"tpl:shrink-0\"\n style=\"color: var(--tpl-text-dim)\"\n >\n {{ t.mediaLibrary.currentFolder }}\n </span>\n </button>\n </div>\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport { useI18n } from \"../../composables/useI18n\";\nimport type { MediaFolder } from \"../../types\";\nimport { onClickOutside } from \"@vueuse/core\";\nimport { File, Folder } from \"@lucide/vue\";\nimport { ref } from \"vue\";\n\ndefineProps<{\n folders: MediaFolder[];\n currentFolderId: string | null;\n}>();\n\nconst emit = defineEmits<{\n (e: \"select\", folderId: string | null): void;\n (e: \"close\"): void;\n}>();\n\nconst { t } = useI18n();\nconst pickerRef = ref<HTMLDivElement | null>(null);\n\ninterface FlatFolder {\n id: string;\n name: string;\n depth: number;\n}\n\nfunction flattenFolders(\n folders: MediaFolder[],\n depth: number = 0,\n): FlatFolder[] {\n const result: FlatFolder[] = [];\n for (const folder of folders) {\n result.push({ id: folder.id, name: folder.name, depth });\n if (folder.children?.length) {\n result.push(...flattenFolders(folder.children, depth + 1));\n }\n }\n return result;\n}\n\nonClickOutside(pickerRef, () => {\n emit(\"close\");\n});\n</script>\n\n<template>\n <div\n ref=\"pickerRef\"\n class=\"tpl:absolute tpl:bottom-full tpl:left-0 tpl:z-10 tpl:mb-2 tpl:w-56 tpl:overflow-hidden tpl:rounded-lg tpl:border tpl:shadow-lg\"\n style=\"\n border-color: var(--tpl-border);\n background-color: var(--tpl-bg-elevated);\n \"\n >\n <div class=\"tpl:max-h-56 tpl:overflow-y-auto tpl:py-1\">\n <button\n v-if=\"currentFolderId !== null\"\n class=\"tpl:flex tpl:w-full tpl:items-center tpl:gap-1.5 tpl:px-3 tpl:py-1.5 tpl:text-left tpl:text-xs tpl:transition-colors tpl:duration-100\"\n style=\"color: var(--tpl-text)\"\n @click=\"emit('select', null)\"\n >\n <File class=\"tpl:shrink-0\" :size=\"14\" :stroke-width=\"1.5\" />\n {{ t.mediaLibrary.moveToRoot }}\n </button>\n <button\n v-for=\"folder in flattenFolders(folders)\"\n :key=\"folder.id\"\n class=\"tpl:flex tpl:w-full tpl:items-center tpl:gap-1.5 tpl:py-1.5 tpl:pr-3 tpl:text-left tpl:text-xs tpl:transition-colors tpl:duration-100\"\n :style=\"{\n paddingLeft: `${folder.depth * 16 + 12}px`,\n color:\n folder.id === currentFolderId\n ? 'var(--tpl-text-dim)'\n : 'var(--tpl-text)',\n opacity: folder.id === currentFolderId ? 0.5 : 1,\n }\"\n :disabled=\"folder.id === currentFolderId\"\n @click=\"emit('select', folder.id)\"\n >\n <Folder class=\"tpl:shrink-0\" :size=\"14\" :stroke-width=\"1.5\" />\n <span class=\"tpl:truncate\">{{ folder.name }}</span>\n <span\n v-if=\"folder.id === currentFolderId\"\n class=\"tpl:shrink-0\"\n style=\"color: var(--tpl-text-dim)\"\n >\n {{ t.mediaLibrary.currentFolder }}\n </span>\n </button>\n </div>\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport MediaFileIcon from \"./MediaFileIcon.vue\";\nimport { useI18n } from \"../../composables/useI18n\";\nimport { useMediaCategories } from \"../../composables/useMediaCategories\";\nimport type { MediaConversion, MediaFolder, MediaItem } from \"../../types\";\nimport { Folder } from \"@lucide/vue\";\nimport { computed } from \"vue\";\n\nconst props = defineProps<{\n item: MediaItem;\n folders?: MediaFolder[];\n selectedConversion: MediaConversion;\n}>();\n\nconst emit = defineEmits<{\n (e: \"update:selectedConversion\", value: MediaConversion): void;\n}>();\n\nconst { t } = useI18n();\n\nconst { isImageMimeType } = useMediaCategories();\n\ninterface ConversionOption {\n value: MediaConversion;\n label: string;\n url: string | null;\n}\n\nconst availableConversions = computed((): ConversionOption[] => {\n if (!isImage.value || !props.item.conversions_generated) {\n return [];\n }\n\n const options: ConversionOption[] = [];\n\n if (props.item.small_url) {\n options.push({\n value: \"small\",\n label: t.mediaLibrary.conversionSmall,\n url: props.item.small_url,\n });\n }\n\n if (props.item.medium_url) {\n options.push({\n value: \"medium\",\n label: t.mediaLibrary.conversionMedium,\n url: props.item.medium_url,\n });\n }\n\n if (props.item.large_url) {\n options.push({\n value: \"large\",\n label: t.mediaLibrary.conversionLarge,\n url: props.item.large_url,\n });\n }\n\n // Always add original option\n options.push({\n value: \"original\",\n label: t.mediaLibrary.conversionOriginal,\n url: props.item.url,\n });\n\n return options;\n});\n\nconst hasConversions = computed(\n () => isImage.value && availableConversions.value.length > 1,\n);\n\nconst previewUrl = computed(() => {\n if (!isImage.value) return null;\n\n switch (props.selectedConversion) {\n case \"small\":\n return props.item.small_url || props.item.url;\n case \"medium\":\n return props.item.medium_url || props.item.url;\n case \"large\":\n return props.item.large_url || props.item.url;\n default:\n return props.item.url;\n }\n});\n\nfunction handleConversionChange(event: Event): void {\n const target = event.target as HTMLSelectElement;\n emit(\"update:selectedConversion\", target.value as MediaConversion);\n}\n\nfunction buildFolderPath(\n folderList: MediaFolder[],\n targetId: string,\n currentPath: string[] = [],\n): string[] | null {\n for (const folder of folderList) {\n const newPath = [...currentPath, folder.name];\n if (folder.id === targetId) {\n return newPath;\n }\n if (folder.children) {\n const found = buildFolderPath(folder.children, targetId, newPath);\n if (found) return found;\n }\n }\n return null;\n}\n\nconst folderPath = computed(() => {\n if (!props.item.folder_id || !props.folders) {\n return null;\n }\n const path = buildFolderPath(props.folders, props.item.folder_id);\n return path ? path.join(\"/\") : null;\n});\n\nconst isImage = computed(() => isImageMimeType(props.item.mime_type));\n\nfunction formatSize(bytes: number): string {\n if (bytes < 1024) return `${bytes} B`;\n if (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(1)} KB`;\n return `${(bytes / (1024 * 1024)).toFixed(1)} MB`;\n}\n\nfunction formatDate(dateStr: string): string {\n return new Date(dateStr).toLocaleDateString(undefined, {\n year: \"numeric\",\n month: \"short\",\n day: \"numeric\",\n });\n}\n</script>\n\n<template>\n <div class=\"tpl:flex tpl:items-center tpl:gap-3\">\n <img\n v-if=\"isImage\"\n :src=\"previewUrl ?? undefined\"\n :alt=\"item.alt_text || item.filename\"\n class=\"tpl:size-10 tpl:shrink-0 tpl:rounded tpl:object-cover\"\n style=\"border: 1px solid var(--tpl-border)\"\n />\n <div\n v-else\n class=\"tpl:flex tpl:size-10 tpl:shrink-0 tpl:items-center tpl:justify-center tpl:overflow-hidden tpl:rounded\"\n style=\"border: 1px solid var(--tpl-border)\"\n >\n <MediaFileIcon :mime-type=\"item.mime_type\" class=\"tpl-preview-icon\" />\n </div>\n <div class=\"tpl:min-w-0 tpl:flex-1\">\n <p\n class=\"tpl:truncate tpl:text-xs tpl:font-medium\"\n style=\"color: var(--tpl-text)\"\n >\n {{ item.filename }}\n </p>\n <p\n class=\"tpl:mt-0.5 tpl:text-[10px]\"\n style=\"color: var(--tpl-text-muted)\"\n >\n {{ formatSize(item.size) }}\n · {{ formatDate(item.created_at) }}\n <template v-if=\"isImage && item.width && item.height\">\n · {{ item.width }}×{{ item.height }}px\n </template>\n <template v-if=\"folderPath\">\n ·\n <Folder class=\"tpl:mb-px tpl:inline\" :size=\"9\" :stroke-width=\"2\" />\n {{ folderPath }}\n </template>\n </p>\n <p\n v-if=\"isImage\"\n class=\"tpl:mt-0.5 tpl:truncate tpl:text-[10px] tpl:italic\"\n :class=\"{ 'tpl:invisible': !item.alt_text }\"\n style=\"color: var(--tpl-text-dim)\"\n >\n {{ item.alt_text || \" \" }}\n </p>\n </div>\n <!-- Conversion selector -->\n <div v-if=\"hasConversions\" class=\"tpl:shrink-0\">\n <label\n class=\"tpl:block tpl:text-[10px]\"\n style=\"color: var(--tpl-text-muted)\"\n >\n {{ t.mediaLibrary.conversionLabel }}\n </label>\n <select\n class=\"tpl:mt-0.5 tpl:rounded-md tpl:border tpl:py-1 tpl:pr-6 tpl:pl-2 tpl:text-xs tpl:outline-none\"\n style=\"\n border-color: var(--tpl-border);\n background-color: var(--tpl-bg);\n color: var(--tpl-text);\n \"\n :value=\"selectedConversion\"\n @change=\"handleConversionChange\"\n >\n <option\n v-for=\"option in availableConversions\"\n :key=\"option.value\"\n :value=\"option.value\"\n >\n {{ option.label }}\n </option>\n </select>\n </div>\n </div>\n</template>\n\n<style scoped>\n.tpl-preview-icon {\n transform: scale(0.45);\n transform-origin: center;\n}\n</style>\n","<script setup lang=\"ts\">\nimport MediaFileIcon from \"./MediaFileIcon.vue\";\nimport { useI18n } from \"../../composables/useI18n\";\nimport { useMediaCategories } from \"../../composables/useMediaCategories\";\nimport type { MediaConversion, MediaFolder, MediaItem } from \"../../types\";\nimport { Folder } from \"@lucide/vue\";\nimport { computed } from \"vue\";\n\nconst props = defineProps<{\n item: MediaItem;\n folders?: MediaFolder[];\n selectedConversion: MediaConversion;\n}>();\n\nconst emit = defineEmits<{\n (e: \"update:selectedConversion\", value: MediaConversion): void;\n}>();\n\nconst { t } = useI18n();\n\nconst { isImageMimeType } = useMediaCategories();\n\ninterface ConversionOption {\n value: MediaConversion;\n label: string;\n url: string | null;\n}\n\nconst availableConversions = computed((): ConversionOption[] => {\n if (!isImage.value || !props.item.conversions_generated) {\n return [];\n }\n\n const options: ConversionOption[] = [];\n\n if (props.item.small_url) {\n options.push({\n value: \"small\",\n label: t.mediaLibrary.conversionSmall,\n url: props.item.small_url,\n });\n }\n\n if (props.item.medium_url) {\n options.push({\n value: \"medium\",\n label: t.mediaLibrary.conversionMedium,\n url: props.item.medium_url,\n });\n }\n\n if (props.item.large_url) {\n options.push({\n value: \"large\",\n label: t.mediaLibrary.conversionLarge,\n url: props.item.large_url,\n });\n }\n\n // Always add original option\n options.push({\n value: \"original\",\n label: t.mediaLibrary.conversionOriginal,\n url: props.item.url,\n });\n\n return options;\n});\n\nconst hasConversions = computed(\n () => isImage.value && availableConversions.value.length > 1,\n);\n\nconst previewUrl = computed(() => {\n if (!isImage.value) return null;\n\n switch (props.selectedConversion) {\n case \"small\":\n return props.item.small_url || props.item.url;\n case \"medium\":\n return props.item.medium_url || props.item.url;\n case \"large\":\n return props.item.large_url || props.item.url;\n default:\n return props.item.url;\n }\n});\n\nfunction handleConversionChange(event: Event): void {\n const target = event.target as HTMLSelectElement;\n emit(\"update:selectedConversion\", target.value as MediaConversion);\n}\n\nfunction buildFolderPath(\n folderList: MediaFolder[],\n targetId: string,\n currentPath: string[] = [],\n): string[] | null {\n for (const folder of folderList) {\n const newPath = [...currentPath, folder.name];\n if (folder.id === targetId) {\n return newPath;\n }\n if (folder.children) {\n const found = buildFolderPath(folder.children, targetId, newPath);\n if (found) return found;\n }\n }\n return null;\n}\n\nconst folderPath = computed(() => {\n if (!props.item.folder_id || !props.folders) {\n return null;\n }\n const path = buildFolderPath(props.folders, props.item.folder_id);\n return path ? path.join(\"/\") : null;\n});\n\nconst isImage = computed(() => isImageMimeType(props.item.mime_type));\n\nfunction formatSize(bytes: number): string {\n if (bytes < 1024) return `${bytes} B`;\n if (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(1)} KB`;\n return `${(bytes / (1024 * 1024)).toFixed(1)} MB`;\n}\n\nfunction formatDate(dateStr: string): string {\n return new Date(dateStr).toLocaleDateString(undefined, {\n year: \"numeric\",\n month: \"short\",\n day: \"numeric\",\n });\n}\n</script>\n\n<template>\n <div class=\"tpl:flex tpl:items-center tpl:gap-3\">\n <img\n v-if=\"isImage\"\n :src=\"previewUrl ?? undefined\"\n :alt=\"item.alt_text || item.filename\"\n class=\"tpl:size-10 tpl:shrink-0 tpl:rounded tpl:object-cover\"\n style=\"border: 1px solid var(--tpl-border)\"\n />\n <div\n v-else\n class=\"tpl:flex tpl:size-10 tpl:shrink-0 tpl:items-center tpl:justify-center tpl:overflow-hidden tpl:rounded\"\n style=\"border: 1px solid var(--tpl-border)\"\n >\n <MediaFileIcon :mime-type=\"item.mime_type\" class=\"tpl-preview-icon\" />\n </div>\n <div class=\"tpl:min-w-0 tpl:flex-1\">\n <p\n class=\"tpl:truncate tpl:text-xs tpl:font-medium\"\n style=\"color: var(--tpl-text)\"\n >\n {{ item.filename }}\n </p>\n <p\n class=\"tpl:mt-0.5 tpl:text-[10px]\"\n style=\"color: var(--tpl-text-muted)\"\n >\n {{ formatSize(item.size) }}\n · {{ formatDate(item.created_at) }}\n <template v-if=\"isImage && item.width && item.height\">\n · {{ item.width }}×{{ item.height }}px\n </template>\n <template v-if=\"folderPath\">\n ·\n <Folder class=\"tpl:mb-px tpl:inline\" :size=\"9\" :stroke-width=\"2\" />\n {{ folderPath }}\n </template>\n </p>\n <p\n v-if=\"isImage\"\n class=\"tpl:mt-0.5 tpl:truncate tpl:text-[10px] tpl:italic\"\n :class=\"{ 'tpl:invisible': !item.alt_text }\"\n style=\"color: var(--tpl-text-dim)\"\n >\n {{ item.alt_text || \" \" }}\n </p>\n </div>\n <!-- Conversion selector -->\n <div v-if=\"hasConversions\" class=\"tpl:shrink-0\">\n <label\n class=\"tpl:block tpl:text-[10px]\"\n style=\"color: var(--tpl-text-muted)\"\n >\n {{ t.mediaLibrary.conversionLabel }}\n </label>\n <select\n class=\"tpl:mt-0.5 tpl:rounded-md tpl:border tpl:py-1 tpl:pr-6 tpl:pl-2 tpl:text-xs tpl:outline-none\"\n style=\"\n border-color: var(--tpl-border);\n background-color: var(--tpl-bg);\n color: var(--tpl-text);\n \"\n :value=\"selectedConversion\"\n @change=\"handleConversionChange\"\n >\n <option\n v-for=\"option in availableConversions\"\n :key=\"option.value\"\n :value=\"option.value\"\n >\n {{ option.label }}\n </option>\n </select>\n </div>\n </div>\n</template>\n\n<style scoped>\n.tpl-preview-icon {\n transform: scale(0.45);\n transform-origin: center;\n}\n</style>\n","<script setup lang=\"ts\">\nimport { useI18n } from \"../../composables/useI18n\";\nimport { POPOVER_TARGET_KEY } from \"../../keys\";\nimport type { MediaItem, MediaUsageInfo } from \"../../types\";\nimport { computed, inject, ref, watch, type Ref } from \"vue\";\n\nconst props = defineProps<{\n visible: boolean;\n item: MediaItem | null;\n usageInfo: MediaUsageInfo | null;\n isReplacing: boolean;\n error: string | null;\n}>();\n\nconst emit = defineEmits<{\n (e: \"replace\", file: File): void;\n (e: \"close\"): void;\n}>();\n\nconst { t } = useI18n();\nconst tplUiTheme = inject<Ref<\"light\" | \"dark\">>(\"tplUiTheme\");\nconst popoverTarget = inject(POPOVER_TARGET_KEY, ref<HTMLElement | null>(null));\n\nconst fileInputRef = ref<HTMLInputElement | null>(null);\nconst selectedFile = ref<File | null>(null);\n\nconst extension = computed(() => {\n if (!props.item) {\n return \"\";\n }\n\n const parts = props.item.filename.split(\".\");\n return parts.length > 1 ? parts[parts.length - 1].toLowerCase() : \"\";\n});\n\nconst acceptPattern = computed(() => {\n return extension.value ? `.${extension.value}` : \"*\";\n});\n\nconst hasUsage = computed(() => {\n return (props.usageInfo?.template_count ?? 0) > 0;\n});\n\nwatch(\n () => props.visible,\n (visible) => {\n if (!visible) {\n selectedFile.value = null;\n if (fileInputRef.value) {\n fileInputRef.value.value = \"\";\n }\n }\n },\n);\n\nfunction handleFileChange(event: Event): void {\n const input = event.target as HTMLInputElement;\n if (input.files && input.files.length > 0) {\n selectedFile.value = input.files[0];\n }\n}\n\nfunction handleReplace(): void {\n if (selectedFile.value) {\n emit(\"replace\", selectedFile.value);\n }\n}\n\nfunction handleKeydown(event: KeyboardEvent): void {\n if (event.key === \"Escape\") {\n emit(\"close\");\n }\n}\n</script>\n\n<template>\n <Teleport :to=\"popoverTarget || 'body'\">\n <Transition\n enter-active-class=\"tpl:transition tpl:ease-out tpl:duration-150\"\n enter-from-class=\"tpl:opacity-0\"\n enter-to-class=\"tpl:opacity-100\"\n leave-active-class=\"tpl:transition tpl:ease-in tpl:duration-100\"\n leave-from-class=\"tpl:opacity-100\"\n leave-to-class=\"tpl:opacity-0\"\n >\n <div\n v-if=\"visible && item\"\n :data-tpl-theme=\"tplUiTheme\"\n class=\"tpl tpl:fixed tpl:inset-0 tpl:z-[10000] tpl:flex tpl:items-center tpl:justify-center\"\n style=\"background-color: var(--tpl-overlay)\"\n @click.self=\"emit('close')\"\n @keydown=\"handleKeydown\"\n >\n <div\n class=\"tpl:mx-4 tpl:w-full tpl:max-w-sm tpl:rounded-lg tpl:p-5 tpl:shadow-xl\"\n style=\"background-color: var(--tpl-bg-elevated)\"\n >\n <h3\n class=\"tpl:mb-2 tpl:text-sm tpl:font-semibold\"\n style=\"color: var(--tpl-text)\"\n >\n {{ t.mediaLibrary.replaceWarningTitle }}\n </h3>\n\n <!-- Warning message -->\n <p class=\"tpl:mb-2 tpl:text-xs\" style=\"color: var(--tpl-text-muted)\">\n {{\n t.mediaLibrary.replaceWarningMessage.replace(\n \"{extension}\",\n `.${extension}`,\n )\n }}\n </p>\n\n <!-- Usage warning -->\n <p\n v-if=\"hasUsage\"\n class=\"tpl:mb-3 tpl:text-xs\"\n style=\"color: var(--tpl-warning)\"\n >\n {{\n t.mediaLibrary.replaceWarningUsageNote.replace(\n \"{count}\",\n usageInfo!.template_count.toString(),\n )\n }}\n </p>\n\n <!-- Current file info -->\n <div\n class=\"tpl:mb-3 tpl:rounded tpl:border tpl:p-2\"\n style=\"border-color: var(--tpl-border)\"\n >\n <p\n class=\"tpl:truncate tpl:text-xs tpl:font-medium\"\n style=\"color: var(--tpl-text)\"\n >\n {{ item.filename }}\n </p>\n </div>\n\n <!-- File input -->\n <div class=\"tpl:mb-4\">\n <label\n class=\"tpl:mb-1 tpl:block tpl:text-xs tpl:font-medium\"\n style=\"color: var(--tpl-text-muted)\"\n >\n {{ t.mediaLibrary.replaceSelectFile }}\n </label>\n <input\n ref=\"fileInputRef\"\n type=\"file\"\n :accept=\"acceptPattern\"\n class=\"tpl:w-full tpl:rounded-md tpl:border tpl:px-3 tpl:py-1.5 tpl:text-xs\"\n style=\"\n border-color: var(--tpl-border);\n background-color: var(--tpl-bg);\n color: var(--tpl-text);\n \"\n @change=\"handleFileChange\"\n />\n </div>\n\n <!-- Error message -->\n <p\n v-if=\"error\"\n class=\"tpl:mb-3 tpl:text-xs\"\n style=\"color: var(--tpl-danger)\"\n >\n {{ error }}\n </p>\n\n <!-- Actions -->\n <div class=\"tpl:flex tpl:justify-end tpl:gap-2\">\n <button\n class=\"tpl:cursor-pointer tpl:rounded-md tpl:border tpl:px-3 tpl:py-1.5 tpl:text-xs tpl:font-medium tpl:transition-all tpl:duration-150\"\n style=\"\n border-color: var(--tpl-border);\n color: var(--tpl-text);\n background-color: var(--tpl-bg);\n \"\n :disabled=\"isReplacing\"\n @click=\"emit('close')\"\n >\n {{ t.mediaLibrary.cancel }}\n </button>\n <button\n class=\"tpl:cursor-pointer tpl:rounded-md tpl:px-3 tpl:py-1.5 tpl:text-xs tpl:font-medium tpl:text-white tpl:transition-all tpl:duration-150 tpl:disabled:cursor-not-allowed tpl:disabled:opacity-50\"\n style=\"\n background: linear-gradient(\n 135deg,\n var(--tpl-primary),\n var(--tpl-primary-hover)\n );\n \"\n :disabled=\"!selectedFile || isReplacing\"\n @click=\"handleReplace\"\n >\n {{\n isReplacing ? t.mediaLibrary.replacing : t.mediaLibrary.replace\n }}\n </button>\n </div>\n </div>\n </div>\n </Transition>\n </Teleport>\n</template>\n","<script setup lang=\"ts\">\nimport { useI18n } from \"../../composables/useI18n\";\nimport { POPOVER_TARGET_KEY } from \"../../keys\";\nimport type { MediaItem, MediaUsageInfo } from \"../../types\";\nimport { computed, inject, ref, watch, type Ref } from \"vue\";\n\nconst props = defineProps<{\n visible: boolean;\n item: MediaItem | null;\n usageInfo: MediaUsageInfo | null;\n isReplacing: boolean;\n error: string | null;\n}>();\n\nconst emit = defineEmits<{\n (e: \"replace\", file: File): void;\n (e: \"close\"): void;\n}>();\n\nconst { t } = useI18n();\nconst tplUiTheme = inject<Ref<\"light\" | \"dark\">>(\"tplUiTheme\");\nconst popoverTarget = inject(POPOVER_TARGET_KEY, ref<HTMLElement | null>(null));\n\nconst fileInputRef = ref<HTMLInputElement | null>(null);\nconst selectedFile = ref<File | null>(null);\n\nconst extension = computed(() => {\n if (!props.item) {\n return \"\";\n }\n\n const parts = props.item.filename.split(\".\");\n return parts.length > 1 ? parts[parts.length - 1].toLowerCase() : \"\";\n});\n\nconst acceptPattern = computed(() => {\n return extension.value ? `.${extension.value}` : \"*\";\n});\n\nconst hasUsage = computed(() => {\n return (props.usageInfo?.template_count ?? 0) > 0;\n});\n\nwatch(\n () => props.visible,\n (visible) => {\n if (!visible) {\n selectedFile.value = null;\n if (fileInputRef.value) {\n fileInputRef.value.value = \"\";\n }\n }\n },\n);\n\nfunction handleFileChange(event: Event): void {\n const input = event.target as HTMLInputElement;\n if (input.files && input.files.length > 0) {\n selectedFile.value = input.files[0];\n }\n}\n\nfunction handleReplace(): void {\n if (selectedFile.value) {\n emit(\"replace\", selectedFile.value);\n }\n}\n\nfunction handleKeydown(event: KeyboardEvent): void {\n if (event.key === \"Escape\") {\n emit(\"close\");\n }\n}\n</script>\n\n<template>\n <Teleport :to=\"popoverTarget || 'body'\">\n <Transition\n enter-active-class=\"tpl:transition tpl:ease-out tpl:duration-150\"\n enter-from-class=\"tpl:opacity-0\"\n enter-to-class=\"tpl:opacity-100\"\n leave-active-class=\"tpl:transition tpl:ease-in tpl:duration-100\"\n leave-from-class=\"tpl:opacity-100\"\n leave-to-class=\"tpl:opacity-0\"\n >\n <div\n v-if=\"visible && item\"\n :data-tpl-theme=\"tplUiTheme\"\n class=\"tpl tpl:fixed tpl:inset-0 tpl:z-[10000] tpl:flex tpl:items-center tpl:justify-center\"\n style=\"background-color: var(--tpl-overlay)\"\n @click.self=\"emit('close')\"\n @keydown=\"handleKeydown\"\n >\n <div\n class=\"tpl:mx-4 tpl:w-full tpl:max-w-sm tpl:rounded-lg tpl:p-5 tpl:shadow-xl\"\n style=\"background-color: var(--tpl-bg-elevated)\"\n >\n <h3\n class=\"tpl:mb-2 tpl:text-sm tpl:font-semibold\"\n style=\"color: var(--tpl-text)\"\n >\n {{ t.mediaLibrary.replaceWarningTitle }}\n </h3>\n\n <!-- Warning message -->\n <p class=\"tpl:mb-2 tpl:text-xs\" style=\"color: var(--tpl-text-muted)\">\n {{\n t.mediaLibrary.replaceWarningMessage.replace(\n \"{extension}\",\n `.${extension}`,\n )\n }}\n </p>\n\n <!-- Usage warning -->\n <p\n v-if=\"hasUsage\"\n class=\"tpl:mb-3 tpl:text-xs\"\n style=\"color: var(--tpl-warning)\"\n >\n {{\n t.mediaLibrary.replaceWarningUsageNote.replace(\n \"{count}\",\n usageInfo!.template_count.toString(),\n )\n }}\n </p>\n\n <!-- Current file info -->\n <div\n class=\"tpl:mb-3 tpl:rounded tpl:border tpl:p-2\"\n style=\"border-color: var(--tpl-border)\"\n >\n <p\n class=\"tpl:truncate tpl:text-xs tpl:font-medium\"\n style=\"color: var(--tpl-text)\"\n >\n {{ item.filename }}\n </p>\n </div>\n\n <!-- File input -->\n <div class=\"tpl:mb-4\">\n <label\n class=\"tpl:mb-1 tpl:block tpl:text-xs tpl:font-medium\"\n style=\"color: var(--tpl-text-muted)\"\n >\n {{ t.mediaLibrary.replaceSelectFile }}\n </label>\n <input\n ref=\"fileInputRef\"\n type=\"file\"\n :accept=\"acceptPattern\"\n class=\"tpl:w-full tpl:rounded-md tpl:border tpl:px-3 tpl:py-1.5 tpl:text-xs\"\n style=\"\n border-color: var(--tpl-border);\n background-color: var(--tpl-bg);\n color: var(--tpl-text);\n \"\n @change=\"handleFileChange\"\n />\n </div>\n\n <!-- Error message -->\n <p\n v-if=\"error\"\n class=\"tpl:mb-3 tpl:text-xs\"\n style=\"color: var(--tpl-danger)\"\n >\n {{ error }}\n </p>\n\n <!-- Actions -->\n <div class=\"tpl:flex tpl:justify-end tpl:gap-2\">\n <button\n class=\"tpl:cursor-pointer tpl:rounded-md tpl:border tpl:px-3 tpl:py-1.5 tpl:text-xs tpl:font-medium tpl:transition-all tpl:duration-150\"\n style=\"\n border-color: var(--tpl-border);\n color: var(--tpl-text);\n background-color: var(--tpl-bg);\n \"\n :disabled=\"isReplacing\"\n @click=\"emit('close')\"\n >\n {{ t.mediaLibrary.cancel }}\n </button>\n <button\n class=\"tpl:cursor-pointer tpl:rounded-md tpl:px-3 tpl:py-1.5 tpl:text-xs tpl:font-medium tpl:text-white tpl:transition-all tpl:duration-150 tpl:disabled:cursor-not-allowed tpl:disabled:opacity-50\"\n style=\"\n background: linear-gradient(\n 135deg,\n var(--tpl-primary),\n var(--tpl-primary-hover)\n );\n \"\n :disabled=\"!selectedFile || isReplacing\"\n @click=\"handleReplace\"\n >\n {{\n isReplacing ? t.mediaLibrary.replacing : t.mediaLibrary.replace\n }}\n </button>\n </div>\n </div>\n </div>\n </Transition>\n </Teleport>\n</template>\n","<script setup lang=\"ts\">\nimport { useI18n } from \"../../composables/useI18n\";\nimport { useMediaCategories } from \"../../composables/useMediaCategories\";\nimport { useDropZone, useFileDialog } from \"@vueuse/core\";\nimport { LoaderCircle, Upload } from \"@lucide/vue\";\nimport { ref } from \"vue\";\n\ndefineProps<{\n isUploading: boolean;\n uploadProgress: { current: number; total: number } | null;\n}>();\n\nconst emit = defineEmits<{\n (e: \"upload\", files: File[]): void;\n}>();\n\nconst { t, format } = useI18n();\n\nconst { allAcceptedMimeTypes, allAcceptedInputString, maxFileSize } =\n useMediaCategories();\n\nconst dropZoneRef = ref<HTMLDivElement>();\n\nfunction validateFiles(fileList: File[] | FileList): File[] {\n const valid: File[] = [];\n for (const file of Array.from(fileList)) {\n if (\n allAcceptedMimeTypes.value.includes(file.type) &&\n file.size <= maxFileSize.value\n ) {\n valid.push(file);\n }\n }\n return valid;\n}\n\nfunction emitValidFiles(files: File[] | FileList): void {\n const valid = validateFiles(files);\n if (valid.length) {\n emit(\"upload\", valid);\n }\n}\n\nconst { isOverDropZone } = useDropZone(dropZoneRef, {\n onDrop: (files) => {\n if (files?.length) {\n emitValidFiles(files);\n }\n },\n});\n\nconst { open: openFilePicker, onChange } = useFileDialog({\n accept: allAcceptedInputString.value,\n multiple: true,\n});\n\nonChange((fileList) => {\n if (fileList?.length) {\n emitValidFiles(fileList);\n }\n});\n</script>\n\n<template>\n <div\n ref=\"dropZoneRef\"\n class=\"tpl-upload-zone tpl:flex tpl:cursor-pointer tpl:flex-col tpl:items-center tpl:justify-center tpl:rounded-lg tpl:border-2 tpl:border-dashed tpl:p-5 tpl:text-center tpl:transition-all tpl:duration-150\"\n :class=\"isOverDropZone ? 'tpl-upload-zone-active' : ''\"\n style=\"\n border-color: var(--tpl-border-light);\n background-color: var(--tpl-bg);\n \"\n @click=\"openFilePicker()\"\n >\n <div v-if=\"isUploading\" class=\"tpl:flex tpl:items-center tpl:gap-2\">\n <LoaderCircle\n class=\"tpl-spinner\"\n :size=\"20\"\n :stroke-width=\"2\"\n style=\"color: var(--tpl-primary)\"\n />\n <span class=\"tpl:text-xs\" style=\"color: var(--tpl-text-muted)\">{{\n uploadProgress && uploadProgress.total > 1\n ? format(t.mediaLibrary.uploadingProgress, {\n current: uploadProgress.current,\n total: uploadProgress.total,\n })\n : t.mediaLibrary.uploading\n }}</span>\n </div>\n <template v-else>\n <Upload\n class=\"tpl:mb-2\"\n :size=\"24\"\n :stroke-width=\"1.5\"\n style=\"color: var(--tpl-text-dim)\"\n />\n <p class=\"tpl:text-xs\" style=\"color: var(--tpl-text-muted)\">\n {{ t.mediaLibrary.dropOrClick }}\n </p>\n <p class=\"tpl:mt-1 tpl:text-[10px]\" style=\"color: var(--tpl-text-dim)\">\n {{ t.mediaLibrary.acceptedFormats }}\n </p>\n </template>\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport { useI18n } from \"../../composables/useI18n\";\nimport { useMediaCategories } from \"../../composables/useMediaCategories\";\nimport { useDropZone, useFileDialog } from \"@vueuse/core\";\nimport { LoaderCircle, Upload } from \"@lucide/vue\";\nimport { ref } from \"vue\";\n\ndefineProps<{\n isUploading: boolean;\n uploadProgress: { current: number; total: number } | null;\n}>();\n\nconst emit = defineEmits<{\n (e: \"upload\", files: File[]): void;\n}>();\n\nconst { t, format } = useI18n();\n\nconst { allAcceptedMimeTypes, allAcceptedInputString, maxFileSize } =\n useMediaCategories();\n\nconst dropZoneRef = ref<HTMLDivElement>();\n\nfunction validateFiles(fileList: File[] | FileList): File[] {\n const valid: File[] = [];\n for (const file of Array.from(fileList)) {\n if (\n allAcceptedMimeTypes.value.includes(file.type) &&\n file.size <= maxFileSize.value\n ) {\n valid.push(file);\n }\n }\n return valid;\n}\n\nfunction emitValidFiles(files: File[] | FileList): void {\n const valid = validateFiles(files);\n if (valid.length) {\n emit(\"upload\", valid);\n }\n}\n\nconst { isOverDropZone } = useDropZone(dropZoneRef, {\n onDrop: (files) => {\n if (files?.length) {\n emitValidFiles(files);\n }\n },\n});\n\nconst { open: openFilePicker, onChange } = useFileDialog({\n accept: allAcceptedInputString.value,\n multiple: true,\n});\n\nonChange((fileList) => {\n if (fileList?.length) {\n emitValidFiles(fileList);\n }\n});\n</script>\n\n<template>\n <div\n ref=\"dropZoneRef\"\n class=\"tpl-upload-zone tpl:flex tpl:cursor-pointer tpl:flex-col tpl:items-center tpl:justify-center tpl:rounded-lg tpl:border-2 tpl:border-dashed tpl:p-5 tpl:text-center tpl:transition-all tpl:duration-150\"\n :class=\"isOverDropZone ? 'tpl-upload-zone-active' : ''\"\n style=\"\n border-color: var(--tpl-border-light);\n background-color: var(--tpl-bg);\n \"\n @click=\"openFilePicker()\"\n >\n <div v-if=\"isUploading\" class=\"tpl:flex tpl:items-center tpl:gap-2\">\n <LoaderCircle\n class=\"tpl-spinner\"\n :size=\"20\"\n :stroke-width=\"2\"\n style=\"color: var(--tpl-primary)\"\n />\n <span class=\"tpl:text-xs\" style=\"color: var(--tpl-text-muted)\">{{\n uploadProgress && uploadProgress.total > 1\n ? format(t.mediaLibrary.uploadingProgress, {\n current: uploadProgress.current,\n total: uploadProgress.total,\n })\n : t.mediaLibrary.uploading\n }}</span>\n </div>\n <template v-else>\n <Upload\n class=\"tpl:mb-2\"\n :size=\"24\"\n :stroke-width=\"1.5\"\n style=\"color: var(--tpl-text-dim)\"\n />\n <p class=\"tpl:text-xs\" style=\"color: var(--tpl-text-muted)\">\n {{ t.mediaLibrary.dropOrClick }}\n </p>\n <p class=\"tpl:mt-1 tpl:text-[10px]\" style=\"color: var(--tpl-text-dim)\">\n {{ t.mediaLibrary.acceptedFormats }}\n </p>\n </template>\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport { useI18n } from \"../../composables/useI18n\";\nimport { computed, ref } from \"vue\";\n\nconst props = defineProps<{\n usedBytes: number;\n limitBytes: number;\n size?: number;\n}>();\n\nconst { t, format } = useI18n();\nconst showTooltip = ref(false);\n\nconst size = computed(() => props.size ?? 24);\nconst strokeWidth = computed(() => Math.max(2, size.value / 8));\nconst radius = computed(() => (size.value - strokeWidth.value) / 2);\nconst circumference = computed(() => 2 * Math.PI * radius.value);\n\nconst percentage = computed(() => {\n if (props.limitBytes <= 0) return 0;\n return Math.min(100, (props.usedBytes / props.limitBytes) * 100);\n});\n\nconst strokeDashoffset = computed(() => {\n return circumference.value - (percentage.value / 100) * circumference.value;\n});\n\nconst progressColor = computed(() => {\n if (percentage.value >= 95) {\n return \"var(--tpl-danger)\";\n }\n if (percentage.value >= 75) {\n return \"var(--tpl-warning, #f59e0b)\";\n }\n return \"var(--tpl-primary)\";\n});\n\nfunction formatBytes(bytes: number): string {\n if (bytes === 0) return \"0 B\";\n const k = 1024;\n const sizes = [\"B\", \"KB\", \"MB\", \"GB\"];\n const i = Math.floor(Math.log(bytes) / Math.log(k));\n const value = bytes / Math.pow(k, i);\n // Show 1 decimal for MB/GB, no decimals for B/KB\n const decimals = i >= 2 ? 1 : 0;\n return `${value.toFixed(decimals)} ${sizes[i]}`;\n}\n\nconst usedFormatted = computed(() => formatBytes(props.usedBytes));\nconst limitFormatted = computed(() => formatBytes(props.limitBytes));\nconst remainingBytes = computed(() =>\n Math.max(0, props.limitBytes - props.usedBytes),\n);\nconst remainingFormatted = computed(() => formatBytes(remainingBytes.value));\n\nconst tooltipText = computed(() =>\n format(t.mediaLibrary.storageTooltip, {\n used: usedFormatted.value,\n total: limitFormatted.value,\n remaining: remainingFormatted.value,\n }),\n);\n</script>\n\n<template>\n <div\n class=\"tpl:relative tpl:inline-flex tpl:cursor-help tpl:items-center tpl:justify-center\"\n @mouseenter=\"showTooltip = true\"\n @mouseleave=\"showTooltip = false\"\n >\n <svg\n :width=\"size\"\n :height=\"size\"\n class=\"tpl:-rotate-90\"\n :viewBox=\"`0 0 ${size} ${size}`\"\n >\n <!-- Background circle -->\n <circle\n :cx=\"size / 2\"\n :cy=\"size / 2\"\n :r=\"radius\"\n fill=\"none\"\n :stroke-width=\"strokeWidth\"\n style=\"stroke: var(--tpl-border)\"\n />\n <!-- Progress circle -->\n <circle\n :cx=\"size / 2\"\n :cy=\"size / 2\"\n :r=\"radius\"\n fill=\"none\"\n :stroke-width=\"strokeWidth\"\n :stroke=\"progressColor\"\n stroke-linecap=\"round\"\n :stroke-dasharray=\"circumference\"\n :stroke-dashoffset=\"strokeDashoffset\"\n class=\"tpl:transition-all tpl:duration-300 tpl:ease-out\"\n />\n </svg>\n\n <!-- Tooltip -->\n <Transition\n enter-active-class=\"tpl:transition tpl:ease-out tpl:duration-150\"\n enter-from-class=\"tpl:opacity-0 tpl:translate-y-1\"\n enter-to-class=\"tpl:opacity-100 tpl:translate-y-0\"\n leave-active-class=\"tpl:transition tpl:ease-in tpl:duration-100\"\n leave-from-class=\"tpl:opacity-100 tpl:translate-y-0\"\n leave-to-class=\"tpl:opacity-0 tpl:translate-y-1\"\n >\n <div\n v-if=\"showTooltip\"\n class=\"tpl:absolute tpl:top-full tpl:left-1/2 tpl:z-50 tpl:mt-2 tpl:-translate-x-1/2 tpl:rounded-md tpl:px-2.5 tpl:py-1.5 tpl:text-xs tpl:whitespace-nowrap tpl:shadow-lg\"\n style=\"background-color: var(--tpl-text); color: var(--tpl-bg-elevated)\"\n >\n {{ tooltipText }}\n <div\n class=\"tpl:absolute tpl:-top-1 tpl:left-1/2 tpl:size-2 tpl:-translate-x-1/2 tpl:rotate-45\"\n style=\"background-color: var(--tpl-text)\"\n />\n </div>\n </Transition>\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport { useI18n } from \"../../composables/useI18n\";\nimport { computed, ref } from \"vue\";\n\nconst props = defineProps<{\n usedBytes: number;\n limitBytes: number;\n size?: number;\n}>();\n\nconst { t, format } = useI18n();\nconst showTooltip = ref(false);\n\nconst size = computed(() => props.size ?? 24);\nconst strokeWidth = computed(() => Math.max(2, size.value / 8));\nconst radius = computed(() => (size.value - strokeWidth.value) / 2);\nconst circumference = computed(() => 2 * Math.PI * radius.value);\n\nconst percentage = computed(() => {\n if (props.limitBytes <= 0) return 0;\n return Math.min(100, (props.usedBytes / props.limitBytes) * 100);\n});\n\nconst strokeDashoffset = computed(() => {\n return circumference.value - (percentage.value / 100) * circumference.value;\n});\n\nconst progressColor = computed(() => {\n if (percentage.value >= 95) {\n return \"var(--tpl-danger)\";\n }\n if (percentage.value >= 75) {\n return \"var(--tpl-warning, #f59e0b)\";\n }\n return \"var(--tpl-primary)\";\n});\n\nfunction formatBytes(bytes: number): string {\n if (bytes === 0) return \"0 B\";\n const k = 1024;\n const sizes = [\"B\", \"KB\", \"MB\", \"GB\"];\n const i = Math.floor(Math.log(bytes) / Math.log(k));\n const value = bytes / Math.pow(k, i);\n // Show 1 decimal for MB/GB, no decimals for B/KB\n const decimals = i >= 2 ? 1 : 0;\n return `${value.toFixed(decimals)} ${sizes[i]}`;\n}\n\nconst usedFormatted = computed(() => formatBytes(props.usedBytes));\nconst limitFormatted = computed(() => formatBytes(props.limitBytes));\nconst remainingBytes = computed(() =>\n Math.max(0, props.limitBytes - props.usedBytes),\n);\nconst remainingFormatted = computed(() => formatBytes(remainingBytes.value));\n\nconst tooltipText = computed(() =>\n format(t.mediaLibrary.storageTooltip, {\n used: usedFormatted.value,\n total: limitFormatted.value,\n remaining: remainingFormatted.value,\n }),\n);\n</script>\n\n<template>\n <div\n class=\"tpl:relative tpl:inline-flex tpl:cursor-help tpl:items-center tpl:justify-center\"\n @mouseenter=\"showTooltip = true\"\n @mouseleave=\"showTooltip = false\"\n >\n <svg\n :width=\"size\"\n :height=\"size\"\n class=\"tpl:-rotate-90\"\n :viewBox=\"`0 0 ${size} ${size}`\"\n >\n <!-- Background circle -->\n <circle\n :cx=\"size / 2\"\n :cy=\"size / 2\"\n :r=\"radius\"\n fill=\"none\"\n :stroke-width=\"strokeWidth\"\n style=\"stroke: var(--tpl-border)\"\n />\n <!-- Progress circle -->\n <circle\n :cx=\"size / 2\"\n :cy=\"size / 2\"\n :r=\"radius\"\n fill=\"none\"\n :stroke-width=\"strokeWidth\"\n :stroke=\"progressColor\"\n stroke-linecap=\"round\"\n :stroke-dasharray=\"circumference\"\n :stroke-dashoffset=\"strokeDashoffset\"\n class=\"tpl:transition-all tpl:duration-300 tpl:ease-out\"\n />\n </svg>\n\n <!-- Tooltip -->\n <Transition\n enter-active-class=\"tpl:transition tpl:ease-out tpl:duration-150\"\n enter-from-class=\"tpl:opacity-0 tpl:translate-y-1\"\n enter-to-class=\"tpl:opacity-100 tpl:translate-y-0\"\n leave-active-class=\"tpl:transition tpl:ease-in tpl:duration-100\"\n leave-from-class=\"tpl:opacity-100 tpl:translate-y-0\"\n leave-to-class=\"tpl:opacity-0 tpl:translate-y-1\"\n >\n <div\n v-if=\"showTooltip\"\n class=\"tpl:absolute tpl:top-full tpl:left-1/2 tpl:z-50 tpl:mt-2 tpl:-translate-x-1/2 tpl:rounded-md tpl:px-2.5 tpl:py-1.5 tpl:text-xs tpl:whitespace-nowrap tpl:shadow-lg\"\n style=\"background-color: var(--tpl-text); color: var(--tpl-bg-elevated)\"\n >\n {{ tooltipText }}\n <div\n class=\"tpl:absolute tpl:-top-1 tpl:left-1/2 tpl:size-2 tpl:-translate-x-1/2 tpl:rotate-45\"\n style=\"background-color: var(--tpl-text)\"\n />\n </div>\n </Transition>\n </div>\n</template>\n","import type { CropData } from \"../components/media/MediaEditModal.vue\";\nimport type { MediaConversion, MediaItem } from \"../types\";\nimport type { useMediaLibrary } from \"../composable\";\n\ntype UseMediaLibraryReturn = ReturnType<typeof useMediaLibrary>;\nimport { useClipboard, useDebounceFn } from \"@vueuse/core\";\nimport { computed, ref, watch, type ComputedRef, type Ref } from \"vue\";\n\nexport interface UseMediaLibraryUIOptions {\n library: UseMediaLibraryReturn;\n canUseMediaFolders: ComputedRef<boolean>;\n translations:\n | { mediaLibrary: Record<string, string> }\n | Ref<{ mediaLibrary: Record<string, string> }>;\n}\n\nexport interface UseMediaLibraryUIReturn {\n // UI state\n layoutMode: Ref<\"grid\" | \"list\">;\n showSidebar: Ref<boolean>;\n searchInput: Ref<string>;\n selectedConversion: Ref<MediaConversion>;\n editingItem: Ref<MediaItem | null>;\n showImportUrlModal: Ref<boolean>;\n showMovePicker: Ref<boolean>;\n\n // Derived state\n selectedUrl: ComputedRef<string | null>;\n hasFrequentlyUsed: ComputedRef<boolean>;\n displayItems: ComputedRef<MediaItem[]>;\n hasUsedFiles: ComputedRef<boolean>;\n\n // Clipboard\n copy: (text: string) => Promise<void>;\n copied: Ref<boolean>;\n\n // Category labels\n getCategoryLabel: (category: string) => string;\n\n // Handlers\n handleSearchInput: (value: string) => void;\n handleUpload: (files: File[]) => Promise<void>;\n handleSelect: (item: MediaItem) => void;\n handleCreateFolder: (name: string, parentId?: string | null) => Promise<void>;\n handleRenameFolder: (folderId: string, name: string) => Promise<void>;\n handleDeleteFolder: (folderId: string) => Promise<void>;\n handleEditItem: (item: MediaItem) => void;\n handleEditSave: (\n mediaId: string,\n filename: string,\n altText?: string,\n cropData?: CropData,\n ) => Promise<void>;\n handleImportFromUrl: (url: string) => Promise<void>;\n handleMoveToFolder: (folderId: string | null) => Promise<void>;\n handleDeleteClick: () => Promise<void>;\n handleReplaceItem: (item: MediaItem) => void;\n handleReplaceFile: (file: File) => Promise<void>;\n\n // Reset (used by modal when closing)\n resetUI: () => void;\n}\n\nexport function useMediaLibraryUI(\n options: UseMediaLibraryUIOptions,\n): UseMediaLibraryUIReturn {\n const { library, canUseMediaFolders, translations } = options;\n\n function getTranslations() {\n if (\"value\" in translations && typeof translations.value === \"object\") {\n return (translations as Ref<{ mediaLibrary: Record<string, string> }>)\n .value;\n }\n return translations as { mediaLibrary: Record<string, string> };\n }\n\n // --- UI state ---\n const layoutMode = ref<\"grid\" | \"list\">(\"grid\");\n const showSidebar = ref(false);\n const searchInput = ref(\"\");\n const selectedConversion = ref<MediaConversion>(\"original\");\n const editingItem = ref<MediaItem | null>(null);\n const showImportUrlModal = ref(false);\n const showMovePicker = ref(false);\n\n // --- Derived state ---\n const selectedUrl = computed(() => {\n const item = library.previewItem.value;\n if (!item) return null;\n\n switch (selectedConversion.value) {\n case \"small\":\n return item.small_url || item.url;\n case \"medium\":\n return item.medium_url || item.url;\n case \"large\":\n return item.large_url || item.url;\n default:\n return item.url;\n }\n });\n\n const hasFrequentlyUsed = computed(() => {\n return library.frequentlyUsedItems.value.length > 0;\n });\n\n const displayItems = computed(() => {\n if (library.viewMode.value === \"frequently-used\") {\n return library.frequentlyUsedItems.value;\n }\n return library.items.value;\n });\n\n const hasUsedFiles = computed(() => {\n return Object.values(library.deleteUsageInfo.value).some(\n (info) => info.template_count > 0,\n );\n });\n\n // --- Category labels ---\n const categoryLabels: Record<string, () => string> = {\n images: () => getTranslations().mediaLibrary.filterImages,\n documents: () => getTranslations().mediaLibrary.filterDocuments,\n videos: () => getTranslations().mediaLibrary.filterVideos,\n audio: () => getTranslations().mediaLibrary.filterAudio,\n };\n\n function getCategoryLabel(category: string): string {\n return categoryLabels[category]?.() ?? category;\n }\n\n // --- Watchers ---\n watch(showSidebar, (show) => {\n if (show && canUseMediaFolders.value) {\n library.loadFolders();\n }\n });\n\n watch(\n () => library.previewItem.value?.id,\n () => {\n selectedConversion.value = \"original\";\n },\n );\n\n // --- Search ---\n const debouncedSearch = useDebounceFn((value: string) => {\n library.search(value);\n }, 300);\n\n function handleSearchInput(value: string): void {\n searchInput.value = value;\n debouncedSearch(value);\n }\n\n // --- Clipboard ---\n const { copy, copied } = useClipboard({ copiedDuring: 2000, legacy: true });\n\n // --- Handlers ---\n async function handleUpload(files: File[]): Promise<void> {\n await library.uploadFiles(files);\n }\n\n function handleSelect(item: MediaItem): void {\n library.selectItem(item);\n }\n\n async function handleCreateFolder(\n name: string,\n parentId?: string | null,\n ): Promise<void> {\n await library.createFolder(name, parentId);\n }\n\n async function handleRenameFolder(\n folderId: string,\n name: string,\n ): Promise<void> {\n await library.renameFolder(folderId, name);\n }\n\n async function handleDeleteFolder(folderId: string): Promise<void> {\n await library.deleteFolder(folderId);\n }\n\n function handleEditItem(item: MediaItem): void {\n editingItem.value = item;\n }\n\n async function handleEditSave(\n mediaId: string,\n filename: string,\n altText?: string,\n cropData?: CropData,\n ): Promise<void> {\n if (cropData) {\n await library.replaceMediaDirectly(mediaId, cropData.file);\n }\n await library.updateFile(mediaId, filename, altText);\n editingItem.value = null;\n }\n\n async function handleImportFromUrl(url: string): Promise<void> {\n const result = await library.importFromUrl(url);\n if (result) {\n showImportUrlModal.value = false;\n }\n }\n\n async function handleMoveToFolder(folderId: string | null): Promise<void> {\n showMovePicker.value = false;\n await library.moveSelected(folderId);\n }\n\n async function handleDeleteClick(): Promise<void> {\n await library.checkUsageBeforeDelete();\n }\n\n function handleReplaceItem(item: MediaItem): void {\n library.checkUsageBeforeReplace(item);\n }\n\n async function handleReplaceFile(file: File): Promise<void> {\n await library.replaceFile(file);\n }\n\n function resetUI(): void {\n library.clearSelection();\n library.cancelDelete();\n library.cancelReplace();\n searchInput.value = \"\";\n library.categoryFilter.value = null;\n library.sortOption.value = \"newest\";\n library.viewMode.value = \"files\";\n editingItem.value = null;\n showImportUrlModal.value = false;\n selectedConversion.value = \"original\";\n }\n\n return {\n layoutMode,\n showSidebar,\n searchInput,\n selectedConversion,\n editingItem,\n showImportUrlModal,\n showMovePicker,\n selectedUrl,\n hasFrequentlyUsed,\n displayItems,\n hasUsedFiles,\n copy,\n copied,\n getCategoryLabel,\n handleSearchInput,\n handleUpload,\n handleSelect,\n handleCreateFolder,\n handleRenameFolder,\n handleDeleteFolder,\n handleEditItem,\n handleEditSave,\n handleImportFromUrl,\n handleMoveToFolder,\n handleDeleteClick,\n handleReplaceItem,\n handleReplaceFile,\n resetUI,\n };\n}\n","<script setup lang=\"ts\">\nimport MediaBreadcrumb from \"./media/MediaBreadcrumb.vue\";\nimport MediaEditModal from \"./media/MediaEditModal.vue\";\nimport MediaFolderTree from \"./media/MediaFolderTree.vue\";\nimport MediaGrid from \"./media/MediaGrid.vue\";\nimport MediaImportUrlModal from \"./media/MediaImportUrlModal.vue\";\nimport MediaMovePicker from \"./media/MediaMovePicker.vue\";\nimport MediaPreviewPanel from \"./media/MediaPreviewPanel.vue\";\nimport MediaReplaceModal from \"./media/MediaReplaceModal.vue\";\nimport MediaUploadZone from \"./media/MediaUploadZone.vue\";\nimport StorageProgressRing from \"./media/StorageProgressRing.vue\";\nimport { useI18n } from \"../composables/useI18n\";\nimport { useMediaCategories } from \"../composables/useMediaCategories\";\nimport { useMediaLibraryUI } from \"../composables/useMediaLibraryUI\";\nimport type { UsePlanConfigReturn } from \"@templatical/core/cloud\";\nimport { useMediaLibrary } from \"../composable\";\nimport type { MediaCategory, MediaItem } from \"../types\";\nimport type { AuthManager } from \"@templatical/core/cloud\";\nimport { useEventListener } from \"@vueuse/core\";\nimport {\n Check,\n Copy,\n Grid2x2,\n Link,\n List,\n PanelLeft,\n Search,\n X,\n} from \"@lucide/vue\";\nimport {\n computed,\n inject,\n provide,\n toRef,\n watch,\n type ComputedRef,\n type Ref,\n} from \"vue\";\nimport { POPOVER_TARGET_KEY } from \"../keys\";\n\nconst props = defineProps<{\n visible: boolean;\n accept?: MediaCategory[];\n /**\n * Mount target for the modal's teleport. When provided, the modal and\n * its sub-modals render inside this element instead of `document.body`\n * — used by editors that wrap the media library inside a shadow root\n * (or any other DOM boundary) and want the modal to stay inside.\n * Defaults to `null` → teleport to body, preserving the original\n * standalone-SDK behavior.\n */\n popoverTarget?: HTMLElement | null;\n}>();\n\nconst emit = defineEmits<{\n (e: \"close\"): void;\n (e: \"select\", item: MediaItem): void;\n}>();\n\nconst { t } = useI18n();\nconst tplUiTheme = inject<Ref<\"light\" | \"dark\">>(\"tplUiTheme\");\n\n// Sub-modals (MediaReplaceModal, MediaEditModal, MediaImportUrlModal) inject\n// the same target so every nested teleport lands in the same place as this\n// one. Wrap the prop in a reactive ref so the provide updates if the host\n// remounts the modal with a different target.\nconst popoverTargetRef = toRef(() => props.popoverTarget ?? null);\nprovide(POPOVER_TARGET_KEY, popoverTargetRef);\nconst authManager = inject<AuthManager>(\"authManager\")!;\nconst projectIdRef = inject<ComputedRef<string>>(\"projectId\")!;\nconst projectId = computed(() => projectIdRef.value);\nconst planConfig = inject<UsePlanConfigReturn>(\"planConfig\")!;\n\n// Feature flags\nconst canUseMediaFolders = computed(() =>\n planConfig.hasFeature(\"media_folders\"),\n);\nconst canImportFromUrl = computed(() =>\n planConfig.hasFeature(\"import_from_url\"),\n);\n\n// Storage info\nconst storageUsedBytes = computed(\n () => planConfig.config.value?.storage.used_bytes ?? 0,\n);\nconst storageLimitBytes = computed(\n () => planConfig.config.value?.storage.limit_bytes ?? 0,\n);\n\nconst { isAcceptedMimeType, availableCategories } = useMediaCategories();\n\nconst library = useMediaLibrary({\n projectId: projectId.value,\n authManager,\n});\n\nconst ui = useMediaLibraryUI({\n library,\n canUseMediaFolders,\n translations: t,\n});\n\n// Modal-specific: load on open, reset on close\nwatch(\n () => props.visible,\n (visible) => {\n if (visible) {\n library.loadItems();\n library.loadFrequentlyUsed();\n } else {\n ui.resetUI();\n }\n },\n);\n\n// Modal-specific: escape key\nfunction handleKeydown(event: KeyboardEvent): void {\n if (event.key === \"Escape\") {\n emit(\"close\");\n }\n}\nuseEventListener(document, \"keydown\", handleKeydown);\n\n// Modal-specific: accept filter + selection\nfunction isConfirmable(): boolean {\n if (!library.previewItem.value) {\n return false;\n }\n\n if (!props.accept?.length) {\n return true;\n }\n\n return isAcceptedMimeType(library.previewItem.value.mime_type, props.accept);\n}\n\nfunction confirmSelection(): void {\n if (isConfirmable()) {\n const item = library.previewItem.value!;\n const itemWithSelectedUrl: MediaItem = {\n ...item,\n url: ui.selectedUrl.value || item.url,\n };\n emit(\"select\", itemWithSelectedUrl);\n emit(\"close\");\n }\n}\n</script>\n\n<template>\n <Teleport :to=\"popoverTarget || 'body'\">\n <Transition\n enter-active-class=\"tpl:transition tpl:duration-200\"\n enter-from-class=\"tpl:opacity-0\"\n enter-to-class=\"tpl:opacity-100\"\n leave-active-class=\"tpl:transition tpl:duration-150\"\n leave-from-class=\"tpl:opacity-100\"\n leave-to-class=\"tpl:opacity-0\"\n >\n <div\n v-if=\"visible\"\n :data-tpl-theme=\"tplUiTheme\"\n class=\"tpl tpl-media-overlay tpl:fixed tpl:inset-0 tpl:z-[9999]\"\n @click.self=\"emit('close')\"\n >\n <div\n class=\"tpl-media-modal tpl-scale-in tpl:flex tpl:flex-col tpl:overflow-hidden tpl:rounded-[var(--tpl-radius-lg)]\"\n style=\"\n width: 900px;\n height: 650px;\n max-width: 95vw;\n max-height: 90vh;\n background-color: var(--tpl-bg-elevated);\n border: 1px solid var(--tpl-border);\n box-shadow: var(--tpl-shadow-xl);\n \"\n >\n <!-- Header -->\n <div\n class=\"tpl:flex tpl:shrink-0 tpl:items-center tpl:justify-between tpl:border-b tpl:px-5 tpl:py-3.5\"\n style=\"border-color: var(--tpl-border)\"\n >\n <h2\n class=\"tpl:text-sm tpl:font-semibold\"\n style=\"color: var(--tpl-text)\"\n >\n {{ t.mediaLibrary.title }}\n </h2>\n <div class=\"tpl:flex tpl:items-center tpl:gap-3\">\n <StorageProgressRing\n :used-bytes=\"storageUsedBytes\"\n :limit-bytes=\"storageLimitBytes\"\n :size=\"22\"\n />\n <div class=\"tpl:relative\">\n <input\n :value=\"ui.searchInput.value\"\n type=\"text\"\n class=\"tpl:w-52 tpl:rounded-md tpl:border tpl:py-1.5 tpl:pr-3 tpl:pl-8 tpl:text-xs tpl:shadow-xs tpl:transition-all tpl:duration-150 tpl:outline-none tpl:focus:shadow-[var(--tpl-ring)]\"\n style=\"\n border-color: var(--tpl-border);\n background-color: var(--tpl-bg);\n color: var(--tpl-text);\n \"\n :placeholder=\"t.mediaLibrary.searchPlaceholder\"\n @input=\"\n ui.handleSearchInput(\n ($event.target as HTMLInputElement).value,\n )\n \"\n />\n <Search\n class=\"tpl:absolute tpl:top-1/2 tpl:left-2.5 tpl:-translate-y-1/2\"\n :size=\"13\"\n :stroke-width=\"2\"\n style=\"color: var(--tpl-text-dim)\"\n />\n </div>\n <button\n class=\"tpl:flex tpl:size-7 tpl:items-center tpl:justify-center tpl:rounded-md tpl:transition-all tpl:duration-150\"\n style=\"color: var(--tpl-text-muted)\"\n @click=\"emit('close')\"\n >\n <X :size=\"18\" :stroke-width=\"2\" />\n </button>\n </div>\n </div>\n\n <!-- Body -->\n <div class=\"tpl:flex tpl:min-h-0 tpl:flex-1 tpl:overflow-hidden\">\n <!-- Sidebar (only when media folders feature is enabled and toggled on) -->\n <Transition\n enter-active-class=\"tpl:transition-all tpl:duration-200 tpl:ease-out\"\n enter-from-class=\"tpl:-ml-48 tpl:opacity-0\"\n enter-to-class=\"tpl:ml-0 tpl:opacity-100\"\n leave-active-class=\"tpl:transition-all tpl:duration-150 tpl:ease-in\"\n leave-from-class=\"tpl:ml-0 tpl:opacity-100\"\n leave-to-class=\"tpl:-ml-48 tpl:opacity-0\"\n >\n <div\n v-if=\"canUseMediaFolders && ui.showSidebar.value\"\n class=\"tpl:flex tpl:w-48 tpl:shrink-0 tpl:flex-col tpl:border-r\"\n style=\"\n border-color: var(--tpl-border);\n background-color: var(--tpl-bg);\n \"\n >\n <MediaFolderTree\n :folders=\"library.folders.value\"\n :current-folder-id=\"library.currentFolderId.value\"\n :view-mode=\"library.viewMode.value\"\n :has-frequently-used=\"ui.hasFrequentlyUsed.value\"\n @navigate=\"library.navigateToFolder\"\n @create-folder=\"ui.handleCreateFolder\"\n @rename-folder=\"ui.handleRenameFolder\"\n @delete-folder=\"ui.handleDeleteFolder\"\n @show-frequently-used=\"library.showFrequentlyUsed\"\n />\n </div>\n </Transition>\n\n <!-- Content area -->\n <div class=\"tpl:flex tpl:min-w-0 tpl:flex-1 tpl:flex-col\">\n <!-- Breadcrumb + Upload -->\n <div\n class=\"tpl:flex tpl:shrink-0 tpl:items-center tpl:justify-between tpl:border-b tpl:px-4 tpl:py-2.5\"\n style=\"border-color: var(--tpl-border)\"\n >\n <div class=\"tpl:flex tpl:items-center tpl:gap-2\">\n <!-- Sidebar toggle (only when media folders feature is enabled) -->\n <button\n v-if=\"canUseMediaFolders\"\n class=\"tpl:flex tpl:size-7 tpl:cursor-pointer tpl:items-center tpl:justify-center tpl:rounded-md tpl:transition-all tpl:duration-150\"\n :style=\"{\n color: ui.showSidebar.value\n ? 'var(--tpl-primary)'\n : 'var(--tpl-text-muted)',\n backgroundColor: ui.showSidebar.value\n ? 'var(--tpl-bg)'\n : 'transparent',\n border: ui.showSidebar.value\n ? '1px solid var(--tpl-border)'\n : '1px solid transparent',\n }\"\n :title=\"\n ui.showSidebar.value\n ? t.mediaLibrary.hideFolders\n : t.mediaLibrary.showFolders\n \"\n @click=\"ui.showSidebar.value = !ui.showSidebar.value\"\n >\n <PanelLeft :size=\"16\" :stroke-width=\"2\" />\n </button>\n\n <template v-if=\"library.viewMode.value === 'frequently-used'\">\n <span\n class=\"tpl:text-xs tpl:font-medium\"\n style=\"color: var(--tpl-text)\"\n >\n {{ t.mediaLibrary.frequentlyUsed }}\n </span>\n </template>\n <template v-else>\n <MediaBreadcrumb\n :folders=\"library.folders.value\"\n :current-folder-id=\"library.currentFolderId.value\"\n @navigate=\"library.navigateToFolder\"\n />\n </template>\n\n <!-- Layout toggle -->\n <div\n class=\"tpl:flex tpl:rounded-md tpl:p-0.5\"\n style=\"\n border: 1px solid var(--tpl-border);\n background-color: var(--tpl-bg);\n \"\n >\n <button\n class=\"tpl:flex tpl:size-6 tpl:cursor-pointer tpl:items-center tpl:justify-center tpl:rounded tpl:transition-all tpl:duration-150\"\n :style=\"{\n color:\n ui.layoutMode.value === 'grid'\n ? 'var(--tpl-primary)'\n : 'var(--tpl-text-muted)',\n backgroundColor:\n ui.layoutMode.value === 'grid'\n ? 'var(--tpl-bg-elevated)'\n : 'transparent',\n }\"\n :title=\"t.mediaLibrary.viewGrid\"\n @click=\"ui.layoutMode.value = 'grid'\"\n >\n <Grid2x2 :size=\"14\" :stroke-width=\"2\" />\n </button>\n <button\n class=\"tpl:flex tpl:size-6 tpl:cursor-pointer tpl:items-center tpl:justify-center tpl:rounded tpl:transition-all tpl:duration-150\"\n :style=\"{\n color:\n ui.layoutMode.value === 'list'\n ? 'var(--tpl-primary)'\n : 'var(--tpl-text-muted)',\n backgroundColor:\n ui.layoutMode.value === 'list'\n ? 'var(--tpl-bg-elevated)'\n : 'transparent',\n }\"\n :title=\"t.mediaLibrary.viewList\"\n @click=\"ui.layoutMode.value = 'list'\"\n >\n <List :size=\"14\" :stroke-width=\"2\" />\n </button>\n </div>\n </div>\n\n <div class=\"tpl:flex tpl:items-center tpl:gap-2\">\n <select\n v-if=\"availableCategories.length > 1\"\n class=\"tpl:rounded-md tpl:border tpl:py-1.5 tpl:pr-7 tpl:pl-2.5 tpl:text-xs tpl:transition-all tpl:duration-150 tpl:outline-none\"\n style=\"\n border-color: var(--tpl-border);\n background-color: var(--tpl-bg);\n color: var(--tpl-text);\n \"\n :value=\"library.categoryFilter.value ?? ''\"\n @change=\"\n library.filterByCategory(\n ($event.target as HTMLSelectElement).value || null,\n )\n \"\n >\n <option value=\"\">\n {{ t.mediaLibrary.filterAll }}\n </option>\n <option\n v-for=\"category in availableCategories\"\n :key=\"category\"\n :value=\"category\"\n >\n {{ ui.getCategoryLabel(category) }}\n </option>\n </select>\n <select\n class=\"tpl:rounded-md tpl:border tpl:py-1.5 tpl:pr-7 tpl:pl-2.5 tpl:text-xs tpl:transition-all tpl:duration-150 tpl:outline-none\"\n style=\"\n border-color: var(--tpl-border);\n background-color: var(--tpl-bg);\n color: var(--tpl-text);\n \"\n :value=\"library.sortOption.value\"\n @change=\"\n library.sortBy(($event.target as HTMLSelectElement).value)\n \"\n >\n <option value=\"newest\">\n {{ t.mediaLibrary.sortNewest }}\n </option>\n <option value=\"oldest\">\n {{ t.mediaLibrary.sortOldest }}\n </option>\n <option value=\"name_asc\">\n {{ t.mediaLibrary.sortNameAsc }}\n </option>\n <option value=\"name_desc\">\n {{ t.mediaLibrary.sortNameDesc }}\n </option>\n <option value=\"size_asc\">\n {{ t.mediaLibrary.sortSizeAsc }}\n </option>\n <option value=\"size_desc\">\n {{ t.mediaLibrary.sortSizeDesc }}\n </option>\n </select>\n </div>\n </div>\n\n <!-- Scrollable content area -->\n <div class=\"tpl:min-h-0 tpl:flex-1 tpl:overflow-y-auto\">\n <!-- Upload zone (only in files mode) -->\n <div\n v-if=\"library.viewMode.value === 'files'\"\n class=\"tpl:px-4 tpl:pt-3\"\n >\n <MediaUploadZone\n :is-uploading=\"library.isUploading.value\"\n :upload-progress=\"library.uploadProgress.value\"\n @upload=\"ui.handleUpload\"\n />\n <button\n v-if=\"canImportFromUrl\"\n class=\"tpl:mt-2 tpl:flex tpl:w-full tpl:cursor-pointer tpl:items-center tpl:justify-center tpl:gap-1.5 tpl:rounded-md tpl:border tpl:border-dashed tpl:px-3 tpl:py-1.5 tpl:text-xs tpl:font-medium tpl:transition-all tpl:duration-150\"\n style=\"\n border-color: var(--tpl-border);\n color: var(--tpl-text-muted);\n background-color: var(--tpl-bg);\n \"\n @click=\"ui.showImportUrlModal.value = true\"\n >\n <Link :size=\"14\" :stroke-width=\"2\" />\n {{ t.mediaLibrary.importFromUrl }}\n </button>\n </div>\n\n <!-- Image grid -->\n <MediaGrid\n :items=\"ui.displayItems.value\"\n :selected-ids=\"library.selectedItems.value\"\n :is-loading=\"library.isLoading.value\"\n :has-more=\"\n library.viewMode.value === 'files' && library.hasMore.value\n \"\n :accept=\"accept\"\n :layout=\"ui.layoutMode.value\"\n @select=\"ui.handleSelect\"\n @toggle=\"library.toggleSelection\"\n @load-more=\"library.loadMore\"\n @edit=\"ui.handleEditItem\"\n @replace=\"ui.handleReplaceItem\"\n />\n </div>\n </div>\n </div>\n\n <!-- Import from URL Modal -->\n <MediaImportUrlModal\n :visible=\"ui.showImportUrlModal.value\"\n :is-importing=\"library.isImportingFromUrl.value\"\n :error=\"library.importFromUrlError.value\"\n @import=\"ui.handleImportFromUrl\"\n @close=\"ui.showImportUrlModal.value = false\"\n />\n\n <!-- Edit Modal -->\n <MediaEditModal\n :visible=\"!!ui.editingItem.value\"\n :item=\"ui.editingItem.value\"\n @save=\"ui.handleEditSave\"\n @close=\"ui.editingItem.value = null\"\n />\n\n <!-- Replace Modal -->\n <MediaReplaceModal\n :visible=\"library.showReplaceWarning.value\"\n :item=\"library.pendingReplaceItem.value\"\n :usage-info=\"library.replaceUsageInfo.value\"\n :is-replacing=\"library.isReplacing.value\"\n :error=\"library.replaceError.value\"\n @replace=\"ui.handleReplaceFile\"\n @close=\"library.cancelReplace\"\n />\n\n <!-- Delete Warning Dialog -->\n <Transition\n enter-active-class=\"tpl:transition tpl:ease-out tpl:duration-150\"\n enter-from-class=\"tpl:opacity-0\"\n enter-to-class=\"tpl:opacity-100\"\n leave-active-class=\"tpl:transition tpl:ease-in tpl:duration-100\"\n leave-from-class=\"tpl:opacity-100\"\n leave-to-class=\"tpl:opacity-0\"\n >\n <div\n v-if=\"library.showDeleteWarning.value\"\n class=\"tpl:absolute tpl:inset-0 tpl:z-10 tpl:flex tpl:items-center tpl:justify-center tpl:rounded-[var(--tpl-radius-lg)]\"\n style=\"\n background-color: var(--tpl-overlay);\n backdrop-filter: blur(8px);\n -webkit-backdrop-filter: blur(8px);\n \"\n @click.self=\"library.cancelDelete\"\n >\n <div\n class=\"tpl-scale-in tpl:mx-4 tpl:w-full tpl:max-w-sm tpl:rounded-[var(--tpl-radius-lg)] tpl:p-5\"\n style=\"\n background-color: var(--tpl-bg-elevated);\n box-shadow: var(--tpl-shadow-xl);\n \"\n >\n <h3\n class=\"tpl:mb-2 tpl:text-sm tpl:font-semibold\"\n style=\"color: var(--tpl-text)\"\n >\n {{ t.mediaLibrary.deleteWarningTitle }}\n </h3>\n <p\n class=\"tpl:text-xs\"\n :class=\"ui.hasUsedFiles.value ? 'tpl:mb-2' : 'tpl:mb-4'\"\n style=\"color: var(--tpl-text-muted)\"\n >\n {{ t.mediaLibrary.deleteWarningMessage }}\n </p>\n <p\n v-if=\"ui.hasUsedFiles.value\"\n class=\"tpl:mb-4 tpl:text-xs\"\n style=\"color: var(--tpl-text-muted)\"\n >\n {{ t.mediaLibrary.deleteWarningUsageNote }}\n </p>\n\n <div\n v-if=\"ui.hasUsedFiles.value\"\n class=\"tpl:mb-4 tpl:max-h-32 tpl:overflow-y-auto tpl:rounded tpl:border tpl:p-2\"\n style=\"border-color: var(--tpl-border)\"\n >\n <div\n v-for=\"(info, mediaId) in library.deleteUsageInfo.value\"\n :key=\"mediaId\"\n class=\"tpl:text-xs\"\n style=\"color: var(--tpl-text)\"\n >\n <template v-if=\"info.template_count > 0\">\n <span class=\"tpl:font-medium\">\n {{\n ui.displayItems.value.find((i) => i.id === mediaId)\n ?.filename || mediaId\n }}\n </span>\n <span style=\"color: var(--tpl-text-muted)\">\n -\n {{\n t.mediaLibrary.usedInTemplates.replace(\n \"{count}\",\n info.template_count.toString(),\n )\n }}\n </span>\n </template>\n </div>\n </div>\n\n <div class=\"tpl:flex tpl:justify-end tpl:gap-2\">\n <button\n class=\"tpl:cursor-pointer tpl:rounded-md tpl:border tpl:px-3 tpl:py-1.5 tpl:text-xs tpl:font-medium tpl:transition-all tpl:duration-150\"\n style=\"\n border-color: var(--tpl-border);\n color: var(--tpl-text);\n background-color: var(--tpl-bg);\n \"\n @click=\"library.cancelDelete\"\n >\n {{ t.mediaLibrary.cancel }}\n </button>\n <button\n class=\"tpl:cursor-pointer tpl:rounded-md tpl:border tpl:px-3 tpl:py-1.5 tpl:text-xs tpl:font-medium tpl:transition-all tpl:duration-150\"\n style=\"\n border-color: var(--tpl-danger);\n color: var(--tpl-danger);\n background-color: var(--tpl-danger-light);\n \"\n @click=\"library.confirmDelete\"\n >\n {{\n ui.hasUsedFiles.value\n ? t.mediaLibrary.deleteAnyway\n : t.mediaLibrary.confirmDelete\n }}\n </button>\n </div>\n </div>\n </div>\n </Transition>\n\n <!-- Footer -->\n <div\n class=\"tpl:flex tpl:shrink-0 tpl:items-center tpl:justify-between tpl:border-t tpl:px-5 tpl:py-3\"\n style=\"border-color: var(--tpl-border)\"\n >\n <div\n class=\"tpl:flex tpl:min-w-0 tpl:flex-1 tpl:items-center tpl:gap-3\"\n >\n <MediaPreviewPanel\n v-if=\"library.previewItem.value\"\n v-model:selected-conversion=\"ui.selectedConversion.value\"\n :item=\"library.previewItem.value\"\n :folders=\"library.folders.value\"\n />\n </div>\n <div class=\"tpl:flex tpl:items-center tpl:gap-5\">\n <!-- Copy URL + Move group -->\n <div\n v-if=\"library.selectedItems.value.size > 0\"\n class=\"tpl:flex tpl:items-center tpl:gap-2\"\n >\n <button\n v-if=\"library.previewItem.value\"\n class=\"tpl:flex tpl:cursor-pointer tpl:items-center tpl:gap-1 tpl:rounded-md tpl:border tpl:px-3 tpl:py-1.5 tpl:text-xs tpl:font-medium tpl:transition-all tpl:duration-150\"\n :style=\"{\n borderColor: ui.copied.value\n ? 'var(--tpl-success)'\n : 'var(--tpl-border)',\n color: ui.copied.value\n ? 'var(--tpl-success)'\n : 'var(--tpl-text)',\n backgroundColor: 'var(--tpl-bg)',\n }\"\n @click=\"ui.copy(ui.selectedUrl.value!)\"\n >\n <Copy v-if=\"!ui.copied.value\" :size=\"12\" :stroke-width=\"2\" />\n <Check v-else :size=\"12\" :stroke-width=\"2\" />\n {{\n ui.copied.value\n ? t.mediaLibrary.copied\n : t.mediaLibrary.copyUrl\n }}\n </button>\n <div v-if=\"canUseMediaFolders\" class=\"tpl:relative\">\n <button\n class=\"tpl:cursor-pointer tpl:rounded-md tpl:border tpl:px-3 tpl:py-1.5 tpl:text-xs tpl:font-medium tpl:transition-all tpl:duration-150\"\n style=\"\n border-color: var(--tpl-border);\n color: var(--tpl-text);\n background-color: var(--tpl-bg);\n \"\n @click=\"ui.showMovePicker.value = !ui.showMovePicker.value\"\n >\n {{ t.mediaLibrary.moveSelected }}\n </button>\n <MediaMovePicker\n v-if=\"ui.showMovePicker.value\"\n :folders=\"library.folders.value\"\n :current-folder-id=\"library.currentFolderId.value\"\n @select=\"ui.handleMoveToFolder\"\n @close=\"ui.showMovePicker.value = false\"\n />\n </div>\n </div>\n <!-- Delete + Select group -->\n <div class=\"tpl:flex tpl:items-center tpl:gap-2\">\n <button\n v-if=\"library.selectedItems.value.size > 0\"\n class=\"tpl:cursor-pointer tpl:rounded-md tpl:border tpl:px-3 tpl:py-1.5 tpl:text-xs tpl:font-medium tpl:transition-all tpl:duration-150\"\n style=\"\n border-color: var(--tpl-danger);\n color: var(--tpl-danger);\n background-color: var(--tpl-danger-light);\n \"\n @click=\"ui.handleDeleteClick\"\n >\n {{ t.mediaLibrary.deleteSelected }}\n </button>\n <button\n class=\"tpl:cursor-pointer tpl:rounded-md tpl:px-4 tpl:py-1.5 tpl:text-sm tpl:font-medium tpl:shadow-xs tpl:transition-all tpl:duration-150 tpl:hover:opacity-90 tpl:disabled:cursor-not-allowed tpl:disabled:opacity-50\"\n style=\"\n background-color: var(--tpl-primary);\n color: var(--tpl-bg);\n \"\n :disabled=\"!isConfirmable()\"\n @click=\"confirmSelection\"\n >\n {{\n accept?.length\n ? t.mediaLibrary.selectImage\n : t.mediaLibrary.selectFile\n }}\n </button>\n </div>\n </div>\n </div>\n </div>\n </div>\n </Transition>\n </Teleport>\n</template>\n","<script setup lang=\"ts\">\nimport MediaBreadcrumb from \"./media/MediaBreadcrumb.vue\";\nimport MediaEditModal from \"./media/MediaEditModal.vue\";\nimport MediaFolderTree from \"./media/MediaFolderTree.vue\";\nimport MediaGrid from \"./media/MediaGrid.vue\";\nimport MediaImportUrlModal from \"./media/MediaImportUrlModal.vue\";\nimport MediaMovePicker from \"./media/MediaMovePicker.vue\";\nimport MediaPreviewPanel from \"./media/MediaPreviewPanel.vue\";\nimport MediaReplaceModal from \"./media/MediaReplaceModal.vue\";\nimport MediaUploadZone from \"./media/MediaUploadZone.vue\";\nimport StorageProgressRing from \"./media/StorageProgressRing.vue\";\nimport { useI18n } from \"../composables/useI18n\";\nimport { useMediaCategories } from \"../composables/useMediaCategories\";\nimport { useMediaLibraryUI } from \"../composables/useMediaLibraryUI\";\nimport type { UsePlanConfigReturn } from \"@templatical/core/cloud\";\nimport { useMediaLibrary } from \"../composable\";\nimport type { MediaCategory, MediaItem } from \"../types\";\nimport type { AuthManager } from \"@templatical/core/cloud\";\nimport { useEventListener } from \"@vueuse/core\";\nimport {\n Check,\n Copy,\n Grid2x2,\n Link,\n List,\n PanelLeft,\n Search,\n X,\n} from \"@lucide/vue\";\nimport {\n computed,\n inject,\n provide,\n toRef,\n watch,\n type ComputedRef,\n type Ref,\n} from \"vue\";\nimport { POPOVER_TARGET_KEY } from \"../keys\";\n\nconst props = defineProps<{\n visible: boolean;\n accept?: MediaCategory[];\n /**\n * Mount target for the modal's teleport. When provided, the modal and\n * its sub-modals render inside this element instead of `document.body`\n * — used by editors that wrap the media library inside a shadow root\n * (or any other DOM boundary) and want the modal to stay inside.\n * Defaults to `null` → teleport to body, preserving the original\n * standalone-SDK behavior.\n */\n popoverTarget?: HTMLElement | null;\n}>();\n\nconst emit = defineEmits<{\n (e: \"close\"): void;\n (e: \"select\", item: MediaItem): void;\n}>();\n\nconst { t } = useI18n();\nconst tplUiTheme = inject<Ref<\"light\" | \"dark\">>(\"tplUiTheme\");\n\n// Sub-modals (MediaReplaceModal, MediaEditModal, MediaImportUrlModal) inject\n// the same target so every nested teleport lands in the same place as this\n// one. Wrap the prop in a reactive ref so the provide updates if the host\n// remounts the modal with a different target.\nconst popoverTargetRef = toRef(() => props.popoverTarget ?? null);\nprovide(POPOVER_TARGET_KEY, popoverTargetRef);\nconst authManager = inject<AuthManager>(\"authManager\")!;\nconst projectIdRef = inject<ComputedRef<string>>(\"projectId\")!;\nconst projectId = computed(() => projectIdRef.value);\nconst planConfig = inject<UsePlanConfigReturn>(\"planConfig\")!;\n\n// Feature flags\nconst canUseMediaFolders = computed(() =>\n planConfig.hasFeature(\"media_folders\"),\n);\nconst canImportFromUrl = computed(() =>\n planConfig.hasFeature(\"import_from_url\"),\n);\n\n// Storage info\nconst storageUsedBytes = computed(\n () => planConfig.config.value?.storage.used_bytes ?? 0,\n);\nconst storageLimitBytes = computed(\n () => planConfig.config.value?.storage.limit_bytes ?? 0,\n);\n\nconst { isAcceptedMimeType, availableCategories } = useMediaCategories();\n\nconst library = useMediaLibrary({\n projectId: projectId.value,\n authManager,\n});\n\nconst ui = useMediaLibraryUI({\n library,\n canUseMediaFolders,\n translations: t,\n});\n\n// Modal-specific: load on open, reset on close\nwatch(\n () => props.visible,\n (visible) => {\n if (visible) {\n library.loadItems();\n library.loadFrequentlyUsed();\n } else {\n ui.resetUI();\n }\n },\n);\n\n// Modal-specific: escape key\nfunction handleKeydown(event: KeyboardEvent): void {\n if (event.key === \"Escape\") {\n emit(\"close\");\n }\n}\nuseEventListener(document, \"keydown\", handleKeydown);\n\n// Modal-specific: accept filter + selection\nfunction isConfirmable(): boolean {\n if (!library.previewItem.value) {\n return false;\n }\n\n if (!props.accept?.length) {\n return true;\n }\n\n return isAcceptedMimeType(library.previewItem.value.mime_type, props.accept);\n}\n\nfunction confirmSelection(): void {\n if (isConfirmable()) {\n const item = library.previewItem.value!;\n const itemWithSelectedUrl: MediaItem = {\n ...item,\n url: ui.selectedUrl.value || item.url,\n };\n emit(\"select\", itemWithSelectedUrl);\n emit(\"close\");\n }\n}\n</script>\n\n<template>\n <Teleport :to=\"popoverTarget || 'body'\">\n <Transition\n enter-active-class=\"tpl:transition tpl:duration-200\"\n enter-from-class=\"tpl:opacity-0\"\n enter-to-class=\"tpl:opacity-100\"\n leave-active-class=\"tpl:transition tpl:duration-150\"\n leave-from-class=\"tpl:opacity-100\"\n leave-to-class=\"tpl:opacity-0\"\n >\n <div\n v-if=\"visible\"\n :data-tpl-theme=\"tplUiTheme\"\n class=\"tpl tpl-media-overlay tpl:fixed tpl:inset-0 tpl:z-[9999]\"\n @click.self=\"emit('close')\"\n >\n <div\n class=\"tpl-media-modal tpl-scale-in tpl:flex tpl:flex-col tpl:overflow-hidden tpl:rounded-[var(--tpl-radius-lg)]\"\n style=\"\n width: 900px;\n height: 650px;\n max-width: 95vw;\n max-height: 90vh;\n background-color: var(--tpl-bg-elevated);\n border: 1px solid var(--tpl-border);\n box-shadow: var(--tpl-shadow-xl);\n \"\n >\n <!-- Header -->\n <div\n class=\"tpl:flex tpl:shrink-0 tpl:items-center tpl:justify-between tpl:border-b tpl:px-5 tpl:py-3.5\"\n style=\"border-color: var(--tpl-border)\"\n >\n <h2\n class=\"tpl:text-sm tpl:font-semibold\"\n style=\"color: var(--tpl-text)\"\n >\n {{ t.mediaLibrary.title }}\n </h2>\n <div class=\"tpl:flex tpl:items-center tpl:gap-3\">\n <StorageProgressRing\n :used-bytes=\"storageUsedBytes\"\n :limit-bytes=\"storageLimitBytes\"\n :size=\"22\"\n />\n <div class=\"tpl:relative\">\n <input\n :value=\"ui.searchInput.value\"\n type=\"text\"\n class=\"tpl:w-52 tpl:rounded-md tpl:border tpl:py-1.5 tpl:pr-3 tpl:pl-8 tpl:text-xs tpl:shadow-xs tpl:transition-all tpl:duration-150 tpl:outline-none tpl:focus:shadow-[var(--tpl-ring)]\"\n style=\"\n border-color: var(--tpl-border);\n background-color: var(--tpl-bg);\n color: var(--tpl-text);\n \"\n :placeholder=\"t.mediaLibrary.searchPlaceholder\"\n @input=\"\n ui.handleSearchInput(\n ($event.target as HTMLInputElement).value,\n )\n \"\n />\n <Search\n class=\"tpl:absolute tpl:top-1/2 tpl:left-2.5 tpl:-translate-y-1/2\"\n :size=\"13\"\n :stroke-width=\"2\"\n style=\"color: var(--tpl-text-dim)\"\n />\n </div>\n <button\n class=\"tpl:flex tpl:size-7 tpl:items-center tpl:justify-center tpl:rounded-md tpl:transition-all tpl:duration-150\"\n style=\"color: var(--tpl-text-muted)\"\n @click=\"emit('close')\"\n >\n <X :size=\"18\" :stroke-width=\"2\" />\n </button>\n </div>\n </div>\n\n <!-- Body -->\n <div class=\"tpl:flex tpl:min-h-0 tpl:flex-1 tpl:overflow-hidden\">\n <!-- Sidebar (only when media folders feature is enabled and toggled on) -->\n <Transition\n enter-active-class=\"tpl:transition-all tpl:duration-200 tpl:ease-out\"\n enter-from-class=\"tpl:-ml-48 tpl:opacity-0\"\n enter-to-class=\"tpl:ml-0 tpl:opacity-100\"\n leave-active-class=\"tpl:transition-all tpl:duration-150 tpl:ease-in\"\n leave-from-class=\"tpl:ml-0 tpl:opacity-100\"\n leave-to-class=\"tpl:-ml-48 tpl:opacity-0\"\n >\n <div\n v-if=\"canUseMediaFolders && ui.showSidebar.value\"\n class=\"tpl:flex tpl:w-48 tpl:shrink-0 tpl:flex-col tpl:border-r\"\n style=\"\n border-color: var(--tpl-border);\n background-color: var(--tpl-bg);\n \"\n >\n <MediaFolderTree\n :folders=\"library.folders.value\"\n :current-folder-id=\"library.currentFolderId.value\"\n :view-mode=\"library.viewMode.value\"\n :has-frequently-used=\"ui.hasFrequentlyUsed.value\"\n @navigate=\"library.navigateToFolder\"\n @create-folder=\"ui.handleCreateFolder\"\n @rename-folder=\"ui.handleRenameFolder\"\n @delete-folder=\"ui.handleDeleteFolder\"\n @show-frequently-used=\"library.showFrequentlyUsed\"\n />\n </div>\n </Transition>\n\n <!-- Content area -->\n <div class=\"tpl:flex tpl:min-w-0 tpl:flex-1 tpl:flex-col\">\n <!-- Breadcrumb + Upload -->\n <div\n class=\"tpl:flex tpl:shrink-0 tpl:items-center tpl:justify-between tpl:border-b tpl:px-4 tpl:py-2.5\"\n style=\"border-color: var(--tpl-border)\"\n >\n <div class=\"tpl:flex tpl:items-center tpl:gap-2\">\n <!-- Sidebar toggle (only when media folders feature is enabled) -->\n <button\n v-if=\"canUseMediaFolders\"\n class=\"tpl:flex tpl:size-7 tpl:cursor-pointer tpl:items-center tpl:justify-center tpl:rounded-md tpl:transition-all tpl:duration-150\"\n :style=\"{\n color: ui.showSidebar.value\n ? 'var(--tpl-primary)'\n : 'var(--tpl-text-muted)',\n backgroundColor: ui.showSidebar.value\n ? 'var(--tpl-bg)'\n : 'transparent',\n border: ui.showSidebar.value\n ? '1px solid var(--tpl-border)'\n : '1px solid transparent',\n }\"\n :title=\"\n ui.showSidebar.value\n ? t.mediaLibrary.hideFolders\n : t.mediaLibrary.showFolders\n \"\n @click=\"ui.showSidebar.value = !ui.showSidebar.value\"\n >\n <PanelLeft :size=\"16\" :stroke-width=\"2\" />\n </button>\n\n <template v-if=\"library.viewMode.value === 'frequently-used'\">\n <span\n class=\"tpl:text-xs tpl:font-medium\"\n style=\"color: var(--tpl-text)\"\n >\n {{ t.mediaLibrary.frequentlyUsed }}\n </span>\n </template>\n <template v-else>\n <MediaBreadcrumb\n :folders=\"library.folders.value\"\n :current-folder-id=\"library.currentFolderId.value\"\n @navigate=\"library.navigateToFolder\"\n />\n </template>\n\n <!-- Layout toggle -->\n <div\n class=\"tpl:flex tpl:rounded-md tpl:p-0.5\"\n style=\"\n border: 1px solid var(--tpl-border);\n background-color: var(--tpl-bg);\n \"\n >\n <button\n class=\"tpl:flex tpl:size-6 tpl:cursor-pointer tpl:items-center tpl:justify-center tpl:rounded tpl:transition-all tpl:duration-150\"\n :style=\"{\n color:\n ui.layoutMode.value === 'grid'\n ? 'var(--tpl-primary)'\n : 'var(--tpl-text-muted)',\n backgroundColor:\n ui.layoutMode.value === 'grid'\n ? 'var(--tpl-bg-elevated)'\n : 'transparent',\n }\"\n :title=\"t.mediaLibrary.viewGrid\"\n @click=\"ui.layoutMode.value = 'grid'\"\n >\n <Grid2x2 :size=\"14\" :stroke-width=\"2\" />\n </button>\n <button\n class=\"tpl:flex tpl:size-6 tpl:cursor-pointer tpl:items-center tpl:justify-center tpl:rounded tpl:transition-all tpl:duration-150\"\n :style=\"{\n color:\n ui.layoutMode.value === 'list'\n ? 'var(--tpl-primary)'\n : 'var(--tpl-text-muted)',\n backgroundColor:\n ui.layoutMode.value === 'list'\n ? 'var(--tpl-bg-elevated)'\n : 'transparent',\n }\"\n :title=\"t.mediaLibrary.viewList\"\n @click=\"ui.layoutMode.value = 'list'\"\n >\n <List :size=\"14\" :stroke-width=\"2\" />\n </button>\n </div>\n </div>\n\n <div class=\"tpl:flex tpl:items-center tpl:gap-2\">\n <select\n v-if=\"availableCategories.length > 1\"\n class=\"tpl:rounded-md tpl:border tpl:py-1.5 tpl:pr-7 tpl:pl-2.5 tpl:text-xs tpl:transition-all tpl:duration-150 tpl:outline-none\"\n style=\"\n border-color: var(--tpl-border);\n background-color: var(--tpl-bg);\n color: var(--tpl-text);\n \"\n :value=\"library.categoryFilter.value ?? ''\"\n @change=\"\n library.filterByCategory(\n ($event.target as HTMLSelectElement).value || null,\n )\n \"\n >\n <option value=\"\">\n {{ t.mediaLibrary.filterAll }}\n </option>\n <option\n v-for=\"category in availableCategories\"\n :key=\"category\"\n :value=\"category\"\n >\n {{ ui.getCategoryLabel(category) }}\n </option>\n </select>\n <select\n class=\"tpl:rounded-md tpl:border tpl:py-1.5 tpl:pr-7 tpl:pl-2.5 tpl:text-xs tpl:transition-all tpl:duration-150 tpl:outline-none\"\n style=\"\n border-color: var(--tpl-border);\n background-color: var(--tpl-bg);\n color: var(--tpl-text);\n \"\n :value=\"library.sortOption.value\"\n @change=\"\n library.sortBy(($event.target as HTMLSelectElement).value)\n \"\n >\n <option value=\"newest\">\n {{ t.mediaLibrary.sortNewest }}\n </option>\n <option value=\"oldest\">\n {{ t.mediaLibrary.sortOldest }}\n </option>\n <option value=\"name_asc\">\n {{ t.mediaLibrary.sortNameAsc }}\n </option>\n <option value=\"name_desc\">\n {{ t.mediaLibrary.sortNameDesc }}\n </option>\n <option value=\"size_asc\">\n {{ t.mediaLibrary.sortSizeAsc }}\n </option>\n <option value=\"size_desc\">\n {{ t.mediaLibrary.sortSizeDesc }}\n </option>\n </select>\n </div>\n </div>\n\n <!-- Scrollable content area -->\n <div class=\"tpl:min-h-0 tpl:flex-1 tpl:overflow-y-auto\">\n <!-- Upload zone (only in files mode) -->\n <div\n v-if=\"library.viewMode.value === 'files'\"\n class=\"tpl:px-4 tpl:pt-3\"\n >\n <MediaUploadZone\n :is-uploading=\"library.isUploading.value\"\n :upload-progress=\"library.uploadProgress.value\"\n @upload=\"ui.handleUpload\"\n />\n <button\n v-if=\"canImportFromUrl\"\n class=\"tpl:mt-2 tpl:flex tpl:w-full tpl:cursor-pointer tpl:items-center tpl:justify-center tpl:gap-1.5 tpl:rounded-md tpl:border tpl:border-dashed tpl:px-3 tpl:py-1.5 tpl:text-xs tpl:font-medium tpl:transition-all tpl:duration-150\"\n style=\"\n border-color: var(--tpl-border);\n color: var(--tpl-text-muted);\n background-color: var(--tpl-bg);\n \"\n @click=\"ui.showImportUrlModal.value = true\"\n >\n <Link :size=\"14\" :stroke-width=\"2\" />\n {{ t.mediaLibrary.importFromUrl }}\n </button>\n </div>\n\n <!-- Image grid -->\n <MediaGrid\n :items=\"ui.displayItems.value\"\n :selected-ids=\"library.selectedItems.value\"\n :is-loading=\"library.isLoading.value\"\n :has-more=\"\n library.viewMode.value === 'files' && library.hasMore.value\n \"\n :accept=\"accept\"\n :layout=\"ui.layoutMode.value\"\n @select=\"ui.handleSelect\"\n @toggle=\"library.toggleSelection\"\n @load-more=\"library.loadMore\"\n @edit=\"ui.handleEditItem\"\n @replace=\"ui.handleReplaceItem\"\n />\n </div>\n </div>\n </div>\n\n <!-- Import from URL Modal -->\n <MediaImportUrlModal\n :visible=\"ui.showImportUrlModal.value\"\n :is-importing=\"library.isImportingFromUrl.value\"\n :error=\"library.importFromUrlError.value\"\n @import=\"ui.handleImportFromUrl\"\n @close=\"ui.showImportUrlModal.value = false\"\n />\n\n <!-- Edit Modal -->\n <MediaEditModal\n :visible=\"!!ui.editingItem.value\"\n :item=\"ui.editingItem.value\"\n @save=\"ui.handleEditSave\"\n @close=\"ui.editingItem.value = null\"\n />\n\n <!-- Replace Modal -->\n <MediaReplaceModal\n :visible=\"library.showReplaceWarning.value\"\n :item=\"library.pendingReplaceItem.value\"\n :usage-info=\"library.replaceUsageInfo.value\"\n :is-replacing=\"library.isReplacing.value\"\n :error=\"library.replaceError.value\"\n @replace=\"ui.handleReplaceFile\"\n @close=\"library.cancelReplace\"\n />\n\n <!-- Delete Warning Dialog -->\n <Transition\n enter-active-class=\"tpl:transition tpl:ease-out tpl:duration-150\"\n enter-from-class=\"tpl:opacity-0\"\n enter-to-class=\"tpl:opacity-100\"\n leave-active-class=\"tpl:transition tpl:ease-in tpl:duration-100\"\n leave-from-class=\"tpl:opacity-100\"\n leave-to-class=\"tpl:opacity-0\"\n >\n <div\n v-if=\"library.showDeleteWarning.value\"\n class=\"tpl:absolute tpl:inset-0 tpl:z-10 tpl:flex tpl:items-center tpl:justify-center tpl:rounded-[var(--tpl-radius-lg)]\"\n style=\"\n background-color: var(--tpl-overlay);\n backdrop-filter: blur(8px);\n -webkit-backdrop-filter: blur(8px);\n \"\n @click.self=\"library.cancelDelete\"\n >\n <div\n class=\"tpl-scale-in tpl:mx-4 tpl:w-full tpl:max-w-sm tpl:rounded-[var(--tpl-radius-lg)] tpl:p-5\"\n style=\"\n background-color: var(--tpl-bg-elevated);\n box-shadow: var(--tpl-shadow-xl);\n \"\n >\n <h3\n class=\"tpl:mb-2 tpl:text-sm tpl:font-semibold\"\n style=\"color: var(--tpl-text)\"\n >\n {{ t.mediaLibrary.deleteWarningTitle }}\n </h3>\n <p\n class=\"tpl:text-xs\"\n :class=\"ui.hasUsedFiles.value ? 'tpl:mb-2' : 'tpl:mb-4'\"\n style=\"color: var(--tpl-text-muted)\"\n >\n {{ t.mediaLibrary.deleteWarningMessage }}\n </p>\n <p\n v-if=\"ui.hasUsedFiles.value\"\n class=\"tpl:mb-4 tpl:text-xs\"\n style=\"color: var(--tpl-text-muted)\"\n >\n {{ t.mediaLibrary.deleteWarningUsageNote }}\n </p>\n\n <div\n v-if=\"ui.hasUsedFiles.value\"\n class=\"tpl:mb-4 tpl:max-h-32 tpl:overflow-y-auto tpl:rounded tpl:border tpl:p-2\"\n style=\"border-color: var(--tpl-border)\"\n >\n <div\n v-for=\"(info, mediaId) in library.deleteUsageInfo.value\"\n :key=\"mediaId\"\n class=\"tpl:text-xs\"\n style=\"color: var(--tpl-text)\"\n >\n <template v-if=\"info.template_count > 0\">\n <span class=\"tpl:font-medium\">\n {{\n ui.displayItems.value.find((i) => i.id === mediaId)\n ?.filename || mediaId\n }}\n </span>\n <span style=\"color: var(--tpl-text-muted)\">\n -\n {{\n t.mediaLibrary.usedInTemplates.replace(\n \"{count}\",\n info.template_count.toString(),\n )\n }}\n </span>\n </template>\n </div>\n </div>\n\n <div class=\"tpl:flex tpl:justify-end tpl:gap-2\">\n <button\n class=\"tpl:cursor-pointer tpl:rounded-md tpl:border tpl:px-3 tpl:py-1.5 tpl:text-xs tpl:font-medium tpl:transition-all tpl:duration-150\"\n style=\"\n border-color: var(--tpl-border);\n color: var(--tpl-text);\n background-color: var(--tpl-bg);\n \"\n @click=\"library.cancelDelete\"\n >\n {{ t.mediaLibrary.cancel }}\n </button>\n <button\n class=\"tpl:cursor-pointer tpl:rounded-md tpl:border tpl:px-3 tpl:py-1.5 tpl:text-xs tpl:font-medium tpl:transition-all tpl:duration-150\"\n style=\"\n border-color: var(--tpl-danger);\n color: var(--tpl-danger);\n background-color: var(--tpl-danger-light);\n \"\n @click=\"library.confirmDelete\"\n >\n {{\n ui.hasUsedFiles.value\n ? t.mediaLibrary.deleteAnyway\n : t.mediaLibrary.confirmDelete\n }}\n </button>\n </div>\n </div>\n </div>\n </Transition>\n\n <!-- Footer -->\n <div\n class=\"tpl:flex tpl:shrink-0 tpl:items-center tpl:justify-between tpl:border-t tpl:px-5 tpl:py-3\"\n style=\"border-color: var(--tpl-border)\"\n >\n <div\n class=\"tpl:flex tpl:min-w-0 tpl:flex-1 tpl:items-center tpl:gap-3\"\n >\n <MediaPreviewPanel\n v-if=\"library.previewItem.value\"\n v-model:selected-conversion=\"ui.selectedConversion.value\"\n :item=\"library.previewItem.value\"\n :folders=\"library.folders.value\"\n />\n </div>\n <div class=\"tpl:flex tpl:items-center tpl:gap-5\">\n <!-- Copy URL + Move group -->\n <div\n v-if=\"library.selectedItems.value.size > 0\"\n class=\"tpl:flex tpl:items-center tpl:gap-2\"\n >\n <button\n v-if=\"library.previewItem.value\"\n class=\"tpl:flex tpl:cursor-pointer tpl:items-center tpl:gap-1 tpl:rounded-md tpl:border tpl:px-3 tpl:py-1.5 tpl:text-xs tpl:font-medium tpl:transition-all tpl:duration-150\"\n :style=\"{\n borderColor: ui.copied.value\n ? 'var(--tpl-success)'\n : 'var(--tpl-border)',\n color: ui.copied.value\n ? 'var(--tpl-success)'\n : 'var(--tpl-text)',\n backgroundColor: 'var(--tpl-bg)',\n }\"\n @click=\"ui.copy(ui.selectedUrl.value!)\"\n >\n <Copy v-if=\"!ui.copied.value\" :size=\"12\" :stroke-width=\"2\" />\n <Check v-else :size=\"12\" :stroke-width=\"2\" />\n {{\n ui.copied.value\n ? t.mediaLibrary.copied\n : t.mediaLibrary.copyUrl\n }}\n </button>\n <div v-if=\"canUseMediaFolders\" class=\"tpl:relative\">\n <button\n class=\"tpl:cursor-pointer tpl:rounded-md tpl:border tpl:px-3 tpl:py-1.5 tpl:text-xs tpl:font-medium tpl:transition-all tpl:duration-150\"\n style=\"\n border-color: var(--tpl-border);\n color: var(--tpl-text);\n background-color: var(--tpl-bg);\n \"\n @click=\"ui.showMovePicker.value = !ui.showMovePicker.value\"\n >\n {{ t.mediaLibrary.moveSelected }}\n </button>\n <MediaMovePicker\n v-if=\"ui.showMovePicker.value\"\n :folders=\"library.folders.value\"\n :current-folder-id=\"library.currentFolderId.value\"\n @select=\"ui.handleMoveToFolder\"\n @close=\"ui.showMovePicker.value = false\"\n />\n </div>\n </div>\n <!-- Delete + Select group -->\n <div class=\"tpl:flex tpl:items-center tpl:gap-2\">\n <button\n v-if=\"library.selectedItems.value.size > 0\"\n class=\"tpl:cursor-pointer tpl:rounded-md tpl:border tpl:px-3 tpl:py-1.5 tpl:text-xs tpl:font-medium tpl:transition-all tpl:duration-150\"\n style=\"\n border-color: var(--tpl-danger);\n color: var(--tpl-danger);\n background-color: var(--tpl-danger-light);\n \"\n @click=\"ui.handleDeleteClick\"\n >\n {{ t.mediaLibrary.deleteSelected }}\n </button>\n <button\n class=\"tpl:cursor-pointer tpl:rounded-md tpl:px-4 tpl:py-1.5 tpl:text-sm tpl:font-medium tpl:shadow-xs tpl:transition-all tpl:duration-150 tpl:hover:opacity-90 tpl:disabled:cursor-not-allowed tpl:disabled:opacity-50\"\n style=\"\n background-color: var(--tpl-primary);\n color: var(--tpl-bg);\n \"\n :disabled=\"!isConfirmable()\"\n @click=\"confirmSelection\"\n >\n {{\n accept?.length\n ? t.mediaLibrary.selectImage\n : t.mediaLibrary.selectFile\n }}\n </button>\n </div>\n </div>\n </div>\n </div>\n </div>\n </Transition>\n </Teleport>\n</template>\n"],"x_google_ignoreList":[8],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"media-library-Bb2PavAd.js","names":["t","e","i","n","s","o","r","a","h","c","l","u","d","m"],"sources":["../../../../media-library/src/api-client.ts","../../../../media-library/src/composable.ts","../../../../media-library/src/composables/useI18n.ts","../../../../media-library/src/components/media/MediaBreadcrumb.vue","../../../../media-library/src/components/media/MediaBreadcrumb.vue","../../../../media-library/src/composables/useMediaCategories.ts","../../../../media-library/src/composables/useImageCrop.ts","../../../../media-library/src/keys.ts","../../../../../node_modules/.pnpm/vue-advanced-cropper@2.8.9_vue@3.5.34_typescript@6.0.3_/node_modules/vue-advanced-cropper/dist/index.esm-bundler.js","../../../../media-library/src/components/media/MediaEditModal.vue","../../../../media-library/src/components/media/MediaEditModal.vue","../../../../media-library/src/components/media/MediaFolderTreeNode.vue","../../../../media-library/src/components/media/MediaFolderTreeNode.vue","../../../../media-library/src/components/media/MediaFolderTree.vue","../../../../media-library/src/components/media/MediaFolderTree.vue","../../../../media-library/src/components/media/MediaFileIcon.vue","../../../../media-library/src/components/media/MediaFileIcon.vue","../../../../media-library/src/components/media/MediaGrid.vue","../../../../media-library/src/components/media/MediaGrid.vue","../../../../media-library/src/components/media/MediaImportUrlModal.vue","../../../../media-library/src/components/media/MediaImportUrlModal.vue","../../../../media-library/src/components/media/MediaMovePicker.vue","../../../../media-library/src/components/media/MediaMovePicker.vue","../../../../media-library/src/components/media/MediaPreviewPanel.vue","../../../../media-library/src/components/media/MediaPreviewPanel.vue","../../../../media-library/src/components/media/MediaReplaceModal.vue","../../../../media-library/src/components/media/MediaReplaceModal.vue","../../../../media-library/src/components/media/MediaUploadZone.vue","../../../../media-library/src/components/media/MediaUploadZone.vue","../../../../media-library/src/components/media/StorageProgressRing.vue","../../../../media-library/src/components/media/StorageProgressRing.vue","../../../../media-library/src/composables/useMediaLibraryUI.ts","../../../../media-library/src/components/MediaLibraryModal.vue","../../../../media-library/src/components/MediaLibraryModal.vue"],"sourcesContent":["import type { ApiError, ApiResponse } from \"@templatical/types\";\nimport type { AuthManager } from \"@templatical/core/cloud\";\nimport { API_ROUTES, buildUrl } from \"@templatical/core/cloud\";\nimport type {\n MediaBrowseParams,\n MediaBrowseResponse,\n MediaFolder,\n MediaItem,\n MediaUsageResponse,\n} from \"./types\";\n\nexport class MediaApiClient {\n constructor(private readonly authManager: AuthManager) {}\n\n private get projectId(): string {\n return this.authManager.projectId;\n }\n\n private get tenantSlug(): string {\n return this.authManager.tenantSlug;\n }\n\n private get baseParams(): Record<string, string> {\n return { project: this.projectId, tenant: this.tenantSlug };\n }\n\n private async request<T>(\n path: string,\n options: RequestInit = {},\n ): Promise<T> {\n const response = await this.authManager.authenticatedFetch(path, {\n ...options,\n headers: {\n \"Content-Type\": \"application/json\",\n Accept: \"application/json\",\n ...options.headers,\n },\n });\n\n if (!response.ok) {\n const error: ApiError = await response.json().catch(() => ({\n message: `HTTP error ${response.status}`,\n }));\n throw new Error(error.message, { cause: error });\n }\n\n if (response.status === 204) {\n return undefined as T;\n }\n\n const json: ApiResponse<T> = await response.json();\n return json.data;\n }\n\n async browseMedia(\n params: Omit<MediaBrowseParams, \"project_id\">,\n ): Promise<MediaBrowseResponse> {\n const query = new URLSearchParams();\n if (params.folder_id) query.set(\"folder_id\", params.folder_id);\n if (params.search) query.set(\"search\", params.search);\n if (params.category) query.set(\"category\", params.category);\n if (params.sort) query.set(\"sort\", params.sort);\n if (params.cursor) query.set(\"cursor\", params.cursor);\n\n const queryString = query.toString();\n const url = `${buildUrl(API_ROUTES[\"media.browse\"], this.baseParams)}${queryString ? `?${queryString}` : \"\"}`;\n const response = await this.authManager.authenticatedFetch(url, {\n headers: { Accept: \"application/json\" },\n });\n\n if (!response.ok) {\n const error: ApiError = await response.json().catch(() => ({\n message: `HTTP error ${response.status}`,\n }));\n throw new Error(error.message, { cause: error });\n }\n\n return response.json();\n }\n\n async uploadMedia(file: File, folderId?: string | null): Promise<MediaItem> {\n const formData = new FormData();\n formData.append(\"file\", file);\n if (folderId) formData.append(\"folder_id\", folderId);\n\n const url = buildUrl(API_ROUTES[\"media.upload\"], this.baseParams);\n const response = await this.authManager.authenticatedFetch(url, {\n method: \"POST\",\n headers: { Accept: \"application/json\" },\n body: formData,\n });\n\n if (!response.ok) {\n const error: ApiError = await response.json().catch(() => ({\n message: `HTTP error ${response.status}`,\n }));\n throw new Error(error.message, { cause: error });\n }\n\n const json: ApiResponse<MediaItem> = await response.json();\n return json.data;\n }\n\n async updateMedia(\n mediaId: string,\n filename: string,\n altText?: string,\n ): Promise<MediaItem> {\n return this.request<MediaItem>(\n buildUrl(API_ROUTES[\"media.update\"], {\n ...this.baseParams,\n media: mediaId,\n }),\n {\n method: \"PUT\",\n body: JSON.stringify({\n filename,\n alt_text: altText,\n }),\n },\n );\n }\n\n async deleteMedia(ids: string[]): Promise<void> {\n return this.request<void>(\n buildUrl(API_ROUTES[\"media.delete\"], this.baseParams),\n {\n method: \"POST\",\n body: JSON.stringify({ ids }),\n },\n );\n }\n\n async moveMedia(\n ids: string[],\n folderId: string | null,\n ): Promise<MediaItem[]> {\n return this.request<MediaItem[]>(\n buildUrl(API_ROUTES[\"media.move\"], this.baseParams),\n {\n method: \"POST\",\n body: JSON.stringify({ ids, folder_id: folderId }),\n },\n );\n }\n\n async getMediaFolders(): Promise<MediaFolder[]> {\n return this.request<MediaFolder[]>(\n buildUrl(API_ROUTES[\"folders.index\"], this.baseParams),\n );\n }\n\n async createMediaFolder(\n name: string,\n parentId?: string | null,\n ): Promise<MediaFolder> {\n return this.request<MediaFolder>(\n buildUrl(API_ROUTES[\"folders.store\"], this.baseParams),\n {\n method: \"POST\",\n body: JSON.stringify({\n name,\n parent_id: parentId ?? null,\n }),\n },\n );\n }\n\n async renameMediaFolder(\n folderId: string,\n name: string,\n ): Promise<MediaFolder> {\n return this.request<MediaFolder>(\n buildUrl(API_ROUTES[\"folders.update\"], {\n ...this.baseParams,\n mediaFolder: folderId,\n }),\n {\n method: \"PUT\",\n body: JSON.stringify({ name }),\n },\n );\n }\n\n async deleteMediaFolder(folderId: string): Promise<void> {\n return this.request<void>(\n buildUrl(API_ROUTES[\"folders.destroy\"], {\n ...this.baseParams,\n mediaFolder: folderId,\n }),\n {\n method: \"DELETE\",\n },\n );\n }\n\n async checkMediaUsage(ids: string[]): Promise<MediaUsageResponse> {\n const response = await this.authManager.authenticatedFetch(\n buildUrl(API_ROUTES[\"media.checkUsage\"], this.baseParams),\n {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n Accept: \"application/json\",\n },\n body: JSON.stringify({ ids }),\n },\n );\n\n if (!response.ok) {\n const error: ApiError = await response.json().catch(() => ({\n message: `HTTP error ${response.status}`,\n }));\n throw new Error(error.message, { cause: error });\n }\n\n return response.json();\n }\n\n async getFrequentlyUsed(): Promise<MediaItem[]> {\n return this.request<MediaItem[]>(\n buildUrl(API_ROUTES[\"media.frequentlyUsed\"], this.baseParams),\n );\n }\n\n async importFromUrl(\n url: string,\n folderId?: string | null,\n ): Promise<MediaItem> {\n return this.request<MediaItem>(\n buildUrl(API_ROUTES[\"media.importFromUrl\"], this.baseParams),\n {\n method: \"POST\",\n body: JSON.stringify({\n url,\n folder_id: folderId ?? null,\n }),\n },\n );\n }\n\n async replaceMedia(mediaId: string, file: File): Promise<MediaItem> {\n const formData = new FormData();\n formData.append(\"file\", file);\n\n const url = buildUrl(API_ROUTES[\"media.replace\"], {\n ...this.baseParams,\n media: mediaId,\n });\n const response = await this.authManager.authenticatedFetch(url, {\n method: \"POST\",\n headers: { Accept: \"application/json\" },\n body: formData,\n });\n\n if (!response.ok) {\n const error: ApiError = await response.json().catch(() => ({\n message: `HTTP error ${response.status}`,\n }));\n throw new Error(error.message, { cause: error });\n }\n\n const json: ApiResponse<MediaItem> = await response.json();\n return json.data;\n }\n}\n","import type { AuthManager } from \"@templatical/core/cloud\";\nimport { MediaApiClient } from \"./api-client\";\nimport { ref, type Ref } from \"vue\";\nimport type { MediaFolder, MediaItem, MediaUsageInfo } from \"./types\";\n\nexport type MediaViewMode = \"files\" | \"frequently-used\";\n\nexport interface UseMediaLibraryOptions {\n projectId: string;\n authManager: AuthManager;\n onError?: (error: Error) => void;\n}\n\nexport function useMediaLibrary(options: UseMediaLibraryOptions) {\n if (!options.projectId) {\n throw new Error(\"projectId is required for useMediaLibrary\");\n }\n\n const api = new MediaApiClient(options.authManager);\n\n const items: Ref<MediaItem[]> = ref([]);\n const folders: Ref<MediaFolder[]> = ref([]);\n const currentFolderId: Ref<string | null> = ref(null);\n const viewMode: Ref<MediaViewMode> = ref(\"files\");\n const searchQuery: Ref<string> = ref(\"\");\n const categoryFilter: Ref<string | null> = ref(null);\n const sortOption: Ref<string> = ref(\"newest\");\n const isLoading = ref(false);\n const isUploading = ref(false);\n const hasMore = ref(false);\n const nextCursor: Ref<string | null> = ref(null);\n const uploadProgress: Ref<{ current: number; total: number } | null> =\n ref(null);\n const selectedItems: Ref<Set<string>> = ref(new Set());\n const previewItem: Ref<MediaItem | null> = ref(null);\n const frequentlyUsedItems: Ref<MediaItem[]> = ref([]);\n const deleteUsageInfo: Ref<Record<string, MediaUsageInfo>> = ref({});\n const showDeleteWarning = ref(false);\n const pendingDeleteIds: Ref<string[]> = ref([]);\n const isImportingFromUrl = ref(false);\n const importFromUrlError: Ref<string | null> = ref(null);\n const isReplacing = ref(false);\n const replaceError: Ref<string | null> = ref(null);\n const showReplaceWarning = ref(false);\n const pendingReplaceItem: Ref<MediaItem | null> = ref(null);\n const replaceUsageInfo: Ref<MediaUsageInfo | null> = ref(null);\n\n // Monotonic token so out-of-order browseMedia responses (folder switch /\n // search change before the previous request settled) don't overwrite the\n // current view with stale data.\n let browseRequestId = 0;\n\n async function loadItems(): Promise<void> {\n const requestId = ++browseRequestId;\n isLoading.value = true;\n try {\n const response = await api.browseMedia({\n folder_id: searchQuery.value ? undefined : currentFolderId.value,\n search: searchQuery.value || undefined,\n category: categoryFilter.value || undefined,\n sort: sortOption.value !== \"newest\" ? sortOption.value : undefined,\n });\n if (requestId !== browseRequestId) return;\n items.value = response.data;\n nextCursor.value = response.meta.next_cursor;\n hasMore.value = !!response.meta.next_cursor;\n } catch (error) {\n if (requestId !== browseRequestId) return;\n options.onError?.(error as Error);\n } finally {\n if (requestId === browseRequestId) {\n isLoading.value = false;\n }\n }\n }\n\n async function loadMore(): Promise<void> {\n if (!hasMore.value || !nextCursor.value || isLoading.value) return;\n\n const requestId = ++browseRequestId;\n isLoading.value = true;\n try {\n const response = await api.browseMedia({\n folder_id: searchQuery.value ? undefined : currentFolderId.value,\n search: searchQuery.value || undefined,\n category: categoryFilter.value || undefined,\n sort: sortOption.value !== \"newest\" ? sortOption.value : undefined,\n cursor: nextCursor.value,\n });\n if (requestId !== browseRequestId) return;\n items.value = [...items.value, ...response.data];\n nextCursor.value = response.meta.next_cursor;\n hasMore.value = !!response.meta.next_cursor;\n } catch (error) {\n if (requestId !== browseRequestId) return;\n options.onError?.(error as Error);\n } finally {\n if (requestId === browseRequestId) {\n isLoading.value = false;\n }\n }\n }\n\n async function search(query: string): Promise<void> {\n searchQuery.value = query;\n await loadItems();\n }\n\n async function filterByCategory(category: string | null): Promise<void> {\n categoryFilter.value = category;\n await loadItems();\n }\n\n async function sortBy(option: string): Promise<void> {\n sortOption.value = option;\n await loadItems();\n }\n\n async function navigateToFolder(folderId: string | null): Promise<void> {\n viewMode.value = \"files\";\n currentFolderId.value = folderId;\n searchQuery.value = \"\";\n selectedItems.value = new Set();\n previewItem.value = null;\n await loadItems();\n }\n\n async function showFrequentlyUsed(): Promise<void> {\n viewMode.value = \"frequently-used\";\n currentFolderId.value = null;\n searchQuery.value = \"\";\n selectedItems.value = new Set();\n previewItem.value = null;\n await loadFrequentlyUsed();\n }\n\n async function uploadFile(file: File): Promise<MediaItem | null> {\n isUploading.value = true;\n try {\n const media = await api.uploadMedia(file, currentFolderId.value);\n items.value = [media, ...items.value];\n return media;\n } catch (error) {\n options.onError?.(error as Error);\n return null;\n } finally {\n isUploading.value = false;\n }\n }\n\n async function uploadFiles(files: File[]): Promise<void> {\n isUploading.value = true;\n uploadProgress.value = { current: 0, total: files.length };\n try {\n for (let i = 0; i < files.length; i++) {\n uploadProgress.value = { current: i + 1, total: files.length };\n try {\n const media = await api.uploadMedia(files[i], currentFolderId.value);\n items.value = [media, ...items.value];\n } catch (error) {\n options.onError?.(error as Error);\n }\n }\n } finally {\n isUploading.value = false;\n uploadProgress.value = null;\n }\n }\n\n async function moveSelected(targetFolderId: string | null): Promise<void> {\n if (selectedItems.value.size === 0) {\n return;\n }\n\n try {\n const movedItems = await api.moveMedia(\n [...selectedItems.value],\n targetFolderId,\n );\n if (currentFolderId.value === null) {\n const movedMap = new Map(movedItems.map((item) => [item.id, item]));\n items.value = items.value.map((item) => movedMap.get(item.id) ?? item);\n } else {\n items.value = items.value.filter(\n (item) => !selectedItems.value.has(item.id),\n );\n }\n selectedItems.value = new Set();\n previewItem.value = null;\n } catch (error) {\n options.onError?.(error as Error);\n }\n }\n\n async function updateFile(\n mediaId: string,\n filename: string,\n altText?: string,\n ): Promise<void> {\n try {\n const updated = await api.updateMedia(mediaId, filename, altText);\n items.value = items.value.map((item) =>\n item.id === mediaId ? updated : item,\n );\n if (previewItem.value?.id === mediaId) {\n previewItem.value = updated;\n }\n } catch (error) {\n options.onError?.(error as Error);\n }\n }\n\n async function deleteSelected(): Promise<void> {\n if (selectedItems.value.size === 0) return;\n\n try {\n await api.deleteMedia([...selectedItems.value]);\n items.value = items.value.filter(\n (item) => !selectedItems.value.has(item.id),\n );\n frequentlyUsedItems.value = frequentlyUsedItems.value.filter(\n (item) => !selectedItems.value.has(item.id),\n );\n selectedItems.value = new Set();\n previewItem.value = null;\n } catch (error) {\n options.onError?.(error as Error);\n }\n }\n\n async function loadFrequentlyUsed(): Promise<void> {\n try {\n frequentlyUsedItems.value = await api.getFrequentlyUsed();\n } catch (error) {\n options.onError?.(error as Error);\n }\n }\n\n async function checkUsageBeforeDelete(): Promise<boolean> {\n if (selectedItems.value.size === 0) {\n return false;\n }\n\n pendingDeleteIds.value = [...selectedItems.value];\n\n try {\n const response = await api.checkMediaUsage(pendingDeleteIds.value);\n deleteUsageInfo.value = response.data;\n\n const hasUsage = Object.values(response.data).some(\n (info) => info.template_count > 0,\n );\n\n showDeleteWarning.value = true;\n return hasUsage;\n } catch (error) {\n options.onError?.(error as Error);\n return false;\n }\n }\n\n async function confirmDelete(): Promise<void> {\n showDeleteWarning.value = false;\n\n if (pendingDeleteIds.value.length === 0) {\n return;\n }\n\n try {\n await api.deleteMedia(pendingDeleteIds.value);\n items.value = items.value.filter(\n (item) => !pendingDeleteIds.value.includes(item.id),\n );\n frequentlyUsedItems.value = frequentlyUsedItems.value.filter(\n (item) => !pendingDeleteIds.value.includes(item.id),\n );\n selectedItems.value = new Set();\n previewItem.value = null;\n pendingDeleteIds.value = [];\n deleteUsageInfo.value = {};\n } catch (error) {\n options.onError?.(error as Error);\n }\n }\n\n function cancelDelete(): void {\n showDeleteWarning.value = false;\n pendingDeleteIds.value = [];\n deleteUsageInfo.value = {};\n }\n\n async function importFromUrl(url: string): Promise<MediaItem | null> {\n isImportingFromUrl.value = true;\n importFromUrlError.value = null;\n try {\n const media = await api.importFromUrl(url, currentFolderId.value);\n items.value = [media, ...items.value];\n return media;\n } catch (error) {\n importFromUrlError.value =\n error instanceof Error ? error.message : \"Import failed\";\n options.onError?.(error as Error);\n return null;\n } finally {\n isImportingFromUrl.value = false;\n }\n }\n\n function toggleSelection(id: string): void {\n const next = new Set(selectedItems.value);\n if (next.has(id)) {\n next.delete(id);\n } else {\n next.add(id);\n }\n selectedItems.value = next;\n }\n\n function clearSelection(): void {\n selectedItems.value = new Set();\n previewItem.value = null;\n }\n\n function selectItem(item: MediaItem): void {\n previewItem.value = item;\n selectedItems.value = new Set([item.id]);\n }\n\n async function loadFolders(): Promise<void> {\n try {\n folders.value = await api.getMediaFolders();\n } catch (error) {\n options.onError?.(error as Error);\n }\n }\n\n async function createFolder(\n name: string,\n parentId?: string | null,\n ): Promise<MediaFolder | null> {\n try {\n const folder = await api.createMediaFolder(name, parentId);\n await loadFolders();\n return folder;\n } catch (error) {\n options.onError?.(error as Error);\n return null;\n }\n }\n\n function findFolderInTree(\n folderList: MediaFolder[],\n id: string,\n ): MediaFolder | null {\n for (const folder of folderList) {\n if (folder.id === id) return folder;\n if (folder.children) {\n const found = findFolderInTree(folder.children, id);\n if (found) return found;\n }\n }\n return null;\n }\n\n async function renameFolder(folderId: string, name: string): Promise<void> {\n try {\n await api.renameMediaFolder(folderId, name);\n await loadFolders();\n } catch (error) {\n options.onError?.(error as Error);\n }\n }\n\n async function deleteFolder(folderId: string): Promise<void> {\n try {\n const folder = findFolderInTree(folders.value, folderId);\n const parentId = folder?.parent_id ?? null;\n\n await api.deleteMediaFolder(folderId);\n\n if (currentFolderId.value === folderId) {\n currentFolderId.value = parentId;\n }\n\n await loadFolders();\n await loadItems();\n } catch (error) {\n options.onError?.(error as Error);\n }\n }\n\n async function checkUsageBeforeReplace(item: MediaItem): Promise<void> {\n pendingReplaceItem.value = item;\n replaceError.value = null;\n\n try {\n const response = await api.checkMediaUsage([item.id]);\n replaceUsageInfo.value = response.data[item.id] ?? null;\n showReplaceWarning.value = true;\n } catch (error) {\n options.onError?.(error as Error);\n }\n }\n\n function cancelReplace(): void {\n showReplaceWarning.value = false;\n pendingReplaceItem.value = null;\n replaceUsageInfo.value = null;\n replaceError.value = null;\n }\n\n async function replaceFile(file: File): Promise<MediaItem | null> {\n if (!pendingReplaceItem.value) {\n return null;\n }\n\n isReplacing.value = true;\n replaceError.value = null;\n\n try {\n const updated = await api.replaceMedia(pendingReplaceItem.value.id, file);\n\n items.value = items.value.map((item) =>\n item.id === updated.id ? updated : item,\n );\n\n frequentlyUsedItems.value = frequentlyUsedItems.value.map((item) =>\n item.id === updated.id ? updated : item,\n );\n\n if (previewItem.value?.id === updated.id) {\n previewItem.value = updated;\n }\n\n showReplaceWarning.value = false;\n pendingReplaceItem.value = null;\n replaceUsageInfo.value = null;\n\n return updated;\n } catch (error) {\n replaceError.value =\n error instanceof Error ? error.message : \"Replace failed\";\n options.onError?.(error as Error);\n return null;\n } finally {\n isReplacing.value = false;\n }\n }\n\n async function replaceMediaDirectly(\n mediaId: string,\n file: File,\n ): Promise<MediaItem | null> {\n try {\n const updated = await api.replaceMedia(mediaId, file);\n\n items.value = items.value.map((item) =>\n item.id === updated.id ? updated : item,\n );\n\n frequentlyUsedItems.value = frequentlyUsedItems.value.map((item) =>\n item.id === updated.id ? updated : item,\n );\n\n if (previewItem.value?.id === updated.id) {\n previewItem.value = updated;\n }\n\n return updated;\n } catch (error) {\n options.onError?.(error as Error);\n return null;\n }\n }\n\n return {\n items,\n folders,\n currentFolderId,\n viewMode,\n searchQuery,\n categoryFilter,\n sortOption,\n isLoading,\n isUploading,\n uploadProgress,\n hasMore,\n selectedItems,\n previewItem,\n frequentlyUsedItems,\n deleteUsageInfo,\n showDeleteWarning,\n loadItems,\n loadMore,\n search,\n filterByCategory,\n sortBy,\n navigateToFolder,\n showFrequentlyUsed,\n uploadFile,\n uploadFiles,\n moveSelected,\n updateFile,\n deleteSelected,\n isImportingFromUrl,\n importFromUrlError,\n importFromUrl,\n toggleSelection,\n clearSelection,\n selectItem,\n loadFolders,\n createFolder,\n renameFolder,\n deleteFolder,\n findFolderInTree,\n loadFrequentlyUsed,\n checkUsageBeforeDelete,\n confirmDelete,\n cancelDelete,\n isReplacing,\n replaceError,\n showReplaceWarning,\n pendingReplaceItem,\n replaceUsageInfo,\n checkUsageBeforeReplace,\n cancelReplace,\n replaceFile,\n replaceMediaDirectly,\n };\n}\n","import type { MediaTranslations } from \"../i18n\";\nimport { type Ref, inject, isRef } from \"vue\";\n\nexport interface UseI18nReturn {\n /** Current translations object */\n t: MediaTranslations;\n /** Format a string with placeholders */\n format: (template: string, values: Record<string, string | number>) => string;\n}\n\n/**\n * Composable for internationalization.\n * Provides access to the current locale's translations.\n *\n * @param translationsOverride - Optional translations to use instead of injected value\n */\nexport function useI18n(\n translationsOverride?: MediaTranslations,\n): UseI18nReturn {\n const injected =\n translationsOverride ??\n inject<MediaTranslations | Ref<MediaTranslations>>(\"translations\")!;\n const t = isRef(injected) ? injected.value : injected;\n\n /**\n * Format a string with placeholders.\n * e.g., format('{minutes}m ago', { minutes: 5 }) -> '5m ago'\n */\n function format(\n template: string,\n values: Record<string, string | number>,\n ): string {\n return template.replace(/\\{(\\w+)\\}/g, (_, key) => {\n return key in values ? String(values[key]) : `{${key}}`;\n });\n }\n\n return {\n t,\n format,\n };\n}\n","<script setup lang=\"ts\">\nimport { useI18n } from \"../../composables/useI18n\";\nimport type { MediaFolder } from \"../../types\";\nimport { ChevronRight } from \"@lucide/vue\";\nimport { computed } from \"vue\";\n\nconst props = defineProps<{\n folders: MediaFolder[];\n currentFolderId: string | null;\n}>();\n\nconst emit = defineEmits<{\n (e: \"navigate\", folderId: string | null): void;\n}>();\n\nconst { t } = useI18n();\n\nconst breadcrumbPath = computed(() => {\n if (!props.currentFolderId) return [];\n const path: MediaFolder[] = [];\n buildPath(props.folders, props.currentFolderId, path);\n return path;\n});\n\nfunction buildPath(\n folderList: MediaFolder[],\n targetId: string,\n path: MediaFolder[],\n): boolean {\n for (const folder of folderList) {\n if (folder.id === targetId) {\n path.push(folder);\n return true;\n }\n if (folder.children && buildPath(folder.children, targetId, path)) {\n path.unshift(folder);\n return true;\n }\n }\n return false;\n}\n</script>\n\n<template>\n <div\n v-if=\"breadcrumbPath.length > 0\"\n class=\"tpl:flex tpl:items-center tpl:gap-1 tpl:text-xs\"\n style=\"color: var(--tpl-text-muted)\"\n >\n <button\n class=\"tpl:transition-colors tpl:duration-150 tpl:hover:underline\"\n style=\"color: var(--tpl-primary)\"\n @click=\"emit('navigate', null)\"\n >\n {{ t.mediaLibrary.allFiles }}\n </button>\n <template v-for=\"(folder, index) in breadcrumbPath\" :key=\"folder.id\">\n <ChevronRight :size=\"12\" :stroke-width=\"2\" />\n <button\n v-if=\"index < breadcrumbPath.length - 1\"\n class=\"tpl:transition-colors tpl:duration-150 tpl:hover:underline\"\n style=\"color: var(--tpl-primary)\"\n @click=\"emit('navigate', folder.id)\"\n >\n {{ folder.name }}\n </button>\n <span v-else style=\"color: var(--tpl-text)\">{{ folder.name }}</span>\n </template>\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport { useI18n } from \"../../composables/useI18n\";\nimport type { MediaFolder } from \"../../types\";\nimport { ChevronRight } from \"@lucide/vue\";\nimport { computed } from \"vue\";\n\nconst props = defineProps<{\n folders: MediaFolder[];\n currentFolderId: string | null;\n}>();\n\nconst emit = defineEmits<{\n (e: \"navigate\", folderId: string | null): void;\n}>();\n\nconst { t } = useI18n();\n\nconst breadcrumbPath = computed(() => {\n if (!props.currentFolderId) return [];\n const path: MediaFolder[] = [];\n buildPath(props.folders, props.currentFolderId, path);\n return path;\n});\n\nfunction buildPath(\n folderList: MediaFolder[],\n targetId: string,\n path: MediaFolder[],\n): boolean {\n for (const folder of folderList) {\n if (folder.id === targetId) {\n path.push(folder);\n return true;\n }\n if (folder.children && buildPath(folder.children, targetId, path)) {\n path.unshift(folder);\n return true;\n }\n }\n return false;\n}\n</script>\n\n<template>\n <div\n v-if=\"breadcrumbPath.length > 0\"\n class=\"tpl:flex tpl:items-center tpl:gap-1 tpl:text-xs\"\n style=\"color: var(--tpl-text-muted)\"\n >\n <button\n class=\"tpl:transition-colors tpl:duration-150 tpl:hover:underline\"\n style=\"color: var(--tpl-primary)\"\n @click=\"emit('navigate', null)\"\n >\n {{ t.mediaLibrary.allFiles }}\n </button>\n <template v-for=\"(folder, index) in breadcrumbPath\" :key=\"folder.id\">\n <ChevronRight :size=\"12\" :stroke-width=\"2\" />\n <button\n v-if=\"index < breadcrumbPath.length - 1\"\n class=\"tpl:transition-colors tpl:duration-150 tpl:hover:underline\"\n style=\"color: var(--tpl-primary)\"\n @click=\"emit('navigate', folder.id)\"\n >\n {{ folder.name }}\n </button>\n <span v-else style=\"color: var(--tpl-text)\">{{ folder.name }}</span>\n </template>\n </div>\n</template>\n","import type { UsePlanConfigReturn } from \"@templatical/core/cloud\";\nimport type { MediaCategory, MediaCategoryData } from \"../types\";\nimport { computed, inject, type ComputedRef } from \"vue\";\n\nexport type { MediaCategory };\n\nexport interface UseMediaCategoriesReturn {\n isMediaLibraryEnabled: ComputedRef<boolean>;\n allAcceptedMimeTypes: ComputedRef<string[]>;\n allAcceptedInputString: ComputedRef<string>;\n maxFileSize: ComputedRef<number>;\n availableCategories: ComputedRef<MediaCategory[]>;\n isAcceptedMimeType: (\n mimeType: string,\n filterCategories?: MediaCategory[],\n ) => boolean;\n isImageMimeType: (mimeType: string) => boolean;\n getCategoryForMimeType: (mimeType: string) => MediaCategory | null;\n}\n\nexport function useMediaCategories(): UseMediaCategoriesReturn {\n const planConfig = inject<UsePlanConfigReturn>(\"planConfig\")!;\n\n const mediaConfig = computed(() => planConfig.config.value?.media ?? null);\n\n const isMediaLibraryEnabled = computed(\n () => mediaConfig.value?.use_media_library ?? true,\n );\n\n const categories = computed(\n () =>\n (mediaConfig.value?.categories as Record<\n MediaCategory,\n MediaCategoryData\n > | null) ?? null,\n );\n\n const allAcceptedMimeTypes = computed(() => {\n if (!categories.value) {\n return [];\n }\n\n return Object.values(categories.value).flatMap((c) => c.mime_types);\n });\n\n const allAcceptedInputString = computed(() =>\n allAcceptedMimeTypes.value.join(\",\"),\n );\n\n const maxFileSize = computed(() => mediaConfig.value?.max_file_size ?? 0);\n\n function isAcceptedMimeType(\n mimeType: string,\n filterCategories?: MediaCategory[],\n ): boolean {\n if (!categories.value) {\n return false;\n }\n\n if (!filterCategories || filterCategories.length === 0) {\n return allAcceptedMimeTypes.value.includes(mimeType);\n }\n\n return filterCategories.some((category) =>\n categories.value![category]?.mime_types.includes(mimeType),\n );\n }\n\n function isImageMimeType(mimeType: string): boolean {\n if (!categories.value) {\n return false;\n }\n\n return categories.value.images?.mime_types.includes(mimeType) ?? false;\n }\n\n function getCategoryForMimeType(mimeType: string): MediaCategory | null {\n if (!categories.value) {\n return null;\n }\n\n for (const [category, data] of Object.entries(categories.value)) {\n if (data.mime_types.includes(mimeType)) {\n return category as MediaCategory;\n }\n }\n\n return null;\n }\n\n const availableCategories = computed((): MediaCategory[] => {\n if (!categories.value) {\n return [];\n }\n\n return Object.keys(categories.value) as MediaCategory[];\n });\n\n return {\n isMediaLibraryEnabled,\n allAcceptedMimeTypes,\n allAcceptedInputString,\n maxFileSize,\n availableCategories,\n isAcceptedMimeType,\n isImageMimeType,\n getCategoryForMimeType,\n };\n}\n","export type AspectRatioPreset =\n | \"free\"\n | \"square\"\n | \"landscape43\"\n | \"landscape169\"\n | \"original\";\n\nexport interface AspectRatioOption {\n key: AspectRatioPreset;\n value: number | undefined;\n}\n\nexport const ASPECT_RATIO_VALUES: Record<\n AspectRatioPreset,\n number | undefined\n> = {\n free: undefined,\n square: 1,\n landscape43: 4 / 3,\n landscape169: 16 / 9,\n original: undefined,\n};\n\nexport interface ExportSettings {\n mimeType: string;\n quality: number;\n}\n\nexport function getExportSettings(originalMimeType: string): ExportSettings {\n if (originalMimeType === \"image/png\") {\n return { mimeType: \"image/png\", quality: 1 };\n }\n if (originalMimeType === \"image/gif\") {\n return { mimeType: \"image/png\", quality: 1 };\n }\n if (originalMimeType === \"image/webp\") {\n return { mimeType: \"image/webp\", quality: 0.92 };\n }\n\n return { mimeType: \"image/jpeg\", quality: 0.92 };\n}\n\nexport function resizeCanvas(\n sourceCanvas: HTMLCanvasElement,\n maxWidth?: number,\n maxHeight?: number,\n): HTMLCanvasElement {\n const sourceWidth = sourceCanvas.width;\n const sourceHeight = sourceCanvas.height;\n\n if (!maxWidth && !maxHeight) {\n return sourceCanvas;\n }\n\n let targetWidth = sourceWidth;\n let targetHeight = sourceHeight;\n\n if (maxWidth && sourceWidth > maxWidth) {\n targetWidth = maxWidth;\n targetHeight = Math.round(sourceHeight * (maxWidth / sourceWidth));\n }\n\n if (maxHeight && targetHeight > maxHeight) {\n targetHeight = maxHeight;\n targetWidth = Math.round(\n targetWidth *\n (maxHeight / (sourceHeight * (maxWidth ? maxWidth / sourceWidth : 1))),\n );\n }\n\n if (targetWidth === sourceWidth && targetHeight === sourceHeight) {\n return sourceCanvas;\n }\n\n const resizedCanvas = document.createElement(\"canvas\");\n resizedCanvas.width = targetWidth;\n resizedCanvas.height = targetHeight;\n\n const ctx = resizedCanvas.getContext(\"2d\");\n if (ctx) {\n ctx.imageSmoothingEnabled = true;\n ctx.imageSmoothingQuality = \"high\";\n ctx.drawImage(sourceCanvas, 0, 0, targetWidth, targetHeight);\n }\n\n return resizedCanvas;\n}\n\nexport function canvasToFile(\n canvas: HTMLCanvasElement,\n filename: string,\n settings: ExportSettings,\n): Promise<File> {\n return new Promise((resolve, reject) => {\n canvas.toBlob(\n (blob) => {\n if (!blob) {\n reject(new Error(\"Failed to create blob from canvas\"));\n return;\n }\n\n const extension = settings.mimeType.split(\"/\")[1];\n const baseFilename = filename.replace(/\\.[^.]+$/, \"\");\n const finalFilename = `${baseFilename}.${extension}`;\n\n const file = new File([blob], finalFilename, {\n type: settings.mimeType,\n });\n resolve(file);\n },\n settings.mimeType,\n settings.quality,\n );\n });\n}\n\nexport function calculateOutputDimensions(\n cropWidth: number,\n cropHeight: number,\n maxWidth?: number,\n maxHeight?: number,\n): { width: number; height: number } {\n let width = cropWidth;\n let height = cropHeight;\n\n if (maxWidth && width > maxWidth) {\n const ratio = maxWidth / width;\n width = maxWidth;\n height = Math.round(height * ratio);\n }\n\n if (maxHeight && height > maxHeight) {\n const ratio = maxHeight / height;\n height = maxHeight;\n width = Math.round(width * ratio);\n }\n\n return { width, height };\n}\n","import type { InjectionKey, Ref } from \"vue\";\n\n/**\n * Mount target for modal/overlay teleports inside `MediaLibraryModal` and\n * its nested sub-modals (replace, edit, import URL). Set via the\n * `popoverTarget` prop on `MediaLibraryModal` and provided here so the\n * sub-modals can teleport to the same element.\n *\n * When the ref resolves to `null` (or no provider is in scope, e.g. the\n * standalone visual SDK from `./standalone/visual.ts`), modals fall back\n * to `document.body` — preserving the original teleport behavior.\n *\n * Host integration: editors that mount `MediaLibraryModal` inside a\n * shadow-aware tree should pass their popover root element (e.g.\n * `core.popoverRoot.value`) through the prop so media-library modals land\n * inside the editor's shadow boundary rather than escaping to body.\n */\nexport const POPOVER_TARGET_KEY: InjectionKey<Ref<HTMLElement | null>> = Symbol(\n \"templaticalMediaPopoverTarget\",\n);\n","import{openBlock as t,createBlock as e,renderSlot as i,resolveComponent as n,createVNode as s,withCtx as o,Fragment as r,renderList as a,resolveDynamicComponent as h,withDirectives as c,vShow as l,mergeProps as u,withModifiers as d,createCommentVNode as m}from\"vue\";function p(t,e){var i=Object.keys(t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(t);e&&(n=n.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),i.push.apply(i,n)}return i}function g(t){for(var e=1;e<arguments.length;e++){var i=null!=arguments[e]?arguments[e]:{};e%2?p(Object(i),!0).forEach((function(e){f(t,e,i[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(i)):p(Object(i)).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(i,e))}))}return t}function f(t,e,i){return e in t?Object.defineProperty(t,e,{value:i,enumerable:!0,configurable:!0,writable:!0}):t[e]=i,t}function v(t,e){if(null==t)return{};var i,n,s=function(t,e){if(null==t)return{};var i,n,s={},o=Object.keys(t);for(n=0;n<o.length;n++)i=o[n],e.indexOf(i)>=0||(s[i]=t[i]);return s}(t,e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(t);for(n=0;n<o.length;n++)i=o[n],e.indexOf(i)>=0||Object.prototype.propertyIsEnumerable.call(t,i)&&(s[i]=t[i])}return s}function b(t){return function(t){if(Array.isArray(t))return w(t)}(t)||function(t){if(\"undefined\"!=typeof Symbol&&null!=t[Symbol.iterator]||null!=t[\"@@iterator\"])return Array.from(t)}(t)||function(t,e){if(!t)return;if(\"string\"==typeof t)return w(t,e);var i=Object.prototype.toString.call(t).slice(8,-1);\"Object\"===i&&t.constructor&&(i=t.constructor.name);if(\"Map\"===i||\"Set\"===i)return Array.from(t);if(\"Arguments\"===i||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(i))return w(t,e)}(t)||function(){throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}()}function w(t,e){(null==e||e>t.length)&&(e=t.length);for(var i=0,n=new Array(e);i<e;i++)n[i]=t[i];return n}var y,z,R,A=(y=function(t){\n/*!\n Copyright (c) 2018 Jed Watson.\n Licensed under the MIT License (MIT), see\n http://jedwatson.github.io/classnames\n*/\n!function(){var e={}.hasOwnProperty;function i(){for(var t=[],n=0;n<arguments.length;n++){var s=arguments[n];if(s){var o=typeof s;if(\"string\"===o||\"number\"===o)t.push(s);else if(Array.isArray(s)){if(s.length){var r=i.apply(null,s);r&&t.push(r)}}else if(\"object\"===o)if(s.toString===Object.prototype.toString)for(var a in s)e.call(s,a)&&s[a]&&t.push(a);else t.push(s.toString())}}return t.join(\" \")}t.exports?(i.default=i,t.exports=i):window.classNames=i}()},y(R={path:z,exports:{},require:function(t,e){return function(){throw new Error(\"Dynamic requires are not currently supported by @rollup/plugin-commonjs\")}(null==e&&R.path)}},R.exports),R.exports),M=function(t){return function(e,i){if(!e)return t;var n;\"string\"==typeof e?n=e:i=e;var s=t;return n&&(s+=\"__\"+n),s+(i?Object.keys(i).reduce((function(t,e){var n=i[e];return n&&(t+=\" \"+(\"boolean\"==typeof n?s+\"--\"+e:s+\"--\"+e+\"_\"+n)),t}),\"\"):\"\")}};function S(t,e,i){var n,s,o,r,a;function h(){var c=Date.now()-r;c<e&&c>=0?n=setTimeout(h,e-c):(n=null,i||(a=t.apply(o,s),o=s=null))}null==e&&(e=100);var c=function(){o=this,s=arguments,r=Date.now();var c=i&&!n;return n||(n=setTimeout(h,e)),c&&(a=t.apply(o,s),o=s=null),a};return c.clear=function(){n&&(clearTimeout(n),n=null)},c.flush=function(){n&&(a=t.apply(o,s),o=s=null,clearTimeout(n),n=null)},c}S.debounce=S;var x=S,C=function(){return C=Object.assign||function(t){for(var e,i=1,n=arguments.length;i<n;i++)for(var s in e=arguments[i])Object.prototype.hasOwnProperty.call(e,s)&&(t[s]=e[s]);return t},C.apply(this,arguments)};\n/*! *****************************************************************************\nCopyright (c) Microsoft Corporation.\n\nPermission to use, copy, modify, and/or distribute this software for any\npurpose with or without fee is hereby granted.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THIS SOFTWARE.\n***************************************************************************** */function E(t,e){var i,n;return t&&e?(i=\"\"+t+e[0].toUpperCase()+e.slice(1),n=t+\"-\"+e):(i=t||e,n=t||e),{name:i,classname:n}}function W(t){return/^blob:/.test(t)}function T(t){return W(t)||function(t){return/^data:/.test(t)}(t)}function O(t){return!!(t&&t.constructor&&t.call&&t.apply)}function D(t){return void 0===t}function H(t){return\"object\"==typeof t&&null!==t}function j(t,e,i){var n={};return H(t)?(Object.keys(e).forEach((function(s){D(t[s])?n[s]=e[s]:H(e[s])?H(t[s])?n[s]=j(t[s],e[s],i[s]):n[s]=t[s]?e[s]:i[s]:!0===e[s]||!1===e[s]?n[s]=Boolean(t[s]):n[s]=t[s]})),n):t?e:i}function L(t){var e=Number(t);return Number.isNaN(e)?t:e}function P(t){return typeof(\"number\"==t||function(t){return\"object\"==typeof t&&null!==t}(t)&&\"[object Number]\"==toString.call(t))&&!$(t)}function $(t){return t!=t}function I(t,e){return Math.sqrt(Math.pow(t.x-e.x,2)+Math.pow(t.y-e.y,2))}var B=function(t,e){void 0===t&&(t={}),void 0===e&&(e={}),this.type=\"manipulateImage\",this.move=t,this.scale=e},X=function(t,e){void 0===e&&(e={}),this.type=\"resize\",this.directions=t,this.params=e},Y=function(t){this.type=\"move\",this.directions=t},k=function(){function t(t,e,i,n,s){this.type=\"drag\",this.nativeEvent=t,this.position=i,this.previousPosition=n,this.element=e,this.anchor=s}return t.prototype.shift=function(){var t=this,e=t.element,i=t.anchor,n=t.position;if(e){var s=e.getBoundingClientRect(),o=s.left,r=s.top;return{left:n.left-o-i.left,top:n.top-r-i.top}}return{left:0,top:0}},t}(),F={name:\"DraggableElement\",props:{classname:{type:String}},beforeMount:function(){window.addEventListener(\"mouseup\",this.onMouseUp,{passive:!1}),window.addEventListener(\"mousemove\",this.onMouseMove,{passive:!1}),window.addEventListener(\"touchmove\",this.onTouchMove,{passive:!1}),window.addEventListener(\"touchend\",this.onTouchEnd,{passive:!1})},beforeUnmount:function(){window.removeEventListener(\"mouseup\",this.onMouseUp),window.removeEventListener(\"mousemove\",this.onMouseMove),window.removeEventListener(\"touchmove\",this.onTouchMove),window.removeEventListener(\"touchend\",this.onTouchEnd)},mounted:function(){if(!this.$refs.draggable)throw new Error('You should add ref \"draggable\" to your root element to use draggable mixin');this.touches=[],this.hovered=!1},methods:{onMouseOver:function(){this.hovered||(this.hovered=!0,this.$emit(\"enter\"))},onMouseLeave:function(){this.hovered&&!this.touches.length&&(this.hovered=!1,this.$emit(\"leave\"))},onTouchStart:function(t){t.cancelable&&!this.disabled&&1===t.touches.length&&(this.touches=b(t.touches),this.hovered||(this.$emit(\"enter\"),this.hovered=!0),t.touches.length&&this.initAnchor(this.touches.reduce((function(e,i){return{clientX:e.clientX+i.clientX/t.touches.length,clientY:e.clientY+i.clientY/t.touches.length}}),{clientX:0,clientY:0})),t.preventDefault&&t.preventDefault(),t.stopPropagation())},onTouchEnd:function(){this.processEnd()},onTouchMove:function(t){this.touches.length&&(this.processMove(t,t.touches),t.preventDefault&&t.preventDefault(),t.stopPropagation&&t.stopPropagation())},onMouseDown:function(t){if(!this.disabled){var e={fake:!0,clientX:t.clientX,clientY:t.clientY};this.touches=[e],this.initAnchor(e),t.stopPropagation()}},onMouseMove:function(t){this.touches.length&&(this.processMove(t,[{fake:!0,clientX:t.clientX,clientY:t.clientY}]),t.preventDefault&&t.preventDefault())},onMouseUp:function(){this.processEnd()},initAnchor:function(t){var e=this.$refs.draggable.getBoundingClientRect(),i=e.left,n=e.right,s=e.bottom,o=e.top;this.anchor={left:t.clientX-i,top:t.clientY-o,bottom:s-t.clientY,right:n-t.clientX}},processMove:function(t,e){var i=b(e);if(this.touches.length){if(1===this.touches.length&&1===i.length){var n=this.$refs.draggable;this.$emit(\"drag\",new k(t,n,{left:i[0].clientX,top:i[0].clientY},{left:this.touches[0].clientX,top:this.touches[0].clientY},this.anchor))}this.touches=i}},processEnd:function(){this.touches.length&&this.$emit(\"drag-end\"),this.hovered&&(this.$emit(\"leave\"),this.hovered=!1),this.touches=[]}},emits:[\"drag\",\"drag-end\",\"leave\",\"enter\"]};F.render=function(n,s,o,r,a,h){return t(),e(\"div\",{ref:\"draggable\",class:o.classname,onTouchstart:s[1]||(s[1]=function(){return h.onTouchStart&&h.onTouchStart.apply(h,arguments)}),onMousedown:s[2]||(s[2]=function(){return h.onMouseDown&&h.onMouseDown.apply(h,arguments)}),onMouseover:s[3]||(s[3]=function(){return h.onMouseOver&&h.onMouseOver.apply(h,arguments)}),onMouseleave:s[4]||(s[4]=function(){return h.onMouseLeave&&h.onMouseLeave.apply(h,arguments)})},[i(n.$slots,\"default\")],34)};var U=M(\"vue-handler-wrapper\"),N={name:\"HandlerWrapper\",components:{DraggableElement:F},props:{horizontalPosition:{type:String},verticalPosition:{type:String},disabled:{type:Boolean,default:!1}},computed:{classes:function(){var t;if(this.horizontalPosition||this.verticalPosition){var e,i=E(this.horizontalPosition,this.verticalPosition);t=U((f(e={},i.classname,!0),f(e,\"disabled\",this.disabled),e))}else t=U({disabled:this.disabled});return{root:t,draggable:U(\"draggable\")}}},emits:[\"leave\",\"enter\",\"drag\",\"drag-end\"]};N.render=function(r,a,h,c,l,u){var d=n(\"DraggableElement\");return t(),e(\"div\",{class:u.classes.root},[s(d,{class:u.classes.draggable,onDrag:a[1]||(a[1]=function(t){return r.$emit(\"drag\",t)}),onDragEnd:a[2]||(a[2]=function(t){return r.$emit(\"drag-end\")}),onLeave:a[3]||(a[3]=function(t){return r.$emit(\"leave\")}),onEnter:a[4]||(a[4]=function(t){return r.$emit(\"enter\")})},{default:o((function(){return[i(r.$slots,\"default\")]})),_:3},8,[\"class\"])],2)};var Z=M(\"vue-line-wrapper\"),q={name:\"LineWrapper\",components:{DraggableElement:F},props:{position:{type:String,required:!0},disabled:{type:Boolean,default:!1}},computed:{classname:function(){var t;return Z((f(t={},this.position,!0),f(t,\"disabled\",this.disabled),t))}},emits:[\"leave\",\"enter\",\"drag\",\"drag-end\"]};q.render=function(s,r,a,h,c,l){var u=n(\"DraggableElement\");return t(),e(u,{class:l.classname,onDrag:r[1]||(r[1]=function(t){return s.$emit(\"drag\",t)}),onDragEnd:r[2]||(r[2]=function(t){return s.$emit(\"drag-end\")}),onLeave:r[3]||(r[3]=function(t){return s.$emit(\"leave\")}),onEnter:r[4]||(r[4]=function(t){return s.$emit(\"enter\")})},{default:o((function(){return[i(s.$slots,\"default\")]})),_:3},8,[\"class\"])};var V=[\"left\",\"right\",\"top\",\"bottom\"],_=[\"left\",\"right\"],G=[\"top\",\"bottom\"],Q=[\"left\",\"top\"],K=[\"fill-area\",\"fit-area\",\"stencil\",\"none\"],J={left:0,top:0,width:0,height:0};function tt(t,e,i){return!(i=i||[\"width\",\"height\",\"left\",\"top\"]).some((function(i){return t[i]!==e[i]}))}function et(t){return{left:t.left,top:t.top,right:t.left+t.width,bottom:t.top+t.height}}function it(t,e){return{left:t.left-e.left,top:t.top-e.top}}function nt(t){return{left:t.left+t.width/2,top:t.top+t.height/2}}function st(t,e){var i={left:0,top:0,right:0,bottom:0};return V.forEach((function(n){var s=e[n],o=et(t)[n];i[n]=void 0!==s&&void 0!==o?\"left\"===n||\"top\"===n?Math.max(0,s-o):Math.max(0,o-s):0})),i}function ot(t,e){return{left:t.left-e.left,top:t.top-e.top,width:t.width+e.left+e.right,height:t.height+e.top+e.bottom}}function rt(t){return{left:-t.left,top:-t.top}}function at(t,e){return C(C({},t),{left:t.left+e.left,top:t.top+e.top})}function ht(t,e,i,n){if(1!==e){if(i){var s=nt(t);return{width:t.width*e,height:t.height*e,left:t.left+t.width*(1-e)/2+(i.left-s.left)*(n||1-e),top:t.top+t.height*(1-e)/2+(i.top-s.top)*(n||1-e)}}return{width:t.width*e,height:t.height*e,left:t.left+t.width*(1-e)/2,top:t.top+t.height*(1-e)/2}}return t}function ct(t){return t.width/t.height}function lt(t,e){return Math.min(void 0!==e.right&&void 0!==e.left?(e.right-e.left)/t.width:1/0,void 0!==e.bottom&&void 0!==e.top?(e.bottom-e.top)/t.height:1/0)}function ut(t,e){var i={left:0,top:0},n=st(t,e);return n.left&&n.left>0?i.left=n.left:n.right&&n.right>0&&(i.left=-n.right),n.top&&n.top>0?i.top=n.top:n.bottom&&n.bottom>0&&(i.top=-n.bottom),i}function dt(t,e){var i;return e.minimum&&t<e.minimum?i=e.minimum:e.maximum&&t>e.maximum&&(i=e.maximum),i}function mt(t,e){var i=ct(t),n=ct(e);return e.width<1/0&&e.height<1/0?i>n?{width:e.width,height:e.width/i}:{width:e.height*i,height:e.height}:e.width<1/0?{width:e.width,height:e.width/i}:e.height<1/0?{width:e.height*i,height:e.height}:t}function pt(t,e){var i=e*Math.PI/180;return{width:Math.abs(t.width*Math.cos(i))+Math.abs(t.height*Math.sin(i)),height:Math.abs(t.width*Math.sin(i))+Math.abs(t.height*Math.cos(i))}}function gt(t,e){var i=e*Math.PI/180;return{left:t.left*Math.cos(i)-t.top*Math.sin(i),top:t.left*Math.sin(i)+t.top*Math.cos(i)}}function ft(t,e){var i=st(vt(t,e),e);return i.left+i.right+i.top+i.bottom?i.left+i.right>i.top+i.bottom?Math.min((t.width+i.left+i.right)/t.width,lt(t,e)):Math.min((t.height+i.top+i.bottom)/t.height,lt(t,e)):1}function vt(t,e,i){void 0===i&&(i=!1);var n=ut(t,e);return at(t,i?rt(n):n)}function bt(t){return{width:void 0!==t.right&&void 0!==t.left?t.right-t.left:1/0,height:void 0!==t.bottom&&void 0!==t.top?t.bottom-t.top:1/0}}function wt(t,e){return C(C({},t),{minWidth:Math.min(e.width,t.minWidth),minHeight:Math.min(e.height,t.minHeight),maxWidth:Math.min(e.width,t.maxWidth),maxHeight:Math.min(e.height,t.maxHeight)})}function yt(t,e,i){void 0===i&&(i=!0);var n={};return V.forEach((function(s){var o=t[s],r=e[s];void 0!==o&&void 0!==r?n[s]=\"left\"===s||\"top\"===s?i?Math.max(o,r):Math.min(o,r):i?Math.min(o,r):Math.max(o,r):void 0!==r?n[s]=r:void 0!==o&&(n[s]=o)})),n}function zt(t,e){return yt(t,e,!0)}function Rt(t){var e=t.size,i=t.aspectRatio,n=t.ignoreMinimum,s=t.sizeRestrictions;return Boolean((e.correctRatio||ct(e)>=i.minimum&&ct(e)<=i.maximum)&&e.height<=s.maxHeight&&e.width<=s.maxWidth&&e.width&&e.height&&(n||e.height>=s.minHeight&&e.width>=s.minWidth))}function At(t,e){return Math.pow(t.width-e.width,2)+Math.pow(t.height-e.height,2)}function Mt(t){var e=t.width,i=t.height,n=t.sizeRestrictions,s={minimum:t.aspectRatio&&t.aspectRatio.minimum||0,maximum:t.aspectRatio&&t.aspectRatio.maximum||1/0},o={width:Math.max(n.minWidth,Math.min(n.maxWidth,e)),height:Math.max(n.minHeight,Math.min(n.maxHeight,i))};function r(t,o){return void 0===o&&(o=!1),t.reduce((function(t,r){return Rt({size:r,aspectRatio:s,sizeRestrictions:n,ignoreMinimum:o})&&(!t||At(r,{width:e,height:i})<At(t,{width:e,height:i}))?r:t}),null)}var a=[];s&&[s.minimum,s.maximum].forEach((function(t){t&&a.push({width:o.width,height:o.width/t,correctRatio:!0},{width:o.height*t,height:o.height,correctRatio:!0})})),Rt({size:o,aspectRatio:s,sizeRestrictions:n})&&a.push(o);var h=r(a)||r(a,!0);return h&&{width:h.width,height:h.height}}function St(t){var e=t.event,i=t.coordinates,n=t.positionRestrictions,s=void 0===n?{}:n,o=at(i,e.directions);return at(o,ut(o,s))}function xt(t){var e=t.coordinates,i=t.transform,n=t.imageSize,s=t.sizeRestrictions,o=t.positionRestrictions,r=t.aspectRatio,a=t.visibleArea,h=function(t,e){return St({coordinates:t,positionRestrictions:o,event:new Y({left:e.left-t.left,top:e.top-t.top})})},c=C({},e);return(Array.isArray(i)?i:[i]).forEach((function(t){var e={};D((e=\"function\"==typeof t?t({coordinates:c,imageSize:n,visibleArea:a}):t).width)&&D(e.height)||(c=function(t,e){var i=C(C(C({},t),Mt({width:e.width,height:e.height,sizeRestrictions:s,aspectRatio:r})),{left:0,top:0});return h(i,{left:t.left,top:t.top})}(c,C(C({},c),e))),D(e.left)&&D(e.top)||(c=h(c,C(C({},c),e)))})),c}function Ct(t){t.event;var e=t.getAreaRestrictions,i=t.boundaries,n=t.coordinates,s=t.visibleArea;t.aspectRatio;var o=t.stencilSize,r=t.sizeRestrictions,a=t.positionRestrictions;t.stencilReference;var h,c,l,u=C({},n),d=C({},s),m=C({},o);h=ct(m),c=ct(u),void 0===l&&(l=.001),(0===h||0===c?Math.abs(c-h)<l:Math.abs(c/h)<1+l&&Math.abs(c/h)>1-l)||(u=C(C({},u),Mt({sizeRestrictions:r,width:u.width,height:u.height,aspectRatio:{minimum:ct(m),maximum:ct(m)}})));var p=ft(d=ht(d,u.width*i.width/(d.width*m.width)),e({visibleArea:d,type:\"resize\"}));return 1!==p&&(d=ht(d,p),u=ht(u,p)),d=vt(d=at(d,it(nt(u),nt(d))),e({visibleArea:d,type:\"move\"})),{coordinates:u=vt(u,zt(et(d),a)),visibleArea:d}}function Et(t){var e=t.event,i=t.getAreaRestrictions,n=t.boundaries,s=t.coordinates,o=t.visibleArea;t.aspectRatio,t.stencilSize,t.sizeRestrictions;var r=t.positionRestrictions;t.stencilReference;var a=C({},s),h=C({},o);if(s&&o&&\"manipulateImage\"!==e.type){var c={width:0,height:0};h.width,n.width,ct(n)>ct(a)?(c.height=.8*n.height,c.width=c.height*ct(a)):(c.width=.8*n.width,c.height=c.width*ct(a));var l=ft(h=ht(h,a.width*n.width/(h.width*c.width)),i({visibleArea:h,type:\"resize\"}));h=ht(h,l),1!==l&&(c.height/=l,c.width/=l),h=vt(h=at(h,it(nt(a),nt(h))),i({visibleArea:h,type:\"move\"})),a=vt(a,zt(et(h),r))}return{coordinates:a,visibleArea:h}}function Wt(t){var e=t.event,i=t.coordinates,n=t.visibleArea,s=t.getAreaRestrictions,o=C({},n),r=C({},i);if(\"setCoordinates\"===e.type){var a=Math.max(0,r.width-o.width),h=Math.max(0,r.height-o.height);a>h?o=ht(o,Math.min(r.width/o.width,lt(o,s({visibleArea:o,type:\"resize\"})))):h>a&&(o=ht(o,Math.min(r.height/o.height,lt(o,s({visibleArea:o,type:\"resize\"}))))),o=vt(o=at(o,rt(ut(r,et(o)))),s({visibleArea:o,type:\"move\"}))}return{visibleArea:o,coordinates:r}}function Tt(t){var e=t.imageSize,i=t.visibleArea,n=t.coordinates,s=i||e;return{left:(i?i.left:0)+s.width/2-n.width/2,top:(i?i.top:0)+s.height/2-n.height/2}}function Ot(t){var e=t.imageSize,i=t.visibleArea,n=t.aspectRatio,s=t.sizeRestrictions,o=i||e,r=Math.min(n.maximum||1/0,Math.max(n.minimum||0,ct(o))),a=o.width<o.height?{width:.8*o.width,height:.8*o.width/r}:{height:.8*o.height,width:.8*o.height*r};return Mt(C(C({},a),{aspectRatio:n,sizeRestrictions:s}))}function Dt(t){var e,i,n=t.imageSize,s=t.visibleArea,o=t.boundaries,r=t.aspectRatio,a=t.sizeRestrictions,h=t.stencilSize,c=s||n;return ct(c)>ct(o)?i=(e=h.height*c.height/o.height)*ct(h):e=(i=h.width*c.width/o.width)/ct(h),Mt({width:i,height:e,aspectRatio:r,sizeRestrictions:a})}function Ht(t){var e=t.getAreaRestrictions,i=t.coordinates,n=t.imageSize,s=ct(t.boundaries);if(i){var o={height:Math.max(i.height,n.height),width:Math.max(i.width,n.width)},r=mt({width:ct(o)>s?o.width:o.height*s,height:ct(o)>s?o.width/s:o.height},bt(e())),a={left:i.left+i.width/2-r.width/2,top:i.top+i.height/2-r.height/2,width:r.width,height:r.height},h=st(i,et(C({left:0,top:0},n))),c={};return!h.left&&!h.right&&a.width<=n.width&&(c.left=0,c.right=n.width),!h.top&&!h.bottom&&a.height<=n.height&&(c.top=0,c.bottom=n.height),vt(a,c)}var l=ct(n);r={height:l>s?n.height:n.width/s,width:l>s?n.height*s:n.width};return{left:n.width/2-r.width/2,top:n.height/2-r.height/2,width:r.width,height:r.height}}function jt(t,e){return yt(t,et(e))}function Lt(t){var e=t.event,i=t.coordinates,n=t.visibleArea,s=t.sizeRestrictions,o=t.getAreaRestrictions,r=t.positionRestrictions,a=t.adjustStencil,h=e.scale,c=e.move,l=C({},n),u=C({},i),d=1,m=1,p=h.factor&&Math.abs(h.factor-1)>.001;l=at(l,{left:c.left||0,top:c.top||0});var g={stencil:{minimum:Math.max(s.minWidth?s.minWidth/u.width:0,s.minHeight?s.minHeight/u.height:0),maximum:Math.min(s.maxWidth?s.maxWidth/u.width:1/0,s.maxHeight?s.maxHeight/u.height:1/0,lt(u,r))},area:{maximum:lt(l,o({visibleArea:l,type:\"resize\"}))}};h.factor&&p&&(h.factor<1?(m=Math.max(h.factor,g.stencil.minimum))>1&&(m=1):h.factor>1&&(m=Math.min(h.factor,Math.min(g.area.maximum,g.stencil.maximum)))<1&&(m=1)),m&&(l=ht(l,m,h.center));var f=i.left-n.left,v=n.width+n.left-(i.width+i.left),b=i.top-n.top,w=n.height+n.top-(i.height+i.top);return l=vt(l=at(l,ut(l,{left:void 0!==r.left?r.left-f*m:void 0,top:void 0!==r.top?r.top-b*m:void 0,bottom:void 0!==r.bottom?r.bottom+w*m:void 0,right:void 0!==r.right?r.right+v*m:void 0})),o({visibleArea:l,type:\"move\"})),u.width=u.width*m,u.height=u.height*m,u.left=l.left+f*m,u.top=l.top+b*m,u=vt(u,zt(et(l),r)),h.factor&&p&&a&&(h.factor>1?d=Math.min(g.area.maximum,h.factor)/m:h.factor<1&&(d=Math.max(u.height/l.height,u.width/l.width,h.factor/m)),1!==d&&(l=at(l=vt(l=ht(l,d,h.factor>1?h.center:nt(u)),o({visibleArea:l,type:\"move\"})),rt(ut(u,et(l)))))),{coordinates:u,visibleArea:l}}function Pt(t){var e=t.aspectRatio,i=t.getAreaRestrictions,n=t.coordinates,s=t.visibleArea,o=t.sizeRestrictions,r=t.positionRestrictions,a=t.imageSize,h=t.previousImageSize,c=t.angle,l=C({},n),u=C({},s),d=gt(nt(C({left:0,top:0},h)),c);return(l=C(C({},Mt({sizeRestrictions:o,aspectRatio:e,width:l.width,height:l.height})),gt(nt(l),c))).left-=d.left-a.width/2+l.width/2,l.top-=d.top-a.height/2+l.height/2,u=ht(u,ft(u,i({visibleArea:u,type:\"resize\"}))),{coordinates:l=vt(l,r),visibleArea:u=vt(u=at(u,it(nt(l),nt(n))),i({visibleArea:u,type:\"move\"}))}}function $t(t){var e=t.flip,i=t.previousFlip,n=t.rotate;t.aspectRatio;var s=t.getAreaRestrictions,o=t.coordinates,r=t.visibleArea,a=t.imageSize,h=C({},o),c=C({},r),l=i.horizontal!==e.horizontal,u=i.vertical!==e.vertical;if(l||u){var d=gt({left:a.width/2,top:a.height/2},-n),m=gt(nt(h),-n),p=gt({left:l?d.left-(m.left-d.left):m.left,top:u?d.top-(m.top-d.top):m.top},n);h=at(h,it(p,nt(h))),m=gt(nt(c),-n),c=vt(c=at(c,it(p=gt({left:l?d.left-(m.left-d.left):m.left,top:u?d.top-(m.top-d.top):m.top},n),nt(c))),s({visibleArea:c,type:\"move\"}))}return{coordinates:h,visibleArea:c}}function It(t){var e=t.directions,i=t.coordinates,n=t.positionRestrictions,s=void 0===n?{}:n,o=t.sizeRestrictions,r=t.preserveRatio,a=t.compensate,h=C({},e),c=ot(i,h).width,l=ot(i,h).height;c<0&&(h.left<0&&h.right<0?(h.left=-(i.width-o.minWidth)/(h.left/h.right),h.right=-(i.width-o.minWidth)/(h.right/h.left)):h.left<0?h.left=-(i.width-o.minWidth):h.right<0&&(h.right=-(i.width-o.minWidth))),l<0&&(h.top<0&&h.bottom<0?(h.top=-(i.height-o.minHeight)/(h.top/h.bottom),h.bottom=-(i.height-o.minHeight)/(h.bottom/h.top)):h.top<0?h.top=-(i.height-o.minHeight):h.bottom<0&&(h.bottom=-(i.height-o.minHeight)));var u=st(ot(i,h),s);a&&(u.left&&u.left>0&&0===u.right?(h.right+=u.left,h.left-=u.left):u.right&&u.right>0&&0===u.left&&(h.left+=u.right,h.right-=u.right),u.top&&u.top>0&&0===u.bottom?(h.bottom+=u.top,h.top-=u.top):u.bottom&&u.bottom>0&&0===u.top&&(h.top+=u.bottom,h.bottom-=u.bottom),u=st(ot(i,h),s));var d={width:1/0,height:1/0,left:1/0,right:1/0,top:1/0,bottom:1/0};if(V.forEach((function(t){var e=u[t];e&&h[t]&&(d[t]=Math.max(0,1-e/h[t]))})),r){var m=Math.min.apply(null,V.map((function(t){return d[t]})));m!==1/0&&V.forEach((function(t){h[t]*=m}))}else V.forEach((function(t){d[t]!==1/0&&(h[t]*=d[t])}));if(c=ot(i,h).width,l=ot(i,h).height,h.right+h.left&&(c>o.maxWidth?d.width=(o.maxWidth-i.width)/(h.right+h.left):c<o.minWidth&&(d.width=(o.minWidth-i.width)/(h.right+h.left))),h.bottom+h.top&&(l>o.maxHeight?d.height=(o.maxHeight-i.height)/(h.bottom+h.top):l<o.minHeight&&(d.height=(o.minHeight-i.height)/(h.bottom+h.top))),r){var p=Math.min(d.width,d.height);p!==1/0&&V.forEach((function(t){h[t]*=p}))}else d.width!==1/0&&_.forEach((function(t){h[t]*=d.width})),d.height!==1/0&&G.forEach((function(t){h[t]*=d.height}));return h}function Bt(t,e,i){return 0==e&&0==i?t/2:0==e?0:0==i?t:t*Math.abs(e/(e+i))}var Xt=M(\"vue-simple-handler\"),Yt=M(\"vue-simple-handler-wrapper\"),kt={name:\"SimpleHandler\",components:{HandlerWrapper:N},props:{defaultClass:{type:String},hoverClass:{type:String},wrapperClass:{type:String},horizontalPosition:{type:String},verticalPosition:{type:String},disabled:{type:Boolean,default:!1}},data:function(){return{hover:!1}},computed:{classes:function(){var t,e=(f(t={},this.horizontalPosition,Boolean(this.horizontalPosition)),f(t,this.verticalPosition,Boolean(this.verticalPosition)),f(t,\"\".concat(this.horizontalPosition,\"-\").concat(this.verticalPosition),Boolean(this.verticalPosition&&this.horizontalPosition)),f(t,\"hover\",this.hover),t);return{default:A(Xt(e),this.defaultClass,this.hover&&this.hoverClass),wrapper:A(Yt(e),this.wrapperClass)}}},methods:{onDrag:function(t){this.$emit(\"drag\",t)},onEnter:function(){this.hover=!0},onLeave:function(){this.hover=!1},onDragEnd:function(){this.$emit(\"drag-end\")}},emits:[\"drag\",\"drag-end\"]};kt.render=function(i,r,a,h,c,l){var u=n(\"HandlerWrapper\");return t(),e(u,{class:l.classes.wrapper,\"vertical-position\":a.verticalPosition,\"horizontal-position\":a.horizontalPosition,disabled:a.disabled,onDrag:l.onDrag,onDragEnd:l.onDragEnd,onEnter:l.onEnter,onLeave:l.onLeave},{default:o((function(){return[s(\"div\",{class:l.classes.default},null,2)]})),_:1},8,[\"class\",\"vertical-position\",\"horizontal-position\",\"disabled\",\"onDrag\",\"onDragEnd\",\"onEnter\",\"onLeave\"])};var Ft=M(\"vue-simple-line\"),Ut=M(\"vue-simple-line-wrapper\"),Nt={name:\"SimpleLine\",components:{LineWrapper:q},props:{defaultClass:{type:String},hoverClass:{type:String},wrapperClass:{type:String},position:{type:String},disabled:{type:Boolean,default:!1}},data:function(){return{hover:!1}},computed:{classes:function(){return{root:A(Ft(f({},this.position,!0)),this.defaultClass,this.hover&&this.hoverClass),wrapper:A(Ut(f({},this.position,!0)),this.wrapperClass)}}},methods:{onDrag:function(t){this.$emit(\"drag\",t)},onEnter:function(){this.hover=!0},onLeave:function(){this.hover=!1},onDragEnd:function(){this.$emit(\"drag-end\")}},emits:[\"drag\",\"drag-end\"]};Nt.render=function(i,r,a,h,c,l){var u=n(\"LineWrapper\");return t(),e(u,{class:l.classes.wrapper,position:a.position,disabled:a.disabled,onDrag:l.onDrag,onDragEnd:l.onDragEnd,onEnter:l.onEnter,onLeave:l.onLeave},{default:o((function(){return[s(\"div\",{class:l.classes.root},null,2)]})),_:1},8,[\"class\",\"position\",\"disabled\",\"onDrag\",\"onDragEnd\",\"onEnter\",\"onLeave\"])};var Zt=M(\"vue-bounding-box\"),qt=[\"east\",\"west\",null],Vt=[\"south\",\"north\",null],_t={name:\"BoundingBox\",props:{width:{type:Number},height:{type:Number},transitions:{type:Object},handlers:{type:Object,default:function(){return{eastNorth:!0,north:!0,westNorth:!0,west:!0,westSouth:!0,south:!0,eastSouth:!0,east:!0}}},handlersComponent:{type:[Object,String],default:function(){return kt}},handlersClasses:{type:Object,default:function(){return{}}},handlersWrappersClasses:{type:Object,default:function(){return{}}},lines:{type:Object,default:function(){return{west:!0,north:!0,east:!0,south:!0}}},linesComponent:{type:[Object,String],default:function(){return Nt}},linesClasses:{type:Object,default:function(){return{}}},linesWrappersClasses:{type:Object,default:function(){return{}}},resizable:{type:Boolean,default:!0}},data:function(){var t=[];return qt.forEach((function(e){Vt.forEach((function(i){if(e!==i){var n=E(e,i),s=n.name,o=n.classname;t.push({name:s,classname:o,verticalDirection:i,horizontalDirection:e})}}))})),{points:t}},computed:{style:function(){var t={};return this.width&&this.height&&(t.width=\"\".concat(this.width,\"px\"),t.height=\"\".concat(this.height,\"px\"),this.transitions&&this.transitions.enabled&&(t.transition=\"\".concat(this.transitions.time,\"ms \").concat(this.transitions.timingFunction))),t},classes:function(){var t=this.handlersClasses,e=this.handlersWrappersClasses,i=this.linesClasses,n=this.linesWrappersClasses;return{root:Zt(),handlers:t,handlersWrappers:e,lines:i,linesWrappers:n}},lineNodes:function(){var t=this,e=[];return this.points.forEach((function(i){i.horizontalDirection&&i.verticalDirection||!t.lines[i.name]||e.push({name:i.name,component:t.linesComponent,class:A(t.classes.lines.default,t.classes.lines[i.name],!t.resizable&&t.classes.lines.disabled),wrapperClass:A(t.classes.linesWrappers.default,t.classes.linesWrappers[i.name],!t.resizable&&t.classes.linesWrappers.disabled),hoverClass:t.classes.lines.hover,verticalDirection:i.verticalDirection,horizontalDirection:i.horizontalDirection,disabled:!t.resizable})})),e},handlerNodes:function(){var t=this,e=[],i=this.width,n=this.height;return this.points.forEach((function(s){if(t.handlers[s.name]){var o={name:s.name,component:t.handlersComponent,class:A(t.classes.handlers.default,t.classes.handlers[s.name]),wrapperClass:A(t.classes.handlersWrappers.default,t.classes.handlersWrappers[s.name]),hoverClass:t.classes.handlers.hover,verticalDirection:s.verticalDirection,horizontalDirection:s.horizontalDirection,disabled:!t.resizable};if(i&&n){var r=s.horizontalDirection,a=s.verticalDirection,h=\"east\"===r?i:\"west\"===r?0:i/2,c=\"south\"===a?n:\"north\"===a?0:n/2;o.wrapperClass=Zt(\"handler\"),o.wrapperStyle={transform:\"translate(\".concat(h,\"px, \").concat(c,\"px)\")},t.transitions&&t.transitions.enabled&&(o.wrapperStyle.transition=\"\".concat(t.transitions.time,\"ms \").concat(t.transitions.timingFunction))}else o.wrapperClass=Zt(\"handler\",f({},s.classname,!0));e.push(o)}})),e}},beforeMount:function(){window.addEventListener(\"mouseup\",this.onMouseUp,{passive:!1}),window.addEventListener(\"mousemove\",this.onMouseMove,{passive:!1}),window.addEventListener(\"touchmove\",this.onTouchMove,{passive:!1}),window.addEventListener(\"touchend\",this.onTouchEnd,{passive:!1})},beforeUnmount:function(){window.removeEventListener(\"mouseup\",this.onMouseUp),window.removeEventListener(\"mousemove\",this.onMouseMove),window.removeEventListener(\"touchmove\",this.onTouchMove),window.removeEventListener(\"touchend\",this.onTouchEnd)},mounted:function(){this.touches=[]},methods:{onEnd:function(){this.$emit(\"resize-end\")},onHandlerDrag:function(t,e,i){var n,s=t.shift(),o=s.left,r=s.top,a={left:0,right:0,top:0,bottom:0};\"west\"===e?a.left-=o:\"east\"===e&&(a.right+=o),\"north\"===i?a.top-=r:\"south\"===i&&(a.bottom+=r),!i&&e?n=\"width\":i&&!e&&(n=\"height\"),this.resizable&&this.$emit(\"resize\",new X(a,{allowedDirections:{left:\"west\"===e||!e,right:\"east\"===e||!e,bottom:\"south\"===i||!i,top:\"north\"===i||!i},preserveAspectRatio:t.nativeEvent&&t.nativeEvent.shiftKey,respectDirection:n}))}},emits:[\"resize\",\"resize-end\"]};_t.render=function(n,o,c,l,u,d){return t(),e(\"div\",{ref:\"box\",class:d.classes.root,style:d.style},[i(n.$slots,\"default\"),s(\"div\",null,[(t(!0),e(r,null,a(d.lineNodes,(function(i){return t(),e(h(i.component),{key:i.name,\"default-class\":i.class,\"hover-class\":i.hoverClass,\"wrapper-class\":i.wrapperClass,position:i.name,disabled:i.disabled,onDrag:function(t){return d.onHandlerDrag(t,i.horizontalDirection,i.verticalDirection)},onDragEnd:o[1]||(o[1]=function(t){return d.onEnd()})},null,8,[\"default-class\",\"hover-class\",\"wrapper-class\",\"position\",\"disabled\",\"onDrag\"])})),128))]),(t(!0),e(r,null,a(d.handlerNodes,(function(i){return t(),e(\"div\",{key:i.name,style:i.wrapperStyle,class:i.wrapperClass},[(t(),e(h(i.component),{\"default-class\":i.class,\"hover-class\":i.hoverClass,\"wrapper-class\":i.wrapperClass,\"horizontal-position\":i.horizontalDirection,\"vertical-position\":i.verticalDirection,disabled:i.disabled,onDrag:function(t){return d.onHandlerDrag(t,i.horizontalDirection,i.verticalDirection)},onDragEnd:o[2]||(o[2]=function(t){return d.onEnd()})},null,8,[\"default-class\",\"hover-class\",\"wrapper-class\",\"horizontal-position\",\"vertical-position\",\"disabled\",\"onDrag\"]))],6)})),128))],6)};var Gt=M(\"vue-draggable-area\"),Qt={name:\"DraggableArea\",props:{movable:{type:Boolean,default:!0},activationDistance:{type:Number,default:20}},computed:{classnames:function(){return{default:Gt()}}},beforeMount:function(){window.addEventListener(\"mouseup\",this.onMouseUp,{passive:!1}),window.addEventListener(\"mousemove\",this.onMouseMove,{passive:!1}),window.addEventListener(\"touchmove\",this.onTouchMove,{passive:!1}),window.addEventListener(\"touchend\",this.onTouchEnd,{passive:!1})},beforeUnmount:function(){window.removeEventListener(\"mouseup\",this.onMouseUp),window.removeEventListener(\"mousemove\",this.onMouseMove),window.removeEventListener(\"touchmove\",this.onTouchMove),window.removeEventListener(\"touchend\",this.onTouchEnd)},mounted:function(){this.touches=[],this.touchStarted=!1},methods:{onTouchStart:function(t){if(t.cancelable){var e=this.movable&&1===t.touches.length;e&&(this.touches=b(t.touches)),(this.touchStarted||e)&&(t.preventDefault(),t.stopPropagation())}},onTouchEnd:function(){this.touchStarted=!1,this.processEnd()},onTouchMove:function(t){this.touches.length>=1&&(this.touchStarted?(this.processMove(t,t.touches),t.preventDefault(),t.stopPropagation()):I({x:this.touches[0].clientX,y:this.touches[0].clientY},{x:t.touches[0].clientX,y:t.touches[0].clientY})>this.activationDistance&&(this.initAnchor({clientX:t.touches[0].clientX,clientY:t.touches[0].clientY}),this.touchStarted=!0))},onMouseDown:function(t){if(this.movable&&0===t.button){var e={fake:!0,clientX:t.clientX,clientY:t.clientY};this.touches=[e],this.initAnchor(e),t.stopPropagation()}},onMouseMove:function(t){this.touches.length&&(this.processMove(t,[{fake:!0,clientX:t.clientX,clientY:t.clientY}]),t.preventDefault&&t.cancelable&&t.preventDefault(),t.stopPropagation())},onMouseUp:function(){this.processEnd()},initAnchor:function(t){var e=this.$refs.container.getBoundingClientRect(),i=e.left,n=e.top;this.anchor={x:t.clientX-i,y:t.clientY-n}},processMove:function(t,e){var i=b(e);if(this.touches.length){var n=this.$refs.container.getBoundingClientRect(),s=n.left,o=n.top;1===this.touches.length&&1===i.length&&this.$emit(\"move\",new Y({left:i[0].clientX-(s+this.anchor.x),top:i[0].clientY-(o+this.anchor.y)}))}},processEnd:function(){this.touches.length&&this.$emit(\"move-end\"),this.touches=[]}},emits:[\"move\",\"move-end\"]};Qt.render=function(n,s,o,r,a,h){return t(),e(\"div\",{ref:\"container\",onTouchstart:s[1]||(s[1]=function(){return h.onTouchStart&&h.onTouchStart.apply(h,arguments)}),onMousedown:s[2]||(s[2]=function(){return h.onMouseDown&&h.onMouseDown.apply(h,arguments)})},[i(n.$slots,\"default\")],544)};function Kt(t){var e,i;return{rotate:t.rotate||0,flip:{horizontal:(null===(e=null==t?void 0:t.flip)||void 0===e?void 0:e.horizontal)||!1,vertical:(null===(i=null==t?void 0:t.flip)||void 0===i?void 0:i.vertical)||!1}}}function Jt(t){return new Promise((function(e,i){try{if(t)if(/^data:/i.test(t))e(function(t){t=t.replace(/^data:([^;]+);base64,/gim,\"\");for(var e=atob(t),i=e.length,n=new ArrayBuffer(i),s=new Uint8Array(n),o=0;o<i;o++)s[o]=e.charCodeAt(o);return n}(t));else if(/^blob:/i.test(t)){var n=new FileReader;n.onload=function(t){e(t.target.result)},o=t,r=function(t){n.readAsArrayBuffer(t)},(a=new XMLHttpRequest).open(\"GET\",o,!0),a.responseType=\"blob\",a.onload=function(){200!=this.status&&0!==this.status||r(this.response)},a.send()}else{var s=new XMLHttpRequest;s.onreadystatechange=function(){4===s.readyState&&(200===s.status||0===s.status?e(s.response):i(\"Warning: could not load an image to parse its orientation\"),s=null)},s.onprogress=function(){\"image/jpeg\"!==s.getResponseHeader(\"content-type\")&&s.abort()},s.withCredentials=!1,s.open(\"GET\",t,!0),s.responseType=\"arraybuffer\",s.send(null)}else i(\"Error: the image is empty\")}catch(t){i(t)}var o,r,a}))}function te(t){var e=t.rotate,i=t.flip,n=t.scaleX,s=t.scaleY,o=\"\";return o+=\" rotate(\"+e+\"deg) \",o+=\" scaleX(\"+n*(i.horizontal?-1:1)+\") \",o+=\" scaleY(\"+s*(i.vertical?-1:1)+\") \"}function ee(t){try{var e,i=new DataView(t),n=void 0,s=void 0,o=void 0,r=void 0;if(255===i.getUint8(0)&&216===i.getUint8(1))for(var a=i.byteLength,h=2;h+1<a;){if(255===i.getUint8(h)&&225===i.getUint8(h+1)){o=h;break}h++}if(o&&(n=o+10,\"Exif\"===function(t,e,i){var n,s=\"\";for(n=e,i+=e;n<i;n++)s+=String.fromCharCode(t.getUint8(n));return s}(i,o+4,4))){var c=i.getUint16(n);if(((s=18761===c)||19789===c)&&42===i.getUint16(n+2,s)){var l=i.getUint32(n+4,s);l>=8&&(r=n+l)}}if(r)for(var u=i.getUint16(r,s),d=0;d<u;d++){h=r+12*d+2;if(274===i.getUint16(h,s)){h+=8,e=i.getUint16(h,s),i.setUint16(h,1,s);break}}return e}catch(t){return null}}var ie=M(\"vue-preview-result\"),ne={name:\"PreviewResult\",props:{image:{type:Object},transitions:{type:Object},stencilCoordinates:{type:Object,default:function(){return{width:0,height:0,left:0,top:0}}},imageClass:{type:String}},computed:{classes:function(){return{root:ie(),wrapper:ie(\"wrapper\"),imageWrapper:ie(\"image-wrapper\"),image:A(ie(\"image\"),this.imageClass)}},wrapperStyle:function(){var t={width:\"\".concat(this.stencilCoordinates.width,\"px\"),height:\"\".concat(this.stencilCoordinates.height,\"px\"),left:\"calc(50% - \".concat(this.stencilCoordinates.width/2,\"px)\"),top:\"calc(50% - \".concat(this.stencilCoordinates.height/2,\"px)\")};return this.transitions&&this.transitions.enabled&&(t.transition=\"\".concat(this.transitions.time,\"ms \").concat(this.transitions.timingFunction)),t},imageStyle:function(){var t=this.image.transforms,e=pt({width:this.image.width,height:this.image.height},t.rotate),i={width:\"\".concat(this.image.width,\"px\"),height:\"\".concat(this.image.height,\"px\"),left:\"0px\",top:\"0px\"},n={left:(this.image.width-e.width)*t.scaleX/2,top:(this.image.height-e.height)*t.scaleY/2},s={left:(1-t.scaleX)*this.image.width/2,top:(1-t.scaleY)*this.image.height/2};return i.transform=\"translate(\\n\\t\\t\\t\\t\".concat(-this.stencilCoordinates.left-t.translateX-n.left-s.left,\"px,\").concat(-this.stencilCoordinates.top-t.translateY-n.top-s.top,\"px) \")+te(t),this.transitions&&this.transitions.enabled&&(i.transition=\"\".concat(this.transitions.time,\"ms \").concat(this.transitions.timingFunction)),i}}};function se(t,e){var i=e.getBoundingClientRect(),n=i.left,s=i.top,o={left:0,top:0},r=0;return t.forEach((function(e){o.left+=(e.clientX-n)/t.length,o.top+=(e.clientY-s)/t.length})),t.forEach((function(t){r+=I({x:o.left,y:o.top},{x:t.clientX-n,y:t.clientY-s})})),{centerMass:o,spread:r,count:t.length}}ne.render=function(i,n,o,r,a,h){return t(),e(\"div\",{class:h.classes.root},[s(\"div\",{ref:\"wrapper\",class:h.classes.wrapper,style:h.wrapperStyle},[s(\"img\",{ref:\"image\",src:o.image.src,class:h.classes.image,style:h.imageStyle},null,14,[\"src\"])],6)],2)};var oe={props:{touchMove:{type:Boolean,required:!0},mouseMove:{type:Boolean,required:!0},touchResize:{type:Boolean,required:!0},wheelResize:{type:[Boolean,Object],required:!0},eventsFilter:{type:Function,required:!1}},beforeMount:function(){window.addEventListener(\"mouseup\",this.onMouseUp,{passive:!1}),window.addEventListener(\"mousemove\",this.onMouseMove,{passive:!1}),window.addEventListener(\"touchmove\",this.onTouchMove,{passive:!1}),window.addEventListener(\"touchend\",this.onTouchEnd,{passive:!1})},beforeUnmount:function(){window.removeEventListener(\"mouseup\",this.onMouseUp),window.removeEventListener(\"mousemove\",this.onMouseMove),window.removeEventListener(\"touchmove\",this.onTouchMove),window.removeEventListener(\"touchend\",this.onTouchEnd)},created:function(){this.transforming=!1,this.debouncedProcessEnd=x(this.processEnd),this.touches=[]},methods:{processMove:function(t,e){if(this.touches.length){if(1===this.touches.length&&1===e.length)this.$emit(\"move\",new B({left:this.touches[0].clientX-e[0].clientX,top:this.touches[0].clientY-e[0].clientY}));else if(this.touches.length>1&&this.touchResize){var i=se(e,this.$refs.container),n=this.oldGeometricProperties;n.count===i.count&&n.count>1&&this.$emit(\"resize\",new B({left:n.centerMass.left-i.centerMass.left,top:n.centerMass.top-i.centerMass.top},{factor:n.spread/i.spread,center:i.centerMass})),this.oldGeometricProperties=i}this.touches=e}},processEnd:function(){this.transforming&&(this.transforming=!1,this.$emit(\"transform-end\"))},processStart:function(){this.transforming=!0,this.debouncedProcessEnd.clear()},processEvent:function(t){return this.eventsFilter?!1!==this.eventsFilter(t,this.transforming):(t.preventDefault(),t.stopPropagation(),!0)},onTouchStart:function(t){if(t.cancelable&&(this.touchMove||this.touchResize&&t.touches.length>1)&&this.processEvent(t)){var e=this.$refs.container,i=e.getBoundingClientRect(),n=i.left,s=i.top,o=i.bottom,r=i.right;this.touches=b(t.touches).filter((function(t){return t.clientX>n&&t.clientX<r&&t.clientY>s&&t.clientY<o})),this.oldGeometricProperties=se(this.touches,e)}},onTouchEnd:function(t){0===t.touches.length&&(this.touches=[],this.processEnd())},onTouchMove:function(t){var e=this;if(this.touches.length){var i=b(t.touches).filter((function(t){return!t.identifier||e.touches.find((function(e){return e.identifier===t.identifier}))}));this.processEvent(t)&&(this.processMove(t,i),this.processStart())}},onMouseDown:function(t){if(this.mouseMove&&\"buttons\"in t&&1===t.buttons&&this.processEvent(t)){var e={fake:!0,clientX:t.clientX,clientY:t.clientY};this.touches=[e],this.processStart()}},onMouseMove:function(t){this.touches.length&&this.processEvent(t)&&this.processMove(t,[{clientX:t.clientX,clientY:t.clientY}])},onMouseUp:function(){this.touches=[],this.processEnd()},onWheel:function(t){if(this.wheelResize&&this.processEvent(t)){var e=this.$refs.container.getBoundingClientRect(),i=e.left,n=e.top,s=1+this.wheelResize.ratio*(r=t.deltaY||t.detail||t.wheelDelta,0===(a=+r)||$(a)?a:a>0?1:-1),o={left:t.clientX-i,top:t.clientY-n};this.$emit(\"resize\",new B({},{factor:s,center:o})),this.touches.length||this.debouncedProcessEnd()}var r,a}},emits:[\"resize\",\"move\",\"transform-end\"]};oe.render=function(n,s,o,r,a,h){return t(),e(\"div\",{ref:\"container\",onTouchstart:s[1]||(s[1]=function(){return h.onTouchStart&&h.onTouchStart.apply(h,arguments)}),onMousedown:s[2]||(s[2]=function(){return h.onMouseDown&&h.onMouseDown.apply(h,arguments)}),onWheel:s[3]||(s[3]=function(){return h.onWheel&&h.onWheel.apply(h,arguments)})},[i(n.$slots,\"default\")],544)};var re={components:{TransformableImage:oe},props:{touchMove:{type:Boolean,required:!0},mouseMove:{type:Boolean,required:!0},touchResize:{type:Boolean,required:!0},wheelResize:{type:[Boolean,Object],required:!0}},emits:[\"resize\",\"move\"]};re.render=function(s,r,a,h,c,l){var u=n(\"transformable-image\");return t(),e(u,{\"touch-move\":a.touchMove,\"touch-resize\":a.touchResize,\"mouse-move\":a.mouseMove,\"wheel-resize\":a.wheelResize,onMove:r[1]||(r[1]=function(t){return s.$emit(\"move\",t)}),onResize:r[2]||(r[2]=function(t){return s.$emit(\"resize\",t)})},{default:o((function(){return[i(s.$slots,\"default\")]})),_:3},8,[\"touch-move\",\"touch-resize\",\"mouse-move\",\"wheel-resize\"])};var ae=M(\"vue-preview\"),he={props:{coordinates:{type:Object},transitions:{type:Object},image:{type:Object,default:function(){return{}}},imageClass:{type:String},width:{type:Number},height:{type:Number},fill:{type:Boolean}},data:function(){return{calculatedImageSize:{width:0,height:0},calculatedSize:{width:0,height:0}}},computed:{classes:function(){return{root:ae({fill:this.fill}),wrapper:ae(\"wrapper\"),imageWrapper:ae(\"image-wrapper\"),image:A(ae(\"image\"),this.imageClass)}},style:function(){if(this.fill)return{};var t={};return this.width&&(t.width=\"\".concat(this.size.width,\"px\")),this.height&&(t.height=\"\".concat(this.size.height,\"px\")),this.transitions&&this.transitions.enabled&&(t.transition=\"\".concat(this.transitions.time,\"ms \").concat(this.transitions.timingFunction)),t},wrapperStyle:function(){var t={width:\"\".concat(this.size.width,\"px\"),height:\"\".concat(this.size.height,\"px\"),left:\"calc(50% - \".concat(this.size.width/2,\"px)\"),top:\"calc(50% - \".concat(this.size.height/2,\"px)\")};return this.transitions&&this.transitions.enabled&&(t.transition=\"\".concat(this.transitions.time,\"ms \").concat(this.transitions.timingFunction)),t},imageStyle:function(){if(this.coordinates&&this.image){var t=this.coordinates.width/this.size.width,e=g(g({rotate:0,flip:{horizontal:!1,vertical:!1}},this.image.transforms),{},{scaleX:1/t,scaleY:1/t}),i=this.imageSize.width,n=this.imageSize.height,s=pt({width:i,height:n},e.rotate),o={width:\"\".concat(i,\"px\"),height:\"\".concat(n,\"px\"),left:\"0px\",top:\"0px\"},r={rotate:{left:(i-s.width)*e.scaleX/2,top:(n-s.height)*e.scaleY/2},scale:{left:(1-e.scaleX)*i/2,top:(1-e.scaleY)*n/2}};return o.transform=\"translate(\\n\\t\\t\\t\\t\".concat(-this.coordinates.left/t-r.rotate.left-r.scale.left,\"px,\").concat(-this.coordinates.top/t-r.rotate.top-r.scale.top,\"px) \")+te(e),this.transitions&&this.transitions.enabled&&(o.transition=\"\".concat(this.transitions.time,\"ms \").concat(this.transitions.timingFunction)),o}return{}},size:function(){return{width:this.width||this.calculatedSize.width,height:this.height||this.calculatedSize.height}},imageSize:function(){return{width:this.image.width||this.calculatedImageSize.width,height:this.image.height||this.calculatedImageSize.height}}},watch:{image:function(t){(t.width||t.height)&&this.onChangeImage()}},mounted:function(){var t=this;this.onChangeImage(),this.$refs.image.addEventListener(\"load\",(function(){t.refreshImage()})),window.addEventListener(\"resize\",this.refresh),window.addEventListener(\"orientationchange\",this.refresh)},unmounted:function(){window.removeEventListener(\"resize\",this.refresh),window.removeEventListener(\"orientationchange\",this.refresh)},methods:{refreshImage:function(){var t=this.$refs.image;this.calculatedImageSize.height=t.naturalHeight,this.calculatedImageSize.width=t.naturalWidth},refresh:function(){var t=this.$refs.root;this.width||(this.calculatedSize.width=t.clientWidth),this.height||(this.calculatedSize.height=t.clientHeight)},onChangeImage:function(){var t=this.$refs.image;t&&t.complete&&this.refreshImage(),this.refresh()}}};he.render=function(i,n,o,r,a,h){return t(),e(\"div\",{ref:\"root\",class:h.classes.root,style:h.style},[s(\"div\",{ref:\"wrapper\",class:h.classes.wrapper,style:h.wrapperStyle},[c(s(\"img\",{ref:\"image\",src:o.image&&o.image.src,class:h.classes.image,style:h.imageStyle},null,14,[\"src\"]),[[l,o.image&&o.image.src]])],6)],6)};var ce={components:{Preview:he},inheritAttrs:!1};ce.render=function(i,s,o,r,a,h){var c=n(\"preview\");return t(),e(c,u(i.$attrs,{fill:!0}),null,16)};var le=M(\"vue-rectangle-stencil\"),ue={name:\"RectangleStencil\",components:{StencilPreview:ce,BoundingBox:_t,DraggableArea:Qt},props:{image:{type:Object},coordinates:{type:Object},stencilCoordinates:{type:Object},handlers:{type:Object},handlersComponent:{type:[Object,String],default:function(){return kt}},lines:{type:Object},linesComponent:{type:[Object,String],default:function(){return Nt}},aspectRatio:{type:[Number,String]},minAspectRatio:{type:[Number,String]},maxAspectRatio:{type:[Number,String]},movable:{type:Boolean,default:!0},resizable:{type:Boolean,default:!0},transitions:{type:Object},movingClass:{type:String},resizingClass:{type:String},previewClass:{type:String},boundingBoxClass:{type:String},linesClasses:{type:Object,default:function(){return{}}},linesWrappersClasses:{type:Object,default:function(){return{}}},handlersClasses:{type:Object,default:function(){return{}}},handlersWrappersClasses:{type:Object,default:function(){return{}}}},data:function(){return{moving:!1,resizing:!1}},computed:{classes:function(){return{stencil:A(le({movable:this.movable,moving:this.moving,resizing:this.resizing}),this.moving&&this.movingClass,this.resizing&&this.resizingClass),preview:A(le(\"preview\"),this.previewClass),boundingBox:A(le(\"bounding-box\"),this.boundingBoxClass)}},style:function(){var t=this.stencilCoordinates,e=t.height,i=t.width,n=t.left,s=t.top,o={width:\"\".concat(i,\"px\"),height:\"\".concat(e,\"px\"),transform:\"translate(\".concat(n,\"px, \").concat(s,\"px)\")};return this.transitions&&this.transitions.enabled&&(o.transition=\"\".concat(this.transitions.time,\"ms \").concat(this.transitions.timingFunction)),o}},methods:{onMove:function(t){this.$emit(\"move\",t),this.moving=!0},onMoveEnd:function(){this.$emit(\"move-end\"),this.moving=!1},onResize:function(t){this.$emit(\"resize\",t),this.resizing=!0},onResizeEnd:function(){this.$emit(\"resize-end\"),this.resizing=!1},aspectRatios:function(){return{minimum:this.aspectRatio||this.minAspectRatio,maximum:this.aspectRatio||this.maxAspectRatio}}},emits:[\"resize\",\"resize-end\",\"move\",\"move-end\"]};ue.render=function(i,r,a,h,c,l){var u=n(\"stencil-preview\"),d=n(\"draggable-area\"),m=n(\"bounding-box\");return t(),e(\"div\",{class:l.classes.stencil,style:l.style},[s(m,{width:a.stencilCoordinates.width,height:a.stencilCoordinates.height,transitions:a.transitions,class:l.classes.boundingBox,handlers:a.handlers,\"handlers-component\":a.handlersComponent,\"handlers-classes\":a.handlersClasses,\"handlers-wrappers-classes\":a.handlersWrappersClasses,lines:a.lines,\"lines-component\":a.linesComponent,\"lines-classes\":a.linesClasses,\"lines-wrappers-classes\":a.linesWrappersClasses,resizable:a.resizable,onResize:l.onResize,onResizeEnd:l.onResizeEnd},{default:o((function(){return[s(d,{movable:a.movable,onMove:l.onMove,onMoveEnd:l.onMoveEnd},{default:o((function(){return[s(u,{image:a.image,coordinates:a.coordinates,width:a.stencilCoordinates.width,height:a.stencilCoordinates.height,class:l.classes.preview,transitions:a.transitions},null,8,[\"image\",\"coordinates\",\"width\",\"height\",\"class\",\"transitions\"])]})),_:1},8,[\"movable\",\"onMove\",\"onMoveEnd\"])]})),_:1},8,[\"width\",\"height\",\"transitions\",\"class\",\"handlers\",\"handlers-component\",\"handlers-classes\",\"handlers-wrappers-classes\",\"lines\",\"lines-component\",\"lines-classes\",\"lines-wrappers-classes\",\"resizable\",\"onResize\",\"onResizeEnd\"])],6)};var de=M(\"vue-circle-stencil\"),me={components:{StencilPreview:ce,BoundingBox:_t,DraggableArea:Qt},props:{image:{type:Object},coordinates:{type:Object},stencilCoordinates:{type:Object},handlers:{type:Object,default:function(){return{eastNorth:!0,westNorth:!0,westSouth:!0,eastSouth:!0}}},handlersComponent:{type:[Object,String],default:function(){return kt}},handlersClasses:{type:Object,default:function(){return{}}},handlersWrappersClasses:{type:Object,default:function(){return{}}},lines:{type:Object},linesComponent:{type:[Object,String],default:function(){return Nt}},linesClasses:{type:Object,default:function(){return{}}},linesWrappersClasses:{type:Object,default:function(){return{}}},movable:{type:Boolean,default:!0},resizable:{type:Boolean,default:!0},transitions:{type:Object},movingClass:{type:String},resizingClass:{type:String},previewClass:{type:String},boundingBoxClass:{type:String}},data:function(){return{moving:!1,resizing:!1}},computed:{classes:function(){return{stencil:A(de({movable:this.movable,moving:this.moving,resizing:this.resizing}),this.moving&&this.movingClass,this.resizing&&this.resizingClass),preview:A(de(\"preview\"),this.previewClass),boundingBox:A(de(\"bounding-box\"),this.boundingBoxClass)}},style:function(){var t=this.stencilCoordinates,e=t.height,i=t.width,n=t.left,s=t.top,o={width:\"\".concat(i,\"px\"),height:\"\".concat(e,\"px\"),transform:\"translate(\".concat(n,\"px, \").concat(s,\"px)\")};return this.transitions&&this.transitions.enabled&&(o.transition=\"\".concat(this.transitions.time,\"ms \").concat(this.transitions.timingFunction)),o}},methods:{onMove:function(t){this.$emit(\"move\",t),this.moving=!0},onMoveEnd:function(){this.$emit(\"move-end\"),this.moving=!1},onResize:function(t){this.$emit(\"resize\",t),this.resizing=!0},onResizeEnd:function(){this.$emit(\"resize-end\"),this.resizing=!1},aspectRatios:function(){return{minimum:1,maximum:1}}},emits:[\"resize\",\"resize-end\",\"move\",\"move-end\"]};me.render=function(i,r,a,h,c,l){var u=n(\"stencil-preview\"),d=n(\"draggable-area\"),m=n(\"bounding-box\");return t(),e(\"div\",{class:l.classes.stencil,style:l.style},[s(m,{width:a.stencilCoordinates.width,height:a.stencilCoordinates.height,transitions:a.transitions,class:l.classes.boundingBox,handlers:a.handlers,\"handlers-component\":a.handlersComponent,\"handlers-classes\":a.handlersClasses,\"handlers-wrappers-classes\":a.handlersWrappersClasses,lines:a.lines,\"lines-component\":a.linesComponent,\"lines-classes\":a.linesClasses,\"lines-wrappers-classes\":a.linesWrappersClasses,resizable:a.resizable,onResize:l.onResize,onResizeEnd:l.onResizeEnd},{default:o((function(){return[s(d,{movable:a.movable,onMove:l.onMove,onMoveEnd:l.onMoveEnd},{default:o((function(){return[s(u,{image:a.image,coordinates:a.coordinates,width:a.stencilCoordinates.width,height:a.stencilCoordinates.height,class:l.classes.preview,transitions:a.transitions},null,8,[\"image\",\"coordinates\",\"width\",\"height\",\"class\",\"transitions\"])]})),_:1},8,[\"movable\",\"onMove\",\"onMoveEnd\"])]})),_:1},8,[\"width\",\"height\",\"transitions\",\"class\",\"handlers\",\"handlers-component\",\"handlers-classes\",\"handlers-wrappers-classes\",\"lines\",\"lines-component\",\"lines-classes\",\"lines-wrappers-classes\",\"resizable\",\"onResize\",\"onResizeEnd\"])],6)};var pe=[\"transitions\"],ge=M(\"vue-advanced-cropper\"),fe={name:\"Cropper\",components:{BackgroundWrapper:re},props:{src:{type:String,default:null},stencilComponent:{type:[Object,String],default:function(){return ue}},backgroundWrapperComponent:{type:[Object,String],default:function(){return re}},stencilProps:{type:Object,default:function(){return{}}},autoZoom:{type:Boolean,default:!1},imageClass:{type:String},boundariesClass:{type:String},backgroundClass:{type:String},foregroundClass:{type:String},minWidth:{type:[Number,String]},minHeight:{type:[Number,String]},maxWidth:{type:[Number,String]},maxHeight:{type:[Number,String]},debounce:{type:[Boolean,Number],default:500},transitions:{type:Boolean,default:!0},checkOrientation:{type:Boolean,default:!0},canvas:{type:[Object,Boolean],default:!0},crossOrigin:{type:[Boolean,String],default:void 0},transitionTime:{type:Number,default:300},imageRestriction:{type:String,default:\"fit-area\",validator:function(t){return-1!==K.indexOf(t)}},roundResult:{type:Boolean,default:!0},defaultSize:{type:[Function,Object]},defaultPosition:{type:[Function,Object]},defaultVisibleArea:{type:[Function,Object]},defaultTransforms:{type:[Function,Object]},defaultBoundaries:{type:[Function,String],validator:function(t){return!(\"string\"==typeof t&&\"fill\"!==t&&\"fit\"!==t)}},priority:{type:String,default:\"coordinates\"},stencilSize:{type:[Object,Function]},resizeImage:{type:[Boolean,Object],default:!0},moveImage:{type:[Boolean,Object],default:!0},autoZoomAlgorithm:{type:Function},resizeAlgorithm:{type:Function,default:function(t){var e=t.event,i=t.coordinates,n=t.aspectRatio,s=t.positionRestrictions,o=t.sizeRestrictions,r=C(C({},i),{right:i.left+i.width,bottom:i.top+i.height}),a=e.params||{},h=C({},e.directions),c=a.allowedDirections||{left:!0,right:!0,bottom:!0,top:!0};o.widthFrozen&&(h.left=0,h.right=0),o.heightFrozen&&(h.top=0,h.bottom=0),V.forEach((function(t){c[t]||(h[t]=0)}));var l=ot(r,h=It({coordinates:r,directions:h,sizeRestrictions:o,positionRestrictions:s})).width,u=ot(r,h).height,d=a.preserveRatio?ct(r):dt(l/u,n);if(d){var m=a.respectDirection;if(m||(m=r.width>=r.height||1===d?\"width\":\"height\"),\"width\"===m){var p=l/d-r.height;if(c.top&&c.bottom){var g=h.top,f=h.bottom;h.bottom=Bt(p,f,g),h.top=Bt(p,g,f)}else c.bottom?h.bottom=p:c.top?h.top=p:c.right?h.right=0:c.left&&(h.left=0)}else if(\"height\"===m){var v=r.width-u*d;if(c.left&&c.right){var b=h.left,w=h.right;h.left=-Bt(v,b,w),h.right=-Bt(v,w,b)}else c.left?h.left=-v:c.right?h.right=-v:c.top?h.top=0:c.bottom&&(h.bottom=0)}h=It({directions:h,coordinates:r,sizeRestrictions:o,positionRestrictions:s,preserveRatio:!0,compensate:a.compensate})}return l=ot(r,h).width,u=ot(r,h).height,(d=a.preserveRatio?ct(r):dt(l/u,n))&&Math.abs(d-l/u)>.001&&V.forEach((function(t){c[t]||(h[t]=0)})),St({event:new Y({left:-h.left,top:-h.top}),coordinates:{width:i.width+h.right+h.left,height:i.height+h.top+h.bottom,left:i.left,top:i.top},positionRestrictions:s})}},moveAlgorithm:{type:Function,default:St},initStretcher:{type:Function,default:function(t){var e=t.stretcher,i=t.imageSize,n=ct(i);e.style.width=i.width+\"px\",e.style.height=e.clientWidth/n+\"px\",e.style.width=e.clientWidth+\"px\"}},fitCoordinates:{type:Function,default:function(t){var e=t.visibleArea,i=t.coordinates,n=t.aspectRatio,s=t.sizeRestrictions,o=t.positionRestrictions,r=C(C({},i),Mt({width:i.width,height:i.height,aspectRatio:n,sizeRestrictions:{maxWidth:e.width,maxHeight:e.height,minHeight:Math.min(e.height,s.minHeight),minWidth:Math.min(e.width,s.minWidth)}}));return r=vt(r=at(r,it(nt(i),nt(r))),zt(et(e),o))}},fitVisibleArea:{type:Function,default:function(t){var e=t.visibleArea,i=t.boundaries,n=t.getAreaRestrictions,s=t.coordinates,o=C({},e);o.height=o.width/ct(i),o.top+=(e.height-o.height)/2,(s.height-o.height>0||s.width-o.width>0)&&(o=ht(o,Math.max(s.height/o.height,s.width/o.width)));var r=rt(ut(s,et(o=ht(o,ft(o,n({visibleArea:o,type:\"resize\"}))))));return o.width<s.width&&(r.left=0),o.height<s.height&&(r.top=0),o=vt(o=at(o,r),n({visibleArea:o,type:\"move\"}))}},areaRestrictionsAlgorithm:{type:Function,default:function(t){var e=t.visibleArea,i=t.boundaries,n=t.imageSize,s=t.imageRestriction,o=t.type,r={};return\"fill-area\"===s?r={left:0,top:0,right:n.width,bottom:n.height}:\"fit-area\"===s&&(ct(i)>ct(n)?(r={top:0,bottom:n.height},e&&\"move\"===o&&(e.width>n.width?(r.left=-(e.width-n.width)/2,r.right=n.width-r.left):(r.left=0,r.right=n.width))):(r={left:0,right:n.width},e&&\"move\"===o&&(e.height>n.height?(r.top=-(e.height-n.height)/2,r.bottom=n.height-r.top):(r.top=0,r.bottom=n.height)))),r}},sizeRestrictionsAlgorithm:{type:Function,default:function(t){return{minWidth:t.minWidth,minHeight:t.minHeight,maxWidth:t.maxWidth,maxHeight:t.maxHeight}}},positionRestrictionsAlgorithm:{type:Function,default:function(t){var e=t.imageSize,i={};return\"none\"!==t.imageRestriction&&(i={left:0,top:0,right:e.width,bottom:e.height}),i}}},data:function(){return{transitionsActive:!1,imageLoaded:!1,imageAttributes:{width:null,height:null,crossOrigin:null,src:null},defaultImageTransforms:{rotate:0,flip:{horizontal:!1,vertical:!1}},appliedImageTransforms:{rotate:0,flip:{horizontal:!1,vertical:!1}},boundaries:{width:0,height:0},visibleArea:null,coordinates:g({},J)}},computed:{image:function(){return{src:this.imageAttributes.src,width:this.imageAttributes.width,height:this.imageAttributes.height,transforms:this.imageTransforms}},imageTransforms:function(){return{rotate:this.appliedImageTransforms.rotate,flip:{horizontal:this.appliedImageTransforms.flip.horizontal,vertical:this.appliedImageTransforms.flip.vertical},translateX:this.visibleArea?this.visibleArea.left/this.coefficient:0,translateY:this.visibleArea?this.visibleArea.top/this.coefficient:0,scaleX:1/this.coefficient,scaleY:1/this.coefficient}},imageSize:function(){var t=function(t){return t*Math.PI/180}(this.imageTransforms.rotate);return{width:Math.abs(this.imageAttributes.width*Math.cos(t))+Math.abs(this.imageAttributes.height*Math.sin(t)),height:Math.abs(this.imageAttributes.width*Math.sin(t))+Math.abs(this.imageAttributes.height*Math.cos(t))}},initialized:function(){return Boolean(this.visibleArea&&this.imageLoaded)},settings:function(){var t=j(this.resizeImage,{touch:!0,wheel:{ratio:.1},adjustStencil:!0},{touch:!1,wheel:!1,adjustStencil:!1});return{moveImage:j(this.moveImage,{touch:!0,mouse:!0},{touch:!1,mouse:!1}),resizeImage:t}},coefficient:function(){return this.visibleArea?this.visibleArea.width/this.boundaries.width:0},areaRestrictions:function(){return this.imageLoaded?this.areaRestrictionsAlgorithm({imageSize:this.imageSize,imageRestriction:this.imageRestriction,boundaries:this.boundaries}):{}},transitionsOptions:function(){return{enabled:this.transitionsActive,timingFunction:\"ease-in-out\",time:350}},sizeRestrictions:function(){if(this.boundaries.width&&this.boundaries.height&&this.imageSize.width&&this.imageSize.height){var t=this.sizeRestrictionsAlgorithm({imageSize:this.imageSize,minWidth:D(this.minWidth)?0:L(this.minWidth),minHeight:D(this.minHeight)?0:L(this.minHeight),maxWidth:D(this.maxWidth)?1/0:L(this.maxWidth),maxHeight:D(this.maxHeight)?1/0:L(this.maxHeight)});if(t=function(t){var e=t.areaRestrictions,i=t.sizeRestrictions;t.imageSize;var n=t.boundaries,s=t.positionRestrictions;t.imageRestriction;var o=C(C({},i),{minWidth:void 0!==i.minWidth?i.minWidth:0,minHeight:void 0!==i.minHeight?i.minHeight:0,maxWidth:void 0!==i.maxWidth?i.maxWidth:1/0,maxHeight:void 0!==i.maxHeight?i.maxHeight:1/0});void 0!==s.left&&void 0!==s.right&&(o.maxWidth=Math.min(o.maxWidth,s.right-s.left)),void 0!==s.bottom&&void 0!==s.top&&(o.maxHeight=Math.min(o.maxHeight,s.bottom-s.top));var r=bt(e),a=mt(n,r);return r.width<1/0&&(!o.maxWidth||o.maxWidth>a.width)&&(o.maxWidth=Math.min(o.maxWidth,a.width)),r.height<1/0&&(!o.maxHeight||o.maxHeight>a.height)&&(o.maxHeight=Math.min(o.maxHeight,a.height)),o.minWidth>o.maxWidth&&(o.minWidth=o.maxWidth,o.widthFrozen=!0),o.minHeight>o.maxHeight&&(o.minHeight=o.maxHeight,o.heightFrozen=!0),o}({sizeRestrictions:t,areaRestrictions:this.getAreaRestrictions({visibleArea:this.visibleArea,type:\"resize\"}),imageSize:this.imageSize,boundaries:this.boundaries,positionRestrictions:this.positionRestrictions,imageRestriction:this.imageRestriction,visibleArea:this.visibleArea,stencilSize:this.getStencilSize()}),this.visibleArea&&this.stencilSize){var e=this.getStencilSize(),i=bt(this.getAreaRestrictions({visibleArea:this.visibleArea,type:\"resize\"}));t.maxWidth=Math.min(t.maxWidth,i.width*e.width/this.boundaries.width),t.maxHeight=Math.min(t.maxHeight,i.height*e.height/this.boundaries.height),t.maxWidth<t.minWidth&&(t.minWidth=t.maxWidth),t.maxHeight<t.minHeight&&(t.minHeight=t.maxHeight)}return t}return{minWidth:0,minHeight:0,maxWidth:0,maxHeight:0}},positionRestrictions:function(){return this.positionRestrictionsAlgorithm({imageSize:this.imageSize,imageRestriction:this.imageRestriction})},classes:function(){return{cropper:ge(),image:A(ge(\"image\"),this.imageClass),stencil:ge(\"stencil\"),boundaries:A(ge(\"boundaries\"),this.boundariesClass),stretcher:A(ge(\"stretcher\")),background:A(ge(\"background\"),this.backgroundClass),foreground:A(ge(\"foreground\"),this.foregroundClass),imageWrapper:A(ge(\"image-wrapper\")),cropperWrapper:A(ge(\"cropper-wrapper\"))}},stencilCoordinates:function(){if(this.initialized){var t=this.coordinates,e=t.width,i=t.height,n=t.left,s=t.top;return{width:e/this.coefficient,height:i/this.coefficient,left:(n-this.visibleArea.left)/this.coefficient,top:(s-this.visibleArea.top)/this.coefficient}}return this.defaultCoordinates()},boundariesStyle:function(){var t={width:this.boundaries.width?\"\".concat(Math.round(this.boundaries.width),\"px\"):\"auto\",height:this.boundaries.height?\"\".concat(Math.round(this.boundaries.height),\"px\"):\"auto\",transition:\"opacity \".concat(this.transitionTime,\"ms\"),pointerEvents:this.imageLoaded?\"all\":\"none\"};return this.imageLoaded||(t.opacity=\"0\"),t},imageStyle:function(){var t=this.imageAttributes.width>this.imageAttributes.height?{width:Math.min(1024,this.imageAttributes.width),height:Math.min(1024,this.imageAttributes.width)/(this.imageAttributes.width/this.imageAttributes.height)}:{height:Math.min(1024,this.imageAttributes.height),width:Math.min(1024,this.imageAttributes.height)*(this.imageAttributes.width/this.imageAttributes.height)},e={left:(t.width-this.imageSize.width)/(2*this.coefficient),top:(t.height-this.imageSize.height)/(2*this.coefficient)},i={left:(1-1/this.coefficient)*t.width/2,top:(1-1/this.coefficient)*t.height/2},n=g(g({},this.imageTransforms),{},{scaleX:this.imageTransforms.scaleX*(this.imageAttributes.width/t.width),scaleY:this.imageTransforms.scaleY*(this.imageAttributes.height/t.height)}),s={width:\"\".concat(t.width,\"px\"),height:\"\".concat(t.height,\"px\"),left:\"0px\",top:\"0px\",transform:\"translate(\".concat(-e.left-i.left-this.imageTransforms.translateX,\"px, \").concat(-e.top-i.top-this.imageTransforms.translateY,\"px)\")+te(n)};return this.transitionsOptions.enabled&&(s.transition=\"\".concat(this.transitionsOptions.time,\"ms \").concat(this.transitionsOptions.timingFunction)),s}},watch:{src:function(){this.onChangeImage()},stencilComponent:function(){var t=this;this.$nextTick((function(){t.resetCoordinates(),t.runAutoZoom(\"setCoordinates\"),t.onChange()}))},minWidth:function(){this.onPropsChange()},maxWidth:function(){this.onPropsChange()},minHeight:function(){this.onPropsChange()},maxHeight:function(){this.onPropsChange()},imageRestriction:function(){this.reset()},stencilProps:function(t,e){[\"aspectRatio\",\"minAspectRatio\",\"maxAspectRatio\"].find((function(i){return t[i]!==e[i]}))&&this.$nextTick(this.onPropsChange)}},created:function(){this.debouncedUpdate=x(this.update,this.debounce),this.debouncedDisableTransitions=x(this.disableTransitions,this.transitionsOptions.time),this.awaiting=!1},mounted:function(){this.$refs.image.addEventListener(\"load\",this.onSuccessLoadImage),this.$refs.image.addEventListener(\"error\",this.onFailLoadImage),this.onChangeImage(),window.addEventListener(\"resize\",this.refresh),window.addEventListener(\"orientationchange\",this.refresh)},unmounted:function(){window.removeEventListener(\"resize\",this.refresh),window.removeEventListener(\"orientationchange\",this.refresh),this.imageAttributes.revoke&&this.imageAttributes.src&&URL.revokeObjectURL(this.imageAttributes.src),this.debouncedUpdate.clear(),this.debouncedDisableTransitions.clear()},methods:{getResult:function(){var t=this.initialized?this.prepareResult(g({},this.coordinates)):this.defaultCoordinates(),e={rotate:this.imageTransforms.rotate%360,flip:g({},this.imageTransforms.flip)};if(this.src&&this.imageLoaded){var i=this;return{image:this.image,coordinates:t,visibleArea:this.visibleArea?g({},this.visibleArea):null,imageTransforms:e,get canvas(){return i.canvas?i.getCanvas():void 0}}}return{image:this.image,coordinates:t,visibleArea:this.visibleArea?g({},this.visibleArea):null,canvas:void 0,imageTransforms:e}},zoom:function(t,e){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},n=i.transitions,s=void 0===n||n;this.onManipulateImage(new B({},{factor:1/t,center:e}),{normalize:!1,transitions:s})},move:function(t,e){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},n=i.transitions,s=void 0===n||n;this.onManipulateImage(new B({left:t||0,top:e||0}),{normalize:!1,transitions:s})},setCoordinates:function(t){var e=this,i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=i.autoZoom,s=void 0===n||n,o=i.transitions,r=void 0===o||o;this.$nextTick((function(){e.imageLoaded?(e.transitionsActive||(r&&e.enableTransitions(),e.coordinates=e.applyTransform(t),s&&e.runAutoZoom(\"setCoordinates\"),r&&e.debouncedDisableTransitions()),e.onChange()):e.delayedTransforms=t}))},refresh:function(){var t=this,e=this.$refs.image;if(this.src&&e)return this.initialized?this.updateVisibleArea().then((function(){t.onChange()})):this.resetVisibleArea().then((function(){t.onChange()}))},reset:function(){var t=this;return this.resetVisibleArea().then((function(){t.onChange(!1)}))},awaitRender:function(t){var e=this;this.awaiting||(this.awaiting=!0,this.$nextTick((function(){t(),e.awaiting=!1})))},prepareResult:function(t){return this.roundResult?function(t){var e=t.coordinates,i=t.sizeRestrictions,n=t.positionRestrictions,s={width:Math.round(e.width),height:Math.round(e.height),left:Math.round(e.left),top:Math.round(e.top)};return s.width>i.maxWidth?s.width=Math.floor(e.width):s.width<i.minWidth&&(s.width=Math.ceil(e.width)),s.height>i.maxHeight?s.height=Math.floor(e.height):s.height<i.minHeight&&(s.height=Math.ceil(e.height)),vt(s,n)}(g(g({},this.getPublicProperties()),{},{positionRestrictions:jt(this.positionRestrictions,this.visibleArea),coordinates:t})):t},processAutoZoom:function(t,e,i,n){var s=this.autoZoomAlgorithm;s||(s=this.stencilSize?Ct:this.autoZoom?Et:Wt);var o=s({event:{type:t,params:n},visibleArea:e,coordinates:i,boundaries:this.boundaries,aspectRatio:this.getAspectRatio(),positionRestrictions:this.positionRestrictions,getAreaRestrictions:this.getAreaRestrictions,sizeRestrictions:this.sizeRestrictions,stencilSize:this.getStencilSize()});return g(g({},o),{},{changed:!tt(o.visibleArea,e)||!tt(o.coordinates,i)})},runAutoZoom:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},i=e.transitions,n=void 0!==i&&i,s=v(e,pe),o=this.processAutoZoom(t,this.visibleArea,this.coordinates,s),r=o.visibleArea,a=o.coordinates,h=o.changed;n&&h&&this.enableTransitions(),this.visibleArea=r,this.coordinates=a,n&&h&&this.debouncedDisableTransitions()},normalizeEvent:function(t){return function(t){var e=t.event,i=t.visibleArea,n=t.coefficient;if(\"manipulateImage\"===e.type)return C(C({},e),{move:{left:e.move&&e.move.left?n*e.move.left:0,top:e.move&&e.move.top?n*e.move.top:0},scale:{factor:e.scale&&e.scale.factor?e.scale.factor:1,center:e.scale&&e.scale.center?{left:e.scale.center.left*n+i.left,top:e.scale.center.top*n+i.top}:null}});if(\"resize\"===e.type){var s=C(C({},e),{directions:C({},e.directions)});return V.forEach((function(t){s.directions[t]*=n})),s}if(\"move\"===e.type){var o=C(C({},e),{directions:C({},e.directions)});return Q.forEach((function(t){o.directions[t]*=n})),o}return e}(g(g({},this.getPublicProperties()),{},{event:t}))},getCanvas:function(){if(this.$refs.canvas){var t=this.$refs.canvas,e=this.$refs.image,i=0!==this.imageTransforms.rotate||this.imageTransforms.flip.horizontal||this.imageTransforms.flip.vertical?function(t,e,i){var n=i.rotate,s=i.flip,o={width:e.naturalWidth,height:e.naturalHeight},r=pt(o,n),a=t.getContext(\"2d\");t.height=r.height,t.width=r.width,a.save();var h=gt(nt(C({left:0,top:0},o)),n);return a.translate(-(h.left-r.width/2),-(h.top-r.height/2)),a.rotate(n*Math.PI/180),a.translate(s.horizontal?o.width:0,s.vertical?o.height:0),a.scale(s.horizontal?-1:1,s.vertical?-1:1),a.drawImage(e,0,0,o.width,o.height),a.restore(),t}(this.$refs.sourceCanvas,e,this.imageTransforms):e,n=g({minWidth:0,minHeight:0,maxWidth:1/0,maxHeight:1/0,maxArea:this.maxCanvasSize,imageSmoothingEnabled:!0,imageSmoothingQuality:\"high\",fillColor:\"transparent\"},this.canvas),s=function(t){return t.find((function(t){return e=t,!Number.isNaN(parseFloat(e))&&isFinite(e);var e}))},o=Mt({sizeRestrictions:{minWidth:s([n.width,n.minWidth])||0,minHeight:s([n.height,n.minHeight])||0,maxWidth:s([n.width,n.maxWidth])||1/0,maxHeight:s([n.height,n.maxHeight])||1/0},width:this.coordinates.width,height:this.coordinates.height,aspectRatio:{minimum:this.coordinates.width/this.coordinates.height,maximum:this.coordinates.width/this.coordinates.height}});if(n.maxArea&&o.width*o.height>n.maxArea){var r=Math.sqrt(n.maxArea/(o.width*o.height));o={width:Math.round(r*o.width),height:Math.round(r*o.height)}}return function(t,e,i,n,s){t.width=n?n.width:i.width,t.height=n?n.height:i.height;var o=t.getContext(\"2d\");o.clearRect(0,0,t.width,t.height),s&&(s.imageSmoothingEnabled&&(o.imageSmoothingEnabled=s.imageSmoothingEnabled),s.imageSmoothingQuality&&(o.imageSmoothingQuality=s.imageSmoothingQuality),s.fillColor&&(o.fillStyle=s.fillColor,o.fillRect(0,0,t.width,t.height),o.save()));var r=i.left<0?-i.left:0,a=i.top<0?-i.top:0;o.drawImage(e,i.left+r,i.top+a,i.width,i.height,r*(t.width/i.width),a*(t.height/i.height),t.width,t.height)}(t,i,this.coordinates,o,n),t}},update:function(){this.$emit(\"change\",this.getResult())},applyTransform:function(t){var e=arguments.length>1&&void 0!==arguments[1]&&arguments[1],i=this.visibleArea&&e?wt(this.sizeRestrictions,this.visibleArea):this.sizeRestrictions,n=this.visibleArea&&e?jt(this.positionRestrictions,this.visibleArea):this.positionRestrictions;return xt({transform:t,coordinates:this.coordinates,imageSize:this.imageSize,sizeRestrictions:i,positionRestrictions:n,aspectRatio:this.getAspectRatio(),visibleArea:this.visibleArea})},resetCoordinates:function(){var t=this;if(this.$refs.image){this.$refs.cropper,this.$refs.image;var e=this.defaultSize;e||(e=this.stencilSize?Dt:Ot);var i=this.sizeRestrictions;i.minWidth,i.minHeight,i.maxWidth,i.maxHeight;var n=O(e)?e({boundaries:this.boundaries,imageSize:this.imageSize,aspectRatio:this.getAspectRatio(),sizeRestrictions:this.sizeRestrictions,stencilSize:this.getStencilSize(),visibleArea:this.visibleArea}):e,s=this.defaultPosition||Tt,o=[n,function(e){var i=e.coordinates;return g({},O(s)?s({coordinates:i,imageSize:t.imageSize,visibleArea:t.visibleArea}):t.defaultPosition)}];this.delayedTransforms&&o.push.apply(o,b(Array.isArray(this.delayedTransforms)?this.delayedTransforms:[this.delayedTransforms])),this.coordinates=this.applyTransform(o,!0),this.delayedTransforms=null}},clearImage:function(){var t=this;this.imageLoaded=!1,setTimeout((function(){var e=t.$refs.stretcher;e&&(e.style.height=\"auto\",e.style.width=\"auto\"),t.coordinates=t.defaultCoordinates(),t.boundaries={width:0,height:0}}),this.transitionTime)},enableTransitions:function(){this.transitions&&(this.transitionsActive=!0)},disableTransitions:function(){this.transitionsActive=!1},updateBoundaries:function(){var t=this,e=this.$refs.stretcher,i=this.$refs.cropper;return this.initStretcher({cropper:i,stretcher:e,imageSize:this.imageSize}),this.$nextTick().then((function(){var e={cropper:i,imageSize:t.imageSize};if(O(t.defaultBoundaries)?t.boundaries=t.defaultBoundaries(e):\"fit\"===t.defaultBoundaries?t.boundaries=function(t){var e=t.cropper,i=t.imageSize,n=e.clientHeight,s=e.clientWidth,o=n,r=i.width*n/i.height;return r>s&&(r=s,o=i.height*s/i.width),{width:r,height:o}}(e):t.boundaries=function(t){var e=t.cropper;return{width:e.clientWidth,height:e.clientHeight}}(e),!t.boundaries.width||!t.boundaries.height)throw new Error(\"It's impossible to fit the cropper in the current container\")}))},resetVisibleArea:function(){var t=this;return this.appliedImageTransforms=g(g({},this.defaultImageTransforms),{},{flip:g({},this.defaultImageTransforms.flip)}),this.updateBoundaries().then((function(){\"visible-area\"!==t.priority&&(t.visibleArea=null,t.resetCoordinates());var e,i,n,s,o,r,a=t.defaultVisibleArea||Ht;t.visibleArea=O(a)?a({imageSize:t.imageSize,boundaries:t.boundaries,coordinates:\"visible-area\"!==t.priority?t.coordinates:null,getAreaRestrictions:t.getAreaRestrictions,stencilSize:t.getStencilSize()}):t.defaultVisibleArea,t.visibleArea=(e={visibleArea:t.visibleArea,boundaries:t.boundaries,getAreaRestrictions:t.getAreaRestrictions},i=e.visibleArea,n=e.boundaries,s=e.getAreaRestrictions,o=C({},i),r=ct(n),o.width/o.height!==r&&(o.height=o.width/r),vt(o,s({visibleArea:o,type:\"move\"}))),\"visible-area\"===t.priority?t.resetCoordinates():t.coordinates=t.fitCoordinates({visibleArea:t.visibleArea,coordinates:t.coordinates,aspectRatio:t.getAspectRatio(),positionRestrictions:t.positionRestrictions,sizeRestrictions:t.sizeRestrictions}),t.runAutoZoom(\"resetVisibleArea\")})).catch((function(){t.visibleArea=null}))},updateVisibleArea:function(){var t=this;return this.updateBoundaries().then((function(){t.visibleArea=t.fitVisibleArea({imageSize:t.imageSize,boundaries:t.boundaries,visibleArea:t.visibleArea,coordinates:t.coordinates,getAreaRestrictions:t.getAreaRestrictions}),t.coordinates=t.fitCoordinates({visibleArea:t.visibleArea,coordinates:t.coordinates,aspectRatio:t.getAspectRatio(),positionRestrictions:t.positionRestrictions,sizeRestrictions:t.sizeRestrictions}),t.runAutoZoom(\"updateVisibleArea\")})).catch((function(){t.visibleArea=null}))},onChange:function(){var t=!(arguments.length>0&&void 0!==arguments[0])||arguments[0];t&&this.debounce?this.debouncedUpdate():this.update()},onChangeImage:function(){var t,e=this;if(this.imageLoaded=!1,this.delayedTransforms=null,this.src){if(function(t){if(T(t))return!1;var e=window.location,i=/(\\w+:)?(?:\\/\\/)([\\w.-]+)?(?::(\\d+))?\\/?/.exec(t)||[],n={protocol:i[1]||\"\",host:i[2]||\"\",port:i[3]||\"\"},s=function(t){return t.port||(\"http\"===(t.protocol||e.protocol)?80:433)};return!(!n.protocol&&!n.host&&!n.port||Boolean(n.protocol&&n.protocol==e.protocol&&n.host&&n.host==e.host&&n.host&&s(n)==s(e)))}(this.src)){var i=D(this.crossOrigin)?this.canvas:this.crossOrigin;!0===i&&(i=\"anonymous\"),this.imageAttributes.crossOrigin=i||null}if(this.checkOrientation){var n=(t=this.src,new Promise((function(e){Jt(t).then((function(i){var n=ee(i);e(i?{source:t,arrayBuffer:i,orientation:n}:{source:t,arrayBuffer:null,orientation:null})})).catch((function(i){console.warn(i),e({source:t,arrayBuffer:null,orientation:null})}))})));setTimeout((function(){n.then(e.onParseImage)}),this.transitionTime)}else setTimeout((function(){e.onParseImage({source:e.src})}),this.transitionTime)}else this.clearImage()},onFailLoadImage:function(){this.imageAttributes.src&&(this.clearImage(),this.$emit(\"error\"))},onSuccessLoadImage:function(){var t=this,e=this.$refs.image;e&&!this.imageLoaded&&(this.imageAttributes.height=e.naturalHeight,this.imageAttributes.width=e.naturalWidth,this.imageLoaded=!0,this.resetVisibleArea().then((function(){t.$emit(\"ready\"),t.onChange(!1)})))},onParseImage:function(t){var e=this,i=t.source,n=t.arrayBuffer,s=t.orientation;this.imageAttributes.revoke&&this.imageAttributes.src&&URL.revokeObjectURL(this.imageAttributes.src),this.imageAttributes.revoke=!1,n&&s&&s>1?W(i)||!T(i)?(this.imageAttributes.src=URL.createObjectURL(new Blob([n])),this.imageAttributes.revoke=!0):this.imageAttributes.src=function(t){for(var e=[],i=new Uint8Array(t);i.length>0;){var n=i.subarray(0,8192);e.push(String.fromCharCode.apply(null,Array.from?Array.from(n):n.slice())),i=i.subarray(8192)}return\"data:image/jpeg;base64,\"+btoa(e.join(\"\"))}(n):this.imageAttributes.src=i,O(this.defaultTransforms)?this.appliedImageTransforms=Kt(this.defaultTransforms()):H(this.defaultTransforms)?this.appliedImageTransforms=Kt(this.defaultTransforms):this.appliedImageTransforms=function(t){var e=Kt({});if(t)switch(t){case 2:e.flip.horizontal=!0;break;case 3:e.rotate=-180;break;case 4:e.flip.vertical=!0;break;case 5:e.rotate=90,e.flip.vertical=!0;break;case 6:e.rotate=90;break;case 7:e.rotate=90,e.flip.horizontal=!0;break;case 8:e.rotate=-90}return e}(s),this.defaultImageTransforms=g(g({},this.appliedImageTransforms),{},{flip:g({},this.appliedImageTransforms.flip)}),this.$nextTick((function(){var t=e.$refs.image;t&&t.complete&&(!function(t){return Boolean(t.naturalWidth)}(t)?e.onFailLoadImage():e.onSuccessLoadImage())}))},onResizeEnd:function(){this.runAutoZoom(\"resize\",{transitions:!0})},onMoveEnd:function(){this.runAutoZoom(\"move\",{transitions:!0})},onMove:function(t){var e=this;this.transitionsOptions.enabled||this.awaitRender((function(){e.coordinates=e.moveAlgorithm(g(g({},e.getPublicProperties()),{},{positionRestrictions:jt(e.positionRestrictions,e.visibleArea),coordinates:e.coordinates,event:e.normalizeEvent(t)})),e.onChange()}))},onResize:function(t){var e=this;this.transitionsOptions.enabled||this.stencilSize&&!this.autoZoom||this.awaitRender((function(){var i=e.sizeRestrictions,n=Math.min(e.coordinates.width,e.coordinates.height,20*e.coefficient);e.coordinates=e.resizeAlgorithm(g(g({},e.getPublicProperties()),{},{positionRestrictions:jt(e.positionRestrictions,e.visibleArea),sizeRestrictions:{maxWidth:Math.min(i.maxWidth,e.visibleArea.width),maxHeight:Math.min(i.maxHeight,e.visibleArea.height),minWidth:Math.max(i.minWidth,n),minHeight:Math.max(i.minHeight,n)},event:e.normalizeEvent(t)})),e.onChange(),e.ticking=!1}))},onManipulateImage:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(!this.transitionsOptions.enabled){var i=e.transitions,n=void 0!==i&&i,s=e.normalize,o=void 0===s||s;n&&this.enableTransitions();var r=Lt(g(g({},this.getPublicProperties()),{},{event:o?this.normalizeEvent(t):t,getAreaRestrictions:this.getAreaRestrictions,imageRestriction:this.imageRestriction,adjustStencil:!this.stencilSize&&this.settings.resizeImage.adjustStencil})),a=r.visibleArea,h=r.coordinates;this.visibleArea=a,this.coordinates=h,this.runAutoZoom(\"manipulateImage\"),this.onChange(),n&&this.debouncedDisableTransitions()}},onPropsChange:function(){this.coordinates=this.applyTransform(this.coordinates,!0),this.onChange(!1)},getAreaRestrictions:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=t.visibleArea,i=t.type,n=void 0===i?\"move\":i;return this.areaRestrictionsAlgorithm({boundaries:this.boundaries,imageSize:this.imageSize,imageRestriction:this.imageRestriction,visibleArea:e,type:n})},getAspectRatio:function(t){var e,i,n=this.stencilProps,s=n.aspectRatio,o=n.minAspectRatio,r=n.maxAspectRatio;if(this.$refs.stencil&&this.$refs.stencil.aspectRatios){var a=this.$refs.stencil.aspectRatios();e=a.minimum,i=a.maximum}if(D(e)&&(e=D(s)?o:s),D(i)&&(i=D(s)?r:s),!t&&(D(e)||D(i))){var h=this.getStencilSize(),c=h?ct(h):null;D(e)&&(e=P(c)?c:void 0),D(i)&&(i=P(c)?c:void 0)}return{minimum:e,maximum:i}},getStencilSize:function(){if(this.stencilSize)return t={currentStencilSize:{width:this.stencilCoordinates.width,height:this.stencilCoordinates.height},stencilSize:this.stencilSize,boundaries:this.boundaries,coefficient:this.coefficient,coordinates:this.coordinates,aspectRatio:this.getAspectRatio(!0)},e=t.boundaries,i=t.stencilSize,n=t.aspectRatio,dt(ct(s=O(i)?i({boundaries:e,aspectRatio:n}):i),n)&&(s=Mt({sizeRestrictions:{maxWidth:e.width,maxHeight:e.height,minWidth:0,minHeight:0},width:s.width,height:s.height,aspectRatio:{minimum:n.minimum,maximum:n.maximum}})),(s.width>e.width||s.height>e.height)&&(s=Mt({sizeRestrictions:{maxWidth:e.width,maxHeight:e.height,minWidth:0,minHeight:0},width:s.width,height:s.height,aspectRatio:{minimum:ct(s),maximum:ct(s)}})),s;var t,e,i,n,s},getPublicProperties:function(){return{coefficient:this.coefficient,visibleArea:this.visibleArea,coordinates:this.coordinates,boundaries:this.boundaries,sizeRestrictions:this.sizeRestrictions,positionRestrictions:this.positionRestrictions,aspectRatio:this.getAspectRatio(),imageRestriction:this.imageRestriction}},defaultCoordinates:function(){return g({},J)},flip:function(t,e){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},n=i.transitions,s=void 0===n||n;if(!this.transitionsActive){s&&this.enableTransitions();var o=g({},this.imageTransforms.flip),r=$t({flip:{horizontal:t?!o.horizontal:o.horizontal,vertical:e?!o.vertical:o.vertical},previousFlip:o,rotate:this.imageTransforms.rotate,visibleArea:this.visibleArea,coordinates:this.coordinates,imageSize:this.imageSize,positionRestrictions:this.positionRestrictions,sizeRestrictions:this.sizeRestrictions,getAreaRestrictions:this.getAreaRestrictions,aspectRatio:this.getAspectRatio()}),a=r.visibleArea,h=r.coordinates;t&&(this.appliedImageTransforms.flip.horizontal=!this.appliedImageTransforms.flip.horizontal),e&&(this.appliedImageTransforms.flip.vertical=!this.appliedImageTransforms.flip.vertical),this.visibleArea=a,this.coordinates=h,this.onChange(),s&&this.debouncedDisableTransitions()}},rotate:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},i=e.transitions,n=void 0===i||i;if(!this.transitionsActive){n&&this.enableTransitions();var s=g({},this.imageSize);this.appliedImageTransforms.rotate+=t;var o=Pt({visibleArea:this.visibleArea,coordinates:this.coordinates,previousImageSize:s,imageSize:this.imageSize,angle:t,positionRestrictions:this.positionRestrictions,sizeRestrictions:this.sizeRestrictions,getAreaRestrictions:this.getAreaRestrictions,aspectRatio:this.getAspectRatio()}),r=o.visibleArea,a=o.coordinates,h=this.processAutoZoom(\"rotateImage\",r,a);r=h.visibleArea,a=h.coordinates,this.visibleArea=r,this.coordinates=a,this.onChange(),n&&this.debouncedDisableTransitions()}}},emits:[\"change\",\"error\",\"ready\"]},ve={key:0,ref:\"canvas\",style:{display:\"none\"}},be={key:1,ref:\"sourceCanvas\",style:{display:\"none\"}};fe.render=function(i,n,r,a,p,g){return t(),e(\"div\",{ref:\"cropper\",class:g.classes.cropper},[s(\"div\",{ref:\"stretcher\",class:g.classes.stretcher},null,2),s(\"div\",{class:g.classes.boundaries,style:g.boundariesStyle},[(t(),e(h(r.backgroundWrapperComponent),{class:g.classes.cropperWrapper,\"wheel-resize\":g.settings.resizeImage.wheel,\"touch-resize\":g.settings.resizeImage.touch,\"touch-move\":g.settings.moveImage.touch,\"mouse-move\":g.settings.moveImage.mouse,onMove:g.onManipulateImage,onResize:g.onManipulateImage},{default:o((function(){return[s(\"div\",{class:g.classes.background,style:g.boundariesStyle},null,6),s(\"div\",{class:g.classes.imageWrapper},[s(\"img\",{ref:\"image\",crossorigin:p.imageAttributes.crossOrigin,src:p.imageAttributes.src,class:g.classes.image,style:g.imageStyle,onMousedown:n[1]||(n[1]=d((function(){}),[\"prevent\"]))},null,46,[\"crossorigin\",\"src\"])],2),s(\"div\",{class:g.classes.foreground,style:g.boundariesStyle},null,6),c((t(),e(h(r.stencilComponent),u({ref:\"stencil\",image:g.image,coordinates:p.coordinates,\"stencil-coordinates\":g.stencilCoordinates,transitions:g.transitionsOptions},r.stencilProps,{onResize:g.onResize,onResizeEnd:g.onResizeEnd,onMove:g.onMove,onMoveEnd:g.onMoveEnd}),null,16,[\"image\",\"coordinates\",\"stencil-coordinates\",\"transitions\",\"onResize\",\"onResizeEnd\",\"onMove\",\"onMoveEnd\"])),[[l,p.imageLoaded]]),r.canvas?(t(),e(\"canvas\",ve,null,512)):m(\"\",!0),r.canvas?(t(),e(\"canvas\",be,null,512)):m(\"\",!0)]})),_:1},8,[\"class\",\"wheel-resize\",\"touch-resize\",\"touch-move\",\"mouse-move\",\"onMove\",\"onResize\"]))],6)],2)};export{re as BackgroundWrapper,_t as BoundingBox,me as CircleStencil,fe as Cropper,k as DragEvent,Qt as DraggableArea,F as DraggableElement,N as HandlerWrapper,q as LineWrapper,Y as MoveEvent,he as Preview,ne as PreviewResult,ue as RectangleStencil,X as ResizeEvent,kt as SimpleHandler,Nt as SimpleLine,ce as StencilPreview,oe as TransformableImage};\n","<script setup lang=\"ts\">\nimport { useI18n } from \"../../composables/useI18n\";\nimport { useMediaCategories } from \"../../composables/useMediaCategories\";\nimport {\n ASPECT_RATIO_VALUES,\n calculateOutputDimensions,\n canvasToFile,\n getExportSettings,\n resizeCanvas,\n type AspectRatioPreset,\n} from \"../../composables/useImageCrop\";\nimport { POPOVER_TARGET_KEY } from \"../../keys\";\nimport type { MediaItem } from \"../../types\";\nimport { computed, inject, ref, watch, type Ref } from \"vue\";\nimport { Cropper, type CropperResult } from \"vue-advanced-cropper\";\nimport \"vue-advanced-cropper/dist/style.css\";\n\nexport interface CropData {\n file: File;\n}\n\nconst props = defineProps<{\n visible: boolean;\n item: MediaItem | null;\n}>();\n\nconst emit = defineEmits<{\n (\n e: \"save\",\n id: string,\n filename: string,\n altText?: string,\n cropData?: CropData,\n ): void;\n (e: \"close\"): void;\n}>();\n\nconst { t } = useI18n();\nconst tplUiTheme = inject<Ref<\"light\" | \"dark\">>(\"tplUiTheme\");\nconst popoverTarget = inject(POPOVER_TARGET_KEY, ref<HTMLElement | null>(null));\nconst mediaT = t.mediaLibrary as Record<string, string>;\n\nconst { isImageMimeType } = useMediaCategories();\n\nconst filenameValue = ref(\"\");\nconst altTextValue = ref(\"\");\n\nconst cropperRef = ref<InstanceType<typeof Cropper> | null>(null);\nconst aspectRatio = ref<AspectRatioPreset>(\"free\");\nconst maxWidth = ref<number | undefined>(undefined);\nconst maxHeight = ref<number | undefined>(undefined);\nconst maxWidthInput = ref(\"\");\nconst maxHeightInput = ref(\"\");\nconst originalAspectRatio = ref<number | undefined>(undefined);\nconst cropCoordinates = ref<{ width: number; height: number } | null>(null);\nconst imageLoaded = ref(false);\nconst isSaving = ref(false);\nconst hasModifiedCrop = ref(false);\n\nconst isCroppableImage = computed(() => {\n if (!props.item) {\n return false;\n }\n\n const croppableMimeTypes = [\n \"image/jpeg\",\n \"image/png\",\n \"image/webp\",\n \"image/gif\",\n ];\n\n return croppableMimeTypes.includes(props.item.mime_type);\n});\n\nconst aspectRatioValue = computed(() => {\n if (aspectRatio.value === \"original\") {\n return originalAspectRatio.value;\n }\n\n return ASPECT_RATIO_VALUES[aspectRatio.value];\n});\n\nconst outputDimensions = computed(() => {\n if (!cropCoordinates.value) {\n return null;\n }\n\n return calculateOutputDimensions(\n cropCoordinates.value.width,\n cropCoordinates.value.height,\n maxWidth.value,\n maxHeight.value,\n );\n});\n\nwatch(\n () => props.visible,\n (visible) => {\n if (visible && props.item) {\n filenameValue.value = props.item.filename;\n altTextValue.value = props.item.alt_text || \"\";\n aspectRatio.value = \"free\";\n maxWidth.value = undefined;\n maxHeight.value = undefined;\n maxWidthInput.value = \"\";\n maxHeightInput.value = \"\";\n originalAspectRatio.value = undefined;\n cropCoordinates.value = null;\n imageLoaded.value = false;\n hasModifiedCrop.value = false;\n\n if (props.item.width && props.item.height) {\n originalAspectRatio.value = props.item.width / props.item.height;\n }\n }\n },\n);\n\nfunction handleCropChange(result: CropperResult): void {\n if (result.coordinates) {\n cropCoordinates.value = {\n width: Math.round(result.coordinates.width),\n height: Math.round(result.coordinates.height),\n };\n hasModifiedCrop.value = true;\n }\n}\n\nfunction handleImageReady(): void {\n imageLoaded.value = true;\n\n if (!originalAspectRatio.value && props.item?.width && props.item?.height) {\n originalAspectRatio.value = props.item.width / props.item.height;\n }\n}\n\nfunction handleMaxWidthInput(event: Event): void {\n const value = (event.target as HTMLInputElement).value;\n maxWidthInput.value = value;\n maxWidth.value = value ? parseInt(value, 10) || undefined : undefined;\n}\n\nfunction handleMaxHeightInput(event: Event): void {\n const value = (event.target as HTMLInputElement).value;\n maxHeightInput.value = value;\n maxHeight.value = value ? parseInt(value, 10) || undefined : undefined;\n}\n\nasync function handleSave(): Promise<void> {\n const trimmedFilename = filenameValue.value.trim();\n if (!trimmedFilename || !props.item || isSaving.value) {\n return;\n }\n\n const isImage = isImageMimeType(props.item.mime_type);\n let cropData: CropData | undefined;\n\n if (isCroppableImage.value && cropperRef.value && hasModifiedCrop.value) {\n isSaving.value = true;\n try {\n const { canvas } = cropperRef.value.getResult();\n if (canvas) {\n const resizedCanvas = resizeCanvas(\n canvas,\n maxWidth.value,\n maxHeight.value,\n );\n const settings = getExportSettings(props.item.mime_type);\n const file = await canvasToFile(\n resizedCanvas,\n props.item.filename,\n settings,\n );\n cropData = { file };\n }\n } catch {\n isSaving.value = false;\n return;\n }\n isSaving.value = false;\n }\n\n emit(\n \"save\",\n props.item.id,\n trimmedFilename,\n isImage ? altTextValue.value : undefined,\n cropData,\n );\n emit(\"close\");\n}\n\nfunction handleKeydown(event: KeyboardEvent): void {\n if (event.key === \"Enter\" && !isSaving.value) {\n event.preventDefault();\n handleSave();\n }\n if (event.key === \"Escape\") {\n emit(\"close\");\n }\n}\n</script>\n\n<template>\n <Teleport :to=\"popoverTarget || 'body'\">\n <Transition\n enter-active-class=\"tpl:transition tpl:ease-out tpl:duration-150\"\n enter-from-class=\"tpl:opacity-0\"\n enter-to-class=\"tpl:opacity-100\"\n leave-active-class=\"tpl:transition tpl:ease-in tpl:duration-100\"\n leave-from-class=\"tpl:opacity-100\"\n leave-to-class=\"tpl:opacity-0\"\n >\n <div\n v-if=\"visible && item\"\n :data-tpl-theme=\"tplUiTheme\"\n class=\"tpl tpl:fixed tpl:inset-0 tpl:z-[10000] tpl:flex tpl:items-center tpl:justify-center\"\n style=\"background-color: var(--tpl-overlay)\"\n @click.self=\"emit('close')\"\n @keydown=\"handleKeydown\"\n >\n <div\n class=\"tpl:mx-4 tpl:flex tpl:max-h-[90vh] tpl:w-full tpl:flex-col tpl:overflow-hidden tpl:rounded-lg tpl:shadow-xl\"\n :class=\"isCroppableImage ? 'tpl:max-w-2xl' : 'tpl:max-w-sm'\"\n style=\"background-color: var(--tpl-bg-elevated)\"\n >\n <!-- Header -->\n <div class=\"tpl:shrink-0 tpl:p-5 tpl:pb-4\">\n <h3\n class=\"tpl:text-sm tpl:font-semibold\"\n style=\"color: var(--tpl-text)\"\n >\n {{ t.mediaLibrary.editFile }}\n </h3>\n </div>\n\n <!-- Scrollable content -->\n <div class=\"tpl:min-h-0 tpl:flex-1 tpl:overflow-y-auto tpl:px-5\">\n <!-- Image Cropper (for images only) -->\n <div v-if=\"isCroppableImage\" class=\"tpl:mb-4\">\n <!-- Cropper -->\n <div\n class=\"tpl:relative tpl:mb-3 tpl:overflow-hidden tpl:rounded-md tpl:border\"\n style=\"\n border-color: var(--tpl-border);\n height: 300px;\n background-color: var(--tpl-bg);\n \"\n >\n <Cropper\n ref=\"cropperRef\"\n :src=\"item.url\"\n :stencil-props=\"{\n aspectRatio: aspectRatioValue,\n }\"\n class=\"tpl:h-full tpl:w-full\"\n background-class=\"tpl-cropper-background\"\n @change=\"handleCropChange\"\n @ready=\"handleImageReady\"\n />\n </div>\n\n <!-- Crop controls -->\n <div class=\"tpl:space-y-3\">\n <!-- Aspect ratio -->\n <div>\n <label\n class=\"tpl:mb-1.5 tpl:block tpl:text-xs tpl:font-medium\"\n style=\"color: var(--tpl-text-muted)\"\n >\n {{ t.mediaLibrary.cropAspectRatio }}\n </label>\n <div class=\"tpl:flex tpl:flex-wrap tpl:gap-1.5\">\n <button\n v-for=\"preset in [\n 'free',\n 'square',\n 'landscape43',\n 'landscape169',\n 'original',\n ] as const\"\n :key=\"preset\"\n type=\"button\"\n class=\"tpl:cursor-pointer tpl:rounded-md tpl:border tpl:px-2.5 tpl:py-1 tpl:text-xs tpl:font-medium tpl:transition-all tpl:duration-150\"\n :style=\"{\n borderColor:\n aspectRatio === preset\n ? 'var(--tpl-primary)'\n : 'var(--tpl-border)',\n backgroundColor:\n aspectRatio === preset\n ? 'var(--tpl-primary-light)'\n : 'var(--tpl-bg)',\n color:\n aspectRatio === preset\n ? 'var(--tpl-primary)'\n : 'var(--tpl-text)',\n }\"\n @click=\"aspectRatio = preset\"\n >\n {{\n mediaT[\n `crop${preset.charAt(0).toUpperCase()}${preset.slice(1)}`\n ]\n }}\n </button>\n </div>\n </div>\n\n <!-- Max dimensions -->\n <div class=\"tpl:flex tpl:gap-3\">\n <div class=\"tpl:flex-1\">\n <label\n class=\"tpl:mb-1 tpl:block tpl:text-xs tpl:font-medium\"\n style=\"color: var(--tpl-text-muted)\"\n >\n {{ t.mediaLibrary.cropMaxWidth }}\n <span\n class=\"tpl:font-normal\"\n style=\"color: var(--tpl-text-dim)\"\n >\n {{ t.mediaLibrary.cropOptional }}\n </span>\n </label>\n <div class=\"tpl:relative\">\n <input\n :value=\"maxWidthInput\"\n type=\"number\"\n min=\"1\"\n class=\"tpl:w-full tpl:rounded-md tpl:border tpl:py-1.5 tpl:pr-8 tpl:pl-3 tpl:text-xs tpl:outline-none\"\n style=\"\n border-color: var(--tpl-border);\n background-color: var(--tpl-bg);\n color: var(--tpl-text);\n \"\n :placeholder=\"cropCoordinates?.width?.toString() || ''\"\n @input=\"handleMaxWidthInput\"\n />\n <span\n class=\"tpl:absolute tpl:top-1/2 tpl:right-2.5 tpl:-translate-y-1/2 tpl:text-xs\"\n style=\"color: var(--tpl-text-dim)\"\n >\n {{ t.mediaLibrary.cropPixels }}\n </span>\n </div>\n </div>\n <div class=\"tpl:flex-1\">\n <label\n class=\"tpl:mb-1 tpl:block tpl:text-xs tpl:font-medium\"\n style=\"color: var(--tpl-text-muted)\"\n >\n {{ t.mediaLibrary.cropMaxHeight }}\n <span\n class=\"tpl:font-normal\"\n style=\"color: var(--tpl-text-dim)\"\n >\n {{ t.mediaLibrary.cropOptional }}\n </span>\n </label>\n <div class=\"tpl:relative\">\n <input\n :value=\"maxHeightInput\"\n type=\"number\"\n min=\"1\"\n class=\"tpl:w-full tpl:rounded-md tpl:border tpl:py-1.5 tpl:pr-8 tpl:pl-3 tpl:text-xs tpl:outline-none\"\n style=\"\n border-color: var(--tpl-border);\n background-color: var(--tpl-bg);\n color: var(--tpl-text);\n \"\n :placeholder=\"cropCoordinates?.height?.toString() || ''\"\n @input=\"handleMaxHeightInput\"\n />\n <span\n class=\"tpl:absolute tpl:top-1/2 tpl:right-2.5 tpl:-translate-y-1/2 tpl:text-xs\"\n style=\"color: var(--tpl-text-dim)\"\n >\n {{ t.mediaLibrary.cropPixels }}\n </span>\n </div>\n </div>\n </div>\n\n <!-- Output dimensions -->\n <div\n v-if=\"outputDimensions\"\n class=\"tpl:flex tpl:items-center tpl:gap-1 tpl:text-xs\"\n style=\"color: var(--tpl-text-muted)\"\n >\n <span> {{ t.mediaLibrary.cropOutputSize }}: </span>\n <span class=\"tpl:font-medium\" style=\"color: var(--tpl-text)\">\n {{ outputDimensions.width }} x\n {{ outputDimensions.height }}\n {{ t.mediaLibrary.cropPixels }}\n </span>\n </div>\n </div>\n </div>\n\n <!-- Filename -->\n <div class=\"tpl:mb-3\">\n <label\n class=\"tpl:mb-1 tpl:block tpl:text-xs tpl:font-medium\"\n style=\"color: var(--tpl-text-muted)\"\n >\n {{ t.mediaLibrary.fileName }}\n </label>\n <input\n v-model=\"filenameValue\"\n type=\"text\"\n class=\"tpl:w-full tpl:rounded-md tpl:border tpl:px-3 tpl:py-1.5 tpl:text-xs tpl:outline-none\"\n style=\"\n border-color: var(--tpl-border);\n background-color: var(--tpl-bg);\n color: var(--tpl-text);\n \"\n :autofocus=\"!isCroppableImage\"\n />\n </div>\n\n <!-- Alt Text (images only) -->\n <div v-if=\"isImageMimeType(item.mime_type)\" class=\"tpl:mb-4\">\n <label\n class=\"tpl:mb-1 tpl:block tpl:text-xs tpl:font-medium\"\n style=\"color: var(--tpl-text-muted)\"\n >\n {{ t.mediaLibrary.altText }}\n </label>\n <input\n v-model=\"altTextValue\"\n type=\"text\"\n class=\"tpl:w-full tpl:rounded-md tpl:border tpl:px-3 tpl:py-1.5 tpl:text-xs tpl:outline-none\"\n style=\"\n border-color: var(--tpl-border);\n background-color: var(--tpl-bg);\n color: var(--tpl-text);\n \"\n :placeholder=\"t.mediaLibrary.altTextPlaceholder\"\n />\n </div>\n </div>\n\n <!-- Actions -->\n <div\n class=\"tpl:flex tpl:shrink-0 tpl:justify-end tpl:gap-2 tpl:p-5 tpl:pt-4\"\n >\n <button\n class=\"tpl:cursor-pointer tpl:rounded-md tpl:border tpl:px-3 tpl:py-1.5 tpl:text-xs tpl:font-medium tpl:transition-all tpl:duration-150\"\n style=\"\n border-color: var(--tpl-border);\n color: var(--tpl-text);\n background-color: var(--tpl-bg);\n \"\n @click=\"emit('close')\"\n >\n {{ t.mediaLibrary.cancel }}\n </button>\n <button\n class=\"tpl:cursor-pointer tpl:rounded-md tpl:px-3 tpl:py-1.5 tpl:text-xs tpl:font-medium tpl:text-white tpl:transition-all tpl:duration-150 tpl:disabled:cursor-not-allowed tpl:disabled:opacity-50\"\n style=\"\n background: linear-gradient(\n 135deg,\n var(--tpl-primary),\n var(--tpl-primary-hover)\n );\n \"\n :disabled=\"isSaving\"\n @click=\"handleSave\"\n >\n {{\n isSaving ? t.mediaLibrary.saving : t.mediaLibrary.saveChanges\n }}\n </button>\n </div>\n </div>\n </div>\n </Transition>\n </Teleport>\n</template>\n\n<style scoped>\n:deep(.tpl-cropper-background) {\n background-color: var(--tpl-bg) !important;\n}\n\n:deep(.vue-advanced-cropper) {\n background-color: transparent !important;\n}\n\n:deep(.vue-advanced-cropper__background) {\n background-color: var(--tpl-bg) !important;\n}\n\n:deep(.vue-advanced-cropper__foreground) {\n background-color: var(--tpl-overlay) !important;\n}\n</style>\n","<script setup lang=\"ts\">\nimport { useI18n } from \"../../composables/useI18n\";\nimport { useMediaCategories } from \"../../composables/useMediaCategories\";\nimport {\n ASPECT_RATIO_VALUES,\n calculateOutputDimensions,\n canvasToFile,\n getExportSettings,\n resizeCanvas,\n type AspectRatioPreset,\n} from \"../../composables/useImageCrop\";\nimport { POPOVER_TARGET_KEY } from \"../../keys\";\nimport type { MediaItem } from \"../../types\";\nimport { computed, inject, ref, watch, type Ref } from \"vue\";\nimport { Cropper, type CropperResult } from \"vue-advanced-cropper\";\nimport \"vue-advanced-cropper/dist/style.css\";\n\nexport interface CropData {\n file: File;\n}\n\nconst props = defineProps<{\n visible: boolean;\n item: MediaItem | null;\n}>();\n\nconst emit = defineEmits<{\n (\n e: \"save\",\n id: string,\n filename: string,\n altText?: string,\n cropData?: CropData,\n ): void;\n (e: \"close\"): void;\n}>();\n\nconst { t } = useI18n();\nconst tplUiTheme = inject<Ref<\"light\" | \"dark\">>(\"tplUiTheme\");\nconst popoverTarget = inject(POPOVER_TARGET_KEY, ref<HTMLElement | null>(null));\nconst mediaT = t.mediaLibrary as Record<string, string>;\n\nconst { isImageMimeType } = useMediaCategories();\n\nconst filenameValue = ref(\"\");\nconst altTextValue = ref(\"\");\n\nconst cropperRef = ref<InstanceType<typeof Cropper> | null>(null);\nconst aspectRatio = ref<AspectRatioPreset>(\"free\");\nconst maxWidth = ref<number | undefined>(undefined);\nconst maxHeight = ref<number | undefined>(undefined);\nconst maxWidthInput = ref(\"\");\nconst maxHeightInput = ref(\"\");\nconst originalAspectRatio = ref<number | undefined>(undefined);\nconst cropCoordinates = ref<{ width: number; height: number } | null>(null);\nconst imageLoaded = ref(false);\nconst isSaving = ref(false);\nconst hasModifiedCrop = ref(false);\n\nconst isCroppableImage = computed(() => {\n if (!props.item) {\n return false;\n }\n\n const croppableMimeTypes = [\n \"image/jpeg\",\n \"image/png\",\n \"image/webp\",\n \"image/gif\",\n ];\n\n return croppableMimeTypes.includes(props.item.mime_type);\n});\n\nconst aspectRatioValue = computed(() => {\n if (aspectRatio.value === \"original\") {\n return originalAspectRatio.value;\n }\n\n return ASPECT_RATIO_VALUES[aspectRatio.value];\n});\n\nconst outputDimensions = computed(() => {\n if (!cropCoordinates.value) {\n return null;\n }\n\n return calculateOutputDimensions(\n cropCoordinates.value.width,\n cropCoordinates.value.height,\n maxWidth.value,\n maxHeight.value,\n );\n});\n\nwatch(\n () => props.visible,\n (visible) => {\n if (visible && props.item) {\n filenameValue.value = props.item.filename;\n altTextValue.value = props.item.alt_text || \"\";\n aspectRatio.value = \"free\";\n maxWidth.value = undefined;\n maxHeight.value = undefined;\n maxWidthInput.value = \"\";\n maxHeightInput.value = \"\";\n originalAspectRatio.value = undefined;\n cropCoordinates.value = null;\n imageLoaded.value = false;\n hasModifiedCrop.value = false;\n\n if (props.item.width && props.item.height) {\n originalAspectRatio.value = props.item.width / props.item.height;\n }\n }\n },\n);\n\nfunction handleCropChange(result: CropperResult): void {\n if (result.coordinates) {\n cropCoordinates.value = {\n width: Math.round(result.coordinates.width),\n height: Math.round(result.coordinates.height),\n };\n hasModifiedCrop.value = true;\n }\n}\n\nfunction handleImageReady(): void {\n imageLoaded.value = true;\n\n if (!originalAspectRatio.value && props.item?.width && props.item?.height) {\n originalAspectRatio.value = props.item.width / props.item.height;\n }\n}\n\nfunction handleMaxWidthInput(event: Event): void {\n const value = (event.target as HTMLInputElement).value;\n maxWidthInput.value = value;\n maxWidth.value = value ? parseInt(value, 10) || undefined : undefined;\n}\n\nfunction handleMaxHeightInput(event: Event): void {\n const value = (event.target as HTMLInputElement).value;\n maxHeightInput.value = value;\n maxHeight.value = value ? parseInt(value, 10) || undefined : undefined;\n}\n\nasync function handleSave(): Promise<void> {\n const trimmedFilename = filenameValue.value.trim();\n if (!trimmedFilename || !props.item || isSaving.value) {\n return;\n }\n\n const isImage = isImageMimeType(props.item.mime_type);\n let cropData: CropData | undefined;\n\n if (isCroppableImage.value && cropperRef.value && hasModifiedCrop.value) {\n isSaving.value = true;\n try {\n const { canvas } = cropperRef.value.getResult();\n if (canvas) {\n const resizedCanvas = resizeCanvas(\n canvas,\n maxWidth.value,\n maxHeight.value,\n );\n const settings = getExportSettings(props.item.mime_type);\n const file = await canvasToFile(\n resizedCanvas,\n props.item.filename,\n settings,\n );\n cropData = { file };\n }\n } catch {\n isSaving.value = false;\n return;\n }\n isSaving.value = false;\n }\n\n emit(\n \"save\",\n props.item.id,\n trimmedFilename,\n isImage ? altTextValue.value : undefined,\n cropData,\n );\n emit(\"close\");\n}\n\nfunction handleKeydown(event: KeyboardEvent): void {\n if (event.key === \"Enter\" && !isSaving.value) {\n event.preventDefault();\n handleSave();\n }\n if (event.key === \"Escape\") {\n emit(\"close\");\n }\n}\n</script>\n\n<template>\n <Teleport :to=\"popoverTarget || 'body'\">\n <Transition\n enter-active-class=\"tpl:transition tpl:ease-out tpl:duration-150\"\n enter-from-class=\"tpl:opacity-0\"\n enter-to-class=\"tpl:opacity-100\"\n leave-active-class=\"tpl:transition tpl:ease-in tpl:duration-100\"\n leave-from-class=\"tpl:opacity-100\"\n leave-to-class=\"tpl:opacity-0\"\n >\n <div\n v-if=\"visible && item\"\n :data-tpl-theme=\"tplUiTheme\"\n class=\"tpl tpl:fixed tpl:inset-0 tpl:z-[10000] tpl:flex tpl:items-center tpl:justify-center\"\n style=\"background-color: var(--tpl-overlay)\"\n @click.self=\"emit('close')\"\n @keydown=\"handleKeydown\"\n >\n <div\n class=\"tpl:mx-4 tpl:flex tpl:max-h-[90vh] tpl:w-full tpl:flex-col tpl:overflow-hidden tpl:rounded-lg tpl:shadow-xl\"\n :class=\"isCroppableImage ? 'tpl:max-w-2xl' : 'tpl:max-w-sm'\"\n style=\"background-color: var(--tpl-bg-elevated)\"\n >\n <!-- Header -->\n <div class=\"tpl:shrink-0 tpl:p-5 tpl:pb-4\">\n <h3\n class=\"tpl:text-sm tpl:font-semibold\"\n style=\"color: var(--tpl-text)\"\n >\n {{ t.mediaLibrary.editFile }}\n </h3>\n </div>\n\n <!-- Scrollable content -->\n <div class=\"tpl:min-h-0 tpl:flex-1 tpl:overflow-y-auto tpl:px-5\">\n <!-- Image Cropper (for images only) -->\n <div v-if=\"isCroppableImage\" class=\"tpl:mb-4\">\n <!-- Cropper -->\n <div\n class=\"tpl:relative tpl:mb-3 tpl:overflow-hidden tpl:rounded-md tpl:border\"\n style=\"\n border-color: var(--tpl-border);\n height: 300px;\n background-color: var(--tpl-bg);\n \"\n >\n <Cropper\n ref=\"cropperRef\"\n :src=\"item.url\"\n :stencil-props=\"{\n aspectRatio: aspectRatioValue,\n }\"\n class=\"tpl:h-full tpl:w-full\"\n background-class=\"tpl-cropper-background\"\n @change=\"handleCropChange\"\n @ready=\"handleImageReady\"\n />\n </div>\n\n <!-- Crop controls -->\n <div class=\"tpl:space-y-3\">\n <!-- Aspect ratio -->\n <div>\n <label\n class=\"tpl:mb-1.5 tpl:block tpl:text-xs tpl:font-medium\"\n style=\"color: var(--tpl-text-muted)\"\n >\n {{ t.mediaLibrary.cropAspectRatio }}\n </label>\n <div class=\"tpl:flex tpl:flex-wrap tpl:gap-1.5\">\n <button\n v-for=\"preset in [\n 'free',\n 'square',\n 'landscape43',\n 'landscape169',\n 'original',\n ] as const\"\n :key=\"preset\"\n type=\"button\"\n class=\"tpl:cursor-pointer tpl:rounded-md tpl:border tpl:px-2.5 tpl:py-1 tpl:text-xs tpl:font-medium tpl:transition-all tpl:duration-150\"\n :style=\"{\n borderColor:\n aspectRatio === preset\n ? 'var(--tpl-primary)'\n : 'var(--tpl-border)',\n backgroundColor:\n aspectRatio === preset\n ? 'var(--tpl-primary-light)'\n : 'var(--tpl-bg)',\n color:\n aspectRatio === preset\n ? 'var(--tpl-primary)'\n : 'var(--tpl-text)',\n }\"\n @click=\"aspectRatio = preset\"\n >\n {{\n mediaT[\n `crop${preset.charAt(0).toUpperCase()}${preset.slice(1)}`\n ]\n }}\n </button>\n </div>\n </div>\n\n <!-- Max dimensions -->\n <div class=\"tpl:flex tpl:gap-3\">\n <div class=\"tpl:flex-1\">\n <label\n class=\"tpl:mb-1 tpl:block tpl:text-xs tpl:font-medium\"\n style=\"color: var(--tpl-text-muted)\"\n >\n {{ t.mediaLibrary.cropMaxWidth }}\n <span\n class=\"tpl:font-normal\"\n style=\"color: var(--tpl-text-dim)\"\n >\n {{ t.mediaLibrary.cropOptional }}\n </span>\n </label>\n <div class=\"tpl:relative\">\n <input\n :value=\"maxWidthInput\"\n type=\"number\"\n min=\"1\"\n class=\"tpl:w-full tpl:rounded-md tpl:border tpl:py-1.5 tpl:pr-8 tpl:pl-3 tpl:text-xs tpl:outline-none\"\n style=\"\n border-color: var(--tpl-border);\n background-color: var(--tpl-bg);\n color: var(--tpl-text);\n \"\n :placeholder=\"cropCoordinates?.width?.toString() || ''\"\n @input=\"handleMaxWidthInput\"\n />\n <span\n class=\"tpl:absolute tpl:top-1/2 tpl:right-2.5 tpl:-translate-y-1/2 tpl:text-xs\"\n style=\"color: var(--tpl-text-dim)\"\n >\n {{ t.mediaLibrary.cropPixels }}\n </span>\n </div>\n </div>\n <div class=\"tpl:flex-1\">\n <label\n class=\"tpl:mb-1 tpl:block tpl:text-xs tpl:font-medium\"\n style=\"color: var(--tpl-text-muted)\"\n >\n {{ t.mediaLibrary.cropMaxHeight }}\n <span\n class=\"tpl:font-normal\"\n style=\"color: var(--tpl-text-dim)\"\n >\n {{ t.mediaLibrary.cropOptional }}\n </span>\n </label>\n <div class=\"tpl:relative\">\n <input\n :value=\"maxHeightInput\"\n type=\"number\"\n min=\"1\"\n class=\"tpl:w-full tpl:rounded-md tpl:border tpl:py-1.5 tpl:pr-8 tpl:pl-3 tpl:text-xs tpl:outline-none\"\n style=\"\n border-color: var(--tpl-border);\n background-color: var(--tpl-bg);\n color: var(--tpl-text);\n \"\n :placeholder=\"cropCoordinates?.height?.toString() || ''\"\n @input=\"handleMaxHeightInput\"\n />\n <span\n class=\"tpl:absolute tpl:top-1/2 tpl:right-2.5 tpl:-translate-y-1/2 tpl:text-xs\"\n style=\"color: var(--tpl-text-dim)\"\n >\n {{ t.mediaLibrary.cropPixels }}\n </span>\n </div>\n </div>\n </div>\n\n <!-- Output dimensions -->\n <div\n v-if=\"outputDimensions\"\n class=\"tpl:flex tpl:items-center tpl:gap-1 tpl:text-xs\"\n style=\"color: var(--tpl-text-muted)\"\n >\n <span> {{ t.mediaLibrary.cropOutputSize }}: </span>\n <span class=\"tpl:font-medium\" style=\"color: var(--tpl-text)\">\n {{ outputDimensions.width }} x\n {{ outputDimensions.height }}\n {{ t.mediaLibrary.cropPixels }}\n </span>\n </div>\n </div>\n </div>\n\n <!-- Filename -->\n <div class=\"tpl:mb-3\">\n <label\n class=\"tpl:mb-1 tpl:block tpl:text-xs tpl:font-medium\"\n style=\"color: var(--tpl-text-muted)\"\n >\n {{ t.mediaLibrary.fileName }}\n </label>\n <input\n v-model=\"filenameValue\"\n type=\"text\"\n class=\"tpl:w-full tpl:rounded-md tpl:border tpl:px-3 tpl:py-1.5 tpl:text-xs tpl:outline-none\"\n style=\"\n border-color: var(--tpl-border);\n background-color: var(--tpl-bg);\n color: var(--tpl-text);\n \"\n :autofocus=\"!isCroppableImage\"\n />\n </div>\n\n <!-- Alt Text (images only) -->\n <div v-if=\"isImageMimeType(item.mime_type)\" class=\"tpl:mb-4\">\n <label\n class=\"tpl:mb-1 tpl:block tpl:text-xs tpl:font-medium\"\n style=\"color: var(--tpl-text-muted)\"\n >\n {{ t.mediaLibrary.altText }}\n </label>\n <input\n v-model=\"altTextValue\"\n type=\"text\"\n class=\"tpl:w-full tpl:rounded-md tpl:border tpl:px-3 tpl:py-1.5 tpl:text-xs tpl:outline-none\"\n style=\"\n border-color: var(--tpl-border);\n background-color: var(--tpl-bg);\n color: var(--tpl-text);\n \"\n :placeholder=\"t.mediaLibrary.altTextPlaceholder\"\n />\n </div>\n </div>\n\n <!-- Actions -->\n <div\n class=\"tpl:flex tpl:shrink-0 tpl:justify-end tpl:gap-2 tpl:p-5 tpl:pt-4\"\n >\n <button\n class=\"tpl:cursor-pointer tpl:rounded-md tpl:border tpl:px-3 tpl:py-1.5 tpl:text-xs tpl:font-medium tpl:transition-all tpl:duration-150\"\n style=\"\n border-color: var(--tpl-border);\n color: var(--tpl-text);\n background-color: var(--tpl-bg);\n \"\n @click=\"emit('close')\"\n >\n {{ t.mediaLibrary.cancel }}\n </button>\n <button\n class=\"tpl:cursor-pointer tpl:rounded-md tpl:px-3 tpl:py-1.5 tpl:text-xs tpl:font-medium tpl:text-white tpl:transition-all tpl:duration-150 tpl:disabled:cursor-not-allowed tpl:disabled:opacity-50\"\n style=\"\n background: linear-gradient(\n 135deg,\n var(--tpl-primary),\n var(--tpl-primary-hover)\n );\n \"\n :disabled=\"isSaving\"\n @click=\"handleSave\"\n >\n {{\n isSaving ? t.mediaLibrary.saving : t.mediaLibrary.saveChanges\n }}\n </button>\n </div>\n </div>\n </div>\n </Transition>\n </Teleport>\n</template>\n\n<style scoped>\n:deep(.tpl-cropper-background) {\n background-color: var(--tpl-bg) !important;\n}\n\n:deep(.vue-advanced-cropper) {\n background-color: transparent !important;\n}\n\n:deep(.vue-advanced-cropper__background) {\n background-color: var(--tpl-bg) !important;\n}\n\n:deep(.vue-advanced-cropper__foreground) {\n background-color: var(--tpl-overlay) !important;\n}\n</style>\n","<script setup lang=\"ts\">\nimport { useI18n } from \"../../composables/useI18n\";\nimport type { MediaFolder } from \"../../types\";\nimport { ChevronRight, Folder, Pencil, Plus, Trash2 } from \"@lucide/vue\";\nimport { computed, ref } from \"vue\";\n\nconst props = defineProps<{\n folder: MediaFolder;\n currentFolderId: string | null;\n depth: number;\n}>();\n\nconst emit = defineEmits<{\n (e: \"navigate\", folderId: string | null): void;\n (e: \"createFolder\", name: string, parentId?: string | null): void;\n (e: \"renameFolder\", folderId: string, name: string): void;\n (e: \"deleteFolder\", folderId: string): void;\n}>();\n\nconst { t } = useI18n();\n\nconst isExpanded = ref(false);\nconst isRenaming = ref(false);\nconst renameValue = ref(\"\");\nconst isCreatingSubfolder = ref(false);\nconst subfolderName = ref(\"\");\n\nconst MAX_DEPTH = 5;\n\nconst hasChildren = computed(() => (props.folder.children?.length ?? 0) > 0);\n\nconst canCreateSubfolder = computed(() => props.depth < MAX_DEPTH - 1);\n\nconst isActive = computed(() => props.currentFolderId === props.folder.id);\n\nconst isDescendantActive = computed(() => {\n if (!props.currentFolderId || !props.folder.children) return false;\n return containsFolder(props.folder.children, props.currentFolderId);\n});\n\nconst shouldExpand = computed(\n () => isExpanded.value || isDescendantActive.value,\n);\n\nfunction containsFolder(folders: MediaFolder[], id: string): boolean {\n for (const folder of folders) {\n if (folder.id === id) return true;\n if (folder.children && containsFolder(folder.children, id)) return true;\n }\n return false;\n}\n\nfunction toggleExpand(): void {\n isExpanded.value = !isExpanded.value;\n}\n\nfunction startRename(): void {\n isRenaming.value = true;\n renameValue.value = props.folder.name;\n}\n\nfunction confirmRename(): void {\n const trimmed = renameValue.value.trim();\n if (trimmed && trimmed !== props.folder.name) {\n emit(\"renameFolder\", props.folder.id, trimmed);\n }\n isRenaming.value = false;\n renameValue.value = \"\";\n}\n\nfunction cancelRename(): void {\n isRenaming.value = false;\n renameValue.value = \"\";\n}\n\nfunction startCreateSubfolder(): void {\n isCreatingSubfolder.value = true;\n subfolderName.value = \"\";\n isExpanded.value = true;\n}\n\nfunction confirmCreateSubfolder(): void {\n if (subfolderName.value.trim()) {\n emit(\"createFolder\", subfolderName.value.trim(), props.folder.id);\n }\n isCreatingSubfolder.value = false;\n subfolderName.value = \"\";\n}\n\nfunction cancelCreateSubfolder(): void {\n isCreatingSubfolder.value = false;\n subfolderName.value = \"\";\n}\n</script>\n\n<template>\n <div>\n <!-- Folder row -->\n <div\n class=\"tpl:group tpl:flex tpl:w-full tpl:items-center tpl:gap-1 tpl:py-1.5 tpl:pr-2 tpl:text-left tpl:text-xs tpl:transition-all tpl:duration-150\"\n :style=\"{\n paddingLeft: `${depth * 16 + 8}px`,\n backgroundColor: isActive ? 'var(--tpl-bg-active)' : 'transparent',\n color: isActive ? 'var(--tpl-primary)' : 'var(--tpl-text)',\n }\"\n >\n <!-- Expand/collapse chevron -->\n <button\n v-if=\"hasChildren || isCreatingSubfolder\"\n class=\"tpl:flex tpl:size-4 tpl:shrink-0 tpl:items-center tpl:justify-center tpl:rounded tpl:transition-colors\"\n @click.stop=\"toggleExpand\"\n >\n <ChevronRight\n class=\"tpl:transition-transform tpl:duration-150\"\n :class=\"{ 'tpl:rotate-90': shouldExpand }\"\n :size=\"10\"\n :stroke-width=\"2\"\n />\n </button>\n <span v-else class=\"tpl:size-4 tpl:shrink-0\" />\n\n <!-- Folder icon + name (clickable) -->\n <button\n class=\"tpl:flex tpl:min-w-0 tpl:flex-1 tpl:items-center tpl:gap-1.5\"\n @click=\"emit('navigate', folder.id)\"\n >\n <Folder class=\"tpl:shrink-0\" :size=\"14\" :stroke-width=\"1.5\" />\n <template v-if=\"!isRenaming\">\n <span class=\"tpl:truncate\">{{ folder.name }}</span>\n </template>\n </button>\n\n <!-- Inline rename input -->\n <input\n v-if=\"isRenaming\"\n v-model=\"renameValue\"\n type=\"text\"\n class=\"tpl:min-w-0 tpl:flex-1 tpl:rounded tpl:border tpl:px-1.5 tpl:py-0.5 tpl:text-xs tpl:outline-none\"\n style=\"\n border-color: var(--tpl-primary);\n background-color: var(--tpl-bg);\n color: var(--tpl-text);\n \"\n autofocus\n @keydown.enter=\"confirmRename\"\n @keydown.escape=\"cancelRename\"\n @blur=\"confirmRename\"\n @click.stop\n />\n\n <!-- Hover actions -->\n <span\n v-if=\"!isRenaming\"\n class=\"tpl:flex tpl:shrink-0 tpl:items-center tpl:gap-0.5 tpl:opacity-0 tpl:transition-opacity tpl:group-hover:opacity-100\"\n >\n <!-- Add subfolder -->\n <button\n v-if=\"canCreateSubfolder\"\n class=\"tpl:flex tpl:size-6 tpl:items-center tpl:justify-center tpl:rounded tpl:transition-colors\"\n :title=\"t.mediaLibrary.addSubfolder\"\n @click.stop=\"startCreateSubfolder\"\n >\n <Plus :size=\"12\" :stroke-width=\"2\" />\n </button>\n <!-- Rename -->\n <button\n class=\"tpl:flex tpl:size-6 tpl:items-center tpl:justify-center tpl:rounded tpl:transition-colors\"\n :title=\"t.mediaLibrary.renameFolder\"\n @click.stop=\"startRename\"\n >\n <Pencil :size=\"12\" :stroke-width=\"2\" />\n </button>\n <!-- Delete -->\n <button\n class=\"tpl:flex tpl:size-6 tpl:items-center tpl:justify-center tpl:rounded tpl:transition-colors\"\n @click.stop=\"emit('deleteFolder', folder.id)\"\n >\n <Trash2\n :size=\"12\"\n :stroke-width=\"2\"\n style=\"color: var(--tpl-danger)\"\n />\n </button>\n </span>\n </div>\n\n <!-- Children (expanded) -->\n <div v-if=\"shouldExpand\">\n <MediaFolderTreeNode\n v-for=\"child in folder.children\"\n :key=\"child.id\"\n :folder=\"child\"\n :current-folder-id=\"currentFolderId\"\n :depth=\"depth + 1\"\n @navigate=\"emit('navigate', $event)\"\n @create-folder=\"\n (name, parentId) => emit('createFolder', name, parentId)\n \"\n @rename-folder=\"(id, name) => emit('renameFolder', id, name)\"\n @delete-folder=\"emit('deleteFolder', $event)\"\n />\n\n <!-- Subfolder creation input -->\n <div\n v-if=\"isCreatingSubfolder\"\n :style=\"{ paddingLeft: `${(depth + 1) * 16 + 8}px` }\"\n class=\"tpl:py-1.5 tpl:pr-2\"\n >\n <input\n v-model=\"subfolderName\"\n type=\"text\"\n class=\"tpl:w-full tpl:rounded tpl:border tpl:px-2 tpl:py-1 tpl:text-xs tpl:outline-none\"\n style=\"\n border-color: var(--tpl-primary);\n background-color: var(--tpl-bg);\n color: var(--tpl-text);\n \"\n :placeholder=\"t.mediaLibrary.subfolderName\"\n autofocus\n @keydown.enter=\"confirmCreateSubfolder\"\n @keydown.escape=\"cancelCreateSubfolder\"\n @blur=\"confirmCreateSubfolder\"\n />\n </div>\n </div>\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport { useI18n } from \"../../composables/useI18n\";\nimport type { MediaFolder } from \"../../types\";\nimport { ChevronRight, Folder, Pencil, Plus, Trash2 } from \"@lucide/vue\";\nimport { computed, ref } from \"vue\";\n\nconst props = defineProps<{\n folder: MediaFolder;\n currentFolderId: string | null;\n depth: number;\n}>();\n\nconst emit = defineEmits<{\n (e: \"navigate\", folderId: string | null): void;\n (e: \"createFolder\", name: string, parentId?: string | null): void;\n (e: \"renameFolder\", folderId: string, name: string): void;\n (e: \"deleteFolder\", folderId: string): void;\n}>();\n\nconst { t } = useI18n();\n\nconst isExpanded = ref(false);\nconst isRenaming = ref(false);\nconst renameValue = ref(\"\");\nconst isCreatingSubfolder = ref(false);\nconst subfolderName = ref(\"\");\n\nconst MAX_DEPTH = 5;\n\nconst hasChildren = computed(() => (props.folder.children?.length ?? 0) > 0);\n\nconst canCreateSubfolder = computed(() => props.depth < MAX_DEPTH - 1);\n\nconst isActive = computed(() => props.currentFolderId === props.folder.id);\n\nconst isDescendantActive = computed(() => {\n if (!props.currentFolderId || !props.folder.children) return false;\n return containsFolder(props.folder.children, props.currentFolderId);\n});\n\nconst shouldExpand = computed(\n () => isExpanded.value || isDescendantActive.value,\n);\n\nfunction containsFolder(folders: MediaFolder[], id: string): boolean {\n for (const folder of folders) {\n if (folder.id === id) return true;\n if (folder.children && containsFolder(folder.children, id)) return true;\n }\n return false;\n}\n\nfunction toggleExpand(): void {\n isExpanded.value = !isExpanded.value;\n}\n\nfunction startRename(): void {\n isRenaming.value = true;\n renameValue.value = props.folder.name;\n}\n\nfunction confirmRename(): void {\n const trimmed = renameValue.value.trim();\n if (trimmed && trimmed !== props.folder.name) {\n emit(\"renameFolder\", props.folder.id, trimmed);\n }\n isRenaming.value = false;\n renameValue.value = \"\";\n}\n\nfunction cancelRename(): void {\n isRenaming.value = false;\n renameValue.value = \"\";\n}\n\nfunction startCreateSubfolder(): void {\n isCreatingSubfolder.value = true;\n subfolderName.value = \"\";\n isExpanded.value = true;\n}\n\nfunction confirmCreateSubfolder(): void {\n if (subfolderName.value.trim()) {\n emit(\"createFolder\", subfolderName.value.trim(), props.folder.id);\n }\n isCreatingSubfolder.value = false;\n subfolderName.value = \"\";\n}\n\nfunction cancelCreateSubfolder(): void {\n isCreatingSubfolder.value = false;\n subfolderName.value = \"\";\n}\n</script>\n\n<template>\n <div>\n <!-- Folder row -->\n <div\n class=\"tpl:group tpl:flex tpl:w-full tpl:items-center tpl:gap-1 tpl:py-1.5 tpl:pr-2 tpl:text-left tpl:text-xs tpl:transition-all tpl:duration-150\"\n :style=\"{\n paddingLeft: `${depth * 16 + 8}px`,\n backgroundColor: isActive ? 'var(--tpl-bg-active)' : 'transparent',\n color: isActive ? 'var(--tpl-primary)' : 'var(--tpl-text)',\n }\"\n >\n <!-- Expand/collapse chevron -->\n <button\n v-if=\"hasChildren || isCreatingSubfolder\"\n class=\"tpl:flex tpl:size-4 tpl:shrink-0 tpl:items-center tpl:justify-center tpl:rounded tpl:transition-colors\"\n @click.stop=\"toggleExpand\"\n >\n <ChevronRight\n class=\"tpl:transition-transform tpl:duration-150\"\n :class=\"{ 'tpl:rotate-90': shouldExpand }\"\n :size=\"10\"\n :stroke-width=\"2\"\n />\n </button>\n <span v-else class=\"tpl:size-4 tpl:shrink-0\" />\n\n <!-- Folder icon + name (clickable) -->\n <button\n class=\"tpl:flex tpl:min-w-0 tpl:flex-1 tpl:items-center tpl:gap-1.5\"\n @click=\"emit('navigate', folder.id)\"\n >\n <Folder class=\"tpl:shrink-0\" :size=\"14\" :stroke-width=\"1.5\" />\n <template v-if=\"!isRenaming\">\n <span class=\"tpl:truncate\">{{ folder.name }}</span>\n </template>\n </button>\n\n <!-- Inline rename input -->\n <input\n v-if=\"isRenaming\"\n v-model=\"renameValue\"\n type=\"text\"\n class=\"tpl:min-w-0 tpl:flex-1 tpl:rounded tpl:border tpl:px-1.5 tpl:py-0.5 tpl:text-xs tpl:outline-none\"\n style=\"\n border-color: var(--tpl-primary);\n background-color: var(--tpl-bg);\n color: var(--tpl-text);\n \"\n autofocus\n @keydown.enter=\"confirmRename\"\n @keydown.escape=\"cancelRename\"\n @blur=\"confirmRename\"\n @click.stop\n />\n\n <!-- Hover actions -->\n <span\n v-if=\"!isRenaming\"\n class=\"tpl:flex tpl:shrink-0 tpl:items-center tpl:gap-0.5 tpl:opacity-0 tpl:transition-opacity tpl:group-hover:opacity-100\"\n >\n <!-- Add subfolder -->\n <button\n v-if=\"canCreateSubfolder\"\n class=\"tpl:flex tpl:size-6 tpl:items-center tpl:justify-center tpl:rounded tpl:transition-colors\"\n :title=\"t.mediaLibrary.addSubfolder\"\n @click.stop=\"startCreateSubfolder\"\n >\n <Plus :size=\"12\" :stroke-width=\"2\" />\n </button>\n <!-- Rename -->\n <button\n class=\"tpl:flex tpl:size-6 tpl:items-center tpl:justify-center tpl:rounded tpl:transition-colors\"\n :title=\"t.mediaLibrary.renameFolder\"\n @click.stop=\"startRename\"\n >\n <Pencil :size=\"12\" :stroke-width=\"2\" />\n </button>\n <!-- Delete -->\n <button\n class=\"tpl:flex tpl:size-6 tpl:items-center tpl:justify-center tpl:rounded tpl:transition-colors\"\n @click.stop=\"emit('deleteFolder', folder.id)\"\n >\n <Trash2\n :size=\"12\"\n :stroke-width=\"2\"\n style=\"color: var(--tpl-danger)\"\n />\n </button>\n </span>\n </div>\n\n <!-- Children (expanded) -->\n <div v-if=\"shouldExpand\">\n <MediaFolderTreeNode\n v-for=\"child in folder.children\"\n :key=\"child.id\"\n :folder=\"child\"\n :current-folder-id=\"currentFolderId\"\n :depth=\"depth + 1\"\n @navigate=\"emit('navigate', $event)\"\n @create-folder=\"\n (name, parentId) => emit('createFolder', name, parentId)\n \"\n @rename-folder=\"(id, name) => emit('renameFolder', id, name)\"\n @delete-folder=\"emit('deleteFolder', $event)\"\n />\n\n <!-- Subfolder creation input -->\n <div\n v-if=\"isCreatingSubfolder\"\n :style=\"{ paddingLeft: `${(depth + 1) * 16 + 8}px` }\"\n class=\"tpl:py-1.5 tpl:pr-2\"\n >\n <input\n v-model=\"subfolderName\"\n type=\"text\"\n class=\"tpl:w-full tpl:rounded tpl:border tpl:px-2 tpl:py-1 tpl:text-xs tpl:outline-none\"\n style=\"\n border-color: var(--tpl-primary);\n background-color: var(--tpl-bg);\n color: var(--tpl-text);\n \"\n :placeholder=\"t.mediaLibrary.subfolderName\"\n autofocus\n @keydown.enter=\"confirmCreateSubfolder\"\n @keydown.escape=\"cancelCreateSubfolder\"\n @blur=\"confirmCreateSubfolder\"\n />\n </div>\n </div>\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport MediaFolderTreeNode from \"./MediaFolderTreeNode.vue\";\nimport { useI18n } from \"../../composables/useI18n\";\nimport type { MediaViewMode } from \"../../composable\";\nimport type { MediaFolder } from \"../../types\";\nimport { File, Plus, Star } from \"@lucide/vue\";\nimport { ref } from \"vue\";\n\ndefineProps<{\n folders: MediaFolder[];\n currentFolderId: string | null;\n viewMode: MediaViewMode;\n hasFrequentlyUsed: boolean;\n}>();\n\nconst emit = defineEmits<{\n (e: \"navigate\", folderId: string | null): void;\n (e: \"createFolder\", name: string, parentId?: string | null): void;\n (e: \"renameFolder\", folderId: string, name: string): void;\n (e: \"deleteFolder\", folderId: string): void;\n (e: \"showFrequentlyUsed\"): void;\n}>();\n\nconst { t } = useI18n();\n\nconst isCreating = ref(false);\nconst newFolderName = ref(\"\");\n\nfunction startCreateFolder(): void {\n isCreating.value = true;\n newFolderName.value = \"\";\n}\n\nfunction confirmCreateFolder(): void {\n if (newFolderName.value.trim()) {\n emit(\"createFolder\", newFolderName.value.trim());\n }\n isCreating.value = false;\n newFolderName.value = \"\";\n}\n\nfunction cancelCreate(): void {\n isCreating.value = false;\n newFolderName.value = \"\";\n}\n</script>\n\n<template>\n <div class=\"tpl:flex tpl:h-full tpl:flex-col tpl:overflow-y-auto\">\n <!-- All Images root -->\n <button\n class=\"tpl:flex tpl:w-full tpl:items-center tpl:gap-2 tpl:px-3 tpl:py-2 tpl:text-left tpl:text-xs tpl:font-medium tpl:transition-all tpl:duration-150\"\n :style=\"{\n backgroundColor:\n viewMode === 'files' && currentFolderId === null\n ? 'var(--tpl-bg-active)'\n : 'transparent',\n color:\n viewMode === 'files' && currentFolderId === null\n ? 'var(--tpl-primary)'\n : 'var(--tpl-text)',\n }\"\n @click=\"emit('navigate', null)\"\n >\n <File :size=\"14\" :stroke-width=\"1.5\" />\n {{ t.mediaLibrary.allFiles }}\n </button>\n\n <!-- Recursive folder tree -->\n <MediaFolderTreeNode\n v-for=\"folder in folders\"\n :key=\"folder.id\"\n :folder=\"folder\"\n :current-folder-id=\"currentFolderId\"\n :depth=\"0\"\n @navigate=\"emit('navigate', $event)\"\n @create-folder=\"(name, parentId) => emit('createFolder', name, parentId)\"\n @rename-folder=\"(id, name) => emit('renameFolder', id, name)\"\n @delete-folder=\"emit('deleteFolder', $event)\"\n />\n\n <!-- New folder input -->\n <div v-if=\"isCreating\" class=\"tpl:px-3 tpl:py-2\">\n <input\n v-model=\"newFolderName\"\n type=\"text\"\n class=\"tpl:w-full tpl:rounded tpl:border tpl:px-2 tpl:py-1 tpl:text-xs tpl:outline-none\"\n style=\"\n border-color: var(--tpl-primary);\n background-color: var(--tpl-bg);\n color: var(--tpl-text);\n \"\n :placeholder=\"t.mediaLibrary.folderName\"\n autofocus\n @keydown.enter=\"confirmCreateFolder\"\n @keydown.escape=\"cancelCreate\"\n @blur=\"confirmCreateFolder\"\n />\n </div>\n\n <!-- New folder button -->\n <button\n v-if=\"!isCreating\"\n class=\"tpl:flex tpl:w-full tpl:items-center tpl:gap-2 tpl:px-3 tpl:py-2 tpl:text-left tpl:text-xs tpl:transition-all tpl:duration-150\"\n style=\"color: var(--tpl-text-muted)\"\n @click=\"startCreateFolder\"\n >\n <Plus :size=\"14\" :stroke-width=\"1.5\" />\n {{ t.mediaLibrary.newFolder }}\n </button>\n\n <!-- Spacer to push frequently used to bottom -->\n <div class=\"tpl:flex-1\" />\n\n <!-- Frequently Used -->\n <button\n v-if=\"hasFrequentlyUsed\"\n class=\"tpl:flex tpl:w-full tpl:items-center tpl:gap-2 tpl:border-t tpl:px-3 tpl:py-2 tpl:text-left tpl:text-xs tpl:font-medium tpl:transition-all tpl:duration-150\"\n :style=\"{\n borderColor: 'var(--tpl-border)',\n backgroundColor:\n viewMode === 'frequently-used'\n ? 'var(--tpl-bg-active)'\n : 'transparent',\n color:\n viewMode === 'frequently-used'\n ? 'var(--tpl-primary)'\n : 'var(--tpl-text)',\n }\"\n @click=\"emit('showFrequentlyUsed')\"\n >\n <Star :size=\"14\" :stroke-width=\"1.5\" />\n {{ t.mediaLibrary.frequentlyUsed }}\n </button>\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport MediaFolderTreeNode from \"./MediaFolderTreeNode.vue\";\nimport { useI18n } from \"../../composables/useI18n\";\nimport type { MediaViewMode } from \"../../composable\";\nimport type { MediaFolder } from \"../../types\";\nimport { File, Plus, Star } from \"@lucide/vue\";\nimport { ref } from \"vue\";\n\ndefineProps<{\n folders: MediaFolder[];\n currentFolderId: string | null;\n viewMode: MediaViewMode;\n hasFrequentlyUsed: boolean;\n}>();\n\nconst emit = defineEmits<{\n (e: \"navigate\", folderId: string | null): void;\n (e: \"createFolder\", name: string, parentId?: string | null): void;\n (e: \"renameFolder\", folderId: string, name: string): void;\n (e: \"deleteFolder\", folderId: string): void;\n (e: \"showFrequentlyUsed\"): void;\n}>();\n\nconst { t } = useI18n();\n\nconst isCreating = ref(false);\nconst newFolderName = ref(\"\");\n\nfunction startCreateFolder(): void {\n isCreating.value = true;\n newFolderName.value = \"\";\n}\n\nfunction confirmCreateFolder(): void {\n if (newFolderName.value.trim()) {\n emit(\"createFolder\", newFolderName.value.trim());\n }\n isCreating.value = false;\n newFolderName.value = \"\";\n}\n\nfunction cancelCreate(): void {\n isCreating.value = false;\n newFolderName.value = \"\";\n}\n</script>\n\n<template>\n <div class=\"tpl:flex tpl:h-full tpl:flex-col tpl:overflow-y-auto\">\n <!-- All Images root -->\n <button\n class=\"tpl:flex tpl:w-full tpl:items-center tpl:gap-2 tpl:px-3 tpl:py-2 tpl:text-left tpl:text-xs tpl:font-medium tpl:transition-all tpl:duration-150\"\n :style=\"{\n backgroundColor:\n viewMode === 'files' && currentFolderId === null\n ? 'var(--tpl-bg-active)'\n : 'transparent',\n color:\n viewMode === 'files' && currentFolderId === null\n ? 'var(--tpl-primary)'\n : 'var(--tpl-text)',\n }\"\n @click=\"emit('navigate', null)\"\n >\n <File :size=\"14\" :stroke-width=\"1.5\" />\n {{ t.mediaLibrary.allFiles }}\n </button>\n\n <!-- Recursive folder tree -->\n <MediaFolderTreeNode\n v-for=\"folder in folders\"\n :key=\"folder.id\"\n :folder=\"folder\"\n :current-folder-id=\"currentFolderId\"\n :depth=\"0\"\n @navigate=\"emit('navigate', $event)\"\n @create-folder=\"(name, parentId) => emit('createFolder', name, parentId)\"\n @rename-folder=\"(id, name) => emit('renameFolder', id, name)\"\n @delete-folder=\"emit('deleteFolder', $event)\"\n />\n\n <!-- New folder input -->\n <div v-if=\"isCreating\" class=\"tpl:px-3 tpl:py-2\">\n <input\n v-model=\"newFolderName\"\n type=\"text\"\n class=\"tpl:w-full tpl:rounded tpl:border tpl:px-2 tpl:py-1 tpl:text-xs tpl:outline-none\"\n style=\"\n border-color: var(--tpl-primary);\n background-color: var(--tpl-bg);\n color: var(--tpl-text);\n \"\n :placeholder=\"t.mediaLibrary.folderName\"\n autofocus\n @keydown.enter=\"confirmCreateFolder\"\n @keydown.escape=\"cancelCreate\"\n @blur=\"confirmCreateFolder\"\n />\n </div>\n\n <!-- New folder button -->\n <button\n v-if=\"!isCreating\"\n class=\"tpl:flex tpl:w-full tpl:items-center tpl:gap-2 tpl:px-3 tpl:py-2 tpl:text-left tpl:text-xs tpl:transition-all tpl:duration-150\"\n style=\"color: var(--tpl-text-muted)\"\n @click=\"startCreateFolder\"\n >\n <Plus :size=\"14\" :stroke-width=\"1.5\" />\n {{ t.mediaLibrary.newFolder }}\n </button>\n\n <!-- Spacer to push frequently used to bottom -->\n <div class=\"tpl:flex-1\" />\n\n <!-- Frequently Used -->\n <button\n v-if=\"hasFrequentlyUsed\"\n class=\"tpl:flex tpl:w-full tpl:items-center tpl:gap-2 tpl:border-t tpl:px-3 tpl:py-2 tpl:text-left tpl:text-xs tpl:font-medium tpl:transition-all tpl:duration-150\"\n :style=\"{\n borderColor: 'var(--tpl-border)',\n backgroundColor:\n viewMode === 'frequently-used'\n ? 'var(--tpl-bg-active)'\n : 'transparent',\n color:\n viewMode === 'frequently-used'\n ? 'var(--tpl-primary)'\n : 'var(--tpl-text)',\n }\"\n @click=\"emit('showFrequentlyUsed')\"\n >\n <Star :size=\"14\" :stroke-width=\"1.5\" />\n {{ t.mediaLibrary.frequentlyUsed }}\n </button>\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport { computed } from \"vue\";\n\nconst props = defineProps<{\n mimeType: string;\n}>();\n\ninterface FileTypeConfig {\n label: string;\n color: string;\n bgColor: string;\n icon: \"document\" | \"video\" | \"audio\";\n}\n\nconst FILE_TYPE_MAP: Record<string, FileTypeConfig> = {\n \"application/pdf\": {\n label: \"PDF\",\n color: \"#dc2626\",\n bgColor: \"#fef2f2\",\n icon: \"document\",\n },\n \"application/vnd.openxmlformats-officedocument.wordprocessingml.document\": {\n label: \"DOC\",\n color: \"#2563eb\",\n bgColor: \"#eff6ff\",\n icon: \"document\",\n },\n \"application/msword\": {\n label: \"DOC\",\n color: \"#2563eb\",\n bgColor: \"#eff6ff\",\n icon: \"document\",\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\": {\n label: \"XLS\",\n color: \"#16a34a\",\n bgColor: \"#f0fdf4\",\n icon: \"document\",\n },\n \"application/vnd.ms-excel\": {\n label: \"XLS\",\n color: \"#16a34a\",\n bgColor: \"#f0fdf4\",\n icon: \"document\",\n },\n \"application/vnd.openxmlformats-officedocument.presentationml.presentation\": {\n label: \"PPT\",\n color: \"#ea580c\",\n bgColor: \"#fff7ed\",\n icon: \"document\",\n },\n \"application/vnd.ms-powerpoint\": {\n label: \"PPT\",\n color: \"#ea580c\",\n bgColor: \"#fff7ed\",\n icon: \"document\",\n },\n \"text/csv\": {\n label: \"CSV\",\n color: \"#16a34a\",\n bgColor: \"#f0fdf4\",\n icon: \"document\",\n },\n \"text/plain\": {\n label: \"TXT\",\n color: \"#6b7280\",\n bgColor: \"#f9fafb\",\n icon: \"document\",\n },\n \"video/mp4\": {\n label: \"MP4\",\n color: \"#9333ea\",\n bgColor: \"#faf5ff\",\n icon: \"video\",\n },\n \"video/quicktime\": {\n label: \"MOV\",\n color: \"#9333ea\",\n bgColor: \"#faf5ff\",\n icon: \"video\",\n },\n \"video/webm\": {\n label: \"WEBM\",\n color: \"#9333ea\",\n bgColor: \"#faf5ff\",\n icon: \"video\",\n },\n \"audio/mpeg\": {\n label: \"MP3\",\n color: \"#0d9488\",\n bgColor: \"#f0fdfa\",\n icon: \"audio\",\n },\n \"audio/wav\": {\n label: \"WAV\",\n color: \"#0d9488\",\n bgColor: \"#f0fdfa\",\n icon: \"audio\",\n },\n \"audio/ogg\": {\n label: \"OGG\",\n color: \"#0d9488\",\n bgColor: \"#f0fdfa\",\n icon: \"audio\",\n },\n};\n\nconst DEFAULT_CONFIG: FileTypeConfig = {\n label: \"FILE\",\n color: \"#6b7280\",\n bgColor: \"#f9fafb\",\n icon: \"document\",\n};\n\nconst config = computed(\n (): FileTypeConfig => FILE_TYPE_MAP[props.mimeType] ?? DEFAULT_CONFIG,\n);\n</script>\n\n<template>\n <div\n class=\"tpl:flex tpl:aspect-square tpl:flex-col tpl:items-center tpl:justify-center tpl:gap-2\"\n >\n <!-- Document icon -->\n <svg\n v-if=\"config.icon === 'document'\"\n width=\"60\"\n height=\"60\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"1.5\"\n :style=\"{ color: config.color }\"\n >\n <path d=\"M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z\" />\n <polyline points=\"14 2 14 8 20 8\" />\n <line x1=\"8\" y1=\"13\" x2=\"16\" y2=\"13\" />\n <line x1=\"8\" y1=\"17\" x2=\"12\" y2=\"17\" />\n </svg>\n\n <!-- Video icon -->\n <svg\n v-else-if=\"config.icon === 'video'\"\n width=\"40\"\n height=\"40\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"1.5\"\n :style=\"{ color: config.color }\"\n >\n <rect x=\"2\" y=\"4\" width=\"20\" height=\"16\" rx=\"2\" />\n <polygon points=\"10,8 16,12 10,16\" fill=\"currentColor\" stroke=\"none\" />\n </svg>\n\n <!-- Audio icon -->\n <svg\n v-else\n width=\"40\"\n height=\"40\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"1.5\"\n :style=\"{ color: config.color }\"\n >\n <path d=\"M9 18V5l12-2v13\" />\n <circle cx=\"6\" cy=\"18\" r=\"3\" />\n <circle cx=\"18\" cy=\"16\" r=\"3\" />\n </svg>\n\n <span\n class=\"tpl:text-xs tpl:font-bold tpl:tracking-wider\"\n :style=\"{ color: config.color }\"\n >\n {{ config.label }}\n </span>\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport { computed } from \"vue\";\n\nconst props = defineProps<{\n mimeType: string;\n}>();\n\ninterface FileTypeConfig {\n label: string;\n color: string;\n bgColor: string;\n icon: \"document\" | \"video\" | \"audio\";\n}\n\nconst FILE_TYPE_MAP: Record<string, FileTypeConfig> = {\n \"application/pdf\": {\n label: \"PDF\",\n color: \"#dc2626\",\n bgColor: \"#fef2f2\",\n icon: \"document\",\n },\n \"application/vnd.openxmlformats-officedocument.wordprocessingml.document\": {\n label: \"DOC\",\n color: \"#2563eb\",\n bgColor: \"#eff6ff\",\n icon: \"document\",\n },\n \"application/msword\": {\n label: \"DOC\",\n color: \"#2563eb\",\n bgColor: \"#eff6ff\",\n icon: \"document\",\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\": {\n label: \"XLS\",\n color: \"#16a34a\",\n bgColor: \"#f0fdf4\",\n icon: \"document\",\n },\n \"application/vnd.ms-excel\": {\n label: \"XLS\",\n color: \"#16a34a\",\n bgColor: \"#f0fdf4\",\n icon: \"document\",\n },\n \"application/vnd.openxmlformats-officedocument.presentationml.presentation\": {\n label: \"PPT\",\n color: \"#ea580c\",\n bgColor: \"#fff7ed\",\n icon: \"document\",\n },\n \"application/vnd.ms-powerpoint\": {\n label: \"PPT\",\n color: \"#ea580c\",\n bgColor: \"#fff7ed\",\n icon: \"document\",\n },\n \"text/csv\": {\n label: \"CSV\",\n color: \"#16a34a\",\n bgColor: \"#f0fdf4\",\n icon: \"document\",\n },\n \"text/plain\": {\n label: \"TXT\",\n color: \"#6b7280\",\n bgColor: \"#f9fafb\",\n icon: \"document\",\n },\n \"video/mp4\": {\n label: \"MP4\",\n color: \"#9333ea\",\n bgColor: \"#faf5ff\",\n icon: \"video\",\n },\n \"video/quicktime\": {\n label: \"MOV\",\n color: \"#9333ea\",\n bgColor: \"#faf5ff\",\n icon: \"video\",\n },\n \"video/webm\": {\n label: \"WEBM\",\n color: \"#9333ea\",\n bgColor: \"#faf5ff\",\n icon: \"video\",\n },\n \"audio/mpeg\": {\n label: \"MP3\",\n color: \"#0d9488\",\n bgColor: \"#f0fdfa\",\n icon: \"audio\",\n },\n \"audio/wav\": {\n label: \"WAV\",\n color: \"#0d9488\",\n bgColor: \"#f0fdfa\",\n icon: \"audio\",\n },\n \"audio/ogg\": {\n label: \"OGG\",\n color: \"#0d9488\",\n bgColor: \"#f0fdfa\",\n icon: \"audio\",\n },\n};\n\nconst DEFAULT_CONFIG: FileTypeConfig = {\n label: \"FILE\",\n color: \"#6b7280\",\n bgColor: \"#f9fafb\",\n icon: \"document\",\n};\n\nconst config = computed(\n (): FileTypeConfig => FILE_TYPE_MAP[props.mimeType] ?? DEFAULT_CONFIG,\n);\n</script>\n\n<template>\n <div\n class=\"tpl:flex tpl:aspect-square tpl:flex-col tpl:items-center tpl:justify-center tpl:gap-2\"\n >\n <!-- Document icon -->\n <svg\n v-if=\"config.icon === 'document'\"\n width=\"60\"\n height=\"60\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"1.5\"\n :style=\"{ color: config.color }\"\n >\n <path d=\"M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z\" />\n <polyline points=\"14 2 14 8 20 8\" />\n <line x1=\"8\" y1=\"13\" x2=\"16\" y2=\"13\" />\n <line x1=\"8\" y1=\"17\" x2=\"12\" y2=\"17\" />\n </svg>\n\n <!-- Video icon -->\n <svg\n v-else-if=\"config.icon === 'video'\"\n width=\"40\"\n height=\"40\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"1.5\"\n :style=\"{ color: config.color }\"\n >\n <rect x=\"2\" y=\"4\" width=\"20\" height=\"16\" rx=\"2\" />\n <polygon points=\"10,8 16,12 10,16\" fill=\"currentColor\" stroke=\"none\" />\n </svg>\n\n <!-- Audio icon -->\n <svg\n v-else\n width=\"40\"\n height=\"40\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"1.5\"\n :style=\"{ color: config.color }\"\n >\n <path d=\"M9 18V5l12-2v13\" />\n <circle cx=\"6\" cy=\"18\" r=\"3\" />\n <circle cx=\"18\" cy=\"16\" r=\"3\" />\n </svg>\n\n <span\n class=\"tpl:text-xs tpl:font-bold tpl:tracking-wider\"\n :style=\"{ color: config.color }\"\n >\n {{ config.label }}\n </span>\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport MediaFileIcon from \"./MediaFileIcon.vue\";\nimport { useI18n } from \"../../composables/useI18n\";\nimport { useMediaCategories } from \"../../composables/useMediaCategories\";\nimport type { MediaCategory, MediaItem } from \"../../types\";\nimport { useIntersectionObserver } from \"@vueuse/core\";\nimport { Check, File, LoaderCircle, Pencil, RefreshCw } from \"@lucide/vue\";\nimport { ref } from \"vue\";\n\nconst props = defineProps<{\n items: MediaItem[];\n selectedIds: Set<string>;\n isLoading: boolean;\n hasMore: boolean;\n accept?: MediaCategory[];\n layout?: \"grid\" | \"list\";\n}>();\n\nconst emit = defineEmits<{\n (e: \"select\", item: MediaItem): void;\n (e: \"toggle\", id: string): void;\n (e: \"loadMore\"): void;\n (e: \"edit\", item: MediaItem): void;\n (e: \"replace\", item: MediaItem): void;\n}>();\n\nconst { isAcceptedMimeType, isImageMimeType } = useMediaCategories();\n\nfunction isSelectable(item: MediaItem): boolean {\n if (!props.accept || props.accept.length === 0) {\n return true;\n }\n\n return isAcceptedMimeType(item.mime_type, props.accept);\n}\n\nfunction handleItemClick(item: MediaItem): void {\n emit(\"select\", item);\n}\n\nconst { t } = useI18n();\n\nconst sentinelRef = ref<HTMLElement | null>(null);\n\nuseIntersectionObserver(\n sentinelRef,\n ([{ isIntersecting }]) => {\n if (isIntersecting && props.hasMore && !props.isLoading) {\n emit(\"loadMore\");\n }\n },\n { threshold: 0.1 },\n);\n\nfunction formatSize(bytes: number): string {\n if (bytes < 1024) return `${bytes} B`;\n if (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(1)} KB`;\n return `${(bytes / (1024 * 1024)).toFixed(1)} MB`;\n}\n\nfunction formatDate(dateStr: string): string {\n return new Date(dateStr).toLocaleDateString(undefined, {\n year: \"numeric\",\n month: \"short\",\n day: \"numeric\",\n });\n}\n</script>\n\n<template>\n <div class=\"tpl:p-4\">\n <!-- Skeleton loading -->\n <div\n v-if=\"isLoading && items.length === 0\"\n :class=\"\n layout === 'list'\n ? 'tpl:flex tpl:flex-col tpl:gap-1'\n : 'tpl:grid tpl:grid-cols-4 tpl:gap-3'\n \"\n >\n <div\n v-for=\"i in 8\"\n :key=\"i\"\n class=\"tpl-pulse tpl:rounded-lg\"\n :class=\"layout === 'list' ? 'tpl:h-12' : 'tpl:aspect-square'\"\n style=\"background-color: var(--tpl-bg-hover)\"\n />\n </div>\n\n <!-- Empty state -->\n <div\n v-else-if=\"items.length === 0\"\n class=\"tpl:flex tpl:flex-col tpl:items-center tpl:justify-center tpl:py-16\"\n >\n <File\n class=\"tpl:mb-3\"\n :size=\"40\"\n :stroke-width=\"1\"\n style=\"color: var(--tpl-text-dim)\"\n />\n <p class=\"tpl:text-xs\" style=\"color: var(--tpl-text-muted)\">\n {{ t.mediaLibrary.noFiles }}\n </p>\n </div>\n\n <!-- Grid -->\n <div\n v-else-if=\"layout !== 'list'\"\n class=\"tpl:grid tpl:grid-cols-4 tpl:gap-3\"\n >\n <div\n v-for=\"item in items\"\n :key=\"item.id\"\n class=\"tpl-media-item tpl:group tpl:relative tpl:overflow-hidden tpl:rounded-lg tpl:border-2 tpl:transition-all tpl:duration-150\"\n :class=\"[\n 'tpl:cursor-pointer',\n !isSelectable(item) && !selectedIds.has(item.id)\n ? 'tpl:opacity-60'\n : '',\n selectedIds.has(item.id) ? 'tpl-media-item--selected' : '',\n ]\"\n :style=\"{\n borderColor: selectedIds.has(item.id)\n ? 'var(--tpl-primary)'\n : 'transparent',\n backgroundColor:\n !isSelectable(item) && !selectedIds.has(item.id)\n ? 'var(--tpl-bg)'\n : 'var(--tpl-bg-hover)',\n }\"\n @click=\"handleItemClick(item)\"\n >\n <div class=\"tpl:aspect-square\">\n <img\n v-if=\"isImageMimeType(item.mime_type)\"\n :src=\"item.small_url || item.url\"\n :alt=\"item.filename\"\n class=\"tpl:size-full tpl:object-cover\"\n loading=\"lazy\"\n />\n <MediaFileIcon v-else :mime-type=\"item.mime_type\" />\n </div>\n <div class=\"tpl:px-2 tpl:py-1.5\">\n <p\n class=\"tpl:truncate tpl:text-[10px] tpl:font-medium\"\n style=\"color: var(--tpl-text)\"\n >\n {{ item.filename }}\n </p>\n <p\n class=\"tpl:flex tpl:justify-between tpl:text-[9px]\"\n style=\"color: var(--tpl-text-muted)\"\n >\n <span>{{ formatSize(item.size) }}</span>\n <span\n v-if=\"\n isImageMimeType(item.mime_type) && item.width && item.height\n \"\n >\n {{ item.width }}×{{ item.height }}\n </span>\n </p>\n </div>\n <!-- Action buttons -->\n <div\n class=\"tpl:absolute tpl:top-1.5 tpl:left-1.5 tpl:flex tpl:gap-1 tpl:opacity-0 tpl:transition-opacity tpl:duration-150 tpl:group-hover:opacity-100\"\n >\n <!-- Edit button -->\n <button\n class=\"tpl:flex tpl:size-6 tpl:items-center tpl:justify-center tpl:rounded-full tpl:text-white\"\n style=\"background-color: rgba(0, 0, 0, 0.6)\"\n :title=\"t.mediaLibrary.editFile\"\n @click.stop=\"emit('edit', item)\"\n >\n <Pencil :size=\"11\" :stroke-width=\"2\" />\n </button>\n <!-- Replace button -->\n <button\n class=\"tpl:flex tpl:size-6 tpl:items-center tpl:justify-center tpl:rounded-full tpl:text-white\"\n style=\"background-color: rgba(0, 0, 0, 0.6)\"\n :title=\"t.mediaLibrary.replaceFile\"\n @click.stop=\"emit('replace', item)\"\n >\n <RefreshCw :size=\"11\" :stroke-width=\"2\" />\n </button>\n </div>\n <!-- Selection check -->\n <div\n v-if=\"selectedIds.has(item.id)\"\n class=\"tpl:absolute tpl:top-1.5 tpl:right-1.5 tpl:flex tpl:size-5 tpl:items-center tpl:justify-center tpl:rounded-full tpl:text-white\"\n style=\"background-color: var(--tpl-primary)\"\n >\n <Check :size=\"12\" :stroke-width=\"3\" />\n </div>\n </div>\n </div>\n\n <!-- List -->\n <div v-else class=\"tpl:flex tpl:flex-col tpl:gap-1\">\n <div\n v-for=\"item in items\"\n :key=\"item.id\"\n class=\"tpl-media-list-item tpl:group tpl:flex tpl:cursor-pointer tpl:items-center tpl:gap-3 tpl:rounded-lg tpl:px-3 tpl:py-2 tpl:transition-all tpl:duration-150\"\n :class=\"[\n !isSelectable(item) && !selectedIds.has(item.id)\n ? 'tpl:opacity-60'\n : '',\n ]\"\n :style=\"{\n backgroundColor: selectedIds.has(item.id)\n ? 'var(--tpl-bg-hover)'\n : 'transparent',\n }\"\n @click=\"handleItemClick(item)\"\n >\n <!-- Thumbnail -->\n <div\n class=\"tpl:size-10 tpl:shrink-0 tpl:overflow-hidden tpl:rounded\"\n style=\"background-color: var(--tpl-bg-hover)\"\n >\n <img\n v-if=\"isImageMimeType(item.mime_type)\"\n :src=\"item.small_url || item.url\"\n :alt=\"item.filename\"\n class=\"tpl:size-full tpl:object-cover\"\n loading=\"lazy\"\n />\n <div v-else class=\"tpl-list-icon tpl:size-full\">\n <MediaFileIcon :mime-type=\"item.mime_type\" />\n </div>\n </div>\n\n <!-- Info -->\n <div class=\"tpl:min-w-0 tpl:flex-1\">\n <p\n class=\"tpl:truncate tpl:text-xs tpl:font-medium\"\n style=\"color: var(--tpl-text)\"\n >\n {{ item.filename }}\n </p>\n <p class=\"tpl:text-[10px]\" style=\"color: var(--tpl-text-muted)\">\n {{ formatSize(item.size) }} ·\n {{ formatDate(item.created_at) }}\n <template\n v-if=\"\n isImageMimeType(item.mime_type) && item.width && item.height\n \"\n >\n ·\n {{ item.width }}×{{ item.height }}\n </template>\n </p>\n </div>\n\n <!-- Action buttons -->\n <div\n class=\"tpl:flex tpl:gap-1 tpl:opacity-0 tpl:transition-opacity tpl:duration-150 tpl:group-hover:opacity-100\"\n >\n <!-- Edit button -->\n <button\n class=\"tpl:flex tpl:size-6 tpl:shrink-0 tpl:cursor-pointer tpl:items-center tpl:justify-center tpl:rounded\"\n style=\"color: var(--tpl-text-muted)\"\n :title=\"t.mediaLibrary.editFile\"\n @click.stop=\"emit('edit', item)\"\n >\n <Pencil :size=\"12\" :stroke-width=\"2\" />\n </button>\n <!-- Replace button -->\n <button\n class=\"tpl:flex tpl:size-6 tpl:shrink-0 tpl:cursor-pointer tpl:items-center tpl:justify-center tpl:rounded\"\n style=\"color: var(--tpl-text-muted)\"\n :title=\"t.mediaLibrary.replaceFile\"\n @click.stop=\"emit('replace', item)\"\n >\n <RefreshCw :size=\"12\" :stroke-width=\"2\" />\n </button>\n </div>\n\n <!-- Selection check -->\n <div\n v-if=\"selectedIds.has(item.id)\"\n class=\"tpl:flex tpl:size-5 tpl:shrink-0 tpl:items-center tpl:justify-center tpl:rounded-full tpl:text-white\"\n style=\"background-color: var(--tpl-primary)\"\n >\n <Check :size=\"12\" :stroke-width=\"3\" />\n </div>\n </div>\n </div>\n\n <!-- Infinite scroll sentinel -->\n <div ref=\"sentinelRef\" class=\"tpl:h-4\" />\n\n <!-- Loading more indicator -->\n <div\n v-if=\"isLoading && items.length > 0\"\n class=\"tpl:flex tpl:justify-center tpl:py-4\"\n >\n <LoaderCircle\n class=\"tpl-spinner\"\n :size=\"20\"\n :stroke-width=\"2\"\n style=\"color: var(--tpl-primary)\"\n />\n </div>\n </div>\n</template>\n\n<style scoped>\n.tpl-media-item:not(.tpl-media-item--selected):hover {\n border-color: var(--tpl-border) !important;\n}\n\n.tpl-media-list-item:hover {\n background-color: var(--tpl-bg-hover) !important;\n}\n\n.tpl-list-icon {\n transform: scale(0.35);\n transform-origin: center;\n}\n</style>\n","<script setup lang=\"ts\">\nimport MediaFileIcon from \"./MediaFileIcon.vue\";\nimport { useI18n } from \"../../composables/useI18n\";\nimport { useMediaCategories } from \"../../composables/useMediaCategories\";\nimport type { MediaCategory, MediaItem } from \"../../types\";\nimport { useIntersectionObserver } from \"@vueuse/core\";\nimport { Check, File, LoaderCircle, Pencil, RefreshCw } from \"@lucide/vue\";\nimport { ref } from \"vue\";\n\nconst props = defineProps<{\n items: MediaItem[];\n selectedIds: Set<string>;\n isLoading: boolean;\n hasMore: boolean;\n accept?: MediaCategory[];\n layout?: \"grid\" | \"list\";\n}>();\n\nconst emit = defineEmits<{\n (e: \"select\", item: MediaItem): void;\n (e: \"toggle\", id: string): void;\n (e: \"loadMore\"): void;\n (e: \"edit\", item: MediaItem): void;\n (e: \"replace\", item: MediaItem): void;\n}>();\n\nconst { isAcceptedMimeType, isImageMimeType } = useMediaCategories();\n\nfunction isSelectable(item: MediaItem): boolean {\n if (!props.accept || props.accept.length === 0) {\n return true;\n }\n\n return isAcceptedMimeType(item.mime_type, props.accept);\n}\n\nfunction handleItemClick(item: MediaItem): void {\n emit(\"select\", item);\n}\n\nconst { t } = useI18n();\n\nconst sentinelRef = ref<HTMLElement | null>(null);\n\nuseIntersectionObserver(\n sentinelRef,\n ([{ isIntersecting }]) => {\n if (isIntersecting && props.hasMore && !props.isLoading) {\n emit(\"loadMore\");\n }\n },\n { threshold: 0.1 },\n);\n\nfunction formatSize(bytes: number): string {\n if (bytes < 1024) return `${bytes} B`;\n if (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(1)} KB`;\n return `${(bytes / (1024 * 1024)).toFixed(1)} MB`;\n}\n\nfunction formatDate(dateStr: string): string {\n return new Date(dateStr).toLocaleDateString(undefined, {\n year: \"numeric\",\n month: \"short\",\n day: \"numeric\",\n });\n}\n</script>\n\n<template>\n <div class=\"tpl:p-4\">\n <!-- Skeleton loading -->\n <div\n v-if=\"isLoading && items.length === 0\"\n :class=\"\n layout === 'list'\n ? 'tpl:flex tpl:flex-col tpl:gap-1'\n : 'tpl:grid tpl:grid-cols-4 tpl:gap-3'\n \"\n >\n <div\n v-for=\"i in 8\"\n :key=\"i\"\n class=\"tpl-pulse tpl:rounded-lg\"\n :class=\"layout === 'list' ? 'tpl:h-12' : 'tpl:aspect-square'\"\n style=\"background-color: var(--tpl-bg-hover)\"\n />\n </div>\n\n <!-- Empty state -->\n <div\n v-else-if=\"items.length === 0\"\n class=\"tpl:flex tpl:flex-col tpl:items-center tpl:justify-center tpl:py-16\"\n >\n <File\n class=\"tpl:mb-3\"\n :size=\"40\"\n :stroke-width=\"1\"\n style=\"color: var(--tpl-text-dim)\"\n />\n <p class=\"tpl:text-xs\" style=\"color: var(--tpl-text-muted)\">\n {{ t.mediaLibrary.noFiles }}\n </p>\n </div>\n\n <!-- Grid -->\n <div\n v-else-if=\"layout !== 'list'\"\n class=\"tpl:grid tpl:grid-cols-4 tpl:gap-3\"\n >\n <div\n v-for=\"item in items\"\n :key=\"item.id\"\n class=\"tpl-media-item tpl:group tpl:relative tpl:overflow-hidden tpl:rounded-lg tpl:border-2 tpl:transition-all tpl:duration-150\"\n :class=\"[\n 'tpl:cursor-pointer',\n !isSelectable(item) && !selectedIds.has(item.id)\n ? 'tpl:opacity-60'\n : '',\n selectedIds.has(item.id) ? 'tpl-media-item--selected' : '',\n ]\"\n :style=\"{\n borderColor: selectedIds.has(item.id)\n ? 'var(--tpl-primary)'\n : 'transparent',\n backgroundColor:\n !isSelectable(item) && !selectedIds.has(item.id)\n ? 'var(--tpl-bg)'\n : 'var(--tpl-bg-hover)',\n }\"\n @click=\"handleItemClick(item)\"\n >\n <div class=\"tpl:aspect-square\">\n <img\n v-if=\"isImageMimeType(item.mime_type)\"\n :src=\"item.small_url || item.url\"\n :alt=\"item.filename\"\n class=\"tpl:size-full tpl:object-cover\"\n loading=\"lazy\"\n />\n <MediaFileIcon v-else :mime-type=\"item.mime_type\" />\n </div>\n <div class=\"tpl:px-2 tpl:py-1.5\">\n <p\n class=\"tpl:truncate tpl:text-[10px] tpl:font-medium\"\n style=\"color: var(--tpl-text)\"\n >\n {{ item.filename }}\n </p>\n <p\n class=\"tpl:flex tpl:justify-between tpl:text-[9px]\"\n style=\"color: var(--tpl-text-muted)\"\n >\n <span>{{ formatSize(item.size) }}</span>\n <span\n v-if=\"\n isImageMimeType(item.mime_type) && item.width && item.height\n \"\n >\n {{ item.width }}×{{ item.height }}\n </span>\n </p>\n </div>\n <!-- Action buttons -->\n <div\n class=\"tpl:absolute tpl:top-1.5 tpl:left-1.5 tpl:flex tpl:gap-1 tpl:opacity-0 tpl:transition-opacity tpl:duration-150 tpl:group-hover:opacity-100\"\n >\n <!-- Edit button -->\n <button\n class=\"tpl:flex tpl:size-6 tpl:items-center tpl:justify-center tpl:rounded-full tpl:text-white\"\n style=\"background-color: rgba(0, 0, 0, 0.6)\"\n :title=\"t.mediaLibrary.editFile\"\n @click.stop=\"emit('edit', item)\"\n >\n <Pencil :size=\"11\" :stroke-width=\"2\" />\n </button>\n <!-- Replace button -->\n <button\n class=\"tpl:flex tpl:size-6 tpl:items-center tpl:justify-center tpl:rounded-full tpl:text-white\"\n style=\"background-color: rgba(0, 0, 0, 0.6)\"\n :title=\"t.mediaLibrary.replaceFile\"\n @click.stop=\"emit('replace', item)\"\n >\n <RefreshCw :size=\"11\" :stroke-width=\"2\" />\n </button>\n </div>\n <!-- Selection check -->\n <div\n v-if=\"selectedIds.has(item.id)\"\n class=\"tpl:absolute tpl:top-1.5 tpl:right-1.5 tpl:flex tpl:size-5 tpl:items-center tpl:justify-center tpl:rounded-full tpl:text-white\"\n style=\"background-color: var(--tpl-primary)\"\n >\n <Check :size=\"12\" :stroke-width=\"3\" />\n </div>\n </div>\n </div>\n\n <!-- List -->\n <div v-else class=\"tpl:flex tpl:flex-col tpl:gap-1\">\n <div\n v-for=\"item in items\"\n :key=\"item.id\"\n class=\"tpl-media-list-item tpl:group tpl:flex tpl:cursor-pointer tpl:items-center tpl:gap-3 tpl:rounded-lg tpl:px-3 tpl:py-2 tpl:transition-all tpl:duration-150\"\n :class=\"[\n !isSelectable(item) && !selectedIds.has(item.id)\n ? 'tpl:opacity-60'\n : '',\n ]\"\n :style=\"{\n backgroundColor: selectedIds.has(item.id)\n ? 'var(--tpl-bg-hover)'\n : 'transparent',\n }\"\n @click=\"handleItemClick(item)\"\n >\n <!-- Thumbnail -->\n <div\n class=\"tpl:size-10 tpl:shrink-0 tpl:overflow-hidden tpl:rounded\"\n style=\"background-color: var(--tpl-bg-hover)\"\n >\n <img\n v-if=\"isImageMimeType(item.mime_type)\"\n :src=\"item.small_url || item.url\"\n :alt=\"item.filename\"\n class=\"tpl:size-full tpl:object-cover\"\n loading=\"lazy\"\n />\n <div v-else class=\"tpl-list-icon tpl:size-full\">\n <MediaFileIcon :mime-type=\"item.mime_type\" />\n </div>\n </div>\n\n <!-- Info -->\n <div class=\"tpl:min-w-0 tpl:flex-1\">\n <p\n class=\"tpl:truncate tpl:text-xs tpl:font-medium\"\n style=\"color: var(--tpl-text)\"\n >\n {{ item.filename }}\n </p>\n <p class=\"tpl:text-[10px]\" style=\"color: var(--tpl-text-muted)\">\n {{ formatSize(item.size) }} ·\n {{ formatDate(item.created_at) }}\n <template\n v-if=\"\n isImageMimeType(item.mime_type) && item.width && item.height\n \"\n >\n ·\n {{ item.width }}×{{ item.height }}\n </template>\n </p>\n </div>\n\n <!-- Action buttons -->\n <div\n class=\"tpl:flex tpl:gap-1 tpl:opacity-0 tpl:transition-opacity tpl:duration-150 tpl:group-hover:opacity-100\"\n >\n <!-- Edit button -->\n <button\n class=\"tpl:flex tpl:size-6 tpl:shrink-0 tpl:cursor-pointer tpl:items-center tpl:justify-center tpl:rounded\"\n style=\"color: var(--tpl-text-muted)\"\n :title=\"t.mediaLibrary.editFile\"\n @click.stop=\"emit('edit', item)\"\n >\n <Pencil :size=\"12\" :stroke-width=\"2\" />\n </button>\n <!-- Replace button -->\n <button\n class=\"tpl:flex tpl:size-6 tpl:shrink-0 tpl:cursor-pointer tpl:items-center tpl:justify-center tpl:rounded\"\n style=\"color: var(--tpl-text-muted)\"\n :title=\"t.mediaLibrary.replaceFile\"\n @click.stop=\"emit('replace', item)\"\n >\n <RefreshCw :size=\"12\" :stroke-width=\"2\" />\n </button>\n </div>\n\n <!-- Selection check -->\n <div\n v-if=\"selectedIds.has(item.id)\"\n class=\"tpl:flex tpl:size-5 tpl:shrink-0 tpl:items-center tpl:justify-center tpl:rounded-full tpl:text-white\"\n style=\"background-color: var(--tpl-primary)\"\n >\n <Check :size=\"12\" :stroke-width=\"3\" />\n </div>\n </div>\n </div>\n\n <!-- Infinite scroll sentinel -->\n <div ref=\"sentinelRef\" class=\"tpl:h-4\" />\n\n <!-- Loading more indicator -->\n <div\n v-if=\"isLoading && items.length > 0\"\n class=\"tpl:flex tpl:justify-center tpl:py-4\"\n >\n <LoaderCircle\n class=\"tpl-spinner\"\n :size=\"20\"\n :stroke-width=\"2\"\n style=\"color: var(--tpl-primary)\"\n />\n </div>\n </div>\n</template>\n\n<style scoped>\n.tpl-media-item:not(.tpl-media-item--selected):hover {\n border-color: var(--tpl-border) !important;\n}\n\n.tpl-media-list-item:hover {\n background-color: var(--tpl-bg-hover) !important;\n}\n\n.tpl-list-icon {\n transform: scale(0.35);\n transform-origin: center;\n}\n</style>\n","<script setup lang=\"ts\">\nimport { useI18n } from \"../../composables/useI18n\";\nimport { POPOVER_TARGET_KEY } from \"../../keys\";\nimport { LoaderCircle } from \"@lucide/vue\";\nimport { inject, ref, watch, type Ref } from \"vue\";\n\nconst props = defineProps<{\n visible: boolean;\n isImporting: boolean;\n error: string | null;\n}>();\n\nconst emit = defineEmits<{\n (e: \"import\", url: string): void;\n (e: \"close\"): void;\n}>();\n\nconst { t } = useI18n();\nconst tplUiTheme = inject<Ref<\"light\" | \"dark\">>(\"tplUiTheme\");\nconst popoverTarget = inject(POPOVER_TARGET_KEY, ref<HTMLElement | null>(null));\n\nconst urlValue = ref(\"\");\n\nwatch(\n () => props.visible,\n (visible) => {\n if (visible) {\n urlValue.value = \"\";\n }\n },\n);\n\nfunction handleImport(): void {\n const trimmedUrl = urlValue.value.trim();\n if (!trimmedUrl || props.isImporting) {\n return;\n }\n\n emit(\"import\", trimmedUrl);\n}\n\nfunction handleClose(): void {\n if (!props.isImporting) {\n emit(\"close\");\n }\n}\n\nfunction handleKeydown(event: KeyboardEvent): void {\n if (event.key === \"Enter\") {\n event.preventDefault();\n handleImport();\n }\n if (event.key === \"Escape\") {\n handleClose();\n }\n}\n</script>\n\n<template>\n <Teleport :to=\"popoverTarget || 'body'\">\n <Transition\n enter-active-class=\"tpl:transition tpl:ease-out tpl:duration-150\"\n enter-from-class=\"tpl:opacity-0\"\n enter-to-class=\"tpl:opacity-100\"\n leave-active-class=\"tpl:transition tpl:ease-in tpl:duration-100\"\n leave-from-class=\"tpl:opacity-100\"\n leave-to-class=\"tpl:opacity-0\"\n >\n <div\n v-if=\"visible\"\n :data-tpl-theme=\"tplUiTheme\"\n class=\"tpl tpl:fixed tpl:inset-0 tpl:z-[10000] tpl:flex tpl:items-center tpl:justify-center\"\n style=\"background-color: var(--tpl-overlay)\"\n @click.self=\"handleClose\"\n @keydown=\"handleKeydown\"\n >\n <div\n class=\"tpl:mx-4 tpl:w-full tpl:max-w-sm tpl:rounded-lg tpl:p-5 tpl:shadow-xl\"\n style=\"background-color: var(--tpl-bg-elevated)\"\n >\n <h3\n class=\"tpl:mb-4 tpl:text-sm tpl:font-semibold\"\n style=\"color: var(--tpl-text)\"\n >\n {{ t.mediaLibrary.importFromUrl }}\n </h3>\n\n <!-- URL Input -->\n <div class=\"tpl:mb-3\">\n <input\n v-model=\"urlValue\"\n type=\"url\"\n class=\"tpl:w-full tpl:rounded-md tpl:border tpl:px-3 tpl:py-1.5 tpl:text-xs tpl:outline-none\"\n style=\"\n border-color: var(--tpl-border);\n background-color: var(--tpl-bg);\n color: var(--tpl-text);\n \"\n :placeholder=\"t.mediaLibrary.importUrlPlaceholder\"\n :disabled=\"isImporting\"\n autofocus\n />\n </div>\n\n <!-- Error message -->\n <p\n v-if=\"error\"\n class=\"tpl:mb-3 tpl:text-xs\"\n style=\"color: var(--tpl-danger)\"\n >\n {{ error }}\n </p>\n\n <!-- Actions -->\n <div class=\"tpl:flex tpl:justify-end tpl:gap-2\">\n <button\n class=\"tpl:cursor-pointer tpl:rounded-md tpl:border tpl:px-3 tpl:py-1.5 tpl:text-xs tpl:font-medium tpl:transition-all tpl:duration-150\"\n style=\"\n border-color: var(--tpl-border);\n color: var(--tpl-text);\n background-color: var(--tpl-bg);\n \"\n :disabled=\"isImporting\"\n :class=\"{\n 'tpl:cursor-not-allowed tpl:opacity-50': isImporting,\n }\"\n @click=\"handleClose\"\n >\n {{ t.mediaLibrary.cancel }}\n </button>\n <button\n class=\"tpl:cursor-pointer tpl:rounded-md tpl:px-3 tpl:py-1.5 tpl:text-xs tpl:font-medium tpl:text-white tpl:transition-all tpl:duration-150 tpl:disabled:cursor-not-allowed tpl:disabled:opacity-50\"\n style=\"\n background: linear-gradient(\n 135deg,\n var(--tpl-primary),\n var(--tpl-primary-hover)\n );\n \"\n :disabled=\"!urlValue.trim() || isImporting\"\n @click=\"handleImport\"\n >\n <span\n v-if=\"isImporting\"\n class=\"tpl:flex tpl:items-center tpl:gap-1.5\"\n >\n <LoaderCircle\n class=\"tpl:animate-spin\"\n :size=\"12\"\n :stroke-width=\"2\"\n />\n {{ t.mediaLibrary.importing }}\n </span>\n <span v-else>\n {{ t.mediaLibrary.import }}\n </span>\n </button>\n </div>\n </div>\n </div>\n </Transition>\n </Teleport>\n</template>\n","<script setup lang=\"ts\">\nimport { useI18n } from \"../../composables/useI18n\";\nimport { POPOVER_TARGET_KEY } from \"../../keys\";\nimport { LoaderCircle } from \"@lucide/vue\";\nimport { inject, ref, watch, type Ref } from \"vue\";\n\nconst props = defineProps<{\n visible: boolean;\n isImporting: boolean;\n error: string | null;\n}>();\n\nconst emit = defineEmits<{\n (e: \"import\", url: string): void;\n (e: \"close\"): void;\n}>();\n\nconst { t } = useI18n();\nconst tplUiTheme = inject<Ref<\"light\" | \"dark\">>(\"tplUiTheme\");\nconst popoverTarget = inject(POPOVER_TARGET_KEY, ref<HTMLElement | null>(null));\n\nconst urlValue = ref(\"\");\n\nwatch(\n () => props.visible,\n (visible) => {\n if (visible) {\n urlValue.value = \"\";\n }\n },\n);\n\nfunction handleImport(): void {\n const trimmedUrl = urlValue.value.trim();\n if (!trimmedUrl || props.isImporting) {\n return;\n }\n\n emit(\"import\", trimmedUrl);\n}\n\nfunction handleClose(): void {\n if (!props.isImporting) {\n emit(\"close\");\n }\n}\n\nfunction handleKeydown(event: KeyboardEvent): void {\n if (event.key === \"Enter\") {\n event.preventDefault();\n handleImport();\n }\n if (event.key === \"Escape\") {\n handleClose();\n }\n}\n</script>\n\n<template>\n <Teleport :to=\"popoverTarget || 'body'\">\n <Transition\n enter-active-class=\"tpl:transition tpl:ease-out tpl:duration-150\"\n enter-from-class=\"tpl:opacity-0\"\n enter-to-class=\"tpl:opacity-100\"\n leave-active-class=\"tpl:transition tpl:ease-in tpl:duration-100\"\n leave-from-class=\"tpl:opacity-100\"\n leave-to-class=\"tpl:opacity-0\"\n >\n <div\n v-if=\"visible\"\n :data-tpl-theme=\"tplUiTheme\"\n class=\"tpl tpl:fixed tpl:inset-0 tpl:z-[10000] tpl:flex tpl:items-center tpl:justify-center\"\n style=\"background-color: var(--tpl-overlay)\"\n @click.self=\"handleClose\"\n @keydown=\"handleKeydown\"\n >\n <div\n class=\"tpl:mx-4 tpl:w-full tpl:max-w-sm tpl:rounded-lg tpl:p-5 tpl:shadow-xl\"\n style=\"background-color: var(--tpl-bg-elevated)\"\n >\n <h3\n class=\"tpl:mb-4 tpl:text-sm tpl:font-semibold\"\n style=\"color: var(--tpl-text)\"\n >\n {{ t.mediaLibrary.importFromUrl }}\n </h3>\n\n <!-- URL Input -->\n <div class=\"tpl:mb-3\">\n <input\n v-model=\"urlValue\"\n type=\"url\"\n class=\"tpl:w-full tpl:rounded-md tpl:border tpl:px-3 tpl:py-1.5 tpl:text-xs tpl:outline-none\"\n style=\"\n border-color: var(--tpl-border);\n background-color: var(--tpl-bg);\n color: var(--tpl-text);\n \"\n :placeholder=\"t.mediaLibrary.importUrlPlaceholder\"\n :disabled=\"isImporting\"\n autofocus\n />\n </div>\n\n <!-- Error message -->\n <p\n v-if=\"error\"\n class=\"tpl:mb-3 tpl:text-xs\"\n style=\"color: var(--tpl-danger)\"\n >\n {{ error }}\n </p>\n\n <!-- Actions -->\n <div class=\"tpl:flex tpl:justify-end tpl:gap-2\">\n <button\n class=\"tpl:cursor-pointer tpl:rounded-md tpl:border tpl:px-3 tpl:py-1.5 tpl:text-xs tpl:font-medium tpl:transition-all tpl:duration-150\"\n style=\"\n border-color: var(--tpl-border);\n color: var(--tpl-text);\n background-color: var(--tpl-bg);\n \"\n :disabled=\"isImporting\"\n :class=\"{\n 'tpl:cursor-not-allowed tpl:opacity-50': isImporting,\n }\"\n @click=\"handleClose\"\n >\n {{ t.mediaLibrary.cancel }}\n </button>\n <button\n class=\"tpl:cursor-pointer tpl:rounded-md tpl:px-3 tpl:py-1.5 tpl:text-xs tpl:font-medium tpl:text-white tpl:transition-all tpl:duration-150 tpl:disabled:cursor-not-allowed tpl:disabled:opacity-50\"\n style=\"\n background: linear-gradient(\n 135deg,\n var(--tpl-primary),\n var(--tpl-primary-hover)\n );\n \"\n :disabled=\"!urlValue.trim() || isImporting\"\n @click=\"handleImport\"\n >\n <span\n v-if=\"isImporting\"\n class=\"tpl:flex tpl:items-center tpl:gap-1.5\"\n >\n <LoaderCircle\n class=\"tpl:animate-spin\"\n :size=\"12\"\n :stroke-width=\"2\"\n />\n {{ t.mediaLibrary.importing }}\n </span>\n <span v-else>\n {{ t.mediaLibrary.import }}\n </span>\n </button>\n </div>\n </div>\n </div>\n </Transition>\n </Teleport>\n</template>\n","<script setup lang=\"ts\">\nimport { useI18n } from \"../../composables/useI18n\";\nimport type { MediaFolder } from \"../../types\";\nimport { onClickOutside } from \"@vueuse/core\";\nimport { File, Folder } from \"@lucide/vue\";\nimport { ref } from \"vue\";\n\ndefineProps<{\n folders: MediaFolder[];\n currentFolderId: string | null;\n}>();\n\nconst emit = defineEmits<{\n (e: \"select\", folderId: string | null): void;\n (e: \"close\"): void;\n}>();\n\nconst { t } = useI18n();\nconst pickerRef = ref<HTMLDivElement | null>(null);\n\ninterface FlatFolder {\n id: string;\n name: string;\n depth: number;\n}\n\nfunction flattenFolders(\n folders: MediaFolder[],\n depth: number = 0,\n): FlatFolder[] {\n const result: FlatFolder[] = [];\n for (const folder of folders) {\n result.push({ id: folder.id, name: folder.name, depth });\n if (folder.children?.length) {\n result.push(...flattenFolders(folder.children, depth + 1));\n }\n }\n return result;\n}\n\nonClickOutside(pickerRef, () => {\n emit(\"close\");\n});\n</script>\n\n<template>\n <div\n ref=\"pickerRef\"\n class=\"tpl:absolute tpl:bottom-full tpl:left-0 tpl:z-10 tpl:mb-2 tpl:w-56 tpl:overflow-hidden tpl:rounded-lg tpl:border tpl:shadow-lg\"\n style=\"\n border-color: var(--tpl-border);\n background-color: var(--tpl-bg-elevated);\n \"\n >\n <div class=\"tpl:max-h-56 tpl:overflow-y-auto tpl:py-1\">\n <button\n v-if=\"currentFolderId !== null\"\n class=\"tpl:flex tpl:w-full tpl:items-center tpl:gap-1.5 tpl:px-3 tpl:py-1.5 tpl:text-left tpl:text-xs tpl:transition-colors tpl:duration-100\"\n style=\"color: var(--tpl-text)\"\n @click=\"emit('select', null)\"\n >\n <File class=\"tpl:shrink-0\" :size=\"14\" :stroke-width=\"1.5\" />\n {{ t.mediaLibrary.moveToRoot }}\n </button>\n <button\n v-for=\"folder in flattenFolders(folders)\"\n :key=\"folder.id\"\n class=\"tpl:flex tpl:w-full tpl:items-center tpl:gap-1.5 tpl:py-1.5 tpl:pr-3 tpl:text-left tpl:text-xs tpl:transition-colors tpl:duration-100\"\n :style=\"{\n paddingLeft: `${folder.depth * 16 + 12}px`,\n color:\n folder.id === currentFolderId\n ? 'var(--tpl-text-dim)'\n : 'var(--tpl-text)',\n opacity: folder.id === currentFolderId ? 0.5 : 1,\n }\"\n :disabled=\"folder.id === currentFolderId\"\n @click=\"emit('select', folder.id)\"\n >\n <Folder class=\"tpl:shrink-0\" :size=\"14\" :stroke-width=\"1.5\" />\n <span class=\"tpl:truncate\">{{ folder.name }}</span>\n <span\n v-if=\"folder.id === currentFolderId\"\n class=\"tpl:shrink-0\"\n style=\"color: var(--tpl-text-dim)\"\n >\n {{ t.mediaLibrary.currentFolder }}\n </span>\n </button>\n </div>\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport { useI18n } from \"../../composables/useI18n\";\nimport type { MediaFolder } from \"../../types\";\nimport { onClickOutside } from \"@vueuse/core\";\nimport { File, Folder } from \"@lucide/vue\";\nimport { ref } from \"vue\";\n\ndefineProps<{\n folders: MediaFolder[];\n currentFolderId: string | null;\n}>();\n\nconst emit = defineEmits<{\n (e: \"select\", folderId: string | null): void;\n (e: \"close\"): void;\n}>();\n\nconst { t } = useI18n();\nconst pickerRef = ref<HTMLDivElement | null>(null);\n\ninterface FlatFolder {\n id: string;\n name: string;\n depth: number;\n}\n\nfunction flattenFolders(\n folders: MediaFolder[],\n depth: number = 0,\n): FlatFolder[] {\n const result: FlatFolder[] = [];\n for (const folder of folders) {\n result.push({ id: folder.id, name: folder.name, depth });\n if (folder.children?.length) {\n result.push(...flattenFolders(folder.children, depth + 1));\n }\n }\n return result;\n}\n\nonClickOutside(pickerRef, () => {\n emit(\"close\");\n});\n</script>\n\n<template>\n <div\n ref=\"pickerRef\"\n class=\"tpl:absolute tpl:bottom-full tpl:left-0 tpl:z-10 tpl:mb-2 tpl:w-56 tpl:overflow-hidden tpl:rounded-lg tpl:border tpl:shadow-lg\"\n style=\"\n border-color: var(--tpl-border);\n background-color: var(--tpl-bg-elevated);\n \"\n >\n <div class=\"tpl:max-h-56 tpl:overflow-y-auto tpl:py-1\">\n <button\n v-if=\"currentFolderId !== null\"\n class=\"tpl:flex tpl:w-full tpl:items-center tpl:gap-1.5 tpl:px-3 tpl:py-1.5 tpl:text-left tpl:text-xs tpl:transition-colors tpl:duration-100\"\n style=\"color: var(--tpl-text)\"\n @click=\"emit('select', null)\"\n >\n <File class=\"tpl:shrink-0\" :size=\"14\" :stroke-width=\"1.5\" />\n {{ t.mediaLibrary.moveToRoot }}\n </button>\n <button\n v-for=\"folder in flattenFolders(folders)\"\n :key=\"folder.id\"\n class=\"tpl:flex tpl:w-full tpl:items-center tpl:gap-1.5 tpl:py-1.5 tpl:pr-3 tpl:text-left tpl:text-xs tpl:transition-colors tpl:duration-100\"\n :style=\"{\n paddingLeft: `${folder.depth * 16 + 12}px`,\n color:\n folder.id === currentFolderId\n ? 'var(--tpl-text-dim)'\n : 'var(--tpl-text)',\n opacity: folder.id === currentFolderId ? 0.5 : 1,\n }\"\n :disabled=\"folder.id === currentFolderId\"\n @click=\"emit('select', folder.id)\"\n >\n <Folder class=\"tpl:shrink-0\" :size=\"14\" :stroke-width=\"1.5\" />\n <span class=\"tpl:truncate\">{{ folder.name }}</span>\n <span\n v-if=\"folder.id === currentFolderId\"\n class=\"tpl:shrink-0\"\n style=\"color: var(--tpl-text-dim)\"\n >\n {{ t.mediaLibrary.currentFolder }}\n </span>\n </button>\n </div>\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport MediaFileIcon from \"./MediaFileIcon.vue\";\nimport { useI18n } from \"../../composables/useI18n\";\nimport { useMediaCategories } from \"../../composables/useMediaCategories\";\nimport type { MediaConversion, MediaFolder, MediaItem } from \"../../types\";\nimport { Folder } from \"@lucide/vue\";\nimport { computed } from \"vue\";\n\nconst props = defineProps<{\n item: MediaItem;\n folders?: MediaFolder[];\n selectedConversion: MediaConversion;\n}>();\n\nconst emit = defineEmits<{\n (e: \"update:selectedConversion\", value: MediaConversion): void;\n}>();\n\nconst { t } = useI18n();\n\nconst { isImageMimeType } = useMediaCategories();\n\ninterface ConversionOption {\n value: MediaConversion;\n label: string;\n url: string | null;\n}\n\nconst availableConversions = computed((): ConversionOption[] => {\n if (!isImage.value || !props.item.conversions_generated) {\n return [];\n }\n\n const options: ConversionOption[] = [];\n\n if (props.item.small_url) {\n options.push({\n value: \"small\",\n label: t.mediaLibrary.conversionSmall,\n url: props.item.small_url,\n });\n }\n\n if (props.item.medium_url) {\n options.push({\n value: \"medium\",\n label: t.mediaLibrary.conversionMedium,\n url: props.item.medium_url,\n });\n }\n\n if (props.item.large_url) {\n options.push({\n value: \"large\",\n label: t.mediaLibrary.conversionLarge,\n url: props.item.large_url,\n });\n }\n\n // Always add original option\n options.push({\n value: \"original\",\n label: t.mediaLibrary.conversionOriginal,\n url: props.item.url,\n });\n\n return options;\n});\n\nconst hasConversions = computed(\n () => isImage.value && availableConversions.value.length > 1,\n);\n\nconst previewUrl = computed(() => {\n if (!isImage.value) return null;\n\n switch (props.selectedConversion) {\n case \"small\":\n return props.item.small_url || props.item.url;\n case \"medium\":\n return props.item.medium_url || props.item.url;\n case \"large\":\n return props.item.large_url || props.item.url;\n default:\n return props.item.url;\n }\n});\n\nfunction handleConversionChange(event: Event): void {\n const target = event.target as HTMLSelectElement;\n emit(\"update:selectedConversion\", target.value as MediaConversion);\n}\n\nfunction buildFolderPath(\n folderList: MediaFolder[],\n targetId: string,\n currentPath: string[] = [],\n): string[] | null {\n for (const folder of folderList) {\n const newPath = [...currentPath, folder.name];\n if (folder.id === targetId) {\n return newPath;\n }\n if (folder.children) {\n const found = buildFolderPath(folder.children, targetId, newPath);\n if (found) return found;\n }\n }\n return null;\n}\n\nconst folderPath = computed(() => {\n if (!props.item.folder_id || !props.folders) {\n return null;\n }\n const path = buildFolderPath(props.folders, props.item.folder_id);\n return path ? path.join(\"/\") : null;\n});\n\nconst isImage = computed(() => isImageMimeType(props.item.mime_type));\n\nfunction formatSize(bytes: number): string {\n if (bytes < 1024) return `${bytes} B`;\n if (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(1)} KB`;\n return `${(bytes / (1024 * 1024)).toFixed(1)} MB`;\n}\n\nfunction formatDate(dateStr: string): string {\n return new Date(dateStr).toLocaleDateString(undefined, {\n year: \"numeric\",\n month: \"short\",\n day: \"numeric\",\n });\n}\n</script>\n\n<template>\n <div class=\"tpl:flex tpl:items-center tpl:gap-3\">\n <img\n v-if=\"isImage\"\n :src=\"previewUrl ?? undefined\"\n :alt=\"item.alt_text || item.filename\"\n class=\"tpl:size-10 tpl:shrink-0 tpl:rounded tpl:object-cover\"\n style=\"border: 1px solid var(--tpl-border)\"\n />\n <div\n v-else\n class=\"tpl:flex tpl:size-10 tpl:shrink-0 tpl:items-center tpl:justify-center tpl:overflow-hidden tpl:rounded\"\n style=\"border: 1px solid var(--tpl-border)\"\n >\n <MediaFileIcon :mime-type=\"item.mime_type\" class=\"tpl-preview-icon\" />\n </div>\n <div class=\"tpl:min-w-0 tpl:flex-1\">\n <p\n class=\"tpl:truncate tpl:text-xs tpl:font-medium\"\n style=\"color: var(--tpl-text)\"\n >\n {{ item.filename }}\n </p>\n <p\n class=\"tpl:mt-0.5 tpl:text-[10px]\"\n style=\"color: var(--tpl-text-muted)\"\n >\n {{ formatSize(item.size) }}\n · {{ formatDate(item.created_at) }}\n <template v-if=\"isImage && item.width && item.height\">\n · {{ item.width }}×{{ item.height }}px\n </template>\n <template v-if=\"folderPath\">\n ·\n <Folder class=\"tpl:mb-px tpl:inline\" :size=\"9\" :stroke-width=\"2\" />\n {{ folderPath }}\n </template>\n </p>\n <p\n v-if=\"isImage\"\n class=\"tpl:mt-0.5 tpl:truncate tpl:text-[10px] tpl:italic\"\n :class=\"{ 'tpl:invisible': !item.alt_text }\"\n style=\"color: var(--tpl-text-dim)\"\n >\n {{ item.alt_text || \" \" }}\n </p>\n </div>\n <!-- Conversion selector -->\n <div v-if=\"hasConversions\" class=\"tpl:shrink-0\">\n <label\n class=\"tpl:block tpl:text-[10px]\"\n style=\"color: var(--tpl-text-muted)\"\n >\n {{ t.mediaLibrary.conversionLabel }}\n </label>\n <select\n class=\"tpl:mt-0.5 tpl:rounded-md tpl:border tpl:py-1 tpl:pr-6 tpl:pl-2 tpl:text-xs tpl:outline-none\"\n style=\"\n border-color: var(--tpl-border);\n background-color: var(--tpl-bg);\n color: var(--tpl-text);\n \"\n :value=\"selectedConversion\"\n @change=\"handleConversionChange\"\n >\n <option\n v-for=\"option in availableConversions\"\n :key=\"option.value\"\n :value=\"option.value\"\n >\n {{ option.label }}\n </option>\n </select>\n </div>\n </div>\n</template>\n\n<style scoped>\n.tpl-preview-icon {\n transform: scale(0.45);\n transform-origin: center;\n}\n</style>\n","<script setup lang=\"ts\">\nimport MediaFileIcon from \"./MediaFileIcon.vue\";\nimport { useI18n } from \"../../composables/useI18n\";\nimport { useMediaCategories } from \"../../composables/useMediaCategories\";\nimport type { MediaConversion, MediaFolder, MediaItem } from \"../../types\";\nimport { Folder } from \"@lucide/vue\";\nimport { computed } from \"vue\";\n\nconst props = defineProps<{\n item: MediaItem;\n folders?: MediaFolder[];\n selectedConversion: MediaConversion;\n}>();\n\nconst emit = defineEmits<{\n (e: \"update:selectedConversion\", value: MediaConversion): void;\n}>();\n\nconst { t } = useI18n();\n\nconst { isImageMimeType } = useMediaCategories();\n\ninterface ConversionOption {\n value: MediaConversion;\n label: string;\n url: string | null;\n}\n\nconst availableConversions = computed((): ConversionOption[] => {\n if (!isImage.value || !props.item.conversions_generated) {\n return [];\n }\n\n const options: ConversionOption[] = [];\n\n if (props.item.small_url) {\n options.push({\n value: \"small\",\n label: t.mediaLibrary.conversionSmall,\n url: props.item.small_url,\n });\n }\n\n if (props.item.medium_url) {\n options.push({\n value: \"medium\",\n label: t.mediaLibrary.conversionMedium,\n url: props.item.medium_url,\n });\n }\n\n if (props.item.large_url) {\n options.push({\n value: \"large\",\n label: t.mediaLibrary.conversionLarge,\n url: props.item.large_url,\n });\n }\n\n // Always add original option\n options.push({\n value: \"original\",\n label: t.mediaLibrary.conversionOriginal,\n url: props.item.url,\n });\n\n return options;\n});\n\nconst hasConversions = computed(\n () => isImage.value && availableConversions.value.length > 1,\n);\n\nconst previewUrl = computed(() => {\n if (!isImage.value) return null;\n\n switch (props.selectedConversion) {\n case \"small\":\n return props.item.small_url || props.item.url;\n case \"medium\":\n return props.item.medium_url || props.item.url;\n case \"large\":\n return props.item.large_url || props.item.url;\n default:\n return props.item.url;\n }\n});\n\nfunction handleConversionChange(event: Event): void {\n const target = event.target as HTMLSelectElement;\n emit(\"update:selectedConversion\", target.value as MediaConversion);\n}\n\nfunction buildFolderPath(\n folderList: MediaFolder[],\n targetId: string,\n currentPath: string[] = [],\n): string[] | null {\n for (const folder of folderList) {\n const newPath = [...currentPath, folder.name];\n if (folder.id === targetId) {\n return newPath;\n }\n if (folder.children) {\n const found = buildFolderPath(folder.children, targetId, newPath);\n if (found) return found;\n }\n }\n return null;\n}\n\nconst folderPath = computed(() => {\n if (!props.item.folder_id || !props.folders) {\n return null;\n }\n const path = buildFolderPath(props.folders, props.item.folder_id);\n return path ? path.join(\"/\") : null;\n});\n\nconst isImage = computed(() => isImageMimeType(props.item.mime_type));\n\nfunction formatSize(bytes: number): string {\n if (bytes < 1024) return `${bytes} B`;\n if (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(1)} KB`;\n return `${(bytes / (1024 * 1024)).toFixed(1)} MB`;\n}\n\nfunction formatDate(dateStr: string): string {\n return new Date(dateStr).toLocaleDateString(undefined, {\n year: \"numeric\",\n month: \"short\",\n day: \"numeric\",\n });\n}\n</script>\n\n<template>\n <div class=\"tpl:flex tpl:items-center tpl:gap-3\">\n <img\n v-if=\"isImage\"\n :src=\"previewUrl ?? undefined\"\n :alt=\"item.alt_text || item.filename\"\n class=\"tpl:size-10 tpl:shrink-0 tpl:rounded tpl:object-cover\"\n style=\"border: 1px solid var(--tpl-border)\"\n />\n <div\n v-else\n class=\"tpl:flex tpl:size-10 tpl:shrink-0 tpl:items-center tpl:justify-center tpl:overflow-hidden tpl:rounded\"\n style=\"border: 1px solid var(--tpl-border)\"\n >\n <MediaFileIcon :mime-type=\"item.mime_type\" class=\"tpl-preview-icon\" />\n </div>\n <div class=\"tpl:min-w-0 tpl:flex-1\">\n <p\n class=\"tpl:truncate tpl:text-xs tpl:font-medium\"\n style=\"color: var(--tpl-text)\"\n >\n {{ item.filename }}\n </p>\n <p\n class=\"tpl:mt-0.5 tpl:text-[10px]\"\n style=\"color: var(--tpl-text-muted)\"\n >\n {{ formatSize(item.size) }}\n · {{ formatDate(item.created_at) }}\n <template v-if=\"isImage && item.width && item.height\">\n · {{ item.width }}×{{ item.height }}px\n </template>\n <template v-if=\"folderPath\">\n ·\n <Folder class=\"tpl:mb-px tpl:inline\" :size=\"9\" :stroke-width=\"2\" />\n {{ folderPath }}\n </template>\n </p>\n <p\n v-if=\"isImage\"\n class=\"tpl:mt-0.5 tpl:truncate tpl:text-[10px] tpl:italic\"\n :class=\"{ 'tpl:invisible': !item.alt_text }\"\n style=\"color: var(--tpl-text-dim)\"\n >\n {{ item.alt_text || \" \" }}\n </p>\n </div>\n <!-- Conversion selector -->\n <div v-if=\"hasConversions\" class=\"tpl:shrink-0\">\n <label\n class=\"tpl:block tpl:text-[10px]\"\n style=\"color: var(--tpl-text-muted)\"\n >\n {{ t.mediaLibrary.conversionLabel }}\n </label>\n <select\n class=\"tpl:mt-0.5 tpl:rounded-md tpl:border tpl:py-1 tpl:pr-6 tpl:pl-2 tpl:text-xs tpl:outline-none\"\n style=\"\n border-color: var(--tpl-border);\n background-color: var(--tpl-bg);\n color: var(--tpl-text);\n \"\n :value=\"selectedConversion\"\n @change=\"handleConversionChange\"\n >\n <option\n v-for=\"option in availableConversions\"\n :key=\"option.value\"\n :value=\"option.value\"\n >\n {{ option.label }}\n </option>\n </select>\n </div>\n </div>\n</template>\n\n<style scoped>\n.tpl-preview-icon {\n transform: scale(0.45);\n transform-origin: center;\n}\n</style>\n","<script setup lang=\"ts\">\nimport { useI18n } from \"../../composables/useI18n\";\nimport { POPOVER_TARGET_KEY } from \"../../keys\";\nimport type { MediaItem, MediaUsageInfo } from \"../../types\";\nimport { computed, inject, ref, watch, type Ref } from \"vue\";\n\nconst props = defineProps<{\n visible: boolean;\n item: MediaItem | null;\n usageInfo: MediaUsageInfo | null;\n isReplacing: boolean;\n error: string | null;\n}>();\n\nconst emit = defineEmits<{\n (e: \"replace\", file: File): void;\n (e: \"close\"): void;\n}>();\n\nconst { t } = useI18n();\nconst tplUiTheme = inject<Ref<\"light\" | \"dark\">>(\"tplUiTheme\");\nconst popoverTarget = inject(POPOVER_TARGET_KEY, ref<HTMLElement | null>(null));\n\nconst fileInputRef = ref<HTMLInputElement | null>(null);\nconst selectedFile = ref<File | null>(null);\n\nconst extension = computed(() => {\n if (!props.item) {\n return \"\";\n }\n\n const parts = props.item.filename.split(\".\");\n return parts.length > 1 ? parts[parts.length - 1].toLowerCase() : \"\";\n});\n\nconst acceptPattern = computed(() => {\n return extension.value ? `.${extension.value}` : \"*\";\n});\n\nconst hasUsage = computed(() => {\n return (props.usageInfo?.template_count ?? 0) > 0;\n});\n\nwatch(\n () => props.visible,\n (visible) => {\n if (!visible) {\n selectedFile.value = null;\n if (fileInputRef.value) {\n fileInputRef.value.value = \"\";\n }\n }\n },\n);\n\nfunction handleFileChange(event: Event): void {\n const input = event.target as HTMLInputElement;\n if (input.files && input.files.length > 0) {\n selectedFile.value = input.files[0];\n }\n}\n\nfunction handleReplace(): void {\n if (selectedFile.value) {\n emit(\"replace\", selectedFile.value);\n }\n}\n\nfunction handleKeydown(event: KeyboardEvent): void {\n if (event.key === \"Escape\") {\n emit(\"close\");\n }\n}\n</script>\n\n<template>\n <Teleport :to=\"popoverTarget || 'body'\">\n <Transition\n enter-active-class=\"tpl:transition tpl:ease-out tpl:duration-150\"\n enter-from-class=\"tpl:opacity-0\"\n enter-to-class=\"tpl:opacity-100\"\n leave-active-class=\"tpl:transition tpl:ease-in tpl:duration-100\"\n leave-from-class=\"tpl:opacity-100\"\n leave-to-class=\"tpl:opacity-0\"\n >\n <div\n v-if=\"visible && item\"\n :data-tpl-theme=\"tplUiTheme\"\n class=\"tpl tpl:fixed tpl:inset-0 tpl:z-[10000] tpl:flex tpl:items-center tpl:justify-center\"\n style=\"background-color: var(--tpl-overlay)\"\n @click.self=\"emit('close')\"\n @keydown=\"handleKeydown\"\n >\n <div\n class=\"tpl:mx-4 tpl:w-full tpl:max-w-sm tpl:rounded-lg tpl:p-5 tpl:shadow-xl\"\n style=\"background-color: var(--tpl-bg-elevated)\"\n >\n <h3\n class=\"tpl:mb-2 tpl:text-sm tpl:font-semibold\"\n style=\"color: var(--tpl-text)\"\n >\n {{ t.mediaLibrary.replaceWarningTitle }}\n </h3>\n\n <!-- Warning message -->\n <p class=\"tpl:mb-2 tpl:text-xs\" style=\"color: var(--tpl-text-muted)\">\n {{\n t.mediaLibrary.replaceWarningMessage.replace(\n \"{extension}\",\n `.${extension}`,\n )\n }}\n </p>\n\n <!-- Usage warning -->\n <p\n v-if=\"hasUsage\"\n class=\"tpl:mb-3 tpl:text-xs\"\n style=\"color: var(--tpl-warning)\"\n >\n {{\n t.mediaLibrary.replaceWarningUsageNote.replace(\n \"{count}\",\n usageInfo!.template_count.toString(),\n )\n }}\n </p>\n\n <!-- Current file info -->\n <div\n class=\"tpl:mb-3 tpl:rounded tpl:border tpl:p-2\"\n style=\"border-color: var(--tpl-border)\"\n >\n <p\n class=\"tpl:truncate tpl:text-xs tpl:font-medium\"\n style=\"color: var(--tpl-text)\"\n >\n {{ item.filename }}\n </p>\n </div>\n\n <!-- File input -->\n <div class=\"tpl:mb-4\">\n <label\n class=\"tpl:mb-1 tpl:block tpl:text-xs tpl:font-medium\"\n style=\"color: var(--tpl-text-muted)\"\n >\n {{ t.mediaLibrary.replaceSelectFile }}\n </label>\n <input\n ref=\"fileInputRef\"\n type=\"file\"\n :accept=\"acceptPattern\"\n class=\"tpl:w-full tpl:rounded-md tpl:border tpl:px-3 tpl:py-1.5 tpl:text-xs\"\n style=\"\n border-color: var(--tpl-border);\n background-color: var(--tpl-bg);\n color: var(--tpl-text);\n \"\n @change=\"handleFileChange\"\n />\n </div>\n\n <!-- Error message -->\n <p\n v-if=\"error\"\n class=\"tpl:mb-3 tpl:text-xs\"\n style=\"color: var(--tpl-danger)\"\n >\n {{ error }}\n </p>\n\n <!-- Actions -->\n <div class=\"tpl:flex tpl:justify-end tpl:gap-2\">\n <button\n class=\"tpl:cursor-pointer tpl:rounded-md tpl:border tpl:px-3 tpl:py-1.5 tpl:text-xs tpl:font-medium tpl:transition-all tpl:duration-150\"\n style=\"\n border-color: var(--tpl-border);\n color: var(--tpl-text);\n background-color: var(--tpl-bg);\n \"\n :disabled=\"isReplacing\"\n @click=\"emit('close')\"\n >\n {{ t.mediaLibrary.cancel }}\n </button>\n <button\n class=\"tpl:cursor-pointer tpl:rounded-md tpl:px-3 tpl:py-1.5 tpl:text-xs tpl:font-medium tpl:text-white tpl:transition-all tpl:duration-150 tpl:disabled:cursor-not-allowed tpl:disabled:opacity-50\"\n style=\"\n background: linear-gradient(\n 135deg,\n var(--tpl-primary),\n var(--tpl-primary-hover)\n );\n \"\n :disabled=\"!selectedFile || isReplacing\"\n @click=\"handleReplace\"\n >\n {{\n isReplacing ? t.mediaLibrary.replacing : t.mediaLibrary.replace\n }}\n </button>\n </div>\n </div>\n </div>\n </Transition>\n </Teleport>\n</template>\n","<script setup lang=\"ts\">\nimport { useI18n } from \"../../composables/useI18n\";\nimport { POPOVER_TARGET_KEY } from \"../../keys\";\nimport type { MediaItem, MediaUsageInfo } from \"../../types\";\nimport { computed, inject, ref, watch, type Ref } from \"vue\";\n\nconst props = defineProps<{\n visible: boolean;\n item: MediaItem | null;\n usageInfo: MediaUsageInfo | null;\n isReplacing: boolean;\n error: string | null;\n}>();\n\nconst emit = defineEmits<{\n (e: \"replace\", file: File): void;\n (e: \"close\"): void;\n}>();\n\nconst { t } = useI18n();\nconst tplUiTheme = inject<Ref<\"light\" | \"dark\">>(\"tplUiTheme\");\nconst popoverTarget = inject(POPOVER_TARGET_KEY, ref<HTMLElement | null>(null));\n\nconst fileInputRef = ref<HTMLInputElement | null>(null);\nconst selectedFile = ref<File | null>(null);\n\nconst extension = computed(() => {\n if (!props.item) {\n return \"\";\n }\n\n const parts = props.item.filename.split(\".\");\n return parts.length > 1 ? parts[parts.length - 1].toLowerCase() : \"\";\n});\n\nconst acceptPattern = computed(() => {\n return extension.value ? `.${extension.value}` : \"*\";\n});\n\nconst hasUsage = computed(() => {\n return (props.usageInfo?.template_count ?? 0) > 0;\n});\n\nwatch(\n () => props.visible,\n (visible) => {\n if (!visible) {\n selectedFile.value = null;\n if (fileInputRef.value) {\n fileInputRef.value.value = \"\";\n }\n }\n },\n);\n\nfunction handleFileChange(event: Event): void {\n const input = event.target as HTMLInputElement;\n if (input.files && input.files.length > 0) {\n selectedFile.value = input.files[0];\n }\n}\n\nfunction handleReplace(): void {\n if (selectedFile.value) {\n emit(\"replace\", selectedFile.value);\n }\n}\n\nfunction handleKeydown(event: KeyboardEvent): void {\n if (event.key === \"Escape\") {\n emit(\"close\");\n }\n}\n</script>\n\n<template>\n <Teleport :to=\"popoverTarget || 'body'\">\n <Transition\n enter-active-class=\"tpl:transition tpl:ease-out tpl:duration-150\"\n enter-from-class=\"tpl:opacity-0\"\n enter-to-class=\"tpl:opacity-100\"\n leave-active-class=\"tpl:transition tpl:ease-in tpl:duration-100\"\n leave-from-class=\"tpl:opacity-100\"\n leave-to-class=\"tpl:opacity-0\"\n >\n <div\n v-if=\"visible && item\"\n :data-tpl-theme=\"tplUiTheme\"\n class=\"tpl tpl:fixed tpl:inset-0 tpl:z-[10000] tpl:flex tpl:items-center tpl:justify-center\"\n style=\"background-color: var(--tpl-overlay)\"\n @click.self=\"emit('close')\"\n @keydown=\"handleKeydown\"\n >\n <div\n class=\"tpl:mx-4 tpl:w-full tpl:max-w-sm tpl:rounded-lg tpl:p-5 tpl:shadow-xl\"\n style=\"background-color: var(--tpl-bg-elevated)\"\n >\n <h3\n class=\"tpl:mb-2 tpl:text-sm tpl:font-semibold\"\n style=\"color: var(--tpl-text)\"\n >\n {{ t.mediaLibrary.replaceWarningTitle }}\n </h3>\n\n <!-- Warning message -->\n <p class=\"tpl:mb-2 tpl:text-xs\" style=\"color: var(--tpl-text-muted)\">\n {{\n t.mediaLibrary.replaceWarningMessage.replace(\n \"{extension}\",\n `.${extension}`,\n )\n }}\n </p>\n\n <!-- Usage warning -->\n <p\n v-if=\"hasUsage\"\n class=\"tpl:mb-3 tpl:text-xs\"\n style=\"color: var(--tpl-warning)\"\n >\n {{\n t.mediaLibrary.replaceWarningUsageNote.replace(\n \"{count}\",\n usageInfo!.template_count.toString(),\n )\n }}\n </p>\n\n <!-- Current file info -->\n <div\n class=\"tpl:mb-3 tpl:rounded tpl:border tpl:p-2\"\n style=\"border-color: var(--tpl-border)\"\n >\n <p\n class=\"tpl:truncate tpl:text-xs tpl:font-medium\"\n style=\"color: var(--tpl-text)\"\n >\n {{ item.filename }}\n </p>\n </div>\n\n <!-- File input -->\n <div class=\"tpl:mb-4\">\n <label\n class=\"tpl:mb-1 tpl:block tpl:text-xs tpl:font-medium\"\n style=\"color: var(--tpl-text-muted)\"\n >\n {{ t.mediaLibrary.replaceSelectFile }}\n </label>\n <input\n ref=\"fileInputRef\"\n type=\"file\"\n :accept=\"acceptPattern\"\n class=\"tpl:w-full tpl:rounded-md tpl:border tpl:px-3 tpl:py-1.5 tpl:text-xs\"\n style=\"\n border-color: var(--tpl-border);\n background-color: var(--tpl-bg);\n color: var(--tpl-text);\n \"\n @change=\"handleFileChange\"\n />\n </div>\n\n <!-- Error message -->\n <p\n v-if=\"error\"\n class=\"tpl:mb-3 tpl:text-xs\"\n style=\"color: var(--tpl-danger)\"\n >\n {{ error }}\n </p>\n\n <!-- Actions -->\n <div class=\"tpl:flex tpl:justify-end tpl:gap-2\">\n <button\n class=\"tpl:cursor-pointer tpl:rounded-md tpl:border tpl:px-3 tpl:py-1.5 tpl:text-xs tpl:font-medium tpl:transition-all tpl:duration-150\"\n style=\"\n border-color: var(--tpl-border);\n color: var(--tpl-text);\n background-color: var(--tpl-bg);\n \"\n :disabled=\"isReplacing\"\n @click=\"emit('close')\"\n >\n {{ t.mediaLibrary.cancel }}\n </button>\n <button\n class=\"tpl:cursor-pointer tpl:rounded-md tpl:px-3 tpl:py-1.5 tpl:text-xs tpl:font-medium tpl:text-white tpl:transition-all tpl:duration-150 tpl:disabled:cursor-not-allowed tpl:disabled:opacity-50\"\n style=\"\n background: linear-gradient(\n 135deg,\n var(--tpl-primary),\n var(--tpl-primary-hover)\n );\n \"\n :disabled=\"!selectedFile || isReplacing\"\n @click=\"handleReplace\"\n >\n {{\n isReplacing ? t.mediaLibrary.replacing : t.mediaLibrary.replace\n }}\n </button>\n </div>\n </div>\n </div>\n </Transition>\n </Teleport>\n</template>\n","<script setup lang=\"ts\">\nimport { useI18n } from \"../../composables/useI18n\";\nimport { useMediaCategories } from \"../../composables/useMediaCategories\";\nimport { useDropZone, useFileDialog } from \"@vueuse/core\";\nimport { LoaderCircle, Upload } from \"@lucide/vue\";\nimport { ref } from \"vue\";\n\ndefineProps<{\n isUploading: boolean;\n uploadProgress: { current: number; total: number } | null;\n}>();\n\nconst emit = defineEmits<{\n (e: \"upload\", files: File[]): void;\n}>();\n\nconst { t, format } = useI18n();\n\nconst { allAcceptedMimeTypes, allAcceptedInputString, maxFileSize } =\n useMediaCategories();\n\nconst dropZoneRef = ref<HTMLDivElement>();\n\nfunction validateFiles(fileList: File[] | FileList): File[] {\n const valid: File[] = [];\n for (const file of Array.from(fileList)) {\n if (\n allAcceptedMimeTypes.value.includes(file.type) &&\n file.size <= maxFileSize.value\n ) {\n valid.push(file);\n }\n }\n return valid;\n}\n\nfunction emitValidFiles(files: File[] | FileList): void {\n const valid = validateFiles(files);\n if (valid.length) {\n emit(\"upload\", valid);\n }\n}\n\nconst { isOverDropZone } = useDropZone(dropZoneRef, {\n onDrop: (files) => {\n if (files?.length) {\n emitValidFiles(files);\n }\n },\n});\n\nconst { open: openFilePicker, onChange } = useFileDialog({\n accept: allAcceptedInputString.value,\n multiple: true,\n});\n\nonChange((fileList) => {\n if (fileList?.length) {\n emitValidFiles(fileList);\n }\n});\n</script>\n\n<template>\n <div\n ref=\"dropZoneRef\"\n class=\"tpl-upload-zone tpl:flex tpl:cursor-pointer tpl:flex-col tpl:items-center tpl:justify-center tpl:rounded-lg tpl:border-2 tpl:border-dashed tpl:p-5 tpl:text-center tpl:transition-all tpl:duration-150\"\n :class=\"isOverDropZone ? 'tpl-upload-zone-active' : ''\"\n style=\"\n border-color: var(--tpl-border-light);\n background-color: var(--tpl-bg);\n \"\n @click=\"openFilePicker()\"\n >\n <div v-if=\"isUploading\" class=\"tpl:flex tpl:items-center tpl:gap-2\">\n <LoaderCircle\n class=\"tpl-spinner\"\n :size=\"20\"\n :stroke-width=\"2\"\n style=\"color: var(--tpl-primary)\"\n />\n <span class=\"tpl:text-xs\" style=\"color: var(--tpl-text-muted)\">{{\n uploadProgress && uploadProgress.total > 1\n ? format(t.mediaLibrary.uploadingProgress, {\n current: uploadProgress.current,\n total: uploadProgress.total,\n })\n : t.mediaLibrary.uploading\n }}</span>\n </div>\n <template v-else>\n <Upload\n class=\"tpl:mb-2\"\n :size=\"24\"\n :stroke-width=\"1.5\"\n style=\"color: var(--tpl-text-dim)\"\n />\n <p class=\"tpl:text-xs\" style=\"color: var(--tpl-text-muted)\">\n {{ t.mediaLibrary.dropOrClick }}\n </p>\n <p class=\"tpl:mt-1 tpl:text-[10px]\" style=\"color: var(--tpl-text-dim)\">\n {{ t.mediaLibrary.acceptedFormats }}\n </p>\n </template>\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport { useI18n } from \"../../composables/useI18n\";\nimport { useMediaCategories } from \"../../composables/useMediaCategories\";\nimport { useDropZone, useFileDialog } from \"@vueuse/core\";\nimport { LoaderCircle, Upload } from \"@lucide/vue\";\nimport { ref } from \"vue\";\n\ndefineProps<{\n isUploading: boolean;\n uploadProgress: { current: number; total: number } | null;\n}>();\n\nconst emit = defineEmits<{\n (e: \"upload\", files: File[]): void;\n}>();\n\nconst { t, format } = useI18n();\n\nconst { allAcceptedMimeTypes, allAcceptedInputString, maxFileSize } =\n useMediaCategories();\n\nconst dropZoneRef = ref<HTMLDivElement>();\n\nfunction validateFiles(fileList: File[] | FileList): File[] {\n const valid: File[] = [];\n for (const file of Array.from(fileList)) {\n if (\n allAcceptedMimeTypes.value.includes(file.type) &&\n file.size <= maxFileSize.value\n ) {\n valid.push(file);\n }\n }\n return valid;\n}\n\nfunction emitValidFiles(files: File[] | FileList): void {\n const valid = validateFiles(files);\n if (valid.length) {\n emit(\"upload\", valid);\n }\n}\n\nconst { isOverDropZone } = useDropZone(dropZoneRef, {\n onDrop: (files) => {\n if (files?.length) {\n emitValidFiles(files);\n }\n },\n});\n\nconst { open: openFilePicker, onChange } = useFileDialog({\n accept: allAcceptedInputString.value,\n multiple: true,\n});\n\nonChange((fileList) => {\n if (fileList?.length) {\n emitValidFiles(fileList);\n }\n});\n</script>\n\n<template>\n <div\n ref=\"dropZoneRef\"\n class=\"tpl-upload-zone tpl:flex tpl:cursor-pointer tpl:flex-col tpl:items-center tpl:justify-center tpl:rounded-lg tpl:border-2 tpl:border-dashed tpl:p-5 tpl:text-center tpl:transition-all tpl:duration-150\"\n :class=\"isOverDropZone ? 'tpl-upload-zone-active' : ''\"\n style=\"\n border-color: var(--tpl-border-light);\n background-color: var(--tpl-bg);\n \"\n @click=\"openFilePicker()\"\n >\n <div v-if=\"isUploading\" class=\"tpl:flex tpl:items-center tpl:gap-2\">\n <LoaderCircle\n class=\"tpl-spinner\"\n :size=\"20\"\n :stroke-width=\"2\"\n style=\"color: var(--tpl-primary)\"\n />\n <span class=\"tpl:text-xs\" style=\"color: var(--tpl-text-muted)\">{{\n uploadProgress && uploadProgress.total > 1\n ? format(t.mediaLibrary.uploadingProgress, {\n current: uploadProgress.current,\n total: uploadProgress.total,\n })\n : t.mediaLibrary.uploading\n }}</span>\n </div>\n <template v-else>\n <Upload\n class=\"tpl:mb-2\"\n :size=\"24\"\n :stroke-width=\"1.5\"\n style=\"color: var(--tpl-text-dim)\"\n />\n <p class=\"tpl:text-xs\" style=\"color: var(--tpl-text-muted)\">\n {{ t.mediaLibrary.dropOrClick }}\n </p>\n <p class=\"tpl:mt-1 tpl:text-[10px]\" style=\"color: var(--tpl-text-dim)\">\n {{ t.mediaLibrary.acceptedFormats }}\n </p>\n </template>\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport { useI18n } from \"../../composables/useI18n\";\nimport { computed, ref } from \"vue\";\n\nconst props = defineProps<{\n usedBytes: number;\n limitBytes: number;\n size?: number;\n}>();\n\nconst { t, format } = useI18n();\nconst showTooltip = ref(false);\n\nconst size = computed(() => props.size ?? 24);\nconst strokeWidth = computed(() => Math.max(2, size.value / 8));\nconst radius = computed(() => (size.value - strokeWidth.value) / 2);\nconst circumference = computed(() => 2 * Math.PI * radius.value);\n\nconst percentage = computed(() => {\n if (props.limitBytes <= 0) return 0;\n return Math.min(100, (props.usedBytes / props.limitBytes) * 100);\n});\n\nconst strokeDashoffset = computed(() => {\n return circumference.value - (percentage.value / 100) * circumference.value;\n});\n\nconst progressColor = computed(() => {\n if (percentage.value >= 95) {\n return \"var(--tpl-danger)\";\n }\n if (percentage.value >= 75) {\n return \"var(--tpl-warning, #f59e0b)\";\n }\n return \"var(--tpl-primary)\";\n});\n\nfunction formatBytes(bytes: number): string {\n if (bytes === 0) return \"0 B\";\n const k = 1024;\n const sizes = [\"B\", \"KB\", \"MB\", \"GB\"];\n const i = Math.floor(Math.log(bytes) / Math.log(k));\n const value = bytes / Math.pow(k, i);\n // Show 1 decimal for MB/GB, no decimals for B/KB\n const decimals = i >= 2 ? 1 : 0;\n return `${value.toFixed(decimals)} ${sizes[i]}`;\n}\n\nconst usedFormatted = computed(() => formatBytes(props.usedBytes));\nconst limitFormatted = computed(() => formatBytes(props.limitBytes));\nconst remainingBytes = computed(() =>\n Math.max(0, props.limitBytes - props.usedBytes),\n);\nconst remainingFormatted = computed(() => formatBytes(remainingBytes.value));\n\nconst tooltipText = computed(() =>\n format(t.mediaLibrary.storageTooltip, {\n used: usedFormatted.value,\n total: limitFormatted.value,\n remaining: remainingFormatted.value,\n }),\n);\n</script>\n\n<template>\n <div\n class=\"tpl:relative tpl:inline-flex tpl:cursor-help tpl:items-center tpl:justify-center\"\n @mouseenter=\"showTooltip = true\"\n @mouseleave=\"showTooltip = false\"\n >\n <svg\n :width=\"size\"\n :height=\"size\"\n class=\"tpl:-rotate-90\"\n :viewBox=\"`0 0 ${size} ${size}`\"\n >\n <!-- Background circle -->\n <circle\n :cx=\"size / 2\"\n :cy=\"size / 2\"\n :r=\"radius\"\n fill=\"none\"\n :stroke-width=\"strokeWidth\"\n style=\"stroke: var(--tpl-border)\"\n />\n <!-- Progress circle -->\n <circle\n :cx=\"size / 2\"\n :cy=\"size / 2\"\n :r=\"radius\"\n fill=\"none\"\n :stroke-width=\"strokeWidth\"\n :stroke=\"progressColor\"\n stroke-linecap=\"round\"\n :stroke-dasharray=\"circumference\"\n :stroke-dashoffset=\"strokeDashoffset\"\n class=\"tpl:transition-all tpl:duration-300 tpl:ease-out\"\n />\n </svg>\n\n <!-- Tooltip -->\n <Transition\n enter-active-class=\"tpl:transition tpl:ease-out tpl:duration-150\"\n enter-from-class=\"tpl:opacity-0 tpl:translate-y-1\"\n enter-to-class=\"tpl:opacity-100 tpl:translate-y-0\"\n leave-active-class=\"tpl:transition tpl:ease-in tpl:duration-100\"\n leave-from-class=\"tpl:opacity-100 tpl:translate-y-0\"\n leave-to-class=\"tpl:opacity-0 tpl:translate-y-1\"\n >\n <div\n v-if=\"showTooltip\"\n class=\"tpl:absolute tpl:top-full tpl:left-1/2 tpl:z-50 tpl:mt-2 tpl:-translate-x-1/2 tpl:rounded-md tpl:px-2.5 tpl:py-1.5 tpl:text-xs tpl:whitespace-nowrap tpl:shadow-lg\"\n style=\"background-color: var(--tpl-text); color: var(--tpl-bg-elevated)\"\n >\n {{ tooltipText }}\n <div\n class=\"tpl:absolute tpl:-top-1 tpl:left-1/2 tpl:size-2 tpl:-translate-x-1/2 tpl:rotate-45\"\n style=\"background-color: var(--tpl-text)\"\n />\n </div>\n </Transition>\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport { useI18n } from \"../../composables/useI18n\";\nimport { computed, ref } from \"vue\";\n\nconst props = defineProps<{\n usedBytes: number;\n limitBytes: number;\n size?: number;\n}>();\n\nconst { t, format } = useI18n();\nconst showTooltip = ref(false);\n\nconst size = computed(() => props.size ?? 24);\nconst strokeWidth = computed(() => Math.max(2, size.value / 8));\nconst radius = computed(() => (size.value - strokeWidth.value) / 2);\nconst circumference = computed(() => 2 * Math.PI * radius.value);\n\nconst percentage = computed(() => {\n if (props.limitBytes <= 0) return 0;\n return Math.min(100, (props.usedBytes / props.limitBytes) * 100);\n});\n\nconst strokeDashoffset = computed(() => {\n return circumference.value - (percentage.value / 100) * circumference.value;\n});\n\nconst progressColor = computed(() => {\n if (percentage.value >= 95) {\n return \"var(--tpl-danger)\";\n }\n if (percentage.value >= 75) {\n return \"var(--tpl-warning, #f59e0b)\";\n }\n return \"var(--tpl-primary)\";\n});\n\nfunction formatBytes(bytes: number): string {\n if (bytes === 0) return \"0 B\";\n const k = 1024;\n const sizes = [\"B\", \"KB\", \"MB\", \"GB\"];\n const i = Math.floor(Math.log(bytes) / Math.log(k));\n const value = bytes / Math.pow(k, i);\n // Show 1 decimal for MB/GB, no decimals for B/KB\n const decimals = i >= 2 ? 1 : 0;\n return `${value.toFixed(decimals)} ${sizes[i]}`;\n}\n\nconst usedFormatted = computed(() => formatBytes(props.usedBytes));\nconst limitFormatted = computed(() => formatBytes(props.limitBytes));\nconst remainingBytes = computed(() =>\n Math.max(0, props.limitBytes - props.usedBytes),\n);\nconst remainingFormatted = computed(() => formatBytes(remainingBytes.value));\n\nconst tooltipText = computed(() =>\n format(t.mediaLibrary.storageTooltip, {\n used: usedFormatted.value,\n total: limitFormatted.value,\n remaining: remainingFormatted.value,\n }),\n);\n</script>\n\n<template>\n <div\n class=\"tpl:relative tpl:inline-flex tpl:cursor-help tpl:items-center tpl:justify-center\"\n @mouseenter=\"showTooltip = true\"\n @mouseleave=\"showTooltip = false\"\n >\n <svg\n :width=\"size\"\n :height=\"size\"\n class=\"tpl:-rotate-90\"\n :viewBox=\"`0 0 ${size} ${size}`\"\n >\n <!-- Background circle -->\n <circle\n :cx=\"size / 2\"\n :cy=\"size / 2\"\n :r=\"radius\"\n fill=\"none\"\n :stroke-width=\"strokeWidth\"\n style=\"stroke: var(--tpl-border)\"\n />\n <!-- Progress circle -->\n <circle\n :cx=\"size / 2\"\n :cy=\"size / 2\"\n :r=\"radius\"\n fill=\"none\"\n :stroke-width=\"strokeWidth\"\n :stroke=\"progressColor\"\n stroke-linecap=\"round\"\n :stroke-dasharray=\"circumference\"\n :stroke-dashoffset=\"strokeDashoffset\"\n class=\"tpl:transition-all tpl:duration-300 tpl:ease-out\"\n />\n </svg>\n\n <!-- Tooltip -->\n <Transition\n enter-active-class=\"tpl:transition tpl:ease-out tpl:duration-150\"\n enter-from-class=\"tpl:opacity-0 tpl:translate-y-1\"\n enter-to-class=\"tpl:opacity-100 tpl:translate-y-0\"\n leave-active-class=\"tpl:transition tpl:ease-in tpl:duration-100\"\n leave-from-class=\"tpl:opacity-100 tpl:translate-y-0\"\n leave-to-class=\"tpl:opacity-0 tpl:translate-y-1\"\n >\n <div\n v-if=\"showTooltip\"\n class=\"tpl:absolute tpl:top-full tpl:left-1/2 tpl:z-50 tpl:mt-2 tpl:-translate-x-1/2 tpl:rounded-md tpl:px-2.5 tpl:py-1.5 tpl:text-xs tpl:whitespace-nowrap tpl:shadow-lg\"\n style=\"background-color: var(--tpl-text); color: var(--tpl-bg-elevated)\"\n >\n {{ tooltipText }}\n <div\n class=\"tpl:absolute tpl:-top-1 tpl:left-1/2 tpl:size-2 tpl:-translate-x-1/2 tpl:rotate-45\"\n style=\"background-color: var(--tpl-text)\"\n />\n </div>\n </Transition>\n </div>\n</template>\n","import type { CropData } from \"../components/media/MediaEditModal.vue\";\nimport type { MediaConversion, MediaItem } from \"../types\";\nimport type { useMediaLibrary } from \"../composable\";\n\ntype UseMediaLibraryReturn = ReturnType<typeof useMediaLibrary>;\nimport { useClipboard, useDebounceFn } from \"@vueuse/core\";\nimport { computed, ref, watch, type ComputedRef, type Ref } from \"vue\";\n\nexport interface UseMediaLibraryUIOptions {\n library: UseMediaLibraryReturn;\n canUseMediaFolders: ComputedRef<boolean>;\n translations:\n | { mediaLibrary: Record<string, string> }\n | Ref<{ mediaLibrary: Record<string, string> }>;\n}\n\nexport interface UseMediaLibraryUIReturn {\n // UI state\n layoutMode: Ref<\"grid\" | \"list\">;\n showSidebar: Ref<boolean>;\n searchInput: Ref<string>;\n selectedConversion: Ref<MediaConversion>;\n editingItem: Ref<MediaItem | null>;\n showImportUrlModal: Ref<boolean>;\n showMovePicker: Ref<boolean>;\n\n // Derived state\n selectedUrl: ComputedRef<string | null>;\n hasFrequentlyUsed: ComputedRef<boolean>;\n displayItems: ComputedRef<MediaItem[]>;\n hasUsedFiles: ComputedRef<boolean>;\n\n // Clipboard\n copy: (text: string) => Promise<void>;\n copied: Ref<boolean>;\n\n // Category labels\n getCategoryLabel: (category: string) => string;\n\n // Handlers\n handleSearchInput: (value: string) => void;\n handleUpload: (files: File[]) => Promise<void>;\n handleSelect: (item: MediaItem) => void;\n handleCreateFolder: (name: string, parentId?: string | null) => Promise<void>;\n handleRenameFolder: (folderId: string, name: string) => Promise<void>;\n handleDeleteFolder: (folderId: string) => Promise<void>;\n handleEditItem: (item: MediaItem) => void;\n handleEditSave: (\n mediaId: string,\n filename: string,\n altText?: string,\n cropData?: CropData,\n ) => Promise<void>;\n handleImportFromUrl: (url: string) => Promise<void>;\n handleMoveToFolder: (folderId: string | null) => Promise<void>;\n handleDeleteClick: () => Promise<void>;\n handleReplaceItem: (item: MediaItem) => void;\n handleReplaceFile: (file: File) => Promise<void>;\n\n // Reset (used by modal when closing)\n resetUI: () => void;\n}\n\nexport function useMediaLibraryUI(\n options: UseMediaLibraryUIOptions,\n): UseMediaLibraryUIReturn {\n const { library, canUseMediaFolders, translations } = options;\n\n function getTranslations() {\n if (\"value\" in translations && typeof translations.value === \"object\") {\n return (translations as Ref<{ mediaLibrary: Record<string, string> }>)\n .value;\n }\n return translations as { mediaLibrary: Record<string, string> };\n }\n\n // --- UI state ---\n const layoutMode = ref<\"grid\" | \"list\">(\"grid\");\n const showSidebar = ref(false);\n const searchInput = ref(\"\");\n const selectedConversion = ref<MediaConversion>(\"original\");\n const editingItem = ref<MediaItem | null>(null);\n const showImportUrlModal = ref(false);\n const showMovePicker = ref(false);\n\n // --- Derived state ---\n const selectedUrl = computed(() => {\n const item = library.previewItem.value;\n if (!item) return null;\n\n switch (selectedConversion.value) {\n case \"small\":\n return item.small_url || item.url;\n case \"medium\":\n return item.medium_url || item.url;\n case \"large\":\n return item.large_url || item.url;\n default:\n return item.url;\n }\n });\n\n const hasFrequentlyUsed = computed(() => {\n return library.frequentlyUsedItems.value.length > 0;\n });\n\n const displayItems = computed(() => {\n if (library.viewMode.value === \"frequently-used\") {\n return library.frequentlyUsedItems.value;\n }\n return library.items.value;\n });\n\n const hasUsedFiles = computed(() => {\n return Object.values(library.deleteUsageInfo.value).some(\n (info) => info.template_count > 0,\n );\n });\n\n // --- Category labels ---\n const categoryLabels: Record<string, () => string> = {\n images: () => getTranslations().mediaLibrary.filterImages,\n documents: () => getTranslations().mediaLibrary.filterDocuments,\n videos: () => getTranslations().mediaLibrary.filterVideos,\n audio: () => getTranslations().mediaLibrary.filterAudio,\n };\n\n function getCategoryLabel(category: string): string {\n return categoryLabels[category]?.() ?? category;\n }\n\n // --- Watchers ---\n watch(showSidebar, (show) => {\n if (show && canUseMediaFolders.value) {\n library.loadFolders();\n }\n });\n\n watch(\n () => library.previewItem.value?.id,\n () => {\n selectedConversion.value = \"original\";\n },\n );\n\n // --- Search ---\n const debouncedSearch = useDebounceFn((value: string) => {\n library.search(value);\n }, 300);\n\n function handleSearchInput(value: string): void {\n searchInput.value = value;\n debouncedSearch(value);\n }\n\n // --- Clipboard ---\n const { copy, copied } = useClipboard({ copiedDuring: 2000, legacy: true });\n\n // --- Handlers ---\n async function handleUpload(files: File[]): Promise<void> {\n await library.uploadFiles(files);\n }\n\n function handleSelect(item: MediaItem): void {\n library.selectItem(item);\n }\n\n async function handleCreateFolder(\n name: string,\n parentId?: string | null,\n ): Promise<void> {\n await library.createFolder(name, parentId);\n }\n\n async function handleRenameFolder(\n folderId: string,\n name: string,\n ): Promise<void> {\n await library.renameFolder(folderId, name);\n }\n\n async function handleDeleteFolder(folderId: string): Promise<void> {\n await library.deleteFolder(folderId);\n }\n\n function handleEditItem(item: MediaItem): void {\n editingItem.value = item;\n }\n\n async function handleEditSave(\n mediaId: string,\n filename: string,\n altText?: string,\n cropData?: CropData,\n ): Promise<void> {\n if (cropData) {\n await library.replaceMediaDirectly(mediaId, cropData.file);\n }\n await library.updateFile(mediaId, filename, altText);\n editingItem.value = null;\n }\n\n async function handleImportFromUrl(url: string): Promise<void> {\n const result = await library.importFromUrl(url);\n if (result) {\n showImportUrlModal.value = false;\n }\n }\n\n async function handleMoveToFolder(folderId: string | null): Promise<void> {\n showMovePicker.value = false;\n await library.moveSelected(folderId);\n }\n\n async function handleDeleteClick(): Promise<void> {\n await library.checkUsageBeforeDelete();\n }\n\n function handleReplaceItem(item: MediaItem): void {\n library.checkUsageBeforeReplace(item);\n }\n\n async function handleReplaceFile(file: File): Promise<void> {\n await library.replaceFile(file);\n }\n\n function resetUI(): void {\n library.clearSelection();\n library.cancelDelete();\n library.cancelReplace();\n searchInput.value = \"\";\n library.categoryFilter.value = null;\n library.sortOption.value = \"newest\";\n library.viewMode.value = \"files\";\n editingItem.value = null;\n showImportUrlModal.value = false;\n selectedConversion.value = \"original\";\n }\n\n return {\n layoutMode,\n showSidebar,\n searchInput,\n selectedConversion,\n editingItem,\n showImportUrlModal,\n showMovePicker,\n selectedUrl,\n hasFrequentlyUsed,\n displayItems,\n hasUsedFiles,\n copy,\n copied,\n getCategoryLabel,\n handleSearchInput,\n handleUpload,\n handleSelect,\n handleCreateFolder,\n handleRenameFolder,\n handleDeleteFolder,\n handleEditItem,\n handleEditSave,\n handleImportFromUrl,\n handleMoveToFolder,\n handleDeleteClick,\n handleReplaceItem,\n handleReplaceFile,\n resetUI,\n };\n}\n","<script setup lang=\"ts\">\nimport MediaBreadcrumb from \"./media/MediaBreadcrumb.vue\";\nimport MediaEditModal from \"./media/MediaEditModal.vue\";\nimport MediaFolderTree from \"./media/MediaFolderTree.vue\";\nimport MediaGrid from \"./media/MediaGrid.vue\";\nimport MediaImportUrlModal from \"./media/MediaImportUrlModal.vue\";\nimport MediaMovePicker from \"./media/MediaMovePicker.vue\";\nimport MediaPreviewPanel from \"./media/MediaPreviewPanel.vue\";\nimport MediaReplaceModal from \"./media/MediaReplaceModal.vue\";\nimport MediaUploadZone from \"./media/MediaUploadZone.vue\";\nimport StorageProgressRing from \"./media/StorageProgressRing.vue\";\nimport { useI18n } from \"../composables/useI18n\";\nimport { useMediaCategories } from \"../composables/useMediaCategories\";\nimport { useMediaLibraryUI } from \"../composables/useMediaLibraryUI\";\nimport type { UsePlanConfigReturn } from \"@templatical/core/cloud\";\nimport { useMediaLibrary } from \"../composable\";\nimport type { MediaCategory, MediaItem } from \"../types\";\nimport type { AuthManager } from \"@templatical/core/cloud\";\nimport { useEventListener } from \"@vueuse/core\";\nimport {\n Check,\n Copy,\n Grid2x2,\n Link,\n List,\n PanelLeft,\n Search,\n X,\n} from \"@lucide/vue\";\nimport {\n computed,\n inject,\n provide,\n toRef,\n watch,\n type ComputedRef,\n type Ref,\n} from \"vue\";\nimport { POPOVER_TARGET_KEY } from \"../keys\";\n\nconst props = defineProps<{\n visible: boolean;\n accept?: MediaCategory[];\n /**\n * Mount target for the modal's teleport. When provided, the modal and\n * its sub-modals render inside this element instead of `document.body`\n * — used by editors that wrap the media library inside a shadow root\n * (or any other DOM boundary) and want the modal to stay inside.\n * Defaults to `null` → teleport to body, preserving the original\n * standalone-SDK behavior.\n */\n popoverTarget?: HTMLElement | null;\n}>();\n\nconst emit = defineEmits<{\n (e: \"close\"): void;\n (e: \"select\", item: MediaItem): void;\n}>();\n\nconst { t } = useI18n();\nconst tplUiTheme = inject<Ref<\"light\" | \"dark\">>(\"tplUiTheme\");\n\n// Sub-modals (MediaReplaceModal, MediaEditModal, MediaImportUrlModal) inject\n// the same target so every nested teleport lands in the same place as this\n// one. Wrap the prop in a reactive ref so the provide updates if the host\n// remounts the modal with a different target.\nconst popoverTargetRef = toRef(() => props.popoverTarget ?? null);\nprovide(POPOVER_TARGET_KEY, popoverTargetRef);\nconst authManager = inject<AuthManager>(\"authManager\")!;\nconst projectIdRef = inject<ComputedRef<string>>(\"projectId\")!;\nconst projectId = computed(() => projectIdRef.value);\nconst planConfig = inject<UsePlanConfigReturn>(\"planConfig\")!;\n\n// Feature flags\nconst canUseMediaFolders = computed(() =>\n planConfig.hasFeature(\"media_folders\"),\n);\nconst canImportFromUrl = computed(() =>\n planConfig.hasFeature(\"import_from_url\"),\n);\n\n// Storage info\nconst storageUsedBytes = computed(\n () => planConfig.config.value?.storage.used_bytes ?? 0,\n);\nconst storageLimitBytes = computed(\n () => planConfig.config.value?.storage.limit_bytes ?? 0,\n);\n\nconst { isAcceptedMimeType, availableCategories } = useMediaCategories();\n\nconst library = useMediaLibrary({\n projectId: projectId.value,\n authManager,\n});\n\nconst ui = useMediaLibraryUI({\n library,\n canUseMediaFolders,\n translations: t,\n});\n\n// Modal-specific: load on open, reset on close\nwatch(\n () => props.visible,\n (visible) => {\n if (visible) {\n library.loadItems();\n library.loadFrequentlyUsed();\n } else {\n ui.resetUI();\n }\n },\n);\n\n// Modal-specific: escape key\nfunction handleKeydown(event: KeyboardEvent): void {\n if (event.key === \"Escape\") {\n emit(\"close\");\n }\n}\nuseEventListener(document, \"keydown\", handleKeydown);\n\n// Modal-specific: accept filter + selection\nfunction isConfirmable(): boolean {\n if (!library.previewItem.value) {\n return false;\n }\n\n if (!props.accept?.length) {\n return true;\n }\n\n return isAcceptedMimeType(library.previewItem.value.mime_type, props.accept);\n}\n\nfunction confirmSelection(): void {\n if (isConfirmable()) {\n const item = library.previewItem.value!;\n const itemWithSelectedUrl: MediaItem = {\n ...item,\n url: ui.selectedUrl.value || item.url,\n };\n emit(\"select\", itemWithSelectedUrl);\n emit(\"close\");\n }\n}\n</script>\n\n<template>\n <Teleport :to=\"popoverTarget || 'body'\">\n <Transition\n enter-active-class=\"tpl:transition tpl:duration-200\"\n enter-from-class=\"tpl:opacity-0\"\n enter-to-class=\"tpl:opacity-100\"\n leave-active-class=\"tpl:transition tpl:duration-150\"\n leave-from-class=\"tpl:opacity-100\"\n leave-to-class=\"tpl:opacity-0\"\n >\n <div\n v-if=\"visible\"\n :data-tpl-theme=\"tplUiTheme\"\n class=\"tpl tpl-media-overlay tpl:fixed tpl:inset-0 tpl:z-[9999]\"\n @click.self=\"emit('close')\"\n >\n <div\n class=\"tpl-media-modal tpl-scale-in tpl:flex tpl:flex-col tpl:overflow-hidden tpl:rounded-[var(--tpl-radius-lg)]\"\n style=\"\n width: 900px;\n height: 650px;\n max-width: 95vw;\n max-height: 90vh;\n background-color: var(--tpl-bg-elevated);\n border: 1px solid var(--tpl-border);\n box-shadow: var(--tpl-shadow-xl);\n \"\n >\n <!-- Header -->\n <div\n class=\"tpl:flex tpl:shrink-0 tpl:items-center tpl:justify-between tpl:border-b tpl:px-5 tpl:py-3.5\"\n style=\"border-color: var(--tpl-border)\"\n >\n <h2\n class=\"tpl:text-sm tpl:font-semibold\"\n style=\"color: var(--tpl-text)\"\n >\n {{ t.mediaLibrary.title }}\n </h2>\n <div class=\"tpl:flex tpl:items-center tpl:gap-3\">\n <StorageProgressRing\n :used-bytes=\"storageUsedBytes\"\n :limit-bytes=\"storageLimitBytes\"\n :size=\"22\"\n />\n <div class=\"tpl:relative\">\n <input\n :value=\"ui.searchInput.value\"\n type=\"text\"\n class=\"tpl:w-52 tpl:rounded-md tpl:border tpl:py-1.5 tpl:pr-3 tpl:pl-8 tpl:text-xs tpl:shadow-xs tpl:transition-all tpl:duration-150 tpl:outline-none tpl:focus:shadow-[var(--tpl-ring)]\"\n style=\"\n border-color: var(--tpl-border);\n background-color: var(--tpl-bg);\n color: var(--tpl-text);\n \"\n :placeholder=\"t.mediaLibrary.searchPlaceholder\"\n @input=\"\n ui.handleSearchInput(\n ($event.target as HTMLInputElement).value,\n )\n \"\n />\n <Search\n class=\"tpl:absolute tpl:top-1/2 tpl:left-2.5 tpl:-translate-y-1/2\"\n :size=\"13\"\n :stroke-width=\"2\"\n style=\"color: var(--tpl-text-dim)\"\n />\n </div>\n <button\n class=\"tpl:flex tpl:size-7 tpl:items-center tpl:justify-center tpl:rounded-md tpl:transition-all tpl:duration-150\"\n style=\"color: var(--tpl-text-muted)\"\n @click=\"emit('close')\"\n >\n <X :size=\"18\" :stroke-width=\"2\" />\n </button>\n </div>\n </div>\n\n <!-- Body -->\n <div class=\"tpl:flex tpl:min-h-0 tpl:flex-1 tpl:overflow-hidden\">\n <!-- Sidebar (only when media folders feature is enabled and toggled on) -->\n <Transition\n enter-active-class=\"tpl:transition-all tpl:duration-200 tpl:ease-out\"\n enter-from-class=\"tpl:-ml-48 tpl:opacity-0\"\n enter-to-class=\"tpl:ml-0 tpl:opacity-100\"\n leave-active-class=\"tpl:transition-all tpl:duration-150 tpl:ease-in\"\n leave-from-class=\"tpl:ml-0 tpl:opacity-100\"\n leave-to-class=\"tpl:-ml-48 tpl:opacity-0\"\n >\n <div\n v-if=\"canUseMediaFolders && ui.showSidebar.value\"\n class=\"tpl:flex tpl:w-48 tpl:shrink-0 tpl:flex-col tpl:border-r\"\n style=\"\n border-color: var(--tpl-border);\n background-color: var(--tpl-bg);\n \"\n >\n <MediaFolderTree\n :folders=\"library.folders.value\"\n :current-folder-id=\"library.currentFolderId.value\"\n :view-mode=\"library.viewMode.value\"\n :has-frequently-used=\"ui.hasFrequentlyUsed.value\"\n @navigate=\"library.navigateToFolder\"\n @create-folder=\"ui.handleCreateFolder\"\n @rename-folder=\"ui.handleRenameFolder\"\n @delete-folder=\"ui.handleDeleteFolder\"\n @show-frequently-used=\"library.showFrequentlyUsed\"\n />\n </div>\n </Transition>\n\n <!-- Content area -->\n <div class=\"tpl:flex tpl:min-w-0 tpl:flex-1 tpl:flex-col\">\n <!-- Breadcrumb + Upload -->\n <div\n class=\"tpl:flex tpl:shrink-0 tpl:items-center tpl:justify-between tpl:border-b tpl:px-4 tpl:py-2.5\"\n style=\"border-color: var(--tpl-border)\"\n >\n <div class=\"tpl:flex tpl:items-center tpl:gap-2\">\n <!-- Sidebar toggle (only when media folders feature is enabled) -->\n <button\n v-if=\"canUseMediaFolders\"\n class=\"tpl:flex tpl:size-7 tpl:cursor-pointer tpl:items-center tpl:justify-center tpl:rounded-md tpl:transition-all tpl:duration-150\"\n :style=\"{\n color: ui.showSidebar.value\n ? 'var(--tpl-primary)'\n : 'var(--tpl-text-muted)',\n backgroundColor: ui.showSidebar.value\n ? 'var(--tpl-bg)'\n : 'transparent',\n border: ui.showSidebar.value\n ? '1px solid var(--tpl-border)'\n : '1px solid transparent',\n }\"\n :title=\"\n ui.showSidebar.value\n ? t.mediaLibrary.hideFolders\n : t.mediaLibrary.showFolders\n \"\n @click=\"ui.showSidebar.value = !ui.showSidebar.value\"\n >\n <PanelLeft :size=\"16\" :stroke-width=\"2\" />\n </button>\n\n <template v-if=\"library.viewMode.value === 'frequently-used'\">\n <span\n class=\"tpl:text-xs tpl:font-medium\"\n style=\"color: var(--tpl-text)\"\n >\n {{ t.mediaLibrary.frequentlyUsed }}\n </span>\n </template>\n <template v-else>\n <MediaBreadcrumb\n :folders=\"library.folders.value\"\n :current-folder-id=\"library.currentFolderId.value\"\n @navigate=\"library.navigateToFolder\"\n />\n </template>\n\n <!-- Layout toggle -->\n <div\n class=\"tpl:flex tpl:rounded-md tpl:p-0.5\"\n style=\"\n border: 1px solid var(--tpl-border);\n background-color: var(--tpl-bg);\n \"\n >\n <button\n class=\"tpl:flex tpl:size-6 tpl:cursor-pointer tpl:items-center tpl:justify-center tpl:rounded tpl:transition-all tpl:duration-150\"\n :style=\"{\n color:\n ui.layoutMode.value === 'grid'\n ? 'var(--tpl-primary)'\n : 'var(--tpl-text-muted)',\n backgroundColor:\n ui.layoutMode.value === 'grid'\n ? 'var(--tpl-bg-elevated)'\n : 'transparent',\n }\"\n :title=\"t.mediaLibrary.viewGrid\"\n @click=\"ui.layoutMode.value = 'grid'\"\n >\n <Grid2x2 :size=\"14\" :stroke-width=\"2\" />\n </button>\n <button\n class=\"tpl:flex tpl:size-6 tpl:cursor-pointer tpl:items-center tpl:justify-center tpl:rounded tpl:transition-all tpl:duration-150\"\n :style=\"{\n color:\n ui.layoutMode.value === 'list'\n ? 'var(--tpl-primary)'\n : 'var(--tpl-text-muted)',\n backgroundColor:\n ui.layoutMode.value === 'list'\n ? 'var(--tpl-bg-elevated)'\n : 'transparent',\n }\"\n :title=\"t.mediaLibrary.viewList\"\n @click=\"ui.layoutMode.value = 'list'\"\n >\n <List :size=\"14\" :stroke-width=\"2\" />\n </button>\n </div>\n </div>\n\n <div class=\"tpl:flex tpl:items-center tpl:gap-2\">\n <select\n v-if=\"availableCategories.length > 1\"\n class=\"tpl:rounded-md tpl:border tpl:py-1.5 tpl:pr-7 tpl:pl-2.5 tpl:text-xs tpl:transition-all tpl:duration-150 tpl:outline-none\"\n style=\"\n border-color: var(--tpl-border);\n background-color: var(--tpl-bg);\n color: var(--tpl-text);\n \"\n :value=\"library.categoryFilter.value ?? ''\"\n @change=\"\n library.filterByCategory(\n ($event.target as HTMLSelectElement).value || null,\n )\n \"\n >\n <option value=\"\">\n {{ t.mediaLibrary.filterAll }}\n </option>\n <option\n v-for=\"category in availableCategories\"\n :key=\"category\"\n :value=\"category\"\n >\n {{ ui.getCategoryLabel(category) }}\n </option>\n </select>\n <select\n class=\"tpl:rounded-md tpl:border tpl:py-1.5 tpl:pr-7 tpl:pl-2.5 tpl:text-xs tpl:transition-all tpl:duration-150 tpl:outline-none\"\n style=\"\n border-color: var(--tpl-border);\n background-color: var(--tpl-bg);\n color: var(--tpl-text);\n \"\n :value=\"library.sortOption.value\"\n @change=\"\n library.sortBy(($event.target as HTMLSelectElement).value)\n \"\n >\n <option value=\"newest\">\n {{ t.mediaLibrary.sortNewest }}\n </option>\n <option value=\"oldest\">\n {{ t.mediaLibrary.sortOldest }}\n </option>\n <option value=\"name_asc\">\n {{ t.mediaLibrary.sortNameAsc }}\n </option>\n <option value=\"name_desc\">\n {{ t.mediaLibrary.sortNameDesc }}\n </option>\n <option value=\"size_asc\">\n {{ t.mediaLibrary.sortSizeAsc }}\n </option>\n <option value=\"size_desc\">\n {{ t.mediaLibrary.sortSizeDesc }}\n </option>\n </select>\n </div>\n </div>\n\n <!-- Scrollable content area -->\n <div class=\"tpl:min-h-0 tpl:flex-1 tpl:overflow-y-auto\">\n <!-- Upload zone (only in files mode) -->\n <div\n v-if=\"library.viewMode.value === 'files'\"\n class=\"tpl:px-4 tpl:pt-3\"\n >\n <MediaUploadZone\n :is-uploading=\"library.isUploading.value\"\n :upload-progress=\"library.uploadProgress.value\"\n @upload=\"ui.handleUpload\"\n />\n <button\n v-if=\"canImportFromUrl\"\n class=\"tpl:mt-2 tpl:flex tpl:w-full tpl:cursor-pointer tpl:items-center tpl:justify-center tpl:gap-1.5 tpl:rounded-md tpl:border tpl:border-dashed tpl:px-3 tpl:py-1.5 tpl:text-xs tpl:font-medium tpl:transition-all tpl:duration-150\"\n style=\"\n border-color: var(--tpl-border);\n color: var(--tpl-text-muted);\n background-color: var(--tpl-bg);\n \"\n @click=\"ui.showImportUrlModal.value = true\"\n >\n <Link :size=\"14\" :stroke-width=\"2\" />\n {{ t.mediaLibrary.importFromUrl }}\n </button>\n </div>\n\n <!-- Image grid -->\n <MediaGrid\n :items=\"ui.displayItems.value\"\n :selected-ids=\"library.selectedItems.value\"\n :is-loading=\"library.isLoading.value\"\n :has-more=\"\n library.viewMode.value === 'files' && library.hasMore.value\n \"\n :accept=\"accept\"\n :layout=\"ui.layoutMode.value\"\n @select=\"ui.handleSelect\"\n @toggle=\"library.toggleSelection\"\n @load-more=\"library.loadMore\"\n @edit=\"ui.handleEditItem\"\n @replace=\"ui.handleReplaceItem\"\n />\n </div>\n </div>\n </div>\n\n <!-- Import from URL Modal -->\n <MediaImportUrlModal\n :visible=\"ui.showImportUrlModal.value\"\n :is-importing=\"library.isImportingFromUrl.value\"\n :error=\"library.importFromUrlError.value\"\n @import=\"ui.handleImportFromUrl\"\n @close=\"ui.showImportUrlModal.value = false\"\n />\n\n <!-- Edit Modal -->\n <MediaEditModal\n :visible=\"!!ui.editingItem.value\"\n :item=\"ui.editingItem.value\"\n @save=\"ui.handleEditSave\"\n @close=\"ui.editingItem.value = null\"\n />\n\n <!-- Replace Modal -->\n <MediaReplaceModal\n :visible=\"library.showReplaceWarning.value\"\n :item=\"library.pendingReplaceItem.value\"\n :usage-info=\"library.replaceUsageInfo.value\"\n :is-replacing=\"library.isReplacing.value\"\n :error=\"library.replaceError.value\"\n @replace=\"ui.handleReplaceFile\"\n @close=\"library.cancelReplace\"\n />\n\n <!-- Delete Warning Dialog -->\n <Transition\n enter-active-class=\"tpl:transition tpl:ease-out tpl:duration-150\"\n enter-from-class=\"tpl:opacity-0\"\n enter-to-class=\"tpl:opacity-100\"\n leave-active-class=\"tpl:transition tpl:ease-in tpl:duration-100\"\n leave-from-class=\"tpl:opacity-100\"\n leave-to-class=\"tpl:opacity-0\"\n >\n <div\n v-if=\"library.showDeleteWarning.value\"\n class=\"tpl:absolute tpl:inset-0 tpl:z-10 tpl:flex tpl:items-center tpl:justify-center tpl:rounded-[var(--tpl-radius-lg)]\"\n style=\"\n background-color: var(--tpl-overlay);\n backdrop-filter: blur(8px);\n -webkit-backdrop-filter: blur(8px);\n \"\n @click.self=\"library.cancelDelete\"\n >\n <div\n class=\"tpl-scale-in tpl:mx-4 tpl:w-full tpl:max-w-sm tpl:rounded-[var(--tpl-radius-lg)] tpl:p-5\"\n style=\"\n background-color: var(--tpl-bg-elevated);\n box-shadow: var(--tpl-shadow-xl);\n \"\n >\n <h3\n class=\"tpl:mb-2 tpl:text-sm tpl:font-semibold\"\n style=\"color: var(--tpl-text)\"\n >\n {{ t.mediaLibrary.deleteWarningTitle }}\n </h3>\n <p\n class=\"tpl:text-xs\"\n :class=\"ui.hasUsedFiles.value ? 'tpl:mb-2' : 'tpl:mb-4'\"\n style=\"color: var(--tpl-text-muted)\"\n >\n {{ t.mediaLibrary.deleteWarningMessage }}\n </p>\n <p\n v-if=\"ui.hasUsedFiles.value\"\n class=\"tpl:mb-4 tpl:text-xs\"\n style=\"color: var(--tpl-text-muted)\"\n >\n {{ t.mediaLibrary.deleteWarningUsageNote }}\n </p>\n\n <div\n v-if=\"ui.hasUsedFiles.value\"\n class=\"tpl:mb-4 tpl:max-h-32 tpl:overflow-y-auto tpl:rounded tpl:border tpl:p-2\"\n style=\"border-color: var(--tpl-border)\"\n >\n <div\n v-for=\"(info, mediaId) in library.deleteUsageInfo.value\"\n :key=\"mediaId\"\n class=\"tpl:text-xs\"\n style=\"color: var(--tpl-text)\"\n >\n <template v-if=\"info.template_count > 0\">\n <span class=\"tpl:font-medium\">\n {{\n ui.displayItems.value.find((i) => i.id === mediaId)\n ?.filename || mediaId\n }}\n </span>\n <span style=\"color: var(--tpl-text-muted)\">\n -\n {{\n t.mediaLibrary.usedInTemplates.replace(\n \"{count}\",\n info.template_count.toString(),\n )\n }}\n </span>\n </template>\n </div>\n </div>\n\n <div class=\"tpl:flex tpl:justify-end tpl:gap-2\">\n <button\n class=\"tpl:cursor-pointer tpl:rounded-md tpl:border tpl:px-3 tpl:py-1.5 tpl:text-xs tpl:font-medium tpl:transition-all tpl:duration-150\"\n style=\"\n border-color: var(--tpl-border);\n color: var(--tpl-text);\n background-color: var(--tpl-bg);\n \"\n @click=\"library.cancelDelete\"\n >\n {{ t.mediaLibrary.cancel }}\n </button>\n <button\n class=\"tpl:cursor-pointer tpl:rounded-md tpl:border tpl:px-3 tpl:py-1.5 tpl:text-xs tpl:font-medium tpl:transition-all tpl:duration-150\"\n style=\"\n border-color: var(--tpl-danger);\n color: var(--tpl-danger);\n background-color: var(--tpl-danger-light);\n \"\n @click=\"library.confirmDelete\"\n >\n {{\n ui.hasUsedFiles.value\n ? t.mediaLibrary.deleteAnyway\n : t.mediaLibrary.confirmDelete\n }}\n </button>\n </div>\n </div>\n </div>\n </Transition>\n\n <!-- Footer -->\n <div\n class=\"tpl:flex tpl:shrink-0 tpl:items-center tpl:justify-between tpl:border-t tpl:px-5 tpl:py-3\"\n style=\"border-color: var(--tpl-border)\"\n >\n <div\n class=\"tpl:flex tpl:min-w-0 tpl:flex-1 tpl:items-center tpl:gap-3\"\n >\n <MediaPreviewPanel\n v-if=\"library.previewItem.value\"\n v-model:selected-conversion=\"ui.selectedConversion.value\"\n :item=\"library.previewItem.value\"\n :folders=\"library.folders.value\"\n />\n </div>\n <div class=\"tpl:flex tpl:items-center tpl:gap-5\">\n <!-- Copy URL + Move group -->\n <div\n v-if=\"library.selectedItems.value.size > 0\"\n class=\"tpl:flex tpl:items-center tpl:gap-2\"\n >\n <button\n v-if=\"library.previewItem.value\"\n class=\"tpl:flex tpl:cursor-pointer tpl:items-center tpl:gap-1 tpl:rounded-md tpl:border tpl:px-3 tpl:py-1.5 tpl:text-xs tpl:font-medium tpl:transition-all tpl:duration-150\"\n :style=\"{\n borderColor: ui.copied.value\n ? 'var(--tpl-success)'\n : 'var(--tpl-border)',\n color: ui.copied.value\n ? 'var(--tpl-success)'\n : 'var(--tpl-text)',\n backgroundColor: 'var(--tpl-bg)',\n }\"\n @click=\"ui.copy(ui.selectedUrl.value!)\"\n >\n <Copy v-if=\"!ui.copied.value\" :size=\"12\" :stroke-width=\"2\" />\n <Check v-else :size=\"12\" :stroke-width=\"2\" />\n {{\n ui.copied.value\n ? t.mediaLibrary.copied\n : t.mediaLibrary.copyUrl\n }}\n </button>\n <div v-if=\"canUseMediaFolders\" class=\"tpl:relative\">\n <button\n class=\"tpl:cursor-pointer tpl:rounded-md tpl:border tpl:px-3 tpl:py-1.5 tpl:text-xs tpl:font-medium tpl:transition-all tpl:duration-150\"\n style=\"\n border-color: var(--tpl-border);\n color: var(--tpl-text);\n background-color: var(--tpl-bg);\n \"\n @click=\"ui.showMovePicker.value = !ui.showMovePicker.value\"\n >\n {{ t.mediaLibrary.moveSelected }}\n </button>\n <MediaMovePicker\n v-if=\"ui.showMovePicker.value\"\n :folders=\"library.folders.value\"\n :current-folder-id=\"library.currentFolderId.value\"\n @select=\"ui.handleMoveToFolder\"\n @close=\"ui.showMovePicker.value = false\"\n />\n </div>\n </div>\n <!-- Delete + Select group -->\n <div class=\"tpl:flex tpl:items-center tpl:gap-2\">\n <button\n v-if=\"library.selectedItems.value.size > 0\"\n class=\"tpl:cursor-pointer tpl:rounded-md tpl:border tpl:px-3 tpl:py-1.5 tpl:text-xs tpl:font-medium tpl:transition-all tpl:duration-150\"\n style=\"\n border-color: var(--tpl-danger);\n color: var(--tpl-danger);\n background-color: var(--tpl-danger-light);\n \"\n @click=\"ui.handleDeleteClick\"\n >\n {{ t.mediaLibrary.deleteSelected }}\n </button>\n <button\n class=\"tpl:cursor-pointer tpl:rounded-md tpl:px-4 tpl:py-1.5 tpl:text-sm tpl:font-medium tpl:shadow-xs tpl:transition-all tpl:duration-150 tpl:hover:opacity-90 tpl:disabled:cursor-not-allowed tpl:disabled:opacity-50\"\n style=\"\n background-color: var(--tpl-primary);\n color: var(--tpl-bg);\n \"\n :disabled=\"!isConfirmable()\"\n @click=\"confirmSelection\"\n >\n {{\n accept?.length\n ? t.mediaLibrary.selectImage\n : t.mediaLibrary.selectFile\n }}\n </button>\n </div>\n </div>\n </div>\n </div>\n </div>\n </Transition>\n </Teleport>\n</template>\n","<script setup lang=\"ts\">\nimport MediaBreadcrumb from \"./media/MediaBreadcrumb.vue\";\nimport MediaEditModal from \"./media/MediaEditModal.vue\";\nimport MediaFolderTree from \"./media/MediaFolderTree.vue\";\nimport MediaGrid from \"./media/MediaGrid.vue\";\nimport MediaImportUrlModal from \"./media/MediaImportUrlModal.vue\";\nimport MediaMovePicker from \"./media/MediaMovePicker.vue\";\nimport MediaPreviewPanel from \"./media/MediaPreviewPanel.vue\";\nimport MediaReplaceModal from \"./media/MediaReplaceModal.vue\";\nimport MediaUploadZone from \"./media/MediaUploadZone.vue\";\nimport StorageProgressRing from \"./media/StorageProgressRing.vue\";\nimport { useI18n } from \"../composables/useI18n\";\nimport { useMediaCategories } from \"../composables/useMediaCategories\";\nimport { useMediaLibraryUI } from \"../composables/useMediaLibraryUI\";\nimport type { UsePlanConfigReturn } from \"@templatical/core/cloud\";\nimport { useMediaLibrary } from \"../composable\";\nimport type { MediaCategory, MediaItem } from \"../types\";\nimport type { AuthManager } from \"@templatical/core/cloud\";\nimport { useEventListener } from \"@vueuse/core\";\nimport {\n Check,\n Copy,\n Grid2x2,\n Link,\n List,\n PanelLeft,\n Search,\n X,\n} from \"@lucide/vue\";\nimport {\n computed,\n inject,\n provide,\n toRef,\n watch,\n type ComputedRef,\n type Ref,\n} from \"vue\";\nimport { POPOVER_TARGET_KEY } from \"../keys\";\n\nconst props = defineProps<{\n visible: boolean;\n accept?: MediaCategory[];\n /**\n * Mount target for the modal's teleport. When provided, the modal and\n * its sub-modals render inside this element instead of `document.body`\n * — used by editors that wrap the media library inside a shadow root\n * (or any other DOM boundary) and want the modal to stay inside.\n * Defaults to `null` → teleport to body, preserving the original\n * standalone-SDK behavior.\n */\n popoverTarget?: HTMLElement | null;\n}>();\n\nconst emit = defineEmits<{\n (e: \"close\"): void;\n (e: \"select\", item: MediaItem): void;\n}>();\n\nconst { t } = useI18n();\nconst tplUiTheme = inject<Ref<\"light\" | \"dark\">>(\"tplUiTheme\");\n\n// Sub-modals (MediaReplaceModal, MediaEditModal, MediaImportUrlModal) inject\n// the same target so every nested teleport lands in the same place as this\n// one. Wrap the prop in a reactive ref so the provide updates if the host\n// remounts the modal with a different target.\nconst popoverTargetRef = toRef(() => props.popoverTarget ?? null);\nprovide(POPOVER_TARGET_KEY, popoverTargetRef);\nconst authManager = inject<AuthManager>(\"authManager\")!;\nconst projectIdRef = inject<ComputedRef<string>>(\"projectId\")!;\nconst projectId = computed(() => projectIdRef.value);\nconst planConfig = inject<UsePlanConfigReturn>(\"planConfig\")!;\n\n// Feature flags\nconst canUseMediaFolders = computed(() =>\n planConfig.hasFeature(\"media_folders\"),\n);\nconst canImportFromUrl = computed(() =>\n planConfig.hasFeature(\"import_from_url\"),\n);\n\n// Storage info\nconst storageUsedBytes = computed(\n () => planConfig.config.value?.storage.used_bytes ?? 0,\n);\nconst storageLimitBytes = computed(\n () => planConfig.config.value?.storage.limit_bytes ?? 0,\n);\n\nconst { isAcceptedMimeType, availableCategories } = useMediaCategories();\n\nconst library = useMediaLibrary({\n projectId: projectId.value,\n authManager,\n});\n\nconst ui = useMediaLibraryUI({\n library,\n canUseMediaFolders,\n translations: t,\n});\n\n// Modal-specific: load on open, reset on close\nwatch(\n () => props.visible,\n (visible) => {\n if (visible) {\n library.loadItems();\n library.loadFrequentlyUsed();\n } else {\n ui.resetUI();\n }\n },\n);\n\n// Modal-specific: escape key\nfunction handleKeydown(event: KeyboardEvent): void {\n if (event.key === \"Escape\") {\n emit(\"close\");\n }\n}\nuseEventListener(document, \"keydown\", handleKeydown);\n\n// Modal-specific: accept filter + selection\nfunction isConfirmable(): boolean {\n if (!library.previewItem.value) {\n return false;\n }\n\n if (!props.accept?.length) {\n return true;\n }\n\n return isAcceptedMimeType(library.previewItem.value.mime_type, props.accept);\n}\n\nfunction confirmSelection(): void {\n if (isConfirmable()) {\n const item = library.previewItem.value!;\n const itemWithSelectedUrl: MediaItem = {\n ...item,\n url: ui.selectedUrl.value || item.url,\n };\n emit(\"select\", itemWithSelectedUrl);\n emit(\"close\");\n }\n}\n</script>\n\n<template>\n <Teleport :to=\"popoverTarget || 'body'\">\n <Transition\n enter-active-class=\"tpl:transition tpl:duration-200\"\n enter-from-class=\"tpl:opacity-0\"\n enter-to-class=\"tpl:opacity-100\"\n leave-active-class=\"tpl:transition tpl:duration-150\"\n leave-from-class=\"tpl:opacity-100\"\n leave-to-class=\"tpl:opacity-0\"\n >\n <div\n v-if=\"visible\"\n :data-tpl-theme=\"tplUiTheme\"\n class=\"tpl tpl-media-overlay tpl:fixed tpl:inset-0 tpl:z-[9999]\"\n @click.self=\"emit('close')\"\n >\n <div\n class=\"tpl-media-modal tpl-scale-in tpl:flex tpl:flex-col tpl:overflow-hidden tpl:rounded-[var(--tpl-radius-lg)]\"\n style=\"\n width: 900px;\n height: 650px;\n max-width: 95vw;\n max-height: 90vh;\n background-color: var(--tpl-bg-elevated);\n border: 1px solid var(--tpl-border);\n box-shadow: var(--tpl-shadow-xl);\n \"\n >\n <!-- Header -->\n <div\n class=\"tpl:flex tpl:shrink-0 tpl:items-center tpl:justify-between tpl:border-b tpl:px-5 tpl:py-3.5\"\n style=\"border-color: var(--tpl-border)\"\n >\n <h2\n class=\"tpl:text-sm tpl:font-semibold\"\n style=\"color: var(--tpl-text)\"\n >\n {{ t.mediaLibrary.title }}\n </h2>\n <div class=\"tpl:flex tpl:items-center tpl:gap-3\">\n <StorageProgressRing\n :used-bytes=\"storageUsedBytes\"\n :limit-bytes=\"storageLimitBytes\"\n :size=\"22\"\n />\n <div class=\"tpl:relative\">\n <input\n :value=\"ui.searchInput.value\"\n type=\"text\"\n class=\"tpl:w-52 tpl:rounded-md tpl:border tpl:py-1.5 tpl:pr-3 tpl:pl-8 tpl:text-xs tpl:shadow-xs tpl:transition-all tpl:duration-150 tpl:outline-none tpl:focus:shadow-[var(--tpl-ring)]\"\n style=\"\n border-color: var(--tpl-border);\n background-color: var(--tpl-bg);\n color: var(--tpl-text);\n \"\n :placeholder=\"t.mediaLibrary.searchPlaceholder\"\n @input=\"\n ui.handleSearchInput(\n ($event.target as HTMLInputElement).value,\n )\n \"\n />\n <Search\n class=\"tpl:absolute tpl:top-1/2 tpl:left-2.5 tpl:-translate-y-1/2\"\n :size=\"13\"\n :stroke-width=\"2\"\n style=\"color: var(--tpl-text-dim)\"\n />\n </div>\n <button\n class=\"tpl:flex tpl:size-7 tpl:items-center tpl:justify-center tpl:rounded-md tpl:transition-all tpl:duration-150\"\n style=\"color: var(--tpl-text-muted)\"\n @click=\"emit('close')\"\n >\n <X :size=\"18\" :stroke-width=\"2\" />\n </button>\n </div>\n </div>\n\n <!-- Body -->\n <div class=\"tpl:flex tpl:min-h-0 tpl:flex-1 tpl:overflow-hidden\">\n <!-- Sidebar (only when media folders feature is enabled and toggled on) -->\n <Transition\n enter-active-class=\"tpl:transition-all tpl:duration-200 tpl:ease-out\"\n enter-from-class=\"tpl:-ml-48 tpl:opacity-0\"\n enter-to-class=\"tpl:ml-0 tpl:opacity-100\"\n leave-active-class=\"tpl:transition-all tpl:duration-150 tpl:ease-in\"\n leave-from-class=\"tpl:ml-0 tpl:opacity-100\"\n leave-to-class=\"tpl:-ml-48 tpl:opacity-0\"\n >\n <div\n v-if=\"canUseMediaFolders && ui.showSidebar.value\"\n class=\"tpl:flex tpl:w-48 tpl:shrink-0 tpl:flex-col tpl:border-r\"\n style=\"\n border-color: var(--tpl-border);\n background-color: var(--tpl-bg);\n \"\n >\n <MediaFolderTree\n :folders=\"library.folders.value\"\n :current-folder-id=\"library.currentFolderId.value\"\n :view-mode=\"library.viewMode.value\"\n :has-frequently-used=\"ui.hasFrequentlyUsed.value\"\n @navigate=\"library.navigateToFolder\"\n @create-folder=\"ui.handleCreateFolder\"\n @rename-folder=\"ui.handleRenameFolder\"\n @delete-folder=\"ui.handleDeleteFolder\"\n @show-frequently-used=\"library.showFrequentlyUsed\"\n />\n </div>\n </Transition>\n\n <!-- Content area -->\n <div class=\"tpl:flex tpl:min-w-0 tpl:flex-1 tpl:flex-col\">\n <!-- Breadcrumb + Upload -->\n <div\n class=\"tpl:flex tpl:shrink-0 tpl:items-center tpl:justify-between tpl:border-b tpl:px-4 tpl:py-2.5\"\n style=\"border-color: var(--tpl-border)\"\n >\n <div class=\"tpl:flex tpl:items-center tpl:gap-2\">\n <!-- Sidebar toggle (only when media folders feature is enabled) -->\n <button\n v-if=\"canUseMediaFolders\"\n class=\"tpl:flex tpl:size-7 tpl:cursor-pointer tpl:items-center tpl:justify-center tpl:rounded-md tpl:transition-all tpl:duration-150\"\n :style=\"{\n color: ui.showSidebar.value\n ? 'var(--tpl-primary)'\n : 'var(--tpl-text-muted)',\n backgroundColor: ui.showSidebar.value\n ? 'var(--tpl-bg)'\n : 'transparent',\n border: ui.showSidebar.value\n ? '1px solid var(--tpl-border)'\n : '1px solid transparent',\n }\"\n :title=\"\n ui.showSidebar.value\n ? t.mediaLibrary.hideFolders\n : t.mediaLibrary.showFolders\n \"\n @click=\"ui.showSidebar.value = !ui.showSidebar.value\"\n >\n <PanelLeft :size=\"16\" :stroke-width=\"2\" />\n </button>\n\n <template v-if=\"library.viewMode.value === 'frequently-used'\">\n <span\n class=\"tpl:text-xs tpl:font-medium\"\n style=\"color: var(--tpl-text)\"\n >\n {{ t.mediaLibrary.frequentlyUsed }}\n </span>\n </template>\n <template v-else>\n <MediaBreadcrumb\n :folders=\"library.folders.value\"\n :current-folder-id=\"library.currentFolderId.value\"\n @navigate=\"library.navigateToFolder\"\n />\n </template>\n\n <!-- Layout toggle -->\n <div\n class=\"tpl:flex tpl:rounded-md tpl:p-0.5\"\n style=\"\n border: 1px solid var(--tpl-border);\n background-color: var(--tpl-bg);\n \"\n >\n <button\n class=\"tpl:flex tpl:size-6 tpl:cursor-pointer tpl:items-center tpl:justify-center tpl:rounded tpl:transition-all tpl:duration-150\"\n :style=\"{\n color:\n ui.layoutMode.value === 'grid'\n ? 'var(--tpl-primary)'\n : 'var(--tpl-text-muted)',\n backgroundColor:\n ui.layoutMode.value === 'grid'\n ? 'var(--tpl-bg-elevated)'\n : 'transparent',\n }\"\n :title=\"t.mediaLibrary.viewGrid\"\n @click=\"ui.layoutMode.value = 'grid'\"\n >\n <Grid2x2 :size=\"14\" :stroke-width=\"2\" />\n </button>\n <button\n class=\"tpl:flex tpl:size-6 tpl:cursor-pointer tpl:items-center tpl:justify-center tpl:rounded tpl:transition-all tpl:duration-150\"\n :style=\"{\n color:\n ui.layoutMode.value === 'list'\n ? 'var(--tpl-primary)'\n : 'var(--tpl-text-muted)',\n backgroundColor:\n ui.layoutMode.value === 'list'\n ? 'var(--tpl-bg-elevated)'\n : 'transparent',\n }\"\n :title=\"t.mediaLibrary.viewList\"\n @click=\"ui.layoutMode.value = 'list'\"\n >\n <List :size=\"14\" :stroke-width=\"2\" />\n </button>\n </div>\n </div>\n\n <div class=\"tpl:flex tpl:items-center tpl:gap-2\">\n <select\n v-if=\"availableCategories.length > 1\"\n class=\"tpl:rounded-md tpl:border tpl:py-1.5 tpl:pr-7 tpl:pl-2.5 tpl:text-xs tpl:transition-all tpl:duration-150 tpl:outline-none\"\n style=\"\n border-color: var(--tpl-border);\n background-color: var(--tpl-bg);\n color: var(--tpl-text);\n \"\n :value=\"library.categoryFilter.value ?? ''\"\n @change=\"\n library.filterByCategory(\n ($event.target as HTMLSelectElement).value || null,\n )\n \"\n >\n <option value=\"\">\n {{ t.mediaLibrary.filterAll }}\n </option>\n <option\n v-for=\"category in availableCategories\"\n :key=\"category\"\n :value=\"category\"\n >\n {{ ui.getCategoryLabel(category) }}\n </option>\n </select>\n <select\n class=\"tpl:rounded-md tpl:border tpl:py-1.5 tpl:pr-7 tpl:pl-2.5 tpl:text-xs tpl:transition-all tpl:duration-150 tpl:outline-none\"\n style=\"\n border-color: var(--tpl-border);\n background-color: var(--tpl-bg);\n color: var(--tpl-text);\n \"\n :value=\"library.sortOption.value\"\n @change=\"\n library.sortBy(($event.target as HTMLSelectElement).value)\n \"\n >\n <option value=\"newest\">\n {{ t.mediaLibrary.sortNewest }}\n </option>\n <option value=\"oldest\">\n {{ t.mediaLibrary.sortOldest }}\n </option>\n <option value=\"name_asc\">\n {{ t.mediaLibrary.sortNameAsc }}\n </option>\n <option value=\"name_desc\">\n {{ t.mediaLibrary.sortNameDesc }}\n </option>\n <option value=\"size_asc\">\n {{ t.mediaLibrary.sortSizeAsc }}\n </option>\n <option value=\"size_desc\">\n {{ t.mediaLibrary.sortSizeDesc }}\n </option>\n </select>\n </div>\n </div>\n\n <!-- Scrollable content area -->\n <div class=\"tpl:min-h-0 tpl:flex-1 tpl:overflow-y-auto\">\n <!-- Upload zone (only in files mode) -->\n <div\n v-if=\"library.viewMode.value === 'files'\"\n class=\"tpl:px-4 tpl:pt-3\"\n >\n <MediaUploadZone\n :is-uploading=\"library.isUploading.value\"\n :upload-progress=\"library.uploadProgress.value\"\n @upload=\"ui.handleUpload\"\n />\n <button\n v-if=\"canImportFromUrl\"\n class=\"tpl:mt-2 tpl:flex tpl:w-full tpl:cursor-pointer tpl:items-center tpl:justify-center tpl:gap-1.5 tpl:rounded-md tpl:border tpl:border-dashed tpl:px-3 tpl:py-1.5 tpl:text-xs tpl:font-medium tpl:transition-all tpl:duration-150\"\n style=\"\n border-color: var(--tpl-border);\n color: var(--tpl-text-muted);\n background-color: var(--tpl-bg);\n \"\n @click=\"ui.showImportUrlModal.value = true\"\n >\n <Link :size=\"14\" :stroke-width=\"2\" />\n {{ t.mediaLibrary.importFromUrl }}\n </button>\n </div>\n\n <!-- Image grid -->\n <MediaGrid\n :items=\"ui.displayItems.value\"\n :selected-ids=\"library.selectedItems.value\"\n :is-loading=\"library.isLoading.value\"\n :has-more=\"\n library.viewMode.value === 'files' && library.hasMore.value\n \"\n :accept=\"accept\"\n :layout=\"ui.layoutMode.value\"\n @select=\"ui.handleSelect\"\n @toggle=\"library.toggleSelection\"\n @load-more=\"library.loadMore\"\n @edit=\"ui.handleEditItem\"\n @replace=\"ui.handleReplaceItem\"\n />\n </div>\n </div>\n </div>\n\n <!-- Import from URL Modal -->\n <MediaImportUrlModal\n :visible=\"ui.showImportUrlModal.value\"\n :is-importing=\"library.isImportingFromUrl.value\"\n :error=\"library.importFromUrlError.value\"\n @import=\"ui.handleImportFromUrl\"\n @close=\"ui.showImportUrlModal.value = false\"\n />\n\n <!-- Edit Modal -->\n <MediaEditModal\n :visible=\"!!ui.editingItem.value\"\n :item=\"ui.editingItem.value\"\n @save=\"ui.handleEditSave\"\n @close=\"ui.editingItem.value = null\"\n />\n\n <!-- Replace Modal -->\n <MediaReplaceModal\n :visible=\"library.showReplaceWarning.value\"\n :item=\"library.pendingReplaceItem.value\"\n :usage-info=\"library.replaceUsageInfo.value\"\n :is-replacing=\"library.isReplacing.value\"\n :error=\"library.replaceError.value\"\n @replace=\"ui.handleReplaceFile\"\n @close=\"library.cancelReplace\"\n />\n\n <!-- Delete Warning Dialog -->\n <Transition\n enter-active-class=\"tpl:transition tpl:ease-out tpl:duration-150\"\n enter-from-class=\"tpl:opacity-0\"\n enter-to-class=\"tpl:opacity-100\"\n leave-active-class=\"tpl:transition tpl:ease-in tpl:duration-100\"\n leave-from-class=\"tpl:opacity-100\"\n leave-to-class=\"tpl:opacity-0\"\n >\n <div\n v-if=\"library.showDeleteWarning.value\"\n class=\"tpl:absolute tpl:inset-0 tpl:z-10 tpl:flex tpl:items-center tpl:justify-center tpl:rounded-[var(--tpl-radius-lg)]\"\n style=\"\n background-color: var(--tpl-overlay);\n backdrop-filter: blur(8px);\n -webkit-backdrop-filter: blur(8px);\n \"\n @click.self=\"library.cancelDelete\"\n >\n <div\n class=\"tpl-scale-in tpl:mx-4 tpl:w-full tpl:max-w-sm tpl:rounded-[var(--tpl-radius-lg)] tpl:p-5\"\n style=\"\n background-color: var(--tpl-bg-elevated);\n box-shadow: var(--tpl-shadow-xl);\n \"\n >\n <h3\n class=\"tpl:mb-2 tpl:text-sm tpl:font-semibold\"\n style=\"color: var(--tpl-text)\"\n >\n {{ t.mediaLibrary.deleteWarningTitle }}\n </h3>\n <p\n class=\"tpl:text-xs\"\n :class=\"ui.hasUsedFiles.value ? 'tpl:mb-2' : 'tpl:mb-4'\"\n style=\"color: var(--tpl-text-muted)\"\n >\n {{ t.mediaLibrary.deleteWarningMessage }}\n </p>\n <p\n v-if=\"ui.hasUsedFiles.value\"\n class=\"tpl:mb-4 tpl:text-xs\"\n style=\"color: var(--tpl-text-muted)\"\n >\n {{ t.mediaLibrary.deleteWarningUsageNote }}\n </p>\n\n <div\n v-if=\"ui.hasUsedFiles.value\"\n class=\"tpl:mb-4 tpl:max-h-32 tpl:overflow-y-auto tpl:rounded tpl:border tpl:p-2\"\n style=\"border-color: var(--tpl-border)\"\n >\n <div\n v-for=\"(info, mediaId) in library.deleteUsageInfo.value\"\n :key=\"mediaId\"\n class=\"tpl:text-xs\"\n style=\"color: var(--tpl-text)\"\n >\n <template v-if=\"info.template_count > 0\">\n <span class=\"tpl:font-medium\">\n {{\n ui.displayItems.value.find((i) => i.id === mediaId)\n ?.filename || mediaId\n }}\n </span>\n <span style=\"color: var(--tpl-text-muted)\">\n -\n {{\n t.mediaLibrary.usedInTemplates.replace(\n \"{count}\",\n info.template_count.toString(),\n )\n }}\n </span>\n </template>\n </div>\n </div>\n\n <div class=\"tpl:flex tpl:justify-end tpl:gap-2\">\n <button\n class=\"tpl:cursor-pointer tpl:rounded-md tpl:border tpl:px-3 tpl:py-1.5 tpl:text-xs tpl:font-medium tpl:transition-all tpl:duration-150\"\n style=\"\n border-color: var(--tpl-border);\n color: var(--tpl-text);\n background-color: var(--tpl-bg);\n \"\n @click=\"library.cancelDelete\"\n >\n {{ t.mediaLibrary.cancel }}\n </button>\n <button\n class=\"tpl:cursor-pointer tpl:rounded-md tpl:border tpl:px-3 tpl:py-1.5 tpl:text-xs tpl:font-medium tpl:transition-all tpl:duration-150\"\n style=\"\n border-color: var(--tpl-danger);\n color: var(--tpl-danger);\n background-color: var(--tpl-danger-light);\n \"\n @click=\"library.confirmDelete\"\n >\n {{\n ui.hasUsedFiles.value\n ? t.mediaLibrary.deleteAnyway\n : t.mediaLibrary.confirmDelete\n }}\n </button>\n </div>\n </div>\n </div>\n </Transition>\n\n <!-- Footer -->\n <div\n class=\"tpl:flex tpl:shrink-0 tpl:items-center tpl:justify-between tpl:border-t tpl:px-5 tpl:py-3\"\n style=\"border-color: var(--tpl-border)\"\n >\n <div\n class=\"tpl:flex tpl:min-w-0 tpl:flex-1 tpl:items-center tpl:gap-3\"\n >\n <MediaPreviewPanel\n v-if=\"library.previewItem.value\"\n v-model:selected-conversion=\"ui.selectedConversion.value\"\n :item=\"library.previewItem.value\"\n :folders=\"library.folders.value\"\n />\n </div>\n <div class=\"tpl:flex tpl:items-center tpl:gap-5\">\n <!-- Copy URL + Move group -->\n <div\n v-if=\"library.selectedItems.value.size > 0\"\n class=\"tpl:flex tpl:items-center tpl:gap-2\"\n >\n <button\n v-if=\"library.previewItem.value\"\n class=\"tpl:flex tpl:cursor-pointer tpl:items-center tpl:gap-1 tpl:rounded-md tpl:border tpl:px-3 tpl:py-1.5 tpl:text-xs tpl:font-medium tpl:transition-all tpl:duration-150\"\n :style=\"{\n borderColor: ui.copied.value\n ? 'var(--tpl-success)'\n : 'var(--tpl-border)',\n color: ui.copied.value\n ? 'var(--tpl-success)'\n : 'var(--tpl-text)',\n backgroundColor: 'var(--tpl-bg)',\n }\"\n @click=\"ui.copy(ui.selectedUrl.value!)\"\n >\n <Copy v-if=\"!ui.copied.value\" :size=\"12\" :stroke-width=\"2\" />\n <Check v-else :size=\"12\" :stroke-width=\"2\" />\n {{\n ui.copied.value\n ? t.mediaLibrary.copied\n : t.mediaLibrary.copyUrl\n }}\n </button>\n <div v-if=\"canUseMediaFolders\" class=\"tpl:relative\">\n <button\n class=\"tpl:cursor-pointer tpl:rounded-md tpl:border tpl:px-3 tpl:py-1.5 tpl:text-xs tpl:font-medium tpl:transition-all tpl:duration-150\"\n style=\"\n border-color: var(--tpl-border);\n color: var(--tpl-text);\n background-color: var(--tpl-bg);\n \"\n @click=\"ui.showMovePicker.value = !ui.showMovePicker.value\"\n >\n {{ t.mediaLibrary.moveSelected }}\n </button>\n <MediaMovePicker\n v-if=\"ui.showMovePicker.value\"\n :folders=\"library.folders.value\"\n :current-folder-id=\"library.currentFolderId.value\"\n @select=\"ui.handleMoveToFolder\"\n @close=\"ui.showMovePicker.value = false\"\n />\n </div>\n </div>\n <!-- Delete + Select group -->\n <div class=\"tpl:flex tpl:items-center tpl:gap-2\">\n <button\n v-if=\"library.selectedItems.value.size > 0\"\n class=\"tpl:cursor-pointer tpl:rounded-md tpl:border tpl:px-3 tpl:py-1.5 tpl:text-xs tpl:font-medium tpl:transition-all tpl:duration-150\"\n style=\"\n border-color: var(--tpl-danger);\n color: var(--tpl-danger);\n background-color: var(--tpl-danger-light);\n \"\n @click=\"ui.handleDeleteClick\"\n >\n {{ t.mediaLibrary.deleteSelected }}\n </button>\n <button\n class=\"tpl:cursor-pointer tpl:rounded-md tpl:px-4 tpl:py-1.5 tpl:text-sm tpl:font-medium tpl:shadow-xs tpl:transition-all tpl:duration-150 tpl:hover:opacity-90 tpl:disabled:cursor-not-allowed tpl:disabled:opacity-50\"\n style=\"\n background-color: var(--tpl-primary);\n color: var(--tpl-bg);\n \"\n :disabled=\"!isConfirmable()\"\n @click=\"confirmSelection\"\n >\n {{\n accept?.length\n ? t.mediaLibrary.selectImage\n : t.mediaLibrary.selectFile\n }}\n </button>\n </div>\n </div>\n </div>\n </div>\n </div>\n </Transition>\n </Teleport>\n</template>\n"],"x_google_ignoreList":[8],"mappings":"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"}
|