@templatical/editor 0.35.0 → 0.37.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{AiChatSidebar-DPHbCGu4.js → AiChatSidebar-tu4eLcf_.js} +57 -57
- package/dist/{AiFeatureMenu--8z7qvg1.js → AiFeatureMenu-BF0i0vA4.js} +17 -17
- package/dist/{BlockIssueBadge-BGCsJqqM.js → BlockIssueBadge-DT-FqKeC.js} +9 -9
- package/dist/{BlockPreviewCanvas-DKspIy8V.js → BlockPreviewCanvas-DDCmMram.js} +28 -28
- package/dist/CloudHeaderExtras-NPhudovT.js +59 -0
- package/dist/{CloudPanels-Bp5gFtaL.js → CloudPanels-Iwnky0iA.js} +78 -108
- package/dist/{CollaboratorBar-DvwZm5u7.js → CollaboratorBar-DAITu0hz.js} +17 -17
- package/dist/{ColorPicker-DtozuN75.js → ColorPicker-BqlZ_TqG.js} +193 -193
- package/dist/{CommentsPanel-3C-DsEjy.js → CommentsPanel-CDvgmWP1.js} +3 -3
- package/dist/{CommentsSidebar-go1FnjDW.js → CommentsSidebar-X_xqM3dR.js} +158 -158
- package/dist/{CountdownBlock-D1fsNsyS.js → CountdownBlock-ZFJIdbP6.js} +12 -12
- package/dist/{CountdownToolbar-SLBuij7Q.js → CountdownToolbar-DBFoG3a6.js} +67 -67
- package/dist/{DesignReferenceSidebar-rcE_BvUd.js → DesignReferenceSidebar--QtXjLrw.js} +57 -57
- package/dist/{FieldRow-BWt7ECqo.js → FieldRow-C8nOknr_.js} +39 -39
- package/dist/{IssuesPanel-Cig46N1i.js → IssuesPanel-BLbNFMSX.js} +38 -38
- package/dist/{LoadingTrack-SQXoZVf2.js → LoadingTrack-BlTL4zFv.js} +2 -2
- package/dist/MediaPanels-CMTAhDXB.js +43 -0
- package/dist/{MergeTagInput-D1hzsn2b.js → MergeTagInput-BEjzj4Iu.js} +115 -115
- package/dist/{MergeTagModeToggle-CH9wR5YF.js → MergeTagModeToggle-DKN6ihI5.js} +40 -40
- package/dist/{MergeTagSuggestion-CoCuzEmW.js → MergeTagSuggestion-DKoLEeoj.js} +21 -21
- package/dist/{ParagraphEditor-CT2AdMdZ.js → ParagraphEditor-1E9yzOfk.js} +231 -258
- package/dist/{RestoreVersionDialog-mdqgQxFR.js → RestoreVersionDialog-BMGUkcd8.js} +28 -28
- package/dist/{RichTextEditorContent-riOB-rKD.js → RichTextEditorContent-BnxbQUV9.js} +49 -59
- package/dist/{SaveBlockDialog-Cn2v4Lpj.js → SaveBlockDialog-WKASpCCT.js} +78 -78
- package/dist/SavedBlocksBrowserModal-AYEXTMtQ.js +323 -0
- package/dist/{SavedBlocksPanels-ffBnWuVU.js → SavedBlocksPanels-D_CpacTl.js} +6 -6
- package/dist/{SavedBlocksPickBar-BmQC2tWN.js → SavedBlocksPickBar-BHMwg-1G.js} +11 -11
- package/dist/{TemplateScoringPanel-CxAtdreR.js → TemplateScoringPanel-CSin43YM.js} +99 -98
- package/dist/{TestEmailModal-Cjn1padY.js → TestEmailModal-BxizsRCd.js} +59 -59
- package/dist/{TestEmailPanel-Bf3XZ1jn.js → TestEmailPanel-vd2e5HzT.js} +3 -3
- package/dist/TitleEditor-CLJ68Ty4.js +199 -0
- package/dist/TplModal-Q9fDgS1M.js +51 -0
- package/dist/{VersionHistoryMenu-CrNrGsaa.js → VersionHistoryMenu-eGYVhM4H.js} +41 -47
- package/dist/{VersionHistoryPanels-CsuQk6W3.js → VersionHistoryPanels-C7Ntrrfq.js} +4 -4
- package/dist/{VersionPreviewBanner-BqbO0Zss.js → VersionPreviewBanner-BbQXnR0M.js} +9 -9
- package/dist/{blockTypeIcons-D_4HdaY9.js → blockTypeIcons-5qD4bB76.js} +5 -17
- package/dist/bundle-stats.json +8 -8
- package/dist/ca-Jx2CDwtn.js +83 -0
- package/dist/cdn/chunks/{AiChatSidebar-D0f74_nS.js → AiChatSidebar-dyqqHAcI.js} +4 -4
- package/dist/cdn/chunks/{AiChatSidebar-D0f74_nS.js.map → AiChatSidebar-dyqqHAcI.js.map} +1 -1
- package/dist/cdn/chunks/{AiFeatureMenu-DwGb3eF9.js → AiFeatureMenu-BjVMwhW8.js} +5 -5
- package/dist/cdn/chunks/{AiFeatureMenu-DwGb3eF9.js.map → AiFeatureMenu-BjVMwhW8.js.map} +1 -1
- package/dist/cdn/chunks/{BlockIssueBadge-CosQgeJ-.js → BlockIssueBadge-BJ__oEtm.js} +4 -4
- package/dist/cdn/chunks/{BlockIssueBadge-CosQgeJ-.js.map → BlockIssueBadge-BJ__oEtm.js.map} +1 -1
- package/dist/cdn/chunks/{BlockPreviewCanvas-CIpZ2a6g.js → BlockPreviewCanvas-B5f26eLE.js} +5 -5
- package/dist/cdn/chunks/{BlockPreviewCanvas-CIpZ2a6g.js.map → BlockPreviewCanvas-B5f26eLE.js.map} +1 -1
- package/dist/cdn/chunks/{CloudHeaderExtras-CQzQwKFB.js → CloudHeaderExtras-D5P5IEKA.js} +4 -4
- package/dist/cdn/chunks/{CloudHeaderExtras-CQzQwKFB.js.map → CloudHeaderExtras-D5P5IEKA.js.map} +1 -1
- package/dist/cdn/chunks/{CloudPanels-BmexuLOU.js → CloudPanels-DkmR05nB.js} +15 -45
- package/dist/cdn/chunks/{CloudPanels-BmexuLOU.js.map → CloudPanels-DkmR05nB.js.map} +1 -1
- package/dist/cdn/chunks/{CollaboratorBar-DEICobpp.js → CollaboratorBar-Yn7KSpt4.js} +4 -4
- package/dist/cdn/chunks/{CollaboratorBar-DEICobpp.js.map → CollaboratorBar-Yn7KSpt4.js.map} +1 -1
- package/dist/cdn/chunks/{ColorPicker-C7yC58FK.js → ColorPicker-LcrzgMoW.js} +7 -7
- package/dist/cdn/chunks/{ColorPicker-C7yC58FK.js.map → ColorPicker-LcrzgMoW.js.map} +1 -1
- package/dist/cdn/chunks/{CommentsPanel-OjmKxLL7.js → CommentsPanel-CntwwocI.js} +2 -2
- package/dist/cdn/chunks/{CommentsPanel-OjmKxLL7.js.map → CommentsPanel-CntwwocI.js.map} +1 -1
- package/dist/cdn/chunks/{CommentsSidebar-C4pWZGpy.js → CommentsSidebar-BLDKnKy7.js} +4 -4
- package/dist/cdn/chunks/{CommentsSidebar-C4pWZGpy.js.map → CommentsSidebar-BLDKnKy7.js.map} +1 -1
- package/dist/cdn/chunks/{CountdownBlock-rK055jpy.js → CountdownBlock-B4AfqJwb.js} +2 -2
- package/dist/cdn/chunks/{CountdownBlock-rK055jpy.js.map → CountdownBlock-B4AfqJwb.js.map} +1 -1
- package/dist/cdn/chunks/{CountdownToolbar-wlJOxyAl.js → CountdownToolbar-CA1dpuOI.js} +3 -3
- package/dist/cdn/chunks/{CountdownToolbar-wlJOxyAl.js.map → CountdownToolbar-CA1dpuOI.js.map} +1 -1
- package/dist/cdn/chunks/{DesignReferenceSidebar-DELhnh8h.js → DesignReferenceSidebar-D1Y9Hswe.js} +5 -5
- package/dist/cdn/chunks/{DesignReferenceSidebar-DELhnh8h.js.map → DesignReferenceSidebar-D1Y9Hswe.js.map} +1 -1
- package/dist/cdn/chunks/{IssuesPanel-C9i3o8aE.js → IssuesPanel-Q62LTqvd.js} +5 -5
- package/dist/cdn/chunks/{IssuesPanel-C9i3o8aE.js.map → IssuesPanel-Q62LTqvd.js.map} +1 -1
- package/dist/cdn/chunks/MediaPanels-D21M6shx.js +45 -0
- package/dist/cdn/chunks/MediaPanels-D21M6shx.js.map +1 -0
- package/dist/cdn/chunks/{MergeTagInput-D76Kyvgu.js → MergeTagInput-l7paaAml.js} +7 -7
- package/dist/cdn/chunks/{MergeTagInput-D76Kyvgu.js.map → MergeTagInput-l7paaAml.js.map} +1 -1
- package/dist/cdn/chunks/{MergeTagModeToggle-Dz3gxN2y.js → MergeTagModeToggle-DYxkAGtA.js} +4 -4
- package/dist/cdn/chunks/{MergeTagModeToggle-Dz3gxN2y.js.map → MergeTagModeToggle-DYxkAGtA.js.map} +1 -1
- package/dist/cdn/chunks/{ParagraphEditor-DQn0HMfV.js → ParagraphEditor-Bd-GQXee.js} +15 -15
- package/dist/cdn/chunks/{ParagraphEditor-DQn0HMfV.js.map → ParagraphEditor-Bd-GQXee.js.map} +1 -1
- package/dist/cdn/chunks/{RestoreVersionDialog-BdjOL8Oy.js → RestoreVersionDialog-2X9RpM9A.js} +4 -4
- package/dist/cdn/chunks/{RestoreVersionDialog-BdjOL8Oy.js.map → RestoreVersionDialog-2X9RpM9A.js.map} +1 -1
- package/dist/cdn/chunks/{RichTextEditorContent-Drzwgh0J.js → RichTextEditorContent-D_rb0rmU.js} +8 -8
- package/dist/cdn/chunks/{RichTextEditorContent-Drzwgh0J.js.map → RichTextEditorContent-D_rb0rmU.js.map} +1 -1
- package/dist/cdn/chunks/{SaveBlockDialog-B3rbmXSM.js → SaveBlockDialog-CufdTomT.js} +15 -15
- package/dist/cdn/chunks/{SaveBlockDialog-B3rbmXSM.js.map → SaveBlockDialog-CufdTomT.js.map} +1 -1
- package/dist/cdn/chunks/{SavedBlocksBrowserModal-CkUXlnd2.js → SavedBlocksBrowserModal-CqpaNsk7.js} +8 -8
- package/dist/cdn/chunks/{SavedBlocksBrowserModal-CkUXlnd2.js.map → SavedBlocksBrowserModal-CqpaNsk7.js.map} +1 -1
- package/dist/cdn/chunks/{SavedBlocksPanels-BPi3PZKP.js → SavedBlocksPanels-DpxYxddo.js} +2 -2
- package/dist/cdn/chunks/{SavedBlocksPanels-BPi3PZKP.js.map → SavedBlocksPanels-DpxYxddo.js.map} +1 -1
- package/dist/cdn/chunks/{SavedBlocksPickBar-BvB9A5W2.js → SavedBlocksPickBar-Drpoav1B.js} +4 -4
- package/dist/cdn/chunks/{SavedBlocksPickBar-BvB9A5W2.js.map → SavedBlocksPickBar-Drpoav1B.js.map} +1 -1
- package/dist/cdn/chunks/{TemplateScoringPanel-BBCyLnOi.js → TemplateScoringPanel-DBjUNULq.js} +5 -5
- package/dist/cdn/chunks/{TemplateScoringPanel-BBCyLnOi.js.map → TemplateScoringPanel-DBjUNULq.js.map} +1 -1
- package/dist/cdn/chunks/{TestEmailModal-DAGTsBqi.js → TestEmailModal-BTNlSW6f.js} +10 -10
- package/dist/cdn/chunks/{TestEmailModal-DAGTsBqi.js.map → TestEmailModal-BTNlSW6f.js.map} +1 -1
- package/dist/cdn/chunks/{TestEmailPanel-BfenVvfx.js → TestEmailPanel-D0A9Zgxr.js} +2 -2
- package/dist/cdn/chunks/{TestEmailPanel-BfenVvfx.js.map → TestEmailPanel-D0A9Zgxr.js.map} +1 -1
- package/dist/cdn/chunks/{TitleEditor-oQ4gr6wS.js → TitleEditor-CrnuIq62.js} +9 -9
- package/dist/cdn/chunks/{TitleEditor-oQ4gr6wS.js.map → TitleEditor-CrnuIq62.js.map} +1 -1
- package/dist/cdn/chunks/{TplModal-DxOMcVwp.js → TplModal-DYXrTz42.js} +5 -5
- package/dist/cdn/chunks/{TplModal-DxOMcVwp.js.map → TplModal-DYXrTz42.js.map} +1 -1
- package/dist/cdn/chunks/{VersionHistoryMenu-BfVUvWHT.js → VersionHistoryMenu-bDGnE4hb.js} +4 -4
- package/dist/cdn/chunks/VersionHistoryMenu-bDGnE4hb.js.map +1 -0
- package/dist/cdn/chunks/{VersionHistoryPanels-NpDb641L.js → VersionHistoryPanels-82P0Q0HM.js} +2 -2
- package/dist/cdn/chunks/{VersionHistoryPanels-NpDb641L.js.map → VersionHistoryPanels-82P0Q0HM.js.map} +1 -1
- package/dist/cdn/chunks/{VersionPreviewBanner-Cpgt4xHc.js → VersionPreviewBanner-BJiwKkVC.js} +3 -3
- package/dist/cdn/chunks/{VersionPreviewBanner-Cpgt4xHc.js.map → VersionPreviewBanner-BJiwKkVC.js.map} +1 -1
- package/dist/cdn/chunks/{blockTypeIcons-t9vvaiuH.js → blockTypeIcons-CNjJSFun.js} +2 -2
- package/dist/cdn/chunks/{blockTypeIcons-t9vvaiuH.js.map → blockTypeIcons-CNjJSFun.js.map} +1 -1
- package/dist/cdn/chunks/{ca-CNRWAMHI.js → ca-Jx2CDwtn.js} +2 -6
- package/dist/cdn/chunks/ca-Jx2CDwtn.js.map +1 -0
- package/dist/cdn/chunks/{cloud-CullB76F.js → cloud-BLgCKP7Z.js} +452 -227
- package/dist/cdn/chunks/cloud-BLgCKP7Z.js.map +1 -0
- package/dist/cdn/chunks/createCloudRuntime-U-qCH-dq.js +385 -0
- package/dist/cdn/chunks/createCloudRuntime-U-qCH-dq.js.map +1 -0
- package/dist/cdn/chunks/{de-DFYCT4QU.js → de-Ck0pBGHu.js} +2 -6
- package/dist/cdn/chunks/de-Ck0pBGHu.js.map +1 -0
- package/dist/cdn/chunks/{src-CaXeO-gG.js → editor-modal-MXgtarMl.js} +1474 -1935
- package/dist/cdn/chunks/editor-modal-MXgtarMl.js.map +1 -0
- package/dist/cdn/chunks/en-C9U7N77n.js +2 -0
- package/dist/cdn/chunks/{es-OgkdMZGX.js → es-lagTvUfX.js} +2 -6
- package/dist/cdn/chunks/es-lagTvUfX.js.map +1 -0
- package/dist/cdn/chunks/{extensions-BpXY7jO5.js → extensions-B8_jnIkD.js} +3 -3
- package/dist/cdn/chunks/{extensions-BpXY7jO5.js.map → extensions-B8_jnIkD.js.map} +1 -1
- package/dist/cdn/chunks/{fr-Dswns199.js → fr-C4hVl5Lk.js} +2 -6
- package/dist/cdn/chunks/fr-C4hVl5Lk.js.map +1 -0
- package/dist/cdn/chunks/{icons-BLxcQUck.js → icons-BUlqGSgd.js} +24 -24
- package/dist/cdn/chunks/{icons-BLxcQUck.js.map → icons-BUlqGSgd.js.map} +1 -1
- package/dist/cdn/chunks/{keys-DQp8x7Nx.js → keys-DBFhDFng.js} +4 -4
- package/dist/cdn/chunks/{keys-DQp8x7Nx.js.map → keys-DBFhDFng.js.map} +1 -1
- package/dist/cdn/chunks/{nl-CbcPJlrL.js → nl-CReD7Apd.js} +2 -6
- package/dist/cdn/chunks/nl-CReD7Apd.js.map +1 -0
- package/dist/cdn/chunks/{pt-BR-BibOQm-o.js → pt-BR-BRA0-vGP.js} +2 -6
- package/dist/cdn/chunks/pt-BR-BRA0-vGP.js.map +1 -0
- package/dist/cdn/chunks/{src-BC-eolWY.js → src-Ozknnj-v.js} +2 -2
- package/dist/cdn/chunks/{src-BC-eolWY.js.map → src-Ozknnj-v.js.map} +1 -1
- package/dist/cdn/chunks/{useCloudI18n-MxgHWrV6.js → useCloudI18n-DSWSGj-A.js} +2 -2
- package/dist/cdn/chunks/{useCloudI18n-MxgHWrV6.js.map → useCloudI18n-DSWSGj-A.js.map} +1 -1
- package/dist/cdn/chunks/{useEditorCore-D4MytYB9.js → useEditorCore-Cs7rYVBo.js} +488 -406
- package/dist/cdn/chunks/useEditorCore-Cs7rYVBo.js.map +1 -0
- package/dist/cdn/chunks/{useEditorRoot-CteADR3y.js → useEditorRoot-B0zW2nT4.js} +2 -2
- package/dist/cdn/chunks/{useEditorRoot-CteADR3y.js.map → useEditorRoot-B0zW2nT4.js.map} +1 -1
- package/dist/cdn/chunks/{useI18n-Ct1VIFcf.js → useI18n-Dlo7R9RA.js} +2 -2
- package/dist/cdn/chunks/{useI18n-Ct1VIFcf.js.map → useI18n-Dlo7R9RA.js.map} +1 -1
- package/dist/cdn/chunks/{useMergeTag-CSocWpxV.js → useMergeTag-BYAifvh8.js} +3 -3
- package/dist/cdn/chunks/{useMergeTag-CSocWpxV.js.map → useMergeTag-BYAifvh8.js.map} +1 -1
- package/dist/cdn/chunks/{usePopoverPosition-BxVWE5_0.js → usePopoverPosition-ElP3ABaV.js} +2 -2
- package/dist/cdn/chunks/{usePopoverPosition-BxVWE5_0.js.map → usePopoverPosition-ElP3ABaV.js.map} +1 -1
- package/dist/cdn/chunks/{useScrollToBlock-Cz3fpgTK.js → useScrollToBlock-nTbWkgaU.js} +2 -2
- package/dist/cdn/chunks/{useScrollToBlock-Cz3fpgTK.js.map → useScrollToBlock-nTbWkgaU.js.map} +1 -1
- package/dist/cdn/editor.css +1 -1
- package/dist/cdn/editor.js +1094 -1005
- package/dist/cdn/editor.js.map +1 -1
- package/dist/{check-CY-Ec6FV.js → check-DWtkBzBU.js} +1 -1
- package/dist/{chevron-down-BghbWA9p.js → chevron-down-C-Fjxcqj.js} +1 -1
- package/dist/chevron-right-SOkn2d4P.js +11 -0
- package/dist/{chevron-up-n3qFAPS3.js → chevron-up-lntU1ypp.js} +1 -1
- package/dist/{circle-alert-L5uGGFRP.js → circle-alert-CjzUTwy3.js} +1 -1
- package/dist/{clock-Dgnwp18n.js → clock-pB2QKPsJ.js} +1 -1
- package/dist/{cloud-B1c4XIsn.js → cloud-DdidMW6f.js} +445 -200
- package/dist/copy-CId1E038.js +19 -0
- package/dist/createCloudRuntime-x5WZm3p8.js +383 -0
- package/dist/{createLucideIcon-05lB8iWe.js → createLucideIcon-Cwf_nTzE.js} +6 -6
- package/dist/de-Ck0pBGHu.js +83 -0
- package/dist/{dist-BxFbxpgW.js → dist-BVqAYoRB.js} +125 -125
- package/dist/dist-D8i1ixHK.js +177 -0
- package/dist/dist-DBirAJIs.js +410 -0
- package/dist/editor-modal-B_LaQf0s.js +5998 -0
- package/dist/en-DcmpWV53.js +2 -0
- package/dist/es-lagTvUfX.js +83 -0
- package/dist/{extensions-Bawm4BOM.js → extensions-CHOBZRab.js} +42 -42
- package/dist/eye-BuGtFUoJ.js +16 -0
- package/dist/fr-C4hVl5Lk.js +83 -0
- package/dist/{image-up-ovhjl9u9.js → image-up-gH4JEpU5.js} +1 -1
- package/dist/index.d.ts +90 -11
- package/dist/{info-c3KI927I.js → info-BQ60P82u.js} +1 -1
- package/dist/{keys-C3P1yxnr.js → keys-DQA2i1k1.js} +4 -4
- package/dist/link-3R8it3J7.js +14 -0
- package/dist/list-Ccdgj46T.js +33 -0
- package/dist/{loader-circle-B2Y8xZQb.js → loader-circle-B_tAD4k6.js} +1 -1
- package/dist/{message-circle-B7K-naUa.js → message-circle-P-KSc6V0.js} +1 -1
- package/dist/nl-CReD7Apd.js +83 -0
- package/dist/{pencil-BhWTFcp4.js → pencil-9ZiwqS4r.js} +1 -1
- package/dist/plus-BwJEzCaO.js +14 -0
- package/dist/pt-BR-BRA0-vGP.js +83 -0
- package/dist/{refresh-cw-BqUR5vgO.js → refresh-cw-DEgfb2FK.js} +2 -14
- package/dist/{runtime-dom.esm-bundler-BuG03jBM.js → runtime-dom.esm-bundler-PnoZU512.js} +106 -106
- package/dist/search-DqQ8Li5E.js +16 -0
- package/dist/{send-D1vvuW79.js → send-CE6uvqop.js} +1 -1
- package/dist/{shield-check-DjK54PnW.js → shield-check-DhD1Z3rd.js} +1 -1
- package/dist/{sparkles-DNdS9V_3.js → sparkles-R0ZQHa6F.js} +1 -1
- package/dist/style.css +1 -1
- package/dist/templatical-editor.js +2491 -2408
- package/dist/{text-align-start-Bcmo_VUY.js → text-align-start-DSux2UNn.js} +1 -1
- package/dist/{trash-C9bMXvw4.js → trash-Cf_SqsER.js} +1 -1
- package/dist/{triangle-alert-Bn8Bd2Yv.js → triangle-alert-C6tGa6jw.js} +1 -1
- package/dist/{upload-DKgg1gno.js → upload-DusKjpVr.js} +1 -1
- package/dist/{useAliveFlag-PVmp95MT.js → useAliveFlag-oyByIcjy.js} +1 -1
- package/dist/{useCloudI18n-BKoiYsWZ.js → useCloudI18n-BLyh_e2T.js} +2 -2
- package/dist/{useEditorCore-CYGvurZa.js → useEditorCore-DhlKOYwe.js} +1552 -1486
- package/dist/{useEditorRoot-DkRGTQRs.js → useEditorRoot-ds57-l6F.js} +2 -2
- package/dist/{useI18n-CL6RfPzK.js → useI18n-BbdxxpOE.js} +2 -2
- package/dist/{useMergeTag-C9GEpljB.js → useMergeTag-DlvOBW_B.js} +3 -3
- package/dist/{usePopoverPosition-CWxaIWd3.js → usePopoverPosition-CprM5p-c.js} +2 -2
- package/dist/{useScrollToBlock-oUx1HIZ2.js → useScrollToBlock-BTFw0b9O.js} +3 -3
- package/dist/{vue.runtime.esm-bundler-D9JUcKrV.js → vue.runtime.esm-bundler-DShF3P6k.js} +1192 -1181
- package/dist/{x-BPKoRPTG.js → x-D_-42Ukq.js} +1 -1
- package/package.json +9 -12
- package/dist/CloudHeaderExtras-CRUQvgSV.js +0 -59
- package/dist/SavedBlocksBrowserModal-BORqqASb.js +0 -322
- package/dist/TitleEditor-pYEUX6lR.js +0 -198
- package/dist/TplModal-DRx4ytx8.js +0 -51
- package/dist/cdn/chunks/VersionHistoryMenu-BfVUvWHT.js.map +0 -1
- package/dist/cdn/chunks/ca-CNRWAMHI.js.map +0 -1
- package/dist/cdn/chunks/cloud-CullB76F.js.map +0 -1
- package/dist/cdn/chunks/createCloudRuntime-Cx2JpUYU.js +0 -443
- package/dist/cdn/chunks/createCloudRuntime-Cx2JpUYU.js.map +0 -1
- package/dist/cdn/chunks/de-DFYCT4QU.js.map +0 -1
- package/dist/cdn/chunks/en-rGHphLWo.js +0 -2
- package/dist/cdn/chunks/es-OgkdMZGX.js.map +0 -1
- package/dist/cdn/chunks/fr-Dswns199.js.map +0 -1
- package/dist/cdn/chunks/nl-CbcPJlrL.js.map +0 -1
- package/dist/cdn/chunks/pt-BR-BibOQm-o.js.map +0 -1
- package/dist/cdn/chunks/src-CaXeO-gG.js.map +0 -1
- package/dist/cdn/chunks/useEditorCore-D4MytYB9.js.map +0 -1
- package/dist/createCloudRuntime-PevFSH74.js +0 -441
- package/dist/dist-dNiknO7j.js +0 -251
- package/dist/dist-heatwAdo.js +0 -150
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"editor-modal-MXgtarMl.js","names":["t","e","i","n","s","o","r","a","h","c","l","u","d","m"],"sources":["../../../../media-library/src/keys.ts","../../../../media-library/src/i18n/locales/en.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","../../../../../node_modules/.pnpm/vue-advanced-cropper@2.8.9_vue@3.5.42_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/utils/formatAbsoluteDate.ts","../../../../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/utils/treeFolders.ts","../../../../media-library/src/composables/useMediaLibraryUI.ts","../../../../media-library/src/composable.ts","../../../../media-library/src/i18n/index.ts","../../../../media-library/src/components/MediaLibraryModal.vue","../../../../media-library/src/components/MediaLibraryModal.vue"],"sourcesContent":["import type { MediaCategory, MediaOptions } from \"@templatical/types\";\nimport type { InjectionKey, Ref } from \"vue\";\nimport type { MediaTranslations } from \"./i18n\";\n\n/**\n * Client pre-check limits plus the host's `accept` filter.\n *\n * `maxFileSize` / `mimeTypes` are {@link MediaOptions} fields and may be\n * getters — Cloud fills them after construction — so every reader must\n * access them inside a computed, never by destructuring at setup.\n *\n * **Provided by whichever component roots the tree** — `MediaLibraryModal`\n * and `standalone/MediaLibrary.vue` — and consumed by `useMediaCategories`,\n * which five descendants call. It is a provide rather than prop-drilling\n * *only* because of that depth; the values themselves cross the package\n * boundary as props.\n *\n * Vue matches injection keys by identity, so a bare-string\n * `inject(\"mediaLimits\")` never resolves the `Symbol` a host provided — it\n * yields `undefined` silently, and the library opens with no limits and\n * nothing to debug. Props make the cross-package boundary typed; a single\n * exported key makes the intra-package hop impossible to spell two\n * different ways.\n */\nexport type MediaLimits = Pick<MediaOptions, \"maxFileSize\" | \"mimeTypes\"> & {\n accept?: MediaCategory[];\n};\n\nexport const MEDIA_LIMITS_KEY: InjectionKey<MediaLimits> = Symbol(\n \"templaticalMediaLimits\",\n);\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\n/**\n * The active locale's strings, for the twelve components in this package that\n * call `useI18n()`.\n *\n * **Provided by whichever component roots the tree** — `MediaLibraryModal` from\n * the translations it loads for its `locale` prop, `standalone/MediaLibrary.vue`\n * from its own `translations` prop.\n *\n * A `Symbol` for the same reason {@link MEDIA_LIMITS_KEY} is one, and this key\n * exists because that reason was learned the hard way: translations used to be\n * injected under the bare string `\"translations\"`, which never resolves the\n * `Symbol` `@templatical/editor` provides under the same name. A modal mounted\n * inside the editor got `undefined` and every `t.mediaLibrary.*` read threw.\n * Strings cross the package boundary as a `locale` prop; this key carries them\n * the rest of the way.\n */\nexport const TRANSLATIONS_KEY: InjectionKey<Ref<MediaTranslations | null>> =\n Symbol(\"templaticalMediaTranslations\");\n\n/**\n * Resolved UI theme (`\"light\"` / `\"dark\"`) for the overlay chrome, stamped onto\n * `data-tpl-theme` by this package's modals.\n *\n * Set from `MediaLibraryModal`'s `uiTheme` prop. The three sub-modals need it\n * too and teleport away from the modal's own DOM, so it travels by provide\n * rather than by prop-drilling through the markup.\n *\n * A `Symbol` for the reason `MEDIA_LIMITS_KEY` is one, and the third key added\n * after learning it: these modals injected the bare string `\"tplUiTheme\"`, which\n * never resolves the identically-named `Symbol` `@templatical/editor` provides.\n * `data-tpl-theme` was therefore always `undefined` and the media library stayed\n * light inside a dark editor.\n *\n * Absent in the standalone SDK, which has no light/dark concept — the modals\n * inject with a `null` default and simply stamp nothing.\n */\nexport const UI_THEME_KEY: InjectionKey<Readonly<Ref<string | undefined>>> =\n Symbol(\"templaticalMediaUiTheme\");\n\n/**\n * The host's BCP-47 locale, exactly as it arrived on `MediaLibraryModal`'s\n * `locale` prop — unresolved, so it may be unsupported or malformed.\n *\n * For `Intl` formatting only. Translated *strings* come from\n * `TRANSLATIONS_KEY`, already resolved to a bundle this package ships; this is\n * for the labels `Intl` builds itself (dates), where the browser's own locale\n * would otherwise win and disagree with every string beside them.\n *\n * Travels by provide for the reason `UI_THEME_KEY` does: the grid and the\n * preview panel are deep descendants, and the sub-modals teleport away from the\n * modal's own DOM. Always format through `formatAbsoluteDate`, which guards the\n * malformed case.\n */\nexport const UI_LOCALE_KEY: InjectionKey<Readonly<Ref<string | undefined>>> =\n Symbol(\"templaticalMediaUiLocale\");\n","const en = {\n mediaLibrary: {\n title: \"Media Library\",\n searchPlaceholder: \"Search files...\",\n allFiles: \"All Files\",\n filterAll: \"All Types\",\n filterImages: \"Images\",\n filterDocuments: \"Documents\",\n filterVideos: \"Videos\",\n filterAudio: \"Audio\",\n newFolder: \"New Folder\",\n folderName: \"Folder name\",\n noFiles: \"No files found\",\n noSearchResults: \"No files match your search\",\n dropOrClick: \"Drop files here or click to upload\",\n acceptedFormats: \"Images, PDF, Video, Audio, Documents (max 10MB)\",\n uploading: \"Uploading...\",\n uploadingProgress: \"Uploading {current} of {total}...\",\n selectImage: \"Select Image\",\n selectFile: \"Select File\",\n deleteSelected: \"Delete\",\n copyUrl: \"Copy URL\",\n copied: \"Copied!\",\n browseMedia: \"Browse Media Library\",\n renameFolder: \"Rename folder\",\n addSubfolder: \"Add subfolder\",\n subfolderName: \"Subfolder name\",\n sortNewest: \"Newest First\",\n sortOldest: \"Oldest First\",\n sortNameAsc: \"Name A-Z\",\n sortNameDesc: \"Name Z-A\",\n sortSizeAsc: \"Smallest First\",\n sortSizeDesc: \"Largest First\",\n moveSelected: \"Move\",\n moveToRoot: \"All Files\",\n currentFolder: \"(current)\",\n confirmDelete: \"Confirm?\",\n renameFile: \"Rename\",\n editFile: \"Edit File\",\n fileName: \"Filename\",\n altText: \"Alt Text\",\n altTextPlaceholder: \"Describe this image for accessibility\",\n saveChanges: \"Save\",\n cancel: \"Cancel\",\n frequentlyUsed: \"Frequently Used\",\n deleteWarningTitle: \"Delete File\",\n deleteWarningMessage: \"Are you sure? This action is irreversible.\",\n deleteWarningUsageNote:\n \"The following files are used in templates. Deleting them may break those templates.\",\n deleteAnyway: \"Delete\",\n usedInTemplates: \"Used in {count} template(s)\",\n viewGrid: \"Grid view\",\n viewList: \"List view\",\n showFolders: \"Show folders\",\n hideFolders: \"Hide folders\",\n importFromUrl: \"Import from URL\",\n importUrlPlaceholder: \"https://example.com/image.jpg\",\n import: \"Import\",\n importing: \"Importing...\",\n importError: \"Failed to import from URL\",\n replaceFile: \"Replace File\",\n replaceWarningTitle: \"Replace File\",\n replaceWarningMessage:\n \"You are about to replace this file. The replacement must have the same file extension ({extension}).\",\n replaceWarningUsageNote:\n \"This file is used in {count} template(s). Replacing it will update all references.\",\n replaceSelectFile: \"Select replacement file\",\n replace: \"Replace\",\n replacing: \"Replacing...\",\n replaceError: \"Failed to replace file\",\n saving: \"Saving...\",\n cropAspectRatio: \"Aspect Ratio\",\n cropFree: \"Free\",\n cropSquare: \"1:1\",\n cropLandscape43: \"4:3\",\n cropLandscape169: \"16:9\",\n cropOriginal: \"Original\",\n cropMaxWidth: \"Max Width\",\n cropMaxHeight: \"Max Height\",\n cropOutputSize: \"Output Size\",\n cropPixels: \"px\",\n cropOptional: \"(optional)\",\n storageTooltip: \"{used} of {total} used ({remaining} remaining)\",\n },\n};\n\nexport default en;\n","import type { MediaTranslations } from \"../i18n\";\nimport { type Ref, inject, isRef } from \"vue\";\nimport { TRANSLATIONS_KEY } from \"../keys\";\nimport en from \"../i18n/locales/en\";\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 * Resolution order: an explicit override, then `TRANSLATIONS_KEY` from the host\n * component, then bundled English.\n *\n * **English is a floor, not a feature.** `t` is read as `t.mediaLibrary.x` in 28\n * template positions in `MediaLibraryModal` alone and across eleven sibling\n * components, so an unresolved injection is not a missing label — it is a\n * `TypeError` on first render. The fallback keeps a wiring mistake to the wrong\n * *language* rather than a blank library, which is why the previous non-null\n * assertion is gone: it claimed something the type system could not back.\n *\n * The value is unwrapped **once, at setup** — deliberately, since every consumer\n * reads `t.mediaLibrary.x` directly rather than through a ref. A host whose\n * translations arrive asynchronously must therefore withhold its subtree until\n * they land (`MediaLibraryModal` gates on exactly that) rather than expecting a\n * later value to propagate.\n *\n * @param translationsOverride - Optional translations to use instead of the injected value\n */\nexport function useI18n(\n translationsOverride?: MediaTranslations,\n): UseI18nReturn {\n const injected =\n translationsOverride ??\n inject<Ref<MediaTranslations | null> | null>(TRANSLATIONS_KEY, null);\n const resolved = isRef(injected) ? injected.value : injected;\n const t = resolved ?? en;\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 { MediaFolderNode } from \"../../utils/treeFolders\";\nimport { ChevronRight } from \"@lucide/vue\";\nimport { computed } from \"vue\";\n\nconst props = defineProps<{\n folders: MediaFolderNode[];\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: MediaFolderNode[] = [];\n buildPath(props.folders, props.currentFolderId, path);\n return path;\n});\n\nfunction buildPath(\n folderList: MediaFolderNode[],\n targetId: string,\n path: MediaFolderNode[],\n): boolean {\n for (const folder of folderList) {\n if (folder.id === targetId) {\n path.push(folder);\n return true;\n }\n if (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 { MediaFolderNode } from \"../../utils/treeFolders\";\nimport { ChevronRight } from \"@lucide/vue\";\nimport { computed } from \"vue\";\n\nconst props = defineProps<{\n folders: MediaFolderNode[];\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: MediaFolderNode[] = [];\n buildPath(props.folders, props.currentFolderId, path);\n return path;\n});\n\nfunction buildPath(\n folderList: MediaFolderNode[],\n targetId: string,\n path: MediaFolderNode[],\n): boolean {\n for (const folder of folderList) {\n if (folder.id === targetId) {\n path.push(folder);\n return true;\n }\n if (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 { MediaCategory } from \"../types\";\nimport { computed, inject, type ComputedRef } from \"vue\";\nimport { MEDIA_LIMITS_KEY, type MediaLimits } from \"../keys\";\n\nexport type { MediaCategory };\n\n/** Category tabs when the host set no `accept` and the provider set no `mimeTypes`. */\nconst ALL_CATEGORIES: MediaCategory[] = [\n \"images\",\n \"documents\",\n \"videos\",\n \"audio\",\n];\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: (mimeType: string, accept?: MediaCategory[]) => boolean;\n isAcceptedFile: (file: { type: string; size: number }) => boolean;\n isImageMimeType: (mimeType: string) => boolean;\n getCategoryForMimeType: (mimeType: string) => MediaCategory | null;\n}\n\nexport function useMediaCategories(\n /**\n * The limits to read, for callers that cannot inject them.\n *\n * A component never sees its own `provide` — Vue resolves `inject` against\n * the *parent* chain — so the two hosts that provide `MEDIA_LIMITS_KEY`\n * cannot also inject it, and must pass their value here instead. Descendants\n * (`MediaGrid`, `MediaEditModal`, `MediaUploadZone`, `MediaPreviewPanel`)\n * omit the argument and inject. Mirrors `useI18n(override?)`.\n */\n limitsOverride?: MediaLimits,\n): UseMediaCategoriesReturn {\n // Explicit null default + throw rather than a `!` assertion: without a\n // provider every read below became `undefined.maxFileSize`. Reaching this\n // message means a descendant was rendered outside both hosts, or a host\n // forgot the argument above.\n const injected = limitsOverride ?? inject(MEDIA_LIMITS_KEY, null);\n if (!injected) {\n throw new Error(\n \"[Templatical] useMediaCategories() needs media limits in scope. Render it under <MediaLibraryModal> or provide MEDIA_LIMITS_KEY yourself.\",\n );\n }\n // Nested functions below close over this; a narrowed `const` from the\n // throw is not carried into them (TS18047).\n const limits: MediaLimits = injected;\n\n // A provider in scope *is* the feature being on — there is no separate\n // `useMediaLibrary` flag. The composable cannot be constructed without\n // limits, so this is constantly true for every successful caller.\n const isMediaLibraryEnabled = computed(() => true);\n\n // Read `maxFileSize` / `mimeTypes` / `accept` *inside* the computed. Cloud\n // implements the first two as getters over plan config that arrives after\n // construction; capturing them at setup pins the client pre-check to\n // `undefined` for the whole session.\n // Omit is no cap (`??`, so an explicit `0` stays a cap of 0). Infinity\n // keeps `ComputedRef<number>` and `file.size <= n` without a skip branch.\n const maxFileSize = computed(\n () => limits.maxFileSize ?? Number.POSITIVE_INFINITY,\n );\n\n const availableCategories = computed((): MediaCategory[] => {\n const accept = limits.accept;\n if (accept && accept.length > 0) {\n return accept;\n }\n const mimeTypes = limits.mimeTypes;\n if (mimeTypes) {\n return Object.keys(mimeTypes) as MediaCategory[];\n }\n return ALL_CATEGORIES;\n });\n\n const allAcceptedMimeTypes = computed(() => {\n const mimeTypes = limits.mimeTypes;\n if (!mimeTypes) {\n return [];\n }\n return availableCategories.value.flatMap(\n (category) => mimeTypes[category] ?? [],\n );\n });\n\n const allAcceptedInputString = computed(() =>\n allAcceptedMimeTypes.value.join(\",\"),\n );\n\n function isAcceptedMimeType(\n mimeType: string,\n accept?: MediaCategory[],\n ): boolean {\n const mimeTypes = limits.mimeTypes;\n if (!mimeTypes) {\n return true;\n }\n\n const categories =\n accept && accept.length > 0\n ? accept\n : (Object.keys(mimeTypes) as MediaCategory[]);\n\n return categories.some(\n (category) => mimeTypes[category]?.includes(mimeType) ?? false,\n );\n }\n\n function isAcceptedFile(file: { type: string; size: number }): boolean {\n return isAcceptedMimeType(file.type) && file.size <= maxFileSize.value;\n }\n\n function isImageMimeType(mimeType: string): boolean {\n const mimeTypes = limits.mimeTypes;\n if (!mimeTypes) {\n return mimeType.startsWith(\"image/\");\n }\n return mimeTypes.images?.includes(mimeType) ?? false;\n }\n\n function getCategoryForMimeType(mimeType: string): MediaCategory | null {\n const mimeTypes = limits.mimeTypes;\n if (!mimeTypes) {\n return null;\n }\n\n for (const [category, types] of Object.entries(mimeTypes)) {\n if (types?.includes(mimeType)) {\n return category as MediaCategory;\n }\n }\n\n return null;\n }\n\n return {\n isMediaLibraryEnabled,\n allAcceptedMimeTypes,\n allAcceptedInputString,\n maxFileSize,\n availableCategories,\n isAcceptedMimeType,\n isAcceptedFile,\n isImageMimeType,\n getCategoryForMimeType,\n };\n}\n","export type AspectRatioPreset =\n \"free\" | \"square\" | \"landscape43\" | \"landscape169\" | \"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 // Scale width by the ratio against the CURRENT target height (which may\n // already have been reduced by the width branch). The previous formula\n // injected a spurious maxWidth/sourceWidth factor whenever maxWidth was\n // defined but never actually clamped, distorting the aspect ratio.\n const ratio = maxHeight / targetHeight;\n targetWidth = Math.round(targetWidth * ratio);\n targetHeight = maxHeight;\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{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, UI_THEME_KEY } from \"../../keys\";\nimport type { MediaAsset } from \"@templatical/types\";\nimport { computed, inject, ref, watch } 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: MediaAsset | 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(UI_THEME_KEY, null);\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.mimeType ?? \"\");\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 ?? \"\";\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.mimeType ?? \"\");\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.mimeType ?? \"\");\n const file = await canvasToFile(\n resizedCanvas,\n props.item.filename ?? \"image\",\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-10 tpl:flex tpl:items-center tpl:justify-center tpl:p-4\"\n style=\"background-color: var(--tpl-overlay)\"\n @click.self=\"emit('close')\"\n @keydown=\"handleKeydown\"\n >\n <div\n class=\"tpl:flex tpl:max-h-[90%] 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.mimeType ?? '')\" 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, UI_THEME_KEY } from \"../../keys\";\nimport type { MediaAsset } from \"@templatical/types\";\nimport { computed, inject, ref, watch } 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: MediaAsset | 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(UI_THEME_KEY, null);\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.mimeType ?? \"\");\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 ?? \"\";\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.mimeType ?? \"\");\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.mimeType ?? \"\");\n const file = await canvasToFile(\n resizedCanvas,\n props.item.filename ?? \"image\",\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-10 tpl:flex tpl:items-center tpl:justify-center tpl:p-4\"\n style=\"background-color: var(--tpl-overlay)\"\n @click.self=\"emit('close')\"\n @keydown=\"handleKeydown\"\n >\n <div\n class=\"tpl:flex tpl:max-h-[90%] 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.mimeType ?? '')\" 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 { MediaFolderNode } from \"../../utils/treeFolders\";\nimport { ChevronRight, Folder, Pencil, Plus, Trash2 } from \"@lucide/vue\";\nimport { computed, ref } from \"vue\";\n\nconst props = defineProps<{\n folder: MediaFolderNode;\n currentFolderId: string | null;\n depth: number;\n canCreateFolder?: boolean;\n canRenameFolder?: boolean;\n canDeleteFolder?: 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}>();\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);\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) 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: MediaFolderNode[], id: string): boolean {\n for (const folder of folders) {\n if (folder.id === id) return true;\n if (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 && canCreateFolder\"\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 v-if=\"canRenameFolder\"\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 v-if=\"canDeleteFolder\"\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 :can-create-folder=\"canCreateFolder\"\n :can-rename-folder=\"canRenameFolder\"\n :can-delete-folder=\"canDeleteFolder\"\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 { MediaFolderNode } from \"../../utils/treeFolders\";\nimport { ChevronRight, Folder, Pencil, Plus, Trash2 } from \"@lucide/vue\";\nimport { computed, ref } from \"vue\";\n\nconst props = defineProps<{\n folder: MediaFolderNode;\n currentFolderId: string | null;\n depth: number;\n canCreateFolder?: boolean;\n canRenameFolder?: boolean;\n canDeleteFolder?: 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}>();\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);\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) 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: MediaFolderNode[], id: string): boolean {\n for (const folder of folders) {\n if (folder.id === id) return true;\n if (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 && canCreateFolder\"\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 v-if=\"canRenameFolder\"\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 v-if=\"canDeleteFolder\"\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 :can-create-folder=\"canCreateFolder\"\n :can-rename-folder=\"canRenameFolder\"\n :can-delete-folder=\"canDeleteFolder\"\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 { MediaFolderNode } from \"../../utils/treeFolders\";\nimport { File, Plus, Star } from \"@lucide/vue\";\nimport { ref } from \"vue\";\n\ndefineProps<{\n folders: MediaFolderNode[];\n currentFolderId: string | null;\n viewMode: MediaViewMode;\n hasFrequentlyUsed: boolean;\n canCreateFolder?: boolean;\n canRenameFolder?: boolean;\n canDeleteFolder?: 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\n data-testid=\"media-folder-tree\"\n class=\"tpl:flex tpl:h-full tpl:flex-col tpl:overflow-y-auto\"\n >\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 :can-create-folder=\"canCreateFolder\"\n :can-rename-folder=\"canRenameFolder\"\n :can-delete-folder=\"canDeleteFolder\"\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 && canCreateFolder\"\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 data-testid=\"media-frequently-used\"\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 { MediaFolderNode } from \"../../utils/treeFolders\";\nimport { File, Plus, Star } from \"@lucide/vue\";\nimport { ref } from \"vue\";\n\ndefineProps<{\n folders: MediaFolderNode[];\n currentFolderId: string | null;\n viewMode: MediaViewMode;\n hasFrequentlyUsed: boolean;\n canCreateFolder?: boolean;\n canRenameFolder?: boolean;\n canDeleteFolder?: 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\n data-testid=\"media-folder-tree\"\n class=\"tpl:flex tpl:h-full tpl:flex-col tpl:overflow-y-auto\"\n >\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 :can-create-folder=\"canCreateFolder\"\n :can-rename-folder=\"canRenameFolder\"\n :can-delete-folder=\"canDeleteFolder\"\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 && canCreateFolder\"\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 data-testid=\"media-frequently-used\"\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","/**\n * An absolute date label in the **host's** locale.\n *\n * `toLocaleDateString(undefined, …)` formats in the *runtime's* locale — the\n * browser's or the OS's — not the one that reached this package as\n * `MediaLibraryModal`'s `locale` prop. So the library's captions read in the\n * browser's language while every string around them was translated from the\n * editor's `init({ locale })`.\n *\n * Two guards, both reachable from consumer input:\n *\n * - **A malformed tag makes `Intl` throw `RangeError`.** The locale originates\n * in the host's free-text config, so a bad value would take down the grid\n * for a caption. Falls back to the runtime locale — the behaviour before a\n * locale was threaded through at all — rather than to a hardcoded language.\n * A well-formed but *unregistered* tag (`\"zz\"`) is not caught: `Intl`\n * resolves its own fallback.\n * - **An unparseable date yields `\"\"`**, never a literal \"Invalid Date\".\n *\n * A deliberate twin of `formatAbsoluteDateTime` in `@templatical/editor`. They\n * are copies, not a shared module: this package cannot import from the editor\n * (the dependency runs the other way) and `@templatical/types` is the\n * dependency-free leaf rather than a home for display helpers. Behavioural\n * drift between them fails `tests/formatAbsoluteDate.test.ts`, which carries\n * the editor suite's own cases.\n */\nexport function formatAbsoluteDate(\n iso: string,\n locale: string | undefined,\n options?: Intl.DateTimeFormatOptions,\n): string {\n const parsed = new Date(iso);\n if (Number.isNaN(parsed.getTime())) return \"\";\n\n const tag = locale?.trim().replace(/_/g, \"-\") || undefined;\n\n try {\n return parsed.toLocaleDateString(tag, options);\n } catch {\n return parsed.toLocaleDateString(undefined, options);\n }\n}\n","<script setup lang=\"ts\">\nimport MediaFileIcon from \"./MediaFileIcon.vue\";\nimport { useI18n } from \"../../composables/useI18n\";\nimport { UI_LOCALE_KEY } from \"../../keys\";\nimport { formatAbsoluteDate } from \"../../utils/formatAbsoluteDate\";\nimport { useMediaCategories } from \"../../composables/useMediaCategories\";\nimport type { MediaAsset, MediaCategory } from \"@templatical/types\";\nimport { useIntersectionObserver } from \"@vueuse/core\";\nimport { Check, File, LoaderCircle, Pencil, RefreshCw } from \"@lucide/vue\";\nimport { inject, ref } from \"vue\";\n\nconst props = defineProps<{\n items: MediaAsset[];\n selectedIds: Set<string>;\n isLoading: boolean;\n hasMore: boolean;\n accept?: MediaCategory[];\n layout?: \"grid\" | \"list\";\n searchQuery?: string;\n canUpdate?: boolean;\n canReplace?: boolean;\n}>();\n\nconst emit = defineEmits<{\n (e: \"select\", item: MediaAsset): void;\n (e: \"toggle\", id: string): void;\n (e: \"loadMore\"): void;\n (e: \"edit\", item: MediaAsset): void;\n (e: \"replace\", item: MediaAsset): void;\n (e: \"confirm\", item: MediaAsset): void;\n}>();\n\nconst { isAcceptedMimeType, isImageMimeType } = useMediaCategories();\n\nfunction mimeOf(item: MediaAsset): string {\n return item.mimeType ?? \"\";\n}\n\nfunction thumbOf(item: MediaAsset): string {\n return item.thumbnailUrl ?? item.url;\n}\n\nfunction isSelectable(item: MediaAsset): boolean {\n if (!props.accept || props.accept.length === 0) {\n return true;\n }\n\n return isAcceptedMimeType(mimeOf(item), props.accept);\n}\n\nfunction showEdit(item: MediaAsset): boolean {\n return props.canUpdate === true && item.canUpdate !== false;\n}\n\nfunction showReplace(item: MediaAsset): boolean {\n return props.canReplace === true && item.canUpdate !== false;\n}\n\nfunction handleItemClick(item: MediaAsset, event: MouseEvent): void {\n if (event.metaKey || event.ctrlKey) {\n emit(\"toggle\", item.id);\n return;\n }\n emit(\"select\", item);\n}\n\nfunction handleItemDblClick(item: MediaAsset): void {\n if (isSelectable(item)) {\n emit(\"confirm\", item);\n }\n}\n\nconst { t } = useI18n();\nconst uiLocale = inject(UI_LOCALE_KEY, null);\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 formatAbsoluteDate(dateStr, uiLocale?.value, {\n year: \"numeric\",\n month: \"short\",\n day: \"numeric\",\n });\n}\n</script>\n\n<template>\n <div class=\"tpl:p-4\">\n <div\n v-if=\"isLoading && items.length === 0\"\n role=\"status\"\n aria-busy=\"true\"\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 aria-hidden=\"true\"\n />\n </div>\n\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 {{\n searchQuery ? t.mediaLibrary.noSearchResults : t.mediaLibrary.noFiles\n }}\n </p>\n </div>\n\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 data-testid=\"media-library-item\"\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 :data-media-id=\"item.id\"\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, $event)\"\n @dblclick=\"handleItemDblClick(item)\"\n >\n <div class=\"tpl:aspect-square\">\n <img\n v-if=\"isImageMimeType(mimeOf(item))\"\n :src=\"thumbOf(item)\"\n :alt=\"item.filename || item.url\"\n class=\"tpl:size-full tpl:object-cover\"\n loading=\"lazy\"\n />\n <MediaFileIcon v-else :mime-type=\"mimeOf(item)\" />\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 || item.url }}\n </p>\n <p\n class=\"tpl:flex tpl:justify-between tpl:text-[9px]\"\n style=\"color: var(--tpl-text-muted)\"\n >\n <span v-if=\"item.size != null\">{{ formatSize(item.size) }}</span>\n <span\n v-if=\"isImageMimeType(mimeOf(item)) && item.width && item.height\"\n >\n {{ item.width }}×{{ item.height }}\n </span>\n </p>\n </div>\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 <button\n v-if=\"showEdit(item)\"\n data-testid=\"media-edit\"\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 <button\n v-if=\"showReplace(item)\"\n data-testid=\"media-replace\"\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 <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 <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 data-testid=\"media-library-item\"\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 :data-media-id=\"item.id\"\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, $event)\"\n @dblclick=\"handleItemDblClick(item)\"\n >\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(mimeOf(item))\"\n :src=\"thumbOf(item)\"\n :alt=\"item.filename || item.url\"\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=\"mimeOf(item)\" />\n </div>\n </div>\n\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 || item.url }}\n </p>\n <p class=\"tpl:text-[10px]\" style=\"color: var(--tpl-text-muted)\">\n <template v-if=\"item.size != null\">{{\n formatSize(item.size)\n }}</template>\n <template v-if=\"item.createdAt\">\n <template v-if=\"item.size != null\"> · </template>\n {{ formatDate(item.createdAt) }}\n </template>\n <template\n v-if=\"isImageMimeType(mimeOf(item)) && item.width && item.height\"\n >\n ·\n {{ item.width }}×{{ item.height }}\n </template>\n </p>\n </div>\n\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 <button\n v-if=\"showEdit(item)\"\n data-testid=\"media-edit\"\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 <button\n v-if=\"showReplace(item)\"\n data-testid=\"media-replace\"\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 <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 <div ref=\"sentinelRef\" class=\"tpl:h-4\" />\n\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 { UI_LOCALE_KEY } from \"../../keys\";\nimport { formatAbsoluteDate } from \"../../utils/formatAbsoluteDate\";\nimport { useMediaCategories } from \"../../composables/useMediaCategories\";\nimport type { MediaAsset, MediaCategory } from \"@templatical/types\";\nimport { useIntersectionObserver } from \"@vueuse/core\";\nimport { Check, File, LoaderCircle, Pencil, RefreshCw } from \"@lucide/vue\";\nimport { inject, ref } from \"vue\";\n\nconst props = defineProps<{\n items: MediaAsset[];\n selectedIds: Set<string>;\n isLoading: boolean;\n hasMore: boolean;\n accept?: MediaCategory[];\n layout?: \"grid\" | \"list\";\n searchQuery?: string;\n canUpdate?: boolean;\n canReplace?: boolean;\n}>();\n\nconst emit = defineEmits<{\n (e: \"select\", item: MediaAsset): void;\n (e: \"toggle\", id: string): void;\n (e: \"loadMore\"): void;\n (e: \"edit\", item: MediaAsset): void;\n (e: \"replace\", item: MediaAsset): void;\n (e: \"confirm\", item: MediaAsset): void;\n}>();\n\nconst { isAcceptedMimeType, isImageMimeType } = useMediaCategories();\n\nfunction mimeOf(item: MediaAsset): string {\n return item.mimeType ?? \"\";\n}\n\nfunction thumbOf(item: MediaAsset): string {\n return item.thumbnailUrl ?? item.url;\n}\n\nfunction isSelectable(item: MediaAsset): boolean {\n if (!props.accept || props.accept.length === 0) {\n return true;\n }\n\n return isAcceptedMimeType(mimeOf(item), props.accept);\n}\n\nfunction showEdit(item: MediaAsset): boolean {\n return props.canUpdate === true && item.canUpdate !== false;\n}\n\nfunction showReplace(item: MediaAsset): boolean {\n return props.canReplace === true && item.canUpdate !== false;\n}\n\nfunction handleItemClick(item: MediaAsset, event: MouseEvent): void {\n if (event.metaKey || event.ctrlKey) {\n emit(\"toggle\", item.id);\n return;\n }\n emit(\"select\", item);\n}\n\nfunction handleItemDblClick(item: MediaAsset): void {\n if (isSelectable(item)) {\n emit(\"confirm\", item);\n }\n}\n\nconst { t } = useI18n();\nconst uiLocale = inject(UI_LOCALE_KEY, null);\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 formatAbsoluteDate(dateStr, uiLocale?.value, {\n year: \"numeric\",\n month: \"short\",\n day: \"numeric\",\n });\n}\n</script>\n\n<template>\n <div class=\"tpl:p-4\">\n <div\n v-if=\"isLoading && items.length === 0\"\n role=\"status\"\n aria-busy=\"true\"\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 aria-hidden=\"true\"\n />\n </div>\n\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 {{\n searchQuery ? t.mediaLibrary.noSearchResults : t.mediaLibrary.noFiles\n }}\n </p>\n </div>\n\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 data-testid=\"media-library-item\"\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 :data-media-id=\"item.id\"\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, $event)\"\n @dblclick=\"handleItemDblClick(item)\"\n >\n <div class=\"tpl:aspect-square\">\n <img\n v-if=\"isImageMimeType(mimeOf(item))\"\n :src=\"thumbOf(item)\"\n :alt=\"item.filename || item.url\"\n class=\"tpl:size-full tpl:object-cover\"\n loading=\"lazy\"\n />\n <MediaFileIcon v-else :mime-type=\"mimeOf(item)\" />\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 || item.url }}\n </p>\n <p\n class=\"tpl:flex tpl:justify-between tpl:text-[9px]\"\n style=\"color: var(--tpl-text-muted)\"\n >\n <span v-if=\"item.size != null\">{{ formatSize(item.size) }}</span>\n <span\n v-if=\"isImageMimeType(mimeOf(item)) && item.width && item.height\"\n >\n {{ item.width }}×{{ item.height }}\n </span>\n </p>\n </div>\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 <button\n v-if=\"showEdit(item)\"\n data-testid=\"media-edit\"\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 <button\n v-if=\"showReplace(item)\"\n data-testid=\"media-replace\"\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 <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 <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 data-testid=\"media-library-item\"\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 :data-media-id=\"item.id\"\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, $event)\"\n @dblclick=\"handleItemDblClick(item)\"\n >\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(mimeOf(item))\"\n :src=\"thumbOf(item)\"\n :alt=\"item.filename || item.url\"\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=\"mimeOf(item)\" />\n </div>\n </div>\n\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 || item.url }}\n </p>\n <p class=\"tpl:text-[10px]\" style=\"color: var(--tpl-text-muted)\">\n <template v-if=\"item.size != null\">{{\n formatSize(item.size)\n }}</template>\n <template v-if=\"item.createdAt\">\n <template v-if=\"item.size != null\"> · </template>\n {{ formatDate(item.createdAt) }}\n </template>\n <template\n v-if=\"isImageMimeType(mimeOf(item)) && item.width && item.height\"\n >\n ·\n {{ item.width }}×{{ item.height }}\n </template>\n </p>\n </div>\n\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 <button\n v-if=\"showEdit(item)\"\n data-testid=\"media-edit\"\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 <button\n v-if=\"showReplace(item)\"\n data-testid=\"media-replace\"\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 <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 <div ref=\"sentinelRef\" class=\"tpl:h-4\" />\n\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, UI_THEME_KEY } from \"../../keys\";\nimport { LoaderCircle } from \"@lucide/vue\";\nimport { inject, ref, watch } 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(UI_THEME_KEY, null);\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-10 tpl:flex tpl:items-center tpl:justify-center tpl:p-4\"\n style=\"background-color: var(--tpl-overlay)\"\n @click.self=\"handleClose\"\n @keydown=\"handleKeydown\"\n >\n <div\n class=\"tpl:max-h-[90%] tpl:w-full tpl:max-w-sm tpl:overflow-y-auto 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, UI_THEME_KEY } from \"../../keys\";\nimport { LoaderCircle } from \"@lucide/vue\";\nimport { inject, ref, watch } 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(UI_THEME_KEY, null);\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-10 tpl:flex tpl:items-center tpl:justify-center tpl:p-4\"\n style=\"background-color: var(--tpl-overlay)\"\n @click.self=\"handleClose\"\n @keydown=\"handleKeydown\"\n >\n <div\n class=\"tpl:max-h-[90%] tpl:w-full tpl:max-w-sm tpl:overflow-y-auto 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 { MediaFolderNode } from \"../../utils/treeFolders\";\nimport { onClickOutside } from \"@vueuse/core\";\nimport { File, Folder } from \"@lucide/vue\";\nimport { ref } from \"vue\";\n\ndefineProps<{\n folders: MediaFolderNode[];\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: MediaFolderNode[],\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 { MediaFolderNode } from \"../../utils/treeFolders\";\nimport { onClickOutside } from \"@vueuse/core\";\nimport { File, Folder } from \"@lucide/vue\";\nimport { ref } from \"vue\";\n\ndefineProps<{\n folders: MediaFolderNode[];\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: MediaFolderNode[],\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 { UI_LOCALE_KEY } from \"../../keys\";\nimport { formatAbsoluteDate } from \"../../utils/formatAbsoluteDate\";\nimport { useMediaCategories } from \"../../composables/useMediaCategories\";\nimport type { MediaAsset } from \"@templatical/types\";\nimport type { MediaFolderNode } from \"../../utils/treeFolders\";\nimport { Folder } from \"@lucide/vue\";\nimport { computed, inject } from \"vue\";\n\nconst props = defineProps<{\n item: MediaAsset;\n folders?: MediaFolderNode[];\n}>();\n\nconst uiLocale = inject(UI_LOCALE_KEY, null);\n\nconst { isImageMimeType } = useMediaCategories();\n\nfunction buildFolderPath(\n folderList: MediaFolderNode[],\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.length) {\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.folderId || !props.folders) {\n return null;\n }\n const path = buildFolderPath(props.folders, props.item.folderId);\n return path ? path.join(\"/\") : null;\n});\n\nconst mimeType = computed(() => props.item.mimeType ?? \"\");\nconst isImage = computed(() => isImageMimeType(mimeType.value));\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 formatAbsoluteDate(dateStr, uiLocale?.value, {\n year: \"numeric\",\n month: \"short\",\n day: \"numeric\",\n });\n}\n\nconst filename = computed(() => props.item.filename || props.item.url);\n</script>\n\n<template>\n <div class=\"tpl:flex tpl:items-center tpl:gap-3\">\n <img\n v-if=\"isImage\"\n :src=\"item.url\"\n :alt=\"item.alt || 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=\"mimeType\" 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 {{ filename }}\n </p>\n <p\n class=\"tpl:mt-0.5 tpl:text-[10px]\"\n style=\"color: var(--tpl-text-muted)\"\n >\n <template v-if=\"item.size != null\">{{\n formatSize(item.size)\n }}</template>\n <template v-if=\"item.createdAt\">\n <template v-if=\"item.size != null\"> · </template>\n {{ formatDate(item.createdAt) }}\n </template>\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 }\"\n style=\"color: var(--tpl-text-dim)\"\n >\n {{ item.alt || \" \" }}\n </p>\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 { UI_LOCALE_KEY } from \"../../keys\";\nimport { formatAbsoluteDate } from \"../../utils/formatAbsoluteDate\";\nimport { useMediaCategories } from \"../../composables/useMediaCategories\";\nimport type { MediaAsset } from \"@templatical/types\";\nimport type { MediaFolderNode } from \"../../utils/treeFolders\";\nimport { Folder } from \"@lucide/vue\";\nimport { computed, inject } from \"vue\";\n\nconst props = defineProps<{\n item: MediaAsset;\n folders?: MediaFolderNode[];\n}>();\n\nconst uiLocale = inject(UI_LOCALE_KEY, null);\n\nconst { isImageMimeType } = useMediaCategories();\n\nfunction buildFolderPath(\n folderList: MediaFolderNode[],\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.length) {\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.folderId || !props.folders) {\n return null;\n }\n const path = buildFolderPath(props.folders, props.item.folderId);\n return path ? path.join(\"/\") : null;\n});\n\nconst mimeType = computed(() => props.item.mimeType ?? \"\");\nconst isImage = computed(() => isImageMimeType(mimeType.value));\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 formatAbsoluteDate(dateStr, uiLocale?.value, {\n year: \"numeric\",\n month: \"short\",\n day: \"numeric\",\n });\n}\n\nconst filename = computed(() => props.item.filename || props.item.url);\n</script>\n\n<template>\n <div class=\"tpl:flex tpl:items-center tpl:gap-3\">\n <img\n v-if=\"isImage\"\n :src=\"item.url\"\n :alt=\"item.alt || 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=\"mimeType\" 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 {{ filename }}\n </p>\n <p\n class=\"tpl:mt-0.5 tpl:text-[10px]\"\n style=\"color: var(--tpl-text-muted)\"\n >\n <template v-if=\"item.size != null\">{{\n formatSize(item.size)\n }}</template>\n <template v-if=\"item.createdAt\">\n <template v-if=\"item.size != null\"> · </template>\n {{ formatDate(item.createdAt) }}\n </template>\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 }\"\n style=\"color: var(--tpl-text-dim)\"\n >\n {{ item.alt || \" \" }}\n </p>\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, UI_THEME_KEY } from \"../../keys\";\nimport type { MediaAsset, MediaUsageInfo } from \"@templatical/types\";\nimport { computed, inject, ref, watch } from \"vue\";\n\nconst props = defineProps<{\n visible: boolean;\n item: MediaAsset | 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(UI_THEME_KEY, null);\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?.templateCount ?? 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-10 tpl:flex tpl:items-center tpl:justify-center tpl:p-4\"\n style=\"background-color: var(--tpl-overlay)\"\n @click.self=\"emit('close')\"\n @keydown=\"handleKeydown\"\n >\n <div\n class=\"tpl:max-h-[90%] tpl:w-full tpl:max-w-sm tpl:overflow-y-auto 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!.templateCount.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, UI_THEME_KEY } from \"../../keys\";\nimport type { MediaAsset, MediaUsageInfo } from \"@templatical/types\";\nimport { computed, inject, ref, watch } from \"vue\";\n\nconst props = defineProps<{\n visible: boolean;\n item: MediaAsset | 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(UI_THEME_KEY, null);\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?.templateCount ?? 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-10 tpl:flex tpl:items-center tpl:justify-center tpl:p-4\"\n style=\"background-color: var(--tpl-overlay)\"\n @click.self=\"emit('close')\"\n @keydown=\"handleKeydown\"\n >\n <div\n class=\"tpl:max-h-[90%] tpl:w-full tpl:max-w-sm tpl:overflow-y-auto 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!.templateCount.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 { allAcceptedInputString, isAcceptedFile } = 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 (isAcceptedFile(file)) {\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 data-testid=\"media-upload-zone\"\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 { allAcceptedInputString, isAcceptedFile } = 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 (isAcceptedFile(file)) {\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 data-testid=\"media-upload-zone\"\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 data-testid=\"media-storage-ring\"\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 data-testid=\"media-storage-ring\"\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 { MediaFolder } from \"@templatical/types\";\n\n/**\n * A folder plus the children derived from {@link MediaFolder.parentId}.\n *\n * {@link MediaFoldersProvider.list} is flat; the tree is a UI concern so a\n * store never has to return nested nodes.\n */\nexport interface MediaFolderNode extends MediaFolder {\n children: MediaFolderNode[];\n}\n\n/**\n * Group a flat folder list into a tree via `parentId`.\n *\n * A `parentId` that is null, omitted, or not in the list is a root — a\n * dangling reference must still render rather than vanish.\n */\nexport function treeFolders(folders: MediaFolder[]): MediaFolderNode[] {\n const nodes = new Map<string, MediaFolderNode>();\n for (const folder of folders) {\n nodes.set(folder.id, { ...folder, children: [] });\n }\n\n const roots: MediaFolderNode[] = [];\n for (const node of nodes.values()) {\n const parentId = node.parentId ?? null;\n const parent = parentId ? nodes.get(parentId) : undefined;\n if (parent) {\n parent.children.push(node);\n } else {\n roots.push(node);\n }\n }\n return roots;\n}\n","import type { CropData } from \"../components/media/MediaEditModal.vue\";\nimport type { MediaAsset } from \"@templatical/types\";\nimport type { useMediaLibrary } from \"../composable\";\nimport { treeFolders, type MediaFolderNode } from \"../utils/treeFolders\";\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 translations:\n | { mediaLibrary: Record<string, string> }\n | Ref<{ mediaLibrary: Record<string, string> }>;\n}\n\nexport interface UseMediaLibraryUIReturn {\n layoutMode: Ref<\"grid\" | \"list\">;\n showSidebar: Ref<boolean>;\n searchInput: Ref<string>;\n editingItem: Ref<MediaAsset | null>;\n showImportUrlModal: Ref<boolean>;\n showMovePicker: Ref<boolean>;\n\n selectedUrl: ComputedRef<string | null>;\n hasFrequentlyUsed: ComputedRef<boolean>;\n displayItems: ComputedRef<MediaAsset[]>;\n hasUsedFiles: ComputedRef<boolean>;\n folderTree: ComputedRef<MediaFolderNode[]>;\n\n copy: (text: string) => Promise<void>;\n copied: Ref<boolean>;\n\n getCategoryLabel: (category: string) => string;\n\n handleSearchInput: (value: string) => void;\n handleUpload: (files: File[]) => Promise<void>;\n handleSelect: (item: MediaAsset) => 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: MediaAsset) => 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: MediaAsset) => void;\n handleReplaceFile: (file: File) => Promise<void>;\n\n resetUI: () => void;\n}\n\nexport function useMediaLibraryUI(\n options: UseMediaLibraryUIOptions,\n): UseMediaLibraryUIReturn {\n const { library, 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 const layoutMode = ref<\"grid\" | \"list\">(\"grid\");\n const showSidebar = ref(false);\n const searchInput = ref(\"\");\n const editingItem = ref<MediaAsset | null>(null);\n const showImportUrlModal = ref(false);\n const showMovePicker = ref(false);\n\n const selectedUrl = computed(() => library.previewItem.value?.url ?? null);\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.templateCount > 0,\n );\n });\n\n const folderTree = computed(() => treeFolders(library.folders.value));\n\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 watch(showSidebar, (show) => {\n if (show) {\n library.loadFolders();\n }\n });\n\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 const { copy, copied } = useClipboard({ copiedDuring: 2000, legacy: true });\n\n async function handleUpload(files: File[]): Promise<void> {\n await library.uploadFiles(files);\n }\n\n function handleSelect(item: MediaAsset): 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: MediaAsset): 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: MediaAsset): 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 // Assign, don't `search(\"\")`: that would list on close. The next open\n // already calls `loadItems()` with whatever `searchQuery` holds.\n library.searchQuery.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 }\n\n return {\n layoutMode,\n showSidebar,\n searchInput,\n editingItem,\n showImportUrlModal,\n showMovePicker,\n selectedUrl,\n hasFrequentlyUsed,\n displayItems,\n hasUsedFiles,\n folderTree,\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","import type {\n MediaAsset,\n MediaAssetPatch,\n MediaCategory,\n MediaCreateInput,\n MediaFolder,\n MediaFoldersProvider,\n MediaFolderInput,\n MediaListParams,\n MediaProvider,\n MediaStorageInfo,\n MediaUsageInfo,\n} from \"@templatical/types\";\nimport { ref, toValue, type MaybeRefOrGetter, type Ref } from \"vue\";\n\nexport type MediaViewMode = \"files\" | \"frequently-used\";\n\nexport interface UseMediaLibraryOptions {\n /**\n * Storage backend. The composable is transport-agnostic and never talks\n * to a network itself.\n */\n provider: MediaProvider;\n onError?: (error: Error) => void;\n /**\n * Forwarded on `list` / `create` / `importFromUrl` when a template is\n * loaded. Read at call time — a ref that fills after setup must still\n * reach the store.\n */\n templateId?: MaybeRefOrGetter<string | undefined>;\n}\n\n/**\n * Reactive state over a {@link MediaProvider}.\n *\n * Owns the listing, selection, preview, sequential upload loop and the\n * delete-usage flow. Chrome that should hide for a `false` method is the\n * modal's job; this composable simply does not call a disabled method.\n */\nexport function useMediaLibrary(options: UseMediaLibraryOptions) {\n const { provider } = options;\n\n const items: Ref<MediaAsset[]> = 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<MediaCategory | 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<MediaAsset | null> = ref(null);\n const frequentlyUsedItems: Ref<MediaAsset[]> = 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<MediaAsset | null> = ref(null);\n const replaceUsageInfo: Ref<MediaUsageInfo | null> = ref(null);\n const storageInfo: Ref<MediaStorageInfo | null> = ref(null);\n\n // Monotonic token so an out-of-order list/loadMore response (folder\n // switch / search change before the previous request settled) cannot\n // overwrite the current view with stale data.\n let browseRequestId = 0;\n\n /**\n * A handler that throws must not turn a completed write into a rejected\n * one — the UI would report a failure for an asset that was stored.\n */\n function notify(run: () => void): void {\n try {\n run();\n } catch (error) {\n options.onError?.(error as Error);\n }\n }\n\n function foldersProvider(): MediaFoldersProvider | null {\n return provider.folders === false ? null : provider.folders;\n }\n\n /**\n * `sort` is absent: {@link MediaListParams} has no sort field.\n * `sortOption` stays as local UI state; changing it reloads the current\n * filters without inventing an order the store did not advertise.\n */\n function resolvedTemplateId(): string | undefined {\n return toValue(options.templateId);\n }\n\n function currentListParams(cursor?: string): MediaListParams {\n const params: MediaListParams = {};\n if (searchQuery.value) {\n params.search = searchQuery.value;\n } else if (currentFolderId.value != null) {\n params.folderId = currentFolderId.value;\n }\n if (categoryFilter.value) {\n params.category = categoryFilter.value;\n }\n if (cursor) {\n params.cursor = cursor;\n }\n const templateId = resolvedTemplateId();\n if (templateId) {\n params.templateId = templateId;\n }\n return params;\n }\n\n async function loadItems(): Promise<void> {\n const requestId = ++browseRequestId;\n isLoading.value = true;\n const params = currentListParams();\n try {\n const page = await provider.list(params);\n if (requestId !== browseRequestId) return;\n items.value = page.items;\n nextCursor.value = page.nextCursor ?? null;\n hasMore.value = !!page.nextCursor;\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 const params = currentListParams(nextCursor.value);\n try {\n const page = await provider.list(params);\n if (requestId !== browseRequestId) return;\n items.value = [...items.value, ...page.items];\n nextCursor.value = page.nextCursor ?? null;\n hasMore.value = !!page.nextCursor;\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(\n category: MediaCategory | null,\n ): 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<MediaAsset | null> {\n const { create } = provider;\n if (typeof create !== \"function\") {\n return null;\n }\n\n isUploading.value = true;\n try {\n const input: MediaCreateInput = { file };\n if (currentFolderId.value != null) {\n input.folderId = currentFolderId.value;\n }\n const templateId = resolvedTemplateId();\n if (templateId) {\n input.templateId = templateId;\n }\n const media = await create(input);\n items.value = [media, ...items.value];\n notify(() => provider.onCreated?.(media));\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 const { create } = provider;\n if (typeof create !== \"function\") {\n return;\n }\n\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 input: MediaCreateInput = { file: files[i] };\n if (currentFolderId.value != null) {\n input.folderId = currentFolderId.value;\n }\n const templateId = resolvedTemplateId();\n if (templateId) {\n input.templateId = templateId;\n }\n const media = await create(input);\n items.value = [media, ...items.value];\n notify(() => provider.onCreated?.(media));\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 const foldersApi = foldersProvider();\n const { move } = foldersApi ?? { move: false };\n if (typeof move !== \"function\") {\n return;\n }\n\n try {\n const movedItems = await move([...selectedItems.value], targetFolderId);\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 const { update } = provider;\n if (typeof update !== \"function\") {\n return;\n }\n\n try {\n const patch: MediaAssetPatch = { filename };\n if (altText !== undefined) {\n patch.alt = altText;\n }\n const updated = await update(mediaId, patch);\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 notify(() => provider.onUpdated?.(updated));\n } catch (error) {\n options.onError?.(error as Error);\n }\n }\n\n function captureLocalAssets(ids: string[]): MediaAsset[] {\n const captured = new Map<string, MediaAsset>();\n for (const item of items.value) {\n if (ids.includes(item.id)) {\n captured.set(item.id, item);\n }\n }\n for (const item of frequentlyUsedItems.value) {\n if (ids.includes(item.id) && !captured.has(item.id)) {\n captured.set(item.id, item);\n }\n }\n return [...captured.values()];\n }\n\n function dropLocalAssets(ids: string[]): void {\n items.value = items.value.filter((item) => !ids.includes(item.id));\n frequentlyUsedItems.value = frequentlyUsedItems.value.filter(\n (item) => !ids.includes(item.id),\n );\n selectedItems.value = new Set();\n previewItem.value = null;\n }\n\n async function deleteSelected(): Promise<void> {\n if (selectedItems.value.size === 0) return;\n\n const { delete: providerDelete } = provider;\n if (typeof providerDelete !== \"function\") {\n return;\n }\n\n const ids = [...selectedItems.value];\n const captured = captureLocalAssets(ids);\n\n try {\n await providerDelete(ids);\n dropLocalAssets(ids);\n for (const asset of captured) {\n notify(() => provider.onDeleted?.(asset));\n }\n } catch (error) {\n options.onError?.(error as Error);\n }\n }\n\n async function loadFrequentlyUsed(): Promise<void> {\n const { frequentlyUsed } = provider;\n if (typeof frequentlyUsed !== \"function\") {\n return;\n }\n\n try {\n frequentlyUsedItems.value = await frequentlyUsed();\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 const { checkUsage } = provider;\n if (typeof checkUsage !== \"function\") {\n deleteUsageInfo.value = {};\n showDeleteWarning.value = true;\n return false;\n }\n\n try {\n const usage = await checkUsage(pendingDeleteIds.value);\n deleteUsageInfo.value = usage;\n\n const hasUsage = Object.values(usage).some(\n (info) => info.templateCount > 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 const { delete: providerDelete } = provider;\n if (typeof providerDelete !== \"function\") {\n return;\n }\n\n showDeleteWarning.value = false;\n\n if (pendingDeleteIds.value.length === 0) {\n return;\n }\n\n const ids = pendingDeleteIds.value;\n const captured = captureLocalAssets(ids);\n\n try {\n await providerDelete(ids);\n dropLocalAssets(ids);\n pendingDeleteIds.value = [];\n deleteUsageInfo.value = {};\n for (const asset of captured) {\n notify(() => provider.onDeleted?.(asset));\n }\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<MediaAsset | null> {\n const importUrl = provider.importFromUrl;\n if (typeof importUrl !== \"function\") {\n return null;\n }\n\n isImportingFromUrl.value = true;\n importFromUrlError.value = null;\n try {\n const media = await importUrl(\n url,\n currentFolderId.value,\n resolvedTemplateId(),\n );\n items.value = [media, ...items.value];\n notify(() => provider.onCreated?.(media));\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: MediaAsset): void {\n previewItem.value = item;\n selectedItems.value = new Set([item.id]);\n }\n\n async function loadStorage(): Promise<void> {\n const { storage } = provider;\n if (typeof storage !== \"function\") {\n storageInfo.value = null;\n return;\n }\n\n try {\n storageInfo.value = await storage();\n } catch (error) {\n options.onError?.(error as Error);\n }\n }\n\n async function loadFolders(): Promise<void> {\n const foldersApi = foldersProvider();\n if (!foldersApi) {\n return;\n }\n\n try {\n folders.value = await foldersApi.list();\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 const foldersApi = foldersProvider();\n const { create } = foldersApi ?? { create: false };\n if (typeof create !== \"function\") {\n return null;\n }\n\n try {\n const input: MediaFolderInput = { name };\n if (parentId !== undefined) {\n input.parentId = parentId;\n }\n const folder = await create(input);\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 }\n return null;\n }\n\n async function renameFolder(folderId: string, name: string): Promise<void> {\n const foldersApi = foldersProvider();\n const { update } = foldersApi ?? { update: false };\n if (typeof update !== \"function\") {\n return;\n }\n\n try {\n await update(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 const foldersApi = foldersProvider();\n const { delete: deleteFn } = foldersApi ?? { delete: false };\n if (typeof deleteFn !== \"function\") {\n return;\n }\n\n try {\n const folder = findFolderInTree(folders.value, folderId);\n const parentId = folder?.parentId ?? null;\n\n await deleteFn(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: MediaAsset): Promise<void> {\n pendingReplaceItem.value = item;\n replaceError.value = null;\n\n const { checkUsage } = provider;\n if (typeof checkUsage !== \"function\") {\n replaceUsageInfo.value = null;\n showReplaceWarning.value = true;\n return;\n }\n\n try {\n const usage = await checkUsage([item.id]);\n replaceUsageInfo.value = usage[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 function applyReplaced(updated: MediaAsset): void {\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 notify(() => provider.onUpdated?.(updated));\n }\n\n async function replaceFile(file: File): Promise<MediaAsset | null> {\n const { replace } = provider;\n if (typeof replace !== \"function\" || !pendingReplaceItem.value) {\n return null;\n }\n\n isReplacing.value = true;\n replaceError.value = null;\n\n try {\n const updated = await replace(pendingReplaceItem.value.id, file);\n applyReplaced(updated);\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<MediaAsset | null> {\n const { replace } = provider;\n if (typeof replace !== \"function\") {\n return null;\n }\n\n try {\n const updated = await replace(mediaId, file);\n applyReplaced(updated);\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 storageInfo,\n loadStorage,\n };\n}\n","/// <reference types=\"vite/client\" />\n\nimport type en from \"./locales/en\";\n\nexport type MediaTranslations = typeof en;\n\n// Vite resolves this glob at build time. Adding a new locale file\n// automatically registers it — no array to keep in sync.\nconst localeModules = import.meta.glob<{ default: MediaTranslations }>(\n \"./locales/*.ts\",\n);\n\nfunction localesFromGlob(modules: Record<string, unknown>): string[] {\n return Object.keys(modules)\n .map((path) => path.match(/\\/([^/]+)\\.ts$/)?.[1])\n .filter((locale): locale is string => Boolean(locale));\n}\n\nconst supportedLocales = localesFromGlob(localeModules);\n\nfunction canonicalize(locale: string): string {\n return locale.trim().replace(/_/g, \"-\").toLowerCase();\n}\n\nfunction findSupportedLocale(locale: string): string | undefined {\n const canonical = canonicalize(locale);\n return supportedLocales.find((s) => canonicalize(s) === canonical);\n}\n\nfunction getBaseLocale(locale: string): string {\n return canonicalize(locale).split(\"-\")[0];\n}\n\nfunction resolveLocale(locale: string): string {\n return (\n findSupportedLocale(locale) ??\n findSupportedLocale(getBaseLocale(locale)) ??\n \"en\"\n );\n}\n\nexport async function loadMediaTranslations(\n locale: string,\n): Promise<MediaTranslations> {\n const target = resolveLocale(locale);\n const loader = localeModules[`./locales/${target}.ts`];\n const module = await loader();\n return module.default;\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 { useMediaCategories } from \"../composables/useMediaCategories\";\nimport { useMediaLibraryUI } from \"../composables/useMediaLibraryUI\";\nimport { useMediaLibrary } from \"../composable\";\nimport type {\n MediaAsset,\n MediaCategory,\n MediaProvider,\n} from \"@templatical/types\";\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 { computed, provide, ref, toRef, watch } from \"vue\";\nimport {\n MEDIA_LIMITS_KEY,\n POPOVER_TARGET_KEY,\n TRANSLATIONS_KEY,\n UI_LOCALE_KEY,\n UI_THEME_KEY,\n} from \"../keys\";\nimport { loadMediaTranslations, type MediaTranslations } from \"../i18n\";\n\nconst props = defineProps<{\n visible: boolean;\n /**\n * Storage backend. **A prop, not an injection.** An injection would have\n * to agree with the host on key identity: a bare string never resolves\n * the `Symbol` a host provides, and the miss is silent. A prop is checked\n * at compile time.\n */\n provider: MediaProvider;\n accept?: MediaCategory[];\n popoverTarget?: HTMLElement | null;\n /**\n * BCP-47 locale for this package's own strings, defaulting to English.\n *\n * A locale rather than the strings themselves: media-library owns its\n * translations and loads them here, so a host passes a value it already has\n * and never handles media copy. That also keeps the load lazy — the host\n * imports nothing from this package's i18n, so nothing is fetched until this\n * modal mounts.\n */\n locale?: string;\n /**\n * Resolved UI theme (`\"light\"` / `\"dark\"`) for the overlay chrome.\n *\n * A plain string rather than the host's ref: props are reactive, so the\n * computed below tracks a host theme toggle without this package depending on\n * how the host stores it.\n */\n uiTheme?: string;\n /** Forwarded on list / create / importFromUrl when a template is loaded. */\n templateId?: string;\n /**\n * Failures from the storage provider. The composable already reports\n * them here; a host that wants them on its own `onError` passes that\n * function through. Standalone `init()` has no such config, so this\n * stays optional.\n */\n onError?: (error: Error) => void;\n}>();\n\nconst emit = defineEmits<{\n (e: \"close\"): void;\n (e: \"select\", item: MediaAsset): void;\n}>();\n\nconst translations = ref<MediaTranslations | null>(null);\nwatch(\n () => props.locale,\n async (locale) => {\n translations.value = await loadMediaTranslations(locale ?? \"en\");\n },\n { immediate: true },\n);\n\nprovide(TRANSLATIONS_KEY, translations);\n\nconst t = computed(() => translations.value as MediaTranslations);\nconst tplUiTheme = computed(() => props.uiTheme);\nprovide(UI_THEME_KEY, tplUiTheme);\n\nconst popoverTargetRef = toRef(() => props.popoverTarget ?? null);\nprovide(POPOVER_TARGET_KEY, popoverTargetRef);\n\nprovide(\n UI_LOCALE_KEY,\n toRef(() => props.locale),\n);\n\n// Getters, not a snapshot: Cloud implements maxFileSize / mimeTypes as\n// getters over plan config that arrives after this component's setup.\nconst mediaLimits = {\n get maxFileSize() {\n return props.provider.maxFileSize;\n },\n get mimeTypes() {\n return props.provider.mimeTypes;\n },\n get accept() {\n return props.accept;\n },\n};\nprovide(MEDIA_LIMITS_KEY, mediaLimits);\n\nconst { isAcceptedMimeType, availableCategories } =\n useMediaCategories(mediaLimits);\n\nconst library = useMediaLibrary({\n provider: props.provider,\n templateId: () => props.templateId,\n onError: (error) => props.onError?.(error),\n});\n\nconst ui = useMediaLibraryUI({\n library,\n translations: t,\n});\n\nconst canCreate = computed(() => typeof props.provider.create === \"function\");\nconst canFolders = computed(() => props.provider.folders !== false);\nconst canImport = computed(\n () => typeof props.provider.importFromUrl === \"function\",\n);\nconst canDelete = computed(() => typeof props.provider.delete === \"function\");\nconst canUpdate = computed(() => typeof props.provider.update === \"function\");\nconst canReplace = computed(() => typeof props.provider.replace === \"function\");\nconst canFrequentlyUsed = computed(\n () => typeof props.provider.frequentlyUsed === \"function\",\n);\nconst canMove = computed(() => {\n const folders = props.provider.folders;\n return folders !== false && typeof folders.move === \"function\";\n});\nconst canCreateFolder = computed(() => {\n const folders = props.provider.folders;\n return folders !== false && typeof folders.create === \"function\";\n});\nconst canRenameFolder = computed(() => {\n const folders = props.provider.folders;\n return folders !== false && typeof folders.update === \"function\";\n});\nconst canDeleteFolder = computed(() => {\n const folders = props.provider.folders;\n return folders !== false && typeof folders.delete === \"function\";\n});\n\nconst isInitialLoad = computed(\n () => library.isLoading.value && ui.displayItems.value.length === 0,\n);\n\nconst isConfirmable = computed(() => {\n const item = library.previewItem.value;\n if (!item) {\n return false;\n }\n if (!props.accept?.length) {\n return true;\n }\n return isAcceptedMimeType(item.mimeType ?? \"\", props.accept);\n});\n\nconst selectedDeletableCount = computed(() => {\n if (!canDelete.value) {\n return 0;\n }\n let count = 0;\n for (const id of library.selectedItems.value) {\n const item = ui.displayItems.value.find((entry) => entry.id === id);\n if (item?.canDelete !== false) {\n count += 1;\n }\n }\n return count;\n});\n\nwatch(\n () => props.visible,\n (visible) => {\n if (visible) {\n if (props.accept?.length === 1) {\n library.categoryFilter.value = props.accept[0];\n }\n library.loadItems();\n library.loadFrequentlyUsed();\n library.loadStorage();\n } else {\n ui.resetUI();\n }\n },\n { immediate: true },\n);\n\nfunction handleKeydown(event: KeyboardEvent): void {\n if (event.key === \"Escape\") {\n emit(\"close\");\n }\n}\nuseEventListener(document, \"keydown\", handleKeydown);\n\nfunction confirmSelection(): void {\n if (!isConfirmable.value || !library.previewItem.value) {\n return;\n }\n emit(\"select\", library.previewItem.value);\n emit(\"close\");\n}\n\nfunction handleCategoryChange(event: Event): void {\n const value = (event.target as HTMLSelectElement).value;\n library.filterByCategory(value ? (value as MediaCategory) : null);\n}\n\nasync function handleDeleteClick(): Promise<void> {\n const next = new Set<string>();\n for (const id of library.selectedItems.value) {\n const item = ui.displayItems.value.find((entry) => entry.id === id);\n if (item?.canDelete !== false) {\n next.add(id);\n }\n }\n library.selectedItems.value = next;\n await ui.handleDeleteClick();\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 <!-- `translations` gates the subtree, not just this element's own labels:\n every descendant unwraps `TRANSLATIONS_KEY` at its own setup, so none\n may mount before the locale's strings have landed. -->\n <div\n v-if=\"visible && translations\"\n data-testid=\"media-library-modal\"\n :data-tpl-theme=\"tplUiTheme\"\n class=\"tpl tpl-media-overlay tpl:fixed tpl:inset-0 tpl:z-10 tpl:flex tpl:items-center tpl:justify-center tpl:p-4\"\n @click.self=\"emit('close')\"\n >\n <!-- Caps are percentages of the overlay, never viewport units. This\n overlay is `fixed; inset: 0`, which covers the viewport only while\n nothing traps it — an ancestor with `transform`, `filter`,\n `backdrop-filter`, `will-change: transform`, `contain: paint` or\n `container-type` becomes the containing block for fixed\n descendants, and this modal teleports into the editor's popover\n root, i.e. inside a consumer's markup. `inset: 0` then resolves to\n that ancestor's box while a viewport cap does not, and the panel\n overflows a container that usually also has `overflow: hidden`.\n Percentages resolve against whatever the overlay turned out to be.\n Locked by `tests/overlay-height-scope-audit.test.ts`.\n\n `tpl:z-10` beats auto siblings inside the popover root's stacking\n context. A large number is not needed and would fight the\n suggestion popup that also lives there.\n\n `p-4` is the gutter, and it belongs on this element rather than on\n the panel: insets size the overlay's border box, so padding here\n shrinks the content box the panel measures against. `height` stays\n a fixed preference — `max-height` is what reins it in. -->\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: 100%;\n max-height: 90%;\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 v-if=\"library.storageInfo.value\"\n :used-bytes=\"library.storageInfo.value.usedBytes\"\n :limit-bytes=\"library.storageInfo.value.limitBytes\"\n :size=\"22\"\n />\n <div class=\"tpl:relative\">\n <input\n :value=\"ui.searchInput.value\"\n type=\"text\"\n :disabled=\"isInitialLoad\"\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)] tpl:disabled:cursor-not-allowed tpl:disabled:opacity-50\"\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 <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=\"canFolders && 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=\"ui.folderTree.value\"\n :current-folder-id=\"library.currentFolderId.value\"\n :view-mode=\"library.viewMode.value\"\n :has-frequently-used=\"\n canFrequentlyUsed && ui.hasFrequentlyUsed.value\n \"\n :can-create-folder=\"canCreateFolder\"\n :can-rename-folder=\"canRenameFolder\"\n :can-delete-folder=\"canDeleteFolder\"\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 <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 <button\n v-if=\"canFolders\"\n data-testid=\"media-folder-toggle\"\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=\"ui.folderTree.value\"\n :current-folder-id=\"library.currentFolderId.value\"\n @navigate=\"library.navigateToFolder\"\n />\n </template>\n\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=\"handleCategoryChange\"\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 </div>\n </div>\n\n <div class=\"tpl:min-h-0 tpl:flex-1 tpl:overflow-y-auto\">\n <div\n v-if=\"\n library.viewMode.value === 'files' &&\n (canCreate || canImport)\n \"\n class=\"tpl:px-4 tpl:pt-3\"\n >\n <MediaUploadZone\n v-if=\"canCreate\"\n :is-uploading=\"library.isUploading.value\"\n :upload-progress=\"library.uploadProgress.value\"\n @upload=\"ui.handleUpload\"\n />\n <button\n v-if=\"canImport\"\n data-testid=\"media-import-url\"\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 <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 :search-query=\"library.searchQuery.value\"\n :can-update=\"canUpdate\"\n :can-replace=\"canReplace\"\n @select=\"ui.handleSelect\"\n @toggle=\"library.toggleSelection\"\n @load-more=\"library.loadMore\"\n @edit=\"ui.handleEditItem\"\n @replace=\"ui.handleReplaceItem\"\n @confirm=\"confirmSelection\"\n />\n </div>\n </div>\n </div>\n\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 <MediaEditModal\n :visible=\"!!ui.editingItem.value\"\n :item=\"ui.editingItem.value\"\n @save=\"ui.handleEditSave\"\n @close=\"ui.editingItem.value = null\"\n />\n\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 <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 data-testid=\"media-delete-usage\"\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.templateCount > 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.templateCount.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 :item=\"library.previewItem.value\"\n :folders=\"ui.folderTree.value\"\n />\n </div>\n <div class=\"tpl:flex tpl:items-center tpl:gap-5\">\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=\"canMove\" 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=\"ui.folderTree.value\"\n :current-folder-id=\"library.currentFolderId.value\"\n @select=\"ui.handleMoveToFolder\"\n @close=\"ui.showMovePicker.value = false\"\n />\n </div>\n </div>\n <div class=\"tpl:flex tpl:items-center tpl:gap-2\">\n <button\n v-if=\"selectedDeletableCount > 0\"\n data-testid=\"media-delete\"\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=\"handleDeleteClick\"\n >\n {{ t.mediaLibrary.deleteSelected }}\n </button>\n <button\n data-testid=\"media-confirm\"\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 { useMediaCategories } from \"../composables/useMediaCategories\";\nimport { useMediaLibraryUI } from \"../composables/useMediaLibraryUI\";\nimport { useMediaLibrary } from \"../composable\";\nimport type {\n MediaAsset,\n MediaCategory,\n MediaProvider,\n} from \"@templatical/types\";\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 { computed, provide, ref, toRef, watch } from \"vue\";\nimport {\n MEDIA_LIMITS_KEY,\n POPOVER_TARGET_KEY,\n TRANSLATIONS_KEY,\n UI_LOCALE_KEY,\n UI_THEME_KEY,\n} from \"../keys\";\nimport { loadMediaTranslations, type MediaTranslations } from \"../i18n\";\n\nconst props = defineProps<{\n visible: boolean;\n /**\n * Storage backend. **A prop, not an injection.** An injection would have\n * to agree with the host on key identity: a bare string never resolves\n * the `Symbol` a host provides, and the miss is silent. A prop is checked\n * at compile time.\n */\n provider: MediaProvider;\n accept?: MediaCategory[];\n popoverTarget?: HTMLElement | null;\n /**\n * BCP-47 locale for this package's own strings, defaulting to English.\n *\n * A locale rather than the strings themselves: media-library owns its\n * translations and loads them here, so a host passes a value it already has\n * and never handles media copy. That also keeps the load lazy — the host\n * imports nothing from this package's i18n, so nothing is fetched until this\n * modal mounts.\n */\n locale?: string;\n /**\n * Resolved UI theme (`\"light\"` / `\"dark\"`) for the overlay chrome.\n *\n * A plain string rather than the host's ref: props are reactive, so the\n * computed below tracks a host theme toggle without this package depending on\n * how the host stores it.\n */\n uiTheme?: string;\n /** Forwarded on list / create / importFromUrl when a template is loaded. */\n templateId?: string;\n /**\n * Failures from the storage provider. The composable already reports\n * them here; a host that wants them on its own `onError` passes that\n * function through. Standalone `init()` has no such config, so this\n * stays optional.\n */\n onError?: (error: Error) => void;\n}>();\n\nconst emit = defineEmits<{\n (e: \"close\"): void;\n (e: \"select\", item: MediaAsset): void;\n}>();\n\nconst translations = ref<MediaTranslations | null>(null);\nwatch(\n () => props.locale,\n async (locale) => {\n translations.value = await loadMediaTranslations(locale ?? \"en\");\n },\n { immediate: true },\n);\n\nprovide(TRANSLATIONS_KEY, translations);\n\nconst t = computed(() => translations.value as MediaTranslations);\nconst tplUiTheme = computed(() => props.uiTheme);\nprovide(UI_THEME_KEY, tplUiTheme);\n\nconst popoverTargetRef = toRef(() => props.popoverTarget ?? null);\nprovide(POPOVER_TARGET_KEY, popoverTargetRef);\n\nprovide(\n UI_LOCALE_KEY,\n toRef(() => props.locale),\n);\n\n// Getters, not a snapshot: Cloud implements maxFileSize / mimeTypes as\n// getters over plan config that arrives after this component's setup.\nconst mediaLimits = {\n get maxFileSize() {\n return props.provider.maxFileSize;\n },\n get mimeTypes() {\n return props.provider.mimeTypes;\n },\n get accept() {\n return props.accept;\n },\n};\nprovide(MEDIA_LIMITS_KEY, mediaLimits);\n\nconst { isAcceptedMimeType, availableCategories } =\n useMediaCategories(mediaLimits);\n\nconst library = useMediaLibrary({\n provider: props.provider,\n templateId: () => props.templateId,\n onError: (error) => props.onError?.(error),\n});\n\nconst ui = useMediaLibraryUI({\n library,\n translations: t,\n});\n\nconst canCreate = computed(() => typeof props.provider.create === \"function\");\nconst canFolders = computed(() => props.provider.folders !== false);\nconst canImport = computed(\n () => typeof props.provider.importFromUrl === \"function\",\n);\nconst canDelete = computed(() => typeof props.provider.delete === \"function\");\nconst canUpdate = computed(() => typeof props.provider.update === \"function\");\nconst canReplace = computed(() => typeof props.provider.replace === \"function\");\nconst canFrequentlyUsed = computed(\n () => typeof props.provider.frequentlyUsed === \"function\",\n);\nconst canMove = computed(() => {\n const folders = props.provider.folders;\n return folders !== false && typeof folders.move === \"function\";\n});\nconst canCreateFolder = computed(() => {\n const folders = props.provider.folders;\n return folders !== false && typeof folders.create === \"function\";\n});\nconst canRenameFolder = computed(() => {\n const folders = props.provider.folders;\n return folders !== false && typeof folders.update === \"function\";\n});\nconst canDeleteFolder = computed(() => {\n const folders = props.provider.folders;\n return folders !== false && typeof folders.delete === \"function\";\n});\n\nconst isInitialLoad = computed(\n () => library.isLoading.value && ui.displayItems.value.length === 0,\n);\n\nconst isConfirmable = computed(() => {\n const item = library.previewItem.value;\n if (!item) {\n return false;\n }\n if (!props.accept?.length) {\n return true;\n }\n return isAcceptedMimeType(item.mimeType ?? \"\", props.accept);\n});\n\nconst selectedDeletableCount = computed(() => {\n if (!canDelete.value) {\n return 0;\n }\n let count = 0;\n for (const id of library.selectedItems.value) {\n const item = ui.displayItems.value.find((entry) => entry.id === id);\n if (item?.canDelete !== false) {\n count += 1;\n }\n }\n return count;\n});\n\nwatch(\n () => props.visible,\n (visible) => {\n if (visible) {\n if (props.accept?.length === 1) {\n library.categoryFilter.value = props.accept[0];\n }\n library.loadItems();\n library.loadFrequentlyUsed();\n library.loadStorage();\n } else {\n ui.resetUI();\n }\n },\n { immediate: true },\n);\n\nfunction handleKeydown(event: KeyboardEvent): void {\n if (event.key === \"Escape\") {\n emit(\"close\");\n }\n}\nuseEventListener(document, \"keydown\", handleKeydown);\n\nfunction confirmSelection(): void {\n if (!isConfirmable.value || !library.previewItem.value) {\n return;\n }\n emit(\"select\", library.previewItem.value);\n emit(\"close\");\n}\n\nfunction handleCategoryChange(event: Event): void {\n const value = (event.target as HTMLSelectElement).value;\n library.filterByCategory(value ? (value as MediaCategory) : null);\n}\n\nasync function handleDeleteClick(): Promise<void> {\n const next = new Set<string>();\n for (const id of library.selectedItems.value) {\n const item = ui.displayItems.value.find((entry) => entry.id === id);\n if (item?.canDelete !== false) {\n next.add(id);\n }\n }\n library.selectedItems.value = next;\n await ui.handleDeleteClick();\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 <!-- `translations` gates the subtree, not just this element's own labels:\n every descendant unwraps `TRANSLATIONS_KEY` at its own setup, so none\n may mount before the locale's strings have landed. -->\n <div\n v-if=\"visible && translations\"\n data-testid=\"media-library-modal\"\n :data-tpl-theme=\"tplUiTheme\"\n class=\"tpl tpl-media-overlay tpl:fixed tpl:inset-0 tpl:z-10 tpl:flex tpl:items-center tpl:justify-center tpl:p-4\"\n @click.self=\"emit('close')\"\n >\n <!-- Caps are percentages of the overlay, never viewport units. This\n overlay is `fixed; inset: 0`, which covers the viewport only while\n nothing traps it — an ancestor with `transform`, `filter`,\n `backdrop-filter`, `will-change: transform`, `contain: paint` or\n `container-type` becomes the containing block for fixed\n descendants, and this modal teleports into the editor's popover\n root, i.e. inside a consumer's markup. `inset: 0` then resolves to\n that ancestor's box while a viewport cap does not, and the panel\n overflows a container that usually also has `overflow: hidden`.\n Percentages resolve against whatever the overlay turned out to be.\n Locked by `tests/overlay-height-scope-audit.test.ts`.\n\n `tpl:z-10` beats auto siblings inside the popover root's stacking\n context. A large number is not needed and would fight the\n suggestion popup that also lives there.\n\n `p-4` is the gutter, and it belongs on this element rather than on\n the panel: insets size the overlay's border box, so padding here\n shrinks the content box the panel measures against. `height` stays\n a fixed preference — `max-height` is what reins it in. -->\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: 100%;\n max-height: 90%;\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 v-if=\"library.storageInfo.value\"\n :used-bytes=\"library.storageInfo.value.usedBytes\"\n :limit-bytes=\"library.storageInfo.value.limitBytes\"\n :size=\"22\"\n />\n <div class=\"tpl:relative\">\n <input\n :value=\"ui.searchInput.value\"\n type=\"text\"\n :disabled=\"isInitialLoad\"\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)] tpl:disabled:cursor-not-allowed tpl:disabled:opacity-50\"\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 <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=\"canFolders && 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=\"ui.folderTree.value\"\n :current-folder-id=\"library.currentFolderId.value\"\n :view-mode=\"library.viewMode.value\"\n :has-frequently-used=\"\n canFrequentlyUsed && ui.hasFrequentlyUsed.value\n \"\n :can-create-folder=\"canCreateFolder\"\n :can-rename-folder=\"canRenameFolder\"\n :can-delete-folder=\"canDeleteFolder\"\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 <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 <button\n v-if=\"canFolders\"\n data-testid=\"media-folder-toggle\"\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=\"ui.folderTree.value\"\n :current-folder-id=\"library.currentFolderId.value\"\n @navigate=\"library.navigateToFolder\"\n />\n </template>\n\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=\"handleCategoryChange\"\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 </div>\n </div>\n\n <div class=\"tpl:min-h-0 tpl:flex-1 tpl:overflow-y-auto\">\n <div\n v-if=\"\n library.viewMode.value === 'files' &&\n (canCreate || canImport)\n \"\n class=\"tpl:px-4 tpl:pt-3\"\n >\n <MediaUploadZone\n v-if=\"canCreate\"\n :is-uploading=\"library.isUploading.value\"\n :upload-progress=\"library.uploadProgress.value\"\n @upload=\"ui.handleUpload\"\n />\n <button\n v-if=\"canImport\"\n data-testid=\"media-import-url\"\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 <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 :search-query=\"library.searchQuery.value\"\n :can-update=\"canUpdate\"\n :can-replace=\"canReplace\"\n @select=\"ui.handleSelect\"\n @toggle=\"library.toggleSelection\"\n @load-more=\"library.loadMore\"\n @edit=\"ui.handleEditItem\"\n @replace=\"ui.handleReplaceItem\"\n @confirm=\"confirmSelection\"\n />\n </div>\n </div>\n </div>\n\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 <MediaEditModal\n :visible=\"!!ui.editingItem.value\"\n :item=\"ui.editingItem.value\"\n @save=\"ui.handleEditSave\"\n @close=\"ui.editingItem.value = null\"\n />\n\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 <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 data-testid=\"media-delete-usage\"\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.templateCount > 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.templateCount.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 :item=\"library.previewItem.value\"\n :folders=\"ui.folderTree.value\"\n />\n </div>\n <div class=\"tpl:flex tpl:items-center tpl:gap-5\">\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=\"canMove\" 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=\"ui.folderTree.value\"\n :current-folder-id=\"library.currentFolderId.value\"\n @select=\"ui.handleMoveToFolder\"\n @close=\"ui.showMovePicker.value = false\"\n />\n </div>\n </div>\n <div class=\"tpl:flex tpl:items-center tpl:gap-2\">\n <button\n v-if=\"selectedDeletableCount > 0\"\n data-testid=\"media-delete\"\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=\"handleDeleteClick\"\n >\n {{ t.mediaLibrary.deleteSelected }}\n </button>\n <button\n data-testid=\"media-confirm\"\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":[7],"mappings":"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"}
|