cotutor 0.2.0 → 0.3.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 (871) hide show
  1. package/LICENSE +247 -21
  2. package/NOTICE +42 -0
  3. package/README.md +92 -20
  4. package/bin/cotutor.js +4 -4
  5. package/cards/canvas/card.css +8 -0
  6. package/cards/canvas/card.md +68 -0
  7. package/cards/choice/card.css +18 -0
  8. package/cards/choice/card.md +55 -0
  9. package/cards/code/card.css +5 -0
  10. package/cards/code/card.md +46 -0
  11. package/cards/dictation/card.css +10 -0
  12. package/cards/dictation/card.md +97 -0
  13. package/cards/image/card.css +10 -0
  14. package/cards/image/card.md +52 -0
  15. package/cards/lecture/card.css +9 -0
  16. package/cards/lecture/card.md +69 -0
  17. package/cards/paint/card.css +20 -0
  18. package/cards/paint/card.md +77 -0
  19. package/cards/photo/card.css +15 -0
  20. package/cards/photo/card.md +61 -0
  21. package/cards/read/card.css +6 -0
  22. package/cards/read/card.md +51 -0
  23. package/cards/text/card.css +3 -0
  24. package/cards/text/card.md +69 -0
  25. package/cards/tianzige/card.css +17 -0
  26. package/cards/tianzige/card.md +78 -0
  27. package/cards/tutor/card.css +66 -0
  28. package/cards/tutor/card.md +148 -0
  29. package/cards/word/card.css +24 -0
  30. package/cards/word/card.md +91 -0
  31. package/cards//346/235/277/344/271/246/346/200/216/344/271/210/345/206/231.md +159 -0
  32. package/dist/app/activity-eval-rules.d.ts +62 -0
  33. package/dist/app/activity-eval-rules.js +276 -0
  34. package/dist/app/activity-eval.d.ts +65 -0
  35. package/dist/app/activity-eval.js +158 -0
  36. package/dist/app/build.d.ts +11 -0
  37. package/dist/app/build.js +45 -0
  38. package/dist/app/cli/activities.d.ts +63 -0
  39. package/dist/app/cli/activities.js +158 -0
  40. package/dist/{cli → app/cli}/cert.js +3 -3
  41. package/dist/app/cli/chalk/bake.d.ts +10 -0
  42. package/dist/app/cli/chalk/bake.js +58 -0
  43. package/dist/app/cli/chalk/browser.d.ts +16 -0
  44. package/dist/app/cli/chalk/browser.js +142 -0
  45. package/dist/app/cli/chalk/build.d.ts +14 -0
  46. package/dist/app/cli/chalk/build.js +100 -0
  47. package/dist/app/cli/chalk/dub.d.ts +51 -0
  48. package/dist/app/cli/chalk/dub.js +106 -0
  49. package/dist/app/cli/chalk/load-scene.d.ts +34 -0
  50. package/dist/app/cli/chalk/load-scene.js +117 -0
  51. package/dist/app/cli/chalk/main.d.ts +7 -0
  52. package/dist/app/cli/chalk/main.js +198 -0
  53. package/dist/app/cli/chalk/serve.d.ts +4 -0
  54. package/dist/app/cli/chalk/serve.js +28 -0
  55. package/dist/app/cli/chalk/snap.d.ts +65 -0
  56. package/dist/app/cli/chalk/snap.js +103 -0
  57. package/dist/app/cli/chalk/typecheck.d.ts +7 -0
  58. package/dist/app/cli/chalk/typecheck.js +51 -0
  59. package/dist/{cli → app/cli}/doctor.d.ts +4 -3
  60. package/dist/app/cli/doctor.js +617 -0
  61. package/dist/app/cli/grades.d.ts +14 -0
  62. package/dist/app/cli/grades.js +44 -0
  63. package/dist/{cli → app/cli}/init.d.ts +3 -1
  64. package/dist/app/cli/init.js +155 -0
  65. package/dist/app/cli/main.js +715 -0
  66. package/dist/app/cli/migrate.d.ts +58 -0
  67. package/dist/app/cli/migrate.js +253 -0
  68. package/dist/{cli → app/cli}/serve.d.ts +12 -5
  69. package/dist/app/cli/serve.js +98 -0
  70. package/dist/app/cli/shipped.d.ts +30 -0
  71. package/dist/app/cli/shipped.js +47 -0
  72. package/dist/app/cli/skeleton.d.ts +38 -0
  73. package/dist/app/cli/skeleton.js +161 -0
  74. package/dist/app/cli/skills.d.ts +55 -0
  75. package/dist/app/cli/skills.js +189 -0
  76. package/dist/app/cli/themes.d.ts +52 -0
  77. package/dist/app/cli/themes.js +148 -0
  78. package/dist/{cli → app/cli}/tutors.d.ts +15 -26
  79. package/dist/{cli → app/cli}/tutors.js +86 -110
  80. package/dist/app/cli/usage.d.ts +2 -0
  81. package/dist/app/cli/usage.js +30 -0
  82. package/dist/app/dictation/recognize.d.ts +18 -0
  83. package/dist/app/dictation/recognize.js +6 -0
  84. package/dist/app/dictation/route.d.ts +52 -0
  85. package/dist/app/dictation/route.js +510 -0
  86. package/dist/app/diff.d.ts +11 -0
  87. package/dist/app/diff.js +71 -0
  88. package/dist/app/http/access.d.ts +62 -0
  89. package/dist/app/http/access.js +180 -0
  90. package/dist/app/http/app.d.ts +246 -0
  91. package/dist/app/http/app.js +1212 -0
  92. package/dist/app/http/dev-activities.d.ts +115 -0
  93. package/dist/app/http/dev-activities.js +193 -0
  94. package/dist/app/http/dev-overview.d.ts +108 -0
  95. package/dist/app/http/dev-overview.js +209 -0
  96. package/dist/app/http/dev-tutor-files.d.ts +80 -0
  97. package/dist/app/http/dev-tutor-files.js +151 -0
  98. package/dist/app/http/parent-home.d.ts +37 -0
  99. package/dist/app/http/parent-home.js +203 -0
  100. package/dist/app/http/range.d.ts +9 -0
  101. package/dist/app/http/range.js +19 -0
  102. package/dist/app/http/raw-view.d.ts +117 -0
  103. package/dist/app/http/raw-view.js +149 -0
  104. package/dist/app/http/send-file.d.ts +7 -0
  105. package/dist/app/http/send-file.js +29 -0
  106. package/dist/{server → app/http}/stage.d.ts +9 -0
  107. package/dist/{server → app/http}/stage.js +34 -6
  108. package/dist/app/http/theme.d.ts +13 -0
  109. package/dist/app/http/theme.js +41 -0
  110. package/dist/app/machine/bailian.d.ts +28 -0
  111. package/dist/app/machine/bailian.js +88 -0
  112. package/dist/app/mock/mock-live.d.ts +16 -0
  113. package/dist/app/mock/mock-live.js +140 -0
  114. package/dist/{server → app/mock}/mock.d.ts +36 -5
  115. package/dist/app/mock/mock.js +1117 -0
  116. package/dist/app/replay.d.ts +94 -0
  117. package/dist/app/replay.js +170 -0
  118. package/dist/app/skills/analyze-doc.d.ts +3 -0
  119. package/dist/app/skills/analyze-doc.js +47 -0
  120. package/dist/app/skills/home-doc.d.ts +5 -0
  121. package/dist/app/skills/home-doc.js +112 -0
  122. package/dist/app/skills/tune-doc.d.ts +3 -0
  123. package/dist/app/skills/tune-doc.js +80 -0
  124. package/dist/app/talk/list.d.ts +11 -0
  125. package/dist/app/talk/list.js +9 -0
  126. package/dist/app/talk/route.d.ts +16 -0
  127. package/dist/app/talk/route.js +142 -0
  128. package/dist/app/workspace.d.ts +58 -0
  129. package/dist/{cli → app}/workspace.js +77 -52
  130. package/dist/app/ws/route.d.ts +25 -0
  131. package/dist/app/ws/route.js +29 -0
  132. package/dist/app/ws/ws.d.ts +31 -0
  133. package/dist/app/ws/ws.js +169 -0
  134. package/dist/board/canvas-chat.d.ts +97 -0
  135. package/dist/board/canvas-chat.js +175 -0
  136. package/dist/board/card-guards.d.ts +15 -0
  137. package/dist/board/card-guards.js +38 -0
  138. package/dist/board/cards/canvas.d.ts +41 -0
  139. package/dist/board/cards/canvas.js +83 -0
  140. package/dist/{cards → board/cards}/choice.js +0 -12
  141. package/dist/{cards → board/cards}/code.js +0 -3
  142. package/dist/board/cards/dictation.d.ts +42 -0
  143. package/dist/board/cards/dictation.js +105 -0
  144. package/dist/board/cards/docs.d.ts +47 -0
  145. package/dist/board/cards/docs.js +152 -0
  146. package/dist/{cards → board/cards}/image.js +1 -10
  147. package/dist/board/cards/index.d.ts +62 -0
  148. package/dist/board/cards/index.js +144 -0
  149. package/dist/{cards → board/cards}/kind.d.ts +10 -4
  150. package/dist/board/cards/kind.js +9 -0
  151. package/dist/board/cards/lecture.d.ts +26 -0
  152. package/dist/board/cards/lecture.js +62 -0
  153. package/dist/board/cards/paint.d.ts +38 -0
  154. package/dist/board/cards/paint.js +85 -0
  155. package/dist/board/cards/photo.d.ts +15 -0
  156. package/dist/board/cards/photo.js +29 -0
  157. package/dist/{cards → board/cards}/read.js +1 -10
  158. package/dist/board/cards/text.d.ts +20 -0
  159. package/dist/board/cards/text.js +59 -0
  160. package/dist/board/cards/tianzige.d.ts +16 -0
  161. package/dist/board/cards/tianzige.js +64 -0
  162. package/dist/board/cards/tutor.d.ts +72 -0
  163. package/dist/board/cards/tutor.js +134 -0
  164. package/dist/board/cards/word.d.ts +20 -0
  165. package/dist/board/cards/word.js +76 -0
  166. package/dist/board/lecture.d.ts +100 -0
  167. package/dist/board/lecture.js +204 -0
  168. package/dist/board/paper.d.ts +20 -0
  169. package/dist/board/paper.js +76 -0
  170. package/dist/board/parse.d.ts +120 -0
  171. package/dist/board/parse.js +330 -0
  172. package/dist/board/presentation.d.ts +295 -0
  173. package/dist/board/presentation.js +615 -0
  174. package/dist/board/sections.d.ts +16 -0
  175. package/dist/board/sections.js +130 -0
  176. package/dist/brain/api-tools.d.ts +8 -0
  177. package/dist/brain/api-tools.js +190 -0
  178. package/dist/brain/api.d.ts +62 -0
  179. package/dist/brain/api.js +411 -0
  180. package/dist/brain/cli/adapters.d.ts +60 -0
  181. package/dist/brain/cli/adapters.js +91 -0
  182. package/dist/brain/cli/qwen.d.ts +11 -0
  183. package/dist/brain/cli/qwen.js +141 -0
  184. package/dist/brain/cli/run-plan.d.ts +59 -0
  185. package/dist/brain/cli/run-plan.js +71 -0
  186. package/dist/brain/cli/run.d.ts +35 -0
  187. package/dist/brain/cli/run.js +256 -0
  188. package/dist/brain/cli/stream-json.d.ts +18 -0
  189. package/dist/brain/cli/stream-json.js +86 -0
  190. package/dist/brain/cli/types.d.ts +144 -0
  191. package/dist/brain/cli/types.js +3 -0
  192. package/dist/brain/cli/warm.d.ts +53 -0
  193. package/dist/brain/cli/warm.js +103 -0
  194. package/dist/brain/index.d.ts +145 -0
  195. package/dist/brain/index.js +74 -0
  196. package/dist/brain/stream.d.ts +20 -0
  197. package/dist/brain/stream.js +70 -0
  198. package/dist/brain/transcript.d.ts +45 -0
  199. package/dist/brain/transcript.js +132 -0
  200. package/dist/chalk/actions.d.ts +37 -0
  201. package/dist/chalk/actions.js +69 -0
  202. package/dist/chalk/bundle.d.ts +26 -0
  203. package/dist/chalk/bundle.js +69 -0
  204. package/dist/chalk/check.d.ts +28 -0
  205. package/dist/chalk/check.js +291 -0
  206. package/dist/chalk/circle.d.ts +64 -0
  207. package/dist/chalk/circle.js +193 -0
  208. package/dist/chalk/clock.d.ts +84 -0
  209. package/dist/chalk/clock.js +84 -0
  210. package/dist/chalk/geometry.d.ts +44 -0
  211. package/dist/chalk/geometry.js +139 -0
  212. package/dist/chalk/glyphs/capitals.d.ts +12 -0
  213. package/dist/chalk/glyphs/capitals.js +264 -0
  214. package/dist/chalk/glyphs/index.d.ts +21 -0
  215. package/dist/chalk/glyphs/index.js +18 -0
  216. package/dist/chalk/glyphs/letters.d.ts +13 -0
  217. package/dist/chalk/glyphs/letters.js +280 -0
  218. package/dist/chalk/glyphs/metrics.d.ts +33 -0
  219. package/dist/chalk/glyphs/metrics.js +28 -0
  220. package/dist/chalk/glyphs/registry.d.ts +7 -0
  221. package/dist/chalk/glyphs/registry.js +8 -0
  222. package/dist/chalk/glyphs/sample.d.ts +32 -0
  223. package/dist/chalk/glyphs/sample.js +102 -0
  224. package/dist/chalk/glyphs/skeleton.d.ts +64 -0
  225. package/dist/chalk/glyphs/skeleton.js +126 -0
  226. package/dist/chalk/glyphs/types.d.ts +58 -0
  227. package/dist/chalk/glyphs/types.js +17 -0
  228. package/dist/chalk/index.d.ts +23 -0
  229. package/dist/chalk/index.js +15 -0
  230. package/dist/chalk/manifest.d.ts +41 -0
  231. package/dist/chalk/manifest.js +6 -0
  232. package/dist/chalk/paint.d.ts +180 -0
  233. package/dist/chalk/paint.js +210 -0
  234. package/dist/chalk/pointer.d.ts +8 -0
  235. package/dist/chalk/pointer.js +21 -0
  236. package/dist/chalk/prepare.d.ts +11 -0
  237. package/dist/chalk/prepare.js +15 -0
  238. package/dist/chalk/scene-schema.d.ts +199 -0
  239. package/dist/chalk/scene-schema.js +91 -0
  240. package/dist/chalk/seed.d.ts +3 -0
  241. package/dist/chalk/seed.js +10 -0
  242. package/dist/chalk/text-metrics.d.ts +8 -0
  243. package/dist/chalk/text-metrics.js +156 -0
  244. package/dist/chalk/timeline.d.ts +47 -0
  245. package/dist/chalk/timeline.js +84 -0
  246. package/dist/chalk/types.d.ts +150 -0
  247. package/dist/chalk/types.js +8 -0
  248. package/dist/lib/index.d.ts +14 -12
  249. package/dist/lib/index.js +14 -12
  250. package/dist/media/draw.d.ts +23 -0
  251. package/dist/media/draw.js +44 -0
  252. package/dist/media/mp3.d.ts +6 -0
  253. package/dist/media/mp3.js +58 -0
  254. package/dist/media/mp4.d.ts +1 -0
  255. package/dist/media/mp4.js +58 -0
  256. package/dist/media/tts-voices.d.ts +18 -0
  257. package/dist/media/tts-voices.js +606 -0
  258. package/dist/media/tts.d.ts +56 -0
  259. package/dist/media/tts.js +174 -0
  260. package/dist/media/vision.d.ts +25 -0
  261. package/dist/media/vision.js +71 -0
  262. package/dist/memory/commit.d.ts +67 -0
  263. package/dist/memory/commit.js +130 -0
  264. package/dist/memory/context.d.ts +86 -0
  265. package/dist/memory/context.js +97 -0
  266. package/dist/memory/diary.d.ts +84 -0
  267. package/dist/memory/diary.js +183 -0
  268. package/dist/memory/grade.d.ts +2 -0
  269. package/dist/memory/grade.js +7 -0
  270. package/dist/{lib → memory}/plan.d.ts +1 -1
  271. package/dist/{lib → memory}/plan.js +1 -1
  272. package/dist/memory/proposals.d.ts +11 -0
  273. package/dist/memory/proposals.js +43 -0
  274. package/dist/memory/retrieval.d.ts +44 -0
  275. package/dist/memory/retrieval.js +157 -0
  276. package/dist/{lib → memory}/timetable.d.ts +0 -3
  277. package/dist/{lib → memory}/timetable.js +0 -11
  278. package/dist/memory/vault-notes.d.ts +165 -0
  279. package/dist/memory/vault-notes.js +359 -0
  280. package/dist/memory/vault.d.ts +70 -0
  281. package/dist/memory/vault.js +169 -0
  282. package/dist/realtime/bailian.d.ts +120 -0
  283. package/dist/realtime/bailian.js +288 -0
  284. package/dist/realtime/cues.d.ts +51 -0
  285. package/dist/realtime/cues.js +94 -0
  286. package/dist/realtime/listen.d.ts +32 -0
  287. package/dist/realtime/listen.js +53 -0
  288. package/dist/realtime/preview.d.ts +23 -0
  289. package/dist/realtime/preview.js +38 -0
  290. package/dist/realtime/prompt.d.ts +8 -0
  291. package/dist/realtime/prompt.js +13 -0
  292. package/dist/realtime/voices.d.ts +19 -0
  293. package/dist/realtime/voices.js +71 -0
  294. package/dist/runtime/activities.d.ts +17 -0
  295. package/dist/runtime/activities.js +46 -0
  296. package/dist/runtime/activity-state.d.ts +22 -0
  297. package/dist/runtime/activity-state.js +83 -0
  298. package/dist/runtime/activity.d.ts +63 -0
  299. package/dist/runtime/activity.js +428 -0
  300. package/dist/runtime/agent-file.d.ts +24 -0
  301. package/dist/runtime/agent-file.js +59 -0
  302. package/dist/runtime/auto-bookkeep.d.ts +30 -0
  303. package/dist/runtime/auto-bookkeep.js +84 -0
  304. package/dist/{lib → runtime/context}/context-pack.d.ts +3 -3
  305. package/dist/runtime/context/context-pack.js +182 -0
  306. package/dist/runtime/context/thread-digest.d.ts +4 -0
  307. package/dist/runtime/context/thread-digest.js +35 -0
  308. package/dist/runtime/context/tutor-rules.d.ts +25 -0
  309. package/dist/runtime/context/tutor-rules.js +47 -0
  310. package/dist/runtime/delivery/delivery.d.ts +94 -0
  311. package/dist/runtime/delivery/delivery.js +145 -0
  312. package/dist/runtime/delivery/playback.d.ts +25 -0
  313. package/dist/runtime/delivery/playback.js +29 -0
  314. package/dist/runtime/delivery/player.d.ts +145 -0
  315. package/dist/runtime/delivery/player.js +221 -0
  316. package/dist/runtime/delivery/queue.d.ts +89 -0
  317. package/dist/runtime/delivery/queue.js +59 -0
  318. package/dist/runtime/home/edit.d.ts +39 -0
  319. package/dist/runtime/home/edit.js +132 -0
  320. package/dist/runtime/home/home.d.ts +180 -0
  321. package/dist/runtime/home/home.js +311 -0
  322. package/dist/runtime/home/store.d.ts +142 -0
  323. package/dist/runtime/home/store.js +440 -0
  324. package/dist/runtime/journal/conversation.d.ts +46 -0
  325. package/dist/runtime/journal/conversation.js +89 -0
  326. package/dist/runtime/journal/events.d.ts +27 -0
  327. package/dist/runtime/journal/events.js +136 -0
  328. package/dist/runtime/journal/kid-log.d.ts +105 -0
  329. package/dist/runtime/journal/kid-log.js +133 -0
  330. package/dist/runtime/journal/ledger.d.ts +17 -0
  331. package/dist/{lib → runtime/journal}/ledger.js +7 -40
  332. package/dist/runtime/journal/mix.d.ts +33 -0
  333. package/dist/runtime/journal/mix.js +88 -0
  334. package/dist/runtime/journal/mouth-index.d.ts +26 -0
  335. package/dist/runtime/journal/mouth-index.js +34 -0
  336. package/dist/runtime/journal/mouth.d.ts +54 -0
  337. package/dist/runtime/journal/mouth.js +102 -0
  338. package/dist/runtime/journal/recorder.d.ts +46 -0
  339. package/dist/runtime/journal/recorder.js +58 -0
  340. package/dist/runtime/journal/store.d.ts +123 -0
  341. package/dist/runtime/journal/store.js +316 -0
  342. package/dist/runtime/kid-input.d.ts +16 -0
  343. package/dist/runtime/kid-input.js +195 -0
  344. package/dist/runtime/kid-view.d.ts +124 -0
  345. package/dist/runtime/kid-view.js +157 -0
  346. package/dist/runtime/lecture.d.ts +86 -0
  347. package/dist/runtime/lecture.js +237 -0
  348. package/dist/runtime/live/call.d.ts +219 -0
  349. package/dist/runtime/live/call.js +1211 -0
  350. package/dist/runtime/live/turns.d.ts +48 -0
  351. package/dist/runtime/live/turns.js +102 -0
  352. package/dist/runtime/runner.d.ts +289 -0
  353. package/dist/runtime/runner.js +898 -0
  354. package/dist/runtime/talk-run.d.ts +21 -0
  355. package/dist/runtime/talk-run.js +34 -0
  356. package/dist/scenes/dictation/match.d.ts +57 -0
  357. package/dist/scenes/dictation/match.js +255 -0
  358. package/dist/scenes/dictation/recognize.d.ts +86 -0
  359. package/dist/scenes/dictation/recognize.js +163 -0
  360. package/dist/scenes/dictation/store.d.ts +112 -0
  361. package/dist/scenes/dictation/store.js +99 -0
  362. package/dist/scenes/look.d.ts +26 -0
  363. package/dist/scenes/look.js +1 -0
  364. package/dist/scenes/paint/painter.d.ts +84 -0
  365. package/dist/scenes/paint/painter.js +170 -0
  366. package/dist/scenes/paint/prompt.d.ts +23 -0
  367. package/dist/scenes/paint/prompt.js +36 -0
  368. package/dist/scenes/talk/en-words.d.ts +8 -0
  369. package/dist/scenes/talk/en-words.js +44 -0
  370. package/dist/scenes/talk/list.d.ts +44 -0
  371. package/dist/scenes/talk/list.js +88 -0
  372. package/dist/scenes/talk/store.d.ts +27 -0
  373. package/dist/scenes/talk/store.js +61 -0
  374. package/dist/scenes/talk/warmup.d.ts +16 -0
  375. package/dist/scenes/talk/warmup.js +39 -0
  376. package/dist/schema/activity.d.ts +149 -0
  377. package/dist/schema/activity.js +113 -0
  378. package/dist/schema/board.d.ts +143 -2
  379. package/dist/schema/board.js +15 -3
  380. package/dist/schema/config.d.ts +309 -94
  381. package/dist/schema/config.js +259 -72
  382. package/dist/schema/context-pack.d.ts +76 -14
  383. package/dist/schema/context-pack.js +91 -10
  384. package/dist/{lib/conversation.d.ts → schema/conversation-files.d.ts} +11 -33
  385. package/dist/schema/conversation-files.js +26 -0
  386. package/dist/schema/conversation.d.ts +385 -49
  387. package/dist/schema/conversation.js +135 -19
  388. package/dist/schema/events.d.ts +138 -0
  389. package/dist/schema/events.js +1 -0
  390. package/dist/schema/home.d.ts +46 -0
  391. package/dist/schema/home.js +30 -0
  392. package/dist/schema/index.d.ts +14 -3
  393. package/dist/schema/index.js +14 -3
  394. package/dist/schema/kid-device.d.ts +20 -0
  395. package/dist/schema/kid-device.js +32 -0
  396. package/dist/schema/ledger.d.ts +8 -63
  397. package/dist/schema/ledger.js +7 -31
  398. package/dist/schema/memory.d.ts +73 -0
  399. package/dist/schema/memory.js +47 -0
  400. package/dist/schema/plan.d.ts +2 -2
  401. package/dist/schema/plan.js +2 -2
  402. package/dist/schema/sections.d.ts +32 -25
  403. package/dist/schema/sections.js +21 -22
  404. package/dist/schema/theme.d.ts +25 -0
  405. package/dist/schema/theme.js +26 -0
  406. package/dist/schema/timetable.d.ts +2 -2
  407. package/dist/schema/timetable.js +2 -2
  408. package/dist/schema/workspace.d.ts +41 -0
  409. package/dist/schema/workspace.js +9 -0
  410. package/dist/shared/errors.d.ts +8 -0
  411. package/dist/shared/errors.js +13 -0
  412. package/dist/shared/home.d.ts +2 -0
  413. package/dist/shared/home.js +16 -0
  414. package/dist/shared/human-notes.d.ts +5 -0
  415. package/dist/shared/human-notes.js +7 -0
  416. package/dist/shared/qianwen.d.ts +50 -0
  417. package/dist/shared/qianwen.js +109 -0
  418. package/dist/shared/time.d.ts +9 -0
  419. package/dist/shared/time.js +22 -0
  420. package/dist/shared/tokens.d.ts +18 -0
  421. package/dist/shared/tokens.js +11 -0
  422. package/dist/shared/wav.d.ts +10 -0
  423. package/dist/shared/wav.js +50 -0
  424. package/dist/stage/chunk-226TNLQA.js +129 -0
  425. package/dist/stage/chunk-24LGQEKE.js +1 -0
  426. package/dist/stage/chunk-25XV6UY3.js +10 -0
  427. package/dist/stage/chunk-2AZI3NHJ.js +1 -0
  428. package/dist/stage/chunk-2BQZTTBE.js +1 -0
  429. package/dist/stage/chunk-2M7CGY3Y.js +11 -0
  430. package/dist/stage/chunk-2VR4WFQ7.js +10 -0
  431. package/dist/stage/chunk-2ZYXBUWG.js +9 -0
  432. package/dist/stage/chunk-32LAWMGY.js +1 -0
  433. package/dist/stage/chunk-3LEMTSOO.js +11 -0
  434. package/dist/stage/chunk-3QCKGZYE.js +32 -0
  435. package/dist/stage/chunk-44P66WFA.js +1 -0
  436. package/dist/stage/chunk-4AM6FRR6.js +7 -0
  437. package/dist/stage/chunk-4QDE4SUK.js +1 -0
  438. package/dist/stage/chunk-4QESHV3U.js +1 -0
  439. package/dist/stage/chunk-4SG5QPHB.js +2 -0
  440. package/dist/stage/chunk-4T4UVCOC.js +1 -0
  441. package/dist/stage/chunk-4WUEPPG3.js +34 -0
  442. package/dist/stage/chunk-4YCN6UZ5.js +99 -0
  443. package/dist/stage/chunk-5V7ZY2AP.js +1 -0
  444. package/dist/stage/chunk-5VS5Y2VJ.js +6 -0
  445. package/dist/stage/chunk-5W4NO2ZD.js +62 -0
  446. package/dist/stage/chunk-65CRNICM.js +1 -0
  447. package/dist/stage/chunk-66MULO7F.js +5 -0
  448. package/dist/stage/chunk-6COFQTBS.js +162 -0
  449. package/dist/stage/chunk-6VZG3M3I.js +8 -0
  450. package/dist/stage/chunk-7HVDH43T.js +1 -0
  451. package/dist/stage/chunk-7JLJN4EZ.js +8 -0
  452. package/dist/stage/chunk-7QDSP4LN.js +1 -0
  453. package/dist/stage/chunk-7R6OQAO3.js +1 -0
  454. package/dist/stage/chunk-7VTTHZKW.js +7 -0
  455. package/dist/stage/chunk-ATHR5KEN.js +10 -0
  456. package/dist/stage/chunk-B6R5LTP2.js +36 -0
  457. package/dist/stage/chunk-BD4WE264.js +1 -0
  458. package/dist/stage/chunk-BONANU47.js +206 -0
  459. package/dist/stage/chunk-BTVW7OFK.js +89 -0
  460. package/dist/stage/chunk-BUTJIDHG.js +8 -0
  461. package/dist/stage/chunk-C2IPYMML.js +84 -0
  462. package/dist/stage/chunk-C54FTPPV.js +9 -0
  463. package/dist/stage/chunk-C6LOUF2Z.js +90 -0
  464. package/dist/stage/chunk-CFF3PILO.js +339 -0
  465. package/dist/stage/chunk-CI2FQ2JY.js +9 -0
  466. package/dist/stage/chunk-CW5O4RV7.js +12 -0
  467. package/dist/stage/chunk-CYABNQYD.js +1 -0
  468. package/dist/stage/chunk-D7FFA4NS.js +15 -0
  469. package/dist/stage/chunk-DUNNXU6Z.js +8 -0
  470. package/dist/stage/chunk-E3E4Q6JF.js +6 -0
  471. package/dist/stage/chunk-EB3U3LH7.js +9 -0
  472. package/dist/stage/chunk-EGSZ736B.js +8 -0
  473. package/dist/stage/chunk-EOBXW5VQ.js +2 -0
  474. package/dist/stage/chunk-ERZC3B7Y.js +11 -0
  475. package/dist/stage/chunk-ESDOOBIH.js +11 -0
  476. package/dist/stage/chunk-EVU4QAL4.js +178 -0
  477. package/dist/stage/chunk-EVVZI2NY.js +39 -0
  478. package/dist/stage/chunk-FBKAZUKD.js +39 -0
  479. package/dist/stage/chunk-FDVKYQJN.js +1 -0
  480. package/dist/stage/chunk-FGPVYHVR.js +5 -0
  481. package/dist/stage/chunk-FHUD4AZC.js +1 -0
  482. package/dist/stage/chunk-FKUJ2DMY.js +96 -0
  483. package/dist/stage/chunk-FNZGVIJV.js +1 -0
  484. package/dist/stage/chunk-GBYSEGYM.js +78 -0
  485. package/dist/stage/chunk-GCO4TDHX.js +1 -0
  486. package/dist/stage/chunk-GKTML2LG.js +10 -0
  487. package/dist/stage/chunk-GMDIHHXQ.js +11 -0
  488. package/dist/stage/chunk-GOUNACI3.js +10 -0
  489. package/dist/stage/chunk-GXAYATPF.js +3 -0
  490. package/dist/stage/chunk-H2K2DDXV.js +8 -0
  491. package/dist/stage/chunk-H3UJI6ZY.js +13 -0
  492. package/dist/stage/chunk-H6PUGCME.js +7 -0
  493. package/dist/stage/chunk-HNBUIMIG.js +1 -0
  494. package/dist/stage/chunk-HRZY2BJQ.js +10 -0
  495. package/dist/stage/chunk-HSPJGALW.js +30 -0
  496. package/dist/stage/chunk-IBYORHIP.js +25 -0
  497. package/dist/stage/chunk-IHF4EWTY.js +1 -0
  498. package/dist/stage/chunk-ISBRPNKI.js +1 -0
  499. package/dist/stage/chunk-IZ3OI3C2.js +2 -0
  500. package/dist/stage/chunk-JEFZAC2R.js +1 -0
  501. package/dist/stage/chunk-JFIGRDPO.js +1 -0
  502. package/dist/stage/chunk-JFVYBOOC.js +9 -0
  503. package/dist/stage/chunk-JGD4TUTQ.js +1 -0
  504. package/dist/stage/chunk-JO4BEHDH.js +4 -0
  505. package/dist/stage/chunk-JOWBS42C.js +1 -0
  506. package/dist/stage/chunk-JP3TM2TG.js +1 -0
  507. package/dist/stage/chunk-JVK2C52O.js +1 -0
  508. package/dist/stage/chunk-K4I76XBX.js +14 -0
  509. package/dist/stage/chunk-KA6CZZ4M.js +1 -0
  510. package/dist/stage/chunk-KESSJ36M.js +1 -0
  511. package/dist/stage/chunk-LKATEVRU.js +1 -0
  512. package/dist/stage/chunk-LS4EJ2EI.js +1 -0
  513. package/dist/stage/chunk-LUKJQC2X.js +70 -0
  514. package/dist/stage/chunk-LWULR3SM.js +1 -0
  515. package/dist/stage/chunk-LWVRFMKX.js +2 -0
  516. package/dist/stage/chunk-LXC4ZBPZ.js +1 -0
  517. package/dist/stage/chunk-M2UP255H.js +1 -0
  518. package/dist/stage/chunk-MAPPXUZQ.js +231 -0
  519. package/dist/stage/chunk-MBMPW7Z5.js +1 -0
  520. package/dist/stage/chunk-MD3HMMTK.js +1 -0
  521. package/dist/stage/chunk-MLPCUIKR.js +17 -0
  522. package/dist/stage/chunk-MNQIRPDQ.js +8 -0
  523. package/dist/stage/chunk-MRG7MJVS.js +1 -0
  524. package/dist/stage/chunk-MU6EXW72.js +10 -0
  525. package/dist/stage/chunk-MVU2X6LU.js +4 -0
  526. package/dist/stage/chunk-N6UA5CZV.js +36 -0
  527. package/dist/stage/chunk-NLZIT2TJ.js +7 -0
  528. package/dist/stage/chunk-NOJR3J7M.js +1 -0
  529. package/dist/stage/chunk-NT7ARDOL.js +1 -0
  530. package/dist/stage/chunk-NWOGMPZH.js +1 -0
  531. package/dist/stage/chunk-NXE4KMG3.js +40 -0
  532. package/dist/stage/chunk-O4YCZXD2.js +257 -0
  533. package/dist/stage/chunk-OAJZ7HLK.js +1 -0
  534. package/dist/stage/chunk-OCFCFASO.js +1 -0
  535. package/dist/stage/chunk-ODGPG5RY.js +7 -0
  536. package/dist/stage/chunk-ODUEA52Q.js +3 -0
  537. package/dist/stage/chunk-OGDJ3FCI.js +1 -0
  538. package/dist/stage/chunk-OLDJ55TT.js +1 -0
  539. package/dist/stage/chunk-OOCL4ATI.js +2 -0
  540. package/dist/stage/chunk-OQEFDUDV.js +1 -0
  541. package/dist/stage/chunk-OQWVEWG7.js +4 -0
  542. package/dist/stage/chunk-OUIX6BGK.js +1 -0
  543. package/dist/stage/chunk-OV7OZYUO.js +7 -0
  544. package/dist/stage/chunk-PFGDY33O.js +1 -0
  545. package/dist/stage/chunk-PFJDUJB3.js +139 -0
  546. package/dist/stage/chunk-PGEW76ER.js +1 -0
  547. package/dist/stage/chunk-PP76TAQX.js +32 -0
  548. package/dist/stage/chunk-PTBOP4OT.js +2 -0
  549. package/dist/stage/chunk-PX2RVHCK.js +1 -0
  550. package/dist/stage/chunk-Q7K3PNAD.js +1 -0
  551. package/dist/stage/chunk-QDDPLZDB.js +1 -0
  552. package/dist/stage/chunk-QLGLZ77F.js +1 -0
  553. package/dist/stage/chunk-QOPFDFHI.js +1 -0
  554. package/dist/stage/chunk-QXT4KAEJ.js +1 -0
  555. package/dist/stage/chunk-R4YVZCIT.js +1 -0
  556. package/dist/stage/chunk-R6P6EHWA.js +62 -0
  557. package/dist/stage/chunk-RCH3OXBI.js +9 -0
  558. package/dist/stage/chunk-RHPE44I2.js +1 -0
  559. package/dist/stage/chunk-RJ2R4FVC.js +1 -0
  560. package/dist/stage/chunk-RJH2YVTD.js +1 -0
  561. package/dist/stage/chunk-RLWWW5OB.js +6 -0
  562. package/dist/stage/chunk-S3WO35Z7.js +120 -0
  563. package/dist/stage/chunk-S7ZGX6MW.js +1 -0
  564. package/dist/stage/chunk-SIAWX27B.js +1 -0
  565. package/dist/stage/chunk-SLG4X622.js +1 -0
  566. package/dist/stage/chunk-SLJRBC77.js +168 -0
  567. package/dist/stage/chunk-SRORWQJZ.js +1 -0
  568. package/dist/stage/chunk-STZTUIIF.js +2 -0
  569. package/dist/stage/chunk-SVQ6MWNV.js +9 -0
  570. package/dist/stage/chunk-TL3HLL2S.js +132 -0
  571. package/dist/stage/chunk-U3DOE6SF.js +24 -0
  572. package/dist/stage/chunk-UABQIZKW.js +6 -0
  573. package/dist/stage/chunk-UDK3R764.js +1 -0
  574. package/dist/stage/chunk-UFF4E54B.js +41 -0
  575. package/dist/stage/chunk-UFP5Q4AY.js +1 -0
  576. package/dist/stage/chunk-UMH2TSW2.js +72 -0
  577. package/dist/stage/chunk-UTASVNF5.js +10 -0
  578. package/dist/stage/chunk-UW7ML5ML.js +88 -0
  579. package/dist/stage/chunk-V3J7F6OP.js +1 -0
  580. package/dist/stage/chunk-VEHP5B5Q.js +5 -0
  581. package/dist/stage/chunk-VRXWB733.js +9 -0
  582. package/dist/stage/chunk-VVDHBBS5.js +5 -0
  583. package/dist/stage/chunk-VYFOH6FU.js +106 -0
  584. package/dist/stage/chunk-W3VZTLQS.js +3 -0
  585. package/dist/stage/chunk-W7WNRWTZ.js +8 -0
  586. package/dist/stage/chunk-WHUCV53C.js +1 -0
  587. package/dist/stage/chunk-WULMYHIF.js +1 -0
  588. package/dist/stage/chunk-X54EX7AW.js +9 -0
  589. package/dist/stage/chunk-X565ISZM.js +1 -0
  590. package/dist/stage/chunk-XGZMDECB.js +1 -0
  591. package/dist/stage/chunk-XHONC4RF.js +172 -0
  592. package/dist/stage/chunk-XIK4XQ6E.js +24 -0
  593. package/dist/stage/chunk-XJQQWFTE.js +1 -0
  594. package/dist/stage/chunk-XM4WOU3I.js +13 -0
  595. package/dist/stage/chunk-XM7Y5HP5.js +38 -0
  596. package/dist/stage/chunk-XNYYRGD5.js +292 -0
  597. package/dist/stage/chunk-XOYVR3SV.js +1 -0
  598. package/dist/stage/chunk-XQIW5HCE.js +1 -0
  599. package/dist/stage/chunk-YEWL7FUW.js +8 -0
  600. package/dist/stage/chunk-YI55PY3V.js +1 -0
  601. package/dist/stage/chunk-YM63HI6W.js +1 -0
  602. package/dist/stage/chunk-YNLGLU4P.js +9 -0
  603. package/dist/stage/chunk-YTNMNOWP.js +1 -0
  604. package/dist/stage/chunk-YV62XKTC.js +1 -0
  605. package/dist/stage/chunk-YVBA3QW6.js +1 -0
  606. package/dist/stage/chunk-Z2SY2HOC.js +1 -0
  607. package/dist/stage/chunk-ZBTCQEBK.js +10 -0
  608. package/dist/stage/chunk-ZCUFN74D.js +1 -0
  609. package/dist/stage/chunk-ZHOULXEJ.js +11 -0
  610. package/dist/stage/chunk-ZTRZIET2.js +1 -0
  611. package/dist/stage/index.html +1 -0
  612. package/dist/stage/stage.css +1 -1
  613. package/dist/stage/stage.js +1 -4383
  614. package/dist/ui/dev/dev-page.d.ts +1 -0
  615. package/dist/ui/dev/dev-page.js +2248 -0
  616. package/dist/ui/dev/dev-theme.d.ts +6 -0
  617. package/dist/ui/dev/dev-theme.js +67 -0
  618. package/dist/ui/dev/qr-page.d.ts +8 -0
  619. package/dist/ui/dev/qr-page.js +61 -0
  620. package/dist/ui/dev/voice-gallery-page.d.ts +1 -0
  621. package/dist/ui/dev/voice-gallery-page.js +121 -0
  622. package/dist/ui/dev/voice-scenes.d.ts +21 -0
  623. package/dist/ui/dev/voice-scenes.js +30 -0
  624. package/dist/ui/dictation/en-box.d.ts +2 -0
  625. package/dist/ui/dictation/en-box.js +86 -0
  626. package/dist/ui/dictation/en-page.d.ts +1 -0
  627. package/dist/ui/dictation/en-page.js +484 -0
  628. package/dist/ui/dictation/page.d.ts +1 -0
  629. package/dist/ui/dictation/page.js +1084 -0
  630. package/dist/ui/dictation/parent-page.d.ts +1 -0
  631. package/dist/ui/dictation/parent-page.js +234 -0
  632. package/dist/ui/dictation/reel-mode.d.ts +1 -0
  633. package/dist/ui/dictation/reel-mode.js +87 -0
  634. package/dist/ui/dictation/reel-page.d.ts +1 -0
  635. package/dist/ui/dictation/reel-page.js +62 -0
  636. package/dist/ui/dictation/reel.d.ts +163 -0
  637. package/dist/ui/dictation/reel.js +436 -0
  638. package/dist/ui/dictation/ui.d.ts +44 -0
  639. package/dist/ui/dictation/ui.js +80 -0
  640. package/dist/ui/dictation/unlock.d.ts +7 -0
  641. package/dist/ui/dictation/unlock.js +16 -0
  642. package/dist/ui/kid/audio-client.d.ts +11 -0
  643. package/dist/ui/kid/audio-client.js +74 -0
  644. package/dist/ui/kid/board-mark-art.d.ts +37 -0
  645. package/dist/ui/kid/board-mark-art.js +5 -0
  646. package/dist/ui/kid/board-mark.d.ts +24 -0
  647. package/dist/ui/kid/board-mark.js +58 -0
  648. package/dist/ui/kid/kid-log.d.ts +15 -0
  649. package/dist/ui/kid/kid-log.js +87 -0
  650. package/dist/ui/kid/kid-nav.d.ts +11 -0
  651. package/dist/ui/kid/kid-nav.js +22 -0
  652. package/dist/ui/kid/kid-page.d.ts +9 -0
  653. package/dist/ui/kid/kid-page.js +3719 -0
  654. package/dist/ui/kid/letters.d.ts +26 -0
  655. package/dist/ui/kid/letters.js +51 -0
  656. package/dist/ui/kid/photo-edit.d.ts +83 -0
  657. package/dist/ui/kid/photo-edit.js +106 -0
  658. package/dist/ui/kid/photo-ui.d.ts +23 -0
  659. package/dist/ui/kid/photo-ui.js +60 -0
  660. package/dist/ui/kid/reel.d.ts +419 -0
  661. package/dist/ui/kid/reel.js +648 -0
  662. package/dist/ui/kid/tianzige.d.ts +8 -0
  663. package/dist/ui/kid/tianzige.js +45 -0
  664. package/dist/ui/kid/tutor-face.d.ts +35 -0
  665. package/dist/ui/kid/tutor-face.js +84 -0
  666. package/dist/ui/kid/voice-ui.d.ts +70 -0
  667. package/dist/ui/kid/voice-ui.js +316 -0
  668. package/dist/ui/kid/voice-view.d.ts +71 -0
  669. package/dist/ui/kid/voice-view.js +75 -0
  670. package/dist/ui/kid/word-draw.d.ts +2 -0
  671. package/dist/ui/kid/word-draw.js +107 -0
  672. package/dist/ui/kid/word-emoji.d.ts +10 -0
  673. package/dist/ui/kid/word-emoji.js +66 -0
  674. package/dist/ui/kid/word-layout.d.ts +25 -0
  675. package/dist/ui/kid/word-layout.js +29 -0
  676. package/dist/ui/parent/parent-home-page.d.ts +1 -0
  677. package/dist/ui/parent/parent-home-page.js +414 -0
  678. package/dist/ui/parent/parent-page.d.ts +2 -0
  679. package/dist/ui/parent/parent-page.js +507 -0
  680. package/dist/ui/shared/brand.d.ts +36 -0
  681. package/dist/ui/shared/brand.js +51 -0
  682. package/dist/ui/shared/favicon.d.ts +12 -0
  683. package/dist/ui/shared/favicon.js +96 -0
  684. package/dist/ui/shared/icon.d.ts +9 -0
  685. package/dist/ui/shared/icon.js +35 -0
  686. package/dist/ui/shared/inline-lib.d.ts +1 -0
  687. package/dist/ui/shared/inline-lib.js +28 -0
  688. package/dist/ui/shared/logo.d.ts +31 -0
  689. package/dist/ui/shared/logo.js +43 -0
  690. package/dist/ui/shared/page-dom.d.ts +12 -0
  691. package/dist/ui/shared/page-dom.js +36 -0
  692. package/dist/ui/shared/png.d.ts +1 -0
  693. package/dist/ui/shared/png.js +45 -0
  694. package/dist/ui/shared/qr-svg.d.ts +3 -0
  695. package/dist/ui/shared/qr-svg.js +32 -0
  696. package/dist/ui/shared/qr.d.ts +14 -0
  697. package/dist/ui/shared/qr.js +281 -0
  698. package/dist/ui/shared/reel-dock.d.ts +22 -0
  699. package/dist/ui/shared/reel-dock.js +365 -0
  700. package/dist/ui/shared/tutor-color.d.ts +15 -0
  701. package/dist/ui/shared/tutor-color.js +47 -0
  702. package/dist/ui/talk/page.d.ts +6 -0
  703. package/dist/ui/talk/page.js +294 -0
  704. package/grades/grade-2/README.md +11 -0
  705. package/grades/grade-2/VALIDATION.md +41 -0
  706. package/grades/grade-2/agents/chinese-tutor/activities//344/275/240/350/257/264/346/210/221/347/224/273.md +157 -0
  707. package/grades/grade-2/agents/chinese-tutor/activities//344/275/240/350/257/264/346/210/221/347/224/273./344/276/213/345/255/220.md +78 -0
  708. package/grades/grade-2/agents/chinese-tutor/activities//344/276/213/345/255/220/345/233/276//345/200/237/344/274/236.jpg +0 -0
  709. package/grades/grade-2/agents/chinese-tutor/activities//344/276/213/345/255/220/345/233/276//345/260/217/347/214/264/346/221/230/346/241/203.jpg +0 -0
  710. package/grades/grade-2/agents/chinese-tutor/activities//345/206/231/350/257/235.md +64 -0
  711. package/grades/grade-2/agents/chinese-tutor/activities//345/206/231/350/257/235./344/276/213/345/255/220.md +31 -0
  712. package/grades/grade-2/agents/chinese-tutor/activities//345/220/254/345/206/231.md +48 -0
  713. package/grades/grade-2/agents/chinese-tutor/activities//345/244/215/344/271/240.md +79 -0
  714. package/grades/grade-2/agents/chinese-tutor/activities//345/244/215/344/271/240./344/276/213/345/255/220.md +35 -0
  715. package/grades/grade-2/agents/chinese-tutor/activities//345/260/217/350/257/276/345/240/202.md +53 -0
  716. package/grades/grade-2/agents/chinese-tutor/activities//346/211/271/346/224/271.md +81 -0
  717. package/grades/grade-2/agents/chinese-tutor/activities//346/211/271/346/224/271./344/276/213/345/255/220.md +35 -0
  718. package/grades/grade-2/agents/chinese-tutor/activities//347/234/213/345/233/276/350/257/264/350/257/235.md +94 -0
  719. package/grades/grade-2/agents/chinese-tutor/activities//347/234/213/345/233/276/350/257/264/350/257/235./344/276/213/345/255/220.md +63 -0
  720. package/grades/grade-2/agents/chinese-tutor/activities//351/242/204/344/271/240.md +82 -0
  721. package/grades/grade-2/agents/chinese-tutor/activities//351/242/204/344/271/240./344/276/213/345/255/220.md +35 -0
  722. package/grades/grade-2/agents/chinese-tutor.md +59 -0
  723. package/grades/grade-2/agents/english-tutor/activities//345/217/243/350/257/255/350/257/276.md +149 -0
  724. package/grades/grade-2/agents/english-tutor/activities//345/217/243/350/257/255/350/257/276./344/276/213/345/255/220.md +13 -0
  725. package/grades/grade-2/agents/english-tutor/activities//345/220/254/345/206/231.md +47 -0
  726. package/grades/grade-2/agents/english-tutor/activities//345/244/215/344/271/240.md +78 -0
  727. package/grades/grade-2/agents/english-tutor/activities//345/244/215/344/271/240./344/276/213/345/255/220.md +35 -0
  728. package/grades/grade-2/agents/english-tutor/activities//345/260/217/350/257/276/345/240/202.md +53 -0
  729. package/grades/grade-2/agents/english-tutor/activities//346/211/271/346/224/271.md +80 -0
  730. package/grades/grade-2/agents/english-tutor/activities//346/211/271/346/224/271./344/276/213/345/255/220.md +35 -0
  731. package/grades/grade-2/agents/english-tutor/activities//351/242/204/344/271/240.md +86 -0
  732. package/grades/grade-2/agents/english-tutor/activities//351/242/204/344/271/240./344/276/213/345/255/220.md +35 -0
  733. package/grades/grade-2/agents/english-tutor.md +57 -0
  734. package/grades/grade-2/agents/math-tutor/activities//345/244/215/344/271/240.md +78 -0
  735. package/grades/grade-2/agents/math-tutor/activities//345/244/215/344/271/240./344/276/213/345/255/220.md +35 -0
  736. package/grades/grade-2/agents/math-tutor/activities//345/260/217/350/257/276/345/240/202.md +56 -0
  737. package/grades/grade-2/agents/math-tutor/activities//345/260/217/350/257/276/345/240/202./344/276/213/345/255/220.md +52 -0
  738. package/grades/grade-2/agents/math-tutor/activities//346/211/271/346/224/271.md +80 -0
  739. package/grades/grade-2/agents/math-tutor/activities//346/211/271/346/224/271./344/276/213/345/255/220.md +35 -0
  740. package/grades/grade-2/agents/math-tutor/activities//351/242/204/344/271/240.md +81 -0
  741. package/grades/grade-2/agents/math-tutor/activities//351/242/204/344/271/240./344/276/213/345/255/220.md +35 -0
  742. package/grades/grade-2/agents/math-tutor.md +51 -0
  743. package/grades/grade-2/examples/2026-10-27-pingjunfen/audio/index.json +44 -0
  744. package/grades/grade-2/examples/2026-10-27-pingjunfen/audio/step-1.mp3 +0 -0
  745. package/grades/grade-2/examples/2026-10-27-pingjunfen/audio/step-2.mp3 +0 -0
  746. package/grades/grade-2/examples/2026-10-27-pingjunfen/audio/step-3.mp3 +0 -0
  747. package/grades/grade-2/examples/2026-10-27-pingjunfen/audio/step-4.mp3 +0 -0
  748. package/grades/grade-2/examples/2026-10-27-pingjunfen/audio/step-5.mp3 +0 -0
  749. package/grades/grade-2/examples/2026-10-27-pingjunfen/bake.json +1 -0
  750. package/grades/grade-2/examples/2026-10-27-pingjunfen/manifest.json +63 -0
  751. package/grades/grade-2/examples/2026-10-27-pingjunfen/scene.json +247 -0
  752. package/grades/grade-2/examples/2026-10-27-pingjunfen.md +40 -0
  753. package/grades/grade-2/examples/2026-10-27-pingjunfen.ts +26 -0
  754. package/grades/grade-2/examples//345/271/263/345/235/207/345/210/206./344/276/213/345/255/220.md +24 -0
  755. package/grades/grade-2/examples//346/225/260/345/255/246/345/271/263/345/235/207/345/210/206.md +42 -0
  756. package/grades/grade-2/validation/2026-10-27.json +4410 -0
  757. package/package.json +26 -15
  758. package/skills/chalk-cli/SKILL.md +62 -0
  759. package/skills/chalk-scene/SKILL.md +91 -0
  760. package/skills/chalk-teaching/SKILL.md +82 -0
  761. package/skills/chalk-teaching/models//344/272/244/351/224/231/346/225/260/345/210/227/345/210/206/350/241/214.md +8 -0
  762. package/skills/chalk-teaching/models//345/207/221/345/215/201.md +7 -0
  763. package/skills/chalk-teaching/models//345/221/250/346/234/237/350/247/204/345/276/213.md +6 -0
  764. package/skills/chalk-teaching/models//345/256/236/347/211/251/345/233/276-/345/242/236/345/207/217.md +6 -0
  765. package/skills/chalk-teaching/models//345/256/236/347/211/251/345/233/276-/346/257/224/345/244/232/345/260/221-/346/261/202/345/244/247/346/225/260/346/261/202/345/260/217/346/225/260.md +7 -0
  766. package/skills/chalk-teaching/models//345/256/236/347/211/251/345/233/276-/346/257/224/345/244/232/345/260/221-/346/261/202/345/267/256.md +6 -0
  767. package/skills/chalk-teaching/models//345/260/217/346/243/222/350/277/233/344/275/215/345/212/240.md +7 -0
  768. package/skills/chalk-teaching/models//345/260/217/346/243/222/351/200/200/344/275/215/345/207/217.md +6 -0
  769. package/skills/chalk-teaching/models//346/216/222/351/230/237/347/202/271/351/230/265.md +7 -0
  770. package/skills/chalk-teaching/models//346/227/266/351/227/264/346/225/260/350/275/264.md +6 -0
  771. package/skills/chalk-teaching/models//346/245/274/345/261/202/351/227/264/351/232/224/345/233/276.md +7 -0
  772. package/skills/chalk-teaching/models//347/240/264/345/215/201.md +7 -0
  773. package/skills/chalk-teaching/models//347/253/226/345/274/217/351/200/200/344/275/215.md +6 -0
  774. package/skills/chalk-teaching/models//347/272/277/346/256/265/345/233/276.md +7 -0
  775. package/skills/chalk-teaching/models-index.md +24 -0
  776. package/skills/chalk-teaching/references//350/256/262/350/247/243/346/250/241/346/235/277/344/270/211/346/241/243.md +32 -0
  777. package/skills/chalk-teaching/references//350/257/264/346/230/216/346/226/207/344/273/266.md +102 -0
  778. package/skills/chalk-verify/SKILL.md +57 -0
  779. package/skills/chalk-verify/references//350/257/204/345/210/244/346/240/207/345/207/206.md +69 -0
  780. package/skills/cotutor-analyze/SKILL.md +106 -0
  781. package/skills/cotutor-analyze/references//345/221/275/344/273/244/344/270/216/346/226/207/344/273/266.md +31 -0
  782. package/skills/cotutor-board/SKILL.md +373 -0
  783. package/skills/cotutor-board/references/README.md +38 -0
  784. package/skills/cotutor-board/references/canvas.md +68 -0
  785. package/skills/cotutor-board/references/choice.md +55 -0
  786. package/skills/cotutor-board/references/code.md +46 -0
  787. package/skills/cotutor-board/references/image.md +52 -0
  788. package/skills/cotutor-board/references/lecture.md +69 -0
  789. package/skills/cotutor-board/references/paint.md +77 -0
  790. package/skills/cotutor-board/references/photo.md +61 -0
  791. package/skills/cotutor-board/references/read.md +51 -0
  792. package/skills/cotutor-board/references/text.md +69 -0
  793. package/skills/cotutor-board/references/tianzige.md +78 -0
  794. package/skills/cotutor-board/references/word.md +91 -0
  795. package/skills/cotutor-home/SKILL.md +169 -0
  796. package/skills/cotutor-home/references/dictation.md +97 -0
  797. package/skills/cotutor-home/references/tutor.md +148 -0
  798. package/skills/cotutor-home/references//345/221/275/344/273/244.md +21 -0
  799. package/skills/cotutor-home/references//351/246/226/351/241/265/350/257/255/346/263/225.md +142 -0
  800. package/skills/cotutor-tune/SKILL.md +147 -0
  801. package/skills/cotutor-tune/references//345/255/227/346/256/265.md +50 -0
  802. package/skills/cotutor-tutor/SKILL.md +261 -0
  803. package/skills/cotutor-tutor/references//344/270/212/344/270/213/346/226/207/345/214/205.md +78 -0
  804. package/themes/default/kid.css +86 -0
  805. package/themes/default/theme.json +26 -0
  806. package/agents/chinese-tutor.md +0 -67
  807. package/agents/homework-tutor.md +0 -17
  808. package/agents/math-tutor.md +0 -68
  809. package/agents/planner.md +0 -18
  810. package/agents/reading-tutor.md +0 -65
  811. package/agents/scene-maker.md +0 -41
  812. package/dist/cards/canvas.d.ts +0 -22
  813. package/dist/cards/canvas.js +0 -65
  814. package/dist/cards/fill.d.ts +0 -14
  815. package/dist/cards/fill.js +0 -64
  816. package/dist/cards/index.d.ts +0 -48
  817. package/dist/cards/index.js +0 -115
  818. package/dist/cards/kind.js +0 -7
  819. package/dist/cards/scene.d.ts +0 -24
  820. package/dist/cards/scene.js +0 -67
  821. package/dist/cards/text.d.ts +0 -18
  822. package/dist/cards/text.js +0 -41
  823. package/dist/cli/doctor.js +0 -355
  824. package/dist/cli/init.js +0 -116
  825. package/dist/cli/main.js +0 -243
  826. package/dist/cli/serve.js +0 -56
  827. package/dist/cli/skeleton.d.ts +0 -39
  828. package/dist/cli/skeleton.js +0 -184
  829. package/dist/cli/skills.d.ts +0 -40
  830. package/dist/cli/skills.js +0 -170
  831. package/dist/cli/workspace.d.ts +0 -69
  832. package/dist/lib/agent-file.d.ts +0 -10
  833. package/dist/lib/agent-file.js +0 -16
  834. package/dist/lib/board.d.ts +0 -15
  835. package/dist/lib/board.js +0 -107
  836. package/dist/lib/context-pack.js +0 -55
  837. package/dist/lib/conversation.js +0 -88
  838. package/dist/lib/kid-board.d.ts +0 -148
  839. package/dist/lib/kid-board.js +0 -294
  840. package/dist/lib/kid-view.d.ts +0 -63
  841. package/dist/lib/kid-view.js +0 -93
  842. package/dist/lib/ledger.d.ts +0 -29
  843. package/dist/lib/run-plan.d.ts +0 -30
  844. package/dist/lib/run-plan.js +0 -32
  845. package/dist/lib/sections.d.ts +0 -12
  846. package/dist/lib/sections.js +0 -151
  847. package/dist/lib/stream.d.ts +0 -15
  848. package/dist/lib/stream.js +0 -69
  849. package/dist/lib/transcript.d.ts +0 -36
  850. package/dist/lib/transcript.js +0 -95
  851. package/dist/server/app.d.ts +0 -74
  852. package/dist/server/app.js +0 -406
  853. package/dist/server/kid-page.d.ts +0 -1
  854. package/dist/server/kid-page.js +0 -768
  855. package/dist/server/mock.js +0 -403
  856. package/dist/server/parent-page.d.ts +0 -8
  857. package/dist/server/parent-page.js +0 -393
  858. package/dist/server/runner.d.ts +0 -64
  859. package/dist/server/runner.js +0 -277
  860. package/dist/server/scene-props.d.ts +0 -16
  861. package/dist/server/scene-props.js +0 -39
  862. package/dist/server/store.d.ts +0 -43
  863. package/dist/server/store.js +0 -210
  864. package/dist/server/tts.d.ts +0 -51
  865. package/dist/server/tts.js +0 -99
  866. /package/dist/{cli → app/cli}/cert.d.ts +0 -0
  867. /package/dist/{cli → app/cli}/main.d.ts +0 -0
  868. /package/dist/{cards → board/cards}/choice.d.ts +0 -0
  869. /package/dist/{cards → board/cards}/code.d.ts +0 -0
  870. /package/dist/{cards → board/cards}/image.d.ts +0 -0
  871. /package/dist/{cards → board/cards}/read.d.ts +0 -0
@@ -0,0 +1,172 @@
1
+ import{c as zy}from"./chunk-KA6CZZ4M.js";import{J as qh}from"./chunk-CW5O4RV7.js";import{$ as i1,$a as un,$b as _e,$c as lo,$d as Nv,$e as v0,$f as W0,$g as fb,$h as N,$i as qr,$j as Bc,A as zl,Aa as Kl,Ab as T1,Ac as so,Ad as Im,Ae as e0,Af as k,Ag as tb,Ah as Db,Ai as Gb,Aj as Mo,B as qg,Ba as Br,Bb as k1,Bc as V1,Bd as Tm,Be as t0,Bf as bc,Bg as nb,Bh as Lb,Bi as Kb,Bj as Oc,C as Bu,Ca as An,Cb as Ee,Cc as Y1,Cd as fv,Ce as n0,Cf as Ha,Cg as go,Ch as U,Ci as Zb,Cj as Do,D as Qg,Da as Xu,Db as M1,Dc as G1,Dd as gv,De as i0,Df as yc,Dg as Li,Dh as Nn,Di as Xb,Dj as jh,E as Jg,Ea as en,Eb as D1,Ec as cm,Ed as km,Ee as r0,Ef as Wa,Eg as ib,Eh as ve,Ei as Th,Ej as vy,F as ye,Fa as Pa,Fb as ql,Fc as Vr,Fd as Mm,Fe as a0,Ff as Ec,Fg as rb,Fh as Rb,Fi as qb,Fj as Fc,G as Ti,Ga as v1,Gb as sm,Gc as ac,Gd as Dm,Ge as Fm,Gf as Ym,Gg as wt,Gh as si,Gi as Qb,Gj as by,H as Fr,Ha as Zs,Hb as om,Hc as K1,Hd as Yr,He as $m,Hf as O0,Hg as rh,Hh as kc,Hi as Jb,Hj as yy,I as Hs,Ia as tn,Ib as io,Ic as Z1,Id as Lm,Ie as uo,If as Gr,Ig as ab,Ih as Eo,Ii as ey,Ij as Uh,J as Ws,Ja as ut,Jb as L1,Jc as X1,Jd as Rm,Je as Bm,Jf as F0,Jg as tr,Jh as rr,Ji as kh,Jj as Hh,K as $r,Ka as b1,Kb as Ql,Kc as oo,Kd as vv,Ke as zm,Kf as $0,Kg as sb,Kh as mh,Ki as ty,Kj as Wh,L as Vs,La as Xs,Lb as Jl,Lc as sc,Ld as bv,Le as s0,Lf as Gm,Lg as ob,Lh as Ab,Li as Mh,Lj as Vh,M as he,Ma as ti,Mb as hn,Mc as q1,Md as yv,Me as fc,Mf as wc,Mg as vo,Mh as Mc,Mi as Nc,Mj as Ey,N as ei,Na as _a,Nb as ro,Nc as Q1,Nd as Ev,Ne as o0,Nf as Km,Ng as Ke,Nh as Dc,Ni as ny,Nj as wy,O as jl,Oa as Ft,Ob as ec,Oc as J1,Od as Am,Oe as l0,Of as B0,Og as lb,Oh as ar,Oi as iy,Oj as xy,P as Ul,Pa as Mi,Pb as Xi,Pc as ev,Pd as wv,Pe as c0,Pf as mo,Pg as cb,Ph as Nb,Pi as ry,Pj as Sy,Q as zu,Qa as y1,Qb as R1,Qc as dm,Qd as xv,Qe as Ji,Qf as z0,Qg as db,Qh as Pb,Qi as Dh,Qj as Lo,R as ju,Ra as qu,Rb as A1,Rc as tv,Rd as Sv,Re as d0,Rf as j0,Rg as ah,Rh as hh,Ri as ay,Rj as Cy,S as Hl,Sa as qs,Sb as ii,Sc as um,Sd as Cv,Se as u0,Sf as U0,Sg as ub,Sh as Lc,Si as Io,Sj as Iy,T as e1,Ta as Qs,Tb as $a,Tc as mm,Td as Iv,Te as m0,Tf as H0,Tg as Ya,Th as ph,Ti as Pc,Tj as Ty,U as Ys,Ua as Qu,Ub as Me,Uc as nv,Ud as Tv,Ue as jm,Uf as Kr,Ug as nr,Uh as wo,Uj as Yh,V as t1,Va as Zl,Vb as N1,Vc as Qi,Vd as kv,Ve as h0,Vf as xc,Vg as bo,Vh as fh,Vi as Lh,Vj as $c,W as n1,Wa as Ju,Wb as P1,Wc as iv,Wd as Mv,We as p0,Wf as Zm,Wg as sh,Wh as gh,Wi as Rh,Wj as Se,X as Uu,Xa as em,Xb as tc,Xc as oc,Xd as Dv,Xe as f0,Xf as Xm,Xg as mb,Xh as _b,Xi as sy,Xj as Gh,Y as Wl,Ya as E1,Yb as _1,Yc as lc,Yd as Lv,Ye as g0,Yf as qm,Yg as hb,Yh as sr,Yi as Ah,Yj as ky,Z as Ot,Za as tm,Zb as lm,Zc as cc,Zd as Rv,Ze as Um,Zf as Qm,Zg as pb,Zh as Ga,Zi as Nh,Zj as My,_ as Vl,_a as G,_b as Ur,_c as hm,_d as Av,_e as gc,_f as ho,_g as oh,_h as oi,_i as oy,_j as Kh,a as Et,aa as r1,ab as Gi,ac as nn,ad as dc,ae as Pv,af as b0,ag as V0,ah as gb,ai as Ob,aj as ly,ak as Dy,b as Bg,ba as a1,bb as nm,bc as Hr,bd as rv,be as _v,bf as y0,bg as Y0,bh as vb,bi as vh,bj as cy,bk as Ly,c as Fl,ca as s1,cb as Oa,cc as Ba,cd as pm,ce as Ov,cf as E0,cg as G0,ch as ht,ci as Ka,cj as To,ck as Ry,d as zg,da as o1,db as w1,dc as te,dd as fm,de as Fv,df as w0,dg as po,dh as ne,di as Fb,dj as dy,dk as Ay,e as $,ea as l1,eb as im,ec as O1,ed as av,ee as $v,ef as x0,eg as K0,eh as bb,ei as xo,ej as _c,ek as Za,f as $l,fa as Gs,fb as x1,fc as nc,fd as sv,fe as Bv,ff as S0,fg as Z0,fh as Ic,fi as bh,fj as uy,fk as Ny,g as jg,ga as Hu,gb as Ki,gc as ge,gd as ov,ge as zv,gf as C0,gg as pn,gh as yb,gi as yh,gj as ko,gk as Zh,h as _r,ha as Wu,hb as Js,hc as De,hd as uc,he as jv,hf as I0,hg as Ve,hh as Eb,hi as $b,hj as Ph,hk as Py,i as Ug,ia as c1,ib as mn,ic as mt,id as lv,ie as Uv,if as T0,ig as ai,ih as $t,ii as Eh,ij as my,ik as _y,j as Hg,ja as d1,jb as eo,jc as le,jd as cv,je as Hv,jf as k0,jg as X0,jh as lh,ji as Bb,jj as _h,jk as Oy,k as Aa,ka as Vu,kb as Xl,kc as F1,kd as mc,ke as Wv,kf as Hm,kg as q0,kh as wb,ki as zb,kj as Qr,kk as zc,l as _u,la as u1,lb as Fa,lc as qi,ld as dv,le as Vv,lf as M0,lg as Va,lh as ch,li as jb,lj as Oh,lk as Xh,m as Ou,ma as m1,mb as S1,mc as $1,md as hc,me as co,mf as D0,mg as Q0,mh as xb,mi as Ub,mj as hy,mk as Fy,n as Fu,na as h1,nb as C1,nc as ic,nd as gm,ne as Nm,nf as Wm,ng as J0,nh as Le,ni as Hb,nj as Fh,nk as $y,o as Wg,oa as p1,ob as zr,oc as Wr,od as uv,oe as Yv,of as Vm,og as Jm,oh as Ri,oi as Wb,oj as $h,ok as By,p as Vg,pa as Yu,pb as it,pc as B1,pd as mv,pe as Gv,pf as vc,pg as fo,ph as Tc,pi as wh,pj as Bh,q as Yg,qa as Ks,qb as F,qc as ao,qd as vm,qe as Kv,qf as L0,qg as Sc,qh as Sb,qi as Vb,qj as py,r as Ii,ra as f1,rb as Fe,rc as ri,rd as bm,re as Zv,rf as za,rg as Cc,rh as Cb,ri as Yb,rj as Ye,s as $u,sa as Gu,sb as ni,sc as Gt,sd as hv,se as Xv,sf as ja,sg as Zr,sh as Ib,si as Rc,sj as fy,t as Na,ta as g1,tb as to,tc as rc,td as pv,te as qv,tf as R0,tg as eb,th as Tb,ti as So,tj as se,u as Gg,ua as Ku,ub as jr,uc as z1,ud as ym,ue as Qv,uf as A0,ug as Xr,uh as yo,ui as xh,uj as zh,v as Kg,va as Zu,vb as rm,vc as j1,vd as Em,ve as Pm,vf as Ua,vg as er,vh as dh,vi as Sh,vj as fe,w as Zg,wa as ki,wb as am,wc as Di,wd as wm,we as Jv,wf as N0,wg as eh,wh as kb,wi as Ch,wj as or,x as Bl,xa as Yl,xb as Zi,xc as U1,xd as xm,xe as _m,xf as P0,xg as th,xh as Mb,xi as Ih,xj as W,y as Xg,ya as Rn,yb as no,yc as H1,yd as Sm,ye as Om,yf as _0,yg as nh,yh as ir,yi as Ac,yj as ae,z as Or,za as Gl,zb as I1,zc as W1,zd as Cm,ze as pc,zf as me,zg as ih,zh as uh,zi as Co,zj as gy}from"./chunk-EVVZI2NY.js";import{a as Ln}from"./chunk-3QCKGZYE.js";import{a as O,b as A}from"./chunk-IBYORHIP.js";import{a as dt}from"./chunk-7VTTHZKW.js";import{b as $g,c as Pu,d as D}from"./chunk-GCO4TDHX.js";import{b as Ra,c as I}from"./chunk-RJ2R4FVC.js";var x2=Ra((E2,w2)=>{(function(){var e=this,t={};typeof E2<"u"?w2.exports=t:e.fuzzy=t,t.simpleFilter=function(n,i){return i.filter(function(r){return t.test(n,r)})},t.test=function(n,i){return t.match(n,i)!==null},t.match=function(n,i,r){r=r||{};var a=0,o=[],c=i.length,d=0,h=0,s=r.pre||"",l=r.post||"",m=r.caseSensitive&&i||i.toLowerCase(),u;n=r.caseSensitive&&n||n.toLowerCase();for(var p=0;p<c;p++)u=i[p],m[p]===n[a]?(u=s+u+l,a+=1,h+=1+h):h=0,d+=h,o[o.length]=u;return a===n.length?(d=m===n?1/0:d,{rendered:o.join(""),score:d}):null},t.filter=function(n,i,r){return!i||i.length===0?[]:typeof n!="string"?i:(r=r||{},i.reduce(function(a,o,c,d){var h=o;r.extract&&(h=r.extract(o));var s=t.match(n,h,r);return s!=null&&(a[a.length]={string:s.rendered,score:s.score,index:c,original:o}),a},[]).sort(function(a,o){var c=o.score-a.score;return c||a.index-o.index}))}})()});var T2=Ra(I2=>{"use strict";var ds=O();function e5(e,t){return e===t&&(e!==0||1/e===1/t)||e!==e&&t!==t}var t5=typeof Object.is=="function"?Object.is:e5,n5=ds.useState,i5=ds.useEffect,r5=ds.useLayoutEffect,a5=ds.useDebugValue;function s5(e,t){var n=t(),i=n5({inst:{value:n,getSnapshot:t}}),r=i[0].inst,a=i[1];return r5(function(){r.value=n,r.getSnapshot=t,Gp(r)&&a({inst:r})},[e,n,t]),i5(function(){return Gp(r)&&a({inst:r}),e(function(){Gp(r)&&a({inst:r})})},[e]),a5(n),n}function Gp(e){var t=e.getSnapshot;e=e.value;try{var n=t();return!t5(e,n)}catch{return!0}}function o5(e,t){return t()}var l5=typeof window>"u"||typeof window.document>"u"||typeof window.document.createElement>"u"?o5:s5;I2.useSyncExternalStore=ds.useSyncExternalStore!==void 0?ds.useSyncExternalStore:l5});var M2=Ra((P7,k2)=>{"use strict";k2.exports=T2()});var L2=Ra(D2=>{"use strict";var gd=O(),c5=M2();function d5(e,t){return e===t&&(e!==0||1/e===1/t)||e!==e&&t!==t}var u5=typeof Object.is=="function"?Object.is:d5,m5=c5.useSyncExternalStore,h5=gd.useRef,p5=gd.useEffect,f5=gd.useMemo,g5=gd.useDebugValue;D2.useSyncExternalStoreWithSelector=function(e,t,n,i,r){var a=h5(null);if(a.current===null){var o={hasValue:!1,value:null};a.current=o}else o=a.current;a=f5(function(){function d(u){if(!h){if(h=!0,s=u,u=i(u),r!==void 0&&o.hasValue){var p=o.value;if(r(p,u))return l=p}return l=u}if(p=l,u5(s,u))return p;var f=i(u);return r!==void 0&&r(p,f)?(s=u,p):(s=u,l=f)}var h=!1,s,l,m=n===void 0?null:n;return[function(){return d(t())},m===null?void 0:function(){return d(m())}]},[t,n,i,r]);var c=m5(e,a[0],a[1]);return p5(function(){o.hasValue=!0,o.value=c},[c]),g5(c),c}});var A2=Ra((O7,R2)=>{"use strict";R2.exports=L2()});var nx=Ra((NP,tx)=>{var n4="Expected a function",J2=NaN,i4="[object Symbol]",r4=/^\s+|\s+$/g,a4=/^[-+]0x[0-9a-f]+$/i,s4=/^0b[01]+$/i,o4=/^0o[0-7]+$/i,l4=parseInt,c4=typeof global=="object"&&global&&global.Object===Object&&global,d4=typeof self=="object"&&self&&self.Object===Object&&self,u4=c4||d4||Function("return this")(),m4=Object.prototype,h4=m4.toString,p4=Math.max,f4=Math.min,nf=function(){return u4.Date.now()};function g4(e,t,n){var i,r,a,o,c,d,h=0,s=!1,l=!1,m=!0;if(typeof e!="function")throw new TypeError(n4);t=ex(t)||0,rf(n)&&(s=!!n.leading,l="maxWait"in n,a=l?p4(ex(n.maxWait)||0,t):a,m="trailing"in n?!!n.trailing:m);function u(S){var C=i,T=r;return i=r=void 0,h=S,o=e.apply(T,C),o}function p(S){return h=S,c=setTimeout(v,t),s?u(S):o}function f(S){var C=S-d,T=S-h,L=t-C;return l?f4(L,a-T):L}function g(S){var C=S-d,T=S-h;return d===void 0||C>=t||C<0||l&&T>=a}function v(){var S=nf();if(g(S))return E(S);c=setTimeout(v,f(S))}function E(S){return c=void 0,m&&i?u(S):(i=r=void 0,o)}function b(){c!==void 0&&clearTimeout(c),h=0,i=d=r=c=void 0}function w(){return c===void 0?o:E(nf())}function x(){var S=nf(),C=g(S);if(i=arguments,r=this,d=S,C){if(c===void 0)return p(d);if(l)return c=setTimeout(v,t),u(d)}return c===void 0&&(c=setTimeout(v,t)),o}return x.cancel=b,x.flush=w,x}function rf(e){var t=typeof e;return!!e&&(t=="object"||t=="function")}function v4(e){return!!e&&typeof e=="object"}function b4(e){return typeof e=="symbol"||v4(e)&&h4.call(e)==i4}function ex(e){if(typeof e=="number")return e;if(b4(e))return J2;if(rf(e)){var t=typeof e.valueOf=="function"?e.valueOf():e;e=rf(t)?t+"":t}if(typeof e!="string")return e===0?e:+e;e=e.replace(r4,"");var n=s4.test(e);return n||o4.test(e)?l4(e.slice(2),n?2:8):a4.test(e)?J2:+e}tx.exports=g4});var Zd=I(O(),1),Xd=I(O(),1);var nT=0;function Ze(e,t){let n=`atom${++nT}`,i={toString(){return(import.meta.env?import.meta.env.MODE:void 0)!=="production"&&this.debugLabel?n+":"+this.debugLabel:n}};return typeof e=="function"?i.read=e:(i.init=e,i.read=iT,i.write=rT),t&&(i.write=t),i}function iT(e){return e(this)}function rT(e,t,n){return t(this,typeof n=="function"?n(e(this)):n)}var jy=(e,t)=>e.unstable_is?e.unstable_is(t):t===e,Jh=e=>"init"in e,Qh=e=>!!e.write,Uc=new WeakMap,ep=e=>{var t;return tp(e)&&!((t=Uc.get(e))!=null&&t[1])},aT=(e,t)=>{let n=Uc.get(e);if(n)n[1]=!0,n[0].forEach(i=>i(t));else if((import.meta.env?import.meta.env.MODE:void 0)!=="production")throw new Error("[Bug] cancelable promise not found")},sT=e=>{if(Uc.has(e))return;let t=[new Set,!1];Uc.set(e,t);let n=()=>{t[1]=!0};e.then(n,n),e.onCancel=i=>{t[0].add(i)}},tp=e=>typeof e?.then=="function",Uy=e=>"v"in e||"e"in e,jc=e=>{if("e"in e)throw e.e;if((import.meta.env?import.meta.env.MODE:void 0)!=="production"&&!("v"in e))throw new Error("[Bug] atom state is not initialized");return e.v},Vy=(e,t,n)=>{n.p.has(e)||(n.p.add(e),t.then(()=>{n.p.delete(e)},()=>{n.p.delete(e)}))},Hy=(e,t,n,i,r)=>{var a;if((import.meta.env?import.meta.env.MODE:void 0)!=="production"&&i===t)throw new Error("[Bug] atom cannot depend on itself");n.d.set(i,r.n),ep(n.v)&&Vy(t,n.v,r),(a=r.m)==null||a.t.add(t),e&&oT(e,i,t)},Ro=()=>({D:new Map,H:new Set,M:new Set,L:new Set}),No=(e,t,n)=>{e[t].add(n)},Wy=(e,t,n)=>{e.D.has(t)||(e.D.set(t,new Set),No(e,"M",()=>{var i;(i=n.m)==null||i.l.forEach(r=>No(e,"M",r))}))},oT=(e,t,n)=>{let i=e.D.get(t);i&&i.add(n)},lT=(e,t)=>e.D.get(t),Jr=e=>{let t,n=!1,i=r=>{try{r()}catch(a){n||(t=a,n=!0)}};for(;e.H.size||e.M.size||e.L.size;)e.D.clear(),e.H.forEach(i),e.H.clear(),e.M.forEach(i),e.M.clear(),e.L.forEach(i),e.L.clear();if(n)throw t},Yy=(...[e,t,n,i])=>{let r=(v,E,b)=>{let w="v"in E,x=E.v,S=ep(E.v)?E.v:null;if(tp(b)){sT(b);for(let C of E.d.keys())Vy(v,b,e(C));E.v=b}else E.v=b;delete E.e,delete E.x,(!w||!Object.is(x,E.v))&&(++E.n,S&&aT(S,b))},a=(v,E)=>{var b;let w=e(E);if(Uy(w)&&(w.m&&!w.x||Array.from(w.d).every(([M,R])=>a(v,M).n===R)))return w;w.d.clear();let x=!0,S=M=>{if(jy(E,M)){let z=e(M);if(!Uy(z))if(Jh(M))r(M,z,M.init);else throw new Error("no atom init");return jc(z)}let R=a(v,M);try{return jc(R)}finally{if(x)Hy(v,E,w,M,R);else{let z=Ro();Hy(z,E,w,M,R),l(z,E,w),Jr(z)}}},C,T,L={get signal(){return C||(C=new AbortController),C.signal},get setSelf(){return(import.meta.env?import.meta.env.MODE:void 0)!=="production"&&!Qh(E)&&console.warn("setSelf function cannot be used with read-only atom"),!T&&Qh(E)&&(T=(...M)=>{if((import.meta.env?import.meta.env.MODE:void 0)!=="production"&&x&&console.warn("setSelf function cannot be called in sync"),!x)return s(E,...M)}),T}};try{let M=t(E,S,L);if(r(E,w,M),tp(M)){(b=M.onCancel)==null||b.call(M,()=>C?.abort());let R=()=>{if(w.m){let z=Ro();l(z,E,w),Jr(z)}};M.then(R,R)}return w}catch(M){return delete w.v,w.e=M,delete w.x,++w.n,w}finally{x=!1}},o=v=>jc(a(void 0,v)),c=(v,E,b)=>{var w,x;let S=new Map;for(let C of((w=b.m)==null?void 0:w.t)||[]){let T=e(C);T.m&&S.set(C,T)}for(let C of b.p)S.set(C,e(C));return(x=lT(v,E))==null||x.forEach(C=>{S.set(C,e(C))}),S},d=(v,E,b)=>{let w=[],x=new Set,S=new Set,C=[[E,b]];for(;C.length>0;){let[T,L]=C[C.length-1];if(S.has(T)){C.pop();continue}if(x.has(T)){w.push([T,L,L.n]),S.add(T),L.x=!0,C.pop();continue}x.add(T);for(let[M,R]of c(v,T,L))T!==M&&!x.has(M)&&C.push([M,R])}No(v,"H",()=>{let T=new Set([E]);for(let L=w.length-1;L>=0;--L){let[M,R,z]=w[L],_=!1;for(let H of R.d.keys())if(H!==M&&T.has(H)){_=!0;break}_&&(a(v,M),l(v,M,R),z!==R.n&&(Wy(v,M,R),T.add(M))),delete R.x}})},h=(v,E,...b)=>{let w=!0,x=C=>jc(a(v,C)),S=(C,...T)=>{let L=e(C);try{if(jy(E,C)){if(!Jh(C))throw new Error("atom not writable");let M=L.n,R=T[0];r(C,L,R),l(v,C,L),M!==L.n&&(Wy(v,C,L),d(v,C,L));return}else return h(v,C,...T)}finally{w||Jr(v)}};try{return n(E,x,S,...b)}finally{w=!1}},s=(v,...E)=>{let b=Ro();try{return h(b,v,...E)}finally{Jr(b)}},l=(v,E,b)=>{if(b.m&&!ep(b.v)){for(let w of b.d.keys())b.m.d.has(w)||(m(v,w,e(w)).t.add(E),b.m.d.add(w));for(let w of b.m.d||[])if(!b.d.has(w)){b.m.d.delete(w);let x=u(v,w,e(w));x?.t.delete(E)}}},m=(v,E,b)=>{if(!b.m){a(v,E);for(let w of b.d.keys())m(v,w,e(w)).t.add(E);if(b.m={l:new Set,d:new Set(b.d.keys()),t:new Set},Qh(E)){let w=b.m,x,S=(C,T)=>{let L=!0;x=(...M)=>{try{return h(C,E,...M)}finally{L||Jr(C)}};try{return T()}finally{L=!1}};No(v,"L",()=>{let C=S(v,()=>i(E,(...T)=>x(...T)));C&&(w.u=T=>S(T,C))})}}return b.m},u=(v,E,b)=>{if(b.m&&!b.m.l.size&&!Array.from(b.m.t).some(w=>{var x;return(x=e(w).m)==null?void 0:x.d.has(E)})){let w=b.m.u;w&&No(v,"L",()=>w(v)),delete b.m;for(let x of b.d.keys()){let S=u(v,x,e(x));S?.t.delete(E)}return}return b.m};return{get:o,set:s,sub:(v,E)=>{let b=Ro(),w=e(v),S=m(b,v,w).l;return S.add(E),Jr(b),()=>{S.delete(E);let C=Ro();u(C,v,w),Jr(C)}},unstable_derive:v=>Yy(...v(e,t,n,i))}},cT=e=>{let t=new WeakMap,n=new Set,i,r=0,a=e.unstable_derive((d,h,s,l)=>(i=d,[m=>{let u=t.get(m);if(!u){let p=d(m);u=new Proxy(p,{set(f,g,v){return g==="m"&&n.add(m),Reflect.set(f,g,v)},deleteProperty(f,g){return g==="m"&&n.delete(m),Reflect.deleteProperty(f,g)}}),t.set(m,u)}return u},h,(m,u,p,...f)=>r?p(m,...f):s(m,u,p,...f),l])),o=a.set;return Object.assign(a,{dev4_get_internal_weak_map:()=>({get:d=>{let h=i(d);if(h.n!==0)return h}}),dev4_get_mounted_atoms:()=>n,dev4_restore_atoms:d=>{o({read:()=>null,write:(s,l)=>{++r;try{for(let[m,u]of d)Jh(m)&&l(m,u)}finally{--r}}})}})},Xa=()=>{let e=new WeakMap,n=Yy(i=>{if((import.meta.env?import.meta.env.MODE:void 0)!=="production"&&!i)throw new Error("Atom is undefined or null");let r=e.get(i);return r||(r={d:new Map,p:new Set,n:0},e.set(i,r)),r},(i,...r)=>i.read(...r),(i,...r)=>i.write(...r),(i,...r)=>{var a;return(a=i.onMount)==null?void 0:a.call(i,...r)});return(import.meta.env?import.meta.env.MODE:void 0)!=="production"?cT(n):n},Ao,Gy=()=>(Ao||(Ao=Xa(),(import.meta.env?import.meta.env.MODE:void 0)!=="production"&&(globalThis.__JOTAI_DEFAULT_STORE__||(globalThis.__JOTAI_DEFAULT_STORE__=Ao),globalThis.__JOTAI_DEFAULT_STORE__!==Ao&&console.warn("Detected multiple Jotai instances. It may cause unexpected behavior with the default store. https://github.com/pmndrs/jotai/discussions/2044"))),Ao);var xt=I(O(),1);var dT=(0,xt.createContext)(void 0),qa=e=>{let t=(0,xt.useContext)(dT);return e?.store||t||Gy()};var ip=e=>typeof e?.then=="function",Zy=e=>{e.status="pending",e.then(t=>{e.status="fulfilled",e.value=t},t=>{e.status="rejected",e.reason=t})},uT=xt.default.use||(e=>{if(e.status==="pending")throw e;if(e.status==="fulfilled")return e.value;throw e.status==="rejected"?e.reason:(Zy(e),e)}),np=new WeakMap,Ky=e=>{let t=np.get(e);return t||(t=new Promise((n,i)=>{let r=e,a=d=>h=>{r===d&&n(h)},o=d=>h=>{r===d&&i(h)},c=d=>{"onCancel"in d&&typeof d.onCancel=="function"&&d.onCancel(h=>{if((import.meta.env?import.meta.env.MODE:void 0)!=="production"&&h===d)throw new Error("[Bug] p is not updated even after cancelation");ip(h)?(np.set(h,t),r=h,h.then(a(h),o(h)),c(h)):n(h)})};e.then(a(e),o(e)),c(e)}),np.set(e,t)),t};function rp(e,t){let n=qa(t),[[i,r,a],o]=(0,xt.useReducer)(h=>{let s=n.get(e);return Object.is(h[0],s)&&h[1]===n&&h[2]===e?h:[s,n,e]},void 0,()=>[n.get(e),n,e]),c=i;(r!==n||a!==e)&&(o(),c=n.get(e));let d=t?.delay;if((0,xt.useEffect)(()=>{let h=n.sub(e,()=>{if(typeof d=="number"){let s=n.get(e);ip(s)&&Zy(Ky(s)),setTimeout(o,d);return}o()});return o(),h},[n,e,d]),(0,xt.useDebugValue)(c),ip(c)){let h=Ky(c);return uT(h)}return c}function Hc(e,t){let n=qa(t);return(0,xt.useCallback)((...r)=>{if((import.meta.env?import.meta.env.MODE:void 0)!=="production"&&!("write"in e))throw new Error("not writable atom");return n.set(e,...r)},[n,e])}function ap(e,t){return[rp(e,t),Hc(e,t)]}var Jy=I(A()),Ai=I(O());var qy=I(O(),1);var Xy=new WeakMap;function Qy(e,t){let n=qa(t),i=mT(n);for(let[r,a]of e)(!i.has(r)||t?.dangerouslyForceHydrate)&&(i.add(r),n.set(r,a))}var mT=e=>{let t=Xy.get(e);return t||(t=new WeakSet,Xy.set(e,t)),t};function Qa(){return Qa=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var i in n)Object.prototype.hasOwnProperty.call(n,i)&&(e[i]=n[i])}return e},Qa.apply(this,arguments)}function Wc(){let e=(0,Ai.createContext)(null);function t({store:o,initialValues:c=[],children:d}){let h=(0,Ai.useRef)(o);return h.current||(h.current=Xa()),Qy(c,{store:h.current}),(0,Jy.jsx)(e.Provider,{value:h.current,children:d})}let n=o=>{let c=(0,Ai.useContext)(e);if(!c)throw new Error("Missing Provider from createIsolation");return qa(Qa({store:c},o))};return{Provider:t,useStore:n,useAtom:(o,c)=>{let d=n();return ap(o,Qa({store:d},c))},useAtomValue:(o,c)=>{let d=n();return rp(o,Qa({store:d},c))},useSetAtom:(o,c)=>{let d=n();return Hc(o,Qa({store:d},c))}}}var{read:qA,write:QA}=Ze(null);var JA=(0,Ai.createContext)({scope:void 0,baseStore:void 0});var Qd=I(O(),1),xS=I(O(),1),Nd=I(A(),1);var ws=I(A(),1),CS=I(A(),1),et=I(O(),1),Er=I(Ln(),1);var Yn=I(O(),1);var wn=I(A(),1),IS=I(A(),1),Ll=I(A(),1),AS=I(A(),1),Tn=I(O(),1);var NS=I(O(),1);var PS=I(A(),1),xs=I(A(),1);var Pd=I(A(),1),OS=I(A(),1),Mr=I(O(),1);var Jd=I(O(),1),BS=I(A(),1),Fi=I(A(),1);var tu=I(O(),1),Ss=I(A(),1);var nu=I(O(),1),Cs=I(A(),1),zS=I(A(),1),on=I(A(),1);var Oe=I(O(),1);function li(e,t,{checkForDefaultPrevented:n=!0}={}){return function(r){if(e?.(r),n===!1||!r.defaultPrevented)return t?.(r)}}var tE=I(O(),1);function eE(e,t){if(typeof e=="function")return e(t);e!=null&&(e.current=t)}function sp(...e){return t=>{let n=!1,i=e.map(r=>{let a=eE(r,t);return!n&&typeof a=="function"&&(n=!0),a});if(n)return()=>{for(let r=0;r<i.length;r++){let a=i[r];typeof a=="function"?a():eE(e[r],null)}}}}function rn(...e){return tE.useCallback(sp(...e),e)}var Ni=I(O(),1),nE=I(A(),1);function Vc(e,t=[]){let n=[];function i(a,o){let c=Ni.createContext(o),d=n.length;n=[...n,o];let h=l=>{let{scope:m,children:u,...p}=l,f=m?.[e]?.[d]||c,g=Ni.useMemo(()=>p,Object.values(p));return(0,nE.jsx)(f.Provider,{value:g,children:u})};h.displayName=a+"Provider";function s(l,m){let u=m?.[e]?.[d]||c,p=Ni.useContext(u);if(p)return p;if(o!==void 0)return o;throw new Error(`\`${l}\` must be used within \`${a}\``)}return[h,s]}let r=()=>{let a=n.map(o=>Ni.createContext(o));return function(c){let d=c?.[e]||a;return Ni.useMemo(()=>({[`__scope${e}`]:{...c,[e]:d}}),[c,d])}};return r.scopeName=e,[i,hT(r,...t)]}function hT(...e){let t=e[0];if(e.length===1)return t;let n=()=>{let i=e.map(r=>({useScope:r(),scopeName:r.scopeName}));return function(a){let o=i.reduce((c,{useScope:d,scopeName:h})=>{let l=d(a)[`__scope${h}`];return{...c,...l}},{});return Ni.useMemo(()=>({[`__scope${t.scopeName}`]:o}),[o])}};return n.scopeName=t.scopeName,n}var $e=I(O(),1);var iE=I(O(),1),rE=I(Ln(),1);var rt=I(O(),1);var Ja=I(A(),1),Po=rt.forwardRef((e,t)=>{let{children:n,...i}=e,r=rt.Children.toArray(n),a=r.find(fT);if(a){let o=a.props.children,c=r.map(d=>d===a?rt.Children.count(o)>1?rt.Children.only(null):rt.isValidElement(o)?o.props.children:null:d);return(0,Ja.jsx)(op,{...i,ref:t,children:rt.isValidElement(o)?rt.cloneElement(o,void 0,c):null})}return(0,Ja.jsx)(op,{...i,ref:t,children:n})});Po.displayName="Slot";var op=rt.forwardRef((e,t)=>{let{children:n,...i}=e;if(rt.isValidElement(n)){let r=vT(n),a=gT(i,n.props);return n.type!==rt.Fragment&&(a.ref=t?sp(t,r):r),rt.cloneElement(n,a)}return rt.Children.count(n)>1?rt.Children.only(null):null});op.displayName="SlotClone";var pT=({children:e})=>(0,Ja.jsx)(Ja.Fragment,{children:e});function fT(e){return rt.isValidElement(e)&&e.type===pT}function gT(e,t){let n={...t};for(let i in t){let r=e[i],a=t[i];/^on[A-Z]/.test(i)?r&&a?n[i]=(...c)=>{a(...c),r(...c)}:r&&(n[i]=r):i==="style"?n[i]={...r,...a}:i==="className"&&(n[i]=[r,a].filter(Boolean).join(" "))}return{...e,...n}}function vT(e){let t=Object.getOwnPropertyDescriptor(e.props,"ref")?.get,n=t&&"isReactWarning"in t&&t.isReactWarning;return n?e.ref:(t=Object.getOwnPropertyDescriptor(e,"ref")?.get,n=t&&"isReactWarning"in t&&t.isReactWarning,n?e.props.ref:e.props.ref||e.ref)}var aE=I(A(),1),bT=["a","button","div","form","h2","h3","img","input","label","li","nav","ol","p","span","svg","ul"],Bt=bT.reduce((e,t)=>{let n=iE.forwardRef((i,r)=>{let{asChild:a,...o}=i,c=a?Po:t;return typeof window<"u"&&(window[Symbol.for("radix-ui")]=!0),(0,aE.jsx)(c,{...o,ref:r})});return n.displayName=`Primitive.${t}`,{...e,[t]:n}},{});function sE(e,t){e&&rE.flushSync(()=>e.dispatchEvent(t))}var es=I(O(),1);function an(e){let t=es.useRef(e);return es.useEffect(()=>{t.current=e}),es.useMemo(()=>(...n)=>t.current?.(...n),[])}var oE=I(O(),1);function lE(e,t=globalThis?.document){let n=an(e);oE.useEffect(()=>{let i=r=>{r.key==="Escape"&&n(r)};return t.addEventListener("keydown",i,{capture:!0}),()=>t.removeEventListener("keydown",i,{capture:!0})},[n,t])}var cp=I(A(),1),yT="DismissableLayer",lp="dismissableLayer.update",ET="dismissableLayer.pointerDownOutside",wT="dismissableLayer.focusOutside",cE,uE=$e.createContext({layers:new Set,layersWithOutsidePointerEventsDisabled:new Set,branches:new Set}),dp=$e.forwardRef((e,t)=>{let{disableOutsidePointerEvents:n=!1,onEscapeKeyDown:i,onPointerDownOutside:r,onFocusOutside:a,onInteractOutside:o,onDismiss:c,...d}=e,h=$e.useContext(uE),[s,l]=$e.useState(null),m=s?.ownerDocument??globalThis?.document,[,u]=$e.useState({}),p=rn(t,C=>l(C)),f=Array.from(h.layers),[g]=[...h.layersWithOutsidePointerEventsDisabled].slice(-1),v=f.indexOf(g),E=s?f.indexOf(s):-1,b=h.layersWithOutsidePointerEventsDisabled.size>0,w=E>=v,x=CT(C=>{let T=C.target,L=[...h.branches].some(M=>M.contains(T));!w||L||(r?.(C),o?.(C),C.defaultPrevented||c?.())},m),S=IT(C=>{let T=C.target;[...h.branches].some(M=>M.contains(T))||(a?.(C),o?.(C),C.defaultPrevented||c?.())},m);return lE(C=>{E===h.layers.size-1&&(i?.(C),!C.defaultPrevented&&c&&(C.preventDefault(),c()))},m),$e.useEffect(()=>{if(s)return n&&(h.layersWithOutsidePointerEventsDisabled.size===0&&(cE=m.body.style.pointerEvents,m.body.style.pointerEvents="none"),h.layersWithOutsidePointerEventsDisabled.add(s)),h.layers.add(s),dE(),()=>{n&&h.layersWithOutsidePointerEventsDisabled.size===1&&(m.body.style.pointerEvents=cE)}},[s,m,n,h]),$e.useEffect(()=>()=>{s&&(h.layers.delete(s),h.layersWithOutsidePointerEventsDisabled.delete(s),dE())},[s,h]),$e.useEffect(()=>{let C=()=>u({});return document.addEventListener(lp,C),()=>document.removeEventListener(lp,C)},[]),(0,cp.jsx)(Bt.div,{...d,ref:p,style:{pointerEvents:b?w?"auto":"none":void 0,...e.style},onFocusCapture:li(e.onFocusCapture,S.onFocusCapture),onBlurCapture:li(e.onBlurCapture,S.onBlurCapture),onPointerDownCapture:li(e.onPointerDownCapture,x.onPointerDownCapture)})});dp.displayName=yT;var xT="DismissableLayerBranch",ST=$e.forwardRef((e,t)=>{let n=$e.useContext(uE),i=$e.useRef(null),r=rn(t,i);return $e.useEffect(()=>{let a=i.current;if(a)return n.branches.add(a),()=>{n.branches.delete(a)}},[n.branches]),(0,cp.jsx)(Bt.div,{...e,ref:r})});ST.displayName=xT;function CT(e,t=globalThis?.document){let n=an(e),i=$e.useRef(!1),r=$e.useRef(()=>{});return $e.useEffect(()=>{let a=c=>{if(c.target&&!i.current){let h=function(){mE(ET,n,s,{discrete:!0})};var d=h;let s={originalEvent:c};c.pointerType==="touch"?(t.removeEventListener("click",r.current),r.current=h,t.addEventListener("click",r.current,{once:!0})):h()}else t.removeEventListener("click",r.current);i.current=!1},o=window.setTimeout(()=>{t.addEventListener("pointerdown",a)},0);return()=>{window.clearTimeout(o),t.removeEventListener("pointerdown",a),t.removeEventListener("click",r.current)}},[t,n]),{onPointerDownCapture:()=>i.current=!0}}function IT(e,t=globalThis?.document){let n=an(e),i=$e.useRef(!1);return $e.useEffect(()=>{let r=a=>{a.target&&!i.current&&mE(wT,n,{originalEvent:a},{discrete:!1})};return t.addEventListener("focusin",r),()=>t.removeEventListener("focusin",r)},[t,n]),{onFocusCapture:()=>i.current=!0,onBlurCapture:()=>i.current=!1}}function dE(){let e=new CustomEvent(lp);document.dispatchEvent(e)}function mE(e,t,n,{discrete:i}){let r=n.originalEvent.target,a=new CustomEvent(e,{bubbles:!1,cancelable:!0,detail:n});t&&r.addEventListener(e,t,{once:!0}),i?sE(r,a):r.dispatchEvent(a)}var pE=I(O(),1),up=0;function fE(){pE.useEffect(()=>{let e=document.querySelectorAll("[data-radix-focus-guard]");return document.body.insertAdjacentElement("afterbegin",e[0]??hE()),document.body.insertAdjacentElement("beforeend",e[1]??hE()),up++,()=>{up===1&&document.querySelectorAll("[data-radix-focus-guard]").forEach(t=>t.remove()),up--}},[])}function hE(){let e=document.createElement("span");return e.setAttribute("data-radix-focus-guard",""),e.tabIndex=0,e.style.outline="none",e.style.opacity="0",e.style.position="fixed",e.style.pointerEvents="none",e}var fn=I(O(),1);var EE=I(A(),1),mp="focusScope.autoFocusOnMount",hp="focusScope.autoFocusOnUnmount",gE={bubbles:!1,cancelable:!0},TT="FocusScope",pp=fn.forwardRef((e,t)=>{let{loop:n=!1,trapped:i=!1,onMountAutoFocus:r,onUnmountAutoFocus:a,...o}=e,[c,d]=fn.useState(null),h=an(r),s=an(a),l=fn.useRef(null),m=rn(t,f=>d(f)),u=fn.useRef({paused:!1,pause(){this.paused=!0},resume(){this.paused=!1}}).current;fn.useEffect(()=>{if(i){let E=function(S){if(u.paused||!c)return;let C=S.target;c.contains(C)?l.current=C:lr(l.current,{select:!0})},b=function(S){if(u.paused||!c)return;let C=S.relatedTarget;C!==null&&(c.contains(C)||lr(l.current,{select:!0}))},w=function(S){if(document.activeElement===document.body)for(let T of S)T.removedNodes.length>0&&lr(c)};var f=E,g=b,v=w;document.addEventListener("focusin",E),document.addEventListener("focusout",b);let x=new MutationObserver(w);return c&&x.observe(c,{childList:!0,subtree:!0}),()=>{document.removeEventListener("focusin",E),document.removeEventListener("focusout",b),x.disconnect()}}},[i,c,u.paused]),fn.useEffect(()=>{if(c){bE.add(u);let f=document.activeElement;if(!c.contains(f)){let v=new CustomEvent(mp,gE);c.addEventListener(mp,h),c.dispatchEvent(v),v.defaultPrevented||(kT(AT(wE(c)),{select:!0}),document.activeElement===f&&lr(c))}return()=>{c.removeEventListener(mp,h),setTimeout(()=>{let v=new CustomEvent(hp,gE);c.addEventListener(hp,s),c.dispatchEvent(v),v.defaultPrevented||lr(f??document.body,{select:!0}),c.removeEventListener(hp,s),bE.remove(u)},0)}}},[c,h,s,u]);let p=fn.useCallback(f=>{if(!n&&!i||u.paused)return;let g=f.key==="Tab"&&!f.altKey&&!f.ctrlKey&&!f.metaKey,v=document.activeElement;if(g&&v){let E=f.currentTarget,[b,w]=MT(E);b&&w?!f.shiftKey&&v===w?(f.preventDefault(),n&&lr(b,{select:!0})):f.shiftKey&&v===b&&(f.preventDefault(),n&&lr(w,{select:!0})):v===E&&f.preventDefault()}},[n,i,u.paused]);return(0,EE.jsx)(Bt.div,{tabIndex:-1,...o,ref:m,onKeyDown:p})});pp.displayName=TT;function kT(e,{select:t=!1}={}){let n=document.activeElement;for(let i of e)if(lr(i,{select:t}),document.activeElement!==n)return}function MT(e){let t=wE(e),n=vE(t,e),i=vE(t.reverse(),e);return[n,i]}function wE(e){let t=[],n=document.createTreeWalker(e,NodeFilter.SHOW_ELEMENT,{acceptNode:i=>{let r=i.tagName==="INPUT"&&i.type==="hidden";return i.disabled||i.hidden||r?NodeFilter.FILTER_SKIP:i.tabIndex>=0?NodeFilter.FILTER_ACCEPT:NodeFilter.FILTER_SKIP}});for(;n.nextNode();)t.push(n.currentNode);return t}function vE(e,t){for(let n of e)if(!DT(n,{upTo:t}))return n}function DT(e,{upTo:t}){if(getComputedStyle(e).visibility==="hidden")return!0;for(;e;){if(t!==void 0&&e===t)return!1;if(getComputedStyle(e).display==="none")return!0;e=e.parentElement}return!1}function LT(e){return e instanceof HTMLInputElement&&"select"in e}function lr(e,{select:t=!1}={}){if(e&&e.focus){let n=document.activeElement;e.focus({preventScroll:!0}),e!==n&&LT(e)&&t&&e.select()}}var bE=RT();function RT(){let e=[];return{add(t){let n=e[0];t!==n&&n?.pause(),e=yE(e,t),e.unshift(t)},remove(t){e=yE(e,t),e[0]?.resume()}}}function yE(e,t){let n=[...e],i=n.indexOf(t);return i!==-1&&n.splice(i,1),n}function AT(e){return e.filter(t=>t.tagName!=="A")}var Yc=I(O(),1);var xE=I(O(),1),gn=globalThis?.document?xE.useLayoutEffect:()=>{};var NT=Yc.useId||(()=>{}),PT=0;function SE(e){let[t,n]=Yc.useState(NT());return gn(()=>{e||n(i=>i??String(PT++))},[e]),e||(t?`radix-${t}`:"")}var sn=I(O(),1);var TE=["top","right","bottom","left"];var ci=Math.min,Pn=Math.max,Oo=Math.round,Fo=Math.floor,di=e=>({x:e,y:e}),_T={left:"right",right:"left",bottom:"top",top:"bottom"};function fp(e,t,n){return Pn(e,ci(t,n))}function ui(e,t){return typeof e=="function"?e(t):e}function Pi(e){return e.split("-")[0]}function ea(e){return e.split("-")[1]}function Kc(e){return e==="x"?"y":"x"}function Zc(e){return e==="y"?"height":"width"}function _n(e){let t=e[0];return t==="t"||t==="b"?"y":"x"}function Xc(e){return Kc(_n(e))}function kE(e,t,n){n===void 0&&(n=!1);let i=ea(e),r=Xc(e),a=Zc(r),o=r==="x"?i===(n?"end":"start")?"right":"left":i==="start"?"bottom":"top";return t.reference[a]>t.floating[a]&&(o=_o(o)),[o,_o(o)]}function ME(e){let t=_o(e);return[Gc(e),t,Gc(t)]}function Gc(e){return e.includes("start")?e.replace("start","end"):e.replace("end","start")}var CE=["left","right"],IE=["right","left"],OT=["top","bottom"],FT=["bottom","top"];function $T(e,t,n){switch(e){case"top":case"bottom":return n?t?IE:CE:t?CE:IE;case"left":case"right":return t?OT:FT;default:return[]}}function DE(e,t,n,i){let r=ea(e),a=$T(Pi(e),n==="start",i);return r&&(a=a.map(o=>o+"-"+r),t&&(a=a.concat(a.map(Gc)))),a}function _o(e){let t=Pi(e);return _T[t]+e.slice(t.length)}function BT(e){var t,n,i,r;return{top:(t=e.top)!=null?t:0,right:(n=e.right)!=null?n:0,bottom:(i=e.bottom)!=null?i:0,left:(r=e.left)!=null?r:0}}function gp(e){return typeof e!="number"?BT(e):{top:e,right:e,bottom:e,left:e}}function ta(e){let{x:t,y:n,width:i,height:r}=e;return{width:i,height:r,top:n,left:t,right:t+i,bottom:n+r,x:t,y:n}}function LE(e,t,n){let{reference:i,floating:r}=e,a=_n(t),o=Xc(t),c=Zc(o),d=Pi(t),h=a==="y",s=i.x+i.width/2-r.width/2,l=i.y+i.height/2-r.height/2,m=i[c]/2-r[c]/2,u;switch(d){case"top":u={x:s,y:i.y-r.height};break;case"bottom":u={x:s,y:i.y+i.height};break;case"right":u={x:i.x+i.width,y:l};break;case"left":u={x:i.x-r.width,y:l};break;default:u={x:i.x,y:i.y}}let p=ea(t);return p&&(u[o]+=m*(p==="end"?1:-1)*(n&&h?-1:1)),u}async function NE(e,t){var n;t===void 0&&(t={});let{x:i,y:r,platform:a,rects:o,elements:c,strategy:d}=e,{boundary:h="clippingAncestors",rootBoundary:s="viewport",elementContext:l="floating",altBoundary:m=!1,padding:u=0}=ui(t,e),p=gp(u),g=c[m?l==="floating"?"reference":"floating":l],v=ta(await a.getClippingRect({element:(n=await(a.isElement==null?void 0:a.isElement(g)))==null||n?g:g.contextElement||await(a.getDocumentElement==null?void 0:a.getDocumentElement(c.floating)),boundary:h,rootBoundary:s,strategy:d})),E=l==="floating"?{x:i,y:r,width:o.floating.width,height:o.floating.height}:o.reference,b=await(a.getOffsetParent==null?void 0:a.getOffsetParent(c.floating)),w=await(a.isElement==null?void 0:a.isElement(b))&&await(a.getScale==null?void 0:a.getScale(b))||{x:1,y:1},x=ta(a.convertOffsetParentRelativeRectToViewportRelativeRect?await a.convertOffsetParentRelativeRectToViewportRelativeRect({elements:c,rect:E,offsetParent:b,strategy:d}):E);return{top:(v.top-x.top+p.top)/w.y,bottom:(x.bottom-v.bottom+p.bottom)/w.y,left:(v.left-x.left+p.left)/w.x,right:(x.right-v.right+p.right)/w.x}}var zT=50,PE=async(e,t,n)=>{let{placement:i="bottom",strategy:r="absolute",middleware:a=[],platform:o}=n,c=o.detectOverflow?o:{...o,detectOverflow:NE},d=await(o.isRTL==null?void 0:o.isRTL(t)),h=await o.getElementRects({reference:e,floating:t,strategy:r}),{x:s,y:l}=LE(h,i,d),m=i,u=0,p={};for(let f=0;f<a.length;f++){let g=a[f];if(!g)continue;let{name:v,fn:E}=g,{x:b,y:w,data:x,reset:S}=await E({x:s,y:l,initialPlacement:i,placement:m,strategy:r,middlewareData:p,rects:h,platform:c,elements:{reference:e,floating:t}});s=b??s,l=w??l,p[v]={...p[v],...x},S&&u<zT&&(u++,typeof S=="object"&&(S.placement&&(m=S.placement),S.rects&&(h=S.rects===!0?await o.getElementRects({reference:e,floating:t,strategy:r}):S.rects),{x:s,y:l}=LE(h,m,d)),f=-1)}return{x:s,y:l,placement:m,strategy:r,middlewareData:p}},_E=e=>({name:"arrow",options:e,async fn(t){let{x:n,y:i,placement:r,rects:a,platform:o,elements:c,middlewareData:d}=t,{element:h,padding:s=0}=ui(e,t)||{};if(h==null)return{};let l=gp(s),m={x:n,y:i},u=Xc(r),p=Zc(u),f=await o.getDimensions(h),g=u==="y",v=g?"top":"left",E=g?"bottom":"right",b=g?"clientHeight":"clientWidth",w=a.reference[p]+a.reference[u]-m[u]-a.floating[p],x=m[u]-a.reference[u],S=await(o.getOffsetParent==null?void 0:o.getOffsetParent(h)),C=S?S[b]:0;(!C||!await(o.isElement==null?void 0:o.isElement(S)))&&(C=c.floating[b]||a.floating[p]);let T=w/2-x/2,L=C/2-f[p]/2-1,M=ci(l[v],L),R=ci(l[E],L),z=C-f[p]-R,_=C/2-f[p]/2+T,H=fp(M,_,z),P=!d.arrow&&ea(r)!=null&&_!==H&&a.reference[p]/2-(_<M?M:R)-f[p]/2<0,B=P?_<M?_-M:_-z:0;return{[u]:m[u]+B,data:{[u]:H,centerOffset:_-H-B,...P&&{alignmentOffset:B}},reset:P}}});var OE=function(e){return e===void 0&&(e={}),{name:"flip",options:e,async fn(t){var n,i;let{placement:r,middlewareData:a,rects:o,initialPlacement:c,platform:d,elements:h}=t,{mainAxis:s=!0,crossAxis:l=!0,fallbackPlacements:m,fallbackStrategy:u="bestFit",fallbackAxisSideDirection:p="none",flipAlignment:f=!0,...g}=ui(e,t);if((n=a.arrow)!=null&&n.alignmentOffset)return{};let v=Pi(r),E=_n(c),b=Pi(c)===c,w=await(d.isRTL==null?void 0:d.isRTL(h.floating)),x=m||(b||!f?[_o(c)]:ME(c)),S=p!=="none";!m&&S&&x.push(...DE(c,f,p,w));let C=[c,...x],T=await d.detectOverflow(t,g),L=[],M=((i=a.flip)==null?void 0:i.overflows)||[];if(s&&L.push(T[v]),l){let H=kE(r,o,w);L.push(T[H[0]],T[H[1]])}if(M=[...M,{placement:r,overflows:L}],!L.every(H=>H<=0)){var R,z;let H=(((R=a.flip)==null?void 0:R.index)||0)+1,P=C[H];if(P&&(!(l==="alignment"?E!==_n(P):!1)||M.every(V=>_n(V.placement)===E?V.overflows[0]>0:!0)))return{data:{index:H,overflows:M},reset:{placement:P}};let B=(z=M.filter(q=>q.overflows[0]<=0).sort((q,V)=>q.overflows[1]-V.overflows[1])[0])==null?void 0:z.placement;if(!B)switch(u){case"bestFit":{var _;let q=(_=M.filter(V=>{if(S){let Y=_n(V.placement);return Y===E||Y==="y"}return!0}).map(V=>[V.placement,V.overflows.filter(Y=>Y>0).reduce((Y,ie)=>Y+ie,0)]).sort((V,Y)=>V[1]-Y[1])[0])==null?void 0:_[0];q&&(B=q);break}case"initialPlacement":B=c;break}if(r!==B)return{reset:{placement:B}}}return{}}}};function RE(e,t){return{top:e.top-t.height,right:e.right-t.width,bottom:e.bottom-t.height,left:e.left-t.width}}function AE(e){return TE.some(t=>e[t]>=0)}var FE=function(e){return e===void 0&&(e={}),{name:"hide",options:e,async fn(t){let{rects:n,platform:i}=t,{strategy:r="referenceHidden",...a}=ui(e,t);switch(r){case"referenceHidden":{let o=await i.detectOverflow(t,{...a,elementContext:"reference"}),c=RE(o,n.reference);return{data:{referenceHiddenOffsets:c,referenceHidden:AE(c)}}}case"escaped":{let o=await i.detectOverflow(t,{...a,altBoundary:!0}),c=RE(o,n.floating);return{data:{escapedOffsets:c,escaped:AE(c)}}}default:return{}}}}};var $E=new Set(["left","top"]);async function jT(e,t){let{placement:n,platform:i,elements:r}=e,a=await(i.isRTL==null?void 0:i.isRTL(r.floating)),o=Pi(n),c=ea(n),d=_n(n)==="y",h=$E.has(o)?-1:1,s=a&&d?-1:1,l=ui(t,e),{mainAxis:m,crossAxis:u,alignmentAxis:p}=typeof l=="number"?{mainAxis:l,crossAxis:0,alignmentAxis:null}:{mainAxis:l.mainAxis||0,crossAxis:l.crossAxis||0,alignmentAxis:l.alignmentAxis};return c&&typeof p=="number"&&(u=c==="end"?p*-1:p),d?{x:u*s,y:m*h}:{x:m*h,y:u*s}}var BE=function(e){return e===void 0&&(e=0),{name:"offset",options:e,async fn(t){var n,i;let{x:r,y:a,placement:o,middlewareData:c}=t,d=await jT(t,e);return o===((n=c.offset)==null?void 0:n.placement)&&(i=c.arrow)!=null&&i.alignmentOffset?{}:{x:r+d.x,y:a+d.y,data:{...d,placement:o}}}}},zE=function(e){return e===void 0&&(e={}),{name:"shift",options:e,async fn(t){let{x:n,y:i,placement:r,platform:a}=t,{mainAxis:o=!0,crossAxis:c=!1,limiter:d={fn:E=>{let{x:b,y:w}=E;return{x:b,y:w}}},...h}=ui(e,t),s={x:n,y:i},l=await a.detectOverflow(t,h),m=_n(r),u=Kc(m),p=s[u],f=s[m],g=(E,b)=>fp(b+l[E==="y"?"top":"left"],b,b-l[E==="y"?"bottom":"right"]);o&&(p=g(u,p)),c&&(f=g(m,f));let v=d.fn({...t,[u]:p,[m]:f});return{...v,data:{x:v.x-n,y:v.y-i,enabled:{[u]:o,[m]:c}}}}}},jE=function(e){return e===void 0&&(e={}),{options:e,fn(t){var n,i;let{x:r,y:a,placement:o,rects:c,middlewareData:d}=t,{offset:h=0,mainAxis:s=!0,crossAxis:l=!0}=ui(e,t),m={x:r,y:a},u=_n(o),p=Kc(u),f=m[p],g=m[u],v=ui(h,t),E=typeof v=="number"?{mainAxis:v,crossAxis:0}:{mainAxis:(n=v.mainAxis)!=null?n:0,crossAxis:(i=v.crossAxis)!=null?i:0};if(s){let x=p==="y"?"height":"width",S=c.reference[p]-c.floating[x]+E.mainAxis,C=c.reference[p]+c.reference[x]-E.mainAxis;f<S?f=S:f>C&&(f=C)}if(l){var b,w;let x=p==="y"?"width":"height",S=$E.has(Pi(o)),C=c.reference[u]-c.floating[x]+(S&&((b=d.offset)==null?void 0:b[u])||0)+(S?0:E.crossAxis),T=c.reference[u]+c.reference[x]+(S?0:((w=d.offset)==null?void 0:w[u])||0)-(S?E.crossAxis:0);g<C?g=C:g>T&&(g=T)}return{[p]:f,[u]:g}}}},UE=function(e){return e===void 0&&(e={}),{name:"size",options:e,async fn(t){let{placement:n,rects:i,platform:r,elements:a}=t,{apply:o=()=>{},...c}=ui(e,t),d=await r.detectOverflow(t,c),h=Pi(n),s=ea(n),l=_n(n)==="y",{width:m,height:u}=i.floating,p,f;h==="top"||h==="bottom"?(p=h,f=s===(await(r.isRTL==null?void 0:r.isRTL(a.floating))?"start":"end")?"left":"right"):(f=h,p=s==="end"?"top":"bottom");let g=u-d.top-d.bottom,v=m-d.left-d.right,E=ci(u-d[p],g),b=ci(m-d[f],v),w=t.middlewareData.shift,x=!w,S=E,C=b;w!=null&&w.enabled.x&&(C=v),w!=null&&w.enabled.y&&(S=g),x&&!s&&(l?C=m-2*Pn(d.left,d.right):S=u-2*Pn(d.top,d.bottom)),await o({...t,availableWidth:C,availableHeight:S});let T=await r.getDimensions(a.floating);return m!==T.width||u!==T.height?{reset:{rects:!0}}:{}}}};function qc(){return typeof window<"u"}function ra(e){return WE(e)?(e.nodeName||"").toLowerCase():"#document"}function zt(e){var t;return(e==null||(t=e.ownerDocument)==null?void 0:t.defaultView)||window}function mi(e){var t;return(t=(WE(e)?e.ownerDocument:e.document)||window.document)==null?void 0:t.documentElement}function WE(e){return qc()?e instanceof Node||e instanceof zt(e).Node:!1}function On(e){return qc()?e instanceof Element||e instanceof zt(e).Element:!1}function _i(e){return qc()?e instanceof HTMLElement||e instanceof zt(e).HTMLElement:!1}function HE(e){return!qc()||typeof ShadowRoot>"u"?!1:e instanceof ShadowRoot||e instanceof zt(e).ShadowRoot}function $o(e){let{overflow:t,overflowX:n,overflowY:i,display:r}=Fn(e);return/auto|scroll|overlay|hidden|clip/.test(t+i+n)&&r!=="inline"&&r!=="contents"}function VE(e){return/^(table|td|th)$/.test(ra(e))}function Bo(e){try{if(e.matches(":popover-open"))return!0}catch{}try{return e.matches(":modal")}catch{return!1}}var UT=/transform|translate|scale|rotate|perspective|filter/,HT=/paint|layout|strict|content/,na=e=>!!e&&e!=="none",vp;function Qc(e){let t=On(e)?Fn(e):e;return na(t.transform)||na(t.translate)||na(t.scale)||na(t.rotate)||na(t.perspective)||!Jc()&&(na(t.backdropFilter)||na(t.filter))||UT.test(t.willChange||"")||HT.test(t.contain||"")}function YE(e){let t=cr(e);for(;_i(t)&&!ts(t);){if(Qc(t))return t;if(Bo(t))return null;t=cr(t)}return null}function Jc(){return vp==null&&(vp=typeof CSS<"u"&&CSS.supports&&CSS.supports("-webkit-backdrop-filter","none")),vp}function ts(e){return/^(html|body|#document)$/.test(ra(e))}function Fn(e){return zt(e).getComputedStyle(e)}function zo(e){return On(e)?{scrollLeft:e.scrollLeft,scrollTop:e.scrollTop}:{scrollLeft:e.scrollX,scrollTop:e.scrollY}}function cr(e){if(ra(e)==="html")return e;let t=e.assignedSlot||e.parentNode||HE(e)&&e.host||mi(e);return HE(t)?t.host:t}function GE(e){let t=cr(e);return ts(t)?(e.ownerDocument||e).body:_i(t)&&$o(t)?t:GE(t)}function ia(e,t,n){var i;t===void 0&&(t=[]),n===void 0&&(n=!0);let r=GE(e),a=r===((i=e.ownerDocument)==null?void 0:i.body),o=zt(r);if(a){let c=ed(o);return t.concat(o,o.visualViewport||[],$o(r)?r:[],c&&n?ia(c):[])}else return t.concat(r,ia(r,[],n))}function ed(e){return e.parent&&Object.getPrototypeOf(e.parent)?e.frameElement:null}function XE(e){let t=Fn(e),n=parseFloat(t.width)||0,i=parseFloat(t.height)||0,r=_i(e),a=r?e.offsetWidth:n,o=r?e.offsetHeight:i,c=Oo(n)!==a||Oo(i)!==o;return c&&(n=a,i=o),{width:n,height:i,$:c}}function yp(e){return On(e)?e:e.contextElement}function ns(e){let t=yp(e);if(!_i(t))return di(1);let n=t.getBoundingClientRect(),{width:i,height:r,$:a}=XE(t),o=(a?Oo(n.width):n.width)/i,c=(a?Oo(n.height):n.height)/r;return(!o||!Number.isFinite(o))&&(o=1),(!c||!Number.isFinite(c))&&(c=1),{x:o,y:c}}var WT=di(0);function qE(e){let t=zt(e);return!Jc()||!t.visualViewport?WT:{x:t.visualViewport.offsetLeft,y:t.visualViewport.offsetTop}}function VT(e,t,n){return t===void 0&&(t=!1),!!n&&t&&n===zt(e)}function aa(e,t,n,i){t===void 0&&(t=!1),n===void 0&&(n=!1);let r=e.getBoundingClientRect(),a=yp(e),o=di(1);t&&(i?On(i)&&(o=ns(i)):o=ns(e));let c=VT(a,n,i)?qE(a):di(0),d=(r.left+c.x)/o.x,h=(r.top+c.y)/o.y,s=r.width/o.x,l=r.height/o.y;if(a&&i){let m=zt(a),u=On(i)?zt(i):i,p=m,f=ed(p);for(;f&&u!==p;){let g=ns(f),v=f.getBoundingClientRect(),E=Fn(f),b=v.left+(f.clientLeft+parseFloat(E.paddingLeft))*g.x,w=v.top+(f.clientTop+parseFloat(E.paddingTop))*g.y;d*=g.x,h*=g.y,s*=g.x,l*=g.y,d+=b,h+=w,p=zt(f),f=ed(p)}}return ta({width:s,height:l,x:d,y:h})}function td(e,t){let n=zo(e).scrollLeft;return t?t.left+n:aa(mi(e)).left+n}function QE(e,t){let n=e.getBoundingClientRect(),i=n.left+t.scrollLeft-td(e,n),r=n.top+t.scrollTop;return{x:i,y:r}}function YT(e){let{elements:t,rect:n,offsetParent:i,strategy:r}=e,a=r==="fixed",o=mi(i),c=t?Bo(t.floating):!1;if(i===o||c&&a)return n;let d={scrollLeft:0,scrollTop:0},h=di(1),s=di(0),l=_i(i);if((l||!a)&&((ra(i)!=="body"||$o(o))&&(d=zo(i)),l)){let u=aa(i);h=ns(i),s.x=u.x+i.clientLeft,s.y=u.y+i.clientTop}let m=o&&!l&&!a?QE(o,d):di(0);return{width:n.width*h.x,height:n.height*h.y,x:n.x*h.x-d.scrollLeft*h.x+s.x+m.x,y:n.y*h.y-d.scrollTop*h.y+s.y+m.y}}function GT(e){return e.getClientRects?Array.from(e.getClientRects()):[]}function KT(e){let t=zo(e),n=e.ownerDocument.body,i=Pn(e.scrollWidth,e.clientWidth,n.scrollWidth,n.clientWidth),r=Pn(e.scrollHeight,e.clientHeight,n.scrollHeight,n.clientHeight),a=-t.scrollLeft+td(e),o=-t.scrollTop;return Fn(n).direction==="rtl"&&(a+=Pn(e.clientWidth,n.clientWidth)-i),{width:i,height:r,x:a,y:o}}var ZT=25;function XT(e,t,n){n===void 0&&(n="viewport");let i=n==="layoutViewport",r=zt(e),a=mi(e),o=r.visualViewport,c=a.clientWidth,d=a.clientHeight,h=0,s=0;if(o){let m=!Jc()||t==="fixed";i?m||(h=-o.offsetLeft,s=-o.offsetTop):(c=o.width,d=o.height,m&&(h=o.offsetLeft,s=o.offsetTop))}if(td(a)<=0){let m=a.ownerDocument,u=m.body,p=getComputedStyle(u),f=m.compatMode==="CSS1Compat"&&parseFloat(p.marginLeft)+parseFloat(p.marginRight)||0,g=Math.abs(a.clientWidth-u.clientWidth-f),v=getComputedStyle(a).scrollbarGutter==="stable both-edges"?g/2:g;v<=ZT&&(c-=v)}return{width:c,height:d,x:h,y:s}}function qT(e,t){let n=aa(e,!0,t==="fixed"),i=n.top+e.clientTop,r=n.left+e.clientLeft,a=ns(e),o=e.clientWidth*a.x,c=e.clientHeight*a.y,d=r*a.x,h=i*a.y;return{width:o,height:c,x:d,y:h}}function KE(e,t,n){let i;if(t==="viewport"||t==="layoutViewport")i=XT(e,n,t);else if(t==="document")i=KT(mi(e));else if(On(t))i=qT(t,n);else{let r=qE(e);i={x:t.x-r.x,y:t.y-r.y,width:t.width,height:t.height}}return ta(i)}function QT(e,t){let n=t.get(e);if(n)return n;let i=ia(e,[],!1).filter(c=>On(c)&&ra(c)!=="body"),r=null,a=Fn(e).position==="fixed",o=a?cr(e):e;for(;On(o)&&!ts(o);){let c=Fn(o),d=Qc(o),h=r?r.position:a?"fixed":"";!d&&(h==="fixed"||h==="absolute"&&c.position==="static")?i=i.filter(l=>l!==o):r=c,o=cr(o)}return t.set(e,i),i}function JT(e){let{element:t,boundary:n,rootBoundary:i,strategy:r}=e,o=[...n==="clippingAncestors"?Bo(t)?[]:QT(t,this._c):[].concat(n),i],c=KE(t,o[0],r),d=c.top,h=c.right,s=c.bottom,l=c.left;for(let m=1;m<o.length;m++){let u=KE(t,o[m],r);d=Pn(u.top,d),h=ci(u.right,h),s=ci(u.bottom,s),l=Pn(u.left,l)}return{width:h-l,height:s-d,x:l,y:d}}function ek(e){let{width:t,height:n}=XE(e);return{width:t,height:n}}function tk(e,t,n){let i=_i(t),r=mi(t),a=n==="fixed",o=aa(e,!0,a,t),c={scrollLeft:0,scrollTop:0},d=di(0);if((i||!a)&&((ra(t)!=="body"||$o(r))&&(c=zo(t)),i)){let m=aa(t,!0,a,t);d.x=m.x+t.clientLeft,d.y=m.y+t.clientTop}!i&&r&&(d.x=td(r));let h=r&&!i&&!a?QE(r,c):di(0),s=o.left+c.scrollLeft-d.x-h.x,l=o.top+c.scrollTop-d.y-h.y;return{x:s,y:l,width:o.width,height:o.height}}function bp(e){return Fn(e).position==="static"}function ZE(e,t){if(!_i(e)||Fn(e).position==="fixed")return null;if(t)return t(e);let n=e.offsetParent;return mi(e)===n&&(n=n.ownerDocument.body),n}function JE(e,t){let n=zt(e);if(Bo(e))return n;if(!_i(e)){let r=cr(e);for(;r&&!ts(r);){if(On(r)&&!bp(r))return r;r=cr(r)}return n}let i=ZE(e,t);for(;i&&VE(i)&&bp(i);)i=ZE(i,t);return i&&ts(i)&&bp(i)&&!Qc(i)?n:i||YE(e)||n}var nk=async function(e){let t=this.getOffsetParent||JE,n=this.getDimensions,i=await n(e.floating);return{reference:tk(e.reference,await t(e.floating),e.strategy),floating:{x:0,y:0,width:i.width,height:i.height}}};function ik(e){return Fn(e).direction==="rtl"}var ew={convertOffsetParentRelativeRectToViewportRelativeRect:YT,getDocumentElement:mi,getClippingRect:JT,getOffsetParent:JE,getElementRects:nk,getClientRects:GT,getDimensions:ek,getScale:ns,isElement:On,isRTL:ik};function tw(e,t){return e.x===t.x&&e.y===t.y&&e.width===t.width&&e.height===t.height}function rk(e,t,n){let i=null,r,a=mi(e);function o(){var s;clearTimeout(r),(s=i)==null||s.disconnect(),i=null}function c(s,l){s===void 0&&(s=!1),l===void 0&&(l=1),o();let m=e.getBoundingClientRect(),{left:u,top:p,width:f,height:g}=m;if(s||t(),!f||!g)return;let v=Fo(p),E=Fo(a.clientWidth-(u+f)),b=Fo(a.clientHeight-(p+g)),w=Fo(u),S={rootMargin:-v+"px "+-E+"px "+-b+"px "+-w+"px",threshold:Pn(0,ci(1,l))||1},C=!0;function T(L){let M=L[0].intersectionRatio;if(!tw(m,e.getBoundingClientRect()))return c();if(M!==l){if(!C)return c();M?c(!1,M):r=setTimeout(()=>{c(!1,1e-7)},1e3)}C=!1}try{i=new IntersectionObserver(T,{...S,root:a.ownerDocument})}catch{i=new IntersectionObserver(T,S)}i.observe(e)}let d=zt(e),h=()=>c(n);return d.addEventListener("resize",h),c(!0),()=>{d.removeEventListener("resize",h),o()}}function Ep(e,t,n,i){i===void 0&&(i={});let{ancestorScroll:r=!0,ancestorResize:a=!0,elementResize:o=typeof ResizeObserver=="function",layoutShift:c=typeof IntersectionObserver=="function",animationFrame:d=!1}=i,h=yp(e),s=r||a?[...h?ia(h):[],...t?ia(t):[]]:[];s.forEach(v=>{r&&v.addEventListener("scroll",n),a&&v.addEventListener("resize",n)});let l=h&&c?rk(h,n,a):null,m=-1,u=null;o&&(u=new ResizeObserver(v=>{let[E]=v;E&&E.target===h&&u&&t&&(u.unobserve(t),cancelAnimationFrame(m),m=requestAnimationFrame(()=>{var b;(b=u)==null||b.observe(t)})),n()}),h&&!d&&u.observe(h),t&&u.observe(t));let p,f=d?aa(e):null;d&&g();function g(){let v=aa(e);f&&!tw(f,v)&&n(),f=v,p=requestAnimationFrame(g)}return n(),()=>{var v;s.forEach(E=>{r&&E.removeEventListener("scroll",n),a&&E.removeEventListener("resize",n)}),l?.(),(v=u)==null||v.disconnect(),u=null,d&&cancelAnimationFrame(p)}}var nw=BE;var iw=zE,rw=OE,aw=UE,sw=FE,wp=_E;var ow=jE,xp=(e,t,n)=>{let i=new Map,r=n??{},a={...ew,...r.platform,_c:i};return PE(e,t,{...r,platform:a})};var Xe=I(O(),1),cw=I(O(),1),dw=I(Ln(),1),ak=typeof document<"u",sk=function(){},nd=ak?cw.useLayoutEffect:sk;function id(e,t){if(e===t)return!0;if(typeof e!=typeof t)return!1;if(typeof e=="function"&&e.toString()===t.toString())return!0;let n,i,r;if(e&&t&&typeof e=="object"){if(Array.isArray(e)){if(n=e.length,n!==t.length)return!1;for(i=n;i--!==0;)if(!id(e[i],t[i]))return!1;return!0}if(r=Object.keys(e),n=r.length,n!==Object.keys(t).length)return!1;for(i=n;i--!==0;)if(!{}.hasOwnProperty.call(t,r[i]))return!1;for(i=n;i--!==0;){let a=r[i];if(!(a==="_owner"&&e.$$typeof)&&!id(e[a],t[a]))return!1}return!0}return e!==e&&t!==t}function uw(e){return typeof window>"u"?1:(e.ownerDocument.defaultView||window).devicePixelRatio||1}function lw(e,t){let n=uw(e);return Math.round(t*n)/n}function Sp(e){let t=Xe.useRef(e);return nd(()=>{t.current=e}),t}function mw(e){e===void 0&&(e={});let{placement:t="bottom",strategy:n="absolute",middleware:i=[],platform:r,elements:{reference:a,floating:o}={},transform:c=!0,whileElementsMounted:d,open:h}=e,[s,l]=Xe.useState({x:0,y:0,strategy:n,placement:t,middlewareData:{},isPositioned:!1}),[m,u]=Xe.useState(i);id(m,i)||u(i);let[p,f]=Xe.useState(null),[g,v]=Xe.useState(null),E=Xe.useCallback(V=>{V!==S.current&&(S.current=V,f(V))},[]),b=Xe.useCallback(V=>{V!==C.current&&(C.current=V,v(V))},[]),w=a||p,x=o||g,S=Xe.useRef(null),C=Xe.useRef(null),T=Xe.useRef(s),L=d!=null,M=Sp(d),R=Sp(r),z=Sp(h),_=Xe.useCallback(()=>{if(!S.current||!C.current)return;let V={placement:t,strategy:n,middleware:m};R.current&&(V.platform=R.current),xp(S.current,C.current,V).then(Y=>{let ie={...Y,isPositioned:z.current!==!1};H.current&&!id(T.current,ie)&&(T.current=ie,dw.flushSync(()=>{l(ie)}))})},[m,t,n,R,z]);nd(()=>{h===!1&&T.current.isPositioned&&(T.current.isPositioned=!1,l(V=>({...V,isPositioned:!1})))},[h]);let H=Xe.useRef(!1);nd(()=>(H.current=!0,()=>{H.current=!1}),[]),nd(()=>{if(w&&(S.current=w),x&&(C.current=x),w&&x){if(M.current)return M.current(w,x,_);_()}},[w,x,_,M,L]);let P=Xe.useMemo(()=>({reference:S,floating:C,setReference:E,setFloating:b}),[E,b]),B=Xe.useMemo(()=>({reference:w,floating:x}),[w,x]),q=Xe.useMemo(()=>{let V={position:n,left:0,top:0};if(!B.floating)return V;let Y=lw(B.floating,s.x),ie=lw(B.floating,s.y);return c?{...V,transform:"translate("+Y+"px, "+ie+"px)",...uw(B.floating)>=1.5&&{willChange:"transform"}}:{position:n,left:Y,top:ie}},[n,c,B.floating,s.x,s.y]);return Xe.useMemo(()=>({...s,update:_,refs:P,elements:B,floatingStyles:q}),[s,_,P,B,q])}var ok=e=>{function t(n){return{}.hasOwnProperty.call(n,"current")}return{name:"arrow",options:e,fn(n){let{element:i,padding:r}=typeof e=="function"?e(n):e;return i&&t(i)?i.current!=null?wp({element:i.current,padding:r}).fn(n):{}:i?wp({element:i,padding:r}).fn(n):{}}}},hw=(e,t)=>{let n=nw(e);return{name:n.name,fn:n.fn,options:[e,t]}},pw=(e,t)=>{let n=iw(e);return{name:n.name,fn:n.fn,options:[e,t]}},fw=(e,t)=>({fn:ow(e).fn,options:[e,t]}),gw=(e,t)=>{let n=rw(e);return{name:n.name,fn:n.fn,options:[e,t]}},vw=(e,t)=>{let n=aw(e);return{name:n.name,fn:n.fn,options:[e,t]}};var bw=(e,t)=>{let n=sw(e);return{name:n.name,fn:n.fn,options:[e,t]}};var yw=(e,t)=>{let n=ok(e);return{name:n.name,fn:n.fn,options:[e,t]}};var Ew=I(O(),1);var Cp=I(A(),1),lk="Arrow",ww=Ew.forwardRef((e,t)=>{let{children:n,width:i=10,height:r=5,...a}=e;return(0,Cp.jsx)(Bt.svg,{...a,ref:t,width:i,height:r,viewBox:"0 0 30 10",preserveAspectRatio:"none",children:e.asChild?n:(0,Cp.jsx)("polygon",{points:"0,0 30,0 15,10"})})});ww.displayName=lk;var xw=ww;var Sw=I(O(),1);function Cw(e){let[t,n]=Sw.useState(void 0);return gn(()=>{if(e){n({width:e.offsetWidth,height:e.offsetHeight});let i=new ResizeObserver(r=>{if(!Array.isArray(r)||!r.length)return;let a=r[0],o,c;if("borderBoxSize"in a){let d=a.borderBoxSize,h=Array.isArray(d)?d[0]:d;o=h.inlineSize,c=h.blockSize}else o=e.offsetWidth,c=e.offsetHeight;n({width:o,height:c})});return i.observe(e,{box:"border-box"}),()=>i.unobserve(e)}else n(void 0)},[e]),t}var dr=I(A(),1);var Ip="Popper",[Iw,Tp]=Vc(Ip),[dk,Tw]=Iw(Ip),kw=e=>{let{__scopePopper:t,children:n}=e,[i,r]=sn.useState(null);return(0,dr.jsx)(dk,{scope:t,anchor:i,onAnchorChange:r,children:n})};kw.displayName=Ip;var Mw="PopperAnchor",Dw=sn.forwardRef((e,t)=>{let{__scopePopper:n,virtualRef:i,...r}=e,a=Tw(Mw,n),o=sn.useRef(null),c=rn(t,o);return sn.useEffect(()=>{a.onAnchorChange(i?.current||o.current)}),i?null:(0,dr.jsx)(Bt.div,{...r,ref:c})});Dw.displayName=Mw;var kp="PopperContent",[uk,mk]=Iw(kp),Lw=sn.forwardRef((e,t)=>{let{__scopePopper:n,side:i="bottom",sideOffset:r=0,align:a="center",alignOffset:o=0,arrowPadding:c=0,avoidCollisions:d=!0,collisionBoundary:h=[],collisionPadding:s=0,sticky:l="partial",hideWhenDetached:m=!1,updatePositionStrategy:u="optimized",onPlaced:p,...f}=e,g=Tw(kp,n),[v,E]=sn.useState(null),b=rn(t,Yt=>E(Yt)),[w,x]=sn.useState(null),S=Cw(w),C=S?.width??0,T=S?.height??0,L=i+(a!=="center"?"-"+a:""),M=typeof s=="number"?s:{top:0,right:0,bottom:0,left:0,...s},R=Array.isArray(h)?h:[h],z=R.length>0,_={padding:M,boundary:R.filter(pk),altBoundary:z},{refs:H,floatingStyles:P,placement:B,isPositioned:q,middlewareData:V}=mw({strategy:"fixed",placement:L,whileElementsMounted:(...Yt)=>Ep(...Yt,{animationFrame:u==="always"}),elements:{reference:g.anchor},middleware:[hw({mainAxis:r+T,alignmentAxis:o}),d&&pw({mainAxis:!0,crossAxis:!1,limiter:l==="partial"?fw():void 0,..._}),d&&gw({..._}),vw({..._,apply:({elements:Yt,rects:Ci,availableWidth:js,availableHeight:_t})=>{let{width:Ge,height:Nu}=Ci.reference,Pr=Yt.floating.style;Pr.setProperty("--radix-popper-available-width",`${js}px`),Pr.setProperty("--radix-popper-available-height",`${_t}px`),Pr.setProperty("--radix-popper-anchor-width",`${Ge}px`),Pr.setProperty("--radix-popper-anchor-height",`${Nu}px`)}}),w&&yw({element:w,padding:c}),fk({arrowWidth:C,arrowHeight:T}),m&&bw({strategy:"referenceHidden",..._})]}),[Y,ie]=Nw(B),re=an(p);gn(()=>{q&&re?.()},[q,re]);let ue=V.arrow?.x,ct=V.arrow?.y,Pt=V.arrow?.centerOffset!==0,[dn,Dn]=sn.useState();return gn(()=>{v&&Dn(window.getComputedStyle(v).zIndex)},[v]),(0,dr.jsx)("div",{ref:H.setFloating,"data-radix-popper-content-wrapper":"",style:{...P,transform:q?P.transform:"translate(0, -200%)",minWidth:"max-content",zIndex:dn,"--radix-popper-transform-origin":[V.transformOrigin?.x,V.transformOrigin?.y].join(" "),...V.hide?.referenceHidden&&{visibility:"hidden",pointerEvents:"none"}},dir:e.dir,children:(0,dr.jsx)(uk,{scope:n,placedSide:Y,onArrowChange:x,arrowX:ue,arrowY:ct,shouldHideArrow:Pt,children:(0,dr.jsx)(Bt.div,{"data-side":Y,"data-align":ie,...f,ref:b,style:{...f.style,animation:q?void 0:"none"}})})})});Lw.displayName=kp;var Rw="PopperArrow",hk={top:"bottom",right:"left",bottom:"top",left:"right"},Aw=sn.forwardRef(function(t,n){let{__scopePopper:i,...r}=t,a=mk(Rw,i),o=hk[a.placedSide];return(0,dr.jsx)("span",{ref:a.onArrowChange,style:{position:"absolute",left:a.arrowX,top:a.arrowY,[o]:0,transformOrigin:{top:"",right:"0 0",bottom:"center 0",left:"100% 0"}[a.placedSide],transform:{top:"translateY(100%)",right:"translateY(50%) rotate(90deg) translateX(-50%)",bottom:"rotate(180deg)",left:"translateY(50%) rotate(-90deg) translateX(50%)"}[a.placedSide],visibility:a.shouldHideArrow?"hidden":void 0},children:(0,dr.jsx)(xw,{...r,ref:n,style:{...r.style,display:"block"}})})});Aw.displayName=Rw;function pk(e){return e!==null}var fk=e=>({name:"transformOrigin",options:e,fn(t){let{placement:n,rects:i,middlewareData:r}=t,o=r.arrow?.centerOffset!==0,c=o?0:e.arrowWidth,d=o?0:e.arrowHeight,[h,s]=Nw(n),l={start:"0%",center:"50%",end:"100%"}[s],m=(r.arrow?.x??0)+c/2,u=(r.arrow?.y??0)+d/2,p="",f="";return h==="bottom"?(p=o?l:`${m}px`,f=`${-d}px`):h==="top"?(p=o?l:`${m}px`,f=`${i.floating.height+d}px`):h==="right"?(p=`${-d}px`,f=o?l:`${u}px`):h==="left"&&(p=`${i.floating.width+d}px`,f=o?l:`${u}px`),{data:{x:p,y:f}}}});function Nw(e){let[t,n="center"]=e.split("-");return[t,n]}var Pw=kw,Mp=Dw,_w=Lw,Ow=Aw;var rd=I(O(),1),Fw=I(Ln(),1);var $w=I(A(),1),vk="Portal",Dp=rd.forwardRef((e,t)=>{let{container:n,...i}=e,[r,a]=rd.useState(!1);gn(()=>a(!0),[]);let o=n||r&&globalThis?.document?.body;return o?Fw.default.createPortal((0,$w.jsx)(Bt.div,{...i,ref:t}),o):null});Dp.displayName=vk;var Kt=I(O(),1);var Bw=I(O(),1);function bk(e,t){return Bw.useReducer((n,i)=>t[n][i]??n,e)}var sd=e=>{let{present:t,children:n}=e,i=yk(t),r=typeof n=="function"?n({present:i.isPresent}):Kt.Children.only(n),a=rn(i.ref,Ek(r));return typeof n=="function"||i.isPresent?Kt.cloneElement(r,{ref:a}):null};sd.displayName="Presence";function yk(e){let[t,n]=Kt.useState(),i=Kt.useRef({}),r=Kt.useRef(e),a=Kt.useRef("none"),o=e?"mounted":"unmounted",[c,d]=bk(o,{mounted:{UNMOUNT:"unmounted",ANIMATION_OUT:"unmountSuspended"},unmountSuspended:{MOUNT:"mounted",ANIMATION_END:"unmounted"},unmounted:{MOUNT:"mounted"}});return Kt.useEffect(()=>{let h=ad(i.current);a.current=c==="mounted"?h:"none"},[c]),gn(()=>{let h=i.current,s=r.current;if(s!==e){let m=a.current,u=ad(h);e?d("MOUNT"):u==="none"||h?.display==="none"?d("UNMOUNT"):d(s&&m!==u?"ANIMATION_OUT":"UNMOUNT"),r.current=e}},[e,d]),gn(()=>{if(t){let h,s=t.ownerDocument.defaultView??window,l=u=>{let f=ad(i.current).includes(u.animationName);if(u.target===t&&f&&(d("ANIMATION_END"),!r.current)){let g=t.style.animationFillMode;t.style.animationFillMode="forwards",h=s.setTimeout(()=>{t.style.animationFillMode==="forwards"&&(t.style.animationFillMode=g)})}},m=u=>{u.target===t&&(a.current=ad(i.current))};return t.addEventListener("animationstart",m),t.addEventListener("animationcancel",l),t.addEventListener("animationend",l),()=>{s.clearTimeout(h),t.removeEventListener("animationstart",m),t.removeEventListener("animationcancel",l),t.removeEventListener("animationend",l)}}else d("ANIMATION_END")},[t,d]),{isPresent:["mounted","unmountSuspended"].includes(c),ref:Kt.useCallback(h=>{h&&(i.current=getComputedStyle(h)),n(h)},[])}}function ad(e){return e?.animationName||"none"}function Ek(e){let t=Object.getOwnPropertyDescriptor(e.props,"ref")?.get,n=t&&"isReactWarning"in t&&t.isReactWarning;return n?e.ref:(t=Object.getOwnPropertyDescriptor(e,"ref")?.get,n=t&&"isReactWarning"in t&&t.isReactWarning,n?e.props.ref:e.props.ref||e.ref)}var ur=I(O(),1);function zw({prop:e,defaultProp:t,onChange:n=()=>{}}){let[i,r]=wk({defaultProp:t,onChange:n}),a=e!==void 0,o=a?e:i,c=an(n),d=ur.useCallback(h=>{if(a){let l=typeof h=="function"?h(e):h;l!==e&&c(l)}else r(h)},[a,e,r,c]);return[o,d]}function wk({defaultProp:e,onChange:t}){let n=ur.useState(e),[i]=n,r=ur.useRef(i),a=an(t);return ur.useEffect(()=>{r.current!==i&&(a(i),r.current=i)},[i,r,a]),n}var xk=function(e){if(typeof document>"u")return null;var t=Array.isArray(e)?e[0]:e;return t.ownerDocument.body},is=new WeakMap,od=new WeakMap,ld={},Lp=0,jw=function(e){return e&&(e.host||jw(e.parentNode))},Sk=function(e,t){return t.map(function(n){if(e.contains(n))return n;var i=jw(n);return i&&e.contains(i)?i:(console.error("aria-hidden",n,"in not contained inside",e,". Doing nothing"),null)}).filter(function(n){return!!n})},Ck=function(e,t,n,i){var r=Sk(t,Array.isArray(e)?e:[e]);ld[n]||(ld[n]=new WeakMap);var a=ld[n],o=[],c=new Set,d=new Set(r),h=function(l){!l||c.has(l)||(c.add(l),h(l.parentNode))};r.forEach(h);var s=function(l){!l||d.has(l)||Array.prototype.forEach.call(l.children,function(m){if(c.has(m))s(m);else try{var u=m.getAttribute(i),p=u!==null&&u!=="false",f=(is.get(m)||0)+1,g=(a.get(m)||0)+1;is.set(m,f),a.set(m,g),o.push(m),f===1&&p&&od.set(m,!0),g===1&&m.setAttribute(n,"true"),p||m.setAttribute(i,"true")}catch(v){console.error("aria-hidden: cannot operate on ",m,v)}})};return s(t),c.clear(),Lp++,function(){o.forEach(function(l){var m=is.get(l)-1,u=a.get(l)-1;is.set(l,m),a.set(l,u),m||(od.has(l)||l.removeAttribute(i),od.delete(l)),u||l.removeAttribute(n)}),Lp--,Lp||(is=new WeakMap,is=new WeakMap,od=new WeakMap,ld={})}},Uw=function(e,t,n){n===void 0&&(n="data-aria-hidden");var i=Array.from(Array.isArray(e)?e:[e]),r=t||xk(e);return r?(i.push.apply(i,Array.from(r.querySelectorAll("[aria-live], script"))),Ck(i,r,n,"aria-hidden")):function(){return null}};var Zt=function(){return Zt=Object.assign||function(t){for(var n,i=1,r=arguments.length;i<r;i++){n=arguments[i];for(var a in n)Object.prototype.hasOwnProperty.call(n,a)&&(t[a]=n[a])}return t},Zt.apply(this,arguments)};function cd(e,t){var n={};for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&t.indexOf(i)<0&&(n[i]=e[i]);if(e!=null&&typeof Object.getOwnPropertySymbols=="function")for(var r=0,i=Object.getOwnPropertySymbols(e);r<i.length;r++)t.indexOf(i[r])<0&&Object.prototype.propertyIsEnumerable.call(e,i[r])&&(n[i[r]]=e[i[r]]);return n}function Hw(e,t,n){if(n||arguments.length===2)for(var i=0,r=t.length,a;i<r;i++)(a||!(i in t))&&(a||(a=Array.prototype.slice.call(t,0,i)),a[i]=t[i]);return e.concat(a||Array.prototype.slice.call(t))}var pd=I(O());var St=I(O());var sa="right-scroll-bar-position",oa="width-before-scroll-bar",Rp="with-scroll-bars-hidden",Ap="--removed-body-scroll-bar-size";function dd(e,t){return typeof e=="function"?e(t):e&&(e.current=t),e}var Ww=I(O());function Vw(e,t){var n=(0,Ww.useState)(function(){return{value:e,callback:t,facade:{get current(){return n.value},set current(i){var r=n.value;r!==i&&(n.value=i,n.callback(i,r))}}}})[0];return n.callback=t,n.facade}var ud=I(O());var Ik=typeof window<"u"?ud.useLayoutEffect:ud.useEffect,Yw=new WeakMap;function Np(e,t){var n=Vw(t||null,function(i){return e.forEach(function(r){return dd(r,i)})});return Ik(function(){var i=Yw.get(n);if(i){var r=new Set(i),a=new Set(e),o=n.current;r.forEach(function(c){a.has(c)||dd(c,null)}),a.forEach(function(c){r.has(c)||dd(c,o)})}Yw.set(n,e)},[e]),n}function Tk(e){return e}function kk(e,t){t===void 0&&(t=Tk);var n=[],i=!1,r={read:function(){if(i)throw new Error("Sidecar: could not `read` from an `assigned` medium. `read` could be used only with `useMedium`.");return n.length?n[n.length-1]:e},useMedium:function(a){var o=t(a,i);return n.push(o),function(){n=n.filter(function(c){return c!==o})}},assignSyncMedium:function(a){for(i=!0;n.length;){var o=n;n=[],o.forEach(a)}n={push:function(c){return a(c)},filter:function(){return n}}},assignMedium:function(a){i=!0;var o=[];if(n.length){var c=n;n=[],c.forEach(a),o=n}var d=function(){var s=o;o=[],s.forEach(a)},h=function(){return Promise.resolve().then(d)};h(),n={push:function(s){o.push(s),h()},filter:function(s){return o=o.filter(s),n}}}};return r}function Pp(e){e===void 0&&(e={});var t=kk(null);return t.options=Zt({async:!0,ssr:!1},e),t}var Gw=I(O()),Kw=function(e){var t=e.sideCar,n=cd(e,["sideCar"]);if(!t)throw new Error("Sidecar: please provide `sideCar` property to import the right car");var i=t.read();if(!i)throw new Error("Sidecar medium not found");return Gw.createElement(i,Zt({},n))};Kw.isSideCarExport=!0;function _p(e,t){return e.useMedium(t),Kw}var md=Pp();var Op=function(){},jo=St.forwardRef(function(e,t){var n=St.useRef(null),i=St.useState({onScrollCapture:Op,onWheelCapture:Op,onTouchMoveCapture:Op}),r=i[0],a=i[1],o=e.forwardProps,c=e.children,d=e.className,h=e.removeScrollBar,s=e.enabled,l=e.shards,m=e.sideCar,u=e.noRelative,p=e.noIsolation,f=e.inert,g=e.allowPinchZoom,v=e.as,E=v===void 0?"div":v,b=e.gapMode,w=cd(e,["forwardProps","children","className","removeScrollBar","enabled","shards","sideCar","noRelative","noIsolation","inert","allowPinchZoom","as","gapMode"]),x=m,S=Np([n,t]),C=Zt(Zt({},w),r);return St.createElement(St.Fragment,null,s&&St.createElement(x,{sideCar:md,removeScrollBar:h,shards:l,noRelative:u,noIsolation:p,inert:f,setCallbacks:a,allowPinchZoom:!!g,lockRef:n,gapMode:b}),o?St.cloneElement(St.Children.only(c),Zt(Zt({},C),{ref:S})):St.createElement(E,Zt({},C,{className:d,ref:S}),c))});jo.defaultProps={enabled:!0,removeScrollBar:!0,inert:!1};jo.classNames={fullWidth:oa,zeroRight:sa};var Re=I(O());var as=I(O());var qw=I(O());var Zw;var Xw=function(){if(Zw)return Zw;if(typeof __webpack_nonce__<"u")return __webpack_nonce__};function Mk(){if(!document)return null;var e=document.createElement("style");e.type="text/css";var t=Xw();return t&&e.setAttribute("nonce",t),e}function Dk(e,t){e.styleSheet?e.styleSheet.cssText=t:e.appendChild(document.createTextNode(t))}function Lk(e){var t=document.head||document.getElementsByTagName("head")[0];t.appendChild(e)}var Fp=function(){var e=0,t=null;return{add:function(n){e==0&&(t=Mk())&&(Dk(t,n),Lk(t)),e++},remove:function(){e--,!e&&t&&(t.parentNode&&t.parentNode.removeChild(t),t=null)}}};var $p=function(){var e=Fp();return function(t,n){qw.useEffect(function(){return e.add(t),function(){e.remove()}},[t&&n])}};var Uo=function(){var e=$p(),t=function(n){var i=n.styles,r=n.dynamic;return e(i,r),null};return t};var Rk={left:0,top:0,right:0,gap:0},Bp=function(e){return parseInt(e||"",10)||0},Ak=function(e){var t=window.getComputedStyle(document.body),n=t[e==="padding"?"paddingLeft":"marginLeft"],i=t[e==="padding"?"paddingTop":"marginTop"],r=t[e==="padding"?"paddingRight":"marginRight"];return[Bp(n),Bp(i),Bp(r)]},zp=function(e){if(e===void 0&&(e="margin"),typeof window>"u")return Rk;var t=Ak(e),n=document.documentElement.clientWidth,i=window.innerWidth;return{left:t[0],top:t[1],right:t[2],gap:Math.max(0,i-n+t[2]-t[0])}};var Nk=Uo(),rs="data-scroll-locked",Pk=function(e,t,n,i){var r=e.left,a=e.top,o=e.right,c=e.gap;return n===void 0&&(n="margin"),`
2
+ .`.concat(Rp,` {
3
+ overflow: hidden `).concat(i,`;
4
+ padding-right: `).concat(c,"px ").concat(i,`;
5
+ }
6
+ body[`).concat(rs,`] {
7
+ overflow: hidden `).concat(i,`;
8
+ overscroll-behavior: contain;
9
+ `).concat([t&&"position: relative ".concat(i,";"),n==="margin"&&`
10
+ padding-left: `.concat(r,`px;
11
+ padding-top: `).concat(a,`px;
12
+ padding-right: `).concat(o,`px;
13
+ margin-left:0;
14
+ margin-top:0;
15
+ margin-right: `).concat(c,"px ").concat(i,`;
16
+ `),n==="padding"&&"padding-right: ".concat(c,"px ").concat(i,";")].filter(Boolean).join(""),`
17
+ }
18
+
19
+ .`).concat(sa,` {
20
+ right: `).concat(c,"px ").concat(i,`;
21
+ }
22
+
23
+ .`).concat(oa,` {
24
+ margin-right: `).concat(c,"px ").concat(i,`;
25
+ }
26
+
27
+ .`).concat(sa," .").concat(sa,` {
28
+ right: 0 `).concat(i,`;
29
+ }
30
+
31
+ .`).concat(oa," .").concat(oa,` {
32
+ margin-right: 0 `).concat(i,`;
33
+ }
34
+
35
+ body[`).concat(rs,`] {
36
+ `).concat(Ap,": ").concat(c,`px;
37
+ }
38
+ `)},Qw=function(){var e=parseInt(document.body.getAttribute(rs)||"0",10);return isFinite(e)?e:0},_k=function(){as.useEffect(function(){return document.body.setAttribute(rs,(Qw()+1).toString()),function(){var e=Qw()-1;e<=0?document.body.removeAttribute(rs):document.body.setAttribute(rs,e.toString())}},[])},jp=function(e){var t=e.noRelative,n=e.noImportant,i=e.gapMode,r=i===void 0?"margin":i;_k();var a=as.useMemo(function(){return zp(r)},[r]);return as.createElement(Nk,{styles:Pk(a,!t,r,n?"":"!important")})};var Up=!1;if(typeof window<"u")try{Ho=Object.defineProperty({},"passive",{get:function(){return Up=!0,!0}}),window.addEventListener("test",Ho,Ho),window.removeEventListener("test",Ho,Ho)}catch{Up=!1}var Ho,la=Up?{passive:!1}:!1;var Ok=function(e){return e.tagName==="TEXTAREA"},Jw=function(e,t){if(!(e instanceof Element))return!1;var n=window.getComputedStyle(e);return n[t]!=="hidden"&&!(n.overflowY===n.overflowX&&!Ok(e)&&n[t]==="visible")},Fk=function(e){return Jw(e,"overflowY")},$k=function(e){return Jw(e,"overflowX")},Hp=function(e,t){var n=t.ownerDocument,i=t;do{typeof ShadowRoot<"u"&&i instanceof ShadowRoot&&(i=i.host);var r=e2(e,i);if(r){var a=t2(e,i),o=a[1],c=a[2];if(o>c)return!0}i=i.parentNode}while(i&&i!==n.body);return!1},Bk=function(e){var t=e.scrollTop,n=e.scrollHeight,i=e.clientHeight;return[t,n,i]},zk=function(e){var t=e.scrollLeft,n=e.scrollWidth,i=e.clientWidth;return[t,n,i]},e2=function(e,t){return e==="v"?Fk(t):$k(t)},t2=function(e,t){return e==="v"?Bk(t):zk(t)},jk=function(e,t){return e==="h"&&t==="rtl"?-1:1},n2=function(e,t,n,i,r){var a=jk(e,window.getComputedStyle(t).direction),o=a*i,c=n.target,d=t.contains(c),h=!1,s=o>0,l=0,m=0;do{if(!c)break;var u=t2(e,c),p=u[0],f=u[1],g=u[2],v=f-g-a*p;(p||v)&&e2(e,c)&&(l+=v,m+=p);var E=c.parentNode;c=E&&E.nodeType===Node.DOCUMENT_FRAGMENT_NODE?E.host:E}while(!d&&c!==document.body||d&&(t.contains(c)||t===c));return(s&&(r&&Math.abs(l)<1||!r&&o>l)||!s&&(r&&Math.abs(m)<1||!r&&-o>m))&&(h=!0),h};var hd=function(e){return"changedTouches"in e?[e.changedTouches[0].clientX,e.changedTouches[0].clientY]:[0,0]},i2=function(e){return[e.deltaX,e.deltaY]},r2=function(e){return e&&"current"in e?e.current:e},Uk=function(e,t){return e[0]===t[0]&&e[1]===t[1]},Hk=function(e){return`
39
+ .block-interactivity-`.concat(e,` {pointer-events: none;}
40
+ .allow-interactivity-`).concat(e,` {pointer-events: all;}
41
+ `)},Wk=0,ss=[];function a2(e){var t=Re.useRef([]),n=Re.useRef([0,0]),i=Re.useRef(),r=Re.useState(Wk++)[0],a=Re.useState(Uo)[0],o=Re.useRef(e);Re.useEffect(function(){o.current=e},[e]),Re.useEffect(function(){if(e.inert){document.body.classList.add("block-interactivity-".concat(r));var f=Hw([e.lockRef.current],(e.shards||[]).map(r2),!0).filter(Boolean);return f.forEach(function(g){return g.classList.add("allow-interactivity-".concat(r))}),function(){document.body.classList.remove("block-interactivity-".concat(r)),f.forEach(function(g){return g.classList.remove("allow-interactivity-".concat(r))})}}},[e.inert,e.lockRef.current,e.shards]);var c=Re.useCallback(function(f,g){if("touches"in f&&f.touches.length===2||f.type==="wheel"&&f.ctrlKey)return!o.current.allowPinchZoom;var v=hd(f),E=n.current,b="deltaX"in f?f.deltaX:E[0]-v[0],w="deltaY"in f?f.deltaY:E[1]-v[1],x,S=f.target,C=Math.abs(b)>Math.abs(w)?"h":"v";if("touches"in f&&C==="h"&&S.type==="range")return!1;var T=window.getSelection(),L=T&&T.anchorNode,M=L?L===S||L.contains(S):!1;if(M)return!1;var R=Hp(C,S);if(!R)return!0;if(R?x=C:(x=C==="v"?"h":"v",R=Hp(C,S)),!R)return!1;if(!i.current&&"changedTouches"in f&&(b||w)&&(i.current=x),!x)return!0;var z=i.current||x;return n2(z,g,f,z==="h"?b:w,!0)},[]),d=Re.useCallback(function(f){var g=f;if(!(!ss.length||ss[ss.length-1]!==a)){var v="deltaY"in g?i2(g):hd(g),E=t.current.filter(function(x){return x.name===g.type&&(x.target===g.target||g.target===x.shadowParent)&&Uk(x.delta,v)})[0];if(E&&E.should){g.cancelable&&g.preventDefault();return}if(!E){var b=(o.current.shards||[]).map(r2).filter(Boolean).filter(function(x){return x.contains(g.target)}),w=b.length>0?c(g,b[0]):!o.current.noIsolation;w&&g.cancelable&&g.preventDefault()}}},[]),h=Re.useCallback(function(f,g,v,E){var b={name:f,delta:g,target:v,should:E,shadowParent:Vk(v)};t.current.push(b),setTimeout(function(){t.current=t.current.filter(function(w){return w!==b})},1)},[]),s=Re.useCallback(function(f){n.current=hd(f),i.current=void 0},[]),l=Re.useCallback(function(f){h(f.type,i2(f),f.target,c(f,e.lockRef.current))},[]),m=Re.useCallback(function(f){h(f.type,hd(f),f.target,c(f,e.lockRef.current))},[]);Re.useEffect(function(){return ss.push(a),e.setCallbacks({onScrollCapture:l,onWheelCapture:l,onTouchMoveCapture:m}),document.addEventListener("wheel",d,la),document.addEventListener("touchmove",d,la),document.addEventListener("touchstart",s,la),function(){ss=ss.filter(function(f){return f!==a}),document.removeEventListener("wheel",d,la),document.removeEventListener("touchmove",d,la),document.removeEventListener("touchstart",s,la)}},[]);var u=e.removeScrollBar,p=e.inert;return Re.createElement(Re.Fragment,null,p?Re.createElement(a,{styles:Hk(r)}):null,u?Re.createElement(jp,{noRelative:e.noRelative,gapMode:e.gapMode}):null)}function Vk(e){for(var t=null;e!==null;)e instanceof ShadowRoot&&(t=e.host,e=e.host),e=e.parentNode;return t}var s2=_p(md,a2);var o2=pd.forwardRef(function(e,t){return pd.createElement(jo,Zt({},e,{ref:t,sideCar:s2}))});o2.classNames=jo.classNames;var Wp=o2;var qe=I(A(),1),Vp="Popover",[l2,R7]=Vc(Vp,[Tp]),Wo=Tp(),[Yk,mr]=l2(Vp),c2=e=>{let{__scopePopover:t,children:n,open:i,defaultOpen:r,onOpenChange:a,modal:o=!1}=e,c=Wo(t),d=Oe.useRef(null),[h,s]=Oe.useState(!1),[l=!1,m]=zw({prop:i,defaultProp:r,onChange:a});return(0,qe.jsx)(Pw,{...c,children:(0,qe.jsx)(Yk,{scope:t,contentId:SE(),triggerRef:d,open:l,onOpenChange:m,onOpenToggle:Oe.useCallback(()=>m(u=>!u),[m]),hasCustomAnchor:h,onCustomAnchorAdd:Oe.useCallback(()=>s(!0),[]),onCustomAnchorRemove:Oe.useCallback(()=>s(!1),[]),modal:o,children:n})})};c2.displayName=Vp;var d2="PopoverAnchor",Gk=Oe.forwardRef((e,t)=>{let{__scopePopover:n,...i}=e,r=mr(d2,n),a=Wo(n),{onCustomAnchorAdd:o,onCustomAnchorRemove:c}=r;return Oe.useEffect(()=>(o(),()=>c()),[o,c]),(0,qe.jsx)(Mp,{...a,...i,ref:t})});Gk.displayName=d2;var u2="PopoverTrigger",m2=Oe.forwardRef((e,t)=>{let{__scopePopover:n,...i}=e,r=mr(u2,n),a=Wo(n),o=rn(t,r.triggerRef),c=(0,qe.jsx)(Bt.button,{type:"button","aria-haspopup":"dialog","aria-expanded":r.open,"aria-controls":r.contentId,"data-state":b2(r.open),...i,ref:o,onClick:li(e.onClick,r.onOpenToggle)});return r.hasCustomAnchor?c:(0,qe.jsx)(Mp,{asChild:!0,...a,children:c})});m2.displayName=u2;var Yp="PopoverPortal",[Kk,Zk]=l2(Yp,{forceMount:void 0}),h2=e=>{let{__scopePopover:t,forceMount:n,children:i,container:r}=e,a=mr(Yp,t);return(0,qe.jsx)(Kk,{scope:t,forceMount:n,children:(0,qe.jsx)(sd,{present:n||a.open,children:(0,qe.jsx)(Dp,{asChild:!0,container:r,children:i})})})};h2.displayName=Yp;var os="PopoverContent",p2=Oe.forwardRef((e,t)=>{let n=Zk(os,e.__scopePopover),{forceMount:i=n.forceMount,...r}=e,a=mr(os,e.__scopePopover);return(0,qe.jsx)(sd,{present:i||a.open,children:a.modal?(0,qe.jsx)(Xk,{...r,ref:t}):(0,qe.jsx)(qk,{...r,ref:t})})});p2.displayName=os;var Xk=Oe.forwardRef((e,t)=>{let n=mr(os,e.__scopePopover),i=Oe.useRef(null),r=rn(t,i),a=Oe.useRef(!1);return Oe.useEffect(()=>{let o=i.current;if(o)return Uw(o)},[]),(0,qe.jsx)(Wp,{as:Po,allowPinchZoom:!0,children:(0,qe.jsx)(f2,{...e,ref:r,trapFocus:n.open,disableOutsidePointerEvents:!0,onCloseAutoFocus:li(e.onCloseAutoFocus,o=>{o.preventDefault(),a.current||n.triggerRef.current?.focus()}),onPointerDownOutside:li(e.onPointerDownOutside,o=>{let c=o.detail.originalEvent,d=c.button===0&&c.ctrlKey===!0,h=c.button===2||d;a.current=h},{checkForDefaultPrevented:!1}),onFocusOutside:li(e.onFocusOutside,o=>o.preventDefault(),{checkForDefaultPrevented:!1})})})}),qk=Oe.forwardRef((e,t)=>{let n=mr(os,e.__scopePopover),i=Oe.useRef(!1),r=Oe.useRef(!1);return(0,qe.jsx)(f2,{...e,ref:t,trapFocus:!1,disableOutsidePointerEvents:!1,onCloseAutoFocus:a=>{e.onCloseAutoFocus?.(a),a.defaultPrevented||(i.current||n.triggerRef.current?.focus(),a.preventDefault()),i.current=!1,r.current=!1},onInteractOutside:a=>{e.onInteractOutside?.(a),a.defaultPrevented||(i.current=!0,a.detail.originalEvent.type==="pointerdown"&&(r.current=!0));let o=a.target;n.triggerRef.current?.contains(o)&&a.preventDefault(),a.detail.originalEvent.type==="focusin"&&r.current&&a.preventDefault()}})}),f2=Oe.forwardRef((e,t)=>{let{__scopePopover:n,trapFocus:i,onOpenAutoFocus:r,onCloseAutoFocus:a,disableOutsidePointerEvents:o,onEscapeKeyDown:c,onPointerDownOutside:d,onFocusOutside:h,onInteractOutside:s,...l}=e,m=mr(os,n),u=Wo(n);return fE(),(0,qe.jsx)(pp,{asChild:!0,loop:!0,trapped:i,onMountAutoFocus:r,onUnmountAutoFocus:a,children:(0,qe.jsx)(dp,{asChild:!0,disableOutsidePointerEvents:o,onInteractOutside:s,onEscapeKeyDown:c,onPointerDownOutside:d,onFocusOutside:h,onDismiss:()=>m.onOpenChange(!1),children:(0,qe.jsx)(_w,{"data-state":b2(m.open),role:"dialog",id:m.contentId,...u,...l,ref:t,style:{...l.style,"--radix-popover-content-transform-origin":"var(--radix-popper-transform-origin)","--radix-popover-content-available-width":"var(--radix-popper-available-width)","--radix-popover-content-available-height":"var(--radix-popper-available-height)","--radix-popover-trigger-width":"var(--radix-popper-anchor-width)","--radix-popover-trigger-height":"var(--radix-popper-anchor-height)"}})})})}),g2="PopoverClose",Qk=Oe.forwardRef((e,t)=>{let{__scopePopover:n,...i}=e,r=mr(g2,n);return(0,qe.jsx)(Bt.button,{type:"button",...i,ref:t,onClick:li(e.onClick,()=>r.onOpenChange(!1))})});Qk.displayName=g2;var Jk="PopoverArrow",v2=Oe.forwardRef((e,t)=>{let{__scopePopover:n,...i}=e,r=Wo(n);return(0,qe.jsx)(Ow,{...r,...i,ref:t})});v2.displayName=Jk;function b2(e){return e?"open":"closed"}var hr=c2;var pr=m2,y2=h2,ls=p2;var fd=v2;var jS=I(O(),1),Gn=I(O(),1),iu=I(O(),1),US=I(Ln(),1),Jf=I(O(),1),ul=I(O(),1),VS=I(O(),1),YS=I(O(),1),GS=I(A(),1);var vi=I(A(),1),KS=I(O(),1);var ZS=I(O(),1);var XS=I(A(),1),Is=I(A(),1),Rt=I(A(),1),Ca=I(O(),1);var QS=I(A(),1),Dr=I(A(),1),xn=I(A(),1),_s=I(O(),1);var st=I(O(),1);var JS=I(O(),1),ou=I(A(),1);var tC=I(O(),1),If=I(A(),1),lu=I(A(),1),cu=I(O(),1),du=I(O(),1),Ir=I(A(),1),Hd=I(A(),1),$i=I(A(),1);var lC=I(O(),1),Od=I(A(),1),xr=I(A(),1),ml=I(O(),1),fa=I(A(),1),Q=I(A(),1),uC=I(O(),1),mC=I(A(),1),Da=I(A(),1),pC=I(A(),1),fC=I(O(),1),hl=I(A(),1),Es=I(A(),1);var pl=I(A(),1),Qt=I(A(),1),sg=I(A(),1),ga=I(A(),1),EC=I(O(),1);var Mf=I(A(),1);var kt=I(A(),1),La=I(A(),1),lg=I(A(),1),kn=I(O(),1);var fi=I(A(),1),TC=I(A(),1),Sn=I(O(),1);var fu=I(O(),1),gu=I(O(),1),MC=I(Ln(),1);var DC=I(O(),1),fl=I(A(),1),vt=I(O(),1),LC=I(O(),1),vu=I(O(),1),Dt=I(O(),1),dg=I(O(),1);var ug=I(A(),1),PC=I(A(),1);var bu=I(A(),1),Ts=I(O(),1),vl=I(O(),1),Pf=I(Ln(),1);var ma=I(A(),1),As=I(A(),1),ln=I(O(),1);var J=I(A(),1);var FC=I(A(),1),BC=I(A(),1);var yu=I(O(),1),rl=I(A(),1),_f=I(A(),1),HC=I(A(),1),bl=I(O(),1),Eu=I(A(),1);var Je=I(A(),1),Fs=I(O(),1);var Ar=I(O(),1),ba=I(A(),1),wu=I(O(),1),ya=I(A(),1),WC=I(O(),1),VC=I(Fl(),1),Ae=I(A(),1),yn=I(A(),1),wr=I(A(),1),wi=I(O(),1);var YC=I(A(),1),Ea=I(A(),1);var GC=I(x2(),1),KC=I(O(),1);var xu=I(O(),1);var Vo=I(O());var S2=e=>{let t,n=new Set,i=(s,l)=>{let m=typeof s=="function"?s(t):s;if(!Object.is(m,t)){let u=t;t=l??(typeof m!="object"||m===null)?m:Object.assign({},t,m),n.forEach(p=>p(t,u))}},r=()=>t,d={setState:i,getState:r,getInitialState:()=>h,subscribe:s=>(n.add(s),()=>n.delete(s)),destroy:()=>{(import.meta.env?import.meta.env.MODE:void 0)!=="production"&&console.warn("[DEPRECATED] The `destroy` method will be unsupported in a future version. Instead use unsubscribe function returned by subscribe. Everything will be garbage-collected if store is garbage-collected."),n.clear()}},h=t=e(i,r,d);return d},C2=e=>e?S2(e):S2;var _2=I(O(),1),O2=I(A2(),1),{useDebugValue:v5}=_2.default,{useSyncExternalStoreWithSelector:b5}=O2.default,N2=!1,y5=e=>e;function E5(e,t=y5,n){(import.meta.env?import.meta.env.MODE:void 0)!=="production"&&n&&!N2&&(console.warn("[DEPRECATED] Use `createWithEqualityFn` instead of `create` or use `useStoreWithEqualityFn` instead of `useStore`. They can be imported from 'zustand/traditional'. https://github.com/pmndrs/zustand/discussions/1937"),N2=!0);let i=b5(e.subscribe,e.getState,e.getServerState||e.getInitialState,t,n);return v5(i),i}var P2=e=>{(import.meta.env?import.meta.env.MODE:void 0)!=="production"&&typeof e!="function"&&console.warn("[DEPRECATED] Passing a vanilla store will be unsupported in a future version. Instead use `import { useStore } from 'zustand'`.");let t=typeof e=="function"?C2(e):e,n=(i,r)=>E5(t,i,r);return Object.assign(n,t),n},F2=e=>e?P2(e):P2;var $2,B2,z2=typeof window<"u"&&(($2=window.document)!=null&&$2.createElement||((B2=window.navigator)==null?void 0:B2.product)==="ReactNative")?Vo.default.useLayoutEffect:Vo.default.useEffect;function $n(){let e=F2(t=>({current:new Array,version:0,set:t}));return{In:({children:t})=>{let n=e(r=>r.set),i=e(r=>r.version);return z2(()=>{n(r=>({version:r.version+1}))},[]),z2(()=>(n(({current:r})=>({current:[...r,t]})),()=>n(({current:r})=>({current:r.filter(a=>a!==t)}))),[t,i]),null},Out:()=>{let t=e(n=>n.current);return Vo.default.createElement(Vo.default.Fragment,null,t)}}}var ee=I(A(),1),e3=I(O(),1),Su=I(A(),1),Ie=I(A(),1),r3=I(A(),1),s3=I(A(),1),Iu=I(O(),1),pg=I(A(),1),c3=I(A(),1);var Lr=I(O(),1),d3=I(Ln(),1),u3=I(A(),1),m3=I(O(),1),Oi=I(A(),1);var h3=I(O(),1),Tu=I(O(),1),ks=I(A(),1),qt=I(O(),1);var yl=I(A(),1);var Of=I(A(),1),ku=I(O(),1);var ha=I(A(),1),$s=I(O(),1),de=I(A(),1);var f3=I(A(),1),Bf=I(A(),1);var El=I(A(),1),ka=I(A(),1);var xl=I(A(),1);var x3=I(A(),1),be=I(A(),1);var Nr=I(O(),1),Tr=I(A(),1),C3=I(O(),1),j=I(A(),1),pa=I(O(),1);var gt=I(A(),1),T3=I(O(),1);var k3=I(A(),1),ot=I(A(),1);var M3=I(A(),1),jt=I(A(),1),tt=I(O(),1),L3=I(O(),1);var A3=I(O(),1),wa=I(A(),1);var xa=I(A(),1);function pt(){return pt=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var i in n)({}).hasOwnProperty.call(n,i)&&(e[i]=n[i])}return e},pt.apply(null,arguments)}var ft=I(O());function Bn(e,t,{checkForDefaultPrevented:n=!0}={}){return function(r){if(e?.(r),n===!1||!r.defaultPrevented)return t?.(r)}}var zn=I(O());function us(e,t=[]){let n=[];function i(a,o){let c=(0,zn.createContext)(o),d=n.length;n=[...n,o];function h(l){let{scope:m,children:u,...p}=l,f=m?.[e][d]||c,g=(0,zn.useMemo)(()=>p,Object.values(p));return(0,zn.createElement)(f.Provider,{value:g},u)}function s(l,m){let u=m?.[e][d]||c,p=(0,zn.useContext)(u);if(p)return p;if(o!==void 0)return o;throw new Error(`\`${l}\` must be used within \`${a}\``)}return h.displayName=a+"Provider",[h,s]}let r=()=>{let a=n.map(o=>(0,zn.createContext)(o));return function(c){let d=c?.[e]||a;return(0,zn.useMemo)(()=>({[`__scope${e}`]:{...c,[e]:d}}),[c,d])}};return r.scopeName=e,[i,w5(r,...t)]}function w5(...e){let t=e[0];if(e.length===1)return t;let n=()=>{let i=e.map(r=>({useScope:r(),scopeName:r.scopeName}));return function(a){let o=i.reduce((c,{useScope:d,scopeName:h})=>{let l=d(a)[`__scope${h}`];return{...c,...l}},{});return(0,zn.useMemo)(()=>({[`__scope${t.scopeName}`]:o}),[o])}};return n.scopeName=t.scopeName,n}var Te=I(O());var jn=I(O());var j2=I(O());function x5(e,t){typeof e=="function"?e(t):e!=null&&(e.current=t)}function Kp(...e){return t=>e.forEach(n=>x5(n,t))}function ca(...e){return(0,j2.useCallback)(Kp(...e),e)}var Be=I(O());var ms=(0,Be.forwardRef)((e,t)=>{let{children:n,...i}=e,r=Be.Children.toArray(n),a=r.find(C5);if(a){let o=a.props.children,c=r.map(d=>d===a?Be.Children.count(o)>1?Be.Children.only(null):(0,Be.isValidElement)(o)?o.props.children:null:d);return(0,Be.createElement)(Zp,pt({},i,{ref:t}),(0,Be.isValidElement)(o)?(0,Be.cloneElement)(o,void 0,c):null)}return(0,Be.createElement)(Zp,pt({},i,{ref:t}),n)});ms.displayName="Slot";var Zp=(0,Be.forwardRef)((e,t)=>{let{children:n,...i}=e;return(0,Be.isValidElement)(n)?(0,Be.cloneElement)(n,{...I5(i,n.props),ref:Kp(t,n.ref)}):Be.Children.count(n)>1?Be.Children.only(null):null});Zp.displayName="SlotClone";var S5=({children:e})=>(0,Be.createElement)(Be.Fragment,null,e);function C5(e){return(0,Be.isValidElement)(e)&&e.type===S5}function I5(e,t){let n={...t};for(let i in t){let r=e[i],a=t[i];/^on[A-Z]/.test(i)?r&&a?n[i]=(...c)=>{a(...c),r(...c)}:r&&(n[i]=r):i==="style"?n[i]={...r,...a}:i==="className"&&(n[i]=[r,a].filter(Boolean).join(" "))}return{...e,...n}}function U2(e){let t=e+"CollectionProvider",[n,i]=us(t),[r,a]=n(t,{collectionRef:{current:null},itemMap:new Map}),o=u=>{let{scope:p,children:f}=u,g=jn.default.useRef(null),v=jn.default.useRef(new Map).current;return jn.default.createElement(r,{scope:p,itemMap:v,collectionRef:g},f)},c=e+"CollectionSlot",d=jn.default.forwardRef((u,p)=>{let{scope:f,children:g}=u,v=a(c,f),E=ca(p,v.collectionRef);return jn.default.createElement(ms,{ref:E},g)}),h=e+"CollectionItemSlot",s="data-radix-collection-item",l=jn.default.forwardRef((u,p)=>{let{scope:f,children:g,...v}=u,E=jn.default.useRef(null),b=ca(p,E),w=a(h,f);return jn.default.useEffect(()=>(w.itemMap.set(E,{ref:E,...v}),()=>{w.itemMap.delete(E)})),jn.default.createElement(ms,{[s]:"",ref:b},g)});function m(u){let p=a(e+"CollectionConsumer",u);return jn.default.useCallback(()=>{let g=p.collectionRef.current;if(!g)return[];let v=Array.from(g.querySelectorAll(`[${s}]`));return Array.from(p.itemMap.values()).sort((w,x)=>v.indexOf(w.ref.current)-v.indexOf(x.ref.current))},[p.collectionRef,p.itemMap])}return[{Provider:o,Slot:d,ItemSlot:l},m,i]}var vd=I(O());var H2=I(O()),Yo=globalThis?.document?H2.useLayoutEffect:()=>{};var T5=vd.useId||(()=>{}),k5=0;function bd(e){let[t,n]=vd.useState(T5());return Yo(()=>{e||n(i=>i??String(k5++))},[e]),e||(t?`radix-${t}`:"")}var hs=I(O()),M5=I(Ln());var D5=["a","button","div","h2","h3","img","label","li","nav","ol","p","span","svg","ul"],fr=D5.reduce((e,t)=>{let n=(0,hs.forwardRef)((i,r)=>{let{asChild:a,...o}=i,c=a?ms:t;return(0,hs.useEffect)(()=>{window[Symbol.for("radix-ui")]=!0},[]),(0,hs.createElement)(c,pt({},o,{ref:r}))});return n.displayName=`Primitive.${t}`,{...e,[t]:n}},{});var ps=I(O());function Go(e){let t=(0,ps.useRef)(e);return(0,ps.useEffect)(()=>{t.current=e}),(0,ps.useMemo)(()=>(...n)=>{var i;return(i=t.current)===null||i===void 0?void 0:i.call(t,...n)},[])}var gr=I(O());function yd({prop:e,defaultProp:t,onChange:n=()=>{}}){let[i,r]=L5({defaultProp:t,onChange:n}),a=e!==void 0,o=a?e:i,c=Go(n),d=(0,gr.useCallback)(h=>{if(a){let l=typeof h=="function"?h(e):h;l!==e&&c(l)}else r(h)},[a,e,r,c]);return[o,d]}function L5({defaultProp:e,onChange:t}){let n=(0,gr.useState)(e),[i]=n,r=(0,gr.useRef)(i),a=Go(t);return(0,gr.useEffect)(()=>{r.current!==i&&(a(i),r.current=i)},[i,r,a]),n}var Ko=I(O()),R5=(0,Ko.createContext)(void 0);function Ed(e){let t=(0,Ko.useContext)(R5);return e||t||"ltr"}var Xp="rovingFocusGroup.onEntryFocus",A5={bubbles:!1,cancelable:!0},Qp="RovingFocusGroup",[qp,W2,N5]=U2(Qp),[P5,Jp]=us(Qp,[N5]),[_5,O5]=P5(Qp),F5=(0,Te.forwardRef)((e,t)=>(0,Te.createElement)(qp.Provider,{scope:e.__scopeRovingFocusGroup},(0,Te.createElement)(qp.Slot,{scope:e.__scopeRovingFocusGroup},(0,Te.createElement)($5,pt({},e,{ref:t}))))),$5=(0,Te.forwardRef)((e,t)=>{let{__scopeRovingFocusGroup:n,orientation:i,loop:r=!1,dir:a,currentTabStopId:o,defaultCurrentTabStopId:c,onCurrentTabStopIdChange:d,onEntryFocus:h,...s}=e,l=(0,Te.useRef)(null),m=ca(t,l),u=Ed(a),[p=null,f]=yd({prop:o,defaultProp:c,onChange:d}),[g,v]=(0,Te.useState)(!1),E=Go(h),b=W2(n),w=(0,Te.useRef)(!1),[x,S]=(0,Te.useState)(0);return(0,Te.useEffect)(()=>{let C=l.current;if(C)return C.addEventListener(Xp,E),()=>C.removeEventListener(Xp,E)},[E]),(0,Te.createElement)(_5,{scope:n,orientation:i,dir:u,loop:r,currentTabStopId:p,onItemFocus:(0,Te.useCallback)(C=>f(C),[f]),onItemShiftTab:(0,Te.useCallback)(()=>v(!0),[]),onFocusableItemAdd:(0,Te.useCallback)(()=>S(C=>C+1),[]),onFocusableItemRemove:(0,Te.useCallback)(()=>S(C=>C-1),[])},(0,Te.createElement)(fr.div,pt({tabIndex:g||x===0?-1:0,"data-orientation":i},s,{ref:m,style:{outline:"none",...e.style},onMouseDown:Bn(e.onMouseDown,()=>{w.current=!0}),onFocus:Bn(e.onFocus,C=>{let T=!w.current;if(C.target===C.currentTarget&&T&&!g){let L=new CustomEvent(Xp,A5);if(C.currentTarget.dispatchEvent(L),!L.defaultPrevented){let M=b().filter(P=>P.focusable),R=M.find(P=>P.active),z=M.find(P=>P.id===p),H=[R,z,...M].filter(Boolean).map(P=>P.ref.current);V2(H)}}w.current=!1}),onBlur:Bn(e.onBlur,()=>v(!1))})))}),B5="RovingFocusGroupItem",z5=(0,Te.forwardRef)((e,t)=>{let{__scopeRovingFocusGroup:n,focusable:i=!0,active:r=!1,tabStopId:a,...o}=e,c=bd(),d=a||c,h=O5(B5,n),s=h.currentTabStopId===d,l=W2(n),{onFocusableItemAdd:m,onFocusableItemRemove:u}=h;return(0,Te.useEffect)(()=>{if(i)return m(),()=>u()},[i,m,u]),(0,Te.createElement)(qp.ItemSlot,{scope:n,id:d,focusable:i,active:r},(0,Te.createElement)(fr.span,pt({tabIndex:s?0:-1,"data-orientation":h.orientation},o,{ref:t,onMouseDown:Bn(e.onMouseDown,p=>{i?h.onItemFocus(d):p.preventDefault()}),onFocus:Bn(e.onFocus,()=>h.onItemFocus(d)),onKeyDown:Bn(e.onKeyDown,p=>{if(p.key==="Tab"&&p.shiftKey){h.onItemShiftTab();return}if(p.target!==p.currentTarget)return;let f=H5(p,h.orientation,h.dir);if(f!==void 0){p.preventDefault();let v=l().filter(E=>E.focusable).map(E=>E.ref.current);if(f==="last")v.reverse();else if(f==="prev"||f==="next"){f==="prev"&&v.reverse();let E=v.indexOf(p.currentTarget);v=h.loop?W5(v,E+1):v.slice(E+1)}setTimeout(()=>V2(v))}})})))}),j5={ArrowLeft:"prev",ArrowUp:"prev",ArrowRight:"next",ArrowDown:"next",PageUp:"first",Home:"first",PageDown:"last",End:"last"};function U5(e,t){return t!=="rtl"?e:e==="ArrowLeft"?"ArrowRight":e==="ArrowRight"?"ArrowLeft":e}function H5(e,t,n){let i=U5(e.key,n);if(!(t==="vertical"&&["ArrowLeft","ArrowRight"].includes(i))&&!(t==="horizontal"&&["ArrowUp","ArrowDown"].includes(i)))return j5[i]}function V2(e){let t=document.activeElement;for(let n of e)if(n===t||(n.focus(),document.activeElement!==t))return}function W5(e,t){return e.map((n,i)=>e[(t+i)%e.length])}var Y2=F5,G2=z5;var Ct=I(O()),K2=I(Ln());function V5(e,t){return(0,Ct.useReducer)((n,i)=>{let r=t[n][i];return r??n},e)}var ef=e=>{let{present:t,children:n}=e,i=Y5(t),r=typeof n=="function"?n({present:i.isPresent}):Ct.Children.only(n),a=ca(i.ref,r.ref);return typeof n=="function"||i.isPresent?(0,Ct.cloneElement)(r,{ref:a}):null};ef.displayName="Presence";function Y5(e){let[t,n]=(0,Ct.useState)(),i=(0,Ct.useRef)({}),r=(0,Ct.useRef)(e),a=(0,Ct.useRef)("none"),o=e?"mounted":"unmounted",[c,d]=V5(o,{mounted:{UNMOUNT:"unmounted",ANIMATION_OUT:"unmountSuspended"},unmountSuspended:{MOUNT:"mounted",ANIMATION_END:"unmounted"},unmounted:{MOUNT:"mounted"}});return(0,Ct.useEffect)(()=>{let h=wd(i.current);a.current=c==="mounted"?h:"none"},[c]),Yo(()=>{let h=i.current,s=r.current;if(s!==e){let m=a.current,u=wd(h);e?d("MOUNT"):u==="none"||h?.display==="none"?d("UNMOUNT"):d(s&&m!==u?"ANIMATION_OUT":"UNMOUNT"),r.current=e}},[e,d]),Yo(()=>{if(t){let h=l=>{let u=wd(i.current).includes(l.animationName);l.target===t&&u&&(0,K2.flushSync)(()=>d("ANIMATION_END"))},s=l=>{l.target===t&&(a.current=wd(i.current))};return t.addEventListener("animationstart",s),t.addEventListener("animationcancel",h),t.addEventListener("animationend",h),()=>{t.removeEventListener("animationstart",s),t.removeEventListener("animationcancel",h),t.removeEventListener("animationend",h)}}else d("ANIMATION_END")},[t,d]),{isPresent:["mounted","unmountSuspended"].includes(c),ref:(0,Ct.useCallback)(h=>{h&&(i.current=getComputedStyle(h)),n(h)},[])}}function wd(e){return e?.animationName||"none"}var Z2="Tabs",[G5,AP]=us(Z2,[Jp]),X2=Jp(),[K5,tf]=G5(Z2),Z5=(0,ft.forwardRef)((e,t)=>{let{__scopeTabs:n,value:i,onValueChange:r,defaultValue:a,orientation:o="horizontal",dir:c,activationMode:d="automatic",...h}=e,s=Ed(c),[l,m]=yd({prop:i,onChange:r,defaultProp:a});return(0,ft.createElement)(K5,{scope:n,baseId:bd(),value:l,onValueChange:m,orientation:o,dir:s,activationMode:d},(0,ft.createElement)(fr.div,pt({dir:s,"data-orientation":o},h,{ref:t})))}),X5="TabsList",q5=(0,ft.forwardRef)((e,t)=>{let{__scopeTabs:n,loop:i=!0,...r}=e,a=tf(X5,n),o=X2(n);return(0,ft.createElement)(Y2,pt({asChild:!0},o,{orientation:a.orientation,dir:a.dir,loop:i}),(0,ft.createElement)(fr.div,pt({role:"tablist","aria-orientation":a.orientation},r,{ref:t})))}),Q5="TabsTrigger",J5=(0,ft.forwardRef)((e,t)=>{let{__scopeTabs:n,value:i,disabled:r=!1,...a}=e,o=tf(Q5,n),c=X2(n),d=q2(o.baseId,i),h=Q2(o.baseId,i),s=i===o.value;return(0,ft.createElement)(G2,pt({asChild:!0},c,{focusable:!r,active:s}),(0,ft.createElement)(fr.button,pt({type:"button",role:"tab","aria-selected":s,"aria-controls":h,"data-state":s?"active":"inactive","data-disabled":r?"":void 0,disabled:r,id:d},a,{ref:t,onMouseDown:Bn(e.onMouseDown,l=>{!r&&l.button===0&&l.ctrlKey===!1?o.onValueChange(i):l.preventDefault()}),onKeyDown:Bn(e.onKeyDown,l=>{[" ","Enter"].includes(l.key)&&o.onValueChange(i)}),onFocus:Bn(e.onFocus,()=>{let l=o.activationMode!=="manual";!s&&!r&&l&&o.onValueChange(i)})})))}),e4="TabsContent",t4=(0,ft.forwardRef)((e,t)=>{let{__scopeTabs:n,value:i,forceMount:r,children:a,...o}=e,c=tf(e4,n),d=q2(c.baseId,i),h=Q2(c.baseId,i),s=i===c.value,l=(0,ft.useRef)(s);return(0,ft.useEffect)(()=>{let m=requestAnimationFrame(()=>l.current=!1);return()=>cancelAnimationFrame(m)},[]),(0,ft.createElement)(ef,{present:r||s},({present:m})=>(0,ft.createElement)(fr.div,pt({"data-state":s?"active":"inactive","data-orientation":c.orientation,role:"tabpanel","aria-labelledby":d,hidden:!m,id:h,tabIndex:0},o,{ref:t,style:{...e.style,animationDuration:l.current?"0s":void 0}}),m&&a))});function q2(e,t){return`${e}-trigger-${t}`}function Q2(e,t){return`${e}-content-${t}`}var xd=Z5,Sd=q5,Cd=J5,Id=t4;var _3=I(A(),1);var zf=I(A(),1);var $3=I(A(),1);var z3=I(A(),1),jf=I(A(),1),U3=I(O(),1);var zi=I(A(),1),Pe=I(A(),1),Mu=I(O(),1),aI=I(A(),1),Bi=I(A(),1),ji=I(A(),1),bn=I(A(),1);var bt=I(O(),1),sI=I(nx(),1);var We=I(A(),1),Ut=I(A(),1),lI=I(O(),1);var Sl=I(A(),1),Xn=I(O(),1),hI=I(A(),1);var gi=I(A(),1),Cl=I(O(),1),fI=I(A(),1),kr=I(A(),1),Il=I(A(),1),Mt=I(A(),1);var Uf=I(O(),1),yI=I(A(),1),Vn=I(O(),1);var wI=I(A(),1);var Hf=I(A(),1);var SI=I(A(),1),Ne=I(A(),1),Zn=I(O(),1),CI=I(Fl(),1),yi=I(O(),1);var Ls=I(A(),1),II=I(A(),1),TI=I(A(),1),kI=I(A(),1),MI=I(O(),1),DI=I(A(),1),LI=I(A(),1),RI=I(A(),1),AI=I(A(),1),NI=I(O(),1),PI=I(A(),1),_I=I(A(),1);var X=I(A(),1),Rr=I(O(),1),En=I(A(),1),Z=I(A(),1),Bs=I(O(),1),kl=I(A(),1),OI=I(Fl(),1),Tt=I(A(),1),zs=I(O(),1),Eg=I(Ln(),1),$I=I(O(),1);var WI=I(A(),1),Ma=I(O(),1),VI=I(A(),1),Du=I(O(),1),Kf=I(A(),1),YI=I(A(),1);var Ml=I(A(),1),Sa=I(A(),1);function y4(e,t,n,i){Object.defineProperty(e,t,{get:n,set:i,enumerable:!0,configurable:!0})}var E4={};y4(E4,"LaserPointer",()=>Xo);function Ue([e,t,n],[i,r,a]){return[e+i,t+r,n+a]}function Zo([e,t,n],[i,r,a]){return[e-i,t-r,n-a]}function Qe([e,t,n],i){return[e*i,t*i,n*i]}function fs([e,t,n]){return[e/Math.sqrt(e**2+t**2),t/Math.sqrt(e**2+t**2),n]}function It([e,t,n],i){return[Math.cos(i)*e-Math.sin(i)*t,Math.sin(i)*e+Math.cos(i)*t,n]}function w4(e,t,n){return Ue(e,Qe(Zo(t,e),n))}function ix(e,t,n){return Math.atan2(n[1]-e[1],n[0]-e[0])-Math.atan2(t[1]-e[1],t[0]-e[0])}function rx(e){return Math.atan2(Math.sin(e),Math.cos(e))}function ax([e,t]){return Math.sqrt(e**2+t**2)}function gs([e,t],[n,i]){return Math.sqrt((n-e)**2+(i-t)**2)}function x4(e){if(e.length<2)return 0;let t=0;for(let n=1;n<=e.length-1;n++)t+=gs(e[n-1],e[n]);return t+=gs(e[e.length-2],e[e.length-1]),t}var S4=(e,t,n)=>Math.max(t,Math.min(n,e));function C4(e,t,n){let i=gs(t,n);if(i===0)return gs(e,t);let r=S4(((e[0]-t[0])*(n[0]-t[0])+(e[1]-t[1])*(n[1]-t[1]))/i**2,0,1),a=[t[0]+r*(n[0]-t[0]),t[1]+r*(n[1]-t[1]),e[2]];return gs(a,e)}function Td(e,t){if(t===0||e.length<=2)return e;let n=e[0],i=e[e.length-1],[r,a]=e.reduce(([o,c],d,h)=>{let s=C4(d,n,i);return s>o?[s,h]:[o,c]},[0,-1]);if(r>=t){let o=e[a];return[...Td([n,...e.slice(1,a),o],t).slice(0,-1),o,...Td([o,...e.slice(a,-1),i],t).slice(1)]}else return[n,i]}var br=class br{constructor(t){this.originalPoints=[],this.stablePoints=[],this.tailPoints=[],this.isFresh=!0,this.options=Object.assign({},br.defaults,t)}get lastPoint(){return this.tailPoints[this.tailPoints.length-1]??this.stablePoints[this.stablePoints.length-1]}addPoint(t){let n=this.originalPoints[this.originalPoints.length-1];if(!(n&&n[0]===t[0]&&n[1]===t[1])){if(this.originalPoints.push(t),this.isFresh){this.isFresh=!1,this.stablePoints.push(t);return}this.options.streamline>0&&(t=w4(this.lastPoint,t,1-this.options.streamline)),this.tailPoints.push(t),x4(this.tailPoints)>br.constants.maxTailLength&&this.stabilizeTail()}}close(){this.stabilizeTail()}stabilizeTail(){if(this.options.simplify>0&&this.options.simplifyPhase=="tail")throw new Error("Not implemented yet");this.stablePoints.push(...this.tailPoints),this.tailPoints=[]}getSize(t,n,i,r,a){return(t??this.options.size)*this.options.sizeMapping({pressure:n,runningLength:a,currentIndex:i,totalLength:r})}getStrokeOutline(t){if(this.isFresh)return[];let n=[...this.stablePoints,...this.tailPoints];this.options.simplify>0&&this.options.simplifyPhase==="input"&&(n=Td(n,this.options.simplify));let i=n.length;if(i===0)return[];if(i===1){let C=n[0],T=this.getSize(t,C[2],0,i,0);if(T<.5)return[];let L=[];for(let M=0;M<=Math.PI*2;M+=Math.PI/16)L.push(Ue(C,Qe(It([1,0,0],M),T)));return L.push(Ue(C,Qe([1,0,0],this.getSize(t,C[2],0,i,0)))),L}if(i===2){let C=n[0],T=n[1],L=this.getSize(t,C[2],0,i,0),M=this.getSize(t,T[2],0,i,0);if(L<.5||M<.5)return[];let R=[],z=ix(C,[C[0],C[1]-100,C[2]],T);for(let _=z;_<=Math.PI+z;_+=Math.PI/16)R.push(Ue(C,Qe(It([1,0,0],_),L)));for(let _=Math.PI+z;_<=Math.PI*2+z;_+=Math.PI/16)R.push(Ue(T,Qe(It([1,0,0],_),M)));return R.push(R[0]),R}let r=[],a=[],o=0,c=0,d=0,h=0;for(let C=1;C<i-1;C++){let T=n[C-1],L=n[C],M=n[C+1],R=L[2],z=gs(T,L);h+=z,o=c+(z-c)*.2;let _=this.getSize(t,R,C,i,h);if(_===0){d=C+1;continue}let H=fs(Zo(T,L)),P=fs(Zo(M,L)),B=It(H,Math.PI/2),q=It(H,-Math.PI/2),V=It(P,Math.PI/2),Y=It(P,-Math.PI/2),ie=Ue(L,Qe(B,_)),re=Ue(L,Qe(q,_)),ue=Ue(L,Qe(V,_)),ct=Ue(L,Qe(Y,_)),Pt=Ue(B,Y),dn=Ue(q,V),Dn=Ue(L,Qe(ax(Pt)===0?H:fs(Pt),_)),Yt=Ue(L,Qe(ax(dn)===0?P:fs(dn),_)),Ci=rx(ix(L,T,M)),js=br.constants.cornerDetectionMaxAngle/180*Math.PI*br.constants.cornerDetectionVariance(o);if(Math.abs(Ci)<js){let _t=Math.abs(rx(Math.PI-Ci));if(_t===0)continue;if(Ci<0){a.push(re,Yt);for(let Ge=0;Ge<=_t;Ge+=_t/4)r.push(Ue(L,It(Qe(B,_),Ge)));for(let Ge=_t;Ge>=0;Ge-=_t/4)a.push(Ue(L,It(Qe(B,_),Ge)));a.push(Yt,ue)}else{r.push(ie,Dn);for(let Ge=0;Ge<=_t;Ge+=_t/4)a.push(Ue(L,It(Qe(B,-_),-Ge)));for(let Ge=_t;Ge>=0;Ge-=_t/4)r.push(Ue(L,It(Qe(B,-_),-Ge)));r.push(Dn,ct)}}else r.push(Dn),a.push(Yt);c=o}if(d>=i-2)if(this.options.keepHead){let C=n[i-1],T=[];for(let L=0;L<=Math.PI*2;L+=Math.PI/16)T.push(Ue(C,Qe(It([1,0,0],L),this.options.size)));return T.push(Ue(C,Qe([1,0,0],this.options.size))),T}else return[];let s=n[d],l=n[d+1],m=n[i-2],u=n[i-1],p=fs(Zo(l,s)),f=fs(Zo(m,u)),g=It(p,-Math.PI/2),v=It(f,Math.PI/2),E=this.getSize(t,s[2],0,i,0),b=[],w=this.options.keepHead?this.options.size:this.getSize(t,m[2],i-2,i,h),x=[];if(E>1){for(let C=0;C<=Math.PI;C+=Math.PI/16)b.unshift(Ue(s,It(Qe(g,E),-C)));b.unshift(Ue(s,Qe(g,-E)))}else b.push(s);for(let C=0;C<=Math.PI*3;C+=Math.PI/16)x.push(Ue(u,It(Qe(v,-w),-C)));let S=[...b,...r,...x.reverse(),...a.reverse()];return b.length>0&&S.push(b[0]),this.options.simplify>0&&this.options.simplifyPhase==="output"?Td(S,this.options.simplify):S}};br.defaults={size:2,streamline:.45,simplify:.1,simplifyPhase:"output",keepHead:!1,sizeMapping:()=>1},br.constants={cornerDetectionMaxAngle:75,cornerDetectionVariance:t=>t>35?.5:1,maxTailLength:50};var Xo=br;var Lu=I(O(),1),KI=I(A(),1),oe=I(A(),1);var Xf=I(A(),1),In=I(A(),1),xe=I(A(),1),qn=I(A(),1),Hn=I(A(),1);var Au=I(A(),1),tT=I(Fl(),1),Dl=I(A(),1),FA=I(O(),1),jd=I(A(),1),bS=Wc(),{useAtom:je,useSetAtom:qd,useAtomValue:yS,useStore:r9}=bS,I4=bS.Provider,Wn=Xa(),T4=$g({"./locales/ar-SA.json":()=>import("./chunk-2VR4WFQ7.js"),"./locales/az-AZ.json":()=>import("./chunk-QLGLZ77F.js"),"./locales/bg-BG.json":()=>import("./chunk-VVDHBBS5.js"),"./locales/bn-BD.json":()=>import("./chunk-VEHP5B5Q.js"),"./locales/ca-ES.json":()=>import("./chunk-H2K2DDXV.js"),"./locales/cs-CZ.json":()=>import("./chunk-GMDIHHXQ.js"),"./locales/da-DK.json":()=>import("./chunk-FGPVYHVR.js"),"./locales/de-DE.json":()=>import("./chunk-YEWL7FUW.js"),"./locales/el-GR.json":()=>import("./chunk-GKTML2LG.js"),"./locales/en.json":()=>import("./chunk-OLDJ55TT.js"),"./locales/es-ES.json":()=>import("./chunk-RCH3OXBI.js"),"./locales/eu-ES.json":()=>import("./chunk-2M7CGY3Y.js"),"./locales/fa-IR.json":()=>import("./chunk-DUNNXU6Z.js"),"./locales/fi-FI.json":()=>import("./chunk-UABQIZKW.js"),"./locales/fr-FR.json":()=>import("./chunk-VRXWB733.js"),"./locales/gl-ES.json":()=>import("./chunk-ZBTCQEBK.js"),"./locales/he-IL.json":()=>import("./chunk-UTASVNF5.js"),"./locales/hi-IN.json":()=>import("./chunk-OQWVEWG7.js"),"./locales/hu-HU.json":()=>import("./chunk-ODGPG5RY.js"),"./locales/id-ID.json":()=>import("./chunk-GOUNACI3.js"),"./locales/it-IT.json":()=>import("./chunk-ESDOOBIH.js"),"./locales/ja-JP.json":()=>import("./chunk-MNQIRPDQ.js"),"./locales/kaa.json":()=>import("./chunk-SLG4X622.js"),"./locales/kab-KAB.json":()=>import("./chunk-EGSZ736B.js"),"./locales/kk-KZ.json":()=>import("./chunk-NT7ARDOL.js"),"./locales/km-KH.json":()=>import("./chunk-ZHOULXEJ.js"),"./locales/ko-KR.json":()=>import("./chunk-CI2FQ2JY.js"),"./locales/ku-TR.json":()=>import("./chunk-C54FTPPV.js"),"./locales/lt-LT.json":()=>import("./chunk-GXAYATPF.js"),"./locales/lv-LV.json":()=>import("./chunk-OV7OZYUO.js"),"./locales/mr-IN.json":()=>import("./chunk-XM4WOU3I.js"),"./locales/my-MM.json":()=>import("./chunk-LKATEVRU.js"),"./locales/nb-NO.json":()=>import("./chunk-HRZY2BJQ.js"),"./locales/nl-NL.json":()=>import("./chunk-6VZG3M3I.js"),"./locales/nn-NO.json":()=>import("./chunk-BUTJIDHG.js"),"./locales/oc-FR.json":()=>import("./chunk-7JLJN4EZ.js"),"./locales/pa-IN.json":()=>import("./chunk-JO4BEHDH.js"),"./locales/percentages.json":()=>import("./chunk-FHUD4AZC.js"),"./locales/pl-PL.json":()=>import("./chunk-YNLGLU4P.js"),"./locales/pt-BR.json":()=>import("./chunk-X54EX7AW.js"),"./locales/pt-PT.json":()=>import("./chunk-2ZYXBUWG.js"),"./locales/ro-RO.json":()=>import("./chunk-3LEMTSOO.js"),"./locales/ru-RU.json":()=>import("./chunk-JFVYBOOC.js"),"./locales/si-LK.json":()=>import("./chunk-JEFZAC2R.js"),"./locales/sk-SK.json":()=>import("./chunk-E3E4Q6JF.js"),"./locales/sl-SI.json":()=>import("./chunk-5VS5Y2VJ.js"),"./locales/sv-SE.json":()=>import("./chunk-ATHR5KEN.js"),"./locales/ta-IN.json":()=>import("./chunk-EB3U3LH7.js"),"./locales/th-TH.json":()=>import("./chunk-STZTUIIF.js"),"./locales/tr-TR.json":()=>import("./chunk-NLZIT2TJ.js"),"./locales/uk-UA.json":()=>import("./chunk-RLWWW5OB.js"),"./locales/vi-VN.json":()=>import("./chunk-66MULO7F.js"),"./locales/zh-CN.json":()=>import("./chunk-MU6EXW72.js"),"./locales/zh-HK.json":()=>import("./chunk-UDK3R764.js"),"./locales/zh-TW.json":()=>import("./chunk-SVQ6MWNV.js")}),k4=85,Ns={code:"en",label:"English"},qf=[Ns,...[{code:"ar-SA",label:"\u0627\u0644\u0639\u0631\u0628\u064A\u0629",rtl:!0},{code:"bg-BG",label:"\u0411\u044A\u043B\u0433\u0430\u0440\u0441\u043A\u0438"},{code:"ca-ES",label:"Catal\xE0"},{code:"cs-CZ",label:"\u010Cesky"},{code:"de-DE",label:"Deutsch"},{code:"el-GR",label:"\u0395\u03BB\u03BB\u03B7\u03BD\u03B9\u03BA\u03AC"},{code:"es-ES",label:"Espa\xF1ol"},{code:"eu-ES",label:"Euskara"},{code:"fa-IR",label:"\u0641\u0627\u0631\u0633\u06CC",rtl:!0},{code:"fi-FI",label:"Suomi"},{code:"fr-FR",label:"Fran\xE7ais"},{code:"gl-ES",label:"Galego"},{code:"he-IL",label:"\u05E2\u05D1\u05E8\u05D9\u05EA",rtl:!0},{code:"hi-IN",label:"\u0939\u093F\u0928\u094D\u0926\u0940"},{code:"hu-HU",label:"Magyar"},{code:"id-ID",label:"Bahasa Indonesia"},{code:"it-IT",label:"Italiano"},{code:"ja-JP",label:"\u65E5\u672C\u8A9E"},{code:"kab-KAB",label:"Taqbaylit"},{code:"kk-KZ",label:"\u049A\u0430\u0437\u0430\u049B \u0442\u0456\u043B\u0456"},{code:"ko-KR",label:"\uD55C\uAD6D\uC5B4"},{code:"ku-TR",label:"Kurd\xEE"},{code:"lt-LT",label:"Lietuvi\u0173"},{code:"lv-LV",label:"Latvie\u0161u"},{code:"my-MM",label:"Burmese"},{code:"nb-NO",label:"Norsk bokm\xE5l"},{code:"nl-NL",label:"Nederlands"},{code:"nn-NO",label:"Norsk nynorsk"},{code:"oc-FR",label:"Occitan"},{code:"pa-IN",label:"\u0A2A\u0A70\u0A1C\u0A3E\u0A2C\u0A40"},{code:"pl-PL",label:"Polski"},{code:"pt-BR",label:"Portugu\xEAs Brasileiro"},{code:"pt-PT",label:"Portugu\xEAs"},{code:"ro-RO",label:"Rom\xE2n\u0103"},{code:"ru-RU",label:"\u0420\u0443\u0441\u0441\u043A\u0438\u0439"},{code:"sk-SK",label:"Sloven\u010Dina"},{code:"sv-SE",label:"Svenska"},{code:"sl-SI",label:"Sloven\u0161\u010Dina"},{code:"tr-TR",label:"T\xFCrk\xE7e"},{code:"uk-UA",label:"\u0423\u043A\u0440\u0430\u0457\u043D\u0441\u044C\u043A\u0430"},{code:"zh-CN",label:"\u7B80\u4F53\u4E2D\u6587"},{code:"zh-TW",label:"\u7E41\u9AD4\u4E2D\u6587"},{code:"vi-VN",label:"Ti\u1EBFng Vi\u1EC7t"},{code:"mr-IN",label:"\u092E\u0930\u093E\u0920\u0940"}].filter(e=>zy[e.code]>=k4).sort((e,t)=>e.label>t.label?1:-1)],Ud="__test__";dt.DEV&&qf.unshift({code:Ud,label:"test language"},{code:`${Ud}.rtl`,label:"\u202Atest language (rtl)\u202C",rtl:!0});var ys=Ns,Ad={},ES=async e=>{if(ys=e,document.documentElement.dir=ys.rtl?"rtl":"ltr",document.documentElement.lang=ys.code,e.code.startsWith(Ud))Ad={};else try{Ad=await T4(`./locales/${ys.code}.json`)}catch(t){console.error(`Failed to load language ${e.code}:`,t.message),Ad=qh}Wn.set(wS,e.code)},dl=()=>ys,sx=(e,t)=>{for(let n=0;n<t.length;++n){let i=t[n];if(e[i]===void 0)return;e=e[i]}if(typeof e=="string")return e},y=(e,t,n)=>{if(ys.code.startsWith(Ud))return`\u202A[[${t?`${e}(${JSON.stringify(t).slice(1,-1)})`:e}]]\u202C`;let i=e.split("."),r=sx(Ad,i)||sx(qh,i)||n;if(r===void 0){let a=`Can't find translation for ${e}`;if(dt.PROD)return console.warn(a),"";throw new Error(a)}if(t)for(let a in t)r=r.replace(`{{${a}}}`,String(t[a]));return r},wS=Ze(Ns.code),Nt=()=>{let e=yS(wS);return{t:y,langCode:e}},M4=({size:e="1em",circleWidth:t=8,synchronized:n=!1,className:i=""})=>{let r=-(xS.default.useRef(Date.now()).current%1600);return(0,Nd.jsx)("div",{className:`Spinner ${i}`,children:(0,Nd.jsx)("svg",{viewBox:"0 0 100 100",style:{width:e,height:e,"--spinner-delay":n?`${r}ms`:0},children:(0,Nd.jsx)("circle",{cx:"50",cy:"50",r:50-t/2,strokeWidth:t,fill:"none",strokeMiterlimit:"10"})})})},Ui=M4,SS=({delay:e,theme:t})=>{let[n,i]=(0,Qd.useState)(!!e);return(0,Qd.useEffect)(()=>{if(!e)return;let r=setTimeout(()=>{i(!1)},e);return()=>clearTimeout(r)},[e]),n?null:(0,ws.jsxs)("div",{className:$("LoadingMessage",{"LoadingMessage--dark":t===he.DARK}),children:[(0,ws.jsx)("div",{children:(0,ws.jsx)(Ui,{})}),(0,ws.jsx)("div",{className:"LoadingMessage-text",children:y("labels.loadingScene")})]})},D4=e=>{let[t,n]=(0,Xd.useState)(!0);return(0,Xd.useEffect)(()=>{let i=async()=>{await ES(r),n(!1)},r=qf.find(a=>a.code===e.langCode)||Ns;i()},[e.langCode]),t?(0,CS.jsx)(SS,{theme:e.theme}):e.children},ce=Yn.default.forwardRef(({size:e="medium",visible:t=!0,className:n="",...i},r)=>{let{id:a}=Si(),o=Yn.default.useRef(null);Yn.default.useImperativeHandle(r,()=>o.current);let c=`ToolIcon_size_${e}`,[d,h]=(0,Yn.useState)(!1),s=(0,Yn.useRef)(!0),l=async u=>{let p="onClick"in i&&i.onClick?.(u);if(Ql(p))try{h(!0),await p}catch(f){if(f instanceof vc)console.warn(f);else throw f}finally{s.current&&h(!1)}};(0,Yn.useEffect)(()=>(s.current=!0,()=>{s.current=!1}),[]);let m=(0,Yn.useRef)(null);if(i.type==="button"||i.type==="icon"||i.type==="submit"){let u=i.type==="icon"?"button":i.type;return(0,wn.jsxs)("button",{className:$("ToolIcon_type_button",c,n,t&&!i.hidden?"ToolIcon_type_button--show":"ToolIcon_type_button--hide",{ToolIcon:!i.hidden,"ToolIcon--selected":i.selected,"ToolIcon--plain":i.type==="icon"}),style:i.style,"data-testid":i["data-testid"],hidden:i.hidden,title:i.title,"aria-label":i["aria-label"],type:u,onClick:l,ref:o,disabled:d||i.isLoading||!!i.disabled,children:[(i.icon||i.label)&&(0,wn.jsxs)("div",{className:"ToolIcon__icon","aria-hidden":"true","aria-disabled":!!i.disabled,children:[i.icon||i.label,i.keyBindingLabel&&(0,wn.jsx)("span",{className:"ToolIcon__keybinding",children:i.keyBindingLabel}),i.isLoading&&(0,wn.jsx)(Ui,{})]}),i.showAriaLabel&&(0,wn.jsxs)("div",{className:"ToolIcon__label",children:[i["aria-label"]," ",d&&(0,wn.jsx)(Ui,{})]}),i.children]})}return(0,wn.jsxs)("label",{className:$("ToolIcon",n),title:i.title,onPointerDown:u=>{m.current=u.pointerType||null,i.onPointerDown?.({pointerType:u.pointerType||null})},onPointerUp:()=>{requestAnimationFrame(()=>{m.current=null})},children:[(0,wn.jsx)("input",{className:`ToolIcon_type_radio ${c}`,type:"radio",name:i.name,"aria-label":i["aria-label"],"aria-keyshortcuts":i["aria-keyshortcuts"],"data-testid":i["data-testid"],id:`${a}-${i.id}`,onChange:()=>{i.onChange?.({pointerType:m.current})},checked:i.checked,ref:o}),(0,wn.jsxs)("div",{className:"ToolIcon__icon",children:[i.icon,i.keyBindingLabel&&(0,wn.jsx)("span",{className:"ToolIcon__keybinding",children:i.keyBindingLabel})]})]})});ce.displayName="ToolButton";var L4=(e,t,n)=>{let i=new Set(se(e.filter(s=>ge(s)),t).map(s=>s.id)),r={},a=n.scene.getNonDeletedElementsMap(),o=new Set;for(let s of i){let l=qr(e,s);for(let m of l)if(!o.has(m.id)){if(Gt(m)){let u=Ri(m,a);u&&(r[u.id]=!0)}else r[m.id]=!0;o.add(m.id)}}let c=!0,d=e.map(s=>{if(t.selectedElementIds[s.id]){let l=Gt(s)?Ri(s,a):null;return s.frameId&&i.has(s.frameId)?(c=!1,r[s.id]=!0,s):l?.frameId&&i.has(l?.frameId)?s:(s.boundElements&&s.boundElements.forEach(m=>{let u=n.scene.getNonDeletedElementsMap().get(m.id);u&&le(u)&&(W(u,{startBinding:s.id===u.startBinding?.elementId?null:u.startBinding,endBinding:s.id===u.endBinding?.elementId?null:u.endBinding}),W(u,{points:u.points}))}),ae(s,{isDeleted:!0}))}return s.frameId&&i.has(s.frameId)?(c=!1,Gt(s)||(r[s.id]=!0),ae(s,{frameId:null})):Gt(s)&&t.selectedElementIds[s.containerId]?ae(s,{isDeleted:!0}):s}),h=t.editingGroupId;if(c&&t.editingGroupId){let s=Ke(d,t.editingGroupId).filter(l=>!l.isDeleted);if(s.length>1)s[0]&&(r[s[0].id]=!0);else{h=null,s[0]&&(r[s[0].id]=!0);let l=s[0];if(l){let m=l.groupIds.findIndex(p=>p===t.editingGroupId),u=l.groupIds[m+1];if(u){let p=Ke(d,u).filter(f=>!f.isDeleted);p.length>1&&(h=u,p.forEach(f=>{r[f.id]=!0}))}}}}return{elements:d,appState:{...t,...wt({selectedElementIds:r,editingGroupId:h},d,t,null)}}},ox=(e,t)=>{if(e.editingGroupId){let n=Ke(Se(t),e.editingGroupId);if(n.length)return{...e,selectedElementIds:{[n[0].id]:!0}}}return e},TS=U({name:"deleteSelectedElements",label:"labels.delete",icon:Qi,trackEvent:{category:"element",action:"delete"},perform:(e,t,n,i)=>{if(t.editingLinearElement){let{elementId:o,selectedPointsIndices:c,startBindingElement:d,endBindingElement:h}=t.editingLinearElement,s=i.scene.getNonDeletedElementsMap(),l=ne.getElement(o,s);if(!l||c==null)return!1;if(l.points.length<2){let u=e.map(f=>f.id===l.id?ae(f,{isDeleted:!0}):f),p=ox(t,u);return{elements:u,appState:{...p,editingLinearElement:null},captureUpdate:N.IMMEDIATELY}}let m={startBindingElement:c?.includes(0)?null:d,endBindingElement:c?.includes(l.points.length-1)?null:h};return ne.deletePoints(l,c),{elements:e,appState:{...t,editingLinearElement:{...t.editingLinearElement,...m,selectedPointsIndices:c?.[0]>0?[c[0]-1]:[0]}},captureUpdate:N.IMMEDIATELY}}let{elements:r,appState:a}=L4(e,t,i);return ih(r,r.filter(o=>o.isDeleted)),a=ox(a,r),{elements:r,appState:{...a,activeTool:it(t,{type:"selection"}),multiElement:null,activeEmbeddable:null},captureUpdate:Ye(Se(e),t)?N.IMMEDIATELY:N.EVENTUALLY}},keyTest:(e,t,n)=>(e.key===k.BACKSPACE||e.key===k.DELETE)&&!e[k.CTRL_OR_CMD],PanelComponent:({elements:e,appState:t,updateData:n})=>(0,IS.jsx)(ce,{type:"button",icon:Qi,title:y("labels.delete"),"aria-label":y("labels.delete"),onClick:()=>n(null),visible:Ye(Se(e),t)})}),xf=(e,t)=>e.frameId===t||e.id===t,kS=(e,t,n)=>{let i=[],r=[],a=null,o=-1,c=Ee(n||se(e,t,{includeBoundTextElement:!0,includeElementsInFrames:!0}));for(;++o<e.length;){let d=e[o];c.get(d.id)?(r.length&&(i=i.concat(r),r=[]),i.push(o),a=o+1):d.isDeleted&&a===o?(a=o+1,r.push(o)):r=[]}return i},R4=e=>{let t=0;return e.reduce((n,i,r)=>(r>0&&e[r-1]!==i-1&&(t=++t),(n[t]||(n[t]=[])).push(i),n),[])},lx=(e,t,n)=>{if("containerId"in e&&e.containerId){let i=or.getScene(e).getElement(e.containerId);if(i)return n==="left"?Math.min(t.indexOf(i),t.indexOf(e)):Math.max(t.indexOf(i),t.indexOf(e))}else{let i=e.boundElements?.find(r=>r.type!=="arrow")?.id;if(i){let r=or.getScene(e).getElement(i);if(r)return n==="left"?Math.min(t.indexOf(r),t.indexOf(e)):Math.max(t.indexOf(r),t.indexOf(e))}}},A4=(e,t)=>{let n=-1,i=-1;return e.forEach((r,a)=>{xf(r,t)&&(n===-1&&(n=a),i=a)}),n===-1?[]:e.slice(n,i+1)},N4=(e,t,n,i,r)=>{let a=t[n],o=l=>l.isDeleted?!1:r?l.frameId===r:e.editingGroupId?l.groupIds.includes(e.editingGroupId):!0,c=i==="left"?Zi(t,l=>o(l),Math.max(0,n-1)):am(t,l=>o(l),n+1),d=t[c];if(!d)return-1;if(e.editingGroupId){if(a?.groupIds.join("")===d?.groupIds.join(""))return lx(d,t,i)??c;if(!d?.groupIds.includes(e.editingGroupId))return-1}if(!r&&(d.frameId||ge(d))){let l=A4(t,d.frameId||d.id);return i==="left"?t.indexOf(l[0]):t.indexOf(l[l.length-1])}if(!d.groupIds.length)return lx(d,t,i)??c;let h=e.editingGroupId?d.groupIds[d.groupIds.indexOf(e.editingGroupId)-1]:d.groupIds[d.groupIds.length-1],s=Ke(t,h);return s.length?i==="left"?t.indexOf(s[0]):t.indexOf(s[s.length-1]):c},MS=(e,t)=>t.reduce((n,i)=>{let r=e[i];return n.set(r.id,r),n},new Map),DS=(e,t,n)=>{let i=kS(e,t),r=MS(e,i),a=R4(i);n==="right"&&(a=a.reverse());let o=new Set(i.filter(c=>ge(e[c])).map(c=>e[c].id));return a.forEach((c,d)=>{let h=c[0],s=c[c.length-1],l=n==="left"?h:s,m=c.some(E=>{let b=e[E];return b.frameId&&o.has(b.frameId)})?null:e[l]?.frameId,u=N4(t,e,l,n,m);if(u===-1||l===u)return;let p=n==="left"?e.slice(0,u):e.slice(0,h),f=e.slice(h,s+1),g=n==="left"?e.slice(u,h):e.slice(s+1,u+1),v=n==="left"?e.slice(s+1):e.slice(u+1);e=n==="left"?[...p,...f,...g,...v]:[...p,...g,...f,...v]}),sr(e,r),e},LS=(e,t,n,i,r)=>{let a=kS(e,t,r),o=MS(e,a),c=[],d,h;if(n==="left"){if(i)d=am(e,p=>xf(p,i));else if(t.editingGroupId){let p=Ke(e,t.editingGroupId);if(!p.length)return e;d=e.indexOf(p[0])}else d=0;h=a[a.length-1]}else{if(i)h=Zi(e,p=>xf(p,i));else if(t.editingGroupId){let p=Ke(e,t.editingGroupId);if(!p.length)return e;h=e.indexOf(p[p.length-1])}else h=e.length-1;d=a[0]}d===-1&&(d=0);for(let p=d;p<h+1;p++)a.includes(p)||c.push(e[p]);let s=Array.from(o.values()),l=e.slice(0,d),m=e.slice(h+1),u=n==="left"?[...l,...s,...c,...m]:[...l,...c,...s,...m];return sr(u,o),u};function RS(e,t,n,i){let r=Ee(se(e,t,{includeBoundTextElement:!0,includeElementsInFrames:!0})),a={regularElements:[],frameChildren:new Map},o=new Set;for(let h of e)r.has(h.id)&&ge(h)&&o.add(h.id);for(let h of e)if(r.has(h.id))if(ge(h)||h.frameId&&o.has(h.frameId))a.regularElements.push(h);else if(!h.frameId)a.regularElements.push(h);else{let s=a.frameChildren.get(h.frameId)||[];s.push(h),a.frameChildren.set(h.frameId,s)}let c=e,d=Array.from(a.frameChildren.entries());for(let[h,s]of d)c=i(e,t,n,h,s);return i(c,t,n,null,a.regularElements)}var P4=(e,t)=>DS(e,t,"left"),_4=(e,t)=>DS(e,t,"right"),O4=(e,t)=>RS(e,t,"left",LS),F4=(e,t)=>RS(e,t,"right",LS),$4=U({name:"sendBackward",label:"labels.sendBackward",keywords:["move down","zindex","layer"],icon:Em,trackEvent:{category:"element"},perform:(e,t)=>({elements:P4(e,t),appState:t,captureUpdate:N.IMMEDIATELY}),keyPriority:40,keyTest:e=>e[k.CTRL_OR_CMD]&&!e.shiftKey&&e.code===me.BRACKET_LEFT,PanelComponent:({updateData:e,appState:t})=>(0,Ll.jsx)("button",{type:"button",className:"zIndexButton",onClick:()=>e(null),title:`${y("labels.sendBackward")} \u2014 ${F("CtrlOrCmd+[")}`,children:Em})}),B4=U({name:"bringForward",label:"labels.bringForward",keywords:["move up","zindex","layer"],icon:ym,trackEvent:{category:"element"},perform:(e,t)=>({elements:_4(e,t),appState:t,captureUpdate:N.IMMEDIATELY}),keyPriority:40,keyTest:e=>e[k.CTRL_OR_CMD]&&!e.shiftKey&&e.code===me.BRACKET_RIGHT,PanelComponent:({updateData:e,appState:t})=>(0,Ll.jsx)("button",{type:"button",className:"zIndexButton",onClick:()=>e(null),title:`${y("labels.bringForward")} \u2014 ${F("CtrlOrCmd+]")}`,children:ym})}),z4=U({name:"sendToBack",label:"labels.sendToBack",keywords:["move down","zindex","layer"],icon:xm,trackEvent:{category:"element"},perform:(e,t)=>({elements:O4(e,t),appState:t,captureUpdate:N.IMMEDIATELY}),keyTest:e=>Ii?e[k.CTRL_OR_CMD]&&e.altKey&&e.code===me.BRACKET_LEFT:e[k.CTRL_OR_CMD]&&e.shiftKey&&e.code===me.BRACKET_LEFT,PanelComponent:({updateData:e,appState:t})=>(0,Ll.jsx)("button",{type:"button",className:"zIndexButton",onClick:()=>e(null),title:`${y("labels.sendToBack")} \u2014 ${Ii?F("CtrlOrCmd+Alt+["):F("CtrlOrCmd+Shift+[")}`,children:xm})}),j4=U({name:"bringToFront",label:"labels.bringToFront",keywords:["move up","zindex","layer"],icon:wm,trackEvent:{category:"element"},perform:(e,t)=>({elements:F4(e,t),appState:t,captureUpdate:N.IMMEDIATELY}),keyTest:e=>Ii?e[k.CTRL_OR_CMD]&&e.altKey&&e.code===me.BRACKET_RIGHT:e[k.CTRL_OR_CMD]&&e.shiftKey&&e.code===me.BRACKET_RIGHT,PanelComponent:({updateData:e,appState:t})=>(0,Ll.jsx)("button",{type:"button",className:"zIndexButton",onClick:n=>e(null),title:`${y("labels.bringToFront")} \u2014 ${Ii?F("CtrlOrCmd+Alt+]"):F("CtrlOrCmd+Shift+]")}`,children:wm})}),U4=U({name:"selectAll",label:"labels.selectAll",icon:h0,trackEvent:{category:"canvas"},viewMode:!1,perform:(e,t,n,i)=>{if(t.editingLinearElement)return!1;let r=e.filter(a=>!a.isDeleted&&!(te(a)&&a.containerId)&&!a.locked).reduce((a,o)=>(a[o.id]=!0,a),{});return{appState:{...t,...wt({editingGroupId:null,selectedElementIds:r},Se(e),t,i),selectedLinearElement:Object.keys(r).length===1&&De(e[0])?new ne(e[0]):null},captureUpdate:N.IMMEDIATELY}},keyTest:e=>e[k.CTRL_OR_CMD]&&e.key===k.A}),H4=e=>{let t=e.slice(),n=new Set,i=a=>{let o=a[0]?.groupIds?.join(""),c=[a[0]],d=[];for(let h of a.slice(1))h.groupIds?.join("")===o?c.push(h):d.push(h);return d.length?[...c,...i(d)]:c},r=new Map;return t.forEach((a,o)=>{if(!r.has(a.id))if(a.groupIds?.length){let c=a.groupIds[a.groupIds.length-1],d=t.slice(o).filter(h=>{let s=h?.groupIds?.some(l=>l===c);return s&&r.set(h.id,!0),s});for(let h of i(d))n.add(h)}else n.add(a)}),n.size!==e.length?(console.error("normalizeGroupElementOrder: lost some elements... bailing!"),e):[...n]},W4=e=>{let t=M1(e),n=e.slice(),i=new Set;return n.forEach((r,a)=>{r&&(r.boundElements?.length?(i.add(r),n[a]=null,r.boundElements.forEach(o=>{let c=t.get(o.id);c&&o.type==="text"&&(i.add(c[0]),n[c[1]]=null)})):r.type==="text"&&r.containerId&&t.get(r.containerId)?.[0].boundElements?.find(o=>o.id===r.id)||(i.add(r),n[a]=null))}),i.size!==e.length?(console.error("normalizeBoundElementsOrder: lost some elements... bailing!"),e):[...i]},V4=e=>W4(H4(e)),Y4=U({name:"duplicateSelection",label:"labels.duplicateSelection",icon:oc,trackEvent:{category:"element"},perform:(e,t,n,i)=>{if(t.editingLinearElement)try{let a=ne.duplicateSelectedPoints(t,i.scene.getNonDeletedElementsMap());return{elements:e,appState:a,captureUpdate:N.IMMEDIATELY}}catch{return!1}let r=G4(e,t);if(i.props.onDuplicate&&r.elements){let a=i.props.onDuplicate(r.elements,e);a&&(r.elements=a)}return{...r,captureUpdate:N.IMMEDIATELY}},keyTest:e=>e[k.CTRL_OR_CMD]&&e.key===k.D,PanelComponent:({elements:e,appState:t,updateData:n})=>(0,AS.jsx)(ce,{type:"button",icon:oc,title:`${y("labels.duplicateSelection")} \u2014 ${F("CtrlOrCmd+D")}`,"aria-label":y("labels.duplicateSelection"),onClick:()=>n(null),visible:Ye(Se(e),t)})}),G4=(e,t)=>{let n=new Map,i=[],r=[],a=new Map,o=new Map,c=Ee(e),d=f=>{let g=lm(f).reduce((v,E)=>{if(s.has(E.id))return v;s.set(E.id,!0);let b=fh(t.editingGroupId,n,E,{x:E.x+Uu/2,y:E.y+Uu/2});return s.set(b.id,!0),o.set(b.id,b),a.set(E.id,b.id),r.push(E),i.push(b),v.push(b),v},[]);return Array.isArray(f)?g:g[0]||null};e=V4(e);let h=Ee(se(e,t,{includeBoundTextElement:!0,includeElementsInFrames:!0})),s=new Map,l=e.slice(),m=(f,g)=>{Xi(f!==-1,"targetIndex === -1 "),!(!Array.isArray(g)&&!g)&&l.splice(f+1,0,...lm(g))},u=new Set(e.filter(f=>h.has(f.id)&&ge(f)).map(f=>f.id));for(let f of e){if(s.has(f.id)||!h.has(f.id))continue;let g=ab(t,f);if(g){let v=Ke(e,g).flatMap(b=>ge(b)?[...qr(e,b.id),b]:[b]),E=Zi(l,b=>b.groupIds?.includes(g));m(E,d(v));continue}if(!(f.frameId&&u.has(f.frameId))){if(ge(f)){let v=f.id,E=qr(e,v),b=Zi(l,w=>w.frameId===v||w.id===v);m(b,d([...E,f]));continue}if(ri(f)){let v=Le(f,c),E=Zi(l,b=>b.id===f.id||"containerId"in b&&b.containerId===f.id);v?m(E,d([f,v])):m(E,d(f));continue}if(Gt(f)){let v=Ri(f,c),E=Zi(l,b=>b.id===f.id||b.id===v?.id);v?m(E,d([v,f])):m(E,d(f));continue}m(Zi(l,v=>v.id===f.id),d(f))}}lh(l,r,a),nh(l,r,a),Rh(l,r,a);let p=Bh(i);return{elements:l,appState:{...t,...wt({editingGroupId:t.editingGroupId,selectedElementIds:p.reduce((f,g)=>(Gt(g)||(f[g.id]=!0),f),{})},Se(l),t,null)}}},K4=new Set(["command_palette","export"]),we=(e,t,n,i)=>{try{if(typeof window>"u"||dt.VITE_WORKER_ID||dt.VITE_APP_ENABLE_TRACKING!=="true"||!K4.has(e)||dt.DEV)return;dt.PROD||console.info("trackEvent",{category:e,action:t,label:n,value:i}),window.sa_event&&window.sa_event(t,{category:e,label:n,value:i})}catch(r){console.error("error during analytics",r)}},_S=(0,NS.forwardRef)((e,t)=>{let{title:n,className:i,testId:r,active:a,standalone:o,icon:c,onClick:d}=e;return(0,PS.jsx)("button",{type:"button",ref:t,title:n,"data-testid":r,className:$(i,{standalone:o,active:a}),onClick:d,children:c},n)}),Ei=e=>(0,xs.jsx)("div",{className:"buttonList",children:e.options.map(t=>e.type==="button"?(0,xs.jsx)(_S,{icon:t.icon,title:t.text,testId:t.testId,active:t.active??e.value===t.value,onClick:n=>e.onClick(t.value,n)},t.text):(0,xs.jsxs)("label",{className:$({active:e.value===t.value}),title:t.text,children:[(0,xs.jsx)("input",{type:"radio",name:e.group,onChange:()=>e.onChange(t.value),checked:e.value===t.value,"data-testid":t.testId}),t.icon]},t.text))}),Z4=({onChange:e,type:t,activeColor:n,topPicks:i})=>{let r;return t==="elementStroke"&&(r=_u),t==="elementBackground"&&(r=Ou),t==="canvasBackground"&&(r=Fu),i&&(r=i),r?(0,Pd.jsx)("div",{className:"color-picker__top-picks",children:r.map(a=>(0,Pd.jsx)("button",{className:$("color-picker__button",{active:a===n,"is-transparent":a==="transparent"||!a}),style:{"--swatch-color":a},type:"button",title:a,onClick:()=>e(a),"data-testid":`color-top-pick-${a}`,children:(0,Pd.jsx)("div",{className:"color-picker__button-outline"})},a))}):(console.error("Invalid type for TopPicks"),null)},FS=()=>(0,OS.jsx)("div",{style:{width:1,height:"1rem",backgroundColor:"var(--default-border-color)",margin:"0 auto"}}),eu=({palette:e,color:t})=>{for(let[n,i]of Object.entries(e))if(Array.isArray(i)){let r=i.indexOf(t);if(r>-1)return{colorName:n,shade:r}}else if(i===t)return{colorName:n,shade:null};return null},Sf=[["q","w","e","r","t"],["a","s","d","f","g"],["z","x","c","v","b"]].flat(),$S=({color:e,palette:t})=>!Object.values(t).flat().includes(e),X4=(e,t,n)=>{let i={elementBackground:"backgroundColor",elementStroke:"strokeColor"},r=e.filter(o=>{if(o.isDeleted)return!1;let c=o[i[t]];return $S({color:c,palette:n})}),a=new Map;return r.forEach(o=>{let c=o[i[t]];a.has(c)?a.set(c,a.get(c)+1):a.set(c,1)}),[...a.entries()].sort((o,c)=>c[1]-o[1]).map(o=>o[0]).slice(0,jg)},Ps=Ze(null),cx=(e,t,n)=>(e*299+t*587+n*114)/1e3>=160?"black":"white",q4=(e,t)=>{if(t){let a=new Option().style;if(a.color=e,a.color){let o=a.color.replace(/^(rgb|rgba)\(/,"").replace(/\)$/,"").replace(/\s/g,"").split(","),c=parseInt(o[0]),d=parseInt(o[1]),h=parseInt(o[2]);return cx(c,d,h)}}if(e==="transparent")return"black";let n=parseInt(e.substring(1,3),16),i=parseInt(e.substring(3,5),16),r=parseInt(e.substring(5,7),16);return cx(n,i,r)},Q4=({color:e,keyLabel:t,isCustomColor:n=!1,isShade:i=!1})=>(0,BS.jsxs)("div",{className:"color-picker__button__hotkey-label",style:{color:q4(e,n)},children:[i&&"\u21E7",t]}),Qf=Q4,J4=({hex:e,onChange:t,palette:n})=>{let i=eu({color:e||"transparent",palette:n}),[r,a]=je(Ps),o=(0,Jd.useRef)(null);if((0,Jd.useEffect)(()=>{o.current&&r==="shades"&&o.current.focus()},[i,r]),i){let{colorName:c,shade:d}=i,h=n[c];if(Array.isArray(h))return(0,Fi.jsx)("div",{className:"color-picker-content--default shades",children:h.map((s,l)=>(0,Fi.jsxs)("button",{ref:l===d&&r==="shades"?o:void 0,tabIndex:-1,type:"button",className:$("color-picker__button color-picker__button--large",{active:l===d}),"aria-label":"Shade",title:`${c} - ${l+1}`,style:s?{"--swatch-color":s}:void 0,onClick:()=>{t(s),a("shades")},children:[(0,Fi.jsx)("div",{className:"color-picker__button-outline"}),(0,Fi.jsx)(Qf,{color:s,keyLabel:l+1,isShade:!0})]},l))})}return(0,Fi.jsxs)("div",{className:"color-picker-content--default",style:{position:"relative"},tabIndex:-1,children:[(0,Fi.jsx)("button",{type:"button",tabIndex:-1,className:"color-picker__button color-picker__button--large color-picker__button--no-focus-visible"}),(0,Fi.jsx)("div",{tabIndex:-1,style:{position:"absolute",top:0,left:0,right:0,bottom:0,display:"flex",alignItems:"center",justifyContent:"center",textAlign:"center",fontSize:"0.75rem"},children:y("colorPicker.noShades")})]})},eM=({palette:e,color:t,onChange:n,label:i,activeShade:r})=>{let a=eu({color:t||"transparent",palette:e}),[o,c]=je(Ps),d=(0,tu.useRef)(null);return(0,tu.useEffect)(()=>{d.current&&o==="baseColors"&&d.current.focus()},[a?.colorName,o]),(0,Ss.jsx)("div",{className:"color-picker-content--default",children:Object.entries(e).map(([h,s],l)=>{let m=(Array.isArray(s)?s[r]:s)||"transparent",u=Sf[l],p=y(`colors.${h.replace(/\d+/,"")}`,null,"");return(0,Ss.jsxs)("button",{ref:a?.colorName===h?d:void 0,tabIndex:-1,type:"button",className:$("color-picker__button color-picker__button--large",{active:a?.colorName===h,"is-transparent":m==="transparent"||!m}),onClick:()=>{n(m),c("baseColors")},title:`${p}${m.startsWith("#")?` ${m}`:""} \u2014 ${u}`,"aria-label":`${p} \u2014 ${u}`,style:m?{"--swatch-color":m}:void 0,"data-testid":`color-${h}`,children:[(0,Ss.jsx)("div",{className:"color-picker__button-outline"}),(0,Ss.jsx)(Qf,{color:m,keyLabel:u})]},h)})})},tM=eM,nM=({colors:e,color:t,onChange:n,label:i})=>{let[r,a]=je(Ps),o=(0,nu.useRef)(null);return(0,nu.useEffect)(()=>{o.current&&o.current.focus()},[t,r]),(0,Cs.jsx)("div",{className:"color-picker-content--default",children:e.map((c,d)=>(0,Cs.jsxs)("button",{ref:t===c?o:void 0,tabIndex:-1,type:"button",className:$("color-picker__button color-picker__button--large",{active:t===c,"is-transparent":c==="transparent"||!c}),onClick:()=>{n(c),a("custom")},title:c,"aria-label":i,style:{"--swatch-color":c},children:[(0,Cs.jsx)("div",{className:"color-picker__button-outline"}),(0,Cs.jsx)(Qf,{color:c,keyLabel:d+1,isCustomColor:!0})]},d))})},af=(e,t,n)=>{let i=Math.ceil(n/_r);switch(t=t??-1,e){case"ArrowLeft":{let r=t-1;return r<0?n-1:r}case"ArrowRight":return(t+1)%n;case"ArrowDown":{let r=t+_r;return r>=n?t%_r:r}case"ArrowUp":{let r=t-_r,a=r<0?_r*i+r:r;return a>=n?void 0:a}}},iM=({e,colorObj:t,onChange:n,palette:i,customColors:r,setActiveColorPickerSection:a,activeShade:o})=>{if(t?.shade!=null&&["Digit1","Digit2","Digit3","Digit4","Digit5"].includes(e.code)&&e.shiftKey){let c=Number(e.code.slice(-1))-1;return n(i[t.colorName][c]),a("shades"),!0}if(["1","2","3","4","5"].includes(e.key)&&r[Number(e.key)-1])return n(r[Number(e.key)-1]),a("custom"),!0;if(Sf.includes(e.key)){let c=Sf.indexOf(e.key),d=Object.keys(i)[c],h=i[d],s=Array.isArray(h)?h[o]:h;return n(s),a("baseColors"),!0}return!1},rM=({event:e,activeColorPickerSection:t,palette:n,color:i,onChange:r,customColors:a,setActiveColorPickerSection:o,updateData:c,activeShade:d,onEyeDropperToggle:h,onEscape:s})=>{if(e[k.CTRL_OR_CMD])return!1;if(e.key===k.ESCAPE)return s(e),!0;if(e.key===k.ALT)return h(!0),!0;if(e.key===k.I)return h(),!0;let l=eu({color:i,palette:n});if(e.key===k.TAB){let m={custom:!!a.length,baseColors:!0,shades:l?.shade!=null,hex:!0},u=Object.entries(m).reduce((E,[b,w])=>(w&&E.push(b),E),[]),p=u.indexOf(t),f=e.shiftKey?-1:1,g=p+f>u.length-1?0:p+f<0?u.length-1:p+f,v=u[g];return v&&o(v),v==="custom"?r(a[0]):v==="baseColors"&&(Object.entries(n).find(([E,b])=>Array.isArray(b)?b.includes(i):b===i?E:null)||r(Aa.black)),e.preventDefault(),e.stopPropagation(),!0}if(iM({e,colorObj:l,onChange:r,palette:n,customColors:a,setActiveColorPickerSection:o,activeShade:d}))return!0;if(t==="shades"&&l){let{shade:m}=l,u=af(e.key,m,_r);if(u!==void 0)return r(n[l.colorName][u]),!0}if(t==="baseColors"&&l){let{colorName:m}=l,u=Object.keys(n),p=u.indexOf(m),f=af(e.key,p,u.length);if(f!==void 0){let g=u[f],v=n[g];return r(Array.isArray(v)?v[d]:v),!0}}if(t==="custom"){let m=a.indexOf(i),u=af(e.key,m,a.length);if(u!==void 0){let p=a[u];return r(p),!0}}return!1},aM=({children:e})=>(0,zS.jsx)("div",{className:"color-picker__heading",children:e}),_d=aM,sM=({color:e,onChange:t,label:n,type:i,elements:r,palette:a,updateData:o,children:c,onEyeDropperToggle:d,onEscape:h})=>{let[s]=Mr.default.useState(()=>i==="canvasBackground"?[]:X4(r,i,a)),[l,m]=je(Ps),u=eu({color:e,palette:a});(0,Mr.useEffect)(()=>{if(!l){let v=$S({color:e,palette:a}),E=v&&!s.includes(e);m(E?"hex":v?"custom":u?.shade!=null?"shades":"baseColors")}},[l,e,a,m,u,s]);let[p,f]=(0,Mr.useState)(u?.shade??(i==="elementBackground"?Hg:Ug));(0,Mr.useEffect)(()=>{u?.shade!=null&&f(u.shade);let v=E=>{E.key===k.ALT&&d(!1)};return document.addEventListener("keyup",v,{capture:!0}),()=>{document.removeEventListener("keyup",v,{capture:!0})}},[u,d]);let g=Mr.default.useRef(null);return(0,on.jsx)("div",{role:"dialog","aria-modal":"true","aria-label":y("labels.colorPicker"),children:(0,on.jsxs)("div",{ref:g,onKeyDown:v=>{rM({event:v,activeColorPickerSection:l,palette:a,color:e,onChange:t,onEyeDropperToggle:d,customColors:s,setActiveColorPickerSection:m,updateData:o,activeShade:p,onEscape:h})&&(v.preventDefault(),v.stopPropagation())},className:"color-picker-content properties-content",tabIndex:-1,children:[!!s.length&&(0,on.jsxs)("div",{children:[(0,on.jsx)(_d,{children:y("colorPicker.mostUsedCustomColors")}),(0,on.jsx)(nM,{colors:s,color:e,label:y("colorPicker.mostUsedCustomColors"),onChange:t})]}),(0,on.jsxs)("div",{children:[(0,on.jsx)(_d,{children:y("colorPicker.colors")}),(0,on.jsx)(tM,{color:e,label:n,palette:a,onChange:t,activeShade:p})]}),(0,on.jsxs)("div",{children:[(0,on.jsx)(_d,{children:y("colorPicker.shades")}),(0,on.jsx)(J4,{hex:e,onChange:t,palette:a})]}),c]})})},HS=Jf.default.createContext(null),yt=()=>Jf.default.useContext(HS),WS=e=>{let[t,n]=(0,ul.useState)(null),i=lt(),{theme:r}=yt(),{container:a}=Si();return(0,ul.useLayoutEffect)(()=>{t&&(t.className="",t.classList.add("excalidraw",...e?.className?.split(/\s+/)||[]),t.classList.toggle("excalidraw--mobile",i.editor.isMobile),t.classList.toggle("theme--dark",r===he.DARK))},[t,r,i.editor.isMobile,e?.className]),(0,ul.useLayoutEffect)(()=>{let o=e?.parentSelector?a?.querySelector(e.parentSelector):document.body;if(!o)return;let c=document.createElement("div");return o.appendChild(c),n(c),()=>{o.removeChild(c)}},[a,e?.parentSelector]),t};function eg(e,t,n){(0,VS.useEffect)(()=>{function i(r){let a=r;if(!e.current)return;let o=n?.(a,e.current);if(o!==!0){if(o===!1)return t(a);e.current.contains(a.target)||!document.documentElement.contains(a.target)||a.target.closest("[data-radix-portal]")||a.target===document.documentElement&&document.body.style.pointerEvents==="none"||a.target.closest("[data-prevent-outside-click]")||t(a)}}return document.addEventListener("pointerdown",i),document.addEventListener("touchstart",i),()=>{document.removeEventListener("pointerdown",i),document.removeEventListener("touchstart",i)}},[e,t,n])}var ru=e=>{let t=(0,YS.useRef)(e);return Object.assign(t.current,e),t.current},au=Ze(null),oM=({onCancel:e,onChange:t,onSelect:n,colorPickerType:i})=>{let r=WS({className:"excalidraw-eye-dropper-backdrop",parentSelector:".excalidraw-eye-dropper-container"}),a=yt(),o=Ru(),c=xi(),d=se(o,a),h=ru({app:c,onCancel:e,onChange:t,onSelect:n,selectedElements:d}),{container:s}=Si();(0,iu.useEffect)(()=>{let m=l.current;if(!m||!c.canvas||!r)return;let u=!1,p=c.canvas.getContext("2d"),f=({clientX:S,clientY:C})=>{let T=p.getImageData((S-a.offsetLeft)*window.devicePixelRatio,(C-a.offsetTop)*window.devicePixelRatio,1,1).data;return Yg(T[0],T[1],T[2])},g=({clientX:S,clientY:C,altKey:T})=>{m.style.top=`${C+20}px`,m.style.left=`${S+20}px`;let L=f({clientX:S,clientY:C});u&&h.onChange(i,L,h.selectedElements,{altKey:T}),m.style.background=L},v=()=>{h.onCancel()},E=(S,C)=>{h.onSelect(S,C)},b=S=>{u=!0,S.stopImmediatePropagation()},w=S=>{u=!1,s?.focus(),S.stopImmediatePropagation(),S.preventDefault(),E(f(S),S)},x=S=>{S.key===k.ESCAPE&&(S.preventDefault(),S.stopImmediatePropagation(),v())};return r.tabIndex=-1,r.focus(),g({clientX:h.app.lastViewportPosition.x,clientY:h.app.lastViewportPosition.y,altKey:!1}),r.addEventListener("keydown",x),r.addEventListener("pointerdown",b),r.addEventListener("pointerup",w),window.addEventListener("pointermove",g,{passive:!0}),window.addEventListener("blur",v),()=>{u=!1,r.removeEventListener("keydown",x),r.removeEventListener("pointerdown",b),r.removeEventListener("pointerup",w),window.removeEventListener("pointermove",g),window.removeEventListener("blur",v)}},[h,c.canvas,r,i,s,a.offsetLeft,a.offsetTop]);let l=(0,iu.useRef)(null);return eg(l,()=>{e()},m=>!!m.target.closest(".excalidraw-eye-dropper-trigger, .excalidraw-eye-dropper-backdrop")),r?(0,US.createPortal)((0,GS.jsx)("div",{ref:l,className:"excalidraw-eye-dropper-preview"}),r):null},lM=({color:e,onChange:t,label:n,colorPickerType:i})=>{let r=lt(),[a,o]=(0,Gn.useState)(e),[c,d]=je(Ps);(0,Gn.useEffect)(()=>{o(e)},[e]);let h=(0,Gn.useCallback)(p=>{let f=p.toLowerCase(),g=cM(f);g&&t(g),o(f)},[t]),s=(0,Gn.useRef)(null),l=(0,Gn.useRef)(null);(0,Gn.useEffect)(()=>{s.current&&s.current.focus()},[c]);let[m,u]=je(au);return(0,Gn.useEffect)(()=>()=>{u(null)},[u]),(0,vi.jsxs)("div",{className:"color-picker__input-label",children:[(0,vi.jsx)("div",{className:"color-picker__input-hash",children:"#"}),(0,vi.jsx)("input",{ref:c==="hex"?s:void 0,style:{border:0,padding:0},spellCheck:!1,className:"color-picker-input","aria-label":n,onChange:p=>{h(p.target.value)},value:(a||"").replace(/^#/,""),onBlur:()=>{o(e)},tabIndex:-1,onFocus:()=>d("hex"),onKeyDown:p=>{p.key!==k.TAB&&(p.key===k.ESCAPE&&l.current?.focus(),p.stopPropagation())}}),!r.editor.isMobile&&(0,vi.jsxs)(vi.Fragment,{children:[(0,vi.jsx)("div",{style:{width:"1px",height:"1.25rem",backgroundColor:"var(--default-border-color)"}}),(0,vi.jsx)("div",{ref:l,className:$("excalidraw-eye-dropper-trigger",{selected:m}),onClick:()=>u(p=>p?null:{keepOpenOnAlt:!1,onSelect:f=>t(f),colorPickerType:i}),title:`${y("labels.eyeDropper")} \u2014 ${k.I.toLocaleUpperCase()} or ${F("Alt")} `,children:r0})]})]})},Kn=ZS.default.forwardRef(({children:e,padding:t,className:n,style:i},r)=>(0,XS.jsx)("div",{className:$("Island",n),style:{"--padding":t,...i},ref:r,children:e})),qS=KS.default.forwardRef(({className:e,container:t,children:n,style:i,onClose:r,onKeyDown:a,onFocusOutside:o,onPointerLeave:c,onPointerDownOutside:d},h)=>{let s=lt();return(0,Is.jsx)(y2,{container:t,children:(0,Is.jsxs)(ls,{ref:h,className:$("focus-visible-none",e),"data-prevent-outside-click":!0,side:s.editor.isMobile&&!s.viewport.isLandscape?"bottom":"right",align:s.editor.isMobile&&!s.viewport.isLandscape?"center":"start",alignOffset:-16,sideOffset:20,style:{zIndex:"var(--zIndex-popup)"},onPointerLeave:c,onKeyDown:a,onFocusOutside:o,onPointerDownOutside:d,onCloseAutoFocus:l=>{l.stopPropagation(),l.preventDefault(),t&&!x1(document.activeElement)&&t.focus(),r()},children:[(0,Is.jsx)(Kn,{padding:3,style:i,children:n}),(0,Is.jsx)(fd,{width:20,height:10,style:{fill:"var(--popup-bg-color)",filter:"drop-shadow(rgba(0, 0, 0, 0.05) 0px 3px 2px)"}})]})})}),dx=e=>{let t=new Option().style;return t.color=e,!!t.color},cM=e=>no(e)?e:dx(`#${e}`)?`#${e}`:dx(e)?e:null,dM=({type:e,color:t,onChange:n,label:i,elements:r,palette:a=Aa,updateData:o})=>{let{container:c}=Si(),[,d]=je(Ps),[h,s]=je(au),l=(0,Rt.jsxs)("div",{children:[(0,Rt.jsx)(_d,{children:y("colorPicker.hexCode")}),(0,Rt.jsx)(lM,{color:t,label:i,onChange:p=>{n(p)},colorPickerType:e})]}),m=(0,jS.useRef)(null),u=()=>{m.current?.querySelector(".color-picker-content")?.focus()};return(0,Rt.jsx)(qS,{container:c,style:{maxWidth:"13rem"},onFocusOutside:p=>{u(),p.preventDefault()},onPointerDownOutside:p=>{h&&p.preventDefault()},onClose:()=>{o({openPopup:null}),d(null)},children:a?(0,Rt.jsx)(sM,{palette:a,color:t,onChange:p=>{n(p)},onEyeDropperToggle:p=>{s(f=>p?(f=f||{keepOpenOnAlt:!0,onSelect:n,colorPickerType:e},f.keepOpenOnAlt=!0,f):p===!1||f?null:{keepOpenOnAlt:!1,onSelect:n,colorPickerType:e})},onEscape:p=>{h?s(null):o({openPopup:null})},label:i,type:e,elements:r,updateData:o,children:l}):l})},uM=({label:e,color:t,type:n})=>(0,Rt.jsx)(pr,{type:"button",className:$("color-picker__button active-color properties-trigger",{"is-transparent":t==="transparent"||!t}),"aria-label":e,style:t?{"--swatch-color":t}:void 0,title:y(n==="elementStroke"?"labels.showStroke":"labels.showBackground"),children:(0,Rt.jsx)("div",{className:"color-picker__button-outline"})}),tg=({type:e,color:t,onChange:n,label:i,elements:r,palette:a=Aa,topPicks:o,updateData:c,appState:d})=>(0,Rt.jsx)("div",{children:(0,Rt.jsxs)("div",{role:"dialog","aria-modal":"true",className:"color-picker-container",children:[(0,Rt.jsx)(Z4,{activeColor:t,onChange:n,type:e,topPicks:o}),(0,Rt.jsx)(FS,{}),(0,Rt.jsxs)(hr,{open:d.openPopup===e,onOpenChange:h=>{c({openPopup:h?e:null})},children:[(0,Rt.jsx)(uM,{color:t,label:i,type:e}),d.openPopup===e&&(0,Rt.jsx)(dM,{type:e,color:t,onChange:n,label:i,elements:r,palette:a,updateData:c})]})]})}),su=({icon:e})=>(0,QS.jsx)("span",{style:{width:"1em",margin:"0 0.5ex 0 0.5ex",display:"inline-block",lineHeight:0,verticalAlign:"middle"},children:e}),mM=({label:e,open:t,openTrigger:n,children:i,className:r})=>(0,Dr.jsxs)(Dr.Fragment,{children:[(0,Dr.jsxs)("div",{style:{cursor:"pointer",display:"flex",justifyContent:"space-between",alignItems:"center"},className:r,onClick:n,children:[e,(0,Dr.jsx)(su,{icon:t?M0:Hm})]}),t&&(0,Dr.jsx)("div",{style:{display:"flex",flexDirection:"column"},children:i})]}),Cf=mM,hM=Ze(!1);function pM({options:e,value:t,label:n,onChange:i,onClose:r,numberOfOptionsToAlwaysShow:a=e.length}){let o=lt(),c=u=>{let p=e.find(f=>f.keyBinding===u.key.toLowerCase());if(!(u.metaKey||u.altKey||u.ctrlKey)&&p)i(p.value),u.preventDefault();else if(u.key===k.TAB){let f=e.findIndex(v=>v.value===t),g=u.shiftKey?(e.length+f-1)%e.length:(f+1)%e.length;i(e[g].value)}else if(Ha(u.key)){let f=dl().rtl,g=e.findIndex(v=>v.value===t);if(g!==-1){let v=e.length,E=g;switch(u.key){case(f?k.ARROW_LEFT:k.ARROW_RIGHT):E=(g+1)%v;break;case(f?k.ARROW_RIGHT:k.ARROW_LEFT):E=(v+g-1)%v;break;case k.ARROW_DOWN:{E=(g+(a??1))%v;break}case k.ARROW_UP:{E=(v+g-(a??1))%v;break}}i(e[E].value)}u.preventDefault()}else(u.key===k.ESCAPE||u.key===k.ENTER)&&(u.preventDefault(),r());u.nativeEvent.stopImmediatePropagation(),u.stopPropagation()},[d,h]=je(hM),s=Ca.default.useMemo(()=>e.slice(0,a),[e,a]),l=Ca.default.useMemo(()=>e.slice(a),[e,a]);(0,Ca.useEffect)(()=>{s.some(u=>u.value===t)||h(!0)},[t,s,h]);let m=u=>(0,xn.jsx)("div",{className:"picker-content",children:u.map((p,f)=>(0,xn.jsxs)("button",{type:"button",className:$("picker-option",{active:t===p.value}),onClick:g=>{i(p.value)},title:`${p.text} ${p.keyBinding&&`\u2014 ${p.keyBinding.toUpperCase()}`}`,"aria-label":p.text||"none","aria-keyshortcuts":p.keyBinding||void 0,ref:g=>{t===p.value&&setTimeout(()=>{g?.focus()},0)},children:[p.icon,p.keyBinding&&(0,xn.jsx)("span",{className:"picker-keybinding",children:p.keyBinding})]},p.text))});return(0,xn.jsx)(ls,{side:o.editor.isMobile&&!o.viewport.isLandscape?"top":"bottom",align:"start",sideOffset:12,style:{zIndex:"var(--zIndex-popup)"},onKeyDown:c,children:(0,xn.jsxs)("div",{className:"picker",role:"dialog","aria-modal":"true","aria-label":n,children:[m(s),l.length>0&&(0,xn.jsx)(Cf,{label:y("labels.more_options"),open:d,openTrigger:()=>{h(u=>!u)},className:"picker-collapsible",children:m(l)})]})})}function ux({value:e,label:t,options:n,onChange:i,group:r="",numberOfOptionsToAlwaysShow:a}){let[o,c]=Ca.default.useState(!1),d=Ca.default.useRef(null);return(0,xn.jsx)("div",{children:(0,xn.jsxs)(hr,{open:o,onOpenChange:h=>c(h),children:[(0,xn.jsx)(pr,{name:r,type:"button","aria-label":t,onClick:()=>c(!o),ref:d,className:o?"active":"",children:n.find(h=>h.value===e)?.icon}),o&&(0,xn.jsx)(pM,{options:n,value:e,label:t,onChange:i,onClose:()=>{c(!1)},numberOfOptionsToAlwaysShow:a})]})})}var eC=JS.default.forwardRef(({className:e,placeholder:t,onChange:n},i)=>(0,ou.jsxs)("div",{className:$("QuickSearch__wrapper",e),children:[Ji,(0,ou.jsx)("input",{ref:i,className:"QuickSearch__input",type:"text",placeholder:t,onChange:r=>n(r.target.value.trim().toLowerCase())})]})),nC=({className:e,placeholder:t,children:n})=>{let i=!tC.Children.count(n);return(0,If.jsx)("div",{className:$("ScrollableList__wrapper",e),role:"menu",children:i?(0,If.jsx)("div",{className:"empty",children:t}):n})},iC=({children:e,className:t="",style:n,title:i})=>(0,lu.jsxs)("div",{className:`dropdown-menu-group ${t}`,style:n,children:[i&&(0,lu.jsx)("p",{className:"dropdown-menu-group-title",children:i}),e]}),Tf=iC;iC.displayName="DropdownMenuGroup";var rC=du.default.createContext({}),aC=(e="",t=!1,n=!1)=>`dropdown-menu-item dropdown-menu-item-base ${e}
42
+ ${t?"dropdown-menu-item--selected":""} ${n?"dropdown-menu-item--hovered":""}`.trim(),sC=(e,t)=>{let n=(0,du.useContext)(rC);return ro(e,i=>{let r=new CustomEvent("menu.itemSelect",{bubbles:!0,cancelable:!0});t?.(r),r.defaultPrevented||n.onSelect?.(r)})},fM=({textStyle:e,icon:t,shortcut:n,children:i})=>{let r=lt();return(0,Ir.jsxs)(Ir.Fragment,{children:[t&&(0,Ir.jsx)("div",{className:"dropdown-menu-item__icon",children:t}),(0,Ir.jsx)("div",{style:e,className:"dropdown-menu-item__text",children:i}),n&&!r.editor.isMobile&&(0,Ir.jsx)("div",{className:"dropdown-menu-item__shortcut",children:n})]})},oC=fM,ng=({icon:e,value:t,order:n,children:i,shortcut:r,className:a,hovered:o,selected:c,textStyle:d,onSelect:h,onClick:s,...l})=>{let m=sC(s,h),u=(0,cu.useRef)(null);return(0,cu.useEffect)(()=>{o&&(n===0?u.current?.scrollIntoView({block:"end"}):u.current?.scrollIntoView({block:"nearest"}))},[o,n]),(0,Hd.jsx)("button",{...l,ref:u,value:t,onClick:m,className:aC(a,c,o),title:l.title??l["aria-label"],children:(0,Hd.jsx)(oC,{textStyle:d,icon:e,shortcut:r,children:i})})};ng.displayName="DropdownMenuItem";var il={GREEN:"green",RED:"red",BLUE:"blue"},ig=({type:e=il.BLUE,children:t})=>{let{theme:n}=Pl(),i={display:"inline-flex",marginLeft:"auto",padding:"2px 4px",borderRadius:6,fontSize:9,fontFamily:"Cascadia, monospace",border:n===he.LIGHT?"1.5px solid white":"none"};switch(e){case il.GREEN:Object.assign(i,{backgroundColor:"var(--background-color-badge)",color:"var(--color-badge)"});break;case il.RED:Object.assign(i,{backgroundColor:"pink",color:"darkred"});break;case il.BLUE:default:Object.assign(i,{background:"var(--color-promo)",color:"var(--color-surface-lowest)"})}return(0,Hd.jsx)("div",{className:"DropDownMenuItemBadge",style:i,children:t})};ig.displayName="DropdownMenuItemBadge";ng.Badge=ig;var Mn=ng,gM=({event:e,inputRef:t,hoveredFont:n,filteredFonts:i,onClose:r,onSelect:a,onHover:o})=>{if(!e[k.CTRL_OR_CMD]&&e.shiftKey&&e.key.toLowerCase()===k.F)return t.current?.focus(),!0;if(e.key===k.ESCAPE)return r(),!0;if(e.key===k.ENTER)return n?.value&&a(n.value),!0;if(e.key===k.ARROW_DOWN)return n?.next?o(n.next.value):i[0]?.value&&o(i[0].value),!0;if(e.key===k.ARROW_UP)return n?.prev?o(n.prev.value):i[i.length-1]?.value&&o(i[i.length-1].value),!0},vM=st.default.memo(({selectedFontFamily:e,hoveredFontFamily:t,onSelect:n,onHover:i,onLeave:r,onOpen:a,onClose:o})=>{let{container:c}=Si(),{fonts:d}=xi(),{showDeprecatedFonts:h}=Nl(),[s,l]=(0,st.useState)(""),m=(0,st.useRef)(null),u=(0,st.useMemo)(()=>Array.from(za.registered.entries()).filter(([T,{metadata:L}])=>!L.serverSide&&!L.fallback).map(([T,{metadata:L,fontFaces:M}])=>{let R={value:T,icon:L.icon??Nm,text:M[0]?.fontFace?.family??"Unknown"};return L.deprecated&&Object.assign(R,{deprecated:L.deprecated,badge:{type:il.RED,placeholder:y("fontList.badge.old")}}),R}).sort((T,L)=>T.text.toLowerCase()>L.text.toLowerCase()?1:-1),[]),p=(0,st.useMemo)(()=>new Set(d.getSceneFamilies()),[e]),f=(0,st.useMemo)(()=>u.filter(T=>p.has(T.value)),[u,p]),g=(0,st.useMemo)(()=>u.filter(T=>!p.has(T.value)&&(h||!T.deprecated)),[u,p,h]),v=(0,st.useMemo)(()=>D1([...f,...g].filter(T=>T.text?.toLowerCase().includes(s))),[f,g,s]),E=(0,st.useMemo)(()=>{let T;return t?T=v.find(L=>L.value===t):e&&(T=v.find(L=>L.value===e)),!T&&s&&(v[0]?.value?i(v[0].value):r()),T},[t,e,s,v,i,r]),b=(0,st.useCallback)(T=>{gM({event:T,inputRef:m,hoveredFont:E,filteredFonts:v,onSelect:n,onHover:i,onClose:o})&&(T.preventDefault(),T.stopPropagation())},[E,v,n,i,o]);(0,st.useEffect)(()=>(a(),()=>{o()}),[]);let w=(0,st.useMemo)(()=>v.filter(T=>p.has(T.value)),[v,p]),x=(0,st.useMemo)(()=>v.filter(T=>!p.has(T.value)),[v,p]),S=(T,L)=>(0,$i.jsxs)(Mn,{icon:T.icon,value:T.value,order:L,textStyle:{fontFamily:Js({fontFamily:T.value})},hovered:T.value===E?.value,selected:T.value===e,tabIndex:T.value===e?0:-1,onClick:M=>{n(Number(M.currentTarget.value))},onMouseMove:()=>{E?.value!==T.value&&i(T.value)},children:[T.text,T.badge&&(0,$i.jsx)(ig,{type:T.badge.type,children:T.badge.placeholder})]},T.value),C=[];return w.length&&C.push((0,$i.jsx)(Tf,{title:y("fontList.sceneFonts"),children:w.map(S)},"group_1")),x.length&&C.push((0,$i.jsx)(Tf,{title:y("fontList.availableFonts"),children:x.map((T,L)=>S(T,L+w.length))},"group_2")),(0,$i.jsxs)(qS,{className:"properties-content",container:c,style:{width:"15rem"},onClose:o,onPointerLeave:r,onKeyDown:b,children:[(0,$i.jsx)(eC,{ref:m,placeholder:y("quickSearch.placeholder"),onChange:eo(l,20)}),(0,$i.jsx)(nC,{className:"dropdown-menu fonts manual-hover",placeholder:y("fontList.empty"),children:C.length?C:null})]})},(e,t)=>e.selectedFontFamily===t.selectedFontFamily&&e.hoveredFontFamily===t.hoveredFontFamily),bM=({selectedFontFamily:e})=>{let t=(0,lC.useMemo)(()=>!!(e&&!EM(e)),[e]);return(0,Od.jsx)(pr,{asChild:!0,children:(0,Od.jsx)("div",{children:(0,Od.jsx)(_S,{standalone:!0,icon:tv,title:y("labels.showFonts"),className:"properties-trigger",testId:"font-family-show-fonts",active:t,onClick:()=>{}})})})},cC=[{value:Vs.Excalifont,icon:dm,text:y("labels.handDrawn"),testId:"font-family-hand-drawn"},{value:Vs.Nunito,icon:Nm,text:y("labels.normal"),testId:"font-family-normal"},{value:Vs["Comic Shanns"],icon:Yv,text:y("labels.code"),testId:"font-family-code"}],yM=new Set(cC.map(e=>e.value)),EM=e=>e?yM.has(e):!1,wM=_s.default.memo(({isOpened:e,selectedFontFamily:t,hoveredFontFamily:n,onSelect:i,onHover:r,onLeave:a,onPopupChange:o})=>{let c=(0,_s.useMemo)(()=>cC,[]),d=(0,_s.useCallback)(h=>{h&&i(h)},[i]);return(0,xr.jsxs)("div",{role:"dialog","aria-modal":"true",className:"FontPicker__container",children:[(0,xr.jsx)(Ei,{type:"button",options:c,value:t,onClick:d}),(0,xr.jsx)(FS,{}),(0,xr.jsxs)(hr,{open:e,onOpenChange:o,children:[(0,xr.jsx)(bM,{selectedFontFamily:t}),e&&(0,xr.jsx)(vM,{selectedFontFamily:t,hoveredFontFamily:n,onSelect:d,onHover:r,onLeave:a,onOpen:()=>o(!0),onClose:()=>o(!1)})]})]})},(e,t)=>e.isOpened===t.isOpened&&e.selectedFontFamily===t.selectedFontFamily&&e.hoveredFontFamily===t.hoveredFontFamily),xM=({updateData:e,appState:t,elements:n,testId:i})=>{let r=ml.default.useRef(null),a=ml.default.useRef(null),o=Wt(n,t,c=>c.opacity,!0,t.currentItemOpacity);return(0,ml.useEffect)(()=>{if(r.current&&a.current){let c=r.current,d=a.current,h=c.offsetWidth,s=15,l=o/100*(h-s)+s/2;d.style.left=`${l}px`,c.style.background=`linear-gradient(to right, var(--color-slider-track) 0%, var(--color-slider-track) ${o}%, var(--button-bg) ${o}%, var(--button-bg) 100%)`}},[o]),(0,fa.jsxs)("label",{className:"control-label",children:[y("labels.opacity"),(0,fa.jsxs)("div",{className:"range-wrapper",children:[(0,fa.jsx)("input",{ref:r,type:"range",min:"0",max:"100",step:"10",onChange:c=>{e(+c.target.value)},value:o,className:"range-input","data-testid":i}),(0,fa.jsx)("div",{className:"value-bubble",ref:a,children:o!==0?o:null}),(0,fa.jsx)("div",{className:"zero-label",children:"0"})]})]})},dC=.1,Ht=(e,t,n,i=!1)=>{let r=Ee(se(e,t,{includeBoundTextElement:i}));return e.map(a=>r.get(a.id)||a.id===t.editingTextElement?.id?n(a):a)},Wt=function(e,t,n,i,r){let a=t.editingTextElement,o=Se(e),c=null;return a&&(c=n(a)),c||(Ye(o,t)?c=fy(i===!0?o:o.filter(d=>i(d)),t,n)??(typeof r=="function"?r(!0):r):c=typeof r=="function"?r(!1):r),c},SM=(e,t)=>Gt(t)||!t.autoResize?t:W(t,{x:e.textAlign==="left"?e.x:e.x+(e.width-t.width)/(e.textAlign==="center"?2:1),y:e.y+(e.height-t.height)/2},!1),rg=(e,t,n,i,r)=>{let a=new Set,o=Ht(e,t,d=>{if(te(d)){let h=i(d);a.add(h);let s=ae(d,{fontSize:h});return $t(s,n.scene.getContainerElement(d),n.scene.getNonDeletedElementsMap()),s=SM(d,s),s}return d},!0),c=Ee(o);return se(e,t,{includeBoundTextElement:!0}).forEach(d=>{te(d)&&er(d,c)}),{elements:o,appState:{...t,currentItemFontSize:a.size===1?[...a][0]:r??t.currentItemFontSize},captureUpdate:N.IMMEDIATELY}},S9=U({name:"changeStrokeColor",label:"labels.stroke",trackEvent:!1,perform:(e,t,n)=>({...n.currentItemStrokeColor&&{elements:Ht(e,t,i=>xc(i.type)?ae(i,{strokeColor:n.currentItemStrokeColor}):i,!0)},appState:{...t,...n},captureUpdate:n.currentItemStrokeColor?N.IMMEDIATELY:N.EVENTUALLY}),PanelComponent:({elements:e,appState:t,updateData:n,appProps:i})=>(0,Q.jsxs)(Q.Fragment,{children:[(0,Q.jsx)("h3",{"aria-hidden":"true",children:y("labels.stroke")}),(0,Q.jsx)(tg,{topPicks:_u,palette:Wg,type:"elementStroke",label:y("labels.stroke"),color:Wt(e,t,r=>r.strokeColor,!0,t.currentItemStrokeColor),onChange:r=>n({currentItemStrokeColor:r}),elements:e,appState:t,updateData:n})]})}),C9=U({name:"changeBackgroundColor",label:"labels.changeBackground",trackEvent:!1,perform:(e,t,n)=>({...n.currentItemBackgroundColor&&{elements:Ht(e,t,i=>ae(i,{backgroundColor:n.currentItemBackgroundColor}))},appState:{...t,...n},captureUpdate:n.currentItemBackgroundColor?N.IMMEDIATELY:N.EVENTUALLY}),PanelComponent:({elements:e,appState:t,updateData:n,appProps:i})=>(0,Q.jsxs)(Q.Fragment,{children:[(0,Q.jsx)("h3",{"aria-hidden":"true",children:y("labels.background")}),(0,Q.jsx)(tg,{topPicks:Ou,palette:Vg,type:"elementBackground",label:y("labels.background"),color:Wt(e,t,r=>r.backgroundColor,!0,t.currentItemBackgroundColor),onChange:r=>n({currentItemBackgroundColor:r}),elements:e,appState:t,updateData:n})]})}),I9=U({name:"changeFillStyle",label:"labels.fill",trackEvent:!1,perform:(e,t,n,i)=>(we("element","changeFillStyle",`${n} (${i.device.editor.isMobile?"mobile":"desktop"})`),{elements:Ht(e,t,r=>ae(r,{fillStyle:n})),appState:{...t,currentItemFillStyle:n},captureUpdate:N.IMMEDIATELY}),PanelComponent:({elements:e,appState:t,updateData:n})=>{let i=se(e,t),r=i.length>0&&i.every(a=>a.fillStyle==="zigzag");return(0,Q.jsxs)("fieldset",{children:[(0,Q.jsx)("legend",{children:y("labels.fill")}),(0,Q.jsx)(Ei,{type:"button",options:[{value:"hachure",text:`${y(r?"labels.zigzag":"labels.hachure")} (${F("Alt-Click")})`,icon:r?vv:bv,active:r?!0:void 0,testId:"fill-hachure"},{value:"cross-hatch",text:y("labels.crossHatch"),icon:yv,testId:"fill-cross-hatch"},{value:"solid",text:y("labels.solid"),icon:Ev,testId:"fill-solid"}],value:Wt(e,t,a=>a.fillStyle,a=>a.hasOwnProperty("fillStyle"),a=>a?null:t.currentItemFillStyle),onClick:(a,o)=>{let c=o.altKey&&a==="hachure"&&i.every(d=>d.fillStyle==="hachure")?"zigzag":a;n(c)}})]})}}),T9=U({name:"changeStrokeWidth",label:"labels.strokeWidth",trackEvent:!1,perform:(e,t,n)=>({elements:Ht(e,t,i=>ae(i,{strokeWidth:n})),appState:{...t,currentItemStrokeWidth:n},captureUpdate:N.IMMEDIATELY}),PanelComponent:({elements:e,appState:t,updateData:n})=>(0,Q.jsxs)("fieldset",{children:[(0,Q.jsx)("legend",{children:y("labels.strokeWidth")}),(0,Q.jsx)(Ei,{group:"stroke-width",options:[{value:Gl.thin,text:y("labels.thin"),icon:Am,testId:"strokeWidth-thin"},{value:Gl.bold,text:y("labels.bold"),icon:wv,testId:"strokeWidth-bold"},{value:Gl.extraBold,text:y("labels.extraBold"),icon:xv,testId:"strokeWidth-extraBold"}],value:Wt(e,t,i=>i.strokeWidth,i=>i.hasOwnProperty("strokeWidth"),i=>i?null:t.currentItemStrokeWidth),onChange:i=>n(i)})]})}),k9=U({name:"changeSloppiness",label:"labels.sloppiness",trackEvent:!1,perform:(e,t,n)=>({elements:Ht(e,t,i=>ae(i,{seed:kc(),roughness:n})),appState:{...t,currentItemRoughness:n},captureUpdate:N.IMMEDIATELY}),PanelComponent:({elements:e,appState:t,updateData:n})=>(0,Q.jsxs)("fieldset",{children:[(0,Q.jsx)("legend",{children:y("labels.sloppiness")}),(0,Q.jsx)(Ei,{group:"sloppiness",options:[{value:0,text:y("labels.architect"),icon:Iv},{value:1,text:y("labels.artist"),icon:Tv},{value:2,text:y("labels.cartoonist"),icon:kv}],value:Wt(e,t,i=>i.roughness,i=>i.hasOwnProperty("roughness"),i=>i?null:t.currentItemRoughness),onChange:i=>n(i)})]})}),M9=U({name:"changeStrokeStyle",label:"labels.strokeStyle",trackEvent:!1,perform:(e,t,n)=>({elements:Ht(e,t,i=>ae(i,{strokeStyle:n})),appState:{...t,currentItemStrokeStyle:n},captureUpdate:N.IMMEDIATELY}),PanelComponent:({elements:e,appState:t,updateData:n})=>(0,Q.jsxs)("fieldset",{children:[(0,Q.jsx)("legend",{children:y("labels.strokeStyle")}),(0,Q.jsx)(Ei,{group:"strokeStyle",options:[{value:"solid",text:y("labels.strokeStyle_solid"),icon:Am},{value:"dashed",text:y("labels.strokeStyle_dashed"),icon:Sv},{value:"dotted",text:y("labels.strokeStyle_dotted"),icon:Cv}],value:Wt(e,t,i=>i.strokeStyle,i=>i.hasOwnProperty("strokeStyle"),i=>i?null:t.currentItemStrokeStyle),onChange:i=>n(i)})]})}),D9=U({name:"changeOpacity",label:"labels.opacity",trackEvent:!1,perform:(e,t,n)=>({elements:Ht(e,t,i=>ae(i,{opacity:n}),!0),appState:{...t,currentItemOpacity:n},captureUpdate:N.IMMEDIATELY}),PanelComponent:({elements:e,appState:t,updateData:n})=>(0,Q.jsx)(xM,{updateData:n,elements:e,appState:t,testId:"opacity"})}),L9=U({name:"changeFontSize",label:"labels.fontSize",trackEvent:!1,perform:(e,t,n,i)=>rg(e,t,i,()=>n,n),PanelComponent:({elements:e,appState:t,updateData:n,app:i})=>(0,Q.jsxs)("fieldset",{children:[(0,Q.jsx)("legend",{children:y("labels.fontSize")}),(0,Q.jsx)(Ei,{group:"font-size",options:[{value:16,text:y("labels.small"),icon:Uv,testId:"fontSize-small"},{value:20,text:y("labels.medium"),icon:Hv,testId:"fontSize-medium"},{value:28,text:y("labels.large"),icon:Wv,testId:"fontSize-large"},{value:36,text:y("labels.veryLarge"),icon:Vv,testId:"fontSize-veryLarge"}],value:Wt(e,t,r=>{if(te(r))return r.fontSize;let a=Le(r,i.scene.getNonDeletedElementsMap());return a?a.fontSize:null},r=>te(r)||Le(r,i.scene.getNonDeletedElementsMap())!==null,r=>r?null:t.currentItemFontSize||jl),onChange:r=>n(r)})]})}),mx=U({name:"decreaseFontSize",label:"labels.decreaseFontSize",icon:co,trackEvent:!1,perform:(e,t,n,i)=>rg(e,t,i,r=>Math.round(1/(1+dC)*r.fontSize)),keyTest:e=>e[k.CTRL_OR_CMD]&&e.shiftKey&&(e.key===k.CHEVRON_LEFT||e.key===k.COMMA)}),hx=U({name:"increaseFontSize",label:"labels.increaseFontSize",icon:co,trackEvent:!1,perform:(e,t,n,i)=>rg(e,t,i,r=>Math.round(r.fontSize*(1+dC))),keyTest:e=>e[k.CTRL_OR_CMD]&&e.shiftKey&&(e.key===k.CHEVRON_RIGHT||e.key===k.PERIOD)}),R9=U({name:"changeFontFamily",label:"labels.fontFamily",trackEvent:!1,perform:(e,t,n,i)=>{let{cachedElements:r,resetAll:a,resetContainers:o,...c}=n;if(a)return{elements:Ht(e,t,p=>{let f=r?.get(p.id);return f?ae(p,{...f}):p},!0),appState:{...t,...c},captureUpdate:N.NEVER};let{currentItemFontFamily:d,currentHoveredFontFamily:h}=n,s=N.EVENTUALLY,l,m=!1;if(d)l=d,s=N.IMMEDIATELY;else if(h){l=h,s=N.EVENTUALLY;let p=se(e,t,{includeBoundTextElement:!0}).filter(f=>te(f));if(p.length>200)m=!0;else{let f=0,g=0;for(;f<p.length&&g<5e3;){let v=p[f];g+=v?.originalText.length||0,f++}g>5e3&&(m=!0)}}let u={appState:{...t,...c},captureUpdate:s};if(l&&!m){let p=new Map,f=new Set,g=!1,v=Array.from(za.loadedFontsCache.values()),E=Object.entries(Vs).find(([x,S])=>S===l)?.[0];h&&E&&v.some(x=>x.startsWith(E))&&(g=!0),Object.assign(u,{elements:Ht(e,t,x=>{if(te(x)&&(x.fontFamily!==l||d)){let S=ae(x,{fontFamily:l,lineHeight:ja(l)}),C=r?.get(x.containerId||"")||{},T=i.scene.getContainerElement(x);return o&&T&&C&&W(T,{...C},!1),g||(f=new Set([...f,...Array.from(S.originalText)])),p.set(S,T),S}return x},!0)});let b=`10px ${Js({fontFamily:l})}`,w=Array.from(f.values()).join();if(g||window.document.fonts.check(b,w))for(let[x,S]of p)$t(x,S,i.scene.getNonDeletedElementsMap(),!1);else window.document.fonts.load(b,w).then(x=>{for(let[S,C]of p){let T=i.scene.getElement(S.id),L=C?i.scene.getElement(C.id):null;T&&$t(T,L,i.scene.getNonDeletedElementsMap(),!1)}i.fonts.onLoaded(x)})}return u},PanelComponent:({elements:e,appState:t,app:n,updateData:i})=>{let r=(0,Tn.useRef)(new Map),a=(0,Tn.useRef)(null),[o,c]=(0,Tn.useState)({}),d=(0,Tn.useRef)(!0),h=(0,Tn.useMemo)(()=>{let s=(l,m)=>Wt(l,t,u=>{if(te(u))return u.fontFamily;let p=Le(u,m);return p?p.fontFamily:null},u=>te(u)||Le(u,m)!==null,u=>u?null:t.currentItemFontFamily||Ul);return o.openPopup==="fontFamily"&&t.openPopup==="fontFamily"?s(Array.from(r.current?.values()??[]),r.current):!o.openPopup&&t.openPopup!=="fontFamily"?s(e,n.scene.getNonDeletedElementsMap()):a.current},[o.openPopup,t,e,n.scene]);return(0,Tn.useEffect)(()=>{a.current=h},[h]),(0,Tn.useEffect)(()=>{Object.keys(o).length&&(i(o),c({}))},[o]),(0,Tn.useEffect)(()=>(d.current=!1,()=>{d.current=!0}),[]),(0,Q.jsxs)("fieldset",{children:[(0,Q.jsx)("legend",{children:y("labels.fontFamily")}),(0,Q.jsx)(wM,{isOpened:t.openPopup==="fontFamily",selectedFontFamily:h,hoveredFontFamily:t.currentHoveredFontFamily,onSelect:s=>{c({openPopup:null,currentHoveredFontFamily:null,currentItemFontFamily:s}),r.current.clear()},onHover:s=>{c({currentHoveredFontFamily:s,cachedElements:new Map(r.current),resetContainers:!0})},onLeave:()=>{c({currentHoveredFontFamily:null,cachedElements:new Map(r.current),resetAll:!0})},onPopupChange:s=>{if(s){r.current.clear();let{editingTextElement:l}=t;if(l?.type==="text"){let m=n.scene.getElement(l.id);r.current.set(l.id,ae(m||l,{},!0))}else{let m=se(e,t,{includeBoundTextElement:!0});for(let u of m)r.current.set(u.id,ae(u,{},!0))}c({openPopup:"fontFamily"})}else{let l={openPopup:null,currentHoveredFontFamily:null,cachedElements:new Map(r.current),resetAll:!0};d.current?i({...o,...l}):c(l),r.current.clear()}}})]})}}),A9=U({name:"changeTextAlign",label:"Change text alignment",trackEvent:!1,perform:(e,t,n,i)=>({elements:Ht(e,t,r=>{if(te(r)){let a=ae(r,{textAlign:n});return $t(a,i.scene.getContainerElement(r),i.scene.getNonDeletedElementsMap()),a}return r},!0),appState:{...t,currentItemTextAlign:n},captureUpdate:N.IMMEDIATELY}),PanelComponent:({elements:e,appState:t,updateData:n,app:i})=>{let r=i.scene.getNonDeletedElementsMap();return(0,Q.jsxs)("fieldset",{children:[(0,Q.jsx)("legend",{children:y("labels.textAlign")}),(0,Q.jsx)(Ei,{group:"text-align",options:[{value:"left",text:y("labels.left"),icon:Gv,testId:"align-left"},{value:"center",text:y("labels.center"),icon:Kv,testId:"align-horizontal-center"},{value:"right",text:y("labels.right"),icon:Zv,testId:"align-right"}],value:Wt(e,t,a=>{if(te(a))return a.textAlign;let o=Le(a,r);return o?o.textAlign:null},a=>te(a)||Le(a,r)!==null,a=>a?null:t.currentItemTextAlign),onChange:a=>n(a)})]})}}),N9=U({name:"changeVerticalAlign",label:"Change vertical alignment",trackEvent:{category:"element"},perform:(e,t,n,i)=>({elements:Ht(e,t,r=>{if(te(r)){let a=ae(r,{verticalAlign:n});return $t(a,i.scene.getContainerElement(r),i.scene.getNonDeletedElementsMap()),a}return r},!0),appState:{...t},captureUpdate:N.IMMEDIATELY}),PanelComponent:({elements:e,appState:t,updateData:n,app:i})=>(0,Q.jsx)("fieldset",{children:(0,Q.jsx)(Ei,{group:"text-align",options:[{value:ki.TOP,text:y("labels.alignTop"),icon:(0,Q.jsx)(Xv,{theme:t.theme}),testId:"align-top"},{value:ki.MIDDLE,text:y("labels.centerVertically"),icon:(0,Q.jsx)(Qv,{theme:t.theme}),testId:"align-middle"},{value:ki.BOTTOM,text:y("labels.alignBottom"),icon:(0,Q.jsx)(qv,{theme:t.theme}),testId:"align-bottom"}],value:Wt(e,t,r=>{if(te(r)&&r.containerId)return r.verticalAlign;let a=Le(r,i.scene.getNonDeletedElementsMap());return a?a.verticalAlign:null},r=>te(r)||Le(r,i.scene.getNonDeletedElementsMap())!==null,r=>r?null:ki.MIDDLE),onChange:r=>n(r)})})}),P9=U({name:"changeRoundness",label:"Change edge roundness",trackEvent:!1,perform:(e,t,n)=>({elements:Ht(e,t,i=>le(i)?i:ae(i,{roundness:n==="round"?{type:rc(i.type)?Rn.ADAPTIVE_RADIUS:Rn.PROPORTIONAL_RADIUS}:null})),appState:{...t,currentItemRoundness:n},captureUpdate:N.IMMEDIATELY}),PanelComponent:({elements:e,appState:t,updateData:n})=>{let i=zh(Se(e),t).some(r=>r.roundness?.type===Rn.LEGACY);return(0,Q.jsxs)("fieldset",{children:[(0,Q.jsx)("legend",{children:y("labels.edges")}),(0,Q.jsx)(Ei,{group:"edges",options:[{value:"sharp",text:y("labels.sharp"),icon:Mv},{value:"round",text:y("labels.round"),icon:Dv}],value:Wt(e,t,r=>i?null:r.roundness?"round":"sharp",r=>!mt(r)&&r.hasOwnProperty("roundness"),r=>r?null:t.currentItemRoundness),onChange:r=>n(r)})]})}}),px=e=>[{value:null,text:y("labels.arrowhead_none"),keyBinding:"q",icon:Lv},{value:"arrow",text:y("labels.arrowhead_arrow"),keyBinding:"w",icon:(0,Q.jsx)(Rv,{flip:e})},{value:"triangle",text:y("labels.arrowhead_triangle"),icon:(0,Q.jsx)(_v,{flip:e}),keyBinding:"e"},{value:"triangle_outline",text:y("labels.arrowhead_triangle_outline"),icon:(0,Q.jsx)(Ov,{flip:e}),keyBinding:"r"},{value:"circle",text:y("labels.arrowhead_circle"),keyBinding:"a",icon:(0,Q.jsx)(Av,{flip:e})},{value:"circle_outline",text:y("labels.arrowhead_circle_outline"),keyBinding:"s",icon:(0,Q.jsx)(Nv,{flip:e})},{value:"diamond",text:y("labels.arrowhead_diamond"),icon:(0,Q.jsx)(Fv,{flip:e}),keyBinding:"d"},{value:"diamond_outline",text:y("labels.arrowhead_diamond_outline"),icon:(0,Q.jsx)($v,{flip:e}),keyBinding:"f"},{value:"bar",text:y("labels.arrowhead_bar"),keyBinding:"z",icon:(0,Q.jsx)(Pv,{flip:e})},{value:"crowfoot_one",text:y("labels.arrowhead_crowfoot_one"),icon:(0,Q.jsx)(zv,{flip:e}),keyBinding:"c"},{value:"crowfoot_many",text:y("labels.arrowhead_crowfoot_many"),icon:(0,Q.jsx)(Bv,{flip:e}),keyBinding:"x"},{value:"crowfoot_one_or_many",text:y("labels.arrowhead_crowfoot_one_or_many"),icon:(0,Q.jsx)(jv,{flip:e}),keyBinding:"v"}],_9=U({name:"changeArrowhead",label:"Change arrowheads",trackEvent:!1,perform:(e,t,n)=>({elements:Ht(e,t,i=>{if(De(i)){let{position:r,type:a}=n;if(r==="start")return ae(i,{startArrowhead:a});if(r==="end")return ae(i,{endArrowhead:a})}return i}),appState:{...t,[n.position==="start"?"currentItemStartArrowhead":"currentItemEndArrowhead"]:n.type},captureUpdate:N.IMMEDIATELY}),PanelComponent:({elements:e,appState:t,updateData:n})=>{let i=dl().rtl;return(0,Q.jsxs)("fieldset",{children:[(0,Q.jsx)("legend",{children:y("labels.arrowheads")}),(0,Q.jsxs)("div",{className:"iconSelectList buttonList",children:[(0,Q.jsx)(ux,{label:"arrowhead_start",options:px(!i),value:Wt(e,t,r=>De(r)&&ho(r.type)?r.startArrowhead:t.currentItemStartArrowhead,!0,t.currentItemStartArrowhead),onChange:r=>n({position:"start",type:r}),numberOfOptionsToAlwaysShow:4}),(0,Q.jsx)(ux,{label:"arrowhead_end",group:"arrowheads",options:px(!!i),value:Wt(e,t,r=>De(r)&&ho(r.type)?r.endArrowhead:t.currentItemEndArrowhead,!0,t.currentItemEndArrowhead),onChange:r=>n({position:"end",type:r}),numberOfOptionsToAlwaysShow:4})]})]})}}),O9=U({name:"changeArrowType",label:"Change arrow types",trackEvent:!1,perform:(e,t,n,i)=>{let r=Ht(e,t,c=>{if(!mt(c))return c;let d=ae(c,{roundness:n===ut.round?{type:Rn.PROPORTIONAL_RADIUS}:null,elbowed:n===ut.elbow,points:n===ut.elbow||c.elbowed?[c.points[0],c.points[c.points.length-1]]:c.points});if(le(d)){let h=i.scene.getNonDeletedElementsMap();i.dismissLinearEditor();let s=ne.getPointAtIndexGlobalCoordinates(d,0,h),l=ne.getPointAtIndexGlobalCoordinates(d,-1,h),m=!d.startBinding&&Xr(jr(s),e,h,t.zoom,!1,!0),u=!d.endBinding&&Xr(jr(l),e,h,t.zoom,!1,!0),p=m||d.startBinding&&h.get(d.startBinding.elementId),f=u||d.endBinding&&h.get(d.endBinding.elementId),g=m?eh(d,m,"start"):s,v=u?eh(d,u,"end"):l;m&&Zr(d,m,"start",h),u&&Zr(d,u,"end",h),W(d,{points:[g,v].map(E=>G(E[0]-d.x,E[1]-d.y)),...p&&d.startBinding?{startBinding:{...d.startBinding,...th(d,p,"start",h)}}:{},...f&&d.endBinding?{endBinding:{...d.endBinding,...th(d,f,"end",h)}}:{}}),ne.updateEditorMidPointsCache(d,h,i.state)}return d}),a={...t,currentItemArrowType:n},o=t.selectedLinearElement?.elementId;if(o){let c=r.find(d=>d.id===o);c&&(a.selectedLinearElement=new ne(c))}return{elements:r,appState:a,captureUpdate:N.IMMEDIATELY}},PanelComponent:({elements:e,appState:t,updateData:n})=>(0,Q.jsxs)("fieldset",{children:[(0,Q.jsx)("legend",{children:y("labels.arrowtypes")}),(0,Q.jsx)(Ei,{group:"arrowtypes",options:[{value:ut.sharp,text:y("labels.arrowtype_sharp"),icon:I0,testId:"sharp-arrow"},{value:ut.round,text:y("labels.arrowtype_round"),icon:k0,testId:"round-arrow"},{value:ut.elbow,text:y("labels.arrowtype_elbowed"),icon:T0,testId:"elbow-arrow"}],value:Wt(e,t,i=>mt(i)?i.elbowed?ut.elbow:i.roundness?ut.round:ut.sharp:null,i=>mt(i),i=>i?null:t.currentItemArrowType),onChange:i=>n(i)})]})}),ua=({viewportX:e,viewportY:t,nextZoom:n},i)=>{let r=e-i.offsetLeft,a=t-i.offsetTop,o=i.zoom.value,c=i.scrollX+(r-r/o),d=i.scrollY+(a-a/o),h=-(r-r/n),s=-(a-a/n);return{scrollX:c+h,scrollY:d+s,zoom:{value:n}}},sl=()=>{let e=document.querySelector(".excalidraw-tooltip");if(e)return e;let t=document.createElement("div");return document.body.appendChild(t),t.classList.add("excalidraw-tooltip"),t},hC=(e,t,n="bottom")=>{let i=e.getBoundingClientRect(),r=window.innerWidth,a=window.innerHeight,o=5,c=t.left+t.width/2-i.width/2;c<0?c=o:c+i.width>=r&&(c=r-i.width-o);let d;n==="bottom"?(d=t.top+t.height+o,d+i.height>=a&&(d=t.top-i.height-o)):(d=t.top-i.height-o,d<0&&(d=t.top+t.height+o)),Object.assign(e.style,{top:`${d}px`,left:`${c}px`})},CM=(e,t,n,i)=>{t.classList.add("excalidraw-tooltip--visible"),t.style.minWidth=i?"50ch":"10ch",t.style.maxWidth=i?"50ch":"15ch",t.textContent=n;let r=e.getBoundingClientRect();hC(t,r)},Ia=({children:e,label:t,long:n=!1,style:i,disabled:r})=>((0,uC.useEffect)(()=>()=>sl().classList.remove("excalidraw-tooltip--visible"),[]),r?null:(0,mC.jsx)("div",{className:"excalidraw-tooltip-wrapper",onPointerEnter:a=>CM(a.currentTarget,sl(),t,n),onPointerLeave:()=>sl().classList.remove("excalidraw-tooltip--visible"),style:i,children:e})),F9=U({name:"changeViewBackgroundColor",label:"labels.canvasBackground",paletteName:"Change canvas background color",trackEvent:!1,predicate:(e,t,n,i)=>!!i.props.UIOptions.canvasActions.changeViewBackgroundColor&&!t.viewModeEnabled,perform:(e,t,n)=>({appState:{...t,...n},captureUpdate:n.viewBackgroundColor?N.IMMEDIATELY:N.EVENTUALLY}),PanelComponent:({elements:e,appState:t,updateData:n,appProps:i})=>(0,Da.jsx)(tg,{palette:null,topPicks:Fu,label:y("labels.canvasBackground"),type:"canvasBackground",color:t.viewBackgroundColor,onChange:r=>n({viewBackgroundColor:r}),"data-testid":"canvas-background-picker",elements:e,appState:t,updateData:n})}),ol=U({name:"clearCanvas",label:"labels.clearCanvas",paletteName:"Clear canvas",icon:Qi,trackEvent:{category:"canvas"},predicate:(e,t,n,i)=>!!i.props.UIOptions.canvasActions.clearCanvas&&!t.viewModeEnabled&&t.openDialog?.name!=="elementLinkSelector",perform:(e,t,n,i)=>(i.imageCache.clear(),{elements:e.map(r=>ae(r,{isDeleted:!0})),appState:{...Xs(),files:{},theme:t.theme,penMode:t.penMode,penDetected:t.penDetected,exportBackground:t.exportBackground,exportEmbedScene:t.exportEmbedScene,gridSize:t.gridSize,gridStep:t.gridStep,gridModeEnabled:t.gridModeEnabled,stats:t.stats,pasteDialog:t.pasteDialog,activeTool:t.activeTool.type==="image"?{...t.activeTool,type:"selection"}:t.activeTool},captureUpdate:N.IMMEDIATELY})}),fx=U({name:"zoomIn",label:"buttons.zoomIn",viewMode:!0,icon:um,trackEvent:{category:"canvas"},perform:(e,t,n,i)=>({appState:{...t,...ua({viewportX:t.width/2+t.offsetLeft,viewportY:t.height/2+t.offsetTop,nextZoom:Li(t.zoom.value+Gs)},t),userToFollow:null},captureUpdate:N.EVENTUALLY}),PanelComponent:({updateData:e,appState:t})=>(0,Da.jsx)(ce,{type:"button",className:"zoom-in-button zoom-button",icon:um,title:`${y("buttons.zoomIn")} \u2014 ${F("CtrlOrCmd++")}`,"aria-label":y("buttons.zoomIn"),disabled:t.zoom.value>=Wu,onClick:()=>{e(null)}}),keyTest:e=>(e.code===me.EQUAL||e.code===me.NUM_ADD)&&(e[k.CTRL_OR_CMD]||e.shiftKey)}),gx=U({name:"zoomOut",label:"buttons.zoomOut",icon:mm,viewMode:!0,trackEvent:{category:"canvas"},perform:(e,t,n,i)=>({appState:{...t,...ua({viewportX:t.width/2+t.offsetLeft,viewportY:t.height/2+t.offsetTop,nextZoom:Li(t.zoom.value-Gs)},t),userToFollow:null},captureUpdate:N.EVENTUALLY}),PanelComponent:({updateData:e,appState:t})=>(0,Da.jsx)(ce,{type:"button",className:"zoom-out-button zoom-button",icon:mm,title:`${y("buttons.zoomOut")} \u2014 ${F("CtrlOrCmd+-")}`,"aria-label":y("buttons.zoomOut"),disabled:t.zoom.value<=Hu,onClick:()=>{e(null)}}),keyTest:e=>(e.code===me.MINUS||e.code===me.NUM_SUBTRACT)&&(e[k.CTRL_OR_CMD]||e.shiftKey)}),vx=U({name:"resetZoom",label:"buttons.resetZoom",icon:nv,viewMode:!0,trackEvent:{category:"canvas"},perform:(e,t,n,i)=>({appState:{...t,...ua({viewportX:t.width/2+t.offsetLeft,viewportY:t.height/2+t.offsetTop,nextZoom:Li(1)},t),userToFollow:null},captureUpdate:N.EVENTUALLY}),PanelComponent:({updateData:e,appState:t})=>(0,Da.jsx)(Ia,{label:y("buttons.resetZoom"),style:{height:"100%"},children:(0,Da.jsxs)(ce,{type:"button",className:"reset-zoom-button zoom-button",title:y("buttons.resetZoom"),"aria-label":y("buttons.resetZoom"),onClick:()=>{e(null)},children:[(t.zoom.value*100).toFixed(0),"%"]})}),keyTest:e=>(e.code===me.ZERO||e.code===me.NUM_ZERO)&&(e[k.CTRL_OR_CMD]||e.shiftKey)}),IM=(e,t,n=1)=>{let[i,r,a,o]=e,c=a-i,d=t.width/c,h=o-r,s=t.height/h,l=Math.min(d,s)*Ft(n,.1,1);return Math.min(l,1)},TM=({bounds:e,appState:t,canvasOffsets:n,fitToViewport:i=!1,viewportZoomFactor:r=1,minZoom:a=-1/0,maxZoom:o=1/0})=>{r=Ft(r,Hu,Wu);let[c,d,h,s]=e,l=(c+h)/2,m=(d+s)/2,u=n?.left??0,p=n?.top??0,f=n?.right??0,g=n?.bottom??0,v=t.width-u-f,E=t.height-p-g,b;if(i){let S=h-c,C=s-d;b=Math.min(v/S,E/C)*r}else b=IM(e,{width:v,height:E},r);let w=Li(Ft(y1(b,Gs,"floor"),a,o)),x=nb({scenePoint:{x:l,y:m},viewportDimensions:{width:t.width,height:t.height},offsets:n,zoom:{value:w}});return{appState:{...t,scrollX:x.scrollX,scrollY:x.scrollY,zoom:{value:w}},captureUpdate:N.EVENTUALLY}},uu=({canvasOffsets:e,targetElements:t,appState:n,fitToViewport:i,viewportZoomFactor:r,minZoom:a,maxZoom:o})=>{let c=Ve(Se(t));return TM({canvasOffsets:e,bounds:c,appState:n,fitToViewport:i,viewportZoomFactor:r,minZoom:a,maxZoom:o})},$9=U({name:"zoomToFitSelectionInViewport",label:"labels.zoomToFitViewport",icon:gc,trackEvent:{category:"canvas"},perform:(e,t,n,i)=>{let r=i.scene.getSelectedElements(t);return uu({targetElements:r.length?r:e,appState:{...t,userToFollow:null},fitToViewport:!1,canvasOffsets:i.getEditorUIOffsets()})},keyTest:e=>e.code===me.TWO&&e.shiftKey&&!e.altKey&&!e[k.CTRL_OR_CMD]}),B9=U({name:"zoomToFitSelection",label:"helpDialog.zoomToSelection",icon:gc,trackEvent:{category:"canvas"},perform:(e,t,n,i)=>{let r=i.scene.getSelectedElements(t);return uu({targetElements:r.length?r:e,appState:{...t,userToFollow:null},fitToViewport:!0,canvasOffsets:i.getEditorUIOffsets()})},keyTest:e=>e.code===me.THREE&&e.shiftKey&&!e.altKey&&!e[k.CTRL_OR_CMD]}),z9=U({name:"zoomToFit",label:"helpDialog.zoomToFit",icon:gc,viewMode:!0,trackEvent:{category:"canvas"},perform:(e,t,n,i)=>uu({targetElements:e,appState:{...t,userToFollow:null},fitToViewport:!1,canvasOffsets:i.getEditorUIOffsets()}),keyTest:e=>e.code===me.ONE&&e.shiftKey&&!e.altKey&&!e[k.CTRL_OR_CMD]}),Wd=U({name:"toggleTheme",label:(e,t)=>t.theme===he.DARK?"buttons.lightMode":"buttons.darkMode",keywords:["toggle","dark","light","mode","theme"],icon:e=>e.theme===he.LIGHT?lc:cc,viewMode:!0,trackEvent:{category:"canvas"},perform:(e,t,n)=>({appState:{...t,theme:n||(t.theme===he.LIGHT?he.DARK:he.LIGHT)},captureUpdate:N.EVENTUALLY}),keyTest:e=>e.altKey&&e.shiftKey&&e.code===me.D,predicate:(e,t,n,i)=>!!i.props.UIOptions.canvasActions.toggleTheme}),j9=U({name:"toggleEraserTool",label:"toolBar.eraser",trackEvent:{category:"toolbar"},perform:(e,t)=>{let n;return ti(t)?n=it(t,{...t.activeTool.lastActiveTool||{type:"selection"},lastActiveToolBeforeEraser:null}):n=it(t,{type:"eraser",lastActiveToolBeforeEraser:t.activeTool}),{appState:{...t,selectedElementIds:{},selectedGroupIds:{},activeEmbeddable:null,activeTool:n},captureUpdate:N.IMMEDIATELY}},keyTest:e=>e.key===k.E}),kM=U({name:"toggleHandTool",label:"toolBar.hand",paletteName:"Toggle hand tool",trackEvent:{category:"toolbar"},icon:_m,viewMode:!1,perform:(e,t,n,i)=>{let r;return _a(t)?r=it(t,{...t.activeTool.lastActiveTool||{type:"selection"},lastActiveToolBeforeEraser:null}):(r=it(t,{type:"hand",lastActiveToolBeforeEraser:t.activeTool}),ve(i.interactiveCanvas,ye.GRAB)),{appState:{...t,selectedElementIds:{},selectedGroupIds:{},activeEmbeddable:null,activeTool:r},captureUpdate:N.IMMEDIATELY}},keyTest:e=>!e.altKey&&!e[k.CTRL_OR_CMD]&&e.key===k.H}),Un=U({name:"finalize",label:"",trackEvent:!1,perform:(e,t,n,i)=>{let{interactiveCanvas:r,focusContainer:a,scene:o}=i,c=o.getNonDeletedElementsMap();if(t.editingLinearElement){let{elementId:m,startBindingElement:u,endBindingElement:p}=t.editingLinearElement,f=ne.getElement(m,c);if(f)return qi(f)&&Jm(f,u,p,c,o),{elements:f.points.length<2||Mo(f)?e.filter(g=>g.id!==f.id):void 0,appState:{...t,cursorButton:"up",editingLinearElement:null},captureUpdate:N.IMMEDIATELY}}let d=e,h=t.pendingImageElementId&&o.getElement(t.pendingImageElementId);h&&W(h,{isDeleted:!0},!1),window.document.activeElement instanceof HTMLElement&&a();let s=t.multiElement?t.multiElement:t.newElement?.type==="freedraw"?t.newElement:null;if(s){if(s.type!=="freedraw"&&t.lastPointerDownWith!=="touch"){let{points:u,lastCommittedPoint:p}=s;(!p||u[u.length-1]!==p)&&W(s,{points:s.points.slice(0,-1)})}Mo(s)&&(d=d.filter(u=>u.id!==s.id));let m=wc(s.points,t.zoom.value);if((s.type==="line"||s.type==="freedraw")&&m){let u=s.points,p=u[0];W(s,{points:u.map((f,g)=>g===u.length-1?G(p[0],p[1]):f)})}if(qi(s)&&!m&&s.points.length>1){let[u,p]=ne.getPointAtIndexGlobalCoordinates(s,-1,Ee(e));Cc(s,t,{x:u,y:p},c,e)}}(!t.activeTool.locked&&t.activeTool.type!=="freedraw"||!s)&&Nn(r);let l;return t.activeTool.type==="eraser"?l=it(t,{...t.activeTool.lastActiveTool||{type:"selection"},lastActiveToolBeforeEraser:null}):l=it(t,{type:"selection"}),{elements:d,appState:{...t,cursorButton:"up",activeTool:(t.activeTool.locked||t.activeTool.type==="freedraw")&&s?t.activeTool:l,activeEmbeddable:null,newElement:null,selectionElement:null,multiElement:null,editingTextElement:null,startBoundElement:null,suggestedBindings:[],selectedElementIds:s&&!t.activeTool.locked&&t.activeTool.type!=="freedraw"?{...t.selectedElementIds,[s.id]:!0}:t.selectedElementIds,selectedLinearElement:s&&De(s)?new ne(s):t.selectedLinearElement,pendingImageElementId:null},captureUpdate:N.IMMEDIATELY}},keyTest:(e,t)=>e.key===k.ESCAPE&&(t.editingLinearElement!==null||!t.newElement&&t.multiElement===null)||(e.key===k.ESCAPE||e.key===k.ENTER)&&t.multiElement!==null,PanelComponent:({appState:e,updateData:t,data:n})=>(0,pC.jsx)(ce,{type:"button",icon:mv,title:y("buttons.done"),"aria-label":y("buttons.done"),onClick:t,visible:e.multiElement!=null,size:n?.size||"medium",style:{pointerEvents:"all"}})}),MM=e=>{let{id:t}=Si(),[n,i]=(0,fC.useState)(e.value),r=o=>{e.ignoreFocus||k1(o.target);let c=o.target.value;c!==e.value&&e.onChange(c)},a=o=>{if(o.key===k.ENTER){if(o.preventDefault(),o.nativeEvent.isComposing||o.keyCode===229)return;o.currentTarget.blur()}};return(0,hl.jsxs)("div",{className:"ProjectName",children:[(0,hl.jsx)("label",{className:"ProjectName-label",htmlFor:"filename",children:`${e.label}:`}),(0,hl.jsx)("input",{type:"text",className:"TextInput",onBlur:r,onKeyDown:a,id:`${t}-filename`,value:n,onChange:o=>i(o.target.value)})]})},DM=e=>{let t=e.title||(e.value===he.DARK?y("buttons.lightMode"):y("buttons.darkMode"));return(0,Es.jsx)(ce,{type:"icon",icon:e.value===he.LIGHT?bx.MOON:bx.SUN,title:t,"aria-label":t,onClick:()=>e.onChange(e.value===he.DARK?he.LIGHT:he.DARK),"data-testid":"toggle-dark-mode"})},bx={SUN:(0,Es.jsx)("svg",{width:"512",height:"512",className:"rtl-mirror",viewBox:"0 0 512 512",children:(0,Es.jsx)("path",{fill:"currentColor",d:"M256 160c-52.9 0-96 43.1-96 96s43.1 96 96 96 96-43.1 96-96-43.1-96-96-96zm246.4 80.5l-94.7-47.3 33.5-100.4c4.5-13.6-8.4-26.5-21.9-21.9l-100.4 33.5-47.4-94.8c-6.4-12.8-24.6-12.8-31 0l-47.3 94.7L92.7 70.8c-13.6-4.5-26.5 8.4-21.9 21.9l33.5 100.4-94.7 47.4c-12.8 6.4-12.8 24.6 0 31l94.7 47.3-33.5 100.5c-4.5 13.6 8.4 26.5 21.9 21.9l100.4-33.5 47.3 94.7c6.4 12.8 24.6 12.8 31 0l47.3-94.7 100.4 33.5c13.6 4.5 26.5-8.4 21.9-21.9l-33.5-100.4 94.7-47.3c13-6.5 13-24.7.2-31.1zm-155.9 106c-49.9 49.9-131.1 49.9-181 0-49.9-49.9-49.9-131.1 0-181 49.9-49.9 131.1-49.9 181 0 49.9 49.9 49.9 131.1 0 181z"})}),MOON:(0,Es.jsx)("svg",{width:"512",height:"512",className:"rtl-mirror",viewBox:"0 0 512 512",children:(0,Es.jsx)("path",{fill:"currentColor",d:"M283.211 512c78.962 0 151.079-35.925 198.857-94.792 7.068-8.708-.639-21.43-11.562-19.35-124.203 23.654-238.262-71.576-238.262-196.954 0-72.222 38.662-138.635 101.498-174.394 9.686-5.512 7.25-20.197-3.756-22.23A258.156 258.156 0 0 0 283.211 0c-141.309 0-256 114.511-256 256 0 141.309 114.511 256 256 256z"})})},mu=(e,{selectedElementIds:t},n)=>{e=Se(e);let i=n&&Ye(e,{selectedElementIds:t}),r=null,a=i?se(e,{selectedElementIds:t},{includeBoundTextElement:!0}):e;return i&&(a.length===1&&ge(a[0])?(r=a[0],a=Fh(e,r)):a.length>1&&(a=se(e,{selectedElementIds:t},{includeBoundTextElement:!0,includeElementsInFrames:!0}))),{exportingFrame:r,exportedElements:ii(a)}},hu=async(e,t,n,i,{exportBackground:r,exportPadding:a=Ks,viewBackgroundColor:o,name:c=n.name||v1,fileHandle:d=null,exportingFrame:h=null})=>{if(t.length===0)throw new Error(y("alerts.cannotExportEmptyCanvas"));if(e==="svg"||e==="clipboard-svg"){let l=Th(t,{exportBackground:r,exportWithDarkMode:n.exportWithDarkMode,viewBackgroundColor:o,exportPadding:a,exportScale:n.exportScale,exportEmbedScene:n.exportEmbedScene&&e==="svg"},i,{exportingFrame:h});if(e==="svg")return yh(l.then(m=>new Blob([m.outerHTML],{type:Ot.svg})),{description:"Export to SVG",name:c,extension:n.exportEmbedScene?"excalidraw.svg":"svg",mimeTypes:[Wl.svg],fileHandle:d});if(e==="clipboard-svg"){let m=await l.then(u=>u.outerHTML);try{await Io(m)}catch{throw new Error(y("errors.copyToSystemClipboardFailed"))}return}}let s=Xb(t,n,i,{exportBackground:r,viewBackgroundColor:o,exportPadding:a,exportingFrame:h});if(e==="png"){let l=Za(s);return n.exportEmbedScene&&(l=l.then(m=>import("./chunk-24LGQEKE.js").then(({encodePngMetadata:u})=>u({blob:m,metadata:$b(t,n,i,"local")})))),yh(l,{description:"Export to PNG",name:c,extension:n.exportEmbedScene?"excalidraw.png":"png",mimeTypes:[Wl.png],fileHandle:d})}else if(e==="clipboard")try{let l=Za(s);await ay(l)}catch(l){throw console.warn(l),l.name==="CANVAS_POSSIBLY_TOO_BIG"?new Error(y("canvasError.canvasTooBig")):Na&&l.name==="TypeError"?new Error(`${y("alerts.couldNotCopyToClipboard")}
43
+
44
+ ${y("hints.firefox_clipboard_write")}`):new Error(y("alerts.couldNotCopyToClipboard"))}else throw new Error("Unsupported export type")},LM=async(e,t,n,i)=>{let{exportBackground:r,viewBackgroundColor:a,fileHandle:o}=t,c=ky(o);if(!o||!My(c))throw new Error("fileHandle should exist and should be of type svg or png when resaving");t={...t,exportEmbedScene:!0};let{exportedElements:d,exportingFrame:h}=mu(e,t,!1);return await hu(c,d,t,n,{exportBackground:r,viewBackgroundColor:a,name:i,fileHandle:o,exportingFrame:h}),{fileHandle:o}},ag=({children:e,checked:t,onChange:n,className:i})=>(0,pl.jsxs)("div",{className:$("Checkbox",i,{"is-checked":t}),onClick:r=>{n(!t,r),r.currentTarget.querySelector(".Checkbox-box").focus()},children:[(0,pl.jsx)("button",{type:"button",className:"Checkbox-box",role:"checkbox","aria-checked":t,children:ov}),(0,pl.jsx)("div",{className:"Checkbox-label",children:e})]}),RM=U({name:"changeProjectName",label:"labels.fileTitle",trackEvent:!1,perform:(e,t,n)=>({appState:{...t,name:n},captureUpdate:N.EVENTUALLY}),PanelComponent:({appState:e,updateData:t,appProps:n,data:i,app:r})=>(0,Qt.jsx)(MM,{label:y("labels.fileTitle"),value:r.getName(),onChange:a=>t(a),ignoreFocus:i?.ignoreFocus??!1})}),AM=U({name:"changeExportScale",label:"imageExportDialog.scale",trackEvent:{category:"export",action:"scale"},perform:(e,t,n)=>({appState:{...t,exportScale:n},captureUpdate:N.EVENTUALLY}),PanelComponent:({elements:e,appState:t,updateData:n})=>{let i=Se(e),r=Ye(i,t)?se(i,t):i;return(0,Qt.jsx)(Qt.Fragment,{children:Yu.map(a=>{let[o,c]=qb(r,Ks,a),d=`${y("imageExportDialog.label.scale")} ${a}x (${o}x${c})`;return(0,Qt.jsx)(ce,{size:"small",type:"radio",icon:`${a}x`,name:"export-canvas-scale",title:d,"aria-label":d,id:"export-canvas-scale",checked:a===t.exportScale,onChange:()=>n(a)},a)})})}}),NM=U({name:"changeExportBackground",label:"imageExportDialog.label.withBackground",trackEvent:{category:"export",action:"toggleBackground"},perform:(e,t,n)=>({appState:{...t,exportBackground:n},captureUpdate:N.EVENTUALLY}),PanelComponent:({appState:e,updateData:t})=>(0,Qt.jsx)(ag,{checked:e.exportBackground,onChange:n=>t(n),children:y("imageExportDialog.label.withBackground")})}),gC=U({name:"changeExportEmbedScene",label:"imageExportDialog.tooltip.embedScene",trackEvent:{category:"export",action:"embedScene"},perform:(e,t,n)=>({appState:{...t,exportEmbedScene:n},captureUpdate:N.EVENTUALLY}),PanelComponent:({appState:e,updateData:t})=>(0,Qt.jsxs)(ag,{checked:e.exportEmbedScene,onChange:n=>t(n),children:[y("imageExportDialog.label.embedScene"),(0,Qt.jsx)(Ia,{label:y("imageExportDialog.tooltip.embedScene"),long:!0,children:(0,Qt.jsx)("div",{className:"excalidraw-tooltip-icon",children:hv})})]})}),yx=U({name:"saveToActiveFile",label:"buttons.save",icon:lo,trackEvent:{category:"export"},predicate:(e,t,n,i)=>!!i.props.UIOptions.canvasActions.saveToActiveFile&&!!t.fileHandle&&!t.viewModeEnabled,perform:async(e,t,n,i)=>{let r=!!t.fileHandle;try{let{fileHandle:a}=Kh(t.fileHandle)?await LM(e,t,i.files,i.getName()):await Eh(e,t,i.files,i.getName());return{captureUpdate:N.EVENTUALLY,appState:{...t,fileHandle:a,toast:r?{message:a?.name?y("toast.fileSavedToFilename").replace("{filename}",`"${a.name}"`):y("toast.fileSaved")}:null}}}catch(a){return a?.name!=="AbortError"?console.error(a):console.warn(a),{captureUpdate:N.EVENTUALLY}}},keyTest:e=>e.key===k.S&&e[k.CTRL_OR_CMD]&&!e.shiftKey}),vC=U({name:"saveFileToDisk",label:"exportDialog.disk_title",icon:lo,viewMode:!0,trackEvent:{category:"export"},perform:async(e,t,n,i)=>{try{let{fileHandle:r}=await Eh(e,{...t,fileHandle:null},i.files,i.getName());return{captureUpdate:N.EVENTUALLY,appState:{...t,openDialog:null,fileHandle:r,toast:{message:y("toast.fileSaved")}}}}catch(r){return r?.name!=="AbortError"?console.error(r):console.warn(r),{captureUpdate:N.EVENTUALLY}}},keyTest:e=>e.key===k.S&&e.shiftKey&&e[k.CTRL_OR_CMD],PanelComponent:({updateData:e})=>(0,Qt.jsx)(ce,{type:"button",icon:cv,title:y("buttons.saveAs"),"aria-label":y("buttons.saveAs"),showAriaLabel:lt().editor.isMobile,hidden:!$l,onClick:()=>e(null),"data-testid":"save-as-button"})}),kf=U({name:"loadScene",label:"buttons.load",trackEvent:{category:"export"},predicate:(e,t,n,i)=>!!i.props.UIOptions.canvasActions.loadScene&&!t.viewModeEnabled,perform:async(e,t,n,i)=>{try{let{elements:r,appState:a,files:o}=await Bb(t,e);return{elements:r,appState:a,files:o,captureUpdate:N.IMMEDIATELY}}catch(r){return r?.name==="AbortError"?(console.warn(r),!1):{elements:e,appState:{...t,errorMessage:r.message},files:i.files,captureUpdate:N.EVENTUALLY}}},keyTest:e=>e[k.CTRL_OR_CMD]&&e.key===k.O}),PM=U({name:"exportWithDarkMode",label:"imageExportDialog.label.darkMode",trackEvent:{category:"export",action:"toggleTheme"},perform:(e,t,n)=>({appState:{...t,exportWithDarkMode:n},captureUpdate:N.EVENTUALLY}),PanelComponent:({appState:e,updateData:t})=>(0,Qt.jsx)("div",{style:{display:"flex",justifyContent:"flex-end",marginTop:"-45px",marginBottom:"10px"},children:(0,Qt.jsx)(DM,{value:e.exportWithDarkMode?he.DARK:he.LIGHT,onChange:n=>{t(n===he.DARK)},title:y("imageExportDialog.label.darkMode")})})}),bC="{}",_M=U({name:"copyStyles",label:"labels.copyStyles",icon:Um,trackEvent:{category:"element"},perform:(e,t,n,i)=>{let r=[],a=e.find(o=>t.selectedElementIds[o.id]);if(r.push(a),a&&ri(a)){let o=Le(a,i.scene.getNonDeletedElementsMap());r.push(o)}return a&&(bC=JSON.stringify(r)),{appState:{...t,toast:{message:y("toast.copyStyles")}},captureUpdate:N.EVENTUALLY}},keyTest:e=>e[k.CTRL_OR_CMD]&&e.altKey&&e.code===me.C}),OM=U({name:"pasteStyles",label:"labels.pasteStyles",icon:Um,trackEvent:{category:"element"},perform:(e,t,n,i)=>{let r=JSON.parse(bC),a=r[0],o=r[1];if(!B1(a))return{elements:e,captureUpdate:N.EVENTUALLY};let c=se(e,t,{includeBoundTextElement:!0}),d=c.map(h=>h.id);return{elements:e.map(h=>{if(d.includes(h.id)){let s=a;if(te(h)&&h.containerId&&(s=o),!s)return h;let l=ae(h,{backgroundColor:s?.backgroundColor,strokeWidth:s?.strokeWidth,strokeColor:s?.strokeColor,strokeStyle:s?.strokeStyle,fillStyle:s?.fillStyle,opacity:s?.opacity,roughness:s?.roughness,roundness:s.roundness?z1(s.roundness.type,h)?s.roundness:j1(h):null});if(te(l)){let m=s.fontSize||jl,u=s.fontFamily||Ul;l=ae(l,{fontSize:m,fontFamily:u,textAlign:s.textAlign||zu,lineHeight:s.lineHeight||ja(u)});let p=null;l.containerId&&(p=c.find(f=>te(l)&&f.id===l.containerId)||null),$t(l,p,i.scene.getNonDeletedElementsMap())}return l.type==="arrow"&&mt(s)&&(l=ae(l,{startArrowhead:s.startArrowhead,endArrowhead:s.endArrowhead})),ge(h)&&(l=ae(l,{roundness:null,backgroundColor:"transparent"})),l}return h}),captureUpdate:N.IMMEDIATELY}},keyTest:e=>e[k.CTRL_OR_CMD]&&e.altKey&&e.code===me.V}),H9=U({name:"toggleCanvasMenu",label:"buttons.menu",trackEvent:{category:"menu"},perform:(e,t)=>({appState:{...t,openMenu:t.openMenu==="canvas"?null:"canvas"},captureUpdate:N.EVENTUALLY}),PanelComponent:({appState:e,updateData:t})=>(0,sg.jsx)(ce,{type:"button",icon:hm,"aria-label":y("buttons.menu"),onClick:t,selected:e.openMenu==="canvas"})}),W9=U({name:"toggleEditMenu",label:"buttons.edit",trackEvent:{category:"menu"},perform:(e,t)=>({appState:{...t,openMenu:t.openMenu==="shape"?null:"shape"},captureUpdate:N.EVENTUALLY}),PanelComponent:({elements:e,appState:t,updateData:n})=>(0,sg.jsx)(ce,{visible:$c(t,Se(e)),type:"button",icon:dv,"aria-label":y("buttons.edit"),onClick:n,selected:t.openMenu==="shape"})}),og=U({name:"toggleShortcuts",label:"welcomeScreen.defaults.helpHint",icon:rv,viewMode:!0,trackEvent:{category:"menu",action:"toggleHelpDialog"},perform:(e,t,n,{focusContainer:i})=>(t.openDialog?.name==="help"&&i(),{appState:{...t,openDialog:t.openDialog?.name==="help"?null:{name:"help"}},captureUpdate:N.EVENTUALLY}),keyTest:e=>e.key===k.QUESTION_MARK}),FM=e=>{if(e.length>=2){let t=e[0].groupIds;for(let n of t)if(e.reduce((i,r)=>i&&vo(r,n),!0))return!0}return!1},Ex=(e,t,n)=>{let i=n.scene.getSelectedElements({selectedElementIds:t.selectedElementIds,includeBoundTextElement:!0});return i.length>=2&&!FM(i)&&!$h(i)},$M=U({name:"group",label:"labels.group",icon:e=>(0,ga.jsx)(Lm,{theme:e.theme}),trackEvent:{category:"element"},perform:(e,t,n,i)=>{let r=cy(i.scene.getSelectedElements({selectedElementIds:t.selectedElementIds,includeBoundTextElement:!0}));if(r.length<2)return{appState:t,elements:e,captureUpdate:N.EVENTUALLY};let a=tr(t);if(a.length===1){let f=a[0],g=new Set(Ke(e,f).map(E=>E.id)),v=new Set(r.map(E=>E.id));if(new Set([...Array.from(g),...Array.from(v)]).size===g.size)return{appState:t,elements:e,captureUpdate:N.EVENTUALLY}}let o=[...e];new Set(r.map(f=>f.frameId)).size>1&&oy(r).forEach((f,g)=>{Ph(f,i.scene.getNonDeletedElementsMap())});let c=Eo(),d=Ee(r);o=o.map(f=>d.get(f.id)?ae(f,{groupIds:cb(f.groupIds,c,t.editingGroupId)}):f);let h=Ke(o,c),s=h[h.length-1],l=o.lastIndexOf(s),m=o.slice(l+1),u=o.slice(0,l).filter(f=>!vo(f,c)),p=sr([...u,...h,...m],Ee(h));return{appState:{...t,...rb(c,{...t,selectedGroupIds:{}},Se(o))},elements:p,captureUpdate:N.IMMEDIATELY}},predicate:(e,t,n,i)=>Ex(e,t,i),keyTest:e=>!e.shiftKey&&e[k.CTRL_OR_CMD]&&e.key===k.G,PanelComponent:({elements:e,appState:t,updateData:n,app:i})=>(0,ga.jsx)(ce,{hidden:!Ex(e,t,i),type:"button",icon:(0,ga.jsx)(Lm,{theme:t.theme}),onClick:()=>n(null),title:`${y("labels.group")} \u2014 ${F("CtrlOrCmd+G")}`,"aria-label":y("labels.group"),visible:Ye(Se(e),t)})}),BM=U({name:"ungroup",label:"labels.ungroup",icon:e=>(0,ga.jsx)(Rm,{theme:e.theme}),trackEvent:{category:"element"},perform:(e,t,n,i)=>{let r=tr(t),a=Ee(e);if(r.length===0)return{appState:t,elements:e,captureUpdate:N.EVENTUALLY};let o=[...e],c=[];o=o.map(l=>{Gt(l)&&c.push(l.id);let m=db(l.groupIds,t.selectedGroupIds);return m.length===l.groupIds.length?l:ae(l,{groupIds:m})});let d=wt(t,Se(o),t,null),h=i.scene.getSelectedElements(t),s=new Set(h.filter(l=>l.frameId).map(l=>l.frameId));return ly(e).filter(l=>s.has(l.id)).forEach(l=>{l&&(o=_h(o,To(o,l,t,a),l,i))}),d.selectedElementIds=Object.entries(d.selectedElementIds).reduce((l,[m,u])=>(u&&!c.includes(m)&&(l[m]=!0),l),{}),{appState:{...t,...d},elements:o,captureUpdate:N.IMMEDIATELY}},keyTest:e=>e.shiftKey&&e[k.CTRL_OR_CMD]&&e.key===k.G.toUpperCase(),predicate:(e,t)=>tr(t).length>0,PanelComponent:({elements:e,appState:t,updateData:n})=>(0,ga.jsx)(ce,{type:"button",hidden:tr(t).length===0,icon:(0,ga.jsx)(Rm,{theme:t.theme}),onClick:()=>n(null),title:`${y("labels.ungroup")} \u2014 ${F("CtrlOrCmd+Shift+G")}`,"aria-label":y("labels.ungroup"),visible:Ye(Se(e),t)})}),yC=(e,t,n,i,r,a,o)=>{e.beginPath(),e.moveTo(t+a,n),e.lineTo(t+i-a,n),e.quadraticCurveTo(t+i,n,t+i,n+a),e.lineTo(t+i,n+r-a),e.quadraticCurveTo(t+i,n+r,t+i-a,n+r),e.lineTo(t+a,n+r),e.quadraticCurveTo(t,n+r,t,n+r-a),e.lineTo(t,n+a),e.quadraticCurveTo(t,n,t+a,n),e.closePath(),e.fill(),o&&(e.strokeStyle=o),e.stroke()};function zM(e){let t=0;if(e.length===0)return t;for(let n=0;n<e.length;n++){let i=e.charCodeAt(n);t=(t<<5)-t+i}return t}var pu=(e,t)=>`hsl(${Math.abs(zM(t?.id||e))%37*10}, 100%, 83%)`,jM=e=>{let t=e?.trim()?.codePointAt(0);return(t?String.fromCodePoint(t):"?").toUpperCase()},UM=({context:e,renderConfig:t,appState:n,normalizedWidth:i,normalizedHeight:r})=>{for(let[a,o]of t.remotePointerViewportCoords){let{x:c,y:d}=o,h=n.collaborators.get(a);c-=n.offsetLeft,d-=n.offsetTop;let s=11,l=14,m=c<0||c>i-s||d<0||d>r-l;c=Math.max(c,0),c=Math.min(c,i-s),d=Math.max(d,0),d=Math.min(d,r-l);let u=pu(a,h);e.save(),e.strokeStyle=u,e.fillStyle=u;let p=t.remotePointerUserStates.get(a),f=m||p==="idle"||p==="away";f&&(e.globalAlpha=.3),t.remotePointerButton.get(a)==="down"&&(e.beginPath(),e.arc(c,d,15,0,2*Math.PI,!1),e.lineWidth=3,e.strokeStyle="#ffffff88",e.stroke(),e.closePath(),e.beginPath(),e.arc(c,d,15,0,2*Math.PI,!1),e.lineWidth=1,e.strokeStyle=u,e.stroke(),e.closePath());let g=n.theme===he.DARK?"#2f6330":n1,v=h?.isSpeaking;v&&(e.fillStyle=g,e.strokeStyle=g,e.lineWidth=10,e.lineJoin="round",e.beginPath(),e.moveTo(c,d),e.lineTo(c+0,d+14),e.lineTo(c+4,d+9),e.lineTo(c+11,d+8),e.closePath(),e.stroke(),e.fill()),e.fillStyle=Ys,e.strokeStyle=Ys,e.lineWidth=6,e.lineJoin="round",e.beginPath(),e.moveTo(c,d),e.lineTo(c+0,d+14),e.lineTo(c+4,d+9),e.lineTo(c+11,d+8),e.closePath(),e.stroke(),e.fill(),e.fillStyle=u,e.strokeStyle=u,e.lineWidth=2,e.lineJoin="round",e.beginPath(),f?(e.moveTo(c-1,d-1),e.lineTo(c-1,d+15),e.lineTo(c+5,d+10),e.lineTo(c+12,d+9),e.closePath(),e.fill()):(e.moveTo(c,d),e.lineTo(c+0,d+14),e.lineTo(c+4,d+9),e.lineTo(c+11,d+8),e.closePath(),e.fill(),e.stroke());let E=t.remotePointerUsernames.get(a)||"";if(!m&&E){e.font="600 12px sans-serif";let b=(v?c+0:c)+s/2,w=(v?d+0:d)+l+2,x=5,S=3,C=e.measureText(E),T=C.actualBoundingBoxDescent+C.actualBoundingBoxAscent,L=Math.max(T,12),M=b-1,R=w-1,z=C.width+2+x*2+2,_=L+2+S*2+2;if(e.roundRect?(e.beginPath(),e.roundRect(M,R,z,_,8),e.fillStyle=u,e.fill(),e.strokeStyle=Ys,e.stroke(),v&&(e.beginPath(),e.roundRect(M-2,R-2,z+4,_+4,8),e.strokeStyle=g,e.stroke())):yC(e,M,R,z,_,8,Ys),e.fillStyle=t1,e.fillText(E,b+x+1,w+S+C.actualBoundingBoxAscent+Math.floor((L-T)/2)+2),v){e.fillStyle=g;let H=8,P=8,B=5;e.fillRect(M+z+P,R+(_/2-H/2),2,H),e.fillRect(M+z+P+B,R+(_/2-H*2/2),2,H*2),e.fillRect(M+z+P+B*2,R+(_/2-H/2),2,H)}}e.restore(),e.closePath()}},wx=({color:e,onClick:t,name:n,src:i,className:r})=>{let a=jM(n),[o,c]=(0,EC.useState)(!1),d=!o&&i,h=d?void 0:{background:e};return(0,Mf.jsx)("div",{className:$("Avatar",r),style:h,onClick:t,children:d?(0,Mf.jsx)("img",{className:"Avatar-img",src:i,alt:a,referrerPolicy:"no-referrer",onError:()=>c(!0)}):a})},G9=U({name:"goToCollaborator",label:"Go to a collaborator",viewMode:!0,trackEvent:{category:"collab"},perform:(e,t,n)=>!n.socketId||t.userToFollow?.socketId===n.socketId||n.isCurrentUser?{appState:{...t,userToFollow:null},captureUpdate:N.EVENTUALLY}:{appState:{...t,userToFollow:{socketId:n.socketId,username:n.username||""},openMenu:t.openMenu==="canvas"?null:t.openMenu},captureUpdate:N.EVENTUALLY},PanelComponent:({updateData:e,data:t,appState:n})=>{let{socketId:i,collaborator:r,withName:a,isBeingFollowed:o}=t,c=pu(i,r),d=$({"is-followed":o,"is-current-user":r.isCurrentUser===!0,"is-speaking":r.isSpeaking,"is-in-call":r.isInCall,"is-muted":r.isMuted}),h=r.isInCall?r.isSpeaking?(0,kt.jsxs)("div",{className:"UserList__collaborator-status-icon-speaking-indicator",title:y("userList.hint.isSpeaking"),children:[(0,kt.jsx)("div",{}),(0,kt.jsx)("div",{}),(0,kt.jsx)("div",{})]}):r.isMuted?(0,kt.jsx)("div",{className:"UserList__collaborator-status-icon-microphone-muted",title:y("userList.hint.micMuted"),children:m0}):(0,kt.jsx)("div",{title:y("userList.hint.inCall"),children:u0}):null;return a?(0,kt.jsxs)("div",{className:`dropdown-menu-item dropdown-menu-item-base UserList__collaborator ${d}`,style:{"--avatar-size":"1.5rem"},onClick:()=>e(r),children:[(0,kt.jsx)(wx,{color:c,onClick:()=>{},name:r.username||"",src:r.avatarUrl,className:d}),(0,kt.jsx)("div",{className:"UserList__collaborator-name",children:r.username}),(0,kt.jsxs)("div",{className:"UserList__collaborator-status-icons","aria-hidden":!0,children:[o&&(0,kt.jsx)("div",{className:"UserList__collaborator-status-icon-is-followed",title:y("userList.hint.followStatus"),children:fc}),h]})]}):(0,kt.jsxs)("div",{className:`UserList__collaborator UserList__collaborator--avatar-only ${d}`,children:[(0,kt.jsx)(wx,{color:c,onClick:()=>{e(r)},name:r.username||"",src:r.avatarUrl,className:d}),h&&(0,kt.jsx)("div",{className:"UserList__collaborator-status-icon",children:h})]})}}),HM=U({name:"addToLibrary",trackEvent:{category:"element"},perform:(e,t,n,i)=>{let r=i.scene.getSelectedElements({selectedElementIds:t.selectedElementIds,includeBoundTextElement:!0,includeElementsInFrames:!0});for(let a of Xu)if(r.some(o=>o.type===a))return{captureUpdate:N.EVENTUALLY,appState:{...t,errorMessage:y(`errors.libraryElementTypeError.${a}`)}};return i.library.getLatestLibrary().then(a=>i.library.setLibrary([{id:Eo(),status:"unpublished",elements:r.map(wo),created:Date.now()},...a])).then(()=>({captureUpdate:N.EVENTUALLY,appState:{...t,toast:{message:y("toast.addedToLibrary")}}})).catch(a=>({captureUpdate:N.EVENTUALLY,appState:{...t,errorMessage:a.message}}))},label:"labels.addToLibrary"}),WM=(e,t,n,i)=>{let r=ah(e,t),a=ai(e);return r.flatMap(o=>{let c=VM(o,a,n);return o.map(d=>{let h=W(d,{x:d.x+c.x,y:d.y+c.y});return er(d,i.getNonDeletedElementsMap(),{simultaneouslyUpdated:o}),h})})},VM=(e,t,{axis:n,position:i})=>{let r=ai(e),[a,o]=n==="x"?["minX","maxX"]:["minY","maxY"],c={x:0,y:0};return i==="start"?{...c,[n]:t[a]-r[a]}:i==="end"?{...c,[n]:t[o]-r[o]}:{...c,[n]:(t[a]+t[o])/2-(r[a]+r[o])/2}},cn=(e,t)=>{let n=t.scene.getSelectedElements(e);return n.length>1&&!n.some(i=>ge(i))},Os=(e,t,n,i)=>{let r=n.scene.getSelectedElements(t),a=Ee(e),o=WM(r,a,i,n.scene),c=Ee(o);return Qr(e.map(d=>c.get(d.id)||d),t,n)},K9=U({name:"alignTop",label:"labels.alignTop",icon:Sm,trackEvent:{category:"element"},predicate:(e,t,n,i)=>cn(t,i),perform:(e,t,n,i)=>({appState:t,elements:Os(e,t,i,{position:"start",axis:"y"}),captureUpdate:N.IMMEDIATELY}),keyTest:e=>e[k.CTRL_OR_CMD]&&e.shiftKey&&e.key===k.ARROW_UP,PanelComponent:({elements:e,appState:t,updateData:n,app:i})=>(0,La.jsx)(ce,{hidden:!cn(t,i),type:"button",icon:Sm,onClick:()=>n(null),title:`${y("labels.alignTop")} \u2014 ${F("CtrlOrCmd+Shift+Up")}`,"aria-label":y("labels.alignTop"),visible:Ye(Se(e),t)})}),Z9=U({name:"alignBottom",label:"labels.alignBottom",icon:Cm,trackEvent:{category:"element"},predicate:(e,t,n,i)=>cn(t,i),perform:(e,t,n,i)=>({appState:t,elements:Os(e,t,i,{position:"end",axis:"y"}),captureUpdate:N.IMMEDIATELY}),keyTest:e=>e[k.CTRL_OR_CMD]&&e.shiftKey&&e.key===k.ARROW_DOWN,PanelComponent:({elements:e,appState:t,updateData:n,app:i})=>(0,La.jsx)(ce,{hidden:!cn(t,i),type:"button",icon:Cm,onClick:()=>n(null),title:`${y("labels.alignBottom")} \u2014 ${F("CtrlOrCmd+Shift+Down")}`,"aria-label":y("labels.alignBottom"),visible:Ye(Se(e),t)})}),X9=U({name:"alignLeft",label:"labels.alignLeft",icon:Im,trackEvent:{category:"element"},predicate:(e,t,n,i)=>cn(t,i),perform:(e,t,n,i)=>({appState:t,elements:Os(e,t,i,{position:"start",axis:"x"}),captureUpdate:N.IMMEDIATELY}),keyTest:e=>e[k.CTRL_OR_CMD]&&e.shiftKey&&e.key===k.ARROW_LEFT,PanelComponent:({elements:e,appState:t,updateData:n,app:i})=>(0,La.jsx)(ce,{hidden:!cn(t,i),type:"button",icon:Im,onClick:()=>n(null),title:`${y("labels.alignLeft")} \u2014 ${F("CtrlOrCmd+Shift+Left")}`,"aria-label":y("labels.alignLeft"),visible:Ye(Se(e),t)})}),q9=U({name:"alignRight",label:"labels.alignRight",icon:Tm,trackEvent:{category:"element"},predicate:(e,t,n,i)=>cn(t,i),perform:(e,t,n,i)=>({appState:t,elements:Os(e,t,i,{position:"end",axis:"x"}),captureUpdate:N.IMMEDIATELY}),keyTest:e=>e[k.CTRL_OR_CMD]&&e.shiftKey&&e.key===k.ARROW_RIGHT,PanelComponent:({elements:e,appState:t,updateData:n,app:i})=>(0,La.jsx)(ce,{hidden:!cn(t,i),type:"button",icon:Tm,onClick:()=>n(null),title:`${y("labels.alignRight")} \u2014 ${F("CtrlOrCmd+Shift+Right")}`,"aria-label":y("labels.alignRight"),visible:Ye(Se(e),t)})}),Q9=U({name:"alignVerticallyCentered",label:"labels.centerVertically",icon:km,trackEvent:{category:"element"},predicate:(e,t,n,i)=>cn(t,i),perform:(e,t,n,i)=>({appState:t,elements:Os(e,t,i,{position:"center",axis:"y"}),captureUpdate:N.IMMEDIATELY}),PanelComponent:({elements:e,appState:t,updateData:n,app:i})=>(0,La.jsx)(ce,{hidden:!cn(t,i),type:"button",icon:km,onClick:()=>n(null),title:y("labels.centerVertically"),"aria-label":y("labels.centerVertically"),visible:Ye(Se(e),t)})}),J9=U({name:"alignHorizontallyCentered",label:"labels.centerHorizontally",icon:Mm,trackEvent:{category:"element"},predicate:(e,t,n,i)=>cn(t,i),perform:(e,t,n,i)=>({appState:t,elements:Os(e,t,i,{position:"center",axis:"x"}),captureUpdate:N.IMMEDIATELY}),PanelComponent:({elements:e,appState:t,updateData:n,app:i})=>(0,La.jsx)(ce,{hidden:!cn(t,i),type:"button",icon:Mm,onClick:()=>n(null),title:y("labels.centerHorizontally"),"aria-label":y("labels.centerHorizontally"),visible:Ye(Se(e),t)})}),YM=(e,t,n)=>{let[i,r,a,o]=n.axis==="x"?["minX","midX","maxX","width"]:["minY","midY","maxY","height"],c=ai(e),d=ah(e,t).map(m=>[m,ai(m)]).sort((m,u)=>m[1][r]-u[1][r]),h=0;for(let m of d)h+=m[1][o];let s=(c[o]-h)/(d.length-1);if(s<0){let m=d.findIndex(g=>g[1][i]===c[i]),u=d.findIndex(g=>g[1][a]===c[a]),p=(d[u][1][r]-d[m][1][r])/(d.length-1),f=d[m][1][r];return d.flatMap(([g,v],E)=>{let b={x:0,y:0};return E!==m&&E!==u&&(f+=p,b[n.axis]=f-v[r]),g.map(w=>ae(w,{x:w.x+b.x,y:w.y+b.y}))})}let l=c[i];return d.flatMap(([m,u])=>{let p={x:0,y:0};return p[n.axis]=l-u[i],l+=s,l+=u[o],m.map(f=>ae(f,{x:f.x+p.x,y:f.y+p.y}))})},wC=(e,t)=>{let n=t.scene.getSelectedElements(e);return n.length>1&&!n.some(i=>ge(i))},xC=(e,t,n,i)=>{let r=n.scene.getSelectedElements(t),a=YM(r,n.scene.getNonDeletedElementsMap(),i),o=Ee(a);return Qr(e.map(c=>o.get(c.id)||c),t,n)},e_=U({name:"distributeHorizontally",label:"labels.distributeHorizontally",trackEvent:{category:"element"},perform:(e,t,n,i)=>({appState:t,elements:xC(e,t,i,{space:"between",axis:"x"}),captureUpdate:N.IMMEDIATELY}),keyTest:e=>!e[k.CTRL_OR_CMD]&&e.altKey&&e.code===me.H,PanelComponent:({elements:e,appState:t,updateData:n,app:i})=>(0,lg.jsx)(ce,{hidden:!wC(t,i),type:"button",icon:fv,onClick:()=>n(null),title:`${y("labels.distributeHorizontally")} \u2014 ${F("Alt+H")}`,"aria-label":y("labels.distributeHorizontally"),visible:Ye(Se(e),t)})}),t_=U({name:"distributeVertically",label:"labels.distributeVertically",trackEvent:{category:"element"},perform:(e,t,n,i)=>({appState:t,elements:xC(e,t,i,{space:"between",axis:"y"}),captureUpdate:N.IMMEDIATELY}),keyTest:e=>!e[k.CTRL_OR_CMD]&&e.altKey&&e.code===me.V,PanelComponent:({elements:e,appState:t,updateData:n,app:i})=>(0,lg.jsx)(ce,{hidden:!wC(t,i),type:"button",icon:gv,onClick:()=>n(null),title:`${y("labels.distributeVertically")} \u2014 ${F("Alt+V")}`,"aria-label":y("labels.distributeVertically"),visible:Ye(Se(e),t)})}),GM=U({name:"flipHorizontal",label:"labels.flipHorizontal",icon:g0,trackEvent:{category:"element"},perform:(e,t,n,i)=>({elements:Qr(SC(e,i.scene.getNonDeletedElementsMap(),t,"horizontal",i),t,i),appState:t,captureUpdate:N.IMMEDIATELY}),keyTest:e=>e.shiftKey&&e.code===me.H}),KM=U({name:"flipVertical",label:"labels.flipVertical",icon:f0,trackEvent:{category:"element"},perform:(e,t,n,i)=>({elements:Qr(SC(e,i.scene.getNonDeletedElementsMap(),t,"vertical",i),t,i),appState:t,captureUpdate:N.IMMEDIATELY}),keyTest:e=>e.shiftKey&&e.code===me.V&&!e[k.CTRL_OR_CMD]}),SC=(e,t,n,i,r)=>{let a=se(Se(e),n,{includeBoundTextElement:!0,includeElementsInFrames:!0}),o=ZM(a,t,n,i,r),c=Ee(o);return e.map(d=>c.get(d.id)||d)},ZM=(e,t,n,i,r)=>{if(e.every(u=>mt(u)&&(u.startBinding||u.endBinding)))return e.map(u=>{let p=u;return ae(p,{startArrowhead:p.endArrowhead,endArrowhead:p.startArrowhead})});let{midX:a,midY:o}=ai(e);Cy(e,t,"nw",r.scene,new Map(Array.from(t.values()).map(u=>[u.id,wo(u)])),{flipByX:i==="horizontal",flipByY:i==="vertical",shouldResizeFromCenter:!0,shouldMaintainAspectRatio:!0}),fo(e.filter(De),t,r.scene.getNonDeletedElements(),r.scene,Va(n),[],n.zoom);let{elbowArrows:c,otherElements:d}=e.reduce((u,p)=>le(p)?{...u,elbowArrows:u.elbowArrows.concat(p)}:{...u,otherElements:u.otherElements.concat(p)},{elbowArrows:[],otherElements:[]}),{midX:h,midY:s}=ai(e),[l,m]=[a-h,o-s];return d.forEach(u=>W(u,{x:u.x+l,y:u.y+m})),c.forEach(u=>W(u,{x:u.x+l,y:u.y+m})),e},Fd=U({name:"copy",label:"labels.copy",icon:oc,trackEvent:{category:"element"},perform:async(e,t,n,i)=>{let r=i.scene.getSelectedElements({selectedElementIds:t.selectedElementIds,includeBoundTextElement:!0,includeElementsInFrames:!0});try{await iy(r,i.files,n)}catch(a){return{captureUpdate:N.EVENTUALLY,appState:{...t,errorMessage:a.message}}}return{captureUpdate:N.EVENTUALLY}},keyTest:void 0}),xx=U({name:"paste",label:"labels.paste",trackEvent:{category:"element"},perform:async(e,t,n,i)=>{let r;try{r=await ry()}catch(a){return a.name==="AbortError"||a.name==="NotAllowedError"?!1:(console.error(`actionPaste ${a.name}: ${a.message}`),Na?{captureUpdate:N.EVENTUALLY,appState:{...t,errorMessage:y("hints.firefox_clipboard_write")}}:{captureUpdate:N.EVENTUALLY,appState:{...t,errorMessage:y("errors.asyncPasteFailedOnRead")}})}try{i.pasteFromClipboard(ny({types:r}))}catch(a){return console.error(a),{captureUpdate:N.EVENTUALLY,appState:{...t,errorMessage:y("errors.asyncPasteFailedOnParse")}}}return{captureUpdate:N.EVENTUALLY}},keyTest:void 0}),Sx=U({name:"cut",label:"labels.cut",icon:e0,trackEvent:{category:"element"},perform:(e,t,n,i)=>(Fd.perform(e,t,n,i),TS.perform(e,t,null,i)),keyTest:e=>e[k.CTRL_OR_CMD]&&e.key===k.X}),Cx=U({name:"copyAsSvg",label:"labels.copyAsSvg",icon:v0,trackEvent:{category:"element"},perform:async(e,t,n,i)=>{if(!i.canvas)return{captureUpdate:N.EVENTUALLY};let{exportedElements:r,exportingFrame:a}=mu(e,t,!0);try{await hu("clipboard-svg",r,t,i.files,{...t,exportingFrame:a,name:i.getName()});let o=i.scene.getSelectedElements({selectedElementIds:t.selectedElementIds,includeBoundTextElement:!0,includeElementsInFrames:!0});return{appState:{toast:{message:y("toast.copyToClipboardAsSvg",{exportSelection:o.length?y("toast.selection"):y("toast.canvas"),exportColorScheme:t.exportWithDarkMode?y("buttons.darkMode"):y("buttons.lightMode")})}},captureUpdate:N.EVENTUALLY}}catch(o){return console.error(o),{appState:{errorMessage:o.message},captureUpdate:N.EVENTUALLY}}},predicate:e=>Mh&&e.length>0,keywords:["svg","clipboard","copy"]}),Ix=U({name:"copyAsPng",label:"labels.copyAsPng",icon:b0,trackEvent:{category:"element"},perform:async(e,t,n,i)=>{if(!i.canvas)return{captureUpdate:N.EVENTUALLY};let r=i.scene.getSelectedElements({selectedElementIds:t.selectedElementIds,includeBoundTextElement:!0,includeElementsInFrames:!0}),{exportedElements:a,exportingFrame:o}=mu(e,t,!0);try{return await hu("clipboard",a,t,i.files,{...t,exportingFrame:o,name:i.getName()}),{appState:{...t,toast:{message:y("toast.copyToClipboardAsPng",{exportSelection:r.length?y("toast.selection"):y("toast.canvas"),exportColorScheme:t.exportWithDarkMode?y("buttons.darkMode"):y("buttons.lightMode")})}},captureUpdate:N.EVENTUALLY}}catch(c){return console.error(c),{appState:{...t,errorMessage:c.message},captureUpdate:N.EVENTUALLY}}},predicate:e=>Nc&&e.length>0,keyTest:e=>e.code===me.C&&e.altKey&&e.shiftKey,keywords:["png","clipboard","copy"]}),Tx=U({name:"copyText",label:"labels.copyText",trackEvent:{category:"element"},perform:(e,t,n,i)=>{let r=i.scene.getSelectedElements({selectedElementIds:t.selectedElementIds,includeBoundTextElement:!0});try{Io(Mb(r))}catch{throw new Error(y("errors.copyToSystemClipboardFailed"))}return{captureUpdate:N.EVENTUALLY}},predicate:(e,t,n,i)=>Mh&&i.scene.getSelectedElements({selectedElementIds:t.selectedElementIds,includeBoundTextElement:!0}).some(te),keywords:["text","clipboard","copy"]}),kx=U({name:"gridMode",icon:S0,keywords:["snap"],label:"labels.toggleGrid",viewMode:!0,trackEvent:{category:"canvas",predicate:e=>e.gridModeEnabled},perform(e,t){return{appState:{...t,gridModeEnabled:!this.checked(t),objectsSnapModeEnabled:!1},captureUpdate:N.EVENTUALLY}},checked:e=>e.gridModeEnabled,predicate:(e,t,n)=>n.gridModeEnabled===void 0,keyTest:e=>e[k.CTRL_OR_CMD]&&e.code===me.QUOTE}),Df=U({name:"zenMode",label:"buttons.zenMode",icon:E0,paletteName:"Toggle zen mode",viewMode:!0,trackEvent:{category:"canvas",predicate:e=>!e.zenModeEnabled},perform(e,t){return{appState:{...t,zenModeEnabled:!this.checked(t)},captureUpdate:N.EVENTUALLY}},checked:e=>e.zenModeEnabled,predicate:(e,t,n)=>typeof n.zenModeEnabled>"u",keyTest:e=>!e[k.CTRL_OR_CMD]&&e.altKey&&e.code===me.Z}),XM=U({name:"objectsSnapMode",label:"buttons.objectsSnapMode",icon:y0,viewMode:!1,trackEvent:{category:"canvas",predicate:e=>!e.objectsSnapModeEnabled},perform(e,t){return{appState:{...t,objectsSnapModeEnabled:!this.checked(t),gridModeEnabled:!1},captureUpdate:N.EVENTUALLY}},checked:e=>e.objectsSnapModeEnabled,predicate:(e,t,n)=>typeof n.objectsSnapModeEnabled>"u",keyTest:e=>!e[k.CTRL_OR_CMD]&&e.altKey&&e.code===me.S}),Lf=U({name:"stats",label:"stats.fullTitle",icon:p0,paletteName:"Toggle stats",viewMode:!0,trackEvent:{category:"menu"},keywords:["edit","attributes","customize"],perform(e,t){return{appState:{...t,stats:{...t.stats,open:!this.checked(t)}},captureUpdate:N.EVENTUALLY}},checked:e=>e.stats.open,keyTest:e=>!e[k.CTRL_OR_CMD]&&e.altKey&&e.code===me.SLASH}),qM=U({name:"unbindText",label:"labels.unbindText",trackEvent:{category:"element"},predicate:(e,t,n,i)=>i.scene.getSelectedElements(t).some(r=>ri(r)),perform:(e,t,n,i)=>{let r=i.scene.getSelectedElements(t),a=i.scene.getNonDeletedElementsMap();return r.forEach(o=>{let c=Le(o,a);if(c){let{width:d,height:h}=Di(c.originalText,mn(c),c.lineHeight),s=Eb(o.id);yb(o.id);let{x:l,y:m}=ch(o,c,a);W(c,{containerId:null,width:d,height:h,text:c.originalText,x:l,y:m}),W(o,{boundElements:o.boundElements?.filter(u=>u.id!==c.id),height:s||o.height})}}),{elements:e,appState:t,captureUpdate:N.IMMEDIATELY}}}),QM=U({name:"bindText",label:"labels.bindText",trackEvent:{category:"element"},predicate:(e,t,n,i)=>{let r=i.scene.getSelectedElements(t);if(r.length===2){let a=te(r[0])||te(r[1]),o;if(Wr(r[0])?o=r[0]:Wr(r[1])&&(o=r[1]),a&&o&&Le(o,i.scene.getNonDeletedElementsMap())===null)return!0}return!1},perform:(e,t,n,i)=>{let r=i.scene.getSelectedElements(t),a,o;te(r[0])&&Wr(r[1])?(a=r[0],o=r[1]):(a=r[1],o=r[0]),W(a,{containerId:o.id,verticalAlign:ki.MIDDLE,textAlign:Yl.CENTER,autoResize:!0}),W(o,{boundElements:(o.boundElements||[]).concat({type:"text",id:a.id})});let c=o.height;return $t(a,o,i.scene.getNonDeletedElementsMap()),Ic(o.id,c),{elements:JM(e,o,a),appState:{...t,selectedElementIds:{[o.id]:!0}},captureUpdate:N.IMMEDIATELY}}}),JM=(e,t,n)=>{let i=e.slice(),r=i.findIndex(o=>o.id===n.id);i.splice(r,1);let a=i.findIndex(o=>o.id===t.id);return i.splice(a+1,0,n),sr(i,Ee([t,n])),i},e6=(e,t,n)=>{let i=e.slice(),r=i.findIndex(o=>o.id===t.id);i.splice(r,1);let a=i.findIndex(o=>o.id===n.id);return i.splice(a,0,t),sr(i,Ee([t,n])),i},t6=U({name:"wrapTextInContainer",label:"labels.createContainerFromText",trackEvent:{category:"element"},predicate:(e,t,n,i)=>{let r=i.scene.getSelectedElements(t),a=r.every(o=>te(o));return r.length>0&&a},perform:(e,t,n,i)=>{let r=i.scene.getSelectedElements(t),a=e.slice(),o={};for(let c of r)if(te(c)){let d=rr({type:"rectangle",backgroundColor:t.currentItemBackgroundColor,boundElements:[...c.boundElements||[],{id:c.id,type:"text"}],angle:c.angle,fillStyle:t.currentItemFillStyle,strokeColor:t.currentItemStrokeColor,roughness:t.currentItemRoughness,strokeWidth:t.currentItemStrokeWidth,strokeStyle:t.currentItemStrokeStyle,roundness:t.currentItemRoundness==="round"?{type:rc("rectangle")?Rn.ADAPTIVE_RADIUS:Rn.PROPORTIONAL_RADIUS}:null,opacity:100,locked:!1,x:c.x-Zu,y:c.y-Zu,width:yo(c.width,"rectangle"),height:yo(c.height,"rectangle"),groupIds:c.groupIds,frameId:c.frameId});if(c.boundElements?.length){let h=c.boundElements.filter(s=>s.type==="arrow").map(s=>s.id);a.filter(s=>h.includes(s.id)).forEach(s=>{let l=s.startBinding,m=s.endBinding;l?.elementId===c.id&&(l={...l,elementId:d.id}),m?.elementId===c.id&&(m={...m,elementId:d.id}),(l||m)&&W(s,{startBinding:l,endBinding:m},!1)})}W(c,{containerId:d.id,verticalAlign:ki.MIDDLE,boundElements:null,textAlign:Yl.CENTER,autoResize:!0},!1),$t(c,d,i.scene.getNonDeletedElementsMap()),a=e6([...a,d],d,c),o[d.id]=!0}return{elements:a,appState:{...t,selectedElementIds:o},captureUpdate:N.IMMEDIATELY}}}),cg=380,n6=42,Rf=5,CC=85,i6=500,Af=!1,kd=new Map,r6=({element:e,elementsMap:t,setAppState:n,onLinkOpen:i,setToast:r,updateEmbedValidationStatus:a})=>{let o=Pl(),c=Nl(),d=lt(),h=e.link||"",[s,l]=(0,kn.useState)(h),m=(0,kn.useRef)(null),u=o.showHyperlinkPopup==="editor",p=(0,kn.useCallback)(()=>{if(!m.current)return;let b=ir(m.current.value)||null;if(!e.link&&b&&we("hyperlink","create"),nn(e)){if(o.activeEmbeddable?.element===e&&n({activeEmbeddable:null}),!b){W(e,{link:null}),a(e,!1);return}if(!xo(b,c.validateEmbeddable))b&&r({message:y("toast.unableToEmbed"),closable:!0}),e.link&&kd.set(e.id,e.link),W(e,{link:b}),a(e,!1);else{let{width:w,height:x}=e,S=Ka(b);S?.error instanceof URIError&&r({message:y("toast.unrecognizedLinkFormat"),closable:!0});let C=S?S.intrinsicSize.w/S.intrinsicSize.h:1,T=kd.get(e.id)!==e.link;W(e,{...T?{width:S?.type==="video"?w>x?w:x*C:w,height:S?.type==="video"&&w>x?w/C:x}:{},link:b}),a(e,!0),kd.has(e.id)&&kd.delete(e.id)}}else W(e,{link:b})},[e,r,c.validateEmbeddable,o.activeEmbeddable,n,a]);(0,kn.useLayoutEffect)(()=>()=>{p()},[p]),(0,kn.useEffect)(()=>{u&&m?.current&&!(d.viewport.isMobile||d.isTouchScreen)&&m.current.select()},[u,d.viewport.isMobile,d.isTouchScreen]),(0,kn.useEffect)(()=>{let b=null,w=x=>{u||(b&&clearTimeout(b),o6(e,t,o,G(x.clientX,x.clientY))&&(b=window.setTimeout(()=>{n({showHyperlinkPopup:!1})},i6)))};return window.addEventListener("pointermove",w,!1),()=>{window.removeEventListener("pointermove",w,!1),b&&clearTimeout(b)}},[o,e,u,n,t]);let f=(0,kn.useCallback)(()=>{we("hyperlink","delete"),W(e,{link:null}),n({showHyperlinkPopup:!1})},[n,e]),g=()=>{we("hyperlink","edit","popup-ui"),n({showHyperlinkPopup:"editor"})},{x:v,y:E}=IC(e,o,t);return o.contextMenu||o.selectedElementsAreBeingDragged||o.resizingElement||o.isRotating||o.openMenu||o.viewModeEnabled?null:(0,fi.jsxs)("div",{className:"excalidraw-hyperlinkContainer",style:{top:`${E}px`,left:`${v}px`,width:cg,padding:Rf},children:[u?(0,fi.jsx)("input",{className:$("excalidraw-hyperlinkContainer-input"),placeholder:y("labels.link.hint"),ref:m,value:s,onChange:b=>l(b.target.value),autoFocus:!0,onKeyDown:b=>{b.stopPropagation(),b[k.CTRL_OR_CMD]&&b.key===k.K&&b.preventDefault(),(b.key===k.ENTER||b.key===k.ESCAPE)&&(p(),n({showHyperlinkPopup:"info"}))}}):e.link?(0,fi.jsx)("a",{href:ir(e.link||""),className:"excalidraw-hyperlinkContainer-link",target:uh(e.link)?"_self":"_blank",onClick:b=>{if(e.link&&i){let w=om("excalidraw-link",b.nativeEvent);i({...e,link:ir(e.link)},w),w.defaultPrevented&&b.preventDefault()}},rel:"noopener noreferrer",children:e.link}):(0,fi.jsx)("div",{className:"excalidraw-hyperlinkContainer-link",children:y("labels.link.empty")}),(0,fi.jsxs)("div",{className:"excalidraw-hyperlinkContainer__buttons",children:[!u&&(0,fi.jsx)(ce,{type:"button",title:y("buttons.edit"),"aria-label":y("buttons.edit"),label:y("buttons.edit"),onClick:g,className:"excalidraw-hyperlinkContainer--edit",icon:dm}),(0,fi.jsx)(ce,{type:"button",title:y("labels.linkToElement"),"aria-label":y("labels.linkToElement"),label:y("labels.linkToElement"),onClick:()=>{n({openDialog:{name:"elementLinkSelector",sourceElementId:e.id}})},icon:Vm}),h&&!nn(e)&&(0,fi.jsx)(ce,{type:"button",title:y("buttons.remove"),"aria-label":y("buttons.remove"),label:y("buttons.remove"),onClick:f,className:"excalidraw-hyperlinkContainer--remove",icon:Qi})]})]})},IC=(e,t,n)=>{let[i,r]=pn(e,n),{x:a,y:o}=ni({sceneX:i+e.width/2,sceneY:r},t),c=a-t.offsetLeft-cg/2,d=o-t.offsetTop-CC;return{x:c,y:d}},Mx=(e,t)=>{let n=se(e,t);return nn(n[0])?"labels.link.editEmbed":n[0]?.link?"labels.link.edit":"labels.link.create"},ll=null,a6=(e,t,n)=>{ll&&clearTimeout(ll),ll=window.setTimeout(()=>s6(e,t,n),c1)},s6=(e,t,n)=>{if(!e.link)return;let i=sl();i.classList.add("excalidraw-tooltip--visible"),i.style.maxWidth="20rem",i.textContent=Co(e.link)?y("labels.link.goToElement"):e.link;let[r,a,o,c]=pn(e,n),[d,h,s,l]=Vb([r,a,o,c],e.angle,t),m=ni({sceneX:d,sceneY:h},t);hC(i,{left:m.x,top:m.y,width:s,height:l},"top"),we("hyperlink","tooltip","link-icon"),Af=!0},Dx=()=>{ll&&clearTimeout(ll),Af&&(Af=!1,sl().classList.remove("excalidraw-tooltip--visible"))},o6=(e,t,n,[i,r])=>{let{x:a,y:o}=Fe({clientX:i,clientY:r},n),c=15/n.zoom.value;if(N0(a,o,e,t))return!1;let[d,h,s]=pn(e,t);if(a>=d&&a<=s&&o>=h-CC&&o<=h)return!1;let{x:l,y:m}=IC(e,n,t);return!(i>=l-c&&i<=l+cg+Rf*2+c&&r>=m-c&&r<=m+c+Rf*2+n6)},kC=U({name:"hyperlink",label:(e,t)=>Mx(e,t),icon:uc,perform:(e,t)=>t.showHyperlinkPopup==="editor"?!1:{elements:e,appState:{...t,showHyperlinkPopup:"editor",openMenu:null},captureUpdate:N.IMMEDIATELY},trackEvent:{category:"hyperlink",action:"click"},keyTest:e=>e[k.CTRL_OR_CMD]&&e.key===k.K,predicate:(e,t)=>se(e,t).length===1,PanelComponent:({elements:e,appState:t,updateData:n})=>{let i=se(e,t);return(0,TC.jsx)(ce,{type:"button",icon:uc,"aria-label":y(Mx(e,t)),title:`${nn(e[0])?y("labels.link.labelEmbed"):y("labels.link.label")} - ${F("CtrlOrCmd+K")}`,onClick:()=>n(null),selected:i.length===1&&!!i[0].link})}}),sf=e=>e.every(t=>!t.locked),l6=U({name:"toggleElementLock",label:(e,t,n)=>{let i=n.scene.getSelectedElements({selectedElementIds:t.selectedElementIds,includeBoundTextElement:!1});return i.length===1&&!ge(i[0])?i[0].locked?"labels.elementLock.unlock":"labels.elementLock.lock":sf(i)?"labels.elementLock.lockAll":"labels.elementLock.unlockAll"},icon:(e,t)=>{let n=se(t,e);return sf(n)?sc:oo},trackEvent:{category:"element"},predicate:(e,t,n,i)=>{let r=i.scene.getSelectedElements(t);return r.length>0&&!r.some(a=>a.locked&&a.frameId)},perform:(e,t,n,i)=>{let r=i.scene.getSelectedElements({selectedElementIds:t.selectedElementIds,includeBoundTextElement:!0,includeElementsInFrames:!0});if(!r.length)return!1;let a=sf(r),o=Ee(r);return{elements:e.map(c=>o.has(c.id)?ae(c,{locked:a}):c),appState:{...t,selectedLinearElement:a?null:t.selectedLinearElement},captureUpdate:N.IMMEDIATELY}},keyTest:(e,t,n,i)=>e.key.toLocaleLowerCase()===k.L&&e[k.CTRL_OR_CMD]&&e.shiftKey&&i.scene.getSelectedElements({selectedElementIds:t.selectedElementIds,includeBoundTextElement:!1}).length>0}),c6=U({name:"unlockAllElements",paletteName:"Unlock all elements",trackEvent:{category:"canvas"},viewMode:!1,icon:oo,predicate:(e,t)=>se(e,t).length===0&&e.some(n=>n.locked),perform:(e,t)=>{let n=e.filter(i=>i.locked);return{elements:e.map(i=>i.locked?ae(i,{locked:!1}):i),appState:{...t,selectedElementIds:Object.fromEntries(n.map(i=>[i.id,!0]))},captureUpdate:N.IMMEDIATELY}},label:"labels.elementLock.unlockAll"}),d6=()=>{let[e,t]=(0,gu.useState)(null),n=(0,gu.useCallback)(i=>t(i),[]);return[e,n]},u6=e=>{let{closeOnClickOutside:t=!0}=e,n=WS({className:"excalidraw-modal-container"}),i=(0,DC.useRef)(document.body.classList.contains("excalidraw-animations-disabled"));if(!n)return null;let r=a=>{a.key===k.ESCAPE&&(a.nativeEvent.stopImmediatePropagation(),a.stopPropagation(),e.onCloseRequest())};return(0,MC.createPortal)((0,fl.jsxs)("div",{className:$("Modal",e.className,{"animations-disabled":i.current}),role:"dialog","aria-modal":"true",onKeyDown:r,"aria-labelledby":e.labelledBy,"data-prevent-outside-click":!0,children:[(0,fl.jsx)("div",{className:"Modal__background",onClick:t?e.onCloseRequest:void 0}),(0,fl.jsx)("div",{className:"Modal__content",style:{"--max-width":`${e.maxWidth}px`},tabIndex:0,children:e.children})]}),n)},RC=Ze(new Map),Lx=async e=>await Lh({elements:e,appState:{exportBackground:!1,viewBackgroundColor:Aa.white},files:null,renderEmbeddables:!1,skipInliningFonts:!0}),m6=(e,t,n)=>{let[i,r]=(0,vu.useState)();return(0,vu.useEffect)(()=>{if(t)if(e){let a=n.get(e);a?r(a):(async()=>{let o=await Lx(t);o.querySelector(".style-fonts")?.remove(),o&&(n.set(e,o),r(o))})()}else(async()=>{let a=await Lx(t);r(a)})()},[e,t,n,r]),i},AC=()=>{let[e]=je(RC);return{clearLibraryCache:()=>e.clear(),deleteItemsFromLibraryCache:t=>{t.forEach(n=>e.delete(n))},svgCache:e}},h6=class{constructor(){D(this,"jobs",[]),D(this,"running",!1)}tick(){if(this.running)return;let e=this.jobs.shift();e?(this.running=!0,e.promise.resolve(_1(e.jobFactory,...e.args).finally(()=>{this.running=!1,this.tick()}))):this.running=!1}push(e,...t){let n=I1();return this.jobs.push({jobFactory:e,promise:n,args:t}),this.tick(),n}};var p6=new oi,gl=Ze({status:"loaded",isInitialized:!1,libraryItems:[]}),qo=e=>ii(e),f6=(e,t)=>!e.find(n=>n.elements.length!==t.elements.length?!1:n.elements.every((i,r)=>i.id===t.elements[r].id&&i.versionNonce===t.elements[r].versionNonce)),g6=(e,t)=>{let n=[];for(let i of t)f6(e,i)&&n.push(i);return[...n,...e]},v6=(e,t)=>{let n=Ee(t),i={deletedItems:new Map,addedItems:new Map};for(let a of e)n.has(a.id)||i.deletedItems.set(a.id,a);let r=Ee(e);for(let a of t)r.has(a.id)||i.addedItems.set(a.id,a);return i},b6=class{constructor(e){D(this,"currLibraryItems",[]),D(this,"prevLibraryItems",qo(this.currLibraryItems)),D(this,"app"),D(this,"updateQueue",[]),D(this,"getLastUpdateTask",()=>this.updateQueue[this.updateQueue.length-1]),D(this,"notifyListeners",()=>{if(this.updateQueue.length>0)Wn.set(gl,t=>({status:"loading",libraryItems:this.currLibraryItems,isInitialized:t.isInitialized}));else{Wn.set(gl,{status:"loaded",libraryItems:this.currLibraryItems,isInitialized:!0});try{let t=this.prevLibraryItems;this.prevLibraryItems=qo(this.currLibraryItems);let n=qo(this.currLibraryItems);this.app.props.onLibraryChange?.(n),p6.trigger(v6(t,n),n)}catch(t){console.error(t)}}}),D(this,"destroy",()=>{this.updateQueue=[],this.currLibraryItems=[],Wn.set(RC,new Map)}),D(this,"resetLibrary",()=>this.setLibrary([])),D(this,"getLatestLibrary",()=>new Promise(async t=>{try{let n=await(this.getLastUpdateTask()||this.currLibraryItems);this.updateQueue.length>0?t(this.getLatestLibrary()):t(qo(n))}catch{return t(this.currLibraryItems)}})),D(this,"updateLibrary",async({libraryItems:t,prompt:n=!1,merge:i=!1,openLibraryMenu:r=!1,defaultStatus:a="unpublished"})=>(r&&this.app.setState({openSidebar:{name:An.name,tab:Kl}}),this.setLibrary(()=>new Promise(async(o,c)=>{try{let d=await(typeof t=="function"&&!(t instanceof Blob)?t(this.currLibraryItems):t),h;d instanceof Blob?h=await Ay(d,a):h=kh(d,a),!n||window.confirm(y("alerts.confirmAddLibrary",{numShapes:h.length}))?(n&&this.app.focusContainer(),o(i?g6(this.currLibraryItems,h):h)):c(new vc)}catch(d){c(d)}})))),D(this,"setLibrary",t=>{let n=new Promise(async(i,r)=>{try{await this.getLastUpdateTask(),typeof t=="function"&&(t=t(this.currLibraryItems)),this.currLibraryItems=qo(await t),i(this.currLibraryItems)}catch(a){r(a)}}).catch(i=>{if(i.name==="AbortError")return console.warn("Library update aborted by user"),this.currLibraryItems;throw i}).finally(()=>{this.updateQueue=this.updateQueue.filter(i=>i!==n),this.notifyListeners()});return this.updateQueue.push(n),this.notifyListeners(),n}),this.app=e}},y6=b6,NC=e=>{let t=Math.ceil(Math.sqrt(e.length)),n=[],i=m=>e.slice(m*t,m*t+t).reduce((u,p)=>{let{height:f}=ai(p.elements);return Math.max(u,f)},0),r=m=>{let u=0,p=0,f=0;for(let g of e){if(u%t===0&&(p=0),p===m){let{width:v}=ai(g.elements);f=Math.max(f,v)}u++,p++}return f},a=0,o=0,c=0,d=0,h=0,s=0,l=0;for(let m of e){h&&h%t===0&&(o+=c+50,a=0,s=0,l++),s===0&&(c=i(l)),d=r(s);let{minX:u,minY:p,width:f,height:g}=ai(m.elements),v=(d-f)/2,E=(c-g)/2;n.push(...m.elements.map(b=>({...b,x:b.x+a+v-u,y:b.y+o+E-p}))),a+=d+50,h++,s++}return n};var Md=class Nf{constructor(t){D(this,"adapter"),this.adapter=t}static async getLibraryItems(t,n,i=!0){let r=()=>new Promise(async(a,o)=>{try{let c=await t.load({source:n});a(kh(c?.libraryItems||[],"published"))}catch(c){o(c)}});return i?Nf.queue.push(r):r()}getLibraryItems(t){return Nf.getLibraryItems(this.adapter,t,!1)}};D(Md,"queue",new h6),D(Md,"run",async(e,t)=>{let n=new Md(e);return Md.queue.push(()=>t(n))});var E6=(0,dg.forwardRef)(({children:e,gap:t,align:n,justifyContent:i,className:r,style:a},o)=>(0,ug.jsx)("div",{className:$("Stack Stack_horizontal",r),style:{"--gap":t,alignItems:n,justifyContent:i,...a},ref:o,children:e})),w6=(0,dg.forwardRef)(({children:e,gap:t,align:n,justifyContent:i,className:r,style:a},o)=>(0,ug.jsx)("div",{className:$("Stack Stack_vertical",r),style:{"--gap":t,justifyItems:n,justifyContent:i,...a},ref:o,children:e})),Cn={Row:E6,Col:w6},x6=({theme:e,id:t,libraryReturnUrl:n})=>{let i=n||window.location.origin+window.location.pathname;return(0,PC.jsx)("a",{className:"library-menu-browse-button",href:`${dt.VITE_APP_LIBRARY_URL}?target=${window.name||"_blank"}&referrer=${i}&useHash=true&token=${t}&theme=${e}&version=${Ku.excalidrawLibrary}`,target:"_excalidraw_libraries",children:y("labels.libraries")})},S6=x6,_C=({libraryReturnUrl:e,theme:t,id:n,style:i,children:r,className:a})=>(0,bu.jsxs)("div",{className:$("library-menu-control-buttons",a),style:i,children:[(0,bu.jsx)(S6,{id:n,libraryReturnUrl:e,theme:t}),r]}),C6=/({{[\w-]+}})|(<[\w-]+>)|(<\/[\w-]+>)/g,I6=/{{([\w-]+)}}/,T6=/<([\w-]+)>/,k6=/<\/([\w-]+)>/,M6=(e,t)=>{let n=[{name:"",children:[]}];return e.split(C6).filter(Boolean).forEach(i=>{let r=i.match(T6),a=i.match(k6),o=i.match(I6);if(r!==null){let c=r[1];t.hasOwnProperty(c)?n.push({name:c,children:[]}):console.warn(`Trans: missed to pass in prop ${c} for interpolating ${e}`)}else if(a!==null)if(a[1]===n[n.length-1].name){let c=n.pop(),d=vl.default.createElement(vl.default.Fragment,{},...c.children),h=t[c.name];typeof h=="function"&&n[n.length-1].children.push(h(d))}else console.warn(`Trans: unexpected end tag ${i} for interpolating ${e}`);else if(o!==null){let c=o[1];t.hasOwnProperty(c)?n[n.length-1].children.push(t[c]):console.warn(`Trans: key ${c} not in props for interpolating ${e}`)}else n[n.length-1].children.push(i)}),n.length!==1&&console.warn(`Trans: stack not empty for interpolating ${e}`),n[0].children},D6=({i18nKey:e,children:t,...n})=>{let{t:i}=Nt();return vl.default.createElement(vl.default.Fragment,{},...M6(i(e),n))},bi=D6,L6=({label:e,onClick:t,className:n,children:i,actionType:r,type:a="button",isLoading:o,...c})=>{let d=r?`Dialog__action-button--${r}`:"";return(0,ma.jsxs)("button",{className:$("Dialog__action-button",d,n),type:a,"aria-label":e,onClick:t,...c,children:[i&&(0,ma.jsx)("div",{style:o?{visibility:"hidden"}:{},children:i}),(0,ma.jsx)("div",{style:o?{visibility:"hidden"}:{},children:e}),o&&(0,ma.jsx)("div",{style:{position:"absolute",inset:0},children:(0,ma.jsx)(Ui,{})})]})},Rs=L6,R6=e=>{let{onConfirm:t,onCancel:n,children:i,confirmText:r=y("buttons.confirm"),cancelText:a=y("buttons.cancel"),className:o="",...c}=e,d=nt(),h=qd(mg),{container:s}=Si();return(0,As.jsxs)(Qn,{onCloseRequest:n,size:"small",...c,className:`confirm-dialog ${o}`,children:[i,(0,As.jsxs)("div",{className:"confirm-dialog-buttons",children:[(0,As.jsx)(Rs,{label:a,onClick:()=>{d({openMenu:null}),h(!1),(0,Pf.flushSync)(()=>{n()}),s?.focus()}}),(0,As.jsx)(Rs,{label:r,onClick:()=>{d({openMenu:null}),h(!1),(0,Pf.flushSync)(()=>{t()}),s?.focus()},actionType:"danger"})]})]})},OC=R6,va=class{static has(e){try{return!!window.localStorage.getItem(e)}catch(t){return console.warn(`localStorage.getItem error: ${t.message}`),!1}}static get(e){try{let t=window.localStorage.getItem(e);return t?JSON.parse(t):null}catch(t){return console.warn(`localStorage.getItem error: ${t.message}`),null}}};D(va,"set",(e,t)=>{try{return window.localStorage.setItem(e,JSON.stringify(t)),!0}catch(n){return console.warn(`localStorage.setItem error: ${n.message}`),!1}}),D(va,"delete",e=>{try{window.localStorage.removeItem(e)}catch(t){console.warn(`localStorage.removeItem error: ${t.message}`)}});var A6=async e=>{let t=Math.round(8),n=Math.max(Math.round(128/64),2),i=C1(e,6),r=document.createElement("canvas");r.width=i[0].length*128+(i[0].length+1)*(t*2)-t*2,r.height=i.length*128+(i.length+1)*(t*2)-t*2;let a=r.getContext("2d");a.fillStyle=Et.white,a.fillRect(0,0,r.width,r.height);for(let[o,c]of e.entries()){let d=await Pc({elements:c.elements,files:null,maxWidthOrHeight:128}),{width:h,height:s}=d,l=Math.floor(o/6)*(128+t*2),m=o%6*(128+t*2);a.drawImage(d,m+(128-h)/2+t,l+(128-s)/2+t),a.lineWidth=n,a.strokeStyle=Et.gray[4],a.strokeRect(m+t/2,l+t/2,128+t,128+t)}return await zc(new File([await Za(r)],"preview",{type:Ot.png}),{outputType:Ot.jpg,maxWidthOrHeight:5e3})},N6=({libItem:e,appState:t,index:n,onChange:i,onRemove:r})=>{let a=(0,ln.useRef)(null),o=(0,ln.useRef)(null);return(0,ln.useEffect)(()=>{let c=a.current;c&&(async()=>{let d=await Lh({elements:e.elements,appState:{...t,viewBackgroundColor:Et.white,exportBackground:!0},files:null,skipInliningFonts:!0});c.innerHTML=d.outerHTML})()},[e.elements,t]),(0,J.jsxs)("div",{className:"single-library-item",children:[e.status==="published"&&(0,J.jsx)("span",{className:"single-library-item-status",children:y("labels.statusPublished")}),(0,J.jsx)("div",{ref:a,className:"single-library-item__svg"}),(0,J.jsx)(ce,{"aria-label":y("buttons.remove"),type:"button",icon:Yr,className:"single-library-item--remove",onClick:r.bind(null,e.id),title:y("buttons.remove")}),(0,J.jsxs)("div",{style:{display:"flex",margin:"0.8rem 0",width:"100%",fontSize:"14px",fontWeight:500,flexDirection:"column"},children:[(0,J.jsxs)("label",{style:{display:"flex",justifyContent:"space-between",flexDirection:"column"},children:[(0,J.jsxs)("div",{style:{padding:"0.5em 0"},children:[(0,J.jsx)("span",{style:{fontWeight:500,color:Et.gray[6]},children:y("publishDialog.itemName")}),(0,J.jsx)("span",{"aria-hidden":"true",className:"required",children:"*"})]}),(0,J.jsx)("input",{type:"text",ref:o,style:{width:"80%",padding:"0.2rem"},defaultValue:e.name,placeholder:"Item name",onChange:c=>{i(c.target.value,n)}})]}),(0,J.jsx)("span",{className:"error",children:e.error})]})]})},P6=({onClose:e,libraryItems:t,appState:n,onSuccess:i,onError:r,updateItemsInStorage:a,onRemove:o})=>{let[c,d]=(0,ln.useState)({authorName:"",githubHandle:"",name:"",description:"",twitterHandle:"",website:""}),[h,s]=(0,ln.useState)(!1);(0,ln.useEffect)(()=>{let b=va.get(Pa.PUBLISH_LIBRARY);b&&d(b)},[]);let[l,m]=(0,ln.useState)(t.slice());(0,ln.useEffect)(()=>{m(t.slice())},[t]);let u=b=>{d({...c,[b.target.name]:b.target.value})},p=async b=>{b.preventDefault(),s(!0);let w=[],x=!1;if(l.forEach(R=>{let z="";R.name||(z=y("publishDialog.errors.required"),x=!0),w.push({...R,error:z})}),x){m(w),s(!1);return}let S=await A6(l),C={type:i1.excalidrawLibrary,version:Ku.excalidrawLibrary,source:r1,libraryItems:l},T=JSON.stringify(C,null,2),L=new Blob([T],{type:"application/json"}),M=new FormData;M.append("excalidrawLib",L),M.append("previewImage",S),M.append("previewImageType",S.type),M.append("title",c.name),M.append("authorName",c.authorName),M.append("githubHandle",c.githubHandle),M.append("name",c.name),M.append("description",c.description),M.append("twitterHandle",c.twitterHandle),M.append("website",c.website),fetch(`${dt.VITE_APP_LIBRARY_BACKEND}/submit`,{method:"post",body:M}).then(R=>R.ok?R.json().then(({url:z})=>{va.delete(Pa.PUBLISH_LIBRARY),i({url:z,authorName:c.authorName,items:l})}):R.json().catch(()=>{throw new Error(R.statusText||"something went wrong")}).then(z=>{throw new Error(z.message||R.statusText||"something went wrong")}),R=>{console.error(R),r(R),s(!1)}).catch(R=>{console.error(R),r(R),s(!1)})},f=()=>{let b=[];return l.forEach((w,x)=>{b.push((0,J.jsx)("div",{className:"single-library-item-wrapper",children:(0,J.jsx)(N6,{libItem:w,appState:n,index:x,onChange:(S,C)=>{let T=l.slice();T[C].name=S,m(T)},onRemove:o})},x))}),(0,J.jsx)("div",{className:"selected-library-items",children:b})},g=(0,ln.useCallback)(()=>{a(l),va.set(Pa.PUBLISH_LIBRARY,c),e()},[l,e,a,c]),v=!!t.length,E=t.some(b=>b.status==="published");return(0,J.jsx)(Qn,{onCloseRequest:g,title:y("publishDialog.title"),className:"publish-library",children:v?(0,J.jsxs)("form",{onSubmit:p,children:[(0,J.jsx)("div",{className:"publish-library-note",children:(0,J.jsx)(bi,{i18nKey:"publishDialog.noteDescription",link:b=>(0,J.jsx)("a",{href:"https://libraries.excalidraw.com",target:"_blank",rel:"noopener noreferrer",children:b})})}),(0,J.jsx)("span",{className:"publish-library-note",children:(0,J.jsx)(bi,{i18nKey:"publishDialog.noteGuidelines",link:b=>(0,J.jsx)("a",{href:"https://github.com/excalidraw/excalidraw-libraries#guidelines",target:"_blank",rel:"noopener noreferrer",children:b})})}),(0,J.jsx)("div",{className:"publish-library-note",children:y("publishDialog.noteItems")}),E&&(0,J.jsx)("span",{className:"publish-library-note publish-library-warning",children:y("publishDialog.republishWarning")}),f(),(0,J.jsxs)("div",{className:"publish-library__fields",children:[(0,J.jsxs)("label",{children:[(0,J.jsxs)("div",{children:[(0,J.jsx)("span",{children:y("publishDialog.libraryName")}),(0,J.jsx)("span",{"aria-hidden":"true",className:"required",children:"*"})]}),(0,J.jsx)("input",{type:"text",name:"name",required:!0,value:c.name,onChange:u,placeholder:y("publishDialog.placeholder.libraryName")})]}),(0,J.jsxs)("label",{style:{alignItems:"flex-start"},children:[(0,J.jsxs)("div",{children:[(0,J.jsx)("span",{children:y("publishDialog.libraryDesc")}),(0,J.jsx)("span",{"aria-hidden":"true",className:"required",children:"*"})]}),(0,J.jsx)("textarea",{name:"description",rows:4,required:!0,value:c.description,onChange:u,placeholder:y("publishDialog.placeholder.libraryDesc")})]}),(0,J.jsxs)("label",{children:[(0,J.jsxs)("div",{children:[(0,J.jsx)("span",{children:y("publishDialog.authorName")}),(0,J.jsx)("span",{"aria-hidden":"true",className:"required",children:"*"})]}),(0,J.jsx)("input",{type:"text",name:"authorName",required:!0,value:c.authorName,onChange:u,placeholder:y("publishDialog.placeholder.authorName")})]}),(0,J.jsxs)("label",{children:[(0,J.jsx)("span",{children:y("publishDialog.githubUsername")}),(0,J.jsx)("input",{type:"text",name:"githubHandle",value:c.githubHandle,onChange:u,placeholder:y("publishDialog.placeholder.githubHandle")})]}),(0,J.jsxs)("label",{children:[(0,J.jsx)("span",{children:y("publishDialog.twitterUsername")}),(0,J.jsx)("input",{type:"text",name:"twitterHandle",value:c.twitterHandle,onChange:u,placeholder:y("publishDialog.placeholder.twitterHandle")})]}),(0,J.jsxs)("label",{children:[(0,J.jsx)("span",{children:y("publishDialog.website")}),(0,J.jsx)("input",{type:"text",name:"website",pattern:"https?://.+",title:y("publishDialog.errors.website"),value:c.website,onChange:u,placeholder:y("publishDialog.placeholder.website")})]}),(0,J.jsx)("span",{className:"publish-library-note",children:(0,J.jsx)(bi,{i18nKey:"publishDialog.noteLicense",link:b=>(0,J.jsx)("a",{href:"https://github.com/excalidraw/excalidraw-libraries/blob/main/LICENSE",target:"_blank",rel:"noopener noreferrer",children:b})})})]}),(0,J.jsxs)("div",{className:"publish-library__buttons",children:[(0,J.jsx)(Rs,{label:y("buttons.cancel"),onClick:g,"data-testid":"cancel-clear-canvas-button"}),(0,J.jsx)(Rs,{type:"submit",label:y("buttons.submit"),actionType:"primary",isLoading:h})]})]}):(0,J.jsx)("p",{style:{padding:"1em",textAlign:"center",fontWeight:500},children:y("publishDialog.atleastOneLibItem")})})},_6=P6,$C=({className:e="",children:t,onToggle:n,title:i,...r})=>{let a=lt(),o=$(`dropdown-menu-button ${e}`,"zen-mode-transition",{"dropdown-menu-button--mobile":a.editor.isMobile}).trim();return(0,FC.jsx)("button",{"data-prevent-outside-click":!0,className:o,onClick:n,type:"button","data-testid":"dropdown-menu-button",title:i,...r,children:t})},O6=$C;$C.displayName="DropdownMenuTrigger";var zC=()=>(0,BC.jsx)("div",{style:{height:"1px",backgroundColor:"var(--default-border-color)",margin:".5rem 0"}}),F6=zC;zC.displayName="DropdownMenuSeparator";var jC=({children:e,onClickOutside:t,className:n="",onSelect:i,style:r})=>{let a=lt(),o=(0,yu.useRef)(null),c=ru({onClickOutside:t});eg(o,()=>{c.onClickOutside?.()}),(0,yu.useEffect)(()=>{let h=l=>{l.key===k.ESCAPE&&(l.stopImmediatePropagation(),c.onClickOutside?.())},s={capture:!0};return document.addEventListener("keydown",h,s),()=>{document.removeEventListener("keydown",h,s)}},[c]);let d=$(`dropdown-menu ${n}`,{"dropdown-menu--mobile":a.editor.isMobile}).trim();return(0,rl.jsx)(rC.Provider,{value:{onSelect:i},children:(0,rl.jsx)("div",{ref:o,className:d,style:r,"data-testid":"dropdown-menu",children:a.editor.isMobile?(0,rl.jsx)(Cn.Col,{className:"dropdown-menu-container",children:e}):(0,rl.jsx)(Kn,{className:"dropdown-menu-container",padding:2,style:{zIndex:2},children:e})})})};jC.displayName="DropdownMenuContent";var $6=jC,UC=({icon:e,shortcut:t,href:n,children:i,onSelect:r,className:a="",selected:o,rel:c="noreferrer",...d})=>{let h=sC(d.onClick,r);return(0,_f.jsx)("a",{...d,href:n,target:"_blank",rel:"noreferrer",className:aC(a,o),title:d.title??d["aria-label"],onClick:h,children:(0,_f.jsx)(oC,{icon:e,shortcut:t,children:i})})},$d=UC;UC.displayName="DropdownMenuItemLink";var B6=({children:e,className:t="",selected:n,...i})=>(0,HC.jsx)("div",{...i,className:`dropdown-menu-item-base dropdown-menu-item-custom ${t} ${n?"dropdown-menu-item--selected":""}`.trim(),children:e}),z6=B6,j6=e=>bl.default.Children.toArray(e).find(n=>bl.default.isValidElement(n)&&typeof n.type!="string"&&n?.type.displayName&&n.type.displayName==="DropdownMenuTrigger")||null,U6=e=>bl.default.Children.toArray(e).find(n=>bl.default.isValidElement(n)&&typeof n.type!="string"&&n?.type.displayName&&n.type.displayName==="DropdownMenuContent")||null,Wi=({children:e,open:t})=>{let n=j6(e),i=U6(e);return(0,Eu.jsxs)(Eu.Fragment,{children:[n,t&&i]})};Wi.Trigger=O6;Wi.Content=$6;Wi.Item=Mn;Wi.ItemLink=$d;Wi.ItemCustom=z6;Wi.Group=Tf;Wi.Separator=F6;var Ce=Wi;Wi.displayName="DropdownMenu";var H6=(e,t)=>e.filter(n=>t.includes(n.id)),W6=({setAppState:e,selectedItems:t,library:n,onRemoveFromLibrary:i,resetLibrary:r,onSelectItems:a,appState:o,className:c})=>{let[d]=je(gl),[h,s]=je(mg),l=()=>{let M=t.length?y("alerts.removeItemsFromsLibrary",{count:t.length}):y("alerts.resetLibrary"),R=t.length?y("confirmDialog.removeItemsFromLib"):y("confirmDialog.resetLibrary");return(0,Je.jsx)(OC,{onConfirm:()=>{t.length?i():r(),u(!1)},onCancel:()=>{u(!1)},title:R,children:(0,Je.jsx)("p",{children:M})})},[m,u]=(0,Ts.useState)(!1),p=!!t.length,f=p?d.libraryItems.filter(M=>t.includes(M.id)):d.libraryItems,g=y(p?"buttons.remove":"buttons.resetLibrary"),[v,E]=(0,Ts.useState)(!1),[b,w]=(0,Ts.useState)(null),x=(0,Ts.useCallback)(()=>(0,Je.jsxs)(Qn,{onCloseRequest:()=>w(null),title:y("publishSuccessDialog.title"),className:"publish-library-success",size:"small",children:[(0,Je.jsx)("p",{children:(0,Je.jsx)(bi,{i18nKey:"publishSuccessDialog.content",authorName:b.authorName,link:M=>(0,Je.jsx)("a",{href:b?.url,target:"_blank",rel:"noopener noreferrer",children:M})})}),(0,Je.jsx)(ce,{type:"button",title:y("buttons.close"),"aria-label":y("buttons.close"),label:y("buttons.close"),onClick:()=>w(null),"data-testid":"publish-library-success-close",className:"publish-library-success-close"})]}),[w,b]),S=(M,R)=>{E(!1),w({url:M.url,authorName:M.authorName});let z=R.slice();z.forEach(_=>{t.includes(_.id)&&(_.status="published")}),n.setLibrary(z)},C=async()=>{try{await n.updateLibrary({libraryItems:bh({description:"Excalidraw library files"}),merge:!0,openLibraryMenu:!0})}catch(M){if(M?.name==="AbortError"){console.warn(M);return}e({errorMessage:y("errors.importLibraryError")})}},T=async()=>{let M=p?f:await n.getLatestLibrary();jb(M).catch(rm).catch(R=>{e({errorMessage:R.message})})},L=()=>(0,Je.jsxs)(Ce,{open:h,children:[(0,Je.jsx)(Ce.Trigger,{onToggle:()=>s(!h),children:Z1}),(0,Je.jsxs)(Ce.Content,{onClickOutside:()=>s(!1),onSelect:()=>s(!1),className:"library-menu",children:[!p&&(0,Je.jsx)(Ce.Item,{onSelect:C,icon:mc,"data-testid":"lib-dropdown--load",children:y("buttons.load")}),!!f.length&&(0,Je.jsx)(Ce.Item,{onSelect:T,icon:lo,"data-testid":"lib-dropdown--export",children:y("buttons.export")}),!!f.length&&(0,Je.jsx)(Ce.Item,{onSelect:()=>u(!0),icon:Qi,children:g}),p&&(0,Je.jsx)(Ce.Item,{icon:Jv,onSelect:()=>E(!0),"data-testid":"lib-dropdown--remove",children:y("buttons.publishLibrary")})]})]});return(0,Je.jsxs)("div",{className:$("library-menu-dropdown-container",c),children:[L(),t.length>0&&(0,Je.jsx)("div",{className:"library-actions-counter",children:t.length}),m&&l(),v&&(0,Je.jsx)(_6,{onClose:()=>E(!1),libraryItems:H6(d.libraryItems,t),appState:o,onSuccess:M=>S(M,d.libraryItems),onError:M=>window.alert(M),updateItemsInStorage:()=>n.setLibrary(d.libraryItems),onRemove:M=>a(t.filter(R=>R!==M))}),b&&x()]})},Rx=({selectedItems:e,onSelectItems:t,className:n})=>{let{library:i}=xi(),{clearLibraryCache:r,deleteItemsFromLibraryCache:a}=AC(),o=yt(),c=nt(),[d]=je(gl),h=async s=>{let l=s.filter(m=>!e.includes(m.id));i.setLibrary(l).catch(()=>{c({errorMessage:y("alerts.errorRemovingFromLibrary")})}),a(e),t([])};return(0,Je.jsx)(W6,{appState:o,setAppState:c,selectedItems:e,onSelectItems:t,library:i,onRemoveFromLibrary:()=>h(d.libraryItems),resetLibrary:()=>{i.resetLibrary(),r()},className:n})},V6=(0,Ar.memo)(({id:e,elements:t,isPending:n,onClick:i,selected:r,onToggle:a,onDrag:o,svgCache:c})=>{let d=(0,Ar.useRef)(null),h=m6(e,t,c);(0,Ar.useEffect)(()=>{let p=d.current;if(p)return h&&(p.innerHTML=h.outerHTML),()=>{p.innerHTML=""}},[h]);let[s,l]=(0,Ar.useState)(!1),m=lt().editor.isMobile,u=n&&(0,ba.jsx)("div",{className:"library-unit__adder",children:K1});return(0,ba.jsxs)("div",{className:$("library-unit",{"library-unit__active":t,"library-unit--hover":t&&s,"library-unit--selected":r,"library-unit--skeleton":!h}),onMouseEnter:()=>l(!0),onMouseLeave:()=>l(!1),children:[(0,ba.jsx)("div",{className:$("library-unit__dragger",{"library-unit__pulse":!!n}),ref:d,draggable:!!t,onClick:t||n?p=>{e&&p.shiftKey?a(e,p):i(e)}:void 0,onDragStart:p=>{if(!e){p.preventDefault();return}l(!1),o(e,p)}}),u,e&&t&&(s||m||r)&&(0,ba.jsx)(ag,{checked:r,onChange:(p,f)=>a(e,f),className:"library-unit__checkbox"})]})}),Y6=()=>(0,ba.jsx)("div",{className:"library-unit library-unit--skeleton"});function G6(){return[!1,(0,wu.useCallback)(e=>e(),[])]}var K6=wu.default.useTransition||G6,Ax=({children:e})=>(0,ya.jsx)("div",{className:"library-menu-items-container__grid",children:e}),of=(0,Fs.memo)(({items:e,onItemSelectToggle:t,onItemDrag:n,isItemSelected:i,onClick:r,svgCache:a,itemsRenderedPerBatch:o})=>{let[,c]=K6(),[d,h]=(0,Fs.useState)(0);return(0,Fs.useEffect)(()=>{d<e.length&&c(()=>{h(d+o)})},[d,e.length,c,o]),(0,ya.jsx)(ya.Fragment,{children:e.map((s,l)=>l<d?(0,ya.jsx)(V6,{elements:s?.elements,isPending:!s?.id&&!!s?.elements,onClick:r,svgCache:a,id:s?.id,selected:i(s.id),onToggle:t,onDrag:n},s?.id??l):(0,ya.jsx)(Y6,{},l))})}),Z6=Ze(0),X6=e=>{let[t,n]=je(Z6);return(0,WC.useEffect)(()=>{let{current:i}=e;if(!i)return;let r=(0,VC.default)(()=>{let{scrollTop:a}=i;n(a)},200);return i.addEventListener("scroll",r),()=>{r.cancel(),i.removeEventListener("scroll",r)}},[e,n]),t},q6=17,Q6=64;function J6({isLoading:e,libraryItems:t,onAddToLibrary:n,onInsertLibraryItems:i,pendingElements:r,theme:a,id:o,libraryReturnUrl:c,onSelectItems:d,selectedItems:h}){let s=(0,Dt.useRef)(null),l=X6(s);(0,Dt.useEffect)(()=>{l>0&&s.current?.scrollTo(0,l)},[]);let{svgCache:m}=AC(),u=(0,Dt.useMemo)(()=>t.filter(M=>M.status!=="published"),[t]),p=(0,Dt.useMemo)(()=>t.filter(M=>M.status==="published"),[t]),f=!t.length&&!r.length,g=!r.length&&!u.length&&!p.length,[v,E]=(0,Dt.useState)(null),b=(0,Dt.useCallback)((M,R)=>{let z=!h.includes(M),_=[...u,...p];if(z){if(R.shiftKey&&v){let H=_.findIndex(V=>V.id===v),P=_.findIndex(V=>V.id===M);if(H===-1||P===-1){d([...h,M]);return}let B=Ee(h),q=_.reduce((V,Y,ie)=>((ie>=H&&ie<=P||B.has(Y.id))&&V.push(Y.id),V),[]);d(q)}else d([...h,M]);E(M)}else E(null),d(h.filter(H=>H!==M))},[v,d,p,h,u]),w=(0,Dt.useCallback)(M=>{let R;return h.includes(M)?R=t.filter(z=>h.includes(z.id)):R=t.filter(z=>z.id===M),R.map(z=>({...z,elements:gh(z.elements,{randomizeSeed:!0})}))},[t,h]),x=(0,Dt.useCallback)((M,R)=>{R.dataTransfer.setData(Ot.excalidrawlib,zb(w(M)))},[w]),S=(0,Dt.useCallback)(M=>M?h.includes(M):!1,[h]),C=(0,Dt.useCallback)(()=>{n(r)},[r,n]),T=(0,Dt.useCallback)(M=>{M&&i(w(M))},[w,i]),L=m.size>=t.length?Q6:q6;return(0,Ae.jsxs)("div",{className:"library-menu-items-container",style:r.length||u.length||p.length?{justifyContent:"flex-start"}:{borderBottom:0},children:[!g&&(0,Ae.jsx)(Rx,{selectedItems:h,onSelectItems:d,className:"library-menu-dropdown-container--in-heading"}),(0,Ae.jsxs)(Cn.Col,{className:"library-menu-items-container__items",align:"start",gap:1,style:{flex:p.length>0?1:"0 1 auto",marginBottom:0},ref:s,children:[(0,Ae.jsxs)(Ae.Fragment,{children:[!g&&(0,Ae.jsx)("div",{className:"library-menu-items-container__header",children:y("labels.personalLib")}),e&&(0,Ae.jsx)("div",{style:{position:"absolute",top:"var(--container-padding-y)",right:"var(--container-padding-x)",transform:"translateY(50%)"},children:(0,Ae.jsx)(Ui,{})}),!r.length&&!u.length?(0,Ae.jsxs)("div",{className:"library-menu-items__no-items",children:[(0,Ae.jsx)("div",{className:"library-menu-items__no-items__label",children:y("library.noItems")}),(0,Ae.jsx)("div",{className:"library-menu-items__no-items__hint",children:p.length>0?y("library.hint_emptyPrivateLibrary"):y("library.hint_emptyLibrary")})]}):(0,Ae.jsxs)(Ax,{children:[r.length>0&&(0,Ae.jsx)(of,{itemsRenderedPerBatch:L,items:[{id:null,elements:r}],onItemSelectToggle:b,onItemDrag:x,onClick:C,isItemSelected:S,svgCache:m}),(0,Ae.jsx)(of,{itemsRenderedPerBatch:L,items:u,onItemSelectToggle:b,onItemDrag:x,onClick:T,isItemSelected:S,svgCache:m})]})]}),(0,Ae.jsxs)(Ae.Fragment,{children:[(p.length>0||r.length>0||u.length>0)&&(0,Ae.jsx)("div",{className:"library-menu-items-container__header library-menu-items-container__header--excal",children:y("labels.excalidrawLib")}),p.length>0?(0,Ae.jsx)(Ax,{children:(0,Ae.jsx)(of,{itemsRenderedPerBatch:L,items:p,onItemSelectToggle:b,onItemDrag:x,onClick:T,isItemSelected:S,svgCache:m})}):u.length>0?(0,Ae.jsx)("div",{style:{margin:"1rem 0",display:"flex",flexDirection:"column",alignItems:"center",justifyContent:"center",width:"100%",fontSize:".9rem"},children:y("library.noItems")}):null]}),f&&(0,Ae.jsx)(_C,{style:{padding:"16px 0",width:"100%"},id:o,libraryReturnUrl:c,theme:a,children:(0,Ae.jsx)(Rx,{selectedItems:h,onSelectItems:d})})]})]})}var mg=Ze(!1),Nx=({children:e})=>(0,yn.jsx)("div",{className:"layer-ui__library",children:e}),eD=(0,vt.memo)(({onInsertLibraryItems:e,pendingElements:t,onAddToLibrary:n,setAppState:i,libraryReturnUrl:r,library:a,id:o,theme:c,selectedItems:d,onSelectItems:h})=>{let[s]=je(gl),l=(0,vt.useCallback)(p=>{(async(f,g)=>{we("element","addToLibrary","ui");for(let E of Xu)if(f.some(b=>b.type===E))return i({errorMessage:y(`errors.libraryElementTypeError.${E}`)});let v=[{status:"unpublished",elements:f,id:Eo(),created:Date.now()},...g];n(),a.setLibrary(v).catch(()=>{i({errorMessage:y("alerts.errorAddingToLibrary")})})})(p,s.libraryItems)},[n,a,i,s.libraryItems]),m=(0,vt.useMemo)(()=>s.libraryItems,[s]);if(s.status==="loading"&&!s.isInitialized)return(0,yn.jsx)(Nx,{children:(0,yn.jsx)("div",{className:"layer-ui__library-message",children:(0,yn.jsxs)("div",{children:[(0,yn.jsx)(Ui,{size:"2em"}),(0,yn.jsx)("span",{children:y("labels.libraryLoadingMessage")})]})})});let u=s.libraryItems.length>0||t.length>0;return(0,yn.jsxs)(Nx,{children:[(0,yn.jsx)(J6,{isLoading:s.status==="loading",libraryItems:m,onAddToLibrary:l,onInsertLibraryItems:e,pendingElements:t,id:o,libraryReturnUrl:r,theme:c,onSelectItems:h,selectedItems:d}),u&&(0,yn.jsx)(_C,{className:"library-menu-control-buttons--at-bottom",style:{padding:"16px 12px 0 12px"},id:o,libraryReturnUrl:r,theme:c})]})}),lf=(e,t)=>({elements:e,pending:se(e,{selectedElementIds:t},{includeBoundTextElement:!0,includeElementsInFrames:!0}),selectedElementIds:t}),tD=(e,t)=>{let n=Ru(),[i,r]=(0,vt.useState)(()=>lf(n,e.selectedElementIds)),a=(0,vt.useRef)(new Map);return(0,vt.useEffect)(()=>{for(let o of i.pending)a.current.set(o.id,o.version)},[i.pending]),(0,vt.useEffect)(()=>{t.state.cursorButton==="up"&&t.state.activeTool.type==="selection"&&r(o=>{if(!hn(o.selectedElementIds,e.selectedElementIds))return a.current.clear(),lf(n,e.selectedElementIds);let c=t.scene.getNonDeletedElementsMap();for(let d of Object.keys(e.selectedElementIds)){let h=c.get(d)?.version;if(h&&h!==a.current.get(d))return lf(n,e.selectedElementIds)}return o})},[t,t.state.cursorButton,t.state.activeTool.type,e.selectedElementIds,n]),i.pending},nD=(0,vt.memo)(()=>{let e=xi(),{onInsertElements:t}=e,n=Nl(),i=yt(),r=nt(),[a,o]=(0,vt.useState)([]),c=(0,vt.useMemo)(()=>e.library,[e.library]),d=tD(i,e),h=(0,vt.useCallback)(l=>{t(NC(l))},[t]),s=(0,vt.useCallback)(()=>{r({selectedElementIds:{},selectedGroupIds:{},activeEmbeddable:null})},[r]);return(0,yn.jsx)(eD,{pendingElements:d,onInsertLibraryItems:h,onAddToLibrary:s,setAppState:r,libraryReturnUrl:n.libraryReturnUrl,library:c,id:e.id,theme:i.theme,selectedItems:a,onSelectItems:o})});function iD(e){if(e&&typeof e=="number")return e;switch(e){case"small":return 550;case"wide":return 1024;default:return 800}}var Qn=e=>{let[t,n]=d6(),[i]=(0,fu.useState)(document.activeElement),{id:r}=Si(),a=lt().viewport.isMobile;(0,fu.useEffect)(()=>{if(!t)return;let h=Jl(t);setTimeout(()=>{h.length>0&&e.autofocus!==!1&&(h[1]||h[0]).focus()});let s=l=>{if(l.key===k.TAB){let m=Jl(t),{activeElement:u}=document,p=m.findIndex(f=>f===u);p===0&&l.shiftKey?(m[m.length-1].focus(),l.preventDefault()):p===m.length-1&&!l.shiftKey&&(m[0].focus(),l.preventDefault())}};return t.addEventListener("keydown",s),()=>t.removeEventListener("keydown",s)},[t,e.autofocus]);let o=nt(),c=qd(mg),d=()=>{o({openMenu:null}),c(!1),i.focus(),e.onCloseRequest()};return(0,wr.jsx)(u6,{className:$("Dialog",e.className,{"Dialog--fullscreen":a}),labelledBy:"dialog-title",maxWidth:iD(e.size),onCloseRequest:d,closeOnClickOutside:e.closeOnClickOutside,children:(0,wr.jsxs)(Kn,{ref:n,children:[e.title&&(0,wr.jsx)("h2",{id:`${r}-dialog-title`,className:"Dialog__title",children:(0,wr.jsx)("span",{className:"Dialog__titleContent",children:e.title})}),a&&(0,wr.jsx)("button",{className:"Dialog__close",onClick:d,title:y("buttons.close"),"aria-label":y("buttons.close"),type:"button",children:Yr}),(0,wr.jsx)("div",{className:"Dialog__content",children:e.children})]})})},Ta=({type:e="button",onSelect:t,selected:n,children:i,className:r="",...a})=>(0,YC.jsx)("button",{onClick:ro(a.onClick,o=>{t()}),type:e,className:$("excalidraw-button",r,{selected:n}),...a,children:i}),hg=(0,wi.forwardRef)(({onChange:e,label:t,fullWidth:n,placeholder:i,readonly:r,selectOnRender:a,onKeyDown:o,isRedacted:c=!1,icon:d,className:h,...s},l)=>{let m=(0,wi.useRef)(null);(0,wi.useImperativeHandle)(l,()=>m.current),(0,wi.useLayoutEffect)(()=>{a&&(m.current?.focus(),m.current?.select())},[a]);let[u,p]=(0,wi.useState)(!1);return(0,Ea.jsxs)("div",{className:$("ExcTextField",h,{"ExcTextField--fullWidth":n,"ExcTextField--hasIcon":!!d}),onClick:()=>{m.current?.focus()},children:[d,t&&(0,Ea.jsx)("div",{className:"ExcTextField__label",children:t}),(0,Ea.jsxs)("div",{className:$("ExcTextField__input",{"ExcTextField__input--readonly":r}),children:[(0,Ea.jsx)("input",{className:$({"is-redacted":"value"in s&&s.value&&c&&!u}),readOnly:r,value:"value"in s?s.value:void 0,defaultValue:"defaultValue"in s?s.defaultValue:void 0,placeholder:i,ref:m,onChange:f=>e?.(f.target.value),onKeyDown:o}),c&&(0,Ea.jsx)(Ta,{onSelect:()=>p(!u),style:{border:0,userSelect:"none"},children:u?o0:fc})]})]})}),rD={toggleTheme:[F("Shift+Alt+D")],saveScene:[F("CtrlOrCmd+S")],loadScene:[F("CtrlOrCmd+O")],clearCanvas:[F("CtrlOrCmd+Delete")],imageExport:[F("CtrlOrCmd+Shift+E")],commandPalette:[F("CtrlOrCmd+/"),F("CtrlOrCmd+Shift+P")],cut:[F("CtrlOrCmd+X")],copy:[F("CtrlOrCmd+C")],paste:[F("CtrlOrCmd+V")],copyStyles:[F("CtrlOrCmd+Alt+C")],pasteStyles:[F("CtrlOrCmd+Alt+V")],selectAll:[F("CtrlOrCmd+A")],deleteSelectedElements:[F("Delete")],duplicateSelection:[F("CtrlOrCmd+D"),F(`Alt+${y("helpDialog.drag")}`)],sendBackward:[F("CtrlOrCmd+[")],bringForward:[F("CtrlOrCmd+]")],sendToBack:[Ii?F("CtrlOrCmd+Alt+["):F("CtrlOrCmd+Shift+[")],bringToFront:[Ii?F("CtrlOrCmd+Alt+]"):F("CtrlOrCmd+Shift+]")],copyAsPng:[F("Shift+Alt+C")],group:[F("CtrlOrCmd+G")],ungroup:[F("CtrlOrCmd+Shift+G")],gridMode:[F("CtrlOrCmd+'")],zenMode:[F("Alt+Z")],objectsSnapMode:[F("Alt+S")],stats:[F("Alt+/")],addToLibrary:[],flipHorizontal:[F("Shift+H")],flipVertical:[F("Shift+V")],viewMode:[F("Alt+R")],hyperlink:[F("CtrlOrCmd+K")],toggleElementLock:[F("CtrlOrCmd+Shift+L")],resetZoom:[F("CtrlOrCmd+0")],zoomOut:[F("CtrlOrCmd+-")],zoomIn:[F("CtrlOrCmd++")],zoomToFitSelection:[F("Shift+3")],zoomToFit:[F("Shift+1")],zoomToFitSelectionInViewport:[F("Shift+2")],toggleEraserTool:[F("E")],toggleHandTool:[F("H")],setFrameAsActiveTool:[F("F")],saveFileToDisk:[F("CtrlOrCmd+S")],saveToActiveFile:[F("CtrlOrCmd+S")],toggleShortcuts:[F("?")],searchMenu:[F("CtrlOrCmd+F")],wrapSelectionInFrame:[]},At=(e,t=0)=>{let n=rD[e];return n&&n.length>0?n[t]||n[0]:""},aD="\\u0300-\\u036f",sD="\\ufe20-\\ufe2f",oD="\\u20d0-\\u20ff",lD=aD+sD+oD,cD=`[${lD}]`,dD=RegExp(cD,"g"),uD=/[\xc0-\xd6\xd8-\xf6\xf8-\xff\u0100-\u017f]/g,mD={\u00C0:"A",\u00C1:"A",\u00C2:"A",\u00C3:"A",\u00C4:"A",\u00C5:"A",\u00E0:"a",\u00E1:"a",\u00E2:"a",\u00E3:"a",\u00E4:"a",\u00E5:"a",\u00C7:"C",\u00E7:"c",\u00D0:"D",\u00F0:"d",\u00C8:"E",\u00C9:"E",\u00CA:"E",\u00CB:"E",\u00E8:"e",\u00E9:"e",\u00EA:"e",\u00EB:"e",\u00CC:"I",\u00CD:"I",\u00CE:"I",\u00CF:"I",\u00EC:"i",\u00ED:"i",\u00EE:"i",\u00EF:"i",\u00D1:"N",\u00F1:"n",\u00D2:"O",\u00D3:"O",\u00D4:"O",\u00D5:"O",\u00D6:"O",\u00D8:"O",\u00F2:"o",\u00F3:"o",\u00F4:"o",\u00F5:"o",\u00F6:"o",\u00F8:"o",\u00D9:"U",\u00DA:"U",\u00DB:"U",\u00DC:"U",\u00F9:"u",\u00FA:"u",\u00FB:"u",\u00FC:"u",\u00DD:"Y",\u00FD:"y",\u00FF:"y",\u00C6:"E",\u00E6:"e",\u00DE:"T",\u00FE:"t",\u00DF:"s",\u0100:"A",\u0102:"A",\u0104:"A",\u0101:"a",\u0103:"a",\u0105:"a",\u0106:"C",\u0108:"C",\u010A:"C",\u010C:"C",\u0107:"c",\u0109:"c",\u010B:"c",\u010D:"c",\u010E:"D",\u0110:"D",\u010F:"d",\u0111:"d",\u0112:"E",\u0114:"E",\u0116:"E",\u0118:"E",\u011A:"E",\u0113:"e",\u0115:"e",\u0117:"e",\u0119:"e",\u011B:"e",\u011C:"G",\u011E:"G",\u0120:"G",\u0122:"G",\u011D:"g",\u011F:"g",\u0121:"g",\u0123:"g",\u0124:"H",\u0126:"H",\u0125:"h",\u0127:"h",\u0128:"I",\u012A:"I",\u012C:"I",\u012E:"I",\u0130:"I",\u0129:"i",\u012B:"i",\u012D:"i",\u012F:"i",\u0131:"i",\u0134:"J",\u0135:"j",\u0136:"K",\u0137:"k",\u0138:"k",\u0139:"L",\u013B:"L",\u013D:"L",\u013F:"L",\u0141:"L",\u013A:"l",\u013C:"l",\u013E:"l",\u0140:"l",\u0142:"l",\u0143:"N",\u0145:"N",\u0147:"N",\u014A:"N",\u0144:"n",\u0146:"n",\u0148:"n",\u014B:"n",\u014C:"O",\u014E:"O",\u0150:"O",\u014D:"o",\u014F:"o",\u0151:"o",\u0154:"R",\u0156:"R",\u0158:"R",\u0155:"r",\u0157:"r",\u0159:"r",\u015A:"S",\u015C:"S",\u015E:"S",\u0160:"S",\u015B:"s",\u015D:"s",\u015F:"s",\u0161:"s",\u0162:"T",\u0164:"T",\u0166:"T",\u0163:"t",\u0165:"t",\u0167:"t",\u0168:"U",\u016A:"U",\u016C:"U",\u016E:"U",\u0170:"U",\u0172:"U",\u0169:"u",\u016B:"u",\u016D:"u",\u016F:"u",\u0171:"u",\u0173:"u",\u0174:"W",\u0175:"w",\u0176:"Y",\u0177:"y",\u0178:"Y",\u0179:"Z",\u017B:"Z",\u017D:"Z",\u017A:"z",\u017C:"z",\u017E:"z",\u0132:"I",\u0133:"i",\u0152:"E",\u0153:"e",\u0149:"n",\u017F:"s"},Px=e=>e.replace(uD,t=>mD[t]||t).replace(dD,""),ZC=xu.default.createContext(null),Vt=()=>xu.default.useContext(ZC),hD=Wc(),pD=()=>xu.default.useMemo(()=>({MainMenuTunnel:$n(),WelcomeScreenMenuHintTunnel:$n(),WelcomeScreenToolbarHintTunnel:$n(),WelcomeScreenHelpHintTunnel:$n(),WelcomeScreenCenterTunnel:$n(),FooterCenterTunnel:$n(),DefaultSidebarTriggerTunnel:$n(),DefaultSidebarTabTriggersTunnel:$n(),OverwriteConfirmDialogTunnel:$n(),TTDDialogTriggerTunnel:$n(),tunnelsJotai:hD}),[]),XC=(e,t)=>{let n=t[0]?.type||null;for(let i of t)if(i.type!==n){n=null;break}return xc(e.activeTool.type)&&e.activeTool.type!=="image"&&n!=="image"&&n!=="frame"&&n!=="magicframe"||t.some(i=>xc(i.type))},qC=(e,t)=>Kr(e.activeTool.type)||t.some(n=>Kr(n.type)),QC=({appState:e,elementsMap:t,renderAction:n,app:i})=>{let r=zh(t,e),a=!1;r.length===2&&(ri(r[0])||ri(r[1]))&&(a=!0);let o=!!(e.editingTextElement||e.newElement),c=lt(),d=document.documentElement.getAttribute("dir")==="rtl",h=Kr(e.activeTool.type)&&!no(e.currentItemBackgroundColor)||r.some(p=>Kr(p.type)&&!no(p.backgroundColor)),s=r.length===1||a,l=!e.editingLinearElement&&r.length===1&&De(r[0])&&!le(r[0]),m=!e.croppingElementId&&r.length===1&&_e(r[0]),u=!a&&cn(e,i);return(0,ee.jsxs)("div",{className:"panelColumn",children:[(0,ee.jsx)("div",{children:XC(e,r)&&n("changeStrokeColor")}),qC(e,r)&&(0,ee.jsx)("div",{children:n("changeBackgroundColor")}),h&&n("changeFillStyle"),(Zm(e.activeTool.type)||r.some(p=>Zm(p.type)))&&n("changeStrokeWidth"),(e.activeTool.type==="freedraw"||r.some(p=>p.type==="freedraw"))&&n("changeStrokeShape"),(Xm(e.activeTool.type)||r.some(p=>Xm(p.type)))&&(0,ee.jsxs)(ee.Fragment,{children:[n("changeStrokeStyle"),n("changeSloppiness")]}),(qm(e.activeTool.type)||r.some(p=>qm(p.type)))&&(0,ee.jsx)(ee.Fragment,{children:n("changeRoundness")}),(Qm(e.activeTool.type)||r.some(p=>Qm(p.type)))&&(0,ee.jsx)(ee.Fragment,{children:n("changeArrowType")}),(e.activeTool.type==="text"||r.some(te))&&(0,ee.jsxs)(ee.Fragment,{children:[n("changeFontFamily"),n("changeFontSize"),(e.activeTool.type==="text"||Ib(r,t))&&n("changeTextAlign")]}),Cb(r,t)&&n("changeVerticalAlign"),(ho(e.activeTool.type)||r.some(p=>ho(p.type)))&&(0,ee.jsx)(ee.Fragment,{children:n("changeArrowhead")}),n("changeOpacity"),(0,ee.jsxs)("fieldset",{children:[(0,ee.jsx)("legend",{children:y("labels.layers")}),(0,ee.jsxs)("div",{className:"buttonList",children:[n("sendToBack"),n("sendBackward"),n("bringForward"),n("bringToFront")]})]}),u&&!a&&(0,ee.jsxs)("fieldset",{children:[(0,ee.jsx)("legend",{children:y("labels.align")}),(0,ee.jsxs)("div",{className:"buttonList",children:[d?(0,ee.jsxs)(ee.Fragment,{children:[n("alignRight"),n("alignHorizontallyCentered"),n("alignLeft")]}):(0,ee.jsxs)(ee.Fragment,{children:[n("alignLeft"),n("alignHorizontallyCentered"),n("alignRight")]}),r.length>2&&n("distributeHorizontally"),(0,ee.jsx)("div",{style:{flexBasis:"100%",height:0}}),(0,ee.jsxs)("div",{style:{display:"flex",flexWrap:"wrap",gap:".5rem",marginTop:"-0.5rem"},children:[n("alignTop"),n("alignVerticallyCentered"),n("alignBottom"),r.length>2&&n("distributeVertically")]})]})]}),!o&&r.length>0&&(0,ee.jsxs)("fieldset",{children:[(0,ee.jsx)("legend",{children:y("labels.actions")}),(0,ee.jsxs)("div",{className:"buttonList",children:[!c.editor.isMobile&&n("duplicateSelection"),!c.editor.isMobile&&n("deleteSelectedElements"),n("group"),n("ungroup"),s&&n("hyperlink"),m&&n("cropEditor"),l&&n("toggleLinearEditor")]})]})]})},JC=({activeTool:e,appState:t,app:n,UIOptions:i})=>{let[r,a]=(0,KC.useState)(!1),o=e.type==="frame",c=e.type==="laser",d=e.type==="embeddable",{TTDDialogTriggerTunnel:h}=Vt();return(0,ee.jsxs)(ee.Fragment,{children:[Ym.map(({value:s,icon:l,key:m,numericKey:u,fillable:p},f)=>{if(i.tools?.[s]===!1)return null;let g=y(`toolBar.${s}`),v=m&&Oa(typeof m=="string"?m:m[0]),E=v?`${v} ${y("helpDialog.or")} ${u}`:`${u}`;return(0,ee.jsx)(ce,{className:$("Shape",{fillable:p}),type:"radio",icon:l,checked:e.type===s,name:"editor-current-shape",title:`${Oa(g)} \u2014 ${E}`,keyBindingLabel:u||v,"aria-label":Oa(g),"aria-keyshortcuts":E,"data-testid":`toolbar-${s}`,onPointerDown:({pointerType:b})=>{!t.penDetected&&b==="pen"&&n.togglePenMode(!0)},onChange:({pointerType:b})=>{t.activeTool.type!==s&&we("toolbar",s,"ui"),s==="image"?n.setActiveTool({type:s,insertOnCanvasDirectly:b!=="mouse"}):n.setActiveTool({type:s})}},s)}),(0,ee.jsx)("div",{className:"App-toolbar__divider"}),(0,ee.jsxs)(Ce,{open:r,children:[(0,ee.jsx)(Ce.Trigger,{className:$("App-toolbar__extra-tools-trigger",{"App-toolbar__extra-tools-trigger--selected":o||d||c&&!n.props.isCollaborating}),onToggle:()=>a(!r),title:y("toolBar.extraTools"),children:a0}),(0,ee.jsxs)(Ce.Content,{onClickOutside:()=>a(!1),onSelect:()=>a(!1),className:"App-toolbar__extra-tools-dropdown",children:[(0,ee.jsx)(Ce.Item,{onSelect:()=>n.setActiveTool({type:"frame"}),icon:Fm,shortcut:k.F.toLocaleUpperCase(),"data-testid":"toolbar-frame",selected:o,children:y("toolBar.frame")}),(0,ee.jsx)(Ce.Item,{onSelect:()=>n.setActiveTool({type:"embeddable"}),icon:iv,"data-testid":"toolbar-embeddable",selected:d,children:y("toolBar.embeddable")}),(0,ee.jsx)(Ce.Item,{onSelect:()=>n.setActiveTool({type:"laser"}),icon:Bm,"data-testid":"toolbar-laser",selected:c,shortcut:k.K.toLocaleUpperCase(),children:y("toolBar.laser")}),(0,ee.jsx)("div",{style:{margin:"6px 0",fontSize:14,fontWeight:600},children:"Generate"}),n.props.aiEnabled!==!1&&(0,ee.jsx)(h.Out,{}),(0,ee.jsx)(Ce.Item,{onSelect:()=>n.setOpenDialog({name:"ttd",tab:"mermaid"}),icon:$m,"data-testid":"toolbar-embeddable",children:y("toolBar.mermaidToExcalidraw")}),n.props.aiEnabled!==!1&&n.plugins.diagramToCode&&(0,ee.jsx)(ee.Fragment,{children:(0,ee.jsxs)(Ce.Item,{onSelect:()=>n.onMagicframeToolSelect(),icon:zm,"data-testid":"toolbar-magicframe",children:[y("toolBar.magicframe"),(0,ee.jsx)(Ce.Item.Badge,{children:"AI"})]})})]})]})]})},fD=({renderAction:e,zoom:t})=>(0,ee.jsx)(Cn.Col,{gap:1,className:$r.ZOOM_ACTIONS,children:(0,ee.jsxs)(Cn.Row,{align:"center",children:[e("zoomOut"),e("resetZoom"),e("zoomIn")]})}),gD=({renderAction:e,className:t})=>(0,ee.jsxs)("div",{className:`undo-redo-buttons ${t}`,children:[(0,ee.jsx)("div",{className:"undo-button-container",children:(0,ee.jsx)(Ia,{label:y("buttons.undo"),children:e("undo")})}),(0,ee.jsx)("div",{className:"redo-button-container",children:(0,ee.jsxs)(Ia,{label:y("buttons.redo"),children:[" ",e("redo")]})})]}),vD=({actionManager:e,showExitZenModeBtn:t})=>(0,ee.jsx)("button",{type:"button",className:$("disable-zen-mode",{"disable-zen-mode--visible":t}),onClick:()=>e.executeAction(Df),children:y("buttons.exitZenMode")}),bD=({renderAction:e,className:t})=>(0,ee.jsx)("div",{className:`finalize-button ${t}`,children:e("finalize",{size:"small"})}),_x=e=>{let t=(0,e3.useRef)({userFn:e});return t.current.userFn=e,t.current.stableFn||(t.current.stableFn=(...n)=>t.current.userFn(...n)),t.current.stableFn},Cu=Ze(null),yD=()=>{let[e,t]=je(Cu),n=Jt();return e&&e==="clearCanvas"?(0,Su.jsx)(OC,{onConfirm:()=>{n.executeAction(ol),t(null)},onCancel:()=>t(null),title:y("clearCanvasDialog.title"),children:(0,Su.jsxs)("p",{className:"clear-canvas__content",children:[" ",y("alerts.clearReset")]})}):null},t3={};Pu(t3,{toggleTheme:()=>ED});var ED={...Wd,category:"App",label:"Toggle theme",perform:({actionManager:e})=>{e.executeAction(Wd,"commandPalette")}},n3=U({name:"copyElementLink",label:"labels.copyElementLink",icon:pc,trackEvent:{category:"element"},perform:async(e,t,n,i)=>{let r=se(e,t);try{if(window.location){let a=Ih(r,t);return a?(await Io(i.props.generateLinkForSelection?i.props.generateLinkForSelection(a.id,a.type):Ch(a.id,a.type)),{appState:{toast:{message:y("toast.elementLinkCopied"),closable:!0}},captureUpdate:N.EVENTUALLY}):{appState:t,elements:e,app:i,captureUpdate:N.EVENTUALLY}}}catch(a){console.error(a)}return{appState:t,elements:e,app:i,captureUpdate:N.EVENTUALLY}},predicate:(e,t)=>Ac(se(e,t))}),wD=U({name:"linkToElement",label:"labels.linkToElement",icon:Vm,perform:(e,t,n,i)=>{let r=se(e,t);return r.length!==1||!Ac(r)?{elements:e,appState:t,app:i,captureUpdate:N.EVENTUALLY}:{appState:{...t,openDialog:{name:"elementLinkSelector",sourceElementId:se(e,t)[0].id}},captureUpdate:N.IMMEDIATELY}},predicate:(e,t,n,i)=>{let r=se(e,t);return t.openDialog?.name!=="elementLinkSelector"&&r.length===1&&Ac(r)},trackEvent:!1}),xD=Ze(null),He={app:"App",export:"Export",tools:"Tools",editor:"Editor",elements:"Elements",links:"Links"},SD=e=>{switch(e){case He.app:return 1;case He.export:return 2;case He.editor:return 3;case He.tools:return 4;case He.elements:return 5;case He.links:return 6;default:return 10}},Bd=({shortcut:e,className:t,children:n})=>{let i=e.replace("++","+$").split("+");return(0,Ie.jsxs)("div",{className:$("shortcut",t),children:[i.map((r,a)=>(0,Ie.jsx)("div",{className:"shortcut-wrapper",children:(0,Ie.jsx)("div",{className:"shortcut-key",children:r==="$"?"+":r})},r)),(0,Ie.jsx)("div",{className:"shortcut-desc",children:n})]})},i3=e=>!e.altKey&&e[k.CTRL_OR_CMD]&&(e.shiftKey&&e.key.toLowerCase()===k.P||e.key===k.SLASH),y_=Object.assign(e=>{let t=yt(),n=nt();return(0,Sn.useEffect)(()=>{let i=r=>{i3(r)&&(r.preventDefault(),r.stopPropagation(),n(a=>{let o=a.openDialog?.name==="commandPalette"?null:{name:"commandPalette"};return o&&we("command_palette","open","shortcut"),{openDialog:o}}))};return window.addEventListener("keydown",i,{capture:!0}),()=>window.removeEventListener("keydown",i,{capture:!0})},[n]),t.openDialog?.name!=="commandPalette"?null:(0,Ie.jsx)(CD,{...e})},{defaultItems:t3});function CD({customCommandPaletteItems:e}){let t=xi(),n=yt(),i=nt(),r=Nl(),a=Jt(),[o,c]=je(xD),[d,h]=(0,Sn.useState)(null),s=(0,Sn.useRef)(null),l=ru({uiAppState:n,customCommandPaletteItems:e,appProps:r});(0,Sn.useEffect)(()=>{let{uiAppState:S,customCommandPaletteItems:C,appProps:T}=l,L=_=>{let H="";return _.label&&(typeof _.label=="function"?H=y(_.label(t.scene.getNonDeletedElements(),S,t)):H=y(_.label)),H},M=_=>typeof _.icon=="function"?_.icon(S,t.scene.getNonDeletedElements()):_.icon,R=[],z=(_,H,P)=>{let B={label:L(_),icon:M(_),category:H,shortcut:At(_.name),keywords:_.keywords,predicate:_.predicate,viewMode:_.viewMode,perform:()=>{a.executeAction(_,"commandPalette")}};return P?P(B,_):B};if(S&&t.scene&&a){let _=[a.actions.group,a.actions.ungroup,a.actions.cut,a.actions.copy,a.actions.deleteSelectedElements,a.actions.wrapSelectionInFrame,a.actions.copyStyles,a.actions.pasteStyles,a.actions.bringToFront,a.actions.bringForward,a.actions.sendBackward,a.actions.sendToBack,a.actions.alignTop,a.actions.alignBottom,a.actions.alignLeft,a.actions.alignRight,a.actions.alignVerticallyCentered,a.actions.alignHorizontallyCentered,a.actions.duplicateSelection,a.actions.flipHorizontal,a.actions.flipVertical,a.actions.zoomToFitSelection,a.actions.zoomToFitSelectionInViewport,a.actions.increaseFontSize,a.actions.decreaseFontSize,a.actions.toggleLinearEditor,a.actions.cropEditor,kC,n3,wD].map(Y=>z(Y,He.elements,(ie,re)=>({...ie,predicate:re.predicate?re.predicate:(ue,ct,Pt,dn)=>se(ue,ct).length>0}))),H=[a.actions.toggleHandTool,a.actions.setFrameAsActiveTool].map(Y=>z(Y,He.tools)),P=[a.actions.undo,a.actions.redo,a.actions.zoomIn,a.actions.zoomOut,a.actions.resetZoom,a.actions.zoomToFit,a.actions.zenMode,a.actions.viewMode,a.actions.gridMode,a.actions.objectsSnapMode,a.actions.toggleShortcuts,a.actions.selectAll,a.actions.toggleElementLock,a.actions.unlockAllElements,a.actions.stats].map(Y=>z(Y,He.editor)),B=[a.actions.saveToActiveFile,a.actions.saveFileToDisk,a.actions.copyAsPng,a.actions.copyAsSvg].map(Y=>z(Y,He.export));R=[..._,...P,{label:L(ol),icon:M(ol),shortcut:At(ol.name),category:He.editor,keywords:["delete","destroy"],viewMode:!1,perform:()=>{Wn.set(Cu,"clearCanvas")}},{label:y("buttons.exportImage"),category:He.export,icon:gm,shortcut:At("imageExport"),keywords:["export","image","png","jpeg","svg","clipboard","picture"],perform:()=>{i({openDialog:{name:"imageExport"}})}},...B];let q=[{label:y("toolBar.library"),category:He.app,icon:ac,viewMode:!1,perform:()=>{S.openSidebar?i({openSidebar:null}):i({openSidebar:{name:An.name,tab:An.defaultTab}})}},{label:y("search.title"),category:He.app,icon:Ji,viewMode:!0,perform:()=>{a.executeAction(a3)}},{label:y("labels.changeStroke"),keywords:["color","outline"],category:He.elements,icon:hc,viewMode:!1,predicate:(Y,ie)=>{let re=se(Y,ie);return re.length>0&&XC(ie,re)},perform:()=>{i(Y=>({openMenu:Y.openMenu==="shape"?null:"shape",openPopup:"elementStroke"}))}},{label:y("labels.changeBackground"),keywords:["color","fill"],icon:hc,category:He.elements,viewMode:!1,predicate:(Y,ie)=>{let re=se(Y,ie);return re.length>0&&qC(ie,re)},perform:()=>{i(Y=>({openMenu:Y.openMenu==="shape"?null:"shape",openPopup:"elementBackground"}))}},{label:y("labels.canvasBackground"),keywords:["color"],icon:hc,category:He.editor,viewMode:!1,perform:()=>{i(Y=>({openMenu:Y.openMenu==="canvas"?null:"canvas",openPopup:"canvasBackground"}))}},...Ym.reduce((Y,ie)=>{let{value:re,icon:ue,key:ct,numericKey:Pt}=ie;if(T.UIOptions.tools?.[re]===!1)return Y;let dn=ct&&Oa(typeof ct=="string"?ct:ct[0])||Pt,Dn={label:y(`toolBar.${re}`),category:He.tools,shortcut:dn,icon:ue,keywords:["toolbar"],viewMode:!1,perform:({event:Yt})=>{re==="image"?t.setActiveTool({type:re,insertOnCanvasDirectly:Yt.type==="keydown"}):t.setActiveTool({type:re})}};return Y.push(Dn),Y},[]),...H,{label:y("toolBar.lock"),category:He.tools,icon:S.activeTool.locked?sc:oo,shortcut:k.Q.toLocaleUpperCase(),viewMode:!1,perform:()=>{t.toggleLock()}},{label:`${y("labels.textToDiagram")}...`,category:He.tools,icon:c0,viewMode:!1,predicate:T.aiEnabled,perform:()=>{i(Y=>({...Y,openDialog:{name:"ttd",tab:"text-to-diagram"}}))}},{label:`${y("toolBar.mermaidToExcalidraw")}...`,category:He.tools,icon:$m,viewMode:!1,predicate:T.aiEnabled,perform:()=>{i(Y=>({...Y,openDialog:{name:"ttd",tab:"mermaid"}}))}}],V=[...R,...q,...C||[]].map(Y=>({...Y,icon:Y.icon||jm,order:Y.order??SD(Y.category),haystack:`${Px(Y.label.toLocaleLowerCase())} ${Y.keywords?.join(" ")||""}`}));h(V),c(V.find(Y=>Y.label===o?.label)??null)}},[l,t,a,h,o?.label,c,i]);let[m,u]=(0,Sn.useState)(""),[p,f]=(0,Sn.useState)(null),[g,v]=(0,Sn.useState)({}),E=S=>{i({openDialog:null},S),u("")},b=(S,C)=>{n.openDialog?.name==="commandPalette"&&(C.stopPropagation(),C.preventDefault(),document.body.classList.add("excalidraw-animations-disabled"),E(()=>{S.perform({actionManager:a,event:C}),c(S),requestAnimationFrame(()=>{document.body.classList.remove("excalidraw-animations-disabled")})}))},w=_x(S=>S.viewMode===!1&&n.viewModeEnabled?!1:typeof S.predicate=="function"?S.predicate(t.scene.getNonDeletedElements(),n,r,t):S.predicate===void 0||S.predicate),x=_x(S=>{let C=Ki(S.target)||i3(S)||S.key===k.ESCAPE;if(C&&S.key!==k.ARROW_UP&&S.key!==k.ARROW_DOWN&&S.key!==k.ENTER)return;let T=Object.values(g).flat(),L=o&&!m&&w(o);if(S.key===k.ARROW_UP){S.preventDefault();let M=T.findIndex(_=>_.label===p?.label);if(L){if(M===0){f(o);return}if(p===o){let _=T[T.length-1];_&&f(_);return}}let R;M===-1?R=T.length-1:R=M===0?T.length-1:(M-1)%T.length;let z=T[R];z&&f(z);return}if(S.key===k.ARROW_DOWN){S.preventDefault();let M=T.findIndex(_=>_.label===p?.label);if(L){if(!p||M===T.length-1){f(o);return}if(p===o){let _=T[0];_&&f(_);return}}let R=(M+1)%T.length,z=T[R];z&&f(z);return}if(S.key===k.ENTER&&p&&setTimeout(()=>{b(p,S)}),!C){if(S.stopPropagation(),/^[a-zA-Z0-9]$/.test(S.key)){s?.current?.focus();return}S.preventDefault()}});return(0,Sn.useEffect)(()=>(window.addEventListener("keydown",x,{capture:!0}),()=>window.removeEventListener("keydown",x,{capture:!0})),[x]),(0,Sn.useEffect)(()=>{if(!d)return;let S=M=>{let R={};for(let z of M)R[z.category]?R[z.category].push(z):R[z.category]=[z];return R},C=d.filter(w).sort((M,R)=>M.order-R.order),T=!m&&o&&w(o);if(!m){v(S(T?C.filter(M=>M.label!==o?.label):C)),f(T?o:C[0]||null);return}let L=Px(m.toLocaleLowerCase().replace(/[<>_| -]/g,""));C=GC.default.filter(L,C,{extract:M=>M.haystack}).sort((M,R)=>R.score-M.score).map(M=>M.original),v(S(C)),f(C[0]??null)},[m,d,w,o]),(0,Ie.jsxs)(Qn,{onCloseRequest:()=>E(),closeOnClickOutside:!0,title:!1,size:720,autofocus:!0,className:"command-palette-dialog",children:[(0,Ie.jsx)(hg,{value:m,placeholder:y("commandPalette.search.placeholder"),onChange:S=>{u(S)},selectOnRender:!0,ref:s}),!t.device.viewport.isMobile&&(0,Ie.jsxs)("div",{className:"shortcuts-wrapper",children:[(0,Ie.jsx)(Bd,{shortcut:"\u2191\u2193",children:y("commandPalette.shortcuts.select")}),(0,Ie.jsx)(Bd,{shortcut:"\u21B5",children:y("commandPalette.shortcuts.confirm")}),(0,Ie.jsx)(Bd,{shortcut:F("Esc"),children:y("commandPalette.shortcuts.close")})]}),(0,Ie.jsxs)("div",{className:"commands",children:[o&&!m&&(0,Ie.jsxs)("div",{className:"command-category",children:[(0,Ie.jsxs)("div",{className:"command-category-title",children:[y("commandPalette.recents"),(0,Ie.jsx)("div",{className:"icon",style:{marginLeft:"6px"},children:d0})]}),(0,Ie.jsx)(Ox,{command:o,isSelected:o.label===p?.label,onClick:S=>b(o,S),disabled:!w(o),onMouseMove:()=>f(o),showShortcut:!t.device.viewport.isMobile,appState:n})]}),Object.keys(g).length>0?Object.keys(g).map((S,C)=>(0,Ie.jsxs)("div",{className:"command-category",children:[(0,Ie.jsx)("div",{className:"command-category-title",children:S}),g[S].map(T=>(0,Ie.jsx)(Ox,{command:T,isSelected:T.label===p?.label,onClick:L=>b(T,L),onMouseMove:()=>f(T),showShortcut:!t.device.viewport.isMobile,appState:n},T.label))]},S)):d?(0,Ie.jsxs)("div",{className:"no-match",children:[(0,Ie.jsx)("div",{className:"icon",children:Ji})," ",y("commandPalette.search.noMatch")]}):null]})]})}var Ox=({command:e,isSelected:t,disabled:n,onMouseMove:i,onClick:r,showShortcut:a,appState:o})=>{let c=()=>{};return(0,Ie.jsxs)("div",{className:$("command-item",{"item-selected":t,"item-disabled":n}),ref:d=>{t&&!n&&d?.scrollIntoView?.({block:"nearest"})},onClick:n?c:r,onMouseMove:n?c:i,title:n?y("commandPalette.itemNotAvailable"):"",children:[(0,Ie.jsxs)("div",{className:"name",children:[e.icon&&(0,Ie.jsx)(su,{icon:typeof e.icon=="function"?e.icon(o):e.icon}),e.label]}),a&&e.shortcut&&(0,Ie.jsx)(Bd,{shortcut:e.shortcut})]})},ID=U({name:"toggleLinearEditor",category:He.elements,label:(e,t,n)=>n.scene.getSelectedElements({selectedElementIds:t.selectedElementIds})[0]?.type==="arrow"?"labels.lineEditor.editArrow":"labels.lineEditor.edit",keywords:["line"],trackEvent:{category:"element"},predicate:(e,t,n,i)=>{let r=i.scene.getSelectedElements(t);return!!(!t.editingLinearElement&&r.length===1&&De(r[0])&&!le(r[0]))},perform(e,t,n,i){let r=i.scene.getSelectedElements({selectedElementIds:t.selectedElementIds,includeBoundTextElement:!0})[0],a=t.editingLinearElement?.elementId===r.id?null:new ne(r);return{appState:{...t,editingLinearElement:a},captureUpdate:N.IMMEDIATELY}},PanelComponent:({appState:e,updateData:t,app:n})=>{let i=n.scene.getSelectedElements({selectedElementIds:e.selectedElementIds})[0],r=y(i.type==="arrow"?"labels.lineEditor.editArrow":"labels.lineEditor.edit");return(0,r3.jsx)(ce,{type:"button",icon:C0,title:r,"aria-label":r,onClick:()=>t(null)})}}),a3=U({name:"searchMenu",icon:Ji,keywords:["search","find"],label:"search.title",viewMode:!0,trackEvent:{category:"search_menu",action:"toggle",predicate:e=>e.gridModeEnabled},perform(e,t,n,i){if(t.openSidebar?.name===An.name&&t.openSidebar.tab===Br){let r=i.excalidrawContainerValue.container?.querySelector(`.${$r.SEARCH_MENU_INPUT_WRAPPER} input`);return r?.matches(":focus")?{appState:{...t,openSidebar:null},captureUpdate:N.EVENTUALLY}:(r?.focus(),r?.select(),!1)}return{appState:{...t,openSidebar:{name:An.name,tab:Br},openDialog:null},captureUpdate:N.EVENTUALLY}},checked:e=>e.gridModeEnabled,predicate:(e,t,n)=>n.gridModeEnabled===void 0,keyTest:e=>e[k.CTRL_OR_CMD]&&e.key===k.F}),TD=U({name:"cropEditor",label:"helpDialog.cropStart",icon:Wm,viewMode:!0,trackEvent:{category:"menu"},keywords:["image","crop"],perform(e,t,n,i){let r=i.scene.getSelectedElements({selectedElementIds:t.selectedElementIds,includeBoundTextElement:!0})[0];return{appState:{...t,isCropping:!1,croppingElementId:r.id},captureUpdate:N.IMMEDIATELY}},predicate:(e,t,n,i)=>{let r=i.scene.getSelectedElements(t);return!!(!t.croppingElementId&&r.length===1&&_e(r[0]))},PanelComponent:({appState:e,updateData:t,app:n})=>{let i=y("helpDialog.cropStart");return(0,s3.jsx)(ce,{type:"button",icon:Wm,title:i,"aria-label":i,onClick:()=>t(null)})}}),Vd=class{constructor(e=!0,t=!0){this.isUndoStackEmpty=e,this.isRedoStackEmpty=t}},Fx=class al{constructor(){D(this,"onHistoryChangedEmitter",new oi),D(this,"undoStack",[]),D(this,"redoStack",[])}get isUndoStackEmpty(){return this.undoStack.length===0}get isRedoStackEmpty(){return this.redoStack.length===0}clear(){this.undoStack.length=0,this.redoStack.length=0}record(t,n){let i=kD.create(n,t);i.isEmpty()||(this.undoStack.push(i.inverse()),i.elementsChange.isEmpty()||(this.redoStack.length=0),this.onHistoryChangedEmitter.trigger(new Vd(this.isUndoStackEmpty,this.isRedoStackEmpty)))}undo(t,n,i){return this.perform(t,n,i,()=>al.pop(this.undoStack),r=>al.push(this.redoStack,r,t))}redo(t,n,i){return this.perform(t,n,i,()=>al.pop(this.redoStack),r=>al.push(this.undoStack,r,t))}perform(t,n,i,r,a){try{let o=r();if(o===null)return;let c=t,d=n,h=!1;for(;o;){try{[c,d,h]=o.applyTo(c,d,i)}finally{a(o)}if(h)break;o=r()}return[c,d]}finally{this.onHistoryChangedEmitter.trigger(new Vd(this.isUndoStackEmpty,this.isRedoStackEmpty))}}static pop(t){if(!t.length)return null;let n=t.pop();return n!==void 0?n:null}static push(t,n,i){let r=n.inverse().applyLatestChanges(i);return t.push(r)}},kD=class zd{constructor(t,n){this.appStateChange=t,this.elementsChange=n}static create(t,n){return new zd(t,n)}inverse(){return new zd(this.appStateChange.inverse(),this.elementsChange.inverse())}applyTo(t,n,i){let[r,a]=this.elementsChange.applyTo(t,i.elements),[o,c]=this.appStateChange.applyTo(n,r);return[r,o,a||c]}applyLatestChanges(t){let n=this.elementsChange.applyLatestChanges(t);return zd.create(this.appStateChange,n)}isEmpty(){return this.appStateChange.isEmpty()&&this.elementsChange.isEmpty()}},o3=(e,t)=>{let[n,i]=(0,Iu.useState)(t);return(0,Iu.useEffect)(()=>{let r=e.on(a=>{i(a)});return()=>{r()}},[e]),n},l3=(e,t,n)=>{if(!t.multiElement&&!t.resizingElement&&!t.editingTextElement&&!t.newElement&&!t.selectedElementsAreBeingDragged&&!t.selectionElement&&!e.flowChartCreator.isCreatingChart){let i=n();if(!i)return{captureUpdate:N.EVENTUALLY};let[r,a]=i,o=Array.from(r.values());return{appState:a,elements:o,captureUpdate:N.NEVER}}return{captureUpdate:N.EVENTUALLY}},MD=(e,t)=>({name:"undo",label:"buttons.undo",icon:vm,trackEvent:{category:"history"},viewMode:!1,perform:(n,i,r,a)=>l3(a,i,()=>e.undo(Ee(n),i,t.snapshot)),keyTest:n=>n[k.CTRL_OR_CMD]&&bc(n,k.Z)&&!n.shiftKey,PanelComponent:({updateData:n,data:i})=>{let{isUndoStackEmpty:r}=o3(e.onHistoryChangedEmitter,new Vd(e.isUndoStackEmpty,e.isRedoStackEmpty));return(0,pg.jsx)(ce,{type:"button",icon:vm,"aria-label":y("buttons.undo"),onClick:n,size:i?.size||"medium",disabled:r,"data-testid":"button-undo"})}}),DD=(e,t)=>({name:"redo",label:"buttons.redo",icon:bm,trackEvent:{category:"history"},viewMode:!1,perform:(n,i,r,a)=>l3(a,i,()=>e.redo(Ee(n),i,t.snapshot)),keyTest:n=>n[k.CTRL_OR_CMD]&&n.shiftKey&&bc(n,k.Z)||$u&&n.ctrlKey&&!n.shiftKey&&bc(n,k.Y),PanelComponent:({updateData:n,data:i})=>{let{isRedoStackEmpty:r}=o3(e.onHistoryChangedEmitter,new Vd(e.isUndoStackEmpty,e.isRedoStackEmpty));return(0,pg.jsx)(ce,{type:"button",icon:bm,"aria-label":y("buttons.redo"),onClick:n,size:i?.size||"medium",disabled:r,"data-testid":"button-redo"})}}),cf=(e,t,n,i,r,a)=>{if(e.trackEvent)try{typeof e.trackEvent=="object"&&(!e.trackEvent.predicate||e.trackEvent.predicate(n,i,a))&&we(e.trackEvent.category,e.trackEvent.action||e.name,`${t} (${r.device.editor.isMobile?"mobile":"desktop"})`)}catch(o){console.error("error while logging action:",o)}},LD=class{constructor(e,t,n,i){D(this,"actions",{}),D(this,"updater"),D(this,"getAppState"),D(this,"getElementsIncludingDeleted"),D(this,"app"),D(this,"renderAction",(r,a)=>{let o=this.app.props.UIOptions.canvasActions;if(this.actions[r]&&"PanelComponent"in this.actions[r]&&(!(r in o)||o[r])){let c=this.actions[r],d=c.PanelComponent;d.displayName="PanelComponent";let h=this.getElementsIncludingDeleted(),s=this.getAppState(),l=m=>{cf(c,"ui",s,h,this.app,m),this.updater(c.perform(this.getElementsIncludingDeleted(),this.getAppState(),m,this.app))};return(0,c3.jsx)(d,{elements:this.getElementsIncludingDeleted(),appState:this.getAppState(),updateData:l,appProps:this.app.props,app:this.app,data:a})}return null}),D(this,"isActionEnabled",r=>{let a=this.getElementsIncludingDeleted(),o=this.getAppState();return!r.predicate||r.predicate(a,o,this.app.props,this.app)}),this.updater=r=>{if(Ql(r))r.then(a=>e(a));else return e(r)},this.getAppState=t,this.getElementsIncludingDeleted=n,this.app=i}registerAction(e){this.actions[e.name]=e}registerAll(e){e.forEach(t=>this.registerAction(t))}handleKeyDown(e){let t=this.app.props.UIOptions.canvasActions,n=Object.values(this.actions).sort((c,d)=>(d.keyPriority||0)-(c.keyPriority||0)).filter(c=>(c.name in t?t[c.name]:!0)&&c.keyTest&&c.keyTest(e,this.getAppState(),this.getElementsIncludingDeleted(),this.app));if(n.length!==1)return n.length>1&&console.warn("Canceling as multiple actions match this shortcut",n),!1;let i=n[0];if(this.getAppState().viewModeEnabled&&i.viewMode!==!0)return!1;let r=this.getElementsIncludingDeleted(),a=this.getAppState();return cf(i,"keyboard",a,r,this.app,null),e.preventDefault(),e.stopPropagation(),this.updater(n[0].perform(r,a,null,this.app)),!0}executeAction(e,t="api",n=null){let i=this.getElementsIncludingDeleted(),r=this.getAppState();cf(e,t,r,i,this.app,n),this.updater(e.perform(i,r,n,this.app))}},$x=e=>{let t=Array.from(e.values());return{x:zx(t,n=>n.x)/t.length,y:zx(t,n=>n.y)/t.length}},Bx=([e,t])=>Math.hypot(e.x-t.x,e.y-t.y),zx=(e,t)=>e.reduce((n,i)=>n+t(i),0),RD=({children:e,left:t,top:n,onCloseRequest:i,fitInViewport:r=!1,offsetLeft:a=0,offsetTop:o=0,viewportWidth:c=window.innerWidth,viewportHeight:d=window.innerHeight})=>{let h=(0,Lr.useRef)(null);(0,Lr.useEffect)(()=>{let l=h.current;if(!l)return;l.contains(document.activeElement)||l.focus();let m=u=>{if(u.key===k.TAB){let p=Jl(l),{activeElement:f}=document,g=p.findIndex(v=>v===f);f===l?(u.shiftKey?p[p.length-1]?.focus():p[0].focus(),u.preventDefault(),u.stopImmediatePropagation()):g===0&&u.shiftKey?(p[p.length-1]?.focus(),u.preventDefault(),u.stopImmediatePropagation()):g===p.length-1&&!u.shiftKey&&(p[0]?.focus(),u.preventDefault(),u.stopImmediatePropagation())}};return l.addEventListener("keydown",m),()=>l.removeEventListener("keydown",m)},[]);let s=(0,Lr.useRef)(null);return(0,Lr.useLayoutEffect)(()=>{if(r&&h.current&&n!=null&&t!=null){let l=h.current,{width:m,height:u}=l.getBoundingClientRect();if(s.current?.top===n&&s.current?.left===t)return;s.current={top:n,left:t},m>=c?(l.style.width=`${c}px`,l.style.left="0px",l.style.overflowX="scroll"):t+m-a>c?l.style.left=`${c-m-10}px`:l.style.left=`${t}px`,u>=d?(l.style.height=`${d-20}px`,l.style.top="10px",l.style.overflowY="scroll"):n+u-o>d?l.style.top=`${d-u}px`:l.style.top=`${n}px`}},[n,t,r,c,d,a,o]),(0,Lr.useEffect)(()=>{if(i){let l=m=>{h.current?.contains(m.target)||(0,d3.unstable_batchedUpdates)(()=>i(m))};return document.addEventListener("pointerdown",l,!1),()=>document.removeEventListener("pointerdown",l,!1)}},[i]),(0,u3.jsx)("div",{className:"popover",ref:h,tabIndex:-1,children:e})},at="separator",AD=m3.default.memo(({actionManager:e,items:t,top:n,left:i,onClose:r})=>{let a=Pl(),o=Ru(),c=t.reduce((d,h)=>(h&&(h===at||!h.predicate||h.predicate(o,a,e.app.props,e.app))&&d.push(h),d),[]);return(0,Oi.jsx)(RD,{onCloseRequest:()=>{r()},top:n,left:i,fitInViewport:!0,offsetLeft:a.offsetLeft,offsetTop:a.offsetTop,viewportWidth:a.width,viewportHeight:a.height,children:(0,Oi.jsx)("ul",{className:"context-menu",onContextMenu:d=>d.preventDefault(),children:c.map((d,h)=>{if(d===at)return!c[h-1]||c[h-1]===at?null:(0,Oi.jsx)("hr",{className:"context-menu-item-separator"},h);let s=d.name,l="";return d.label&&(typeof d.label=="function"?l=y(d.label(o,a,e.app)):l=y(d.label)),(0,Oi.jsx)("li",{"data-testid":s,onClick:()=>{r(()=>{e.executeAction(d,"contextMenu")})},children:(0,Oi.jsxs)("button",{type:"button",className:$("context-menu-item",{dangerous:s==="deleteSelectedElements",checkmark:d.checked?.(a)}),children:[(0,Oi.jsx)("div",{className:"context-menu-item__label",children:l}),(0,Oi.jsx)("kbd",{className:"context-menu-item__shortcut",children:s?At(s):""})]})},h)})})})}),ND=({children:e,onClose:t})=>{let[n,i]=(0,Tu.useState)(!!e),{container:r}=Si(),a=Tu.default.useCallback(()=>{i(!1),t&&t(),r?.focus()},[t,r]);return(0,ks.jsx)(ks.Fragment,{children:n&&(0,ks.jsx)(Qn,{size:"small",onCloseRequest:a,title:y("errorDialog.title"),children:(0,ks.jsx)("div",{style:{whiteSpace:"pre-wrap"},children:e})})})},p3=function({onChange:e,value:t,choices:n,name:i}){return(0,yl.jsx)("div",{className:"RadioGroup",children:n.map(r=>(0,yl.jsxs)("div",{className:$("RadioGroup__choice",{active:r.value===t}),title:r.ariaLabel,children:[(0,yl.jsx)("input",{name:i,type:"radio",checked:r.value===t,onChange:()=>e(r.value),"aria-label":r.ariaLabel}),r.label]},String(r.value)))})},Dd=({title:e,name:t,checked:n,onChange:i,disabled:r=!1})=>(0,Of.jsx)("div",{className:$("Switch",{toggled:n,disabled:r}),children:(0,Of.jsx)("input",{name:t,id:t,title:e,type:"checkbox",checked:n,disabled:r,onChange:()=>i(!n),onKeyDown:a=>{a.key===" "&&i(!n)}})}),cl=(0,ku.forwardRef)(({children:e,icon:t,onClick:n,label:i,variant:r="filled",color:a="primary",size:o="medium",fullWidth:c,className:d,status:h},s)=>{let[l,m]=(0,ku.useState)(!1),u=async f=>{let g=n?.(f);if(Ql(g)){let v=window.setTimeout(()=>{m(!0)},50);try{await g}catch(E){if(E instanceof vc)console.warn(E);else throw E}finally{clearTimeout(v),m(!1)}}},p=l?"loading":h;return a=p==="success"?"success":a,(0,ha.jsx)("button",{className:$("ExcButton",`ExcButton--color-${a}`,`ExcButton--variant-${r}`,`ExcButton--size-${o}`,`ExcButton--status-${p}`,{"ExcButton--fullWidth":c},d),onClick:u,type:"button","aria-label":i,ref:s,disabled:p==="loading"||p==="success",children:(0,ha.jsxs)("div",{className:"ExcButton__contents",children:[p==="loading"?(0,ha.jsx)(Ui,{className:"ExcButton__statusIcon"}):p==="success"&&(0,ha.jsx)("div",{className:"ExcButton__statusIcon",children:n0}),t&&(0,ha.jsx)("div",{className:"ExcButton__icon","aria-hidden":!0,children:t}),r!=="icon"&&(e??i)]})})}),PD=2e3,_D=()=>{let[e,t]=(0,$s.useState)(null),n=(0,$s.useRef)(0),i=()=>{clearTimeout(n.current),t("success"),n.current=window.setTimeout(()=>{t(null)},PD)},r=(0,$s.useCallback)(()=>{t(null)},[]);return{copyStatus:e,resetCopyStatus:r,onCopy:i}},OD="filter"in document.createElement("canvas").getContext("2d"),FD=()=>(0,de.jsxs)("div",{children:[(0,de.jsx)("h3",{children:y("canvasError.cannotShowPreview")}),(0,de.jsx)("p",{children:(0,de.jsx)("span",{children:y("canvasError.canvasTooBig")})}),(0,de.jsxs)("em",{children:["(",y("canvasError.canvasTooBigTip"),")"]})]}),$D=({appStateSnapshot:e,elementsSnapshot:t,files:n,actionManager:i,onExportImage:r,name:a})=>{let o=Ye(t,e),[c,d]=(0,qt.useState)(a),[h,s]=(0,qt.useState)(o),[l,m]=(0,qt.useState)(e.exportBackground),[u,p]=(0,qt.useState)(e.exportWithDarkMode),[f,g]=(0,qt.useState)(e.exportEmbedScene),[v,E]=(0,qt.useState)(e.exportScale),b=(0,qt.useRef)(null),[w,x]=(0,qt.useState)(null),{onCopy:S,copyStatus:C,resetCopyStatus:T}=_D();(0,qt.useEffect)(()=>{T()},[c,l,u,v,f,T]);let{exportedElements:L,exportingFrame:M}=mu(t,e,h);return(0,qt.useEffect)(()=>{let R=b.current;if(!R)return;let z=R.offsetWidth,_=R.offsetHeight;z&&Pc({elements:L,appState:{...e,name:c,exportBackground:l,exportWithDarkMode:u,exportScale:v,exportEmbedScene:f},files:n,exportPadding:Ks,maxWidthOrHeight:Math.max(z,_),exportingFrame:M}).then(H=>(x(null),Za(H).then(()=>{R.replaceChildren(H)}).catch(P=>{throw P.name==="CANVAS_POSSIBLY_TOO_BIG"?new Error(y("canvasError.canvasTooBig")):P}))).catch(H=>{console.error(H),x(H)})},[e,n,L,M,c,l,u,v,f]),(0,de.jsxs)("div",{className:"ImageExportModal",children:[(0,de.jsx)("h3",{children:y("imageExportDialog.header")}),(0,de.jsxs)("div",{className:"ImageExportModal__preview",children:[(0,de.jsx)("div",{className:"ImageExportModal__preview__canvas",ref:b,children:w&&(0,de.jsx)(FD,{})}),(0,de.jsx)("div",{className:"ImageExportModal__preview__filename",children:!$l&&(0,de.jsx)("input",{type:"text",className:"TextInput",value:c,style:{width:"30ch"},onChange:R=>{d(R.target.value),i.executeAction(RM,"ui",R.target.value)}})})]}),(0,de.jsxs)("div",{className:"ImageExportModal__settings",children:[(0,de.jsx)("h3",{children:y("imageExportDialog.header")}),o&&(0,de.jsx)(Qo,{label:y("imageExportDialog.label.onlySelected"),name:"exportOnlySelected",children:(0,de.jsx)(Dd,{name:"exportOnlySelected",checked:h,onChange:R=>{s(R)}})}),(0,de.jsx)(Qo,{label:y("imageExportDialog.label.withBackground"),name:"exportBackgroundSwitch",children:(0,de.jsx)(Dd,{name:"exportBackgroundSwitch",checked:l,onChange:R=>{m(R),i.executeAction(NM,"ui",R)}})}),OD&&(0,de.jsx)(Qo,{label:y("imageExportDialog.label.darkMode"),name:"exportDarkModeSwitch",children:(0,de.jsx)(Dd,{name:"exportDarkModeSwitch",checked:u,onChange:R=>{p(R),i.executeAction(PM,"ui",R)}})}),(0,de.jsx)(Qo,{label:y("imageExportDialog.label.embedScene"),tooltip:y("imageExportDialog.tooltip.embedScene"),name:"exportEmbedSwitch",children:(0,de.jsx)(Dd,{name:"exportEmbedSwitch",checked:f,onChange:R=>{g(R),i.executeAction(gC,"ui",R)}})}),(0,de.jsx)(Qo,{label:y("imageExportDialog.label.scale"),name:"exportScale",children:(0,de.jsx)(p3,{name:"exportScale",value:v,onChange:R=>{E(R),i.executeAction(AM,"ui",R)},choices:Yu.map(R=>({value:R,label:`${R}\xD7`}))})}),(0,de.jsxs)("div",{className:"ImageExportModal__settings__buttons",children:[(0,de.jsx)(cl,{className:"ImageExportModal__settings__buttons__button",label:y("imageExportDialog.title.exportToPng"),onClick:()=>r(Vl.png,L,{exportingFrame:M}),icon:Om,children:y("imageExportDialog.button.exportToPng")}),(0,de.jsx)(cl,{className:"ImageExportModal__settings__buttons__button",label:y("imageExportDialog.title.exportToSvg"),onClick:()=>r(Vl.svg,L,{exportingFrame:M}),icon:Om,children:y("imageExportDialog.button.exportToSvg")}),(Nc||Na)&&(0,de.jsx)(cl,{className:"ImageExportModal__settings__buttons__button",label:y("imageExportDialog.title.copyPngToClipboard"),status:C,onClick:async()=>{await r(Vl.clipboard,L,{exportingFrame:M}),S()},icon:pc,children:y("imageExportDialog.button.copyPngToClipboard")})]})]})]})},Qo=({label:e,children:t,tooltip:n,name:i})=>(0,de.jsxs)("div",{className:"ImageExportModal__settings__setting",title:e,children:[(0,de.jsxs)("label",{htmlFor:i,className:"ImageExportModal__settings__setting__label",children:[e,n&&(0,de.jsx)(Ia,{label:n,long:!0,children:t0})]}),(0,de.jsx)("div",{className:"ImageExportModal__settings__setting__content",children:t})]}),BD=({elements:e,appState:t,files:n,actionManager:i,onExportImage:r,onCloseRequest:a,name:o})=>{let[{appStateSnapshot:c,elementsSnapshot:d}]=(0,qt.useState)(()=>({appStateSnapshot:ii(t),elementsSnapshot:ii(e)}));return(0,de.jsx)(Qn,{onCloseRequest:a,size:"wide",title:!1,children:(0,de.jsx)($D,{elementsSnapshot:d,appStateSnapshot:c,files:n,actionManager:i,onExportImage:r,name:o})})},g3=({children:e,side:t,className:n})=>(0,f3.jsx)("div",{className:$("FixedSideContainer",`FixedSideContainer_side_${t}`,n),children:e}),Ms=100,Ds=100,jx=e=>{switch(e){case k.ARROW_UP:return"up";case k.ARROW_DOWN:return"down";case k.ARROW_RIGHT:return"right";case k.ARROW_LEFT:return"left";default:return"right"}},v3=(e,t,n,i)=>{let r=[...n.values()].reduce((a,o)=>{let c;if(le(o)&&(c=o[e==="predecessors"?"startBinding":"endBinding"])&&o[e==="predecessors"?"endBinding":"startBinding"]?.elementId===t.id){let d=n.get(c.elementId);if(!d)return a;Xi(ic(d),"not an ExcalidrawBindableElement");let h=e==="predecessors"?o.points[o.points.length-1]:[0,0],s=K0(t,$0(t),[h[0]+o.x,h[1]+o.y]);a.push({relative:d,heading:s})}return a},[]);switch(i){case"up":return r.filter(a=>po(a.heading,G0)).map(a=>a.relative);case"down":return r.filter(a=>po(a.heading,V0)).map(a=>a.relative);case"right":return r.filter(a=>po(a.heading,W0)).map(a=>a.relative);case"left":return r.filter(a=>po(a.heading,Y0)).map(a=>a.relative)}},Ff=(e,t,n)=>v3("successors",e,t,n),$f=(e,t,n)=>v3("predecessors",e,t,n),zD=(e,t,n)=>{let i=Ds+e.width;if(n==="up"||n==="down"){let c=Ms+e.height,d=e.x,h=e.x+e.width;if(t.every(s=>s.x+s.width<d||s.x>h))return{x:0,y:c*(n==="up"?-1:1)}}else if(n==="right"||n==="left"){let c=e.y,d=e.y+e.height;if(t.every(h=>h.y+h.height<c||h.y>d))return{x:(Ds+e.width)*(n==="left"?-1:1),y:0}}if(n==="up"||n==="down"){let c=Ms+e.height,d=(t.length,c),h=t.length===0?0:(t.length+1)%2===0?(t.length+1)/2*i:t.length/2*i*-1;return n==="up"?{x:h,y:d*-1}:{x:h,y:d}}let r=Ms+e.height,a=(t.length,Ds+e.width),o=t.length===0?0:(t.length+1)%2===0?(t.length+1)/2*r:t.length/2*r*-1;return n==="left"?{x:a*-1,y:o}:{x:a,y:o}},jD=(e,t,n,i)=>{let r=Ff(e,t,i),a=$f(e,t,i),o=zD(e,[...r,...a],i),c=rr({type:e.type,x:e.x+o.x,y:e.y+o.y,width:e.width,height:e.height,roundness:e.roundness,roughness:e.roughness,backgroundColor:e.backgroundColor,strokeColor:e.strokeColor,strokeWidth:e.strokeWidth,opacity:e.opacity,fillStyle:e.fillStyle,strokeStyle:e.strokeStyle});Xi(ao(c),"not an ExcalidrawFlowchartNodeElement");let d=b3(e,c,t,i,n);return{nextNode:c,bindingArrow:d}},UD=(e,t,n,i,r)=>{let a=[];for(let o=0;o<r;o++){let c,d;if(i==="left"||i==="right"){let l=Ms*(r-1)+r*e.height,m=e.y+e.height/2-l/2,u=Ds+e.width;i==="left"&&(u*=-1),c=e.x+u;let p=(Ms+e.height)*o;d=m+p}else{let l=Ds*(r-1)+r*e.width,m=e.x+e.width/2-l/2,u=Ms+e.height;i==="up"&&(u*=-1),d=e.y+u;let p=(Ds+e.width)*o;c=m+p}let h=rr({type:e.type,x:c,y:d,width:e.width,height:e.height,roundness:e.roundness,roughness:e.roughness,backgroundColor:e.backgroundColor,strokeColor:e.strokeColor,strokeWidth:e.strokeWidth,opacity:e.opacity,fillStyle:e.fillStyle,strokeStyle:e.strokeStyle});Xi(ao(h),"not an ExcalidrawFlowchartNodeElement");let s=b3(e,h,t,i,n);a.push(h),a.push(s)}return a},b3=(e,t,n,i,r)=>{let a,o;switch(i){case"up":{a=e.x+e.width/2,o=e.y-6;break}case"down":{a=e.x+e.width/2,o=e.y+e.height+6;break}case"right":{a=e.x+e.width+6,o=e.y+e.height/2;break}case"left":{a=e.x-6,o=e.y+e.height/2;break}}let c,d;switch(i){case"up":{c=t.x+t.width/2-a,d=t.y+t.height-o+6;break}case"down":{c=t.x+t.width/2-a,d=t.y-o-6;break}case"right":{c=t.x-a-6,d=t.y-o+t.height/2;break}case"left":{c=t.x+t.width-a+6,d=t.y-o+t.height/2;break}}let h=Lc({type:"arrow",x:a,y:o,startArrowhead:null,endArrowhead:r.currentItemEndArrowhead,strokeColor:e.strokeColor,strokeStyle:e.strokeStyle,strokeWidth:e.strokeWidth,opacity:e.opacity,roughness:e.roughness,points:[G(0,0),G(c,d)],elbowed:!0});Zr(h,e,"start",n),Zr(h,t,"end",n);let s=new Map;s.set(e.id,e),s.set(t.id,t),s.set(h.id,h),ne.movePoints(h,[{index:1,point:h.points[1]}]);let l=Qb(h,tc(new Map([...n.entries(),[e.id,e],[t.id,t],[h.id,h]])),{points:h.points});return{...h,...l}},HD=class{constructor(){D(this,"isExploring",!1),D(this,"sameLevelNodes",[]),D(this,"sameLevelIndex",0),D(this,"direction",null),D(this,"visitedNodes",new Set)}clear(){this.isExploring=!1,this.sameLevelNodes=[],this.sameLevelIndex=0,this.direction=null,this.visitedNodes.clear()}exploreByDirection(e,t,n){if(!ic(e))return null;if(n!==this.direction&&this.clear(),this.visitedNodes.has(e.id)||this.visitedNodes.add(e.id),this.isExploring&&n===this.direction&&this.sameLevelNodes.length>1)return this.sameLevelIndex=(this.sameLevelIndex+1)%this.sameLevelNodes.length,this.sameLevelNodes[this.sameLevelIndex].id;let i=[...Ff(e,t,n),...$f(e,t,n)];if(i.length>0)return this.sameLevelIndex=0,this.isExploring=!0,this.sameLevelNodes=i,this.direction=n,this.visitedNodes.add(i[0].id),i[0].id;if(n===this.direction||!this.isExploring){this.isExploring||this.visitedNodes.add(e.id);let r=["up","right","down","left"].filter(a=>a!==n).map(a=>[...Ff(e,t,a),...$f(e,t,a)]).flat().filter(a=>!this.visitedNodes.has(a.id));for(let a of r)if(!this.visitedNodes.has(a.id))return this.visitedNodes.add(a.id),this.isExploring=!0,this.direction=n,a.id}return null}},WD=class{constructor(){D(this,"isCreatingChart",!1),D(this,"numberOfNodes",0),D(this,"direction","right"),D(this,"pendingNodes",null)}createNodes(e,t,n,i){if(i!==this.direction){let{nextNode:r,bindingArrow:a}=jD(e,t,n,i);this.numberOfNodes=1,this.isCreatingChart=!0,this.direction=i,this.pendingNodes=[r,a]}else{this.numberOfNodes+=1;let r=UD(e,t,n,i,this.numberOfNodes);this.isCreatingChart=!0,this.direction=i,this.pendingNodes=r}if(e.frameId){let r=t.get(e.frameId);Xi(r&&O1(r),"not an ExcalidrawFrameElement"),r&&this.pendingNodes.every(a=>sy([a],r,t)||Ah(a,r,t))&&(this.pendingNodes=this.pendingNodes.map(a=>W(a,{frameId:e.frameId},!1)))}}clear(){this.isCreatingChart=!1,this.pendingNodes=null,this.direction=null,this.numberOfNodes=0}},VD=(e,t)=>{for(let[,n]of t)if(n.type==="arrow"&&(n.startBinding?.elementId===e.id||n.endBinding?.elementId===e.id))return!0;return!1},YD=({appState:e,isMobile:t,device:n,app:i})=>{let{activeTool:r,isResizing:a,isRotating:o,lastPointerDownWith:c}=e,d=e.multiElement!==null;if(e.openSidebar?.name===An.name&&e.openSidebar.tab===Br&&e.searchMatches?.length)return y("hints.dismissSearch");if(e.openSidebar&&!n.editor.canFitSidebar)return null;if(ti(e))return y("hints.eraserRevert");if(r.type==="arrow"||r.type==="line")return d?y("hints.linearElementMulti"):r.type==="arrow"?y("hints.arrowTool",{arrowShortcut:F("A")}):y("hints.linearElement");if(r.type==="freedraw")return y("hints.freeDraw");if(r.type==="text")return y("hints.text");if(r.type==="embeddable")return y("hints.embeddable");if(e.activeTool.type==="image"&&e.pendingImageElementId)return y("hints.placeImage");let h=i.scene.getSelectedElements(e);if(a&&c==="mouse"&&h.length===1){let s=h[0];return De(s)&&s.points.length===2?y("hints.lockAngle"):_e(s)?y("hints.resizeImage"):y("hints.resize")}if(o&&c==="mouse")return y("hints.rotate");if(h.length===1&&te(h[0]))return y("hints.text_selected");if(e.editingTextElement)return y("hints.text_editing");if(e.croppingElementId)return y("hints.leaveCropEditor");if(h.length===1&&_e(h[0]))return y("hints.enterCropEditor");if(r.type==="selection"){if(e.selectionElement&&!h.length&&!e.editingTextElement&&!e.editingLinearElement)return y("hints.deepBoxSelect");if(bo(i)&&e.selectedElementsAreBeingDragged)return y("hints.disableSnapping");if(!h.length&&!t)return y("hints.canvasPanning");if(h.length===1){if(De(h[0]))return e.editingLinearElement?e.editingLinearElement.selectedPointsIndices?y("hints.lineEditor_pointSelected"):y("hints.lineEditor_nothingSelected"):y("hints.lineEditor_info");if(!e.newElement&&!e.selectedElementsAreBeingDragged&&Wr(h[0]))return ao(h[0])?VD(h[0],i.scene.getNonDeletedElementsMap())?[y("hints.bindTextToElement"),y("hints.createFlowchart")]:[y("hints.bindTextToElement"),y("hints.createFlowchart")]:y("hints.bindTextToElement")}}return null},y3=({appState:e,isMobile:t,device:n,app:i})=>{let r=YD({appState:e,isMobile:t,device:n,app:i});if(!r)return null;let a=Array.isArray(r)?r.map(o=>F(o).replace(/\. ?$/,"")).join(". "):F(r);return(0,Bf.jsx)("div",{className:"HintViewer",children:(0,Bf.jsx)("span",{children:a})})},GD="medium",Ux={CHECKED:sc,UNCHECKED:oo},E3=e=>(0,El.jsxs)("label",{className:$("ToolIcon ToolIcon__lock",`ToolIcon_size_${GD}`,{"is-mobile":e.isMobile}),title:`${e.title} \u2014 Q`,children:[(0,El.jsx)("input",{className:"ToolIcon_type_checkbox",type:"checkbox",name:e.name,onChange:e.onChange,checked:e.checked,"aria-label":e.title,"data-testid":"toolbar-lock"}),(0,El.jsx)("div",{className:"ToolIcon__icon",children:e.checked?Ux.CHECKED:Ux.UNCHECKED})]}),wl=({heading:e,children:t,...n})=>{let{id:i}=Si(),r=(0,ka.jsx)("h2",{className:"visually-hidden",id:`${i}-${e}-title`,children:y(`headings.${e}`)});return(0,ka.jsx)("section",{...n,"aria-labelledby":`${i}-${e}-title`,children:typeof t=="function"?t(r):(0,ka.jsxs)(ka.Fragment,{children:[r,t]})})},pi=4,Sr=6,KD="rgba(0,0,0,0.3)",ZD=(e,t,n,i)=>{if(!e.length)return{horizontal:null,vertical:null};let[r,a,o,c]=Ve(e),d=t/i.zoom.value,h=n/i.zoom.value,s=t-d,l=n-h,m={top:parseInt(to("sat"))||0,bottom:parseInt(to("sab"))||0,left:parseInt(to("sal"))||0,right:parseInt(to("sar"))||0},u=dl().rtl,p=-i.scrollX+s/2+m.left,f=-i.scrollY+l/2+m.top,g=p+d-m.right,v=f+h-m.bottom,E=Math.min(r,p),b=Math.min(a,f),w=Math.max(o,g),x=Math.max(c,v);return{horizontal:p===E&&g===w?null:{x:Math.max(m.left,pi)+(p-E)/(w-E)*t,y:n-Sr-Math.max(pi,m.bottom),width:(g-p)/(w-E)*t-Math.max(pi*2,m.left+m.right),height:Sr},vertical:f===b&&v===x?null:{x:u?Math.max(m.left,pi):t-Sr-Math.max(m.right,pi),y:(f-b)/(x-b)*n+Math.max(m.top,pi),width:Sr,height:(v-f)/(x-b)*n-Math.max(pi*2,m.top+m.bottom)}}},Hx=(e,t,n)=>{let[i,r]=[e.horizontal,e.vertical].map(a=>a!=null&&a.x<=t&&t<=a.x+a.width&&a.y<=n&&n<=a.y+a.height);return{isOverEither:i||r,isOverHorizontal:i,isOverVertical:r}},XD="medium",w3=e=>e.penDetected?(0,xl.jsxs)("label",{className:$("ToolIcon ToolIcon__penMode",`ToolIcon_size_${XD}`,{"is-mobile":e.isMobile}),title:`${e.title}`,children:[(0,xl.jsx)("input",{className:"ToolIcon_type_checkbox",type:"checkbox",name:e.name,onChange:e.onChange,checked:e.checked,"aria-label":e.title}),(0,xl.jsx)("div",{className:"ToolIcon__icon",children:ev})]}):null,S3=e=>(0,x3.jsx)(ce,{className:$("Shape",{fillable:!1}),type:"radio",icon:_m,name:"editor-current-shape",checked:e.checked,title:`${e.title} \u2014 H`,keyBindingLabel:e.isMobile?void 0:k.H.toLocaleUpperCase(),"aria-label":`${e.title} \u2014 H`,"aria-keyshortcuts":k.H,"data-testid":"toolbar-hand",onChange:()=>e.onChange?.()}),qD=({appState:e,elements:t,actionManager:n,setAppState:i,onLockToggle:r,onHandToolToggle:a,onPenModeToggle:o,renderTopRightUI:c,renderCustomStats:d,renderSidebars:h,device:s,renderWelcomeScreen:l,UIOptions:m,app:u})=>{let{WelcomeScreenCenterTunnel:p,MainMenuTunnel:f,DefaultSidebarTriggerTunnel:g}=Vt(),v=()=>(0,be.jsxs)(g3,{side:"top",className:"App-top-bar",children:[l&&(0,be.jsx)(p.Out,{}),(0,be.jsx)(wl,{heading:"shapes",children:b=>(0,be.jsx)(Cn.Col,{gap:4,align:"center",children:(0,be.jsxs)(Cn.Row,{gap:1,className:"App-toolbar-container",children:[(0,be.jsxs)(Kn,{padding:1,className:"App-toolbar App-toolbar--mobile",children:[b,(0,be.jsx)(Cn.Row,{gap:1,children:(0,be.jsx)(JC,{appState:e,activeTool:e.activeTool,UIOptions:m,app:u})})]}),c&&c(!0,e),(0,be.jsxs)("div",{className:"mobile-misc-tools-container",children:[!e.viewModeEnabled&&e.openDialog?.name!=="elementLinkSelector"&&(0,be.jsx)(g.Out,{}),(0,be.jsx)(w3,{checked:e.penMode,onChange:()=>o(null),title:y("toolBar.penMode"),isMobile:!0,penDetected:e.penDetected}),(0,be.jsx)(E3,{checked:e.activeTool.locked,onChange:r,title:y("toolBar.lock"),isMobile:!0}),(0,be.jsx)(S3,{checked:_a(e),onChange:()=>a(),title:y("toolBar.hand"),isMobile:!0})]})]})})}),(0,be.jsx)(y3,{appState:e,isMobile:!0,device:s,app:u})]}),E=()=>e.viewModeEnabled||e.openDialog?.name==="elementLinkSelector"?(0,be.jsx)("div",{className:"App-toolbar-content",children:(0,be.jsx)(f.Out,{})}):(0,be.jsxs)("div",{className:"App-toolbar-content",children:[(0,be.jsx)(f.Out,{}),n.renderAction("toggleEditMenu"),n.renderAction(e.multiElement?"finalize":"duplicateSelection"),n.renderAction("deleteSelectedElements"),(0,be.jsxs)("div",{children:[n.renderAction("undo"),n.renderAction("redo")]})]});return(0,be.jsxs)(be.Fragment,{children:[h(),!e.viewModeEnabled&&e.openDialog?.name!=="elementLinkSelector"&&v(),(0,be.jsx)("div",{className:"App-bottom-bar",style:{marginBottom:Sr+pi*2,marginLeft:Sr+pi*2,marginRight:Sr+pi*2},children:(0,be.jsxs)(Kn,{padding:0,children:[e.openMenu==="shape"&&!e.viewModeEnabled&&e.openDialog?.name!=="elementLinkSelector"&&$c(e,t)?(0,be.jsx)(wl,{className:"App-mobile-menu",heading:"selectedShapeActions",children:(0,be.jsx)(QC,{appState:e,elementsMap:u.scene.getNonDeletedElementsMap(),renderAction:n.renderAction,app:u})}):null,(0,be.jsxs)("footer",{className:"App-toolbar",children:[E(),e.scrolledOutside&&!e.openMenu&&!e.openSidebar&&(0,be.jsx)("button",{type:"button",className:"scroll-back-to-content",onClick:()=>{i(b=>({...go(t,b)}))},children:y("buttons.scrollBackToContent")})]})]})})]})},Wx=e=>{let t=(0,Nr.useRef)(null),[n,i]=(0,Nr.useState)(null);return(0,Nr.useLayoutEffect)(()=>{if(!e.spreadsheet)return;let r=ty(e.chartType,e.spreadsheet,0,0);i(r);let a,o=t.current;return(async()=>(a=await Th(r,{exportBackground:!1,viewBackgroundColor:Et.white},null,{skipInliningFonts:!0}),a.querySelector(".style-fonts")?.remove(),o.replaceChildren(),o.appendChild(a),e.selected&&o.parentNode.focus()))(),()=>{o.replaceChildren()}},[e.spreadsheet,e.chartType,e.selected]),(0,Tr.jsx)("button",{type:"button",className:"ChartPreview",onClick:()=>{n&&e.onClick(e.chartType,n)},children:(0,Tr.jsx)("div",{ref:t})})},QD=({setAppState:e,appState:t,onClose:n})=>{let{onInsertElements:i}=xi(),r=Nr.default.useCallback(()=>{n&&n()},[n]),a=(o,c)=>{i(c),we("paste","chart",o),e({currentChartType:o,pasteDialog:{shown:!1,data:null}})};return(0,Tr.jsx)(Qn,{size:"small",onCloseRequest:r,title:y("labels.pasteCharts"),className:"PasteChartDialog",autofocus:!1,children:(0,Tr.jsxs)("div",{className:"container",children:[(0,Tr.jsx)(Wx,{chartType:"bar",spreadsheet:t.pasteDialog.data,selected:t.currentChartType==="bar",onClick:a}),(0,Tr.jsx)(Wx,{chartType:"line",spreadsheet:t.pasteDialog.data,selected:t.currentChartType==="line",onClick:a})]})})},JD=()=>(0,j.jsxs)("div",{className:"HelpDialog__header",children:[(0,j.jsxs)("a",{className:"HelpDialog__btn",href:"https://docs.excalidraw.com",target:"_blank",rel:"noopener noreferrer",children:[(0,j.jsx)("div",{className:"HelpDialog__link-icon",children:pm}),y("helpDialog.documentation")]}),(0,j.jsxs)("a",{className:"HelpDialog__btn",href:"https://plus.excalidraw.com/blog",target:"_blank",rel:"noopener noreferrer",children:[(0,j.jsx)("div",{className:"HelpDialog__link-icon",children:pm}),y("helpDialog.blog")]}),(0,j.jsxs)("a",{className:"HelpDialog__btn",href:"https://github.com/excalidraw/excalidraw/issues",target:"_blank",rel:"noopener noreferrer",children:[(0,j.jsx)("div",{className:"HelpDialog__link-icon",children:fm}),y("helpDialog.github")]}),(0,j.jsxs)("a",{className:"HelpDialog__btn",href:"https://youtube.com/@excalidraw",target:"_blank",rel:"noopener noreferrer",children:[(0,j.jsx)("div",{className:"HelpDialog__link-icon",children:x0}),"YouTube"]})]}),eL=e=>(0,j.jsxs)(j.Fragment,{children:[(0,j.jsx)("h3",{children:e.title}),(0,j.jsx)("div",{className:"HelpDialog__islands-container",children:e.children})]}),df=e=>(0,j.jsxs)("div",{className:`HelpDialog__island ${e.className}`,children:[(0,j.jsx)("h4",{className:"HelpDialog__island-title",children:e.caption}),(0,j.jsx)("div",{className:"HelpDialog__island-content",children:e.children})]});function*tL(e,t){let n=!0;for(let i of e)n||(yield t),n=!1,yield i}var nL=e=>e.replace(/\b[a-z]\b/,t=>t.toUpperCase()),K=({label:e,shortcuts:t,isOr:n=!0})=>{let i=t.map(r=>(r.endsWith("++")?[...r.slice(0,-2).split("+"),"+"]:r.split("+")).map(a=>(0,j.jsx)(iL,{children:nL(a)},a)));return(0,j.jsxs)("div",{className:"HelpDialog__shortcut",children:[(0,j.jsx)("div",{children:e}),(0,j.jsx)("div",{className:"HelpDialog__key-container",children:[...tL(i,n?y("helpDialog.or"):null)]})]})},iL=e=>(0,j.jsx)("kbd",{className:"HelpDialog__key",...e}),rL=({onClose:e})=>{let t=C3.default.useCallback(()=>{e&&e()},[e]);return(0,j.jsx)(j.Fragment,{children:(0,j.jsxs)(Qn,{onCloseRequest:t,title:y("helpDialog.title"),className:"HelpDialog",children:[(0,j.jsx)(JD,{}),(0,j.jsxs)(eL,{title:y("helpDialog.shortcuts"),children:[(0,j.jsxs)(df,{className:"HelpDialog__island--tools",caption:y("helpDialog.tools"),children:[(0,j.jsx)(K,{label:y("toolBar.hand"),shortcuts:[k.H]}),(0,j.jsx)(K,{label:y("toolBar.selection"),shortcuts:[k.V,k[1]]}),(0,j.jsx)(K,{label:y("toolBar.rectangle"),shortcuts:[k.R,k[2]]}),(0,j.jsx)(K,{label:y("toolBar.diamond"),shortcuts:[k.D,k[3]]}),(0,j.jsx)(K,{label:y("toolBar.ellipse"),shortcuts:[k.O,k[4]]}),(0,j.jsx)(K,{label:y("toolBar.arrow"),shortcuts:[k.A,k[5]]}),(0,j.jsx)(K,{label:y("toolBar.line"),shortcuts:[k.L,k[6]]}),(0,j.jsx)(K,{label:y("toolBar.freedraw"),shortcuts:[k.P,k[7]]}),(0,j.jsx)(K,{label:y("toolBar.text"),shortcuts:[k.T,k[8]]}),(0,j.jsx)(K,{label:y("toolBar.image"),shortcuts:[k[9]]}),(0,j.jsx)(K,{label:y("toolBar.eraser"),shortcuts:[k.E,k[0]]}),(0,j.jsx)(K,{label:y("toolBar.frame"),shortcuts:[k.F]}),(0,j.jsx)(K,{label:y("toolBar.laser"),shortcuts:[k.K]}),(0,j.jsx)(K,{label:y("labels.eyeDropper"),shortcuts:[k.I,"Shift+S","Shift+G"]}),(0,j.jsx)(K,{label:y("helpDialog.editLineArrowPoints"),shortcuts:[F("CtrlOrCmd+Enter")]}),(0,j.jsx)(K,{label:y("helpDialog.editText"),shortcuts:[F("Enter")]}),(0,j.jsx)(K,{label:y("helpDialog.textNewLine"),shortcuts:[F("Enter"),F("Shift+Enter")]}),(0,j.jsx)(K,{label:y("helpDialog.textFinish"),shortcuts:[F("Esc"),F("CtrlOrCmd+Enter")]}),(0,j.jsx)(K,{label:y("helpDialog.curvedArrow"),shortcuts:["A",y("helpDialog.click"),y("helpDialog.click"),y("helpDialog.click")],isOr:!1}),(0,j.jsx)(K,{label:y("helpDialog.curvedLine"),shortcuts:["L",y("helpDialog.click"),y("helpDialog.click"),y("helpDialog.click")],isOr:!1}),(0,j.jsx)(K,{label:y("helpDialog.cropStart"),shortcuts:[y("helpDialog.doubleClick"),F("Enter")],isOr:!0}),(0,j.jsx)(K,{label:y("helpDialog.cropFinish"),shortcuts:[F("Enter"),F("Escape")],isOr:!0}),(0,j.jsx)(K,{label:y("toolBar.lock"),shortcuts:[k.Q]}),(0,j.jsx)(K,{label:y("helpDialog.preventBinding"),shortcuts:[F("CtrlOrCmd")]}),(0,j.jsx)(K,{label:y("toolBar.link"),shortcuts:[F("CtrlOrCmd+K")]})]}),(0,j.jsxs)(df,{className:"HelpDialog__island--view",caption:y("helpDialog.view"),children:[(0,j.jsx)(K,{label:y("buttons.zoomIn"),shortcuts:[F("CtrlOrCmd++")]}),(0,j.jsx)(K,{label:y("buttons.zoomOut"),shortcuts:[F("CtrlOrCmd+-")]}),(0,j.jsx)(K,{label:y("buttons.resetZoom"),shortcuts:[F("CtrlOrCmd+0")]}),(0,j.jsx)(K,{label:y("helpDialog.zoomToFit"),shortcuts:["Shift+1"]}),(0,j.jsx)(K,{label:y("helpDialog.zoomToSelection"),shortcuts:["Shift+2"]}),(0,j.jsx)(K,{label:y("helpDialog.movePageUpDown"),shortcuts:["PgUp/PgDn"]}),(0,j.jsx)(K,{label:y("helpDialog.movePageLeftRight"),shortcuts:["Shift+PgUp/PgDn"]}),(0,j.jsx)(K,{label:y("buttons.zenMode"),shortcuts:[F("Alt+Z")]}),(0,j.jsx)(K,{label:y("buttons.objectsSnapMode"),shortcuts:[F("Alt+S")]}),(0,j.jsx)(K,{label:y("labels.toggleGrid"),shortcuts:[F("CtrlOrCmd+'")]}),(0,j.jsx)(K,{label:y("labels.viewMode"),shortcuts:[F("Alt+R")]}),(0,j.jsx)(K,{label:y("labels.toggleTheme"),shortcuts:[F("Alt+Shift+D")]}),(0,j.jsx)(K,{label:y("stats.fullTitle"),shortcuts:[F("Alt+/")]}),(0,j.jsx)(K,{label:y("search.title"),shortcuts:[At("searchMenu")]}),(0,j.jsx)(K,{label:y("commandPalette.title"),shortcuts:Na?[At("commandPalette")]:[At("commandPalette"),At("commandPalette",1)]})]}),(0,j.jsxs)(df,{className:"HelpDialog__island--editor",caption:y("helpDialog.editor"),children:[(0,j.jsx)(K,{label:y("helpDialog.createFlowchart"),shortcuts:[F("CtrlOrCmd+Arrow Key")],isOr:!0}),(0,j.jsx)(K,{label:y("helpDialog.navigateFlowchart"),shortcuts:[F("Alt+Arrow Key")],isOr:!0}),(0,j.jsx)(K,{label:y("labels.moveCanvas"),shortcuts:[F(`Space+${y("helpDialog.drag")}`),F(`Wheel+${y("helpDialog.drag")}`)],isOr:!0}),(0,j.jsx)(K,{label:y("buttons.clearReset"),shortcuts:[F("CtrlOrCmd+Delete")]}),(0,j.jsx)(K,{label:y("labels.delete"),shortcuts:[F("Delete")]}),(0,j.jsx)(K,{label:y("labels.cut"),shortcuts:[F("CtrlOrCmd+X")]}),(0,j.jsx)(K,{label:y("labels.copy"),shortcuts:[F("CtrlOrCmd+C")]}),(0,j.jsx)(K,{label:y("labels.paste"),shortcuts:[F("CtrlOrCmd+V")]}),(0,j.jsx)(K,{label:y("labels.pasteAsPlaintext"),shortcuts:[F("CtrlOrCmd+Shift+V")]}),(0,j.jsx)(K,{label:y("labels.selectAll"),shortcuts:[F("CtrlOrCmd+A")]}),(0,j.jsx)(K,{label:y("labels.multiSelect"),shortcuts:[F(`Shift+${y("helpDialog.click")}`)]}),(0,j.jsx)(K,{label:y("helpDialog.deepSelect"),shortcuts:[F(`CtrlOrCmd+${y("helpDialog.click")}`)]}),(0,j.jsx)(K,{label:y("helpDialog.deepBoxSelect"),shortcuts:[F(`CtrlOrCmd+${y("helpDialog.drag")}`)]}),(Nc||Na)&&(0,j.jsx)(K,{label:y("labels.copyAsPng"),shortcuts:[F("Shift+Alt+C")]}),(0,j.jsx)(K,{label:y("labels.copyStyles"),shortcuts:[F("CtrlOrCmd+Alt+C")]}),(0,j.jsx)(K,{label:y("labels.pasteStyles"),shortcuts:[F("CtrlOrCmd+Alt+V")]}),(0,j.jsx)(K,{label:y("labels.sendToBack"),shortcuts:[Ii?F("CtrlOrCmd+Alt+["):F("CtrlOrCmd+Shift+[")]}),(0,j.jsx)(K,{label:y("labels.bringToFront"),shortcuts:[Ii?F("CtrlOrCmd+Alt+]"):F("CtrlOrCmd+Shift+]")]}),(0,j.jsx)(K,{label:y("labels.sendBackward"),shortcuts:[F("CtrlOrCmd+[")]}),(0,j.jsx)(K,{label:y("labels.bringForward"),shortcuts:[F("CtrlOrCmd+]")]}),(0,j.jsx)(K,{label:y("labels.alignTop"),shortcuts:[F("CtrlOrCmd+Shift+Up")]}),(0,j.jsx)(K,{label:y("labels.alignBottom"),shortcuts:[F("CtrlOrCmd+Shift+Down")]}),(0,j.jsx)(K,{label:y("labels.alignLeft"),shortcuts:[F("CtrlOrCmd+Shift+Left")]}),(0,j.jsx)(K,{label:y("labels.alignRight"),shortcuts:[F("CtrlOrCmd+Shift+Right")]}),(0,j.jsx)(K,{label:y("labels.duplicateSelection"),shortcuts:[F("CtrlOrCmd+D"),F(`Alt+${y("helpDialog.drag")}`)]}),(0,j.jsx)(K,{label:y("helpDialog.toggleElementLock"),shortcuts:[F("CtrlOrCmd+Shift+L")]}),(0,j.jsx)(K,{label:y("buttons.undo"),shortcuts:[F("CtrlOrCmd+Z")]}),(0,j.jsx)(K,{label:y("buttons.redo"),shortcuts:$u?[F("CtrlOrCmd+Y"),F("CtrlOrCmd+Shift+Z")]:[F("CtrlOrCmd+Shift+Z")]}),(0,j.jsx)(K,{label:y("labels.group"),shortcuts:[F("CtrlOrCmd+G")]}),(0,j.jsx)(K,{label:y("labels.ungroup"),shortcuts:[F("CtrlOrCmd+Shift+G")]}),(0,j.jsx)(K,{label:y("labels.flipHorizontal"),shortcuts:[F("Shift+H")]}),(0,j.jsx)(K,{label:y("labels.flipVertical"),shortcuts:[F("Shift+V")]}),(0,j.jsx)(K,{label:y("labels.showStroke"),shortcuts:[F("S")]}),(0,j.jsx)(K,{label:y("labels.showBackground"),shortcuts:[F("G")]}),(0,j.jsx)(K,{label:y("labels.showFonts"),shortcuts:[F("Shift+F")]}),(0,j.jsx)(K,{label:y("labels.decreaseFontSize"),shortcuts:[F("CtrlOrCmd+Shift+<")]}),(0,j.jsx)(K,{label:y("labels.increaseFontSize"),shortcuts:[F("CtrlOrCmd+Shift+>")]})]})]})]})})},aL=4,sL=8,oL=({shouldWrap:e,children:t,username:n})=>e?(0,gt.jsx)(Ia,{label:n||"Unknown user",children:t}):(0,gt.jsx)(gt.Fragment,{children:t}),uf=({actionManager:e,collaborator:t,socketId:n,withName:i=!1,shouldWrapWithTooltip:r=!1,isBeingFollowed:a})=>{let o={socketId:n,collaborator:t,withName:i,isBeingFollowed:a},c=e.renderAction("goToCollaborator",o);return(0,gt.jsx)(oL,{username:t.username,shouldWrap:r,children:c},n)},lL=["avatarUrl","id","socketId","username","isInCall","isSpeaking","isMuted"],I3=pa.default.memo(({className:e,mobile:t,collaborators:n,userToFollow:i})=>{let r=Jt(),a=new Map;n.forEach((p,f)=>{let g=p.id||f;a.set(g,{...p,socketId:f})});let o=Array.from(a.values()).filter(p=>p.username?.trim()),[c,d]=pa.default.useState(""),h=o.filter(p=>p.username?.toLowerCase().includes(c)),s=pa.default.useRef(null);(0,pa.useLayoutEffect)(()=>{if(s.current){let p=g=>{let v=Math.max(1,Math.min(8,Math.floor(g/38)));m(v)};if(p(s.current.clientWidth),!Bl)return;let f=new ResizeObserver(g=>{for(let v of g){let{width:E}=v.contentRect;p(E)}});return f.observe(s.current),()=>{f.disconnect()}}},[]);let[l,m]=pa.default.useState(aL),u=o.slice(0,l-1).map(p=>uf({actionManager:r,collaborator:p,socketId:p.socketId,shouldWrapWithTooltip:!0,isBeingFollowed:p.socketId===i}));return t?(0,gt.jsx)("div",{className:$("UserList UserList_mobile",e),children:o.map(p=>uf({actionManager:r,collaborator:p,socketId:p.socketId,shouldWrapWithTooltip:!0,isBeingFollowed:p.socketId===i}))}):(0,gt.jsx)("div",{className:"UserList__wrapper",ref:s,children:(0,gt.jsxs)("div",{className:$("UserList",e),style:{"--max-avatars":l},children:[u,o.length>l-1&&(0,gt.jsxs)(hr,{children:[(0,gt.jsxs)(pr,{className:"UserList__more",children:["+",o.length-l+1]}),(0,gt.jsx)(ls,{style:{zIndex:2,width:"15rem",textAlign:"left"},align:"end",sideOffset:10,children:(0,gt.jsxs)(Kn,{padding:2,children:[o.length>=sL&&(0,gt.jsx)(eC,{placeholder:y("quickSearch.placeholder"),onChange:d}),(0,gt.jsx)(nC,{className:"dropdown-menu UserList__collaborators",placeholder:y("userList.empty"),children:h.length>0?[(0,gt.jsx)("div",{className:"hint",children:y("userList.hint.text")}),h.map(p=>uf({actionManager:r,collaborator:p,socketId:p.socketId,withName:!0,isBeingFollowed:p.socketId===i}))]:[]}),(0,gt.jsx)(fd,{width:20,height:10,style:{fill:"var(--popup-bg-color)",filter:"drop-shadow(rgba(0, 0, 0, 0.05) 0px 3px 2px)"}})]})})]})]})})},(e,t)=>{if(e.collaborators.size!==t.collaborators.size||e.mobile!==t.mobile||e.className!==t.className||e.userToFollow!==t.userToFollow)return!1;let n=t.collaborators.keys();for(let[i,r]of e.collaborators){let a=t.collaborators.get(i);if(!a||i!==n.next().value||!hn(r,a,lL))return!1}return!0}),Vx=({children:e,color:t})=>(0,k3.jsx)("div",{className:"Card",style:{"--card-color":t==="primary"?"var(--color-primary)":Et[t][7],"--card-color-darker":t==="primary"?"var(--color-primary-darker)":Et[t][8],"--card-color-darkest":t==="primary"?"var(--color-primary-darkest)":Et[t][9]},children:e}),cL=({elements:e,appState:t,setAppState:n,files:i,actionManager:r,exportOpts:a,canvas:o,onCloseRequest:c})=>{let{onExportToBackend:d}=a;return(0,ot.jsx)("div",{className:"ExportDialog ExportDialog--json",children:(0,ot.jsxs)("div",{className:"ExportDialog-cards",children:[a.saveFileToDisk&&(0,ot.jsxs)(Vx,{color:"lime",children:[(0,ot.jsx)("div",{className:"Card-icon",children:uv}),(0,ot.jsx)("h2",{children:y("exportDialog.disk_title")}),(0,ot.jsxs)("div",{className:"Card-details",children:[y("exportDialog.disk_details"),!$l&&r.renderAction("changeProjectName")]}),(0,ot.jsx)(ce,{className:"Card-button",type:"button",title:y("exportDialog.disk_button"),"aria-label":y("exportDialog.disk_button"),showAriaLabel:!0,onClick:()=>{r.executeAction(vC,"ui")}})]}),d&&(0,ot.jsxs)(Vx,{color:"pink",children:[(0,ot.jsx)("div",{className:"Card-icon",children:uc}),(0,ot.jsx)("h2",{children:y("exportDialog.link_title")}),(0,ot.jsx)("div",{className:"Card-details",children:y("exportDialog.link_details")}),(0,ot.jsx)(ce,{className:"Card-button",type:"button",title:y("exportDialog.link_button"),"aria-label":y("exportDialog.link_button"),showAriaLabel:!0,onClick:async()=>{try{we("export","link",`ui (${L1()})`),await d(e,t,i),c()}catch(h){n({errorMessage:h.message})}}})]}),a.renderCustomUI&&a.renderCustomUI(e,t,i,o)]})})},dL=({elements:e,appState:t,files:n,actionManager:i,exportOpts:r,canvas:a,setAppState:o})=>{let c=T3.default.useCallback(()=>{o({openDialog:null})},[o]);return(0,ot.jsx)(ot.Fragment,{children:t.openDialog?.name==="jsonExport"&&(0,ot.jsx)(Qn,{onCloseRequest:c,title:y("buttons.export"),children:(0,ot.jsx)(cL,{elements:e,appState:t,setAppState:o,files:n,actionManager:i,onCloseRequest:c,exportOpts:r,canvas:a})})})},uL=e=>(0,M3.jsx)("button",{className:"help-icon",onClick:e.onClick,type:"button",title:`${y("helpDialog.title")} \u2014 ?`,"aria-label":y("helpDialog.title"),children:dc}),D3=({appState:e,actionManager:t,showExitZenModeBtn:n,renderWelcomeScreen:i})=>{let{FooterCenterTunnel:r,WelcomeScreenHelpHintTunnel:a}=Vt(),o=lt(),c=!e.viewModeEnabled&&e.multiElement&&o.isTouchScreen;return(0,jt.jsxs)("footer",{role:"contentinfo",className:"layer-ui__wrapper__footer App-menu App-menu_bottom",children:[(0,jt.jsx)("div",{className:$("layer-ui__wrapper__footer-left zen-mode-transition",{"layer-ui__wrapper__footer-left--transition-left":e.zenModeEnabled}),children:(0,jt.jsx)(Cn.Col,{gap:2,children:(0,jt.jsxs)(wl,{heading:"canvasActions",children:[(0,jt.jsx)(fD,{renderAction:t.renderAction,zoom:e.zoom}),!e.viewModeEnabled&&(0,jt.jsx)(gD,{renderAction:t.renderAction,className:$("zen-mode-transition",{"layer-ui__wrapper__footer-left--transition-bottom":e.zenModeEnabled})}),c&&(0,jt.jsx)(bD,{renderAction:t.renderAction,className:$("zen-mode-transition",{"layer-ui__wrapper__footer-left--transition-left":e.zenModeEnabled})})]})})}),(0,jt.jsx)(r.Out,{}),(0,jt.jsx)("div",{className:$("layer-ui__wrapper__footer-right zen-mode-transition",{"transition-right":e.zenModeEnabled}),children:(0,jt.jsxs)("div",{style:{position:"relative"},children:[i&&(0,jt.jsx)(a.Out,{}),(0,jt.jsx)(uL,{onClick:()=>t.executeAction(og)})]})}),(0,jt.jsx)(vD,{actionManager:t,showExitZenModeBtn:n})]})},mL=D3;D3.displayName="Footer";var R3=L3.default.createContext({}),N3=({children:e,className:t})=>{let n=lt(),i=(0,A3.useContext)(R3),r=!!(n.editor.canFitSidebar&&i.shouldRenderDockButton);return(0,wa.jsxs)("div",{className:$("sidebar__header",t),"data-testid":"sidebar-header",children:[e,(0,wa.jsxs)("div",{className:"sidebar__header__buttons",children:[r&&(0,wa.jsx)(Ia,{label:y("labels.sidebarLock"),children:(0,wa.jsx)(Ta,{onSelect:()=>i.onDock?.(!i.docked),selected:!!i.docked,className:"sidebar__dock","data-testid":"sidebar-dock","aria-label":y("labels.sidebarLock"),children:X1})}),(0,wa.jsx)(Ta,{"data-testid":"sidebar-close",className:"sidebar__close",onSelect:i.onCloseRequest,"aria-label":y("buttons.close"),children:Yr})]})]})};N3.displayName="SidebarHeader";var P3=({name:e,tab:t,icon:n,title:i,children:r,onToggle:a,className:o,style:c})=>{let d=nt(),h=yt();return(0,xa.jsxs)("label",{title:i,className:"sidebar-trigger__label-element",children:[(0,xa.jsx)("input",{className:"ToolIcon_type_checkbox",type:"checkbox",onChange:s=>{document.querySelector(".layer-ui__wrapper")?.classList.remove("animate");let l=s.target.checked;d({openSidebar:l?{name:e,tab:t}:null}),a?.(l)},checked:h.openSidebar?.name===e,"aria-label":i,"aria-keyshortcuts":"0"}),(0,xa.jsxs)("div",{className:$("sidebar-trigger",o),style:c,children:[n&&(0,xa.jsx)("div",{children:n}),r&&(0,xa.jsx)("div",{className:"sidebar-trigger__label",children:r})]})]})};P3.displayName="SidebarTrigger";var O3=({children:e,...t})=>(0,_3.jsx)(Sd,{className:"sidebar-triggers",...t,children:e});O3.displayName="SidebarTabTriggers";var F3=({children:e,tab:t,onSelect:n,...i})=>(0,zf.jsx)(Cd,{value:t,asChild:!0,onSelect:n,children:(0,zf.jsx)("button",{type:"button",className:"excalidraw-button sidebar-tab-trigger",...i,children:e})});F3.displayName="SidebarTabTrigger";var B3=({children:e,...t})=>{let n=yt(),i=nt();if(!n.openSidebar)return null;let{name:r}=n.openSidebar;return(0,$3.jsx)(xd,{className:"sidebar-tabs-root",value:n.openSidebar.tab,onValueChange:a=>i(o=>({...o,openSidebar:{...o.openSidebar,name:r,tab:a}})),...t,children:e})};B3.displayName="SidebarTabs";var j3=({tab:e,children:t,...n})=>(0,z3.jsx)(Id,{...n,value:e,"data-testid":e,children:t});j3.displayName="SidebarTab";var fg=Ze(!1),H3=(0,tt.forwardRef)(({name:e,children:t,onDock:n,docked:i,className:r,...a},o)=>{dt.DEV&&n&&i==null&&console.warn("Sidebar: `docked` must be set when `onDock` is supplied for the sidebar to be user-dockable. To hide this message, either pass `docked` or remove `onDock`");let c=nt(),d=qd(fg);(0,tt.useLayoutEffect)(()=>(d(!!i),()=>{d(!1)}),[d,i]);let h=(0,tt.useRef)({});h.current.onCloseRequest=()=>{c({openSidebar:null})},h.current.onDock=u=>n?.(u),h.current=io(h.current,{docked:i,shouldRenderDockButton:!!n&&i!=null});let s=(0,tt.useRef)(null);(0,tt.useImperativeHandle)(o,()=>s.current);let l=lt(),m=(0,tt.useCallback)(()=>{document.querySelector(".Dialog")||c({openSidebar:null})},[c]);return eg(s,(0,tt.useCallback)(u=>{u.target.closest(".sidebar-trigger")||(!i||!l.editor.canFitSidebar)&&m()},[m,i,l.editor.canFitSidebar])),(0,tt.useEffect)(()=>{let u=p=>{p.key===k.ESCAPE&&(!i||!l.editor.canFitSidebar)&&m()};return document.addEventListener("keydown",u),()=>{document.removeEventListener("keydown",u)}},[m,i,l.editor.canFitSidebar]),(0,jf.jsx)(Kn,{...a,className:$("sidebar",{"sidebar--docked":i},r),ref:s,children:(0,jf.jsx)(R3.Provider,{value:h.current,children:t})})});H3.displayName="SidebarInner";var hi=Object.assign((0,tt.forwardRef)((e,t)=>{let n=yt(),{onStateChange:i}=e,r=(0,tt.useRef)(n.openSidebar);(0,tt.useEffect)(()=>{(!n.openSidebar&&r?.current?.name===e.name||n.openSidebar?.name===e.name&&r?.current?.name!==e.name||r.current?.name===e.name)&&n.openSidebar!==r.current&&i?.(n.openSidebar?.name!==e.name?null:n.openSidebar),r.current=n.openSidebar},[n.openSidebar,i,e.name]);let[a,o]=(0,tt.useState)(!1);return(0,tt.useLayoutEffect)(()=>(o(!0),()=>o(!1)),[]),a&&n.openSidebar?.name===e.name?(0,U3.createElement)(H3,{...e,ref:t,key:e.name}):null}),{Header:N3,TabTriggers:O3,TabTrigger:F3,Tabs:B3,Tab:j3,Trigger:P3});hi.displayName="Sidebar";var W3={};Pu(W3,{ChangeCanvasBackground:()=>tI,ClearCanvas:()=>J3,CommandPalette:()=>X3,Export:()=>nI,Help:()=>Q3,LiveCollaborationTrigger:()=>rI,LoadScene:()=>G3,SaveAsImage:()=>Z3,SaveToActiveFile:()=>K3,SearchMenu:()=>q3,Socials:()=>iI,ToggleTheme:()=>eI});var V3=Ze({active:!1});async function hL({title:e,description:t,actionLabel:n,color:i}){return new Promise(r=>{Wn.set(V3,{active:!0,onConfirm:()=>r(!0),onClose:()=>r(!1),onReject:()=>r(!1),title:e,description:t,actionLabel:n,color:i})})}var Y3=({value:e,shortcut:t,onChange:n,choices:i,children:r,name:a})=>{let o=lt();return(0,zi.jsxs)(zi.Fragment,{children:[(0,zi.jsxs)("div",{className:"dropdown-menu-item-base dropdown-menu-item-bare",children:[(0,zi.jsx)("label",{className:"dropdown-menu-item__text",htmlFor:a,children:r}),(0,zi.jsx)(p3,{name:a,value:e,onChange:n,choices:i})]}),t&&!o.editor.isMobile&&(0,zi.jsx)("div",{className:"dropdown-menu-item__shortcut dropdown-menu-item__shortcut--orphaned",children:t})]})};Y3.displayName="DropdownMenuItemContentRadio";var pL=Y3,G3=()=>{let{t:e}=Nt(),t=Jt(),n=Ru();return t.isActionEnabled(kf)?(0,Pe.jsx)(Mn,{icon:mc,onSelect:async()=>{(!n.length||await hL({title:e("overwriteConfirm.modal.loadFromFile.title"),actionLabel:e("overwriteConfirm.modal.loadFromFile.button"),color:"warning",description:(0,Pe.jsx)(bi,{i18nKey:"overwriteConfirm.modal.loadFromFile.description",bold:i=>(0,Pe.jsx)("strong",{children:i}),br:()=>(0,Pe.jsx)("br",{})})}))&&t.executeAction(kf)},"data-testid":"load-button",shortcut:At("loadScene"),"aria-label":e("buttons.load"),children:e("buttons.load")}):null};G3.displayName="LoadScene";var K3=()=>{let{t:e}=Nt(),t=Jt();return t.isActionEnabled(yx)?(0,Pe.jsx)(Mn,{shortcut:At("saveScene"),"data-testid":"save-button",onSelect:()=>t.executeAction(yx),icon:lv,"aria-label":`${e("buttons.save")}`,children:`${e("buttons.save")}`}):null};K3.displayName="SaveToActiveFile";var Z3=()=>{let e=nt(),{t}=Nt();return(0,Pe.jsx)(Mn,{icon:gm,"data-testid":"image-export-button",onSelect:()=>e({openDialog:{name:"imageExport"}}),shortcut:At("imageExport"),"aria-label":t("buttons.exportImage"),children:t("buttons.exportImage")})};Z3.displayName="SaveAsImage";var X3=e=>{let t=nt(),{t:n}=Nt();return(0,Pe.jsx)(Mn,{icon:jm,"data-testid":"command-palette-button",onSelect:()=>{we("command_palette","open","menu"),t({openDialog:{name:"commandPalette"}})},shortcut:At("commandPalette"),"aria-label":n("commandPalette.title"),className:e?.className,children:n("commandPalette.title")})};X3.displayName="CommandPalette";var q3=e=>{let{t}=Nt(),n=Jt();return(0,Pe.jsx)(Mn,{icon:Ji,"data-testid":"search-menu-button",onSelect:()=>{n.executeAction(a3)},shortcut:At("searchMenu"),"aria-label":t("search.title"),className:e?.className,children:t("search.title")})};q3.displayName="SearchMenu";var Q3=()=>{let{t:e}=Nt(),t=Jt();return(0,Pe.jsx)(Mn,{"data-testid":"help-menu-item",icon:dc,onSelect:()=>t.executeAction(og),shortcut:"?","aria-label":e("helpDialog.title"),children:e("helpDialog.title")})};Q3.displayName="Help";var J3=()=>{let{t:e}=Nt(),t=qd(Cu);return Jt().isActionEnabled(ol)?(0,Pe.jsx)(Mn,{icon:Qi,onSelect:()=>t("clearCanvas"),"data-testid":"clear-canvas-button","aria-label":e("buttons.clearReset"),children:e("buttons.clearReset")}):null};J3.displayName="ClearCanvas";var eI=e=>{let{t}=Nt(),n=yt(),i=Jt(),r=At("toggleTheme");return i.isActionEnabled(Wd)?e?.allowSystemTheme?(0,Pe.jsx)(pL,{name:"theme",value:e.theme,onChange:a=>e.onSelect(a),choices:[{value:he.LIGHT,label:cc,ariaLabel:`${t("buttons.lightMode")} - ${r}`},{value:he.DARK,label:lc,ariaLabel:`${t("buttons.darkMode")} - ${r}`},{value:"system",label:w0,ariaLabel:t("buttons.systemMode")}],children:t("labels.theme")}):(0,Pe.jsx)(Mn,{onSelect:a=>{if(a.preventDefault(),e?.onSelect)e.onSelect(n.theme===he.DARK?he.LIGHT:he.DARK);else return i.executeAction(Wd)},icon:n.theme===he.DARK?cc:lc,"data-testid":"toggle-dark-mode",shortcut:r,"aria-label":n.theme===he.DARK?t("buttons.lightMode"):t("buttons.darkMode"),children:n.theme===he.DARK?t("buttons.lightMode"):t("buttons.darkMode")}):null};eI.displayName="ToggleTheme";var tI=()=>{let{t:e}=Nt(),t=yt(),n=Jt(),i=Nl();return t.viewModeEnabled||!i.UIOptions.canvasActions.changeViewBackgroundColor?null:(0,Pe.jsxs)("div",{style:{marginTop:"0.5rem"},children:[(0,Pe.jsx)("div",{"data-testid":"canvas-background-label",style:{fontSize:".75rem",marginBottom:".5rem"},children:e("labels.canvasBackground")}),(0,Pe.jsx)("div",{style:{padding:"0 0.625rem"},children:n.renderAction("changeViewBackgroundColor")})]})};tI.displayName="ChangeCanvasBackground";var nI=()=>{let{t:e}=Nt(),t=nt();return(0,Pe.jsx)(Mn,{icon:lo,onSelect:()=>{t({openDialog:{name:"jsonExport"}})},"data-testid":"json-export-button","aria-label":e("buttons.export"),children:e("buttons.export")})};nI.displayName="Export";var iI=()=>{let{t:e}=Nt();return(0,Pe.jsxs)(Pe.Fragment,{children:[(0,Pe.jsx)($d,{icon:fm,href:"https://github.com/excalidraw/excalidraw","aria-label":"GitHub",children:"GitHub"}),(0,Pe.jsx)($d,{icon:sv,href:"https://x.com/excalidraw","aria-label":"X",children:e("labels.followUs")}),(0,Pe.jsx)($d,{icon:av,href:"https://discord.gg/UexuTaE","aria-label":"Discord",children:e("labels.discordChat")})]})};iI.displayName="Socials";var rI=({onSelect:e,isCollaborating:t})=>{let{t:n}=Nt();return(0,Pe.jsx)(Mn,{"data-testid":"collab-button",icon:Dm,className:$({"active-collab":t}),onSelect:e,children:n("labels.liveCollaboration")})};rI.displayName="LiveCollaborationTrigger";var Rl=(e,t)=>{let n=Ze(0),i=r=>{let{tunnelsJotai:{useAtom:a}}=Vt(),[,o]=a(n),c=(0,Mu.useRef)({preferHost:!1,counter:0});return(0,Mu.useLayoutEffect)(()=>{let d=c.current;return o(h=>{let s=h+1;return d.counter=s,s}),()=>{o(h=>{let s=h-1;return d.counter=s,s||(d.preferHost=!1),s})}},[o]),r.__fallback||(c.current.preferHost=!0),!c.current.counter&&r.__fallback&&c.current.preferHost||c.current.counter>1&&r.__fallback?null:(0,aI.jsx)(t,{...r})};return i.displayName=e,i},fL=Object.assign(Rl("MainMenu",({children:e,onSelect:t})=>{let{MainMenuTunnel:n}=Vt(),i=lt(),r=yt(),a=nt(),o=i.editor.isMobile?void 0:()=>a({openMenu:null});return(0,Bi.jsx)(n.In,{children:(0,Bi.jsxs)(Ce,{open:r.openMenu==="canvas",children:[(0,Bi.jsx)(Ce.Trigger,{onToggle:()=>{a({openMenu:r.openMenu==="canvas"?null:"canvas"})},"data-testid":"main-menu-trigger",className:"main-menu-trigger",children:hm}),(0,Bi.jsxs)(Ce.Content,{onClickOutside:o,onSelect:ro(t,()=>{a({openMenu:null})}),children:[e,i.editor.isMobile&&r.collaborators.size>0&&(0,Bi.jsxs)("fieldset",{className:"UserList-Wrapper",children:[(0,Bi.jsx)("legend",{children:y("labels.collaborators")}),(0,Bi.jsx)(I3,{mobile:!0,collaborators:r.collaborators,userToFollow:r.userToFollow?.socketId||null})]})]})]})})}),{Trigger:Ce.Trigger,Item:Ce.Item,ItemLink:Ce.ItemLink,ItemCustom:Ce.ItemCustom,Group:Ce.Group,Separator:Ce.Separator,DefaultItems:W3}),Xt=fL,gg=({title:e,children:t,actionLabel:n,onClick:i})=>(0,ji.jsxs)("div",{className:"OverwriteConfirm__Actions__Action",children:[(0,ji.jsx)("h4",{children:e}),(0,ji.jsx)("div",{className:"OverwriteConfirm__Actions__Action__content",children:t}),(0,ji.jsx)(cl,{variant:"outlined",color:"muted",label:n,size:"large",fullWidth:!0,onClick:i})]}),gL=()=>{let{t:e}=Nt(),t=Jt(),n=nt();return(0,ji.jsx)(gg,{title:e("overwriteConfirm.action.exportToImage.title"),actionLabel:e("overwriteConfirm.action.exportToImage.button"),onClick:()=>{t.executeAction(gC,"ui",!0),n({openDialog:{name:"imageExport"}})},children:e("overwriteConfirm.action.exportToImage.description")})},vL=()=>{let{t:e}=Nt(),t=Jt();return(0,ji.jsx)(gg,{title:e("overwriteConfirm.action.saveToDisk.title"),actionLabel:e("overwriteConfirm.action.saveToDisk.button"),onClick:()=>{t.executeAction(vC,"ui")},children:e("overwriteConfirm.action.saveToDisk.description")})},Yx=Object.assign(({children:e})=>(0,ji.jsx)("div",{className:"OverwriteConfirm__Actions",children:e}),{ExportToImage:gL,SaveToDisk:vL}),mf=Object.assign(Rl("OverwriteConfirmDialog",({children:e})=>{let{OverwriteConfirmDialogTunnel:t}=Vt(),[n,i]=je(V3);if(!n.active)return null;let r=()=>{n.onClose(),i(o=>({...o,active:!1}))},a=()=>{n.onConfirm(),i(o=>({...o,active:!1}))};return(0,bn.jsx)(t.In,{children:(0,bn.jsx)(Qn,{onCloseRequest:r,title:!1,size:916,children:(0,bn.jsxs)("div",{className:"OverwriteConfirm",children:[(0,bn.jsx)("h3",{children:n.title}),(0,bn.jsxs)("div",{className:`OverwriteConfirm__Description OverwriteConfirm__Description--color-${n.color}`,children:[(0,bn.jsx)("div",{className:"OverwriteConfirm__Description__icon",children:i0}),(0,bn.jsx)("div",{children:n.description}),(0,bn.jsx)("div",{className:"OverwriteConfirm__Description__spacer"}),(0,bn.jsx)(cl,{color:n.color,size:"large",label:n.actionLabel,onClick:a})]}),(0,bn.jsx)(Yx,{children:e})]})})})}),{Actions:Yx,Action:gg}),bL=Ze(""),oI=Ze(null),yL=350,EL=()=>{let e=xi(),t=nt(),n=(0,bt.useRef)(null),[i,r]=je(bL),a=i.trim(),[o,c]=(0,bt.useState)(!1),[d,h]=(0,bt.useState)({nonce:null,items:[]}),s=(0,bt.useRef)(null),l=(0,bt.useRef)(void 0),[m,u]=je(oI),p=e.scene.getNonDeletedElementsMap();(0,bt.useEffect)(()=>{o||(a!==s.current||e.scene.getSceneNonce()!==l.current)&&(s.current=null,Gx(a,e,(b,w)=>{h({nonce:kc(),items:b}),s.current=a,l.current=e.scene.getSceneNonce(),t({searchMatches:b.map(x=>({id:x.textElement.id,focus:!1,matchedLines:x.matchedLines}))})}))},[o,a,p,e,t,u,l]);let f=()=>{d.items.length>0&&u(b=>b===null?0:(b+1)%d.items.length)},g=()=>{d.items.length>0&&u(b=>b===null?0:b-1<0?d.items.length-1:b-1)};(0,bt.useEffect)(()=>{t(b=>({searchMatches:b.searchMatches.map((w,x)=>x===m?{...w,focus:!0}:{...w,focus:!1})}))},[m,t]),(0,bt.useEffect)(()=>{if(d.items.length>0&&m!==null){let b=d.items[m];if(b){let w=e.state.zoom.value,x=ar({text:b.searchQuery,x:b.textElement.x+(b.matchedLines[0]?.offsetX??0),y:b.textElement.y+(b.matchedLines[0]?.offsetY??0),width:b.matchedLines[0]?.width,height:b.matchedLines[0]?.height,fontSize:b.textElement.fontSize,fontFamily:b.textElement.fontFamily}),S=14,C=b.textElement.fontSize,T=C*w<S;if(!Do([x],e.canvas.width/window.devicePixelRatio,e.canvas.height/window.devicePixelRatio,{offsetLeft:e.state.offsetLeft,offsetTop:e.state.offsetTop,scrollX:e.state.scrollX,scrollY:e.state.scrollY,zoom:e.state.zoom},e.scene.getNonDeletedElementsMap(),e.getEditorUIOffsets())||T){let L;T?C>=S?L={fitToContent:!0}:L={fitToViewport:!0,maxZoom:Mi(S/C,1)}:L={fitToContent:!0},e.scrollToContent(x,{animate:!0,duration:300,...L,canvasOffsets:e.getEditorUIOffsets()})}}}},[m,d,e]),(0,bt.useEffect)(()=>()=>{u(null),s.current=null,l.current=void 0,t({searchMatches:[]}),c(!1)},[t,u]);let v=ru({goToNextItem:f,goToPreviousItem:g,searchMatches:d});(0,bt.useEffect)(()=>Me(window,"keydown",w=>{if(w.key===k.ESCAPE&&!e.state.openDialog&&!e.state.openPopup){w.preventDefault(),w.stopPropagation(),t({openSidebar:null});return}w[k.CTRL_OR_CMD]&&w.key===k.F&&(w.preventDefault(),w.stopPropagation(),n.current?.matches(":focus")?t({openSidebar:null}):(e.state.openDialog&&t({openDialog:null}),n.current?.focus(),n.current?.select())),w.target instanceof HTMLElement&&w.target.closest(".layer-ui__search")&&v.searchMatches.items.length&&(w.key===k.ENTER&&(w.stopPropagation(),v.goToNextItem()),w.key===k.ARROW_UP?(w.stopPropagation(),v.goToPreviousItem()):w.key===k.ARROW_DOWN&&(w.stopPropagation(),v.goToNextItem()))},{capture:!0,passive:!1}),[t,v,e]);let E=`${d.items.length} ${d.items.length===1?y("search.singleResult"):y("search.multipleResults")}`;return(0,We.jsxs)("div",{className:"layer-ui__search",children:[(0,We.jsx)("div",{className:"layer-ui__search-header",children:(0,We.jsx)(hg,{className:$r.SEARCH_MENU_INPUT_WRAPPER,value:i,ref:n,placeholder:y("search.placeholder"),icon:Ji,onChange:b=>{r(b),c(!0);let w=b.trim();Gx(w,e,(x,S)=>{h({nonce:kc(),items:x}),u(S),s.current=w,l.current=e.scene.getSceneNonce(),t({searchMatches:x.map(C=>({id:C.textElement.id,focus:!1,matchedLines:C.matchedLines}))}),c(!1)})},selectOnRender:!0})}),(0,We.jsxs)("div",{className:"layer-ui__search-count",children:[d.items.length>0&&(0,We.jsxs)(We.Fragment,{children:[m!==null&&m>-1?(0,We.jsxs)("div",{children:[m+1," / ",E]}):(0,We.jsx)("div",{children:E}),(0,We.jsxs)("div",{className:"result-nav",children:[(0,We.jsx)(Ta,{onSelect:()=>{f()},className:"result-nav-btn",children:Hm}),(0,We.jsx)(Ta,{onSelect:()=>{g()},className:"result-nav-btn",children:D0})]})]}),d.items.length===0&&a&&s.current&&(0,We.jsx)("div",{style:{margin:"1rem auto"},children:y("search.noMatch")})]}),(0,We.jsx)(CL,{matches:d,onItemClick:u,focusIndex:m,searchQuery:a})]})},wL=e=>{let t=[e.preview.moreBefore?"...":"",e.preview.previewText.slice(0,e.preview.indexInSearchQuery),e.preview.previewText.slice(e.preview.indexInSearchQuery,e.preview.indexInSearchQuery+e.searchQuery.length),e.preview.previewText.slice(e.preview.indexInSearchQuery+e.searchQuery.length),e.preview.moreAfter?"...":""];return(0,We.jsx)("div",{tabIndex:-1,className:$("layer-ui__result-item",{active:e.highlighted}),onClick:e.onClick,ref:n=>{e.highlighted&&n?.scrollIntoView({behavior:"auto",block:"nearest"})},children:(0,We.jsx)("div",{className:"preview-text",children:t.flatMap((n,i)=>(0,We.jsx)(bt.Fragment,{children:i===2?(0,We.jsx)("b",{children:n}):n},i))})})},xL=e=>(0,We.jsx)("div",{className:"layer-ui__search-result-container",children:e.matches.items.map((t,n)=>(0,We.jsx)(wL,{searchQuery:e.searchQuery,preview:t.preview,highlighted:n===e.focusIndex,onClick:()=>e.onItemClick(n)},t.textElement.id+t.index))}),SL=(e,t)=>e.matches.nonce===t.matches.nonce&&e.focusIndex===t.focusIndex,CL=(0,bt.memo)(xL,SL),IL=(e,t,n)=>{let i=e.slice(0,t),r=i.split(/\s+/),a=i.endsWith(" "),o=r.length-2-1-(a?0:1),c=r.slice(o<=0?0:o).join(" ")+(a?" ":""),d=20;c=c.length>d?c.slice(-d):c;let h=e.slice(t+n.length),s=h.split(/\s+/),l=!h.startsWith(" "),m=l?6:5,u=(l?"":" ")+s.slice(0,m).join(" ");return{indexInSearchQuery:c.length,previewText:c+n+u,moreBefore:o>0,moreAfter:s.length>m}},TL=(e,t)=>{let n=e.split(`
45
+ `),i=[],r=0;for(let a=0;a<n.length;a++){let o=n[a],c=n[a+1];if(c){let d=t.indexOf(c,r);if(d>o.length+r){let h=d-(o.length+r);for(;h>0;)o+=" ",h--}}i.push(o),r=r+o.length}return i.join(`
46
+ `)},kL=(e,t,n)=>{let i=TL(e.text,e.originalText).split(`
47
+ `),r=[],a=0,o=0;for(let s of i){let l=a,m=l+s.length-1;r.push({line:s,startIndex:l,endIndex:m,lineNumber:o}),a=m+1,o++}let c=n,d=e.originalText.slice(n,n+t.length),h=[];for(let s of r){if(d==="")break;if(c>=s.startIndex&&c<=s.endIndex){let l=s.endIndex+1-c,m=s.line.slice(0,c-s.startIndex),u=d.slice(0,l);d=d.slice(l);let p=Di(m,mn(e),e.lineHeight);if(m===""&&(p.width=0),e.textAlign!=="left"&&s.line.length>0){let b=Di(s.line,mn(e),e.lineHeight),w=e.textAlign==="center"?(e.width-b.width)/2:e.width-b.width;p.width+=w}let{width:f,height:g}=Di(u,mn(e),e.lineHeight),v=p.width,E=s.lineNumber*p.height;h.push({offsetX:v,offsetY:E,width:f,height:g}),c+=l}}return h},ML=e=>e.replace(/[.*+?^${}()|[\]\\-]/g,"\\$&"),Gx=(0,sI.default)((e,t,n)=>{if(!e||e===""){n([],null);return}let i=t.scene.getNonDeletedElements().filter(d=>te(d));i.sort((d,h)=>d.y-h.y);let r=[],a=new RegExp(ML(e),"gi");for(let d of i){let h=null,s=d.originalText;for(;(h=a.exec(s))!==null;){let l=IL(s,h.index,e),m=kL(d,e,h.index);m.length>0&&r.push({textElement:d,searchQuery:e,preview:l,index:h.index,matchedLines:m})}}let o=new Set(t.visibleElements.map(d=>d.id)),c=r.findIndex(d=>o.has(d.textElement.id))??null;n(r,c)},yL),cI=Rl("DefaultSidebarTrigger",e=>{let{DefaultSidebarTriggerTunnel:t}=Vt();return(0,Ut.jsx)(t.In,{children:(0,Ut.jsx)(hi.Trigger,{...e,className:"default-sidebar-trigger",name:An.name})})});cI.displayName="DefaultSidebarTrigger";var dI=({children:e})=>{let{DefaultSidebarTabTriggersTunnel:t}=Vt();return(0,Ut.jsx)(t.In,{children:e})};dI.displayName="DefaultTabTriggers";var Kx=Object.assign(Rl("DefaultSidebar",({children:e,className:t,onDock:n,docked:i,...r})=>{let a=yt(),o=nt(),{DefaultSidebarTabTriggersTunnel:c}=Vt(),d=a.openSidebar?.tab===Br;return(0,lI.createElement)(hi,{...r,name:"default",key:"default",className:$("default-sidebar",t),docked:d||(i??a.defaultSidebarDockedPreference),onDock:d||n===!1||!n&&i!=null?void 0:ro(n,h=>{o({defaultSidebarDockedPreference:h})})},(0,Ut.jsxs)(hi.Tabs,{children:[(0,Ut.jsx)(hi.Header,{children:(0,Ut.jsxs)(hi.TabTriggers,{children:[(0,Ut.jsx)(hi.TabTrigger,{tab:Br,children:Ji}),(0,Ut.jsx)(hi.TabTrigger,{tab:Kl,children:ac}),(0,Ut.jsx)(c.Out,{})]})}),(0,Ut.jsx)(hi.Tab,{tab:Kl,children:(0,Ut.jsx)(nD,{})}),(0,Ut.jsx)(hi.Tab,{tab:Br,children:(0,Ut.jsx)(EL,{})}),e]}))}),{Trigger:cI,TabTriggers:dI}),DL="small",LL=e=>(0,Sl.jsxs)("label",{className:$("ToolIcon ToolIcon__LaserPointer",`ToolIcon_size_${DL}`,{"is-mobile":e.isMobile}),title:`${e.title}`,children:[(0,Sl.jsx)("input",{className:"ToolIcon_type_checkbox",type:"checkbox",name:e.name,onChange:e.onChange,checked:e.checked,"aria-label":e.title,"data-testid":"toolbar-LaserPointer"}),(0,Sl.jsx)("div",{className:"ToolIcon__icon",children:Bm})]}),RL=({canvasRef:e,setError:t})=>{let n=e.current;if(!n)return;let i=n.parentElement;i&&(i.style.background="",t(null),n.replaceChildren())},uI=async({canvasRef:e,mermaidToExcalidrawLib:t,mermaidDefinition:n,setError:i,data:r})=>{let a=e.current,o=a?.parentElement;if(!(!a||!o)){if(!n){RL({canvasRef:e,setError:i});return}try{let c=await t.api,d;try{d=await c.parseMermaidToExcalidraw(n)}catch{d=await c.parseMermaidToExcalidraw(n.replace(/"/g,"'"))}let{elements:h,files:s={}}=d;i(null),r.current={elements:Gf(h,{regenerateIds:!0}),files:s};let l=await Pc({elements:r.current.elements,files:r.current.files,exportPadding:Ks,maxWidthOrHeight:Math.max(o.offsetWidth,o.offsetHeight)*window.devicePixelRatio});try{await Za(l)}catch(m){throw m.name==="CANVAS_POSSIBLY_TOO_BIG"?new Error(y("canvasError.canvasTooBig")):m}o.style.background="var(--default-bg-color)",a.replaceChildren(l)}catch(c){throw o.style.background="var(--default-bg-color)",n&&i(c),c}}},vg=e=>{va.set(Pa.MERMAID_TO_EXCALIDRAW,e)},mI=({app:e,data:t,text:n,shouldSaveMermaidDataToStorage:i})=>{let{elements:r,files:a}=t.current;r.length&&(e.addElementsFromPasteOrLibrary({elements:r,files:a,position:"center",fitToContent:!0}),e.setOpenDialog(null),i&&n&&vg(n))},pI=({children:e})=>(0,hI.jsx)("div",{className:"ttd-dialog-panels",children:e}),Yd=({label:e,children:t,panelAction:n,panelActionDisabled:i=!1,onTextSubmitInProgess:r,renderTopRight:a,renderSubmitShortcut:o,renderBottomRight:c})=>(0,gi.jsxs)("div",{className:"ttd-dialog-panel",children:[(0,gi.jsxs)("div",{className:"ttd-dialog-panel__header",children:[(0,gi.jsx)("label",{children:e}),a?.()]}),t,(0,gi.jsxs)("div",{className:$("ttd-dialog-panel-button-container",{invisible:!n}),style:{display:"flex",alignItems:"center"},children:[(0,gi.jsxs)(Ta,{className:"ttd-dialog-panel-button",onSelect:n?n.action:()=>{},disabled:i||r,children:[(0,gi.jsxs)("div",{className:$({invisible:r}),children:[n?.label,n?.icon&&(0,gi.jsx)("span",{children:n.icon})]}),r&&(0,gi.jsx)(Ui,{})]}),!i&&!r&&o?.(),c?.()]})]}),gI=({input:e,placeholder:t,onChange:n,onKeyboardSubmit:i})=>{let r=(0,Cl.useRef)(null),a=(0,Cl.useRef)(i);return a.current=i,(0,Cl.useEffect)(()=>{if(!a.current)return;let o=r.current;if(o){let c=d=>{d[k.CTRL_OR_CMD]&&d.key===k.ENTER&&(d.preventDefault(),a.current?.())};return o.addEventListener("keydown",c),()=>{o.removeEventListener("keydown",c)}}},[]),(0,fI.jsx)("textarea",{className:"ttd-dialog-input",onChange:n,value:e,placeholder:t,autoFocus:!0,ref:r})},AL=({error:e})=>(0,kr.jsxs)("div",{"data-testid":"ttd-dialog-output-error",className:"ttd-dialog-output-error",children:["Error! ",(0,kr.jsx)("p",{children:e})]}),vI=({error:e,canvasRef:t,loaded:n})=>(0,kr.jsxs)("div",{className:"ttd-dialog-output-wrapper",children:[e&&(0,kr.jsx)(AL,{error:e.message}),n?(0,kr.jsx)("div",{ref:t,style:{opacity:e?"0.15":1},className:"ttd-dialog-output-canvas-container"}):(0,kr.jsx)(Ui,{size:"2rem"})]}),bI=()=>(0,Il.jsxs)("div",{className:"ttd-dialog-submit-shortcut",children:[(0,Il.jsx)("div",{className:"ttd-dialog-submit-shortcut__key",children:F("CtrlOrCmd")}),(0,Il.jsx)("div",{className:"ttd-dialog-submit-shortcut__key",children:F("Enter")})]}),NL=`flowchart TD
48
+ A[Christmas] -->|Get money| B(Go shopping)
49
+ B --> C{Let me think}
50
+ C -->|One| D[Laptop]
51
+ C -->|Two| E[iPhone]
52
+ C -->|Three| F[Car]`,Zx=eo(vg,300),PL=({mermaidToExcalidrawLib:e})=>{let[t,n]=(0,Xn.useState)(()=>va.get(Pa.MERMAID_TO_EXCALIDRAW)||NL),i=(0,Xn.useDeferredValue)(t.trim()),[r,a]=(0,Xn.useState)(null),o=(0,Xn.useRef)(null),c=(0,Xn.useRef)({elements:[],files:null}),d=xi();(0,Xn.useEffect)(()=>{uI({canvasRef:o,data:c,mermaidToExcalidrawLib:e,setError:a,mermaidDefinition:i}).catch(s=>{sm()&&console.error("Failed to parse mermaid definition",s)}),Zx(i)},[i,e]),(0,Xn.useEffect)(()=>()=>{Zx.flush()},[]);let h=()=>{mI({app:d,data:c,text:t,shouldSaveMermaidDataToStorage:!0})};return(0,Mt.jsxs)(Mt.Fragment,{children:[(0,Mt.jsx)("div",{className:"ttd-dialog-desc",children:(0,Mt.jsx)(bi,{i18nKey:"mermaid.description",flowchartLink:s=>(0,Mt.jsx)("a",{href:"https://mermaid.js.org/syntax/flowchart.html",children:s}),sequenceLink:s=>(0,Mt.jsx)("a",{href:"https://mermaid.js.org/syntax/sequenceDiagram.html",children:s}),classLink:s=>(0,Mt.jsx)("a",{href:"https://mermaid.js.org/syntax/classDiagram.html",children:s})})}),(0,Mt.jsxs)(pI,{children:[(0,Mt.jsx)(Yd,{label:y("mermaid.syntax"),children:(0,Mt.jsx)(gI,{input:t,placeholder:"Write Mermaid diagram defintion here...",onChange:s=>n(s.target.value),onKeyboardSubmit:()=>{h()}})}),(0,Mt.jsx)(Yd,{label:y("mermaid.preview"),panelAction:{action:()=>{h()},label:y("mermaid.button"),icon:uo},renderSubmitShortcut:()=>(0,Mt.jsx)(bI,{}),children:(0,Mt.jsx)(vI,{canvasRef:o,loaded:e.loaded,error:r})})]})]})},_L=PL,EI=e=>{let t=nt(),n=(0,Uf.useRef)(null),i=(0,Uf.useRef)(0);return(0,yI.jsx)(xd,{ref:n,className:"ttd-dialog-tabs-root",value:e.tab,onValueChange:r=>{if(!r)return;let a=n.current?.closest(".Modal__content");if(a){let o=a.offsetHeight||0;o>i.current&&(i.current=o,a.style.minHeight=`min(${i.current}px, 100%)`)}e.dialog==="ttd"&&A1(["text-to-diagram","mermaid"],r)&&t({openDialog:{name:e.dialog,tab:r}})},children:e.children})};EI.displayName="TTDDialogTabs";var OL=EI,xI=({children:e,...t})=>(0,wI.jsx)(Sd,{className:"ttd-dialog-triggers",...t,children:e});xI.displayName="TTDDialogTabTriggers";var Wf=({children:e,tab:t,onSelect:n,...i})=>(0,Hf.jsx)(Cd,{value:t,asChild:!0,onSelect:n,children:(0,Hf.jsx)("button",{type:"button",className:"ttd-dialog-tab-trigger",...i,children:e})});Wf.displayName="TTDDialogTabTrigger";var Vf=({tab:e,children:t,...n})=>(0,SI.jsx)(Id,{...n,value:e,children:t});Vf.displayName="TTDDialogTab";var hf=3,vs=1e3,FL=Ze(null),$L=Ze(null),BL=e=>{let t=yt();return t.openDialog?.name!=="ttd"?null:(0,Ne.jsx)(zL,{...e,tab:t.openDialog.tab})},zL=Rl("TTDDialogBase",({tab:e,...t})=>{let n=xi(),i=nt(),r=(0,Vn.useRef)(null),[a,o]=je($L),[c,d]=(0,Vn.useState)(a?.prompt??""),h=c.trim(),s=S=>{d(S.target.value),o(C=>({generatedResponse:C?.generatedResponse??null,prompt:S.target.value}))},[l,m]=(0,Vn.useState)(!1),[u,p]=je(FL),f=async()=>{if(h.length>vs||h.length<hf||l||u?.rateLimitRemaining===0||"__fallback"in t){h.length<hf&&x(new Error(`Prompt is too short (min ${hf} characters)`)),h.length>vs&&x(new Error(`Prompt is too long (max ${vs} characters)`));return}try{m(!0),we("ai","generate","ttd");let{generatedResponse:S,error:C,rateLimit:T,rateLimitRemaining:L}=await t.onTextSubmit(h);if(typeof S=="string"&&o(M=>({generatedResponse:S,prompt:M?.prompt??null})),qu(T)&&qu(L)&&p({rateLimit:T,rateLimitRemaining:L}),C){x(C);return}if(!S){x(new Error("Generation failed"));return}try{await uI({canvasRef:r,data:b,mermaidToExcalidrawLib:v,setError:x,mermaidDefinition:S}),we("ai","mermaid parse success","ttd")}catch(M){console.info(`%cTTD mermaid render errror: ${M.message}`,"color: red"),console.info(`>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
53
+ TTD mermaid definition render errror: ${M.message}`,"color: yellow"),we("ai","mermaid parse failed","ttd"),x(new Error("Generated an invalid diagram :(. You may also try a different prompt."))}}catch(S){let C=S.message;(!C||C==="Failed to fetch")&&(C="Request failed"),x(new Error(C))}finally{m(!1)}},g=(0,Vn.useRef)(f);g.current=f;let[v,E]=(0,Vn.useState)({loaded:!1,api:import("./chunk-B6R5LTP2.js")});(0,Vn.useEffect)(()=>{(async()=>(await v.api,E(S=>({...S,loaded:!0}))))()},[v.api]);let b=(0,Vn.useRef)({elements:[],files:null}),[w,x]=(0,Vn.useState)(null);return(0,Ne.jsx)(Qn,{className:"ttd-dialog",onCloseRequest:()=>{n.setOpenDialog(null)},size:1200,title:!1,...t,autofocus:!1,children:(0,Ne.jsxs)(OL,{dialog:"ttd",tab:e,children:["__fallback"in t&&t.__fallback?(0,Ne.jsx)("p",{className:"dialog-mermaid-title",children:y("mermaid.title")}):(0,Ne.jsxs)(xI,{children:[(0,Ne.jsx)(Wf,{tab:"text-to-diagram",children:(0,Ne.jsxs)("div",{style:{display:"flex",alignItems:"center"},children:[y("labels.textToDiagram"),(0,Ne.jsx)("div",{style:{display:"flex",alignItems:"center",justifyContent:"center",padding:"1px 6px",marginLeft:"10px",fontSize:10,borderRadius:"12px",background:"var(--color-promo)",color:"var(--color-surface-lowest)"},children:"AI Beta"})]})}),(0,Ne.jsx)(Wf,{tab:"mermaid",children:"Mermaid"})]}),(0,Ne.jsx)(Vf,{className:"ttd-dialog-content",tab:"mermaid",children:(0,Ne.jsx)(_L,{mermaidToExcalidrawLib:v})}),!("__fallback"in t)&&(0,Ne.jsxs)(Vf,{className:"ttd-dialog-content",tab:"text-to-diagram",children:[(0,Ne.jsx)("div",{className:"ttd-dialog-desc",children:"Currently we use Mermaid as a middle step, so you'll get best results if you describe a diagram, workflow, flow chart, and similar."}),(0,Ne.jsxs)(pI,{children:[(0,Ne.jsx)(Yd,{label:y("labels.prompt"),panelAction:{action:f,label:"Generate",icon:uo},onTextSubmitInProgess:l,panelActionDisabled:h.length>vs||u?.rateLimitRemaining===0,renderTopRight:()=>u?(0,Ne.jsxs)("div",{className:"ttd-dialog-rate-limit",style:{fontSize:12,marginLeft:"auto",color:u.rateLimitRemaining===0?"var(--color-danger)":void 0},children:[u.rateLimitRemaining," requests left today"]}):null,renderSubmitShortcut:()=>(0,Ne.jsx)(bI,{}),renderBottomRight:()=>{if(typeof a?.generatedResponse=="string")return(0,Ne.jsxs)("div",{className:"excalidraw-link",style:{marginLeft:"auto",fontSize:14},onClick:()=>{typeof a?.generatedResponse=="string"&&(vg(a.generatedResponse),i({openDialog:{name:"ttd",tab:"mermaid"}}))},children:["View as Mermaid",(0,Ne.jsx)(su,{icon:uo})]});let S=h.length/vs;return S>.8?(0,Ne.jsxs)("div",{style:{marginLeft:"auto",fontSize:12,fontFamily:"monospace",color:S>1?"var(--color-danger)":void 0},children:["Length: ",h.length,"/",vs]}):null},children:(0,Ne.jsx)(gI,{onChange:s,input:c,placeholder:"Describe what you want to see...",onKeyboardSubmit:()=>{g.current()}})}),(0,Ne.jsx)(Yd,{label:"Preview",panelAction:{action:()=>{console.info("Panel action clicked"),mI({app:n,data:b})},label:"Insert",icon:uo},children:(0,Ne.jsx)(vI,{canvasRef:r,error:w,loaded:v.loaded})})]})]})]})})}),jL=.01,Hi=(e,t)=>!(t==="height"&&te(e)||t==="width"&&te(e)||t==="angle"&&ge(e)),Lt=(e,t)=>{let n=e+t/2;return n-n%t},Gd=(e,t,n)=>Object.keys(e).map(i=>({original:(n??t).get(i),latest:t.get(i)})).filter(i=>i.original!==void 0&&i.latest!==void 0),Tl=(e,t,n,i,r,a,o,c=!0)=>{let d=i.get(n.id);if(!d)return;let[h,s]=[n.x+n.width/2,n.y+n.height/2],[l,m]=un(G(n.x,n.y),G(h,s),n.angle),u=e-l,p=t-m,[f,g]=un(G(e,t),G(h+u,s+p),-n.angle);W(d,{x:f,y:g},c),Yf(d,i,r,a);let v=Le(n,o);if(v){let E=i.get(v.id);E&&W(E,{x:v.x+u,y:v.y+p},c)}},bg=(e,t)=>{let n=tr(t).map(i=>Ke(e,i).reduce((r,a)=>(r[a.id]=!0,r),{}));return e.filter(i=>!Ya(i)).forEach(i=>{n.push({[i.id]:!0})}),n},Yf=(e,t,n,i,r)=>{De(e)?fo([e],t,n,i,!0,[],r?.zoom):er(e,t,r)},UL=({label:e,icon:t,dragInputCallback:n,value:i,elements:r,editable:a=!0,shouldKeepAspectRatio:o,property:c,scene:d,appState:h,sensitivity:s=1})=>{let l=xi(),m=(0,yi.useRef)(null),u=(0,yi.useRef)(null),[p,f]=(0,yi.useState)(i.toString()),g=(0,yi.useRef)(null);g.current||(g.current={originalAppState:ii(h),originalElements:r,lastUpdatedValue:p,updatePending:!1}),(0,yi.useEffect)(()=>{let b=i.toString();f(b),g.current.lastUpdatedValue=b},[i]);let v=(b,w,x)=>{if(!g.current.updatePending)return!1;g.current.updatePending=!1;let S=Number(b);if(isNaN(S)){f(i.toString());return}let C=Number(S.toFixed(2)),T=Number(i);(isNaN(T)||Math.abs(C-T)>=jL)&&(g.current.lastUpdatedValue=b,n({accumulatedChange:0,instantChange:0,originalElements:w,originalElementsMap:l.scene.getNonDeletedElementsMap(),shouldKeepAspectRatio:o,shouldChangeByStepSize:!1,scene:d,nextValue:C,property:c,originalAppState:x,setInputValue:L=>f(String(L))}),l.syncActionResult({captureUpdate:N.IMMEDIATELY}))},E=(0,yi.useRef)({});return E.current.handleInputValue=v,(0,yi.useEffect)(()=>{let b=m.current,w=E.current;return()=>{let x=b?.value;x&&w.handleInputValue?.(x,g.current.originalElements,g.current.originalAppState),window.removeEventListener("pointermove",w.onPointerMove,!1),window.removeEventListener("pointerup",w.onPointerUp,!1)}},[a]),a?(0,Ls.jsxs)("div",{className:$("drag-input-container",!a&&"disabled"),"data-testid":e,children:[(0,Ls.jsx)("div",{className:"drag-input-label",ref:u,onPointerDown:b=>{if(m.current&&a){document.body.classList.add("excalidraw-cursor-resize");let w=Number(m.current.value);isNaN(w)&&(w=0);let x=null,S=l.scene.getNonDeletedElements().reduce((_,H)=>(_.set(H.id,wo(H)),_),new Map),C=r.map(_=>S.get(_.id)),T=ii(h),L=0,M=0,R=_=>{if(x&&S!==null&&C!==null){let H=_.clientX-x.x;H!==0&&(M+=H,Math.abs(M)>=s&&(M=Math.sign(M)*Math.floor(Math.abs(M)/s),L+=M,n({accumulatedChange:L,instantChange:M,originalElements:C,originalElementsMap:S,shouldKeepAspectRatio:o,shouldChangeByStepSize:_.shiftKey,property:c,scene:d,originalAppState:T,setInputValue:P=>f(String(P))}),M=0))}x={x:_.clientX,y:_.clientY}},z=()=>{window.removeEventListener("pointermove",R,!1),l.syncActionResult({captureUpdate:N.IMMEDIATELY}),x=null,L=0,M=0,C=null,S=null,document.body.classList.remove("excalidraw-cursor-resize"),window.removeEventListener("pointerup",z,!1)};E.current.onPointerMove=R,E.current.onPointerUp=z,window.addEventListener("pointermove",R,!1),window.addEventListener("pointerup",z,!1)}},onPointerEnter:()=>{u.current&&(u.current.style.cursor="ew-resize")},children:t?(0,Ls.jsx)(su,{icon:t}):e}),(0,Ls.jsx)("input",{className:"drag-input",autoComplete:"off",spellCheck:"false",onKeyDown:b=>{if(a){let w=b.target;w instanceof HTMLInputElement&&b.key===k.ENTER&&(v(w.value,r,h),l.focusContainer())}},ref:m,value:p,onChange:b=>{g.current.updatePending=!0,f(b.target.value)},onFocus:b=>{b.target.select(),g.current.originalElements=r,g.current.originalAppState=ii(h)},onBlur:b=>{p?a&&v(b.target.value,g.current.originalElements,g.current.originalAppState):f(i.toString())},disabled:!a})]}):null},Vi=UL,Xx=10,HL=e=>e.type==="image",WL=({accumulatedChange:e,originalElements:t,originalElementsMap:n,shouldKeepAspectRatio:i,shouldChangeByStepSize:r,nextValue:a,property:o,originalAppState:c,instantChange:d,scene:h})=>{let s=h.getNonDeletedElementsMap(),l=t[0],m=s.get(l.id);if(l&&m){let u=i||HL(l),p=l.width/l.height;if(c.croppingElementId===l.id){let b=s.get(l.id);if(!b||!_e(b)||!b.crop)return;let w=b.crop,x={...w},S=b.scale[0]===-1,C=b.scale[1]===-1,{width:T,height:L}=mo(b),M=w.naturalWidth/T,R=w.naturalHeight/L,z=S?w.width+w.x:w.naturalWidth-w.x,_=C?w.height+w.y:w.naturalHeight-w.y,H=Km*M,P=Km*R;if(a!==void 0){if(o==="width"){let ie=a*M,re=Ft(ie,H,z);x={...x,width:re,x:S?w.x+w.width-re:w.x}}else if(o==="height"){let ie=a*R,re=Ft(ie,P,_);x={...x,height:re,y:C?w.y+w.height-re:w.y}}W(b,{crop:x,width:x.width/(w.naturalWidth/T),height:x.height/(w.naturalHeight/L)});return}let B=o==="width"?d:0,q=o==="height"?d:0,V=Ft(w.width+B,H,z),Y=Ft(w.height+q,H,_);x={...w,x:S?w.x+w.width-V:w.x,y:C?w.y+w.height-Y:w.y,width:V,height:Y},W(b,{crop:x,width:x.width/(w.naturalWidth/T),height:x.height/(w.naturalHeight/L)});return}if(a!==void 0){let b=Math.max(o==="width"?a:u?a*p:l.width,tn),w=Math.max(o==="height"?a:u?a/p:l.height,tn);Lo(b,w,m,l,s,n,o==="width"?"e":"s",{shouldMaintainAspectRatio:u});return}let f=o==="width"?e:0,g=o==="height"?e:0,v=Math.max(0,l.width+f);o==="width"&&(r?v=Lt(v,Xx):v=Math.round(v));let E=Math.max(0,l.height+g);o==="height"&&(r?E=Lt(E,Xx):E=Math.round(E)),u&&(o==="width"?E=Math.round(v/p*100)/100:v=Math.round(E*p*100)/100),E=Math.max(tn,E),v=Math.max(tn,v),Lo(v,E,m,l,s,n,o==="width"?"e":"s",{shouldMaintainAspectRatio:u})}},VL=({property:e,element:t,scene:n,appState:i})=>{let r=Mi(e==="width"?t.width:t.height,2);if(i.croppingElementId&&i.croppingElementId===t.id&&_e(t)&&t.crop){let{width:a,height:o}=mo(t);if(e==="width"){let c=a/t.crop.naturalWidth;r=Mi(t.crop.width*c,2)}if(e==="height"){let c=o/t.crop.naturalHeight;r=Mi(t.crop.height*c,2)}}return(0,II.jsx)(Vi,{label:e==="width"?"W":"H",elements:[t],dragInputCallback:WL,value:r,editable:Hi(t,e),scene:n,appState:i,property:e})},qx=VL,YL=15,GL=({accumulatedChange:e,originalElements:t,shouldChangeByStepSize:n,nextValue:i,scene:r})=>{let a=r.getNonDeletedElementsMap(),o=r.getNonDeletedElements(),c=t[0];if(c&&!le(c)){let d=a.get(c.id);if(!d)return;if(i!==void 0){let p=qs(i);W(d,{angle:p}),Yf(d,a,o,r);let f=Le(d,a);f&&!mt(d)&&W(f,{angle:p});return}let h=Math.round(Qs(c.angle)*100)/100,s=Math.round(e),l=(h+s)%360;n&&(l=Lt(l,YL)),l=l<0?l+360:l;let m=qs(l);W(d,{angle:m}),Yf(d,a,o,r);let u=Le(d,a);u&&!mt(d)&&W(u,{angle:m})}},KL=({element:e,scene:t,appState:n,property:i})=>(0,TI.jsx)(Vi,{label:"A",icon:Pm,value:Math.round(Qs(e.angle)%360*100)/100,elements:[e],dragInputCallback:GL,editable:Hi(e,"angle"),scene:t,appState:n,property:i}),ZL=KL,Qx=4,XL=4,qL=({accumulatedChange:e,originalElements:t,shouldChangeByStepSize:n,nextValue:i,scene:r})=>{let a=r.getNonDeletedElementsMap(),o=t[0];if(o){let c=a.get(o.id);if(!c||!te(c))return;let d;if(i!==void 0)d=Math.max(Math.round(i),Qx);else if(o.type==="text"){let h=Math.round(o.fontSize),s=Math.round(e);d=Math.max(h+s,Qx),n&&(d=Lt(d,XL))}d&&(W(c,{fontSize:d}),$t(c,r.getContainerElement(c),r.getNonDeletedElementsMap()))}},QL=({element:e,scene:t,appState:n,property:i})=>{let r=te(e)?e:ri(e)?Le(e,t.getNonDeletedElementsMap()):null;return r?(0,kI.jsx)(Vi,{label:"F",value:Math.round(r.fontSize*10)/10,elements:[r],dragInputCallback:qL,icon:co,appState:n,scene:t,property:i}):null},JL=QL,bs=10,eR=(e,t,n,i)=>{let r=i.x-e,a=i.y-t,o=i.width*n,c=i.height*n,d=e+r*n,h=t+a*n;return{width:o,height:c,x:d,y:h,...wy(i,o,c,!1),...te(i)?{fontSize:i.fontSize*n}:{}}},tR=(e,t,n,i,r,a,o,c)=>{let d=eR(e,t,i,a);W(r,d,!1);let h=Le(a,c);if(h){let s=h.fontSize*i;er(r,o,{newSize:{width:d.width,height:d.height}});let l=o.get(h.id);l&&te(l)&&(W(l,{fontSize:s},!1),wb(r,o,n==="width"?"e":"s",!0))}},Jx=(e,t,n,i,r,a,o,c,d,h)=>{a==="width"?t=Math.round(e/i*100)/100:e=Math.round(t*i*100)/100;let s=t/n;for(let l=0;l<c.length;l++){let m=c[l],u=o[l];tR(r[0],r[1],a,s,u,m,d,h)}},nR=({accumulatedChange:e,originalElements:t,originalElementsMap:n,originalAppState:i,shouldChangeByStepSize:r,nextValue:a,scene:o,property:c})=>{let d=o.getNonDeletedElementsMap(),h=bg(t,i);if(a!==void 0){for(let m of h){let u=Gd(m,d,n);if(u.length>1){let p=u.map(L=>L.latest),f=u.map(L=>L.original),[g,v,E,b]=Ve(f),w=E-g,x=b-v,S=w/x,C=Math.max(tn,c==="width"?Math.max(0,a):w),T=Math.max(tn,c==="height"?Math.max(0,a):x);Jx(C,T,x,S,G(g,v),c,p,f,d,n)}else{let[p]=u,f=p?.latest,g=p?.original;if(f&&g&&Hi(f,c)){let v=c==="width"?Math.max(0,a):f.width;c==="width"&&(r?v=Lt(v,bs):v=Math.round(v));let E=c==="height"?Math.max(0,a):f.height;c==="height"&&(r?E=Lt(E,bs):E=Math.round(E)),v=Math.max(tn,v),E=Math.max(tn,E),Lo(v,E,f,g,d,n,c==="width"?"e":"s",{shouldInformMutation:!1})}}}o.triggerUpdate();return}let s=c==="width"?e:0,l=c==="height"?e:0;for(let m of h){let u=Gd(m,d,n);if(u.length>1){let p=u.map(L=>L.latest),f=u.map(L=>L.original),[g,v,E,b]=Ve(f),w=E-g,x=b-v,S=w/x,C=Math.max(0,w+s);c==="width"&&(r?C=Lt(C,bs):C=Math.round(C));let T=Math.max(0,x+l);c==="height"&&(r?T=Lt(T,bs):T=Math.round(T)),C=Math.max(tn,C),T=Math.max(tn,T),Jx(C,T,x,S,G(g,v),c,p,f,d,n)}else{let[p]=u,f=p?.latest,g=p?.original;if(f&&g&&Hi(f,c)){let v=Math.max(0,g.width+s);c==="width"&&(r?v=Lt(v,bs):v=Math.round(v));let E=Math.max(0,g.height+l);c==="height"&&(r?E=Lt(E,bs):E=Math.round(E)),v=Math.max(tn,v),E=Math.max(tn,E),Lo(v,E,f,g,d,n,c==="width"?"e":"s",{shouldInformMutation:!1})}}}o.triggerUpdate()},iR=({property:e,elements:t,elementsMap:n,atomicUnits:i,scene:r,appState:a})=>{let o=(0,MI.useMemo)(()=>i.map(h=>{let s=Gd(h,n);if(s.length>1){let[m,u,p,f]=Ve(s.map(g=>g.latest));return Math.round((e==="width"?p-m:f-u)*100)/100}let[l]=s;return Math.round((e==="width"?l.latest.width:l.latest.height)*100)/100}),[n,i,e]),c=new Set(o).size===1?Math.round(o[0]*100)/100:"Mixed",d=o.length>0;return(0,DI.jsx)(Vi,{label:e==="width"?"W":"H",elements:t,dragInputCallback:nR,value:c,editable:d,appState:a,property:e,scene:r})},eS=iR,rR=15,aR=({accumulatedChange:e,originalElements:t,shouldChangeByStepSize:n,nextValue:i,property:r,scene:a})=>{let o=a.getNonDeletedElementsMap(),c=t.map(h=>o.get(h.id)).filter(h=>h&&!Ya(h)&&Hi(h,r)),d=t.filter(h=>!Ya(h)&&Hi(h,r));if(i!==void 0){let h=qs(i);for(let s of c){if(!s)continue;W(s,{angle:h},!1);let l=Le(s,o);l&&!mt(s)&&W(l,{angle:h},!1)}a.triggerUpdate();return}for(let h=0;h<c.length;h++){let s=c[h];if(!s)continue;let l=d[h],m=Math.round(Qs(l.angle)*100)/100,u=Math.round(e),p=(m+u)%360;n&&(p=Lt(p,rR)),p=p<0?p+360:p;let f=qs(p);W(s,{angle:f},!1);let g=Le(s,o);g&&!mt(s)&&W(g,{angle:f},!1)}a.triggerUpdate()},sR=({elements:e,scene:t,appState:n,property:i})=>{let r=e.filter(d=>!Ya(d)&&Hi(d,"angle")),a=r.map(d=>Math.round(Qs(d.angle)%360*100)/100),o=new Set(a).size===1?a[0]:"Mixed",c=r.some(d=>Hi(d,"angle"));return(0,LI.jsx)(Vi,{label:"A",icon:Pm,value:o,elements:e,dragInputCallback:aR,editable:c,appState:n,scene:t,property:i})},oR=sR,tS=4,lR=4,cR=(e,t)=>e.reduce((n,i)=>{if(!i||Ya(i))return n;if(te(i))return n.push(i),n;if(ri(i)){let r=Le(i,t);if(r)return n.push(r),n}return n},[]),dR=({accumulatedChange:e,originalElements:t,shouldChangeByStepSize:n,nextValue:i,scene:r})=>{let a=r.getNonDeletedElementsMap(),o=t.map(d=>a.get(d.id)),c;if(i){c=Math.max(Math.round(i),tS);for(let d of o)W(d,{fontSize:c},!1),$t(d,r.getContainerElement(d),a,!1);r.triggerUpdate()}else{let d=t;for(let h=0;h<o.length;h++){let s=o[h],l=d[h],m=Math.round(l.fontSize),u=Math.round(e),p=Math.max(m+u,tS);n&&(p=Lt(p,lR)),W(s,{fontSize:p},!1),$t(s,r.getContainerElement(s),a,!1)}r.triggerUpdate()}},uR=({elements:e,scene:t,appState:n,property:i,elementsMap:r})=>{let a=cR(e,r);if(!a.length)return null;let o=a.map(h=>Math.round(h.fontSize*10)/10),c=new Set(o).size===1?o[0]:"Mixed",d=o.length>0;return(0,RI.jsx)(Vi,{label:"F",icon:co,elements:a,dragInputCallback:dR,value:c,editable:d,scene:t,property:i,appState:n})},mR=uR,nS=10,hR=({accumulatedChange:e,instantChange:t,originalElements:n,originalElementsMap:i,shouldChangeByStepSize:r,nextValue:a,property:o,scene:c,originalAppState:d})=>{let h=c.getNonDeletedElementsMap(),s=c.getNonDeletedElements(),l=n[0],[m,u]=[l.x+l.width/2,l.y+l.height/2],[p,f]=un(G(l.x,l.y),G(m,u),l.angle);if(d.croppingElementId===l.id){let w=h.get(l.id);if(!w||!_e(w)||!w.crop)return;let x=w.crop,S=x,C=w.scale[0]===-1,T=w.scale[1]===-1,{width:L,height:M}=mo(w);if(a!==void 0){if(o==="x"){let _=a*(x.naturalWidth/L);C?S={...x,x:Ft(x.naturalWidth-_-x.width,0,x.naturalWidth-x.width)}:S={...x,x:Ft(a*(x.naturalWidth/L),0,x.naturalWidth-x.width)}}o==="y"&&(S={...x,y:Ft(a*(x.naturalHeight/M),0,x.naturalHeight-x.height)}),W(w,{crop:S});return}let R=(o==="x"?t:0)*(C?-1:1),z=(o==="y"?t:0)*(T?-1:1);S={...x,x:Ft(x.x+R,0,x.naturalWidth-x.width),y:Ft(x.y+z,0,x.naturalHeight-x.height)},W(w,{crop:S});return}if(a!==void 0){Tl(o==="x"?a:p,o==="y"?a:f,l,h,s,c,i);return}let g=o==="x"?e:0,v=o==="y"?e:0,E=o==="x"?Math.round(r?Lt(l.x+g,nS):p+g):p,b=o==="y"?Math.round(r?Lt(l.y+v,nS):f+v):f;Tl(E,b,l,h,s,c,i)},pR=({property:e,element:t,elementsMap:n,scene:i,appState:r})=>{let[a,o]=un(G(t.x,t.y),G(t.x+t.width/2,t.y+t.height/2),t.angle),c=Mi(e==="x"?a:o,2);if(r.croppingElementId===t.id&&_e(t)&&t.crop){let d=z0(t);d&&(c=Mi(e==="x"?d.x:d.y,2))}return(0,AI.jsx)(Vi,{label:e==="x"?"X":"Y",elements:[t],dragInputCallback:hR,scene:i,value:c,property:e,appState:r})},iS=pR,fR=10,gR=(e,t,n,i,r,a,o,c)=>{for(let d=0;d<i.length;d++){let h=r[d],[s,l]=[h.x+h.width/2,h.y+h.height/2],[m,u]=un(G(h.x,h.y),G(s,l),h.angle),p=e==="x"?Math.round(m+t):m,f=e==="y"?Math.round(u+n):u;Tl(p,f,h,a,i,c,o,!1)}},vR=(e,t,n,i,r,a,o)=>{let[c,d,,]=Ve(n),h=e-c,s=t-d;for(let l=0;l<n.length;l++){let m=n[l],u=i.get(m.id);if(u&&(!te(u)||!u.containerId)){let[p,f]=[u.x+u.width/2,u.y+u.height/2],[g,v]=un(G(u.x,u.y),G(p,f),u.angle);Tl(g+h,v+s,m,i,r,o,a,!1)}}},bR=({accumulatedChange:e,originalElements:t,originalElementsMap:n,shouldChangeByStepSize:i,nextValue:r,property:a,scene:o,originalAppState:c})=>{let d=o.getNonDeletedElementsMap(),h=o.getNonDeletedElements();if(r!==void 0){for(let l of bg(t,c)){let m=Gd(l,d,n);if(m.length>1){let[u,p,,]=Ve(m.map(f=>f.latest));vR(a==="x"?r:u,a==="y"?r:p,m.map(f=>f.original),d,h,n,o)}else{let u=m[0]?.original,p=m[0]?.latest;if(u&&p&&Hi(p,a)){let[f,g]=[u.x+u.width/2,u.y+u.height/2],[v,E]=un(G(u.x,u.y),G(f,g),u.angle);Tl(a==="x"?r:v,a==="y"?r:E,u,d,h,o,n,!1)}}}o.triggerUpdate();return}let s=i?Lt(e,fR):e;gR(a,a==="x"?s:0,a==="y"?s:0,t,t,d,n,o),o.triggerUpdate()},yR=({property:e,elements:t,elementsMap:n,atomicUnits:i,scene:r,appState:a})=>{let o=(0,NI.useMemo)(()=>i.map(d=>{let h=Object.keys(d).map(f=>n.get(f)).filter(f=>f!==void 0);if(h.length>1){let[f,g]=Ve(h);return Math.round((e==="x"?f:g)*100)/100}let[s]=h,[l,m]=[s.x+s.width/2,s.y+s.height/2],[u,p]=un(G(s.x,s.y),G(l,m),s.angle);return Math.round((e==="x"?u:p)*100)/100}),[i,n,e]),c=new Set(o).size===1?o[0]:"Mixed";return(0,PI.jsx)(Vi,{label:e==="x"?"X":"Y",elements:t,dragInputCallback:bR,value:c,property:e,scene:r,appState:a})},rS=yR,aS=5,ER=({property:e,scene:t,appState:n,setAppState:i})=>(0,_I.jsx)(Vi,{label:"Grid step",sensitivity:8,elements:[],dragInputCallback:({nextValue:r,instantChange:a,shouldChangeByStepSize:o,setInputValue:c})=>{i(d=>{let h;return r?h=r:a&&(h=o?Lt(d.gridStep+aS*Math.sign(a),aS):d.gridStep+a),h?(h=ib(h),c(h),{gridStep:h}):(c(d.gridStep),null)})},scene:t,value:n.gridStep,property:e,appState:n}),wR=ER,xR=50,yg=e=>{let t=Pl(),n=e.app.scene.getSceneNonce()||1,i=e.app.scene.getSelectedElements({selectedElementIds:t.selectedElementIds,includeBoundTextElement:!1}),r=bo(e.app);return(0,X.jsx)(SR,{...e,appState:t,sceneNonce:n,selectedElements:i,gridModeEnabled:r})},ke=({children:e,columns:t=1,heading:n,style:i,...r})=>(0,X.jsx)("div",{className:$("exc-stats__row",{"exc-stats__row--heading":n}),style:{gridTemplateColumns:`repeat(${t}, 1fr)`,...i},...r,children:e});ke.displayName="StatsRow";var Kd=({children:e,order:t,style:n,...i})=>(0,X.jsx)("div",{className:"exc-stats__rows",style:{order:t,...n},...i,children:e});Kd.displayName="StatsRows";yg.StatsRow=ke;yg.StatsRows=Kd;var SR=(0,Zn.memo)(({app:e,onClose:t,renderCustomStats:n,selectedElements:i,appState:r,sceneNonce:a,gridModeEnabled:o})=>{let c=e.scene,d=c.getNonDeletedElements(),h=c.getNonDeletedElementsMap(),s=nt(),l=i.length===1?i[0]:null,m=i.length>1?i:null,u=r.croppingElementId&&_e(l),p=u?mo(l):null,[f,g]=(0,Zn.useState)({width:0,height:0}),v=(0,Zn.useMemo)(()=>(0,CI.default)(w=>{let x=Ve(w);g({width:Math.round(x[2])-Math.round(x[0]),height:Math.round(x[3])-Math.round(x[1])})},xR),[]);(0,Zn.useEffect)(()=>{v(d)},[a,d,v]),(0,Zn.useEffect)(()=>()=>v.cancel(),[v]);let E=(0,Zn.useMemo)(()=>bg(i,r),[i,r]),b=(0,Zn.useMemo)(()=>$h(i),[i]);return(0,X.jsx)("div",{className:"exc-stats",children:(0,X.jsxs)(Kn,{padding:3,children:[(0,X.jsxs)("div",{className:"title",children:[(0,X.jsx)("h2",{children:y("stats.title")}),(0,X.jsx)("div",{className:"close",onClick:t,children:Yr})]}),(0,X.jsxs)(Cf,{label:(0,X.jsx)("h3",{children:y("stats.generalStats")}),open:!!(r.stats.panels&Zs.generalStats),openTrigger:()=>s(w=>({stats:{open:!0,panels:w.stats.panels^Zs.generalStats}})),children:[(0,X.jsxs)(Kd,{children:[(0,X.jsx)(ke,{heading:!0,children:y("stats.scene")}),(0,X.jsxs)(ke,{columns:2,children:[(0,X.jsx)("div",{children:y("stats.shapes")}),(0,X.jsx)("div",{children:d.length})]}),(0,X.jsxs)(ke,{columns:2,children:[(0,X.jsx)("div",{children:y("stats.width")}),(0,X.jsx)("div",{children:f.width})]}),(0,X.jsxs)(ke,{columns:2,children:[(0,X.jsx)("div",{children:y("stats.height")}),(0,X.jsx)("div",{children:f.height})]}),o&&(0,X.jsxs)(X.Fragment,{children:[(0,X.jsx)(ke,{heading:!0,children:"Canvas"}),(0,X.jsx)(ke,{children:(0,X.jsx)(wR,{property:"gridStep",scene:c,appState:r,setAppState:s})})]})]}),n?.(d,r)]}),!b&&i.length>0&&(0,X.jsx)("div",{id:"elementStats",style:{marginTop:12},children:(0,X.jsx)(Cf,{label:(0,X.jsx)("h3",{children:y("stats.elementProperties")}),open:!!(r.stats.panels&Zs.elementProperties),openTrigger:()=>s(w=>({stats:{open:!0,panels:w.stats.panels^Zs.elementProperties}})),children:(0,X.jsxs)(Kd,{children:[l&&(0,X.jsxs)(X.Fragment,{children:[u&&(0,X.jsx)(ke,{heading:!0,children:y("labels.unCroppedDimension")}),r.croppingElementId&&_e(l)&&p&&(0,X.jsxs)(ke,{columns:2,children:[(0,X.jsx)("div",{children:y("stats.width")}),(0,X.jsx)("div",{children:Mi(p.width,2)})]}),r.croppingElementId&&_e(l)&&p&&(0,X.jsxs)(ke,{columns:2,children:[(0,X.jsx)("div",{children:y("stats.height")}),(0,X.jsx)("div",{children:Mi(p.height,2)})]}),(0,X.jsx)(ke,{heading:!0,"data-testid":"stats-element-type",children:r.croppingElementId?y("labels.imageCropping"):y(`element.${l.type}`)}),(0,X.jsx)(ke,{children:(0,X.jsx)(iS,{element:l,property:"x",elementsMap:h,scene:c,appState:r})}),(0,X.jsx)(ke,{children:(0,X.jsx)(iS,{element:l,property:"y",elementsMap:h,scene:c,appState:r})}),(0,X.jsx)(ke,{children:(0,X.jsx)(qx,{property:"width",element:l,scene:c,appState:r})}),(0,X.jsx)(ke,{children:(0,X.jsx)(qx,{property:"height",element:l,scene:c,appState:r})}),!le(l)&&(0,X.jsx)(ke,{children:(0,X.jsx)(ZL,{property:"angle",element:l,scene:c,appState:r})}),(0,X.jsx)(ke,{children:(0,X.jsx)(JL,{property:"fontSize",element:l,scene:c,appState:r})})]}),m&&(0,X.jsxs)(X.Fragment,{children:[ub(m)&&(0,X.jsx)(ke,{heading:!0,children:y("element.group")}),(0,X.jsxs)(ke,{columns:2,style:{margin:"0.3125rem 0"},children:[(0,X.jsx)("div",{children:y("stats.shapes")}),(0,X.jsx)("div",{children:i.length})]}),(0,X.jsx)(ke,{children:(0,X.jsx)(rS,{property:"x",elements:m,elementsMap:h,atomicUnits:E,scene:c,appState:r})}),(0,X.jsx)(ke,{children:(0,X.jsx)(rS,{property:"y",elements:m,elementsMap:h,atomicUnits:E,scene:c,appState:r})}),(0,X.jsx)(ke,{children:(0,X.jsx)(eS,{property:"width",elements:m,elementsMap:h,atomicUnits:E,scene:c,appState:r})}),(0,X.jsx)(ke,{children:(0,X.jsx)(eS,{property:"height",elements:m,elementsMap:h,atomicUnits:E,scene:c,appState:r})}),(0,X.jsx)(ke,{children:(0,X.jsx)(oR,{property:"angle",elements:m,scene:c,appState:r})}),(0,X.jsx)(ke,{children:(0,X.jsx)(mR,{property:"fontSize",elements:m,scene:c,appState:r,elementsMap:h})})]})]})})})]})})},(e,t)=>e.sceneNonce===t.sceneNonce&&e.selectedElements===t.selectedElements&&e.appState.stats.panels===t.appState.stats.panels&&e.gridModeEnabled===t.gridModeEnabled&&e.appState.gridStep===t.appState.gridStep&&e.appState.croppingElementId===t.appState.croppingElementId),CR=({sourceElementId:e,onClose:t,elementsMap:n,appState:i,generateLinkForSelection:r=Ch})=>{let a=n.get(e)?.link??null,[o,c]=(0,Rr.useState)(a),[d,h]=(0,Rr.useState)(!1);(0,Rr.useEffect)(()=>{let l=se(n,i),m=a;if(l.length>0&&r){let u=Ih(l,i);u&&(m=ir(r(u.id,u.type)))}c(m)},[n,i,i.selectedElementIds,a,r]);let s=(0,Rr.useCallback)(()=>{if(o&&o!==n.get(e)?.link){let l=n.get(e);l&&W(l,{link:o})}if(!o&&d&&e){let l=n.get(e);l&&W(l,{link:null})}t?.()},[e,o,n,d,t]);return(0,Rr.useEffect)(()=>{let l=m=>{i.openDialog?.name==="elementLinkSelector"&&m.key===k.ENTER&&s(),i.openDialog?.name==="elementLinkSelector"&&m.key===k.ESCAPE&&t?.()};return window.addEventListener("keydown",l),()=>{window.removeEventListener("keydown",l)}},[i,t,s]),(0,En.jsxs)("div",{className:"ElementLinkDialog",children:[(0,En.jsxs)("div",{className:"ElementLinkDialog__header",children:[(0,En.jsx)("h2",{children:y("elementLink.title")}),(0,En.jsx)("p",{children:y("elementLink.desc")})]}),(0,En.jsxs)("div",{className:"ElementLinkDialog__input",children:[(0,En.jsx)(hg,{value:o??"",onChange:l=>{d||h(!0),c(l)},onKeyDown:l=>{l.key===k.ENTER&&s()},className:"ElementLinkDialog__input-field",selectOnRender:!0}),a&&o&&(0,En.jsx)(ce,{type:"button",title:y("buttons.remove"),"aria-label":y("buttons.remove"),label:y("buttons.remove"),onClick:()=>{c(null),h(!0)},className:"ElementLinkDialog__remove",icon:Qi})]}),(0,En.jsxs)("div",{className:"ElementLinkDialog__actions",children:[(0,En.jsx)(Rs,{label:y("buttons.cancel"),onClick:()=>{t?.()},style:{marginRight:10}}),(0,En.jsx)(Rs,{label:y("buttons.confirm"),onClick:s,actionType:"primary"})]})]})},IR=CR,TR=({UIOptions:e})=>(0,Z.jsxs)(Xt,{__fallback:!0,children:[(0,Z.jsx)(Xt.DefaultItems.LoadScene,{}),(0,Z.jsx)(Xt.DefaultItems.SaveToActiveFile,{}),e.canvasActions.export&&(0,Z.jsx)(Xt.DefaultItems.Export,{}),e.canvasActions.saveAsImage&&(0,Z.jsx)(Xt.DefaultItems.SaveAsImage,{}),(0,Z.jsx)(Xt.DefaultItems.SearchMenu,{}),(0,Z.jsx)(Xt.DefaultItems.Help,{}),(0,Z.jsx)(Xt.DefaultItems.ClearCanvas,{}),(0,Z.jsx)(Xt.Separator,{}),(0,Z.jsx)(Xt.Group,{title:"Excalidraw links",children:(0,Z.jsx)(Xt.DefaultItems.Socials,{})}),(0,Z.jsx)(Xt.Separator,{}),(0,Z.jsx)(Xt.DefaultItems.ToggleTheme,{}),(0,Z.jsx)(Xt.DefaultItems.ChangeCanvasBackground,{})]}),kR=()=>(0,Z.jsxs)(mf,{__fallback:!0,children:[(0,Z.jsx)(mf.Actions.SaveToDisk,{}),(0,Z.jsx)(mf.Actions.ExportToImage,{})]}),MR=({actionManager:e,appState:t,files:n,setAppState:i,elements:r,canvas:a,onLockToggle:o,onHandToolToggle:c,onPenModeToggle:d,showExitZenModeBtn:h,renderTopRightUI:s,renderCustomStats:l,UIOptions:m,onExportImage:u,renderWelcomeScreen:p,children:f,app:g,isCollaborating:v,generateLinkForSelection:E})=>{let b=lt(),w=pD(),x=w.tunnelsJotai.Provider,[S,C]=je(au),T=()=>m.canvasActions.export?(0,Z.jsx)(dL,{elements:r,appState:t,files:n,actionManager:e,exportOpts:m.canvasActions.export,canvas:a,setAppState:i}):null,L=()=>!m.canvasActions.saveAsImage||t.openDialog?.name!=="imageExport"?null:(0,Z.jsx)(BD,{elements:r,appState:t,files:n,actionManager:e,onExportImage:u,onCloseRequest:()=>i({openDialog:null}),name:g.getName()}),M=()=>(0,Z.jsxs)("div",{style:{position:"relative"},children:[(0,Z.jsx)(w.MainMenuTunnel.Out,{}),p&&(0,Z.jsx)(w.WelcomeScreenMenuHintTunnel.Out,{})]}),R=()=>(0,Z.jsx)(wl,{heading:"selectedShapeActions",className:$("selected-shape-actions zen-mode-transition",{"transition-left":t.zenModeEnabled}),children:(0,Z.jsx)(Kn,{className:$r.SHAPE_ACTIONS_MENU,padding:2,style:{maxHeight:`${t.height-166}px`},children:(0,Z.jsx)(QC,{appState:t,elementsMap:g.scene.getNonDeletedElementsMap(),renderAction:e.renderAction,app:g})})}),z=()=>{let B=$c(t,r),q=t.stats.open&&!t.zenModeEnabled&&!t.viewModeEnabled&&t.openDialog?.name!=="elementLinkSelector";return(0,Z.jsx)(g3,{side:"top",children:(0,Z.jsxs)("div",{className:"App-menu App-menu_top",children:[(0,Z.jsxs)(Cn.Col,{gap:6,className:$("App-menu_top__left"),children:[M(),B&&R()]}),!t.viewModeEnabled&&t.openDialog?.name!=="elementLinkSelector"&&(0,Z.jsx)(wl,{heading:"shapes",className:"shapes-section",children:V=>(0,Z.jsxs)("div",{style:{position:"relative"},children:[p&&(0,Z.jsx)(w.WelcomeScreenToolbarHintTunnel.Out,{}),(0,Z.jsx)(Cn.Col,{gap:4,align:"start",children:(0,Z.jsxs)(Cn.Row,{gap:1,className:$("App-toolbar-container",{"zen-mode":t.zenModeEnabled}),children:[(0,Z.jsxs)(Kn,{padding:1,className:$("App-toolbar",{"zen-mode":t.zenModeEnabled}),children:[(0,Z.jsx)(y3,{appState:t,isMobile:b.editor.isMobile,device:b,app:g}),V,(0,Z.jsxs)(Cn.Row,{gap:1,children:[(0,Z.jsx)(w3,{zenModeEnabled:t.zenModeEnabled,checked:t.penMode,onChange:()=>d(null),title:y("toolBar.penMode"),penDetected:t.penDetected}),(0,Z.jsx)(E3,{checked:t.activeTool.locked,onChange:o,title:y("toolBar.lock")}),(0,Z.jsx)("div",{className:"App-toolbar__divider"}),(0,Z.jsx)(S3,{checked:_a(t),onChange:()=>c(),title:y("toolBar.hand"),isMobile:!0}),(0,Z.jsx)(JC,{appState:t,activeTool:t.activeTool,UIOptions:m,app:g})]})]}),v&&(0,Z.jsx)(Kn,{style:{marginLeft:8,alignSelf:"center",height:"fit-content"},children:(0,Z.jsx)(LL,{title:y("toolBar.laser"),checked:t.activeTool.type===en.laser,onChange:()=>g.setActiveTool({type:en.laser}),isMobile:!0})})]})})]})}),(0,Z.jsxs)("div",{className:$("layer-ui__wrapper__top-right zen-mode-transition",{"transition-right":t.zenModeEnabled}),children:[t.collaborators.size>0&&(0,Z.jsx)(I3,{collaborators:t.collaborators,userToFollow:t.userToFollow?.socketId||null}),s?.(b.editor.isMobile,t),!t.viewModeEnabled&&t.openDialog?.name!=="elementLinkSelector"&&(!H||t.openSidebar?.name!==An.name)&&(0,Z.jsx)(w.DefaultSidebarTriggerTunnel.Out,{}),q&&(0,Z.jsx)(yg,{app:g,onClose:()=>{e.executeAction(Lf)},renderCustomStats:l})]})]})})},_=()=>(0,Z.jsx)(Kx,{__fallback:!0,onDock:B=>{we("sidebar",`toggleDock (${B?"dock":"undock"})`,`(${b.editor.isMobile?"mobile":"desktop"})`)}}),H=yS(fg),P=(0,Z.jsxs)(Z.Fragment,{children:[f,(0,Z.jsx)(TR,{UIOptions:m}),(0,Z.jsx)(Kx.Trigger,{__fallback:!0,icon:ac,title:Oa(y("toolBar.library")),onToggle:B=>{B&&we("sidebar",`${An.name} (open)`,`button (${b.editor.isMobile?"mobile":"desktop"})`)},tab:An.defaultTab,children:y("toolBar.library")}),(0,Z.jsx)(kR,{}),t.openDialog?.name==="ttd"&&(0,Z.jsx)(BL,{__fallback:!0}),t.isLoading&&(0,Z.jsx)(SS,{delay:250}),t.errorMessage&&(0,Z.jsx)(ND,{onClose:()=>i({errorMessage:null}),children:t.errorMessage}),S&&!b.editor.isMobile&&(0,Z.jsx)(oM,{colorPickerType:S.colorPickerType,onCancel:()=>{C(null)},onChange:(B,q,V,{altKey:Y})=>{if(!(B!=="elementBackground"&&B!=="elementStroke"))if(V.length){for(let ie of V)W(ie,{[Y&&S.swapPreviewOnAlt?B==="elementBackground"?"strokeColor":"backgroundColor":B==="elementBackground"?"backgroundColor":"strokeColor"]:q},!1),Vr.delete(ie);or.getScene(V[0])?.triggerUpdate()}else i(B==="elementBackground"?{currentItemBackgroundColor:q}:{currentItemStrokeColor:q})},onSelect:(B,q)=>{C(V=>V?.keepOpenOnAlt&&q.altKey?V:null),S?.onSelect?.(B,q)}}),t.openDialog?.name==="help"&&(0,Z.jsx)(rL,{onClose:()=>{i({openDialog:null})}}),(0,Z.jsx)(yD,{}),t.openDialog?.name==="elementLinkSelector"&&(0,Z.jsx)(IR,{sourceElementId:t.openDialog.sourceElementId,onClose:()=>{i({openDialog:null})},elementsMap:g.scene.getNonDeletedElementsMap(),appState:t,generateLinkForSelection:E}),(0,Z.jsx)(w.OverwriteConfirmDialogTunnel.Out,{}),L(),T(),t.pasteDialog.shown&&(0,Z.jsx)(QD,{setAppState:i,appState:t,onClose:()=>i({pasteDialog:{shown:!1,data:null}})}),b.editor.isMobile&&(0,Z.jsx)(qD,{app:g,appState:t,elements:r,actionManager:e,renderJSONExportDialog:T,renderImageExportDialog:L,setAppState:i,onLockToggle:o,onHandToolToggle:c,onPenModeToggle:d,renderTopRightUI:s,renderCustomStats:l,renderSidebars:_,device:b,renderWelcomeScreen:p,UIOptions:m}),!b.editor.isMobile&&(0,Z.jsxs)(Z.Fragment,{children:[(0,Z.jsxs)("div",{className:"layer-ui__wrapper",style:t.openSidebar&&H&&b.editor.canFitSidebar?{width:"calc(100% - var(--right-sidebar-width))"}:{},children:[p&&(0,Z.jsx)(w.WelcomeScreenCenterTunnel.Out,{}),z(),(0,Z.jsx)(mL,{appState:t,actionManager:e,showExitZenModeBtn:h,renderWelcomeScreen:p}),t.scrolledOutside&&(0,Z.jsx)("button",{type:"button",className:"scroll-back-to-content",onClick:()=>{i(B=>({...go(r,B)}))},children:y("buttons.scrollBackToContent")})]}),_()]})]});return(0,Z.jsx)(HS.Provider,{value:t,children:(0,Z.jsx)(x,{children:(0,Z.jsx)(ZC.Provider,{value:w,children:P})})})},sS=e=>{let{suggestedBindings:t,startBoundElement:n,cursorButton:i,scrollX:r,scrollY:a,...o}=e;return o},DR=(e,t)=>{if(e.children!==t.children)return!1;let{canvas:n,appState:i,...r}=e,{canvas:a,appState:o,...c}=t;return hn(sS(i),sS(o),{selectedElementIds:hn,selectedGroupIds:hn})&&hn(r,c)},LR=h3.default.memo(MR,DR),RR=5e3,AR=({message:e,onClose:t,closable:n=!1,duration:i=RR,style:r})=>{let a=(0,Bs.useRef)(0),o=i!==1/0,c=(0,Bs.useCallback)(()=>{o&&(a.current=window.setTimeout(()=>t(),i))},[t,i,o]);return(0,Bs.useEffect)(()=>{if(o)return c(),()=>clearTimeout(a.current)},[c,e,i,o]),(0,kl.jsxs)("div",{className:"Toast",onMouseEnter:o?()=>clearTimeout(a?.current):void 0,onMouseLeave:o?c:void 0,style:r,children:[(0,kl.jsx)("p",{className:"Toast__message",children:e}),n&&(0,kl.jsx)(ce,{icon:Yr,"aria-label":"close",type:"icon",onClick:t,className:"close"})]})},oS=U({name:"viewMode",label:"labels.viewMode",paletteName:"Toggle view mode",icon:fc,viewMode:!0,trackEvent:{category:"canvas",predicate:e=>!e.viewModeEnabled},perform(e,t){return{appState:{...t,viewModeEnabled:!this.checked(t)},captureUpdate:N.EVENTUALLY}},checked:e=>e.viewModeEnabled,predicate:(e,t,n)=>typeof n.viewModeEnabled>"u",keyTest:e=>!e[k.CTRL_OR_CMD]&&e.altKey&&e.code===me.R}),FI=(e,t)=>{let n=t.scene.getSelectedElements(e);return n.length===1&&ge(n[0])},NR=U({name:"selectAllElementsInFrame",label:"labels.selectAllElementsInFrame",trackEvent:{category:"canvas"},perform:(e,t,n,i)=>{let r=i.scene.getSelectedElements(t).at(0)||null;if(ge(r)){let a=qr(Se(e),r.id).filter(o=>!(o.type==="text"&&o.containerId));return{elements:e,appState:{...t,selectedElementIds:a.reduce((o,c)=>(o[c.id]=!0,o),{})},captureUpdate:N.IMMEDIATELY}}return{elements:e,appState:t,captureUpdate:N.EVENTUALLY}},predicate:(e,t,n,i)=>FI(t,i)}),PR=U({name:"removeAllElementsFromFrame",label:"labels.removeAllElementsFromFrame",trackEvent:{category:"history"},perform:(e,t,n,i)=>{let r=i.scene.getSelectedElements(t).at(0)||null;return ge(r)?{elements:my(e,r),appState:{...t,selectedElementIds:{[r.id]:!0}},captureUpdate:N.IMMEDIATELY}:{elements:e,appState:t,captureUpdate:N.EVENTUALLY}},predicate:(e,t,n,i)=>FI(t,i)}),H_=U({name:"updateFrameRendering",label:"labels.updateFrameRendering",viewMode:!0,trackEvent:{category:"canvas"},perform:(e,t)=>({elements:e,appState:{...t,frameRendering:{...t.frameRendering,enabled:!t.frameRendering.enabled}},captureUpdate:N.EVENTUALLY}),checked:e=>e.frameRendering.enabled}),W_=U({name:"setFrameAsActiveTool",label:"toolBar.frame",trackEvent:{category:"toolbar"},icon:Fm,viewMode:!1,perform:(e,t,n,i)=>{let r=it(t,{type:"frame"});return si(i.interactiveCanvas,{...t,activeTool:r}),{elements:e,appState:{...t,activeTool:it(t,{type:"frame"})},captureUpdate:N.EVENTUALLY}},keyTest:e=>!e[k.CTRL_OR_CMD]&&!e.shiftKey&&!e.altKey&&e.key.toLocaleLowerCase()===k.F}),_R=U({name:"wrapSelectionInFrame",label:"labels.wrapSelectionInFrame",trackEvent:{category:"element"},predicate:(e,t,n,i)=>{let r=se(e,t);return r.length>0&&!r.some(a=>ge(a))},perform:(e,t,n,i)=>{let r=se(e,t),[a,o,c,d]=Ve(r,i.scene.getNonDeletedElementsMap()),h=16,s=Mc({x:a-h,y:o-h,width:c-a+h*2,height:d-o+h*2});if(t.editingGroupId){let l=Ke(r,t.editingGroupId);for(let m of l){let u=m.groupIds.indexOf(t.editingGroupId);W(m,{groupIds:m.groupIds.slice(0,u)},!1)}}return{elements:ko([...i.scene.getElementsIncludingDeleted(),s],r,s,t),appState:{selectedElementIds:{[s.id]:!0}},captureUpdate:N.IMMEDIATELY}}}),OR=()=>(0,Tt.jsxs)("div",{"data-testid":"brave-measure-text-error",children:[(0,Tt.jsx)("p",{children:(0,Tt.jsx)(bi,{i18nKey:"errors.brave_measure_text_error.line1",bold:e=>(0,Tt.jsx)("span",{style:{fontWeight:600},children:e})})}),(0,Tt.jsx)("p",{children:(0,Tt.jsx)(bi,{i18nKey:"errors.brave_measure_text_error.line2",bold:e=>(0,Tt.jsx)("span",{style:{fontWeight:600},children:e})})}),(0,Tt.jsx)("p",{children:(0,Tt.jsx)(bi,{i18nKey:"errors.brave_measure_text_error.line3",link:e=>(0,Tt.jsx)("a",{href:"http://docs.excalidraw.com/docs/@excalidraw/excalidraw/faq#turning-off-aggresive-block-fingerprinting-in-brave-browser",children:e})})}),(0,Tt.jsx)("p",{children:(0,Tt.jsx)(bi,{i18nKey:"errors.brave_measure_text_error.line4",issueLink:e=>(0,Tt.jsx)("a",{href:"https://github.com/excalidraw/excalidraw/issues/new",children:e}),discordLink:e=>(0,Tt.jsxs)("a",{href:"https://discord.gg/UexuTaE",children:[e,"."]})})})]}),FR=OR,Ld={width:100,height:0},Cr=100,$R=(e,t,n)=>{let i=ar({x:0,y:0,textAlign:Yl.CENTER,verticalAlign:ki.MIDDLE,...t,containerId:e.id,strokeColor:t.strokeColor||e.strokeColor});return Object.assign(e,{boundElements:(e.boundElements||[]).concat({type:"text",id:i.id})}),$t(i,e,n),[e,i]},lS=(e,t,n,i,r)=>{let a,o;if(Object.assign(e,{startBinding:e?.startBinding||null,endBinding:e.endBinding||null}),t){let s=t?.width??Cr,l=t?.height??Cr,m;t.id&&(m=i.getElement(t.id),m||console.error(`No element for start binding with id ${t.id} found`));let u=t.x||e.x-s,p=t.y||e.y-l/2,f=m?m.type:t.type;if(f){if(f==="text"){let g="";m&&m.type==="text"?g=m.text:t.type==="text"&&(g=t.text),g||console.error(`No text found for start binding text element for ${e.id}`),a=ar({x:u,y:p,type:"text",...m,...t,text:g}),Object.assign(a,{x:t.x||e.x-a.width,y:t.y||e.y-a.height/2})}else switch(f){case"rectangle":case"ellipse":case"diamond":{a=rr({x:u,y:p,width:s,height:l,...m,...t,type:f});break}default:ec(e,`Unhandled element start type "${t.type}"`,!0)}Zr(e,a,"start",r)}}if(n){let s=n?.height??Cr,l=n?.width??Cr,m;n.id&&(m=i.getElement(n.id),m||console.error(`No element for end binding with id ${n.id} found`));let u=n.x||e.x+e.width,p=n.y||e.y-s/2,f=m?m.type:n.type;if(f){if(f==="text"){let g="";m&&m.type==="text"?g=m.text:n.type==="text"&&(g=n.text),g||console.error(`No text found for end binding text element for ${e.id}`),o=ar({x:u,y:p,type:"text",...m,...n,text:g}),Object.assign(o,{y:n.y||e.y-o.height/2})}else switch(f){case"rectangle":case"ellipse":case"diamond":{o=rr({x:u,y:p,width:l,height:s,...m,...n,type:f});break}default:ec(e,`Unhandled element end type "${f}"`,!0)}Zr(e,o,"end",r)}}if(e.points.length<2)return{linearElement:e,startBoundElement:a,endBoundElement:o};let c=e.points.length-1,d=.5,h=ii(e.points);return e.points[c][0]>e.points[c-1][0]&&(h[0][0]=d,h[c][0]-=d),e.points[c][0]<e.points[c-1][0]&&(h[0][0]=-d,h[c][0]+=d),e.points[c][1]>e.points[c-1][1]&&(h[0][1]=d,h[c][1]-=d),e.points[c][1]<e.points[c-1][1]&&(h[0][1]=-d,h[c][1]+=d),Object.assign(e,{points:h}),{linearElement:e,startBoundElement:a,endBoundElement:o}},BR=class{constructor(){D(this,"excalidrawElements",new Map),D(this,"add",e=>{e&&this.excalidrawElements.set(e.id,e)}),D(this,"getElements",()=>Ga(Array.from(this.excalidrawElements.values()))),D(this,"getElementsMap",()=>tc(Ee(this.getElements()))),D(this,"getElement",e=>this.excalidrawElements.get(e))}},Gf=(e,t)=>{if(!e)return[];let n=ii(e),i=new BR,r=new Map,a=new Map;for(let c of n){let d,h=c.id;switch(t?.regenerateIds!==!1&&Object.assign(c,{id:Eo()}),c.type){case"rectangle":case"ellipse":case"diamond":{let s=c?.label?.text&&c.width===void 0?0:c?.width||Cr,l=c?.label?.text&&c.height===void 0?0:c?.height||Cr;d=rr({...c,width:s,height:l});break}case"line":{let s=c.width||Ld.width,l=c.height||Ld.height;d=hh({width:s,height:l,points:[G(0,0),G(s,l)],...c});break}case"arrow":{let s=c.width||Ld.width,l=c.height||Ld.height;d=Lc({width:s,height:l,endArrowhead:"arrow",points:[G(0,0),G(s,l)],...c,type:"arrow"}),Object.assign(d,Z0(d.points));break}case"text":{let s=c?.fontFamily||Ul,l=c?.fontSize||jl,m=c?.lineHeight||ja(s),u=c.text??"",p=so(u),f=Di(p,mn({fontFamily:s,fontSize:l}),m);d=ar({width:f.width,height:f.height,fontFamily:s,fontSize:l,...c});break}case"image":{d=ph({width:c?.width||Cr,height:c?.height||Cr,...c});break}case"frame":{d=Mc({x:0,y:0,...c});break}case"magicframe":{d=Dc({x:0,y:0,...c});break}case"freedraw":case"iframe":case"embeddable":{d=c;break}default:d=c,ec(c,`Unhandled element type "${c.type}"`,!0)}i.getElement(d.id)?console.error(`Duplicate id found for ${d.id}`):(i.add(d),r.set(d.id,c),h&&a.set(h,d.id))}let o=i.getElementsMap();for(let[c,d]of r){let h=i.getElement(c);switch(d.type){case"rectangle":case"ellipse":case"diamond":case"arrow":{if(d.label?.text){let[s,l]=$R(h,d?.label,o);if(i.add(s),i.add(l),mt(s)){let m=d.type==="arrow"?d?.start:void 0,u=d.type==="arrow"?d?.end:void 0;if(m&&m.id){let v=a.get(m.id);v&&Object.assign(m,{id:v})}if(u&&u.id){let v=a.get(u.id);v&&Object.assign(u,{id:v})}let{linearElement:p,startBoundElement:f,endBoundElement:g}=lS(s,m,u,i,o);s=p,i.add(p),i.add(f),i.add(g)}}else switch(d.type){case"arrow":{let{start:s,end:l}=d;if(s&&s.id){let f=a.get(s.id);Object.assign(s,{id:f})}if(l&&l.id){let f=a.get(l.id);Object.assign(l,{id:f})}let{linearElement:m,startBoundElement:u,endBoundElement:p}=lS(h,s,l,i,o);i.add(m),i.add(u),i.add(p);break}}break}}}for(let[c,d]of r){if(d.type!=="frame"&&d.type!=="magicframe")continue;let h=i.getElement(c);if(!h)throw new Error(`Excalidraw element with id ${c} doesn't exist`);let s=[];d.children.forEach(w=>{let x=a.get(w);if(!x)throw new Error(`Element with ${w} wasn't mapped correctly`);let S=i.getElement(x);if(!S)throw new Error(`Frame element with id ${x} doesn't exist`);Object.assign(S,{frameId:h.id}),S?.boundElements?.forEach(C=>{let T=i.getElement(C.id);if(!T)throw new Error(`Bound element with id ${C.id} doesn't exist`);Object.assign(T,{frameId:h.id}),s.push(T)}),s.push(S)});let[l,m,u,p]=Ve(s),f=10;l=l-f,m=m-f,u=u+f,p=p+f;let g=h?.x||l,v=h?.y||m,E=h?.width||u-l,b=h?.height||p-m;Object.assign(h,{x:g,y:v,width:E,height:b}),sm()&&d.children.length&&(h?.x||h?.y||h?.width||h?.height)&&console.info("User provided frame attributes are being considered, if you find this inaccurate, please remove any of the attributes - x, y, width and height so frame coordinates and dimensions are calculated automatically")}return i.getElements()},ze=e=>t=>{(0,Eg.unstable_batchedUpdates)(e,t)},pf=e=>Xl(t=>{(0,Eg.unstable_batchedUpdates)(e,t)}),wg=(()=>{let e;try{let n=$I.version.split(".");e=Number(n[0])>17}catch{e=!1}let t=!1;return()=>window.EXCALIDRAW_THROTTLE_RENDER===!0?e?!0:(t||(t=!0,console.warn("Excalidraw: render throttling is disabled on React versions < 18.")),!1):!1})(),zR="#ff6b6b",jR="#ff0000",cS=1,dS=2,UR=(e,t)=>{if(!t.snapLines.length)return;let n=t.theme===he.LIGHT||t.zenModeEnabled?zR:jR,i=(t.zenModeEnabled?cS*1.5:cS)/t.zoom.value;e.save(),e.translate(t.scrollX,t.scrollY);for(let r of t.snapLines)r.type==="pointer"?(e.lineWidth=i,e.strokeStyle=n,WR(r,e,t)):r.type==="gap"?(e.lineWidth=i,e.strokeStyle=n,VR(r.points[0],r.points[1],r.direction,t,e)):r.type==="points"&&(e.lineWidth=i,e.strokeStyle=n,HR(r,e,t));e.restore()},HR=(e,t,n)=>{if(!n.zenModeEnabled){let i=e.points[0],r=e.points[e.points.length-1];vn(i,r,t)}for(let i of e.points)BI(i,n,t)},WR=(e,t,n)=>{BI(e.points[0],n,t),n.zenModeEnabled||vn(e.points[0],e.points[1],t)},BI=([e,t],n,i)=>{i.save();let r=(n.zenModeEnabled?dS*1.5:dS)/n.zoom.value;i.beginPath(),i.moveTo(e-r,t-r),i.lineTo(e+r,t+r),i.moveTo(e+r,t-r),i.lineTo(e-r,t+r),i.stroke(),i.restore()},vn=(e,t,n)=>{n.beginPath(),n.lineTo(e[0],e[1]),n.lineTo(t[0],t[1]),n.stroke()},VR=(e,t,n,i,r)=>{let a=8/i.zoom.value,o=a/2,c=a/4;if(n==="horizontal"){let d=[(e[0]+t[0])/2,e[1]];i.zenModeEnabled||vn(G(e[0],e[1]-a),G(e[0],e[1]+a),r),vn(G(d[0]-c,d[1]-o),G(d[0]-c,d[1]+o),r),vn(G(d[0]+c,d[1]-o),G(d[0]+c,d[1]+o),r),i.zenModeEnabled||(vn(G(t[0],t[1]-a),G(t[0],t[1]+a),r),vn(e,t,r))}else{let d=[e[0],(e[1]+t[1])/2];i.zenModeEnabled||vn(G(e[0]-a,e[1]),G(e[0]+a,e[1]),r),vn(G(d[0]-o,d[1]-c),G(d[0]+o,d[1]-c),r),vn(G(d[0]-o,d[1]+c),G(d[0]+o,d[1]+c),r),i.zenModeEnabled||(vn(G(t[0]-a,t[1]),G(t[0]+a,t[1]),r),vn(e,t,r))}},YR=(e,t)=>{Xi(t.selectedLinearElement,"selectedLinearElement is null");let{segmentMidPointHoveredCoords:n}=t.selectedLinearElement;Xi(n,"midPointCoords is null"),e.save(),e.translate(t.scrollX,t.scrollY),zI(n,e,t),e.restore()},GR=(e,t,n)=>{let{elementId:i,hoverPointIndex:r}=t.selectedLinearElement;if(t.editingLinearElement?.selectedPointsIndices?.includes(r))return;let a=ne.getElement(i,n);if(!a)return;let o=ne.getPointAtIndexGlobalCoordinates(a,r,n);e.save(),e.translate(t.scrollX,t.scrollY),zI(o,e,t),e.restore()},zI=(e,t,n)=>{t.fillStyle="rgba(105, 101, 219, 0.4)",So(t,e[0],e[1],ne.POINT_HANDLE_SIZE/n.zoom.value,!1)},Al=(e,t,n,i,r,a,o,c,d=!1,h=0)=>{e.save(),e.translate(a,o),e.rotate(c),d&&e.fillRect(t-a,n-o,i,r),h&&e.roundRect?(e.beginPath(),e.roundRect(t-a,n-o,i,r,h),e.stroke(),e.closePath()):e.strokeRect(t-a,n-o,i,r),e.restore()},KR=(e,t,n,i,r,a)=>{e.save(),e.translate(i,r),e.rotate(a),e.beginPath(),e.moveTo(0,n/2),e.lineTo(t/2,0),e.lineTo(0,-n/2),e.lineTo(-t/2,0),e.closePath(),e.stroke(),e.restore()},ff=(e,t,n,i,r,a=!1)=>{e.strokeStyle="#5e5ad8",e.setLineDash([]),e.fillStyle="rgba(255, 255, 255, 0.9)",r?e.fillStyle="rgba(134, 131, 226, 0.9)":a&&(e.fillStyle="rgba(177, 151, 252, 0.7)"),So(e,n[0],n[1],i/t.zoom.value,!a)},ZR=(e,t,n,i,r,a)=>{e.beginPath(),e.ellipse(i,r,t/2,n/2,a,0,Math.PI*2),e.stroke()},XR=(e,t,n,i)=>{let[r,a,o,c]=pn(t,n),d=o-r,h=c-a;e.strokeStyle="rgba(0,0,0,.05)";let s=i.value<1?i.value:1;e.lineWidth=Q0/s;let l=e.lineWidth/2+J0,m=Gm(Math.min(t.width,t.height),t);switch(t.type){case"rectangle":case"text":case"image":case"iframe":case"embeddable":case"frame":case"magicframe":Al(e,r-l,a-l,d+l*2,h+l*2,r+d/2,a+h/2,t.angle,void 0,m);break;case"diamond":let u=Math.hypot(d,h),p=l*u/h,f=l*u/d;KR(e,d+p*2,h+f*2,r+d/2,a+h/2,t.angle);break;case"ellipse":ZR(e,d+l*2,h+l*2,r+d/2,a+h/2,t.angle);break}},qR=(e,t,n,i)=>{let[r,a,o]=t,c=tb(o,o.width,o.height,i);e.strokeStyle="rgba(0,0,0,0)",e.fillStyle="rgba(0,0,0,.05)",(a==="both"?[0,-1]:a==="start"?[0]:[-1]).forEach(d=>{let[h,s]=ne.getPointAtIndexGlobalCoordinates(r,d,n);So(e,h,s,c)})},jI=(e,t,n)=>{let{angle:i,x1:r,y1:a,x2:o,y2:c,selectionColors:d,cx:h,cy:s,dashed:l,activeEmbeddable:m}=n,u=o-r,p=c-a,f=(n.padding??Hl*2)/t.zoom.value,g=8/t.zoom.value,v=4/t.zoom.value;e.save(),e.translate(t.scrollX,t.scrollY),e.lineWidth=(m?4:1)/t.zoom.value;let E=d.length;for(let b=0;b<E;++b)e.strokeStyle=d[b],l&&e.setLineDash([g,v+(g+v)*(E-1)]),e.lineDashOffset=(g+v)*b,Al(e,r-f,a-f,u+f*2,p+f*2,h,s,i);e.restore()},QR=(e,t,n,i)=>{let r=Array.isArray(n)?qR:XR;e.save(),e.translate(t.scrollX,t.scrollY),r(e,n,i,t.zoom),e.restore()},JR=(e,t,n,i)=>{let[r,a,o,c]=pn(n,i),d=o-r,h=c-a;e.strokeStyle="rgb(0,118,255)",e.lineWidth=ei.strokeWidth/t.zoom.value,e.save(),e.translate(t.scrollX,t.scrollY),Al(e,r,a,d,h,r+d/2,a+h/2,n.angle,!1,ei.radius/t.zoom.value),e.restore()},eA=(e,t,n)=>{let i=n.filter(c=>c.groupIds.length===0),r=n.filter(c=>c.groupIds.length>0),a=c=>{let[d,h,s,l]=Ve(c);return{angle:0,x1:d,x2:s,y1:h,y2:l,selectionColors:["rgb(0,118,255)"],dashed:!1,cx:d+(s-d)/2,cy:h+(l-h)/2,activeEmbeddable:!1}},o=c=>{let d=Ke(n,c);return a(d)};Object.entries(sb(r,t)).filter(([c,d])=>d).map(([c,d])=>c).map(c=>o(c)).concat(i.map(c=>a([c]))).forEach(c=>jI(e,t,c))},gf=(e,t,n,i)=>{if(!t.selectedLinearElement)return;e.save(),e.translate(t.scrollX,t.scrollY),e.lineWidth=1/t.zoom.value;let r=ne.getPointsGlobalCoordinates(n,i),{POINT_HANDLE_SIZE:a}=ne,o=t.editingLinearElement?a:a/2;if(r.forEach((c,d)=>{if(le(n)&&d!==0&&d!==r.length-1)return;let h=!!t.editingLinearElement?.selectedPointsIndices?.includes(d);ff(e,t,c,o,h)}),le(n)){let c=n.fixedSegments?.map(d=>d.index)||[];r.slice(0,-1).forEach((d,h)=>{ne.isSegmentTooShort(n,r[h+1],r[h],h,t.zoom)||ff(e,t,G((d[0]+r[h+1][0])/2,(d[1]+r[h+1][1])/2),a/2,!1,!c.includes(h+1))})}else ne.getEditorMidPoints(n,i,t).filter((c,d,h)=>c!==null&&!(le(n)&&(d===0||d===h.length-1))).forEach(c=>{(t.editingLinearElement||r.length===2)&&ff(e,t,c,a/2,!1,!0)});e.restore()},uS=(e,t,n,i,r)=>{Object.keys(i).forEach(a=>{let o=i[a];if(o!==void 0){let[c,d,h,s]=o;e.save(),e.lineWidth=1/n.zoom.value,t.selectionColor&&(e.strokeStyle=t.selectionColor),a==="rotation"?So(e,c+h/2,d+s/2,h/2):e.roundRect?(e.beginPath(),e.roundRect(c,d,h,s,2/n.zoom.value),e.fill(),e.stroke()):Al(e,c,d,h,s,c+h/2,d+s/2,r,!0),e.restore()}})},tA=(e,t,n,i,r)=>{let[a,o,,,c,d]=pn(i,r),h=3,s=20,l=h/n.zoom.value,m=l/2,u=c-a+l,p=d-o+l,f=Math.min(s/n.zoom.value,u),g=Math.min(s/n.zoom.value,p);e.save(),e.fillStyle=t.selectionColor,e.strokeStyle=t.selectionColor,e.lineWidth=l,[[[-u,-p],[0,m],[f,m],[m,0],[m,g]],[[u-m,-p],[m,m],[-f+m,m],[0,0],[0,g]],[[-u,p],[0,-m],[f,-m],[m,0],[m,-g]],[[u-m,p],[m,-m],[-f+m,-m],[0,0],[0,-g]]].forEach(v=>{let[[E,b],[w,x],[S,C],[T,L],[M,R]]=v;e.save(),e.translate(c,d),e.rotate(i.angle),e.beginPath(),e.moveTo(E+w,b+x),e.lineTo(E+S,b+C),e.stroke(),e.beginPath(),e.moveTo(E+T,b+L),e.lineTo(E+M,b+R),e.stroke(),e.restore()}),e.restore()},nA=(e,t,n,i)=>{t.save();let r=Hl*2/n.zoom.value,a=e.width+r*2,o=e.height+r*2,c=e.x+a/2,d=e.y+o/2,h=-(a/2+r),s=-(o/2+r);t.translate(c+n.scrollX,d+n.scrollY),t.rotate(e.angle),t.lineWidth=1/n.zoom.value,t.strokeStyle=i,t.strokeRect(h,s,a,o),t.restore()},UI=({canvas:e,elementsMap:t,visibleElements:n,selectedElements:i,allElementsMap:r,scale:a,appState:o,renderConfig:c,device:d})=>{if(e===null)return{atLeastOneVisibleElement:!1,elementsMap:t};let[h,s]=xh(e,a),l=Sh({canvas:e,scale:a,normalizedWidth:h,normalizedHeight:s});l.save(),l.scale(o.zoom.value,o.zoom.value);let m;if(n.forEach(f=>{o.editingLinearElement?.elementId===f.id&&f&&(m=f)}),m&&gf(l,o,m,t),o.selectionElement&&!o.isCropping)try{U0(o.selectionElement,l,o,c.selectionColor)}catch(f){console.error(f)}if(o.editingTextElement&&te(o.editingTextElement)){let f=r.get(o.editingTextElement.id);f&&!f.autoResize&&nA(f,l,o,c.selectionColor)}o.isBindingEnabled&&o.suggestedBindings.filter(f=>f!=null).forEach(f=>{QR(l,o,f,t)}),o.frameToHighlight&&JR(l,o,o.frameToHighlight,t),o.elementsToHighlight&&eA(l,o,o.elementsToHighlight);let u=i.some(f=>ge(f));if(i.length===1&&o.editingLinearElement?.elementId===i[0].id&&gf(l,o,i[0],t),le(i[0])&&o.selectedLinearElement&&o.selectedLinearElement.segmentMidPointHoveredCoords?YR(l,o):o.selectedLinearElement&&o.selectedLinearElement.hoverPointIndex>=0&&!(le(i[0])&&o.selectedLinearElement.hoverPointIndex>0&&o.selectedLinearElement.hoverPointIndex<i[0].points.length-1)&&GR(l,o,t),!o.multiElement&&!o.editingLinearElement){let f=Uh(i,o),g=i.length===1&&De(i[0]);g&&o.selectedLinearElement?.elementId===i[0].id&&!i[0].locked&&gf(l,o,i[0],t);let v=c.selectionColor||Et.black;if(f){let E=Ee(i),b=[];for(let x of t.values()){let S=[],C=c.remoteSelectedElementIds.get(x.id);if(g&&le(x)&&(x.startBinding||x.endBinding)||(E.has(x.id)&&!rh(o,x)&&S.push(v),C&&S.push(...C.map(T=>pu(T,o.collaborators.get(T))))),S.length){let[T,L,M,R,z,_]=pn(x,t,!0);b.push({angle:x.angle,x1:T,y1:L,x2:M,y2:R,selectionColors:S,dashed:!!C,cx:z,cy:_,activeEmbeddable:o.activeEmbeddable?.element===x&&o.activeEmbeddable.state==="active",padding:x.id===o.croppingElementId||_e(x)?0:void 0})}}let w=x=>{let S=Ke(t,x),[C,T,L,M]=Ve(S);b.push({angle:0,x1:C,x2:L,y1:T,y2:M,selectionColors:[Et.black],dashed:!0,cx:C+(L-C)/2,cy:T+(M-T)/2,activeEmbeddable:!1})};for(let x of tr(o))w(x);o.editingGroupId&&w(o.editingGroupId),b.forEach(x=>jI(l,o,x))}if(l.save(),l.translate(o.scrollX,o.scrollY),i.length===1){l.fillStyle=Et.white;let E=yy(i[0],o.zoom,t,"mouse",Fc(d));if(!o.viewModeEnabled&&f&&!te(o.editingTextElement)&&!o.croppingElementId&&uS(l,c,o,E,i[0].angle),o.croppingElementId&&!o.isCropping){let b=t.get(o.croppingElementId);b&&_e(b)&&tA(l,c,o,b,t)}}else if(i.length>1&&!o.isRotating){let E=Hl*2/o.zoom.value;l.fillStyle=Et.white;let[b,w,x,S]=Ve(i),C=l.getLineDash();l.setLineDash([2/o.zoom.value]);let T=l.lineWidth;l.lineWidth=1/o.zoom.value,l.strokeStyle=v,Al(l,b-E,w-E,x-b+E*2,S-w+E*2,(b+x)/2,(w+S)/2,0),l.lineWidth=T,l.setLineDash(C);let L=by([b,w,x,S,(b+x)/2,(w+S)/2],0,o.zoom,"mouse",u?{...Fc(d),rotation:!0}:Fc(d));i.some(M=>!M.locked)&&uS(l,c,o,L,0)}l.restore()}o.searchMatches.forEach(({id:f,focus:g,matchedLines:v})=>{let E=t.get(f);if(E&&te(E)){let[b,w,,,x,S]=pn(E,t,!0);l.save(),o.theme===he.LIGHT?g?l.fillStyle="rgba(255, 124, 0, 0.4)":l.fillStyle="rgba(255, 226, 0, 0.4)":g?l.fillStyle="rgba(229, 82, 0, 0.4)":l.fillStyle="rgba(99, 52, 0, 0.4)",l.translate(o.scrollX,o.scrollY),l.translate(x,S),l.rotate(E.angle),v.forEach(C=>{l.fillRect(b+C.offsetX-x,w+C.offsetY-S,C.width,C.height)}),l.restore()}}),UR(l,o),l.restore(),UM({context:l,renderConfig:c,appState:o,normalizedWidth:h,normalizedHeight:s});let p;return c.renderScrollbars&&(p=ZD(n,h,s,o),l.save(),l.fillStyle=KD,l.strokeStyle="rgba(255,255,255,0.8)",[p.horizontal,p.vertical].forEach(f=>{f&&yC(l,f.x,f.y,f.width,f.height,Sr/2)}),l.restore()),{scrollBars:p,atLeastOneVisibleElement:n.length>0,elementsMap:t}},HI=Xl(e=>{let t=UI(e);e.callback?.(t)},{trailing:!0}),iA=(e,t)=>{if(t){HI(e);return}let n=UI(e);return e.callback(n),n},rA=e=>{let t=(0,zs.useRef)(!1);return(0,zs.useEffect)(()=>{if(!t.current){t.current=!0;return}let n=new Map,i=new Map,r=new Map,a=new Map,o=new Map;e.appState.collaborators.forEach((d,h)=>{if(d.selectedElementIds)for(let s of Object.keys(d.selectedElementIds))r.has(s)||r.set(s,[]),r.get(s).push(h);!d.pointer||d.pointer.renderCursor===!1||(d.username&&a.set(h,d.username),d.userState&&o.set(h,d.userState),i.set(h,ni({sceneX:d.pointer.x,sceneY:d.pointer.y},e.appState)),n.set(h,d.button))});let c=e.containerRef?.current&&getComputedStyle(e.containerRef.current).getPropertyValue("--color-selection")||"#6965db";iA({canvas:e.canvas,elementsMap:e.elementsMap,visibleElements:e.visibleElements,selectedElements:e.selectedElements,allElementsMap:e.allElementsMap,scale:window.devicePixelRatio,appState:e.appState,renderConfig:{remotePointerViewportCoords:i,remotePointerButton:n,remoteSelectedElementIds:r,remotePointerUsernames:a,remotePointerUserStates:o,selectionColor:c,renderScrollbars:!1},device:e.device,callback:e.renderInteractiveSceneCallback},wg())}),(0,WI.jsx)("canvas",{className:"excalidraw__canvas interactive",style:{width:e.appState.width,height:e.appState.height,cursor:e.appState.viewModeEnabled?ye.GRAB:ye.AUTO},width:e.appState.width*e.scale,height:e.appState.height*e.scale,ref:e.handleCanvasRef,onContextMenu:e.onContextMenu,onPointerMove:e.onPointerMove,onPointerUp:e.onPointerUp,onPointerCancel:e.onPointerCancel,onTouchMove:e.onTouchMove,onPointerDown:e.onPointerDown,onDoubleClick:e.appState.viewModeEnabled?void 0:e.onDoubleClick,children:y("labels.drawingCanvas")})},mS=e=>({zoom:e.zoom,scrollX:e.scrollX,scrollY:e.scrollY,width:e.width,height:e.height,viewModeEnabled:e.viewModeEnabled,openDialog:e.openDialog,editingGroupId:e.editingGroupId,editingLinearElement:e.editingLinearElement,selectedElementIds:e.selectedElementIds,frameToHighlight:e.frameToHighlight,offsetLeft:e.offsetLeft,offsetTop:e.offsetTop,theme:e.theme,pendingImageElementId:e.pendingImageElementId,selectionElement:e.selectionElement,selectedGroupIds:e.selectedGroupIds,selectedLinearElement:e.selectedLinearElement,multiElement:e.multiElement,isBindingEnabled:e.isBindingEnabled,suggestedBindings:e.suggestedBindings,isRotating:e.isRotating,elementsToHighlight:e.elementsToHighlight,collaborators:e.collaborators,activeEmbeddable:e.activeEmbeddable,snapLines:e.snapLines,zenModeEnabled:e.zenModeEnabled,editingTextElement:e.editingTextElement,isCropping:e.isCropping,croppingElementId:e.croppingElementId,searchMatches:e.searchMatches}),aA=(e,t)=>e.selectionNonce!==t.selectionNonce||e.sceneNonce!==t.sceneNonce||e.scale!==t.scale||e.elementsMap!==t.elementsMap||e.visibleElements!==t.visibleElements||e.selectedElements!==t.selectedElements?!1:hn(mS(e.appState),mS(t.appState)),sA=zs.default.memo(rA,aA),oA=e=>{let t=(0,Ma.useRef)(null),n=(0,Ma.useRef)(!1);return(0,Ma.useEffect)(()=>{let i=t.current;if(!i)return;let r=e.canvas;n.current||(n.current=!0,i.replaceChildren(r),r.classList.add("excalidraw__canvas","static"));let a=`${e.appState.width}px`,o=`${e.appState.height}px`;r.style.width!==a&&(r.style.width=a),r.style.height!==o&&(r.style.height=o);let c=e.appState.width*e.scale,d=e.appState.height*e.scale;r.width!==c&&(r.width=c),r.height!==d&&(r.height=d),Zb({canvas:r,rc:e.rc,scale:e.scale,elementsMap:e.elementsMap,allElementsMap:e.allElementsMap,visibleElements:e.visibleElements,appState:e.appState,renderConfig:e.renderConfig},wg())}),(0,VI.jsx)("div",{className:"excalidraw__canvas-wrapper",ref:t})},hS=e=>({zoom:e.zoom,scrollX:e.scrollX,scrollY:e.scrollY,width:e.width,height:e.height,viewModeEnabled:e.viewModeEnabled,openDialog:e.openDialog,hoveredElementIds:e.hoveredElementIds,offsetLeft:e.offsetLeft,offsetTop:e.offsetTop,theme:e.theme,pendingImageElementId:e.pendingImageElementId,shouldCacheIgnoreZoom:e.shouldCacheIgnoreZoom,viewBackgroundColor:e.viewBackgroundColor,exportScale:e.exportScale,selectedElementsAreBeingDragged:e.selectedElementsAreBeingDragged,gridSize:e.gridSize,gridStep:e.gridStep,frameRendering:e.frameRendering,selectedElementIds:e.selectedElementIds,frameToHighlight:e.frameToHighlight,editingGroupId:e.editingGroupId,currentHoveredFontFamily:e.currentHoveredFontFamily,croppingElementId:e.croppingElementId}),lA=(e,t)=>e.sceneNonce!==t.sceneNonce||e.scale!==t.scale||e.elementsMap!==t.elementsMap||e.visibleElements!==t.visibleElements?!1:hn(hS(e.appState),hS(t.appState))&&hn(e.renderConfig,t.renderConfig),cA=Ma.default.memo(oA,lA),pS=class{constructor(e){D(this,"scene"),D(this,"getRenderableElements",(()=>{let t=({elementsMap:i,zoom:r,offsetLeft:a,offsetTop:o,scrollX:c,scrollY:d,height:h,width:s})=>{let l=[];for(let m of i.values())Oc(m,s,h,{zoom:r,offsetLeft:a,offsetTop:o,scrollX:c,scrollY:d},i)&&l.push(m);return l},n=({elements:i,editingTextElement:r,newElementId:a,pendingImageElementId:o})=>{let c=tc(new Map);for(let d of i)_e(d)&&o===d.id||a!==d.id&&(!r||r.type!=="text"||d.id!==r.id)&&c.set(d.id,d);return c};return R1(({zoom:i,offsetLeft:r,offsetTop:a,scrollX:o,scrollY:c,height:d,width:h,editingTextElement:s,newElementId:l,pendingImageElementId:m,sceneNonce:u})=>{let p=this.scene.getNonDeletedElements(),f=n({elements:p,editingTextElement:s,newElementId:l,pendingImageElementId:m}),g=t({elementsMap:f,zoom:i,offsetLeft:r,offsetTop:a,scrollX:o,scrollY:c,height:d,width:h});return{elementsMap:f,visibleElements:g}})})()),this.scene=e}destroy(){HI.cancel(),Kb.cancel(),this.getRenderableElements.clear()}},dA=({trails:e})=>{let t=(0,Du.useRef)(null);return(0,Du.useEffect)(()=>{if(t.current)for(let n of e)n.start(t.current);return()=>{for(let n of e)n.stop()}},e),(0,Kf.jsx)("div",{className:"SVGLayer",children:(0,Kf.jsx)("svg",{ref:t})})},uA=5,mA=(e,t,n)=>{let[i,r]=pn(e,n),{x:a,y:o}=ni({sceneX:i+e.width,sceneY:r},t),c=a-t.offsetLeft+10,d=o-t.offsetTop;return{x:c,y:d}},fS=({children:e,element:t,elementsMap:n})=>{let i=Pl();if(i.contextMenu||i.newElement||i.resizingElement||i.isRotating||i.openMenu||i.viewModeEnabled)return null;let{x:r,y:a}=mA(t,i,n);return(0,YI.jsx)("div",{className:"excalidraw-canvas-buttons",style:{top:`${a}px`,left:`${r}px`,padding:uA},children:e})},hA="small",vf=e=>(0,Ml.jsxs)("label",{className:$("ToolIcon ToolIcon__MagicButton",`ToolIcon_size_${hA}`,{"is-mobile":e.isMobile}),title:`${e.title}`,children:[(0,Ml.jsx)("input",{className:"ToolIcon_type_checkbox",type:"checkbox",name:e.name,onChange:e.onChange,checked:e.checked,"aria-label":e.title}),(0,Ml.jsx)("div",{className:"ToolIcon__icon",children:e.icon})]}),pA=({height:e,width:t,userToFollow:n,onDisconnect:i})=>(0,Sa.jsx)("div",{className:"follow-mode",style:{width:t,height:e},children:(0,Sa.jsxs)("div",{className:"follow-mode__badge",children:[(0,Sa.jsxs)("div",{className:"follow-mode__badge__label",children:["Following"," ",(0,Sa.jsx)("span",{className:"follow-mode__badge__username",title:n.username,children:n.username})]}),(0,Sa.jsx)("button",{type:"button",onClick:i,className:"follow-mode__disconnect-btn",children:Yr})]})}),fA=pA,gA=class{constructor(){D(this,"targets",new WeakMap),D(this,"rafIds",new WeakMap)}register(e,t){this.targets.set(e,{callback:t,stopped:!0})}start(e){let t=this.targets.get(e);t&&(this.rafIds.has(e)||(this.targets.set(e,{...t,stopped:!1}),this.scheduleFrame(e)))}stop(e){let t=this.targets.get(e);t&&!t.stopped&&this.targets.set(e,{...t,stopped:!0}),this.cancelFrame(e)}constructFrame(e){return t=>{let n=this.targets.get(e);if(!n)return;let i=this.onFrame(n,t);!n.stopped&&!i?this.scheduleFrame(e):this.cancelFrame(e)}}scheduleFrame(e){let t=requestAnimationFrame(this.constructFrame(e));this.rafIds.set(e,t)}cancelFrame(e){if(this.rafIds.has(e)){let t=this.rafIds.get(e);cancelAnimationFrame(t)}this.rafIds.delete(e)}onFrame(e,t){return e.callback(t)??!1}},Zf=class{constructor(e,t,n){this.animationFrameHandler=e,this.app=t,this.options=n,D(this,"currentTrail"),D(this,"pastTrails",[]),D(this,"container"),D(this,"trailElement"),this.animationFrameHandler.register(this,this.onFrame.bind(this)),this.trailElement=document.createElementNS(g1,"path")}get hasCurrentTrail(){return!!this.currentTrail}hasLastPoint(e,t){if(this.currentTrail){let n=this.currentTrail.originalPoints.length;return this.currentTrail.originalPoints[n-1][0]===e&&this.currentTrail.originalPoints[n-1][1]===t}return!1}start(e){e&&(this.container=e),this.trailElement.parentNode!==this.container&&this.container&&this.container.appendChild(this.trailElement),this.animationFrameHandler.start(this)}stop(){this.animationFrameHandler.stop(this),this.trailElement.parentNode===this.container&&this.container?.removeChild(this.trailElement)}startPath(e,t){this.currentTrail=new Xo(this.options),this.currentTrail.addPoint([e,t,performance.now()]),this.update()}addPointToPath(e,t){this.currentTrail&&(this.currentTrail.addPoint([e,t,performance.now()]),this.update())}endPath(){this.currentTrail&&(this.currentTrail.close(),this.currentTrail.options.keepHead=!1,this.pastTrails.push(this.currentTrail),this.currentTrail=void 0,this.update())}update(){this.start()}onFrame(){let e=[];for(let n of this.pastTrails)e.push(this.drawTrail(n,this.app.state));if(this.currentTrail){let n=this.drawTrail(this.currentTrail,this.app.state);e.push(n)}this.pastTrails=this.pastTrails.filter(n=>n.getStrokeOutline().length!==0),e.length===0&&this.stop();let t=e.join(" ").trim();this.trailElement.setAttribute("d",t),this.trailElement.setAttribute("fill",(this.options.fill??(()=>"black"))(this))}drawTrail(e,t){let n=e.getStrokeOutline(e.options.size/t.zoom.value).map(([i,r])=>{let a=ni({sceneX:i,sceneY:r},t);return[a.x,a.y]});return N1(n,!0)}},vA=class{constructor(e,t){this.animationFrameHandler=e,this.app=t,D(this,"localTrail"),D(this,"collabTrails",new Map),D(this,"container"),this.animationFrameHandler.register(this,this.onFrame.bind(this)),this.localTrail=new Zf(e,t,{...this.getTrailOptions(),fill:()=>Jg})}getTrailOptions(){return{simplify:0,streamline:.4,sizeMapping:e=>{let t=Math.max(0,1-(performance.now()-e.pressure)/1e3),n=(50-Math.min(50,e.totalLength-e.currentIndex))/50;return Math.min(Fa(n),Fa(t))}}}startPath(e,t){this.localTrail.startPath(e,t)}addPointToPath(e,t){this.localTrail.addPointToPath(e,t)}endPath(){this.localTrail.endPath()}start(e){this.container=e,this.animationFrameHandler.start(this),this.localTrail.start(e)}stop(){this.animationFrameHandler.stop(this),this.localTrail.stop()}onFrame(){this.updateCollabTrails()}updateCollabTrails(){if(!(!this.container||this.app.state.collaborators.size===0)){for(let[e,t]of this.app.state.collaborators.entries()){let n;this.collabTrails.has(e)?n=this.collabTrails.get(e):(n=new Zf(this.animationFrameHandler,this.app,{...this.getTrailOptions(),fill:()=>t.pointer?.laserColor||pu(e,t)}),n.start(this.container),this.collabTrails.set(e,n)),t.pointer&&t.pointer.tool==="laser"&&(t.button==="down"&&!n.hasCurrentTrail&&n.startPath(t.pointer.x,t.pointer.y),t.button==="down"&&n.hasCurrentTrail&&!n.hasLastPoint(t.pointer.x,t.pointer.y)&&n.addPointToPath(t.pointer.x,t.pointer.y),t.button==="up"&&n.hasCurrentTrail&&(n.addPointToPath(t.pointer.x,t.pointer.y),n.endPath()))}for(let e of this.collabTrails.keys())this.app.state.collaborators.has(e)||(this.collabTrails.get(e).stop(),this.collabTrails.delete(e))}}},bA=(e,t,n,i,r,a)=>{let{zoom:o}=i,c=180*n/Math.PI,d=e*(o.value-1)/2,h=t*(o.value-1)/2;return e>r&&o.value!==1&&(d=r*(o.value-1)/2),t>a&&o.value!==1&&(h=a*(o.value-1)/2),`translate(${d}px, ${h}px) scale(${o.value}) rotate(${c}deg)`},yA=({id:e,onChange:t,onSubmit:n,getViewportCoords:i,element:r,canvas:a,excalidrawContainer:o,app:c,autoSelect:d=!0})=>{let h=(P,B)=>{if(!B.style.fontFamily||!B.style.fontSize)return!1;let q=B.style.fontFamily.replace(/"/g,"");return Js({fontFamily:P.fontFamily})!==q||`${P.fontSize}px`!==B.style.fontSize},s=()=>{let P=c.state,B=or.getScene(r)?.getElement(e);if(!B)return;let{textAlign:q,verticalAlign:V}=B,Y=c.scene.getNonDeletedElementsMap();if(B&&te(B)){let ie=B.x,re=B.y,ue=Ri(B,c.scene.getNonDeletedElementsMap()),ct=B.width,Pt=B.height,dn=B.width,Dn=B.height;if(ue&&B.containerId){if(mt(ue)){let Yi=ne.getBoundTextElementPosition(ue,B,Y);ie=Yi.x,re=Yi.y}let Ol=h(B,l),Us;if(Ol?Us=Ic(ue.id,ue.height):(Us=bb[ue.id],Us||(Us=Ic(ue.id,ue.height))),dn=dh(ue,B),Dn=kb(ue,B),!mt(ue)&&Pt>Dn){let Yi=yo(Pt,ue.type);W(ue,{height:Yi});return}else if(!mt(ue)&&ue.height>Us.height&&Pt<Dn){let Yi=yo(Pt,ue.type);W(ue,{height:Yi})}else{let{y:Yi}=ch(ue,B,Y);re=Yi}}let[Yt,Ci]=i(ie,re),js=l.selectionStart,_t=l.selectionEnd,Ge=l.value.length;if(js===_t&&_t!==Ge){let Ol=Ge-_t;l.selectionStart=l.value.length-Ol,l.selectionEnd=l.value.length-Ol}ue?ct+=.5:(dn=(P.width-8-Yt)/P.zoom.value,ct=Math.min(ct,dn)),Pt*=1.05;let Nu=mn(B),Pr=(P.height-Ci)/P.zoom.value;Object.assign(l.style,{font:Nu,lineHeight:B.lineHeight,width:`${ct}px`,height:`${Pt}px`,left:`${Yt}px`,top:`${Ci}px`,transform:bA(ct,Pt,Sb(B,ue),P,dn,Pr),textAlign:q,verticalAlign:V,color:B.strokeColor,opacity:B.opacity/100,filter:"var(--theme-filter)",maxHeight:`${Pr}px`}),l.scrollTop=0,ql()&&(l.style.fontFamily=Js(B)),W(B,{x:ie,y:re})}},l=document.createElement("textarea");l.dir="auto",l.tabIndex=0,l.dataset.type="wysiwyg",l.wrap="off",l.classList.add("excalidraw-wysiwyg");let m="pre",u="normal";(Gt(r)||!r.autoResize)&&(m="pre-wrap",u="break-word"),Object.assign(l.style,{position:"absolute",display:"inline-block",minHeight:"1em",backfaceVisibility:"hidden",margin:0,padding:0,border:0,outline:0,resize:"none",background:"transparent",overflow:"hidden",zIndex:"var(--zIndex-wysiwyg)",wordBreak:u,whiteSpace:m,overflowWrap:"break-word",boxSizing:"content-box"}),l.value=r.originalText,s(),t&&(l.onpaste=async P=>{let B=await Dh(P,!0);if(!B.text)return;let q=so(B.text);if(!q)return;let V=Ri(r,c.scene.getNonDeletedElementsMap()),Y=mn({fontSize:c.state.currentItemFontSize,fontFamily:c.state.currentItemFontFamily});if(V){let ie=Le(V,c.scene.getNonDeletedElementsMap()),re=cm(`${l.value}${q}`,Y,dh(V,ie)),ue=G1(re,Y);l.style.width=`${ue}px`}},l.oninput=()=>{let P=so(l.value);if(l.value!==P){let B=l.selectionStart;l.value=P,l.selectionStart=B,l.selectionEnd=B}t(l.value)}),l.onkeydown=P=>{if(!P.shiftKey&&fx.keyTest(P))P.preventDefault(),c.actionManager.executeAction(fx),s();else if(!P.shiftKey&&gx.keyTest(P))P.preventDefault(),c.actionManager.executeAction(gx),s();else if(!P.shiftKey&&vx.keyTest(P))P.preventDefault(),c.actionManager.executeAction(vx),s();else if(mx.keyTest(P))c.actionManager.executeAction(mx);else if(hx.keyTest(P))c.actionManager.executeAction(hx);else if(P.key===k.ESCAPE)P.preventDefault(),x=!0,S();else if(P.key===k.ENTER&&P[k.CTRL_OR_CMD]){if(P.preventDefault(),P.isComposing||P.keyCode===229)return;x=!0,S()}else if(P.key===k.TAB||P[k.CTRL_OR_CMD]&&(P.code===me.BRACKET_LEFT||P.code===me.BRACKET_RIGHT)){if(P.preventDefault(),P.isComposing)return;P.shiftKey||P.code===me.BRACKET_LEFT?E():v(),l.dispatchEvent(new Event("input"))}};let p=4,f=" ".repeat(p),g=new RegExp(`^ {1,${p}}`),v=()=>{let{selectionStart:P,selectionEnd:B}=l,q=b(),V=l.value;q.forEach(Y=>{let ie=V.slice(0,Y),re=V.slice(Y);V=`${ie}${f}${re}`}),l.value=V,l.selectionStart=P+p,l.selectionEnd=B+p*q.length},E=()=>{let{selectionStart:P,selectionEnd:B}=l,q=b(),V=[],Y=l.value;q.forEach(ie=>{let re=Y.slice(ie,ie+p).match(g);if(re){let ue=Y.slice(0,ie),ct=Y.slice(ie+re[0].length);Y=`${ue}${ct}`,V.push(ie)}}),l.value=Y,V.length&&(P>V[V.length-1]?l.selectionStart=Math.max(P-p,V[V.length-1]):l.selectionStart=P,l.selectionEnd=Math.max(l.selectionStart,B-p*V.length))},b=()=>{let{selectionStart:P,selectionEnd:B,value:q}=l,V=q.slice(0,P).match(/[^\n]*$/)[0].length;return P=P-V,q.slice(P,B).split(`
54
+ `).reduce((Y,ie,re,ue)=>Y.concat(re?Y[re-1]+ue[re-1].length+1:P),[]).reverse()},w=P=>{P.target instanceof HTMLCanvasElement&&(P.preventDefault(),P.stopPropagation())},x=!1,S=()=>{if(_)return;_=!0,C();let P=or.getScene(r)?.getElement(r.id);if(!P)return;let B=Ri(P,c.scene.getNonDeletedElementsMap());if(B){if(l.value.trim()){let q=xb(B);!q||q!==r.id?W(B,{boundElements:(B.boundElements||[]).concat({type:"text",id:r.id})}):mt(B)&&gy(B)}else W(B,{boundElements:B.boundElements?.filter(q=>!te(q))});$t(P,B,c.scene.getNonDeletedElementsMap())}n({viaKeyboard:x,nextOriginalText:l.value})},C=()=>{l.onblur=null,l.oninput=null,l.onkeydown=null,H&&H.disconnect(),window.removeEventListener("resize",s),window.removeEventListener("wheel",w,!0),window.removeEventListener("pointerdown",M),window.removeEventListener("pointerup",T),window.removeEventListener("blur",S),window.removeEventListener("beforeunload",S),R(),z(),l.remove()},T=P=>{window.removeEventListener("pointerup",T);let B=P?.target,q=B instanceof HTMLElement&&B.classList.contains("properties-trigger");setTimeout(()=>{l.onblur=S,q||l.focus()})},L=()=>{l.onblur=null,window.addEventListener("pointerup",T),window.addEventListener("blur",S)},M=P=>{let B=P?.target;if(P.button===Ti.WHEEL){B instanceof HTMLTextAreaElement&&(P.preventDefault(),c.handleCanvasPanUsingWheelOrSpaceDrag(P)),L();return}let q=B instanceof HTMLElement&&B.classList.contains("properties-trigger");(P.target instanceof HTMLElement||P.target instanceof SVGElement)&&P.target.closest(`.${$r.SHAPE_ACTIONS_MENU}, .${$r.ZOOM_ACTIONS}`)&&!Ki(P.target)||q?L():P.target instanceof HTMLCanvasElement&&!ql()&&requestAnimationFrame(()=>{S()})},R=c.scene.onUpdate(()=>{s(),document.activeElement?.closest(".properties-content")||l.focus()}),z=c.onScrollChangeEmitter.on(()=>{s()}),_=!1;d&&l.select(),T();let H=null;a&&"ResizeObserver"in window?(H=new window.ResizeObserver(()=>{s()}),H.observe(a)):window.addEventListener("resize",s),l.onpointerdown=P=>P.stopPropagation(),requestAnimationFrame(()=>{window.addEventListener("pointerdown",M,{capture:!0})}),window.addEventListener("beforeunload",S),o?.querySelector(".excalidraw-textEditorContainer").appendChild(l)},EA=U({name:"autoResize",label:"labels.autoResize",icon:null,trackEvent:{category:"element"},predicate:(e,t,n,i)=>{let r=se(e,t);return r.length===1&&te(r[0])&&!r[0].autoResize},perform:(e,t,n,i)=>{let r=se(e,t);return{appState:t,elements:e.map(a=>{if(a.id===r[0].id&&te(a)){let o=Di(a.originalText,mn(a),a.lineHeight);return ae(a,{autoResize:!0,width:o.width,height:o.height,text:a.originalText})}return a}),captureUpdate:N.IMMEDIATELY}}}),wA=e=>{let t=["flowchart","graph","sequenceDiagram","classDiagram","stateDiagram","stateDiagram-v2","erDiagram","journey","gantt","pie","quadrantChart","requirementDiagram","gitGraph","C4Context","mindmap","timeline","zenuml","sankey","xychart","block"];return new RegExp(`^(?:%%{.*?}%%[\\s\\n]*)?\\b(?:${t.map(n=>`\\s*${n}(-beta)?`).join("|")})\\b`).test(e.trim())},GI=({canvas:e,rc:t,newElement:n,elementsMap:i,allElementsMap:r,scale:a,appState:o,renderConfig:c})=>{if(e){let[d,h]=xh(e,a),s=Sh({canvas:e,scale:a,normalizedWidth:d,normalizedHeight:h});s.save(),s.scale(o.zoom.value,o.zoom.value),n&&n.type!=="selection"?H0(n,i,r,t,s,c,o):s.clearRect(0,0,d,h)}},xA=Xl(e=>{GI(e)},{trailing:!0}),SA=(e,t)=>{if(t){xA(e);return}GI(e)},CA=e=>{let t=(0,Lu.useRef)(null);return(0,Lu.useEffect)(()=>{t.current&&SA({canvas:t.current,scale:e.scale,newElement:e.appState.newElement,elementsMap:e.elementsMap,allElementsMap:e.allElementsMap,rc:e.rc,renderConfig:e.renderConfig,appState:e.appState},wg())}),(0,KI.jsx)("canvas",{className:"excalidraw__canvas",style:{width:e.appState.width,height:e.appState.height},width:e.appState.width*e.scale,height:e.appState.height*e.scale,ref:t})},IA=CA,ZI=et.default.createContext(null),XI=et.default.createContext(null),qI={viewport:{isMobile:!1,isLandscape:!1},editor:{isMobile:!1,canFitSidebar:!1},isTouchScreen:!1},xg=et.default.createContext(qI);xg.displayName="DeviceContext";var Sg=et.default.createContext({container:null,id:null});Sg.displayName="ExcalidrawContainerContext";var Cg=et.default.createContext([]);Cg.displayName="ExcalidrawElementsContext";var Ig=et.default.createContext({...Xs(),width:0,height:0,offsetLeft:0,offsetTop:0});Ig.displayName="ExcalidrawAppStateContext";var Tg=et.default.createContext(()=>{console.warn("Uninitialized ExcalidrawSetAppStateContext context!")});Tg.displayName="ExcalidrawSetAppStateContext";var kg=et.default.createContext(null);kg.displayName="ExcalidrawActionManagerContext";var xi=()=>(0,et.useContext)(ZI),Nl=()=>(0,et.useContext)(XI),lt=()=>(0,et.useContext)(xg),Si=()=>(0,et.useContext)(Sg),Ru=()=>(0,et.useContext)(Cg),Pl=()=>(0,et.useContext)(Ig),nt=()=>(0,et.useContext)(Tg),Jt=()=>(0,et.useContext)(kg),Jo=!1,bf=0,da=!1,el=!1,yf=!1,Ef={horizontal:null,vertical:null},yr=0,tl=!1,wf=new Map,Rd=!1,gS=0,vS=!1,nl=null,pe={pointers:new Map,lastCenter:null,initialDistance:null,initialScale:null},TA=class QI extends et.default.Component{constructor(t){super(t),D(this,"canvas"),D(this,"interactiveCanvas",null),D(this,"rc"),D(this,"unmounted",!1),D(this,"actionManager"),D(this,"device",qI),D(this,"excalidrawContainerRef",et.default.createRef()),D(this,"scene"),D(this,"fonts"),D(this,"renderer"),D(this,"visibleElements"),D(this,"resizeObserver"),D(this,"nearestScrollableContainer"),D(this,"library"),D(this,"libraryItemsFromStorage"),D(this,"id"),D(this,"store"),D(this,"history"),D(this,"excalidrawContainerValue"),D(this,"files",{}),D(this,"imageCache",new Map),D(this,"iFrameRefs",new Map),D(this,"embedsValidationStatus",new Map),D(this,"initializedEmbeds",new Set),D(this,"elementsPendingErasure",new Set),D(this,"flowChartCreator",new WD),D(this,"flowChartNavigator",new HD),D(this,"hitLinkElement"),D(this,"lastPointerDownEvent",null),D(this,"lastPointerUpEvent",null),D(this,"lastPointerMoveEvent",null),D(this,"lastPointerMoveCoords",null),D(this,"lastViewportPosition",{x:0,y:0}),D(this,"animationFrameHandler",new gA),D(this,"laserTrails",new vA(this.animationFrameHandler,this)),D(this,"eraserTrail",new Zf(this.animationFrameHandler,this,{streamline:.2,size:5,keepHead:!0,sizeMapping:s=>{let l=Math.max(0,1-(performance.now()-s.pressure)/200),m=(10-Math.min(10,s.totalLength-s.currentIndex))/10;return Math.min(Fa(m),Fa(l))},fill:()=>this.state.theme===he.LIGHT?"rgba(0, 0, 0, 0.2)":"rgba(255, 255, 255, 0.2)"})),D(this,"onChangeEmitter",new oi),D(this,"onPointerDownEmitter",new oi),D(this,"onPointerUpEmitter",new oi),D(this,"onUserFollowEmitter",new oi),D(this,"onScrollChangeEmitter",new oi),D(this,"missingPointerEventCleanupEmitter",new oi),D(this,"onRemoveEventListenersEmitter",new oi),D(this,"getEffectiveGridSize",()=>bo(this)?this.state.gridSize:null),D(this,"updateEmbedValidationStatus",(s,l)=>{this.embedsValidationStatus.set(s.id,l),Vr.delete(s)}),D(this,"updateEmbeddables",()=>{let s=new Set,l=!1;this.scene.getNonDeletedElements().filter(m=>{if(nn(m)){if(s.add(m.id),!this.embedsValidationStatus.has(m.id)){l=!0;let u=xo(m.link,this.props.validateEmbeddable);this.updateEmbedValidationStatus(m,u)}}else Hr(m)&&s.add(m.id);return!1}),l&&this.scene.triggerUpdate(),this.iFrameRefs.forEach((m,u)=>{s.has(u)||this.iFrameRefs.delete(u)})}),D(this,"getFrameNameDOMId",s=>`${this.id}-frame-name-${s.id}`),D(this,"frameNameBoundsCache",{get:s=>{let l=this.frameNameBoundsCache._cache.get(s.id);if(!l||l.zoom!==this.state.zoom.value||l.versionNonce!==s.versionNonce){let m=document.getElementById(this.getFrameNameDOMId(s));if(m){let u=m.getBoundingClientRect(),p=Fe({clientX:u.x,clientY:u.y},this.state),f=Fe({clientX:u.right,clientY:u.bottom},this.state);return l={x:p.x,y:p.y,width:f.x-p.x,height:f.y-p.y,angle:0,zoom:this.state.zoom.value,versionNonce:s.versionNonce},this.frameNameBoundsCache._cache.set(s.id,l),l}return null}return l},_cache:new Map}),D(this,"resetEditingFrame",s=>{s&&W(s,{name:s.name?.trim()||null}),this.setState({editingFrame:null})}),D(this,"renderFrameNames",()=>{if(!this.state.frameRendering.enabled||!this.state.frameRendering.name)return this.state.editingFrame&&this.resetEditingFrame(null),null;let s=this.state.theme===he.DARK;return this.scene.getNonDeletedFramesLikes().map(l=>{if(!Oc(l,this.canvas.width/window.devicePixelRatio,this.canvas.height/window.devicePixelRatio,{offsetLeft:this.state.offsetLeft,offsetTop:this.state.offsetTop,scrollX:this.state.scrollX,scrollY:this.state.scrollY,zoom:this.state.zoom},this.scene.getNonDeletedElementsMap()))return this.state.editingFrame===l.id&&this.resetEditingFrame(l),null;let{x:m,y:u}=ni({sceneX:l.x,sceneY:l.y},this.state),p=6,f,g=hy(l);if(l.id===this.state.editingFrame){let v=g;f=(0,oe.jsx)("input",{autoFocus:!0,value:v,onChange:E=>{W(l,{name:E.target.value})},onFocus:E=>E.target.select(),onBlur:()=>this.resetEditingFrame(l),onKeyDown:E=>{(E.key===k.ESCAPE||E.key===k.ENTER)&&this.resetEditingFrame(l)},style:{background:this.state.viewBackgroundColor,filter:s?d1:"none",zIndex:2,border:"none",display:"block",padding:`${p}px`,borderRadius:4,boxShadow:"inset 0 0 0 1px var(--color-primary)",fontFamily:"Assistant",fontSize:"14px",transform:`translate(-${p}px, ${p}px)`,color:"var(--color-gray-80)",overflow:"hidden",maxWidth:`${document.body.clientWidth-m-p}px`},size:v.length+1||1,dir:"auto",autoComplete:"off",autoCapitalize:"off",autoCorrect:"off"})}else f=g;return(0,oe.jsx)("div",{id:this.getFrameNameDOMId(l),style:{position:"absolute",bottom:`${this.state.height+ei.nameOffsetY-u+this.state.offsetTop}px`,left:`${m-this.state.offsetLeft}px`,zIndex:2,fontSize:ei.nameFontSize,color:s?ei.nameColorDarkTheme:ei.nameColorLightTheme,lineHeight:ei.nameLineHeight,width:"max-content",maxWidth:`${l.width}px`,overflow:l.id===this.state.editingFrame?"visible":"hidden",whiteSpace:"nowrap",textOverflow:"ellipsis",cursor:ye.MOVE,pointerEvents:this.state.viewModeEnabled?Fr.disabled:Fr.enabled},onPointerDown:v=>this.handleCanvasPointerDown(v),onWheel:v=>this.handleWheel(v),onContextMenu:this.handleCanvasContextMenu,onDoubleClick:()=>{this.setState({editingFrame:l.id})},children:f},l.id)})}),D(this,"focusContainer",()=>{this.excalidrawContainerRef.current?.focus()}),D(this,"getSceneElementsIncludingDeleted",()=>this.scene.getElementsIncludingDeleted()),D(this,"getSceneElements",()=>this.scene.getNonDeletedElements()),D(this,"onInsertElements",s=>{this.addElementsFromPasteOrLibrary({elements:s,position:"center",files:null})}),D(this,"onExportImage",async(s,l,m)=>{we("export",s,"ui");let u=await hu(s,l,this.state,this.files,{exportBackground:this.state.exportBackground,name:this.getName(),viewBackgroundColor:this.state.viewBackgroundColor,exportingFrame:m.exportingFrame}).catch(rm).catch(p=>{console.error(p),this.setState({errorMessage:p.message})});this.state.exportEmbedScene&&u&&Kh(u)&&this.setState({fileHandle:u})}),D(this,"magicGenerations",new Map),D(this,"updateMagicGeneration",({frameElement:s,data:l})=>{l.status==="pending"?W(s,{customData:{generationData:void 0}},!1):W(s,{customData:{generationData:l}},!1),this.magicGenerations.set(s.id,l),this.triggerRender()}),D(this,"plugins",{}),D(this,"onMagicframeToolSelect",()=>{let s=this.scene.getSelectedElements({selectedElementIds:this.state.selectedElementIds});if(s.length===0)this.setActiveTool({type:en.magicframe}),we("ai","tool-select (empty-selection)","d2c");else{let l=s.length===1&&nc(s[0])&&s[0];if(!l&&s.some(u=>ge(u)||u.frameId)){this.setActiveTool({type:en.magicframe});return}we("ai","tool-select (existing selection)","d2c");let m;if(l)m=l;else{let[u,p,f,g]=Ve(s),v=50;m=Dc({...ei,x:u-v,y:p-v,width:f-u+v*2,height:g-p+v*2,opacity:100,locked:!1}),this.scene.insertElement(m);for(let E of s)W(E,{frameId:m.id});this.setState({selectedElementIds:{[m.id]:!0}})}this.onMagicFrameGenerate(m,"upstream")}}),D(this,"openEyeDropper",({type:s})=>{Wn.set(au,{swapPreviewOnAlt:!0,colorPickerType:s==="stroke"?"elementStroke":"elementBackground",onSelect:(l,m)=>{let u=s==="background"&&m.altKey||s==="stroke"&&!m.altKey;!this.scene.getSelectedElements(this.state).length||this.state.activeTool.type!=="selection"?u?this.syncActionResult({appState:{...this.state,currentItemStrokeColor:l},captureUpdate:N.IMMEDIATELY}):this.syncActionResult({appState:{...this.state,currentItemBackgroundColor:l},captureUpdate:N.IMMEDIATELY}):this.updateScene({elements:this.scene.getElementsIncludingDeleted().map(p=>this.state.selectedElementIds[p.id]?ae(p,{[u?"strokeColor":"backgroundColor"]:l}):p),captureUpdate:N.IMMEDIATELY})},keepOpenOnAlt:!1})}),D(this,"dismissLinearEditor",()=>{setTimeout(()=>{this.setState({editingLinearElement:null})})}),D(this,"syncActionResult",ze(s=>{if(this.unmounted||s===!1)return;s.captureUpdate===N.NEVER?this.store.shouldUpdateSnapshot():s.captureUpdate===N.IMMEDIATELY&&this.store.shouldCaptureIncrement();let l=!1,m=null;if(s.elements&&(this.scene.replaceAllElements(s.elements),l=!0),s.files&&(this.addMissingFiles(s.files,s.replaceFiles),this.addNewImagesToImageCache()),s.appState||m||this.state.contextMenu){let u=s?.appState?.viewModeEnabled||!1,p=s?.appState?.zenModeEnabled||!1,f=s?.appState?.theme||this.props.theme||he.LIGHT,g=s?.appState?.name??this.state.name,v=s?.appState?.errorMessage??this.state.errorMessage;typeof this.props.viewModeEnabled<"u"&&(u=this.props.viewModeEnabled),typeof this.props.zenModeEnabled<"u"&&(p=this.props.zenModeEnabled),m=s.appState?.editingTextElement||null,s.elements&&m&&s.elements.forEach(E=>{m?.id===E.id&&m!==E&&Gh(E)&&te(E)&&(m=E)}),m?.isDeleted&&(m=null),this.setState(E=>{let b=s.appState||{};return{...E,...b,contextMenu:null,editingTextElement:m,viewModeEnabled:u,zenModeEnabled:p,theme:f,name:g,errorMessage:v}}),l=!0}!l&&s.captureUpdate!==N.EVENTUALLY&&this.scene.triggerUpdate()})),D(this,"onBlur",ze(()=>{da=!1,this.setState({isBindingEnabled:!0})})),D(this,"onUnload",()=>{this.onBlur()}),D(this,"disableEvent",s=>{s.preventDefault()}),D(this,"resetHistory",()=>{this.history.clear()}),D(this,"resetStore",()=>{this.store.clear()}),D(this,"resetScene",ze(s=>{this.scene.replaceAllElements([]),this.setState(l=>({...Xs(),isLoading:s?.resetLoadingState?!1:l.isLoading,theme:this.state.theme})),this.resetStore(),this.resetHistory()})),D(this,"initializeScene",async()=>{"launchQueue"in window&&"LaunchParams"in window&&window.launchQueue.setConsumer(async m=>{if(!m.files.length)return;let u=m.files[0],p=await u.getFile();this.loadFileToCanvas(new File([p],p.name||"",{type:p.type}),u)}),this.props.theme&&this.setState({theme:this.props.theme}),this.state.isLoading||this.setState({isLoading:!0});let s=null;try{typeof this.props.initialData=="function"?s=await this.props.initialData()||null:s=await this.props.initialData||null,s?.libraryItems&&this.library.updateLibrary({libraryItems:s.libraryItems,merge:!0}).catch(m=>{console.error(m)})}catch(m){console.error(m),s={appState:{errorMessage:m.message||"Encountered an error during importing or restoring scene data"}}}let l=ey(s,null,null,{repairBindings:!0});l.appState={...l.appState,theme:this.props.theme||l.appState.theme,openSidebar:l.appState?.openSidebar||this.state.openSidebar,activeTool:l.appState.activeTool.type==="image"?{...l.appState.activeTool,type:"selection"}:l.appState.activeTool,isLoading:!1,toast:this.state.toast},s?.scrollToContent&&(l.appState={...l.appState,...go(l.elements,{...l.appState,width:this.state.width,height:this.state.height,offsetTop:this.state.offsetTop,offsetLeft:this.state.offsetLeft})}),this.resetStore(),this.resetHistory(),this.syncActionResult({...l,captureUpdate:N.NEVER}),this.clearImageShapeCache(),this.fonts.loadSceneFonts().then(m=>{this.fonts.onLoaded(m)}),Co(window.location.href)&&this.scrollToContent(window.location.href,{animate:!1})}),D(this,"isMobileBreakpoint",(s,l)=>s<u1||l<h1&&s<m1),D(this,"refreshViewportBreakpoints",()=>{if(!this.excalidrawContainerRef.current)return;let{clientWidth:s,clientHeight:l}=document.body,m=this.device.viewport,u=io(m,{isLandscape:s>l,isMobile:this.isMobileBreakpoint(s,l)});return m!==u?(this.device={...this.device,viewport:u},!0):!1}),D(this,"refreshEditorBreakpoints",()=>{let s=this.excalidrawContainerRef.current;if(!s)return;let{width:l,height:m}=s.getBoundingClientRect(),u=this.props.UIOptions.dockedSidebarBreakpoint!=null?this.props.UIOptions.dockedSidebarBreakpoint:p1,p=this.device.editor,f=io(p,{isMobile:this.isMobileBreakpoint(l,m),canFitSidebar:l>u});return p!==f?(this.device={...this.device,editor:f},!0):!1}),D(this,"onResize",ze(()=>{this.scene.getElementsIncludingDeleted().forEach(s=>Vr.delete(s)),this.refreshViewportBreakpoints(),this.updateDOMRect(),Bl||this.refreshEditorBreakpoints(),this.setState({})})),D(this,"onFullscreenChange",()=>{!document.fullscreenElement&&this.state.activeEmbeddable?.state==="active"&&this.setState({activeEmbeddable:null})}),D(this,"renderInteractiveSceneCallback",({atLeastOneVisibleElement:s,scrollBars:l,elementsMap:m})=>{l&&(Ef=l);let u=this.state.editingTextElement?!1:!s&&m.size>0;this.state.scrolledOutside!==u&&this.setState({scrolledOutside:u}),this.scheduleImageRefresh()}),D(this,"onScroll",eo(()=>{let{offsetTop:s,offsetLeft:l}=this.getCanvasOffsets();this.setState(m=>m.offsetLeft===l&&m.offsetTop===s?null:{offsetTop:s,offsetLeft:l})},l1)),D(this,"onCut",ze(s=>{!this.excalidrawContainerRef.current?.contains(document.activeElement)||Ki(s.target)||(this.actionManager.executeAction(Sx,"keyboard",s),s.preventDefault(),s.stopPropagation())})),D(this,"onCopy",ze(s=>{!this.excalidrawContainerRef.current?.contains(document.activeElement)||Ki(s.target)||(this.actionManager.executeAction(Fd,"keyboard",s),s.preventDefault(),s.stopPropagation())})),D(this,"onTouchStart",s=>{if(Kg&&s.preventDefault(),!Jo){Jo=!0,clearTimeout(bf),bf=window.setTimeout(QI.resetTapTwice,s1);return}if(Jo&&s.touches.length===1){let l=s.touches[0];this.handleCanvasDoubleClick({clientX:l.clientX,clientY:l.clientY}),Jo=!1,clearTimeout(bf)}s.touches.length===2&&this.setState({selectedElementIds:fe({},this.state),activeEmbeddable:null})}),D(this,"onTouchEnd",s=>{this.resetContextMenuTimer(),s.touches.length>0?this.setState({previousSelectedElementIds:{},selectedElementIds:fe(this.state.previousSelectedElementIds,this.state)}):pe.pointers.clear()}),D(this,"pasteFromClipboard",ze(async s=>{let l=!!Rd,m=document.activeElement,u=this.excalidrawContainerRef.current?.contains(m);if(s&&!u)return;let p=document.elementFromPoint(this.lastViewportPosition.x,this.lastViewportPosition.y);if(s&&(!(p instanceof HTMLCanvasElement)||Ki(m)))return;let{x:f,y:g}=Fe({clientX:this.lastViewportPosition.x,clientY:this.lastViewportPosition.y},this.state),v=s?.clipboardData?.files[0],E=await Dh(s,l);if(!v&&!l){if(E.mixedContent)return this.addElementsFromMixedContentPaste(E.mixedContent,{isPlainPaste:l,sceneX:f,sceneY:g});if(E.text){let b=E.text.trim();b.startsWith("<svg")&&b.endsWith("</svg>")&&(v=Xh(b))}}if(Bc(v)&&!E.spreadsheet){if(!this.isToolSupported("image")){this.setState({errorMessage:y("errors.imageToolNotSupported")});return}let b=this.createImageElement({sceneX:f,sceneY:g});this.insertImageElement(b,v),this.initializeImageDimensions(b),this.setState({selectedElementIds:fe({[b.id]:!0},this.state)});return}if(this.props.onPaste)try{if(await this.props.onPaste(E,s)===!1)return}catch(b){console.error(b)}if(E.errorMessage)this.setState({errorMessage:E.errorMessage});else if(E.spreadsheet&&!l)this.setState({pasteDialog:{data:E.spreadsheet,shown:!0}});else if(E.elements){let b=E.programmaticAPI?Gf(E.elements):E.elements;this.addElementsFromPasteOrLibrary({elements:b,files:E.files||null,position:"cursor",retainSeed:l})}else if(E.text){if(E.text&&wA(E.text)){let x=await import("./chunk-B6R5LTP2.js");try{let{elements:S,files:C={}}=await x.parseMermaidToExcalidraw(E.text),T=Gf(S,{regenerateIds:!0});this.addElementsFromPasteOrLibrary({elements:T,files:C,position:"cursor"});return}catch(S){console.warn(`parsing pasted text as mermaid definition failed: ${S.message}`)}}let b=P1(E.text).split(/\n+/).map(x=>x.trim()).filter(Boolean),w=b.map(x=>Fb(x)).filter(x=>xo(x,this.props.validateEmbeddable)&&(/^(http|https):\/\/[^\s/$.?#].[^\s]*$/.test(x)||Ka(x)?.type==="video"));if(!Rd&&w.length>0&&w.length===b.length){let x=[];for(let S of w){let C=x[x.length-1],T=this.insertEmbeddableElement({sceneX:C?C.x+C.width+20:f,sceneY:g,link:ir(S)});T&&x.push(T)}x.length&&this.setState({selectedElementIds:Object.fromEntries(x.map(S=>[S.id,!0]))});return}this.addTextFromPaste(E.text,l)}this.setActiveTool({type:"selection"}),s?.preventDefault()})),D(this,"addElementsFromPasteOrLibrary",s=>{let l=Jb(s.elements,null,void 0),[m,u,p,f]=Ve(l),g=zr(m,p)/2,v=zr(u,f)/2,E=typeof s.position=="object"?s.position.clientX:s.position==="cursor"?this.lastViewportPosition.x:this.state.width/2+this.state.offsetLeft,b=typeof s.position=="object"?s.position.clientY:s.position==="cursor"?this.lastViewportPosition.y:this.state.height/2+this.state.offsetTop,{x:w,y:x}=Fe({clientX:E,clientY:b},this.state),S=w-g,C=x-v,[T,L]=ht(S,C,this.getEffectiveGridSize()),M=gh(l.map(P=>ae(P,{x:P.x+T-m,y:P.y+L-u})),{randomizeSeed:!s.retainSeed}),R=this.scene.getElementsIncludingDeleted(),z=[...R,...M];z=this.props.onDuplicate?.(z,R)||z,sr(z,Ee(M));let _=this.getTopLayerFrameAtSceneCoords({x:w,y:x});if(_){let P=uy(M,_);ko(z,P,_,this.state)}this.scene.replaceAllElements(z),M.forEach(P=>{if(te(P)&&Gt(P)){let B=Ri(P,this.scene.getElementsMapIncludingDeleted());$t(P,B,this.scene.getElementsMapIncludingDeleted())}}),Gg&&za.loadElementsFonts(M).then(P=>{this.fonts.onLoaded(P)}),s.files&&this.addMissingFiles(s.files),this.store.shouldCaptureIncrement();let H=Bh(M);this.setState({...this.state,openSidebar:this.state.openSidebar&&this.device.editor.canFitSidebar&&Wn.get(fg)?this.state.openSidebar:null,...wt({editingGroupId:null,selectedElementIds:H.reduce((P,B)=>(Gt(B)||(P[B.id]=!0),P),{})},this.scene.getNonDeletedElements(),this.state,this)},()=>{s.files&&this.addNewImagesToImageCache()}),this.setActiveTool({type:"selection"}),s.fitToContent&&this.scrollToContent(M,{fitToContent:!0,canvasOffsets:this.getEditorUIOffsets()})}),D(this,"setAppState",(s,l)=>{this.setState(s,l)}),D(this,"removePointer",s=>{yr&&this.resetContextMenuTimer(),pe.pointers.delete(s.pointerId)}),D(this,"toggleLock",(s="ui")=>{this.state.activeTool.locked||we("toolbar","toggleLock",`${s} (${this.device.editor.isMobile?"mobile":"desktop"})`),this.setState(l=>({activeTool:{...l.activeTool,...it(this.state,l.activeTool.locked?{type:"selection"}:l.activeTool),locked:!l.activeTool.locked}}))}),D(this,"updateFrameRendering",s=>{this.setState(l=>{let m=typeof s=="function"?s(l.frameRendering):s;return{frameRendering:{enabled:m?.enabled??l.frameRendering.enabled,clip:m?.clip??l.frameRendering.clip,name:m?.name??l.frameRendering.name,outline:m?.outline??l.frameRendering.outline}}})}),D(this,"togglePenMode",s=>{this.setState(l=>({penMode:s??!l.penMode,penDetected:!0}))}),D(this,"onHandToolToggle",()=>{this.actionManager.executeAction(kM)}),D(this,"zoomCanvas",s=>{this.setState({...ua({viewportX:this.state.width/2+this.state.offsetLeft,viewportY:this.state.height/2+this.state.offsetTop,nextZoom:Li(s)},this.state)})}),D(this,"cancelInProgressAnimation",null),D(this,"scrollToContent",(s=this.scene.getNonDeletedElements(),l)=>{if(typeof s=="string"){let g;if(Co(s)?g=Gb(s):g=s,g){let v=this.scene.getElementsFromId(g);v?.length?this.scrollToContent(v,{fitToContent:l?.fitToContent??!0,animate:l?.animate??!0}):Co(s)&&this.setState({toast:{message:y("elementLink.notFound"),duration:3e3,closable:!0}})}return}this.cancelInProgressAnimation?.();let m=Array.isArray(s)?s:[s],u=this.state.zoom,p=this.state.scrollX,f=this.state.scrollY;if(l?.fitToContent||l?.fitToViewport){let{appState:g}=uu({canvasOffsets:l.canvasOffsets,targetElements:m,appState:this.state,fitToViewport:!!l?.fitToViewport,viewportZoomFactor:l?.viewportZoomFactor,minZoom:l?.minZoom,maxZoom:l?.maxZoom});u=g.zoom,p=g.scrollX,f=g.scrollY}else{let g=go(m,this.state);p=g.scrollX,f=g.scrollY}if(l?.animate){let g=this.state.scrollX,v=this.state.scrollY,E=this.state.zoom.value,b=S1({fromValues:{scrollX:g,scrollY:v,zoom:E},toValues:{scrollX:p,scrollY:f,zoom:u.value},interpolateValue:(w,x,S,C)=>{if(C==="zoom")return w*Math.pow(x/w,Fa(S))},onStep:({scrollX:w,scrollY:x,zoom:S})=>{this.setState({scrollX:w,scrollY:x,zoom:{value:S}})},onStart:()=>{this.setState({shouldCacheIgnoreZoom:!0})},onEnd:()=>{this.setState({shouldCacheIgnoreZoom:!1})},onCancel:()=>{this.setState({shouldCacheIgnoreZoom:!1})},duration:l?.duration??500});this.cancelInProgressAnimation=()=>{b(),this.cancelInProgressAnimation=null}}else this.setState({scrollX:p,scrollY:f,zoom:u})}),D(this,"maybeUnfollowRemoteUser",()=>{this.state.userToFollow&&this.setState({userToFollow:null})}),D(this,"translateCanvas",s=>{this.cancelInProgressAnimation?.(),this.maybeUnfollowRemoteUser(),this.setState(s)}),D(this,"setToast",s=>{this.setState({toast:s})}),D(this,"restoreFileFromShare",async()=>{try{let s=await caches.open("web-share-target"),l=await s.match("shared-file");if(l){let m=await l.blob(),u=new File([m],m.name||"",{type:m.type});this.loadFileToCanvas(u,null),await s.delete("shared-file"),window.history.replaceState(null,Xg,window.location.pathname)}}catch(s){this.setState({errorMessage:s.message})}}),D(this,"addFiles",ze(s=>{let{addedFiles:l}=this.addMissingFiles(s);this.clearImageShapeCache(l),this.scene.triggerUpdate(),this.addNewImagesToImageCache()})),D(this,"addMissingFiles",(s,l=!1)=>{let m=l?{}:{...this.files},u={},p=Array.isArray(s)?s:Object.values(s);for(let f of p)if(!m[f.id]&&(u[f.id]=f,m[f.id]=f,f.mimeType===Ot.svg))try{let g=Py(wh(Oy(f.dataURL)),Ot.svg);f.dataURL!==g&&(f.version=(f.version??1)+1,f.dataURL=g)}catch(g){console.error(g)}return this.files=m,{addedFiles:u}}),D(this,"updateScene",ze(s=>{let l=Ga(s.elements??[]);if(s.captureUpdate&&s.captureUpdate!==N.EVENTUALLY){let m=this.store.snapshot.appState,u=this.store.snapshot.elements,p=s.appState?Object.assign({},m,s.appState):m,f=s.elements?this.store.filterUncomittedElements(this.scene.getElementsMapIncludingDeleted(),Ee(l)):u;s.captureUpdate===N.IMMEDIATELY?this.store.captureIncrement(f,p):s.captureUpdate===N.NEVER&&this.store.updateSnapshot(f,p)}s.appState&&this.setState(s.appState),s.elements&&this.scene.replaceAllElements(l),s.collaborators&&this.setState({collaborators:s.collaborators})})),D(this,"triggerRender",s=>{s===!0?this.scene.triggerUpdate():this.setState({})}),D(this,"toggleSidebar",({name:s,tab:l,force:m})=>{let u;m===void 0?u=this.state.openSidebar?.name===s&&this.state.openSidebar?.tab===l?null:s:u=m?s:null;let p=u?{name:u}:null;return p&&l&&(p.tab=l),this.setState({openSidebar:p}),!!u}),D(this,"updateCurrentCursorPosition",ze(s=>{this.lastViewportPosition.x=s.clientX,this.lastViewportPosition.y=s.clientY})),D(this,"getEditorUIOffsets",()=>{let s=this.excalidrawContainerRef?.current?.querySelector(".App-toolbar")?.getBoundingClientRect()?.bottom??0,l=this.excalidrawContainerRef?.current?.querySelector(".sidebar")?.getBoundingClientRect(),m=this.excalidrawContainerRef?.current?.querySelector(".App-menu__left")?.getBoundingClientRect(),u=16;return dl().rtl?{top:s+u,right:Math.max(this.state.width-(m?.left??this.state.width),0)+u,bottom:u,left:Math.max(l?.right??0,0)+u}:{top:s+u,right:Math.max(this.state.width-(l?.left??this.state.width)+u,0),bottom:u,left:Math.max(m?.right??0,0)+u}}),D(this,"onKeyDown",ze(s=>{if("Proxy"in window&&(!s.shiftKey&&/^[A-Z]$/.test(s.key)||s.shiftKey&&/^[a-z]$/.test(s.key))&&(s=new Proxy(s,{get(p,f){let g=p[f];return typeof g=="function"?g.bind(p):f==="key"?s.shiftKey?p.key.toUpperCase():p.key.toLowerCase():g}})),!im(s.target)){if((s.key===k.ESCAPE||s.key===k.ENTER)&&this.state.croppingElementId){this.finishImageCropping();return}let p=se(this.scene.getNonDeletedElementsMap(),this.state);if(p.length===1&&_e(p[0])&&s.key===k.ENTER){this.startImageCropping(p[0]);return}if(s.key===k.ESCAPE&&this.flowChartCreator.isCreatingChart){this.flowChartCreator.clear(),this.triggerRender(!0);return}let f=Ha(s.key);if(s[k.CTRL_OR_CMD]&&f&&!s.shiftKey){s.preventDefault();let g=se(this.scene.getNonDeletedElementsMap(),this.state);g.length===1&&ao(g[0])&&this.flowChartCreator.createNodes(g[0],this.scene.getNonDeletedElementsMap(),this.state,jx(s.key)),this.flowChartCreator.pendingNodes?.length&&!Do(this.flowChartCreator.pendingNodes,this.canvas.width/window.devicePixelRatio,this.canvas.height/window.devicePixelRatio,{offsetLeft:this.state.offsetLeft,offsetTop:this.state.offsetTop,scrollX:this.state.scrollX,scrollY:this.state.scrollY,zoom:this.state.zoom},this.scene.getNonDeletedElementsMap(),this.getEditorUIOffsets())&&this.scrollToContent(this.flowChartCreator.pendingNodes,{animate:!0,duration:300,fitToContent:!0,canvasOffsets:this.getEditorUIOffsets()});return}if(s.altKey){let g=se(this.scene.getNonDeletedElementsMap(),this.state);if(g.length===1&&f){s.preventDefault();let v=this.flowChartNavigator.exploreByDirection(g[0],this.scene.getNonDeletedElementsMap(),jx(s.key));if(v){this.setState(b=>({selectedElementIds:fe({[v]:!0},b)}));let E=this.scene.getNonDeletedElementsMap().get(v);E&&!Do([E],this.canvas.width/window.devicePixelRatio,this.canvas.height/window.devicePixelRatio,{offsetLeft:this.state.offsetLeft,offsetTop:this.state.offsetTop,scrollX:this.state.scrollX,scrollY:this.state.scrollY,zoom:this.state.zoom},this.scene.getNonDeletedElementsMap(),this.getEditorUIOffsets())&&this.scrollToContent(E,{animate:!0,duration:300,canvasOffsets:this.getEditorUIOffsets()})}return}}}if(s[k.CTRL_OR_CMD]&&s.key===k.P&&!s.shiftKey&&!s.altKey){this.setToast({message:y("commandPalette.shortcutHint",{shortcut:At("commandPalette")})}),s.preventDefault();return}if(s[k.CTRL_OR_CMD]&&s.key.toLowerCase()===k.V&&(Rd=s.shiftKey,clearTimeout(gS),gS=window.setTimeout(()=>{Rd=!1},100)),s[k.CTRL_OR_CMD]&&Ki(s.target)&&(s.code===me.MINUS||s.code===me.EQUAL)){s.preventDefault();return}if(Ki(s.target)&&s.key!==k.ESCAPE||Ha(s.key)&&im(s.target))return;if(s.key===k.QUESTION_MARK){this.setState({openDialog:{name:"help"}});return}else if(s.key.toLowerCase()===k.E&&s.shiftKey&&s[k.CTRL_OR_CMD]){s.preventDefault(),this.setState({openDialog:{name:"imageExport"}});return}if(s.key===k.PAGE_UP||s.key===k.PAGE_DOWN){let p=(s.shiftKey?this.state.width:this.state.height)/this.state.zoom.value;s.key===k.PAGE_DOWN&&(p=-p),s.shiftKey?this.translateCanvas(f=>({scrollX:f.scrollX+p})):this.translateCanvas(f=>({scrollY:f.scrollY+p}))}if(this.state.openDialog?.name==="elementLinkSelector"||this.actionManager.handleKeyDown(s)||this.state.viewModeEnabled)return;if(s[k.CTRL_OR_CMD]&&this.state.isBindingEnabled&&this.setState({isBindingEnabled:!1}),Ha(s.key)){let p=this.scene.getSelectedElements({selectedElementIds:this.state.selectedElementIds,includeBoundTextElement:!0,includeElementsInFrames:!0}),f=p.find(le),g=new Set;p.filter(le).filter(w=>{let x=w.startBinding&&!p.some(C=>C.id===w.startBinding?.elementId),S=w.endBinding&&!p.some(C=>C.id===w.endBinding?.elementId);return x||S}).forEach(w=>g.add(w.id)),p=p.filter(w=>!g.has(w.id));let v=this.getEffectiveGridSize()&&(s.shiftKey?Bu:this.getEffectiveGridSize())||(s.shiftKey?qg:Bu),E=0,b=0;s.key===k.ARROW_LEFT?E=-v:s.key===k.ARROW_RIGHT?E=v:s.key===k.ARROW_UP?b=-v:s.key===k.ARROW_DOWN&&(b=v),p.forEach(w=>{W(w,{x:w.x+E,y:w.y+b},!1),er(w,this.scene.getNonDeletedElementsMap(),{simultaneouslyUpdated:p})}),this.setState({suggestedBindings:Sc(p.filter(w=>w.id!==f?.id||v!==0),this.scene.getNonDeletedElementsMap(),this.state.zoom)}),this.scene.triggerUpdate(),s.preventDefault()}else if(s.key===k.ENTER){let p=this.scene.getSelectedElements(this.state);if(p.length===1){let f=p[0];if(s[k.CTRL_OR_CMD])De(f)&&(!this.state.editingLinearElement||this.state.editingLinearElement.elementId!==p[0].id)&&(this.store.shouldCaptureIncrement(),le(f)||this.setState({editingLinearElement:new ne(f)}));else if(te(f)||Tb(f)){let g;te(f)||(g=f);let v=Tc(f,this.state,this.scene.getNonDeletedElementsMap()),E=v.x,b=v.y;this.startTextEditing({sceneX:E,sceneY:b,container:g}),s.preventDefault();return}else ge(f)&&this.setState({editingFrame:f.id})}}else if(!s.ctrlKey&&!s.altKey&&!s.metaKey&&!this.state.newElement&&!this.state.selectionElement&&!this.state.selectedElementsAreBeingDragged){let p=O0(s.key);p?(this.state.activeTool.type!==p&&we("toolbar",p,`keyboard (${this.device.editor.isMobile?"mobile":"desktop"})`),p==="arrow"&&this.state.activeTool.type==="arrow"&&this.setState(f=>({currentItemArrowType:f.currentItemArrowType===ut.sharp?ut.round:f.currentItemArrowType===ut.round?ut.elbow:ut.sharp})),this.setActiveTool({type:p}),s.stopPropagation()):s.key===k.Q&&(this.toggleLock("keyboard"),s.stopPropagation())}if(s.key===k.SPACE&&pe.pointers.size===0&&(da=!0,ve(this.interactiveCanvas,ye.GRAB),s.preventDefault()),(s.key===k.G||s.key===k.S)&&!s.altKey&&!s[k.CTRL_OR_CMD]){let p=this.scene.getSelectedElements(this.state);if(this.state.activeTool.type==="selection"&&!p.length)return;s.key===k.G&&(Kr(this.state.activeTool.type)||p.some(f=>Kr(f.type)))&&(this.setState({openPopup:"elementBackground"}),s.stopPropagation()),s.key===k.S&&(this.setState({openPopup:"elementStroke"}),s.stopPropagation())}if(!s[k.CTRL_OR_CMD]&&s.shiftKey&&s.key.toLowerCase()===k.F){let p=this.scene.getSelectedElements(this.state);if(this.state.activeTool.type==="selection"&&!p.length)return;(this.state.activeTool.type==="text"||p.find(f=>te(f)||Le(f,this.scene.getNonDeletedElementsMap())))&&(s.preventDefault(),this.setState({openPopup:"fontFamily"}))}if(s.key===k.K&&!s.altKey&&!s[k.CTRL_OR_CMD]){this.state.activeTool.type==="laser"?this.setActiveTool({type:"selection"}):this.setActiveTool({type:"laser"});return}s[k.CTRL_OR_CMD]&&(s.key===k.BACKSPACE||s.key===k.DELETE)&&Wn.set(Cu,"clearCanvas");let l=s.key.toLocaleLowerCase(),m=l===k.S&&s.shiftKey,u=s.key===k.I||l===k.G&&s.shiftKey;(m||u)&&this.openEyeDropper({type:m?"stroke":"background"})})),D(this,"onKeyUp",ze(s=>{if(s.key===k.SPACE&&(this.state.viewModeEnabled||this.state.openDialog?.name==="elementLinkSelector"?ve(this.interactiveCanvas,ye.GRAB):this.state.activeTool.type==="selection"?Nn(this.interactiveCanvas):(si(this.interactiveCanvas,this.state),this.setState({selectedElementIds:fe({},this.state),selectedGroupIds:{},editingGroupId:null,activeEmbeddable:null})),da=!1),!s[k.CTRL_OR_CMD]&&!this.state.isBindingEnabled&&this.setState({isBindingEnabled:!0}),Ha(s.key)&&(fo(this.scene.getSelectedElements(this.state).filter(De),this.scene.getNonDeletedElementsMap(),this.scene.getNonDeletedElements(),this.scene,Va(this.state),this.state.selectedLinearElement?.selectedPointsIndices??[],this.state.zoom),this.setState({suggestedBindings:[]})),s.altKey||this.flowChartNavigator.isExploring&&(this.flowChartNavigator.clear(),this.syncActionResult({captureUpdate:N.IMMEDIATELY})),!s[k.CTRL_OR_CMD]&&this.flowChartCreator.isCreatingChart){this.flowChartCreator.pendingNodes?.length&&this.scene.insertElements(this.flowChartCreator.pendingNodes);let l=this.flowChartCreator.pendingNodes?.[0];l&&(this.setState(m=>({selectedElementIds:fe({[l.id]:!0},m)})),Do([l],this.canvas.width/window.devicePixelRatio,this.canvas.height/window.devicePixelRatio,{offsetLeft:this.state.offsetLeft,offsetTop:this.state.offsetTop,scrollX:this.state.scrollX,scrollY:this.state.scrollY,zoom:this.state.zoom},this.scene.getNonDeletedElementsMap(),this.getEditorUIOffsets())||this.scrollToContent(l,{animate:!0,duration:300,canvasOffsets:this.getEditorUIOffsets()})),this.flowChartCreator.clear(),this.syncActionResult({captureUpdate:N.IMMEDIATELY})}})),D(this,"isToolSupported",s=>this.props.UIOptions.tools?.[s]!==!1),D(this,"setActiveTool",s=>{if(!this.isToolSupported(s.type)){console.warn(`"${s.type}" tool is disabled via "UIOptions.canvasActions.tools.${s.type}"`);return}let l=it(this.state,s);l.type==="hand"?ve(this.interactiveCanvas,ye.GRAB):da||si(this.interactiveCanvas,{...this.state,activeTool:l}),w1(document.activeElement)&&this.focusContainer(),F1(l.type)||this.setState({suggestedBindings:[]}),l.type==="image"&&this.onImageAction({insertOnCanvasDirectly:(s.type==="image"&&s.insertOnCanvasDirectly)??!1}),this.setState(m=>{let u={snapLines:m.snapLines.length?[]:m.snapLines,originSnapOffset:null,activeEmbeddable:null};return l.type==="freedraw"&&this.store.shouldCaptureIncrement(),l.type!=="selection"?{...m,activeTool:l,selectedElementIds:fe({},m),selectedGroupIds:fe({},m),editingGroupId:null,multiElement:null,...u}:{...m,activeTool:l,...u}})}),D(this,"setOpenDialog",s=>{this.setState({openDialog:s})}),D(this,"setCursor",s=>{ve(this.interactiveCanvas,s)}),D(this,"resetCursor",()=>{Nn(this.interactiveCanvas)}),D(this,"isTouchScreenMultiTouchGesture",()=>pe.pointers.size>=2),D(this,"getName",()=>this.state.name||this.props.name||`${y("labels.untitled")}-${nm()}`),D(this,"onGestureStart",ze(s=>{s.preventDefault(),this.isTouchScreenMultiTouchGesture()&&this.setState({selectedElementIds:fe({},this.state),activeEmbeddable:null}),pe.initialScale=this.state.zoom.value})),D(this,"onGestureChange",ze(s=>{if(s.preventDefault(),this.isTouchScreenMultiTouchGesture())return;let l=pe.initialScale;l&&this.setState(m=>({...ua({viewportX:this.lastViewportPosition.x,viewportY:this.lastViewportPosition.y,nextZoom:Li(l*s.scale)},m)}))})),D(this,"onGestureEnd",ze(s=>{s.preventDefault(),this.isTouchScreenMultiTouchGesture()&&this.setState({previousSelectedElementIds:{},selectedElementIds:fe(this.state.previousSelectedElementIds,this.state)}),pe.initialScale=null})),D(this,"startTextEditing",({sceneX:s,sceneY:l,insertAtParentCenter:m=!0,container:u,autoEdit:p=!0})=>{let f=!1,g=m&&this.getTextWysiwygSnappedToCenterPosition(s,l,this.state,u);u&&g&&(Le(u,this.scene.getNonDeletedElementsMap())||(f=!0));let v=null,E=this.scene.getSelectedElements(this.state);E.length===1?te(E[0])?v=E[0]:u?v=Le(E[0],this.scene.getNonDeletedElementsMap()):v=this.getTextElementAtPosition(s,l):v=this.getTextElementAtPosition(s,l);let b=v?.fontFamily||this.state.currentItemFontFamily,w=v?.lineHeight||ja(b),x=this.state.currentItemFontSize;if(!v&&f&&u&&!mt(u)){let T=U1(mn({fontSize:x,fontFamily:b}),w),L=Y1(x,w),M=Math.max(u.height,L),R=Math.max(u.width,T);W(u,{height:M,width:R}),s=u.x+R/2,l=u.y+M/2,g&&(g=this.getTextWysiwygSnappedToCenterPosition(s,l,this.state,u))}let S=this.getTopLayerFrameAtSceneCoords({x:s,y:l}),C=v||ar({x:g?g.elementCenterX:s,y:g?g.elementCenterY:l,strokeColor:this.state.currentItemStrokeColor,backgroundColor:this.state.currentItemBackgroundColor,fillStyle:this.state.currentItemFillStyle,strokeWidth:this.state.currentItemStrokeWidth,strokeStyle:this.state.currentItemStrokeStyle,roughness:this.state.currentItemRoughness,opacity:this.state.currentItemOpacity,text:"",fontSize:x,fontFamily:b,textAlign:g?"center":this.state.currentItemTextAlign,verticalAlign:g?ki.MIDDLE:ju,containerId:f?u?.id:void 0,groupIds:u?.groupIds??[],lineHeight:w,angle:u?.angle??0,frameId:S?S.id:null});if(!v&&f&&u&&W(u,{boundElements:(u.boundElements||[]).concat({type:"text",id:C.id})}),this.setState({editingTextElement:C}),!v)if(u&&f){let T=this.scene.getElementIndex(u.id);this.scene.insertElementAtIndex(C,T+1)}else this.scene.insertElement(C);p||v||u?this.handleTextWysiwyg(C,{isExistingElement:!!v}):this.setState({newElement:C,multiElement:null})}),D(this,"startImageCropping",s=>{this.store.shouldCaptureIncrement(),this.setState({croppingElementId:s.id})}),D(this,"finishImageCropping",()=>{this.state.croppingElementId&&(this.store.shouldCaptureIncrement(),this.setState({croppingElementId:null}))}),D(this,"handleCanvasDoubleClick",s=>{if(this.state.multiElement||this.state.activeTool.type!=="selection")return;let l=this.scene.getSelectedElements(this.state),{x:m,y:u}=Fe(s,this.state);if(l.length===1&&De(l[0])){if(s[k.CTRL_OR_CMD]&&(!this.state.editingLinearElement||this.state.editingLinearElement.elementId!==l[0].id)&&!le(l[0])){this.store.shouldCaptureIncrement(),this.setState({editingLinearElement:new ne(l[0])});return}else if(this.state.selectedLinearElement&&le(l[0])){let p=ne.getSegmentMidpointHitCoords(this.state.selectedLinearElement,{x:m,y:u},this.state,this.scene.getNonDeletedElementsMap()),f=p?ne.getSegmentMidPointIndex(this.state.selectedLinearElement,this.state,p,this.scene.getNonDeletedElementsMap()):-1;if(f&&f>-1){this.store.shouldCaptureIncrement(),ne.deleteFixedSegment(l[0],f);let g=ne.getSegmentMidpointHitCoords({...this.state.selectedLinearElement,segmentMidPointHoveredCoords:null},{x:m,y:u},this.state,this.scene.getNonDeletedElementsMap()),v=g?ne.getSegmentMidPointIndex(this.state.selectedLinearElement,this.state,g,this.scene.getNonDeletedElementsMap()):null;this.setState({selectedLinearElement:{...this.state.selectedLinearElement,pointerDownState:{...this.state.selectedLinearElement.pointerDownState,segmentMidpoint:{index:v,value:p,added:!1}},segmentMidPointHoveredCoords:g}});return}}}if(l.length===1&&_e(l[0])){this.startImageCropping(l[0]);return}if(Nn(this.interactiveCanvas),tr(this.state).length>0){let p=this.getElementAtPosition(m,u),f=p&&lb(p,this.state.selectedGroupIds);if(f){this.store.shouldCaptureIncrement(),this.setState(g=>({...g,...wt({editingGroupId:f,selectedElementIds:{[p.id]:!0}},this.scene.getNonDeletedElements(),g,this)}));return}}if(Nn(this.interactiveCanvas),!s[k.CTRL_OR_CMD]&&!this.state.viewModeEnabled){let p=this.getElementAtPosition(m,u);if(Ba(p)){this.setState({activeEmbeddable:{element:p,state:"active"}});return}let f=this.getTextBindableContainerAtPosition(m,u);if(f&&(ri(f)||!no(f.backgroundColor)||Ua({x:m,y:u,element:f,shape:Gr(f,this.scene.getNonDeletedElementsMap()),threshold:this.getElementHitThreshold()}))){let g=Tc(f,this.state,this.scene.getNonDeletedElementsMap());m=g.x,u=g.y}this.startTextEditing({sceneX:m,sceneY:u,insertAtParentCenter:!s.altKey,container:f})}}),D(this,"getElementLinkAtPosition",(s,l)=>{let m=this.scene.getNonDeletedElements(),u=-1;for(let p=m.length-1;p>=0;p--){let f=m[p];if(l&&f.id===l.id&&(u=p),f.link&&p>=u&&Rc(f,this.scene.getNonDeletedElementsMap(),this.state,G(s.x,s.y),this.device.editor.isMobile))return f}}),D(this,"redirectToLink",(s,l)=>{let m=Gi(G(this.lastPointerDownEvent.clientX,this.lastPointerDownEvent.clientY),G(this.lastPointerUpEvent.clientX,this.lastPointerUpEvent.clientY));if(!this.hitLinkElement||m>Or)return;let u=Fe(this.lastPointerDownEvent,this.state),p=this.scene.getNonDeletedElementsMap(),f=Rc(this.hitLinkElement,p,this.state,G(u.x,u.y),this.device.editor.isMobile),g=Fe(this.lastPointerUpEvent,this.state),v=Rc(this.hitLinkElement,p,this.state,G(g.x,g.y),this.device.editor.isMobile);if(f&&v){Dx();let E=this.hitLinkElement.link;if(E){E=ir(E);let b;if(this.props.onLinkOpen&&(b=om("excalidraw-link",s.nativeEvent),this.props.onLinkOpen({...this.hitLinkElement,link:E},b)),!b?.defaultPrevented){let w=uh(E)?"_self":"_blank",x=window.open(void 0,w);x&&(x.opener=null,x.location=E)}}}}),D(this,"getTopLayerFrameAtSceneCoords",s=>{let l=this.scene.getNonDeletedElementsMap(),m=this.scene.getNonDeletedFramesLikes().filter(u=>Nh(s,u,l));return m.length?m[m.length-1]:null}),D(this,"handleCanvasPointerMove",s=>{this.savePointer(s.clientX,s.clientY,this.state.cursorButton),this.lastPointerMoveEvent=s.nativeEvent,pe.pointers.has(s.pointerId)&&pe.pointers.set(s.pointerId,{x:s.clientX,y:s.clientY});let l=pe.initialScale;if(pe.pointers.size===2&&pe.lastCenter&&l&&pe.initialDistance){let b=$x(pe.pointers),w=b.x-pe.lastCenter.x,x=b.y-pe.lastCenter.y;pe.lastCenter=b;let S=Bx(Array.from(pe.pointers.values())),C=this.state.activeTool.type==="freedraw"&&this.state.penMode?1:S/pe.initialDistance,T=C?Li(l*C):this.state.zoom.value;this.setState(L=>{let M=ua({viewportX:b.x,viewportY:b.y,nextZoom:T},L);this.translateCanvas({zoom:M.zoom,scrollX:M.scrollX+2*(w/T),scrollY:M.scrollY+2*(x/T),shouldCacheIgnoreZoom:!0})}),this.resetShouldCacheIgnoreZoomDebounced()}else pe.lastCenter=pe.initialDistance=pe.initialScale=null;if(da||el||yf||_a(this.state))return;let m=Hx(Ef,s.clientX-this.state.offsetLeft,s.clientY-this.state.offsetTop).isOverEither;!this.state.newElement&&!this.state.selectionElement&&!this.state.selectedElementsAreBeingDragged&&!this.state.multiElement&&(m?Nn(this.interactiveCanvas):si(this.interactiveCanvas,this.state));let u=Fe(s,this.state),{x:p,y:f}=u;if(!this.state.newElement&&vb(this.state.activeTool.type)){let{originOffset:b,snapLines:w}=gb(this.scene.getNonDeletedElements(),this,{x:p,y:f},s,this.scene.getNonDeletedElementsMap());this.setState(x=>{let S=$a(x.snapLines,w),C=x.originSnapOffset?$a(x.originSnapOffset,b):b;return x.snapLines===S&&x.originSnapOffset===C?null:{snapLines:S,originSnapOffset:C}})}else!this.state.newElement&&!this.state.selectedElementsAreBeingDragged&&!this.state.selectionElement&&this.setState(b=>b.snapLines.length?{snapLines:[]}:null);if(this.state.editingLinearElement&&!this.state.editingLinearElement.isDragging){let b=ne.handlePointerMove(s,p,f,this,this.scene.getNonDeletedElementsMap());b&&b!==this.state.editingLinearElement&&(0,Er.flushSync)(()=>{this.setState({editingLinearElement:b})}),b?.lastUncommittedPoint!=null?this.maybeSuggestBindingAtCursor(u,b.elbowed):(0,Er.flushSync)(()=>{this.setState({suggestedBindings:[]})})}if($1(this.state.activeTool.type)){let{newElement:b}=this.state;qi(b,!1)?this.maybeSuggestBindingsForLinearElementAtCoords(b,[u],this.state.startBoundElement):this.maybeSuggestBindingAtCursor(u,!1)}if(this.state.multiElement){let{multiElement:b}=this.state,{x:w,y:x}=b,{points:S,lastCommittedPoint:C}=b,T=S[S.length-1];if(si(this.interactiveCanvas,this.state),T===C)Gi(G(p-w,f-x),T)>=zl?W(b,{points:[...S,G(p-w,f-x)]},!1):ve(this.interactiveCanvas,ye.POINTER);else if(S.length>2&&C&&Gi(G(p-w,f-x),C)<zl)ve(this.interactiveCanvas,ye.POINTER),W(b,{points:S.slice(0,-1)},!1);else{let[L,M]=ht(p,f,s[k.CTRL_OR_CMD]||le(b)?null:this.getEffectiveGridSize()),[R,z]=b?.lastCommittedPoint??[0,0],_=L-w-R,H=M-x-z;Ec(s)&&({width:_,height:H}=jh(R+w,z+x,L,M)),wc(S,this.state.zoom.value)&&ve(this.interactiveCanvas,ye.POINTER),W(b,{points:[...S.slice(0,-1),G(R+_,z+H)]},!1,{isDragging:!0}),this.triggerRender(!1)}return}if(s.buttons||this.state.activeTool.type!=="selection"&&this.state.activeTool.type!=="text"&&this.state.activeTool.type!=="eraser")return;let g=this.scene.getNonDeletedElements(),v=this.scene.getSelectedElements(this.state);if(v.length===1&&!m&&!this.state.editingLinearElement){if(this.state.selectedLinearElement&&this.handleHoverSelectedLinearElement(this.state.selectedLinearElement,p,f),(!this.state.selectedLinearElement||this.state.selectedLinearElement.hoverPointIndex===-1)&&this.state.openDialog?.name!=="elementLinkSelector"&&!(v.length===1&&le(v[0]))){let b=Hh(g,this.state,p,f,this.state.zoom,s.pointerType,this.scene.getNonDeletedElementsMap(),this.device);if(b&&b.transformHandleType){ve(this.interactiveCanvas,Vh(b));return}}}else if(v.length>1&&!m&&this.state.openDialog?.name!=="elementLinkSelector"){let b=Wh(Ve(v),p,f,this.state.zoom,s.pointerType,this.device);if(b){ve(this.interactiveCanvas,Vh({transformHandleType:b}));return}}let E=this.getElementAtPosition(u.x,u.y);this.hitLinkElement=this.getElementLinkAtPosition(u,E),!ti(this.state)&&(this.hitLinkElement&&!this.state.selectedElementIds[this.hitLinkElement.id]?(ve(this.interactiveCanvas,ye.POINTER),a6(this.hitLinkElement,this.state,this.scene.getNonDeletedElementsMap())):(Dx(),E&&(E.link||nn(E))&&this.state.selectedElementIds[E.id]&&!this.state.contextMenu&&!this.state.showHyperlinkPopup?this.setState({showHyperlinkPopup:"info"}):this.state.activeTool.type==="text"?ve(this.interactiveCanvas,te(E)?ye.TEXT:ye.CROSSHAIR):this.state.viewModeEnabled?ve(this.interactiveCanvas,ye.GRAB):this.state.openDialog?.name==="elementLinkSelector"?ve(this.interactiveCanvas,ye.AUTO):m?ve(this.interactiveCanvas,ye.AUTO):this.state.selectedLinearElement?this.handleHoverSelectedLinearElement(this.state.selectedLinearElement,p,f):s[k.CTRL_OR_CMD]?ve(this.interactiveCanvas,ye.AUTO):(E||this.isHittingCommonBoundingBoxOfSelectedElements(u,v))&&!E?.locked&&(E&&Ba(E)&&this.isIframeLikeElementCenter(E,s,p,f)?(ve(this.interactiveCanvas,ye.POINTER),this.setState({activeEmbeddable:{element:E,state:"hover"}})):(!E||!le(E))&&(ve(this.interactiveCanvas,ye.MOVE),this.state.activeEmbeddable?.state==="hover"&&this.setState({activeEmbeddable:null})))),this.state.openDialog?.name==="elementLinkSelector"&&E?this.setState(b=>({hoveredElementIds:$a(b.hoveredElementIds,wt({editingGroupId:b.editingGroupId,selectedElementIds:{[E.id]:!0}},this.scene.getNonDeletedElements(),b,this).selectedElementIds)})):this.state.openDialog?.name==="elementLinkSelector"&&!E&&this.setState(b=>({hoveredElementIds:$a(b.hoveredElementIds,{})})))}),D(this,"handleEraser",(s,l,m)=>{this.eraserTrail.addPointToPath(m.x,m.y);let u=!1,p=new Set,f=this.scene.getNonDeletedElements(),g=x=>{for(let S of x){if(S.locked)return;if(s.altKey?this.elementsPendingErasure.delete(S.id)&&(u=!0):this.elementsPendingErasure.has(S.id)||(u=!0,this.elementsPendingErasure.add(S.id)),u&&S.groupIds?.length){let C=S.groupIds.at(-1);if(!p.has(C)){p.add(C);let T=Ke(f,C);for(let L of T)s.altKey?this.elementsPendingErasure.delete(L.id):this.elementsPendingErasure.add(L.id)}}}},v=Gi(G(l.lastCoords.x,l.lastCoords.y),G(m.x,m.y)),E=this.getElementHitThreshold(),b={...l.lastCoords},w=0;for(;w<=v;){let x=this.getElementsAtPosition(b.x,b.y);if(g(x),w===v)break;w=Math.min(w+E,v);let S=w/v,C=(1-S)*b.x+S*m.x,T=(1-S)*b.y+S*m.y;b.x=C,b.y=T}if(l.lastCoords.x=m.x,l.lastCoords.y=m.y,u){for(let x of this.scene.getNonDeletedElements())Gt(x)&&(this.elementsPendingErasure.has(x.id)||this.elementsPendingErasure.has(x.containerId))&&(s.altKey?(this.elementsPendingErasure.delete(x.id),this.elementsPendingErasure.delete(x.containerId)):(this.elementsPendingErasure.add(x.id),this.elementsPendingErasure.add(x.containerId)));this.elementsPendingErasure=new Set(this.elementsPendingErasure),this.triggerRender()}}),D(this,"handleTouchMove",s=>{tl=!0}),D(this,"handleCanvasPointerDown",s=>{let l=s.target;if(l.setPointerCapture&&l.setPointerCapture(s.pointerId),this.maybeCleanupAfterMissingPointerUp(s.nativeEvent),this.maybeUnfollowRemoteUser(),this.state.searchMatches&&(this.setState(E=>({searchMatches:E.searchMatches.map(b=>({...b,focus:!1}))})),Wn.set(oI,null)),this.state.contextMenu&&this.setState({contextMenu:null}),this.state.snapLines&&this.setAppState({snapLines:[]}),this.updateGestureOnPointerDown(s),s.pointerType==="touch"&&this.state.newElement&&this.state.newElement.type==="freedraw"){let E=this.state.newElement;this.updateScene({...E.points.length<10?{elements:this.scene.getElementsIncludingDeleted().filter(b=>b.id!==E.id)}:{},appState:{newElement:null,editingTextElement:null,startBoundElement:null,suggestedBindings:[],selectedElementIds:fe(Object.keys(this.state.selectedElementIds).filter(b=>b!==E.id).reduce((b,w)=>(b[w]=this.state.selectedElementIds[w],b),{}),this.state)},captureUpdate:this.state.openDialog?.name==="elementLinkSelector"?N.EVENTUALLY:N.NEVER});return}let m=document.getSelection();if(m?.anchorNode&&m.removeAllRanges(),this.maybeOpenContextMenuAfterPointerDownOnTouchDevices(s),!this.state.penDetected&&s.pointerType==="pen"&&this.setState(E=>({penMode:!0,penDetected:!0})),!this.device.isTouchScreen&&["pen","touch"].includes(s.pointerType)&&(this.device=io(this.device,{isTouchScreen:!0})),el||(this.lastPointerDownEvent=s,this.handleCanvasPanUsingWheelOrSpaceDrag(s)))return;if(this.setState({lastPointerDownWith:s.pointerType,cursorButton:"down"}),this.savePointer(s.clientX,s.clientY,"down"),s.button===Ti.ERASER&&this.state.activeTool.type!==en.eraser){this.setState({activeTool:it(this.state,{type:en.eraser,lastActiveToolBeforeEraser:this.state.activeTool})},()=>{this.handleCanvasPointerDown(s);let E=()=>{b(),w?.(),ti(this.state)&&this.setState({activeTool:it(this.state,{...this.state.activeTool.lastActiveTool||{type:en.selection},lastActiveToolBeforeEraser:null})})},b=Me(window,"pointerup",E,{once:!0}),w;requestAnimationFrame(()=>{w=this.missingPointerEventCleanupEmitter.once(E)})});return}if(s.button!==Ti.MAIN&&s.button!==Ti.TOUCH&&s.button!==Ti.ERASER||pe.pointers.size>1)return;let u=this.initialPointerDownState(s);if(this.setState({selectedElementsAreBeingDragged:!1}),this.handleDraggingScrollBar(s,u)||(this.clearSelectionIfNotUsingSelection(),this.updateBindingEnabledOnPointerMove(s),this.handleSelectionOnPointerDown(s,u))||!(!this.state.penMode||s.pointerType!=="touch"||this.state.activeTool.type==="selection"||this.state.activeTool.type==="text"||this.state.activeTool.type==="image"))return;if(this.state.activeTool.type==="text")this.handleTextOnPointerDown(s,u);else if(this.state.activeTool.type==="arrow"||this.state.activeTool.type==="line")this.handleLinearElementOnPointerDown(s,this.state.activeTool.type,u);else if(this.state.activeTool.type==="image"){ve(this.interactiveCanvas,ye.CROSSHAIR);let E=this.state.pendingImageElementId&&this.scene.getElement(this.state.pendingImageElementId);if(!E)return;this.setState({newElement:E,pendingImageElementId:null,multiElement:null});let{x:b,y:w}=Fe(s,this.state),x=this.getTopLayerFrameAtSceneCoords({x:b,y:w});W(E,{x:b,y:w,frameId:x?x.id:null})}else this.state.activeTool.type==="freedraw"?this.handleFreeDrawElementOnPointerDown(s,this.state.activeTool.type,u):this.state.activeTool.type==="custom"?si(this.interactiveCanvas,this.state):this.state.activeTool.type===en.frame||this.state.activeTool.type===en.magicframe?this.createFrameElementOnPointerDown(u,this.state.activeTool.type):this.state.activeTool.type==="laser"?this.laserTrails.startPath(u.lastCoords.x,u.lastCoords.y):this.state.activeTool.type!=="eraser"&&this.state.activeTool.type!=="hand"&&this.createGenericElementOnPointerDown(this.state.activeTool.type,u);this.props?.onPointerDown?.(this.state.activeTool,u),this.onPointerDownEmitter.trigger(this.state.activeTool,u,s),this.state.activeTool.type==="eraser"&&this.eraserTrail.startPath(u.lastCoords.x,u.lastCoords.y);let p=this.onPointerMoveFromPointerDownHandler(u),f=this.onPointerUpFromPointerDownHandler(u),g=this.onKeyDownFromPointerDownHandler(u),v=this.onKeyUpFromPointerDownHandler(u);this.missingPointerEventCleanupEmitter.once(E=>f(E||s.nativeEvent)),(!this.state.viewModeEnabled||this.state.activeTool.type==="laser")&&(window.addEventListener("pointermove",p),window.addEventListener("pointerup",f),window.addEventListener("keydown",g),window.addEventListener("keyup",v),u.eventListeners.onMove=p,u.eventListeners.onUp=f,u.eventListeners.onKeyUp=v,u.eventListeners.onKeyDown=g)}),D(this,"handleCanvasPointerUp",s=>{this.removePointer(s),this.lastPointerUpEvent=s;let l=Fe({clientX:s.clientX,clientY:s.clientY},this.state),m=s.timeStamp-(this.lastPointerDownEvent?.timeStamp??0);if(this.device.editor.isMobile&&m<300){let u=this.getElementAtPosition(l.x,l.y);if(Ba(u)&&this.isIframeLikeElementCenter(u,s,l.x,l.y)){this.handleEmbeddableCenterClick(u);return}}if(this.device.isTouchScreen){let u=this.getElementAtPosition(l.x,l.y);this.hitLinkElement=this.getElementLinkAtPosition(l,u)}this.hitLinkElement&&!this.state.selectedElementIds[this.hitLinkElement.id]?m<300&&Ba(this.hitLinkElement)&&!Yb(this.hitLinkElement,this.scene.getNonDeletedElementsMap(),this.state,G(l.x,l.y))?this.handleEmbeddableCenterClick(this.hitLinkElement):this.redirectToLink(s,this.device.isTouchScreen):this.state.viewModeEnabled&&this.setState({activeEmbeddable:null,selectedElementIds:{}})}),D(this,"maybeOpenContextMenuAfterPointerDownOnTouchDevices",s=>{s.pointerType==="touch"&&(tl=!1,yr?tl=!0:yr=window.setTimeout(()=>{yr=0,tl||this.handleCanvasContextMenu(s)},o1))}),D(this,"resetContextMenuTimer",()=>{clearTimeout(yr),yr=0,tl=!1}),D(this,"maybeCleanupAfterMissingPointerUp",s=>{nl?.(),this.missingPointerEventCleanupEmitter.trigger(s).clear()}),D(this,"handleCanvasPanUsingWheelOrSpaceDrag",s=>{if(!(pe.pointers.size<=1&&(s.button===Ti.WHEEL||s.button===Ti.MAIN&&da||_a(this.state)||this.state.viewModeEnabled)))return!1;el=!0,this.focusContainer(),this.state.editingTextElement||s.preventDefault();let l=!1,m=typeof window===void 0?!1:/Linux/.test(window.navigator.platform);ve(this.interactiveCanvas,ye.GRABBING);let{clientX:u,clientY:p}=s,f=pf(v=>{let E=u-v.clientX,b=p-v.clientY;if(u=v.clientX,p=v.clientY,m&&!l&&(Math.abs(E)>1||Math.abs(b)>1)){l=!0;let w=S=>{document.body.removeEventListener("paste",w),S.stopPropagation()},x=()=>{setTimeout(()=>{document.body.removeEventListener("paste",w),window.removeEventListener("pointerup",x)},100)};document.body.addEventListener("paste",w),window.addEventListener("pointerup",x)}this.translateCanvas({scrollX:this.state.scrollX-E/this.state.zoom.value,scrollY:this.state.scrollY-b/this.state.zoom.value})}),g=ze(nl=()=>{nl=null,el=!1,da||(this.state.viewModeEnabled?ve(this.interactiveCanvas,ye.GRAB):si(this.interactiveCanvas,this.state)),this.setState({cursorButton:"up"}),this.savePointer(s.clientX,s.clientY,"up"),window.removeEventListener("pointermove",f),window.removeEventListener("pointerup",g),window.removeEventListener("blur",g),f.flush()});return window.addEventListener("blur",g),window.addEventListener("pointermove",f,{passive:!0}),window.addEventListener("pointerup",g),!0}),D(this,"clearSelectionIfNotUsingSelection",()=>{this.state.activeTool.type!=="selection"&&this.setState({selectedElementIds:fe({},this.state),selectedGroupIds:{},editingGroupId:null,activeEmbeddable:null})}),D(this,"handleSelectionOnPointerDown",(s,l)=>{if(this.state.activeTool.type==="selection"){let m=this.scene.getNonDeletedElements(),u=this.scene.getNonDeletedElementsMap(),p=this.scene.getSelectedElements(this.state);if(p.length===1&&!this.state.editingLinearElement&&!le(p[0])&&!(this.state.selectedLinearElement&&this.state.selectedLinearElement.hoverPointIndex!==-1)){let f=Hh(m,this.state,l.origin.x,l.origin.y,this.state.zoom,s.pointerType,this.scene.getNonDeletedElementsMap(),this.device);f!=null&&(f.transformHandleType==="rotation"?(this.setState({resizingElement:f.element}),l.resize.handleType=f.transformHandleType):(this.state.croppingElementId||this.setState({resizingElement:f.element}),l.resize.handleType=f.transformHandleType))}else p.length>1&&(l.resize.handleType=Wh(Ve(p),l.origin.x,l.origin.y,this.state.zoom,s.pointerType,this.device));if(l.resize.handleType)l.resize.isResizing=!0,l.resize.offset=jr(xy(l.resize.handleType,p,u,l.origin.x,l.origin.y)),p.length===1&&De(p[0])&&p[0].points.length===2&&(l.resize.arrowDirection=Sy(l.resize.handleType,p[0]));else{if(this.state.selectedLinearElement){let v=this.state.editingLinearElement||this.state.selectedLinearElement,E=ne.handlePointerDown(s,this,this.store,l.origin,v,this.scene);if(E.hitElement&&(l.hit.element=E.hitElement),E.linearElementEditor&&(this.setState({selectedLinearElement:E.linearElementEditor}),this.state.editingLinearElement&&this.setState({editingLinearElement:E.linearElementEditor})),E.didAddPoint)return!0}if(l.hit.element=l.hit.element??this.getElementAtPosition(l.origin.x,l.origin.y),this.hitLinkElement=this.getElementLinkAtPosition(l.origin,l.hit.element),this.hitLinkElement)return!0;if(this.state.croppingElementId&&l.hit.element?.id!==this.state.croppingElementId&&this.finishImageCropping(),l.hit.element&&this.getElementLinkAtPosition({x:l.origin.x,y:l.origin.y},l.hit.element))return!1;l.hit.allHitElements=this.getElementsAtPosition(l.origin.x,l.origin.y);let f=l.hit.element,g=l.hit.allHitElements.some(v=>this.isASelectedElement(v));if((f===null||!g)&&!s.shiftKey&&!l.hit.hasHitCommonBoundingBoxOfSelectedElements&&this.clearSelection(f),this.state.editingLinearElement)this.setState({selectedElementIds:fe({[this.state.editingLinearElement.elementId]:!0},this.state)});else if(f!=null){if(s[k.CTRL_OR_CMD])return this.state.selectedElementIds[f.id]||(l.hit.wasAddedToSelection=!0),this.setState(v=>({...ob(v,f),previousSelectedElementIds:this.state.selectedElementIds})),!1;this.state.selectedElementIds[f.id]||(this.state.editingGroupId&&!vo(f,this.state.editingGroupId)&&this.setState({selectedElementIds:fe({},this.state),selectedGroupIds:{},editingGroupId:null,activeEmbeddable:null}),!g&&!l.hit.hasHitCommonBoundingBoxOfSelectedElements&&(this.setState(v=>{let E={...v.selectedElementIds,[f.id]:!0},b=[];if(Object.keys(v.selectedElementIds).forEach(w=>{let x=this.scene.getElement(w);x&&b.push(x)}),ge(f))qr(b,f.id).forEach(w=>{delete E[w.id]});else if(f.frameId)E[f.frameId]&&delete E[f.id];else{let w=f.groupIds,x=new Set(w.flatMap(S=>Ke(this.scene.getNonDeletedElements(),S)).filter(S=>ge(S)).map(S=>S.id));x.size>0&&b.forEach(S=>{S.frameId&&x.has(S.frameId)&&(delete E[S.id],S.groupIds.flatMap(C=>Ke(this.scene.getNonDeletedElements(),C)).forEach(C=>{delete E[C.id]}))})}return v.openDialog?.name==="elementLinkSelector"&&(f.groupIds.some(w=>v.selectedGroupIds[w])||(E={[f.id]:!0})),{...wt({editingGroupId:v.editingGroupId,selectedElementIds:E},this.scene.getNonDeletedElements(),v,this),showHyperlinkPopup:f.link||nn(f)?"info":!1}}),l.hit.wasAddedToSelection=!0))}this.setState({previousSelectedElementIds:this.state.selectedElementIds})}}return!1}),D(this,"handleTextOnPointerDown",(s,l)=>{if(this.state.editingTextElement)return;let m=l.origin.x,u=l.origin.y,p=this.getElementAtPosition(m,u,{includeBoundTextElement:!0}),f=this.getTextBindableContainerAtPosition(m,u);ri(p)&&(f=p,m=p.x+p.width/2,u=p.y+p.height/2),this.startTextEditing({sceneX:m,sceneY:u,insertAtParentCenter:!s.altKey,container:f,autoEdit:!1}),Nn(this.interactiveCanvas),this.state.activeTool.locked||this.setState({activeTool:it(this.state,{type:"selection"})})}),D(this,"handleFreeDrawElementOnPointerDown",(s,l,m)=>{let[u,p]=ht(m.origin.x,m.origin.y,null),f=this.getTopLayerFrameAtSceneCoords({x:u,y:p}),g=s.pressure===.5,v=Pb({type:l,x:u,y:p,strokeColor:this.state.currentItemStrokeColor,backgroundColor:this.state.currentItemBackgroundColor,fillStyle:this.state.currentItemFillStyle,strokeWidth:this.state.currentItemStrokeWidth,strokeStyle:this.state.currentItemStrokeStyle,roughness:this.state.currentItemRoughness,opacity:this.state.currentItemOpacity,roundness:null,simulatePressure:g,locked:!1,frameId:f?f.id:null,points:[G(0,0)],pressures:g?[]:[s.pressure]});this.scene.insertElement(v),this.setState(b=>{let w={...b.selectedElementIds};return delete w[v.id],{selectedElementIds:fe(w,b)}});let E=Xr(m.origin,this.scene.getNonDeletedElements(),this.scene.getNonDeletedElementsMap(),this.state.zoom);this.setState({newElement:v,startBoundElement:E,suggestedBindings:[]})}),D(this,"insertIframeElement",({sceneX:s,sceneY:l,width:m,height:u})=>{let[p,f]=ht(s,l,this.lastPointerDownEvent?.[k.CTRL_OR_CMD]?null:this.getEffectiveGridSize()),g=Ab({type:"iframe",x:p,y:f,strokeColor:"transparent",backgroundColor:"transparent",fillStyle:this.state.currentItemFillStyle,strokeWidth:this.state.currentItemStrokeWidth,strokeStyle:this.state.currentItemStrokeStyle,roughness:this.state.currentItemRoughness,roundness:this.getCurrentItemRoundness("iframe"),opacity:this.state.currentItemOpacity,locked:!1,width:m,height:u});return this.scene.insertElement(g),g}),D(this,"insertEmbeddableElement",({sceneX:s,sceneY:l,link:m})=>{let[u,p]=ht(s,l,this.lastPointerDownEvent?.[k.CTRL_OR_CMD]?null:this.getEffectiveGridSize()),f=Ka(m);if(!f)return;f.error instanceof URIError&&this.setToast({message:y("toast.unrecognizedLinkFormat"),closable:!0});let g=mh({type:"embeddable",x:u,y:p,strokeColor:"transparent",backgroundColor:"transparent",fillStyle:this.state.currentItemFillStyle,strokeWidth:this.state.currentItemStrokeWidth,strokeStyle:this.state.currentItemStrokeStyle,roughness:this.state.currentItemRoughness,roundness:this.getCurrentItemRoundness("embeddable"),opacity:this.state.currentItemOpacity,locked:!1,width:f.intrinsicSize.w,height:f.intrinsicSize.h,link:m});return this.scene.insertElement(g),g}),D(this,"createImageElement",({sceneX:s,sceneY:l,addToFrameUnderCursor:m=!0})=>{let[u,p]=ht(s,l,this.lastPointerDownEvent?.[k.CTRL_OR_CMD]?null:this.getEffectiveGridSize()),f=m?this.getTopLayerFrameAtSceneCoords({x:u,y:p}):null;return ph({type:"image",x:u,y:p,strokeColor:this.state.currentItemStrokeColor,backgroundColor:this.state.currentItemBackgroundColor,fillStyle:this.state.currentItemFillStyle,strokeWidth:this.state.currentItemStrokeWidth,strokeStyle:this.state.currentItemStrokeStyle,roughness:this.state.currentItemRoughness,roundness:null,opacity:this.state.currentItemOpacity,locked:!1,frameId:f?f.id:null})}),D(this,"handleLinearElementOnPointerDown",(s,l,m)=>{if(this.state.multiElement){let{multiElement:u}=this.state;if(u.type==="line"&&wc(u.points,this.state.zoom.value)){W(u,{lastCommittedPoint:u.points[u.points.length-1]}),this.actionManager.executeAction(Un);return}if(le(u)&&u.points.length>1){W(u,{lastCommittedPoint:u.points[u.points.length-1]}),this.actionManager.executeAction(Un);return}let{x:p,y:f,lastCommittedPoint:g}=u;if(u.points.length>1&&g&&Gi(G(m.origin.x-p,m.origin.y-f),g)<zl){this.actionManager.executeAction(Un);return}this.setState(v=>({selectedElementIds:fe({...v.selectedElementIds,[u.id]:!0},v)})),W(u,{lastCommittedPoint:u.points[u.points.length-1]}),ve(this.interactiveCanvas,ye.POINTER)}else{let[u,p]=ht(m.origin.x,m.origin.y,s[k.CTRL_OR_CMD]?null:this.getEffectiveGridSize()),f=this.getTopLayerFrameAtSceneCoords({x:u,y:p}),{currentItemStartArrowhead:g,currentItemEndArrowhead:v}=this.state,[E,b]=l==="arrow"?[g,v]:[null,null],w=l==="arrow"?Lc({type:l,x:u,y:p,strokeColor:this.state.currentItemStrokeColor,backgroundColor:this.state.currentItemBackgroundColor,fillStyle:this.state.currentItemFillStyle,strokeWidth:this.state.currentItemStrokeWidth,strokeStyle:this.state.currentItemStrokeStyle,roughness:this.state.currentItemRoughness,opacity:this.state.currentItemOpacity,roundness:this.state.currentItemArrowType===ut.round?{type:Rn.PROPORTIONAL_RADIUS}:null,startArrowhead:E,endArrowhead:b,locked:!1,frameId:f?f.id:null,elbowed:this.state.currentItemArrowType===ut.elbow,fixedSegments:this.state.currentItemArrowType===ut.elbow?[]:null}):hh({type:l,x:u,y:p,strokeColor:this.state.currentItemStrokeColor,backgroundColor:this.state.currentItemBackgroundColor,fillStyle:this.state.currentItemFillStyle,strokeWidth:this.state.currentItemStrokeWidth,strokeStyle:this.state.currentItemStrokeStyle,roughness:this.state.currentItemRoughness,opacity:this.state.currentItemOpacity,roundness:this.state.currentItemRoundness==="round"?{type:Rn.PROPORTIONAL_RADIUS}:null,locked:!1,frameId:f?f.id:null});this.setState(S=>{let C={...S.selectedElementIds};return delete C[w.id],{selectedElementIds:fe(C,S)}}),W(w,{points:[...w.points,G(0,0)]});let x=Xr(m.origin,this.scene.getNonDeletedElements(),this.scene.getNonDeletedElementsMap(),this.state.zoom,le(w),le(w));this.scene.insertElement(w),this.setState({newElement:w,startBoundElement:x,suggestedBindings:[]})}}),D(this,"createGenericElementOnPointerDown",(s,l)=>{let[m,u]=ht(l.origin.x,l.origin.y,this.lastPointerDownEvent?.[k.CTRL_OR_CMD]?null:this.getEffectiveGridSize()),p=this.getTopLayerFrameAtSceneCoords({x:m,y:u}),f={x:m,y:u,strokeColor:this.state.currentItemStrokeColor,backgroundColor:this.state.currentItemBackgroundColor,fillStyle:this.state.currentItemFillStyle,strokeWidth:this.state.currentItemStrokeWidth,strokeStyle:this.state.currentItemStrokeStyle,roughness:this.state.currentItemRoughness,opacity:this.state.currentItemOpacity,roundness:this.getCurrentItemRoundness(s),locked:!1,frameId:p?p.id:null},g;s==="embeddable"?g=mh({type:"embeddable",...f}):g=rr({type:s,...f}),g.type==="selection"?this.setState({selectionElement:g}):(this.scene.insertElement(g),this.setState({multiElement:null,newElement:g}))}),D(this,"createFrameElementOnPointerDown",(s,l)=>{let[m,u]=ht(s.origin.x,s.origin.y,this.lastPointerDownEvent?.[k.CTRL_OR_CMD]?null:this.getEffectiveGridSize()),p={x:m,y:u,opacity:this.state.currentItemOpacity,locked:!1,...ei},f=l===en.magicframe?Dc(p):Mc(p);this.scene.insertElement(f),this.setState({multiElement:null,newElement:f})}),D(this,"restoreReadyToEraseElements",()=>{this.elementsPendingErasure=new Set,this.triggerRender()}),D(this,"eraseElements",()=>{let s=!1,l=this.scene.getElementsIncludingDeleted().map(m=>this.elementsPendingErasure.has(m.id)||m.frameId&&this.elementsPendingErasure.has(m.frameId)||Gt(m)&&this.elementsPendingErasure.has(m.containerId)?(s=!0,ae(m,{isDeleted:!0})):m);this.elementsPendingErasure=new Set,s&&(this.store.shouldCaptureIncrement(),this.scene.replaceAllElements(l))}),D(this,"initializeImage",async({imageFile:s,imageElement:l,showCursorImagePreview:m=!1})=>{if(!Bc(s))throw new Error(y("errors.unsupportedFileType"));let u=s.type;if(ve(this.interactiveCanvas,"wait"),u===Ot.svg)try{s=Xh(wh(await s.text()),s.name)}catch(v){throw console.warn(v),new Error(y("errors.svgImageInsertError"))}let p=await(this.props.generateIdForFile?.(s)||Ny(s));if(!p)throw console.warn("Couldn't generate file id or the supplied `generateIdForFile` didn't resolve to one."),new Error(y("errors.imageInsertError"));if(!this.files[p]?.dataURL){try{s=await zc(s,{maxWidthOrHeight:f1})}catch(v){console.error("Error trying to resizing image file on insertion",v)}if(s.size>Gu)throw new Error(y("errors.fileTooBig",{maxSize:`${Math.trunc(Gu/1024/1024)}MB`}))}if(m){let v=this.files[p]?.dataURL,E=v&&_y(v);this.setImagePreviewCursor(E||s)}let f=this.files[p]?.dataURL||await Zh(s),g=W(l,{fileId:p},!1);return new Promise(async(v,E)=>{try{this.addMissingFiles([{mimeType:u,id:p,dataURL:f,created:Date.now(),lastRetrieved:Date.now()}]);let b=this.imageCache.get(p);b||(this.addNewImagesToImageCache(),await this.updateImageCache([g])),b?.image instanceof Promise&&await b.image,this.state.pendingImageElementId!==g.id&&this.state.newElement?.id!==g.id&&this.initializeImageDimensions(g,!0),v(g)}catch(b){console.error(b),E(new Error(y("errors.imageInsertError")))}finally{m||Nn(this.interactiveCanvas)}})}),D(this,"insertImageElement",async(s,l,m)=>{if(!this.isToolSupported("image")){this.setState({errorMessage:y("errors.imageToolNotSupported")});return}this.scene.insertElement(s);try{return await this.initializeImage({imageFile:l,imageElement:s,showCursorImagePreview:m})}catch(u){return W(s,{isDeleted:!0}),this.actionManager.executeAction(Un),this.setState({errorMessage:u.message||y("errors.imageInsertError")}),null}}),D(this,"setImagePreviewCursor",async s=>{let l;try{l=await zc(s,{maxWidthOrHeight:96})}catch(u){throw u.cause==="UNSUPPORTED"?new Error(y("errors.unsupportedFileType")):u}let m=await Zh(l);if(s.type===Ot.svg){let u=await Ub(m),p=Math.min(u.height,96),f=p*(u.width/u.height);f>96&&(f=96,p=f*(u.height/u.width));let g=document.createElement("canvas");g.height=p,g.width=f,g.getContext("2d").drawImage(u,0,0,f,p),m=g.toDataURL(Ot.svg)}this.state.pendingImageElementId&&ve(this.interactiveCanvas,`url(${m}) 4 4, auto`)}),D(this,"onImageAction",async({insertOnCanvasDirectly:s})=>{try{let l=this.state.width/2+this.state.offsetLeft,m=this.state.height/2+this.state.offsetTop,{x:u,y:p}=Fe({clientX:l,clientY:m},this.state),f=await bh({description:"Image",extensions:Object.keys(Wl)}),g=this.createImageElement({sceneX:u,sceneY:p,addToFrameUnderCursor:!1});s?(this.insertImageElement(g,f),this.initializeImageDimensions(g),this.setState({selectedElementIds:fe({[g.id]:!0},this.state)},()=>{this.actionManager.executeAction(Un)})):this.setState({pendingImageElementId:g.id},()=>{this.insertImageElement(g,f,!0)})}catch(l){l.name!=="AbortError"?console.error(l):console.warn(l),this.setState({pendingImageElementId:null,newElement:null,activeTool:it(this.state,{type:"selection"})},()=>{this.actionManager.executeAction(Un)})}}),D(this,"initializeImageDimensions",(s,l=!1)=>{let m=Ur(s)&&this.imageCache.get(s.fileId)?.image;if(!m||m instanceof Promise){if(s.width<Or/this.state.zoom.value&&s.height<Or/this.state.zoom.value){let u=100/this.state.zoom.value;W(s,{x:s.x-u/2,y:s.y-u/2,width:u,height:u})}return}if(l||s.width<Or/this.state.zoom.value&&s.height<Or/this.state.zoom.value){let u=Math.max(this.state.height-120,160),p=Math.min(u,Math.floor(this.state.height*.5)/this.state.zoom.value),f=Math.min(m.naturalHeight,p),g=f*(m.naturalWidth/m.naturalHeight),v=s.x+s.width/2-g/2,E=s.y+s.height/2-f/2;W(s,{x:v,y:E,width:g,height:f,crop:null})}}),D(this,"updateImageCache",async(s,l=this.files)=>{let{updatedFiles:m,erroredFiles:u}=await Hb({imageCache:this.imageCache,fileIds:s.map(p=>p.fileId),files:l});if(m.size||u.size)for(let p of s)m.has(p.fileId)&&Vr.delete(p);return u.size&&this.scene.replaceAllElements(this.scene.getElementsIncludingDeleted().map(p=>Ur(p)&&u.has(p.fileId)?ae(p,{status:"error"}):p)),{updatedFiles:m,erroredFiles:u}}),D(this,"addNewImagesToImageCache",async(s=Wb(this.scene.getNonDeletedElements()),l=this.files)=>{let m=s.filter(u=>!u.isDeleted&&!this.imageCache.has(u.fileId));if(m.length){let{updatedFiles:u}=await this.updateImageCache(m,l);u.size&&this.scene.triggerUpdate()}}),D(this,"scheduleImageRefresh",(0,OI.default)(()=>{this.addNewImagesToImageCache()},a1)),D(this,"updateBindingEnabledOnPointerMove",s=>{let l=q0(s);this.state.isBindingEnabled!==l&&this.setState({isBindingEnabled:l})}),D(this,"maybeSuggestBindingAtCursor",(s,l)=>{let m=Xr(s,this.scene.getNonDeletedElements(),this.scene.getNonDeletedElementsMap(),this.state.zoom,!1,l);this.setState({suggestedBindings:m!=null?[m]:[]})}),D(this,"maybeSuggestBindingsForLinearElementAtCoords",(s,l,m)=>{if(!l.length)return;let u=l.reduce((p,f)=>{let g=Xr(f,this.scene.getNonDeletedElements(),this.scene.getNonDeletedElementsMap(),this.state.zoom,le(s),le(s));return g!=null&&!eb(s,m?.id,g)&&p.push(g),p},[]);this.setState({suggestedBindings:u})}),D(this,"handleInteractiveCanvasRef",s=>{s!==null?(this.interactiveCanvas=s,this.interactiveCanvas.addEventListener("touchstart",this.onTouchStart,{passive:!1}),this.interactiveCanvas.addEventListener("touchend",this.onTouchEnd)):(this.interactiveCanvas?.removeEventListener("touchstart",this.onTouchStart),this.interactiveCanvas?.removeEventListener("touchend",this.onTouchEnd))}),D(this,"handleAppOnDrop",async s=>{let{file:l,fileHandle:m}=await $y(s),{x:u,y:p}=Fe(s,this.state);try{if(Bc(l)&&this.isToolSupported("image")){if(l?.type===Ot.png||l?.type===Ot.svg)try{let v=await Ly(l,this.state,this.scene.getElementsIncludingDeleted(),m);this.syncActionResult({...v,appState:{...v.appState||this.state,isLoading:!1},replaceFiles:!0,captureUpdate:N.IMMEDIATELY});return}catch(v){if(v.name!=="EncodingError")throw new Error(y("alerts.couldNotLoadInvalidFile"))}let g=this.createImageElement({sceneX:u,sceneY:p});this.insertImageElement(g,l),this.initializeImageDimensions(g),this.setState({selectedElementIds:fe({[g.id]:!0},this.state)});return}}catch(g){return this.setState({isLoading:!1,errorMessage:g.message})}let f=s.dataTransfer.getData(Ot.excalidrawlib);if(f&&typeof f=="string"){try{let g=Ry(f);this.addElementsFromPasteOrLibrary({elements:NC(g),position:s,files:null})}catch(g){this.setState({errorMessage:g.message})}return}if(l&&await this.loadFileToCanvas(l,m),s.dataTransfer?.types?.includes("text/plain")){let g=s.dataTransfer?.getData("text");if(g&&xo(g,this.props.validateEmbeddable)&&(/^(http|https):\/\/[^\s/$.?#].[^\s]*$/.test(g)||Ka(g)?.type==="video")){let v=this.insertEmbeddableElement({sceneX:u,sceneY:p,link:ir(g)});v&&this.setState({selectedElementIds:{[v.id]:!0}})}}}),D(this,"loadFileToCanvas",async(s,l)=>{s=await By(s);try{let m=this.scene.getElementsIncludingDeleted(),u;try{u=await Dy(s,this.state,m,l)}catch(p){let f=p instanceof L0;if(f&&p.code==="IMAGE_NOT_CONTAINS_SCENE_DATA"&&!this.isToolSupported("image")){this.setState({isLoading:!1,errorMessage:y("errors.imageToolNotSupported")});return}let g=y(f?"alerts.cannotRestoreFromImage":"alerts.couldNotLoadInvalidFile");this.setState({isLoading:!1,errorMessage:g})}if(!u)return;u.type===Ot.excalidraw?(Ga(m.concat(u.data.elements)),this.store.updateSnapshot(Ee(m),this.state),this.setState({isLoading:!0}),this.syncActionResult({...u.data,appState:{...u.data.appState||this.state,isLoading:!1},replaceFiles:!0,captureUpdate:N.IMMEDIATELY})):u.type===Ot.excalidrawlib&&await this.library.updateLibrary({libraryItems:s,merge:!0,openLibraryMenu:!0}).catch(p=>{console.error(p),this.setState({errorMessage:y("errors.importLibraryError")})})}catch(m){this.setState({isLoading:!1,errorMessage:m.message})}}),D(this,"handleCanvasContextMenu",s=>{if(s.preventDefault(),("pointerType"in s.nativeEvent&&s.nativeEvent.pointerType==="touch"||"pointerType"in s.nativeEvent&&s.nativeEvent.pointerType==="pen"&&s.button!==Ti.SECONDARY)&&this.state.activeTool.type!=="selection")return;let{x:l,y:m}=Fe(s,this.state),u=this.getElementAtPosition(l,m,{preferSelected:!0,includeLockedElements:!0}),p=this.scene.getSelectedElements(this.state),f=this.isHittingCommonBoundingBoxOfSelectedElements({x:l,y:m},p),g=u||f?"element":"canvas",v=this.excalidrawContainerRef.current,{top:E,left:b}=v.getBoundingClientRect(),w=s.clientX-b,x=s.clientY-E;we("contextMenu","openContextMenu",g),this.setState({...u&&!this.state.selectedElementIds[u.id]?{...this.state,...wt({editingGroupId:this.state.editingGroupId,selectedElementIds:{[u.id]:!0}},this.scene.getNonDeletedElements(),this.state,this),selectedLinearElement:De(u)?new ne(u):null}:this.state,showHyperlinkPopup:!1},()=>{this.setState({contextMenu:{top:x,left:w,items:this.getContextMenuItems(g)}})})}),D(this,"maybeDragNewGenericElement",(s,l,m=!0)=>{let u=this.state.selectionElement,p=s.lastCoords;if(u&&this.state.activeTool.type!=="eraser"){Yh({newElement:u,elementType:this.state.activeTool.type,originX:s.origin.x,originY:s.origin.y,x:p.x,y:p.y,width:zr(s.origin.x,p.x),height:zr(s.origin.y,p.y),shouldMaintainAspectRatio:Wa(l),shouldResizeFromCenter:yc(l),zoom:this.state.zoom.value,informMutation:m});return}let f=this.state.newElement;if(!f)return;let[g,v]=ht(p.x,p.y,l[k.CTRL_OR_CMD]?null:this.getEffectiveGridSize()),E=Ur(f)&&this.imageCache.get(f.fileId)?.image,b=E&&!(E instanceof Promise)?E.width/E.height:null;this.maybeCacheReferenceSnapPoints(l,[f]);let{snapOffset:w,snapLines:x}=fb(f,this,l,{x:s.originInGrid.x+(this.state.originSnapOffset?.x??0),y:s.originInGrid.y+(this.state.originSnapOffset?.y??0)},{x:g-s.originInGrid.x,y:v-s.originInGrid.y},this.scene.getNonDeletedElementsMap());g+=w.x,v+=w.y,this.setState({snapLines:x}),Yh({newElement:f,elementType:this.state.activeTool.type,originX:s.originInGrid.x,originY:s.originInGrid.y,x:g,y:v,width:zr(s.originInGrid.x,g),height:zr(s.originInGrid.y,v),shouldMaintainAspectRatio:_e(f)?!Wa(l):Wa(l),shouldResizeFromCenter:yc(l),zoom:this.state.zoom.value,widthAspectRatio:b,originOffset:this.state.originSnapOffset,informMutation:m}),this.setState({newElement:f}),(this.state.activeTool.type===en.frame||this.state.activeTool.type===en.magicframe)&&this.setState({elementsToHighlight:To(this.scene.getNonDeletedElements(),f,this.state,this.scene.getNonDeletedElementsMap())})}),D(this,"maybeHandleCrop",(s,l)=>{if(!this.state.croppingElementId)return!1;let m=s.resize.handleType,u=s.lastCoords,[p,f]=ht(u.x-s.resize.offset.x,u.y-s.resize.offset.y,l[k.CTRL_OR_CMD]?null:this.getEffectiveGridSize()),g=this.scene.getNonDeletedElementsMap().get(this.state.croppingElementId);if(m&&g&&_e(g)){let v=s.originalElements.get(g.id),E=Ur(g)&&this.imageCache.get(g.fileId)?.image;if(v&&_e(v)&&E&&!(E instanceof Promise)){let[b,w]=ht(u.x,u.y,l[k.CTRL_OR_CMD]?null:this.getEffectiveGridSize()),x={x:b-s.originInGrid.x,y:w-s.originInGrid.y};this.maybeCacheReferenceSnapPoints(l,[g]);let{snapOffset:S,snapLines:C}=oh([g],[v],this,l,x,m);W(g,B0(g,m,E.naturalWidth,E.naturalHeight,p+S.x,f+S.y,l.shiftKey?v.width/v.height:void 0)),er(g,this.scene.getNonDeletedElementsMap(),{newSize:{width:g.width,height:g.height}}),this.setState({isCropping:m&&m!=="rotation",snapLines:C})}return!0}return!1}),D(this,"maybeHandleResize",(s,l)=>{let m=this.scene.getSelectedElements(this.state),u=m.filter(b=>ge(b)),p=s.resize.handleType;if(u.length>0&&p==="rotation"||m.length===1&&le(m[0])||this.state.croppingElementId)return!1;this.setState({isResizing:p&&p!=="rotation",isRotating:p==="rotation",activeEmbeddable:null});let f=s.lastCoords,[g,v]=ht(f.x-s.resize.offset.x,f.y-s.resize.offset.y,l[k.CTRL_OR_CMD]?null:this.getEffectiveGridSize()),E=new Map;if(u.forEach(b=>{qr(this.scene.getNonDeletedElements(),b.id).forEach(w=>{E.set(b.id+w.id,{x:w.x-b.x,y:w.y-b.y})})}),!this.state.selectedElementsAreBeingDragged){let[b,w]=ht(f.x,f.y,l[k.CTRL_OR_CMD]?null:this.getEffectiveGridSize()),x={x:b-s.originInGrid.x,y:w-s.originInGrid.y},S=[...s.originalElements.values()];this.maybeCacheReferenceSnapPoints(l,m);let{snapOffset:C,snapLines:T}=oh(m,se(S,this.state),this,l,x,p);g+=C.x,v+=C.y,this.setState({snapLines:T})}if(Ey(s.originalElements,p,m,this.scene.getElementsMapIncludingDeleted(),this.scene,Ec(l),yc(l),m.some(b=>_e(b))?!Wa(l):Wa(l),g,v,s.resize.center.x,s.resize.center.y)){let b=Sc(m,this.scene.getNonDeletedElementsMap(),this.state.zoom),w=new Set;return u.forEach(x=>{To(this.scene.getNonDeletedElements(),x,this.state,this.scene.getNonDeletedElementsMap()).forEach(S=>w.add(S))}),this.setState({elementsToHighlight:[...w],suggestedBindings:b}),!0}return!1}),D(this,"getContextMenuItems",s=>{let l=[];return l.push(Ix,Cx),s==="canvas"?this.state.viewModeEnabled?[...l,kx,Df,oS,Lf]:[xx,at,Ix,Cx,Tx,at,U4,c6,at,kx,XM,Df,oS,Lf]:(l.push(Tx),this.state.viewModeEnabled?[Fd,...l]:[at,Sx,Fd,xx,at,NR,PR,_R,at,TD,at,...l,at,_M,OM,at,$M,EA,qM,QM,t6,BM,at,HM,at,$4,B4,z4,j4,at,GM,KM,at,ID,at,kC,n3,at,Y4,l6,at,TS])}),D(this,"handleWheel",ze(s=>{if(!(s.target instanceof HTMLCanvasElement||s.target instanceof HTMLTextAreaElement||s.target instanceof HTMLIFrameElement)){s[k.CTRL_OR_CMD]&&s.preventDefault();return}if(s.preventDefault(),el)return;let{deltaX:l,deltaY:m}=s;if(s.metaKey||s.ctrlKey){let u=Math.sign(m),p=Gs*100,f=Math.abs(m),g=m;f>p&&(g=p*u);let v=this.state.zoom.value-g/100;v+=Math.log10(Math.max(1,this.state.zoom.value))*-u*Math.min(1,f/20),this.translateCanvas(E=>({...ua({viewportX:this.lastViewportPosition.x,viewportY:this.lastViewportPosition.y,nextZoom:Li(v)},E),shouldCacheIgnoreZoom:!0})),this.resetShouldCacheIgnoreZoomDebounced();return}if(s.shiftKey){this.translateCanvas(({zoom:u,scrollX:p})=>({scrollX:p-(m||l)/u.value}));return}this.translateCanvas(({zoom:u,scrollX:p,scrollY:f})=>({scrollX:p-l/u.value,scrollY:f-m/u.value}))})),D(this,"savePointer",(s,l,m)=>{if(!s||!l)return;let{x:u,y:p}=Fe({clientX:s,clientY:l},this.state);isNaN(u)||isNaN(p);let f={x:u,y:p,tool:this.state.activeTool.type==="laser"?"laser":"pointer"};this.props.onPointerUpdate?.({pointer:f,button:m,pointersMap:pe.pointers})}),D(this,"resetShouldCacheIgnoreZoomDebounced",eo(()=>{this.unmounted||this.setState({shouldCacheIgnoreZoom:!1})},300)),D(this,"updateDOMRect",s=>{if(this.excalidrawContainerRef?.current){let l=this.excalidrawContainerRef.current,{width:m,height:u,left:p,top:f}=l.getBoundingClientRect(),{width:g,height:v,offsetTop:E,offsetLeft:b}=this.state;if(m===g&&u===v&&p===b&&f===E){s&&s();return}this.setState({width:m,height:u,offsetLeft:p,offsetTop:f},()=>{s&&s()})}}),D(this,"refresh",()=>{this.setState({...this.getCanvasOffsets()})});let n=Xs(),{excalidrawAPI:i,viewModeEnabled:r=!1,zenModeEnabled:a=!1,gridModeEnabled:o=!1,objectsSnapModeEnabled:c=!1,theme:d=n.theme,name:h=`${y("labels.untitled")}-${nm()}`}=t;if(this.state={...n,theme:d,isLoading:!0,...this.getCanvasOffsets(),viewModeEnabled:r,zenModeEnabled:a,objectsSnapModeEnabled:c,gridModeEnabled:o??n.gridModeEnabled,name:h,width:window.innerWidth,height:window.innerHeight},this.id=Bg(),this.library=new y6(this),this.actionManager=new LD(this.syncActionResult,()=>this.state,()=>this.scene.getElementsIncludingDeleted(),this),this.scene=new or,this.canvas=document.createElement("canvas"),this.rc=zg.canvas(this.canvas),this.renderer=new pS(this.scene),this.visibleElements=[],this.store=new Ob,this.history=new Fx,i){let s={updateScene:this.updateScene,updateLibrary:this.library.updateLibrary,addFiles:this.addFiles,resetScene:this.resetScene,getSceneElementsIncludingDeleted:this.getSceneElementsIncludingDeleted,history:{clear:this.resetHistory},scrollToContent:this.scrollToContent,getSceneElements:this.getSceneElements,getAppState:()=>this.state,getFiles:()=>this.files,getName:this.getName,registerAction:l=>{this.actionManager.registerAction(l)},refresh:this.refresh,setToast:this.setToast,id:this.id,setActiveTool:this.setActiveTool,setCursor:this.setCursor,resetCursor:this.resetCursor,updateFrameRendering:this.updateFrameRendering,toggleSidebar:this.toggleSidebar,onChange:l=>this.onChangeEmitter.on(l),onPointerDown:l=>this.onPointerDownEmitter.on(l),onPointerUp:l=>this.onPointerUpEmitter.on(l),onScrollChange:l=>this.onScrollChangeEmitter.on(l),onUserFollow:l=>this.onUserFollowEmitter.on(l)};typeof i=="function"?i(s):console.error("excalidrawAPI should be a function!")}this.excalidrawContainerValue={container:this.excalidrawContainerRef.current,id:this.id},this.fonts=new za(this.scene),this.history=new Fx,this.actionManager.registerAll(Lb),this.actionManager.registerAction(MD(this.history,this.store)),this.actionManager.registerAction(DD(this.history,this.store))}onWindowMessage(t){if(t.origin!=="https://player.vimeo.com"&&t.origin!=="https://www.youtube.com")return;let n=null;try{n=JSON.parse(t.data)}catch{}if(n)switch(t.origin){case"https://player.vimeo.com":if(n.method==="paused"){let i=null,r=document.body.querySelectorAll("iframe.excalidraw__embeddable");if(!r)break;for(let a of r)a.contentWindow===t.source&&(i=a.contentWindow);i?.postMessage(JSON.stringify({method:n.value?"play":"pause",value:!0}),"*")}break;case"https://www.youtube.com":if(n.event==="infoDelivery"&&n.info&&n.id&&typeof n.info.playerState=="number"){let i=n.id,r=n.info.playerState;Object.values(Hs).includes(r)&&wf.set(i,r)}break}}cacheEmbeddableRef(t,n){n&&this.iFrameRefs.set(t.id,n)}getHTMLIFrameElement(t){return this.iFrameRefs.get(t.id)}handleEmbeddableCenterClick(t){if(this.state.activeEmbeddable?.element===t&&this.state.activeEmbeddable?.state==="active"||(setTimeout(()=>{this.setState({activeEmbeddable:{element:t,state:"active"},selectedElementIds:{[t.id]:!0},newElement:null,selectionElement:null})},100),Hr(t)))return;let n=this.getHTMLIFrameElement(t);if(n?.contentWindow){if(n.src.includes("youtube")){let i=wf.get(t.id);switch(i||(wf.set(t.id,Hs.UNSTARTED),n.contentWindow.postMessage(JSON.stringify({event:"listening",id:t.id}),"*")),i){case Hs.PLAYING:case Hs.BUFFERING:n.contentWindow?.postMessage(JSON.stringify({event:"command",func:"pauseVideo",args:""}),"*");break;default:n.contentWindow?.postMessage(JSON.stringify({event:"command",func:"playVideo",args:""}),"*")}}n.src.includes("player.vimeo.com")&&n.contentWindow.postMessage(JSON.stringify({method:"paused"}),"*")}}isIframeLikeElementCenter(t,n,i,r){return t&&!n.altKey&&!n.shiftKey&&!n.metaKey&&!n.ctrlKey&&(this.state.activeEmbeddable?.element!==t||this.state.activeEmbeddable?.state==="hover"||!this.state.activeEmbeddable)&&i>=t.x+t.width/3&&i<=t.x+2*t.width/3&&r>=t.y+t.height/3&&r<=t.y+2*t.height/3}renderEmbeddables(){let t=this.state.zoom.value,n=this.state.width,i=this.state.height,r=this.scene.getNonDeletedElements().filter(a=>nn(a)&&this.embedsValidationStatus.get(a.id)===!0||Hr(a));return(0,oe.jsx)(oe.Fragment,{children:r.map(a=>{let{x:o,y:c}=ni({sceneX:a.x,sceneY:a.y},this.state),d=Oc(a,n,i,this.state,this.scene.getNonDeletedElementsMap()),h=this.initializedEmbeds.has(a.id);if(d&&!h&&this.initializedEmbeds.add(a.id),!(d||h))return null;let s;if(Hr(a)){s=null;let u=(a.customData?.generationData??this.magicGenerations.get(a.id))||{status:"error",message:"No generation data",code:"ERR_NO_GENERATION_DATA"};if(u.status==="done"){let p=u.html;s={intrinsicSize:{w:a.width,h:a.height},type:"document",srcdoc:()=>p}}else if(u.status==="pending")s={intrinsicSize:{w:a.width,h:a.height},type:"document",srcdoc:()=>vh(`
55
+ <style>
56
+ html, body {
57
+ width: 100%;
58
+ height: 100%;
59
+ color: ${this.state.theme===he.DARK?"white":"black"};
60
+ }
61
+ body {
62
+ display: flex;
63
+ align-items: center;
64
+ justify-content: center;
65
+ flex-direction: column;
66
+ gap: 1rem;
67
+ }
68
+
69
+ .Spinner {
70
+ display: flex;
71
+ align-items: center;
72
+ justify-content: center;
73
+ margin-left: auto;
74
+ margin-right: auto;
75
+ }
76
+
77
+ .Spinner svg {
78
+ animation: rotate 1.6s linear infinite;
79
+ transform-origin: center center;
80
+ width: 40px;
81
+ height: 40px;
82
+ }
83
+
84
+ .Spinner circle {
85
+ stroke: currentColor;
86
+ animation: dash 1.6s linear 0s infinite;
87
+ stroke-linecap: round;
88
+ }
89
+
90
+ @keyframes rotate {
91
+ 100% {
92
+ transform: rotate(360deg);
93
+ }
94
+ }
95
+
96
+ @keyframes dash {
97
+ 0% {
98
+ stroke-dasharray: 1, 300;
99
+ stroke-dashoffset: 0;
100
+ }
101
+ 50% {
102
+ stroke-dasharray: 150, 300;
103
+ stroke-dashoffset: -200;
104
+ }
105
+ 100% {
106
+ stroke-dasharray: 1, 300;
107
+ stroke-dashoffset: -280;
108
+ }
109
+ }
110
+ </style>
111
+ <div class="Spinner">
112
+ <svg
113
+ viewBox="0 0 100 100"
114
+ >
115
+ <circle
116
+ cx="50"
117
+ cy="50"
118
+ r="46"
119
+ stroke-width="8"
120
+ fill="none"
121
+ stroke-miter-limit="10"
122
+ />
123
+ </svg>
124
+ </div>
125
+ <div>Generating...</div>
126
+ `)};else{let p;u.code==="ERR_GENERATION_INTERRUPTED"?p="Generation was interrupted...":p=u.message||"Generation failed",s={intrinsicSize:{w:a.width,h:a.height},type:"document",srcdoc:()=>vh(`
127
+ <style>
128
+ html, body {
129
+ height: 100%;
130
+ }
131
+ body {
132
+ display: flex;
133
+ flex-direction: column;
134
+ align-items: center;
135
+ justify-content: center;
136
+ color: ${Aa.red[3]};
137
+ }
138
+ h1, h3 {
139
+ margin-top: 0;
140
+ margin-bottom: 0.5rem;
141
+ }
142
+ </style>
143
+ <h1>Error!</h1>
144
+ <h3>${p}</h3>
145
+ `)}}}else s=Ka(Db(a.link||""));let l=this.state.activeEmbeddable?.element===a&&this.state.activeEmbeddable?.state==="active",m=this.state.activeEmbeddable?.element===a&&this.state.activeEmbeddable?.state==="hover";return(0,oe.jsx)("div",{className:$("excalidraw__embeddable-container",{"is-hovered":m}),style:{transform:d?`translate(${o-this.state.offsetLeft}px, ${c-this.state.offsetTop}px) scale(${t})`:"none",display:d?"block":"none",opacity:j0(a,_c(a,this.scene.getNonDeletedElementsMap()),this.elementsPendingErasure,null,this.state.openDialog?.name==="elementLinkSelector"?b1:1),"--embeddable-radius":`${Gm(Math.min(a.width,a.height),a)}px`},children:(0,oe.jsxs)("div",{className:"excalidraw__embeddable-container__inner",style:{width:d?`${a.width}px`:0,height:d?`${a.height}px`:0,transform:d?`rotate(${a.angle}rad)`:"none",pointerEvents:l?Fr.enabled:Fr.disabled},children:[m&&(0,oe.jsx)("div",{className:"excalidraw__embeddable-hint",children:y("buttons.embeddableInteractionButton")}),(0,oe.jsx)("div",{className:"excalidraw__embeddable__outer",style:{padding:`${a.strokeWidth}px`},children:(nn(a)?this.props.renderEmbeddable?.(a,this.state):null)??(0,oe.jsx)("iframe",{ref:u=>this.cacheEmbeddableRef(a,u),className:"excalidraw__embeddable",srcDoc:s?.type==="document"?s.srcdoc(this.state.theme):void 0,src:s?.type!=="document"?s?.link??"":void 0,scrolling:"no",referrerPolicy:"no-referrer-when-downgrade",title:"Excalidraw Embedded Content",allow:"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture",allowFullScreen:!0,sandbox:`${s?.sandbox?.allowSameOrigin?"allow-same-origin":""} allow-scripts allow-forms allow-popups allow-popups-to-escape-sandbox allow-presentation allow-downloads`})})]})},a.id)})})}toggleOverscrollBehavior(t){document.documentElement.style.overscrollBehaviorX=t.type==="pointerenter"?"none":"auto"}render(){let t=this.scene.getSelectedElements(this.state),{renderTopRightUI:n,renderCustomStats:i}=this.props,r=this.scene.getSceneNonce(),{elementsMap:a,visibleElements:o}=this.renderer.getRenderableElements({sceneNonce:r,zoom:this.state.zoom,offsetLeft:this.state.offsetLeft,offsetTop:this.state.offsetTop,scrollX:this.state.scrollX,scrollY:this.state.scrollY,height:this.state.height,width:this.state.width,editingTextElement:this.state.editingTextElement,newElementId:this.state.newElement?.id,pendingImageElementId:this.state.pendingImageElementId});this.visibleElements=o;let c=this.scene.getNonDeletedElementsMap(),d="setPointerCapture"in HTMLElement.prototype?!1:this.state.selectionElement||this.state.newElement||this.state.selectedElementsAreBeingDragged||this.state.resizingElement||this.state.activeTool.type==="laser"&&this.state.cursorButton==="down",h=t[0];return(0,oe.jsx)("div",{className:$("excalidraw excalidraw-container",{"excalidraw--view-mode":this.state.viewModeEnabled||this.state.openDialog?.name==="elementLinkSelector","excalidraw--mobile":this.device.editor.isMobile}),style:{"--ui-pointerEvents":d?Fr.disabled:Fr.enabled,"--right-sidebar-width":"302px"},ref:this.excalidrawContainerRef,onDrop:this.handleAppOnDrop,tabIndex:0,onKeyDown:this.props.handleKeyboardGlobally?void 0:this.onKeyDown,onPointerEnter:this.toggleOverscrollBehavior,onPointerLeave:this.toggleOverscrollBehavior,children:(0,oe.jsx)(ZI.Provider,{value:this,children:(0,oe.jsx)(XI.Provider,{value:this.props,children:(0,oe.jsx)(Sg.Provider,{value:this.excalidrawContainerValue,children:(0,oe.jsx)(xg.Provider,{value:this.device,children:(0,oe.jsx)(Tg.Provider,{value:this.setAppState,children:(0,oe.jsx)(Ig.Provider,{value:this.state,children:(0,oe.jsxs)(Cg.Provider,{value:this.scene.getNonDeletedElements(),children:[(0,oe.jsxs)(kg.Provider,{value:this.actionManager,children:[(0,oe.jsx)(LR,{canvas:this.canvas,appState:this.state,files:this.files,setAppState:this.setAppState,actionManager:this.actionManager,elements:this.scene.getNonDeletedElements(),onLockToggle:this.toggleLock,onPenModeToggle:this.togglePenMode,onHandToolToggle:this.onHandToolToggle,langCode:dl().code,renderTopRightUI:n,renderCustomStats:i,showExitZenModeBtn:typeof this.props?.zenModeEnabled>"u"&&this.state.zenModeEnabled,UIOptions:this.props.UIOptions,onExportImage:this.onExportImage,renderWelcomeScreen:!this.state.isLoading&&this.state.showWelcomeScreen&&this.state.activeTool.type==="selection"&&!this.state.zenModeEnabled&&!this.scene.getElementsIncludingDeleted().length,app:this,isCollaborating:this.props.isCollaborating,generateLinkForSelection:this.props.generateLinkForSelection,children:this.props.children}),(0,oe.jsx)("div",{className:"excalidraw-textEditorContainer"}),(0,oe.jsx)("div",{className:"excalidraw-contextMenuContainer"}),(0,oe.jsx)("div",{className:"excalidraw-eye-dropper-container"}),(0,oe.jsx)(dA,{trails:[this.laserTrails,this.eraserTrail]}),t.length===1&&this.state.openDialog?.name!=="elementLinkSelector"&&this.state.showHyperlinkPopup&&(0,oe.jsx)(r6,{element:h,elementsMap:c,setAppState:this.setAppState,onLinkOpen:this.props.onLinkOpen,setToast:this.setToast,updateEmbedValidationStatus:this.updateEmbedValidationStatus},h.id),this.props.aiEnabled!==!1&&t.length===1&&nc(h)&&(0,oe.jsx)(fS,{element:h,elementsMap:a,children:(0,oe.jsx)(vf,{title:y("labels.convertToCode"),icon:zm,checked:!1,onChange:()=>this.onMagicFrameGenerate(h,"button")})}),t.length===1&&Hr(h)&&h.customData?.generationData?.status==="done"&&(0,oe.jsxs)(fS,{element:h,elementsMap:a,children:[(0,oe.jsx)(vf,{title:y("labels.copySource"),icon:pc,checked:!1,onChange:()=>this.onIframeSrcCopy(h)}),(0,oe.jsx)(vf,{title:"Enter fullscreen",icon:s0,checked:!1,onChange:()=>{let s=this.getHTMLIFrameElement(h);if(s)try{s.requestFullscreen(),this.setState({activeEmbeddable:{element:h,state:"active"},selectedElementIds:{[h.id]:!0},newElement:null,selectionElement:null})}catch(l){console.warn(l),this.setState({errorMessage:"Couldn't enter fullscreen"})}}})]}),this.state.toast!==null&&(0,oe.jsx)(AR,{message:this.state.toast.message,onClose:()=>this.setToast(null),duration:this.state.toast.duration,closable:this.state.toast.closable}),this.state.contextMenu&&(0,oe.jsx)(AD,{items:this.state.contextMenu.items,top:this.state.contextMenu.top,left:this.state.contextMenu.left,actionManager:this.actionManager,onClose:s=>{this.setState({contextMenu:null},()=>{this.focusContainer(),s?.()})}}),(0,oe.jsx)(cA,{canvas:this.canvas,rc:this.rc,elementsMap:a,allElementsMap:c,visibleElements:o,sceneNonce:r,selectionNonce:this.state.selectionElement?.versionNonce,scale:window.devicePixelRatio,appState:this.state,renderConfig:{imageCache:this.imageCache,isExporting:!1,renderGrid:bo(this),canvasBackgroundColor:this.state.viewBackgroundColor,embedsValidationStatus:this.embedsValidationStatus,elementsPendingErasure:this.elementsPendingErasure,pendingFlowchartNodes:this.flowChartCreator.pendingNodes}}),this.state.newElement&&(0,oe.jsx)(IA,{appState:this.state,scale:window.devicePixelRatio,rc:this.rc,elementsMap:a,allElementsMap:c,renderConfig:{imageCache:this.imageCache,isExporting:!1,renderGrid:!1,canvasBackgroundColor:this.state.viewBackgroundColor,embedsValidationStatus:this.embedsValidationStatus,elementsPendingErasure:this.elementsPendingErasure,pendingFlowchartNodes:null}}),(0,oe.jsx)(sA,{containerRef:this.excalidrawContainerRef,canvas:this.interactiveCanvas,elementsMap:a,visibleElements:o,allElementsMap:c,selectedElements:t,sceneNonce:r,selectionNonce:this.state.selectionElement?.versionNonce,scale:window.devicePixelRatio,appState:this.state,device:this.device,renderInteractiveSceneCallback:this.renderInteractiveSceneCallback,handleCanvasRef:this.handleInteractiveCanvasRef,onContextMenu:this.handleCanvasContextMenu,onPointerMove:this.handleCanvasPointerMove,onPointerUp:this.handleCanvasPointerUp,onPointerCancel:this.removePointer,onTouchMove:this.handleTouchMove,onPointerDown:this.handleCanvasPointerDown,onDoubleClick:this.handleCanvasDoubleClick}),this.state.userToFollow&&(0,oe.jsx)(fA,{width:this.state.width,height:this.state.height,userToFollow:this.state.userToFollow,onDisconnect:this.maybeUnfollowRemoteUser}),this.renderFrameNames()]}),this.renderEmbeddables()]})})})})})})})})}setPlugins(t){Object.assign(this.plugins,t)}async onMagicFrameGenerate(t,n){let i=this.plugins.diagramToCode?.generate;if(!i){this.setState({errorMessage:"No diagram to code plugin found"});return}let r=Fh(this.scene.getNonDeletedElements(),t).filter(o=>!nc(o));if(!r.length){n==="button"?(this.setState({errorMessage:"Cannot generate from an empty frame"}),we("ai","generate (no-children)","d2c")):this.setActiveTool({type:"magicframe"});return}let a=this.insertIframeElement({sceneX:t.x+t.width+30,sceneY:t.y,width:t.width,height:t.height});if(a){this.updateMagicGeneration({frameElement:a,data:{status:"pending"}}),this.setState({selectedElementIds:{[a.id]:!0}}),we("ai","generate (start)","d2c");try{let{html:o}=await i({frame:t,children:r});if(we("ai","generate (success)","d2c"),!o.trim()){this.updateMagicGeneration({frameElement:a,data:{status:"error",code:"ERR_OAI",message:"Nothing genereated :("}});return}let c=o.includes("<!DOCTYPE html>")&&o.includes("</html>")?o.slice(o.indexOf("<!DOCTYPE html>"),o.indexOf("</html>")+7):o;this.updateMagicGeneration({frameElement:a,data:{status:"done",html:c}})}catch(o){we("ai","generate (failed)","d2c"),this.updateMagicGeneration({frameElement:a,data:{status:"error",code:"ERR_OAI",message:o.message||"Unknown error during generation"}})}}}onIframeSrcCopy(t){t.customData?.generationData?.status==="done"&&(Io(t.customData.generationData.html),this.setToast({message:"copied to clipboard",closable:!1,duration:1500}))}clearImageShapeCache(t){let n=t??this.files;this.scene.getNonDeletedElements().forEach(i=>{Ur(i)&&n[i.fileId]&&(this.imageCache.delete(i.fileId),Vr.delete(i))})}async componentDidMount(){if(this.unmounted=!1,this.excalidrawContainerValue.container=this.excalidrawContainerRef.current,dt.MODE===Ws.TEST||dt.DEV){let t=this.setState.bind(this);Object.defineProperties(window.h,{state:{configurable:!0,get:()=>this.state},setState:{configurable:!0,value:(...n)=>this.setState(...n)},app:{configurable:!0,value:this},history:{configurable:!0,value:this.history},store:{configurable:!0,value:this.store},fonts:{configurable:!0,value:this.fonts}})}this.store.onStoreIncrementEmitter.on(t=>{this.history.record(t.elementsChange,t.appStateChange)}),this.scene.onUpdate(this.triggerRender),this.addEventListeners(),this.props.autoFocus&&this.excalidrawContainerRef.current&&this.focusContainer(),ql()||(this.refreshViewportBreakpoints(),this.refreshEditorBreakpoints()),Bl&&this.excalidrawContainerRef.current&&(this.resizeObserver=new ResizeObserver(()=>{this.refreshEditorBreakpoints(),this.updateDOMRect()}),this.resizeObserver?.observe(this.excalidrawContainerRef.current)),new URLSearchParams(window.location.search.slice(1)).has("web-share-target")?this.restoreFileFromShare():this.updateDOMRect(this.initializeScene),Zg()&&!W1()&&this.setState({errorMessage:(0,oe.jsx)(FR,{})})}componentWillUnmount(){window.launchQueue?.setConsumer(()=>{}),this.renderer.destroy(),this.scene.destroy(),this.scene=new or,this.fonts=new za(this.scene),this.renderer=new pS(this.scene),this.files={},this.imageCache.clear(),this.resizeObserver?.disconnect(),this.unmounted=!0,this.removeEventListeners(),this.library.destroy(),this.laserTrails.stop(),this.eraserTrail.stop(),this.onChangeEmitter.clear(),this.store.onStoreIncrementEmitter.clear(),Vr.destroy(),nr.destroy(),clearTimeout(yr),Ye.clearCache(),wt.clearCache(),yr=0,document.documentElement.style.overscrollBehaviorX=""}removeEventListeners(){this.onRemoveEventListenersEmitter.trigger()}addEventListeners(){this.removeEventListeners(),this.props.handleKeyboardGlobally&&this.onRemoveEventListenersEmitter.once(Me(document,"keydown",this.onKeyDown,!1)),this.onRemoveEventListenersEmitter.once(Me(this.excalidrawContainerRef.current,"wheel",this.handleWheel,{passive:!1}),Me(window,"message",this.onWindowMessage,!1),Me(document,"pointerup",this.removePointer,{passive:!1}),Me(document,"copy",this.onCopy,{passive:!1}),Me(document,"keyup",this.onKeyUp,{passive:!0}),Me(document,"pointermove",this.updateCurrentCursorPosition,{passive:!1}),Me(document.fonts,"loadingdone",t=>{let n=t.fontfaces;this.fonts.onLoaded(n)},{passive:!1}),Me(document,"gesturestart",this.onGestureStart,!1),Me(document,"gesturechange",this.onGestureChange,!1),Me(document,"gestureend",this.onGestureEnd,!1),Me(window,"focus",()=>{this.maybeCleanupAfterMissingPointerUp(null),this.triggerRender(!0)},{passive:!1})),!this.state.viewModeEnabled&&(this.onRemoveEventListenersEmitter.once(Me(document,"fullscreenchange",this.onFullscreenChange,{passive:!1}),Me(document,"paste",this.pasteFromClipboard,{passive:!1}),Me(document,"cut",this.onCut,{passive:!1}),Me(window,"resize",this.onResize,!1),Me(window,"unload",this.onUnload,!1),Me(window,"blur",this.onBlur,!1),Me(this.excalidrawContainerRef.current,"wheel",this.handleWheel,{passive:!1}),Me(this.excalidrawContainerRef.current,"dragover",this.disableEvent,!1),Me(this.excalidrawContainerRef.current,"drop",this.disableEvent,!1)),this.props.detectScroll&&this.onRemoveEventListenersEmitter.once(Me(T1(this.excalidrawContainerRef.current),"scroll",this.onScroll,{passive:!1})))}componentDidUpdate(t,n){this.updateEmbeddables();let i=this.scene.getElementsIncludingDeleted(),r=this.scene.getElementsMapIncludingDeleted(),a=this.scene.getNonDeletedElementsMap();!this.state.showWelcomeScreen&&!i.length&&this.setState({showWelcomeScreen:!0}),t.UIOptions.dockedSidebarBreakpoint!==this.props.UIOptions.dockedSidebarBreakpoint&&this.refreshEditorBreakpoints(),n.userToFollow&&!this.state.collaborators.has(n.userToFollow.socketId)&&this.maybeUnfollowRemoteUser(),(n.zoom.value!==this.state.zoom.value||n.scrollX!==this.state.scrollX||n.scrollY!==this.state.scrollY)&&(this.props?.onScrollChange?.(this.state.scrollX,this.state.scrollY,this.state.zoom),this.onScrollChangeEmitter.trigger(this.state.scrollX,this.state.scrollY,this.state.zoom)),n.userToFollow!==this.state.userToFollow&&(n.userToFollow&&this.onUserFollowEmitter.trigger({userToFollow:n.userToFollow,action:"UNFOLLOW"}),this.state.userToFollow&&this.onUserFollowEmitter.trigger({userToFollow:this.state.userToFollow,action:"FOLLOW"})),Object.keys(this.state.selectedElementIds).length&&ti(this.state)&&this.setState({activeTool:it(this.state,{type:"selection"})}),this.state.activeTool.type==="eraser"&&n.theme!==this.state.theme&&Rb(this.interactiveCanvas,this.state.theme),n.activeTool.type==="selection"&&this.state.activeTool.type!=="selection"&&this.state.showHyperlinkPopup&&this.setState({showHyperlinkPopup:!1}),t.langCode!==this.props.langCode&&this.updateLanguage(),ti(n)&&!ti(this.state)&&this.eraserTrail.endPath(),t.viewModeEnabled!==this.props.viewModeEnabled&&this.setState({viewModeEnabled:!!this.props.viewModeEnabled}),n.viewModeEnabled!==this.state.viewModeEnabled&&(this.addEventListeners(),this.deselectElements()),(n.openDialog?.name==="elementLinkSelector"||this.state.openDialog?.name==="elementLinkSelector")&&n.openDialog?.name!==this.state.openDialog?.name&&(this.deselectElements(),this.setState({hoveredElementIds:{}})),t.zenModeEnabled!==this.props.zenModeEnabled&&this.setState({zenModeEnabled:!!this.props.zenModeEnabled}),t.theme!==this.props.theme&&this.props.theme&&this.setState({theme:this.props.theme}),this.excalidrawContainerRef.current?.classList.toggle("theme--dark",this.state.theme===he.DARK),this.state.editingLinearElement&&!this.state.selectedElementIds[this.state.editingLinearElement.elementId]&&setTimeout(()=>{this.state.editingLinearElement&&this.actionManager.executeAction(Un)}),this.state.editingTextElement?.isDeleted&&this.setState({editingTextElement:null}),this.state.selectedLinearElement&&!this.state.selectedElementIds[this.state.selectedLinearElement.elementId]&&this.setState({selectedLinearElement:null});let{multiElement:o}=n;n.activeTool!==this.state.activeTool&&o!=null&&Va(this.state)&&qi(o,!1)&&Cc(o,this.state,jr(ne.getPointAtIndexGlobalCoordinates(o,-1,a)),this.scene.getNonDeletedElementsMap(),this.scene.getNonDeletedElements()),this.store.commit(r,this.state),this.state.isLoading||(this.props.onChange?.(i,this.state,this.files),this.onChangeEmitter.trigger(i,this.state,this.files))}static resetTapTwice(){Jo=!1}async addElementsFromMixedContentPaste(t,{isPlainPaste:n,sceneX:i,sceneY:r}){if(!n&&t.some(a=>a.type==="imageUrl")&&this.isToolSupported("image")){let a=t.filter(l=>l.type==="imageUrl").map(l=>l.value),o=await Promise.all(a.map(async l=>{try{return{file:await Fy(l)}}catch(m){let u=m.message;return m.cause==="FETCH_ERROR"?u=y("errors.failedToFetchImage"):m.cause==="UNSUPPORTED"&&(u=y("errors.unsupportedFileType")),{errorMessage:u}}})),c=r,d=!1,h={};for(let l of o)if(l.file){let m=this.createImageElement({sceneX:i,sceneY:c}),u=await this.insertImageElement(m,l.file);u&&(d||(d=!0,c-=u.height/2),W(u,{y:c},!1),c=m.y+m.height+25,h[m.id]=!0)}this.setState({selectedElementIds:fe(h,this.state)});let s=o.find(l=>!!l.errorMessage);s&&s.errorMessage&&this.setState({errorMessage:s.errorMessage})}else{let a=t.filter(o=>o.type==="text");a.length&&this.addTextFromPaste(a.map(o=>o.value).join(`
146
+
147
+ `),n)}}addTextFromPaste(t,n=!1){let{x:i,y:r}=Fe({clientX:this.lastViewportPosition.x,clientY:this.lastViewportPosition.y},this.state),a={x:i,y:r,strokeColor:this.state.currentItemStrokeColor,backgroundColor:this.state.currentItemBackgroundColor,fillStyle:this.state.currentItemFillStyle,strokeWidth:this.state.currentItemStrokeWidth,strokeStyle:this.state.currentItemStrokeStyle,roundness:null,roughness:this.state.currentItemRoughness,opacity:this.state.currentItemOpacity,text:t,fontSize:this.state.currentItemFontSize,fontFamily:this.state.currentItemFontFamily,textAlign:zu,verticalAlign:ju,locked:!1},o=mn({fontSize:a.fontSize,fontFamily:a.fontFamily}),c=ja(a.fontFamily),[d,,h]=X0(this.state),s=Math.max(Math.min((h-d)*.5,800),200),l=10,m=r,u=n?[t]:t.split(`
148
+ `),p=u.reduce((f,g,v)=>{let E=so(g).trim();if(E.length){let b=this.getTopLayerFrameAtSceneCoords({x:i,y:m}),w=Di(E,o,c),x=w.width>s,S=x?cm(E,o,s):E;w=x?Di(S,o,c):w;let C=i-w.width/2,T=m-w.height/2,L=ar({...a,x:C,y:T,text:S,originalText:E,lineHeight:c,autoResize:!x,frameId:b?b.id:null});f.push(L),m+=L.height+l}else u[v-1]?.trim()&&(m+=V1(a.fontSize,c)+l);return f},[]);p.length!==0&&(this.scene.insertElements(p),this.setState({selectedElementIds:fe(Object.fromEntries(p.map(f=>[f.id,!0])),this.state)}),!n&&p.length>1&&vS===!1&&!this.device.editor.isMobile&&(this.setToast({message:y("toast.pasteAsSingleElement",{shortcut:F("CtrlOrCmd+Shift+V")}),duration:5e3}),vS=!0),this.store.shouldCaptureIncrement())}handleTextWysiwyg(t,{isExistingElement:n=!1}){let i=this.scene.getElementsMapIncludingDeleted(),r=(a,o)=>{this.scene.replaceAllElements([...this.scene.getElementsIncludingDeleted().map(c=>c.id===t.id&&te(c)?ae(c,{originalText:a,isDeleted:o??c.isDeleted,...Nb(c,Ri(c,i),i,a)}):c)])};yA({id:t.id,canvas:this.canvas,getViewportCoords:(a,o)=>{let{x:c,y:d}=ni({sceneX:a,sceneY:o},this.state);return[c-this.state.offsetLeft,d-this.state.offsetTop]},onChange:ze(a=>{r(a,!1),Gh(t)&&er(t,this.scene.getNonDeletedElementsMap())}),onSubmit:ze(({viaKeyboard:a,nextOriginalText:o})=>{let c=!o.trim();if(r(o,c),!c&&a){let d=t.containerId?t.containerId:t.id;(0,Er.flushSync)(()=>{this.setState(h=>({selectedElementIds:fe({...h.selectedElementIds,[d]:!0},h)}))})}c&&ih(this.scene.getNonDeletedElements(),[t]),(!c||n)&&this.store.shouldCaptureIncrement(),(0,Er.flushSync)(()=>{this.setState({newElement:null,editingTextElement:null})}),this.state.activeTool.locked&&si(this.interactiveCanvas,this.state),this.focusContainer()}),element:t,excalidrawContainer:this.excalidrawContainerRef.current,app:this,autoSelect:!this.device.isTouchScreen}),this.deselectElements(),r(t.originalText,!1)}deselectElements(){this.setState({selectedElementIds:fe({},this.state),selectedGroupIds:{},editingGroupId:null,activeEmbeddable:null})}getTextElementAtPosition(t,n){let i=this.getElementAtPosition(t,n,{includeBoundTextElement:!0});return i&&te(i)&&!i.isDeleted?i:null}getElementAtPosition(t,n,i){let r=this.getElementsAtPosition(t,n,i?.includeBoundTextElement,i?.includeLockedElements);if(r.length>1){if(i?.preferSelected){for(let o=r.length-1;o>-1;o--)if(this.state.selectedElementIds[r[o].id])return r[o]}let a=r[r.length-1];return Ua({x:t,y:n,element:a,shape:Gr(a,this.scene.getNonDeletedElementsMap()),threshold:this.getElementHitThreshold()/2,frameNameBound:ge(a)?this.frameNameBoundsCache.get(a):null})?a:r[r.length-2]}return r.length===1?r[0]:null}getElementsAtPosition(t,n,i=!1,r=!1){let a=[],o=this.scene.getNonDeletedElementsMap();return(i&&r?this.scene.getNonDeletedElements():this.scene.getNonDeletedElements().filter(c=>(r||!c.locked)&&(i||!(te(c)&&c.containerId)))).filter(c=>this.hitElement(t,n,c)).filter(c=>{let d=_c(c,o);return d&&this.state.frameRendering.enabled&&this.state.frameRendering.clip?Nh({x:t,y:n},d,o):!0}).filter(c=>Hr(c)?(a.push(c),!1):!0).concat(a)}getElementHitThreshold(){return e1/this.state.zoom.value}hitElement(t,n,i,r=!0){if(r&&this.state.selectedElementIds[i.id]&&Uh([i],this.state)){let a=R0(i,this.scene.getNonDeletedElementsMap(),_e(i)?0:this.getElementHitThreshold());if(A0(G(t,n),a))return!0}return _0(t,n,F0(i,this.scene.getNonDeletedElementsMap()))?!0:Ua({x:t,y:n,element:i,shape:Gr(i,this.scene.getNonDeletedElementsMap()),threshold:this.getElementHitThreshold(),frameNameBound:ge(i)?this.frameNameBoundsCache.get(i):null})}getTextBindableContainerAtPosition(t,n){let i=this.scene.getNonDeletedElements(),r=this.scene.getSelectedElements(this.state);if(r.length===1)return Wr(r[0],!1)?r[0]:null;let a=null;for(let o=i.length-1;o>=0;--o){if(i[o].isDeleted)continue;let[c,d,h,s]=pn(i[o],this.scene.getNonDeletedElementsMap());if(mt(i[o])&&Ua({x:t,y:n,element:i[o],shape:Gr(i[o],this.scene.getNonDeletedElementsMap()),threshold:this.getElementHitThreshold()})){a=i[o];break}else if(c<t&&t<h&&d<n&&n<s){a=i[o];break}}return Wr(a,!1)?a:null}handleHoverSelectedLinearElement(t,n,i){let r=this.scene.getNonDeletedElementsMap(),a=ne.getElement(t.elementId,r);if(a)if(this.state.selectedLinearElement){let o=-1,c=null;Ua({x:n,y:i,element:a,shape:Gr(a,this.scene.getNonDeletedElementsMap())})?(o=ne.getPointIndexUnderCursor(a,r,this.state.zoom,n,i),c=ne.getSegmentMidpointHitCoords(t,{x:n,y:i},this.state,this.scene.getNonDeletedElementsMap()),(le(a)?o===0||o===a.points.length-1:o>=0)||c?ve(this.interactiveCanvas,ye.POINTER):this.hitElement(n,i,a)&&ve(this.interactiveCanvas,ye.MOVE)):this.hitElement(n,i,a)&&(!le(a)||!(a.startBinding||a.endBinding))&&ve(this.interactiveCanvas,ye.MOVE),this.state.selectedLinearElement.hoverPointIndex!==o&&this.setState({selectedLinearElement:{...this.state.selectedLinearElement,hoverPointIndex:o}}),ne.arePointsEqual(this.state.selectedLinearElement.segmentMidPointHoveredCoords,c)||this.setState({selectedLinearElement:{...this.state.selectedLinearElement,segmentMidPointHoveredCoords:c}})}else ve(this.interactiveCanvas,ye.AUTO)}updateGestureOnPointerDown(t){pe.pointers.set(t.pointerId,{x:t.clientX,y:t.clientY}),pe.pointers.size===2&&(pe.lastCenter=$x(pe.pointers),pe.initialScale=this.state.zoom.value,pe.initialDistance=Bx(Array.from(pe.pointers.values())))}initialPointerDownState(t){let n=Fe(t,this.state),i=this.scene.getSelectedElements(this.state),[r,a,o,c]=Ve(i),d=i.findIndex(le)===0;return{origin:n,withCmdOrCtrl:t[k.CTRL_OR_CMD],originInGrid:jr(ht(n.x,n.y,t[k.CTRL_OR_CMD]||d?null:this.getEffectiveGridSize())),scrollbars:Hx(Ef,t.clientX-this.state.offsetLeft,t.clientY-this.state.offsetTop),lastCoords:{...n},originalElements:this.scene.getNonDeletedElements().reduce((h,s)=>(h.set(s.id,wo(s)),h),new Map),resize:{handleType:!1,isResizing:!1,offset:{x:0,y:0},arrowDirection:"origin",center:{x:(o+r)/2,y:(c+a)/2}},hit:{element:null,allHitElements:[],wasAddedToSelection:!1,hasBeenDuplicated:!1,hasHitCommonBoundingBoxOfSelectedElements:this.isHittingCommonBoundingBoxOfSelectedElements(n,i)},drag:{hasOccurred:!1,offset:null},eventListeners:{onMove:null,onUp:null,onKeyUp:null,onKeyDown:null},boxSelection:{hasOccurred:!1}}}handleDraggingScrollBar(t,n){if(!(n.scrollbars.isOverEither&&!this.state.multiElement))return!1;yf=!0,n.lastCoords.x=t.clientX,n.lastCoords.y=t.clientY;let i=pf(a=>{a.target instanceof HTMLElement&&this.handlePointerMoveOverScrollbars(a,n)}),r=ze(()=>{nl=null,yf=!1,si(this.interactiveCanvas,this.state),this.setState({cursorButton:"up"}),this.savePointer(t.clientX,t.clientY,"up"),window.removeEventListener("pointermove",i),window.removeEventListener("pointerup",r),i.flush()});return nl=r,window.addEventListener("pointermove",i),window.addEventListener("pointerup",r),!0}isASelectedElement(t){return t!=null&&this.state.selectedElementIds[t.id]}isHittingCommonBoundingBoxOfSelectedElements(t,n){if(n.length<2)return!1;let i=this.getElementHitThreshold(),[r,a,o,c]=Ve(n);return t.x>r-i&&t.x<o+i&&t.y>a-i&&t.y<c+i}getCurrentItemRoundness(t){return this.state.currentItemRoundness==="round"?{type:rc(t)?Rn.ADAPTIVE_RADIUS:Rn.PROPORTIONAL_RADIUS}:null}maybeCacheReferenceSnapPoints(t,n,i=!1){sh({event:t,app:this,selectedElements:n})&&(i||!nr.getReferenceSnapPoints())&&nr.setReferenceSnapPoints(hb(this.scene.getNonDeletedElements(),n,this.state,this.scene.getNonDeletedElementsMap()))}maybeCacheVisibleGaps(t,n,i=!1){sh({event:t,app:this,selectedElements:n})&&(i||!nr.getVisibleGaps())&&nr.setVisibleGaps(mb(this.scene.getNonDeletedElements(),n,this.state,this.scene.getNonDeletedElementsMap()))}onKeyDownFromPointerDownHandler(t){return ze(n=>{this.maybeHandleResize(t,n)||this.maybeDragNewGenericElement(t,n)})}onKeyUpFromPointerDownHandler(t){return ze(n=>{n.key===k.ALT&&n.preventDefault(),!this.maybeHandleResize(t,n)&&this.maybeDragNewGenericElement(t,n)})}onPointerMoveFromPointerDownHandler(t){return pf(n=>{if(this.state.openDialog?.name==="elementLinkSelector")return;let i=Fe(n,this.state);if(this.state.selectedLinearElement&&this.state.selectedLinearElement.elbowed&&this.state.selectedLinearElement.pointerDownState.segmentMidpoint.index){let[s,l]=ht(i.x,i.y,n[k.CTRL_OR_CMD]?null:this.getEffectiveGridSize()),m=this.state.selectedLinearElement.pointerDownState.segmentMidpoint.index;if(m<0){let p=ne.getSegmentMidpointHitCoords({...this.state.selectedLinearElement,segmentMidPointHoveredCoords:null},{x:s,y:l},this.state,this.scene.getNonDeletedElementsMap());m=p?ne.getSegmentMidPointIndex(this.state.selectedLinearElement,this.state,p,this.scene.getNonDeletedElementsMap()):-1}let u=ne.moveFixedSegment(this.state.selectedLinearElement,m,s,l,this.scene.getNonDeletedElementsMap());(0,Er.flushSync)(()=>{this.state.selectedLinearElement&&this.setState({selectedLinearElement:{...this.state.selectedLinearElement,segmentMidPointHoveredCoords:u.segmentMidPointHoveredCoords,pointerDownState:u.pointerDownState}})});return}let r=this.lastPointerMoveCoords??t.origin;if(this.lastPointerMoveCoords=i,t.drag.offset===null&&(t.drag.offset=jr(Ty(this.scene.getSelectedElements(this.state),t.origin.x,t.origin.y))),!(n.target instanceof HTMLElement)||this.handlePointerMoveOverScrollbars(n,t))return;if(ti(this.state)){this.handleEraser(n,t,i);return}this.state.activeTool.type==="laser"&&this.laserTrails.addPointToPath(i.x,i.y);let[a,o]=ht(i.x,i.y,n[k.CTRL_OR_CMD]?null:this.getEffectiveGridSize());if(!t.drag.hasOccurred&&(this.state.activeTool.type==="arrow"||this.state.activeTool.type==="line")&&Gi(G(i.x,i.y),G(t.origin.x,t.origin.y))<Or)return;if(t.resize.isResizing&&(t.lastCoords.x=i.x,t.lastCoords.y=i.y,this.maybeHandleCrop(t,n)||this.maybeHandleResize(t,n)))return!0;let c=this.scene.getNonDeletedElementsMap();if(this.state.selectedLinearElement){let s=this.state.editingLinearElement||this.state.selectedLinearElement;if(ne.shouldAddMidpoint(this.state.selectedLinearElement,i,this.state,c)){let l=ne.addMidpoint(this.state.selectedLinearElement,i,this,!n[k.CTRL_OR_CMD],c);if(!l)return;(0,Er.flushSync)(()=>{this.state.selectedLinearElement&&this.setState({selectedLinearElement:{...this.state.selectedLinearElement,pointerDownState:l.pointerDownState,selectedPointsIndices:l.selectedPointsIndices}}),this.state.editingLinearElement&&this.setState({editingLinearElement:{...this.state.editingLinearElement,pointerDownState:l.pointerDownState,selectedPointsIndices:l.selectedPointsIndices}})});return}else if(s.pointerDownState.segmentMidpoint.value!==null&&!s.pointerDownState.segmentMidpoint.added)return;if(ne.handlePointDragging(n,this,i.x,i.y,(l,m)=>{this.maybeSuggestBindingsForLinearElementAtCoords(l,m)},s,this.scene)){t.lastCoords.x=i.x,t.lastCoords.y=i.y,t.drag.hasOccurred=!0,this.state.editingLinearElement&&!this.state.editingLinearElement.isDragging&&this.setState({editingLinearElement:{...this.state.editingLinearElement,isDragging:!0}}),this.state.selectedLinearElement.isDragging||this.setState({selectedLinearElement:{...this.state.selectedLinearElement,isDragging:!0}});return}}let d=t.hit.allHitElements.some(s=>this.isASelectedElement(s)),h=this.state.editingLinearElement&&n.shiftKey&&this.state.editingLinearElement.elementId===t.hit.element?.id;if((d||t.hit.hasHitCommonBoundingBoxOfSelectedElements)&&!h){let s=this.scene.getSelectedElements(this.state);if(s.every(p=>p.locked))return;let l=s.find(p=>ge(p)),m=this.getTopLayerFrameAtSceneCoords(i),u=m&&!l?m:null;if(this.state.frameToHighlight!==u&&(0,Er.flushSync)(()=>{this.setState({frameToHighlight:u})}),t.drag.hasOccurred=!0,s.length>0&&!t.withCmdOrCtrl&&!this.state.editingTextElement&&this.state.activeEmbeddable?.state!=="active"){let p={x:i.x-t.origin.x,y:i.y-t.origin.y},f=[...t.originalElements.values()],g=n.shiftKey;if(g){let b=Math.abs(p.x),w=Math.abs(p.y),x=g&&b<w,S=g&&b>w;x&&(p.x=0),S&&(p.y=0)}if(this.state.croppingElementId){let b=this.scene.getNonDeletedElementsMap().get(this.state.croppingElementId);if(b&&_e(b)&&b.crop!==null&&t.hit.element===b){let w=b.crop,x=Ur(b)&&this.imageCache.get(b.fileId)?.image;if(x&&!(x instanceof Promise)){let S=E1(Qu(i.x-r.x,i.y-r.y),Math.max(this.state.zoom.value,2)),[C,T,L,M,R,z]=pn(b,c),_=Zl(un(G(C,T),G(R,z),b.angle)),H=Zl(un(G(L,T),G(R,z),b.angle)),P=Zl(un(G(C,M),G(R,z),b.angle)),B=tm(em(H,_)),q=tm(em(P,_)),V=Qu(Ju(S,B),Ju(S,q)),Y={...w,x:Ft(w.x-V[0]*Math.sign(b.scale[0]),0,x.naturalWidth-w.width),y:Ft(w.y-V[1]*Math.sign(b.scale[1]),0,x.naturalHeight-w.height)};W(b,{crop:Y});return}}}this.maybeCacheVisibleGaps(n,s),this.maybeCacheReferenceSnapPoints(n,s);let{snapOffset:v,snapLines:E}=pb(f,p,this,n,this.scene.getNonDeletedElementsMap());if(this.setState({snapLines:E}),this.state.editingFrame||Iy(t,s,p,this.scene,v,n[k.CTRL_OR_CMD]?null:this.getEffectiveGridSize()),this.setState({selectedElementsAreBeingDragged:!0,selectionElement:null}),(s.length!==1||!le(s[0]))&&this.setState({suggestedBindings:Sc(s,this.scene.getNonDeletedElementsMap(),this.state.zoom)}),n.altKey&&!t.hit.hasBeenDuplicated){t.hit.hasBeenDuplicated=!0;let b=[],w=[],x=new Map,S=new Map,C=t.hit.element,T=new Set(this.scene.getSelectedElements({selectedElementIds:this.state.selectedElementIds,includeBoundTextElement:!0,includeElementsInFrames:!0}).map(R=>R.id)),L=this.scene.getElementsIncludingDeleted();for(let R of L){let z=T.has(R.id)||R.id===C?.id&&t.hit.wasAddedToSelection;if(Math.abs(R.x)>1e7||Math.abs(R.x)>1e7||Math.abs(R.width)>1e7||Math.abs(R.height)>1e7){console.error("Alt+dragging element in scene with invalid dimensions",R.x,R.y,R.width,R.height,z);return}if(z){let _=fh(this.state.editingGroupId,x,R);if(Math.abs(_.x)>1e7||Math.abs(_.x)>1e7||Math.abs(_.width)>1e7||Math.abs(_.height)>1e7){console.error("Alt+dragging duplicated element with invalid dimensions",_.x,_.y,_.width,_.height);return}let H=t.originalElements.get(R.id);if(Math.abs(H.x)>1e7||Math.abs(H.x)>1e7||Math.abs(H.width)>1e7||Math.abs(H.height)>1e7){console.error("Alt+dragging duplicated element with invalid dimensions",H.x,H.y,H.width,H.height);return}W(_,{x:H.x,y:H.y}),t.originalElements.set(_.id,_),b.push(_),w.push(R),S.set(R.id,_.id)}else b.push(R)}let M=[...b,...w];M=this.props.onDuplicate?.(M,L)||M,sr(M,Ee(w)),lh(b,w,S),nh(M,w,S,"duplicatesServeAsOld"),Rh(M,w,S),this.scene.replaceAllElements(M),this.maybeCacheVisibleGaps(n,s,!0),this.maybeCacheReferenceSnapPoints(n,s,!0)}return}}if(this.state.selectionElement)t.lastCoords.x=i.x,t.lastCoords.y=i.y,this.maybeDragNewGenericElement(t,n);else{let s=this.state.newElement;if(!s)return;if(s.type==="freedraw"){let l=s.points,m=i.x-s.x,u=i.y-s.y,p=l.length>0&&l[l.length-1];if(!(p&&p[0]===m&&p[1]===u)){let f=s.simulatePressure?s.pressures:[...s.pressures,n.pressure];W(s,{points:[...l,G(m,u)],pressures:f},!1),this.setState({newElement:s})}}else if(De(s)){t.drag.hasOccurred=!0;let l=s.points,m=a-s.x,u=o-s.y;Ec(n)&&l.length===2&&({width:m,height:u}=jh(s.x,s.y,i.x,i.y)),l.length===1?W(s,{points:[...l,G(m,u)]},!1):(l.length===2||l.length>1&&le(s))&&W(s,{points:[...l.slice(0,-1),G(m,u)]},!1,{isDragging:!0}),this.setState({newElement:s}),qi(s,!1)&&this.maybeSuggestBindingsForLinearElementAtCoords(s,[i],this.state.startBoundElement)}else t.lastCoords.x=i.x,t.lastCoords.y=i.y,this.maybeDragNewGenericElement(t,n,!1)}if(this.state.activeTool.type==="selection"){t.boxSelection.hasOccurred=!0;let s=this.scene.getNonDeletedElements();if(this.state.editingLinearElement)ne.handleBoxSelection(n,this.state,this.setState.bind(this),this.scene.getNonDeletedElementsMap());else{let l=!0;!n.shiftKey&&Ye(s,this.state)&&(t.withCmdOrCtrl&&t.hit.element?this.setState(u=>wt({...u,selectedElementIds:{[t.hit.element.id]:!0}},this.scene.getNonDeletedElements(),u,this)):l=!1);let m=this.state.selectionElement?py(s,this.state.selectionElement,this.scene.getNonDeletedElementsMap(),!1):[];this.setState(u=>{let p={...l&&u.selectedElementIds,...m.reduce((f,g)=>(f[g.id]=!0,f),{})};return t.hit.element&&(m.length?delete p[t.hit.element.id]:p[t.hit.element.id]=!0),u=l?u:{...u,selectedGroupIds:{},editingGroupId:null},{...wt({editingGroupId:u.editingGroupId,selectedElementIds:p},this.scene.getNonDeletedElements(),u,this),selectedLinearElement:m.length===1&&De(m[0])?new ne(m[0]):null,showHyperlinkPopup:m.length===1&&(m[0].link||nn(m[0]))?"info":!1}})}}})}handlePointerMoveOverScrollbars(t,n){if(n.scrollbars.isOverHorizontal){let i=t.clientX,r=i-n.lastCoords.x;return this.translateCanvas({scrollX:this.state.scrollX-r/this.state.zoom.value}),n.lastCoords.x=i,!0}if(n.scrollbars.isOverVertical){let i=t.clientY,r=i-n.lastCoords.y;return this.translateCanvas({scrollY:this.state.scrollY-r/this.state.zoom.value}),n.lastCoords.y=i,!0}return!1}onPointerUpFromPointerDownHandler(t){return ze(n=>{this.removePointer(n),t.eventListeners.onMove&&t.eventListeners.onMove.flush();let{newElement:i,resizingElement:r,croppingElementId:a,multiElement:o,activeTool:c,isResizing:d,isRotating:h,isCropping:s}=this.state;this.setState(f=>({isResizing:!1,isRotating:!1,isCropping:!1,resizingElement:null,selectionElement:null,frameToHighlight:null,elementsToHighlight:null,cursorButton:"up",snapLines:$a(f.snapLines,[]),originSnapOffset:null})),this.lastPointerMoveCoords=null,nr.setReferenceSnapPoints(null),nr.setVisibleGaps(null),this.savePointer(n.clientX,n.clientY,"up"),this.setState({selectedElementsAreBeingDragged:!1});let l=this.scene.getNonDeletedElementsMap();if(t.drag.hasOccurred&&t.hit?.element?.id){let f=l.get(t.hit.element.id);ic(f)&&f.boundElements?.filter(g=>g.type==="arrow").map(g=>l.get(g.id)).filter(g=>le(g)).forEach(g=>{g&&W(g,{},!0)})}if(this.state.editingLinearElement)if(!t.boxSelection.hasOccurred&&t.hit?.element?.id!==this.state.editingLinearElement.elementId)this.actionManager.executeAction(Un);else{let f=ne.handlePointerUp(n,this.state.editingLinearElement,this.state,this.scene);f!==this.state.editingLinearElement&&this.setState({editingLinearElement:f,suggestedBindings:[]})}else if(this.state.selectedLinearElement){if(this.state.selectedLinearElement.elbowed){let f=ne.getElement(this.state.selectedLinearElement.elementId,this.scene.getNonDeletedElementsMap());f&&W(f,{},!0)}if(t.hit?.element?.id!==this.state.selectedLinearElement.elementId)this.scene.getSelectedElements(this.state).length>1&&this.setState({selectedLinearElement:null});else{let f=ne.handlePointerUp(n,this.state.selectedLinearElement,this.state,this.scene),{startBindingElement:g,endBindingElement:v}=f,E=this.scene.getElement(f.elementId);qi(E)&&Jm(E,g,v,l,this.scene),f!==this.state.selectedLinearElement&&this.setState({selectedLinearElement:{...f,selectedPointsIndices:null},suggestedBindings:[]})}}if(this.missingPointerEventCleanupEmitter.clear(),window.removeEventListener("pointermove",t.eventListeners.onMove),window.removeEventListener("pointerup",t.eventListeners.onUp),window.removeEventListener("keydown",t.eventListeners.onKeyDown),window.removeEventListener("keyup",t.eventListeners.onKeyUp),this.state.pendingImageElementId&&this.setState({pendingImageElementId:null}),this.props?.onPointerUp?.(c,t),this.onPointerUpEmitter.trigger(this.state.activeTool,t,n),i?.type==="freedraw"){let f=Fe(n,this.state),g=i.points,v=f.x-i.x,E=f.y-i.y;v===g[0][0]&&E===g[0][1]&&(E+=1e-4,v+=1e-4);let b=i.simulatePressure?[]:[...i.pressures,n.pressure];W(i,{points:[...g,G(v,E)],pressures:b,lastCommittedPoint:G(v,E)}),this.actionManager.executeAction(Un);return}if(_e(i)){let f=i;try{this.initializeImageDimensions(f),this.setState({selectedElementIds:fe({[f.id]:!0},this.state)},()=>{this.actionManager.executeAction(Un)})}catch(g){console.error(g),this.scene.replaceAllElements(this.scene.getElementsIncludingDeleted().filter(v=>v.id!==f.id)),this.actionManager.executeAction(Un)}return}if(De(i)){i.points.length>1&&this.store.shouldCaptureIncrement();let f=Fe(n,this.state);!t.drag.hasOccurred&&i&&!o?(W(i,{points:[...i.points,G(f.x-i.x,f.y-i.y)]}),this.setState({multiElement:i,newElement:i})):t.drag.hasOccurred&&!o&&(Va(this.state)&&qi(i,!1)&&Cc(i,this.state,f,this.scene.getNonDeletedElementsMap(),this.scene.getNonDeletedElements()),this.setState({suggestedBindings:[],startBoundElement:null}),c.locked?this.setState(g=>({newElement:null})):(Nn(this.interactiveCanvas),this.setState(g=>({newElement:null,activeTool:it(this.state,{type:"selection"}),selectedElementIds:fe({...g.selectedElementIds,[i.id]:!0},g),selectedLinearElement:new ne(i)}))),this.scene.triggerUpdate());return}if(te(i)){let f=H1(mn({fontSize:i.fontSize,fontFamily:i.fontFamily}),i.lineHeight);i.width<f&&W(i,{autoResize:!0}),this.resetCursor(),this.handleTextWysiwyg(i,{isExistingElement:!0})}if(c.type!=="selection"&&i&&Mo(i)){this.updateScene({elements:this.scene.getElementsIncludingDeleted().filter(f=>f.id!==i.id),appState:{newElement:null},captureUpdate:N.NEVER});return}if(ge(i)){let f=dy(this.scene.getElementsIncludingDeleted(),i,this.scene.getNonDeletedElementsMap());this.scene.replaceAllElements(ko(this.scene.getElementsMapIncludingDeleted(),f,i,this.state))}if(i&&(W(i,vy(i)),this.scene.triggerUpdate()),t.drag.hasOccurred){let f=Fe(n,this.state);if(this.state.selectedLinearElement&&this.state.selectedLinearElement.isDragging){let g=this.scene.getElement(this.state.selectedLinearElement.elementId);if(g?.frameId){let v=_c(g,l);v&&g&&(Ah(g,v,this.scene.getNonDeletedElementsMap())||(W(g,{groupIds:[]}),Ph([g],this.scene.getNonDeletedElementsMap()),this.scene.triggerUpdate()))}}else{let g=this.getTopLayerFrameAtSceneCoords(f),v=this.scene.getSelectedElements(this.state),E=this.scene.getElementsMapIncludingDeleted(),b=w=>{if(w.length>0){for(let x of w){let S=x.groupIds.indexOf(this.state.editingGroupId);W(x,{groupIds:x.groupIds.slice(0,S)},!1)}E.forEach(x=>{x.groupIds.length&&Ke(E,x.groupIds[x.groupIds.length-1]).length<2&&W(x,{groupIds:[]},!1)}),this.setState({editingGroupId:null})}};if(g&&!this.state.selectedElementIds[g.id]){let w=v.filter(x=>x.frameId!==g.id&&Oh(x,E,this.state));this.state.editingGroupId&&b(w),E=ko(E,w,g,this.state)}else if(!g&&this.state.editingGroupId){let w=v.filter(x=>x.frameId&&!Oh(x,E,this.state));b(w)}E=Qr(E,this.state,this),this.scene.replaceAllElements(E)}}if(r&&this.store.shouldCaptureIncrement(),r&&Mo(r)&&this.updateScene({elements:this.scene.getElementsIncludingDeleted().filter(f=>f.id!==r.id),captureUpdate:N.NEVER}),t.resize.isResizing){let f=Qr(this.scene.getElementsIncludingDeleted(),this.state,this),g=this.scene.getSelectedElements(this.state).filter(v=>ge(v));for(let v of g)f=_h(f,To(this.scene.getElementsIncludingDeleted(),v,this.state,l),v,this);this.scene.replaceAllElements(f)}let m=t.hit.element;this.state.selectedLinearElement?.elementId!==m?.id&&De(m)&&this.scene.getSelectedElements(this.state).length===1&&this.setState({selectedLinearElement:new ne(m)}),(!a||a&&(!m&&!s||m&&m.id!==a))&&this.finishImageCropping();let u=this.lastPointerDownEvent,p=this.lastPointerUpEvent||this.lastPointerMoveEvent;if(ti(this.state)&&u&&p){if(this.eraserTrail.endPath(),Gi(G(u.clientX,u.clientY),G(p.clientX,p.clientY))===0){let f=Fe({clientX:p.clientX,clientY:p.clientY},this.state);this.getElementsAtPosition(f.x,f.y).forEach(g=>this.elementsPendingErasure.add(g.id))}this.eraseElements();return}else this.elementsPendingErasure.size&&this.restoreReadyToEraseElements();if(m&&!t.drag.hasOccurred&&!t.hit.wasAddedToSelection&&(!this.state.editingLinearElement||!t.boxSelection.hasOccurred)&&(n.shiftKey&&!this.state.editingLinearElement?this.state.selectedElementIds[m.id]?rh(this.state,m)?this.setState(f=>{let g={...f.selectedElementIds};for(let v of m.groupIds.flatMap(E=>Ke(this.scene.getNonDeletedElements(),E)))delete g[v.id];return{selectedGroupIds:{...f.selectedElementIds,...m.groupIds.map(v=>({[v]:!1})).reduce((v,E)=>({...v,...E}),{})},selectedElementIds:fe(g,f)}}):this.state.selectedLinearElement?.isDragging||this.setState(f=>{let g={...f.selectedElementIds};delete g[m.id];let v=se(this.scene.getNonDeletedElements(),{selectedElementIds:g});return{...wt({editingGroupId:f.editingGroupId,selectedElementIds:g},this.scene.getNonDeletedElements(),f,this),selectedLinearElement:v.length===1&&De(v[0])?new ne(v[0]):f.selectedLinearElement}}):m.frameId&&this.state.selectedElementIds[m.frameId]?this.setState(f=>{let g={...f.selectedElementIds,[m.id]:!0};return delete g[m.frameId],(this.scene.getElement(m.frameId)?.groupIds??[]).flatMap(v=>Ke(this.scene.getNonDeletedElements(),v)).forEach(v=>{delete g[v.id]}),{...wt({editingGroupId:f.editingGroupId,selectedElementIds:g},this.scene.getNonDeletedElements(),f,this),showHyperlinkPopup:m.link||nn(m)?"info":!1}}):this.setState(f=>({selectedElementIds:fe({...f.selectedElementIds,[m.id]:!0},f)})):this.setState(f=>({...wt({editingGroupId:f.editingGroupId,selectedElementIds:{[m.id]:!0}},this.scene.getNonDeletedElements(),f,this),selectedLinearElement:De(m)&&f.selectedLinearElement?.elementId!==m.id?new ne(m):f.selectedLinearElement}))),!(m&&le(m))&&!t.drag.hasOccurred&&!this.state.isResizing&&(m&&P0({x:t.origin.x,y:t.origin.y,element:m,shape:Gr(m,this.scene.getNonDeletedElementsMap()),threshold:this.getElementHitThreshold(),frameNameBound:ge(m)?this.frameNameBoundsCache.get(m):null},l)||!m&&t.hit.hasHitCommonBoundingBoxOfSelectedElements)){this.state.editingLinearElement?this.setState({editingLinearElement:null}):this.setState({selectedElementIds:fe({},this.state),selectedGroupIds:{},editingGroupId:null,activeEmbeddable:null}),ve(this.interactiveCanvas,ye.AUTO);return}if(!c.locked&&c.type!=="freedraw"&&i&&this.setState(f=>({selectedElementIds:fe({...f.selectedElementIds,[i.id]:!0},f),showHyperlinkPopup:nn(i)&&!i.link?"editor":f.showHyperlinkPopup})),(c.type!=="selection"||Ye(this.scene.getNonDeletedElements(),this.state)||!hn(this.state.previousSelectedElementIds,this.state.selectedElementIds))&&this.store.shouldCaptureIncrement(),t.drag.hasOccurred||d||h||s){let f=this.scene.getSelectedElements(this.state).filter(De);fo(f,this.scene.getNonDeletedElementsMap(),this.scene.getNonDeletedElements(),this.scene,Va(this.state),this.state.selectedLinearElement?.selectedPointsIndices??[],this.state.zoom)}if(c.type==="laser"){this.laserTrails.endPath();return}!c.locked&&c.type!=="freedraw"?(Nn(this.interactiveCanvas),this.setState({newElement:null,suggestedBindings:[],activeTool:it(this.state,{type:"selection"})})):this.setState({newElement:null,suggestedBindings:[]}),m&&this.lastPointerUpEvent&&this.lastPointerDownEvent&&this.lastPointerUpEvent.timeStamp-this.lastPointerDownEvent.timeStamp<300&&pe.pointers.size<=1&&Ba(m)&&this.isIframeLikeElementCenter(m,this.lastPointerUpEvent,t.origin.x,t.origin.y)&&this.handleEmbeddableCenterClick(m)})}clearSelection(t){this.setState(n=>({selectedElementIds:fe({},n),activeEmbeddable:null,selectedGroupIds:{},editingGroupId:n.editingGroupId&&t!=null&&vo(t,n.editingGroupId)?n.editingGroupId:null})),this.setState({selectedElementIds:fe({},this.state),activeEmbeddable:null,previousSelectedElementIds:this.state.selectedElementIds})}getTextWysiwygSnappedToCenterPosition(t,n,i,r){if(r){let a=r.x+r.width/2,o=r.y+r.height/2,c=Tc(r,i,this.scene.getNonDeletedElementsMap());if(c&&(a=c.x,o=c.y),Math.hypot(t-a,n-o)<Qg){let{x:d,y:h}=ni({sceneX:a,sceneY:o},i);return{viewportX:d,viewportY:h,elementCenterX:a,elementCenterY:o}}}}getCanvasOffsets(){if(this.excalidrawContainerRef?.current){let t=this.excalidrawContainerRef.current,{left:n,top:i}=t.getBoundingClientRect();return{offsetLeft:n,offsetTop:i}}return{offsetLeft:0,offsetTop:0}}async updateLanguage(){let t=qf.find(n=>n.code===this.props.langCode)||Ns;await ES(t),this.setAppState({})}},kA=()=>{(dt.MODE===Ws.TEST||dt.DEV)&&(window.h=window.h||{},Object.defineProperties(window.h,{elements:{configurable:!0,get(){return this.app?.scene.getElementsIncludingDeleted()},set(e){return this.app?.scene.replaceAllElements(Ga(e))}},scene:{configurable:!0,get(){return this.app?.scene}}}))};kA();var MA=TA,DA=()=>{Array.prototype.at||Object.defineProperty(Array.prototype,"at",{value:function(e){if(e=Math.trunc(e)||0,e<0&&(e+=this.length),!(e<0||e>=this.length))return this[e]},writable:!0,enumerable:!1,configurable:!0}),Element.prototype.replaceChildren||(Element.prototype.replaceChildren=function(...e){this.innerHTML="",this.append(...e)})},LA=DA,RA=({children:e})=>{let{FooterCenterTunnel:t}=Vt(),n=yt();return(0,Xf.jsx)(t.In,{children:(0,Xf.jsx)("div",{className:$("footer-center zen-mode-transition",{"layer-ui__wrapper__footer-left--transition-bottom":n.zenModeEnabled}),children:e})})};RA.displayName="FooterCenter";var AA=()=>(0,In.jsx)("svg",{viewBox:"0 0 40 40",fill:"none",xmlns:"http://www.w3.org/2000/svg",className:"ExcalidrawLogo-icon",children:(0,In.jsx)("path",{d:"M39.9 32.889a.326.326 0 0 0-.279-.056c-2.094-3.083-4.774-6-7.343-8.833l-.419-.472a.212.212 0 0 0-.056-.139.586.586 0 0 0-.167-.111l-.084-.083-.056-.056c-.084-.167-.28-.278-.475-.167-.782.39-1.507.973-2.206 1.528-.92.722-1.842 1.445-2.708 2.25a8.405 8.405 0 0 0-.977 1.028c-.14.194-.028.361.14.444-.615.611-1.23 1.223-1.843 1.861a.315.315 0 0 0-.084.223c0 .083.056.166.111.194l1.09.833v.028c1.535 1.528 4.244 3.611 7.12 5.861.418.334.865.667 1.284 1 .195.223.39.473.558.695.084.11.28.139.391.055.056.056.14.111.196.167a.398.398 0 0 0 .167.056.255.255 0 0 0 .224-.111.394.394 0 0 0 .055-.167c.029 0 .028.028.056.028a.318.318 0 0 0 .224-.084l5.082-5.528a.309.309 0 0 0 0-.444Zm-14.63-1.917a.485.485 0 0 0 .111.14c.586.5 1.2 1 1.843 1.555l-2.569-1.945-.251-.166c-.056-.028-.112-.084-.168-.111l-.195-.167.056-.056.055-.055.112-.111c.866-.861 2.346-2.306 3.1-3.028-.81.805-2.43 3.167-2.095 3.944Zm8.767 6.89-2.122-1.612a44.713 44.713 0 0 0-2.625-2.5c1.145.861 2.122 1.611 2.262 1.75 1.117.972 1.06.806 1.815 1.445l.921.666a1.06 1.06 0 0 1-.251.25Zm.558.416-.056-.028c.084-.055.168-.111.252-.194l-.196.222ZM1.089 5.75c.055.361.14.722.195 1.056.335 1.833.67 3.5 1.284 4.75l.252.944c.084.361.223.806.363.917 1.424 1.25 3.602 3.11 5.947 4.889a.295.295 0 0 0 .363 0s0 .027.028.027a.254.254 0 0 0 .196.084.318.318 0 0 0 .223-.084c2.988-3.305 5.221-6.027 6.813-8.305.112-.111.14-.278.14-.417.111-.111.195-.25.307-.333.111-.111.111-.306 0-.39l-.028-.027c0-.055-.028-.139-.084-.167-.698-.666-1.2-1.138-1.731-1.638-.922-.862-1.871-1.75-3.881-3.75l-.028-.028c-.028-.028-.056-.056-.112-.056-.558-.194-1.703-.389-3.127-.639C6.087 2.223 3.21 1.723.614.944c0 0-.168 0-.196.028l-.083.084c-.028.027-.056.055-.224.11h.056-.056c.028.167.028.278.084.473 0 .055.112.5.112.555l.782 3.556Zm15.496 3.278-.335-.334c.084.112.196.195.335.334Zm-3.546 4.666-.056.056c0-.028.028-.056.056-.056Zm-2.038-10c.168.167.866.834 1.033.973-.726-.334-2.54-1.167-3.379-1.445.838.167 1.983.334 2.346.472ZM1.424 2.306c.419.722.754 3.222 1.089 5.666-.196-.778-.335-1.555-.503-2.278-.251-1.277-.503-2.416-.838-3.416.056 0 .14 0 .252.028Zm-.168-.584c-.112 0-.223-.028-.307-.028 0-.027 0-.055-.028-.055.14 0 .223.028.335.083Zm-1.089.222c0-.027 0-.027 0 0ZM39.453 1.333c.028-.11-.558-.61-.363-.639.42-.027.42-.666 0-.666-.558.028-1.144.166-1.675.25-.977.194-1.982.389-2.96.61-2.205.473-4.383.973-6.561 1.557-.67.194-1.424.333-2.066.666-.224.111-.196.333-.084.472-.056.028-.084.028-.14.056-.195.028-.363.056-.558.083-.168.028-.252.167-.224.334 0 .027.028.083.028.11-1.173 1.556-2.485 3.195-3.909 4.945-1.396 1.611-2.876 3.306-4.356 5.056-4.719 5.5-10.052 11.75-15.943 17.25a.268.268 0 0 0 0 .389c.028.027.056.055.084.055-.084.084-.168.14-.252.222-.056.056-.084.111-.084.167a.605.605 0 0 0-.111.139c-.112.111-.112.305.028.389.111.11.307.11.39-.028.029-.028.029-.056.056-.056a.44.44 0 0 1 .615 0c.335.362.67.723.977 1.028l-.698-.583c-.112-.111-.307-.083-.39.028-.113.11-.085.305.027.389l7.427 6.194c.056.056.112.056.196.056s.14-.028.195-.084l.168-.166c.028.027.083.027.111.027.084 0 .14-.027.196-.083 10.052-10.055 18.15-17.639 27.42-24.417.083-.055.111-.166.111-.25.112 0 .196-.083.251-.194 1.704-5.194 2.039-9.806 2.15-12.083v-.028c0-.028.028-.056.028-.083.028-.056.028-.084.028-.084a1.626 1.626 0 0 0-.111-1.028ZM21.472 9.5c.446-.5.893-1.028 1.34-1.5-2.876 3.778-7.65 9.583-14.408 16.5 4.607-5.083 9.242-10.333 13.068-15ZM5.193 35.778h.084-.084Zm3.462 3.194c-.027-.028-.027-.028 0-.028v.028Zm4.16-3.583c.224-.25.448-.472.699-.722 0 0 0 .027.028.027-.252.223-.475.445-.726.695Zm1.146-1.111c.14-.14.279-.334.446-.5l.028-.028c1.648-1.694 3.351-3.389 5.082-5.111l.028-.028c.419-.333.921-.694 1.368-1.028a379.003 379.003 0 0 0-6.952 6.695ZM24.794 6.472c-.921 1.195-1.954 2.778-2.82 4.028-2.736 3.944-11.532 13.583-11.727 13.75a1976.983 1976.983 0 0 1-8.042 7.639l-.167.167c-.14-.167-.14-.417.028-.556C14.49 19.861 22.03 10.167 25.074 5.917c-.084.194-.14.36-.28.555Zm4.83 5.695c-1.116-.64-1.646-1.64-1.34-2.611l.084-.334c.028-.083.084-.194.14-.277.307-.5.754-.917 1.257-1.167.027 0 .055 0 .083-.028-.028-.056-.028-.139-.028-.222.028-.167.14-.278.335-.278.335 0 1.369.306 1.76.639.111.083.223.194.335.305.14.167.363.445.474.667.056.028.112.306.196.445.056.222.111.472.084.694-.028.028 0 .194-.028.194a2.668 2.668 0 0 1-.363 1.028c-.028.028-.028.056-.056.084l-.028.027c-.14.223-.335.417-.53.556-.643.444-1.369.583-2.095.389 0 0-.195-.084-.28-.111Zm8.154-.834a39.098 39.098 0 0 1-.893 3.167c0 .028-.028.083 0 .111-.056 0-.084.028-.14.056-2.206 1.61-4.356 3.305-6.506 5.028 1.843-1.64 3.686-3.306 5.613-4.945.558-.5.949-1.139 1.06-1.861l.28-1.667v-.055c.14-.334.67-.195.586.166Z",fill:"currentColor"})}),NA=()=>(0,In.jsxs)("svg",{viewBox:"0 0 450 55",xmlns:"http://www.w3.org/2000/svg",fill:"none",className:"ExcalidrawLogo-text",children:[(0,In.jsx)("path",{d:"M429.27 96.74c2.47-1.39 4.78-3.02 6.83-4.95 1.43-1.35 2.73-2.86 3.81-4.51-.66.9-1.4 1.77-2.23 2.59-2.91 2.84-5.72 5.09-8.42 6.87h.01ZM343.6 69.36c.33 3.13.58 6.27.79 9.4.09 1.37.18 2.75.25 4.12-.12-4.46-.27-8.93-.5-13.39-.11-2.08-.24-4.16-.4-6.24-.06 1.79-.11 3.85-.13 6.11h-.01ZM378.47 98.34c.01-.37.07-1.13.01-6.51-.11 1.9-.22 3.81-.31 5.71-.07 1.42-.22 2.91-.16 4.35.39.03.78.07 1.17.1-.92-.85-.76-2.01-.72-3.66l.01.01ZM344.09 86.12c-.09-2.41-.22-4.83-.39-7.24v12.21c.15-.05.32-.09.47-.14.05-1.61-.03-3.23-.09-4.83h.01ZM440.69 66.79c-.22-.34-.45-.67-.69-.99-3.71-4.87-9.91-7.14-15.65-8.55-1.05-.26-2.12-.49-3.18-.71 2.29.59 4.48 1.26 6.64 2.02 7.19 2.54 10.57 5.41 12.88 8.23ZM305.09 72.46l1.2 3.6c.84 2.53 1.67 5.06 2.46 7.61.24.78.5 1.57.73 2.36.22-.04.44-.08.67-.12a776.9 776.9 0 0 1-5.01-13.57c-.02.04-.03.09-.05.13v-.01ZM345.49 90.25v.31c1.48-.42 3.05-.83 4.66-1.2-1.56.25-3.12.52-4.66.89ZM371.02 90.22c0-.57-.04-1.14-.11-1.71-.06-.02-.12-.04-.19-.05-.21-.05-.43-.08-.65-.11.42.16.74.88.95 1.87ZM398.93 54.23c-.13 0-.27-.01-.4-.02l.03.4c.11-.15.23-.27.37-.38ZM401.57 62.28v-.15c-1.22-.24-2.86-.61-3.23-1.25-.09-.15-.18-.51-.27-.98-.09.37-.2.73-.33 1.09 1.24.56 2.52.98 3.83 1.29ZM421.73 88.68c-2.97 1.65-6.28 3.12-9.69 3.68v.18c4.72-.14 11.63-3.85 16.33-8.38-2.04 1.75-4.33 3.24-6.63 4.53l-.01-.01ZM411.28 80.92c-.05-1.2-.09-2.4-.15-3.6-.21 5.66-.46 11.38-.47 14.51.24-.02.48-.04.71-.07.15-3.61.05-7.23-.09-10.83v-.01Z",transform:"translate(-144.023 -51.76)"}),(0,In.jsx)("path",{d:"M425.38 67.41c-3.5-1.45-7.19-2.57-14.06-3.62.09 1.97.06 4.88-.03 8.12.03.04.06.09.06.15.19 1.36.28 2.73.37 4.1.25 3.77.39 7.55.41 11.33 0 1.38-.01 2.76-.07 4.13 1.4-.25 2.78-.65 4.12-1.15 4.07-1.5 7.94-3.78 11.28-6.54 2.33-1.92 5.13-4.49 5.88-7.58.63-3.53-2.45-6.68-7.97-8.96l.01.02ZM411.35 92.53v-.06l-.34.03c.11.01.22.03.34.03ZM314.26 64.06c-.23-.59-.47-1.17-.7-1.75.57 1.62 1.11 3.25 1.6 4.9l.15.54 2.35 6.05c.32.82.66 1.64.98 2.46-1.38-4.1-2.83-8.17-4.39-12.2h.01ZM156.82 103.07c-.18.13-.38.23-.58.33 1.32-.03 2.66-.2 3.93-.34.86-.09 1.72-.22 2.58-.33-2.12.1-4.12.17-5.94.34h.01ZM210.14 68.88s.03.04.05.07c.18-.31.39-.64.58-.96-.21.3-.42.6-.64.89h.01ZM201.65 82.8c-.5.77-1.02 1.56-1.49 2.37 1.11-1.55 2.21-3.1 3.2-4.59-.23.23-.49.51-.75.79-.32.47-.65.95-.96 1.43ZM194.03 98.66c-.33-.4-.65-.84-1.05-1.17-.24-.2-.07-.49.17-.56-.23-.26-.42-.5-.63-.75 1.51-2.55 3.93-5.87 6.4-9.28-.17-.08-.29-.28-.2-.49.04-.09.09-.17.13-.26-1.21 1.78-2.42 3.55-3.61 5.33-.87 1.31-1.74 2.64-2.54 4-.29.5-.63 1.04-.87 1.61.81.65 1.63 1.27 2.47 1.88-.09-.11-.18-.21-.27-.32v.01ZM307.79 82.93c-1-3.17-2.05-6.32-3.1-9.48-1.62 4.08-3.69 9.17-6.16 15.19 3.32-1.04 6.77-1.87 10.27-2.5-.32-1.08-.67-2.15-1.01-3.21ZM149.5 80.7c.05-1.71.04-3.43 0-5.14-.1 2.26-.16 4.51-.22 6.77-.02.73-.03 1.46-.04 2.19.14-1.27.2-2.55.24-3.82h.02ZM228.98 98.3c.39 1.25.91 3.03.94 3.91.06-.03.12-.07.17-.1.08-1.29-.55-2.65-1.11-3.81ZM307.72 53.36c.81.5 1.53 1.04 2.07 1.49-.38-.8-.78-1.58-1.21-2.35-.17.03-.34.06-.51.11-.43.12-.86.26-1.29.41.35-.01.53.1.94.34ZM283.69 96.14c3.91-7.25 6.89-13.35 8.88-18.15l1.1-2.66c-1.27 2.64-2.56 5.27-3.83 7.9-1.53 3.15-3.06 6.31-4.58 9.47-.87 1.81-1.76 3.62-2.54 5.47.04.02.07.04.11.07.05.05.1.09.15.14.05-.73.27-1.48.71-2.24ZM289.92 103.23s-.04.01-.05.03c0-.02.04-.03.05-.04.05-.05.11-.1.16-.15l.21-.21c-.55 0-1.5-.27-2.55-.72.4.26.8.51 1.22.74.24.13.48.26.73.37.05.02.1.03.14.05a.27.27 0 0 1 .08-.07h.01ZM269.23 68.49c-.39-.19-.82-.48-1.33-.87-3.06-1.56-6.31-2.78-9.36-2.35-3.5.49-5.7 1.11-7.74 2.44 5.71-2.6 12.82-2.07 18.44.79l-.01-.01ZM177.87 53.69l1.06.03c-.96-.22-2-.25-2.89-.3-4.95-.26-9.99.33-14.86 1.19-2.44.43-4.88.95-7.28 1.59 9.09-1.76 15.69-2.77 23.97-2.51ZM219.85 55.51c-.18.12-.36.27-.56.45-.45.53-.86 1.11-1.26 1.66-1.91 2.61-3.71 5.31-5.57 7.95l-.12.18 8.05-10.11c-.18-.05-.36-.1-.55-.13h.01ZM510.71 54.1c.12-.15.29-.3.53-.45.69-.4 3.72-.63 5.87-.74-.36-.02-.73-.04-1.09-.05-1.84-.03-3.67.09-5.49.35.05.3.12.59.18.88v.01ZM510.76 86.02c1.37-3.07 2.49-6.27 3.57-9.46.55-1.64 1.12-3.3 1.6-4.97-1.59 4.01-3.67 9.14-6.2 15.3.24-.08.5-.14.74-.22.1-.22.19-.44.29-.65ZM566.95 75.76c.11-.02.23.03.31.11-.05-.13-.09-.26-.14-.39-.05.09-.11.18-.17.28ZM511.33 86.41c3.08-.89 6.24-1.62 9.46-2.14-1.51-3.98-2.98-7.96-4.39-11.87-.05.15-.09.31-.14.46-1.02 3.32-2.15 6.61-3.39 9.85-.48 1.25-.98 2.49-1.53 3.7h-.01ZM578.24 74.45c.11-.44.23-.87.35-1.31-.31.7-.64 1.39-.97 2.08.09.21.19.4.28.61.12-.46.23-.92.35-1.38h-.01ZM520.62 53.11c-.09 0-.18-.01-.28-.02.38.34.29 1.08.93 2.53l6.65 17.15c2.2 5.68 4.69 11.36 7.41 16.87l1.06 2.17c-2.95-7.05-5.92-14.08-8.87-21.13-1.58-3.79-3.16-7.59-4.7-11.4-.78-1.92-1.73-3.89-2.25-5.91-.03-.1 0-.19.04-.26h.01ZM578.78 77.87c1.45-5.77 3.07-10.43 3.58-13.36.05-.34.16-.88.31-1.55-.67 1.79-1.37 3.56-2.08 5.33-.12.43-.23.86-.35 1.29-.65 2.43-1.29 4.86-1.9 7.3.14.33.29.65.43 1l.01-.01ZM545.3 94.66c.02-.44.03-.83.05-1.12.02-1.01.05-2.02.11-3.02.03-6.66-.46-14.33-1.46-22.8-.13-.42-.27-1.24-.56-2.89 0-.02 0-.04-.01-.06.62 6.61.95 13.25 1.32 19.87.17 3.08.33 6.16.52 9.23.02.25.03.52.04.78l-.01.01ZM580.77 102.81c.13.2.27.38.37.49.27-.11.53-.22.8-.32-.43.09-.82.05-1.17-.16v-.01ZM530.48 104.07h.33c-.36-.13-.71-.32-1.04-.56.14.24.3.47.45.7.06-.08.14-.13.26-.13v-.01ZM542.63 58.82c.06.23.11.47.15.71.14-.33.36-.62.7-.86-.28.05-.57.11-.85.15ZM583.81 57.87c.15-.7.29-1.41.42-2.11-.14.45-.28.9-.42 1.34-.46 1.44-.89 2.89-1.31 4.34.44-1.19.88-2.37 1.31-3.57ZM523.62 91.48c-4.66 1.17-9.05 2.89-14.02 5.27 4.65-1.84 9.48-3.29 14.28-4.63-.09-.22-.17-.41-.26-.64ZM460.64 78.3c-.04-2.9-.11-5.81-.28-8.71-.1-1.68-.17-3.43-.5-5.09-.07.02-.14.03-.2.05.3 6.54.45 12.17.51 17.12.17-.07.34-.14.51-.2 0-1.06-.01-2.11-.03-3.17h-.01ZM470.63 63.24c-3.38-.26-6.81.32-10.1 1.1.41 2.01.47 4.14.57 6.18.18 3.55.25 7.11.27 10.67 3.31-1.38 6.5-3.12 9.3-5.35 1.96-1.56 3.86-3.41 5.02-5.66.73-1.41 1.19-3.22.26-4.65-1.09-1.7-3.46-2.14-5.32-2.29ZM460.29 63.68c1-.24 2.01-.46 3.04-.65-1.15.16-2.37.38-3.71.69v.13c.07-.02.15-.04.22-.05.11-.13.3-.18.45-.11v-.01ZM457.24 100.96c.43-.03.86-.07 1.29-.11.14-.49.27-.99.38-1.49-.44.7-1 1.23-1.67 1.6ZM482.88 104.98c-.18.23-.36.38-.55.47.14.09.27.19.4.28a70.76 70.76 0 0 0 4.37-4.63c.76-.89 1.52-1.81 2.19-2.77-.3-.27-.61-.53-.92-.79-.07 1.94-4.62 6.32-5.49 7.45v-.01Z",transform:"translate(-144.023 -51.76)"}),(0,In.jsx)("path",{d:"M474.36 63.31c-.4-.16-.84-.27-1.29-.37 1.56.42 3.08 1.22 3.76 2.74.62 1.4.32 2.95-.28 4.32.7-1.22.94-2.34.74-3.47-.24-1.33-1.19-2.54-2.93-3.21v-.01ZM477.34 89.18c-1.2-.81-2.4-1.62-3.6-2.42-.14.1-.26.19-.4.29 1.4.67 2.73 1.39 4 2.13ZM465.88 93.85c.37.25.74.5 1.1.75.46.32.92.65 1.38.97-1.57-1.2-2.01-1.61-2.49-1.72h.01ZM574.92 90.06c-2.28-5.21-4.93-11.13-5.67-12.26-.1-.15-1.57-3.01-1.63-3.08 0 0-.01.02-.02.02.4 1.37 1.09 2.69 1.65 3.99 2.14 4.95 4.36 9.86 6.67 14.73.6 1.26 1.21 2.52 1.83 3.78-.75-2.01-1.64-4.45-2.83-7.18ZM448.73 65.29c.1.2.22.38.34.57.22-.02.43-.06.65-.08v-.08c-.14-.05-.25 0-.99-.41ZM460.16 94.81c-.02.31-.06.59-.1.89-.03 1.71-.33 3.43-.79 5.07.15-.02.3-.03.45-.05.01-.04.02-.08.03-.11.09-.34.15-.69.2-1.03.17-1.07.25-2.16.33-3.24.05-.69.08-1.39.12-2.08-.27.1-.27.26-.24.57v-.02Z",transform:"translate(-144.023 -51.76)"}),(0,In.jsx)("path",{d:"m328.67 98.12-3.22-6.58c-1.29-2.63-2.53-5.29-3.72-7.97-.25-.85-.52-1.69-.79-2.53-.81-2.57-1.67-5.12-2.55-7.67-1.92-5.53-3.9-11.08-6.32-16.41-.72-1.58-1.46-3.44-2.63-4.79-.03-.17-.16-.29-.34-.36a.282.282 0 0 0-.23-.04c-.06-.01-.12 0-.18.01-.74.06-1.5.38-2.19.61-2.22.77-4.4 1.64-6.63 2.38-.03-.08-.06-.16-.09-.25-.15-.42-.82-.24-.67.19.03.09.07.19.1.28l-.18.06c-.36.11-.28.6 0 .68.18 1.18.63 2.36.98 3.49.03.09.06.17.08.26-.08.23-.17.46-.24.64-.37.98-.79 1.94-1.21 2.9-1.27 2.89-2.62 5.75-3.98 8.6-3.18 6.67-6.44 13.31-9.64 19.97-1.08 2.25-2.2 4.5-3.15 6.81-.13.32.24.5.5.37 1.34 1.33 2.84 2.5 4.4 3.57.65.44 1.31.87 2.01 1.24.4.22.86.48 1.33.5.24.01.35-.19.33-.37.11-.1.21-.21.28-.28.41-.41.81-.84 1.2-1.26.85-.92 1.69-1.87 2.5-2.84 6.31-2.34 12.6-4.31 18.71-5.84 2.14 5.3 3.43 8.43 3.97 9.58.55 1.05 1.15 1.88 1.82 2.52 1.32.56 6.96-.03 9.23-1.96.87-1.28 1.19-2.67.93-4.15-.09-.5-.22-.95-.4-1.33l-.01-.03Zm-20.09-45.61c.43.77.83 1.56 1.21 2.35-.54-.45-1.27-.99-2.07-1.49-.42-.24-.6-.35-.94-.34.43-.15.85-.29 1.29-.41.17-.05.34-.08.51-.11Zm-25.86 45.66c.78-1.85 1.67-3.66 2.54-5.47 1.51-3.16 3.05-6.31 4.58-9.47 1.28-2.63 2.56-5.26 3.83-7.9l-1.1 2.66c-1.99 4.79-4.97 10.9-8.88 18.15-.43.76-.66 1.51-.71 2.24-.05-.05-.1-.09-.15-.14a.259.259 0 0 0-.11-.07Zm6.24 4.71c-.42-.23-.82-.48-1.22-.74 1.05.45 2 .72 2.55.72l-.21.21c-.05.05-.11.1-.16.15-.01.01-.04.03-.05.04 0-.02.03-.02.05-.03a.27.27 0 0 0-.08.07c-.05-.02-.1-.03-.14-.05-.25-.1-.49-.24-.73-.37h-.01Zm15.73-29.43c1.05 3.15 2.1 6.31 3.1 9.48.34 1.06.69 2.13 1.01 3.21-3.5.63-6.95 1.46-10.27 2.5 2.48-6.03 4.54-11.11 6.16-15.19Zm4.79 12.57c-.23-.79-.49-1.58-.73-2.36-.79-2.54-1.63-5.08-2.46-7.61l-1.2-3.6c.02-.04.04-.09.05-.13 1.6 4.45 3.28 9 5.01 13.57l-.67.12v.01Zm5.83-18.27-.15-.54c-.49-1.64-1.03-3.28-1.6-4.9.23.58.47 1.17.7 1.75 1.56 4.03 3.01 8.1 4.39 12.2-.33-.82-.67-1.64-.98-2.46l-2.35-6.05h-.01ZM390.43 79.37c-.13-10.43-.22-17.5-.24-19.97-.24-1.6.21-2.88-.65-3.65-.14-.13-.32-.23-.52-.32h.03c.45 0 .45-.69 0-.7-1.75-.03-3.5-.04-5.25-.14-1.38-.08-2.76-.21-4.15-.31-.07 0-.12.01-.17.04-.21-.07-.47.03-.45.31l.03.45c-.11.14-.19.3-.22.5-.21 1.26-.32 13.67-.36 23.59-.32 5.79-.67 11.57-.97 17.36-.09 1.73-.29 3.54-.21 5.3-.39.02-.38.64.04.69v.12c.05.44.74.45.7 0v-.06c1.1.09 2.2.21 3.3.3 1.14.19 2.44.2 3.29.17 1.73-.05 2.92-.05 3.8-.37.45-.05.9-.11 1.35-.17.44-.06.25-.73-.19-.67h-.01c.24-.32.45-.72.62-1.25.66-1.84.41-6.36.34-11.33l-.13-9.9.02.01Zm-12.26 18.17c.09-1.91.2-3.81.31-5.71.06 5.38 0 6.14-.01 6.51-.05 1.65-.21 2.81.72 3.66-.39-.04-.78-.07-1.17-.1-.06-1.44.09-2.93.16-4.35l-.01-.01ZM588.97 53.85c-2.06-.25-3.17-.51-3.76-.6a.3.3 0 0 1 .04-.08c.22-.39-.39-.75-.6-.35-.56 1.02-.9 2.19-1.26 3.29-.61 1.88-1.17 3.78-1.72 5.68-.63 2.19-1.24 4.39-1.83 6.59-.81 2.03-1.67 4.05-2.61 6.03-1.7-3.64-3.11-6.04-4.03-7.57-2.26-3.74-2.85-5.48-3.57-6.08l.31-.09c.43-.12.25-.8-.19-.67-1.06.3-2.12.6-3.17.95-.93.32-1.85.69-2.76 1.07-.13.05-.19.16-.22.27-.04.02-.08.05-.11.07-.04-.06-.07-.12-.11-.18a.354.354 0 0 0-.48-.12c-.16.09-.22.32-.13.48l.33.54c0 .09.02.18.06.28.51 1.16.78 1.38.72 1.47-2.42 3.44-5.41 7.86-6.2 9.1-1.27 1.97-2.01 3.14-2.45 3.84l-.91-6.56-.43-4.1c-.19-1.85-.37-3.23-.53-4.13-.19-1.1-.3-2.15-.45-3.16-.2-1.36-.29-2.06-.47-2.42h.04c.45.02.45-.68 0-.7-3.43-.16-6.81.94-10.17 1.48-.24-.22-.73-.04-.58.32.24.59.33 1.25.43 1.87.17 1.06.29 2.13.4 3.2.32 3.09.53 6.2.74 9.3.44 6.75.77 13.51 1.17 20.26.11 1.95.13 3.96.46 5.89.05.3.37.31.55.14.74 1.71 2.87 1.27 6.13 1.27 1.34 0 2.39.04 2.99-.11.02.32.48.53.63.18 3.61-8.26 7.41-16.46 12.05-24.2.03-.05.04-.1.05-.15.3.73.64 1.45.94 2.16.97 2.26 1.97 4.52 2.98 6.76 2.26 5.03 4.54 10.07 7.09 14.96.47.9.94 1.79 1.47 2.65.2.32.4.67.66.96-.18.25 0 .68.34.54.91-.38 1.82-.75 2.76-1.07 1.04-.35 2.11-.65 3.17-.95.39-.11.28-.66-.07-.68.62-.4.95-.96.87-1.91-.3-3.34.72-7.47.86-8.52l2.14-11.43c1.75-10.74 3.13-17.51 3.23-20.86.02-.49.08-2.84.13-3.24.17-1.25.48-1-4.96-1.65l.03-.02Zm-46.19 5.67c-.04-.24-.09-.48-.15-.71l.85-.15c-.34.24-.56.53-.7.86Zm1.95 25.12c-.36-6.63-.7-13.26-1.32-19.87 0 .02 0 .04.01.06.29 1.65.44 2.47.56 2.89 1 8.46 1.5 16.14 1.46 22.8-.06.99-.1 2-.11 3.02-.01.29-.03.68-.05 1.12-.01-.26-.03-.53-.04-.78-.19-3.08-.35-6.16-.52-9.23l.01-.01Zm36.4 18.66c-.11-.11-.24-.29-.37-.49.35.21.74.26 1.17.16-.27.11-.53.22-.8.32v.01Zm-.89-33.72c.12-.43.23-.86.35-1.29.71-1.77 1.41-3.55 2.08-5.33-.15.68-.26 1.22-.31 1.55-.5 2.94-2.13 7.59-3.58 13.36-.15-.35-.29-.66-.43-1 .61-2.44 1.25-4.87 1.9-7.3l-.01.01Zm3.56-12.48c.14-.44.28-.89.42-1.34-.13.7-.27 1.41-.42 2.11-.43 1.19-.86 2.38-1.31 3.57.42-1.45.85-2.9 1.31-4.34Zm-5.22 16.05c-.11.44-.23.87-.35 1.31-.12.46-.23.92-.35 1.38-.1-.22-.19-.4-.28-.61.34-.69.66-1.38.97-2.08h.01Zm-11.64 2.62c.06-.1.12-.19.17-.28.05.13.09.26.14.39a.398.398 0 0 0-.31-.11Zm2.3 2.98c-.56-1.3-1.25-2.63-1.65-3.99 0 0 .01-.02.02-.02.06.08 1.52 2.93 1.63 3.08.73 1.13 3.38 7.04 5.67 12.26 1.2 2.73 2.08 5.17 2.83 7.18-.62-1.25-1.23-2.51-1.83-3.78-2.31-4.87-4.53-9.78-6.67-14.73ZM275.92 87.03c-1.06-2.18-1.13-3.45-2.44-2.93-1.52.57-2.94 1.3-4.5 2.1-1.4.72-2.68 1.44-3.92 2.12.01-.25-.24-.5-.51-.34-4.8 2.93-12.41 4.7-17.28 1.31-1.98-1.77-3.32-4.15-3.97-5.78-.29-.95-.49-1.94-.63-2.93-.14-3.34 1.58-6.53 3.9-9.12.8-.79 1.68-1.51 2.66-2.12 3.7-2.3 8.22-3.07 12.51-2.51 2.71.35 5.32 1.24 7.71 2.55.39.22.75-.39.35-.6-.18-.1-.37-.18-.55-.27.56.27 1.03.33 1.51.19l-.48.39c-.15.11-.23.3-.13.48.09.15.33.24.48.13 1.3-.97 2.46-2.09 3.45-3.37.37-.29.64-.6.65-.97v-.02c.08-.33-.03-.7-.21-1.08-.31-.87-.98-2.01-2.19-3.26-2.43-2.52-3.79-3.45-5.68-4.26-1.14-.49-3.12-1.06-4.42-1.23-3.28-.42-10.64-1.21-18.18 4.11-7.74 5.46-11.94 12.3-12.23 20.61-.08 2.06.04 3.98.34 5.71.74 4.18 2.57 8 5.44 11.34 4.26 4.99 9.76 7.52 16.34 7.52 4.85 0 9.69-1.77 14.89-4.62.23-.12.45-.23.68-.35 2.19-1.1 4.37-2.23 6.46-3.5.49-.3 1.03-.61 1.5-.98 1.47-.87 1.11-1.12.49-2.95-.39-1.14-.76-2.7-2.06-5.36l.02-.01Zm-17.38-21.76c3.05-.42 6.31.79 9.36 2.35.51.39.94.68 1.33.87-5.61-2.86-12.72-3.39-18.44-.79 2.05-1.33 4.24-1.95 7.74-2.44l.01.01ZM443.67 72.67c-.4-2.2-1.15-4.33-2.37-6.22-1.49-2.32-3.58-4.19-5.91-5.64-6.17-3.81-13.75-5.11-20.83-6.01-3.23-.41-6.47-.69-9.72-.92l-1.39-.12c-.85-.07-1.52-.1-2.05-.1-1.08-.06-2.17-.12-3.25-.17-.08 0-.14.02-.19.05-.1.05-.18.14-.16.3.27 2.55-.01 5.12-.92 7.52-.15.38.4.56.62.28 1.32.59 2.68 1.05 4.08 1.37 0 2.78-.14 7.58-.33 12.91 0 0 0 .02-.01.03-.61 3.66-.79 7.42-1 11.12-.23 4.01-.43 8.03-.44 12.05 0 .64 0 1.28.03 1.93.02.31 0 .68.15.96.06.11.14.16.24.17-.2.17-.21.54.11.59 3.83.67 7.78.71 11.68.25 2.3-.19 4.87-.65 7.65-1.56 1.85-.54 3.67-1.18 5.43-1.91 7.2-3.02 14.31-8.07 17.35-15.53.76-1.86 1.17-3.8 1.31-5.75.3-1.93.28-3.82-.09-5.58l.01-.02Zm-19.32-15.42c5.74 1.41 11.94 3.68 15.65 8.55.25.32.47.65.69.99-2.3-2.82-5.68-5.69-12.88-8.23-2.16-.76-4.35-1.43-6.64-2.02 1.06.21 2.13.45 3.18.71Zm-25.82-3.04c.13 0 .27.01.4.02-.14.1-.26.23-.37.38 0-.13-.02-.26-.03-.4Zm34.82 22.17c-.75 3.09-3.55 5.66-5.88 7.58-3.35 2.76-7.21 5.03-11.28 6.54-1.33.49-2.71.9-4.12 1.15.06-1.38.08-2.76.07-4.13-.02-3.78-.16-7.56-.41-11.33-.09-1.37-.18-2.74-.37-4.1 0-.06-.03-.11-.06-.15.09-3.25.12-6.16.03-8.12 6.86 1.05 10.56 2.17 14.06 3.62 5.52 2.28 8.59 5.44 7.97 8.96l-.01-.02Zm-22 16.15c-.12 0-.23-.02-.34-.03l.34-.03v.06Zm-.69-.7c0-3.13.26-8.84.47-14.51.06 1.2.11 2.41.15 3.6.15 3.6.25 7.23.09 10.83-.24.03-.48.05-.71.07v.01Zm-12.33-30.94c.37.63 2.01 1.01 3.23 1.25v.15c-1.31-.31-2.59-.73-3.83-1.29.12-.36.23-.72.33-1.09.08.48.18.84.27.98Zm13.7 31.65v-.18c3.41-.56 6.71-2.02 9.69-3.68 2.31-1.28 4.59-2.78 6.63-4.53-4.69 4.53-11.61 8.24-16.33 8.38l.01.01Zm24.07-.75c-2.05 1.93-4.37 3.56-6.83 4.95 2.7-1.78 5.52-4.03 8.42-6.87.82-.82 1.56-1.69 2.23-2.59-1.08 1.65-2.38 3.16-3.81 4.51h-.01ZM187.16 92.14c-.79-2.47-2.1-7.12-3.1-6.87-.19-.01-2.09.77-4.08 1.54-3.06 1.18-5.91 2.13-10.09 2.82-2.74.42-5.87 1.01-10.61 1.06.04-3.34.05-6.01.05-7.99 7.97-.65 12.33-2.11 16.37-3.55 1.11-.39 2.69-1.01 2.63-1.8-.08-.35-.55-1.39-1.17-2.61-.47-1.16-.98-2.31-1.61-3.38-.42-.71-1.04-1.69-1.86-2.06-.11-.08-.22-.13-.29-.12-.02 0-.04 0-.07.01-.19-.04-.39-.05-.6-.01-.17.03-.24.15-.25.28-.04.02-.09.04-.14.05-4.33 1.48-8.85 2.33-13.24 3.61a499.1 499.1 0 0 0-.31-8.19c4.51-.99 8.88-1.38 13.11-1.82 3.68-.38 6.28.12 7.47.34.59.11.9.16 1.16.18h.1c-.1.37.44.66.62.28.02-.04.03-.08.05-.13.15.2.53.22.62-.1.17-.58.19-1.21.21-1.81v-.36c.03-.15.05-.3.07-.45.52-2.47.33-5.09-.64-7.44-.11-.27-.44-.28-.6-.14-.08-.21-.15-.42-.24-.62-.19-.41-.79-.05-.6.35.03.07.05.15.09.22-.98-.42-2.15-.54-3.17-.63-2.17-.19-4.37-.14-6.54 0-5.7.35-11.4 1.3-16.91 2.79-2.08.56-4.13 1.22-6.14 2-4.54 1.05-3.79 1.51-2.17 6.07.18.51.46 1.68.54 1.94.82 2.47 1.08 2.13 3.1 2.13s0 .05 0 .08h.52c-.48 2.66-.51 5.45-.62 8.13-.15 3.48-.22 6.96-.28 10.45 0 .41-.01.82-.02 1.23-.16.29-.33.57-.51.85-.05.38-.09.77-.14 1.18-.42 3.52-.59 6.48-.52 8.8v.34c.02.47.05.76.06.87.16 1.57-.26 3.47 1.35 3.79 1.61.32 3.5.55 4.85.55.11 0 .22-.02.33-.02 1.79.24 3.67.05 5.45-.12 2.85-.28 5.69-.7 8.51-1.19 3.03-.53 6.05-1.14 9.04-1.86 2.4-.58 4.82-1.19 7.13-2.06.51-.19 1.73-.57 2.46-1.14 1.81-.68 2.18-1 1.57-2.67-.23-.62-.48-1.49-.91-2.78l-.03-.02Zm-11.12-38.71c.89.05 1.93.08 2.89.3-.33 0-.68-.02-1.06-.03-8.28-.26-14.88.75-23.97 2.51 2.41-.64 4.85-1.16 7.28-1.59 4.87-.86 9.91-1.45 14.86-1.19Zm-26.53 22.13c.03 1.71.04 3.43 0 5.14-.04 1.27-.11 2.55-.24 3.82 0-.73.02-1.46.04-2.19.05-2.26.12-4.51.22-6.77h-.02Zm6.73 27.85c.2-.1.4-.21.58-.33 1.82-.17 3.82-.24 5.94-.34-.86.11-1.72.24-2.58.33-1.27.14-2.61.31-3.93.34h-.01ZM534.48 85.44c-3.52-8.38-7.07-16.75-10.5-25.17-.63-1.54-1.25-3.09-1.86-4.65-.31-.8-.65-1.6-.87-2.43-.04-.17-.17-.24-.31-.25.1-.2 0-.51-.29-.53-1.59-.08-3.18-.22-4.78-.25-1.96-.03-3.91.13-5.84.42-.31.05-.31.38-.13.56-.03.06-.05.14-.04.22.23 1.54.63 3.06 1.16 4.53.13.35.27.7.41 1.06l-2.68 6.18c-.11.03-.2.09-.25.22-.67 1.9-1.52 3.73-2.34 5.56a536.85 536.85 0 0 1-3.9 8.45c-2.64 5.64-5.34 11.25-7.91 16.93-.44.97-.88 1.94-1.29 2.93-.2.48-.47 1-.55 1.52v.05c-.02.12.02.26.16.34 1.19.73 2.41 1.41 3.66 2.05 1.2.62 2.45 1.25 3.76 1.61.43.12.62-.55.19-.67-1.13-.31-2.2-.83-3.24-1.36 1.09.36 2.1.69 2.75.93 2.82 1.01 2.38 1.1 4.3-3.75 2.1-1.09 4.34-1.96 6.53-2.79 4.35-1.64 8.8-3.03 13.27-4.29.82 2.01 1.77 3.97 2.72 5.92.35.83.62 1.45.79 1.82.22.42.45.8.69 1.15.17.33.33.67.5 1 .42.8.84 1.63 1.4 2.35.23.29.6 0 .55-.31 1.53-.02 3.06-.07 4.58-.27.92-.12 1.82-.32 2.71-.54 1.39-.27 3.85-1.11 3.74-1.42-.67-1.96-1.55-3.87-2.34-5.78-1.57-3.78-3.16-7.56-4.75-11.33v-.01Zm-11.65-26.16c1.54 3.81 3.12 7.6 4.7 11.4 2.94 7.05 5.91 14.09 8.87 21.13l-1.06-2.17c-2.71-5.51-5.2-11.19-7.41-16.87l-6.65-17.15c-.65-1.45-.55-2.19-.93-2.53.09 0 .18.01.28.02a.29.29 0 0 0-.04.26c.52 2.02 1.47 3.98 2.25 5.91h-.01Zm-6.58 13.58c.05-.15.09-.31.14-.46 1.41 3.92 2.88 7.9 4.39 11.87-3.22.52-6.38 1.25-9.46 2.14.55-1.22 1.05-2.46 1.53-3.7 1.24-3.24 2.37-6.53 3.39-9.85h.01Zm-.23-20c.36 0 .73.03 1.09.05-2.15.1-5.18.33-5.87.74-.24.15-.41.3-.53.45-.06-.29-.13-.58-.18-.88 1.82-.26 3.65-.39 5.49-.35v-.01Zm-.09 18.72c-.49 1.67-1.05 3.33-1.6 4.97-1.07 3.19-2.19 6.38-3.57 9.46-.09.21-.19.43-.29.65-.25.07-.5.14-.74.22 2.53-6.16 4.61-11.29 6.2-15.3Zm-6.34 25.16c4.97-2.38 9.37-4.1 14.02-5.27l.26.64c-4.8 1.35-9.63 2.8-14.28 4.63Zm20.17 6.76c.33.23.68.42 1.04.56h-.33c-.12 0-.21.06-.26.13-.15-.23-.31-.45-.45-.7v.01ZM226.57 91.75c-3.55-4.74-6.68-9.11-9.31-12.99 9.2-15.25 10.05-17.81 10.35-18.38.17-.34 1.09-2.27.64-2.53-1.13-.65-1.03-.65-2.97-1.71-1.19-.65-3.04-1.61-4.53-2.12-1.71-.59-1.24-.36-3 2.77-.06.1-.11.2-.17.3-.75 1.02-1.48 2.05-2.2 3.09-1.88 2.71-3.73 5.45-5.69 8.1-3.68-4.91-6.88-8.76-9.51-11.43-.15-.15-.3-.29-.46-.42-1.27-1.28-7.24 3.53-7.93 5.58-.09.09-.19.16-.28.25-.27.26.03.64.33.58.19.65.5 1.29.94 1.91 3.85 5.06 7.19 9.76 9.94 14-1.23 2.61-3.06 5-4.67 7.38l-2.28 3.33c-.5.66-.93 1.23-1.29 1.69-.67.93-2.09 2.61-2.3 3.87-.51.85-1.16 1.84-1.29 2.83-.06.44.61.63.67.19.01-.08.04-.15.06-.22 1.36 1.08 2.76 2.11 4.19 3.11 1.3.91 2.62 1.85 4.04 2.56.21.1.4 0 .48-.17.24.07.48.14.72.2.44.1.62-.57.19-.67-2.02-.48-3.77-1.57-5.23-3.02-.47-.46-.9-.96-1.32-1.46 1.74 1.35 4.2 2.89 5.89 4.14 1.39 1.03 2.85-2.27 4.22-4.2 1.86-2.64 3.96-5.86 5.52-8.29l10.39 14.51c.67.81 1.14 1.21 1.57 1.36-.05.24.12.51.41.4 1.53-.58 3.05-1.19 4.54-1.87 1.52-.69 3.06-1.45 4.36-2.5a.28.28 0 0 0 .12-.23c1.66-1.1.81-1.74-1.41-4.91-1.13-1.58-1.71-2.36-3.7-5.01l-.03-.02Zm2.41 6.54c.56 1.15 1.19 2.52 1.11 3.81-.06.04-.12.07-.17.1-.03-.88-.55-2.66-.94-3.91Zm-16.51-32.73c1.86-2.65 3.65-5.35 5.57-7.95.4-.55.81-1.13 1.26-1.66.19-.18.38-.33.56-.45.18.03.36.08.55.13l-8.05 10.11.12-.18h-.01ZM192.7 95.48c.79-1.37 1.66-2.69 2.54-4 1.19-1.79 2.4-3.56 3.61-5.33-.04.09-.09.17-.13.26-.1.22.03.41.2.49-2.47 3.42-4.89 6.73-6.4 9.28.21.24.4.48.63.75-.24.07-.4.36-.17.56.4.33.72.77 1.05 1.17.09.11.18.21.27.32-.84-.61-1.66-1.24-2.47-1.88.24-.57.58-1.11.87-1.61v-.01Zm7.46-10.32c.47-.81.98-1.59 1.49-2.37.31-.48.64-.95.96-1.43.26-.29.52-.56.75-.79-.99 1.48-2.09 3.03-3.2 4.59Zm10.03-16.22s-.03-.05-.05-.07c.22-.29.43-.59.64-.89-.2.32-.4.65-.58.96h-.01ZM371.54 87.96c-.01-.08-.01-.16-.03-.23-.06-.38-.58-.29-.66.03-.3-.05-.6-.08-.81-.11-1.14-.15-2.29-.19-3.44-.2 1.04-.09 2.09-.18 3.14-.23.45-.02.45-.72 0-.7-6.57.35-13.14 1.23-19.65 2.11-1.53.21-3.05.42-4.57.68-.01 0-.02.01-.04.01-.04-3.33-.13-6.66-.24-9.99-.19-5.7-.4-11.41-.88-17.1-.13-1.51-.23-3.07-.49-4.58 0-.25 0-.48-.02-.68-.06-1.19-.04-2.61-.68-2.78-.16-.07-.72-.16-1.5-.24.22-.17.16-.62-.2-.63-1.19-.04-2.39.09-3.57.23-1.2.14-2.41.32-3.59.6-.16-.1-.41-.06-.5.12-.06.02-.13.03-.19.05-.35.1-.29.55-.03.66-.26.6-.19 2.27-.21 3-.02.66-.66 33.73-.9 40.3-.03.65.06 1.12.04 1.45-.16 3.05.87 4.96 6.34 3.93 1.09-.08 2.75-.77 5.36-1.43 4.13-1.04 5.78-1.52 6.2-1.65 6.43-1.69 6.78-1.97 11.72-2.43.55-.05 4.8-.38 6.03-.3.64.04 1.19.07 1.65.1.09 0 .16-.03.24-.05.1.27.56.33.66-.02.39-1.32.61-2.71.78-4.08.2-1.61.29-3.24.15-4.86.24.03.52-.23.38-.53-.09-.2-.27-.33-.49-.43v-.02Zm-.63.56c.07.57.11 1.14.11 1.71-.21-.99-.53-1.71-.95-1.87.22.03.44.06.65.11.06.01.12.04.19.05Zm-25.41 1.73c1.54-.36 3.1-.64 4.66-.89-1.61.37-3.18.77-4.66 1.2v-.31Zm-.86-7.37c-.07-1.37-.16-2.75-.25-4.12-.21-3.13-.45-6.27-.79-9.4.02-2.25.08-4.31.13-6.11.16 2.08.29 4.16.4 6.24.23 4.46.38 8.93.5 13.39h.01Zm-.94-4c.16 2.41.29 4.83.39 7.24.06 1.6.14 3.22.09 4.83-.15.05-.32.09-.47.14V78.88h-.01ZM483.72 92.83c-3.05-2.28-6.22-4.4-9.38-6.51 8.86-6.49 13.49-12.95 13.73-19.23.04-.76 0-1.5-.13-2.2-.67-3.82-3.5-6.68-8.39-8.48.13.04.27.08.4.13 3.92 1.39 7.74 4.23 8.5 8.56.34 1.95-.05 3.96-.98 5.69-.21.4.39.75.6.35 1.86-3.46 1.46-7.55-.97-10.63-3.53-4.47-9.76-5.88-15.16-6.16-2.32-.12-4.64-.04-6.95.19-6 .32-12.71 1.68-17.63 3.21-.37.11-.67.23-.92.35-.2-.17-.62.02-.57.37v.03c-.64.68-.18 1.64.48 3.21.38.91.67 1.89 1.15 2.58.32.76.68 1.51 1.13 2.19.14.21.38.19.53.07.19-.02.38-.05.57-.08v1.57c-.06.06-.1.13-.11.23-.27 4.18-.34 8.38-.48 12.57l-.3 9.03c-.24 3.91-.44 6.77-.46 7.26-.05.88-.11 1.95.07 2.81-.01.22-.02.43-.04.65 0 .11-.02.23-.03.35 0 .05-.03.27-.01.16-.05.4.5.59.64.28.05.04.12.08.2.08 1.75.13 3.5.28 5.25.3 1.69.02 3.38-.12 5.06-.32.08.23.36.39.55.15.06-.08.11-.17.16-.26.18-.09.24-.32.18-.48.05-.2.1-.4.13-.6.16-.86.25-1.74.33-2.62.11-1.17.17-2.34.23-3.51.15-.01.32-.03.52-.04.36-.03 1.73-.15 2.06-.15.39 0 .7-.02.95-.04 1.76 1.11 3.45 2.35 5.14 3.55 2.83 2.01 5.64 4.04 8.47 6.04 1.42 1 2.85 2 4.29 2.97.1.06.19.07.27.04.08 0 .17-.02.25-.1 1.61-1.56 3.15-3.18 4.6-4.88.75-.88 1.49-1.78 2.15-2.73.01.01.03.02.04.03.34.3.83-.2.49-.49-2.16-1.9-4.34-3.76-6.64-5.48l.03-.01Zm-6.38-3.65a55.72 55.72 0 0 0-4-2.13c.14-.1.26-.19.4-.29 1.2.81 2.4 1.61 3.6 2.42Zm-20.1 11.78c.67-.37 1.23-.91 1.67-1.6-.11.5-.24 1-.38 1.49-.43.04-.86.08-1.29.11Zm2.38-37.24c1.34-.31 2.56-.52 3.71-.69-1.03.19-2.04.41-3.04.65-.14-.07-.34-.02-.45.11-.07.02-.15.04-.22.05v-.13.01Zm.04.84c.07-.02.14-.03.2-.05.34 1.66.41 3.41.5 5.09.17 2.9.24 5.81.28 8.71l.03 3.17c-.17.07-.34.14-.51.2-.06-4.96-.21-10.58-.51-17.12h.01Zm16.04 5.62c-1.16 2.25-3.06 4.1-5.02 5.66-2.8 2.23-5.99 3.97-9.3 5.35-.01-3.56-.09-7.12-.27-10.67-.1-2.04-.16-4.16-.57-6.18 3.3-.78 6.72-1.36 10.1-1.1 1.85.14 4.23.59 5.32 2.29.92 1.43.46 3.24-.26 4.65Zm.85-.18c.6-1.37.9-2.92.28-4.32-.67-1.52-2.2-2.32-3.76-2.74.46.1.89.21 1.29.37 1.74.67 2.69 1.88 2.93 3.21.2 1.13-.05 2.25-.74 3.47V70Zm-27.47-4.14c-.12-.19-.23-.38-.34-.57.74.42.85.36.99.41v.08c-.22.03-.43.06-.65.08Zm11.21 30.46c-.08 1.08-.16 2.17-.33 3.24-.05.35-.11.69-.2 1.03 0 .04-.02.07-.03.11-.15.02-.3.04-.45.05.45-1.64.76-3.36.79-5.07.03-.29.08-.57.1-.89-.03-.31-.03-.47.24-.57-.04.69-.07 1.39-.12 2.08v.02Zm5.6-2.47c.48.11.92.52 2.49 1.72-.46-.32-.92-.65-1.38-.97-.37-.25-.73-.5-1.1-.75h-.01Zm21.23 7.24a70.76 70.76 0 0 1-4.37 4.63c-.14-.09-.27-.19-.4-.28.19-.09.37-.24.55-.47.87-1.14 5.43-5.51 5.49-7.45.31.26.62.53.92.79-.67.97-1.42 1.88-2.19 2.77v.01Z",fill:"currentColor",transform:"translate(-144.023 -51.76)"})]}),PA=({style:e,size:t="small",withText:n})=>(0,In.jsxs)("div",{className:`ExcalidrawLogo is-${t}`,style:e,children:[(0,In.jsx)(AA,{}),n&&(0,In.jsx)(NA,{})]}),Mg=({icon:e,shortcut:t,children:n})=>{let i=lt();return(0,xe.jsxs)(xe.Fragment,{children:[(0,xe.jsx)("div",{className:"welcome-screen-menu-item__icon",children:e}),(0,xe.jsx)("div",{className:"welcome-screen-menu-item__text",children:n}),t&&!i.editor.isMobile&&(0,xe.jsx)("div",{className:"welcome-screen-menu-item__shortcut",children:t})]})};Mg.displayName="WelcomeScreenMenuItemContent";var _l=({onSelect:e,children:t,icon:n,shortcut:i,className:r="",...a})=>(0,xe.jsx)("button",{...a,type:"button",className:`welcome-screen-menu-item ${r}`,onClick:e,children:(0,xe.jsx)(Mg,{icon:n,shortcut:i,children:t})});_l.displayName="WelcomeScreenMenuItem";var JI=({children:e,href:t,icon:n,shortcut:i,className:r="",...a})=>(0,xe.jsx)("a",{...a,className:`welcome-screen-menu-item ${r}`,href:t,target:"_blank",rel:"noreferrer",children:(0,xe.jsx)(Mg,{icon:n,shortcut:i,children:e})});JI.displayName="WelcomeScreenMenuItemLink";var Jn=({children:e})=>{let{WelcomeScreenCenterTunnel:t}=Vt();return(0,xe.jsx)(t.In,{children:(0,xe.jsx)("div",{className:"welcome-screen-center",children:e||(0,xe.jsxs)(xe.Fragment,{children:[(0,xe.jsx)(Dg,{}),(0,xe.jsx)(Lg,{children:y("welcomeScreen.defaults.center_heading")}),(0,xe.jsxs)(Rg,{children:[(0,xe.jsx)(Ng,{}),(0,xe.jsx)(Ag,{})]})]})})})};Jn.displayName="Center";var Dg=({children:e})=>(0,xe.jsx)("div",{className:"welcome-screen-center__logo excalifont welcome-screen-decor",children:e||(0,xe.jsx)(PA,{withText:!0})});Dg.displayName="Logo";var Lg=({children:e})=>(0,xe.jsx)("div",{className:"welcome-screen-center__heading welcome-screen-decor excalifont",children:e});Lg.displayName="Heading";var Rg=({children:e})=>(0,xe.jsx)("div",{className:"welcome-screen-menu",children:e});Rg.displayName="Menu";var Ag=()=>{let e=Jt();return(0,xe.jsx)(_l,{onSelect:()=>e.executeAction(og),shortcut:"?",icon:dc,children:y("helpDialog.title")})};Ag.displayName="MenuItemHelp";var Ng=()=>{let e=yt(),t=Jt();return e.viewModeEnabled?null:(0,xe.jsx)(_l,{onSelect:()=>t.executeAction(kf),shortcut:At("loadScene"),icon:mc,children:y("buttons.load")})};Ng.displayName="MenuItemLoadScene";var eT=({onSelect:e})=>{let{t}=Nt();return(0,xe.jsx)(_l,{shortcut:null,onSelect:e,icon:Dm,children:t("labels.liveCollaboration")})};eT.displayName="MenuItemLiveCollaborationTrigger";Jn.Logo=Dg;Jn.Heading=Lg;Jn.Menu=Rg;Jn.MenuItem=_l;Jn.MenuItemLink=JI;Jn.MenuItemHelp=Ag;Jn.MenuItemLoadScene=Ng;Jn.MenuItemLiveCollaborationTrigger=eT;var Pg=({children:e})=>{let{WelcomeScreenMenuHintTunnel:t}=Vt();return(0,qn.jsx)(t.In,{children:(0,qn.jsxs)("div",{className:"excalifont welcome-screen-decor welcome-screen-decor-hint welcome-screen-decor-hint--menu",children:[q1,(0,qn.jsx)("div",{className:"welcome-screen-decor-hint__label",children:e||y("welcomeScreen.defaults.menuHint")})]})})};Pg.displayName="MenuHint";var _g=({children:e})=>{let{WelcomeScreenToolbarHintTunnel:t}=Vt();return(0,qn.jsx)(t.In,{children:(0,qn.jsxs)("div",{className:"excalifont welcome-screen-decor welcome-screen-decor-hint welcome-screen-decor-hint--toolbar",children:[(0,qn.jsx)("div",{className:"welcome-screen-decor-hint__label",children:e||y("welcomeScreen.defaults.toolbarHint")}),J1]})})};_g.displayName="ToolbarHint";var Og=({children:e})=>{let{WelcomeScreenHelpHintTunnel:t}=Vt();return(0,qn.jsx)(t.In,{children:(0,qn.jsxs)("div",{className:"excalifont welcome-screen-decor welcome-screen-decor-hint welcome-screen-decor-hint--help",children:[(0,qn.jsx)("div",{children:e||y("welcomeScreen.defaults.helpHint")}),Q1]})})};Og.displayName="HelpHint";var Fg=e=>(0,Hn.jsx)(Hn.Fragment,{children:e.children||(0,Hn.jsxs)(Hn.Fragment,{children:[(0,Hn.jsx)(Jn,{}),(0,Hn.jsx)(Pg,{}),(0,Hn.jsx)(_g,{}),(0,Hn.jsx)(Og,{})]})});Fg.displayName="WelcomeScreen";Fg.Center=Jn;Fg.Hints={MenuHint:Pg,ToolbarHint:_g,HelpHint:Og};var _A=({isCollaborating:e,onSelect:t,...n})=>{let i=yt(),r=i.width<830;return(0,Au.jsxs)(Ta,{...n,className:$("collab-button",{active:e}),type:"button",onSelect:t,style:{position:"relative",width:r?void 0:"auto"},title:y("labels.liveCollaboration"),children:[r?pv:y("labels.share"),i.collaborators.size>0&&(0,Au.jsx)("div",{className:"CollabButton-collaborators",children:i.collaborators.size})]})};_A.displayName="LiveCollaborationTrigger";var X_=(0,tT.default)((e,t,n)=>{if(dt.DEV||dt.MODE===Ws.TEST||window?.DEBUG_FRACTIONAL_INDICES){let i=Ga(e.map(r=>({...r})));_b(i,{shouldThrow:dt.DEV||dt.MODE===Ws.TEST,includeBoundTextValidation:!0,reconciliationContext:{localElements:t,remoteElements:n}})}},1e3*60,{leading:!0,trailing:!1});var OA=({children:e,icon:t})=>{let{TTDDialogTriggerTunnel:n}=Vt(),i=nt();return(0,Dl.jsx)(n.In,{children:(0,Dl.jsxs)(Ce.Item,{onSelect:()=>{we("ai","dialog open","ttd"),i({openDialog:{name:"ttd",tab:"text-to-diagram"}})},icon:t??l0,children:[e??y("labels.textToDiagram"),(0,Dl.jsx)(Ce.Item.Badge,{children:"AI"})]})})};OA.displayName="TTDDialogTrigger";LA();var $A=e=>{let{onChange:t,initialData:n,excalidrawAPI:i,isCollaborating:r=!1,onPointerUpdate:a,renderTopRightUI:o,langCode:c=Ns.code,viewModeEnabled:d,zenModeEnabled:h,gridModeEnabled:s,libraryReturnUrl:l,theme:m,name:u,renderCustomStats:p,onPaste:f,detectScroll:g=!0,handleKeyboardGlobally:v=!1,onLibraryChange:E,autoFocus:b=!1,generateIdForFile:w,onLinkOpen:x,generateLinkForSelection:S,onPointerDown:C,onPointerUp:T,onScrollChange:L,onDuplicate:M,children:R,validateEmbeddable:z,renderEmbeddable:_,aiEnabled:H,showDeprecatedFonts:P}=e,B=e.UIOptions?.canvasActions,q={...e.UIOptions,canvasActions:{...Vu.canvasActions,...B},tools:{image:e.UIOptions?.tools?.image??!0}};return B?.export&&(q.canvasActions.export.saveFileToDisk=B.export?.saveFileToDisk??Vu.canvasActions.export.saveFileToDisk),q.canvasActions.toggleTheme===null&&typeof m>"u"&&(q.canvasActions.toggleTheme=!0),(0,Zd.useEffect)(()=>{(async()=>await import("./chunk-OGDJ3FCI.js"))();let V=Y=>{typeof Y.scale=="number"&&Y.scale!==1&&Y.preventDefault()};return document.addEventListener("touchmove",V,{passive:!1}),()=>{document.removeEventListener("touchmove",V)}},[]),(0,jd.jsx)(I4,{store:Wn,children:(0,jd.jsx)(D4,{langCode:c,theme:m,children:(0,jd.jsx)(MA,{onChange:t,initialData:n,excalidrawAPI:i,isCollaborating:r,onPointerUpdate:a,renderTopRightUI:o,langCode:c,viewModeEnabled:d,zenModeEnabled:h,gridModeEnabled:s,libraryReturnUrl:l,theme:m,name:u,renderCustomStats:p,UIOptions:q,onPaste:f,detectScroll:g,handleKeyboardGlobally:v,onLibraryChange:E,autoFocus:b,generateIdForFile:w,onLinkOpen:x,generateLinkForSelection:S,onPointerDown:C,onPointerUp:T,onScrollChange:L,onDuplicate:M,validateEmbeddable:z,renderEmbeddable:_,aiEnabled:H!==!1,showDeprecatedFonts:P,children:R})})})},BA=(e,t)=>{if(e.children!==t.children)return!1;let{initialData:n,UIOptions:i={},...r}=e,{initialData:a,UIOptions:o={},...c}=t,d=Object.keys(i),h=Object.keys(o);return d.length!==h.length?!1:d.every(s=>s==="canvasActions"?Object.keys(i.canvasActions).every(l=>l==="export"&&i?.canvasActions?.export&&o?.canvasActions?.export?i.canvasActions.export.saveFileToDisk===o.canvasActions.export.saveFileToDisk:i?.canvasActions?.[l]===o?.canvasActions?.[l]):i[s]===o[s])&&hn(r,c)},zA=Zd.default.memo($A,BA);zA.displayName="Excalidraw";export{Gf as a,zA as b};
149
+ /*! Bundled license information:
150
+
151
+ use-sync-external-store/cjs/use-sync-external-store-shim.production.js:
152
+ (**
153
+ * @license React
154
+ * use-sync-external-store-shim.production.js
155
+ *
156
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
157
+ *
158
+ * This source code is licensed under the MIT license found in the
159
+ * LICENSE file in the root directory of this source tree.
160
+ *)
161
+
162
+ use-sync-external-store/cjs/use-sync-external-store-shim/with-selector.production.js:
163
+ (**
164
+ * @license React
165
+ * use-sync-external-store-shim/with-selector.production.js
166
+ *
167
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
168
+ *
169
+ * This source code is licensed under the MIT license found in the
170
+ * LICENSE file in the root directory of this source tree.
171
+ *)
172
+ */