PageSourceSearch

https://www.teachany.com/_nuxt/mirror-drawing-maker-Dy3uzOaJ-29.js

js teachany.com collected 2026-09-24 09:54:27 UTC 57,731 bytes, 16 lines download raw bytes

1const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["./Benefits-DI7Kv73u-29.css","./FAQ-D_Hok_vl-29.css","./Feature-C4215isZ-29.css"])))=>i.map(i=>d[i]);
2import{f as yr,e as dt,s as ct,b as ut,d as mt,i as gt}from"#entry";import{a as pt,_ as wt,c as ht}from"./useWorkspaceInsert-DY_2ip2F-29.js";import{a8 as ft,e as O,r as h,o as yt,n as Ae,H as k,$ as n,a0 as m,B as s,a2 as E,O as P,a1 as br,F as me,ab as ge,a9 as $,aa as pe,q as F,ac as We,ad as Re,a3 as z,V as $e,ah as kr,c as b,i as vr,U as f,Q as bt}from"./lazy-qrcode-oXPcgXJC-29.js";import"./lazy-pdf-GO-7vVHk-29.js";import{_ as kt}from"./_plugin-vue_export-helper-DlAUqK2U-29.js";import{B as vt,G as Dt,S as xt,U as _t,R as It,E as Tt,D as Dr,P as xr}from"./lazy-lucide-CDFBtcQ8-29.js";import"./useWorkspaceHost-DU2TCSNo-29.js";const St={meta:{title:"Mirror Drawing Maker - Free Symmetry Drawing Tool | TeachAny",description:"Create mirror drawing and symmetry drawing worksheets online. Use the free mirror drawing maker to draw with symmetry, make radial art, download PNGs, and print classroom-ready symmetry drawing activities.",keywords:"mirror drawing maker, mirror drawing, symmetry drawing, symmetry art, symmetrical drawing, draw with symmetry, drawing with mirror, mirror for drawing, draw a line of symmetry, draw line symmetry, symmetry drawing easy, mirror drawing easy, symmetry drawing worksheets",ogSiteName:"TeachAny AI Tools",ogTitle:"Mirror Drawing Maker - Free Symmetry Drawing Tool",ogDescription:"Draw with mirror symmetry, create radial symmetry art, and print symmetry drawing worksheets for class or home practice.",ogImage:"https://video.deletetweets.ai/asset_2026_04_25_teachany_mirror_drawing_live_canvas_xjPRd7Ct3yeQPNTYarxBbYTkdwxfQWtP.webp"},page:{title:"Mirror Drawing Maker",description:"Draw with symmetry online, explore mirror drawing modes, and generate printable AI symmetry drawing worksheets from your own prompt.",badges:{mirror:"Mirror drawing",symmetry:"Symmetry art",worksheet:"Printable worksheets"},tabs:{draw:"Draw With Symmetry",worksheet:"Worksheet Maker"},cards:{settings:"Drawing Settings",worksheet:"Worksheet Settings",canvas:"Mirror Drawing Canvas",preview:"Worksheet Preview"},labels:{symmetryMode:"Symmetry Mode",brushColor:"Brush Color",customColor:"Custom Color",brushSize:"Brush Size",guides:"Show guide lines",whiteBackground:"White background",prompt:"Drawing Prompt",promptPlaceholder:"butterfly with rounded wings, front view",promptIdeas:"Prompt Ideas",generatedImage:"Generated Image",activityMode:"Activity Mode",worksheetTitle:"Worksheet Title",grid:"Show drawing grid",strokeCount:"{count} strokes",ready:"Ready",defaultSubject:"Symmetry",useBrushColor:"Use {color} brush"},modes:{mirrorVertical:"Vertical mirror",mirrorHorizontal:"Horizontal mirror",mirrorBoth:"Four-way mirror",radial6:"6-way radial",radial8:"8-way radial",snowflake6:"Snowflake"},colors:{ink:"Ink",teal:"Teal",rose:"Rose",amber:"Amber",violet:"Violet",cyan:"Cyan",green:"Green",slate:"Slate"},templates:{butterfly:"Butterfly",heart:"Heart",flower:"Flower",leaf:"Leaf",rocket:"Rocket",house:"House",tree:"Tree",snowflake:"Snowflake"},promptIdeas:{butterfly:"butterfly with rounded wings, front view",heart:"cute heart with simple decorative swirls",flower:"front view flower with round petals and leaves",leaf:"single leaf with a clear center vein",rocket:"rocket ship front view with simple fins",house:"simple front view house with roof and windows",tree:"simple tree with round leafy crown, front view",snowflake:"simple six point snowflake"},activityModes:{blank:"Blank other side",trace:"Light trace guide"},buttons:{undo:"Undo",redo:"Redo",clear:"Clear",download:"Download PNG",print:"Print",downloadWorksheet:"Download Worksheet",printWorksheet:"Print Worksheet",generateWorksheet:"Generate Symmetry Drawing",generatingWorksheet:"Generating..."},hints:{draw:"Start drawing on one side of the canvas. Your strokes mirror instantly across the selected symmetry lines.",worksheet:"Enter a prompt, generate an AI line drawing, then download or print the symmetry drawing worksheet.",empty:"Draw a few strokes first, then download or print your mirror drawing.",touch:"Works with mouse, touch, stylus, and trackpad."},status:{ready:"Your mirror drawing canvas is ready.",cleared:"Canvas cleared.",downloaded:"PNG downloaded.",printed:"Print window opened.",empty:"Draw something first before downloading or printing.",printFailed:"Printing could not be opened. Please allow pop-ups and try again.",worksheetReady:"Enter a prompt and generate an AI symmetry drawing.",worksheetPromptRequired:"Enter a prompt before generating a worksheet image.",worksheetLoginRequired:"Please sign in first to generate an AI symmetry drawing.",worksheetGenerating:"Creating AI image task...",worksheetQueued:"Task submitted. Waiting for image generation...",worksheetRendering:"AI is drawing your symmetry image...",worksheetPreparing:"Preparing generated image...",worksheetGenerated:"AI symmetry drawing is ready.",worksheetNeedsImage:"Generate an AI symmetry drawing before downloading or printing.",worksheetGenerateFailed:"Image generation failed. Please try again.",worksheetImageLoadFailed:"Generated image could not be loaded."},worksheet:{name:"Name:",date:"Date:",titleTemplate:"{title} symmetry drawing",instructions:{trace:"Trace the light guide, then finish the matching side.",blank:"Draw the other side to complete the line of symmetry."}},print:{drawingTitle:"Mirror Drawing",worksheetTitle:"Symmetry Drawing Worksheet"},files:{drawing:"mirror-drawing.png",worksheet:"symmetry-drawing-worksheet.png"}},hero:{title:"Free Mirror Drawing Maker",description:"Create mirror drawing, symmetry drawing, and printable AI line-of-symmetry worksheets online. Use vertical mirror, horizontal mirror, four-way mirror, radial symmetry, or snowflake symmetry."},feature:{title:"Mirror Drawing Maker Features",description:"Draw with live symmetry, experiment with radial art, or generate printable symmetry drawing worksheets from your own prompt."},howtowork:{title:"How to Make a Mirror Drawing",description:"Use the drawing canvas for live symmetry art or switch to worksheet mode for printable classroom activities.",ctaText:"Start a Mirror Drawing",stepLabel:"Step"},benefits:{title:"Why Use This Symmetry Drawing Tool?",subtitle:"A quick way to teach reflection, line symmetry, and creative math art"},testimonials:{title:"Made for Classrooms and Creative Practice",description:"Teachers, tutors, and families can create mirror drawing activities without installing design software."},faq:{title:"Mirror Drawing FAQs",subtitle:"Answers about mirror drawing, symmetry drawing, downloads, and printable worksheets",badge:"FAQ",helpTitle:"Need Help?",helpDescription:"Can't find what you're looking for? Our support team is here to help.",helpLinkText:"Contact Support"},features:[{label:"Interactive",title:"Draw With Mirror Symmetry in Real Time",description:"Choose vertical, horizontal, four-way, radial, or snowflake symmetry and watch every brush stroke reflect instantly.",linkText:"Open the Drawing Canvas",imageAlt:"Mirror drawing maker canvas with live reflection and color controls"},{label:"Printable",title:"Create Symmetry Drawing Worksheets",description:"Type any subject, generate a black-and-white AI line drawing, and turn it into a worksheet with optional grid lines.",linkText:"Make a Worksheet",imageAlt:"AI symmetry worksheet maker with prompt panel and printable butterfly worksheet preview"}
2],steps:[{title:"Choose a Symmetry Mode",description:"Start with a vertical mirror for classic mirror drawing or try radial modes for symmetry art."},{title:"Draw or Enter a Prompt",description:"Sketch freely on the canvas, or switch to worksheet maker and describe the symmetry drawing you want AI to generate."},{title:"Download or Print",description:"Save your symmetry art as a PNG or print a worksheet for class, centers, homework, or art warmups."}],benefitsData:[{title:"Teach Line Symmetry Visually",description:"Students can see the line of symmetry while they draw, making reflection and matching halves easier to understand.",points:["Great for line of symmetry lessons","Immediate visual feedback","Works for math and art practice"]},{title:"Make Easy Symmetry Drawing Activities",description:"AI-generated line drawings give students a fresh starting point, while blank mode leaves room for independent drawing.",points:["Beginner-friendly worksheets","Optional trace guide","Printable grid support"]},{title:"Create Unlimited Symmetry Art",description:"Use different brush colors, line widths, and radial modes to make mandalas, snowflakes, and mirror art.",points:["No account required","Download clean PNG files","Works on desktop and tablet"]}],testimonialsData:[{name:"Dana Miller",designation:"Elementary Art Teacher",quote:"The live mirror mode is perfect for introducing symmetry before students move to paper. They understand the line of symmetry much faster."},{name:"Jon Rivera",designation:"Math Intervention Teacher",quote:"I use the printable worksheets for quick warmups. The trace option helps students who are still building spatial confidence."},{name:"Maya Chen",designation:"Homeschool Parent",quote:"My kids like making snowflake symmetry art, then printing their favorite designs. It is simple and genuinely useful."}],faqsData:[{question:"What is mirror drawing?",answer:"Mirror drawing is a drawing activity where one side reflects across a line of symmetry. It helps learners practice visual balance, reflection, and matching shapes."},{question:"Can I make symmetry drawing worksheets?",answer:"Yes. Use Worksheet Maker, enter a prompt, generate an AI line drawing, add optional grid lines, and download or print the worksheet from your browser."},{question:"Does this tool support radial symmetry art?",answer:"Yes. The drawing canvas includes 6-way radial, 8-way radial, and snowflake symmetry modes for mandala-style and snowflake-style drawings."},{question:"Can students draw with a tablet or stylus?",answer:"Yes. The canvas works with mouse, touch, stylus, and trackpad input in modern browsers."},{question:"Do I need to install anything?",answer:"No. The mirror drawing maker runs directly in the browser and can export PNG files or printable worksheet pages."}]},we={mirrorDrawing:St},Mt={meta:{title:"免费对称绘画工具 - 在线镜像画板 {'|'} TeachAny",description:"创建镜像绘画和对称绘画作业单。使用免费的对称绘画工具绘制对称图形,制作辐射艺术,下载 PNG 并打印课堂适用的对称绘画活动。",keywords:"对称绘画工具,镜像绘画,轴对称,对称艺术,对称绘图,对称绘画在线,镜像绘画生成器,对称轴,对称绘画简单,镜像绘画简单,对称绘画作业单",ogSiteName:"TeachAny AI Tools",ogTitle:"免费对称绘画工具 - 在线镜像画板",ogDescription:"利用镜像对称进行绘画,创作辐射对称艺术,并打印适用于课堂或家庭练习的对称绘画作业单。",ogImage:"https://video.deletetweets.ai/asset_2026_04_25_teachany_mirror_drawing_live_canvas_xjPRd7Ct3yeQPNTYarxBbYTkdwxfQWtP.webp"},page:{title:"对称绘画工具",description:"在线进行对称绘画,探索镜像绘画模式,并根据您的提示生成可打印的 AI 对称绘画作业单。",badges:{mirror:"镜像绘画",symmetry:"对称艺术",worksheet:"可打印作业单"},tabs:{draw:"对称绘画",worksheet:"作业单制作器"},cards:{settings:"绘画设置",worksheet:"作业单设置",canvas:"镜像绘画画布",preview:"作业单预览"},labels:{symmetryMode:"对称模式",brushColor:"画笔颜色",customColor:"自定义颜色",brushSize:"画笔大小",guides:"显示辅助线",whiteBackgroun
2d:"白色背景",prompt:"绘画提示词",promptPlaceholder:"圆翅膀蝴蝶,正面视图",promptIdeas:"提示词建议",generatedImage:"生成的图像",activityMode:"活动模式",worksheetTitle:"作业单标题",grid:"显示绘图网格",strokeCount:"{count} 笔触",ready:"就绪",defaultSubject:"对称性",useBrushColor:"使用 {color} 画笔"},modes:{mirrorVertical:"垂直镜像",mirrorHorizontal:"水平镜像",mirrorBoth:"四向镜像",radial6:"六向辐射",radial8:"八向辐射",snowflake6:"雪花"},colors:{ink:"墨水",teal:"青色",rose:"玫瑰红",amber:"琥珀色",violet:"紫罗兰",cyan:"天蓝色",green:"绿色",slate:"石板灰"},templates:{butterfly:"蝴蝶",heart:"心形",flower:"花朵",leaf:"叶子",rocket:"火箭",house:"房屋",tree:"树木",snowflake:"雪花"},promptIdeas:{butterfly:"圆翅膀蝴蝶,正面视图",heart:"带有简单装饰漩涡的可爱心形",flower:"正面花朵,圆形花瓣和叶子",leaf:"带有清晰中脉的单片叶子",rocket:"带有简单鳍片的火箭船正面图",house:"带有屋顶和窗户的简单房屋正面图",tree:"带有圆形叶冠的简单树木,正面图",snowflake:"简单的六角雪花"},activityModes:{blank:"空白另一侧",trace:"浅色描摹辅助线"},buttons:{undo:"撤销",redo:"重做",clear:"清除",download:"下载 PNG",print:"打印",downloadWorksheet:"下载作业单",printWorksheet:"打印作业单",generateWorksheet:"生成对称绘画",generatingWorksheet:"正在生成..."},hints:{draw:"在画布的一侧开始绘画。您的笔触将立即沿所选对称线镜像反射。",worksheet:"输入提示词,生成 AI 线条画,然后下载或打印对称绘画作业单。",empty:"先画几笔,然后下载或打印您的镜像绘画。",touch:"支持鼠标、触摸、手写笔和触控板。"},status:{ready:"您的镜像绘画画布已就绪。",cleared:"画布已清除。",downloaded:"PNG 已下载。",printed:"打印窗口已打开。",empty:"在下载或打印之前请先画点什么。",printFailed:"无法打开打印窗口。请允许弹出窗口并重试。",worksheetReady:"输入提示词并生成 AI 对称绘画。",worksheetPromptRequired:"生成作业单图像前请输入提示词。",worksheetLoginRequired:"请首先登录以生成 AI 对称绘画。",worksheetGenerating:"正在创建 AI 图像任务...",worksheetQueued:"任务已提交。等待图像生成...",worksheetRendering:"AI 正在绘制您的对称图像...",worksheetPreparing:"准备生成的图像...",worksheetGenerated:"AI 对称绘画已就绪。",worksheetNeedsImage:"在下载或打印之前请先生成 AI 对称绘画。",worksheetGenerateFailed:"图像生成失败。请重试。",worksheetImageLoadFailed:"无法加载生成的图像。"},worksheet:{name:"名称:",date:"日期:",titleTemplate:"{title} 对称绘画",instructions:{trace:"描摹浅色辅助线,然后完成匹配的另一侧。",blank:"绘制另一侧以完成对称轴。"}},print:{drawingTitle:"镜像绘画",worksheetTitle:"对称绘画作业单"},files:{drawing:"symmetry-drawing.png",worksheet:"symmetry-drawing-worksheet.png"}},hero:{title:"免费对称绘画工具",description:"在线创建镜像绘画、对称绘画和可打印的 AI 对称轴作业单。使用垂直镜像、水平镜像、四向镜像、辐射对称或雪花对称。"},feature:{title:"对称绘画工具功能",description:"进行实时对称绘画,尝试辐射艺术,或根据您的提示生成可打印的对称绘画作业单。"},howtowork:{title:"如何制作镜像绘画",description:"使用画布进行实时对称艺术,或切换到作业单模式以打印课堂活动。",ctaText:"开始镜像绘画",stepLabel:"步骤"},benefits:{title:"为什么使用此对称绘画工具?",subtitle:"教授反射、对称轴和创意数学艺术的快速方法"},testimonials:{title:"专为课堂和创意练习打造",description:"教师、辅导老师和家长可以在不安装设计软件的情况下创建镜像绘画活动。"},faq:{title:"对称绘画常见问题",subtitle:"关于镜像绘画、对称绘画、下载和可打印作业单的答案",badge:"常见问题",helpTitle:"需要帮助?",helpDescription:"找不到您需要的内容?我们的支持团队随时为您提供帮助。",helpLinkText:"联系支持"},features:[{label:"交互式",title:"实时进行镜像对称绘画",description:"选择垂直、水平、四向、辐射或雪花对称,观察每一笔刷痕即时反射。",linkText:"打开绘画画布",imageAlt:"带有实时反射和颜色控制的对称绘画工具画布"},{label:"可打印",title:"创建对称绘画作业单",description:"输入任何主题,生成黑白 AI 线条画,并将其转换为带有可选网格线的作业单。",linkText:"制作作业单",imageAlt:"带有提示面板和可打印蝴蝶作业单预览的 AI 对称作业单制作器"}],steps:[{title:"选择对称模式",description:"从垂直镜像开始经典镜像绘画,或尝试辐射模式进行对称艺术。"},{title:"绘画或输入提示词",description:"在画布上自由草绘,或切换到作业单制作器并描述您希望 AI 生成的对称绘画。"},{title:"下载或打印",description:"将对称艺术保存为 PNG,或打印作业单用于课堂、中心站、家庭作业或艺术热身。"}
2],benefitsData:[{title:"直观教学对称轴概念",description:"学生在绘画时可以看到对称轴,使反射和匹配半边的理解更容易。",points:["非常适合对称轴课程","即时视觉反馈","适用于数学和艺术练习"]},{title:"制作简易对称绘画活动",description:"AI 生成的线条画为学生提供新的起点,而空白模式则为独立绘画留出空间。",points:["适合初学者的作业单","可选描摹辅助线","支持可打印网格"]},{title:"创作无限对称艺术",description:"使用不同的画笔颜色、线条宽度和辐射模式制作曼陀罗、雪花和镜像艺术。",points:["无需账户","下载干净的 PNG 文件","适用于桌面和平板电脑"]}],testimonialsData:[{name:"Dana Miller",designation:"小学美术老师",quote:"实时镜像模式非常适合在学生过渡到纸张之前介绍对称性。他们能更快地理解对称轴。"},{name:"Jon Rivera",designation:"数学干预老师",quote:"我用可打印的作业单进行快速热身。描摹选项有助于那些仍在建立空间自信的学生。"},{name:"Maya Chen",designation:"在家上学家长",quote:"我的孩子们喜欢制作雪花对称艺术,然后打印他们最喜欢的作品。它很简单且真正有用。"}],faqsData:[{question:"什么是镜像绘画?",answer:"镜像绘画是一种在一侧沿对称轴反射的绘画活动。它帮助学习者练习视觉平衡、反射和形状匹配。"},{question:"我可以制作对称绘画作业单吗?",answer:"可以。使用作业单制作器,输入提示词,生成 AI 线条画,添加可选网格线,并从浏览器下载或打印作业单。"},{question:"此工具支持辐射对称艺术吗?",answer:"支持。绘画画布包括六向辐射、八向辐射和雪花对称模式,用于曼陀罗风格和雪花风格的绘画。"},{question:"学生可以用平板电脑或手写笔绘画吗?",answer:"可以。画布在现代浏览器中支持鼠标、触摸、手写笔和触控板输入。"},{question:"我需要安装任何东西吗?",answer:"不需要。对称绘画工具直接在浏览器中运行,并可导出 PNG 文件或可打印作业单页面。"}]},Pt={mirrorDrawing:Mt},Ct=bt(()=>gt(()=>import("./LandingPage-TCsh5Rb8-29.js"),__vite__mapDeps([0,1,2]),import.meta.url).then(he=>he.default||he)),At={class:"min-h-screen bg-[#f7faf7] text-slate-950"},Wt={class:"px-4 py-6 md:px-8 md:py-8 pt-20 md:pt-24 max-w-7xl mx-auto"},Rt={class:"text-center mb-7 md:mb-10"},$t={class:"flex flex-wrap justify-center gap-2 mb-5"},Nt={class:"px-3 py-1 rounded-full bg-teal-100 text-teal-800 text-xs font-bold uppercase tracking-[0.18em]"},Gt={class:"px-3 py-1 rounded-full bg-amber-100 text-amber-800 text-xs font-bold uppercase tracking-[0.18em]"},Lt={class:"px-3 py-1 rounded-full bg-rose-100 text-rose-800 text-xs font-bold uppercase tracking-[0.18em]"},Et={class:"text-3xl md:text-5xl font-black tracking-tight text-slate-950"},Ut={class:"mt-4 text-sm md:text-lg leading-7 text-slate-600 max-w-3xl mx-auto"},Bt={id:"tool-form",class:"grid xl:grid-cols-[340px_minmax(0,1fr)] gap-5 xl:gap-6 items-start"},qt={class:"rounded-2xl border border-slate-200 bg-white shadow-sm p-4 md:p-5 xl:sticky xl:top-24"},jt={class:"flex items-center justify-between mb-5"},Ft={class:"text-base font-black text-slate-950"},zt={class:"text-xs font-bold text-teal-700"},Vt={class:"grid grid-cols-2 gap-2 mb-6 rounded-xl bg-slate-100 p-1"},Ht=["aria-pressed"],Yt=["aria-pressed"],Ot={key:0,class:"space-y-6"},Qt={class:"text-xs font-black uppercase tracking-[0.16em] text-slate-500 mb-3"},Xt={class:"grid grid-cols-2 gap-2"},Jt=["aria-pressed","onClick"],Zt={class:"text-xs font-black uppercase tracking-[0.16em] text-slate-500 mb-3"},Kt={class:"flex flex-wrap gap-2"},ea=["aria-label","aria-pressed","onClick"],ra=["title"],ta=["aria-label"],aa={class:"flex items-center justify-between gap-3 mb-3"},oa={class:"text-xs font-black uppercase tracking-[0.16em] text-slate-500"},na={class:"text-xs font-bold text-slate-700"},sa=["aria-label"],ia={class:"space-y-3"},la={class:"flex items-center justify-between gap-3 rounded-xl border border-slate-200 px-3 py-3"},da={class:"text-sm font-semibold text-slate-700"},ca={class:"flex items-center justify-between gap-3 rounded-xl border border-slate-200 px-3 py-3"},ua={class:"text-sm font-semibold text-slate-700"},ma={key:1,class:"space-y-6"},ga={class:"text-xs font-black uppercase tracking-[0.16em] text-slate-500 mb-3"},pa=["placeholder","aria-label"],wa={class:"text-xs font-black uppercase tracking-[0.16em] text-slate-500 mb-3"},ha={class:"grid grid-cols-2 gap-2"},fa=["aria-pressed","onClick"],ya=["disabled"],ba={key:0,class:"rounded-xl border border-slate-200 bg-slate-50 p-3"},ka={class:"flex items-center justify-between gap-3"},va={class:"text-xs font-black uppercase tracking-[0.16em] text-slate-500"},Da={key:0,class:"text-xs font-bold text-teal-800"},xa={key:0,class:"mt-3 h-2 overflow-hidden rounded-full bg-white"},_a=["src","alt"],Ia={class:"text-xs font-black uppercase tracking-[0.16em] text-slate-500 mb-3"},Ta={class:"grid grid-cols-2 gap-2"},Sa=["aria-pressed","onClick"],Ma={class:"block"},Pa={class:"block text-xs font-black uppercase tracking-[0.16em] text-slate-500 mb-2"},Ca={class:"flex items-center justify-between gap-3 rounded-xl border border-slate-200 px-3 py-3"},Aa={class:"text-sm font-semibold text-slate-700"},Wa={class:"mt-6 rounded-xl bg-slate-50 px-3 py-3 text-xs leading-5 text-slate-600"},Ra={class:"rounded-2xl border border-slate-200 bg-white shadow-sm overflow-hidden"},$a={class:"flex flex-col lg:flex-row lg:items-center lg:justify-between gap-4 border-b border-slate-200 px-4 md:px-5 py-4"},Na={class:"text-base md:text-lg font-black text-slate-950"},Ga={class:"mt-1 text-xs md:text-sm text-slate-500"},La={key:0,class:"flex flex-wrap gap-2"},Ea=["disabled","title"],Ua=["disabled","title"],Ba=["disabled","title"],qa={key:1,class:"flex flex-wrap gap-2"},ja=["disabled"],Fa=["disabled"],za={class:"px-4 md:px-6 py-5 md:py-7"},Va={class:"flex justify-center"},Ha={class:"w-full max-w-[680px] rounded-3xl border border-slate-200 bg-slate-100 p-3 md:p-4"},Ya=["aria-label"],Oa={class:"flex justify-center"},Qa={class:"w-full max-w-[720px] rounded-3xl border border-slate-200 bg-slate-100 p-3 md:p-4"},Xa=["aria-label"],Ja={class:"mt-5 text-center text-xs md:text-sm text-slate-500"},Ne=720,_r=1e3,K=1400,Za="1.0.0",Ka="google",eo="nano-banana",ro="Black and white simple line art only, outline drawing, no colors, no shading, single subject centered. Draw in front view or top-down view only, never side view, so the subject is left-right symmetric or nearly symmetric for a mirror symmetry worksheet. No text, no words, no labels, no captions, no letters in the image.",to={__name:"mirror-drawing-maker",async setup(he){let Ge,Le;const{t:g,locale:Q}=yr(),ee=yr(),{replicateFetch:Ee}=mt(),Ir=dt(),{user:Ue}=ct(Ir),fe=vr("isWorkspace"),re=vr("loginModal",null),{isInserting:Be,insertStatusType:qe,insertStatusMessage:je,insertButtonLabel:Fe,canInsert:ze,insertWorkspaceResult:Ve,resetWorkspaceInsertStatus:V}=pt({hasContent:()=>y.value==="draw"?v.value.length>0:!!x.value&&!_.value,buildPayload:async()=>{const e=y.value==="worksheet",t=e?await Me():Ie();if(!t)throw new Error("No image available to insert.");return ht({toolSlug:"mirror-drawing-maker",title:e?L.value||u("mirrorDrawing.page.print.worksheetTitle","Symmetry Drawing Worksheet"):u("mirrorDrawing.page.print.drawingTitle","Mirror Drawing"),dataUrl:t.toDataURL("image/png"),meta:{panel:y.value,symmetryMode:N.value,worksheetMode:G.value}})}}
2),He=new Set,Ye={en:we,zh:Pt},U=we.mirrorDrawing.meta;function ye(e){return!e||e==="en"||e.startsWith("en-")}function Tr(e){return`https://project.deletetweets.ai/i18n_languages/teachany/mirror-drawing-maker/${Za}/${e}.json?q=1`}function u(e,t,r){const a=r?g(e,r):g(e);return a&&a!==e?a:t}function Oe(e){ee.mergeLocaleMessage("en",we);const t=Ye[e];t?ee.mergeLocaleMessage(e,t):ye(e)&&ee.mergeLocaleMessage(e||"en",we)}async function be(e){if(!(!e||ye(e)||Ye[e]||He.has(e)))try{const t=await $fetch(Tr(e));t&&typeof t=="object"&&(ee.mergeLocaleMessage(e,t),He.add(e))}catch{}}Oe(Q.value),[Ge,Le]=ft(()=>be(Q.value)),await Ge,Le(),O(Q,e=>{Oe(e),be(e)});const y=h("draw"),ke=h(null),Qe=h(null),N=h("mirror_vertical"),S=h("#111827"),B=h(5),X=h(!0),H=h(!0),v=h([]),q=h([]),C=h([]),te=h(!1),A=h(u("mirrorDrawing.page.promptIdeas.butterfly","butterfly with rounded wings, front view")),x=h(""),ae=h(""),_=h(!1),oe=h(0),G=h("blank"),J=h(!0),L=h(u("mirrorDrawing.page.templates.butterfly","Butterfly")),ve=h("ready"),ne=h("info"),Xe=b(()=>[{value:"mirror_vertical",label:g("mirrorDrawing.page.modes.mirrorVertical")||"Vertical mirror",activeClass:"border-teal-300 bg-teal-100 text-teal-950"},{value:"mirror_horizontal",label:g("mirrorDrawing.page.modes.mirrorHorizontal")||"Horizontal mirror",activeClass:"border-amber-300 bg-amber-100 text-amber-950"},{value:"mirror_both",label:g("mirrorDrawing.page.modes.mirrorBoth")||"Four-way mirror",activeClass:"border-rose-300 bg-rose-100 text-rose-950"},{value:"radial_6",label:g("mirrorDrawing.page.modes.radial6")||"6-way radial",activeClass:"border-cyan-300 bg-cyan-100 text-cyan-950"},{value:"radial_8",label:g("mirrorDrawing.page.modes.radial8")||"8-way radial",activeClass:"border-violet-300 bg-violet-100 text-violet-950"},{value:"snowflake_6",label:g("mirrorDrawing.page.modes.snowflake6")||"Snowflake",activeClass:"border-sky-300 bg-sky-100 text-sky-950"}]),Sr=b(()=>[{label:u("mirrorDrawing.page.colors.ink","Ink"),value:"#111827"},{label:u("mirrorDrawing.page.colors.teal","Teal"),value:"#0f766e"},{label:u("mirrorDrawing.page.colors.rose","Rose"),value:"#be123c"},{label:u("mirrorDrawing.page.colors.amber","Amber"),value:"#b45309"},{label:u("mirrorDrawing.page.colors.violet","Violet"),value:"#7c3aed"},{label:u("mirrorDrawing.page.colors.cyan","Cyan"),value:"#0891b2"},{label:u("mirrorDrawing.page.colors.green","Green"),value:"#15803d"},{label:u("mirrorDrawing.page.colors.slate","Slate"),value:"#475569"}]),Mr=b(()=>[{value:"butterfly",label:g("mirrorDrawing.page.templates.butterfly")||"Butterfly",prompt:u("mirrorDrawing.page.promptIdeas.butterfly","butterfly with rounded wings, front view")},{value:"heart",label:g("mirrorDrawing.page.templates.heart")||"Heart",prompt:u("mirrorDrawing.page.promptIdeas.heart","cute heart with simple decorative swirls")},{value:"flower",label:g("mirrorDrawing.page.templates.flower")||"Flower",prompt:u("mirrorDrawing.page.promptIdeas.flower","front view flower with round petals and leaves")},{value:"leaf",label:g("mirrorDrawing.page.templates.leaf")||"Leaf",prompt:u("mirrorDrawing.page.promptIdeas.leaf","single leaf with a clear center vein")},{value:"rocket",label:g("mirrorDrawing.page.templates.rocket")||"Rocket",prompt:u("mirrorDrawing.page.promptIdeas.rocket","rocket ship front view with simple fins")},{value:"house",label:g("mirrorDrawing.page.templates.house")||"House",prompt:u("mirrorDrawing.page.promptIdeas.house","simple front view house with roof and windows")},{value:"tree",label:g("mirrorDrawing.page.templates.tree")||"Tree",prompt:u("mirrorDrawing.page.promptIdeas.tree","simple tree with round leafy crown, front view")},{value:"snowflake",label:g("mirrorDrawing.page.templates.snowflake")||"Snowflake",prompt:u("mirrorDrawing.page.promptIdeas.snowflake","simple six point snowflake")}]),Je=b(()=>[{value:"blank",label:g("mirrorDrawing.page.activityModes.blank")||"Blank other side"},{value:"trace",label:g("mirrorDrawing.page.activityModes.trace")||"Light trace guide"}]),Pr=b(()=>Xe.value.find(e=>e.value===N.value)?.label||""),Cr=b(()=>Je.value.find(e=>e.value===G.value)?.label||""),se=b(()=>Vr(L.value||A.value||u("mirrorDrawing.page.labels.defaultSubject","Symmetry"))),De=b
2(()=>v.value.length>0),Ze=b(()=>q.value.length>0),Ar=b(()=>g("mirrorDrawing.page.labels.strokeCount",{count:v.value.length})||`${v.value.length} strokes`),Wr=b(()=>{const e={ready:g("mirrorDrawing.page.status.ready")||"Your mirror drawing canvas is ready.",cleared:g("mirrorDrawing.page.status.cleared")||"Canvas cleared.",downloaded:g("mirrorDrawing.page.status.downloaded")||"PNG downloaded.",printed:g("mirrorDrawing.page.status.printed")||"Print window opened.",empty:g("mirrorDrawing.page.status.empty")||"Draw something first before downloading or printing.",printFailed:g("mirrorDrawing.page.status.printFailed")||"Printing could not be opened. Please allow pop-ups and try again.",worksheetReady:g("mirrorDrawing.page.status.worksheetReady")||"Enter a prompt and generate an AI symmetry drawing.",worksheetPromptRequired:g("mirrorDrawing.page.status.worksheetPromptRequired")||"Enter a prompt before generating a worksheet image.",worksheetLoginRequired:g("mirrorDrawing.page.status.worksheetLoginRequired")||"Please sign in first to generate an AI symmetry drawing.",worksheetGenerating:g("mirrorDrawing.page.status.worksheetGenerating")||"Creating AI image task...",worksheetQueued:g("mirrorDrawing.page.status.worksheetQueued")||"Task submitted. Waiting for image generation...",worksheetRendering:g("mirrorDrawing.page.status.worksheetRendering")||"AI is drawing your symmetry image...",worksheetPreparing:g("mirrorDrawing.page.status.worksheetPreparing")||"Preparing generated image...",worksheetGenerated:g("mirrorDrawing.page.status.worksheetGenerated")||"AI symmetry drawing is ready.",worksheetNeedsImage:g("mirrorDrawing.page.status.worksheetNeedsImage")||"Generate an AI symmetry drawing before downloading or printing.",worksheetGenerateFailed:g("mirrorDrawing.page.status.worksheetGenerateFailed")||"Image generation failed. Please try again.",worksheetImageLoadFailed:g("mirrorDrawing.page.status.worksheetImageLoadFailed")||"Generated image could not be loaded."};return e[ve.value]||e.ready}),Rr=b(()=>ne.value==="success"?"border-teal-200 bg-teal-50 text-teal-900":ne.value==="warning"?"border-amber-200 bg-amber-50 text-amber-900":ne.value==="error"?"border-rose-200 bg-rose-50 text-rose-900":"border-slate-200 bg-slate-50 text-slate-700");function Ke(e){y.value=e,e==="worksheet"&&ve.value==="ready"&&!x.value&&w("worksheetReady"),Ae(()=>{M(),Z()})}function w(e,t="info"){ve.value=e,ne.value=t}function xe(e,t,r,a){const o=e.x-t,d=e.y-r,l=Math.cos(a),i=Math.sin(a);return{x:t+o*l-d*i,y:r+o*i+d*l}}function $r(e,t,r){const a=e/2,o=t/2,d=i=>({x:2*a-i.x,y:i.y}),l=i=>({x:i.x,y:2*o-i.y});if(r==="mirror_vertical")return[i=>i,d];if(r==="mirror_horizontal")return[i=>i,l];if(r==="mirror_both")return[i=>i,d,l,i=>l(d(i))];if(r==="radial_6"||r==="snowflake_6"){const i=[];for(let c=0;c<6;c+=1){const p=Math.PI*2*c/6;i.push(D=>xe(D,a,o,p)),r==="snowflake_6"&&i.push(D=>xe(d(D),a,o,p))}return i}if(r==="radial_8"){const i=[];for(let c=0;c<8;c+=1){const p=Math.PI*2*c/8;i.push(D=>xe(D,a,o,p))}return i}return[i=>i]}function Nr(e,t,r,a){const o=t/2,d=r/2;if(e.save(),e.strokeStyle="rgba(15, 118, 110, 0.34)",e.setLineDash([10,10]),e.lineWidth=Math.max(1,t*.002),(a==="mirror_vertical"||a==="mirror_both")&&(e.beginPath(),e.moveTo(o+.5,0),e.lineTo(o+.5,r),e.stroke()),(a==="mirror_horizontal"||a==="mirror_both")&&(e.beginPath(),e.moveTo(0,d+.5),e.lineTo(t,d+.5),e.stroke()),a==="radial_6"||a==="snowflake_6"||a==="radial_8"){const l=a==="radial_8"?8:6,i=Math.max(t,r);for(let c=0;c<l;c+=1){const p=Math.PI*2*c/l;e.beginPath(),e.moveTo(o,d),e.lineTo(o+Math.cos(p)*i,d+Math.sin(p)*i),e.stroke()}}e.restore()}function er(e,t,r,a,o){if(!t||t.points.length<2)return;e.save(),e.strokeStyle=t.color,e.lineWidth=t.lineWidth,e.lineCap="round",e.lineJoin="round";const d=$r(r,a,o);for(const l of d){const i=t.points.map(l);e.beginPath(),e.moveTo(i[0].x,i[0].y);for(let c=1;c<i.length;c+=1)e.lineTo(i[c].x,i[c].y);e.stroke()}e.restore()}function rr({canvas:e,mode:t,items:r,currentStroke:a=null,guides:o=!0,white:d=!0}){const l=e.getContext("2d");if(!l)return;const i=e.width,c=e.height;l.clearRect(0,0,i,c),d&&(l.fillStyle="#ffffff",l.fillRect(0,0,i,c)),o&&Nr(l,i,c,t);for(const p of r)er(l,p,i,c,t);a&&er(l,a,i,c,t)}function M(){const e=ke.value;if(!e)return;const t=C.value.length>=2?{points:C.value,color:S.value,lineWidth:B.value}:null;rr({canvas:e,mode:N.value,items:v.value,currentStroke:t,guides:X.value,white:H.value})}function tr(e){const t=ke.value;if(!t)return null;const r=t.getBoundingClientRect(),a=t.width/r.width,o=t.height/r.height;return{x:(e.clientX-r.left)*a,y:(e.clientY-r.top)*o}}function Gr(e){e.preventDefault();const t=tr(e);t&&(e.currentTarget.setPointerCapture?.(e.pointerId),te.value=!0,C.value=[t],M())}function Lr(e){if(!te.value)return;const t=tr(e);t&&(C.value=[...C.value,t],M())}function _e(e){te.value&&(e.currentTarget.releasePointerCapture?.(e.pointerId),te.value=!1,C.value.length>=2&&(v.value=[...v.value,{points:[...C.value],color:S.value,lineWidth:B.value}],q.value=[]),C.value=[],M())}function Er(){if(!De.value)return;const e=[...v.value],t=e.pop();v.value=e,t&&(q.value=[...q.value,t]),M()}
2function Ur(){if(!Ze.value)return;const e=[...q.value],t=e.pop();q.value=e,t&&(v.value=[...v.value,t]),M()}function Br(){v.value=[],q.value=[],C.value=[],w("cleared"),V(),M()}function qr(e,t){return e.map(r=>({...r,lineWidth:r.lineWidth*t,points:r.points.map(a=>({x:a.x*t,y:a.y*t}))}))}function Ie(){const e=document.createElement("canvas");e.width=K,e.height=K;const t=K/Ne;return rr({canvas:e,mode:N.value,items:qr(v.value,t),guides:!1,white:H.value}),e}function ar(e,t){const r=document.createElement("a");r.href=e,r.download=t,document.body.appendChild(r),r.click(),r.remove()}function jr(e){return String(e).replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;").replace(/'/g,"&#39;")}function Fr(){if(!v.value.length){w("empty","warning");return}const e=Ie();ar(e.toDataURL("image/png"),u("mirrorDrawing.page.files.drawing","mirror-drawing.png")),w("downloaded","success"),V()}function or(e,t){const r=window.open("","_blank");if(!r)return!1;const a=jr(t);return r.document.write(`<!doctype html>
3<html>
4<head>
5  <title>${a}</title>
6  <meta name="viewport" content="width=device-width, initial-scale=1">
7  <style>
8    body { margin: 0; padding: 24px; font-family: Arial, sans-serif; background: #fff; }
9    img { display: block; max-width: 100%; width: 760px; margin: 0 auto; }
10    @media print { body { padding: 0; } img { width: 100%; max-width: none; } }
11  </style>
12</head>
13<body>
14  <img src="${e}" alt="${a}" onload="window.focus(); window.print();">
15</body>
16</html>`),r.document.close(),!0}function zr(){if(!v.value.length){w("empty","warning");return}const e=Ie();or(e.toDataURL("image/png"),u("mirrorDrawing.page.print.drawingTitle","Mirror Drawing"))?w("printed","success"):w("printFailed","error")}function Vr(e){const t=String(e||"").trim();if(!t)return u("mirrorDrawing.page.labels.defaultSubject","Symmetry");const a=t.replace(/[_-]+/g," ").split(/\s+/).filter(Boolean).slice(0,5).map(o=>/[\u4e00-\u9fa5]/.test(o)?o:o.charAt(0).toUpperCase()+o.slice(1)).join(" ");return a.length<=32?a:`${a.slice(0,32).trim()}...`}function Hr(e){A.value=e.prompt,L.value=e.label,x.value="",ae.value="",w("worksheetReady")}function Yr(e){return new Promise(t=>setTimeout(t,e))}function ie(e,t=""){oe.value=Math.max(0,Math.min(100,Math.round(e))),t&&w(t)}function nr(){(re?.value||re)?.preload?.()}async function sr(){const e=re?.value||re;return e?.open?(await e.open(),!0):!1}function Y(e){if(!e)return{};if(typeof e=="string"){const t=e.trim();try{return Y(JSON.parse(t))}catch{return t}}if(e&&typeof e=="object"){const t={...e};for(const r of["data","result","payload","response"]){const a=t[r];if(typeof a=="string")try{t[r]=Y(JSON.parse(a))}catch{t[r]=a}}return t}return e}function le(e){return!(typeof e!="string"||!e||e.length<6||/\s/.test(e)||/^https?:\/\//.test(e))}function ir(e){if(typeof e!="string"||!/^https?:\/\//.test(e))return"";try{const t=new URL(e),r=t.pathname.split("/").filter(Boolean),a=r.findIndex(o=>o==="predictions");return a>=0&&r[a+1]?r[a+1]:t.searchParams.get("id")||t.searchParams.get("prediction_id")||""}catch{return""}}function lr(e){return e?e?.data&&typeof e.data=="object"?e.data:e?.result&&typeof e.result=="object"?e.result:e:{}}function Or(e){const t=[Y(e)];for(;t.length;){const r=t.shift();if(!r)continue;if(typeof r=="string"){const o=ir(r);if(le(o))return o;if(le(r))return r;const d=Y(r);d&&d!==r&&t.push(d);continue}if(Array.isArray(r)){t.push(...r);continue}if(typeof r!="object")continue;const a=r.id||r.jobId||r.taskId||r.predictionId||r.prediction_id||r?.prediction?.id;if(le(a))return a;for(const o of[r.url,r.urls?.get,r.urls?.cancel,r.prediction_url,r.predictionUrl]){const d=ir(o);if(le(d))return d}t.push(r.data,r.result,r.payload,r.response,r.prediction,r.urls)}return""}function dr(e){if(typeof e=="string")return e;if(Array.isArray(e)){const t=e[0];return typeof t=="string"?t:t&&typeof t=="object"&&t.url?String(t.url):""}return e&&typeof e=="object"&&e.url?String(e.url):""}function de(e){return e?.msg||e?.message||e?.error||e?.data?.msg||e?.data?.message||e?.data?.error||e?.result?.msg||e?.result?.message||e?.result?.error||""}function Qr(e){const t=String(e?.message||e||"");return/unauthorized|401/i.test(t)?"worksheetLoginRequired":t.includes("replicate-output-empty")||t.includes("fetch-image-failed")?"worksheetImageLoadFailed":"worksheetGenerateFailed"}function Xr(e){const t=String(e||"").replace(/\bmirror drawing\b/gi,"").replace(/\bsymmetry drawing\b/gi,"").replace(/\bworksheet\b/gi,"").replace(/\bline art\b/gi,"").replace(/\s{2,}/g," ").trim();return t?`a simple line drawing of ${t}, centered, with a clear silhouette and simple recognizable shape. Do not anthropomorphize the subject. No face, no body, no arms, no legs unless the prompt explicitly asks for them. ${ro}`:""}async function Jr(e){const t=await fetch(e);if(!t.ok)throw new Error(`fetch-image-failed-${t.status}`);const r=await t.blob();return new Promise((a,o)=>{const d=new FileReader;d.onload=()=>a(d.result||""),d.onerror=o,d.readAsDataURL(r)})}async function Zr(e){const t=await Ee.createSpecifyPrediction(Ka,eo,{prompt:e,aspect_ratio:"1:1",output_format:"png"}),r=Y(t),a=lr(r),o=dr(a?.output||r?.output);if(o)return{outputUrl:o,taskId:""};const d=String(a?.status||r?.status||"").toLowerCase();
16if(d==="failed"||d==="canceled"||d==="cancelled"){const i=de(a)||de(r)||"replicate-create-failed";throw new Error(i)}const l=Or(r);if(!l){const i=de(a)||de(r)||"unknown";throw new Error(`replicate-task-id-missing: ${i}`)}return{outputUrl:"",taskId:l}}async function Kr(e,t){let r=2200;const a=50;for(let o=0;o<a;o+=1){await Yr(r);const d=await Ee.getReplicateTask(e),l=Y(d),i=lr(l),c=String(i?.status||"").toLowerCase();if(t?.({attempt:o,maxAttempts:a,status:c}),c==="succeeded"){const p=dr(i?.output);if(!p)throw new Error("replicate-output-empty");return p}if(c==="failed"||c==="canceled"||c==="cancelled")throw new Error(i?.error||`replicate-${c||"failed"}`);r=Math.min(Math.floor(r*1.2),1e4)}throw new Error("replicate-timeout")}async function et(){if(_.value)return;const e=Xr(A.value);if(!e){w("worksheetPromptRequired","warning");return}if(!Ue.value){await sr()||w("worksheetLoginRequired","warning");return}_.value=!0,x.value="",ae.value="",ie(6,"worksheetGenerating");try{const{outputUrl:t,taskId:r}=await Zr(e);let a=t;a||(ie(24,"worksheetQueued"),a=await Kr(r,({attempt:o,maxAttempts:d,status:l})=>{const i=Math.min(1,(o+1)/Math.max(1,d)),c=24+Math.round(i*52);ie(c,l==="running"?"worksheetRendering":"worksheetQueued")})),ae.value=a,ie(84,"worksheetPreparing"),x.value=String(await Jr(a)),oe.value=100,w("worksheetGenerated","success"),await Ae(),await Z()}catch(t){const r=Qr(t);if(r==="worksheetLoginRequired"){const a=await sr();w(a?"worksheetReady":"worksheetLoginRequired",a?"info":"warning");return}w(r,"error")}finally{_.value=!1}}function cr(e,t,r,a,o,d){const l=Math.min(d,a/2,o/2);e.beginPath(),e.moveTo(t+l,r),e.lineTo(t+a-l,r),e.arcTo(t+a,r,t+a,r+l,l),e.lineTo(t+a,r+o-l),e.arcTo(t+a,r+o,t+a-l,r+o,l),e.lineTo(t+l,r+o),e.arcTo(t,r+o,t,r+o-l,l),e.lineTo(t,r+l),e.arcTo(t,r,t+l,r,l),e.closePath()}function rt(e,t,r,a,o,d){e.save(),e.strokeStyle="rgba(15, 23, 42, 0.12)",e.lineWidth=1,e.beginPath();for(let l=t;l<=t+a;l+=d)e.moveTo(Math.round(l)+.5,r),e.lineTo(Math.round(l)+.5,r+o);for(let l=r;l<=r+o;l+=d)e.moveTo(t,Math.round(l)+.5),e.lineTo(t+a,Math.round(l)+.5);e.stroke(),e.restore()}function Te(e,t,r,a,o,d){const l=String(t||"").trim().split(/\s+/).filter(Boolean),i=[];let c="";for(const p of l){const D=c?`${c} ${p}`:p;!c||e.measureText(D).width<=o?c=D:(i.push(c),c=p)}c&&i.push(c);for(let p=0;p<i.length;p+=1)e.fillText(i[p],r,a+p*d);return i.length*d}function ur(e){return new Promise((t,r)=>{const a=new Image;a.crossOrigin="anonymous",a.onload=()=>t(a),a.onerror=()=>r(new Error("worksheet-image-load-failed")),a.src=e})}function ce(e,t=null){const r=e.getContext("2d");if(!r)return;const a=e.width;r.clearRect(0,0,a,a),r.fillStyle="#ffffff",r.fillRect(0,0,a,a);const o=a*.06,d=o,l=o,i=a-o*2,c=a-o*2;r.save(),cr(r,d,l,i,c,a*.035),r.fillStyle="#f8fafc",r.fill(),r.strokeStyle="#dbe3ea",r.lineWidth=2,r.stroke(),r.restore();const p=d+o*.55,D=i-o*1.1;let I=l+o*.55;r.save(),r.fillStyle="#475569",r.textAlign="left",r.textBaseline="middle",r.font=`${Math.round(a*.021)}px Arial`,r.fillText(u("mirrorDrawing.page.worksheet.name","Name:"),p,I),r.fillText(u("mirrorDrawing.page.worksheet.date","Date:"),p+D*.58,I),r.strokeStyle="#cbd5e1",r.lineWidth=2,r.beginPath(),r.moveTo(p+a*.06,I+1),r.lineTo(p+D*.5,I+1),r.moveTo(p+D*.65,I+1),r.lineTo(p+D,I+1),r.stroke(),r.restore(),I+=a*.07,r.save(),r.fillStyle="#0f172a",r.textAlign="center",r.textBaseline="top",r.font=`700 ${Math.round(a*.04)}px Arial`;const ue=L.value||se.value,nt=/symmetry drawing/i.test(ue)?ue:u("mirrorDrawing.page.worksheet.titleTemplate",`${ue} symmetry drawing`,{title:ue});I+=Te(r,nt,a/2,I,D,a*.048),r.restore(),r.save(),r.fillStyle="#475569",r.textAlign="center",r.textBaseline="top",r.font=`${Math.round(a*.023)}px Arial`;const st=G.value==="trace"?u("mirrorDrawing.page.worksheet.instructions.trace","Trace the light guide, then finish the matching side."):u("mirrorDrawing.page.worksheet.instructions.blank","Draw the other side to complete the line of symmetry.");I+=Te(r,st,a/2,I+a*.01,D,a*.034),r.restore();const j=p,W=I+a*.035,T=D,R=l+c-o*.55-W;if(r.save(),cr(r,j,W,T,R,a*.02),r.fillStyle="#ffffff",r.fill(),r.strokeStyle="#cbd5e1",r.lineWidth=2,r.stroke(),r.clip(),J.value&&rt(r,j,W,T,R,Math.max(28,T/12)),t){const mr=Math.min(T,R)*.05,gr=t.naturalWi
16dth||t.width,pr=t.naturalHeight||t.height,it=T-mr*2,lt=R-mr*2,wr=Math.min(it/gr,lt/pr),Pe=gr*wr,Ce=pr*wr,hr=j+(T-Pe)/2,fr=W+(R-Ce)/2;r.save(),r.beginPath(),r.rect(j,W,T/2,R),r.clip(),r.drawImage(t,hr,fr,Pe,Ce),r.restore(),G.value==="trace"&&(r.save(),r.globalAlpha=.22,r.beginPath(),r.rect(j+T/2,W,T/2,R),r.clip(),r.drawImage(t,hr,fr,Pe,Ce),r.restore())}else r.save(),r.fillStyle="#64748b",r.textAlign="center",r.textBaseline="middle",r.font=`700 ${Math.round(a*.022)}px Arial`,Te(r,g("mirrorDrawing.page.status.worksheetReady")||"Enter a prompt and generate an AI symmetry drawing.",a/2,W+R/2-a*.02,T*.72,a*.034),r.restore();r.save(),r.strokeStyle="#0f766e",r.lineWidth=Math.max(2,a*.004),r.setLineDash([14,10]),r.beginPath(),r.moveTo(j+T/2,W),r.lineTo(j+T/2,W+R),r.stroke(),r.restore(),r.restore()}let Se=0;async function Z(){const e=Qe.value;if(!e)return;const t=Se+=1,r=x.value;if(!r){ce(e);return}try{const a=await ur(r);if(t!==Se)return;ce(e,a)}catch{if(t!==Se)return;ce(e),w("worksheetImageLoadFailed","error")}}async function Me(){if(!x.value)return w("worksheetNeedsImage","warning"),null;const e=document.createElement("canvas");e.width=K,e.height=K;const t=await ur(x.value);return ce(e,t),e}async function tt(){try{const e=await Me();if(!e)return;ar(e.toDataURL("image/png"),u("mirrorDrawing.page.files.worksheet","symmetry-drawing-worksheet.png")),w("downloaded","success"),V()}catch{w("worksheetImageLoadFailed","error")}}async function at(){try{const e=await Me();if(!e)return;or(e.toDataURL("image/png"),u("mirrorDrawing.page.print.worksheetTitle","Symmetry Drawing Worksheet"))?w("printed","success"):w("printFailed","error")}catch{w("worksheetImageLoadFailed","error")}}function ot(){M(),Z()}return O([N,X,H,S,B],M),O(v,M,{deep:!0}),O(A,(e,t)=>{e!==t&&(x.value="",ae.value="",w("worksheetReady"),V(),Z())}),O([G,J,L,x],()=>{V(),Z()}),O(y,()=>{V()}),yt(()=>{be(Q.value),Ae(ot)}),ut({title:b(()=>ye(Q.value)?U.title:u("mirrorDrawing.meta.title",U.title)),meta:[{name:"keywords",content:b(()=>u("mirrorDrawing.meta.keywords",U.keywords))},{name:"description",content:b(()=>u("mirrorDrawing.meta.description",U.description))},{property:"og:site_name",content:b(()=>u("mirrorDrawing.meta.ogSiteName",U.ogSiteName))},{property:"og:title",content:b(()=>u("mirrorDrawing.meta.ogTitle",U.ogTitle))},{property:"og:description",content:b(()=>u("mirrorDrawing.meta.ogDescription",U.ogDescription))},{property:"og:type",content:"website"}],link:[{rel:"canonical",href:"https://www.teachany.com/tools/mirror-drawing-maker"}]}),(e,t)=>{const r=wt,a=Ct;return f(),k("div",At,[n("div",Wt,[n("header",Rt,[n("div",$t,[n("span",Nt,m(e.$t("mirrorDrawing.page.badges.mirror")||"Mirror drawing"),1),n("span",Gt,m(e.$t("mirrorDrawing.page.badges.symmetry")||"Symmetry art"),1),n("span",Lt,m(e.$t("mirrorDrawing.page.badges.worksheet")||"Printable worksheets"),1)]),n("h1",Et,m(e.$t("mirrorDrawing.page.title")||"Mirror Drawing Maker"),1),n("p",Ut,m(e.$t("mirrorDrawing.page.description")||"Draw with symmetry online, explore mirror drawing modes, and create printable symmetry drawing worksheets in your browser."),1)]),n("section",Bt,[n("aside",qt,[n("div",jt,[n("h2",Ft,m(s(y)==="draw"?e.$t("mirrorDrawing.page.cards.settings")||"Drawing Settings":e.$t("mirrorDrawing.page.cards.worksheet")||"Worksheet Settings"),1),n("span",zt,m(s(y)==="draw"?s(Pr):s(se)),1)]),n("div",Vt,[n("button",{type:"button",class:E(["inline-flex items-center justify-center gap-2 rounded-lg px-3 py-2 text-xs font-bold transition-colors",s(y)==="draw"?"bg-white text-slate-950 shadow-sm":"text-slate-600 hover:text-slate-950"]),"aria-pressed":s(y)==="draw",onClick:t[0]||(t[0]=o=>Ke("draw"))},[P(s(vt),{class:"w-4 h-4","aria-hidden":"true"}),br(" "+m(e.$t("mirrorDrawing.page.tabs.draw")||"Draw With Symmetry"),1)],10,Ht),n("button",{type:"button",class:E(["inline-flex items-center justify-center gap-2 rounded-lg px-3 py-2 text-xs font-bold transition-colors",s(y)==="worksheet"?"bg-white text-slate-950 shadow-sm":"text-slate-600 hover:text-slate-950"]),"aria-pressed":s(y)==="worksheet",onClick:t[1]||(t[1]=o=>Ke("worksheet"))},[P(s(Dt),{class:"w-4 h-4","aria-hidden":"true"}),br(" "+m(e.$t("mirrorDrawing.page.tabs.worksheet")||"Worksheet Maker"),1)],10,Yt)]),s(y)==="draw"?(f(),k("div",Ot,[n("div",null,[n("p",Qt,m(e.$t("mirrorDrawing.page.labels.symmetryMode")||"Symmetry Mode"),1),n("div",Xt,[(f(!0),k(me,null,ge(s(Xe),o=>(f(),k("button",{key:o.value,type:"button",class:E(["rounded-xl border px-3 py-2.5 text-left text-xs font-bold transition-all",s(N)===o.value?`${o.activeClass} shadow-sm`:"border-slate-200 bg-white text-slate-600 hover:border-slate-300"]),"aria-pressed":s(N)===o.value,onClick:d=>N.value=o.value},m(o.label),11,Jt))),128))])]),n("div",null,[n("p",Zt,m(e.$t("mirrorDrawing.page.labels.brushColor")||"Brush Color"),1),n("div",Kt,[(f(!0),k(me,null,ge(s(Sr),o=>(f(),k("button",{key:o.value,type:"button",class:E(["w-9 h-9 rounded-full border-2 transition-transform hover:scale-105 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-slate-900",s(S)===o.value?"border-slate-950 ring-2 ring-slate-300":"border-white shadow-sm"]),style:We({backgroundColor:o.value}),"aria-label":u("mirrorDrawing.page.labels.useBrushColor",`Use ${o.label} brush`,{color:o.label}),"aria-pressed":s(S)===o.value,onClick:d=>S.value=o.value},null,14,ea))),128)),n("label",{class:"relative inline-flex h-9 w-9 cursor-pointer items-center justify-center overflow-hidden rounded-full border-2 border-white shadow-sm transition-transform hover:scale-105 focus-within:ring-2 focus-within:ring-offset-2 focus-within:ring-slate-900",title:e.$t("mirrorDrawing.page.labels.customColor")||"Custom Color",style:{background:"conic-gradient(#ef4444, #f97316, #facc15, #22c55e, #06b6d4, #3b82f6, #8b5cf6, #ec4899, #ef4444)"}},[$(n("input",{"onUpdate:modelValue":t[2]||(t[2]=o=>F(S)?S.value=o:null),type:"color",class:"absolute inset-0 h-full w-full cursor-pointer opacity-0","aria-label":e.$t("mirrorDrawing.page.labels.customColor")||"Custom Color"},null,8,ta),[[pe,s(S)]]),n("span",{class:"pointer-events-none h-5 w-5 rounded-full border-2 border-white shadow",style:We({backgroundColor:s(S)}),"aria-hidden":"true"},null,4)],8,ra)])]),n("div",null,[n("div",aa,[n("p",oa,m(e.$t("mirrorDrawing.page.labels.brushSize")||"Brush Size"),1),n("span",na,m(s(B))+"px",1)]),$(n("input",{"onUpdate:modelValue":t[3]||(t[3]=o=>F(B)?B.value=o:null),type:"range",min:"2",max:"24",step:"1",class:"w-full accent-teal-700","aria-label":e.$t("mirrorDrawing.page.labels.brushSize")||"Brush Size"},null,8,sa),[[pe,s(B),void 0,{number:!0}]])]),n("div",ia,[n("label",la,[n("span",da,m(e.$t("mirrorDrawing.page.labels.guides")||"Show guide lines"),1),$(n("input",{"onUpdate:modelValue":t[4]||(t[4]=o=>F(X)?X.value=o:null),type:"checkbox",class:"rounded border-slate-300 text-teal-700 focus:ring-teal-700"},null,512),[[Re,s(X)]])]),n("label",ca,[n("span",ua,m(e.$t("mirrorDrawing.page.labels.whiteBackgroun
16d")||"White background"),1),$(n("input",{"onUpdate:modelValue":t[5]||(t[5]=o=>F(H)?H.value=o:null),type:"checkbox",class:"rounded border-slate-300 text-teal-700 focus:ring-teal-700"},null,512),[[Re,s(H)]])])])])):(f(),k("div",ma,[n("div",null,[n("p",ga,m(e.$t("mirrorDrawing.page.labels.prompt")||"Drawing Prompt"),1),$(n("textarea",{"onUpdate:modelValue":t[6]||(t[6]=o=>F(A)?A.value=o:null),rows:"4",maxlength:"180",class:"w-full resize-none rounded-xl border border-slate-200 bg-white px-3 py-2.5 text-sm font-semibold leading-6 text-slate-800 focus:border-teal-600 focus:ring-teal-600",placeholder:e.$t("mirrorDrawing.page.labels.promptPlaceholder")||"butterfly with rounded wings, front view","aria-label":e.$t("mirrorDrawing.page.labels.prompt")||"Drawing Prompt"},null,8,pa),[[pe,s(A)]])]),n("div",null,[n("p",wa,m(e.$t("mirrorDrawing.page.labels.promptIdeas")||"Prompt Ideas"),1),n("div",ha,[(f(!0),k(me,null,ge(s(Mr),o=>(f(),k("button",{key:o.value,type:"button",class:E(["rounded-xl border px-3 py-2.5 text-left text-xs font-bold transition-all",s(A)===o.prompt?"border-amber-300 bg-amber-100 text-amber-950 shadow-sm":"border-slate-200 bg-white text-slate-600 hover:border-slate-300"]),"aria-pressed":s(A)===o.prompt,onClick:d=>Hr(o)},m(o.label),11,fa))),128))])]),n("button",{type:"button",class:"w-full inline-flex items-center justify-center gap-2 rounded-xl border border-teal-700 bg-teal-700 px-4 py-3 text-sm font-black text-white shadow-sm transition hover:bg-teal-800 disabled:cursor-not-allowed disabled:opacity-55",disabled:s(_),onMouseenter:nr,onFocus:nr,onClick:et},[P(s(xt),{class:E(["w-4 h-4",s(_)?"animate-spin":""]),"aria-hidden":"true"},null,8,["class"]),n("span",null,m(s(_)?e.$t("mirrorDrawing.page.buttons.generatingWorksheet")||"Generating...":e.$t("mirrorDrawing.page.buttons.generateWorksheet")||"Generate Symmetry Drawing"),1)],40,ya),s(_)||s(x)?(f(),k("div",ba,[n("div",ka,[n("span",va,m(e.$t("mirrorDrawing.page.labels.generatedImage")||"Generated Image"),1),s(_)?(f(),k("span",Da,m(s(oe))+"%",1)):z("",!0)]),s(_)?(f(),k("div",xa,[n("div",{class:"h-full rounded-full bg-teal-700 transition-all",style:We({width:`${s(oe)}%`})},null,4)])):z("",!0),s(x)?(f(),k("img",{key:1,src:s(x),alt:s(se),class:"mt-3 h-28 w-full rounded-lg border border-white bg-white object-contain"},null,8,_a)):z("",!0)])):z("",!0),n("div",null,[n("p",Ia,m(e.$t("mirrorDrawing.page.labels.activityMode")||"Activity Mode"),1),n("div",Ta,[(f(!0),k(me,null,ge(s(Je),o=>(f(),k("button",{key:o.value,type:"button",class:E(["rounded-xl border px-3 py-2.5 text-xs font-bold transition-all",s(G)===o.value?"border-teal-300 bg-teal-100 text-teal-950 shadow-sm":"border-slate-200 bg-white text-slate-600 hover:border-slate-300"]),"aria-pressed":s(G)===o.value,onClick:d=>G.value=o.value},m(o.label),11,Sa))),128))])]),n("label",Ma,[n("span",Pa,m(e.$t("mirrorDrawing.page.labels.worksheetTitle")||"Worksheet Title"),1),$(n("input",{"onUpdate:modelValue":t[7]||(t[7]=o=>F(L)?L.value=o:null),type:"text",maxlength:"42",class:"w-full rounded-xl border border-slate-200 bg-white px-3 py-2.5 text-sm font-semibold text-slate-800 focus:border-teal-600 focus:ring-teal-600"},null,512),[[pe,s(L)]])]),n("label",Ca,[n("span",Aa,m(e.$t("mirrorDrawing.page.labels.grid")||"Show drawing grid"),1),$(n("input",{"onUpdate:modelValue":t[8]||(t[8]=o=>F(J)?J.value=o:null),type:"checkbox",class:"rounded border-slate-300 text-teal-700 focus:ring-teal-700"},null,512),[[Re,s(J)]])])])),n("p",Wa,m(s(y)==="draw"?e.$t("mirrorDrawing.page.hints.draw")||"Start drawing on one side of the canvas. Your strokes mirror instantly across the selected symmetry lines.":e.$t("mirrorDrawing.page.hints.worksheet")||"Enter a prompt, generate an AI line drawing, then download or print the symmetry drawing worksheet."),1)]),n("main",Ra,[n("div",$a,[n("div",null,[n("h2",Na,m(s(y)==="draw"?e.$t("mirrorDrawing.page.cards.canvas")||"Mirror Drawing Canvas":e.$t("mirrorDrawing.page.cards.preview")||"Worksheet Preview"),1),n("p",Ga,m(s(y)==="draw"?s(Ar):`${s(se)} - ${s(Cr)}`),1)]),s(y)==="draw"?(f(),k("div",La,[n("button",{type:"button",class:"tool-action",disabled:!s(De),title:e.$t("mirrorDrawing.page.buttons.undo")||"Undo",onClick:Er},[P(s(_t),{class:"w-4 h-4","aria-hidden":"true"}),n("span",null,m(e.$t("mirrorDrawing.page.buttons.undo")||"Undo"),1)],8,Ea),n("button",{type:"button",class:"tool-action",disabled:!s(Ze),title:e.$t("mirrorDrawing.page.buttons.redo")||"Redo",onClick:Ur},[P(s(It),{class:"w-4 h-4","aria-hidden":"true"}),n("span",null,m(e.$t("mirrorDrawing.page.buttons.redo")||"Redo"),1)],8,Ua),n("button",{type:"button",class:"tool-action",disabled:!s(De),title:e.$t("mirrorDrawing.page.buttons.clear")||"Clear",onClick:Br},[P(s(Tt),{class:"w-4 h-4","aria-hidden":"true"}),n("span",null,m(e.$t("mirrorDrawing.page.buttons.clear")||"Clear"),1)],8,Ba),n("button",{type:"button",class:"tool-action-primary",onClick:Fr},[P(s(Dr),{class:"w-4 h-4","aria-hidden":"true"}),n("span",null,m(e.$t("mirrorDrawing.page.buttons.download")||"Download PNG"),1)]),n("button",{type:"button",class:"tool-action-primary",onClick:zr},[P(s(xr),{class:"w-4 h-4","aria-hidden":"true"}),n("span",null,m(e.$t("mirrorDrawing.page.buttons.print")||"Print"),1)]),s(fe)?(f(),$e(r,{key:0,disabled:!s(ze),loading:s(Be),label:s(Fe),"status-message":s(je),"status-type":s(qe),onInsert:s(Ve)},null,8,["disabled","loading","label","status-message","status-type","onInsert"])):z("",!0)])):(f(),k("div",qa,[n("button",{type:"button",class:"tool-action-primary",disabled:!s(x)||s(_),onClick:tt},[P(s(Dr),{class:"w-4 h-4","aria-hidden":"true"}),n("span",null,m(e.$t("mirrorDrawing.page.buttons.downloadWorksheet")||"Download Worksheet"),1)],8,
16ja),n("button",{type:"button",class:"tool-action-primary",disabled:!s(x)||s(_),onClick:at},[P(s(xr),{class:"w-4 h-4","aria-hidden":"true"}),n("span",null,m(e.$t("mirrorDrawing.page.buttons.printWorksheet")||"Print Worksheet"),1)],8,Fa),s(fe)?(f(),$e(r,{key:0,disabled:!s(ze),loading:s(Be),label:s(Fe),"status-message":s(je),"status-type":s(qe),onInsert:s(Ve)},null,8,["disabled","loading","label","status-message","status-type","onInsert"])):z("",!0)]))]),n("div",za,[n("div",{class:E(["mb-5 rounded-xl border px-4 py-3 text-sm font-semibold",s(Rr)]),role:"status","aria-live":"polite"},m(s(Wr)),3),$(n("div",Va,[n("div",Ha,[n("canvas",{ref_key:"drawingCanvasRef",ref:ke,width:Ne,height:Ne,class:"block w-full aspect-square rounded-2xl border border-slate-200 bg-white touch-none cursor-crosshair",role:"img","aria-label":e.$t("mirrorDrawing.page.cards.canvas")||"Mirror Drawing Canvas",onPointerdown:Gr,onPointermove:Lr,onPointerup:_e,onPointerleave:_e,onPointercancel:_e},null,40,Ya)])],512),[[kr,s(y)==="draw"]]),$(n("div",Oa,[n("div",Qa,[n("canvas",{ref_key:"worksheetCanvasRef",ref:Qe,width:_r,height:_r,class:"block w-full aspect-square rounded-2xl border border-slate-200 bg-white",role:"img","aria-label":e.$t("mirrorDrawing.page.cards.preview")||"Worksheet Preview"},null,8,Xa)])],512),[[kr,s(y)==="worksheet"]]),n("p",Ja,m(e.$t("mirrorDrawing.page.hints.touch")||"Works with mouse, touch, stylus, and trackpad."),1)])])])]),!s(fe)&&!s(Ue)?(f(),$e(a,{key:0})):z("",!0)])}}},uo=kt(to,[["__scopeId","data-v-bda623cd"]]);export{uo as default};

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.