diff --git a/.github/workflows/deploy-website.yml b/.github/workflows/deploy-website.yml new file mode 100644 index 00000000..07adae2d --- /dev/null +++ b/.github/workflows/deploy-website.yml @@ -0,0 +1,56 @@ +name: Deploy Website + +on: + push: + branches: [main] + paths: ['website/**', '.github/workflows/deploy-website.yml'] + workflow_dispatch: + +permissions: + contents: read + pages: write + id-token: write + +concurrency: + group: pages + cancel-in-progress: false + +jobs: + build: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + with: + fetch-depth: 0 + + - uses: pnpm/action-setup@v4 + with: + version: 9.15.0 + + - uses: actions/setup-node@v4 + with: + node-version: 22 + cache: pnpm + + - name: Install dependencies + run: pnpm install --frozen-lockfile + + - name: Build website + run: pnpm --filter open-codesign-website build + + - uses: actions/configure-pages@v4 + + - uses: actions/upload-pages-artifact@v3 + with: + path: website/.vitepress/dist + + deploy: + environment: + name: github-pages + url: ${{ steps.deployment.outputs.page_url }} + needs: build + runs-on: ubuntu-latest + steps: + - name: Deploy to GitHub Pages + id: deployment + uses: actions/deploy-pages@v4 diff --git a/.gitignore b/.gitignore index 0a99bba2..3a070e28 100644 --- a/.gitignore +++ b/.gitignore @@ -51,3 +51,7 @@ pnpm-debug.log* .claude/workspace/ .claude/worktrees/ *.local + +# VitePress +website/.vitepress/dist/ +website/.vitepress/cache/ diff --git a/README.md b/README.md index 79dfe668..a9e69ed5 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ > Open-source AI design tool — prompt to interactive prototype, slide deck, and marketing assets. Multi-model, BYOK, runs on your laptop. -[Vision](./docs/VISION.md) · [Roadmap](./docs/ROADMAP.md) · [Contributing](./CONTRIBUTING.md) · [Collaboration](./docs/COLLABORATION.md) +[Vision](./docs/VISION.md) · [Roadmap](./docs/ROADMAP.md) · [Website](https://opencoworkai.github.io/open-codesign/) · [Contributing](./CONTRIBUTING.md) · [Collaboration](./docs/COLLABORATION.md) --- diff --git a/package.json b/package.json index 76251f1d..e6316fd0 100644 --- a/package.json +++ b/package.json @@ -24,6 +24,9 @@ "lint:fix": "biome check --write .", "typecheck": "turbo run typecheck", "format": "biome format --write .", + "docs:dev": "pnpm --filter open-codesign-website dev", + "docs:build": "pnpm --filter open-codesign-website build", + "docs:preview": "pnpm --filter open-codesign-website preview", "changeset": "changeset", "version-packages": "changeset version", "release": "turbo run build && changeset publish" diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 48e06684..d98e3b3d 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -227,11 +227,99 @@ importers: specifier: ^2.1.8 version: 2.1.9(@types/node@22.19.17)(lightningcss@1.32.0) + website: + devDependencies: + '@tailwindcss/vite': + specifier: ^4.0.0 + version: 4.2.2(vite@5.4.21(@types/node@22.19.17)(lightningcss@1.32.0)) + tailwindcss: + specifier: ^4.0.0 + version: 4.2.2 + vitepress: + specifier: ^1.6.4 + version: 1.6.4(@algolia/client-search@5.50.2)(@types/node@22.19.17)(lightningcss@1.32.0)(postcss@8.5.10)(search-insights@2.17.3)(typescript@5.9.3) + packages: 7zip-bin@5.2.0: resolution: {integrity: sha512-ukTPVhqG4jNzMro2qA9HSCSSVJN3aN7tlb+hfqYCt3ER0yWroeA2VR38MNrOHLQ/cVj+DaIMad0kFCtWWowh/A==} + '@algolia/abtesting@1.16.2': + resolution: {integrity: sha512-n9s6bEV6imdtIEd+BGP7WkA4pEZ5YTdgQ05JQhHwWawHg3hyjpNwC0TShGz6zWhv+jfLDGA/6FFNbySFS0P9cw==} + engines: {node: '>= 14.0.0'} + + '@algolia/autocomplete-core@1.17.7': + resolution: {integrity: sha512-BjiPOW6ks90UKl7TwMv7oNQMnzU+t/wk9mgIDi6b1tXpUek7MW0lbNOUHpvam9pe3lVCf4xPFT+lK7s+e+fs7Q==} + + '@algolia/autocomplete-plugin-algolia-insights@1.17.7': + resolution: {integrity: sha512-Jca5Ude6yUOuyzjnz57og7Et3aXjbwCSDf/8onLHSQgw1qW3ALl9mrMWaXb5FmPVkV3EtkD2F/+NkT6VHyPu9A==} + peerDependencies: + search-insights: '>= 1 < 3' + + '@algolia/autocomplete-preset-algolia@1.17.7': + resolution: {integrity: sha512-ggOQ950+nwbWROq2MOCIL71RE0DdQZsceqrg32UqnhDz8FlO9rL8ONHNsI2R1MH0tkgVIDKI/D0sMiUchsFdWA==} + peerDependencies: + '@algolia/client-search': '>= 4.9.1 < 6' + algoliasearch: '>= 4.9.1 < 6' + + '@algolia/autocomplete-shared@1.17.7': + resolution: {integrity: sha512-o/1Vurr42U/qskRSuhBH+VKxMvkkUVTLU6WZQr+L5lGZZLYWyhdzWjW0iGXY7EkwRTjBqvN2EsR81yCTGV/kmg==} + peerDependencies: + '@algolia/client-search': '>= 4.9.1 < 6' + algoliasearch: '>= 4.9.1 < 6' + + '@algolia/client-abtesting@5.50.2': + resolution: {integrity: sha512-52iq0vHy1sphgnwoZyx5PmbEt8hsh+m7jD123LmBs6qy4GK7LbYZIeKd+nSnSipN2zvKRZ2zScS6h9PW3J7SXg==} + engines: {node: '>= 14.0.0'} + + '@algolia/client-analytics@5.50.2': + resolution: {integrity: sha512-WpPIUg+cSG2aPUG0gS8Ko9DwRgbRPUZxJkolhL2aCsmSlcEEZT65dILrfg5ovcxtx0Kvr+xtBVsTMtsQWRtPDQ==} + engines: {node: '>= 14.0.0'} + + '@algolia/client-common@5.50.2': + resolution: {integrity: sha512-Gj2MgtArGcsr82kIqRlo6/dCAFjrs2gLByEqyRENuT7ugrSMFuqg1vDzeBjRL1t3EJEJCFtT0PLX3gB8A6Hq4Q==} + engines: {node: '>= 14.0.0'} + + '@algolia/client-insights@5.50.2': + resolution: {integrity: sha512-CUqoid5jDpmrc0oK3/xuZXFt6kwT0P9Lw7/nsM14YTr6puvmi+OUKmURpmebQF22S2vCG8L1DAoXXujxQUi/ug==} + engines: {node: '>= 14.0.0'} + + '@algolia/client-personalization@5.50.2': + resolution: {integrity: sha512-AndZWFoc0gbP5901OeQJ73BazgGgSGiBEba4ohdoJuZwHTO2Gio8Q4L1VLmytMBYcviVigB0iICToMvEJxI4ug==} + engines: {node: '>= 14.0.0'} + + '@algolia/client-query-suggestions@5.50.2': + resolution: {integrity: sha512-NWoL+psEkz5dIzweaByVXuEB45wS8/rk0E0AhMMnaVJdVs7TcACPH2/OURm+N0xRDITkTHqCna823rd6Uqntdg==} + engines: {node: '>= 14.0.0'} + + '@algolia/client-search@5.50.2': + resolution: {integrity: sha512-ypSboUJ3XJoQz5DeDo82hCnrRuwq3q9ZdFhVKAik9TnZh1DvLqoQsrbBjXg7C7zQOtV/Qbge/HmyoV6V5L7MhQ==} + engines: {node: '>= 14.0.0'} + + '@algolia/ingestion@1.50.2': + resolution: {integrity: sha512-VlR2FRXLw2bCB94SQo6zxg/Qi+547aOji6Pb+dKE7h1DMCCY317St+OpjpmgzE+bT2O9ALIc0V4nVIBOd7Gy+Q==} + engines: {node: '>= 14.0.0'} + + '@algolia/monitoring@1.50.2': + resolution: {integrity: sha512-Cmvfp2+qopzQt8OilU97rhLhosq7ZrB6uieok3EwFUqG/aalPg6DgfCmu0yJMrYe+KMC1qRVt1MTRAUwLknUMQ==} + engines: {node: '>= 14.0.0'} + + '@algolia/recommend@5.50.2': + resolution: {integrity: sha512-jrkuyKoOM7dFWQ/6Y4hQAse2SC3L/RldG6GnPjMvAj65h+7Ubb51S0pKk4ofSStF0xm4LCNe0C4T6XX4nOFDiQ==} + engines: {node: '>= 14.0.0'} + + '@algolia/requester-browser-xhr@5.50.2': + resolution: {integrity: sha512-4107YLJqCudPiBUlwnk6oTSUVwU7ab+qL1SfQGEDYI8DZH5gsf1ekPt9JykXRKYXf2IfouFL5GiCY/PHTFIjYw==} + engines: {node: '>= 14.0.0'} + + '@algolia/requester-fetch@5.50.2': + resolution: {integrity: sha512-vOrd3MQpLgmf6wXAueTuZ/cA0W4uRwIHHaxNy3h+a6YcNn6bCV/gFdZuv3F13v593zRU2k5R75NmvRWLenvMrw==} + engines: {node: '>= 14.0.0'} + + '@algolia/requester-node-http@5.50.2': + resolution: {integrity: sha512-Mu9BFtgzGqDUy5Bcs2nMyoILIFSN13GKQaklKAFIsd0K3/9CpNyfeBc+/+Qs6mFZLlxG9qzullO7h+bjcTBuGQ==} + engines: {node: '>= 14.0.0'} + '@alloc/quick-lru@5.2.0': resolution: {integrity: sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==} engines: {node: '>=10'} @@ -583,6 +671,29 @@ packages: resolution: {integrity: sha512-0cp4PsWQ/9avqTVMCtZ+GirikIA36ikvjtHweU4/j8yLtgObI0+JUPhYFScgwlteveGB1rt3Cm8UhN04XayDig==} engines: {node: '>= 8.9.0'} + '@docsearch/css@3.8.2': + resolution: {integrity: sha512-y05ayQFyUmCXze79+56v/4HpycYF3uFqB78pLPrSV5ZKAlDuIAAJNhaRi8tTdRNXh05yxX/TyNnzD6LwSM89vQ==} + + '@docsearch/js@3.8.2': + resolution: {integrity: sha512-Q5wY66qHn0SwA7Taa0aDbHiJvaFJLOJyHmooQ7y8hlwwQLQ/5WwCcoX0g7ii04Qi2DJlHsd0XXzJ8Ypw9+9YmQ==} + + '@docsearch/react@3.8.2': + resolution: {integrity: sha512-xCRrJQlTt8N9GU0DG4ptwHRkfnSnD/YpdeaXe02iKfqs97TkZJv60yE+1eq/tjPcVnTW8dP5qLP7itifFVV5eg==} + peerDependencies: + '@types/react': '>= 16.8.0 < 19.0.0' + react: '>= 16.8.0 < 19.0.0' + react-dom: '>= 16.8.0 < 19.0.0' + search-insights: '>= 1 < 3' + peerDependenciesMeta: + '@types/react': + optional: true + react: + optional: true + react-dom: + optional: true + search-insights: + optional: true + '@electron/asar@3.4.1': resolution: {integrity: sha512-i4/rNPRS84t0vSRa2HorerGRXWyF4vThfHesw0dmcWHp+cspK743UanA0suA5Q5y8kzY2y6YKrvbIUn69BCAiA==} engines: {node: '>=10.12.0'} @@ -919,6 +1030,12 @@ packages: '@iarna/toml@2.2.5': resolution: {integrity: sha512-trnsAYxU3xnS1gPHPyU961coFyLkh4gAD/0zQ5mymY4yOZ+CYvsPqUbOFSw0aDM4y0tV7tiFxL/1XfXPNC6IPg==} + '@iconify-json/simple-icons@1.2.78': + resolution: {integrity: sha512-I3lkNp0Qu7q2iZWkdcf/I2hqGhzK6qxdILh9T7XqowQrnpmG/BayDsiCf6PktDoWlW0U971xA5g+panm+NFrfQ==} + + '@iconify/types@2.0.0': + resolution: {integrity: sha512-+wluvCrRhXrhyOmRDJ3q8mux9JkKy5SJ/v8ol2tu4FVjyYvtEzkc/3pK15ET6RKg4b4w4BmTk1+gsCUhf21Ykg==} + '@inquirer/external-editor@1.0.3': resolution: {integrity: sha512-RWbSrDiYmO4LbejWY7ttpxczuwQyZLBUyygsA9Nsv95hpzUWwnNTVQmAq3xuh7vNwCp07UTmE5i11XAEExx4RA==} engines: {node: '>=18'} @@ -1153,6 +1270,30 @@ packages: cpu: [x64] os: [win32] + '@shikijs/core@2.5.0': + resolution: {integrity: sha512-uu/8RExTKtavlpH7XqnVYBrfBkUc20ngXiX9NSrBhOVZYv/7XQRKUyhtkeflY5QsxC0GbJThCerruZfsUaSldg==} + + '@shikijs/engine-javascript@2.5.0': + resolution: {integrity: sha512-VjnOpnQf8WuCEZtNUdjjwGUbtAVKuZkVQ/5cHy/tojVVRIRtlWMYVjyWhxOmIq05AlSOv72z7hRNRGVBgQOl0w==} + + '@shikijs/engine-oniguruma@2.5.0': + resolution: {integrity: sha512-pGd1wRATzbo/uatrCIILlAdFVKdxImWJGQ5rFiB5VZi2ve5xj3Ax9jny8QvkaV93btQEwR/rSz5ERFpC5mKNIw==} + + '@shikijs/langs@2.5.0': + resolution: {integrity: sha512-Qfrrt5OsNH5R+5tJ/3uYBBZv3SuGmnRPejV9IlIbFH3HTGLDlkqgHymAlzklVmKBjAaVmkPkyikAV/sQ1wSL+w==} + + '@shikijs/themes@2.5.0': + resolution: {integrity: sha512-wGrk+R8tJnO0VMzmUExHR+QdSaPUl/NKs+a4cQQRWyoc3YFbUzuLEi/KWK1hj+8BfHRKm2jNhhJck1dfstJpiw==} + + '@shikijs/transformers@2.5.0': + resolution: {integrity: sha512-SI494W5X60CaUwgi8u4q4m4s3YAFSxln3tzNjOSYqq54wlVgz0/NbbXEb3mdLbqMBztcmS7bVTaEd2w0qMmfeg==} + + '@shikijs/types@2.5.0': + resolution: {integrity: sha512-ygl5yhxki9ZLNuNpPitBWvcy9fsSKKaRuO4BAlMyagszQidxcpLAr0qiW/q43DtSIDxO6hEbtYLiFZNXO/hdGw==} + + '@shikijs/vscode-textmate@10.0.2': + resolution: {integrity: sha512-83yeghZ2xxin3Nj8z1NMd/NCuca+gsYXswywDy5bHvwlWL8tpTQmzGeUuHd9FC3E/SBEMvzJRwWEOz5gGes9Qg==} + '@sinclair/typebox@0.34.49': resolution: {integrity: sha512-brySQQs7Jtn0joV8Xh9ZV/hZb9Ozb0pmazDIASBkYKCjXrXU3mpcFahmK/z4YDhGkQvP9mWJbVyahdtU5wQA+A==} @@ -1440,6 +1581,11 @@ packages: '@tailwindcss/postcss@4.2.2': resolution: {integrity: sha512-n4goKQbW8RVXIbNKRB/45LzyUqN451deQK0nzIeauVEqjlI49slUlgKYJM2QyUzap/PcpnS7kzSUmPb1sCRvYQ==} + '@tailwindcss/vite@4.2.2': + resolution: {integrity: sha512-mEiF5HO1QqCLXoNEfXVA1Tzo+cYsrqV7w9Juj2wdUFyW07JRenqMG225MvPwr3ZD9N1bFQj46X7r33iHxLUW0w==} + peerDependencies: + vite: ^5.2.0 || ^6 || ^7 || ^8 + '@tootallnate/once@2.0.0': resolution: {integrity: sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==} engines: {node: '>= 10'} @@ -1501,12 +1647,27 @@ packages: '@types/fs-extra@9.0.13': resolution: {integrity: sha512-nEnwB++1u5lVDM2UI4c1+5R+FYaKfaAzS4OococimjVm3nQw3TuzH5UNsocrcTBbhnerblyHj4A49qXbIiZdpA==} + '@types/hast@3.0.4': + resolution: {integrity: sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==} + '@types/http-cache-semantics@4.2.0': resolution: {integrity: sha512-L3LgimLHXtGkWikKnsPg0/VFx9OGZaC+eN1u4r+OB1XRqH3meBIAVC2zr1WdMH+RHmnRkqliQAOHNJ/E0j/e0Q==} '@types/keyv@3.1.4': resolution: {integrity: sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==} + '@types/linkify-it@5.0.0': + resolution: {integrity: sha512-sVDA58zAw4eWAffKOaQH5/5j3XeayukzDk+ewSsnv3p4yJEZHCCzMDiZM8e0OUrRvmpGZ85jf4yDHkHsgBNr9Q==} + + '@types/markdown-it@14.1.2': + resolution: {integrity: sha512-promo4eFwuiW+TfGxhi+0x3czqTYJkG8qB17ZUJiVF10Xm7NLVRSLUsfRTU/6h1e24VvRnXCx+hG7li58lkzog==} + + '@types/mdast@4.0.4': + resolution: {integrity: sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==} + + '@types/mdurl@2.0.0': + resolution: {integrity: sha512-RGdgjQUZba5p6QEFAVx2OGb8rQDL/cPRG7GiedRzMcJ1tYnUANBncjbSB1NRGwbvjcPeikRABz2nshyPk1bhWg==} + '@types/ms@2.1.0': resolution: {integrity: sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==} @@ -1536,18 +1697,34 @@ packages: '@types/retry@0.12.0': resolution: {integrity: sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==} + '@types/unist@3.0.3': + resolution: {integrity: sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==} + '@types/verror@1.10.11': resolution: {integrity: sha512-RlDm9K7+o5stv0Co8i8ZRGxDbrTxhJtgjqjFyVh/tXQyl/rYtTKlnTvZ88oSTeYREWurwx20Js4kTuKCsFkUtg==} + '@types/web-bluetooth@0.0.21': + resolution: {integrity: sha512-oIQLCGWtcFZy2JW77j9k8nHzAOpqMHLQejDA48XXMWH6tjCQHz5RCFz1bzsmROyL6PUm+LLnUiI4BCn221inxA==} + '@types/yauzl@2.10.3': resolution: {integrity: sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==} + '@ungap/structured-clone@1.3.0': + resolution: {integrity: sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==} + '@vitejs/plugin-react@4.7.0': resolution: {integrity: sha512-gUu9hwfWvvEDBBmgtAowQCojwZmJ5mcLn3aufeCsitijs3+f2NsrPtlAWIR6OPiqljl96GVCUbLe0HyqIpVaoA==} engines: {node: ^14.18.0 || >=16.0.0} peerDependencies: vite: ^4.2.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 + '@vitejs/plugin-vue@5.2.4': + resolution: {integrity: sha512-7Yx/SXSOcQq5HiiV3orevHUFn+pmMB4cgbEkDYgnkUWb0WfeQ/wa2yFv6D5ICiCQOVpjA7vYDXrC7AGO8yjDHA==} + engines: {node: ^18.0.0 || >=20.0.0} + peerDependencies: + vite: ^5.0.0 || ^6.0.0 + vue: ^3.2.25 + '@vitest/expect@2.1.9': resolution: {integrity: sha512-UJCIkTBenHeKT1TTlKMJWy1laZewsRIzYighyYiJKZreqtdxSos/S1t+ktRMQWu2CKqaarrkeszJx1cgC5tGZw==} @@ -1577,6 +1754,94 @@ packages: '@vitest/utils@2.1.9': resolution: {integrity: sha512-v0psaMSkNJ3A2NMrUEHFRzJtDPFn+/VWZ5WxImB21T9fjucJRmS7xCS3ppEnARb9y11OAzaD+P2Ps+b+BGX5iQ==} + '@vue/compiler-core@3.5.32': + resolution: {integrity: sha512-4x74Tbtqnda8s/NSD6e1Dr5p1c8HdMU5RWSjMSUzb8RTcUQqevDCxVAitcLBKT+ie3o0Dl9crc/S/opJM7qBGQ==} + + '@vue/compiler-dom@3.5.32': + resolution: {integrity: sha512-ybHAu70NtiEI1fvAUz3oXZqkUYEe5J98GjMDpTGl5iHb0T15wQYLR4wE3h9xfuTNA+Cm2f4czfe8B4s+CCH57Q==} + + '@vue/compiler-sfc@3.5.32': + resolution: {integrity: sha512-8UYUYo71cP/0YHMO814TRZlPuUUw3oifHuMR7Wp9SNoRSrxRQnhMLNlCeaODNn6kNTJsjFoQ/kqIj4qGvya4Xg==} + + '@vue/compiler-ssr@3.5.32': + resolution: {integrity: sha512-Gp4gTs22T3DgRotZ8aA/6m2jMR+GMztvBXUBEUOYOcST+giyGWJ4WvFd7QLHBkzTxkfOt8IELKNdpzITLbA2rw==} + + '@vue/devtools-api@7.7.9': + resolution: {integrity: sha512-kIE8wvwlcZ6TJTbNeU2HQNtaxLx3a84aotTITUuL/4bzfPxzajGBOoqjMhwZJ8L9qFYDU/lAYMEEm11dnZOD6g==} + + '@vue/devtools-kit@7.7.9': + resolution: {integrity: sha512-PyQ6odHSgiDVd4hnTP+aDk2X4gl2HmLDfiyEnn3/oV+ckFDuswRs4IbBT7vacMuGdwY/XemxBoh302ctbsptuA==} + + '@vue/devtools-shared@7.7.9': + resolution: {integrity: sha512-iWAb0v2WYf0QWmxCGy0seZNDPdO3Sp5+u78ORnyeonS6MT4PC7VPrryX2BpMJrwlDeaZ6BD4vP4XKjK0SZqaeA==} + + '@vue/reactivity@3.5.32': + resolution: {integrity: sha512-/ORasxSGvZ6MN5gc+uE364SxFdJ0+WqVG0CENXaGW58TOCdrAW76WWaplDtECeS1qphvtBZtR+3/o1g1zL4xPQ==} + + '@vue/runtime-core@3.5.32': + resolution: {integrity: sha512-pDrXCejn4UpFDFmMd27AcJEbHaLemaE5o4pbb7sLk79SRIhc6/t34BQA7SGNgYtbMnvbF/HHOftYBgFJtUoJUQ==} + + '@vue/runtime-dom@3.5.32': + resolution: {integrity: sha512-1CDVv7tv/IV13V8Nip1k/aaObVbWqRlVCVezTwx3K07p7Vxossp5JU1dcPNhJk3w347gonIUT9jQOGutyJrSVQ==} + + '@vue/server-renderer@3.5.32': + resolution: {integrity: sha512-IOjm2+JQwRFS7W28HNuJeXQle9KdZbODFY7hFGVtnnghF51ta20EWAZJHX+zLGtsHhaU6uC9BGPV52KVpYryMQ==} + peerDependencies: + vue: 3.5.32 + + '@vue/shared@3.5.32': + resolution: {integrity: sha512-ksNyrmRQzWJJ8n3cRDuSF7zNNontuJg1YHnmWRJd2AMu8Ij2bqwiiri2lH5rHtYPZjj4STkNcgcmiQqlOjiYGg==} + + '@vueuse/core@12.8.2': + resolution: {integrity: sha512-HbvCmZdzAu3VGi/pWYm5Ut+Kd9mn1ZHnn4L5G8kOQTPs/IwIAmJoBrmYk2ckLArgMXZj0AW3n5CAejLUO+PhdQ==} + + '@vueuse/integrations@12.8.2': + resolution: {integrity: sha512-fbGYivgK5uBTRt7p5F3zy6VrETlV9RtZjBqd1/HxGdjdckBgBM4ugP8LHpjolqTj14TXTxSK1ZfgPbHYyGuH7g==} + peerDependencies: + async-validator: ^4 + axios: ^1 + change-case: ^5 + drauu: ^0.4 + focus-trap: ^7 + fuse.js: ^7 + idb-keyval: ^6 + jwt-decode: ^4 + nprogress: ^0.2 + qrcode: ^1.5 + sortablejs: ^1 + universal-cookie: ^7 + peerDependenciesMeta: + async-validator: + optional: true + axios: + optional: true + change-case: + optional: true + drauu: + optional: true + focus-trap: + optional: true + fuse.js: + optional: true + idb-keyval: + optional: true + jwt-decode: + optional: true + nprogress: + optional: true + qrcode: + optional: true + sortablejs: + optional: true + universal-cookie: + optional: true + + '@vueuse/metadata@12.8.2': + resolution: {integrity: sha512-rAyLGEuoBJ/Il5AmFHiziCPdQzRt88VxR+Y/A/QhJ1EWtWqPBBAxTAFaSkviwEuOEZNtW8pvkPgoCZQ+HxqW1A==} + + '@vueuse/shared@12.8.2': + resolution: {integrity: sha512-dznP38YzxZoNloI0qpEfpkms8knDtaoQ6Y/sfS0L7Yki4zh40LFHEhur0odJC6xTHG5dxWVPiUWBXn+wCG2s5w==} + '@xmldom/xmldom@0.8.12': resolution: {integrity: sha512-9k/gHF6n/pAi/9tqr3m3aqkuiNosYTurLLUtc7xQ9sxB/wm7WPygCv8GYa6mS0fLJEHhqMC1ATYhz++U/lRHqg==} engines: {node: '>=10.0.0'} @@ -1619,6 +1884,10 @@ packages: ajv@8.18.0: resolution: {integrity: sha512-PlXPeEWMXMZ7sPYOHqmDyCJzcfNrUr3fGNKtezX14ykXOEIvyK81d+qydx89KY5O71FKMPaQ2vBfBFI5NHR63A==} + algoliasearch@5.50.2: + resolution: {integrity: sha512-Tfp26yoNWurUjfgK4GOrVJQhSNXu9tJtHfFFNosgT2YClG+vPyUjX/gbC8rG39qLncnZg8Fj34iarQWpMkqefw==} + engines: {node: '>= 14.0.0'} + ansi-colors@4.1.3: resolution: {integrity: sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==} engines: {node: '>=6'} @@ -1742,6 +2011,9 @@ packages: bignumber.js@9.3.1: resolution: {integrity: sha512-Ko0uX15oIUS7wJ3Rb30Fs6SkVbLmPBAKdlm7q9+ak9bbIeFf0MwuBsQV6z7+X768/cHsfg+WlysDWJcmthjsjQ==} + birpc@2.9.0: + resolution: {integrity: sha512-KrayHS5pBi69Xi9JmvoqrIgYGDkD6mcSe/i6YKi3w5kekCLzrX4+nawcXqrj2tIp50Kw/mT/s3p+GVK0A0sKxw==} + bl@4.1.0: resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==} @@ -1823,6 +2095,9 @@ packages: caniuse-lite@1.0.30001788: resolution: {integrity: sha512-6q8HFp+lOQtcf7wBK+uEenxymVWkGKkjFpCvw5W25cmMwEDU45p1xQFBQv8JDlMMry7eNxyBaR+qxgmTUZkIRQ==} + ccount@2.0.1: + resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==} + chai@5.3.3: resolution: {integrity: sha512-4zNhdJD/iOjSH0A05ea+Ke6MU5mmpQcbQsSOkgdaUMJ9zTlDTD/GYlwohmIE2u0gaxHYiVHEn1Fw9mZ/ktJWgw==} engines: {node: '>=18'} @@ -1835,6 +2110,12 @@ packages: resolution: {integrity: sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==} engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} + character-entities-html4@2.1.0: + resolution: {integrity: sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==} + + character-entities-legacy@3.0.0: + resolution: {integrity: sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==} + chardet@2.1.1: resolution: {integrity: sha512-PsezH1rqdV9VvyNhxxOW32/d75r01NY7TQCmOqomRo15ZSOKbpTFVsfjghxo6JloQUCGnH4k1LGu0R4yCLlWQQ==} @@ -1895,6 +2176,9 @@ packages: resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} engines: {node: '>= 0.8'} + comma-separated-tokens@2.0.3: + resolution: {integrity: sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==} + commander@5.1.0: resolution: {integrity: sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==} engines: {node: '>= 6'} @@ -1919,6 +2203,10 @@ packages: convert-source-map@2.0.0: resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} + copy-anything@4.0.5: + resolution: {integrity: sha512-7Vv6asjS4gMOuILabD3l739tsaxFQmC+a7pLZm02zyvs8p977bL3zEgq3yDk5rn9B0PbYgIv++jmHcuUab4RhA==} + engines: {node: '>=18'} + core-util-is@1.0.2: resolution: {integrity: sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==} @@ -1995,6 +2283,10 @@ packages: delegates@1.0.0: resolution: {integrity: sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==} + dequal@2.0.3: + resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==} + engines: {node: '>=6'} + detect-indent@6.1.0: resolution: {integrity: sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==} engines: {node: '>=8'} @@ -2006,6 +2298,9 @@ packages: detect-node@2.1.0: resolution: {integrity: sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==} + devlop@1.1.0: + resolution: {integrity: sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==} + dir-compare@4.2.0: resolution: {integrity: sha512-2xMCmOoMrdQIPHdsTawECdNPwlVFB9zGcz3kuhmBO6U3oU+UQjsue0i8ayLKpgBcm+hcXPMVSGUN9d+pvJ6+VQ==} @@ -2078,6 +2373,9 @@ packages: engines: {node: '>= 12.20.55'} hasBin: true + emoji-regex-xs@1.0.0: + resolution: {integrity: sha512-LRlerrMYoIDrT6jgpeZ2YYl/L8EulRTt5hQcYjy5AInh7HWXKimpqx68aknBFpGL2+/IcogTcaydJEgaTmOpDg==} + emoji-regex@8.0.0: resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} @@ -2098,6 +2396,10 @@ packages: resolution: {integrity: sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==} engines: {node: '>=8.6'} + entities@7.0.1: + resolution: {integrity: sha512-TWrgLOFUQTH994YUyl1yT4uyavY5nNB5muff+RtWaqNVCAK408b5ZnnbNAUEWLTCpum9w6arT70i1XdQ4UeOPA==} + engines: {node: '>=0.12'} + env-paths@2.2.1: resolution: {integrity: sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==} engines: {node: '>=6'} @@ -2159,6 +2461,9 @@ packages: resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} engines: {node: '>=4.0'} + estree-walker@2.0.2: + resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==} + estree-walker@3.0.3: resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==} @@ -2238,6 +2543,9 @@ packages: resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} engines: {node: '>=8'} + focus-trap@7.8.0: + resolution: {integrity: sha512-/yNdlIkpWbM0ptxno3ONTuf+2g318kh2ez3KSeZN5dZ8YC6AAmgeWz+GasYYiBJPFaYcSAPeu4GfhUaChzIJXA==} + foreground-child@3.3.1: resolution: {integrity: sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==} engines: {node: '>=14'} @@ -2399,10 +2707,22 @@ packages: resolution: {integrity: sha512-ej4AhfhfL2Q2zpMmLo7U1Uv9+PyhIZpgQLGT1F9miIGmiCJIoCgSmczFdrc97mWT4kVY72KA+WnnhJ5pghSvSg==} engines: {node: '>= 0.4'} + hast-util-to-html@9.0.5: + resolution: {integrity: sha512-OguPdidb+fbHQSU4Q4ZiLKnzWo8Wwsf5bZfbvu7//a9oTYoqD/fWpe96NuHkoS9h0ccGOTe0C4NGXdtS0iObOw==} + + hast-util-whitespace@3.0.0: + resolution: {integrity: sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==} + + hookable@5.5.3: + resolution: {integrity: sha512-Yc+BQe8SvoXH1643Qez1zqLRmbA5rCL+sSmk6TVos0LWVfNIB7PGncdlId77WzLGSIB5KaWgTaNTs2lNVEI6VQ==} + hosted-git-info@4.1.0: resolution: {integrity: sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==} engines: {node: '>=10'} + html-void-elements@3.0.0: + resolution: {integrity: sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg==} + http-cache-semantics@4.2.0: resolution: {integrity: sha512-dTxcvPXqPvXBQpq5dUr6mEMJX4oIEFv6bwom3FDwKRDsuIjjJGANqhBuoAn9c1RQJIdAKav33ED65E2ys+87QQ==} @@ -2510,6 +2830,10 @@ packages: resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==} engines: {node: '>=10'} + is-what@5.5.0: + resolution: {integrity: sha512-oG7cgbmg5kLYae2N5IVd3jm2s+vldjxJzK1pcu9LfpGuQ93MQSzo0okvRna+7y5ifrD+20FE8FvjusyGaz14fw==} + engines: {node: '>=18'} + is-windows@1.0.2: resolution: {integrity: sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==} engines: {node: '>=0.10.0'} @@ -2744,6 +3068,9 @@ packages: resolution: {integrity: sha512-NgOPbRiaQM10DYXvN3/hhGVI2M5MtITFryzBGxHM5p4wnFxsVCbxkrBrDsk+EZ5OB4jEOT7AjDxtdF+KVEFT7w==} engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + mark.js@8.11.1: + resolution: {integrity: sha512-1I+1qpDt4idfgLQG+BNWmrqku+7/2bi5nLf4YwF8y8zXvmfiTBY3PV3ZibfrjBueCByROpuBjLLFCajqkgYoLQ==} + matcher@3.0.0: resolution: {integrity: sha512-OkeDaAZ/bQCxeFAozM55PKcKU0yJMPGifLwV4Qgjitu+5MoAfSQN4lsLJeXZ1b8w0x+/Emda6MZgXS1jvsapng==} engines: {node: '>=10'} @@ -2752,10 +3079,28 @@ packages: resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==} engines: {node: '>= 0.4'} + mdast-util-to-hast@13.2.1: + resolution: {integrity: sha512-cctsq2wp5vTsLIcaymblUriiTcZd0CwWtCbLvrOzYCDZoWyMNV8sZ7krj09FSnsiJi3WVsHLM4k6Dq/yaPyCXA==} + merge2@1.4.1: resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} engines: {node: '>= 8'} + micromark-util-character@2.1.1: + resolution: {integrity: sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==} + + micromark-util-encode@2.0.1: + resolution: {integrity: sha512-c3cVx2y4KqUnwopcO9b/SCdo2O67LwJJ/UyqGfbigahfegL9myoEFoDYZgkT7f36T0bLrM9hZTAaAyH+PCAXjw==} + + micromark-util-sanitize-uri@2.0.1: + resolution: {integrity: sha512-9N9IomZ/YuGGZZmQec1MbgxtlgougxTodVwDzzEouPKo3qFWvymFHWcnDi2vzV1ff6kas9ucW+o3yzJK9YB1AQ==} + + micromark-util-symbol@2.0.1: + resolution: {integrity: sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==} + + micromark-util-types@2.0.2: + resolution: {integrity: sha512-Yw0ECSpJoViF1qTU4DC6NwtC4aWGt1EkzaQB8KPPyCRR8z9TWeV0HbEFGTO+ZY1wB22zmxnJqhPyTpOVCpeHTA==} + micromatch@4.0.8: resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} engines: {node: '>=8.6'} @@ -2835,10 +3180,16 @@ packages: resolution: {integrity: sha512-tEBHqDnIoM/1rXME1zgka9g6Q2lcoCkxHLuc7ODJ5BxbP5d4c2Z5cGgtXAku59200Cx7diuHTOYfSBD8n6mm8A==} engines: {node: '>=16 || 14 >=14.17'} + minisearch@7.2.0: + resolution: {integrity: sha512-dqT2XBYUOZOiC5t2HRnwADjhNS2cecp9u+TJRiJ1Qp/f5qjkeT5APcGPjHw+bz89Ms8Jp+cG4AlE+QZ/QnDglg==} + minizlib@2.1.2: resolution: {integrity: sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==} engines: {node: '>= 8'} + mitt@3.0.1: + resolution: {integrity: sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==} + mkdirp@1.0.4: resolution: {integrity: sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==} engines: {node: '>=10'} @@ -2920,6 +3271,9 @@ packages: resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} engines: {node: '>=6'} + oniguruma-to-es@3.1.1: + resolution: {integrity: sha512-bUH8SDvPkH3ho3dvwJwfonjlQ4R80vjyvrU8YpxuROddv55vAEJrTuCuCVUhhsHbtlD9tGGbaNApGQckXhS8iQ==} + openai@6.26.0: resolution: {integrity: sha512-zd23dbWTjiJ6sSAX6s0HrCZi41JwTA1bQVs0wLQPZ2/5o2gxOJA5wh7yOAUgwYybfhDXyhwlpeQf7Mlgx8EOCA==} hasBin: true @@ -3030,6 +3384,9 @@ packages: pend@1.2.0: resolution: {integrity: sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==} + perfect-debounce@1.0.0: + resolution: {integrity: sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA==} + picocolors@1.1.1: resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} @@ -3056,6 +3413,9 @@ packages: resolution: {integrity: sha512-pMMHxBOZKFU6HgAZ4eyGnwXF/EvPGGqUr0MnZ5+99485wwW41kW91A4LOGxSHhgugZmSChL5AlElNdwlNgcnLQ==} engines: {node: ^10 || ^12 || >=14} + preact@10.29.1: + resolution: {integrity: sha512-gQCLc/vWroE8lIpleXtdJhTFDogTdZG9AjMUpVkDf2iTCNwYNWA+u16dL41TqUDJO4gm2IgrcMv3uTpjd4Pwmg==} + prettier@2.8.8: resolution: {integrity: sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==} engines: {node: '>=10.13.0'} @@ -3080,6 +3440,9 @@ packages: resolution: {integrity: sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==} engines: {node: '>=10'} + property-information@7.1.0: + resolution: {integrity: sha512-TwEZ+X+yCJmYfL7TPUOcvBZ4QfoT5YenQiJuX//0th53DE6w0xxLEtfK3iyryQFddXuvkIk51EEgrJQ0WJkOmQ==} + protobufjs@7.5.5: resolution: {integrity: sha512-3wY1AxV+VBNW8Yypfd1yQY9pXnqTAN+KwQxL8iYm3/BjKYMNg4i0owhEe26PWDOMaIrzeeF98Lqd5NGz4omiIg==} engines: {node: '>=12.0.0'} @@ -3139,6 +3502,15 @@ packages: readdir-glob@1.1.3: resolution: {integrity: sha512-v05I2k7xN8zXvPD9N+z/uhXPaj0sUFCe2rcWZIpBsqxfP7xXFQ0tipAd/wjj1YxWyWtUS5IDJpOG82JKt2EAVA==} + regex-recursion@6.0.2: + resolution: {integrity: sha512-0YCaSCq2VRIebiaUviZNs0cBz1kg5kVS2UKUfNIx8YVs1cN3AV7NTctO5FOKBA+UT2BPJIWZauYHPqJODG50cg==} + + regex-utilities@2.3.0: + resolution: {integrity: sha512-8VhliFJAWRaUiVvREIiW2NXXTmHs4vMNnSzuJVhscgmGav3g9VDxLrQndI3dZZVVdp0ZO/5v0xmX516/7M9cng==} + + regex@6.1.0: + resolution: {integrity: sha512-6VwtthbV4o/7+OaAF9I5L5V3llLEsoPyq9P1JVXkedTP33c7MfCG0/5NOPcSJn0TzXcG9YUrR0gQSWioew3LDg==} + require-directory@2.1.1: resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} engines: {node: '>=0.10.0'} @@ -3177,6 +3549,9 @@ packages: resolution: {integrity: sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==} engines: {iojs: '>=1.0.0', node: '>=0.10.0'} + rfdc@1.4.1: + resolution: {integrity: sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==} + rimraf@3.0.2: resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} deprecated: Rimraf versions prior to v4 are no longer supported @@ -3213,6 +3588,9 @@ packages: scheduler@0.27.0: resolution: {integrity: sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q==} + search-insights@2.17.3: + resolution: {integrity: sha512-RQPdCYTa8A68uM2jwxoY842xDhvx3E5LFL1LxvxCNMev4o5mLuokczhzjAgGwUZBAmOKZknArSxLKmXtIi2AxQ==} + semver-compare@1.0.0: resolution: {integrity: sha512-YM3/ITh2MJ5MtzaM429anh+x2jiLVjqILF4m4oyQB18W7Ggea7BfqdH/wGMK7dDiMghv/6WG7znWMwUDzJiXow==} @@ -3240,6 +3618,9 @@ packages: resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} engines: {node: '>=8'} + shiki@2.5.0: + resolution: {integrity: sha512-mI//trrsaiCIPsja5CNfsyNOqgAZUb6VpJA+340toL42UpzQlXpwRV9nch69X6gaUxrr9kaOOa6e3y3uAkGFxQ==} + siginfo@2.0.0: resolution: {integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==} @@ -3289,9 +3670,16 @@ packages: resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} engines: {node: '>=0.10.0'} + space-separated-tokens@2.0.2: + resolution: {integrity: sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==} + spawndamnit@3.0.1: resolution: {integrity: sha512-MmnduQUuHCoFckZoWnXsTg7JaiLBJrKFj9UI2MbRPGaJeVpsLcVBu6P/IGZovziM/YBsellCmsprgNA+w0CzVg==} + speakingurl@14.0.1: + resolution: {integrity: sha512-1POYv7uv2gXoyGFpBCmpDVSNV74IfsWlDW216UPjbWufNf+bSU6GdbDsxdcxtfwb4xlI3yxzOTKClUosxARYrQ==} + engines: {node: '>=0.10.0'} + sprintf-js@1.0.3: resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} @@ -3326,6 +3714,9 @@ packages: string_decoder@1.3.0: resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} + stringify-entities@4.0.4: + resolution: {integrity: sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg==} + strip-ansi@6.0.1: resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} engines: {node: '>=8'} @@ -3345,10 +3736,17 @@ packages: resolution: {integrity: sha512-MvjXzkz/BOfyVDkG0oFOtBxHX2u3gKbMHIF/dXblZsgD3BWOFLmHovIpZY7BykJdAjcqRCBi1WYBNdEC9yI7vg==} engines: {node: '>= 8.0'} + superjson@2.2.6: + resolution: {integrity: sha512-H+ue8Zo4vJmV2nRjpx86P35lzwDT3nItnIsocgumgr0hHMQ+ZGq5vrERg9kJBo5AWGmxZDhzDo+WVIJqkB0cGA==} + engines: {node: '>=16'} + supports-color@7.2.0: resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} engines: {node: '>=8'} + tabbable@6.4.0: + resolution: {integrity: sha512-05PUHKSNE8ou2dwIxTngl4EzcnsCDZGJ/iCLtDflR/SHB/ny14rXc+qU5P4mG9JkusiV7EivzY9Mhm55AzAvCg==} + tailwindcss@4.2.2: resolution: {integrity: sha512-KWBIxs1Xb6NoLdMVqhbhgwZf2PGBpPEiwOqgI4pFIYbNTfBXiKYyWoTsXgBQ9WFg/OlhnvHaY+AEpW7wSmFo2Q==} @@ -3408,6 +3806,9 @@ packages: resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} engines: {node: '>=8.0'} + trim-lines@3.0.1: + resolution: {integrity: sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==} + truncate-utf8-bytes@1.0.2: resolution: {integrity: sha512-95Pu1QXQvruGEhv62XCMO3Mm90GscOCClvrIUwCM0PYOXK3kaF3l3sIHxx71ThJfcbM2O5Au6SO3AWCSEfW4mQ==} @@ -3445,6 +3846,21 @@ packages: resolution: {integrity: sha512-8EyMynh679x/0gqE9fT9oilG+qEt+ibFyqjuVTsZn1+CMxH+XLlpvr2UZx4nVcCwTpx81nICr2JQFkM+HPLq4w==} engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + unist-util-is@6.0.1: + resolution: {integrity: sha512-LsiILbtBETkDz8I9p1dQ0uyRUWuaQzd/cuEeS1hoRSyW5E5XGmTzlwY1OrNzzakGowI9Dr/I8HVaw4hTtnxy8g==} + + unist-util-position@5.0.0: + resolution: {integrity: sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==} + + unist-util-stringify-position@4.0.0: + resolution: {integrity: sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==} + + unist-util-visit-parents@6.0.2: + resolution: {integrity: sha512-goh1s1TBrqSqukSc8wrjwWhL0hiJxgA8m4kFxGlQ+8FYQ3C/m11FcTs4YYem7V664AhHVvgoQLk890Ssdsr2IQ==} + + unist-util-visit@5.1.0: + resolution: {integrity: sha512-m+vIdyeCOpdr/QeQCu2EzxX/ohgS8KbnPDgFni4dQsfSCtpz8UqDyY5GjRru8PDKuYn7Fq19j1CQ+nJSsGKOzg==} + universalify@0.1.2: resolution: {integrity: sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==} engines: {node: '>= 4.0.0'} @@ -3472,6 +3888,12 @@ packages: resolution: {integrity: sha512-veufcmxri4e3XSrT0xwfUR7kguIkaxBeosDg00yDWhk49wdwkSUrvvsm7nc75e1PUyvIeZj6nS8VQRYz2/S4Xg==} engines: {node: '>=0.6.0'} + vfile-message@4.0.3: + resolution: {integrity: sha512-QTHzsGd1EhbZs4AsQ20JX1rC3cOlt/IWJruk893DfLRr57lcnOeMaWG4K0JrRta4mIJZKth2Au3mM3u03/JWKw==} + + vfile@6.0.3: + resolution: {integrity: sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==} + vite-node@2.1.9: resolution: {integrity: sha512-AM9aQ/IPrW/6ENLQg3AGY4K1N2TGZdR5e4gu/MmmR2xR3Ll1+dib+nook92g4TV3PXVyeyxdWwtaCAiUL0hMxA==} engines: {node: ^18.0.0 || >=20.0.0} @@ -3548,6 +3970,18 @@ packages: yaml: optional: true + vitepress@1.6.4: + resolution: {integrity: sha512-+2ym1/+0VVrbhNyRoFFesVvBvHAVMZMK0rw60E3X/5349M1GuVdKeazuksqopEdvkKwKGs21Q729jX81/bkBJg==} + hasBin: true + peerDependencies: + markdown-it-mathjax3: ^4 + postcss: ^8 + peerDependenciesMeta: + markdown-it-mathjax3: + optional: true + postcss: + optional: true + vitest@2.1.9: resolution: {integrity: sha512-MSmPM9REYqDGBI8439mA4mWhV5sKmDlBKWIYbA3lRb2PTHACE0mgKwA8yQ2xq9vxDTuk4iPrECBAEW2aoFXY0Q==} engines: {node: ^18.0.0 || >=20.0.0} @@ -3573,6 +4007,14 @@ packages: jsdom: optional: true + vue@3.5.32: + resolution: {integrity: sha512-vM4z4Q9tTafVfMAK7IVzmxg34rSzTFMyIe0UUEijUCkn9+23lj0WRfA83dg7eQZIUlgOSGrkViIaCfqSAUXsMw==} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + wcwidth@1.0.1: resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==} @@ -3675,10 +4117,125 @@ packages: use-sync-external-store: optional: true + zwitch@2.0.4: + resolution: {integrity: sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==} + snapshots: 7zip-bin@5.2.0: {} + '@algolia/abtesting@1.16.2': + dependencies: + '@algolia/client-common': 5.50.2 + '@algolia/requester-browser-xhr': 5.50.2 + '@algolia/requester-fetch': 5.50.2 + '@algolia/requester-node-http': 5.50.2 + + '@algolia/autocomplete-core@1.17.7(@algolia/client-search@5.50.2)(algoliasearch@5.50.2)(search-insights@2.17.3)': + dependencies: + '@algolia/autocomplete-plugin-algolia-insights': 1.17.7(@algolia/client-search@5.50.2)(algoliasearch@5.50.2)(search-insights@2.17.3) + '@algolia/autocomplete-shared': 1.17.7(@algolia/client-search@5.50.2)(algoliasearch@5.50.2) + transitivePeerDependencies: + - '@algolia/client-search' + - algoliasearch + - search-insights + + '@algolia/autocomplete-plugin-algolia-insights@1.17.7(@algolia/client-search@5.50.2)(algoliasearch@5.50.2)(search-insights@2.17.3)': + dependencies: + '@algolia/autocomplete-shared': 1.17.7(@algolia/client-search@5.50.2)(algoliasearch@5.50.2) + search-insights: 2.17.3 + transitivePeerDependencies: + - '@algolia/client-search' + - algoliasearch + + '@algolia/autocomplete-preset-algolia@1.17.7(@algolia/client-search@5.50.2)(algoliasearch@5.50.2)': + dependencies: + '@algolia/autocomplete-shared': 1.17.7(@algolia/client-search@5.50.2)(algoliasearch@5.50.2) + '@algolia/client-search': 5.50.2 + algoliasearch: 5.50.2 + + '@algolia/autocomplete-shared@1.17.7(@algolia/client-search@5.50.2)(algoliasearch@5.50.2)': + dependencies: + '@algolia/client-search': 5.50.2 + algoliasearch: 5.50.2 + + '@algolia/client-abtesting@5.50.2': + dependencies: + '@algolia/client-common': 5.50.2 + '@algolia/requester-browser-xhr': 5.50.2 + '@algolia/requester-fetch': 5.50.2 + '@algolia/requester-node-http': 5.50.2 + + '@algolia/client-analytics@5.50.2': + dependencies: + '@algolia/client-common': 5.50.2 + '@algolia/requester-browser-xhr': 5.50.2 + '@algolia/requester-fetch': 5.50.2 + '@algolia/requester-node-http': 5.50.2 + + '@algolia/client-common@5.50.2': {} + + '@algolia/client-insights@5.50.2': + dependencies: + '@algolia/client-common': 5.50.2 + '@algolia/requester-browser-xhr': 5.50.2 + '@algolia/requester-fetch': 5.50.2 + '@algolia/requester-node-http': 5.50.2 + + '@algolia/client-personalization@5.50.2': + dependencies: + '@algolia/client-common': 5.50.2 + '@algolia/requester-browser-xhr': 5.50.2 + '@algolia/requester-fetch': 5.50.2 + '@algolia/requester-node-http': 5.50.2 + + '@algolia/client-query-suggestions@5.50.2': + dependencies: + '@algolia/client-common': 5.50.2 + '@algolia/requester-browser-xhr': 5.50.2 + '@algolia/requester-fetch': 5.50.2 + '@algolia/requester-node-http': 5.50.2 + + '@algolia/client-search@5.50.2': + dependencies: + '@algolia/client-common': 5.50.2 + '@algolia/requester-browser-xhr': 5.50.2 + '@algolia/requester-fetch': 5.50.2 + '@algolia/requester-node-http': 5.50.2 + + '@algolia/ingestion@1.50.2': + dependencies: + '@algolia/client-common': 5.50.2 + '@algolia/requester-browser-xhr': 5.50.2 + '@algolia/requester-fetch': 5.50.2 + '@algolia/requester-node-http': 5.50.2 + + '@algolia/monitoring@1.50.2': + dependencies: + '@algolia/client-common': 5.50.2 + '@algolia/requester-browser-xhr': 5.50.2 + '@algolia/requester-fetch': 5.50.2 + '@algolia/requester-node-http': 5.50.2 + + '@algolia/recommend@5.50.2': + dependencies: + '@algolia/client-common': 5.50.2 + '@algolia/requester-browser-xhr': 5.50.2 + '@algolia/requester-fetch': 5.50.2 + '@algolia/requester-node-http': 5.50.2 + + '@algolia/requester-browser-xhr@5.50.2': + dependencies: + '@algolia/client-common': 5.50.2 + + '@algolia/requester-fetch@5.50.2': + dependencies: + '@algolia/client-common': 5.50.2 + + '@algolia/requester-node-http@5.50.2': + dependencies: + '@algolia/client-common': 5.50.2 + '@alloc/quick-lru@5.2.0': {} '@anthropic-ai/sdk@0.90.0(zod@3.25.76)': @@ -4365,6 +4922,30 @@ snapshots: ajv: 6.14.0 ajv-keywords: 3.5.2(ajv@6.14.0) + '@docsearch/css@3.8.2': {} + + '@docsearch/js@3.8.2(@algolia/client-search@5.50.2)(search-insights@2.17.3)': + dependencies: + '@docsearch/react': 3.8.2(@algolia/client-search@5.50.2)(search-insights@2.17.3) + preact: 10.29.1 + transitivePeerDependencies: + - '@algolia/client-search' + - '@types/react' + - react + - react-dom + - search-insights + + '@docsearch/react@3.8.2(@algolia/client-search@5.50.2)(search-insights@2.17.3)': + dependencies: + '@algolia/autocomplete-core': 1.17.7(@algolia/client-search@5.50.2)(algoliasearch@5.50.2)(search-insights@2.17.3) + '@algolia/autocomplete-preset-algolia': 1.17.7(@algolia/client-search@5.50.2)(algoliasearch@5.50.2) + '@docsearch/css': 3.8.2 + algoliasearch: 5.50.2 + optionalDependencies: + search-insights: 2.17.3 + transitivePeerDependencies: + - '@algolia/client-search' + '@electron/asar@3.4.1': dependencies: commander: 5.1.0 @@ -4598,6 +5179,12 @@ snapshots: '@iarna/toml@2.2.5': {} + '@iconify-json/simple-icons@1.2.78': + dependencies: + '@iconify/types': 2.0.0 + + '@iconify/types@2.0.0': {} + '@inquirer/external-editor@1.0.3(@types/node@22.19.17)': dependencies: chardet: 2.1.1 @@ -4820,6 +5407,46 @@ snapshots: '@rollup/rollup-win32-x64-msvc@4.60.1': optional: true + '@shikijs/core@2.5.0': + dependencies: + '@shikijs/engine-javascript': 2.5.0 + '@shikijs/engine-oniguruma': 2.5.0 + '@shikijs/types': 2.5.0 + '@shikijs/vscode-textmate': 10.0.2 + '@types/hast': 3.0.4 + hast-util-to-html: 9.0.5 + + '@shikijs/engine-javascript@2.5.0': + dependencies: + '@shikijs/types': 2.5.0 + '@shikijs/vscode-textmate': 10.0.2 + oniguruma-to-es: 3.1.1 + + '@shikijs/engine-oniguruma@2.5.0': + dependencies: + '@shikijs/types': 2.5.0 + '@shikijs/vscode-textmate': 10.0.2 + + '@shikijs/langs@2.5.0': + dependencies: + '@shikijs/types': 2.5.0 + + '@shikijs/themes@2.5.0': + dependencies: + '@shikijs/types': 2.5.0 + + '@shikijs/transformers@2.5.0': + dependencies: + '@shikijs/core': 2.5.0 + '@shikijs/types': 2.5.0 + + '@shikijs/types@2.5.0': + dependencies: + '@shikijs/vscode-textmate': 10.0.2 + '@types/hast': 3.0.4 + + '@shikijs/vscode-textmate@10.0.2': {} + '@sinclair/typebox@0.34.49': {} '@sindresorhus/is@4.6.0': {} @@ -5197,6 +5824,13 @@ snapshots: postcss: 8.5.10 tailwindcss: 4.2.2 + '@tailwindcss/vite@4.2.2(vite@5.4.21(@types/node@22.19.17)(lightningcss@1.32.0))': + dependencies: + '@tailwindcss/node': 4.2.2 + '@tailwindcss/oxide': 4.2.2 + tailwindcss: 4.2.2 + vite: 5.4.21(@types/node@22.19.17)(lightningcss@1.32.0) + '@tootallnate/once@2.0.0': {} '@tootallnate/quickjs-emscripten@0.23.0': {} @@ -5257,12 +5891,29 @@ snapshots: dependencies: '@types/node': 22.19.17 + '@types/hast@3.0.4': + dependencies: + '@types/unist': 3.0.3 + '@types/http-cache-semantics@4.2.0': {} '@types/keyv@3.1.4': dependencies: '@types/node': 22.19.17 + '@types/linkify-it@5.0.0': {} + + '@types/markdown-it@14.1.2': + dependencies: + '@types/linkify-it': 5.0.0 + '@types/mdurl': 2.0.0 + + '@types/mdast@4.0.4': + dependencies: + '@types/unist': 3.0.3 + + '@types/mdurl@2.0.0': {} + '@types/ms@2.1.0': {} '@types/node@12.20.55': {} @@ -5295,14 +5946,20 @@ snapshots: '@types/retry@0.12.0': {} + '@types/unist@3.0.3': {} + '@types/verror@1.10.11': optional: true + '@types/web-bluetooth@0.0.21': {} + '@types/yauzl@2.10.3': dependencies: '@types/node': 22.19.17 optional: true + '@ungap/structured-clone@1.3.0': {} + '@vitejs/plugin-react@4.7.0(vite@6.4.2(@types/node@22.19.17)(jiti@2.6.1)(lightningcss@1.32.0))': dependencies: '@babel/core': 7.29.0 @@ -5315,6 +5972,11 @@ snapshots: transitivePeerDependencies: - supports-color + '@vitejs/plugin-vue@5.2.4(vite@5.4.21(@types/node@22.19.17)(lightningcss@1.32.0))(vue@3.5.32(typescript@5.9.3))': + dependencies: + vite: 5.4.21(@types/node@22.19.17)(lightningcss@1.32.0) + vue: 3.5.32(typescript@5.9.3) + '@vitest/expect@2.1.9': dependencies: '@vitest/spy': 2.1.9 @@ -5355,6 +6017,105 @@ snapshots: loupe: 3.2.1 tinyrainbow: 1.2.0 + '@vue/compiler-core@3.5.32': + dependencies: + '@babel/parser': 7.29.2 + '@vue/shared': 3.5.32 + entities: 7.0.1 + estree-walker: 2.0.2 + source-map-js: 1.2.1 + + '@vue/compiler-dom@3.5.32': + dependencies: + '@vue/compiler-core': 3.5.32 + '@vue/shared': 3.5.32 + + '@vue/compiler-sfc@3.5.32': + dependencies: + '@babel/parser': 7.29.2 + '@vue/compiler-core': 3.5.32 + '@vue/compiler-dom': 3.5.32 + '@vue/compiler-ssr': 3.5.32 + '@vue/shared': 3.5.32 + estree-walker: 2.0.2 + magic-string: 0.30.21 + postcss: 8.5.10 + source-map-js: 1.2.1 + + '@vue/compiler-ssr@3.5.32': + dependencies: + '@vue/compiler-dom': 3.5.32 + '@vue/shared': 3.5.32 + + '@vue/devtools-api@7.7.9': + dependencies: + '@vue/devtools-kit': 7.7.9 + + '@vue/devtools-kit@7.7.9': + dependencies: + '@vue/devtools-shared': 7.7.9 + birpc: 2.9.0 + hookable: 5.5.3 + mitt: 3.0.1 + perfect-debounce: 1.0.0 + speakingurl: 14.0.1 + superjson: 2.2.6 + + '@vue/devtools-shared@7.7.9': + dependencies: + rfdc: 1.4.1 + + '@vue/reactivity@3.5.32': + dependencies: + '@vue/shared': 3.5.32 + + '@vue/runtime-core@3.5.32': + dependencies: + '@vue/reactivity': 3.5.32 + '@vue/shared': 3.5.32 + + '@vue/runtime-dom@3.5.32': + dependencies: + '@vue/reactivity': 3.5.32 + '@vue/runtime-core': 3.5.32 + '@vue/shared': 3.5.32 + csstype: 3.2.3 + + '@vue/server-renderer@3.5.32(vue@3.5.32(typescript@5.9.3))': + dependencies: + '@vue/compiler-ssr': 3.5.32 + '@vue/shared': 3.5.32 + vue: 3.5.32(typescript@5.9.3) + + '@vue/shared@3.5.32': {} + + '@vueuse/core@12.8.2(typescript@5.9.3)': + dependencies: + '@types/web-bluetooth': 0.0.21 + '@vueuse/metadata': 12.8.2 + '@vueuse/shared': 12.8.2(typescript@5.9.3) + vue: 3.5.32(typescript@5.9.3) + transitivePeerDependencies: + - typescript + + '@vueuse/integrations@12.8.2(focus-trap@7.8.0)(typescript@5.9.3)': + dependencies: + '@vueuse/core': 12.8.2(typescript@5.9.3) + '@vueuse/shared': 12.8.2(typescript@5.9.3) + vue: 3.5.32(typescript@5.9.3) + optionalDependencies: + focus-trap: 7.8.0 + transitivePeerDependencies: + - typescript + + '@vueuse/metadata@12.8.2': {} + + '@vueuse/shared@12.8.2(typescript@5.9.3)': + dependencies: + vue: 3.5.32(typescript@5.9.3) + transitivePeerDependencies: + - typescript + '@xmldom/xmldom@0.8.12': {} abbrev@1.1.1: {} @@ -5398,6 +6159,23 @@ snapshots: json-schema-traverse: 1.0.0 require-from-string: 2.0.2 + algoliasearch@5.50.2: + dependencies: + '@algolia/abtesting': 1.16.2 + '@algolia/client-abtesting': 5.50.2 + '@algolia/client-analytics': 5.50.2 + '@algolia/client-common': 5.50.2 + '@algolia/client-insights': 5.50.2 + '@algolia/client-personalization': 5.50.2 + '@algolia/client-query-suggestions': 5.50.2 + '@algolia/client-search': 5.50.2 + '@algolia/ingestion': 1.50.2 + '@algolia/monitoring': 1.50.2 + '@algolia/recommend': 5.50.2 + '@algolia/requester-browser-xhr': 5.50.2 + '@algolia/requester-fetch': 5.50.2 + '@algolia/requester-node-http': 5.50.2 + ansi-colors@4.1.3: {} ansi-regex@5.0.1: {} @@ -5548,6 +6326,8 @@ snapshots: bignumber.js@9.3.1: {} + birpc@2.9.0: {} + bl@4.1.0: dependencies: buffer: 5.7.1 @@ -5680,6 +6460,8 @@ snapshots: caniuse-lite@1.0.30001788: {} + ccount@2.0.1: {} + chai@5.3.3: dependencies: assertion-error: 2.0.1 @@ -5695,6 +6477,10 @@ snapshots: chalk@5.6.2: {} + character-entities-html4@2.1.0: {} + + character-entities-legacy@3.0.0: {} + chardet@2.1.1: {} check-error@2.1.3: {} @@ -5743,6 +6529,8 @@ snapshots: dependencies: delayed-stream: 1.0.0 + comma-separated-tokens@2.0.3: {} + commander@5.1.0: {} compare-version@0.1.2: {} @@ -5765,6 +6553,10 @@ snapshots: convert-source-map@2.0.0: {} + copy-anything@4.0.5: + dependencies: + is-what: 5.5.0 + core-util-is@1.0.2: optional: true @@ -5834,6 +6626,8 @@ snapshots: delegates@1.0.0: {} + dequal@2.0.3: {} + detect-indent@6.1.0: {} detect-libc@2.1.2: {} @@ -5841,6 +6635,10 @@ snapshots: detect-node@2.1.0: optional: true + devlop@1.1.0: + dependencies: + dequal: 2.0.3 + dir-compare@4.2.0: dependencies: minimatch: 3.1.5 @@ -5974,6 +6772,8 @@ snapshots: transitivePeerDependencies: - supports-color + emoji-regex-xs@1.0.0: {} + emoji-regex@8.0.0: {} emoji-regex@9.2.2: {} @@ -5997,6 +6797,8 @@ snapshots: ansi-colors: 4.1.3 strip-ansi: 6.0.1 + entities@7.0.1: {} + env-paths@2.2.1: {} err-code@2.0.3: {} @@ -6093,6 +6895,8 @@ snapshots: estraverse@5.3.0: {} + estree-walker@2.0.2: {} + estree-walker@3.0.3: dependencies: '@types/estree': 1.0.8 @@ -6174,6 +6978,10 @@ snapshots: locate-path: 5.0.0 path-exists: 4.0.0 + focus-trap@7.8.0: + dependencies: + tabbable: 6.4.0 + foreground-child@3.3.1: dependencies: cross-spawn: 7.0.6 @@ -6403,10 +7211,32 @@ snapshots: dependencies: function-bind: 1.1.2 + hast-util-to-html@9.0.5: + dependencies: + '@types/hast': 3.0.4 + '@types/unist': 3.0.3 + ccount: 2.0.1 + comma-separated-tokens: 2.0.3 + hast-util-whitespace: 3.0.0 + html-void-elements: 3.0.0 + mdast-util-to-hast: 13.2.1 + property-information: 7.1.0 + space-separated-tokens: 2.0.2 + stringify-entities: 4.0.4 + zwitch: 2.0.4 + + hast-util-whitespace@3.0.0: + dependencies: + '@types/hast': 3.0.4 + + hookable@5.5.3: {} + hosted-git-info@4.1.0: dependencies: lru-cache: 6.0.0 + html-void-elements@3.0.0: {} + http-cache-semantics@4.2.0: {} http-proxy-agent@5.0.0: @@ -6506,6 +7336,8 @@ snapshots: is-unicode-supported@0.1.0: {} + is-what@5.5.0: {} + is-windows@1.0.2: {} isarray@1.0.0: {} @@ -6718,6 +7550,8 @@ snapshots: - bluebird - supports-color + mark.js@8.11.1: {} + matcher@3.0.0: dependencies: escape-string-regexp: 4.0.0 @@ -6725,8 +7559,37 @@ snapshots: math-intrinsics@1.1.0: {} + mdast-util-to-hast@13.2.1: + dependencies: + '@types/hast': 3.0.4 + '@types/mdast': 4.0.4 + '@ungap/structured-clone': 1.3.0 + devlop: 1.1.0 + micromark-util-sanitize-uri: 2.0.1 + trim-lines: 3.0.1 + unist-util-position: 5.0.0 + unist-util-visit: 5.1.0 + vfile: 6.0.3 + merge2@1.4.1: {} + micromark-util-character@2.1.1: + dependencies: + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-util-encode@2.0.1: {} + + micromark-util-sanitize-uri@2.0.1: + dependencies: + micromark-util-character: 2.1.1 + micromark-util-encode: 2.0.1 + micromark-util-symbol: 2.0.1 + + micromark-util-symbol@2.0.1: {} + + micromark-util-types@2.0.2: {} + micromatch@4.0.8: dependencies: braces: 3.0.3 @@ -6796,11 +7659,15 @@ snapshots: minipass@7.1.3: {} + minisearch@7.2.0: {} + minizlib@2.1.2: dependencies: minipass: 3.3.6 yallist: 4.0.0 + mitt@3.0.1: {} + mkdirp@1.0.4: {} mri@1.2.0: {} @@ -6877,6 +7744,12 @@ snapshots: dependencies: mimic-fn: 2.1.0 + oniguruma-to-es@3.1.1: + dependencies: + emoji-regex-xs: 1.0.0 + regex: 6.1.0 + regex-recursion: 6.0.2 + openai@6.26.0(ws@8.20.0)(zod@3.25.76): optionalDependencies: ws: 8.20.0 @@ -6976,6 +7849,8 @@ snapshots: pend@1.2.0: {} + perfect-debounce@1.0.0: {} + picocolors@1.1.1: {} picomatch@2.3.2: {} @@ -6998,6 +7873,8 @@ snapshots: picocolors: 1.1.1 source-map-js: 1.2.1 + preact@10.29.1: {} + prettier@2.8.8: {} process-nextick-args@2.0.1: {} @@ -7011,6 +7888,8 @@ snapshots: err-code: 2.0.3 retry: 0.12.0 + property-information@7.1.0: {} + protobufjs@7.5.5: dependencies: '@protobufjs/aspromise': 1.1.2 @@ -7096,6 +7975,16 @@ snapshots: dependencies: minimatch: 5.1.9 + regex-recursion@6.0.2: + dependencies: + regex-utilities: 2.3.0 + + regex-utilities@2.3.0: {} + + regex@6.1.0: + dependencies: + regex-utilities: 2.3.0 + require-directory@2.1.1: {} require-from-string@2.0.2: {} @@ -7123,6 +8012,8 @@ snapshots: reusify@1.1.0: {} + rfdc@1.4.1: {} + rimraf@3.0.2: dependencies: glob: 7.2.3 @@ -7186,6 +8077,8 @@ snapshots: scheduler@0.27.0: {} + search-insights@2.17.3: {} + semver-compare@1.0.0: optional: true @@ -7206,6 +8099,17 @@ snapshots: shebang-regex@3.0.0: {} + shiki@2.5.0: + dependencies: + '@shikijs/core': 2.5.0 + '@shikijs/engine-javascript': 2.5.0 + '@shikijs/engine-oniguruma': 2.5.0 + '@shikijs/langs': 2.5.0 + '@shikijs/themes': 2.5.0 + '@shikijs/types': 2.5.0 + '@shikijs/vscode-textmate': 10.0.2 + '@types/hast': 3.0.4 + siginfo@2.0.0: {} signal-exit@3.0.7: {} @@ -7257,11 +8161,15 @@ snapshots: source-map@0.6.1: {} + space-separated-tokens@2.0.2: {} + spawndamnit@3.0.1: dependencies: cross-spawn: 7.0.6 signal-exit: 4.1.0 + speakingurl@14.0.1: {} + sprintf-js@1.0.3: {} sprintf-js@1.1.3: @@ -7297,6 +8205,11 @@ snapshots: dependencies: safe-buffer: 5.2.1 + stringify-entities@4.0.4: + dependencies: + character-entities-html4: 2.1.0 + character-entities-legacy: 3.0.0 + strip-ansi@6.0.1: dependencies: ansi-regex: 5.0.1 @@ -7315,10 +8228,16 @@ snapshots: transitivePeerDependencies: - supports-color + superjson@2.2.6: + dependencies: + copy-anything: 4.0.5 + supports-color@7.2.0: dependencies: has-flag: 4.0.0 + tabbable@6.4.0: {} + tailwindcss@4.2.2: {} tapable@2.3.2: {} @@ -7374,6 +8293,8 @@ snapshots: dependencies: is-number: 7.0.0 + trim-lines@3.0.1: {} + truncate-utf8-bytes@1.0.2: dependencies: utf8-byte-length: 1.0.5 @@ -7408,6 +8329,29 @@ snapshots: dependencies: imurmurhash: 0.1.4 + unist-util-is@6.0.1: + dependencies: + '@types/unist': 3.0.3 + + unist-util-position@5.0.0: + dependencies: + '@types/unist': 3.0.3 + + unist-util-stringify-position@4.0.0: + dependencies: + '@types/unist': 3.0.3 + + unist-util-visit-parents@6.0.2: + dependencies: + '@types/unist': 3.0.3 + unist-util-is: 6.0.1 + + unist-util-visit@5.1.0: + dependencies: + '@types/unist': 3.0.3 + unist-util-is: 6.0.1 + unist-util-visit-parents: 6.0.2 + universalify@0.1.2: {} universalify@2.0.1: {} @@ -7433,6 +8377,16 @@ snapshots: extsprintf: 1.4.1 optional: true + vfile-message@4.0.3: + dependencies: + '@types/unist': 3.0.3 + unist-util-stringify-position: 4.0.0 + + vfile@6.0.3: + dependencies: + '@types/unist': 3.0.3 + vfile-message: 4.0.3 + vite-node@2.1.9(@types/node@22.19.17)(lightningcss@1.32.0): dependencies: cac: 6.7.14 @@ -7475,6 +8429,55 @@ snapshots: jiti: 2.6.1 lightningcss: 1.32.0 + vitepress@1.6.4(@algolia/client-search@5.50.2)(@types/node@22.19.17)(lightningcss@1.32.0)(postcss@8.5.10)(search-insights@2.17.3)(typescript@5.9.3): + dependencies: + '@docsearch/css': 3.8.2 + '@docsearch/js': 3.8.2(@algolia/client-search@5.50.2)(search-insights@2.17.3) + '@iconify-json/simple-icons': 1.2.78 + '@shikijs/core': 2.5.0 + '@shikijs/transformers': 2.5.0 + '@shikijs/types': 2.5.0 + '@types/markdown-it': 14.1.2 + '@vitejs/plugin-vue': 5.2.4(vite@5.4.21(@types/node@22.19.17)(lightningcss@1.32.0))(vue@3.5.32(typescript@5.9.3)) + '@vue/devtools-api': 7.7.9 + '@vue/shared': 3.5.32 + '@vueuse/core': 12.8.2(typescript@5.9.3) + '@vueuse/integrations': 12.8.2(focus-trap@7.8.0)(typescript@5.9.3) + focus-trap: 7.8.0 + mark.js: 8.11.1 + minisearch: 7.2.0 + shiki: 2.5.0 + vite: 5.4.21(@types/node@22.19.17)(lightningcss@1.32.0) + vue: 3.5.32(typescript@5.9.3) + optionalDependencies: + postcss: 8.5.10 + transitivePeerDependencies: + - '@algolia/client-search' + - '@types/node' + - '@types/react' + - async-validator + - axios + - change-case + - drauu + - fuse.js + - idb-keyval + - jwt-decode + - less + - lightningcss + - nprogress + - qrcode + - react + - react-dom + - sass + - sass-embedded + - search-insights + - sortablejs + - stylus + - sugarss + - terser + - typescript + - universal-cookie + vitest@2.1.9(@types/node@22.19.17)(lightningcss@1.32.0): dependencies: '@vitest/expect': 2.1.9 @@ -7510,6 +8513,16 @@ snapshots: - supports-color - terser + vue@3.5.32(typescript@5.9.3): + dependencies: + '@vue/compiler-dom': 3.5.32 + '@vue/compiler-sfc': 3.5.32 + '@vue/runtime-dom': 3.5.32 + '@vue/server-renderer': 3.5.32(vue@3.5.32(typescript@5.9.3)) + '@vue/shared': 3.5.32 + optionalDependencies: + typescript: 5.9.3 + wcwidth@1.0.1: dependencies: defaults: 1.0.4 @@ -7588,3 +8601,5 @@ snapshots: optionalDependencies: '@types/react': 19.2.14 react: 19.2.5 + + zwitch@2.0.4: {} diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index 3ff5faaa..1c091e09 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -1,3 +1,4 @@ packages: - "apps/*" - "packages/*" + - "website" diff --git a/website/.vitepress/config.ts b/website/.vitepress/config.ts new file mode 100644 index 00000000..bdf37c08 --- /dev/null +++ b/website/.vitepress/config.ts @@ -0,0 +1,152 @@ +import { defineConfig } from 'vitepress'; +import tailwindcss from '@tailwindcss/vite'; + +const SITE_ORIGIN = 'https://opencoworkai.github.io'; +const SITE_BASE = '/open-codesign/'; +const SITE_URL = `${SITE_ORIGIN}${SITE_BASE}`; +const OG_IMAGE = `${SITE_URL}og.svg`; + +export default defineConfig({ + title: 'open-codesign', + description: + 'Open-source desktop AI design tool — prompt to interactive prototype, slide deck, and marketing assets. Multi-model, BYOK, runs on your laptop.', + + base: SITE_BASE, + cleanUrls: true, + lastUpdated: true, + + vite: { + plugins: [tailwindcss()], + }, + + head: [ + ['link', { rel: 'icon', href: `${SITE_BASE}favicon.ico` }], + ['meta', { name: 'theme-color', content: '#c96442' }], + ['meta', { property: 'og:type', content: 'website' }], + ['meta', { property: 'og:title', content: 'open-codesign — Open-Source AI Design Tool' }], + [ + 'meta', + { + property: 'og:description', + content: + 'Prompt to interactive prototype, slide deck, and marketing assets. Multi-model, BYOK, local-first. Apache-2.0.', + }, + ], + ['meta', { property: 'og:image', content: OG_IMAGE }], + ['meta', { property: 'og:url', content: SITE_URL }], + ['meta', { name: 'twitter:card', content: 'summary_large_image' }], + ['meta', { name: 'twitter:title', content: 'open-codesign — Open-Source AI Design Tool' }], + [ + 'meta', + { + name: 'twitter:description', + content: + 'Open-source desktop AI design tool. Multi-model, BYOK, local-first. Apache-2.0.', + }, + ], + ['meta', { name: 'twitter:image', content: OG_IMAGE }], + [ + 'meta', + { + name: 'keywords', + content: + 'open-codesign, AI design, Claude Design alternative, open source, multi-model, BYOK, local-first, desktop app, prototype generator, PPTX, design tokens', + }, + ], + [ + 'script', + { type: 'application/ld+json' }, + JSON.stringify({ + '@context': 'https://schema.org', + '@type': 'SoftwareApplication', + name: 'open-codesign', + description: + 'Open-source desktop AI design tool — prompt to interactive prototype, slide deck, and marketing assets.', + url: SITE_URL, + applicationCategory: 'DesignApplication', + operatingSystem: 'macOS, Windows', + offers: { '@type': 'Offer', price: '0', priceCurrency: 'USD' }, + license: 'https://www.apache.org/licenses/LICENSE-2.0', + author: { + '@type': 'Organization', + name: 'OpenCoworkAI', + url: 'https://github.com/OpenCoworkAI', + }, + }), + ], + ], + + sitemap: { hostname: SITE_URL }, + + themeConfig: { + logo: { src: '/favicon.ico', alt: 'open-codesign' }, + + nav: [ + { text: 'Home', link: '/' }, + { text: 'Quickstart', link: '/quickstart' }, + { text: 'Architecture', link: '/architecture' }, + { text: 'Roadmap', link: '/roadmap' }, + { text: 'GitHub', link: 'https://github.com/OpenCoworkAI/open-codesign' }, + ], + + sidebar: [ + { + text: 'Get started', + items: [ + { text: 'Overview', link: '/' }, + { text: 'Quickstart', link: '/quickstart' }, + ], + }, + { + text: 'Project', + items: [ + { text: 'Architecture', link: '/architecture' }, + { text: 'Roadmap', link: '/roadmap' }, + ], + }, + ], + + socialLinks: [ + { icon: 'github', link: 'https://github.com/OpenCoworkAI/open-codesign' }, + ], + + footer: { + message: 'Released under the Apache-2.0 License.', + copyright: '© 2026-present OpenCoworkAI', + }, + }, + + locales: { + root: { + label: 'English', + lang: 'en', + }, + zh: { + label: '中文', + lang: 'zh-CN', + title: 'open-codesign', + description: + '开源桌面 AI 设计工具——一句话生成交互原型、幻灯片与营销素材。多模型、自带密钥、本地优先。', + themeConfig: { + nav: [ + { text: '首页', link: '/zh/' }, + { text: '快速开始', link: '/zh/quickstart' }, + { text: 'GitHub', link: 'https://github.com/OpenCoworkAI/open-codesign' }, + ], + sidebar: [ + { + text: '入门', + items: [ + { text: '简介', link: '/zh/' }, + { text: '快速开始', link: '/zh/quickstart' }, + ], + }, + ], + footer: { + message: '基于 Apache-2.0 协议开源。', + copyright: '© 2026-present OpenCoworkAI', + }, + }, + }, + }, +}); diff --git a/website/.vitepress/theme/index.ts b/website/.vitepress/theme/index.ts new file mode 100644 index 00000000..d050e522 --- /dev/null +++ b/website/.vitepress/theme/index.ts @@ -0,0 +1,4 @@ +import DefaultTheme from 'vitepress/theme'; +import './style.css'; + +export default DefaultTheme; diff --git a/website/.vitepress/theme/style.css b/website/.vitepress/theme/style.css new file mode 100644 index 00000000..68b7c545 --- /dev/null +++ b/website/.vitepress/theme/style.css @@ -0,0 +1,279 @@ +@import 'tailwindcss'; + +/** + * open-codesign tokens — kept in sync with packages/ui/src/tokens.css. + * If you change a value here, update tokens.css too. + */ +:root { + --color-background: #faf8f3; + --color-background-secondary: #f3efe6; + --color-surface: #ffffff; + --color-surface-hover: #f7f4ec; + --color-surface-active: #efeae0; + --color-surface-muted: #f3efe6; + + --color-border: #e3ddd0; + --color-border-muted: #ece6d8; + --color-border-subtle: #f3efe6; + + --color-accent: #c96442; + --color-accent-hover: #b75636; + --color-accent-muted: #f3d9cf; + + --color-text-primary: #1f1d18; + --color-text-secondary: #57544c; + --color-text-muted: #8c887d; + + --color-success: #4f7a52; + --color-warning: #b8862a; + --color-error: #b04030; + + --shadow-soft: 0 1px 2px rgba(31, 29, 24, 0.04); + --shadow-card: 0 2px 8px rgba(31, 29, 24, 0.06); + --shadow-elevated: 0 8px 24px rgba(31, 29, 24, 0.1); + + --font-sans: 'Plus Jakarta Sans', system-ui, -apple-system, sans-serif; + --font-mono: 'JetBrains Mono', 'SF Mono', Menlo, monospace; + + --radius-sm: 6px; + --radius-md: 8px; + --radius-lg: 10px; + --radius-xl: 14px; + --radius-2xl: 16px; +} + +.dark { + --color-background: #1a1815; + --color-background-secondary: #221f1b; + --color-surface: #26221d; + --color-surface-hover: #2d2925; + --color-surface-active: #34302b; + --color-surface-muted: #221f1b; + + --color-border: #3a352f; + --color-border-muted: #2f2b26; + --color-border-subtle: #26221d; + + --color-accent: #d97757; + --color-accent-hover: #e88868; + --color-accent-muted: #4a2b22; + + --color-text-primary: #f5f1e8; + --color-text-secondary: #b8b3a6; + --color-text-muted: #807b6f; + + --color-success: #6b9c6e; + --color-warning: #d4a04a; + --color-error: #d96050; + + --shadow-soft: 0 1px 2px rgba(0, 0, 0, 0.3); + --shadow-card: 0 2px 8px rgba(0, 0, 0, 0.4); + --shadow-elevated: 0 8px 24px rgba(0, 0, 0, 0.5); +} + +/* Map open-codesign tokens onto VitePress variables. */ +:root { + --vp-c-bg: var(--color-background); + --vp-c-bg-alt: var(--color-background-secondary); + --vp-c-bg-soft: var(--color-surface-muted); + --vp-c-bg-elv: var(--color-surface); + + --vp-c-text-1: var(--color-text-primary); + --vp-c-text-2: var(--color-text-secondary); + --vp-c-text-3: var(--color-text-muted); + + --vp-c-divider: var(--color-border); + --vp-c-divider-light: var(--color-border-muted); + --vp-c-border: var(--color-border); + --vp-c-gutter: var(--color-border-subtle); + + --vp-c-brand-1: var(--color-accent); + --vp-c-brand-2: var(--color-accent-hover); + --vp-c-brand-3: var(--color-accent-hover); + --vp-c-brand-soft: var(--color-accent-muted); + --vp-c-brand-text: #ffffff; + + --vp-button-brand-bg: var(--color-accent); + --vp-button-brand-hover-bg: var(--color-accent-hover); + --vp-button-brand-active-bg: var(--color-accent-hover); + --vp-button-brand-border: var(--color-accent); + --vp-button-brand-hover-border: var(--color-accent-hover); + --vp-button-brand-text: #ffffff; + --vp-button-brand-hover-text: #ffffff; + + --vp-button-alt-bg: var(--color-surface); + --vp-button-alt-hover-bg: var(--color-surface-hover); + --vp-button-alt-border: var(--color-border); + --vp-button-alt-hover-border: var(--color-accent); + --vp-button-alt-text: var(--color-text-primary); + + --vp-home-hero-name-color: var(--color-accent); + --vp-home-hero-image-background-image: linear-gradient( + 135deg, + var(--color-accent-muted), + var(--color-surface-active) + ); + --vp-home-hero-image-filter: blur(48px); + + --vp-font-family-base: var(--font-sans); + --vp-font-family-mono: var(--font-mono); +} + +html { + font-feature-settings: + 'cv11', + 'ss01', + 'ss03'; +} + +body { + background: var(--color-background); + color: var(--color-text-primary); +} + +/* Hero polish */ +.VPHero .name, +.VPHero .text { + letter-spacing: -0.02em; +} + +.VPHero .tagline { + color: var(--color-text-secondary); + max-width: 36rem; +} + +/* Feature cards */ +.VPFeature { + border: 1px solid var(--color-border-muted); + background: var(--color-surface); + box-shadow: var(--shadow-soft); + border-radius: var(--radius-xl); + transition: transform 0.18s cubic-bezier(0.16, 1, 0.3, 1), box-shadow 0.18s ease, + border-color 0.18s ease; +} +.VPFeature:hover { + transform: translateY(-2px); + border-color: var(--color-accent-muted); + box-shadow: var(--shadow-card); +} + +/* Comparison + section blocks reused on the homepage */ +.codesign-section { + max-width: 960px; + margin: 0 auto; + padding: 56px 24px 24px; +} +.codesign-section h2 { + text-align: center; + font-size: 1.875rem; + font-weight: 600; + letter-spacing: -0.01em; + margin-bottom: 12px; +} +.codesign-section .lede { + text-align: center; + color: var(--color-text-secondary); + max-width: 38rem; + margin: 0 auto 32px; +} + +.codesign-steps { + display: grid; + grid-template-columns: repeat(auto-fit, minmax(240px, 1fr)); + gap: 16px; +} +.codesign-step { + background: var(--color-surface); + border: 1px solid var(--color-border-muted); + border-radius: var(--radius-xl); + padding: 20px; + box-shadow: var(--shadow-soft); +} +.codesign-step .num { + display: inline-flex; + align-items: center; + justify-content: center; + width: 28px; + height: 28px; + border-radius: 999px; + background: var(--color-accent-muted); + color: var(--color-accent); + font-weight: 600; + font-size: 0.875rem; + margin-bottom: 12px; +} +.codesign-step h3 { + font-size: 1rem; + font-weight: 600; + margin-bottom: 6px; +} +.codesign-step p { + color: var(--color-text-secondary); + font-size: 0.95rem; + line-height: 1.55; + margin: 0; +} + +.codesign-comparison { + overflow-x: auto; +} +.codesign-comparison table { + width: 100%; + border-collapse: collapse; + background: var(--color-surface); + border: 1px solid var(--color-border-muted); + border-radius: var(--radius-xl); + overflow: hidden; + font-size: 0.95rem; +} +.codesign-comparison th, +.codesign-comparison td { + padding: 12px 16px; + text-align: center; + border-bottom: 1px solid var(--color-border-subtle); +} +.codesign-comparison th { + background: var(--color-surface-muted); + font-weight: 600; + color: var(--color-text-primary); +} +.codesign-comparison th:first-child, +.codesign-comparison td:first-child { + text-align: left; + color: var(--color-text-secondary); +} +.codesign-comparison tr:last-child td { + border-bottom: 0; +} +.codesign-comparison .yes { + color: var(--color-success); + font-weight: 600; +} +.codesign-comparison .no { + color: var(--color-text-muted); +} +.codesign-comparison .ours { + background: var(--color-accent-muted); + color: var(--color-accent); + font-weight: 700; +} + +.codesign-cta { + text-align: center; + padding: 64px 24px 96px; +} +.codesign-cta a { + display: inline-block; + padding: 12px 24px; + border-radius: var(--radius-lg); + background: var(--color-accent); + color: #ffffff; + font-weight: 600; + text-decoration: none; + box-shadow: var(--shadow-card); + transition: background 0.18s ease, transform 0.18s cubic-bezier(0.16, 1, 0.3, 1); +} +.codesign-cta a:hover { + background: var(--color-accent-hover); + transform: translateY(-1px); +} diff --git a/website/architecture.md b/website/architecture.md new file mode 100644 index 00000000..3bb74274 --- /dev/null +++ b/website/architecture.md @@ -0,0 +1,54 @@ +--- +title: Architecture +description: How open-codesign is laid out across packages and apps. +--- + +# Architecture + +A bird's-eye view. Detailed module READMEs live in each `packages/*/README.md`. + +## Shape + +``` + ┌─────────────────────────────┐ + │ apps/desktop (Electron) │ + │ Chat panel │ Canvas │ + └─────┬───────┴────────┬──────┘ + │ │ + ┌───────▼──────┐ ┌─────▼────────┐ + │ core │ │ runtime │ + │ orchestration│ │ sandbox iframe│ + └──┬───────────┘ └──────────────┘ + │ + ┌──────────┼──────────────┐ + ▼ ▼ ▼ + ┌─────────┐ ┌─────────┐ ┌────────────┐ + │providers│ │artifacts│ │ exporters │ + │ pi-ai + │ │ schema │ │ PDF / PPTX │ + │wrappers │ └─────────┘ └────────────┘ + └─────────┘ +``` + +## Packages + +| Package | Responsibility | +|---|---| +| `apps/desktop` | Electron shell — main process owns SQLite, FS, IPC. Renderer hosts React UI. No business logic here. | +| `packages/core` | Generation orchestration. Prompt + design system + history → providers → artifact stream → events. | +| `packages/providers` | Wraps `@mariozechner/pi-ai` and adds the missing capabilities. App code never imports a provider SDK directly. | +| `packages/runtime` | Sandbox preview. Iframe `srcdoc` + esbuild-wasm + import maps + overlay scripts for inline comments and sliders. | +| `packages/ui` | Design tokens (CSS variables) + Radix-based primitives + Tailwind preset. | +| `packages/artifacts` | Zod schemas for HTML / SVG / slide deck / asset bundle + `` streaming parser. | +| `packages/exporters` | PDF / PPTX / ZIP. Each exporter is its own subpath export, dynamic-imported so the cold-start bundle stays lean. | +| `packages/templates` | Built-in demo prompts and starter templates. Read at runtime, not bundled into core. | +| `packages/shared` | Plain types, utilities, zod schemas. No runtime dependencies. | + +## Boundaries that must not be crossed + +- `apps/desktop` does not import from provider SDKs — go through `packages/providers`. +- `packages/core` does not import from `apps/desktop` or React. +- `packages/ui` knows nothing about LLMs or artifacts. +- Exporters are never bundled into the main shell — they dynamic-import on first use. +- Only `apps/desktop` writes to disk. Other packages go through IPC. + +For data-flow walkthroughs (single generation, inline comment, slider drag), see [`docs/ARCHITECTURE.md`](https://github.com/OpenCoworkAI/open-codesign/blob/main/docs/ARCHITECTURE.md). diff --git a/website/index.md b/website/index.md new file mode 100644 index 00000000..74f32640 --- /dev/null +++ b/website/index.md @@ -0,0 +1,94 @@ +--- +layout: home +title: open-codesign +titleTemplate: Open-Source AI Design Tool + +hero: + name: open-codesign + text: Design with any model. On your own laptop. + tagline: Prompt to interactive prototype, slide deck, and marketing assets. Multi-model, BYOK, local-first. The open-source counterpart to Claude Design. + actions: + - theme: brand + text: Quickstart + link: /quickstart + - theme: alt + text: View on GitHub + link: https://github.com/OpenCoworkAI/open-codesign + +features: + - icon: 🧘 + title: Calm Spaces prototype + details: Mobile mockup with phone frame, soft palette, working navigation — from one prompt. + - icon: 📄 + title: Case-study one-pager + details: Dark-theme, before/after metrics, CEO quote — exportable as a print-ready PDF. + - icon: 🪄 + title: B2B pitch deck + details: 8–12 slides exported as PPTX with editable shapes. No Canva, no second subscription. + - icon: 💬 + title: Inline comment editing + details: Click any element in the preview, leave a comment, the model rewrites just that region. + - icon: 🎚️ + title: AI-tuned sliders + details: The model emits the parameters worth tweaking — color, spacing, font — drag to refine. + - icon: 🧬 + title: Codebase → design system + details: Point at a local repo. We extract tokens and apply them to every subsequent generation. + - icon: 🌐 + title: Web Capture + details: Paste any URL. We scrape it as a reference and let you riff on the aesthetic. + - icon: 🔁 + title: Handoff to open-cowork + details: Package the design plus an intent README and ship it to engineering. +--- + +
+ +## How it works + +
+
+ 1 +

Bring your own key

+

Anthropic, OpenAI, Gemini, DeepSeek, OpenRouter, Ollama — anything pi-ai speaks. No vendor lock-in.

+
+
+ 2 +

Type a prompt

+

Pick one of eight built-in demos or describe your own. The first design renders in seconds, in a sandboxed iframe.

+
+
+ 3 +

Refine, export, hand off

+

Inline comments, AI sliders, snapshot timeline. Export to HTML, PDF, PPTX or hand off to open-cowork.

+
+
+ +
+ +
+ +## How it compares + +

We are not faster than Claude Design. We are different — open, multi-model, and local-first.

+ +
+ +| | Models | Runs locally | Source | Pricing | +| ---------------- | :--------------: | :----------: | :----------: | :-------------: | +| Claude Design | Opus only | ✗ | Closed | Subscription | +| v0 by Vercel | Curated | ✗ | Closed | Subscription | +| Bolt.new | Curated | ✗ | Partial | Subscription | +| **open-codesign**| **Any (BYOK)** | **✓** | **Apache-2.0** | **Token cost only** | + +
+ +
+ +
+ +### Ready to design without the lock-in? + +Get started in 90 seconds → + +
diff --git a/website/package.json b/website/package.json new file mode 100644 index 00000000..a09fdd03 --- /dev/null +++ b/website/package.json @@ -0,0 +1,15 @@ +{ + "name": "open-codesign-website", + "private": true, + "type": "module", + "scripts": { + "dev": "vitepress dev", + "build": "vitepress build", + "preview": "vitepress preview" + }, + "devDependencies": { + "@tailwindcss/vite": "^4.0.0", + "tailwindcss": "^4.0.0", + "vitepress": "^1.6.4" + } +} diff --git a/website/public/favicon.ico b/website/public/favicon.ico new file mode 100644 index 00000000..3d972087 Binary files /dev/null and b/website/public/favicon.ico differ diff --git a/website/public/llms-full.txt b/website/public/llms-full.txt new file mode 100644 index 00000000..6943530c --- /dev/null +++ b/website/public/llms-full.txt @@ -0,0 +1,88 @@ +# open-codesign — Extended Summary + +## What it is + +open-codesign is an open-source desktop AI design tool. It is the open counterpart to Anthropic's Claude Design (released 2026-04-17). The product runs locally on macOS and Windows, takes natural-language prompts, and produces: + +- Interactive HTML prototypes (mobile + desktop) +- One-page PDF case studies, reports, marketing pages +- PPTX slide decks (pitch, quarterly, training) +- Design-system-aware mockups derived from a user's existing codebase +- Asset bundles (ZIP) ready to handoff + +## Differentiation + +| Axis | Claude Design | open-codesign | +| --- | --- | --- | +| Model | Opus 4.7 only | Multi-provider via `@mariozechner/pi-ai` | +| Form | Web SaaS | Local desktop (Electron) | +| Privacy | Cloud-stored | Local-first, no telemetry by default | +| Backend | Anthropic + Canva | None | +| Engineering handoff | Claude Code | open-cowork | +| Source | Closed | Apache-2.0 | +| Cost | Subscription | BYOK token cost only | + +## Killer demos targeted for v1.0 + +1. Calm Spaces meditation app — mobile prototype with phone frame, soft palette, interactive nav. +2. Client case study one-pager — dark theme, before/after metrics, exportable as PDF. +3. B2B SaaS pitch deck — 8–12 slides exported as PPTX. +4. Inline comment editing — click any element in preview, AI rewrites that region. +5. AI-generated tunable sliders — model emits adjustable parameters; user drags to refine. +6. Codebase → design system — point at a local repo, extract tokens, apply forward. +7. Web Capture — paste a URL, scrape it as a design reference. +8. Handoff to open-cowork — package the design + intent README, hand off to engineering. + +## Hard constraints + +- Install size budget ≤ 80 MB across Mac and Windows installers. +- ≤ 30 production dependencies. New deps require justification. +- BYOK only — no proxied API calls, no cloud accounts. +- Local-first storage (SQLite via `better-sqlite3` + TOML for config). +- Apache-2.0-compatible deps only (no GPL/AGPL/SSPL/proprietary). +- All UI uses tokens from `packages/ui` (warm beige Claude-style palette). +- Heavy features (PPTX export, codebase scan, web capture) dynamic-import on first use. + +## Stack + +- Package manager: pnpm (workspace + Corepack-pinned). +- Build orchestration: Turborepo. +- Lint + format: Biome (single tool, no ESLint + Prettier). +- Tests: Vitest (unit) + Playwright (E2E). +- TypeScript: strict, `verbatimModuleSyntax`, `moduleResolution: "bundler"`. +- Node: 22 LTS. +- Frontend: React 19 + Vite 6 + Tailwind v4 + Zustand + Radix + lucide-react. +- Sandbox renderer: Electron iframe `srcdoc` + esbuild-wasm + import maps. +- Storage: better-sqlite3 (history) + TOML files (config). No `electron-store` blob. + +## Repository layout + +``` +apps/desktop/ Electron app shell (main + renderer) +packages/core/ Generation orchestration +packages/providers/ pi-ai adapter +packages/runtime/ Sandbox renderer (iframe-based preview) +packages/ui/ Shared design system + tokens +packages/artifacts/ Artifact schema (HTML / React / SVG / PPTX) +packages/exporters/ PDF / PPTX / ZIP (lazy-loaded) +packages/templates/ Built-in demo prompts +packages/shared/ Types, utils, zod schemas +docs/ Vision, roadmap, principles, RFCs +website/ This marketing site (VitePress + Tailwind v4) +``` + +## Roadmap (high-level) + +- Phase 0 — Foundations: scaffolding, OSS files, CI. +- Phase 1 — Spike: providers + runtime + core wired end-to-end. One demo working. +- Phase 2 — Three demos: PPTX + PDF export, settings page, three demos shipped. +- Phase 3 — Killer interactions: inline comments, AI sliders, version timeline. +- Phase 4 — Ecosystem: codebase scanner, Web Capture, handoff to open-cowork. +- Phase 5 — Release polish: notarized installers, ≤ 80 MB, public 1.0. + +## Resources + +- Site: https://opencoworkai.github.io/open-codesign/ +- Source: https://github.com/OpenCoworkAI/open-codesign +- Sister project: https://github.com/OpenCoworkAI/open-cowork +- License: Apache-2.0 diff --git a/website/public/llms.txt b/website/public/llms.txt new file mode 100644 index 00000000..8f185aca --- /dev/null +++ b/website/public/llms.txt @@ -0,0 +1,22 @@ +# open-codesign + +> Open-source desktop AI design tool. Prompt to interactive prototype, slide deck, and marketing assets. Multi-model (BYOK), local-first, Apache-2.0. The open-source counterpart to Anthropic's Claude Design. + +open-codesign is an Electron desktop app for macOS and Windows. It turns natural-language prompts into HTML prototypes, PDF one-pagers, PPTX decks, and design-system-aware mockups. All model calls go through `@mariozechner/pi-ai`, so any provider works (Anthropic, OpenAI, Gemini, DeepSeek, OpenRouter, local Ollama). User credentials live in `~/.config/open-codesign/config.toml` and never leave the machine. + +## Docs + +- [Quickstart](https://opencoworkai.github.io/open-codesign/quickstart): install + first design in 90 seconds +- [Architecture](https://opencoworkai.github.io/open-codesign/architecture): packages, data flow, boundaries +- [Roadmap](https://opencoworkai.github.io/open-codesign/roadmap): phased plan to v1.0 + +## Source + +- [GitHub repository](https://github.com/OpenCoworkAI/open-codesign) +- [Vision (locked decisions)](https://github.com/OpenCoworkAI/open-codesign/blob/main/docs/VISION.md) +- [Engineering Principles](https://github.com/OpenCoworkAI/open-codesign/blob/main/docs/PRINCIPLES.md) +- [Differentiation vs Claude Design](https://github.com/OpenCoworkAI/open-codesign/blob/main/docs/DIFFERENTIATION.md) + +## Optional + +- [open-cowork](https://github.com/OpenCoworkAI/open-cowork): sister project for engineering handoff diff --git a/website/public/og.svg b/website/public/og.svg new file mode 100644 index 00000000..91bd6402 --- /dev/null +++ b/website/public/og.svg @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + open-codesign + Design with any model. + On your own laptop. + Open-source desktop AI design tool. Multi-model, BYOK, local-first. + The open counterpart to Claude Design. Apache-2.0. + + + + Quickstart → + github.com/OpenCoworkAI/open-codesign + + diff --git a/website/public/robots.txt b/website/public/robots.txt new file mode 100644 index 00000000..9093350e --- /dev/null +++ b/website/public/robots.txt @@ -0,0 +1,4 @@ +User-agent: * +Allow: / + +Sitemap: https://opencoworkai.github.io/open-codesign/sitemap.xml diff --git a/website/quickstart.md b/website/quickstart.md new file mode 100644 index 00000000..d3e8987d --- /dev/null +++ b/website/quickstart.md @@ -0,0 +1,55 @@ +--- +title: Quickstart +description: Install open-codesign and create your first design in 90 seconds. +--- + +# Quickstart + +> open-codesign is pre-alpha. Installers ship at v0.5. Until then, run from source. + +## 1. Clone and install + +```bash +git clone https://github.com/OpenCoworkAI/open-codesign.git +cd open-codesign +pnpm install +``` + +## 2. Add an API key + +Create `~/.config/open-codesign/config.toml`: + +```toml +schemaVersion = 1 + +[providers.anthropic] +key = "sk-ant-…" + +# Optional: any OpenAI-compatible endpoint also works +# [providers.openrouter] +# key = "sk-or-…" +# base = "https://openrouter.ai/api/v1" +``` + +The provider is auto-detected from the key prefix. No backend, no telemetry, no cloud account. + +## 3. Run the desktop shell + +```bash +pnpm dev +``` + +The Electron window opens with eight built-in demo prompts. Pick **Calm Spaces** to render the first prototype end-to-end. + +## 4. What you can do next + +- Click any element in the preview, leave a comment, watch the model rewrite that region only. +- Drag the AI-generated sliders to tune color, spacing, and typography without re-prompting. +- Point the codebase scanner at one of your repositories — we will extract the design tokens and apply them to every following generation. +- Export to PDF or PPTX from the share menu (lazy-loaded, so the cold-start bundle stays small). + +## Going further + +- [Architecture](./architecture) — how the packages fit together. +- [Roadmap](./roadmap) — what is shipping when. +- [Vision](https://github.com/OpenCoworkAI/open-codesign/blob/main/docs/VISION.md) — the locked product decisions. diff --git a/website/roadmap.md b/website/roadmap.md new file mode 100644 index 00000000..3eb86709 --- /dev/null +++ b/website/roadmap.md @@ -0,0 +1,40 @@ +--- +title: Roadmap +description: What ships when. Living document. +--- + +# Roadmap + +The full source of truth lives in [`docs/ROADMAP.md`](https://github.com/OpenCoworkAI/open-codesign/blob/main/docs/ROADMAP.md). Excerpt below. + +## Phase 0 — Foundations (current) + +Repo is ready to accept code. Apache-2.0, DCO, pnpm + Turborepo + Biome + TypeScript + Vitest scaffold, CI for lint / typecheck / test / size budget. + +## Phase 1 — Spike + +Prove the architecture with one demo, no UI polish. Providers wraps pi-ai, runtime renders one HTML artifact in an iframe sandbox, core orchestrates prompt → model → artifact → render. Demo: **Calm Spaces meditation app**. + +## Phase 2 — Three demos + +PPTX export via `pptxgenjs` + `dom-to-pptx`, PDF via Puppeteer-core against system Chrome, settings page with API key + model picker. Demos: meditation app, case study one-pager, pitch deck. + +## Phase 3 — Killer interactions + +Inline comment → AI patch loop (str_replace + stable `data-codesign-id`), AI-emitted custom sliders, version timeline with snapshot rollback. + +## Phase 4 — Ecosystem features + +Codebase scanner → design system extraction, Web Capture (Playwright on demand), handoff bundle to open-cowork. All eight killer demos working. + +## Phase 5 — Release polish + +Mac notarization + Windows Authenticode, Homebrew Cask + winget + scoop, opt-in auto-update, install size verified ≤ 80 MB, onboarding ≤ 3 steps, public 1.0. + +## Deferred (post-1.0) + +Real-time collaboration, MCP server interface, Claude Artifacts `` import, plugin loading inside open-cowork, hosted demo site, Linux installer, mobile companion (read-only). + +## Anti-goals + +Built-in payment, user accounts, cloud sync, stock asset library, custom model fine-tuning, team admin console. diff --git a/website/zh/index.md b/website/zh/index.md new file mode 100644 index 00000000..3b1d672f --- /dev/null +++ b/website/zh/index.md @@ -0,0 +1,94 @@ +--- +layout: home +title: open-codesign +titleTemplate: 开源 AI 设计工具 + +hero: + name: open-codesign + text: 用任何模型设计,全部跑在你的电脑里。 + tagline: 一句话生成交互原型、幻灯片与营销素材。多模型、自带密钥、本地优先。Claude Design 的开源对照版本。 + actions: + - theme: brand + text: 快速开始 + link: /zh/quickstart + - theme: alt + text: 在 GitHub 查看 + link: https://github.com/OpenCoworkAI/open-codesign + +features: + - icon: 🧘 + title: Calm Spaces 冥想 App + details: 一句话生成手机壳框、柔和配色、可点击导航的移动端原型。 + - icon: 📄 + title: 客户案例单页 + details: 深色主题、前后对比指标、CEO 引言,可直接导出成印刷级 PDF。 + - icon: 🪄 + title: B2B 演示稿 + details: 8–12 页 PPTX 输出,形状可编辑。无需 Canva,也无需第二个订阅。 + - icon: 💬 + title: 元素级评论改写 + details: 在预览里点中任意元素留下批注,模型只重写那一块。 + - icon: 🎚️ + title: AI 生成的滑块 + details: 模型主动给出值得调的参数——颜色、间距、字体——拖一下即可微调。 + - icon: 🧬 + title: 代码库 → 设计系统 + details: 指向你本地的仓库,我们抽取 token 并应用到之后的每一次生成。 + - icon: 🌐 + title: 网页截取 + details: 粘贴任意网址,作为参考素材重新创作。 + - icon: 🔁 + title: 交接到 open-cowork + details: 把设计连同意图说明打包,交给 open-cowork 完成工程化。 +--- + +
+ +## 工作流 + +
+
+ 1 +

带上你自己的密钥

+

Anthropic、OpenAI、Gemini、DeepSeek、OpenRouter、Ollama——只要 pi-ai 支持,全都能用。

+
+
+ 2 +

写一段提示

+

用八个内置 demo,或者自由描述。第一版几秒内出现在沙箱 iframe 里。

+
+
+ 3 +

打磨、导出、交付

+

元素级评论、AI 滑块、版本时间线。导出 HTML/PDF/PPTX,或交给 open-cowork 工程化。

+
+
+ +
+ +
+ +## 与同类产品对比 + +

我们不比 Claude Design 更快,我们走的是另一条路:开源、多模型、本地优先。

+ +
+ +| | 模型 | 本地运行 | 源码 | 计费方式 | +| ----------------- | :----------: | :------: | :----------: | :------------: | +| Claude Design | 仅 Opus | ✗ | 闭源 | 订阅 | +| v0 by Vercel | 平台精选 | ✗ | 闭源 | 订阅 | +| Bolt.new | 平台精选 | ✗ | 部分开源 | 订阅 | +| **open-codesign** | **任意(自带密钥)** | **✓** | **Apache-2.0** | **仅 token 成本** | + +
+ +
+ +
+ +### 准备好不被任何厂商锁住了吗? + +90 秒上手 → + +
diff --git a/website/zh/quickstart.md b/website/zh/quickstart.md new file mode 100644 index 00000000..c0c6929e --- /dev/null +++ b/website/zh/quickstart.md @@ -0,0 +1,55 @@ +--- +title: 快速开始 +description: 90 秒安装 open-codesign,跑通你的第一个设计。 +--- + +# 快速开始 + +> open-codesign 处于 pre-alpha 阶段。安装包计划在 v0.5 提供,目前先从源码运行。 + +## 1. 克隆并安装 + +```bash +git clone https://github.com/OpenCoworkAI/open-codesign.git +cd open-codesign +pnpm install +``` + +## 2. 配置 API 密钥 + +新建 `~/.config/open-codesign/config.toml`: + +```toml +schemaVersion = 1 + +[providers.anthropic] +key = "sk-ant-…" + +# 也可以用任意 OpenAI 兼容端点 +# [providers.openrouter] +# key = "sk-or-…" +# base = "https://openrouter.ai/api/v1" +``` + +provider 会根据密钥前缀自动识别。没有后端、没有遥测、没有云账号。 + +## 3. 启动桌面壳 + +```bash +pnpm dev +``` + +Electron 窗口会带着八个内置 demo 启动,点 **Calm Spaces** 走通第一个端到端流程。 + +## 4. 之后能做什么 + +- 在预览里点中元素、留下评论,模型只重写那一块。 +- 拖动 AI 给出的滑块,无需重新提示就能调出新的色彩、间距与字体。 +- 把代码库扫描器指向你的某个仓库,我们抽取 token 后所有后续生成都自动套用。 +- 从分享菜单导出 PDF 或 PPTX(按需懒加载,不会拖慢冷启动)。 + +## 继续阅读 + +- [架构](../architecture) +- [路线图](../roadmap) +- [愿景文档](https://github.com/OpenCoworkAI/open-codesign/blob/main/docs/VISION.md)