@beeintel/batch-image 0.0.0-stage → 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (241) hide show
  1. package/FONT-LICENSE.txt +93 -0
  2. package/README.md +181 -2
  3. package/dist/assets/11st-D7qGO5e4.webp +0 -0
  4. package/dist/assets/UPNG-CPfdwFSy.js +2298 -0
  5. package/dist/assets/adjust-card-B63b81iV.webp +0 -0
  6. package/dist/assets/adjust-final.worker-C2JbTvv5.js +6945 -0
  7. package/dist/assets/amazon-CjTtpZTq.webp +0 -0
  8. package/dist/assets/ascii_art-B4UGbtGs.webp +0 -0
  9. package/dist/assets/auction-j26eVUQO.webp +0 -0
  10. package/dist/assets/background-DGdZUdkL.webp +0 -0
  11. package/dist/assets/background-card-wK7DRpvM.png +0 -0
  12. package/dist/assets/body-CUFdRg8w.webp +0 -0
  13. package/dist/assets/bounded-cutout.worker-BZR6mbaI.js +9615 -0
  14. package/dist/assets/brand-mark-card-cFUeDeO2.webp +0 -0
  15. package/dist/assets/buyma-dAxYNjow.webp +0 -0
  16. package/dist/assets/codec.worker-7W6hmsm6.js +7349 -0
  17. package/dist/assets/contour_lines-C_CqrgV1.webp +0 -0
  18. package/dist/assets/creema-B1tWyCPx.webp +0 -0
  19. package/dist/assets/crop-final.worker-Owin7TvX.js +7035 -0
  20. package/dist/assets/cutout-CzMvV5An.webp +0 -0
  21. package/dist/assets/cutout-card-CN4gNFBz.png +0 -0
  22. package/dist/assets/cutout.worker-DyH6Prbn.js +3894 -0
  23. package/dist/assets/depop-CkVC5Fn1.webp +0 -0
  24. package/dist/assets/dewrinkle-kFzP6LqD.webp +0 -0
  25. package/dist/assets/dither-CcxmO2e6.webp +0 -0
  26. package/dist/assets/douyin-CP_HwBDF.webp +0 -0
  27. package/dist/assets/download.worker-DnGSB6P_.js +17779 -0
  28. package/dist/assets/duotone-Cdg_3fQf.webp +0 -0
  29. package/dist/assets/ebay-CxLfrRAf.webp +0 -0
  30. package/dist/assets/edit-Cv-txfZm.webp +0 -0
  31. package/dist/assets/effect.worker-qu1eCcII.js +9227 -0
  32. package/dist/assets/engraving-BENh1O2O.webp +0 -0
  33. package/dist/assets/etsy-CSvz9GpY.webp +0 -0
  34. package/dist/assets/expand-C60VE9nK.webp +0 -0
  35. package/dist/assets/facebook-Ca2nJJiQ.webp +0 -0
  36. package/dist/assets/film_stock-Bqauwcq4.webp +0 -0
  37. package/dist/assets/final.worker-BnzJ3N5C.js +7035 -0
  38. package/dist/assets/final.worker-Csc1zoYS.js +7054 -0
  39. package/dist/assets/final.worker-DzBFT9xk.js +6922 -0
  40. package/dist/assets/final.worker-XpgKnlaz.js +7217 -0
  41. package/dist/assets/flatlay-CPiVmlAa.webp +0 -0
  42. package/dist/assets/flatlay-fold-B-CRYy87.webp +0 -0
  43. package/dist/assets/flatlay-open-Dzas8okC.webp +0 -0
  44. package/dist/assets/g-market-DXuYK_JH.webp +0 -0
  45. package/dist/assets/ghost-BCEAx_Zx.webp +0 -0
  46. package/dist/assets/ghost-front-WFgA4sUo.webp +0 -0
  47. package/dist/assets/ghost-three-quarter-Rt8cXj34.webp +0 -0
  48. package/dist/assets/gif-CObOIITx.js +303 -0
  49. package/dist/assets/glass_tiles-3IXP-Hmg.webp +0 -0
  50. package/dist/assets/glitch_art-D1i3qben.webp +0 -0
  51. package/dist/assets/glitch_blur-C4q_9zyq.webp +0 -0
  52. package/dist/assets/glow-Bv9EHBU5.webp +0 -0
  53. package/dist/assets/gradient_map-BR-UVYMP.webp +0 -0
  54. package/dist/assets/halftone-CWdKu2_6.webp +0 -0
  55. package/dist/assets/holo_sticker-BQDikLg2.webp +0 -0
  56. package/dist/assets/idus-7diqRNPs.webp +0 -0
  57. package/dist/assets/imagetracer.worker-CgunQTPG.js +7096 -0
  58. package/dist/assets/instagram-Bf0IVidT.webp +0 -0
  59. package/dist/assets/kakao-talk-Df79L_Mv.webp +0 -0
  60. package/dist/assets/kaleidoscope-BxqMZuWo.webp +0 -0
  61. package/dist/assets/karrot-BXFPhDwt.webp +0 -0
  62. package/dist/assets/kaufland-BDDy6e0C.webp +0 -0
  63. package/dist/assets/lazada-ConR4e1O.webp +0 -0
  64. package/dist/assets/lens_flare-DgyiAv_j.webp +0 -0
  65. package/dist/assets/light_leak-kUdpoFuC.webp +0 -0
  66. package/dist/assets/line-Dr1j___B.webp +0 -0
  67. package/dist/assets/linkedin-4s_9Wh03.webp +0 -0
  68. package/dist/assets/lo_fi-DSdl3yY_.webp +0 -0
  69. package/dist/assets/logo-preparation.worker-D9oa7SME.js +420 -0
  70. package/dist/assets/mercado-libre-C8CskEiS.webp +0 -0
  71. package/dist/assets/mercari-jp-DHj7nz4O.webp +0 -0
  72. package/dist/assets/metadata.worker-B_9_BgN1.js +6456 -0
  73. package/dist/assets/mirror_collage-JtSKCeSh.webp +0 -0
  74. package/dist/assets/model-BbeF-fsf.webp +0 -0
  75. package/dist/assets/model-BjWhieit.webp +0 -0
  76. package/dist/assets/momo-BWXO_8Df.webp +0 -0
  77. package/dist/assets/motion_blur-B8YUHeSg.webp +0 -0
  78. package/dist/assets/naver-xQKL8lWg.webp +0 -0
  79. package/dist/assets/nuvemshop-DPt6rnA-.webp +0 -0
  80. package/dist/assets/olx-B87gp-Il.webp +0 -0
  81. package/dist/assets/orient-card-Da0ii6mX.webp +0 -0
  82. package/dist/assets/orient-final.worker-CdF5Y5zD.js +6909 -0
  83. package/dist/assets/orientation-preview.worker-B7uFzz3J.js +6865 -0
  84. package/dist/assets/ort.bundle.min-CreFV8V1.js +9311 -0
  85. package/dist/assets/ort.webgpu.bundle.min-CAudaHZO.js +9311 -0
  86. package/dist/assets/otto-market-DWZyNKJn.webp +0 -0
  87. package/dist/assets/paper_texture-CXphyIrs.webp +0 -0
  88. package/dist/assets/pinterest-ByZqih2J.webp +0 -0
  89. package/dist/assets/polish-DFy6LNG7.webp +0 -0
  90. package/dist/assets/poshmark-DnZi2vA1.webp +0 -0
  91. package/dist/assets/posterize-SpLVGq1s.webp +0 -0
  92. package/dist/assets/preview.worker-DcrCKKWl.js +380 -0
  93. package/dist/assets/qoo10-C1pq81Jx.webp +0 -0
  94. package/dist/assets/rakuten-ulYog1hL.webp +0 -0
  95. package/dist/assets/recolor-mBX7vdFT.webp +0 -0
  96. package/dist/assets/resize-DVEAl0Um.webp +0 -0
  97. package/dist/assets/runtime-0663b902fb3937883a34.wasm +0 -0
  98. package/dist/assets/runtime-355a5c80c7bfdf8737de.mjs +2817 -0
  99. package/dist/assets/runtime-49871f5a4409519797e1.wasm +0 -0
  100. package/dist/assets/runtime-74cf72f9a2b7befc115a.mjs +2817 -0
  101. package/dist/assets/shadow-card-DTZEH60r.png +0 -0
  102. package/dist/assets/shopee-Bxfei6sj.webp +0 -0
  103. package/dist/assets/shopify-wVaBafcF.webp +0 -0
  104. package/dist/assets/shopline-DMoaJ7Bh.webp +0 -0
  105. package/dist/assets/sparkle-CD5GSGip.webp +0 -0
  106. package/dist/assets/ssg-DQoFx5u5.webp +0 -0
  107. package/dist/assets/staging-CIc8pQJ6.webp +0 -0
  108. package/dist/assets/standard-cutout.worker-BYLzdpR-.js +1261 -0
  109. package/dist/assets/text-DQW2mBGp.webp +0 -0
  110. package/dist/assets/textured_glass-D2coxp7n.webp +0 -0
  111. package/dist/assets/tga-VGxWDes0.js +752 -0
  112. package/dist/assets/tilt_shift-BKs46yeX.webp +0 -0
  113. package/dist/assets/transformers.web-DB57cIO5.js +28891 -0
  114. package/dist/assets/tritone-CcR4qizk.webp +0 -0
  115. package/dist/assets/upscale-BrLadyUk.webp +0 -0
  116. package/dist/assets/upscale-creative-DnZnQufJ.webp +0 -0
  117. package/dist/assets/upscale-crisp-Ckdmbsnn.webp +0 -0
  118. package/dist/assets/vinted-1QDsxvC6.webp +0 -0
  119. package/dist/assets/watercolor-CV67zYNE.webp +0 -0
  120. package/dist/assets/watermark-CpPrxaT5.webp +0 -0
  121. package/dist/assets/wave_distortion-CV5jVfK4.webp +0 -0
  122. package/dist/assets/whatsapp-CWJxqzR6.webp +0 -0
  123. package/dist/assets/worker-DfrCFP3O.js +55 -0
  124. package/dist/assets/xerox_noise-CbbHY1S1.webp +0 -0
  125. package/dist/assets/youtube-DS12d5mi.webp +0 -0
  126. package/dist/assets/zalando-CenfWOwz.webp +0 -0
  127. package/dist/browser-adapter.d.ts +4 -0
  128. package/dist/browser-cutout-capability.d.ts +4 -0
  129. package/dist/browser-cutout-resources.d.ts +3 -0
  130. package/dist/browser-local-capabilities.d.ts +5 -0
  131. package/dist/capabilities.d.ts +18 -0
  132. package/dist/chunks/AdjustToolPanel-B6dtlFlj.js +195 -0
  133. package/dist/chunks/BackgroundToolPanel-C3Rr9d4S.js +41 -0
  134. package/dist/chunks/BatchMaterials-DDoJTaS5.js +806 -0
  135. package/dist/chunks/BatchModeChoices-DeBARgvY.js +111 -0
  136. package/dist/chunks/BatchOutputColorPicker-D7WIDS4_.js +75 -0
  137. package/dist/chunks/BatchReferenceFields-Cr5WgFRJ.js +316 -0
  138. package/dist/chunks/BeautifyToolPanel-DDZXDQKM.js +215 -0
  139. package/dist/chunks/BrandMarkToolPanel-vKobk_R3.js +1179 -0
  140. package/dist/chunks/ContentTrimControl-BKCJEst5.js +297 -0
  141. package/dist/chunks/CropToolPanel-C_sW5tWL.js +218 -0
  142. package/dist/chunks/CutoutToolPanel-B7ObmiWd.js +73 -0
  143. package/dist/chunks/DisclosureToolPanel-F3ccFJIF.js +76 -0
  144. package/dist/chunks/ExpandToolPanel-BKjj5UJA.js +67 -0
  145. package/dist/chunks/ImageEffectsToolPanel-CsDIBpT6.js +966 -0
  146. package/dist/chunks/IpAuditToolPanel-CduDfFh-.js +96 -0
  147. package/dist/chunks/ListingToolPanel-8pJ2_zvI.js +783 -0
  148. package/dist/chunks/MaterialSelectionPlate-CW7HaS6v.js +30 -0
  149. package/dist/chunks/MetadataToolPanel-C8XJOamN.js +104 -0
  150. package/dist/chunks/OrientToolPanel-C1AzQchm.js +161 -0
  151. package/dist/chunks/PluginActionFooter.vue_vue_type_script_setup_true_lang-BGe419qz.js +102 -0
  152. package/dist/chunks/ResizeToolPanel-DWikcj2G.js +1178 -0
  153. package/dist/chunks/RetouchToolPanel-B4eQKk2W.js +350 -0
  154. package/dist/chunks/ShadowToolPanel-Bbj76hQd.js +254 -0
  155. package/dist/chunks/SvgExportToolPanel-BRxpzd7q.js +219 -0
  156. package/dist/chunks/TranslationToolPanel-Bxv8U2WY.js +125 -0
  157. package/dist/chunks/UpscaleToolPanel-BRIgpszs.js +127 -0
  158. package/dist/chunks/engine-D-T-1RSx.js +69 -0
  159. package/dist/chunks/entry-CboOSe2r.js +42945 -0
  160. package/dist/chunks/gpu-CScw5MNG.js +231 -0
  161. package/dist/chunks/hosted-resources-COzZ7nZY.js +8196 -0
  162. package/dist/chunks/loader-circle-CylCgDqP.js +16 -0
  163. package/dist/chunks/motionFeatures-D67ghPG1.js +4405 -0
  164. package/dist/chunks/search-BwsDnulU.js +18 -0
  165. package/dist/chunks/standard-cutout-vPpP6xBc.js +45 -0
  166. package/dist/chunks/static-logo-2F9ORZWc.js +34 -0
  167. package/dist/config.d.ts +66 -0
  168. package/dist/contracts.d.ts +272 -0
  169. package/dist/index.d.ts +23 -0
  170. package/dist/index.js +13 -0
  171. package/dist/node/catalog.mjs +45 -0
  172. package/dist/node/cli.mjs +11 -0
  173. package/dist/node/index.d.mts +20 -0
  174. package/dist/node/index.mjs +2 -0
  175. package/dist/node/prepare.mjs +114 -0
  176. package/dist/node/vite.mjs +46 -0
  177. package/dist/processing.d.ts +1 -0
  178. package/dist/processing.js +12105 -0
  179. package/dist/remote-contracts.d.ts +114 -0
  180. package/dist/resource-contracts.d.ts +40 -0
  181. package/dist/resources/cutout/9ae2e5375a34fa413530954dc20d085d175faffc86108c13619220d0557f80bf.json +1 -0
  182. package/dist/resources/cutout/f119dabecc64bc436d3d08425dde96ec2598fd40541eba97d8d53a4e8bbdcaea.json +1 -0
  183. package/dist/resources/cutout/resources.json +195 -0
  184. package/dist/resources/cutout/sources.json +294 -0
  185. package/dist/resources.json +1191 -0
  186. package/dist/service-contracts.d.ts +43 -0
  187. package/dist/slots.d.ts +21 -0
  188. package/dist/style.css +1 -0
  189. package/dist/types/batch/api.d.ts +89 -0
  190. package/dist/types/batch/cutout-output.d.ts +2 -0
  191. package/dist/types/batch/features/background/engine.d.mts +12 -0
  192. package/dist/types/batch/features/basic-edit/contracts.d.ts +87 -0
  193. package/dist/types/batch/features/basic-edit/engine.d.mts +96 -0
  194. package/dist/types/batch/features/brand-mark/contracts.d.ts +84 -0
  195. package/dist/types/batch/features/brand-mark/engine.d.mts +68 -0
  196. package/dist/types/batch/features/export-compression/contracts.d.ts +44 -0
  197. package/dist/types/batch/features/export-compression/gifenc.d.ts +33 -0
  198. package/dist/types/batch/features/export-compression/plan.d.ts +45 -0
  199. package/dist/types/batch/features/export-compression/presentation.d.ts +70 -0
  200. package/dist/types/batch/features/export-compression/upng.d.ts +6 -0
  201. package/dist/types/batch/features/final-image/resize.d.mts +15 -0
  202. package/dist/types/batch/features/image-effects/contracts.d.ts +58 -0
  203. package/dist/types/batch/features/image-effects/gpu-pixel-runtime.d.ts +15 -0
  204. package/dist/types/batch/features/image-effects/photo-audit.d.ts +21 -0
  205. package/dist/types/batch/features/image-effects/photo-v7-cpu.d.ts +9 -0
  206. package/dist/types/batch/features/image-effects/profiles-v4.d.ts +157 -0
  207. package/dist/types/batch/features/image-effects/profiles-v5.d.ts +20 -0
  208. package/dist/types/batch/features/image-effects/profiles-v6.d.ts +14 -0
  209. package/dist/types/batch/features/image-effects/profiles-v7.d.ts +53 -0
  210. package/dist/types/batch/features/image-effects/profiles-v8.d.ts +113 -0
  211. package/dist/types/batch/features/image-effects/profiles-v9.d.ts +20 -0
  212. package/dist/types/batch/features/image-translation/params.d.ts +257 -0
  213. package/dist/types/batch/features/listing-remake/transport.d.ts +21 -0
  214. package/dist/types/batch/features/metadata/bytes.d.mts +13 -0
  215. package/dist/types/batch/features/metadata/containers.d.mts +20 -0
  216. package/dist/types/batch/features/metadata/declaration.d.mts +5 -0
  217. package/dist/types/batch/features/metadata/engine.d.mts +9 -0
  218. package/dist/types/batch/features/metadata/exchange.d.mts +48 -0
  219. package/dist/types/batch/features/shadow/contracts.d.ts +43 -0
  220. package/dist/types/batch/features/shadow/engine.d.mts +33 -0
  221. package/dist/types/batch/features/svg-export/download-contract.d.ts +33 -0
  222. package/dist/types/batch/features/svg-export/download-prepare.d.ts +2 -0
  223. package/dist/types/batch/features/svg-export/download.d.ts +7 -0
  224. package/dist/types/batch/features/svg-export/imagetracer.d.ts +6 -0
  225. package/dist/types/batch/features/svg-export/optimizer.d.ts +2 -0
  226. package/dist/types/batch/ids.d.ts +1 -0
  227. package/dist/types/batch/model.d.ts +317 -0
  228. package/dist/types/batch/public/config.d.ts +66 -0
  229. package/dist/types/batch/public/contracts.d.ts +272 -0
  230. package/dist/types/batch/public/remote-contracts.d.ts +114 -0
  231. package/dist/types/batch/public/resource-contracts.d.ts +40 -0
  232. package/dist/types/batch/public/service-contracts.d.ts +43 -0
  233. package/dist/types/batch/queue.d.ts +34 -0
  234. package/dist/types/batch/receipts.d.ts +85 -0
  235. package/dist/types/batch/retention.d.ts +13 -0
  236. package/dist/types/onnxruntime-web.d.ts +5 -0
  237. package/dist/types/plugins/cutout/core/hosted-resources.d.ts +11 -0
  238. package/dist/types/processing.d.ts +18 -0
  239. package/dist/types/shared/svg-security.d.mts +4 -0
  240. package/dist/types/workspace-worker.d.ts +2 -0
  241. package/package.json +91 -3
@@ -0,0 +1,806 @@
1
+ import { defineComponent as we, ref as pe, watch as U, onBeforeUnmount as xe, openBlock as ee, createElementBlock as ye, withModifiers as Be, normalizeStyle as De, Fragment as Te, renderList as Ae, createElementVNode as Fe, toDisplayString as ze, createCommentVNode as Ie, nextTick as We, computed as He, onMounted as Ne, createBlock as qe } from "vue";
2
+ import { D as Xe, E as _e } from "./entry-CboOSe2r.js";
3
+ const V = {
4
+ regular: {
5
+ refractionCssPx: 9,
6
+ edgeWidthCssPx: 20,
7
+ transmission: 0.25,
8
+ blurCssPx: 5,
9
+ highlight: 0.075
10
+ }
11
+ };
12
+ function Ke(n, i, r) {
13
+ return {
14
+ ...n,
15
+ transmission: Math.min(n.transmission, r, i ? 0.32 : 0.38)
16
+ };
17
+ }
18
+ function W(n, i, r) {
19
+ return Math.min(r, Math.max(i, Number.isFinite(n) ? n : i));
20
+ }
21
+ function Oe(n, i, r, o = n === "toolbar-clear" ? 0.38 : 0.16, f = {
22
+ cssWidth: 0,
23
+ cssHeight: 0,
24
+ radiusCssPx: 0
25
+ }) {
26
+ const a = W((i.meanLuminance + i.localLuminance) / 2, 0, 1), s = W(i.edgeDensity, 0, 1), c = W(i.textDensity, 0, 1), h = i.dark, u = n === "toolbar-clear", b = u ? Math.min(o, h ? 0.32 : 0.38) : Math.min(o, 0.16), d = r.refractionCssPx === V.regular.refractionCssPx && r.edgeWidthCssPx === V.regular.edgeWidthCssPx, y = u ? 1 : 1 - Math.max(0, c - 0.6) * 0.35, g = W(
27
+ Math.min(r.transmission, b * y),
28
+ 0,
29
+ b
30
+ ), v = W(
31
+ u && d ? r.refractionCssPx * (1 + s * 0.28) : r.refractionCssPx,
32
+ 0,
33
+ 24
34
+ ), w = W(
35
+ u && d ? r.blurCssPx * (0.8 + a * 0.2) : r.blurCssPx,
36
+ 0,
37
+ 12
38
+ ), L = W(
39
+ u && d ? r.highlight * (1.15 + s * 0.35) : r.highlight,
40
+ 0,
41
+ 0.12
42
+ ), T = {
43
+ refractionCssPx: v,
44
+ edgeWidthCssPx: W(
45
+ u && d ? r.edgeWidthCssPx * 0.88 : r.edgeWidthCssPx,
46
+ 4,
47
+ 48
48
+ ),
49
+ transmission: g,
50
+ blurCssPx: w,
51
+ highlight: L
52
+ };
53
+ return {
54
+ ...f,
55
+ role: n,
56
+ dark: h,
57
+ environment: i,
58
+ params: T,
59
+ material: T,
60
+ cssWidth: f.cssWidth,
61
+ cssHeight: f.cssHeight,
62
+ radiusCssPx: f.radiusCssPx
63
+ };
64
+ }
65
+ function Ee(n) {
66
+ return n.closest("[data-batch-theme]") ?? document.documentElement;
67
+ }
68
+ const Z = ".lc-result, .basic-preview-overlay, .brand-mark-draft-layer, .resize-draft-preview, .shadow-draft-preview", j = 2048, $e = 4e6;
69
+ function te(n) {
70
+ const i = n.getBoundingClientRect();
71
+ return {
72
+ x: i.left,
73
+ y: i.top,
74
+ width: Math.max(0, i.width),
75
+ height: Math.max(0, i.height)
76
+ };
77
+ }
78
+ function Ue(n, i) {
79
+ const r = i.map(te).filter((u) => u.width > 0 && u.height > 0), o = te(n), f = r.length ? r : [o], a = Math.min(...f.map((u) => u.x)), s = Math.min(...f.map((u) => u.y)), c = Math.max(...f.map((u) => u.x + u.width)), h = Math.max(...f.map((u) => u.y + u.height));
80
+ return {
81
+ x: a,
82
+ y: s,
83
+ width: Math.max(1, c - a),
84
+ height: Math.max(1, h - s)
85
+ };
86
+ }
87
+ function Ve(n, i, r, o) {
88
+ const f = getComputedStyle(i), a = f.backgroundColor || "#151515";
89
+ if (n.fillStyle = a, n.fillRect(o.x - r.x, o.y - r.y, o.width, o.height), !i.matches(".lc-bg-checker")) {
90
+ if (f.backgroundImage !== "none" && f.backgroundImage)
91
+ throw new Error("background-unavailable");
92
+ return;
93
+ }
94
+ const s = Number.parseFloat(f.backgroundSize) / 2;
95
+ if (!Number.isFinite(s) || s < 1) throw new Error("background-unavailable");
96
+ const c = f.backgroundImage.match(/rgba?\([^)]*\)/);
97
+ if (!c) throw new Error("background-unavailable");
98
+ n.fillStyle = c[0];
99
+ const h = Math.floor((o.x - r.x) / s), u = Math.floor((o.y - r.y) / s);
100
+ for (let b = u; r.y + b * s < o.y + o.height; b++)
101
+ for (let d = h; r.x + d * s < o.x + o.width; d++)
102
+ (d + b) % 2 !== 0 && n.fillRect(
103
+ r.x + d * s - r.x,
104
+ r.y + b * s - r.y,
105
+ s,
106
+ s
107
+ );
108
+ }
109
+ function Ge(n, i, r) {
110
+ if (!i.complete || !i.naturalWidth || !i.currentSrc) return;
111
+ const o = i.getBoundingClientRect();
112
+ if (o.right <= r.x || o.left >= r.x + r.width || o.bottom <= r.y || o.top >= r.y + r.height)
113
+ return;
114
+ const f = i.closest(".lc-image-viewport, .card-media"), a = f?.getBoundingClientRect() ?? o, s = i.closest(".lc-scroll")?.getBoundingClientRect() ?? a, c = Math.max(o.left, a.left, s.left, r.x), h = Math.max(o.top, a.top, s.top, r.y), u = Math.min(
115
+ o.right,
116
+ a.right,
117
+ s.right,
118
+ r.x + r.width
119
+ ), b = Math.min(
120
+ o.bottom,
121
+ a.bottom,
122
+ s.bottom,
123
+ r.y + r.height
124
+ );
125
+ if (u <= c || b <= h) return;
126
+ n.save(), n.beginPath(), n.rect(c - r.x, h - r.y, u - c, b - h), n.clip(), f && Ve(n, f, r, {
127
+ x: c,
128
+ y: h,
129
+ width: u - c,
130
+ height: b - h
131
+ });
132
+ const d = getComputedStyle(i).objectFit, y = d === "contain" ? Math.min(o.width / i.naturalWidth, o.height / i.naturalHeight) : d === "cover" ? Math.max(o.width / i.naturalWidth, o.height / i.naturalHeight) : null, g = y === null ? o.width : i.naturalWidth * y, v = y === null ? o.height : i.naturalHeight * y;
133
+ n.drawImage(
134
+ i,
135
+ o.left - r.x + (o.width - g) / 2,
136
+ o.top - r.y + (o.height - v) / 2,
137
+ g,
138
+ v
139
+ ), n.restore();
140
+ }
141
+ function Ye(n, i) {
142
+ if (!n.getContext("2d") || n.width < 1 || n.height < 1)
143
+ return {
144
+ meanLuminance: 0.5,
145
+ localLuminance: 0.5,
146
+ edgeDensity: 0,
147
+ textDensity: 0,
148
+ dark: i,
149
+ pressStrength: 0
150
+ };
151
+ const o = Math.min(64, n.width), f = Math.min(64, n.height), a = document.createElement("canvas");
152
+ a.width = o, a.height = f;
153
+ const s = a.getContext("2d");
154
+ if (!s)
155
+ return {
156
+ meanLuminance: 0.5,
157
+ localLuminance: 0.5,
158
+ edgeDensity: 0,
159
+ textDensity: 0,
160
+ dark: i,
161
+ pressStrength: 0
162
+ };
163
+ s.drawImage(n, 0, 0, o, f);
164
+ const c = s.getImageData(0, 0, o, f).data;
165
+ let h = 0, u = 0, b = 0;
166
+ for (let w = 0; w < c.length; w += 4) {
167
+ const L = (c[w] * 0.2126 + c[w + 1] * 0.7152 + c[w + 2] * 0.0722) / 255;
168
+ h += L, w > 0 && Math.abs(L - b) > 0.12 && u++, b = L;
169
+ }
170
+ const d = Math.max(1, c.length / 4), y = h / d, g = (Math.floor(f / 2) * o + Math.floor(o / 2)) * 4, v = (c[g] * 0.2126 + c[g + 1] * 0.7152 + c[g + 2] * 0.0722) / 255;
171
+ return {
172
+ meanLuminance: y,
173
+ localLuminance: v,
174
+ edgeDensity: u / d,
175
+ textDensity: 0,
176
+ dark: i,
177
+ pressStrength: 0
178
+ };
179
+ }
180
+ function Je(n, i, r = 0) {
181
+ const o = n.querySelector(".focus-surface");
182
+ if (o?.querySelector(Z)) throw new Error("complex-preview");
183
+ const f = i.filter(({ element: g }) => {
184
+ const v = g.getBoundingClientRect(), w = getComputedStyle(g);
185
+ return v.width > 0 && v.height > 0 && w.display !== "none" && w.visibility !== "hidden";
186
+ });
187
+ if (!f.length) throw new Error("offscreen");
188
+ const a = Ue(
189
+ n,
190
+ f.map(({ element: g }) => g)
191
+ ), s = Math.min(
192
+ 1.5,
193
+ typeof devicePixelRatio == "number" && devicePixelRatio > 0 ? devicePixelRatio : 1,
194
+ j / Math.max(a.width, a.height, 1)
195
+ ), c = document.createElement("canvas");
196
+ for (c.width = Math.max(1, Math.min(j, Math.round(a.width * s))), c.height = Math.max(1, Math.min(j, Math.round(a.height * s))); c.width * c.height > $e; )
197
+ c.width = Math.max(1, Math.floor(c.width * 0.9)), c.height = Math.max(1, Math.floor(c.height * 0.9));
198
+ const h = c.getContext("2d");
199
+ if (!h) throw new Error("background-unavailable");
200
+ h.scale(c.width / a.width, c.height / a.height);
201
+ const u = getComputedStyle(f[0].element).getPropertyValue("--panel").trim() || "#151515";
202
+ h.fillStyle = u, h.fillRect(0, 0, a.width, a.height), (o ? o.querySelectorAll("img.lc-source") : n.querySelectorAll(".card-media img")).forEach((g) => Ge(h, g, a));
203
+ const d = f.map(({ key: g, role: v, element: w }) => {
204
+ const L = te(w), T = w.matches(Z) || !!w.querySelector(Z);
205
+ return {
206
+ key: g,
207
+ role: v,
208
+ element: w,
209
+ rect: L,
210
+ fallbackReason: T ? "complex-preview" : void 0,
211
+ uv: {
212
+ x: (L.x - a.x) / a.width,
213
+ y: (L.y - a.y) / a.height,
214
+ width: L.width / a.width,
215
+ height: L.height / a.height
216
+ }
217
+ };
218
+ }), y = Ee(n).dataset.batchTheme === "dark";
219
+ return {
220
+ canvas: c,
221
+ sourceRevision: r,
222
+ viewport: a,
223
+ pixelRatio: c.width / a.width,
224
+ surfaces: d,
225
+ environment: Ye(c, y)
226
+ };
227
+ }
228
+ const be = [
229
+ {
230
+ key: "toolbar",
231
+ selector: ".view-controls:not([data-material-static])",
232
+ role: "toolbar-clear",
233
+ transmission: 0.38,
234
+ portal: !1
235
+ },
236
+ {
237
+ key: "filmstrip",
238
+ selector: ".filmstrip",
239
+ role: "content-regular",
240
+ transmission: 0.12,
241
+ portal: !1
242
+ },
243
+ {
244
+ key: "task-popover",
245
+ selector: ".task-popover",
246
+ role: "content-regular",
247
+ transmission: 0.16,
248
+ portal: !0
249
+ },
250
+ {
251
+ key: "task-drawer",
252
+ selector: ".task-drawer:not([data-material-static])",
253
+ role: "content-regular",
254
+ transmission: 0.12,
255
+ portal: !1
256
+ },
257
+ {
258
+ key: "shortcut-help",
259
+ selector: ".shortcut-help",
260
+ role: "content-regular",
261
+ transmission: 0.12,
262
+ portal: !0
263
+ },
264
+ {
265
+ key: "import-dialog",
266
+ selector: ".import-modal:not([data-material-static])",
267
+ role: "content-regular",
268
+ transmission: 0.12,
269
+ portal: !1
270
+ },
271
+ {
272
+ key: "export-dialog",
273
+ selector: ".compression-dialog:not([data-material-static])",
274
+ role: "content-regular",
275
+ transmission: 0.12,
276
+ portal: !1
277
+ },
278
+ {
279
+ key: "file-tooltip",
280
+ selector: ".file-tooltip",
281
+ role: "content-regular",
282
+ transmission: 0.16,
283
+ portal: !1
284
+ },
285
+ {
286
+ key: "image-menu",
287
+ selector: ".material-image-menu",
288
+ role: "content-regular",
289
+ transmission: 0.16,
290
+ portal: !1
291
+ }
292
+ ], ve = async (n, i) => (await import("./gpu-CScw5MNG.js")).createGpuMaterialSession(n, i);
293
+ function Ze(n, i) {
294
+ if (i === "toolbar-clear") return 0.08;
295
+ const r = n.getBoundingClientRect(), o = Math.max(1, r.width * r.height), f = n.textContent?.trim().length ?? 0, a = Math.min(1, f / 240);
296
+ return Math.min(0.82, Math.max(0.12, a * 0.5 + 1800 / o));
297
+ }
298
+ function Q(n, i, r, o) {
299
+ return r.opaque ? { effective: "solid", reason: "display-preference" } : r.forced ? { effective: "solid", reason: "forced-colors" } : n === "solid" ? { effective: "solid", reason: null } : r.busy ? {
300
+ effective: i ? "frost" : "solid",
301
+ reason: "busy"
302
+ } : o ? {
303
+ effective: i ? "frost" : "solid",
304
+ reason: "hidden"
305
+ } : i ? { effective: "frost", reason: null } : { effective: "solid", reason: "no-backdrop-filter" };
306
+ }
307
+ function je(n, i, r = ve) {
308
+ const o = Ee(n), f = o === document.documentElement ? document.body : o, a = /* @__PURE__ */ new Map(), s = /* @__PURE__ */ new Map(), c = /* @__PURE__ */ new Map(), h = CSS.supports("backdrop-filter", "blur(1px)") || CSS.supports("-webkit-backdrop-filter", "blur(1px)");
309
+ let u = "gpu", b = "none", d = V.regular, y = { busy: !1, reduced: !1, opaque: !1 }, g = !1, v = 0, w = 0, L = 0, T = 0, z = 0, q = !1, l = !1, k = !0, x = null, P, I, B, X, G = new AbortController();
310
+ function ne() {
311
+ X?.close(), X = void 0, B = void 0;
312
+ }
313
+ function A() {
314
+ v++, G.abort(), G = new AbortController(), P?.dispose(), P = void 0, I = void 0, ne();
315
+ for (const { canvas: e } of a.values()) e.hidden = !0;
316
+ }
317
+ function re(e, t) {
318
+ g || i({
319
+ requested: u,
320
+ effective: e,
321
+ reason: t,
322
+ surfaces: a.size,
323
+ paints: T
324
+ });
325
+ }
326
+ function F(e) {
327
+ const t = Q(u, h, y, document.hidden);
328
+ for (const [m, { canvas: p }] of a)
329
+ m.dataset.material = t.effective, p.hidden = !0;
330
+ re(t.effective, e ?? t.reason);
331
+ }
332
+ function Y(e, t) {
333
+ const m = o.dataset.batchTheme === "dark", p = Ke(d, m, t);
334
+ e.style.setProperty("--material-panel", `${(1 - p.transmission) * 100}%`), e.style.setProperty("--material-blur", `${p.blurCssPx}px`), e.style.setProperty("--material-highlight", `${p.highlight}`);
335
+ }
336
+ function ae(e) {
337
+ delete e.dataset.material, delete e.dataset.materialSurface, delete e.dataset.materialReason;
338
+ for (const t of ["--material-panel", "--material-blur", "--material-highlight"])
339
+ e.style.removeProperty(t);
340
+ }
341
+ function ke() {
342
+ const e = be.flatMap((t) => {
343
+ const m = t.portal ? f.querySelector(t.selector) : n.querySelector(t.selector);
344
+ return m && _(m) ? [{ host: m, surface: t }] : [];
345
+ });
346
+ for (const [t, m] of a)
347
+ e.some((p) => p.host === t) || (P?.release(m.canvas), m.canvas.remove(), ae(t), O.unobserve(t), K(t), a.delete(t), k = !0);
348
+ for (const { host: t, surface: m } of e) {
349
+ if (a.has(t)) continue;
350
+ const p = document.createElement("canvas");
351
+ p.className = "ui-material-layer", p.setAttribute("aria-hidden", "true"), p.hidden = !0, t.dataset.materialSurface = m.key, t.dataset.material = Q(
352
+ u,
353
+ h,
354
+ y,
355
+ document.hidden
356
+ ).effective, Y(t, m.transmission), t.prepend(p), a.set(t, { ...m, canvas: p }), O.observe(t), k = !0;
357
+ }
358
+ }
359
+ function _(e) {
360
+ if (e.closest('[data-material-docked="true"], [inert], [aria-hidden="true"], [hidden]'))
361
+ return !1;
362
+ for (let m = e; m; m = m.parentElement) {
363
+ const p = getComputedStyle(m);
364
+ if (p.display === "none" || p.visibility === "hidden" || p.visibility === "collapse" || p.opacity === "0")
365
+ return !1;
366
+ }
367
+ const t = e.getBoundingClientRect();
368
+ return e.isConnected && t.width > 0 && t.height > 0 && t.bottom > 0 && t.top < innerHeight && t.right > 0 && t.left < innerWidth;
369
+ }
370
+ function oe(e) {
371
+ g || (x = e, A(), F(e));
372
+ }
373
+ async function Me(e) {
374
+ if (!I) {
375
+ const t = b === "none" || b === "unsupported" ? void 0 : b, m = G.signal, p = r((R) => {
376
+ !g && e === v && oe(R);
377
+ }, t).then((R) => {
378
+ if (g || e !== v)
379
+ throw R.dispose(), new Error("stale");
380
+ return P = R, R;
381
+ });
382
+ I = new Promise((R, H) => {
383
+ const N = () => {
384
+ clearTimeout(S), m.removeEventListener("abort", E);
385
+ }, E = () => {
386
+ N(), H(new Error("stale"));
387
+ }, S = setTimeout(() => {
388
+ N(), H(new Error("init-timeout"));
389
+ }, 5e3);
390
+ m.addEventListener("abort", E, { once: !0 }), p.then(
391
+ (M) => {
392
+ N(), R(M);
393
+ },
394
+ (M) => {
395
+ N(), H(M);
396
+ }
397
+ );
398
+ });
399
+ }
400
+ return I;
401
+ }
402
+ function Ce(e, t) {
403
+ if (y.reduced) return { ...t, pointer: void 0, pressStrength: 0 };
404
+ const m = s.get(e);
405
+ return m ? { ...t, pointer: m, pressStrength: m.strength } : t;
406
+ }
407
+ async function Se() {
408
+ if (z = 0, !g) {
409
+ if (q) {
410
+ l = !0;
411
+ return;
412
+ }
413
+ q = !0, l = !1;
414
+ try {
415
+ ke();
416
+ const e = Q(u, h, y, document.hidden);
417
+ if (u !== "gpu" || e.reason || x)
418
+ A(), F(x ?? void 0);
419
+ else {
420
+ const t = v, m = w;
421
+ try {
422
+ if (b === "unsupported") {
423
+ x = "unsupported", A(), F(x);
424
+ return;
425
+ }
426
+ if (r === ve && (typeof window > "u" || !window.navigator.gpu || typeof window.createImageBitmap != "function")) {
427
+ x = "unsupported", A(), F(x);
428
+ return;
429
+ }
430
+ const p = be.flatMap(
431
+ (E) => [...a.entries()].filter(([, S]) => S.key === E.key)
432
+ ).filter(([E]) => _(E)).map(([E, S]) => ({
433
+ key: S.key,
434
+ role: S.role,
435
+ element: E
436
+ }));
437
+ if (k || !B) {
438
+ L++, ne();
439
+ try {
440
+ B = Je(n, p, L);
441
+ } catch (E) {
442
+ for (const [, S] of a)
443
+ P?.release(S.canvas), S.canvas.hidden = !0, S.canvas.parentElement?.setAttribute(
444
+ "data-material-reason",
445
+ E instanceof Error ? E.message : "background-unavailable"
446
+ );
447
+ F(E instanceof Error ? E.message : "background-unavailable");
448
+ return;
449
+ }
450
+ k = !1;
451
+ }
452
+ if (!B) throw new Error("background-unavailable");
453
+ const R = /* @__PURE__ */ new Map();
454
+ for (const [E, S] of a) {
455
+ const M = B.surfaces.find(
456
+ (D) => D.key === S.key
457
+ );
458
+ M && !M.fallbackReason && _(E) || (S.canvas.hidden = !0, P?.release(S.canvas), E.dataset.material = e.effective, M?.fallbackReason && (R.set(S.key, M.fallbackReason), E.dataset.materialReason = M.fallbackReason));
459
+ }
460
+ if (!X) {
461
+ const E = await window.createImageBitmap(B.canvas);
462
+ if (g || t !== v || m !== w) {
463
+ E.close();
464
+ return;
465
+ }
466
+ X = E;
467
+ }
468
+ const H = await Me(t);
469
+ let N = 0;
470
+ for (const E of B.surfaces) {
471
+ const S = [...a.entries()].find(
472
+ ([, Pe]) => Pe.key === E.key
473
+ );
474
+ if (!S) continue;
475
+ const [M, D] = S;
476
+ if (R.get(E.key)) continue;
477
+ if (g || t !== v || m !== w) return;
478
+ if (!_(M)) {
479
+ D.canvas.hidden = !0, H.release(D.canvas);
480
+ continue;
481
+ }
482
+ const he = Ce(M, B.environment), Re = {
483
+ meanLuminance: B.environment.meanLuminance,
484
+ localLuminance: B.environment.localLuminance,
485
+ edgeDensity: B.environment.edgeDensity,
486
+ textDensity: Ze(M, D.role),
487
+ dark: B.environment.dark,
488
+ pressStrength: he.pressStrength,
489
+ pointer: he.pointer
490
+ }, ge = M.getBoundingClientRect(), Le = Oe(
491
+ D.role,
492
+ Re,
493
+ d,
494
+ D.transmission,
495
+ {
496
+ key: D.key,
497
+ sceneRect: E.rect,
498
+ sceneUV: E.uv,
499
+ cssWidth: ge.width,
500
+ cssHeight: ge.height,
501
+ radiusCssPx: Number.parseFloat(getComputedStyle(M).borderRadius) || 0
502
+ }
503
+ ), J = await H.paint(D.canvas, X, Le);
504
+ if (g || t !== v || m !== w) return;
505
+ if (!_(M)) {
506
+ D.canvas.hidden = !0, H.release(D.canvas);
507
+ continue;
508
+ }
509
+ if (J.kind === "local-fallback") {
510
+ D.canvas.hidden = !0, M.dataset.material = e.effective, M.dataset.materialReason = J.reason, R.set(D.key, J.reason);
511
+ continue;
512
+ }
513
+ D.canvas.hidden = !1, M.dataset.material = "gpu", delete M.dataset.materialReason, T++, N++;
514
+ }
515
+ !g && t === v && m === w && re(N ? "gpu" : e.effective, R.values().next().value ?? null);
516
+ } catch (p) {
517
+ if (!g && t === v) {
518
+ const R = p instanceof Error && "reason" in p && typeof p.reason == "string" ? p.reason : p instanceof Error ? p.message : "render-failed";
519
+ oe(R);
520
+ }
521
+ }
522
+ }
523
+ } finally {
524
+ q = !1, l && !g && C(!0);
525
+ }
526
+ }
527
+ }
528
+ function C(e = !0) {
529
+ w++, k ||= e, !g && !z && (z = requestAnimationFrame(() => {
530
+ Se();
531
+ }));
532
+ }
533
+ function ie() {
534
+ A(), F(), C(!0);
535
+ }
536
+ const O = new ResizeObserver(() => C(!0)), se = new MutationObserver((e) => {
537
+ e.some((t) => !(!(t.target instanceof Element) || t.target.matches(".ui-material-layer") || t.type === "attributes" && t.attributeName === "style" && t.target.matches("[data-material-surface]"))) && C(!0);
538
+ });
539
+ se.observe(n, {
540
+ subtree: !0,
541
+ childList: !0,
542
+ attributes: !0,
543
+ attributeFilter: [
544
+ "src",
545
+ "style",
546
+ "class",
547
+ "hidden",
548
+ "inert",
549
+ "aria-hidden",
550
+ "data-material-docked"
551
+ ]
552
+ });
553
+ const ce = new MutationObserver(() => C(!0));
554
+ ce.observe(f, { childList: !0 });
555
+ const le = new MutationObserver(() => {
556
+ for (const [e, t] of a) Y(e, t.transmission);
557
+ A(), F(), C(!0);
558
+ });
559
+ le.observe(o, {
560
+ attributes: !0,
561
+ attributeFilter: ["data-batch-theme"]
562
+ }), O.observe(n), n.dataset.materials = "true";
563
+ const ue = [
564
+ "pointerover",
565
+ "pointermove",
566
+ "pointerout",
567
+ "focusin",
568
+ "focusout",
569
+ "pointerdown",
570
+ "pointerup"
571
+ ];
572
+ function K(e) {
573
+ s.delete(e);
574
+ const t = c.get(e);
575
+ t !== void 0 && clearTimeout(t), c.delete(e);
576
+ }
577
+ function $(e) {
578
+ if (!(e.target instanceof Element)) return;
579
+ const t = e.target.closest("[data-material-surface]");
580
+ if (!t) {
581
+ (e.type === "focusin" || e.type === "focusout") && C(!0);
582
+ return;
583
+ }
584
+ if (y.reduced) {
585
+ K(t);
586
+ return;
587
+ }
588
+ if (e.type === "pointerout" && e instanceof PointerEvent) {
589
+ const m = e.relatedTarget;
590
+ if (m instanceof Node && t.contains(m)) return;
591
+ K(t), C(!1);
592
+ return;
593
+ }
594
+ if (e instanceof PointerEvent) {
595
+ const m = t.getBoundingClientRect(), p = e.type === "pointerdown" ? 1 : e.type === "pointerup" ? 0.25 : 0.65;
596
+ if (s.set(t, {
597
+ x: Math.max(0, Math.min(1, (e.clientX - m.left) / Math.max(1, m.width))),
598
+ y: Math.max(0, Math.min(1, (e.clientY - m.top) / Math.max(1, m.height))),
599
+ strength: p
600
+ }), e.type === "pointerup") {
601
+ const R = c.get(t);
602
+ R !== void 0 && clearTimeout(R), c.set(
603
+ t,
604
+ setTimeout(() => {
605
+ K(t), C(!1);
606
+ }, 180)
607
+ );
608
+ }
609
+ }
610
+ C(e.type === "focusin" || e.type === "focusout");
611
+ }
612
+ ue.forEach((e) => {
613
+ n.addEventListener(e, $, !0), document.addEventListener(e, $, !0);
614
+ });
615
+ const de = () => C(!0), fe = () => C(!0), me = () => C(!0);
616
+ return n.addEventListener("load", de, !0), n.addEventListener("scroll", fe, !0), window.addEventListener("resize", me), document.addEventListener("visibilitychange", ie), C(!0), {
617
+ setMode(e) {
618
+ u = e, x = null, A(), F(), C(!0);
619
+ },
620
+ setParams(e) {
621
+ d = e;
622
+ for (const [t, m] of a) Y(t, m.transmission);
623
+ C(!1);
624
+ },
625
+ setFault(e) {
626
+ b = e, x = null, A(), F(), C(!0);
627
+ },
628
+ setPolicy(e) {
629
+ if (JSON.stringify(y) !== JSON.stringify(e)) {
630
+ if (y = e, y.reduced)
631
+ for (const t of s.keys()) K(t);
632
+ A(), F(), C(!0);
633
+ }
634
+ },
635
+ loseDevice() {
636
+ P?.loseDevice();
637
+ },
638
+ dispose() {
639
+ if (!g) {
640
+ g = !0, A(), cancelAnimationFrame(z), O.disconnect(), se.disconnect(), ce.disconnect(), le.disconnect(), ue.forEach((e) => {
641
+ n.removeEventListener(e, $, !0), document.removeEventListener(e, $, !0);
642
+ }), n.removeEventListener("load", de, !0), n.removeEventListener("scroll", fe, !0), window.removeEventListener("resize", me), document.removeEventListener("visibilitychange", ie);
643
+ for (const [e, t] of a)
644
+ t.canvas.remove(), ae(e);
645
+ a.clear();
646
+ for (const e of c.values()) clearTimeout(e);
647
+ s.clear(), c.clear(), delete n.dataset.materials, delete n.dataset.materialRequested, delete n.dataset.materialEffective, delete n.dataset.materialReason;
648
+ }
649
+ }
650
+ };
651
+ }
652
+ const Qe = ["aria-label"], et = ["onClick"], tt = /* @__PURE__ */ we({
653
+ __name: "MaterialImageMenu",
654
+ props: {
655
+ root: {},
656
+ ready: { type: Boolean },
657
+ viewerKey: {},
658
+ labels: {}
659
+ },
660
+ emits: ["action"],
661
+ setup(n, { emit: i }) {
662
+ const r = n, o = i, f = ["fit", "zoom-in", "zoom-out"], a = pe(), s = pe();
663
+ let c, h, u, b = 0;
664
+ function d(l = !0) {
665
+ b++, s.value && (s.value = void 0, l && c?.isConnected && c.focus({ preventScroll: !0 }));
666
+ }
667
+ function y(l) {
668
+ a.value?.querySelectorAll('[role="menuitem"]')[l]?.focus();
669
+ }
670
+ async function g(l, k) {
671
+ l.preventDefault(), l.stopPropagation(), c = l instanceof KeyboardEvent && document.activeElement instanceof HTMLElement ? document.activeElement : k;
672
+ const x = k.getBoundingClientRect();
673
+ s.value = l instanceof MouseEvent ? { x: l.clientX, y: l.clientY } : {
674
+ x: x.left + x.width / 2,
675
+ y: x.top + Math.min(100, x.height / 2)
676
+ };
677
+ const P = ++b;
678
+ if (await We(), P !== b || !a.value || !s.value) return;
679
+ const I = a.value.getBoundingClientRect(), B = getComputedStyle(a.value).direction === "rtl";
680
+ s.value = {
681
+ x: Math.max(
682
+ 8,
683
+ Math.min(s.value.x - (B ? I.width : 0), innerWidth - I.width - 8)
684
+ ),
685
+ y: Math.max(8, Math.min(s.value.y, innerHeight - I.height - 8))
686
+ }, y(0);
687
+ }
688
+ function v(l) {
689
+ if (!r.ready || !(l.target instanceof Element)) return;
690
+ const k = l.target.closest(".focus-surface");
691
+ !k || !r.root?.contains(k) || l.target.closest(
692
+ 'button,input,select,textarea,a,[role="button"],[role="slider"],[contenteditable]'
693
+ ) || l instanceof KeyboardEvent && !(l.key === "F10" && l.shiftKey) || g(l, k);
694
+ }
695
+ function w(l) {
696
+ l.stopPropagation();
697
+ const x = [...a.value?.querySelectorAll('[role="menuitem"]') ?? []].findIndex((P) => P === document.activeElement);
698
+ if (l.key === "Escape")
699
+ l.preventDefault(), d();
700
+ else if (l.key === "Tab") d(!1);
701
+ else if (["ArrowDown", "ArrowUp", "Home", "End"].includes(l.key)) {
702
+ l.preventDefault();
703
+ const P = l.key === "Home" ? 0 : l.key === "End" ? f.length - 1 : (x + (l.key === "ArrowDown" ? 1 : -1) + f.length) % f.length;
704
+ y(P);
705
+ }
706
+ }
707
+ function L(l) {
708
+ d(), o("action", l);
709
+ }
710
+ function T(l) {
711
+ l.target instanceof Node && !a.value?.contains(l.target) && d(l.type !== "focusin");
712
+ }
713
+ function z() {
714
+ d();
715
+ }
716
+ function q() {
717
+ h?.removeEventListener("contextmenu", v), h?.removeEventListener("keydown", v), u?.(), h = r.root, h?.addEventListener("contextmenu", v), h?.addEventListener("keydown", v);
718
+ const l = r.ready ? h?.querySelector(".focus-surface") : void 0;
719
+ if (l) {
720
+ const k = l.getAttribute("tabindex");
721
+ l.tabIndex = 0, u = () => {
722
+ k === null ? l.removeAttribute("tabindex") : l.setAttribute("tabindex", k);
723
+ };
724
+ } else u = void 0;
725
+ }
726
+ return U(
727
+ () => [r.root, r.ready, r.viewerKey],
728
+ () => {
729
+ d(), q();
730
+ },
731
+ { immediate: !0, flush: "post" }
732
+ ), U(s, (l, k) => {
733
+ if (!!l == !!k) return;
734
+ const x = l ? "addEventListener" : "removeEventListener";
735
+ document[x]("pointerdown", T, !0), document[x]("focusin", T, !0), window[x]("resize", z), window[x]("blur", z);
736
+ }), xe(() => {
737
+ d(!1), h?.removeEventListener("contextmenu", v), h?.removeEventListener("keydown", v), u?.(), document.removeEventListener("pointerdown", T, !0), document.removeEventListener("focusin", T, !0), window.removeEventListener("resize", z), window.removeEventListener("blur", z);
738
+ }), (l, k) => s.value ? (ee(), ye("div", {
739
+ key: 0,
740
+ ref_key: "menu",
741
+ ref: a,
742
+ class: "material-image-menu",
743
+ role: "menu",
744
+ "aria-label": n.labels.menu,
745
+ style: De({ left: `${s.value.x}px`, top: `${s.value.y}px` }),
746
+ onKeydown: w,
747
+ onContextmenu: k[0] || (k[0] = Be(() => {
748
+ }, ["prevent", "stop"]))
749
+ }, [
750
+ (ee(), ye(Te, null, Ae(f, (x) => Fe("button", {
751
+ key: x,
752
+ type: "button",
753
+ role: "menuitem",
754
+ tabindex: "-1",
755
+ onClick: (P) => L(x)
756
+ }, ze(n.labels[x]), 9, et)), 64))
757
+ ], 44, Qe)) : Ie("", !0);
758
+ }
759
+ }), ot = /* @__PURE__ */ we({
760
+ __name: "BatchMaterials",
761
+ props: {
762
+ root: {},
763
+ busy: { type: Boolean },
764
+ viewerReady: { type: Boolean },
765
+ viewerKey: {}
766
+ },
767
+ emits: ["viewer-action"],
768
+ setup(n, { emit: i }) {
769
+ const { displayState: r } = Xe(), o = n, f = i, a = _e();
770
+ let s, c = [];
771
+ const h = He(
772
+ () => r.value.uiLocale === "zh-CN" ? { menu: "图片视图", fit: "适应画布", "zoom-in": "放大", "zoom-out": "缩小" } : r.value.uiLocale === "ar" ? { menu: "عرض الصورة", fit: "ملاءمة اللوحة", "zoom-in": "تكبير", "zoom-out": "تصغير" } : { menu: "Image view", fit: "Fit to canvas", "zoom-in": "Zoom in", "zoom-out": "Zoom out" }
773
+ );
774
+ function u() {
775
+ s?.setPolicy({
776
+ busy: o.busy,
777
+ reduced: a.value,
778
+ opaque: c.some((d) => d.matches)
779
+ });
780
+ }
781
+ function b() {
782
+ s?.dispose(), s = void 0;
783
+ const d = o.root;
784
+ d && (s = je(d, (y) => {
785
+ d.dataset.materialRequested = y.requested, d.dataset.materialEffective = y.effective, d.dataset.materialReason = y.reason ?? "";
786
+ }), s.setParams(V.regular), u(), s.setMode("gpu"));
787
+ }
788
+ return U(() => o.root, b), U(() => [o.busy, a.value], u), Ne(() => {
789
+ c = [
790
+ matchMedia("(prefers-reduced-transparency: reduce)"),
791
+ matchMedia("(forced-colors: active)")
792
+ ], c.forEach((d) => d.addEventListener("change", u)), b();
793
+ }), xe(() => {
794
+ c.forEach((d) => d.removeEventListener("change", u)), s?.dispose();
795
+ }), (d, y) => (ee(), qe(tt, {
796
+ root: n.root,
797
+ ready: n.viewerReady,
798
+ "viewer-key": n.viewerKey,
799
+ labels: h.value,
800
+ onAction: y[0] || (y[0] = (g) => f("viewer-action", g))
801
+ }, null, 8, ["root", "ready", "viewer-key", "labels"]));
802
+ }
803
+ });
804
+ export {
805
+ ot as default
806
+ };