[
  {
    "path": ".github/release-drafter.yml",
    "content": "name-template: 'v$RESOLVED_VERSION'\ntag-template: 'v$RESOLVED_VERSION'\ncategories:\n  - title: '🚀 新功能'\n    labels:\n      - '新功能'\n  - title: '🐛 Bug 修复'\n    labels:\n      - 'bug'\n  - title: '🧰 日常维护'\n    label: '日常维护'\nchange-template: '- $TITLE @$AUTHOR (#$NUMBER)'\nchange-title-escapes: '\\<*_&'\nversion-resolver:\n  major:\n    labels:\n      - 'major'\n  minor:\n    labels:\n      - 'minor'\n  patch:\n    labels:\n      - 'patch'\n  default: patch\ntemplate: |\n  # GoEasyDesigner 窗口设计师\n  * 基于 go 语言 使用 wails框架, 支持 window macos linux 等系统.\n\n  $CHANGES\nno-changes-template: |\n  快下载体验~"
  },
  {
    "path": ".github/releasesText.md",
    "content": "# GoEasyDesigner 窗口设计师\n\n奋斗了{{用了多少时间}}，本次更新内容如下：\n\n{{最新发布信息}}\n\n{{变更内容}}"
  },
  {
    "path": ".github/workflows/debug.yml",
    "content": "name: WailsBuild\n\non:\n  workflow_dispatch:\n#  push:\n#    paths-ignore:\n#      - '**/*.md'\n#      - '**/*.yml'\n#      - .gitignore\n#      - .editorconfig\n#      - appveyor.yml\n#      - 'azure-pipelines*.yml'\n#      - 'ci/azure-pipelines/template*.yml'\n  pull_request:\n    paths-ignore:\n      - '**/*.md'\n      - .gitignore\n      - .editorconfig\n      - appveyor.yml\n      - 'azure-pipelines*.yml'\n      - 'ci/azure-pipelines/template*.yml'\n\njobs:\n\n  build-windows:\n    timeout-minutes: 20\n    runs-on: windows-latest\n    steps:\n      - uses: actions/checkout@v3\n      - uses: actions/cache@v3\n        with:\n          path: |\n\n            C:\\npm\\cache\n          key: ${{ runner.os }}-js-${{ hashFiles('**/package.json') }}\n          restore-keys: |\n            ${{ runner.os }}-js-\n\n      - name: Set up Go\n        uses: actions/setup-go@v4\n        with:\n          go-version: '^1.21.0'\n          cache-dependency-path: |\n            **/go.sum\n            **/go.mod\n          go-version-file: 'go.mod'\n\n      - name: install wails\n        run: go install github.com/wailsapp/wails/v2/cmd/wails@latest\n\n      #- name: install webview2\n      #  run: |\n      #    npm config get cache\n      #    choco install webview2-runtime\n\n        #- name: garble\n        #  run: go install mvdan.cc/garble@latest\n\n        #- name: nsis\n        # run: choco install nsis\n\n        #- name: upx\n        #  run: choco install upx\n\n      - name: build\n        run: |\n          cd GoEasyDesigner\n          wails build -debug \n\n\n      - uses: actions/upload-artifact@v3\n        with:\n          name: debug-${{ runner.os }}\n          path: GoEasyDesigner/build/bin/GoEasyDesigner.exe\n\n\n  build-ubuntu:\n    runs-on: ubuntu-latest\n    steps:\n      - uses: actions/checkout@v3\n      - uses: actions/cache@v3\n        with:\n          path: |\n\n            /home/runner/.npm\n          key: ${{ runner.os }}-js-${{ hashFiles('**/package.json') }}\n          restore-keys: |\n            ${{ runner.os }}-js-\n\n      - name: Set up Go\n        uses: actions/setup-go@v4\n        with:\n          go-version: '^1.21.0'\n          cache-dependency-path: |\n            **/go.sum\n            **/go.mod\n          go-version-file: 'go.mod'\n\n      - name: Install linux dependencies\n        run: sudo apt-get update -y && sudo apt-get install -y libgtk-3-dev libwebkit2gtk-4.0-dev build-essential pkg-config\n\n      - name: install wails\n        run: go install github.com/wailsapp/wails/v2/cmd/wails@latest\n\n        #- name: garble\n        #  run: go install mvdan.cc/garble@latest\n\n        #- name: nsis\n        # run: apt install nsis\n\n        #- name: upx\n        #  run: apt install upx\n\n      - name: build\n        run: |\n          npm config get cache\n          cd GoEasyDesigner\n          wails build -debug \n\n      - uses: actions/upload-artifact@v3\n        with:\n          name: debug-${{ runner.os }}\n          path: GoEasyDesigner/build/bin/GoEasyDesigner\n\n\n  build-MacOS:\n    runs-on: macos-latest\n    steps:\n      - uses: actions/checkout@v3\n      - uses: actions/cache@v3\n        with:\n          path: |\n\n            /Users/runner/.npm\n          key: ${{ runner.os }}-js-${{ hashFiles('**/package.json') }}\n          restore-keys: |\n            ${{ runner.os }}-js-\n\n      - name: Set up Go\n        uses: actions/setup-go@v4\n        with:\n          go-version: '^1.21.0'\n          cache-dependency-path: |\n            **/go.sum\n            **/go.mod\n          go-version-file: 'go.mod'\n\n      - name: install wails\n        run: go install github.com/wailsapp/wails/v2/cmd/wails@latest\n\n        #- name: garble\n        #  run: go install mvdan.cc/garble@latest\n\n        #- name: nsis\n        # run: apt install nsis\n\n        #- name: upx\n        #  run: apt install upx\n\n      - name: build\n        run: |\n          npm config get cache\n          cd GoEasyDesigner\n          wails build -debug \n\n      - uses: actions/upload-artifact@v3\n        with:\n          name: debug-${{ runner.os }}\n          path: GoEasyDesigner/build/bin/GoEasyDesigner.app\n\n"
  },
  {
    "path": ".github/workflows/jekyll-gh-pages.yml",
    "content": "name: 部署 GitHub Pages\n\non:\n  # Runs on pushes targeting the default branch\n#  push:\n#    branches: [\"main\"]\n\n  # Allows you to run this workflow manually from the Actions tab\n  workflow_dispatch:\n#  push:\n#    paths-ignore:\n#      - '**/*.md'\n#      - '**/*.yml'\n#      - .gitignore\n#      - .editorconfig\n\n#  workflow_run:\n#    workflows: [\"发布软件\"]\n#    types:\n#      - completed\n\n\n# Sets permissions of the GITHUB_TOKEN to allow deployment to GitHub Pages\npermissions:\n  contents: read\n  pages: write\n  id-token: write\n\n# Allow only one concurrent deployment, skipping runs queued between the run in-progress and latest queued.\n# However, do NOT cancel in-progress runs as we want to allow these production deployments to complete.\nconcurrency:\n  group: \"pages\"\n  cancel-in-progress: false\n\njobs:\n  # Build job\n  build:\n    runs-on: ubuntu-latest\n    steps:\n      - name: Checkout\n        uses: actions/checkout@v3\n      - name: Setup Pages\n        uses: actions/configure-pages@v3\n      - uses: actions/cache@v3\n        with:\n          path: |\n            /home/runner/.npm\n          key: ${{ runner.os }}-js-${{ hashFiles('**/package.json') }}\n          restore-keys: |\n            ${{ runner.os }}-js-\n      - name: install\n        run: |\n          cd GoEasyDesigner/frontend/src\n          ./update_github_latest_releases.sh          \n          cd ../\n          npm i\n          npm run build\n\n      - name: Build with Jekyll\n        uses: actions/jekyll-build-pages@v1\n        with:\n          source: ./GoEasyDesigner/frontend/dist\n          destination: ./_site\n      - name: Upload artifact\n        uses: actions/upload-pages-artifact@v2\n      - name: Deploy file\n        uses: wlixcc/SFTP-Deploy-Action@v1.2.4\n        with:\n          server: ${{ secrets.FTP_SERVER }}\n          port: ${{ secrets.FTP_PORT }}\n          username: ${{ secrets.FTP_USERNAME }}\n          password: ${{ secrets.FTP_PASSWORD }}\n          local_path: './GoEasyDesigner/frontend/dist/*'\n          remote_path: '/config/www'\n          sftp_only: true\n\n  # Deployment job\n  deploy:\n    environment:\n      name: github-pages\n      url: ${{ steps.deployment.outputs.page_url }}\n    runs-on: ubuntu-latest\n    needs: build\n    steps:\n      - name: Deploy to GitHub Pages\n        id: deployment\n        uses: actions/deploy-pages@v2\n"
  },
  {
    "path": ".github/workflows/发布软件.yml",
    "content": "name: 发布软件\n\non:\n  workflow_dispatch:\n  push:\n    paths-ignore:\n      - '**/*.md'\n      - '**/*.yml'\n      - .gitignore\n      - .editorconfig\n\npermissions: write-all # 给所有工作写权限\n\n\njobs:\n  jobs_v:\n    name: 构建版本号和变更信息\n    runs-on: ubuntu-latest\n    outputs:\n      version: ${{ steps.create_version.outputs.NewVersion }}  # 版本号\n      body: ${{ steps.create_body.outputs.Body }} # 版本变更内容\n    steps:\n      - uses: actions/checkout@v4\n        with:\n          submodules: recursive\n          fetch-depth: 0\n      - name: 检查是否 \"发布\"\n        run: |\n          latest_commit_message=$(git log -1 --pretty=%B)\n          if [[ $latest_commit_message == *\"发布\"* ]]; then\n            echo \"找到发布关键字继续工作流\"\n          else\n            echo \"没有找到发布关键字停止工作流\"\n            exit 1  # 停止工作流程\n          fi\n      - name: 递增版本号\n        id: create_version\n        uses: duolabmeng6/action-autotag-python@master\n        with:\n          token: ${{ secrets.GITHUB_TOKEN }}\n      - name: 获取更新日志\n        id: create_body\n        uses: duolabmeng6/action-Releases-log@main\n        with:\n          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}\n          FILE: .github/releasesText.md\n          KEYS: bug,改进,优化,新增,删除\n      - name: 查看版本号和更新日志\n        run: |\n          echo ${{ format('version={0}', steps.create_version.outputs.NewVersion ) }}\n          echo \"${{ steps.create_body.outputs.Body }}\"\n\n  jobs_macos:\n    # 暂停\n    #if: false\n    needs: [ jobs_v ]\n    name: 构建macos软件\n    runs-on: macos-latest\n    env:\n      version: ${{ needs.jobs_v.outputs.version }}\n      body: ${{ needs.jobs_v.outputs.Body }}\n    steps:\n      - name: Checkout code\n        uses: actions/checkout@v4\n      - name: 构建缓存\n        uses: actions/cache@v4\n        with:\n          path: |\n            /Users/runner/.npm\n          key: ${{ runner.os }}-js-${{ hashFiles('**/package.json') }}\n          restore-keys: |\n            ${{ runner.os }}-js-\n      - name: 查看文件\n        run: |\n          pwd\n          ls -la\n          echo \"New Body: ${{ env.body }}\"\n\n      - name: 安装 go\n        uses: actions/setup-go@v4\n        with:\n          go-version: '^1.23.8'\n          cache-dependency-path: |\n            **/go.sum\n            **/go.mod\n          go-version-file: 'go.mod'\n      - name: 安装 pnpm\n        uses: pnpm/action-setup@v4\n        with:\n          version: 10\n      - run: go version\n      - name: 安装 wails 工具\n        run: |\n          go install github.com/wailsapp/wails/v2/cmd/wails@latest\n          wails\n      - name: 生成 Version.go 文件\n        run: |\n          echo -e \"package mymodel\\n\\nvar Version = \\\"${version}\\\"\" > GoEasyDesigner/mymodel/Version.go\n          cat GoEasyDesigner/mymodel/Version.go\n      - name: 编译\n        run: |\n          pwd\n          cd GoEasyDesigner\n          wails build\n          ls -la\n      - name: 查看编译的文件保存\n        run: |\n          ls -la\n          mkdir -p /tmp/artifacts\n          cp -r GoEasyDesigner/build/bin/GoEasyDesigner.app /tmp/artifacts/GoEasyDesigner.app\n          cp -r GoEasyDesigner/build/dmg.sh /tmp/artifacts/dmg.sh\n          chmod +x /tmp/artifacts/GoEasyDesigner.app/Contents/MacOS/GoEasyDesigner\n      - name: 创建压缩包\n        run: |\n          cd /tmp/artifacts/\n          ./dmg.sh\n          zip -r ./GoEasyDesigner_MacOS.zip ./GoEasyDesigner.app\n\n      - name: 上传产物\n        uses: actions/upload-artifact@v4\n        with:\n          name: macos\n          path: |\n            /tmp/artifacts/*.zip\n            /tmp/artifacts/*.dmg\n\n\n  jobs_window:\n    needs: jobs_v # 等待 jobs_v 任务完成才执行\n    name: 构建window软件\n    timeout-minutes: 20\n    runs-on: windows-latest\n    env:\n      version: ${{ needs.jobs_v.outputs.version }}\n      body: ${{ needs.jobs_v.outputs.Body }}\n    steps:\n      - uses: actions/checkout@v4\n        with:\n          submodules: recursive\n      - name: 构建缓存\n        uses: actions/cache@v4\n        with:\n          path: |\n            C:\\npm\\cache\n          key: ${{ runner.os }}-js-${{ hashFiles('**/package.json') }}\n          restore-keys: |\n            ${{ runner.os }}-js-\n      - name: 读入环境信息\n        run: |\n          echo ${{ format('version {0}', env.version ) }} # 版本号\n      - name: 安装 go\n        uses: actions/setup-go@v4\n        with:\n          go-version: '^1.23.8'\n          cache-dependency-path: |\n            **/go.sum\n            **/go.mod\n          go-version-file: 'go.mod'\n      - name: 安装 pnpm\n        uses: pnpm/action-setup@v4\n        with:\n          version: 10\n      - run: go version\n      - name: 安装 UPX\n        uses: crazy-max/ghaction-upx@v2\n        with:\n          install-only: true\n      - name: 安装 wails 工具\n        run: |\n          go install github.com/wailsapp/wails/v2/cmd/wails@latest\n          wails\n      - name: 生成 Version.go 文件\n        shell: bash\n        run: |\n          echo -e \"package mymodel\\n\\nvar Version = \\\"${version}\\\"\" > GoEasyDesigner/mymodel/Version.go\n          cat GoEasyDesigner/mymodel/Version.go\n      - name: 编译exe\n        run: |\n          cd GoEasyDesigner\n          wails build -webview2 embed -upx\n          ls\n      - name: 上传产物\n        uses: actions/upload-artifact@v4\n        with:\n          name: window\n          path: |\n            GoEasyDesigner/build/bin/*.exe\n\n\n  jobs4:\n    needs: [ jobs_v,jobs_macos,jobs_window ]\n    name: 发布版本\n    runs-on: ubuntu-latest\n    env:\n      version: ${{ needs.jobs_v.outputs.version }}\n      body: ${{ needs.jobs_v.outputs.Body }}\n    steps:\n      - uses: actions/checkout@v4\n        with:\n          submodules: recursive\n          fetch-depth: 0\n      - name: 下载产物\n        id: download\n        uses: actions/download-artifact@v4\n        with:\n          path: ./\n      - name: 读入环境信息\n        run: |\n          echo ${{ format('version {0}', env.version ) }}\n          echo ${{steps.download.outputs.download-path}}\n          ls -R\n      - name: 发布文件\n        uses: ncipollo/release-action@v1\n        with:\n          token: ${{ secrets.GITHUB_TOKEN }}\n          allowUpdates: true # 覆盖文件\n          #draft: true # 草稿 自己可见 版本号会保持一样 默认是自动发布 latest\n          #prerelease: true # 预发布 别人可以看到 版本号会继续加\n          tag: ${{ env.version }} # 版本号 v0.1.0\n          body: ${{ env.body }}\n          artifacts: \"macos/*.zip,macos/*.dmg,window/*.exe,window/*.zip\"\n\n"
  },
  {
    "path": ".gitignore",
    "content": "# Logs\nlogs\n*.log\nnpm-debug.log*\nyarn-debug.log*\nyarn-error.log*\npnpm-debug.log*\nlerna-debug.log*\n\nnode_modules\n.DS_Store\ndist\ndist-ssr\ncoverage\n*.local\n\n/cypress/videos/\n/cypress/screenshots/\n\n# Editor directories and files\n.vscode/*\n!.vscode/extensions.json\n.idea\n*.suo\n*.ntvs*\n*.njsproj\n*.sln\n*.sw?\n.vscode\n*.lockb\nGoEasyDesigner/frontend/package.json.md5\npackage-lock.json\npackage.json.md5\nwails-demo/frontend/package.json.md5\nwails-demo/frontend/package-lock.json\nGoEasyDesigner/ssh_nginx/.env\n"
  },
  {
    "path": ".gitmodules",
    "content": "[submodule \"go-easy-demo\"]\n\tpath = go-easy-demo\n\turl = https://github.com/duolabmeng6/wails-template-vue-go-easy\n"
  },
  {
    "path": "CNAME",
    "content": "ggg.yx24.me\n"
  },
  {
    "path": "GoEasyDesigner/.gitignore",
    "content": "build/bin\nnode_modules\nfrontend/dist\n"
  },
  {
    "path": "GoEasyDesigner/Dockerfile",
    "content": "FROM node:18-alpine\nWORKDIR /app\nCOPY ./frontend .\n\nRUN npm install --registry=http://registry.npmmirror.com\nRUN npm run build\n\n# docker build -t my-node-app .\n# docker run -v ./frontend:/app -p 3000:3000 -it --rm --name my-running-app my-node-app /bin/sh\n\nFROM nginx:alpine-slim\nCOPY --from=0 /app/dist /usr/share/nginx/html/\nCOPY nginx.conf /etc/nginx/conf.d/default.conf\nEXPOSE 3005"
  },
  {
    "path": "GoEasyDesigner/Terminal/Terminal_darwin.go",
    "content": "//go:build darwin\n// +build darwin\n\npackage Terminal\n\nimport (\n\t\"bufio\"\n\t\"errors\"\n\t\"fmt\"\n\t\"os/exec\"\n\t\"sync\"\n\t\"syscall\"\n)\n\ntype Terminal struct {\n\tcmd       *exec.Cmd\n\tstdout    *bufio.Scanner\n\tisRunning bool\n\tisDone    bool\n\tlock      sync.Mutex\n}\n\nfunc NewTerminal() *Terminal {\n\treturn &Terminal{}\n}\n\nfunc (t *Terminal) StartCommand(command string, fn func(string, error)) bool {\n\tt.lock.Lock()\n\tdefer t.lock.Unlock()\n\n\tif t.isRunning {\n\t\tfn(\"\", fmt.Errorf(\"已有命令在运行\"))\n\t\treturn false\n\t}\n\n\tcmd := exec.Command(\"bash\", \"-c\", command)\n\tcmd.SysProcAttr = &syscall.SysProcAttr{\n\t\tSetpgid: true,\n\t}\n\n\tstdout, err := cmd.StdoutPipe()\n\tif err != nil {\n\t\tfn(\"\", err)\n\t\treturn false\n\t}\n\n\tif err := cmd.Start(); err != nil {\n\t\tfn(\"\", err)\n\t\treturn false\n\t}\n\tt.cmd = cmd\n\tt.stdout = bufio.NewScanner(stdout)\n\tt.isRunning = true\n\n\tgo func() {\n\t\tfor t.stdout.Scan() {\n\t\t\toutput := t.stdout.Text()\n\t\t\tfn(output, nil)\n\t\t}\n\n\t\tif err := t.stdout.Err(); err != nil {\n\t\t\tfn(\"\", err)\n\t\t}\n\n\t\tt.lock.Lock()\n\t\tt.isRunning = false\n\t\tt.isDone = true\n\t\tt.lock.Unlock()\n\t}()\n\n\tgo func() {\n\t\tcmd.Wait()\n\t\tt.lock.Lock()\n\t\tt.isRunning = false\n\t\tt.lock.Unlock()\n\t\tprintln(\"命令已完成\")\n\t\tfn(\"\", errors.New(\"命令已完成\"))\n\n\t}()\n\treturn true\n}\n\nfunc (t *Terminal) StopCommand() {\n\tt.lock.Lock()\n\tdefer t.lock.Unlock()\n\n\tif t.isRunning {\n\t\terr := syscall.Kill(-t.cmd.Process.Pid, syscall.SIGKILL)\n\t\tif err != nil {\n\t\t\treturn\n\t\t}\n\t}\n}\n\nfunc (t *Terminal) StopCommand2() {\n\tt.lock.Lock()\n\tdefer t.lock.Unlock()\n\t//发送 ctrl + c 的信号 让程序平稳的退出\n\n\t// 向进程发送Ctrl+C信号\n\tprocess := t.cmd.Process\n\tif process != nil {\n\t\t//err := process.Signal(syscall.SIGHUP)\n\t\terr := syscall.Kill(-t.cmd.Process.Pid, syscall.SIGTERM)\n\n\t\tif err != nil {\n\t\t\t// 处理错误\n\t\t}\n\t}\n}\nfunc (t *Terminal) IsCommandDone() bool {\n\tt.lock.Lock()\n\tdefer t.lock.Unlock()\n\treturn t.isDone\n}\n"
  },
  {
    "path": "GoEasyDesigner/Terminal/Terminal_darwin_test.go",
    "content": "package Terminal\n\nimport (\n\t\"testing\"\n\t\"time\"\n)\n\nfunc TestNewTerminalMac(t *testing.T) {\n\tterminal := NewTerminal()\n\tif terminal == nil {\n\t\tt.Error(\"NewTerminalWindow() failed\")\n\t}\n\t//\n\t命令 := `\ncd /Users/ll/Documents/GitHub/GoEasyDesigner/wails-demo/frontend\nnpm run dev\n`\n\n\tterminal.StartCommand(命令, func(output string, err error) {\n\t\tif err != nil {\n\t\t\tprint(\"err:\", output)\n\t\t\tprint(\"err2:\", err.Error())\n\t\t\t//t.Error(err.Error())\n\t\t}\n\t\tprintln(output)\n\t})\n\n\ttime.Sleep(3 * time.Second)\n\tterminal.StopCommand2()\n\tprintln(\"停止命令2\")\n\ttime.Sleep(10 * time.Second)\n\tterminal.StopCommand()\n\tprintln(\"停止命令1\")\n\n}\n"
  },
  {
    "path": "GoEasyDesigner/Terminal/Terminal_window.go",
    "content": "//go:build windows\n// +build windows\n\npackage Terminal\n\nimport (\n\t\"bufio\"\n\t\"errors\"\n\t\"fmt\"\n\t\"github.com/duolabmeng6/goefun/ecore\"\n\t\"os/exec\"\n\t\"sync\"\n\t\"syscall\"\n)\n\ntype Terminal struct {\n\tcmd       *exec.Cmd\n\tstdout    *bufio.Scanner\n\tisRunning bool\n\tisDone    bool\n\tlock      sync.Mutex\n}\n\nfunc NewTerminal() *Terminal {\n\treturn &Terminal{}\n}\n\nfunc (t *Terminal) StartCommand(command string, fn func(string, error)) bool {\n\tt.lock.Lock()\n\tdefer t.lock.Unlock()\n\n\tif t.isRunning {\n\t\tfn(\"\", fmt.Errorf(\"已有命令在运行\"))\n\t\treturn false\n\t}\n\n\tcmd := exec.Command(\"cmd\", \"/C\", command)\n\t// 隐藏黑色窗口\n\t// For Windows, use Start instead of Run to hide the console window\n\tcmd.SysProcAttr = &syscall.SysProcAttr{HideWindow: true}\n\n\tstdout, err := cmd.StdoutPipe()\n\tif err != nil {\n\t\tfn(\"\", err)\n\t\treturn false\n\t}\n\n\tif err := cmd.Start(); err != nil {\n\t\tfn(\"\", err)\n\t\treturn false\n\t}\n\tt.cmd = cmd\n\tt.stdout = bufio.NewScanner(stdout)\n\tt.isRunning = true\n\n\tgo func() {\n\t\tfor t.stdout.Scan() {\n\t\t\toutput := t.stdout.Text()\n\t\t\toutput = ecore.E文本编码转换(output, \"\", \"utf8\")\n\t\t\tfn(output, nil)\n\t\t}\n\n\t\tif err := t.stdout.Err(); err != nil {\n\t\t\tfn(\"\", err)\n\t\t}\n\n\t\tt.lock.Lock()\n\t\tt.isRunning = false\n\t\tt.isDone = true\n\t\tt.lock.Unlock()\n\t}()\n\n\tgo func() {\n\t\tcmd.Wait()\n\t\tt.lock.Lock()\n\t\tt.isRunning = false\n\t\tt.lock.Unlock()\n\t\tprintln(\"命令已完成\")\n\t\tfn(\"\", errors.New(\"命令已完成\"))\n\n\t}()\n\treturn true\n\n}\n\nfunc (t *Terminal) StopCommand() {\n\tt.lock.Lock()\n\tdefer t.lock.Unlock()\n\n\tif t.isRunning {\n\t\tif err := t.cmd.Process.Kill(); err != nil {\n\t\t\tfmt.Println(\"无法终止命令:\", err)\n\t\t}\n\t}\n}\n\nfunc (t *Terminal) IsCommandDone() bool {\n\tt.lock.Lock()\n\tdefer t.lock.Unlock()\n\treturn t.isDone\n}\n"
  },
  {
    "path": "GoEasyDesigner/Terminal/Terminal_window_test.go",
    "content": "package Terminal\n\nimport (\n\t\"testing\"\n\t\"time\"\n)\n\nfunc TestNewTerminalWindow(t *testing.T) {\n\tterminal := NewTerminal()\n\tif terminal == nil {\n\t\tt.Error(\"NewTerminalWindow() failed\")\n\t}\n\t//\n\t命令 := `\nset PATH=%PATH%;C:\\Users\\l\\go\\bin\nset PATH=%PATH%;C:\\Users\\l\\go\\go1.21.0\\bin\nset PATH=%PATH%;C:\\Program Files\\nodejs\nset PATH=%PATH%;C:\\Program Files\\nodejs\\node_modules\\npm\\bin\nwails\n`\n\n\tterminal.StartCommand(命令, func(output string, err error) {\n\t\tif err != nil {\n\t\t\tt.Error(err.Error())\n\t\t}\n\t\tprintln(output)\n\t})\n\n\ttime.Sleep(3 * time.Second)\n}\n"
  },
  {
    "path": "GoEasyDesigner/app.go",
    "content": "package main\n\nimport (\n\t\"changeme/Terminal\"\n\t\"changeme/myfunc\"\n\t\"changeme/mymodel\"\n\t\"context\"\n\t\"fmt\"\n\t\"github.com/duolabmeng6/goefun/ecore\"\n\t\"github.com/wailsapp/wails/v2/pkg/runtime\"\n\t\"log\"\n\t\"os\"\n\t\"regexp\"\n)\n\n// App struct\ntype App struct {\n\tctx context.Context\n\t//terminal *TerminalWin.TerminalWin\n\n\tterminal *Terminal.Terminal\n\tIDE插件端口号 string\n\tS设计文件路径  string\n\t文件监视     *mymodel.E文件监视模块\n}\n\n// NewApp creates a new App application struct\nfunc NewApp() *App {\n\ta := &App{}\n\ta.文件监视, _ = mymodel.New文件监视模块()\n\tgo func() {\n\t\ta.文件监视.E开始()\n\t}()\n\n\treturn a\n}\n\n// startup is called when the app starts. The context is saved\n// so we can call the runtime methods\nfunc (a *App) startup(ctx context.Context) {\n\ta.ctx = ctx\n\n}\n\n// Greet returns a greeting for the given name\nfunc (a *App) Greet(name string) string {\n\treturn fmt.Sprintf(\"Hello %s, It's show time!\", name)\n}\nfunc (a *App) E取配置信息() string {\n\tdata := map[string]string{\n\t\t\"IDE插件端口号\": a.IDE插件端口号,\n\t\t\"设计文件路径\":   a.S设计文件路径,\n\t\t\"Version\":  mymodel.Version,\n\t}\n\treturn ecore.E到文本(data)\n}\n\nfunc (a *App) E保存(设计文件路径 string, 保存内容 string) string {\n\t// \tprintln(\"保存\", 设计文件路径, 保存内容)\n\t// 把文件保存到指定路径\n\tos.WriteFile(设计文件路径, []byte(保存内容), 0644)\n\n\treturn \"保存成功\"\n}\nfunc (a *App) E创建函数(窗口事件文件路径 string, 插入函数 string, 插件URL地址 string) string {\n\tprintln(\"保存\", 窗口事件文件路径, 插入函数)\n\t// 把文件保存到指定路径\n\t//os.WriteFile(设计文件路径, []byte(保存内容), 0644)\n\t//读入文件\n\tdata, err := os.ReadFile(窗口事件文件路径)\n\tif err != nil {\n\t\treturn \"读入文件失败\"\n\t}\n\t新内容 := myfunc.InsertCode(string(data), 插入函数)\n\tos.WriteFile(窗口事件文件路径, []byte(新内容), 0644)\n\n\tif 插件URL地址 == \"\" {\n\t\treturn \"保存成功\"\n\t}\n\t//插件URL地址 := \"http://127.0.0.1:13403\"\n\t跳转位置 := ecore.E寻找文本(新内容, 插入函数, 0, false)\n\tprintln(\"新内容\", 新内容)\n\tprintln(\"插入函数\", 插入函数)\n\tprintln(\"跳转位置\", 跳转位置)\n\tmyfunc.E发送跳转代码到ide(插件URL地址, 窗口事件文件路径, 跳转位置)\n\treturn \"保存成功\"\n}\nfunc (a *App) E发送跳转代码到ide(插件URL地址 string, 窗口事件文件路径 string, 跳转位置 int) bool {\n\treturn myfunc.E发送跳转代码到ide(插件URL地址, 窗口事件文件路径, 跳转位置)\n}\nfunc (a *App) E发送跳转代码到ide_命令行方式(ide string, 文件路径 string, 跳转字符串 string) bool {\n\treturn myfunc.E发送跳转代码到ide_命令行方式(ide, 文件路径, 跳转字符串)\n}\nfunc (a *App) E打开文件对话框() string {\n\tprintln(\"E打开文件对话框\")\n\tresult, err := runtime.OpenFileDialog(a.ctx, runtime.OpenDialogOptions{\n\t\tTitle: \"打开文件\",\n\t})\n\tif err != nil {\n\t\treturn \"\"\n\t}\n\treturn result\n}\nfunc (a *App) E保存件对话框() string {\n\tprintln(\"E保存件对话框\")\n\tresult, err := runtime.SaveFileDialog(a.ctx, runtime.SaveDialogOptions{\n\t\tTitle:           \"保存文件\",\n\t\tDefaultFilename: \"design.json\",\n\t})\n\tif err != nil {\n\t\treturn \"\"\n\t}\n\treturn result\n}\nfunc (a *App) E读入文件(文件路径 string) string {\n\treturn ecore.E读入文本(文件路径)\n}\n\nfunc (a *App) E文件枚举(目录 string) []string {\n\tvar files []string\n\t_ = ecore.E文件枚举(目录, \".js|.json\", &files, true, false)\n\treturn files\n}\n\nfunc (a *App) E运行命令(项目根目录 string, 执行命令 string) string {\n\t//项目根目录 := \"/Users/ll/Documents/GitHub/GoEasyDesigner/wails-demo\"\n\t//执行命令 := \"wails dev\"\n\t// \t命令 := \"cd \" + 项目根目录 + \" && \" + 执行命令\n\t// \truntime.EventsEmit(a.ctx, \"运行命令\", \"开始运行 \"+命令)\n\t// \tresult := myfunc.E运行命令(项目根目录, 执行命令, func(回显内容 string) {\n\t// \t\tprintln(\"回显内容\", 回显内容)\n\t// \t\tregex := regexp.MustCompile(\"\\x1b\\\\[[0-9;]*m\")\n\t// \t\tcleaned := regex.ReplaceAllString(回显内容, \"\")\n\t// \t\truntime.EventsEmit(a.ctx, \"运行命令\", cleaned)\n\t// \t})\n\n\t//a.terminal = TerminalWin.NewTerminalWin()\n\ta.terminal = Terminal.NewTerminal()\n\n\t命令 := \"cd \" + 项目根目录 + \" && \" + 执行命令\n\truntime.EventsEmit(a.ctx, \"运行命令\", \"开始运行 \"+命令)\n\ta.terminal.StartCommand(命令, func(output string, err error) {\n\t\tif err != nil {\n\t\t\tlog.Println(\"命令执行错误:\", err)\n\t\t\tif err.Error() == \"命令已完成\" {\n\t\t\t\truntime.EventsEmit(a.ctx, \"运行命令\", err.Error())\n\t\t\t} else {\n\t\t\t\truntime.EventsEmit(a.ctx, \"运行命令\", \"报错:\"+err.Error())\n\t\t\t}\n\t\t} else {\n\t\t\tprintln(\"回显内容\", output)\n\t\t\tregex := regexp.MustCompile(\"\\x1b\\\\[[0-9;]*m\")\n\t\t\tcleaned := regex.ReplaceAllString(output, \"\")\n\t\t\truntime.EventsEmit(a.ctx, \"运行命令\", cleaned)\n\t\t}\n\t})\n\n\treturn \"运行命令成功\"\n}\n\nfunc (a *App) E停止命令() string {\n\ta.terminal.StopCommand()\n\treturn \"停止命令成功\"\n}\n\nfunc (a *App) E检查更新() string {\n\tif myfunc.E是否为macOS系统() {\n\t\tmymodel.E检查更新_Mac()\n\t}\n\tif myfunc.E是否为window系统() {\n\t\tmymodel.E检查更新_window()\n\t}\n\treturn \"检查更新\"\n}\n\nfunc (a *App) E取文件修改时间(文件路径 string) string {\n\t// 获取文件最新的修改时间\n\t文件信息, err := os.Stat(文件路径)\n\tif err != nil {\n\t\treturn \"\"\n\t}\n\t//转换为时间戳\n\t时间戳 := 文件信息.ModTime().Unix()\n\treturn fmt.Sprintf(\"%d\", 时间戳)\n}\n\nfunc (a *App) E添加文件监视(文件路径 string) string {\n\ta.文件监视.E添加监视文件(文件路径, func(文件路径 string) {\n\t\tprintln(\"文件被修改，触发处理函数:\", 文件路径)\n\t\t// 在这里可以添加通知你的程序的逻辑\n\t\truntime.EventsEmit(a.ctx, \"文件被修改\", 文件路径)\n\t})\n\treturn \"添加文件监视\"\n}\nfunc (a *App) E清空文件监视() string {\n\ta.文件监视.E清空()\n\treturn \"清空文件监视\"\n}\n\nfunc (a *App) E打开选择文件夹对话框() string {\n\tprintln(\"E打开选择文件夹对话框\")\n\tresult, err := runtime.OpenDirectoryDialog(a.ctx, runtime.OpenDialogOptions{\n\t\tTitle: \"选择文件夹\",\n\t})\n\tif err != nil {\n\t\treturn \"\"\n\t}\n\treturn result\n}\nfunc (a *App) E取当前目录() string {\n\treturn ecore.E取当前目录()\n}\n\nfunc (a *App) E下载github项目(github项目地址 string, 保存目录 string) string {\n\terr := mymodel.E下载github项目(github项目地址, 保存目录)\n\tif err != nil {\n\t\treturn err.Error()\n\t}\n\n\treturn \"success\"\n}\n\nfunc (a *App) E文件是否存在(路径 string) bool {\n\treturn ecore.E文件是否存在(路径)\n}\n\nfunc (a *App) E搜索文件(路径 string, 文件名 string) []string {\n\t//func E文件枚举(欲寻找的目录 string, 欲寻找的文件名 string, files *[]string, 是否带路径 bool, 是否遍历子目录 bool) error {\n\tvar files []string\n\tecore.E文件枚举(路径, 文件名, &files, true, true)\n\t//for _, v := range files {\n\t//\tprintln(v)\n\t//}\n\treturn files\n}\n\nfunc (a *App) E取运行目录() string {\n\treturn ecore.E取运行目录()\n}\n"
  },
  {
    "path": "GoEasyDesigner/build/README.md",
    "content": "# Build Directory\n\nThe build directory is used to house all the build files and assets for your application. \n\nThe structure is:\n\n* bin - Output directory\n* darwin - macOS specific files\n* windows - Windows specific files\n\n## Mac\n\nThe `darwin` directory holds files specific to Mac builds.\nThese may be customised and used as part of the build. To return these files to the default state, simply delete them\nand\nbuild with `wails build`.\n\nThe directory contains the following files:\n\n- `Info.plist` - the main plist file used for Mac builds. It is used when building using `wails build`.\n- `Info.dev.plist` - same as the main plist file but used when building using `wails dev`.\n\n## Windows\n\nThe `windows` directory contains the manifest and rc files used when building with `wails build`.\nThese may be customised for your application. To return these files to the default state, simply delete them and\nbuild with `wails build`.\n\n- `icon.ico` - The icon used for the application. This is used when building using `wails build`. If you wish to\n  use a different icon, simply replace this file with your own. If it is missing, a new `icon.ico` file\n  will be created using the `appicon.png` file in the build directory.\n- `installer/*` - The files used to create the Windows installer. These are used when building using `wails build`.\n- `info.json` - Application details used for Windows builds. The data here will be used by the Windows installer,\n  as well as the application itself (right click the exe -> properties -> details)\n- `wails.exe.manifest` - The main application manifest file."
  },
  {
    "path": "GoEasyDesigner/build/darwin/Info.dev.plist",
    "content": "<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n    <dict>\n        <key>CFBundlePackageType</key>\n        <string>APPL</string>\n        <key>CFBundleName</key>\n        <string>{{.Info.ProductName}}</string>\n        <key>CFBundleExecutable</key>\n        <string>{{.Name}}</string>\n        <key>CFBundleIdentifier</key>\n        <string>com.wails.{{.Name}}</string>\n        <key>CFBundleVersion</key>\n        <string>{{.Info.ProductVersion}}</string>\n        <key>CFBundleGetInfoString</key>\n        <string>{{.Info.Comments}}</string>\n        <key>CFBundleShortVersionString</key>\n        <string>{{.Info.ProductVersion}}</string>\n        <key>CFBundleIconFile</key>\n        <string>iconfile</string>\n        <key>LSMinimumSystemVersion</key>\n        <string>10.13.0</string>\n        <key>NSHighResolutionCapable</key>\n        <string>true</string>\n        <key>NSHumanReadableCopyright</key>\n        <string>{{.Info.Copyright}}</string>\n        <key>NSAppTransportSecurity</key>\n        <dict>\n            <key>NSAllowsLocalNetworking</key>\n            <true/>\n        </dict>\n    </dict>\n</plist>"
  },
  {
    "path": "GoEasyDesigner/build/darwin/Info.plist",
    "content": "<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n    <dict>\n        <key>CFBundlePackageType</key>\n        <string>APPL</string>\n        <key>CFBundleName</key>\n        <string>{{.Info.ProductName}}</string>\n        <key>CFBundleExecutable</key>\n        <string>{{.Name}}</string>\n        <key>CFBundleIdentifier</key>\n        <string>com.wails.{{.Name}}</string>\n        <key>CFBundleVersion</key>\n        <string>{{.Info.ProductVersion}}</string>\n        <key>CFBundleGetInfoString</key>\n        <string>{{.Info.Comments}}</string>\n        <key>CFBundleShortVersionString</key>\n        <string>{{.Info.ProductVersion}}</string>\n        <key>CFBundleIconFile</key>\n        <string>iconfile</string>\n        <key>LSMinimumSystemVersion</key>\n        <string>10.13.0</string>\n        <key>NSHighResolutionCapable</key>\n        <string>true</string>\n        <key>NSHumanReadableCopyright</key>\n        <string>{{.Info.Copyright}}</string>\n    </dict>\n</plist>"
  },
  {
    "path": "GoEasyDesigner/build/dmg.sh",
    "content": "#!/bin/bash\n\nAPP_NAME=\"GoEasyDesigner\"\nAPP_VERSION=\"$version\"\nDMG_NAME=\"${APP_NAME}-${APP_VERSION}.dmg\"\nTEMP_DIR=\"./install\"\n\nmkdir -p \"${TEMP_DIR}\"\n\ncp -r \"./${APP_NAME}.app\" \"${TEMP_DIR}\"\n\n# 创建 Applications 文件夹的快捷方式\nln -s \"/Applications\" \"${TEMP_DIR}/Applications\"\n\n# 创建空的镜像文件\nhdiutil create -srcfolder \"${TEMP_DIR}\" -volname \"${APP_NAME}\" -format UDZO \"${DMG_NAME}\"\n\necho \"${DMG_NAME} 已经创建完成！\""
  },
  {
    "path": "GoEasyDesigner/build/windows/info.json",
    "content": "{\n\t\"fixed\": {\n\t\t\"file_version\": \"{{.Info.ProductVersion}}\"\n\t},\n\t\"info\": {\n\t\t\"0000\": {\n\t\t\t\"ProductVersion\": \"{{.Info.ProductVersion}}\",\n\t\t\t\"CompanyName\": \"{{.Info.CompanyName}}\",\n\t\t\t\"FileDescription\": \"{{.Info.ProductName}}\",\n\t\t\t\"LegalCopyright\": \"{{.Info.Copyright}}\",\n\t\t\t\"ProductName\": \"{{.Info.ProductName}}\",\n\t\t\t\"Comments\": \"{{.Info.Comments}}\"\n\t\t}\n\t}\n}"
  },
  {
    "path": "GoEasyDesigner/build/windows/installer/project.nsi",
    "content": "Unicode true\n\n####\n## Please note: Template replacements don't work in this file. They are provided with default defines like\n## mentioned underneath.\n## If the keyword is not defined, \"wails_tools.nsh\" will populate them with the values from ProjectInfo. \n## If they are defined here, \"wails_tools.nsh\" will not touch them. This allows to use this project.nsi manually \n## from outside of Wails for debugging and development of the installer.\n## \n## For development first make a wails nsis build to populate the \"wails_tools.nsh\":\n## > wails build --target windows/amd64 --nsis\n## Then you can call makensis on this file with specifying the path to your binary:\n## For a AMD64 only installer:\n## > makensis -DARG_WAILS_AMD64_BINARY=..\\..\\bin\\app.exe\n## For a ARM64 only installer:\n## > makensis -DARG_WAILS_ARM64_BINARY=..\\..\\bin\\app.exe\n## For a installer with both architectures:\n## > makensis -DARG_WAILS_AMD64_BINARY=..\\..\\bin\\app-amd64.exe -DARG_WAILS_ARM64_BINARY=..\\..\\bin\\app-arm64.exe\n####\n## The following information is taken from the ProjectInfo file, but they can be overwritten here. \n####\n## !define INFO_PROJECTNAME    \"GoEasyDesigner\" # Default \"{{.Name}}\"\n## !define INFO_COMPANYNAME    \"MyCompany\" # Default \"{{.Info.CompanyName}}\"\n## !define INFO_PRODUCTNAME    \"MyProduct\" # Default \"{{.Info.ProductName}}\"\n## !define INFO_PRODUCTVERSION \"1.0.0\"     # Default \"{{.Info.ProductVersion}}\"\n## !define INFO_COPYRIGHT      \"Copyright\" # Default \"{{.Info.Copyright}}\"\n###\n## !define PRODUCT_EXECUTABLE  \"Application.exe\"      # Default \"${INFO_PROJECTNAME}.exe\"\n## !define UNINST_KEY_NAME     \"UninstKeyInRegistry\"  # Default \"${INFO_COMPANYNAME}${INFO_PRODUCTNAME}\"\n####\n## !define REQUEST_EXECUTION_LEVEL \"admin\"            # Default \"admin\"  see also https://nsis.sourceforge.io/Docs/Chapter4.html\n####\n## Include the wails tools\n####\n!include \"wails_tools.nsh\"\n\n# The version information for this two must consist of 4 parts\nVIProductVersion \"${INFO_PRODUCTVERSION}.0\"\nVIFileVersion    \"${INFO_PRODUCTVERSION}.0\"\n\nVIAddVersionKey \"CompanyName\"     \"${INFO_COMPANYNAME}\"\nVIAddVersionKey \"FileDescription\" \"${INFO_PRODUCTNAME} Installer\"\nVIAddVersionKey \"ProductVersion\"  \"${INFO_PRODUCTVERSION}\"\nVIAddVersionKey \"FileVersion\"     \"${INFO_PRODUCTVERSION}\"\nVIAddVersionKey \"LegalCopyright\"  \"${INFO_COPYRIGHT}\"\nVIAddVersionKey \"ProductName\"     \"${INFO_PRODUCTNAME}\"\n\n!include \"MUI.nsh\"\n\n!define MUI_ICON \"..\\icon.ico\"\n!define MUI_UNICON \"..\\icon.ico\"\n# !define MUI_WELCOMEFINISHPAGE_BITMAP \"resources\\leftimage.bmp\" #Include this to add a bitmap on the left side of the Welcome Page. Must be a size of 164x314\n!define MUI_FINISHPAGE_NOAUTOCLOSE # Wait on the INSTFILES page so the user can take a look into the details of the installation steps\n!define MUI_ABORTWARNING # This will warn the user if they exit from the installer.\n\n!insertmacro MUI_PAGE_WELCOME # Welcome to the installer page.\n# !insertmacro MUI_PAGE_LICENSE \"resources\\eula.txt\" # Adds a EULA page to the installer\n!insertmacro MUI_PAGE_DIRECTORY # In which folder install page.\n!insertmacro MUI_PAGE_INSTFILES # Installing page.\n!insertmacro MUI_PAGE_FINISH # Finished installation page.\n\n!insertmacro MUI_UNPAGE_INSTFILES # Uinstalling page\n\n!insertmacro MUI_LANGUAGE \"English\" # Set the Language of the installer\n\n## The following two statements can be used to sign the installer and the uninstaller. The path to the binaries are provided in %1\n#!uninstfinalize 'signtool --file \"%1\"'\n#!finalize 'signtool --file \"%1\"'\n\nName \"${INFO_PRODUCTNAME}\"\nOutFile \"..\\..\\bin\\${INFO_PROJECTNAME}-${ARCH}-installer.exe\" # Name of the installer's file.\nInstallDir \"$PROGRAMFILES64\\${INFO_COMPANYNAME}\\${INFO_PRODUCTNAME}\" # Default installing folder ($PROGRAMFILES is Program Files folder).\nShowInstDetails show # This will always show the installation details.\n\nFunction .onInit\n   !insertmacro wails.checkArchitecture\nFunctionEnd\n\nSection\n    !insertmacro wails.setShellContext\n\n    !insertmacro wails.webview2runtime\n\n    SetOutPath $INSTDIR\n    \n    !insertmacro wails.files\n\n    CreateShortcut \"$SMPROGRAMS\\${INFO_PRODUCTNAME}.lnk\" \"$INSTDIR\\${PRODUCT_EXECUTABLE}\"\n    CreateShortCut \"$DESKTOP\\${INFO_PRODUCTNAME}.lnk\" \"$INSTDIR\\${PRODUCT_EXECUTABLE}\"\n\n    !insertmacro wails.writeUninstaller\nSectionEnd\n\nSection \"uninstall\" \n    !insertmacro wails.setShellContext\n\n    RMDir /r \"$AppData\\${PRODUCT_EXECUTABLE}\" # Remove the WebView2 DataPath\n\n    RMDir /r $INSTDIR\n\n    Delete \"$SMPROGRAMS\\${INFO_PRODUCTNAME}.lnk\"\n    Delete \"$DESKTOP\\${INFO_PRODUCTNAME}.lnk\"\n\n    !insertmacro wails.deleteUninstaller\nSectionEnd\n"
  },
  {
    "path": "GoEasyDesigner/build/windows/installer/wails_tools.nsh",
    "content": "# DO NOT EDIT - Generated automatically by `wails build`\n\n!include \"x64.nsh\"\n!include \"WinVer.nsh\"\n!include \"FileFunc.nsh\"\n\n!ifndef INFO_PROJECTNAME\n    !define INFO_PROJECTNAME \"{{.Name}}\"\n!endif\n!ifndef INFO_COMPANYNAME\n    !define INFO_COMPANYNAME \"{{.Info.CompanyName}}\"\n!endif\n!ifndef INFO_PRODUCTNAME\n    !define INFO_PRODUCTNAME \"{{.Info.ProductName}}\"\n!endif\n!ifndef INFO_PRODUCTVERSION\n    !define INFO_PRODUCTVERSION \"{{.Info.ProductVersion}}\"\n!endif\n!ifndef INFO_COPYRIGHT\n    !define INFO_COPYRIGHT \"{{.Info.Copyright}}\"\n!endif\n!ifndef PRODUCT_EXECUTABLE\n    !define PRODUCT_EXECUTABLE \"${INFO_PROJECTNAME}.exe\"\n!endif\n!ifndef UNINST_KEY_NAME\n    !define UNINST_KEY_NAME \"${INFO_COMPANYNAME}${INFO_PRODUCTNAME}\"\n!endif\n!define UNINST_KEY \"Software\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\${UNINST_KEY_NAME}\"\n\n!ifndef REQUEST_EXECUTION_LEVEL\n    !define REQUEST_EXECUTION_LEVEL \"admin\"\n!endif\n\nRequestExecutionLevel \"${REQUEST_EXECUTION_LEVEL}\"\n\n!ifdef ARG_WAILS_AMD64_BINARY\n    !define SUPPORTS_AMD64\n!endif\n\n!ifdef ARG_WAILS_ARM64_BINARY\n    !define SUPPORTS_ARM64\n!endif\n\n!ifdef SUPPORTS_AMD64\n    !ifdef SUPPORTS_ARM64\n        !define ARCH \"amd64_arm64\"\n    !else\n        !define ARCH \"amd64\"\n    !endif\n!else\n    !ifdef SUPPORTS_ARM64\n        !define ARCH \"arm64\"\n    !else\n        !error \"Wails: Undefined ARCH, please provide at least one of ARG_WAILS_AMD64_BINARY or ARG_WAILS_ARM64_BINARY\"\n    !endif\n!endif\n\n!macro wails.checkArchitecture\n    !ifndef WAILS_WIN10_REQUIRED\n        !define WAILS_WIN10_REQUIRED \"This product is only supported on Windows 10 (Server 2016) and later.\"\n    !endif\n\n    !ifndef WAILS_ARCHITECTURE_NOT_SUPPORTED\n        !define WAILS_ARCHITECTURE_NOT_SUPPORTED \"This product can't be installed on the current Windows architecture. Supports: ${ARCH}\"\n    !endif\n\n    ${If} ${AtLeastWin10}\n        !ifdef SUPPORTS_AMD64\n            ${if} ${IsNativeAMD64}\n                Goto ok\n            ${EndIf}\n        !endif\n\n        !ifdef SUPPORTS_ARM64\n            ${if} ${IsNativeARM64}\n                Goto ok\n            ${EndIf}\n        !endif\n\n        IfSilent silentArch notSilentArch\n        silentArch:\n            SetErrorLevel 65\n            Abort\n        notSilentArch:\n            MessageBox MB_OK \"${WAILS_ARCHITECTURE_NOT_SUPPORTED}\"\n            Quit\n    ${else}\n        IfSilent silentWin notSilentWin\n        silentWin:\n            SetErrorLevel 64\n            Abort\n        notSilentWin:\n            MessageBox MB_OK \"${WAILS_WIN10_REQUIRED}\"\n            Quit\n    ${EndIf}\n\n    ok:\n!macroend\n\n!macro wails.files\n    !ifdef SUPPORTS_AMD64\n        ${if} ${IsNativeAMD64}\n            File \"/oname=${PRODUCT_EXECUTABLE}\" \"${ARG_WAILS_AMD64_BINARY}\"\n        ${EndIf}\n    !endif\n\n    !ifdef SUPPORTS_ARM64\n        ${if} ${IsNativeARM64}\n            File \"/oname=${PRODUCT_EXECUTABLE}\" \"${ARG_WAILS_ARM64_BINARY}\"\n        ${EndIf}\n    !endif\n!macroend\n\n!macro wails.writeUninstaller\n    WriteUninstaller \"$INSTDIR\\uninstall.exe\"\n\n    SetRegView 64\n    WriteRegStr HKLM \"${UNINST_KEY}\" \"Publisher\" \"${INFO_COMPANYNAME}\"\n    WriteRegStr HKLM \"${UNINST_KEY}\" \"DisplayName\" \"${INFO_PRODUCTNAME}\"\n    WriteRegStr HKLM \"${UNINST_KEY}\" \"DisplayVersion\" \"${INFO_PRODUCTVERSION}\"\n    WriteRegStr HKLM \"${UNINST_KEY}\" \"DisplayIcon\" \"$INSTDIR\\${PRODUCT_EXECUTABLE}\"\n    WriteRegStr HKLM \"${UNINST_KEY}\" \"UninstallString\" \"$\\\"$INSTDIR\\uninstall.exe$\\\"\"\n    WriteRegStr HKLM \"${UNINST_KEY}\" \"QuietUninstallString\" \"$\\\"$INSTDIR\\uninstall.exe$\\\" /S\"\n\n    ${GetSize} \"$INSTDIR\" \"/S=0K\" $0 $1 $2\n    IntFmt $0 \"0x%08X\" $0\n    WriteRegDWORD HKLM \"${UNINST_KEY}\" \"EstimatedSize\" \"$0\"\n!macroend\n\n!macro wails.deleteUninstaller\n    Delete \"$INSTDIR\\uninstall.exe\"\n\n    SetRegView 64\n    DeleteRegKey HKLM \"${UNINST_KEY}\"\n!macroend\n\n!macro wails.setShellContext\n    ${If} ${REQUEST_EXECUTION_LEVEL} == \"admin\"\n        SetShellVarContext all\n    ${else}\n        SetShellVarContext current\n    ${EndIf}\n!macroend\n\n# Install webview2 by launching the bootstrapper\n# See https://docs.microsoft.com/en-us/microsoft-edge/webview2/concepts/distribution#online-only-deployment\n!macro wails.webview2runtime\n    !ifndef WAILS_INSTALL_WEBVIEW_DETAILPRINT\n        !define WAILS_INSTALL_WEBVIEW_DETAILPRINT \"Installing: WebView2 Runtime\"\n    !endif\n\n    SetRegView 64\n\t# If the admin key exists and is not empty then webview2 is already installed\n\tReadRegStr $0 HKLM \"SOFTWARE\\WOW6432Node\\Microsoft\\EdgeUpdate\\Clients\\{F3017226-FE2A-4295-8BDF-00C3A9A7E4C5}\" \"pv\"\n    ${If} $0 != \"\"\n        Goto ok\n    ${EndIf}\n\n    ${If} ${REQUEST_EXECUTION_LEVEL} == \"user\"\n        # If the installer is run in user level, check the user specific key exists and is not empty then webview2 is already installed\n\t    ReadRegStr $0 HKCU \"Software\\Microsoft\\EdgeUpdate\\Clients{F3017226-FE2A-4295-8BDF-00C3A9A7E4C5}\" \"pv\"\n        ${If} $0 != \"\"\n            Goto ok\n        ${EndIf}\n     ${EndIf}\n    \n\tSetDetailsPrint both\n    DetailPrint \"${WAILS_INSTALL_WEBVIEW_DETAILPRINT}\"\n    SetDetailsPrint listonly\n    \n    InitPluginsDir\n    CreateDirectory \"$pluginsdir\\webview2bootstrapper\"\n    SetOutPath \"$pluginsdir\\webview2bootstrapper\"\n    File \"tmp\\MicrosoftEdgeWebview2Setup.exe\"\n    ExecWait '\"$pluginsdir\\webview2bootstrapper\\MicrosoftEdgeWebview2Setup.exe\" /silent /install'\n    \n    SetDetailsPrint both\n    ok:\n!macroend"
  },
  {
    "path": "GoEasyDesigner/build/windows/wails.exe.manifest",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\n<assembly manifestVersion=\"1.0\" xmlns=\"urn:schemas-microsoft-com:asm.v1\" xmlns:asmv3=\"urn:schemas-microsoft-com:asm.v3\">\n    <assemblyIdentity type=\"win32\" name=\"com.wails.{{.Name}}\" version=\"{{.Info.ProductVersion}}.0\" processorArchitecture=\"*\"/>\n    <dependency>\n        <dependentAssembly>\n            <assemblyIdentity type=\"win32\" name=\"Microsoft.Windows.Common-Controls\" version=\"6.0.0.0\" processorArchitecture=\"*\" publicKeyToken=\"6595b64144ccf1df\" language=\"*\"/>\n        </dependentAssembly>\n    </dependency>\n    <asmv3:application>\n        <asmv3:windowsSettings>\n            <dpiAware xmlns=\"http://schemas.microsoft.com/SMI/2005/WindowsSettings\">true/pm</dpiAware> <!-- fallback for Windows 7 and 8 -->\n            <dpiAwareness xmlns=\"http://schemas.microsoft.com/SMI/2016/WindowsSettings\">permonitorv2,permonitor</dpiAwareness> <!-- falls back to per-monitor if per-monitor v2 is not supported -->\n        </asmv3:windowsSettings>\n    </asmv3:application>\n</assembly>"
  },
  {
    "path": "GoEasyDesigner/docker-compose.yml",
    "content": "version: \"3\"\nservices:\n  goeasy:\n    container_name: goeasy\n    build: .\n    ports:\n      - \"3005:3005\""
  },
  {
    "path": "GoEasyDesigner/frontend/README.md",
    "content": "# Vue 3 + Vite\n\nThis template should help get you started developing with Vue 3 in Vite. The template uses Vue 3 `<script setup>` SFCs,\ncheck out the [script setup docs](https://v3.vuejs.org/api/sfc-script-setup.html#sfc-script-setup) to learn more.\n\n## Recommended IDE Setup\n\n- [VS Code](https://code.visualstudio.com/) + [Volar](https://marketplace.visualstudio.com/items?itemName=Vue.volar)\n"
  },
  {
    "path": "GoEasyDesigner/frontend/index.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n    <meta charset=\"UTF-8\"/>\n    <meta content=\"width=device-width, initial-scale=1.0\" name=\"viewport\"/>\n    <title>GoEasyDesigner</title>\n    <link href=\"./src/assets/main.css\" rel=\"stylesheet\"/>\n</head>\n<body>\n<div id=\"app\"></div>\n<script src=\"./src/main.js\" type=\"module\"></script>\n</body>\n</html>\n\n"
  },
  {
    "path": "GoEasyDesigner/frontend/jsconfig.json",
    "content": "{\n  \"compilerOptions\": {\n    \"baseUrl\": \".\",\n    \"paths\": {\n      \"@/*\": [\"src/*\"]\n    }\n  },\n  \"include\": [\"src/**/*\"]\n}\n"
  },
  {
    "path": "GoEasyDesigner/frontend/package.json",
    "content": "{\n  \"name\": \"eview\",\n  \"version\": \"0.0.0\",\n  \"private\": true,\n  \"scripts\": {\n    \"dev\": \"vite\",\n    \"build\": \"vite build\",\n    \"preview\": \"vite preview\"\n  },\n  \"dependencies\": {\n    \"@element-plus/icons-vue\": \"^2.3.1\",\n    \"@guolao/vue-monaco-editor\": \"1.3.0\",\n    \"@vitejs/plugin-vue-jsx\": \"latest\",\n    \"element-plus\": \"^2.9.9\",\n    \"lodash-es\": \"^4.17.21\",\n    \"monaco-editor\": \"0.38.0\",\n    \"pinia\": \"^3.0.2\",\n    \"pinyin-pro\": \"^3.26.0\",\n    \"tdesign-icons-vue-next\": \"^0.3.6\",\n    \"tdesign-vue-next\": \"^1.12.0\",\n    \"uuid\": \"^11.1.0\",\n    \"vue\": \"^3.5.13\",\n    \"vue-i18n\": \"^11.1.3\",\n    \"vue3-menus\": \"^1.1.2\",\n    \"vue3-sfc-loader\": \"^0.9.5\"\n  },\n  \"devDependencies\": {\n    \"@iconify/vue\": \"^5.0.0\",\n    \"@vitejs/plugin-vue\": \"^5.2.3\",\n    \"autoprefixer\": \"^10.4.21\",\n    \"monaco-editor-webpack-plugin\": \"^7.1.0\",\n    \"postcss\": \"^8.5.3\",\n    \"tailwindcss\": \"^3.4.17\",\n    \"unplugin-auto-import\": \"^19.2.0\",\n    \"unplugin-icons\": \"^22.1.0\",\n    \"unplugin-vue-components\": \"^28.5.0\",\n    \"vite\": \"^6.3.5\"\n  }\n}\n"
  },
  {
    "path": "GoEasyDesigner/frontend/postcss.config.js",
    "content": "module.exports = {\n  plugins: {\n    tailwindcss: {},\n    autoprefixer: {},\n  },\n}\n"
  },
  {
    "path": "GoEasyDesigner/frontend/public/1.html",
    "content": "<button\n        class=\"middle none center mr-4 rounded-lg bg-blue-500 py-3 px-6 font-sans text-xs font-bold uppercase text-white shadow-md shadow-blue-500/20 transition-all hover:shadow-lg hover:shadow-blue-500/40 focus:opacity-[0.85] focus:shadow-none active:opacity-[0.85] active:shadow-none disabled:pointer-events-none disabled:opacity-50 disabled:shadow-none\"\n        data-ripple-light=\"true\"\n>\n    Button\n</button>\n<button\n        class=\"middle none center mr-4 rounded-lg bg-red-500 py-3 px-6 font-sans text-xs font-bold uppercase text-white shadow-md shadow-red-500/20 transition-all hover:shadow-lg hover:shadow-red-500/40 focus:opacity-[0.85] focus:shadow-none active:opacity-[0.85] active:shadow-none disabled:pointer-events-none disabled:opacity-50 disabled:shadow-none\"\n        data-ripple-light=\"true\"\n>\n    Button\n</button>\n<button\n        class=\"middle none center mr-4 rounded-lg bg-green-500 py-3 px-6 font-sans text-xs font-bold uppercase text-white shadow-md shadow-green-500/20 transition-all hover:shadow-lg hover:shadow-green-500/40 focus:opacity-[0.85] focus:shadow-none active:opacity-[0.85] active:shadow-none disabled:pointer-events-none disabled:opacity-50 disabled:shadow-none\"\n        data-ripple-light=\"true\"\n>\n    Button\n</button>\n<button\n        class=\"middle none center rounded-lg bg-orange-500 py-3 px-6 font-sans text-xs font-bold uppercase text-white shadow-md shadow-orange-500/20 transition-all hover:shadow-lg hover:shadow-orange-500/40 focus:opacity-[0.85] focus:shadow-none active:opacity-[0.85] active:shadow-none disabled:pointer-events-none disabled:opacity-50 disabled:shadow-none\"\n        data-ripple-light=\"true\"\n>\n    Button\n</button>\n<div class=\"w-full pt-5 px-4 mb-8 mx-auto \">\n    <div class=\"text-sm text-gray-700 py-1\">\n        Made with <a class=\"text-gray-700 font-semibold\" href=\"https://www.material-tailwind.com/docs/html/button?ref=tailwindcomponents\" target=\"_blank\">Material Tailwind</a> by <a href=\"https://www.creative-tim.com?ref=tailwindcomponents\" class=\"text-gray-700 font-semibold\" target=\"_blank\"> Creative Tim</a>.\n    </div>\n</div>\n\n\n\n<script src=\"./cdn.tailwindcss.com_3.3.3.js\"></script>\n<script src=\"https://unpkg.com/@material-tailwind/html@latest/scripts/ripple.js\"></script>\n"
  },
  {
    "path": "GoEasyDesigner/frontend/public/cdn.tailwindcss.com_3.4.5.js",
    "content": "(()=>{var wb=Object.create;var li=Object.defineProperty;var bb=Object.getOwnPropertyDescriptor;var vb=Object.getOwnPropertyNames;var xb=Object.getPrototypeOf,kb=Object.prototype.hasOwnProperty;var au=i=>li(i,\"__esModule\",{value:!0});var ou=i=>{if(typeof require!=\"undefined\")return require(i);throw new Error('Dynamic require of \"'+i+'\" is not supported')};var C=(i,e)=>()=>(i&&(e=i(i=0)),e);var v=(i,e)=>()=>(e||i((e={exports:{}}).exports,e),e.exports),_e=(i,e)=>{au(i);for(var t in e)li(i,t,{get:e[t],enumerable:!0})},Sb=(i,e,t)=>{if(e&&typeof e==\"object\"||typeof e==\"function\")for(let r of vb(e))!kb.call(i,r)&&r!==\"default\"&&li(i,r,{get:()=>e[r],enumerable:!(t=bb(e,r))||t.enumerable});return i},X=i=>Sb(au(li(i!=null?wb(xb(i)):{},\"default\",i&&i.__esModule&&\"default\"in i?{get:()=>i.default,enumerable:!0}:{value:i,enumerable:!0})),i);var h,l=C(()=>{h={platform:\"\",env:{},versions:{node:\"14.17.6\"}}});var Cb,re,je=C(()=>{l();Cb=0,re={readFileSync:i=>self[i]||\"\",statSync:()=>({mtimeMs:Cb++}),promises:{readFile:i=>Promise.resolve(self[i]||\"\")}}});var Qn=v((PO,uu)=>{l();\"use strict\";var lu=class{constructor(e={}){if(!(e.maxSize&&e.maxSize>0))throw new TypeError(\"`maxSize` must be a number greater than 0\");if(typeof e.maxAge==\"number\"&&e.maxAge===0)throw new TypeError(\"`maxAge` must be a number greater than 0\");this.maxSize=e.maxSize,this.maxAge=e.maxAge||1/0,this.onEviction=e.onEviction,this.cache=new Map,this.oldCache=new Map,this._size=0}_emitEvictions(e){if(typeof this.onEviction==\"function\")for(let[t,r]of e)this.onEviction(t,r.value)}_deleteIfExpired(e,t){return typeof t.expiry==\"number\"&&t.expiry<=Date.now()?(typeof this.onEviction==\"function\"&&this.onEviction(e,t.value),this.delete(e)):!1}_getOrDeleteIfExpired(e,t){if(this._deleteIfExpired(e,t)===!1)return t.value}_getItemValue(e,t){return t.expiry?this._getOrDeleteIfExpired(e,t):t.value}_peek(e,t){let r=t.get(e);return this._getItemValue(e,r)}_set(e,t){this.cache.set(e,t),this._size++,this._size>=this.maxSize&&(this._size=0,this._emitEvictions(this.oldCache),this.oldCache=this.cache,this.cache=new Map)}_moveToRecent(e,t){this.oldCache.delete(e),this._set(e,t)}*_entriesAscending(){for(let e of this.oldCache){let[t,r]=e;this.cache.has(t)||this._deleteIfExpired(t,r)===!1&&(yield e)}for(let e of this.cache){let[t,r]=e;this._deleteIfExpired(t,r)===!1&&(yield e)}}get(e){if(this.cache.has(e)){let t=this.cache.get(e);return this._getItemValue(e,t)}if(this.oldCache.has(e)){let t=this.oldCache.get(e);if(this._deleteIfExpired(e,t)===!1)return this._moveToRecent(e,t),t.value}}set(e,t,{maxAge:r=this.maxAge===1/0?void 0:Date.now()+this.maxAge}={}){this.cache.has(e)?this.cache.set(e,{value:t,maxAge:r}):this._set(e,{value:t,expiry:r})}has(e){return this.cache.has(e)?!this._deleteIfExpired(e,this.cache.get(e)):this.oldCache.has(e)?!this._deleteIfExpired(e,this.oldCache.get(e)):!1}peek(e){if(this.cache.has(e))return this._peek(e,this.cache);if(this.oldCache.has(e))return this._peek(e,this.oldCache)}delete(e){let t=this.cache.delete(e);return t&&this._size--,this.oldCache.delete(e)||t}clear(){this.cache.clear(),this.oldCache.clear(),this._size=0}resize(e){if(!(e&&e>0))throw new TypeError(\"`maxSize` must be a number greater than 0\");let t=[...this._entriesAscending()],r=t.length-e;r<0?(this.cache=new Map(t),this.oldCache=new Map,this._size=t.length):(r>0&&this._emitEvictions(t.slice(0,r)),this.oldCache=new Map(t.slice(r)),this.cache=new Map,this._size=0),this.maxSize=e}*keys(){for(let[e]of this)yield e}*values(){for(let[,e]of this)yield e}*[Symbol.iterator](){for(let e of this.cache){let[t,r]=e;this._deleteIfExpired(t,r)===!1&&(yield[t,r.value])}for(let e of this.oldCache){let[t,r]=e;this.cache.has(t)||this._deleteIfExpired(t,r)===!1&&(yield[t,r.value])}}*entriesDescending(){let e=[...this.cache];for(let t=e.length-1;t>=0;--t){let r=e[t],[n,a]=r;this._deleteIfExpired(n,a)===!1&&(yield[n,a.value])}e=[...this.oldCache];for(let t=e.length-1;t>=0;--t){let r=e[t],[n,a]=r;this.cache.has(n)||this._deleteIfExpired(n,a)===!1&&(yield[n,a.value])}}*entriesAscending(){for(let[e,t]of this._entriesAscending())yield[e,t.value]}get size(){if(!this._size)return this.oldCache.size;let e=0;for(let t of this.oldCache.keys())this.cache.has(t)||e++;return Math.min(this._size+e,this.maxSize)}};uu.exports=lu});var fu,cu=C(()=>{l();fu=i=>i&&i._hash});function ui(i){return fu(i,{ignoreUnknown:!0})}var pu=C(()=>{l();cu()});function Xe(i){if(i=`${i}`,i===\"0\")return\"0\";if(/^[+-]?(\\d+|\\d*\\.\\d+)(e[+-]?\\d+)?(%|\\w+)?$/.test(i))return i.replace(/^[+-]?/,t=>t===\"-\"?\"\":\"-\");let e=[\"var\",\"calc\",\"min\",\"max\",\"clamp\"];for(let t of e)if(i.includes(`${t}(`))return`calc(${i} * -1)`}var fi=C(()=>{l()});var du,hu=C(()=>{l();du=[\"preflight\",\"container\",\"accessibility\",\"pointerEvents\",\"visibility\",\"position\",\"inset\",\"isolation\",\"zIndex\",\"order\",\"gridColumn\",\"gridColumnStart\",\"gridColumnEnd\",\"gridRow\",\"gridRowStart\",\"gridRowEnd\",\"float\",\"clear\",\"margin\",\"boxSizing\",\"lineClamp\",\"display\",\"aspectRatio\",\"size\",\"height\",\"maxHeight\",\"minHeight\",\"width\",\"minWidth\",\"maxWidth\",\"flex\",\"flexShrink\",\"flexGrow\",\"flexBasis\",\"tableLayout\",\"captionSide\",\"borderCollapse\",\"borderSpacing\",\"transformOrigin\",\"translate\",\"rotate\",\"skew\",\"scale\",\"transform\",\"animation\",\"cursor\",\"touchAction\",\"userSelect\",\"resize\",\"scrollSnapType\",\"scrollSnapAlign\",\"scrollSnapStop\",\"scrollMargin\",\"scrollPadding\",\"listStylePosition\",\"listStyleType\",\"listStyleImage\",\"appearance\",\"columns\",\"breakBefore\",\"breakInside\",\"breakAfter\",\"gridAutoColumns\",\"gridAutoFlow\",\"gridAutoRows\",\"gridTemplateColumns\",\"gridTemplateRows\",\"flexDirection\",\"flexWrap\",\"placeContent\",\"placeItems\",\"alignContent\",\"alignItems\",\"justifyContent\",\"justifyItems\",\"gap\",\"space\",\"divideWidth\",\"divideStyle\",\"divideColor\",\"divideOpacity\",\"placeSelf\",\"alignSelf\",\"justifySelf\",\"overflow\",\"overscrollBehavior\",\"scrollBehavior\",\"textOverflow\",\"hyphens\",\"whitespace\",\"textWrap\",\"wordBreak\",\"borderRadius\",\"borderWidth\",\"borderStyle\",\"borderColor\",\"borderOpacity\",\"backgroundColor\",\"backgroundOpacity\",\"backgroundImage\",\"gradientColorStops\",\"boxDecorationBreak\",\"backgroundSize\",\"backgroundAttachment\",\"backgroundClip\",\"backgroundPosition\",\"backgroundRepeat\",\"backgroundOrigin\",\"fill\",\"stroke\",\"strokeWidth\",\"objectFit\",\"objectPosition\",\"padding\",\"textAlign\",\"textIndent\",\"verticalAlign\",\"fontFamily\",\"fontSize\",\"fontWeight\",\"textTransform\",\"fontStyle\",\"fontVariantNumeric\",\"lineHeight\",\"letterSpacing\",\"textColor\",\"textOpacity\",\"textDecoration\",\"textDecorationColor\",\"textDecorationStyle\",\"textDecorationThickness\",\"textUnderlineOffset\",\"fontSmoothing\",\"placeholderColor\",\"placeholderOpacity\",\"caretColor\",\"accentColor\",\"opacity\",\"backgroundBlendMode\",\"mixBlendMode\",\"boxShadow\",\"boxShadowColor\",\"outlineStyle\",\"outlineWidth\",\"outlineOffset\",\"outlineColor\",\"ringWidth\",\"ringColor\",\"ringOpacity\",\"ringOffsetWidth\",\"ringOffsetColor\",\"blur\",\"brightness\",\"contrast\",\"dropShadow\",\"grayscale\",\"hueRotate\",\"invert\",\"saturate\",\"sepia\",\"filter\",\"backdropBlur\",\"backdropBrightness\",\"backdropContrast\",\"backdropGrayscale\",\"backdropHueRotate\",\"backdropInvert\",\"backdropOpacity\",\"backdropSaturate\",\"backdropSepia\",\"backdropFilter\",\"transitionProperty\",\"transitionDelay\",\"transitionDuration\",\"transitionTimingFunction\",\"willChange\",\"contain\",\"content\",\"forcedColorAdjust\"]});function mu(i,e){return i===void 0?e:Array.isArray(i)?i:[...new Set(e.filter(r=>i!==!1&&i[r]!==!1).concat(Object.keys(i).filter(r=>i[r]!==!1)))]}var gu=C(()=>{l()});var yu={};_e(yu,{default:()=>Oe});var Oe,ci=C(()=>{l();Oe=new Proxy({},{get:()=>String})});function Jn(i,e,t){typeof h!=\"undefined\"&&h.env.JEST_WORKER_ID||t&&wu.has(t)||(t&&wu.add(t),console.warn(\"\"),e.forEach(r=>console.warn(i,\"-\",r)))}function Xn(i){return Oe.dim(i)}var wu,F,Ee=C(()=>{l();ci();wu=new Set;F={info(i,e){Jn(Oe.bold(Oe.cyan(\"info\")),...Array.isArray(i)?[i]:[e,i])},warn(i,e){[\"content-problems\"].includes(i)||Jn(Oe.bold(Oe.yellow(\"warn\")),...Array.isArray(i)?[i]:[e,i])},risk(i,e){Jn(Oe.bold(Oe.magenta(\"risk\")),...Array.isArray(i)?[i]:[e,i])}}});var bu={};_e(bu,{default:()=>Kn});function ar({version:i,from:e,to:t}){F.warn(`${e}-color-renamed`,[`As of Tailwind CSS ${i}, \\`${e}\\` has been renamed to \\`${t}\\`.`,\"Update your configuration file to silence this warning.\"])}var Kn,Zn=C(()=>{l();Ee();Kn={inherit:\"inherit\",current:\"currentColor\",transparent:\"transparent\",black:\"#000\",white:\"#fff\",slate:{50:\"#f8fafc\",100:\"#f1f5f9\",200:\"#e2e8f0\",300:\"#cbd5e1\",400:\"#94a3b8\",500:\"#64748b\",600:\"#475569\",700:\"#334155\",800:\"#1e293b\",900:\"#0f172a\",950:\"#020617\"},gray:{50:\"#f9fafb\",100:\"#f3f4f6\",200:\"#e5e7eb\",300:\"#d1d5db\",400:\"#9ca3af\",500:\"#6b7280\",600:\"#4b5563\",700:\"#374151\",800:\"#1f2937\",900:\"#111827\",950:\"#030712\"},zinc:{50:\"#fafafa\",100:\"#f4f4f5\",200:\"#e4e4e7\",300:\"#d4d4d8\",400:\"#a1a1aa\",500:\"#71717a\",600:\"#52525b\",700:\"#3f3f46\",800:\"#27272a\",900:\"#18181b\",950:\"#09090b\"},neutral:{50:\"#fafafa\",100:\"#f5f5f5\",200:\"#e5e5e5\",300:\"#d4d4d4\",400:\"#a3a3a3\",500:\"#737373\",600:\"#525252\",700:\"#404040\",800:\"#262626\",900:\"#171717\",950:\"#0a0a0a\"},stone:{50:\"#fafaf9\",100:\"#f5f5f4\",200:\"#e7e5e4\",300:\"#d6d3d1\",400:\"#a8a29e\",500:\"#78716c\",600:\"#57534e\",700:\"#44403c\",800:\"#292524\",900:\"#1c1917\",950:\"#0c0a09\"},red:{50:\"#fef2f2\",100:\"#fee2e2\",200:\"#fecaca\",300:\"#fca5a5\",400:\"#f87171\",500:\"#ef4444\",600:\"#dc2626\",700:\"#b91c1c\",800:\"#991b1b\",900:\"#7f1d1d\",950:\"#450a0a\"},orange:{50:\"#fff7ed\",100:\"#ffedd5\",200:\"#fed7aa\",300:\"#fdba74\",400:\"#fb923c\",500:\"#f97316\",600:\"#ea580c\",700:\"#c2410c\",800:\"#9a3412\",900:\"#7c2d12\",950:\"#431407\"},amber:{50:\"#fffbeb\",100:\"#fef3c7\",200:\"#fde68a\",300:\"#fcd34d\",400:\"#fbbf24\",500:\"#f59e0b\",600:\"#d97706\",700:\"#b45309\",800:\"#92400e\",900:\"#78350f\",950:\"#451a03\"},yellow:{50:\"#fefce8\",100:\"#fef9c3\",200:\"#fef08a\",300:\"#fde047\",400:\"#facc15\",500:\"#eab308\",600:\"#ca8a04\",700:\"#a16207\",800:\"#854d0e\",900:\"#713f12\",950:\"#422006\"},lime:{50:\"#f7fee7\",100:\"#ecfccb\",200:\"#d9f99d\",300:\"#bef264\",400:\"#a3e635\",500:\"#84cc16\",600:\"#65a30d\",700:\"#4d7c0f\",800:\"#3f6212\",900:\"#365314\",950:\"#1a2e05\"},green:{50:\"#f0fdf4\",100:\"#dcfce7\",200:\"#bbf7d0\",300:\"#86efac\",400:\"#4ade80\",500:\"#22c55e\",600:\"#16a34a\",700:\"#15803d\",800:\"#166534\",900:\"#14532d\",950:\"#052e16\"},emerald:{50:\"#ecfdf5\",100:\"#d1fae5\",200:\"#a7f3d0\",300:\"#6ee7b7\",400:\"#34d399\",500:\"#10b981\",600:\"#059669\",700:\"#047857\",800:\"#065f46\",900:\"#064e3b\",950:\"#022c22\"},teal:{50:\"#f0fdfa\",100:\"#ccfbf1\",200:\"#99f6e4\",300:\"#5eead4\",400:\"#2dd4bf\",500:\"#14b8a6\",600:\"#0d9488\",700:\"#0f766e\",800:\"#115e59\",900:\"#134e4a\",950:\"#042f2e\"},cyan:{50:\"#ecfeff\",100:\"#cffafe\",200:\"#a5f3fc\",300:\"#67e8f9\",400:\"#22d3ee\",500:\"#06b6d4\",600:\"#0891b2\",700:\"#0e7490\",800:\"#155e75\",900:\"#164e63\",950:\"#083344\"},sky:{50:\"#f0f9ff\",100:\"#e0f2fe\",200:\"#bae6fd\",300:\"#7dd3fc\",400:\"#38bdf8\",500:\"#0ea5e9\",600:\"#0284c7\",700:\"#0369a1\",800:\"#075985\",900:\"#0c4a6e\",950:\"#082f49\"},blue:{50:\"#eff6ff\",100:\"#dbeafe\",200:\"#bfdbfe\",300:\"#93c5fd\",400:\"#60a5fa\",500:\"#3b82f6\",600:\"#2563eb\",700:\"#1d4ed8\",800:\"#1e40af\",900:\"#1e3a8a\",950:\"#172554\"},indigo:{50:\"#eef2ff\",100:\"#e0e7ff\",200:\"#c7d2fe\",300:\"#a5b4fc\",400:\"#818cf8\",500:\"#6366f1\",600:\"#4f46e5\",700:\"#4338ca\",800:\"#3730a3\",900:\"#312e81\",950:\"#1e1b4b\"},violet:{50:\"#f5f3ff\",100:\"#ede9fe\",200:\"#ddd6fe\",300:\"#c4b5fd\",400:\"#a78bfa\",500:\"#8b5cf6\",600:\"#7c3aed\",700:\"#6d28d9\",800:\"#5b21b6\",900:\"#4c1d95\",950:\"#2e1065\"},purple:{50:\"#faf5ff\",100:\"#f3e8ff\",200:\"#e9d5ff\",300:\"#d8b4fe\",400:\"#c084fc\",500:\"#a855f7\",600:\"#9333ea\",700:\"#7e22ce\",800:\"#6b21a8\",900:\"#581c87\",950:\"#3b0764\"},fuchsia:{50:\"#fdf4ff\",100:\"#fae8ff\",200:\"#f5d0fe\",300:\"#f0abfc\",400:\"#e879f9\",500:\"#d946ef\",600:\"#c026d3\",700:\"#a21caf\",800:\"#86198f\",900:\"#701a75\",950:\"#4a044e\"},pink:{50:\"#fdf2f8\",100:\"#fce7f3\",200:\"#fbcfe8\",300:\"#f9a8d4\",400:\"#f472b6\",500:\"#ec4899\",600:\"#db2777\",700:\"#be185d\",800:\"#9d174d\",900:\"#831843\",950:\"#500724\"},rose:{50:\"#fff1f2\",100:\"#ffe4e6\",200:\"#fecdd3\",300:\"#fda4af\",400:\"#fb7185\",500:\"#f43f5e\",600:\"#e11d48\",700:\"#be123c\",800:\"#9f1239\",900:\"#881337\",950:\"#4c0519\"},get lightBlue(){return ar({version:\"v2.2\",from:\"lightBlue\",to:\"sky\"}),this.sky},get warmGray(){return ar({version:\"v3.0\",from:\"warmGray\",to:\"stone\"}),this.stone},get trueGray(){return ar({version:\"v3.0\",from:\"trueGray\",to:\"neutral\"}),this.neutral},get coolGray(){return ar({version:\"v3.0\",from:\"coolGray\",to:\"gray\"}),this.gray},get blueGray(){return ar({version:\"v3.0\",from:\"blueGray\",to:\"slate\"}),this.slate}}});function es(i,...e){for(let t of e){for(let r in t)i?.hasOwnProperty?.(r)||(i[r]=t[r]);for(let r of Object.getOwnPropertySymbols(t))i?.hasOwnProperty?.(r)||(i[r]=t[r])}return i}var vu=C(()=>{l()});function Ke(i){if(Array.isArray(i))return i;let e=i.split(\"[\").length-1,t=i.split(\"]\").length-1;if(e!==t)throw new Error(`Path is invalid. Has unbalanced brackets: ${i}`);return i.split(/\\.(?![^\\[]*\\])|[\\[\\]]/g).filter(Boolean)}var pi=C(()=>{l()});function Z(i,e){return di.future.includes(e)?i.future===\"all\"||(i?.future?.[e]??xu[e]??!1):di.experimental.includes(e)?i.experimental===\"all\"||(i?.experimental?.[e]??xu[e]??!1):!1}function ku(i){return i.experimental===\"all\"?di.experimental:Object.keys(i?.experimental??{}).filter(e=>di.experimental.includes(e)&&i.experimental[e])}function Su(i){if(h.env.JEST_WORKER_ID===void 0&&ku(i).length>0){let e=ku(i).map(t=>Oe.yellow(t)).join(\", \");F.warn(\"experimental-flags-enabled\",[`You have enabled experimental features: ${e}`,\"Experimental features in Tailwind CSS are not covered by semver, may introduce breaking changes, and can change at any time.\"])}}var xu,di,ze=C(()=>{l();ci();Ee();xu={optimizeUniversalDefaults:!1,generalizedModifiers:!0,disableColorOpacityUtilitiesByDefault:!1,relativeContentPathsByDefault:!1},di={future:[\"hoverOnlyWhenSupported\",\"respectDefaultRingColorOpacity\",\"disableColorOpacityUtilitiesByDefault\",\"relativeContentPathsByDefault\"],experimental:[\"optimizeUniversalDefaults\",\"generalizedModifiers\"]}});function Cu(i){(()=>{if(i.purge||!i.content||!Array.isArray(i.content)&&!(typeof i.content==\"object\"&&i.content!==null))return!1;if(Array.isArray(i.content))return i.content.every(t=>typeof t==\"string\"?!0:!(typeof t?.raw!=\"string\"||t?.extension&&typeof t?.extension!=\"string\"));if(typeof i.content==\"object\"&&i.content!==null){if(Object.keys(i.content).some(t=>![\"files\",\"relative\",\"extract\",\"transform\"].includes(t)))return!1;if(Array.isArray(i.content.files)){if(!i.content.files.every(t=>typeof t==\"string\"?!0:!(typeof t?.raw!=\"string\"||t?.extension&&typeof t?.extension!=\"string\")))return!1;if(typeof i.content.extract==\"object\"){for(let t of Object.values(i.content.extract))if(typeof t!=\"function\")return!1}else if(!(i.content.extract===void 0||typeof i.content.extract==\"function\"))return!1;if(typeof i.content.transform==\"object\"){for(let t of Object.values(i.content.transform))if(typeof t!=\"function\")return!1}else if(!(i.content.transform===void 0||typeof i.content.transform==\"function\"))return!1;if(typeof i.content.relative!=\"boolean\"&&typeof i.content.relative!=\"undefined\")return!1}return!0}return!1})()||F.warn(\"purge-deprecation\",[\"The `purge`/`content` options have changed in Tailwind CSS v3.0.\",\"Update your configuration file to eliminate this warning.\",\"https://tailwindcss.com/docs/upgrade-guide#configure-content-sources\"]),i.safelist=(()=>{let{content:t,purge:r,safelist:n}=i;return Array.isArray(n)?n:Array.isArray(t?.safelist)?t.safelist:Array.isArray(r?.safelist)?r.safelist:Array.isArray(r?.options?.safelist)?r.options.safelist:[]})(),i.blocklist=(()=>{let{blocklist:t}=i;if(Array.isArray(t)){if(t.every(r=>typeof r==\"string\"))return t;F.warn(\"blocklist-invalid\",[\"The `blocklist` option must be an array of strings.\",\"https://tailwindcss.com/docs/content-configuration#discarding-classes\"])}return[]})(),typeof i.prefix==\"function\"?(F.warn(\"prefix-function\",[\"As of Tailwind CSS v3.0, `prefix` cannot be a function.\",\"Update `prefix` in your configuration to be a string to eliminate this warning.\",\"https://tailwindcss.com/docs/upgrade-guide#prefix-cannot-be-a-function\"]),i.prefix=\"\"):i.prefix=i.prefix??\"\",i.content={relative:(()=>{let{content:t}=i;return t?.relative?t.relative:Z(i,\"relativeContentPathsByDefault\")})(),files:(()=>{let{content:t,purge:r}=i;return Array.isArray(r)?r:Array.isArray(r?.content)?r.content:Array.isArray(t)?t:Array.isArray(t?.content)?t.content:Array.isArray(t?.files)?t.files:[]})(),extract:(()=>{let t=(()=>i.purge?.extract?i.purge.extract:i.content?.extract?i.content.extract:i.purge?.extract?.DEFAULT?i.purge.extract.DEFAULT:i.content?.extract?.DEFAULT?i.content.extract.DEFAULT:i.purge?.options?.extractors?i.purge.options.extractors:i.content?.options?.extractors?i.content.options.extractors:{})(),r={},n=(()=>{if(i.purge?.options?.defaultExtractor)return i.purge.options.defaultExtractor;if(i.content?.options?.defaultExtractor)return i.content.options.defaultExtractor})();if(n!==void 0&&(r.DEFAULT=n),typeof t==\"function\")r.DEFAULT=t;else if(Array.isArray(t))for(let{extensions:a,extractor:s}of t??[])for(let o of a)r[o]=s;else typeof t==\"object\"&&t!==null&&Object.assign(r,t);return r})(),transform:(()=>{let t=(()=>i.purge?.transform?i.purge.transform:i.content?.transform?i.content.transform:i.purge?.transform?.DEFAULT?i.purge.transform.DEFAULT:i.content?.transform?.DEFAULT?i.content.transform.DEFAULT:{})(),r={};return typeof t==\"function\"?r.DEFAULT=t:typeof t==\"object\"&&t!==null&&Object.assign(r,t),r})()};for(let t of i.content.files)if(typeof t==\"string\"&&/{([^,]*?)}/g.test(t)){F.warn(\"invalid-glob-braces\",[`The glob pattern ${Xn(t)} in your Tailwind CSS configuration is invalid.`,`Update it to ${Xn(t.replace(/{([^,]*?)}/g,\"$1\"))} to silence this warning.`]);break}return i}var Au=C(()=>{l();ze();Ee()});function se(i){if(Object.prototype.toString.call(i)!==\"[object Object]\")return!1;let e=Object.getPrototypeOf(i);return e===null||Object.getPrototypeOf(e)===null}var Ct=C(()=>{l()});function Ze(i){return Array.isArray(i)?i.map(e=>Ze(e)):typeof i==\"object\"&&i!==null?Object.fromEntries(Object.entries(i).map(([e,t])=>[e,Ze(t)])):i}var hi=C(()=>{l()});function gt(i){return i.replace(/\\\\,/g,\"\\\\2c \")}var mi=C(()=>{l()});var ts,_u=C(()=>{l();ts={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]}});function or(i,{loose:e=!1}={}){if(typeof i!=\"string\")return null;if(i=i.trim(),i===\"transparent\")return{mode:\"rgb\",color:[\"0\",\"0\",\"0\"],alpha:\"0\"};if(i in ts)return{mode:\"rgb\",color:ts[i].map(a=>a.toString())};let t=i.replace(_b,(a,s,o,u,c)=>[\"#\",s,s,o,o,u,u,c?c+c:\"\"].join(\"\")).match(Ab);if(t!==null)return{mode:\"rgb\",color:[parseInt(t[1],16),parseInt(t[2],16),parseInt(t[3],16)].map(a=>a.toString()),alpha:t[4]?(parseInt(t[4],16)/255).toString():void 0};let r=i.match(Ob)??i.match(Eb);if(r===null)return null;let n=[r[2],r[3],r[4]].filter(Boolean).map(a=>a.toString());return n.length===2&&n[0].startsWith(\"var(\")?{mode:r[1],color:[n[0]],alpha:n[1]}:!e&&n.length!==3||n.length<3&&!n.some(a=>/^var\\(.*?\\)$/.test(a))?null:{mode:r[1],color:n,alpha:r[5]?.toString?.()}}function rs({mode:i,color:e,alpha:t}){let r=t!==void 0;return i===\"rgba\"||i===\"hsla\"?`${i}(${e.join(\", \")}${r?`, ${t}`:\"\"})`:`${i}(${e.join(\" \")}${r?` / ${t}`:\"\"})`}var Ab,_b,et,gi,Ou,tt,Ob,Eb,is=C(()=>{l();_u();Ab=/^#([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})?$/i,_b=/^#([a-f\\d])([a-f\\d])([a-f\\d])([a-f\\d])?$/i,et=/(?:\\d+|\\d*\\.\\d+)%?/,gi=/(?:\\s*,\\s*|\\s+)/,Ou=/\\s*[,/]\\s*/,tt=/var\\(--(?:[^ )]*?)(?:,(?:[^ )]*?|var\\(--[^ )]*?\\)))?\\)/,Ob=new RegExp(`^(rgba?)\\\\(\\\\s*(${et.source}|${tt.source})(?:${gi.source}(${et.source}|${tt.source}))?(?:${gi.source}(${et.source}|${tt.source}))?(?:${Ou.source}(${et.source}|${tt.source}))?\\\\s*\\\\)$`),Eb=new RegExp(`^(hsla?)\\\\(\\\\s*((?:${et.source})(?:deg|rad|grad|turn)?|${tt.source})(?:${gi.source}(${et.source}|${tt.source}))?(?:${gi.source}(${et.source}|${tt.source}))?(?:${Ou.source}(${et.source}|${tt.source}))?\\\\s*\\\\)$`)});function qe(i,e,t){if(typeof i==\"function\")return i({opacityValue:e});let r=or(i,{loose:!0});return r===null?t:rs({...r,alpha:e})}function oe({color:i,property:e,variable:t}){let r=[].concat(e);if(typeof i==\"function\")return{[t]:\"1\",...Object.fromEntries(r.map(a=>[a,i({opacityVariable:t,opacityValue:`var(${t})`})]))};let n=or(i);return n===null?Object.fromEntries(r.map(a=>[a,i])):n.alpha!==void 0?Object.fromEntries(r.map(a=>[a,i])):{[t]:\"1\",...Object.fromEntries(r.map(a=>[a,rs({...n,alpha:`var(${t})`})]))}}var lr=C(()=>{l();is()});function ie(i,e){let t=[],r=[],n=0,a=!1;for(let s=0;s<i.length;s++){let o=i[s];t.length===0&&o===e[0]&&!a&&(e.length===1||i.slice(s,s+e.length)===e)&&(r.push(i.slice(n,s)),n=s+e.length),a=a?!1:o===\"\\\\\",o===\"(\"||o===\"[\"||o===\"{\"?t.push(o):(o===\")\"&&t[t.length-1]===\"(\"||o===\"]\"&&t[t.length-1]===\"[\"||o===\"}\"&&t[t.length-1]===\"{\")&&t.pop()}return r.push(i.slice(n)),r}var yt=C(()=>{l()});function yi(i){return ie(i,\",\").map(t=>{let r=t.trim(),n={raw:r},a=r.split(Pb),s=new Set;for(let o of a)Eu.lastIndex=0,!s.has(\"KEYWORD\")&&Tb.has(o)?(n.keyword=o,s.add(\"KEYWORD\")):Eu.test(o)?s.has(\"X\")?s.has(\"Y\")?s.has(\"BLUR\")?s.has(\"SPREAD\")||(n.spread=o,s.add(\"SPREAD\")):(n.blur=o,s.add(\"BLUR\")):(n.y=o,s.add(\"Y\")):(n.x=o,s.add(\"X\")):n.color?(n.unknown||(n.unknown=[]),n.unknown.push(o)):n.color=o;return n.valid=n.x!==void 0&&n.y!==void 0,n})}function Tu(i){return i.map(e=>e.valid?[e.keyword,e.x,e.y,e.blur,e.spread,e.color].filter(Boolean).join(\" \"):e.raw).join(\", \")}var Tb,Pb,Eu,ns=C(()=>{l();yt();Tb=new Set([\"inset\",\"inherit\",\"initial\",\"revert\",\"unset\"]),Pb=/\\ +(?![^(]*\\))/g,Eu=/^-?(\\d+|\\.\\d+)(.*?)$/g});function ss(i){return Db.some(e=>new RegExp(`^${e}\\\\(.*\\\\)`).test(i))}function N(i,e=null,t=!0){let r=e&&Ib.has(e.property);return i.startsWith(\"--\")&&!r?`var(${i})`:i.includes(\"url(\")?i.split(/(url\\(.*?\\))/g).filter(Boolean).map(n=>/^url\\(.*?\\)$/.test(n)?n:N(n,e,!1)).join(\"\"):(i=i.replace(/([^\\\\])_+/g,(n,a)=>a+\" \".repeat(n.length-1)).replace(/^_/g,\" \").replace(/\\\\_/g,\"_\"),t&&(i=i.trim()),i=qb(i),i)}function qb(i){let e=[\"theme\"],t=[\"min-content\",\"max-content\",\"fit-content\",\"safe-area-inset-top\",\"safe-area-inset-right\",\"safe-area-inset-bottom\",\"safe-area-inset-left\",\"titlebar-area-x\",\"titlebar-area-y\",\"titlebar-area-width\",\"titlebar-area-height\",\"keyboard-inset-top\",\"keyboard-inset-right\",\"keyboard-inset-bottom\",\"keyboard-inset-left\",\"keyboard-inset-width\",\"keyboard-inset-height\",\"radial-gradient\",\"linear-gradient\",\"conic-gradient\",\"repeating-radial-gradient\",\"repeating-linear-gradient\",\"repeating-conic-gradient\"];return i.replace(/(calc|min|max|clamp)\\(.+\\)/g,r=>{let n=\"\";function a(){let s=n.trimEnd();return s[s.length-1]}for(let s=0;s<r.length;s++){let o=function(f){return f.split(\"\").every((d,p)=>r[s+p]===d)},u=function(f){let d=1/0;for(let m of f){let b=r.indexOf(m,s);b!==-1&&b<d&&(d=b)}let p=r.slice(s,d);return s+=p.length-1,p},c=r[s];if(o(\"var\"))n+=u([\")\",\",\"]);else if(t.some(f=>o(f))){let f=t.find(d=>o(d));n+=f,s+=f.length-1}else e.some(f=>o(f))?n+=u([\")\"]):o(\"[\")?n+=u([\"]\"]):[\"+\",\"-\",\"*\",\"/\"].includes(c)&&![\"(\",\"+\",\"-\",\"*\",\"/\",\",\"].includes(a())?n+=` ${c} `:n+=c}return n.replace(/\\s+/g,\" \")})}function as(i){return i.startsWith(\"url(\")}function os(i){return!isNaN(Number(i))||ss(i)}function ur(i){return i.endsWith(\"%\")&&os(i.slice(0,-1))||ss(i)}function fr(i){return i===\"0\"||new RegExp(`^[+-]?[0-9]*.?[0-9]+(?:[eE][+-]?[0-9]+)?${Mb}$`).test(i)||ss(i)}function Pu(i){return Bb.has(i)}function Du(i){let e=yi(N(i));for(let t of e)if(!t.valid)return!1;return!0}function Iu(i){let e=0;return ie(i,\"_\").every(r=>(r=N(r),r.startsWith(\"var(\")?!0:or(r,{loose:!0})!==null?(e++,!0):!1))?e>0:!1}function qu(i){let e=0;return ie(i,\",\").every(r=>(r=N(r),r.startsWith(\"var(\")?!0:as(r)||Nb(r)||[\"element(\",\"image(\",\"cross-fade(\",\"image-set(\"].some(n=>r.startsWith(n))?(e++,!0):!1))?e>0:!1}function Nb(i){i=N(i);for(let e of Fb)if(i.startsWith(`${e}(`))return!0;return!1}function Ru(i){let e=0;return ie(i,\"_\").every(r=>(r=N(r),r.startsWith(\"var(\")?!0:Lb.has(r)||fr(r)||ur(r)?(e++,!0):!1))?e>0:!1}function Mu(i){let e=0;return ie(i,\",\").every(r=>(r=N(r),r.startsWith(\"var(\")?!0:r.includes(\" \")&&!/(['\"])([^\"']+)\\1/g.test(r)||/^\\d/g.test(r)?!1:(e++,!0)))?e>0:!1}function Bu(i){return $b.has(i)}function Fu(i){return jb.has(i)}function Nu(i){return zb.has(i)}var Db,Ib,Rb,Mb,Bb,Fb,Lb,$b,jb,zb,cr=C(()=>{l();is();ns();yt();Db=[\"min\",\"max\",\"clamp\",\"calc\"];Ib=new Set([\"scroll-timeline-name\",\"timeline-scope\",\"view-timeline-name\",\"font-palette\",\"anchor-name\",\"anchor-scope\",\"position-anchor\",\"position-try-options\",\"scroll-timeline\",\"animation-timeline\",\"view-timeline\",\"position-try\"]);Rb=[\"cm\",\"mm\",\"Q\",\"in\",\"pc\",\"pt\",\"px\",\"em\",\"ex\",\"ch\",\"rem\",\"lh\",\"rlh\",\"vw\",\"vh\",\"vmin\",\"vmax\",\"vb\",\"vi\",\"svw\",\"svh\",\"lvw\",\"lvh\",\"dvw\",\"dvh\",\"cqw\",\"cqh\",\"cqi\",\"cqb\",\"cqmin\",\"cqmax\"],Mb=`(?:${Rb.join(\"|\")})`;Bb=new Set([\"thin\",\"medium\",\"thick\"]);Fb=new Set([\"conic-gradient\",\"linear-gradient\",\"radial-gradient\",\"repeating-conic-gradient\",\"repeating-linear-gradient\",\"repeating-radial-gradient\"]);Lb=new Set([\"center\",\"top\",\"right\",\"bottom\",\"left\"]);$b=new Set([\"serif\",\"sans-serif\",\"monospace\",\"cursive\",\"fantasy\",\"system-ui\",\"ui-serif\",\"ui-sans-serif\",\"ui-monospace\",\"ui-rounded\",\"math\",\"emoji\",\"fangsong\"]);jb=new Set([\"xx-small\",\"x-small\",\"small\",\"medium\",\"large\",\"x-large\",\"xx-large\",\"xxx-large\"]);zb=new Set([\"larger\",\"smaller\"])});function Lu(i){let e=[\"cover\",\"contain\"];return ie(i,\",\").every(t=>{let r=ie(t,\"_\").filter(Boolean);return r.length===1&&e.includes(r[0])?!0:r.length!==1&&r.length!==2?!1:r.every(n=>fr(n)||ur(n)||n===\"auto\")})}var $u=C(()=>{l();cr();yt()});function ju(i,e){i.walkClasses(t=>{t.value=e(t.value),t.raws&&t.raws.value&&(t.raws.value=gt(t.raws.value))})}function zu(i,e){if(!rt(i))return;let t=i.slice(1,-1);if(!!e(t))return N(t)}function Vb(i,e={},t){let r=e[i];if(r!==void 0)return Xe(r);if(rt(i)){let n=zu(i,t);return n===void 0?void 0:Xe(n)}}function wi(i,e={},{validate:t=()=>!0}={}){let r=e.values?.[i];return r!==void 0?r:e.supportsNegativeValues&&i.startsWith(\"-\")?Vb(i.slice(1),e.values,t):zu(i,t)}function rt(i){return i.startsWith(\"[\")&&i.endsWith(\"]\")}function Vu(i){let e=i.lastIndexOf(\"/\"),t=i.lastIndexOf(\"[\",e),r=i.indexOf(\"]\",e);return i[e-1]===\"]\"||i[e+1]===\"[\"||t!==-1&&r!==-1&&t<e&&e<r&&(e=i.lastIndexOf(\"/\",t)),e===-1||e===i.length-1?[i,void 0]:rt(i)&&!i.includes(\"]/[\")?[i,void 0]:[i.slice(0,e),i.slice(e+1)]}function At(i){if(typeof i==\"string\"&&i.includes(\"<alpha-value>\")){let e=i;return({opacityValue:t=1})=>e.replace(/<alpha-value>/g,t)}return i}function Uu(i){return N(i.slice(1,-1))}function Ub(i,e={},{tailwindConfig:t={}}={}){if(e.values?.[i]!==void 0)return At(e.values?.[i]);let[r,n]=Vu(i);if(n!==void 0){let a=e.values?.[r]??(rt(r)?r.slice(1,-1):void 0);return a===void 0?void 0:(a=At(a),rt(n)?qe(a,Uu(n)):t.theme?.opacity?.[n]===void 0?void 0:qe(a,t.theme.opacity[n]))}return wi(i,e,{validate:Iu})}function Wb(i,e={}){return e.values?.[i]}function ge(i){return(e,t)=>wi(e,t,{validate:i})}function Gb(i,e){let t=i.indexOf(e);return t===-1?[void 0,i]:[i.slice(0,t),i.slice(t+1)]}function us(i,e,t,r){if(t.values&&e in t.values)for(let{type:a}of i??[]){let s=ls[a](e,t,{tailwindConfig:r});if(s!==void 0)return[s,a,null]}if(rt(e)){let a=e.slice(1,-1),[s,o]=Gb(a,\":\");if(!/^[\\w-_]+$/g.test(s))o=a;else if(s!==void 0&&!Wu.includes(s))return[];if(o.length>0&&Wu.includes(s))return[wi(`[${o}]`,t),s,null]}let n=fs(i,e,t,r);for(let a of n)return a;return[]}function*fs(i,e,t,r){let n=Z(r,\"generalizedModifiers\"),[a,s]=Vu(e);if(n&&t.modifiers!=null&&(t.modifiers===\"any\"||typeof t.modifiers==\"object\"&&(s&&rt(s)||s in t.modifiers))||(a=e,s=void 0),s!==void 0&&a===\"\"&&(a=\"DEFAULT\"),s!==void 0&&typeof t.modifiers==\"object\"){let u=t.modifiers?.[s]??null;u!==null?s=u:rt(s)&&(s=Uu(s))}for(let{type:u}of i??[]){let c=ls[u](a,t,{tailwindConfig:r});c!==void 0&&(yield[c,u,s??null])}}var ls,Wu,pr=C(()=>{l();mi();lr();cr();fi();$u();ze();ls={any:wi,color:Ub,url:ge(as),image:ge(qu),length:ge(fr),percentage:ge(ur),position:ge(Ru),lookup:Wb,\"generic-name\":ge(Bu),\"family-name\":ge(Mu),number:ge(os),\"line-width\":ge(Pu),\"absolute-size\":ge(Fu),\"relative-size\":ge(Nu),shadow:ge(Du),size:ge(Lu)},Wu=Object.keys(ls)});function L(i){return typeof i==\"function\"?i({}):i}var cs=C(()=>{l()});function _t(i){return typeof i==\"function\"}function dr(i,...e){let t=e.pop();for(let r of e)for(let n in r){let a=t(i[n],r[n]);a===void 0?se(i[n])&&se(r[n])?i[n]=dr({},i[n],r[n],t):i[n]=r[n]:i[n]=a}return i}function Hb(i,...e){return _t(i)?i(...e):i}function Yb(i){return i.reduce((e,{extend:t})=>dr(e,t,(r,n)=>r===void 0?[n]:Array.isArray(r)?[n,...r]:[n,r]),{})}function Qb(i){return{...i.reduce((e,t)=>es(e,t),{}),extend:Yb(i)}}function Gu(i,e){if(Array.isArray(i)&&se(i[0]))return i.concat(e);if(Array.isArray(e)&&se(e[0])&&se(i))return[i,...e];if(Array.isArray(e))return e}function Jb({extend:i,...e}){return dr(e,i,(t,r)=>!_t(t)&&!r.some(_t)?dr({},t,...r,Gu):(n,a)=>dr({},...[t,...r].map(s=>Hb(s,n,a)),Gu))}function*Xb(i){let e=Ke(i);if(e.length===0||(yield e,Array.isArray(i)))return;let t=/^(.*?)\\s*\\/\\s*([^/]+)$/,r=i.match(t);if(r!==null){let[,n,a]=r,s=Ke(n);s.alpha=a,yield s}}function Kb(i){let e=(t,r)=>{for(let n of Xb(t)){let a=0,s=i;for(;s!=null&&a<n.length;)s=s[n[a++]],s=_t(s)&&(n.alpha===void 0||a<=n.length-1)?s(e,ps):s;if(s!==void 0){if(n.alpha!==void 0){let o=At(s);return qe(o,n.alpha,L(o))}return se(s)?Ze(s):s}}return r};return Object.assign(e,{theme:e,...ps}),Object.keys(i).reduce((t,r)=>(t[r]=_t(i[r])?i[r](e,ps):i[r],t),{})}function Hu(i){let e=[];return i.forEach(t=>{e=[...e,t];let r=t?.plugins??[];r.length!==0&&r.forEach(n=>{n.__isOptionsFunction&&(n=n()),e=[...e,...Hu([n?.config??{}])]})}),e}function Zb(i){return[...i].reduceRight((t,r)=>_t(r)?r({corePlugins:t}):mu(r,t),du)}function e0(i){return[...i].reduceRight((t,r)=>[...t,...r],[])}function ds(i){let e=[...Hu(i),{prefix:\"\",important:!1,separator:\":\"}];return Cu(es({theme:Kb(Jb(Qb(e.map(t=>t?.theme??{})))),corePlugins:Zb(e.map(t=>t.corePlugins)),plugins:e0(i.map(t=>t?.plugins??[]))},...e))}var ps,Yu=C(()=>{l();fi();hu();gu();Zn();vu();pi();Au();Ct();hi();pr();lr();cs();ps={colors:Kn,negative(i){return Object.keys(i).filter(e=>i[e]!==\"0\").reduce((e,t)=>{let r=Xe(i[t]);return r!==void 0&&(e[`-${t}`]=r),e},{})},breakpoints(i){return Object.keys(i).filter(e=>typeof i[e]==\"string\").reduce((e,t)=>({...e,[`screen-${t}`]:i[t]}),{})}}});var bi=v((qE,Qu)=>{l();Qu.exports={content:[],presets:[],darkMode:\"media\",theme:{accentColor:({theme:i})=>({...i(\"colors\"),auto:\"auto\"}),animation:{none:\"none\",spin:\"spin 1s linear infinite\",ping:\"ping 1s cubic-bezier(0, 0, 0.2, 1) infinite\",pulse:\"pulse 2s cubic-bezier(0.4, 0, 0.6, 1) infinite\",bounce:\"bounce 1s infinite\"},aria:{busy:'busy=\"true\"',checked:'checked=\"true\"',disabled:'disabled=\"true\"',expanded:'expanded=\"true\"',hidden:'hidden=\"true\"',pressed:'pressed=\"true\"',readonly:'readonly=\"true\"',required:'required=\"true\"',selected:'selected=\"true\"'},aspectRatio:{auto:\"auto\",square:\"1 / 1\",video:\"16 / 9\"},backdropBlur:({theme:i})=>i(\"blur\"),backdropBrightness:({theme:i})=>i(\"brightness\"),backdropContrast:({theme:i})=>i(\"contrast\"),backdropGrayscale:({theme:i})=>i(\"grayscale\"),backdropHueRotate:({theme:i})=>i(\"hueRotate\"),backdropInvert:({theme:i})=>i(\"invert\"),backdropOpacity:({theme:i})=>i(\"opacity\"),backdropSaturate:({theme:i})=>i(\"saturate\"),backdropSepia:({theme:i})=>i(\"sepia\"),backgroundColor:({theme:i})=>i(\"colors\"),backgroundImage:{none:\"none\",\"gradient-to-t\":\"linear-gradient(to top, var(--tw-gradient-stops))\",\"gradient-to-tr\":\"linear-gradient(to top right, var(--tw-gradient-stops))\",\"gradient-to-r\":\"linear-gradient(to right, var(--tw-gradient-stops))\",\"gradient-to-br\":\"linear-gradient(to bottom right, var(--tw-gradient-stops))\",\"gradient-to-b\":\"linear-gradient(to bottom, var(--tw-gradient-stops))\",\"gradient-to-bl\":\"linear-gradient(to bottom left, var(--tw-gradient-stops))\",\"gradient-to-l\":\"linear-gradient(to left, var(--tw-gradient-stops))\",\"gradient-to-tl\":\"linear-gradient(to top left, var(--tw-gradient-stops))\"},backgroundOpacity:({theme:i})=>i(\"opacity\"),backgroundPosition:{bottom:\"bottom\",center:\"center\",left:\"left\",\"left-bottom\":\"left bottom\",\"left-top\":\"left top\",right:\"right\",\"right-bottom\":\"right bottom\",\"right-top\":\"right top\",top:\"top\"},backgroundSize:{auto:\"auto\",cover:\"cover\",contain:\"contain\"},blur:{0:\"0\",none:\"\",sm:\"4px\",DEFAULT:\"8px\",md:\"12px\",lg:\"16px\",xl:\"24px\",\"2xl\":\"40px\",\"3xl\":\"64px\"},borderColor:({theme:i})=>({...i(\"colors\"),DEFAULT:i(\"colors.gray.200\",\"currentColor\")}),borderOpacity:({theme:i})=>i(\"opacity\"),borderRadius:{none:\"0px\",sm:\"0.125rem\",DEFAULT:\"0.25rem\",md:\"0.375rem\",lg:\"0.5rem\",xl:\"0.75rem\",\"2xl\":\"1rem\",\"3xl\":\"1.5rem\",full:\"9999px\"},borderSpacing:({theme:i})=>({...i(\"spacing\")}),borderWidth:{DEFAULT:\"1px\",0:\"0px\",2:\"2px\",4:\"4px\",8:\"8px\"},boxShadow:{sm:\"0 1px 2px 0 rgb(0 0 0 / 0.05)\",DEFAULT:\"0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1)\",md:\"0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1)\",lg:\"0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1)\",xl:\"0 20px 25px -5px rgb(0 0 0 / 0.1), 0 8px 10px -6px rgb(0 0 0 / 0.1)\",\"2xl\":\"0 25px 50px -12px rgb(0 0 0 / 0.25)\",inner:\"inset 0 2px 4px 0 rgb(0 0 0 / 0.05)\",none:\"none\"},boxShadowColor:({theme:i})=>i(\"colors\"),brightness:{0:\"0\",50:\".5\",75:\".75\",90:\".9\",95:\".95\",100:\"1\",105:\"1.05\",110:\"1.1\",125:\"1.25\",150:\"1.5\",200:\"2\"},caretColor:({theme:i})=>i(\"colors\"),colors:({colors:i})=>({inherit:i.inherit,current:i.current,transparent:i.transparent,black:i.black,white:i.white,slate:i.slate,gray:i.gray,zinc:i.zinc,neutral:i.neutral,stone:i.stone,red:i.red,orange:i.orange,amber:i.amber,yellow:i.yellow,lime:i.lime,green:i.green,emerald:i.emerald,teal:i.teal,cyan:i.cyan,sky:i.sky,blue:i.blue,indigo:i.indigo,violet:i.violet,purple:i.purple,fuchsia:i.fuchsia,pink:i.pink,rose:i.rose}),columns:{auto:\"auto\",1:\"1\",2:\"2\",3:\"3\",4:\"4\",5:\"5\",6:\"6\",7:\"7\",8:\"8\",9:\"9\",10:\"10\",11:\"11\",12:\"12\",\"3xs\":\"16rem\",\"2xs\":\"18rem\",xs:\"20rem\",sm:\"24rem\",md:\"28rem\",lg:\"32rem\",xl:\"36rem\",\"2xl\":\"42rem\",\"3xl\":\"48rem\",\"4xl\":\"56rem\",\"5xl\":\"64rem\",\"6xl\":\"72rem\",\"7xl\":\"80rem\"},container:{},content:{none:\"none\"},contrast:{0:\"0\",50:\".5\",75:\".75\",100:\"1\",125:\"1.25\",150:\"1.5\",200:\"2\"},cursor:{auto:\"auto\",default:\"default\",pointer:\"pointer\",wait:\"wait\",text:\"text\",move:\"move\",help:\"help\",\"not-allowed\":\"not-allowed\",none:\"none\",\"context-menu\":\"context-menu\",progress:\"progress\",cell:\"cell\",crosshair:\"crosshair\",\"vertical-text\":\"vertical-text\",alias:\"alias\",copy:\"copy\",\"no-drop\":\"no-drop\",grab:\"grab\",grabbing:\"grabbing\",\"all-scroll\":\"all-scroll\",\"col-resize\":\"col-resize\",\"row-resize\":\"row-resize\",\"n-resize\":\"n-resize\",\"e-resize\":\"e-resize\",\"s-resize\":\"s-resize\",\"w-resize\":\"w-resize\",\"ne-resize\":\"ne-resize\",\"nw-resize\":\"nw-resize\",\"se-resize\":\"se-resize\",\"sw-resize\":\"sw-resize\",\"ew-resize\":\"ew-resize\",\"ns-resize\":\"ns-resize\",\"nesw-resize\":\"nesw-resize\",\"nwse-resize\":\"nwse-resize\",\"zoom-in\":\"zoom-in\",\"zoom-out\":\"zoom-out\"},divideColor:({theme:i})=>i(\"borderColor\"),divideOpacity:({theme:i})=>i(\"borderOpacity\"),divideWidth:({theme:i})=>i(\"borderWidth\"),dropShadow:{sm:\"0 1px 1px rgb(0 0 0 / 0.05)\",DEFAULT:[\"0 1px 2px rgb(0 0 0 / 0.1)\",\"0 1px 1px rgb(0 0 0 / 0.06)\"],md:[\"0 4px 3px rgb(0 0 0 / 0.07)\",\"0 2px 2px rgb(0 0 0 / 0.06)\"],lg:[\"0 10px 8px rgb(0 0 0 / 0.04)\",\"0 4px 3px rgb(0 0 0 / 0.1)\"],xl:[\"0 20px 13px rgb(0 0 0 / 0.03)\",\"0 8px 5px rgb(0 0 0 / 0.08)\"],\"2xl\":\"0 25px 25px rgb(0 0 0 / 0.15)\",none:\"0 0 #0000\"},fill:({theme:i})=>({none:\"none\",...i(\"colors\")}),flex:{1:\"1 1 0%\",auto:\"1 1 auto\",initial:\"0 1 auto\",none:\"none\"},flexBasis:({theme:i})=>({auto:\"auto\",...i(\"spacing\"),\"1/2\":\"50%\",\"1/3\":\"33.333333%\",\"2/3\":\"66.666667%\",\"1/4\":\"25%\",\"2/4\":\"50%\",\"3/4\":\"75%\",\"1/5\":\"20%\",\"2/5\":\"40%\",\"3/5\":\"60%\",\"4/5\":\"80%\",\"1/6\":\"16.666667%\",\"2/6\":\"33.333333%\",\"3/6\":\"50%\",\"4/6\":\"66.666667%\",\"5/6\":\"83.333333%\",\"1/12\":\"8.333333%\",\"2/12\":\"16.666667%\",\"3/12\":\"25%\",\"4/12\":\"33.333333%\",\"5/12\":\"41.666667%\",\"6/12\":\"50%\",\"7/12\":\"58.333333%\",\"8/12\":\"66.666667%\",\"9/12\":\"75%\",\"10/12\":\"83.333333%\",\"11/12\":\"91.666667%\",full:\"100%\"}),flexGrow:{0:\"0\",DEFAULT:\"1\"},flexShrink:{0:\"0\",DEFAULT:\"1\"},fontFamily:{sans:[\"ui-sans-serif\",\"system-ui\",\"sans-serif\",'\"Apple Color Emoji\"','\"Segoe UI Emoji\"','\"Segoe UI Symbol\"','\"Noto Color Emoji\"'],serif:[\"ui-serif\",\"Georgia\",\"Cambria\",'\"Times New Roman\"',\"Times\",\"serif\"],mono:[\"ui-monospace\",\"SFMono-Regular\",\"Menlo\",\"Monaco\",\"Consolas\",'\"Liberation Mono\"','\"Courier New\"',\"monospace\"]},fontSize:{xs:[\"0.75rem\",{lineHeight:\"1rem\"}],sm:[\"0.875rem\",{lineHeight:\"1.25rem\"}],base:[\"1rem\",{lineHeight:\"1.5rem\"}],lg:[\"1.125rem\",{lineHeight:\"1.75rem\"}],xl:[\"1.25rem\",{lineHeight:\"1.75rem\"}],\"2xl\":[\"1.5rem\",{lineHeight:\"2rem\"}],\"3xl\":[\"1.875rem\",{lineHeight:\"2.25rem\"}],\"4xl\":[\"2.25rem\",{lineHeight:\"2.5rem\"}],\"5xl\":[\"3rem\",{lineHeight:\"1\"}],\"6xl\":[\"3.75rem\",{lineHeight:\"1\"}],\"7xl\":[\"4.5rem\",{lineHeight:\"1\"}],\"8xl\":[\"6rem\",{lineHeight:\"1\"}],\"9xl\":[\"8rem\",{lineHeight:\"1\"}]},fontWeight:{thin:\"100\",extralight:\"200\",light:\"300\",normal:\"400\",medium:\"500\",semibold:\"600\",bold:\"700\",extrabold:\"800\",black:\"900\"},gap:({theme:i})=>i(\"spacing\"),gradientColorStops:({theme:i})=>i(\"colors\"),gradientColorStopPositions:{\"0%\":\"0%\",\"5%\":\"5%\",\"10%\":\"10%\",\"15%\":\"15%\",\"20%\":\"20%\",\"25%\":\"25%\",\"30%\":\"30%\",\"35%\":\"35%\",\"40%\":\"40%\",\"45%\":\"45%\",\"50%\":\"50%\",\"55%\":\"55%\",\"60%\":\"60%\",\"65%\":\"65%\",\"70%\":\"70%\",\"75%\":\"75%\",\"80%\":\"80%\",\"85%\":\"85%\",\"90%\":\"90%\",\"95%\":\"95%\",\"100%\":\"100%\"},grayscale:{0:\"0\",DEFAULT:\"100%\"},gridAutoColumns:{auto:\"auto\",min:\"min-content\",max:\"max-content\",fr:\"minmax(0, 1fr)\"},gridAutoRows:{auto:\"auto\",min:\"min-content\",max:\"max-content\",fr:\"minmax(0, 1fr)\"},gridColumn:{auto:\"auto\",\"span-1\":\"span 1 / span 1\",\"span-2\":\"span 2 / span 2\",\"span-3\":\"span 3 / span 3\",\"span-4\":\"span 4 / span 4\",\"span-5\":\"span 5 / span 5\",\"span-6\":\"span 6 / span 6\",\"span-7\":\"span 7 / span 7\",\"span-8\":\"span 8 / span 8\",\"span-9\":\"span 9 / span 9\",\"span-10\":\"span 10 / span 10\",\"span-11\":\"span 11 / span 11\",\"span-12\":\"span 12 / span 12\",\"span-full\":\"1 / -1\"},gridColumnEnd:{auto:\"auto\",1:\"1\",2:\"2\",3:\"3\",4:\"4\",5:\"5\",6:\"6\",7:\"7\",8:\"8\",9:\"9\",10:\"10\",11:\"11\",12:\"12\",13:\"13\"},gridColumnStart:{auto:\"auto\",1:\"1\",2:\"2\",3:\"3\",4:\"4\",5:\"5\",6:\"6\",7:\"7\",8:\"8\",9:\"9\",10:\"10\",11:\"11\",12:\"12\",13:\"13\"},gridRow:{auto:\"auto\",\"span-1\":\"span 1 / span 1\",\"span-2\":\"span 2 / span 2\",\"span-3\":\"span 3 / span 3\",\"span-4\":\"span 4 / span 4\",\"span-5\":\"span 5 / span 5\",\"span-6\":\"span 6 / span 6\",\"span-7\":\"span 7 / span 7\",\"span-8\":\"span 8 / span 8\",\"span-9\":\"span 9 / span 9\",\"span-10\":\"span 10 / span 10\",\"span-11\":\"span 11 / span 11\",\"span-12\":\"span 12 / span 12\",\"span-full\":\"1 / -1\"},gridRowEnd:{auto:\"auto\",1:\"1\",2:\"2\",3:\"3\",4:\"4\",5:\"5\",6:\"6\",7:\"7\",8:\"8\",9:\"9\",10:\"10\",11:\"11\",12:\"12\",13:\"13\"},gridRowStart:{auto:\"auto\",1:\"1\",2:\"2\",3:\"3\",4:\"4\",5:\"5\",6:\"6\",7:\"7\",8:\"8\",9:\"9\",10:\"10\",11:\"11\",12:\"12\",13:\"13\"},gridTemplateColumns:{none:\"none\",subgrid:\"subgrid\",1:\"repeat(1, minmax(0, 1fr))\",2:\"repeat(2, minmax(0, 1fr))\",3:\"repeat(3, minmax(0, 1fr))\",4:\"repeat(4, minmax(0, 1fr))\",5:\"repeat(5, minmax(0, 1fr))\",6:\"repeat(6, minmax(0, 1fr))\",7:\"repeat(7, minmax(0, 1fr))\",8:\"repeat(8, minmax(0, 1fr))\",9:\"repeat(9, minmax(0, 1fr))\",10:\"repeat(10, minmax(0, 1fr))\",11:\"repeat(11, minmax(0, 1fr))\",12:\"repeat(12, minmax(0, 1fr))\"},gridTemplateRows:{none:\"none\",subgrid:\"subgrid\",1:\"repeat(1, minmax(0, 1fr))\",2:\"repeat(2, minmax(0, 1fr))\",3:\"repeat(3, minmax(0, 1fr))\",4:\"repeat(4, minmax(0, 1fr))\",5:\"repeat(5, minmax(0, 1fr))\",6:\"repeat(6, minmax(0, 1fr))\",7:\"repeat(7, minmax(0, 1fr))\",8:\"repeat(8, minmax(0, 1fr))\",9:\"repeat(9, minmax(0, 1fr))\",10:\"repeat(10, minmax(0, 1fr))\",11:\"repeat(11, minmax(0, 1fr))\",12:\"repeat(12, minmax(0, 1fr))\"},height:({theme:i})=>({auto:\"auto\",...i(\"spacing\"),\"1/2\":\"50%\",\"1/3\":\"33.333333%\",\"2/3\":\"66.666667%\",\"1/4\":\"25%\",\"2/4\":\"50%\",\"3/4\":\"75%\",\"1/5\":\"20%\",\"2/5\":\"40%\",\"3/5\":\"60%\",\"4/5\":\"80%\",\"1/6\":\"16.666667%\",\"2/6\":\"33.333333%\",\"3/6\":\"50%\",\"4/6\":\"66.666667%\",\"5/6\":\"83.333333%\",full:\"100%\",screen:\"100vh\",svh:\"100svh\",lvh:\"100lvh\",dvh:\"100dvh\",min:\"min-content\",max:\"max-content\",fit:\"fit-content\"}),hueRotate:{0:\"0deg\",15:\"15deg\",30:\"30deg\",60:\"60deg\",90:\"90deg\",180:\"180deg\"},inset:({theme:i})=>({auto:\"auto\",...i(\"spacing\"),\"1/2\":\"50%\",\"1/3\":\"33.333333%\",\"2/3\":\"66.666667%\",\"1/4\":\"25%\",\"2/4\":\"50%\",\"3/4\":\"75%\",full:\"100%\"}),invert:{0:\"0\",DEFAULT:\"100%\"},keyframes:{spin:{to:{transform:\"rotate(360deg)\"}},ping:{\"75%, 100%\":{transform:\"scale(2)\",opacity:\"0\"}},pulse:{\"50%\":{opacity:\".5\"}},bounce:{\"0%, 100%\":{transform:\"translateY(-25%)\",animationTimingFunction:\"cubic-bezier(0.8,0,1,1)\"},\"50%\":{transform:\"none\",animationTimingFunction:\"cubic-bezier(0,0,0.2,1)\"}}},letterSpacing:{tighter:\"-0.05em\",tight:\"-0.025em\",normal:\"0em\",wide:\"0.025em\",wider:\"0.05em\",widest:\"0.1em\"},lineHeight:{none:\"1\",tight:\"1.25\",snug:\"1.375\",normal:\"1.5\",relaxed:\"1.625\",loose:\"2\",3:\".75rem\",4:\"1rem\",5:\"1.25rem\",6:\"1.5rem\",7:\"1.75rem\",8:\"2rem\",9:\"2.25rem\",10:\"2.5rem\"},listStyleType:{none:\"none\",disc:\"disc\",decimal:\"decimal\"},listStyleImage:{none:\"none\"},margin:({theme:i})=>({auto:\"auto\",...i(\"spacing\")}),lineClamp:{1:\"1\",2:\"2\",3:\"3\",4:\"4\",5:\"5\",6:\"6\"},maxHeight:({theme:i})=>({...i(\"spacing\"),none:\"none\",full:\"100%\",screen:\"100vh\",svh:\"100svh\",lvh:\"100lvh\",dvh:\"100dvh\",min:\"min-content\",max:\"max-content\",fit:\"fit-content\"}),maxWidth:({theme:i,breakpoints:e})=>({...i(\"spacing\"),none:\"none\",xs:\"20rem\",sm:\"24rem\",md:\"28rem\",lg:\"32rem\",xl:\"36rem\",\"2xl\":\"42rem\",\"3xl\":\"48rem\",\"4xl\":\"56rem\",\"5xl\":\"64rem\",\"6xl\":\"72rem\",\"7xl\":\"80rem\",full:\"100%\",min:\"min-content\",max:\"max-content\",fit:\"fit-content\",prose:\"65ch\",...e(i(\"screens\"))}),minHeight:({theme:i})=>({...i(\"spacing\"),full:\"100%\",screen:\"100vh\",svh:\"100svh\",lvh:\"100lvh\",dvh:\"100dvh\",min:\"min-content\",max:\"max-content\",fit:\"fit-content\"}),minWidth:({theme:i})=>({...i(\"spacing\"),full:\"100%\",min:\"min-content\",max:\"max-content\",fit:\"fit-content\"}),objectPosition:{bottom:\"bottom\",center:\"center\",left:\"left\",\"left-bottom\":\"left bottom\",\"left-top\":\"left top\",right:\"right\",\"right-bottom\":\"right bottom\",\"right-top\":\"right top\",top:\"top\"},opacity:{0:\"0\",5:\"0.05\",10:\"0.1\",15:\"0.15\",20:\"0.2\",25:\"0.25\",30:\"0.3\",35:\"0.35\",40:\"0.4\",45:\"0.45\",50:\"0.5\",55:\"0.55\",60:\"0.6\",65:\"0.65\",70:\"0.7\",75:\"0.75\",80:\"0.8\",85:\"0.85\",90:\"0.9\",95:\"0.95\",100:\"1\"},order:{first:\"-9999\",last:\"9999\",none:\"0\",1:\"1\",2:\"2\",3:\"3\",4:\"4\",5:\"5\",6:\"6\",7:\"7\",8:\"8\",9:\"9\",10:\"10\",11:\"11\",12:\"12\"},outlineColor:({theme:i})=>i(\"colors\"),outlineOffset:{0:\"0px\",1:\"1px\",2:\"2px\",4:\"4px\",8:\"8px\"},outlineWidth:{0:\"0px\",1:\"1px\",2:\"2px\",4:\"4px\",8:\"8px\"},padding:({theme:i})=>i(\"spacing\"),placeholderColor:({theme:i})=>i(\"colors\"),placeholderOpacity:({theme:i})=>i(\"opacity\"),ringColor:({theme:i})=>({DEFAULT:i(\"colors.blue.500\",\"#3b82f6\"),...i(\"colors\")}),ringOffsetColor:({theme:i})=>i(\"colors\"),ringOffsetWidth:{0:\"0px\",1:\"1px\",2:\"2px\",4:\"4px\",8:\"8px\"},ringOpacity:({theme:i})=>({DEFAULT:\"0.5\",...i(\"opacity\")}),ringWidth:{DEFAULT:\"3px\",0:\"0px\",1:\"1px\",2:\"2px\",4:\"4px\",8:\"8px\"},rotate:{0:\"0deg\",1:\"1deg\",2:\"2deg\",3:\"3deg\",6:\"6deg\",12:\"12deg\",45:\"45deg\",90:\"90deg\",180:\"180deg\"},saturate:{0:\"0\",50:\".5\",100:\"1\",150:\"1.5\",200:\"2\"},scale:{0:\"0\",50:\".5\",75:\".75\",90:\".9\",95:\".95\",100:\"1\",105:\"1.05\",110:\"1.1\",125:\"1.25\",150:\"1.5\"},screens:{sm:\"640px\",md:\"768px\",lg:\"1024px\",xl:\"1280px\",\"2xl\":\"1536px\"},scrollMargin:({theme:i})=>({...i(\"spacing\")}),scrollPadding:({theme:i})=>i(\"spacing\"),sepia:{0:\"0\",DEFAULT:\"100%\"},skew:{0:\"0deg\",1:\"1deg\",2:\"2deg\",3:\"3deg\",6:\"6deg\",12:\"12deg\"},space:({theme:i})=>({...i(\"spacing\")}),spacing:{px:\"1px\",0:\"0px\",.5:\"0.125rem\",1:\"0.25rem\",1.5:\"0.375rem\",2:\"0.5rem\",2.5:\"0.625rem\",3:\"0.75rem\",3.5:\"0.875rem\",4:\"1rem\",5:\"1.25rem\",6:\"1.5rem\",7:\"1.75rem\",8:\"2rem\",9:\"2.25rem\",10:\"2.5rem\",11:\"2.75rem\",12:\"3rem\",14:\"3.5rem\",16:\"4rem\",20:\"5rem\",24:\"6rem\",28:\"7rem\",32:\"8rem\",36:\"9rem\",40:\"10rem\",44:\"11rem\",48:\"12rem\",52:\"13rem\",56:\"14rem\",60:\"15rem\",64:\"16rem\",72:\"18rem\",80:\"20rem\",96:\"24rem\"},stroke:({theme:i})=>({none:\"none\",...i(\"colors\")}),strokeWidth:{0:\"0\",1:\"1\",2:\"2\"},supports:{},data:{},textColor:({theme:i})=>i(\"colors\"),textDecorationColor:({theme:i})=>i(\"colors\"),textDecorationThickness:{auto:\"auto\",\"from-font\":\"from-font\",0:\"0px\",1:\"1px\",2:\"2px\",4:\"4px\",8:\"8px\"},textIndent:({theme:i})=>({...i(\"spacing\")}),textOpacity:({theme:i})=>i(\"opacity\"),textUnderlineOffset:{auto:\"auto\",0:\"0px\",1:\"1px\",2:\"2px\",4:\"4px\",8:\"8px\"},transformOrigin:{center:\"center\",top:\"top\",\"top-right\":\"top right\",right:\"right\",\"bottom-right\":\"bottom right\",bottom:\"bottom\",\"bottom-left\":\"bottom left\",left:\"left\",\"top-left\":\"top left\"},transitionDelay:{0:\"0s\",75:\"75ms\",100:\"100ms\",150:\"150ms\",200:\"200ms\",300:\"300ms\",500:\"500ms\",700:\"700ms\",1e3:\"1000ms\"},transitionDuration:{DEFAULT:\"150ms\",0:\"0s\",75:\"75ms\",100:\"100ms\",150:\"150ms\",200:\"200ms\",300:\"300ms\",500:\"500ms\",700:\"700ms\",1e3:\"1000ms\"},transitionProperty:{none:\"none\",all:\"all\",DEFAULT:\"color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter\",colors:\"color, background-color, border-color, text-decoration-color, fill, stroke\",opacity:\"opacity\",shadow:\"box-shadow\",transform:\"transform\"},transitionTimingFunction:{DEFAULT:\"cubic-bezier(0.4, 0, 0.2, 1)\",linear:\"linear\",in:\"cubic-bezier(0.4, 0, 1, 1)\",out:\"cubic-bezier(0, 0, 0.2, 1)\",\"in-out\":\"cubic-bezier(0.4, 0, 0.2, 1)\"},translate:({theme:i})=>({...i(\"spacing\"),\"1/2\":\"50%\",\"1/3\":\"33.333333%\",\"2/3\":\"66.666667%\",\"1/4\":\"25%\",\"2/4\":\"50%\",\"3/4\":\"75%\",full:\"100%\"}),size:({theme:i})=>({auto:\"auto\",...i(\"spacing\"),\"1/2\":\"50%\",\"1/3\":\"33.333333%\",\"2/3\":\"66.666667%\",\"1/4\":\"25%\",\"2/4\":\"50%\",\"3/4\":\"75%\",\"1/5\":\"20%\",\"2/5\":\"40%\",\"3/5\":\"60%\",\"4/5\":\"80%\",\"1/6\":\"16.666667%\",\"2/6\":\"33.333333%\",\"3/6\":\"50%\",\"4/6\":\"66.666667%\",\"5/6\":\"83.333333%\",\"1/12\":\"8.333333%\",\"2/12\":\"16.666667%\",\"3/12\":\"25%\",\"4/12\":\"33.333333%\",\"5/12\":\"41.666667%\",\"6/12\":\"50%\",\"7/12\":\"58.333333%\",\"8/12\":\"66.666667%\",\"9/12\":\"75%\",\"10/12\":\"83.333333%\",\"11/12\":\"91.666667%\",full:\"100%\",min:\"min-content\",max:\"max-content\",fit:\"fit-content\"}),width:({theme:i})=>({auto:\"auto\",...i(\"spacing\"),\"1/2\":\"50%\",\"1/3\":\"33.333333%\",\"2/3\":\"66.666667%\",\"1/4\":\"25%\",\"2/4\":\"50%\",\"3/4\":\"75%\",\"1/5\":\"20%\",\"2/5\":\"40%\",\"3/5\":\"60%\",\"4/5\":\"80%\",\"1/6\":\"16.666667%\",\"2/6\":\"33.333333%\",\"3/6\":\"50%\",\"4/6\":\"66.666667%\",\"5/6\":\"83.333333%\",\"1/12\":\"8.333333%\",\"2/12\":\"16.666667%\",\"3/12\":\"25%\",\"4/12\":\"33.333333%\",\"5/12\":\"41.666667%\",\"6/12\":\"50%\",\"7/12\":\"58.333333%\",\"8/12\":\"66.666667%\",\"9/12\":\"75%\",\"10/12\":\"83.333333%\",\"11/12\":\"91.666667%\",full:\"100%\",screen:\"100vw\",svw:\"100svw\",lvw:\"100lvw\",dvw:\"100dvw\",min:\"min-content\",max:\"max-content\",fit:\"fit-content\"}),willChange:{auto:\"auto\",scroll:\"scroll-position\",contents:\"contents\",transform:\"transform\"},zIndex:{auto:\"auto\",0:\"0\",10:\"10\",20:\"20\",30:\"30\",40:\"40\",50:\"50\"}},plugins:[]}});function vi(i){let e=(i?.presets??[Ju.default]).slice().reverse().flatMap(n=>vi(n instanceof Function?n():n)),t={respectDefaultRingColorOpacity:{theme:{ringColor:({theme:n})=>({DEFAULT:\"#3b82f67f\",...n(\"colors\")})}},disableColorOpacityUtilitiesByDefault:{corePlugins:{backgroundOpacity:!1,borderOpacity:!1,divideOpacity:!1,placeholderOpacity:!1,ringOpacity:!1,textOpacity:!1}}},r=Object.keys(t).filter(n=>Z(i,n)).map(n=>t[n]);return[i,...r,...e]}var Ju,Xu=C(()=>{l();Ju=X(bi());ze()});var Ku={};_e(Ku,{default:()=>hr});function hr(...i){let[,...e]=vi(i[0]);return ds([...i,...e])}var hs=C(()=>{l();Yu();Xu()});var Zu={};_e(Zu,{default:()=>ee});var ee,wt=C(()=>{l();ee={resolve:i=>i,extname:i=>\".\"+i.split(\".\").pop()}});function xi(i){return typeof i==\"object\"&&i!==null}function r0(i){return Object.keys(i).length===0}function ef(i){return typeof i==\"string\"||i instanceof String}function ms(i){return xi(i)&&i.config===void 0&&!r0(i)?null:xi(i)&&i.config!==void 0&&ef(i.config)?ee.resolve(i.config):xi(i)&&i.config!==void 0&&xi(i.config)?null:ef(i)?ee.resolve(i):i0()}function i0(){for(let i of t0)try{let e=ee.resolve(i);return re.accessSync(e),e}catch(e){}return null}var t0,tf=C(()=>{l();je();wt();t0=[\"./tailwind.config.js\",\"./tailwind.config.cjs\",\"./tailwind.config.mjs\",\"./tailwind.config.ts\",\"./tailwind.config.cts\",\"./tailwind.config.mts\"]});var rf={};_e(rf,{default:()=>gs});var gs,ys=C(()=>{l();gs={parse:i=>({href:i})}});var ws=v(()=>{l()});var ki=v((VE,af)=>{l();\"use strict\";var nf=(ci(),yu),sf=ws(),Ot=class extends Error{constructor(e,t,r,n,a,s){super(e);this.name=\"CssSyntaxError\",this.reason=e,a&&(this.file=a),n&&(this.source=n),s&&(this.plugin=s),typeof t!=\"undefined\"&&typeof r!=\"undefined\"&&(typeof t==\"number\"?(this.line=t,this.column=r):(this.line=t.line,this.column=t.column,this.endLine=r.line,this.endColumn=r.column)),this.setMessage(),Error.captureStackTrace&&Error.captureStackTrace(this,Ot)}setMessage(){this.message=this.plugin?this.plugin+\": \":\"\",this.message+=this.file?this.file:\"<css input>\",typeof this.line!=\"undefined\"&&(this.message+=\":\"+this.line+\":\"+this.column),this.message+=\": \"+this.reason}showSourceCode(e){if(!this.source)return\"\";let t=this.source;e==null&&(e=nf.isColorSupported),sf&&e&&(t=sf(t));let r=t.split(/\\r?\\n/),n=Math.max(this.line-3,0),a=Math.min(this.line+2,r.length),s=String(a).length,o,u;if(e){let{bold:c,red:f,gray:d}=nf.createColors(!0);o=p=>c(f(p)),u=p=>d(p)}else o=u=c=>c;return r.slice(n,a).map((c,f)=>{let d=n+1+f,p=\" \"+(\" \"+d).slice(-s)+\" | \";if(d===this.line){let m=u(p.replace(/\\d/g,\" \"))+c.slice(0,this.column-1).replace(/[^\\t]/g,\" \");return o(\">\")+u(p)+c+`\n `+m+o(\"^\")}return\" \"+u(p)+c}).join(`\n`)}toString(){let e=this.showSourceCode();return e&&(e=`\n\n`+e+`\n`),this.name+\": \"+this.message+e}};af.exports=Ot;Ot.default=Ot});var Si=v((UE,bs)=>{l();\"use strict\";bs.exports.isClean=Symbol(\"isClean\");bs.exports.my=Symbol(\"my\")});var vs=v((WE,lf)=>{l();\"use strict\";var of={colon:\": \",indent:\"    \",beforeDecl:`\n`,beforeRule:`\n`,beforeOpen:\" \",beforeClose:`\n`,beforeComment:`\n`,after:`\n`,emptyBody:\"\",commentLeft:\" \",commentRight:\" \",semicolon:!1};function n0(i){return i[0].toUpperCase()+i.slice(1)}var Ci=class{constructor(e){this.builder=e}stringify(e,t){if(!this[e.type])throw new Error(\"Unknown AST node type \"+e.type+\". Maybe you need to change PostCSS stringifier.\");this[e.type](e,t)}document(e){this.body(e)}root(e){this.body(e),e.raws.after&&this.builder(e.raws.after)}comment(e){let t=this.raw(e,\"left\",\"commentLeft\"),r=this.raw(e,\"right\",\"commentRight\");this.builder(\"/*\"+t+e.text+r+\"*/\",e)}decl(e,t){let r=this.raw(e,\"between\",\"colon\"),n=e.prop+r+this.rawValue(e,\"value\");e.important&&(n+=e.raws.important||\" !important\"),t&&(n+=\";\"),this.builder(n,e)}rule(e){this.block(e,this.rawValue(e,\"selector\")),e.raws.ownSemicolon&&this.builder(e.raws.ownSemicolon,e,\"end\")}atrule(e,t){let r=\"@\"+e.name,n=e.params?this.rawValue(e,\"params\"):\"\";if(typeof e.raws.afterName!=\"undefined\"?r+=e.raws.afterName:n&&(r+=\" \"),e.nodes)this.block(e,r+n);else{let a=(e.raws.between||\"\")+(t?\";\":\"\");this.builder(r+n+a,e)}}body(e){let t=e.nodes.length-1;for(;t>0&&e.nodes[t].type===\"comment\";)t-=1;let r=this.raw(e,\"semicolon\");for(let n=0;n<e.nodes.length;n++){let a=e.nodes[n],s=this.raw(a,\"before\");s&&this.builder(s),this.stringify(a,t!==n||r)}}block(e,t){let r=this.raw(e,\"between\",\"beforeOpen\");this.builder(t+r+\"{\",e,\"start\");let n;e.nodes&&e.nodes.length?(this.body(e),n=this.raw(e,\"after\")):n=this.raw(e,\"after\",\"emptyBody\"),n&&this.builder(n),this.builder(\"}\",e,\"end\")}raw(e,t,r){let n;if(r||(r=t),t&&(n=e.raws[t],typeof n!=\"undefined\"))return n;let a=e.parent;if(r===\"before\"&&(!a||a.type===\"root\"&&a.first===e||a&&a.type===\"document\"))return\"\";if(!a)return of[r];let s=e.root();if(s.rawCache||(s.rawCache={}),typeof s.rawCache[r]!=\"undefined\")return s.rawCache[r];if(r===\"before\"||r===\"after\")return this.beforeAfter(e,r);{let o=\"raw\"+n0(r);this[o]?n=this[o](s,e):s.walk(u=>{if(n=u.raws[t],typeof n!=\"undefined\")return!1})}return typeof n==\"undefined\"&&(n=of[r]),s.rawCache[r]=n,n}rawSemicolon(e){let t;return e.walk(r=>{if(r.nodes&&r.nodes.length&&r.last.type===\"decl\"&&(t=r.raws.semicolon,typeof t!=\"undefined\"))return!1}),t}rawEmptyBody(e){let t;return e.walk(r=>{if(r.nodes&&r.nodes.length===0&&(t=r.raws.after,typeof t!=\"undefined\"))return!1}),t}rawIndent(e){if(e.raws.indent)return e.raws.indent;let t;return e.walk(r=>{let n=r.parent;if(n&&n!==e&&n.parent&&n.parent===e&&typeof r.raws.before!=\"undefined\"){let a=r.raws.before.split(`\n`);return t=a[a.length-1],t=t.replace(/\\S/g,\"\"),!1}}),t}rawBeforeComment(e,t){let r;return e.walkComments(n=>{if(typeof n.raws.before!=\"undefined\")return r=n.raws.before,r.includes(`\n`)&&(r=r.replace(/[^\\n]+$/,\"\")),!1}),typeof r==\"undefined\"?r=this.raw(t,null,\"beforeDecl\"):r&&(r=r.replace(/\\S/g,\"\")),r}rawBeforeDecl(e,t){let r;return e.walkDecls(n=>{if(typeof n.raws.before!=\"undefined\")return r=n.raws.before,r.includes(`\n`)&&(r=r.replace(/[^\\n]+$/,\"\")),!1}),typeof r==\"undefined\"?r=this.raw(t,null,\"beforeRule\"):r&&(r=r.replace(/\\S/g,\"\")),r}rawBeforeRule(e){let t;return e.walk(r=>{if(r.nodes&&(r.parent!==e||e.first!==r)&&typeof r.raws.before!=\"undefined\")return t=r.raws.before,t.includes(`\n`)&&(t=t.replace(/[^\\n]+$/,\"\")),!1}),t&&(t=t.replace(/\\S/g,\"\")),t}rawBeforeClose(e){let t;return e.walk(r=>{if(r.nodes&&r.nodes.length>0&&typeof r.raws.after!=\"undefined\")return t=r.raws.after,t.includes(`\n`)&&(t=t.replace(/[^\\n]+$/,\"\")),!1}),t&&(t=t.replace(/\\S/g,\"\")),t}rawBeforeOpen(e){let t;return e.walk(r=>{if(r.type!==\"decl\"&&(t=r.raws.between,typeof t!=\"undefined\"))return!1}),t}rawColon(e){let t;return e.walkDecls(r=>{if(typeof r.raws.between!=\"undefined\")return t=r.raws.between.replace(/[^\\s:]/g,\"\"),!1}),t}beforeAfter(e,t){let r;e.type===\"decl\"?r=this.raw(e,null,\"beforeDecl\"):e.type===\"comment\"?r=this.raw(e,null,\"beforeComment\"):t===\"before\"?r=this.raw(e,null,\"beforeRule\"):r=this.raw(e,null,\"beforeClose\");let n=e.parent,a=0;for(;n&&n.type!==\"root\";)a+=1,n=n.parent;if(r.includes(`\n`)){let s=this.raw(e,null,\"indent\");if(s.length)for(let o=0;o<a;o++)r+=s}return r}rawValue(e,t){let r=e[t],n=e.raws[t];return n&&n.value===r?n.raw:r}};lf.exports=Ci;Ci.default=Ci});var mr=v((GE,uf)=>{l();\"use strict\";var s0=vs();function xs(i,e){new s0(e).stringify(i)}uf.exports=xs;xs.default=xs});var gr=v((HE,ff)=>{l();\"use strict\";var{isClean:Ai,my:a0}=Si(),o0=ki(),l0=vs(),u0=mr();function ks(i,e){let t=new i.constructor;for(let r in i){if(!Object.prototype.hasOwnProperty.call(i,r)||r===\"proxyCache\")continue;let n=i[r],a=typeof n;r===\"parent\"&&a===\"object\"?e&&(t[r]=e):r===\"source\"?t[r]=n:Array.isArray(n)?t[r]=n.map(s=>ks(s,t)):(a===\"object\"&&n!==null&&(n=ks(n)),t[r]=n)}return t}var _i=class{constructor(e={}){this.raws={},this[Ai]=!1,this[a0]=!0;for(let t in e)if(t===\"nodes\"){this.nodes=[];for(let r of e[t])typeof r.clone==\"function\"?this.append(r.clone()):this.append(r)}else this[t]=e[t]}error(e,t={}){if(this.source){let{start:r,end:n}=this.rangeBy(t);return this.source.input.error(e,{line:r.line,column:r.column},{line:n.line,column:n.column},t)}return new o0(e)}warn(e,t,r){let n={node:this};for(let a in r)n[a]=r[a];return e.warn(t,n)}remove(){return this.parent&&this.parent.removeChild(this),this.parent=void 0,this}toString(e=u0){e.stringify&&(e=e.stringify);let t=\"\";return e(this,r=>{t+=r}),t}assign(e={}){for(let t in e)this[t]=e[t];return this}clone(e={}){let t=ks(this);for(let r in e)t[r]=e[r];return t}cloneBefore(e={}){let t=this.clone(e);return this.parent.insertBefore(this,t),t}cloneAfter(e={}){let t=this.clone(e);return this.parent.insertAfter(this,t),t}replaceWith(...e){if(this.parent){let t=this,r=!1;for(let n of e)n===this?r=!0:r?(this.parent.insertAfter(t,n),t=n):this.parent.insertBefore(t,n);r||this.remove()}return this}next(){if(!this.parent)return;let e=this.parent.index(this);return this.parent.nodes[e+1]}prev(){if(!this.parent)return;let e=this.parent.index(this);return this.parent.nodes[e-1]}before(e){return this.parent.insertBefore(this,e),this}after(e){return this.parent.insertAfter(this,e),this}root(){let e=this;for(;e.parent&&e.parent.type!==\"document\";)e=e.parent;return e}raw(e,t){return new l0().raw(this,e,t)}cleanRaws(e){delete this.raws.before,delete this.raws.after,e||delete this.raws.between}toJSON(e,t){let r={},n=t==null;t=t||new Map;let a=0;for(let s in this){if(!Object.prototype.hasOwnProperty.call(this,s)||s===\"parent\"||s===\"proxyCache\")continue;let o=this[s];if(Array.isArray(o))r[s]=o.map(u=>typeof u==\"object\"&&u.toJSON?u.toJSON(null,t):u);else if(typeof o==\"object\"&&o.toJSON)r[s]=o.toJSON(null,t);else if(s===\"source\"){let u=t.get(o.input);u==null&&(u=a,t.set(o.input,a),a++),r[s]={inputId:u,start:o.start,end:o.end}}else r[s]=o}return n&&(r.inputs=[...t.keys()].map(s=>s.toJSON())),r}positionInside(e){let t=this.toString(),r=this.source.start.column,n=this.source.start.line;for(let a=0;a<e;a++)t[a]===`\n`?(r=1,n+=1):r+=1;return{line:n,column:r}}positionBy(e){let t=this.source.start;if(e.index)t=this.positionInside(e.index);else if(e.word){let r=this.toString().indexOf(e.word);r!==-1&&(t=this.positionInside(r))}return t}rangeBy(e){let t={line:this.source.start.line,column:this.source.start.column},r=this.source.end?{line:this.source.end.line,column:this.source.end.column+1}:{line:t.line,column:t.column+1};if(e.word){let n=this.toString().indexOf(e.word);n!==-1&&(t=this.positionInside(n),r=this.positionInside(n+e.word.length))}else e.start?t={line:e.start.line,column:e.start.column}:e.index&&(t=this.positionInside(e.index)),e.end?r={line:e.end.line,column:e.end.column}:e.endIndex?r=this.positionInside(e.endIndex):e.index&&(r=this.positionInside(e.index+1));return(r.line<t.line||r.line===t.line&&r.column<=t.column)&&(r={line:t.line,column:t.column+1}),{start:t,end:r}}getProxyProcessor(){return{set(e,t,r){return e[t]===r||(e[t]=r,(t===\"prop\"||t===\"value\"||t===\"name\"||t===\"params\"||t===\"important\"||t===\"text\")&&e.markDirty()),!0},get(e,t){return t===\"proxyOf\"?e:t===\"root\"?()=>e.root().toProxy():e[t]}}}toProxy(){return this.proxyCache||(this.proxyCache=new Proxy(this,this.getProxyProcessor())),this.proxyCache}addToError(e){if(e.postcssNode=this,e.stack&&this.source&&/\\n\\s{4}at /.test(e.stack)){let t=this.source;e.stack=e.stack.replace(/\\n\\s{4}at /,`$&${t.input.from}:${t.start.line}:${t.start.column}$&`)}return e}markDirty(){if(this[Ai]){this[Ai]=!1;let e=this;for(;e=e.parent;)e[Ai]=!1}}get proxyOf(){return this}};ff.exports=_i;_i.default=_i});var yr=v((YE,cf)=>{l();\"use strict\";var f0=gr(),Oi=class extends f0{constructor(e){e&&typeof e.value!=\"undefined\"&&typeof e.value!=\"string\"&&(e={...e,value:String(e.value)});super(e);this.type=\"decl\"}get variable(){return this.prop.startsWith(\"--\")||this.prop[0]===\"$\"}};cf.exports=Oi;Oi.default=Oi});var Ss=v((QE,pf)=>{l();pf.exports=function(i,e){return{generate:()=>{let t=\"\";return i(e,r=>{t+=r}),[t]}}}});var wr=v((JE,df)=>{l();\"use strict\";var c0=gr(),Ei=class extends c0{constructor(e){super(e);this.type=\"comment\"}};df.exports=Ei;Ei.default=Ei});var it=v((XE,kf)=>{l();\"use strict\";var{isClean:hf,my:mf}=Si(),gf=yr(),yf=wr(),p0=gr(),wf,Cs,As,bf;function vf(i){return i.map(e=>(e.nodes&&(e.nodes=vf(e.nodes)),delete e.source,e))}function xf(i){if(i[hf]=!1,i.proxyOf.nodes)for(let e of i.proxyOf.nodes)xf(e)}var be=class extends p0{push(e){return e.parent=this,this.proxyOf.nodes.push(e),this}each(e){if(!this.proxyOf.nodes)return;let t=this.getIterator(),r,n;for(;this.indexes[t]<this.proxyOf.nodes.length&&(r=this.indexes[t],n=e(this.proxyOf.nodes[r],r),n!==!1);)this.indexes[t]+=1;return delete this.indexes[t],n}walk(e){return this.each((t,r)=>{let n;try{n=e(t,r)}catch(a){throw t.addToError(a)}return n!==!1&&t.walk&&(n=t.walk(e)),n})}walkDecls(e,t){return t?e instanceof RegExp?this.walk((r,n)=>{if(r.type===\"decl\"&&e.test(r.prop))return t(r,n)}):this.walk((r,n)=>{if(r.type===\"decl\"&&r.prop===e)return t(r,n)}):(t=e,this.walk((r,n)=>{if(r.type===\"decl\")return t(r,n)}))}walkRules(e,t){return t?e instanceof RegExp?this.walk((r,n)=>{if(r.type===\"rule\"&&e.test(r.selector))return t(r,n)}):this.walk((r,n)=>{if(r.type===\"rule\"&&r.selector===e)return t(r,n)}):(t=e,this.walk((r,n)=>{if(r.type===\"rule\")return t(r,n)}))}walkAtRules(e,t){return t?e instanceof RegExp?this.walk((r,n)=>{if(r.type===\"atrule\"&&e.test(r.name))return t(r,n)}):this.walk((r,n)=>{if(r.type===\"atrule\"&&r.name===e)return t(r,n)}):(t=e,this.walk((r,n)=>{if(r.type===\"atrule\")return t(r,n)}))}walkComments(e){return this.walk((t,r)=>{if(t.type===\"comment\")return e(t,r)})}append(...e){for(let t of e){let r=this.normalize(t,this.last);for(let n of r)this.proxyOf.nodes.push(n)}return this.markDirty(),this}prepend(...e){e=e.reverse();for(let t of e){let r=this.normalize(t,this.first,\"prepend\").reverse();for(let n of r)this.proxyOf.nodes.unshift(n);for(let n in this.indexes)this.indexes[n]=this.indexes[n]+r.length}return this.markDirty(),this}cleanRaws(e){if(super.cleanRaws(e),this.nodes)for(let t of this.nodes)t.cleanRaws(e)}insertBefore(e,t){let r=this.index(e),n=r===0?\"prepend\":!1,a=this.normalize(t,this.proxyOf.nodes[r],n).reverse();r=this.index(e);for(let o of a)this.proxyOf.nodes.splice(r,0,o);let s;for(let o in this.indexes)s=this.indexes[o],r<=s&&(this.indexes[o]=s+a.length);return this.markDirty(),this}insertAfter(e,t){let r=this.index(e),n=this.normalize(t,this.proxyOf.nodes[r]).reverse();r=this.index(e);for(let s of n)this.proxyOf.nodes.splice(r+1,0,s);let a;for(let s in this.indexes)a=this.indexes[s],r<a&&(this.indexes[s]=a+n.length);return this.markDirty(),this}removeChild(e){e=this.index(e),this.proxyOf.nodes[e].parent=void 0,this.proxyOf.nodes.splice(e,1);let t;for(let r in this.indexes)t=this.indexes[r],t>=e&&(this.indexes[r]=t-1);return this.markDirty(),this}removeAll(){for(let e of this.proxyOf.nodes)e.parent=void 0;return this.proxyOf.nodes=[],this.markDirty(),this}replaceValues(e,t,r){return r||(r=t,t={}),this.walkDecls(n=>{t.props&&!t.props.includes(n.prop)||t.fast&&!n.value.includes(t.fast)||(n.value=n.value.replace(e,r))}),this.markDirty(),this}every(e){return this.nodes.every(e)}some(e){return this.nodes.some(e)}index(e){return typeof e==\"number\"?e:(e.proxyOf&&(e=e.proxyOf),this.proxyOf.nodes.indexOf(e))}get first(){if(!!this.proxyOf.nodes)return this.proxyOf.nodes[0]}get last(){if(!!this.proxyOf.nodes)return this.proxyOf.nodes[this.proxyOf.nodes.length-1]}normalize(e,t){if(typeof e==\"string\")e=vf(wf(e).nodes);else if(Array.isArray(e)){e=e.slice(0);for(let n of e)n.parent&&n.parent.removeChild(n,\"ignore\")}else if(e.type===\"root\"&&this.type!==\"document\"){e=e.nodes.slice(0);for(let n of e)n.parent&&n.parent.removeChild(n,\"ignore\")}else if(e.type)e=[e];else if(e.prop){if(typeof e.value==\"undefined\")throw new Error(\"Value field is missed in node creation\");typeof e.value!=\"string\"&&(e.value=String(e.value)),e=[new gf(e)]}else if(e.selector)e=[new Cs(e)];else if(e.name)e=[new As(e)];else if(e.text)e=[new yf(e)];else throw new Error(\"Unknown node type in node creation\");return e.map(n=>(n[mf]||be.rebuild(n),n=n.proxyOf,n.parent&&n.parent.removeChild(n),n[hf]&&xf(n),typeof n.raws.before==\"undefined\"&&t&&typeof t.raws.before!=\"undefined\"&&(n.raws.before=t.raws.before.replace(/\\S/g,\"\")),n.parent=this.proxyOf,n))}getProxyProcessor(){return{set(e,t,r){return e[t]===r||(e[t]=r,(t===\"name\"||t===\"params\"||t===\"selector\")&&e.markDirty()),!0},get(e,t){return t===\"proxyOf\"?e:e[t]?t===\"each\"||typeof t==\"string\"&&t.startsWith(\"walk\")?(...r)=>e[t](...r.map(n=>typeof n==\"function\"?(a,s)=>n(a.toProxy(),s):n)):t===\"every\"||t===\"some\"?r=>e[t]((n,...a)=>r(n.toProxy(),...a)):t===\"root\"?()=>e.root().toProxy():t===\"nodes\"?e.nodes.map(r=>r.toProxy()):t===\"first\"||t===\"last\"?e[t].toProxy():e[t]:e[t]}}}getIterator(){this.lastEach||(this.lastEach=0),this.indexes||(this.indexes={}),this.lastEach+=1;let e=this.lastEach;return this.indexes[e]=0,e}};be.registerParse=i=>{wf=i};be.registerRule=i=>{Cs=i};be.registerAtRule=i=>{As=i};be.registerRoot=i=>{bf=i};kf.exports=be;be.default=be;be.rebuild=i=>{i.type===\"atrule\"?Object.setPrototypeOf(i,As.prototype):i.type===\"rule\"?Object.setPrototypeOf(i,Cs.prototype):i.type===\"decl\"?Object.setPrototypeOf(i,gf.prototype):i.type===\"comment\"?Object.setPrototypeOf(i,yf.prototype):i.type===\"root\"&&Object.setPrototypeOf(i,bf.prototype),i[mf]=!0,i.nodes&&i.nodes.forEach(e=>{be.rebuild(e)})}});var Ti=v((KE,Af)=>{l();\"use strict\";var d0=it(),Sf,Cf,Et=class extends d0{constructor(e){super({type:\"document\",...e});this.nodes||(this.nodes=[])}toResult(e={}){return new Sf(new Cf,this,e).stringify()}};Et.registerLazyResult=i=>{Sf=i};Et.registerProcessor=i=>{Cf=i};Af.exports=Et;Et.default=Et});var _s=v((ZE,Of)=>{l();\"use strict\";var _f={};Of.exports=function(e){_f[e]||(_f[e]=!0,typeof console!=\"undefined\"&&console.warn&&console.warn(e))}});var Os=v((eT,Ef)=>{l();\"use strict\";var Pi=class{constructor(e,t={}){if(this.type=\"warning\",this.text=e,t.node&&t.node.source){let r=t.node.rangeBy(t);this.line=r.start.line,this.column=r.start.column,this.endLine=r.end.line,this.endColumn=r.end.column}for(let r in t)this[r]=t[r]}toString(){return this.node?this.node.error(this.text,{plugin:this.plugin,index:this.index,word:this.word}).message:this.plugin?this.plugin+\": \"+this.text:this.text}};Ef.exports=Pi;Pi.default=Pi});var Ii=v((tT,Tf)=>{l();\"use strict\";var h0=Os(),Di=class{constructor(e,t,r){this.processor=e,this.messages=[],this.root=t,this.opts=r,this.css=void 0,this.map=void 0}toString(){return this.css}warn(e,t={}){t.plugin||this.lastPlugin&&this.lastPlugin.postcssPlugin&&(t.plugin=this.lastPlugin.postcssPlugin);let r=new h0(e,t);return this.messages.push(r),r}warnings(){return this.messages.filter(e=>e.type===\"warning\")}get content(){return this.css}};Tf.exports=Di;Di.default=Di});var Rf=v((rT,qf)=>{l();\"use strict\";var Es=\"'\".charCodeAt(0),Pf='\"'.charCodeAt(0),qi=\"\\\\\".charCodeAt(0),Df=\"/\".charCodeAt(0),Ri=`\n`.charCodeAt(0),br=\" \".charCodeAt(0),Mi=\"\\f\".charCodeAt(0),Bi=\"\t\".charCodeAt(0),Fi=\"\\r\".charCodeAt(0),m0=\"[\".charCodeAt(0),g0=\"]\".charCodeAt(0),y0=\"(\".charCodeAt(0),w0=\")\".charCodeAt(0),b0=\"{\".charCodeAt(0),v0=\"}\".charCodeAt(0),x0=\";\".charCodeAt(0),k0=\"*\".charCodeAt(0),S0=\":\".charCodeAt(0),C0=\"@\".charCodeAt(0),Ni=/[\\t\\n\\f\\r \"#'()/;[\\\\\\]{}]/g,Li=/[\\t\\n\\f\\r !\"#'():;@[\\\\\\]{}]|\\/(?=\\*)/g,A0=/.[\\n\"'(/\\\\]/,If=/[\\da-f]/i;qf.exports=function(e,t={}){let r=e.css.valueOf(),n=t.ignoreErrors,a,s,o,u,c,f,d,p,m,b,x=r.length,y=0,w=[],k=[];function S(){return y}function _(R){throw e.error(\"Unclosed \"+R,y)}function E(){return k.length===0&&y>=x}function I(R){if(k.length)return k.pop();if(y>=x)return;let J=R?R.ignoreUnclosed:!1;switch(a=r.charCodeAt(y),a){case Ri:case br:case Bi:case Fi:case Mi:{s=y;do s+=1,a=r.charCodeAt(s);while(a===br||a===Ri||a===Bi||a===Fi||a===Mi);b=[\"space\",r.slice(y,s)],y=s-1;break}case m0:case g0:case b0:case v0:case S0:case x0:case w0:{let fe=String.fromCharCode(a);b=[fe,fe,y];break}case y0:{if(p=w.length?w.pop()[1]:\"\",m=r.charCodeAt(y+1),p===\"url\"&&m!==Es&&m!==Pf&&m!==br&&m!==Ri&&m!==Bi&&m!==Mi&&m!==Fi){s=y;do{if(f=!1,s=r.indexOf(\")\",s+1),s===-1)if(n||J){s=y;break}else _(\"bracket\");for(d=s;r.charCodeAt(d-1)===qi;)d-=1,f=!f}while(f);b=[\"brackets\",r.slice(y,s+1),y,s],y=s}else s=r.indexOf(\")\",y+1),u=r.slice(y,s+1),s===-1||A0.test(u)?b=[\"(\",\"(\",y]:(b=[\"brackets\",u,y,s],y=s);break}case Es:case Pf:{o=a===Es?\"'\":'\"',s=y;do{if(f=!1,s=r.indexOf(o,s+1),s===-1)if(n||J){s=y+1;break}else _(\"string\");for(d=s;r.charCodeAt(d-1)===qi;)d-=1,f=!f}while(f);b=[\"string\",r.slice(y,s+1),y,s],y=s;break}case C0:{Ni.lastIndex=y+1,Ni.test(r),Ni.lastIndex===0?s=r.length-1:s=Ni.lastIndex-2,b=[\"at-word\",r.slice(y,s+1),y,s],y=s;break}case qi:{for(s=y,c=!0;r.charCodeAt(s+1)===qi;)s+=1,c=!c;if(a=r.charCodeAt(s+1),c&&a!==Df&&a!==br&&a!==Ri&&a!==Bi&&a!==Fi&&a!==Mi&&(s+=1,If.test(r.charAt(s)))){for(;If.test(r.charAt(s+1));)s+=1;r.charCodeAt(s+1)===br&&(s+=1)}b=[\"word\",r.slice(y,s+1),y,s],y=s;break}default:{a===Df&&r.charCodeAt(y+1)===k0?(s=r.indexOf(\"*/\",y+2)+1,s===0&&(n||J?s=r.length:_(\"comment\")),b=[\"comment\",r.slice(y,s+1),y,s],y=s):(Li.lastIndex=y+1,Li.test(r),Li.lastIndex===0?s=r.length-1:s=Li.lastIndex-2,b=[\"word\",r.slice(y,s+1),y,s],w.push(b),y=s);break}}return y++,b}function q(R){k.push(R)}return{back:q,nextToken:I,endOfFile:E,position:S}}});var $i=v((iT,Bf)=>{l();\"use strict\";var Mf=it(),vr=class extends Mf{constructor(e){super(e);this.type=\"atrule\"}append(...e){return this.proxyOf.nodes||(this.nodes=[]),super.append(...e)}prepend(...e){return this.proxyOf.nodes||(this.nodes=[]),super.prepend(...e)}};Bf.exports=vr;vr.default=vr;Mf.registerAtRule(vr)});var Tt=v((nT,$f)=>{l();\"use strict\";var Ff=it(),Nf,Lf,bt=class extends Ff{constructor(e){super(e);this.type=\"root\",this.nodes||(this.nodes=[])}removeChild(e,t){let r=this.index(e);return!t&&r===0&&this.nodes.length>1&&(this.nodes[1].raws.before=this.nodes[r].raws.before),super.removeChild(e)}normalize(e,t,r){let n=super.normalize(e);if(t){if(r===\"prepend\")this.nodes.length>1?t.raws.before=this.nodes[1].raws.before:delete t.raws.before;else if(this.first!==t)for(let a of n)a.raws.before=t.raws.before}return n}toResult(e={}){return new Nf(new Lf,this,e).stringify()}};bt.registerLazyResult=i=>{Nf=i};bt.registerProcessor=i=>{Lf=i};$f.exports=bt;bt.default=bt;Ff.registerRoot(bt)});var Ts=v((sT,jf)=>{l();\"use strict\";var xr={split(i,e,t){let r=[],n=\"\",a=!1,s=0,o=!1,u=\"\",c=!1;for(let f of i)c?c=!1:f===\"\\\\\"?c=!0:o?f===u&&(o=!1):f==='\"'||f===\"'\"?(o=!0,u=f):f===\"(\"?s+=1:f===\")\"?s>0&&(s-=1):s===0&&e.includes(f)&&(a=!0),a?(n!==\"\"&&r.push(n.trim()),n=\"\",a=!1):n+=f;return(t||n!==\"\")&&r.push(n.trim()),r},space(i){let e=[\" \",`\n`,\"\t\"];return xr.split(i,e)},comma(i){return xr.split(i,[\",\"],!0)}};jf.exports=xr;xr.default=xr});var ji=v((aT,Vf)=>{l();\"use strict\";var zf=it(),_0=Ts(),kr=class extends zf{constructor(e){super(e);this.type=\"rule\",this.nodes||(this.nodes=[])}get selectors(){return _0.comma(this.selector)}set selectors(e){let t=this.selector?this.selector.match(/,\\s*/):null,r=t?t[0]:\",\"+this.raw(\"between\",\"beforeOpen\");this.selector=e.join(r)}};Vf.exports=kr;kr.default=kr;zf.registerRule(kr)});var Yf=v((oT,Hf)=>{l();\"use strict\";var O0=yr(),E0=Rf(),T0=wr(),P0=$i(),D0=Tt(),Uf=ji(),Wf={empty:!0,space:!0};function I0(i){for(let e=i.length-1;e>=0;e--){let t=i[e],r=t[3]||t[2];if(r)return r}}var Gf=class{constructor(e){this.input=e,this.root=new D0,this.current=this.root,this.spaces=\"\",this.semicolon=!1,this.customProperty=!1,this.createTokenizer(),this.root.source={input:e,start:{offset:0,line:1,column:1}}}createTokenizer(){this.tokenizer=E0(this.input)}parse(){let e;for(;!this.tokenizer.endOfFile();)switch(e=this.tokenizer.nextToken(),e[0]){case\"space\":this.spaces+=e[1];break;case\";\":this.freeSemicolon(e);break;case\"}\":this.end(e);break;case\"comment\":this.comment(e);break;case\"at-word\":this.atrule(e);break;case\"{\":this.emptyRule(e);break;default:this.other(e);break}this.endFile()}comment(e){let t=new T0;this.init(t,e[2]),t.source.end=this.getPosition(e[3]||e[2]);let r=e[1].slice(2,-2);if(/^\\s*$/.test(r))t.text=\"\",t.raws.left=r,t.raws.right=\"\";else{let n=r.match(/^(\\s*)([^]*\\S)(\\s*)$/);t.text=n[2],t.raws.left=n[1],t.raws.right=n[3]}}emptyRule(e){let t=new Uf;this.init(t,e[2]),t.selector=\"\",t.raws.between=\"\",this.current=t}other(e){let t=!1,r=null,n=!1,a=null,s=[],o=e[1].startsWith(\"--\"),u=[],c=e;for(;c;){if(r=c[0],u.push(c),r===\"(\"||r===\"[\")a||(a=c),s.push(r===\"(\"?\")\":\"]\");else if(o&&n&&r===\"{\")a||(a=c),s.push(\"}\");else if(s.length===0)if(r===\";\")if(n){this.decl(u,o);return}else break;else if(r===\"{\"){this.rule(u);return}else if(r===\"}\"){this.tokenizer.back(u.pop()),t=!0;break}else r===\":\"&&(n=!0);else r===s[s.length-1]&&(s.pop(),s.length===0&&(a=null));c=this.tokenizer.nextToken()}if(this.tokenizer.endOfFile()&&(t=!0),s.length>0&&this.unclosedBracket(a),t&&n){if(!o)for(;u.length&&(c=u[u.length-1][0],!(c!==\"space\"&&c!==\"comment\"));)this.tokenizer.back(u.pop());this.decl(u,o)}else this.unknownWord(u)}rule(e){e.pop();let t=new Uf;this.init(t,e[0][2]),t.raws.between=this.spacesAndCommentsFromEnd(e),this.raw(t,\"selector\",e),this.current=t}decl(e,t){let r=new O0;this.init(r,e[0][2]);let n=e[e.length-1];for(n[0]===\";\"&&(this.semicolon=!0,e.pop()),r.source.end=this.getPosition(n[3]||n[2]||I0(e));e[0][0]!==\"word\";)e.length===1&&this.unknownWord(e),r.raws.before+=e.shift()[1];for(r.source.start=this.getPosition(e[0][2]),r.prop=\"\";e.length;){let c=e[0][0];if(c===\":\"||c===\"space\"||c===\"comment\")break;r.prop+=e.shift()[1]}r.raws.between=\"\";let a;for(;e.length;)if(a=e.shift(),a[0]===\":\"){r.raws.between+=a[1];break}else a[0]===\"word\"&&/\\w/.test(a[1])&&this.unknownWord([a]),r.raws.between+=a[1];(r.prop[0]===\"_\"||r.prop[0]===\"*\")&&(r.raws.before+=r.prop[0],r.prop=r.prop.slice(1));let s=[],o;for(;e.length&&(o=e[0][0],!(o!==\"space\"&&o!==\"comment\"));)s.push(e.shift());this.precheckMissedSemicolon(e);for(let c=e.length-1;c>=0;c--){if(a=e[c],a[1].toLowerCase()===\"!important\"){r.important=!0;let f=this.stringFrom(e,c);f=this.spacesFromEnd(e)+f,f!==\" !important\"&&(r.raws.important=f);break}else if(a[1].toLowerCase()===\"important\"){let f=e.slice(0),d=\"\";for(let p=c;p>0;p--){let m=f[p][0];if(d.trim().indexOf(\"!\")===0&&m!==\"space\")break;d=f.pop()[1]+d}d.trim().indexOf(\"!\")===0&&(r.important=!0,r.raws.important=d,e=f)}if(a[0]!==\"space\"&&a[0]!==\"comment\")break}e.some(c=>c[0]!==\"space\"&&c[0]!==\"comment\")&&(r.raws.between+=s.map(c=>c[1]).join(\"\"),s=[]),this.raw(r,\"value\",s.concat(e),t),r.value.includes(\":\")&&!t&&this.checkMissedSemicolon(e)}atrule(e){let t=new P0;t.name=e[1].slice(1),t.name===\"\"&&this.unnamedAtrule(t,e),this.init(t,e[2]);let r,n,a,s=!1,o=!1,u=[],c=[];for(;!this.tokenizer.endOfFile();){if(e=this.tokenizer.nextToken(),r=e[0],r===\"(\"||r===\"[\"?c.push(r===\"(\"?\")\":\"]\"):r===\"{\"&&c.length>0?c.push(\"}\"):r===c[c.length-1]&&c.pop(),c.length===0)if(r===\";\"){t.source.end=this.getPosition(e[2]),this.semicolon=!0;break}else if(r===\"{\"){o=!0;break}else if(r===\"}\"){if(u.length>0){for(a=u.length-1,n=u[a];n&&n[0]===\"space\";)n=u[--a];n&&(t.source.end=this.getPosition(n[3]||n[2]))}this.end(e);break}else u.push(e);else u.push(e);if(this.tokenizer.endOfFile()){s=!0;break}}t.raws.between=this.spacesAndCommentsFromEnd(u),u.length?(t.raws.afterName=this.spacesAndCommentsFromStart(u),this.raw(t,\"params\",u),s&&(e=u[u.length-1],t.source.end=this.getPosition(e[3]||e[2]),this.spaces=t.raws.between,t.raws.between=\"\")):(t.raws.afterName=\"\",t.params=\"\"),o&&(t.nodes=[],this.current=t)}end(e){this.current.nodes&&this.current.nodes.length&&(this.current.raws.semicolon=this.semicolon),this.semicolon=!1,this.current.raws.after=(this.current.raws.after||\"\")+this.spaces,this.spaces=\"\",this.current.parent?(this.current.source.end=this.getPosition(e[2]),this.current=this.current.parent):this.unexpectedClose(e)}endFile(){this.current.parent&&this.unclosedBlock(),this.current.nodes&&this.current.nodes.length&&(this.current.raws.semicolon=this.semicolon),this.current.raws.after=(this.current.raws.after||\"\")+this.spaces}freeSemicolon(e){if(this.spaces+=e[1],this.current.nodes){let t=this.current.nodes[this.current.nodes.length-1];t&&t.type===\"rule\"&&!t.raws.ownSemicolon&&(t.raws.ownSemicolon=this.spaces,this.spaces=\"\")}}getPosition(e){let t=this.input.fromOffset(e);return{offset:e,line:t.line,column:t.col}}init(e,t){this.current.push(e),e.source={start:this.getPosition(t),input:this.input},e.raws.before=this.spaces,this.spaces=\"\",e.type!==\"comment\"&&(this.semicolon=!1)}raw(e,t,r,n){let a,s,o=r.length,u=\"\",c=!0,f,d;for(let p=0;p<o;p+=1)a=r[p],s=a[0],s===\"space\"&&p===o-1&&!n?c=!1:s===\"comment\"?(d=r[p-1]?r[p-1][0]:\"empty\",f=r[p+1]?r[p+1][0]:\"empty\",!Wf[d]&&!Wf[f]?u.slice(-1)===\",\"?c=!1:u+=a[1]:c=!1):u+=a[1];if(!c){let p=r.reduce((m,b)=>m+b[1],\"\");e.raws[t]={value:u,raw:p}}e[t]=u}spacesAndCommentsFromEnd(e){let t,r=\"\";for(;e.length&&(t=e[e.length-1][0],!(t!==\"space\"&&t!==\"comment\"));)r=e.pop()[1]+r;return r}spacesAndCommentsFromStart(e){let t,r=\"\";for(;e.length&&(t=e[0][0],!(t!==\"space\"&&t!==\"comment\"));)r+=e.shift()[1];return r}spacesFromEnd(e){let t,r=\"\";for(;e.length&&(t=e[e.length-1][0],t===\"space\");)r=e.pop()[1]+r;return r}stringFrom(e,t){let r=\"\";for(let n=t;n<e.length;n++)r+=e[n][1];return e.splice(t,e.length-t),r}colon(e){let t=0,r,n,a;for(let[s,o]of e.entries()){if(r=o,n=r[0],n===\"(\"&&(t+=1),n===\")\"&&(t-=1),t===0&&n===\":\")if(!a)this.doubleColon(r);else{if(a[0]===\"word\"&&a[1]===\"progid\")continue;return s}a=r}return!1}unclosedBracket(e){throw this.input.error(\"Unclosed bracket\",{offset:e[2]},{offset:e[2]+1})}unknownWord(e){throw this.input.error(\"Unknown word\",{offset:e[0][2]},{offset:e[0][2]+e[0][1].length})}unexpectedClose(e){throw this.input.error(\"Unexpected }\",{offset:e[2]},{offset:e[2]+1})}unclosedBlock(){let e=this.current.source.start;throw this.input.error(\"Unclosed block\",e.line,e.column)}doubleColon(e){throw this.input.error(\"Double colon\",{offset:e[2]},{offset:e[2]+e[1].length})}unnamedAtrule(e,t){throw this.input.error(\"At-rule without name\",{offset:t[2]},{offset:t[2]+t[1].length})}precheckMissedSemicolon(){}checkMissedSemicolon(e){let t=this.colon(e);if(t===!1)return;let r=0,n;for(let a=t-1;a>=0&&(n=e[a],!(n[0]!==\"space\"&&(r+=1,r===2)));a--);throw this.input.error(\"Missed semicolon\",n[0]===\"word\"?n[3]+1:n[2])}};Hf.exports=Gf});var Qf=v(()=>{l()});var Xf=v((fT,Jf)=>{l();var q0=\"useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict\",R0=(i,e=21)=>(t=e)=>{let r=\"\",n=t;for(;n--;)r+=i[Math.random()*i.length|0];return r},M0=(i=21)=>{let e=\"\",t=i;for(;t--;)e+=q0[Math.random()*64|0];return e};Jf.exports={nanoid:M0,customAlphabet:R0}});var Ps=v((cT,Kf)=>{l();Kf.exports={}});var Vi=v((pT,rc)=>{l();\"use strict\";var{SourceMapConsumer:B0,SourceMapGenerator:F0}=Qf(),{fileURLToPath:Zf,pathToFileURL:zi}=(ys(),rf),{resolve:Ds,isAbsolute:Is}=(wt(),Zu),{nanoid:N0}=Xf(),qs=ws(),ec=ki(),L0=Ps(),Rs=Symbol(\"fromOffsetCache\"),$0=Boolean(B0&&F0),tc=Boolean(Ds&&Is),Sr=class{constructor(e,t={}){if(e===null||typeof e==\"undefined\"||typeof e==\"object\"&&!e.toString)throw new Error(`PostCSS received ${e} instead of CSS string`);if(this.css=e.toString(),this.css[0]===\"\\uFEFF\"||this.css[0]===\"\\uFFFE\"?(this.hasBOM=!0,this.css=this.css.slice(1)):this.hasBOM=!1,t.from&&(!tc||/^\\w+:\\/\\//.test(t.from)||Is(t.from)?this.file=t.from:this.file=Ds(t.from)),tc&&$0){let r=new L0(this.css,t);if(r.text){this.map=r;let n=r.consumer().file;!this.file&&n&&(this.file=this.mapResolve(n))}}this.file||(this.id=\"<input css \"+N0(6)+\">\"),this.map&&(this.map.file=this.from)}fromOffset(e){let t,r;if(this[Rs])r=this[Rs];else{let a=this.css.split(`\n`);r=new Array(a.length);let s=0;for(let o=0,u=a.length;o<u;o++)r[o]=s,s+=a[o].length+1;this[Rs]=r}t=r[r.length-1];let n=0;if(e>=t)n=r.length-1;else{let a=r.length-2,s;for(;n<a;)if(s=n+(a-n>>1),e<r[s])a=s-1;else if(e>=r[s+1])n=s+1;else{n=s;break}}return{line:n+1,col:e-r[n]+1}}error(e,t,r,n={}){let a,s,o;if(t&&typeof t==\"object\"){let c=t,f=r;if(typeof c.offset==\"number\"){let d=this.fromOffset(c.offset);t=d.line,r=d.col}else t=c.line,r=c.column;if(typeof f.offset==\"number\"){let d=this.fromOffset(f.offset);s=d.line,o=d.col}else s=f.line,o=f.column}else if(!r){let c=this.fromOffset(t);t=c.line,r=c.col}let u=this.origin(t,r,s,o);return u?a=new ec(e,u.endLine===void 0?u.line:{line:u.line,column:u.column},u.endLine===void 0?u.column:{line:u.endLine,column:u.endColumn},u.source,u.file,n.plugin):a=new ec(e,s===void 0?t:{line:t,column:r},s===void 0?r:{line:s,column:o},this.css,this.file,n.plugin),a.input={line:t,column:r,endLine:s,endColumn:o,source:this.css},this.file&&(zi&&(a.input.url=zi(this.file).toString()),a.input.file=this.file),a}origin(e,t,r,n){if(!this.map)return!1;let a=this.map.consumer(),s=a.originalPositionFor({line:e,column:t});if(!s.source)return!1;let o;typeof r==\"number\"&&(o=a.originalPositionFor({line:r,column:n}));let u;Is(s.source)?u=zi(s.source):u=new URL(s.source,this.map.consumer().sourceRoot||zi(this.map.mapFile));let c={url:u.toString(),line:s.line,column:s.column,endLine:o&&o.line,endColumn:o&&o.column};if(u.protocol===\"file:\")if(Zf)c.file=Zf(u);else throw new Error(\"file: protocol is not available in this PostCSS build\");let f=a.sourceContentFor(s.source);return f&&(c.source=f),c}mapResolve(e){return/^\\w+:\\/\\//.test(e)?e:Ds(this.map.consumer().sourceRoot||this.map.root||\".\",e)}get from(){return this.file||this.id}toJSON(){let e={};for(let t of[\"hasBOM\",\"css\",\"file\",\"id\"])this[t]!=null&&(e[t]=this[t]);return this.map&&(e.map={...this.map},e.map.consumerCache&&(e.map.consumerCache=void 0)),e}};rc.exports=Sr;Sr.default=Sr;qs&&qs.registerInput&&qs.registerInput(Sr)});var Wi=v((dT,ic)=>{l();\"use strict\";var j0=it(),z0=Yf(),V0=Vi();function Ui(i,e){let t=new V0(i,e),r=new z0(t);try{r.parse()}catch(n){throw n}return r.root}ic.exports=Ui;Ui.default=Ui;j0.registerParse(Ui)});var Fs=v((mT,oc)=>{l();\"use strict\";var{isClean:Re,my:U0}=Si(),W0=Ss(),G0=mr(),H0=it(),Y0=Ti(),hT=_s(),nc=Ii(),Q0=Wi(),J0=Tt(),X0={document:\"Document\",root:\"Root\",atrule:\"AtRule\",rule:\"Rule\",decl:\"Declaration\",comment:\"Comment\"},K0={postcssPlugin:!0,prepare:!0,Once:!0,Document:!0,Root:!0,Declaration:!0,Rule:!0,AtRule:!0,Comment:!0,DeclarationExit:!0,RuleExit:!0,AtRuleExit:!0,CommentExit:!0,RootExit:!0,DocumentExit:!0,OnceExit:!0},Z0={postcssPlugin:!0,prepare:!0,Once:!0},Pt=0;function Cr(i){return typeof i==\"object\"&&typeof i.then==\"function\"}function sc(i){let e=!1,t=X0[i.type];return i.type===\"decl\"?e=i.prop.toLowerCase():i.type===\"atrule\"&&(e=i.name.toLowerCase()),e&&i.append?[t,t+\"-\"+e,Pt,t+\"Exit\",t+\"Exit-\"+e]:e?[t,t+\"-\"+e,t+\"Exit\",t+\"Exit-\"+e]:i.append?[t,Pt,t+\"Exit\"]:[t,t+\"Exit\"]}function ac(i){let e;return i.type===\"document\"?e=[\"Document\",Pt,\"DocumentExit\"]:i.type===\"root\"?e=[\"Root\",Pt,\"RootExit\"]:e=sc(i),{node:i,events:e,eventIndex:0,visitors:[],visitorIndex:0,iterator:0}}function Ms(i){return i[Re]=!1,i.nodes&&i.nodes.forEach(e=>Ms(e)),i}var Bs={},Ve=class{constructor(e,t,r){this.stringified=!1,this.processed=!1;let n;if(typeof t==\"object\"&&t!==null&&(t.type===\"root\"||t.type===\"document\"))n=Ms(t);else if(t instanceof Ve||t instanceof nc)n=Ms(t.root),t.map&&(typeof r.map==\"undefined\"&&(r.map={}),r.map.inline||(r.map.inline=!1),r.map.prev=t.map);else{let a=Q0;r.syntax&&(a=r.syntax.parse),r.parser&&(a=r.parser),a.parse&&(a=a.parse);try{n=a(t,r)}catch(s){this.processed=!0,this.error=s}n&&!n[U0]&&H0.rebuild(n)}this.result=new nc(e,n,r),this.helpers={...Bs,result:this.result,postcss:Bs},this.plugins=this.processor.plugins.map(a=>typeof a==\"object\"&&a.prepare?{...a,...a.prepare(this.result)}:a)}get[Symbol.toStringTag](){return\"LazyResult\"}get processor(){return this.result.processor}get opts(){return this.result.opts}get css(){return this.stringify().css}get content(){return this.stringify().content}get map(){return this.stringify().map}get root(){return this.sync().root}get messages(){return this.sync().messages}warnings(){return this.sync().warnings()}toString(){return this.css}then(e,t){return this.async().then(e,t)}catch(e){return this.async().catch(e)}finally(e){return this.async().then(e,e)}async(){return this.error?Promise.reject(this.error):this.processed?Promise.resolve(this.result):(this.processing||(this.processing=this.runAsync()),this.processing)}sync(){if(this.error)throw this.error;if(this.processed)return this.result;if(this.processed=!0,this.processing)throw this.getAsyncError();for(let e of this.plugins){let t=this.runOnRoot(e);if(Cr(t))throw this.getAsyncError()}if(this.prepareVisitors(),this.hasListener){let e=this.result.root;for(;!e[Re];)e[Re]=!0,this.walkSync(e);if(this.listeners.OnceExit)if(e.type===\"document\")for(let t of e.nodes)this.visitSync(this.listeners.OnceExit,t);else this.visitSync(this.listeners.OnceExit,e)}return this.result}stringify(){if(this.error)throw this.error;if(this.stringified)return this.result;this.stringified=!0,this.sync();let e=this.result.opts,t=G0;e.syntax&&(t=e.syntax.stringify),e.stringifier&&(t=e.stringifier),t.stringify&&(t=t.stringify);let n=new W0(t,this.result.root,this.result.opts).generate();return this.result.css=n[0],this.result.map=n[1],this.result}walkSync(e){e[Re]=!0;let t=sc(e);for(let r of t)if(r===Pt)e.nodes&&e.each(n=>{n[Re]||this.walkSync(n)});else{let n=this.listeners[r];if(n&&this.visitSync(n,e.toProxy()))return}}visitSync(e,t){for(let[r,n]of e){this.result.lastPlugin=r;let a;try{a=n(t,this.helpers)}catch(s){throw this.handleError(s,t.proxyOf)}if(t.type!==\"root\"&&t.type!==\"document\"&&!t.parent)return!0;if(Cr(a))throw this.getAsyncError()}}runOnRoot(e){this.result.lastPlugin=e;try{if(typeof e==\"object\"&&e.Once){if(this.result.root.type===\"document\"){let t=this.result.root.nodes.map(r=>e.Once(r,this.helpers));return Cr(t[0])?Promise.all(t):t}return e.Once(this.result.root,this.helpers)}else if(typeof e==\"function\")return e(this.result.root,this.result)}catch(t){throw this.handleError(t)}}getAsyncError(){throw new Error(\"Use process(css).then(cb) to work with async plugins\")}handleError(e,t){let r=this.result.lastPlugin;try{t&&t.addToError(e),this.error=e,e.name===\"CssSyntaxError\"&&!e.plugin?(e.plugin=r.postcssPlugin,e.setMessage()):r.postcssVersion}catch(n){console&&console.error&&console.error(n)}return e}async runAsync(){this.plugin=0;for(let e=0;e<this.plugins.length;e++){let t=this.plugins[e],r=this.runOnRoot(t);if(Cr(r))try{await r}catch(n){throw this.handleError(n)}}if(this.prepareVisitors(),this.hasListener){let e=this.result.root;for(;!e[Re];){e[Re]=!0;let t=[ac(e)];for(;t.length>0;){let r=this.visitTick(t);if(Cr(r))try{await r}catch(n){let a=t[t.length-1].node;throw this.handleError(n,a)}}}if(this.listeners.OnceExit)for(let[t,r]of this.listeners.OnceExit){this.result.lastPlugin=t;try{if(e.type===\"document\"){let n=e.nodes.map(a=>r(a,this.helpers));await Promise.all(n)}else await r(e,this.helpers)}catch(n){throw this.handleError(n)}}}return this.processed=!0,this.stringify()}prepareVisitors(){this.listeners={};let e=(t,r,n)=>{this.listeners[r]||(this.listeners[r]=[]),this.listeners[r].push([t,n])};for(let t of this.plugins)if(typeof t==\"object\")for(let r in t){if(!K0[r]&&/^[A-Z]/.test(r))throw new Error(`Unknown event ${r} in ${t.postcssPlugin}. Try to update PostCSS (${this.processor.version} now).`);if(!Z0[r])if(typeof t[r]==\"object\")for(let n in t[r])n===\"*\"?e(t,r,t[r][n]):e(t,r+\"-\"+n.toLowerCase(),t[r][n]);else typeof t[r]==\"function\"&&e(t,r,t[r])}this.hasListener=Object.keys(this.listeners).length>0}visitTick(e){let t=e[e.length-1],{node:r,visitors:n}=t;if(r.type!==\"root\"&&r.type!==\"document\"&&!r.parent){e.pop();return}if(n.length>0&&t.visitorIndex<n.length){let[s,o]=n[t.visitorIndex];t.visitorIndex+=1,t.visitorIndex===n.length&&(t.visitors=[],t.visitorIndex=0),this.result.lastPlugin=s;try{return o(r.toProxy(),this.helpers)}catch(u){throw this.handleError(u,r)}}if(t.iterator!==0){let s=t.iterator,o;for(;o=r.nodes[r.indexes[s]];)if(r.indexes[s]+=1,!o[Re]){o[Re]=!0,e.push(ac(o));return}t.iterator=0,delete r.indexes[s]}let a=t.events;for(;t.eventIndex<a.length;){let s=a[t.eventIndex];if(t.eventIndex+=1,s===Pt){r.nodes&&r.nodes.length&&(r[Re]=!0,t.iterator=r.getIterator());return}else if(this.listeners[s]){t.visitors=this.listeners[s];return}}e.pop()}};Ve.registerPostcss=i=>{Bs=i};oc.exports=Ve;Ve.default=Ve;J0.registerLazyResult(Ve);Y0.registerLazyResult(Ve)});var uc=v((yT,lc)=>{l();\"use strict\";var ev=Ss(),tv=mr(),gT=_s(),rv=Wi(),iv=Ii(),Gi=class{constructor(e,t,r){t=t.toString(),this.stringified=!1,this._processor=e,this._css=t,this._opts=r,this._map=void 0;let n,a=tv;this.result=new iv(this._processor,n,this._opts),this.result.css=t;let s=this;Object.defineProperty(this.result,\"root\",{get(){return s.root}});let o=new ev(a,n,this._opts,t);if(o.isMap()){let[u,c]=o.generate();u&&(this.result.css=u),c&&(this.result.map=c)}}get[Symbol.toStringTag](){return\"NoWorkResult\"}get processor(){return this.result.processor}get opts(){return this.result.opts}get css(){return this.result.css}get content(){return this.result.css}get map(){return this.result.map}get root(){if(this._root)return this._root;let e,t=rv;try{e=t(this._css,this._opts)}catch(r){this.error=r}if(this.error)throw this.error;return this._root=e,e}get messages(){return[]}warnings(){return[]}toString(){return this._css}then(e,t){return this.async().then(e,t)}catch(e){return this.async().catch(e)}finally(e){return this.async().then(e,e)}async(){return this.error?Promise.reject(this.error):Promise.resolve(this.result)}sync(){if(this.error)throw this.error;return this.result}};lc.exports=Gi;Gi.default=Gi});var cc=v((wT,fc)=>{l();\"use strict\";var nv=uc(),sv=Fs(),av=Ti(),ov=Tt(),Dt=class{constructor(e=[]){this.version=\"8.4.24\",this.plugins=this.normalize(e)}use(e){return this.plugins=this.plugins.concat(this.normalize([e])),this}process(e,t={}){return this.plugins.length===0&&typeof t.parser==\"undefined\"&&typeof t.stringifier==\"undefined\"&&typeof t.syntax==\"undefined\"?new nv(this,e,t):new sv(this,e,t)}normalize(e){let t=[];for(let r of e)if(r.postcss===!0?r=r():r.postcss&&(r=r.postcss),typeof r==\"object\"&&Array.isArray(r.plugins))t=t.concat(r.plugins);else if(typeof r==\"object\"&&r.postcssPlugin)t.push(r);else if(typeof r==\"function\")t.push(r);else if(!(typeof r==\"object\"&&(r.parse||r.stringify)))throw new Error(r+\" is not a PostCSS plugin\");return t}};fc.exports=Dt;Dt.default=Dt;ov.registerProcessor(Dt);av.registerProcessor(Dt)});var dc=v((bT,pc)=>{l();\"use strict\";var lv=yr(),uv=Ps(),fv=wr(),cv=$i(),pv=Vi(),dv=Tt(),hv=ji();function Ar(i,e){if(Array.isArray(i))return i.map(n=>Ar(n));let{inputs:t,...r}=i;if(t){e=[];for(let n of t){let a={...n,__proto__:pv.prototype};a.map&&(a.map={...a.map,__proto__:uv.prototype}),e.push(a)}}if(r.nodes&&(r.nodes=i.nodes.map(n=>Ar(n,e))),r.source){let{inputId:n,...a}=r.source;r.source=a,n!=null&&(r.source.input=e[n])}if(r.type===\"root\")return new dv(r);if(r.type===\"decl\")return new lv(r);if(r.type===\"rule\")return new hv(r);if(r.type===\"comment\")return new fv(r);if(r.type===\"atrule\")return new cv(r);throw new Error(\"Unknown node type: \"+i.type)}pc.exports=Ar;Ar.default=Ar});var ye=v((vT,vc)=>{l();\"use strict\";var mv=ki(),hc=yr(),gv=Fs(),yv=it(),Ns=cc(),wv=mr(),bv=dc(),mc=Ti(),vv=Os(),gc=wr(),yc=$i(),xv=Ii(),kv=Vi(),Sv=Wi(),Cv=Ts(),wc=ji(),bc=Tt(),Av=gr();function j(...i){return i.length===1&&Array.isArray(i[0])&&(i=i[0]),new Ns(i)}j.plugin=function(e,t){let r=!1;function n(...s){console&&console.warn&&!r&&(r=!0,console.warn(e+`: postcss.plugin was deprecated. Migration guide:\nhttps://evilmartians.com/chronicles/postcss-8-plugin-migration`),h.env.LANG&&h.env.LANG.startsWith(\"cn\")&&console.warn(e+`: \\u91CC\\u9762 postcss.plugin \\u88AB\\u5F03\\u7528. \\u8FC1\\u79FB\\u6307\\u5357:\nhttps://www.w3ctech.com/topic/2226`));let o=t(...s);return o.postcssPlugin=e,o.postcssVersion=new Ns().version,o}let a;return Object.defineProperty(n,\"postcss\",{get(){return a||(a=n()),a}}),n.process=function(s,o,u){return j([n(u)]).process(s,o)},n};j.stringify=wv;j.parse=Sv;j.fromJSON=bv;j.list=Cv;j.comment=i=>new gc(i);j.atRule=i=>new yc(i);j.decl=i=>new hc(i);j.rule=i=>new wc(i);j.root=i=>new bc(i);j.document=i=>new mc(i);j.CssSyntaxError=mv;j.Declaration=hc;j.Container=yv;j.Processor=Ns;j.Document=mc;j.Comment=gc;j.Warning=vv;j.AtRule=yc;j.Result=xv;j.Input=kv;j.Rule=wc;j.Root=bc;j.Node=Av;gv.registerPostcss(j);vc.exports=j;j.default=j});var U,z,xT,kT,ST,CT,AT,_T,OT,ET,TT,PT,DT,IT,qT,RT,MT,BT,FT,NT,LT,$T,jT,zT,VT,UT,nt=C(()=>{l();U=X(ye()),z=U.default,xT=U.default.stringify,kT=U.default.fromJSON,ST=U.default.plugin,CT=U.default.parse,AT=U.default.list,_T=U.default.document,OT=U.default.comment,ET=U.default.atRule,TT=U.default.rule,PT=U.default.decl,DT=U.default.root,IT=U.default.CssSyntaxError,qT=U.default.Declaration,RT=U.default.Container,MT=U.default.Processor,BT=U.default.Document,FT=U.default.Comment,NT=U.default.Warning,LT=U.default.AtRule,$T=U.default.Result,jT=U.default.Input,zT=U.default.Rule,VT=U.default.Root,UT=U.default.Node});var Ls=v((GT,xc)=>{l();xc.exports=function(i,e,t,r,n){for(e=e.split?e.split(\".\"):e,r=0;r<e.length;r++)i=i?i[e[r]]:n;return i===n?t:i}});var Yi=v((Hi,kc)=>{l();\"use strict\";Hi.__esModule=!0;Hi.default=Ev;function _v(i){for(var e=i.toLowerCase(),t=\"\",r=!1,n=0;n<6&&e[n]!==void 0;n++){var a=e.charCodeAt(n),s=a>=97&&a<=102||a>=48&&a<=57;if(r=a===32,!s)break;t+=e[n]}if(t.length!==0){var o=parseInt(t,16),u=o>=55296&&o<=57343;return u||o===0||o>1114111?[\"\\uFFFD\",t.length+(r?1:0)]:[String.fromCodePoint(o),t.length+(r?1:0)]}}var Ov=/\\\\/;function Ev(i){var e=Ov.test(i);if(!e)return i;for(var t=\"\",r=0;r<i.length;r++){if(i[r]===\"\\\\\"){var n=_v(i.slice(r+1,r+7));if(n!==void 0){t+=n[0],r+=n[1];continue}if(i[r+1]===\"\\\\\"){t+=\"\\\\\",r++;continue}i.length===r+1&&(t+=i[r]);continue}t+=i[r]}return t}kc.exports=Hi.default});var Cc=v((Qi,Sc)=>{l();\"use strict\";Qi.__esModule=!0;Qi.default=Tv;function Tv(i){for(var e=arguments.length,t=new Array(e>1?e-1:0),r=1;r<e;r++)t[r-1]=arguments[r];for(;t.length>0;){var n=t.shift();if(!i[n])return;i=i[n]}return i}Sc.exports=Qi.default});var _c=v((Ji,Ac)=>{l();\"use strict\";Ji.__esModule=!0;Ji.default=Pv;function Pv(i){for(var e=arguments.length,t=new Array(e>1?e-1:0),r=1;r<e;r++)t[r-1]=arguments[r];for(;t.length>0;){var n=t.shift();i[n]||(i[n]={}),i=i[n]}}Ac.exports=Ji.default});var Ec=v((Xi,Oc)=>{l();\"use strict\";Xi.__esModule=!0;Xi.default=Dv;function Dv(i){for(var e=\"\",t=i.indexOf(\"/*\"),r=0;t>=0;){e=e+i.slice(r,t);var n=i.indexOf(\"*/\",t+2);if(n<0)return e;r=n+2,t=i.indexOf(\"/*\",r)}return e=e+i.slice(r),e}Oc.exports=Xi.default});var _r=v(Me=>{l();\"use strict\";Me.__esModule=!0;Me.unesc=Me.stripComments=Me.getProp=Me.ensureObject=void 0;var Iv=Ki(Yi());Me.unesc=Iv.default;var qv=Ki(Cc());Me.getProp=qv.default;var Rv=Ki(_c());Me.ensureObject=Rv.default;var Mv=Ki(Ec());Me.stripComments=Mv.default;function Ki(i){return i&&i.__esModule?i:{default:i}}});var Ue=v((Or,Dc)=>{l();\"use strict\";Or.__esModule=!0;Or.default=void 0;var Tc=_r();function Pc(i,e){for(var t=0;t<e.length;t++){var r=e[t];r.enumerable=r.enumerable||!1,r.configurable=!0,\"value\"in r&&(r.writable=!0),Object.defineProperty(i,r.key,r)}}function Bv(i,e,t){return e&&Pc(i.prototype,e),t&&Pc(i,t),Object.defineProperty(i,\"prototype\",{writable:!1}),i}var Fv=function i(e,t){if(typeof e!=\"object\"||e===null)return e;var r=new e.constructor;for(var n in e)if(!!e.hasOwnProperty(n)){var a=e[n],s=typeof a;n===\"parent\"&&s===\"object\"?t&&(r[n]=t):a instanceof Array?r[n]=a.map(function(o){return i(o,r)}):r[n]=i(a,r)}return r},Nv=function(){function i(t){t===void 0&&(t={}),Object.assign(this,t),this.spaces=this.spaces||{},this.spaces.before=this.spaces.before||\"\",this.spaces.after=this.spaces.after||\"\"}var e=i.prototype;return e.remove=function(){return this.parent&&this.parent.removeChild(this),this.parent=void 0,this},e.replaceWith=function(){if(this.parent){for(var r in arguments)this.parent.insertBefore(this,arguments[r]);this.remove()}return this},e.next=function(){return this.parent.at(this.parent.index(this)+1)},e.prev=function(){return this.parent.at(this.parent.index(this)-1)},e.clone=function(r){r===void 0&&(r={});var n=Fv(this);for(var a in r)n[a]=r[a];return n},e.appendToPropertyAndEscape=function(r,n,a){this.raws||(this.raws={});var s=this[r],o=this.raws[r];this[r]=s+n,o||a!==n?this.raws[r]=(o||s)+a:delete this.raws[r]},e.setPropertyAndEscape=function(r,n,a){this.raws||(this.raws={}),this[r]=n,this.raws[r]=a},e.setPropertyWithoutEscape=function(r,n){this[r]=n,this.raws&&delete this.raws[r]},e.isAtPosition=function(r,n){if(this.source&&this.source.start&&this.source.end)return!(this.source.start.line>r||this.source.end.line<r||this.source.start.line===r&&this.source.start.column>n||this.source.end.line===r&&this.source.end.column<n)},e.stringifyProperty=function(r){return this.raws&&this.raws[r]||this[r]},e.valueToString=function(){return String(this.stringifyProperty(\"value\"))},e.toString=function(){return[this.rawSpaceBefore,this.valueToString(),this.rawSpaceAfter].join(\"\")},Bv(i,[{key:\"rawSpaceBefore\",get:function(){var r=this.raws&&this.raws.spaces&&this.raws.spaces.before;return r===void 0&&(r=this.spaces&&this.spaces.before),r||\"\"},set:function(r){(0,Tc.ensureObject)(this,\"raws\",\"spaces\"),this.raws.spaces.before=r}},{key:\"rawSpaceAfter\",get:function(){var r=this.raws&&this.raws.spaces&&this.raws.spaces.after;return r===void 0&&(r=this.spaces.after),r||\"\"},set:function(r){(0,Tc.ensureObject)(this,\"raws\",\"spaces\"),this.raws.spaces.after=r}}]),i}();Or.default=Nv;Dc.exports=Or.default});var ae=v(W=>{l();\"use strict\";W.__esModule=!0;W.UNIVERSAL=W.TAG=W.STRING=W.SELECTOR=W.ROOT=W.PSEUDO=W.NESTING=W.ID=W.COMMENT=W.COMBINATOR=W.CLASS=W.ATTRIBUTE=void 0;var Lv=\"tag\";W.TAG=Lv;var $v=\"string\";W.STRING=$v;var jv=\"selector\";W.SELECTOR=jv;var zv=\"root\";W.ROOT=zv;var Vv=\"pseudo\";W.PSEUDO=Vv;var Uv=\"nesting\";W.NESTING=Uv;var Wv=\"id\";W.ID=Wv;var Gv=\"comment\";W.COMMENT=Gv;var Hv=\"combinator\";W.COMBINATOR=Hv;var Yv=\"class\";W.CLASS=Yv;var Qv=\"attribute\";W.ATTRIBUTE=Qv;var Jv=\"universal\";W.UNIVERSAL=Jv});var Zi=v((Er,Mc)=>{l();\"use strict\";Er.__esModule=!0;Er.default=void 0;var Xv=Zv(Ue()),We=Kv(ae());function Ic(i){if(typeof WeakMap!=\"function\")return null;var e=new WeakMap,t=new WeakMap;return(Ic=function(n){return n?t:e})(i)}function Kv(i,e){if(!e&&i&&i.__esModule)return i;if(i===null||typeof i!=\"object\"&&typeof i!=\"function\")return{default:i};var t=Ic(e);if(t&&t.has(i))return t.get(i);var r={},n=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var a in i)if(a!==\"default\"&&Object.prototype.hasOwnProperty.call(i,a)){var s=n?Object.getOwnPropertyDescriptor(i,a):null;s&&(s.get||s.set)?Object.defineProperty(r,a,s):r[a]=i[a]}return r.default=i,t&&t.set(i,r),r}function Zv(i){return i&&i.__esModule?i:{default:i}}function ex(i,e){var t=typeof Symbol!=\"undefined\"&&i[Symbol.iterator]||i[\"@@iterator\"];if(t)return(t=t.call(i)).next.bind(t);if(Array.isArray(i)||(t=tx(i))||e&&i&&typeof i.length==\"number\"){t&&(i=t);var r=0;return function(){return r>=i.length?{done:!0}:{done:!1,value:i[r++]}}}throw new TypeError(`Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function tx(i,e){if(!!i){if(typeof i==\"string\")return qc(i,e);var t=Object.prototype.toString.call(i).slice(8,-1);if(t===\"Object\"&&i.constructor&&(t=i.constructor.name),t===\"Map\"||t===\"Set\")return Array.from(i);if(t===\"Arguments\"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t))return qc(i,e)}}function qc(i,e){(e==null||e>i.length)&&(e=i.length);for(var t=0,r=new Array(e);t<e;t++)r[t]=i[t];return r}function Rc(i,e){for(var t=0;t<e.length;t++){var r=e[t];r.enumerable=r.enumerable||!1,r.configurable=!0,\"value\"in r&&(r.writable=!0),Object.defineProperty(i,r.key,r)}}function rx(i,e,t){return e&&Rc(i.prototype,e),t&&Rc(i,t),Object.defineProperty(i,\"prototype\",{writable:!1}),i}function ix(i,e){i.prototype=Object.create(e.prototype),i.prototype.constructor=i,$s(i,e)}function $s(i,e){return $s=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(r,n){return r.__proto__=n,r},$s(i,e)}var nx=function(i){ix(e,i);function e(r){var n;return n=i.call(this,r)||this,n.nodes||(n.nodes=[]),n}var t=e.prototype;return t.append=function(n){return n.parent=this,this.nodes.push(n),this},t.prepend=function(n){return n.parent=this,this.nodes.unshift(n),this},t.at=function(n){return this.nodes[n]},t.index=function(n){return typeof n==\"number\"?n:this.nodes.indexOf(n)},t.removeChild=function(n){n=this.index(n),this.at(n).parent=void 0,this.nodes.splice(n,1);var a;for(var s in this.indexes)a=this.indexes[s],a>=n&&(this.indexes[s]=a-1);return this},t.removeAll=function(){for(var n=ex(this.nodes),a;!(a=n()).done;){var s=a.value;s.parent=void 0}return this.nodes=[],this},t.empty=function(){return this.removeAll()},t.insertAfter=function(n,a){a.parent=this;var s=this.index(n);this.nodes.splice(s+1,0,a),a.parent=this;var o;for(var u in this.indexes)o=this.indexes[u],s<=o&&(this.indexes[u]=o+1);return this},t.insertBefore=function(n,a){a.parent=this;var s=this.index(n);this.nodes.splice(s,0,a),a.parent=this;var o;for(var u in this.indexes)o=this.indexes[u],o<=s&&(this.indexes[u]=o+1);return this},t._findChildAtPosition=function(n,a){var s=void 0;return this.each(function(o){if(o.atPosition){var u=o.atPosition(n,a);if(u)return s=u,!1}else if(o.isAtPosition(n,a))return s=o,!1}),s},t.atPosition=function(n,a){if(this.isAtPosition(n,a))return this._findChildAtPosition(n,a)||this},t._inferEndPosition=function(){this.last&&this.last.source&&this.last.source.end&&(this.source=this.source||{},this.source.end=this.source.end||{},Object.assign(this.source.end,this.last.source.end))},t.each=function(n){this.lastEach||(this.lastEach=0),this.indexes||(this.indexes={}),this.lastEach++;var a=this.lastEach;if(this.indexes[a]=0,!!this.length){for(var s,o;this.indexes[a]<this.length&&(s=this.indexes[a],o=n(this.at(s),s),o!==!1);)this.indexes[a]+=1;if(delete this.indexes[a],o===!1)return!1}},t.walk=function(n){return this.each(function(a,s){var o=n(a,s);if(o!==!1&&a.length&&(o=a.walk(n)),o===!1)return!1})},t.walkAttributes=function(n){var a=this;return this.walk(function(s){if(s.type===We.ATTRIBUTE)return n.call(a,s)})},t.walkClasses=function(n){var a=this;return this.walk(function(s){if(s.type===We.CLASS)return n.call(a,s)})},t.walkCombinators=function(n){var a=this;return this.walk(function(s){if(s.type===We.COMBINATOR)return n.call(a,s)})},t.walkComments=function(n){var a=this;return this.walk(function(s){if(s.type===We.COMMENT)return n.call(a,s)})},t.walkIds=function(n){var a=this;return this.walk(function(s){if(s.type===We.ID)return n.call(a,s)})},t.walkNesting=function(n){var a=this;return this.walk(function(s){if(s.type===We.NESTING)return n.call(a,s)})},t.walkPseudos=function(n){var a=this;return this.walk(function(s){if(s.type===We.PSEUDO)return n.call(a,s)})},t.walkTags=function(n){var a=this;return this.walk(function(s){if(s.type===We.TAG)return n.call(a,s)})},t.walkUniversals=function(n){var a=this;return this.walk(function(s){if(s.type===We.UNIVERSAL)return n.call(a,s)})},t.split=function(n){var a=this,s=[];return this.reduce(function(o,u,c){var f=n.call(a,u);return s.push(u),f?(o.push(s),s=[]):c===a.length-1&&o.push(s),o},[])},t.map=function(n){return this.nodes.map(n)},t.reduce=function(n,a){return this.nodes.reduce(n,a)},t.every=function(n){return this.nodes.every(n)},t.some=function(n){return this.nodes.some(n)},t.filter=function(n){return this.nodes.filter(n)},t.sort=function(n){return this.nodes.sort(n)},t.toString=function(){return this.map(String).join(\"\")},rx(e,[{key:\"first\",get:function(){return this.at(0)}},{key:\"last\",get:function(){return this.at(this.length-1)}},{key:\"length\",get:function(){return this.nodes.length}}]),e}(Xv.default);Er.default=nx;Mc.exports=Er.default});var zs=v((Tr,Fc)=>{l();\"use strict\";Tr.__esModule=!0;Tr.default=void 0;var sx=ox(Zi()),ax=ae();function ox(i){return i&&i.__esModule?i:{default:i}}function Bc(i,e){for(var t=0;t<e.length;t++){var r=e[t];r.enumerable=r.enumerable||!1,r.configurable=!0,\"value\"in r&&(r.writable=!0),Object.defineProperty(i,r.key,r)}}function lx(i,e,t){return e&&Bc(i.prototype,e),t&&Bc(i,t),Object.defineProperty(i,\"prototype\",{writable:!1}),i}function ux(i,e){i.prototype=Object.create(e.prototype),i.prototype.constructor=i,js(i,e)}function js(i,e){return js=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(r,n){return r.__proto__=n,r},js(i,e)}var fx=function(i){ux(e,i);function e(r){var n;return n=i.call(this,r)||this,n.type=ax.ROOT,n}var t=e.prototype;return t.toString=function(){var n=this.reduce(function(a,s){return a.push(String(s)),a},[]).join(\",\");return this.trailingComma?n+\",\":n},t.error=function(n,a){return this._error?this._error(n,a):new Error(n)},lx(e,[{key:\"errorGenerator\",set:function(n){this._error=n}}]),e}(sx.default);Tr.default=fx;Fc.exports=Tr.default});var Us=v((Pr,Nc)=>{l();\"use strict\";Pr.__esModule=!0;Pr.default=void 0;var cx=dx(Zi()),px=ae();function dx(i){return i&&i.__esModule?i:{default:i}}function hx(i,e){i.prototype=Object.create(e.prototype),i.prototype.constructor=i,Vs(i,e)}function Vs(i,e){return Vs=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(r,n){return r.__proto__=n,r},Vs(i,e)}var mx=function(i){hx(e,i);function e(t){var r;return r=i.call(this,t)||this,r.type=px.SELECTOR,r}return e}(cx.default);Pr.default=mx;Nc.exports=Pr.default});var en=v((QT,Lc)=>{l();\"use strict\";var gx={},yx=gx.hasOwnProperty,wx=function(e,t){if(!e)return t;var r={};for(var n in t)r[n]=yx.call(e,n)?e[n]:t[n];return r},bx=/[ -,\\.\\/:-@\\[-\\^`\\{-~]/,vx=/[ -,\\.\\/:-@\\[\\]\\^`\\{-~]/,xx=/(^|\\\\+)?(\\\\[A-F0-9]{1,6})\\x20(?![a-fA-F0-9\\x20])/g,Ws=function i(e,t){t=wx(t,i.options),t.quotes!=\"single\"&&t.quotes!=\"double\"&&(t.quotes=\"single\");for(var r=t.quotes==\"double\"?'\"':\"'\",n=t.isIdentifier,a=e.charAt(0),s=\"\",o=0,u=e.length;o<u;){var c=e.charAt(o++),f=c.charCodeAt(),d=void 0;if(f<32||f>126){if(f>=55296&&f<=56319&&o<u){var p=e.charCodeAt(o++);(p&64512)==56320?f=((f&1023)<<10)+(p&1023)+65536:o--}d=\"\\\\\"+f.toString(16).toUpperCase()+\" \"}else t.escapeEverything?bx.test(c)?d=\"\\\\\"+c:d=\"\\\\\"+f.toString(16).toUpperCase()+\" \":/[\\t\\n\\f\\r\\x0B]/.test(c)?d=\"\\\\\"+f.toString(16).toUpperCase()+\" \":c==\"\\\\\"||!n&&(c=='\"'&&r==c||c==\"'\"&&r==c)||n&&vx.test(c)?d=\"\\\\\"+c:d=c;s+=d}return n&&(/^-[-\\d]/.test(s)?s=\"\\\\-\"+s.slice(1):/\\d/.test(a)&&(s=\"\\\\3\"+a+\" \"+s.slice(1))),s=s.replace(xx,function(m,b,x){return b&&b.length%2?m:(b||\"\")+x}),!n&&t.wrap?r+s+r:s};Ws.options={escapeEverything:!1,isIdentifier:!1,quotes:\"single\",wrap:!1};Ws.version=\"3.0.0\";Lc.exports=Ws});var Hs=v((Dr,zc)=>{l();\"use strict\";Dr.__esModule=!0;Dr.default=void 0;var kx=$c(en()),Sx=_r(),Cx=$c(Ue()),Ax=ae();function $c(i){return i&&i.__esModule?i:{default:i}}function jc(i,e){for(var t=0;t<e.length;t++){var r=e[t];r.enumerable=r.enumerable||!1,r.configurable=!0,\"value\"in r&&(r.writable=!0),Object.defineProperty(i,r.key,r)}}function _x(i,e,t){return e&&jc(i.prototype,e),t&&jc(i,t),Object.defineProperty(i,\"prototype\",{writable:!1}),i}function Ox(i,e){i.prototype=Object.create(e.prototype),i.prototype.constructor=i,Gs(i,e)}function Gs(i,e){return Gs=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(r,n){return r.__proto__=n,r},Gs(i,e)}var Ex=function(i){Ox(e,i);function e(r){var n;return n=i.call(this,r)||this,n.type=Ax.CLASS,n._constructed=!0,n}var t=e.prototype;return t.valueToString=function(){return\".\"+i.prototype.valueToString.call(this)},_x(e,[{key:\"value\",get:function(){return this._value},set:function(n){if(this._constructed){var a=(0,kx.default)(n,{isIdentifier:!0});a!==n?((0,Sx.ensureObject)(this,\"raws\"),this.raws.value=a):this.raws&&delete this.raws.value}this._value=n}}]),e}(Cx.default);Dr.default=Ex;zc.exports=Dr.default});var Qs=v((Ir,Vc)=>{l();\"use strict\";Ir.__esModule=!0;Ir.default=void 0;var Tx=Dx(Ue()),Px=ae();function Dx(i){return i&&i.__esModule?i:{default:i}}function Ix(i,e){i.prototype=Object.create(e.prototype),i.prototype.constructor=i,Ys(i,e)}function Ys(i,e){return Ys=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(r,n){return r.__proto__=n,r},Ys(i,e)}var qx=function(i){Ix(e,i);function e(t){var r;return r=i.call(this,t)||this,r.type=Px.COMMENT,r}return e}(Tx.default);Ir.default=qx;Vc.exports=Ir.default});var Xs=v((qr,Uc)=>{l();\"use strict\";qr.__esModule=!0;qr.default=void 0;var Rx=Bx(Ue()),Mx=ae();function Bx(i){return i&&i.__esModule?i:{default:i}}function Fx(i,e){i.prototype=Object.create(e.prototype),i.prototype.constructor=i,Js(i,e)}function Js(i,e){return Js=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(r,n){return r.__proto__=n,r},Js(i,e)}var Nx=function(i){Fx(e,i);function e(r){var n;return n=i.call(this,r)||this,n.type=Mx.ID,n}var t=e.prototype;return t.valueToString=function(){return\"#\"+i.prototype.valueToString.call(this)},e}(Rx.default);qr.default=Nx;Uc.exports=qr.default});var tn=v((Rr,Hc)=>{l();\"use strict\";Rr.__esModule=!0;Rr.default=void 0;var Lx=Wc(en()),$x=_r(),jx=Wc(Ue());function Wc(i){return i&&i.__esModule?i:{default:i}}function Gc(i,e){for(var t=0;t<e.length;t++){var r=e[t];r.enumerable=r.enumerable||!1,r.configurable=!0,\"value\"in r&&(r.writable=!0),Object.defineProperty(i,r.key,r)}}function zx(i,e,t){return e&&Gc(i.prototype,e),t&&Gc(i,t),Object.defineProperty(i,\"prototype\",{writable:!1}),i}function Vx(i,e){i.prototype=Object.create(e.prototype),i.prototype.constructor=i,Ks(i,e)}function Ks(i,e){return Ks=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(r,n){return r.__proto__=n,r},Ks(i,e)}var Ux=function(i){Vx(e,i);function e(){return i.apply(this,arguments)||this}var t=e.prototype;return t.qualifiedName=function(n){return this.namespace?this.namespaceString+\"|\"+n:n},t.valueToString=function(){return this.qualifiedName(i.prototype.valueToString.call(this))},zx(e,[{key:\"namespace\",get:function(){return this._namespace},set:function(n){if(n===!0||n===\"*\"||n===\"&\"){this._namespace=n,this.raws&&delete this.raws.namespace;return}var a=(0,Lx.default)(n,{isIdentifier:!0});this._namespace=n,a!==n?((0,$x.ensureObject)(this,\"raws\"),this.raws.namespace=a):this.raws&&delete this.raws.namespace}},{key:\"ns\",get:function(){return this._namespace},set:function(n){this.namespace=n}},{key:\"namespaceString\",get:function(){if(this.namespace){var n=this.stringifyProperty(\"namespace\");return n===!0?\"\":n}else return\"\"}}]),e}(jx.default);Rr.default=Ux;Hc.exports=Rr.default});var ea=v((Mr,Yc)=>{l();\"use strict\";Mr.__esModule=!0;Mr.default=void 0;var Wx=Hx(tn()),Gx=ae();function Hx(i){return i&&i.__esModule?i:{default:i}}function Yx(i,e){i.prototype=Object.create(e.prototype),i.prototype.constructor=i,Zs(i,e)}function Zs(i,e){return Zs=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(r,n){return r.__proto__=n,r},Zs(i,e)}var Qx=function(i){Yx(e,i);function e(t){var r;return r=i.call(this,t)||this,r.type=Gx.TAG,r}return e}(Wx.default);Mr.default=Qx;Yc.exports=Mr.default});var ra=v((Br,Qc)=>{l();\"use strict\";Br.__esModule=!0;Br.default=void 0;var Jx=Kx(Ue()),Xx=ae();function Kx(i){return i&&i.__esModule?i:{default:i}}function Zx(i,e){i.prototype=Object.create(e.prototype),i.prototype.constructor=i,ta(i,e)}function ta(i,e){return ta=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(r,n){return r.__proto__=n,r},ta(i,e)}var e1=function(i){Zx(e,i);function e(t){var r;return r=i.call(this,t)||this,r.type=Xx.STRING,r}return e}(Jx.default);Br.default=e1;Qc.exports=Br.default});var na=v((Fr,Jc)=>{l();\"use strict\";Fr.__esModule=!0;Fr.default=void 0;var t1=i1(Zi()),r1=ae();function i1(i){return i&&i.__esModule?i:{default:i}}function n1(i,e){i.prototype=Object.create(e.prototype),i.prototype.constructor=i,ia(i,e)}function ia(i,e){return ia=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(r,n){return r.__proto__=n,r},ia(i,e)}var s1=function(i){n1(e,i);function e(r){var n;return n=i.call(this,r)||this,n.type=r1.PSEUDO,n}var t=e.prototype;return t.toString=function(){var n=this.length?\"(\"+this.map(String).join(\",\")+\")\":\"\";return[this.rawSpaceBefore,this.stringifyProperty(\"value\"),n,this.rawSpaceAfter].join(\"\")},e}(t1.default);Fr.default=s1;Jc.exports=Fr.default});var Xc={};_e(Xc,{deprecate:()=>a1});function a1(i){return i}var Kc=C(()=>{l()});var ep=v((JT,Zc)=>{l();Zc.exports=(Kc(),Xc).deprecate});var fa=v($r=>{l();\"use strict\";$r.__esModule=!0;$r.default=void 0;$r.unescapeValue=la;var Nr=aa(en()),o1=aa(Yi()),l1=aa(tn()),u1=ae(),sa;function aa(i){return i&&i.__esModule?i:{default:i}}function tp(i,e){for(var t=0;t<e.length;t++){var r=e[t];r.enumerable=r.enumerable||!1,r.configurable=!0,\"value\"in r&&(r.writable=!0),Object.defineProperty(i,r.key,r)}}function f1(i,e,t){return e&&tp(i.prototype,e),t&&tp(i,t),Object.defineProperty(i,\"prototype\",{writable:!1}),i}function c1(i,e){i.prototype=Object.create(e.prototype),i.prototype.constructor=i,oa(i,e)}function oa(i,e){return oa=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(r,n){return r.__proto__=n,r},oa(i,e)}var Lr=ep(),p1=/^('|\")([^]*)\\1$/,d1=Lr(function(){},\"Assigning an attribute a value containing characters that might need to be escaped is deprecated. Call attribute.setValue() instead.\"),h1=Lr(function(){},\"Assigning attr.quoted is deprecated and has no effect. Assign to attr.quoteMark instead.\"),m1=Lr(function(){},\"Constructing an Attribute selector with a value without specifying quoteMark is deprecated. Note: The value should be unescaped now.\");function la(i){var e=!1,t=null,r=i,n=r.match(p1);return n&&(t=n[1],r=n[2]),r=(0,o1.default)(r),r!==i&&(e=!0),{deprecatedUsage:e,unescaped:r,quoteMark:t}}function g1(i){if(i.quoteMark!==void 0||i.value===void 0)return i;m1();var e=la(i.value),t=e.quoteMark,r=e.unescaped;return i.raws||(i.raws={}),i.raws.value===void 0&&(i.raws.value=i.value),i.value=r,i.quoteMark=t,i}var rn=function(i){c1(e,i);function e(r){var n;return r===void 0&&(r={}),n=i.call(this,g1(r))||this,n.type=u1.ATTRIBUTE,n.raws=n.raws||{},Object.defineProperty(n.raws,\"unquoted\",{get:Lr(function(){return n.value},\"attr.raws.unquoted is deprecated. Call attr.value instead.\"),set:Lr(function(){return n.value},\"Setting attr.raws.unquoted is deprecated and has no effect. attr.value is unescaped by default now.\")}),n._constructed=!0,n}var t=e.prototype;return t.getQuotedValue=function(n){n===void 0&&(n={});var a=this._determineQuoteMark(n),s=ua[a],o=(0,Nr.default)(this._value,s);return o},t._determineQuoteMark=function(n){return n.smart?this.smartQuoteMark(n):this.preferredQuoteMark(n)},t.setValue=function(n,a){a===void 0&&(a={}),this._value=n,this._quoteMark=this._determineQuoteMark(a),this._syncRawValue()},t.smartQuoteMark=function(n){var a=this.value,s=a.replace(/[^']/g,\"\").length,o=a.replace(/[^\"]/g,\"\").length;if(s+o===0){var u=(0,Nr.default)(a,{isIdentifier:!0});if(u===a)return e.NO_QUOTE;var c=this.preferredQuoteMark(n);if(c===e.NO_QUOTE){var f=this.quoteMark||n.quoteMark||e.DOUBLE_QUOTE,d=ua[f],p=(0,Nr.default)(a,d);if(p.length<u.length)return f}return c}else return o===s?this.preferredQuoteMark(n):o<s?e.DOUBLE_QUOTE:e.SINGLE_QUOTE},t.preferredQuoteMark=function(n){var a=n.preferCurrentQuoteMark?this.quoteMark:n.quoteMark;return a===void 0&&(a=n.preferCurrentQuoteMark?n.quoteMark:this.quoteMark),a===void 0&&(a=e.DOUBLE_QUOTE),a},t._syncRawValue=function(){var n=(0,Nr.default)(this._value,ua[this.quoteMark]);n===this._value?this.raws&&delete this.raws.value:this.raws.value=n},t._handleEscapes=function(n,a){if(this._constructed){var s=(0,Nr.default)(a,{isIdentifier:!0});s!==a?this.raws[n]=s:delete this.raws[n]}},t._spacesFor=function(n){var a={before:\"\",after:\"\"},s=this.spaces[n]||{},o=this.raws.spaces&&this.raws.spaces[n]||{};return Object.assign(a,s,o)},t._stringFor=function(n,a,s){a===void 0&&(a=n),s===void 0&&(s=rp);var o=this._spacesFor(a);return s(this.stringifyProperty(n),o)},t.offsetOf=function(n){var a=1,s=this._spacesFor(\"attribute\");if(a+=s.before.length,n===\"namespace\"||n===\"ns\")return this.namespace?a:-1;if(n===\"attributeNS\"||(a+=this.namespaceString.length,this.namespace&&(a+=1),n===\"attribute\"))return a;a+=this.stringifyProperty(\"attribute\").length,a+=s.after.length;var o=this._spacesFor(\"operator\");a+=o.before.length;var u=this.stringifyProperty(\"operator\");if(n===\"operator\")return u?a:-1;a+=u.length,a+=o.after.length;var c=this._spacesFor(\"value\");a+=c.before.length;var f=this.stringifyProperty(\"value\");if(n===\"value\")return f?a:-1;a+=f.length,a+=c.after.length;var d=this._spacesFor(\"insensitive\");return a+=d.before.length,n===\"insensitive\"&&this.insensitive?a:-1},t.toString=function(){var n=this,a=[this.rawSpaceBefore,\"[\"];return a.push(this._stringFor(\"qualifiedAttribute\",\"attribute\")),this.operator&&(this.value||this.value===\"\")&&(a.push(this._stringFor(\"operator\")),a.push(this._stringFor(\"value\")),a.push(this._stringFor(\"insensitiveFlag\",\"insensitive\",function(s,o){return s.length>0&&!n.quoted&&o.before.length===0&&!(n.spaces.value&&n.spaces.value.after)&&(o.before=\" \"),rp(s,o)}))),a.push(\"]\"),a.push(this.rawSpaceAfter),a.join(\"\")},f1(e,[{key:\"quoted\",get:function(){var n=this.quoteMark;return n===\"'\"||n==='\"'},set:function(n){h1()}},{key:\"quoteMark\",get:function(){return this._quoteMark},set:function(n){if(!this._constructed){this._quoteMark=n;return}this._quoteMark!==n&&(this._quoteMark=n,this._syncRawValue())}},{key:\"qualifiedAttribute\",get:function(){return this.qualifiedName(this.raws.attribute||this.attribute)}},{key:\"insensitiveFlag\",get:function(){return this.insensitive?\"i\":\"\"}},{key:\"value\",get:function(){return this._value},set:function(n){if(this._constructed){var a=la(n),s=a.deprecatedUsage,o=a.unescaped,u=a.quoteMark;if(s&&d1(),o===this._value&&u===this._quoteMark)return;this._value=o,this._quoteMark=u,this._syncRawValue()}else this._value=n}},{key:\"insensitive\",get:function(){return this._insensitive},set:function(n){n||(this._insensitive=!1,this.raws&&(this.raws.insensitiveFlag===\"I\"||this.raws.insensitiveFlag===\"i\")&&(this.raws.insensitiveFlag=void 0)),this._insensitive=n}},{key:\"attribute\",get:function(){return this._attribute},set:function(n){this._handleEscapes(\"attribute\",n),this._attribute=n}}]),e}(l1.default);$r.default=rn;rn.NO_QUOTE=null;rn.SINGLE_QUOTE=\"'\";rn.DOUBLE_QUOTE='\"';var ua=(sa={\"'\":{quotes:\"single\",wrap:!0},'\"':{quotes:\"double\",wrap:!0}},sa[null]={isIdentifier:!0},sa);function rp(i,e){return\"\"+e.before+i+e.after}});var pa=v((jr,ip)=>{l();\"use strict\";jr.__esModule=!0;jr.default=void 0;var y1=b1(tn()),w1=ae();function b1(i){return i&&i.__esModule?i:{default:i}}function v1(i,e){i.prototype=Object.create(e.prototype),i.prototype.constructor=i,ca(i,e)}function ca(i,e){return ca=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(r,n){return r.__proto__=n,r},ca(i,e)}var x1=function(i){v1(e,i);function e(t){var r;return r=i.call(this,t)||this,r.type=w1.UNIVERSAL,r.value=\"*\",r}return e}(y1.default);jr.default=x1;ip.exports=jr.default});var ha=v((zr,np)=>{l();\"use strict\";zr.__esModule=!0;zr.default=void 0;var k1=C1(Ue()),S1=ae();function C1(i){return i&&i.__esModule?i:{default:i}}function A1(i,e){i.prototype=Object.create(e.prototype),i.prototype.constructor=i,da(i,e)}function da(i,e){return da=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(r,n){return r.__proto__=n,r},da(i,e)}var _1=function(i){A1(e,i);function e(t){var r;return r=i.call(this,t)||this,r.type=S1.COMBINATOR,r}return e}(k1.default);zr.default=_1;np.exports=zr.default});var ga=v((Vr,sp)=>{l();\"use strict\";Vr.__esModule=!0;Vr.default=void 0;var O1=T1(Ue()),E1=ae();function T1(i){return i&&i.__esModule?i:{default:i}}function P1(i,e){i.prototype=Object.create(e.prototype),i.prototype.constructor=i,ma(i,e)}function ma(i,e){return ma=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(r,n){return r.__proto__=n,r},ma(i,e)}var D1=function(i){P1(e,i);function e(t){var r;return r=i.call(this,t)||this,r.type=E1.NESTING,r.value=\"&\",r}return e}(O1.default);Vr.default=D1;sp.exports=Vr.default});var op=v((nn,ap)=>{l();\"use strict\";nn.__esModule=!0;nn.default=I1;function I1(i){return i.sort(function(e,t){return e-t})}ap.exports=nn.default});var ya=v(D=>{l();\"use strict\";D.__esModule=!0;D.word=D.tilde=D.tab=D.str=D.space=D.slash=D.singleQuote=D.semicolon=D.plus=D.pipe=D.openSquare=D.openParenthesis=D.newline=D.greaterThan=D.feed=D.equals=D.doubleQuote=D.dollar=D.cr=D.comment=D.comma=D.combinator=D.colon=D.closeSquare=D.closeParenthesis=D.caret=D.bang=D.backslash=D.at=D.asterisk=D.ampersand=void 0;var q1=38;D.ampersand=q1;var R1=42;D.asterisk=R1;var M1=64;D.at=M1;var B1=44;D.comma=B1;var F1=58;D.colon=F1;var N1=59;D.semicolon=N1;var L1=40;D.openParenthesis=L1;var $1=41;D.closeParenthesis=$1;var j1=91;D.openSquare=j1;var z1=93;D.closeSquare=z1;var V1=36;D.dollar=V1;var U1=126;D.tilde=U1;var W1=94;D.caret=W1;var G1=43;D.plus=G1;var H1=61;D.equals=H1;var Y1=124;D.pipe=Y1;var Q1=62;D.greaterThan=Q1;var J1=32;D.space=J1;var lp=39;D.singleQuote=lp;var X1=34;D.doubleQuote=X1;var K1=47;D.slash=K1;var Z1=33;D.bang=Z1;var ek=92;D.backslash=ek;var tk=13;D.cr=tk;var rk=12;D.feed=rk;var ik=10;D.newline=ik;var nk=9;D.tab=nk;var sk=lp;D.str=sk;var ak=-1;D.comment=ak;var ok=-2;D.word=ok;var lk=-3;D.combinator=lk});var cp=v(Ur=>{l();\"use strict\";Ur.__esModule=!0;Ur.FIELDS=void 0;Ur.default=mk;var O=uk(ya()),It,V;function up(i){if(typeof WeakMap!=\"function\")return null;var e=new WeakMap,t=new WeakMap;return(up=function(n){return n?t:e})(i)}function uk(i,e){if(!e&&i&&i.__esModule)return i;if(i===null||typeof i!=\"object\"&&typeof i!=\"function\")return{default:i};var t=up(e);if(t&&t.has(i))return t.get(i);var r={},n=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var a in i)if(a!==\"default\"&&Object.prototype.hasOwnProperty.call(i,a)){var s=n?Object.getOwnPropertyDescriptor(i,a):null;s&&(s.get||s.set)?Object.defineProperty(r,a,s):r[a]=i[a]}return r.default=i,t&&t.set(i,r),r}var fk=(It={},It[O.tab]=!0,It[O.newline]=!0,It[O.cr]=!0,It[O.feed]=!0,It),ck=(V={},V[O.space]=!0,V[O.tab]=!0,V[O.newline]=!0,V[O.cr]=!0,V[O.feed]=!0,V[O.ampersand]=!0,V[O.asterisk]=!0,V[O.bang]=!0,V[O.comma]=!0,V[O.colon]=!0,V[O.semicolon]=!0,V[O.openParenthesis]=!0,V[O.closeParenthesis]=!0,V[O.openSquare]=!0,V[O.closeSquare]=!0,V[O.singleQuote]=!0,V[O.doubleQuote]=!0,V[O.plus]=!0,V[O.pipe]=!0,V[O.tilde]=!0,V[O.greaterThan]=!0,V[O.equals]=!0,V[O.dollar]=!0,V[O.caret]=!0,V[O.slash]=!0,V),wa={},fp=\"0123456789abcdefABCDEF\";for(sn=0;sn<fp.length;sn++)wa[fp.charCodeAt(sn)]=!0;var sn;function pk(i,e){var t=e,r;do{if(r=i.charCodeAt(t),ck[r])return t-1;r===O.backslash?t=dk(i,t)+1:t++}while(t<i.length);return t-1}function dk(i,e){var t=e,r=i.charCodeAt(t+1);if(!fk[r])if(wa[r]){var n=0;do t++,n++,r=i.charCodeAt(t+1);while(wa[r]&&n<6);n<6&&r===O.space&&t++}else t++;return t}var hk={TYPE:0,START_LINE:1,START_COL:2,END_LINE:3,END_COL:4,START_POS:5,END_POS:6};Ur.FIELDS=hk;function mk(i){var e=[],t=i.css.valueOf(),r=t,n=r.length,a=-1,s=1,o=0,u=0,c,f,d,p,m,b,x,y,w,k,S,_,E;function I(q,R){if(i.safe)t+=R,w=t.length-1;else throw i.error(\"Unclosed \"+q,s,o-a,o)}for(;o<n;){switch(c=t.charCodeAt(o),c===O.newline&&(a=o,s+=1),c){case O.space:case O.tab:case O.newline:case O.cr:case O.feed:w=o;do w+=1,c=t.charCodeAt(w),c===O.newline&&(a=w,s+=1);while(c===O.space||c===O.newline||c===O.tab||c===O.cr||c===O.feed);E=O.space,p=s,d=w-a-1,u=w;break;case O.plus:case O.greaterThan:case O.tilde:case O.pipe:w=o;do w+=1,c=t.charCodeAt(w);while(c===O.plus||c===O.greaterThan||c===O.tilde||c===O.pipe);E=O.combinator,p=s,d=o-a,u=w;break;case O.asterisk:case O.ampersand:case O.bang:case O.comma:case O.equals:case O.dollar:case O.caret:case O.openSquare:case O.closeSquare:case O.colon:case O.semicolon:case O.openParenthesis:case O.closeParenthesis:w=o,E=c,p=s,d=o-a,u=w+1;break;case O.singleQuote:case O.doubleQuote:_=c===O.singleQuote?\"'\":'\"',w=o;do for(m=!1,w=t.indexOf(_,w+1),w===-1&&I(\"quote\",_),b=w;t.charCodeAt(b-1)===O.backslash;)b-=1,m=!m;while(m);E=O.str,p=s,d=o-a,u=w+1;break;default:c===O.slash&&t.charCodeAt(o+1)===O.asterisk?(w=t.indexOf(\"*/\",o+2)+1,w===0&&I(\"comment\",\"*/\"),f=t.slice(o,w+1),y=f.split(`\n`),x=y.length-1,x>0?(k=s+x,S=w-y[x].length):(k=s,S=a),E=O.comment,s=k,p=k,d=w-S):c===O.slash?(w=o,E=c,p=s,d=o-a,u=w+1):(w=pk(t,o),E=O.word,p=s,d=w-a),u=w+1;break}e.push([E,s,o-a,p,d,o,u]),S&&(a=S,S=null),o=u}return e}});var bp=v((Wr,wp)=>{l();\"use strict\";Wr.__esModule=!0;Wr.default=void 0;var gk=ve(zs()),ba=ve(Us()),yk=ve(Hs()),pp=ve(Qs()),wk=ve(Xs()),bk=ve(ea()),va=ve(ra()),vk=ve(na()),dp=an(fa()),xk=ve(pa()),xa=ve(ha()),kk=ve(ga()),Sk=ve(op()),A=an(cp()),T=an(ya()),Ck=an(ae()),Y=_r(),vt,ka;function hp(i){if(typeof WeakMap!=\"function\")return null;var e=new WeakMap,t=new WeakMap;return(hp=function(n){return n?t:e})(i)}function an(i,e){if(!e&&i&&i.__esModule)return i;if(i===null||typeof i!=\"object\"&&typeof i!=\"function\")return{default:i};var t=hp(e);if(t&&t.has(i))return t.get(i);var r={},n=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var a in i)if(a!==\"default\"&&Object.prototype.hasOwnProperty.call(i,a)){var s=n?Object.getOwnPropertyDescriptor(i,a):null;s&&(s.get||s.set)?Object.defineProperty(r,a,s):r[a]=i[a]}return r.default=i,t&&t.set(i,r),r}function ve(i){return i&&i.__esModule?i:{default:i}}function mp(i,e){for(var t=0;t<e.length;t++){var r=e[t];r.enumerable=r.enumerable||!1,r.configurable=!0,\"value\"in r&&(r.writable=!0),Object.defineProperty(i,r.key,r)}}function Ak(i,e,t){return e&&mp(i.prototype,e),t&&mp(i,t),Object.defineProperty(i,\"prototype\",{writable:!1}),i}var Sa=(vt={},vt[T.space]=!0,vt[T.cr]=!0,vt[T.feed]=!0,vt[T.newline]=!0,vt[T.tab]=!0,vt),_k=Object.assign({},Sa,(ka={},ka[T.comment]=!0,ka));function gp(i){return{line:i[A.FIELDS.START_LINE],column:i[A.FIELDS.START_COL]}}function yp(i){return{line:i[A.FIELDS.END_LINE],column:i[A.FIELDS.END_COL]}}function xt(i,e,t,r){return{start:{line:i,column:e},end:{line:t,column:r}}}function qt(i){return xt(i[A.FIELDS.START_LINE],i[A.FIELDS.START_COL],i[A.FIELDS.END_LINE],i[A.FIELDS.END_COL])}function Ca(i,e){if(!!i)return xt(i[A.FIELDS.START_LINE],i[A.FIELDS.START_COL],e[A.FIELDS.END_LINE],e[A.FIELDS.END_COL])}function Rt(i,e){var t=i[e];if(typeof t==\"string\")return t.indexOf(\"\\\\\")!==-1&&((0,Y.ensureObject)(i,\"raws\"),i[e]=(0,Y.unesc)(t),i.raws[e]===void 0&&(i.raws[e]=t)),i}function Aa(i,e){for(var t=-1,r=[];(t=i.indexOf(e,t+1))!==-1;)r.push(t);return r}function Ok(){var i=Array.prototype.concat.apply([],arguments);return i.filter(function(e,t){return t===i.indexOf(e)})}var Ek=function(){function i(t,r){r===void 0&&(r={}),this.rule=t,this.options=Object.assign({lossy:!1,safe:!1},r),this.position=0,this.css=typeof this.rule==\"string\"?this.rule:this.rule.selector,this.tokens=(0,A.default)({css:this.css,error:this._errorGenerator(),safe:this.options.safe});var n=Ca(this.tokens[0],this.tokens[this.tokens.length-1]);this.root=new gk.default({source:n}),this.root.errorGenerator=this._errorGenerator();var a=new ba.default({source:{start:{line:1,column:1}}});this.root.append(a),this.current=a,this.loop()}var e=i.prototype;return e._errorGenerator=function(){var r=this;return function(n,a){return typeof r.rule==\"string\"?new Error(n):r.rule.error(n,a)}},e.attribute=function(){var r=[],n=this.currToken;for(this.position++;this.position<this.tokens.length&&this.currToken[A.FIELDS.TYPE]!==T.closeSquare;)r.push(this.currToken),this.position++;if(this.currToken[A.FIELDS.TYPE]!==T.closeSquare)return this.expected(\"closing square bracket\",this.currToken[A.FIELDS.START_POS]);var a=r.length,s={source:xt(n[1],n[2],this.currToken[3],this.currToken[4]),sourceIndex:n[A.FIELDS.START_POS]};if(a===1&&!~[T.word].indexOf(r[0][A.FIELDS.TYPE]))return this.expected(\"attribute\",r[0][A.FIELDS.START_POS]);for(var o=0,u=\"\",c=\"\",f=null,d=!1;o<a;){var p=r[o],m=this.content(p),b=r[o+1];switch(p[A.FIELDS.TYPE]){case T.space:if(d=!0,this.options.lossy)break;if(f){(0,Y.ensureObject)(s,\"spaces\",f);var x=s.spaces[f].after||\"\";s.spaces[f].after=x+m;var y=(0,Y.getProp)(s,\"raws\",\"spaces\",f,\"after\")||null;y&&(s.raws.spaces[f].after=y+m)}else u=u+m,c=c+m;break;case T.asterisk:if(b[A.FIELDS.TYPE]===T.equals)s.operator=m,f=\"operator\";else if((!s.namespace||f===\"namespace\"&&!d)&&b){u&&((0,Y.ensureObject)(s,\"spaces\",\"attribute\"),s.spaces.attribute.before=u,u=\"\"),c&&((0,Y.ensureObject)(s,\"raws\",\"spaces\",\"attribute\"),s.raws.spaces.attribute.before=u,c=\"\"),s.namespace=(s.namespace||\"\")+m;var w=(0,Y.getProp)(s,\"raws\",\"namespace\")||null;w&&(s.raws.namespace+=m),f=\"namespace\"}d=!1;break;case T.dollar:if(f===\"value\"){var k=(0,Y.getProp)(s,\"raws\",\"value\");s.value+=\"$\",k&&(s.raws.value=k+\"$\");break}case T.caret:b[A.FIELDS.TYPE]===T.equals&&(s.operator=m,f=\"operator\"),d=!1;break;case T.combinator:if(m===\"~\"&&b[A.FIELDS.TYPE]===T.equals&&(s.operator=m,f=\"operator\"),m!==\"|\"){d=!1;break}b[A.FIELDS.TYPE]===T.equals?(s.operator=m,f=\"operator\"):!s.namespace&&!s.attribute&&(s.namespace=!0),d=!1;break;case T.word:if(b&&this.content(b)===\"|\"&&r[o+2]&&r[o+2][A.FIELDS.TYPE]!==T.equals&&!s.operator&&!s.namespace)s.namespace=m,f=\"namespace\";else if(!s.attribute||f===\"attribute\"&&!d){u&&((0,Y.ensureObject)(s,\"spaces\",\"attribute\"),s.spaces.attribute.before=u,u=\"\"),c&&((0,Y.ensureObject)(s,\"raws\",\"spaces\",\"attribute\"),s.raws.spaces.attribute.before=c,c=\"\"),s.attribute=(s.attribute||\"\")+m;var S=(0,Y.getProp)(s,\"raws\",\"attribute\")||null;S&&(s.raws.attribute+=m),f=\"attribute\"}else if(!s.value&&s.value!==\"\"||f===\"value\"&&!(d||s.quoteMark)){var _=(0,Y.unesc)(m),E=(0,Y.getProp)(s,\"raws\",\"value\")||\"\",I=s.value||\"\";s.value=I+_,s.quoteMark=null,(_!==m||E)&&((0,Y.ensureObject)(s,\"raws\"),s.raws.value=(E||I)+m),f=\"value\"}else{var q=m===\"i\"||m===\"I\";(s.value||s.value===\"\")&&(s.quoteMark||d)?(s.insensitive=q,(!q||m===\"I\")&&((0,Y.ensureObject)(s,\"raws\"),s.raws.insensitiveFlag=m),f=\"insensitive\",u&&((0,Y.ensureObject)(s,\"spaces\",\"insensitive\"),s.spaces.insensitive.before=u,u=\"\"),c&&((0,Y.ensureObject)(s,\"raws\",\"spaces\",\"insensitive\"),s.raws.spaces.insensitive.before=c,c=\"\")):(s.value||s.value===\"\")&&(f=\"value\",s.value+=m,s.raws.value&&(s.raws.value+=m))}d=!1;break;case T.str:if(!s.attribute||!s.operator)return this.error(\"Expected an attribute followed by an operator preceding the string.\",{index:p[A.FIELDS.START_POS]});var R=(0,dp.unescapeValue)(m),J=R.unescaped,fe=R.quoteMark;s.value=J,s.quoteMark=fe,f=\"value\",(0,Y.ensureObject)(s,\"raws\"),s.raws.value=m,d=!1;break;case T.equals:if(!s.attribute)return this.expected(\"attribute\",p[A.FIELDS.START_POS],m);if(s.value)return this.error('Unexpected \"=\" found; an operator was already defined.',{index:p[A.FIELDS.START_POS]});s.operator=s.operator?s.operator+m:m,f=\"operator\",d=!1;break;case T.comment:if(f)if(d||b&&b[A.FIELDS.TYPE]===T.space||f===\"insensitive\"){var he=(0,Y.getProp)(s,\"spaces\",f,\"after\")||\"\",Ie=(0,Y.getProp)(s,\"raws\",\"spaces\",f,\"after\")||he;(0,Y.ensureObject)(s,\"raws\",\"spaces\",f),s.raws.spaces[f].after=Ie+m}else{var te=s[f]||\"\",le=(0,Y.getProp)(s,\"raws\",f)||te;(0,Y.ensureObject)(s,\"raws\"),s.raws[f]=le+m}else c=c+m;break;default:return this.error('Unexpected \"'+m+'\" found.',{index:p[A.FIELDS.START_POS]})}o++}Rt(s,\"attribute\"),Rt(s,\"namespace\"),this.newNode(new dp.default(s)),this.position++},e.parseWhitespaceEquivalentTokens=function(r){r<0&&(r=this.tokens.length);var n=this.position,a=[],s=\"\",o=void 0;do if(Sa[this.currToken[A.FIELDS.TYPE]])this.options.lossy||(s+=this.content());else if(this.currToken[A.FIELDS.TYPE]===T.comment){var u={};s&&(u.before=s,s=\"\"),o=new pp.default({value:this.content(),source:qt(this.currToken),sourceIndex:this.currToken[A.FIELDS.START_POS],spaces:u}),a.push(o)}while(++this.position<r);if(s){if(o)o.spaces.after=s;else if(!this.options.lossy){var c=this.tokens[n],f=this.tokens[this.position-1];a.push(new va.default({value:\"\",source:xt(c[A.FIELDS.START_LINE],c[A.FIELDS.START_COL],f[A.FIELDS.END_LINE],f[A.FIELDS.END_COL]),sourceIndex:c[A.FIELDS.START_POS],spaces:{before:s,after:\"\"}}))}}return a},e.convertWhitespaceNodesToSpace=function(r,n){var a=this;n===void 0&&(n=!1);var s=\"\",o=\"\";r.forEach(function(c){var f=a.lossySpace(c.spaces.before,n),d=a.lossySpace(c.rawSpaceBefore,n);s+=f+a.lossySpace(c.spaces.after,n&&f.length===0),o+=f+c.value+a.lossySpace(c.rawSpaceAfter,n&&d.length===0)}),o===s&&(o=void 0);var u={space:s,rawSpace:o};return u},e.isNamedCombinator=function(r){return r===void 0&&(r=this.position),this.tokens[r+0]&&this.tokens[r+0][A.FIELDS.TYPE]===T.slash&&this.tokens[r+1]&&this.tokens[r+1][A.FIELDS.TYPE]===T.word&&this.tokens[r+2]&&this.tokens[r+2][A.FIELDS.TYPE]===T.slash},e.namedCombinator=function(){if(this.isNamedCombinator()){var r=this.content(this.tokens[this.position+1]),n=(0,Y.unesc)(r).toLowerCase(),a={};n!==r&&(a.value=\"/\"+r+\"/\");var s=new xa.default({value:\"/\"+n+\"/\",source:xt(this.currToken[A.FIELDS.START_LINE],this.currToken[A.FIELDS.START_COL],this.tokens[this.position+2][A.FIELDS.END_LINE],this.tokens[this.position+2][A.FIELDS.END_COL]),sourceIndex:this.currToken[A.FIELDS.START_POS],raws:a});return this.position=this.position+3,s}else this.unexpected()},e.combinator=function(){var r=this;if(this.content()===\"|\")return this.namespace();var n=this.locateNextMeaningfulToken(this.position);if(n<0||this.tokens[n][A.FIELDS.TYPE]===T.comma){var a=this.parseWhitespaceEquivalentTokens(n);if(a.length>0){var s=this.current.last;if(s){var o=this.convertWhitespaceNodesToSpace(a),u=o.space,c=o.rawSpace;c!==void 0&&(s.rawSpaceAfter+=c),s.spaces.after+=u}else a.forEach(function(E){return r.newNode(E)})}return}var f=this.currToken,d=void 0;n>this.position&&(d=this.parseWhitespaceEquivalentTokens(n));var p;if(this.isNamedCombinator()?p=this.namedCombinator():this.currToken[A.FIELDS.TYPE]===T.combinator?(p=new xa.default({value:this.content(),source:qt(this.currToken),sourceIndex:this.currToken[A.FIELDS.START_POS]}),this.position++):Sa[this.currToken[A.FIELDS.TYPE]]||d||this.unexpected(),p){if(d){var m=this.convertWhitespaceNodesToSpace(d),b=m.space,x=m.rawSpace;p.spaces.before=b,p.rawSpaceBefore=x}}else{var y=this.convertWhitespaceNodesToSpace(d,!0),w=y.space,k=y.rawSpace;k||(k=w);var S={},_={spaces:{}};w.endsWith(\" \")&&k.endsWith(\" \")?(S.before=w.slice(0,w.length-1),_.spaces.before=k.slice(0,k.length-1)):w.startsWith(\" \")&&k.startsWith(\" \")?(S.after=w.slice(1),_.spaces.after=k.slice(1)):_.value=k,p=new xa.default({value:\" \",source:Ca(f,this.tokens[this.position-1]),sourceIndex:f[A.FIELDS.START_POS],spaces:S,raws:_})}return this.currToken&&this.currToken[A.FIELDS.TYPE]===T.space&&(p.spaces.after=this.optionalSpace(this.content()),this.position++),this.newNode(p)},e.comma=function(){if(this.position===this.tokens.length-1){this.root.trailingComma=!0,this.position++;return}this.current._inferEndPosition();var r=new ba.default({source:{start:gp(this.tokens[this.position+1])}});this.current.parent.append(r),this.current=r,this.position++},e.comment=function(){var r=this.currToken;this.newNode(new pp.default({value:this.content(),source:qt(r),sourceIndex:r[A.FIELDS.START_POS]})),this.position++},e.error=function(r,n){throw this.root.error(r,n)},e.missingBackslash=function(){return this.error(\"Expected a backslash preceding the semicolon.\",{index:this.currToken[A.FIELDS.START_POS]})},e.missingParenthesis=function(){return this.expected(\"opening parenthesis\",this.currToken[A.FIELDS.START_POS])},e.missingSquareBracket=function(){return this.expected(\"opening square bracket\",this.currToken[A.FIELDS.START_POS])},e.unexpected=function(){return this.error(\"Unexpected '\"+this.content()+\"'. Escaping special characters with \\\\ may help.\",this.currToken[A.FIELDS.START_POS])},e.unexpectedPipe=function(){return this.error(\"Unexpected '|'.\",this.currToken[A.FIELDS.START_POS])},e.namespace=function(){var r=this.prevToken&&this.content(this.prevToken)||!0;if(this.nextToken[A.FIELDS.TYPE]===T.word)return this.position++,this.word(r);if(this.nextToken[A.FIELDS.TYPE]===T.asterisk)return this.position++,this.universal(r);this.unexpectedPipe()},e.nesting=function(){if(this.nextToken){var r=this.content(this.nextToken);if(r===\"|\"){this.position++;return}}var n=this.currToken;this.newNode(new kk.default({value:this.content(),source:qt(n),sourceIndex:n[A.FIELDS.START_POS]})),this.position++},e.parentheses=function(){var r=this.current.last,n=1;if(this.position++,r&&r.type===Ck.PSEUDO){var a=new ba.default({source:{start:gp(this.tokens[this.position-1])}}),s=this.current;for(r.append(a),this.current=a;this.position<this.tokens.length&&n;)this.currToken[A.FIELDS.TYPE]===T.openParenthesis&&n++,this.currToken[A.FIELDS.TYPE]===T.closeParenthesis&&n--,n?this.parse():(this.current.source.end=yp(this.currToken),this.current.parent.source.end=yp(this.currToken),this.position++);this.current=s}else{for(var o=this.currToken,u=\"(\",c;this.position<this.tokens.length&&n;)this.currToken[A.FIELDS.TYPE]===T.openParenthesis&&n++,this.currToken[A.FIELDS.TYPE]===T.closeParenthesis&&n--,c=this.currToken,u+=this.parseParenthesisToken(this.currToken),this.position++;r?r.appendToPropertyAndEscape(\"value\",u,u):this.newNode(new va.default({value:u,source:xt(o[A.FIELDS.START_LINE],o[A.FIELDS.START_COL],c[A.FIELDS.END_LINE],c[A.FIELDS.END_COL]),sourceIndex:o[A.FIELDS.START_POS]}))}if(n)return this.expected(\"closing parenthesis\",this.currToken[A.FIELDS.START_POS])},e.pseudo=function(){for(var r=this,n=\"\",a=this.currToken;this.currToken&&this.currToken[A.FIELDS.TYPE]===T.colon;)n+=this.content(),this.position++;if(!this.currToken)return this.expected([\"pseudo-class\",\"pseudo-element\"],this.position-1);if(this.currToken[A.FIELDS.TYPE]===T.word)this.splitWord(!1,function(s,o){n+=s,r.newNode(new vk.default({value:n,source:Ca(a,r.currToken),sourceIndex:a[A.FIELDS.START_POS]})),o>1&&r.nextToken&&r.nextToken[A.FIELDS.TYPE]===T.openParenthesis&&r.error(\"Misplaced parenthesis.\",{index:r.nextToken[A.FIELDS.START_POS]})});else return this.expected([\"pseudo-class\",\"pseudo-element\"],this.currToken[A.FIELDS.START_POS])},e.space=function(){var r=this.content();this.position===0||this.prevToken[A.FIELDS.TYPE]===T.comma||this.prevToken[A.FIELDS.TYPE]===T.openParenthesis||this.current.nodes.every(function(n){return n.type===\"comment\"})?(this.spaces=this.optionalSpace(r),this.position++):this.position===this.tokens.length-1||this.nextToken[A.FIELDS.TYPE]===T.comma||this.nextToken[A.FIELDS.TYPE]===T.closeParenthesis?(this.current.last.spaces.after=this.optionalSpace(r),this.position++):this.combinator()},e.string=function(){var r=this.currToken;this.newNode(new va.default({value:this.content(),source:qt(r),sourceIndex:r[A.FIELDS.START_POS]})),this.position++},e.universal=function(r){var n=this.nextToken;if(n&&this.content(n)===\"|\")return this.position++,this.namespace();var a=this.currToken;this.newNode(new xk.default({value:this.content(),source:qt(a),sourceIndex:a[A.FIELDS.START_POS]}),r),this.position++},e.splitWord=function(r,n){for(var a=this,s=this.nextToken,o=this.content();s&&~[T.dollar,T.caret,T.equals,T.word].indexOf(s[A.FIELDS.TYPE]);){this.position++;var u=this.content();if(o+=u,u.lastIndexOf(\"\\\\\")===u.length-1){var c=this.nextToken;c&&c[A.FIELDS.TYPE]===T.space&&(o+=this.requiredSpace(this.content(c)),this.position++)}s=this.nextToken}var f=Aa(o,\".\").filter(function(b){var x=o[b-1]===\"\\\\\",y=/^\\d+\\.\\d+%$/.test(o);return!x&&!y}),d=Aa(o,\"#\").filter(function(b){return o[b-1]!==\"\\\\\"}),p=Aa(o,\"#{\");p.length&&(d=d.filter(function(b){return!~p.indexOf(b)}));var m=(0,Sk.default)(Ok([0].concat(f,d)));m.forEach(function(b,x){var y=m[x+1]||o.length,w=o.slice(b,y);if(x===0&&n)return n.call(a,w,m.length);var k,S=a.currToken,_=S[A.FIELDS.START_POS]+m[x],E=xt(S[1],S[2]+b,S[3],S[2]+(y-1));if(~f.indexOf(b)){var I={value:w.slice(1),source:E,sourceIndex:_};k=new yk.default(Rt(I,\"value\"))}else if(~d.indexOf(b)){var q={value:w.slice(1),source:E,sourceIndex:_};k=new wk.default(Rt(q,\"value\"))}else{var R={value:w,source:E,sourceIndex:_};Rt(R,\"value\"),k=new bk.default(R)}a.newNode(k,r),r=null}),this.position++},e.word=function(r){var n=this.nextToken;return n&&this.content(n)===\"|\"?(this.position++,this.namespace()):this.splitWord(r)},e.loop=function(){for(;this.position<this.tokens.length;)this.parse(!0);return this.current._inferEndPosition(),this.root},e.parse=function(r){switch(this.currToken[A.FIELDS.TYPE]){case T.space:this.space();break;case T.comment:this.comment();break;case T.openParenthesis:this.parentheses();break;case T.closeParenthesis:r&&this.missingParenthesis();break;case T.openSquare:this.attribute();break;case T.dollar:case T.caret:case T.equals:case T.word:this.word();break;case T.colon:this.pseudo();break;case T.comma:this.comma();break;case T.asterisk:this.universal();break;case T.ampersand:this.nesting();break;case T.slash:case T.combinator:this.combinator();break;case T.str:this.string();break;case T.closeSquare:this.missingSquareBracket();case T.semicolon:this.missingBackslash();default:this.unexpected()}},e.expected=function(r,n,a){if(Array.isArray(r)){var s=r.pop();r=r.join(\", \")+\" or \"+s}var o=/^[aeiou]/.test(r[0])?\"an\":\"a\";return a?this.error(\"Expected \"+o+\" \"+r+', found \"'+a+'\" instead.',{index:n}):this.error(\"Expected \"+o+\" \"+r+\".\",{index:n})},e.requiredSpace=function(r){return this.options.lossy?\" \":r},e.optionalSpace=function(r){return this.options.lossy?\"\":r},e.lossySpace=function(r,n){return this.options.lossy?n?\" \":\"\":r},e.parseParenthesisToken=function(r){var n=this.content(r);return r[A.FIELDS.TYPE]===T.space?this.requiredSpace(n):n},e.newNode=function(r,n){return n&&(/^ +$/.test(n)&&(this.options.lossy||(this.spaces=(this.spaces||\"\")+n),n=!0),r.namespace=n,Rt(r,\"namespace\")),this.spaces&&(r.spaces.before=this.spaces,this.spaces=\"\"),this.current.append(r)},e.content=function(r){return r===void 0&&(r=this.currToken),this.css.slice(r[A.FIELDS.START_POS],r[A.FIELDS.END_POS])},e.locateNextMeaningfulToken=function(r){r===void 0&&(r=this.position+1);for(var n=r;n<this.tokens.length;)if(_k[this.tokens[n][A.FIELDS.TYPE]]){n++;continue}else return n;return-1},Ak(i,[{key:\"currToken\",get:function(){return this.tokens[this.position]}},{key:\"nextToken\",get:function(){return this.tokens[this.position+1]}},{key:\"prevToken\",get:function(){return this.tokens[this.position-1]}}]),i}();Wr.default=Ek;wp.exports=Wr.default});var xp=v((Gr,vp)=>{l();\"use strict\";Gr.__esModule=!0;Gr.default=void 0;var Tk=Pk(bp());function Pk(i){return i&&i.__esModule?i:{default:i}}var Dk=function(){function i(t,r){this.func=t||function(){},this.funcRes=null,this.options=r}var e=i.prototype;return e._shouldUpdateSelector=function(r,n){n===void 0&&(n={});var a=Object.assign({},this.options,n);return a.updateSelector===!1?!1:typeof r!=\"string\"},e._isLossy=function(r){r===void 0&&(r={});var n=Object.assign({},this.options,r);return n.lossless===!1},e._root=function(r,n){n===void 0&&(n={});var a=new Tk.default(r,this._parseOptions(n));return a.root},e._parseOptions=function(r){return{lossy:this._isLossy(r)}},e._run=function(r,n){var a=this;return n===void 0&&(n={}),new Promise(function(s,o){try{var u=a._root(r,n);Promise.resolve(a.func(u)).then(function(c){var f=void 0;return a._shouldUpdateSelector(r,n)&&(f=u.toString(),r.selector=f),{transform:c,root:u,string:f}}).then(s,o)}catch(c){o(c);return}})},e._runSync=function(r,n){n===void 0&&(n={});var a=this._root(r,n),s=this.func(a);if(s&&typeof s.then==\"function\")throw new Error(\"Selector processor returned a promise to a synchronous call.\");var o=void 0;return n.updateSelector&&typeof r!=\"string\"&&(o=a.toString(),r.selector=o),{transform:s,root:a,string:o}},e.ast=function(r,n){return this._run(r,n).then(function(a){return a.root})},e.astSync=function(r,n){return this._runSync(r,n).root},e.transform=function(r,n){return this._run(r,n).then(function(a){return a.transform})},e.transformSync=function(r,n){return this._runSync(r,n).transform},e.process=function(r,n){return this._run(r,n).then(function(a){return a.string||a.root.toString()})},e.processSync=function(r,n){var a=this._runSync(r,n);return a.string||a.root.toString()},i}();Gr.default=Dk;vp.exports=Gr.default});var kp=v(G=>{l();\"use strict\";G.__esModule=!0;G.universal=G.tag=G.string=G.selector=G.root=G.pseudo=G.nesting=G.id=G.comment=G.combinator=G.className=G.attribute=void 0;var Ik=xe(fa()),qk=xe(Hs()),Rk=xe(ha()),Mk=xe(Qs()),Bk=xe(Xs()),Fk=xe(ga()),Nk=xe(na()),Lk=xe(zs()),$k=xe(Us()),jk=xe(ra()),zk=xe(ea()),Vk=xe(pa());function xe(i){return i&&i.__esModule?i:{default:i}}var Uk=function(e){return new Ik.default(e)};G.attribute=Uk;var Wk=function(e){return new qk.default(e)};G.className=Wk;var Gk=function(e){return new Rk.default(e)};G.combinator=Gk;var Hk=function(e){return new Mk.default(e)};G.comment=Hk;var Yk=function(e){return new Bk.default(e)};G.id=Yk;var Qk=function(e){return new Fk.default(e)};G.nesting=Qk;var Jk=function(e){return new Nk.default(e)};G.pseudo=Jk;var Xk=function(e){return new Lk.default(e)};G.root=Xk;var Kk=function(e){return new $k.default(e)};G.selector=Kk;var Zk=function(e){return new jk.default(e)};G.string=Zk;var eS=function(e){return new zk.default(e)};G.tag=eS;var tS=function(e){return new Vk.default(e)};G.universal=tS});var _p=v($=>{l();\"use strict\";$.__esModule=!0;$.isComment=$.isCombinator=$.isClassName=$.isAttribute=void 0;$.isContainer=dS;$.isIdentifier=void 0;$.isNamespace=hS;$.isNesting=void 0;$.isNode=_a;$.isPseudo=void 0;$.isPseudoClass=pS;$.isPseudoElement=Ap;$.isUniversal=$.isTag=$.isString=$.isSelector=$.isRoot=void 0;var Q=ae(),ce,rS=(ce={},ce[Q.ATTRIBUTE]=!0,ce[Q.CLASS]=!0,ce[Q.COMBINATOR]=!0,ce[Q.COMMENT]=!0,ce[Q.ID]=!0,ce[Q.NESTING]=!0,ce[Q.PSEUDO]=!0,ce[Q.ROOT]=!0,ce[Q.SELECTOR]=!0,ce[Q.STRING]=!0,ce[Q.TAG]=!0,ce[Q.UNIVERSAL]=!0,ce);function _a(i){return typeof i==\"object\"&&rS[i.type]}function ke(i,e){return _a(e)&&e.type===i}var Sp=ke.bind(null,Q.ATTRIBUTE);$.isAttribute=Sp;var iS=ke.bind(null,Q.CLASS);$.isClassName=iS;var nS=ke.bind(null,Q.COMBINATOR);$.isCombinator=nS;var sS=ke.bind(null,Q.COMMENT);$.isComment=sS;var aS=ke.bind(null,Q.ID);$.isIdentifier=aS;var oS=ke.bind(null,Q.NESTING);$.isNesting=oS;var Oa=ke.bind(null,Q.PSEUDO);$.isPseudo=Oa;var lS=ke.bind(null,Q.ROOT);$.isRoot=lS;var uS=ke.bind(null,Q.SELECTOR);$.isSelector=uS;var fS=ke.bind(null,Q.STRING);$.isString=fS;var Cp=ke.bind(null,Q.TAG);$.isTag=Cp;var cS=ke.bind(null,Q.UNIVERSAL);$.isUniversal=cS;function Ap(i){return Oa(i)&&i.value&&(i.value.startsWith(\"::\")||i.value.toLowerCase()===\":before\"||i.value.toLowerCase()===\":after\"||i.value.toLowerCase()===\":first-letter\"||i.value.toLowerCase()===\":first-line\")}function pS(i){return Oa(i)&&!Ap(i)}function dS(i){return!!(_a(i)&&i.walk)}function hS(i){return Sp(i)||Cp(i)}});var Op=v(Te=>{l();\"use strict\";Te.__esModule=!0;var Ea=ae();Object.keys(Ea).forEach(function(i){i===\"default\"||i===\"__esModule\"||i in Te&&Te[i]===Ea[i]||(Te[i]=Ea[i])});var Ta=kp();Object.keys(Ta).forEach(function(i){i===\"default\"||i===\"__esModule\"||i in Te&&Te[i]===Ta[i]||(Te[i]=Ta[i])});var Pa=_p();Object.keys(Pa).forEach(function(i){i===\"default\"||i===\"__esModule\"||i in Te&&Te[i]===Pa[i]||(Te[i]=Pa[i])})});var Be=v((Hr,Tp)=>{l();\"use strict\";Hr.__esModule=!0;Hr.default=void 0;var mS=wS(xp()),gS=yS(Op());function Ep(i){if(typeof WeakMap!=\"function\")return null;var e=new WeakMap,t=new WeakMap;return(Ep=function(n){return n?t:e})(i)}function yS(i,e){if(!e&&i&&i.__esModule)return i;if(i===null||typeof i!=\"object\"&&typeof i!=\"function\")return{default:i};var t=Ep(e);if(t&&t.has(i))return t.get(i);var r={},n=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var a in i)if(a!==\"default\"&&Object.prototype.hasOwnProperty.call(i,a)){var s=n?Object.getOwnPropertyDescriptor(i,a):null;s&&(s.get||s.set)?Object.defineProperty(r,a,s):r[a]=i[a]}return r.default=i,t&&t.set(i,r),r}function wS(i){return i&&i.__esModule?i:{default:i}}var Da=function(e){return new mS.default(e)};Object.assign(Da,gS);delete Da.__esModule;var bS=Da;Hr.default=bS;Tp.exports=Hr.default});function Ge(i){return[\"fontSize\",\"outline\"].includes(i)?e=>(typeof e==\"function\"&&(e=e({})),Array.isArray(e)&&(e=e[0]),e):i===\"fontFamily\"?e=>{typeof e==\"function\"&&(e=e({}));let t=Array.isArray(e)&&se(e[1])?e[0]:e;return Array.isArray(t)?t.join(\", \"):t}:[\"boxShadow\",\"transitionProperty\",\"transitionDuration\",\"transitionDelay\",\"transitionTimingFunction\",\"backgroundImage\",\"backgroundSize\",\"backgroundColor\",\"cursor\",\"animation\"].includes(i)?e=>(typeof e==\"function\"&&(e=e({})),Array.isArray(e)&&(e=e.join(\", \")),e):[\"gridTemplateColumns\",\"gridTemplateRows\",\"objectPosition\"].includes(i)?e=>(typeof e==\"function\"&&(e=e({})),typeof e==\"string\"&&(e=z.list.comma(e).join(\" \")),e):(e,t={})=>(typeof e==\"function\"&&(e=e(t)),e)}var Yr=C(()=>{l();nt();Ct()});var Bp=v((a3,Ba)=>{l();var{Rule:Pp,AtRule:vS}=ye(),Dp=Be();function Ia(i,e){let t;try{Dp(r=>{t=r}).processSync(i)}catch(r){throw i.includes(\":\")?e?e.error(\"Missed semicolon\"):r:e?e.error(r.message):r}return t.at(0)}function Ip(i,e){let t=!1;return i.each(r=>{if(r.type===\"nesting\"){let n=e.clone({});r.value!==\"&\"?r.replaceWith(Ia(r.value.replace(\"&\",n.toString()))):r.replaceWith(n),t=!0}else\"nodes\"in r&&r.nodes&&Ip(r,e)&&(t=!0)}),t}function qp(i,e){let t=[];return i.selectors.forEach(r=>{let n=Ia(r,i);e.selectors.forEach(a=>{if(!a)return;let s=Ia(a,e);Ip(s,n)||(s.prepend(Dp.combinator({value:\" \"})),s.prepend(n.clone({}))),t.push(s.toString())})}),t}function on(i,e){let t=i.prev();for(e.after(i);t&&t.type===\"comment\";){let r=t.prev();e.after(t),t=r}return i}function xS(i){return function e(t,r,n,a=n){let s=[];if(r.each(o=>{o.type===\"rule\"&&n?a&&(o.selectors=qp(t,o)):o.type===\"atrule\"&&o.nodes?i[o.name]?e(t,o,a):r[Ra]!==!1&&s.push(o):s.push(o)}),n&&s.length){let o=t.clone({nodes:[]});for(let u of s)o.append(u);r.prepend(o)}}}function qa(i,e,t){let r=new Pp({selector:i,nodes:[]});return r.append(e),t.after(r),r}function Rp(i,e){let t={};for(let r of i)t[r]=!0;if(e)for(let r of e)t[r.replace(/^@/,\"\")]=!0;return t}function kS(i){i=i.trim();let e=i.match(/^\\((.*)\\)$/);if(!e)return{type:\"basic\",selector:i};let t=e[1].match(/^(with(?:out)?):(.+)$/);if(t){let r=t[1]===\"with\",n=Object.fromEntries(t[2].trim().split(/\\s+/).map(s=>[s,!0]));if(r&&n.all)return{type:\"noop\"};let a=s=>!!n[s];return n.all?a=()=>!0:r&&(a=s=>s===\"all\"?!1:!n[s]),{type:\"withrules\",escapes:a}}return{type:\"unknown\"}}function SS(i){let e=[],t=i.parent;for(;t&&t instanceof vS;)e.push(t),t=t.parent;return e}function CS(i){let e=i[Mp];if(!e)i.after(i.nodes);else{let t=i.nodes,r,n=-1,a,s,o,u=SS(i);if(u.forEach((c,f)=>{if(e(c.name))r=c,n=f,s=o;else{let d=o;o=c.clone({nodes:[]}),d&&o.append(d),a=a||o}}),r?s?(a.append(t),r.after(s)):r.after(t):i.after(t),i.next()&&r){let c;u.slice(0,n+1).forEach((f,d,p)=>{let m=c;c=f.clone({nodes:[]}),m&&c.append(m);let b=[],y=(p[d-1]||i).next();for(;y;)b.push(y),y=y.next();c.append(b)}),c&&(s||t[t.length-1]).after(c)}}i.remove()}var Ra=Symbol(\"rootRuleMergeSel\"),Mp=Symbol(\"rootRuleEscapes\");function AS(i){let{params:e}=i,{type:t,selector:r,escapes:n}=kS(e);if(t===\"unknown\")throw i.error(`Unknown @${i.name} parameter ${JSON.stringify(e)}`);if(t===\"basic\"&&r){let a=new Pp({selector:r,nodes:i.nodes});i.removeAll(),i.append(a)}i[Mp]=n,i[Ra]=n?!n(\"all\"):t===\"noop\"}var Ma=Symbol(\"hasRootRule\");Ba.exports=(i={})=>{let e=Rp([\"media\",\"supports\",\"layer\",\"container\"],i.bubble),t=xS(e),r=Rp([\"document\",\"font-face\",\"keyframes\",\"-webkit-keyframes\",\"-moz-keyframes\"],i.unwrap),n=(i.rootRuleName||\"at-root\").replace(/^@/,\"\"),a=i.preserveEmpty;return{postcssPlugin:\"postcss-nested\",Once(s){s.walkAtRules(n,o=>{AS(o),s[Ma]=!0})},Rule(s){let o=!1,u=s,c=!1,f=[];s.each(d=>{d.type===\"rule\"?(f.length&&(u=qa(s.selector,f,u),f=[]),c=!0,o=!0,d.selectors=qp(s,d),u=on(d,u)):d.type===\"atrule\"?(f.length&&(u=qa(s.selector,f,u),f=[]),d.name===n?(o=!0,t(s,d,!0,d[Ra]),u=on(d,u)):e[d.name]?(c=!0,o=!0,t(s,d,!0),u=on(d,u)):r[d.name]?(c=!0,o=!0,t(s,d,!1),u=on(d,u)):c&&f.push(d)):d.type===\"decl\"&&c&&f.push(d)}),f.length&&(u=qa(s.selector,f,u)),o&&a!==!0&&(s.raws.semicolon=!0,s.nodes.length===0&&s.remove())},RootExit(s){s[Ma]&&(s.walkAtRules(n,CS),s[Ma]=!1)}}};Ba.exports.postcss=!0});var $p=v((o3,Lp)=>{l();\"use strict\";var Fp=/-(\\w|$)/g,Np=(i,e)=>e.toUpperCase(),_S=i=>(i=i.toLowerCase(),i===\"float\"?\"cssFloat\":i.startsWith(\"-ms-\")?i.substr(1).replace(Fp,Np):i.replace(Fp,Np));Lp.exports=_S});var La=v((l3,jp)=>{l();var OS=$p(),ES={boxFlex:!0,boxFlexGroup:!0,columnCount:!0,flex:!0,flexGrow:!0,flexPositive:!0,flexShrink:!0,flexNegative:!0,fontWeight:!0,lineClamp:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,tabSize:!0,widows:!0,zIndex:!0,zoom:!0,fillOpacity:!0,strokeDashoffset:!0,strokeOpacity:!0,strokeWidth:!0};function Fa(i){return typeof i.nodes==\"undefined\"?!0:Na(i)}function Na(i){let e,t={};return i.each(r=>{if(r.type===\"atrule\")e=\"@\"+r.name,r.params&&(e+=\" \"+r.params),typeof t[e]==\"undefined\"?t[e]=Fa(r):Array.isArray(t[e])?t[e].push(Fa(r)):t[e]=[t[e],Fa(r)];else if(r.type===\"rule\"){let n=Na(r);if(t[r.selector])for(let a in n)t[r.selector][a]=n[a];else t[r.selector]=n}else if(r.type===\"decl\"){r.prop[0]===\"-\"&&r.prop[1]===\"-\"||r.parent&&r.parent.selector===\":export\"?e=r.prop:e=OS(r.prop);let n=r.value;!isNaN(r.value)&&ES[e]&&(n=parseFloat(r.value)),r.important&&(n+=\" !important\"),typeof t[e]==\"undefined\"?t[e]=n:Array.isArray(t[e])?t[e].push(n):t[e]=[t[e],n]}}),t}jp.exports=Na});var ln=v((u3,Wp)=>{l();var Qr=ye(),zp=/\\s*!important\\s*$/i,TS={\"box-flex\":!0,\"box-flex-group\":!0,\"column-count\":!0,flex:!0,\"flex-grow\":!0,\"flex-positive\":!0,\"flex-shrink\":!0,\"flex-negative\":!0,\"font-weight\":!0,\"line-clamp\":!0,\"line-height\":!0,opacity:!0,order:!0,orphans:!0,\"tab-size\":!0,widows:!0,\"z-index\":!0,zoom:!0,\"fill-opacity\":!0,\"stroke-dashoffset\":!0,\"stroke-opacity\":!0,\"stroke-width\":!0};function PS(i){return i.replace(/([A-Z])/g,\"-$1\").replace(/^ms-/,\"-ms-\").toLowerCase()}function Vp(i,e,t){t===!1||t===null||(e.startsWith(\"--\")||(e=PS(e)),typeof t==\"number\"&&(t===0||TS[e]?t=t.toString():t+=\"px\"),e===\"css-float\"&&(e=\"float\"),zp.test(t)?(t=t.replace(zp,\"\"),i.push(Qr.decl({prop:e,value:t,important:!0}))):i.push(Qr.decl({prop:e,value:t})))}function Up(i,e,t){let r=Qr.atRule({name:e[1],params:e[3]||\"\"});typeof t==\"object\"&&(r.nodes=[],$a(t,r)),i.push(r)}function $a(i,e){let t,r,n;for(t in i)if(r=i[t],!(r===null||typeof r==\"undefined\"))if(t[0]===\"@\"){let a=t.match(/@(\\S+)(\\s+([\\W\\w]*)\\s*)?/);if(Array.isArray(r))for(let s of r)Up(e,a,s);else Up(e,a,r)}else if(Array.isArray(r))for(let a of r)Vp(e,t,a);else typeof r==\"object\"?(n=Qr.rule({selector:t}),$a(r,n),e.push(n)):Vp(e,t,r)}Wp.exports=function(i){let e=Qr.root();return $a(i,e),e}});var ja=v((f3,Gp)=>{l();var DS=La();Gp.exports=function(e){return console&&console.warn&&e.warnings().forEach(t=>{let r=t.plugin||\"PostCSS\";console.warn(r+\": \"+t.text)}),DS(e.root)}});var Yp=v((c3,Hp)=>{l();var IS=ye(),qS=ja(),RS=ln();Hp.exports=function(e){let t=IS(e);return async r=>{let n=await t.process(r,{parser:RS,from:void 0});return qS(n)}}});var Jp=v((p3,Qp)=>{l();var MS=ye(),BS=ja(),FS=ln();Qp.exports=function(i){let e=MS(i);return t=>{let r=e.process(t,{parser:FS,from:void 0});return BS(r)}}});var Kp=v((d3,Xp)=>{l();var NS=La(),LS=ln(),$S=Yp(),jS=Jp();Xp.exports={objectify:NS,parse:LS,async:$S,sync:jS}});var Mt,Zp,h3,m3,g3,y3,ed=C(()=>{l();Mt=X(Kp()),Zp=Mt.default,h3=Mt.default.objectify,m3=Mt.default.parse,g3=Mt.default.async,y3=Mt.default.sync});function Bt(i){return Array.isArray(i)?i.flatMap(e=>z([(0,td.default)({bubble:[\"screen\"]})]).process(e,{parser:Zp}).root.nodes):Bt([i])}var td,za=C(()=>{l();nt();td=X(Bp());ed()});function Ft(i,e,t=!1){if(i===\"\")return e;let r=typeof e==\"string\"?(0,rd.default)().astSync(e):e;return r.walkClasses(n=>{let a=n.value,s=t&&a.startsWith(\"-\");n.value=s?`-${i}${a.slice(1)}`:`${i}${a}`}),typeof e==\"string\"?r.toString():r}var rd,un=C(()=>{l();rd=X(Be())});function pe(i){let e=id.default.className();return e.value=i,gt(e?.raws?.value??e.value)}var id,Nt=C(()=>{l();id=X(Be());mi()});function Va(i){return gt(`.${pe(i)}`)}function fn(i,e){return Va(Jr(i,e))}function Jr(i,e){return e===\"DEFAULT\"?i:e===\"-\"||e===\"-DEFAULT\"?`-${i}`:e.startsWith(\"-\")?`-${i}${e}`:e.startsWith(\"/\")?`${i}${e}`:`${i}-${e}`}var Ua=C(()=>{l();Nt();mi()});function P(i,e=[[i,[i]]],{filterDefault:t=!1,...r}={}){let n=Ge(i);return function({matchUtilities:a,theme:s}){for(let o of e){let u=Array.isArray(o[0])?o:[o];a(u.reduce((c,[f,d])=>Object.assign(c,{[f]:p=>d.reduce((m,b)=>Array.isArray(b)?Object.assign(m,{[b[0]]:b[1]}):Object.assign(m,{[b]:n(p)}),{})}),{}),{...r,values:t?Object.fromEntries(Object.entries(s(i)??{}).filter(([c])=>c!==\"DEFAULT\")):s(i)})}}}var nd=C(()=>{l();Yr()});function st(i){return i=Array.isArray(i)?i:[i],i.map(e=>{let t=e.values.map(r=>r.raw!==void 0?r.raw:[r.min&&`(min-width: ${r.min})`,r.max&&`(max-width: ${r.max})`].filter(Boolean).join(\" and \"));return e.not?`not all and ${t}`:t}).join(\", \")}var cn=C(()=>{l()});function Wa(i){return i.split(YS).map(t=>{let r=t.trim(),n={value:r},a=r.split(QS),s=new Set;for(let o of a)!s.has(\"DIRECTIONS\")&&zS.has(o)?(n.direction=o,s.add(\"DIRECTIONS\")):!s.has(\"PLAY_STATES\")&&VS.has(o)?(n.playState=o,s.add(\"PLAY_STATES\")):!s.has(\"FILL_MODES\")&&US.has(o)?(n.fillMode=o,s.add(\"FILL_MODES\")):!s.has(\"ITERATION_COUNTS\")&&(WS.has(o)||JS.test(o))?(n.iterationCount=o,s.add(\"ITERATION_COUNTS\")):!s.has(\"TIMING_FUNCTION\")&&GS.has(o)||!s.has(\"TIMING_FUNCTION\")&&HS.some(u=>o.startsWith(`${u}(`))?(n.timingFunction=o,s.add(\"TIMING_FUNCTION\")):!s.has(\"DURATION\")&&sd.test(o)?(n.duration=o,s.add(\"DURATION\")):!s.has(\"DELAY\")&&sd.test(o)?(n.delay=o,s.add(\"DELAY\")):s.has(\"NAME\")?(n.unknown||(n.unknown=[]),n.unknown.push(o)):(n.name=o,s.add(\"NAME\"));return n})}var zS,VS,US,WS,GS,HS,YS,QS,sd,JS,ad=C(()=>{l();zS=new Set([\"normal\",\"reverse\",\"alternate\",\"alternate-reverse\"]),VS=new Set([\"running\",\"paused\"]),US=new Set([\"none\",\"forwards\",\"backwards\",\"both\"]),WS=new Set([\"infinite\"]),GS=new Set([\"linear\",\"ease\",\"ease-in\",\"ease-out\",\"ease-in-out\",\"step-start\",\"step-end\"]),HS=[\"cubic-bezier\",\"steps\"],YS=/\\,(?![^(]*\\))/g,QS=/\\ +(?![^(]*\\))/g,sd=/^(-?[\\d.]+m?s)$/,JS=/^(\\d+)$/});var od,ne,ld=C(()=>{l();od=i=>Object.assign({},...Object.entries(i??{}).flatMap(([e,t])=>typeof t==\"object\"?Object.entries(od(t)).map(([r,n])=>({[e+(r===\"DEFAULT\"?\"\":`-${r}`)]:n})):[{[`${e}`]:t}])),ne=od});var fd,ud=C(()=>{fd=\"3.4.5\"});function at(i,e=!0){return Array.isArray(i)?i.map(t=>{if(e&&Array.isArray(t))throw new Error(\"The tuple syntax is not supported for `screens`.\");if(typeof t==\"string\")return{name:t.toString(),not:!1,values:[{min:t,max:void 0}]};let[r,n]=t;return r=r.toString(),typeof n==\"string\"?{name:r,not:!1,values:[{min:n,max:void 0}]}:Array.isArray(n)?{name:r,not:!1,values:n.map(a=>pd(a))}:{name:r,not:!1,values:[pd(n)]}}):at(Object.entries(i??{}),!1)}function pn(i){return i.values.length!==1?{result:!1,reason:\"multiple-values\"}:i.values[0].raw!==void 0?{result:!1,reason:\"raw-values\"}:i.values[0].min!==void 0&&i.values[0].max!==void 0?{result:!1,reason:\"min-and-max\"}:{result:!0,reason:null}}function cd(i,e,t){let r=dn(e,i),n=dn(t,i),a=pn(r),s=pn(n);if(a.reason===\"multiple-values\"||s.reason===\"multiple-values\")throw new Error(\"Attempted to sort a screen with multiple values. This should never happen. Please open a bug report.\");if(a.reason===\"raw-values\"||s.reason===\"raw-values\")throw new Error(\"Attempted to sort a screen with raw values. This should never happen. Please open a bug report.\");if(a.reason===\"min-and-max\"||s.reason===\"min-and-max\")throw new Error(\"Attempted to sort a screen with both min and max values. This should never happen. Please open a bug report.\");let{min:o,max:u}=r.values[0],{min:c,max:f}=n.values[0];e.not&&([o,u]=[u,o]),t.not&&([c,f]=[f,c]),o=o===void 0?o:parseFloat(o),u=u===void 0?u:parseFloat(u),c=c===void 0?c:parseFloat(c),f=f===void 0?f:parseFloat(f);let[d,p]=i===\"min\"?[o,c]:[f,u];return d-p}function dn(i,e){return typeof i==\"object\"?i:{name:\"arbitrary-screen\",values:[{[e]:i}]}}function pd({\"min-width\":i,min:e=i,max:t,raw:r}={}){return{min:e,max:t,raw:r}}var hn=C(()=>{l()});function mn(i,e){i.walkDecls(t=>{if(e.includes(t.prop)){t.remove();return}for(let r of e)t.value.includes(`/ var(${r})`)&&(t.value=t.value.replace(`/ var(${r})`,\"\"))})}var dd=C(()=>{l()});var H,Pe,Fe,K,hd,md=C(()=>{l();je();wt();nt();nd();cn();Nt();ad();ld();lr();cs();Ct();Yr();ud();Ee();hn();ns();dd();ze();cr();Xr();H={childVariant:({addVariant:i})=>{i(\"*\",\"& > *\")},pseudoElementVariants:({addVariant:i})=>{i(\"first-letter\",\"&::first-letter\"),i(\"first-line\",\"&::first-line\"),i(\"marker\",[({container:e})=>(mn(e,[\"--tw-text-opacity\"]),\"& *::marker\"),({container:e})=>(mn(e,[\"--tw-text-opacity\"]),\"&::marker\")]),i(\"selection\",[\"& *::selection\",\"&::selection\"]),i(\"file\",\"&::file-selector-button\"),i(\"placeholder\",\"&::placeholder\"),i(\"backdrop\",\"&::backdrop\"),i(\"before\",({container:e})=>(e.walkRules(t=>{let r=!1;t.walkDecls(\"content\",()=>{r=!0}),r||t.prepend(z.decl({prop:\"content\",value:\"var(--tw-content)\"}))}),\"&::before\")),i(\"after\",({container:e})=>(e.walkRules(t=>{let r=!1;t.walkDecls(\"content\",()=>{r=!0}),r||t.prepend(z.decl({prop:\"content\",value:\"var(--tw-content)\"}))}),\"&::after\"))},pseudoClassVariants:({addVariant:i,matchVariant:e,config:t,prefix:r})=>{let n=[[\"first\",\"&:first-child\"],[\"last\",\"&:last-child\"],[\"only\",\"&:only-child\"],[\"odd\",\"&:nth-child(odd)\"],[\"even\",\"&:nth-child(even)\"],\"first-of-type\",\"last-of-type\",\"only-of-type\",[\"visited\",({container:s})=>(mn(s,[\"--tw-text-opacity\",\"--tw-border-opacity\",\"--tw-bg-opacity\"]),\"&:visited\")],\"target\",[\"open\",\"&[open]\"],\"default\",\"checked\",\"indeterminate\",\"placeholder-shown\",\"autofill\",\"optional\",\"required\",\"valid\",\"invalid\",\"in-range\",\"out-of-range\",\"read-only\",\"empty\",\"focus-within\",[\"hover\",Z(t(),\"hoverOnlyWhenSupported\")?\"@media (hover: hover) and (pointer: fine) { &:hover }\":\"&:hover\"],\"focus\",\"focus-visible\",\"active\",\"enabled\",\"disabled\"].map(s=>Array.isArray(s)?s:[s,`&:${s}`]);for(let[s,o]of n)i(s,u=>typeof o==\"function\"?o(u):o);let a={group:(s,{modifier:o})=>o?[`:merge(${r(\".group\")}\\\\/${pe(o)})`,\" &\"]:[`:merge(${r(\".group\")})`,\" &\"],peer:(s,{modifier:o})=>o?[`:merge(${r(\".peer\")}\\\\/${pe(o)})`,\" ~ &\"]:[`:merge(${r(\".peer\")})`,\" ~ &\"]};for(let[s,o]of Object.entries(a))e(s,(u=\"\",c)=>{let f=N(typeof u==\"function\"?u(c):u);f.includes(\"&\")||(f=\"&\"+f);let[d,p]=o(\"\",c),m=null,b=null,x=0;for(let y=0;y<f.length;++y){let w=f[y];w===\"&\"?m=y:w===\"'\"||w==='\"'?x+=1:m!==null&&w===\" \"&&!x&&(b=y)}return m!==null&&b===null&&(b=f.length),f.slice(0,m)+d+f.slice(m+1,b)+p+f.slice(b)},{values:Object.fromEntries(n),[ot]:{respectPrefix:!1}})},directionVariants:({addVariant:i})=>{i(\"ltr\",'&:where([dir=\"ltr\"], [dir=\"ltr\"] *)'),i(\"rtl\",'&:where([dir=\"rtl\"], [dir=\"rtl\"] *)')},reducedMotionVariants:({addVariant:i})=>{i(\"motion-safe\",\"@media (prefers-reduced-motion: no-preference)\"),i(\"motion-reduce\",\"@media (prefers-reduced-motion: reduce)\")},darkVariants:({config:i,addVariant:e})=>{let[t,r=\".dark\"]=[].concat(i(\"darkMode\",\"media\"));if(t===!1&&(t=\"media\",F.warn(\"darkmode-false\",[\"The `darkMode` option in your Tailwind CSS configuration is set to `false`, which now behaves the same as `media`.\",\"Change `darkMode` to `media` or remove it entirely.\",\"https://tailwindcss.com/docs/upgrade-guide#remove-dark-mode-configuration\"])),t===\"variant\"){let n;if(Array.isArray(r)||typeof r==\"function\"?n=r:typeof r==\"string\"&&(n=[r]),Array.isArray(n))for(let a of n)a===\".dark\"?(t=!1,F.warn(\"darkmode-variant-without-selector\",[\"When using `variant` for `darkMode`, you must provide a selector.\",'Example: `darkMode: [\"variant\", \".your-selector &\"]`'])):a.includes(\"&\")||(t=!1,F.warn(\"darkmode-variant-without-ampersand\",[\"When using `variant` for `darkMode`, your selector must contain `&`.\",'Example `darkMode: [\"variant\", \".your-selector &\"]`']));r=n}t===\"selector\"?e(\"dark\",`&:where(${r}, ${r} *)`):t===\"media\"?e(\"dark\",\"@media (prefers-color-scheme: dark)\"):t===\"variant\"?e(\"dark\",r):t===\"class\"&&e(\"dark\",`&:is(${r} *)`)},printVariant:({addVariant:i})=>{i(\"print\",\"@media print\")},screenVariants:({theme:i,addVariant:e,matchVariant:t})=>{let r=i(\"screens\")??{},n=Object.values(r).every(w=>typeof w==\"string\"),a=at(i(\"screens\")),s=new Set([]);function o(w){return w.match(/(\\D+)$/)?.[1]??\"(none)\"}function u(w){w!==void 0&&s.add(o(w))}function c(w){return u(w),s.size===1}for(let w of a)for(let k of w.values)u(k.min),u(k.max);let f=s.size<=1;function d(w){return Object.fromEntries(a.filter(k=>pn(k).result).map(k=>{let{min:S,max:_}=k.values[0];if(w===\"min\"&&S!==void 0)return k;if(w===\"min\"&&_!==void 0)return{...k,not:!k.not};if(w===\"max\"&&_!==void 0)return k;if(w===\"max\"&&S!==void 0)return{...k,not:!k.not}}).map(k=>[k.name,k]))}function p(w){return(k,S)=>cd(w,k.value,S.value)}let m=p(\"max\"),b=p(\"min\");function x(w){return k=>{if(n)if(f){if(typeof k==\"string\"&&!c(k))return F.warn(\"minmax-have-mixed-units\",[\"The `min-*` and `max-*` variants are not supported with a `screens` configuration containing mixed units.\"]),[]}else return F.warn(\"mixed-screen-units\",[\"The `min-*` and `max-*` variants are not supported with a `screens` configuration containing mixed units.\"]),[];else return F.warn(\"complex-screen-config\",[\"The `min-*` and `max-*` variants are not supported with a `screens` configuration containing objects.\"]),[];return[`@media ${st(dn(k,w))}`]}}t(\"max\",x(\"max\"),{sort:m,values:n?d(\"max\"):{}});let y=\"min-screens\";for(let w of a)e(w.name,`@media ${st(w)}`,{id:y,sort:n&&f?b:void 0,value:w});t(\"min\",x(\"min\"),{id:y,sort:b})},supportsVariants:({matchVariant:i,theme:e})=>{i(\"supports\",(t=\"\")=>{let r=N(t),n=/^\\w*\\s*\\(/.test(r);return r=n?r.replace(/\\b(and|or|not)\\b/g,\" $1 \"):r,n?`@supports ${r}`:(r.includes(\":\")||(r=`${r}: var(--tw)`),r.startsWith(\"(\")&&r.endsWith(\")\")||(r=`(${r})`),`@supports ${r}`)},{values:e(\"supports\")??{}})},hasVariants:({matchVariant:i,prefix:e})=>{i(\"has\",t=>`&:has(${N(t)})`,{values:{},[ot]:{respectPrefix:!1}}),i(\"group-has\",(t,{modifier:r})=>r?`:merge(${e(\".group\")}\\\\/${r}):has(${N(t)}) &`:`:merge(${e(\".group\")}):has(${N(t)}) &`,{values:{},[ot]:{respectPrefix:!1}}),i(\"peer-has\",(t,{modifier:r})=>r?`:merge(${e(\".peer\")}\\\\/${r}):has(${N(t)}) ~ &`:`:merge(${e(\".peer\")}):has(${N(t)}) ~ &`,{values:{},[ot]:{respectPrefix:!1}})},ariaVariants:({matchVariant:i,theme:e})=>{i(\"aria\",t=>`&[aria-${N(t)}]`,{values:e(\"aria\")??{}}),i(\"group-aria\",(t,{modifier:r})=>r?`:merge(.group\\\\/${r})[aria-${N(t)}] &`:`:merge(.group)[aria-${N(t)}] &`,{values:e(\"aria\")??{}}),i(\"peer-aria\",(t,{modifier:r})=>r?`:merge(.peer\\\\/${r})[aria-${N(t)}] ~ &`:`:merge(.peer)[aria-${N(t)}] ~ &`,{values:e(\"aria\")??{}})},dataVariants:({matchVariant:i,theme:e})=>{i(\"data\",t=>`&[data-${N(t)}]`,{values:e(\"data\")??{}}),i(\"group-data\",(t,{modifier:r})=>r?`:merge(.group\\\\/${r})[data-${N(t)}] &`:`:merge(.group)[data-${N(t)}] &`,{values:e(\"data\")??{}}),i(\"peer-data\",(t,{modifier:r})=>r?`:merge(.peer\\\\/${r})[data-${N(t)}] ~ &`:`:merge(.peer)[data-${N(t)}] ~ &`,{values:e(\"data\")??{}})},orientationVariants:({addVariant:i})=>{i(\"portrait\",\"@media (orientation: portrait)\"),i(\"landscape\",\"@media (orientation: landscape)\")},prefersContrastVariants:({addVariant:i})=>{i(\"contrast-more\",\"@media (prefers-contrast: more)\"),i(\"contrast-less\",\"@media (prefers-contrast: less)\")},forcedColorsVariants:({addVariant:i})=>{i(\"forced-colors\",\"@media (forced-colors: active)\")}},Pe=[\"translate(var(--tw-translate-x), var(--tw-translate-y))\",\"rotate(var(--tw-rotate))\",\"skewX(var(--tw-skew-x))\",\"skewY(var(--tw-skew-y))\",\"scaleX(var(--tw-scale-x))\",\"scaleY(var(--tw-scale-y))\"].join(\" \"),Fe=[\"var(--tw-blur)\",\"var(--tw-brightness)\",\"var(--tw-contrast)\",\"var(--tw-grayscale)\",\"var(--tw-hue-rotate)\",\"var(--tw-invert)\",\"var(--tw-saturate)\",\"var(--tw-sepia)\",\"var(--tw-drop-shadow)\"].join(\" \"),K=[\"var(--tw-backdrop-blur)\",\"var(--tw-backdrop-brightness)\",\"var(--tw-backdrop-contrast)\",\"var(--tw-backdrop-grayscale)\",\"var(--tw-backdrop-hue-rotate)\",\"var(--tw-backdrop-invert)\",\"var(--tw-backdrop-opacity)\",\"var(--tw-backdrop-saturate)\",\"var(--tw-backdrop-sepia)\"].join(\" \"),hd={preflight:({addBase:i})=>{let e=z.parse(`*,::after,::before{box-sizing:border-box;border-width:0;border-style:solid;border-color:theme('borderColor.DEFAULT', currentColor)}::after,::before{--tw-content:''}:host,html{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;tab-size:4;font-family:theme('fontFamily.sans', ui-sans-serif, system-ui, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\");font-feature-settings:theme('fontFamily.sans[1].fontFeatureSettings', normal);font-variation-settings:theme('fontFamily.sans[1].fontVariationSettings', normal);-webkit-tap-highlight-color:transparent}body{margin:0;line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,pre,samp{font-family:theme('fontFamily.mono', ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace);font-feature-settings:theme('fontFamily.mono[1].fontFeatureSettings', normal);font-variation-settings:theme('fontFamily.mono[1].fontVariationSettings', normal);font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-feature-settings:inherit;font-variation-settings:inherit;font-size:100%;font-weight:inherit;line-height:inherit;letter-spacing:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,input:where([type=button]),input:where([type=reset]),input:where([type=submit]){-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dd,dl,figure,h1,h2,h3,h4,h5,h6,hr,p,pre{margin:0}fieldset{margin:0;padding:0}legend{padding:0}menu,ol,ul{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::placeholder,textarea::placeholder{opacity:1;color:theme('colors.gray.4', #9ca3af)}[role=button],button{cursor:pointer}:disabled{cursor:default}audio,canvas,embed,iframe,img,object,svg,video{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]{display:none}`);i([z.comment({text:`! tailwindcss v${fd} | MIT License | https://tailwindcss.com`}),...e.nodes])},container:(()=>{function i(t=[]){return t.flatMap(r=>r.values.map(n=>n.min)).filter(r=>r!==void 0)}function e(t,r,n){if(typeof n==\"undefined\")return[];if(!(typeof n==\"object\"&&n!==null))return[{screen:\"DEFAULT\",minWidth:0,padding:n}];let a=[];n.DEFAULT&&a.push({screen:\"DEFAULT\",minWidth:0,padding:n.DEFAULT});for(let s of t)for(let o of r)for(let{min:u}of o.values)u===s&&a.push({minWidth:s,padding:n[o.name]});return a}return function({addComponents:t,theme:r}){let n=at(r(\"container.screens\",r(\"screens\"))),a=i(n),s=e(a,n,r(\"container.padding\")),o=c=>{let f=s.find(d=>d.minWidth===c);return f?{paddingRight:f.padding,paddingLeft:f.padding}:{}},u=Array.from(new Set(a.slice().sort((c,f)=>parseInt(c)-parseInt(f)))).map(c=>({[`@media (min-width: ${c})`]:{\".container\":{\"max-width\":c,...o(c)}}}));t([{\".container\":Object.assign({width:\"100%\"},r(\"container.center\",!1)?{marginRight:\"auto\",marginLeft:\"auto\"}:{},o(0))},...u])}})(),accessibility:({addUtilities:i})=>{i({\".sr-only\":{position:\"absolute\",width:\"1px\",height:\"1px\",padding:\"0\",margin:\"-1px\",overflow:\"hidden\",clip:\"rect(0, 0, 0, 0)\",whiteSpace:\"nowrap\",borderWidth:\"0\"},\".not-sr-only\":{position:\"static\",width:\"auto\",height:\"auto\",padding:\"0\",margin:\"0\",overflow:\"visible\",clip:\"auto\",whiteSpace:\"normal\"}})},pointerEvents:({addUtilities:i})=>{i({\".pointer-events-none\":{\"pointer-events\":\"none\"},\".pointer-events-auto\":{\"pointer-events\":\"auto\"}})},visibility:({addUtilities:i})=>{i({\".visible\":{visibility:\"visible\"},\".invisible\":{visibility:\"hidden\"},\".collapse\":{visibility:\"collapse\"}})},position:({addUtilities:i})=>{i({\".static\":{position:\"static\"},\".fixed\":{position:\"fixed\"},\".absolute\":{position:\"absolute\"},\".relative\":{position:\"relative\"},\".sticky\":{position:\"sticky\"}})},inset:P(\"inset\",[[\"inset\",[\"inset\"]],[[\"inset-x\",[\"left\",\"right\"]],[\"inset-y\",[\"top\",\"bottom\"]]],[[\"start\",[\"inset-inline-start\"]],[\"end\",[\"inset-inline-end\"]],[\"top\",[\"top\"]],[\"right\",[\"right\"]],[\"bottom\",[\"bottom\"]],[\"left\",[\"left\"]]]],{supportsNegativeValues:!0}),isolation:({addUtilities:i})=>{i({\".isolate\":{isolation:\"isolate\"},\".isolation-auto\":{isolation:\"auto\"}})},zIndex:P(\"zIndex\",[[\"z\",[\"zIndex\"]]],{supportsNegativeValues:!0}),order:P(\"order\",void 0,{supportsNegativeValues:!0}),gridColumn:P(\"gridColumn\",[[\"col\",[\"gridColumn\"]]]),gridColumnStart:P(\"gridColumnStart\",[[\"col-start\",[\"gridColumnStart\"]]],{supportsNegativeValues:!0}),gridColumnEnd:P(\"gridColumnEnd\",[[\"col-end\",[\"gridColumnEnd\"]]],{supportsNegativeValues:!0}),gridRow:P(\"gridRow\",[[\"row\",[\"gridRow\"]]]),gridRowStart:P(\"gridRowStart\",[[\"row-start\",[\"gridRowStart\"]]],{supportsNegativeValues:!0}),gridRowEnd:P(\"gridRowEnd\",[[\"row-end\",[\"gridRowEnd\"]]],{supportsNegativeValues:!0}),float:({addUtilities:i})=>{i({\".float-start\":{float:\"inline-start\"},\".float-end\":{float:\"inline-end\"},\".float-right\":{float:\"right\"},\".float-left\":{float:\"left\"},\".float-none\":{float:\"none\"}})},clear:({addUtilities:i})=>{i({\".clear-start\":{clear:\"inline-start\"},\".clear-end\":{clear:\"inline-end\"},\".clear-left\":{clear:\"left\"},\".clear-right\":{clear:\"right\"},\".clear-both\":{clear:\"both\"},\".clear-none\":{clear:\"none\"}})},margin:P(\"margin\",[[\"m\",[\"margin\"]],[[\"mx\",[\"margin-left\",\"margin-right\"]],[\"my\",[\"margin-top\",\"margin-bottom\"]]],[[\"ms\",[\"margin-inline-start\"]],[\"me\",[\"margin-inline-end\"]],[\"mt\",[\"margin-top\"]],[\"mr\",[\"margin-right\"]],[\"mb\",[\"margin-bottom\"]],[\"ml\",[\"margin-left\"]]]],{supportsNegativeValues:!0}),boxSizing:({addUtilities:i})=>{i({\".box-border\":{\"box-sizing\":\"border-box\"},\".box-content\":{\"box-sizing\":\"content-box\"}})},lineClamp:({matchUtilities:i,addUtilities:e,theme:t})=>{i({\"line-clamp\":r=>({overflow:\"hidden\",display:\"-webkit-box\",\"-webkit-box-orient\":\"vertical\",\"-webkit-line-clamp\":`${r}`})},{values:t(\"lineClamp\")}),e({\".line-clamp-none\":{overflow:\"visible\",display:\"block\",\"-webkit-box-orient\":\"horizontal\",\"-webkit-line-clamp\":\"none\"}})},display:({addUtilities:i})=>{i({\".block\":{display:\"block\"},\".inline-block\":{display:\"inline-block\"},\".inline\":{display:\"inline\"},\".flex\":{display:\"flex\"},\".inline-flex\":{display:\"inline-flex\"},\".table\":{display:\"table\"},\".inline-table\":{display:\"inline-table\"},\".table-caption\":{display:\"table-caption\"},\".table-cell\":{display:\"table-cell\"},\".table-column\":{display:\"table-column\"},\".table-column-group\":{display:\"table-column-group\"},\".table-footer-group\":{display:\"table-footer-group\"},\".table-header-group\":{display:\"table-header-group\"},\".table-row-group\":{display:\"table-row-group\"},\".table-row\":{display:\"table-row\"},\".flow-root\":{display:\"flow-root\"},\".grid\":{display:\"grid\"},\".inline-grid\":{display:\"inline-grid\"},\".contents\":{display:\"contents\"},\".list-item\":{display:\"list-item\"},\".hidden\":{display:\"none\"}})},aspectRatio:P(\"aspectRatio\",[[\"aspect\",[\"aspect-ratio\"]]]),size:P(\"size\",[[\"size\",[\"width\",\"height\"]]]),height:P(\"height\",[[\"h\",[\"height\"]]]),maxHeight:P(\"maxHeight\",[[\"max-h\",[\"maxHeight\"]]]),minHeight:P(\"minHeight\",[[\"min-h\",[\"minHeight\"]]]),width:P(\"width\",[[\"w\",[\"width\"]]]),minWidth:P(\"minWidth\",[[\"min-w\",[\"minWidth\"]]]),maxWidth:P(\"maxWidth\",[[\"max-w\",[\"maxWidth\"]]]),flex:P(\"flex\"),flexShrink:P(\"flexShrink\",[[\"flex-shrink\",[\"flex-shrink\"]],[\"shrink\",[\"flex-shrink\"]]]),flexGrow:P(\"flexGrow\",[[\"flex-grow\",[\"flex-grow\"]],[\"grow\",[\"flex-grow\"]]]),flexBasis:P(\"flexBasis\",[[\"basis\",[\"flex-basis\"]]]),tableLayout:({addUtilities:i})=>{i({\".table-auto\":{\"table-layout\":\"auto\"},\".table-fixed\":{\"table-layout\":\"fixed\"}})},captionSide:({addUtilities:i})=>{i({\".caption-top\":{\"caption-side\":\"top\"},\".caption-bottom\":{\"caption-side\":\"bottom\"}})},borderCollapse:({addUtilities:i})=>{i({\".border-collapse\":{\"border-collapse\":\"collapse\"},\".border-separate\":{\"border-collapse\":\"separate\"}})},borderSpacing:({addDefaults:i,matchUtilities:e,theme:t})=>{i(\"border-spacing\",{\"--tw-border-spacing-x\":0,\"--tw-border-spacing-y\":0}),e({\"border-spacing\":r=>({\"--tw-border-spacing-x\":r,\"--tw-border-spacing-y\":r,\"@defaults border-spacing\":{},\"border-spacing\":\"var(--tw-border-spacing-x) var(--tw-border-spacing-y)\"}),\"border-spacing-x\":r=>({\"--tw-border-spacing-x\":r,\"@defaults border-spacing\":{},\"border-spacing\":\"var(--tw-border-spacing-x) var(--tw-border-spacing-y)\"}),\"border-spacing-y\":r=>({\"--tw-border-spacing-y\":r,\"@defaults border-spacing\":{},\"border-spacing\":\"var(--tw-border-spacing-x) var(--tw-border-spacing-y)\"})},{values:t(\"borderSpacing\")})},transformOrigin:P(\"transformOrigin\",[[\"origin\",[\"transformOrigin\"]]]),translate:P(\"translate\",[[[\"translate-x\",[[\"@defaults transform\",{}],\"--tw-translate-x\",[\"transform\",Pe]]],[\"translate-y\",[[\"@defaults transform\",{}],\"--tw-translate-y\",[\"transform\",Pe]]]]],{supportsNegativeValues:!0}),rotate:P(\"rotate\",[[\"rotate\",[[\"@defaults transform\",{}],\"--tw-rotate\",[\"transform\",Pe]]]],{supportsNegativeValues:!0}),skew:P(\"skew\",[[[\"skew-x\",[[\"@defaults transform\",{}],\"--tw-skew-x\",[\"transform\",Pe]]],[\"skew-y\",[[\"@defaults transform\",{}],\"--tw-skew-y\",[\"transform\",Pe]]]]],{supportsNegativeValues:!0}),scale:P(\"scale\",[[\"scale\",[[\"@defaults transform\",{}],\"--tw-scale-x\",\"--tw-scale-y\",[\"transform\",Pe]]],[[\"scale-x\",[[\"@defaults transform\",{}],\"--tw-scale-x\",[\"transform\",Pe]]],[\"scale-y\",[[\"@defaults transform\",{}],\"--tw-scale-y\",[\"transform\",Pe]]]]],{supportsNegativeValues:!0}),transform:({addDefaults:i,addUtilities:e})=>{i(\"transform\",{\"--tw-translate-x\":\"0\",\"--tw-translate-y\":\"0\",\"--tw-rotate\":\"0\",\"--tw-skew-x\":\"0\",\"--tw-skew-y\":\"0\",\"--tw-scale-x\":\"1\",\"--tw-scale-y\":\"1\"}),e({\".transform\":{\"@defaults transform\":{},transform:Pe},\".transform-cpu\":{transform:Pe},\".transform-gpu\":{transform:Pe.replace(\"translate(var(--tw-translate-x), var(--tw-translate-y))\",\"translate3d(var(--tw-translate-x), var(--tw-translate-y), 0)\")},\".transform-none\":{transform:\"none\"}})},animation:({matchUtilities:i,theme:e,config:t})=>{let r=a=>pe(t(\"prefix\")+a),n=Object.fromEntries(Object.entries(e(\"keyframes\")??{}).map(([a,s])=>[a,{[`@keyframes ${r(a)}`]:s}]));i({animate:a=>{let s=Wa(a);return[...s.flatMap(o=>n[o.name]),{animation:s.map(({name:o,value:u})=>o===void 0||n[o]===void 0?u:u.replace(o,r(o))).join(\", \")}]}},{values:e(\"animation\")})},cursor:P(\"cursor\"),touchAction:({addDefaults:i,addUtilities:e})=>{i(\"touch-action\",{\"--tw-pan-x\":\" \",\"--tw-pan-y\":\" \",\"--tw-pinch-zoom\":\" \"});let t=\"var(--tw-pan-x) var(--tw-pan-y) var(--tw-pinch-zoom)\";e({\".touch-auto\":{\"touch-action\":\"auto\"},\".touch-none\":{\"touch-action\":\"none\"},\".touch-pan-x\":{\"@defaults touch-action\":{},\"--tw-pan-x\":\"pan-x\",\"touch-action\":t},\".touch-pan-left\":{\"@defaults touch-action\":{},\"--tw-pan-x\":\"pan-left\",\"touch-action\":t},\".touch-pan-right\":{\"@defaults touch-action\":{},\"--tw-pan-x\":\"pan-right\",\"touch-action\":t},\".touch-pan-y\":{\"@defaults touch-action\":{},\"--tw-pan-y\":\"pan-y\",\"touch-action\":t},\".touch-pan-up\":{\"@defaults touch-action\":{},\"--tw-pan-y\":\"pan-up\",\"touch-action\":t},\".touch-pan-down\":{\"@defaults touch-action\":{},\"--tw-pan-y\":\"pan-down\",\"touch-action\":t},\".touch-pinch-zoom\":{\"@defaults touch-action\":{},\"--tw-pinch-zoom\":\"pinch-zoom\",\"touch-action\":t},\".touch-manipulation\":{\"touch-action\":\"manipulation\"}})},userSelect:({addUtilities:i})=>{i({\".select-none\":{\"user-select\":\"none\"},\".select-text\":{\"user-select\":\"text\"},\".select-all\":{\"user-select\":\"all\"},\".select-auto\":{\"user-select\":\"auto\"}})},resize:({addUtilities:i})=>{i({\".resize-none\":{resize:\"none\"},\".resize-y\":{resize:\"vertical\"},\".resize-x\":{resize:\"horizontal\"},\".resize\":{resize:\"both\"}})},scrollSnapType:({addDefaults:i,addUtilities:e})=>{i(\"scroll-snap-type\",{\"--tw-scroll-snap-strictness\":\"proximity\"}),e({\".snap-none\":{\"scroll-snap-type\":\"none\"},\".snap-x\":{\"@defaults scroll-snap-type\":{},\"scroll-snap-type\":\"x var(--tw-scroll-snap-strictness)\"},\".snap-y\":{\"@defaults scroll-snap-type\":{},\"scroll-snap-type\":\"y var(--tw-scroll-snap-strictness)\"},\".snap-both\":{\"@defaults scroll-snap-type\":{},\"scroll-snap-type\":\"both var(--tw-scroll-snap-strictness)\"},\".snap-mandatory\":{\"--tw-scroll-snap-strictness\":\"mandatory\"},\".snap-proximity\":{\"--tw-scroll-snap-strictness\":\"proximity\"}})},scrollSnapAlign:({addUtilities:i})=>{i({\".snap-start\":{\"scroll-snap-align\":\"start\"},\".snap-end\":{\"scroll-snap-align\":\"end\"},\".snap-center\":{\"scroll-snap-align\":\"center\"},\".snap-align-none\":{\"scroll-snap-align\":\"none\"}})},scrollSnapStop:({addUtilities:i})=>{i({\".snap-normal\":{\"scroll-snap-stop\":\"normal\"},\".snap-always\":{\"scroll-snap-stop\":\"always\"}})},scrollMargin:P(\"scrollMargin\",[[\"scroll-m\",[\"scroll-margin\"]],[[\"scroll-mx\",[\"scroll-margin-left\",\"scroll-margin-right\"]],[\"scroll-my\",[\"scroll-margin-top\",\"scroll-margin-bottom\"]]],[[\"scroll-ms\",[\"scroll-margin-inline-start\"]],[\"scroll-me\",[\"scroll-margin-inline-end\"]],[\"scroll-mt\",[\"scroll-margin-top\"]],[\"scroll-mr\",[\"scroll-margin-right\"]],[\"scroll-mb\",[\"scroll-margin-bottom\"]],[\"scroll-ml\",[\"scroll-margin-left\"]]]],{supportsNegativeValues:!0}),scrollPadding:P(\"scrollPadding\",[[\"scroll-p\",[\"scroll-padding\"]],[[\"scroll-px\",[\"scroll-padding-left\",\"scroll-padding-right\"]],[\"scroll-py\",[\"scroll-padding-top\",\"scroll-padding-bottom\"]]],[[\"scroll-ps\",[\"scroll-padding-inline-start\"]],[\"scroll-pe\",[\"scroll-padding-inline-end\"]],[\"scroll-pt\",[\"scroll-padding-top\"]],[\"scroll-pr\",[\"scroll-padding-right\"]],[\"scroll-pb\",[\"scroll-padding-bottom\"]],[\"scroll-pl\",[\"scroll-padding-left\"]]]]),listStylePosition:({addUtilities:i})=>{i({\".list-inside\":{\"list-style-position\":\"inside\"},\".list-outside\":{\"list-style-position\":\"outside\"}})},listStyleType:P(\"listStyleType\",[[\"list\",[\"listStyleType\"]]]),listStyleImage:P(\"listStyleImage\",[[\"list-image\",[\"listStyleImage\"]]]),appearance:({addUtilities:i})=>{i({\".appearance-none\":{appearance:\"none\"},\".appearance-auto\":{appearance:\"auto\"}})},columns:P(\"columns\",[[\"columns\",[\"columns\"]]]),breakBefore:({addUtilities:i})=>{i({\".break-before-auto\":{\"break-before\":\"auto\"},\".break-before-avoid\":{\"break-before\":\"avoid\"},\".break-before-all\":{\"break-before\":\"all\"},\".break-before-avoid-page\":{\"break-before\":\"avoid-page\"},\".break-before-page\":{\"break-before\":\"page\"},\".break-before-left\":{\"break-before\":\"left\"},\".break-before-right\":{\"break-before\":\"right\"},\".break-before-column\":{\"break-before\":\"column\"}})},breakInside:({addUtilities:i})=>{i({\".break-inside-auto\":{\"break-inside\":\"auto\"},\".break-inside-avoid\":{\"break-inside\":\"avoid\"},\".break-inside-avoid-page\":{\"break-inside\":\"avoid-page\"},\".break-inside-avoid-column\":{\"break-inside\":\"avoid-column\"}})},breakAfter:({addUtilities:i})=>{i({\".break-after-auto\":{\"break-after\":\"auto\"},\".break-after-avoid\":{\"break-after\":\"avoid\"},\".break-after-all\":{\"break-after\":\"all\"},\".break-after-avoid-page\":{\"break-after\":\"avoid-page\"},\".break-after-page\":{\"break-after\":\"page\"},\".break-after-left\":{\"break-after\":\"left\"},\".break-after-right\":{\"break-after\":\"right\"},\".break-after-column\":{\"break-after\":\"column\"}})},gridAutoColumns:P(\"gridAutoColumns\",[[\"auto-cols\",[\"gridAutoColumns\"]]]),gridAutoFlow:({addUtilities:i})=>{i({\".grid-flow-row\":{gridAutoFlow:\"row\"},\".grid-flow-col\":{gridAutoFlow:\"column\"},\".grid-flow-dense\":{gridAutoFlow:\"dense\"},\".grid-flow-row-dense\":{gridAutoFlow:\"row dense\"},\".grid-flow-col-dense\":{gridAutoFlow:\"column dense\"}})},gridAutoRows:P(\"gridAutoRows\",[[\"auto-rows\",[\"gridAutoRows\"]]]),gridTemplateColumns:P(\"gridTemplateColumns\",[[\"grid-cols\",[\"gridTemplateColumns\"]]]),gridTemplateRows:P(\"gridTemplateRows\",[[\"grid-rows\",[\"gridTemplateRows\"]]]),flexDirection:({addUtilities:i})=>{i({\".flex-row\":{\"flex-direction\":\"row\"},\".flex-row-reverse\":{\"flex-direction\":\"row-reverse\"},\".flex-col\":{\"flex-direction\":\"column\"},\".flex-col-reverse\":{\"flex-direction\":\"column-reverse\"}})},flexWrap:({addUtilities:i})=>{i({\".flex-wrap\":{\"flex-wrap\":\"wrap\"},\".flex-wrap-reverse\":{\"flex-wrap\":\"wrap-reverse\"},\".flex-nowrap\":{\"flex-wrap\":\"nowrap\"}})},placeContent:({addUtilities:i})=>{i({\".place-content-center\":{\"place-content\":\"center\"},\".place-content-start\":{\"place-content\":\"start\"},\".place-content-end\":{\"place-content\":\"end\"},\".place-content-between\":{\"place-content\":\"space-between\"},\".place-content-around\":{\"place-content\":\"space-around\"},\".place-content-evenly\":{\"place-content\":\"space-evenly\"},\".place-content-baseline\":{\"place-content\":\"baseline\"},\".place-content-stretch\":{\"place-content\":\"stretch\"}})},placeItems:({addUtilities:i})=>{i({\".place-items-start\":{\"place-items\":\"start\"},\".place-items-end\":{\"place-items\":\"end\"},\".place-items-center\":{\"place-items\":\"center\"},\".place-items-baseline\":{\"place-items\":\"baseline\"},\".place-items-stretch\":{\"place-items\":\"stretch\"}})},alignContent:({addUtilities:i})=>{i({\".content-normal\":{\"align-content\":\"normal\"},\".content-center\":{\"align-content\":\"center\"},\".content-start\":{\"align-content\":\"flex-start\"},\".content-end\":{\"align-content\":\"flex-end\"},\".content-between\":{\"align-content\":\"space-between\"},\".content-around\":{\"align-content\":\"space-around\"},\".content-evenly\":{\"align-content\":\"space-evenly\"},\".content-baseline\":{\"align-content\":\"baseline\"},\".content-stretch\":{\"align-content\":\"stretch\"}})},alignItems:({addUtilities:i})=>{i({\".items-start\":{\"align-items\":\"flex-start\"},\".items-end\":{\"align-items\":\"flex-end\"},\".items-center\":{\"align-items\":\"center\"},\".items-baseline\":{\"align-items\":\"baseline\"},\".items-stretch\":{\"align-items\":\"stretch\"}})},justifyContent:({addUtilities:i})=>{i({\".justify-normal\":{\"justify-content\":\"normal\"},\".justify-start\":{\"justify-content\":\"flex-start\"},\".justify-end\":{\"justify-content\":\"flex-end\"},\".justify-center\":{\"justify-content\":\"center\"},\".justify-between\":{\"justify-content\":\"space-between\"},\".justify-around\":{\"justify-content\":\"space-around\"},\".justify-evenly\":{\"justify-content\":\"space-evenly\"},\".justify-stretch\":{\"justify-content\":\"stretch\"}})},justifyItems:({addUtilities:i})=>{i({\".justify-items-start\":{\"justify-items\":\"start\"},\".justify-items-end\":{\"justify-items\":\"end\"},\".justify-items-center\":{\"justify-items\":\"center\"},\".justify-items-stretch\":{\"justify-items\":\"stretch\"}})},gap:P(\"gap\",[[\"gap\",[\"gap\"]],[[\"gap-x\",[\"columnGap\"]],[\"gap-y\",[\"rowGap\"]]]]),space:({matchUtilities:i,addUtilities:e,theme:t})=>{i({\"space-x\":r=>(r=r===\"0\"?\"0px\":r,{\"& > :not([hidden]) ~ :not([hidden])\":{\"--tw-space-x-reverse\":\"0\",\"margin-right\":`calc(${r} * var(--tw-space-x-reverse))`,\"margin-left\":`calc(${r} * calc(1 - var(--tw-space-x-reverse)))`}}),\"space-y\":r=>(r=r===\"0\"?\"0px\":r,{\"& > :not([hidden]) ~ :not([hidden])\":{\"--tw-space-y-reverse\":\"0\",\"margin-top\":`calc(${r} * calc(1 - var(--tw-space-y-reverse)))`,\"margin-bottom\":`calc(${r} * var(--tw-space-y-reverse))`}})},{values:t(\"space\"),supportsNegativeValues:!0}),e({\".space-y-reverse > :not([hidden]) ~ :not([hidden])\":{\"--tw-space-y-reverse\":\"1\"},\".space-x-reverse > :not([hidden]) ~ :not([hidden])\":{\"--tw-space-x-reverse\":\"1\"}})},divideWidth:({matchUtilities:i,addUtilities:e,theme:t})=>{i({\"divide-x\":r=>(r=r===\"0\"?\"0px\":r,{\"& > :not([hidden]) ~ :not([hidden])\":{\"@defaults border-width\":{},\"--tw-divide-x-reverse\":\"0\",\"border-right-width\":`calc(${r} * var(--tw-divide-x-reverse))`,\"border-left-width\":`calc(${r} * calc(1 - var(--tw-divide-x-reverse)))`}}),\"divide-y\":r=>(r=r===\"0\"?\"0px\":r,{\"& > :not([hidden]) ~ :not([hidden])\":{\"@defaults border-width\":{},\"--tw-divide-y-reverse\":\"0\",\"border-top-width\":`calc(${r} * calc(1 - var(--tw-divide-y-reverse)))`,\"border-bottom-width\":`calc(${r} * var(--tw-divide-y-reverse))`}})},{values:t(\"divideWidth\"),type:[\"line-width\",\"length\",\"any\"]}),e({\".divide-y-reverse > :not([hidden]) ~ :not([hidden])\":{\"@defaults border-width\":{},\"--tw-divide-y-reverse\":\"1\"},\".divide-x-reverse > :not([hidden]) ~ :not([hidden])\":{\"@defaults border-width\":{},\"--tw-divide-x-reverse\":\"1\"}})},divideStyle:({addUtilities:i})=>{i({\".divide-solid > :not([hidden]) ~ :not([hidden])\":{\"border-style\":\"solid\"},\".divide-dashed > :not([hidden]) ~ :not([hidden])\":{\"border-style\":\"dashed\"},\".divide-dotted > :not([hidden]) ~ :not([hidden])\":{\"border-style\":\"dotted\"},\".divide-double > :not([hidden]) ~ :not([hidden])\":{\"border-style\":\"double\"},\".divide-none > :not([hidden]) ~ :not([hidden])\":{\"border-style\":\"none\"}})},divideColor:({matchUtilities:i,theme:e,corePlugins:t})=>{i({divide:r=>t(\"divideOpacity\")?{[\"& > :not([hidden]) ~ :not([hidden])\"]:oe({color:r,property:\"border-color\",variable:\"--tw-divide-opacity\"})}:{[\"& > :not([hidden]) ~ :not([hidden])\"]:{\"border-color\":L(r)}}},{values:(({DEFAULT:r,...n})=>n)(ne(e(\"divideColor\"))),type:[\"color\",\"any\"]})},divideOpacity:({matchUtilities:i,theme:e})=>{i({\"divide-opacity\":t=>({[\"& > :not([hidden]) ~ :not([hidden])\"]:{\"--tw-divide-opacity\":t}})},{values:e(\"divideOpacity\")})},placeSelf:({addUtilities:i})=>{i({\".place-self-auto\":{\"place-self\":\"auto\"},\".place-self-start\":{\"place-self\":\"start\"},\".place-self-end\":{\"place-self\":\"end\"},\".place-self-center\":{\"place-self\":\"center\"},\".place-self-stretch\":{\"place-self\":\"stretch\"}})},alignSelf:({addUtilities:i})=>{i({\".self-auto\":{\"align-self\":\"auto\"},\".self-start\":{\"align-self\":\"flex-start\"},\".self-end\":{\"align-self\":\"flex-end\"},\".self-center\":{\"align-self\":\"center\"},\".self-stretch\":{\"align-self\":\"stretch\"},\".self-baseline\":{\"align-self\":\"baseline\"}})},justifySelf:({addUtilities:i})=>{i({\".justify-self-auto\":{\"justify-self\":\"auto\"},\".justify-self-start\":{\"justify-self\":\"start\"},\".justify-self-end\":{\"justify-self\":\"end\"},\".justify-self-center\":{\"justify-self\":\"center\"},\".justify-self-stretch\":{\"justify-self\":\"stretch\"}})},overflow:({addUtilities:i})=>{i({\".overflow-auto\":{overflow:\"auto\"},\".overflow-hidden\":{overflow:\"hidden\"},\".overflow-clip\":{overflow:\"clip\"},\".overflow-visible\":{overflow:\"visible\"},\".overflow-scroll\":{overflow:\"scroll\"},\".overflow-x-auto\":{\"overflow-x\":\"auto\"},\".overflow-y-auto\":{\"overflow-y\":\"auto\"},\".overflow-x-hidden\":{\"overflow-x\":\"hidden\"},\".overflow-y-hidden\":{\"overflow-y\":\"hidden\"},\".overflow-x-clip\":{\"overflow-x\":\"clip\"},\".overflow-y-clip\":{\"overflow-y\":\"clip\"},\".overflow-x-visible\":{\"overflow-x\":\"visible\"},\".overflow-y-visible\":{\"overflow-y\":\"visible\"},\".overflow-x-scroll\":{\"overflow-x\":\"scroll\"},\".overflow-y-scroll\":{\"overflow-y\":\"scroll\"}})},overscrollBehavior:({addUtilities:i})=>{i({\".overscroll-auto\":{\"overscroll-behavior\":\"auto\"},\".overscroll-contain\":{\"overscroll-behavior\":\"contain\"},\".overscroll-none\":{\"overscroll-behavior\":\"none\"},\".overscroll-y-auto\":{\"overscroll-behavior-y\":\"auto\"},\".overscroll-y-contain\":{\"overscroll-behavior-y\":\"contain\"},\".overscroll-y-none\":{\"overscroll-behavior-y\":\"none\"},\".overscroll-x-auto\":{\"overscroll-behavior-x\":\"auto\"},\".overscroll-x-contain\":{\"overscroll-behavior-x\":\"contain\"},\".overscroll-x-none\":{\"overscroll-behavior-x\":\"none\"}})},scrollBehavior:({addUtilities:i})=>{i({\".scroll-auto\":{\"scroll-behavior\":\"auto\"},\".scroll-smooth\":{\"scroll-behavior\":\"smooth\"}})},textOverflow:({addUtilities:i})=>{i({\".truncate\":{overflow:\"hidden\",\"text-overflow\":\"ellipsis\",\"white-space\":\"nowrap\"},\".overflow-ellipsis\":{\"text-overflow\":\"ellipsis\"},\".text-ellipsis\":{\"text-overflow\":\"ellipsis\"},\".text-clip\":{\"text-overflow\":\"clip\"}})},hyphens:({addUtilities:i})=>{i({\".hyphens-none\":{hyphens:\"none\"},\".hyphens-manual\":{hyphens:\"manual\"},\".hyphens-auto\":{hyphens:\"auto\"}})},whitespace:({addUtilities:i})=>{i({\".whitespace-normal\":{\"white-space\":\"normal\"},\".whitespace-nowrap\":{\"white-space\":\"nowrap\"},\".whitespace-pre\":{\"white-space\":\"pre\"},\".whitespace-pre-line\":{\"white-space\":\"pre-line\"},\".whitespace-pre-wrap\":{\"white-space\":\"pre-wrap\"},\".whitespace-break-spaces\":{\"white-space\":\"break-spaces\"}})},textWrap:({addUtilities:i})=>{i({\".text-wrap\":{\"text-wrap\":\"wrap\"},\".text-nowrap\":{\"text-wrap\":\"nowrap\"},\".text-balance\":{\"text-wrap\":\"balance\"},\".text-pretty\":{\"text-wrap\":\"pretty\"}})},wordBreak:({addUtilities:i})=>{i({\".break-normal\":{\"overflow-wrap\":\"normal\",\"word-break\":\"normal\"},\".break-words\":{\"overflow-wrap\":\"break-word\"},\".break-all\":{\"word-break\":\"break-all\"},\".break-keep\":{\"word-break\":\"keep-all\"}})},borderRadius:P(\"borderRadius\",[[\"rounded\",[\"border-radius\"]],[[\"rounded-s\",[\"border-start-start-radius\",\"border-end-start-radius\"]],[\"rounded-e\",[\"border-start-end-radius\",\"border-end-end-radius\"]],[\"rounded-t\",[\"border-top-left-radius\",\"border-top-right-radius\"]],[\"rounded-r\",[\"border-top-right-radius\",\"border-bottom-right-radius\"]],[\"rounded-b\",[\"border-bottom-right-radius\",\"border-bottom-left-radius\"]],[\"rounded-l\",[\"border-top-left-radius\",\"border-bottom-left-radius\"]]],[[\"rounded-ss\",[\"border-start-start-radius\"]],[\"rounded-se\",[\"border-start-end-radius\"]],[\"rounded-ee\",[\"border-end-end-radius\"]],[\"rounded-es\",[\"border-end-start-radius\"]],[\"rounded-tl\",[\"border-top-left-radius\"]],[\"rounded-tr\",[\"border-top-right-radius\"]],[\"rounded-br\",[\"border-bottom-right-radius\"]],[\"rounded-bl\",[\"border-bottom-left-radius\"]]]]),borderWidth:P(\"borderWidth\",[[\"border\",[[\"@defaults border-width\",{}],\"border-width\"]],[[\"border-x\",[[\"@defaults border-width\",{}],\"border-left-width\",\"border-right-width\"]],[\"border-y\",[[\"@defaults border-width\",{}],\"border-top-width\",\"border-bottom-width\"]]],[[\"border-s\",[[\"@defaults border-width\",{}],\"border-inline-start-width\"]],[\"border-e\",[[\"@defaults border-width\",{}],\"border-inline-end-width\"]],[\"border-t\",[[\"@defaults border-width\",{}],\"border-top-width\"]],[\"border-r\",[[\"@defaults border-width\",{}],\"border-right-width\"]],[\"border-b\",[[\"@defaults border-width\",{}],\"border-bottom-width\"]],[\"border-l\",[[\"@defaults border-width\",{}],\"border-left-width\"]]]],{type:[\"line-width\",\"length\"]}),borderStyle:({addUtilities:i})=>{i({\".border-solid\":{\"border-style\":\"solid\"},\".border-dashed\":{\"border-style\":\"dashed\"},\".border-dotted\":{\"border-style\":\"dotted\"},\".border-double\":{\"border-style\":\"double\"},\".border-hidden\":{\"border-style\":\"hidden\"},\".border-none\":{\"border-style\":\"none\"}})},borderColor:({matchUtilities:i,theme:e,corePlugins:t})=>{i({border:r=>t(\"borderOpacity\")?oe({color:r,property:\"border-color\",variable:\"--tw-border-opacity\"}):{\"border-color\":L(r)}},{values:(({DEFAULT:r,...n})=>n)(ne(e(\"borderColor\"))),type:[\"color\",\"any\"]}),i({\"border-x\":r=>t(\"borderOpacity\")?oe({color:r,property:[\"border-left-color\",\"border-right-color\"],variable:\"--tw-border-opacity\"}):{\"border-left-color\":L(r),\"border-right-color\":L(r)},\"border-y\":r=>t(\"borderOpacity\")?oe({color:r,property:[\"border-top-color\",\"border-bottom-color\"],variable:\"--tw-border-opacity\"}):{\"border-top-color\":L(r),\"border-bottom-color\":L(r)}},{values:(({DEFAULT:r,...n})=>n)(ne(e(\"borderColor\"))),type:[\"color\",\"any\"]}),i({\"border-s\":r=>t(\"borderOpacity\")?oe({color:r,property:\"border-inline-start-color\",variable:\"--tw-border-opacity\"}):{\"border-inline-start-color\":L(r)},\"border-e\":r=>t(\"borderOpacity\")?oe({color:r,property:\"border-inline-end-color\",variable:\"--tw-border-opacity\"}):{\"border-inline-end-color\":L(r)},\"border-t\":r=>t(\"borderOpacity\")?oe({color:r,property:\"border-top-color\",variable:\"--tw-border-opacity\"}):{\"border-top-color\":L(r)},\"border-r\":r=>t(\"borderOpacity\")?oe({color:r,property:\"border-right-color\",variable:\"--tw-border-opacity\"}):{\"border-right-color\":L(r)},\"border-b\":r=>t(\"borderOpacity\")?oe({color:r,property:\"border-bottom-color\",variable:\"--tw-border-opacity\"}):{\"border-bottom-color\":L(r)},\"border-l\":r=>t(\"borderOpacity\")?oe({color:r,property:\"border-left-color\",variable:\"--tw-border-opacity\"}):{\"border-left-color\":L(r)}},{values:(({DEFAULT:r,...n})=>n)(ne(e(\"borderColor\"))),type:[\"color\",\"any\"]})},borderOpacity:P(\"borderOpacity\",[[\"border-opacity\",[\"--tw-border-opacity\"]]]),backgroundColor:({matchUtilities:i,theme:e,corePlugins:t})=>{i({bg:r=>t(\"backgroundOpacity\")?oe({color:r,property:\"background-color\",variable:\"--tw-bg-opacity\"}):{\"background-color\":L(r)}},{values:ne(e(\"backgroundColor\")),type:[\"color\",\"any\"]})},backgroundOpacity:P(\"backgroundOpacity\",[[\"bg-opacity\",[\"--tw-bg-opacity\"]]]),backgroundImage:P(\"backgroundImage\",[[\"bg\",[\"background-image\"]]],{type:[\"lookup\",\"image\",\"url\"]}),gradientColorStops:(()=>{function i(e){return qe(e,0,\"rgb(255 255 255 / 0)\")}return function({matchUtilities:e,theme:t,addDefaults:r}){r(\"gradient-color-stops\",{\"--tw-gradient-from-position\":\" \",\"--tw-gradient-via-position\":\" \",\"--tw-gradient-to-position\":\" \"});let n={values:ne(t(\"gradientColorStops\")),type:[\"color\",\"any\"]},a={values:t(\"gradientColorStopPositions\"),type:[\"length\",\"percentage\"]};e({from:s=>{let o=i(s);return{\"@defaults gradient-color-stops\":{},\"--tw-gradient-from\":`${L(s)} var(--tw-gradient-from-position)`,\"--tw-gradient-to\":`${o} var(--tw-gradient-to-position)`,\"--tw-gradient-stops\":\"var(--tw-gradient-from), var(--tw-gradient-to)\"}}},n),e({from:s=>({\"--tw-gradient-from-position\":s})},a),e({via:s=>{let o=i(s);return{\"@defaults gradient-color-stops\":{},\"--tw-gradient-to\":`${o}  var(--tw-gradient-to-position)`,\"--tw-gradient-stops\":`var(--tw-gradient-from), ${L(s)} var(--tw-gradient-via-position), var(--tw-gradient-to)`}}},n),e({via:s=>({\"--tw-gradient-via-position\":s})},a),e({to:s=>({\"@defaults gradient-color-stops\":{},\"--tw-gradient-to\":`${L(s)} var(--tw-gradient-to-position)`})},n),e({to:s=>({\"--tw-gradient-to-position\":s})},a)}})(),boxDecorationBreak:({addUtilities:i})=>{i({\".decoration-slice\":{\"box-decoration-break\":\"slice\"},\".decoration-clone\":{\"box-decoration-break\":\"clone\"},\".box-decoration-slice\":{\"box-decoration-break\":\"slice\"},\".box-decoration-clone\":{\"box-decoration-break\":\"clone\"}})},backgroundSize:P(\"backgroundSize\",[[\"bg\",[\"background-size\"]]],{type:[\"lookup\",\"length\",\"percentage\",\"size\"]}),backgroundAttachment:({addUtilities:i})=>{i({\".bg-fixed\":{\"background-attachment\":\"fixed\"},\".bg-local\":{\"background-attachment\":\"local\"},\".bg-scroll\":{\"background-attachment\":\"scroll\"}})},backgroundClip:({addUtilities:i})=>{i({\".bg-clip-border\":{\"background-clip\":\"border-box\"},\".bg-clip-padding\":{\"background-clip\":\"padding-box\"},\".bg-clip-content\":{\"background-clip\":\"content-box\"},\".bg-clip-text\":{\"background-clip\":\"text\"}})},backgroundPosition:P(\"backgroundPosition\",[[\"bg\",[\"background-position\"]]],{type:[\"lookup\",[\"position\",{preferOnConflict:!0}]]}),backgroundRepeat:({addUtilities:i})=>{i({\".bg-repeat\":{\"background-repeat\":\"repeat\"},\".bg-no-repeat\":{\"background-repeat\":\"no-repeat\"},\".bg-repeat-x\":{\"background-repeat\":\"repeat-x\"},\".bg-repeat-y\":{\"background-repeat\":\"repeat-y\"},\".bg-repeat-round\":{\"background-repeat\":\"round\"},\".bg-repeat-space\":{\"background-repeat\":\"space\"}})},backgroundOrigin:({addUtilities:i})=>{i({\".bg-origin-border\":{\"background-origin\":\"border-box\"},\".bg-origin-padding\":{\"background-origin\":\"padding-box\"},\".bg-origin-content\":{\"background-origin\":\"content-box\"}})},fill:({matchUtilities:i,theme:e})=>{i({fill:t=>({fill:L(t)})},{values:ne(e(\"fill\")),type:[\"color\",\"any\"]})},stroke:({matchUtilities:i,theme:e})=>{i({stroke:t=>({stroke:L(t)})},{values:ne(e(\"stroke\")),type:[\"color\",\"url\",\"any\"]})},strokeWidth:P(\"strokeWidth\",[[\"stroke\",[\"stroke-width\"]]],{type:[\"length\",\"number\",\"percentage\"]}),objectFit:({addUtilities:i})=>{i({\".object-contain\":{\"object-fit\":\"contain\"},\".object-cover\":{\"object-fit\":\"cover\"},\".object-fill\":{\"object-fit\":\"fill\"},\".object-none\":{\"object-fit\":\"none\"},\".object-scale-down\":{\"object-fit\":\"scale-down\"}})},objectPosition:P(\"objectPosition\",[[\"object\",[\"object-position\"]]]),padding:P(\"padding\",[[\"p\",[\"padding\"]],[[\"px\",[\"padding-left\",\"padding-right\"]],[\"py\",[\"padding-top\",\"padding-bottom\"]]],[[\"ps\",[\"padding-inline-start\"]],[\"pe\",[\"padding-inline-end\"]],[\"pt\",[\"padding-top\"]],[\"pr\",[\"padding-right\"]],[\"pb\",[\"padding-bottom\"]],[\"pl\",[\"padding-left\"]]]]),textAlign:({addUtilities:i})=>{i({\".text-left\":{\"text-align\":\"left\"},\".text-center\":{\"text-align\":\"center\"},\".text-right\":{\"text-align\":\"right\"},\".text-justify\":{\"text-align\":\"justify\"},\".text-start\":{\"text-align\":\"start\"},\".text-end\":{\"text-align\":\"end\"}})},textIndent:P(\"textIndent\",[[\"indent\",[\"text-indent\"]]],{supportsNegativeValues:!0}),verticalAlign:({addUtilities:i,matchUtilities:e})=>{i({\".align-baseline\":{\"vertical-align\":\"baseline\"},\".align-top\":{\"vertical-align\":\"top\"},\".align-middle\":{\"vertical-align\":\"middle\"},\".align-bottom\":{\"vertical-align\":\"bottom\"},\".align-text-top\":{\"vertical-align\":\"text-top\"},\".align-text-bottom\":{\"vertical-align\":\"text-bottom\"},\".align-sub\":{\"vertical-align\":\"sub\"},\".align-super\":{\"vertical-align\":\"super\"}}),e({align:t=>({\"vertical-align\":t})})},fontFamily:({matchUtilities:i,theme:e})=>{i({font:t=>{let[r,n={}]=Array.isArray(t)&&se(t[1])?t:[t],{fontFeatureSettings:a,fontVariationSettings:s}=n;return{\"font-family\":Array.isArray(r)?r.join(\", \"):r,...a===void 0?{}:{\"font-feature-settings\":a},...s===void 0?{}:{\"font-variation-settings\":s}}}},{values:e(\"fontFamily\"),type:[\"lookup\",\"generic-name\",\"family-name\"]})},fontSize:({matchUtilities:i,theme:e})=>{i({text:(t,{modifier:r})=>{let[n,a]=Array.isArray(t)?t:[t];if(r)return{\"font-size\":n,\"line-height\":r};let{lineHeight:s,letterSpacing:o,fontWeight:u}=se(a)?a:{lineHeight:a};return{\"font-size\":n,...s===void 0?{}:{\"line-height\":s},...o===void 0?{}:{\"letter-spacing\":o},...u===void 0?{}:{\"font-weight\":u}}}},{values:e(\"fontSize\"),modifiers:e(\"lineHeight\"),type:[\"absolute-size\",\"relative-size\",\"length\",\"percentage\"]})},fontWeight:P(\"fontWeight\",[[\"font\",[\"fontWeight\"]]],{type:[\"lookup\",\"number\",\"any\"]}),textTransform:({addUtilities:i})=>{i({\".uppercase\":{\"text-transform\":\"uppercase\"},\".lowercase\":{\"text-transform\":\"lowercase\"},\".capitalize\":{\"text-transform\":\"capitalize\"},\".normal-case\":{\"text-transform\":\"none\"}})},fontStyle:({addUtilities:i})=>{i({\".italic\":{\"font-style\":\"italic\"},\".not-italic\":{\"font-style\":\"normal\"}})},fontVariantNumeric:({addDefaults:i,addUtilities:e})=>{let t=\"var(--tw-ordinal) var(--tw-slashed-zero) var(--tw-numeric-figure) var(--tw-numeric-spacing) var(--tw-numeric-fraction)\";i(\"font-variant-numeric\",{\"--tw-ordinal\":\" \",\"--tw-slashed-zero\":\" \",\"--tw-numeric-figure\":\" \",\"--tw-numeric-spacing\":\" \",\"--tw-numeric-fraction\":\" \"}),e({\".normal-nums\":{\"font-variant-numeric\":\"normal\"},\".ordinal\":{\"@defaults font-variant-numeric\":{},\"--tw-ordinal\":\"ordinal\",\"font-variant-numeric\":t},\".slashed-zero\":{\"@defaults font-variant-numeric\":{},\"--tw-slashed-zero\":\"slashed-zero\",\"font-variant-numeric\":t},\".lining-nums\":{\"@defaults font-variant-numeric\":{},\"--tw-numeric-figure\":\"lining-nums\",\"font-variant-numeric\":t},\".oldstyle-nums\":{\"@defaults font-variant-numeric\":{},\"--tw-numeric-figure\":\"oldstyle-nums\",\"font-variant-numeric\":t},\".proportional-nums\":{\"@defaults font-variant-numeric\":{},\"--tw-numeric-spacing\":\"proportional-nums\",\"font-variant-numeric\":t},\".tabular-nums\":{\"@defaults font-variant-numeric\":{},\"--tw-numeric-spacing\":\"tabular-nums\",\"font-variant-numeric\":t},\".diagonal-fractions\":{\"@defaults font-variant-numeric\":{},\"--tw-numeric-fraction\":\"diagonal-fractions\",\"font-variant-numeric\":t},\".stacked-fractions\":{\"@defaults font-variant-numeric\":{},\"--tw-numeric-fraction\":\"stacked-fractions\",\"font-variant-numeric\":t}})},lineHeight:P(\"lineHeight\",[[\"leading\",[\"lineHeight\"]]]),letterSpacing:P(\"letterSpacing\",[[\"tracking\",[\"letterSpacing\"]]],{supportsNegativeValues:!0}),textColor:({matchUtilities:i,theme:e,corePlugins:t})=>{i({text:r=>t(\"textOpacity\")?oe({color:r,property:\"color\",variable:\"--tw-text-opacity\"}):{color:L(r)}},{values:ne(e(\"textColor\")),type:[\"color\",\"any\"]})},textOpacity:P(\"textOpacity\",[[\"text-opacity\",[\"--tw-text-opacity\"]]]),textDecoration:({addUtilities:i})=>{i({\".underline\":{\"text-decoration-line\":\"underline\"},\".overline\":{\"text-decoration-line\":\"overline\"},\".line-through\":{\"text-decoration-line\":\"line-through\"},\".no-underline\":{\"text-decoration-line\":\"none\"}})},textDecorationColor:({matchUtilities:i,theme:e})=>{i({decoration:t=>({\"text-decoration-color\":L(t)})},{values:ne(e(\"textDecorationColor\")),type:[\"color\",\"any\"]})},textDecorationStyle:({addUtilities:i})=>{i({\".decoration-solid\":{\"text-decoration-style\":\"solid\"},\".decoration-double\":{\"text-decoration-style\":\"double\"},\".decoration-dotted\":{\"text-decoration-style\":\"dotted\"},\".decoration-dashed\":{\"text-decoration-style\":\"dashed\"},\".decoration-wavy\":{\"text-decoration-style\":\"wavy\"}})},textDecorationThickness:P(\"textDecorationThickness\",[[\"decoration\",[\"text-decoration-thickness\"]]],{type:[\"length\",\"percentage\"]}),textUnderlineOffset:P(\"textUnderlineOffset\",[[\"underline-offset\",[\"text-underline-offset\"]]],{type:[\"length\",\"percentage\",\"any\"]}),fontSmoothing:({addUtilities:i})=>{i({\".antialiased\":{\"-webkit-font-smoothing\":\"antialiased\",\"-moz-osx-font-smoothing\":\"grayscale\"},\".subpixel-antialiased\":{\"-webkit-font-smoothing\":\"auto\",\"-moz-osx-font-smoothing\":\"auto\"}})},placeholderColor:({matchUtilities:i,theme:e,corePlugins:t})=>{i({placeholder:r=>t(\"placeholderOpacity\")?{\"&::placeholder\":oe({color:r,property:\"color\",variable:\"--tw-placeholder-opacity\"})}:{\"&::placeholder\":{color:L(r)}}},{values:ne(e(\"placeholderColor\")),type:[\"color\",\"any\"]})},placeholderOpacity:({matchUtilities:i,theme:e})=>{i({\"placeholder-opacity\":t=>({[\"&::placeholder\"]:{\"--tw-placeholder-opacity\":t}})},{values:e(\"placeholderOpacity\")})},caretColor:({matchUtilities:i,theme:e})=>{i({caret:t=>({\"caret-color\":L(t)})},{values:ne(e(\"caretColor\")),type:[\"color\",\"any\"]})},accentColor:({matchUtilities:i,theme:e})=>{i({accent:t=>({\"accent-color\":L(t)})},{values:ne(e(\"accentColor\")),type:[\"color\",\"any\"]})},opacity:P(\"opacity\",[[\"opacity\",[\"opacity\"]]]),backgroundBlendMode:({addUtilities:i})=>{i({\".bg-blend-normal\":{\"background-blend-mode\":\"normal\"},\".bg-blend-multiply\":{\"background-blend-mode\":\"multiply\"},\".bg-blend-screen\":{\"background-blend-mode\":\"screen\"},\".bg-blend-overlay\":{\"background-blend-mode\":\"overlay\"},\".bg-blend-darken\":{\"background-blend-mode\":\"darken\"},\".bg-blend-lighten\":{\"background-blend-mode\":\"lighten\"},\".bg-blend-color-dodge\":{\"background-blend-mode\":\"color-dodge\"},\".bg-blend-color-burn\":{\"background-blend-mode\":\"color-burn\"},\".bg-blend-hard-light\":{\"background-blend-mode\":\"hard-light\"},\".bg-blend-soft-light\":{\"background-blend-mode\":\"soft-light\"},\".bg-blend-difference\":{\"background-blend-mode\":\"difference\"},\".bg-blend-exclusion\":{\"background-blend-mode\":\"exclusion\"},\".bg-blend-hue\":{\"background-blend-mode\":\"hue\"},\".bg-blend-saturation\":{\"background-blend-mode\":\"saturation\"},\".bg-blend-color\":{\"background-blend-mode\":\"color\"},\".bg-blend-luminosity\":{\"background-blend-mode\":\"luminosity\"}})},mixBlendMode:({addUtilities:i})=>{i({\".mix-blend-normal\":{\"mix-blend-mode\":\"normal\"},\".mix-blend-multiply\":{\"mix-blend-mode\":\"multiply\"},\".mix-blend-screen\":{\"mix-blend-mode\":\"screen\"},\".mix-blend-overlay\":{\"mix-blend-mode\":\"overlay\"},\".mix-blend-darken\":{\"mix-blend-mode\":\"darken\"},\".mix-blend-lighten\":{\"mix-blend-mode\":\"lighten\"},\".mix-blend-color-dodge\":{\"mix-blend-mode\":\"color-dodge\"},\".mix-blend-color-burn\":{\"mix-blend-mode\":\"color-burn\"},\".mix-blend-hard-light\":{\"mix-blend-mode\":\"hard-light\"},\".mix-blend-soft-light\":{\"mix-blend-mode\":\"soft-light\"},\".mix-blend-difference\":{\"mix-blend-mode\":\"difference\"},\".mix-blend-exclusion\":{\"mix-blend-mode\":\"exclusion\"},\".mix-blend-hue\":{\"mix-blend-mode\":\"hue\"},\".mix-blend-saturation\":{\"mix-blend-mode\":\"saturation\"},\".mix-blend-color\":{\"mix-blend-mode\":\"color\"},\".mix-blend-luminosity\":{\"mix-blend-mode\":\"luminosity\"},\".mix-blend-plus-darker\":{\"mix-blend-mode\":\"plus-darker\"},\".mix-blend-plus-lighter\":{\"mix-blend-mode\":\"plus-lighter\"}})},boxShadow:(()=>{let i=Ge(\"boxShadow\"),e=[\"var(--tw-ring-offset-shadow, 0 0 #0000)\",\"var(--tw-ring-shadow, 0 0 #0000)\",\"var(--tw-shadow)\"].join(\", \");return function({matchUtilities:t,addDefaults:r,theme:n}){r(\"box-shadow\",{\"--tw-ring-offset-shadow\":\"0 0 #0000\",\"--tw-ring-shadow\":\"0 0 #0000\",\"--tw-shadow\":\"0 0 #0000\",\"--tw-shadow-colored\":\"0 0 #0000\"}),t({shadow:a=>{a=i(a);let s=yi(a);for(let o of s)!o.valid||(o.color=\"var(--tw-shadow-color)\");return{\"@defaults box-shadow\":{},\"--tw-shadow\":a===\"none\"?\"0 0 #0000\":a,\"--tw-shadow-colored\":a===\"none\"?\"0 0 #0000\":Tu(s),\"box-shadow\":e}}},{values:n(\"boxShadow\"),type:[\"shadow\"]})}})(),boxShadowColor:({matchUtilities:i,theme:e})=>{i({shadow:t=>({\"--tw-shadow-color\":L(t),\"--tw-shadow\":\"var(--tw-shadow-colored)\"})},{values:ne(e(\"boxShadowColor\")),type:[\"color\",\"any\"]})},outlineStyle:({addUtilities:i})=>{i({\".outline-none\":{outline:\"2px solid transparent\",\"outline-offset\":\"2px\"},\".outline\":{\"outline-style\":\"solid\"},\".outline-dashed\":{\"outline-style\":\"dashed\"},\".outline-dotted\":{\"outline-style\":\"dotted\"},\".outline-double\":{\"outline-style\":\"double\"}})},outlineWidth:P(\"outlineWidth\",[[\"outline\",[\"outline-width\"]]],{type:[\"length\",\"number\",\"percentage\"]}),outlineOffset:P(\"outlineOffset\",[[\"outline-offset\",[\"outline-offset\"]]],{type:[\"length\",\"number\",\"percentage\",\"any\"],supportsNegativeValues:!0}),outlineColor:({matchUtilities:i,theme:e})=>{i({outline:t=>({\"outline-color\":L(t)})},{values:ne(e(\"outlineColor\")),type:[\"color\",\"any\"]})},ringWidth:({matchUtilities:i,addDefaults:e,addUtilities:t,theme:r,config:n})=>{let a=(()=>{if(Z(n(),\"respectDefaultRingColorOpacity\"))return r(\"ringColor.DEFAULT\");let s=r(\"ringOpacity.DEFAULT\",\"0.5\");return r(\"ringColor\")?.DEFAULT?qe(r(\"ringColor\")?.DEFAULT,s,`rgb(147 197 253 / ${s})`):`rgb(147 197 253 / ${s})`})();e(\"ring-width\",{\"--tw-ring-inset\":\" \",\"--tw-ring-offset-width\":r(\"ringOffsetWidth.DEFAULT\",\"0px\"),\"--tw-ring-offset-color\":r(\"ringOffsetColor.DEFAULT\",\"#fff\"),\"--tw-ring-color\":a,\"--tw-ring-offset-shadow\":\"0 0 #0000\",\"--tw-ring-shadow\":\"0 0 #0000\",\"--tw-shadow\":\"0 0 #0000\",\"--tw-shadow-colored\":\"0 0 #0000\"}),i({ring:s=>({\"@defaults ring-width\":{},\"--tw-ring-offset-shadow\":\"var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color)\",\"--tw-ring-shadow\":`var(--tw-ring-inset) 0 0 0 calc(${s} + var(--tw-ring-offset-width)) var(--tw-ring-color)`,\"box-shadow\":[\"var(--tw-ring-offset-shadow)\",\"var(--tw-ring-shadow)\",\"var(--tw-shadow, 0 0 #0000)\"].join(\", \")})},{values:r(\"ringWidth\"),type:\"length\"}),t({\".ring-inset\":{\"@defaults ring-width\":{},\"--tw-ring-inset\":\"inset\"}})},ringColor:({matchUtilities:i,theme:e,corePlugins:t})=>{i({ring:r=>t(\"ringOpacity\")?oe({color:r,property:\"--tw-ring-color\",variable:\"--tw-ring-opacity\"}):{\"--tw-ring-color\":L(r)}},{values:Object.fromEntries(Object.entries(ne(e(\"ringColor\"))).filter(([r])=>r!==\"DEFAULT\")),type:[\"color\",\"any\"]})},ringOpacity:i=>{let{config:e}=i;return P(\"ringOpacity\",[[\"ring-opacity\",[\"--tw-ring-opacity\"]]],{filterDefault:!Z(e(),\"respectDefaultRingColorOpacity\")})(i)},ringOffsetWidth:P(\"ringOffsetWidth\",[[\"ring-offset\",[\"--tw-ring-offset-width\"]]],{type:\"length\"}),ringOffsetColor:({matchUtilities:i,theme:e})=>{i({\"ring-offset\":t=>({\"--tw-ring-offset-color\":L(t)})},{values:ne(e(\"ringOffsetColor\")),type:[\"color\",\"any\"]})},blur:({matchUtilities:i,theme:e})=>{i({blur:t=>({\"--tw-blur\":t.trim()===\"\"?\" \":`blur(${t})`,\"@defaults filter\":{},filter:Fe})},{values:e(\"blur\")})},brightness:({matchUtilities:i,theme:e})=>{i({brightness:t=>({\"--tw-brightness\":`brightness(${t})`,\"@defaults filter\":{},filter:Fe})},{values:e(\"brightness\")})},contrast:({matchUtilities:i,theme:e})=>{i({contrast:t=>({\"--tw-contrast\":`contrast(${t})`,\"@defaults filter\":{},filter:Fe})},{values:e(\"contrast\")})},dropShadow:({matchUtilities:i,theme:e})=>{i({\"drop-shadow\":t=>({\"--tw-drop-shadow\":Array.isArray(t)?t.map(r=>`drop-shadow(${r})`).join(\" \"):`drop-shadow(${t})`,\"@defaults filter\":{},filter:Fe})},{values:e(\"dropShadow\")})},grayscale:({matchUtilities:i,theme:e})=>{i({grayscale:t=>({\"--tw-grayscale\":`grayscale(${t})`,\"@defaults filter\":{},filter:Fe})},{values:e(\"grayscale\")})},hueRotate:({matchUtilities:i,theme:e})=>{i({\"hue-rotate\":t=>({\"--tw-hue-rotate\":`hue-rotate(${t})`,\"@defaults filter\":{},filter:Fe})},{values:e(\"hueRotate\"),supportsNegativeValues:!0})},invert:({matchUtilities:i,theme:e})=>{i({invert:t=>({\"--tw-invert\":`invert(${t})`,\"@defaults filter\":{},filter:Fe})},{values:e(\"invert\")})},saturate:({matchUtilities:i,theme:e})=>{i({saturate:t=>({\"--tw-saturate\":`saturate(${t})`,\"@defaults filter\":{},filter:Fe})},{values:e(\"saturate\")})},sepia:({matchUtilities:i,theme:e})=>{i({sepia:t=>({\"--tw-sepia\":`sepia(${t})`,\"@defaults filter\":{},filter:Fe})},{values:e(\"sepia\")})},filter:({addDefaults:i,addUtilities:e})=>{i(\"filter\",{\"--tw-blur\":\" \",\"--tw-brightness\":\" \",\"--tw-contrast\":\" \",\"--tw-grayscale\":\" \",\"--tw-hue-rotate\":\" \",\"--tw-invert\":\" \",\"--tw-saturate\":\" \",\"--tw-sepia\":\" \",\"--tw-drop-shadow\":\" \"}),e({\".filter\":{\"@defaults filter\":{},filter:Fe},\".filter-none\":{filter:\"none\"}})},backdropBlur:({matchUtilities:i,theme:e})=>{i({\"backdrop-blur\":t=>({\"--tw-backdrop-blur\":t.trim()===\"\"?\" \":`blur(${t})`,\"@defaults backdrop-filter\":{},\"-webkit-backdrop-filter\":K,\"backdrop-filter\":K})},{values:e(\"backdropBlur\")})},backdropBrightness:({matchUtilities:i,theme:e})=>{i({\"backdrop-brightness\":t=>({\"--tw-backdrop-brightness\":`brightness(${t})`,\"@defaults backdrop-filter\":{},\"-webkit-backdrop-filter\":K,\"backdrop-filter\":K})},{values:e(\"backdropBrightness\")})},backdropContrast:({matchUtilities:i,theme:e})=>{i({\"backdrop-contrast\":t=>({\"--tw-backdrop-contrast\":`contrast(${t})`,\"@defaults backdrop-filter\":{},\"-webkit-backdrop-filter\":K,\"backdrop-filter\":K})},{values:e(\"backdropContrast\")})},backdropGrayscale:({matchUtilities:i,theme:e})=>{i({\"backdrop-grayscale\":t=>({\"--tw-backdrop-grayscale\":`grayscale(${t})`,\"@defaults backdrop-filter\":{},\"-webkit-backdrop-filter\":K,\"backdrop-filter\":K})},{values:e(\"backdropGrayscale\")})},backdropHueRotate:({matchUtilities:i,theme:e})=>{i({\"backdrop-hue-rotate\":t=>({\"--tw-backdrop-hue-rotate\":`hue-rotate(${t})`,\"@defaults backdrop-filter\":{},\"-webkit-backdrop-filter\":K,\"backdrop-filter\":K})},{values:e(\"backdropHueRotate\"),supportsNegativeValues:!0})},backdropInvert:({matchUtilities:i,theme:e})=>{i({\"backdrop-invert\":t=>({\"--tw-backdrop-invert\":`invert(${t})`,\"@defaults backdrop-filter\":{},\"-webkit-backdrop-filter\":K,\"backdrop-filter\":K})},{values:e(\"backdropInvert\")})},backdropOpacity:({matchUtilities:i,theme:e})=>{i({\"backdrop-opacity\":t=>({\"--tw-backdrop-opacity\":`opacity(${t})`,\"@defaults backdrop-filter\":{},\"-webkit-backdrop-filter\":K,\"backdrop-filter\":K})},{values:e(\"backdropOpacity\")})},backdropSaturate:({matchUtilities:i,theme:e})=>{i({\"backdrop-saturate\":t=>({\"--tw-backdrop-saturate\":`saturate(${t})`,\"@defaults backdrop-filter\":{},\"-webkit-backdrop-filter\":K,\"backdrop-filter\":K})},{values:e(\"backdropSaturate\")})},backdropSepia:({matchUtilities:i,theme:e})=>{i({\"backdrop-sepia\":t=>({\"--tw-backdrop-sepia\":`sepia(${t})`,\"@defaults backdrop-filter\":{},\"-webkit-backdrop-filter\":K,\"backdrop-filter\":K})},{values:e(\"backdropSepia\")})},backdropFilter:({addDefaults:i,addUtilities:e})=>{i(\"backdrop-filter\",{\"--tw-backdrop-blur\":\" \",\"--tw-backdrop-brightness\":\" \",\"--tw-backdrop-contrast\":\" \",\"--tw-backdrop-grayscale\":\" \",\"--tw-backdrop-hue-rotate\":\" \",\"--tw-backdrop-invert\":\" \",\"--tw-backdrop-opacity\":\" \",\"--tw-backdrop-saturate\":\" \",\"--tw-backdrop-sepia\":\" \"}),e({\".backdrop-filter\":{\"@defaults backdrop-filter\":{},\"-webkit-backdrop-filter\":K,\"backdrop-filter\":K},\".backdrop-filter-none\":{\"-webkit-backdrop-filter\":\"none\",\"backdrop-filter\":\"none\"}})},transitionProperty:({matchUtilities:i,theme:e})=>{let t=e(\"transitionTimingFunction.DEFAULT\"),r=e(\"transitionDuration.DEFAULT\");i({transition:n=>({\"transition-property\":n,...n===\"none\"?{}:{\"transition-timing-function\":t,\"transition-duration\":r}})},{values:e(\"transitionProperty\")})},transitionDelay:P(\"transitionDelay\",[[\"delay\",[\"transitionDelay\"]]]),transitionDuration:P(\"transitionDuration\",[[\"duration\",[\"transitionDuration\"]]],{filterDefault:!0}),transitionTimingFunction:P(\"transitionTimingFunction\",[[\"ease\",[\"transitionTimingFunction\"]]],{filterDefault:!0}),willChange:P(\"willChange\",[[\"will-change\",[\"will-change\"]]]),contain:({addDefaults:i,addUtilities:e})=>{let t=\"var(--tw-contain-size) var(--tw-contain-layout) var(--tw-contain-paint) var(--tw-contain-style)\";i(\"contain\",{\"--tw-contain-size\":\" \",\"--tw-contain-layout\":\" \",\"--tw-contain-paint\":\" \",\"--tw-contain-style\":\" \"}),e({\".contain-none\":{contain:\"none\"},\".contain-content\":{contain:\"content\"},\".contain-strict\":{contain:\"strict\"},\".contain-size\":{\"@defaults contain\":{},\"--tw-contain-size\":\"size\",contain:t},\".contain-inline-size\":{\"@defaults contain\":{},\"--tw-contain-size\":\"inline-size\",contain:t},\".contain-layout\":{\"@defaults contain\":{},\"--tw-contain-layout\":\"layout\",contain:t},\".contain-paint\":{\"@defaults contain\":{},\"--tw-contain-paint\":\"paint\",contain:t},\".contain-style\":{\"@defaults contain\":{},\"--tw-contain-style\":\"style\",contain:t}})},content:P(\"content\",[[\"content\",[\"--tw-content\",[\"content\",\"var(--tw-content)\"]]]]),forcedColorAdjust:({addUtilities:i})=>{i({\".forced-color-adjust-auto\":{\"forced-color-adjust\":\"auto\"},\".forced-color-adjust-none\":{\"forced-color-adjust\":\"none\"}})}}});function KS(i){if(i===void 0)return!1;if(i===\"true\"||i===\"1\")return!0;if(i===\"false\"||i===\"0\")return!1;if(i===\"*\")return!0;let e=i.split(\",\").map(t=>t.split(\":\")[0]);return e.includes(\"-tailwindcss\")?!1:!!e.includes(\"tailwindcss\")}var De,gd,yd,gn,Ga,He,Kr,lt=C(()=>{l();De=typeof h!=\"undefined\"?{NODE_ENV:\"production\",DEBUG:KS(h.env.DEBUG)}:{NODE_ENV:\"production\",DEBUG:!1},gd=new Map,yd=new Map,gn=new Map,Ga=new Map,He=new String(\"*\"),Kr=Symbol(\"__NONE__\")});function Lt(i){let e=[],t=!1;for(let r=0;r<i.length;r++){let n=i[r];if(n===\":\"&&!t&&e.length===0)return!1;if(ZS.has(n)&&i[r-1]!==\"\\\\\"&&(t=!t),!t&&i[r-1]!==\"\\\\\"){if(wd.has(n))e.push(n);else if(bd.has(n)){let a=bd.get(n);if(e.length<=0||e.pop()!==a)return!1}}}return!(e.length>0)}var wd,bd,ZS,Ha=C(()=>{l();wd=new Map([[\"{\",\"}\"],[\"[\",\"]\"],[\"(\",\")\"]]),bd=new Map(Array.from(wd.entries()).map(([i,e])=>[e,i])),ZS=new Set(['\"',\"'\",\"`\"])});function $t(i){let[e]=vd(i);return e.forEach(([t,r])=>t.removeChild(r)),i.nodes.push(...e.map(([,t])=>t)),i}function vd(i){let e=[],t=null;for(let r of i.nodes)if(r.type===\"combinator\")e=e.filter(([,n])=>Qa(n).includes(\"jumpable\")),t=null;else if(r.type===\"pseudo\"){eC(r)?(t=r,e.push([i,r,null])):t&&tC(r,t)?e.push([i,r,t]):t=null;for(let n of r.nodes??[]){let[a,s]=vd(n);t=s||t,e.push(...a)}}return[e,t]}function xd(i){return i.value.startsWith(\"::\")||Ya[i.value]!==void 0}function eC(i){return xd(i)&&Qa(i).includes(\"terminal\")}function tC(i,e){return i.type!==\"pseudo\"||xd(i)?!1:Qa(e).includes(\"actionable\")}function Qa(i){return Ya[i.value]??Ya.__default__}var Ya,yn=C(()=>{l();Ya={\"::after\":[\"terminal\",\"jumpable\"],\"::backdrop\":[\"terminal\",\"jumpable\"],\"::before\":[\"terminal\",\"jumpable\"],\"::cue\":[\"terminal\"],\"::cue-region\":[\"terminal\"],\"::first-letter\":[\"terminal\",\"jumpable\"],\"::first-line\":[\"terminal\",\"jumpable\"],\"::grammar-error\":[\"terminal\"],\"::marker\":[\"terminal\",\"jumpable\"],\"::part\":[\"terminal\",\"actionable\"],\"::placeholder\":[\"terminal\",\"jumpable\"],\"::selection\":[\"terminal\",\"jumpable\"],\"::slotted\":[\"terminal\"],\"::spelling-error\":[\"terminal\"],\"::target-text\":[\"terminal\"],\"::file-selector-button\":[\"terminal\",\"actionable\"],\"::deep\":[\"actionable\"],\"::v-deep\":[\"actionable\"],\"::ng-deep\":[\"actionable\"],\":after\":[\"terminal\",\"jumpable\"],\":before\":[\"terminal\",\"jumpable\"],\":first-letter\":[\"terminal\",\"jumpable\"],\":first-line\":[\"terminal\",\"jumpable\"],\":where\":[],\":is\":[],\":has\":[],__default__:[\"terminal\",\"actionable\"]}});function jt(i,{context:e,candidate:t}){let r=e?.tailwindConfig.prefix??\"\",n=i.map(s=>{let o=(0,Ne.default)().astSync(s.format);return{...s,ast:s.respectPrefix?Ft(r,o):o}}),a=Ne.default.root({nodes:[Ne.default.selector({nodes:[Ne.default.className({value:pe(t)})]})]});for(let{ast:s}of n)[a,s]=iC(a,s),s.walkNesting(o=>o.replaceWith(...a.nodes[0].nodes)),a=s;return a}function Sd(i){let e=[];for(;i.prev()&&i.prev().type!==\"combinator\";)i=i.prev();for(;i&&i.type!==\"combinator\";)e.push(i),i=i.next();return e}function rC(i){return i.sort((e,t)=>e.type===\"tag\"&&t.type===\"class\"?-1:e.type===\"class\"&&t.type===\"tag\"?1:e.type===\"class\"&&t.type===\"pseudo\"&&t.value.startsWith(\"::\")?-1:e.type===\"pseudo\"&&e.value.startsWith(\"::\")&&t.type===\"class\"?1:i.index(e)-i.index(t)),i}function Xa(i,e){let t=!1;i.walk(r=>{if(r.type===\"class\"&&r.value===e)return t=!0,!1}),t||i.remove()}function wn(i,e,{context:t,candidate:r,base:n}){let a=t?.tailwindConfig?.separator??\":\";n=n??ie(r,a).pop();let s=(0,Ne.default)().astSync(i);if(s.walkClasses(f=>{f.raws&&f.value.includes(n)&&(f.raws.value=pe((0,kd.default)(f.raws.value)))}),s.each(f=>Xa(f,n)),s.length===0)return null;let o=Array.isArray(e)?jt(e,{context:t,candidate:r}):e;if(o===null)return s.toString();let u=Ne.default.comment({value:\"/*__simple__*/\"}),c=Ne.default.comment({value:\"/*__simple__*/\"});return s.walkClasses(f=>{if(f.value!==n)return;let d=f.parent,p=o.nodes[0].nodes;if(d.nodes.length===1){f.replaceWith(...p);return}let m=Sd(f);d.insertBefore(m[0],u),d.insertAfter(m[m.length-1],c);for(let x of p)d.insertBefore(m[0],x.clone());f.remove(),m=Sd(u);let b=d.index(u);d.nodes.splice(b,m.length,...rC(Ne.default.selector({nodes:m})).nodes),u.remove(),c.remove()}),s.walkPseudos(f=>{f.value===Ja&&f.replaceWith(f.nodes)}),s.each(f=>$t(f)),s.toString()}function iC(i,e){let t=[];return i.walkPseudos(r=>{r.value===Ja&&t.push({pseudo:r,value:r.nodes[0].toString()})}),e.walkPseudos(r=>{if(r.value!==Ja)return;let n=r.nodes[0].toString(),a=t.find(c=>c.value===n);if(!a)return;let s=[],o=r.next();for(;o&&o.type!==\"combinator\";)s.push(o),o=o.next();let u=o;a.pseudo.parent.insertAfter(a.pseudo,Ne.default.selector({nodes:s.map(c=>c.clone())})),r.remove(),s.forEach(c=>c.remove()),u&&u.type===\"combinator\"&&u.remove()}),[i,e]}var Ne,kd,Ja,Ka=C(()=>{l();Ne=X(Be()),kd=X(Yi());Nt();un();yn();yt();Ja=\":merge\"});function bn(i,e){let t=(0,Za.default)().astSync(i);return t.each(r=>{r.nodes[0].type===\"pseudo\"&&r.nodes[0].value===\":is\"&&r.nodes.every(a=>a.type!==\"combinator\")||(r.nodes=[Za.default.pseudo({value:\":is\",nodes:[r.clone()]})]),$t(r)}),`${e} ${t.toString()}`}var Za,eo=C(()=>{l();Za=X(Be());yn()});function to(i){return nC.transformSync(i)}function*sC(i){let e=1/0;for(;e>=0;){let t,r=!1;if(e===1/0&&i.endsWith(\"]\")){let s=i.indexOf(\"[\");i[s-1]===\"-\"?t=s-1:i[s-1]===\"/\"?(t=s-1,r=!0):t=-1}else e===1/0&&i.includes(\"/\")?(t=i.lastIndexOf(\"/\"),r=!0):t=i.lastIndexOf(\"-\",e);if(t<0)break;let n=i.slice(0,t),a=i.slice(r?t:t+1);e=t-1,!(n===\"\"||a===\"/\")&&(yield[n,a])}}function aC(i,e){if(i.length===0||e.tailwindConfig.prefix===\"\")return i;for(let t of i){let[r]=t;if(r.options.respectPrefix){let n=z.root({nodes:[t[1].clone()]}),a=t[1].raws.tailwind.classCandidate;n.walkRules(s=>{let o=a.startsWith(\"-\");s.selector=Ft(e.tailwindConfig.prefix,s.selector,o)}),t[1]=n.nodes[0]}}return i}function oC(i,e){if(i.length===0)return i;let t=[];function r(n){return n.parent&&n.parent.type===\"atrule\"&&n.parent.name===\"keyframes\"}for(let[n,a]of i){let s=z.root({nodes:[a.clone()]});s.walkRules(o=>{if(r(o))return;let u=(0,vn.default)().astSync(o.selector);u.each(c=>Xa(c,e)),ju(u,c=>c===e?`!${c}`:c),o.selector=u.toString(),o.walkDecls(c=>c.important=!0)}),t.push([{...n,important:!0},s.nodes[0]])}return t}function lC(i,e,t){if(e.length===0)return e;let r={modifier:null,value:Kr};{let[n,...a]=ie(i,\"/\");if(a.length>1&&(n=n+\"/\"+a.slice(0,-1).join(\"/\"),a=a.slice(-1)),a.length&&!t.variantMap.has(i)&&(i=n,r.modifier=a[0],!Z(t.tailwindConfig,\"generalizedModifiers\")))return[]}if(i.endsWith(\"]\")&&!i.startsWith(\"[\")){let n=/(.)(-?)\\[(.*)\\]/g.exec(i);if(n){let[,a,s,o]=n;if(a===\"@\"&&s===\"-\")return[];if(a!==\"@\"&&s===\"\")return[];i=i.replace(`${s}[${o}]`,\"\"),r.value=o}}if(no(i)&&!t.variantMap.has(i)){let n=t.offsets.recordVariant(i),a=N(i.slice(1,-1)),s=ie(a,\",\");if(s.length>1)return[];if(!s.every(Cn))return[];let o=s.map((u,c)=>[t.offsets.applyParallelOffset(n,c),Zr(u.trim())]);t.variantMap.set(i,o)}if(t.variantMap.has(i)){let n=no(i),a=t.variantOptions.get(i)?.[ot]??{},s=t.variantMap.get(i).slice(),o=[],u=(()=>!(n||a.respectPrefix===!1))();for(let[c,f]of e){if(c.layer===\"user\")continue;let d=z.root({nodes:[f.clone()]});for(let[p,m,b]of s){let w=function(){x.raws.neededBackup||(x.raws.neededBackup=!0,x.walkRules(E=>E.raws.originalSelector=E.selector))},k=function(E){return w(),x.each(I=>{I.type===\"rule\"&&(I.selectors=I.selectors.map(q=>E({get className(){return to(q)},selector:q})))}),x},x=(b??d).clone(),y=[],S=m({get container(){return w(),x},separator:t.tailwindConfig.separator,modifySelectors:k,wrap(E){let I=x.nodes;x.removeAll(),E.append(I),x.append(E)},format(E){y.push({format:E,respectPrefix:u})},args:r});if(Array.isArray(S)){for(let[E,I]of S.entries())s.push([t.offsets.applyParallelOffset(p,E),I,x.clone()]);continue}if(typeof S==\"string\"&&y.push({format:S,respectPrefix:u}),S===null)continue;x.raws.neededBackup&&(delete x.raws.neededBackup,x.walkRules(E=>{let I=E.raws.originalSelector;if(!I||(delete E.raws.originalSelector,I===E.selector))return;let q=E.selector,R=(0,vn.default)(J=>{J.walkClasses(fe=>{fe.value=`${i}${t.tailwindConfig.separator}${fe.value}`})}).processSync(I);y.push({format:q.replace(R,\"&\"),respectPrefix:u}),E.selector=I})),x.nodes[0].raws.tailwind={...x.nodes[0].raws.tailwind,parentLayer:c.layer};let _=[{...c,sort:t.offsets.applyVariantOffset(c.sort,p,Object.assign(r,t.variantOptions.get(i))),collectedFormats:(c.collectedFormats??[]).concat(y)},x.nodes[0]];o.push(_)}}return o}return[]}function ro(i,e,t={}){return!se(i)&&!Array.isArray(i)?[[i],t]:Array.isArray(i)?ro(i[0],e,i[1]):(e.has(i)||e.set(i,Bt(i)),[e.get(i),t])}function fC(i){return uC.test(i)}function cC(i){if(!i.includes(\"://\"))return!1;try{let e=new URL(i);return e.scheme!==\"\"&&e.host!==\"\"}catch(e){return!1}}function Cd(i){let e=!0;return i.walkDecls(t=>{if(!Ad(t.prop,t.value))return e=!1,!1}),e}function Ad(i,e){if(cC(`${i}:${e}`))return!1;try{return z.parse(`a{${i}:${e}}`).toResult(),!0}catch(t){return!1}}function pC(i,e){let[,t,r]=i.match(/^\\[([a-zA-Z0-9-_]+):(\\S+)\\]$/)??[];if(r===void 0||!fC(t)||!Lt(r))return null;let n=N(r,{property:t});return Ad(t,n)?[[{sort:e.offsets.arbitraryProperty(i),layer:\"utilities\",options:{respectImportant:!0}},()=>({[Va(i)]:{[t]:n}})]]:null}function*dC(i,e){e.candidateRuleMap.has(i)&&(yield[e.candidateRuleMap.get(i),\"DEFAULT\"]),yield*function*(o){o!==null&&(yield[o,\"DEFAULT\"])}(pC(i,e));let t=i,r=!1,n=e.tailwindConfig.prefix,a=n.length,s=t.startsWith(n)||t.startsWith(`-${n}`);t[a]===\"-\"&&s&&(r=!0,t=n+t.slice(a+1)),r&&e.candidateRuleMap.has(t)&&(yield[e.candidateRuleMap.get(t),\"-DEFAULT\"]);for(let[o,u]of sC(t))e.candidateRuleMap.has(o)&&(yield[e.candidateRuleMap.get(o),r?`-${u}`:u])}function hC(i,e){return i===He?[He]:ie(i,e)}function*mC(i,e){for(let t of i)t[1].raws.tailwind={...t[1].raws.tailwind,classCandidate:e,preserveSource:t[0].options?.preserveSource??!1},yield t}function*io(i,e){let t=e.tailwindConfig.separator,[r,...n]=hC(i,t).reverse(),a=!1;r.startsWith(\"!\")&&(a=!0,r=r.slice(1));for(let s of dC(r,e)){let o=[],u=new Map,[c,f]=s,d=c.length===1;for(let[p,m]of c){let b=[];if(typeof m==\"function\")for(let x of[].concat(m(f,{isOnlyPlugin:d}))){let[y,w]=ro(x,e.postCssNodeCache);for(let k of y)b.push([{...p,options:{...p.options,...w}},k])}else if(f===\"DEFAULT\"||f===\"-DEFAULT\"){let x=m,[y,w]=ro(x,e.postCssNodeCache);for(let k of y)b.push([{...p,options:{...p.options,...w}},k])}if(b.length>0){let x=Array.from(fs(p.options?.types??[],f,p.options??{},e.tailwindConfig)).map(([y,w])=>w);x.length>0&&u.set(b,x),o.push(b)}}if(no(f)){if(o.length>1){let b=function(y){return y.length===1?y[0]:y.find(w=>{let k=u.get(w);return w.some(([{options:S},_])=>Cd(_)?S.types.some(({type:E,preferOnConflict:I})=>k.includes(E)&&I):!1)})},[p,m]=o.reduce((y,w)=>(w.some(([{options:S}])=>S.types.some(({type:_})=>_===\"any\"))?y[0].push(w):y[1].push(w),y),[[],[]]),x=b(m)??b(p);if(x)o=[x];else{let y=o.map(k=>new Set([...u.get(k)??[]]));for(let k of y)for(let S of k){let _=!1;for(let E of y)k!==E&&E.has(S)&&(E.delete(S),_=!0);_&&k.delete(S)}let w=[];for(let[k,S]of y.entries())for(let _ of S){let E=o[k].map(([,I])=>I).flat().map(I=>I.toString().split(`\n`).slice(1,-1).map(q=>q.trim()).map(q=>`      ${q}`).join(`\n`)).join(`\n\n`);w.push(`  Use \\`${i.replace(\"[\",`[${_}:`)}\\` for \\`${E.trim()}\\``);break}F.warn([`The class \\`${i}\\` is ambiguous and matches multiple utilities.`,...w,`If this is content and not a class, replace it with \\`${i.replace(\"[\",\"&lsqb;\").replace(\"]\",\"&rsqb;\")}\\` to silence this warning.`]);continue}}o=o.map(p=>p.filter(m=>Cd(m[1])))}o=o.flat(),o=Array.from(mC(o,r)),o=aC(o,e),a&&(o=oC(o,r));for(let p of n)o=lC(p,o,e);for(let p of o)p[1].raws.tailwind={...p[1].raws.tailwind,candidate:i},p=gC(p,{context:e,candidate:i}),p!==null&&(yield p)}}function gC(i,{context:e,candidate:t}){if(!i[0].collectedFormats)return i;let r=!0,n;try{n=jt(i[0].collectedFormats,{context:e,candidate:t})}catch{return null}let a=z.root({nodes:[i[1].clone()]});return a.walkRules(s=>{if(!xn(s))try{let o=wn(s.selector,n,{candidate:t,context:e});if(o===null){s.remove();return}s.selector=o}catch{return r=!1,!1}}),!r||a.nodes.length===0?null:(i[1]=a.nodes[0],i)}function xn(i){return i.parent&&i.parent.type===\"atrule\"&&i.parent.name===\"keyframes\"}function yC(i){if(i===!0)return e=>{xn(e)||e.walkDecls(t=>{t.parent.type===\"rule\"&&!xn(t.parent)&&(t.important=!0)})};if(typeof i==\"string\")return e=>{xn(e)||(e.selectors=e.selectors.map(t=>bn(t,i)))}}function kn(i,e,t=!1){let r=[],n=yC(e.tailwindConfig.important);for(let a of i){if(e.notClassCache.has(a))continue;if(e.candidateRuleCache.has(a)){r=r.concat(Array.from(e.candidateRuleCache.get(a)));continue}let s=Array.from(io(a,e));if(s.length===0){e.notClassCache.add(a);continue}e.classCache.set(a,s);let o=e.candidateRuleCache.get(a)??new Set;e.candidateRuleCache.set(a,o);for(let u of s){let[{sort:c,options:f},d]=u;if(f.respectImportant&&n){let m=z.root({nodes:[d.clone()]});m.walkRules(n),d=m.nodes[0]}let p=[c,t?d.clone():d];o.add(p),e.ruleCache.add(p),r.push(p)}}return r}function no(i){return i.startsWith(\"[\")&&i.endsWith(\"]\")}var vn,nC,uC,Sn=C(()=>{l();nt();vn=X(Be());za();Ct();un();pr();Ee();lt();Ka();Ua();cr();Xr();Ha();yt();ze();eo();nC=(0,vn.default)(i=>i.first.filter(({type:e})=>e===\"class\").pop().value);uC=/^[a-z_-]/});var _d,Od=C(()=>{l();_d={}});function wC(i){try{return _d.createHash(\"md5\").update(i,\"utf-8\").digest(\"binary\")}catch(e){return\"\"}}function Ed(i,e){let t=e.toString();if(!t.includes(\"@tailwind\"))return!1;let r=Ga.get(i),n=wC(t),a=r!==n;return Ga.set(i,n),a}var Td=C(()=>{l();Od();lt()});function An(i){return(i>0n)-(i<0n)}var Pd=C(()=>{l()});function Dd(i,e){let t=0n,r=0n;for(let[n,a]of e)i&n&&(t=t|n,r=r|a);return i&~t|r}var Id=C(()=>{l()});function qd(i){let e=null;for(let t of i)e=e??t,e=e>t?e:t;return e}function bC(i,e){let t=i.length,r=e.length,n=t<r?t:r;for(let a=0;a<n;a++){let s=i.charCodeAt(a)-e.charCodeAt(a);if(s!==0)return s}return t-r}var so,Rd=C(()=>{l();Pd();Id();so=class{constructor(){this.offsets={defaults:0n,base:0n,components:0n,utilities:0n,variants:0n,user:0n},this.layerPositions={defaults:0n,base:1n,components:2n,utilities:3n,user:4n,variants:5n},this.reservedVariantBits=0n,this.variantOffsets=new Map}create(e){return{layer:e,parentLayer:e,arbitrary:0n,variants:0n,parallelIndex:0n,index:this.offsets[e]++,propertyOffset:0n,property:\"\",options:[]}}arbitraryProperty(e){return{...this.create(\"utilities\"),arbitrary:1n,property:e}}forVariant(e,t=0){let r=this.variantOffsets.get(e);if(r===void 0)throw new Error(`Cannot find offset for unknown variant ${e}`);return{...this.create(\"variants\"),variants:r<<BigInt(t)}}applyVariantOffset(e,t,r){return r.variant=t.variants,{...e,layer:\"variants\",parentLayer:e.layer===\"variants\"?e.parentLayer:e.layer,variants:e.variants|t.variants,options:r.sort?[].concat(r,e.options):e.options,parallelIndex:qd([e.parallelIndex,t.parallelIndex])}}applyParallelOffset(e,t){return{...e,parallelIndex:BigInt(t)}}recordVariants(e,t){for(let r of e)this.recordVariant(r,t(r))}recordVariant(e,t=1){return this.variantOffsets.set(e,1n<<this.reservedVariantBits),this.reservedVariantBits+=BigInt(t),{...this.create(\"variants\"),variants:this.variantOffsets.get(e)}}compare(e,t){if(e.layer!==t.layer)return this.layerPositions[e.layer]-this.layerPositions[t.layer];if(e.parentLayer!==t.parentLayer)return this.layerPositions[e.parentLayer]-this.layerPositions[t.parentLayer];for(let r of e.options)for(let n of t.options){if(r.id!==n.id||!r.sort||!n.sort)continue;let a=qd([r.variant,n.variant])??0n,s=~(a|a-1n),o=e.variants&s,u=t.variants&s;if(o!==u)continue;let c=r.sort({value:r.value,modifier:r.modifier},{value:n.value,modifier:n.modifier});if(c!==0)return c}return e.variants!==t.variants?e.variants-t.variants:e.parallelIndex!==t.parallelIndex?e.parallelIndex-t.parallelIndex:e.arbitrary!==t.arbitrary?e.arbitrary-t.arbitrary:e.propertyOffset!==t.propertyOffset?e.propertyOffset-t.propertyOffset:e.index-t.index}recalculateVariantOffsets(){let e=Array.from(this.variantOffsets.entries()).filter(([n])=>n.startsWith(\"[\")).sort(([n],[a])=>bC(n,a)),t=e.map(([,n])=>n).sort((n,a)=>An(n-a));return e.map(([,n],a)=>[n,t[a]]).filter(([n,a])=>n!==a)}remapArbitraryVariantOffsets(e){let t=this.recalculateVariantOffsets();return t.length===0?e:e.map(r=>{let[n,a]=r;return n={...n,variants:Dd(n.variants,t)},[n,a]})}sortArbitraryProperties(e){let t=new Set;for(let[s]of e)s.arbitrary===1n&&t.add(s.property);if(t.size===0)return e;let r=Array.from(t).sort(),n=new Map,a=1n;for(let s of r)n.set(s,a++);return e.map(s=>{let[o,u]=s;return o={...o,propertyOffset:n.get(o.property)??0n},[o,u]})}sort(e){return e=this.remapArbitraryVariantOffsets(e),e=this.sortArbitraryProperties(e),e.sort(([t],[r])=>An(this.compare(t,r)))}}});function uo(i,e){let t=i.tailwindConfig.prefix;return typeof t==\"function\"?t(e):t+e}function Bd({type:i=\"any\",...e}){let t=[].concat(i);return{...e,types:t.map(r=>Array.isArray(r)?{type:r[0],...r[1]}:{type:r,preferOnConflict:!1})}}function vC(i){let e=[],t=\"\",r=0;for(let n=0;n<i.length;n++){let a=i[n];if(a===\"\\\\\")t+=\"\\\\\"+i[++n];else if(a===\"{\")++r,e.push(t.trim()),t=\"\";else if(a===\"}\"){if(--r<0)throw new Error(\"Your { and } are unbalanced.\");e.push(t.trim()),t=\"\"}else t+=a}return t.length>0&&e.push(t.trim()),e=e.filter(n=>n!==\"\"),e}function xC(i,e,{before:t=[]}={}){if(t=[].concat(t),t.length<=0){i.push(e);return}let r=i.length-1;for(let n of t){let a=i.indexOf(n);a!==-1&&(r=Math.min(r,a))}i.splice(r,0,e)}function Fd(i){return Array.isArray(i)?i.flatMap(e=>!Array.isArray(e)&&!se(e)?e:Bt(e)):Fd([i])}function kC(i,e){return(0,ao.default)(r=>{let n=[];return e&&e(r),r.walkClasses(a=>{n.push(a.value)}),n}).transformSync(i)}function SC(i){i.walkPseudos(e=>{e.value===\":not\"&&e.remove()})}function CC(i,e={containsNonOnDemandable:!1},t=0){let r=[],n=[];i.type===\"rule\"?n.push(...i.selectors):i.type===\"atrule\"&&i.walkRules(a=>n.push(...a.selectors));for(let a of n){let s=kC(a,SC);s.length===0&&(e.containsNonOnDemandable=!0);for(let o of s)r.push(o)}return t===0?[e.containsNonOnDemandable||r.length===0,r]:r}function _n(i){return Fd(i).flatMap(e=>{let t=new Map,[r,n]=CC(e);return r&&n.unshift(He),n.map(a=>(t.has(e)||t.set(e,e),[a,t.get(e)]))})}function Cn(i){return i.startsWith(\"@\")||i.includes(\"&\")}function Zr(i){i=i.replace(/\\n+/g,\"\").replace(/\\s{1,}/g,\" \").trim();let e=vC(i).map(t=>{if(!t.startsWith(\"@\"))return({format:a})=>a(t);let[,r,n]=/@(\\S*)( .+|[({].*)?/g.exec(t);return({wrap:a})=>a(z.atRule({name:r,params:n?.trim()??\"\"}))}).reverse();return t=>{for(let r of e)r(t)}}function AC(i,e,{variantList:t,variantMap:r,offsets:n,classList:a}){function s(p,m){return p?(0,Md.default)(i,p,m):i}function o(p){return Ft(i.prefix,p)}function u(p,m){return p===He?He:m.respectPrefix?e.tailwindConfig.prefix+p:p}function c(p,m,b={}){let x=Ke(p),y=s([\"theme\",...x],m);return Ge(x[0])(y,b)}let f=0,d={postcss:z,prefix:o,e:pe,config:s,theme:c,corePlugins:p=>Array.isArray(i.corePlugins)?i.corePlugins.includes(p):s([\"corePlugins\",p],!0),variants:()=>[],addBase(p){for(let[m,b]of _n(p)){let x=u(m,{}),y=n.create(\"base\");e.candidateRuleMap.has(x)||e.candidateRuleMap.set(x,[]),e.candidateRuleMap.get(x).push([{sort:y,layer:\"base\"},b])}},addDefaults(p,m){let b={[`@defaults ${p}`]:m};for(let[x,y]of _n(b)){let w=u(x,{});e.candidateRuleMap.has(w)||e.candidateRuleMap.set(w,[]),e.candidateRuleMap.get(w).push([{sort:n.create(\"defaults\"),layer:\"defaults\"},y])}},addComponents(p,m){m=Object.assign({},{preserveSource:!1,respectPrefix:!0,respectImportant:!1},Array.isArray(m)?{}:m);for(let[x,y]of _n(p)){let w=u(x,m);a.add(w),e.candidateRuleMap.has(w)||e.candidateRuleMap.set(w,[]),e.candidateRuleMap.get(w).push([{sort:n.create(\"components\"),layer:\"components\",options:m},y])}},addUtilities(p,m){m=Object.assign({},{preserveSource:!1,respectPrefix:!0,respectImportant:!0},Array.isArray(m)?{}:m);for(let[x,y]of _n(p)){let w=u(x,m);a.add(w),e.candidateRuleMap.has(w)||e.candidateRuleMap.set(w,[]),e.candidateRuleMap.get(w).push([{sort:n.create(\"utilities\"),layer:\"utilities\",options:m},y])}},matchUtilities:function(p,m){m=Bd({...{respectPrefix:!0,respectImportant:!0,modifiers:!1},...m});let x=n.create(\"utilities\");for(let y in p){let S=function(E,{isOnlyPlugin:I}){let[q,R,J]=us(m.types,E,m,i);if(q===void 0)return[];if(!m.types.some(({type:te})=>te===R))if(I)F.warn([`Unnecessary typehint \\`${R}\\` in \\`${y}-${E}\\`.`,`You can safely update it to \\`${y}-${E.replace(R+\":\",\"\")}\\`.`]);else return[];if(!Lt(q))return[];let fe={get modifier(){return m.modifiers||F.warn(`modifier-used-without-options-for-${y}`,[\"Your plugin must set `modifiers: true` in its options to support modifiers.\"]),J}},he=Z(i,\"generalizedModifiers\");return[].concat(he?k(q,fe):k(q)).filter(Boolean).map(te=>({[fn(y,E)]:te}))},w=u(y,m),k=p[y];a.add([w,m]);let _=[{sort:x,layer:\"utilities\",options:m},S];e.candidateRuleMap.has(w)||e.candidateRuleMap.set(w,[]),e.candidateRuleMap.get(w).push(_)}},matchComponents:function(p,m){m=Bd({...{respectPrefix:!0,respectImportant:!1,modifiers:!1},...m});let x=n.create(\"components\");for(let y in p){let S=function(E,{isOnlyPlugin:I}){let[q,R,J]=us(m.types,E,m,i);if(q===void 0)return[];if(!m.types.some(({type:te})=>te===R))if(I)F.warn([`Unnecessary typehint \\`${R}\\` in \\`${y}-${E}\\`.`,`You can safely update it to \\`${y}-${E.replace(R+\":\",\"\")}\\`.`]);else return[];if(!Lt(q))return[];let fe={get modifier(){return m.modifiers||F.warn(`modifier-used-without-options-for-${y}`,[\"Your plugin must set `modifiers: true` in its options to support modifiers.\"]),J}},he=Z(i,\"generalizedModifiers\");return[].concat(he?k(q,fe):k(q)).filter(Boolean).map(te=>({[fn(y,E)]:te}))},w=u(y,m),k=p[y];a.add([w,m]);let _=[{sort:x,layer:\"components\",options:m},S];e.candidateRuleMap.has(w)||e.candidateRuleMap.set(w,[]),e.candidateRuleMap.get(w).push(_)}},addVariant(p,m,b={}){m=[].concat(m).map(x=>{if(typeof x!=\"string\")return(y={})=>{let{args:w,modifySelectors:k,container:S,separator:_,wrap:E,format:I}=y,q=x(Object.assign({modifySelectors:k,container:S,separator:_},b.type===oo.MatchVariant&&{args:w,wrap:E,format:I}));if(typeof q==\"string\"&&!Cn(q))throw new Error(`Your custom variant \\`${p}\\` has an invalid format string. Make sure it's an at-rule or contains a \\`&\\` placeholder.`);return Array.isArray(q)?q.filter(R=>typeof R==\"string\").map(R=>Zr(R)):q&&typeof q==\"string\"&&Zr(q)(y)};if(!Cn(x))throw new Error(`Your custom variant \\`${p}\\` has an invalid format string. Make sure it's an at-rule or contains a \\`&\\` placeholder.`);return Zr(x)}),xC(t,p,b),r.set(p,m),e.variantOptions.set(p,b)},matchVariant(p,m,b){let x=b?.id??++f,y=p===\"@\",w=Z(i,\"generalizedModifiers\");for(let[S,_]of Object.entries(b?.values??{}))S!==\"DEFAULT\"&&d.addVariant(y?`${p}${S}`:`${p}-${S}`,({args:E,container:I})=>m(_,w?{modifier:E?.modifier,container:I}:{container:I}),{...b,value:_,id:x,type:oo.MatchVariant,variantInfo:lo.Base});let k=\"DEFAULT\"in(b?.values??{});d.addVariant(p,({args:S,container:_})=>S?.value===Kr&&!k?null:m(S?.value===Kr?b.values.DEFAULT:S?.value??(typeof S==\"string\"?S:\"\"),w?{modifier:S?.modifier,container:_}:{container:_}),{...b,id:x,type:oo.MatchVariant,variantInfo:lo.Dynamic})}};return d}function On(i){return fo.has(i)||fo.set(i,new Map),fo.get(i)}function Nd(i,e){let t=!1,r=new Map;for(let n of i){if(!n)continue;let a=gs.parse(n),s=a.hash?a.href.replace(a.hash,\"\"):a.href;s=a.search?s.replace(a.search,\"\"):s;let o=re.statSync(decodeURIComponent(s),{throwIfNoEntry:!1})?.mtimeMs;!o||((!e.has(n)||o>e.get(n))&&(t=!0),r.set(n,o))}return[t,r]}function Ld(i){i.walkAtRules(e=>{[\"responsive\",\"variants\"].includes(e.name)&&(Ld(e),e.before(e.nodes),e.remove())})}function _C(i){let e=[];return i.each(t=>{t.type===\"atrule\"&&[\"responsive\",\"variants\"].includes(t.name)&&(t.name=\"layer\",t.params=\"utilities\")}),i.walkAtRules(\"layer\",t=>{if(Ld(t),t.params===\"base\"){for(let r of t.nodes)e.push(function({addBase:n}){n(r,{respectPrefix:!1})});t.remove()}else if(t.params===\"components\"){for(let r of t.nodes)e.push(function({addComponents:n}){n(r,{respectPrefix:!1,preserveSource:!0})});t.remove()}else if(t.params===\"utilities\"){for(let r of t.nodes)e.push(function({addUtilities:n}){n(r,{respectPrefix:!1,preserveSource:!0})});t.remove()}}),e}function OC(i,e){let t=Object.entries({...H,...hd}).map(([u,c])=>i.tailwindConfig.corePlugins.includes(u)?c:null).filter(Boolean),r=i.tailwindConfig.plugins.map(u=>(u.__isOptionsFunction&&(u=u()),typeof u==\"function\"?u:u.handler)),n=_C(e),a=[H.childVariant,H.pseudoElementVariants,H.pseudoClassVariants,H.hasVariants,H.ariaVariants,H.dataVariants],s=[H.supportsVariants,H.reducedMotionVariants,H.prefersContrastVariants,H.screenVariants,H.orientationVariants,H.directionVariants,H.darkVariants,H.forcedColorsVariants,H.printVariant];return(i.tailwindConfig.darkMode===\"class\"||Array.isArray(i.tailwindConfig.darkMode)&&i.tailwindConfig.darkMode[0]===\"class\")&&(s=[H.supportsVariants,H.reducedMotionVariants,H.prefersContrastVariants,H.darkVariants,H.screenVariants,H.orientationVariants,H.directionVariants,H.forcedColorsVariants,H.printVariant]),[...t,...a,...r,...s,...n]}function EC(i,e){let t=[],r=new Map;e.variantMap=r;let n=new so;e.offsets=n;let a=new Set,s=AC(e.tailwindConfig,e,{variantList:t,variantMap:r,offsets:n,classList:a});for(let f of i)if(Array.isArray(f))for(let d of f)d(s);else f?.(s);n.recordVariants(t,f=>r.get(f).length);for(let[f,d]of r.entries())e.variantMap.set(f,d.map((p,m)=>[n.forVariant(f,m),p]));let o=(e.tailwindConfig.safelist??[]).filter(Boolean);if(o.length>0){let f=[];for(let d of o){if(typeof d==\"string\"){e.changedContent.push({content:d,extension:\"html\"});continue}if(d instanceof RegExp){F.warn(\"root-regex\",[\"Regular expressions in `safelist` work differently in Tailwind CSS v3.0.\",\"Update your `safelist` configuration to eliminate this warning.\",\"https://tailwindcss.com/docs/content-configuration#safelisting-classes\"]);continue}f.push(d)}if(f.length>0){let d=new Map,p=e.tailwindConfig.prefix.length,m=f.some(b=>b.pattern.source.includes(\"!\"));for(let b of a){let x=Array.isArray(b)?(()=>{let[y,w]=b,S=Object.keys(w?.values??{}).map(_=>Jr(y,_));return w?.supportsNegativeValues&&(S=[...S,...S.map(_=>\"-\"+_)],S=[...S,...S.map(_=>_.slice(0,p)+\"-\"+_.slice(p))]),w.types.some(({type:_})=>_===\"color\")&&(S=[...S,...S.flatMap(_=>Object.keys(e.tailwindConfig.theme.opacity).map(E=>`${_}/${E}`))]),m&&w?.respectImportant&&(S=[...S,...S.map(_=>\"!\"+_)]),S})():[b];for(let y of x)for(let{pattern:w,variants:k=[]}of f)if(w.lastIndex=0,d.has(w)||d.set(w,0),!!w.test(y)){d.set(w,d.get(w)+1),e.changedContent.push({content:y,extension:\"html\"});for(let S of k)e.changedContent.push({content:S+e.tailwindConfig.separator+y,extension:\"html\"})}}for(let[b,x]of d.entries())x===0&&F.warn([`The safelist pattern \\`${b}\\` doesn't match any Tailwind CSS classes.`,\"Fix this pattern or remove it from your `safelist` configuration.\",\"https://tailwindcss.com/docs/content-configuration#safelisting-classes\"])}}let u=[].concat(e.tailwindConfig.darkMode??\"media\")[1]??\"dark\",c=[uo(e,u),uo(e,\"group\"),uo(e,\"peer\")];e.getClassOrder=function(d){let p=[...d].sort((y,w)=>y===w?0:y<w?-1:1),m=new Map(p.map(y=>[y,null])),b=kn(new Set(p),e,!0);b=e.offsets.sort(b);let x=BigInt(c.length);for(let[,y]of b){let w=y.raws.tailwind.candidate;m.set(w,m.get(w)??x++)}return d.map(y=>{let w=m.get(y)??null,k=c.indexOf(y);return w===null&&k!==-1&&(w=BigInt(k)),[y,w]})},e.getClassList=function(d={}){let p=[];for(let m of a)if(Array.isArray(m)){let[b,x]=m,y=[],w=Object.keys(x?.modifiers??{});x?.types?.some(({type:_})=>_===\"color\")&&w.push(...Object.keys(e.tailwindConfig.theme.opacity??{}));let k={modifiers:w},S=d.includeMetadata&&w.length>0;for(let[_,E]of Object.entries(x?.values??{})){if(E==null)continue;let I=Jr(b,_);if(p.push(S?[I,k]:I),x?.supportsNegativeValues&&Xe(E)){let q=Jr(b,`-${_}`);y.push(S?[q,k]:q)}}p.push(...y)}else p.push(m);return p},e.getVariants=function(){let d=Math.random().toString(36).substring(7).toUpperCase(),p=[];for(let[m,b]of e.variantOptions.entries())b.variantInfo!==lo.Base&&p.push({name:m,isArbitrary:b.type===Symbol.for(\"MATCH_VARIANT\"),values:Object.keys(b.values??{}),hasDash:m!==\"@\",selectors({modifier:x,value:y}={}){let w=`TAILWINDPLACEHOLDER${d}`,k=z.rule({selector:`.${w}`}),S=z.root({nodes:[k.clone()]}),_=S.toString(),E=(e.variantMap.get(m)??[]).flatMap(([le,me])=>me),I=[];for(let le of E){let me=[],ai={args:{modifier:x,value:b.values?.[y]??y},separator:e.tailwindConfig.separator,modifySelectors(Ae){return S.each(Yn=>{Yn.type===\"rule\"&&(Yn.selectors=Yn.selectors.map(su=>Ae({get className(){return to(su)},selector:su})))}),S},format(Ae){me.push(Ae)},wrap(Ae){me.push(`@${Ae.name} ${Ae.params} { & }`)},container:S},oi=le(ai);if(me.length>0&&I.push(me),Array.isArray(oi))for(let Ae of oi)me=[],Ae(ai),I.push(me)}let q=[],R=S.toString();_!==R&&(S.walkRules(le=>{let me=le.selector,ai=(0,ao.default)(oi=>{oi.walkClasses(Ae=>{Ae.value=`${m}${e.tailwindConfig.separator}${Ae.value}`})}).processSync(me);q.push(me.replace(ai,\"&\").replace(w,\"&\"))}),S.walkAtRules(le=>{q.push(`@${le.name} (${le.params}) { & }`)}));let J=!(y in(b.values??{})),fe=b[ot]??{},he=(()=>!(J||fe.respectPrefix===!1))();I=I.map(le=>le.map(me=>({format:me,respectPrefix:he}))),q=q.map(le=>({format:le,respectPrefix:he}));let Ie={candidate:w,context:e},te=I.map(le=>wn(`.${w}`,jt(le,Ie),Ie).replace(`.${w}`,\"&\").replace(\"{ & }\",\"\").trim());return q.length>0&&te.push(jt(q,Ie).toString().replace(`.${w}`,\"&\")),te}});return p}}function $d(i,e){!i.classCache.has(e)||(i.notClassCache.add(e),i.classCache.delete(e),i.applyClassCache.delete(e),i.candidateRuleMap.delete(e),i.candidateRuleCache.delete(e),i.stylesheetCache=null)}function TC(i,e){let t=e.raws.tailwind.candidate;if(!!t){for(let r of i.ruleCache)r[1].raws.tailwind.candidate===t&&i.ruleCache.delete(r);$d(i,t)}}function co(i,e=[],t=z.root()){let r={disposables:[],ruleCache:new Set,candidateRuleCache:new Map,classCache:new Map,applyClassCache:new Map,notClassCache:new Set(i.blocklist??[]),postCssNodeCache:new Map,candidateRuleMap:new Map,tailwindConfig:i,changedContent:e,variantMap:new Map,stylesheetCache:null,variantOptions:new Map,markInvalidUtilityCandidate:a=>$d(r,a),markInvalidUtilityNode:a=>TC(r,a)},n=OC(r,t);return EC(n,r),r}function jd(i,e,t,r,n,a){let s=e.opts.from,o=r!==null;De.DEBUG&&console.log(\"Source path:\",s);let u;if(o&&zt.has(s))u=zt.get(s);else if(ei.has(n)){let p=ei.get(n);ut.get(p).add(s),zt.set(s,p),u=p}let c=Ed(s,i);if(u){let[p,m]=Nd([...a],On(u));if(!p&&!c)return[u,!1,m]}if(zt.has(s)){let p=zt.get(s);if(ut.has(p)&&(ut.get(p).delete(s),ut.get(p).size===0)){ut.delete(p);for(let[m,b]of ei)b===p&&ei.delete(m);for(let m of p.disposables.splice(0))m(p)}}De.DEBUG&&console.log(\"Setting up new context...\");let f=co(t,[],i);Object.assign(f,{userConfigPath:r});let[,d]=Nd([...a],On(f));return ei.set(n,f),zt.set(s,f),ut.has(f)||ut.set(f,new Set),ut.get(f).add(s),[f,!0,d]}var Md,ao,ot,oo,lo,fo,zt,ei,ut,Xr=C(()=>{l();je();ys();nt();Md=X(Ls()),ao=X(Be());Yr();za();un();Ct();Nt();Ua();pr();md();lt();lt();pi();Ee();fi();Ha();Sn();Td();Rd();ze();Ka();ot=Symbol(),oo={AddVariant:Symbol.for(\"ADD_VARIANT\"),MatchVariant:Symbol.for(\"MATCH_VARIANT\")},lo={Base:1<<0,Dynamic:1<<1};fo=new WeakMap;zt=gd,ei=yd,ut=gn});function po(i){return i.ignore?[]:i.glob?h.env.ROLLUP_WATCH===\"true\"?[{type:\"dependency\",file:i.base}]:[{type:\"dir-dependency\",dir:i.base,glob:i.glob}]:[{type:\"dependency\",file:i.base}]}var zd=C(()=>{l()});function Vd(i,e){return{handler:i,config:e}}var Ud,Wd=C(()=>{l();Vd.withOptions=function(i,e=()=>({})){let t=function(r){return{__options:r,handler:i(r),config:e(r)}};return t.__isOptionsFunction=!0,t.__pluginFunction=i,t.__configFunction=e,t};Ud=Vd});var ho={};_e(ho,{default:()=>PC});var PC,mo=C(()=>{l();Wd();PC=Ud});var Hd=v((c6,Gd)=>{l();var DC=(mo(),ho).default,IC={overflow:\"hidden\",display:\"-webkit-box\",\"-webkit-box-orient\":\"vertical\"},qC=DC(function({matchUtilities:i,addUtilities:e,theme:t,variants:r}){let n=t(\"lineClamp\");i({\"line-clamp\":a=>({...IC,\"-webkit-line-clamp\":`${a}`})},{values:n}),e([{\".line-clamp-none\":{\"-webkit-line-clamp\":\"unset\"}}],r(\"lineClamp\"))},{theme:{lineClamp:{1:\"1\",2:\"2\",3:\"3\",4:\"4\",5:\"5\",6:\"6\"}},variants:{lineClamp:[\"responsive\"]}});Gd.exports=qC});function go(i){i.content.files.length===0&&F.warn(\"content-problems\",[\"The `content` option in your Tailwind CSS configuration is missing or empty.\",\"Configure your content sources or your generated CSS will be missing styles.\",\"https://tailwindcss.com/docs/content-configuration\"]);try{let e=Hd();i.plugins.includes(e)&&(F.warn(\"line-clamp-in-core\",[\"As of Tailwind CSS v3.3, the `@tailwindcss/line-clamp` plugin is now included by default.\",\"Remove it from the `plugins` array in your configuration to eliminate this warning.\"]),i.plugins=i.plugins.filter(t=>t!==e))}catch{}return i}var Yd=C(()=>{l();Ee()});var Qd,Jd=C(()=>{l();Qd=()=>!1});var En,Xd=C(()=>{l();En={sync:i=>[].concat(i),generateTasks:i=>[{dynamic:!1,base:\".\",negative:[],positive:[].concat(i),patterns:[].concat(i)}],escapePath:i=>i}});var yo,Kd=C(()=>{l();yo=i=>i});var Zd,eh=C(()=>{l();Zd=()=>\"\"});function th(i){let e=i,t=Zd(i);return t!==\".\"&&(e=i.substr(t.length),e.charAt(0)===\"/\"&&(e=e.substr(1))),e.substr(0,2)===\"./\"?e=e.substr(2):e.charAt(0)===\"/\"&&(e=e.substr(1)),{base:t,glob:e}}var rh=C(()=>{l();eh()});function ih(i,e){let t=e.content.files;t=t.filter(o=>typeof o==\"string\"),t=t.map(yo);let r=En.generateTasks(t),n=[],a=[];for(let o of r)n.push(...o.positive.map(u=>nh(u,!1))),a.push(...o.negative.map(u=>nh(u,!0)));let s=[...n,...a];return s=MC(i,s),s=s.flatMap(BC),s=s.map(RC),s}function nh(i,e){let t={original:i,base:i,ignore:e,pattern:i,glob:null};return Qd(i)&&Object.assign(t,th(i)),t}function RC(i){let e=yo(i.base);return e=En.escapePath(e),i.pattern=i.glob?`${e}/${i.glob}`:e,i.pattern=i.ignore?`!${i.pattern}`:i.pattern,i}function MC(i,e){let t=[];return i.userConfigPath&&i.tailwindConfig.content.relative&&(t=[ee.dirname(i.userConfigPath)]),e.map(r=>(r.base=ee.resolve(...t,r.base),r))}function BC(i){let e=[i];try{let t=re.realpathSync(i.base);t!==i.base&&e.push({...i,base:t})}catch{}return e}function sh(i,e,t){let r=i.tailwindConfig.content.files.filter(s=>typeof s.raw==\"string\").map(({raw:s,extension:o=\"html\"})=>({content:s,extension:o})),[n,a]=FC(e,t);for(let s of n){let o=ee.extname(s).slice(1);r.push({file:s,extension:o})}return[r,a]}function FC(i,e){let t=i.map(s=>s.pattern),r=new Map,n=new Set;De.DEBUG&&console.time(\"Finding changed files\");let a=En.sync(t,{absolute:!0});for(let s of a){let o=e.get(s)||-1/0,u=re.statSync(s).mtimeMs;u>o&&(n.add(s),r.set(s,u))}return De.DEBUG&&console.timeEnd(\"Finding changed files\"),[n,r]}var ah=C(()=>{l();je();wt();Jd();Xd();Kd();rh();lt()});function oh(){}var lh=C(()=>{l()});function jC(i,e){for(let t of e){let r=`${i}${t}`;if(re.existsSync(r)&&re.statSync(r).isFile())return r}for(let t of e){let r=`${i}/index${t}`;if(re.existsSync(r))return r}return null}function*uh(i,e,t,r=ee.extname(i)){let n=jC(ee.resolve(e,i),NC.includes(r)?LC:$C);if(n===null||t.has(n))return;t.add(n),yield n,e=ee.dirname(n),r=ee.extname(n);let a=re.readFileSync(n,\"utf-8\");for(let s of[...a.matchAll(/import[\\s\\S]*?['\"](.{3,}?)['\"]/gi),...a.matchAll(/import[\\s\\S]*from[\\s\\S]*?['\"](.{3,}?)['\"]/gi),...a.matchAll(/require\\(['\"`](.+)['\"`]\\)/gi)])!s[1].startsWith(\".\")||(yield*uh(s[1],e,t,r))}function wo(i){return i===null?new Set:new Set(uh(i,ee.dirname(i),new Set))}var NC,LC,$C,fh=C(()=>{l();je();wt();NC=[\".js\",\".cjs\",\".mjs\"],LC=[\"\",\".js\",\".cjs\",\".mjs\",\".ts\",\".cts\",\".mts\",\".jsx\",\".tsx\"],$C=[\"\",\".ts\",\".cts\",\".mts\",\".tsx\",\".js\",\".cjs\",\".mjs\",\".jsx\"]});function zC(i,e){if(bo.has(i))return bo.get(i);let t=ih(i,e);return bo.set(i,t).get(i)}function VC(i){let e=ms(i);if(e!==null){let[r,n,a,s]=ph.get(e)||[],o=wo(e),u=!1,c=new Map;for(let p of o){let m=re.statSync(p).mtimeMs;c.set(p,m),(!s||!s.has(p)||m>s.get(p))&&(u=!0)}if(!u)return[r,e,n,a];for(let p of o)delete ou.cache[p];let f=go(hr(oh(e))),d=ui(f);return ph.set(e,[f,d,o,c]),[f,e,d,o]}let t=hr(i?.config??i??{});return t=go(t),[t,null,ui(t),[]]}function vo(i){return({tailwindDirectives:e,registerDependency:t})=>(r,n)=>{let[a,s,o,u]=VC(i),c=new Set(u);if(e.size>0){c.add(n.opts.from);for(let b of n.messages)b.type===\"dependency\"&&c.add(b.file)}let[f,,d]=jd(r,n,a,s,o,c),p=On(f),m=zC(f,a);if(e.size>0){for(let y of m)for(let w of po(y))t(w);let[b,x]=sh(f,m,p);for(let y of b)f.changedContent.push(y);for(let[y,w]of x.entries())d.set(y,w)}for(let b of u)t({type:\"dependency\",file:b});for(let[b,x]of d.entries())p.set(b,x);return f}}var ch,ph,bo,dh=C(()=>{l();je();ch=X(Qn());pu();hs();tf();Xr();zd();Yd();ah();lh();fh();ph=new ch.default({maxSize:100}),bo=new WeakMap});function xo(i){let e=new Set,t=new Set,r=new Set;if(i.walkAtRules(n=>{n.name===\"apply\"&&r.add(n),n.name===\"import\"&&(n.params==='\"tailwindcss/base\"'||n.params===\"'tailwindcss/base'\"?(n.name=\"tailwind\",n.params=\"base\"):n.params==='\"tailwindcss/components\"'||n.params===\"'tailwindcss/components'\"?(n.name=\"tailwind\",n.params=\"components\"):n.params==='\"tailwindcss/utilities\"'||n.params===\"'tailwindcss/utilities'\"?(n.name=\"tailwind\",n.params=\"utilities\"):(n.params==='\"tailwindcss/screens\"'||n.params===\"'tailwindcss/screens'\"||n.params==='\"tailwindcss/variants\"'||n.params===\"'tailwindcss/variants'\")&&(n.name=\"tailwind\",n.params=\"variants\")),n.name===\"tailwind\"&&(n.params===\"screens\"&&(n.params=\"variants\"),e.add(n.params)),[\"layer\",\"responsive\",\"variants\"].includes(n.name)&&([\"responsive\",\"variants\"].includes(n.name)&&F.warn(`${n.name}-at-rule-deprecated`,[`The \\`@${n.name}\\` directive has been deprecated in Tailwind CSS v3.0.`,\"Use `@layer utilities` or `@layer components` instead.\",\"https://tailwindcss.com/docs/upgrade-guide#replace-variants-with-layer\"]),t.add(n))}),!e.has(\"base\")||!e.has(\"components\")||!e.has(\"utilities\")){for(let n of t)if(n.name===\"layer\"&&[\"base\",\"components\",\"utilities\"].includes(n.params)){if(!e.has(n.params))throw n.error(`\\`@layer ${n.params}\\` is used but no matching \\`@tailwind ${n.params}\\` directive is present.`)}else if(n.name===\"responsive\"){if(!e.has(\"utilities\"))throw n.error(\"`@responsive` is used but `@tailwind utilities` is missing.\")}else if(n.name===\"variants\"&&!e.has(\"utilities\"))throw n.error(\"`@variants` is used but `@tailwind utilities` is missing.\")}return{tailwindDirectives:e,applyDirectives:r}}var hh=C(()=>{l();Ee()});function kt(i,e=void 0,t=void 0){return i.map(r=>{let n=r.clone();return t!==void 0&&(n.raws.tailwind={...n.raws.tailwind,...t}),e!==void 0&&mh(n,a=>{if(a.raws.tailwind?.preserveSource===!0&&a.source)return!1;a.source=e}),n})}function mh(i,e){e(i)!==!1&&i.each?.(t=>mh(t,e))}var gh=C(()=>{l()});function ko(i){return i=Array.isArray(i)?i:[i],i=i.map(e=>e instanceof RegExp?e.source:e),i.join(\"\")}function we(i){return new RegExp(ko(i),\"g\")}function ft(i){return`(?:${i.map(ko).join(\"|\")})`}function So(i){return`(?:${ko(i)})?`}function wh(i){return i&&UC.test(i)?i.replace(yh,\"\\\\$&\"):i||\"\"}var yh,UC,bh=C(()=>{l();yh=/[\\\\^$.*+?()[\\]{}|]/g,UC=RegExp(yh.source)});function vh(i){let e=Array.from(WC(i));return t=>{let r=[];for(let n of e)for(let a of t.match(n)??[])r.push(YC(a));for(let n of r.slice()){let a=ie(n,\".\");for(let s=0;s<a.length;s++){let o=a[s];if(s>=a.length-1){r.push(o);continue}let u=parseInt(a[s+1]);isNaN(u)?r.push(o):s++}}return r}}function*WC(i){let e=i.tailwindConfig.separator,t=i.tailwindConfig.prefix!==\"\"?So(we([/-?/,wh(i.tailwindConfig.prefix)])):\"\",r=ft([/\\[[^\\s:'\"`]+:[^\\s\\[\\]]+\\]/,/\\[[^\\s:'\"`\\]]+:[^\\s]+?\\[[^\\s]+\\][^\\s]+?\\]/,we([ft([/-?(?:\\w+)/,/@(?:\\w+)/]),So(ft([we([ft([/-(?:\\w+-)*\\['[^\\s]+'\\]/,/-(?:\\w+-)*\\[\"[^\\s]+\"\\]/,/-(?:\\w+-)*\\[`[^\\s]+`\\]/,/-(?:\\w+-)*\\[(?:[^\\s\\[\\]]+\\[[^\\s\\[\\]]+\\])*[^\\s:\\[\\]]+\\]/]),/(?![{([]])/,/(?:\\/[^\\s'\"`\\\\><$]*)?/]),we([ft([/-(?:\\w+-)*\\['[^\\s]+'\\]/,/-(?:\\w+-)*\\[\"[^\\s]+\"\\]/,/-(?:\\w+-)*\\[`[^\\s]+`\\]/,/-(?:\\w+-)*\\[(?:[^\\s\\[\\]]+\\[[^\\s\\[\\]]+\\])*[^\\s\\[\\]]+\\]/]),/(?![{([]])/,/(?:\\/[^\\s'\"`\\\\$]*)?/]),/[-\\/][^\\s'\"`\\\\$={><]*/]))])]),n=[ft([we([/@\\[[^\\s\"'`]+\\](\\/[^\\s\"'`]+)?/,e]),we([/([^\\s\"'`\\[\\\\]+-)?\\[[^\\s\"'`]+\\]\\/[\\w_-]+/,e]),we([/([^\\s\"'`\\[\\\\]+-)?\\[[^\\s\"'`]+\\]/,e]),we([/[^\\s\"'`\\[\\\\]+/,e])]),ft([we([/([^\\s\"'`\\[\\\\]+-)?\\[[^\\s`]+\\]\\/[\\w_-]+/,e]),we([/([^\\s\"'`\\[\\\\]+-)?\\[[^\\s`]+\\]/,e]),we([/[^\\s`\\[\\\\]+/,e])])];for(let a of n)yield we([\"((?=((\",a,\")+))\\\\2)?\",/!?/,t,r])}function YC(i){if(!i.includes(\"-[\"))return i;let e=0,t=[],r=i.matchAll(GC);r=Array.from(r).flatMap(n=>{let[,...a]=n;return a.map((s,o)=>Object.assign([],n,{index:n.index+o,0:s}))});for(let n of r){let a=n[0],s=t[t.length-1];if(a===s?t.pop():(a===\"'\"||a==='\"'||a===\"`\")&&t.push(a),!s){if(a===\"[\"){e++;continue}else if(a===\"]\"){e--;continue}if(e<0)return i.substring(0,n.index-1);if(e===0&&!HC.test(a))return i.substring(0,n.index)}}return i}var GC,HC,xh=C(()=>{l();bh();yt();GC=/([\\[\\]'\"`])([^\\[\\]'\"`])?/g,HC=/[^\"'`\\s<>\\]]+/});function QC(i,e){let t=i.tailwindConfig.content.extract;return t[e]||t.DEFAULT||Sh[e]||Sh.DEFAULT(i)}function JC(i,e){let t=i.content.transform;return t[e]||t.DEFAULT||Ch[e]||Ch.DEFAULT}function XC(i,e,t,r){ti.has(e)||ti.set(e,new kh.default({maxSize:25e3}));for(let n of i.split(`\n`))if(n=n.trim(),!r.has(n))if(r.add(n),ti.get(e).has(n))for(let a of ti.get(e).get(n))t.add(a);else{let a=e(n).filter(o=>o!==\"!*\"),s=new Set(a);for(let o of s)t.add(o);ti.get(e).set(n,s)}}function KC(i,e){let t=e.offsets.sort(i),r={base:new Set,defaults:new Set,components:new Set,utilities:new Set,variants:new Set};for(let[n,a]of t)r[n.layer].add(a);return r}function Co(i){return async e=>{let t={base:null,components:null,utilities:null,variants:null};if(e.walkAtRules(y=>{y.name===\"tailwind\"&&Object.keys(t).includes(y.params)&&(t[y.params]=y)}),Object.values(t).every(y=>y===null))return e;let r=new Set([...i.candidates??[],He]),n=new Set;Ye.DEBUG&&console.time(\"Reading changed files\");let a=[];for(let y of i.changedContent){let w=JC(i.tailwindConfig,y.extension),k=QC(i,y.extension);a.push([y,{transformer:w,extractor:k}])}let s=500;for(let y=0;y<a.length;y+=s){let w=a.slice(y,y+s);await Promise.all(w.map(async([{file:k,content:S},{transformer:_,extractor:E}])=>{S=k?await re.promises.readFile(k,\"utf8\"):S,XC(_(S),E,r,n)}))}Ye.DEBUG&&console.timeEnd(\"Reading changed files\");let o=i.classCache.size;Ye.DEBUG&&console.time(\"Generate rules\"),Ye.DEBUG&&console.time(\"Sorting candidates\");let u=new Set([...r].sort((y,w)=>y===w?0:y<w?-1:1));Ye.DEBUG&&console.timeEnd(\"Sorting candidates\"),kn(u,i),Ye.DEBUG&&console.timeEnd(\"Generate rules\"),Ye.DEBUG&&console.time(\"Build stylesheet\"),(i.stylesheetCache===null||i.classCache.size!==o)&&(i.stylesheetCache=KC([...i.ruleCache],i)),Ye.DEBUG&&console.timeEnd(\"Build stylesheet\");let{defaults:c,base:f,components:d,utilities:p,variants:m}=i.stylesheetCache;t.base&&(t.base.before(kt([...f,...c],t.base.source,{layer:\"base\"})),t.base.remove()),t.components&&(t.components.before(kt([...d],t.components.source,{layer:\"components\"})),t.components.remove()),t.utilities&&(t.utilities.before(kt([...p],t.utilities.source,{layer:\"utilities\"})),t.utilities.remove());let b=Array.from(m).filter(y=>{let w=y.raws.tailwind?.parentLayer;return w===\"components\"?t.components!==null:w===\"utilities\"?t.utilities!==null:!0});t.variants?(t.variants.before(kt(b,t.variants.source,{layer:\"variants\"})),t.variants.remove()):b.length>0&&e.append(kt(b,e.source,{layer:\"variants\"})),e.source.end=e.source.end??e.source.start;let x=b.some(y=>y.raws.tailwind?.parentLayer===\"utilities\");t.utilities&&p.size===0&&!x&&F.warn(\"content-problems\",[\"No utility classes were detected in your source files. If this is unexpected, double-check the `content` option in your Tailwind CSS configuration.\",\"https://tailwindcss.com/docs/content-configuration\"]),Ye.DEBUG&&(console.log(\"Potential classes: \",r.size),console.log(\"Active contexts: \",gn.size)),i.changedContent=[],e.walkAtRules(\"layer\",y=>{Object.keys(t).includes(y.params)&&y.remove()})}}var kh,Ye,Sh,Ch,ti,Ah=C(()=>{l();je();kh=X(Qn());lt();Sn();Ee();gh();xh();Ye=De,Sh={DEFAULT:vh},Ch={DEFAULT:i=>i,svelte:i=>i.replace(/(?:^|\\s)class:/g,\" \")};ti=new WeakMap});function Pn(i){let e=new Map;z.root({nodes:[i.clone()]}).walkRules(a=>{(0,Tn.default)(s=>{s.walkClasses(o=>{let u=o.parent.toString(),c=e.get(u);c||e.set(u,c=new Set),c.add(o.value)})}).processSync(a.selector)});let r=Array.from(e.values(),a=>Array.from(a)),n=r.flat();return Object.assign(n,{groups:r})}function Ao(i){return ZC.astSync(i)}function _h(i,e){let t=new Set;for(let r of i)t.add(r.split(e).pop());return Array.from(t)}function Oh(i,e){let t=i.tailwindConfig.prefix;return typeof t==\"function\"?t(e):t+e}function*Eh(i){for(yield i;i.parent;)yield i.parent,i=i.parent}function e2(i,e={}){let t=i.nodes;i.nodes=[];let r=i.clone(e);return i.nodes=t,r}function t2(i){for(let e of Eh(i))if(i!==e){if(e.type===\"root\")break;i=e2(e,{nodes:[i]})}return i}function r2(i,e){let t=new Map;return i.walkRules(r=>{for(let s of Eh(r))if(s.raws.tailwind?.layer!==void 0)return;let n=t2(r),a=e.offsets.create(\"user\");for(let s of Pn(r)){let o=t.get(s)||[];t.set(s,o),o.push([{layer:\"user\",sort:a,important:!1},n])}}),t}function i2(i,e){for(let t of i){if(e.notClassCache.has(t)||e.applyClassCache.has(t))continue;if(e.classCache.has(t)){e.applyClassCache.set(t,e.classCache.get(t).map(([n,a])=>[n,a.clone()]));continue}let r=Array.from(io(t,e));if(r.length===0){e.notClassCache.add(t);continue}e.applyClassCache.set(t,r)}return e.applyClassCache}function n2(i){let e=null;return{get:t=>(e=e||i(),e.get(t)),has:t=>(e=e||i(),e.has(t))}}function s2(i){return{get:e=>i.flatMap(t=>t.get(e)||[]),has:e=>i.some(t=>t.has(e))}}function Th(i){let e=i.split(/[\\s\\t\\n]+/g);return e[e.length-1]===\"!important\"?[e.slice(0,-1),!0]:[e,!1]}function Ph(i,e,t){let r=new Set,n=[];if(i.walkAtRules(\"apply\",u=>{let[c]=Th(u.params);for(let f of c)r.add(f);n.push(u)}),n.length===0)return;let a=s2([t,i2(r,e)]);function s(u,c,f){let d=Ao(u),p=Ao(c),b=Ao(`.${pe(f)}`).nodes[0].nodes[0];return d.each(x=>{let y=new Set;p.each(w=>{let k=!1;w=w.clone(),w.walkClasses(S=>{S.value===b.value&&(k||(S.replaceWith(...x.nodes.map(_=>_.clone())),y.add(w),k=!0))})});for(let w of y){let k=[[]];for(let S of w.nodes)S.type===\"combinator\"?(k.push(S),k.push([])):k[k.length-1].push(S);w.nodes=[];for(let S of k)Array.isArray(S)&&S.sort((_,E)=>_.type===\"tag\"&&E.type===\"class\"?-1:_.type===\"class\"&&E.type===\"tag\"?1:_.type===\"class\"&&E.type===\"pseudo\"&&E.value.startsWith(\"::\")?-1:_.type===\"pseudo\"&&_.value.startsWith(\"::\")&&E.type===\"class\"?1:0),w.nodes=w.nodes.concat(S)}x.replaceWith(...y)}),d.toString()}let o=new Map;for(let u of n){let[c]=o.get(u.parent)||[[],u.source];o.set(u.parent,[c,u.source]);let[f,d]=Th(u.params);if(u.parent.type===\"atrule\"){if(u.parent.name===\"screen\"){let p=u.parent.params;throw u.error(`@apply is not supported within nested at-rules like @screen. We suggest you write this as @apply ${f.map(m=>`${p}:${m}`).join(\" \")} instead.`)}throw u.error(`@apply is not supported within nested at-rules like @${u.parent.name}. You can fix this by un-nesting @${u.parent.name}.`)}for(let p of f){if([Oh(e,\"group\"),Oh(e,\"peer\")].includes(p))throw u.error(`@apply should not be used with the '${p}' utility`);if(!a.has(p))throw u.error(`The \\`${p}\\` class does not exist. If \\`${p}\\` is a custom class, make sure it is defined within a \\`@layer\\` directive.`);let m=a.get(p);for(let[,b]of m)b.type!==\"atrule\"&&b.walkRules(()=>{throw u.error([`The \\`${p}\\` class cannot be used with \\`@apply\\` because \\`@apply\\` does not currently support nested CSS.`,\"Rewrite the selector without nesting or configure the `tailwindcss/nesting` plugin:\",\"https://tailwindcss.com/docs/using-with-preprocessors#nesting\"].join(`\n`))});c.push([p,d,m])}}for(let[u,[c,f]]of o){let d=[];for(let[m,b,x]of c){let y=[m,..._h([m],e.tailwindConfig.separator)];for(let[w,k]of x){let S=Pn(u),_=Pn(k);if(_=_.groups.filter(R=>R.some(J=>y.includes(J))).flat(),_=_.concat(_h(_,e.tailwindConfig.separator)),S.some(R=>_.includes(R)))throw k.error(`You cannot \\`@apply\\` the \\`${m}\\` utility here because it creates a circular dependency.`);let I=z.root({nodes:[k.clone()]});I.walk(R=>{R.source=f}),(k.type!==\"atrule\"||k.type===\"atrule\"&&k.name!==\"keyframes\")&&I.walkRules(R=>{if(!Pn(R).some(te=>te===m)){R.remove();return}let J=typeof e.tailwindConfig.important==\"string\"?e.tailwindConfig.important:null,he=u.raws.tailwind!==void 0&&J&&u.selector.indexOf(J)===0?u.selector.slice(J.length):u.selector;he===\"\"&&(he=u.selector),R.selector=s(he,R.selector,m),J&&he!==u.selector&&(R.selector=bn(R.selector,J)),R.walkDecls(te=>{te.important=w.important||b});let Ie=(0,Tn.default)().astSync(R.selector);Ie.each(te=>$t(te)),R.selector=Ie.toString()}),!!I.nodes[0]&&d.push([w.sort,I.nodes[0]])}}let p=e.offsets.sort(d).map(m=>m[1]);u.after(p)}for(let u of n)u.parent.nodes.length>1?u.remove():u.parent.remove();Ph(i,e,t)}function _o(i){return e=>{let t=n2(()=>r2(e,i));Ph(e,i,t)}}var Tn,ZC,Dh=C(()=>{l();nt();Tn=X(Be());Sn();Nt();eo();yn();ZC=(0,Tn.default)()});var Ih=v((uD,Dn)=>{l();(function(){\"use strict\";function i(r,n,a){if(!r)return null;i.caseSensitive||(r=r.toLowerCase());var s=i.threshold===null?null:i.threshold*r.length,o=i.thresholdAbsolute,u;s!==null&&o!==null?u=Math.min(s,o):s!==null?u=s:o!==null?u=o:u=null;var c,f,d,p,m,b=n.length;for(m=0;m<b;m++)if(f=n[m],a&&(f=f[a]),!!f&&(i.caseSensitive?d=f:d=f.toLowerCase(),p=t(r,d,u),(u===null||p<u)&&(u=p,a&&i.returnWinningObject?c=n[m]:c=f,i.returnFirstMatch)))return c;return c||i.nullResultValue}i.threshold=.4,i.thresholdAbsolute=20,i.caseSensitive=!1,i.nullResultValue=null,i.returnWinningObject=null,i.returnFirstMatch=!1,typeof Dn!=\"undefined\"&&Dn.exports?Dn.exports=i:window.didYouMean=i;var e=Math.pow(2,32)-1;function t(r,n,a){a=a||a===0?a:e;var s=r.length,o=n.length;if(s===0)return Math.min(a+1,o);if(o===0)return Math.min(a+1,s);if(Math.abs(s-o)>a)return a+1;var u=[],c,f,d,p,m;for(c=0;c<=o;c++)u[c]=[c];for(f=0;f<=s;f++)u[0][f]=f;for(c=1;c<=o;c++){for(d=e,p=1,c>a&&(p=c-a),m=o+1,m>a+c&&(m=a+c),f=1;f<=s;f++)f<p||f>m?u[c][f]=a+1:n.charAt(c-1)===r.charAt(f-1)?u[c][f]=u[c-1][f-1]:u[c][f]=Math.min(u[c-1][f-1]+1,Math.min(u[c][f-1]+1,u[c-1][f]+1)),u[c][f]<d&&(d=u[c][f]);if(d>a)return a+1}return u[o][s]}})()});var Rh=v((fD,qh)=>{l();var Oo=\"(\".charCodeAt(0),Eo=\")\".charCodeAt(0),In=\"'\".charCodeAt(0),To='\"'.charCodeAt(0),Po=\"\\\\\".charCodeAt(0),Vt=\"/\".charCodeAt(0),Do=\",\".charCodeAt(0),Io=\":\".charCodeAt(0),qn=\"*\".charCodeAt(0),a2=\"u\".charCodeAt(0),o2=\"U\".charCodeAt(0),l2=\"+\".charCodeAt(0),u2=/^[a-f0-9?-]+$/i;qh.exports=function(i){for(var e=[],t=i,r,n,a,s,o,u,c,f,d=0,p=t.charCodeAt(d),m=t.length,b=[{nodes:e}],x=0,y,w=\"\",k=\"\",S=\"\";d<m;)if(p<=32){r=d;do r+=1,p=t.charCodeAt(r);while(p<=32);s=t.slice(d,r),a=e[e.length-1],p===Eo&&x?S=s:a&&a.type===\"div\"?(a.after=s,a.sourceEndIndex+=s.length):p===Do||p===Io||p===Vt&&t.charCodeAt(r+1)!==qn&&(!y||y&&y.type===\"function\"&&!1)?k=s:e.push({type:\"space\",sourceIndex:d,sourceEndIndex:r,value:s}),d=r}else if(p===In||p===To){r=d,n=p===In?\"'\":'\"',s={type:\"string\",sourceIndex:d,quote:n};do if(o=!1,r=t.indexOf(n,r+1),~r)for(u=r;t.charCodeAt(u-1)===Po;)u-=1,o=!o;else t+=n,r=t.length-1,s.unclosed=!0;while(o);s.value=t.slice(d+1,r),s.sourceEndIndex=s.unclosed?r:r+1,e.push(s),d=r+1,p=t.charCodeAt(d)}else if(p===Vt&&t.charCodeAt(d+1)===qn)r=t.indexOf(\"*/\",d),s={type:\"comment\",sourceIndex:d,sourceEndIndex:r+2},r===-1&&(s.unclosed=!0,r=t.length,s.sourceEndIndex=r),s.value=t.slice(d+2,r),e.push(s),d=r+2,p=t.charCodeAt(d);else if((p===Vt||p===qn)&&y&&y.type===\"function\")s=t[d],e.push({type:\"word\",sourceIndex:d-k.length,sourceEndIndex:d+s.length,value:s}),d+=1,p=t.charCodeAt(d);else if(p===Vt||p===Do||p===Io)s=t[d],e.push({type:\"div\",sourceIndex:d-k.length,sourceEndIndex:d+s.length,value:s,before:k,after:\"\"}),k=\"\",d+=1,p=t.charCodeAt(d);else if(Oo===p){r=d;do r+=1,p=t.charCodeAt(r);while(p<=32);if(f=d,s={type:\"function\",sourceIndex:d-w.length,value:w,before:t.slice(f+1,r)},d=r,w===\"url\"&&p!==In&&p!==To){r-=1;do if(o=!1,r=t.indexOf(\")\",r+1),~r)for(u=r;t.charCodeAt(u-1)===Po;)u-=1,o=!o;else t+=\")\",r=t.length-1,s.unclosed=!0;while(o);c=r;do c-=1,p=t.charCodeAt(c);while(p<=32);f<c?(d!==c+1?s.nodes=[{type:\"word\",sourceIndex:d,sourceEndIndex:c+1,value:t.slice(d,c+1)}]:s.nodes=[],s.unclosed&&c+1!==r?(s.after=\"\",s.nodes.push({type:\"space\",sourceIndex:c+1,sourceEndIndex:r,value:t.slice(c+1,r)})):(s.after=t.slice(c+1,r),s.sourceEndIndex=r)):(s.after=\"\",s.nodes=[]),d=r+1,s.sourceEndIndex=s.unclosed?r:d,p=t.charCodeAt(d),e.push(s)}else x+=1,s.after=\"\",s.sourceEndIndex=d+1,e.push(s),b.push(s),e=s.nodes=[],y=s;w=\"\"}else if(Eo===p&&x)d+=1,p=t.charCodeAt(d),y.after=S,y.sourceEndIndex+=S.length,S=\"\",x-=1,b[b.length-1].sourceEndIndex=d,b.pop(),y=b[x],e=y.nodes;else{r=d;do p===Po&&(r+=1),r+=1,p=t.charCodeAt(r);while(r<m&&!(p<=32||p===In||p===To||p===Do||p===Io||p===Vt||p===Oo||p===qn&&y&&y.type===\"function\"&&!0||p===Vt&&y.type===\"function\"&&!0||p===Eo&&x));s=t.slice(d,r),Oo===p?w=s:(a2===s.charCodeAt(0)||o2===s.charCodeAt(0))&&l2===s.charCodeAt(1)&&u2.test(s.slice(2))?e.push({type:\"unicode-range\",sourceIndex:d,sourceEndIndex:r,value:s}):e.push({type:\"word\",sourceIndex:d,sourceEndIndex:r,value:s}),d=r}for(d=b.length-1;d;d-=1)b[d].unclosed=!0,b[d].sourceEndIndex=t.length;return b[0].nodes}});var Bh=v((cD,Mh)=>{l();Mh.exports=function i(e,t,r){var n,a,s,o;for(n=0,a=e.length;n<a;n+=1)s=e[n],r||(o=t(s,n,e)),o!==!1&&s.type===\"function\"&&Array.isArray(s.nodes)&&i(s.nodes,t,r),r&&t(s,n,e)}});var $h=v((pD,Lh)=>{l();function Fh(i,e){var t=i.type,r=i.value,n,a;return e&&(a=e(i))!==void 0?a:t===\"word\"||t===\"space\"?r:t===\"string\"?(n=i.quote||\"\",n+r+(i.unclosed?\"\":n)):t===\"comment\"?\"/*\"+r+(i.unclosed?\"\":\"*/\"):t===\"div\"?(i.before||\"\")+r+(i.after||\"\"):Array.isArray(i.nodes)?(n=Nh(i.nodes,e),t!==\"function\"?n:r+\"(\"+(i.before||\"\")+n+(i.after||\"\")+(i.unclosed?\"\":\")\")):r}function Nh(i,e){var t,r;if(Array.isArray(i)){for(t=\"\",r=i.length-1;~r;r-=1)t=Fh(i[r],e)+t;return t}return Fh(i,e)}Lh.exports=Nh});var zh=v((dD,jh)=>{l();var Rn=\"-\".charCodeAt(0),Mn=\"+\".charCodeAt(0),qo=\".\".charCodeAt(0),f2=\"e\".charCodeAt(0),c2=\"E\".charCodeAt(0);function p2(i){var e=i.charCodeAt(0),t;if(e===Mn||e===Rn){if(t=i.charCodeAt(1),t>=48&&t<=57)return!0;var r=i.charCodeAt(2);return t===qo&&r>=48&&r<=57}return e===qo?(t=i.charCodeAt(1),t>=48&&t<=57):e>=48&&e<=57}jh.exports=function(i){var e=0,t=i.length,r,n,a;if(t===0||!p2(i))return!1;for(r=i.charCodeAt(e),(r===Mn||r===Rn)&&e++;e<t&&(r=i.charCodeAt(e),!(r<48||r>57));)e+=1;if(r=i.charCodeAt(e),n=i.charCodeAt(e+1),r===qo&&n>=48&&n<=57)for(e+=2;e<t&&(r=i.charCodeAt(e),!(r<48||r>57));)e+=1;if(r=i.charCodeAt(e),n=i.charCodeAt(e+1),a=i.charCodeAt(e+2),(r===f2||r===c2)&&(n>=48&&n<=57||(n===Mn||n===Rn)&&a>=48&&a<=57))for(e+=n===Mn||n===Rn?3:2;e<t&&(r=i.charCodeAt(e),!(r<48||r>57));)e+=1;return{number:i.slice(0,e),unit:i.slice(e)}}});var Gh=v((hD,Wh)=>{l();var d2=Rh(),Vh=Bh(),Uh=$h();function ct(i){return this instanceof ct?(this.nodes=d2(i),this):new ct(i)}ct.prototype.toString=function(){return Array.isArray(this.nodes)?Uh(this.nodes):\"\"};ct.prototype.walk=function(i,e){return Vh(this.nodes,i,e),this};ct.unit=zh();ct.walk=Vh;ct.stringify=Uh;Wh.exports=ct});function Mo(i){return typeof i==\"object\"&&i!==null}function h2(i,e){let t=Ke(e);do if(t.pop(),(0,ri.default)(i,t)!==void 0)break;while(t.length);return t.length?t:void 0}function Ut(i){return typeof i==\"string\"?i:i.reduce((e,t,r)=>t.includes(\".\")?`${e}[${t}]`:r===0?t:`${e}.${t}`,\"\")}function Yh(i){return i.map(e=>`'${e}'`).join(\", \")}function Qh(i){return Yh(Object.keys(i))}function Bo(i,e,t,r={}){let n=Array.isArray(e)?Ut(e):e.replace(/^['\"]+|['\"]+$/g,\"\"),a=Array.isArray(e)?e:Ke(n),s=(0,ri.default)(i.theme,a,t);if(s===void 0){let u=`'${n}' does not exist in your theme config.`,c=a.slice(0,-1),f=(0,ri.default)(i.theme,c);if(Mo(f)){let d=Object.keys(f).filter(m=>Bo(i,[...c,m]).isValid),p=(0,Hh.default)(a[a.length-1],d);p?u+=` Did you mean '${Ut([...c,p])}'?`:d.length>0&&(u+=` '${Ut(c)}' has the following valid keys: ${Yh(d)}`)}else{let d=h2(i.theme,n);if(d){let p=(0,ri.default)(i.theme,d);Mo(p)?u+=` '${Ut(d)}' has the following keys: ${Qh(p)}`:u+=` '${Ut(d)}' is not an object.`}else u+=` Your theme has the following top-level keys: ${Qh(i.theme)}`}return{isValid:!1,error:u}}if(!(typeof s==\"string\"||typeof s==\"number\"||typeof s==\"function\"||s instanceof String||s instanceof Number||Array.isArray(s))){let u=`'${n}' was found but does not resolve to a string.`;if(Mo(s)){let c=Object.keys(s).filter(f=>Bo(i,[...a,f]).isValid);c.length&&(u+=` Did you mean something like '${Ut([...a,c[0]])}'?`)}return{isValid:!1,error:u}}let[o]=a;return{isValid:!0,value:Ge(o)(s,r)}}function m2(i,e,t){e=e.map(n=>Jh(i,n,t));let r=[\"\"];for(let n of e)n.type===\"div\"&&n.value===\",\"?r.push(\"\"):r[r.length-1]+=Ro.default.stringify(n);return r}function Jh(i,e,t){if(e.type===\"function\"&&t[e.value]!==void 0){let r=m2(i,e.nodes,t);e.type=\"word\",e.value=t[e.value](i,...r)}return e}function g2(i,e,t){return Object.keys(t).some(n=>e.includes(`${n}(`))?(0,Ro.default)(e).walk(n=>{Jh(i,n,t)}).toString():e}function*w2(i){i=i.replace(/^['\"]+|['\"]+$/g,\"\");let e=i.match(/^([^\\s]+)(?![^\\[]*\\])(?:\\s*\\/\\s*([^\\/\\s]+))$/),t;yield[i,void 0],e&&(i=e[1],t=e[2],yield[i,t])}function b2(i,e,t){let r=Array.from(w2(e)).map(([n,a])=>Object.assign(Bo(i,n,t,{opacityValue:a}),{resolvedPath:n,alpha:a}));return r.find(n=>n.isValid)??r[0]}function Xh(i){let e=i.tailwindConfig,t={theme:(r,n,...a)=>{let{isValid:s,value:o,error:u,alpha:c}=b2(e,n,a.length?a:void 0);if(!s){let p=r.parent,m=p?.raws.tailwind?.candidate;if(p&&m!==void 0){i.markInvalidUtilityNode(p),p.remove(),F.warn(\"invalid-theme-key-in-class\",[`The utility \\`${m}\\` contains an invalid theme value and was not generated.`]);return}throw r.error(u)}let f=At(o),d=f!==void 0&&typeof f==\"function\";return(c!==void 0||d)&&(c===void 0&&(c=1),o=qe(f,c,f)),o},screen:(r,n)=>{n=n.replace(/^['\"]+/g,\"\").replace(/['\"]+$/g,\"\");let s=at(e.theme.screens).find(({name:o})=>o===n);if(!s)throw r.error(`The '${n}' screen does not exist in your theme.`);return st(s)}};return r=>{r.walk(n=>{let a=y2[n.type];a!==void 0&&(n[a]=g2(n,n[a],t))})}}var ri,Hh,Ro,y2,Kh=C(()=>{l();ri=X(Ls()),Hh=X(Ih());Yr();Ro=X(Gh());hn();cn();pi();lr();pr();Ee();y2={atrule:\"params\",decl:\"value\"}});function Zh({tailwindConfig:{theme:i}}){return function(e){e.walkAtRules(\"screen\",t=>{let r=t.params,a=at(i.screens).find(({name:s})=>s===r);if(!a)throw t.error(`No \\`${r}\\` screen found.`);t.name=\"media\",t.params=st(a)})}}var em=C(()=>{l();hn();cn()});function v2(i){let e=i.filter(o=>o.type!==\"pseudo\"||o.nodes.length>0?!0:o.value.startsWith(\"::\")||[\":before\",\":after\",\":first-line\",\":first-letter\"].includes(o.value)).reverse(),t=new Set([\"tag\",\"class\",\"id\",\"attribute\"]),r=e.findIndex(o=>t.has(o.type));if(r===-1)return e.reverse().join(\"\").trim();let n=e[r],a=tm[n.type]?tm[n.type](n):n;e=e.slice(0,r);let s=e.findIndex(o=>o.type===\"combinator\"&&o.value===\">\");return s!==-1&&(e.splice(0,s),e.unshift(Bn.default.universal())),[a,...e.reverse()].join(\"\").trim()}function k2(i){return Fo.has(i)||Fo.set(i,x2.transformSync(i)),Fo.get(i)}function No({tailwindConfig:i}){return e=>{let t=new Map,r=new Set;if(e.walkAtRules(\"defaults\",n=>{if(n.nodes&&n.nodes.length>0){r.add(n);return}let a=n.params;t.has(a)||t.set(a,new Set),t.get(a).add(n.parent),n.remove()}),Z(i,\"optimizeUniversalDefaults\"))for(let n of r){let a=new Map,s=t.get(n.params)??[];for(let o of s)for(let u of k2(o.selector)){let c=u.includes(\":-\")||u.includes(\"::-\")||u.includes(\":has\")?u:\"__DEFAULT__\",f=a.get(c)??new Set;a.set(c,f),f.add(u)}if(Z(i,\"optimizeUniversalDefaults\")){if(a.size===0){n.remove();continue}for(let[,o]of a){let u=z.rule({source:n.source});u.selectors=[...o],u.append(n.nodes.map(c=>c.clone())),n.before(u)}}n.remove()}else if(r.size){let n=z.rule({selectors:[\"*\",\"::before\",\"::after\"]});for(let s of r)n.append(s.nodes),n.parent||s.before(n),n.source||(n.source=s.source),s.remove();let a=n.clone({selectors:[\"::backdrop\"]});n.after(a)}}}var Bn,tm,x2,Fo,rm=C(()=>{l();nt();Bn=X(Be());ze();tm={id(i){return Bn.default.attribute({attribute:\"id\",operator:\"=\",value:i.value,quoteMark:'\"'})}};x2=(0,Bn.default)(i=>i.map(e=>{let t=e.split(r=>r.type===\"combinator\"&&r.value===\" \").pop();return v2(t)})),Fo=new Map});function Lo(){function i(e){let t=null;e.each(r=>{if(!S2.has(r.type)){t=null;return}if(t===null){t=r;return}let n=im[r.type];r.type===\"atrule\"&&r.name===\"font-face\"?t=r:n.every(a=>(r[a]??\"\").replace(/\\s+/g,\" \")===(t[a]??\"\").replace(/\\s+/g,\" \"))?(r.nodes&&t.append(r.nodes),r.remove()):t=r}),e.each(r=>{r.type===\"atrule\"&&i(r)})}return e=>{i(e)}}var im,S2,nm=C(()=>{l();im={atrule:[\"name\",\"params\"],rule:[\"selector\"]},S2=new Set(Object.keys(im))});function $o(){return i=>{i.walkRules(e=>{let t=new Map,r=new Set([]),n=new Map;e.walkDecls(a=>{if(a.parent===e){if(t.has(a.prop)){if(t.get(a.prop).value===a.value){r.add(t.get(a.prop)),t.set(a.prop,a);return}n.has(a.prop)||n.set(a.prop,new Set),n.get(a.prop).add(t.get(a.prop)),n.get(a.prop).add(a)}t.set(a.prop,a)}});for(let a of r)a.remove();for(let a of n.values()){let s=new Map;for(let o of a){let u=A2(o.value);u!==null&&(s.has(u)||s.set(u,new Set),s.get(u).add(o))}for(let o of s.values()){let u=Array.from(o).slice(0,-1);for(let c of u)c.remove()}}})}}function A2(i){let e=/^-?\\d*.?\\d+([\\w%]+)?$/g.exec(i);return e?e[1]??C2:null}var C2,sm=C(()=>{l();C2=Symbol(\"unitless-number\")});function _2(i){if(!i.walkAtRules)return;let e=new Set;if(i.walkAtRules(\"apply\",t=>{e.add(t.parent)}),e.size!==0)for(let t of e){let r=[],n=[];for(let a of t.nodes)a.type===\"atrule\"&&a.name===\"apply\"?(n.length>0&&(r.push(n),n=[]),r.push([a])):n.push(a);if(n.length>0&&r.push(n),r.length!==1){for(let a of[...r].reverse()){let s=t.clone({nodes:[]});s.append(a),t.after(s)}t.remove()}}}function Fn(){return i=>{_2(i)}}var am=C(()=>{l()});function Nn(i){return async function(e,t){let{tailwindDirectives:r,applyDirectives:n}=xo(e);Fn()(e,t);let a=i({tailwindDirectives:r,applyDirectives:n,registerDependency(s){t.messages.push({plugin:\"tailwindcss\",parent:t.opts.from,...s})},createContext(s,o){return co(s,o,e)}})(e,t);if(a.tailwindConfig.separator===\"-\")throw new Error(\"The '-' character cannot be used as a custom separator in JIT mode due to parsing ambiguity. Please use another character like '_' instead.\");Su(a.tailwindConfig),await Co(a)(e,t),Fn()(e,t),_o(a)(e,t),Xh(a)(e,t),Zh(a)(e,t),No(a)(e,t),Lo(a)(e,t),$o(a)(e,t)}}var om=C(()=>{l();hh();Ah();Dh();Kh();em();rm();nm();sm();am();Xr();ze()});function lm(i,e){let t=null,r=null;return i.walkAtRules(\"config\",n=>{if(r=n.source?.input.file??e.opts.from??null,r===null)throw n.error(\"The `@config` directive cannot be used without setting `from` in your PostCSS config.\");if(t)throw n.error(\"Only one `@config` directive is allowed per file.\");let a=n.params.match(/(['\"])(.*?)\\1/);if(!a)throw n.error(\"A path is required when using the `@config` directive.\");let s=a[2];if(ee.isAbsolute(s))throw n.error(\"The `@config` directive cannot be used with an absolute path.\");if(t=ee.resolve(ee.dirname(r),s),!re.existsSync(t))throw n.error(`The config file at \"${s}\" does not exist. Make sure the path is correct and the file exists.`);n.remove()}),t||null}var um=C(()=>{l();je();wt()});var fm=v((XD,jo)=>{l();dh();om();lt();um();jo.exports=function(e){return{postcssPlugin:\"tailwindcss\",plugins:[De.DEBUG&&function(t){return console.log(`\n`),console.time(\"JIT TOTAL\"),t},async function(t,r){e=lm(t,r)??e;let n=vo(e);if(t.type===\"document\"){let a=t.nodes.filter(s=>s.type===\"root\");for(let s of a)s.type===\"root\"&&await Nn(n)(s,r);return}await Nn(n)(t,r)},De.DEBUG&&function(t){return console.timeEnd(\"JIT TOTAL\"),console.log(`\n`),t}].filter(Boolean)}};jo.exports.postcss=!0});var pm=v((KD,cm)=>{l();cm.exports=fm()});var zo=v((ZD,dm)=>{l();dm.exports=()=>[\"and_chr 114\",\"and_uc 15.5\",\"chrome 114\",\"chrome 113\",\"chrome 109\",\"edge 114\",\"firefox 114\",\"ios_saf 16.5\",\"ios_saf 16.4\",\"ios_saf 16.3\",\"ios_saf 16.1\",\"opera 99\",\"safari 16.5\",\"samsung 21\"]});var Ln={};_e(Ln,{agents:()=>O2,feature:()=>E2});function E2(){return{status:\"cr\",title:\"CSS Feature Queries\",stats:{ie:{\"6\":\"n\",\"7\":\"n\",\"8\":\"n\",\"9\":\"n\",\"10\":\"n\",\"11\":\"n\",\"5.5\":\"n\"},edge:{\"12\":\"y\",\"13\":\"y\",\"14\":\"y\",\"15\":\"y\",\"16\":\"y\",\"17\":\"y\",\"18\":\"y\",\"79\":\"y\",\"80\":\"y\",\"81\":\"y\",\"83\":\"y\",\"84\":\"y\",\"85\":\"y\",\"86\":\"y\",\"87\":\"y\",\"88\":\"y\",\"89\":\"y\",\"90\":\"y\",\"91\":\"y\",\"92\":\"y\",\"93\":\"y\",\"94\":\"y\",\"95\":\"y\",\"96\":\"y\",\"97\":\"y\",\"98\":\"y\",\"99\":\"y\",\"100\":\"y\",\"101\":\"y\",\"102\":\"y\",\"103\":\"y\",\"104\":\"y\",\"105\":\"y\",\"106\":\"y\",\"107\":\"y\",\"108\":\"y\",\"109\":\"y\",\"110\":\"y\",\"111\":\"y\",\"112\":\"y\",\"113\":\"y\",\"114\":\"y\"},firefox:{\"2\":\"n\",\"3\":\"n\",\"4\":\"n\",\"5\":\"n\",\"6\":\"n\",\"7\":\"n\",\"8\":\"n\",\"9\":\"n\",\"10\":\"n\",\"11\":\"n\",\"12\":\"n\",\"13\":\"n\",\"14\":\"n\",\"15\":\"n\",\"16\":\"n\",\"17\":\"n\",\"18\":\"n\",\"19\":\"n\",\"20\":\"n\",\"21\":\"n\",\"22\":\"y\",\"23\":\"y\",\"24\":\"y\",\"25\":\"y\",\"26\":\"y\",\"27\":\"y\",\"28\":\"y\",\"29\":\"y\",\"30\":\"y\",\"31\":\"y\",\"32\":\"y\",\"33\":\"y\",\"34\":\"y\",\"35\":\"y\",\"36\":\"y\",\"37\":\"y\",\"38\":\"y\",\"39\":\"y\",\"40\":\"y\",\"41\":\"y\",\"42\":\"y\",\"43\":\"y\",\"44\":\"y\",\"45\":\"y\",\"46\":\"y\",\"47\":\"y\",\"48\":\"y\",\"49\":\"y\",\"50\":\"y\",\"51\":\"y\",\"52\":\"y\",\"53\":\"y\",\"54\":\"y\",\"55\":\"y\",\"56\":\"y\",\"57\":\"y\",\"58\":\"y\",\"59\":\"y\",\"60\":\"y\",\"61\":\"y\",\"62\":\"y\",\"63\":\"y\",\"64\":\"y\",\"65\":\"y\",\"66\":\"y\",\"67\":\"y\",\"68\":\"y\",\"69\":\"y\",\"70\":\"y\",\"71\":\"y\",\"72\":\"y\",\"73\":\"y\",\"74\":\"y\",\"75\":\"y\",\"76\":\"y\",\"77\":\"y\",\"78\":\"y\",\"79\":\"y\",\"80\":\"y\",\"81\":\"y\",\"82\":\"y\",\"83\":\"y\",\"84\":\"y\",\"85\":\"y\",\"86\":\"y\",\"87\":\"y\",\"88\":\"y\",\"89\":\"y\",\"90\":\"y\",\"91\":\"y\",\"92\":\"y\",\"93\":\"y\",\"94\":\"y\",\"95\":\"y\",\"96\":\"y\",\"97\":\"y\",\"98\":\"y\",\"99\":\"y\",\"100\":\"y\",\"101\":\"y\",\"102\":\"y\",\"103\":\"y\",\"104\":\"y\",\"105\":\"y\",\"106\":\"y\",\"107\":\"y\",\"108\":\"y\",\"109\":\"y\",\"110\":\"y\",\"111\":\"y\",\"112\":\"y\",\"113\":\"y\",\"114\":\"y\",\"115\":\"y\",\"116\":\"y\",\"117\":\"y\",\"3.5\":\"n\",\"3.6\":\"n\"},chrome:{\"4\":\"n\",\"5\":\"n\",\"6\":\"n\",\"7\":\"n\",\"8\":\"n\",\"9\":\"n\",\"10\":\"n\",\"11\":\"n\",\"12\":\"n\",\"13\":\"n\",\"14\":\"n\",\"15\":\"n\",\"16\":\"n\",\"17\":\"n\",\"18\":\"n\",\"19\":\"n\",\"20\":\"n\",\"21\":\"n\",\"22\":\"n\",\"23\":\"n\",\"24\":\"n\",\"25\":\"n\",\"26\":\"n\",\"27\":\"n\",\"28\":\"y\",\"29\":\"y\",\"30\":\"y\",\"31\":\"y\",\"32\":\"y\",\"33\":\"y\",\"34\":\"y\",\"35\":\"y\",\"36\":\"y\",\"37\":\"y\",\"38\":\"y\",\"39\":\"y\",\"40\":\"y\",\"41\":\"y\",\"42\":\"y\",\"43\":\"y\",\"44\":\"y\",\"45\":\"y\",\"46\":\"y\",\"47\":\"y\",\"48\":\"y\",\"49\":\"y\",\"50\":\"y\",\"51\":\"y\",\"52\":\"y\",\"53\":\"y\",\"54\":\"y\",\"55\":\"y\",\"56\":\"y\",\"57\":\"y\",\"58\":\"y\",\"59\":\"y\",\"60\":\"y\",\"61\":\"y\",\"62\":\"y\",\"63\":\"y\",\"64\":\"y\",\"65\":\"y\",\"66\":\"y\",\"67\":\"y\",\"68\":\"y\",\"69\":\"y\",\"70\":\"y\",\"71\":\"y\",\"72\":\"y\",\"73\":\"y\",\"74\":\"y\",\"75\":\"y\",\"76\":\"y\",\"77\":\"y\",\"78\":\"y\",\"79\":\"y\",\"80\":\"y\",\"81\":\"y\",\"83\":\"y\",\"84\":\"y\",\"85\":\"y\",\"86\":\"y\",\"87\":\"y\",\"88\":\"y\",\"89\":\"y\",\"90\":\"y\",\"91\":\"y\",\"92\":\"y\",\"93\":\"y\",\"94\":\"y\",\"95\":\"y\",\"96\":\"y\",\"97\":\"y\",\"98\":\"y\",\"99\":\"y\",\"100\":\"y\",\"101\":\"y\",\"102\":\"y\",\"103\":\"y\",\"104\":\"y\",\"105\":\"y\",\"106\":\"y\",\"107\":\"y\",\"108\":\"y\",\"109\":\"y\",\"110\":\"y\",\"111\":\"y\",\"112\":\"y\",\"113\":\"y\",\"114\":\"y\",\"115\":\"y\",\"116\":\"y\",\"117\":\"y\"},safari:{\"4\":\"n\",\"5\":\"n\",\"6\":\"n\",\"7\":\"n\",\"8\":\"n\",\"9\":\"y\",\"10\":\"y\",\"11\":\"y\",\"12\":\"y\",\"13\":\"y\",\"14\":\"y\",\"15\":\"y\",\"17\":\"y\",\"9.1\":\"y\",\"10.1\":\"y\",\"11.1\":\"y\",\"12.1\":\"y\",\"13.1\":\"y\",\"14.1\":\"y\",\"15.1\":\"y\",\"15.2-15.3\":\"y\",\"15.4\":\"y\",\"15.5\":\"y\",\"15.6\":\"y\",\"16.0\":\"y\",\"16.1\":\"y\",\"16.2\":\"y\",\"16.3\":\"y\",\"16.4\":\"y\",\"16.5\":\"y\",\"16.6\":\"y\",TP:\"y\",\"3.1\":\"n\",\"3.2\":\"n\",\"5.1\":\"n\",\"6.1\":\"n\",\"7.1\":\"n\"},opera:{\"9\":\"n\",\"11\":\"n\",\"12\":\"n\",\"15\":\"y\",\"16\":\"y\",\"17\":\"y\",\"18\":\"y\",\"19\":\"y\",\"20\":\"y\",\"21\":\"y\",\"22\":\"y\",\"23\":\"y\",\"24\":\"y\",\"25\":\"y\",\"26\":\"y\",\"27\":\"y\",\"28\":\"y\",\"29\":\"y\",\"30\":\"y\",\"31\":\"y\",\"32\":\"y\",\"33\":\"y\",\"34\":\"y\",\"35\":\"y\",\"36\":\"y\",\"37\":\"y\",\"38\":\"y\",\"39\":\"y\",\"40\":\"y\",\"41\":\"y\",\"42\":\"y\",\"43\":\"y\",\"44\":\"y\",\"45\":\"y\",\"46\":\"y\",\"47\":\"y\",\"48\":\"y\",\"49\":\"y\",\"50\":\"y\",\"51\":\"y\",\"52\":\"y\",\"53\":\"y\",\"54\":\"y\",\"55\":\"y\",\"56\":\"y\",\"57\":\"y\",\"58\":\"y\",\"60\":\"y\",\"62\":\"y\",\"63\":\"y\",\"64\":\"y\",\"65\":\"y\",\"66\":\"y\",\"67\":\"y\",\"68\":\"y\",\"69\":\"y\",\"70\":\"y\",\"71\":\"y\",\"72\":\"y\",\"73\":\"y\",\"74\":\"y\",\"75\":\"y\",\"76\":\"y\",\"77\":\"y\",\"78\":\"y\",\"79\":\"y\",\"80\":\"y\",\"81\":\"y\",\"82\":\"y\",\"83\":\"y\",\"84\":\"y\",\"85\":\"y\",\"86\":\"y\",\"87\":\"y\",\"88\":\"y\",\"89\":\"y\",\"90\":\"y\",\"91\":\"y\",\"92\":\"y\",\"93\":\"y\",\"94\":\"y\",\"95\":\"y\",\"96\":\"y\",\"97\":\"y\",\"98\":\"y\",\"99\":\"y\",\"100\":\"y\",\"12.1\":\"y\",\"9.5-9.6\":\"n\",\"10.0-10.1\":\"n\",\"10.5\":\"n\",\"10.6\":\"n\",\"11.1\":\"n\",\"11.5\":\"n\",\"11.6\":\"n\"},ios_saf:{\"8\":\"n\",\"17\":\"y\",\"9.0-9.2\":\"y\",\"9.3\":\"y\",\"10.0-10.2\":\"y\",\"10.3\":\"y\",\"11.0-11.2\":\"y\",\"11.3-11.4\":\"y\",\"12.0-12.1\":\"y\",\"12.2-12.5\":\"y\",\"13.0-13.1\":\"y\",\"13.2\":\"y\",\"13.3\":\"y\",\"13.4-13.7\":\"y\",\"14.0-14.4\":\"y\",\"14.5-14.8\":\"y\",\"15.0-15.1\":\"y\",\"15.2-15.3\":\"y\",\"15.4\":\"y\",\"15.5\":\"y\",\"15.6\":\"y\",\"16.0\":\"y\",\"16.1\":\"y\",\"16.2\":\"y\",\"16.3\":\"y\",\"16.4\":\"y\",\"16.5\":\"y\",\"16.6\":\"y\",\"3.2\":\"n\",\"4.0-4.1\":\"n\",\"4.2-4.3\":\"n\",\"5.0-5.1\":\"n\",\"6.0-6.1\":\"n\",\"7.0-7.1\":\"n\",\"8.1-8.4\":\"n\"},op_mini:{all:\"y\"},android:{\"3\":\"n\",\"4\":\"n\",\"114\":\"y\",\"4.4\":\"y\",\"4.4.3-4.4.4\":\"y\",\"2.1\":\"n\",\"2.2\":\"n\",\"2.3\":\"n\",\"4.1\":\"n\",\"4.2-4.3\":\"n\"},bb:{\"7\":\"n\",\"10\":\"n\"},op_mob:{\"10\":\"n\",\"11\":\"n\",\"12\":\"n\",\"73\":\"y\",\"11.1\":\"n\",\"11.5\":\"n\",\"12.1\":\"n\"},and_chr:{\"114\":\"y\"},and_ff:{\"115\":\"y\"},ie_mob:{\"10\":\"n\",\"11\":\"n\"},and_uc:{\"15.5\":\"y\"},samsung:{\"4\":\"y\",\"20\":\"y\",\"21\":\"y\",\"5.0-5.4\":\"y\",\"6.2-6.4\":\"y\",\"7.2-7.4\":\"y\",\"8.2\":\"y\",\"9.2\":\"y\",\"10.1\":\"y\",\"11.1-11.2\":\"y\",\"12.0\":\"y\",\"13.0\":\"y\",\"14.0\":\"y\",\"15.0\":\"y\",\"16.0\":\"y\",\"17.0\":\"y\",\"18.0\":\"y\",\"19.0\":\"y\"},and_qq:{\"13.1\":\"y\"},baidu:{\"13.18\":\"y\"},kaios:{\"2.5\":\"y\",\"3.0-3.1\":\"y\"}}}}var O2,$n=C(()=>{l();O2={ie:{prefix:\"ms\"},edge:{prefix:\"webkit\",prefix_exceptions:{\"12\":\"ms\",\"13\":\"ms\",\"14\":\"ms\",\"15\":\"ms\",\"16\":\"ms\",\"17\":\"ms\",\"18\":\"ms\"}},firefox:{prefix:\"moz\"},chrome:{prefix:\"webkit\"},safari:{prefix:\"webkit\"},opera:{prefix:\"webkit\",prefix_exceptions:{\"9\":\"o\",\"11\":\"o\",\"12\":\"o\",\"9.5-9.6\":\"o\",\"10.0-10.1\":\"o\",\"10.5\":\"o\",\"10.6\":\"o\",\"11.1\":\"o\",\"11.5\":\"o\",\"11.6\":\"o\",\"12.1\":\"o\"}},ios_saf:{prefix:\"webkit\"},op_mini:{prefix:\"o\"},android:{prefix:\"webkit\"},bb:{prefix:\"webkit\"},op_mob:{prefix:\"o\",prefix_exceptions:{\"73\":\"webkit\"}},and_chr:{prefix:\"webkit\"},and_ff:{prefix:\"moz\"},ie_mob:{prefix:\"ms\"},and_uc:{prefix:\"webkit\",prefix_exceptions:{\"15.5\":\"webkit\"}},samsung:{prefix:\"webkit\"},and_qq:{prefix:\"webkit\"},baidu:{prefix:\"webkit\"},kaios:{prefix:\"moz\"}}});var hm=v(()=>{l()});var ue=v((r4,pt)=>{l();var{list:Vo}=ye();pt.exports.error=function(i){let e=new Error(i);throw e.autoprefixer=!0,e};pt.exports.uniq=function(i){return[...new Set(i)]};pt.exports.removeNote=function(i){return i.includes(\" \")?i.split(\" \")[0]:i};pt.exports.escapeRegexp=function(i){return i.replace(/[$()*+-.?[\\\\\\]^{|}]/g,\"\\\\$&\")};pt.exports.regexp=function(i,e=!0){return e&&(i=this.escapeRegexp(i)),new RegExp(`(^|[\\\\s,(])(${i}($|[\\\\s(,]))`,\"gi\")};pt.exports.editList=function(i,e){let t=Vo.comma(i),r=e(t,[]);if(t===r)return i;let n=i.match(/,\\s*/);return n=n?n[0]:\", \",r.join(n)};pt.exports.splitSelector=function(i){return Vo.comma(i).map(e=>Vo.space(e).map(t=>t.split(/(?=\\.|#)/g)))}});var dt=v((i4,ym)=>{l();var T2=zo(),mm=($n(),Ln).agents,P2=ue(),gm=class{static prefixes(){if(this.prefixesCache)return this.prefixesCache;this.prefixesCache=[];for(let e in mm)this.prefixesCache.push(`-${mm[e].prefix}-`);return this.prefixesCache=P2.uniq(this.prefixesCache).sort((e,t)=>t.length-e.length),this.prefixesCache}static withPrefix(e){return this.prefixesRegexp||(this.prefixesRegexp=new RegExp(this.prefixes().join(\"|\"))),this.prefixesRegexp.test(e)}constructor(e,t,r,n){this.data=e,this.options=r||{},this.browserslistOpts=n||{},this.selected=this.parse(t)}parse(e){let t={};for(let r in this.browserslistOpts)t[r]=this.browserslistOpts[r];return t.path=this.options.from,T2(e,t)}prefix(e){let[t,r]=e.split(\" \"),n=this.data[t],a=n.prefix_exceptions&&n.prefix_exceptions[r];return a||(a=n.prefix),`-${a}-`}isSelected(e){return this.selected.includes(e)}};ym.exports=gm});var ii=v((n4,wm)=>{l();wm.exports={prefix(i){let e=i.match(/^(-\\w+-)/);return e?e[0]:\"\"},unprefixed(i){return i.replace(/^-\\w+-/,\"\")}}});var Wt=v((s4,vm)=>{l();var D2=dt(),bm=ii(),I2=ue();function Uo(i,e){let t=new i.constructor;for(let r of Object.keys(i||{})){let n=i[r];r===\"parent\"&&typeof n==\"object\"?e&&(t[r]=e):r===\"source\"||r===null?t[r]=n:Array.isArray(n)?t[r]=n.map(a=>Uo(a,t)):r!==\"_autoprefixerPrefix\"&&r!==\"_autoprefixerValues\"&&r!==\"proxyCache\"&&(typeof n==\"object\"&&n!==null&&(n=Uo(n,t)),t[r]=n)}return t}var jn=class{static hack(e){return this.hacks||(this.hacks={}),e.names.map(t=>(this.hacks[t]=e,this.hacks[t]))}static load(e,t,r){let n=this.hacks&&this.hacks[e];return n?new n(e,t,r):new this(e,t,r)}static clone(e,t){let r=Uo(e);for(let n in t)r[n]=t[n];return r}constructor(e,t,r){this.prefixes=t,this.name=e,this.all=r}parentPrefix(e){let t;return typeof e._autoprefixerPrefix!=\"undefined\"?t=e._autoprefixerPrefix:e.type===\"decl\"&&e.prop[0]===\"-\"?t=bm.prefix(e.prop):e.type===\"root\"?t=!1:e.type===\"rule\"&&e.selector.includes(\":-\")&&/:(-\\w+-)/.test(e.selector)?t=e.selector.match(/:(-\\w+-)/)[1]:e.type===\"atrule\"&&e.name[0]===\"-\"?t=bm.prefix(e.name):t=this.parentPrefix(e.parent),D2.prefixes().includes(t)||(t=!1),e._autoprefixerPrefix=t,e._autoprefixerPrefix}process(e,t){if(!this.check(e))return;let r=this.parentPrefix(e),n=this.prefixes.filter(s=>!r||r===I2.removeNote(s)),a=[];for(let s of n)this.add(e,s,a.concat([s]),t)&&a.push(s);return a}clone(e,t){return jn.clone(e,t)}};vm.exports=jn});var M=v((a4,Sm)=>{l();var q2=Wt(),R2=dt(),xm=ue(),km=class extends q2{check(){return!0}prefixed(e,t){return t+e}normalize(e){return e}otherPrefixes(e,t){for(let r of R2.prefixes())if(r!==t&&e.includes(r))return!0;return!1}set(e,t){return e.prop=this.prefixed(e.prop,t),e}needCascade(e){return e._autoprefixerCascade||(e._autoprefixerCascade=this.all.options.cascade!==!1&&e.raw(\"before\").includes(`\n`)),e._autoprefixerCascade}maxPrefixed(e,t){if(t._autoprefixerMax)return t._autoprefixerMax;let r=0;for(let n of e)n=xm.removeNote(n),n.length>r&&(r=n.length);return t._autoprefixerMax=r,t._autoprefixerMax}calcBefore(e,t,r=\"\"){let a=this.maxPrefixed(e,t)-xm.removeNote(r).length,s=t.raw(\"before\");return a>0&&(s+=Array(a).fill(\" \").join(\"\")),s}restoreBefore(e){let t=e.raw(\"before\").split(`\n`),r=t[t.length-1];this.all.group(e).up(n=>{let a=n.raw(\"before\").split(`\n`),s=a[a.length-1];s.length<r.length&&(r=s)}),t[t.length-1]=r,e.raws.before=t.join(`\n`)}insert(e,t,r){let n=this.set(this.clone(e),t);if(!(!n||e.parent.some(s=>s.prop===n.prop&&s.value===n.value)))return this.needCascade(e)&&(n.raws.before=this.calcBefore(r,e,t)),e.parent.insertBefore(e,n)}isAlready(e,t){let r=this.all.group(e).up(n=>n.prop===t);return r||(r=this.all.group(e).down(n=>n.prop===t)),r}add(e,t,r,n){let a=this.prefixed(e.prop,t);if(!(this.isAlready(e,a)||this.otherPrefixes(e.value,t)))return this.insert(e,t,r,n)}process(e,t){if(!this.needCascade(e)){super.process(e,t);return}let r=super.process(e,t);!r||!r.length||(this.restoreBefore(e),e.raws.before=this.calcBefore(r,e))}old(e,t){return[this.prefixed(e,t)]}};Sm.exports=km});var Am=v((o4,Cm)=>{l();Cm.exports=function i(e){return{mul:t=>new i(e*t),div:t=>new i(e/t),simplify:()=>new i(e),toString:()=>e.toString()}}});var Em=v((l4,Om)=>{l();var M2=Am(),B2=Wt(),Wo=ue(),F2=/(min|max)-resolution\\s*:\\s*\\d*\\.?\\d+(dppx|dpcm|dpi|x)/gi,N2=/(min|max)-resolution(\\s*:\\s*)(\\d*\\.?\\d+)(dppx|dpcm|dpi|x)/i,_m=class extends B2{prefixName(e,t){return e===\"-moz-\"?t+\"--moz-device-pixel-ratio\":e+t+\"-device-pixel-ratio\"}prefixQuery(e,t,r,n,a){return n=new M2(n),a===\"dpi\"?n=n.div(96):a===\"dpcm\"&&(n=n.mul(2.54).div(96)),n=n.simplify(),e===\"-o-\"&&(n=n.n+\"/\"+n.d),this.prefixName(e,t)+r+n}clean(e){if(!this.bad){this.bad=[];for(let t of this.prefixes)this.bad.push(this.prefixName(t,\"min\")),this.bad.push(this.prefixName(t,\"max\"))}e.params=Wo.editList(e.params,t=>t.filter(r=>this.bad.every(n=>!r.includes(n))))}process(e){let t=this.parentPrefix(e),r=t?[t]:this.prefixes;e.params=Wo.editList(e.params,(n,a)=>{for(let s of n){if(!s.includes(\"min-resolution\")&&!s.includes(\"max-resolution\")){a.push(s);continue}for(let o of r){let u=s.replace(F2,c=>{let f=c.match(N2);return this.prefixQuery(o,f[1],f[2],f[3],f[4])});a.push(u)}a.push(s)}return Wo.uniq(a)})}};Om.exports=_m});var Pm=v((u4,Tm)=>{l();var Go=\"(\".charCodeAt(0),Ho=\")\".charCodeAt(0),zn=\"'\".charCodeAt(0),Yo='\"'.charCodeAt(0),Qo=\"\\\\\".charCodeAt(0),Gt=\"/\".charCodeAt(0),Jo=\",\".charCodeAt(0),Xo=\":\".charCodeAt(0),Vn=\"*\".charCodeAt(0),L2=\"u\".charCodeAt(0),$2=\"U\".charCodeAt(0),j2=\"+\".charCodeAt(0),z2=/^[a-f0-9?-]+$/i;Tm.exports=function(i){for(var e=[],t=i,r,n,a,s,o,u,c,f,d=0,p=t.charCodeAt(d),m=t.length,b=[{nodes:e}],x=0,y,w=\"\",k=\"\",S=\"\";d<m;)if(p<=32){r=d;do r+=1,p=t.charCodeAt(r);while(p<=32);s=t.slice(d,r),a=e[e.length-1],p===Ho&&x?S=s:a&&a.type===\"div\"?(a.after=s,a.sourceEndIndex+=s.length):p===Jo||p===Xo||p===Gt&&t.charCodeAt(r+1)!==Vn&&(!y||y&&y.type===\"function\"&&y.value!==\"calc\")?k=s:e.push({type:\"space\",sourceIndex:d,sourceEndIndex:r,value:s}),d=r}else if(p===zn||p===Yo){r=d,n=p===zn?\"'\":'\"',s={type:\"string\",sourceIndex:d,quote:n};do if(o=!1,r=t.indexOf(n,r+1),~r)for(u=r;t.charCodeAt(u-1)===Qo;)u-=1,o=!o;else t+=n,r=t.length-1,s.unclosed=!0;while(o);s.value=t.slice(d+1,r),s.sourceEndIndex=s.unclosed?r:r+1,e.push(s),d=r+1,p=t.charCodeAt(d)}else if(p===Gt&&t.charCodeAt(d+1)===Vn)r=t.indexOf(\"*/\",d),s={type:\"comment\",sourceIndex:d,sourceEndIndex:r+2},r===-1&&(s.unclosed=!0,r=t.length,s.sourceEndIndex=r),s.value=t.slice(d+2,r),e.push(s),d=r+2,p=t.charCodeAt(d);else if((p===Gt||p===Vn)&&y&&y.type===\"function\"&&y.value===\"calc\")s=t[d],e.push({type:\"word\",sourceIndex:d-k.length,sourceEndIndex:d+s.length,value:s}),d+=1,p=t.charCodeAt(d);else if(p===Gt||p===Jo||p===Xo)s=t[d],e.push({type:\"div\",sourceIndex:d-k.length,sourceEndIndex:d+s.length,value:s,before:k,after:\"\"}),k=\"\",d+=1,p=t.charCodeAt(d);else if(Go===p){r=d;do r+=1,p=t.charCodeAt(r);while(p<=32);if(f=d,s={type:\"function\",sourceIndex:d-w.length,value:w,before:t.slice(f+1,r)},d=r,w===\"url\"&&p!==zn&&p!==Yo){r-=1;do if(o=!1,r=t.indexOf(\")\",r+1),~r)for(u=r;t.charCodeAt(u-1)===Qo;)u-=1,o=!o;else t+=\")\",r=t.length-1,s.unclosed=!0;while(o);c=r;do c-=1,p=t.charCodeAt(c);while(p<=32);f<c?(d!==c+1?s.nodes=[{type:\"word\",sourceIndex:d,sourceEndIndex:c+1,value:t.slice(d,c+1)}]:s.nodes=[],s.unclosed&&c+1!==r?(s.after=\"\",s.nodes.push({type:\"space\",sourceIndex:c+1,sourceEndIndex:r,value:t.slice(c+1,r)})):(s.after=t.slice(c+1,r),s.sourceEndIndex=r)):(s.after=\"\",s.nodes=[]),d=r+1,s.sourceEndIndex=s.unclosed?r:d,p=t.charCodeAt(d),e.push(s)}else x+=1,s.after=\"\",s.sourceEndIndex=d+1,e.push(s),b.push(s),e=s.nodes=[],y=s;w=\"\"}else if(Ho===p&&x)d+=1,p=t.charCodeAt(d),y.after=S,y.sourceEndIndex+=S.length,S=\"\",x-=1,b[b.length-1].sourceEndIndex=d,b.pop(),y=b[x],e=y.nodes;else{r=d;do p===Qo&&(r+=1),r+=1,p=t.charCodeAt(r);while(r<m&&!(p<=32||p===zn||p===Yo||p===Jo||p===Xo||p===Gt||p===Go||p===Vn&&y&&y.type===\"function\"&&y.value===\"calc\"||p===Gt&&y.type===\"function\"&&y.value===\"calc\"||p===Ho&&x));s=t.slice(d,r),Go===p?w=s:(L2===s.charCodeAt(0)||$2===s.charCodeAt(0))&&j2===s.charCodeAt(1)&&z2.test(s.slice(2))?e.push({type:\"unicode-range\",sourceIndex:d,sourceEndIndex:r,value:s}):e.push({type:\"word\",sourceIndex:d,sourceEndIndex:r,value:s}),d=r}for(d=b.length-1;d;d-=1)b[d].unclosed=!0,b[d].sourceEndIndex=t.length;return b[0].nodes}});var Im=v((f4,Dm)=>{l();Dm.exports=function i(e,t,r){var n,a,s,o;for(n=0,a=e.length;n<a;n+=1)s=e[n],r||(o=t(s,n,e)),o!==!1&&s.type===\"function\"&&Array.isArray(s.nodes)&&i(s.nodes,t,r),r&&t(s,n,e)}});var Bm=v((c4,Mm)=>{l();function qm(i,e){var t=i.type,r=i.value,n,a;return e&&(a=e(i))!==void 0?a:t===\"word\"||t===\"space\"?r:t===\"string\"?(n=i.quote||\"\",n+r+(i.unclosed?\"\":n)):t===\"comment\"?\"/*\"+r+(i.unclosed?\"\":\"*/\"):t===\"div\"?(i.before||\"\")+r+(i.after||\"\"):Array.isArray(i.nodes)?(n=Rm(i.nodes,e),t!==\"function\"?n:r+\"(\"+(i.before||\"\")+n+(i.after||\"\")+(i.unclosed?\"\":\")\")):r}function Rm(i,e){var t,r;if(Array.isArray(i)){for(t=\"\",r=i.length-1;~r;r-=1)t=qm(i[r],e)+t;return t}return qm(i,e)}Mm.exports=Rm});var Nm=v((p4,Fm)=>{l();var Un=\"-\".charCodeAt(0),Wn=\"+\".charCodeAt(0),Ko=\".\".charCodeAt(0),V2=\"e\".charCodeAt(0),U2=\"E\".charCodeAt(0);function W2(i){var e=i.charCodeAt(0),t;if(e===Wn||e===Un){if(t=i.charCodeAt(1),t>=48&&t<=57)return!0;var r=i.charCodeAt(2);return t===Ko&&r>=48&&r<=57}return e===Ko?(t=i.charCodeAt(1),t>=48&&t<=57):e>=48&&e<=57}Fm.exports=function(i){var e=0,t=i.length,r,n,a;if(t===0||!W2(i))return!1;for(r=i.charCodeAt(e),(r===Wn||r===Un)&&e++;e<t&&(r=i.charCodeAt(e),!(r<48||r>57));)e+=1;if(r=i.charCodeAt(e),n=i.charCodeAt(e+1),r===Ko&&n>=48&&n<=57)for(e+=2;e<t&&(r=i.charCodeAt(e),!(r<48||r>57));)e+=1;if(r=i.charCodeAt(e),n=i.charCodeAt(e+1),a=i.charCodeAt(e+2),(r===V2||r===U2)&&(n>=48&&n<=57||(n===Wn||n===Un)&&a>=48&&a<=57))for(e+=n===Wn||n===Un?3:2;e<t&&(r=i.charCodeAt(e),!(r<48||r>57));)e+=1;return{number:i.slice(0,e),unit:i.slice(e)}}});var Gn=v((d4,jm)=>{l();var G2=Pm(),Lm=Im(),$m=Bm();function ht(i){return this instanceof ht?(this.nodes=G2(i),this):new ht(i)}ht.prototype.toString=function(){return Array.isArray(this.nodes)?$m(this.nodes):\"\"};ht.prototype.walk=function(i,e){return Lm(this.nodes,i,e),this};ht.unit=Nm();ht.walk=Lm;ht.stringify=$m;jm.exports=ht});var Gm=v((h4,Wm)=>{l();var{list:H2}=ye(),zm=Gn(),Y2=dt(),Vm=ii(),Um=class{constructor(e){this.props=[\"transition\",\"transition-property\"],this.prefixes=e}add(e,t){let r,n,a=this.prefixes.add[e.prop],s=this.ruleVendorPrefixes(e),o=s||a&&a.prefixes||[],u=this.parse(e.value),c=u.map(m=>this.findProp(m)),f=[];if(c.some(m=>m[0]===\"-\"))return;for(let m of u){if(n=this.findProp(m),n[0]===\"-\")continue;let b=this.prefixes.add[n];if(!(!b||!b.prefixes))for(r of b.prefixes){if(s&&!s.some(y=>r.includes(y)))continue;let x=this.prefixes.prefixed(n,r);x!==\"-ms-transform\"&&!c.includes(x)&&(this.disabled(n,r)||f.push(this.clone(n,x,m)))}}u=u.concat(f);let d=this.stringify(u),p=this.stringify(this.cleanFromUnprefixed(u,\"-webkit-\"));if(o.includes(\"-webkit-\")&&this.cloneBefore(e,`-webkit-${e.prop}`,p),this.cloneBefore(e,e.prop,p),o.includes(\"-o-\")){let m=this.stringify(this.cleanFromUnprefixed(u,\"-o-\"));this.cloneBefore(e,`-o-${e.prop}`,m)}for(r of o)if(r!==\"-webkit-\"&&r!==\"-o-\"){let m=this.stringify(this.cleanOtherPrefixes(u,r));this.cloneBefore(e,r+e.prop,m)}d!==e.value&&!this.already(e,e.prop,d)&&(this.checkForWarning(t,e),e.cloneBefore(),e.value=d)}findProp(e){let t=e[0].value;if(/^\\d/.test(t)){for(let[r,n]of e.entries())if(r!==0&&n.type===\"word\")return n.value}return t}already(e,t,r){return e.parent.some(n=>n.prop===t&&n.value===r)}cloneBefore(e,t,r){this.already(e,t,r)||e.cloneBefore({prop:t,value:r})}checkForWarning(e,t){if(t.prop!==\"transition-property\")return;let r=!1,n=!1;t.parent.each(a=>{if(a.type!==\"decl\"||a.prop.indexOf(\"transition-\")!==0)return;let s=H2.comma(a.value);if(a.prop===\"transition-property\"){s.forEach(o=>{let u=this.prefixes.add[o];u&&u.prefixes&&u.prefixes.length>0&&(r=!0)});return}return n=n||s.length>1,!1}),r&&n&&t.warn(e,\"Replace transition-property to transition, because Autoprefixer could not support any cases of transition-property and other transition-*\")}remove(e){let t=this.parse(e.value);t=t.filter(s=>{let o=this.prefixes.remove[this.findProp(s)];return!o||!o.remove});let r=this.stringify(t);if(e.value===r)return;if(t.length===0){e.remove();return}let n=e.parent.some(s=>s.prop===e.prop&&s.value===r),a=e.parent.some(s=>s!==e&&s.prop===e.prop&&s.value.length>r.length);if(n||a){e.remove();return}e.value=r}parse(e){let t=zm(e),r=[],n=[];for(let a of t.nodes)n.push(a),a.type===\"div\"&&a.value===\",\"&&(r.push(n),n=[]);return r.push(n),r.filter(a=>a.length>0)}stringify(e){if(e.length===0)return\"\";let t=[];for(let r of e)r[r.length-1].type!==\"div\"&&r.push(this.div(e)),t=t.concat(r);return t[0].type===\"div\"&&(t=t.slice(1)),t[t.length-1].type===\"div\"&&(t=t.slice(0,-2+1||void 0)),zm.stringify({nodes:t})}clone(e,t,r){let n=[],a=!1;for(let s of r)!a&&s.type===\"word\"&&s.value===e?(n.push({type:\"word\",value:t}),a=!0):n.push(s);return n}div(e){for(let t of e)for(let r of t)if(r.type===\"div\"&&r.value===\",\")return r;return{type:\"div\",value:\",\",after:\" \"}}cleanOtherPrefixes(e,t){return e.filter(r=>{let n=Vm.prefix(this.findProp(r));return n===\"\"||n===t})}cleanFromUnprefixed(e,t){let r=e.map(a=>this.findProp(a)).filter(a=>a.slice(0,t.length)===t).map(a=>this.prefixes.unprefixed(a)),n=[];for(let a of e){let s=this.findProp(a),o=Vm.prefix(s);!r.includes(s)&&(o===t||o===\"\")&&n.push(a)}return n}disabled(e,t){let r=[\"order\",\"justify-content\",\"align-self\",\"align-content\"];if(e.includes(\"flex\")||r.includes(e)){if(this.prefixes.options.flexbox===!1)return!0;if(this.prefixes.options.flexbox===\"no-2009\")return t.includes(\"2009\")}}ruleVendorPrefixes(e){let{parent:t}=e;if(t.type!==\"rule\")return!1;if(!t.selector.includes(\":-\"))return!1;let r=Y2.prefixes().filter(n=>t.selector.includes(\":\"+n));return r.length>0?r:!1}};Wm.exports=Um});var Ht=v((m4,Ym)=>{l();var Q2=ue(),Hm=class{constructor(e,t,r,n){this.unprefixed=e,this.prefixed=t,this.string=r||t,this.regexp=n||Q2.regexp(t)}check(e){return e.includes(this.string)?!!e.match(this.regexp):!1}};Ym.exports=Hm});var Se=v((g4,Jm)=>{l();var J2=Wt(),X2=Ht(),K2=ii(),Z2=ue(),Qm=class extends J2{static save(e,t){let r=t.prop,n=[];for(let a in t._autoprefixerValues){let s=t._autoprefixerValues[a];if(s===t.value)continue;let o,u=K2.prefix(r);if(u===\"-pie-\")continue;if(u===a){o=t.value=s,n.push(o);continue}let c=e.prefixed(r,a),f=t.parent;if(!f.every(b=>b.prop!==c)){n.push(o);continue}let d=s.replace(/\\s+/,\" \");if(f.some(b=>b.prop===t.prop&&b.value.replace(/\\s+/,\" \")===d)){n.push(o);continue}let m=this.clone(t,{value:s});o=t.parent.insertBefore(t,m),n.push(o)}return n}check(e){let t=e.value;return t.includes(this.name)?!!t.match(this.regexp()):!1}regexp(){return this.regexpCache||(this.regexpCache=Z2.regexp(this.name))}replace(e,t){return e.replace(this.regexp(),`$1${t}$2`)}value(e){return e.raws.value&&e.raws.value.value===e.value?e.raws.value.raw:e.value}add(e,t){e._autoprefixerValues||(e._autoprefixerValues={});let r=e._autoprefixerValues[t]||this.value(e),n;do if(n=r,r=this.replace(r,t),r===!1)return;while(r!==n);e._autoprefixerValues[t]=r}old(e){return new X2(this.name,e+this.name)}};Jm.exports=Qm});var mt=v((y4,Xm)=>{l();Xm.exports={}});var el=v((w4,eg)=>{l();var Km=Gn(),eA=Se(),tA=mt().insertAreas,rA=/(^|[^-])linear-gradient\\(\\s*(top|left|right|bottom)/i,iA=/(^|[^-])radial-gradient\\(\\s*\\d+(\\w*|%)\\s+\\d+(\\w*|%)\\s*,/i,nA=/(!\\s*)?autoprefixer:\\s*ignore\\s+next/i,sA=/(!\\s*)?autoprefixer\\s*grid:\\s*(on|off|(no-)?autoplace)/i,aA=[\"width\",\"height\",\"min-width\",\"max-width\",\"min-height\",\"max-height\",\"inline-size\",\"min-inline-size\",\"max-inline-size\",\"block-size\",\"min-block-size\",\"max-block-size\"];function Zo(i){return i.parent.some(e=>e.prop===\"grid-template\"||e.prop===\"grid-template-areas\")}function oA(i){let e=i.parent.some(r=>r.prop===\"grid-template-rows\"),t=i.parent.some(r=>r.prop===\"grid-template-columns\");return e&&t}var Zm=class{constructor(e){this.prefixes=e}add(e,t){let r=this.prefixes.add[\"@resolution\"],n=this.prefixes.add[\"@keyframes\"],a=this.prefixes.add[\"@viewport\"],s=this.prefixes.add[\"@supports\"];e.walkAtRules(f=>{if(f.name===\"keyframes\"){if(!this.disabled(f,t))return n&&n.process(f)}else if(f.name===\"viewport\"){if(!this.disabled(f,t))return a&&a.process(f)}else if(f.name===\"supports\"){if(this.prefixes.options.supports!==!1&&!this.disabled(f,t))return s.process(f)}else if(f.name===\"media\"&&f.params.includes(\"-resolution\")&&!this.disabled(f,t))return r&&r.process(f)}),e.walkRules(f=>{if(!this.disabled(f,t))return this.prefixes.add.selectors.map(d=>d.process(f,t))});function o(f){return f.parent.nodes.some(d=>{if(d.type!==\"decl\")return!1;let p=d.prop===\"display\"&&/(inline-)?grid/.test(d.value),m=d.prop.startsWith(\"grid-template\"),b=/^grid-([A-z]+-)?gap/.test(d.prop);return p||m||b})}function u(f){return f.parent.some(d=>d.prop===\"display\"&&/(inline-)?flex/.test(d.value))}let c=this.gridStatus(e,t)&&this.prefixes.add[\"grid-area\"]&&this.prefixes.add[\"grid-area\"].prefixes;return e.walkDecls(f=>{if(this.disabledDecl(f,t))return;let d=f.parent,p=f.prop,m=f.value;if(p===\"grid-row-span\"){t.warn(\"grid-row-span is not part of final Grid Layout. Use grid-row.\",{node:f});return}else if(p===\"grid-column-span\"){t.warn(\"grid-column-span is not part of final Grid Layout. Use grid-column.\",{node:f});return}else if(p===\"display\"&&m===\"box\"){t.warn(\"You should write display: flex by final spec instead of display: box\",{node:f});return}else if(p===\"text-emphasis-position\")(m===\"under\"||m===\"over\")&&t.warn(\"You should use 2 values for text-emphasis-position For example, `under left` instead of just `under`.\",{node:f});else if(/^(align|justify|place)-(items|content)$/.test(p)&&u(f))(m===\"start\"||m===\"end\")&&t.warn(`${m} value has mixed support, consider using flex-${m} instead`,{node:f});else if(p===\"text-decoration-skip\"&&m===\"ink\")t.warn(\"Replace text-decoration-skip: ink to text-decoration-skip-ink: auto, because spec had been changed\",{node:f});else{if(c&&this.gridStatus(f,t))if(f.value===\"subgrid\"&&t.warn(\"IE does not support subgrid\",{node:f}),/^(align|justify|place)-items$/.test(p)&&o(f)){let x=p.replace(\"-items\",\"-self\");t.warn(`IE does not support ${p} on grid containers. Try using ${x} on child elements instead: ${f.parent.selector} > * { ${x}: ${f.value} }`,{node:f})}else if(/^(align|justify|place)-content$/.test(p)&&o(f))t.warn(`IE does not support ${f.prop} on grid containers`,{node:f});else if(p===\"display\"&&f.value===\"contents\"){t.warn(\"Please do not use display: contents; if you have grid setting enabled\",{node:f});return}else if(f.prop===\"grid-gap\"){let x=this.gridStatus(f,t);x===\"autoplace\"&&!oA(f)&&!Zo(f)?t.warn(\"grid-gap only works if grid-template(-areas) is being used or both rows and columns have been declared and cells have not been manually placed inside the explicit grid\",{node:f}):(x===!0||x===\"no-autoplace\")&&!Zo(f)&&t.warn(\"grid-gap only works if grid-template(-areas) is being used\",{node:f})}else if(p===\"grid-auto-columns\"){t.warn(\"grid-auto-columns is not supported by IE\",{node:f});return}else if(p===\"grid-auto-rows\"){t.warn(\"grid-auto-rows is not supported by IE\",{node:f});return}else if(p===\"grid-auto-flow\"){let x=d.some(w=>w.prop===\"grid-template-rows\"),y=d.some(w=>w.prop===\"grid-template-columns\");Zo(f)?t.warn(\"grid-auto-flow is not supported by IE\",{node:f}):m.includes(\"dense\")?t.warn(\"grid-auto-flow: dense is not supported by IE\",{node:f}):!x&&!y&&t.warn(\"grid-auto-flow works only if grid-template-rows and grid-template-columns are present in the same rule\",{node:f});return}else if(m.includes(\"auto-fit\")){t.warn(\"auto-fit value is not supported by IE\",{node:f,word:\"auto-fit\"});return}else if(m.includes(\"auto-fill\")){t.warn(\"auto-fill value is not supported by IE\",{node:f,word:\"auto-fill\"});return}else p.startsWith(\"grid-template\")&&m.includes(\"[\")&&t.warn(\"Autoprefixer currently does not support line names. Try using grid-template-areas instead.\",{node:f,word:\"[\"});if(m.includes(\"radial-gradient\"))if(iA.test(f.value))t.warn(\"Gradient has outdated direction syntax. New syntax is like `closest-side at 0 0` instead of `0 0, closest-side`.\",{node:f});else{let x=Km(m);for(let y of x.nodes)if(y.type===\"function\"&&y.value===\"radial-gradient\")for(let w of y.nodes)w.type===\"word\"&&(w.value===\"cover\"?t.warn(\"Gradient has outdated direction syntax. Replace `cover` to `farthest-corner`.\",{node:f}):w.value===\"contain\"&&t.warn(\"Gradient has outdated direction syntax. Replace `contain` to `closest-side`.\",{node:f}))}m.includes(\"linear-gradient\")&&rA.test(m)&&t.warn(\"Gradient has outdated direction syntax. New syntax is like `to left` instead of `right`.\",{node:f})}aA.includes(f.prop)&&(f.value.includes(\"-fill-available\")||(f.value.includes(\"fill-available\")?t.warn(\"Replace fill-available to stretch, because spec had been changed\",{node:f}):f.value.includes(\"fill\")&&Km(m).nodes.some(y=>y.type===\"word\"&&y.value===\"fill\")&&t.warn(\"Replace fill to stretch, because spec had been changed\",{node:f})));let b;if(f.prop===\"transition\"||f.prop===\"transition-property\")return this.prefixes.transition.add(f,t);if(f.prop===\"align-self\"){if(this.displayType(f)!==\"grid\"&&this.prefixes.options.flexbox!==!1&&(b=this.prefixes.add[\"align-self\"],b&&b.prefixes&&b.process(f)),this.gridStatus(f,t)!==!1&&(b=this.prefixes.add[\"grid-row-align\"],b&&b.prefixes))return b.process(f,t)}else if(f.prop===\"justify-self\"){if(this.gridStatus(f,t)!==!1&&(b=this.prefixes.add[\"grid-column-align\"],b&&b.prefixes))return b.process(f,t)}else if(f.prop===\"place-self\"){if(b=this.prefixes.add[\"place-self\"],b&&b.prefixes&&this.gridStatus(f,t)!==!1)return b.process(f,t)}else if(b=this.prefixes.add[f.prop],b&&b.prefixes)return b.process(f,t)}),this.gridStatus(e,t)&&tA(e,this.disabled),e.walkDecls(f=>{if(this.disabledValue(f,t))return;let d=this.prefixes.unprefixed(f.prop),p=this.prefixes.values(\"add\",d);if(Array.isArray(p))for(let m of p)m.process&&m.process(f,t);eA.save(this.prefixes,f)})}remove(e,t){let r=this.prefixes.remove[\"@resolution\"];e.walkAtRules((n,a)=>{this.prefixes.remove[`@${n.name}`]?this.disabled(n,t)||n.parent.removeChild(a):n.name===\"media\"&&n.params.includes(\"-resolution\")&&r&&r.clean(n)});for(let n of this.prefixes.remove.selectors)e.walkRules((a,s)=>{n.check(a)&&(this.disabled(a,t)||a.parent.removeChild(s))});return e.walkDecls((n,a)=>{if(this.disabled(n,t))return;let s=n.parent,o=this.prefixes.unprefixed(n.prop);if((n.prop===\"transition\"||n.prop===\"transition-property\")&&this.prefixes.transition.remove(n),this.prefixes.remove[n.prop]&&this.prefixes.remove[n.prop].remove){let u=this.prefixes.group(n).down(c=>this.prefixes.normalize(c.prop)===o);if(o===\"flex-flow\"&&(u=!0),n.prop===\"-webkit-box-orient\"){let c={\"flex-direction\":!0,\"flex-flow\":!0};if(!n.parent.some(f=>c[f.prop]))return}if(u&&!this.withHackValue(n)){n.raw(\"before\").includes(`\n`)&&this.reduceSpaces(n),s.removeChild(a);return}}for(let u of this.prefixes.values(\"remove\",o)){if(!u.check||!u.check(n.value))continue;if(o=u.unprefixed,this.prefixes.group(n).down(f=>f.value.includes(o))){s.removeChild(a);return}}})}withHackValue(e){return e.prop===\"-webkit-background-clip\"&&e.value===\"text\"}disabledValue(e,t){return this.gridStatus(e,t)===!1&&e.type===\"decl\"&&e.prop===\"display\"&&e.value.includes(\"grid\")||this.prefixes.options.flexbox===!1&&e.type===\"decl\"&&e.prop===\"display\"&&e.value.includes(\"flex\")||e.type===\"decl\"&&e.prop===\"content\"?!0:this.disabled(e,t)}disabledDecl(e,t){if(this.gridStatus(e,t)===!1&&e.type===\"decl\"&&(e.prop.includes(\"grid\")||e.prop===\"justify-items\"))return!0;if(this.prefixes.options.flexbox===!1&&e.type===\"decl\"){let r=[\"order\",\"justify-content\",\"align-items\",\"align-content\"];if(e.prop.includes(\"flex\")||r.includes(e.prop))return!0}return this.disabled(e,t)}disabled(e,t){if(!e)return!1;if(e._autoprefixerDisabled!==void 0)return e._autoprefixerDisabled;if(e.parent){let n=e.prev();if(n&&n.type===\"comment\"&&nA.test(n.text))return e._autoprefixerDisabled=!0,e._autoprefixerSelfDisabled=!0,!0}let r=null;if(e.nodes){let n;e.each(a=>{a.type===\"comment\"&&/(!\\s*)?autoprefixer:\\s*(off|on)/i.test(a.text)&&(typeof n!=\"undefined\"?t.warn(\"Second Autoprefixer control comment was ignored. Autoprefixer applies control comment to whole block, not to next rules.\",{node:a}):n=/on/i.test(a.text))}),n!==void 0&&(r=!n)}if(!e.nodes||r===null)if(e.parent){let n=this.disabled(e.parent,t);e.parent._autoprefixerSelfDisabled===!0?r=!1:r=n}else r=!1;return e._autoprefixerDisabled=r,r}reduceSpaces(e){let t=!1;if(this.prefixes.group(e).up(()=>(t=!0,!0)),t)return;let r=e.raw(\"before\").split(`\n`),n=r[r.length-1].length,a=!1;this.prefixes.group(e).down(s=>{r=s.raw(\"before\").split(`\n`);let o=r.length-1;r[o].length>n&&(a===!1&&(a=r[o].length-n),r[o]=r[o].slice(0,-a),s.raws.before=r.join(`\n`))})}displayType(e){for(let t of e.parent.nodes)if(t.prop===\"display\"){if(t.value.includes(\"flex\"))return\"flex\";if(t.value.includes(\"grid\"))return\"grid\"}return!1}gridStatus(e,t){if(!e)return!1;if(e._autoprefixerGridStatus!==void 0)return e._autoprefixerGridStatus;let r=null;if(e.nodes){let n;e.each(a=>{if(a.type===\"comment\"&&sA.test(a.text)){let s=/:\\s*autoplace/i.test(a.text),o=/no-autoplace/i.test(a.text);typeof n!=\"undefined\"?t.warn(\"Second Autoprefixer grid control comment was ignored. Autoprefixer applies control comments to the whole block, not to the next rules.\",{node:a}):s?n=\"autoplace\":o?n=!0:n=/on/i.test(a.text)}}),n!==void 0&&(r=n)}if(e.type===\"atrule\"&&e.name===\"supports\"){let n=e.params;n.includes(\"grid\")&&n.includes(\"auto\")&&(r=!1)}if(!e.nodes||r===null)if(e.parent){let n=this.gridStatus(e.parent,t);e.parent._autoprefixerSelfDisabled===!0?r=!1:r=n}else typeof this.prefixes.options.grid!=\"undefined\"?r=this.prefixes.options.grid:typeof h.env.AUTOPREFIXER_GRID!=\"undefined\"?h.env.AUTOPREFIXER_GRID===\"autoplace\"?r=\"autoplace\":r=!0:r=!1;return e._autoprefixerGridStatus=r,r}};eg.exports=Zm});var rg=v((b4,tg)=>{l();tg.exports={A:{A:{\"2\":\"K E F G A B JC\"},B:{\"1\":\"C L M H N D O P Q R S T U V W X Y Z a b c d e f g h i j n o p q r s t u v w x y z I\"},C:{\"1\":\"2 3 4 5 6 7 8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB 0B dB 1B eB fB gB hB iB jB kB lB mB nB oB m pB qB rB sB tB P Q R 2B S T U V W X Y Z a b c d e f g h i j n o p q r s t u v w x y z I uB 3B 4B\",\"2\":\"0 1 KC zB J K E F G A B C L M H N D O k l LC MC\"},D:{\"1\":\"8 9 AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB 0B dB 1B eB fB gB hB iB jB kB lB mB nB oB m pB qB rB sB tB P Q R S T U V W X Y Z a b c d e f g h i j n o p q r s t u v w x y z I uB 3B 4B\",\"2\":\"0 1 2 3 4 5 6 7 J K E F G A B C L M H N D O k l\"},E:{\"1\":\"G A B C L M H D RC 6B vB wB 7B SC TC 8B 9B xB AC yB BC CC DC EC FC GC UC\",\"2\":\"0 J K E F NC 5B OC PC QC\"},F:{\"1\":\"1 2 3 4 5 6 7 8 9 H N D O k l AB BB CB DB EB FB GB HB IB JB KB LB MB NB OB PB QB RB SB TB UB VB WB XB YB ZB aB bB cB dB eB fB gB hB iB jB kB lB mB nB oB m pB qB rB sB tB P Q R 2B S T U V W X Y Z a b c d e f g h i j wB\",\"2\":\"G B C VC WC XC YC vB HC ZC\"},G:{\"1\":\"D fC gC hC iC jC kC lC mC nC oC pC qC rC sC tC 8B 9B xB AC yB BC CC DC EC FC GC\",\"2\":\"F 5B aC IC bC cC dC eC\"},H:{\"1\":\"uC\"},I:{\"1\":\"I zC 0C\",\"2\":\"zB J vC wC xC yC IC\"},J:{\"2\":\"E A\"},K:{\"1\":\"m\",\"2\":\"A B C vB HC wB\"},L:{\"1\":\"I\"},M:{\"1\":\"uB\"},N:{\"2\":\"A B\"},O:{\"1\":\"xB\"},P:{\"1\":\"J k l 1C 2C 3C 4C 5C 6B 6C 7C 8C 9C AD yB BD CD DD\"},Q:{\"1\":\"7B\"},R:{\"1\":\"ED\"},S:{\"1\":\"FD GD\"}},B:4,C:\"CSS Feature Queries\"}});var ag=v((v4,sg)=>{l();function ig(i){return i[i.length-1]}var ng={parse(i){let e=[\"\"],t=[e];for(let r of i){if(r===\"(\"){e=[\"\"],ig(t).push(e),t.push(e);continue}if(r===\")\"){t.pop(),e=ig(t),e.push(\"\");continue}e[e.length-1]+=r}return t[0]},stringify(i){let e=\"\";for(let t of i){if(typeof t==\"object\"){e+=`(${ng.stringify(t)})`;continue}e+=t}return e}};sg.exports=ng});var cg=v((x4,fg)=>{l();var lA=rg(),{feature:uA}=($n(),Ln),{parse:fA}=ye(),cA=dt(),tl=ag(),pA=Se(),dA=ue(),og=uA(lA),lg=[];for(let i in og.stats){let e=og.stats[i];for(let t in e){let r=e[t];/y/.test(r)&&lg.push(i+\" \"+t)}}var ug=class{constructor(e,t){this.Prefixes=e,this.all=t}prefixer(){if(this.prefixerCache)return this.prefixerCache;let e=this.all.browsers.selected.filter(r=>lg.includes(r)),t=new cA(this.all.browsers.data,e,this.all.options);return this.prefixerCache=new this.Prefixes(this.all.data,t,this.all.options),this.prefixerCache}parse(e){let t=e.split(\":\"),r=t[0],n=t[1];return n||(n=\"\"),[r.trim(),n.trim()]}virtual(e){let[t,r]=this.parse(e),n=fA(\"a{}\").first;return n.append({prop:t,value:r,raws:{before:\"\"}}),n}prefixed(e){let t=this.virtual(e);if(this.disabled(t.first))return t.nodes;let r={warn:()=>null},n=this.prefixer().add[t.first.prop];n&&n.process&&n.process(t.first,r);for(let a of t.nodes){for(let s of this.prefixer().values(\"add\",t.first.prop))s.process(a);pA.save(this.all,a)}return t.nodes}isNot(e){return typeof e==\"string\"&&/not\\s*/i.test(e)}isOr(e){return typeof e==\"string\"&&/\\s*or\\s*/i.test(e)}isProp(e){return typeof e==\"object\"&&e.length===1&&typeof e[0]==\"string\"}isHack(e,t){return!new RegExp(`(\\\\(|\\\\s)${dA.escapeRegexp(t)}:`).test(e)}toRemove(e,t){let[r,n]=this.parse(e),a=this.all.unprefixed(r),s=this.all.cleaner();if(s.remove[r]&&s.remove[r].remove&&!this.isHack(t,a))return!0;for(let o of s.values(\"remove\",a))if(o.check(n))return!0;return!1}remove(e,t){let r=0;for(;r<e.length;){if(!this.isNot(e[r-1])&&this.isProp(e[r])&&this.isOr(e[r+1])){if(this.toRemove(e[r][0],t)){e.splice(r,2);continue}r+=2;continue}typeof e[r]==\"object\"&&(e[r]=this.remove(e[r],t)),r+=1}return e}cleanBrackets(e){return e.map(t=>typeof t!=\"object\"?t:t.length===1&&typeof t[0]==\"object\"?this.cleanBrackets(t[0]):this.cleanBrackets(t))}convert(e){let t=[\"\"];for(let r of e)t.push([`${r.prop}: ${r.value}`]),t.push(\" or \");return t[t.length-1]=\"\",t}normalize(e){if(typeof e!=\"object\")return e;if(e=e.filter(t=>t!==\"\"),typeof e[0]==\"string\"){let t=e[0].trim();if(t.includes(\":\")||t===\"selector\"||t===\"not selector\")return[tl.stringify(e)]}return e.map(t=>this.normalize(t))}add(e,t){return e.map(r=>{if(this.isProp(r)){let n=this.prefixed(r[0]);return n.length>1?this.convert(n):r}return typeof r==\"object\"?this.add(r,t):r})}process(e){let t=tl.parse(e.params);t=this.normalize(t),t=this.remove(t,e.params),t=this.add(t,e.params),t=this.cleanBrackets(t),e.params=tl.stringify(t)}disabled(e){if(!this.all.options.grid&&(e.prop===\"display\"&&e.value.includes(\"grid\")||e.prop.includes(\"grid\")||e.prop===\"justify-items\"))return!0;if(this.all.options.flexbox===!1){if(e.prop===\"display\"&&e.value.includes(\"flex\"))return!0;let t=[\"order\",\"justify-content\",\"align-items\",\"align-content\"];if(e.prop.includes(\"flex\")||t.includes(e.prop))return!0}return!1}};fg.exports=ug});var hg=v((k4,dg)=>{l();var pg=class{constructor(e,t){this.prefix=t,this.prefixed=e.prefixed(this.prefix),this.regexp=e.regexp(this.prefix),this.prefixeds=e.possible().map(r=>[e.prefixed(r),e.regexp(r)]),this.unprefixed=e.name,this.nameRegexp=e.regexp()}isHack(e){let t=e.parent.index(e)+1,r=e.parent.nodes;for(;t<r.length;){let n=r[t].selector;if(!n)return!0;if(n.includes(this.unprefixed)&&n.match(this.nameRegexp))return!1;let a=!1;for(let[s,o]of this.prefixeds)if(n.includes(s)&&n.match(o)){a=!0;break}if(!a)return!0;t+=1}return!0}check(e){return!(!e.selector.includes(this.prefixed)||!e.selector.match(this.regexp)||this.isHack(e))}};dg.exports=pg});var Yt=v((S4,gg)=>{l();var{list:hA}=ye(),mA=hg(),gA=Wt(),yA=dt(),wA=ue(),mg=class extends gA{constructor(e,t,r){super(e,t,r);this.regexpCache=new Map}check(e){return e.selector.includes(this.name)?!!e.selector.match(this.regexp()):!1}prefixed(e){return this.name.replace(/^(\\W*)/,`$1${e}`)}regexp(e){if(!this.regexpCache.has(e)){let t=e?this.prefixed(e):this.name;this.regexpCache.set(e,new RegExp(`(^|[^:\"'=])${wA.escapeRegexp(t)}`,\"gi\"))}return this.regexpCache.get(e)}possible(){return yA.prefixes()}prefixeds(e){if(e._autoprefixerPrefixeds){if(e._autoprefixerPrefixeds[this.name])return e._autoprefixerPrefixeds}else e._autoprefixerPrefixeds={};let t={};if(e.selector.includes(\",\")){let n=hA.comma(e.selector).filter(a=>a.includes(this.name));for(let a of this.possible())t[a]=n.map(s=>this.replace(s,a)).join(\", \")}else for(let r of this.possible())t[r]=this.replace(e.selector,r);return e._autoprefixerPrefixeds[this.name]=t,e._autoprefixerPrefixeds}already(e,t,r){let n=e.parent.index(e)-1;for(;n>=0;){let a=e.parent.nodes[n];if(a.type!==\"rule\")return!1;let s=!1;for(let o in t[this.name]){let u=t[this.name][o];if(a.selector===u){if(r===o)return!0;s=!0;break}}if(!s)return!1;n-=1}return!1}replace(e,t){return e.replace(this.regexp(),`$1${this.prefixed(t)}`)}add(e,t){let r=this.prefixeds(e);if(this.already(e,r,t))return;let n=this.clone(e,{selector:r[this.name][t]});e.parent.insertBefore(e,n)}old(e){return new mA(this,e)}};gg.exports=mg});var bg=v((C4,wg)=>{l();var bA=Wt(),yg=class extends bA{add(e,t){let r=t+e.name;if(e.parent.some(s=>s.name===r&&s.params===e.params))return;let a=this.clone(e,{name:r});return e.parent.insertBefore(e,a)}process(e){let t=this.parentPrefix(e);for(let r of this.prefixes)(!t||t===r)&&this.add(e,r)}};wg.exports=yg});var xg=v((A4,vg)=>{l();var vA=Yt(),rl=class extends vA{prefixed(e){return e===\"-webkit-\"?\":-webkit-full-screen\":e===\"-moz-\"?\":-moz-full-screen\":`:${e}fullscreen`}};rl.names=[\":fullscreen\"];vg.exports=rl});var Sg=v((_4,kg)=>{l();var xA=Yt(),il=class extends xA{possible(){return super.possible().concat([\"-moz- old\",\"-ms- old\"])}prefixed(e){return e===\"-webkit-\"?\"::-webkit-input-placeholder\":e===\"-ms-\"?\"::-ms-input-placeholder\":e===\"-ms- old\"?\":-ms-input-placeholder\":e===\"-moz- old\"?\":-moz-placeholder\":`::${e}placeholder`}};il.names=[\"::placeholder\"];kg.exports=il});var Ag=v((O4,Cg)=>{l();var kA=Yt(),nl=class extends kA{prefixed(e){return e===\"-ms-\"?\":-ms-input-placeholder\":`:${e}placeholder-shown`}};nl.names=[\":placeholder-shown\"];Cg.exports=nl});var Og=v((E4,_g)=>{l();var SA=Yt(),CA=ue(),sl=class extends SA{constructor(e,t,r){super(e,t,r);this.prefixes&&(this.prefixes=CA.uniq(this.prefixes.map(n=>\"-webkit-\")))}prefixed(e){return e===\"-webkit-\"?\"::-webkit-file-upload-button\":`::${e}file-selector-button`}};sl.names=[\"::file-selector-button\"];_g.exports=sl});var de=v((T4,Eg)=>{l();Eg.exports=function(i){let e;return i===\"-webkit- 2009\"||i===\"-moz-\"?e=2009:i===\"-ms-\"?e=2012:i===\"-webkit-\"&&(e=\"final\"),i===\"-webkit- 2009\"&&(i=\"-webkit-\"),[e,i]}});var Ig=v((P4,Dg)=>{l();var Tg=ye().list,Pg=de(),AA=M(),Qt=class extends AA{prefixed(e,t){let r;return[r,t]=Pg(t),r===2009?t+\"box-flex\":super.prefixed(e,t)}normalize(){return\"flex\"}set(e,t){let r=Pg(t)[0];if(r===2009)return e.value=Tg.space(e.value)[0],e.value=Qt.oldValues[e.value]||e.value,super.set(e,t);if(r===2012){let n=Tg.space(e.value);n.length===3&&n[2]===\"0\"&&(e.value=n.slice(0,2).concat(\"0px\").join(\" \"))}return super.set(e,t)}};Qt.names=[\"flex\",\"box-flex\"];Qt.oldValues={auto:\"1\",none:\"0\"};Dg.exports=Qt});var Mg=v((D4,Rg)=>{l();var qg=de(),_A=M(),al=class extends _A{prefixed(e,t){let r;return[r,t]=qg(t),r===2009?t+\"box-ordinal-group\":r===2012?t+\"flex-order\":super.prefixed(e,t)}normalize(){return\"order\"}set(e,t){return qg(t)[0]===2009&&/\\d/.test(e.value)?(e.value=(parseInt(e.value)+1).toString(),super.set(e,t)):super.set(e,t)}};al.names=[\"order\",\"flex-order\",\"box-ordinal-group\"];Rg.exports=al});var Fg=v((I4,Bg)=>{l();var OA=M(),ol=class extends OA{check(e){let t=e.value;return!t.toLowerCase().includes(\"alpha(\")&&!t.includes(\"DXImageTransform.Microsoft\")&&!t.includes(\"data:image/svg+xml\")}};ol.names=[\"filter\"];Bg.exports=ol});var Lg=v((q4,Ng)=>{l();var EA=M(),ll=class extends EA{insert(e,t,r,n){if(t!==\"-ms-\")return super.insert(e,t,r);let a=this.clone(e),s=e.prop.replace(/end$/,\"start\"),o=t+e.prop.replace(/end$/,\"span\");if(!e.parent.some(u=>u.prop===o)){if(a.prop=o,e.value.includes(\"span\"))a.value=e.value.replace(/span\\s/i,\"\");else{let u;if(e.parent.walkDecls(s,c=>{u=c}),u){let c=Number(e.value)-Number(u.value)+\"\";a.value=c}else e.warn(n,`Can not prefix ${e.prop} (${s} is not found)`)}e.cloneBefore(a)}}};ll.names=[\"grid-row-end\",\"grid-column-end\"];Ng.exports=ll});var jg=v((R4,$g)=>{l();var TA=M(),ul=class extends TA{check(e){return!e.value.split(/\\s+/).some(t=>{let r=t.toLowerCase();return r===\"reverse\"||r===\"alternate-reverse\"})}};ul.names=[\"animation\",\"animation-direction\"];$g.exports=ul});var Vg=v((M4,zg)=>{l();var PA=de(),DA=M(),fl=class extends DA{insert(e,t,r){let n;if([n,t]=PA(t),n!==2009)return super.insert(e,t,r);let a=e.value.split(/\\s+/).filter(d=>d!==\"wrap\"&&d!==\"nowrap\"&&\"wrap-reverse\");if(a.length===0||e.parent.some(d=>d.prop===t+\"box-orient\"||d.prop===t+\"box-direction\"))return;let o=a[0],u=o.includes(\"row\")?\"horizontal\":\"vertical\",c=o.includes(\"reverse\")?\"reverse\":\"normal\",f=this.clone(e);return f.prop=t+\"box-orient\",f.value=u,this.needCascade(e)&&(f.raws.before=this.calcBefore(r,e,t)),e.parent.insertBefore(e,f),f=this.clone(e),f.prop=t+\"box-direction\",f.value=c,this.needCascade(e)&&(f.raws.before=this.calcBefore(r,e,t)),e.parent.insertBefore(e,f)}};fl.names=[\"flex-flow\",\"box-direction\",\"box-orient\"];zg.exports=fl});var Wg=v((B4,Ug)=>{l();var IA=de(),qA=M(),cl=class extends qA{normalize(){return\"flex\"}prefixed(e,t){let r;return[r,t]=IA(t),r===2009?t+\"box-flex\":r===2012?t+\"flex-positive\":super.prefixed(e,t)}};cl.names=[\"flex-grow\",\"flex-positive\"];Ug.exports=cl});var Hg=v((F4,Gg)=>{l();var RA=de(),MA=M(),pl=class extends MA{set(e,t){if(RA(t)[0]!==2009)return super.set(e,t)}};pl.names=[\"flex-wrap\"];Gg.exports=pl});var Qg=v((N4,Yg)=>{l();var BA=M(),Jt=mt(),dl=class extends BA{insert(e,t,r,n){if(t!==\"-ms-\")return super.insert(e,t,r);let a=Jt.parse(e),[s,o]=Jt.translate(a,0,2),[u,c]=Jt.translate(a,1,3);[[\"grid-row\",s],[\"grid-row-span\",o],[\"grid-column\",u],[\"grid-column-span\",c]].forEach(([f,d])=>{Jt.insertDecl(e,f,d)}),Jt.warnTemplateSelectorNotFound(e,n),Jt.warnIfGridRowColumnExists(e,n)}};dl.names=[\"grid-area\"];Yg.exports=dl});var Xg=v((L4,Jg)=>{l();var FA=M(),ni=mt(),hl=class extends FA{insert(e,t,r){if(t!==\"-ms-\")return super.insert(e,t,r);if(e.parent.some(s=>s.prop===\"-ms-grid-row-align\"))return;let[[n,a]]=ni.parse(e);a?(ni.insertDecl(e,\"grid-row-align\",n),ni.insertDecl(e,\"grid-column-align\",a)):(ni.insertDecl(e,\"grid-row-align\",n),ni.insertDecl(e,\"grid-column-align\",n))}};hl.names=[\"place-self\"];Jg.exports=hl});var Zg=v(($4,Kg)=>{l();var NA=M(),ml=class extends NA{check(e){let t=e.value;return!t.includes(\"/\")||t.includes(\"span\")}normalize(e){return e.replace(\"-start\",\"\")}prefixed(e,t){let r=super.prefixed(e,t);return t===\"-ms-\"&&(r=r.replace(\"-start\",\"\")),r}};ml.names=[\"grid-row-start\",\"grid-column-start\"];Kg.exports=ml});var ry=v((j4,ty)=>{l();var ey=de(),LA=M(),Xt=class extends LA{check(e){return e.parent&&!e.parent.some(t=>t.prop&&t.prop.startsWith(\"grid-\"))}prefixed(e,t){let r;return[r,t]=ey(t),r===2012?t+\"flex-item-align\":super.prefixed(e,t)}normalize(){return\"align-self\"}set(e,t){let r=ey(t)[0];if(r===2012)return e.value=Xt.oldValues[e.value]||e.value,super.set(e,t);if(r===\"final\")return super.set(e,t)}};Xt.names=[\"align-self\",\"flex-item-align\"];Xt.oldValues={\"flex-end\":\"end\",\"flex-start\":\"start\"};ty.exports=Xt});var ny=v((z4,iy)=>{l();var $A=M(),jA=ue(),gl=class extends $A{constructor(e,t,r){super(e,t,r);this.prefixes&&(this.prefixes=jA.uniq(this.prefixes.map(n=>n===\"-ms-\"?\"-webkit-\":n)))}};gl.names=[\"appearance\"];iy.exports=gl});var oy=v((V4,ay)=>{l();var sy=de(),zA=M(),yl=class extends zA{normalize(){return\"flex-basis\"}prefixed(e,t){let r;return[r,t]=sy(t),r===2012?t+\"flex-preferred-size\":super.prefixed(e,t)}set(e,t){let r;if([r,t]=sy(t),r===2012||r===\"final\")return super.set(e,t)}};yl.names=[\"flex-basis\",\"flex-preferred-size\"];ay.exports=yl});var uy=v((U4,ly)=>{l();var VA=M(),wl=class extends VA{normalize(){return this.name.replace(\"box-image\",\"border\")}prefixed(e,t){let r=super.prefixed(e,t);return t===\"-webkit-\"&&(r=r.replace(\"border\",\"box-image\")),r}};wl.names=[\"mask-border\",\"mask-border-source\",\"mask-border-slice\",\"mask-border-width\",\"mask-border-outset\",\"mask-border-repeat\",\"mask-box-image\",\"mask-box-image-source\",\"mask-box-image-slice\",\"mask-box-image-width\",\"mask-box-image-outset\",\"mask-box-image-repeat\"];ly.exports=wl});var cy=v((W4,fy)=>{l();var UA=M(),Le=class extends UA{insert(e,t,r){let n=e.prop===\"mask-composite\",a;n?a=e.value.split(\",\"):a=e.value.match(Le.regexp)||[],a=a.map(c=>c.trim()).filter(c=>c);let s=a.length,o;if(s&&(o=this.clone(e),o.value=a.map(c=>Le.oldValues[c]||c).join(\", \"),a.includes(\"intersect\")&&(o.value+=\", xor\"),o.prop=t+\"mask-composite\"),n)return s?(this.needCascade(e)&&(o.raws.before=this.calcBefore(r,e,t)),e.parent.insertBefore(e,o)):void 0;let u=this.clone(e);return u.prop=t+u.prop,s&&(u.value=u.value.replace(Le.regexp,\"\")),this.needCascade(e)&&(u.raws.before=this.calcBefore(r,e,t)),e.parent.insertBefore(e,u),s?(this.needCascade(e)&&(o.raws.before=this.calcBefore(r,e,t)),e.parent.insertBefore(e,o)):e}};Le.names=[\"mask\",\"mask-composite\"];Le.oldValues={add:\"source-over\",subtract:\"source-out\",intersect:\"source-in\",exclude:\"xor\"};Le.regexp=new RegExp(`\\\\s+(${Object.keys(Le.oldValues).join(\"|\")})\\\\b(?!\\\\))\\\\s*(?=[,])`,\"ig\");fy.exports=Le});var hy=v((G4,dy)=>{l();var py=de(),WA=M(),Kt=class extends WA{prefixed(e,t){let r;return[r,t]=py(t),r===2009?t+\"box-align\":r===2012?t+\"flex-align\":super.prefixed(e,t)}normalize(){return\"align-items\"}set(e,t){let r=py(t)[0];return(r===2009||r===2012)&&(e.value=Kt.oldValues[e.value]||e.value),super.set(e,t)}};Kt.names=[\"align-items\",\"flex-align\",\"box-align\"];Kt.oldValues={\"flex-end\":\"end\",\"flex-start\":\"start\"};dy.exports=Kt});var gy=v((H4,my)=>{l();var GA=M(),bl=class extends GA{set(e,t){return t===\"-ms-\"&&e.value===\"contain\"&&(e.value=\"element\"),super.set(e,t)}insert(e,t,r){if(!(e.value===\"all\"&&t===\"-ms-\"))return super.insert(e,t,r)}};bl.names=[\"user-select\"];my.exports=bl});var by=v((Y4,wy)=>{l();var yy=de(),HA=M(),vl=class extends HA{normalize(){return\"flex-shrink\"}prefixed(e,t){let r;return[r,t]=yy(t),r===2012?t+\"flex-negative\":super.prefixed(e,t)}set(e,t){let r;if([r,t]=yy(t),r===2012||r===\"final\")return super.set(e,t)}};vl.names=[\"flex-shrink\",\"flex-negative\"];wy.exports=vl});var xy=v((Q4,vy)=>{l();var YA=M(),xl=class extends YA{prefixed(e,t){return`${t}column-${e}`}normalize(e){return e.includes(\"inside\")?\"break-inside\":e.includes(\"before\")?\"break-before\":\"break-after\"}set(e,t){return(e.prop===\"break-inside\"&&e.value===\"avoid-column\"||e.value===\"avoid-page\")&&(e.value=\"avoid\"),super.set(e,t)}insert(e,t,r){if(e.prop!==\"break-inside\")return super.insert(e,t,r);if(!(/region/i.test(e.value)||/page/i.test(e.value)))return super.insert(e,t,r)}};xl.names=[\"break-inside\",\"page-break-inside\",\"column-break-inside\",\"break-before\",\"page-break-before\",\"column-break-before\",\"break-after\",\"page-break-after\",\"column-break-after\"];vy.exports=xl});var Sy=v((J4,ky)=>{l();var QA=M(),kl=class extends QA{prefixed(e,t){return t+\"print-color-adjust\"}normalize(){return\"color-adjust\"}};kl.names=[\"color-adjust\",\"print-color-adjust\"];ky.exports=kl});var Ay=v((X4,Cy)=>{l();var JA=M(),Zt=class extends JA{insert(e,t,r){if(t===\"-ms-\"){let n=this.set(this.clone(e),t);this.needCascade(e)&&(n.raws.before=this.calcBefore(r,e,t));let a=\"ltr\";return e.parent.nodes.forEach(s=>{s.prop===\"direction\"&&(s.value===\"rtl\"||s.value===\"ltr\")&&(a=s.value)}),n.value=Zt.msValues[a][e.value]||e.value,e.parent.insertBefore(e,n)}return super.insert(e,t,r)}};Zt.names=[\"writing-mode\"];Zt.msValues={ltr:{\"horizontal-tb\":\"lr-tb\",\"vertical-rl\":\"tb-rl\",\"vertical-lr\":\"tb-lr\"},rtl:{\"horizontal-tb\":\"rl-tb\",\"vertical-rl\":\"bt-rl\",\"vertical-lr\":\"bt-lr\"}};Cy.exports=Zt});var Oy=v((K4,_y)=>{l();var XA=M(),Sl=class extends XA{set(e,t){return e.value=e.value.replace(/\\s+fill(\\s)/,\"$1\"),super.set(e,t)}};Sl.names=[\"border-image\"];_y.exports=Sl});var Py=v((Z4,Ty)=>{l();var Ey=de(),KA=M(),er=class extends KA{prefixed(e,t){let r;return[r,t]=Ey(t),r===2012?t+\"flex-line-pack\":super.prefixed(e,t)}normalize(){return\"align-content\"}set(e,t){let r=Ey(t)[0];if(r===2012)return e.value=er.oldValues[e.value]||e.value,super.set(e,t);if(r===\"final\")return super.set(e,t)}};er.names=[\"align-content\",\"flex-line-pack\"];er.oldValues={\"flex-end\":\"end\",\"flex-start\":\"start\",\"space-between\":\"justify\",\"space-around\":\"distribute\"};Ty.exports=er});var Iy=v((eI,Dy)=>{l();var ZA=M(),Ce=class extends ZA{prefixed(e,t){return t===\"-moz-\"?t+(Ce.toMozilla[e]||e):super.prefixed(e,t)}normalize(e){return Ce.toNormal[e]||e}};Ce.names=[\"border-radius\"];Ce.toMozilla={};Ce.toNormal={};for(let i of[\"top\",\"bottom\"])for(let e of[\"left\",\"right\"]){let t=`border-${i}-${e}-radius`,r=`border-radius-${i}${e}`;Ce.names.push(t),Ce.names.push(r),Ce.toMozilla[t]=r,Ce.toNormal[r]=t}Dy.exports=Ce});var Ry=v((tI,qy)=>{l();var e_=M(),Cl=class extends e_{prefixed(e,t){return e.includes(\"-start\")?t+e.replace(\"-block-start\",\"-before\"):t+e.replace(\"-block-end\",\"-after\")}normalize(e){return e.includes(\"-before\")?e.replace(\"-before\",\"-block-start\"):e.replace(\"-after\",\"-block-end\")}};Cl.names=[\"border-block-start\",\"border-block-end\",\"margin-block-start\",\"margin-block-end\",\"padding-block-start\",\"padding-block-end\",\"border-before\",\"border-after\",\"margin-before\",\"margin-after\",\"padding-before\",\"padding-after\"];qy.exports=Cl});var By=v((rI,My)=>{l();var t_=M(),{parseTemplate:r_,warnMissedAreas:i_,getGridGap:n_,warnGridGap:s_,inheritGridGap:a_}=mt(),Al=class extends t_{insert(e,t,r,n){if(t!==\"-ms-\")return super.insert(e,t,r);if(e.parent.some(m=>m.prop===\"-ms-grid-rows\"))return;let a=n_(e),s=a_(e,a),{rows:o,columns:u,areas:c}=r_({decl:e,gap:s||a}),f=Object.keys(c).length>0,d=Boolean(o),p=Boolean(u);return s_({gap:a,hasColumns:p,decl:e,result:n}),i_(c,e,n),(d&&p||f)&&e.cloneBefore({prop:\"-ms-grid-rows\",value:o,raws:{}}),p&&e.cloneBefore({prop:\"-ms-grid-columns\",value:u,raws:{}}),e}};Al.names=[\"grid-template\"];My.exports=Al});var Ny=v((iI,Fy)=>{l();var o_=M(),_l=class extends o_{prefixed(e,t){return t+e.replace(\"-inline\",\"\")}normalize(e){return e.replace(/(margin|padding|border)-(start|end)/,\"$1-inline-$2\")}};_l.names=[\"border-inline-start\",\"border-inline-end\",\"margin-inline-start\",\"margin-inline-end\",\"padding-inline-start\",\"padding-inline-end\",\"border-start\",\"border-end\",\"margin-start\",\"margin-end\",\"padding-start\",\"padding-end\"];Fy.exports=_l});var $y=v((nI,Ly)=>{l();var l_=M(),Ol=class extends l_{check(e){return!e.value.includes(\"flex-\")&&e.value!==\"baseline\"}prefixed(e,t){return t+\"grid-row-align\"}normalize(){return\"align-self\"}};Ol.names=[\"grid-row-align\"];Ly.exports=Ol});var zy=v((sI,jy)=>{l();var u_=M(),tr=class extends u_{keyframeParents(e){let{parent:t}=e;for(;t;){if(t.type===\"atrule\"&&t.name===\"keyframes\")return!0;({parent:t}=t)}return!1}contain3d(e){if(e.prop===\"transform-origin\")return!1;for(let t of tr.functions3d)if(e.value.includes(`${t}(`))return!0;return!1}set(e,t){return e=super.set(e,t),t===\"-ms-\"&&(e.value=e.value.replace(/rotatez/gi,\"rotate\")),e}insert(e,t,r){if(t===\"-ms-\"){if(!this.contain3d(e)&&!this.keyframeParents(e))return super.insert(e,t,r)}else if(t===\"-o-\"){if(!this.contain3d(e))return super.insert(e,t,r)}else return super.insert(e,t,r)}};tr.names=[\"transform\",\"transform-origin\"];tr.functions3d=[\"matrix3d\",\"translate3d\",\"translateZ\",\"scale3d\",\"scaleZ\",\"rotate3d\",\"rotateX\",\"rotateY\",\"perspective\"];jy.exports=tr});var Wy=v((aI,Uy)=>{l();var Vy=de(),f_=M(),El=class extends f_{normalize(){return\"flex-direction\"}insert(e,t,r){let n;if([n,t]=Vy(t),n!==2009)return super.insert(e,t,r);if(e.parent.some(f=>f.prop===t+\"box-orient\"||f.prop===t+\"box-direction\"))return;let s=e.value,o,u;s===\"inherit\"||s===\"initial\"||s===\"unset\"?(o=s,u=s):(o=s.includes(\"row\")?\"horizontal\":\"vertical\",u=s.includes(\"reverse\")?\"reverse\":\"normal\");let c=this.clone(e);return c.prop=t+\"box-orient\",c.value=o,this.needCascade(e)&&(c.raws.before=this.calcBefore(r,e,t)),e.parent.insertBefore(e,c),c=this.clone(e),c.prop=t+\"box-direction\",c.value=u,this.needCascade(e)&&(c.raws.before=this.calcBefore(r,e,t)),e.parent.insertBefore(e,c)}old(e,t){let r;return[r,t]=Vy(t),r===2009?[t+\"box-orient\",t+\"box-direction\"]:super.old(e,t)}};El.names=[\"flex-direction\",\"box-direction\",\"box-orient\"];Uy.exports=El});var Hy=v((oI,Gy)=>{l();var c_=M(),Tl=class extends c_{check(e){return e.value===\"pixelated\"}prefixed(e,t){return t===\"-ms-\"?\"-ms-interpolation-mode\":super.prefixed(e,t)}set(e,t){return t!==\"-ms-\"?super.set(e,t):(e.prop=\"-ms-interpolation-mode\",e.value=\"nearest-neighbor\",e)}normalize(){return\"image-rendering\"}process(e,t){return super.process(e,t)}};Tl.names=[\"image-rendering\",\"interpolation-mode\"];Gy.exports=Tl});var Qy=v((lI,Yy)=>{l();var p_=M(),d_=ue(),Pl=class extends p_{constructor(e,t,r){super(e,t,r);this.prefixes&&(this.prefixes=d_.uniq(this.prefixes.map(n=>n===\"-ms-\"?\"-webkit-\":n)))}};Pl.names=[\"backdrop-filter\"];Yy.exports=Pl});var Xy=v((uI,Jy)=>{l();var h_=M(),m_=ue(),Dl=class extends h_{constructor(e,t,r){super(e,t,r);this.prefixes&&(this.prefixes=m_.uniq(this.prefixes.map(n=>n===\"-ms-\"?\"-webkit-\":n)))}check(e){return e.value.toLowerCase()===\"text\"}};Dl.names=[\"background-clip\"];Jy.exports=Dl});var Zy=v((fI,Ky)=>{l();var g_=M(),y_=[\"none\",\"underline\",\"overline\",\"line-through\",\"blink\",\"inherit\",\"initial\",\"unset\"],Il=class extends g_{check(e){return e.value.split(/\\s+/).some(t=>!y_.includes(t))}};Il.names=[\"text-decoration\"];Ky.exports=Il});var rw=v((cI,tw)=>{l();var ew=de(),w_=M(),rr=class extends w_{prefixed(e,t){let r;return[r,t]=ew(t),r===2009?t+\"box-pack\":r===2012?t+\"flex-pack\":super.prefixed(e,t)}normalize(){return\"justify-content\"}set(e,t){let r=ew(t)[0];if(r===2009||r===2012){let n=rr.oldValues[e.value]||e.value;if(e.value=n,r!==2009||n!==\"distribute\")return super.set(e,t)}else if(r===\"final\")return super.set(e,t)}};rr.names=[\"justify-content\",\"flex-pack\",\"box-pack\"];rr.oldValues={\"flex-end\":\"end\",\"flex-start\":\"start\",\"space-between\":\"justify\",\"space-around\":\"distribute\"};tw.exports=rr});var nw=v((pI,iw)=>{l();var b_=M(),ql=class extends b_{set(e,t){let r=e.value.toLowerCase();return t===\"-webkit-\"&&!r.includes(\" \")&&r!==\"contain\"&&r!==\"cover\"&&(e.value=e.value+\" \"+e.value),super.set(e,t)}};ql.names=[\"background-size\"];iw.exports=ql});var aw=v((dI,sw)=>{l();var v_=M(),Rl=mt(),Ml=class extends v_{insert(e,t,r){if(t!==\"-ms-\")return super.insert(e,t,r);let n=Rl.parse(e),[a,s]=Rl.translate(n,0,1);n[0]&&n[0].includes(\"span\")&&(s=n[0].join(\"\").replace(/\\D/g,\"\")),[[e.prop,a],[`${e.prop}-span`,s]].forEach(([u,c])=>{Rl.insertDecl(e,u,c)})}};Ml.names=[\"grid-row\",\"grid-column\"];sw.exports=Ml});var uw=v((hI,lw)=>{l();var x_=M(),{prefixTrackProp:ow,prefixTrackValue:k_,autoplaceGridItems:S_,getGridGap:C_,inheritGridGap:A_}=mt(),__=el(),Bl=class extends x_{prefixed(e,t){return t===\"-ms-\"?ow({prop:e,prefix:t}):super.prefixed(e,t)}normalize(e){return e.replace(/^grid-(rows|columns)/,\"grid-template-$1\")}insert(e,t,r,n){if(t!==\"-ms-\")return super.insert(e,t,r);let{parent:a,prop:s,value:o}=e,u=s.includes(\"rows\"),c=s.includes(\"columns\"),f=a.some(k=>k.prop===\"grid-template\"||k.prop===\"grid-template-areas\");if(f&&u)return!1;let d=new __({options:{}}),p=d.gridStatus(a,n),m=C_(e);m=A_(e,m)||m;let b=u?m.row:m.column;(p===\"no-autoplace\"||p===!0)&&!f&&(b=null);let x=k_({value:o,gap:b});e.cloneBefore({prop:ow({prop:s,prefix:t}),value:x});let y=a.nodes.find(k=>k.prop===\"grid-auto-flow\"),w=\"row\";if(y&&!d.disabled(y,n)&&(w=y.value.trim()),p===\"autoplace\"){let k=a.nodes.find(_=>_.prop===\"grid-template-rows\");if(!k&&f)return;if(!k&&!f){e.warn(n,\"Autoplacement does not work without grid-template-rows property\");return}!a.nodes.find(_=>_.prop===\"grid-template-columns\")&&!f&&e.warn(n,\"Autoplacement does not work without grid-template-columns property\"),c&&!f&&S_(e,n,m,w)}}};Bl.names=[\"grid-template-rows\",\"grid-template-columns\",\"grid-rows\",\"grid-columns\"];lw.exports=Bl});var cw=v((mI,fw)=>{l();var O_=M(),Fl=class extends O_{check(e){return!e.value.includes(\"flex-\")&&e.value!==\"baseline\"}prefixed(e,t){return t+\"grid-column-align\"}normalize(){return\"justify-self\"}};Fl.names=[\"grid-column-align\"];fw.exports=Fl});var dw=v((gI,pw)=>{l();var E_=M(),Nl=class extends E_{prefixed(e,t){return t+\"scroll-chaining\"}normalize(){return\"overscroll-behavior\"}set(e,t){return e.value===\"auto\"?e.value=\"chained\":(e.value===\"none\"||e.value===\"contain\")&&(e.value=\"none\"),super.set(e,t)}};Nl.names=[\"overscroll-behavior\",\"scroll-chaining\"];pw.exports=Nl});var gw=v((yI,mw)=>{l();var T_=M(),{parseGridAreas:P_,warnMissedAreas:D_,prefixTrackProp:I_,prefixTrackValue:hw,getGridGap:q_,warnGridGap:R_,inheritGridGap:M_}=mt();function B_(i){return i.trim().slice(1,-1).split(/[\"']\\s*[\"']?/g)}var Ll=class extends T_{insert(e,t,r,n){if(t!==\"-ms-\")return super.insert(e,t,r);let a=!1,s=!1,o=e.parent,u=q_(e);u=M_(e,u)||u,o.walkDecls(/-ms-grid-rows/,d=>d.remove()),o.walkDecls(/grid-template-(rows|columns)/,d=>{if(d.prop===\"grid-template-rows\"){s=!0;let{prop:p,value:m}=d;d.cloneBefore({prop:I_({prop:p,prefix:t}),value:hw({value:m,gap:u.row})})}else a=!0});let c=B_(e.value);a&&!s&&u.row&&c.length>1&&e.cloneBefore({prop:\"-ms-grid-rows\",value:hw({value:`repeat(${c.length}, auto)`,gap:u.row}),raws:{}}),R_({gap:u,hasColumns:a,decl:e,result:n});let f=P_({rows:c,gap:u});return D_(f,e,n),e}};Ll.names=[\"grid-template-areas\"];mw.exports=Ll});var ww=v((wI,yw)=>{l();var F_=M(),$l=class extends F_{set(e,t){return t===\"-webkit-\"&&(e.value=e.value.replace(/\\s*(right|left)\\s*/i,\"\")),super.set(e,t)}};$l.names=[\"text-emphasis-position\"];yw.exports=$l});var vw=v((bI,bw)=>{l();var N_=M(),jl=class extends N_{set(e,t){return e.prop===\"text-decoration-skip-ink\"&&e.value===\"auto\"?(e.prop=t+\"text-decoration-skip\",e.value=\"ink\",e):super.set(e,t)}};jl.names=[\"text-decoration-skip-ink\",\"text-decoration-skip\"];bw.exports=jl});var _w=v((vI,Aw)=>{l();\"use strict\";Aw.exports={wrap:xw,limit:kw,validate:Sw,test:zl,curry:L_,name:Cw};function xw(i,e,t){var r=e-i;return((t-i)%r+r)%r+i}function kw(i,e,t){return Math.max(i,Math.min(e,t))}function Sw(i,e,t,r,n){if(!zl(i,e,t,r,n))throw new Error(t+\" is outside of range [\"+i+\",\"+e+\")\");return t}function zl(i,e,t,r,n){return!(t<i||t>e||n&&t===e||r&&t===i)}function Cw(i,e,t,r){return(t?\"(\":\"[\")+i+\",\"+e+(r?\")\":\"]\")}function L_(i,e,t,r){var n=Cw.bind(null,i,e,t,r);return{wrap:xw.bind(null,i,e),limit:kw.bind(null,i,e),validate:function(a){return Sw(i,e,a,t,r)},test:function(a){return zl(i,e,a,t,r)},toString:n,name:n}}});var Tw=v((xI,Ew)=>{l();var Vl=Gn(),$_=_w(),j_=Ht(),z_=Se(),V_=ue(),Ow=/top|left|right|bottom/gi,Qe=class extends z_{replace(e,t){let r=Vl(e);for(let n of r.nodes)if(n.type===\"function\"&&n.value===this.name)if(n.nodes=this.newDirection(n.nodes),n.nodes=this.normalize(n.nodes),t===\"-webkit- old\"){if(!this.oldWebkit(n))return!1}else n.nodes=this.convertDirection(n.nodes),n.value=t+n.value;return r.toString()}replaceFirst(e,...t){return t.map(n=>n===\" \"?{type:\"space\",value:n}:{type:\"word\",value:n}).concat(e.slice(1))}normalizeUnit(e,t){return`${parseFloat(e)/t*360}deg`}normalize(e){if(!e[0])return e;if(/-?\\d+(.\\d+)?grad/.test(e[0].value))e[0].value=this.normalizeUnit(e[0].value,400);else if(/-?\\d+(.\\d+)?rad/.test(e[0].value))e[0].value=this.normalizeUnit(e[0].value,2*Math.PI);else if(/-?\\d+(.\\d+)?turn/.test(e[0].value))e[0].value=this.normalizeUnit(e[0].value,1);else if(e[0].value.includes(\"deg\")){let t=parseFloat(e[0].value);t=$_.wrap(0,360,t),e[0].value=`${t}deg`}return e[0].value===\"0deg\"?e=this.replaceFirst(e,\"to\",\" \",\"top\"):e[0].value===\"90deg\"?e=this.replaceFirst(e,\"to\",\" \",\"right\"):e[0].value===\"180deg\"?e=this.replaceFirst(e,\"to\",\" \",\"bottom\"):e[0].value===\"270deg\"&&(e=this.replaceFirst(e,\"to\",\" \",\"left\")),e}newDirection(e){if(e[0].value===\"to\"||(Ow.lastIndex=0,!Ow.test(e[0].value)))return e;e.unshift({type:\"word\",value:\"to\"},{type:\"space\",value:\" \"});for(let t=2;t<e.length&&e[t].type!==\"div\";t++)e[t].type===\"word\"&&(e[t].value=this.revertDirection(e[t].value));return e}isRadial(e){let t=\"before\";for(let r of e)if(t===\"before\"&&r.type===\"space\")t=\"at\";else if(t===\"at\"&&r.value===\"at\")t=\"after\";else{if(t===\"after\"&&r.type===\"space\")return!0;if(r.type===\"div\")break;t=\"before\"}return!1}convertDirection(e){return e.length>0&&(e[0].value===\"to\"?this.fixDirection(e):e[0].value.includes(\"deg\")?this.fixAngle(e):this.isRadial(e)&&this.fixRadial(e)),e}fixDirection(e){e.splice(0,2);for(let t of e){if(t.type===\"div\")break;t.type===\"word\"&&(t.value=this.revertDirection(t.value))}}fixAngle(e){let t=e[0].value;t=parseFloat(t),t=Math.abs(450-t)%360,t=this.roundFloat(t,3),e[0].value=`${t}deg`}fixRadial(e){let t=[],r=[],n,a,s,o,u;for(o=0;o<e.length-2;o++)if(n=e[o],a=e[o+1],s=e[o+2],n.type===\"space\"&&a.value===\"at\"&&s.type===\"space\"){u=o+3;break}else t.push(n);let c;for(o=u;o<e.length;o++)if(e[o].type===\"div\"){c=e[o];break}else r.push(e[o]);e.splice(0,o,...r,c,...t)}revertDirection(e){return Qe.directions[e.toLowerCase()]||e}roundFloat(e,t){return parseFloat(e.toFixed(t))}oldWebkit(e){let{nodes:t}=e,r=Vl.stringify(e.nodes);if(this.name!==\"linear-gradient\"||t[0]&&t[0].value.includes(\"deg\")||r.includes(\"px\")||r.includes(\"-corner\")||r.includes(\"-side\"))return!1;let n=[[]];for(let a of t)n[n.length-1].push(a),a.type===\"div\"&&a.value===\",\"&&n.push([]);this.oldDirection(n),this.colorStops(n),e.nodes=[];for(let a of n)e.nodes=e.nodes.concat(a);return e.nodes.unshift({type:\"word\",value:\"linear\"},this.cloneDiv(e.nodes)),e.value=\"-webkit-gradient\",!0}oldDirection(e){let t=this.cloneDiv(e[0]);if(e[0][0].value!==\"to\")return e.unshift([{type:\"word\",value:Qe.oldDirections.bottom},t]);{let r=[];for(let a of e[0].slice(2))a.type===\"word\"&&r.push(a.value.toLowerCase());r=r.join(\" \");let n=Qe.oldDirections[r]||r;return e[0]=[{type:\"word\",value:n},t],e[0]}}cloneDiv(e){for(let t of e)if(t.type===\"div\"&&t.value===\",\")return t;return{type:\"div\",value:\",\",after:\" \"}}colorStops(e){let t=[];for(let r=0;r<e.length;r++){let n,a=e[r],s;if(r===0)continue;let o=Vl.stringify(a[0]);a[1]&&a[1].type===\"word\"?n=a[1].value:a[2]&&a[2].type===\"word\"&&(n=a[2].value);let u;r===1&&(!n||n===\"0%\")?u=`from(${o})`:r===e.length-1&&(!n||n===\"100%\")?u=`to(${o})`:n?u=`color-stop(${n}, ${o})`:u=`color-stop(${o})`;let c=a[a.length-1];e[r]=[{type:\"word\",value:u}],c.type===\"div\"&&c.value===\",\"&&(s=e[r].push(c)),t.push(s)}return t}old(e){if(e===\"-webkit-\"){let t=this.name===\"linear-gradient\"?\"linear\":\"radial\",r=\"-gradient\",n=V_.regexp(`-webkit-(${t}-gradient|gradient\\\\(\\\\s*${t})`,!1);return new j_(this.name,e+this.name,r,n)}else return super.old(e)}add(e,t){let r=e.prop;if(r.includes(\"mask\")){if(t===\"-webkit-\"||t===\"-webkit- old\")return super.add(e,t)}else if(r===\"list-style\"||r===\"list-style-image\"||r===\"content\"){if(t===\"-webkit-\"||t===\"-webkit- old\")return super.add(e,t)}else return super.add(e,t)}};Qe.names=[\"linear-gradient\",\"repeating-linear-gradient\",\"radial-gradient\",\"repeating-radial-gradient\"];Qe.directions={top:\"bottom\",left:\"right\",bottom:\"top\",right:\"left\"};Qe.oldDirections={top:\"left bottom, left top\",left:\"right top, left top\",bottom:\"left top, left bottom\",right:\"left top, right top\",\"top right\":\"left bottom, right top\",\"top left\":\"right bottom, left top\",\"right top\":\"left bottom, right top\",\"right bottom\":\"left top, right bottom\",\"bottom right\":\"left top, right bottom\",\"bottom left\":\"right top, left bottom\",\"left top\":\"right bottom, left top\",\"left bottom\":\"right top, left bottom\"};Ew.exports=Qe});var Iw=v((kI,Dw)=>{l();var U_=Ht(),W_=Se();function Pw(i){return new RegExp(`(^|[\\\\s,(])(${i}($|[\\\\s),]))`,\"gi\")}var Ul=class extends W_{regexp(){return this.regexpCache||(this.regexpCache=Pw(this.name)),this.regexpCache}isStretch(){return this.name===\"stretch\"||this.name===\"fill\"||this.name===\"fill-available\"}replace(e,t){return t===\"-moz-\"&&this.isStretch()?e.replace(this.regexp(),\"$1-moz-available$3\"):t===\"-webkit-\"&&this.isStretch()?e.replace(this.regexp(),\"$1-webkit-fill-available$3\"):super.replace(e,t)}old(e){let t=e+this.name;return this.isStretch()&&(e===\"-moz-\"?t=\"-moz-available\":e===\"-webkit-\"&&(t=\"-webkit-fill-available\")),new U_(this.name,t,t,Pw(t))}add(e,t){if(!(e.prop.includes(\"grid\")&&t!==\"-webkit-\"))return super.add(e,t)}};Ul.names=[\"max-content\",\"min-content\",\"fit-content\",\"fill\",\"fill-available\",\"stretch\"];Dw.exports=Ul});var Mw=v((SI,Rw)=>{l();var qw=Ht(),G_=Se(),Wl=class extends G_{replace(e,t){return t===\"-webkit-\"?e.replace(this.regexp(),\"$1-webkit-optimize-contrast\"):t===\"-moz-\"?e.replace(this.regexp(),\"$1-moz-crisp-edges\"):super.replace(e,t)}old(e){return e===\"-webkit-\"?new qw(this.name,\"-webkit-optimize-contrast\"):e===\"-moz-\"?new qw(this.name,\"-moz-crisp-edges\"):super.old(e)}};Wl.names=[\"pixelated\"];Rw.exports=Wl});var Fw=v((CI,Bw)=>{l();var H_=Se(),Gl=class extends H_{replace(e,t){let r=super.replace(e,t);return t===\"-webkit-\"&&(r=r.replace(/(\"[^\"]+\"|'[^']+')(\\s+\\d+\\w)/gi,\"url($1)$2\")),r}};Gl.names=[\"image-set\"];Bw.exports=Gl});var Lw=v((AI,Nw)=>{l();var Y_=ye().list,Q_=Se(),Hl=class extends Q_{replace(e,t){return Y_.space(e).map(r=>{if(r.slice(0,+this.name.length+1)!==this.name+\"(\")return r;let n=r.lastIndexOf(\")\"),a=r.slice(n+1),s=r.slice(this.name.length+1,n);if(t===\"-webkit-\"){let o=s.match(/\\d*.?\\d+%?/);o?(s=s.slice(o[0].length).trim(),s+=`, ${o[0]}`):s+=\", 0.5\"}return t+this.name+\"(\"+s+\")\"+a}).join(\" \")}};Hl.names=[\"cross-fade\"];Nw.exports=Hl});var jw=v((_I,$w)=>{l();var J_=de(),X_=Ht(),K_=Se(),Yl=class extends K_{constructor(e,t){super(e,t);e===\"display-flex\"&&(this.name=\"flex\")}check(e){return e.prop===\"display\"&&e.value===this.name}prefixed(e){let t,r;return[t,e]=J_(e),t===2009?this.name===\"flex\"?r=\"box\":r=\"inline-box\":t===2012?this.name===\"flex\"?r=\"flexbox\":r=\"inline-flexbox\":t===\"final\"&&(r=this.name),e+r}replace(e,t){return this.prefixed(t)}old(e){let t=this.prefixed(e);if(!!t)return new X_(this.name,t)}};Yl.names=[\"display-flex\",\"inline-flex\"];$w.exports=Yl});var Vw=v((OI,zw)=>{l();var Z_=Se(),Ql=class extends Z_{constructor(e,t){super(e,t);e===\"display-grid\"&&(this.name=\"grid\")}check(e){return e.prop===\"display\"&&e.value===this.name}};Ql.names=[\"display-grid\",\"inline-grid\"];zw.exports=Ql});var Ww=v((EI,Uw)=>{l();var e5=Se(),Jl=class extends e5{constructor(e,t){super(e,t);e===\"filter-function\"&&(this.name=\"filter\")}};Jl.names=[\"filter\",\"filter-function\"];Uw.exports=Jl});var Qw=v((TI,Yw)=>{l();var Gw=ii(),B=M(),Hw=Em(),t5=Gm(),r5=el(),i5=cg(),Xl=dt(),ir=Yt(),n5=bg(),$e=Se(),nr=ue(),s5=xg(),a5=Sg(),o5=Ag(),l5=Og(),u5=Ig(),f5=Mg(),c5=Fg(),p5=Lg(),d5=jg(),h5=Vg(),m5=Wg(),g5=Hg(),y5=Qg(),w5=Xg(),b5=Zg(),v5=ry(),x5=ny(),k5=oy(),S5=uy(),C5=cy(),A5=hy(),_5=gy(),O5=by(),E5=xy(),T5=Sy(),P5=Ay(),D5=Oy(),I5=Py(),q5=Iy(),R5=Ry(),M5=By(),B5=Ny(),F5=$y(),N5=zy(),L5=Wy(),$5=Hy(),j5=Qy(),z5=Xy(),V5=Zy(),U5=rw(),W5=nw(),G5=aw(),H5=uw(),Y5=cw(),Q5=dw(),J5=gw(),X5=ww(),K5=vw(),Z5=Tw(),eO=Iw(),tO=Mw(),rO=Fw(),iO=Lw(),nO=jw(),sO=Vw(),aO=Ww();ir.hack(s5);ir.hack(a5);ir.hack(o5);ir.hack(l5);B.hack(u5);B.hack(f5);B.hack(c5);B.hack(p5);B.hack(d5);B.hack(h5);B.hack(m5);B.hack(g5);B.hack(y5);B.hack(w5);B.hack(b5);B.hack(v5);B.hack(x5);B.hack(k5);B.hack(S5);B.hack(C5);B.hack(A5);B.hack(_5);B.hack(O5);B.hack(E5);B.hack(T5);B.hack(P5);B.hack(D5);B.hack(I5);B.hack(q5);B.hack(R5);B.hack(M5);B.hack(B5);B.hack(F5);B.hack(N5);B.hack(L5);B.hack($5);B.hack(j5);B.hack(z5);B.hack(V5);B.hack(U5);B.hack(W5);B.hack(G5);B.hack(H5);B.hack(Y5);B.hack(Q5);B.hack(J5);B.hack(X5);B.hack(K5);$e.hack(Z5);$e.hack(eO);$e.hack(tO);$e.hack(rO);$e.hack(iO);$e.hack(nO);$e.hack(sO);$e.hack(aO);var Kl=new Map,si=class{constructor(e,t,r={}){this.data=e,this.browsers=t,this.options=r,[this.add,this.remove]=this.preprocess(this.select(this.data)),this.transition=new t5(this),this.processor=new r5(this)}cleaner(){if(this.cleanerCache)return this.cleanerCache;if(this.browsers.selected.length){let e=new Xl(this.browsers.data,[]);this.cleanerCache=new si(this.data,e,this.options)}else return this;return this.cleanerCache}select(e){let t={add:{},remove:{}};for(let r in e){let n=e[r],a=n.browsers.map(u=>{let c=u.split(\" \");return{browser:`${c[0]} ${c[1]}`,note:c[2]}}),s=a.filter(u=>u.note).map(u=>`${this.browsers.prefix(u.browser)} ${u.note}`);s=nr.uniq(s),a=a.filter(u=>this.browsers.isSelected(u.browser)).map(u=>{let c=this.browsers.prefix(u.browser);return u.note?`${c} ${u.note}`:c}),a=this.sort(nr.uniq(a)),this.options.flexbox===\"no-2009\"&&(a=a.filter(u=>!u.includes(\"2009\")));let o=n.browsers.map(u=>this.browsers.prefix(u));n.mistakes&&(o=o.concat(n.mistakes)),o=o.concat(s),o=nr.uniq(o),a.length?(t.add[r]=a,a.length<o.length&&(t.remove[r]=o.filter(u=>!a.includes(u)))):t.remove[r]=o}return t}sort(e){return e.sort((t,r)=>{let n=nr.removeNote(t).length,a=nr.removeNote(r).length;return n===a?r.length-t.length:a-n})}preprocess(e){let t={selectors:[],\"@supports\":new i5(si,this)};for(let n in e.add){let a=e.add[n];if(n===\"@keyframes\"||n===\"@viewport\")t[n]=new n5(n,a,this);else if(n===\"@resolution\")t[n]=new Hw(n,a,this);else if(this.data[n].selector)t.selectors.push(ir.load(n,a,this));else{let s=this.data[n].props;if(s){let o=$e.load(n,a,this);for(let u of s)t[u]||(t[u]={values:[]}),t[u].values.push(o)}else{let o=t[n]&&t[n].values||[];t[n]=B.load(n,a,this),t[n].values=o}}}let r={selectors:[]};for(let n in e.remove){let a=e.remove[n];if(this.data[n].selector){let s=ir.load(n,a);for(let o of a)r.selectors.push(s.old(o))}else if(n===\"@keyframes\"||n===\"@viewport\")for(let s of a){let o=`@${s}${n.slice(1)}`;r[o]={remove:!0}}else if(n===\"@resolution\")r[n]=new Hw(n,a,this);else{let s=this.data[n].props;if(s){let o=$e.load(n,[],this);for(let u of a){let c=o.old(u);if(c)for(let f of s)r[f]||(r[f]={}),r[f].values||(r[f].values=[]),r[f].values.push(c)}}else for(let o of a){let u=this.decl(n).old(n,o);if(n===\"align-self\"){let c=t[n]&&t[n].prefixes;if(c){if(o===\"-webkit- 2009\"&&c.includes(\"-webkit-\"))continue;if(o===\"-webkit-\"&&c.includes(\"-webkit- 2009\"))continue}}for(let c of u)r[c]||(r[c]={}),r[c].remove=!0}}}return[t,r]}decl(e){return Kl.has(e)||Kl.set(e,B.load(e)),Kl.get(e)}unprefixed(e){let t=this.normalize(Gw.unprefixed(e));return t===\"flex-direction\"&&(t=\"flex-flow\"),t}normalize(e){return this.decl(e).normalize(e)}prefixed(e,t){return e=Gw.unprefixed(e),this.decl(e).prefixed(e,t)}values(e,t){let r=this[e],n=r[\"*\"]&&r[\"*\"].values,a=r[t]&&r[t].values;return n&&a?nr.uniq(n.concat(a)):n||a||[]}group(e){let t=e.parent,r=t.index(e),{length:n}=t.nodes,a=this.unprefixed(e.prop),s=(o,u)=>{for(r+=o;r>=0&&r<n;){let c=t.nodes[r];if(c.type===\"decl\"){if(o===-1&&c.prop===a&&!Xl.withPrefix(c.value)||this.unprefixed(c.prop)!==a)break;if(u(c)===!0)return!0;if(o===1&&c.prop===a&&!Xl.withPrefix(c.value))break}r+=o}return!1};return{up(o){return s(-1,o)},down(o){return s(1,o)}}}};Yw.exports=si});var Xw=v((PI,Jw)=>{l();Jw.exports={\"backdrop-filter\":{feature:\"css-backdrop-filter\",browsers:[\"ios_saf 16.1\",\"ios_saf 16.3\",\"ios_saf 16.4\",\"ios_saf 16.5\",\"safari 16.5\"]},element:{props:[\"background\",\"background-image\",\"border-image\",\"mask\",\"list-style\",\"list-style-image\",\"content\",\"mask-image\"],feature:\"css-element-function\",browsers:[\"firefox 114\"]},\"user-select\":{mistakes:[\"-khtml-\"],feature:\"user-select-none\",browsers:[\"ios_saf 16.1\",\"ios_saf 16.3\",\"ios_saf 16.4\",\"ios_saf 16.5\",\"safari 16.5\"]},\"background-clip\":{feature:\"background-clip-text\",browsers:[\"and_chr 114\",\"and_uc 15.5\",\"chrome 109\",\"chrome 113\",\"chrome 114\",\"edge 114\",\"opera 99\",\"samsung 21\"]},hyphens:{feature:\"css-hyphens\",browsers:[\"ios_saf 16.1\",\"ios_saf 16.3\",\"ios_saf 16.4\",\"ios_saf 16.5\",\"safari 16.5\"]},fill:{props:[\"width\",\"min-width\",\"max-width\",\"height\",\"min-height\",\"max-height\",\"inline-size\",\"min-inline-size\",\"max-inline-size\",\"block-size\",\"min-block-size\",\"max-block-size\",\"grid\",\"grid-template\",\"grid-template-rows\",\"grid-template-columns\",\"grid-auto-columns\",\"grid-auto-rows\"],feature:\"intrinsic-width\",browsers:[\"and_chr 114\",\"and_uc 15.5\",\"chrome 109\",\"chrome 113\",\"chrome 114\",\"edge 114\",\"opera 99\",\"samsung 21\"]},\"fill-available\":{props:[\"width\",\"min-width\",\"max-width\",\"height\",\"min-height\",\"max-height\",\"inline-size\",\"min-inline-size\",\"max-inline-size\",\"block-size\",\"min-block-size\",\"max-block-size\",\"grid\",\"grid-template\",\"grid-template-rows\",\"grid-template-columns\",\"grid-auto-columns\",\"grid-auto-rows\"],feature:\"intrinsic-width\",browsers:[\"and_chr 114\",\"and_uc 15.5\",\"chrome 109\",\"chrome 113\",\"chrome 114\",\"edge 114\",\"opera 99\",\"samsung 21\"]},stretch:{props:[\"width\",\"min-width\",\"max-width\",\"height\",\"min-height\",\"max-height\",\"inline-size\",\"min-inline-size\",\"max-inline-size\",\"block-size\",\"min-block-size\",\"max-block-size\",\"grid\",\"grid-template\",\"grid-template-rows\",\"grid-template-columns\",\"grid-auto-columns\",\"grid-auto-rows\"],feature:\"intrinsic-width\",browsers:[\"firefox 114\"]},\"fit-content\":{props:[\"width\",\"min-width\",\"max-width\",\"height\",\"min-height\",\"max-height\",\"inline-size\",\"min-inline-size\",\"max-inline-size\",\"block-size\",\"min-block-size\",\"max-block-size\",\"grid\",\"grid-template\",\"grid-template-rows\",\"grid-template-columns\",\"grid-auto-columns\",\"grid-auto-rows\"],feature:\"intrinsic-width\",browsers:[\"firefox 114\"]},\"text-decoration-style\":{feature:\"text-decoration\",browsers:[\"ios_saf 16.1\",\"ios_saf 16.3\",\"ios_saf 16.4\",\"ios_saf 16.5\"]},\"text-decoration-color\":{feature:\"text-decoration\",browsers:[\"ios_saf 16.1\",\"ios_saf 16.3\",\"ios_saf 16.4\",\"ios_saf 16.5\"]},\"text-decoration-line\":{feature:\"text-decoration\",browsers:[\"ios_saf 16.1\",\"ios_saf 16.3\",\"ios_saf 16.4\",\"ios_saf 16.5\"]},\"text-decoration\":{feature:\"text-decoration\",browsers:[\"ios_saf 16.1\",\"ios_saf 16.3\",\"ios_saf 16.4\",\"ios_saf 16.5\"]},\"text-decoration-skip\":{feature:\"text-decoration\",browsers:[\"ios_saf 16.1\",\"ios_saf 16.3\",\"ios_saf 16.4\",\"ios_saf 16.5\"]},\"text-decoration-skip-ink\":{feature:\"text-decoration\",browsers:[\"ios_saf 16.1\",\"ios_saf 16.3\",\"ios_saf 16.4\",\"ios_saf 16.5\"]},\"text-size-adjust\":{feature:\"text-size-adjust\",browsers:[\"ios_saf 16.1\",\"ios_saf 16.3\",\"ios_saf 16.4\",\"ios_saf 16.5\"]},\"mask-clip\":{feature:\"css-masks\",browsers:[\"and_chr 114\",\"and_uc 15.5\",\"chrome 109\",\"chrome 113\",\"chrome 114\",\"edge 114\",\"opera 99\",\"samsung 21\"]},\"mask-composite\":{feature:\"css-masks\",browsers:[\"and_chr 114\",\"and_uc 15.5\",\"chrome 109\",\"chrome 113\",\"chrome 114\",\"edge 114\",\"opera 99\",\"samsung 21\"]},\"mask-image\":{feature:\"css-masks\",browsers:[\"and_chr 114\",\"and_uc 15.5\",\"chrome 109\",\"chrome 113\",\"chrome 114\",\"edge 114\",\"opera 99\",\"samsung 21\"]},\"mask-origin\":{feature:\"css-masks\",browsers:[\"and_chr 114\",\"and_uc 15.5\",\"chrome 109\",\"chrome 113\",\"chrome 114\",\"edge 114\",\"opera 99\",\"samsung 21\"]},\"mask-repeat\":{feature:\"css-masks\",browsers:[\"and_chr 114\",\"and_uc 15.5\",\"chrome 109\",\"chrome 113\",\"chrome 114\",\"edge 114\",\"opera 99\",\"samsung 21\"]},\"mask-border-repeat\":{feature:\"css-masks\",browsers:[\"and_chr 114\",\"and_uc 15.5\",\"chrome 109\",\"chrome 113\",\"chrome 114\",\"edge 114\",\"opera 99\",\"samsung 21\"]},\"mask-border-source\":{feature:\"css-masks\",browsers:[\"and_chr 114\",\"and_uc 15.5\",\"chrome 109\",\"chrome 113\",\"chrome 114\",\"edge 114\",\"opera 99\",\"samsung 21\"]},mask:{feature:\"css-masks\",browsers:[\"and_chr 114\",\"and_uc 15.5\",\"chrome 109\",\"chrome 113\",\"chrome 114\",\"edge 114\",\"opera 99\",\"samsung 21\"]},\"mask-position\":{feature:\"css-masks\",browsers:[\"and_chr 114\",\"and_uc 15.5\",\"chrome 109\",\"chrome 113\",\"chrome 114\",\"edge 114\",\"opera 99\",\"samsung 21\"]},\"mask-size\":{feature:\"css-masks\",browsers:[\"and_chr 114\",\"and_uc 15.5\",\"chrome 109\",\"chrome 113\",\"chrome 114\",\"edge 114\",\"opera 99\",\"samsung 21\"]},\"mask-border\":{feature:\"css-masks\",browsers:[\"and_chr 114\",\"and_uc 15.5\",\"chrome 109\",\"chrome 113\",\"chrome 114\",\"edge 114\",\"opera 99\",\"samsung 21\"]},\"mask-border-outset\":{feature:\"css-masks\",browsers:[\"and_chr 114\",\"and_uc 15.5\",\"chrome 109\",\"chrome 113\",\"chrome 114\",\"edge 114\",\"opera 99\",\"samsung 21\"]},\"mask-border-width\":{feature:\"css-masks\",browsers:[\"and_chr 114\",\"and_uc 15.5\",\"chrome 109\",\"chrome 113\",\"chrome 114\",\"edge 114\",\"opera 99\",\"samsung 21\"]},\"mask-border-slice\":{feature:\"css-masks\",browsers:[\"and_chr 114\",\"and_uc 15.5\",\"chrome 109\",\"chrome 113\",\"chrome 114\",\"edge 114\",\"opera 99\",\"samsung 21\"]},\"clip-path\":{feature:\"css-clip-path\",browsers:[\"samsung 21\"]},\"box-decoration-break\":{feature:\"css-boxdecorationbreak\",browsers:[\"and_chr 114\",\"and_uc 15.5\",\"chrome 109\",\"chrome 113\",\"chrome 114\",\"edge 114\",\"ios_saf 16.1\",\"ios_saf 16.3\",\"ios_saf 16.4\",\"ios_saf 16.5\",\"opera 99\",\"safari 16.5\",\"samsung 21\"]},appearance:{feature:\"css-appearance\",browsers:[\"samsung 21\"]},\"image-set\":{props:[\"background\",\"background-image\",\"border-image\",\"cursor\",\"mask\",\"mask-image\",\"list-style\",\"list-style-image\",\"content\"],feature:\"css-image-set\",browsers:[\"and_uc 15.5\",\"chrome 109\",\"samsung 21\"]},\"cross-fade\":{props:[\"background\",\"background-image\",\"border-image\",\"mask\",\"list-style\",\"list-style-image\",\"content\",\"mask-image\"],feature:\"css-cross-fade\",browsers:[\"and_chr 114\",\"and_uc 15.5\",\"chrome 109\",\"chrome 113\",\"chrome 114\",\"edge 114\",\"opera 99\",\"samsung 21\"]},isolate:{props:[\"unicode-bidi\"],feature:\"css-unicode-bidi\",browsers:[\"ios_saf 16.1\",\"ios_saf 16.3\",\"ios_saf 16.4\",\"ios_saf 16.5\",\"safari 16.5\"]},\"color-adjust\":{feature:\"css-color-adjust\",browsers:[\"chrome 109\",\"chrome 113\",\"chrome 114\",\"edge 114\",\"opera 99\"]}}});var Zw=v((DI,Kw)=>{l();Kw.exports={}});var ib=v((II,rb)=>{l();var oO=zo(),{agents:lO}=($n(),Ln),Zl=hm(),uO=dt(),fO=Qw(),cO=Xw(),pO=Zw(),eb={browsers:lO,prefixes:cO},tb=`\n  Replace Autoprefixer \\`browsers\\` option to Browserslist config.\n  Use \\`browserslist\\` key in \\`package.json\\` or \\`.browserslistrc\\` file.\n\n  Using \\`browsers\\` option can cause errors. Browserslist config can\n  be used for Babel, Autoprefixer, postcss-normalize and other tools.\n\n  If you really need to use option, rename it to \\`overrideBrowserslist\\`.\n\n  Learn more at:\n  https://github.com/browserslist/browserslist#readme\n  https://twitter.com/browserslist\n\n`;function dO(i){return Object.prototype.toString.apply(i)===\"[object Object]\"}var eu=new Map;function hO(i,e){e.browsers.selected.length!==0&&(e.add.selectors.length>0||Object.keys(e.add).length>2||i.warn(`Autoprefixer target browsers do not need any prefixes.You do not need Autoprefixer anymore.\nCheck your Browserslist config to be sure that your targets are set up correctly.\n\n  Learn more at:\n  https://github.com/postcss/autoprefixer#readme\n  https://github.com/browserslist/browserslist#readme\n\n`))}rb.exports=sr;function sr(...i){let e;if(i.length===1&&dO(i[0])?(e=i[0],i=void 0):i.length===0||i.length===1&&!i[0]?i=void 0:i.length<=2&&(Array.isArray(i[0])||!i[0])?(e=i[1],i=i[0]):typeof i[i.length-1]==\"object\"&&(e=i.pop()),e||(e={}),e.browser)throw new Error(\"Change `browser` option to `overrideBrowserslist` in Autoprefixer\");if(e.browserslist)throw new Error(\"Change `browserslist` option to `overrideBrowserslist` in Autoprefixer\");e.overrideBrowserslist?i=e.overrideBrowserslist:e.browsers&&(typeof console!=\"undefined\"&&console.warn&&(Zl.red?console.warn(Zl.red(tb.replace(/`[^`]+`/g,n=>Zl.yellow(n.slice(1,-1))))):console.warn(tb)),i=e.browsers);let t={ignoreUnknownVersions:e.ignoreUnknownVersions,stats:e.stats,env:e.env};function r(n){let a=eb,s=new uO(a.browsers,i,n,t),o=s.selected.join(\", \")+JSON.stringify(e);return eu.has(o)||eu.set(o,new fO(a.prefixes,s,e)),eu.get(o)}return{postcssPlugin:\"autoprefixer\",prepare(n){let a=r({from:n.opts.from,env:e.env});return{OnceExit(s){hO(n,a),e.remove!==!1&&a.processor.remove(s,n),e.add!==!1&&a.processor.add(s,n)}}},info(n){return n=n||{},n.from=n.from||h.cwd(),pO(r(n))},options:e,browsers:i}}sr.postcss=!0;sr.data=eb;sr.defaults=oO.defaults;sr.info=()=>sr().info()});var nb={};_e(nb,{default:()=>mO});var mO,sb=C(()=>{l();mO=[]});var ob={};_e(ob,{default:()=>gO});var ab,gO,lb=C(()=>{l();hi();ab=X(bi()),gO=Ze(ab.default.theme)});var fb={};_e(fb,{default:()=>yO});var ub,yO,cb=C(()=>{l();hi();ub=X(bi()),yO=Ze(ub.default)});l();\"use strict\";var wO=Je(pm()),bO=Je(ye()),vO=Je(ib()),xO=Je((sb(),nb)),kO=Je((lb(),ob)),SO=Je((cb(),fb)),CO=Je((Zn(),bu)),AO=Je((mo(),ho)),_O=Je((hs(),Ku));function Je(i){return i&&i.__esModule?i:{default:i}}console.warn(\"cdn.tailwindcss.com should not be used in production. To use Tailwind CSS in production, install it as a PostCSS plugin or use the Tailwind CLI: https://tailwindcss.com/docs/installation\");var Hn=\"tailwind\",tu=\"text/tailwindcss\",pb=\"/template.html\",St,db=!0,hb=0,ru=new Set,iu,mb=\"\",gb=(i=!1)=>({get(e,t){return(!i||t===\"config\")&&typeof e[t]==\"object\"&&e[t]!==null?new Proxy(e[t],gb()):e[t]},set(e,t,r){return e[t]=r,(!i||t===\"config\")&&nu(!0),!0}});window[Hn]=new Proxy({config:{},defaultTheme:kO.default,defaultConfig:SO.default,colors:CO.default,plugin:AO.default,resolveConfig:_O.default},gb(!0));function yb(i){iu.observe(i,{attributes:!0,attributeFilter:[\"type\"],characterData:!0,subtree:!0,childList:!0})}new MutationObserver(async i=>{let e=!1;if(!iu){iu=new MutationObserver(async()=>await nu(!0));for(let t of document.querySelectorAll(`style[type=\"${tu}\"]`))yb(t)}for(let t of i)for(let r of t.addedNodes)r.nodeType===1&&r.tagName===\"STYLE\"&&r.getAttribute(\"type\")===tu&&(yb(r),e=!0);await nu(e)}).observe(document.documentElement,{attributes:!0,attributeFilter:[\"class\"],childList:!0,subtree:!0});async function nu(i=!1){i&&(hb++,ru.clear());let e=\"\";for(let r of document.querySelectorAll(`style[type=\"${tu}\"]`))e+=r.textContent;let t=new Set;for(let r of document.querySelectorAll(\"[class]\"))for(let n of r.classList)ru.has(n)||t.add(n);if(document.body&&(db||t.size>0||e!==mb||!St||!St.isConnected)){for(let n of t)ru.add(n);db=!1,mb=e,self[pb]=Array.from(t).join(\" \");let{css:r}=await(0,bO.default)([(0,wO.default)({...window[Hn].config,_hash:hb,content:{files:[pb],extract:{html:n=>n.split(\" \")}},plugins:[...xO.default,...Array.isArray(window[Hn].config.plugins)?window[Hn].config.plugins:[]]}),(0,vO.default)({remove:!1})]).process(`@tailwind base;@tailwind components;@tailwind utilities;${e}`);(!St||!St.isConnected)&&(St=document.createElement(\"style\"),document.head.append(St)),St.textContent=r}}})();\n/*! https://mths.be/cssesc v3.0.0 by @mathias */\n"
  },
  {
    "path": "GoEasyDesigner/frontend/public/font-awesome.css",
    "content": "/*!\n * Font Awesome Free 6.7.2 by @fontawesome - https://fontawesome.com\n * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)\n * Copyright 2024 Fonticons, Inc.\n */\n.fa{font-family:var(--fa-style-family,\"Font Awesome 6 Free\");font-weight:var(--fa-style,900)}.fa,.fa-brands,.fa-regular,.fa-solid,.fab,.far,.fas{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;display:var(--fa-display,inline-block);font-style:normal;font-variant:normal;line-height:1;text-rendering:auto}.fa-brands:before,.fa-regular:before,.fa-solid:before,.fa:before,.fab:before,.far:before,.fas:before{content:var(--fa)}.fa-classic,.fa-regular,.fa-solid,.far,.fas{font-family:\"Font Awesome 6 Free\"}.fa-brands,.fab{font-family:\"Font Awesome 6 Brands\"}.fa-1x{font-size:1em}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-6x{font-size:6em}.fa-7x{font-size:7em}.fa-8x{font-size:8em}.fa-9x{font-size:9em}.fa-10x{font-size:10em}.fa-2xs{font-size:.625em;line-height:.1em;vertical-align:.225em}.fa-xs{font-size:.75em;line-height:.08333em;vertical-align:.125em}.fa-sm{font-size:.875em;line-height:.07143em;vertical-align:.05357em}.fa-lg{font-size:1.25em;line-height:.05em;vertical-align:-.075em}.fa-xl{font-size:1.5em;line-height:.04167em;vertical-align:-.125em}.fa-2xl{font-size:2em;line-height:.03125em;vertical-align:-.1875em}.fa-fw{text-align:center;width:1.25em}.fa-ul{list-style-type:none;margin-left:var(--fa-li-margin,2.5em);padding-left:0}.fa-ul>li{position:relative}.fa-li{left:calc(var(--fa-li-width, 2em)*-1);position:absolute;text-align:center;width:var(--fa-li-width,2em);line-height:inherit}.fa-border{border-radius:var(--fa-border-radius,.1em);border:var(--fa-border-width,.08em) var(--fa-border-style,solid) var(--fa-border-color,#eee);padding:var(--fa-border-padding,.2em .25em .15em)}.fa-pull-left{float:left;margin-right:var(--fa-pull-margin,.3em)}.fa-pull-right{float:right;margin-left:var(--fa-pull-margin,.3em)}.fa-beat{animation-name:fa-beat;animation-delay:var(--fa-animation-delay,0s);animation-direction:var(--fa-animation-direction,normal);animation-duration:var(--fa-animation-duration,1s);animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-timing-function:var(--fa-animation-timing,ease-in-out)}.fa-bounce{animation-name:fa-bounce;animation-delay:var(--fa-animation-delay,0s);animation-direction:var(--fa-animation-direction,normal);animation-duration:var(--fa-animation-duration,1s);animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-timing-function:var(--fa-animation-timing,cubic-bezier(.28,.84,.42,1))}.fa-fade{animation-name:fa-fade;animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-timing-function:var(--fa-animation-timing,cubic-bezier(.4,0,.6,1))}.fa-beat-fade,.fa-fade{animation-delay:var(--fa-animation-delay,0s);animation-direction:var(--fa-animation-direction,normal);animation-duration:var(--fa-animation-duration,1s)}.fa-beat-fade{animation-name:fa-beat-fade;animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-timing-function:var(--fa-animation-timing,cubic-bezier(.4,0,.6,1))}.fa-flip{animation-name:fa-flip;animation-delay:var(--fa-animation-delay,0s);animation-direction:var(--fa-animation-direction,normal);animation-duration:var(--fa-animation-duration,1s);animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-timing-function:var(--fa-animation-timing,ease-in-out)}.fa-shake{animation-name:fa-shake;animation-duration:var(--fa-animation-duration,1s);animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-timing-function:var(--fa-animation-timing,linear)}.fa-shake,.fa-spin{animation-delay:var(--fa-animation-delay,0s);animation-direction:var(--fa-animation-direction,normal)}.fa-spin{animation-name:fa-spin;animation-duration:var(--fa-animation-duration,2s);animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-timing-function:var(--fa-animation-timing,linear)}.fa-spin-reverse{--fa-animation-direction:reverse}.fa-pulse,.fa-spin-pulse{animation-name:fa-spin;animation-direction:var(--fa-animation-direction,normal);animation-duration:var(--fa-animation-duration,1s);animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-timing-function:var(--fa-animation-timing,steps(8))}@media (prefers-reduced-motion:reduce){.fa-beat,.fa-beat-fade,.fa-bounce,.fa-fade,.fa-flip,.fa-pulse,.fa-shake,.fa-spin,.fa-spin-pulse{animation-delay:-1ms;animation-duration:1ms;animation-iteration-count:1;transition-delay:0s;transition-duration:0s}}@keyframes fa-beat{0%,90%{transform:scale(1)}45%{transform:scale(var(--fa-beat-scale,1.25))}}@keyframes fa-bounce{0%{transform:scale(1) translateY(0)}10%{transform:scale(var(--fa-bounce-start-scale-x,1.1),var(--fa-bounce-start-scale-y,.9)) translateY(0)}30%{transform:scale(var(--fa-bounce-jump-scale-x,.9),var(--fa-bounce-jump-scale-y,1.1)) translateY(var(--fa-bounce-height,-.5em))}50%{transform:scale(var(--fa-bounce-land-scale-x,1.05),var(--fa-bounce-land-scale-y,.95)) translateY(0)}57%{transform:scale(1) translateY(var(--fa-bounce-rebound,-.125em))}64%{transform:scale(1) translateY(0)}to{transform:scale(1) translateY(0)}}@keyframes fa-fade{50%{opacity:var(--fa-fade-opacity,.4)}}@keyframes fa-beat-fade{0%,to{opacity:var(--fa-beat-fade-opacity,.4);transform:scale(1)}50%{opacity:1;transform:scale(var(--fa-beat-fade-scale,1.125))}}@keyframes fa-flip{50%{transform:rotate3d(var(--fa-flip-x,0),var(--fa-flip-y,1),var(--fa-flip-z,0),var(--fa-flip-angle,-180deg))}}@keyframes fa-shake{0%{transform:rotate(-15deg)}4%{transform:rotate(15deg)}8%,24%{transform:rotate(-18deg)}12%,28%{transform:rotate(18deg)}16%{transform:rotate(-22deg)}20%{transform:rotate(22deg)}32%{transform:rotate(-12deg)}36%{transform:rotate(12deg)}40%,to{transform:rotate(0deg)}}@keyframes fa-spin{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}.fa-rotate-90{transform:rotate(90deg)}.fa-rotate-180{transform:rotate(180deg)}.fa-rotate-270{transform:rotate(270deg)}.fa-flip-horizontal{transform:scaleX(-1)}.fa-flip-vertical{transform:scaleY(-1)}.fa-flip-both,.fa-flip-horizontal.fa-flip-vertical{transform:scale(-1)}.fa-rotate-by{transform:rotate(var(--fa-rotate-angle,0))}.fa-stack{display:inline-block;height:2em;line-height:2em;position:relative;vertical-align:middle;width:2.5em}.fa-stack-1x,.fa-stack-2x{left:0;position:absolute;text-align:center;width:100%;z-index:var(--fa-stack-z-index,auto)}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:var(--fa-inverse,#fff)}\n\n.fa-0{--fa:\"\\30\"}.fa-1{--fa:\"\\31\"}.fa-2{--fa:\"\\32\"}.fa-3{--fa:\"\\33\"}.fa-4{--fa:\"\\34\"}.fa-5{--fa:\"\\35\"}.fa-6{--fa:\"\\36\"}.fa-7{--fa:\"\\37\"}.fa-8{--fa:\"\\38\"}.fa-9{--fa:\"\\39\"}.fa-fill-drip{--fa:\"\\f576\"}.fa-arrows-to-circle{--fa:\"\\e4bd\"}.fa-chevron-circle-right,.fa-circle-chevron-right{--fa:\"\\f138\"}.fa-at{--fa:\"\\40\"}.fa-trash-alt,.fa-trash-can{--fa:\"\\f2ed\"}.fa-text-height{--fa:\"\\f034\"}.fa-user-times,.fa-user-xmark{--fa:\"\\f235\"}.fa-stethoscope{--fa:\"\\f0f1\"}.fa-comment-alt,.fa-message{--fa:\"\\f27a\"}.fa-info{--fa:\"\\f129\"}.fa-compress-alt,.fa-down-left-and-up-right-to-center{--fa:\"\\f422\"}.fa-explosion{--fa:\"\\e4e9\"}.fa-file-alt,.fa-file-lines,.fa-file-text{--fa:\"\\f15c\"}.fa-wave-square{--fa:\"\\f83e\"}.fa-ring{--fa:\"\\f70b\"}.fa-building-un{--fa:\"\\e4d9\"}.fa-dice-three{--fa:\"\\f527\"}.fa-calendar-alt,.fa-calendar-days{--fa:\"\\f073\"}.fa-anchor-circle-check{--fa:\"\\e4aa\"}.fa-building-circle-arrow-right{--fa:\"\\e4d1\"}.fa-volleyball,.fa-volleyball-ball{--fa:\"\\f45f\"}.fa-arrows-up-to-line{--fa:\"\\e4c2\"}.fa-sort-desc,.fa-sort-down{--fa:\"\\f0dd\"}.fa-circle-minus,.fa-minus-circle{--fa:\"\\f056\"}.fa-door-open{--fa:\"\\f52b\"}.fa-right-from-bracket,.fa-sign-out-alt{--fa:\"\\f2f5\"}.fa-atom{--fa:\"\\f5d2\"}.fa-soap{--fa:\"\\e06e\"}.fa-heart-music-camera-bolt,.fa-icons{--fa:\"\\f86d\"}.fa-microphone-alt-slash,.fa-microphone-lines-slash{--fa:\"\\f539\"}.fa-bridge-circle-check{--fa:\"\\e4c9\"}.fa-pump-medical{--fa:\"\\e06a\"}.fa-fingerprint{--fa:\"\\f577\"}.fa-hand-point-right{--fa:\"\\f0a4\"}.fa-magnifying-glass-location,.fa-search-location{--fa:\"\\f689\"}.fa-forward-step,.fa-step-forward{--fa:\"\\f051\"}.fa-face-smile-beam,.fa-smile-beam{--fa:\"\\f5b8\"}.fa-flag-checkered{--fa:\"\\f11e\"}.fa-football,.fa-football-ball{--fa:\"\\f44e\"}.fa-school-circle-exclamation{--fa:\"\\e56c\"}.fa-crop{--fa:\"\\f125\"}.fa-angle-double-down,.fa-angles-down{--fa:\"\\f103\"}.fa-users-rectangle{--fa:\"\\e594\"}.fa-people-roof{--fa:\"\\e537\"}.fa-people-line{--fa:\"\\e534\"}.fa-beer,.fa-beer-mug-empty{--fa:\"\\f0fc\"}.fa-diagram-predecessor{--fa:\"\\e477\"}.fa-arrow-up-long,.fa-long-arrow-up{--fa:\"\\f176\"}.fa-burn,.fa-fire-flame-simple{--fa:\"\\f46a\"}.fa-male,.fa-person{--fa:\"\\f183\"}.fa-laptop{--fa:\"\\f109\"}.fa-file-csv{--fa:\"\\f6dd\"}.fa-menorah{--fa:\"\\f676\"}.fa-truck-plane{--fa:\"\\e58f\"}.fa-record-vinyl{--fa:\"\\f8d9\"}.fa-face-grin-stars,.fa-grin-stars{--fa:\"\\f587\"}.fa-bong{--fa:\"\\f55c\"}.fa-pastafarianism,.fa-spaghetti-monster-flying{--fa:\"\\f67b\"}.fa-arrow-down-up-across-line{--fa:\"\\e4af\"}.fa-spoon,.fa-utensil-spoon{--fa:\"\\f2e5\"}.fa-jar-wheat{--fa:\"\\e517\"}.fa-envelopes-bulk,.fa-mail-bulk{--fa:\"\\f674\"}.fa-file-circle-exclamation{--fa:\"\\e4eb\"}.fa-circle-h,.fa-hospital-symbol{--fa:\"\\f47e\"}.fa-pager{--fa:\"\\f815\"}.fa-address-book,.fa-contact-book{--fa:\"\\f2b9\"}.fa-strikethrough{--fa:\"\\f0cc\"}.fa-k{--fa:\"\\4b\"}.fa-landmark-flag{--fa:\"\\e51c\"}.fa-pencil,.fa-pencil-alt{--fa:\"\\f303\"}.fa-backward{--fa:\"\\f04a\"}.fa-caret-right{--fa:\"\\f0da\"}.fa-comments{--fa:\"\\f086\"}.fa-file-clipboard,.fa-paste{--fa:\"\\f0ea\"}.fa-code-pull-request{--fa:\"\\e13c\"}.fa-clipboard-list{--fa:\"\\f46d\"}.fa-truck-loading,.fa-truck-ramp-box{--fa:\"\\f4de\"}.fa-user-check{--fa:\"\\f4fc\"}.fa-vial-virus{--fa:\"\\e597\"}.fa-sheet-plastic{--fa:\"\\e571\"}.fa-blog{--fa:\"\\f781\"}.fa-user-ninja{--fa:\"\\f504\"}.fa-person-arrow-up-from-line{--fa:\"\\e539\"}.fa-scroll-torah,.fa-torah{--fa:\"\\f6a0\"}.fa-broom-ball,.fa-quidditch,.fa-quidditch-broom-ball{--fa:\"\\f458\"}.fa-toggle-off{--fa:\"\\f204\"}.fa-archive,.fa-box-archive{--fa:\"\\f187\"}.fa-person-drowning{--fa:\"\\e545\"}.fa-arrow-down-9-1,.fa-sort-numeric-desc,.fa-sort-numeric-down-alt{--fa:\"\\f886\"}.fa-face-grin-tongue-squint,.fa-grin-tongue-squint{--fa:\"\\f58a\"}.fa-spray-can{--fa:\"\\f5bd\"}.fa-truck-monster{--fa:\"\\f63b\"}.fa-w{--fa:\"\\57\"}.fa-earth-africa,.fa-globe-africa{--fa:\"\\f57c\"}.fa-rainbow{--fa:\"\\f75b\"}.fa-circle-notch{--fa:\"\\f1ce\"}.fa-tablet-alt,.fa-tablet-screen-button{--fa:\"\\f3fa\"}.fa-paw{--fa:\"\\f1b0\"}.fa-cloud{--fa:\"\\f0c2\"}.fa-trowel-bricks{--fa:\"\\e58a\"}.fa-face-flushed,.fa-flushed{--fa:\"\\f579\"}.fa-hospital-user{--fa:\"\\f80d\"}.fa-tent-arrow-left-right{--fa:\"\\e57f\"}.fa-gavel,.fa-legal{--fa:\"\\f0e3\"}.fa-binoculars{--fa:\"\\f1e5\"}.fa-microphone-slash{--fa:\"\\f131\"}.fa-box-tissue{--fa:\"\\e05b\"}.fa-motorcycle{--fa:\"\\f21c\"}.fa-bell-concierge,.fa-concierge-bell{--fa:\"\\f562\"}.fa-pen-ruler,.fa-pencil-ruler{--fa:\"\\f5ae\"}.fa-people-arrows,.fa-people-arrows-left-right{--fa:\"\\e068\"}.fa-mars-and-venus-burst{--fa:\"\\e523\"}.fa-caret-square-right,.fa-square-caret-right{--fa:\"\\f152\"}.fa-cut,.fa-scissors{--fa:\"\\f0c4\"}.fa-sun-plant-wilt{--fa:\"\\e57a\"}.fa-toilets-portable{--fa:\"\\e584\"}.fa-hockey-puck{--fa:\"\\f453\"}.fa-table{--fa:\"\\f0ce\"}.fa-magnifying-glass-arrow-right{--fa:\"\\e521\"}.fa-digital-tachograph,.fa-tachograph-digital{--fa:\"\\f566\"}.fa-users-slash{--fa:\"\\e073\"}.fa-clover{--fa:\"\\e139\"}.fa-mail-reply,.fa-reply{--fa:\"\\f3e5\"}.fa-star-and-crescent{--fa:\"\\f699\"}.fa-house-fire{--fa:\"\\e50c\"}.fa-minus-square,.fa-square-minus{--fa:\"\\f146\"}.fa-helicopter{--fa:\"\\f533\"}.fa-compass{--fa:\"\\f14e\"}.fa-caret-square-down,.fa-square-caret-down{--fa:\"\\f150\"}.fa-file-circle-question{--fa:\"\\e4ef\"}.fa-laptop-code{--fa:\"\\f5fc\"}.fa-swatchbook{--fa:\"\\f5c3\"}.fa-prescription-bottle{--fa:\"\\f485\"}.fa-bars,.fa-navicon{--fa:\"\\f0c9\"}.fa-people-group{--fa:\"\\e533\"}.fa-hourglass-3,.fa-hourglass-end{--fa:\"\\f253\"}.fa-heart-broken,.fa-heart-crack{--fa:\"\\f7a9\"}.fa-external-link-square-alt,.fa-square-up-right{--fa:\"\\f360\"}.fa-face-kiss-beam,.fa-kiss-beam{--fa:\"\\f597\"}.fa-film{--fa:\"\\f008\"}.fa-ruler-horizontal{--fa:\"\\f547\"}.fa-people-robbery{--fa:\"\\e536\"}.fa-lightbulb{--fa:\"\\f0eb\"}.fa-caret-left{--fa:\"\\f0d9\"}.fa-circle-exclamation,.fa-exclamation-circle{--fa:\"\\f06a\"}.fa-school-circle-xmark{--fa:\"\\e56d\"}.fa-arrow-right-from-bracket,.fa-sign-out{--fa:\"\\f08b\"}.fa-chevron-circle-down,.fa-circle-chevron-down{--fa:\"\\f13a\"}.fa-unlock-alt,.fa-unlock-keyhole{--fa:\"\\f13e\"}.fa-cloud-showers-heavy{--fa:\"\\f740\"}.fa-headphones-alt,.fa-headphones-simple{--fa:\"\\f58f\"}.fa-sitemap{--fa:\"\\f0e8\"}.fa-circle-dollar-to-slot,.fa-donate{--fa:\"\\f4b9\"}.fa-memory{--fa:\"\\f538\"}.fa-road-spikes{--fa:\"\\e568\"}.fa-fire-burner{--fa:\"\\e4f1\"}.fa-flag{--fa:\"\\f024\"}.fa-hanukiah{--fa:\"\\f6e6\"}.fa-feather{--fa:\"\\f52d\"}.fa-volume-down,.fa-volume-low{--fa:\"\\f027\"}.fa-comment-slash{--fa:\"\\f4b3\"}.fa-cloud-sun-rain{--fa:\"\\f743\"}.fa-compress{--fa:\"\\f066\"}.fa-wheat-alt,.fa-wheat-awn{--fa:\"\\e2cd\"}.fa-ankh{--fa:\"\\f644\"}.fa-hands-holding-child{--fa:\"\\e4fa\"}.fa-asterisk{--fa:\"\\2a\"}.fa-check-square,.fa-square-check{--fa:\"\\f14a\"}.fa-peseta-sign{--fa:\"\\e221\"}.fa-header,.fa-heading{--fa:\"\\f1dc\"}.fa-ghost{--fa:\"\\f6e2\"}.fa-list,.fa-list-squares{--fa:\"\\f03a\"}.fa-phone-square-alt,.fa-square-phone-flip{--fa:\"\\f87b\"}.fa-cart-plus{--fa:\"\\f217\"}.fa-gamepad{--fa:\"\\f11b\"}.fa-circle-dot,.fa-dot-circle{--fa:\"\\f192\"}.fa-dizzy,.fa-face-dizzy{--fa:\"\\f567\"}.fa-egg{--fa:\"\\f7fb\"}.fa-house-medical-circle-xmark{--fa:\"\\e513\"}.fa-campground{--fa:\"\\f6bb\"}.fa-folder-plus{--fa:\"\\f65e\"}.fa-futbol,.fa-futbol-ball,.fa-soccer-ball{--fa:\"\\f1e3\"}.fa-paint-brush,.fa-paintbrush{--fa:\"\\f1fc\"}.fa-lock{--fa:\"\\f023\"}.fa-gas-pump{--fa:\"\\f52f\"}.fa-hot-tub,.fa-hot-tub-person{--fa:\"\\f593\"}.fa-map-location,.fa-map-marked{--fa:\"\\f59f\"}.fa-house-flood-water{--fa:\"\\e50e\"}.fa-tree{--fa:\"\\f1bb\"}.fa-bridge-lock{--fa:\"\\e4cc\"}.fa-sack-dollar{--fa:\"\\f81d\"}.fa-edit,.fa-pen-to-square{--fa:\"\\f044\"}.fa-car-side{--fa:\"\\f5e4\"}.fa-share-alt,.fa-share-nodes{--fa:\"\\f1e0\"}.fa-heart-circle-minus{--fa:\"\\e4ff\"}.fa-hourglass-2,.fa-hourglass-half{--fa:\"\\f252\"}.fa-microscope{--fa:\"\\f610\"}.fa-sink{--fa:\"\\e06d\"}.fa-bag-shopping,.fa-shopping-bag{--fa:\"\\f290\"}.fa-arrow-down-z-a,.fa-sort-alpha-desc,.fa-sort-alpha-down-alt{--fa:\"\\f881\"}.fa-mitten{--fa:\"\\f7b5\"}.fa-person-rays{--fa:\"\\e54d\"}.fa-users{--fa:\"\\f0c0\"}.fa-eye-slash{--fa:\"\\f070\"}.fa-flask-vial{--fa:\"\\e4f3\"}.fa-hand,.fa-hand-paper{--fa:\"\\f256\"}.fa-om{--fa:\"\\f679\"}.fa-worm{--fa:\"\\e599\"}.fa-house-circle-xmark{--fa:\"\\e50b\"}.fa-plug{--fa:\"\\f1e6\"}.fa-chevron-up{--fa:\"\\f077\"}.fa-hand-spock{--fa:\"\\f259\"}.fa-stopwatch{--fa:\"\\f2f2\"}.fa-face-kiss,.fa-kiss{--fa:\"\\f596\"}.fa-bridge-circle-xmark{--fa:\"\\e4cb\"}.fa-face-grin-tongue,.fa-grin-tongue{--fa:\"\\f589\"}.fa-chess-bishop{--fa:\"\\f43a\"}.fa-face-grin-wink,.fa-grin-wink{--fa:\"\\f58c\"}.fa-deaf,.fa-deafness,.fa-ear-deaf,.fa-hard-of-hearing{--fa:\"\\f2a4\"}.fa-road-circle-check{--fa:\"\\e564\"}.fa-dice-five{--fa:\"\\f523\"}.fa-rss-square,.fa-square-rss{--fa:\"\\f143\"}.fa-land-mine-on{--fa:\"\\e51b\"}.fa-i-cursor{--fa:\"\\f246\"}.fa-stamp{--fa:\"\\f5bf\"}.fa-stairs{--fa:\"\\e289\"}.fa-i{--fa:\"\\49\"}.fa-hryvnia,.fa-hryvnia-sign{--fa:\"\\f6f2\"}.fa-pills{--fa:\"\\f484\"}.fa-face-grin-wide,.fa-grin-alt{--fa:\"\\f581\"}.fa-tooth{--fa:\"\\f5c9\"}.fa-v{--fa:\"\\56\"}.fa-bangladeshi-taka-sign{--fa:\"\\e2e6\"}.fa-bicycle{--fa:\"\\f206\"}.fa-rod-asclepius,.fa-rod-snake,.fa-staff-aesculapius,.fa-staff-snake{--fa:\"\\e579\"}.fa-head-side-cough-slash{--fa:\"\\e062\"}.fa-ambulance,.fa-truck-medical{--fa:\"\\f0f9\"}.fa-wheat-awn-circle-exclamation{--fa:\"\\e598\"}.fa-snowman{--fa:\"\\f7d0\"}.fa-mortar-pestle{--fa:\"\\f5a7\"}.fa-road-barrier{--fa:\"\\e562\"}.fa-school{--fa:\"\\f549\"}.fa-igloo{--fa:\"\\f7ae\"}.fa-joint{--fa:\"\\f595\"}.fa-angle-right{--fa:\"\\f105\"}.fa-horse{--fa:\"\\f6f0\"}.fa-q{--fa:\"\\51\"}.fa-g{--fa:\"\\47\"}.fa-notes-medical{--fa:\"\\f481\"}.fa-temperature-2,.fa-temperature-half,.fa-thermometer-2,.fa-thermometer-half{--fa:\"\\f2c9\"}.fa-dong-sign{--fa:\"\\e169\"}.fa-capsules{--fa:\"\\f46b\"}.fa-poo-bolt,.fa-poo-storm{--fa:\"\\f75a\"}.fa-face-frown-open,.fa-frown-open{--fa:\"\\f57a\"}.fa-hand-point-up{--fa:\"\\f0a6\"}.fa-money-bill{--fa:\"\\f0d6\"}.fa-bookmark{--fa:\"\\f02e\"}.fa-align-justify{--fa:\"\\f039\"}.fa-umbrella-beach{--fa:\"\\f5ca\"}.fa-helmet-un{--fa:\"\\e503\"}.fa-bullseye{--fa:\"\\f140\"}.fa-bacon{--fa:\"\\f7e5\"}.fa-hand-point-down{--fa:\"\\f0a7\"}.fa-arrow-up-from-bracket{--fa:\"\\e09a\"}.fa-folder,.fa-folder-blank{--fa:\"\\f07b\"}.fa-file-medical-alt,.fa-file-waveform{--fa:\"\\f478\"}.fa-radiation{--fa:\"\\f7b9\"}.fa-chart-simple{--fa:\"\\e473\"}.fa-mars-stroke{--fa:\"\\f229\"}.fa-vial{--fa:\"\\f492\"}.fa-dashboard,.fa-gauge,.fa-gauge-med,.fa-tachometer-alt-average{--fa:\"\\f624\"}.fa-magic-wand-sparkles,.fa-wand-magic-sparkles{--fa:\"\\e2ca\"}.fa-e{--fa:\"\\45\"}.fa-pen-alt,.fa-pen-clip{--fa:\"\\f305\"}.fa-bridge-circle-exclamation{--fa:\"\\e4ca\"}.fa-user{--fa:\"\\f007\"}.fa-school-circle-check{--fa:\"\\e56b\"}.fa-dumpster{--fa:\"\\f793\"}.fa-shuttle-van,.fa-van-shuttle{--fa:\"\\f5b6\"}.fa-building-user{--fa:\"\\e4da\"}.fa-caret-square-left,.fa-square-caret-left{--fa:\"\\f191\"}.fa-highlighter{--fa:\"\\f591\"}.fa-key{--fa:\"\\f084\"}.fa-bullhorn{--fa:\"\\f0a1\"}.fa-globe{--fa:\"\\f0ac\"}.fa-synagogue{--fa:\"\\f69b\"}.fa-person-half-dress{--fa:\"\\e548\"}.fa-road-bridge{--fa:\"\\e563\"}.fa-location-arrow{--fa:\"\\f124\"}.fa-c{--fa:\"\\43\"}.fa-tablet-button{--fa:\"\\f10a\"}.fa-building-lock{--fa:\"\\e4d6\"}.fa-pizza-slice{--fa:\"\\f818\"}.fa-money-bill-wave{--fa:\"\\f53a\"}.fa-area-chart,.fa-chart-area{--fa:\"\\f1fe\"}.fa-house-flag{--fa:\"\\e50d\"}.fa-person-circle-minus{--fa:\"\\e540\"}.fa-ban,.fa-cancel{--fa:\"\\f05e\"}.fa-camera-rotate{--fa:\"\\e0d8\"}.fa-air-freshener,.fa-spray-can-sparkles{--fa:\"\\f5d0\"}.fa-star{--fa:\"\\f005\"}.fa-repeat{--fa:\"\\f363\"}.fa-cross{--fa:\"\\f654\"}.fa-box{--fa:\"\\f466\"}.fa-venus-mars{--fa:\"\\f228\"}.fa-arrow-pointer,.fa-mouse-pointer{--fa:\"\\f245\"}.fa-expand-arrows-alt,.fa-maximize{--fa:\"\\f31e\"}.fa-charging-station{--fa:\"\\f5e7\"}.fa-shapes,.fa-triangle-circle-square{--fa:\"\\f61f\"}.fa-random,.fa-shuffle{--fa:\"\\f074\"}.fa-person-running,.fa-running{--fa:\"\\f70c\"}.fa-mobile-retro{--fa:\"\\e527\"}.fa-grip-lines-vertical{--fa:\"\\f7a5\"}.fa-spider{--fa:\"\\f717\"}.fa-hands-bound{--fa:\"\\e4f9\"}.fa-file-invoice-dollar{--fa:\"\\f571\"}.fa-plane-circle-exclamation{--fa:\"\\e556\"}.fa-x-ray{--fa:\"\\f497\"}.fa-spell-check{--fa:\"\\f891\"}.fa-slash{--fa:\"\\f715\"}.fa-computer-mouse,.fa-mouse{--fa:\"\\f8cc\"}.fa-arrow-right-to-bracket,.fa-sign-in{--fa:\"\\f090\"}.fa-shop-slash,.fa-store-alt-slash{--fa:\"\\e070\"}.fa-server{--fa:\"\\f233\"}.fa-virus-covid-slash{--fa:\"\\e4a9\"}.fa-shop-lock{--fa:\"\\e4a5\"}.fa-hourglass-1,.fa-hourglass-start{--fa:\"\\f251\"}.fa-blender-phone{--fa:\"\\f6b6\"}.fa-building-wheat{--fa:\"\\e4db\"}.fa-person-breastfeeding{--fa:\"\\e53a\"}.fa-right-to-bracket,.fa-sign-in-alt{--fa:\"\\f2f6\"}.fa-venus{--fa:\"\\f221\"}.fa-passport{--fa:\"\\f5ab\"}.fa-thumb-tack-slash,.fa-thumbtack-slash{--fa:\"\\e68f\"}.fa-heart-pulse,.fa-heartbeat{--fa:\"\\f21e\"}.fa-people-carry,.fa-people-carry-box{--fa:\"\\f4ce\"}.fa-temperature-high{--fa:\"\\f769\"}.fa-microchip{--fa:\"\\f2db\"}.fa-crown{--fa:\"\\f521\"}.fa-weight-hanging{--fa:\"\\f5cd\"}.fa-xmarks-lines{--fa:\"\\e59a\"}.fa-file-prescription{--fa:\"\\f572\"}.fa-weight,.fa-weight-scale{--fa:\"\\f496\"}.fa-user-friends,.fa-user-group{--fa:\"\\f500\"}.fa-arrow-up-a-z,.fa-sort-alpha-up{--fa:\"\\f15e\"}.fa-chess-knight{--fa:\"\\f441\"}.fa-face-laugh-squint,.fa-laugh-squint{--fa:\"\\f59b\"}.fa-wheelchair{--fa:\"\\f193\"}.fa-arrow-circle-up,.fa-circle-arrow-up{--fa:\"\\f0aa\"}.fa-toggle-on{--fa:\"\\f205\"}.fa-person-walking,.fa-walking{--fa:\"\\f554\"}.fa-l{--fa:\"\\4c\"}.fa-fire{--fa:\"\\f06d\"}.fa-bed-pulse,.fa-procedures{--fa:\"\\f487\"}.fa-shuttle-space,.fa-space-shuttle{--fa:\"\\f197\"}.fa-face-laugh,.fa-laugh{--fa:\"\\f599\"}.fa-folder-open{--fa:\"\\f07c\"}.fa-heart-circle-plus{--fa:\"\\e500\"}.fa-code-fork{--fa:\"\\e13b\"}.fa-city{--fa:\"\\f64f\"}.fa-microphone-alt,.fa-microphone-lines{--fa:\"\\f3c9\"}.fa-pepper-hot{--fa:\"\\f816\"}.fa-unlock{--fa:\"\\f09c\"}.fa-colon-sign{--fa:\"\\e140\"}.fa-headset{--fa:\"\\f590\"}.fa-store-slash{--fa:\"\\e071\"}.fa-road-circle-xmark{--fa:\"\\e566\"}.fa-user-minus{--fa:\"\\f503\"}.fa-mars-stroke-up,.fa-mars-stroke-v{--fa:\"\\f22a\"}.fa-champagne-glasses,.fa-glass-cheers{--fa:\"\\f79f\"}.fa-clipboard{--fa:\"\\f328\"}.fa-house-circle-exclamation{--fa:\"\\e50a\"}.fa-file-arrow-up,.fa-file-upload{--fa:\"\\f574\"}.fa-wifi,.fa-wifi-3,.fa-wifi-strong{--fa:\"\\f1eb\"}.fa-bath,.fa-bathtub{--fa:\"\\f2cd\"}.fa-underline{--fa:\"\\f0cd\"}.fa-user-edit,.fa-user-pen{--fa:\"\\f4ff\"}.fa-signature{--fa:\"\\f5b7\"}.fa-stroopwafel{--fa:\"\\f551\"}.fa-bold{--fa:\"\\f032\"}.fa-anchor-lock{--fa:\"\\e4ad\"}.fa-building-ngo{--fa:\"\\e4d7\"}.fa-manat-sign{--fa:\"\\e1d5\"}.fa-not-equal{--fa:\"\\f53e\"}.fa-border-style,.fa-border-top-left{--fa:\"\\f853\"}.fa-map-location-dot,.fa-map-marked-alt{--fa:\"\\f5a0\"}.fa-jedi{--fa:\"\\f669\"}.fa-poll,.fa-square-poll-vertical{--fa:\"\\f681\"}.fa-mug-hot{--fa:\"\\f7b6\"}.fa-battery-car,.fa-car-battery{--fa:\"\\f5df\"}.fa-gift{--fa:\"\\f06b\"}.fa-dice-two{--fa:\"\\f528\"}.fa-chess-queen{--fa:\"\\f445\"}.fa-glasses{--fa:\"\\f530\"}.fa-chess-board{--fa:\"\\f43c\"}.fa-building-circle-check{--fa:\"\\e4d2\"}.fa-person-chalkboard{--fa:\"\\e53d\"}.fa-mars-stroke-h,.fa-mars-stroke-right{--fa:\"\\f22b\"}.fa-hand-back-fist,.fa-hand-rock{--fa:\"\\f255\"}.fa-caret-square-up,.fa-square-caret-up{--fa:\"\\f151\"}.fa-cloud-showers-water{--fa:\"\\e4e4\"}.fa-bar-chart,.fa-chart-bar{--fa:\"\\f080\"}.fa-hands-bubbles,.fa-hands-wash{--fa:\"\\e05e\"}.fa-less-than-equal{--fa:\"\\f537\"}.fa-train{--fa:\"\\f238\"}.fa-eye-low-vision,.fa-low-vision{--fa:\"\\f2a8\"}.fa-crow{--fa:\"\\f520\"}.fa-sailboat{--fa:\"\\e445\"}.fa-window-restore{--fa:\"\\f2d2\"}.fa-plus-square,.fa-square-plus{--fa:\"\\f0fe\"}.fa-torii-gate{--fa:\"\\f6a1\"}.fa-frog{--fa:\"\\f52e\"}.fa-bucket{--fa:\"\\e4cf\"}.fa-image{--fa:\"\\f03e\"}.fa-microphone{--fa:\"\\f130\"}.fa-cow{--fa:\"\\f6c8\"}.fa-caret-up{--fa:\"\\f0d8\"}.fa-screwdriver{--fa:\"\\f54a\"}.fa-folder-closed{--fa:\"\\e185\"}.fa-house-tsunami{--fa:\"\\e515\"}.fa-square-nfi{--fa:\"\\e576\"}.fa-arrow-up-from-ground-water{--fa:\"\\e4b5\"}.fa-glass-martini-alt,.fa-martini-glass{--fa:\"\\f57b\"}.fa-square-binary{--fa:\"\\e69b\"}.fa-rotate-back,.fa-rotate-backward,.fa-rotate-left,.fa-undo-alt{--fa:\"\\f2ea\"}.fa-columns,.fa-table-columns{--fa:\"\\f0db\"}.fa-lemon{--fa:\"\\f094\"}.fa-head-side-mask{--fa:\"\\e063\"}.fa-handshake{--fa:\"\\f2b5\"}.fa-gem{--fa:\"\\f3a5\"}.fa-dolly,.fa-dolly-box{--fa:\"\\f472\"}.fa-smoking{--fa:\"\\f48d\"}.fa-compress-arrows-alt,.fa-minimize{--fa:\"\\f78c\"}.fa-monument{--fa:\"\\f5a6\"}.fa-snowplow{--fa:\"\\f7d2\"}.fa-angle-double-right,.fa-angles-right{--fa:\"\\f101\"}.fa-cannabis{--fa:\"\\f55f\"}.fa-circle-play,.fa-play-circle{--fa:\"\\f144\"}.fa-tablets{--fa:\"\\f490\"}.fa-ethernet{--fa:\"\\f796\"}.fa-eur,.fa-euro,.fa-euro-sign{--fa:\"\\f153\"}.fa-chair{--fa:\"\\f6c0\"}.fa-check-circle,.fa-circle-check{--fa:\"\\f058\"}.fa-circle-stop,.fa-stop-circle{--fa:\"\\f28d\"}.fa-compass-drafting,.fa-drafting-compass{--fa:\"\\f568\"}.fa-plate-wheat{--fa:\"\\e55a\"}.fa-icicles{--fa:\"\\f7ad\"}.fa-person-shelter{--fa:\"\\e54f\"}.fa-neuter{--fa:\"\\f22c\"}.fa-id-badge{--fa:\"\\f2c1\"}.fa-marker{--fa:\"\\f5a1\"}.fa-face-laugh-beam,.fa-laugh-beam{--fa:\"\\f59a\"}.fa-helicopter-symbol{--fa:\"\\e502\"}.fa-universal-access{--fa:\"\\f29a\"}.fa-chevron-circle-up,.fa-circle-chevron-up{--fa:\"\\f139\"}.fa-lari-sign{--fa:\"\\e1c8\"}.fa-volcano{--fa:\"\\f770\"}.fa-person-walking-dashed-line-arrow-right{--fa:\"\\e553\"}.fa-gbp,.fa-pound-sign,.fa-sterling-sign{--fa:\"\\f154\"}.fa-viruses{--fa:\"\\e076\"}.fa-square-person-confined{--fa:\"\\e577\"}.fa-user-tie{--fa:\"\\f508\"}.fa-arrow-down-long,.fa-long-arrow-down{--fa:\"\\f175\"}.fa-tent-arrow-down-to-line{--fa:\"\\e57e\"}.fa-certificate{--fa:\"\\f0a3\"}.fa-mail-reply-all,.fa-reply-all{--fa:\"\\f122\"}.fa-suitcase{--fa:\"\\f0f2\"}.fa-person-skating,.fa-skating{--fa:\"\\f7c5\"}.fa-filter-circle-dollar,.fa-funnel-dollar{--fa:\"\\f662\"}.fa-camera-retro{--fa:\"\\f083\"}.fa-arrow-circle-down,.fa-circle-arrow-down{--fa:\"\\f0ab\"}.fa-arrow-right-to-file,.fa-file-import{--fa:\"\\f56f\"}.fa-external-link-square,.fa-square-arrow-up-right{--fa:\"\\f14c\"}.fa-box-open{--fa:\"\\f49e\"}.fa-scroll{--fa:\"\\f70e\"}.fa-spa{--fa:\"\\f5bb\"}.fa-location-pin-lock{--fa:\"\\e51f\"}.fa-pause{--fa:\"\\f04c\"}.fa-hill-avalanche{--fa:\"\\e507\"}.fa-temperature-0,.fa-temperature-empty,.fa-thermometer-0,.fa-thermometer-empty{--fa:\"\\f2cb\"}.fa-bomb{--fa:\"\\f1e2\"}.fa-registered{--fa:\"\\f25d\"}.fa-address-card,.fa-contact-card,.fa-vcard{--fa:\"\\f2bb\"}.fa-balance-scale-right,.fa-scale-unbalanced-flip{--fa:\"\\f516\"}.fa-subscript{--fa:\"\\f12c\"}.fa-diamond-turn-right,.fa-directions{--fa:\"\\f5eb\"}.fa-burst{--fa:\"\\e4dc\"}.fa-house-laptop,.fa-laptop-house{--fa:\"\\e066\"}.fa-face-tired,.fa-tired{--fa:\"\\f5c8\"}.fa-money-bills{--fa:\"\\e1f3\"}.fa-smog{--fa:\"\\f75f\"}.fa-crutch{--fa:\"\\f7f7\"}.fa-cloud-arrow-up,.fa-cloud-upload,.fa-cloud-upload-alt{--fa:\"\\f0ee\"}.fa-palette{--fa:\"\\f53f\"}.fa-arrows-turn-right{--fa:\"\\e4c0\"}.fa-vest{--fa:\"\\e085\"}.fa-ferry{--fa:\"\\e4ea\"}.fa-arrows-down-to-people{--fa:\"\\e4b9\"}.fa-seedling,.fa-sprout{--fa:\"\\f4d8\"}.fa-arrows-alt-h,.fa-left-right{--fa:\"\\f337\"}.fa-boxes-packing{--fa:\"\\e4c7\"}.fa-arrow-circle-left,.fa-circle-arrow-left{--fa:\"\\f0a8\"}.fa-group-arrows-rotate{--fa:\"\\e4f6\"}.fa-bowl-food{--fa:\"\\e4c6\"}.fa-candy-cane{--fa:\"\\f786\"}.fa-arrow-down-wide-short,.fa-sort-amount-asc,.fa-sort-amount-down{--fa:\"\\f160\"}.fa-cloud-bolt,.fa-thunderstorm{--fa:\"\\f76c\"}.fa-remove-format,.fa-text-slash{--fa:\"\\f87d\"}.fa-face-smile-wink,.fa-smile-wink{--fa:\"\\f4da\"}.fa-file-word{--fa:\"\\f1c2\"}.fa-file-powerpoint{--fa:\"\\f1c4\"}.fa-arrows-h,.fa-arrows-left-right{--fa:\"\\f07e\"}.fa-house-lock{--fa:\"\\e510\"}.fa-cloud-arrow-down,.fa-cloud-download,.fa-cloud-download-alt{--fa:\"\\f0ed\"}.fa-children{--fa:\"\\e4e1\"}.fa-blackboard,.fa-chalkboard{--fa:\"\\f51b\"}.fa-user-alt-slash,.fa-user-large-slash{--fa:\"\\f4fa\"}.fa-envelope-open{--fa:\"\\f2b6\"}.fa-handshake-alt-slash,.fa-handshake-simple-slash{--fa:\"\\e05f\"}.fa-mattress-pillow{--fa:\"\\e525\"}.fa-guarani-sign{--fa:\"\\e19a\"}.fa-arrows-rotate,.fa-refresh,.fa-sync{--fa:\"\\f021\"}.fa-fire-extinguisher{--fa:\"\\f134\"}.fa-cruzeiro-sign{--fa:\"\\e152\"}.fa-greater-than-equal{--fa:\"\\f532\"}.fa-shield-alt,.fa-shield-halved{--fa:\"\\f3ed\"}.fa-atlas,.fa-book-atlas{--fa:\"\\f558\"}.fa-virus{--fa:\"\\e074\"}.fa-envelope-circle-check{--fa:\"\\e4e8\"}.fa-layer-group{--fa:\"\\f5fd\"}.fa-arrows-to-dot{--fa:\"\\e4be\"}.fa-archway{--fa:\"\\f557\"}.fa-heart-circle-check{--fa:\"\\e4fd\"}.fa-house-chimney-crack,.fa-house-damage{--fa:\"\\f6f1\"}.fa-file-archive,.fa-file-zipper{--fa:\"\\f1c6\"}.fa-square{--fa:\"\\f0c8\"}.fa-glass-martini,.fa-martini-glass-empty{--fa:\"\\f000\"}.fa-couch{--fa:\"\\f4b8\"}.fa-cedi-sign{--fa:\"\\e0df\"}.fa-italic{--fa:\"\\f033\"}.fa-table-cells-column-lock{--fa:\"\\e678\"}.fa-church{--fa:\"\\f51d\"}.fa-comments-dollar{--fa:\"\\f653\"}.fa-democrat{--fa:\"\\f747\"}.fa-z{--fa:\"\\5a\"}.fa-person-skiing,.fa-skiing{--fa:\"\\f7c9\"}.fa-road-lock{--fa:\"\\e567\"}.fa-a{--fa:\"\\41\"}.fa-temperature-arrow-down,.fa-temperature-down{--fa:\"\\e03f\"}.fa-feather-alt,.fa-feather-pointed{--fa:\"\\f56b\"}.fa-p{--fa:\"\\50\"}.fa-snowflake{--fa:\"\\f2dc\"}.fa-newspaper{--fa:\"\\f1ea\"}.fa-ad,.fa-rectangle-ad{--fa:\"\\f641\"}.fa-arrow-circle-right,.fa-circle-arrow-right{--fa:\"\\f0a9\"}.fa-filter-circle-xmark{--fa:\"\\e17b\"}.fa-locust{--fa:\"\\e520\"}.fa-sort,.fa-unsorted{--fa:\"\\f0dc\"}.fa-list-1-2,.fa-list-numeric,.fa-list-ol{--fa:\"\\f0cb\"}.fa-person-dress-burst{--fa:\"\\e544\"}.fa-money-check-alt,.fa-money-check-dollar{--fa:\"\\f53d\"}.fa-vector-square{--fa:\"\\f5cb\"}.fa-bread-slice{--fa:\"\\f7ec\"}.fa-language{--fa:\"\\f1ab\"}.fa-face-kiss-wink-heart,.fa-kiss-wink-heart{--fa:\"\\f598\"}.fa-filter{--fa:\"\\f0b0\"}.fa-question{--fa:\"\\3f\"}.fa-file-signature{--fa:\"\\f573\"}.fa-arrows-alt,.fa-up-down-left-right{--fa:\"\\f0b2\"}.fa-house-chimney-user{--fa:\"\\e065\"}.fa-hand-holding-heart{--fa:\"\\f4be\"}.fa-puzzle-piece{--fa:\"\\f12e\"}.fa-money-check{--fa:\"\\f53c\"}.fa-star-half-alt,.fa-star-half-stroke{--fa:\"\\f5c0\"}.fa-code{--fa:\"\\f121\"}.fa-glass-whiskey,.fa-whiskey-glass{--fa:\"\\f7a0\"}.fa-building-circle-exclamation{--fa:\"\\e4d3\"}.fa-magnifying-glass-chart{--fa:\"\\e522\"}.fa-arrow-up-right-from-square,.fa-external-link{--fa:\"\\f08e\"}.fa-cubes-stacked{--fa:\"\\e4e6\"}.fa-krw,.fa-won,.fa-won-sign{--fa:\"\\f159\"}.fa-virus-covid{--fa:\"\\e4a8\"}.fa-austral-sign{--fa:\"\\e0a9\"}.fa-f{--fa:\"\\46\"}.fa-leaf{--fa:\"\\f06c\"}.fa-road{--fa:\"\\f018\"}.fa-cab,.fa-taxi{--fa:\"\\f1ba\"}.fa-person-circle-plus{--fa:\"\\e541\"}.fa-chart-pie,.fa-pie-chart{--fa:\"\\f200\"}.fa-bolt-lightning{--fa:\"\\e0b7\"}.fa-sack-xmark{--fa:\"\\e56a\"}.fa-file-excel{--fa:\"\\f1c3\"}.fa-file-contract{--fa:\"\\f56c\"}.fa-fish-fins{--fa:\"\\e4f2\"}.fa-building-flag{--fa:\"\\e4d5\"}.fa-face-grin-beam,.fa-grin-beam{--fa:\"\\f582\"}.fa-object-ungroup{--fa:\"\\f248\"}.fa-poop{--fa:\"\\f619\"}.fa-location-pin,.fa-map-marker{--fa:\"\\f041\"}.fa-kaaba{--fa:\"\\f66b\"}.fa-toilet-paper{--fa:\"\\f71e\"}.fa-hard-hat,.fa-hat-hard,.fa-helmet-safety{--fa:\"\\f807\"}.fa-eject{--fa:\"\\f052\"}.fa-arrow-alt-circle-right,.fa-circle-right{--fa:\"\\f35a\"}.fa-plane-circle-check{--fa:\"\\e555\"}.fa-face-rolling-eyes,.fa-meh-rolling-eyes{--fa:\"\\f5a5\"}.fa-object-group{--fa:\"\\f247\"}.fa-chart-line,.fa-line-chart{--fa:\"\\f201\"}.fa-mask-ventilator{--fa:\"\\e524\"}.fa-arrow-right{--fa:\"\\f061\"}.fa-map-signs,.fa-signs-post{--fa:\"\\f277\"}.fa-cash-register{--fa:\"\\f788\"}.fa-person-circle-question{--fa:\"\\e542\"}.fa-h{--fa:\"\\48\"}.fa-tarp{--fa:\"\\e57b\"}.fa-screwdriver-wrench,.fa-tools{--fa:\"\\f7d9\"}.fa-arrows-to-eye{--fa:\"\\e4bf\"}.fa-plug-circle-bolt{--fa:\"\\e55b\"}.fa-heart{--fa:\"\\f004\"}.fa-mars-and-venus{--fa:\"\\f224\"}.fa-home-user,.fa-house-user{--fa:\"\\e1b0\"}.fa-dumpster-fire{--fa:\"\\f794\"}.fa-house-crack{--fa:\"\\e3b1\"}.fa-cocktail,.fa-martini-glass-citrus{--fa:\"\\f561\"}.fa-face-surprise,.fa-surprise{--fa:\"\\f5c2\"}.fa-bottle-water{--fa:\"\\e4c5\"}.fa-circle-pause,.fa-pause-circle{--fa:\"\\f28b\"}.fa-toilet-paper-slash{--fa:\"\\e072\"}.fa-apple-alt,.fa-apple-whole{--fa:\"\\f5d1\"}.fa-kitchen-set{--fa:\"\\e51a\"}.fa-r{--fa:\"\\52\"}.fa-temperature-1,.fa-temperature-quarter,.fa-thermometer-1,.fa-thermometer-quarter{--fa:\"\\f2ca\"}.fa-cube{--fa:\"\\f1b2\"}.fa-bitcoin-sign{--fa:\"\\e0b4\"}.fa-shield-dog{--fa:\"\\e573\"}.fa-solar-panel{--fa:\"\\f5ba\"}.fa-lock-open{--fa:\"\\f3c1\"}.fa-elevator{--fa:\"\\e16d\"}.fa-money-bill-transfer{--fa:\"\\e528\"}.fa-money-bill-trend-up{--fa:\"\\e529\"}.fa-house-flood-water-circle-arrow-right{--fa:\"\\e50f\"}.fa-poll-h,.fa-square-poll-horizontal{--fa:\"\\f682\"}.fa-circle{--fa:\"\\f111\"}.fa-backward-fast,.fa-fast-backward{--fa:\"\\f049\"}.fa-recycle{--fa:\"\\f1b8\"}.fa-user-astronaut{--fa:\"\\f4fb\"}.fa-plane-slash{--fa:\"\\e069\"}.fa-trademark{--fa:\"\\f25c\"}.fa-basketball,.fa-basketball-ball{--fa:\"\\f434\"}.fa-satellite-dish{--fa:\"\\f7c0\"}.fa-arrow-alt-circle-up,.fa-circle-up{--fa:\"\\f35b\"}.fa-mobile-alt,.fa-mobile-screen-button{--fa:\"\\f3cd\"}.fa-volume-high,.fa-volume-up{--fa:\"\\f028\"}.fa-users-rays{--fa:\"\\e593\"}.fa-wallet{--fa:\"\\f555\"}.fa-clipboard-check{--fa:\"\\f46c\"}.fa-file-audio{--fa:\"\\f1c7\"}.fa-burger,.fa-hamburger{--fa:\"\\f805\"}.fa-wrench{--fa:\"\\f0ad\"}.fa-bugs{--fa:\"\\e4d0\"}.fa-rupee,.fa-rupee-sign{--fa:\"\\f156\"}.fa-file-image{--fa:\"\\f1c5\"}.fa-circle-question,.fa-question-circle{--fa:\"\\f059\"}.fa-plane-departure{--fa:\"\\f5b0\"}.fa-handshake-slash{--fa:\"\\e060\"}.fa-book-bookmark{--fa:\"\\e0bb\"}.fa-code-branch{--fa:\"\\f126\"}.fa-hat-cowboy{--fa:\"\\f8c0\"}.fa-bridge{--fa:\"\\e4c8\"}.fa-phone-alt,.fa-phone-flip{--fa:\"\\f879\"}.fa-truck-front{--fa:\"\\e2b7\"}.fa-cat{--fa:\"\\f6be\"}.fa-anchor-circle-exclamation{--fa:\"\\e4ab\"}.fa-truck-field{--fa:\"\\e58d\"}.fa-route{--fa:\"\\f4d7\"}.fa-clipboard-question{--fa:\"\\e4e3\"}.fa-panorama{--fa:\"\\e209\"}.fa-comment-medical{--fa:\"\\f7f5\"}.fa-teeth-open{--fa:\"\\f62f\"}.fa-file-circle-minus{--fa:\"\\e4ed\"}.fa-tags{--fa:\"\\f02c\"}.fa-wine-glass{--fa:\"\\f4e3\"}.fa-fast-forward,.fa-forward-fast{--fa:\"\\f050\"}.fa-face-meh-blank,.fa-meh-blank{--fa:\"\\f5a4\"}.fa-parking,.fa-square-parking{--fa:\"\\f540\"}.fa-house-signal{--fa:\"\\e012\"}.fa-bars-progress,.fa-tasks-alt{--fa:\"\\f828\"}.fa-faucet-drip{--fa:\"\\e006\"}.fa-cart-flatbed,.fa-dolly-flatbed{--fa:\"\\f474\"}.fa-ban-smoking,.fa-smoking-ban{--fa:\"\\f54d\"}.fa-terminal{--fa:\"\\f120\"}.fa-mobile-button{--fa:\"\\f10b\"}.fa-house-medical-flag{--fa:\"\\e514\"}.fa-basket-shopping,.fa-shopping-basket{--fa:\"\\f291\"}.fa-tape{--fa:\"\\f4db\"}.fa-bus-alt,.fa-bus-simple{--fa:\"\\f55e\"}.fa-eye{--fa:\"\\f06e\"}.fa-face-sad-cry,.fa-sad-cry{--fa:\"\\f5b3\"}.fa-audio-description{--fa:\"\\f29e\"}.fa-person-military-to-person{--fa:\"\\e54c\"}.fa-file-shield{--fa:\"\\e4f0\"}.fa-user-slash{--fa:\"\\f506\"}.fa-pen{--fa:\"\\f304\"}.fa-tower-observation{--fa:\"\\e586\"}.fa-file-code{--fa:\"\\f1c9\"}.fa-signal,.fa-signal-5,.fa-signal-perfect{--fa:\"\\f012\"}.fa-bus{--fa:\"\\f207\"}.fa-heart-circle-xmark{--fa:\"\\e501\"}.fa-home-lg,.fa-house-chimney{--fa:\"\\e3af\"}.fa-window-maximize{--fa:\"\\f2d0\"}.fa-face-frown,.fa-frown{--fa:\"\\f119\"}.fa-prescription{--fa:\"\\f5b1\"}.fa-shop,.fa-store-alt{--fa:\"\\f54f\"}.fa-floppy-disk,.fa-save{--fa:\"\\f0c7\"}.fa-vihara{--fa:\"\\f6a7\"}.fa-balance-scale-left,.fa-scale-unbalanced{--fa:\"\\f515\"}.fa-sort-asc,.fa-sort-up{--fa:\"\\f0de\"}.fa-comment-dots,.fa-commenting{--fa:\"\\f4ad\"}.fa-plant-wilt{--fa:\"\\e5aa\"}.fa-diamond{--fa:\"\\f219\"}.fa-face-grin-squint,.fa-grin-squint{--fa:\"\\f585\"}.fa-hand-holding-dollar,.fa-hand-holding-usd{--fa:\"\\f4c0\"}.fa-chart-diagram{--fa:\"\\e695\"}.fa-bacterium{--fa:\"\\e05a\"}.fa-hand-pointer{--fa:\"\\f25a\"}.fa-drum-steelpan{--fa:\"\\f56a\"}.fa-hand-scissors{--fa:\"\\f257\"}.fa-hands-praying,.fa-praying-hands{--fa:\"\\f684\"}.fa-arrow-right-rotate,.fa-arrow-rotate-forward,.fa-arrow-rotate-right,.fa-redo{--fa:\"\\f01e\"}.fa-biohazard{--fa:\"\\f780\"}.fa-location,.fa-location-crosshairs{--fa:\"\\f601\"}.fa-mars-double{--fa:\"\\f227\"}.fa-child-dress{--fa:\"\\e59c\"}.fa-users-between-lines{--fa:\"\\e591\"}.fa-lungs-virus{--fa:\"\\e067\"}.fa-face-grin-tears,.fa-grin-tears{--fa:\"\\f588\"}.fa-phone{--fa:\"\\f095\"}.fa-calendar-times,.fa-calendar-xmark{--fa:\"\\f273\"}.fa-child-reaching{--fa:\"\\e59d\"}.fa-head-side-virus{--fa:\"\\e064\"}.fa-user-cog,.fa-user-gear{--fa:\"\\f4fe\"}.fa-arrow-up-1-9,.fa-sort-numeric-up{--fa:\"\\f163\"}.fa-door-closed{--fa:\"\\f52a\"}.fa-shield-virus{--fa:\"\\e06c\"}.fa-dice-six{--fa:\"\\f526\"}.fa-mosquito-net{--fa:\"\\e52c\"}.fa-file-fragment{--fa:\"\\e697\"}.fa-bridge-water{--fa:\"\\e4ce\"}.fa-person-booth{--fa:\"\\f756\"}.fa-text-width{--fa:\"\\f035\"}.fa-hat-wizard{--fa:\"\\f6e8\"}.fa-pen-fancy{--fa:\"\\f5ac\"}.fa-digging,.fa-person-digging{--fa:\"\\f85e\"}.fa-trash{--fa:\"\\f1f8\"}.fa-gauge-simple,.fa-gauge-simple-med,.fa-tachometer-average{--fa:\"\\f629\"}.fa-book-medical{--fa:\"\\f7e6\"}.fa-poo{--fa:\"\\f2fe\"}.fa-quote-right,.fa-quote-right-alt{--fa:\"\\f10e\"}.fa-shirt,.fa-t-shirt,.fa-tshirt{--fa:\"\\f553\"}.fa-cubes{--fa:\"\\f1b3\"}.fa-divide{--fa:\"\\f529\"}.fa-tenge,.fa-tenge-sign{--fa:\"\\f7d7\"}.fa-headphones{--fa:\"\\f025\"}.fa-hands-holding{--fa:\"\\f4c2\"}.fa-hands-clapping{--fa:\"\\e1a8\"}.fa-republican{--fa:\"\\f75e\"}.fa-arrow-left{--fa:\"\\f060\"}.fa-person-circle-xmark{--fa:\"\\e543\"}.fa-ruler{--fa:\"\\f545\"}.fa-align-left{--fa:\"\\f036\"}.fa-dice-d6{--fa:\"\\f6d1\"}.fa-restroom{--fa:\"\\f7bd\"}.fa-j{--fa:\"\\4a\"}.fa-users-viewfinder{--fa:\"\\e595\"}.fa-file-video{--fa:\"\\f1c8\"}.fa-external-link-alt,.fa-up-right-from-square{--fa:\"\\f35d\"}.fa-table-cells,.fa-th{--fa:\"\\f00a\"}.fa-file-pdf{--fa:\"\\f1c1\"}.fa-bible,.fa-book-bible{--fa:\"\\f647\"}.fa-o{--fa:\"\\4f\"}.fa-medkit,.fa-suitcase-medical{--fa:\"\\f0fa\"}.fa-user-secret{--fa:\"\\f21b\"}.fa-otter{--fa:\"\\f700\"}.fa-female,.fa-person-dress{--fa:\"\\f182\"}.fa-comment-dollar{--fa:\"\\f651\"}.fa-briefcase-clock,.fa-business-time{--fa:\"\\f64a\"}.fa-table-cells-large,.fa-th-large{--fa:\"\\f009\"}.fa-book-tanakh,.fa-tanakh{--fa:\"\\f827\"}.fa-phone-volume,.fa-volume-control-phone{--fa:\"\\f2a0\"}.fa-hat-cowboy-side{--fa:\"\\f8c1\"}.fa-clipboard-user{--fa:\"\\f7f3\"}.fa-child{--fa:\"\\f1ae\"}.fa-lira-sign{--fa:\"\\f195\"}.fa-satellite{--fa:\"\\f7bf\"}.fa-plane-lock{--fa:\"\\e558\"}.fa-tag{--fa:\"\\f02b\"}.fa-comment{--fa:\"\\f075\"}.fa-birthday-cake,.fa-cake,.fa-cake-candles{--fa:\"\\f1fd\"}.fa-envelope{--fa:\"\\f0e0\"}.fa-angle-double-up,.fa-angles-up{--fa:\"\\f102\"}.fa-paperclip{--fa:\"\\f0c6\"}.fa-arrow-right-to-city{--fa:\"\\e4b3\"}.fa-ribbon{--fa:\"\\f4d6\"}.fa-lungs{--fa:\"\\f604\"}.fa-arrow-up-9-1,.fa-sort-numeric-up-alt{--fa:\"\\f887\"}.fa-litecoin-sign{--fa:\"\\e1d3\"}.fa-border-none{--fa:\"\\f850\"}.fa-circle-nodes{--fa:\"\\e4e2\"}.fa-parachute-box{--fa:\"\\f4cd\"}.fa-indent{--fa:\"\\f03c\"}.fa-truck-field-un{--fa:\"\\e58e\"}.fa-hourglass,.fa-hourglass-empty{--fa:\"\\f254\"}.fa-mountain{--fa:\"\\f6fc\"}.fa-user-doctor,.fa-user-md{--fa:\"\\f0f0\"}.fa-circle-info,.fa-info-circle{--fa:\"\\f05a\"}.fa-cloud-meatball{--fa:\"\\f73b\"}.fa-camera,.fa-camera-alt{--fa:\"\\f030\"}.fa-square-virus{--fa:\"\\e578\"}.fa-meteor{--fa:\"\\f753\"}.fa-car-on{--fa:\"\\e4dd\"}.fa-sleigh{--fa:\"\\f7cc\"}.fa-arrow-down-1-9,.fa-sort-numeric-asc,.fa-sort-numeric-down{--fa:\"\\f162\"}.fa-hand-holding-droplet,.fa-hand-holding-water{--fa:\"\\f4c1\"}.fa-water{--fa:\"\\f773\"}.fa-calendar-check{--fa:\"\\f274\"}.fa-braille{--fa:\"\\f2a1\"}.fa-prescription-bottle-alt,.fa-prescription-bottle-medical{--fa:\"\\f486\"}.fa-landmark{--fa:\"\\f66f\"}.fa-truck{--fa:\"\\f0d1\"}.fa-crosshairs{--fa:\"\\f05b\"}.fa-person-cane{--fa:\"\\e53c\"}.fa-tent{--fa:\"\\e57d\"}.fa-vest-patches{--fa:\"\\e086\"}.fa-check-double{--fa:\"\\f560\"}.fa-arrow-down-a-z,.fa-sort-alpha-asc,.fa-sort-alpha-down{--fa:\"\\f15d\"}.fa-money-bill-wheat{--fa:\"\\e52a\"}.fa-cookie{--fa:\"\\f563\"}.fa-arrow-left-rotate,.fa-arrow-rotate-back,.fa-arrow-rotate-backward,.fa-arrow-rotate-left,.fa-undo{--fa:\"\\f0e2\"}.fa-hard-drive,.fa-hdd{--fa:\"\\f0a0\"}.fa-face-grin-squint-tears,.fa-grin-squint-tears{--fa:\"\\f586\"}.fa-dumbbell{--fa:\"\\f44b\"}.fa-list-alt,.fa-rectangle-list{--fa:\"\\f022\"}.fa-tarp-droplet{--fa:\"\\e57c\"}.fa-house-medical-circle-check{--fa:\"\\e511\"}.fa-person-skiing-nordic,.fa-skiing-nordic{--fa:\"\\f7ca\"}.fa-calendar-plus{--fa:\"\\f271\"}.fa-plane-arrival{--fa:\"\\f5af\"}.fa-arrow-alt-circle-left,.fa-circle-left{--fa:\"\\f359\"}.fa-subway,.fa-train-subway{--fa:\"\\f239\"}.fa-chart-gantt{--fa:\"\\e0e4\"}.fa-indian-rupee,.fa-indian-rupee-sign,.fa-inr{--fa:\"\\e1bc\"}.fa-crop-alt,.fa-crop-simple{--fa:\"\\f565\"}.fa-money-bill-1,.fa-money-bill-alt{--fa:\"\\f3d1\"}.fa-left-long,.fa-long-arrow-alt-left{--fa:\"\\f30a\"}.fa-dna{--fa:\"\\f471\"}.fa-virus-slash{--fa:\"\\e075\"}.fa-minus,.fa-subtract{--fa:\"\\f068\"}.fa-chess{--fa:\"\\f439\"}.fa-arrow-left-long,.fa-long-arrow-left{--fa:\"\\f177\"}.fa-plug-circle-check{--fa:\"\\e55c\"}.fa-street-view{--fa:\"\\f21d\"}.fa-franc-sign{--fa:\"\\e18f\"}.fa-volume-off{--fa:\"\\f026\"}.fa-american-sign-language-interpreting,.fa-asl-interpreting,.fa-hands-american-sign-language-interpreting,.fa-hands-asl-interpreting{--fa:\"\\f2a3\"}.fa-cog,.fa-gear{--fa:\"\\f013\"}.fa-droplet-slash,.fa-tint-slash{--fa:\"\\f5c7\"}.fa-mosque{--fa:\"\\f678\"}.fa-mosquito{--fa:\"\\e52b\"}.fa-star-of-david{--fa:\"\\f69a\"}.fa-person-military-rifle{--fa:\"\\e54b\"}.fa-cart-shopping,.fa-shopping-cart{--fa:\"\\f07a\"}.fa-vials{--fa:\"\\f493\"}.fa-plug-circle-plus{--fa:\"\\e55f\"}.fa-place-of-worship{--fa:\"\\f67f\"}.fa-grip-vertical{--fa:\"\\f58e\"}.fa-hexagon-nodes{--fa:\"\\e699\"}.fa-arrow-turn-up,.fa-level-up{--fa:\"\\f148\"}.fa-u{--fa:\"\\55\"}.fa-square-root-alt,.fa-square-root-variable{--fa:\"\\f698\"}.fa-clock,.fa-clock-four{--fa:\"\\f017\"}.fa-backward-step,.fa-step-backward{--fa:\"\\f048\"}.fa-pallet{--fa:\"\\f482\"}.fa-faucet{--fa:\"\\e005\"}.fa-baseball-bat-ball{--fa:\"\\f432\"}.fa-s{--fa:\"\\53\"}.fa-timeline{--fa:\"\\e29c\"}.fa-keyboard{--fa:\"\\f11c\"}.fa-caret-down{--fa:\"\\f0d7\"}.fa-clinic-medical,.fa-house-chimney-medical{--fa:\"\\f7f2\"}.fa-temperature-3,.fa-temperature-three-quarters,.fa-thermometer-3,.fa-thermometer-three-quarters{--fa:\"\\f2c8\"}.fa-mobile-android-alt,.fa-mobile-screen{--fa:\"\\f3cf\"}.fa-plane-up{--fa:\"\\e22d\"}.fa-piggy-bank{--fa:\"\\f4d3\"}.fa-battery-3,.fa-battery-half{--fa:\"\\f242\"}.fa-mountain-city{--fa:\"\\e52e\"}.fa-coins{--fa:\"\\f51e\"}.fa-khanda{--fa:\"\\f66d\"}.fa-sliders,.fa-sliders-h{--fa:\"\\f1de\"}.fa-folder-tree{--fa:\"\\f802\"}.fa-network-wired{--fa:\"\\f6ff\"}.fa-map-pin{--fa:\"\\f276\"}.fa-hamsa{--fa:\"\\f665\"}.fa-cent-sign{--fa:\"\\e3f5\"}.fa-flask{--fa:\"\\f0c3\"}.fa-person-pregnant{--fa:\"\\e31e\"}.fa-wand-sparkles{--fa:\"\\f72b\"}.fa-ellipsis-v,.fa-ellipsis-vertical{--fa:\"\\f142\"}.fa-ticket{--fa:\"\\f145\"}.fa-power-off{--fa:\"\\f011\"}.fa-long-arrow-alt-right,.fa-right-long{--fa:\"\\f30b\"}.fa-flag-usa{--fa:\"\\f74d\"}.fa-laptop-file{--fa:\"\\e51d\"}.fa-teletype,.fa-tty{--fa:\"\\f1e4\"}.fa-diagram-next{--fa:\"\\e476\"}.fa-person-rifle{--fa:\"\\e54e\"}.fa-house-medical-circle-exclamation{--fa:\"\\e512\"}.fa-closed-captioning{--fa:\"\\f20a\"}.fa-hiking,.fa-person-hiking{--fa:\"\\f6ec\"}.fa-venus-double{--fa:\"\\f226\"}.fa-images{--fa:\"\\f302\"}.fa-calculator{--fa:\"\\f1ec\"}.fa-people-pulling{--fa:\"\\e535\"}.fa-n{--fa:\"\\4e\"}.fa-cable-car,.fa-tram{--fa:\"\\f7da\"}.fa-cloud-rain{--fa:\"\\f73d\"}.fa-building-circle-xmark{--fa:\"\\e4d4\"}.fa-ship{--fa:\"\\f21a\"}.fa-arrows-down-to-line{--fa:\"\\e4b8\"}.fa-download{--fa:\"\\f019\"}.fa-face-grin,.fa-grin{--fa:\"\\f580\"}.fa-backspace,.fa-delete-left{--fa:\"\\f55a\"}.fa-eye-dropper,.fa-eye-dropper-empty,.fa-eyedropper{--fa:\"\\f1fb\"}.fa-file-circle-check{--fa:\"\\e5a0\"}.fa-forward{--fa:\"\\f04e\"}.fa-mobile,.fa-mobile-android,.fa-mobile-phone{--fa:\"\\f3ce\"}.fa-face-meh,.fa-meh{--fa:\"\\f11a\"}.fa-align-center{--fa:\"\\f037\"}.fa-book-dead,.fa-book-skull{--fa:\"\\f6b7\"}.fa-drivers-license,.fa-id-card{--fa:\"\\f2c2\"}.fa-dedent,.fa-outdent{--fa:\"\\f03b\"}.fa-heart-circle-exclamation{--fa:\"\\e4fe\"}.fa-home,.fa-home-alt,.fa-home-lg-alt,.fa-house{--fa:\"\\f015\"}.fa-calendar-week{--fa:\"\\f784\"}.fa-laptop-medical{--fa:\"\\f812\"}.fa-b{--fa:\"\\42\"}.fa-file-medical{--fa:\"\\f477\"}.fa-dice-one{--fa:\"\\f525\"}.fa-kiwi-bird{--fa:\"\\f535\"}.fa-arrow-right-arrow-left,.fa-exchange{--fa:\"\\f0ec\"}.fa-redo-alt,.fa-rotate-forward,.fa-rotate-right{--fa:\"\\f2f9\"}.fa-cutlery,.fa-utensils{--fa:\"\\f2e7\"}.fa-arrow-up-wide-short,.fa-sort-amount-up{--fa:\"\\f161\"}.fa-mill-sign{--fa:\"\\e1ed\"}.fa-bowl-rice{--fa:\"\\e2eb\"}.fa-skull{--fa:\"\\f54c\"}.fa-broadcast-tower,.fa-tower-broadcast{--fa:\"\\f519\"}.fa-truck-pickup{--fa:\"\\f63c\"}.fa-long-arrow-alt-up,.fa-up-long{--fa:\"\\f30c\"}.fa-stop{--fa:\"\\f04d\"}.fa-code-merge{--fa:\"\\f387\"}.fa-upload{--fa:\"\\f093\"}.fa-hurricane{--fa:\"\\f751\"}.fa-mound{--fa:\"\\e52d\"}.fa-toilet-portable{--fa:\"\\e583\"}.fa-compact-disc{--fa:\"\\f51f\"}.fa-file-arrow-down,.fa-file-download{--fa:\"\\f56d\"}.fa-caravan{--fa:\"\\f8ff\"}.fa-shield-cat{--fa:\"\\e572\"}.fa-bolt,.fa-zap{--fa:\"\\f0e7\"}.fa-glass-water{--fa:\"\\e4f4\"}.fa-oil-well{--fa:\"\\e532\"}.fa-vault{--fa:\"\\e2c5\"}.fa-mars{--fa:\"\\f222\"}.fa-toilet{--fa:\"\\f7d8\"}.fa-plane-circle-xmark{--fa:\"\\e557\"}.fa-cny,.fa-jpy,.fa-rmb,.fa-yen,.fa-yen-sign{--fa:\"\\f157\"}.fa-rouble,.fa-rub,.fa-ruble,.fa-ruble-sign{--fa:\"\\f158\"}.fa-sun{--fa:\"\\f185\"}.fa-guitar{--fa:\"\\f7a6\"}.fa-face-laugh-wink,.fa-laugh-wink{--fa:\"\\f59c\"}.fa-horse-head{--fa:\"\\f7ab\"}.fa-bore-hole{--fa:\"\\e4c3\"}.fa-industry{--fa:\"\\f275\"}.fa-arrow-alt-circle-down,.fa-circle-down{--fa:\"\\f358\"}.fa-arrows-turn-to-dots{--fa:\"\\e4c1\"}.fa-florin-sign{--fa:\"\\e184\"}.fa-arrow-down-short-wide,.fa-sort-amount-desc,.fa-sort-amount-down-alt{--fa:\"\\f884\"}.fa-less-than{--fa:\"\\3c\"}.fa-angle-down{--fa:\"\\f107\"}.fa-car-tunnel{--fa:\"\\e4de\"}.fa-head-side-cough{--fa:\"\\e061\"}.fa-grip-lines{--fa:\"\\f7a4\"}.fa-thumbs-down{--fa:\"\\f165\"}.fa-user-lock{--fa:\"\\f502\"}.fa-arrow-right-long,.fa-long-arrow-right{--fa:\"\\f178\"}.fa-anchor-circle-xmark{--fa:\"\\e4ac\"}.fa-ellipsis,.fa-ellipsis-h{--fa:\"\\f141\"}.fa-chess-pawn{--fa:\"\\f443\"}.fa-first-aid,.fa-kit-medical{--fa:\"\\f479\"}.fa-person-through-window{--fa:\"\\e5a9\"}.fa-toolbox{--fa:\"\\f552\"}.fa-hands-holding-circle{--fa:\"\\e4fb\"}.fa-bug{--fa:\"\\f188\"}.fa-credit-card,.fa-credit-card-alt{--fa:\"\\f09d\"}.fa-automobile,.fa-car{--fa:\"\\f1b9\"}.fa-hand-holding-hand{--fa:\"\\e4f7\"}.fa-book-open-reader,.fa-book-reader{--fa:\"\\f5da\"}.fa-mountain-sun{--fa:\"\\e52f\"}.fa-arrows-left-right-to-line{--fa:\"\\e4ba\"}.fa-dice-d20{--fa:\"\\f6cf\"}.fa-truck-droplet{--fa:\"\\e58c\"}.fa-file-circle-xmark{--fa:\"\\e5a1\"}.fa-temperature-arrow-up,.fa-temperature-up{--fa:\"\\e040\"}.fa-medal{--fa:\"\\f5a2\"}.fa-bed{--fa:\"\\f236\"}.fa-h-square,.fa-square-h{--fa:\"\\f0fd\"}.fa-podcast{--fa:\"\\f2ce\"}.fa-temperature-4,.fa-temperature-full,.fa-thermometer-4,.fa-thermometer-full{--fa:\"\\f2c7\"}.fa-bell{--fa:\"\\f0f3\"}.fa-superscript{--fa:\"\\f12b\"}.fa-plug-circle-xmark{--fa:\"\\e560\"}.fa-star-of-life{--fa:\"\\f621\"}.fa-phone-slash{--fa:\"\\f3dd\"}.fa-paint-roller{--fa:\"\\f5aa\"}.fa-hands-helping,.fa-handshake-angle{--fa:\"\\f4c4\"}.fa-location-dot,.fa-map-marker-alt{--fa:\"\\f3c5\"}.fa-file{--fa:\"\\f15b\"}.fa-greater-than{--fa:\"\\3e\"}.fa-person-swimming,.fa-swimmer{--fa:\"\\f5c4\"}.fa-arrow-down{--fa:\"\\f063\"}.fa-droplet,.fa-tint{--fa:\"\\f043\"}.fa-eraser{--fa:\"\\f12d\"}.fa-earth,.fa-earth-america,.fa-earth-americas,.fa-globe-americas{--fa:\"\\f57d\"}.fa-person-burst{--fa:\"\\e53b\"}.fa-dove{--fa:\"\\f4ba\"}.fa-battery-0,.fa-battery-empty{--fa:\"\\f244\"}.fa-socks{--fa:\"\\f696\"}.fa-inbox{--fa:\"\\f01c\"}.fa-section{--fa:\"\\e447\"}.fa-gauge-high,.fa-tachometer-alt,.fa-tachometer-alt-fast{--fa:\"\\f625\"}.fa-envelope-open-text{--fa:\"\\f658\"}.fa-hospital,.fa-hospital-alt,.fa-hospital-wide{--fa:\"\\f0f8\"}.fa-wine-bottle{--fa:\"\\f72f\"}.fa-chess-rook{--fa:\"\\f447\"}.fa-bars-staggered,.fa-reorder,.fa-stream{--fa:\"\\f550\"}.fa-dharmachakra{--fa:\"\\f655\"}.fa-hotdog{--fa:\"\\f80f\"}.fa-blind,.fa-person-walking-with-cane{--fa:\"\\f29d\"}.fa-drum{--fa:\"\\f569\"}.fa-ice-cream{--fa:\"\\f810\"}.fa-heart-circle-bolt{--fa:\"\\e4fc\"}.fa-fax{--fa:\"\\f1ac\"}.fa-paragraph{--fa:\"\\f1dd\"}.fa-check-to-slot,.fa-vote-yea{--fa:\"\\f772\"}.fa-star-half{--fa:\"\\f089\"}.fa-boxes,.fa-boxes-alt,.fa-boxes-stacked{--fa:\"\\f468\"}.fa-chain,.fa-link{--fa:\"\\f0c1\"}.fa-assistive-listening-systems,.fa-ear-listen{--fa:\"\\f2a2\"}.fa-tree-city{--fa:\"\\e587\"}.fa-play{--fa:\"\\f04b\"}.fa-font{--fa:\"\\f031\"}.fa-table-cells-row-lock{--fa:\"\\e67a\"}.fa-rupiah-sign{--fa:\"\\e23d\"}.fa-magnifying-glass,.fa-search{--fa:\"\\f002\"}.fa-ping-pong-paddle-ball,.fa-table-tennis,.fa-table-tennis-paddle-ball{--fa:\"\\f45d\"}.fa-diagnoses,.fa-person-dots-from-line{--fa:\"\\f470\"}.fa-trash-can-arrow-up,.fa-trash-restore-alt{--fa:\"\\f82a\"}.fa-naira-sign{--fa:\"\\e1f6\"}.fa-cart-arrow-down{--fa:\"\\f218\"}.fa-walkie-talkie{--fa:\"\\f8ef\"}.fa-file-edit,.fa-file-pen{--fa:\"\\f31c\"}.fa-receipt{--fa:\"\\f543\"}.fa-pen-square,.fa-pencil-square,.fa-square-pen{--fa:\"\\f14b\"}.fa-suitcase-rolling{--fa:\"\\f5c1\"}.fa-person-circle-exclamation{--fa:\"\\e53f\"}.fa-chevron-down{--fa:\"\\f078\"}.fa-battery,.fa-battery-5,.fa-battery-full{--fa:\"\\f240\"}.fa-skull-crossbones{--fa:\"\\f714\"}.fa-code-compare{--fa:\"\\e13a\"}.fa-list-dots,.fa-list-ul{--fa:\"\\f0ca\"}.fa-school-lock{--fa:\"\\e56f\"}.fa-tower-cell{--fa:\"\\e585\"}.fa-down-long,.fa-long-arrow-alt-down{--fa:\"\\f309\"}.fa-ranking-star{--fa:\"\\e561\"}.fa-chess-king{--fa:\"\\f43f\"}.fa-person-harassing{--fa:\"\\e549\"}.fa-brazilian-real-sign{--fa:\"\\e46c\"}.fa-landmark-alt,.fa-landmark-dome{--fa:\"\\f752\"}.fa-arrow-up{--fa:\"\\f062\"}.fa-television,.fa-tv,.fa-tv-alt{--fa:\"\\f26c\"}.fa-shrimp{--fa:\"\\e448\"}.fa-list-check,.fa-tasks{--fa:\"\\f0ae\"}.fa-jug-detergent{--fa:\"\\e519\"}.fa-circle-user,.fa-user-circle{--fa:\"\\f2bd\"}.fa-user-shield{--fa:\"\\f505\"}.fa-wind{--fa:\"\\f72e\"}.fa-car-burst,.fa-car-crash{--fa:\"\\f5e1\"}.fa-y{--fa:\"\\59\"}.fa-person-snowboarding,.fa-snowboarding{--fa:\"\\f7ce\"}.fa-shipping-fast,.fa-truck-fast{--fa:\"\\f48b\"}.fa-fish{--fa:\"\\f578\"}.fa-user-graduate{--fa:\"\\f501\"}.fa-adjust,.fa-circle-half-stroke{--fa:\"\\f042\"}.fa-clapperboard{--fa:\"\\e131\"}.fa-circle-radiation,.fa-radiation-alt{--fa:\"\\f7ba\"}.fa-baseball,.fa-baseball-ball{--fa:\"\\f433\"}.fa-jet-fighter-up{--fa:\"\\e518\"}.fa-diagram-project,.fa-project-diagram{--fa:\"\\f542\"}.fa-copy{--fa:\"\\f0c5\"}.fa-volume-mute,.fa-volume-times,.fa-volume-xmark{--fa:\"\\f6a9\"}.fa-hand-sparkles{--fa:\"\\e05d\"}.fa-grip,.fa-grip-horizontal{--fa:\"\\f58d\"}.fa-share-from-square,.fa-share-square{--fa:\"\\f14d\"}.fa-child-combatant,.fa-child-rifle{--fa:\"\\e4e0\"}.fa-gun{--fa:\"\\e19b\"}.fa-phone-square,.fa-square-phone{--fa:\"\\f098\"}.fa-add,.fa-plus{--fa:\"\\2b\"}.fa-expand{--fa:\"\\f065\"}.fa-computer{--fa:\"\\e4e5\"}.fa-close,.fa-multiply,.fa-remove,.fa-times,.fa-xmark{--fa:\"\\f00d\"}.fa-arrows,.fa-arrows-up-down-left-right{--fa:\"\\f047\"}.fa-chalkboard-teacher,.fa-chalkboard-user{--fa:\"\\f51c\"}.fa-peso-sign{--fa:\"\\e222\"}.fa-building-shield{--fa:\"\\e4d8\"}.fa-baby{--fa:\"\\f77c\"}.fa-users-line{--fa:\"\\e592\"}.fa-quote-left,.fa-quote-left-alt{--fa:\"\\f10d\"}.fa-tractor{--fa:\"\\f722\"}.fa-trash-arrow-up,.fa-trash-restore{--fa:\"\\f829\"}.fa-arrow-down-up-lock{--fa:\"\\e4b0\"}.fa-lines-leaning{--fa:\"\\e51e\"}.fa-ruler-combined{--fa:\"\\f546\"}.fa-copyright{--fa:\"\\f1f9\"}.fa-equals{--fa:\"\\3d\"}.fa-blender{--fa:\"\\f517\"}.fa-teeth{--fa:\"\\f62e\"}.fa-ils,.fa-shekel,.fa-shekel-sign,.fa-sheqel,.fa-sheqel-sign{--fa:\"\\f20b\"}.fa-map{--fa:\"\\f279\"}.fa-rocket{--fa:\"\\f135\"}.fa-photo-film,.fa-photo-video{--fa:\"\\f87c\"}.fa-folder-minus{--fa:\"\\f65d\"}.fa-hexagon-nodes-bolt{--fa:\"\\e69a\"}.fa-store{--fa:\"\\f54e\"}.fa-arrow-trend-up{--fa:\"\\e098\"}.fa-plug-circle-minus{--fa:\"\\e55e\"}.fa-sign,.fa-sign-hanging{--fa:\"\\f4d9\"}.fa-bezier-curve{--fa:\"\\f55b\"}.fa-bell-slash{--fa:\"\\f1f6\"}.fa-tablet,.fa-tablet-android{--fa:\"\\f3fb\"}.fa-school-flag{--fa:\"\\e56e\"}.fa-fill{--fa:\"\\f575\"}.fa-angle-up{--fa:\"\\f106\"}.fa-drumstick-bite{--fa:\"\\f6d7\"}.fa-holly-berry{--fa:\"\\f7aa\"}.fa-chevron-left{--fa:\"\\f053\"}.fa-bacteria{--fa:\"\\e059\"}.fa-hand-lizard{--fa:\"\\f258\"}.fa-notdef{--fa:\"\\e1fe\"}.fa-disease{--fa:\"\\f7fa\"}.fa-briefcase-medical{--fa:\"\\f469\"}.fa-genderless{--fa:\"\\f22d\"}.fa-chevron-right{--fa:\"\\f054\"}.fa-retweet{--fa:\"\\f079\"}.fa-car-alt,.fa-car-rear{--fa:\"\\f5de\"}.fa-pump-soap{--fa:\"\\e06b\"}.fa-video-slash{--fa:\"\\f4e2\"}.fa-battery-2,.fa-battery-quarter{--fa:\"\\f243\"}.fa-radio{--fa:\"\\f8d7\"}.fa-baby-carriage,.fa-carriage-baby{--fa:\"\\f77d\"}.fa-traffic-light{--fa:\"\\f637\"}.fa-thermometer{--fa:\"\\f491\"}.fa-vr-cardboard{--fa:\"\\f729\"}.fa-hand-middle-finger{--fa:\"\\f806\"}.fa-percent,.fa-percentage{--fa:\"\\25\"}.fa-truck-moving{--fa:\"\\f4df\"}.fa-glass-water-droplet{--fa:\"\\e4f5\"}.fa-display{--fa:\"\\e163\"}.fa-face-smile,.fa-smile{--fa:\"\\f118\"}.fa-thumb-tack,.fa-thumbtack{--fa:\"\\f08d\"}.fa-trophy{--fa:\"\\f091\"}.fa-person-praying,.fa-pray{--fa:\"\\f683\"}.fa-hammer{--fa:\"\\f6e3\"}.fa-hand-peace{--fa:\"\\f25b\"}.fa-rotate,.fa-sync-alt{--fa:\"\\f2f1\"}.fa-spinner{--fa:\"\\f110\"}.fa-robot{--fa:\"\\f544\"}.fa-peace{--fa:\"\\f67c\"}.fa-cogs,.fa-gears{--fa:\"\\f085\"}.fa-warehouse{--fa:\"\\f494\"}.fa-arrow-up-right-dots{--fa:\"\\e4b7\"}.fa-splotch{--fa:\"\\f5bc\"}.fa-face-grin-hearts,.fa-grin-hearts{--fa:\"\\f584\"}.fa-dice-four{--fa:\"\\f524\"}.fa-sim-card{--fa:\"\\f7c4\"}.fa-transgender,.fa-transgender-alt{--fa:\"\\f225\"}.fa-mercury{--fa:\"\\f223\"}.fa-arrow-turn-down,.fa-level-down{--fa:\"\\f149\"}.fa-person-falling-burst{--fa:\"\\e547\"}.fa-award{--fa:\"\\f559\"}.fa-ticket-alt,.fa-ticket-simple{--fa:\"\\f3ff\"}.fa-building{--fa:\"\\f1ad\"}.fa-angle-double-left,.fa-angles-left{--fa:\"\\f100\"}.fa-qrcode{--fa:\"\\f029\"}.fa-clock-rotate-left,.fa-history{--fa:\"\\f1da\"}.fa-face-grin-beam-sweat,.fa-grin-beam-sweat{--fa:\"\\f583\"}.fa-arrow-right-from-file,.fa-file-export{--fa:\"\\f56e\"}.fa-shield,.fa-shield-blank{--fa:\"\\f132\"}.fa-arrow-up-short-wide,.fa-sort-amount-up-alt{--fa:\"\\f885\"}.fa-comment-nodes{--fa:\"\\e696\"}.fa-house-medical{--fa:\"\\e3b2\"}.fa-golf-ball,.fa-golf-ball-tee{--fa:\"\\f450\"}.fa-chevron-circle-left,.fa-circle-chevron-left{--fa:\"\\f137\"}.fa-house-chimney-window{--fa:\"\\e00d\"}.fa-pen-nib{--fa:\"\\f5ad\"}.fa-tent-arrow-turn-left{--fa:\"\\e580\"}.fa-tents{--fa:\"\\e582\"}.fa-magic,.fa-wand-magic{--fa:\"\\f0d0\"}.fa-dog{--fa:\"\\f6d3\"}.fa-carrot{--fa:\"\\f787\"}.fa-moon{--fa:\"\\f186\"}.fa-wine-glass-alt,.fa-wine-glass-empty{--fa:\"\\f5ce\"}.fa-cheese{--fa:\"\\f7ef\"}.fa-yin-yang{--fa:\"\\f6ad\"}.fa-music{--fa:\"\\f001\"}.fa-code-commit{--fa:\"\\f386\"}.fa-temperature-low{--fa:\"\\f76b\"}.fa-biking,.fa-person-biking{--fa:\"\\f84a\"}.fa-broom{--fa:\"\\f51a\"}.fa-shield-heart{--fa:\"\\e574\"}.fa-gopuram{--fa:\"\\f664\"}.fa-earth-oceania,.fa-globe-oceania{--fa:\"\\e47b\"}.fa-square-xmark,.fa-times-square,.fa-xmark-square{--fa:\"\\f2d3\"}.fa-hashtag{--fa:\"\\23\"}.fa-expand-alt,.fa-up-right-and-down-left-from-center{--fa:\"\\f424\"}.fa-oil-can{--fa:\"\\f613\"}.fa-t{--fa:\"\\54\"}.fa-hippo{--fa:\"\\f6ed\"}.fa-chart-column{--fa:\"\\e0e3\"}.fa-infinity{--fa:\"\\f534\"}.fa-vial-circle-check{--fa:\"\\e596\"}.fa-person-arrow-down-to-line{--fa:\"\\e538\"}.fa-voicemail{--fa:\"\\f897\"}.fa-fan{--fa:\"\\f863\"}.fa-person-walking-luggage{--fa:\"\\e554\"}.fa-arrows-alt-v,.fa-up-down{--fa:\"\\f338\"}.fa-cloud-moon-rain{--fa:\"\\f73c\"}.fa-calendar{--fa:\"\\f133\"}.fa-trailer{--fa:\"\\e041\"}.fa-bahai,.fa-haykal{--fa:\"\\f666\"}.fa-sd-card{--fa:\"\\f7c2\"}.fa-dragon{--fa:\"\\f6d5\"}.fa-shoe-prints{--fa:\"\\f54b\"}.fa-circle-plus,.fa-plus-circle{--fa:\"\\f055\"}.fa-face-grin-tongue-wink,.fa-grin-tongue-wink{--fa:\"\\f58b\"}.fa-hand-holding{--fa:\"\\f4bd\"}.fa-plug-circle-exclamation{--fa:\"\\e55d\"}.fa-chain-broken,.fa-chain-slash,.fa-link-slash,.fa-unlink{--fa:\"\\f127\"}.fa-clone{--fa:\"\\f24d\"}.fa-person-walking-arrow-loop-left{--fa:\"\\e551\"}.fa-arrow-up-z-a,.fa-sort-alpha-up-alt{--fa:\"\\f882\"}.fa-fire-alt,.fa-fire-flame-curved{--fa:\"\\f7e4\"}.fa-tornado{--fa:\"\\f76f\"}.fa-file-circle-plus{--fa:\"\\e494\"}.fa-book-quran,.fa-quran{--fa:\"\\f687\"}.fa-anchor{--fa:\"\\f13d\"}.fa-border-all{--fa:\"\\f84c\"}.fa-angry,.fa-face-angry{--fa:\"\\f556\"}.fa-cookie-bite{--fa:\"\\f564\"}.fa-arrow-trend-down{--fa:\"\\e097\"}.fa-feed,.fa-rss{--fa:\"\\f09e\"}.fa-draw-polygon{--fa:\"\\f5ee\"}.fa-balance-scale,.fa-scale-balanced{--fa:\"\\f24e\"}.fa-gauge-simple-high,.fa-tachometer,.fa-tachometer-fast{--fa:\"\\f62a\"}.fa-shower{--fa:\"\\f2cc\"}.fa-desktop,.fa-desktop-alt{--fa:\"\\f390\"}.fa-m{--fa:\"\\4d\"}.fa-table-list,.fa-th-list{--fa:\"\\f00b\"}.fa-comment-sms,.fa-sms{--fa:\"\\f7cd\"}.fa-book{--fa:\"\\f02d\"}.fa-user-plus{--fa:\"\\f234\"}.fa-check{--fa:\"\\f00c\"}.fa-battery-4,.fa-battery-three-quarters{--fa:\"\\f241\"}.fa-house-circle-check{--fa:\"\\e509\"}.fa-angle-left{--fa:\"\\f104\"}.fa-diagram-successor{--fa:\"\\e47a\"}.fa-truck-arrow-right{--fa:\"\\e58b\"}.fa-arrows-split-up-and-left{--fa:\"\\e4bc\"}.fa-fist-raised,.fa-hand-fist{--fa:\"\\f6de\"}.fa-cloud-moon{--fa:\"\\f6c3\"}.fa-briefcase{--fa:\"\\f0b1\"}.fa-person-falling{--fa:\"\\e546\"}.fa-image-portrait,.fa-portrait{--fa:\"\\f3e0\"}.fa-user-tag{--fa:\"\\f507\"}.fa-rug{--fa:\"\\e569\"}.fa-earth-europe,.fa-globe-europe{--fa:\"\\f7a2\"}.fa-cart-flatbed-suitcase,.fa-luggage-cart{--fa:\"\\f59d\"}.fa-rectangle-times,.fa-rectangle-xmark,.fa-times-rectangle,.fa-window-close{--fa:\"\\f410\"}.fa-baht-sign{--fa:\"\\e0ac\"}.fa-book-open{--fa:\"\\f518\"}.fa-book-journal-whills,.fa-journal-whills{--fa:\"\\f66a\"}.fa-handcuffs{--fa:\"\\e4f8\"}.fa-exclamation-triangle,.fa-triangle-exclamation,.fa-warning{--fa:\"\\f071\"}.fa-database{--fa:\"\\f1c0\"}.fa-mail-forward,.fa-share{--fa:\"\\f064\"}.fa-bottle-droplet{--fa:\"\\e4c4\"}.fa-mask-face{--fa:\"\\e1d7\"}.fa-hill-rockslide{--fa:\"\\e508\"}.fa-exchange-alt,.fa-right-left{--fa:\"\\f362\"}.fa-paper-plane{--fa:\"\\f1d8\"}.fa-road-circle-exclamation{--fa:\"\\e565\"}.fa-dungeon{--fa:\"\\f6d9\"}.fa-align-right{--fa:\"\\f038\"}.fa-money-bill-1-wave,.fa-money-bill-wave-alt{--fa:\"\\f53b\"}.fa-life-ring{--fa:\"\\f1cd\"}.fa-hands,.fa-sign-language,.fa-signing{--fa:\"\\f2a7\"}.fa-calendar-day{--fa:\"\\f783\"}.fa-ladder-water,.fa-swimming-pool,.fa-water-ladder{--fa:\"\\f5c5\"}.fa-arrows-up-down,.fa-arrows-v{--fa:\"\\f07d\"}.fa-face-grimace,.fa-grimace{--fa:\"\\f57f\"}.fa-wheelchair-alt,.fa-wheelchair-move{--fa:\"\\e2ce\"}.fa-level-down-alt,.fa-turn-down{--fa:\"\\f3be\"}.fa-person-walking-arrow-right{--fa:\"\\e552\"}.fa-envelope-square,.fa-square-envelope{--fa:\"\\f199\"}.fa-dice{--fa:\"\\f522\"}.fa-bowling-ball{--fa:\"\\f436\"}.fa-brain{--fa:\"\\f5dc\"}.fa-band-aid,.fa-bandage{--fa:\"\\f462\"}.fa-calendar-minus{--fa:\"\\f272\"}.fa-circle-xmark,.fa-times-circle,.fa-xmark-circle{--fa:\"\\f057\"}.fa-gifts{--fa:\"\\f79c\"}.fa-hotel{--fa:\"\\f594\"}.fa-earth-asia,.fa-globe-asia{--fa:\"\\f57e\"}.fa-id-card-alt,.fa-id-card-clip{--fa:\"\\f47f\"}.fa-magnifying-glass-plus,.fa-search-plus{--fa:\"\\f00e\"}.fa-thumbs-up{--fa:\"\\f164\"}.fa-user-clock{--fa:\"\\f4fd\"}.fa-allergies,.fa-hand-dots{--fa:\"\\f461\"}.fa-file-invoice{--fa:\"\\f570\"}.fa-window-minimize{--fa:\"\\f2d1\"}.fa-coffee,.fa-mug-saucer{--fa:\"\\f0f4\"}.fa-brush{--fa:\"\\f55d\"}.fa-file-half-dashed{--fa:\"\\e698\"}.fa-mask{--fa:\"\\f6fa\"}.fa-magnifying-glass-minus,.fa-search-minus{--fa:\"\\f010\"}.fa-ruler-vertical{--fa:\"\\f548\"}.fa-user-alt,.fa-user-large{--fa:\"\\f406\"}.fa-train-tram{--fa:\"\\e5b4\"}.fa-user-nurse{--fa:\"\\f82f\"}.fa-syringe{--fa:\"\\f48e\"}.fa-cloud-sun{--fa:\"\\f6c4\"}.fa-stopwatch-20{--fa:\"\\e06f\"}.fa-square-full{--fa:\"\\f45c\"}.fa-magnet{--fa:\"\\f076\"}.fa-jar{--fa:\"\\e516\"}.fa-note-sticky,.fa-sticky-note{--fa:\"\\f249\"}.fa-bug-slash{--fa:\"\\e490\"}.fa-arrow-up-from-water-pump{--fa:\"\\e4b6\"}.fa-bone{--fa:\"\\f5d7\"}.fa-table-cells-row-unlock{--fa:\"\\e691\"}.fa-user-injured{--fa:\"\\f728\"}.fa-face-sad-tear,.fa-sad-tear{--fa:\"\\f5b4\"}.fa-plane{--fa:\"\\f072\"}.fa-tent-arrows-down{--fa:\"\\e581\"}.fa-exclamation{--fa:\"\\21\"}.fa-arrows-spin{--fa:\"\\e4bb\"}.fa-print{--fa:\"\\f02f\"}.fa-try,.fa-turkish-lira,.fa-turkish-lira-sign{--fa:\"\\e2bb\"}.fa-dollar,.fa-dollar-sign,.fa-usd{--fa:\"\\24\"}.fa-x{--fa:\"\\58\"}.fa-magnifying-glass-dollar,.fa-search-dollar{--fa:\"\\f688\"}.fa-users-cog,.fa-users-gear{--fa:\"\\f509\"}.fa-person-military-pointing{--fa:\"\\e54a\"}.fa-bank,.fa-building-columns,.fa-institution,.fa-museum,.fa-university{--fa:\"\\f19c\"}.fa-umbrella{--fa:\"\\f0e9\"}.fa-trowel{--fa:\"\\e589\"}.fa-d{--fa:\"\\44\"}.fa-stapler{--fa:\"\\e5af\"}.fa-masks-theater,.fa-theater-masks{--fa:\"\\f630\"}.fa-kip-sign{--fa:\"\\e1c4\"}.fa-hand-point-left{--fa:\"\\f0a5\"}.fa-handshake-alt,.fa-handshake-simple{--fa:\"\\f4c6\"}.fa-fighter-jet,.fa-jet-fighter{--fa:\"\\f0fb\"}.fa-share-alt-square,.fa-square-share-nodes{--fa:\"\\f1e1\"}.fa-barcode{--fa:\"\\f02a\"}.fa-plus-minus{--fa:\"\\e43c\"}.fa-video,.fa-video-camera{--fa:\"\\f03d\"}.fa-graduation-cap,.fa-mortar-board{--fa:\"\\f19d\"}.fa-hand-holding-medical{--fa:\"\\e05c\"}.fa-person-circle-check{--fa:\"\\e53e\"}.fa-level-up-alt,.fa-turn-up{--fa:\"\\f3bf\"}\n.fa-sr-only,.fa-sr-only-focusable:not(:focus),.sr-only,.sr-only-focusable:not(:focus){position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}:host,:root{--fa-style-family-brands:\"Font Awesome 6 Brands\";--fa-font-brands:normal 400 1em/1 \"Font Awesome 6 Brands\"}@font-face{font-family:\"Font Awesome 6 Brands\";font-style:normal;font-weight:400;font-display:block;src:url(../webfonts/fa-brands-400.woff2) format(\"woff2\"),url(../webfonts/fa-brands-400.ttf) format(\"truetype\")}.fa-brands,.fab{font-weight:400}.fa-monero{--fa:\"\\f3d0\"}.fa-hooli{--fa:\"\\f427\"}.fa-yelp{--fa:\"\\f1e9\"}.fa-cc-visa{--fa:\"\\f1f0\"}.fa-lastfm{--fa:\"\\f202\"}.fa-shopware{--fa:\"\\f5b5\"}.fa-creative-commons-nc{--fa:\"\\f4e8\"}.fa-aws{--fa:\"\\f375\"}.fa-redhat{--fa:\"\\f7bc\"}.fa-yoast{--fa:\"\\f2b1\"}.fa-cloudflare{--fa:\"\\e07d\"}.fa-ups{--fa:\"\\f7e0\"}.fa-pixiv{--fa:\"\\e640\"}.fa-wpexplorer{--fa:\"\\f2de\"}.fa-dyalog{--fa:\"\\f399\"}.fa-bity{--fa:\"\\f37a\"}.fa-stackpath{--fa:\"\\f842\"}.fa-buysellads{--fa:\"\\f20d\"}.fa-first-order{--fa:\"\\f2b0\"}.fa-modx{--fa:\"\\f285\"}.fa-guilded{--fa:\"\\e07e\"}.fa-vnv{--fa:\"\\f40b\"}.fa-js-square,.fa-square-js{--fa:\"\\f3b9\"}.fa-microsoft{--fa:\"\\f3ca\"}.fa-qq{--fa:\"\\f1d6\"}.fa-orcid{--fa:\"\\f8d2\"}.fa-java{--fa:\"\\f4e4\"}.fa-invision{--fa:\"\\f7b0\"}.fa-creative-commons-pd-alt{--fa:\"\\f4ed\"}.fa-centercode{--fa:\"\\f380\"}.fa-glide-g{--fa:\"\\f2a6\"}.fa-drupal{--fa:\"\\f1a9\"}.fa-jxl{--fa:\"\\e67b\"}.fa-dart-lang{--fa:\"\\e693\"}.fa-hire-a-helper{--fa:\"\\f3b0\"}.fa-creative-commons-by{--fa:\"\\f4e7\"}.fa-unity{--fa:\"\\e049\"}.fa-whmcs{--fa:\"\\f40d\"}.fa-rocketchat{--fa:\"\\f3e8\"}.fa-vk{--fa:\"\\f189\"}.fa-untappd{--fa:\"\\f405\"}.fa-mailchimp{--fa:\"\\f59e\"}.fa-css3-alt{--fa:\"\\f38b\"}.fa-reddit-square,.fa-square-reddit{--fa:\"\\f1a2\"}.fa-vimeo-v{--fa:\"\\f27d\"}.fa-contao{--fa:\"\\f26d\"}.fa-square-font-awesome{--fa:\"\\e5ad\"}.fa-deskpro{--fa:\"\\f38f\"}.fa-brave{--fa:\"\\e63c\"}.fa-sistrix{--fa:\"\\f3ee\"}.fa-instagram-square,.fa-square-instagram{--fa:\"\\e055\"}.fa-battle-net{--fa:\"\\f835\"}.fa-the-red-yeti{--fa:\"\\f69d\"}.fa-hacker-news-square,.fa-square-hacker-news{--fa:\"\\f3af\"}.fa-edge{--fa:\"\\f282\"}.fa-threads{--fa:\"\\e618\"}.fa-napster{--fa:\"\\f3d2\"}.fa-snapchat-square,.fa-square-snapchat{--fa:\"\\f2ad\"}.fa-google-plus-g{--fa:\"\\f0d5\"}.fa-artstation{--fa:\"\\f77a\"}.fa-markdown{--fa:\"\\f60f\"}.fa-sourcetree{--fa:\"\\f7d3\"}.fa-google-plus{--fa:\"\\f2b3\"}.fa-diaspora{--fa:\"\\f791\"}.fa-foursquare{--fa:\"\\f180\"}.fa-stack-overflow{--fa:\"\\f16c\"}.fa-github-alt{--fa:\"\\f113\"}.fa-phoenix-squadron{--fa:\"\\f511\"}.fa-pagelines{--fa:\"\\f18c\"}.fa-algolia{--fa:\"\\f36c\"}.fa-red-river{--fa:\"\\f3e3\"}.fa-creative-commons-sa{--fa:\"\\f4ef\"}.fa-safari{--fa:\"\\f267\"}.fa-google{--fa:\"\\f1a0\"}.fa-font-awesome-alt,.fa-square-font-awesome-stroke{--fa:\"\\f35c\"}.fa-atlassian{--fa:\"\\f77b\"}.fa-linkedin-in{--fa:\"\\f0e1\"}.fa-digital-ocean{--fa:\"\\f391\"}.fa-nimblr{--fa:\"\\f5a8\"}.fa-chromecast{--fa:\"\\f838\"}.fa-evernote{--fa:\"\\f839\"}.fa-hacker-news{--fa:\"\\f1d4\"}.fa-creative-commons-sampling{--fa:\"\\f4f0\"}.fa-adversal{--fa:\"\\f36a\"}.fa-creative-commons{--fa:\"\\f25e\"}.fa-watchman-monitoring{--fa:\"\\e087\"}.fa-fonticons{--fa:\"\\f280\"}.fa-weixin{--fa:\"\\f1d7\"}.fa-shirtsinbulk{--fa:\"\\f214\"}.fa-codepen{--fa:\"\\f1cb\"}.fa-git-alt{--fa:\"\\f841\"}.fa-lyft{--fa:\"\\f3c3\"}.fa-rev{--fa:\"\\f5b2\"}.fa-windows{--fa:\"\\f17a\"}.fa-wizards-of-the-coast{--fa:\"\\f730\"}.fa-square-viadeo,.fa-viadeo-square{--fa:\"\\f2aa\"}.fa-meetup{--fa:\"\\f2e0\"}.fa-centos{--fa:\"\\f789\"}.fa-adn{--fa:\"\\f170\"}.fa-cloudsmith{--fa:\"\\f384\"}.fa-opensuse{--fa:\"\\e62b\"}.fa-pied-piper-alt{--fa:\"\\f1a8\"}.fa-dribbble-square,.fa-square-dribbble{--fa:\"\\f397\"}.fa-codiepie{--fa:\"\\f284\"}.fa-node{--fa:\"\\f419\"}.fa-mix{--fa:\"\\f3cb\"}.fa-steam{--fa:\"\\f1b6\"}.fa-cc-apple-pay{--fa:\"\\f416\"}.fa-scribd{--fa:\"\\f28a\"}.fa-debian{--fa:\"\\e60b\"}.fa-openid{--fa:\"\\f19b\"}.fa-instalod{--fa:\"\\e081\"}.fa-files-pinwheel{--fa:\"\\e69f\"}.fa-expeditedssl{--fa:\"\\f23e\"}.fa-sellcast{--fa:\"\\f2da\"}.fa-square-twitter,.fa-twitter-square{--fa:\"\\f081\"}.fa-r-project{--fa:\"\\f4f7\"}.fa-delicious{--fa:\"\\f1a5\"}.fa-freebsd{--fa:\"\\f3a4\"}.fa-vuejs{--fa:\"\\f41f\"}.fa-accusoft{--fa:\"\\f369\"}.fa-ioxhost{--fa:\"\\f208\"}.fa-fonticons-fi{--fa:\"\\f3a2\"}.fa-app-store{--fa:\"\\f36f\"}.fa-cc-mastercard{--fa:\"\\f1f1\"}.fa-itunes-note{--fa:\"\\f3b5\"}.fa-golang{--fa:\"\\e40f\"}.fa-kickstarter,.fa-square-kickstarter{--fa:\"\\f3bb\"}.fa-grav{--fa:\"\\f2d6\"}.fa-weibo{--fa:\"\\f18a\"}.fa-uncharted{--fa:\"\\e084\"}.fa-firstdraft{--fa:\"\\f3a1\"}.fa-square-youtube,.fa-youtube-square{--fa:\"\\f431\"}.fa-wikipedia-w{--fa:\"\\f266\"}.fa-rendact,.fa-wpressr{--fa:\"\\f3e4\"}.fa-angellist{--fa:\"\\f209\"}.fa-galactic-republic{--fa:\"\\f50c\"}.fa-nfc-directional{--fa:\"\\e530\"}.fa-skype{--fa:\"\\f17e\"}.fa-joget{--fa:\"\\f3b7\"}.fa-fedora{--fa:\"\\f798\"}.fa-stripe-s{--fa:\"\\f42a\"}.fa-meta{--fa:\"\\e49b\"}.fa-laravel{--fa:\"\\f3bd\"}.fa-hotjar{--fa:\"\\f3b1\"}.fa-bluetooth-b{--fa:\"\\f294\"}.fa-square-letterboxd{--fa:\"\\e62e\"}.fa-sticker-mule{--fa:\"\\f3f7\"}.fa-creative-commons-zero{--fa:\"\\f4f3\"}.fa-hips{--fa:\"\\f452\"}.fa-css{--fa:\"\\e6a2\"}.fa-behance{--fa:\"\\f1b4\"}.fa-reddit{--fa:\"\\f1a1\"}.fa-discord{--fa:\"\\f392\"}.fa-chrome{--fa:\"\\f268\"}.fa-app-store-ios{--fa:\"\\f370\"}.fa-cc-discover{--fa:\"\\f1f2\"}.fa-wpbeginner{--fa:\"\\f297\"}.fa-confluence{--fa:\"\\f78d\"}.fa-shoelace{--fa:\"\\e60c\"}.fa-mdb{--fa:\"\\f8ca\"}.fa-dochub{--fa:\"\\f394\"}.fa-accessible-icon{--fa:\"\\f368\"}.fa-ebay{--fa:\"\\f4f4\"}.fa-amazon{--fa:\"\\f270\"}.fa-unsplash{--fa:\"\\e07c\"}.fa-yarn{--fa:\"\\f7e3\"}.fa-square-steam,.fa-steam-square{--fa:\"\\f1b7\"}.fa-500px{--fa:\"\\f26e\"}.fa-square-vimeo,.fa-vimeo-square{--fa:\"\\f194\"}.fa-asymmetrik{--fa:\"\\f372\"}.fa-font-awesome,.fa-font-awesome-flag,.fa-font-awesome-logo-full{--fa:\"\\f2b4\"}.fa-gratipay{--fa:\"\\f184\"}.fa-apple{--fa:\"\\f179\"}.fa-hive{--fa:\"\\e07f\"}.fa-gitkraken{--fa:\"\\f3a6\"}.fa-keybase{--fa:\"\\f4f5\"}.fa-apple-pay{--fa:\"\\f415\"}.fa-padlet{--fa:\"\\e4a0\"}.fa-amazon-pay{--fa:\"\\f42c\"}.fa-github-square,.fa-square-github{--fa:\"\\f092\"}.fa-stumbleupon{--fa:\"\\f1a4\"}.fa-fedex{--fa:\"\\f797\"}.fa-phoenix-framework{--fa:\"\\f3dc\"}.fa-shopify{--fa:\"\\e057\"}.fa-neos{--fa:\"\\f612\"}.fa-square-threads{--fa:\"\\e619\"}.fa-hackerrank{--fa:\"\\f5f7\"}.fa-researchgate{--fa:\"\\f4f8\"}.fa-swift{--fa:\"\\f8e1\"}.fa-angular{--fa:\"\\f420\"}.fa-speakap{--fa:\"\\f3f3\"}.fa-angrycreative{--fa:\"\\f36e\"}.fa-y-combinator{--fa:\"\\f23b\"}.fa-empire{--fa:\"\\f1d1\"}.fa-envira{--fa:\"\\f299\"}.fa-google-scholar{--fa:\"\\e63b\"}.fa-gitlab-square,.fa-square-gitlab{--fa:\"\\e5ae\"}.fa-studiovinari{--fa:\"\\f3f8\"}.fa-pied-piper{--fa:\"\\f2ae\"}.fa-wordpress{--fa:\"\\f19a\"}.fa-product-hunt{--fa:\"\\f288\"}.fa-firefox{--fa:\"\\f269\"}.fa-linode{--fa:\"\\f2b8\"}.fa-goodreads{--fa:\"\\f3a8\"}.fa-odnoklassniki-square,.fa-square-odnoklassniki{--fa:\"\\f264\"}.fa-jsfiddle{--fa:\"\\f1cc\"}.fa-sith{--fa:\"\\f512\"}.fa-themeisle{--fa:\"\\f2b2\"}.fa-page4{--fa:\"\\f3d7\"}.fa-hashnode{--fa:\"\\e499\"}.fa-react{--fa:\"\\f41b\"}.fa-cc-paypal{--fa:\"\\f1f4\"}.fa-squarespace{--fa:\"\\f5be\"}.fa-cc-stripe{--fa:\"\\f1f5\"}.fa-creative-commons-share{--fa:\"\\f4f2\"}.fa-bitcoin{--fa:\"\\f379\"}.fa-keycdn{--fa:\"\\f3ba\"}.fa-opera{--fa:\"\\f26a\"}.fa-itch-io{--fa:\"\\f83a\"}.fa-umbraco{--fa:\"\\f8e8\"}.fa-galactic-senate{--fa:\"\\f50d\"}.fa-ubuntu{--fa:\"\\f7df\"}.fa-draft2digital{--fa:\"\\f396\"}.fa-stripe{--fa:\"\\f429\"}.fa-houzz{--fa:\"\\f27c\"}.fa-gg{--fa:\"\\f260\"}.fa-dhl{--fa:\"\\f790\"}.fa-pinterest-square,.fa-square-pinterest{--fa:\"\\f0d3\"}.fa-xing{--fa:\"\\f168\"}.fa-blackberry{--fa:\"\\f37b\"}.fa-creative-commons-pd{--fa:\"\\f4ec\"}.fa-playstation{--fa:\"\\f3df\"}.fa-quinscape{--fa:\"\\f459\"}.fa-less{--fa:\"\\f41d\"}.fa-blogger-b{--fa:\"\\f37d\"}.fa-opencart{--fa:\"\\f23d\"}.fa-vine{--fa:\"\\f1ca\"}.fa-signal-messenger{--fa:\"\\e663\"}.fa-paypal{--fa:\"\\f1ed\"}.fa-gitlab{--fa:\"\\f296\"}.fa-typo3{--fa:\"\\f42b\"}.fa-reddit-alien{--fa:\"\\f281\"}.fa-yahoo{--fa:\"\\f19e\"}.fa-dailymotion{--fa:\"\\e052\"}.fa-affiliatetheme{--fa:\"\\f36b\"}.fa-pied-piper-pp{--fa:\"\\f1a7\"}.fa-bootstrap{--fa:\"\\f836\"}.fa-odnoklassniki{--fa:\"\\f263\"}.fa-nfc-symbol{--fa:\"\\e531\"}.fa-mintbit{--fa:\"\\e62f\"}.fa-ethereum{--fa:\"\\f42e\"}.fa-speaker-deck{--fa:\"\\f83c\"}.fa-creative-commons-nc-eu{--fa:\"\\f4e9\"}.fa-patreon{--fa:\"\\f3d9\"}.fa-avianex{--fa:\"\\f374\"}.fa-ello{--fa:\"\\f5f1\"}.fa-gofore{--fa:\"\\f3a7\"}.fa-bimobject{--fa:\"\\f378\"}.fa-brave-reverse{--fa:\"\\e63d\"}.fa-facebook-f{--fa:\"\\f39e\"}.fa-google-plus-square,.fa-square-google-plus{--fa:\"\\f0d4\"}.fa-web-awesome{--fa:\"\\e682\"}.fa-mandalorian{--fa:\"\\f50f\"}.fa-first-order-alt{--fa:\"\\f50a\"}.fa-osi{--fa:\"\\f41a\"}.fa-google-wallet{--fa:\"\\f1ee\"}.fa-d-and-d-beyond{--fa:\"\\f6ca\"}.fa-periscope{--fa:\"\\f3da\"}.fa-fulcrum{--fa:\"\\f50b\"}.fa-cloudscale{--fa:\"\\f383\"}.fa-forumbee{--fa:\"\\f211\"}.fa-mizuni{--fa:\"\\f3cc\"}.fa-schlix{--fa:\"\\f3ea\"}.fa-square-xing,.fa-xing-square{--fa:\"\\f169\"}.fa-bandcamp{--fa:\"\\f2d5\"}.fa-wpforms{--fa:\"\\f298\"}.fa-cloudversify{--fa:\"\\f385\"}.fa-usps{--fa:\"\\f7e1\"}.fa-megaport{--fa:\"\\f5a3\"}.fa-magento{--fa:\"\\f3c4\"}.fa-spotify{--fa:\"\\f1bc\"}.fa-optin-monster{--fa:\"\\f23c\"}.fa-fly{--fa:\"\\f417\"}.fa-square-bluesky{--fa:\"\\e6a3\"}.fa-aviato{--fa:\"\\f421\"}.fa-itunes{--fa:\"\\f3b4\"}.fa-cuttlefish{--fa:\"\\f38c\"}.fa-blogger{--fa:\"\\f37c\"}.fa-flickr{--fa:\"\\f16e\"}.fa-viber{--fa:\"\\f409\"}.fa-soundcloud{--fa:\"\\f1be\"}.fa-digg{--fa:\"\\f1a6\"}.fa-tencent-weibo{--fa:\"\\f1d5\"}.fa-letterboxd{--fa:\"\\e62d\"}.fa-symfony{--fa:\"\\f83d\"}.fa-maxcdn{--fa:\"\\f136\"}.fa-etsy{--fa:\"\\f2d7\"}.fa-facebook-messenger{--fa:\"\\f39f\"}.fa-audible{--fa:\"\\f373\"}.fa-think-peaks{--fa:\"\\f731\"}.fa-bilibili{--fa:\"\\e3d9\"}.fa-erlang{--fa:\"\\f39d\"}.fa-x-twitter{--fa:\"\\e61b\"}.fa-cotton-bureau{--fa:\"\\f89e\"}.fa-dashcube{--fa:\"\\f210\"}.fa-42-group,.fa-innosoft{--fa:\"\\e080\"}.fa-stack-exchange{--fa:\"\\f18d\"}.fa-elementor{--fa:\"\\f430\"}.fa-pied-piper-square,.fa-square-pied-piper{--fa:\"\\e01e\"}.fa-creative-commons-nd{--fa:\"\\f4eb\"}.fa-palfed{--fa:\"\\f3d8\"}.fa-superpowers{--fa:\"\\f2dd\"}.fa-resolving{--fa:\"\\f3e7\"}.fa-xbox{--fa:\"\\f412\"}.fa-square-web-awesome-stroke{--fa:\"\\e684\"}.fa-searchengin{--fa:\"\\f3eb\"}.fa-tiktok{--fa:\"\\e07b\"}.fa-facebook-square,.fa-square-facebook{--fa:\"\\f082\"}.fa-renren{--fa:\"\\f18b\"}.fa-linux{--fa:\"\\f17c\"}.fa-glide{--fa:\"\\f2a5\"}.fa-linkedin{--fa:\"\\f08c\"}.fa-hubspot{--fa:\"\\f3b2\"}.fa-deploydog{--fa:\"\\f38e\"}.fa-twitch{--fa:\"\\f1e8\"}.fa-flutter{--fa:\"\\e694\"}.fa-ravelry{--fa:\"\\f2d9\"}.fa-mixer{--fa:\"\\e056\"}.fa-lastfm-square,.fa-square-lastfm{--fa:\"\\f203\"}.fa-vimeo{--fa:\"\\f40a\"}.fa-mendeley{--fa:\"\\f7b3\"}.fa-uniregistry{--fa:\"\\f404\"}.fa-figma{--fa:\"\\f799\"}.fa-creative-commons-remix{--fa:\"\\f4ee\"}.fa-cc-amazon-pay{--fa:\"\\f42d\"}.fa-dropbox{--fa:\"\\f16b\"}.fa-instagram{--fa:\"\\f16d\"}.fa-cmplid{--fa:\"\\e360\"}.fa-upwork{--fa:\"\\e641\"}.fa-facebook{--fa:\"\\f09a\"}.fa-gripfire{--fa:\"\\f3ac\"}.fa-jedi-order{--fa:\"\\f50e\"}.fa-uikit{--fa:\"\\f403\"}.fa-fort-awesome-alt{--fa:\"\\f3a3\"}.fa-phabricator{--fa:\"\\f3db\"}.fa-ussunnah{--fa:\"\\f407\"}.fa-earlybirds{--fa:\"\\f39a\"}.fa-trade-federation{--fa:\"\\f513\"}.fa-autoprefixer{--fa:\"\\f41c\"}.fa-whatsapp{--fa:\"\\f232\"}.fa-square-upwork{--fa:\"\\e67c\"}.fa-slideshare{--fa:\"\\f1e7\"}.fa-google-play{--fa:\"\\f3ab\"}.fa-viadeo{--fa:\"\\f2a9\"}.fa-line{--fa:\"\\f3c0\"}.fa-google-drive{--fa:\"\\f3aa\"}.fa-servicestack{--fa:\"\\f3ec\"}.fa-simplybuilt{--fa:\"\\f215\"}.fa-bitbucket{--fa:\"\\f171\"}.fa-imdb{--fa:\"\\f2d8\"}.fa-deezer{--fa:\"\\e077\"}.fa-raspberry-pi{--fa:\"\\f7bb\"}.fa-jira{--fa:\"\\f7b1\"}.fa-docker{--fa:\"\\f395\"}.fa-screenpal{--fa:\"\\e570\"}.fa-bluetooth{--fa:\"\\f293\"}.fa-gitter{--fa:\"\\f426\"}.fa-d-and-d{--fa:\"\\f38d\"}.fa-microblog{--fa:\"\\e01a\"}.fa-cc-diners-club{--fa:\"\\f24c\"}.fa-gg-circle{--fa:\"\\f261\"}.fa-pied-piper-hat{--fa:\"\\f4e5\"}.fa-kickstarter-k{--fa:\"\\f3bc\"}.fa-yandex{--fa:\"\\f413\"}.fa-readme{--fa:\"\\f4d5\"}.fa-html5{--fa:\"\\f13b\"}.fa-sellsy{--fa:\"\\f213\"}.fa-square-web-awesome{--fa:\"\\e683\"}.fa-sass{--fa:\"\\f41e\"}.fa-wirsindhandwerk,.fa-wsh{--fa:\"\\e2d0\"}.fa-buromobelexperte{--fa:\"\\f37f\"}.fa-salesforce{--fa:\"\\f83b\"}.fa-octopus-deploy{--fa:\"\\e082\"}.fa-medapps{--fa:\"\\f3c6\"}.fa-ns8{--fa:\"\\f3d5\"}.fa-pinterest-p{--fa:\"\\f231\"}.fa-apper{--fa:\"\\f371\"}.fa-fort-awesome{--fa:\"\\f286\"}.fa-waze{--fa:\"\\f83f\"}.fa-bluesky{--fa:\"\\e671\"}.fa-cc-jcb{--fa:\"\\f24b\"}.fa-snapchat,.fa-snapchat-ghost{--fa:\"\\f2ab\"}.fa-fantasy-flight-games{--fa:\"\\f6dc\"}.fa-rust{--fa:\"\\e07a\"}.fa-wix{--fa:\"\\f5cf\"}.fa-behance-square,.fa-square-behance{--fa:\"\\f1b5\"}.fa-supple{--fa:\"\\f3f9\"}.fa-webflow{--fa:\"\\e65c\"}.fa-rebel{--fa:\"\\f1d0\"}.fa-css3{--fa:\"\\f13c\"}.fa-staylinked{--fa:\"\\f3f5\"}.fa-kaggle{--fa:\"\\f5fa\"}.fa-space-awesome{--fa:\"\\e5ac\"}.fa-deviantart{--fa:\"\\f1bd\"}.fa-cpanel{--fa:\"\\f388\"}.fa-goodreads-g{--fa:\"\\f3a9\"}.fa-git-square,.fa-square-git{--fa:\"\\f1d2\"}.fa-square-tumblr,.fa-tumblr-square{--fa:\"\\f174\"}.fa-trello{--fa:\"\\f181\"}.fa-creative-commons-nc-jp{--fa:\"\\f4ea\"}.fa-get-pocket{--fa:\"\\f265\"}.fa-perbyte{--fa:\"\\e083\"}.fa-grunt{--fa:\"\\f3ad\"}.fa-weebly{--fa:\"\\f5cc\"}.fa-connectdevelop{--fa:\"\\f20e\"}.fa-leanpub{--fa:\"\\f212\"}.fa-black-tie{--fa:\"\\f27e\"}.fa-themeco{--fa:\"\\f5c6\"}.fa-python{--fa:\"\\f3e2\"}.fa-android{--fa:\"\\f17b\"}.fa-bots{--fa:\"\\e340\"}.fa-free-code-camp{--fa:\"\\f2c5\"}.fa-hornbill{--fa:\"\\f592\"}.fa-js{--fa:\"\\f3b8\"}.fa-ideal{--fa:\"\\e013\"}.fa-git{--fa:\"\\f1d3\"}.fa-dev{--fa:\"\\f6cc\"}.fa-sketch{--fa:\"\\f7c6\"}.fa-yandex-international{--fa:\"\\f414\"}.fa-cc-amex{--fa:\"\\f1f3\"}.fa-uber{--fa:\"\\f402\"}.fa-github{--fa:\"\\f09b\"}.fa-php{--fa:\"\\f457\"}.fa-alipay{--fa:\"\\f642\"}.fa-youtube{--fa:\"\\f167\"}.fa-skyatlas{--fa:\"\\f216\"}.fa-firefox-browser{--fa:\"\\e007\"}.fa-replyd{--fa:\"\\f3e6\"}.fa-suse{--fa:\"\\f7d6\"}.fa-jenkins{--fa:\"\\f3b6\"}.fa-twitter{--fa:\"\\f099\"}.fa-rockrms{--fa:\"\\f3e9\"}.fa-pinterest{--fa:\"\\f0d2\"}.fa-buffer{--fa:\"\\f837\"}.fa-npm{--fa:\"\\f3d4\"}.fa-yammer{--fa:\"\\f840\"}.fa-btc{--fa:\"\\f15a\"}.fa-dribbble{--fa:\"\\f17d\"}.fa-stumbleupon-circle{--fa:\"\\f1a3\"}.fa-internet-explorer{--fa:\"\\f26b\"}.fa-stubber{--fa:\"\\e5c7\"}.fa-telegram,.fa-telegram-plane{--fa:\"\\f2c6\"}.fa-old-republic{--fa:\"\\f510\"}.fa-odysee{--fa:\"\\e5c6\"}.fa-square-whatsapp,.fa-whatsapp-square{--fa:\"\\f40c\"}.fa-node-js{--fa:\"\\f3d3\"}.fa-edge-legacy{--fa:\"\\e078\"}.fa-slack,.fa-slack-hash{--fa:\"\\f198\"}.fa-medrt{--fa:\"\\f3c8\"}.fa-usb{--fa:\"\\f287\"}.fa-tumblr{--fa:\"\\f173\"}.fa-vaadin{--fa:\"\\f408\"}.fa-quora{--fa:\"\\f2c4\"}.fa-square-x-twitter{--fa:\"\\e61a\"}.fa-reacteurope{--fa:\"\\f75d\"}.fa-medium,.fa-medium-m{--fa:\"\\f23a\"}.fa-amilia{--fa:\"\\f36d\"}.fa-mixcloud{--fa:\"\\f289\"}.fa-flipboard{--fa:\"\\f44d\"}.fa-viacoin{--fa:\"\\f237\"}.fa-critical-role{--fa:\"\\f6c9\"}.fa-sitrox{--fa:\"\\e44a\"}.fa-discourse{--fa:\"\\f393\"}.fa-joomla{--fa:\"\\f1aa\"}.fa-mastodon{--fa:\"\\f4f6\"}.fa-airbnb{--fa:\"\\f834\"}.fa-wolf-pack-battalion{--fa:\"\\f514\"}.fa-buy-n-large{--fa:\"\\f8a6\"}.fa-gulp{--fa:\"\\f3ae\"}.fa-creative-commons-sampling-plus{--fa:\"\\f4f1\"}.fa-strava{--fa:\"\\f428\"}.fa-ember{--fa:\"\\f423\"}.fa-canadian-maple-leaf{--fa:\"\\f785\"}.fa-teamspeak{--fa:\"\\f4f9\"}.fa-pushed{--fa:\"\\f3e1\"}.fa-wordpress-simple{--fa:\"\\f411\"}.fa-nutritionix{--fa:\"\\f3d6\"}.fa-wodu{--fa:\"\\e088\"}.fa-google-pay{--fa:\"\\e079\"}.fa-intercom{--fa:\"\\f7af\"}.fa-zhihu{--fa:\"\\f63f\"}.fa-korvue{--fa:\"\\f42f\"}.fa-pix{--fa:\"\\e43a\"}.fa-steam-symbol{--fa:\"\\f3f6\"}:host,:root{--fa-font-regular:normal 400 1em/1 \"Font Awesome 6 Free\"}@font-face{font-family:\"Font Awesome 6 Free\";font-style:normal;font-weight:400;font-display:block;src:url(../webfonts/fa-regular-400.woff2) format(\"woff2\"),url(../webfonts/fa-regular-400.ttf) format(\"truetype\")}.fa-regular,.far{font-weight:400}:host,:root{--fa-style-family-classic:\"Font Awesome 6 Free\";--fa-font-solid:normal 900 1em/1 \"Font Awesome 6 Free\"}@font-face{font-family:\"Font Awesome 6 Free\";font-style:normal;font-weight:900;font-display:block;src:url(../webfonts/fa-solid-900.woff2) format(\"woff2\"),url(../webfonts/fa-solid-900.ttf) format(\"truetype\")}.fa-solid,.fas{font-weight:900}@font-face{font-family:\"Font Awesome 5 Brands\";font-display:block;font-weight:400;src:url(../webfonts/fa-brands-400.woff2) format(\"woff2\"),url(../webfonts/fa-brands-400.ttf) format(\"truetype\")}@font-face{font-family:\"Font Awesome 5 Free\";font-display:block;font-weight:900;src:url(../webfonts/fa-solid-900.woff2) format(\"woff2\"),url(../webfonts/fa-solid-900.ttf) format(\"truetype\")}@font-face{font-family:\"Font Awesome 5 Free\";font-display:block;font-weight:400;src:url(../webfonts/fa-regular-400.woff2) format(\"woff2\"),url(../webfonts/fa-regular-400.ttf) format(\"truetype\")}@font-face{font-family:\"FontAwesome\";font-display:block;src:url(../webfonts/fa-solid-900.woff2) format(\"woff2\"),url(../webfonts/fa-solid-900.ttf) format(\"truetype\")}@font-face{font-family:\"FontAwesome\";font-display:block;src:url(../webfonts/fa-brands-400.woff2) format(\"woff2\"),url(../webfonts/fa-brands-400.ttf) format(\"truetype\")}@font-face{font-family:\"FontAwesome\";font-display:block;src:url(../webfonts/fa-regular-400.woff2) format(\"woff2\"),url(../webfonts/fa-regular-400.ttf) format(\"truetype\");unicode-range:u+f003,u+f006,u+f014,u+f016-f017,u+f01a-f01b,u+f01d,u+f022,u+f03e,u+f044,u+f046,u+f05c-f05d,u+f06e,u+f070,u+f087-f088,u+f08a,u+f094,u+f096-f097,u+f09d,u+f0a0,u+f0a2,u+f0a4-f0a7,u+f0c5,u+f0c7,u+f0e5-f0e6,u+f0eb,u+f0f6-f0f8,u+f10c,u+f114-f115,u+f118-f11a,u+f11c-f11d,u+f133,u+f147,u+f14e,u+f150-f152,u+f185-f186,u+f18e,u+f190-f192,u+f196,u+f1c1-f1c9,u+f1d9,u+f1db,u+f1e3,u+f1ea,u+f1f7,u+f1f9,u+f20a,u+f247-f248,u+f24a,u+f24d,u+f255-f25b,u+f25d,u+f271-f274,u+f278,u+f27b,u+f28c,u+f28e,u+f29c,u+f2b5,u+f2b7,u+f2ba,u+f2bc,u+f2be,u+f2c0-f2c1,u+f2c3,u+f2d0,u+f2d2,u+f2d4,u+f2dc}@font-face{font-family:\"FontAwesome\";font-display:block;src:url(../webfonts/fa-v4compatibility.woff2) format(\"woff2\"),url(../webfonts/fa-v4compatibility.ttf) format(\"truetype\");unicode-range:u+f041,u+f047,u+f065-f066,u+f07d-f07e,u+f080,u+f08b,u+f08e,u+f090,u+f09a,u+f0ac,u+f0ae,u+f0b2,u+f0d0,u+f0d6,u+f0e4,u+f0ec,u+f10a-f10b,u+f123,u+f13e,u+f148-f149,u+f14c,u+f156,u+f15e,u+f160-f161,u+f163,u+f175-f178,u+f195,u+f1f8,u+f219,u+f27a}"
  },
  {
    "path": "GoEasyDesigner/frontend/public/releases_latest.json",
    "content": "[\n  {\n    \"url\": \"https://api.github.com/repos/duolabmeng6/GoEasyDesigner/releases/126361665\",\n    \"assets_url\": \"https://api.github.com/repos/duolabmeng6/GoEasyDesigner/releases/126361665/assets\",\n    \"upload_url\": \"https://uploads.github.com/repos/duolabmeng6/GoEasyDesigner/releases/126361665/assets{?name,label}\",\n    \"html_url\": \"https://github.com/duolabmeng6/GoEasyDesigner/releases/tag/v0.1.19\",\n    \"id\": 126361665,\n    \"author\": {\n      \"login\": \"github-actions[bot]\",\n      \"id\": 41898282,\n      \"node_id\": \"MDM6Qm90NDE4OTgyODI=\",\n      \"avatar_url\": \"https://avatars.githubusercontent.com/in/15368?v=4\",\n      \"gravatar_id\": \"\",\n      \"url\": \"https://api.github.com/users/github-actions%5Bbot%5D\",\n      \"html_url\": \"https://github.com/apps/github-actions\",\n      \"followers_url\": \"https://api.github.com/users/github-actions%5Bbot%5D/followers\",\n      \"following_url\": \"https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}\",\n      \"gists_url\": \"https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}\",\n      \"starred_url\": \"https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}\",\n      \"subscriptions_url\": \"https://api.github.com/users/github-actions%5Bbot%5D/subscriptions\",\n      \"organizations_url\": \"https://api.github.com/users/github-actions%5Bbot%5D/orgs\",\n      \"repos_url\": \"https://api.github.com/users/github-actions%5Bbot%5D/repos\",\n      \"events_url\": \"https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}\",\n      \"received_events_url\": \"https://api.github.com/users/github-actions%5Bbot%5D/received_events\",\n      \"type\": \"Bot\",\n      \"site_admin\": false\n    },\n    \"node_id\": \"RE_kwDOKGTsf84HiCBB\",\n    \"tag_name\": \"v0.1.19\",\n    \"target_commitish\": \"refs/heads/main\",\n    \"name\": \"v0.1.19\",\n    \"draft\": false,\n    \"prerelease\": false,\n    \"created_at\": \"2023-10-24T06:07:51Z\",\n    \"published_at\": \"2023-10-24T06:20:42Z\",\n    \"assets\": [\n      {\n        \"url\": \"https://api.github.com/repos/duolabmeng6/GoEasyDesigner/releases/assets/132065511\",\n        \"id\": 132065511,\n        \"node_id\": \"RA_kwDOKGTsf84H3yjn\",\n        \"name\": \"GoEasyDesigner-v0.1.19.dmg\",\n        \"label\": \"\",\n        \"uploader\": {\n          \"login\": \"github-actions[bot]\",\n          \"id\": 41898282,\n          \"node_id\": \"MDM6Qm90NDE4OTgyODI=\",\n          \"avatar_url\": \"https://avatars.githubusercontent.com/in/15368?v=4\",\n          \"gravatar_id\": \"\",\n          \"url\": \"https://api.github.com/users/github-actions%5Bbot%5D\",\n          \"html_url\": \"https://github.com/apps/github-actions\",\n          \"followers_url\": \"https://api.github.com/users/github-actions%5Bbot%5D/followers\",\n          \"following_url\": \"https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}\",\n          \"gists_url\": \"https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}\",\n          \"starred_url\": \"https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}\",\n          \"subscriptions_url\": \"https://api.github.com/users/github-actions%5Bbot%5D/subscriptions\",\n          \"organizations_url\": \"https://api.github.com/users/github-actions%5Bbot%5D/orgs\",\n          \"repos_url\": \"https://api.github.com/users/github-actions%5Bbot%5D/repos\",\n          \"events_url\": \"https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}\",\n          \"received_events_url\": \"https://api.github.com/users/github-actions%5Bbot%5D/received_events\",\n          \"type\": \"Bot\",\n          \"site_admin\": false\n        },\n        \"content_type\": \"raw\",\n        \"state\": \"uploaded\",\n        \"size\": 9907503,\n        \"download_count\": 4,\n        \"created_at\": \"2023-10-24T06:20:45Z\",\n        \"updated_at\": \"2023-10-24T06:20:45Z\",\n        \"browser_download_url\": \"https://github.com/duolabmeng6/GoEasyDesigner/releases/download/v0.1.19/GoEasyDesigner-v0.1.19.dmg\"\n      },\n      {\n        \"url\": \"https://api.github.com/repos/duolabmeng6/GoEasyDesigner/releases/assets/132065514\",\n        \"id\": 132065514,\n        \"node_id\": \"RA_kwDOKGTsf84H3yjq\",\n        \"name\": \"GoEasyDesigner.exe\",\n        \"label\": \"\",\n        \"uploader\": {\n          \"login\": \"github-actions[bot]\",\n          \"id\": 41898282,\n          \"node_id\": \"MDM6Qm90NDE4OTgyODI=\",\n          \"avatar_url\": \"https://avatars.githubusercontent.com/in/15368?v=4\",\n          \"gravatar_id\": \"\",\n          \"url\": \"https://api.github.com/users/github-actions%5Bbot%5D\",\n          \"html_url\": \"https://github.com/apps/github-actions\",\n          \"followers_url\": \"https://api.github.com/users/github-actions%5Bbot%5D/followers\",\n          \"following_url\": \"https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}\",\n          \"gists_url\": \"https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}\",\n          \"starred_url\": \"https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}\",\n          \"subscriptions_url\": \"https://api.github.com/users/github-actions%5Bbot%5D/subscriptions\",\n          \"organizations_url\": \"https://api.github.com/users/github-actions%5Bbot%5D/orgs\",\n          \"repos_url\": \"https://api.github.com/users/github-actions%5Bbot%5D/repos\",\n          \"events_url\": \"https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}\",\n          \"received_events_url\": \"https://api.github.com/users/github-actions%5Bbot%5D/received_events\",\n          \"type\": \"Bot\",\n          \"site_admin\": false\n        },\n        \"content_type\": \"raw\",\n        \"state\": \"uploaded\",\n        \"size\": 9083392,\n        \"download_count\": 18,\n        \"created_at\": \"2023-10-24T06:20:46Z\",\n        \"updated_at\": \"2023-10-24T06:20:47Z\",\n        \"browser_download_url\": \"https://github.com/duolabmeng6/GoEasyDesigner/releases/download/v0.1.19/GoEasyDesigner.exe\"\n      },\n      {\n        \"url\": \"https://api.github.com/repos/duolabmeng6/GoEasyDesigner/releases/assets/132065508\",\n        \"id\": 132065508,\n        \"node_id\": \"RA_kwDOKGTsf84H3yjk\",\n        \"name\": \"GoEasyDesigner_MacOS.zip\",\n        \"label\": \"\",\n        \"uploader\": {\n          \"login\": \"github-actions[bot]\",\n          \"id\": 41898282,\n          \"node_id\": \"MDM6Qm90NDE4OTgyODI=\",\n          \"avatar_url\": \"https://avatars.githubusercontent.com/in/15368?v=4\",\n          \"gravatar_id\": \"\",\n          \"url\": \"https://api.github.com/users/github-actions%5Bbot%5D\",\n          \"html_url\": \"https://github.com/apps/github-actions\",\n          \"followers_url\": \"https://api.github.com/users/github-actions%5Bbot%5D/followers\",\n          \"following_url\": \"https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}\",\n          \"gists_url\": \"https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}\",\n          \"starred_url\": \"https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}\",\n          \"subscriptions_url\": \"https://api.github.com/users/github-actions%5Bbot%5D/subscriptions\",\n          \"organizations_url\": \"https://api.github.com/users/github-actions%5Bbot%5D/orgs\",\n          \"repos_url\": \"https://api.github.com/users/github-actions%5Bbot%5D/repos\",\n          \"events_url\": \"https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}\",\n          \"received_events_url\": \"https://api.github.com/users/github-actions%5Bbot%5D/received_events\",\n          \"type\": \"Bot\",\n          \"site_admin\": false\n        },\n        \"content_type\": \"raw\",\n        \"state\": \"uploaded\",\n        \"size\": 8610259,\n        \"download_count\": 0,\n        \"created_at\": \"2023-10-24T06:20:43Z\",\n        \"updated_at\": \"2023-10-24T06:20:44Z\",\n        \"browser_download_url\": \"https://github.com/duolabmeng6/GoEasyDesigner/releases/download/v0.1.19/GoEasyDesigner_MacOS.zip\"\n      }\n    ],\n    \"tarball_url\": \"https://api.github.com/repos/duolabmeng6/GoEasyDesigner/tarball/v0.1.19\",\n    \"zipball_url\": \"https://api.github.com/repos/duolabmeng6/GoEasyDesigner/zipball/v0.1.19\",\n    \"body\": \"# GoEasyDesigner 窗口设计师\\n* 基于 go 语言 使用 wails框架, 支持 window macos linux 等系统.\\n\\n快下载体验~\"\n  },\n  {\n    \"url\": \"https://api.github.com/repos/duolabmeng6/GoEasyDesigner/releases/126235359\",\n    \"assets_url\": \"https://api.github.com/repos/duolabmeng6/GoEasyDesigner/releases/126235359/assets\",\n    \"upload_url\": \"https://uploads.github.com/repos/duolabmeng6/GoEasyDesigner/releases/126235359/assets{?name,label}\",\n    \"html_url\": \"https://github.com/duolabmeng6/GoEasyDesigner/releases/tag/v0.1.18\",\n    \"id\": 126235359,\n    \"author\": {\n      \"login\": \"github-actions[bot]\",\n      \"id\": 41898282,\n      \"node_id\": \"MDM6Qm90NDE4OTgyODI=\",\n      \"avatar_url\": \"https://avatars.githubusercontent.com/in/15368?v=4\",\n      \"gravatar_id\": \"\",\n      \"url\": \"https://api.github.com/users/github-actions%5Bbot%5D\",\n      \"html_url\": \"https://github.com/apps/github-actions\",\n      \"followers_url\": \"https://api.github.com/users/github-actions%5Bbot%5D/followers\",\n      \"following_url\": \"https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}\",\n      \"gists_url\": \"https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}\",\n      \"starred_url\": \"https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}\",\n      \"subscriptions_url\": \"https://api.github.com/users/github-actions%5Bbot%5D/subscriptions\",\n      \"organizations_url\": \"https://api.github.com/users/github-actions%5Bbot%5D/orgs\",\n      \"repos_url\": \"https://api.github.com/users/github-actions%5Bbot%5D/repos\",\n      \"events_url\": \"https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}\",\n      \"received_events_url\": \"https://api.github.com/users/github-actions%5Bbot%5D/received_events\",\n      \"type\": \"Bot\",\n      \"site_admin\": false\n    },\n    \"node_id\": \"RE_kwDOKGTsf84HhjLf\",\n    \"tag_name\": \"v0.1.18\",\n    \"target_commitish\": \"refs/heads/main\",\n    \"name\": \"v0.1.18\",\n    \"draft\": false,\n    \"prerelease\": false,\n    \"created_at\": \"2023-10-23T13:03:04Z\",\n    \"published_at\": \"2023-10-23T13:12:41Z\",\n    \"assets\": [\n      {\n        \"url\": \"https://api.github.com/repos/duolabmeng6/GoEasyDesigner/releases/assets/131948863\",\n        \"id\": 131948863,\n        \"node_id\": \"RA_kwDOKGTsf84H3WE_\",\n        \"name\": \"GoEasyDesigner-v0.1.18.dmg\",\n        \"label\": \"\",\n        \"uploader\": {\n          \"login\": \"github-actions[bot]\",\n          \"id\": 41898282,\n          \"node_id\": \"MDM6Qm90NDE4OTgyODI=\",\n          \"avatar_url\": \"https://avatars.githubusercontent.com/in/15368?v=4\",\n          \"gravatar_id\": \"\",\n          \"url\": \"https://api.github.com/users/github-actions%5Bbot%5D\",\n          \"html_url\": \"https://github.com/apps/github-actions\",\n          \"followers_url\": \"https://api.github.com/users/github-actions%5Bbot%5D/followers\",\n          \"following_url\": \"https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}\",\n          \"gists_url\": \"https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}\",\n          \"starred_url\": \"https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}\",\n          \"subscriptions_url\": \"https://api.github.com/users/github-actions%5Bbot%5D/subscriptions\",\n          \"organizations_url\": \"https://api.github.com/users/github-actions%5Bbot%5D/orgs\",\n          \"repos_url\": \"https://api.github.com/users/github-actions%5Bbot%5D/repos\",\n          \"events_url\": \"https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}\",\n          \"received_events_url\": \"https://api.github.com/users/github-actions%5Bbot%5D/received_events\",\n          \"type\": \"Bot\",\n          \"site_admin\": false\n        },\n        \"content_type\": \"raw\",\n        \"state\": \"uploaded\",\n        \"size\": 9413892,\n        \"download_count\": 3,\n        \"created_at\": \"2023-10-23T13:12:43Z\",\n        \"updated_at\": \"2023-10-23T13:12:44Z\",\n        \"browser_download_url\": \"https://github.com/duolabmeng6/GoEasyDesigner/releases/download/v0.1.18/GoEasyDesigner-v0.1.18.dmg\"\n      },\n      {\n        \"url\": \"https://api.github.com/repos/duolabmeng6/GoEasyDesigner/releases/assets/131948864\",\n        \"id\": 131948864,\n        \"node_id\": \"RA_kwDOKGTsf84H3WFA\",\n        \"name\": \"GoEasyDesigner.exe\",\n        \"label\": \"\",\n        \"uploader\": {\n          \"login\": \"github-actions[bot]\",\n          \"id\": 41898282,\n          \"node_id\": \"MDM6Qm90NDE4OTgyODI=\",\n          \"avatar_url\": \"https://avatars.githubusercontent.com/in/15368?v=4\",\n          \"gravatar_id\": \"\",\n          \"url\": \"https://api.github.com/users/github-actions%5Bbot%5D\",\n          \"html_url\": \"https://github.com/apps/github-actions\",\n          \"followers_url\": \"https://api.github.com/users/github-actions%5Bbot%5D/followers\",\n          \"following_url\": \"https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}\",\n          \"gists_url\": \"https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}\",\n          \"starred_url\": \"https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}\",\n          \"subscriptions_url\": \"https://api.github.com/users/github-actions%5Bbot%5D/subscriptions\",\n          \"organizations_url\": \"https://api.github.com/users/github-actions%5Bbot%5D/orgs\",\n          \"repos_url\": \"https://api.github.com/users/github-actions%5Bbot%5D/repos\",\n          \"events_url\": \"https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}\",\n          \"received_events_url\": \"https://api.github.com/users/github-actions%5Bbot%5D/received_events\",\n          \"type\": \"Bot\",\n          \"site_admin\": false\n        },\n        \"content_type\": \"raw\",\n        \"state\": \"uploaded\",\n        \"size\": 8703488,\n        \"download_count\": 9,\n        \"created_at\": \"2023-10-23T13:12:44Z\",\n        \"updated_at\": \"2023-10-23T13:12:45Z\",\n        \"browser_download_url\": \"https://github.com/duolabmeng6/GoEasyDesigner/releases/download/v0.1.18/GoEasyDesigner.exe\"\n      },\n      {\n        \"url\": \"https://api.github.com/repos/duolabmeng6/GoEasyDesigner/releases/assets/131948861\",\n        \"id\": 131948861,\n        \"node_id\": \"RA_kwDOKGTsf84H3WE9\",\n        \"name\": \"GoEasyDesigner_MacOS.zip\",\n        \"label\": \"\",\n        \"uploader\": {\n          \"login\": \"github-actions[bot]\",\n          \"id\": 41898282,\n          \"node_id\": \"MDM6Qm90NDE4OTgyODI=\",\n          \"avatar_url\": \"https://avatars.githubusercontent.com/in/15368?v=4\",\n          \"gravatar_id\": \"\",\n          \"url\": \"https://api.github.com/users/github-actions%5Bbot%5D\",\n          \"html_url\": \"https://github.com/apps/github-actions\",\n          \"followers_url\": \"https://api.github.com/users/github-actions%5Bbot%5D/followers\",\n          \"following_url\": \"https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}\",\n          \"gists_url\": \"https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}\",\n          \"starred_url\": \"https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}\",\n          \"subscriptions_url\": \"https://api.github.com/users/github-actions%5Bbot%5D/subscriptions\",\n          \"organizations_url\": \"https://api.github.com/users/github-actions%5Bbot%5D/orgs\",\n          \"repos_url\": \"https://api.github.com/users/github-actions%5Bbot%5D/repos\",\n          \"events_url\": \"https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}\",\n          \"received_events_url\": \"https://api.github.com/users/github-actions%5Bbot%5D/received_events\",\n          \"type\": \"Bot\",\n          \"site_admin\": false\n        },\n        \"content_type\": \"raw\",\n        \"state\": \"uploaded\",\n        \"size\": 8189728,\n        \"download_count\": 0,\n        \"created_at\": \"2023-10-23T13:12:42Z\",\n        \"updated_at\": \"2023-10-23T13:12:43Z\",\n        \"browser_download_url\": \"https://github.com/duolabmeng6/GoEasyDesigner/releases/download/v0.1.18/GoEasyDesigner_MacOS.zip\"\n      }\n    ],\n    \"tarball_url\": \"https://api.github.com/repos/duolabmeng6/GoEasyDesigner/tarball/v0.1.18\",\n    \"zipball_url\": \"https://api.github.com/repos/duolabmeng6/GoEasyDesigner/zipball/v0.1.18\",\n    \"body\": \"# GoEasyDesigner 窗口设计师\\n* 基于 go 语言 使用 wails框架, 支持 window macos linux 等系统.\\n\\n快下载体验~\"\n  },\n  {\n    \"url\": \"https://api.github.com/repos/duolabmeng6/GoEasyDesigner/releases/126140306\",\n    \"assets_url\": \"https://api.github.com/repos/duolabmeng6/GoEasyDesigner/releases/126140306/assets\",\n    \"upload_url\": \"https://uploads.github.com/repos/duolabmeng6/GoEasyDesigner/releases/126140306/assets{?name,label}\",\n    \"html_url\": \"https://github.com/duolabmeng6/GoEasyDesigner/releases/tag/v0.1.17\",\n    \"id\": 126140306,\n    \"author\": {\n      \"login\": \"github-actions[bot]\",\n      \"id\": 41898282,\n      \"node_id\": \"MDM6Qm90NDE4OTgyODI=\",\n      \"avatar_url\": \"https://avatars.githubusercontent.com/in/15368?v=4\",\n      \"gravatar_id\": \"\",\n      \"url\": \"https://api.github.com/users/github-actions%5Bbot%5D\",\n      \"html_url\": \"https://github.com/apps/github-actions\",\n      \"followers_url\": \"https://api.github.com/users/github-actions%5Bbot%5D/followers\",\n      \"following_url\": \"https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}\",\n      \"gists_url\": \"https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}\",\n      \"starred_url\": \"https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}\",\n      \"subscriptions_url\": \"https://api.github.com/users/github-actions%5Bbot%5D/subscriptions\",\n      \"organizations_url\": \"https://api.github.com/users/github-actions%5Bbot%5D/orgs\",\n      \"repos_url\": \"https://api.github.com/users/github-actions%5Bbot%5D/repos\",\n      \"events_url\": \"https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}\",\n      \"received_events_url\": \"https://api.github.com/users/github-actions%5Bbot%5D/received_events\",\n      \"type\": \"Bot\",\n      \"site_admin\": false\n    },\n    \"node_id\": \"RE_kwDOKGTsf84HhL-S\",\n    \"tag_name\": \"v0.1.17\",\n    \"target_commitish\": \"refs/heads/main\",\n    \"name\": \"v0.1.17\",\n    \"draft\": false,\n    \"prerelease\": false,\n    \"created_at\": \"2023-10-22T06:35:52Z\",\n    \"published_at\": \"2023-10-22T06:39:36Z\",\n    \"assets\": [\n      {\n        \"url\": \"https://api.github.com/repos/duolabmeng6/GoEasyDesigner/releases/assets/131778341\",\n        \"id\": 131778341,\n        \"node_id\": \"RA_kwDOKGTsf84H2scl\",\n        \"name\": \"GoEasyDesigner-v0.1.17.dmg\",\n        \"label\": \"\",\n        \"uploader\": {\n          \"login\": \"github-actions[bot]\",\n          \"id\": 41898282,\n          \"node_id\": \"MDM6Qm90NDE4OTgyODI=\",\n          \"avatar_url\": \"https://avatars.githubusercontent.com/in/15368?v=4\",\n          \"gravatar_id\": \"\",\n          \"url\": \"https://api.github.com/users/github-actions%5Bbot%5D\",\n          \"html_url\": \"https://github.com/apps/github-actions\",\n          \"followers_url\": \"https://api.github.com/users/github-actions%5Bbot%5D/followers\",\n          \"following_url\": \"https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}\",\n          \"gists_url\": \"https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}\",\n          \"starred_url\": \"https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}\",\n          \"subscriptions_url\": \"https://api.github.com/users/github-actions%5Bbot%5D/subscriptions\",\n          \"organizations_url\": \"https://api.github.com/users/github-actions%5Bbot%5D/orgs\",\n          \"repos_url\": \"https://api.github.com/users/github-actions%5Bbot%5D/repos\",\n          \"events_url\": \"https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}\",\n          \"received_events_url\": \"https://api.github.com/users/github-actions%5Bbot%5D/received_events\",\n          \"type\": \"Bot\",\n          \"site_admin\": false\n        },\n        \"content_type\": \"raw\",\n        \"state\": \"uploaded\",\n        \"size\": 9420738,\n        \"download_count\": 2,\n        \"created_at\": \"2023-10-22T06:39:38Z\",\n        \"updated_at\": \"2023-10-22T06:39:39Z\",\n        \"browser_download_url\": \"https://github.com/duolabmeng6/GoEasyDesigner/releases/download/v0.1.17/GoEasyDesigner-v0.1.17.dmg\"\n      },\n      {\n        \"url\": \"https://api.github.com/repos/duolabmeng6/GoEasyDesigner/releases/assets/131778343\",\n        \"id\": 131778343,\n        \"node_id\": \"RA_kwDOKGTsf84H2scn\",\n        \"name\": \"GoEasyDesigner.exe\",\n        \"label\": \"\",\n        \"uploader\": {\n          \"login\": \"github-actions[bot]\",\n          \"id\": 41898282,\n          \"node_id\": \"MDM6Qm90NDE4OTgyODI=\",\n          \"avatar_url\": \"https://avatars.githubusercontent.com/in/15368?v=4\",\n          \"gravatar_id\": \"\",\n          \"url\": \"https://api.github.com/users/github-actions%5Bbot%5D\",\n          \"html_url\": \"https://github.com/apps/github-actions\",\n          \"followers_url\": \"https://api.github.com/users/github-actions%5Bbot%5D/followers\",\n          \"following_url\": \"https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}\",\n          \"gists_url\": \"https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}\",\n          \"starred_url\": \"https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}\",\n          \"subscriptions_url\": \"https://api.github.com/users/github-actions%5Bbot%5D/subscriptions\",\n          \"organizations_url\": \"https://api.github.com/users/github-actions%5Bbot%5D/orgs\",\n          \"repos_url\": \"https://api.github.com/users/github-actions%5Bbot%5D/repos\",\n          \"events_url\": \"https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}\",\n          \"received_events_url\": \"https://api.github.com/users/github-actions%5Bbot%5D/received_events\",\n          \"type\": \"Bot\",\n          \"site_admin\": false\n        },\n        \"content_type\": \"raw\",\n        \"state\": \"uploaded\",\n        \"size\": 8554496,\n        \"download_count\": 15,\n        \"created_at\": \"2023-10-22T06:39:40Z\",\n        \"updated_at\": \"2023-10-22T06:39:41Z\",\n        \"browser_download_url\": \"https://github.com/duolabmeng6/GoEasyDesigner/releases/download/v0.1.17/GoEasyDesigner.exe\"\n      },\n      {\n        \"url\": \"https://api.github.com/repos/duolabmeng6/GoEasyDesigner/releases/assets/131778336\",\n        \"id\": 131778336,\n        \"node_id\": \"RA_kwDOKGTsf84H2scg\",\n        \"name\": \"GoEasyDesigner_MacOS.zip\",\n        \"label\": \"\",\n        \"uploader\": {\n          \"login\": \"github-actions[bot]\",\n          \"id\": 41898282,\n          \"node_id\": \"MDM6Qm90NDE4OTgyODI=\",\n          \"avatar_url\": \"https://avatars.githubusercontent.com/in/15368?v=4\",\n          \"gravatar_id\": \"\",\n          \"url\": \"https://api.github.com/users/github-actions%5Bbot%5D\",\n          \"html_url\": \"https://github.com/apps/github-actions\",\n          \"followers_url\": \"https://api.github.com/users/github-actions%5Bbot%5D/followers\",\n          \"following_url\": \"https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}\",\n          \"gists_url\": \"https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}\",\n          \"starred_url\": \"https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}\",\n          \"subscriptions_url\": \"https://api.github.com/users/github-actions%5Bbot%5D/subscriptions\",\n          \"organizations_url\": \"https://api.github.com/users/github-actions%5Bbot%5D/orgs\",\n          \"repos_url\": \"https://api.github.com/users/github-actions%5Bbot%5D/repos\",\n          \"events_url\": \"https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}\",\n          \"received_events_url\": \"https://api.github.com/users/github-actions%5Bbot%5D/received_events\",\n          \"type\": \"Bot\",\n          \"site_admin\": false\n        },\n        \"content_type\": \"raw\",\n        \"state\": \"uploaded\",\n        \"size\": 8190560,\n        \"download_count\": 0,\n        \"created_at\": \"2023-10-22T06:39:37Z\",\n        \"updated_at\": \"2023-10-22T06:39:38Z\",\n        \"browser_download_url\": \"https://github.com/duolabmeng6/GoEasyDesigner/releases/download/v0.1.17/GoEasyDesigner_MacOS.zip\"\n      }\n    ],\n    \"tarball_url\": \"https://api.github.com/repos/duolabmeng6/GoEasyDesigner/tarball/v0.1.17\",\n    \"zipball_url\": \"https://api.github.com/repos/duolabmeng6/GoEasyDesigner/zipball/v0.1.17\",\n    \"body\": \"# GoEasyDesigner 窗口设计师\\n* 基于 go 语言 使用 wails框架, 支持 window macos linux 等系统.\\n\\n快下载体验~\"\n  },\n  {\n    \"url\": \"https://api.github.com/repos/duolabmeng6/GoEasyDesigner/releases/125922073\",\n    \"assets_url\": \"https://api.github.com/repos/duolabmeng6/GoEasyDesigner/releases/125922073/assets\",\n    \"upload_url\": \"https://uploads.github.com/repos/duolabmeng6/GoEasyDesigner/releases/125922073/assets{?name,label}\",\n    \"html_url\": \"https://github.com/duolabmeng6/GoEasyDesigner/releases/tag/v0.1.16\",\n    \"id\": 125922073,\n    \"author\": {\n      \"login\": \"github-actions[bot]\",\n      \"id\": 41898282,\n      \"node_id\": \"MDM6Qm90NDE4OTgyODI=\",\n      \"avatar_url\": \"https://avatars.githubusercontent.com/in/15368?v=4\",\n      \"gravatar_id\": \"\",\n      \"url\": \"https://api.github.com/users/github-actions%5Bbot%5D\",\n      \"html_url\": \"https://github.com/apps/github-actions\",\n      \"followers_url\": \"https://api.github.com/users/github-actions%5Bbot%5D/followers\",\n      \"following_url\": \"https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}\",\n      \"gists_url\": \"https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}\",\n      \"starred_url\": \"https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}\",\n      \"subscriptions_url\": \"https://api.github.com/users/github-actions%5Bbot%5D/subscriptions\",\n      \"organizations_url\": \"https://api.github.com/users/github-actions%5Bbot%5D/orgs\",\n      \"repos_url\": \"https://api.github.com/users/github-actions%5Bbot%5D/repos\",\n      \"events_url\": \"https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}\",\n      \"received_events_url\": \"https://api.github.com/users/github-actions%5Bbot%5D/received_events\",\n      \"type\": \"Bot\",\n      \"site_admin\": false\n    },\n    \"node_id\": \"RE_kwDOKGTsf84HgWsZ\",\n    \"tag_name\": \"v0.1.16\",\n    \"target_commitish\": \"refs/heads/main\",\n    \"name\": \"v0.1.16\",\n    \"draft\": false,\n    \"prerelease\": false,\n    \"created_at\": \"2023-10-22T06:10:22Z\",\n    \"published_at\": \"2023-10-22T06:22:33Z\",\n    \"assets\": [\n      {\n        \"url\": \"https://api.github.com/repos/duolabmeng6/GoEasyDesigner/releases/assets/131776941\",\n        \"id\": 131776941,\n        \"node_id\": \"RA_kwDOKGTsf84H2sGt\",\n        \"name\": \"GoEasyDesigner-v0.1.16.dmg\",\n        \"label\": \"\",\n        \"uploader\": {\n          \"login\": \"github-actions[bot]\",\n          \"id\": 41898282,\n          \"node_id\": \"MDM6Qm90NDE4OTgyODI=\",\n          \"avatar_url\": \"https://avatars.githubusercontent.com/in/15368?v=4\",\n          \"gravatar_id\": \"\",\n          \"url\": \"https://api.github.com/users/github-actions%5Bbot%5D\",\n          \"html_url\": \"https://github.com/apps/github-actions\",\n          \"followers_url\": \"https://api.github.com/users/github-actions%5Bbot%5D/followers\",\n          \"following_url\": \"https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}\",\n          \"gists_url\": \"https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}\",\n          \"starred_url\": \"https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}\",\n          \"subscriptions_url\": \"https://api.github.com/users/github-actions%5Bbot%5D/subscriptions\",\n          \"organizations_url\": \"https://api.github.com/users/github-actions%5Bbot%5D/orgs\",\n          \"repos_url\": \"https://api.github.com/users/github-actions%5Bbot%5D/repos\",\n          \"events_url\": \"https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}\",\n          \"received_events_url\": \"https://api.github.com/users/github-actions%5Bbot%5D/received_events\",\n          \"type\": \"Bot\",\n          \"site_admin\": false\n        },\n        \"content_type\": \"raw\",\n        \"state\": \"uploaded\",\n        \"size\": 9405427,\n        \"download_count\": 0,\n        \"created_at\": \"2023-10-22T06:22:35Z\",\n        \"updated_at\": \"2023-10-22T06:22:36Z\",\n        \"browser_download_url\": \"https://github.com/duolabmeng6/GoEasyDesigner/releases/download/v0.1.16/GoEasyDesigner-v0.1.16.dmg\"\n      },\n      {\n        \"url\": \"https://api.github.com/repos/duolabmeng6/GoEasyDesigner/releases/assets/131776944\",\n        \"id\": 131776944,\n        \"node_id\": \"RA_kwDOKGTsf84H2sGw\",\n        \"name\": \"GoEasyDesigner.exe\",\n        \"label\": \"\",\n        \"uploader\": {\n          \"login\": \"github-actions[bot]\",\n          \"id\": 41898282,\n          \"node_id\": \"MDM6Qm90NDE4OTgyODI=\",\n          \"avatar_url\": \"https://avatars.githubusercontent.com/in/15368?v=4\",\n          \"gravatar_id\": \"\",\n          \"url\": \"https://api.github.com/users/github-actions%5Bbot%5D\",\n          \"html_url\": \"https://github.com/apps/github-actions\",\n          \"followers_url\": \"https://api.github.com/users/github-actions%5Bbot%5D/followers\",\n          \"following_url\": \"https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}\",\n          \"gists_url\": \"https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}\",\n          \"starred_url\": \"https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}\",\n          \"subscriptions_url\": \"https://api.github.com/users/github-actions%5Bbot%5D/subscriptions\",\n          \"organizations_url\": \"https://api.github.com/users/github-actions%5Bbot%5D/orgs\",\n          \"repos_url\": \"https://api.github.com/users/github-actions%5Bbot%5D/repos\",\n          \"events_url\": \"https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}\",\n          \"received_events_url\": \"https://api.github.com/users/github-actions%5Bbot%5D/received_events\",\n          \"type\": \"Bot\",\n          \"site_admin\": false\n        },\n        \"content_type\": \"raw\",\n        \"state\": \"uploaded\",\n        \"size\": 8552960,\n        \"download_count\": 12,\n        \"created_at\": \"2023-10-22T06:22:36Z\",\n        \"updated_at\": \"2023-10-22T06:22:37Z\",\n        \"browser_download_url\": \"https://github.com/duolabmeng6/GoEasyDesigner/releases/download/v0.1.16/GoEasyDesigner.exe\"\n      },\n      {\n        \"url\": \"https://api.github.com/repos/duolabmeng6/GoEasyDesigner/releases/assets/131776936\",\n        \"id\": 131776936,\n        \"node_id\": \"RA_kwDOKGTsf84H2sGo\",\n        \"name\": \"GoEasyDesigner_MacOS.zip\",\n        \"label\": \"\",\n        \"uploader\": {\n          \"login\": \"github-actions[bot]\",\n          \"id\": 41898282,\n          \"node_id\": \"MDM6Qm90NDE4OTgyODI=\",\n          \"avatar_url\": \"https://avatars.githubusercontent.com/in/15368?v=4\",\n          \"gravatar_id\": \"\",\n          \"url\": \"https://api.github.com/users/github-actions%5Bbot%5D\",\n          \"html_url\": \"https://github.com/apps/github-actions\",\n          \"followers_url\": \"https://api.github.com/users/github-actions%5Bbot%5D/followers\",\n          \"following_url\": \"https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}\",\n          \"gists_url\": \"https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}\",\n          \"starred_url\": \"https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}\",\n          \"subscriptions_url\": \"https://api.github.com/users/github-actions%5Bbot%5D/subscriptions\",\n          \"organizations_url\": \"https://api.github.com/users/github-actions%5Bbot%5D/orgs\",\n          \"repos_url\": \"https://api.github.com/users/github-actions%5Bbot%5D/repos\",\n          \"events_url\": \"https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}\",\n          \"received_events_url\": \"https://api.github.com/users/github-actions%5Bbot%5D/received_events\",\n          \"type\": \"Bot\",\n          \"site_admin\": false\n        },\n        \"content_type\": \"raw\",\n        \"state\": \"uploaded\",\n        \"size\": 8188419,\n        \"download_count\": 0,\n        \"created_at\": \"2023-10-22T06:22:34Z\",\n        \"updated_at\": \"2023-10-22T06:22:35Z\",\n        \"browser_download_url\": \"https://github.com/duolabmeng6/GoEasyDesigner/releases/download/v0.1.16/GoEasyDesigner_MacOS.zip\"\n      }\n    ],\n    \"tarball_url\": \"https://api.github.com/repos/duolabmeng6/GoEasyDesigner/tarball/v0.1.16\",\n    \"zipball_url\": \"https://api.github.com/repos/duolabmeng6/GoEasyDesigner/zipball/v0.1.16\",\n    \"body\": \"# GoEasyDesigner 窗口设计师\\n* 基于 go 语言 使用 wails框架, 支持 window macos linux 等系统.\\n\\n快下载体验~\"\n  },\n  {\n    \"url\": \"https://api.github.com/repos/duolabmeng6/GoEasyDesigner/releases/124931121\",\n    \"assets_url\": \"https://api.github.com/repos/duolabmeng6/GoEasyDesigner/releases/124931121/assets\",\n    \"upload_url\": \"https://uploads.github.com/repos/duolabmeng6/GoEasyDesigner/releases/124931121/assets{?name,label}\",\n    \"html_url\": \"https://github.com/duolabmeng6/GoEasyDesigner/releases/tag/v0.1.15\",\n    \"id\": 124931121,\n    \"author\": {\n      \"login\": \"github-actions[bot]\",\n      \"id\": 41898282,\n      \"node_id\": \"MDM6Qm90NDE4OTgyODI=\",\n      \"avatar_url\": \"https://avatars.githubusercontent.com/in/15368?v=4\",\n      \"gravatar_id\": \"\",\n      \"url\": \"https://api.github.com/users/github-actions%5Bbot%5D\",\n      \"html_url\": \"https://github.com/apps/github-actions\",\n      \"followers_url\": \"https://api.github.com/users/github-actions%5Bbot%5D/followers\",\n      \"following_url\": \"https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}\",\n      \"gists_url\": \"https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}\",\n      \"starred_url\": \"https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}\",\n      \"subscriptions_url\": \"https://api.github.com/users/github-actions%5Bbot%5D/subscriptions\",\n      \"organizations_url\": \"https://api.github.com/users/github-actions%5Bbot%5D/orgs\",\n      \"repos_url\": \"https://api.github.com/users/github-actions%5Bbot%5D/repos\",\n      \"events_url\": \"https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}\",\n      \"received_events_url\": \"https://api.github.com/users/github-actions%5Bbot%5D/received_events\",\n      \"type\": \"Bot\",\n      \"site_admin\": false\n    },\n    \"node_id\": \"RE_kwDOKGTsf84Hckwx\",\n    \"tag_name\": \"v0.1.15\",\n    \"target_commitish\": \"refs/heads/main\",\n    \"name\": \"v0.1.15\",\n    \"draft\": false,\n    \"prerelease\": false,\n    \"created_at\": \"2023-10-13T05:51:24Z\",\n    \"published_at\": \"2023-10-13T06:03:00Z\",\n    \"assets\": [\n      {\n        \"url\": \"https://api.github.com/repos/duolabmeng6/GoEasyDesigner/releases/assets/130377811\",\n        \"id\": 130377811,\n        \"node_id\": \"RA_kwDOKGTsf84HxWhT\",\n        \"name\": \"GoEasyDesigner-v0.1.15.dmg\",\n        \"label\": \"\",\n        \"uploader\": {\n          \"login\": \"github-actions[bot]\",\n          \"id\": 41898282,\n          \"node_id\": \"MDM6Qm90NDE4OTgyODI=\",\n          \"avatar_url\": \"https://avatars.githubusercontent.com/in/15368?v=4\",\n          \"gravatar_id\": \"\",\n          \"url\": \"https://api.github.com/users/github-actions%5Bbot%5D\",\n          \"html_url\": \"https://github.com/apps/github-actions\",\n          \"followers_url\": \"https://api.github.com/users/github-actions%5Bbot%5D/followers\",\n          \"following_url\": \"https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}\",\n          \"gists_url\": \"https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}\",\n          \"starred_url\": \"https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}\",\n          \"subscriptions_url\": \"https://api.github.com/users/github-actions%5Bbot%5D/subscriptions\",\n          \"organizations_url\": \"https://api.github.com/users/github-actions%5Bbot%5D/orgs\",\n          \"repos_url\": \"https://api.github.com/users/github-actions%5Bbot%5D/repos\",\n          \"events_url\": \"https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}\",\n          \"received_events_url\": \"https://api.github.com/users/github-actions%5Bbot%5D/received_events\",\n          \"type\": \"Bot\",\n          \"site_admin\": false\n        },\n        \"content_type\": \"raw\",\n        \"state\": \"uploaded\",\n        \"size\": 9399658,\n        \"download_count\": 15,\n        \"created_at\": \"2023-10-13T06:03:03Z\",\n        \"updated_at\": \"2023-10-13T06:03:04Z\",\n        \"browser_download_url\": \"https://github.com/duolabmeng6/GoEasyDesigner/releases/download/v0.1.15/GoEasyDesigner-v0.1.15.dmg\"\n      },\n      {\n        \"url\": \"https://api.github.com/repos/duolabmeng6/GoEasyDesigner/releases/assets/130377813\",\n        \"id\": 130377813,\n        \"node_id\": \"RA_kwDOKGTsf84HxWhV\",\n        \"name\": \"GoEasyDesigner.exe\",\n        \"label\": \"\",\n        \"uploader\": {\n          \"login\": \"github-actions[bot]\",\n          \"id\": 41898282,\n          \"node_id\": \"MDM6Qm90NDE4OTgyODI=\",\n          \"avatar_url\": \"https://avatars.githubusercontent.com/in/15368?v=4\",\n          \"gravatar_id\": \"\",\n          \"url\": \"https://api.github.com/users/github-actions%5Bbot%5D\",\n          \"html_url\": \"https://github.com/apps/github-actions\",\n          \"followers_url\": \"https://api.github.com/users/github-actions%5Bbot%5D/followers\",\n          \"following_url\": \"https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}\",\n          \"gists_url\": \"https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}\",\n          \"starred_url\": \"https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}\",\n          \"subscriptions_url\": \"https://api.github.com/users/github-actions%5Bbot%5D/subscriptions\",\n          \"organizations_url\": \"https://api.github.com/users/github-actions%5Bbot%5D/orgs\",\n          \"repos_url\": \"https://api.github.com/users/github-actions%5Bbot%5D/repos\",\n          \"events_url\": \"https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}\",\n          \"received_events_url\": \"https://api.github.com/users/github-actions%5Bbot%5D/received_events\",\n          \"type\": \"Bot\",\n          \"site_admin\": false\n        },\n        \"content_type\": \"raw\",\n        \"state\": \"uploaded\",\n        \"size\": 8522240,\n        \"download_count\": 80,\n        \"created_at\": \"2023-10-13T06:03:04Z\",\n        \"updated_at\": \"2023-10-13T06:03:05Z\",\n        \"browser_download_url\": \"https://github.com/duolabmeng6/GoEasyDesigner/releases/download/v0.1.15/GoEasyDesigner.exe\"\n      },\n      {\n        \"url\": \"https://api.github.com/repos/duolabmeng6/GoEasyDesigner/releases/assets/130377809\",\n        \"id\": 130377809,\n        \"node_id\": \"RA_kwDOKGTsf84HxWhR\",\n        \"name\": \"GoEasyDesigner_MacOS.zip\",\n        \"label\": \"\",\n        \"uploader\": {\n          \"login\": \"github-actions[bot]\",\n          \"id\": 41898282,\n          \"node_id\": \"MDM6Qm90NDE4OTgyODI=\",\n          \"avatar_url\": \"https://avatars.githubusercontent.com/in/15368?v=4\",\n          \"gravatar_id\": \"\",\n          \"url\": \"https://api.github.com/users/github-actions%5Bbot%5D\",\n          \"html_url\": \"https://github.com/apps/github-actions\",\n          \"followers_url\": \"https://api.github.com/users/github-actions%5Bbot%5D/followers\",\n          \"following_url\": \"https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}\",\n          \"gists_url\": \"https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}\",\n          \"starred_url\": \"https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}\",\n          \"subscriptions_url\": \"https://api.github.com/users/github-actions%5Bbot%5D/subscriptions\",\n          \"organizations_url\": \"https://api.github.com/users/github-actions%5Bbot%5D/orgs\",\n          \"repos_url\": \"https://api.github.com/users/github-actions%5Bbot%5D/repos\",\n          \"events_url\": \"https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}\",\n          \"received_events_url\": \"https://api.github.com/users/github-actions%5Bbot%5D/received_events\",\n          \"type\": \"Bot\",\n          \"site_admin\": false\n        },\n        \"content_type\": \"raw\",\n        \"state\": \"uploaded\",\n        \"size\": 8183676,\n        \"download_count\": 1,\n        \"created_at\": \"2023-10-13T06:03:01Z\",\n        \"updated_at\": \"2023-10-13T06:03:02Z\",\n        \"browser_download_url\": \"https://github.com/duolabmeng6/GoEasyDesigner/releases/download/v0.1.15/GoEasyDesigner_MacOS.zip\"\n      }\n    ],\n    \"tarball_url\": \"https://api.github.com/repos/duolabmeng6/GoEasyDesigner/tarball/v0.1.15\",\n    \"zipball_url\": \"https://api.github.com/repos/duolabmeng6/GoEasyDesigner/zipball/v0.1.15\",\n    \"body\": \"# GoEasyDesigner 窗口设计师\\n* 基于 go 语言 使用 wails框架, 支持 window macos linux 等系统.\\n\\n快下载体验~\"\n  },\n  {\n    \"url\": \"https://api.github.com/repos/duolabmeng6/GoEasyDesigner/releases/124875116\",\n    \"assets_url\": \"https://api.github.com/repos/duolabmeng6/GoEasyDesigner/releases/124875116/assets\",\n    \"upload_url\": \"https://uploads.github.com/repos/duolabmeng6/GoEasyDesigner/releases/124875116/assets{?name,label}\",\n    \"html_url\": \"https://github.com/duolabmeng6/GoEasyDesigner/releases/tag/v0.1.14\",\n    \"id\": 124875116,\n    \"author\": {\n      \"login\": \"github-actions[bot]\",\n      \"id\": 41898282,\n      \"node_id\": \"MDM6Qm90NDE4OTgyODI=\",\n      \"avatar_url\": \"https://avatars.githubusercontent.com/in/15368?v=4\",\n      \"gravatar_id\": \"\",\n      \"url\": \"https://api.github.com/users/github-actions%5Bbot%5D\",\n      \"html_url\": \"https://github.com/apps/github-actions\",\n      \"followers_url\": \"https://api.github.com/users/github-actions%5Bbot%5D/followers\",\n      \"following_url\": \"https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}\",\n      \"gists_url\": \"https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}\",\n      \"starred_url\": \"https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}\",\n      \"subscriptions_url\": \"https://api.github.com/users/github-actions%5Bbot%5D/subscriptions\",\n      \"organizations_url\": \"https://api.github.com/users/github-actions%5Bbot%5D/orgs\",\n      \"repos_url\": \"https://api.github.com/users/github-actions%5Bbot%5D/repos\",\n      \"events_url\": \"https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}\",\n      \"received_events_url\": \"https://api.github.com/users/github-actions%5Bbot%5D/received_events\",\n      \"type\": \"Bot\",\n      \"site_admin\": false\n    },\n    \"node_id\": \"RE_kwDOKGTsf84HcXFs\",\n    \"tag_name\": \"v0.1.14\",\n    \"target_commitish\": \"refs/heads/main\",\n    \"name\": \"v0.1.14\",\n    \"draft\": false,\n    \"prerelease\": false,\n    \"created_at\": \"2023-10-12T18:29:30Z\",\n    \"published_at\": \"2023-10-12T18:41:13Z\",\n    \"assets\": [\n      {\n        \"url\": \"https://api.github.com/repos/duolabmeng6/GoEasyDesigner/releases/assets/130303931\",\n        \"id\": 130303931,\n        \"node_id\": \"RA_kwDOKGTsf84HxEe7\",\n        \"name\": \"GoEasyDesigner-v0.1.14.dmg\",\n        \"label\": \"\",\n        \"uploader\": {\n          \"login\": \"github-actions[bot]\",\n          \"id\": 41898282,\n          \"node_id\": \"MDM6Qm90NDE4OTgyODI=\",\n          \"avatar_url\": \"https://avatars.githubusercontent.com/in/15368?v=4\",\n          \"gravatar_id\": \"\",\n          \"url\": \"https://api.github.com/users/github-actions%5Bbot%5D\",\n          \"html_url\": \"https://github.com/apps/github-actions\",\n          \"followers_url\": \"https://api.github.com/users/github-actions%5Bbot%5D/followers\",\n          \"following_url\": \"https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}\",\n          \"gists_url\": \"https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}\",\n          \"starred_url\": \"https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}\",\n          \"subscriptions_url\": \"https://api.github.com/users/github-actions%5Bbot%5D/subscriptions\",\n          \"organizations_url\": \"https://api.github.com/users/github-actions%5Bbot%5D/orgs\",\n          \"repos_url\": \"https://api.github.com/users/github-actions%5Bbot%5D/repos\",\n          \"events_url\": \"https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}\",\n          \"received_events_url\": \"https://api.github.com/users/github-actions%5Bbot%5D/received_events\",\n          \"type\": \"Bot\",\n          \"site_admin\": false\n        },\n        \"content_type\": \"raw\",\n        \"state\": \"uploaded\",\n        \"size\": 9399639,\n        \"download_count\": 0,\n        \"created_at\": \"2023-10-12T18:41:17Z\",\n        \"updated_at\": \"2023-10-12T18:41:18Z\",\n        \"browser_download_url\": \"https://github.com/duolabmeng6/GoEasyDesigner/releases/download/v0.1.14/GoEasyDesigner-v0.1.14.dmg\"\n      },\n      {\n        \"url\": \"https://api.github.com/repos/duolabmeng6/GoEasyDesigner/releases/assets/130303932\",\n        \"id\": 130303932,\n        \"node_id\": \"RA_kwDOKGTsf84HxEe8\",\n        \"name\": \"GoEasyDesigner.exe\",\n        \"label\": \"\",\n        \"uploader\": {\n          \"login\": \"github-actions[bot]\",\n          \"id\": 41898282,\n          \"node_id\": \"MDM6Qm90NDE4OTgyODI=\",\n          \"avatar_url\": \"https://avatars.githubusercontent.com/in/15368?v=4\",\n          \"gravatar_id\": \"\",\n          \"url\": \"https://api.github.com/users/github-actions%5Bbot%5D\",\n          \"html_url\": \"https://github.com/apps/github-actions\",\n          \"followers_url\": \"https://api.github.com/users/github-actions%5Bbot%5D/followers\",\n          \"following_url\": \"https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}\",\n          \"gists_url\": \"https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}\",\n          \"starred_url\": \"https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}\",\n          \"subscriptions_url\": \"https://api.github.com/users/github-actions%5Bbot%5D/subscriptions\",\n          \"organizations_url\": \"https://api.github.com/users/github-actions%5Bbot%5D/orgs\",\n          \"repos_url\": \"https://api.github.com/users/github-actions%5Bbot%5D/repos\",\n          \"events_url\": \"https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}\",\n          \"received_events_url\": \"https://api.github.com/users/github-actions%5Bbot%5D/received_events\",\n          \"type\": \"Bot\",\n          \"site_admin\": false\n        },\n        \"content_type\": \"raw\",\n        \"state\": \"uploaded\",\n        \"size\": 8522240,\n        \"download_count\": 9,\n        \"created_at\": \"2023-10-12T18:41:19Z\",\n        \"updated_at\": \"2023-10-12T18:41:19Z\",\n        \"browser_download_url\": \"https://github.com/duolabmeng6/GoEasyDesigner/releases/download/v0.1.14/GoEasyDesigner.exe\"\n      },\n      {\n        \"url\": \"https://api.github.com/repos/duolabmeng6/GoEasyDesigner/releases/assets/130303924\",\n        \"id\": 130303924,\n        \"node_id\": \"RA_kwDOKGTsf84HxEe0\",\n        \"name\": \"GoEasyDesigner_MacOS.zip\",\n        \"label\": \"\",\n        \"uploader\": {\n          \"login\": \"github-actions[bot]\",\n          \"id\": 41898282,\n          \"node_id\": \"MDM6Qm90NDE4OTgyODI=\",\n          \"avatar_url\": \"https://avatars.githubusercontent.com/in/15368?v=4\",\n          \"gravatar_id\": \"\",\n          \"url\": \"https://api.github.com/users/github-actions%5Bbot%5D\",\n          \"html_url\": \"https://github.com/apps/github-actions\",\n          \"followers_url\": \"https://api.github.com/users/github-actions%5Bbot%5D/followers\",\n          \"following_url\": \"https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}\",\n          \"gists_url\": \"https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}\",\n          \"starred_url\": \"https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}\",\n          \"subscriptions_url\": \"https://api.github.com/users/github-actions%5Bbot%5D/subscriptions\",\n          \"organizations_url\": \"https://api.github.com/users/github-actions%5Bbot%5D/orgs\",\n          \"repos_url\": \"https://api.github.com/users/github-actions%5Bbot%5D/repos\",\n          \"events_url\": \"https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}\",\n          \"received_events_url\": \"https://api.github.com/users/github-actions%5Bbot%5D/received_events\",\n          \"type\": \"Bot\",\n          \"site_admin\": false\n        },\n        \"content_type\": \"raw\",\n        \"state\": \"uploaded\",\n        \"size\": 8183400,\n        \"download_count\": 0,\n        \"created_at\": \"2023-10-12T18:41:14Z\",\n        \"updated_at\": \"2023-10-12T18:41:17Z\",\n        \"browser_download_url\": \"https://github.com/duolabmeng6/GoEasyDesigner/releases/download/v0.1.14/GoEasyDesigner_MacOS.zip\"\n      }\n    ],\n    \"tarball_url\": \"https://api.github.com/repos/duolabmeng6/GoEasyDesigner/tarball/v0.1.14\",\n    \"zipball_url\": \"https://api.github.com/repos/duolabmeng6/GoEasyDesigner/zipball/v0.1.14\",\n    \"body\": \"# GoEasyDesigner 窗口设计师\\n* 基于 go 语言 使用 wails框架, 支持 window macos linux 等系统.\\n\\n快下载体验~\"\n  }\n]\n"
  },
  {
    "path": "GoEasyDesigner/frontend/public/自定义组件/ColorfulText/ColorfulText.js",
    "content": "\nexport default {\n    top: \"150\",\n    left: \"440\",\n    width: \"400\",\n    height: \"80\",\n    no_place: true,\n    visible: true,\n    disable: false,\n    zIndex: 0,\n    customListening:true,\n\n    fontSize: \"48px\",\n    data:{\n        title: \"Go Easy Designer\",\n    },\n    html:\"\"\n}\n"
  },
  {
    "path": "GoEasyDesigner/frontend/public/自定义组件/ColorfulText/ColorfulText.vue",
    "content": "<template>\n  <div class=\"relative h-[100%] w-[100%] overflow-hidden rounded-xl\">\n    <span \n      class=\"all-gpts inherited-styles-for-exported-element\"\n      v-html=\"item.data.title\"\n      :style=\"{ fontSize: item.fontSize }\"\n    ></span>\n  </div>\n</template>\n\n<style scoped>\n@keyframes text-gradient {\n  0% { background-position: 0 0; }\n  100% { background-position: 200% 0; }\n}\n\n*,\n::after,\n::before {\n  border: 0 solid #e5e7eb;\n  box-sizing: border-box;\n}\n\n.inherited-styles-for-exported-element {\n  cursor: default;\n  font-family: system-ui, -apple-system, \"Segoe UI\", Roboto, Ubuntu, Cantarell, \"Noto Sans\", sans-serif;\n  font-weight: 700;\n  letter-spacing: -0.02em;\n  line-height: 1.1;\n  color: transparent;  /* 保留透明色实现渐变文字 */\n  -webkit-background-clip: text;  /* 添加webkit前缀 */\n  background-clip: text;  /* 标准属性 */\n}\n\n.all-gpts {\n  animation: text-gradient 2s linear infinite;\n  background-image: \n    linear-gradient(90deg, #fb7185, #d946ef, #6366f1, #d946ef, #fb7185),\n    linear-gradient(90deg, #fb7185, #d946ef, #6366f1, #d946ef, #fb7185);\n  background-size: 200% 100%;\n}\n\n/* 滚动条样式 */\n* ::-webkit-scrollbar {\n  width: 10px;\n}\n* ::-webkit-scrollbar-track {\n  background-color: #fff;\n}\n* ::-webkit-scrollbar-thumb {\n  background-color: #ddd6fe;\n}\n* ::-webkit-scrollbar-thumb:hover {\n  background-color: #555;\n}\n\n/* 响应式调整 */\n@media (min-width: 768px) {\n  .inherited-styles-for-exported-element {\n    text-align: center;\n  }\n}\n</style>\n\n<script setup>\nimport { defineEmits, defineProps } from \"vue\";\n\nconst { item } = defineProps(['item']);\nconst emits = defineEmits([\"CustomEvent\"]);\n\nfunction onSendEvent(name, data) {\n  emits(\"CustomEvent\", name, data);\n}\n</script>"
  },
  {
    "path": "GoEasyDesigner/frontend/public/自定义组件/ColorfulText/ColorfulTextAttr.vue",
    "content": "<template>\n  <el-form\n      label-position=\"left\"\n      label-width=\"100px\"\n      style=\"max-width: 460px\"\n  >\n    <el-form-item label=\"标题\">\n      <el-input v-model=\"item.data.title\"/>\n    </el-form-item>\n  </el-form>\n  <teleport to=\"#事件选择器\">\n    <component is=\"common-event-component\" :item=\"item\" :eventName=\"eventName\"/>\n  </teleport>\n</template>\n<script setup>\nimport {defineEmits, defineProps, ref} from \"vue\";\n\nconst emits = defineEmits([\"添加事件被选择\"]); // 声明接受的事件\nconst {item} = defineProps(['item']);\n\nlet eventName = ref([\n  {\"label\": \"自定义事件\", \"value\": \"自定义事件\", \"ext_data\": \"自定义事件(事件名称,事件数据)\"},\n  {\"label\": \"被单击\", \"value\": \"click\"},\n  {\"label\": \"鼠标左键被按下\", \"value\": \"mousedown\"},\n  {\"label\": \"鼠标左键被放开\", \"value\": \"mouseup\"},\n  {\"label\": \"被双击\", \"value\": \"dblclick\"},\n  {\"label\": \"鼠标右键被按下\", \"value\": \"contextmenu\"},\n  {\"label\": \"鼠标位置被移动\", \"value\": \"mousemove\"},\n  {\"label\": \"获得焦点\", \"value\": \"focus\"},\n  {\"label\": \"失去焦点\", \"value\": \"blur\"},\n  {\"label\": \"按下某键\", \"value\": \"keydown\"},\n  {\"label\": \"放开某键\", \"value\": \"keyup\"},\n  {\"label\": \"滚轮被滚动\", \"value\": \"mousewheel\"}\n])\n</script>\n\n"
  },
  {
    "path": "GoEasyDesigner/frontend/public/自定义组件/TimeProgressBar/TimeProgressBar.js",
    "content": "export default {\n    top: \"0\",\n    left: \"0\",\n    width: \"200\",\n    height: \"30\",\n    noPlace: true,\n\n    visible: true,\n    disable: false,\n    size: \"custom\",\n    zIndex: 0,\n    min: 0,\n    max: 100,\n    step: 1,\n    n: 0,\n}\n"
  },
  {
    "path": "GoEasyDesigner/frontend/public/自定义组件/TimeProgressBar/TimeProgressBar.vue",
    "content": "<template>\n  <el-slider\n      :style=\"item.size=='custom'\"\n      style=\"width: 80%;margin:0px 20px\"\n      v-model=\"item.n\"\n      :size=\"item.size=='custom' ?'':item.size\"\n      :min=\"item.min\"\n      :max=\"item.max\"\n      :step=\"item.step\"\n      :format-tooltip=\"formatTooltip\"\n  />\n  <el-button>abv</el-button>\n\n</template>\n\n<script setup>\nimport {defineEmits, defineProps} from \"vue\";\n\nconst {item} = defineProps(['item'])\nconsole.log(\"自定义组件数据\", item);\nconst emits = defineEmits([\"CustomEvent\"]);\nconsole.log(\"自定义组件事件\", emits);\n\n// secondsToClockTime converts seconds to clock time in the format HH:mm:ss.\nfunction secondsToClockTime(secs) {\n  let hours = Math.floor(secs / 3600);\n  secs %= 3600;\n  let minutes = Math.floor(secs / 60);\n  secs %= 60;\n\n  let str = `${hours.toString().padStart(2, '0')}:${minutes.toString().padStart(2, '0')}:${secs.toString().padStart(2, '0')}`;\n  return str;\n}\n\n\nfunction formatTooltip(index){\n\n  return secondsToClockTime(index)\n}\n\n</script>"
  },
  {
    "path": "GoEasyDesigner/frontend/public/自定义组件/TimeProgressBar/TimeProgressBarAttr.vue",
    "content": "<template>\n  <div class=\"属性表格\">\n  <el-form\n      label-position=\"left\"\n      label-width=\"100px\"\n      style=\"max-width: 460px\"\n  >\n      <component is=\"common-properties\" :item=\"item\"/>\n\n      <el-form-item label=\"n\">\n        <el-input-number  v-model=\"props.item.n\"/>\n      </el-form-item>\n      <el-form-item label=\"min\">\n        <el-input-number  v-model=\"props.item.min\"/>\n      </el-form-item>\n      <el-form-item label=\"max\">\n        <el-input-number  v-model=\"props.item.max\"/>\n      </el-form-item>\n      <el-form-item label=\"step\">\n        <el-input-number  v-model=\"props.item.step\"/>\n      </el-form-item>\n      <el-form-item label=\"size\">\n        <el-select v-model=\"props.item.size\" style=\"width: 100%\">\n          <el-option\n              v-for=\"(item, index) in sizeOptions\"\n              :key=\"item\"\n              :label=\"item.label\"\n              :value=\"item.value\"\n          />\n        </el-select>\n      </el-form-item>\n\n\n    </el-form>\n  </div>\n\n  <component is=\"common-event-component\" :item=\"props.item\"  :eventName=\"eventName\"/>\n\n</template>\n<script setup>\nimport {ref, defineProps, defineEmits, onMounted} from \"vue\";\n\nconst emits = defineEmits([\"添加事件被选择\"]); // 声明接受的事件\nconst props = defineProps(['item']);\n\nlet sizeOptions = ref([\n  {\"label\": \"自定义\", \"value\": \"custom\"},\n  {\"label\": \"默认\", \"value\": \"default\"},\n  {\"label\": \"大号\", \"value\": \"large\"},\n  {\"label\": \"小号\", \"value\": \"small\"},\n]);\n\n\nlet eventName = ref([\n\n  {\"label\": \"被单击\", \"value\": \"click\"},\n  {\"label\": \"鼠标左键被按下\", \"value\": \"mousedown\"},\n  {\"label\": \"鼠标左键被放开\", \"value\": \"mouseup\"},\n  {\"label\": \"被双击\", \"value\": \"dblclick\"},\n  {\"label\": \"鼠标右键被按下\", \"value\": \"contextmenu\"},\n  {\"label\": \"鼠标位置被移动\", \"value\": \"mousemove\"},\n  {\"label\": \"获得焦点\", \"value\": \"focus\"},\n  {\"label\": \"失去焦点\", \"value\": \"blur\"},\n  {\"label\": \"按下某键\", \"value\": \"keydown\"},\n  {\"label\": \"放开某键\", \"value\": \"keyup\"},\n  {\"label\": \"滚轮被滚动\", \"value\": \"mousewheel\"}\n])\n\nonMounted(() => {\n  if (localStorage.getItem(\"locale\") === \"English\") {\n    sizeOptions.value.forEach((item) => {\n      item.label = item.value;\n    });\n  }\n});\n\n</script>"
  },
  {
    "path": "GoEasyDesigner/frontend/public/自定义组件/components.json",
    "content": "{\n    \"components\": [\n        {\n            \"componentName\": \"流光边框\",\n            \"组件路径\": \"/自定义组件/流光边框/流光边框.vue\",\n            \"组件默认属性\": \"/自定义组件/流光边框/流光边框.js\",\n            \"组件属性框\": \"/自定义组件/流光边框/流光边框属性.vue\"\n        },\n        {\n            \"componentName\": \"登录框\",\n            \"组件路径\": \"/自定义组件/登录框/登录框.vue\",\n            \"组件默认属性\": \"/自定义组件/登录框/登录框.js\",\n            \"组件属性框\": \"/自定义组件/登录框/登录框属性.vue\"\n        },\n        {\n            \"componentName\": \"TimeProgressBar\",\n            \"组件路径\": \"/自定义组件/TimeProgressBar/TimeProgressBar.vue\",\n            \"组件默认属性\": \"/自定义组件/TimeProgressBar/TimeProgressBar.js\",\n            \"组件属性框\": \"/自定义组件/TimeProgressBar/TimeProgressBarAttr.vue\"\n        },\n        {\n            \"componentName\": \"ColorfulText\",\n            \"组件路径\": \"/自定义组件/ColorfulText/ColorfulText.vue\",\n            \"组件默认属性\": \"/自定义组件/ColorfulText/ColorfulText.js\",\n            \"组件属性框\": \"/自定义组件/ColorfulText/ColorfulTextAttr.vue\"\n        }\n    ]\n} "
  },
  {
    "path": "GoEasyDesigner/frontend/public/自定义组件/流光边框/流光边框.js",
    "content": "\nexport default {\n    top: \"150\",\n    left: \"440\",\n    width: \"240\",\n    height: \"80\",\n    no_place: true,\n    visible: true,\n    disable: false,\n    zIndex: 0,\n    customListening:true,\n\n    fontSize: \"24px\",\n    data:{\n        background: '#000000',\n        title: \"流光边框\",\n    },\n    html:\"\"\n}\n"
  },
  {
    "path": "GoEasyDesigner/frontend/public/自定义组件/流光边框/流光边框.vue",
    "content": "<template>\n  <div class=\"relative h-[100%] w-[100%] overflow-hidden rounded-xl bg-white\" :style=\"{\n    fontSize: item.fontSize,\n  }\">\n    <div\n        class=\"bk relative left-[3px] top-[3px] z-10 flex h-24 h-[calc(100%-6px)] w-[calc(100%-6px)] items-center justify-center rounded-xl text-fuchsia-50\"\n        :style=\"{\n    background: item.data.background\n        }\">\n      <p v-html=\"item.data.title\" class=\"z-20 animate-textclip bg-gradient-to-r from-teal-500 via-purple-500 to-orange-500 bg-[200%_auto] bg-clip-text text-center font-black text-transparent\">\n      </p>\n    </div>\n    <div\n        class=\"absolute left-[-450%] top-[-450%] h-[1000%] w-[1000%] animate-spin bg-[conic-gradient(teal,purple,orange)]\"></div>\n  </div>\n</template>\n<style scoped>\n\n@keyframes textclip {\n  0%,\n  100% {\n    background-position: 200%;\n  }\n  50% {\n    background-position: -200% center;\n  }\n}\n\n.animate-textclip {\n  animation: textclip 4s linear infinite;\n}\n</style>\n\n<script setup>\nimport {defineEmits, defineProps} from \"vue\";\n\nconst {item} = defineProps(['item'])\nconsole.log(\"自定义组件数据\", item);\nconst emits = defineEmits([\"CustomEvent\"]);\nconsole.log(\"自定义组件事件\", emits);\n\nfunction onSendEvent(name, data) {\n  console.log(\"自定义组件\", name, \"发送数据\", item.data);\n  emits(\"CustomEvent\", name, data);\n}\n\n\n</script>"
  },
  {
    "path": "GoEasyDesigner/frontend/public/自定义组件/流光边框/流光边框属性.vue",
    "content": "<template>\n  <el-form\n      label-position=\"left\"\n      label-width=\"100px\"\n      style=\"max-width: 460px\"\n  >\n    <el-form-item label=\"标题\">\n      <el-input v-model=\"item.data.title\"/>\n    </el-form-item>\n  </el-form>\n  <teleport to=\"#事件选择器\">\n    <component is=\"common-event-component\" :item=\"item\" :eventName=\"eventName\"/>\n  </teleport>\n</template>\n<script setup>\nimport {defineEmits, defineProps, ref} from \"vue\";\n\nconst emits = defineEmits([\"添加事件被选择\"]); // 声明接受的事件\nconst {item} = defineProps(['item']);\n\nlet eventName = ref([\n  {\"label\": \"自定义事件\", \"value\": \"自定义事件\", \"ext_data\": \"自定义事件(事件名称,事件数据)\"},\n  {\"label\": \"被单击\", \"value\": \"click\"},\n  {\"label\": \"鼠标左键被按下\", \"value\": \"mousedown\"},\n  {\"label\": \"鼠标左键被放开\", \"value\": \"mouseup\"},\n  {\"label\": \"被双击\", \"value\": \"dblclick\"},\n  {\"label\": \"鼠标右键被按下\", \"value\": \"contextmenu\"},\n  {\"label\": \"鼠标位置被移动\", \"value\": \"mousemove\"},\n  {\"label\": \"获得焦点\", \"value\": \"focus\"},\n  {\"label\": \"失去焦点\", \"value\": \"blur\"},\n  {\"label\": \"按下某键\", \"value\": \"keydown\"},\n  {\"label\": \"放开某键\", \"value\": \"keyup\"},\n  {\"label\": \"滚轮被滚动\", \"value\": \"mousewheel\"}\n])\n</script>\n\n"
  },
  {
    "path": "GoEasyDesigner/frontend/public/自定义组件/登录框/登录框.js",
    "content": "export default {\n    top: \"150\",\n    left: \"440\",\n    width: \"350\",\n    height: \"350\",\n    no_place: true,\n    visible: true,\n    disable: false,\n    zIndex: 0,\n    customListening:true,\n\n    HTML: \"\",\n    data: {\n        username: 'admin',\n        password: 'admin',\n        password_error_msg: '',\n        username_error_msg: '',\n    },\n}\n"
  },
  {
    "path": "GoEasyDesigner/frontend/public/自定义组件/登录框/登录框.vue",
    "content": "<template>\n  <div class=\"w-full max-w-xs\">\n    <form class=\"bg-white shadow-md rounded px-8 pt-6 pb-8 mb-4\">\n      <div class=\"mb-4\">\n        <label class=\"block text-gray-700 text-sm font-bold mb-2\" for=\"username\">\n          用户名\n        </label>\n        <!-- Move v-model to the input element -->\n        <input v-model=\"item.data.username\" class=\"shadow appearance-none border rounded w-full py-2 px-3 text-gray-700 leading-tight focus:outline-none focus:shadow-outline\" id=\"username\" type=\"text\" placeholder=\"用户名\">\n        <p v-if=\"item.data.username_error_msg\" class=\"text-red-500 text-xs italic\">{{item.data.username_error_msg}}</p>\n\n      </div>\n      <div class=\"mb-6\">\n        <label class=\"block text-gray-700 text-sm font-bold mb-2\" for=\"password\">\n          密码\n        </label>\n        <!-- Move v-model to the input element -->\n        <input v-model=\"item.data.password\" class=\"shadow appearance-none border rounded w-full py-2 px-3 text-gray-700 mb-3 leading-tight focus:outline-none focus:shadow-outline\" id=\"password\" type=\"password\" placeholder=\"******************\">\n        <p v-if=\"item.data.password_error_msg\" class=\"text-red-500 text-xs italic\">{{item.data.password_error_msg}}</p>\n      </div>\n      <div class=\"flex items-center justify-between\">\n        <button\n            @click=\"onSendEvent('登录按钮被点击',item.data)\"\n            class=\"bg-blue-500 hover:bg-blue-700 text-white font-bold py-2 px-4 rounded focus:outline-none focus:shadow-outline\" type=\"button\">\n          登录\n        </button>\n        <a\n            @click=\"onSendEvent('忘记密码按钮被点击',item.data)\"\n\n            class=\"inline-block align-baseline font-bold text-sm text-blue-500 hover:text-blue-800\" href=\"#\">\n          忘记密码?\n        </a>\n      </div>\n    </form>\n  </div>\n</template>\n\n<script setup>\nimport {defineEmits, defineProps} from \"vue\";\nconst { item } = defineProps(['item'])\nconsole.log(\"自定义组件数据\", item);\nconst emits = defineEmits([\"CustomEvent\"]);\nconsole.log(\"自定义组件事件\", emits);\nfunction onSendEvent(name,data) {\n  console.log(\"自定义组件\",name,\"发送数据\", item.data);\n  emits(\"CustomEvent\",name,data);\n}\n\n</script>"
  },
  {
    "path": "GoEasyDesigner/frontend/public/自定义组件/登录框/登录框属性.vue",
    "content": "<template>\n  <el-form\n      label-position=\"left\"\n      label-width=\"100px\"\n      style=\"max-width: 460px\"\n  >\n    <el-form-item label=\"用户名\">\n      <el-input v-model=\"item.data.username\"/>\n    </el-form-item>\n    <el-form-item label=\"密码\">\n      <el-input v-model=\"item.data.password\"/>\n    </el-form-item>\n    <el-form-item label=\"密码提示框\">\n      <el-input v-model=\"item.data.password_error_msg\"/>\n    </el-form-item>\n    <el-form-item label=\"用户名提示框\">\n      <el-input v-model=\"item.data.username_error_msg\"/>\n    </el-form-item>\n  </el-form>\n  <teleport to=\"#事件选择器\">\n    <component is=\"common-event-component\" :item=\"item\" :eventName=\"eventName\"/>\n  </teleport>\n</template>\n<script setup>\nimport {defineEmits, defineProps, ref} from \"vue\";\n\nconst emits = defineEmits([\"添加事件被选择\"]); // 声明接受的事件\nconst {item} = defineProps(['item']);\n\nlet eventName = ref([\n  {\"label\": \"自定义事件\", \"value\": \"自定义事件\", \"ext_data\": \"自定义事件(事件名称,事件数据)\"},\n  {\"label\": \"登录按钮被点击\", \"value\": \"登录按钮被点击\"},\n  {\"label\": \"忘记密码被点击\", \"value\": \"忘记密码按钮被点击\"},\n])\n</script>\n\n"
  },
  {
    "path": "GoEasyDesigner/frontend/src/Helper.js",
    "content": "function registerBoxComponentNames(app, uiName, meta) {\n    let ComponentNames = []\n    const componentsContext = meta;\n\n    const keys = Object.keys(componentsContext).map((path) => {\n        const name = path.split('/').pop().replace(/\\.\\w+$/, '');\n        const module = componentsContext[path];\n        //如果名称后面是 属性 或者是 Attr 就不要加入\n        if (!(name.endsWith(\"属性\") || name.endsWith(\"Attr\"))) {\n            ComponentNames.push(name)\n        }\n        // console.log(\"注册组件\", uiName, name)\n        app.component(uiName + name, module.default);\n        // app.component(name, module.default);\n        return name;\n    });\n\n    return ComponentNames;\n\n}\n\nfunction registerBoxComponentDefaultValue(app, uiName, meta) {\n    let ComponentDefaultValue = {}\n    const componentsContext = meta;\n\n    const keys = Object.keys(componentsContext).map((path) => {\n        const name = path.split('/').pop().replace(/\\.\\w+$/, '');\n        const module = componentsContext[path];\n        ComponentDefaultValue[name] = module.default;\n        return name;\n    });\n\n    return ComponentDefaultValue;\n}\n\nexport default {\n    registerBoxComponentNames,\n    registerBoxComponentDefaultValue\n}"
  },
  {
    "path": "GoEasyDesigner/frontend/src/action/app.js",
    "content": "import {useAppStore} from '@/stores/appStore.js'\r\nimport * as goFc from \"../../wailsjs/go/main/App\";\r\nimport {\r\n    E保存,\r\n    E保存件对话框,\r\n    E停止命令,\r\n    E取文件修改时间,\r\n    E打开文件对话框,\r\n    E检查更新,\r\n    E读入文件,\r\n    E运行命令\r\n} from \"../../wailsjs/go/main/App\";\r\nimport {取父目录, 生成辅助代码} from \"@/public\";\r\nimport {ElMessage} from \"element-plus\";\r\nimport {BrowserOpenURL, EventsOn} from \"../../wailsjs/runtime\";\r\n// 使用 $refs 来引用滚动容器\r\nimport {useI18n} from \"vue-i18n\";\r\n\r\nexport const appAction = {};\r\nlet store = {}; // 我想在这里作类型标注 useAppStore()怎么处理怎么写\r\nlet t = {}\r\n\r\nconst 代码编辑器类 = {};\r\ntry {\r\n    EventsOn(\"文件被修改\", function (data) {\r\n        console.log(\"文件被修改\", data)\r\n        setTimeout(function () {\r\n            appAction.检查代码编辑器的内容是否为最新的()\r\n\r\n        }, 500)\r\n    })\r\n} catch (e) {\r\n\r\n}\r\n代码编辑器类.打开 = async function (文件路径) {\r\n    store.代码编辑器.路径 = 文件路径\r\n    store.代码编辑器.内容 = await E读入文件(文件路径)\r\n    store.代码编辑器.文件时间 = await E取文件修改时间(文件路径)\r\n    console.log(\"代码编辑器.文件时间\", store.代码编辑器.文件时间)\r\n    console.log(\"代码编辑器.路径\", store.代码编辑器.路径)\r\n    goFc.E添加文件监视(文件路径)\r\n\r\n    return store.代码编辑器.内容\r\n}\r\n\r\nappAction.代码编辑器操作 = 代码编辑器类\r\n\r\nappAction.init = function () {\r\n    appAction.store = useAppStore()\r\n    store = useAppStore()\r\n    t = useI18n().t\r\n}\r\nappAction.新建项目 = function () {\r\n    store.显示新建项目对话框 = true\r\n\r\n}\r\nappAction.打开项目 = async function () {\r\n    const result = await goFc.E打开选择文件夹对话框();\r\n    if (result === \"\") {\r\n        //弹出饿了么信息框 提示创建失败\r\n        ElMessage({\r\n            message: '未选择项目目录',\r\n            type: 'error',\r\n        });\r\n        return false\r\n    }\r\n\r\n    let files = await goFc.E搜索文件(result,\"design.json\")\r\n    if (files.length === 0){\r\n        //弹出饿了么信息框 提示创建失败\r\n        ElMessage({\r\n            message: '项目目录下没有找到design.json文件',\r\n            type: 'error',\r\n        });\r\n        return false\r\n    }\r\n    console.log(\"搜索文件\",files)\r\n    appAction._打开文件加载界面(files[0])\r\n    return true\r\n\r\n}\r\n\r\nappAction.新建 = function () {\r\n    function 创建窗口() {\r\n        return {\r\n            \"id\": \"1\",\r\n            \"name\": t('componentName.Window'),\r\n            \"componentName\": 'Window',\r\n            \"text\": t('componentName.Window'),\r\n            \"top\": \"0\",\r\n            \"left\": \"0\",\r\n            \"width\": \"500\",\r\n            \"height\": \"400\",\r\n            \"background\": \"rgba(0, 0, 0, 0.05)\",\r\n            \"noPlace\": false,\r\n            \"noDrag\": true,\r\n            \"disable\": false,\r\n            \"visible\": true,\r\n            \"zIndex\": 0,\r\n            \"childComponents\": []\r\n        }\r\n    }\r\n\r\n    appAction.store.list = [创建窗口()]\r\n    appAction.store.indexMap = {}\r\n    appAction.store.代码编辑器.内容 = \"\"\r\n}\r\nappAction.打开 = async function () {\r\n    if (appAction.store.客户端模式 == false) {\r\n        const input = document.createElement('input')\r\n        input.type = 'file'\r\n        input.accept = '.json'\r\n        input.onchange = e => {\r\n            const file = e.target.files[0]\r\n            const reader = new FileReader()\r\n            reader.readAsText(file)\r\n            reader.onload = () => {\r\n                const data = reader.result\r\n                console.log(data)\r\n                // 初始化界面(data)\r\n                store.list = JSON.parse(data)\r\n                store.取组件列表()\r\n\r\n            }\r\n        }\r\n        input.click()\r\n\r\n        return\r\n    }\r\n\r\n    console.log(\"打开\")\r\n    let 文件路径 = await E打开文件对话框();\r\n    if (文件路径 === \"\") {\r\n        return\r\n    }\r\n    appAction._打开文件加载界面(文件路径)\r\n\r\n}\r\nappAction._打开项目设计文件 = function (filepath) {\r\n    store.项目信息.设计文件路径 = filepath\r\n    store.项目信息.窗口事件文件路径 = 取父目录(filepath) + \"/event.js\"\r\n    store.项目信息.辅助代码文件路径 = 取父目录(filepath) + \"/__aux_code.js\"\r\n    store.项目信息.项目管理目录 = 取父目录(filepath)\r\n    //检查路径设计文件路径是否包含 renderer\r\n    if (store.项目信息.设计文件路径.indexOf(\"renderer\") == -1){\r\n        store.项目信息.项目根目录 = 取父目录(取父目录(取父目录(取父目录(filepath))))\r\n    }else{\r\n        store.项目信息.项目根目录 = 取父目录(取父目录(取父目录(取父目录(取父目录(filepath)))))\r\n\r\n    }\r\n}\r\n\r\nappAction._打开文件加载界面 = async function (filepath) {\r\n    appAction._打开项目设计文件(filepath)\r\n\r\n    console.log(\"设计文件路径\", store.项目信息.设计文件路径)\r\n    console.log(\"窗口事件文件路径\", store.项目信息.窗口事件文件路径)\r\n    let 文件内容 = await E读入文件(store.项目信息.设计文件路径)\r\n    // console.log(文件内容)\r\n\r\n    store.list = JSON.parse(文件内容)\r\n\r\n    // await nextTick();\r\n    store.取组件列表()\r\n    store.当前拖拽组件数据 = store.组件通过id查找结构(\"1\")\r\n\r\n    await appAction.代码编辑器操作.打开(store.项目信息.窗口事件文件路径)\r\n    store.项目管理刷新()\r\n\r\n}\r\n\r\ntry {\r\n    EventsOn(\"运行命令\", function (data) {\r\n        console.log(\"运行命令\", data)\r\n        store.调试信息 = store.调试信息 + \"<br / >\" + data\r\n        store.scrollContainer.scrollTop = store.scrollContainer.scrollHeight;\r\n        if (data == \"命令已完成\") {\r\n            store.运行按钮文本 = t(\"app.run\");\r\n            store.编译按钮文本 = t(\"app.compile\");\r\n\r\n        }\r\n    })\r\n} catch (e) {\r\n    console.log('非客户端模式')\r\n}\r\n\r\nfunction 键盘按下(event, index) {\r\n    console.log(\"键盘按下\", event.key, index)\r\n    if (event.key == 'Delete') {\r\n\r\n    }\r\n}\r\n\r\n\r\nappAction.保存设计文件 = async function () {\r\n    let njson = JSON.stringify(store.list, null, 2)\r\n    console.log(\"保存设计文件\", store)\r\n    let 辅助代码 = 生成辅助代码(store.list[0].childComponents)\r\n    console.log(\"辅助代码\", 辅助代码)\r\n\r\n\r\n    if (store.客户端模式 == false) {\r\n        //浏览器打开就发起保存\r\n        const blob = new Blob([njson], {type: 'application/json'})\r\n        const link = document.createElement('a')\r\n        link.href = URL.createObjectURL(blob)\r\n        link.download = 'design.json'\r\n        link.click()\r\n\r\n        const blob2 = new Blob([辅助代码], {type: 'application/json'})\r\n        const link2 = document.createElement('a')\r\n        link2.href = URL.createObjectURL(blob2)\r\n        link2.download = '__aux_code.js'\r\n        link2.click()\r\n        return;\r\n    }\r\n\r\n    // 客户端直接保存\r\n    async function _保存(p, d) {\r\n        d = String(d)\r\n        p = String(p)\r\n        await E保存(p, d)\r\n    }\r\n\r\n    if (store.项目信息.设计文件路径 == \"\") {\r\n        let 设计文件路径 = await E保存件对话框()\r\n        if (设计文件路径 === \"\") {\r\n            ElMessage({message: \"未选择文件\", type: 'success', duration: 3000});\r\n            return\r\n        }\r\n        appAction._打开项目设计文件(设计文件路径)\r\n    }\r\n\r\n    if (store.代码编辑器.内容 !== \"\") {\r\n        if (store.代码编辑器.路径 === store.项目信息.窗口事件文件路径) {\r\n            await _保存(store.项目信息.窗口事件文件路径, store.代码编辑器.内容)\r\n            store.代码编辑器.文件时间 = await E取文件修改时间(store.项目信息.窗口事件文件路径)\r\n            console.log(\"保存后 代码编辑器.文件时间\", store.代码编辑器.文件时间)\r\n        }\r\n        await _保存(store.项目信息.辅助代码文件路径, 辅助代码)\r\n    }\r\n    await _保存(store.项目信息.设计文件路径, njson)\r\n\r\n}\r\nappAction.检查代码编辑器的内容是否为最新的 = async function () {\r\n    if (store.代码编辑器.内容 !== \"\") {\r\n        let 文件时间 = await E取文件修改时间(store.项目信息.窗口事件文件路径)\r\n        console.log(\"文件时间\", 文件时间)\r\n        console.log(\"store.代码编辑器.文件时间\", store.代码编辑器.文件时间)\r\n        if (文件时间 > store.代码编辑器.文件时间) {\r\n            console.log(\"发现变化代码已更新\")\r\n            appAction.代码编辑器操作.打开(store.项目信息.窗口事件文件路径)\r\n        } else {\r\n            console.log(\"不需要更新\")\r\n        }\r\n    }\r\n}\r\nappAction.设计区域被改变 = function () {\r\n    // console.log(\"设计区域被改变\",store.选择夹_中间现行选中项 )\r\n    // if(store.选择夹_中间现行选中项 == \"1\"){\r\n    //     appAction.检查代码编辑器的内容是否为最新的()\r\n    //\r\n    // }\r\n\r\n}\r\n\r\n\r\nappAction.运行 = async function () {\r\n    if (store.客户端模式 == false) {\r\n        //弹出提示\r\n        ElMessage({\r\n            message: \"当前为浏览器模式 不能运行 请自行在项目根目录运行 wails dev\",\r\n            type: 'success',\r\n            duration: 3000, // 设置显示时间为5秒，单位为毫秒\r\n        });\r\n        return\r\n    }\r\n    if (store.项目信息.项目根目录 == \"\") {\r\n        ElMessage({\r\n            message: \"请先保存\",\r\n            type: 'success',\r\n            duration: 3000, // 设置显示时间为5秒，单位为毫秒\r\n        });\r\n        return\r\n    }\r\n\r\n\r\n    if (store.运行按钮文本 == t(\"app.run\")) {\r\n        store.运行按钮文本 = t(\"app.stop\")\r\n        store.调试信息 = t(\"app.inOperation\")\r\n        store.选择夹_底部现行选中项 = \"1\"\r\n        let ptext = await E读入文件(store.项目信息.项目根目录+\"/package.json\")\r\n        // console.log(\"ptext\",ptext)\r\n        // console.log(\"store.项目信息.项目根目录\",store.项目信息.项目根目录)\r\n        let devShell = \"wails dev -nocolour\"\r\n        try{\r\n            let pjson = JSON.parse(ptext)\r\n            if (pjson.scripts.dev !== undefined){\r\n                devShell = 'npm run dev'\r\n            }\r\n        }catch (e) {\r\n\r\n        }\r\n        console.log(\"devShell\",devShell)\r\n        console.log(\"项目根目录\",store.项目信息.项目根目录)\r\n\r\n        E运行命令(store.项目信息.项目根目录, devShell)\r\n\r\n        // E运行命令(store.项目信息.项目根目录, \"wails dev -nocolour\")\r\n    } else {\r\n        store.调试信息 = t('app.stopped')\r\n        store.运行按钮文本 = t(\"app.run\")\r\n        // E停止命令()\r\n    }\r\n\r\n}\r\nappAction.编译 = function () {\r\n    if (store.客户端模式 == false) {\r\n        //弹出提示\r\n        ElMessage({\r\n            message: \"当前为浏览器模式 不能编译 请自行在项目根目录运行 wails build\",\r\n            type: 'success',\r\n            duration: 3000, // 设置显示时间为5秒，单位为毫秒\r\n        });\r\n        return\r\n    }\r\n    if (store.项目信息.项目根目录 == \"\") {\r\n        ElMessage({\r\n            message: \"请先保存\",\r\n            type: 'success',\r\n            duration: 3000, // 设置显示时间为5秒，单位为毫秒\r\n        });\r\n        return\r\n    }\r\n    if (store.编译按钮文本 == t(\"app.compile\")) {\r\n        store.编译按钮文本 = t(\"app.stop\")\r\n        store.调试信息 = t(\"app.inCompile\")\r\n        store.选择夹_底部现行选中项 = \"1\"\r\n        E运行命令(store.项目信息.项目根目录, \"wails build\")\r\n    } else {\r\n        store.调试信息 = \"已停止 ...\"\r\n        store.编译按钮文本 = t(\"app.compile\")\r\n        E停止命令()\r\n    }\r\n\r\n}\r\n\r\nappAction.帮助 = function () {\r\n    if (store.客户端模式) {\r\n        BrowserOpenURL(\"https://github.com/duolabmeng6/GoEasyDesigner\")\r\n    } else {\r\n        //浏览器打开新页面\r\n        window.open(\"https://github.com/duolabmeng6/GoEasyDesigner\")\r\n    }\r\n}\r\n\r\nappAction.下载客户端 = function () {\r\n    if (store.是否为window系统) {\r\n        window.open(store.window下载地址)\r\n    } else {\r\n        window.open(store.mac下载地址)\r\n    }\r\n\r\n}\r\n\r\n\r\nappAction.运行环境检测 = function () {\r\n    if (store.客户端模式 == false) {\r\n        //弹出提示\r\n        ElMessage({\r\n            message: \"当前为浏览器模式 不能运行 请自行在项目根目录运行 wails doctor\",\r\n            type: 'success',\r\n            duration: 3000, // 设置显示时间为5秒，单位为毫秒\r\n        });\r\n        return\r\n    }\r\n    store.选择夹_底部现行选中项 = \"1\"\r\n    store.调试信息 = \"运行环境检测 ...\"\r\n    let 结果;\r\n    结果 = E运行命令(store.项目信息.项目根目录, \"wails doctor\")\r\n    console.log(\"结果\")\r\n    // 检查node是否安装\r\n\r\n}\r\n\r\nappAction.检查更新 = function () {\r\n    E检查更新()\r\n}\r\n\r\nexport default {\r\n    appAction,\r\n}"
  },
  {
    "path": "GoEasyDesigner/frontend/src/app10.vue",
    "content": "<template>\n  <div class=\"grid\" style=\"\n    width:100vw;\n    height: 100vh;\n    display: grid;\n    grid-template-areas: 'header toolbtn toolbtn'\n    'left main right'\n    'footer footer footer';\n    ;\n    grid-template-columns: auto 6fr 2fr;\n    grid-template-rows: 0.5fr 9fr 1.5fr;\n    overflow: hidden;\n    gap: 12px;\n    padding: 8px;\n  \">\n    <div id=\"header\" style=\"grid-area: header;\">\n      <div style=\"\n      display: grid;\n      justify-items: center;\n      align-items: center;\n      height: 100%;\n\">\n        <div class=\"text-2xl\" style=\"color:#383838;\">窗口设计师<span class=\"text-[9px]\"\n                                                                     style=\"color: #999999\">v1.0.0</span></div>\n      </div>\n    </div>\n    <div id=\"toolbtn\" style=\"grid-area: toolbtn\">\n      <div style=\"\n      display: grid;\n      justify-items: start;\n      align-items: center;\n      height: 100%;\n\">\n        <ToolBtn/>\n      </div>\n    </div>\n    <div id=\"left\" ref=\"tabLeftRef\" style=\"\n      grid-area: left;\n      min-width:300px;\n      width:300px;\n      overflow: hidden;\n      box-shadow: 5px 5px 10px #e5e5e5;\n      position: relative;\n    \">\n      <t-tabs v-model=\"tabLeftVal\" style=\"height: 100%\" theme=\"card\">\n        <t-tab-panel label=\"属性\" style=\"height: 100%\" value=\"0\">\n\n          <ComponentLeft v-if=\"store\" :store=\"store\"/>\n\n        </t-tab-panel>\n        <t-tab-panel label=\"支持库\" value=\"1\">\n          <p style=\"padding: 25px\">选项卡2</p>\n        </t-tab-panel>\n        <t-tab-panel label=\"项目管理\" value=\"2\">\n          <p style=\"padding: 25px\">选项卡3</p>\n        </t-tab-panel>\n      </t-tabs>\n      <DraggableDivider :target-element-id=\"'left'\"></DraggableDivider>\n\n    </div>\n    <div id=\"main\" ref=\"tabMainRef\" style=\"grid-area: main;\n      box-shadow: 5px 5px 10px #e5e5e5;\n      position: relative;\n\">\n      <t-tabs v-model=\"tabMainVal\" style=\"height: 100%\" theme=\"card\">\n        <t-tab-panel label=\"设计界面\" style=\"height: 100%\" value=\"0\">\n\n          <div id=\"designer\" style=\"position: relative;    margin: 8px;\"\n          >\n            <component is=\"RenderDesignComponent\" v-for=\"(item, index) in store.list\" :key=\"index\" :item=\"item\"/>\n          </div>\n\n        </t-tab-panel>\n        <t-tab-panel label=\"代码编辑\" value=\"1\">\n          <div style=\"width: 100%;height: 1000px;\">\n            <component is=\"代码编辑器\" v-model:value=\"store.代码编辑器内容\"\n                       height=\"100%\"\n            />\n          </div>\n\n        </t-tab-panel>\n      </t-tabs>\n\n\n    </div>\n    <div id=\"right\" style=\"grid-area: right;min-width:240px;\n      box-shadow: 5px 5px 10px #e5e5e5;\n      position: relative;\n\">\n      <DraggableDivider :target-element-id=\"'right'\" direction=\"left\"></DraggableDivider>\n\n      <t-tabs v-model=\"tabRightVal\" style=\"height: 100%\" theme=\"card\">\n\n        <t-tab-panel class=\"tab-right\" label=\"系统组件\" style=\"height: 100%;\n\" value=\"0\">\n          <div style=\"padding: 8px 8px\">\n            <ComponentTreeSelectBox style=\"width: 100%\"/>\n          </div>\n          <t-collapse :default-value=\"[0]\" borderless=\"true\" @change=\"handlePanelChange\">\n            <t-collapse-panel destroy-on-collapse header=\"布局容器\">\n              <div style=\"display: grid;\ngrid-template-columns: 1fr 1fr;\ngap: 4px;\n\">\n\n                <t-button v-for=\"(item, index) in BoxComponentNames_el\" block draggable=\"true\"\n                          style=\"color: #383838\"\n                          variant=\"outline\"\n                          @dragstart=\"uiDragStart($event, item,'el')\"\n                >\n                  <template #icon>\n                    <add-icon/>\n                  </template>\n                  {{ item }}\n                </t-button>\n\n              </div>\n\n            </t-collapse-panel>\n            <t-collapse-panel destroy-on-collapse header=\"功能组件\">\n            </t-collapse-panel>\n            <t-collapse-panel destroy-on-collapse header=\"数据容器\">\n            </t-collapse-panel>\n          </t-collapse>\n\n        </t-tab-panel>\n        <t-tab-panel label=\"自定义组件\" value=\"1\">\n        </t-tab-panel>\n\n      </t-tabs>\n\n    </div>\n    <div id=\"footer\" style=\"grid-area: footer;\nposition: relative;\n      box-shadow: 5px 5px 10px #e5e5e5;\n\n\">\n\n      <DraggableDivider :target-element-id=\"'footer'\" direction=\"top\"></DraggableDivider>\n\n      <t-tabs v-model=\"tabFooterVal\" style=\"height: 100%\" theme=\"card\">\n        <t-tab-panel label=\"帮助信息\" style=\"height: 100%\" value=\"0\">\n        </t-tab-panel>\n        <t-tab-panel label=\"调试信息\" value=\"1\">\n          <p style=\"padding: 25px\">选项卡2</p>\n        </t-tab-panel>\n      </t-tabs>\n    </div>\n\n  </div>\n</template>\n\n<style>\n.tab-right .t-collapse-panel__wrapper .t-collapse-panel__body {\n  background: #FFF !important;\n}\n\n.tab-right .t-collapse-panel__wrapper .t-collapse-panel__content {\n  padding: 8px;\n  display: grid;\n  align-items: center;\n  justify-content: center;\n}\n\n.t-collapse-panel__wrapper .t-collapse-panel__header {\n  font-size: 12px !important;\n  font-weight: normal !important;\n}\n</style>\n\n<script setup>\nimport {ref, nextTick, onMounted, inject} from \"vue\";\nimport ComponentLeft from \"./components/designer/left/ComponentLeft.vue\";\nimport {AddIcon} from \"tdesign-icons-vue-next\";\nimport ToolBtn from \"./components/designer/header/ToolBtn.vue\";\nimport ComponentTreeSelectBox from \"./components/designer/left/TreeSelectBox.vue\";\nimport DraggableDivider from \"./components/designer/public/DraggableDivider.vue\";\nimport {MessagePlugin} from 'tdesign-vue-next';\nimport {useAppStore} from \"./stores/appStore.js\";\nimport {appAction} from '@/action/app.js';\nimport {ElMessage} from \"element-plus\";\nimport {E保存, E取配置信息} from \"../wailsjs/go/main/App\";\nimport releases_latest from \"../public/releases_latest.json\";\n\n\nconst store = useAppStore()\nstore.init()\n\nconst tabLeftVal = ref('0');\nconst tabRightVal = ref('0');\nconst tabFooterVal = ref('0');\nconst tabMainVal = ref('0')\nconst currentItem = ref([0]);\nconst tabLeftRef = ref(null)\nconst tabMainRef = ref(null)\n\nconst handlePanelChange = (val) => {\n  currentItem.value = val;\n};\n\nasync function ReSize() {\n  await nextTick()\n  let contentHeight = tabLeftRef.value.clientHeight\n  let headerHeight = tabLeftRef.value.querySelector('.t-tabs__header').clientHeight\n  // console.log(\"headerHeight\", headerHeight)\n  // console.log(\"contentHeight\", contentHeight)\n  tabLeftRef.value.querySelector('.t-tabs__content').style.height = (contentHeight - headerHeight) + 'px'\n\n  tabMainRef.value.querySelector('.t-tabs__content').style.height = (contentHeight - headerHeight) + 'px'\n\n}\n\nfunction init_tailwindcss() {\n\n  const script = document.createElement('script')\n  script.src = '/cdn.tailwindcss.com_3.3.3.js'\n  document.body.appendChild(script)\n  script.onload = () => {\n    console.log('tailwindcss.com_3.3.3.js 加载完成')\n    tailwind.config = {\n      plugins: [\n        function ({addBase}) {\n          addBase({\n            \".el-button\": {\n              \"background-color\": \"var(--el-button-bg-color,var(--el-color-white))\"\n            }\n          });\n        }\n      ]\n    }\n  }\n\n}\n\nonMounted(() => {\n  console.log(\"重新加载\")\n  appAction.init()\n  appAction.新建()\n  store.取组件列表()\n  store.当前拖拽组件数据 = store.组件通过id查找结构(\"1\")\n\n  try {\n    E取配置信息().then((res) => {\n      res = JSON.parse(res)\n      console.log(\"取配置信息\", res)\n      store.项目信息.IDE插件地址 = \"http://127.0.0.1:\" + res.IDE插件端口号\n      store.项目信息.设计文件路径 = res.设计文件路径\n      if (store.项目信息.设计文件路径 != \"\") {\n        appAction._打开文件加载界面(store.项目信息.设计文件路径)\n      }\n\n    })\n  } catch (e) {\n\n  }\n  console.log(\"store.当前组件索引\", store.当前组件索引)\n  document.addEventListener(\"keydown\", handleKeyDown);\n  setTimeout(() => {\n    store.bodyLoaded = true\n  }, 200)\n  版本号自动检测()\n\n\n  ReSize()\n  window.addEventListener('resize', function () {\n    console.log(\"重新计算高度\")\n    ReSize()\n  })\n  init_tailwindcss()\n})\n\nconst BoxComponentDefaultValue_el = inject(\"BoxComponentDefaultValue_el\")\nconsole.log(\"BoxComponentDefaultValue_el\", BoxComponentDefaultValue_el)\n\nfunction uiDragStart(event, 组件名称, uiName) {\n  let 新属性 = {}\n  try {\n    if (uiName == \"el\") {\n      新属性 = JSON.parse(JSON.stringify(BoxComponentDefaultValue_el[组件名称]))\n    }\n  } catch (e) {\n  }\n\n  if (新属性 == \"\") {\n    console.log(\"未配置默认属性\")\n    //弹出提示\n    ElMessage({\n      message: \"组件未配置默认属性\",\n      type: 'success',\n      duration: 3000, // 设置显示时间为5秒，单位为毫秒\n    });\n    //阻止默认行为和停止事件\n    event.preventDefault()\n    event.stopPropagation()\n    return\n  }\n  let k = store.获取索引(组件名称)\n\n  新属性.id = store.获取随机id()\n\n  //避免名称重复导致后续代码出问题\n  for (let i = 0; i < 100; i++) {\n    let 名称是否存在 = store.递归查找名称(store.list,   k)\n    // console.log(\"名称是否存在\", 名称是否存在)\n    if (名称是否存在) {\n      k = store.获取索引(组件名称)\n    } else {\n      break\n    }\n  }\n\n  新属性.componentName = 组件名称\n  新属性.名称 = 组件名称 + k\n  新属性.标题 = 组件名称 + k\n  新属性.componentName = uiName + 组件名称\n\n  if (组件名称 == \"按钮\") {\n  }\n  if (组件名称 == \"布局容器\") {\n    新属性.border = \"1px solid black\"\n  }\n  if (组件名称 == \"选择夹\") {\n    let id = 新属性.id\n    for (var i = 0; i < 2; i++) {\n      新属性.子组件[i].id = store.获取随机id()\n      新属性.子组件[i].名称 = \"内容区域\" + store.获取索引(\"内容区域\")\n      新属性.子组件[i].标题 = \"选项卡\" + store.获取索引(\"选项卡\")\n      新属性.子组件[i].父容器id = id\n    }\n  }\n  if (组件名称 == \"开关\") {\n  }\n  if (组件名称 == \"编辑框\") {\n    新属性.内容 = 新属性.标题\n  }\n\n  if (组件名称 == \"弹性布局\") {\n    let id = 新属性.id\n    for (var i = 0; i < 3; i++) {\n      新属性.子组件[i].id = store.获取随机id()\n      新属性.子组件[i].名称 = \"内容区域\" + store.获取索引(\"内容区域\")\n      新属性.子组件[i].父容器id = id\n    }\n  }\n\n  if (组件名称 == \"常用布局\") {\n    let id = 新属性.id\n    var i = 0;\n    新属性.子组件[i].id = store.获取随机id()\n    新属性.子组件[i].名称 = \"内容区域header\" + store.获取索引(\"内容区域header\")\n    新属性.子组件[i].父容器id = id\n    i++;\n    新属性.子组件[i].id = store.获取随机id()\n    新属性.子组件[i].名称 = \"内容区域main\" + store.获取索引(\"内容区域main\")\n    新属性.子组件[i].父容器id = id\n    i++;\n    新属性.子组件[i].id = store.获取随机id()\n    新属性.子组件[i].名称 = \"内容区域footer\" + store.获取索引(\"内容区域footer\")\n    新属性.子组件[i].父容器id = id\n    i++;\n    新属性.子组件[i].id = store.获取随机id()\n    新属性.子组件[i].名称 = \"内容区域aside\" + store.获取索引(\"内容区域aside\")\n    新属性.子组件[i].父容器id = id\n    i++;\n  }\n\n  store.当前拖拽组件数据 = 新属性\n}\n\nfunction handleKeyDown(event) {\n  // 如果按下的是Cmd + S（Mac）或Ctrl + S（Windows/Linux）\n  console.log(\"按下某键盘\", event.key)\n  // 键盘按下(event, store.当前组件索引)\n  if (event.key === \"Delete\") {\n    event.preventDefault(); // 阻止浏览器默认保存行为\n    // 在这里执行你想要的操作，比如保存数据或触发特定的方法\n    console.log(\"按下了删除 Delete\", store.当前拖拽组件数据);\n\n    store.递归删除id(store.list, store.当前组件索引)\n\n\n  }\n  if ((event.metaKey || event.ctrlKey) && event.key === \"z\") {\n    //撤销\n    console.log(\"撤销\");\n    //屏蔽浏览器默认行为\n    event.preventDefault();\n\n    // console.log(\"store.HistoryManager.查看当前历史所有记录()\", store.HistoryManager.查看当前历史所有记录())\n    // console.log(\"store.HistoryManager.当前位置()\", store.HistoryManager.当前位置)\n\n\n    let 旧的数据 = store.HistoryManager.撤销(JSON.stringify(store.list))\n    // console.log(\"旧的数据\", 旧的数据)\n    if (旧的数据 == null || 旧的数据 == undefined) {\n      return\n    }\n\n    store.list = JSON.parse(旧的数据)\n\n  }\n  if ((event.metaKey || event.ctrlKey) && event.key === \"y\") {\n    //恢复\n    console.log(\"恢复\");\n    event.preventDefault();\n    let 旧的数据 = store.HistoryManager.恢复(JSON.stringify(store.list))\n    // console.log(\"旧的数据\", 旧的数据)\n    if (旧的数据 == null || 旧的数据 == undefined) {\n      return\n    }\n    store.list = JSON.parse(旧的数据)\n  }\n  if ((event.metaKey || event.ctrlKey) && event.key === \"s\") {\n    event.preventDefault(); // 阻止浏览器默认保存行为\n    // 在这里执行你想要的操作，比如保存数据或触发特定的方法\n    console.log(\"按下了保存 Cmd/Ctrl + S\");\n    if (store.客户端模式 == false) {\n      //弹出消息框 当前为浏览器模式 不能保存 请手动保存\n      ElMessage({\n        message: \"当前为浏览器模式 不能保存 请手动保存. 如果需要保存请使用客户端\",\n        type: 'success',\n        duration: 3000, // 设置显示时间为5秒，单位为毫秒\n      });\n      return\n    }\n\n    if (store.项目信息.窗口事件文件路径 != \"\") {\n      E保存(store.项目信息.窗口事件文件路径, store.代码编辑器内容).then((res) => {\n        console.log(res)\n        ElMessage({\n          message: res,\n          type: 'success',\n          duration: 3000, // 设置显示时间为5秒，单位为毫秒\n        });\n      })\n    }\n  }\n}\n\nfunction 版本号自动检测() {\n  function 版本信息(releases_latest) {\n    for (const asset of releases_latest[0].assets) {\n      // console.log(asset.name)\n      // console.log(asset.browser_download_url)\n      if (asset.name.includes(\".exe\")) {\n        store.window下载地址 = \"https://ghproxy.com/\" + asset.browser_download_url\n      }\n      if (asset.name.includes(\".dmg\")) {\n        store.mac下载地址 = \"https://ghproxy.com/\" + asset.browser_download_url\n      }\n\n    }\n    store.版本号 = releases_latest[0].tag_name\n    store.releases_latest = releases_latest\n  }\n\n  版本信息(releases_latest)\n  //网络读取最新的\n  if (!store.客户端模式) {\n    fetch('./releases_latest.json')\n        .then(response => response.json())\n        .then(data => {\n          // 在这里处理获取到的数据\n          // console.log(data);\n          版本信息(data)\n        })\n        .catch(error => {\n          // 处理错误\n          console.error('Error fetching data:', error);\n        });\n  }\n}\n\n\n</script>\n"
  },
  {
    "path": "GoEasyDesigner/frontend/src/app11.vue",
    "content": "<template>\n\n  <div class=\"app\" style=\"margin: 0px 4px\">\n    <div class=\"头部 \"></div>\n    <div id=\"left\" class=\"属性框 clear-select\">\n\n      <el-tabs style=\"height: 100%\" type=\"border-card\">\n        <DraggableDivider :target-element-id=\"'left'\"></DraggableDivider>\n\n        <el-tab-pane id=\"tabLeftAttrPane\" :label=\"$t('app.Attribute')\" style=\"height: 100%;\" :style=\"{\n          height: tabContentHight + 'px',\n        }\">\n          <div id=\"tabLeftAttr\" class=\"app2\" style=\"height: 100%;\">\n            <div v-if=\"store.当前拖拽组件数据 != undefined\" class=\"组件列表\"\n                 style=\"padding-top: 10px; padding-left: 6px; padding-right: 6px;\">\n<!--              <el-tree-select-->\n<!--                  v-model=\"store.当前组件索引\"-->\n<!--                  :data=\"store.组件列表tree\"-->\n<!--                  default-expand-all-->\n<!--                  style=\"width: 100%;\"-->\n<!--                  @node-click=\"data=>组件树选中(data)\"-->\n<!--                  :filter-node-method=\"filterNodeMethod\"-->\n<!--                  filterable-->\n<!--              />-->\n              <el-tree-select\n                  v-model=\"store.当前组件索引\"\n                  :data=\"store.组件列表tree\"\n                  default-expand-all\n                  style=\"width: 100%;\"\n                  @node-click=\"data => 组件树选中(data)\"\n                  :filter-node-method=\"filterNodeMethod\"\n                  filterable\n              >\n                <template #default=\"{ node, data }\">\n                  <!-- 使用flex布局让内容和按钮分开对齐 -->\n                  <div style=\"display: flex; justify-content: space-between; align-items: center; width: 100%;\">\n                    <!-- 左侧显示节点内容 -->\n                    <span>{{ node.label }}</span>\n                    <!-- 右侧删除按钮 -->\n                    <el-button\n                        v-if=\"data.id !== '1'\"\n                        type=\"danger\"\n                        size=\"small\"\n                        @click.stop=\"store.递归删除id(store.list,data.id);console.log(data)\"\n                    >\n                      删除\n                    </el-button>\n                  </div>\n                </template>\n              </el-tree-select>\n\n            </div>\n            <component :is=\"store.当前组件名称2()\"\n                       v-if=\"store.当前拖拽组件数据 != undefined\"\n                       :item=\"store.当前拖拽组件数据\"\n            />\n          </div>\n        </el-tab-pane>\n        <el-tab-pane :label=\"$t('app.support_library')\">\n          <div id=\"tabLeftSuper\" style=\"width: 100%;overflow: auto\">\n            <component is=\"支持库\"/>\n          </div>\n        </el-tab-pane>\n        <el-tab-pane :label=\"$t('app.project_management')\">\n          <div id=\"tabLeftProject\" style=\"width: 100%;overflow: auto\">\n            <component is=\"项目管理\"/>\n          </div>\n        </el-tab-pane>\n      </el-tabs>\n    </div>\n    <div id=\"tabMainVal\" ref=\"tabMainVal\" class=\"设计区域\">\n      <el-col :span=\"24\" style=\"height: 100%\">\n        <el-tabs v-model=\"store.选择夹_中间现行选中项\" style=\"height: 100%\"\n                 tab-position=\"top\" type=\"border-card\" @tab-change=\"appAction.设计区域被改变\">\n          <el-tab-pane :label=\"$t('app.design')\" style=\"overflow: auto\">\n            <div id=\"designer\" style=\"position: relative;    margin: 8px;\"\n            >\n              <component is=\"RenderDesignComponent\" v-for=\"(item, index) in store.list\" :key=\"index\" :item=\"item\"/>\n            </div>\n          </el-tab-pane>\n          <el-tab-pane :label=\"$t('app.edit_code')\" style=\"overflow: auto\">\n            <div id=\"codeEdit\" style=\"position: relative;    margin: 8px;\"\n            >\n              <component\n                  ref=\"codeEditorRef\"\n                  is=\"代码编辑器\" v-model:value=\"store.代码编辑器.内容\"\n                  height=\"100%\"\n              />\n            </div>\n\n          </el-tab-pane>\n        </el-tabs>\n      </el-col>\n    </div>\n    <div id=\"right\" class=\"工具箱 clear-select\">\n\n      <el-tabs class=\"demo-tabs\" style=\"height: 100%\" tab-position=\"top\" type=\"border-card\">\n        <DraggableDivider :target-element-id=\"'right'\" direction=\"left\"></DraggableDivider>\n\n        <el-tab-pane :label=\"$t('app.components')\">\n\n          <el-collapse accordion v-model=\"BoxActiveName\" style=\"border: none;padding: 0px 8px\">\n            <el-collapse-item :title=\"$t('app.system_components')\" name=\"1\">\n              <el-row>\n                <el-col v-for=\"(item, index) in BoxComponentNames['system']\" :span=\"24\" style=\"margin-bottom: 8px\">\n                  <t-button theme=\"default\" class=\"full-width-button\" draggable=\"true\"\n                            style=\"width: 100%;text-align: left;\"\n                            @dragstart=\"拖拽开始($event, item,'el')\"\n                            @click=\"点击添加组件(item, 'el')\"\n                  >\n                    {{ $te('componentName.' + item) ? $t('componentName.' + item) : item }}\n                  </t-button>\n                </el-col>\n              </el-row>\n            </el-collapse-item>\n            <el-collapse-item :title=\"$t('app.td_components')\" name=\"2\">\n              <el-row>\n                <el-col v-for=\"(item, index) in BoxComponentNames['tdesign']\" :span=\"24\" style=\"margin-bottom: 8px\">\n                  <t-button theme=\"default\" class=\"full-width-button\" draggable=\"true\"\n                            style=\"width: 100%;text-align: left;\"\n                            @dragstart=\"拖拽开始($event, item,'td')\"\n                            @click=\"点击添加组件(item, 'td')\"\n                  >\n                    {{ $te('componentName.' + item) ? $t('componentName.' + item) : item }}\n                  </t-button>\n                </el-col>\n              </el-row>\n            </el-collapse-item>\n            <el-collapse-item :title=\"$t('app.Custom')\" name=\"3\">\n              <el-row>\n                <el-col v-for=\"(item, index) in 自定义组件名称列表\" :span=\"24\" style=\"margin-bottom: 8px\">\n                  <t-button theme=\"default\" class=\"full-width-button\" draggable=\"true\"\n                            style=\"width: 100%;\"\n                            @dragstart=\"拖拽开始_自定义组件($event, item,'el')\"\n                  >\n                    {{\n                      $te('componentName.' + item.componentName) ? $t('componentName.' + item.componentName) : item.componentName\n                    }}\n\n                  </t-button>\n                </el-col>\n              </el-row>\n            </el-collapse-item>\n            <el-collapse-item :title=\"$t('app.tw_components')\" name=\"4\">\n              <el-row>\n                <el-col v-for=\"(item, index) in BoxComponentNames['tailwindcss']\" :span=\"24\" style=\"margin-bottom: 8px\">\n                  <t-button theme=\"default\" class=\"full-width-button\" draggable=\"true\"\n                            style=\"width: 100%;text-align: left;\"\n                            @dragstart=\"拖拽开始($event, item,'tw')\"\n                  >\n                    {{ $te('componentName.' + item) ? $t('componentName.' + item) : item }}\n                  </t-button>\n                </el-col>\n              </el-row>\n            </el-collapse-item>\n\n          </el-collapse>\n        </el-tab-pane>\n      </el-tabs>\n    </div>\n    <div id=\"tabFooterVal\" class=\"调试信息\" style=\"position: relative;min-height: 200px\">\n      <DraggableDivider :target-element-id=\"'tabFooterVal'\" direction=\"top\"></DraggableDivider>\n\n      <el-tabs v-model=\"store.选择夹_底部现行选中项\" class=\"demo-tabs\" style=\"height: 100%\" tab-position=\"top\"\n               type=\"border-card\">\n\n        <el-tab-pane id=\"tabFooterAttrPane1\" :label=\"$t('app.help_info')\"\n       :style=\"{\n          height: tabFooterContentHight + 'px',\n        }\"\n        >\n          <p v-if=\"!store.客户端模式\" v-html=\"$t('app.helpDesc')\">\n          </p>\n          <div ref=\"scrollContainer\" style=\"height: 100%;overflow-y: auto\"\n               v-html=\"store.帮助信息\"\n          ></div>\n        </el-tab-pane>\n        <el-tab-pane id=\"tabFooterAttrPane2\" :label=\"$t('app.debug_info')\"\n       :style=\"{\n          height: tabFooterContentHight + 'px',\n        }\"\n        >\n          <div ref=\"scrollContainer\" style=\"height: 100%;overflow-y: auto\"\n               v-html=\"store.调试信息\"\n          ></div>\n        </el-tab-pane>\n      </el-tabs>\n\n\n    </div>\n    <div v-if=\"!store.客户端模式\" class=\"备案信息\" style=\"    position: absolute;\n    bottom: 0;\n    left: 30%;\">\n      <el-text>黔ICP备19002063号-4 贵公网安备 52230102000312号</el-text>\n    </div>\n    <div class=\"标题 clear-select\">\n      <el-text size=\"large\" style=\"\">\n        <el-icon>\n          <Sunny/>\n        </el-icon>\n        {{ $t('app.name') }}\n        <el-text size=\"small\">{{ store.版本号 }}</el-text>\n      </el-text>\n    </div>\n    <div class=\"工具条 clear-select\">\n\n      <el-row>\n        <el-col :span=\"20\">\n          <t-dropdown :options=\"[\n  {\n    content: $t('app.NewProject') ,\n    value: 6,\n    onClick: () => appAction.新建项目(),\n  },\n  {\n    content: $t('app.OpenProject') ,\n    value: 7,\n    onClick: () => appAction.打开项目(),\n  },\n  {\n    content: $t('app.new') ,\n    value: 1,\n    onClick: () => appAction.新建(),\n  },\n  {\n    content: $t('app.open') ,\n    value: 2,\n    onClick: () => appAction.打开(),\n  },\n  {\n    content: $t('app.save') ,\n    value: 3,\n    onClick: () => appAction.保存设计文件(),\n  },\n  {\n    content: $t('app.environmentCheck') ,\n    value: 4,\n    onClick: () => appAction.运行环境检测(),\n  },\n  {\n    content: $t('app.projectConfig') ,\n    value: 5,\n    onClick: () => store.显示项目配置对话框 = true,\n  },\n]\" :min-column-width=\"112\" >\n            <t-button  theme=\"default\">\n              {{  $t('app.File') }}\n              <template #suffix>\n                <chevron-down-icon size=\"16\"/>\n              </template>\n            </t-button>\n          </t-dropdown>\n\n          <el-button-group class=\"\">\n            <t-button theme=\"default\" @click=\"appAction.运行()\">{{ store.运行按钮文本 }}</t-button>\n            <t-button theme=\"default\" @click=\"appAction.编译()\">{{ store.编译按钮文本 }}</t-button>\n            <t-button theme=\"default\" @click=\"store.显示预览对话框 = true\">{{ $t('app.preview') }}</t-button>\n            <t-button theme=\"default\" v-if=\"store.客户端模式\"  @click=\"appAction.检查更新()\">{{\n                $t('app.updateCheck')\n              }}\n            </t-button>\n            <t-button theme=\"default\" v-if=\"!store.客户端模式\"  @click=\"appAction.下载客户端()\">{{\n                $t('app.downloadClient')\n              }}\n            </t-button>\n            <t-button theme=\"default\"  @click=\"appAction.帮助()\">{{ $t('app.help') }}</t-button>\n\n\n          </el-button-group>\n        </el-col>\n        <el-col :span=\"4\">\n\n          <el-dropdown style=\"\n    position: absolute;\n    right: 0;\n\">\n            <el-button type=\"\">\n              <el-icon>\n                <Switch/>\n              </el-icon>\n              {{ locale }}\n              <el-icon class=\"el-icon--right\">\n                <arrow-down/>\n              </el-icon>\n            </el-button>\n            <template #dropdown>\n              <el-dropdown-menu>\n                <el-dropdown-item\n                    v-for=\"item in languages\"\n                    :key=\"item\"\n                    :class=\"{ 'is-active': item === locale }\"\n                    class=\"lang-item\"\n                    @click=\"onclickLanguageHandle(item)\"\n                >{{ item }}\n                </el-dropdown-item>\n              </el-dropdown-menu>\n            </template>\n          </el-dropdown>\n        </el-col>\n\n      </el-row>\n\n    </div>\n  </div>\n  <component is=\"项目配置对话框\" v-model=\"store.显示项目配置对话框\" @确定=\"store.显示项目配置对话框=false\"\n             @关闭=\"store.显示项目配置对话框=false\"></component>\n\n  <component is=\"新建项目对话框\" v-model=\"store.显示新建项目对话框\" @关闭=\"store.显示新建项目对话框=false\"></component>\n  \n  <PreviewDialog v-if=\"store.显示预览对话框\" v-model=\"store.显示预览对话框\"></PreviewDialog>\n</template>\n\n<script setup>\nimport {inject, nextTick, onMounted, ref, watch} from 'vue';\nimport {useAppStore} from '@/stores/appStore'\nimport {ElMessage, ElMessageBox} from \"element-plus\";\nimport {Help, Key, Switch} from \"@element-plus/icons-vue\";\nimport {appAction} from '@/action/app.js';\n\nimport {E取配置信息} from \"../wailsjs/go/main/App\";\nimport releases_latest from '../public/releases_latest.json'\nimport {useI18n} from \"vue-i18n\";\nimport DraggableDivider from \"./components/designer/public/DraggableDivider.vue\";\nimport {ChevronDownIcon} from \"tdesign-icons-vue-next\";\nimport PreviewDialog from \"./components/designer/PreviewDialog.vue\";\nconst {t, te, availableLocales: languages, locale} = useI18n();\n//读取本地存储\nif (localStorage.getItem(\"locale\")) {\n  locale.value = localStorage.getItem(\"locale\");\n} else {\n  localStorage.setItem(\"locale\", 'English');\n}\nconst scrollContainer = ref(null);\n\nconst store = useAppStore()\nstore.init()\n\nconst onclickLanguageHandle = async (item) => {\n  item !== locale.value ? (locale.value = item) : false;\n  locale.value = item;\n  //写入本地存储\n  console.log(\"设置语言\", item)\n  localStorage.setItem(\"locale\", item);\n  store.运行按钮文本 = t(\"app.run\");\n  store.编译按钮文本 = t(\"app.compile\");\n  store.取组件列表()\n  store.当前拖拽组件数据 = null\n  await nextTick()\n  store.当前拖拽组件数据 = store.组件通过id查找结构(\"1\")\n};\n\n\nfunction 版本号自动检测() {\n  function 版本信息(releases_latest) {\n    for (const asset of releases_latest[0].assets) {\n      // console.log(asset.name)\n      // console.log(asset.browser_download_url)\n      if (asset.name.includes(\".exe\")) {\n        store.window下载地址 = \"https://ghproxy.com/\" + asset.browser_download_url\n      }\n      if (asset.name.includes(\".dmg\")) {\n        store.mac下载地址 = \"https://ghproxy.com/\" + asset.browser_download_url\n      }\n\n    }\n    store.版本号 = releases_latest[0].tag_name\n    store.releases_latest = releases_latest\n  }\n\n  if (!store.客户端模式) {\n    版本信息(releases_latest)\n    fetch('./releases_latest.json?t=' + new Date().getTime())\n        .then(response => response.json())\n        .then(data => {\n          // 在这里处理获取到的数据\n          // console.log(data);\n          版本信息(data)\n        })\n        .catch(error => {\n          // 处理错误\n          console.error('Error fetching data:', error);\n        });\n  }\n}\n\n// const tabLeftVal = ref('0');\n// const tabRightVal = ref('0');\n// const tabFooterVal = ref('0');\n// const tabMainVal = ref(null)\nconst tabContentHight = ref(0);\nconst tabFooterContentHight = ref(0);\n\nasync function ReSize() {\n  try {\n    await nextTick()\n    let tabMainVal = document.getElementById(\"tabMainVal\")\n    let contentHeight = tabMainVal.clientHeight\n    let headerHeight = document.querySelector('#tabMainVal > div > div > div.el-tabs__header.is-top').clientHeight\n    console.log(\"headerHeight\", headerHeight)\n    console.log(\"contentHeight\", contentHeight)\n    tabContentHight.value = contentHeight - headerHeight\n    tabMainVal.querySelector('#designer').style.height = tabContentHight.value - 16 + 'px'\n    document.querySelector('#tabLeftSuper').style.height = tabContentHight.value + 'px'\n    document.querySelector('#tabLeftProject').style.height = tabContentHight.value + 'px'\n    document.querySelector('#tabLeftAttrPane').style.height = tabContentHight.value + 'px'\n    tabMainVal.querySelector('#codeEdit').style.height = tabContentHight.value - 16 + 'px'\n\n    let tabFooterVal = document.getElementById(\"tabFooterVal\")\n    let contentHeight2 = tabFooterVal.clientHeight\n    let headerHeight2 = document.querySelector('#tabFooterVal > div.el-tabs.el-tabs--top.el-tabs--border-card.demo-tabs > div.el-tabs__header.is-top').clientHeight\n    tabFooterContentHight.value = contentHeight2 - headerHeight2\n    document.querySelector('#tabFooterAttrPane1').style.height = tabFooterContentHight.value - 16 + 'px'\n    document.querySelector('#tabFooterAttrPane2').style.height = tabFooterContentHight.value - 16 + 'px'\n\n  } catch (e) {\n\n  }\n\n\n}\n\nconst BoxActiveName = ref('1')\n//记录 BoxActiveName 的变化写到本地存储\nwatch(BoxActiveName, function BoxActiveNameChange() {\n  localStorage.setItem(\"BoxActiveName\", BoxActiveName.value)\n})\n\n\n\nonMounted(async () => {\n  store.scrollContainer = scrollContainer.value;\n  appAction.init()\n  appAction.新建()\n  store.取组件列表()\n  store.当前拖拽组件数据 = store.组件通过id查找结构(\"1\")\n  try {\n    let res = await E取配置信息()\n    res = JSON.parse(res)\n    console.log(\"取配置信息\", res)\n    store.项目信息.IDE插件地址 = \"http://127.0.0.1:\" + res.IDE插件端口号\n    store.项目信息.设计文件路径 = res.设计文件路径\n    if (store.项目信息.设计文件路径 != \"\") {\n      appAction._打开文件加载界面(store.项目信息.设计文件路径)\n    }\n    store.版本号 = res.Version\n\n  } catch (e) {\n\n  }\n  console.log(\"store.当前组件索引\", store.当前组件索引)\n  document.addEventListener(\"keydown\", handleKeyDown);\n\n  setTimeout(() => {\n    store.bodyLoaded = true\n\n  }, 200)\n  版本号自动检测()\n  setTimeout(() => {\n    ReSize()\n  }, 1000)\n  ReSize()\n\n  window.addEventListener('resize', function () {\n    console.log(\"重新计算高度\")\n    ReSize()\n  })\n\n  init_tailwindcss()\n  // 恢复\n  if (localStorage.getItem(\"BoxActiveName\")) {\n    BoxActiveName.value = localStorage.getItem(\"BoxActiveName\")\n  }\n\n  // 检查是否打开了项目\n  if (appAction.store.项目信息.项目根目录 == \"\" && store.客户端模式 == true){\n    ElMessageBox.confirm('当前还没有创建项目或者打开项目', '提示', {\n      confirmButtonText: '新建项目',\n      cancelButtonText: '打开项目',\n      showCancelButton: true,\n      showClose: true,\n      type: 'warning',\n      distinguishCancelAndClose: true,\n      closeOnClickModal: false, // Add this line\n    }).then(() => {\n      console.log('新建项目');\n      appAction.store.显示新建项目对话框 = true\n    }).catch(action => {\n      if (action === 'cancel') {\n        console.log('打开项目');\n        appAction.打开项目()\n      } else if (action === 'close') {\n        console.log('取消');\n      }\n    });\n  }\n\n\n})\n\nfunction init_tailwindcss() {\n\n  const script = document.createElement('script')\n  script.src = '/cdn.tailwindcss.com_3.4.5.js'\n  document.body.appendChild(script)\n  script.onload = () => {\n    console.log('tailwindcss.com 加载完成')\n    tailwind.config = {\n      plugins: [\n        function ({addBase}) {\n          addBase({\n            \".el-button\": {\n              \"background-color\": \"var(--el-button-bg-color,var(--el-color-white))\"\n            }\n          });\n        }\n      ]\n    }\n  }\n\n}\n\nasync function 拖拽开始_自定义组件(event, item, uiname) {\n  let 组件名称 = item.componentName\n  let 组件路径 = item.组件路径\n  let 组件默认属性 = item.组件默认属性\n\n  function 创建自定义组件json(组件名称, 组件html, 新属性) {\n    let k = store.获取索引(组件名称)\n\n    新属性.id = store.获取随机id()\n    //避免名称重复导致后续代码出问题\n    for (let i = 0; i < 100; i++) {\n      let 名称是否存在 = store.递归查找名称(store.list, k)\n      // console.log(\"名称是否存在\", 名称是否存在)\n      if (名称是否存在) {\n        k = store.获取索引(组件名称)\n      } else {\n        break\n      }\n    }\n    新属性.componentName = uiname + 'CustomComponent'\n    新属性.自定义组件名称 = 组件名称\n    新属性.name = k\n    新属性.text = k\n    新属性.HTML = 组件html\n    store.当前拖拽组件数据 = 新属性\n    // console.log(\"自定义组件创建=============\", JSON.stringify(新属性))\n  }\n\n  try {\n    const responseDefaultAttributes = await fetch(组件默认属性);\n    const dataDefaultAttributes = await responseDefaultAttributes.text();\n    const blob = new Blob([dataDefaultAttributes], {type: 'application/javascript'});\n    const url = URL.createObjectURL(blob);\n    const module = await import(/* @vite-ignore */url);\n    const 新属性 = module.default;\n    // console.log(\"自定义组件默认属性\", 新属性);\n    const responseHtml = await fetch(组件路径);\n    const 组件html = await responseHtml.text();\n    // console.log(\"自定义组件的html\", 组件html);\n    创建自定义组件json(组件名称, 组件html, 新属性);\n  } catch (e) {\n    //弹出饿了么的提示框\n    console.error(e)\n    ElMessage({\n      message: \"自定义组件加载失败\",\n      type: 'success',\n      duration: 3000, // 设置显示时间为5秒，单位为毫秒\n    });\n  }\n\n\n}\n\nconst BoxComponentDefaultValue = inject(\"BoxComponentDefaultValue\")\nconst BoxComponentNames = inject(\"BoxComponentNames\")\n\nfunction 拖拽开始(event, 组件名称, uiName) {\n  let 新属性 = \"\"\n  try {\n    新属性 = JSON.parse(JSON.stringify(BoxComponentDefaultValue[uiName][组件名称]))\n  } catch (e) {\n  }\n  if (新属性 == \"\") {\n    console.log(\"未配置默认属性\")\n    //弹出提示\n    ElMessage({\n      message: \"组件未配置默认属性\",\n      type: 'success',\n      duration: 3000, // 设置显示时间为5秒，单位为毫秒\n    });\n    //阻止默认行为和停止事件\n    event.preventDefault()\n    event.stopPropagation()\n    return\n  }\n  // newName 检查是否有中文翻译 如果有则使用翻译 没有则使用原来的\n  let newName = te('componentName.' + 组件名称) ? t('componentName.' + 组件名称) : 组件名称;\n  let k = store.获取索引(newName)\n  新属性.id = store.获取随机id()\n  新属性.componentName = 组件名称\n  新属性.componentRawName = 组件名称\n  新属性.name = k\n  if (新属性.hasOwnProperty(\"text\")) {\n    新属性.text = k\n  }\n  if (新属性.hasOwnProperty(\"text\")) {\n    新属性.text = k\n  }\n  if (新属性.hasOwnProperty(\"内容\")) {\n    新属性.text = k\n  }\n  //把ui加上前缀比如 el\n  新属性.componentName = uiName + 组件名称\n\n  console.log(\"当前组件名称\", 组件名称)\n\n  if (组件名称 == \"elContainer\") {\n    新属性.border = \"1px solid black\"\n  }\n  // if (组件名称 == \"Tabs\") {\n  //   let id = 新属性.id\n  //   for (var i = 0; i < 新属性.子组件.length; i++) {\n  //     新属性.子组件[i].id = store.获取随机id()\n  //     新属性.子组件[i].名称 = store.获取索引(新属性.子组件[i].名称)\n  //     新属性.子组件[i].text= store.获取索引(新属性.子组件[i].标题)\n  //     新属性.子组件[i].pid = id\n  //   }\n  // }\n\n  if (组件名称.toLowerCase().startsWith('tabs') || 组件名称.endsWith('layout')) {\n    let id = 新属性.id\n    for (var i = 0; i < 新属性.childComponents.length; i++) {\n      新属性.childComponents[i].id = store.获取随机id()\n      新属性.childComponents[i].name = store.获取索引(新属性.childComponents[i].name)\n      新属性.childComponents[i].pid = id\n      //检查 新属性.子组件[i].text是否存在 如果存在 则修改\n      if (新属性.childComponents[i].hasOwnProperty(\"text\")) {\n        新属性.childComponents[i].text = store.获取索引(新属性.childComponents[i].text)\n      }\n    }\n\n  }\n\n  store.当前拖拽组件数据 = 新属性\n}\n\nlet 复制组件 = []\n\nfunction handleKeyDown(event) {\n  // 如果按下的是Cmd + S（Mac）或Ctrl + S（Windows/Linux）\n  console.log(\"按下某键盘\", event.key)\n  if ((event.metaKey || event.ctrlKey) && event.key === \"Backspace\" || event.key === \"Delete\" ) {\n    //删除组件\n    event.preventDefault(); // 阻止浏览器默认保存行为\n    // 在这里执行你想要的操作，比如保存数据或触发特定的方法\n    console.log(\"按下了删除 Delete\", store.当前拖拽组件数据);\n    store.递归删除id(store.list, store.当前多选组件ID)\n\n  }\n\n\n\n  if ((event.metaKey || event.ctrlKey) && event.key === \"z\") {\n    //撤销\n    console.log(\"撤销\");\n    //屏蔽浏览器默认行为\n    event.preventDefault();\n\n    // console.log(\"store.HistoryManager.查看当前历史所有记录()\", store.HistoryManager.查看当前历史所有记录())\n    // console.log(\"store.HistoryManager.当前位置()\", store.HistoryManager.当前位置)\n\n\n    let 旧的数据 = store.HistoryManager.撤销(JSON.stringify(store.list))\n    // console.log(\"旧的数据\", 旧的数据)\n    if (旧的数据 == null || 旧的数据 == undefined) {\n      return\n    }\n\n    store.list = JSON.parse(旧的数据)\n\n  }\n  if ((event.metaKey || event.ctrlKey) && event.key === \"y\") {\n    //恢复\n    console.log(\"恢复\");\n    event.preventDefault();\n    let 旧的数据 = store.HistoryManager.恢复(JSON.stringify(store.list))\n    // console.log(\"旧的数据\", 旧的数据)\n    if (旧的数据 == null || 旧的数据 == undefined) {\n      return\n    }\n    store.list = JSON.parse(旧的数据)\n  }\n  if ((event.metaKey || event.ctrlKey) && event.key === \"s\") {\n    event.preventDefault(); // 阻止浏览器默认保存行为\n    // 在这里执行你想要的操作，比如保存数据或触发特定的方法\n    console.log(\"按下了保存 Cmd/Ctrl + S\");\n    if (store.客户端模式 == false) {\n      //弹出消息框 当前为浏览器模式 不能保存 请手动保存\n      ElMessage({\n        message: \"当前为浏览器模式 不能保存 请手动保存. 如果需要保存请使用客户端\",\n        type: 'success',\n        duration: 3000, // 设置显示时间为5秒，单位为毫秒\n      });\n      return\n    }\n\n    if (store.项目信息.窗口事件文件路径 != \"\") {\n      appAction.保存设计文件()\n      ElMessage({\n        message: '已保存',\n        type: 'success',\n        duration: 3000, // 设置显示时间为5秒，单位为毫秒\n      });\n    }\n  }\n}\n\nfunction 组件树选中(data) {\n  store.当前拖拽组件数据 = store.组件通过id查找结构(data.id)\n  console.log('组件树选中', store.当前拖拽组件数据)\n  store.当前组件索引 = store.当前拖拽组件数据.id\n}\n\nstore.rightClickMenus = {\n  menus: [\n    {\n      label: \"等宽\",\n      click: () => {\n        console.log(\"等宽\", store.当前多选组件ID)\n        store.当前多选组件ID.forEach(id => {\n          let item = store.组件通过id查找结构(id)\n          item.width = store.当前拖拽组件数据.width\n        })\n      }\n    },\n    {\n      label: \"等高\",\n      click: () => {\n        store.当前多选组件ID.forEach(id => {\n          let item = store.组件通过id查找结构(id)\n          item.height = store.当前拖拽组件数据.height\n        })\n      }\n    },\n    {\n      label: \"等宽高\",\n      click: () => {\n        store.当前多选组件ID.forEach(id => {\n          let item = store.组件通过id查找结构(id)\n          item.width = store.当前拖拽组件数据.width\n          item.height = store.当前拖拽组件数据.height\n        })\n      }\n    },\n    {\n      label: \"左对齐\",\n      click: () => {\n        store.当前多选组件ID.forEach(id => {\n          let item = store.组件通过id查找结构(id)\n          item.left = store.当前拖拽组件数据.left\n        })\n      }\n    },\n    {\n      label: \"右对齐\",\n      click: () => {\n        let left = parseInt(store.当前拖拽组件数据.left)\n        let width = parseInt(store.当前拖拽组件数据.width)\n        let right = left + width\n        store.当前多选组件ID.forEach(id => {\n          let item = store.组件通过id查找结构(id)\n          let value = right - item.width\n          item.left = value\n        })\n\n\n      }\n    },\n    {\n      label: \"顶对齐\",\n      click: () => {\n        store.当前多选组件ID.forEach(id => {\n          let item = store.组件通过id查找结构(id)\n          item.top = store.当前拖拽组件数据.top\n        })\n      }\n    },\n    {\n      label: \"底对齐\",\n      click: () => {\n        let top = parseInt(store.当前拖拽组件数据.top)\n        let height = parseInt(store.当前拖拽组件数据.height)\n        let bottom = top + height\n        store.当前多选组件ID.forEach(id => {\n          let item = store.组件通过id查找结构(id)\n          let value = bottom - item.height\n          item.top = value\n        })\n      }\n    },\n    {\n      label: \"水平两端平均分布\",\n      click: () => {\n        const sortedComponents = store.当前多选组件ID\n            .map(id => ({id, left: store.组件通过id查找结构(id).left, width: store.组件通过id查找结构(id).width}))\n            .sort((a, b) => a.left - b.left);\n        const firstComponent = sortedComponents[0];\n        const lastComponent = sortedComponents[sortedComponents.length - 1];\n        const maxLeft = parseInt(lastComponent.left);\n        const minLeft = parseInt(firstComponent.left);\n        const leftSide = (maxLeft - minLeft) / (store.当前多选组件ID.length - 1)\n        sortedComponents.forEach((component, index) => {\n          let item = store.组件通过id查找结构(component.id);\n          const newPosition = minLeft + index * leftSide;\n          console.log(\"newPosition\", newPosition);\n          item.left = newPosition;\n        });\n      }\n    },\n    {\n      label: \"垂直两端平均分布\",\n      click: () => {\n        const sortedComponents = store.当前多选组件ID\n            .map(id => ({id, top: store.组件通过id查找结构(id).top, height: store.组件通过id查找结构(id).height}))\n            .sort((a, b) => a.top - b.top);\n\n        const firstComponent = sortedComponents[0];\n        const lastComponent = sortedComponents[sortedComponents.length - 1];\n        const maxTop = parseInt(lastComponent.top);\n        const minTop = parseInt(firstComponent.top);\n        const topSide = (maxTop - minTop) / (store.当前多选组件ID.length - 1);\n\n        sortedComponents.forEach((component, index) => {\n          let item = store.组件通过id查找结构(component.id);\n          const newPosition = minTop + index * topSide;\n          console.log(\"newPosition\", newPosition);\n          item.top = newPosition;\n        });\n\n\n      }\n    },\n  ]\n}\n\nconst filterNodeMethod = (value, data) => data.label.toLowerCase().includes(value.toLowerCase())\n\nfunction 点击添加组件(组件名称, uiName) {\n  let 新属性 = \"\"\n  try {\n    新属性 = JSON.parse(JSON.stringify(BoxComponentDefaultValue[uiName][组件名称]))\n  } catch (e) {\n  }\n  if (新属性 == \"\") {\n    ElMessage({\n      message: \"组件未配置默认属性\",\n      type: 'success',\n      duration: 3000,\n    });\n    return\n  }\n  let newName = te('componentName.' + 组件名称) ? t('componentName.' + 组件名称) : 组件名称;\n  let k = store.获取索引(newName)\n  新属性.id = store.获取随机id()\n  新属性.componentName = 组件名称\n  新属性.componentRawName = 组件名称\n  新属性.name = k\n  if (新属性.hasOwnProperty(\"text\")) {\n    新属性.text = k\n  }\n  if (新属性.hasOwnProperty(\"内容\")) {\n    新属性.text = k\n  }\n  新属性.componentName = uiName + 组件名称\n\n  // 关键：设置初始位置为 (0,0)\n  新属性.left = 100\n  新属性.top = 100\n\n  // 处理特殊组件\n  if (组件名称.toLowerCase().startsWith('tabs') || 组件名称.endsWith('layout')) {\n    let id = 新属性.id\n    for (var i = 0; i < 新属性.childComponents.length; i++) {\n      新属性.childComponents[i].id = store.获取随机id()\n      新属性.childComponents[i].name = store.获取索引(新属性.childComponents[i].name)\n      新属性.childComponents[i].pid = id\n      if (新属性.childComponents[i].hasOwnProperty(\"text\")) {\n        新属性.childComponents[i].text = store.获取索引(新属性.childComponents[i].text)\n      }\n    }\n  }\n\n  // 添加到根组件\n  store.list.push(新属性)\n  \n  // 记录历史\n  store.HistoryManager.记录(JSON.stringify(store.list))\n  \n  // 更新组件列表\n  store.取组件列表()\n  \n  // 设置当前选中组件\n  store.当前组件索引 = 新属性.id\n  store.当前拖拽组件数据 = 新属性\n  store.当前多选组件ID = [新属性.id]\n}\n</script>\n\n<style>\n.子组件.高亮 {\n  background-color: rgba(0, 166, 255, 0.3);\n}\n\n.clear-select {\n  user-select: none;\n  -webkit-user-select: none; /* Safari */\n  -moz-user-select: none; /* Firefox */\n  -ms-user-select: none; /* Internet Explorer / Edge */\n}\n\n</style>"
  },
  {
    "path": "GoEasyDesigner/frontend/src/assets/base.css",
    "content": "@tailwind base;\n@tailwind components;\n@tailwind utilities;"
  },
  {
    "path": "GoEasyDesigner/frontend/src/assets/main.css",
    "content": "\nhtml, body{\n    margin: 0;\n    padding: 0;\n    overflow: hidden;\n}\n\n.clear-select{\n    user-select: none;\n    -webkit-user-select: none; /* Safari */\n    -moz-user-select: none; /* Firefox */\n    -ms-user-select: none; /* Internet Explorer / Edge */\n}\n\n.app {\n    width: 100% !important;\n    display: grid;\n    grid-template-columns: auto 1fr 1fr 1fr auto;\n    grid-template-rows: 0fr 1fr 1fr 1fr 1fr;\n    gap: 12px 12px;\n    grid-auto-flow: row;\n    height: 100vh;\n    overflow: hidden;\n    padding-bottom: 26px;\n    padding-right: 16px;\n    padding-left: 8px;\n    padding-top: 12px\n}\n\n.绘制的组件 * {\n    pointer-events: none;\n\n}\n\n.头部 {\n    grid-area: 1 / 1 / 2 / 6;\n}\n\n.属性框 {\n    grid-area: 2 / 1 / 5 / 2;\n    width: 280px;\n    min-width: 280px;\n    box-shadow: 5px 5px 10px #dddfe5;\n\n}\n\n.设计区域 {\n    grid-area: 2 / 2 / 5 / 5;\n    box-shadow: 5px 5px 10px #dddfe5;\n\n}\n\n.工具箱 {\n    grid-area: 2 / 5 / 5 / 6;\n    width: 160px;\n    min-width: 160px;\n    box-shadow: 5px 5px 10px #dddfe5;\n\n}\n\n.调试信息 {\n    box-shadow: 5px 5px 10px #dddfe5;\n\n    grid-area: 5 / 1 / 6 / 6;\n}\n\n.标题 {\n\n    grid-area: 1 / 1 / 2 / 2;\n    display: flex;\n    justify-content: center;\n    align-items: center;\n}\n\n.工具条 {\n    grid-area: 1 / 2 / 2 / 6;\n    padding: 6px;\n}\n\n.属性框 .el-tabs__content {\n    height: 100%;\n    padding: 4px;\n}\n\n.工具箱 .el-tabs__content {\n    height: 90% !important;\n    overflow-y: auto;\n}\n\n.app2 {\n    display: grid;\n    grid-template-columns: 1fr;\n    grid-template-rows: 0.1fr 2.6fr 0.1fr;\n    gap: 10px 0px;\n    grid-auto-flow: row;\n    grid-template-areas:\n    \"组件列表\"\n    \"属性表格\"\n    \"添加组件事件\";\n\n    justify-content: space-between;\n    height: 91%;\n}\n\n.组件列表 {\n    grid-area: 组件列表;\n}\n\n.属性表格 {\n    grid-area: 属性表格;\n    overflow-y: auto;\n    padding-left: 6px;\n    padding-right: 4px;\n}\n\n.添加组件事件 {\n    grid-area: 添加组件事件;\n}\n\n.el-form-item {\n    margin-bottom: 8px;\n}\n\n.画布 {\n    background: rgb(240, 240, 240);\n    position: relative;\n    overflow: hidden;\n}\n\n.app2 .el-form-item {\n     margin-bottom: 8px;\n}\n#pane-1{\n    height: 100%;\n}\n.调试信息 .el-tab-pane{\n    padding: 8px;\n}\n\n/* 修改滚动条轨道的宽度 */\n::-webkit-scrollbar {\n    width: 4px; /* 调整滚动条宽度为8像素 */\n    height: 4px; /* 调整滚动条高度为2像素 */\n}\n\n/* 修改滚动条轨道的背景颜色 */\n::-webkit-scrollbar-track {\n    background-color: #f1f1f1; /* 设置轨道的背景颜色 */\n}\n\n/* 修改滚动条的滑块（拖动条）颜色 */\n::-webkit-scrollbar-thumb {\n    background-color: #c4c4c4; /* 设置滑块的颜色 */\n}\n\n/* 修改滚动条的边框颜色 */\n::-webkit-scrollbar-thumb:hover {\n    background-color: #a9a9a9; /* 设置滑块的悬停颜色 */\n}\n\n* {\n    box-sizing: border-box;\n}\n\n.el-tree-node__children{\n    width: 500px !important;\n}\n"
  },
  {
    "path": "GoEasyDesigner/frontend/src/components/RenderDesignComponent.vue",
    "content": "<template>\n  <teleport to=\"#designer\">\n    <shape\n        v-if=\"store.bodyLoaded && 检查id是否在选中数组中(item.id)\"\n        :data-id=\"item.data_id ? item.data_id : (item.data_id = generateUniqueId())\"\n        :index=\"item.id\"\n        :item_data=\"item\"\n        :nowIndex=\"store.当前组件索引\"\n        :style=\"{ ...shapeRect, ...getItemStyle2(item) }\"\n        class=\"shape\"\n        style=\"position: absolute;pointer-events: none;\"\n        @update-style=\"updateStyle\"\n        @删除=\"id=>store.递归删除id(store.list,id)\"\n    />\n    <div\n        :class=\"{ 'custom-input': isHovered(item.data_id) }\"\n        :style=\"{ ...shapeRect, ...getItemStyle2(item) }\"\n        class=\"highlight_border\"\n        style=\"position: absolute;pointer-events: none;\"\n    ></div>\n  </teleport>\n  <div\n      :style=\"getItemStyleShape(item)\"\n      @contextmenu.stop=\"rightClick($event,item)\"\n      @keydown.stop=\"handleKeyDown($event)\"\n      style=\"tab-index: 0;\"\n\n  >\n    <div\n        v-show=\"item.visible || item.visible\"\n        :id=\"item.name\"\n        :class=\"{ 'disabled': item.disable || item.disable }\"\n        :data-id=\"item.data_id ? item.data_id : (item.data_id = generateUniqueId())\"\n        :style=\"{\n              overflowY: item.overflowY || 'visible',\n              overflowX: item.overflowX || 'visible'\n        }\"\n        class=\"子组件\"\n        data-放置=\"1\"\n        draggable=\"true\"\n        @mouseout=\"clearHoveredDiv\"\n        @mouseover.stop=\"setHoveredDiv(item.data_id)\"\n        @dblclick.stop=\"store.组件双击事件(item)\"\n        @dragstart.stop=\"拖拽开始($event,item)\"\n        @dragover.prevent=\"拖拽进入($event,item)\"\n        @dragleave.prevent=\"拖拽离开($event,item)\"\n        @drop.stop=\"拖拽放下($event,item)\"\n        @click.stop=\"鼠标按下($event,item)\"\n    >\n\n      <template v-if=\"item.componentName == 'Window'\">\n        <component is=\"RenderDesignComponent\" v-for=\"(subItem, subIndex) in item.childComponents\" :key=\"subIndex\"\n                   :item=\"subItem\"/>\n      </template>\n\n      <template v-if=\"item.componentName=='elContainer'\">\n        <template v-if=\"item.childComponents.length === 0\">\n          <div style=\"width: 100%;\n                       background: rgba(10,19,37,.05);\n                      border: 1px dashed #ced0d3;\n                      color: rgb(184, 186, 191);\n                      height: 100%;\n                      display: flex;\n                      justify-content: center;\n                      align-items: center;\n                      pointer-events: none;\n\">\n            {{ item.name ? item.name : 'ContentArea' }}\n          </div>\n        </template>\n        <component is=\"RenderDesignComponent\" v-for=\"(subItem, subIndex) in item.childComponents\" :key=\"subIndex\"\n                   :item=\"subItem\"/>\n      </template>\n      <template v-else>\n        <component :is=\"item.componentName\" :item=\"item\"/>\n      </template>\n\n    </div>\n  </div>\n</template>\n\n<script setup>\nimport {defineProps, nextTick, watch,onBeforeUnmount} from 'vue';\nimport {useAppStore} from '@/stores/appStore'\nimport Shape from \"@/components/Shape.vue\";\nimport {getItemStyle2, getItemStyleShape} from \"@/public\";\nimport {v4 as uuidv4} from 'uuid';\nimport {menusEvent} from \"vue3-menus\";\nimport {useI18n} from \"vue-i18n\";\nconst {t, te, availableLocales: languages, locale} = useI18n();\n\nconst {item} = defineProps(['item']);\n\nconst store = useAppStore()\n\n// 动态创建临时的canvas元素\nvar tempCanvas = document.createElement(\"canvas\");\ntempCanvas.width = 70;\ntempCanvas.height = 30;\nvar tempCtx = tempCanvas.getContext(\"2d\");\n// 绘制内容到临时的canvas\ntempCtx.fillStyle = \"rgb(112, 139, 219)\";\ntempCtx.fillRect(0, 0, tempCanvas.width, tempCanvas.height);\ntempCtx.font = \"12px Arial\";\ntempCtx.fillStyle = \"white\";\ntempCtx.strokeStyle = \"rgb(112, 139, 219)\";\ntempCtx.strokeRect(0, 0, tempCanvas.width, tempCanvas.height);\ntempCtx.fillText(t('app.ReleaseAndPlace'), 10, 20);\n\n\nconst shapeRect = ref({\n  width: 0,\n  height: 0,\n  top: 0,\n  left: 0,\n});\n\nasync function updateStyle(item, newStyle) {\n  const properties = ['width', 'height', 'top', 'left'];\n  // for (const property of properties) {\n  //   if (newStyle[property] !== undefined) {\n  //     item[property] = `${newStyle[property]}`;\n  //   }\n  // }\n\n  // 先改变其他组件的位置\n  store.当前多选组件ID.forEach(id => {\n    if (id == item.id) {\n      return\n    }\n    let _item = store.组件通过id查找结构(id)\n    for (const property of properties) {\n      if (newStyle[property] !== undefined) {\n        _item[property] = parseInt(_item[property]) + (parseInt(newStyle[property]) - parseInt(item[property]))\n        // console.log(_item.id, property, _item[property])\n\n      }\n    }\n    // _item.width = parseInt(_item.width) + width\n    // _item.height =  parseInt(_item.height) + height\n    // _item.top =  parseInt(_item.top) + top\n    // _item.left =  parseInt(_item.left) + left\n  })\n  //最后才改变自己的位置,这样子就可以计算出差值\n  for (const property of properties) {\n    if (newStyle[property] !== undefined) {\n      item[property] = `${newStyle[property]}`;\n    }\n  }\n  return item\n}\n\nlet timerId;\n\nwatch(() => item, (newValue, oldValue) => {\n  clearTimeout(timerId);\n  timerId = setTimeout(() => {\n    // 你的逻辑代码\n    shapeRect.value = getItemStyle2(item)\n  }, 100); // 可选延迟时间\n});\nonBeforeUnmount(() => {\n  if (timerId) {\n    clearTimeout(timerId);\n  }\n});\n\nstore.start_x = 0;\nstore.start_y = 0;\n\nfunction 拖拽开始(event, v) {\n  if (v.noDrag) {\n    event.preventDefault();\n    return\n  }\n  console.log(\"拖拽开始\", v)\n  store.当前拖拽组件数据 = v\n  //修改鼠标为拖动状态\n  event.dataTransfer.effectAllowed = \"move\";\n\n  // 获取当前鼠标相对于当前元素的相对位置\n  store.start_x = event.offsetX;\n  store.start_y = event.offsetY;\n  console.log(\"start_x\", store.start_x, \"start_y\", store.start_y)\n\n\n  var img = new Image();\n  img.src = tempCanvas.toDataURL();\n  event.dataTransfer.setDragImage(img, 0, 0);\n}\n\nfunction 拖拽进入(event, v) {\n\n  var img = new Image();\n  img.src = tempCanvas.toDataURL();\n  event.dataTransfer.setDragImage(img, 0, 0);\n  if (v.noPlace) {\n    event.stopPropagation();\n    return\n  }\n  // console.log(\"拖拽进入\", v)\n  event.target.classList.add('高亮');\n}\n\nfunction 拖拽离开(event, v) {\n  //查找所有的高亮 然后全部清除\n  let 高亮的组件 = document.querySelectorAll(\".高亮\")\n  高亮的组件.forEach((item, index) => {\n    item.classList.remove('高亮');\n  });\n}\n\n\nasync function 拖拽放下(event, v) {\n  console.log(\"拖拽放下\", v)\n  if (v.noPlace) {\n    return\n  }\n\n  event.target.classList.remove('高亮');\n  let 放置目标组件数据 = v\n  console.log(\"当前拖拽组件数据\", store.当前拖拽组件数据)\n  console.log(\"放置目标组件数据\", 放置目标组件数据)\n  if (检查放置目标是否为自身组件的子组件(store.当前拖拽组件数据, 放置目标组件数据.id)) {\n    console.log(\"当前目标子组件是自己的 不能放置\")\n    return;\n  }\n\n  // 获取当前鼠标相对于当前元素的相对位置\n  let x = event.offsetX;\n  let y = event.offsetY;\n\n  // console.log(\"start_x\", store.start_x, \"start_y\", store.start_y)\n  // console.log(\"x\", x, \"y\", y)\n\n\n  if (放置目标组件数据.id == store.当前拖拽组件数据.id) {\n    const offsetX = store.start_x - x;\n    const offsetY = store.start_y - y;\n\n    const initialLeft = parseInt(store.当前拖拽组件数据.left);\n    const initialTop = parseInt(store.当前拖拽组件数据.top);\n\n\n    const newLeft = initialLeft - offsetX; // 计算新的左偏移量\n    const newTop = initialTop - offsetY;   // 计算新的上偏移量\n\n    // console.log(\"重新计算\", \"newLeft:\", newLeft, \"newTop:\", newTop, \"offsetX:\", offsetX, \"offsetY:\", offsetY);\n\n    store.当前拖拽组件数据.left = newLeft;\n    store.当前拖拽组件数据.top = newTop;\n    return\n  }\n  x = x - store.start_x\n  y = y - store.start_y\n  // console.log(\"重新计算\", \"x\", x, \"y\", y)\n  if (store.当前拖拽组件数据.left != 'inherit') {\n    store.当前拖拽组件数据.left = x\n  }\n  if (store.当前拖拽组件数据.top != 'inherit') {\n    store.当前拖拽组件数据.top = y\n  }\n\n  store.HistoryManager.记录(JSON.stringify(store.list))\n  console.log(\"删除组件\");\n\n  递归删除(store.list, store.当前拖拽组件数据.id)\n  await nextTick()\n  store.当前拖拽组件数据.fid = 放置目标组件数据.id\n  递归添加(store.list, store.当前拖拽组件数据, 放置目标组件数据.id)\n  await nextTick()\n\n  store.HistoryManager.记录(JSON.stringify(store.list))\n\n  // console.log(JSON.stringify(store.list, null, 2))\n  store.取组件列表()\n  store.当前组件索引 = store.当前拖拽组件数据.id\n  store.当前多选组件ID = [store.当前组件索引]\n\n}\n\nfunction 递归添加(源数据, 插入数据, 放置的容器名称) {\n  // console.log(\"递归添加\", 源数据, 插入数据, 放置的容器名称)\n  源数据.forEach((item, index) => {\n    if (item.childComponents == undefined) {\n\n    } else {\n      if (item.id == 放置的容器名称) {\n        // console.log(\"找到了\", item.childComponents)\n        // 递归添加(item.子组件, 插入数据, \"abc\")\n        item.childComponents = [...item.childComponents, 插入数据]\n\n      } else {\n        递归添加(item.childComponents, 插入数据, 放置的容器名称)\n      }\n    }\n  });\n}\n\nfunction 递归删除(源数据, 删除的对象名称) {\n  // console.log(\"递归删除\", 源数据, 删除的对象名称)\n  源数据.forEach((item, index) => {\n    if (item.id == 删除的对象名称) {\n      源数据.splice(index, 1);\n    }\n    if (item.childComponents == undefined) {\n\n    } else {\n      递归删除(item.childComponents, 删除的对象名称)\n    }\n  });\n}\n\nfunction 检查放置目标是否为自身组件的子组件(源数据, 对象名称) {\n  if (对象名称 == \"\" || 对象名称 == undefined || 源数据.childComponents == undefined) {\n    return false\n  }\n  //遍历源数据\n  for (let i = 0; i < 源数据.childComponents.length; i++) {\n    let item = 源数据.childComponents[i];\n    if (item.id == 对象名称) {\n      return true\n    }\n    if (item.childComponents == undefined) {\n\n    } else {\n      if (检查放置目标是否为自身组件的子组件(item, 对象名称)) {\n        console.log(\"当前对象名称\", 对象名称, \"当前组件名称\", item.name)\n        return true\n      }\n    }\n  }\n  return false\n}\n\nfunction rightClick(event, v) {\n  event.preventDefault();\n  store.当前组件索引 = v.id\n  store.当前拖拽组件数据 = v\n  console.log(\"右键组件的数据\", v)\n  //如果 store.当前多选组件ID 大于2才弹出\n  if (store.当前多选组件ID.length > 1) {\n    menusEvent(event, store.rightClickMenus);\n\n  }\n}\n\nfunction 检查id是否在选中数组中(id) {\n\n  return store.当前多选组件ID.includes(id)\n}\n\nfunction 鼠标按下(event, v) {\n  console.log(\"鼠标按下\", v)\n  if (event.shiftKey) {\n    console.log('Shift键被按住了！');\n    if (store.当前多选组件ID.includes(v.id)) {\n      store.当前多选组件ID.splice(store.当前多选组件ID.indexOf(v.id), 1)\n      return\n    }\n    if (v.pid != undefined) {\n      store.当前多选组件ID.push(v.pid)\n    } else {\n      store.当前多选组件ID.push(v.id)\n    }\n    console.log(store.当前多选组件ID)\n  } else {\n    if (v.pid != undefined) {\n      store.当前多选组件ID = [v.pid]\n    } else {\n      store.当前多选组件ID = [v.id]\n    }\n  }\n\n  store.当前组件索引 = v.id\n  store.当前拖拽组件数据 = v\n\n  if (v.pid != undefined) {\n    store.当前组件索引 = v.pid\n  }\n  console.log(\"store.当前组件索引\", store.当前组件索引)\n\n}\n\nfunction setHoveredDiv(index) {\n  store.hoveredDiv = index;\n}\n\nfunction clearHoveredDiv() {\n  store.hoveredDiv = \"\";\n}\n\nfunction isHovered(index) {\n  return store.hoveredDiv === index;\n}\n\nfunction generateUniqueId() {\n  try {\n    let id = uuidv4();\n    // 截取前面6位\n    return id.substring(0, 6);\n  } catch (e) {\n    return 'fail'\n  }\n}\n\n\nfunction handleKeyDown(event) {\n  event.preventDefault()\n\n  // 如果按下的是Cmd + S（Mac）或Ctrl + S（Windows/Linux）\n  console.log(\"按下某键盘\", event.key)\n  if ((event.metaKey || event.ctrlKey) && event.key === \"Backspace\" || event.key === \"Delete\" ) {\n    event.preventDefault(); // 阻止浏览器默认保存行为\n    // 在这里执行你想要的操作，比如保存数据或触发特定的方法\n    console.log(\"按下了删除 Delete\", store.当前拖拽组件数据);\n    store.递归删除id(store.list, store.当前多选组件ID)\n    // store.递归删除id(store.list, store.当前组件索引)\n  }\n\n  // ctrl+c 复制组件\n  if ((event.metaKey || event.ctrlKey) && event.key === \"c\") {\n    console.log('Ctrl + C键被按住了！');\n    store.复制组件 = store.当前多选组件ID\n    return\n  }\n  // ctrl+v 粘贴组件\n  if ((event.metaKey || event.ctrlKey) && event.key === \"v\") {\n    console.log('Ctrl + V键被按住了！');\n    if (store.复制组件.length == 0) {\n      return\n    }\n    store.当前多选组件ID = []\n    store.复制组件.forEach((item, index) => {\n      let _item = store.组件通过id查找结构(item)\n      let 新属性 = JSON.parse(JSON.stringify(_item))\n      新属性.id = generateUniqueId()\n      新属性.data_id = generateUniqueId()\n      新属性.left = parseInt(新属性.left) + 10\n      新属性.top = parseInt(新属性.top) + 10\n      let 组件名称 = 新属性.componentRawName\n      let k = store.获取索引(组件名称)\n      新属性.name = k\n      if (组件名称 == \"FlexLayout\" || 组件名称 == \"CommonLayout\" || 组件名称 == \"Tabs\") {\n        let id = 新属性.id\n        for (var i = 0; i < 新属性.childComponents.length; i++) {\n          新属性.childComponents[i].id = store.获取随机id()\n          新属性.childComponents[i].name = store.获取索引(新属性.childComponents[i].name)\n          新属性.childComponents[i].pid = id\n          //检查 新属性.子组件[i].text是否存在 如果存在 则修改\n          if (新属性.childComponents[i].hasOwnProperty(\"text\")) {\n            新属性.childComponents[i].text = store.获取索引(新属性.childComponents[i].text)\n          }\n        }\n\n      }\n      let pid = \"1\"\n      if (新属性.fid != undefined) {\n        pid = 新属性.fid\n      }\n      store.递归添加(store.list, 新属性, pid)\n      console.log(\"复制的组件\", 新属性)\n    });\n    store.HistoryManager.记录(JSON.stringify(store.list))\n    store.取组件列表()\n    return\n  }\n\n  //如果同时按下shift加方向键则是调整宽度高度\n  if (event.shiftKey) {\n    console.log('Shift键被按住了！');\n    if (event.key === \"ArrowLeft\") {\n      store.当前多选组件ID.forEach(id => {\n        let item = store.组件通过id查找结构(id)\n        item.width = parseInt(item.width) - 1\n      })\n    }\n    if (event.key === \"ArrowRight\") {\n      event.preventDefault()\n\n      store.当前多选组件ID.forEach(id => {\n        let item = store.组件通过id查找结构(id)\n        item.width = parseInt(item.width) + 1\n      })\n    }\n    if (event.key === \"ArrowUp\") {\n      event.preventDefault()\n\n      store.当前多选组件ID.forEach(id => {\n        let item = store.组件通过id查找结构(id)\n        item.height = parseInt(item.height) - 1\n      })\n    }\n    if (event.key === \"ArrowDown\") {\n      event.preventDefault()\n\n      store.当前多选组件ID.forEach(id => {\n        let item = store.组件通过id查找结构(id)\n        item.height = parseInt(item.height) + 1\n      })\n    }\n    return\n  }\n\n  // 键盘按下(event, store.当前组件索引)\n  if (event.key === \"ArrowLeft\") {\n    store.当前多选组件ID.forEach(id => {\n      let item = store.组件通过id查找结构(id)\n      item.left = parseInt(item.left) - 1\n    })\n  }\n  if (event.key === \"ArrowRight\") {\n    event.preventDefault()\n\n    store.当前多选组件ID.forEach(id => {\n      let item = store.组件通过id查找结构(id)\n      item.left = parseInt(item.left) + 1\n    })\n  }\n  if (event.key === \"ArrowUp\") {\n    event.preventDefault()\n\n    store.当前多选组件ID.forEach(id => {\n      let item = store.组件通过id查找结构(id)\n      item.top = parseInt(item.top) - 1\n    })\n  }\n  if (event.key === \"ArrowDown\") {\n    event.preventDefault()\n\n    store.当前多选组件ID.forEach(id => {\n      let item = store.组件通过id查找结构(id)\n      item.top = parseInt(item.top) + 1\n    })\n  }\n\n\n}\n\n</script>\n\n<style>\n\n\n.子组件 {\n  position: relative;\n  width: 100%;\n  height: 100%;\n//overflow: hidden;\n\n}\n\n\n.custom-input {\n  border: 1px dashed #409EFF;\n}\n\n.el-tabs {\n  overflow: visible !important;\n  width: auto !important;\n}\n\n\n.disabled {\n  pointer-events: none;\n  opacity: 0.6; /* 可选：降低透明度来表示禁用状态 */\n}\n\n.子组件.高亮 {\n  background-color: rgba(0, 166, 255, 0.3);\n}\n\n\n</style>"
  },
  {
    "path": "GoEasyDesigner/frontend/src/components/RenderDesignComponentPreview.vue",
    "content": "<template>\n\n  <div\n      :style=\"getItemStyleShape(item)\"\n  >\n    <div\n        v-show=\"item.visible || item.visible\"\n        :id=\"item.name\"\n        :class=\"{ 'disabled': item.disable || item.disable }\"\n        :style=\"{\n              overflowY: item.overflowY || 'visible',\n              overflowX: item.overflowX || 'visible'\n        }\"\n        class=\"子组件\"\n\n        v-demo=\"item\"\n\n    >\n\n      <template v-if=\"item.componentName == 'Window'\">\n        <component is=\"RenderDesignComponent\" v-for=\"(subItem, subIndex) in item.childComponents\" :key=\"subIndex\"\n                   :item=\"subItem\"/>\n      </template>\n\n      <template v-if=\"item.componentName=='elContainer'\">\n        <template v-if=\"item.childComponents.length === 0\">\n          <div style=\"width: 100%;\n                       background: rgba(10,19,37,.05);\n                      border: 1px dashed #ced0d3;\n                      color: rgb(184, 186, 191);\n                      height: 100%;\n                      display: flex;\n                      justify-content: center;\n                      align-items: center;\n                      pointer-events: none;\n\">\n            {{ item.name ? item.name : 'ContentArea' }}\n          </div>\n        </template>\n        <component is=\"RenderDesignComponent\" v-for=\"(subItem, subIndex) in item.childComponents\" :key=\"subIndex\"\n                   :item=\"subItem\"/>\n      </template>\n      <template v-else-if=\"item.customListening\">\n        <component :is=\"item.componentName\" :item=\"item\" @CustomEvent=\"(n, v) => { onCustomEvent(n, v, item) }\" />\n      </template>\n      <template v-else>\n        <component :is=\"item.componentName\" :item=\"item\" />\n      </template>\n\n    </div>\n  </div>\n</template>\n\n<script setup>\nimport { defineProps } from 'vue';\nimport { __load_data } from '@/win/__load_data'\nimport { getItemStyleShape } from \"@/public\";\n\nconst { item } = defineProps(['item']);\nconst emits = defineEmits([\"CustomEvent\"]);\n\nconst store = __load_data()\n\n\nconst vDemo = {\n  mounted: (el, binding) => {\n    // console.log(binding.value) // => \"hello!\"\n    let item = binding.value\n    let EventList = {\n      \"click\": \"\",\n      \"mousedown\": \"\",\n      \"mouseup\": \"\",\n      \"dblclick\": \"\",\n      \"contextmenu\": \"\",\n      \"mousemove\": \"\",\n      \"focus\": \"\",\n      \"blur\": \"\",\n      \"keydown\": \"\",\n      \"keyup\": \"\",\n      \"mousewheel\": \"\"\n    }\n    for (let EventName in EventList) {\n      //检查是否存在 event_ 的对象名称\n      if (item.hasOwnProperty(\"event_\" + EventName)) {\n        // console.log(\"存在\", EventName, \"EventName\", EventName, item, item[\"event_\" + EventName])\n        el.addEventListener(EventName, function (e) {\n          store.handleAllEvents(el, e, binding.value, item[\"event_\" + EventName])\n        });\n      }\n    }\n\n  }\n}\nconst onCustomEvent = (name, data, item) => {\n  console.log(\"收到自定义事件\", \"eventName\", name, \"数据\", data);\n\n  // let callFuncName = item.名称 + \"自定义事件\"\n  let callFuncName = item.name + name\n  console.log(\"callFuncName\", callFuncName)\n  var dynamicFunction = undefined\n  try {\n    eval(`dynamicFunction = store.${callFuncName}`)\n    dynamicFunction(name, data)\n  } catch (e) {\n    console.log(\"函数调用出错\", callFuncName, \"dynamicFunction\", dynamicFunction, \"e\", e)\n  }\n\n}\n</script>\n\n<style>\n\n\n.子组件 {\n  position: relative;\n  width: 100%;\n  height: 100%;\n//overflow: hidden;\n\n}\n\n\n.custom-input {\n  border: 1px dashed #409EFF;\n}\n\n.el-tabs {\n  overflow: visible !important;\n  width: auto !important;\n}\n\n\n.disabled {\n  pointer-events: none;\n  opacity: 0.6; /* 可选：降低透明度来表示禁用状态 */\n}\n\n.子组件.高亮 {\n  background-color: rgba(0, 166, 255, 0.3);\n}\n\n\n</style>"
  },
  {
    "path": "GoEasyDesigner/frontend/src/components/RenderDesignComponentWin.vue",
    "content": "<template>\n\n  <div\n      :style=\"getItemStyleShape(item)\"\n  >\n    <div\n        v-show=\"item.visible || item.visible\"\n        :id=\"item.name\"\n        :class=\"{ 'disabled': item.disable || item.disable }\"\n        :style=\"{\n              overflowY: item.overflowY || 'visible',\n              overflowX: item.overflowX || 'visible'\n        }\"\n        class=\"子组件\"\n    >\n      <template v-if=\"item.componentName == 'Window'\">\n        <component is=\"RenderDesignComponentWin\" v-for=\"(subItem, subIndex) in item.childComponents\" :key=\"subIndex\"\n                   :item=\"subItem\"/>\n      </template>\n\n      <template v-if=\"item.componentName=='elContainer'\">\n        <template v-if=\"item.childComponents.length === 0\">\n          <div style=\"width: 100%;\n                       background: rgba(10,19,37,.05);\n                      border: 1px dashed #ced0d3;\n                      color: rgb(184, 186, 191);\n                      height: 100%;\n                      display: flex;\n                      justify-content: center;\n                      align-items: center;\n                      pointer-events: none;\n\">\n            {{ item.name ? item.name : 'ContentArea' }}\n          </div>\n        </template>\n        <component is=\"RenderDesignComponentWin\" v-for=\"(subItem, subIndex) in item.childComponents\" :key=\"subIndex\"\n                   :item=\"subItem\"/>\n      </template>\n      <template v-else>\n        <component :is=\"item.componentName\" :item=\"item\"/>\n      </template>\n    </div>\n  </div>\n</template>\n\n<script setup>\nimport {defineProps} from 'vue';\nimport {useAppStore} from '@/stores/appStore'\nimport {getItemStyle2, getItemStyleShape} from \"@/public\";\nconst {item} = defineProps(['item']);\n\nconst store = useAppStore()\n\n</script>\n\n<style>\n.子组件 {\n  position: relative;\n  width: 100%;\n  height: 100%;\n}\n\n.custom-input {\n  border: 1px dashed #409EFF;\n}\n\n.el-tabs {\n  overflow: visible !important;\n  width: auto !important;\n}\n\n.disabled {\n  pointer-events: none;\n  opacity: 0.6;\n}\n\n.子组件.高亮 {\n  background-color: rgba(0, 166, 255, 0.3);\n}\n</style>"
  },
  {
    "path": "GoEasyDesigner/frontend/src/components/Shape.vue",
    "content": "<template>\n  <div ref=\"shapeRef\" class=\"Shape\">\n    <div\n        v-for=\"(direction, index) in directions\"\n        :key=\"index\"\n        :class=\"['dot', direction]\"\n        :style=\"direction\"\n        @mousedown=\"mousedown(direction, $event)\"\n        @click.stop\n    ></div>\n\n    <div v-if=\"nowIndex!=='1'\" class=\"调整整体位置\" :style=\"工具条位置\">\n      <el-button-group\n      >\n        <el-button :icon=\"Aim\" size=\"small\" title=\"调整组件位置\"\n                   type=\"primary\"\n                   @mousedown=\"mousedown('all', $event)\"\n                   @click.stop\n        ></el-button>\n        <el-button :icon=\"Delete\" size=\"small\" title=\"删除组件\" type=\"danger\"\n                   @click.stop=\"删除\"\n        ></el-button>\n      </el-button-group>\n    </div>\n  </div>\n</template>\n\n<script>\nimport {Delete, Aim} from \"@element-plus/icons-vue\";\n\nexport default {\n  name: \"DirectionalDots\",\n  computed: {\n    Delete() {\n      return Delete\n    },\n    Aim() {\n      return Aim\n    },\n    工具条位置() {\n      const top = parseInt(this.item_data.top);\n      const left = parseInt(this.item_data.left);\n      const width = parseInt(this.item_data.width);\n      \n      // 工具条尺寸\n      const toolbarWidth = 100;\n      const toolbarOffset = 40;\n      \n      // 默认位置在顶部居中\n      let position = {\n        top: `-${toolbarOffset}px`,\n        bottom: 'auto',\n        left: '0%',\n        transform: 'translateX(-0%)'\n      };\n      \n      // 如果顶部空间不足，显示在底部\n      if (top < toolbarOffset) {\n        position.top = 'auto';\n        position.bottom = `-${toolbarOffset}px`;\n      }\n      \n      // 如果组件太靠左，工具条显示在右侧\n      if (left < toolbarWidth) {\n        position.left = `${width + 10}px`;\n        position.transform = 'none';\n      }\n      // 如果组件太靠右，工具条显示在左侧\n      else if (left + width + toolbarWidth > window.innerWidth) {\n        position.left = `${-toolbarWidth - 10}px`;\n        position.transform = 'none';\n      }\n      \n      return position;\n    }\n  },\n  components: {\n    Delete, Aim\n  },\n  props: {\n    index: {\n      type: String,\n      default: 0,\n    },\n    item_data: {\n      type: Object,\n      default: 0,\n    },\n    nowIndex: {\n      type: String,\n      default: 0,\n    },\n  },\n  created() {\n    // console.log(\"index\", this.index);\n    // console.log(\"nowIndex\", this.nowIndex);\n\n  },\n  emits: ['update-style', '删除'],\n  data() {\n    return {\n      directions: [\"top\", \"bottom\", \"left\", \"right\", \"top-left\", \"top-right\", \"bottom-left\", \"bottom-right\"],\n      draggingDot: \"\",\n      clientX: 0,\n      clientY: 0,\n      startX: 0,\n      startY: 0,\n    };\n  },\n  methods: {\n    删除: function () {\n      this.$emit('删除', this.item_data.id)\n\n    },\n    mousedown: function (direction, event) {\n      event.stopPropagation()\n      event.preventDefault()\n      this.draggingDot = direction;\n      this.startX = event.clientX;\n      this.startY = event.clientY;\n      let isFirst = true;\n      let dthis = this;\n\n      console.log(\"鼠标按下\", this.startX + \" \" + this.startY)\n      // let newLeft2 = dthis.$refs.shapeRef.offsetLeft;\n      // let newTop2 = dthis.$refs.shapeRef.offsetTop;\n      // let newWidth2 = dthis.$refs.shapeRef.offsetWidth;\n      // let newHeight2 = dthis.$refs.shapeRef.offsetHeight;\n      let newLeft2 = parseInt(dthis.item_data.left);\n      let newTop2 = parseInt(dthis.item_data.top);\n      // let newWidth2 = parseInt(dthis.item_data.width);\n      // let newHeight2 = parseInt(dthis.item_data.height);\n      let newWidth2 = dthis.$refs.shapeRef.offsetWidth;\n      let newHeight2 = dthis.$refs.shapeRef.offsetHeight;\n\n      let mousemove = function (event) {\n        // console.log(\"移动\", dthis.startX, dthis.startY, event.clientX, event.clientY);\n\n        dthis.clientX = event.clientX;\n        dthis.clientY = event.clientY;\n\n        if (isFirst) {\n          isFirst = false\n          return\n        }\n        //计算移动距离\n        let moveX = dthis.clientX - dthis.startX;\n        let moveY = dthis.clientY - dthis.startY;\n\n        // console.log(\"放开\",  dthis.startX, dthis.startY,dthis.clientX, dthis.clientY);\n        // console.log(\"移动距离\",dthis.draggingDot, moveX, moveY);\n\n        let newLeft = newLeft2;\n        let newTop = newTop2;\n        let newWidth = newWidth2;\n        let newHeight = newHeight2;\n\n\n        if (dthis.draggingDot == \"all\") {\n          //调整左边顶边\n          newLeft += moveX;\n          newTop += moveY;\n\n          // console.log(\"移动后的位置\",  dthis.index,newLeft, newTop);\n          newWidth = dthis.$refs.shapeRef.width;\n          newHeight = dthis.$refs.shapeRef.height;\n          dthis.$emit('update-style', dthis.item_data, {\n            left: newLeft,\n            top: newTop,\n            width: newWidth,\n            height: newHeight\n          })\n          return;\n        }\n\n        if (dthis.draggingDot === \"top\") {\n          newTop += moveY;\n          newHeight -= moveY;\n        } else if (dthis.draggingDot === \"bottom\") {\n          newHeight += moveY;\n        } else if (dthis.draggingDot === \"left\") {\n          newLeft += moveX;\n          newWidth -= moveX;\n        } else if (dthis.draggingDot === \"right\") {\n          newWidth += moveX;\n        } else if (dthis.draggingDot === \"top-left\") {\n          newLeft += moveX;\n          newWidth -= moveX;\n          newTop += moveY;\n          newHeight -= moveY;\n        } else if (dthis.draggingDot === \"top-right\") {\n          newWidth += moveX;\n          newTop += moveY;\n          newHeight -= moveY;\n        } else if (dthis.draggingDot === \"bottom-left\") {\n          newLeft += moveX;\n          newWidth -= moveX;\n          newHeight += moveY;\n        } else if (dthis.draggingDot === \"bottom-right\") {\n          newWidth += moveX;\n          newHeight += moveY;\n        }\n        if (newWidth < 0 || newHeight < 0) {\n          return\n        }\n        // console.log(\"移动后的位置\",  dthis.index,newLeft, newTop, newWidth, newHeight);\n        // if (dthis.item_data.width.toString().indexOf(\"%\") > -1) {\n        //   newWidth = dthis.item_data.width\n        // }\n        // if (dthis.item_data.height.toString().indexOf(\"%\") > -1) {\n        //   newHeight = dthis.item_data.height\n        // }\n\n        dthis.$emit('update-style', dthis.item_data, {\n          left: newLeft,\n          top: newTop,\n          width: newWidth,\n          height: newHeight\n        })\n\n\n      }\n      let mouseup = function () {\n        document.removeEventListener(\"mousemove\", mousemove);\n        document.removeEventListener(\"mouseup\", mouseup);\n      }\n      document.addEventListener(\"mousemove\", mousemove);\n      document.addEventListener(\"mouseup\", mouseup);\n\n    },\n\n  },\n};\n</script>\n\n<style scoped>\n.Shape {\n  position: absolute;\n}\n\n\n.dot {\n  width: 6px;\n  height: 6px;\n  background-color: #057aff;\n  position: absolute;\n  cursor: pointer;\n  z-index: 666;\n\n}\n\n.top {\n  top: -6px;\n  left: 50%;\n  transform: translateX(-50%);\n  cursor: n-resize;\n}\n\n.bottom {\n  bottom: -8px;\n  left: 50%;\n  transform: translateX(-50%);\n  cursor: s-resize;\n}\n\n.left {\n  top: 50%;\n  left: -6px;\n  transform: translateY(-50%);\n  cursor: w-resize;\n}\n\n.right {\n  top: 50%;\n  right: -8px;\n  transform: translateY(-50%);\n  cursor: e-resize;\n}\n\n.top-left {\n  top: -6px;\n  left: -6px;\n  cursor: nw-resize;\n}\n\n.top-right {\n  top: -6px;\n  right: -8px;\n  cursor: ne-resize;\n}\n\n.bottom-left {\n  bottom: -8px;\n  left: -6px;\n  cursor: sw-resize;\n}\n\n.bottom-right {\n  bottom: -8px;\n  right: -8px;\n  cursor: se-resize;\n}\n\n.调整整体位置 {\n  transform: translateX(-50%);\n  width: 100px;\n  height: 24px;\n  cursor: pointer;\n  z-index: 666;\n  position: absolute;\n}\n\n.Shape div {\n  pointer-events: auto;\n}\n\n.Shape {\n  background: none !important;\n}\n\n</style>"
  },
  {
    "path": "GoEasyDesigner/frontend/src/components/boxs/el/Button/Button.js",
    "content": "export default {\n    top: \"0\",\n    left: \"0\",\n    width: \"76\",\n    height: \"40\",\n    noPlace: true,\n    buttonType: \"default\",\n    visible: true,\n    disable: false,\n    size: \"custom\",\n    zIndex: 0,\n    text: \"Button\",\n}\n"
  },
  {
    "path": "GoEasyDesigner/frontend/src/components/boxs/el/Button/Button.vue",
    "content": "<template>\n  <el-button\n      :style=\"item.size=='custom' ? getItemStyle(item):''\"\n      v-show=\"item.visible\"\n      v-bind:disabled=\"item.disable\"\n      :type=\"item.buttonType\"\n      :size=\"item.size=='custom' ?'':item.size\"\n  >{{ item.text }}</el-button>\n</template>\n\n\n\n<script>\nimport {getItemStyle} from \"@/public\";\n\nexport default {\n  methods: {getItemStyle},\n  props: {\n    item: {\n      type: Object,\n      default: '',\n    }\n  },\n}\n</script>\n"
  },
  {
    "path": "GoEasyDesigner/frontend/src/components/boxs/el/Button/ButtonAttr.vue",
    "content": "<template>\n  <div class=\"属性表格\">\n    <el-form\n        label-position=\"left\"\n        label-width=\"100px\"\n        style=\"max-width: 460px\"\n    >\n      <component is=\"common-properties\" :item=\"item\"/>\n\n      <el-form-item label=\"Text\">\n        <el-input v-model=\"props.item.text\"/>\n      </el-form-item>\n      <el-form-item label=\"Button Type\">\n        <el-select v-model=\"props.item.buttonType\" style=\"width: 100%\">\n          <el-option\n              v-for=\"(item, index) in buttonTypeOptions\"\n              :key=\"item.value\"\n              :label=\"item.label\"\n              :value=\"item.value\"\n          />\n        </el-select>\n      </el-form-item>\n      <el-form-item label=\"Size\">\n        <el-select v-model=\"props.item.size\" style=\"width: 100%\">\n          <el-option\n              v-for=\"(item, index) in sizeOptions\"\n              :key=\"item.value\"\n              :label=\"item.label\"\n              :value=\"item.value\"\n          />\n        </el-select>\n      </el-form-item>\n    </el-form>\n  </div>\n\n  <component is=\"common-event-component\" :eventName=\"eventName\" :item=\"props.item\"/>\n\n</template>\n<script setup>\nimport {ref, defineProps, defineEmits, onMounted} from \"vue\";\n\nconst emits = defineEmits([\"添加事件被选择\"]); // 声明接受的事件\nconst props = defineProps(['item']);\nlet buttonTypeOptions = ref([\n  {\"label\": \"默认\", \"value\": \"default\"},\n  {\"label\": \"主要\", \"value\": \"primary\"},\n  {\"label\": \"成功\", \"value\": \"success\"},\n  {\"label\": \"信息\", \"value\": \"info\"},\n  {\"label\": \"警告\", \"value\": \"warning\"},\n  {\"label\": \"危险\", \"value\": \"danger\"},\n]);\n\nlet sizeOptions = ref([\n  {\"label\": \"自定义\", \"value\": \"custom\"},\n  {\"label\": \"默认\", \"value\": \"default\"},\n  {\"label\": \"大号\", \"value\": \"large\"},\n  {\"label\": \"小号\", \"value\": \"small\"},\n]);\n\n\nlet eventName = ref([\n  {\"label\": \"被单击\", \"value\": \"click\"},\n  {\"label\": \"鼠标左键被按下\", \"value\": \"mousedown\"},\n  {\"label\": \"鼠标左键被放开\", \"value\": \"mouseup\"},\n  {\"label\": \"被双击\", \"value\": \"dblclick\"},\n  {\"label\": \"鼠标右键被按下\", \"value\": \"contextmenu\"},\n  {\"label\": \"鼠标位置被移动\", \"value\": \"mousemove\"},\n  {\"label\": \"获得焦点\", \"value\": \"focus\"},\n  {\"label\": \"失去焦点\", \"value\": \"blur\"},\n  {\"label\": \"按下某键\", \"value\": \"keydown\"},\n  {\"label\": \"放开某键\", \"value\": \"keyup\"},\n  {\"label\": \"滚轮被滚动\", \"value\": \"mousewheel\"}\n])\n\n\nonMounted(() => {\n  if (localStorage.getItem(\"locale\") === \"English\") {\n    buttonTypeOptions.value.forEach((item) => {\n      item.label = item.value;\n    });\n    sizeOptions.value.forEach((item) => {\n      item.label = item.value;\n    });\n  }\n});\n\n\n</script>"
  },
  {
    "path": "GoEasyDesigner/frontend/src/components/boxs/el/CheckBox/CheckBox.js",
    "content": "export default {\n    top: \"0\",\n    left: \"0\",\n    width: \"250\",\n    height: \"80\",\n    noPlace: true,\n    visible: true,\n    disable: false,\n    zIndex: 0,\n    size: \"default\",\n    currentSelected: [],\n    options:[\n        {\"label\": \"Default\", \"value\": \"default\"},\n        {\"label\": \"Large\", \"value\": \"large\"},\n        {\"label\": \"Small\", \"value\": \"small\"},\n    ],\n    buttonGroup: false,\n    withBorder: false\n}\n"
  },
  {
    "path": "GoEasyDesigner/frontend/src/components/boxs/el/CheckBox/CheckBox.vue",
    "content": "<template>\n\n  <el-checkbox-group v-model=\"item.currentSelected\" :size=\"item.size\">\n    <template v-if=\"item.buttonGroup\">\n      <el-checkbox-button\n          v-for=\"(v, i) in item.options\"\n          :label=\"v.value\"\n          :border=\"item.withBorder\"\n\n      >{{ v.label }}\n      </el-checkbox-button>\n    </template>\n    <template v-else>\n      <el-checkbox\n          v-for=\"(v, i) in item.options\"\n          :label=\"v.value\"\n          :border=\"item.withBorder\"\n\n      >{{ v.label }}\n\n      </el-checkbox>\n    </template>\n\n\n  </el-checkbox-group>\n\n</template>\n\n<script>\nimport {getItemStyle} from \"@/public\";\n\nexport default {\n  methods: {getItemStyle},\n  props: {\n    item: {\n      type: Object,\n      default: '',\n    }\n  },\n}\n</script>\n"
  },
  {
    "path": "GoEasyDesigner/frontend/src/components/boxs/el/CheckBox/CheckBoxAttr.vue",
    "content": "<template>\n  <div class=\"属性表格\">\n\n  <el-form\n      label-position=\"left\"\n      label-width=\"100px\"\n      style=\"max-width: 460px\"\n  >\n    <component is=\"common-properties\" :item=\"item\"/>\n    <el-form-item label=\"size\">\n      <el-select v-model=\"props.item.size\" style=\"width: 100%\">\n        <el-option\n            v-for=\"(item, index) in sizeOptions\"\n            :key=\"item\"\n            :label=\"item.label\"\n            :value=\"item.value\"\n        />\n      </el-select>\n    </el-form-item>\n    <el-form-item label=\"buttonGroup\">\n      <el-switch v-model=\"item.buttonGroup\"/>\n    </el-form-item>\n    <el-form-item label=\"withBorder\">\n      <el-switch v-model=\"item.withBorder\"/>\n    </el-form-item>\n    <el-form-item label=\"currentSelected\">\n      <el-input v-model=\"item.currentSelected\"/>\n    </el-form-item>\n\n    <el-form label-position=\"top\">\n      <el-form-item label=\"options\"\n      >\n        <el-row v-for=\"(item, index) in props.item.options\">\n          <el-col :span=\"10\">\n            <el-input\n                v-model=\"item.label\"\n                placeholder=\"\"\n            />\n          </el-col>\n\n          <el-col :span=\"10\">\n            <el-input\n                v-model=\"item.value\"\n                placeholder=\"\"\n            />\n          </el-col>\n          <el-col :span=\"4\">\n            <el-button @click.stop=\"deleteItem(item.value)\" :icon=\"Delete\" size=\"small\"></el-button>\n\n          </el-col>\n        </el-row>\n\n        <el-button @click.stop=\"addItem()\" size=\"small\">Add Option</el-button>\n      </el-form-item>\n    </el-form>\n\n  </el-form>\n  </div>\n  <component is=\"common-event-component\" :item=\"props.item\"  :eventName=\"eventName\"/>\n\n\n</template>\n<script setup>\nimport {ref, defineProps, defineEmits, onMounted} from \"vue\";\nimport {Delete} from \"@element-plus/icons-vue\";\n\nimport {useAppStore} from '@/stores/appStore'\n\nconst store = useAppStore()\n\nconst emits = defineEmits([\"添加事件被选择\"]); // 声明接受的事件\nconst props = defineProps(['item']);\nlet sizeOptions = ref([\n  {\"label\": \"默认\", \"value\": \"default\"},\n  {\"label\": \"大号\", \"value\": \"large\"},\n  {\"label\": \"小号\", \"value\": \"small\"},\n]);\n\nfunction deleteItem(value) {\n  let index = props.item.options.findIndex((item) => item.value === value);\n  props.item.options.splice(index, 1);\n}\n\nfunction addItem() {\n  let k = store.获取索引( \"Options\")\n\n  props.item.options.push({\"label\": k, \"value\": k});\n}\n\nlet eventName = ref([\n\n  {\"label\": \"被单击\", \"value\": \"click\"},\n  {\"label\": \"鼠标左键被按下\", \"value\": \"mousedown\"},\n  {\"label\": \"鼠标左键被放开\", \"value\": \"mouseup\"},\n  {\"label\": \"被双击\", \"value\": \"dblclick\"},\n  {\"label\": \"鼠标右键被按下\", \"value\": \"contextmenu\"},\n  {\"label\": \"鼠标位置被移动\", \"value\": \"mousemove\"},\n  {\"label\": \"获得焦点\", \"value\": \"focus\"},\n  {\"label\": \"失去焦点\", \"value\": \"blur\"},\n  {\"label\": \"按下某键\", \"value\": \"keydown\"},\n  {\"label\": \"放开某键\", \"value\": \"keyup\"},\n  {\"label\": \"滚轮被滚动\", \"value\": \"mousewheel\"}\n])\n\n\nonMounted(() => {\n  if (localStorage.getItem(\"locale\") === \"English\") {\n    sizeOptions.value.forEach((item) => {\n      item.label = item.value;\n    });\n  }\n});\n</script>\n\n"
  },
  {
    "path": "GoEasyDesigner/frontend/src/components/boxs/el/CommonLayout/CommonLayout.js",
    "content": "export default {\n    top: \"150\",\n    left: \"440\",\n    width: \"300\",\n    height: \"200\",\n    value: \"0\",\n    noPlace: true,\n    visible: true,\n    disable: false,\n    zIndex: 0,\n    layoutMethod: \"header-main\",\n    childComponents: [\n        {\n            componentName: \"elContainer\",\n            name: \"ContentAreaHeader\",\n            area: \"header\",\n            top: \"0\",\n            left: \"0\",\n            width: \"100%\",\n            height: \"100%\",\n            // background: \"#fff\",\n            position: \"relative\",\n            noPlace: false,\n            noDrag: true,\n            visible: true,\n            disable: false,\n            pid: 0,\n            zIndex: 0,\n            childComponents: []\n        },\n\n        {\n            componentName: \"elContainer\",\n            name: \"ContentAreaMain\",\n            area: \"main\",\n            top: \"0\",\n            left: \"0\",\n            width: \"100%\",\n            height: \"100%\",\n            // background: \"red\",\n            position: \"relative\",\n            noPlace: false,\n            noDrag: true,\n            visible: true,\n            disable: false,\n            zIndex: 0,\n            pid: 0,\n            childComponents: []\n        },\n\n        {\n            componentName: \"elContainer\",\n            name: \"ContentAreaFooter\",\n            area: \"footer\",\n\n            top: \"0\",\n            left: \"0\",\n            width: \"100%\",\n            height: \"100%\",\n            // background: \"green\",\n            position: \"relative\",\n            noPlace: false,\n            noDrag: true,\n            visible: true,\n            disable: false,\n            zIndex: 0,\n            pid: 0,\n            childComponents: []\n        },\n\n        {\n            componentName: \"elContainer\",\n            name: \"ContentAreaAside\",\n            area: \"aside\",\n            top: \"0\",\n            left: \"0\",\n            width: \"100px\",\n            height: \"100%\",\n            // background: \"green\",\n            position: \"relative\",\n            noPlace: false,\n            noDrag: true,\n            visible: true,\n            disable: false,\n            zIndex: 0,\n            pid: 0,\n            childComponents: []\n        },\n\n    ]\n}\n"
  },
  {
    "path": "GoEasyDesigner/frontend/src/components/boxs/el/CommonLayout/CommonLayout.vue",
    "content": "<template>\n  <template v-if=\"item.layoutMethod == 'header-main'\">\n    <el-container :style=\"getItemStyle(item)\">\n      <el-header>\n        <component is=\"RenderDesignComponent\" v-for=\"(subItem, subIndex) in getSubComponents('header')\"\n                   :key=\"subIndex\" :item=\"subItem\"/>\n      </el-header>\n      <el-main>\n        <component is=\"RenderDesignComponent\" v-for=\"(subItem, subIndex) in getSubComponents('main')\"\n                   :key=\"subIndex\" :item=\"subItem\"/>\n      </el-main>\n    </el-container>\n  </template>\n  <template v-if=\"item.layoutMethod == 'header-main-footer'\">\n    <el-container :style=\"getItemStyle(item)\">\n      <el-header>\n        <component is=\"RenderDesignComponent\" v-for=\"(subItem, subIndex) in  getSubComponents('header')\"\n                   :key=\"subIndex\" :item=\"subItem\"/>\n      </el-header>\n      <el-main>\n        <component is=\"RenderDesignComponent\" v-for=\"(subItem, subIndex) in getSubComponents('main')\"\n                   :key=\"subIndex\" :item=\"subItem\"/>\n      </el-main>\n      <el-footer>\n        <component is=\"RenderDesignComponent\" v-for=\"(subItem, subIndex) in getSubComponents('footer')\"\n                   :key=\"subIndex\" :item=\"subItem\"/>\n      </el-footer>\n    </el-container>\n  </template>\n  <template v-if=\"item.layoutMethod == 'aside-main'\">\n    <el-container :style=\"getItemStyle(item)\">\n      <el-aside :width=\"getSubComponents('aside')[0].width\">\n\n        <component is=\"RenderDesignComponent\" v-for=\"(subItem, subIndex) in  getSubComponents('aside')\"\n                   :key=\"subIndex\" :item=\"subItem\"/>\n      </el-aside>\n      <el-main>\n        <component is=\"RenderDesignComponent\" v-for=\"(subItem, subIndex) in getSubComponents('main')\"\n                   :key=\"subIndex\" :item=\"subItem\"/>\n      </el-main>\n    </el-container>\n  </template>\n  <template v-if=\"item.layoutMethod == 'header-aside-main'\">\n    <el-container :style=\"getItemStyle(item)\">\n      <el-header>\n        <component is=\"RenderDesignComponent\" v-for=\"(subItem, subIndex) in  getSubComponents('header')\"\n                   :key=\"subIndex\" :item=\"subItem\"/>\n      </el-header>\n      <el-container>\n        <el-aside :width=\"getSubComponents('aside')[0].width\">\n          <component is=\"RenderDesignComponent\" v-for=\"(subItem, subIndex) in  getSubComponents('aside')\"\n                     :key=\"subIndex\" :item=\"subItem\"/>\n        </el-aside>\n        <el-main>\n          <component is=\"RenderDesignComponent\" v-for=\"(subItem, subIndex) in getSubComponents('main')\"\n                     :key=\"subIndex\" :item=\"subItem\"/>\n        </el-main>\n      </el-container>\n    </el-container>\n  </template>\n  <template v-if=\"item.layoutMethod == 'header-aside-main-footer'\">\n    <el-container :style=\"getItemStyle(item)\">\n      <el-header>\n        <component is=\"RenderDesignComponent\" v-for=\"(subItem, subIndex) in  getSubComponents('header')\"\n                   :key=\"subIndex\" :item=\"subItem\"/>\n      </el-header>\n      <el-container>\n        <el-aside :width=\"getSubComponents('aside')[0].width\">\n\n          <component is=\"RenderDesignComponent\" v-for=\"(subItem, subIndex) in  getSubComponents('aside')\"\n                     :key=\"subIndex\" :item=\"subItem\"/>\n        </el-aside>\n        <el-container>\n\n          <el-main>\n            <component is=\"RenderDesignComponent\" v-for=\"(subItem, subIndex) in getSubComponents('main')\"\n                       :key=\"subIndex\" :item=\"subItem\"/>\n          </el-main>\n          <el-footer>\n            <component is=\"RenderDesignComponent\" v-for=\"(subItem, subIndex) in getSubComponents('footer')\"\n                       :key=\"subIndex\" :item=\"subItem\"/>\n          </el-footer>\n        </el-container>\n      </el-container>\n    </el-container>\n  </template>\n  <template v-if=\"item.layoutMethod == 'aside-header-main'\">\n    <el-container :style=\"getItemStyle(item)\">\n      <el-aside :width=\"getSubComponents('aside')[0].width\">\n\n        <component is=\"RenderDesignComponent\" v-for=\"(subItem, subIndex) in  getSubComponents('aside')\"\n                   :key=\"subIndex\" :item=\"subItem\"/>\n      </el-aside>\n      <el-container>\n        <el-header>\n          <component is=\"RenderDesignComponent\" v-for=\"(subItem, subIndex) in  getSubComponents('header')\"\n                     :key=\"subIndex\" :item=\"subItem\"/>\n        </el-header>\n        <el-main>\n          <component is=\"RenderDesignComponent\" v-for=\"(subItem, subIndex) in getSubComponents('main')\"\n                     :key=\"subIndex\" :item=\"subItem\"/>\n        </el-main>\n\n      </el-container>\n    </el-container>\n  </template>\n  <template v-if=\"item.layoutMethod == 'aside-header-main-footer'\">\n    <el-container :style=\"getItemStyle(item)\">\n      <el-aside :width=\"getSubComponents('aside')[0].width\">\n\n        <component is=\"RenderDesignComponent\" v-for=\"(subItem, subIndex) in  getSubComponents('aside')\"\n                   :key=\"subIndex\" :item=\"subItem\"/>\n      </el-aside>\n      <el-container>\n        <el-header>\n          <component is=\"RenderDesignComponent\" v-for=\"(subItem, subIndex) in  getSubComponents('header')\"\n                     :key=\"subIndex\" :item=\"subItem\"/>\n        </el-header>\n        <el-main>\n          <component is=\"RenderDesignComponent\" v-for=\"(subItem, subIndex) in getSubComponents('main')\"\n                     :key=\"subIndex\" :item=\"subItem\"/>\n        </el-main>\n        <el-footer>\n          <component is=\"RenderDesignComponent\" v-for=\"(subItem, subIndex) in getSubComponents('footer')\"\n                     :key=\"subIndex\" :item=\"subItem\"/>\n        </el-footer>\n      </el-container>\n    </el-container>\n  </template>\n\n</template>\n\n<script>\nimport {getItemStyle} from \"@/public\";\n\nexport default {\n  methods: {\n    getItemStyle,\n    getSubComponents(area) {\n      let index;\n      for (let i = 0; i < this.item.childComponents.length; i++) {\n        if (this.item.childComponents[i].area === area) {\n          index = i;\n          break;\n        }\n      }\n      // console.log(\"json\", JSON.stringify(this.item.子组件, null, 2))\n      // console.log(\"index\", index)\n      return [this.item.childComponents[index]];\n    },\n  },\n  props: {\n    item: {\n      type: Object,\n      default: '',\n    }\n  },\n}\n</script>\n<script setup>\n\n\n</script>\n<style scoped>\n.el-header {\n  --el-header-padding: 0px;\n  height: auto;\n}\n\n.el-main {\n  --el-main-padding: 0px;\n  height: auto;\n\n}\n\n.el-footer {\n  --el-footer-padding: 0px;\n  height: auto;\n\n}\n\n.el-aside {\n  --el-aside-padding: 0px;\n  height: auto;\n\n}\n\n</style>"
  },
  {
    "path": "GoEasyDesigner/frontend/src/components/boxs/el/CommonLayout/CommonLayoutAttr.vue",
    "content": "<template>\n  <div class=\"属性表格\">\n  <el-form\n      label-position=\"left\"\n      label-width=\"100px\"\n      style=\"max-width: 460px\"\n  >\n      <component is=\"common-properties\" :item=\"item\"/>\n\n      <el-form-item label=\"layoutMethod\">\n        <el-select v-model=\"props.item.layoutMethod\" style=\"width: 100%\">\n          <el-option\n              v-for=\"(item, index) in layoutMethod选项\"\n              :key=\"item\"\n              :label=\"item.label\"\n              :value=\"item.value\"\n          />\n        </el-select>\n      </el-form-item>\n\n    </el-form>\n  </div>\n  <component is=\"common-event-component\" :item=\"props.item\"  :eventName=\"eventName\"/>\n\n\n</template>\n<script setup>\nimport {ref, defineProps, defineEmits, onMounted} from \"vue\";\n\nconst emits = defineEmits([\"添加事件被选择\"]); // 声明接受的事件\nconst props = defineProps(['item']);\n\nimport {Delete} from \"@element-plus/icons-vue\";\n\nimport {useAppStore} from '@/stores/appStore'\n\nconst store = useAppStore()\n\n\nlet layoutMethod选项 = ref([\n  {\"label\": \"header-main\", \"value\": \"header-main\"},\n  {\"label\": \"header-main-footer\", \"value\": \"header-main-footer\"},\n  {\"label\": \"aside-main\", \"value\": \"aside-main\"},\n  {\"label\": \"header-aside-main\", \"value\": \"header-aside-main\"},\n  {\"label\": \"header-aside-main-footer\", \"value\": \"header-aside-main-footer\"},\n  {\"label\": \"aside-header-main\", \"value\": \"aside-header-main\"},\n  {\"label\": \"aside-header-main-footer\", \"value\": \"aside-header-main-footer\"},\n]);\n\n\nlet eventName = ref([\n\n  {\"label\": \"被单击\", \"value\": \"click\"},\n  {\"label\": \"鼠标左键被按下\", \"value\": \"mousedown\"},\n  {\"label\": \"鼠标左键被放开\", \"value\": \"mouseup\"},\n  {\"label\": \"被双击\", \"value\": \"dblclick\"},\n  {\"label\": \"鼠标右键被按下\", \"value\": \"contextmenu\"},\n  {\"label\": \"鼠标位置被移动\", \"value\": \"mousemove\"},\n  {\"label\": \"获得焦点\", \"value\": \"focus\"},\n  {\"label\": \"失去焦点\", \"value\": \"blur\"},\n  {\"label\": \"按下某键\", \"value\": \"keydown\"},\n  {\"label\": \"放开某键\", \"value\": \"keyup\"},\n  {\"label\": \"滚轮被滚动\", \"value\": \"mousewheel\"}\n])\n\n\n\n</script>"
  },
  {
    "path": "GoEasyDesigner/frontend/src/components/boxs/el/Container/Container.js",
    "content": "export default {\n    noPlace: false,\n    visible: true,\n    disable: false,\n    top: \"0\",\n    left: \"0\",\n    width: \"200\",\n    height: \"200\",\n    background: \"#fff\",\n    zIndex: 0,\n    overflowY: \"visible\",\n    overflowX: \"visible\",\n    childComponents: []\n}\n"
  },
  {
    "path": "GoEasyDesigner/frontend/src/components/boxs/el/Container/ContainerAttr.vue",
    "content": "<template>\n  <div class=\"属性表格\">\n  <el-form\n      label-position=\"left\"\n      label-width=\"100px\"\n      style=\"max-width: 460px\"\n  >\n      <component is=\"common-properties\" :item=\"item\"/>\n\n      <el-form-item label=\"span\" v-if=\"props.item.span>=0\">\n        <el-input-number v-model=\"props.item.占比\" max=\"24\" min=\"0\"/>\n      </el-form-item>\n    </el-form>\n  </div>\n  <component is=\"common-event-component\" :item=\"props.item\"  :eventName=\"eventName\"/>\n\n\n</template>\n<script setup>\nimport {ref, defineProps, defineEmits} from \"vue\";\n\nconst emits = defineEmits([\"添加事件被选择\"]); // 声明接受的事件\nconst props = defineProps(['item']);\n\n\nlet 事件索引 = ref(0)\n\nlet eventName = ref([\n\n  {\"label\": \"被单击\", \"value\": \"click\"},\n  {\"label\": \"鼠标左键被按下\", \"value\": \"mousedown\"},\n  {\"label\": \"鼠标左键被放开\", \"value\": \"mouseup\"},\n  {\"label\": \"被双击\", \"value\": \"dblclick\"},\n  {\"label\": \"鼠标右键被按下\", \"value\": \"contextmenu\"},\n  {\"label\": \"鼠标位置被移动\", \"value\": \"mousemove\"},\n  {\"label\": \"获得焦点\", \"value\": \"focus\"},\n  {\"label\": \"失去焦点\", \"value\": \"blur\"},\n  {\"label\": \"按下某键\", \"value\": \"keydown\"},\n  {\"label\": \"放开某键\", \"value\": \"keyup\"},\n  {\"label\": \"滚轮被滚动\", \"value\": \"mousewheel\"}\n])\n\n</script>"
  },
  {
    "path": "GoEasyDesigner/frontend/src/components/boxs/el/ControlButton/ControlButton.js",
    "content": "export default {\n    top: \"inherit\",\n    left: \"inherit\",\n    width: \"146\",\n    height: \"32\",\n    right: \"0\",\n    bottom: \"inherit\",\n    noPlace: true,\n    visible: true,\n    disable: false,\n    zIndex: 0,\n    block: true,\n    ghost: false,\n    loading: false,\n    shape: \"rectangle\",\n    size: \"medium\",\n    theme: \"primary\",\n    variant: \"base\",\n    text:\"按钮\",\n}\n"
  },
  {
    "path": "GoEasyDesigner/frontend/src/components/boxs/el/ControlButton/ControlButton.vue",
    "content": "<template>\n  <div class=\"flex h-10 justify-end flex-0\">\n    <button class=\"w-12 h-8 text-gray-500 dark:hover:text-white hover:bg-[#E9E9E9] dark:hover:bg-[#2D2D2D]\"\n            @click=\"clickWindowMinimise\">\n      <Icon style=\"display: inline\" icon=\"mdi:window-minimize\"/>\n    </button>\n    <button class=\"w-12 h-8 text-gray-500 dark:hover:text-white hover:bg-[#E9E9E9] dark:hover:bg-[#2D2D2D]\"\n            @click=\"clickMaxWindow\">\n      <Icon style=\"display: inline\" icon=\"mdi:window-maximize\"/>\n    </button>\n    <button class=\"w-12 h-8 text-gray-500 hover:text-white hover:bg-[#C13124] dark:hover:bg-[#C13124]\" @click=\"clickQuit\">\n      <Icon style=\"display: inline\" icon=\"mdi:window-close\"/>\n    </button>\n  </div>\n</template>\n\n<script setup>\nimport {defineProps, ref} from \"vue\";\nimport {Icon} from '@iconify/vue';\n\nconst {item} = defineProps(['item'])\nimport {\n  Quit,\n  WindowMaximise,\n  WindowMinimise,\n  WindowUnmaximise,\n  WindowFullscreen,\n  WindowIsMaximised\n} from \"../../../../../wailsjs/runtime\";\n// const [isMac, setIsMac] = ref(false); // 是否是 Mac 系统\n\nlet instance = getCurrentInstance();\nlet designMode = instance.appContext.config.globalProperties.designMode;\n\nasync function clickMaxWindow() {\n  if (designMode) {\n    return;\n  }\n  if (await WindowIsMaximised()) {\n    WindowUnmaximise();\n  } else {\n    WindowMaximise();\n  }\n}\n\nasync function clickWindowMinimise() {\n  if (designMode) {\n    return;\n  }\n  WindowMinimise();\n}\n\nasync function clickQuit() {\n  if (designMode) {\n    return;\n  }\n  Quit();\n}\n\n\n</script>\n"
  },
  {
    "path": "GoEasyDesigner/frontend/src/components/boxs/el/ControlButton/ControlButtonAttr.vue",
    "content": "<template>\n  <div class=\"属性表格\">\n    <el-form\n        label-position=\"left\"\n        label-width=\"100px\"\n        style=\"max-width: 460px\"\n    >\n      <component is=\"common-properties\" :item=\"item\"/>\n\n    </el-form>\n  </div>\n\n\n    <component is=\"common-event-component\" :item=\"props.item\"  :eventName=\"eventNames\"/>\n\n</template>\n<script setup>\nimport {ref, defineProps, defineEmits,onMounted} from \"vue\";\n\nconst emits = defineEmits([\"添加事件被选择\"]); // 声明接受的事件\nconst props = defineProps(['item']);\n\nlet eventNames = ref([\n  {\"label\": \"被单击\", \"value\": \"click\"},\n  {\"label\": \"鼠标左键被按下\", \"value\": \"mousedown\"},\n  {\"label\": \"鼠标左键被放开\", \"value\": \"mouseup\"},\n  {\"label\": \"被双击\", \"value\": \"dblclick\"},\n  {\"label\": \"鼠标右键被按下\", \"value\": \"contextmenu\"},\n  {\"label\": \"鼠标位置被移动\", \"value\": \"mousemove\"},\n  {\"label\": \"获得焦点\", \"value\": \"focus\"},\n  {\"label\": \"失去焦点\", \"value\": \"blur\"},\n  {\"label\": \"按下某键\", \"value\": \"keydown\"},\n  {\"label\": \"放开某键\", \"value\": \"keyup\"},\n  {\"label\": \"滚轮被滚动\", \"value\": \"mousewheel\"}\n])\n\n\n\n</script>"
  },
  {
    "path": "GoEasyDesigner/frontend/src/components/boxs/el/CustomComponent/CustomComponent.js",
    "content": "import {defineEmits} from \"vue\";\n\nexport default {\n    top: \"150\",\n    left: \"440\",\n    width: \"300\",\n    height: \"300\",\n    noPlace: true,\n    visible: true,\n    disable: false,\n    zIndex: 0,\n    customListening:true,\n    data:{\n        username: 'admin',\n        password: 'admin',\n    },\n\n    HTML: `<template>\n  <div class=\"w-full max-w-xs\">\n    <form class=\"bg-white shadow-md rounded px-8 pt-6 pb-8 mb-4\">\n      <div class=\"mb-4\">\n        <label class=\"block text-gray-700 text-sm font-bold mb-2\" for=\"username\">\n          用户名\n        </label>\n        <!-- Move v-model to the input element -->\n        <input v-model=\"item.data.username\" class=\"shadow appearance-none border rounded w-full py-2 px-3 text-gray-700 leading-tight focus:outline-none focus:shadow-outline\" id=\"username\" type=\"text\" placeholder=\"用户名\">\n      </div>\n      <div class=\"mb-6\">\n        <label class=\"block text-gray-700 text-sm font-bold mb-2\" for=\"password\">\n          密码\n        </label>\n        <!-- Move v-model to the input element -->\n        <input v-model=\"item.data.password\" class=\"shadow appearance-none border rounded w-full py-2 px-3 text-gray-700 mb-3 leading-tight focus:outline-none focus:shadow-outline\" id=\"password\" type=\"password\" placeholder=\"******************\">\n        <p class=\"text-red-500 text-xs italic\">请输入密码.</p>\n      </div>\n      <div class=\"flex items-center justify-between\">\n        <button \n        @click=\"onSendEvent('login',item.data)\"\n        class=\"bg-blue-500 hover:bg-blue-700 text-white font-bold py-2 px-4 rounded focus:outline-none focus:shadow-outline\" type=\"button\">\n          登录\n        </button>\n        <a \n        @click=\"onSendEvent('forgotPassword',item.data)\"\n        \n        class=\"inline-block align-baseline font-bold text-sm text-blue-500 hover:text-blue-800\" href=\"#\">\n          忘记密码?\n        </a>\n      </div>\n    </form>\n  </div>\n</template>\n\n<script setup>\nimport {defineEmits, defineProps} from \"vue\";\nconst { item } = defineProps(['item'])\nconsole.log(\"自定义组件数据\", item);\nconst emits = defineEmits([\"CustomEvent\"]); \nconsole.log(\"自定义组件事件\", emits);\nfunction onSendEvent(name,data) {\n    console.log(\"自定义组件\",name,\"发送数据\", item.data);\n    emits(\"CustomEvent\",name,data); \n}\n\n</script>\n`\n}\n"
  },
  {
    "path": "GoEasyDesigner/frontend/src/components/boxs/el/CustomComponent/CustomComponent.vue",
    "content": "<template>\n  <component :is=\"remote\" :item=\"item\" @CustomEvent=\"onCustomEvent\"/>\n</template>\n\n<script setup>\nimport {ref, watch} from 'vue';\nimport {loadModule} from 'vue3-sfc-loader/dist/vue3-sfc-loader.js';\n\nconst remote = ref(null);\nconst {item} = defineProps(['item']);\nconst emits = defineEmits([\"CustomEvent\"]);\n\nloadComponent();\n//创建监听 item.HTML 重新渲染\nwatch(() => item.HTML, () => {\n  loadComponent();\n});\n\nasync function loadComponent() {\n  let style = item.HTML.match(/<style scoped>([\\s\\S]*)<\\/style>/)?.[1] || \"\";\n  if (style === \"\") {\n    style = item.HTML.match(/<style>([\\s\\S]*)<\\/style>/)?.[1] || \"\";\n  }\n  const 自定义css = style;\n  //如果 item.HTML 没有 <template> 标签，就添加一个\n  if (item.HTML.indexOf(\"<template>\") === -1) {\n    //将 <template> 欻人到开头 将 </template>插入到 <style>前面\n    item.HTML = item.HTML.replace(/([\\s\\S]*)<style>/, \"<template>\\n$1\\n</template>\\n\\n<style>\");\n  }\n\n  const Vue = await import('vue');\n\n\n  let ComponentName = \"/\" + item.name + \"Component.vue\";\n  const options = {\n    moduleCache: {vue: Vue},\n    async getFile(url) {\n      if (url === ComponentName) {\n        return Promise.resolve(item.HTML);\n      }\n      if (url === '/style.css') {\n        return Promise.resolve(自定义css);\n      }\n    },\n    addStyle(textContent) {\n      const style = Object.assign(document.createElement('style'), {textContent});\n      const ref = document.head.getElementsByTagName('style')[0] || null;\n      document.head.insertBefore(style, ref);\n    },\n    handleModule: async function (type, getContentData, path, options) {\n      switch (type) {\n        case '.css':\n          options.addStyle(await getContentData(false));\n          return null;\n      }\n    },\n  }\n  remote.value = await loadModule(ComponentName, options);\n}\n\n\nfunction onCustomEvent(name, data) {\n  console.log(\"收到自定义事件\", \"eventName\", name, \"数据\", data);\n  emits(\"CustomEvent\", name, item.data);\n}\n</script>"
  },
  {
    "path": "GoEasyDesigner/frontend/src/components/boxs/el/CustomComponent/CustomComponentAttr.vue",
    "content": "<template>\n  <div class=\"属性表格\">\n    <el-form\n        label-position=\"left\"\n        label-width=\"100px\"\n        style=\"max-width: 460px\"\n    >\n      <component is=\"common-properties\" :item=\"item\"/>\n      <el-form-item label=\"HTML模板\">\n        <el-button @click=\"打开修改数据对话框(props.item.HTML,'HTML')\">编辑</el-button>\n      </el-form-item>\n      <el-form-item label=\"data 格式\">\n        <el-input :autosize=\"{ minRows: 2, maxRows: 4 }\"\n                  :value=\"objectToJson(item.data)\"\n                  type=\"textarea\"\n        />\n      </el-form-item>\n    </el-form>\n\n    <component :is=\"remote\" :item=\"props.item\"/>\n\n  </div>\n  <div id=\"事件选择器\">\n    <component v-if=\"!remote\" is=\"common-event-component\" :item=\"props.item\" :eventName=\"eventName\"/>\n  </div>\n\n  <teleport to=\"body\">\n    <el-dialog v-model=\"显示修改数据对话框状态\" title=\"编辑HTML数据\"\n    >\n      <el-input v-model=\"editedJSON\" :autosize=\"{ minRows: 6, maxRows: 10 }\" type=\"textarea\"/>\n      <div slot=\"footer\" class=\"dialog-footer\">\n        <el-button @click=\"显示修改数据对话框状态 = false\">取消</el-button>\n        <el-button type=\"primary\" @click=\"保存编辑的HTML数据\">确定</el-button>\n      </div>\n    </el-dialog>\n  </teleport>\n\n\n</template>\n<script setup>\nimport {defineEmits, defineProps, ref} from \"vue\";\n\nimport {useAppStore} from '@/stores/appStore'\nimport {loadModule} from \"vue3-sfc-loader\";\n\nconst emits = defineEmits([\"添加事件被选择\"]); // 声明接受的事件\nconst props = defineProps(['item']);\n\nconst store = useAppStore()\nconst 显示修改数据对话框状态 = ref(false);\nconst editedJSON = ref(JSON.stringify(props.item.header, null, 2));\n\nlet eventName = ref([\n\n  {\"label\": \"自定义事件\", \"value\": \"自定义事件\", \"ext_data\": \"自定义事件(事件名称,事件数据)\"},\n  {\"label\": \"被单击\", \"value\": \"click\"},\n  {\"label\": \"鼠标左键被按下\", \"value\": \"mousedown\"},\n  {\"label\": \"鼠标左键被放开\", \"value\": \"mouseup\"},\n  {\"label\": \"被双击\", \"value\": \"dblclick\"},\n  {\"label\": \"鼠标右键被按下\", \"value\": \"contextmenu\"},\n  {\"label\": \"鼠标位置被移动\", \"value\": \"mousemove\"},\n  {\"label\": \"获得焦点\", \"value\": \"focus\"},\n  {\"label\": \"失去焦点\", \"value\": \"blur\"},\n  {\"label\": \"按下某键\", \"value\": \"keydown\"},\n  {\"label\": \"放开某键\", \"value\": \"keyup\"},\n  {\"label\": \"滚轮被滚动\", \"value\": \"mousewheel\"}\n])\n\nlet valueName = \"\"\n\nfunction 打开修改数据对话框(editData, name) {\n  valueName = name\n  显示修改数据对话框状态.value = true\n  editedJSON.value = editData\n}\n\nfunction 保存编辑的HTML数据() {\n  if (valueName == 'HTML') {\n    props.item.HTML = editedJSON.value;\n  }\n  显示修改数据对话框状态.value = false;\n\n}\n\nfunction objectToJson(object) {\n  try {\n    return JSON.stringify(object, null, 2)\n  } catch (e) {\n    console.log(\"aaaa\")\n    return object\n  }\n}\n\n//动态加载自定义组件的属性框\nconst remote = ref(null);\n\n\nloadComponent();\n\nasync function loadComponent() {\n  let 属性框html = \"\"\n  try {\n    const responseHtml = await fetch(\"./自定义组件/\" + props.item.自定义组件名称 + \"/\" + props.item.自定义组件名称 + \"属性.vue\");\n    属性框html = await responseHtml.text();\n    console.log(\"属性框html\", 属性框html)\n    if (属性框html == \"\") {\n      console.log(\"加载自定义组件属性框失败\")\n      return\n    }\n  } catch (e) {\n    console.log(\"加载自定义组件属性框失败\", e)\n    return\n  }\n\n  const Vue = await import('vue');\n\n\n  let ComponentName = \"/\" + props.item.自定义组件名称 + \"Component.vue\";\n  const options = {\n    moduleCache: {vue: Vue},\n    async getFile(url) {\n      if (url === ComponentName) {\n        return Promise.resolve(属性框html);\n      }\n      if (url === '/style.css') {\n        return Promise.resolve(自定义css);\n      }\n    },\n    addStyle(textContent) {\n      const style = Object.assign(document.createElement('style'), {textContent});\n      const ref = document.head.getElementsByTagName('style')[0] || null;\n      document.head.insertBefore(style, ref);\n    },\n    handleModule: async function (type, getContentData, path, options) {\n      switch (type) {\n        case '.css':\n          options.addStyle(await getContentData(false));\n          return null;\n      }\n    },\n  }\n  // console.log(\"动态创建组件\",ComponentName)\n  remote.value = await loadModule(ComponentName, options);\n}\n\n\n</script>"
  },
  {
    "path": "GoEasyDesigner/frontend/src/components/boxs/el/FlexLayout/FlexLayout.js",
    "content": "export default {\n    top: \"150\",\n    left: \"440\",\n    width: \"300\",\n    height: \"200\",\n    noPlace: true,\n    visible: true,\n    disable: false,\n    zIndex: 0,\n\n    type: \"border-card\",\n    tagPosition: \"top\",\n    gutter: 10,\n    justify: \"start\",\n    childComponents: [\n        {\n            componentName: \"elContainer\",\n            name: \"ContentArea\",\n            top: \"0\",\n            left: \"0\",\n            width: \"100%\",\n            height: \"100%\",\n            // background: \"#fff\",\n            position: \"relative\",\n            noPlace: false,\n            noDrag: true,\n            visible: true,\n            disable: false,\n            pid: 0,\n            zIndex: 0,\n            span: 8,\n            childComponents: []\n        },\n        {\n            componentName: \"elContainer\",\n            name: \"ContentArea\",\n            top: \"0\",\n            left: \"0\",\n            width: \"100%\",\n            height: \"100%\",\n            // background: \"#fff\",\n            position: \"relative\",\n            noPlace: false,\n            noDrag: true,\n            visible: true,\n            disable: false,\n            pid: 0,\n            zIndex: 0,\n            span: 8,\n            childComponents: []\n        },\n        {\n            componentName: \"elContainer\",\n            name: \"ContentArea\",\n            top: \"0\",\n            left: \"0\",\n            width: \"100%\",\n            height: \"100%\",\n            // background: \"#fff\",\n            position: \"relative\",\n            noPlace: false,\n            noDrag: true,\n            visible: true,\n            disable: false,\n            pid: 0,\n            zIndex: 0,\n            span: 8,\n            childComponents: []\n        }\n    ]\n}\n"
  },
  {
    "path": "GoEasyDesigner/frontend/src/components/boxs/el/FlexLayout/FlexLayout.vue",
    "content": "<template>\n  <el-row :gutter=\"item.gutter\" :justify=\"item.justify\" style=\"height: 100%\">\n    <el-col v-for=\"(DivItem, DivItemIndex) in item.childComponents\"\n            :key=\"DivItemIndex\"\n            :span=\"DivItem.span\"\n    >\n      <component is=\"RenderDesignComponent\" v-for=\"(item2, DivItemIndex2) in [DivItem]\" :key=\"DivItemIndex2\"\n                 :item=\"item2\"\n\n      />\n    </el-col>\n\n  </el-row>\n</template>\n\n<script>\nimport {getItemStyle} from \"@/public\";\n\nexport default {\n  methods: {getItemStyle},\n  props: {\n    item: {\n      type: Object,\n      default: '',\n    }\n  },\n}\n</script>\n"
  },
  {
    "path": "GoEasyDesigner/frontend/src/components/boxs/el/FlexLayout/FlexLayoutAttr.vue",
    "content": "<template>\n  <div class=\"属性表格\">\n  <el-form\n      label-position=\"left\"\n      label-width=\"100px\"\n      style=\"max-width: 460px\"\n  >\n      <component is=\"common-properties\" :item=\"item\"/>\n      <el-form-item label=\"gutter\">\n        <el-input-number v-model=\"props.item.gutter\"/>\n      </el-form-item>\n\n      <el-form-item label=\"justify\">\n        <el-select v-model=\"props.item.justify\" style=\"width: 100%\">\n          <el-option\n              v-for=\"(item, index) in justify选项\"\n              :key=\"item\"\n              :label=\"item.label\"\n              :value=\"item.value\"\n          />\n        </el-select>\n      </el-form-item>\n\n    </el-form>\n    <el-row v-for=\"(item, index) in props.item.childComponents\" style=\"margin-bottom: 10px\">\n      <el-col :span=\"8\">\n        <el-input\n            v-model=\"item.name\"\n            placeholder=\"\"\n        />\n\n      </el-col>\n      <el-col :span=\"8\">\n        <el-input\n            v-model.number=\"item.span\"\n            placeholder=\"\"\n        />\n      </el-col>\n\n      <el-col :span=\"8\">\n        <el-button :icon=\"Delete\" size=\"small\" @click.stop=\"store.递归删除id(store.list, item.id)\"></el-button>\n      </el-col>\n    </el-row>\n\n    <el-button size=\"small\" @click.stop=\"store.新增childComponents2(item.id)\">增加内容区域</el-button>\n\n\n  </div>\n  <component is=\"common-event-component\" :item=\"props.item\"  :eventName=\"eventName\"/>\n\n\n</template>\n<script setup>\nimport {ref, defineProps, defineEmits, onMounted} from \"vue\";\nimport {Delete} from \"@element-plus/icons-vue\";\n\nconst emits = defineEmits([\"添加事件被选择\"]); // 声明接受的事件\nconst props = defineProps(['item']);\nimport {useAppStore} from '@/stores/appStore'\n\nconst store = useAppStore()\n\n\nlet 事件索引 = ref(0)\n\nlet eventName = ref([\n  {\"label\": \"被单击\", \"value\": \"click\"},\n  {\"label\": \"鼠标左键被按下\", \"value\": \"mousedown\"},\n  {\"label\": \"鼠标左键被放开\", \"value\": \"mouseup\"},\n  {\"label\": \"被双击\", \"value\": \"dblclick\"},\n  {\"label\": \"鼠标右键被按下\", \"value\": \"contextmenu\"},\n  {\"label\": \"鼠标位置被移动\", \"value\": \"mousemove\"},\n  {\"label\": \"获得焦点\", \"value\": \"focus\"},\n  {\"label\": \"失去焦点\", \"value\": \"blur\"},\n  {\"label\": \"按下某键\", \"value\": \"keydown\"},\n  {\"label\": \"放开某键\", \"value\": \"keyup\"},\n  {\"label\": \"滚轮被滚动\", \"value\": \"mousewheel\"}\n])\n\n\nconst handleSelectChange = function () {\n  let a = 事件索引.value\n  const Name = eventName.value[a];\n  console.log('添加事件被选择', Name + props.item.name);\n  事件索引.value = 0\n  emits(\"添加事件被选择\", Name, props.item);\n}\n\nlet justify选项 = ref([\n  {\"label\": \"从左边开始\", \"value\": \"start\"},\n  {\"label\": \"从右边开始\", \"value\": \"end\"},\n  {\"label\": \"居中\", \"value\": \"center\"},\n  {\"label\": \"环绕空间\", \"value\": \"space-around\"},\n  {\"label\": \"两端对齐\", \"value\": \"space-between\"},\n  {\"label\": \"均匀分布\", \"value\": \"space-evenly\"},\n]);\nonMounted(() => {\n  if (localStorage.getItem(\"locale\") === \"English\") {\n\n    justify选项.value.forEach((item) => {\n      item.label = item.value;\n    });\n  }\n});\n\n</script>"
  },
  {
    "path": "GoEasyDesigner/frontend/src/components/boxs/el/Label/Label.js",
    "content": "export default {\n    top: \"0\",\n    left: \"0\",\n    width: \"120\",\n    height: \"40\",\n    noPlace: true,\n    visible: true,\n    disable: false,\n    zIndex: 0,\n    size: \"default\",\n    truncated: false,\n    tag: \"p\",\n    tagPosition: \"text-center\",\n    corlor: \"#606266\",\n    text: \"标签\"\n}\n"
  },
  {
    "path": "GoEasyDesigner/frontend/src/components/boxs/el/Label/Label.vue",
    "content": "<template>\n  <div\n      class=\"text-container\"\n      :style=\"getItemStyle(item)\"\n  >\n    <el-text\n        :style=\"{color: item.corlor,fontSize: item.fontSize+'px'}\"\n        :class=\"item.tagPosition\"\n        :size=\"item.size\"\n        :tag=\"item.tag\"\n        :truncated=\"item.truncated\"\n    >{{ item.text}}\n    </el-text>\n  </div>\n\n</template>\n\n<script>\nimport {getItemStyle} from \"@/public\";\n\nexport default {\n  methods: {getItemStyle},\n  props: {\n    item: {\n      type: Object,\n      default: '',\n    }\n  },\n}\n</script>\n<style>\n.text-container {\n  display: flex;\n  flex-wrap: wrap;\n}\n\n\n.text-top-left {\n  position: absolute;\n  top: 0;\n  left: 0;\n}\n\n.text-top-right {\n  position: absolute;\n  top: 0;\n  right: 0;\n}\n\n.text-bottom-left {\n  position: absolute;\n  bottom: 0;\n  left: 0;\n}\n\n.text-bottom-right {\n  position: absolute;\n  bottom: 0;\n  right: 0;\n}\n\n.text-top-center {\n  position: absolute;\n  top: 0;\n  left: 50%;\n  transform: translateX(-50%);\n}\n\n.text-bottom-center {\n  position: absolute;\n  bottom: 0;\n  left: 50%;\n  transform: translateX(-50%);\n}\n\n.text-left-center {\n  position: absolute;\n  top: 50%;\n  left: 0;\n  transform: translateY(-50%);\n}\n\n.text-right-center {\n  position: absolute;\n  top: 50%;\n  right: 0;\n  transform: translateY(-50%);\n}\n\n.text-center {\n  position: absolute;\n  top: 50%;\n  left: 50%;\n  transform: translate(-50%, -50%);\n}\n</style>"
  },
  {
    "path": "GoEasyDesigner/frontend/src/components/boxs/el/Label/LabelAttr.vue",
    "content": "<template>\n  <div class=\"属性表格\">\n\n    <el-form\n        label-position=\"left\"\n        label-width=\"100px\"\n        style=\"max-width: 460px\"\n    >\n      <component is=\"common-properties\" :item=\"item\"/>\n      <el-form-item label=\"corlor\">\n        <el-color-picker v-model=\"props.item.corlor\" show-alpha\n                         @active-change=\"val => props.item.corlor = val\"/>\n      </el-form-item>\n      <el-form-item label=\"text\">\n        <el-input v-model=\"item.text\"/>\n      </el-form-item>\n      <el-form-item label=\"truncated\">\n        <el-switch v-model=\"item.truncated\"/>\n      </el-form-item>\n      <el-form-item label=\"size\">\n        <el-select v-model=\"props.item.size\" style=\"width: 100%\">\n          <el-option\n              v-for=\"(item, index) in size选项\"\n              :key=\"item\"\n              :label=\"item\"\n              :value=\"item\"\n          />\n        </el-select>\n      </el-form-item>\n      <el-form-item label=\"fontSize\">\n        <el-input v-model=\"item.fontSize\"/>\n      </el-form-item>\n\n      <el-form-item label=\"tag\">\n        <el-select v-model=\"props.item.tag\" style=\"width: 100%\">\n          <el-option\n              v-for=\"(item, index) in tag选项\"\n              :key=\"item\"\n              :label=\"item.label\"\n              :value=\"item.value\"\n          />\n        </el-select>\n      </el-form-item>\n\n      <el-form-item label=\"tagPosition\">\n        <el-select v-model=\"props.item.tagPosition\" style=\"width: 100%\">\n          <el-option\n              v-for=\"(item, index) in tagPosition选项\"\n              :key=\"item\"\n              :label=\"item.label\"\n              :value=\"item.value\"\n          />\n        </el-select>\n      </el-form-item>\n\n    </el-form>\n  </div>\n  <component is=\"common-event-component\" :item=\"props.item\"  :eventName=\"eventName\"/>\n\n\n</template>\n<script setup>\nimport {ref, defineProps, defineEmits, onMounted} from \"vue\";\n\nconst emits = defineEmits([\"添加事件被选择\"]); // 声明接受的事件\nconst props = defineProps(['item']);\nlet size选项 = ref([\n  \"default\",\n  \"large\",\n  \"small\",\n]);\n\n\nlet tag选项 = ref([\n  {\"label\": \"正常\", \"value\": \"p\"},\n  {\"label\": \"加粗\", \"value\": \"b\"},\n  {\"label\": \"斜体\", \"value\": \"i\"},\n  {\"label\": \"下标\", \"value\": \"sub\"},\n  {\"label\": \"插入线\", \"value\": \"ins\"},\n  {\"label\": \"删除线\", \"value\": \"del\"},\n  {\"label\": \"标记\", \"value\": \"mark\"},\n]);\n\nlet tagPosition选项 = ref([\n  {\"label\": \"居中\", \"value\": \"text-center\"},\n  {\"label\": \"左上角\", \"value\": \"text-top-left\"},\n  {\"label\": \"右上角\", \"value\": \"text-top-right\"},\n  {\"label\": \"左下角\", \"value\": \"text-bottom-left\"},\n  {\"label\": \"右下角\", \"value\": \"text-bottom-right\"},\n  {\"label\": \"上中\", \"value\": \"text-top-center\"},\n  {\"label\": \"下中\", \"value\": \"text-bottom-center\"},\n  {\"label\": \"左中\", \"value\": \"text-left-center\"},\n  {\"label\": \"右中\", \"value\": \"text-right-center\"}\n]);\n\n\nlet eventName = ref([\n\n  {\"label\": \"被单击\", \"value\": \"click\"},\n  {\"label\": \"鼠标左键被按下\", \"value\": \"mousedown\"},\n  {\"label\": \"鼠标左键被放开\", \"value\": \"mouseup\"},\n  {\"label\": \"被双击\", \"value\": \"dblclick\"},\n  {\"label\": \"鼠标右键被按下\", \"value\": \"contextmenu\"},\n  {\"label\": \"鼠标位置被移动\", \"value\": \"mousemove\"},\n  {\"label\": \"获得焦点\", \"value\": \"focus\"},\n  {\"label\": \"失去焦点\", \"value\": \"blur\"},\n  {\"label\": \"按下某键\", \"value\": \"keydown\"},\n  {\"label\": \"放开某键\", \"value\": \"keyup\"},\n  {\"label\": \"滚轮被滚动\", \"value\": \"mousewheel\"}\n])\n\nonMounted(() => {\n  if (localStorage.getItem(\"locale\") === \"English\") {\n    tagPosition选项.value.forEach((item) => {\n      item.label = item.value;\n    });\n    tag选项.value.forEach((item) => {\n      item.label = item.value;\n    });\n  }\n});\n\n</script>"
  },
  {
    "path": "GoEasyDesigner/frontend/src/components/boxs/el/Menu/Menu.js",
    "content": "export default {\n    top: \"150\",\n    left: \"440\",\n    width: \"600\",\n    height: \"100\",\n    noPlace: true,\n    visible: true,\n    disable: false,\n    zIndex: 0,\n    mode: \"horizontal\",\n    collapse : false,\n\n    menuOption:[\n        {\n            id: 1,\n            label: '菜单 1',\n            children: [\n                {\n                    id: 4,\n                    label: '二级菜单 1-1',\n                    children: [\n                        {\n                            id: 9,\n                            label: '三级菜单 1-1-1',\n                        },\n                        {\n                            id: 10,\n                            label: '三级菜单 1-1-2',\n                        },\n                    ],\n                },\n            ],\n        },\n        {\n            id: 2,\n            label: '菜单 2',\n            children: [\n                {\n                    id: 5,\n                    label: '二级菜单 2-1',\n                },\n                {\n                    id: 6,\n                    label: '二级菜单 2-2',\n                },\n            ],\n        },\n        {\n            id: 3,\n            label: '菜单 3',\n            children: [\n                {\n                    id: 7,\n                    label: '二级菜单 3-1',\n                },\n                {\n                    id: 8,\n                    label: '二级菜单 3-2',\n                },\n            ],\n        },\n        {\n            id: 4,\n            label: '菜单 4',\n        },\n    ]\n\n}\n"
  },
  {
    "path": "GoEasyDesigner/frontend/src/components/boxs/el/Menu/Menu.vue",
    "content": "<template>\n  <el-menu\n      class=\"\"\n      :mode=\"item.mode\"\n      :collapse=\"item.collapse\"\n      @select=\"handleSelect\"\n  >\n    <template v-for=\"menu in item.menuOption\" :key=\"menu.id\">\n      <el-menu-item v-if=\"!menu.children || menu.children.length===0\" :index=\"menu.id.toString()\">\n        {{ menu.label }}\n      </el-menu-item>\n      <el-sub-menu v-if=\"menu.children && menu.children.length !==0\" :index=\"menu.id.toString()\">\n        <template #title>{{ menu.label }}</template>\n        <template v-for=\"child in menu.children\" :key=\"child.id\">\n          <el-menu-item v-if=\"!child.children || child.children.length===0\" :index=\"child.id.toString()\">\n            {{ menu.label }}\n          </el-menu-item>\n          <el-sub-menu v-if=\"child.children && child.children.length !==0\" :index=\"child.id.toString() + '-sub'\">\n            <template #title>{{ child.label }}</template>\n            <template v-for=\"grandChild in child.children\" :key=\"grandChild.id\">\n              <el-menu-item :index=\"grandChild.id.toString()\">{{ grandChild.label }}</el-menu-item>\n            </template>\n          </el-sub-menu>\n        </template>\n      </el-sub-menu>\n    </template>\n  </el-menu>\n</template>\n\n<script>\nimport {getItemStyle} from '@/public.js';\n\nexport default {\n  methods: {getItemStyle},\n  props: {\n    item: {\n      type: Object,\n      default: '',\n    }\n  },\n}\n</script>\n<style>\n.el-tabs__content {\n  height: 100%;\n  padding: 0 !important;\n}\n\n.el-tabs__header.is-bottom {\n  position: relative;\n  top: -50px;\n}\n</style>"
  },
  {
    "path": "GoEasyDesigner/frontend/src/components/boxs/el/Menu/MenuAttr.vue",
    "content": "<template>\n  <div class=\"属性表格\">\n  <el-form\n      label-position=\"left\"\n      label-width=\"100px\"\n      style=\"max-width: 460px\"\n  >\n      <component is=\"common-properties\" :item=\"item\"/>\n\n      <el-form-item label=\"mode\">\n        <el-select v-model=\"props.item.mode\" style=\"width: 100%\">\n          <el-option\n              v-for=\"(item, index) in mode选项\"\n              :key=\"item\"\n              :label=\"item.label\"\n              :value=\"item.value\"\n          />\n        </el-select>\n      </el-form-item>\n\n      <el-form-item label=\"collapse(垂直时可用)\">\n        <el-switch v-model=\"item.collapse\"/>\n      </el-form-item>\n    </el-form>\n\n\n    <el-form label-position=\"top\">\n\n      <el-form-item label=\"menuOption\"\n      >\n        <el-input v-model=\"filterText\" placeholder=\"搜索菜单\" />\n\n\n        <el-tree\n            ref=\"treeRef\"\n            class=\"filter-tree\"\n            :data=\"props.item.menuOption\"\n            :expand-on-click-node=\"false\"\n            default-expand-all\n            :filter-node-method=\"filterNode\"\n            draggable\n            node-key=\"id\"\n        >\n          <template #default=\"{ node, data }\">\n        <span class=\"custom-tree-node\">\n          <span style=\"width: 40px;\">\n            <el-input v-model=\"data.label\" size=\"mini\" style=\"width: 100px\"></el-input>\n          </span>\n          <span>\n            <el-button :icon=\"Plus\" size=\"small\" style=\"margin-left: 8px\" @click=\"append(data)\">  </el-button>\n            <el-button :icon=\"Delete\" size=\"small\" style=\"margin-left: 8px\" @click=\"remove(node, data)\">  </el-button>\n          </span>\n        </span>\n          </template>\n        </el-tree>\n\n        <el-button size=\"small\" style=\"margin-left: 8px\" @click=\"append(props.item.menuOption,'top')\"> 增加菜单</el-button>\n\n      </el-form-item>\n    </el-form>\n  </div>\n  <component is=\"common-event-component\" :item=\"props.item\"  :eventName=\"eventName\"/>\n\n\n</template>\n<script setup>\nimport {ref, defineProps, defineEmits, onMounted} from \"vue\";\n\nconst emits = defineEmits([\"添加事件被选择\"]); // 声明接受的事件\nconst props = defineProps(['item']);\n\nimport {Delete, Plus, Edit} from \"@element-plus/icons-vue\";\n\nimport {useAppStore} from '@/stores/appStore'\n\nconst store = useAppStore()\nconst filterText =  ref(\"\");\n\n\n\nlet mode选项 = ref([\n  {\"label\": \"水平\", \"value\": \"horizontal\"},\n  {\"label\": \"垂直\", \"value\": \"vertical\"},\n]);\n\nlet eventName = ref([\n\n  {\"label\": \"被单击\", \"value\": \"click\"},\n  {\"label\": \"鼠标左键被按下\", \"value\": \"mousedown\"},\n  {\"label\": \"鼠标左键被放开\", \"value\": \"mouseup\"},\n  {\"label\": \"被双击\", \"value\": \"dblclick\"},\n  {\"label\": \"鼠标右键被按下\", \"value\": \"contextmenu\"},\n  {\"label\": \"鼠标位置被移动\", \"value\": \"mousemove\"},\n  {\"label\": \"获得焦点\", \"value\": \"focus\"},\n  {\"label\": \"失去焦点\", \"value\": \"blur\"},\n  {\"label\": \"按下某键\", \"value\": \"keydown\"},\n  {\"label\": \"放开某键\", \"value\": \"keyup\"},\n  {\"label\": \"滚轮被滚动\", \"value\": \"mousewheel\"}\n])\nlet id = 1000\nconst append = (data, type) => {\n  if (type == 'top') {\n    //最后到最后\n    data.push({id: id++, label: '菜单' + id, children: []})\n    return\n  }\n  const newChild = {id: id++, label: '子菜单' + id, children: []}\n  if (!data.children) {\n    data.children = []\n  }\n  data.children.push(newChild)\n\n}\n\n\nconst remove = (node, data) => {\n  const parent = node.parent\n  const children = parent.data.children || parent.data\n  const index = children.findIndex((d) => d.id === data.id)\n  children.splice(index, 1)\n}\n\nconst edit = (node, data) => {\n  const parent = node.parent\n  const children = parent.data.children || parent.data\n  const index = children.findIndex((d) => d.id === data.id)\n\n\n}\n\n\nconst filterNode = (value, data) => {\n  console.log(value)\n\n  if (!value) return true\n  return data.label.includes(value)\n}\nconst treeRef = ref(null)\n\nwatch(filterText, function(val) {\n  treeRef.value.filter(val);\n});\n\nonMounted(() => {\n  if (localStorage.getItem(\"locale\") === \"English\") {\n    mode选项.value.forEach((item) => {\n      item.label = item.value;\n    });\n  }\n});\n\n</script>\n<style>\n.el-tree-node__content{\n  height: 38px !important;\n}\n\n</style>"
  },
  {
    "path": "GoEasyDesigner/frontend/src/components/boxs/el/ProgressBar/ProgressBar.js",
    "content": "export default {\n    top: \"0\",\n    left: \"0\",\n    width: \"200\",\n    height: \"30\",\n    noPlace: true,\n\n    visible: true,\n    disable: false,\n    size: \"custom\",\n    zIndex: 0,\n    min: 0,\n    max: 100,\n    step: 1,\n    n: 0,\n}\n"
  },
  {
    "path": "GoEasyDesigner/frontend/src/components/boxs/el/ProgressBar/ProgressBar.vue",
    "content": "<template>\n  <el-slider\n      :style=\"item.size=='custom' ? getItemStyle(item):''\"\n      style=\"width: 80%;margin:0px 20px\"\n      v-model=\"item.n\"\n      :size=\"item.size=='custom' ?'':item.size\"\n      :min=\"item.min\"\n      :max=\"item.max\"\n      :step=\"item.step\"\n      :format-tooltip=\"formatTooltip\"\n  />\n\n</template>\n\n<script setup>\nimport {getItemStyle} from \"@/public\";\n\nimport {defineEmits, defineProps} from \"vue\";\n\nconst {item} = defineProps(['item'])\nconsole.log(\"自定义组件数据\", item);\nconst emits = defineEmits([\"CustomEvent\"]);\nconsole.log(\"自定义组件事件\", emits);\n\nfunction formatTooltip(index){\n  return index\n}\n\n</script>"
  },
  {
    "path": "GoEasyDesigner/frontend/src/components/boxs/el/ProgressBar/ProgressBarAttr.vue",
    "content": "<template>\n  <div class=\"属性表格\">\n  <el-form\n      label-position=\"left\"\n      label-width=\"100px\"\n      style=\"max-width: 460px\"\n  >\n      <component is=\"common-properties\" :item=\"item\"/>\n\n      <el-form-item label=\"n\">\n        <el-input-number  v-model=\"props.item.n\"/>\n      </el-form-item>\n      <el-form-item label=\"min\">\n        <el-input-number  v-model=\"props.item.min\"/>\n      </el-form-item>\n      <el-form-item label=\"max\">\n        <el-input-number  v-model=\"props.item.max\"/>\n      </el-form-item>\n      <el-form-item label=\"step\">\n        <el-input-number  v-model=\"props.item.step\"/>\n      </el-form-item>\n      <el-form-item label=\"size\">\n        <el-select v-model=\"props.item.size\" style=\"width: 100%\">\n          <el-option\n              v-for=\"(item, index) in sizeOptions\"\n              :key=\"item\"\n              :label=\"item.label\"\n              :value=\"item.value\"\n          />\n        </el-select>\n      </el-form-item>\n\n\n    </el-form>\n  </div>\n\n  <component is=\"common-event-component\" :item=\"props.item\"  :eventName=\"eventName\"/>\n\n</template>\n<script setup>\nimport {ref, defineProps, defineEmits, onMounted} from \"vue\";\n\nconst emits = defineEmits([\"添加事件被选择\"]); // 声明接受的事件\nconst props = defineProps(['item']);\n\nlet sizeOptions = ref([\n  {\"label\": \"自定义\", \"value\": \"custom\"},\n  {\"label\": \"默认\", \"value\": \"default\"},\n  {\"label\": \"大号\", \"value\": \"large\"},\n  {\"label\": \"小号\", \"value\": \"small\"},\n]);\n\n\nlet eventName = ref([\n\n  {\"label\": \"被单击\", \"value\": \"click\"},\n  {\"label\": \"鼠标左键被按下\", \"value\": \"mousedown\"},\n  {\"label\": \"鼠标左键被放开\", \"value\": \"mouseup\"},\n  {\"label\": \"被双击\", \"value\": \"dblclick\"},\n  {\"label\": \"鼠标右键被按下\", \"value\": \"contextmenu\"},\n  {\"label\": \"鼠标位置被移动\", \"value\": \"mousemove\"},\n  {\"label\": \"获得焦点\", \"value\": \"focus\"},\n  {\"label\": \"失去焦点\", \"value\": \"blur\"},\n  {\"label\": \"按下某键\", \"value\": \"keydown\"},\n  {\"label\": \"放开某键\", \"value\": \"keyup\"},\n  {\"label\": \"滚轮被滚动\", \"value\": \"mousewheel\"}\n])\n\nonMounted(() => {\n  if (localStorage.getItem(\"locale\") === \"English\") {\n    sizeOptions.value.forEach((item) => {\n      item.label = item.value;\n    });\n  }\n});\n\n</script>"
  },
  {
    "path": "GoEasyDesigner/frontend/src/components/boxs/el/RadioButton/RadioButton.js",
    "content": "export default {\n    top: \"0\",\n    left: \"0\",\n    width: \"250\",\n    height: \"80\",\n    noPlace: true,\n    visible: true,\n    disable: false,\n    zIndex: 0,\n    size: \"default\",\n    value: \"\",\n    options:[\n        {\"label\": \"默认\", \"value\": \"default\"},\n        {\"label\": \"大号\", \"value\": \"large\"},\n        {\"label\": \"小号\", \"value\": \"small\"},\n    ],\n    buttonGroup:false,\n    border:false\n}\n"
  },
  {
    "path": "GoEasyDesigner/frontend/src/components/boxs/el/RadioButton/RadioButton.vue",
    "content": "<template>\n\n  <el-radio-group v-model=\"item.value\" :size=\"item.size\">\n    <template v-if=\"item.buttonGroup\">\n      <el-radio-button\n          v-for=\"(v, i) in item.options\"\n          :label=\"v.value\"\n          :border=\"item.border\"\n\n      >{{ v.label }}\n      </el-radio-button>\n    </template>\n    <template v-else>\n      <el-radio\n          v-for=\"(v, i) in item.options\"\n          :label=\"v.value\"\n          :border=\"item.border\"\n\n      >{{ v.label }}\n\n      </el-radio>\n    </template>\n\n\n  </el-radio-group>\n\n</template>\n\n<script>\nimport {getItemStyle} from \"@/public\";\n\nexport default {\n  methods: {getItemStyle},\n  props: {\n    item: {\n      type: Object,\n      default: '',\n    }\n  },\n}\n</script>\n"
  },
  {
    "path": "GoEasyDesigner/frontend/src/components/boxs/el/RadioButton/RadioButtonAttr.vue",
    "content": "<template>\n  <div class=\"属性表格\">\n\n  <el-form\n      label-position=\"left\"\n      label-width=\"100px\"\n      style=\"max-width: 460px\"\n  >\n    <component is=\"common-properties\" :item=\"item\"/>\n    <el-form-item label=\"size\">\n      <el-select v-model=\"props.item.size\" style=\"width: 100%\">\n        <el-option\n            v-for=\"(item, index) in sizeOptions\"\n            :key=\"item\"\n            :label=\"item.label\"\n            :value=\"item.value\"\n        />\n      </el-select>\n    </el-form-item>\n    <el-form-item label=\"buttonGroup\">\n      <el-switch v-model=\"item.buttonGroup\"/>\n    </el-form-item>\n    <el-form-item label=\"border\">\n      <el-switch v-model=\"item.border\"/>\n    </el-form-item>\n    <el-form-item label=\"value\">\n      <el-input v-model=\"item.value\"/>\n    </el-form-item>\n\n    <el-form label-position=\"top\">\n      <el-form-item label=\"options\"\n      >\n        <el-row v-for=\"(item, index) in props.item.options\">\n          <el-col :span=\"10\">\n            <el-input\n                v-model=\"item.label\"\n                placeholder=\"\"\n            />\n          </el-col>\n\n          <el-col :span=\"10\">\n            <el-input\n                v-model=\"item.value\"\n                placeholder=\"\"\n            />\n          </el-col>\n          <el-col :span=\"4\">\n            <el-button @click.stop=\"删除(item.value)\" :icon=\"Delete\" size=\"small\"></el-button>\n\n          </el-col>\n        </el-row>\n\n        <el-button @click.stop=\"增加()\" size=\"small\">增加选择夹</el-button>\n      </el-form-item>\n    </el-form>\n\n  </el-form>\n  </div>\n  <component is=\"common-event-component\" :item=\"props.item\"  :eventName=\"eventName\"/>\n\n\n</template>\n<script setup>\nimport {ref, defineProps, defineEmits, onMounted} from \"vue\";\nimport {Delete} from \"@element-plus/icons-vue\";\n\nimport {useAppStore} from '@/stores/appStore'\n\nconst store = useAppStore()\n\nconst emits = defineEmits([\"添加事件被选择\"]); // 声明接受的事件\nconst props = defineProps(['item']);\nlet sizeOptions = ref([\n  {\"label\": \"默认\", \"value\": \"default\"},\n  {\"label\": \"大号\", \"value\": \"large\"},\n  {\"label\": \"小号\", \"value\": \"small\"},\n]);\n\nfunction 删除(value) {\n  let index = props.item.options.findIndex((item) => item.value === value);\n  props.item.options.splice(index, 1);\n}\n\nfunction 增加() {\n  let k = store.获取索引(props.item.name + \"options\")\n\n  props.item.options.push({\"label\": \"标签\" + k, \"value\": k});\n}\n\n\n\nlet eventName = ref([\n\n  {\"label\": \"被单击\", \"value\": \"click\"},\n  {\"label\": \"鼠标左键被按下\", \"value\": \"mousedown\"},\n  {\"label\": \"鼠标左键被放开\", \"value\": \"mouseup\"},\n  {\"label\": \"被双击\", \"value\": \"dblclick\"},\n  {\"label\": \"鼠标右键被按下\", \"value\": \"contextmenu\"},\n  {\"label\": \"鼠标位置被移动\", \"value\": \"mousemove\"},\n  {\"label\": \"获得焦点\", \"value\": \"focus\"},\n  {\"label\": \"失去焦点\", \"value\": \"blur\"},\n  {\"label\": \"按下某键\", \"value\": \"keydown\"},\n  {\"label\": \"放开某键\", \"value\": \"keyup\"},\n  {\"label\": \"滚轮被滚动\", \"value\": \"mousewheel\"}\n])\n\n\nonMounted(() => {\n  if (localStorage.getItem(\"locale\") === \"English\") {\n    sizeOptions.value.forEach((item) => {\n      item.label = item.value;\n    });\n  }\n});\n</script>\n\n"
  },
  {
    "path": "GoEasyDesigner/frontend/src/components/boxs/el/Switch/Switch.js",
    "content": "export default {\n    top: \"0\",\n    left: \"0\",\n    width: \"50\",\n    height: \"40\",\n    noPlace: true,\n    visible: true,\n    disable: false,\n    zIndex: 0,\n    size: \"default\",\n    value: false,\n    activeText: \"开\",\n    inactiveText: \"关\",\n    inlinePrompt: true,\n\n}\n"
  },
  {
    "path": "GoEasyDesigner/frontend/src/components/boxs/el/Switch/Switch.vue",
    "content": "<template>\n    <el-switch\n        :getItemStyle=\"getItemStyle(item)\"\n        v-model=\"item.value\"\n        :size=\"item.size\"\n        :active-text=\"item.activeText\"\n        :inactive-text=\"item.inactiveText\"\n        :inline-prompt=\"item.inlinePrompt\"\n    />\n\n</template>\n\n<script>\nimport {getItemStyle} from \"@/public\";\n\nexport default {\n  methods: {getItemStyle},\n  props: {\n    item: {\n      type: Object,\n      default: '',\n    }\n  },\n}\n</script>\n"
  },
  {
    "path": "GoEasyDesigner/frontend/src/components/boxs/el/Switch/SwitchAttr.vue",
    "content": "<template>\n  <div class=\"属性表格\">\n\n    <el-form\n        label-position=\"left\"\n        label-width=\"100px\"\n        style=\"max-width: 460px\"\n    >\n      <component is=\"common-properties\" :item=\"item\"/>\n\n\n      <el-form-item label=\"value\">\n        <el-switch v-model=\"item.value\"/>\n      </el-form-item>\n      <el-form-item label=\"size\">\n        <el-select v-model=\"props.item.size\" style=\"width: 100%\">\n          <el-option\n              v-for=\"(item, index) in size选项\"\n              :key=\"item\"\n              :label=\"item.label\"\n              :value=\"item.value\"\n          />\n        </el-select>\n      </el-form-item>\n\n      <el-form-item label=\"value文本\">\n        <el-input v-model=\"props.item.value文本\"/>\n      </el-form-item>\n      <el-form-item label=\"未value文本\">\n        <el-input v-model=\"props.item.未value文本\"/>\n      </el-form-item>\n      <el-form-item label=\"inlinePrompt\">\n        <el-switch v-model=\"props.item.inlinePrompt\"/>\n      </el-form-item>\n\n\n    </el-form>\n  </div>\n  <component is=\"common-event-component\" :item=\"props.item\"  :eventName=\"eventName\"/>\n\n\n</template>\n<script setup>\nimport {ref, defineProps, defineEmits} from \"vue\";\n\nconst emits = defineEmits([\"添加事件被选择\"]); // 声明接受的事件\nconst props = defineProps(['item']);\nlet size选项 = ref([\n  {\"label\": \"默认\", \"value\": \"default\"},\n  {\"label\": \"大号\", \"value\": \"large\"},\n  {\"label\": \"小号\", \"value\": \"small\"},\n]);\n\nlet eventName = ref([\n\n  {\"label\": \"被单击\", \"value\": \"click\"},\n  {\"label\": \"鼠标左键被按下\", \"value\": \"mousedown\"},\n  {\"label\": \"鼠标左键被放开\", \"value\": \"mouseup\"},\n  {\"label\": \"被双击\", \"value\": \"dblclick\"},\n  {\"label\": \"鼠标右键被按下\", \"value\": \"contextmenu\"},\n  {\"label\": \"鼠标位置被移动\", \"value\": \"mousemove\"},\n  {\"label\": \"获得焦点\", \"value\": \"focus\"},\n  {\"label\": \"失去焦点\", \"value\": \"blur\"},\n  {\"label\": \"按下某键\", \"value\": \"keydown\"},\n  {\"label\": \"放开某键\", \"value\": \"keyup\"},\n  {\"label\": \"滚轮被滚动\", \"value\": \"mousewheel\"}\n])\n</script>\n\n"
  },
  {
    "path": "GoEasyDesigner/frontend/src/components/boxs/el/Table/Table.js",
    "content": "export default {\n    top: \"150\",\n    left: \"440\",\n    width: \"300\",\n    height: \"200\",\n    noPlace: true,\n    visible: true,\n    disable: false,\n    zIndex: 0,\n    stripe: false,\n    border: false,\n    select: false,\n    value: [],\n    tableLayout: \"fixed\",\n    header:[\n        {\n            \"label\":\"日期\",\"prop\":\"date\",\"width\":\"180\",\"fixed\":true\n        },\n        {\n            \"label\":\"名称\",\"prop\":\"name\",\"width\":\"180\",\"fixed\":false\n        },\n        {\n            \"label\":\"地址\",\"prop\":\"address\",\"width\":\"180\",\"fixed\":false\n        },\n    ],\n    data:[\n        {\n            date: '2016-05-03',\n            name: 'Tom',\n            address: 'No. 189, Grove St, Los Angeles',\n        },\n        {\n            date: '2016-05-02',\n            name: 'Tom',\n            address: 'No. 189, Grove St, Los Angeles',\n        },\n        {\n            date: '2016-05-04',\n            name: 'Tom',\n            address: 'No. 189, Grove St, Los Angeles',\n        },\n        {\n            date: '2016-05-01',\n            name: 'Tom',\n            address: 'No. 189, Grove St, Los Angeles',\n        },\n    ]\n\n}\n"
  },
  {
    "path": "GoEasyDesigner/frontend/src/components/boxs/el/Table/Table.vue",
    "content": "<template>\n  <div :style=\"getItemStyle(item)\">\n    <el-table\n        :border=\"item.border\"\n        :data=\"item.data\"\n        :stripe=\"item.stripe\"\n        style=\"width: 99%;height: 99%\"\n        :table-layout=\"item.tableLayout\"\n        @selection-change=\"handleSelectionChange\"\n        row-key=\"id\"\n    >\n      <el-table-column v-if=\"item.select\" type=\"selection\" width=\"55\"/>\n      <el-table-column\n          v-for=\"(item, index) in item.header\"\n          :fixed=\"item.fixed\"\n          :label=\"item.label\" :prop=\"item.prop\" :width=\"item.width\"/>\n    </el-table>\n  </div>\n</template>\n\n<script>\nimport {getItemStyle} from '@/public.js';\n\nexport default {\n  data: () => ({\n    multipleSelection: [],\n  }),\n  methods: {\n    getItemStyle,\n    handleSelectionChange: function (val) {\n      this.multipleSelection.value = val\n      console.log(\"表格选中\",this.multipleSelection.value)\n      this.item.value = this.multipleSelection.value\n    }\n  },\n  props: {\n    item: {\n      type: Object,\n      default: '',\n    }\n  },\n}\n</script>"
  },
  {
    "path": "GoEasyDesigner/frontend/src/components/boxs/el/Table/TableAttr.vue",
    "content": "<template>\n  <div class=\"属性表格\">\n    <el-form\n        label-position=\"left\"\n        label-width=\"100px\"\n        style=\"max-width: 460px\"\n    >\n      <component is=\"common-properties\" :item=\"item\"/>\n      <el-form-item label=\"tableLayout\">\n        <el-select v-model=\"props.item.tableLayout\" style=\"width: 100%\">\n          <el-option\n              v-for=\"(item, index) in tableLayout选项\"\n              :key=\"item\"\n              :label=\"item.label\"\n              :value=\"item.value\"\n          />\n        </el-select>\n      </el-form-item>\n      <el-form-item label=\"stripe\">\n        <el-switch v-model=\"item.stripe\"/>\n      </el-form-item>\n      <el-form-item label=\"border\">\n        <el-switch v-model=\"item.border\"/>\n      </el-form-item>\n      <el-form-item label=\"select\">\n        <el-switch v-model=\"item.select\"/>\n      </el-form-item>\n      <el-form-item v-if=\"item.select\" label=\"value\">\n        <el-input :autosize=\"{ minRows: 2, maxRows: 4 }\"\n                  :value=\"objectToJson(item.value)\"\n                  type=\"textarea\"\n        />\n      </el-form-item>\n\n      <el-form-item label=\"header\">\n<!--        <el-input :autosize=\"{ minRows: 2, maxRows: 4 }\"-->\n<!--                  :value=\"objectToJson(item.header)\"-->\n<!--                  type=\"textarea\"-->\n<!--        />-->\n        <el-button @click=\"打开修改数据对话框(props.item.header,'header')\">编辑</el-button>\n      </el-form-item>\n      <el-form-item label=\"data\">\n<!--        <el-input :autosize=\"{ minRows: 2, maxRows: 4 }\"-->\n<!--                  :value=\"objectToJson(item.data)\"-->\n<!--                  type=\"textarea\"-->\n<!--        />-->\n        <el-button @click=\"打开修改数据对话框(props.item.data,'data')\">编辑</el-button>\n\n      </el-form-item>\n\n    </el-form>\n  </div>\n  <component is=\"common-event-component\" :item=\"props.item\"  :eventName=\"eventName\"/>\n\n  <!-- Define an edit dialog -->\n  <teleport to=\"body\">\n    <el-dialog v-model=\"显示修改数据对话框状态\" title=\"编辑JSON数据\"\n    >\n      <el-input v-model=\"editedJSON\" :autosize=\"{ minRows: 6, maxRows: 10 }\" type=\"textarea\"/>\n      <div slot=\"footer\" class=\"dialog-footer\">\n        <el-button @click=\"显示修改数据对话框状态 = false\">取消</el-button>\n        <el-button type=\"primary\" @click=\"保存编辑的JSON数据\">确定</el-button>\n      </div>\n    </el-dialog>\n  </teleport>\n\n</template>\n<script setup>\nimport {defineEmits, defineProps, ref} from \"vue\";\n\nimport {useAppStore} from '@/stores/appStore'\nimport {ElMessage} from \"element-plus\";\n\nconst emits = defineEmits([\"添加事件被选择\"]); // 声明接受的事件\nconst props = defineProps(['item']);\n\nconst store = useAppStore()\nconst 显示修改数据对话框状态 = ref(false);\nconst editedJSON = ref(JSON.stringify(props.item.header, null, 2));\n\nlet tableLayout选项 = ref([\n  {\"label\": \"固定\", \"value\": \"fixed\"},\n  {\"label\": \"自动\", \"value\": \"auto\"},\n]);\n\nlet tagPosition选项 = ref([\n  {\"label\": \"左侧\", \"value\": \"left\"},\n  {\"label\": \"右侧\", \"value\": \"right\"},\n  {\"label\": \"顶部\", \"value\": \"top\"},\n  {\"label\": \"底部\", \"value\": \"bottom\"},\n]);\n\nlet eventName = ref([\n\n  {\"label\": \"被单击\", \"value\": \"click\"},\n  {\"label\": \"鼠标左键被按下\", \"value\": \"mousedown\"},\n  {\"label\": \"鼠标左键被放开\", \"value\": \"mouseup\"},\n  {\"label\": \"被双击\", \"value\": \"dblclick\"},\n  {\"label\": \"鼠标右键被按下\", \"value\": \"contextmenu\"},\n  {\"label\": \"鼠标位置被移动\", \"value\": \"mousemove\"},\n  {\"label\": \"获得焦点\", \"value\": \"focus\"},\n  {\"label\": \"失去焦点\", \"value\": \"blur\"},\n  {\"label\": \"按下某键\", \"value\": \"keydown\"},\n  {\"label\": \"放开某键\", \"value\": \"keyup\"},\n  {\"label\": \"滚轮被滚动\", \"value\": \"mousewheel\"}\n])\n\nfunction objectToJson(object) {\n  try {\n    return JSON.stringify(object, null, 2)\n  } catch (e) {\n    console.log(\"aaaa\")\n    return object\n  }\n}\n\nfunction jsonToObject(jsonText, target) {\n  try {\n    target.value = JSON.parse(jsonText);\n  } catch (error) {\n    console.error('Invalid JSON:', error);\n    target.value = jsonText;\n\n  }\n}\n\nlet valueName = \"\"\n\nfunction 打开修改数据对话框(editData, name) {\n  valueName = name\n  显示修改数据对话框状态.value = true\n  editedJSON.value = JSON.stringify(editData, null, 2)\n}\n\nfunction 保存编辑的JSON数据() {\n  try {\n    const parsedObject = JSON.parse(editedJSON.value);\n    if (valueName == 'header') {\n      props.item.header = parsedObject;\n    }\n    if (valueName == 'data') {\n      props.item.data = parsedObject;\n    }\n    显示修改数据对话框状态.value = false;\n  } catch (error) {\n    console.error('Invalid JSON:', error);\n    //弹出提示\n    ElMessage({\n      message: \"JSON格式错误\",\n      type: 'error',\n      duration: 3000, // 设置显示时间为5秒，单位为毫秒\n    });\n  }\n}\n</script>"
  },
  {
    "path": "GoEasyDesigner/frontend/src/components/boxs/el/Tabs/Tabs.js",
    "content": "export default {\n    top: \"150\",\n    left: \"440\",\n    width: \"300\",\n    height: \"300\",\n    value: \"0\",\n    noPlace: true,\n    visible: true,\n    disable: false,\n    zIndex: 0,\n    overflowY: \"hidden\",\n    overflowX: \"hidden\",\n    type: \"border-card\",\n    tagPosition: \"top\",\n\n    childComponents: [\n        {\n            componentName: \"elContainer\",\n            name: \"ContentArea\",\n            text: \"tab\",\n            top: \"0\",\n            left: \"0\",\n            width: \"100%\",\n            height: \"100%\",\n            noPlace: false,\n            noDrag: true,\n            visible: true,\n            disable: false,\n            pid: 0,\n            zIndex: 0,\n            childComponents: []\n        },\n        {\n            componentName: \"elContainer\",\n            name: \"ContentArea\",\n            text: \"tab\",\n            top: \"0\",\n            left: \"0\",\n            width: \"100%\",\n            height: \"100%\",\n            noPlace: false,\n            noDrag: true,\n            visible: true,\n            disable: false,\n            pid: 0,\n            zIndex: 0,\n            childComponents: []\n        },\n    ]\n}\n"
  },
  {
    "path": "GoEasyDesigner/frontend/src/components/boxs/el/Tabs/Tabs.vue",
    "content": "<template>\n\n  <el-tabs :type=\"item.type\" v-model=\"item.value\" :style=\"getItemStyle(item)\" style=\"overflow: hidden;padding: 0\"\n           v-show=\"item.visible\"\n           v-bind:disabled=\"item.disable\"\n           :tab-position=\"item.tagPosition\"\n           stretch=\"true\"\n  >\n    <el-tab-pane\n        v-for=\"(tabItem, tabItemIndex) in item.childComponents\"\n        :key=\"tabItemIndex\"\n        :label=\"tabItem.text\"\n    >\n      <component is=\"RenderDesignComponent\"  v-for=\"(tabItem2, tabItemIndex2) in [tabItem]\" :key=\"tabItemIndex2\" :item=\"tabItem2\"/>\n    </el-tab-pane>\n  </el-tabs>\n\n</template>\n\n<script>\nimport {getItemStyle} from '@/public.js';\n\nexport default {\n  methods: {getItemStyle},\n  props: {\n    item: {\n      type: Object,\n      default: '',\n    }\n  },\n}\n</script>\n<style>\n.el-tabs__content {\n  padding: 0 !important;\n  overflow: hidden;\n}\n.el-tabs__header.is-bottom{\n  position: relative;\n  top: -50px;\n}\n\n</style>"
  },
  {
    "path": "GoEasyDesigner/frontend/src/components/boxs/el/Tabs/TabsAttr.vue",
    "content": "<template>\n  <div class=\"属性表格\">\n  <el-form\n      label-position=\"left\"\n      label-width=\"100px\"\n      style=\"max-width: 460px\"\n  >\n      <component is=\"common-properties\" :item=\"item\"/>\n      <el-form-item label=\"value\">\n        <el-input v-model=\"props.item.value\"/>\n      </el-form-item>\n      <el-form-item label=\"type\">\n        <el-select v-model=\"props.item.type\" style=\"width: 100%\">\n          <el-option\n              v-for=\"(item, index) in type选项\"\n              :key=\"item\"\n              :label=\"item.label\"\n              :value=\"item.value\"\n          />\n        </el-select>\n      </el-form-item>\n      <el-form-item label=\"tagPosition\">\n        <el-select v-model=\"props.item.tagPosition\" style=\"width: 100%\">\n          <el-option\n              v-for=\"(item, index) in tagPosition选项\"\n              :key=\"item\"\n              :label=\"item.label\"\n              :value=\"item.value\"\n          />\n        </el-select>\n      </el-form-item>\n    </el-form>\n    <el-form label-position=\"top\">\n      <el-form-item label=\"选项卡\"\n      >\n        <el-input v-for=\"(item, index) in props.item.childComponents\"\n                  v-model=\"item.text\"\n                  placeholder=\"\"\n                  style=\"margin-bottom: 10px\"\n        >\n          <template #append>\n            <el-button @click.stop=\"store.递归删除id(store.list, item.id)\" :icon=\"Delete\" size=\"small\"></el-button>\n          </template>\n        </el-input>\n        <el-button @click.stop=\"store.新增childComponents(item.id)\" size=\"small\">增加选择夹</el-button>\n      </el-form-item>\n    </el-form>\n  </div>\n  <component is=\"common-event-component\" :item=\"props.item\"  :eventName=\"eventName\"/>\n\n\n</template>\n<script setup>\nimport {ref, defineProps, defineEmits} from \"vue\";\n\nconst emits = defineEmits([\"添加事件被选择\"]); // 声明接受的事件\nconst props = defineProps(['item']);\n\nimport {Delete} from \"@element-plus/icons-vue\";\n\nimport {useAppStore} from '@/stores/appStore'\n\nconst store = useAppStore()\n\n\nlet type选项 = ref([\n  {\"label\": \"简洁\", \"value\": \"card\"},\n  {\"label\": \"卡片风格\", \"value\": \"border-card\"},\n]);\n\nlet tagPosition选项 = ref([\n  {\"label\": \"左侧\", \"value\": \"left\"},\n  {\"label\": \"右侧\", \"value\": \"right\"},\n  {\"label\": \"顶部\", \"value\": \"top\"},\n  {\"label\": \"底部\", \"value\": \"bottom\"},\n]);\n\nlet eventName = ref([\n\n  {\"label\": \"被单击\", \"value\": \"click\"},\n  {\"label\": \"鼠标左键被按下\", \"value\": \"mousedown\"},\n  {\"label\": \"鼠标左键被放开\", \"value\": \"mouseup\"},\n  {\"label\": \"被双击\", \"value\": \"dblclick\"},\n  {\"label\": \"鼠标右键被按下\", \"value\": \"contextmenu\"},\n  {\"label\": \"鼠标位置被移动\", \"value\": \"mousemove\"},\n  {\"label\": \"获得焦点\", \"value\": \"focus\"},\n  {\"label\": \"失去焦点\", \"value\": \"blur\"},\n  {\"label\": \"按下某键\", \"value\": \"keydown\"},\n  {\"label\": \"放开某键\", \"value\": \"keyup\"},\n  {\"label\": \"滚轮被滚动\", \"value\": \"mousewheel\"}\n])\n\n</script>"
  },
  {
    "path": "GoEasyDesigner/frontend/src/components/boxs/el/TabsTW/TabsTW.js",
    "content": "export default {\n    top: \"150\",\n    left: \"440\",\n    width: \"300\",\n    height: \"300\",\n    value: \"0\",\n    noPlace: true,\n    visible: true,\n    disable: false,\n    zIndex: 0,\n    overflowY: \"hidden\",\n    overflowX: \"hidden\",\n    type: \"border-card\",\n    tagPosition: \"top\",\n\n\n    childComponents: [\n        {\n            componentName: \"elContainer\",\n            name: \"ContentArea\",\n            text: \"tab\",\n            图标: \"fa fa-server\",\n            top: \"0\",\n            left: \"0\",\n            width: \"100%\",\n            height: \"100%\",\n            noPlace: false,\n            noDrag: true,\n            visible: true,\n            disable: false,\n            pid: 0,\n            zIndex: 0,\n            childComponents: []\n        },\n        {\n            componentName: \"elContainer\",\n            name: \"ContentArea\",\n            text: \"tab\",\n            图标: \"fa fa-cog\",\n            top: \"0\",\n            left: \"0\",\n            width: \"100%\",\n            height: \"100%\",\n            noPlace: false,\n            noDrag: true,\n            visible: true,\n            disable: false,\n            pid: 0,\n            zIndex: 0,\n            childComponents: []\n        },\n    ]\n}\n"
  },
  {
    "path": "GoEasyDesigner/frontend/src/components/boxs/el/TabsTW/TabsTW.vue",
    "content": "<template>\n\n\n  <div class=\" overflow-hidden\"\n       :style=\"getItemStyle(item)\"\n\n  >\n    <form class=\"flex h-full flex-col\">\n\n      <div class=\"nav h-auto text-white\">\n        <div class=\"flex justify-center border-b-2 border-gray-200 p-4 py-4\"\n             style=\"width:100%;background:rgb(251, 251, 251);\">\n          <template\n              v-for=\"(tabItem, tabItemIndex) in item.childComponents\"\n              :key=\"tabItemIndex\"\n              :label=\"tabItem.text\"\n          >\n            <input type=\"radio\" v-model=\"item.value\" :value=\"tabItemIndex\" name=\"tab\" :id=\"'mytab-'+tabItemIndex\"\n                   class=\"hidden\"/>\n            <label :for=\"'mytab-'+tabItemIndex\">\n              <div class=\"toolbar-item\" :class=\"{\n                'active': item.value == tabItemIndex,\n              }\">\n                <i :class=\"tabItem.图标\"></i>\n                <span>{{ tabItem.text}}</span>\n              </div>\n            </label>\n          </template>\n        </div>\n      </div>\n      <div class=\"nav-content flex-1 overflow-y-auto bg-gray-50\" style=\"position: relative\">\n        <template\n            v-for=\"(tabItem, tabItemIndex) in item.childComponents\"\n            :key=\"tabItemIndex\"\n            :label=\"tabItem.text\"\n        >\n\n          <div class=\"tab w-full\" v-show=\"item.value == tabItemIndex\" style=\"background:rgb(246, 246, 246); \">\n            <component is=\"RenderDesignComponent\" v-for=\"(tabItem2, tabItemIndex2) in [tabItem]\" :key=\"tabItemIndex2\"\n                       :item=\"tabItem2\"/>\n\n          </div>\n\n        </template>\n      </div>\n    </form>\n  </div>\n\n\n  <link rel=\"stylesheet\" href=\"/font-awesome.css\"/>\n\n</template>\n\n\n<style>\n@tailwind base;\n@tailwind components;\n@tailwind utilities;\n\n.active {\n  background-color: rgb(238, 238, 238);\n}\n\n\n.tab {\n}\n\n.toolbar-item {\n  display: flex;\n  flex-direction: column;\n  align-items: center;\n  justify-content: center;\n  cursor: pointer;\n  width: 64px; /* 正方形宽度 */\n  height: 64px; /* 正方形高度 */\n  background-color: rgb(251, 251, 251);\n  border-radius: 4px;\n}\n\n.toolbar-item i {\n  font-size: 24px; /* 调整图标大小 */\n  line-height: 1; /* 减少行高 */\n  margin-bottom: 0.25rem;\n  color: rgb(69, 148, 213); /* 浅蓝色 */\n}\n\n.toolbar-item span {\n  font-size: 12px; /* 调整文字大小 */\n  text-align: center;\n  color: rgb(113, 113, 113);\n  line-height: 1; /* 减少行高 */\n}\n\n.toolbar-item.active {\n  background-color: rgb(238, 238, 238);\n}\n\n\n</style>\n\n<script>\nimport {getItemStyle} from '@/public.js';\n\nexport default {\n  data() {\n    return {}\n  },\n  methods: {getItemStyle},\n  props: {\n    item: {\n      type: Object,\n      default: '',\n    }\n  },\n}\n// 在线编辑 https://play.tailwindcss.com/3eNn1IfsFH?file=css\n</script>"
  },
  {
    "path": "GoEasyDesigner/frontend/src/components/boxs/el/TabsTW/TabsTWAttr.vue",
    "content": "<template>\n  <div class=\"属性表格\">\n    <el-form\n        label-position=\"left\"\n        label-width=\"100px\"\n        style=\"max-width: 460px\"\n    >\n      <component is=\"common-properties\" :item=\"item\"/>\n      <el-form-item label=\"value\">\n        <el-input v-model=\"props.item.value\"/>\n      </el-form-item>\n      <el-form-item label=\"type\">\n        <el-select v-model=\"props.item.type\" style=\"width: 100%\">\n          <el-option\n              v-for=\"(item, index) in type选项\"\n              :key=\"item\"\n              :label=\"item.label\"\n              :value=\"item.value\"\n          />\n        </el-select>\n      </el-form-item>\n      <el-form-item label=\"tagPosition\">\n        <el-select v-model=\"props.item.tagPosition\" style=\"width: 100%\">\n          <el-option\n              v-for=\"(item, index) in tagPosition选项\"\n              :key=\"item\"\n              :label=\"item.label\"\n              :value=\"item.value\"\n          />\n        </el-select>\n      </el-form-item>\n    </el-form>\n    <el-form label-position=\"top\">\n      <el-form-item label=\"选项卡\">\n        <div v-for=\"(item, index) in props.item.childComponents\" \n             :key=\"index\" \n             class=\"tab-item-container\"\n             style=\"display: flex; align-items: center; margin-bottom: 12px; gap: 8px;\">\n          <el-input\n              v-model=\"item.text\"\n              placeholder=\"选项卡标题\"\n              style=\"flex: 2;\"\n          />\n          <icon-selector\n              v-model=\"item.图标\"\n              placeholder=\"选择图标\"\n              style=\"flex: 1;\"\n          />\n          <el-button \n              @click.stop=\"store.递归删除id(store.list, item.id)\" \n              :icon=\"Delete\" \n              type=\"danger\"\n              size=\"small\"\n              style=\"flex-shrink: 0;\"\n          />\n        </div>\n        <el-button \n            @click.stop=\"store.新增childComponents(item.id)\" \n            type=\"primary\"\n            size=\"small\"\n            style=\"width: 100%; margin-top: 8px;\">\n          <el-icon class=\"el-icon--left\"><Plus /></el-icon>\n          增加选项卡\n        </el-button>\n      </el-form-item>\n    </el-form>\n  </div>\n  <component is=\"common-event-component\" :item=\"props.item\"  :eventName=\"eventName\"/>\n\n\n</template>\n<script setup>\nimport {defineEmits, defineProps, ref} from \"vue\";\nimport {Delete, Plus} from \"@element-plus/icons-vue\";\nimport IconSelector from '@/components/common/IconSelector.vue'\n\nimport {useAppStore} from '@/stores/appStore'\n\nconst emits = defineEmits([\"添加事件被选择\"]); // 声明接受的事件\nconst props = defineProps(['item']);\n\nconst store = useAppStore()\n\n\nlet type选项 = ref([\n  {\"label\": \"简洁\", \"value\": \"card\"},\n  {\"label\": \"卡片风格\", \"value\": \"border-card\"},\n]);\n\nlet tagPosition选项 = ref([\n  {\"label\": \"左侧\", \"value\": \"left\"},\n  {\"label\": \"右侧\", \"value\": \"right\"},\n  {\"label\": \"顶部\", \"value\": \"top\"},\n  {\"label\": \"底部\", \"value\": \"bottom\"},\n]);\n\nlet eventName = ref([\n\n  {\"label\": \"被单击\", \"value\": \"click\"},\n  {\"label\": \"鼠标左键被按下\", \"value\": \"mousedown\"},\n  {\"label\": \"鼠标左键被放开\", \"value\": \"mouseup\"},\n  {\"label\": \"被双击\", \"value\": \"dblclick\"},\n  {\"label\": \"鼠标右键被按下\", \"value\": \"contextmenu\"},\n  {\"label\": \"鼠标位置被移动\", \"value\": \"mousemove\"},\n  {\"label\": \"获得焦点\", \"value\": \"focus\"},\n  {\"label\": \"失去焦点\", \"value\": \"blur\"},\n  {\"label\": \"按下某键\", \"value\": \"keydown\"},\n  {\"label\": \"放开某键\", \"value\": \"keyup\"},\n  {\"label\": \"滚轮被滚动\", \"value\": \"mousewheel\"}\n])\n\n</script>"
  },
  {
    "path": "GoEasyDesigner/frontend/src/components/boxs/el/TabsTW/fontawesome_free_icon_names.js",
    "content": "const iconNames = [\"fa-brands fa-42-group\", \"fa-brands fa-500px\", \"fa-brands fa-accessible-icon\", \"fa-brands fa-accusoft\", \"fa-brands fa-adn\", \"fa-brands fa-adversal\", \"fa-brands fa-affiliatetheme\", \"fa-brands fa-airbnb\", \"fa-brands fa-algolia\", \"fa-brands fa-alipay\", \"fa-brands fa-amazon\", \"fa-brands fa-amazon-pay\", \"fa-brands fa-amilia\", \"fa-brands fa-android\", \"fa-brands fa-angellist\", \"fa-brands fa-angrycreative\", \"fa-brands fa-angular\", \"fa-brands fa-app-store\", \"fa-brands fa-app-store-ios\", \"fa-brands fa-apper\", \"fa-brands fa-apple\", \"fa-brands fa-apple-pay\", \"fa-brands fa-artstation\", \"fa-brands fa-asymmetrik\", \"fa-brands fa-atlassian\", \"fa-brands fa-audible\", \"fa-brands fa-autoprefixer\", \"fa-brands fa-avianex\", \"fa-brands fa-aviato\", \"fa-brands fa-aws\", \"fa-brands fa-bandcamp\", \"fa-brands fa-battle-net\", \"fa-brands fa-behance\", \"fa-brands fa-bilibili\", \"fa-brands fa-bimobject\", \"fa-brands fa-bitbucket\", \"fa-brands fa-bitcoin\", \"fa-brands fa-bity\", \"fa-brands fa-black-tie\", \"fa-brands fa-blackberry\", \"fa-brands fa-blogger\", \"fa-brands fa-blogger-b\", \"fa-brands fa-bluesky\", \"fa-brands fa-bluetooth\", \"fa-brands fa-bluetooth-b\", \"fa-brands fa-bootstrap\", \"fa-brands fa-bots\", \"fa-brands fa-brave\", \"fa-brands fa-brave-reverse\", \"fa-brands fa-btc\", \"fa-brands fa-buffer\", \"fa-brands fa-buromobelexperte\", \"fa-brands fa-buy-n-large\", \"fa-brands fa-buysellads\", \"fa-brands fa-canadian-maple-leaf\", \"fa-brands fa-cc-amazon-pay\", \"fa-brands fa-cc-amex\", \"fa-brands fa-cc-apple-pay\", \"fa-brands fa-cc-diners-club\", \"fa-brands fa-cc-discover\", \"fa-brands fa-cc-jcb\", \"fa-brands fa-cc-mastercard\", \"fa-brands fa-cc-paypal\", \"fa-brands fa-cc-stripe\", \"fa-brands fa-cc-visa\", \"fa-brands fa-centercode\", \"fa-brands fa-centos\", \"fa-brands fa-chrome\", \"fa-brands fa-chromecast\", \"fa-brands fa-cloudflare\", \"fa-brands fa-cloudscale\", \"fa-brands fa-cloudsmith\", \"fa-brands fa-cloudversify\", \"fa-brands fa-cmplid\", \"fa-brands fa-codepen\", \"fa-brands fa-codiepie\", \"fa-brands fa-confluence\", \"fa-brands fa-connectdevelop\", \"fa-brands fa-contao\", \"fa-brands fa-cotton-bureau\", \"fa-brands fa-cpanel\", \"fa-brands fa-creative-commons\", \"fa-brands fa-creative-commons-by\", \"fa-brands fa-creative-commons-nc\", \"fa-brands fa-creative-commons-nc-eu\", \"fa-brands fa-creative-commons-nc-jp\", \"fa-brands fa-creative-commons-nd\", \"fa-brands fa-creative-commons-pd\", \"fa-brands fa-creative-commons-pd-alt\", \"fa-brands fa-creative-commons-remix\", \"fa-brands fa-creative-commons-sa\", \"fa-brands fa-creative-commons-sampling\", \"fa-brands fa-creative-commons-sampling-plus\", \"fa-brands fa-creative-commons-share\", \"fa-brands fa-creative-commons-zero\", \"fa-brands fa-critical-role\", \"fa-brands fa-css\", \"fa-brands fa-css3\", \"fa-brands fa-css3-alt\", \"fa-brands fa-cuttlefish\", \"fa-brands fa-d-and-d\", \"fa-brands fa-d-and-d-beyond\", \"fa-brands fa-dailymotion\", \"fa-brands fa-dart-lang\", \"fa-brands fa-dashcube\", \"fa-brands fa-debian\", \"fa-brands fa-deezer\", \"fa-brands fa-delicious\", \"fa-brands fa-deploydog\", \"fa-brands fa-deskpro\", \"fa-brands fa-dev\", \"fa-brands fa-deviantart\", \"fa-brands fa-dhl\", \"fa-brands fa-diaspora\", \"fa-brands fa-digg\", \"fa-brands fa-digital-ocean\", \"fa-brands fa-discord\", \"fa-brands fa-discourse\", \"fa-brands fa-dochub\", \"fa-brands fa-docker\", \"fa-brands fa-draft2digital\", \"fa-brands fa-dribbble\", \"fa-brands fa-dropbox\", \"fa-brands fa-drupal\", \"fa-brands fa-dyalog\", \"fa-brands fa-earlybirds\", \"fa-brands fa-ebay\", \"fa-brands fa-edge\", \"fa-brands fa-edge-legacy\", \"fa-brands fa-elementor\", \"fa-brands fa-ello\", \"fa-brands fa-ember\", \"fa-brands fa-empire\", \"fa-brands fa-envira\", \"fa-brands fa-erlang\", \"fa-brands fa-ethereum\", \"fa-brands fa-etsy\", \"fa-brands fa-evernote\", \"fa-brands fa-expeditedssl\", \"fa-brands fa-facebook\", \"fa-brands fa-facebook-f\", \"fa-brands fa-facebook-messenger\", \"fa-brands fa-fantasy-flight-games\", \"fa-brands fa-fedex\", \"fa-brands fa-fedora\", \"fa-brands fa-figma\", \"fa-brands fa-files-pinwheel\", \"fa-brands fa-firefox\", \"fa-brands fa-firefox-browser\", \"fa-brands fa-first-order\", \"fa-brands fa-first-order-alt\", \"fa-brands fa-firstdraft\", \"fa-brands fa-flickr\", \"fa-brands fa-flipboard\", \"fa-brands fa-flutter\", \"fa-brands fa-fly\", \"fa-brands fa-font-awesome\", \"fa-brands fa-fonticons\", \"fa-brands fa-fonticons-fi\", \"fa-brands fa-fort-awesome\", \"fa-brands fa-fort-awesome-alt\", \"fa-brands fa-forumbee\", \"fa-brands fa-foursquare\", \"fa-brands fa-free-code-camp\", \"fa-brands fa-freebsd\", \"fa-brands fa-fulcrum\", \"fa-brands fa-galactic-republic\", \"fa-brands fa-galactic-senate\", \"fa-brands fa-get-pocket\", \"fa-brands fa-gg\", \"fa-brands fa-gg-circle\", \"fa-brands fa-git\", \"fa-brands fa-git-alt\", \"fa-brands fa-github\", \"fa-brands fa-github-alt\", \"fa-brands fa-gitkraken\", \"fa-brands fa-gitlab\", \"fa-brands fa-gitter\", \"fa-brands fa-glide\", \"fa-brands fa-glide-g\", \"fa-brands fa-gofore\", \"fa-brands fa-golang\", \"fa-brands fa-goodreads\", \"fa-brands fa-goodreads-g\", \"fa-brands fa-google\", \"fa-brands fa-google-drive\", \"fa-brands fa-google-pay\", \"fa-brands fa-google-play\", \"fa-brands fa-google-plus\", \"fa-brands fa-google-plus-g\", \"fa-brands fa-google-scholar\", \"fa-brands fa-google-wallet\", \"fa-brands fa-gratipay\", \"fa-brands fa-grav\", \"fa-brands fa-gripfire\", \"fa-brands fa-grunt\", \"fa-brands fa-guilded\", \"fa-brands fa-gulp\", \"fa-brands fa-hacker-news\", \"fa-brands fa-hackerrank\", \"fa-brands fa-hashnode\", \"fa-brands fa-hips\", \"fa-brands fa-hire-a-helper\", \"fa-brands fa-hive\", \"fa-brands fa-hooli\", \"fa-brands fa-hornbill\", \"fa-brands fa-hotjar\", \"fa-brands fa-houzz\", \"fa-brands fa-html5\", \"fa-brands fa-hubspot\", \"fa-brands fa-ideal\", \"fa-brands fa-imdb\", \"fa-brands fa-instagram\", \"fa-brands fa-instalod\", \"fa-brands fa-intercom\", \"fa-brands fa-internet-explorer\", \"fa-brands fa-invision\", \"fa-brands fa-ioxhost\", \"fa-brands fa-itch-io\", \"fa-brands fa-itunes\", \"fa-brands fa-itunes-note\", \"fa-brands fa-java\", \"fa-brands fa-jedi-order\", \"fa-brands fa-jenkins\", \"fa-brands fa-jira\", \"fa-brands fa-joget\", \"fa-brands fa-joomla\", \"fa-brands fa-js\", \"fa-brands fa-jsfiddle\", \"fa-brands fa-jxl\", \"fa-brands fa-kaggle\", \"fa-brands fa-keybase\", \"fa-brands fa-keycdn\", \"fa-brands fa-kickstarter\", \"fa-brands fa-kickstarter-k\", \"fa-brands fa-korvue\", \"fa-brands fa-laravel\", \"fa-brands fa-lastfm\", \"fa-brands fa-leanpub\", \"fa-brands fa-less\", \"fa-brands fa-letterboxd\", \"fa-brands fa-line\", \"fa-brands fa-linkedin\", \"fa-brands fa-linkedin-in\", \"fa-brands fa-linode\", \"fa-brands fa-linux\", \"fa-brands fa-lyft\", \"fa-brands fa-magento\", \"fa-brands fa-mailchimp\", \"fa-brands fa-mandalorian\", \"fa-brands fa-markdown\", \"fa-brands fa-mastodon\", \"fa-brands fa-maxcdn\", \"fa-brands fa-mdb\", \"fa-brands fa-medapps\", \"fa-brands fa-medium\", \"fa-brands fa-medrt\", \"fa-brands fa-meetup\", \"fa-brands fa-megaport\", \"fa-brands fa-mendeley\", \"fa-brands fa-meta\", \"fa-brands fa-microblog\", \"fa-brands fa-microsoft\", \"fa-brands fa-mintbit\", \"fa-brands fa-mix\", \"fa-brands fa-mixcloud\", \"fa-brands fa-mixer\", \"fa-brands fa-mizuni\", \"fa-brands fa-modx\", \"fa-brands fa-monero\", \"fa-brands fa-napster\", \"fa-brands fa-neos\", \"fa-brands fa-nfc-directional\", \"fa-brands fa-nfc-symbol\", \"fa-brands fa-nimblr\", \"fa-brands fa-node\", \"fa-brands fa-node-js\", \"fa-brands fa-npm\", \"fa-brands fa-ns8\", \"fa-brands fa-nutritionix\", \"fa-brands fa-octopus-deploy\", \"fa-brands fa-odnoklassniki\", \"fa-brands fa-odysee\", \"fa-brands fa-old-republic\", \"fa-brands fa-opencart\", \"fa-brands fa-openid\", \"fa-brands fa-opensuse\", \"fa-brands fa-opera\", \"fa-brands fa-optin-monster\", \"fa-brands fa-orcid\", \"fa-brands fa-osi\", \"fa-brands fa-padlet\", \"fa-brands fa-page4\", \"fa-brands fa-pagelines\", \"fa-brands fa-palfed\", \"fa-brands fa-patreon\", \"fa-brands fa-paypal\", \"fa-brands fa-perbyte\", \"fa-brands fa-periscope\", \"fa-brands fa-phabricator\", \"fa-brands fa-phoenix-framework\", \"fa-brands fa-phoenix-squadron\", \"fa-brands fa-php\", \"fa-brands fa-pied-piper\", \"fa-brands fa-pied-piper-alt\", \"fa-brands fa-pied-piper-hat\", \"fa-brands fa-pied-piper-pp\", \"fa-brands fa-pinterest\", \"fa-brands fa-pinterest-p\", \"fa-brands fa-pix\", \"fa-brands fa-pixiv\", \"fa-brands fa-playstation\", \"fa-brands fa-product-hunt\", \"fa-brands fa-pushed\", \"fa-brands fa-python\", \"fa-brands fa-qq\", \"fa-brands fa-quinscape\", \"fa-brands fa-quora\", \"fa-brands fa-r-project\", \"fa-brands fa-raspberry-pi\", \"fa-brands fa-ravelry\", \"fa-brands fa-react\", \"fa-brands fa-reacteurope\", \"fa-brands fa-readme\", \"fa-brands fa-rebel\", \"fa-brands fa-red-river\", \"fa-brands fa-reddit\", \"fa-brands fa-reddit-alien\", \"fa-brands fa-redhat\", \"fa-brands fa-renren\", \"fa-brands fa-replyd\", \"fa-brands fa-researchgate\", \"fa-brands fa-resolving\", \"fa-brands fa-rev\", \"fa-brands fa-rocketchat\", \"fa-brands fa-rockrms\", \"fa-brands fa-rust\", \"fa-brands fa-safari\", \"fa-brands fa-salesforce\", \"fa-brands fa-sass\", \"fa-brands fa-schlix\", \"fa-brands fa-screenpal\", \"fa-brands fa-scribd\", \"fa-brands fa-searchengin\", \"fa-brands fa-sellcast\", \"fa-brands fa-sellsy\", \"fa-brands fa-servicestack\", \"fa-brands fa-shirtsinbulk\", \"fa-brands fa-shoelace\", \"fa-brands fa-shopify\", \"fa-brands fa-shopware\", \"fa-brands fa-signal-messenger\", \"fa-brands fa-simplybuilt\", \"fa-brands fa-sistrix\", \"fa-brands fa-sith\", \"fa-brands fa-sitrox\", \"fa-brands fa-sketch\", \"fa-brands fa-skyatlas\", \"fa-brands fa-skype\", \"fa-brands fa-slack\", \"fa-brands fa-slideshare\", \"fa-brands fa-snapchat\", \"fa-brands fa-soundcloud\", \"fa-brands fa-sourcetree\", \"fa-brands fa-space-awesome\", \"fa-brands fa-speakap\", \"fa-brands fa-speaker-deck\", \"fa-brands fa-spotify\", \"fa-brands fa-square-behance\", \"fa-brands fa-square-bluesky\", \"fa-brands fa-square-dribbble\", \"fa-brands fa-square-facebook\", \"fa-brands fa-square-font-awesome\", \"fa-brands fa-square-font-awesome-stroke\", \"fa-brands fa-square-git\", \"fa-brands fa-square-github\", \"fa-brands fa-square-gitlab\", \"fa-brands fa-square-google-plus\", \"fa-brands fa-square-hacker-news\", \"fa-brands fa-square-instagram\", \"fa-brands fa-square-js\", \"fa-brands fa-square-lastfm\", \"fa-brands fa-square-letterboxd\", \"fa-brands fa-square-odnoklassniki\", \"fa-brands fa-square-pied-piper\", \"fa-brands fa-square-pinterest\", \"fa-brands fa-square-reddit\", \"fa-brands fa-square-snapchat\", \"fa-brands fa-square-steam\", \"fa-brands fa-square-threads\", \"fa-brands fa-square-tumblr\", \"fa-brands fa-square-twitter\", \"fa-brands fa-square-upwork\", \"fa-brands fa-square-viadeo\", \"fa-brands fa-square-vimeo\", \"fa-brands fa-square-web-awesome\", \"fa-brands fa-square-web-awesome-stroke\", \"fa-brands fa-square-whatsapp\", \"fa-brands fa-square-x-twitter\", \"fa-brands fa-square-xing\", \"fa-brands fa-square-youtube\", \"fa-brands fa-squarespace\", \"fa-brands fa-stack-exchange\", \"fa-brands fa-stack-overflow\", \"fa-brands fa-stackpath\", \"fa-brands fa-staylinked\", \"fa-brands fa-steam\", \"fa-brands fa-steam-symbol\", \"fa-brands fa-sticker-mule\", \"fa-brands fa-strava\", \"fa-brands fa-stripe\", \"fa-brands fa-stripe-s\", \"fa-brands fa-stubber\", \"fa-brands fa-studiovinari\", \"fa-brands fa-stumbleupon\", \"fa-brands fa-stumbleupon-circle\", \"fa-brands fa-superpowers\", \"fa-brands fa-supple\", \"fa-brands fa-suse\", \"fa-brands fa-swift\", \"fa-brands fa-symfony\", \"fa-brands fa-teamspeak\", \"fa-brands fa-telegram\", \"fa-brands fa-tencent-weibo\", \"fa-brands fa-the-red-yeti\", \"fa-brands fa-themeco\", \"fa-brands fa-themeisle\", \"fa-brands fa-think-peaks\", \"fa-brands fa-threads\", \"fa-brands fa-tiktok\", \"fa-brands fa-trade-federation\", \"fa-brands fa-trello\", \"fa-brands fa-tumblr\", \"fa-brands fa-twitch\", \"fa-brands fa-twitter\", \"fa-brands fa-typo3\", \"fa-brands fa-uber\", \"fa-brands fa-ubuntu\", \"fa-brands fa-uikit\", \"fa-brands fa-umbraco\", \"fa-brands fa-uncharted\", \"fa-brands fa-uniregistry\", \"fa-brands fa-unity\", \"fa-brands fa-unsplash\", \"fa-brands fa-untappd\", \"fa-brands fa-ups\", \"fa-brands fa-upwork\", \"fa-brands fa-usb\", \"fa-brands fa-usps\", \"fa-brands fa-ussunnah\", \"fa-brands fa-vaadin\", \"fa-brands fa-viacoin\", \"fa-brands fa-viadeo\", \"fa-brands fa-viber\", \"fa-brands fa-vimeo\", \"fa-brands fa-vimeo-v\", \"fa-brands fa-vine\", \"fa-brands fa-vk\", \"fa-brands fa-vnv\", \"fa-brands fa-vuejs\", \"fa-brands fa-watchman-monitoring\", \"fa-brands fa-waze\", \"fa-brands fa-web-awesome\", \"fa-brands fa-webflow\", \"fa-brands fa-weebly\", \"fa-brands fa-weibo\", \"fa-brands fa-weixin\", \"fa-brands fa-whatsapp\", \"fa-brands fa-whmcs\", \"fa-brands fa-wikipedia-w\", \"fa-brands fa-windows\", \"fa-brands fa-wirsindhandwerk\", \"fa-brands fa-wix\", \"fa-brands fa-wizards-of-the-coast\", \"fa-brands fa-wodu\", \"fa-brands fa-wolf-pack-battalion\", \"fa-brands fa-wordpress\", \"fa-brands fa-wordpress-simple\", \"fa-brands fa-wpbeginner\", \"fa-brands fa-wpexplorer\", \"fa-brands fa-wpforms\", \"fa-brands fa-wpressr\", \"fa-brands fa-x-twitter\", \"fa-brands fa-xbox\", \"fa-brands fa-xing\", \"fa-brands fa-y-combinator\", \"fa-brands fa-yahoo\", \"fa-brands fa-yammer\", \"fa-brands fa-yandex\", \"fa-brands fa-yandex-international\", \"fa-brands fa-yarn\", \"fa-brands fa-yelp\", \"fa-brands fa-yoast\", \"fa-brands fa-youtube\", \"fa-brands fa-zhihu\", \"fa-regular fa-address-book\", \"fa-regular fa-address-card\", \"fa-regular fa-bell\", \"fa-regular fa-bell-slash\", \"fa-regular fa-bookmark\", \"fa-regular fa-building\", \"fa-regular fa-calendar\", \"fa-regular fa-calendar-check\", \"fa-regular fa-calendar-days\", \"fa-regular fa-calendar-minus\", \"fa-regular fa-calendar-plus\", \"fa-regular fa-calendar-xmark\", \"fa-regular fa-chart-bar\", \"fa-regular fa-chess-bishop\", \"fa-regular fa-chess-king\", \"fa-regular fa-chess-knight\", \"fa-regular fa-chess-pawn\", \"fa-regular fa-chess-queen\", \"fa-regular fa-chess-rook\", \"fa-regular fa-circle\", \"fa-regular fa-circle-check\", \"fa-regular fa-circle-dot\", \"fa-regular fa-circle-down\", \"fa-regular fa-circle-left\", \"fa-regular fa-circle-pause\", \"fa-regular fa-circle-play\", \"fa-regular fa-circle-question\", \"fa-regular fa-circle-right\", \"fa-regular fa-circle-stop\", \"fa-regular fa-circle-up\", \"fa-regular fa-circle-user\", \"fa-regular fa-circle-xmark\", \"fa-regular fa-clipboard\", \"fa-regular fa-clock\", \"fa-regular fa-clone\", \"fa-regular fa-closed-captioning\", \"fa-regular fa-comment\", \"fa-regular fa-comment-dots\", \"fa-regular fa-comments\", \"fa-regular fa-compass\", \"fa-regular fa-copy\", \"fa-regular fa-copyright\", \"fa-regular fa-credit-card\", \"fa-regular fa-envelope\", \"fa-regular fa-envelope-open\", \"fa-regular fa-eye\", \"fa-regular fa-eye-slash\", \"fa-regular fa-face-angry\", \"fa-regular fa-face-dizzy\", \"fa-regular fa-face-flushed\", \"fa-regular fa-face-frown\", \"fa-regular fa-face-frown-open\", \"fa-regular fa-face-grimace\", \"fa-regular fa-face-grin\", \"fa-regular fa-face-grin-beam\", \"fa-regular fa-face-grin-beam-sweat\", \"fa-regular fa-face-grin-hearts\", \"fa-regular fa-face-grin-squint\", \"fa-regular fa-face-grin-squint-tears\", \"fa-regular fa-face-grin-stars\", \"fa-regular fa-face-grin-tears\", \"fa-regular fa-face-grin-tongue\", \"fa-regular fa-face-grin-tongue-squint\", \"fa-regular fa-face-grin-tongue-wink\", \"fa-regular fa-face-grin-wide\", \"fa-regular fa-face-grin-wink\", \"fa-regular fa-face-kiss\", \"fa-regular fa-face-kiss-beam\", \"fa-regular fa-face-kiss-wink-heart\", \"fa-regular fa-face-laugh\", \"fa-regular fa-face-laugh-beam\", \"fa-regular fa-face-laugh-squint\", \"fa-regular fa-face-laugh-wink\", \"fa-regular fa-face-meh\", \"fa-regular fa-face-meh-blank\", \"fa-regular fa-face-rolling-eyes\", \"fa-regular fa-face-sad-cry\", \"fa-regular fa-face-sad-tear\", \"fa-regular fa-face-smile\", \"fa-regular fa-face-smile-beam\", \"fa-regular fa-face-smile-wink\", \"fa-regular fa-face-surprise\", \"fa-regular fa-face-tired\", \"fa-regular fa-file\", \"fa-regular fa-file-audio\", \"fa-regular fa-file-code\", \"fa-regular fa-file-excel\", \"fa-regular fa-file-image\", \"fa-regular fa-file-lines\", \"fa-regular fa-file-pdf\", \"fa-regular fa-file-powerpoint\", \"fa-regular fa-file-video\", \"fa-regular fa-file-word\", \"fa-regular fa-file-zipper\", \"fa-regular fa-flag\", \"fa-regular fa-floppy-disk\", \"fa-regular fa-folder\", \"fa-regular fa-folder-closed\", \"fa-regular fa-folder-open\", \"fa-regular fa-font-awesome\", \"fa-regular fa-futbol\", \"fa-regular fa-gem\", \"fa-regular fa-hand\", \"fa-regular fa-hand-back-fist\", \"fa-regular fa-hand-lizard\", \"fa-regular fa-hand-peace\", \"fa-regular fa-hand-point-down\", \"fa-regular fa-hand-point-left\", \"fa-regular fa-hand-point-right\", \"fa-regular fa-hand-point-up\", \"fa-regular fa-hand-pointer\", \"fa-regular fa-hand-scissors\", \"fa-regular fa-hand-spock\", \"fa-regular fa-handshake\", \"fa-regular fa-hard-drive\", \"fa-regular fa-heart\", \"fa-regular fa-hospital\", \"fa-regular fa-hourglass\", \"fa-regular fa-hourglass-half\", \"fa-regular fa-id-badge\", \"fa-regular fa-id-card\", \"fa-regular fa-image\", \"fa-regular fa-images\", \"fa-regular fa-keyboard\", \"fa-regular fa-lemon\", \"fa-regular fa-life-ring\", \"fa-regular fa-lightbulb\", \"fa-regular fa-map\", \"fa-regular fa-message\", \"fa-regular fa-money-bill-1\", \"fa-regular fa-moon\", \"fa-regular fa-newspaper\", \"fa-regular fa-note-sticky\", \"fa-regular fa-object-group\", \"fa-regular fa-object-ungroup\", \"fa-regular fa-paper-plane\", \"fa-regular fa-paste\", \"fa-regular fa-pen-to-square\", \"fa-regular fa-rectangle-list\", \"fa-regular fa-rectangle-xmark\", \"fa-regular fa-registered\", \"fa-regular fa-share-from-square\", \"fa-regular fa-snowflake\", \"fa-regular fa-square\", \"fa-regular fa-square-caret-down\", \"fa-regular fa-square-caret-left\", \"fa-regular fa-square-caret-right\", \"fa-regular fa-square-caret-up\", \"fa-regular fa-square-check\", \"fa-regular fa-square-full\", \"fa-regular fa-square-minus\", \"fa-regular fa-square-plus\", \"fa-regular fa-star\", \"fa-regular fa-star-half\", \"fa-regular fa-star-half-stroke\", \"fa-regular fa-sun\", \"fa-regular fa-thumbs-down\", \"fa-regular fa-thumbs-up\", \"fa-regular fa-trash-can\", \"fa-regular fa-user\", \"fa-regular fa-window-maximize\", \"fa-regular fa-window-minimize\", \"fa-regular fa-window-restore\", \"fa-solid fa-0\", \"fa-solid fa-1\", \"fa-solid fa-2\", \"fa-solid fa-3\", \"fa-solid fa-4\", \"fa-solid fa-5\", \"fa-solid fa-6\", \"fa-solid fa-7\", \"fa-solid fa-8\", \"fa-solid fa-9\", \"fa-solid fa-a\", \"fa-solid fa-address-book\", \"fa-solid fa-address-card\", \"fa-solid fa-align-center\", \"fa-solid fa-align-justify\", \"fa-solid fa-align-left\", \"fa-solid fa-align-right\", \"fa-solid fa-anchor\", \"fa-solid fa-anchor-circle-check\", \"fa-solid fa-anchor-circle-exclamation\", \"fa-solid fa-anchor-circle-xmark\", \"fa-solid fa-anchor-lock\", \"fa-solid fa-angle-down\", \"fa-solid fa-angle-left\", \"fa-solid fa-angle-right\", \"fa-solid fa-angle-up\", \"fa-solid fa-angles-down\", \"fa-solid fa-angles-left\", \"fa-solid fa-angles-right\", \"fa-solid fa-angles-up\", \"fa-solid fa-ankh\", \"fa-solid fa-apple-whole\", \"fa-solid fa-archway\", \"fa-solid fa-arrow-down\", \"fa-solid fa-arrow-down-1-9\", \"fa-solid fa-arrow-down-9-1\", \"fa-solid fa-arrow-down-a-z\", \"fa-solid fa-arrow-down-long\", \"fa-solid fa-arrow-down-short-wide\", \"fa-solid fa-arrow-down-up-across-line\", \"fa-solid fa-arrow-down-up-lock\", \"fa-solid fa-arrow-down-wide-short\", \"fa-solid fa-arrow-down-z-a\", \"fa-solid fa-arrow-left\", \"fa-solid fa-arrow-left-long\", \"fa-solid fa-arrow-pointer\", \"fa-solid fa-arrow-right\", \"fa-solid fa-arrow-right-arrow-left\", \"fa-solid fa-arrow-right-from-bracket\", \"fa-solid fa-arrow-right-long\", \"fa-solid fa-arrow-right-to-bracket\", \"fa-solid fa-arrow-right-to-city\", \"fa-solid fa-arrow-rotate-left\", \"fa-solid fa-arrow-rotate-right\", \"fa-solid fa-arrow-trend-down\", \"fa-solid fa-arrow-trend-up\", \"fa-solid fa-arrow-turn-down\", \"fa-solid fa-arrow-turn-up\", \"fa-solid fa-arrow-up\", \"fa-solid fa-arrow-up-1-9\", \"fa-solid fa-arrow-up-9-1\", \"fa-solid fa-arrow-up-a-z\", \"fa-solid fa-arrow-up-from-bracket\", \"fa-solid fa-arrow-up-from-ground-water\", \"fa-solid fa-arrow-up-from-water-pump\", \"fa-solid fa-arrow-up-long\", \"fa-solid fa-arrow-up-right-dots\", \"fa-solid fa-arrow-up-right-from-square\", \"fa-solid fa-arrow-up-short-wide\", \"fa-solid fa-arrow-up-wide-short\", \"fa-solid fa-arrow-up-z-a\", \"fa-solid fa-arrows-down-to-line\", \"fa-solid fa-arrows-down-to-people\", \"fa-solid fa-arrows-left-right\", \"fa-solid fa-arrows-left-right-to-line\", \"fa-solid fa-arrows-rotate\", \"fa-solid fa-arrows-spin\", \"fa-solid fa-arrows-split-up-and-left\", \"fa-solid fa-arrows-to-circle\", \"fa-solid fa-arrows-to-dot\", \"fa-solid fa-arrows-to-eye\", \"fa-solid fa-arrows-turn-right\", \"fa-solid fa-arrows-turn-to-dots\", \"fa-solid fa-arrows-up-down\", \"fa-solid fa-arrows-up-down-left-right\", \"fa-solid fa-arrows-up-to-line\", \"fa-solid fa-asterisk\", \"fa-solid fa-at\", \"fa-solid fa-atom\", \"fa-solid fa-audio-description\", \"fa-solid fa-austral-sign\", \"fa-solid fa-award\", \"fa-solid fa-b\", \"fa-solid fa-baby\", \"fa-solid fa-baby-carriage\", \"fa-solid fa-backward\", \"fa-solid fa-backward-fast\", \"fa-solid fa-backward-step\", \"fa-solid fa-bacon\", \"fa-solid fa-bacteria\", \"fa-solid fa-bacterium\", \"fa-solid fa-bag-shopping\", \"fa-solid fa-bahai\", \"fa-solid fa-baht-sign\", \"fa-solid fa-ban\", \"fa-solid fa-ban-smoking\", \"fa-solid fa-bandage\", \"fa-solid fa-bangladeshi-taka-sign\", \"fa-solid fa-barcode\", \"fa-solid fa-bars\", \"fa-solid fa-bars-progress\", \"fa-solid fa-bars-staggered\", \"fa-solid fa-baseball\", \"fa-solid fa-baseball-bat-ball\", \"fa-solid fa-basket-shopping\", \"fa-solid fa-basketball\", \"fa-solid fa-bath\", \"fa-solid fa-battery-empty\", \"fa-solid fa-battery-full\", \"fa-solid fa-battery-half\", \"fa-solid fa-battery-quarter\", \"fa-solid fa-battery-three-quarters\", \"fa-solid fa-bed\", \"fa-solid fa-bed-pulse\", \"fa-solid fa-beer-mug-empty\", \"fa-solid fa-bell\", \"fa-solid fa-bell-concierge\", \"fa-solid fa-bell-slash\", \"fa-solid fa-bezier-curve\", \"fa-solid fa-bicycle\", \"fa-solid fa-binoculars\", \"fa-solid fa-biohazard\", \"fa-solid fa-bitcoin-sign\", \"fa-solid fa-blender\", \"fa-solid fa-blender-phone\", \"fa-solid fa-blog\", \"fa-solid fa-bold\", \"fa-solid fa-bolt\", \"fa-solid fa-bolt-lightning\", \"fa-solid fa-bomb\", \"fa-solid fa-bone\", \"fa-solid fa-bong\", \"fa-solid fa-book\", \"fa-solid fa-book-atlas\", \"fa-solid fa-book-bible\", \"fa-solid fa-book-bookmark\", \"fa-solid fa-book-journal-whills\", \"fa-solid fa-book-medical\", \"fa-solid fa-book-open\", \"fa-solid fa-book-open-reader\", \"fa-solid fa-book-quran\", \"fa-solid fa-book-skull\", \"fa-solid fa-book-tanakh\", \"fa-solid fa-bookmark\", \"fa-solid fa-border-all\", \"fa-solid fa-border-none\", \"fa-solid fa-border-top-left\", \"fa-solid fa-bore-hole\", \"fa-solid fa-bottle-droplet\", \"fa-solid fa-bottle-water\", \"fa-solid fa-bowl-food\", \"fa-solid fa-bowl-rice\", \"fa-solid fa-bowling-ball\", \"fa-solid fa-box\", \"fa-solid fa-box-archive\", \"fa-solid fa-box-open\", \"fa-solid fa-box-tissue\", \"fa-solid fa-boxes-packing\", \"fa-solid fa-boxes-stacked\", \"fa-solid fa-braille\", \"fa-solid fa-brain\", \"fa-solid fa-brazilian-real-sign\", \"fa-solid fa-bread-slice\", \"fa-solid fa-bridge\", \"fa-solid fa-bridge-circle-check\", \"fa-solid fa-bridge-circle-exclamation\", \"fa-solid fa-bridge-circle-xmark\", \"fa-solid fa-bridge-lock\", \"fa-solid fa-bridge-water\", \"fa-solid fa-briefcase\", \"fa-solid fa-briefcase-medical\", \"fa-solid fa-broom\", \"fa-solid fa-broom-ball\", \"fa-solid fa-brush\", \"fa-solid fa-bucket\", \"fa-solid fa-bug\", \"fa-solid fa-bug-slash\", \"fa-solid fa-bugs\", \"fa-solid fa-building\", \"fa-solid fa-building-circle-arrow-right\", \"fa-solid fa-building-circle-check\", \"fa-solid fa-building-circle-exclamation\", \"fa-solid fa-building-circle-xmark\", \"fa-solid fa-building-columns\", \"fa-solid fa-building-flag\", \"fa-solid fa-building-lock\", \"fa-solid fa-building-ngo\", \"fa-solid fa-building-shield\", \"fa-solid fa-building-un\", \"fa-solid fa-building-user\", \"fa-solid fa-building-wheat\", \"fa-solid fa-bullhorn\", \"fa-solid fa-bullseye\", \"fa-solid fa-burger\", \"fa-solid fa-burst\", \"fa-solid fa-bus\", \"fa-solid fa-bus-simple\", \"fa-solid fa-business-time\", \"fa-solid fa-c\", \"fa-solid fa-cable-car\", \"fa-solid fa-cake-candles\", \"fa-solid fa-calculator\", \"fa-solid fa-calendar\", \"fa-solid fa-calendar-check\", \"fa-solid fa-calendar-day\", \"fa-solid fa-calendar-days\", \"fa-solid fa-calendar-minus\", \"fa-solid fa-calendar-plus\", \"fa-solid fa-calendar-week\", \"fa-solid fa-calendar-xmark\", \"fa-solid fa-camera\", \"fa-solid fa-camera-retro\", \"fa-solid fa-camera-rotate\", \"fa-solid fa-campground\", \"fa-solid fa-candy-cane\", \"fa-solid fa-cannabis\", \"fa-solid fa-capsules\", \"fa-solid fa-car\", \"fa-solid fa-car-battery\", \"fa-solid fa-car-burst\", \"fa-solid fa-car-on\", \"fa-solid fa-car-rear\", \"fa-solid fa-car-side\", \"fa-solid fa-car-tunnel\", \"fa-solid fa-caravan\", \"fa-solid fa-caret-down\", \"fa-solid fa-caret-left\", \"fa-solid fa-caret-right\", \"fa-solid fa-caret-up\", \"fa-solid fa-carrot\", \"fa-solid fa-cart-arrow-down\", \"fa-solid fa-cart-flatbed\", \"fa-solid fa-cart-flatbed-suitcase\", \"fa-solid fa-cart-plus\", \"fa-solid fa-cart-shopping\", \"fa-solid fa-cash-register\", \"fa-solid fa-cat\", \"fa-solid fa-cedi-sign\", \"fa-solid fa-cent-sign\", \"fa-solid fa-certificate\", \"fa-solid fa-chair\", \"fa-solid fa-chalkboard\", \"fa-solid fa-chalkboard-user\", \"fa-solid fa-champagne-glasses\", \"fa-solid fa-charging-station\", \"fa-solid fa-chart-area\", \"fa-solid fa-chart-bar\", \"fa-solid fa-chart-column\", \"fa-solid fa-chart-diagram\", \"fa-solid fa-chart-gantt\", \"fa-solid fa-chart-line\", \"fa-solid fa-chart-pie\", \"fa-solid fa-chart-simple\", \"fa-solid fa-check\", \"fa-solid fa-check-double\", \"fa-solid fa-check-to-slot\", \"fa-solid fa-cheese\", \"fa-solid fa-chess\", \"fa-solid fa-chess-bishop\", \"fa-solid fa-chess-board\", \"fa-solid fa-chess-king\", \"fa-solid fa-chess-knight\", \"fa-solid fa-chess-pawn\", \"fa-solid fa-chess-queen\", \"fa-solid fa-chess-rook\", \"fa-solid fa-chevron-down\", \"fa-solid fa-chevron-left\", \"fa-solid fa-chevron-right\", \"fa-solid fa-chevron-up\", \"fa-solid fa-child\", \"fa-solid fa-child-combatant\", \"fa-solid fa-child-dress\", \"fa-solid fa-child-reaching\", \"fa-solid fa-children\", \"fa-solid fa-church\", \"fa-solid fa-circle\", \"fa-solid fa-circle-arrow-down\", \"fa-solid fa-circle-arrow-left\", \"fa-solid fa-circle-arrow-right\", \"fa-solid fa-circle-arrow-up\", \"fa-solid fa-circle-check\", \"fa-solid fa-circle-chevron-down\", \"fa-solid fa-circle-chevron-left\", \"fa-solid fa-circle-chevron-right\", \"fa-solid fa-circle-chevron-up\", \"fa-solid fa-circle-dollar-to-slot\", \"fa-solid fa-circle-dot\", \"fa-solid fa-circle-down\", \"fa-solid fa-circle-exclamation\", \"fa-solid fa-circle-h\", \"fa-solid fa-circle-half-stroke\", \"fa-solid fa-circle-info\", \"fa-solid fa-circle-left\", \"fa-solid fa-circle-minus\", \"fa-solid fa-circle-nodes\", \"fa-solid fa-circle-notch\", \"fa-solid fa-circle-pause\", \"fa-solid fa-circle-play\", \"fa-solid fa-circle-plus\", \"fa-solid fa-circle-question\", \"fa-solid fa-circle-radiation\", \"fa-solid fa-circle-right\", \"fa-solid fa-circle-stop\", \"fa-solid fa-circle-up\", \"fa-solid fa-circle-user\", \"fa-solid fa-circle-xmark\", \"fa-solid fa-city\", \"fa-solid fa-clapperboard\", \"fa-solid fa-clipboard\", \"fa-solid fa-clipboard-check\", \"fa-solid fa-clipboard-list\", \"fa-solid fa-clipboard-question\", \"fa-solid fa-clipboard-user\", \"fa-solid fa-clock\", \"fa-solid fa-clock-rotate-left\", \"fa-solid fa-clone\", \"fa-solid fa-closed-captioning\", \"fa-solid fa-cloud\", \"fa-solid fa-cloud-arrow-down\", \"fa-solid fa-cloud-arrow-up\", \"fa-solid fa-cloud-bolt\", \"fa-solid fa-cloud-meatball\", \"fa-solid fa-cloud-moon\", \"fa-solid fa-cloud-moon-rain\", \"fa-solid fa-cloud-rain\", \"fa-solid fa-cloud-showers-heavy\", \"fa-solid fa-cloud-showers-water\", \"fa-solid fa-cloud-sun\", \"fa-solid fa-cloud-sun-rain\", \"fa-solid fa-clover\", \"fa-solid fa-code\", \"fa-solid fa-code-branch\", \"fa-solid fa-code-commit\", \"fa-solid fa-code-compare\", \"fa-solid fa-code-fork\", \"fa-solid fa-code-merge\", \"fa-solid fa-code-pull-request\", \"fa-solid fa-coins\", \"fa-solid fa-colon-sign\", \"fa-solid fa-comment\", \"fa-solid fa-comment-dollar\", \"fa-solid fa-comment-dots\", \"fa-solid fa-comment-medical\", \"fa-solid fa-comment-nodes\", \"fa-solid fa-comment-slash\", \"fa-solid fa-comment-sms\", \"fa-solid fa-comments\", \"fa-solid fa-comments-dollar\", \"fa-solid fa-compact-disc\", \"fa-solid fa-compass\", \"fa-solid fa-compass-drafting\", \"fa-solid fa-compress\", \"fa-solid fa-computer\", \"fa-solid fa-computer-mouse\", \"fa-solid fa-cookie\", \"fa-solid fa-cookie-bite\", \"fa-solid fa-copy\", \"fa-solid fa-copyright\", \"fa-solid fa-couch\", \"fa-solid fa-cow\", \"fa-solid fa-credit-card\", \"fa-solid fa-crop\", \"fa-solid fa-crop-simple\", \"fa-solid fa-cross\", \"fa-solid fa-crosshairs\", \"fa-solid fa-crow\", \"fa-solid fa-crown\", \"fa-solid fa-crutch\", \"fa-solid fa-cruzeiro-sign\", \"fa-solid fa-cube\", \"fa-solid fa-cubes\", \"fa-solid fa-cubes-stacked\", \"fa-solid fa-d\", \"fa-solid fa-database\", \"fa-solid fa-delete-left\", \"fa-solid fa-democrat\", \"fa-solid fa-desktop\", \"fa-solid fa-dharmachakra\", \"fa-solid fa-diagram-next\", \"fa-solid fa-diagram-predecessor\", \"fa-solid fa-diagram-project\", \"fa-solid fa-diagram-successor\", \"fa-solid fa-diamond\", \"fa-solid fa-diamond-turn-right\", \"fa-solid fa-dice\", \"fa-solid fa-dice-d20\", \"fa-solid fa-dice-d6\", \"fa-solid fa-dice-five\", \"fa-solid fa-dice-four\", \"fa-solid fa-dice-one\", \"fa-solid fa-dice-six\", \"fa-solid fa-dice-three\", \"fa-solid fa-dice-two\", \"fa-solid fa-disease\", \"fa-solid fa-display\", \"fa-solid fa-divide\", \"fa-solid fa-dna\", \"fa-solid fa-dog\", \"fa-solid fa-dollar-sign\", \"fa-solid fa-dolly\", \"fa-solid fa-dong-sign\", \"fa-solid fa-door-closed\", \"fa-solid fa-door-open\", \"fa-solid fa-dove\", \"fa-solid fa-down-left-and-up-right-to-center\", \"fa-solid fa-down-long\", \"fa-solid fa-download\", \"fa-solid fa-dragon\", \"fa-solid fa-draw-polygon\", \"fa-solid fa-droplet\", \"fa-solid fa-droplet-slash\", \"fa-solid fa-drum\", \"fa-solid fa-drum-steelpan\", \"fa-solid fa-drumstick-bite\", \"fa-solid fa-dumbbell\", \"fa-solid fa-dumpster\", \"fa-solid fa-dumpster-fire\", \"fa-solid fa-dungeon\", \"fa-solid fa-e\", \"fa-solid fa-ear-deaf\", \"fa-solid fa-ear-listen\", \"fa-solid fa-earth-africa\", \"fa-solid fa-earth-americas\", \"fa-solid fa-earth-asia\", \"fa-solid fa-earth-europe\", \"fa-solid fa-earth-oceania\", \"fa-solid fa-egg\", \"fa-solid fa-eject\", \"fa-solid fa-elevator\", \"fa-solid fa-ellipsis\", \"fa-solid fa-ellipsis-vertical\", \"fa-solid fa-envelope\", \"fa-solid fa-envelope-circle-check\", \"fa-solid fa-envelope-open\", \"fa-solid fa-envelope-open-text\", \"fa-solid fa-envelopes-bulk\", \"fa-solid fa-equals\", \"fa-solid fa-eraser\", \"fa-solid fa-ethernet\", \"fa-solid fa-euro-sign\", \"fa-solid fa-exclamation\", \"fa-solid fa-expand\", \"fa-solid fa-explosion\", \"fa-solid fa-eye\", \"fa-solid fa-eye-dropper\", \"fa-solid fa-eye-low-vision\", \"fa-solid fa-eye-slash\", \"fa-solid fa-f\", \"fa-solid fa-face-angry\", \"fa-solid fa-face-dizzy\", \"fa-solid fa-face-flushed\", \"fa-solid fa-face-frown\", \"fa-solid fa-face-frown-open\", \"fa-solid fa-face-grimace\", \"fa-solid fa-face-grin\", \"fa-solid fa-face-grin-beam\", \"fa-solid fa-face-grin-beam-sweat\", \"fa-solid fa-face-grin-hearts\", \"fa-solid fa-face-grin-squint\", \"fa-solid fa-face-grin-squint-tears\", \"fa-solid fa-face-grin-stars\", \"fa-solid fa-face-grin-tears\", \"fa-solid fa-face-grin-tongue\", \"fa-solid fa-face-grin-tongue-squint\", \"fa-solid fa-face-grin-tongue-wink\", \"fa-solid fa-face-grin-wide\", \"fa-solid fa-face-grin-wink\", \"fa-solid fa-face-kiss\", \"fa-solid fa-face-kiss-beam\", \"fa-solid fa-face-kiss-wink-heart\", \"fa-solid fa-face-laugh\", \"fa-solid fa-face-laugh-beam\", \"fa-solid fa-face-laugh-squint\", \"fa-solid fa-face-laugh-wink\", \"fa-solid fa-face-meh\", \"fa-solid fa-face-meh-blank\", \"fa-solid fa-face-rolling-eyes\", \"fa-solid fa-face-sad-cry\", \"fa-solid fa-face-sad-tear\", \"fa-solid fa-face-smile\", \"fa-solid fa-face-smile-beam\", \"fa-solid fa-face-smile-wink\", \"fa-solid fa-face-surprise\", \"fa-solid fa-face-tired\", \"fa-solid fa-fan\", \"fa-solid fa-faucet\", \"fa-solid fa-faucet-drip\", \"fa-solid fa-fax\", \"fa-solid fa-feather\", \"fa-solid fa-feather-pointed\", \"fa-solid fa-ferry\", \"fa-solid fa-file\", \"fa-solid fa-file-arrow-down\", \"fa-solid fa-file-arrow-up\", \"fa-solid fa-file-audio\", \"fa-solid fa-file-circle-check\", \"fa-solid fa-file-circle-exclamation\", \"fa-solid fa-file-circle-minus\", \"fa-solid fa-file-circle-plus\", \"fa-solid fa-file-circle-question\", \"fa-solid fa-file-circle-xmark\", \"fa-solid fa-file-code\", \"fa-solid fa-file-contract\", \"fa-solid fa-file-csv\", \"fa-solid fa-file-excel\", \"fa-solid fa-file-export\", \"fa-solid fa-file-fragment\", \"fa-solid fa-file-half-dashed\", \"fa-solid fa-file-image\", \"fa-solid fa-file-import\", \"fa-solid fa-file-invoice\", \"fa-solid fa-file-invoice-dollar\", \"fa-solid fa-file-lines\", \"fa-solid fa-file-medical\", \"fa-solid fa-file-pdf\", \"fa-solid fa-file-pen\", \"fa-solid fa-file-powerpoint\", \"fa-solid fa-file-prescription\", \"fa-solid fa-file-shield\", \"fa-solid fa-file-signature\", \"fa-solid fa-file-video\", \"fa-solid fa-file-waveform\", \"fa-solid fa-file-word\", \"fa-solid fa-file-zipper\", \"fa-solid fa-fill\", \"fa-solid fa-fill-drip\", \"fa-solid fa-film\", \"fa-solid fa-filter\", \"fa-solid fa-filter-circle-dollar\", \"fa-solid fa-filter-circle-xmark\", \"fa-solid fa-fingerprint\", \"fa-solid fa-fire\", \"fa-solid fa-fire-burner\", \"fa-solid fa-fire-extinguisher\", \"fa-solid fa-fire-flame-curved\", \"fa-solid fa-fire-flame-simple\", \"fa-solid fa-fish\", \"fa-solid fa-fish-fins\", \"fa-solid fa-flag\", \"fa-solid fa-flag-checkered\", \"fa-solid fa-flag-usa\", \"fa-solid fa-flask\", \"fa-solid fa-flask-vial\", \"fa-solid fa-floppy-disk\", \"fa-solid fa-florin-sign\", \"fa-solid fa-folder\", \"fa-solid fa-folder-closed\", \"fa-solid fa-folder-minus\", \"fa-solid fa-folder-open\", \"fa-solid fa-folder-plus\", \"fa-solid fa-folder-tree\", \"fa-solid fa-font\", \"fa-solid fa-font-awesome\", \"fa-solid fa-football\", \"fa-solid fa-forward\", \"fa-solid fa-forward-fast\", \"fa-solid fa-forward-step\", \"fa-solid fa-franc-sign\", \"fa-solid fa-frog\", \"fa-solid fa-futbol\", \"fa-solid fa-g\", \"fa-solid fa-gamepad\", \"fa-solid fa-gas-pump\", \"fa-solid fa-gauge\", \"fa-solid fa-gauge-high\", \"fa-solid fa-gauge-simple\", \"fa-solid fa-gauge-simple-high\", \"fa-solid fa-gavel\", \"fa-solid fa-gear\", \"fa-solid fa-gears\", \"fa-solid fa-gem\", \"fa-solid fa-genderless\", \"fa-solid fa-ghost\", \"fa-solid fa-gift\", \"fa-solid fa-gifts\", \"fa-solid fa-glass-water\", \"fa-solid fa-glass-water-droplet\", \"fa-solid fa-glasses\", \"fa-solid fa-globe\", \"fa-solid fa-golf-ball-tee\", \"fa-solid fa-gopuram\", \"fa-solid fa-graduation-cap\", \"fa-solid fa-greater-than\", \"fa-solid fa-greater-than-equal\", \"fa-solid fa-grip\", \"fa-solid fa-grip-lines\", \"fa-solid fa-grip-lines-vertical\", \"fa-solid fa-grip-vertical\", \"fa-solid fa-group-arrows-rotate\", \"fa-solid fa-guarani-sign\", \"fa-solid fa-guitar\", \"fa-solid fa-gun\", \"fa-solid fa-h\", \"fa-solid fa-hammer\", \"fa-solid fa-hamsa\", \"fa-solid fa-hand\", \"fa-solid fa-hand-back-fist\", \"fa-solid fa-hand-dots\", \"fa-solid fa-hand-fist\", \"fa-solid fa-hand-holding\", \"fa-solid fa-hand-holding-dollar\", \"fa-solid fa-hand-holding-droplet\", \"fa-solid fa-hand-holding-hand\", \"fa-solid fa-hand-holding-heart\", \"fa-solid fa-hand-holding-medical\", \"fa-solid fa-hand-lizard\", \"fa-solid fa-hand-middle-finger\", \"fa-solid fa-hand-peace\", \"fa-solid fa-hand-point-down\", \"fa-solid fa-hand-point-left\", \"fa-solid fa-hand-point-right\", \"fa-solid fa-hand-point-up\", \"fa-solid fa-hand-pointer\", \"fa-solid fa-hand-scissors\", \"fa-solid fa-hand-sparkles\", \"fa-solid fa-hand-spock\", \"fa-solid fa-handcuffs\", \"fa-solid fa-hands\", \"fa-solid fa-hands-asl-interpreting\", \"fa-solid fa-hands-bound\", \"fa-solid fa-hands-bubbles\", \"fa-solid fa-hands-clapping\", \"fa-solid fa-hands-holding\", \"fa-solid fa-hands-holding-child\", \"fa-solid fa-hands-holding-circle\", \"fa-solid fa-hands-praying\", \"fa-solid fa-handshake\", \"fa-solid fa-handshake-angle\", \"fa-solid fa-handshake-simple\", \"fa-solid fa-handshake-simple-slash\", \"fa-solid fa-handshake-slash\", \"fa-solid fa-hanukiah\", \"fa-solid fa-hard-drive\", \"fa-solid fa-hashtag\", \"fa-solid fa-hat-cowboy\", \"fa-solid fa-hat-cowboy-side\", \"fa-solid fa-hat-wizard\", \"fa-solid fa-head-side-cough\", \"fa-solid fa-head-side-cough-slash\", \"fa-solid fa-head-side-mask\", \"fa-solid fa-head-side-virus\", \"fa-solid fa-heading\", \"fa-solid fa-headphones\", \"fa-solid fa-headphones-simple\", \"fa-solid fa-headset\", \"fa-solid fa-heart\", \"fa-solid fa-heart-circle-bolt\", \"fa-solid fa-heart-circle-check\", \"fa-solid fa-heart-circle-exclamation\", \"fa-solid fa-heart-circle-minus\", \"fa-solid fa-heart-circle-plus\", \"fa-solid fa-heart-circle-xmark\", \"fa-solid fa-heart-crack\", \"fa-solid fa-heart-pulse\", \"fa-solid fa-helicopter\", \"fa-solid fa-helicopter-symbol\", \"fa-solid fa-helmet-safety\", \"fa-solid fa-helmet-un\", \"fa-solid fa-hexagon-nodes\", \"fa-solid fa-hexagon-nodes-bolt\", \"fa-solid fa-highlighter\", \"fa-solid fa-hill-avalanche\", \"fa-solid fa-hill-rockslide\", \"fa-solid fa-hippo\", \"fa-solid fa-hockey-puck\", \"fa-solid fa-holly-berry\", \"fa-solid fa-horse\", \"fa-solid fa-horse-head\", \"fa-solid fa-hospital\", \"fa-solid fa-hospital-user\", \"fa-solid fa-hot-tub-person\", \"fa-solid fa-hotdog\", \"fa-solid fa-hotel\", \"fa-solid fa-hourglass\", \"fa-solid fa-hourglass-end\", \"fa-solid fa-hourglass-half\", \"fa-solid fa-hourglass-start\", \"fa-solid fa-house\", \"fa-solid fa-house-chimney\", \"fa-solid fa-house-chimney-crack\", \"fa-solid fa-house-chimney-medical\", \"fa-solid fa-house-chimney-user\", \"fa-solid fa-house-chimney-window\", \"fa-solid fa-house-circle-check\", \"fa-solid fa-house-circle-exclamation\", \"fa-solid fa-house-circle-xmark\", \"fa-solid fa-house-crack\", \"fa-solid fa-house-fire\", \"fa-solid fa-house-flag\", \"fa-solid fa-house-flood-water\", \"fa-solid fa-house-flood-water-circle-arrow-right\", \"fa-solid fa-house-laptop\", \"fa-solid fa-house-lock\", \"fa-solid fa-house-medical\", \"fa-solid fa-house-medical-circle-check\", \"fa-solid fa-house-medical-circle-exclamation\", \"fa-solid fa-house-medical-circle-xmark\", \"fa-solid fa-house-medical-flag\", \"fa-solid fa-house-signal\", \"fa-solid fa-house-tsunami\", \"fa-solid fa-house-user\", \"fa-solid fa-hryvnia-sign\", \"fa-solid fa-hurricane\", \"fa-solid fa-i\", \"fa-solid fa-i-cursor\", \"fa-solid fa-ice-cream\", \"fa-solid fa-icicles\", \"fa-solid fa-icons\", \"fa-solid fa-id-badge\", \"fa-solid fa-id-card\", \"fa-solid fa-id-card-clip\", \"fa-solid fa-igloo\", \"fa-solid fa-image\", \"fa-solid fa-image-portrait\", \"fa-solid fa-images\", \"fa-solid fa-inbox\", \"fa-solid fa-indent\", \"fa-solid fa-indian-rupee-sign\", \"fa-solid fa-industry\", \"fa-solid fa-infinity\", \"fa-solid fa-info\", \"fa-solid fa-italic\", \"fa-solid fa-j\", \"fa-solid fa-jar\", \"fa-solid fa-jar-wheat\", \"fa-solid fa-jedi\", \"fa-solid fa-jet-fighter\", \"fa-solid fa-jet-fighter-up\", \"fa-solid fa-joint\", \"fa-solid fa-jug-detergent\", \"fa-solid fa-k\", \"fa-solid fa-kaaba\", \"fa-solid fa-key\", \"fa-solid fa-keyboard\", \"fa-solid fa-khanda\", \"fa-solid fa-kip-sign\", \"fa-solid fa-kit-medical\", \"fa-solid fa-kitchen-set\", \"fa-solid fa-kiwi-bird\", \"fa-solid fa-l\", \"fa-solid fa-land-mine-on\", \"fa-solid fa-landmark\", \"fa-solid fa-landmark-dome\", \"fa-solid fa-landmark-flag\", \"fa-solid fa-language\", \"fa-solid fa-laptop\", \"fa-solid fa-laptop-code\", \"fa-solid fa-laptop-file\", \"fa-solid fa-laptop-medical\", \"fa-solid fa-lari-sign\", \"fa-solid fa-layer-group\", \"fa-solid fa-leaf\", \"fa-solid fa-left-long\", \"fa-solid fa-left-right\", \"fa-solid fa-lemon\", \"fa-solid fa-less-than\", \"fa-solid fa-less-than-equal\", \"fa-solid fa-life-ring\", \"fa-solid fa-lightbulb\", \"fa-solid fa-lines-leaning\", \"fa-solid fa-link\", \"fa-solid fa-link-slash\", \"fa-solid fa-lira-sign\", \"fa-solid fa-list\", \"fa-solid fa-list-check\", \"fa-solid fa-list-ol\", \"fa-solid fa-list-ul\", \"fa-solid fa-litecoin-sign\", \"fa-solid fa-location-arrow\", \"fa-solid fa-location-crosshairs\", \"fa-solid fa-location-dot\", \"fa-solid fa-location-pin\", \"fa-solid fa-location-pin-lock\", \"fa-solid fa-lock\", \"fa-solid fa-lock-open\", \"fa-solid fa-locust\", \"fa-solid fa-lungs\", \"fa-solid fa-lungs-virus\", \"fa-solid fa-m\", \"fa-solid fa-magnet\", \"fa-solid fa-magnifying-glass\", \"fa-solid fa-magnifying-glass-arrow-right\", \"fa-solid fa-magnifying-glass-chart\", \"fa-solid fa-magnifying-glass-dollar\", \"fa-solid fa-magnifying-glass-location\", \"fa-solid fa-magnifying-glass-minus\", \"fa-solid fa-magnifying-glass-plus\", \"fa-solid fa-manat-sign\", \"fa-solid fa-map\", \"fa-solid fa-map-location\", \"fa-solid fa-map-location-dot\", \"fa-solid fa-map-pin\", \"fa-solid fa-marker\", \"fa-solid fa-mars\", \"fa-solid fa-mars-and-venus\", \"fa-solid fa-mars-and-venus-burst\", \"fa-solid fa-mars-double\", \"fa-solid fa-mars-stroke\", \"fa-solid fa-mars-stroke-right\", \"fa-solid fa-mars-stroke-up\", \"fa-solid fa-martini-glass\", \"fa-solid fa-martini-glass-citrus\", \"fa-solid fa-martini-glass-empty\", \"fa-solid fa-mask\", \"fa-solid fa-mask-face\", \"fa-solid fa-mask-ventilator\", \"fa-solid fa-masks-theater\", \"fa-solid fa-mattress-pillow\", \"fa-solid fa-maximize\", \"fa-solid fa-medal\", \"fa-solid fa-memory\", \"fa-solid fa-menorah\", \"fa-solid fa-mercury\", \"fa-solid fa-message\", \"fa-solid fa-meteor\", \"fa-solid fa-microchip\", \"fa-solid fa-microphone\", \"fa-solid fa-microphone-lines\", \"fa-solid fa-microphone-lines-slash\", \"fa-solid fa-microphone-slash\", \"fa-solid fa-microscope\", \"fa-solid fa-mill-sign\", \"fa-solid fa-minimize\", \"fa-solid fa-minus\", \"fa-solid fa-mitten\", \"fa-solid fa-mobile\", \"fa-solid fa-mobile-button\", \"fa-solid fa-mobile-retro\", \"fa-solid fa-mobile-screen\", \"fa-solid fa-mobile-screen-button\", \"fa-solid fa-money-bill\", \"fa-solid fa-money-bill-1\", \"fa-solid fa-money-bill-1-wave\", \"fa-solid fa-money-bill-transfer\", \"fa-solid fa-money-bill-trend-up\", \"fa-solid fa-money-bill-wave\", \"fa-solid fa-money-bill-wheat\", \"fa-solid fa-money-bills\", \"fa-solid fa-money-check\", \"fa-solid fa-money-check-dollar\", \"fa-solid fa-monument\", \"fa-solid fa-moon\", \"fa-solid fa-mortar-pestle\", \"fa-solid fa-mosque\", \"fa-solid fa-mosquito\", \"fa-solid fa-mosquito-net\", \"fa-solid fa-motorcycle\", \"fa-solid fa-mound\", \"fa-solid fa-mountain\", \"fa-solid fa-mountain-city\", \"fa-solid fa-mountain-sun\", \"fa-solid fa-mug-hot\", \"fa-solid fa-mug-saucer\", \"fa-solid fa-music\", \"fa-solid fa-n\", \"fa-solid fa-naira-sign\", \"fa-solid fa-network-wired\", \"fa-solid fa-neuter\", \"fa-solid fa-newspaper\", \"fa-solid fa-not-equal\", \"fa-solid fa-notdef\", \"fa-solid fa-note-sticky\", \"fa-solid fa-notes-medical\", \"fa-solid fa-o\", \"fa-solid fa-object-group\", \"fa-solid fa-object-ungroup\", \"fa-solid fa-oil-can\", \"fa-solid fa-oil-well\", \"fa-solid fa-om\", \"fa-solid fa-otter\", \"fa-solid fa-outdent\", \"fa-solid fa-p\", \"fa-solid fa-pager\", \"fa-solid fa-paint-roller\", \"fa-solid fa-paintbrush\", \"fa-solid fa-palette\", \"fa-solid fa-pallet\", \"fa-solid fa-panorama\", \"fa-solid fa-paper-plane\", \"fa-solid fa-paperclip\", \"fa-solid fa-parachute-box\", \"fa-solid fa-paragraph\", \"fa-solid fa-passport\", \"fa-solid fa-paste\", \"fa-solid fa-pause\", \"fa-solid fa-paw\", \"fa-solid fa-peace\", \"fa-solid fa-pen\", \"fa-solid fa-pen-clip\", \"fa-solid fa-pen-fancy\", \"fa-solid fa-pen-nib\", \"fa-solid fa-pen-ruler\", \"fa-solid fa-pen-to-square\", \"fa-solid fa-pencil\", \"fa-solid fa-people-arrows\", \"fa-solid fa-people-carry-box\", \"fa-solid fa-people-group\", \"fa-solid fa-people-line\", \"fa-solid fa-people-pulling\", \"fa-solid fa-people-robbery\", \"fa-solid fa-people-roof\", \"fa-solid fa-pepper-hot\", \"fa-solid fa-percent\", \"fa-solid fa-person\", \"fa-solid fa-person-arrow-down-to-line\", \"fa-solid fa-person-arrow-up-from-line\", \"fa-solid fa-person-biking\", \"fa-solid fa-person-booth\", \"fa-solid fa-person-breastfeeding\", \"fa-solid fa-person-burst\", \"fa-solid fa-person-cane\", \"fa-solid fa-person-chalkboard\", \"fa-solid fa-person-circle-check\", \"fa-solid fa-person-circle-exclamation\", \"fa-solid fa-person-circle-minus\", \"fa-solid fa-person-circle-plus\", \"fa-solid fa-person-circle-question\", \"fa-solid fa-person-circle-xmark\", \"fa-solid fa-person-digging\", \"fa-solid fa-person-dots-from-line\", \"fa-solid fa-person-dress\", \"fa-solid fa-person-dress-burst\", \"fa-solid fa-person-drowning\", \"fa-solid fa-person-falling\", \"fa-solid fa-person-falling-burst\", \"fa-solid fa-person-half-dress\", \"fa-solid fa-person-harassing\", \"fa-solid fa-person-hiking\", \"fa-solid fa-person-military-pointing\", \"fa-solid fa-person-military-rifle\", \"fa-solid fa-person-military-to-person\", \"fa-solid fa-person-praying\", \"fa-solid fa-person-pregnant\", \"fa-solid fa-person-rays\", \"fa-solid fa-person-rifle\", \"fa-solid fa-person-running\", \"fa-solid fa-person-shelter\", \"fa-solid fa-person-skating\", \"fa-solid fa-person-skiing\", \"fa-solid fa-person-skiing-nordic\", \"fa-solid fa-person-snowboarding\", \"fa-solid fa-person-swimming\", \"fa-solid fa-person-through-window\", \"fa-solid fa-person-walking\", \"fa-solid fa-person-walking-arrow-loop-left\", \"fa-solid fa-person-walking-arrow-right\", \"fa-solid fa-person-walking-dashed-line-arrow-right\", \"fa-solid fa-person-walking-luggage\", \"fa-solid fa-person-walking-with-cane\", \"fa-solid fa-peseta-sign\", \"fa-solid fa-peso-sign\", \"fa-solid fa-phone\", \"fa-solid fa-phone-flip\", \"fa-solid fa-phone-slash\", \"fa-solid fa-phone-volume\", \"fa-solid fa-photo-film\", \"fa-solid fa-piggy-bank\", \"fa-solid fa-pills\", \"fa-solid fa-pizza-slice\", \"fa-solid fa-place-of-worship\", \"fa-solid fa-plane\", \"fa-solid fa-plane-arrival\", \"fa-solid fa-plane-circle-check\", \"fa-solid fa-plane-circle-exclamation\", \"fa-solid fa-plane-circle-xmark\", \"fa-solid fa-plane-departure\", \"fa-solid fa-plane-lock\", \"fa-solid fa-plane-slash\", \"fa-solid fa-plane-up\", \"fa-solid fa-plant-wilt\", \"fa-solid fa-plate-wheat\", \"fa-solid fa-play\", \"fa-solid fa-plug\", \"fa-solid fa-plug-circle-bolt\", \"fa-solid fa-plug-circle-check\", \"fa-solid fa-plug-circle-exclamation\", \"fa-solid fa-plug-circle-minus\", \"fa-solid fa-plug-circle-plus\", \"fa-solid fa-plug-circle-xmark\", \"fa-solid fa-plus\", \"fa-solid fa-plus-minus\", \"fa-solid fa-podcast\", \"fa-solid fa-poo\", \"fa-solid fa-poo-storm\", \"fa-solid fa-poop\", \"fa-solid fa-power-off\", \"fa-solid fa-prescription\", \"fa-solid fa-prescription-bottle\", \"fa-solid fa-prescription-bottle-medical\", \"fa-solid fa-print\", \"fa-solid fa-pump-medical\", \"fa-solid fa-pump-soap\", \"fa-solid fa-puzzle-piece\", \"fa-solid fa-q\", \"fa-solid fa-qrcode\", \"fa-solid fa-question\", \"fa-solid fa-quote-left\", \"fa-solid fa-quote-right\", \"fa-solid fa-r\", \"fa-solid fa-radiation\", \"fa-solid fa-radio\", \"fa-solid fa-rainbow\", \"fa-solid fa-ranking-star\", \"fa-solid fa-receipt\", \"fa-solid fa-record-vinyl\", \"fa-solid fa-rectangle-ad\", \"fa-solid fa-rectangle-list\", \"fa-solid fa-rectangle-xmark\", \"fa-solid fa-recycle\", \"fa-solid fa-registered\", \"fa-solid fa-repeat\", \"fa-solid fa-reply\", \"fa-solid fa-reply-all\", \"fa-solid fa-republican\", \"fa-solid fa-restroom\", \"fa-solid fa-retweet\", \"fa-solid fa-ribbon\", \"fa-solid fa-right-from-bracket\", \"fa-solid fa-right-left\", \"fa-solid fa-right-long\", \"fa-solid fa-right-to-bracket\", \"fa-solid fa-ring\", \"fa-solid fa-road\", \"fa-solid fa-road-barrier\", \"fa-solid fa-road-bridge\", \"fa-solid fa-road-circle-check\", \"fa-solid fa-road-circle-exclamation\", \"fa-solid fa-road-circle-xmark\", \"fa-solid fa-road-lock\", \"fa-solid fa-road-spikes\", \"fa-solid fa-robot\", \"fa-solid fa-rocket\", \"fa-solid fa-rotate\", \"fa-solid fa-rotate-left\", \"fa-solid fa-rotate-right\", \"fa-solid fa-route\", \"fa-solid fa-rss\", \"fa-solid fa-ruble-sign\", \"fa-solid fa-rug\", \"fa-solid fa-ruler\", \"fa-solid fa-ruler-combined\", \"fa-solid fa-ruler-horizontal\", \"fa-solid fa-ruler-vertical\", \"fa-solid fa-rupee-sign\", \"fa-solid fa-rupiah-sign\", \"fa-solid fa-s\", \"fa-solid fa-sack-dollar\", \"fa-solid fa-sack-xmark\", \"fa-solid fa-sailboat\", \"fa-solid fa-satellite\", \"fa-solid fa-satellite-dish\", \"fa-solid fa-scale-balanced\", \"fa-solid fa-scale-unbalanced\", \"fa-solid fa-scale-unbalanced-flip\", \"fa-solid fa-school\", \"fa-solid fa-school-circle-check\", \"fa-solid fa-school-circle-exclamation\", \"fa-solid fa-school-circle-xmark\", \"fa-solid fa-school-flag\", \"fa-solid fa-school-lock\", \"fa-solid fa-scissors\", \"fa-solid fa-screwdriver\", \"fa-solid fa-screwdriver-wrench\", \"fa-solid fa-scroll\", \"fa-solid fa-scroll-torah\", \"fa-solid fa-sd-card\", \"fa-solid fa-section\", \"fa-solid fa-seedling\", \"fa-solid fa-server\", \"fa-solid fa-shapes\", \"fa-solid fa-share\", \"fa-solid fa-share-from-square\", \"fa-solid fa-share-nodes\", \"fa-solid fa-sheet-plastic\", \"fa-solid fa-shekel-sign\", \"fa-solid fa-shield\", \"fa-solid fa-shield-cat\", \"fa-solid fa-shield-dog\", \"fa-solid fa-shield-halved\", \"fa-solid fa-shield-heart\", \"fa-solid fa-shield-virus\", \"fa-solid fa-ship\", \"fa-solid fa-shirt\", \"fa-solid fa-shoe-prints\", \"fa-solid fa-shop\", \"fa-solid fa-shop-lock\", \"fa-solid fa-shop-slash\", \"fa-solid fa-shower\", \"fa-solid fa-shrimp\", \"fa-solid fa-shuffle\", \"fa-solid fa-shuttle-space\", \"fa-solid fa-sign-hanging\", \"fa-solid fa-signal\", \"fa-solid fa-signature\", \"fa-solid fa-signs-post\", \"fa-solid fa-sim-card\", \"fa-solid fa-sink\", \"fa-solid fa-sitemap\", \"fa-solid fa-skull\", \"fa-solid fa-skull-crossbones\", \"fa-solid fa-slash\", \"fa-solid fa-sleigh\", \"fa-solid fa-sliders\", \"fa-solid fa-smog\", \"fa-solid fa-smoking\", \"fa-solid fa-snowflake\", \"fa-solid fa-snowman\", \"fa-solid fa-snowplow\", \"fa-solid fa-soap\", \"fa-solid fa-socks\", \"fa-solid fa-solar-panel\", \"fa-solid fa-sort\", \"fa-solid fa-sort-down\", \"fa-solid fa-sort-up\", \"fa-solid fa-spa\", \"fa-solid fa-spaghetti-monster-flying\", \"fa-solid fa-spell-check\", \"fa-solid fa-spider\", \"fa-solid fa-spinner\", \"fa-solid fa-splotch\", \"fa-solid fa-spoon\", \"fa-solid fa-spray-can\", \"fa-solid fa-spray-can-sparkles\", \"fa-solid fa-square\", \"fa-solid fa-square-arrow-up-right\", \"fa-solid fa-square-binary\", \"fa-solid fa-square-caret-down\", \"fa-solid fa-square-caret-left\", \"fa-solid fa-square-caret-right\", \"fa-solid fa-square-caret-up\", \"fa-solid fa-square-check\", \"fa-solid fa-square-envelope\", \"fa-solid fa-square-full\", \"fa-solid fa-square-h\", \"fa-solid fa-square-minus\", \"fa-solid fa-square-nfi\", \"fa-solid fa-square-parking\", \"fa-solid fa-square-pen\", \"fa-solid fa-square-person-confined\", \"fa-solid fa-square-phone\", \"fa-solid fa-square-phone-flip\", \"fa-solid fa-square-plus\", \"fa-solid fa-square-poll-horizontal\", \"fa-solid fa-square-poll-vertical\", \"fa-solid fa-square-root-variable\", \"fa-solid fa-square-rss\", \"fa-solid fa-square-share-nodes\", \"fa-solid fa-square-up-right\", \"fa-solid fa-square-virus\", \"fa-solid fa-square-xmark\", \"fa-solid fa-staff-snake\", \"fa-solid fa-stairs\", \"fa-solid fa-stamp\", \"fa-solid fa-stapler\", \"fa-solid fa-star\", \"fa-solid fa-star-and-crescent\", \"fa-solid fa-star-half\", \"fa-solid fa-star-half-stroke\", \"fa-solid fa-star-of-david\", \"fa-solid fa-star-of-life\", \"fa-solid fa-sterling-sign\", \"fa-solid fa-stethoscope\", \"fa-solid fa-stop\", \"fa-solid fa-stopwatch\", \"fa-solid fa-stopwatch-20\", \"fa-solid fa-store\", \"fa-solid fa-store-slash\", \"fa-solid fa-street-view\", \"fa-solid fa-strikethrough\", \"fa-solid fa-stroopwafel\", \"fa-solid fa-subscript\", \"fa-solid fa-suitcase\", \"fa-solid fa-suitcase-medical\", \"fa-solid fa-suitcase-rolling\", \"fa-solid fa-sun\", \"fa-solid fa-sun-plant-wilt\", \"fa-solid fa-superscript\", \"fa-solid fa-swatchbook\", \"fa-solid fa-synagogue\", \"fa-solid fa-syringe\", \"fa-solid fa-t\", \"fa-solid fa-table\", \"fa-solid fa-table-cells\", \"fa-solid fa-table-cells-column-lock\", \"fa-solid fa-table-cells-large\", \"fa-solid fa-table-cells-row-lock\", \"fa-solid fa-table-cells-row-unlock\", \"fa-solid fa-table-columns\", \"fa-solid fa-table-list\", \"fa-solid fa-table-tennis-paddle-ball\", \"fa-solid fa-tablet\", \"fa-solid fa-tablet-button\", \"fa-solid fa-tablet-screen-button\", \"fa-solid fa-tablets\", \"fa-solid fa-tachograph-digital\", \"fa-solid fa-tag\", \"fa-solid fa-tags\", \"fa-solid fa-tape\", \"fa-solid fa-tarp\", \"fa-solid fa-tarp-droplet\", \"fa-solid fa-taxi\", \"fa-solid fa-teeth\", \"fa-solid fa-teeth-open\", \"fa-solid fa-temperature-arrow-down\", \"fa-solid fa-temperature-arrow-up\", \"fa-solid fa-temperature-empty\", \"fa-solid fa-temperature-full\", \"fa-solid fa-temperature-half\", \"fa-solid fa-temperature-high\", \"fa-solid fa-temperature-low\", \"fa-solid fa-temperature-quarter\", \"fa-solid fa-temperature-three-quarters\", \"fa-solid fa-tenge-sign\", \"fa-solid fa-tent\", \"fa-solid fa-tent-arrow-down-to-line\", \"fa-solid fa-tent-arrow-left-right\", \"fa-solid fa-tent-arrow-turn-left\", \"fa-solid fa-tent-arrows-down\", \"fa-solid fa-tents\", \"fa-solid fa-terminal\", \"fa-solid fa-text-height\", \"fa-solid fa-text-slash\", \"fa-solid fa-text-width\", \"fa-solid fa-thermometer\", \"fa-solid fa-thumbs-down\", \"fa-solid fa-thumbs-up\", \"fa-solid fa-thumbtack\", \"fa-solid fa-thumbtack-slash\", \"fa-solid fa-ticket\", \"fa-solid fa-ticket-simple\", \"fa-solid fa-timeline\", \"fa-solid fa-toggle-off\", \"fa-solid fa-toggle-on\", \"fa-solid fa-toilet\", \"fa-solid fa-toilet-paper\", \"fa-solid fa-toilet-paper-slash\", \"fa-solid fa-toilet-portable\", \"fa-solid fa-toilets-portable\", \"fa-solid fa-toolbox\", \"fa-solid fa-tooth\", \"fa-solid fa-torii-gate\", \"fa-solid fa-tornado\", \"fa-solid fa-tower-broadcast\", \"fa-solid fa-tower-cell\", \"fa-solid fa-tower-observation\", \"fa-solid fa-tractor\", \"fa-solid fa-trademark\", \"fa-solid fa-traffic-light\", \"fa-solid fa-trailer\", \"fa-solid fa-train\", \"fa-solid fa-train-subway\", \"fa-solid fa-train-tram\", \"fa-solid fa-transgender\", \"fa-solid fa-trash\", \"fa-solid fa-trash-arrow-up\", \"fa-solid fa-trash-can\", \"fa-solid fa-trash-can-arrow-up\", \"fa-solid fa-tree\", \"fa-solid fa-tree-city\", \"fa-solid fa-triangle-exclamation\", \"fa-solid fa-trophy\", \"fa-solid fa-trowel\", \"fa-solid fa-trowel-bricks\", \"fa-solid fa-truck\", \"fa-solid fa-truck-arrow-right\", \"fa-solid fa-truck-droplet\", \"fa-solid fa-truck-fast\", \"fa-solid fa-truck-field\", \"fa-solid fa-truck-field-un\", \"fa-solid fa-truck-front\", \"fa-solid fa-truck-medical\", \"fa-solid fa-truck-monster\", \"fa-solid fa-truck-moving\", \"fa-solid fa-truck-pickup\", \"fa-solid fa-truck-plane\", \"fa-solid fa-truck-ramp-box\", \"fa-solid fa-tty\", \"fa-solid fa-turkish-lira-sign\", \"fa-solid fa-turn-down\", \"fa-solid fa-turn-up\", \"fa-solid fa-tv\", \"fa-solid fa-u\", \"fa-solid fa-umbrella\", \"fa-solid fa-umbrella-beach\", \"fa-solid fa-underline\", \"fa-solid fa-universal-access\", \"fa-solid fa-unlock\", \"fa-solid fa-unlock-keyhole\", \"fa-solid fa-up-down\", \"fa-solid fa-up-down-left-right\", \"fa-solid fa-up-long\", \"fa-solid fa-up-right-and-down-left-from-center\", \"fa-solid fa-up-right-from-square\", \"fa-solid fa-upload\", \"fa-solid fa-user\", \"fa-solid fa-user-astronaut\", \"fa-solid fa-user-check\", \"fa-solid fa-user-clock\", \"fa-solid fa-user-doctor\", \"fa-solid fa-user-gear\", \"fa-solid fa-user-graduate\", \"fa-solid fa-user-group\", \"fa-solid fa-user-injured\", \"fa-solid fa-user-large\", \"fa-solid fa-user-large-slash\", \"fa-solid fa-user-lock\", \"fa-solid fa-user-minus\", \"fa-solid fa-user-ninja\", \"fa-solid fa-user-nurse\", \"fa-solid fa-user-pen\", \"fa-solid fa-user-plus\", \"fa-solid fa-user-secret\", \"fa-solid fa-user-shield\", \"fa-solid fa-user-slash\", \"fa-solid fa-user-tag\", \"fa-solid fa-user-tie\", \"fa-solid fa-user-xmark\", \"fa-solid fa-users\", \"fa-solid fa-users-between-lines\", \"fa-solid fa-users-gear\", \"fa-solid fa-users-line\", \"fa-solid fa-users-rays\", \"fa-solid fa-users-rectangle\", \"fa-solid fa-users-slash\", \"fa-solid fa-users-viewfinder\", \"fa-solid fa-utensils\", \"fa-solid fa-v\", \"fa-solid fa-van-shuttle\", \"fa-solid fa-vault\", \"fa-solid fa-vector-square\", \"fa-solid fa-venus\", \"fa-solid fa-venus-double\", \"fa-solid fa-venus-mars\", \"fa-solid fa-vest\", \"fa-solid fa-vest-patches\", \"fa-solid fa-vial\", \"fa-solid fa-vial-circle-check\", \"fa-solid fa-vial-virus\", \"fa-solid fa-vials\", \"fa-solid fa-video\", \"fa-solid fa-video-slash\", \"fa-solid fa-vihara\", \"fa-solid fa-virus\", \"fa-solid fa-virus-covid\", \"fa-solid fa-virus-covid-slash\", \"fa-solid fa-virus-slash\", \"fa-solid fa-viruses\", \"fa-solid fa-voicemail\", \"fa-solid fa-volcano\", \"fa-solid fa-volleyball\", \"fa-solid fa-volume-high\", \"fa-solid fa-volume-low\", \"fa-solid fa-volume-off\", \"fa-solid fa-volume-xmark\", \"fa-solid fa-vr-cardboard\", \"fa-solid fa-w\", \"fa-solid fa-walkie-talkie\", \"fa-solid fa-wallet\", \"fa-solid fa-wand-magic\", \"fa-solid fa-wand-magic-sparkles\", \"fa-solid fa-wand-sparkles\", \"fa-solid fa-warehouse\", \"fa-solid fa-water\", \"fa-solid fa-water-ladder\", \"fa-solid fa-wave-square\", \"fa-solid fa-web-awesome\", \"fa-solid fa-weight-hanging\", \"fa-solid fa-weight-scale\", \"fa-solid fa-wheat-awn\", \"fa-solid fa-wheat-awn-circle-exclamation\", \"fa-solid fa-wheelchair\", \"fa-solid fa-wheelchair-move\", \"fa-solid fa-whiskey-glass\", \"fa-solid fa-wifi\", \"fa-solid fa-wind\", \"fa-solid fa-window-maximize\", \"fa-solid fa-window-minimize\", \"fa-solid fa-window-restore\", \"fa-solid fa-wine-bottle\", \"fa-solid fa-wine-glass\", \"fa-solid fa-wine-glass-empty\", \"fa-solid fa-won-sign\", \"fa-solid fa-worm\", \"fa-solid fa-wrench\", \"fa-solid fa-x\", \"fa-solid fa-x-ray\", \"fa-solid fa-xmark\", \"fa-solid fa-xmarks-lines\", \"fa-solid fa-y\", \"fa-solid fa-yen-sign\", \"fa-solid fa-yin-yang\", \"fa-solid fa-z\"]\n\nexport default iconNames;"
  },
  {
    "path": "GoEasyDesigner/frontend/src/components/boxs/el/TextEdit/TextEdit.js",
    "content": "export default {\n    top: \"0\",\n    left: \"0\",\n    width: \"120\",\n    height: \"40\",\n    noPlace: true,\n    visible: true,\n    disable: false,\n    zIndex: 0,\n    size: \"custom\",\n    内容: \"\",\n    type: \"text\",\n    placeholder: \"请输入..\",\n    maxlength:-1,\n}\n"
  },
  {
    "path": "GoEasyDesigner/frontend/src/components/boxs/el/TextEdit/TextEdit.vue",
    "content": "<template>\n\n  <div :style=\"item.size=='custom' ? getItemStyle(item):''\">\n    <el-input\n        style=\"width: 100%;height: 100%;\"\n        :getItemStyle=\"getItemStyle(item)\"\n        :type=\"item.type\"\n        :placeholder=\"item.placeholder\"\n        :maxlength=\"item.maxlength\"\n        :size=\"item.size=='custom' ?'':item.size\"\n        v-model=\"item.text\"/>\n  </div>\n</template>\n\n<script>\nimport {getItemStyle} from \"@/public\";\n\nexport default {\n  methods: {getItemStyle},\n  props: {\n    item: {\n      type: Object,\n      default: '',\n    }\n  },\n}\n</script>\n\n<style>\n\n.el-textarea__inner{\n  height: 100%;\n}\n\n</style>\n"
  },
  {
    "path": "GoEasyDesigner/frontend/src/components/boxs/el/TextEdit/TextEditAttr.vue",
    "content": "<template>\n  <div class=\"属性表格\">\n\n  <el-form\n      label-position=\"left\"\n      label-width=\"100px\"\n      style=\"max-width: 460px\"\n  >\n    <component is=\"common-properties\" :item=\"item\"/>\n    <el-form-item label=\"text\">\n      <el-input v-model=\"item.text\"/>\n    </el-form-item>\n    <el-form-item label=\"size\">\n      <el-select v-model=\"props.item.size\" style=\"width: 100%\">\n        <el-option\n            v-for=\"(item, index) in size选项\"\n            :key=\"item\"\n            :label=\"item.label\"\n            :value=\"item.value\"\n        />\n      </el-select>\n    </el-form-item>\n    <el-form-item label=\"maxlength\">\n      <el-input v-model=\"item.maxlength\"/>\n    </el-form-item>\n    <el-form-item label=\"placeholder\">\n      <el-input v-model=\"item.placeholder\"/>\n    </el-form-item>\n\n    <el-form-item label=\"type\">\n      <el-select v-model=\"props.item.type\" style=\"width: 100%\">\n        <el-option\n            v-for=\"(item, index) in type选项\"\n            :key=\"item\"\n            :label=\"item.label\"\n            :value=\"item.value\"\n        />\n      </el-select>\n    </el-form-item>\n\n  </el-form>\n  </div>\n  <component is=\"common-event-component\" :item=\"props.item\"  :eventName=\"eventName\"/>\n\n\n</template>\n<script setup>\nimport {ref, defineProps, defineEmits, onMounted} from \"vue\";\n\nconst emits = defineEmits([\"添加事件被选择\"]); // 声明接受的事件\nconst props = defineProps(['item']);\nlet size选项 = ref([\n  {\"label\": \"自定义\", \"value\": \"custom\"},\n  {\"label\": \"大号\", \"value\": \"large\"},\n  {\"label\": \"小号\", \"value\": \"small\"},\n]);\nlet type选项 = ref([\n  {\"label\": \"单行文本框\", \"value\": \"text\"},\n  {\"label\": \"多行文本框\", \"value\": \"textarea\"},\n  {\"label\": \"密码输入框\", \"value\": \"password\"},\n  {\"label\": \"数字输入框\", \"value\": \"number\"},\n]);\nonMounted(() => {\n  if (localStorage.getItem(\"locale\") === \"English\") {\n    size选项.value.forEach((item) => {\n      item.label = item.value;\n    });\n    type选项.value.forEach((item) => {\n      item.label = item.value;\n    });\n  }\n});\n\n\nlet eventName = ref([\n\n  {\"label\": \"被单击\", \"value\": \"click\"},\n  {\"label\": \"鼠标左键被按下\", \"value\": \"mousedown\"},\n  {\"label\": \"鼠标左键被放开\", \"value\": \"mouseup\"},\n  {\"label\": \"被双击\", \"value\": \"dblclick\"},\n  {\"label\": \"鼠标右键被按下\", \"value\": \"contextmenu\"},\n  {\"label\": \"鼠标位置被移动\", \"value\": \"mousemove\"},\n  {\"label\": \"获得焦点\", \"value\": \"focus\"},\n  {\"label\": \"失去焦点\", \"value\": \"blur\"},\n  {\"label\": \"按下某键\", \"value\": \"keydown\"},\n  {\"label\": \"放开某键\", \"value\": \"keyup\"},\n  {\"label\": \"滚轮被滚动\", \"value\": \"mousewheel\"}\n])\n</script>\n\n"
  },
  {
    "path": "GoEasyDesigner/frontend/src/components/boxs/el/Tooltip/Tooltip.js",
    "content": "export default {\n    top: \"0\",\n    left: \"0\",\n    width: \"240\",\n    height: \"60\",\n    noPlace: true,\n    visible: true,\n    disable: false,\n    zIndex: 0,\n    type: \"success\",\n    text:\"text\",\n    description:\"\",\n    center: true,\n    closable: false,\n\n}\n"
  },
  {
    "path": "GoEasyDesigner/frontend/src/components/boxs/el/Tooltip/Tooltip.vue",
    "content": "<template>\n\n  <el-alert\n      v-show=\"item.visible\"\n      v-bind:disabled=\"item.disable\"\n      :type=\"item.type\"\n      :title=\"item.text\"\n      :description=\"item.description\"\n      :closable=\"item.closable\"\n      :center=\"item.center\"\n  />\n\n</template>\n\n<script>\nimport {getItemStyle} from \"@/public\";\n\nexport default {\n  methods: {getItemStyle},\n  props: {\n    item: {\n      type: Object,\n      default: '',\n    }\n  },\n}\n</script>\n"
  },
  {
    "path": "GoEasyDesigner/frontend/src/components/boxs/el/Tooltip/TooltipAttr.vue",
    "content": "<template>\n  <div class=\"属性表格\">\n    <el-form\n        label-position=\"left\"\n        label-width=\"100px\"\n        style=\"max-width: 460px\"\n    >\n      <component is=\"common-properties\" :item=\"item\"/>\n\n      <el-form-item label=\"text\">\n        <el-input v-model=\"props.item.text\"/>\n      </el-form-item>\n      <el-form-item label=\"description\">\n        <el-input v-model=\"props.item.description\"/>\n      </el-form-item>\n\n      <el-form-item label=\"center\">\n        <el-switch v-model=\"item.center\"/>\n      </el-form-item>\n      <el-form-item label=\"closable\">\n        <el-switch v-model=\"item.closable\"/>\n      </el-form-item>\n\n      <el-form-item label=\"type\">\n        <el-select v-model=\"props.item.type\" style=\"width: 100%\">\n          <el-option\n              v-for=\"(item, index) in type选项\"\n              :key=\"item\"\n              :label=\"item.label\"\n              :value=\"item.value\"\n          />\n        </el-select>\n      </el-form-item>\n\n    </el-form>\n  </div>\n\n  <component is=\"common-event-component\" :item=\"props.item\"  :eventName=\"eventName\"/>\n\n</template>\n<script setup>\nimport {ref, defineProps, defineEmits, onMounted} from \"vue\";\n\nconst emits = defineEmits([\"添加事件被选择\"]); // 声明接受的事件\nconst props = defineProps(['item']);\nlet type选项 = ref([\n  {\"label\": \"成功\", \"value\": \"success\"},\n  {\"label\": \"信息\", \"value\": \"info\"},\n  {\"label\": \"警告\", \"value\": \"warning\"},\n  {\"label\": \"错误\", \"value\": \"error\"},\n]);\nonMounted(() => {\n  if (localStorage.getItem(\"locale\") === \"English\") {\n\n    type选项.value.forEach((item) => {\n      item.label = item.value;\n    });\n  }\n});\n\nlet eventName = ref([\n\n  {\"label\": \"被单击\", \"value\": \"click\"},\n  {\"label\": \"鼠标左键被按下\", \"value\": \"mousedown\"},\n  {\"label\": \"鼠标左键被放开\", \"value\": \"mouseup\"},\n  {\"label\": \"被双击\", \"value\": \"dblclick\"},\n  {\"label\": \"鼠标右键被按下\", \"value\": \"contextmenu\"},\n  {\"label\": \"鼠标位置被移动\", \"value\": \"mousemove\"},\n  {\"label\": \"获得焦点\", \"value\": \"focus\"},\n  {\"label\": \"失去焦点\", \"value\": \"blur\"},\n  {\"label\": \"按下某键\", \"value\": \"keydown\"},\n  {\"label\": \"放开某键\", \"value\": \"keyup\"},\n  {\"label\": \"滚轮被滚动\", \"value\": \"mousewheel\"}\n])\n\n</script>"
  },
  {
    "path": "GoEasyDesigner/frontend/src/components/boxs/el/Tree/Tree.js",
    "content": "export default {\n    top: \"150\",\n    left: \"440\",\n    width: \"300\",\n    height: \"200\",\n    noPlace: true,\n    visible: true,\n    disable: false,\n    zIndex: 0,\n\n    select: false,\n    选中项: [],\n\n    data:[\n        {\n            label: 'Level one 1',\n            children: [\n                {\n                    label: 'Level two 1-1',\n                    children: [\n                        {\n                            label: 'Level three 1-1-1',\n                        },\n                    ],\n                },\n            ],\n        },\n        {\n            label: 'Level one 2',\n            children: [\n                {\n                    label: 'Level two 2-1',\n                    children: [\n                        {\n                            label: 'Level three 2-1-1',\n                        },\n                    ],\n                },\n                {\n                    label: 'Level two 2-2',\n                    children: [\n                        {\n                            label: 'Level three 2-2-1',\n                        },\n                    ],\n                },\n            ],\n        },\n        {\n            label: 'Level one 3',\n            children: [\n                {\n                    label: 'Level two 3-1',\n                    children: [\n                        {\n                            label: 'Level three 3-1-1',\n                        },\n                    ],\n                },\n                {\n                    label: 'Level two 3-2',\n                    children: [\n                        {\n                            label: 'Level three 3-2-1',\n                        },\n                    ],\n                },\n            ],\n        },\n    ]\n\n}\n"
  },
  {
    "path": "GoEasyDesigner/frontend/src/components/boxs/el/Tree/Tree.vue",
    "content": "<template>\n  <div :style=\"getItemStyle(item)\">\n    <el-tree\n        ref=\"treeRef\"\n        :data=\"item.data\"\n        :default-checked-keys=\"item.defaultCheckedKeys\"\n        :default-expanded-keys=\"item.defaultExpandedKeys\"\n        :node-key=\"item.id\"\n        :props=\"defaultProps\"\n        :show-checkbox=\"item.select\"\n        style=\"width: 99%; height: 99%\"\n        @check-change=\"handleSelectionChange\"\n    />\n  </div>\n</template>\n\n<script>\nimport {getItemStyle} from '@/public.js';\nimport {ref} from 'vue';\n\nexport default {\n  setup(props) {\n    const treeRef = ref(null);\n    const defaultProps = {\n      children: 'children',\n      label: 'label',\n    };\n\n    const handleSelectionChange = (val) => {\n      props.item.选中项 = treeRef.value.getCheckedNodes(false, false);\n      console.log(props.item.选中项)\n    };\n\n    return {\n      getItemStyle,\n      treeRef,\n      defaultProps,\n      handleSelectionChange,\n    };\n  },\n  props: {\n    item: {\n      type: Object,\n      default: () => ({}),\n    },\n  },\n};\n</script>\n"
  },
  {
    "path": "GoEasyDesigner/frontend/src/components/boxs/el/Tree/TreeAttr.vue",
    "content": "<template>\n  <div class=\"属性表格\">\n    <el-form\n        label-position=\"left\"\n        label-width=\"100px\"\n        style=\"max-width: 460px\"\n    >\n      <component is=\"common-properties\" :item=\"item\"/>\n\n\n      <el-form-item label=\"select\">\n        <el-switch v-model=\"item.select\"/>\n      </el-form-item>\n      <el-form-item v-if=\"item.select\" label=\"value\">\n        <el-input :autosize=\"{ minRows: 2, maxRows: 4 }\"\n                  :value=\"objectToJson(item.value)\"\n                  type=\"textarea\"\n        />\n      </el-form-item>\n\n      <el-form-item label=\"data\">\n\n        <el-button @click=\"打开修改数据对话框(props.item.data,'data')\">编辑</el-button>\n\n      </el-form-item>\n\n    </el-form>\n  </div>\n  <component is=\"common-event-component\" :item=\"props.item\"  :eventName=\"eventName\"/>\n\n  <!-- Define an edit dialog -->\n  <teleport to=\"body\">\n    <el-dialog v-model=\"显示修改数据对话框状态\" title=\"编辑JSON数据\"\n    >\n      <el-input v-model=\"editedJSON\" :autosize=\"{ minRows: 6, maxRows: 10 }\" type=\"textarea\"/>\n      <div slot=\"footer\" class=\"dialog-footer\">\n        <el-button @click=\"显示修改数据对话框状态 = false\">取消</el-button>\n        <el-button type=\"primary\" @click=\"保存编辑的JSON数据\">确定</el-button>\n      </div>\n    </el-dialog>\n  </teleport>\n\n</template>\n<script setup>\nimport {defineEmits, defineProps, ref} from \"vue\";\n\nimport {useAppStore} from '@/stores/appStore'\nimport {ElMessage} from \"element-plus\";\n\nconst emits = defineEmits([\"添加事件被选择\"]); // 声明接受的事件\nconst props = defineProps(['item']);\n\nconst store = useAppStore()\nconst 显示修改数据对话框状态 = ref(false);\nconst editedJSON = ref(JSON.stringify(props.item.header, null, 2));\n\nlet eventName = ref([\n\n  {\"label\": \"被单击\", \"value\": \"click\"},\n  {\"label\": \"鼠标左键被按下\", \"value\": \"mousedown\"},\n  {\"label\": \"鼠标左键被放开\", \"value\": \"mouseup\"},\n  {\"label\": \"被双击\", \"value\": \"dblclick\"},\n  {\"label\": \"鼠标右键被按下\", \"value\": \"contextmenu\"},\n  {\"label\": \"鼠标位置被移动\", \"value\": \"mousemove\"},\n  {\"label\": \"获得焦点\", \"value\": \"focus\"},\n  {\"label\": \"失去焦点\", \"value\": \"blur\"},\n  {\"label\": \"按下某键\", \"value\": \"keydown\"},\n  {\"label\": \"放开某键\", \"value\": \"keyup\"},\n  {\"label\": \"滚轮被滚动\", \"value\": \"mousewheel\"}\n])\n\nfunction objectToJson(object) {\n  try {\n    return JSON.stringify(object, null, 2)\n  } catch (e) {\n    console.log(\"aaaa\")\n    return object\n  }\n}\n\nfunction jsonToObject(jsonText, target) {\n  try {\n    target.value = JSON.parse(jsonText);\n  } catch (error) {\n    console.error('Invalid JSON:', error);\n    target.value = jsonText;\n\n  }\n}\n\nlet valueName = \"\"\n\nfunction 打开修改数据对话框(editData, name) {\n  valueName = name\n  显示修改数据对话框状态.value = true\n  editedJSON.value = JSON.stringify(editData, null, 2)\n}\n\nfunction 保存编辑的JSON数据() {\n  try {\n    const parsedObject = JSON.parse(editedJSON.value);\n    if (valueName == 'header') {\n      props.item.header = parsedObject;\n    }\n    if (valueName == 'data') {\n      props.item.data = parsedObject;\n    }\n    显示修改数据对话框状态.value = false;\n  } catch (error) {\n    console.error('Invalid JSON:', error);\n    //弹出提示\n    ElMessage({\n      message: \"JSON格式错误\",\n      type: 'error',\n      duration: 3000, // 设置显示时间为5秒，单位为毫秒\n    });\n  }\n}\n</script>"
  },
  {
    "path": "GoEasyDesigner/frontend/src/components/boxs/td/Button/Button.js",
    "content": "export default {\n    top: \"0\",\n    left: \"0\",\n    width: \"80\",\n    height: \"32\",\n    noPlace: true,\n    visible: true,\n    disable: false,\n    zIndex: 0,\n    block: true,\n    ghost: false,\n    loading: false,\n    shape: \"rectangle\",\n    size: \"medium\",\n    theme: \"primary\",\n    variant: \"base\",\n    text:\"按钮\",\n}\n"
  },
  {
    "path": "GoEasyDesigner/frontend/src/components/boxs/td/Button/Button.vue",
    "content": "<template>\n\n    <t-button\n        v-show=\"item.visible\"\n        v-bind:disabled=\"item.disable\"\n        :block=\"item.block\"\n        :ghost=\"item.ghost\"\n        :loading=\"item.loading\"\n        :shape=\"item.shape\"\n        :size=\"item.size\"\n        :theme=\"item.theme\"\n    >{{ item.text }}</t-button>\n\n\n</template>\n\n<script>\nimport {getItemStyle} from \"@/public\";\n\nexport default {\n  methods: {getItemStyle},\n  props: {\n    item: {\n      type: Object,\n      default: '',\n    }\n  },\n}\n</script>\n"
  },
  {
    "path": "GoEasyDesigner/frontend/src/components/boxs/td/Button/ButtonAttr.vue",
    "content": "<template>\n  <div class=\"属性表格\">\n    <el-form\n        label-position=\"left\"\n        label-width=\"100px\"\n        style=\"max-width: 460px\"\n    >\n      <component is=\"common-properties\" :item=\"item\"/>\n      <el-form-item label=\"text\">\n        <el-input v-model=\"props.item.text\"/>\n      </el-form-item>\n      <el-form-item label=\"block\">\n        <el-switch v-model=\"item.block\"/>\n      </el-form-item>\n      <el-form-item label=\"ghost\">\n        <el-switch v-model=\"item.ghost\"/>\n      </el-form-item>\n      <el-form-item label=\"loading\">\n        <el-switch v-model=\"item.loading\"/>\n      </el-form-item>\n      <el-form-item label=\"shape\">\n        <el-select v-model=\"props.item.shape\" style=\"width: 100%\">\n          <el-option\n              v-for=\"(item, index) in shapeOptions\"\n              :key=\"item\"\n              :label=\"item.label\"\n              :value=\"item.value\"\n          />\n        </el-select>\n      </el-form-item>\n\n      <el-form-item label=\"size\">\n        <el-select v-model=\"props.item.size\" style=\"width: 100%\">\n          <el-option\n              v-for=\"(item, index) in sizeOptions\"\n              :key=\"item\"\n              :label=\"item.label\"\n              :value=\"item.value\"\n          />\n        </el-select>\n      </el-form-item>\n\n      <el-form-item label=\"theme\">\n        <el-select v-model=\"props.item.theme\" style=\"width: 100%\">\n          <el-option\n              v-for=\"(item, index) in themeOptions\"\n              :key=\"item\"\n              :label=\"item.label\"\n              :value=\"item.value\"\n          />\n        </el-select>\n      </el-form-item>\n\n      <el-form-item label=\"variant\">\n        <el-select v-model=\"props.item.variant\" style=\"width: 100%\">\n          <el-option\n              v-for=\"(item, index) in variantOptions\"\n              :key=\"item\"\n              :label=\"item.label\"\n              :value=\"item.value\"\n          />\n        </el-select>\n      </el-form-item>\n\n    </el-form>\n  </div>\n\n\n    <component is=\"common-event-component\" :item=\"props.item\"  :eventName=\"eventNames\"/>\n\n</template>\n<script setup>\nimport {ref, defineProps, defineEmits,onMounted} from \"vue\";\n\nconst emits = defineEmits([\"添加事件被选择\"]); // 声明接受的事件\nconst props = defineProps(['item']);\nlet shapeOptions = ref([\n  {\"label\": \"长方形\", \"value\": \"rectangle\"},\n  {\"label\": \"正方形\", \"value\": \"square\"},\n  {\"label\": \"圆角长方形\", \"value\": \"round\"},\n  {\"label\": \"圆形\", \"value\": \"circle\"},\n]);\n\nlet sizeOptions = ref([\n  {\"label\": \"更小\", \"value\": \"extra-small\"},\n  {\"label\": \"小\", \"value\": \"small\"},\n  {\"label\": \"中\", \"value\": \"medium\"},\n  {\"label\": \"大\", \"value\": \"large\"},\n]);\nlet themeOptions = ref([\n  {\"label\": \"默认\", \"value\": \"default\"},\n  {\"label\": \"主要\", \"value\": \"primary\"},\n  {\"label\": \"危险\", \"value\": \"danger\"},\n  {\"label\": \"警告\", \"value\": \"warning\"},\n  {\"label\": \"成功\", \"value\": \"success\"},\n]);\n\nlet variantOptions = ref([\n  {\"label\": \"基础\", \"value\": \"base\"},\n  {\"label\": \"线框\", \"value\": \"outline\"},\n  {\"label\": \"虚线\", \"value\": \"dashed\"},\n  {\"label\": \"文字\", \"value\": \"text\"},\n]);\n\nlet eventNames = ref([\n  {\"label\": \"被单击\", \"value\": \"click\"},\n  {\"label\": \"鼠标左键被按下\", \"value\": \"mousedown\"},\n  {\"label\": \"鼠标左键被放开\", \"value\": \"mouseup\"},\n  {\"label\": \"被双击\", \"value\": \"dblclick\"},\n  {\"label\": \"鼠标右键被按下\", \"value\": \"contextmenu\"},\n  {\"label\": \"鼠标位置被移动\", \"value\": \"mousemove\"},\n  {\"label\": \"获得焦点\", \"value\": \"focus\"},\n  {\"label\": \"失去焦点\", \"value\": \"blur\"},\n  {\"label\": \"按下某键\", \"value\": \"keydown\"},\n  {\"label\": \"放开某键\", \"value\": \"keyup\"},\n  {\"label\": \"滚轮被滚动\", \"value\": \"mousewheel\"}\n])\n\n\nonMounted(() => {\n  if (localStorage.getItem(\"locale\") === \"English\") {\n    shapeOptions.value.forEach((item) => {\n      item.label = item.value;\n    });\n    sizeOptions.value.forEach((item) => {\n      item.label = item.value;\n    });\n    themeOptions.value.forEach((item) => {\n      item.label = item.value;\n    });\n    variantOptions.value.forEach((item) => {\n      item.label = item.value;\n    });\n\n  }\n\n});\n\n\n\n</script>"
  },
  {
    "path": "GoEasyDesigner/frontend/src/components/boxs/td/Link/Link.js",
    "content": "export default {\n    top: \"0\",\n    left: \"0\",\n    width: \"80\",\n    height: \"32\",\n    noPlace: true,\n    visible: true,\n    disable: false,\n    zIndex: 0,\n\n    text:\"Link\",\n    download: \"\",\n    hover: \"underline\",\n    href: \"\",\n    prefixIcon: \"\",\n    size: \"medium\",\n    suffixIcon: \"\",\n    target: \"\",\n    theme: \"default\",\n    underline: false,\n}\n"
  },
  {
    "path": "GoEasyDesigner/frontend/src/components/boxs/td/Link/Link.vue",
    "content": "<template>\n  <t-link\n      :content=\"item.text\"\n      :disabled=\"item.disable\"\n      :download=\"item.download\"\n      :hover=\"item.hover\"\n      :href=\"item.href\"\n      :prefixIcon=\"item.prefixIcon\"\n      :size=\"item.size\"\n      :suffixIcon=\"item.suffixIcon\"\n      :target=\"item.target\"\n      :theme=\"item.theme\"\n      :underline=\"item.underline\"\n  ></t-link>\n\n</template>\n\n<script>\nimport {getItemStyle} from \"@/public\";\n\nexport default {\n  methods: {getItemStyle},\n  props: {\n    item: {\n      type: Object,\n      default: '',\n    }\n  },\n}\n</script>\n"
  },
  {
    "path": "GoEasyDesigner/frontend/src/components/boxs/td/Link/LinkAttr.vue",
    "content": "<template>\n  <div class=\"属性表格\">\n    <el-form\n        label-position=\"left\"\n        label-width=\"100px\"\n        style=\"max-width: 460px\"\n    >\n      <component is=\"common-properties\" :item=\"item\" />\n      <el-form-item label=\"text\">\n        <el-input v-model=\"props.item.text\" />\n      </el-form-item>\n      <el-form-item label=\"default\">\n        <el-input v-model=\"props.item.default\" />\n      </el-form-item>\n      <el-form-item label=\"download\">\n        <el-input v-model=\"item.download\" />\n      </el-form-item>\n      <el-form-item label=\"hover\">\n        <el-input v-model=\"item.hover\" />\n      </el-form-item>\n      <el-form-item label=\"href\">\n        <el-input v-model=\"item.href\" />\n      </el-form-item>\n      <el-form-item label=\"prefixIcon\">\n        <el-input v-model=\"item.prefixIcon\" />\n      </el-form-item>\n      <el-form-item label=\"size\">\n        <el-select v-model=\"props.item.size\" style=\"width: 100%\">\n          <el-option\n              v-for=\"(item, index) in sizeOptions\"\n              :key=\"item\"\n              :label=\"item.label\"\n              :value=\"item.value\"\n          />\n        </el-select>\n      </el-form-item>\n      <el-form-item label=\"suffixIcon\">\n        <el-input v-model=\"item.suffixIcon\" />\n      </el-form-item>\n      <el-form-item label=\"target\">\n        <el-input v-model=\"item.target\" />\n      </el-form-item>\n      <el-form-item label=\"theme\">\n        <el-select v-model=\"props.item.theme\" style=\"width: 100%\">\n          <el-option\n              v-for=\"(item, index) in themeOptions\"\n              :key=\"item\"\n              :label=\"item.label\"\n              :value=\"item.value\"\n          />\n        </el-select>\n      </el-form-item>\n      <el-form-item label=\"underline\">\n        <el-switch v-model=\"item.underline\" />\n      </el-form-item>\n    </el-form>\n\n\n\n  </div>\n  <component is=\"common-event-component\" :item=\"props.item\"  :eventName=\"eventNames\"/>\n\n</template>\n\n<script setup>\nimport { ref, defineProps, defineEmits, onMounted } from \"vue\";\n\nconst emits = defineEmits([\"添加事件被选择\"]);\nconst props = defineProps([\"item\"]);\nlet sizeOptions = ref([\n  { label: \"更小\", value: \"extra-small\" },\n  { label: \"小\", value: \"small\" },\n  { label: \"中\", value: \"medium\" },\n  { label: \"大\", value: \"large\" },\n]);\nlet themeOptions = ref([\n  { label: \"默认\", value: \"default\" },\n  { label: \"主要\", value: \"primary\" },\n  { label: \"危险\", value: \"danger\" },\n  { label: \"警告\", value: \"warning\" },\n  { label: \"成功\", value: \"success\" },\n]);\nlet eventNames = ref([\n  { label: \"点击事件\", value: \"click\" },\n]);\n\nonMounted(() => {\n  if (localStorage.getItem(\"locale\") === \"English\") {\n    sizeOptions.value.forEach((item) => {\n      item.label = item.value;\n    });\n    themeOptions.value.forEach((item) => {\n      item.label = item.value;\n    });\n  }\n});\n</script>\n"
  },
  {
    "path": "GoEasyDesigner/frontend/src/components/boxs/td/Progress/Progress.js",
    "content": "export default {\n    top: \"0\",\n    left: \"0\",\n    width: \"200\",\n    height: \"32\",\n    noPlace: true,\n    visible: true,\n    disable: false,\n    zIndex: 0,\n\n    color: '',\n    label: true,\n    percentage: 50,\n    size: 'medium',\n    status: '',\n    strokeWidth: '',\n    theme: 'line',\n    trackColor: '',\n}\n"
  },
  {
    "path": "GoEasyDesigner/frontend/src/components/boxs/td/Progress/Progress.vue",
    "content": "<template>\n    <t-progress\n        :color=\"item.color\"\n        :label=\"item.label\"\n        :percentage=\"item.percentage\"\n        :size=\"item.size\"\n        :status=\"item.status\"\n        :strokeWidth=\"item.strokeWidth\"\n        :theme=\"item.theme\"\n        :trackColor=\"item.trackColor\"\n    />\n</template>\n\n<script setup>\nimport { getItemStyle } from \"@/public\";\nimport { defineProps, ref } from \"vue\";\n\nconst props = defineProps(['item']);\n</script>\n"
  },
  {
    "path": "GoEasyDesigner/frontend/src/components/boxs/td/Progress/ProgressAttr.vue",
    "content": "<template>\n  <div class=\"属性表格\">\n    <el-form\n        label-position=\"left\"\n        label-width=\"100px\"\n        style=\"max-width: 460px\"\n    >\n      <component is=\"common-properties\" :item=\"item\" />\n\n      <el-form-item label=\"color\">\n        <el-color-picker v-model=\"props.item.color\" show-alpha\n                         @active-change=\"val => props.item.color = val\"/>\n      </el-form-item>\n      <el-form-item label=\"label\">\n        <el-switch v-model=\"item.label\" />\n      </el-form-item>\n      <el-form-item label=\"percentage\">\n        <el-input v-model=\"item.percentage\" />\n      </el-form-item>\n      <el-form-item label=\"size\">\n        <el-select v-model=\"props.item.size\" style=\"width: 100%\">\n          <el-option\n              v-for=\"(item, index) in sizeOptions\"\n              :key=\"item\"\n              :label=\"item.label\"\n              :value=\"item.value\"\n          />\n        </el-select>\n      </el-form-item>\n      <el-form-item label=\"status\">\n        <el-select v-model=\"item.status\" style=\"width: 100%\">\n          <el-option\n              v-for=\"statusOption in statusOptions\"\n              :key=\"statusOption.value\"\n              :label=\"statusOption.label\"\n              :value=\"statusOption.value\"\n          />\n        </el-select>\n      </el-form-item>\n      <el-form-item label=\"strokeWidth\">\n        <el-input v-model=\"item.strokeWidth\" />\n      </el-form-item>\n      <el-form-item label=\"theme\">\n        <el-select v-model=\"item.theme\" style=\"width: 100%\">\n          <el-option\n              v-for=\"themeOption in themeOptions\"\n              :key=\"themeOption.value\"\n              :label=\"themeOption.label\"\n              :value=\"themeOption.value\"\n          />\n        </el-select>\n      </el-form-item>\n      <el-form-item label=\"trackColor\">\n        <el-color-picker v-model=\"props.item.trackColor\" show-alpha\n                         @active-change=\"val => props.item.trackColor = val\"/>\n      </el-form-item>\n    </el-form>\n  </div>\n  <component\n      is=\"common-event-component\"\n      :item=\"item\"\n      :eventName=\"eventNames\"\n  />\n</template>\n\n<script setup>\nimport { ref, defineProps, defineEmits, onMounted } from \"vue\";\n\nconst emits = defineEmits([\"添加事件被选择\"]);\nconst props = defineProps([\"item\"]);\nlet statusOptions = ref([\n  { label: \"成功\", value: \"success\" },\n  { label: \"错误\", value: \"error\" },\n  { label: \"警告\", value: \"warning\" },\n  { label: \"活动\", value: \"active\" },\n]);\nlet themeOptions = ref([\n  { label: \"线形\", value: \"line\" },\n  { label: \"厚实\", value: \"plump\" },\n  { label: \"圆形\", value: \"circle\" },\n]);\nlet sizeOptions = ref([\n  { label: \"小\", value: \"small\" },\n  { label: \"中\", value: \"medium\" },\n  { label: \"大\", value: \"large\" },\n]);\n\nlet eventNames = ref([\n  {\"label\": \"被单击\", \"value\": \"click\"},\n  {\"label\": \"鼠标左键被按下\", \"value\": \"mousedown\"},\n  {\"label\": \"鼠标左键被放开\", \"value\": \"mouseup\"},\n  {\"label\": \"被双击\", \"value\": \"dblclick\"},\n  {\"label\": \"鼠标右键被按下\", \"value\": \"contextmenu\"},\n  {\"label\": \"鼠标位置被移动\", \"value\": \"mousemove\"},\n  {\"label\": \"获得焦点\", \"value\": \"focus\"},\n  {\"label\": \"失去焦点\", \"value\": \"blur\"},\n  {\"label\": \"按下某键\", \"value\": \"keydown\"},\n  {\"label\": \"放开某键\", \"value\": \"keyup\"},\n  {\"label\": \"滚轮被滚动\", \"value\": \"mousewheel\"}\n])\n\nonMounted(() => {\n  if (localStorage.getItem(\"locale\") === \"English\") {\n    statusOptions.value.forEach((item) => {\n      item.label = item.value;\n    });\n    themeOptions.value.forEach((item) => {\n      item.label = item.value;\n    });\n    sizeOptions.value.forEach((item) => {\n      item.label = item.value;\n    });\n  }\n});\n</script>\n"
  },
  {
    "path": "GoEasyDesigner/frontend/src/components/boxs/td/Select/Select.js",
    "content": "export default {\n    top: \"0\",\n    left: \"0\",\n    width: \"80\",\n    height: \"32\",\n    noPlace: true,\n    visible: true,\n    disable: false,\n    zIndex: 0,\n    value: \"small\",\n    options:[\n        {\"label\": \"默认\", \"value\": \"default\"},\n        {\"label\": \"大号\", \"value\": \"large\"},\n        {\"label\": \"小号\", \"value\": \"small\"},\n    ],\n    multiple: false,\n    autoWidth: false,\n\n}\n"
  },
  {
    "path": "GoEasyDesigner/frontend/src/components/boxs/td/Select/Select.vue",
    "content": "<template>\n  <t-select\n      v-model=\"item.value\"\n      :onChange=\"onSendEvent('onChange',item.value)\"\n      :multiple=\"item.multiple\"\n      :auto-width=\"item.autoWidth\"\n      :borderless=\"item.borderless\"\n      :size=\"item.size\"\n  >\n    <t-option\n        v-for=\"(v, i) in item.options\"\n        :label=\"v.label\"\n        :key=\"v.label\"\n        :value=\"v.value\"\n\n    />\n  </t-select>\n\n\n</template>\n\n<script setup>\nimport {defineEmits, defineProps} from \"vue\";\n\nconst {item} = defineProps(['item'])\nconst emits = defineEmits([\"CustomEvent\"]);\n\nfunction onSendEvent(name, data) {\n  console.log(\"自定义组件\", name, \"发送数据\", data);\n  emits(\"CustomEvent\", name, data);\n}\n\n</script>\n"
  },
  {
    "path": "GoEasyDesigner/frontend/src/components/boxs/td/Select/SelectAttr.vue",
    "content": "<template>\n  <div class=\"属性表格\">\n\n    <el-form\n        label-position=\"left\"\n        label-width=\"100px\"\n        style=\"max-width: 460px\"\n    >\n      <component is=\"common-properties\" :item=\"item\"/>\n      <el-form-item label=\"size\">\n        <el-select v-model=\"props.item.size\" style=\"width: 100%\">\n          <el-option\n              v-for=\"(item, index) in sizeOptions\"\n              :key=\"item\"\n              :label=\"item.label\"\n              :value=\"item.value\"\n          />\n        </el-select>\n      </el-form-item>\n      <el-form-item label=\"multiple\">\n        <el-switch v-model=\"item.multiple\"/>\n      </el-form-item>\n      <el-form-item label=\"autoWidth\">\n        <el-switch v-model=\"item.autoWidth\"/>\n      </el-form-item>\n      <el-form-item label=\"borderless\">\n        <el-switch v-model=\"item.borderless\"/>\n      </el-form-item>\n\n      <el-form-item label=\"value\">\n        <el-input v-model=\"item.value\"/>\n      </el-form-item>\n\n      <el-form label-position=\"top\">\n        <el-form-item label=\"options\"\n        >\n          <el-row style=\"width: 100%;text-align: center\">\n            <el-col :span=\"10\" >\n              label\n            </el-col>\n            <el-col :span=\"10\">\n              value\n            </el-col>\n          </el-row>\n\n          <el-row v-for=\"(item, index) in props.item.options\">\n            <el-col :span=\"10\">\n              <el-input\n                  v-model=\"item.label\"\n                  placeholder=\"\"\n              />\n            </el-col>\n\n            <el-col :span=\"10\">\n              <el-input\n                  v-model=\"item.value\"\n                  placeholder=\"\"\n              />\n            </el-col>\n            <el-col :span=\"4\">\n              <el-button @click.stop=\"删除(item.value)\" :icon=\"Delete\" size=\"small\"></el-button>\n            </el-col>\n          </el-row>\n\n          <el-button @click.stop=\"增加()\" size=\"small\">增加选择夹</el-button>\n        </el-form-item>\n      </el-form>\n\n    </el-form>\n  </div>\n  <component is=\"common-event-component\" :item=\"props.item\" :eventName=\"eventName\"/>\n\n\n</template>\n<script setup>\nimport {defineEmits, defineProps, onMounted, ref} from \"vue\";\nimport {Delete} from \"@element-plus/icons-vue\";\n\nimport {useAppStore} from '@/stores/appStore'\n\nconst store = useAppStore()\n\nconst emits = defineEmits([\"添加事件被选择\"]); // 声明接受的事件\nconst props = defineProps(['item']);\nlet sizeOptions = ref([\n  {\"label\": \"默认\", \"value\": \"default\"},\n  {\"label\": \"大号\", \"value\": \"large\"},\n  {\"label\": \"小号\", \"value\": \"small\"},\n]);\n\nfunction 删除(value) {\n  let index = props.item.options.findIndex((item) => item.value === value);\n  props.item.options.splice(index, 1);\n}\n\nfunction 增加() {\n  let k = store.获取索引(\"options\")\n\n  props.item.options.push({\"label\": k, \"value\": k});\n}\n\n\nlet eventName = ref([\n  {\"label\": \"选项被改变\", \"value\": \"onChange\"},\n  {\"label\": \"被单击\", \"value\": \"click\"},\n  {\"label\": \"鼠标左键被按下\", \"value\": \"mousedown\"},\n  {\"label\": \"鼠标左键被放开\", \"value\": \"mouseup\"},\n  {\"label\": \"被双击\", \"value\": \"dblclick\"},\n  {\"label\": \"鼠标右键被按下\", \"value\": \"contextmenu\"},\n  {\"label\": \"鼠标位置被移动\", \"value\": \"mousemove\"},\n  {\"label\": \"获得焦点\", \"value\": \"focus\"},\n  {\"label\": \"失去焦点\", \"value\": \"blur\"},\n  {\"label\": \"按下某键\", \"value\": \"keydown\"},\n  {\"label\": \"放开某键\", \"value\": \"keyup\"},\n  {\"label\": \"滚轮被滚动\", \"value\": \"mousewheel\"}\n])\n\n\nonMounted(() => {\n  if (localStorage.getItem(\"locale\") === \"English\") {\n    sizeOptions.value.forEach((item) => {\n      item.label = item.value;\n    });\n  }\n});\n</script>\n\n"
  },
  {
    "path": "GoEasyDesigner/frontend/src/components/boxs/td/Switch/Switch.js",
    "content": "export default {\n    top: \"0\",\n    left: \"0\",\n    width: \"80\",\n    height: \"32\",\n    noPlace: true,\n    visible: true,\n    disable: false,\n    zIndex: 0,\n    customListening:true,\n\n    label: ['yes','no'],\n    loading: false,\n    size: \"medium\",\n    value: false,\n}\n"
  },
  {
    "path": "GoEasyDesigner/frontend/src/components/boxs/td/Switch/Switch.vue",
    "content": "<template>\n    <t-switch\n        :label=\"item.label\"\n        :loading=\"item.loading\"\n        :size=\"item.size\"\n        v-model=\"item.value\"\n        @change=\"handleChange\"\n    />\n\n</template>\n\n<script setup>\nimport {getItemStyle} from \"@/public\";\nimport {defineEmits, defineProps} from \"vue\";\n\nconst {item} = defineProps(['item'])\nconst emits = defineEmits([\"CustomEvent\"]);\n\nfunction onSendEvent(name, data) {\n  emits(\"CustomEvent\", name, data);\n}\n\nfunction handleChange() {\n  onSendEvent('数据发生变化', item)\n}\n\n\n</script>\n"
  },
  {
    "path": "GoEasyDesigner/frontend/src/components/boxs/td/Switch/SwitchAttr.vue",
    "content": "<template>\n  <div class=\"属性表格\">\n    <el-form\n        label-position=\"left\"\n        label-width=\"100px\"\n        style=\"max-width: 460px\"\n    >\n      <component is=\"common-properties\" :item=\"item\" />\n\n\n      <el-form-item label=\"label\">\n        <el-input v-model=\"item.label[0]\" />\n        <el-input v-model=\"item.label[1]\" />\n      </el-form-item>\n      <el-form-item label=\"loading\">\n        <el-switch v-model=\"item.loading\" />\n      </el-form-item>\n      <el-form-item label=\"size\">\n        <el-select v-model=\"item.size\" style=\"width: 100%\">\n          <el-option\n              v-for=\"(item, index) in sizeOptions\"\n              :key=\"item\"\n              :label=\"item.label\"\n              :value=\"item.value\"\n          />\n        </el-select>\n      </el-form-item>\n      <el-form-item label=\"value\">\n        <el-switch v-model=\"item.value\" />\n      </el-form-item>\n\n    </el-form>\n\n\n  </div>\n  <component\n      is=\"common-event-component\"\n      :item=\"item\"\n      :eventName=\"eventNames\"\n  />\n</template>\n\n<script setup>\nimport { ref, defineProps, defineEmits, onMounted } from \"vue\";\n\nconst emits = defineEmits([\"添加事件被选择\"]);\nconst props = defineProps([\"item\"]);\nlet sizeOptions = ref([\n  { label: \"小\", value: \"small\" },\n  { label: \"中\", value: \"medium\" },\n  { label: \"大\", value: \"large\" },\n]);\nlet eventNames = ref([\n  { label: \"数据发生变化\", value: \"change\" },\n]);\n\nonMounted(() => {\n  if (localStorage.getItem(\"locale\") === \"English\") {\n    sizeOptions.value.forEach((item) => {\n      item.label = item.value;\n    });\n  }\n});\n</script>\n"
  },
  {
    "path": "GoEasyDesigner/frontend/src/components/boxs/tw/Button/Button.js",
    "content": "export default {\n    top: \"0\",\n    left: \"0\",\n    width: \"120\",\n    height: \"40\",\n    noPlace: true,\n    visible: true,\n    disable: false,\n    zIndex: 0,\n    block: true,\n    ghost: false,\n    loading: false,\n    shape: \"rectangle\",\n    size: \"medium\",\n    theme: \"primary\",\n    variant: \"base\",\n    text: \"按钮\",\n}\n"
  },
  {
    "path": "GoEasyDesigner/frontend/src/components/boxs/tw/Button/Button.vue",
    "content": "<template>\n  <button\n      v-show=\"item.visible\"\n      :disabled=\"item.disable\"\n      :class=\"buttonClasses\"\n  >\n    {{ item.text }}\n  </button>\n</template>\n\n<script>\nimport { computed } from 'vue';\n\nexport default {\n  props: {\n    item: {\n      type: Object,\n      default: () => ({}),\n    }\n  },\n  setup(props) {\n    const buttonClasses = computed(() => {\n      return [\n        'px-4',\n        'py-2',\n        'text-white',\n        'font-semibold',\n        'shadow-sm',\n        props.item.block ? 'block w-full' : 'inline-block',\n        props.item.shape === 'rectangle' ? 'rounded' : '',\n        props.item.shape === 'round' ? 'rounded-full' : '',\n        props.item.shape === 'circle' ? 'rounded-full p-2' : '',\n        props.item.theme === 'default' ? 'bg-gray-300 hover:bg-gray-400 focus-visible:outline-gray-500' : '',\n        props.item.theme === 'primary' ? 'bg-indigo-600 hover:bg-indigo-500 focus-visible:outline-indigo-600' : '',\n        props.item.theme === 'danger' ? 'bg-red-600 hover:bg-red-500 focus-visible:outline-red-600' : '',\n        props.item.theme === 'warning' ? 'bg-yellow-600 hover:bg-yellow-500 focus-visible:outline-yellow-600' : '',\n        props.item.theme === 'success' ? 'bg-green-600 hover:bg-green-500 focus-visible:outline-green-600' : '',\n        props.item.disable ? 'cursor-not-allowed opacity-50' : '',\n        props.item.size === 'extra-small' ? 'px-1 py-0.5 text-xs' : '',\n        props.item.size === 'small' ? 'px-2 py-1 text-xs' : '',\n        props.item.size === 'medium' ? 'px-3 py-2 text-sm' : '',\n        props.item.size === 'large' ? 'px-4 py-2.5 text-base' : '',\n      ].join(' ');\n    });\n\n    return { buttonClasses };\n  }\n}\n</script>\n"
  },
  {
    "path": "GoEasyDesigner/frontend/src/components/boxs/tw/Button/ButtonAttr.vue",
    "content": "<template>\n  <div class=\"属性表格\">\n    <el-form\n        label-position=\"left\"\n        label-width=\"100px\"\n        style=\"max-width: 460px\"\n    >\n      <component is=\"common-properties\" :item=\"item\"/>\n      <el-form-item label=\"text\">\n        <el-input v-model=\"props.item.text\"/>\n      </el-form-item>\n      <el-form-item label=\"block\">\n        <el-switch v-model=\"item.block\"/>\n      </el-form-item>\n\n      <el-form-item label=\"shape\">\n        <el-select v-model=\"props.item.shape\" style=\"width: 100%\">\n          <el-option\n              v-for=\"(option, index) in shapeOptions\"\n              :key=\"option.value\"\n              :label=\"option.label\"\n              :value=\"option.value\"\n          />\n        </el-select>\n      </el-form-item>\n\n      <el-form-item label=\"size\">\n        <el-select v-model=\"props.item.size\" style=\"width: 100%\">\n          <el-option\n              v-for=\"(option, index) in sizeOptions\"\n              :key=\"option.value\"\n              :label=\"option.label\"\n              :value=\"option.value\"\n          />\n        </el-select>\n      </el-form-item>\n\n      <el-form-item label=\"theme\">\n        <el-select v-model=\"props.item.theme\" style=\"width: 100%\">\n          <el-option\n              v-for=\"(option, index) in themeOptions\"\n              :key=\"option.value\"\n              :label=\"option.label\"\n              :value=\"option.value\"\n          />\n        </el-select>\n      </el-form-item>\n\n    </el-form>\n  </div>\n\n  <component is=\"common-event-component\" :item=\"props.item\"  :eventName=\"eventNames\"/>\n</template>\n\n<script setup>\nimport { ref, defineProps, defineEmits, onMounted } from 'vue';\n\nconst emits = defineEmits(['添加事件被选择']); // 声明接受的事件\nconst props = defineProps(['item']);\n\nlet shapeOptions = ref([\n  {label: '长方形', value: 'rectangle'},\n  {label: '正方形', value: 'square'},\n  {label: '圆角长方形', value: 'round'},\n  {label: '圆形', value: 'circle'},\n]);\n\nlet sizeOptions = ref([\n  {label: '更小', value: 'extra-small'},\n  {label: '小', value: 'small'},\n  {label: '中', value: 'medium'},\n  {label: '大', value: 'large'},\n]);\n\nlet themeOptions = ref([\n  {label: '默认', value: 'default'},\n  {label: '主要', value: 'primary'},\n  {label: '危险', value: 'danger'},\n  {label: '警告', value: 'warning'},\n  {label: '成功', value: 'success'},\n]);\n\nlet variantOptions = ref([\n  {label: '基础', value: 'base'},\n  {label: '线框', value: 'outline'},\n  {label: '虚线', value: 'dashed'},\n  {label: '文字', value: 'text'},\n]);\n\nlet eventNames = ref([\n  {label: '被单击', value: 'click'},\n  {label: '鼠标左键被按下', value: 'mousedown'},\n  {label: '鼠标左键被放开', value: 'mouseup'},\n  {label: '被双击', value: 'dblclick'},\n  {label: '鼠标右键被按下', value: 'contextmenu'},\n  {label: '鼠标位置被移动', value: 'mousemove'},\n  {label: '获得焦点', value: 'focus'},\n  {label: '失去焦点', value: 'blur'},\n  {label: '按下某键', value: 'keydown'},\n  {label: '放开某键', value: 'keyup'},\n  {label: '滚轮被滚动', value: 'mousewheel'}\n]);\n\nonMounted(() => {\n  if (localStorage.getItem('locale') === 'English') {\n    shapeOptions.value.forEach(item => {\n      item.label = item.value;\n    });\n    sizeOptions.value.forEach(item => {\n      item.label = item.value;\n    });\n    themeOptions.value.forEach(item => {\n      item.label = item.value;\n    });\n    variantOptions.value.forEach(item => {\n      item.label = item.value;\n    });\n  }\n});\n</script>\n"
  },
  {
    "path": "GoEasyDesigner/frontend/src/components/common/IconSelector.vue",
    "content": "<template>\n  <div class=\"icon-selector\">\n    \n    <el-popover\n        placement=\"bottom\"\n        :width=\"800\"\n        trigger=\"click\"\n        v-model:visible=\"popoverVisible\"\n    >\n      <template #reference>\n        <el-input\n            v-model=\"props.modelValue\"\n            :placeholder=\"placeholder\"\n            clearable\n            @clear=\"handleClear\"\n        >\n          <template #prefix v-if=\"props.modelValue\">\n            <i :class=\"props.modelValue\"></i>\n          </template>\n          <template #append>\n            <el-button>\n              <i class=\"fa fa-search\"></i>\n            </el-button>\n          </template>\n        </el-input>\n      </template>\n      \n      <div class=\"icon-list\">\n        <el-input\n            v-model=\"searchText\"\n            placeholder=\"搜索图标\"\n            clearable\n            style=\"margin-bottom: 10px\"\n        >\n          <template #prefix>\n            <i class=\"fa fa-search\"></i>\n          </template>\n        </el-input>\n        \n        <div class=\"icons-container\" ref=\"containerRef\">\n          <div\n              class=\"icons-content\"\n              :style=\"{ height: totalHeight + 'px', position: 'relative' }\"\n          >\n            <div\n                class=\"icons-visible\"\n                :style=\"{\n                  transform: `translateY(${startOffset}px)`,\n                  position: 'absolute',\n                  width: '100%'\n                }\"\n            >\n              <div\n                  v-for=\"icon in visibleIcons\"\n                  :key=\"icon\"\n                  class=\"icon-item\"\n                  @click=\"selectIcon(icon)\"\n              >\n                <i :class=\"icon\"></i>\n                <span class=\"icon-name\">{{ formatIconName(icon) }}</span>\n              </div>\n            </div>\n          </div>\n        </div>\n      </div>\n    </el-popover>\n  </div>\n</template>\n\n<script setup>\nimport { ref, computed, onMounted, onUnmounted } from 'vue'\nimport iconNames from '@/components/boxs/el/TabsTW/fontawesome_free_icon_names.js'\nimport { debounce } from 'lodash-es'\n\nconst props = defineProps({\n  modelValue: {\n    type: String,\n    default: ''\n  },\n  placeholder: {\n    type: String,\n    default: '选择图标'\n  }\n})\n\nconst emit = defineEmits(['update:modelValue'])\nconst searchText = ref('')\nconst allIcons = ref([])\nconst popoverVisible = ref(false)\nconst containerRef = ref(null)\n\n// 虚拟滚动相关参数\nconst itemHeight = 80 // 每个图标项的高度\nconst visibleCount = 40 // 可视区域显示的图标数量\nconst bufferCount = 10 // 上下缓冲的图标数量\nconst scrollTop = ref(0)\n\n// 计算总高度\nconst totalHeight = computed(() => {\n  return filteredIcons.value.length * itemHeight\n})\n\n// 计算起始偏移量\nconst startOffset = computed(() => {\n  const start = Math.floor(scrollTop.value / itemHeight)\n  return start * itemHeight\n})\n\n// 计算当前可见的图标\nconst visibleIcons = computed(() => {\n  const start = Math.floor(scrollTop.value / itemHeight)\n  const startIndex = Math.max(0, start - bufferCount)\n  const endIndex = Math.min(\n    filteredIcons.value.length,\n    start + visibleCount + bufferCount\n  )\n  return filteredIcons.value.slice(startIndex, endIndex)\n})\n\n// 处理滚动事件\nconst handleScroll = debounce(() => {\n  if (containerRef.value) {\n    scrollTop.value = containerRef.value.scrollTop\n  }\n}, 16)\n\n// 在组件挂载时获取所有图标并添加滚动监听\nonMounted(() => {\n  allIcons.value = iconNames\n  console.log('发现图标数量:', allIcons.value.length)\n  \n  if (containerRef.value) {\n    containerRef.value.addEventListener('scroll', handleScroll)\n  }\n})\n\n// 组件卸载时移除滚动监听\nonUnmounted(() => {\n  if (containerRef.value) {\n    containerRef.value.removeEventListener('scroll', handleScroll)\n  }\n})\n\n// 优化的搜索过滤逻辑\nconst filteredIcons = computed(() => {\n  if (!searchText.value) return allIcons.value\n  const searchLower = searchText.value.toLowerCase()\n  return allIcons.value.filter(icon => \n    icon.toLowerCase().includes(searchLower)\n  )\n})\n\n// 选择图标\nconst selectIcon = (iconName) => {\n  emit('update:modelValue', iconName)\n  popoverVisible.value = false\n}\n\n// 清除选择\nconst handleClear = () => {\n  emit('update:modelValue', '')\n  popoverVisible.value = false\n}\n\n// 在 script setup 部分添加 formatIconName 方法\nconst formatIconName = (iconName) => {\n  // 移除所有 fa- 开头的前缀\n  return iconName.split(' ').pop().replace(/^fa-/, '')\n}\n</script>\n\n<style scoped>\n.icon-list {\n  max-height: 400px;\n  overflow: hidden;\n  padding: 10px;\n}\n\n.icons-container {\n  height: 400px;\n  overflow-y: auto;\n  position: relative;\n}\n\n.icons-content {\n  position: relative;\n}\n\n.icons-visible {\n  display: grid;\n  grid-template-columns: repeat(auto-fill, minmax(100px, 1fr));\n  gap: 12px;\n}\n\n.icon-item {\n  display: flex;\n  flex-direction: column;\n  align-items: center;\n  padding: 12px 8px;\n  cursor: pointer;\n  border-radius: 4px;\n  transition: background-color 0.3s;\n  text-align: center;\n  border: 1px solid transparent;\n}\n\n.icon-item:hover {\n  background-color: var(--el-color-primary-light-9);\n  border-color: var(--el-color-primary-light-7);\n}\n\n.icon-name {\n  font-size: 12px;\n  margin-top: 8px;\n  color: var(--el-text-color-secondary);\n  text-overflow: ellipsis;\n  overflow: hidden;\n  white-space: nowrap;\n  width: 100%;\n  text-align: center;\n}\n\n.icon-item i {\n  font-size: 24px;\n  color: var(--el-text-color-primary);\n}\n\n.el-input i.fa {\n  font-size: 14px;\n}\n\n/* 添加滚动条样式 */\n.icon-list::-webkit-scrollbar {\n  width: 6px;\n}\n\n.icon-list::-webkit-scrollbar-thumb {\n  background-color: var(--el-border-color-lighter);\n  border-radius: 3px;\n}\n\n.icon-list::-webkit-scrollbar-track {\n  background-color: transparent;\n}\n\n/* 响应式布局调整 */\n@media screen and (max-width: 768px) {\n  .icons-container {\n    grid-template-columns: repeat(auto-fill, minmax(80px, 1fr));\n    gap: 8px;\n  }\n\n  .icon-item {\n    padding: 8px 4px;\n  }\n\n  .icon-item i {\n    font-size: 20px;\n  }\n}\n</style> "
  },
  {
    "path": "GoEasyDesigner/frontend/src/components/designer/PreviewDialog.vue",
    "content": "<template>\n    <div v-show=\"modelValue\" class=\"fixed inset-0 z-[9999]\">\n        <!-- 背景遮罩 -->\n        <div class=\"absolute inset-0 bg-black/30\" @click=\"handleClose\"></div>\n\n        <!-- Windows 10 风格对话框 -->\n        <div class=\"absolute bg-white rounded-lg shadow-xl flex flex-col\" :style=\"dialogStyle\" ref=\"dialogRef\">\n            <!-- 标题栏 -->\n            <div class=\"flex items-center justify-between h-10 px-4 bg-[#2b579a] text-white rounded-t-lg select-none cursor-move\"\n                @mousedown=\"startDrag\">\n                <div class=\"flex items-center space-x-2\">\n                    <i class=\"fas fa-window-maximize text-sm\"></i>\n                    <span class=\"text-sm font-medium\">{{ $t('app.preview') }}</span>\n                </div>\n                <div class=\"flex items-center space-x-2\">\n                    <button @click.stop=\"handleMinimize\" class=\"p-2 hover:bg-blue-700 transition-colors\">\n                        <i class=\"fas fa-window-minimize text-sm\"></i>\n                    </button>\n                    <button @click.stop=\"handleMaximize\" class=\"p-2 hover:bg-blue-700 transition-colors\">\n                        <i class=\"fas\" :class=\"isMaximized ? 'fa-window-restore' : 'fa-window-maximize'\"></i>\n                    </button>\n                    <button @click.stop=\"handleClose\" class=\"p-2 transition-colors rounded\">\n                        <i class=\"fas fa-times text-sm\"></i>\n                    </button>\n                </div>\n            </div>\n\n            <!-- 内容区域 -->\n            <div class=\"overflow-hidden\" :style=\"contentStyle\">\n                <component is=\"RenderDesignComponentWin\" v-for=\"(item, index) in store.list\" :key=\"index\" :item=\"item\" />\n            </div>\n        </div>\n    </div>\n    <link rel=\"stylesheet\" href=\"/font-awesome.css\" />\n</template>\n\n<script setup>\nimport { ref, defineProps, defineEmits, computed, onMounted, onUnmounted } from 'vue'\nimport { useAppStore } from '@/stores/appStore'\n\nconst store = useAppStore()\n\nconst props = defineProps({\n    modelValue: {\n        type: Boolean,\n        default: false\n    }\n})\n\nconst emit = defineEmits(['update:modelValue'])\nconst dialogRef = ref(null)\nconst isMaximized = ref(false)\nconst position = ref({ x: 0, y: 0 })\nconst isDragging = ref(false)\nconst dragOffset = ref({ x: 0, y: 0 })\nconst width = ref(store.list[0].width)\nconst height = ref(store.list[0].height)\n\n// 计算对话框样式\nconst dialogStyle = computed(() => {\n    if (isMaximized.value) {\n        return {\n            width: '100%',\n            height: '100%',\n            top: '0',\n            left: '0',\n            transform: 'none'\n        }\n    }\n\n    return {\n        width: width.value + 'px',\n        height: height.value + 'px',\n        top: `${position.value.y}px`,\n        left: `${position.value.x}px`,\n        transform: isDragging.value ? 'none' : undefined\n    }\n})\n\nconst contentStyle = computed(() => {\n    //如果包含了%或者v或者auto那么就转换成px\n    if (typeof height.value === 'string' && (height.value.includes('%') || height.value.includes('v') || height.value === 'auto')) {\n        height.value = 600\n    }\n    if (typeof width.value === 'string' && (width.value.includes('%') || width.value.includes('v') || width.value === 'auto')) {\n        width.value = 800\n    }\n\n    return {\n        height: height.value+\"px\",\n        width: width.value+\"px\",\n        position: \"relative\"\n    }\n})\n\n// 关闭窗口\nconst handleClose = () => {\n    emit('update:modelValue', false)\n}\n\n// 最小化窗口\nconst handleMinimize = () => {\n    const dialog = dialogRef.value\n    dialog.style.transform = 'scale(0.1) translateY(1000px)'\n    dialog.style.opacity = '0'\n    setTimeout(() => {\n        dialog.style.transform = ''\n        dialog.style.opacity = ''\n        emit('update:modelValue', false)\n    }, 300)\n}\n\n// 最大化/还原窗口\nconst handleMaximize = () => {\n    if (!isMaximized.value) {\n        position.value = {\n            x: dialogRef.value.offsetLeft,\n            y: dialogRef.value.offsetTop\n        }\n    }\n    isMaximized.value = !isMaximized.value\n}\n\n// 开始拖拽\nconst startDrag = (e) => {\n    if (isMaximized.value || e.target.closest('button')) return\n\n    isDragging.value = true\n    const rect = dialogRef.value.getBoundingClientRect()\n    dragOffset.value = {\n        x: e.clientX - rect.left,\n        y: e.clientY - rect.top\n    }\n\n    document.body.style.cursor = 'move'\n    e.preventDefault()\n}\n\n// 拖拽中\nconst drag = (e) => {\n    if (!isDragging.value) return\n\n    e.preventDefault()\n\n    const newX = e.clientX - dragOffset.value.x\n    const newY = e.clientY - dragOffset.value.y\n\n    const windowWidth = window.innerWidth\n    const windowHeight = window.innerHeight\n    const dialogWidth = dialogRef.value.offsetWidth\n    const dialogHeight = dialogRef.value.offsetHeight\n\n    const maxX = windowWidth - Math.min(dialogWidth, 10)\n    const maxY = windowHeight - Math.min(dialogHeight, 10)\n\n    position.value = {\n        x: Math.min(Math.max(-10, newX), maxX),\n        y: Math.min(Math.max(-10, newY), maxY)\n    }\n}\n\n// 结束拖拽\nconst stopDrag = () => {\n    isDragging.value = false\n    document.body.style.cursor = ''\n}\n\n// 监听全局事件\nonMounted(() => {\n    document.addEventListener('mousemove', drag)\n    document.addEventListener('mouseup', stopDrag)\n\n    // 初始位置居中\n    if (dialogRef.value) {\n        const windowWidth = window.innerWidth\n        const windowHeight = window.innerHeight\n        const dialogWidth = dialogRef.value.offsetWidth\n        const dialogHeight = dialogRef.value.offsetHeight\n\n        position.value = {\n            x: (windowWidth - dialogWidth) / 2,\n            y: (windowHeight - dialogHeight) / 2\n        }\n    }\n\n    width.value = store.list[0].width\n    height.value = store.list[0].height\n})\n\nonUnmounted(() => {\n    document.removeEventListener('mousemove', drag)\n    document.removeEventListener('mouseup', stopDrag)\n})\n</script>\n\n<style scoped>\n.absolute {\n    transition: transform 0.3s ease, opacity 0.3s ease, width 0.2s ease, height 0.2s ease;\n    will-change: transform, opacity, width, height, top, left;\n}\n\n.absolute:not([style*=\"transform: none\"]) {\n    transition: none;\n}\n\n/* 禁用按钮拖动时的文本选择 */\nbutton {\n    -webkit-user-select: none;\n    -moz-user-select: none;\n    -ms-user-select: none;\n    user-select: none;\n    outline: none;\n}\n\nbutton:hover {\n    opacity: 0.9;\n}\n\nbutton:active {\n    opacity: 0.7;\n}\n\n/* 内容区域滚动条样式 */\n.overflow-auto::-webkit-scrollbar {\n    width: 8px;\n    height: 8px;\n}\n\n.overflow-auto::-webkit-scrollbar-track {\n    background: #f1f1f1;\n    border-radius: 4px;\n}\n\n.overflow-auto::-webkit-scrollbar-thumb {\n    background: #888;\n    border-radius: 4px;\n}\n\n.overflow-auto::-webkit-scrollbar-thumb:hover {\n    background: #555;\n}\n</style>"
  },
  {
    "path": "GoEasyDesigner/frontend/src/components/designer/header/ToolBtn.vue",
    "content": "<template>\n  <t-space size=\"4px\">\n\n    <t-button block theme=\"default\" variant=\"outline\">新建\n      <template #icon>\n        <sneer-icon/>\n      </template>\n    </t-button>\n    <t-button block theme=\"default\" variant=\"outline\">打开\n      <template #icon>\n        <folder-open-icon/>\n      </template>\n    </t-button>\n    <t-button block theme=\"default\" variant=\"outline\">保存\n      <template #icon>\n        <save-icon/>\n      </template>\n    </t-button>\n    <t-button block theme=\"default\" variant=\"outline\">运行\n      <template #icon>\n        <chevron-right-circle-icon/>\n      </template>\n    </t-button>\n    <t-button block theme=\"default\" variant=\"outline\">编译\n      <template #icon>\n        <caret-right-small-icon/>\n      </template>\n    </t-button>\n    <t-button block theme=\"default\" variant=\"outline\">帮助\n      <template #icon>\n        <chat-bubble-help-icon/>\n      </template>\n    </t-button>\n    <t-button block theme=\"default\" variant=\"outline\">下载客户端\n      <template #icon>\n        <download-icon/>\n      </template>\n    </t-button>\n  </t-space>\n\n</template>\n<script setup>\nimport {\n  AddIcon, CaretRightSmallIcon, ChatBubbleHelpIcon,\n  ChevronRightCircleIcon,\n  DownloadIcon,\n  FolderOpenIcon,\n  OpenMouthIcon,\n  SaveIcon,\n  SneerIcon\n} from \"tdesign-icons-vue-next\";\n</script>"
  },
  {
    "path": "GoEasyDesigner/frontend/src/components/designer/left/ComponentLeft.vue",
    "content": "<script setup>\nimport TreeSelectBox from \"./TreeSelectBox.vue\";\nimport PropertyTable from \"./PropertyTable.vue\";\nimport {defineProps} from \"vue\";\nconst props = defineProps(['store']);\n\n</script>\n<template>\n  <div style=\"display: grid;\n        height: 100%;\n        grid-template-areas: 's-top'\n        's-main'\n        's-bottom';\n        grid-template-rows: auto 8fr auto;\n        overflow: auto;\n        gap: 8px;\n        padding: 8px;\n      \">\n    <div style=\"\n    grid-area: s-top;\"\n    >\n      <TreeSelectBox :store=\"props.store\"/>\n    </div>\n    <div style=\"grid-area: s-main;\n        overflow: auto;\">\n      <PropertyTable :store=\"props.store\"/>\n    </div>\n    <div id=\"事件选择器\" style=\"grid-area: s-bottom;\">\n\n    </div>\n  </div>\n</template>"
  },
  {
    "path": "GoEasyDesigner/frontend/src/components/designer/left/PropertyTable.vue",
    "content": "\n<template>\n  <component :is=\"props.store.当前组件名称2()\"\n             v-if=\"props.store.当前拖拽组件数据 != undefined\"\n             :item=\"props.store.当前拖拽组件数据\"\n  />\n</template>\n<script setup>\nimport {defineProps} from \"vue\";\nconst props = defineProps(['store']);\n\n</script>"
  },
  {
    "path": "GoEasyDesigner/frontend/src/components/designer/left/TreeSelectBox.vue",
    "content": "\n<template>\n  <el-tree-select\n      v-if=\"props.store\"\n      v-model=\"props.store.当前组件索引\"\n      :data=\"props.store.组件列表tree\"\n      default-expand-all\n      style=\"width: 100%;\"\n      @node-click=\"data=>组件树选中(data)\"\n  />\n\n</template>\n<script setup>\nimport {defineProps} from \"vue\";\nconst props = defineProps(['store']);\nfunction 组件树选中(data) {\n  props.store.当前拖拽组件数据 = props.store.组件通过id查找结构(data.id)\n  console.log('组件树选中', props.store.当前拖拽组件数据)\n  props.store.当前组件索引 = props.store.当前拖拽组件数据.id\n}\n\n</script>"
  },
  {
    "path": "GoEasyDesigner/frontend/src/components/designer/public/DraggableDivider.vue",
    "content": "<!-- DraggableDivider.vue -->\n<template>\n  <div :style=\"getPosStyle()\"\n       class=\"width-draggable-icon\"\n       @mousedown=\"startDrag\"\n  ></div>\n</template>\n\n<script setup>\nimport {ref, onMounted} from \"vue\";\n\nlet isDragging = false;\nlet startX, startY,startWidth,startHeight;\nconst targetElement = ref(null);\nconst props = defineProps({\n  targetElementId: {\n    type: String,\n    required: true,\n  },\n  direction: {\n    type: String,\n    default: 'right',\n  },\n});\nconst left = ref(0)\nconst top = ref(0)\nconst right = ref(0)\nconst bottom = ref(0)\n\nfunction getPosStyle() {\n\n  let style = {\n    height: '100%',\n    backgroundColor: 'transparent',\n    cursor: 'col-resize',\n    position: 'absolute',\n    width: '4px',\n    zIndex: 99\n  }\n  if (props.direction == \"top\") {\n    style.top = \"-2px\"\n    style.left = 0\n    style.width = \"100%\"\n    style.height = \"4px\"\n    style.cursor = \"row-resize\"\n  }\n  if (props.direction == \"right\") {\n    style.top = 0\n    style.right = \"-2px\"\n  }\n  if (props.direction == \"left\") {\n    style.top = 0\n    style.left = \"-2px\"\n  }\n  if (props.direction == \"bottom\") {\n    style.left = 0\n    style.buttom = \"-2px\"\n    style.width = \"100%\"\n    style.height = \"4px\"\n    style.cursor = \"row-resize\"\n  }\n  // console.log(\"props.direction\", props.direction,style)\n  return style\n}\n\n\nonMounted(() => {\n  targetElement.value = document.getElementById(props.targetElementId);\n  if (!targetElement.value) {\n    console.error(`Element with id '${props.targetElementId}' not found.`);\n  }\n});\n\n\nconst startDrag = function (e) {\n  e.preventDefault();\n  isDragging = true;\n  startX = e.clientX;\n  startY = e.clientY;\n  startWidth = parseInt(targetElement.value.clientWidth);\n  startHeight = parseInt(targetElement.value.clientHeight);\n\n  document.addEventListener('mousemove', handleDrag);\n  document.addEventListener('mouseup', stopDrag);\n}\n\nconst handleDrag = function (e) {\n  if (isDragging) {\n    if (props.direction == \"right\") {\n      const newWidth = startWidth + e.clientX - startX;\n      targetElement.value.style.width = newWidth + 'px';\n    }\n    if (props.direction == \"left\") {\n      const newWidth = startWidth - (e.clientX - startX);\n      targetElement.value.style.width = newWidth + 'px';\n    }\n    if (props.direction == \"top\") {\n      const newHeight = startHeight - (e.clientY - startY);\n      targetElement.value.style.height = newHeight + 'px';\n    }\n    if (props.direction == \"bottom\") {\n      const newHeight = startHeight + (e.clientY - startY);\n      targetElement.value.style.height = newHeight + 'px';\n    }\n    window.dispatchEvent(new Event('resize'));\n\n  }\n}\n\nconst stopDrag = function () {\n  isDragging = false;\n  document.removeEventListener('mousemove', handleDrag);\n  document.removeEventListener('mouseup', stopDrag);\n  //触发 resize\n\n}\n</script>\n"
  },
  {
    "path": "GoEasyDesigner/frontend/src/components/designer/public/WindowAttr.vue",
    "content": "<template>\n  <div class=\"属性表格\">\n    <el-form\n        label-position=\"left\"\n        label-width=\"100px\"\n        style=\"max-width: 460px\"\n    >\n      <component is=\"common-properties\" :item=\"item\"/>\n      <el-form-item  :label=\"$t('attr.title')\">\n        <el-input v-model=\"props.item.text\"/>\n      </el-form-item>\n    </el-form>\n  </div>\n\n  <component is=\"common-event-component\" :item=\"props.item\"  :eventName=\"eventName\"/>\n</template>\n<script setup>\nimport {ref, defineProps, defineEmits} from \"vue\";\n\nconst emits = defineEmits([\"添加事件被选择\"]); // 声明接受的事件\nconst props = defineProps(['item']);\n\n\nlet 事件索引 = ref(0)\n\n\nlet eventName = ref([\n  {\"label\": \"创建完毕\", \"value\": \"created\"},\n  {\"label\": \"被单击\", \"value\": \"click\"},\n  {\"label\": \"鼠标左键被按下\", \"value\": \"mousedown\"},\n  {\"label\": \"鼠标左键被放开\", \"value\": \"mouseup\"},\n  {\"label\": \"被双击\", \"value\": \"dblclick\"},\n  {\"label\": \"鼠标右键被按下\", \"value\": \"contextmenu\"},\n  {\"label\": \"鼠标位置被移动\", \"value\": \"mousemove\"},\n  {\"label\": \"获得焦点\", \"value\": \"focus\"},\n  {\"label\": \"失去焦点\", \"value\": \"blur\"},\n  {\"label\": \"按下某键\", \"value\": \"keydown\"},\n  {\"label\": \"放开某键\", \"value\": \"keyup\"},\n  {\"label\": \"滚轮被滚动\", \"value\": \"mousewheel\"}\n])\n\n\n</script>"
  },
  {
    "path": "GoEasyDesigner/frontend/src/components/designer/public/common-event-component.vue",
    "content": "<template>\n  <el-select ref=\"select\" v-model=\"当前选择的事件名称\"\n             class=\"\"\n             style=\"width: 100%; padding: 0px 6px 10px 6px;\"\n             @change=\"组件事件被选择\">\n\n    <el-option\n        :label=\"t('attr.addEvent')\"\n        :value=\"0\"\n    >\n      {{ $t('attr.addEvent') }}\n    </el-option>\n    <el-option\n        v-for=\"(item, index) in props.eventName\"\n        :key=\"index\"\n        :label=\"item.label\"\n        :value=\"item.value\"\n    >\n      <span style=\"float: left\">{{ item.label }}</span>\n      <el-button\n          v-if=\"props.item.hasOwnProperty(`event_${item.value}`)\" size=\"small\"\n          style=\"float: right; margin-top: 4px\"\n          @click.stop=\"delete props.item[`event_${item.value}`]\"\n      >删除事件\n      </el-button>\n    </el-option>\n  </el-select>\n\n</template>\n<script setup>\nimport {ref, defineProps, defineEmits, onMounted, onBeforeUnmount} from \"vue\";\n\nconst t = i18n.global.t\n\nconst emits = defineEmits([\"添加事件被选择\"]); // 声明接受的事件\nconst props = defineProps(['item', 'eventName']);\nimport {useAppStore} from '@/stores/appStore'\nimport i18n from \"../../../i18n\";\n\nconst store = useAppStore()\nlet 当前选择的事件名称 = ref('在此处选择加入事件处理函数')\n当前选择的事件名称.value = t('attr.addEvent')\n\nconst 组件事件被选择 = function () {\n  // 这里需要帮助 我需要获取到 当前选择的 ext_data   {\"label\": \"自定义事件\", \"value\": \"自定义事件\", \"ext_data\": \"自定义事件(事件名称,事件数据)\"},\n  // 获取当前选择事件的 ext_data\n  if (当前选择的事件名称.value === 0) {\n    return\n  }\n\n  const nowSelectItem = props.eventName.find(item => item.value === 当前选择的事件名称.value);\n  const extData = nowSelectItem ? nowSelectItem.ext_data : null;\n  const value = nowSelectItem ? nowSelectItem.value : null;\n\n  emits(\"添加事件被选择\", 当前选择的事件名称.value, props.item); //通知父组件处理\n\n  //驼峰\n  let 函数名称;\n  if (i18n.global.locale.value === \"简体中文\") {\n    函数名称 = props.item.name + nowSelectItem.label\n  } else {\n    let 新事件名称 = nowSelectItem.value.toLowerCase().replace(/\\b(\\w)|\\s(\\w)/g, function (m) {\n      return m.toUpperCase();\n    });\n    函数名称 = props.item.name + 新事件名称\n  }\n\n  store.添加事件被选择(nowSelectItem.value, 函数名称, props.item, extData) // 添加函数到代码中\n  当前选择的事件名称.value = 0\n\n  console.log(\"组件事件被选择=\", props.item.name, '事件', 当前选择的事件名称.value, 'value', value, 'ext_data', extData, JSON.stringify(props.item, null, 2));\n\n}\nstore.全局_事件名称列表 = props.eventName\n\n\nonMounted(() => {\n  if (localStorage.getItem(\"locale\") === \"English\") {\n    try {\n      props.eventName.forEach((item) => {\n        item.label = item.value;\n      });\n    }catch (e) {\n      console.log(\"e\", e)\n    }\n\n  }\n});\n\n</script>"
  },
  {
    "path": "GoEasyDesigner/frontend/src/components/designer/public/common-properties.vue",
    "content": "<template>\n  <el-form-item :label=\"$t('attr.name')\">\n    <el-input v-model=\"props.item.name\"/>\n    <div v-if=\"是否存在\" style=\"color:red\">名称已存在</div>\n  </el-form-item>\n  <el-form-item :label=\"$t('attr.top')\">\n    <el-autocomplete\n        v-model=\"props.item.top\"\n        :fetch-suggestions=\"querySearch\"\n        class=\"inline-input w-50\"\n        clearable\n        placeholder=\"单位:1px 100% auto\"\n        @select=\"handleSelect\"\n    />\n  </el-form-item>\n  <el-form-item :label=\"$t('attr.left')\">\n    <el-autocomplete\n        v-model=\"props.item.left\"\n        :fetch-suggestions=\"querySearch\"\n        class=\"inline-input w-50\"\n        clearable\n        placeholder=\"单位:1px 100% auto\"\n        @select=\"handleSelect\"\n    />\n  </el-form-item>\n  <el-form-item :label=\"$t('attr.right')\">\n    <el-autocomplete\n        v-model=\"props.item.right\"\n        :fetch-suggestions=\"querySearch\"\n        class=\"inline-input w-50\"\n        clearable\n        placeholder=\"单位:1px 100% auto\"\n        @select=\"handleSelect\"\n    />\n  </el-form-item>\n  <el-form-item :label=\"$t('attr.bottom')\">\n    <el-autocomplete\n        v-model=\"props.item.bottom\"\n        :fetch-suggestions=\"querySearch\"\n        class=\"inline-input w-50\"\n        clearable\n        placeholder=\"单位:1px 100% auto\"\n        @select=\"handleSelect\"\n    />\n  </el-form-item>\n  <el-form-item :label=\"$t('attr.width')\">\n    <el-autocomplete\n        v-model=\"props.item.width\"\n        :fetch-suggestions=\"querySearch\"\n        class=\"inline-input w-50\"\n        clearable\n        placeholder=\"单位:1px 100% auto\"\n        @select=\"handleSelect\"\n    />\n  </el-form-item>\n  <el-form-item :label=\"$t('attr.height')\">\n    <el-autocomplete\n        v-model=\"props.item.height\"\n        :fetch-suggestions=\"querySearch\"\n        class=\"inline-input w-50\"\n        clearable\n        placeholder=\"单位:1px 100% auto\"\n        @select=\"handleSelect\"\n    />\n  </el-form-item>\n  <el-form-item :label=\"$t('attr.zIndex')\">\n    <el-input v-model=\"props.item.zIndex\"/>\n  </el-form-item>\n  <el-form-item :label=\"$t('attr.disable')\">\n    <el-switch v-model=\"props.item.disable\"/>\n  </el-form-item>\n  <el-form-item :label=\"$t('attr.visible')\">\n    <el-switch v-model=\"props.item.visible\"/>\n  </el-form-item>\n  <el-form-item :label=\"$t('attr.backgroundColor')\">\n    <el-color-picker v-model=\"props.item.background\" show-alpha\n                     @active-change=\"val => props.item.background = val\"/>\n  </el-form-item>\n  <el-form-item :label=\"$t('attr.backgroundImage')\">\n    <input ref=\"fileInput\" type=\"file\" style=\"display: none\" @change=\"handleFileChange\"/>\n    <!--    <el-input v-model=\"props.item.图片\"/>-->\n    <el-button @click=\"triggerFileInput\">{{ $t('app.selectImage') }}</el-button>\n    <el-button v-show=\"props.item.图片\" @click=\"clearImage\">{{ $t('app.clear') }}</el-button>\n  </el-form-item>\n  <el-form-item label=\"图片平铺方式\" v-show=\"props.item.图片\">\n    <el-select v-model=\"props.item.backgroundRepeat\" style=\"width: 100%\">\n      <el-option\n          v-for=\"(item, index) in 图片平铺方式选项\"\n          :key=\"item\"\n          :label=\"item.label\"\n          :value=\"item.value\"\n      />\n    </el-select>\n  </el-form-item>\n  <el-form-item label=\"图片固定方式\" v-show=\"props.item.图片\">\n    <el-select v-model=\"props.item.backgroundAttachment\" style=\"width: 100%\">\n      <el-option\n          v-for=\"(item, index) in 图片固定选项\"\n          :key=\"item\"\n          :label=\"item.label\"\n          :value=\"item.value\"\n      />\n    </el-select>\n  </el-form-item>\n  <el-form-item label=\"图片位置\" v-show=\"props.item.图片\">\n    <el-select v-model=\"props.item.backgroundPosition\" style=\"width: 100%\">\n      <el-option\n          v-for=\"(item, index) in 图片位置选项\"\n          :key=\"item\"\n          :label=\"item.label\"\n          :value=\"item.value\"\n      />\n    </el-select>\n  </el-form-item>\n  <el-form-item label=\"图片size\" v-show=\"props.item.图片\">\n    <el-select v-model=\"props.item.backgroundSize\" style=\"width: 100%\">\n      <el-option\n          v-for=\"(item, index) in 图片size选项\"\n          :key=\"item\"\n          :label=\"item.label\"\n          :value=\"item.value\"\n      />\n    </el-select>\n  </el-form-item>\n\n  <el-form-item :label=\"$t('attr.border')\">\n    <el-input v-model=\"props.item.border\"/>\n  </el-form-item>\n  <el-form-item :label=\"$t('attr.fontSize')\">\n    <el-input v-model=\"props.item.fontSize\"/>\n  </el-form-item>\n\n  <el-form-item :label=\"$t('attr.yAxisRollingMode')\">\n    <el-select v-model=\"props.item.overflowY\" style=\"width: 100%\">\n      <el-option\n          v-for=\"(item, index) in overflowY\"\n          :key=\"item\"\n          :label=\"item.label\"\n          :value=\"item.value\"\n      />\n    </el-select>\n  </el-form-item>\n  <el-form-item :label=\"$t('attr.xAxisRollingMode')\">\n    <el-select v-model=\"props.item.overflowX\" style=\"width: 100%\">\n      <el-option\n          v-for=\"(item, index) in overflowX\"\n          :key=\"item\"\n          :label=\"item.label\"\n          :value=\"item.value\"\n      />\n    </el-select>\n  </el-form-item>\n\n</template>\n\n<script setup>\nimport {defineProps, onMounted, ref, watch} from \"vue\";\nimport {useAppStore} from '@/stores/appStore'\n\nconst props = defineProps(['item']);\n\nconst store = useAppStore()\n\n\nconst handleSelect = (item) => {\n  console.log(item)\n}\n\n\nconst restaurants = ref([])\nonMounted(() => {\n  restaurants.value = loadAll()\n})\nconst querySearch = (queryString, cb) => {\n  const results = queryString\n      ? restaurants.value.filter(createFilter(queryString))\n      : restaurants.value\n  cb(results)\n}\nconst createFilter = (queryString) => {\n  return (restaurant) => {\n    return (\n        restaurant.value.toLowerCase().indexOf(queryString.toLowerCase()) === 0\n    )\n  }\n}\nconst loadAll = () => {\n  return [\n    {value: '100%'},\n    {value: '0'},\n    {value: '100'},\n    {value: '200'},\n    {value: '300'},\n    {value: 'inherit'},\n    {value: '100vw'},\n    {value: '100vh'},\n  ]\n}\nlet 图片平铺方式选项 = ref([\n  {\"label\": \"重复\", \"value\": \"repeat\"},\n  {\"label\": \"横向重复\", \"value\": \"repeat-x\"},\n  {\"label\": \"纵向重复\", \"value\": \"repeat-y\"},\n  {\"label\": \"不重复\", \"value\": \"no-repeat\"},\n]);\nlet 图片位置选项 = ref([\n  {\"label\": \"默认\", \"value\": \"0% 0%\"},\n  {\"label\": \"左上\", \"value\": \"left top\"},\n  {\"label\": \"居中上\", \"value\": \"center top\"},\n  {\"label\": \"右上\", \"value\": \"right top\"},\n  {\"label\": \"左中\", \"value\": \"left center\"},\n  {\"label\": \"居中\", \"value\": \"center center\"},\n  {\"label\": \"右中\", \"value\": \"right center\"},\n  {\"label\": \"左下\", \"value\": \"left bottom\"},\n  {\"label\": \"居中下\", \"value\": \"center bottom\"},\n  {\"label\": \"右下\", \"value\": \"right bottom\"},\n]);\nlet 图片size选项 = ref([\n  {\"label\": \"默认\", \"value\": \"auto\"},\n  {\"label\": \"覆盖\", \"value\": \"cover\"},\n  {\"label\": \"包含\", \"value\": \"contain\"},\n  {\"label\": \"50% 50%\", \"value\": \"50% 50%\"},\n  {\"label\": \"100% 100%\", \"value\": \"100% 100%\"},\n]);\nlet 图片固定选项 = ref([\n  {\"label\": \"滚动\", \"value\": \"scroll\"},\n  {\"label\": \"固定\", \"value\": \"fixed\"},\n  {\"label\": \"本地\", \"value\": \"local\"},\n]);\n\nlet overflowY = ref([\n  {\"label\": \"超出显示\", \"value\": \"visible\"},\n  {\"label\": \"超出隐藏\", \"value\": \"hidden\"},\n  {\"label\": \"滚动显示\", \"value\": \"scroll\"},\n  {\"label\": \"自动适配\", \"value\": \"auto\"},\n]);\nlet overflowX = ref([\n  {\"label\": \"超出显示\", \"value\": \"visible\"},\n  {\"label\": \"超出隐藏\", \"value\": \"hidden\"},\n  {\"label\": \"滚动显示\", \"value\": \"scroll\"},\n  {\"label\": \"自动适配\", \"value\": \"auto\"},\n]);\nconst handleFileChange = (event) => {\n  const file = event.target.files[0];\n\n  if (file) {\n    // 使用FileReader读取图片\n    const reader = new FileReader();\n\n    reader.onload = (e) => {\n      const base64String = e.target.result;\n      // 在这里你可以使用 base64String 进行其他操作，或者将它存储在你需要的地方\n      props.item.图片 = base64String\n      console.log(base64String);\n    };\n    reader.readAsDataURL(file);\n  }\n}\n\nconst fileInput = ref('');\nconst triggerFileInput = () => {\n  fileInput.value.click();\n}\nconst clearImage = () => {\n  // 清除选择的图片\n  props.item.图片 = undefined;\n}\n\n\nonMounted(() => {\n  if (localStorage.getItem(\"locale\") === \"English\") {\n    overflowX.value.forEach((item) => {\n      item.label = item.value;\n    });\n    overflowY.value.forEach((item) => {\n      item.label = item.value;\n    });\n    图片固定选项.value.forEach((item) => {\n      item.label = item.value;\n    });\n    图片size选项.value.forEach((item) => {\n      item.label = item.value;\n    });\n    图片位置选项.value.forEach((item) => {\n      item.label = item.value;\n    });\n    图片平铺方式选项.value.forEach((item) => {\n      item.label = item.value;\n    });\n  }\n});\n\n// watch(()=>props.item.name, (newVal, oldVal) => {\n//   if (newVal !== oldVal) {\n//     //检查新值是否已经存在\n//     let 是否存在 = store.递归查找名称(store.list, newVal)\n//     console.log(\"是否存在\", 是否存在,newVal)\n//\n//     console.log(\"刷新\")\n//     store.取组件列表()\n//\n//\n//   }\n// });\n\nconst 是否存在 = ref(false);\nlet n = store.递归查找名称数量(store.list, props.item.name);\n是否存在.value = n >= 2;\n\nwatch(() => props.item.name, (newVal, oldVal) => {\n  if (newVal !== oldVal) {\n    let n = store.递归查找名称数量(store.list, newVal);\n    是否存在.value = n >= 2;\n    console.log(\"是否存在\", 是否存在.value, newVal);\n    console.log(\"刷新\");\n    store.取组件列表();\n  }\n});\n\n</script>\n\n<style>\n.el-form-item__label {\n  width: inherit !important;\n  min-width: 100px !important;\n\n}\n</style>"
  },
  {
    "path": "GoEasyDesigner/frontend/src/components/designer/public/代码编辑器.vue",
    "content": "<template>\n  <vue-monaco-editor\n      theme=\"vs\"\n      :options=\"MONACO_EDITOR_OPTIONS\"\n      @mount=\"handleMount\"\n      language=\"javascript\"\n\n  />\n</template>\n<script lang=\"ts\" setup>\nimport {defineExpose, shallowRef} from 'vue'\nimport {useAppStore} from '@/stores/appStore'\n\nconst store = useAppStore()\n\n\nconst MONACO_EDITOR_OPTIONS = {\n  automaticLayout: true,\n  formatOnType: true,\n  formatOnPaste: true,\n  minimap: {\n    enabled: true // 是否启用预览图\n  }, // 预览图设置\n  folding: true, // 是否启用代码折叠\n  // fontSize: 20,\n  // lineHeight: 28,\n  quickSuggestions: \"always\", // 始终显示建议\n  quickSuggestionsDelay: 0, // 延迟显示提示，避免和输入冲突\n\n}\n\n// const code = ref('function hello() {\\n\\talert(\"Hello world!\");\\n}')\nconst editorRef = shallowRef()\n\nconst handleMount = (editor) => {\n  editorRef.value = editor;\n  store.putPosition = putPosition\n};\n\n// 在你的 Vue 组件中的某个方法中执行搜索和跳转操作\nfunction searchAndJumpToText(searchText) {\n  const editor = editorRef.value; // 获取编辑器实例\n  const model = editor.getModel(); // 获取编辑器的模型\n\n  if (model) {\n    const searchRange = model.getFullModelRange(); // 搜索整个文档范围\n    const match = model.findNextMatch(searchText, searchRange); // 查找匹配文本的位置\n    console.log('match', match)\n    if (match) {\n      const lineNumber = match.range.startLineNumber;\n      editor.revealLineInCenter(lineNumber); // 将匹配的行居中显示\n      editor.setPosition({lineNumber: lineNumber + 2, column: 16});\n    } else {\n      console.log('未找到匹配的文本');\n    }\n  }\n}\n\n\nfunction putPosition(搜索文本) {\n  console.log('========putPosition')\n  // editorRef.value.getAction('editor.action.formatDocument').run()\n  setTimeout(() => {\n    // editorRef.value.trigger('keyboard', 'type', { text: 'hello world' });\n    // editorRef.value.setPosition({ lineNumber: 5, column: 10 });\n    searchAndJumpToText(搜索文本)\n    editorRef.value.focus();\n  }, 100);\n}\n\n// your action\nfunction formatCode() {\n  editorRef.value?.getAction('editor.action.formatDocument').run()\n}\n\ndefineExpose({\n  putPosition,\n});\n</script>"
  },
  {
    "path": "GoEasyDesigner/frontend/src/components/designer/public/支持库.vue",
    "content": "<template>\n  <el-tree\n      :data=\"store.支持库列表\"\n      @node-click=\"handleNodeClick\"/>\n\n</template>\n\n<script setup>\nimport {onBeforeUnmount, onMounted, ref, shallowRef} from 'vue'\n\nimport {useAppStore} from \"@/stores/appStore\";\nimport systemFcDoc from \"@/helpDoc/systemFcDoc.json\";\n\nconst systemFcDocHandle = [];\nsystemFcDoc.forEach(item => {\n  let l = JSON.parse(JSON.stringify(item));\n  const label = item.label;\n  const doc = item.doc;\n  const extractedContent = doc.split(' ')[0];\n  l.label = label + \" \" + extractedContent;\n  systemFcDocHandle.push(l);\n});\n\n// function 提取函数(){\n//   import * as SystemFc from \"@/../wailsjs/runtime\";\n//   const systemFcFunctions = Object.keys(SystemFc).filter(key => key !== \"default\" && key !== \"constructor\");\n//   let systemFcNames = [];\n//   systemFcFunctions.forEach(functionName => {\n//     const functionModule = SystemFc[functionName];\n//     if (typeof functionModule === \"function\") {\n//       let helpText = `SystemFc.${functionName}`;\n//       let argList = [];\n//       const args = functionModule.toString().match(/function[^{]*\\(([^)]*)\\)/)[1].split(\",\");\n//       for (let i = 0; i < args.length; i++) {\n//         argList.push(args[i].trim());\n//       }\n//       let o ={\n//         label: functionName,\n//         help: `${helpText}(${argList.join(\", \")})`,\n//         doc:''\n//       }\n//       systemFcNames.push(o);\n//     }\n//   });\n//   console.log(JSON.stringify(systemFcNames,null,2))\n// }\n//\nconst store = useAppStore()\n\nconst handleNodeClick = (data) => {\n  console.log(data)\n  //检查data是否有doc\n  if (data.doc !== undefined) {\n    store.帮助信息 = `\n方法名：${data.label} <br>\n调用格式：${data.help}<br>\n详细帮助：${data.doc} <br>`\n  } else {\n    store.帮助信息 = data.help\n  }\n}\nstore.支持库列表 = [\n  {\n    label: 'wails Support library (JS)',\n    help: 'import * as systemFc from \"@/../wailsjs/runtime\";',\n    children: [\n      {\n        label: 'systemFc',\n        help: 'import * as systemFc from \"@/../wailsjs/runtime\";',\n        children: systemFcDocHandle\n      }\n    ]\n  },\n  {\n    label: '易函数(Goefun)中文函数支持库 (GO)',\n    help: '打开 https://github.com/duolabmeng6/goefun 学习并使用 该库可以用于app.go代码的编码 ，它提供了强大而易于使用的函数，它完整封装了易语言核心支持库的所有功能，同时提供简单易用的函数。',\n  },\n]\nonMounted(() => {\n\n})\n\n</script>"
  },
  {
    "path": "GoEasyDesigner/frontend/src/components/designer/public/新建项目对话框.vue",
    "content": "<template>\n  <el-dialog\n      title=\"创建项目\"\n      width=\"50%\"\n  >\n    <el-form label-position=\"top\"\n             label-width=\"200px\">\n      <el-form-item label=\"选择模板\">\n        <t-select\n            v-model=\"项目URL\"\n            :options=\"options\"\n            placeholder=\"请选择模板项目\"\n        ></t-select>\n\n      </el-form-item>\n      <el-form-item label=\"模板项目地址\">\n        <el-input v-model=\"项目URL\"/>\n      </el-form-item>\n      <el-form-item label=\"GitHub镜像加速\">\n        <t-select\n            v-model=\"GitHub镜像加速\"\n            :options=\"options2\"\n            placeholder=\"请选择是否需要加速\"\n        ></t-select>\n      </el-form-item>\n      <el-form-item label=\"项目目录\">\n        <el-input v-model=\"当前项目目录\"/>\n        <el-button @click=\"选择目录\">选择目录</el-button>\n      </el-form-item>\n\n      <el-form-item label=\"项目名称\">\n        <el-input v-model=\"项目名称\"/>\n      </el-form-item>\n\n\n    </el-form>\n    <template #footer>\n      <span class=\"dialog-footer\">\n        <el-button @click=\"emits('关闭')\">关闭</el-button>\n        <el-button type=\"primary\" @click=\"创建项目事件\">\n          创建项目\n        </el-button>\n      </span>\n    </template>\n  </el-dialog>\n</template>\n\n<script setup lang=\"jsx\">\nimport {defineEmits, onMounted, ref, watch} from \"vue\";\nimport {useAppStore} from \"@/stores/appStore\";\nimport * as goFc from \"@/../wailsjs/go/main/App\";\nimport {ElMessage} from \"element-plus\";\nimport {appAction} from \"@/action/app\";\n\nconst store = useAppStore();\nconst emits = defineEmits([\"创建项目\", \"关闭\"]);\n\nconst options = [\n  {label: '示例项目', value: \"https://github.com/duolabmeng6/wails-template-vue-go-easy\"},\n  {label: 'electron示例项目', value: \"https://github.com/duolabmeng6/electron-template-easy-desinger\"},\n  {label: '投屏软件示例项目', value: \"https://github.com/duolabmeng6/projection_screen_tv\"},\n  {label: 'ollama管理面板示例项目', value: \"https://github.com/duolabmeng6/ollama_ui\"},\n  {label: '自定义远程Github项目', value: \"\"},\n];\n\nconst options2 = [\n  {label: '不需要', value: \"\"},\n  {label: 'https://mirror.ghproxy.com/', value: \"https://mirror.ghproxy.com/\"},\n];\n\n\nconst 项目URL = ref(options[0].value);\nlet 当前项目目录 = ref(\"\");\nlet 项目目录 = ref(\"\");\nlet 项目名称 = ref(\"myporject\");\nlet GitHub镜像加速 = ref(\"\");\n\nonMounted(async () => {\n  项目目录.value = await goFc.E取当前目录();\n  console.log(\"项目目录\", 项目目录.value)\n  let files = await goFc.E搜索文件(项目目录.value + \"/TemplateProject\", \".zip\")\n  // C:\\eview\\v2\\GoEasyDesigner\\TemplateProject\n//加入到options\n  console.log(\"搜索文件\", files, 项目目录.value + \"/TemplateProject\")\n  if (files) {\n    for (let i = 0; i < files.length; i++) {\n      let label = files[i]\n      //获取文件名\n      let index = label.lastIndexOf(\"/\");\n      label = label.substring(index + 1, label.length);\n      //删除.zip\n      label = \"本地项目-\" + label.replace(\".zip\", \"\")\n\n      options.push({label: label, value: files[i]})\n    }\n  }\n\n\n});\n\n// 我需要项目名称修改了以后 项目目录 为 项目目录/项目名称\nwatch(项目名称, (newName, oldName) => {\n  当前项目目录.value = 项目目录.value + '/' + 项目名称.value;\n});\n\nwatch(项目目录, (newName, oldName) => {\n  当前项目目录.value = 项目目录.value + '/' + 项目名称.value;\n});\n\n\nconst 选择目录 = async () => {\n  const result = await goFc.E打开选择文件夹对话框();\n  console.log(\"选择目录\", result)\n  if (result !== \"\") {\n    项目目录.value = result;\n  }\n};\n\nasync function 创建项目事件() {\n  console.log(\"项目url\", 项目URL.value)\n  console.log(\"项目目录\", 当前项目目录.value)\n  console.log(\"项目名称\", 项目名称.value)\n  if (await goFc.E文件是否存在(当前项目目录.value)) {\n    //弹出饿了么信息框 提示创建失败\n    ElMessage({\n      message: '项目目录已经存在',\n      type: 'error',\n    });\n    return\n  }\n  //检查 项目url是否包含https://\n  let pjurl = 项目URL.value\n  if (项目URL.value.indexOf(\"https://\") !== -1) {\n    pjurl = GitHub镜像加速.value + 项目URL.value\n  }\n\n  let ret = await goFc.E下载github项目(pjurl, 当前项目目录.value)\n  if (ret === 'success') {\n    emits('关闭')\n  } else {\n    //弹出饿了么信息框 提示创建失败\n    ElMessage({\n      message: '项目创建失败' + ret,\n      type: 'error',\n    });\n  }\n  // 搜索 design.json 文件\n  let files = await goFc.E搜索文件(当前项目目录.value, \"design.json\")\n  if (files.length === 0) {\n    //弹出饿了么信息框 提示创建失败\n    ElMessage({\n      message: '项目目录下没有找到design.json文件',\n      type: 'error',\n    });\n    return\n  }\n  console.log(\"搜索文件\", files)\n  appAction._打开文件加载界面(files[0])\n  emits('关闭')\n\n}\n\n</script>\n"
  },
  {
    "path": "GoEasyDesigner/frontend/src/components/designer/public/项目管理.vue",
    "content": "<template>\n  <el-tree :data=\"store.项目文件列表\" @node-click=\"handleNodeClick\"/>\n</template>\n\n<script setup>\nimport {onBeforeUnmount, onMounted, ref, shallowRef} from 'vue'\nimport {E文件枚举, E保存件对话框, E创建函数, E打开文件对话框, E读入文件} from \"../../../../wailsjs/go/main/App\";\n\nimport {useAppStore} from \"@/stores/appStore\";\nimport {ElMessage} from \"element-plus\";\nconst store = useAppStore()\n\nconst handleNodeClick = (data) => {\n  //这里暂时不处理\n  return\n  store.代码编辑器.路径 = data.path\n  E读入文件(data.path ).then((res) => {\n    console.log(res)\n    store.代码编辑器.内容 = res\n    store.选择夹_中间现行选中项= \"1\"\n  })\n}\nstore.项目文件列表 = [\n  {\n    label: 'Level one 1',\n  },\n  {\n    label: 'Level one 1',\n  },\n  {\n    label: 'Level one 1',\n  },\n]\nonMounted(() => {\n  store.项目文件列表 = []\n  if(store.客户端模式 == false){\n    return\n  }\n\n})\n\n</script>"
  },
  {
    "path": "GoEasyDesigner/frontend/src/components/designer/public/项目配置对话框.vue",
    "content": "<template>\n  <el-dialog\n      title=\"项目配置\"\n      width=\"50%\"\n  >\n    <el-form label-position=\"top\"\n             label-width=\"200px\">\n      <el-form-item label=\"项目根目录\">\n        <el-input v-model=\"store.项目信息.项目根目录\"/>\n      </el-form-item>\n      <el-form-item label=\"设计文件路径\">\n        <el-input v-model=\"store.项目信息.设计文件路径\"/>\n      </el-form-item>\n      <el-form-item label=\"窗口事件文件路径\">\n        <el-input v-model=\"store.项目信息.窗口事件文件路径\"/>\n      </el-form-item>\n      <el-form-item label=\"辅助代码文件路径\">\n        <el-input v-model=\"store.项目信息.辅助代码文件路径\"/>\n      </el-form-item>\n      <el-form-item label=\"项目管理目录\">\n        <el-input v-model=\"store.项目信息.项目管理目录\"/>\n      </el-form-item>\n\n      <el-form-item label=\"跳转代码方式 命令行/插件跳转\">\n        <el-switch v-model=\"store.项目信息.命令行方式跳转至IDE\"/>\n      </el-form-item>\n\n      <el-form-item v-show=\"!store.项目信息.命令行方式跳转至IDE\" label=\"IDE插件地址\">\n        <el-input v-model=\"store.项目信息.IDE插件地址\"/>\n      </el-form-item>\n\n      <el-form-item v-show=\"store.项目信息.命令行方式跳转至IDE\" label=\"选择IDE\">\n        <el-select v-show=\"store.项目信息.命令行方式跳转至IDE\" v-model=\"store.项目信息.选择的IDE\" placeholder=\"请选择IDE\">\n          <el-option label=\"VSCode\" value=\"vscode\" />\n          <el-option label=\"Goland\" value=\"goland\" />\n          <el-option label=\"WebStorm\" value=\"webstorm\" />\n        </el-select>\n      </el-form-item>\n\n      <el-form-item v-show=\"!store.项目信息.命令行方式跳转至IDE\" label=\"跳转IDE代码成功后最小化窗口\">\n        <el-switch v-model=\"store.项目信息.双击事件成功后最小化窗口\"/>\n      </el-form-item>\n\n\n    </el-form>\n    <template #footer>\n      <span class=\"dialog-footer\">\n        <el-button @click=\"emits('关闭')\">关闭</el-button>\n        <el-button type=\"primary\" @click=\"emits('确定')\">\n          保存\n        </el-button>\n      </span>\n    </template>\n  </el-dialog>\n</template>\n\n<script setup>\nimport {useAppStore} from \"@/stores/appStore\";\n\nconst store = useAppStore();\nconst emits = defineEmits([\"确定\",\"关闭\"]);\n\n</script>\n"
  },
  {
    "path": "GoEasyDesigner/frontend/src/helpDoc/systemFcDoc.json",
    "content": "[\n    {\n        \"label\": \"BrowserOpenURL\",\n        \"help\": \"systemFc.BrowserOpenURL(url)\",\n        \"doc\": \"浏览器打开URL 在系统默认浏览器打开给定的 URL。\"\n    },\n    {\n        \"label\": \"ClipboardGetText\",\n        \"help\": \"systemFc.ClipboardGetText()\",\n        \"doc\": \"剪贴板获取文本 从剪切板读取当前存储的文本。\"\n    },\n    {\n        \"label\": \"ClipboardSetText\",\n        \"help\": \"systemFc.ClipboardSetText(text)\",\n        \"doc\": \"剪贴板设置文本 将文本写入剪切板。\"\n    },\n    {\n        \"label\": \"Environment\",\n        \"help\": \"systemFc.Environment()\",\n        \"doc\": \"环境 返回当前环境的详细信息。\"\n    },\n    {\n        \"label\": \"EventsEmit\",\n        \"help\": \"systemFc.EventsEmit(eventName)\",\n        \"doc\": \"触发事件 触发指定的事件。可选数据可以与事件一起传递。\"\n    },\n    {\n        \"label\": \"EventsOff\",\n        \"help\": \"systemFc.EventsOff(eventName, ...additionalEventNames)\",\n        \"doc\": \"移除事件监听器 移除给定事件名称的监听器,可以移除多个。\"\n    },\n    {\n        \"label\": \"EventsOn\",\n        \"help\": \"systemFc.EventsOn(eventName, callback)\",\n        \"doc\": \"添加事件监听器 为给定的事件名称设置一个监听器。\"\n    },\n    {\n        \"label\": \"EventsOnMultiple\",\n        \"help\": \"systemFc.EventsOnMultiple(eventName, callback, maxCallbacks)\",\n        \"doc\": \"添加限次数事件监听器 为给定的事件名称设置一个最多只能触发指定次数的监听器。\"\n    },\n    {\n        \"label\": \"EventsOnce\",\n        \"help\": \"systemFc.EventsOnce(eventName, callback)\",\n        \"doc\": \"添加一次性事件监听器 为给定的事件名称设置一个只会触发一次的监听器。\"\n    },\n    {\n        \"label\": \"Hide\",\n        \"help\": \"systemFc.Hide()\",\n        \"doc\": \"隐藏 隐藏应用程序。\"\n    },\n    {\n        \"label\": \"LogDebug\",\n        \"help\": \"systemFc.LogDebug(message)\",\n        \"doc\": \"Debug日志 在Debug日志级别记录给定的消息。\"\n    },\n    {\n        \"label\": \"LogError\",\n        \"help\": \"systemFc.LogError(message)\",\n        \"doc\": \"Error日志 在Error日志级别记录给定的消息。\"\n    },\n    {\n        \"label\": \"LogFatal\",\n        \"help\": \"systemFc.LogFatal(message)\",\n        \"doc\": \"Fatal日志 在Fatal日志级别记录给定的消息。\"\n    },\n    {\n        \"label\": \"LogInfo\",\n        \"help\": \"systemFc.LogInfo(message)\",\n        \"doc\": \"Info日志 在Info日志级别记录给定的消息。\"\n    },\n    {\n        \"label\": \"LogPrint\",\n        \"help\": \"systemFc.LogPrint(message)\",\n        \"doc\": \"打印日志 将给定的消息记录为原始消息。\"\n    },\n    {\n        \"label\": \"LogTrace\",\n        \"help\": \"systemFc.LogTrace(message)\",\n        \"doc\": \"Trace日志 在Trace日志级别记录给定的消息。\"\n    },\n    {\n        \"label\": \"LogWarning\",\n        \"help\": \"systemFc.LogWarning(message)\",\n        \"doc\": \"Warning日志 在Warning日志级别记录给定的消息。\"\n    },\n    {\n        \"label\": \"Quit\",\n        \"help\": \"systemFc.Quit()\",\n        \"doc\": \"退出 退出应用程序。\"\n    },\n    {\n        \"label\": \"ScreenGetAll\",\n        \"help\": \"systemFc.ScreenGetAll()\",\n        \"doc\": \"获取屏幕 返回当前连接的屏幕列表。\"\n    },\n    {\n        \"label\": \"Show\",\n        \"help\": \"systemFc.Show()\",\n        \"doc\": \"显示 显示应用程序。\"\n    },\n    {\n        \"label\": \"WindowCenter\",\n        \"help\": \"systemFc.WindowCenter()\",\n        \"doc\": \"窗口居中 使窗口在当前窗口所在的监视器上居中。\"\n    },\n    {\n        \"label\": \"WindowFullscreen\",\n        \"help\": \"systemFc.WindowFullscreen()\",\n        \"doc\": \"窗口全屏 使窗口全屏。\"\n    },\n    {\n        \"label\": \"WindowGetPosition\",\n        \"help\": \"systemFc.WindowGetPosition()\",\n        \"doc\": \"获取窗口位置 获取窗口相对于当前监视器的位置。\"\n    },\n    {\n        \"label\": \"WindowGetSize\",\n        \"help\": \"systemFc.WindowGetSize()\",\n        \"doc\": \"获取窗口大小 获取窗口的宽度和高度。\"\n    },\n    {\n        \"label\": \"WindowHide\",\n        \"help\": \"systemFc.WindowHide()\",\n        \"doc\": \"隐藏窗口 如果可见,则隐藏窗口。\"\n    },\n    {\n        \"label\": \"WindowIsFullscreen\",\n        \"help\": \"systemFc.WindowIsFullscreen()\",\n        \"doc\": \"窗口是否全屏 如果窗口是全屏,则返回true。\"\n    },\n    {\n        \"label\": \"WindowIsMaximised\",\n        \"help\": \"systemFc.WindowIsMaximised()\",\n        \"doc\": \"窗口是否最大化 如果窗口最大化,则返回true。\"\n    },\n    {\n        \"label\": \"WindowIsMinimised\",\n        \"help\": \"systemFc.WindowIsMinimised()\",\n        \"doc\": \"窗口是否最小化 如果窗口最小化,则返回true。\"\n    },\n    {\n        \"label\": \"WindowIsNormal\",\n        \"help\": \"systemFc.WindowIsNormal()\",\n        \"doc\": \"窗口是否正常 如果窗口未最小化、最大化或全屏,则返回true。\"\n    },\n    {\n        \"label\": \"WindowMaximise\",\n        \"help\": \"systemFc.WindowMaximise()\",\n        \"doc\": \"窗口最大化 最大化窗口以填满屏幕。\"\n    },\n    {\n        \"label\": \"WindowMinimise\",\n        \"help\": \"systemFc.WindowMinimise()\",\n        \"doc\": \"窗口最小化 最小化窗口。\"\n    },\n    {\n        \"label\": \"WindowReload\",\n        \"help\": \"systemFc.WindowReload()\",\n        \"doc\": \"窗口重载 重新加载当前页面。\"\n    },\n    {\n        \"label\": \"WindowReloadApp\",\n        \"help\": \"systemFc.WindowReloadApp()\",\n        \"doc\": \"重载应用前端 重新加载应用程序前端。\"\n    },\n    {\n        \"label\": \"WindowSetAlwaysOnTop\",\n        \"help\": \"systemFc.WindowSetAlwaysOnTop(b)\",\n        \"doc\": \"设置置顶 设置窗口置顶或取消置顶。\"\n    },\n    {\n        \"label\": \"WindowSetBackgroundColour\",\n        \"help\": \"systemFc.WindowSetBackgroundColour(R, G, B, A)\",\n        \"doc\": \"设置背景色 将窗口的背景颜色设置为给定的RGBA颜色。\"\n    },\n    {\n        \"label\": \"WindowSetDarkTheme\",\n        \"help\": \"systemFc.WindowSetDarkTheme()\",\n        \"doc\": \"设置深色主题 将窗口主题设置为深色。\"\n    },\n    {\n        \"label\": \"WindowSetLightTheme\",\n        \"help\": \"systemFc.WindowSetLightTheme()\",\n        \"doc\": \"设置浅色主题 将窗口主题设置为浅色。\"\n    },\n    {\n        \"label\": \"WindowSetMaxSize\",\n        \"help\": \"systemFc.WindowSetMaxSize(width, height)\",\n        \"doc\": \"设置最大尺寸 设置窗口最大尺寸。如果当前大于设置值,则调整窗口大小。\"\n    },\n    {\n        \"label\": \"WindowSetMinSize\",\n        \"help\": \"systemFc.WindowSetMinSize(width, height)\",\n        \"doc\": \"设置最小尺寸 设置窗口最小尺寸。如果当前小于设置值,则调整窗口大小。\"\n    },\n    {\n        \"label\": \"WindowSetPosition\",\n        \"help\": \"systemFc.WindowSetPosition(x, y)\",\n        \"doc\": \"设置窗口位置 设置窗口相对于当前监视器的位置。\"\n    },\n    {\n        \"label\": \"WindowSetSize\",\n        \"help\": \"systemFc.WindowSetSize(width, height)\",\n        \"doc\": \"设置窗口大小 设置窗口的宽度和高度。\"\n    },\n    {\n        \"label\": \"WindowSetSystemDefaultTheme\",\n        \"help\": \"systemFc.WindowSetSystemDefaultTheme()\",\n        \"doc\": \"设置系统默认主题 设置窗口主题为系统默认值。\"\n    },\n    {\n        \"label\": \"WindowSetTitle\",\n        \"help\": \"systemFc.WindowSetTitle(title)\",\n        \"doc\": \"设置窗口标题 设置窗口标题栏中的文本。\"\n    },\n    {\n        \"label\": \"WindowShow\",\n        \"help\": \"systemFc.WindowShow()\",\n        \"doc\": \"显示窗口 显示窗口,如果它当前是隐藏的。\"\n    },\n    {\n        \"label\": \"WindowToggleMaximise\",\n        \"help\": \"systemFc.WindowToggleMaximise()\",\n        \"doc\": \"切换窗口最大化 在最大化和未最大化之间切换。\"\n    },\n    {\n        \"label\": \"WindowUnfullscreen\",\n        \"help\": \"systemFc.WindowUnfullscreen()\",\n        \"doc\": \"取消全屏 恢复全屏之前的窗口尺寸和位置。\"\n    },\n    {\n        \"label\": \"WindowUnmaximise\",\n        \"help\": \"systemFc.WindowUnmaximise()\",\n        \"doc\": \"取消最大化 将窗口恢复到最大化之前的尺寸和位置。\"\n    },\n    {\n        \"label\": \"WindowUnminimise\",\n        \"help\": \"systemFc.WindowUnminimise()\",\n        \"doc\": \"取消最小化 将窗口恢复到最小化之前的尺寸和位置。\"\n    }\n]"
  },
  {
    "path": "GoEasyDesigner/frontend/src/i18n/index.js",
    "content": "import { createI18n } from \"vue-i18n\";\nimport zhHans from \"./locales/zh-Hans.json\";\nimport en from \"./locales/en.json\";\n\n// 实例化I18n\nconst i18n = createI18n({\n    locale: \"English\",\n    globalInjection: true,\n    fallbackLocale: \"English\",\n    legacy: false,\n    messages: {\n        \"简体中文\": zhHans,\n        \"English\": en,\n    },\n})\n\nexport default i18n"
  },
  {
    "path": "GoEasyDesigner/frontend/src/i18n/locales/en.json",
    "content": "{\n  \"app\": {\n    \"NewProject\": \"NewProject\",\n    \"OpenProject\": \"OpenProject\",\n    \"Attribute\": \"Attribute\",\n    \"Custom\": \"Custom\",\n    \"File\": \"File\",\n    \"ReleaseAndPlace\": \"Release and place\",\n    \"clear\": \"clear\",\n    \"compile\": \"Compile\",\n    \"components\": \"Components\",\n    \"debug_info\": \"Debug info\",\n    \"design\": \"Design\",\n    \"downloadClient\": \"Download Client\",\n    \"edit_code\": \"Code\",\n    \"environmentCheck\": \"Environment Check\",\n    \"help\": \"Help\",\n    \"helpDesc\": \"Window projects need to be created manually.\\n wails init -n \\\"go-easy-demo\\\" -t https://github.com/duolabmeng6/wails-template-vue-go-easy \\n<br>\\n\\nOnly the design interface can be saved in the browser.\\n\\n<br>\\n\\nIt is recommended to use the client to save it more simply. At present, you still need to install the go and node environment by yourself.\",\n    \"help_info\": \"Help info\",\n    \"inCompile\": \"in compile...\",\n    \"inOperation\": \"in operation...\",\n    \"language\": \"language\",\n    \"name\": \"GoEasyDesigner\",\n    \"new\": \"New\",\n    \"open\": \"Open\",\n    \"projectConfig\": \"Project Config\",\n    \"project_management\": \"Project\",\n    \"run\": \"Run\",\n    \"save\": \"Save\",\n    \"selectImage\": \"select Image\",\n    \"stop\": \"stop\",\n    \"stopped\": \"stopped\",\n    \"support_library\": \"Library\",\n    \"system_components\": \"System\",\n    \"td_components\": \"T Design\",\n    \"tw_components\": \"tailwindcss\",\n    \"updateCheck\": \"Check Update\"\n  },\n  \"attr\": {\n    \"addEvent\": \"add event function\",\n    \"backgroundColor\": \"backgroundColor\",\n    \"backgroundImage\": \"backgroundImage\",\n    \"border\": \"border\",\n    \"bottom\": \"bottom\",\n    \"disable\": \"disable\",\n    \"fontSize\": \"fontSize\",\n    \"height\": \"height\",\n    \"left\": \"left\",\n    \"name\": \"name\",\n    \"right\": \"right\",\n    \"title\": \"title\",\n    \"top\": \"top\",\n    \"visible\": \"visible\",\n    \"width\": \"width\",\n    \"xAxisRollingMode\": \"xAxis Rolling Mode\",\n    \"yAxisRollingMode\": \"yAxis Rolling Mode\",\n    \"zIndex\": \"zIndex\"\n  },\n  \"componentName\": {\n    \"Button\": \"Button\",\n    \"CheckBox\": \"CheckBox\",\n    \"CommonLayout\": \"CommonLayout\",\n    \"CustomComponent\": \"CustomComponent\",\n    \"FlexLayout\": \"FlexLayout\",\n    \"Label\": \"Label\",\n    \"Menu\": \"Menu\",\n    \"ProgressBar\": \"ProgressBar\",\n    \"RadioButton\": \"RadioButton\",\n    \"Switch\": \"Switch\",\n    \"Table\": \"Table\",\n    \"Tabs\": \"Tabs\",\n    \"TabsTW\": \"TabsTW\",\n    \"TextEdit\": \"TextEdit\",\n    \"Tooltip\": \"Tooltip\",\n    \"Tree\": \"Tree\",\n    \"Window\": \"Win\"\n  },\n  \"eventName\": {\n    \"blur\": \"blur\",\n    \"click\": \"click\",\n    \"contextmenu\": \"contextmenu\",\n    \"created\": \"created\",\n    \"dblclick\": \"dblclick\",\n    \"focus\": \"focus\",\n    \"keydown\": \"keydown\",\n    \"keyup\": \"keyup\",\n    \"mousedown\": \"mousedown\",\n    \"mousemove\": \"mousemove\",\n    \"mouseup\": \"mouseup\",\n    \"mousewheel\": \"mousewheel\"\n  }\n}"
  },
  {
    "path": "GoEasyDesigner/frontend/src/i18n/locales/zh-Hans.json",
    "content": "{\n  \"app\": {\n    \"NewProject\": \"新建项目\",\n    \"OpenProject\": \"打开项目\",\n    \"Attribute\": \"属性\",\n    \"Custom\": \"自定义组件\",\n    \"File\": \"文件\",\n    \"ReleaseAndPlace\": \"松开放置\",\n    \"clear\": \"清除\",\n    \"compile\": \"编译\",\n    \"components\": \"组件\",\n    \"debug_info\": \"调试信息\",\n    \"design\": \"界面设计\",\n    \"downloadClient\": \"下载客户端\",\n    \"edit_code\": \"编辑代码\",\n    \"environmentCheck\": \"运行环境检测\",\n    \"help\": \"帮助\",\n    \"helpDesc\": \"窗口项目需要手动创建\\n     wails init -n \\\"go-easy-demo\\\" -t https://github.com/duolabmeng6/wails-template-vue-go-easy       <br>\\n            在浏览器中仅可保存设计界面\\n            <br>\\n            建议使用客户端保存更简单 目前仍需自行安装 go 和 node 环境\",\n    \"help_info\": \"帮助信息\",\n    \"inCompile\": \"编译中...\",\n    \"inOperation\": \"运行中...\",\n    \"language\": \"语言\",\n    \"name\": \"窗口设计师\",\n    \"new\": \"新建\",\n    \"open\": \"打开\",\n    \"projectConfig\": \"项目配置\",\n    \"project_management\": \"项目管理\",\n    \"run\": \"运行\",\n    \"save\": \"保存\",\n    \"selectImage\": \"选择图片\",\n    \"stop\": \"停止\",\n    \"stopped\": \"已停止...\",\n    \"support_library\": \"支持库\",\n    \"system_components\": \"系统组件\",\n    \"td_components\": \"T Design\",\n    \"tw_components\": \"tailwindcss\",\n    \"updateCheck\": \"检查更新\",\n    \"preview\": \"预览\"\n  },\n  \"attr\": {\n    \"addEvent\": \"在此处选择加入事件处理函数\",\n    \"backgroundColor\": \"背景颜色\",\n    \"backgroundImage\": \"背景图片\",\n    \"border\": \"边框\",\n    \"bottom\": \"底边\",\n    \"disable\": \"禁用\",\n    \"fontSize\": \"字体大小\",\n    \"height\": \"高度\",\n    \"left\": \"左边\",\n    \"name\": \"名称\",\n    \"right\": \"右边\",\n    \"title\": \"标题\",\n    \"top\": \"顶边\",\n    \"visible\": \"可视\",\n    \"width\": \"宽度\",\n    \"xAxisRollingMode\": \"x轴滚动模式\",\n    \"yAxisRollingMode\": \"y轴滚动模式\",\n    \"zIndex\": \"层级\"\n  },\n  \"componentName\": {\n    \"Button\": \"按钮\",\n    \"CheckBox\": \"多选框\",\n    \"CommonLayout\": \"常用布局\",\n    \"ControlButton\": \"窗口控制按钮\",\n    \"CustomComponent\": \"自定义组件\",\n    \"FlexLayout\": \"弹性布局\",\n    \"Label\": \"标签\",\n    \"Menu\": \"菜单\",\n    \"ProgressBar\": \"进度条\",\n    \"RadioButton\": \"单选框\",\n    \"Switch\": \"开关\",\n    \"Table\": \"表格\",\n    \"Tabs\": \"选择夹\",\n    \"TabsTW\": \"选择夹tw\",\n    \"TextEdit\": \"编辑框\",\n    \"Tooltip\": \"提示框\",\n    \"Tree\": \"树形框\",\n    \"Window\": \"窗口\"\n  },\n  \"eventName\": {\n    \"blur\": \"失去焦点\",\n    \"click\": \"被单击\",\n    \"contextmenu\": \"鼠标右键被按下\",\n    \"created\": \"创建完毕\",\n    \"dblclick\": \"被双击\",\n    \"focus\": \"获得焦点\",\n    \"keydown\": \"按下某键\",\n    \"keyup\": \"放开某键\",\n    \"mousedown\": \"鼠标左键被按下\",\n    \"mousemove\": \"鼠标位置被移动\",\n    \"mouseup\": \"鼠标左键被放开\",\n    \"mousewheel\": \"滚轮被滚动\"\n  }\n}"
  },
  {
    "path": "GoEasyDesigner/frontend/src/main.js",
    "content": "import './assets/main.css'\n\nimport {createApp} from 'vue'\nimport {createPinia} from 'pinia'\nimport ElementPlus from 'element-plus'\nimport 'element-plus/dist/index.css'\n\nimport Menus from 'vue3-menus';\n// import TDesign from 'tdesign-vue-next'\nimport 'tdesign-vue-next/es/style/index.css'\n\nimport Helper from \"./Helper.js\"\n\nimport i18n from './i18n/index.js'\n\nimport App from './app11.vue'\n// import App from './components/designer/public/支持库.vue'\nimport {useAppStore} from '@/stores/appStore'\nimport RenderDesignComponent from \"./components/RenderDesignComponent.vue\"\nimport RenderDesignComponentWin from \"./components/RenderDesignComponentWin.vue\"\nimport * as ElementPlusIconsVue from '@element-plus/icons-vue'\nimport {install as VueMonacoEditorPlugin, loader} from '@guolao/vue-monaco-editor'\n\nimport * as monaco from \"monaco-editor\"\nimport editorWorker from \"monaco-editor/esm/vs/editor/editor.worker?worker\"\nimport jsonWorker from \"monaco-editor/esm/vs/language/json/json.worker?worker\"\nimport cssWorker from \"monaco-editor/esm/vs/language/css/css.worker?worker\"\nimport htmlWorker from \"monaco-editor/esm/vs/language/html/html.worker?worker\"\nimport tsWorker from \"monaco-editor/esm/vs/language/typescript/ts.worker?worker\"\nimport 编辑器数据 from './编辑器/编辑器提示数据.js'\nimport ldf from './编辑器/编辑器语法文件.js'\nimport systemFcDoc from \"@/helpDoc/systemFcDoc.json\"\n\nconst app = createApp(App)\napp.use(createPinia())\n\nconst store = useAppStore()\n\nstore.是否为window系统 = navigator.platform.includes(\"Win\")\n\napp.component('RenderDesignComponent', RenderDesignComponent)\napp.component('RenderDesignComponentWin', RenderDesignComponentWin)\n\nfor (const [key, component] of Object.entries(ElementPlusIconsVue)) {\n    app.component(key, component)\n}\n\n// 检索自定义组件\nlet 自定义组件名称列表 = []\n\nasync function load自定义组件() {\n    try {\n        const response = await fetch('/自定义组件/components.json');\n        const data = await response.json();\n        自定义组件名称列表 = data.components;\n        console.log(\"加载到的组件列表：\", 自定义组件名称列表);\n        \n        // 将组件列表添加到全局配置中\n        app.config.globalProperties.自定义组件名称列表 = 自定义组件名称列表;\n    } catch (error) {\n        console.error(\"加载组件列表失败：\", error);\n    }\n}\n\n// 在创建应用后立即加载组件\nload自定义组件();\n\nfunction loadEidtCode() {\n\n    app.use(VueMonacoEditorPlugin, {\n        paths: {\n            // The default CDN config\n            // vs: 'https://cdn.jsdelivr.net/npm/monaco-editor@0.36.0/min/vs'\n            vs: ''\n        },\n    })\n\n    self.MonacoEnvironment = {\n        getWorker(_, label) {\n            if (label === \"json\") {\n                return new jsonWorker()\n            }\n            if (label === \"css\" || label === \"scss\" || label === \"less\") {\n                return new cssWorker()\n            }\n            if (label === \"html\" || label === \"handlebars\" || label === \"razor\") {\n                return new htmlWorker()\n            }\n            if (label === \"typescript\" || label === \"javascript\") {\n                return new tsWorker()\n            }\n            return new editorWorker()\n        }\n    }\n\n    function createCustomProposal(range, insertText, label) {\n        return {\n            label: label,\n            kind: monaco.languages.CompletionItemKind.Function,\n            documentation: \"\",\n            insertText: insertText,\n            range: range,\n        };\n    }\n\n\n    const systemFcDocQuickTipQuickTip = {};\n    systemFcDoc.forEach(item => {\n        let l = JSON.parse(JSON.stringify(item));\n        try {\n            const extractedContent = item.doc.split(' ')[0];\n            l.label = item.help + \" \" + extractedContent;\n        } catch (e) {\n\n        }\n        systemFcDocQuickTipQuickTip[item.help] = {\n            \"insertText\": item.help,\n            \"label\": l.label\n        }\n    });\n\n\n    store.keywordMappings = 编辑器数据\n\n    monaco.languages.register({id: 'javascript'});\n    monaco.languages.setMonarchTokensProvider('javascript', ldf);\n    monaco.languages.registerCompletionItemProvider(\"javascript\", {\n        provideCompletionItems: function (model, position) {\n            var word = model.getWordUntilPosition(position);\n            var range = {\n                startLineNumber: position.lineNumber,\n                endLineNumber: position.lineNumber,\n                startColumn: word.startColumn,\n                endColumn: word.endColumn,\n            };\n            // 检查用户输入的关键词是否在映射中\n            var suggestions = [];\n            Object.keys(store.keywordMappings).forEach(function (keyword) {\n                var regex = new RegExp(\"^\" + word.word, \"i\");\n                if (regex.test(keyword)) {\n                    var {insertText, label} = store.keywordMappings[keyword];\n                    suggestions.push(createCustomProposal(range, insertText, label));\n                }\n            });\n            Object.keys(systemFcDocQuickTipQuickTip).forEach(function (keyword) {\n                var regex = new RegExp(\"^\" + word.word, \"i\");\n                if (regex.test(keyword)) {\n                    var {insertText, label} = systemFcDocQuickTipQuickTip[keyword];\n                    suggestions.push(createCustomProposal(range, insertText, label));\n                }\n            });\n\n            //这里设置排序对输入提示没有影响\n            // suggestions.sort((a, b) => {\n            //     return a.label.localeCompare(b.label, undefined, { sensitivity: 'base' });\n            // });\n            // console.log(JSON.stringify(suggestions, null, 2))\n            return {suggestions: suggestions};\n        },\n    });\n    loader.config({monaco})\n\n}\n\nloadEidtCode()\n\n\napp.config.warnHandler = function (msg, vm, trace) {\n    // 自定义处理警告的逻辑，或者什么都不做以屏蔽\n};\n\n\n//注册公用组件\nHelper.registerBoxComponentNames(app, '', import.meta.glob('./components/designer/public/*.vue', {eager: true}))\n\n//注册饿了么组件\nconst BoxComponentNames_el = Helper.registerBoxComponentNames(app, 'el', import.meta.glob('./components/boxs/el/**/*.vue', {eager: true}))\nconsole.log(\"饿了么组件\", BoxComponentNames_el)\nlet ComponentNameOrder = ['Button', 'TextEdit', 'Label']\nComponentNameOrder = [...new Set([...ComponentNameOrder, ...BoxComponentNames_el])]\nComponentNameOrder = ComponentNameOrder.filter(item => item !== \"Container\")\napp.config.globalProperties.BoxComponentNames_el = ComponentNameOrder\n//注册组件默认属性\nconst BoxComponentDefaultValue = {\n    'el': Helper.registerBoxComponentDefaultValue(app, 'el', import.meta.glob('./components/boxs/el/**/*.js', {eager: true})),\n    'td': Helper.registerBoxComponentDefaultValue(app, 'td', import.meta.glob('./components/boxs/td/**/*.js', {eager: true})),\n    'tw': Helper.registerBoxComponentDefaultValue(app, 'tw', import.meta.glob('./components/boxs/tw/**/*.js', {eager: true}))\n}\napp.provide('BoxComponentDefaultValue', BoxComponentDefaultValue)\n\nconst BoxComponentNames_td = Helper.registerBoxComponentNames(app, 'td', import.meta.glob('./components/boxs/td/**/*.vue', {eager: true}))\nconst BoxComponentNames_tw = Helper.registerBoxComponentNames(app, 'tw', import.meta.glob('./components/boxs/tw/**/*.vue', {eager: true}))\n\nconst BoxComponentNames = {\n    'system': ComponentNameOrder,\n    'tdesign': BoxComponentNames_td,\n    'tailwindcss': BoxComponentNames_tw,\n}\napp.provide('BoxComponentNames', BoxComponentNames)\n\n// 把i18n挂在到全局\n\napp.config.globalProperties.t = i18n.global.t\n\n//设置全局变量 用于判断是否为设计模式\napp.config.globalProperties.designMode = true\n\napp.use(i18n)\n// app.use(TDesign)\napp.use(ElementPlus)\napp.use(Menus);\napp.mount('#app')\n\n\n"
  },
  {
    "path": "GoEasyDesigner/frontend/src/public.js",
    "content": "const parseDimension = (value) => {\n    //检查是否包含 vw vh % 等单位\n    if (typeof value === 'string') {\n        if(value === \"inherit\" || value === \"auto\"){\n            return value;\n        }\n        if(value.includes('v') || value.includes('%')){\n            return value;\n        }\n    }\n    return `${parseInt(value)}px`;\n};\n\nconst getItemStyle = (item) => {\n    const style = {\n        top: parseDimension(item.top),\n        left: parseDimension(item.left),\n        width: parseDimension(item.width),\n        height: parseDimension(item.height),\n        border: item.border,\n        background: item.background,\n        zIndex: item.zIndex,\n        color: item.corlor,\n    };\n\n    return style;\n};\n\nconst getItemStyle2 = (item) => {\n    // console.log(\"??\");\n    let style = {\n        top: parseDimension(item.top),\n        left: parseDimension(item.left),\n        width: parseDimension(item.width),\n        height: parseDimension(item.height),\n    };\n    // const element窗口 = document.getElementById(\"窗口\");\n    // if (element窗口) {\n    //     const rect = element窗口.getBoundingClientRect();\n    //     // style.top = parseInt(style.top) + rect.top + \"px\";\n    //     // style.left = parseInt(style.left) + rect.left + \"px\";\n    // }\n\n    const designer = document.getElementById(\"designer\");\n    let rect_designer = {}\n    if (designer) {\n        rect_designer = designer.getBoundingClientRect();\n    } else {\n        return style\n    }\n\n    const element = document.querySelector(`[data-id=\"${item.data_id}\"]`);\n    if (element) {\n        //获取元素在浏览器中的绝对位置\n        const rect = element.getBoundingClientRect();\n        style.top = `${rect.top - rect_designer.top}px`;\n        style.left = `${rect.left - rect_designer.left}px`;\n        style.width = `${rect.width}px`;\n        style.height = `${rect.height}px`;\n    } else {\n        style.display = \"none\"\n        return style;\n    }\n    if (style.top == \"0px\" && style.left == \"0px\" && style.width == \"0px\" && style.height == \"0px\") {\n        style.display = \"none\"\n        return style;\n    }\n    style.display = \"block\"\n\n    return style;\n};\nconst getItemStyleShape = (item) => {\n    const style = {\n        top: parseDimension(item.top),\n        left: parseDimension(item.left),\n        right: parseDimension(item.right),\n        bottom: parseDimension(item.bottom),\n        width: parseDimension(item.width),\n        height: parseDimension(item.height),\n        border: item.border,\n        background: item.background,\n        zIndex: item.zIndex,\n        position: 'absolute',\n        overflowY: item.overflowY || 'visible',\n        overflowX: item.overflowX || 'visible'\n    };\n\n\n\n    if (item.position !== undefined) {\n        style.position = item.position;\n    }\n    if (item.图片 !== undefined) {\n        if (item.backgroundSize !== undefined) {\n            style.backgroundSize = '100% 100%';\n        }\n        if (item.backgroundRepeat !== undefined) {\n            style.backgroundRepeat = 'no-repeat';\n        }\n        if (item.backgroundPosition !== undefined) {\n            style.backgroundPosition = 'center';\n        }\n        if (item.backgroundAttachment !== undefined) {\n            style.backgroundAttachment = 'scroll';\n        }\n        style.backgroundImage = `url(${item.图片})`;\n        style.backgroundSize = item.backgroundSize\n        style.backgroundRepeat = item.backgroundRepeat\n        style.backgroundPosition = item.backgroundPosition\n        style.backgroundAttachment = item.backgroundAttachment\n    }\n    if (item.fontSize !== undefined) {\n        item.fontSize = item.fontSize || 12;\n    }\n\n    return style;\n};\n\n\n/* 生成组件对应关系方便ide 提示 */\n\nfunction generateComponentCode(components, parentPath = '') {\n    const codeLines = [];\n    let k = 0;\n    let codeLine;\n    for (const component of components) {\n        let componentName = component[\"name\"];\n        const componentPath = `${parentPath}.childComponents[${k}]`;\n        const componentPath2 = `${parentPath}`;\n        k = k + 1;\n        // componentName 如果带有空格 删除空格 并且把后面1个字母大写\n        if (componentName) {\n            if (componentName.includes(\" \")) {\n                const arr = componentName.split(\" \");\n                let newName = \"\";\n                for (let i = 0; i < arr.length; i++) {\n                    newName = newName + arr[i].charAt(0).toUpperCase() + arr[i].slice(1);\n                }\n                componentName = newName;\n            }\n        }\n\n\n        codeLine = `${componentName} : designData[0]${componentPath}`;\n        if (componentName == \"\" || componentName == undefined) {\n        } else {\n            codeLines.push(codeLine);\n        }\n\n        if (component[\"childComponents\"] && component[\"childComponents\"].length > 0) {\n            const childCodeLines = generateComponentCode(component[\"childComponents\"], componentPath);\n            codeLines.push(...childCodeLines);\n        }\n    }\n\n    return codeLines;\n}\n\nfunction 生成辅助代码(obj) {\n    const codeLines = generateComponentCode(obj);\n    let code = \"        Win : designData[0],\\r\\n\"\n    for (const codeLine of codeLines) {\n        code = code + \"        \" + codeLine + \",\\r\\n\"\n    }\n    let codeTpl = `\nimport designData from './design.json';\n    \nfunction __aux_code() {\n    return {\n${code}\n    }\n}\nexport default __aux_code\n    `\n    return codeTpl\n}\n\n// const jsonData = require('./design.json');\n// console.log(生成辅助代码(jsonData[0].childComponents))\n\n\nfunction 取父目录(path) {\n    // 将所有的反斜杠 \\ 替换为斜杠 /\n    var convertedPath = path.replace(/\\\\/g, '/');\n\n    // 使用正则表达式获取父目录\n    var parentDirectory = convertedPath.replace(/\\/[^/]*$/, '');\n\n    return parentDirectory;\n}\n\nfunction InsertCode(jscode, insertionCode) {\n    // 获取函数名称 窗口.按钮3被点击 = function () { 截取 按钮3被点击\n    const 函数名称 = insertionCode.substring(insertionCode.indexOf(\".\") + 1, insertionCode.indexOf(\"=\")).trim();\n\n    // 检查是否已经存在\n    if (jscode.includes(函数名称)) {\n        return jscode;\n    }\n\n    // Define the regular expression pattern\n    const pattern = `(\\\\/\\\\/Don't delete the event function flag[^\\\\n]*)`;\n\n    // Compile the regular expression\n    const re = new RegExp(pattern);\n\n    // Replace the matching pattern with the insertion code\n    const result = jscode.replace(re, `${insertionCode}$1`);\n\n    return result;\n}\n\nexport {getItemStyle, getItemStyle2, getItemStyleShape, 生成辅助代码, 取父目录, InsertCode};"
  },
  {
    "path": "GoEasyDesigner/frontend/src/stores/HistoryManager.js",
    "content": "\nclass HistoryManager {\n    constructor() {\n        this.historicalRecord = [];\n        this.currentPosition = -1;\n    }\n    // 记录最新数据到最新的一条(内容){\n    //     console.log(\"记录最新数据到最新的一条=========\")\n    //     console.log(\"历史currentPosition\",this.currentPosition)\n    //     console.log(\"查看当前历史所有记录\",this.查看当前历史所有记录())\n    //     this.historicalRecord[this.currentPosition]=内容\n    // }\n    记录(内容) {\n        this.historicalRecord = this.historicalRecord.slice(0, this.currentPosition + 1);\n        this.historicalRecord.push(内容);\n        this.currentPosition = this.historicalRecord.length - 1;\n        // console.log(\"记录=========\")\n        // console.log(\"历史currentPosition\",this.currentPosition)\n        // console.log(\"查看当前历史所有记录\",this.查看当前历史所有记录())\n    }\n\n    撤销(内容) {\n        if (内容){\n            this.historicalRecord[this.currentPosition]=内容\n        }\n        // console.log(\"撤销=========\")Ï\n        // console.log(\"历史currentPosition\",this.currentPosition)\n        // console.log(\"查看当前历史所有记录\",this.查看当前历史所有记录())\n        if (this.currentPosition > 0) {\n            // 移动到前一个historicalRecord\n            this.currentPosition--;\n            return this.historicalRecord[this.currentPosition];\n        } else {\n            // 已经没有historicalRecord可以撤销了\n            return null;\n        }\n    }\n\n    恢复(内容) {\n        // console.log(\"恢复=========\")\n        // console.log(\"历史currentPosition\",this.currentPosition)\n        // console.log(\"查看当前历史所有记录\",this.查看当前历史所有记录())\n        if (this.currentPosition < this.historicalRecord.length - 1) {\n            if (内容){\n                this.historicalRecord[this.currentPosition]=内容\n            }\n            // 移动到后一个historicalRecord\n            this.currentPosition++;\n            return this.historicalRecord[this.currentPosition];\n        } else {\n            // 已经到达最新historicalRecord\n            return null;\n        }\n    }\n\n\n    查看当前历史所有记录() {\n        return this.historicalRecord;\n    }\n}\nconst HistoryManagerLiving = new HistoryManager();\n\nexport {HistoryManagerLiving}\n// 示例使用\n\n// // 记录\n// HistoryManager.记录(\"第一步操作\");\n// HistoryManager.记录(\"第二步操作\");\n//\n// console.log(\"当前历史所有记录:\", HistoryManager.查看当前历史所有记录());\n//\n// // 撤销\n// const 撤销结果 = HistoryManager.撤销();\n// console.log(\"撤销结果:\", 撤销结果); // 输出：撤销结果: 第一步操作\n//\n// console.log(\"当前历史所有记录:\", HistoryManager.查看当前历史所有记录());\n//\n// // // 恢复\n// // const 恢复结果 = HistoryManager.恢复();\n// // console.log(\"恢复结果:\", 恢复结果); // 输出：恢复结果: 第二步操作\n// //\n// // console.log(\"当前历史所有记录:\", HistoryManager.查看当前历史所有记录());\n//\n// // 记录新操作\n// HistoryManager.记录(\"第三步操作\");\n//\n// console.log(\"当前历史所有记录:\", HistoryManager.查看当前历史所有记录());\n//\n// // 清除后续历史\n// HistoryManager.已修改清除后续历史();\n// console.log(\"当前历史所有记录:\", HistoryManager.查看当前历史所有记录());\n//\n//\n//\n// // 恢复\n// const 恢复结果 = HistoryManager.恢复();\n// console.log(\"恢复结果:\", 恢复结果); // 输出：恢复结果: 第二步操作\n//\n// console.log(\"当前历史所有记录:\", HistoryManager.查看当前历史所有记录());\n"
  },
  {
    "path": "GoEasyDesigner/frontend/src/stores/appStore.js",
    "content": "import {ref} from 'vue'\nimport {defineStore} from 'pinia'\nimport {WindowGetSize} from \"../../wailsjs/runtime\";\nimport {E发送跳转代码到ide, E发送跳转代码到ide_命令行方式, E文件枚举} from \"../../wailsjs/go/main/App\";\nimport {生成提示辅助代码} from \"@/提示语法生成器.js\";\nimport {窗口事件代码模板} from \"@/编辑器/窗口事件代码模板.js\";\nimport {ElMessage} from \"element-plus\";\nimport {InsertCode} from \"@/public.js\";\nimport {appAction} from '@/action/app.js';\nimport {HistoryManagerLiving} from '@/stores/HistoryManager.js';\nimport {useI18n} from \"vue-i18n\";\nimport i18n from \"../i18n\";\nimport * as systemFc from \"@/../wailsjs/runtime\";\n\n// 写一个延迟函数 async/await的\nfunction delay(ms) {\n    return new Promise(resolve => setTimeout(resolve, ms))\n}\n\nexport const useAppStore = defineStore('AppStore', {\n    state: () => {\n        return {\n            bodyLoaded: ref(false),\n            hoveredDiv: ref(null),\n            当前组件索引: ref(\"1\"),\n            组件列表: ref([]),\n            项目信息: ref({\n                项目根目录: \"\",\n                设计文件路径: \"\",//\"win\\\\design.json\",\n                窗口事件文件路径: \"\",//\"win\\\\event.js\",\n                辅助代码文件路径: \"\",//\"win\\\\__aux_code.js\",\n                项目管理目录: \"\",//\"win\\\\\",\n                IDE插件地址: \"http://127.0.0.1:17810\",\n                双击事件成功后最小化窗口: true,\n                选择的IDE:  \"goland\",\n                命令行方式跳转至IDE: true\n\n\n            }),\n            代码编辑器: ref({\n                路径: \"\",\n                文件时间: \"\",\n                内容: \"\",\n            }),\n            客户端模式: ref(false),\n            list: ref(null),\n            当前拖拽组件数据: ref(null),\n            当前多选组件ID: ref([]),\n            start_x: ref(0),\n            start_y: ref(0),\n            indexMap: ref({}),\n            显示项目配置对话框: ref(false),\n            显示新建项目对话框: ref(false),\n            显示预览对话框: ref(false),\n            项目文件列表: ref([]),\n            选择夹_中间现行选中项: ref(\"0\"),\n            支持库列表: ref([]),\n            帮助信息: ref(\"Welcome to use GoEasyDesigner\"),\n            keywordMappings: ref(\"\"),\n            全局_事件名称列表: ref([]),\n            代码编写模式: ref(1),//1:网页内代码编辑器 2:代码跳转至IDE\n            运行按钮文本: ref(\"运行\"),\n            编译按钮文本: ref(\"编译\"),\n            调试信息: ref(\"\"),\n            选择夹_底部现行选中项: ref(\"0\"),\n\n            组件列表tree现行选中项: ref(\"\"),\n            组件列表tree: ref([]),\n            scrollContainer: ref(null),\n            releases_latest: {},//github的文件信息\n            window下载地址: \"\",//github的文件信息\n            mac下载地址: \"\",//github的文件信息\n            版本号: \"\",//github的文件信息\n            是否为window系统: true,//github的文件信息\n            HistoryManager: HistoryManagerLiving,\n            putPosition: {},\n            rightClickMenus: ref({}),\n        }\n    },\n\n    actions: {\n        添加事件被选择: async function (事件名称, 函数名称, item, extData) {\n            let dthis = this;\n            if (this.代码编辑器.内容 == \"\") {\n                this.代码编辑器.内容 = 窗口事件代码模板\n            }\n            let rawName = item[`event_${事件名称}`]\n            if (rawName != undefined) {\n                this.跳转代码(rawName)\n                return\n            }\n\n            let code = `item.event_${事件名称} = \"${函数名称}\"`\n            eval(code)\n            let ncode = '';\n            if (extData == undefined) {\n                ncode = `\n    c.${函数名称} = async function () {\n        console.log(\"${函数名称}\")\n        \n    }\n`;\n            } else {\n                ncode = `\n    c.${函数名称} = async function ` + extData + ` {\n        console.log(\"${函数名称}\")\n        \n    }\n`;\n            }\n\n            ncode = ncode.replace(/{事件名称}/g, item.name + 事件名称)\n            console.log(ncode)\n\n            if (this.项目信息.窗口事件文件路径 == \"\") {\n                ElMessage({\n                    message: \"当前无法自动保存代码请注意...\",\n                    type: 'success',\n                    duration: 3000, // 设置显示时间为5秒，单位为毫秒\n                });\n                this.代码编辑器.内容 = InsertCode(this.代码编辑器.内容, ncode)\n                this.选择夹_中间现行选中项 = \"1\"\n                this.putPosition(ncode)\n\n\n                return;\n            }\n            //读入 窗口事件 文件内容\n            dthis.代码编辑器.内容 = InsertCode(this.代码编辑器.内容, ncode)\n            dthis.选择夹_中间现行选中项 = \"1\"\n            this.putPosition(ncode)\n            await appAction.保存设计文件()\n\n\n            rawName = item[`event_${事件名称}`]\n            this.跳转代码(rawName)\n\n        },\n        跳转代码: async function (函数名称) {\n            let dthis = this;\n            let 跳转位置 = this.代码编辑器.内容.indexOf(函数名称)\n            if (跳转位置 != -1) {\n                if (this.项目信息.窗口事件文件路径 == \"\") {\n                    this.选择夹_中间现行选中项 = \"1\"\n                    this.putPosition(函数名称)\n                    return\n                }\n                this.选择夹_中间现行选中项 = \"1\"\n                this.putPosition(函数名称)\n                let ret;\n\n                //已存在事件\n                if(this.项目信息.命令行方式跳转至IDE){\n                    ret = await E发送跳转代码到ide_命令行方式(\n                        this.项目信息.选择的IDE,\n                        this.项目信息.窗口事件文件路径,\n                        函数名称\n                    )\n                    return\n                }\n\n                //循环2次\n                for (let i = 0; i < 2; i++) {\n                    ret = await E发送跳转代码到ide(\n                        this.项目信息.IDE插件地址,\n                        this.项目信息.窗口事件文件路径,\n                        跳转位置\n                    )\n                    console.log(\"跳转位置\", 跳转位置, ret)\n                    if (ret) {\n                        if (dthis.项目信息.双击事件成功后最小化窗口) {\n                            systemFc.WindowMinimise()\n                        }\n                        return\n                    }\n\n                    await delay(300)\n\n                }\n\n\n                return\n            }\n        },\n        组件双击事件(组件数据) {\n            // console.log(this.全局_事件名称列表,this.全局_事件名称列表[1].value)\n            let 事件名称 = this.全局_事件名称列表[0].value\n            let ext_data = this.全局_事件名称列表[0].ext_data\n            let nowSelectItem = this.全局_事件名称列表[0]\n            let 函数名称;\n            if (i18n.global.locale.value === \"简体中文\") {\n                函数名称 = 组件数据.name + nowSelectItem.label\n            } else {\n                let 新事件名称 = nowSelectItem.value.toLowerCase().replace(/\\b(\\w)|\\s(\\w)/g, function (m) {\n                    return m.toUpperCase();\n                });\n                函数名称 = 组件数据.name + 新事件名称\n            }\n\n            this.添加事件被选择(事件名称, 函数名称, 组件数据, ext_data)\n\n            let dthis;\n            dthis = this\n            生成提示辅助代码(this.list, function (res) {\n                console.log(\"提示辅助代码\", res)\n                dthis.keywordMappings = res\n            })\n\n        },\n        init() {\n            let dthis = this\n            const {t} = useI18n() // 解构出t方法\n\n            this.运行按钮文本 = t(\"app.run\");\n            this.编译按钮文本 = t(\"app.compile\");\n            try {\n                WindowGetSize().then(function (size) {\n                })\n                dthis.客户端模式 = true\n            } catch (e) {\n                dthis.客户端模式 = false\n            }\n            console.log(\"当前客户端模式\", this.客户端模式)\n        },\n        项目管理刷新() {\n            if (this.项目信息.项目管理目录 == \"\" && this.项目信息.项目管理目录 == undefined) {\n                return\n            }\n            let dthis;\n            dthis = this\n            E文件枚举(this.项目信息.项目管理目录).then((res) => {\n                console.log(res)\n                res.forEach((v, i) => {\n                    //获取文件名\n                    let 文件名 = v.split(\"/\")\n                    文件名 = 文件名[文件名.length - 1]\n\n                    dthis.项目文件列表.push({\n                        label: 文件名,\n                        path: v,\n                    })\n                })\n            })\n            console.log(\"项目文件列表\", this.项目文件列表)\n        },\n\n        当前组件名称() {\n            console.log(\"当前组件索引\", this.当前组件索引)\n            if (this.当前组件索引 == -1) {\n                return \"画布属性\"\n            }\n            return this.组件列表[this.当前组件索引].componentName + \"属性\"\n        },\n\n        当前组件名称2() {\n            const {t} = useI18n() // 解构出t方法\n\n            if (this.当前拖拽组件数据.componentName == t('componentName.Window')) {\n                return \"WindowAttr\"\n            }\n\n            return this.当前拖拽组件数据.componentName + \"Attr\"\n        },\n        获取索引(组件名称) {\n            let k = this._获取索引(组件名称)\n            console.log(\"获取索引\", k)\n            //避免名称重复导致后续代码出问题\n            for (let i = 0; i < 100; i++) {\n                let 名称是否存在 = this.递归查找名称(this.list, k)\n                console.log(\"名称是否存在\", 名称是否存在,组件名称,k)\n                if (名称是否存在) {\n                    k = this._获取索引(组件名称)\n                } else {\n                    break\n                }\n            }\n            return k\n        },\n        _获取索引(名称) {\n            // console.log(this.indexMap[名称])\n            if (this.indexMap[名称] === undefined) {\n                this.indexMap[名称] = 1;\n            } else {\n                this.indexMap[名称]++;\n            }\n            // console.log(\"获取索引\", 名称, this.indexMap[名称], this.indexMap)\n            return 名称 + this.indexMap[名称];\n        },\n        获取随机id() {\n            //生成6为随机数\n            let random = Math.floor(Math.random() * 1000000);\n            // 保留6位字符串\n            return (\"id-\" + random).substring(0, 8);\n        },\n\n\n        递归删除id(源数据, id) {\n            // this.HistoryManager.记录(JSON.stringify(this.list))\n            this.HistoryManager.记录(JSON.stringify(this.list))\n            //检查id是否为数组\n            if (id instanceof Array) {\n                id.forEach((v, i) => {\n                    this.__递归删除id(源数据, v)\n                })\n            } else {\n                this.__递归删除id(源数据, id)\n            }\n            this.当前组件索引 = \"1\"\n            this.当前拖拽组件数据 = this.组件通过id查找结构(\"1\")\n            this.取组件列表()\n        },\n        __递归删除id(源数据, id) {\n            if (id == 1) {\n                console.log(\"不能把自己窗口删除了\")\n                return\n            }\n            // console.log(\"递归删除\", 源数据, id)\n            源数据.forEach((item, index) => {\n                if (item.id == id) {\n                    源数据.splice(index, 1);\n                    return\n                }\n                if (item.childComponents == undefined) {\n\n                } else {\n                    this.递归删除id(item.childComponents, id)\n                }\n            });\n        },\n\n        递归查找名称(源数据, 名称) {\n            return 源数据.some(item => {\n                if (item.name === 名称) {\n                    return true;\n                }\n                if (item.childComponents) {\n                    return this.递归查找名称(item.childComponents, 名称);\n                }\n                return false;\n            });\n        },\n        递归查找名称数量(源数据, 名称) {\n            let 数量 = 0\n            源数据.forEach(item => {\n                if (item.name === 名称) {\n                    数量++\n                }\n                if (item.childComponents) {\n                    数量 += this.递归查找名称数量(item.childComponents, 名称);\n                }\n            });\n            return 数量;\n\n        },\n        新增childComponents(id) {\n            let 插入数据 = {\n                id: this.获取随机id(),\n                name: this.获取索引(\"ContentArea\"),\n                text: this.获取索引(\"tabs\"),\n                componentName: \"elContainer\",\n                top: \"0\",\n                left: \"0\",\n                width: \"100%\",\n                height: \"100%\",\n                noPlace: false,\n                noDrag: true,\n                visible: true,\n                disable: false,\n                pid: id,\n                childComponents: []\n            }\n            this.递归添加(this.list, 插入数据, id)\n        },\n\n        新增childComponents2(id) {\n            let 插入数据 = {\n                id: this.获取随机id(),\n                componentName: \"elContainer\",\n                name: this.获取索引(\"ContentArea\"),\n                top: \"0\",\n                left: \"0\",\n                width: \"100%\",\n                height: \"100%\",\n                // background: \"#fff\",\n                position: \"relative\",\n                noPlace: false,\n                noDrag: true,\n                visible: true,\n                disable: false,\n                pid: id,\n                zIndex: 0,\n                占比: 8,\n                childComponents: [],\n                复制组件: [],\n            }\n            this.递归添加(this.list, 插入数据, id)\n        },\n\n        递归添加(源数据, 插入数据, id) {\n            // console.log(\"递归添加\", 源数据, 插入数据, id)\n            源数据.forEach((item, index) => {\n                if (item.childComponents == undefined) {\n\n                } else {\n                    if (item.id == id) {\n                        item.childComponents = [...item.childComponents, 插入数据]\n                        return true\n\n                    } else {\n                        this.递归添加(item.childComponents, 插入数据, id)\n                    }\n                }\n            });\n            return false\n        },\n        组件通过id查找结构(id) {\n            console.log(\"组件通过id查找结构\", id);\n            return this.__组件通过id查找结构_递归(this.list, id);\n        },\n        __组件通过id查找结构_递归(源数据, id) {\n            for (const item of 源数据) {\n                if (item.id === id) {\n                    return item;\n                } else if (item.childComponents) {\n                    const 子结果 = this.__组件通过id查找结构_递归(item.childComponents, id);\n                    if (子结果) {\n                        return 子结果;\n                    }\n                }\n            }\n            return null;\n        },\n        transformData(jsonData) {\n            function transform(item) {\n                let 名称;\n                名称 = item.name\n                if (名称 == undefined || 名称 == null || 名称 == \"\") {\n                    名称 = item.text\n                }\n                const newItem = {\n                    id: item.id,\n                    value: item.id,\n                    label: 名称,\n                    children: []\n                };\n\n                if (item.childComponents) {\n                    item.childComponents.forEach(child => {\n                        let 名称;\n                        名称 = child.name\n                        if (名称 == undefined || 名称 == null || 名称 == \"\") {\n                            名称 = child.text\n                        }\n                        if (名称) {\n                            const childItem = transform(child);\n                            newItem.children.push(childItem);\n                        }\n                    });\n                }\n\n                return newItem;\n            }\n\n            const result = jsonData.map(item => transform(item));\n            return result;\n        },\n        取组件列表() {\n            this.组件列表 = [];\n            this.组件列表tree = [];\n\n            this.__取组件列表_递归(this.list);\n            // console.log(\"取组件列表\", this.组件列表)\n\n            const testlist = this.transformData(this.list);\n            // console.log(\"取组件列表\", JSON.stringify(testlist, null, 2))\n            this.组件列表tree = testlist\n            // console.log(\"组件列表tree现行选中项\", this.组件列表tree现行选中项)\n            return this.组件列表\n        },\n        __取组件列表_递归(源数据) {\n            for (const item of 源数据) {\n                const 组件数据 = {\n                    label: item.name,\n                    id: item.id\n                }\n                if (item.name !== undefined && item.name !== null && item.name !== \"\") {\n                    this.组件列表.push(组件数据)\n                }\n                // console.log(\"组件列表\", this.组件列表)\n                if (item.childComponents) {\n                    this.__取组件列表_递归(item.childComponents);\n                }\n            }\n        }\n    },\n})"
  },
  {
    "path": "GoEasyDesigner/frontend/src/update_github_latest_releases.sh",
    "content": "#!/bin/bash\n\n# 访问 https://api.github.com/repos/duolabmeng6/GoEasyDesigner/releases/latest 保存为 releases_latest.json\n\n#curl -o releases_latest.json https://api.github.com/repos/duolabmeng6/GoEasyDesigner/releases/latest\n\n# 检查 releases_latest.json 的修改时间，如果超过 1 天，则重新下载\n\n#!/bin/bash\n#!/bin/bash\n\nJSON_FILE=\"../public/releases_latest.json\"\nURL=\"https://api.github.com/repos/duolabmeng6/GoEasyDesigner/releases\"\n\necho \"正在下载最新的releases...\"\ncurl -o \"$JSON_FILE\" \"$URL\"\ncat $JSON_FILE\n"
  },
  {
    "path": "GoEasyDesigner/frontend/src/提示语法生成器.js",
    "content": "function 提取key(components) {\n    const codeLines = [];\n    for (const component of components) {\n        // 遍历 component 所有的 key\n        for (const key in component) {\n            // console.log(\"component\", component)\n            let name = component[\"name\"];\n            if (name == \"\" || name == undefined) {\n                continue\n            }\n            // console.log(\"name\", name, key)\n            // if (检查是否全部为数字或者字母(name)) {\n            //     continue\n            // }\n            // if (检查是否全部为数字或者字母(key)) {\n            //     continue\n            // }\n            codeLines.push(key);\n            codeLines.push(name);\n            // console.log(\"加入自动补全列表\",component,name)\n\n        }\n        if (component[\"childComponents\"] && component[\"childComponents\"].length > 0) {\n            const childCodeLines = 提取key(component[\"childComponents\"]);\n            codeLines.push(...childCodeLines);\n        }\n    }\n    // console.log(\"提取的key\", codeLines)\n    return codeLines;\n}\n\nfunction 检查是否全部为数字或者字母(str) {\n    var reg = /^[0-9a-zA-Z]+$/;\n    return reg.test(str);\n}\nfunction 检查是否存在中文(str) {\n    //检查str中是否包含中文字符 不含 数字字母 如果有汉字返回 真 如果没有汉字返回假\n    var reg = /[\\u4e00-\\u9fa5]/;\n    return reg.test(str);\n}\n\nconst 生成提示词 = async (keys, fn) => {\n    // const pinyin = require('pinyin-pro')\n    return import('pinyin-pro').then((exports) => {\n        // exports.pinyin('汉语拼音'); // 'hàn yǔ pīn yīn'\n        // console.log(exports.pinyin('汉语拼音'))\n        let res = 查询返回(exports)\n        if (fn !== undefined) {\n            fn(res)\n        }\n        return res\n    });\n    // import { pinyin } from 'pinyin-pro';\n    // const { pinyin } = require('pinyin-pro');\n    function 查询返回(pinyin) {\n        const keywordMappings = {\n            // \"bjk\": { insertText: \"编辑框\", label: \"bjk编辑框\" },\n        };\n        for (const key of keys) {\n            const pinyinArray = pinyin.pinyin(key, {\n                toneType: 'none', type: 'array', pattern: 'first',\n            });\n            const abbreviation = pinyinArray.join('').toLowerCase();\n            let newNmae = abbreviation\n            // console.log(\"abbreviation\", abbreviation, key,检查是否存在中文(key))\n\n            if (检查是否存在中文(key)) {\n                newNmae = abbreviation + key\n\n            }else{\n                newNmae =  key\n\n            }\n            keywordMappings[abbreviation] = {\n                insertText: key,\n                label: newNmae,\n            }\n        }\n        // console.log(keywordMappings)\n        return keywordMappings\n    }\n}\n\nconst 生成提示辅助代码 = async (obj, fn) => {\n    let kyes = 提取key(obj);\n    // console.log(\"提取key\",JSON.stringify(kyes, null, 4))\n\n    // let 额外keys = [\"组件\"]\n    let 额外keys = [\"组件\"]\n    kyes = [...kyes, ...额外keys]\n    //过滤重复的值\n    kyes = [...new Set(kyes)]\n    kyes = await 生成提示词(kyes, fn)\n    // console.log(\"提取key2\",JSON.stringify(kyes, null, 4))\n    return JSON.stringify(kyes, null, 4);\n}\n// const jsonData = require('/Users/ll/Documents/GitHub/GoEasyDesigner/go-easy-demo/frontend/src/窗口/设计文件.json');\n// const test = async () => {\n//     let data = await 生成提示辅助代码(jsonData)\n//     console.log('data', data)\n// }\n// test()\n\nexport {生成提示辅助代码}"
  },
  {
    "path": "GoEasyDesigner/frontend/src/测试代码编辑器.vue",
    "content": "<template>\n  <el-button @click=\"重新生成提示\">重新生成提示</el-button>\n  <div style=\"height: 100vh;width: 100vh\">\n    <component is=\"代码编辑器\" v-model:value=\"store.代码编辑器.内容\"\n               height=\"100%\"\n    />\n  </div>\n</template>\n<script setup>\nimport {inject} from 'vue'\nimport {useCounterStore} from '@/stores/counter'\nconst store = useCounterStore()\nstore.代码编辑器.内容 = `\nexport function 绑定窗口事件(c, 组件) {\n    c.窗口创建完毕 = function () {\n        console.log(\"窗口创建完毕\")\n    }\n\n    c.按钮1被单击 = function () {\n        console.log(\"按钮1被单击\")\n        组件.编辑框1text = \"祖国,您好!\"\n    }\n\n//事件函数位置不要删除\n\n}\n\n\n`\n// let keywordMappings = inject(\"keywordMappings\")\n\nfunction 重新生成提示(){\n  console.log(\"重新生成提示\")\n  console.log(store.keywordMappings)\n  store.keywordMappings = {\n    \"bjk\": { insertText: \"编辑框\", label: \"bjk编辑框\" },\n    \"zj\": { insertText: \"组件\", label: \"zj组件\" },\n    \"nr\": { insertText: \"内容\", label: \"nr内容\" },\n  }\n   console.log(store.keywordMappings)\n}\n</script>\n"
  },
  {
    "path": "GoEasyDesigner/frontend/src/编辑器/窗口事件代码模板.js",
    "content": "export const 窗口事件代码模板 =`import * as systemFc from \"../../wailsjs/runtime\";\nimport * as goFc from \"../../wailsjs/go/main/App\";\nimport {__load_data} from './__load_data'\n\nexport function BindWindowEvent() {\n    const c = __load_data()\n    let comps = c.comps\n//Don't delete the event function flag\n}`"
  },
  {
    "path": "GoEasyDesigner/frontend/src/编辑器/编辑器提示数据.js",
    "content": "const keywordMappings = {\n    \"nr\": {\n        \"insertText\": \"text\",\n        \"label\": \"nrtext\"\n    },\n}\nexport default keywordMappings"
  },
  {
    "path": "GoEasyDesigner/frontend/src/编辑器/编辑器语法文件.js",
    "content": "export default {\n    // Set defaultToken to invalid to see what you do not tokenize yet\n    defaultToken: 'invalid',\n    tokenPostfix: '.js',\n\n    keywords: [\n        'break', 'case', 'catch', 'class', 'continue', 'const',\n        'constructor', 'debugger', 'default', 'delete', 'do', 'else',\n        'export', 'extends', 'false', 'finally', 'for', 'from', 'function',\n        'get', 'if', 'import', 'in', 'instanceof', 'let', 'new', 'null',\n        'return', 'set', 'super', 'switch', 'symbol', 'this', 'throw', 'true',\n        'try', 'typeof', 'undefined', 'var', 'void', 'while', 'with', 'yield',\n        'async', 'await', 'of'\n    ],\n\n    typeKeywords: [\n        'any', 'boolean', 'number', 'object', 'string', 'undefined'\n    ],\n\n    operators: [\n        '<=', '>=', '==', '!=', '===', '!==', '=>', '+', '-', '**',\n        '*', '/', '%', '++', '--', '<<', '</', '>>', '>>>', '&',\n        '|', '^', '!', '~', '&&', '||', '?', ':', '=', '+=', '-=',\n        '*=', '**=', '/=', '%=', '<<=', '>>=', '>>>=', '&=', '|=',\n        '^=', '@',\n    ],\n\n    // we include these common regular expressions\n    symbols: /[=><!~?:&|+\\-*\\/\\^%]+/,\n    escapes: /\\\\(?:[abfnrtv\\\\\"']|x[0-9A-Fa-f]{1,4}|u[0-9A-Fa-f]{4}|U[0-9A-Fa-f]{8})/,\n    digits: /\\d+(_+\\d+)*/,\n    octaldigits: /[0-7]+(_+[0-7]+)*/,\n    binarydigits: /[0-1]+(_+[0-1]+)*/,\n    hexdigits: /[0-9a-fA-F]+(_+[0-9a-fA-F]+)*/,\n\n    regexpctl: /[(){}\\[\\]\\$\\^|\\-*+?\\.]/,\n    regexpesc: /\\\\(?:[bBdDfnrstvwWn0\\\\\\/]|@regexpctl|c[A-Z]|x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4})/,\n\n    // The main tokenizer for our languages\n    tokenizer: {\n        root: [\n            [/[{}]/, 'delimiter.bracket'],\n            { include: 'common' }\n        ],\n\n        common: [\n            [/[\\u4e00-\\u9fa5\\w$][\\u4e00-\\u9fa5\\w$]*/, {\n                cases: {\n                    '@typeKeywords': 'keyword',\n                    '@keywords': 'keyword',\n                    '@default': 'identifier'\n                }\n            }],\n            // identifiers and keywords\n            [/[a-z_$][\\w$]*/, {\n                cases: {\n                    '@typeKeywords': 'keyword',\n                    '@keywords': 'keyword',\n                    '@default': 'identifier'\n                }\n            }],\n            [/[A-Z][\\w\\$]*/, 'type.identifier'],  // to show class names nicely\n\n            // whitespace\n            { include: '@whitespace' },\n\n            // regular expression: ensure it is terminated before beginning (otherwise it is an operator)\n            [/\\/(?=([^\\\\\\/]|\\\\.)+\\/([gimsuy]*)(\\s*)(\\.|;|\\/|,|\\)|\\]|\\}|$))/, { token: 'regexp', bracket: '@open', next: '@regexp' }],\n\n            // delimiters and operators\n            [/[()\\[\\]]/, '@brackets'],\n            [/[<>](?!@symbols)/, '@brackets'],\n            [/@symbols/, {\n                cases: {\n                    '@operators': 'delimiter',\n                    '@default': ''\n                }\n            }],\n\n            // numbers\n            [/(@digits)[eE]([\\-+]?(@digits))?/, 'number.float'],\n            [/(@digits)\\.(@digits)([eE][\\-+]?(@digits))?/, 'number.float'],\n            [/0[xX](@hexdigits)/, 'number.hex'],\n            [/0[oO]?(@octaldigits)/, 'number.octal'],\n            [/0[bB](@binarydigits)/, 'number.binary'],\n            [/(@digits)/, 'number'],\n\n            // delimiter: after number because of .\\d floats\n            [/[;,.]/, 'delimiter'],\n\n            // strings\n            [/\"([^\"\\\\]|\\\\.)*$/, 'string.invalid'],  // non-terminated string\n            [/'([^'\\\\]|\\\\.)*$/, 'string.invalid'],  // non-terminated string\n            [/\"/, 'string', '@string_double'],\n            [/'/, 'string', '@string_single'],\n            [/`/, 'string', '@string_backtick'],\n        ],\n\n        whitespace: [\n            [/[ \\t\\r\\n]+/, ''],\n            [/\\/\\*\\*(?!\\/)/, 'comment.doc', '@jsdoc'],\n            [/\\/\\*/, 'comment', '@comment'],\n            [/\\/\\/.*$/, 'comment'],\n        ],\n\n        comment: [\n            [/[^\\/*]+/, 'comment'],\n            [/\\*\\//, 'comment', '@pop'],\n            [/\\*|[\\/]/, 'comment']\n        ],\n\n        jsdoc: [\n            [/[^\\/*]+/, 'comment.doc'],\n            [/\\*\\//, 'comment.doc', '@pop'],\n            [/\\*|[\\/]/, 'comment.doc']\n        ],\n\n        // We match regular expression quite precisely\n        regexp: [\n            [/(\\{)(\\d+(?:,\\d*)?)(\\})/, ['regexp.escape.control', 'regexp.escape.control', 'regexp.escape.control']],\n            [/(\\[)(\\^?)(?=(?:[^\\]\\\\\\/]|\\\\.)+)/, ['regexp.escape.control', { token: 'regexp.escape.control', next: '@regexrange' }]],\n            [/(\\\\)(\\?:|\\?=|\\?!)/, ['regexp.escape.control', 'regexp.escape.control']],\n            [/[()]/, 'regexp.escape.control'],\n            [/@regexpctl/, 'regexp.escape.control'],\n            [/[^\\\\\\/]/, 'regexp'],\n            [/@regexpesc/, 'regexp.escape'],\n            [/\\\\\\./, 'regexp.invalid'],\n            [/(\\/)([gimsuy]*)/, [{ token: 'regexp', bracket: '@close', next: '@pop' }, 'keyword.other']],\n        ],\n\n        regexrange: [\n            [/-/, 'regexp.escape.control'],\n            [/\\^/, 'regexp.invalid'],\n            [/@regexpesc/, 'regexp.escape'],\n            [/[^\\]]/, 'regexp'],\n            [/\\]/, { token: 'regexp.escape.control', next: '@pop', bracket: '@close' }],\n        ],\n\n        string_double: [\n            [/[\\u4e00-\\u9fa5\\w$]+/, 'string'],\n            [/[^\\\\\"]+/, 'string'],\n            [/@escapes/, 'string.escape'],\n            [/\\\\./, 'string.escape.invalid'],\n            [/\"/, 'string', '@pop']\n        ],\n\n        string_single: [\n            [/[^\\\\']+/, 'string'],\n            [/@escapes/, 'string.escape'],\n            [/\\\\./, 'string.escape.invalid'],\n            [/'/, 'string', '@pop'],\n            [/[\\u4e00-\\u9fa5\\w$]+/, 'string'],\n        ],\n\n        string_backtick: [\n            [/\\$\\{/, { token: 'delimiter.bracket', next: '@bracketCounting' }],\n            [/[^\\\\`$]+/, 'string'],\n            [/@escapes/, 'string.escape'],\n            [/\\\\./, 'string.escape.invalid'],\n            [/`/, 'string', '@pop']\n        ],\n\n        bracketCounting: [\n            [/\\{/, 'delimiter.bracket', '@bracketCounting'],\n            [/\\}/, 'delimiter.bracket', '@pop'],\n            { include: 'common' }\n        ],\n    },\n};"
  },
  {
    "path": "GoEasyDesigner/frontend/src/编辑的语法提示.js",
    "content": "function createCustomProposal(range, insertText, label) {\n    return {\n        label: label,\n        kind: monaco.languages.CompletionItemKind.Function,\n        documentation: \"\",\n        insertText: insertText,\n        range: range,\n    };\n}\n\nmonaco.languages.registerCompletionItemProvider(\"javascript\", {\n    provideCompletionItems: function (model, position) {\n        var word = model.getWordUntilPosition(position);\n        var range = {\n            startLineNumber: position.lineNumber,\n            endLineNumber: position.lineNumber,\n            startColumn: word.startColumn,\n            endColumn: word.endColumn,\n        };\n\n        var keywordMappings = {\n            \"bjk\": { insertText: \"编辑框\", label: \"bjk编辑框\" },\n            \"zj\": { insertText: \"组件\", label: \"zj组件\" },\n            \"nr\": { insertText: \"内容\", label: \"nr内容\" },\n        };\n\n        // 检查用户输入的关键词是否在映射中\n        var suggestions = [];\n        Object.keys(keywordMappings).forEach(function (keyword) {\n            var regex = new RegExp(\"^\" + word.word, \"i\");\n            if (regex.test(keyword)) {\n                var { insertText, label } = keywordMappings[keyword];\n                suggestions.push(createCustomProposal(range, insertText, label));\n            }\n        });\n\n        return { suggestions: suggestions };\n    },\n});\n\nmonaco.editor.create(document.getElementById(\"container\"), {\n    value: `export function 绑定窗口事件(c, 组件) {\n    c.窗口创建完毕 = function () {\n        console.log(\"窗口创建完毕\")\n    }\n\n    c.按钮1被单击 = function () {\n        console.log(\"按钮1被单击\")\n        组件.编辑框1text = \"祖国,您好!\"\n    }\n//事件函数位置不要删除\n}`,\n    language: \"javascript\",\n});"
  },
  {
    "path": "GoEasyDesigner/frontend/tailwind.config.js",
    "content": "/** @type {import('tailwindcss').Config} */\nmodule.exports = {\n  content: [\n    \"./index.html\",\n    \"./src/**/*.{js,ts,jsx,tsx}\",\n  ],\n  theme: {\n    extend: {},\n  },\n  plugins: [],\n}\n\n"
  },
  {
    "path": "GoEasyDesigner/frontend/vite.config.js",
    "content": "import {fileURLToPath, URL} from 'node:url'\n\nimport {defineConfig} from 'vite'\nimport vue from '@vitejs/plugin-vue'\n\nimport AutoImport from 'unplugin-auto-import/vite'\nimport Components from 'unplugin-vue-components/vite'\nimport {ElementPlusResolver, TDesignResolver} from 'unplugin-vue-components/resolvers'\nimport IconsResolver from 'unplugin-icons/resolver'\nimport vueJsx from '@vitejs/plugin-vue-jsx'\n\n// https://vitejs.dev/config/\nexport default defineConfig({\n    server: {\n        host: \"0.0.0.0\",\n        hmr: {\n            host: 'localhost',\n            protocol: 'ws',\n        }\n    },\n    preview: {\n        host: \"0.0.0.0\",\n        port: 3000,\n    },\n    publicDir: \"public\",\n    plugins: [\n        vue(),\n        vueJsx(),\n        AutoImport({\n            imports: ['vue'],\n            resolvers: [\n                ElementPlusResolver(),\n\n                // Auto import icon components\n                // 自动导入图标组件\n                IconsResolver({\n                    prefix: 'Icon',\n                }),\n                TDesignResolver({\n                    library: 'vue-next'\n                })\n            ],\n        }),\n        Components({\n            resolvers: [\n                // Auto register icon components\n                // 自动注册图标组件\n                IconsResolver({\n                    enabledCollections: ['ep'],\n                }),\n                // Auto register Element Plus components\n                // 自动导入 Element Plus 组件\n                ElementPlusResolver(),\n                TDesignResolver({\n                    library: 'vue-next'\n                })\n            ],\n        }),\n\n    ],\n    resolve: {\n        alias: {\n            '@': fileURLToPath(new URL('./src', import.meta.url))\n        }\n    },\n    esbuild: {\n        jsxFactory: 'h',\n        jsxFragment: 'Fragment',\n        // jsxInject: `import React from 'react'`,\n    },\n})\n"
  },
  {
    "path": "GoEasyDesigner/frontend/wailsjs/go/main/App.d.ts",
    "content": "// Cynhyrchwyd y ffeil hon yn awtomatig. PEIDIWCH Â MODIWL\n// This file is automatically generated. DO NOT EDIT\n\nexport function E下载github项目(arg1:string,arg2:string):Promise<string>;\n\nexport function E保存(arg1:string,arg2:string):Promise<string>;\n\nexport function E保存件对话框():Promise<string>;\n\nexport function E停止命令():Promise<string>;\n\nexport function E创建函数(arg1:string,arg2:string,arg3:string):Promise<string>;\n\nexport function E发送跳转代码到ide(arg1:string,arg2:string,arg3:number):Promise<boolean>;\n\nexport function E发送跳转代码到ide_命令行方式(arg1:string,arg2:string,arg3:string):Promise<boolean>;\n\nexport function E取当前目录():Promise<string>;\n\nexport function E取文件修改时间(arg1:string):Promise<string>;\n\nexport function E取运行目录():Promise<string>;\n\nexport function E取配置信息():Promise<string>;\n\nexport function E打开文件对话框():Promise<string>;\n\nexport function E打开选择文件夹对话框():Promise<string>;\n\nexport function E搜索文件(arg1:string,arg2:string):Promise<Array<string>>;\n\nexport function E文件是否存在(arg1:string):Promise<boolean>;\n\nexport function E文件枚举(arg1:string):Promise<Array<string>>;\n\nexport function E检查更新():Promise<string>;\n\nexport function E添加文件监视(arg1:string):Promise<string>;\n\nexport function E清空文件监视():Promise<string>;\n\nexport function E读入文件(arg1:string):Promise<string>;\n\nexport function E运行命令(arg1:string,arg2:string):Promise<string>;\n\nexport function Greet(arg1:string):Promise<string>;\n"
  },
  {
    "path": "GoEasyDesigner/frontend/wailsjs/go/main/App.js",
    "content": "// @ts-check\n// Cynhyrchwyd y ffeil hon yn awtomatig. PEIDIWCH Â MODIWL\n// This file is automatically generated. DO NOT EDIT\n\nexport function E下载github项目(arg1, arg2) {\n  return window['go']['main']['App']['E下载github项目'](arg1, arg2);\n}\n\nexport function E保存(arg1, arg2) {\n  return window['go']['main']['App']['E保存'](arg1, arg2);\n}\n\nexport function E保存件对话框() {\n  return window['go']['main']['App']['E保存件对话框']();\n}\n\nexport function E停止命令() {\n  return window['go']['main']['App']['E停止命令']();\n}\n\nexport function E创建函数(arg1, arg2, arg3) {\n  return window['go']['main']['App']['E创建函数'](arg1, arg2, arg3);\n}\n\nexport function E发送跳转代码到ide(arg1, arg2, arg3) {\n  return window['go']['main']['App']['E发送跳转代码到ide'](arg1, arg2, arg3);\n}\n\nexport function E发送跳转代码到ide_命令行方式(arg1, arg2, arg3) {\n  return window['go']['main']['App']['E发送跳转代码到ide_命令行方式'](arg1, arg2, arg3);\n}\n\nexport function E取当前目录() {\n  return window['go']['main']['App']['E取当前目录']();\n}\n\nexport function E取文件修改时间(arg1) {\n  return window['go']['main']['App']['E取文件修改时间'](arg1);\n}\n\nexport function E取运行目录() {\n  return window['go']['main']['App']['E取运行目录']();\n}\n\nexport function E取配置信息() {\n  return window['go']['main']['App']['E取配置信息']();\n}\n\nexport function E打开文件对话框() {\n  return window['go']['main']['App']['E打开文件对话框']();\n}\n\nexport function E打开选择文件夹对话框() {\n  return window['go']['main']['App']['E打开选择文件夹对话框']();\n}\n\nexport function E搜索文件(arg1, arg2) {\n  return window['go']['main']['App']['E搜索文件'](arg1, arg2);\n}\n\nexport function E文件是否存在(arg1) {\n  return window['go']['main']['App']['E文件是否存在'](arg1);\n}\n\nexport function E文件枚举(arg1) {\n  return window['go']['main']['App']['E文件枚举'](arg1);\n}\n\nexport function E检查更新() {\n  return window['go']['main']['App']['E检查更新']();\n}\n\nexport function E添加文件监视(arg1) {\n  return window['go']['main']['App']['E添加文件监视'](arg1);\n}\n\nexport function E清空文件监视() {\n  return window['go']['main']['App']['E清空文件监视']();\n}\n\nexport function E读入文件(arg1) {\n  return window['go']['main']['App']['E读入文件'](arg1);\n}\n\nexport function E运行命令(arg1, arg2) {\n  return window['go']['main']['App']['E运行命令'](arg1, arg2);\n}\n\nexport function Greet(arg1) {\n  return window['go']['main']['App']['Greet'](arg1);\n}\n"
  },
  {
    "path": "GoEasyDesigner/frontend/wailsjs/runtime/package.json",
    "content": "{\n  \"name\": \"@wailsapp/runtime\",\n  \"version\": \"2.0.0\",\n  \"description\": \"Wails Javascript runtime library\",\n  \"main\": \"runtime.js\",\n  \"types\": \"runtime.d.ts\",\n  \"scripts\": {\n  },\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"git+https://github.com/wailsapp/wails.git\"\n  },\n  \"keywords\": [\n    \"Wails\",\n    \"Javascript\",\n    \"Go\"\n  ],\n  \"author\": \"Lea Anthony <lea.anthony@gmail.com>\",\n  \"license\": \"MIT\",\n  \"bugs\": {\n    \"url\": \"https://github.com/wailsapp/wails/issues\"\n  },\n  \"homepage\": \"https://github.com/wailsapp/wails#readme\"\n}\n"
  },
  {
    "path": "GoEasyDesigner/frontend/wailsjs/runtime/runtime.d.ts",
    "content": "/*\n _       __      _ __\n| |     / /___ _(_) /____\n| | /| / / __ `/ / / ___/\n| |/ |/ / /_/ / / (__  )\n|__/|__/\\__,_/_/_/____/\nThe electron alternative for Go\n(c) Lea Anthony 2019-present\n*/\n\nexport interface Position {\n    x: number;\n    y: number;\n}\n\nexport interface Size {\n    w: number;\n    h: number;\n}\n\nexport interface Screen {\n    isCurrent: boolean;\n    isPrimary: boolean;\n    width : number\n    height : number\n}\n\n// Environment information such as platform, buildtype, ...\nexport interface EnvironmentInfo {\n    buildType: string;\n    platform: string;\n    arch: string;\n}\n\n// [EventsEmit](https://wails.io/docs/reference/runtime/events#eventsemit)\n// emits the given event. Optional data may be passed with the event.\n// This will trigger any event listeners.\nexport function EventsEmit(eventName: string, ...data: any): void;\n\n// [EventsOn](https://wails.io/docs/reference/runtime/events#eventson) sets up a listener for the given event name.\nexport function EventsOn(eventName: string, callback: (...data: any) => void): () => void;\n\n// [EventsOnMultiple](https://wails.io/docs/reference/runtime/events#eventsonmultiple)\n// sets up a listener for the given event name, but will only trigger a given number times.\nexport function EventsOnMultiple(eventName: string, callback: (...data: any) => void, maxCallbacks: number): () => void;\n\n// [EventsOnce](https://wails.io/docs/reference/runtime/events#eventsonce)\n// sets up a listener for the given event name, but will only trigger once.\nexport function EventsOnce(eventName: string, callback: (...data: any) => void): () => void;\n\n// [EventsOff](https://wails.io/docs/reference/runtime/events#eventsoff)\n// unregisters the listener for the given event name.\nexport function EventsOff(eventName: string, ...additionalEventNames: string[]): void;\n\n// [EventsOffAll](https://wails.io/docs/reference/runtime/events#eventsoffall)\n// unregisters all listeners.\nexport function EventsOffAll(): void;\n\n// [LogPrint](https://wails.io/docs/reference/runtime/log#logprint)\n// logs the given message as a raw message\nexport function LogPrint(message: string): void;\n\n// [LogTrace](https://wails.io/docs/reference/runtime/log#logtrace)\n// logs the given message at the `trace` log level.\nexport function LogTrace(message: string): void;\n\n// [LogDebug](https://wails.io/docs/reference/runtime/log#logdebug)\n// logs the given message at the `debug` log level.\nexport function LogDebug(message: string): void;\n\n// [LogError](https://wails.io/docs/reference/runtime/log#logerror)\n// logs the given message at the `error` log level.\nexport function LogError(message: string): void;\n\n// [LogFatal](https://wails.io/docs/reference/runtime/log#logfatal)\n// logs the given message at the `fatal` log level.\n// The application will quit after calling this method.\nexport function LogFatal(message: string): void;\n\n// [LogInfo](https://wails.io/docs/reference/runtime/log#loginfo)\n// logs the given message at the `info` log level.\nexport function LogInfo(message: string): void;\n\n// [LogWarning](https://wails.io/docs/reference/runtime/log#logwarning)\n// logs the given message at the `warning` log level.\nexport function LogWarning(message: string): void;\n\n// [WindowReload](https://wails.io/docs/reference/runtime/window#windowreload)\n// Forces a reload by the main application as well as connected browsers.\nexport function WindowReload(): void;\n\n// [WindowReloadApp](https://wails.io/docs/reference/runtime/window#windowreloadapp)\n// Reloads the application frontend.\nexport function WindowReloadApp(): void;\n\n// [WindowSetAlwaysOnTop](https://wails.io/docs/reference/runtime/window#windowsetalwaysontop)\n// Sets the window AlwaysOnTop or not on top.\nexport function WindowSetAlwaysOnTop(b: boolean): void;\n\n// [WindowSetSystemDefaultTheme](https://wails.io/docs/next/reference/runtime/window#windowsetsystemdefaulttheme)\n// *Windows only*\n// Sets window theme to system default (dark/light).\nexport function WindowSetSystemDefaultTheme(): void;\n\n// [WindowSetLightTheme](https://wails.io/docs/next/reference/runtime/window#windowsetlighttheme)\n// *Windows only*\n// Sets window to light theme.\nexport function WindowSetLightTheme(): void;\n\n// [WindowSetDarkTheme](https://wails.io/docs/next/reference/runtime/window#windowsetdarktheme)\n// *Windows only*\n// Sets window to dark theme.\nexport function WindowSetDarkTheme(): void;\n\n// [WindowCenter](https://wails.io/docs/reference/runtime/window#windowcenter)\n// Centers the window on the monitor the window is currently on.\nexport function WindowCenter(): void;\n\n// [WindowSetTitle](https://wails.io/docs/reference/runtime/window#windowsettitle)\n// Sets the text in the window title bar.\nexport function WindowSetTitle(title: string): void;\n\n// [WindowFullscreen](https://wails.io/docs/reference/runtime/window#windowfullscreen)\n// Makes the window full screen.\nexport function WindowFullscreen(): void;\n\n// [WindowUnfullscreen](https://wails.io/docs/reference/runtime/window#windowunfullscreen)\n// Restores the previous window dimensions and position prior to full screen.\nexport function WindowUnfullscreen(): void;\n\n// [WindowIsFullscreen](https://wails.io/docs/reference/runtime/window#windowisfullscreen)\n// Returns the state of the window, i.e. whether the window is in full screen mode or not.\nexport function WindowIsFullscreen(): Promise<boolean>;\n\n// [WindowSetSize](https://wails.io/docs/reference/runtime/window#windowsetsize)\n// Sets the width and height of the window.\nexport function WindowSetSize(width: number, height: number): void;\n\n// [WindowGetSize](https://wails.io/docs/reference/runtime/window#windowgetsize)\n// Gets the width and height of the window.\nexport function WindowGetSize(): Promise<Size>;\n\n// [WindowSetMaxSize](https://wails.io/docs/reference/runtime/window#windowsetmaxsize)\n// Sets the maximum window size. Will resize the window if the window is currently larger than the given dimensions.\n// Setting a size of 0,0 will disable this constraint.\nexport function WindowSetMaxSize(width: number, height: number): void;\n\n// [WindowSetMinSize](https://wails.io/docs/reference/runtime/window#windowsetminsize)\n// Sets the minimum window size. Will resize the window if the window is currently smaller than the given dimensions.\n// Setting a size of 0,0 will disable this constraint.\nexport function WindowSetMinSize(width: number, height: number): void;\n\n// [WindowSetPosition](https://wails.io/docs/reference/runtime/window#windowsetposition)\n// Sets the window position relative to the monitor the window is currently on.\nexport function WindowSetPosition(x: number, y: number): void;\n\n// [WindowGetPosition](https://wails.io/docs/reference/runtime/window#windowgetposition)\n// Gets the window position relative to the monitor the window is currently on.\nexport function WindowGetPosition(): Promise<Position>;\n\n// [WindowHide](https://wails.io/docs/reference/runtime/window#windowhide)\n// Hides the window.\nexport function WindowHide(): void;\n\n// [WindowShow](https://wails.io/docs/reference/runtime/window#windowshow)\n// Shows the window, if it is currently hidden.\nexport function WindowShow(): void;\n\n// [WindowMaximise](https://wails.io/docs/reference/runtime/window#windowmaximise)\n// Maximises the window to fill the screen.\nexport function WindowMaximise(): void;\n\n// [WindowToggleMaximise](https://wails.io/docs/reference/runtime/window#windowtogglemaximise)\n// Toggles between Maximised and UnMaximised.\nexport function WindowToggleMaximise(): void;\n\n// [WindowUnmaximise](https://wails.io/docs/reference/runtime/window#windowunmaximise)\n// Restores the window to the dimensions and position prior to maximising.\nexport function WindowUnmaximise(): void;\n\n// [WindowIsMaximised](https://wails.io/docs/reference/runtime/window#windowismaximised)\n// Returns the state of the window, i.e. whether the window is maximised or not.\nexport function WindowIsMaximised(): Promise<boolean>;\n\n// [WindowMinimise](https://wails.io/docs/reference/runtime/window#windowminimise)\n// Minimises the window.\nexport function WindowMinimise(): void;\n\n// [WindowUnminimise](https://wails.io/docs/reference/runtime/window#windowunminimise)\n// Restores the window to the dimensions and position prior to minimising.\nexport function WindowUnminimise(): void;\n\n// [WindowIsMinimised](https://wails.io/docs/reference/runtime/window#windowisminimised)\n// Returns the state of the window, i.e. whether the window is minimised or not.\nexport function WindowIsMinimised(): Promise<boolean>;\n\n// [WindowIsNormal](https://wails.io/docs/reference/runtime/window#windowisnormal)\n// Returns the state of the window, i.e. whether the window is normal or not.\nexport function WindowIsNormal(): Promise<boolean>;\n\n// [WindowSetBackgroundColour](https://wails.io/docs/reference/runtime/window#windowsetbackgroundcolour)\n// Sets the background colour of the window to the given RGBA colour definition. This colour will show through for all transparent pixels.\nexport function WindowSetBackgroundColour(R: number, G: number, B: number, A: number): void;\n\n// [ScreenGetAll](https://wails.io/docs/reference/runtime/window#screengetall)\n// Gets the all screens. Call this anew each time you want to refresh data from the underlying windowing system.\nexport function ScreenGetAll(): Promise<Screen[]>;\n\n// [BrowserOpenURL](https://wails.io/docs/reference/runtime/browser#browseropenurl)\n// Opens the given URL in the system browser.\nexport function BrowserOpenURL(url: string): void;\n\n// [Environment](https://wails.io/docs/reference/runtime/intro#environment)\n// Returns information about the environment\nexport function Environment(): Promise<EnvironmentInfo>;\n\n// [Quit](https://wails.io/docs/reference/runtime/intro#quit)\n// Quits the application.\nexport function Quit(): void;\n\n// [Hide](https://wails.io/docs/reference/runtime/intro#hide)\n// Hides the application.\nexport function Hide(): void;\n\n// [Show](https://wails.io/docs/reference/runtime/intro#show)\n// Shows the application.\nexport function Show(): void;\n\n// [ClipboardGetText](https://wails.io/docs/reference/runtime/clipboard#clipboardgettext)\n// Returns the current text stored on clipboard\nexport function ClipboardGetText(): Promise<string>;\n\n// [ClipboardSetText](https://wails.io/docs/reference/runtime/clipboard#clipboardsettext)\n// Sets a text on the clipboard\nexport function ClipboardSetText(text: string): Promise<boolean>;\n\n// [OnFileDrop](https://wails.io/docs/reference/runtime/draganddrop#onfiledrop)\n// OnFileDrop listens to drag and drop events and calls the callback with the coordinates of the drop and an array of path strings.\nexport function OnFileDrop(callback: (x: number, y: number ,paths: string[]) => void, useDropTarget: boolean) :void\n\n// [OnFileDropOff](https://wails.io/docs/reference/runtime/draganddrop#dragandddropoff)\n// OnFileDropOff removes the drag and drop listeners and handlers.\nexport function OnFileDropOff() :void\n\n// Check if the file path resolver is available\nexport function CanResolveFilePaths(): boolean;\n\n// Resolves file paths for an array of files\nexport function ResolveFilePaths(files: File[]): void"
  },
  {
    "path": "GoEasyDesigner/frontend/wailsjs/runtime/runtime.js",
    "content": "/*\n _       __      _ __\n| |     / /___ _(_) /____\n| | /| / / __ `/ / / ___/\n| |/ |/ / /_/ / / (__  )\n|__/|__/\\__,_/_/_/____/\nThe electron alternative for Go\n(c) Lea Anthony 2019-present\n*/\n\nexport function LogPrint(message) {\n    window.runtime.LogPrint(message);\n}\n\nexport function LogTrace(message) {\n    window.runtime.LogTrace(message);\n}\n\nexport function LogDebug(message) {\n    window.runtime.LogDebug(message);\n}\n\nexport function LogInfo(message) {\n    window.runtime.LogInfo(message);\n}\n\nexport function LogWarning(message) {\n    window.runtime.LogWarning(message);\n}\n\nexport function LogError(message) {\n    window.runtime.LogError(message);\n}\n\nexport function LogFatal(message) {\n    window.runtime.LogFatal(message);\n}\n\nexport function EventsOnMultiple(eventName, callback, maxCallbacks) {\n    return window.runtime.EventsOnMultiple(eventName, callback, maxCallbacks);\n}\n\nexport function EventsOn(eventName, callback) {\n    return EventsOnMultiple(eventName, callback, -1);\n}\n\nexport function EventsOff(eventName, ...additionalEventNames) {\n    return window.runtime.EventsOff(eventName, ...additionalEventNames);\n}\n\nexport function EventsOnce(eventName, callback) {\n    return EventsOnMultiple(eventName, callback, 1);\n}\n\nexport function EventsEmit(eventName) {\n    let args = [eventName].slice.call(arguments);\n    return window.runtime.EventsEmit.apply(null, args);\n}\n\nexport function WindowReload() {\n    window.runtime.WindowReload();\n}\n\nexport function WindowReloadApp() {\n    window.runtime.WindowReloadApp();\n}\n\nexport function WindowSetAlwaysOnTop(b) {\n    window.runtime.WindowSetAlwaysOnTop(b);\n}\n\nexport function WindowSetSystemDefaultTheme() {\n    window.runtime.WindowSetSystemDefaultTheme();\n}\n\nexport function WindowSetLightTheme() {\n    window.runtime.WindowSetLightTheme();\n}\n\nexport function WindowSetDarkTheme() {\n    window.runtime.WindowSetDarkTheme();\n}\n\nexport function WindowCenter() {\n    window.runtime.WindowCenter();\n}\n\nexport function WindowSetTitle(title) {\n    window.runtime.WindowSetTitle(title);\n}\n\nexport function WindowFullscreen() {\n    window.runtime.WindowFullscreen();\n}\n\nexport function WindowUnfullscreen() {\n    window.runtime.WindowUnfullscreen();\n}\n\nexport function WindowIsFullscreen() {\n    return window.runtime.WindowIsFullscreen();\n}\n\nexport function WindowGetSize() {\n    return window.runtime.WindowGetSize();\n}\n\nexport function WindowSetSize(width, height) {\n    window.runtime.WindowSetSize(width, height);\n}\n\nexport function WindowSetMaxSize(width, height) {\n    window.runtime.WindowSetMaxSize(width, height);\n}\n\nexport function WindowSetMinSize(width, height) {\n    window.runtime.WindowSetMinSize(width, height);\n}\n\nexport function WindowSetPosition(x, y) {\n    window.runtime.WindowSetPosition(x, y);\n}\n\nexport function WindowGetPosition() {\n    return window.runtime.WindowGetPosition();\n}\n\nexport function WindowHide() {\n    window.runtime.WindowHide();\n}\n\nexport function WindowShow() {\n    window.runtime.WindowShow();\n}\n\nexport function WindowMaximise() {\n    window.runtime.WindowMaximise();\n}\n\nexport function WindowToggleMaximise() {\n    window.runtime.WindowToggleMaximise();\n}\n\nexport function WindowUnmaximise() {\n    window.runtime.WindowUnmaximise();\n}\n\nexport function WindowIsMaximised() {\n    return window.runtime.WindowIsMaximised();\n}\n\nexport function WindowMinimise() {\n    window.runtime.WindowMinimise();\n}\n\nexport function WindowUnminimise() {\n    window.runtime.WindowUnminimise();\n}\n\nexport function WindowSetBackgroundColour(R, G, B, A) {\n    window.runtime.WindowSetBackgroundColour(R, G, B, A);\n}\n\nexport function ScreenGetAll() {\n    return window.runtime.ScreenGetAll();\n}\n\nexport function WindowIsMinimised() {\n    return window.runtime.WindowIsMinimised();\n}\n\nexport function WindowIsNormal() {\n    return window.runtime.WindowIsNormal();\n}\n\nexport function BrowserOpenURL(url) {\n    window.runtime.BrowserOpenURL(url);\n}\n\nexport function Environment() {\n    return window.runtime.Environment();\n}\n\nexport function Quit() {\n    window.runtime.Quit();\n}\n\nexport function Hide() {\n    window.runtime.Hide();\n}\n\nexport function Show() {\n    window.runtime.Show();\n}\n\nexport function ClipboardGetText() {\n    return window.runtime.ClipboardGetText();\n}\n\nexport function ClipboardSetText(text) {\n    return window.runtime.ClipboardSetText(text);\n}\n\n/**\n * Callback for OnFileDrop returns a slice of file path strings when a drop is finished.\n *\n * @export\n * @callback OnFileDropCallback\n * @param {number} x - x coordinate of the drop\n * @param {number} y - y coordinate of the drop\n * @param {string[]} paths - A list of file paths.\n */\n\n/**\n * OnFileDrop listens to drag and drop events and calls the callback with the coordinates of the drop and an array of path strings.\n *\n * @export\n * @param {OnFileDropCallback} callback - Callback for OnFileDrop returns a slice of file path strings when a drop is finished.\n * @param {boolean} [useDropTarget=true] - Only call the callback when the drop finished on an element that has the drop target style. (--wails-drop-target)\n */\nexport function OnFileDrop(callback, useDropTarget) {\n    return window.runtime.OnFileDrop(callback, useDropTarget);\n}\n\n/**\n * OnFileDropOff removes the drag and drop listeners and handlers.\n */\nexport function OnFileDropOff() {\n    return window.runtime.OnFileDropOff();\n}\n\nexport function CanResolveFilePaths() {\n    return window.runtime.CanResolveFilePaths();\n}\n\nexport function ResolveFilePaths(files) {\n    return window.runtime.ResolveFilePaths(files);\n}"
  },
  {
    "path": "GoEasyDesigner/go.mod",
    "content": "module changeme\n\ngo 1.22.0\n\ntoolchain go1.23.8\n\nrequire (\n\tgithub.com/duolabmeng6/goefun v1.3.6\n\tgithub.com/fsnotify/fsnotify v1.8.0\n\tgithub.com/ncruces/zenity v0.10.10\n\tgithub.com/wailsapp/wails/v2 v2.10.1\n)\n\nrequire (\n\tgithub.com/Knetic/govaluate v3.0.1-0.20171022003610-9aa49832a739+incompatible // indirect\n\tgithub.com/akavel/rsrc v0.10.2 // indirect\n\tgithub.com/axgle/mahonia v0.0.0-20180208002826-3358181d7394 // indirect\n\tgithub.com/bep/debounce v1.2.1 // indirect\n\tgithub.com/dchest/jsmin v0.0.0-20220218165748-59f39799265f // indirect\n\tgithub.com/go-ole/go-ole v1.3.0 // indirect\n\tgithub.com/godbus/dbus/v5 v5.1.0 // indirect\n\tgithub.com/gogf/gf/v2 v2.4.1 // indirect\n\tgithub.com/google/go-cmp v0.5.8 // indirect\n\tgithub.com/google/uuid v1.6.0 // indirect\n\tgithub.com/jchv/go-winloader v0.0.0-20210711035445-715c2860da7e // indirect\n\tgithub.com/joho/godotenv v1.5.1 // indirect\n\tgithub.com/josephspurrier/goversioninfo v1.4.0 // indirect\n\tgithub.com/kr/pretty v0.3.0 // indirect\n\tgithub.com/kr/text v0.2.0 // indirect\n\tgithub.com/labstack/echo/v4 v4.13.3 // indirect\n\tgithub.com/labstack/gommon v0.4.2 // indirect\n\tgithub.com/leaanthony/go-ansi-parser v1.6.1 // indirect\n\tgithub.com/leaanthony/gosod v1.0.4 // indirect\n\tgithub.com/leaanthony/slicer v1.6.0 // indirect\n\tgithub.com/leaanthony/u v1.1.1 // indirect\n\tgithub.com/mattn/go-colorable v0.1.13 // indirect\n\tgithub.com/mattn/go-isatty v0.0.20 // indirect\n\tgithub.com/pkg/browser v0.0.0-20240102092130-5ac0b6a4141c // indirect\n\tgithub.com/pkg/errors v0.9.1 // indirect\n\tgithub.com/randall77/makefat v0.0.0-20210315173500-7ddd0e42c844 // indirect\n\tgithub.com/rivo/uniseg v0.4.7 // indirect\n\tgithub.com/rogpeppe/go-internal v1.8.0 // indirect\n\tgithub.com/samber/lo v1.49.1 // indirect\n\tgithub.com/tkrajina/go-reflector v0.5.8 // indirect\n\tgithub.com/valyala/bytebufferpool v1.0.0 // indirect\n\tgithub.com/valyala/fasttemplate v1.2.2 // indirect\n\tgithub.com/wailsapp/go-webview2 v1.0.19 // indirect\n\tgithub.com/wailsapp/mimetype v1.4.1 // indirect\n\tgo.opentelemetry.io/otel v1.7.0 // indirect\n\tgo.opentelemetry.io/otel/trace v1.7.0 // indirect\n\tgolang.org/x/crypto v0.33.0 // indirect\n\tgolang.org/x/image v0.12.0 // indirect\n\tgolang.org/x/net v0.35.0 // indirect\n\tgolang.org/x/sys v0.30.0 // indirect\n\tgolang.org/x/text v0.22.0 // indirect\n)\n"
  },
  {
    "path": "GoEasyDesigner/go.sum",
    "content": "github.com/BurntSushi/toml v1.1.0 h1:ksErzDEI1khOiGPgpwuI7x2ebx/uXQNw7xJpn9Eq1+I=\ngithub.com/BurntSushi/toml v1.1.0/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ=\ngithub.com/Knetic/govaluate v3.0.1-0.20171022003610-9aa49832a739+incompatible h1:1G1pk05UrOh0NlF1oeaaix1x8XzrfjIDK47TY0Zehcw=\ngithub.com/Knetic/govaluate v3.0.1-0.20171022003610-9aa49832a739+incompatible/go.mod h1:r7JcOSlj0wfOMncg0iLm8Leh48TZaKVeNIfJntJ2wa0=\ngithub.com/akavel/rsrc v0.10.2 h1:Zxm8V5eI1hW4gGaYsJQUhxpjkENuG91ki8B4zCrvEsw=\ngithub.com/akavel/rsrc v0.10.2/go.mod h1:uLoCtb9J+EyAqh+26kdrTgmzRBFPGOolLWKpdxkKq+c=\ngithub.com/axgle/mahonia v0.0.0-20180208002826-3358181d7394 h1:OYA+5W64v3OgClL+IrOD63t4i/RW7RqrAVl9LTZ9UqQ=\ngithub.com/axgle/mahonia v0.0.0-20180208002826-3358181d7394/go.mod h1:Q8n74mJTIgjX4RBBcHnJ05h//6/k6foqmgE45jTQtxg=\ngithub.com/bep/debounce v1.2.1 h1:v67fRdBA9UQu2NhLFXrSg0Brw7CexQekrBwDMM8bzeY=\ngithub.com/bep/debounce v1.2.1/go.mod h1:H8yggRPQKLUhUoqrJC1bO2xNya7vanpDl7xR3ISbCJ0=\ngithub.com/bytedance/sonic v1.9.1 h1:6iJ6NqdoxCDr6mbY8h18oSO+cShGSMRGCEo7F2h0x8s=\ngithub.com/bytedance/sonic v1.9.1/go.mod h1:i736AoUSYt75HyZLoJW9ERYxcy6eaN6h4BZXU064P/U=\ngithub.com/chenzhuoyu/base64x v0.0.0-20221115062448-fe3a3abad311 h1:qSGYFH7+jGhDF8vLC+iwCD4WpbV1EBDSzWkJODFLams=\ngithub.com/chenzhuoyu/base64x v0.0.0-20221115062448-fe3a3abad311/go.mod h1:b583jCggY9gE99b6G5LEC39OIiVsWj+R97kbl5odCEk=\ngithub.com/clbanning/mxj/v2 v2.5.5 h1:oT81vUeEiQQ/DcHbzSytRngP6Ky9O+L+0Bw0zSJag9E=\ngithub.com/clbanning/mxj/v2 v2.5.5/go.mod h1:hNiWqW14h+kc+MdF9C6/YoRfjEJoR3ou6tn/Qo+ve2s=\ngithub.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E=\ngithub.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=\ngithub.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=\ngithub.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=\ngithub.com/dchest/jsmin v0.0.0-20220218165748-59f39799265f h1:OGqDDftRTwrvUoL6pOG7rYTmWsTCvyEWFsMjg+HcOaA=\ngithub.com/dchest/jsmin v0.0.0-20220218165748-59f39799265f/go.mod h1:Dv9D0NUlAsaQcGQZa5kc5mqR9ua72SmA8VXi4cd+cBw=\ngithub.com/duolabmeng6/goefun v1.3.6 h1:ljjoYtr6P1TxEwPwNFYmya3FHXCJqwdYBayDGV1CL+k=\ngithub.com/duolabmeng6/goefun v1.3.6/go.mod h1:mg175FgUQ0tWPSfuobtIIaL7el8ZOYyLmJJi28dXOTg=\ngithub.com/fatih/color v1.13.0 h1:8LOYc1KYPPmyKMuN8QV2DNRWNbLo6LZ0iLs8+mlH53w=\ngithub.com/fatih/color v1.13.0/go.mod h1:kLAiJbzzSOZDVNGyDpeOxJ47H46qBXwg5ILebYFFOfk=\ngithub.com/fsnotify/fsnotify v1.5.4/go.mod h1:OVB6XrOHzAwXMpEM7uPOzcehqUV2UqJxmVXmkdnm1bU=\ngithub.com/fsnotify/fsnotify v1.8.0 h1:dAwr6QBTBZIkG8roQaJjGof0pp0EeF+tNV7YBP3F/8M=\ngithub.com/fsnotify/fsnotify v1.8.0/go.mod h1:8jBTzvmWwFyi3Pb8djgCCO5IBqzKJ/Jwo8TRcHyHii0=\ngithub.com/gabriel-vasile/mimetype v1.4.2 h1:w5qFW6JKBz9Y393Y4q372O9A7cUSequkh1Q7OhCmWKU=\ngithub.com/gabriel-vasile/mimetype v1.4.2/go.mod h1:zApsH/mKG4w07erKIaJPFiX0Tsq9BFQgN3qGY5GnNgA=\ngithub.com/ganlvtech/go-exportable-cookiejar v0.0.0-20181231191301-34af33d7487e h1:zF8BCigEVAtW07yhpupU1FQ8DEzINaJ6HVfPUQY/uqY=\ngithub.com/ganlvtech/go-exportable-cookiejar v0.0.0-20181231191301-34af33d7487e/go.mod h1:EdkZC5tfJxfNZYtycwAG0adNOJRpGUyIhLcG6DvhyU0=\ngithub.com/gin-contrib/sse v0.1.0 h1:Y/yl/+YNO8GZSjAhjMsSuLt29uWRFHdHYUb5lYOV9qE=\ngithub.com/gin-contrib/sse v0.1.0/go.mod h1:RHrZQHXnP2xjPF+u1gW/2HnVO7nvIa9PG3Gm+fLHvGI=\ngithub.com/gin-gonic/gin v1.9.1 h1:4idEAncQnU5cB7BeOkPtxjfCSye0AAm1R0RVIqJ+Jmg=\ngithub.com/gin-gonic/gin v1.9.1/go.mod h1:hPrL7YrpYKXt5YId3A/Tnip5kqbEAP+KLuI3SUcPTeU=\ngithub.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=\ngithub.com/go-logr/logr v1.2.3 h1:2DntVwHkVopvECVRSlL5PSo9eG+cAkDCuckLubN+rq0=\ngithub.com/go-logr/logr v1.2.3/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=\ngithub.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag=\ngithub.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE=\ngithub.com/go-ole/go-ole v1.3.0 h1:Dt6ye7+vXGIKZ7Xtk4s6/xVdGDQynvom7xCFEdWr6uE=\ngithub.com/go-ole/go-ole v1.3.0/go.mod h1:5LS6F96DhAwUc7C+1HLexzMXY1xGRSryjyPPKW6zv78=\ngithub.com/go-playground/locales v0.14.1 h1:EWaQ/wswjilfKLTECiXz7Rh+3BjFhfDFKv/oXslEjJA=\ngithub.com/go-playground/locales v0.14.1/go.mod h1:hxrqLVvrK65+Rwrd5Fc6F2O76J/NuW9t0sjnWqG1slY=\ngithub.com/go-playground/universal-translator v0.18.1 h1:Bcnm0ZwsGyWbCzImXv+pAJnYK9S473LQFuzCbDbfSFY=\ngithub.com/go-playground/universal-translator v0.18.1/go.mod h1:xekY+UJKNuX9WP91TpwSH2VMlDf28Uj24BCp08ZFTUY=\ngithub.com/go-playground/validator/v10 v10.14.0 h1:vgvQWe3XCz3gIeFDm/HnTIbj6UGmg/+t63MyGU2n5js=\ngithub.com/go-playground/validator/v10 v10.14.0/go.mod h1:9iXMNT7sEkjXb0I+enO7QXmzG6QCsPWY4zveKFVRSyU=\ngithub.com/goccy/go-json v0.10.2 h1:CrxCmQqYDkv1z7lO7Wbh2HN93uovUHgrECaO5ZrCXAU=\ngithub.com/goccy/go-json v0.10.2/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I=\ngithub.com/godbus/dbus/v5 v5.1.0 h1:4KLkAxT3aOY8Li4FRJe/KvhoNFFxo0m6fNuFUO8QJUk=\ngithub.com/godbus/dbus/v5 v5.1.0/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA=\ngithub.com/gogf/gf/v2 v2.4.1 h1:snsuvDhNFiRoAuWBbKfIIng0KyMaRA87Qr03GLir5j8=\ngithub.com/gogf/gf/v2 v2.4.1/go.mod h1:tsbmtwcAl2chcYoq/fP9W2FZf06aw4i89X34nbSHo9Y=\ngithub.com/google/go-cmp v0.5.7/go.mod h1:n+brtR0CgQNWTVd5ZUFpTBC8YFBDLK/h/bpaJ8/DtOE=\ngithub.com/google/go-cmp v0.5.8 h1:e6P7q2lk1O+qJJb4BtCQXlK8vWEO8V1ZeuEdJNOqZyg=\ngithub.com/google/go-cmp v0.5.8/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=\ngithub.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0=\ngithub.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=\ngithub.com/gorilla/websocket v1.5.0 h1:PPwGk2jz7EePpoHN/+ClbZu8SPxiqlu12wZP/3sWmnc=\ngithub.com/gorilla/websocket v1.5.0/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=\ngithub.com/grokify/html-strip-tags-go v0.0.1 h1:0fThFwLbW7P/kOiTBs03FsJSV9RM2M/Q/MOnCQxKMo0=\ngithub.com/grokify/html-strip-tags-go v0.0.1/go.mod h1:2Su6romC5/1VXOQMaWL2yb618ARB8iVo6/DR99A6d78=\ngithub.com/jchv/go-winloader v0.0.0-20210711035445-715c2860da7e h1:Q3+PugElBCf4PFpxhErSzU3/PY5sFL5Z6rfv4AbGAck=\ngithub.com/jchv/go-winloader v0.0.0-20210711035445-715c2860da7e/go.mod h1:alcuEEnZsY1WQsagKhZDsoPCRoOijYqhZvPwLG0kzVs=\ngithub.com/joho/godotenv v1.5.1 h1:7eLL/+HRGLY0ldzfGMeQkb7vMd0as4CfYvUVzLqw0N0=\ngithub.com/joho/godotenv v1.5.1/go.mod h1:f4LDr5Voq0i2e/R5DDNOoa2zzDfwtkZa6DnEwAbqwq4=\ngithub.com/josephspurrier/goversioninfo v1.4.0 h1:Puhl12NSHUSALHSuzYwPYQkqa2E1+7SrtAPJorKK0C8=\ngithub.com/josephspurrier/goversioninfo v1.4.0/go.mod h1:JWzv5rKQr+MmW+LvM412ToT/IkYDZjaclF2pKDss8IY=\ngithub.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM=\ngithub.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo=\ngithub.com/klauspost/cpuid/v2 v2.2.4 h1:acbojRNwl3o09bUq+yDCtZFc1aiwaAAxtcn8YkZXnvk=\ngithub.com/klauspost/cpuid/v2 v2.2.4/go.mod h1:RVVoqg1df56z8g3pUjL/3lE5UfnlrJX8tyFgg4nqhuY=\ngithub.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=\ngithub.com/kr/pretty v0.3.0 h1:WgNl7dwNpEZ6jJ9k1snq4pZsg7DOEN8hP9Xw0Tsjwk0=\ngithub.com/kr/pretty v0.3.0/go.mod h1:640gp4NfQd8pI5XOwp5fnNeVWj67G7CFk/SaSQn7NBk=\ngithub.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=\ngithub.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=\ngithub.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=\ngithub.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=\ngithub.com/labstack/echo/v4 v4.13.3 h1:pwhpCPrTl5qry5HRdM5FwdXnhXSLSY+WE+YQSeCaafY=\ngithub.com/labstack/echo/v4 v4.13.3/go.mod h1:o90YNEeQWjDozo584l7AwhJMHN0bOC4tAfg+Xox9q5g=\ngithub.com/labstack/gommon v0.4.2 h1:F8qTUNXgG1+6WQmqoUWnz8WiEU60mXVVw0P4ht1WRA0=\ngithub.com/labstack/gommon v0.4.2/go.mod h1:QlUFxVM+SNXhDL/Z7YhocGIBYOiwB0mXm1+1bAPHPyU=\ngithub.com/leaanthony/debme v1.2.1 h1:9Tgwf+kjcrbMQ4WnPcEIUcQuIZYqdWftzZkBr+i/oOc=\ngithub.com/leaanthony/debme v1.2.1/go.mod h1:3V+sCm5tYAgQymvSOfYQ5Xx2JCr+OXiD9Jkw3otUjiA=\ngithub.com/leaanthony/go-ansi-parser v1.6.1 h1:xd8bzARK3dErqkPFtoF9F3/HgN8UQk0ed1YDKpEz01A=\ngithub.com/leaanthony/go-ansi-parser v1.6.1/go.mod h1:+vva/2y4alzVmmIEpk9QDhA7vLC5zKDTRwfZGOp3IWU=\ngithub.com/leaanthony/gosod v1.0.4 h1:YLAbVyd591MRffDgxUOU1NwLhT9T1/YiwjKZpkNFeaI=\ngithub.com/leaanthony/gosod v1.0.4/go.mod h1:GKuIL0zzPj3O1SdWQOdgURSuhkF+Urizzxh26t9f1cw=\ngithub.com/leaanthony/slicer v1.6.0 h1:1RFP5uiPJvT93TAHi+ipd3NACobkW53yUiBqZheE/Js=\ngithub.com/leaanthony/slicer v1.6.0/go.mod h1:o/Iz29g7LN0GqH3aMjWAe90381nyZlDNquK+mtH2Fj8=\ngithub.com/leaanthony/u v1.1.1 h1:TUFjwDGlNX+WuwVEzDqQwC2lOv0P4uhTQw7CMFdiK7M=\ngithub.com/leaanthony/u v1.1.1/go.mod h1:9+o6hejoRljvZ3BzdYlVL0JYCwtnAsVuN9pVTQcaRfI=\ngithub.com/leodido/go-urn v1.2.4 h1:XlAE/cm/ms7TE/VMVoduSpNBoyc2dOxHs5MZSwAN63Q=\ngithub.com/leodido/go-urn v1.2.4/go.mod h1:7ZrI8mTSeBSHl/UaRyKQW1qZeMgak41ANeCNaVckg+4=\ngithub.com/magiconair/properties v1.8.6 h1:5ibWZ6iY0NctNGWo87LalDlEZ6R41TqbbDamhfG/Qzo=\ngithub.com/magiconair/properties v1.8.6/go.mod h1:y3VJvCyxH9uVvJTWEGAELF3aiYNyPKd5NZ3oSwXrF60=\ngithub.com/matryer/is v1.4.0/go.mod h1:8I/i5uYgLzgsgEloJE1U6xx5HkBQpAZvepWuujKwMRU=\ngithub.com/matryer/is v1.4.1 h1:55ehd8zaGABKLXQUe2awZ99BD/PTc2ls+KV/dXphgEQ=\ngithub.com/matryer/is v1.4.1/go.mod h1:8I/i5uYgLzgsgEloJE1U6xx5HkBQpAZvepWuujKwMRU=\ngithub.com/mattn/go-colorable v0.1.9/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc=\ngithub.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA=\ngithub.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg=\ngithub.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU=\ngithub.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94=\ngithub.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM=\ngithub.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY=\ngithub.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y=\ngithub.com/mattn/go-runewidth v0.0.9/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI=\ngithub.com/mattn/go-runewidth v0.0.16 h1:E5ScNMtiwvlvB5paMFdw9p4kSQzbXFikJ5SQO6TULQc=\ngithub.com/mattn/go-runewidth v0.0.16/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w=\ngithub.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg=\ngithub.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=\ngithub.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M=\ngithub.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk=\ngithub.com/ncruces/zenity v0.10.10 h1:V/rtAhr5QLdDThahOkm7EYlnw4RuEsf7oN+Xb6lz1j0=\ngithub.com/ncruces/zenity v0.10.10/go.mod h1:k3k4hJ4Wt1MUbeV48y+Gbl7Fp9skfGszN/xtKmuvhZk=\ngithub.com/olekukonko/tablewriter v0.0.5 h1:P2Ga83D34wi1o9J6Wh1mRuqd4mF/x/lgBS7N7AbDhec=\ngithub.com/olekukonko/tablewriter v0.0.5/go.mod h1:hPp6KlRPjbx+hW8ykQs1w3UBbZlj6HuIJcUGPhkA7kY=\ngithub.com/pelletier/go-toml/v2 v2.0.8 h1:0ctb6s9mE31h0/lhu+J6OPmVeDxJn+kYnJc2jZR9tGQ=\ngithub.com/pelletier/go-toml/v2 v2.0.8/go.mod h1:vuYfssBdrU2XDZ9bYydBu6t+6a6PYNcZljzZR9VXg+4=\ngithub.com/pkg/browser v0.0.0-20240102092130-5ac0b6a4141c h1:+mdjkGKdHQG3305AYmdv1U2eRNDiU2ErMBj1gwrq8eQ=\ngithub.com/pkg/browser v0.0.0-20240102092130-5ac0b6a4141c/go.mod h1:7rwL4CYBLnjLxUqIJNnCWiEdr3bn6IUYi15bNlnbCCU=\ngithub.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e/go.mod h1:pJLUxLENpZxwdsKMEsNbx1VGcRFpLqf3715MtcvvzbA=\ngithub.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=\ngithub.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=\ngithub.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=\ngithub.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=\ngithub.com/randall77/makefat v0.0.0-20210315173500-7ddd0e42c844 h1:GranzK4hv1/pqTIhMTXt2X8MmMOuH3hMeUR0o9SP5yc=\ngithub.com/randall77/makefat v0.0.0-20210315173500-7ddd0e42c844/go.mod h1:T1TLSfyWVBRXVGzWd0o9BI4kfoO9InEgfQe4NV3mLz8=\ngithub.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc=\ngithub.com/rivo/uniseg v0.4.7 h1:WUdvkW8uEhrYfLC4ZzdpI2ztxP1I582+49Oc5Mq64VQ=\ngithub.com/rivo/uniseg v0.4.7/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88=\ngithub.com/rogpeppe/go-internal v1.6.1/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc=\ngithub.com/rogpeppe/go-internal v1.8.0 h1:FCbCCtXNOY3UtUuHUYaghJg4y7Fd14rXifAYUAtL9R8=\ngithub.com/rogpeppe/go-internal v1.8.0/go.mod h1:WmiCO8CzOY8rg0OYDC4/i/2WRWAB6poM+XZ2dLUbcbE=\ngithub.com/samber/lo v1.49.1 h1:4BIFyVfuQSEpluc7Fua+j1NolZHiEHEpaSEKdsH0tew=\ngithub.com/samber/lo v1.49.1/go.mod h1:dO6KHFzUKXgP8LDhU0oI8d2hekjXnGOu0DB8Jecxd6o=\ngithub.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=\ngithub.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=\ngithub.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=\ngithub.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOfJA=\ngithub.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=\ngithub.com/tkrajina/go-reflector v0.5.8 h1:yPADHrwmUbMq4RGEyaOUpz2H90sRsETNVpjzo3DLVQQ=\ngithub.com/tkrajina/go-reflector v0.5.8/go.mod h1:ECbqLgccecY5kPmPmXg1MrHW585yMcDkVl6IvJe64T4=\ngithub.com/twitchyliquid64/golang-asm v0.15.1 h1:SU5vSMR7hnwNxj24w34ZyCi/FmDZTkS4MhqMhdFk5YI=\ngithub.com/twitchyliquid64/golang-asm v0.15.1/go.mod h1:a1lVb/DtPvCB8fslRZhAngC2+aY1QWCk3Cedj/Gdt08=\ngithub.com/ugorji/go/codec v1.2.11 h1:BMaWp1Bb6fHwEtbplGBGJ498wD+LKlNSl25MjdZY4dU=\ngithub.com/ugorji/go/codec v1.2.11/go.mod h1:UNopzCgEMSXjBc6AOMqYvWC1ktqTAfzJZUZgYf6w6lg=\ngithub.com/valyala/bytebufferpool v1.0.0 h1:GqA5TC/0021Y/b9FG4Oi9Mr3q7XYx6KllzawFIhcdPw=\ngithub.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc=\ngithub.com/valyala/fasttemplate v1.2.2 h1:lxLXG0uE3Qnshl9QyaK6XJxMXlQZELvChBOCmQD0Loo=\ngithub.com/valyala/fasttemplate v1.2.2/go.mod h1:KHLXt3tVN2HBp8eijSv/kGJopbvo7S+qRAEEKiv+SiQ=\ngithub.com/wailsapp/go-webview2 v1.0.19 h1:7U3QcDj1PrBPaxJNCui2k1SkWml+Q5kvFUFyTImA6NU=\ngithub.com/wailsapp/go-webview2 v1.0.19/go.mod h1:qJmWAmAmaniuKGZPWwne+uor3AHMB5PFhqiK0Bbj8kc=\ngithub.com/wailsapp/mimetype v1.4.1 h1:pQN9ycO7uo4vsUUuPeHEYoUkLVkaRntMnHJxVwYhwHs=\ngithub.com/wailsapp/mimetype v1.4.1/go.mod h1:9aV5k31bBOv5z6u+QP8TltzvNGJPmNJD4XlAL3U+j3o=\ngithub.com/wailsapp/wails/v2 v2.10.1 h1:QWHvWMXII2nI/nXz77gpPG8P3ehl6zKe+u4su5BWIns=\ngithub.com/wailsapp/wails/v2 v2.10.1/go.mod h1:zrebnFV6MQf9kx8HI4iAv63vsR5v67oS7GTEZ7Pz1TY=\ngithub.com/yuin/goldmark v1.4.0/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k=\ngithub.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY=\ngo.opentelemetry.io/otel v1.7.0 h1:Z2lA3Tdch0iDcrhJXDIlC94XE+bxok1F9B+4Lz/lGsM=\ngo.opentelemetry.io/otel v1.7.0/go.mod h1:5BdUoMIz5WEs0vt0CUEMtSSaTSHBBVwrhnz7+nrD5xk=\ngo.opentelemetry.io/otel/sdk v1.7.0 h1:4OmStpcKVOfvDOgCt7UriAPtKolwIhxpnSNI/yK+1B0=\ngo.opentelemetry.io/otel/sdk v1.7.0/go.mod h1:uTEOTwaqIVuTGiJN7ii13Ibp75wJmYUDe374q6cZwUU=\ngo.opentelemetry.io/otel/trace v1.7.0 h1:O37Iogk1lEkMRXewVtZ1BBTVn5JEp8GrJvP92bJqC6o=\ngo.opentelemetry.io/otel/trace v1.7.0/go.mod h1:fzLSB9nqR2eXzxPXb2JW9IKE+ScyXA48yyE4TNvoHqU=\ngo.uber.org/goleak v1.2.1 h1:NBol2c7O1ZokfZ0LEU9K6Whx/KnwvepVetCUhtKja4A=\ngo.uber.org/goleak v1.2.1/go.mod h1:qlT2yGI9QafXHhZZLxlSuNsMw3FFLxBr+tBRlmO1xH4=\ngolang.org/x/arch v0.3.0 h1:02VY4/ZcO/gBOH6PUaoiptASxtXU10jazRCP865E97k=\ngolang.org/x/arch v0.3.0/go.mod h1:5om86z9Hs0C8fWVUuoMHwpExlXzs5Tkyp9hOrfG7pp8=\ngolang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=\ngolang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=\ngolang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=\ngolang.org/x/crypto v0.33.0 h1:IOBPskki6Lysi0lo9qQvbxiQ+FvsCC/YWOecCHAixus=\ngolang.org/x/crypto v0.33.0/go.mod h1:bVdXmD7IV/4GdElGPozy6U7lWdRXA4qyRVGJV57uQ5M=\ngolang.org/x/image v0.12.0 h1:w13vZbU4o5rKOFFR8y7M+c4A5jXDC0uXTdHYRP8X2DQ=\ngolang.org/x/image v0.12.0/go.mod h1:Lu90jvHG7GfemOIcldsh9A2hS01ocl6oNO7ype5mEnk=\ngolang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=\ngolang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4=\ngolang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs=\ngolang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=\ngolang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=\ngolang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=\ngolang.org/x/net v0.0.0-20210505024714-0287a6fb4125/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=\ngolang.org/x/net v0.0.0-20210805182204-aaa1db679c0d/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=\ngolang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=\ngolang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c=\ngolang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs=\ngolang.org/x/net v0.35.0 h1:T5GQRQb2y08kTAByq9L4/bz8cipCdA8FbRTXewonqY8=\ngolang.org/x/net v0.35.0/go.mod h1:EglIi67kWsHKlRzzVMUD93VMSWGFOMSZgxFjparz1Qk=\ngolang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=\ngolang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=\ngolang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=\ngolang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=\ngolang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=\ngolang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=\ngolang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=\ngolang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=\ngolang.org/x/sys v0.0.0-20200810151505-1b9f1253b3ed/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=\ngolang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=\ngolang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=\ngolang.org/x/sys v0.0.0-20210423185535-09eb48e85fd7/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=\ngolang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=\ngolang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=\ngolang.org/x/sys v0.0.0-20210809222454-d867a43fc93e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=\ngolang.org/x/sys v0.0.0-20220412211240-33da011f77ad/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=\ngolang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=\ngolang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=\ngolang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=\ngolang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=\ngolang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=\ngolang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=\ngolang.org/x/sys v0.30.0 h1:QjkSwP/36a20jFYWkSue1YwXzLmsV5Gfq7Eiy72C1uc=\ngolang.org/x/sys v0.30.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=\ngolang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=\ngolang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=\ngolang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k=\ngolang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=\ngolang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=\ngolang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=\ngolang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=\ngolang.org/x/text v0.3.8-0.20211105212822-18b340fc7af2/go.mod h1:EFNZuWvGYxIRUEX+K8UmCFwYmZjqcrnq15ZuVldZkZ0=\ngolang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=\ngolang.org/x/text v0.13.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE=\ngolang.org/x/text v0.22.0 h1:bofq7m3/HAFvbF51jz3Q9wLg3jkvSPuiZu/pD1XwgtM=\ngolang.org/x/text v0.22.0/go.mod h1:YRoo4H8PVmsu+E3Ou7cqLVH8oXWIHVoX0jqUWALQhfY=\ngolang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=\ngolang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=\ngolang.org/x/tools v0.1.7/go.mod h1:LGqMHiF4EqQNHR1JncWGqT5BVaXmza+X+BDGol+dOxo=\ngolang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc=\ngolang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU=\ngolang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=\ngolang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=\ngolang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=\ngolang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=\ngoogle.golang.org/protobuf v1.30.0 h1:kPPoIgf3TsEvrm0PFe15JQ+570QVxYzEvvHqChK+cng=\ngoogle.golang.org/protobuf v1.30.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I=\ngopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=\ngopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=\ngopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI=\ngopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=\ngopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=\ngopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=\ngopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=\n"
  },
  {
    "path": "GoEasyDesigner/main.go",
    "content": "package main\n\nimport (\n\t\"changeme/mymodel\"\n\t\"embed\"\n\t\"fmt\"\n\t\"os\"\n\t\"strings\"\n\n\t\"github.com/wailsapp/wails/v2\"\n\t\"github.com/wailsapp/wails/v2/pkg/options\"\n\t\"github.com/wailsapp/wails/v2/pkg/options/assetserver\"\n)\n\n//go:embed all:frontend/dist\nvar assets embed.FS\n\nfunc main() {\n\t//获取传入的命令行参数\n\targs := os.Args\n\t// Create an instance of the app structure\n\tapp := NewApp()\n\tif len(args) > 2 {\n\t\t设计文件路径 := args[1]\n\t\t插件端口号 := args[2]\n\t\tapp.S设计文件路径 = strings.Replace(设计文件路径, \"文件路径=\", \"\", 1)\n\t\tapp.IDE插件端口号 = strings.Replace(插件端口号, \"port=\", \"\", 1)\n\t\tfmt.Println(\"设计文件路径\", 设计文件路径)\n\t\tfmt.Println(\"插件端口号\", 插件端口号)\n\t}\n\n\tversion := mymodel.Version\n\t// Create application with options\n\terr := wails.Run(&options.App{\n\t\tTitle:  \"GoEasyDesigner 窗口设计师 \" + version,\n\t\tWidth:  1280,\n\t\tHeight: 768,\n\t\tAssetServer: &assetserver.Options{\n\t\t\tAssets: assets,\n\t\t},\n\t\tBackgroundColour: &options.RGBA{R: 255, G: 255, B: 255, A: 1},\n\t\tOnStartup:        app.startup,\n\t\tBind: []interface{}{\n\t\t\tapp,\n\t\t},\n\t})\n\n\tif err != nil {\n\t\tprintln(\"Error:\", err.Error())\n\t}\n}\n"
  },
  {
    "path": "GoEasyDesigner/myfunc/myfunc.go",
    "content": "package myfunc\n\nimport (\n\t\"fmt\"\n\t\"github.com/duolabmeng6/goefun/ecore\"\n\t. \"github.com/duolabmeng6/goefun/ehttp\"\n\t\"regexp\"\n\t\"runtime\"\n\t\"strings\"\n)\n\nfunc InsertCode(jscode string, insertionCode string) string {\n\t// 获取函数名称 窗口.按钮3被点击 = function () { 截取 按钮3被点击\n\t函数名称 := insertionCode[strings.Index(insertionCode, \".\")+1 : strings.Index(insertionCode, \"=\")]\n\t// 检查是否已经存在\n\tif strings.Contains(jscode, 函数名称) {\n\t\treturn jscode\n\t}\n\t// Define the regular expression pattern\n\tpattern := `(//事件函数位置不要删除[^\\n]*)`\n\n\t// Compile the regular expression\n\tre := regexp.MustCompile(pattern)\n\n\t// Replace the matching pattern with the insertion code\n\tresult := re.ReplaceAllString(jscode, insertionCode+\"$1\")\n\n\treturn result\n}\n\nfunc E发送跳转代码到ide(插件URL地址 string, 文件路径 string, 跳转位置 int) bool {\n\t文件名 := ecore.E文件取文件名(文件路径, true)\n\t文件名 = ecore.URL编码(文件名)\n\t跳转URL := 插件URL地址 + \"/myserver?type=target&file=\" + 文件名 + \"&def=\" + ecore.E到文本(跳转位置)\n\tecore.E调试输出(\"调用pycharm代码跳转\", 跳转URL)\n\teh := NewHttp()\n\t返回文本, err := eh.Get(跳转URL)\n\tprintln(\"调用pycharm代码跳转\", 返回文本)\n\tif err != nil {\n\t\tprintln(\"调用pycharm代码跳转\", err.Error())\n\t\treturn false\n\t}\n\treturn true\n}\n\n// 计算跳转位置\nfunc 计算跳转位置(文件内容 string, 跳转字符串 string) (int, int, bool) {\n\t跳转位置行 := 0\n\t跳转位置列 := 0\n\n\tif 文件内容 != \"\" && 跳转字符串 != \"\" {\n\t\tindex := strings.Index(文件内容, 跳转字符串)\n\t\tif index != -1 {\n\t\t\tlines := strings.Split(文件内容, \"\\n\")\n\t\t\tcurrent := 0\n\t\t\tfor i, line := range lines {\n\t\t\t\tlineLength := len(line) + 1 // 加 1 是为了算上换行符\n\t\t\t\tif current+lineLength > index {\n\t\t\t\t\t跳转位置行 = i + 1           // 行号从 1 开始\n\t\t\t\t\t跳转位置列 = index - current // 列号从 0 开始\n\t\t\t\t\treturn 跳转位置行, 跳转位置列, true\n\t\t\t\t}\n\t\t\t\tcurrent += lineLength\n\t\t\t}\n\t\t} else {\n\t\t\tecore.E调试输出(\"未找到跳转字符串\", 跳转字符串)\n\t\t\treturn 0, 0, false\n\t\t}\n\t} else {\n\t\tecore.E调试输出(\"文件内容或跳转字符串为空\", 跳转字符串)\n\t\treturn 0, 0, false\n\t}\n\n\treturn 0, 0, false\n}\n\nfunc E发送跳转代码到ide_命令行方式(ide string, 文件路径 string, 跳转字符串 string) bool {\n\t文件内容 := ecore.E读入文本(文件路径)\n\t跳转位置行, 跳转位置列, 成功 := 计算跳转位置(文件内容, 跳转字符串)\n\tif !成功 {\n\t\treturn false\n\t}\n\t跳转URL := \"\"\n\tif ide == \"vscode\" {\n\t\t跳转URL = fmt.Sprintf(\"code -g %s:%d:%d\", 文件路径, 跳转位置行, 跳转位置列)\n\t} else if ide == \"goland\" {\n\t\t跳转URL = fmt.Sprintf(\"goland --line %d %s\", 跳转位置行, 文件路径)\n\t} else if ide == \"webstorm\" {\n\t\t跳转URL = fmt.Sprintf(\"webstorm --line %d %s\", 跳转位置行, 文件路径)\n\t} else if ide == \"cursor\" {\n\t\t跳转URL = fmt.Sprintf(\"cursor -g %s:%d:%d\", 文件路径, 跳转位置行, 跳转位置列)\n\t} else {\n\t\tecore.E调试输出(\"未知的IDE\", ide)\n\t}\n\tecore.E调试输出(\"调用代码跳转\", 跳转URL)\n\tecore.E运行_mac(跳转URL, true, func(line string) {\n\t\tprintln(line)\n\t})\n\treturn true\n}\n\nfunc E运行命令(执行目录 string, 执行命令 string, 回调函数 func(回显内容 string)) string {\n\t命令 := \"cd \" + 执行目录 + \" && \" + 执行命令\n\tprintln(\"执行命令\", 命令)\n\treturn ecore.E运行_mac(命令, true, func(line string) {\n\t\t//println(line)\n\t\t回调函数(line)\n\t})\n}\n\nfunc E是否为window系统() bool {\n\treturn runtime.GOOS == \"windows\"\n}\n\nfunc E是否为macOS系统() bool {\n\treturn runtime.GOOS == \"darwin\"\n}\n\nfunc E是否为UbuntuLinux系统() bool {\n\treturn runtime.GOOS == \"linux\"\n}\n"
  },
  {
    "path": "GoEasyDesigner/myfunc/myfunc_test.go",
    "content": "package myfunc\n\nimport (\n\t\"fmt\"\n\t\"regexp\"\n\t\"testing\"\n)\n\nfunc TestInsertCode(t *testing.T) {\n\tjscode := `\nexport function 绑定窗口事件(窗口) {\n    窗口.窗口创建完毕 = function () {\n        console.log(\"窗口创建完毕\")\n    }\n    窗口.按钮1被点击 = function () {\n        console.log(\"按钮1被点击了\")\n        窗口.组件.按钮1.标题 = \"祖国你好222\"\n    }\n\n\t\n\t//事件函数位置不要删除\n\n    窗口.按钮1被点击xxx = function () {\n        console.log(\"按钮1被点击了\")\n        窗口.组件.按钮1.标题 = \"祖国你好222\"\n    }\n}\n`\n\tinsertionCode := `\n    窗口.按钮2被点击 = function () {\n        console.log(\"按钮2被点击\")\n    }\n\t`\n\tresult := InsertCode(jscode, insertionCode)\n\tfmt.Println(result)\n\tinsertionCode2 := `\n    窗口.按钮3被点击 = function () {\n        console.log(\"按钮3被点击\")\n    }\n\t`\n\tresult2 := InsertCode(result, insertionCode2)\n\tfmt.Println(result2)\n}\n\nfunc TestE发送跳转代码到ide(t *testing.T) {\n\t插件URL地址 := \"http://127.0.0.1:13403\"\n\t文件路径 := \"C:\\\\eview\\\\v2\\\\wails-demo\\\\frontend\\\\src\\\\event.js\"\n\t跳转位置 := 1\n\tE发送跳转代码到ide(插件URL地址, 文件路径, 跳转位置)\n}\n\nfunc TestE发送跳转代码到ide_命令行方式(t *testing.T) {\n\t文件路径 := \"/Users/ll/Documents/GitHub/GoEasyDesigner/GoEasyDesigner/myfunc/myfunc_test.go\"\n\t//E发送跳转代码到ide_vscode(\"code\",文件路径, \"wails dev\")\n\tE发送跳转代码到ide_命令行方式(\"cursor\", 文件路径, \"wails dev\")\n}\n\nfunc TestE运行命令(t *testing.T) {\n\t项目根目录 := \"/Users/ll/Documents/GitHub/GoEasyDesigner/wails-demo\"\n\t执行命令 := \"wails dev\"\n\tE运行命令(项目根目录, 执行命令, func(回显内容 string) {\n\t\tregex := regexp.MustCompile(\"\\x1b\\\\[[0-9;]*m\")\n\t\tcleaned := regex.ReplaceAllString(回显内容, \"\")\n\t\tprintln(\"回显内容\", cleaned)\n\t})\n}\nfunc TestE运行命令2(t *testing.T) {\n\t//mymodel.E检查更新()\n}\n"
  },
  {
    "path": "GoEasyDesigner/mymodel/Version.go",
    "content": "package mymodel\n\nvar Version = `v0.0.1`"
  },
  {
    "path": "GoEasyDesigner/mymodel/git项目操作.go",
    "content": "package mymodel\n\nimport (\n\t\"fmt\"\n\t\"github.com/duolabmeng6/goefun/ecore\"\n\t\"github.com/ncruces/zenity\"\n)\n\nfunc E下载github项目(github项目地址, 保存目录 string) error {\n\t// github项目地址 = https://github.com/duolabmeng6/wails-template-vue-go-easy\n\t// 保存目录 = d:/test\n\t// 我希望通过https下载github的项目到指定的目录上\n\t//修改 GitHub 项目地址以指向 ZIP 压缩包\n\t//检查github项目地址 是否包含https://\n\tfmt.Println(\"下载URL\", github项目地址)\n\n\tname := ecore.E文件取文件名(github项目地址, false)\n\tsavePath := 保存目录 + \"/\" + name + \"_project.zip\"\n\t删除文件 := false\n\tif ecore.E判断文本(github项目地址, \"https://\") {\n\t\tzipURL := github项目地址 + \"/archive/refs/heads/main.zip\"\n\t\tprogress, _ := zenity.Progress(\n\t\t\tzenity.Title(\"下载项目中...\"),\n\t\t\tzenity.MaxValue(100), // 设置最大进度值为100\n\t\t)\n\n\t\tprogress.Text(\"正在下载...\")\n\n\t\terr := E下载带进度回调(zipURL, savePath, func(进度 float64) {\n\t\t\tfmt.Println(\"正在下载...\", 进度)\n\t\t\tprogress.Text(\"正在下载...\" + fmt.Sprintf(\"%.2f\", 进度) + \"%\")\n\t\t\tprogress.Value(int(进度))\n\t\t})\n\t\tif err != nil {\n\t\t\tfmt.Println(\"下载出错:\", err)\n\t\t\tzenity.Info(\"下载错误,检查你的网络\")\n\t\t\tprogress.Close()\n\t\t\treturn err\n\t\t}\n\t\tprogress.Text(\"下载完成 即将完成更新\")\n\t\tif progress.Close() != nil {\n\t\t\tfmt.Println(\"点击了取消\")\n\t\t\treturn nil\n\t\t}\n\t\tfmt.Println(\"下载完成了\")\n\t\t删除文件 = true\n\t} else {\n\t\t//检查文件是否存在\n\t\tif !ecore.E文件是否存在(github项目地址) {\n\t\t\tfmt.Println(\"文件不存在\")\n\t\t\treturn nil\n\t\t}\n\t\tsavePath = github项目地址\n\t}\n\n\tif !zip解压2(savePath, 保存目录, nil, func(解压路径 string) string {\n\t\tprintln(\"解压路径\", 解压路径)\n\t\t//wails-template-vue-go-easy-main/.gitignore\n\t\t// 删除前面的文件夹\n\t\t解压路径 = ecore.StrCut(解压路径, \"/$\")\n\n\t\treturn 解压路径\n\t}) {\n\t\tfmt.Println(\"解压失败\")\n\t\treturn nil\n\t}\n\tif 删除文件 {\n\t\tecore.E删除文件(savePath)\n\t}\n\n\treturn nil\n}\n"
  },
  {
    "path": "GoEasyDesigner/mymodel/git项目操作_test.go",
    "content": "package mymodel\n\nimport (\n\t\"github.com/duolabmeng6/goefun/ecore\"\n\t\"testing\"\n)\n\nfunc TestE下载github项目(t *testing.T) {\n\tE下载github项目(\"https://github.com/duolabmeng6/wails-template-vue-go-easy\", \"d:/test/app\")\n\t//https://github.com/duolabmeng6/wails-template-vue-go-easy/archive/refs/heads/main.zip\n}\n\nfunc TestE搜索design文件(t *testing.T) {\n\t//func E文件枚举(欲寻找的目录 string, 欲寻找的文件名 string, files *[]string, 是否带路径 bool, 是否遍历子目录 bool) error {\n\tvar files []string\n\tecore.E文件枚举(\"C:\\\\eview\\\\project\\\\myporject\", \"design.json\", &files, true, true)\n\tfor _, v := range files {\n\t\tprintln(v)\n\t}\n}\n"
  },
  {
    "path": "GoEasyDesigner/mymodel/文件监视模块.go",
    "content": "package mymodel\n\nimport (\n\t\"fmt\"\n\t\"github.com/fsnotify/fsnotify\"\n\t\"sync\"\n)\n\ntype E文件监视模块接口 interface {\n\t开始() error\n\t停止() error\n\t清空() error\n\t添加监视文件(文件路径 string, 处理函数 func(文件路径 string)) error\n\t删除监视文件(文件路径 string) error\n}\n\ntype E文件监视模块 struct {\n\twatcher *fsnotify.Watcher\n\t监视文件列表  map[string]func(文件路径 string)\n\tmutex   sync.Mutex\n}\n\nfunc New文件监视模块() (*E文件监视模块, error) {\n\twatcher, err := fsnotify.NewWatcher()\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tm := &E文件监视模块{\n\t\twatcher: watcher,\n\t\t监视文件列表:  make(map[string]func(文件路径 string)),\n\t}\n\n\treturn m, nil\n}\n\nfunc (m *E文件监视模块) E开始() error {\n\tdone := make(chan bool)\n\n\tgo func() {\n\t\tfor {\n\t\t\tselect {\n\t\t\tcase event, ok := <-m.watcher.Events:\n\t\t\t\tif !ok {\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t\tif event.Op&fsnotify.Write == fsnotify.Write {\n\t\t\t\t\tm.mutex.Lock()\n\t\t\t\t\t处理函数, 存在 := m.监视文件列表[event.Name]\n\t\t\t\t\tm.mutex.Unlock()\n\n\t\t\t\t\tif 存在 {\n\t\t\t\t\t\tfmt.Println(\"文件被修改:\", event.Name)\n\t\t\t\t\t\t处理函数(event.Name)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\tcase err, ok := <-m.watcher.Errors:\n\t\t\t\tif !ok {\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t\tfmt.Println(\"错误:\", err)\n\t\t\t}\n\t\t}\n\t}()\n\n\t//err := m.watcher.Add(\"/path/to/default/file.txt\") // 可以添加默认监视的文件路径\n\t//if err != nil {\n\t//\treturn err\n\t//}\n\n\t<-done\n\treturn nil\n}\n\nfunc (m *E文件监视模块) E停止() error {\n\treturn m.watcher.Close()\n}\nfunc (m *E文件监视模块) E清空() error {\n\tm.mutex.Lock()\n\tdefer m.mutex.Unlock()\n\n\tfor 文件路径 := range m.监视文件列表 {\n\t\terr := m.watcher.Remove(文件路径)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\n\tm.监视文件列表 = make(map[string]func(文件路径 string))\n\treturn nil\n}\n\nfunc (m *E文件监视模块) E添加监视文件(文件路径 string, 处理函数 func(文件路径 string)) error {\n\tm.mutex.Lock()\n\tdefer m.mutex.Unlock()\n\t//检查是否已经添加过\n\t_, 存在 := m.监视文件列表[文件路径]\n\tif 存在 {\n\t\treturn nil\n\t}\n\terr := m.watcher.Add(文件路径)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tm.监视文件列表[文件路径] = 处理函数\n\treturn nil\n}\n\nfunc (m *E文件监视模块) E删除监视文件(文件路径 string) error {\n\tm.mutex.Lock()\n\tdefer m.mutex.Unlock()\n\n\terr := m.watcher.Remove(文件路径)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tdelete(m.监视文件列表, 文件路径)\n\treturn nil\n}\n"
  },
  {
    "path": "GoEasyDesigner/mymodel/文件监视模块_test.go",
    "content": "package mymodel\n\nimport (\n\t\"fmt\"\n\t\"testing\"\n\t\"time\"\n)\n\nfunc TestE文件监视模块(t *testing.T) {\n\t文件监视, _ := New文件监视模块()\n\tgo func() {\n\t\t文件监视.E开始()\n\t}()\n\n\t文件监视.E添加监视文件(\"/Users/ll/Documents/GitHub/projection_screen_tv/easyToTV/frontend/src/win/event.js\", func(文件路径 string) {\n\t\tfmt.Println(\"文件被修改，触发处理函数:\", 文件路径)\n\t\t// 在这里可以添加通知你的程序的逻辑\n\t})\n\n\t文件监视.E添加监视文件(\"/Users/ll/Documents/GitHub/projection_screen_tv/easyToTV/frontend/src/App.vue\", func(文件路径 string) {\n\t\tfmt.Println(\"文件被修改，触发处理函数:\", 文件路径)\n\t})\n\n\ttime.Sleep(10 * time.Second)\n\tprintln(\"删除监视\")\n\n\t文件监视.E删除监视文件(\"/Users/ll/Documents/GitHub/projection_screen_tv/easyToTV/frontend/src/App.vue\")\n\n\ttime.Sleep(60 * time.Second)\n\n}\n"
  },
  {
    "path": "GoEasyDesigner/mymodel/自动更新模块.go",
    "content": "package mymodel\n\nimport (\n\t\"archive/zip\"\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"github.com/duolabmeng6/goefun/ecore\"\n\t\"github.com/ncruces/zenity\"\n\t\"io\"\n\t\"net/http\"\n\t\"os\"\n\t\"os/exec\"\n\t\"os/user\"\n\t\"path/filepath\"\n\t\"runtime\"\n\t\"strings\"\n\t\"time\"\n)\n\nvar 应用名称 = \"GoEasyDesigner\"\nvar owner = \"duolabmeng6\"   // GitHub 仓库的所有者\nvar repo = \"GoEasyDesigner\" // GitHub 仓库的名称\n\ntype GithubJSONData []struct {\n\tURL       string `json:\"url\"`\n\tAssetsURL string `json:\"assets_url\"`\n\tUploadURL string `json:\"upload_url\"`\n\tHTMLURL   string `json:\"html_url\"`\n\tID        int    `json:\"id\"`\n\tAuthor    struct {\n\t\tLogin             string `json:\"login\"`\n\t\tID                int    `json:\"id\"`\n\t\tNodeID            string `json:\"node_id\"`\n\t\tAvatarURL         string `json:\"avatar_url\"`\n\t\tGravatarID        string `json:\"gravatar_id\"`\n\t\tURL               string `json:\"url\"`\n\t\tHTMLURL           string `json:\"html_url\"`\n\t\tFollowersURL      string `json:\"followers_url\"`\n\t\tFollowingURL      string `json:\"following_url\"`\n\t\tGistsURL          string `json:\"gists_url\"`\n\t\tStarredURL        string `json:\"starred_url\"`\n\t\tSubscriptionsURL  string `json:\"subscriptions_url\"`\n\t\tOrganizationsURL  string `json:\"organizations_url\"`\n\t\tReposURL          string `json:\"repos_url\"`\n\t\tEventsURL         string `json:\"events_url\"`\n\t\tReceivedEventsURL string `json:\"received_events_url\"`\n\t\tType              string `json:\"type\"`\n\t\tSiteAdmin         bool   `json:\"site_admin\"`\n\t} `json:\"author\"`\n\tNodeID          string    `json:\"node_id\"`\n\tTagName         string    `json:\"tag_name\"`\n\tTargetCommitish string    `json:\"target_commitish\"`\n\tName            string    `json:\"name\"`\n\tDraft           bool      `json:\"draft\"`\n\tPrerelease      bool      `json:\"prerelease\"`\n\tCreatedAt       time.Time `json:\"created_at\"`\n\tPublishedAt     time.Time `json:\"published_at\"`\n\tAssets          []struct {\n\t\tURL      string `json:\"url\"`\n\t\tID       int    `json:\"id\"`\n\t\tNodeID   string `json:\"node_id\"`\n\t\tName     string `json:\"name\"`\n\t\tLabel    string `json:\"label\"`\n\t\tUploader struct {\n\t\t\tLogin             string `json:\"login\"`\n\t\t\tID                int    `json:\"id\"`\n\t\t\tNodeID            string `json:\"node_id\"`\n\t\t\tAvatarURL         string `json:\"avatar_url\"`\n\t\t\tGravatarID        string `json:\"gravatar_id\"`\n\t\t\tURL               string `json:\"url\"`\n\t\t\tHTMLURL           string `json:\"html_url\"`\n\t\t\tFollowersURL      string `json:\"followers_url\"`\n\t\t\tFollowingURL      string `json:\"following_url\"`\n\t\t\tGistsURL          string `json:\"gists_url\"`\n\t\t\tStarredURL        string `json:\"starred_url\"`\n\t\t\tSubscriptionsURL  string `json:\"subscriptions_url\"`\n\t\t\tOrganizationsURL  string `json:\"organizations_url\"`\n\t\t\tReposURL          string `json:\"repos_url\"`\n\t\t\tEventsURL         string `json:\"events_url\"`\n\t\t\tReceivedEventsURL string `json:\"received_events_url\"`\n\t\t\tType              string `json:\"type\"`\n\t\t\tSiteAdmin         bool   `json:\"site_admin\"`\n\t\t} `json:\"uploader\"`\n\t\tContentType        string    `json:\"content_type\"`\n\t\tState              string    `json:\"state\"`\n\t\tSize               int       `json:\"size\"`\n\t\tDownloadCount      int       `json:\"download_count\"`\n\t\tCreatedAt          time.Time `json:\"created_at\"`\n\t\tUpdatedAt          time.Time `json:\"updated_at\"`\n\t\tBrowserDownloadURL string    `json:\"browser_download_url\"`\n\t} `json:\"assets\"`\n\tTarballURL string `json:\"tarball_url\"`\n\tZipballURL string `json:\"zipball_url\"`\n\tBody       string `json:\"body\"`\n}\ntype ReleaseInfo struct {\n\tVersion        string   `json:\"版本号\"`\n\tDownloadURLs   []string `json:\"下载地址列表\"`\n\tMacDownloadURL string   `json:\"mac下载地址\"`\n\tWinDownloadURL string   `json:\"win下载地址\"`\n\tChangelog      string   `json:\"更新内容\"`\n\tReleaseTime    string   `json:\"发布时间\"`\n}\n\nfunc E获取Github仓库Releases版本和更新内容() *ReleaseInfo {\n\t//owner := \"duolabmeng6\"   // GitHub 仓库的所有者\n\t//repo := \"GoEasyDesigner\" // GitHub 仓库的名称\n\tvar urls []string\n\t_url := fmt.Sprintf(\"https://api.github.com/repos/%s/%s/releases\", owner, repo)\n\turls = append(urls, _url)\n\t//_url = fmt.Sprintf(\"https://go.kenhong.com/releases_latest.json\")\n\t//urls = append(urls, _url)\n\t// 访问urls中的内容 如果第一个访问失败了 就继续下一个\n\tvar resp *http.Response\n\tvar err error\n\tfor _, url := range urls {\n\t\tresp, err = http.Get(url)\n\t\tif err == nil {\n\t\t\tif resp.StatusCode != http.StatusOK {\n\t\t\t\tfmt.Println(\"请求失败:\", resp.Status, url)\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tbreak\n\t\t}\n\t\tfmt.Println(\"请求失败:\", err)\n\t}\n\tdefer resp.Body.Close()\n\n\tbody, err := io.ReadAll(resp.Body)\n\tif err != nil {\n\t\tfmt.Println(\"读取响应失败:\", err)\n\t\treturn nil\n\t}\n\t//var err error\n\t//body := ecore.E读入文件(\"/Users/ll/Desktop/goproject/v3fanyi/mymodel/githubdata.json\")\n\n\tvar releases GithubJSONData\n\n\terr = json.Unmarshal(body, &releases)\n\tif err != nil {\n\t\tfmt.Println(\"解析响应失败:\", err)\n\t\treturn nil\n\t}\n\tif len(releases) < 0 {\n\t\treturn nil\n\t}\n\n\t//latestRelease := releases[0]\n\t//version := latestRelease.TagName\n\t//fmt.Println(\"最新的 Release 版本号:\", version)\n\t//fmt.Println(\"最新的 Release 版本号:\", latestRelease.Body)\n\t//// 循环获取 文件名和下载地址\n\t//for _, asset := range latestRelease.Assets {\n\t//\tfmt.Println(asset.Name, asset.BrowserDownloadURL)\n\t//}\n\n\tlatestRelease := releases[0]\n\tversion := latestRelease.TagName\n\tdownloadURLs := make([]string, 0)\n\tmacDownloadURL := \"\"\n\twinDownloadURL := \"\"\n\n\t// 获取文件名和下载地址\n\tfor _, asset := range latestRelease.Assets {\n\t\tdownloadURLs = append(downloadURLs, asset.BrowserDownloadURL)\n\t\t//查找文本是否包含  macos.zip 和 .exe 不区分大小写\n\t\tif strings.Contains(strings.ToLower(asset.Name), \"macos.zip\") {\n\t\t\tmacDownloadURL = asset.BrowserDownloadURL\n\t\t}\n\t\tif strings.Contains(strings.ToLower(asset.Name), \".exe\") {\n\t\t\twinDownloadURL = asset.BrowserDownloadURL\n\t\t}\n\n\t}\n\n\treleaseInfo := &ReleaseInfo{\n\t\tVersion:        version,\n\t\tDownloadURLs:   downloadURLs,\n\t\tMacDownloadURL: macDownloadURL,\n\t\tWinDownloadURL: winDownloadURL,\n\t\tChangelog:      latestRelease.Body,\n\t\tReleaseTime:    ecore.E到时间(latestRelease.CreatedAt.String()).E时间到文本(\"Y-m-d H:i:s\"),\n\t}\n\n\treturn releaseInfo\n}\n\nfunc E下载带进度回调(下载地址 string, 文件保存路径 string, fc func(进度 float64)) error {\n\tresp, err := http.Get(下载地址)\n\tif err != nil {\n\t\treturn err\n\t}\n\tdefer resp.Body.Close()\n\n\t父目录 := ecore.E文件取父目录(文件保存路径)\n\tif ecore.E文件是否存在(父目录) == false {\n\t\tecore.E创建目录(父目录)\n\t}\n\n\tout, err := os.Create(文件保存路径)\n\tif err != nil {\n\t\treturn err\n\t}\n\tdefer out.Close()\n\n\t下载文件大小 := resp.ContentLength\n\t已下载大小 := int64(0)\n\tbuf := make([]byte, 1024)\n\n\t进度Ticker := time.Tick(time.Millisecond * 50) //降低刷新的频率\n\n\tfor {\n\t\tn, err := resp.Body.Read(buf)\n\t\tif n > 0 {\n\t\t\t_, err := out.Write(buf[:n])\n\t\t\tif err != nil {\n\t\t\t\treturn err\n\t\t\t}\n\n\t\t\t已下载大小 += int64(n)\n\t\t\t进度 := float64(已下载大小) / float64(下载文件大小) * 100\n\n\t\t\tselect {\n\t\t\tcase <-进度Ticker:\n\t\t\t\tif fc != nil {\n\t\t\t\t\tfc(进度) // 调用进度回调函数\n\t\t\t\t}\n\t\t\tdefault:\n\t\t\t\t// 不触发进度回调\n\t\t\t}\n\t\t}\n\n\t\tif err != nil {\n\t\t\tif err != io.EOF {\n\t\t\t\treturn err\n\t\t\t}\n\t\t\tbreak\n\t\t}\n\t}\n\tfc(100) // 调用进度回调函数\n\n\treturn nil\n}\n\nfunc E系统是否为window系统() bool {\n\treturn strings.ToLower(runtime.GOOS) == \"windows\"\n}\n\nfunc E系统是否为linux系统() bool {\n\treturn strings.ToLower(runtime.GOOS) == \"linux\"\n}\n\nfunc E系统是否为mac系统() bool {\n\treturn strings.ToLower(runtime.GOOS) == \"darwin\"\n}\n\n// E是否为调试模式\n// 判断当前的环境是否为编译后的程序\n// 真为调试模式\n// 假为编译后的程序\nfunc E是否为调试模式() bool {\n\tdebugMode := false\n\tif os.Getenv(\"DEBUG\") != \"\" {\n\t\tdebugMode = true\n\t}\n\n\treturn debugMode\n}\n\nfunc 取自身MacOs应用路径() string {\n\t// 如果不处于编译状态反馈空\n\t编译后路径, err := os.Executable()\n\t//println(\"编译后路径\", 编译后路径)\n\tif err != nil {\n\t\treturn \"\"\n\t}\n\t// 调试模式下的路径\n\t//编译后路径 = \"/Users/ll/Desktop/goproject/v3fanyi/bin/qoq.app/Contents/MacOS/qoq\"\n\t// 编译后路径 取父目录\n\t编译后路径 = 编译后路径[:strings.LastIndex(编译后路径, \"/\")]\n\n\tapp目录 := 编译后路径[:strings.LastIndex(编译后路径, \"/\")]\n\tapp目录 = app目录[:strings.LastIndex(app目录, \"/\")]\n\t父目录名称 := 编译后路径[strings.LastIndex(编译后路径, \"/\")+1:]\n\tif 父目录名称 == \"MacOS\" {\n\t\treturn app目录\n\t} else {\n\t\treturn \"\"\n\t}\n}\n\nfunc E更新自己MacOS应用(资源压缩包 string, 应用名称 string) (bool, string) {\n\t//资源压缩包 = \"/Users/ll/Downloads/GoEasyDesigner_MacOS.zip\"\n\t//应用名称 = \"GoEasyDesigner.app\"\n\t//println(\"资源压缩包\", 资源压缩包)\n\t//println(\"应用名称\", 应用名称)\n\n\tMacOs应用路径 := 取自身MacOs应用路径()\n\t//fmt.Println(\"MacOs应用路径\", MacOs应用路径)\n\t//MacOs应用路径 := \"/Users/ll/Downloads/\" + 应用名称\n\tif MacOs应用路径 != \"\" {\n\t\tapp目录父目录 := MacOs应用路径[:strings.LastIndex(MacOs应用路径, \"/\")]\n\t\tfmt.Printf(\"资源压缩包 %s app目录父目录%s MacOs应用路径%s \\r\\n\", 资源压缩包, app目录父目录, MacOs应用路径)\n\t\tif MacOs应用路径 != \"\" {\n\t\t\t解压结果 := zip解压(资源压缩包, app目录父目录, []string{应用名称 + \"/Contents/\"})\n\t\t\tprintln(\"解压结果\", 解压结果)\n\t\t\t// 解压完成后删除压缩包\n\t\t\t//os.Remove(资源压缩包)\n\t\t\tMacOs应用路径 = filepath.Join(app目录父目录, 应用名称)\n\t\t\t// QApplication.quit()\n\t\t\t应用名称 = 应用名称[:strings.LastIndex(应用名称, \".\")]\n\t\t\t运行命令 := fmt.Sprintf(\"killall %s && open -n -a %s\", 应用名称, MacOs应用路径)\n\t\t\tprintln(\"运行命令\", 运行命令)\n\t\t\tcmd := exec.Command(\"sh\", \"-c\", 运行命令)\n\t\t\terr := cmd.Run()\n\t\t\tif err != nil {\n\t\t\t\tfmt.Println(err)\n\t\t\t\treturn false, \"killall失败 请自己重启应用\"\n\t\t\t}\n\t\t\treturn true, MacOs应用路径\n\t\t}\n\t} else {\n\t\tfmt.Println(\"非MacOS编译环境\")\n\t\treturn false, \"非MacOS编译环境\"\n\t}\n\tfmt.Println(\"应用路径为空\")\n\treturn false, \"应用路径为空\"\n}\n\nfunc zip解压(压缩包的路径 string, 解压目录 string, 允许解压路径前缀 []string) bool {\n\t// 保持权限和软连接解压\n\t// 允许解压路径前缀 例如 [\"my_app.app/Contents/\"] 不填则全部解压\n\n\t文件, err := zip.OpenReader(压缩包的路径)\n\tif err != nil {\n\t\tfmt.Println(err)\n\t\treturn false\n\t}\n\tdefer 文件.Close()\n\n\tfor _, info := range 文件.File {\n\t\t// 检查目标文件路径是否在允许解压路径前缀中\n\t\tif len(允许解压路径前缀) > 0 {\n\t\t\t允许解压 := false\n\t\t\tfor _, 路径 := range 允许解压路径前缀 {\n\t\t\t\tif strings.HasPrefix(info.Name, 路径) {\n\t\t\t\t\t允许解压 = true\n\t\t\t\t}\n\t\t\t}\n\t\t\tif !允许解压 {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t}\n\n\t\t文件名 := info.Name\n\n\t\t目标文件路径 := filepath.Join(解压目录, 文件名)\n\n\t\t权限 := info.Mode().Perm()\n\t\tif info.Mode()&os.ModeSymlink != 0 { // 检查是否为软连接\n\t\t\t软连接位置, err := readLink(info)\n\t\t\tif err != nil {\n\t\t\t\tfmt.Println(err)\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\t// 检查目标文件路径是否存在，如果存在就删除，防止创建失败\n\t\t\tif _, err := os.Lstat(目标文件路径); err == nil {\n\t\t\t\tos.Remove(目标文件路径)\n\t\t\t}\n\t\t\terr = os.Symlink(软连接位置, 目标文件路径)\n\t\t\tif err != nil {\n\t\t\t\tfmt.Println(err)\n\t\t\t}\n\t\t} else {\n\t\t\t// 删除文件重新解压\n\t\t\tif _, err := os.Lstat(目标文件路径); err == nil {\n\t\t\t\t// 检查是否为文件\n\t\t\t\tif !info.Mode().IsDir() {\n\t\t\t\t\tos.Remove(目标文件路径)\n\t\t\t\t}\n\t\t\t}\n\t\t\terr = extractFile(info, 目标文件路径)\n\t\t\tif err != nil {\n\t\t\t\tfmt.Println(err)\n\t\t\t}\n\n\t\t\t// 修改文件权限\n\t\t\tif _, err := os.Lstat(目标文件路径); err == nil {\n\t\t\t\terr = os.Chmod(目标文件路径, 权限)\n\t\t\t\tif err != nil {\n\t\t\t\t\tfmt.Println(err)\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn true\n}\n\nfunc zip解压2(压缩包的路径 string, 解压目录 string, 允许解压路径前缀 []string, fn func(解压路径 string) string) bool {\n\t// 保持权限和软连接解压\n\t// 允许解压路径前缀 例如 [\"my_app.app/Contents/\"] 不填则全部解压\n\n\t文件, err := zip.OpenReader(压缩包的路径)\n\tif err != nil {\n\t\tfmt.Println(err)\n\t\treturn false\n\t}\n\tdefer 文件.Close()\n\n\tfor _, info := range 文件.File {\n\t\t// 检查目标文件路径是否在允许解压路径前缀中\n\t\tif len(允许解压路径前缀) > 0 {\n\t\t\t允许解压 := false\n\t\t\tfor _, 路径 := range 允许解压路径前缀 {\n\t\t\t\tif strings.HasPrefix(info.Name, 路径) {\n\t\t\t\t\t允许解压 = true\n\t\t\t\t}\n\t\t\t}\n\t\t\tif !允许解压 {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t}\n\n\t\t文件名 := info.Name\n\t\t文件名 = fn(文件名)\n\n\t\t目标文件路径 := filepath.Join(解压目录, 文件名)\n\n\t\t权限 := info.Mode().Perm()\n\t\tif info.Mode()&os.ModeSymlink != 0 { // 检查是否为软连接\n\t\t\t软连接位置, err := readLink(info)\n\t\t\tif err != nil {\n\t\t\t\tfmt.Println(err)\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\t// 检查目标文件路径是否存在，如果存在就删除，防止创建失败\n\t\t\tif _, err := os.Lstat(目标文件路径); err == nil {\n\t\t\t\tos.Remove(目标文件路径)\n\t\t\t}\n\t\t\terr = os.Symlink(软连接位置, 目标文件路径)\n\t\t\tif err != nil {\n\t\t\t\tfmt.Println(err)\n\t\t\t}\n\t\t} else {\n\t\t\t// 删除文件重新解压\n\t\t\tif _, err := os.Lstat(目标文件路径); err == nil {\n\t\t\t\t// 检查是否为文件\n\t\t\t\tif !info.Mode().IsDir() {\n\t\t\t\t\tos.Remove(目标文件路径)\n\t\t\t\t}\n\t\t\t}\n\t\t\terr = extractFile(info, 目标文件路径)\n\t\t\tif err != nil {\n\t\t\t\tfmt.Println(err)\n\t\t\t}\n\n\t\t\t// 修改文件权限\n\t\t\tif _, err := os.Lstat(目标文件路径); err == nil {\n\t\t\t\terr = os.Chmod(目标文件路径, 权限)\n\t\t\t\tif err != nil {\n\t\t\t\t\tfmt.Println(err)\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn true\n}\n\nfunc readLink(info *zip.File) (string, error) {\n\tfile, err := info.Open()\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\tdefer file.Close()\n\n\tlinkName := make([]byte, info.FileInfo().Size())\n\t_, err = io.ReadFull(file, linkName)\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\n\treturn string(linkName), nil\n}\nfunc extractFile(info *zip.File, 目标文件路径 string) error {\n\tfile, err := info.Open()\n\tif err != nil {\n\t\treturn err\n\t}\n\tdefer file.Close()\n\n\tif info.FileInfo().IsDir() {\n\t\terr = os.MkdirAll(目标文件路径, info.Mode())\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t} else {\n\t\twriter, err := os.OpenFile(目标文件路径, os.O_WRONLY|os.O_CREATE|os.O_TRUNC, info.Mode())\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tdefer writer.Close()\n\n\t\t_, err = io.Copy(writer, file)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\n\treturn nil\n}\n\nfunc E取用户下载文件夹路径() string {\n\tusr, err := user.Current()\n\tif err != nil {\n\t\tfmt.Println(\"pull:\", err)\n\t\treturn \"\"\n\t}\n\t下载文件夹路径 := filepath.Join(usr.HomeDir, \"Downloads\")\n\treturn 下载文件夹路径\n}\n\nfunc 取自身路径Window() (string, error) {\n\texe, err := os.Executable()\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\treturn exe, nil\n}\n\nfunc E更新自己Window应用(新exe资源文件路径 string) (bool, string) {\n\t// window更新方法\n\t自身路径Window, _ := 取自身路径Window()\n\n\t//文件名 := filepath.Base(自身路径Window)\n\t// 检查文件是否存在\n\t旧的文件名 := 自身路径Window + \".old.bak\"\n\tif _, err := os.Stat(旧的文件名); err == nil {\n\t\t// 删除文件\n\t\tos.Remove(旧的文件名)\n\t}\n\n\tos.Rename(自身路径Window, 旧的文件名)\n\n\terr := os.Rename(新exe资源文件路径, 自身路径Window)\n\t//zenity.Info(\"新exe资源文件路径:\" + 新exe资源文件路径)\n\t//zenity.Info(\"自身路径Window:\" + 自身路径Window)\n\n\tif err != nil {\n\t\tzenity.Info(\"新文件复制失败了 原因:\" + err.Error())\n\t\treturn false, \"\"\n\t}\n\n\t// 结束自身运行然后重启自己\n\tcmd := exec.Command(自身路径Window)\n\tcmd.Args = append(cmd.Args, os.Args[1:]...)\n\tcmd.Start()\n\n\tos.Exit(0) // 此处退出当前进程\n\treturn true, \"\"\n}\n\nfunc E检查更新_Mac() {\n\n\t下载文件夹路径 := E取用户下载文件夹路径()\n\tinfo := E获取Github仓库Releases版本和更新内容()\n\tprintln(info.MacDownloadURL)\n\tprintln(下载文件夹路径)\n\tif info.Version == Version {\n\t\terr := zenity.Info(\"当前已经是最新版本\")\n\t\tif err != nil {\n\t\t\treturn\n\t\t}\n\t\treturn\n\t}\n\n\terr := zenity.Question(\"软件有新版本可用，是否更新？\\n当前版本:\"+\n\t\tVersion+\n\t\t\"\\n最新版本:\"+info.Version,\n\t\tzenity.Title(\"更新提示\"),\n\t\tzenity.Icon(zenity.QuestionIcon),\n\t\tzenity.OKLabel(\"更新\"),\n\t\tzenity.CancelLabel(\"取消\"))\n\tecore.E调试输出(err)\n\tprintln(\"更新\", err)\n\tif err != nil {\n\t\treturn\n\t}\n\tprogress, _ := zenity.Progress(\n\t\tzenity.Title(\"软件更新\"),\n\t\tzenity.MaxValue(100), // 设置最大进度值为100\n\t)\n\n\tprogress.Text(\"正在下载...\")\n\n\terr = E下载带进度回调(info.MacDownloadURL, 下载文件夹路径+\"/\"+应用名称+\"_MacOS.zip\", func(进度 float64) {\n\t\tfmt.Println(\"正在下载...\", 进度)\n\t\tprogress.Text(\"正在下载...\" + fmt.Sprintf(\"%.2f\", 进度) + \"%\")\n\t\tprogress.Value(int(进度))\n\t})\n\tif err != nil {\n\t\tfmt.Println(\"下载出错:\", err)\n\t\tzenity.Info(\"下载错误,检查你的网络\")\n\t\tprogress.Close()\n\t\treturn\n\t}\n\tprogress.Text(\"下载完成 即将完成更新\")\n\tif progress.Close() != nil {\n\t\tfmt.Println(\"点击了取消\")\n\t\treturn\n\t}\n\tfmt.Println(\"下载完成了\")\n\tflag, s := E更新自己MacOS应用(下载文件夹路径+\"/\"+应用名称+\"_MacOS.zip\", 应用名称+\".app\")\n\tprintln(flag, s)\n}\n\nfunc E检查更新_window() {\n\t下载文件夹路径, _ := 取自身路径Window()\n\t下载文件夹路径 = ecore.E文件取父目录(下载文件夹路径)\n\t新文件名 := 下载文件夹路径 + \"/\" + 应用名称 + \"_latest.exe\"\n\tinfo := E获取Github仓库Releases版本和更新内容()\n\tif info == nil {\n\t\tzenity.Info(\"网络原因无法获取更新信息\")\n\t\treturn\n\t}\n\tif info.Version == Version {\n\t\terr := zenity.Info(\"当前已经是最新版本\")\n\t\tif err != nil {\n\t\t\treturn\n\t\t}\n\t\treturn\n\t}\n\n\terr := zenity.Question(\"软件有新版本可用，是否更新？\\n当前版本:\"+\n\t\tVersion+\n\t\t\"\\n最新版本:\"+info.Version,\n\t\tzenity.Title(\"更新提示\"),\n\t\tzenity.Icon(zenity.QuestionIcon),\n\t\tzenity.OKLabel(\"更新\"),\n\t\tzenity.CancelLabel(\"取消\"))\n\tecore.E调试输出(err)\n\tprintln(\"更新\", err)\n\tif err != nil {\n\t\treturn\n\t}\n\tprogress, _ := zenity.Progress(\n\t\tzenity.Title(\"软件更新\"),\n\t\tzenity.MaxValue(100), // 设置最大进度值为100\n\t)\n\n\tprogress.Text(\"正在下载...\")\n\n\terr = E下载带进度回调(info.WinDownloadURL, 新文件名, func(进度 float64) {\n\t\tfmt.Println(\"正在下载...\", 进度)\n\t\tprogress.Text(\"正在下载...\" + fmt.Sprintf(\"%.2f\", 进度) + \"%\")\n\t\tprogress.Value(int(进度))\n\t})\n\tif err != nil {\n\t\tfmt.Println(\"下载出错:\", err)\n\t\tzenity.Info(\"下载错误,检查你的网络\")\n\t\tprogress.Close()\n\t\treturn\n\t}\n\tprogress.Text(\"下载完成 即将完成更新\")\n\tif progress.Close() != nil {\n\t\tfmt.Println(\"点击了取消\")\n\t\treturn\n\t}\n\tfmt.Println(\"下载完成了\")\n\tflag, s := E更新自己Window应用(新文件名)\n\tprintln(flag, s)\n}\n"
  },
  {
    "path": "GoEasyDesigner/mymodel/自动更新模块_test.go",
    "content": "package mymodel\n\nimport (\n\t\"fmt\"\n\t\"github.com/duolabmeng6/goefun/ecore\"\n\t\"github.com/ncruces/zenity\"\n\t\"os/user\"\n\t\"path/filepath\"\n\t\"runtime\"\n\t\"testing\"\n)\n\nfunc Test简单(t *testing.T) {\n\tif E是否为macOS系统() {\n\t\tE检查更新_Mac()\n\t}\n\tif E是否为window系统() {\n\t\tE检查更新_window()\n\t}\n}\nfunc TestE获取Github仓库Releases版本和更新内容(t *testing.T) {\n\tinfo := E获取Github仓库Releases版本和更新内容()\n\tecore.E调试输出(info)\n\n}\n\nfunc Test下载(t *testing.T) {\n\terr := E下载带进度回调(\"https://github.com/duolabmeng6/GoEasyDesigner/releases/download/v0.2.4/GoEasyDesigner_MacOS.zip\",\n\t\t\"/Users/ll/Downloads/GoEasyDesigner_MacOS.zip\", func(进度 float64) {\n\t\t\t// 进度回调函数\n\t\t\tfmt.Println(\"正在下载...\", 进度)\n\t\t})\n\tif err != nil {\n\t\tfmt.Println(\"下载出错:\", err)\n\t} else {\n\t\tfmt.Println(\"下载完成\")\n\t}\n\n}\nfunc Test系统版本(t *testing.T) {\n\tfmt.Println(\"系统是否为Windows:\", E系统是否为window系统())\n\tfmt.Println(\"系统是否为Linux:\", E系统是否为linux系统())\n\tfmt.Println(\"系统是否为Mac:\", E系统是否为mac系统())\n\tfmt.Println(\"是否为调试模式:\", E是否为调试模式())\n\n}\n\nfunc Test解压缩(t *testing.T) {\n\t压缩包的路径 := \"/Users/ll/Downloads/GoEasyDesigner_MacOS.zip\"\n\t//解压目录 := \"/Users/ll/Desktop/goproject/v3fanyi/mymodel/testzip/\"\n\t//允许解压路径前缀 := []string{\"qoq.app/Contents/\"}\n\t//println(zip解压2(压缩包的路径, 解压目录, 允许解压路径前缀))\n\tE更新自己MacOS应用(压缩包的路径, \"GoEasyDesigner.app\")\n}\nfunc Test更新流程MacOS(t *testing.T) {\n\tusr, err := user.Current()\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\t下载文件夹路径 := filepath.Join(usr.HomeDir, \"Downloads\")\n\n\tprintln(下载文件夹路径)\n\tinfo := E获取Github仓库Releases版本和更新内容()\n\n\terr = E下载带进度回调(info.MacDownloadURL, 下载文件夹路径+\"/mactest.zip\", func(进度 float64) {\n\t\t// 进度回调函数\n\t\tfmt.Println(\"正在下载...\", 进度)\n\t})\n\tif err != nil {\n\t\tfmt.Println(\"下载出错:\", err)\n\t\treturn\n\t}\n\n\tflag, s := E更新自己MacOS应用(下载文件夹路径+\"/mactest.zip\", \"qoq.app\")\n\tprintln(flag, s)\n\n}\n\nfunc Test更新流程Window(t *testing.T) {\n\t//\n\tusr, err := user.Current()\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\t下载文件夹路径 := filepath.Join(usr.HomeDir, \"Downloads\")\n\n\t//println(下载文件夹路径)\n\t//info := E获取Github仓库Releases版本和更新内容()\n\t//\n\t//err = E下载带进度回调(info.WinDownloadURL, 下载文件夹路径+\"/GoEasyDesigner.exe\", func(进度 float64) {\n\t//\t// 进度回调函数\n\t//\tfmt.Println(\"正在下载...\", 进度)\n\t//})\n\t//if err != nil {\n\t//\tfmt.Println(\"下载出错:\", err)\n\t//\treturn\n\t//}\n\n\tflag, s := E更新自己Window应用(下载文件夹路径 + \"/GoEasyDesigner.exe\")\n\tprintln(flag, s)\n\n}\n\nfunc Test整个流程(t *testing.T) {\n\n\t下载文件夹路径 := E取用户下载文件夹路径()\n\tinfo := E获取Github仓库Releases版本和更新内容()\n\tprintln(info.MacDownloadURL)\n\tprintln(下载文件夹路径)\n\tif info.Version == Version {\n\t\terr := zenity.Info(\"当前已经是最新版本\")\n\t\tif err != nil {\n\t\t\treturn\n\t\t}\n\t\treturn\n\t}\n\n\terr := zenity.Question(\"软件有新版本可用，是否更新？\\n当前版本:\"+\n\t\tVersion+\n\t\t\"\\n最新版本:\"+info.Version,\n\t\tzenity.Title(\"更新提示\"),\n\t\tzenity.Icon(zenity.QuestionIcon),\n\t\tzenity.OKLabel(\"更新\"),\n\t\tzenity.CancelLabel(\"取消\"))\n\tecore.E调试输出(err)\n\tprintln(\"更新\", err)\n\tif err != nil {\n\t\treturn\n\t}\n\tprogress, _ := zenity.Progress(\n\t\tzenity.Title(\"软件更新\"),\n\t\tzenity.MaxValue(100), // 设置最大进度值为100\n\t)\n\n\tprogress.Text(\"正在下载...\")\n\n\terr = E下载带进度回调(info.MacDownloadURL, 下载文件夹路径+\"/\"+应用名称+\"_MacOS.zip\", func(进度 float64) {\n\t\tfmt.Println(\"正在下载...\", 进度)\n\t\tprogress.Text(\"正在下载...\" + fmt.Sprintf(\"%.2f\", 进度) + \"%\")\n\t\tprogress.Value(int(进度))\n\t})\n\tif err != nil {\n\t\tfmt.Println(\"下载出错:\", err)\n\t\tzenity.Info(\"下载错误,检查你的网络\")\n\t\tprogress.Close()\n\t\treturn\n\t}\n\tprogress.Text(\"下载完成 即将完成更新\")\n\tif progress.Close() != nil {\n\t\tfmt.Println(\"点击了取消\")\n\t\treturn\n\t}\n\tfmt.Println(\"下载完成了\")\n\tflag, s := E更新自己MacOS应用(下载文件夹路径+\"/\"+应用名称+\"_MacOS.zip\", 应用名称+\".app\")\n\tprintln(flag, s)\n}\n\nfunc E是否为window系统() bool {\n\treturn runtime.GOOS == \"windows\"\n}\n\nfunc E是否为macOS系统() bool {\n\treturn runtime.GOOS == \"darwin\"\n}\n\nfunc E是否为UbuntuLinux系统() bool {\n\treturn runtime.GOOS == \"linux\"\n}\n"
  },
  {
    "path": "GoEasyDesigner/ssh_nginx/Caddyfile",
    "content": "go.kenhong.com {\n\troot * /srv\n    encode {\n        zstd\n        gzip 9\n    }\n\tfile_server\n}\n\n"
  },
  {
    "path": "GoEasyDesigner/ssh_nginx/default.conf",
    "content": "server {\n    listen 80;\n    server_name go.kenhong.com;\n    return 301 https://$host$request_uri;\n}\n\nserver {\n    listen 443 ssl http2;\n    server_name go.kenhong.com;\n\n    ssl_certificate /etc/nginx/certs/fullchain.cer;\n    ssl_certificate_key /etc/nginx/certs/go.kenhong.com.key;\n\n    gzip on;\n    gzip_disable \"msie6\";\n\n    gzip_vary on;\n    gzip_proxied any;\n    gzip_comp_level 9;\n    gzip_buffers 16 8k;\n    gzip_http_version 1.1;\n    gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;\n\n    location / {\n        root /usr/share/nginx/html;\n        index index.html;\n        # Allow only requests with the host header matching go.kenhong.com\n        if ($host != \"go.kenhong.com\") {\n            return 444;\n        }\n    }\n}\n"
  },
  {
    "path": "GoEasyDesigner/ssh_nginx/docker-compose.yml",
    "content": "version: '3.2'\n\nservices:\n  openssh-server:\n    image: linuxserver/openssh-server:latest\n    container_name: openssh-server\n    hostname: openssh-server #optional\n    environment:\n      - PUID=1000\n      - PGID=1000\n      - TZ=Asia/Shanghai\n#      - PUBLIC_KEY=yourpublickey #optional\n#      - PUBLIC_KEY_FILE=/path/to/file #optional\n#      - PUBLIC_KEY_DIR=/path/to/directory/containing/_only_/pubkeys #optional\n#      - PUBLIC_KEY_URL=https://github.com/username.keys #optional\n      - SUDO_ACCESS=false #optional\n      - PASSWORD_ACCESS=true #optional\n      - USER_PASSWORD=${USER_PASSWORD}\n#      - USER_PASSWORD_FILE=/path/to/file #optional\n      - USER_NAME=${USER_NAME} #optional\n    volumes:\n      - ./config:/config\n      - ./www:/config/www\n    ports:\n      - ${SSH_PORT}:2222\n    restart: unless-stopped\n\n  caddy:\n    image: caddy:2-alpine\n    ports:\n      - \"80:80\"\n      - \"443:443\"\n      - \"443:443/udp\"\n    volumes:\n      - ./Caddyfile:/etc/caddy/Caddyfile\n      - ./www:/srv\n      - ./caddy_data:/data\n      - ./caddy_config:/config\n#  nginx:\n#    image: nginx:latest\n#    ports:\n#      - \"80:80\"\n#      - \"443:443\"\n#    volumes:\n#      - ./www:/usr/share/nginx/html\n#      - /root/.acme.sh/go.kenhong.com:/etc/nginx/certs\n#      - ./default.conf:/etc/nginx/conf.d/default.conf\n\n"
  },
  {
    "path": "GoEasyDesigner/wails.json",
    "content": "{\n  \"$schema\": \"https://wails.io/schemas/config.v2.json\",\n  \"name\": \"GoEasyDesigner\",\n  \"outputfilename\": \"GoEasyDesigner\",\n  \"frontend:install\": \"pnpm install\",\n  \"frontend:build\": \"pnpm run build\",\n  \"frontend:dev:watcher\": \"pnpm run dev\",\n  \"frontend:dev:serverUrl\": \"auto\",\n  \"author\": {\n    \"name\": \"多啦b梦\",\n    \"email\": \"1715109585@qq.com\"\n  }\n}\n"
  },
  {
    "path": "LICENSE",
    "content": "                   GNU LESSER GENERAL PUBLIC LICENSE\n                       Version 3, 29 June 2007\n\n Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>\n Everyone is permitted to copy and distribute verbatim copies\n of this license document, but changing it is not allowed.\n\n\n  This version of the GNU Lesser General Public License incorporates\nthe terms and conditions of version 3 of the GNU General Public\nLicense, supplemented by the additional permissions listed below.\n\n  0. Additional Definitions.\n\n  As used herein, \"this License\" refers to version 3 of the GNU Lesser\nGeneral Public License, and the \"GNU GPL\" refers to version 3 of the GNU\nGeneral Public License.\n\n  \"The Library\" refers to a covered work governed by this License,\nother than an Application or a Combined Work as defined below.\n\n  An \"Application\" is any work that makes use of an interface provided\nby the Library, but which is not otherwise based on the Library.\nDefining a subclass of a class defined by the Library is deemed a mode\nof using an interface provided by the Library.\n\n  A \"Combined Work\" is a work produced by combining or linking an\nApplication with the Library.  The particular version of the Library\nwith which the Combined Work was made is also called the \"Linked\nVersion\".\n\n  The \"Minimal Corresponding Source\" for a Combined Work means the\nCorresponding Source for the Combined Work, excluding any source code\nfor portions of the Combined Work that, considered in isolation, are\nbased on the Application, and not on the Linked Version.\n\n  The \"Corresponding Application Code\" for a Combined Work means the\nobject code and/or source code for the Application, including any data\nand utility programs needed for reproducing the Combined Work from the\nApplication, but excluding the System Libraries of the Combined Work.\n\n  1. Exception to Section 3 of the GNU GPL.\n\n  You may convey a covered work under sections 3 and 4 of this License\nwithout being bound by section 3 of the GNU GPL.\n\n  2. Conveying Modified Versions.\n\n  If you modify a copy of the Library, and, in your modifications, a\nfacility refers to a function or data to be supplied by an Application\nthat uses the facility (other than as an argument passed when the\nfacility is invoked), then you may convey a copy of the modified\nversion:\n\n   a) under this License, provided that you make a good faith effort to\n   ensure that, in the event an Application does not supply the\n   function or data, the facility still operates, and performs\n   whatever part of its purpose remains meaningful, or\n\n   b) under the GNU GPL, with none of the additional permissions of\n   this License applicable to that copy.\n\n  3. Object Code Incorporating Material from Library Header Files.\n\n  The object code form of an Application may incorporate material from\na header file that is part of the Library.  You may convey such object\ncode under terms of your choice, provided that, if the incorporated\nmaterial is not limited to numerical parameters, data structure\nlayouts and accessors, or small macros, inline functions and templates\n(ten or fewer lines in length), you do both of the following:\n\n   a) Give prominent notice with each copy of the object code that the\n   Library is used in it and that the Library and its use are\n   covered by this License.\n\n   b) Accompany the object code with a copy of the GNU GPL and this license\n   document.\n\n  4. Combined Works.\n\n  You may convey a Combined Work under terms of your choice that,\ntaken together, effectively do not restrict modification of the\nportions of the Library contained in the Combined Work and reverse\nengineering for debugging such modifications, if you also do each of\nthe following:\n\n   a) Give prominent notice with each copy of the Combined Work that\n   the Library is used in it and that the Library and its use are\n   covered by this License.\n\n   b) Accompany the Combined Work with a copy of the GNU GPL and this license\n   document.\n\n   c) For a Combined Work that displays copyright notices during\n   execution, include the copyright notice for the Library among\n   these notices, as well as a reference directing the user to the\n   copies of the GNU GPL and this license document.\n\n   d) Do one of the following:\n\n       0) Convey the Minimal Corresponding Source under the terms of this\n       License, and the Corresponding Application Code in a form\n       suitable for, and under terms that permit, the user to\n       recombine or relink the Application with a modified version of\n       the Linked Version to produce a modified Combined Work, in the\n       manner specified by section 6 of the GNU GPL for conveying\n       Corresponding Source.\n\n       1) Use a suitable shared library mechanism for linking with the\n       Library.  A suitable mechanism is one that (a) uses at run time\n       a copy of the Library already present on the user's computer\n       system, and (b) will operate properly with a modified version\n       of the Library that is interface-compatible with the Linked\n       Version.\n\n   e) Provide Installation Information, but only if you would otherwise\n   be required to provide such information under section 6 of the\n   GNU GPL, and only to the extent that such information is\n   necessary to install and execute a modified version of the\n   Combined Work produced by recombining or relinking the\n   Application with a modified version of the Linked Version. (If\n   you use option 4d0, the Installation Information must accompany\n   the Minimal Corresponding Source and Corresponding Application\n   Code. If you use option 4d1, you must provide the Installation\n   Information in the manner specified by section 6 of the GNU GPL\n   for conveying Corresponding Source.)\n\n  5. Combined Libraries.\n\n  You may place library facilities that are a work based on the\nLibrary side by side in a single library together with other library\nfacilities that are not Applications and are not covered by this\nLicense, and convey such a combined library under terms of your\nchoice, if you do both of the following:\n\n   a) Accompany the combined library with a copy of the same work based\n   on the Library, uncombined with any other library facilities,\n   conveyed under the terms of this License.\n\n   b) Give prominent notice with the combined library that part of it\n   is a work based on the Library, and explaining where to find the\n   accompanying uncombined form of the same work.\n\n  6. Revised Versions of the GNU Lesser General Public License.\n\n  The Free Software Foundation may publish revised and/or new versions\nof the GNU Lesser General Public License from time to time. Such new\nversions will be similar in spirit to the present version, but may\ndiffer in detail to address new problems or concerns.\n\n  Each version is given a distinguishing version number. If the\nLibrary as you received it specifies that a certain numbered version\nof the GNU Lesser General Public License \"or any later version\"\napplies to it, you have the option of following the terms and\nconditions either of that published version or of any later version\npublished by the Free Software Foundation. If the Library as you\nreceived it does not specify a version number of the GNU Lesser\nGeneral Public License, you may choose any version of the GNU Lesser\nGeneral Public License ever published by the Free Software Foundation.\n\n  If the Library as you received it specifies that a proxy can decide\nwhether future versions of the GNU Lesser General Public License shall\napply, that proxy's public statement of acceptance of any version is\npermanent authorization for you to choose that version for the\nLibrary.\n"
  },
  {
    "path": "README.md",
    "content": "\n<p align=\"center\" style=\"text-align: center\">\n<img src=\"GoEasyDesigner/build/appicon.png\" width=256  height=256 />\n</p>\n\n<p align=\"center\">\n</p>\n\n<div align=\"center\">\n<strong>\n<samp>\n\n[English](README.md) · [简体中文](README.zh-Hans.md)\n\n</samp>\n</strong>\n</div>\n\n# Window Designer\n![666](https://github.com/duolabmeng6/GoEasyDesigner/assets/59047063/a89d2ab9-9ba3-4efc-b0fa-0a7dcc3bcfc1)\n\nThis is a simple and easy-to-use visual interface design tool, developed in Go language using the Wails framework, supporting systems like Windows, MacOS, Linux, etc.\n\nMain Repository: https://github.com/duolabmeng6/GoEasyDesigner\n\nMirror Repository: https://gitee.com/duolabmeng666/go-easy-designer\n\n**Project Progress:**\n\nThe project is in active development. Front-end experts are welcome to contribute PRs.\n\nCompleted tasks:\n\n- [x] Cross-platform compatibility: Supports Windows, MacOS, and Linux systems.\n- [x] Interface design and functionality development: Completed overall layout design, functional process design, interface drawing, property modification, component dragging, double-clicking components to jump to corresponding event functions, and other core features.\n- [x] Intelligent code editor: Implemented the Chinese character initial letter input reminder function for the code editing box, enhancing coding efficiency.\n- [x] [goefun library](https://pkg.go.dev/github.com/duolabmeng6/goefun#section-sourcefiles) Chinese function library support: Developing using Chinese functions in Golang.\n- [x] Component library: Completed development of components like buttons, text boxes, labels, switches, radio buttons, checkboxes, common layouts, flex layouts, tree boxes, menus, tables, progress bars, file selectors, and more.\n- [x] Custom component support: Allows the creation of custom components, such as login boxes, for rapid application development.\n- [x] Integrated development environment: Provided a one-click environment setup package, simplifying the construction of the development environment.\n- [x] Multilingual support: The application supports multiple languages including Chinese and English.\n\nTasks to be completed:\n\n- [ ] jsefun library support: Planned and awaiting development.\n- [ ] Component library enhancement: Ongoing, further improvement of [element-plus](https://element-plus.org/zh-CN/component/button.html) components.\n- [ ] Support for ElectronJS: Planned, will support ElectronJS as backend technology.\n- [ ] Custom cloud components: Users will be able to upload their templates for others to use.\n\n# Online Experience\n\nThanks to a friend's server, you can now enjoy an online experience.\n\nInternational address: https://go-easy-designer.vercel.app\n\n[Download Window Running Project](https://github.com/duolabmeng6/wails-template-vue-go-easy), during online experience, design the interface in the browser and save. Two files will be downloaded: `design.json`, `__aux_code.js`. Make sure your browser allows downloading multiple files, and place the design files in the specified location.\n\n[Video Tutorial: 10 Minutes to Get Started](https://www.bilibili.com/video/BV1ou4y1r7WS)\n\n[Video Tutorial: 3 Minutes to Learn Custom Component Packaging](https://www.bilibili.com/video/BV1ar4y1f7Rq)\n\n# Environment Installation\n## Method 1\n### 1. Install Node.js Development Environment\n\n[Node.js Download Page](https://nodejs.org/) Version 18 or above\n\nDomestic mirror: `npm install -g cnpm --registry=http://registry.npmmirror.com`\n\nInstall Vite: `npm install vite@latest`\n\n### 2. Install Go Language Development Environment\n\n[Go Language Download Page](https://golang.org/dl/) Any version\n\nInstall Wails [Wails Framework Documentation](https://wails.io/zh-Hans/docs/gettingstarted/installation/)\n\nDomestic mirror execution: `go env -w GOPROXY=https://goproxy.cn,direct`\n\n```\ngo install github.com/wailsapp/wails/v2/cmd/wails@latest\n```\n\nAfter successful installation, run the Wails command. If there is content output, it means successful installation.\n## Method 2: Windows Complete Running Environment Package Download\n\n[Xiaofeiji Cloud Disk Download Address, No Login Required](https://share.feijipan.com/s/4wU6lASg)\n\nDownload `GoEasyDesigner.2023.12.6.Including Running Environment.zip` and unzip.\n\n`env_soft.\n\n7z` Running environment package includes `go` and `node`. Unzip and find `One-Click Environment Configuration.exe`, run as administrator.\n\nIf installation is successful, you can directly open `GoEasyDesigner.exe`.\n\nIf not configured successfully, add environment variables to the system's `PATH`. After adding, run `One-Click Environment Configuration.exe`.\n\n```\nC:\\GoEasyDesigner\\env_soft\\go1.21.4\\bin\nC:\\GoEasyDesigner\\env_soft\\go1.21.4\\AppData\\bin\nC:\\GoEasyDesigner\\env_soft\\node-v20.9.0-win-x64\n```\n\n`go-easy-demo` folder is a sample project.\n\nOpen `go-easy-demo\\frontend\\src\\win\\design.json` with Window Designer to design the interface or run and compile the project.\n\nOpen the `go-easy-demo` folder with Goland IDE to start coding.\n\n# Project Creation\n\n## Create Window Running Project\nThis project is for window running, your code will also be written here.\n\nCreate a project:\n\n```\nwails init -n \"go-easy-demo\" -t https://github.com/duolabmeng6/wails-template-vue-go-easy\n```\n\nRun window:\n\n```\ncd go-easy-demo\nwails dev\n```\n\nCompile into executable file:\n\n```\ncd go-easy-demo\nwails build\n```\n\nFront-end only debugging:\n\n```\ncd go-easy-demo/frontend\nnpm run dev\n```\n\n# Usage Instructions\n\n### Download GoEasyDesigner\n\nDownload the latest version: https://github.com/duolabmeng6/GoEasyDesigner/releases\n\nInterface design file location:\n\n```\ngo-easy-demo/frontend/src/win/design.json\n```\n\n### Webstorm IDE Code Jump Plugin\n\nTo experience double-clicking components in the IDE to automatically jump to the corresponding function, install the QtEasyDesigner plugin in Webstorm. In this project's files,\n\nAfter installation, right-click in the IDE editor and select `Configure QtEasyDesigner`.\n\nmacOS path:\n```\n/Applications/GoEasyDesigner.app/Contents/MacOS/GoEasyDesigner\n```\n\nWindows path:\n```\nC:\\GoEasyDesigner\\GoEasyDesigner.exe\n```\n\nFor subsequent use, open `design.json` in the editor, right-click and select `Open QtEasyDesigner`. The interface will appear.\n\nJS code uses Webstorm IDE. Most coding should be done in JS. Use Go code only if JS cannot achieve the desired functionality.\nGo code is written in Goland IDE, typically in app.go.\n\n### For Window Designer Development\n\nFor debugging in the IDE, you need the following configuration:\n\nBuild package `changeme`.\n\nWorking directory `/Users/ll/Documents/GitHub/GoEasyDesigner/GoEasyDesigner` change to your path.\n\nEnvironment variable `CGO_LDFLAGS=-framework UniformTypeIdentifiers` is needed for macOS, not for Windows.\n\nGo tool arguments `-tags dev -gcflags \"all=-N -l\"`.\n\nProgram arguments (optional) `File Path=/Users/ll/Documents/GitHub/GoEasyDesigner/go-easy-demo/frontend/src/win/design.json port=8080` This is to work with the IDE plugin, where port is the plugin's port.\n\nNow you can debug with breakpoints in app.go.\n\n#### go-easy-demo is a template project\n\nInterface data location:\n\n```\ngo-easy-demo/frontend/src/win/design.json\n```\n\nRun to see the effects:\n\n```\ncd go-easy-demo\nwails dev\n```\n\n# Window Designer Development Cases\n\n[Duoduo Projection Screen](https://gitee.com/duolabmeng666/projection_screen_tv) Easily project video files from MacOS and Windows to TV, similar to mobile phone screen projection, no need for NAS or other cumbersome operations. Direct file projection.\n\n# Contribution\n\nThe contributor list is too large for the README file! All the outstanding individuals who have contributed to this project can be found here [Contributor List](https://github.com/duolabmeng6/GoEasyDesigner/graphs/contributors).\nWe will create a page later.\n\n# License\n\nThis project is licensed under the [GNU Lesser General Public License (LGPL) Version 3](LICENSE). For detailed information, please refer to the license file.\n\n# Learning and Exchange\n\nQQ Group: 927427009\n\n# Appreciation\n\nIf this project has been helpful to you, you can buy the author a coffee\n\n![](README.assets/swskm.jpg)\n"
  },
  {
    "path": "README.zh-Hans.md",
    "content": "<p align=\"center\" style=\"text-align: center\">\n<img src=\"GoEasyDesigner/build/appicon.png\" width=256  height=256 />\n</p>\n\n<p align=\"center\">\n</p>\n\n<div align=\"center\">\n<strong>\n<samp>\n\n[English](README.md) · [简体中文](README.zh-Hans.md)\n\n</samp>\n</strong>\n</div>\n\n# 窗口设计师\n![666](https://github.com/duolabmeng6/GoEasyDesigner/assets/59047063/a89d2ab9-9ba3-4efc-b0fa-0a7dcc3bcfc1)\n\n\n这是一个简单易用的可视化界面设计工具，基于Go语言开发，使用Wails框架，支持Windows、MacOS、Linux等系统。\n\n主仓库 https://github.com/duolabmeng6/GoEasyDesigner \n\n镜像仓库 https://gitee.com/duolabmeng666/go-easy-designer \n\n**项目进度：**\n\n项目处于积极开发阶段 欢迎前端大佬pr\n\n已完成任务：\n\n- [x] 跨平台兼容性：支持Windows、MacOS和Linux系统。\n\n- [x] 界面设计和功能开发：完成整体界面布局、功能流程设计、界面绘制、属性修改、组件拖拽、双击组件跳转到对应事件函数等核心功能的开发。\n\n- [x] 智能代码编辑器：实现了代码编辑框的汉字首字母输入提醒功能，提高了编码效率。\n\n- [x] [goefun库](https://pkg.go.dev/github.com/duolabmeng6/goefun#section-sourcefiles) 库中文函数库支持：在Golang中使用中文函数进行开发。\n\n- [x] 组件库：已完成按钮、编辑框、标签、开关、单选框、多选框、常用布局、弹性布局、树形框、菜单、表格、进度条、选择夹、常用布局弹、性布局等组件的开发。\n\n- [x] 自定义组件支持：允许创建自定义组件，例如登录框等模板，以便快速应用开发。\n\n- [x] 集成开发环境：提供了一键配置环境压缩包，简化开发环境的搭建。\n\n- [x] 多语言支持：应用支持中文和英文等多种语言。\n\n- [x] jsefun库支持：已开发 https://www.npmjs.com/package/jsefun\n\n- [x] 支持ElectronJS：将支持ElectronJS作为后端技术。 [Electron 启动模板](https://github.com/duolabmeng6/electron-template-easy-desinger)\n\n待完成任务：\n\n- [ ] 组件库完善：正在进行中， [element-plus](https://element-plus.org/zh-CN/component/button.html) 组件的进一步完善。\n- [ ] 自定义云组件 用户可以自己上传模板供其他用户使用\n\n# 在线体验\n\n感谢朋友提供的服务器,可以愉快的在线体验了\n\n国外地址: https://go-easy-designer.vercel.app\n\n[下载窗口运行项目](https://github.com/duolabmeng6/wails-template-vue-go-easy),在线体验时在浏览器中画好界面保存,会下载2个文件 `design.json`,`__aux_code.js` 注意你的浏览器允许下载多个文件的权限,将设计文件放到指定位置即可.\n\n[视频教程10分钟了入门](https://www.bilibili.com/video/BV1ou4y1r7WS)\n\n[视频教程3分钟学会自定义组件封装](https://www.bilibili.com/video/BV1ar4y1f7Rq)\n\n# 环境安装 \n## 方式1\n### 1.安装 node js语言开发环境\n\n[node语言下载页面](https://nodejs.org/) 版本18以上\n\n国内镜像 `npm install -g cnpm --registry=http://registry.npmmirror.com`\n\n安装vite `npm install vite@latest`\n\n### 2.安装 go 语言开发环境\n\n[go语言下载页面](https://golang.org/dl/) 版本任意\n\n安装 wails [wails框架文档](https://wails.io/zh-Hans/docs/gettingstarted/installation/)\n\n国内镜像执行 `go env -w GOPROXY=https://goproxy.cn,direct`\n\n```\ngo install github.com/wailsapp/wails/v2/cmd/wails@latest\n```\n\n安装成功后，运行 wails 命令，有内容输出即为安装成功。\n## 方式2 Window可下载完整的运行环境包\n\n[小飞机网盘下载地址 免登录](https://share.feijipan.com/s/4wU6lASg)\n\n下载 `GoEasyDesigner.2023.12.6.包含运行环境.zip` 解压\n\n`env_soft.7z` 运行环境包含 `go` 和 `node` 解压找到 `一键配置环境.exe` 以管理员身份运行  \n\n如果安装成功你就可以直接打开 `GoEasyDesigner.exe`\n\n没有配置成功的话，自己添加环境变量到 系统的 `PATH` 添加后运行  `一键配置环境.exe`  即可\n\n```\nC:\\GoEasyDesigner\\env_soft\\go1.21.4\\bin\nC:\\GoEasyDesigner\\env_soft\\go1.21.4\\AppData\\bin\nC:\\GoEasyDesigner\\env_soft\\node-v20.9.0-win-x64\n```\n\n`go-easy-demo`  文件夹是示例项目\n\n窗口设计师打开 `go-easy-demo\\frontend\\src\\win\\design.json` 就可以设计界面或者运行编译项目了\n\n用 goland ide 打开 `go-easy-demo` 文件夹 就可以开始编写代码了\n\n\n# 项目创建\n\n## 创建窗口运行项目\n该项目为窗口运行的环境你的代码也将在这里编写\n\n创建项目\n\n```\nwails init -n \"go-easy-demo\" -t https://github.com/duolabmeng6/wails-template-vue-go-easy\n```\n\n运行窗口\n\n```\ncd go-easy-demo\nwails dev\n```\n\n编译为可执行文件\n\n```\ncd go-easy-demo\nwails build\n```\n\n仅调试前端\n\n```\ncd go-easy-demo/frontend\nnpm run dev\n```\n\n# 使用说明\n\n### 下载 GoEasyDesigner\n\n下载最新版本: https://github.com/duolabmeng6/GoEasyDesigner/releases\n\n界面设计文件在这里\n\n```\ngo-easy-demo/frontend/src/win/design.json\n```\n\n### webstorm IDE代码跳转插件\n\n想体验双击组件在ide中自动跳转到对应函数 请在webstorm中安装 QtEasyDesigner 插件,在本项目的文件中，\n\n安装后在IDE编辑器中右键看到 `配置 QtEasyDesigner ` \n\nmacos填写路径\n```\n/Applications/GoEasyDesigner.app/Contents/MacOS/GoEasyDesigner\n```\n\nwindow填写exe的路径\n```\nC:\\GoEasyDesigner\\GoEasyDesigner.exe\n```\n\n后续使用的话 打开 `design.json` 在编辑器中右键  `打开 QtEasyDesigner ` 界面就出来了\n\njs代码使用 webstorm ide 绝大部分编写代码都应该在 js中编写,如果js无法实现的再调用go代码\ngo代码使用 goland IDE 编写 一般情况下代码写在 app.go 中\n\n### 开发窗口设计师请看\n\n在ide中调试需要以下配置\n\n构建软件包 `changeme` \n\n工作目录 `/Users/ll/Documents/GitHub/GoEasyDesigner/GoEasyDesigner` 改成你的路径\n\n环境变量 `CGO_LDFLAGS=-framework UniformTypeIdentifiers` 这个macos需要 window不需要\n\ngo工具实参 `-tags dev -gcflags \"all=-N -l\"`\n\n程序实参(可选) `文件路径=/Users/ll/Documents/GitHub/GoEasyDesigner/go-easy-demo/frontend/src/win/design.json port=8080` 这是配合ide插件的port是插件的端口 \n\n现在可以在 app.go 中下断点调试了.\n\n#### go-easy-demo 为模板项目\n\n界面数据在这里\n\n```\ngo-easy-demo/frontend/src/win/design.json\n```\n\n运行 就可以看到效果了\n\n```\ncd go-easy-demo\nwails dev\n```\n\n# 窗口设计师开发案例\n\n[多多投屏](https://gitee.com/duolabmeng666/projection_screen_tv) 轻轻松松在MacOS和Window中将视频文件投屏到电视上,跟手机的投屏功能一致,无需nas等繁琐操作.直接文件投屏.\n\n# 贡献\n\n贡献者列表对于自述文件来说太大了！ 所有为这个项目做出贡献的杰出人士在这里 [贡献列表](https://github.com/duolabmeng6/GoEasyDesigner/graphs/contributors)\n后面我们会制作页面\n\n\n# 许可证\n\n本项目采用 [GNU Lesser General Public License (LGPL) 版本 3](LICENSE) 进行许可。详细信息请参阅许可证文件。\n\n# 学习交流\n\nQQ群: 927427009\n\n# 赞赏\n\n如果这个项目对你有帮助，可以请作者喝杯咖啡\n\n![](README.assets/swskm.jpg)\n"
  },
  {
    "path": "script/main.go",
    "content": "package main\n\nimport (\n\t\"fmt\"\n\t\"io\"\n\t\"os\"\n\t\"path/filepath\"\n\t\"strings\"\n)\n\nfunc copyFile(src, dst string) error {\n\tsourceFile, err := os.Open(src)\n\tif err != nil {\n\t\treturn err\n\t}\n\tdefer sourceFile.Close()\n\n\t// Create destination directory if it doesn't exist\n\tif err := os.MkdirAll(filepath.Dir(dst), os.ModePerm); err != nil {\n\t\treturn err\n\t}\n\n\tdestinationFile, err := os.Create(dst)\n\tif err != nil {\n\t\treturn err\n\t}\n\tdefer destinationFile.Close()\n\n\t_, err = io.Copy(destinationFile, sourceFile)\n\treturn err\n}\n\nfunc copyFiles(sourcePath, destinationPath string, excludeFiles []string) error {\n\terr := filepath.Walk(sourcePath, func(path string, f os.FileInfo, err error) error {\n\t\tif err != nil {\n\t\t\tfmt.Println(err) // can't walk here,\n\t\t\treturn nil       // ignore this error\n\t\t}\n\t\tif f.IsDir() {\n\t\t\treturn nil // ignore directories\n\t\t}\n\n\t\t// 排除指定文件和后缀\n\t\texclude := false\n\t\tfor _, excludeFile := range excludeFiles {\n\t\t\tif strings.HasSuffix(path, excludeFile) {\n\t\t\t\texclude = true\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tif exclude {\n\t\t\treturn nil\n\t\t}\n\n\t\t// 构建目标路径，保持相同的目录结构\n\t\trelPath, err := filepath.Rel(sourcePath, path)\n\t\tif err != nil {\n\t\t\tfmt.Printf(\"Error getting relative path: %v\\n\", err)\n\t\t\treturn err\n\t\t}\n\t\tdestinationFilePath := filepath.Join(destinationPath, relPath)\n\n\t\t// 复制文件\n\t\terr = copyFile(path, destinationFilePath)\n\t\tif err != nil {\n\t\t\tfmt.Printf(\"Error copying file %s: %v\\n\", path, err)\n\t\t\treturn err\n\t\t}\n\n\t\tfmt.Printf(\"Copied %s to %s\\n\", path, destinationFilePath)\n\t\treturn nil\n\t})\n\n\treturn err\n}\n\nfunc main() {\n\tsourcePath := \"/Users/ll/Documents/GitHub/GoEasyDesigner/GoEasyDesigner/frontend/src/components/boxs\"\n\tdestinationPath := \"/Users/ll/Documents/GitHub/GoEasyDesigner/go-easy-demo/frontend/src/components/boxs\"\n\texcludeFiles := []string{\"Attr.vue\", \".js\"}\n\t//删除 destinationPath 下的所有文件\n\terr := os.RemoveAll(destinationPath)\n\tif err != nil {\n\t\treturn\n\t}\n\terr = copyFiles(sourcePath, destinationPath, excludeFiles)\n\tif err != nil {\n\t\tfmt.Printf(\"Error copying files: %v\\n\", err)\n\t}\n}\n"
  }
]