import { inject as pe, ref as w, defineComponent as ge, getCurrentInstance as he, computed as z, onMounted as me, onBeforeUnmount as fe, watch as H, openBlock as Se, createElementBlock as Ce, normalizeStyle as ye } from "vue";
var $ = /* @__PURE__ */ ((n) => (n.RECT = "rect", n.ELLIPSE = "ellipse", n.POLYGON = "polygon", n))($ || {});
const G = {
  rect: {
    name: "矩形",
    type: "rect",
    radius: "0",
    style: ""
  },
  rect2: {
    name: "矩形2",
    type: "polygon",
    style: "polygon(0% 0%, 80% 0%, 100% 20%, 100% 100%, 0 100%)",
    createPath: (n, i) => `M 0 0 L ${n * 0.8} 0 L ${n} ${i * 0.2} L ${n} ${i} L 0 ${i} Z`
  },
  rect3: {
    name: "矩形3",
    type: "polygon",
    style: "polygon(0% 0%, 80% 0%, 100% 20%, 100% 100%, 20% 100%, 0% 80%)",
    createPath: (n, i) => `M 0 0 L ${n * 0.8} 0 L ${n} ${i * 0.2} L ${n} ${i} L ${n * 0.2} ${i} L 0 ${i * 0.8} Z`
  },
  roundRect: {
    name: "圆角矩形",
    type: "rect",
    radius: "10px",
    style: "inset(0 round 10px)"
  },
  ellipse: {
    name: "圆形",
    type: "ellipse",
    style: "ellipse(50% 50% at 50% 50%)"
  },
  triangle: {
    name: "三角形",
    type: "polygon",
    style: "polygon(50% 0%, 0% 100%, 100% 100%)",
    createPath: (n, i) => `M ${n * 0.5} 0 L 0 ${i} L ${n} ${i} Z`
  },
  triangle2: {
    name: "三角形2",
    type: "polygon",
    style: "polygon(50% 100%, 0% 0%, 100% 0%)",
    createPath: (n, i) => `M ${n * 0.5} ${i} L 0 0 L ${n} 0 Z`
  },
  triangle3: {
    name: "三角形3",
    type: "polygon",
    style: "polygon(0% 0%, 0% 100%, 100% 100%)",
    createPath: (n, i) => `M 0 0 L 0 ${i} L ${n} ${i} Z`
  },
  rhombus: {
    name: "菱形",
    type: "polygon",
    style: "polygon(50% 0%, 100% 50%, 50% 100%, 0% 50%)",
    createPath: (n, i) => `M ${n * 0.5} 0 L ${n} ${i * 0.5} L ${n * 0.5} ${i} L 0 ${i * 0.5} Z`
  },
  pentagon: {
    name: "五边形",
    type: "polygon",
    style: "polygon(50% 0%, 100% 38%, 82% 100%, 18% 100%, 0% 38%)",
    createPath: (n, i) => `M ${n * 0.5} 0 L ${n} ${0.38 * i} L ${0.82 * n} ${i} L ${0.18 * n} ${i} L 0 ${0.38 * i} Z`
  },
  hexagon: {
    name: "六边形",
    type: "polygon",
    style: "polygon(20% 0%, 80% 0%, 100% 50%, 80% 100%, 20% 100%, 0% 50%)",
    createPath: (n, i) => `M ${n * 0.2} 0 L ${n * 0.8} 0 L ${n} ${i * 0.5} L ${n * 0.8} ${i} L ${n * 0.2} ${i} L 0 ${i * 0.5} Z`
  },
  heptagon: {
    name: "七边形",
    type: "polygon",
    style: "polygon(50% 0%, 90% 20%, 100% 60%, 75% 100%, 25% 100%, 0% 60%, 10% 20%)",
    createPath: (n, i) => `M ${n * 0.5} 0 L ${n * 0.9} ${i * 0.2} L ${n} ${i * 0.6} L ${n * 0.75} ${i} L ${n * 0.25} ${i} L 0 ${i * 0.6} L ${n * 0.1} ${i * 0.2} Z`
  },
  octagon: {
    name: "八边形",
    type: "polygon",
    style: "polygon(30% 0%, 70% 0%, 100% 30%, 100% 70%, 70% 100%, 30% 100%, 0% 70%, 0% 30%)",
    createPath: (n, i) => `M ${n * 0.3} 0 L ${n * 0.7} 0 L ${n} ${i * 0.3} L ${n} ${i * 0.7} L ${n * 0.7} ${i} L ${n * 0.3} ${i} L 0 ${i * 0.7} L 0 ${i * 0.3} Z`
  },
  chevron: {
    name: "V形",
    type: "polygon",
    style: "polygon(75% 0%, 100% 50%, 75% 100%, 0% 100%, 25% 50%, 0% 0%)",
    createPath: (n, i) => `M ${n * 0.75} 0 L ${n} ${i * 0.5} L ${n * 0.75} ${i} L 0 ${i} L ${n * 0.25} ${i * 0.5} L 0 0 Z`
  },
  point: {
    name: "点",
    type: "polygon",
    style: "polygon(0% 0%, 75% 0%, 100% 50%, 75% 100%, 0% 100%)",
    createPath: (n, i) => `M 0 0 L ${n * 0.75} 0 L ${n} ${i * 0.5} L ${n * 0.75} ${i} L 0 ${i} Z`
  },
  arrow: {
    name: "箭头",
    type: "polygon",
    style: "polygon(0% 20%, 60% 20%, 60% 0%, 100% 50%, 60% 100%, 60% 80%, 0% 80%)",
    createPath: (n, i) => `M 0 ${i * 0.2} L ${n * 0.6} ${i * 0.2} L ${n * 0.6} 0 L ${n} ${i * 0.5} L ${n * 0.6} ${i} L ${n * 0.6} ${i * 0.8} L 0 ${i * 0.8} Z`
  },
  parallelogram: {
    name: "平行四边形",
    type: "polygon",
    style: "polygon(30% 0%, 100% 0%, 70% 100%, 0% 100%)",
    createPath: (n, i) => `M ${n * 0.3} 0 L ${n} 0 L ${n * 0.7} ${i} L 0 ${i} Z`
  },
  parallelogram2: {
    name: "平行四边形2",
    type: "polygon",
    style: "polygon(30% 100%, 100% 100%, 70% 0%, 0% 0%)",
    createPath: (n, i) => `M ${n * 0.3} ${i} L ${n} ${i} L ${n * 0.7} 0 L 0 0 Z`
  },
  trapezoid: {
    name: "梯形",
    type: "polygon",
    style: "polygon(25% 0%, 75% 0%, 100% 100%, 0% 100%)",
    createPath: (n, i) => `M ${n * 0.25} 0 L ${n * 0.75} 0 L ${n} ${i} L 0 ${i} Z`
  },
  trapezoid2: {
    name: "梯形2",
    type: "polygon",
    style: "polygon(0% 0%, 100% 0%, 75% 100%, 25% 100%)",
    createPath: (n, i) => `M 0 0 L ${n} 0 L ${n * 0.75} ${i} L ${n * 0.25} ${i} Z`
  }
}, be = {
  common: {
    close: "关闭",
    cancel: "取消",
    confirm: "确认",
    save: "保存",
    delete: "删除",
    remove: "移除",
    edit: "编辑",
    copy: "复制",
    cut: "剪切",
    paste: "粘贴",
    selectAll: "全选",
    loading: "加载中...",
    exporting: "正在导出...",
    importing: "正在导入...",
    saving: "正在保存...",
    success: "成功",
    error: "错误",
    warning: "警告",
    info: "提示",
    untitledPresentation: "未命名演示文稿"
  },
  header: {
    back: "返回",
    aippt: "AIPPT",
    aipptSubtitle: "输入一句话，智能生成演示文稿",
    importFile: "导入文件",
    pptxTest: "（仅供测试）",
    pptistFormat: "（专属格式）",
    exportFile: "导出文件",
    resetSlides: "重置幻灯片",
    slideMarkup: "幻灯片类型标注",
    shortcuts: "快捷操作",
    feedback: "意见反馈",
    faq: "常见问题",
    disclaimer: "注：本站仅作测试/演示，不提供任何形式的服务",
    slideshow: "幻灯片放映",
    slideshowF5: "幻灯片放映（F5）",
    aiGenerate: "AI生成PPT",
    export: "导出",
    save: "保存",
    fromStart: "从头开始",
    fromCurrent: "从当前页开始"
  },
  canvasTool: {
    undo: "撤销",
    undoShortcut: "撤销（Ctrl + Z）",
    redo: "重做",
    redoShortcut: "重做（Ctrl + Y）",
    remarkPanel: "批注面板",
    selectPanel: "选择窗格",
    searchReplace: "查找/替换（Ctrl + F）",
    insertText: "插入文字",
    textbox: "文本框",
    horizontalText: "横向文本框",
    verticalText: "竖向文本框",
    insertShape: "插入形状",
    shape: "形状",
    presetShape: "预设形状",
    freeDraw: "自由绘制",
    insertImage: "插入图片",
    image: "图片",
    uploadImage: "上传图片",
    onlineLibrary: "在线图库",
    insertLine: "插入线条",
    line: "线条",
    insertChart: "插入图表",
    chart: "图表",
    insertTable: "插入表格",
    table: "表格",
    insertFormula: "插入公式",
    formula: "公式",
    insertMedia: "插入音视频",
    media: "音视频",
    insertVideo: "插入视频",
    video: "视频",
    insertSymbol: "插入符号",
    symbol: "符号",
    zoomOut: "画布缩小",
    zoomOutShortcut: "画布缩小（Ctrl + -）",
    zoomIn: "画布放大",
    zoomInShortcut: "画布放大（Ctrl + =）",
    fitScreen: "适应屏幕",
    fitScreenShortcut: "适应屏幕（Ctrl + 0）"
  },
  exportDialog: {
    exportPptist: "导出 PPTIST 文件",
    exportPptx: "导出 PPTX",
    exportImage: "导出图片",
    exportJson: "导出 JSON",
    exportPdf: "打印 / 导出 PDF",
    exportPdf2: "导出 PDF",
    exportFormat: "导出格式：",
    exportRange: "导出范围：",
    all: "全部",
    currentPage: "当前页",
    custom: "自定义",
    customRange: "自定义范围：",
    imageQuality: "图片质量：",
    pdfQuality: "PDF质量：",
    ignoreOnlineFont: "忽略在线字体：",
    ignoreOnlineFontTip: "导出时默认忽略在线字体，若您在幻灯片中使用了在线字体，且希望导出后保留相关样式，可选择关闭「忽略在线字体」选项，但要注意这将会增加导出用时。",
    exportImageBtn: "导出图片",
    perPageCount: "每页数量：",
    marginBlank: "边缘留白：",
    printTip: "建议：请在弹出的打印窗口中勾选「背景图形」选项，边距选择「默认」。",
    printExportPdf: "打印 / 导出 PDF",
    downloadPdf: "导出 PDF",
    downloadPptist: "导出 PPTIST 文件",
    downloadPptx: "导出 PPTX",
    downloadJson: "导出 JSON",
    copyJson: "复制 JSON",
    exportMode: "导出模式：",
    standardMode: "标准版",
    imageMode: "纯图版",
    ignoreMedia: "忽略音频/视频：",
    ignoreMediaTip: "导出时默认忽略音视频，若您的幻灯片中存在音视频元素，且希望将其导出到PPTX文件中，可选择关闭「忽略音视频」选项，但要注意这将会大幅增加导出用时。",
    overwriteMaster: "覆盖默认母版：",
    mediaTip: "提示：1. 支持导出格式：avi、mp4、mov、wmv、mp3、wav；2. 跨域资源无法导出。",
    pptistTip: "提示：.pptist 是本应用的特有文件后缀，支持将该类型的文件导入回应用中。"
  },
  aiDialog: {
    step1Prefix: "从下方挑选合适的模板生成PPT，或",
    step1Link: "使用本地模板生成",
    step1Tooltip: "上传.pptist格式模板文件",
    step2: "确认下方内容大纲（点击编辑内容，右键添加/删除大纲项），开始选择模板",
    step3: "在下方输入您的PPT主题，并适当补充信息，如行业、岗位、学科、用途等",
    inputPlaceholder: "请输入PPT主题，如：大学生职业生涯规划",
    language: "语言：",
    chinese: "中文",
    english: "英文",
    japanese: "日文",
    style: "风格：",
    general: "通用",
    academic: "学术风",
    professional: "职场风",
    educational: "教育风",
    marketing: "营销风",
    model: "模型：",
    illustration: "配图：",
    none: "无",
    mockTest: "模拟测试",
    aiSearch: "AI搜图",
    aiGenerate: "AI生图",
    overwriteSlides: "覆盖已有幻灯片",
    aiGenerateBtn: "AI 生成",
    selectTemplate: "选择模板",
    regenerate: "返回重新生成",
    generate: "生成",
    backToOutline: "返回大纲",
    generating: "AI生成中，请耐心等待 ...",
    creatingSlides: "演示文稿生成中，请稍等 ...",
    apiOverload: "该模型API的并发数过高，请更换其他模型重试",
    templateError: "上传的模板文件数据异常，请重新上传或使用预置模板",
    inputThemeFirst: "请先输入PPT主题",
    recommendTopics: {
      tech2025: "2025科技前沿动态",
      bigData: "大数据如何改变世界",
      catering: "餐饮市场调查与研究",
      aigcEducation: "AIGC在教育领域的应用",
      socialMedia: "社交媒体与品牌营销",
      fiveG: "5G技术如何改变我们的生活",
      workSummary: "年度工作总结与展望",
      blockchain: "区块链技术及其应用",
      careerPlan: "大学生职业生涯规划",
      annualMeeting: "公司年会策划方案"
    }
  },
  thumbnails: {
    addSlide: "添加幻灯片",
    inputSectionName: "输入节名称",
    untitledSection: "无标题节",
    defaultSection: "默认节",
    slideOf: "幻灯页",
    total: "总数",
    deleteSection: "删除节",
    deleteSectionAndSlides: "删除节和幻灯片",
    deleteAllSections: "删除所有节",
    renameSection: "重命名节",
    newPage: "新建页面",
    copyPage: "复制页面",
    deletePage: "删除页面",
    addSection: "增加节",
    playCurrent: "从当前放映"
  },
  search: {
    find: "查找",
    replace: "替换",
    inputFindContent: "输入查找内容",
    inputReplaceContent: "输入替换内容",
    ignoreCase: "忽略大小写",
    previous: "上一个",
    next: "下一个",
    replaceBtn: "替换",
    replaceAll: "全部替换"
  },
  screen: {
    penTool: "画笔工具",
    laserPointer: "激光笔",
    timer: "计时器",
    presenterView: "演讲者视图",
    exitFullscreen: "退出全屏",
    enterFullscreen: "进入全屏",
    endShow: "结束放映",
    slideOf: "幻灯片",
    previousPage: "上一页",
    nextPage: "下一页",
    firstPage: "第一页",
    lastPage: "最后一页",
    cancelAutoPlay: "取消自动放映",
    autoPlay: "自动放映",
    loopPlay: "循环放映",
    showToolbar: "显示工具栏",
    viewAllSlides: "查看所有幻灯片",
    bottomThumbnails: "触底显示缩略图",
    seconds: "秒",
    normalView: "普通视图",
    fullscreen: "全屏",
    speakerNotes: "演讲者备注",
    noNotes: "无备注",
    pen: "画笔",
    inkThickness: "墨迹粗细：",
    shape: "形状",
    highlighter: "荧光笔",
    eraser: "橡皮擦",
    eraserSize: "橡皮大小：",
    clearInk: "清除墨迹",
    blackboard: "黑板",
    closePen: "关闭画笔",
    pause: "暂停",
    start: "开始",
    reset: "重置",
    countdown: "倒计时"
  },
  mobile: {
    undo: "撤销",
    redo: "重做",
    exitEdit: "退出编辑",
    speakerNotes: "点击输入演讲者备注",
    newSlide: "新幻灯片",
    copy: "复制",
    delete: "删除",
    text: "文字",
    image: "图片",
    rectangle: "矩形",
    circle: "圆形",
    newText: "新添加文本",
    style: "样式",
    layout: "布局",
    fontColor: "文字颜色：",
    fillColor: "填充色：",
    noAvailableProps: "暂无可用属性",
    toTop: "置顶",
    toBottom: "置底",
    moveUp: "上移",
    moveDown: "下移",
    alignLeft: "左对齐",
    alignHorizontalCenter: "水平居中",
    alignRight: "右对齐",
    alignTop: "上对齐",
    alignVerticalCenter: "垂直居中",
    alignBottom: "下对齐"
  },
  toolbar: {
    slideDesign: "页面设计",
    animation: "动画",
    position: "位置",
    style: "样式",
    background: "背景",
    fillColor: "填充颜色",
    noFill: "无填充",
    presetBackground: "预设背景",
    customColor: "自定义颜色",
    gradient: "渐变",
    image: "图片",
    applyToAll: "应用到全部",
    slideSize: "页面尺寸",
    widescreen16_9: "宽屏 16 : 9",
    widescreen16_10: "宽屏 16 : 10",
    standard4_3: "标准 4 : 3",
    customSize: "自定义尺寸",
    width: "宽度",
    height: "高度",
    apply: "应用",
    ruler: "标尺",
    showRuler: "显示标尺",
    remark: "批注",
    remarkPlaceholder: "输入批注（为选中元素/当前页幻灯片）",
    replyPlaceholder: "输入回复内容",
    confirm: "确认",
    fontFamily: "字体",
    fontSize: "字号",
    bold: "加粗",
    italic: "斜体",
    underline: "下划线",
    strikethrough: "删除线",
    fontColor: "字体颜色",
    highlight: "文字高亮",
    alignLeft: "左对齐",
    alignCenter: "居中",
    alignRight: "右对齐",
    alignJustify: "两端对齐",
    bulletList: "项目符号",
    numberedList: "编号列表",
    increaseIndent: "增加缩进",
    decreaseIndent: "减少缩进",
    lineSpacing: "行间距",
    paragraphSpacing: "段间距",
    clearFormat: "清除格式",
    format: "格式",
    colorMask: "色彩蒙版",
    filter: "滤镜",
    flip: "翻转",
    horizontalFlip: "水平翻转",
    verticalFlip: "垂直翻转",
    opacity: "透明度",
    outline: "边框",
    shadow: "阴影",
    shadowColor: "阴影颜色",
    blur: "模糊",
    offsetX: "X偏移",
    offsetY: "Y偏移",
    imageCrop: "裁剪图片",
    replaceImage: "替换图片",
    resetImage: "重置图片",
    setAsBackground: "设为背景图",
    link: "超链接",
    linkUrl: "链接地址",
    linkPlaceholder: "请输入超链接",
    lineStyle: "线条样式",
    lineColor: "线条颜色",
    lineWidth: "线条粗细",
    startArrow: "起点箭头",
    endArrow: "终点箭头",
    chartType: "图表类型",
    barChart: "柱状图",
    horizontalBarChart: "条形图",
    lineChart: "折线图",
    areaChart: "面积图",
    scatterChart: "散点图",
    pieChart: "饼图",
    doughnutChart: "环形图",
    radarChart: "雷达图",
    chartData: "图表数据",
    themeColors: "主题色",
    gridLines: "网格线",
    legend: "图例",
    legendPosition: "图例位置",
    top: "上",
    bottom: "下",
    left: "左",
    right: "右",
    tableStyle: "表格样式",
    headerRow: "标题行",
    totalRow: "汇总行",
    firstColumn: "首列",
    lastColumn: "末列",
    bandedRows: "镶边行",
    bandedColumns: "镶边列",
    addRow: "添加行",
    addColumn: "添加列",
    deleteRow: "删除行",
    deleteColumn: "删除列",
    mergeCells: "合并单元格",
    splitCells: "拆分单元格",
    videoCover: "视频封面",
    autoPlay: "自动播放",
    loop: "循环播放",
    mute: "静音",
    latexPlaceholder: "输入LaTeX公式",
    positionX: "X 位置",
    positionY: "Y 位置",
    elementWidth: "宽度",
    elementHeight: "高度",
    rotation: "旋转",
    lock: "锁定",
    unlock: "解锁",
    lockRatio: "锁定比例",
    order: "层级",
    bringToFront: "置于顶层",
    sendToBack: "置于底层",
    bringForward: "上移一层",
    sendBackward: "下移一层",
    align: "对齐",
    alignTop: "顶端对齐",
    alignMiddle: "垂直居中",
    alignBottom: "底端对齐",
    distributeHorizontally: "横向分布",
    distributeVertically: "纵向分布",
    group: "组合",
    ungroup: "取消组合",
    combine: "合并形状",
    enterAnimation: "入场动画",
    exitAnimation: "退场动画",
    emphasisAnimation: "强调动画",
    animationDuration: "动画时长",
    animationDelay: "动画延迟",
    animationTrigger: "触发方式",
    onClick: "单击时",
    withPrevious: "与上一动画同时",
    afterPrevious: "上一动画之后",
    addAnimation: "添加动画",
    removeAnimation: "删除动画",
    playAnimation: "播放动画",
    slideAnimation: "切页动画",
    noAnimation: "无",
    random: "随机",
    multiSelect: "（多选）",
    design: "设计",
    transition: "切换",
    backgroundFill: "背景填充",
    solidFill: "纯色填充",
    imageFill: "图片填充",
    gradientFill: "渐变填充",
    scale: "缩放",
    tile: "拼贴",
    scaleFill: "缩放铺满",
    linearGradient: "线性渐变",
    radialGradient: "径向渐变",
    currentColorBlock: "当前色块：",
    gradientAngle: "渐变角度：",
    applyBackgroundToAll: "应用背景到全部",
    paperA3A4: "纸张 A3 / A4",
    verticalA3A4: "竖向 A3 / A4",
    canvasSize: "画布尺寸：",
    globalTheme: "全局主题",
    more: "更多",
    font: "字体：",
    searchFont: "搜索字体",
    fontColorLabel: "字体颜色：",
    backgroundColorLabel: "背景颜色：",
    themeColorLabel: "主题色：",
    enableOutline: "启用边框",
    outlineStyle: "边框样式：",
    outlineColor: "边框颜色：",
    outlineWidth: "边框粗细：",
    horizontalShadow: "水平阴影：",
    verticalShadow: "垂直阴影：",
    blurDistance: "模糊距离：",
    shadowColorLabel: "阴影颜色：",
    applyThemeToAll: "应用主题到全部",
    unifyFont: "全局统一字体",
    extractTheme: "从幻灯片提取主题",
    presetTheme: "预置主题",
    textAa: "文字 Aa",
    set: "设置",
    setAndApply: "设置并应用",
    appliedToAll: "已应用到全部",
    layerOrder: "层级：",
    toTop: "置顶",
    toBottom: "置底",
    moveUp: "上移",
    moveDown: "下移",
    alignLabel: "对齐：",
    horizontal: "水平：",
    vertical: "垂直：",
    widthLabel: "宽度：",
    heightLabel: "高度：",
    unlockRatio: "解除宽高比锁定",
    lockRatioLabel: "宽高比锁定",
    rotationLabel: "旋转：",
    selectElementAddAnimation: "选中画布中的元素添加动画",
    enter: "入场",
    exit: "退场",
    emphasis: "强调",
    durationLabel: "持续时长：",
    triggerLabel: "触发方式：",
    manualTrigger: "主动触发",
    withPreviousAnimation: "与上一动画同时",
    afterPreviousAnimation: "上一动画之后",
    changeAnimation: "更换动画",
    preview: "预览",
    delete: "删除",
    stopPreview: "停止预览",
    previewAll: "预览全部",
    enableShadow: "启用阴影",
    fillColorLabel: "填充颜色：",
    colorMaskLabel: "着色（蒙版）",
    maskColor: "蒙版颜色",
    outlineStyleLabel: "边框样式：",
    outlineColorLabel: "边框颜色：",
    outlineWidthLabel: "边框粗细：",
    textColor: "文字颜色",
    textHighlight: "文字高亮",
    increaseFontSize: "增大字号",
    decreaseFontSize: "减小字号",
    searchFontSize: "搜索字号",
    horizontallyCenter: "水平居中",
    verticallyCenter: "垂直居中",
    horizontalDistribute: "水平均匀分布",
    verticalDistribute: "垂直均匀分布",
    // TextStylePanel
    bigTitle: "大标题",
    smallTitle: "小标题",
    bodyText: "正文",
    bodyTextSmall: "正文[小]",
    annotation1: "注释 1",
    annotation2: "注释 2",
    lineHeightLabel: "行间距：",
    paragraphSpaceLabel: "段间距：",
    wordSpaceLabel: "字间距：",
    textboxFill: "文本框填充：",
    times: "倍",
    // ImageStylePanel
    cropImage: "裁剪图片",
    byShape: "按形状：",
    aspectRatioSquare: "纵横比（正方形）",
    aspectRatioPortrait: "纵横比（纵向）",
    aspectRatioLandscape: "纵横比（横向）",
    borderRadius: "圆角半径：",
    replaceImageBtn: "替换图片",
    resetStyleBtn: "重置样式",
    setAsBackgroundBtn: "设为背景",
    // ShapeStylePanel
    clickToReplaceShape: "点击替换形状",
    solidFillOption: "纯色填充",
    gradientFillOption: "渐变填充",
    imageFillOption: "图片填充",
    linearGradientOption: "线性渐变",
    radialGradientOption: "径向渐变",
    alignTopText: "顶对齐",
    alignCenterText: "居中",
    alignBottomText: "底对齐",
    doubleclickContinuousUse: "双击连续使用",
    shapeFormatPainter: "形状格式刷",
    // LineStylePanel
    lineStyleLabel: "线条样式：",
    lineColorLabel: "线条颜色：",
    lineWidthLabel: "线条宽度：",
    startPointStyle: "起点样式：",
    endPointStyle: "终点样式：",
    swapDirection: "交换方向",
    // TableStylePanel
    searchFontLabel: "搜索字体",
    searchFontSizeLabel: "搜索字号",
    textColorTooltip: "文字颜色",
    cellFill: "单元格填充",
    boldTooltip: "加粗",
    italicTooltip: "斜体",
    underlineTooltip: "下划线",
    strikethroughTooltip: "删除线",
    alignLeftTooltip: "左对齐",
    alignCenterTooltip: "居中",
    alignRightTooltip: "右对齐",
    alignJustifyTooltip: "两端对齐",
    rowCount: "行数：",
    colCount: "列数：",
    enableThemeTable: "启用主题表格：",
    headerRowLabel: "标题行",
    totalRowLabel: "汇总行",
    firstColumnLabel: "第一列",
    lastColumnLabel: "最后一列",
    themeColorLabelTable: "主题颜色：",
    // ChartStylePanel
    editChart: "编辑图表",
    stackedStyle: "堆叠样式",
    useSmoothCurve: "使用平滑曲线",
    backgroundFillLabel: "背景填充：",
    axisAndText: "坐标与文字：",
    gridColorLabel: "网格颜色：",
    themeColorScheme: "主题配色：",
    presetChartThemes: "预置图表主题：",
    slideTheme: "幻灯片主题：",
    customColorScheme: "自定义配色",
    // VideoStylePanel
    videoPosterCover: "视频预览封面",
    setFirstFrameAsCover: "设置首帧为封面",
    resetCover: "重置封面",
    autoPlayLabel: "自动播放：",
    // AudioStylePanel
    iconColorLabel: "图标颜色：",
    loopPlayLabel: "循环播放：",
    // LatexStylePanel
    editLatex: "编辑 LaTeX",
    colorLabel: "颜色：",
    strokeWidthLabel: "粗细：",
    // ElementFilter
    enableFilter: "启用滤镜",
    filterBlur: "模糊",
    filterBrightness: "亮度",
    filterContrast: "对比度",
    filterGrayscale: "灰度",
    filterSaturate: "饱和度",
    filterHueRotate: "色相旋转",
    filterSepia: "深褐色",
    filterInvert: "反色",
    filterOpacity: "透明度",
    presetBlackWhite: "黑白",
    presetVintage: "复古",
    presetSharpen: "锐化",
    presetSoft: "柔和",
    presetWarm: "暖色",
    presetBright: "明亮",
    presetVivid: "鲜艳",
    presetBlur: "模糊",
    presetInvert: "反色",
    // RichTextBase
    superscript: "上标",
    subscript: "下标",
    inlineCode: "行内代码",
    quote: "引用",
    aiBeautify: "美化改写",
    aiExpand: "扩写丰富",
    aiCondense: "精简提炼",
    aiAssist: "AI 辅助",
    formatPainterDoubleClick: "格式刷（双击连续使用）",
    invalidLinkUrl: "请输入正确的链接地址",
    decreaseFirstLineIndent: "减少首行缩进",
    increaseFirstLineIndent: "增加首行缩进",
    noTextContent: "没有可处理的文本内容",
    aiModelOverload: "该模型API的并发数过高，请更换其他模型重试",
    // ThemeColorsSetting
    editThemeColors: "编辑主题色",
    slideThemeColor: "幻灯片主题色",
    // ThemeStylesExtract
    extractFromCurrent: "从当前页中提取",
    extractFromAll: "从全部幻灯片提取",
    fontLabel: "字体：",
    fontColorExtract: "文字颜色：",
    backgroundColorExtract: "背景颜色：",
    themeColorExtract: "主题色：",
    clickToExcludeColor: "（点击色块排除不要的颜色）",
    selectStyle: "选择",
    applyToTheme: "应用到主题",
    saveAsTheme: "将选中配置保存为主题",
    themeColorLimit: "主题色超出数量限制，已自动选取前6个",
    // ChartDataEditor
    chartTypeLabel: "图表类型：",
    clickToChange: "点击更换",
    clearData: "清空数据",
    category: "类别",
    series: "系列",
    // ChartStylePanel/ThemeColorsSetting
    chartThemeColors: "图表主题配色",
    themeColorN: "主题配色",
    addThemeColor: "添加主题色"
  },
  element: {
    text: "文本",
    image: "图片",
    shape: "形状",
    line: "线条",
    chart: "图表",
    table: "表格",
    video: "视频",
    audio: "音频",
    latex: "公式"
  },
  contextmenu: {
    cut: "剪切",
    copy: "复制",
    paste: "粘贴",
    selectAll: "全选",
    delete: "删除",
    lock: "锁定",
    unlock: "解锁",
    copyStyle: "复制样式",
    pasteStyle: "粘贴样式",
    resetStyle: "重置样式",
    bringToFront: "置于顶层",
    sendToBack: "置于底层",
    bringForward: "上移一层",
    sendBackward: "下移一层",
    group: "组合",
    ungroup: "取消组合",
    combine: "合并形状",
    union: "联合",
    intersect: "相交",
    subtract: "减去",
    exclude: "排除",
    setAsBackground: "设为背景",
    createLink: "创建超链接",
    editLink: "编辑超链接",
    removeLink: "移除超链接"
  },
  app: {
    initLoading: "数据初始化中，请稍等 ..."
  },
  notesPanel: {
    title: "幻灯片{index}的批注",
    reply: "回复",
    delete: "删除",
    inputReplyContent: "输入回复内容",
    cancel: "取消",
    noNotes: "本页暂无批注",
    inputNotePlaceholder: "输入批注（为{target}）",
    selectedElement: "选中元素",
    currentSlide: "当前页幻灯片",
    clearNotes: "清空本页批注",
    addNote: "添加批注",
    testUser: "测试用户"
  },
  imageLib: {
    title: "图片库（来自 pexels.com）",
    searchPlaceholder: "搜索图片",
    searching: "搜索中...",
    noResults: "没有找到相关图片",
    insert: "插入",
    all: "全部",
    landscape: "横向",
    portrait: "纵向",
    square: "方形",
    inputKeyword: "请输入搜索关键词",
    defaultSearch: "风景"
  },
  linkDialog: {
    title: "插入超链接",
    linkText: "链接文字",
    linkUrl: "链接地址",
    slideLink: "幻灯片链接",
    webLink: "网页链接",
    selectSlide: "选择幻灯片",
    slide: "幻灯片 {n}",
    webLinkPlaceholder: "请输入网页链接地址",
    preview: "预览："
  },
  mediaInput: {
    videoPlaceholder: "请输入视频地址，e.g. https://xxx.mp4",
    audioPlaceholder: "请输入音频地址，e.g. https://xxx.mp3",
    video: "视频",
    audio: "音频",
    uploadLocalVideo: "上传本地视频",
    uploadLocalAudio: "上传本地音频",
    enterVideoUrl: "请先输入正确的视频地址",
    enterAudioUrl: "请先输入正确的音频地址"
  },
  hotkeyDoc: {
    title: "快捷键说明",
    general: "通用",
    editing: "编辑",
    slideshow: "放映",
    description: "说明",
    shortcut: "快捷键",
    // Group type names
    typeGeneral: "通用",
    typeSlideshow: "幻灯片放映",
    typeSlideEditing: "幻灯片编辑",
    typeElementOps: "元素操作",
    typeTextEditing: "文本编辑",
    // General labels
    cut: "剪切",
    copy: "复制",
    paste: "粘贴",
    pasteAsPlainText: "粘贴为纯文本",
    quickCopyPaste: "快速复制粘贴",
    selectAll: "全选",
    undo: "撤销",
    restore: "恢复",
    delete: "删除",
    multiSelect: "多选",
    closeDialog: "关闭弹窗",
    // Slideshow labels
    startFromBeginning: "从头开始放映幻灯片",
    startFromCurrent: "从当前开始放映幻灯片",
    prevPage: "切换上一页",
    nextPage: "切换下一页",
    exitSlideshow: "退出放映",
    // Slide editing labels
    newSlide: "新建幻灯片",
    moveCanvas: "移动画布",
    zoomCanvas: "缩放画布",
    zoomIn: "放大画布",
    zoomOut: "缩小画布",
    fitScreen: "使画布适应当前屏幕",
    prevPageNoElement: "上一页（未选中元素）",
    nextPageNoElement: "下一页（未选中元素）",
    prevPageScroll: "上一页",
    nextPageScroll: "下一页",
    quickCreateText: "快速创建文本",
    quickCreateRect: "快速创建矩形",
    quickCreateCircle: "快速创建圆形",
    quickCreateLine: "快速创建线条",
    exitDraw: "退出绘制状态",
    // Element ops labels
    move: "移动",
    lock: "锁定",
    group: "组合",
    ungroup: "取消组合",
    bringToFront: "置顶层",
    sendToBack: "置底层",
    lockRatio: "锁定宽高比例",
    createStraightLine: "创建水平 / 垂直线条",
    switchFocusElement: "切换焦点元素",
    confirmCrop: "确认图片裁剪",
    // Text editing labels
    bold: "加粗",
    italic: "斜体",
    underline: "下划线",
    inlineCode: "行内代码",
    superscript: "上角标",
    subscript: "下角标",
    selectParagraph: "选中段落",
    // Value strings with Chinese
    holdCtrlOrShift: "按住 Ctrl 或 Shift",
    spacePlusDrag: "Space + 鼠标拖拽",
    ctrlPlusMouseWheel: "Ctrl + 鼠标滚轮",
    doubleClickBlankOrT: "双击空白处 / T",
    rightMouseClick: "鼠标右键",
    mouseScrollUpOrPgUp: "鼠标上滚 / PgUp",
    mouseScrollDownOrPgDown: "鼠标下滚 / PgDown"
  },
  symbolPanel: {
    title: "插入符号",
    emoji: "表情",
    arrows: "箭头",
    math: "数学",
    special: "特殊符号",
    emojiCategories: {
      faces: "表情",
      gestures: "动作",
      animals: "动植物",
      food: "食物",
      travel: "旅行",
      activities: "活动",
      objects: "物品",
      symbols: "符号"
    }
  },
  selectPanel: {
    title: "选择窗格",
    titleWithCount: "选择（{active}/{total}）",
    showAll: "全部显示",
    hideAll: "全部隐藏",
    group: "组合",
    noContent: "本页无内容"
  },
  markupPanel: {
    title: "幻灯片类型标注",
    currentPageType: "当前页面类型：",
    currentTextType: "当前文本类型：",
    currentImageType: "当前图片类型：",
    selectElementHint: "选中图片、文字、带文字的形状，标记类型",
    unmarkedType: "未标记类型",
    coverPage: "封面页",
    contentsPage: "目录页",
    transitionPage: "过渡页",
    contentPage: "内容页",
    endPage: "结束页",
    titleText: "标题",
    subtitleText: "副标题",
    contentText: "正文",
    itemText: "列表项目",
    itemTitleText: "列表项标题",
    notesText: "注释",
    headerText: "页眉",
    footerText: "页脚",
    partNumberText: "节编号",
    itemNumberText: "项目编号",
    pageFigure: "页面插图",
    itemFigure: "项目插图",
    backgroundImage: "背景图"
  },
  remarkEditor: {
    placeholder: "点击输入演讲者备注"
  },
  templatePanel: {
    title: "模板",
    blank: "空白幻灯片",
    preset: "预设模板",
    all: "全部",
    cover: "封面",
    contents: "目录",
    transition: "过渡",
    content: "内容",
    end: "结束",
    insertAll: "插入全部",
    insertTemplate: "插入模板"
  },
  language: {
    toggle: "切换语言",
    zhCN: "中文",
    en: "English"
  },
  canvas: {
    ruler: "标尺",
    gridLine: "网格线",
    gridNone: "无",
    gridSmall: "小",
    gridMedium: "中",
    gridLarge: "大",
    resetCurrentPage: "重置当前页",
    slideshow: "幻灯片放映"
  },
  editableElement: {
    horizontalCenter: "水平居中",
    horizontalVerticalCenter: "水平垂直居中",
    alignLeft: "左对齐",
    alignRight: "右对齐",
    verticalCenter: "垂直居中",
    alignTop: "顶部对齐",
    alignBottom: "底部对齐",
    bringToFront: "置于顶层",
    moveUp: "上移一层",
    sendToBack: "置于底层",
    moveDown: "下移一层",
    setLink: "设置链接",
    cancelGroup: "取消组合",
    group: "组合",
    slidePage: "幻灯片页面",
    changeLink: "更换",
    removeLink: "移除"
  },
  shapeCreateCanvas: {
    drawShapeHint: "点击绘制任意形状，首尾闭合完成绘制，按 ESC 键或鼠标右键取消，按 ENTER 键提前完成"
  },
  tableGenerator: {
    table: "表格",
    back: "返回",
    custom: "自定义",
    rows: "行数：",
    cols: "列数：",
    rowColRange: "行数/列数必须在0~20之间！"
  },
  elementComponent: {
    doubleClickEdit: "双击编辑",
    videoLoadError: "视频加载失败",
    audioLoadError: "音频加载失败",
    playbackSpeed: "倍速",
    loopOn: "循环开",
    loopOff: "循环关",
    fontLoadingHint: "字体需要等待加载下载后生效，请稍等",
    insertCol: "插入列",
    insertRow: "插入行",
    toLeft: "到左侧",
    toRight: "到右侧",
    toAbove: "到上方",
    toBelow: "到下方",
    deleteCol: "删除列",
    deleteRow: "删除行",
    mergeCells: "合并单元格",
    cancelMergeCells: "取消合并单元格",
    selectCurrentCol: "选中当前列",
    selectCurrentRow: "选中当前行",
    selectAllCells: "选中全部单元格"
  },
  colorPicker: {
    recentColors: "最近使用：",
    pressEscToClose: "按 ESC 键关闭取色吸管",
    eyeDropperInitFailed: "取色吸管初始化失败"
  },
  latexEditor: {
    inputPlaceholder: "输入 LaTeX 公式",
    formulaPreview: "公式预览",
    commonSymbols: "常用符号",
    presetFormulas: "预置公式",
    formulaRequired: "公式不能为空"
  },
  outlineEditor: {
    topic: "主题",
    chapter: "章",
    section: "节",
    newChapter: "新的一章",
    newSection: "新的一节",
    newItem: "新的一项",
    addChildChapter: "添加子级大纲（章）",
    addSiblingChapterAbove: "上方添加同级大纲（章）",
    addChildSection: "添加子级大纲（节）",
    deleteChapter: "删除此章",
    addSiblingSectionAbove: "上方添加同级大纲（节）",
    addChildItem: "添加子级大纲（项）",
    deleteSection: "删除此节",
    addSiblingItemAbove: "上方添加同级大纲（项）",
    addSiblingItemBelow: "下方添加同级大纲（项）",
    deleteItem: "删除此项"
  },
  select: {
    search: "搜索"
  },
  configs: {
    animation: {
      // Type category names
      typeBounce: "弹跳",
      typeFade: "浮现",
      typeRotate: "旋转",
      typeZoom: "缩放",
      typeSlideIn: "滑入",
      typeFlip: "翻转",
      typeBackIn: "放大滑入",
      typeLightSpeed: "飞入",
      typeShake: "晃动",
      typeOther: "其他",
      typeSlideOut: "滑出",
      typeBackOut: "缩小滑出",
      typeLightSpeedOut: "飞出",
      // Enter animation names
      bounceIn: "弹入",
      bounceInLeft: "向右弹入",
      bounceInRight: "向左弹入",
      bounceInUp: "向上弹入",
      bounceInDown: "向下弹入",
      fadeIn: "浮入",
      fadeInDown: "向下浮入",
      fadeInDownBig: "向下长距浮入",
      fadeInLeft: "向右浮入",
      fadeInLeftBig: "向右长距浮入",
      fadeInRight: "向左浮入",
      fadeInRightBig: "向左长距浮入",
      fadeInUp: "向上浮入",
      fadeInUpBig: "向上长距浮入",
      fadeInTopLeft: "从左上浮入",
      fadeInTopRight: "从右上浮入",
      fadeInBottomLeft: "从左下浮入",
      fadeInBottomRight: "从右下浮入",
      rotateIn: "旋转进入",
      rotateInDownLeft: "绕左下进入",
      rotateInDownRight: "绕右下进入",
      rotateInUpLeft: "绕左上进入",
      rotateInUpRight: "绕右上进入",
      zoomIn: "放大进入",
      zoomInDown: "向下放大进入",
      zoomInLeft: "从左放大进入",
      zoomInRight: "从右放大进入",
      zoomInUp: "向上放大进入",
      slideInDown: "向下滑入",
      slideInLeft: "从右滑入",
      slideInRight: "从左滑入",
      slideInUp: "向上滑入",
      flipInX: "X轴翻转进入",
      flipInY: "Y轴翻转进入",
      backInDown: "向下放大滑入",
      backInLeft: "从左放大滑入",
      backInRight: "从右放大滑入",
      backInUp: "向上放大滑入",
      lightSpeedInRight: "从右飞入",
      lightSpeedInLeft: "从左飞入",
      // Exit animation names
      bounceOut: "弹出",
      bounceOutLeft: "向左弹出",
      bounceOutRight: "向右弹出",
      bounceOutUp: "向上弹出",
      bounceOutDown: "向下弹出",
      fadeOut: "浮出",
      fadeOutDown: "向下浮出",
      fadeOutDownBig: "向下长距浮出",
      fadeOutLeft: "向左浮出",
      fadeOutLeftBig: "向左长距浮出",
      fadeOutRight: "向右浮出",
      fadeOutRightBig: "向右长距浮出",
      fadeOutUp: "向上浮出",
      fadeOutUpBig: "向上长距浮出",
      fadeOutTopLeft: "从左上浮出",
      fadeOutTopRight: "从右上浮出",
      fadeOutBottomLeft: "从左下浮出",
      fadeOutBottomRight: "从右下浮出",
      rotateOut: "旋转退出",
      rotateOutDownLeft: "绕左下退出",
      rotateOutDownRight: "绕右下退出",
      rotateOutUpLeft: "绕左上退出",
      rotateOutUpRight: "绕右上退出",
      zoomOut: "缩小退出",
      zoomOutDown: "向下缩小退出",
      zoomOutLeft: "从左缩小退出",
      zoomOutRight: "从右缩小退出",
      zoomOutUp: "向上缩小退出",
      slideOutDown: "向下滑出",
      slideOutLeft: "从左滑出",
      slideOutRight: "从右滑出",
      slideOutUp: "向上滑出",
      flipOutX: "X轴翻转退出",
      flipOutY: "Y轴翻转退出",
      backOutDown: "向下缩小滑出",
      backOutLeft: "从左缩小滑出",
      backOutRight: "从右缩小滑出",
      backOutUp: "向上缩小滑出",
      lightSpeedOutRight: "从右飞出",
      lightSpeedOutLeft: "从左飞出",
      // Attention animation names
      shakeX: "左右摇晃",
      shakeY: "上下摇晃",
      headShake: "摇头",
      swing: "摆动",
      wobble: "晃动",
      tada: "惊恐",
      jello: "果冻",
      bounce: "弹跳",
      flash: "闪烁",
      pulse: "脉搏",
      rubberBand: "橡皮筋",
      heartBeat: "心跳（快）",
      // Slide transition animation labels
      turningNo: "无",
      turningRandom: "随机",
      turningSlideX: "左右推移",
      turningSlideY: "上下推移",
      turningSlideX3D: "左右推移（3D）",
      turningSlideY3D: "上下推移（3D）",
      turningFade: "淡入淡出",
      turningRotate: "旋转",
      turningScaleY: "上下展开",
      turningScaleX: "左右展开",
      turningScale: "放大",
      turningScaleReverse: "缩小"
    },
    chart: {
      bar: "柱状图",
      column: "条形图",
      line: "折线图",
      area: "面积图",
      scatter: "散点图",
      pie: "饼图",
      ring: "环形图",
      radar: "雷达图",
      defaultCategory: "类别",
      defaultSeries: "系列",
      defaultCoordinate: "坐标",
      defaultValue: "值"
    },
    lines: {
      straight: "直线",
      brokenCurve: "折线、曲线"
    },
    imageClip: {
      rect: "矩形",
      rect2: "矩形2",
      rect3: "矩形3",
      roundRect: "圆角矩形",
      ellipse: "圆形",
      triangle: "三角形",
      triangle2: "三角形2",
      triangle3: "三角形3",
      rhombus: "菱形",
      pentagon: "五边形",
      hexagon: "六边形",
      heptagon: "七边形",
      octagon: "八边形",
      chevron: "V形",
      point: "点",
      arrow: "箭头",
      parallelogram: "平行四边形",
      parallelogram2: "平行四边形2",
      trapezoid: "梯形",
      trapezoid2: "梯形2"
    },
    font: {
      default: "默认字体"
    },
    element: {
      text: "文本",
      image: "图片",
      shape: "形状",
      line: "线条",
      chart: "图表",
      table: "表格",
      video: "视频",
      audio: "音频",
      latex: "公式"
    }
  }
}, Le = {
  common: {
    close: "Close",
    cancel: "Cancel",
    confirm: "Confirm",
    save: "Save",
    delete: "Delete",
    remove: "Remove",
    edit: "Edit",
    copy: "Copy",
    cut: "Cut",
    paste: "Paste",
    selectAll: "Select All",
    loading: "Loading...",
    exporting: "Exporting...",
    importing: "Importing...",
    saving: "Saving...",
    success: "Success",
    error: "Error",
    warning: "Warning",
    info: "Info",
    untitledPresentation: "Untitled Presentation"
  },
  header: {
    back: "Back",
    aippt: "AIPPT",
    aipptSubtitle: "Enter a sentence to generate presentation intelligently",
    importFile: "Import File",
    pptxTest: "(Test Only)",
    pptistFormat: "(Exclusive Format)",
    exportFile: "Export File",
    resetSlides: "Reset Slides",
    slideMarkup: "Slide Type Markup",
    shortcuts: "Shortcuts",
    feedback: "Feedback",
    faq: "FAQ",
    disclaimer: "Note: This site is for testing/demo only, no service provided",
    slideshow: "Slideshow",
    slideshowF5: "Slideshow (F5)",
    aiGenerate: "AI Generate PPT",
    export: "Export",
    save: "Save",
    fromStart: "From Beginning",
    fromCurrent: "From Current Slide"
  },
  canvasTool: {
    undo: "Undo",
    undoShortcut: "Undo (Ctrl + Z)",
    redo: "Redo",
    redoShortcut: "Redo (Ctrl + Y)",
    remarkPanel: "Comments Panel",
    selectPanel: "Selection Pane",
    searchReplace: "Find/Replace (Ctrl + F)",
    insertText: "Insert Text",
    textbox: "Text Box",
    horizontalText: "Horizontal Text Box",
    verticalText: "Vertical Text Box",
    insertShape: "Insert Shape",
    shape: "Shape",
    presetShape: "Preset Shapes",
    freeDraw: "Free Draw",
    insertImage: "Insert Image",
    image: "Image",
    uploadImage: "Upload Image",
    onlineLibrary: "Online Library",
    insertLine: "Insert Line",
    line: "Line",
    insertChart: "Insert Chart",
    chart: "Chart",
    insertTable: "Insert Table",
    table: "Table",
    insertFormula: "Insert Formula",
    formula: "Formula",
    insertMedia: "Insert Media",
    media: "Audio/Video",
    insertVideo: "Insert Video",
    video: "Video",
    insertSymbol: "Insert Symbol",
    symbol: "Symbol",
    zoomOut: "Zoom Out",
    zoomOutShortcut: "Zoom Out (Ctrl + -)",
    zoomIn: "Zoom In",
    zoomInShortcut: "Zoom In (Ctrl + =)",
    fitScreen: "Fit Screen",
    fitScreenShortcut: "Fit Screen (Ctrl + 0)"
  },
  exportDialog: {
    exportPptist: "Export PPTIST File",
    exportPptx: "Export PPTX",
    exportImage: "Export Image",
    exportJson: "Export JSON",
    exportPdf: "Print / Export PDF",
    exportPdf2: "Export PDF",
    exportFormat: "Export Format:",
    exportRange: "Export Range:",
    all: "All",
    currentPage: "Current",
    custom: "Custom",
    customRange: "Custom Range:",
    imageQuality: "Image Quality:",
    pdfQuality: "PDF Quality:",
    ignoreOnlineFont: "Ignore Online Fonts:",
    ignoreOnlineFontTip: 'Online fonts are ignored by default when exporting. If you use online fonts in your slides and want to keep the styles after export, you can turn off the "Ignore Online Fonts" option, but this will increase export time.',
    exportImageBtn: "Export Image",
    perPageCount: "Per Page:",
    marginBlank: "Margin:",
    printTip: 'Tip: Please check "Background Graphics" option in the print dialog and select "Default" for margins.',
    printExportPdf: "Print / Export PDF",
    downloadPdf: "Export PDF",
    downloadPptist: "Export PPTIST File",
    downloadPptx: "Export PPTX",
    downloadJson: "Export JSON",
    copyJson: "Copy JSON",
    exportMode: "Export Mode:",
    standardMode: "Standard",
    imageMode: "Image Only",
    ignoreMedia: "Ignore Audio/Video:",
    ignoreMediaTip: 'Audio/video are ignored by default when exporting. If your slides contain audio/video elements and you want to export them to PPTX, turn off the "Ignore Audio/Video" option, but this will significantly increase export time.',
    overwriteMaster: "Overwrite Default Master:",
    mediaTip: "Note: 1. Supported formats: avi, mp4, mov, wmv, mp3, wav; 2. Cross-origin resources cannot be exported.",
    pptistTip: "Note: .pptist is the exclusive file extension of this application, supporting importing this type of file back into the app."
  },
  aiDialog: {
    step1Prefix: "Select a suitable template below to generate PPT, or ",
    step1Link: "use local template",
    step1Tooltip: "Upload .pptist template file",
    step2: "Confirm the outline below (click to edit, right-click to add/delete items), then select template",
    step3: "Enter your PPT topic below, and add relevant info such as industry, position, subject, purpose, etc.",
    inputPlaceholder: "Enter PPT topic, e.g.: College Student Career Planning",
    language: "Language:",
    chinese: "Chinese",
    english: "English",
    japanese: "Japanese",
    style: "Style:",
    general: "General",
    academic: "Academic",
    professional: "Professional",
    educational: "Educational",
    marketing: "Marketing",
    model: "Model:",
    illustration: "Illustration:",
    none: "None",
    mockTest: "Mock Test",
    aiSearch: "AI Search",
    aiGenerate: "AI Generate",
    overwriteSlides: "Overwrite existing slides",
    aiGenerateBtn: "AI Generate",
    selectTemplate: "Select Template",
    regenerate: "Back to Regenerate",
    generate: "Generate",
    backToOutline: "Back to Outline",
    generating: "AI generating, please wait...",
    creatingSlides: "Creating presentation, please wait...",
    apiOverload: "The API concurrency for this model is too high, please try another model",
    templateError: "The uploaded template file data is abnormal, please re-upload or use preset templates",
    inputThemeFirst: "Please enter PPT topic first",
    recommendTopics: {
      tech2025: "2025 Technology Frontiers",
      bigData: "How Big Data Changes the World",
      catering: "Catering Market Research",
      aigcEducation: "AIGC Applications in Education",
      socialMedia: "Social Media & Brand Marketing",
      fiveG: "How 5G Changes Our Lives",
      workSummary: "Annual Work Summary & Outlook",
      blockchain: "Blockchain Technology & Applications",
      careerPlan: "College Student Career Planning",
      annualMeeting: "Company Annual Meeting Planning"
    }
  },
  thumbnails: {
    addSlide: "Add Slide",
    inputSectionName: "Enter section name",
    untitledSection: "Untitled Section",
    defaultSection: "Default Section",
    slideOf: "Slide",
    total: "Total",
    deleteSection: "Delete Section",
    deleteSectionAndSlides: "Delete Section and Slides",
    deleteAllSections: "Delete All Sections",
    renameSection: "Rename Section",
    newPage: "New Page",
    copyPage: "Duplicate Page",
    deletePage: "Delete Page",
    addSection: "Add Section",
    playCurrent: "Play from Current"
  },
  search: {
    find: "Find",
    replace: "Replace",
    inputFindContent: "Enter search content",
    inputReplaceContent: "Enter replacement content",
    ignoreCase: "Ignore Case",
    previous: "Previous",
    next: "Next",
    replaceBtn: "Replace",
    replaceAll: "Replace All"
  },
  screen: {
    penTool: "Pen Tool",
    laserPointer: "Laser Pointer",
    timer: "Timer",
    presenterView: "Presenter View",
    exitFullscreen: "Exit Fullscreen",
    enterFullscreen: "Enter Fullscreen",
    endShow: "End Show",
    slideOf: "Slide",
    previousPage: "Previous",
    nextPage: "Next",
    firstPage: "First",
    lastPage: "Last",
    cancelAutoPlay: "Cancel Auto Play",
    autoPlay: "Auto Play",
    loopPlay: "Loop Play",
    showToolbar: "Show Toolbar",
    viewAllSlides: "View All Slides",
    bottomThumbnails: "Show Bottom Thumbnails",
    seconds: "s"
  },
  mobile: {
    undo: "Undo",
    redo: "Redo",
    exitEdit: "Exit Edit",
    speakerNotes: "Click to enter speaker notes",
    newSlide: "New Slide",
    copy: "Copy",
    delete: "Delete",
    text: "Text",
    image: "Image",
    rectangle: "Rectangle",
    circle: "Circle",
    newText: "New Text"
  },
  toolbar: {
    slideDesign: "Slide Design",
    animation: "Animation",
    position: "Position",
    style: "Style",
    background: "Background",
    fillColor: "Fill Color",
    noFill: "No Fill",
    presetBackground: "Preset Background",
    customColor: "Custom Color",
    gradient: "Gradient",
    image: "Image",
    applyToAll: "Apply to All",
    slideSize: "Slide Size",
    widescreen16_9: "Widescreen 16:9",
    widescreen16_10: "Widescreen 16:10",
    standard4_3: "Standard 4:3",
    customSize: "Custom Size",
    width: "Width",
    height: "Height",
    apply: "Apply",
    ruler: "Ruler",
    showRuler: "Show Ruler",
    remark: "Comment",
    remarkPlaceholder: "Enter comment (for selected element/current slide)",
    replyPlaceholder: "Enter reply content",
    confirm: "Confirm",
    fontFamily: "Font",
    fontSize: "Font Size",
    bold: "Bold",
    italic: "Italic",
    underline: "Underline",
    strikethrough: "Strikethrough",
    fontColor: "Font Color",
    highlight: "Highlight",
    alignLeft: "Align Left",
    alignCenter: "Center",
    alignRight: "Align Right",
    alignJustify: "Justify",
    bulletList: "Bullet List",
    numberedList: "Numbered List",
    increaseIndent: "Increase Indent",
    decreaseIndent: "Decrease Indent",
    lineSpacing: "Line Spacing",
    paragraphSpacing: "Paragraph Spacing",
    clearFormat: "Clear Format",
    format: "Format",
    colorMask: "Color Mask",
    filter: "Filter",
    flip: "Flip",
    horizontalFlip: "Horizontal Flip",
    verticalFlip: "Vertical Flip",
    opacity: "Opacity",
    outline: "Outline",
    shadow: "Shadow",
    shadowColor: "Shadow Color",
    blur: "Blur",
    offsetX: "Offset X",
    offsetY: "Offset Y",
    imageCrop: "Crop Image",
    replaceImage: "Replace Image",
    resetImage: "Reset Image",
    setAsBackground: "Set as Background",
    link: "Hyperlink",
    linkUrl: "Link URL",
    linkPlaceholder: "Enter hyperlink",
    lineStyle: "Line Style",
    lineColor: "Line Color",
    lineWidth: "Line Width",
    startArrow: "Start Arrow",
    endArrow: "End Arrow",
    chartType: "Chart Type",
    barChart: "Bar Chart",
    horizontalBarChart: "Horizontal Bar",
    lineChart: "Line Chart",
    areaChart: "Area Chart",
    scatterChart: "Scatter Chart",
    pieChart: "Pie Chart",
    doughnutChart: "Doughnut Chart",
    radarChart: "Radar Chart",
    chartData: "Chart Data",
    themeColors: "Theme Colors",
    gridLines: "Grid Lines",
    legend: "Legend",
    legendPosition: "Legend Position",
    top: "Top",
    bottom: "Bottom",
    left: "Left",
    right: "Right",
    tableStyle: "Table Style",
    headerRow: "Header Row",
    totalRow: "Total Row",
    firstColumn: "First Column",
    lastColumn: "Last Column",
    bandedRows: "Banded Rows",
    bandedColumns: "Banded Columns",
    addRow: "Add Row",
    addColumn: "Add Column",
    deleteRow: "Delete Row",
    deleteColumn: "Delete Column",
    mergeCells: "Merge Cells",
    splitCells: "Split Cells",
    videoCover: "Video Cover",
    autoPlay: "Auto Play",
    loop: "Loop",
    mute: "Mute",
    latexPlaceholder: "Enter LaTeX formula",
    positionX: "X Position",
    positionY: "Y Position",
    elementWidth: "Width",
    elementHeight: "Height",
    rotation: "Rotation",
    lock: "Lock",
    unlock: "Unlock",
    lockRatio: "Lock Ratio",
    order: "Order",
    bringToFront: "Bring to Front",
    sendToBack: "Send to Back",
    bringForward: "Bring Forward",
    sendBackward: "Send Backward",
    align: "Align",
    alignTop: "Align Top",
    alignMiddle: "Align Middle",
    alignBottom: "Align Bottom",
    distributeHorizontally: "Distribute Horizontally",
    distributeVertically: "Distribute Vertically",
    group: "Group",
    ungroup: "Ungroup",
    combine: "Combine Shapes",
    enterAnimation: "Entrance Animation",
    exitAnimation: "Exit Animation",
    emphasisAnimation: "Emphasis Animation",
    animationDuration: "Duration",
    animationDelay: "Delay",
    animationTrigger: "Trigger",
    onClick: "On Click",
    withPrevious: "With Previous",
    afterPrevious: "After Previous",
    addAnimation: "Add Animation",
    removeAnimation: "Remove Animation",
    playAnimation: "Play Animation",
    slideAnimation: "Slide Transition",
    noAnimation: "None",
    random: "Random",
    multiSelect: " (Multi)",
    design: "Design",
    transition: "Transition",
    backgroundFill: "Background Fill",
    solidFill: "Solid Fill",
    imageFill: "Image Fill",
    gradientFill: "Gradient Fill",
    scale: "Scale",
    tile: "Tile",
    scaleFill: "Scale Fill",
    linearGradient: "Linear Gradient",
    radialGradient: "Radial Gradient",
    currentColorBlock: "Current Color:",
    gradientAngle: "Gradient Angle:",
    applyBackgroundToAll: "Apply Background to All",
    paperA3A4: "Paper A3 / A4",
    verticalA3A4: "Vertical A3 / A4",
    canvasSize: "Canvas Size:",
    globalTheme: "Global Theme",
    more: "More",
    font: "Font:",
    searchFont: "Search Font",
    fontColorLabel: "Font Color:",
    backgroundColorLabel: "Background Color:",
    themeColorLabel: "Theme Color:",
    enableOutline: "Enable Border",
    enableShadow: "Enable Shadow",
    fillColorLabel: "Fill Color:",
    colorMaskLabel: "Color Mask",
    maskColor: "Mask Color",
    outlineStyle: "Outline Style:",
    outlineColor: "Outline Color:",
    outlineWidth: "Outline Width:",
    horizontalShadow: "Horizontal Shadow:",
    verticalShadow: "Vertical Shadow:",
    blurDistance: "Blur Distance:",
    shadowColorLabel: "Shadow Color:",
    applyThemeToAll: "Apply Theme to All",
    unifyFont: "Unify Font",
    extractTheme: "Extract Theme from Slide",
    presetTheme: "Preset Theme",
    textAa: "Text Aa",
    set: "Set",
    setAndApply: "Set & Apply",
    appliedToAll: "Applied to All",
    layerOrder: "Order:",
    toTop: "To Top",
    toBottom: "To Bottom",
    moveUp: "Move Up",
    moveDown: "Move Down",
    alignLabel: "Align:",
    horizontal: "X:",
    vertical: "Y:",
    widthLabel: "Width:",
    heightLabel: "Height:",
    unlockRatio: "Unlock Aspect Ratio",
    lockRatioLabel: "Lock Aspect Ratio",
    rotationLabel: "Rotation:",
    selectElementAddAnimation: "Select an element to add animation",
    enter: "Enter",
    exit: "Exit",
    emphasis: "Emphasis",
    durationLabel: "Duration:",
    triggerLabel: "Trigger:",
    manualTrigger: "On Click",
    withPreviousAnimation: "With Previous",
    afterPreviousAnimation: "After Previous",
    changeAnimation: "Change Animation",
    preview: "Preview",
    delete: "Delete",
    stopPreview: "Stop Preview",
    previewAll: "Preview All",
    outlineStyleLabel: "Outline Style:",
    outlineColorLabel: "Outline Color:",
    outlineWidthLabel: "Outline Width:",
    textColor: "Text Color",
    textHighlight: "Text Highlight",
    increaseFontSize: "Increase Font Size",
    decreaseFontSize: "Decrease Font Size",
    searchFontSize: "Search Font Size",
    horizontallyCenter: "Center Horizontally",
    verticallyCenter: "Center Vertically",
    horizontalDistribute: "Distribute Horizontally",
    verticalDistribute: "Distribute Vertically",
    // TextStylePanel
    bigTitle: "Big Title",
    smallTitle: "Small Title",
    bodyText: "Body",
    bodyTextSmall: "Body [Small]",
    annotation1: "Annotation 1",
    annotation2: "Annotation 2",
    lineHeightLabel: "Line Height:",
    paragraphSpaceLabel: "Paragraph Space:",
    wordSpaceLabel: "Word Space:",
    textboxFill: "Text Box Fill:",
    times: "x",
    // ImageStylePanel
    cropImage: "Crop Image",
    byShape: "By Shape:",
    aspectRatioSquare: "Aspect Ratio (Square)",
    aspectRatioPortrait: "Aspect Ratio (Portrait)",
    aspectRatioLandscape: "Aspect Ratio (Landscape)",
    borderRadius: "Border Radius:",
    replaceImageBtn: "Replace Image",
    resetStyleBtn: "Reset Style",
    setAsBackgroundBtn: "Set as Background",
    // ShapeStylePanel
    clickToReplaceShape: "Click to Replace Shape",
    solidFillOption: "Solid Fill",
    gradientFillOption: "Gradient Fill",
    imageFillOption: "Image Fill",
    linearGradientOption: "Linear Gradient",
    radialGradientOption: "Radial Gradient",
    alignTopText: "Top Align",
    alignCenterText: "Center",
    alignBottomText: "Bottom Align",
    doubleclickContinuousUse: "Double-click for Continuous Use",
    shapeFormatPainter: "Shape Format Painter",
    // LineStylePanel
    lineStyleLabel: "Line Style:",
    lineColorLabel: "Line Color:",
    lineWidthLabel: "Line Width:",
    startPointStyle: "Start Style:",
    endPointStyle: "End Style:",
    swapDirection: "Swap Direction",
    // TableStylePanel
    searchFontLabel: "Search Font",
    searchFontSizeLabel: "Search Font Size",
    textColorTooltip: "Text Color",
    cellFill: "Cell Fill",
    boldTooltip: "Bold",
    italicTooltip: "Italic",
    underlineTooltip: "Underline",
    strikethroughTooltip: "Strikethrough",
    alignLeftTooltip: "Align Left",
    alignCenterTooltip: "Center",
    alignRightTooltip: "Align Right",
    alignJustifyTooltip: "Justify",
    rowCount: "Rows:",
    colCount: "Columns:",
    enableThemeTable: "Enable Theme Table:",
    headerRowLabel: "Header Row",
    totalRowLabel: "Total Row",
    firstColumnLabel: "First Column",
    lastColumnLabel: "Last Column",
    themeColorLabelTable: "Theme Color:",
    // ChartStylePanel
    editChart: "Edit Chart",
    stackedStyle: "Stacked Style",
    useSmoothCurve: "Use Smooth Curve",
    backgroundFillLabel: "Background Fill:",
    axisAndText: "Axis & Text:",
    gridColorLabel: "Grid Color:",
    themeColorScheme: "Theme Colors:",
    presetChartThemes: "Preset Chart Themes:",
    slideTheme: "Slide Theme:",
    customColorScheme: "Custom Colors",
    // VideoStylePanel
    videoPosterCover: "Video Poster",
    setFirstFrameAsCover: "Set First Frame as Cover",
    resetCover: "Reset Cover",
    autoPlayLabel: "Auto Play:",
    // AudioStylePanel
    iconColorLabel: "Icon Color:",
    loopPlayLabel: "Loop:",
    // LatexStylePanel
    editLatex: "Edit LaTeX",
    colorLabel: "Color:",
    strokeWidthLabel: "Stroke Width:",
    // ElementFilter
    enableFilter: "Enable Filter",
    filterBlur: "Blur",
    filterBrightness: "Brightness",
    filterContrast: "Contrast",
    filterGrayscale: "Grayscale",
    filterSaturate: "Saturate",
    filterHueRotate: "Hue Rotate",
    filterSepia: "Sepia",
    filterInvert: "Invert",
    filterOpacity: "Opacity",
    presetBlackWhite: "B&W",
    presetVintage: "Vintage",
    presetSharpen: "Sharpen",
    presetSoft: "Soft",
    presetWarm: "Warm",
    presetBright: "Bright",
    presetVivid: "Vivid",
    presetBlur: "Blur",
    presetInvert: "Invert",
    // RichTextBase
    superscript: "Superscript",
    subscript: "Subscript",
    inlineCode: "Inline Code",
    quote: "Quote",
    aiBeautify: "Beautify",
    aiExpand: "Expand",
    aiCondense: "Condense",
    aiAssist: "AI Assist",
    formatPainterDoubleClick: "Format Painter (Double-click for continuous use)",
    invalidLinkUrl: "Please enter a valid link URL",
    decreaseFirstLineIndent: "Decrease First Line Indent",
    increaseFirstLineIndent: "Increase First Line Indent",
    noTextContent: "No text content to process",
    aiModelOverload: "API concurrency too high, please try another model",
    // ThemeColorsSetting
    editThemeColors: "Edit Theme Colors",
    slideThemeColor: "Slide Theme Color",
    // ThemeStylesExtract
    extractFromCurrent: "Extract from Current",
    extractFromAll: "Extract from All Slides",
    fontLabel: "Font:",
    fontColorExtract: "Font Color:",
    backgroundColorExtract: "Background Color:",
    themeColorExtract: "Theme Color:",
    clickToExcludeColor: "(Click to exclude colors)",
    selectStyle: "Select",
    applyToTheme: "Apply to Theme",
    saveAsTheme: "Save Selected as Theme",
    themeColorLimit: "Theme colors exceeded limit, auto-selected first 6",
    // ChartDataEditor
    chartTypeLabel: "Chart Type:",
    clickToChange: "Click to Change",
    clearData: "Clear Data",
    category: "Category",
    series: "Series",
    // ChartStylePanel/ThemeColorsSetting
    chartThemeColors: "Chart Theme Colors",
    themeColorN: "Theme Color",
    addThemeColor: "Add Theme Color"
  },
  element: {
    text: "Text",
    image: "Image",
    shape: "Shape",
    line: "Line",
    chart: "Chart",
    table: "Table",
    video: "Video",
    audio: "Audio",
    latex: "Formula"
  },
  contextmenu: {
    cut: "Cut",
    copy: "Copy",
    paste: "Paste",
    selectAll: "Select All",
    delete: "Delete",
    lock: "Lock",
    unlock: "Unlock",
    copyStyle: "Copy Style",
    pasteStyle: "Paste Style",
    resetStyle: "Reset Style",
    bringToFront: "Bring to Front",
    sendToBack: "Send to Back",
    bringForward: "Bring Forward",
    sendBackward: "Send Backward",
    group: "Group",
    ungroup: "Ungroup",
    combine: "Combine Shapes",
    union: "Union",
    intersect: "Intersect",
    subtract: "Subtract",
    exclude: "Exclude",
    setAsBackground: "Set as Background",
    createLink: "Create Hyperlink",
    editLink: "Edit Hyperlink",
    removeLink: "Remove Hyperlink"
  },
  app: {
    initLoading: "Initializing data, please wait..."
  },
  notes: {
    title: "Notes",
    placeholder: "Click to enter speaker notes"
  },
  notesPanel: {
    title: "Notes for Slide {index}",
    reply: "Reply",
    delete: "Delete",
    inputReplyContent: "Enter reply content",
    cancel: "Cancel",
    noNotes: "No notes on this page",
    inputNotePlaceholder: "Enter note (for {target})",
    selectedElement: "selected element",
    currentSlide: "current slide",
    clearNotes: "Clear all notes on this page",
    addNote: "Add Note",
    testUser: "Test User"
  },
  imageLib: {
    title: "Image Library (from pexels.com)",
    searchPlaceholder: "Search images",
    searching: "Searching...",
    noResults: "No images found",
    insert: "Insert",
    all: "All",
    landscape: "Landscape",
    portrait: "Portrait",
    square: "Square",
    inputKeyword: "Please enter search keyword",
    defaultSearch: "landscape"
  },
  linkDialog: {
    title: "Insert Hyperlink",
    linkText: "Link Text",
    linkUrl: "Link URL",
    slideLink: "Slide Link",
    webLink: "Web Link",
    selectSlide: "Select Slide",
    slide: "Slide {n}",
    webLinkPlaceholder: "Enter web link URL",
    preview: "Preview:"
  },
  mediaInput: {
    videoPlaceholder: "Enter video URL, e.g. https://xxx.mp4",
    audioPlaceholder: "Enter audio URL, e.g. https://xxx.mp3",
    video: "Video",
    audio: "Audio",
    uploadLocalVideo: "Upload Local Video",
    uploadLocalAudio: "Upload Local Audio",
    enterVideoUrl: "Please enter a valid video URL first",
    enterAudioUrl: "Please enter a valid audio URL first"
  },
  hotkeyDoc: {
    title: "Keyboard Shortcuts",
    general: "General",
    editing: "Editing",
    slideshow: "Slideshow",
    description: "Description",
    shortcut: "Shortcut",
    // Group type names
    typeGeneral: "General",
    typeSlideshow: "Slideshow",
    typeSlideEditing: "Slide Editing",
    typeElementOps: "Element Operations",
    typeTextEditing: "Text Editing",
    // General labels
    cut: "Cut",
    copy: "Copy",
    paste: "Paste",
    pasteAsPlainText: "Paste as Plain Text",
    quickCopyPaste: "Quick Duplicate",
    selectAll: "Select All",
    undo: "Undo",
    restore: "Redo",
    delete: "Delete",
    multiSelect: "Multi-select",
    closeDialog: "Close Dialog",
    // Slideshow labels
    startFromBeginning: "Start Slideshow from Beginning",
    startFromCurrent: "Start Slideshow from Current",
    prevPage: "Previous Slide",
    nextPage: "Next Slide",
    exitSlideshow: "Exit Slideshow",
    // Slide editing labels
    newSlide: "New Slide",
    moveCanvas: "Move Canvas",
    zoomCanvas: "Zoom Canvas",
    zoomIn: "Zoom In",
    zoomOut: "Zoom Out",
    fitScreen: "Fit Canvas to Screen",
    prevPageNoElement: "Previous Page (No Element Selected)",
    nextPageNoElement: "Next Page (No Element Selected)",
    prevPageScroll: "Previous Page",
    nextPageScroll: "Next Page",
    quickCreateText: "Quick Create Text",
    quickCreateRect: "Quick Create Rectangle",
    quickCreateCircle: "Quick Create Circle",
    quickCreateLine: "Quick Create Line",
    exitDraw: "Exit Draw Mode",
    // Element ops labels
    move: "Move",
    lock: "Lock",
    group: "Group",
    ungroup: "Ungroup",
    bringToFront: "Bring to Front",
    sendToBack: "Send to Back",
    lockRatio: "Lock Aspect Ratio",
    createStraightLine: "Create Horizontal / Vertical Line",
    switchFocusElement: "Switch Focus Element",
    confirmCrop: "Confirm Image Crop",
    // Text editing labels
    bold: "Bold",
    italic: "Italic",
    underline: "Underline",
    inlineCode: "Inline Code",
    superscript: "Superscript",
    subscript: "Subscript",
    selectParagraph: "Select Paragraph",
    // Value strings with Chinese
    holdCtrlOrShift: "Hold Ctrl or Shift",
    spacePlusDrag: "Space + Mouse Drag",
    ctrlPlusMouseWheel: "Ctrl + Mouse Wheel",
    doubleClickBlankOrT: "Double-click Blank / T",
    rightMouseClick: "Right Click",
    mouseScrollUpOrPgUp: "Mouse Scroll Up / PgUp",
    mouseScrollDownOrPgDown: "Mouse Scroll Down / PgDown"
  },
  symbolPanel: {
    title: "Insert Symbol",
    emoji: "Emoji",
    arrows: "Arrows",
    math: "Math",
    special: "Special",
    emojiCategories: {
      faces: "Faces",
      gestures: "Gestures",
      animals: "Animals & Nature",
      food: "Food",
      travel: "Travel",
      activities: "Activities",
      objects: "Objects",
      symbols: "Symbols"
    }
  },
  selectPanel: {
    title: "Selection Pane",
    titleWithCount: "Selection ({active}/{total})",
    showAll: "Show All",
    hideAll: "Hide All",
    group: "Group",
    noContent: "No content on this page"
  },
  markupPanel: {
    title: "Slide Type Markup",
    currentPageType: "Current Page Type:",
    currentTextType: "Current Text Type:",
    currentImageType: "Current Image Type:",
    selectElementHint: "Select image, text, or shape with text to mark type",
    unmarkedType: "Unmarked Type",
    coverPage: "Cover Page",
    contentsPage: "Contents Page",
    transitionPage: "Transition Page",
    contentPage: "Content Page",
    endPage: "End Page",
    titleText: "Title",
    subtitleText: "Subtitle",
    contentText: "Content",
    itemText: "List Item",
    itemTitleText: "List Item Title",
    notesText: "Notes",
    headerText: "Header",
    footerText: "Footer",
    partNumberText: "Section Number",
    itemNumberText: "Item Number",
    pageFigure: "Page Figure",
    itemFigure: "Item Figure",
    backgroundImage: "Background Image"
  },
  remarkEditor: {
    placeholder: "Click to enter speaker notes"
  },
  templatePanel: {
    title: "Templates",
    blank: "Blank Slide",
    preset: "Preset Templates",
    all: "All",
    cover: "Cover",
    contents: "Contents",
    transition: "Transition",
    content: "Content",
    end: "End",
    insertAll: "Insert All",
    insertTemplate: "Insert Template"
  },
  language: {
    toggle: "Switch Language",
    zhCN: "Chinese",
    en: "English"
  },
  canvas: {
    ruler: "Ruler",
    gridLine: "Grid",
    gridNone: "None",
    gridSmall: "Small",
    gridMedium: "Medium",
    gridLarge: "Large",
    resetCurrentPage: "Reset Current Page",
    slideshow: "Slideshow"
  },
  editableElement: {
    horizontalCenter: "Center Horizontally",
    horizontalVerticalCenter: "Center Both",
    alignLeft: "Align Left",
    alignRight: "Align Right",
    verticalCenter: "Center Vertically",
    alignTop: "Align Top",
    alignBottom: "Align Bottom",
    bringToFront: "Bring to Front",
    moveUp: "Bring Forward",
    sendToBack: "Send to Back",
    moveDown: "Send Backward",
    setLink: "Set Link",
    cancelGroup: "Ungroup",
    group: "Group",
    slidePage: "Slide Page",
    changeLink: "Change",
    removeLink: "Remove"
  },
  shapeCreateCanvas: {
    drawShapeHint: "Click to draw a shape, close path to finish, press ESC or right-click to cancel, press ENTER to finish early"
  },
  tableGenerator: {
    table: "Table",
    back: "Back",
    custom: "Custom",
    rows: "Rows:",
    cols: "Columns:",
    rowColRange: "Rows/columns must be between 0 and 20!"
  },
  elementComponent: {
    doubleClickEdit: "Double-click to edit",
    videoLoadError: "Video load failed",
    audioLoadError: "Audio load failed",
    playbackSpeed: "Speed",
    loopOn: "Loop On",
    loopOff: "Loop Off",
    fontLoadingHint: "Font needs to be downloaded, please wait",
    insertCol: "Insert Column",
    insertRow: "Insert Row",
    toLeft: "To Left",
    toRight: "To Right",
    toAbove: "To Above",
    toBelow: "To Below",
    deleteCol: "Delete Column",
    deleteRow: "Delete Row",
    mergeCells: "Merge Cells",
    cancelMergeCells: "Unmerge Cells",
    selectCurrentCol: "Select Current Column",
    selectCurrentRow: "Select Current Row",
    selectAllCells: "Select All Cells"
  },
  colorPicker: {
    recentColors: "Recent Colors:",
    pressEscToClose: "Press ESC to close eye dropper",
    eyeDropperInitFailed: "Eye dropper initialization failed"
  },
  latexEditor: {
    inputPlaceholder: "Enter LaTeX formula",
    formulaPreview: "Formula Preview",
    commonSymbols: "Common Symbols",
    presetFormulas: "Preset Formulas",
    formulaRequired: "Formula cannot be empty"
  },
  outlineEditor: {
    topic: "Topic",
    chapter: "Ch",
    section: "Sec",
    newChapter: "New Chapter",
    newSection: "New Section",
    newItem: "New Item",
    addChildChapter: "Add Child Outline (Chapter)",
    addSiblingChapterAbove: "Add Sibling Outline Above (Chapter)",
    addChildSection: "Add Child Outline (Section)",
    deleteChapter: "Delete Chapter",
    addSiblingSectionAbove: "Add Sibling Outline Above (Section)",
    addChildItem: "Add Child Outline (Item)",
    deleteSection: "Delete Section",
    addSiblingItemAbove: "Add Sibling Outline Above (Item)",
    addSiblingItemBelow: "Add Sibling Outline Below (Item)",
    deleteItem: "Delete Item"
  },
  select: {
    search: "Search"
  },
  configs: {
    animation: {
      // Type category names
      typeBounce: "Bounce",
      typeFade: "Fade",
      typeRotate: "Rotate",
      typeZoom: "Zoom",
      typeSlideIn: "Slide In",
      typeFlip: "Flip",
      typeBackIn: "Back Slide In",
      typeLightSpeed: "Fly In",
      typeShake: "Shake",
      typeOther: "Other",
      typeSlideOut: "Slide Out",
      typeBackOut: "Back Slide Out",
      typeLightSpeedOut: "Fly Out",
      // Enter animation names
      bounceIn: "Bounce In",
      bounceInLeft: "Bounce In Right",
      bounceInRight: "Bounce In Left",
      bounceInUp: "Bounce In Up",
      bounceInDown: "Bounce In Down",
      fadeIn: "Fade In",
      fadeInDown: "Fade In Down",
      fadeInDownBig: "Fade In Down Big",
      fadeInLeft: "Fade In Right",
      fadeInLeftBig: "Fade In Right Big",
      fadeInRight: "Fade In Left",
      fadeInRightBig: "Fade In Left Big",
      fadeInUp: "Fade In Up",
      fadeInUpBig: "Fade In Up Big",
      fadeInTopLeft: "Fade In Top Left",
      fadeInTopRight: "Fade In Top Right",
      fadeInBottomLeft: "Fade In Bottom Left",
      fadeInBottomRight: "Fade In Bottom Right",
      rotateIn: "Rotate In",
      rotateInDownLeft: "Rotate In Down Left",
      rotateInDownRight: "Rotate In Down Right",
      rotateInUpLeft: "Rotate In Up Left",
      rotateInUpRight: "Rotate In Up Right",
      zoomIn: "Zoom In",
      zoomInDown: "Zoom In Down",
      zoomInLeft: "Zoom In Left",
      zoomInRight: "Zoom In Right",
      zoomInUp: "Zoom In Up",
      slideInDown: "Slide In Down",
      slideInLeft: "Slide In Right",
      slideInRight: "Slide In Left",
      slideInUp: "Slide In Up",
      flipInX: "Flip In X",
      flipInY: "Flip In Y",
      backInDown: "Back In Down",
      backInLeft: "Back In Left",
      backInRight: "Back In Right",
      backInUp: "Back In Up",
      lightSpeedInRight: "Light Speed In Right",
      lightSpeedInLeft: "Light Speed In Left",
      // Exit animation names
      bounceOut: "Bounce Out",
      bounceOutLeft: "Bounce Out Left",
      bounceOutRight: "Bounce Out Right",
      bounceOutUp: "Bounce Out Up",
      bounceOutDown: "Bounce Out Down",
      fadeOut: "Fade Out",
      fadeOutDown: "Fade Out Down",
      fadeOutDownBig: "Fade Out Down Big",
      fadeOutLeft: "Fade Out Left",
      fadeOutLeftBig: "Fade Out Left Big",
      fadeOutRight: "Fade Out Right",
      fadeOutRightBig: "Fade Out Right Big",
      fadeOutUp: "Fade Out Up",
      fadeOutUpBig: "Fade Out Up Big",
      fadeOutTopLeft: "Fade Out Top Left",
      fadeOutTopRight: "Fade Out Top Right",
      fadeOutBottomLeft: "Fade Out Bottom Left",
      fadeOutBottomRight: "Fade Out Bottom Right",
      rotateOut: "Rotate Out",
      rotateOutDownLeft: "Rotate Out Down Left",
      rotateOutDownRight: "Rotate Out Down Right",
      rotateOutUpLeft: "Rotate Out Up Left",
      rotateOutUpRight: "Rotate Out Up Right",
      zoomOut: "Zoom Out",
      zoomOutDown: "Zoom Out Down",
      zoomOutLeft: "Zoom Out Left",
      zoomOutRight: "Zoom Out Right",
      zoomOutUp: "Zoom Out Up",
      slideOutDown: "Slide Out Down",
      slideOutLeft: "Slide Out Left",
      slideOutRight: "Slide Out Right",
      slideOutUp: "Slide Out Up",
      flipOutX: "Flip Out X",
      flipOutY: "Flip Out Y",
      backOutDown: "Back Out Down",
      backOutLeft: "Back Out Left",
      backOutRight: "Back Out Right",
      backOutUp: "Back Out Up",
      lightSpeedOutRight: "Light Speed Out Right",
      lightSpeedOutLeft: "Light Speed Out Left",
      // Attention animation names
      shakeX: "Shake X",
      shakeY: "Shake Y",
      headShake: "Head Shake",
      swing: "Swing",
      wobble: "Wobble",
      tada: "Tada",
      jello: "Jello",
      bounce: "Bounce",
      flash: "Flash",
      pulse: "Pulse",
      rubberBand: "Rubber Band",
      heartBeat: "Heart Beat",
      // Slide transition animation labels
      turningNo: "None",
      turningRandom: "Random",
      turningSlideX: "Slide Horizontal",
      turningSlideY: "Slide Vertical",
      turningSlideX3D: "Slide Horizontal (3D)",
      turningSlideY3D: "Slide Vertical (3D)",
      turningFade: "Fade",
      turningRotate: "Rotate",
      turningScaleY: "Scale Vertical",
      turningScaleX: "Scale Horizontal",
      turningScale: "Zoom In",
      turningScaleReverse: "Zoom Out"
    },
    chart: {
      bar: "Bar Chart",
      column: "Column Chart",
      line: "Line Chart",
      area: "Area Chart",
      scatter: "Scatter Chart",
      pie: "Pie Chart",
      ring: "Doughnut Chart",
      radar: "Radar Chart",
      defaultCategory: "Category",
      defaultSeries: "Series",
      defaultCoordinate: "Coordinate",
      defaultValue: "Value"
    },
    lines: {
      straight: "Straight Line",
      brokenCurve: "Broken / Curve"
    },
    imageClip: {
      rect: "Rectangle",
      rect2: "Rectangle 2",
      rect3: "Rectangle 3",
      roundRect: "Round Rectangle",
      ellipse: "Ellipse",
      triangle: "Triangle",
      triangle2: "Triangle 2",
      triangle3: "Triangle 3",
      rhombus: "Rhombus",
      pentagon: "Pentagon",
      hexagon: "Hexagon",
      heptagon: "Heptagon",
      octagon: "Octagon",
      chevron: "Chevron",
      point: "Point",
      arrow: "Arrow",
      parallelogram: "Parallelogram",
      parallelogram2: "Parallelogram 2",
      trapezoid: "Trapezoid",
      trapezoid2: "Trapezoid 2"
    },
    font: {
      default: "Default Font"
    },
    element: {
      text: "Text",
      image: "Image",
      shape: "Shape",
      line: "Line",
      chart: "Chart",
      table: "Table",
      video: "Video",
      audio: "Audio",
      latex: "Formula"
    }
  }
}, W = Symbol("lt-ppt-i18n"), Ie = { "zh-CN": be, en: Le };
function _(n, i = "") {
  return Object.entries(n).reduce((g, [c, m]) => {
    const C = i ? `${i}.${c}` : c;
    return m && typeof m == "object" && !Array.isArray(m) ? Object.assign(g, _(m, C)) : g[C] = String(m), g;
  }, {});
}
const T = Object.fromEntries(
  Object.entries(Ie).map(([n, i]) => [n, _(i)])
);
function Re() {
  const n = pe(W, { locale: w("zh-CN") });
  return { t: (g) => {
    var c, m;
    return ((c = T[n.locale.value]) == null ? void 0 : c[g]) ?? ((m = T["zh-CN"]) == null ? void 0 : m[g]) ?? g;
  }, locale: n.locale };
}
function Te(n) {
  return (i) => {
    var g, c;
    return ((g = T[n.value]) == null ? void 0 : g[i]) ?? ((c = T["zh-CN"]) == null ? void 0 : c[i]) ?? i;
  };
}
function Fe(n) {
  const i = w((n == null ? void 0 : n.locale) ?? "zh-CN");
  return {
    install() {
    },
    global: { locale: i, t: (c) => {
      var m, C;
      return ((m = T[i.value]) == null ? void 0 : m[c]) ?? ((C = T["zh-CN"]) == null ? void 0 : C[c]) ?? c;
    } }
  };
}
const V = 4096 * 4096, Pe = 8e3, we = /* @__PURE__ */ ge({
  __name: "LtPPT",
  props: {
    initData: {},
    onUploadFile: {},
    onChange: {},
    onSave: {},
    onInitFinished: {},
    locale: { default: "zh-CN" },
    width: { default: "100%" },
    height: { default: "100%" },
    readonly: { type: Boolean, default: !1 },
    theme: { default: "dark" },
    onReturn: {},
    onImageAIEntryClick: {}
  },
  emits: ["image-ai-entry-click"],
  setup(n, { expose: i, emit: g }) {
    const c = n, m = g, C = he(), L = w();
    let S = null, f = null, A = null, R = null, F = null, O = null, B = null;
    const E = w(c.locale ?? "zh-CN"), D = w(c.theme ?? "dark"), Z = z(() => ({
      width: c.width,
      height: c.height
    })), X = () => {
      const e = (C == null ? void 0 : C.vnode.props) || {};
      return !!(e.onImageAIEntryClick || e.onImageAiEntryClick);
    }, J = z(() => !!c.onImageAIEntryClick || X()), Y = (e) => new Promise((t) => {
      if (typeof Image > "u") {
        t(null);
        return;
      }
      let o = !1, r = null;
      const s = (l) => {
        o || (o = !0, r && clearTimeout(r), t(l));
      };
      r = setTimeout(() => s(null), Pe);
      const a = new Image();
      /^https?:\/\//i.test(e) && (a.crossOrigin = "anonymous"), a.decoding = "sync", a.onload = async () => {
        var l;
        try {
          await ((l = a.decode) == null ? void 0 : l.call(a));
        } catch {
        }
        s(a);
      }, a.onerror = () => s(null), a.src = e;
    }), q = (e) => {
      const t = Math.max(1, e.width || 1), o = Math.max(1, e.height || 1);
      let r = Math.min(typeof window > "u" ? 1 : window.devicePixelRatio || 1, 2);
      return t * o * r * r > V && (r = Math.sqrt(V / (t * o))), {
        width: Math.max(1, Math.round(t * r)),
        height: Math.max(1, Math.round(o * r)),
        scale: r
      };
    }, j = (e, t, o, r, s, a) => {
      const l = Math.min(Math.max(a, 0), r / 2, s / 2);
      if (!l) {
        e.rect(t, o, r, s);
        return;
      }
      e.moveTo(t + l, o), e.lineTo(t + r - l, o), e.quadraticCurveTo(t + r, o, t + r, o + l), e.lineTo(t + r, o + s - l), e.quadraticCurveTo(t + r, o + s, t + r - l, o + s), e.lineTo(t + l, o + s), e.quadraticCurveTo(t, o + s, t, o + s - l), e.lineTo(t, o + l), e.quadraticCurveTo(t, o, t + l, o);
    }, Q = (e, t, o, r, s) => {
      var p;
      const a = G[((p = t.clip) == null ? void 0 : p.shape) || "rect"] || G.rect;
      if (a.type === $.ELLIPSE) {
        e.beginPath(), e.ellipse(o / 2, r / 2, o / 2, r / 2, 0, 0, Math.PI * 2), e.clip();
        return;
      }
      if (a.type === $.POLYGON && a.createPath && typeof Path2D < "u") {
        e.clip(new Path2D(a.createPath(o, r)));
        return;
      }
      const l = a.radius !== void 0 ? (t.radius || Number.parseFloat(a.radius) || 0) * s : 0;
      e.beginPath(), j(e, 0, 0, o, r, l), e.clip();
    }, K = (e, t, o) => {
      if (!e.clip) return { left: 0, top: 0, width: t, height: o };
      const [r, s] = e.clip.range, a = s[0] - r[0], l = s[1] - r[1];
      return !Number.isFinite(a) || !Number.isFinite(l) || !a || !l ? { left: 0, top: 0, width: t, height: o } : {
        left: -r[0] / a * t,
        top: -r[1] / l * o,
        width: 100 / a * t,
        height: 100 / l * o
      };
    }, ee = (e) => e.filters ? Object.keys(e.filters).map((t) => {
      var r;
      const o = (r = e.filters) == null ? void 0 : r[t];
      return o ? `${t}(${o})` : "";
    }).filter(Boolean).join(" ") : "", te = async (e) => {
      if (!e.src || typeof document > "u") return e.src;
      try {
        const t = await Y(e.src);
        if (!t) return e.src;
        const o = document.createElement("canvas"), { width: r, height: s, scale: a } = q(e);
        o.width = r, o.height = s;
        const l = o.getContext("2d");
        if (!l) return e.src;
        l.save(), (e.flipH || e.flipV) && (l.translate(e.flipH ? r : 0, e.flipV ? s : 0), l.scale(e.flipH ? -1 : 1, e.flipV ? -1 : 1)), Q(l, e, r, s, a);
        const p = ee(e);
        p && (l.filter = p);
        const h = K(e, r, s);
        return l.drawImage(t, h.left, h.top, h.width, h.height), e.colorMask && (l.filter = "none", l.fillStyle = e.colorMask, l.fillRect(0, 0, r, s)), l.restore(), o.toDataURL("image/png");
      } catch {
        return e.src;
      }
    }, oe = async (e) => {
      var s, a;
      const t = (s = e.detail) == null ? void 0 : s.element;
      if (!t || t.type !== "image") return;
      const o = JSON.parse(JSON.stringify(t));
      o.clipSrc = await te(t);
      const r = {
        element: o
      };
      (a = c.onImageAIEntryClick) == null || a.call(c, r), m("image-ai-entry-click", r);
    }, ne = async () => {
      if (!L.value || S) return;
      const [
        { createApp: e },
        { createPinia: t },
        { default: o },
        { default: r },
        s
      ] = await Promise.all([
        import("vue"),
        import("./pinia-CVat9nJz.js"),
        import("./InnerApp-DTdTRK-f.js"),
        import("./index-CwjKu8Yc.js"),
        import("./index-jHhH4l0I.js")
      ]);
      if (!L.value) return;
      A = s.useSlidesStore, R = s.useScreenStore, F = s.useMainStore, O = s.useSnapshotStore;
      const a = document.createElement("div");
      a.style.width = "100%", a.style.height = "100%", L.value.appendChild(a), S = e(o, {
        initData: c.initData,
        onUploadFile: c.onUploadFile,
        readonly: c.readonly,
        onChange: c.onChange,
        onSave: c.onSave,
        onInitFinished: c.onInitFinished,
        onReturn: c.onReturn,
        theme: D.value
      }), f = t(), S.use(f), S.provide(W, { locale: E }), S.provide("__lt_ppt_theme__", D), S.provide("__lt_ppt_image_ai_entry_enabled__", J), S.config.globalProperties.$t = Te(E), S.use(r), S.mount(a);
    }, ie = () => {
      S && (S.unmount(), S = null, f = null), L.value && (L.value.innerHTML = "");
    };
    me(() => {
      B = ne();
    }), fe(() => {
      ie();
    }), H(() => c.locale, (e) => {
      E.value = e ?? "zh-CN";
    }), H(() => c.theme, (e) => {
      D.value = e ?? "dark";
    });
    const b = () => !f || !A ? null : A(f), P = () => !f || !F ? null : F(f), le = () => !f || !O ? null : O(f), k = async () => (!f && B && await B, !!f), M = (e) => new Promise((t) => {
      if (typeof Image > "u") {
        t(null);
        return;
      }
      const o = new Image();
      o.decoding = "sync", o.onload = async () => {
        var r;
        try {
          await ((r = o.decode) == null ? void 0 : r.call(o));
        } catch {
        }
        t({
          width: o.naturalWidth || o.width,
          height: o.naturalHeight || o.height
        });
      }, o.onerror = () => t(null), o.src = e;
    }), I = (e, t) => Number.isFinite(e) && e > 0 ? e : t, U = (e, t, o, r, s) => {
      let a = I(e.width, (t == null ? void 0 : t.width) || s.width), l = I(e.height, (t == null ? void 0 : t.height) || s.height);
      if (e.width !== void 0 && e.height === void 0 && (t != null && t.width) && t.height)
        l = a * t.height / t.width;
      else if (e.height !== void 0 && e.width === void 0 && (t != null && t.width) && t.height)
        a = l * t.width / t.height;
      else if (e.width === void 0 && e.height === void 0 && (t != null && t.width) && t.height) {
        const p = Math.min(1, o / t.width, r / t.height);
        a = t.width * p, l = t.height * p;
      }
      return { width: a, height: l };
    }, N = (e) => new Promise((t) => {
      if (typeof document > "u") {
        t(null);
        return;
      }
      const o = document.createElement("video");
      o.preload = "metadata", o.muted = !0, o.onloadedmetadata = () => {
        const r = o.videoWidth, s = o.videoHeight;
        o.onloadedmetadata = null, o.onerror = null, o.removeAttribute("src"), o.load(), t(r && s ? { width: r, height: s } : null);
      }, o.onerror = () => {
        o.onloadedmetadata = null, o.onerror = null, o.removeAttribute("src"), o.load(), t(null);
      }, o.src = e;
    }), v = (e, t) => t.slideId ? e.slides.findIndex((o) => o.id === t.slideId) : t.slideIndex !== void 0 ? Number.isInteger(t.slideIndex) && t.slideIndex >= 0 && t.slideIndex < e.slides.length ? t.slideIndex : -1 : e.slideIndex, ae = async (e, t, o, r, s = { width: 300, height: 200 }) => {
      const a = await M(e);
      return U(t, a, o, r, s);
    }, x = async () => {
      const e = le();
      e && await e.addSnapshot();
    }, re = async (e) => {
      if (!e.src || !await k()) return null;
      const t = b(), o = P();
      if (!t || !o || !t.slides.length) return null;
      const r = v(t, e);
      if (r === -1) return null;
      t.slideIndex !== r && t.updateSlideIndex(r);
      const s = t.viewportSize, a = t.viewportSize * t.viewportRatio, { width: l, height: p } = await ae(e.src, e, s, a), { nanoid: h } = await import("./index.browser-Wq18ov6h.js"), d = {
        type: "image",
        id: h(10),
        src: e.src,
        width: l,
        height: p,
        left: e.left ?? (s - l) / 2,
        top: e.top ?? (a - p) / 2,
        fixedRatio: e.fixedRatio ?? !0,
        rotate: e.rotate ?? 0
      };
      return t.addElement(d), e.select !== !1 && o.setActiveElementIdList([d.id]), await x(), JSON.parse(JSON.stringify(d));
    }, se = (e, t, o) => {
      var p, h;
      const r = !!o.slideId || o.slideIndex !== void 0, s = v(e, o), a = o.elementId || (t.activeElementIdList.length === 1 ? t.activeElementIdList[0] : t.handleElementId);
      if (!a) return null;
      if (r || !o.elementId) {
        if (s === -1) return null;
        const d = (p = e.slides[s]) == null ? void 0 : p.elements.find((u) => u.id === a);
        return (d == null ? void 0 : d.type) === "image" ? { slideIndex: s, element: d } : null;
      }
      const l = (h = e.slides[e.slideIndex]) == null ? void 0 : h.elements.find((d) => d.id === a);
      if ((l == null ? void 0 : l.type) === "image") return { slideIndex: e.slideIndex, element: l };
      for (let d = 0; d < e.slides.length; d++) {
        const u = e.slides[d].elements.find((y) => y.id === a);
        if ((u == null ? void 0 : u.type) === "image") return { slideIndex: d, element: u };
      }
      return null;
    }, de = async (e) => {
      if (!e.src || !await k()) return null;
      const t = b(), o = P();
      if (!t || !o || !t.slides.length) return null;
      const r = se(t, o, e);
      if (!r) return null;
      const { slideIndex: s, element: a } = r, l = { src: e.src };
      if (e.fixedRatio !== void 0 && (l.fixedRatio = e.fixedRatio), e.resetClip && (l.clip = void 0), !(e.keepSize === !0 && e.width === void 0 && e.height === void 0)) {
        const d = await M(e.src), u = I(e.width, a.width);
        let y = I(e.height, a.height);
        e.height === void 0 && (d != null && d.width) && d.height && (y = u * d.height / d.width), l.width = u, l.height = y, l.left = a.left, l.top = a.top, l.clip = void 0;
      }
      const h = t.slides[s].id;
      return t.updateElement({ id: a.id, props: l, slideId: h }), t.slideIndex !== s && t.updateSlideIndex(s), e.select !== !1 && o.setActiveElementIdList([a.id]), await x(), JSON.parse(JSON.stringify({ ...a, ...l }));
    }, ce = async (e) => {
      if (!e.src || !await k()) return null;
      const t = b(), o = P();
      if (!t || !o || !t.slides.length) return null;
      const r = v(t, e);
      if (r === -1) return null;
      t.slideIndex !== r && t.updateSlideIndex(r);
      const s = t.viewportSize, a = t.viewportSize * t.viewportRatio, l = await N(e.src), { width: p, height: h } = U(e, l, s, a, { width: 500, height: 300 }), { nanoid: d } = await import("./index.browser-Wq18ov6h.js"), u = {
        type: "video",
        id: d(10),
        src: e.src,
        width: p,
        height: h,
        left: e.left ?? (s - p) / 2,
        top: e.top ?? (a - h) / 2,
        rotate: e.rotate ?? 0,
        autoplay: e.autoplay ?? !1
      };
      return e.poster !== void 0 && (u.poster = e.poster), e.ext && (u.ext = e.ext), t.addElement(u), e.select !== !1 && o.setActiveElementIdList([u.id]), await x(), JSON.parse(JSON.stringify(u));
    }, ue = (e, t, o) => {
      var p, h;
      const r = !!o.slideId || o.slideIndex !== void 0, s = v(e, o), a = o.elementId || (t.activeElementIdList.length === 1 ? t.activeElementIdList[0] : t.handleElementId);
      if (!a) return null;
      if (r || !o.elementId) {
        if (s === -1) return null;
        const d = (p = e.slides[s]) == null ? void 0 : p.elements.find((u) => u.id === a);
        return (d == null ? void 0 : d.type) === "video" ? { slideIndex: s, element: d } : null;
      }
      const l = (h = e.slides[e.slideIndex]) == null ? void 0 : h.elements.find((d) => d.id === a);
      if ((l == null ? void 0 : l.type) === "video") return { slideIndex: e.slideIndex, element: l };
      for (let d = 0; d < e.slides.length; d++) {
        const u = e.slides[d].elements.find((y) => y.id === a);
        if ((u == null ? void 0 : u.type) === "video") return { slideIndex: d, element: u };
      }
      return null;
    };
    return i({
      getSlides: () => {
        const e = b();
        return e ? JSON.parse(JSON.stringify(e.slides)) : [];
      },
      getSelectedElements: () => {
        const e = P();
        return e ? JSON.parse(JSON.stringify(e.activeElementList)) : [];
      },
      setSlides: (e) => {
        const t = b();
        t && t.setSlides(e);
      },
      startScreening: () => {
        if (!f || !R) return;
        R(f).setScreening(!0);
      },
      getCurrentIndex: () => {
        const e = b();
        return e ? e.slideIndex : 0;
      },
      insertImage: re,
      replaceImage: de,
      insertVideo: ce,
      replaceVideo: async (e) => {
        if (!e.src || !await k()) return null;
        const t = b(), o = P();
        if (!t || !o || !t.slides.length) return null;
        const r = ue(t, o, e);
        if (!r) return null;
        const { slideIndex: s, element: a } = r, l = { src: e.src };
        if (e.autoplay !== void 0 && (l.autoplay = e.autoplay), e.poster !== void 0 && (l.poster = e.poster || void 0), e.ext !== void 0 && (l.ext = e.ext || void 0), !(e.keepSize === !0 && e.width === void 0 && e.height === void 0)) {
          const d = await N(e.src), u = I(e.width, a.width);
          let y = I(e.height, a.height);
          e.height === void 0 && (d != null && d.width) && d.height && (y = u * d.height / d.width), l.width = u, l.height = y, l.left = a.left, l.top = a.top;
        }
        const h = t.slides[s].id;
        return t.updateElement({ id: a.id, props: l, slideId: h }), t.slideIndex !== s && t.updateSlideIndex(s), e.select !== !1 && o.setActiveElementIdList([a.id]), await x(), JSON.parse(JSON.stringify({ ...a, ...l }));
      }
    }), (e, t) => (Se(), Ce("div", {
      ref_key: "containerRef",
      ref: L,
      class: "lt-ppt-container",
      style: ye(Z.value),
      onImageAiEntryClick: oe
    }, null, 36));
  }
}), ke = (n, i) => {
  const g = n.__vccOpts || n;
  for (const [c, m] of i)
    g[c] = m;
  return g;
}, Oe = /* @__PURE__ */ ke(we, [["__scopeId", "data-v-473d1efa"]]), ve = [
  "SourceHanSans",
  "SourceHanSerif",
  "WenDingPLSongTi",
  "AlibabaPuHuiTi",
  "ZhuQueFangSong",
  "LXGWWenKai",
  "WenDingPLKaiTi",
  "DeYiHei",
  "MiSans",
  "CangerXiaowanzi",
  "YousheTitleBlack",
  "FengguangMingrui",
  "ShetuModernSquare",
  "ZcoolHappy",
  "ZizhiQuXiMai",
  "SucaiJishiKangkang",
  "SucaiJishiCoolSquare",
  "TuniuRounded",
  "RuiziZhenyan",
  "SourceSerif4",
  "Inter",
  "JetBrainsMono",
  "Literata",
  "Roboto",
  "OpenSans",
  "Montserrat",
  "SourceSansPro",
  "Merriweather"
], Be = (n = "/fonts") => {
  if (typeof document > "u" || !document.head) return;
  const i = n.replace(/\/$/, ""), g = document.createElement("style");
  g.textContent = ve.map(
    (c) => `@font-face { font-display: swap; font-family: ${c}; src: url('${i}/${c}.woff2') format('woff2'); }`
  ).join(`
`), document.head.appendChild(g);
};
export {
  $ as C,
  Oe as L,
  ke as _,
  G as a,
  Fe as c,
  Be as l,
  Re as u
};
