diff --git a/apps/docs/.env.sample b/apps/docs/.env.sample
index c681af3ec..80463d2b6 100644
--- a/apps/docs/.env.sample
+++ b/apps/docs/.env.sample
@@ -7,4 +7,5 @@ AI_ASSISTANT_URL=
AI_API_ASSISTANT_TOKEN=
AI_WEBSITE_ID=
AI_API_ASSISTANT_RECAPTCHA_SITE_KEY=
-CLOUDINARY_CLOUD_NAME=
\ No newline at end of file
+CLOUDINARY_CLOUD_NAME=
+GTAG_TRACKING_ID=
\ No newline at end of file
diff --git a/apps/docs/content/features/coding-agents.mdx b/apps/docs/content/features/coding-agents.mdx
index d956ab9c6..4f581d3bc 100644
--- a/apps/docs/content/features/coding-agents.mdx
+++ b/apps/docs/content/features/coding-agents.mdx
@@ -9,6 +9,20 @@ import IntroAgentVisual from '@site/src/components/IntroAgentVisual';
Zerops was built on the idea of **environment parity** — giving developers the full development lifecycle, from remote development to highly available production, with the observability and developer tools for maximum flexibility, and sensible defaults so the configs stay reasonable. Turns out that's **exactly what coding agents need** to produce and iterate on production-ready applications.
+
+ VIDEO
+
+
## What is it
diff --git a/apps/docs/content/references/cli.mdx b/apps/docs/content/references/cli.mdx
index 5e3b7308c..3c23544c5 100644
--- a/apps/docs/content/references/cli.mdx
+++ b/apps/docs/content/references/cli.mdx
@@ -40,7 +40,7 @@ Execute following command in PowerShell:
irm https://zerops.io/zcli/install.ps1 | iex
```
-zCLI will be installed inside `C:\Program Files\` or `C:\Program Files (x86)\`
+zCLI will be installed inside `C:\Users\\.zerops\zcli.exe`.
### Using Package Managers
diff --git a/apps/docs/content/references/github-integration.mdx b/apps/docs/content/references/github-integration.mdx
index 46d4844b3..affa49b31 100644
--- a/apps/docs/content/references/github-integration.mdx
+++ b/apps/docs/content/references/github-integration.mdx
@@ -106,25 +106,25 @@ As an alternative to direct integration, you can use GitHub Actions to manage yo
1. **Create Workflow Configuration**
Create a new file at `.github/workflows/deploy.yaml` in your repository:
-
+
Basic example:
```yaml
name: Deploy to Zerops
-
+
on:
push:
branches:
- main
-
+
jobs:
deploy:
runs-on: ubuntu-latest
-
+
steps:
- name: Checkout code
uses: actions/checkout@v7
-
+
- name: Deploy with Zerops
uses: zeropsio/actions@main
with:
@@ -133,14 +133,14 @@ As an alternative to direct integration, you can use GitHub Actions to manage yo
```
Example with tag matching:
-
+
```yaml
name: Deploy to Zerops on Tag
on:
push:
tags:
- - 'v[0-9]+\.[0-9]+\.[0-9]+' # Example: v1.0.0, v2.3.4
+ - 'v[0-9]+\.[0-9]+\.[0-9]+' # Example: v1.0.0, v2.3.4
jobs:
deploy:
@@ -179,3 +179,34 @@ Keep your access token secure and never commit it directly to your repository. T
:::
For more information about GitHub Actions, refer to the [official GitHub Actions documentation](https://docs.github.com/en/actions).
+
+---
+
+## Advanced: Full Lifecycle Automation
+
+:::tip Reference repository
+A complete, working example of this pattern is available at [zerops-showcase-deploy](https://github.com/zeropsio/zerops-showcase-deploy), a deployment orchestrator built entirely on GitHub Actions and the Zerops API, no Zerops CLI required. Clone it as a starting point for your own multi-environment pipeline.
+:::
+
+The workflow above deploys a single service on push to one branch. This reference repo extends that into a full lifecycle: every feature branch gets its own isolated environment, every PR gets a preview, and stage and prod stay permanent with their data intact across deploys.
+
+### What it sets up
+
+| You do this | Pipeline creates | Lifetime |
+| --------------------------- | -------------------------------------------------- | --------------------------- |
+| Push to a feature branch | A full isolated environment | Until the branch is deleted |
+| Open/update a PR to `stage` | A full isolated preview environment | Until the PR is closed |
+| Merge a PR into `stage` | Redeploys app code to the shared stage environment | Permanent, data preserved |
+| Push/merge to `main` | Redeploys app code to production | Permanent, data preserved |
+
+Permanent environments keep their databases, caches, queues, and storage across every deploy, only the application code gets updated. Ephemeral environments are created from scratch and torn down automatically when no longer needed, so every developer gets their own isolated copy of the full stack without manual cleanup.
+
+PR previews require a `stage` branch as the pull request target; the repo's setup guide covers creating it.
+
+### How it differs from the basic workflow above
+
+The basic GitHub Actions setup deploys one service to one Zerops project. This pattern manages entire **projects** programmatically instead: it checks whether a project for a given branch or PR already exists, creates one from an import template if not, and deploys to it. The key safeguard is that it never deletes or recreates infrastructure on permanent environments, only ephemeral ones get torn down. This is a reference implementation, not a Zerops-managed service, so you own the repo, the GitHub Actions minutes, and the Zerops API calls it makes on your behalf.
+
+:::tip Full setup guide
+Required secrets, customizing the project template for your own services, and the complete workflow reference are all covered in the [repo's README](https://github.com/zeropsio/zerops-showcase-deploy#readme).
+:::
diff --git a/apps/docs/content/references/gitlab-integration.mdx b/apps/docs/content/references/gitlab-integration.mdx
index 345dea332..18624b4ab 100644
--- a/apps/docs/content/references/gitlab-integration.mdx
+++ b/apps/docs/content/references/gitlab-integration.mdx
@@ -47,19 +47,6 @@ Zerops requires full access to configure webhooks and download your code. Your s
4. **Finalize Setup**
- Confirm your settings to complete the integration
-{/* TODO: IMAGE */}
-
-
-
-
-
--->
-
---
### Skip the automatic pipeline once
diff --git a/apps/docs/content/references/networking/vpn.mdx b/apps/docs/content/references/networking/vpn.mdx
index fd416e86a..603f859ee 100644
--- a/apps/docs/content/references/networking/vpn.mdx
+++ b/apps/docs/content/references/networking/vpn.mdx
@@ -14,6 +14,12 @@ Before getting started, ensure you have:
- [zCLI](/references/cli) (serves as the WireGuard client)
- A Zerops project with at least one service
+:::info Windows prerequisite
+zCLI VPN relies on WireGuard, which requires the **Virtual Machine Platform**
+feature to be enabled on Windows 11. Open `optionalfeatures.exe`, check
+**Virtual Machine Platform**, then reboot.
+:::
+
## Usage
You can interact with services within your project and even establish SSH connection to your services after connecting to project through VPN.
diff --git a/apps/docs/content/zcp/concept/how-it-works.mdx b/apps/docs/content/zcp/concept/how-it-works.mdx
index c1124ff8d..63d443f87 100644
--- a/apps/docs/content/zcp/concept/how-it-works.mdx
+++ b/apps/docs/content/zcp/concept/how-it-works.mdx
@@ -39,11 +39,11 @@ flowchart TD
reachability -->|needs human| blocker
behavior -->|needs human| blocker
- classDef user fill:#f7fbff,stroke:#2d72d9,stroke-width:1.5px,color:#172033;
- classDef zcpbox fill:#eef7f1,stroke:#32845a,stroke-width:1.5px,color:#172033;
- classDef work fill:#fffaf0,stroke:#c47f17,stroke-width:1.5px,color:#172033;
- classDef done fill:#f5f3ff,stroke:#7157d9,stroke-width:1.5px,color:#172033;
- classDef stop fill:#fff1f2,stroke:#d33f49,stroke-width:1.5px,color:#172033;
+ classDef user stroke:#2d72d9,stroke-width:1.5px;
+ classDef zcpbox stroke:#32845a,stroke-width:1.5px;
+ classDef work stroke:#c47f17,stroke-width:1.5px;
+ classDef done stroke:#7157d9,stroke-width:1.5px;
+ classDef stop stroke:#d33f49,stroke-width:1.5px;
class intent user;
class state,scope zcpbox;
diff --git a/apps/docs/content/zcp/overview.mdx b/apps/docs/content/zcp/overview.mdx
index acfb66e67..1bdfd2b50 100644
--- a/apps/docs/content/zcp/overview.mdx
+++ b/apps/docs/content/zcp/overview.mdx
@@ -137,7 +137,7 @@ To start, add remote setup in Zerops or initialize local setup beside your edito
**Zerops token.** The MCP server connects through `ZCP_API_KEY`, a Zerops token limited to one project. Remote setup gets it from the platform; local setup reads it from `.mcp.json`. Token details live in [Tokens and credentials](/zcp/security/tokens-and-project-access).
-**Workspace freedom.** The `zcp@1` service is still a normal Zerops service. You can install another agent CLI, add private MCP servers or helper tools, edit `CLAUDE.md`, add team dotfiles, and adapt the workspace. Details live in [What remote workspace gives you](/zcp/setup/hosted-workspace#make-customization-persistent).
+**Workspace freedom.** The `zcp@1` service is still a normal Zerops service. You can install another agent CLI, add private MCP servers or helper tools, edit `CLAUDE.md`, add team dotfiles, and adapt the workspace. Details live in [What remote workspace gives you](/zcp/setup/hosted-workspace).
:::caution Production boundary
Use this setup for development or staging work. Production should stay in a separate Zerops project and receive released work through your CI or release process; see [Promote to production](/zcp/workflows/promote-to-production) for the practical flow and [Production boundary](/zcp/security/production-policy) for the policy.
diff --git a/apps/docs/docusaurus.config.js b/apps/docs/docusaurus.config.js
index aac6502b1..73abfdc00 100644
--- a/apps/docs/docusaurus.config.js
+++ b/apps/docs/docusaurus.config.js
@@ -1,9 +1,15 @@
/* eslint-disable @typescript-eslint/no-var-requires */
import "dotenv/config"
+import path from "path"
+import { fileURLToPath } from "url"
import { themes as prismThemes } from "prism-react-renderer"
const reverseSidebar = require("./src/utils/reverse-sidebar")
const excludeSidebarResults = require("./src/utils/exclude-sidebar-results")
+const __dirname = path.dirname(fileURLToPath(import.meta.url))
+
+const gtagTrackingId = process.env.GTAG_TRACKING_ID
+
/** @type {import('@medusajs/docs').MedusaDocusaurusConfig} */
const config = {
title: "Zerops",
@@ -48,6 +54,14 @@ const config = {
name: "custom-webpack-plugin",
configureWebpack() {
return {
+ resolve: {
+ alias: {
+ "@docusaurus/theme-mermaid/client": path.resolve(
+ __dirname,
+ "src/mermaid/client.js"
+ ),
+ },
+ },
devServer: {
client: {
overlay: {
@@ -78,23 +92,7 @@ const config = {
light: "base",
dark: "base",
},
- options: {
- themeVariables: {
- background: "#ECEFF3",
- mainBkg: "#ECEFF3",
- primaryColor: "#ECEFF3",
- primaryTextColor: "#030712",
- primaryBorderColor: "#D1D5DB",
- nodeBorder: "#D1D5DB",
- lineColor: "#11181C",
- fontFamily: "Inter",
- fontSize: "14.75px",
- tertiaryColor: "#F3F4F6",
- tertiaryBorderColor: "#D1D5DB",
- tertiaryTextColor: "#030712",
- clusterBkg: "#F3F4F6",
- },
- },
+ options: {},
},
image: "img/docs-meta.jpg",
colorMode: {
@@ -228,7 +226,9 @@ const config = {
routeBasePath: "/",
remarkPlugins: [
[require("@docusaurus/remark-plugin-npm2yarn"), { sync: true }],
+ require('./src/plugins/remark-mdx-table-component'),
],
+ rehypePlugins: [require('./src/plugins/rehype-wrap-tables')],
showLastUpdateTime: false,
showLastUpdateAuthor: false,
// breadcrumbs: false,
@@ -250,9 +250,13 @@ const config = {
theme: {
customCss: require.resolve("./src/css/custom.css"),
},
- gtag: {
- trackingID: "xxx",
- },
+ ...(gtagTrackingId
+ ? {
+ gtag: {
+ trackingID: gtagTrackingId,
+ },
+ }
+ : {}),
sitemap: {
filename: "sitemap-docs.xml",
ignorePatterns: ["/guides/**"],
diff --git a/apps/docs/sidebars.js b/apps/docs/sidebars.js
index b6c4ff87b..ef11b68e6 100644
--- a/apps/docs/sidebars.js
+++ b/apps/docs/sidebars.js
@@ -633,6 +633,7 @@ module.exports = {
{
type: 'category',
label: 'Remote or local setup',
+ collapsed: true,
link: {
type: 'doc',
id: 'zcp/setup/choose-workspace',
@@ -657,6 +658,7 @@ module.exports = {
{
type: 'category',
label: 'Build and ship',
+ collapsed: true,
link: {
type: 'doc',
id: 'zcp/workflows/build-with-zcp',
@@ -681,6 +683,7 @@ module.exports = {
{
type: 'category',
label: 'Security',
+ collapsed: true,
link: {
type: 'doc',
id: 'zcp/security/trust-model',
@@ -705,6 +708,7 @@ module.exports = {
{
type: 'category',
label: 'Reference',
+ collapsed: true,
link: {
type: 'doc',
id: 'zcp/reference/index',
diff --git a/apps/docs/src/components/NavigationButons/index.tsx b/apps/docs/src/components/NavigationButons/index.tsx
index 84ae381bb..640fe1daf 100644
--- a/apps/docs/src/components/NavigationButons/index.tsx
+++ b/apps/docs/src/components/NavigationButons/index.tsx
@@ -15,7 +15,7 @@ interface NavigationButtonsProps {
export function NavigationButtons({ prevPage, nextPage }: NavigationButtonsProps) {
return (
-
+
{prevPage ? (
{
};
return (
-
+
+
@@ -45,6 +46,7 @@ const ResourceTable = ({ resources = {} }) => {
))}
+
);
};
diff --git a/apps/docs/src/css/_docusaurus.css b/apps/docs/src/css/_docusaurus.css
index 6a1358cd2..29eb61324 100644
--- a/apps/docs/src/css/_docusaurus.css
+++ b/apps/docs/src/css/_docusaurus.css
@@ -150,7 +150,13 @@ details summary {
}
.reference-table {
- @apply !table table-fixed w-full;
+ @apply !table w-full;
+}
+
+@media (min-width: 997px) {
+ .reference-table {
+ @apply table-fixed;
+ }
}
.reference-table p {
@@ -323,16 +329,9 @@ td {
@apply bg-[#F2F5F7] dark:bg-[#1B1B1F];
}
-/* Infima's default is `table { display: block; overflow: auto }`, which turns
- the into a block scroll-container whose actual grid becomes an
- anonymous, shrink-to-fit table box. `width: 100%` then only sizes the outer
- block — it never reaches the grid — so the table refuses to fill the page,
- and forcing a cell width (the old `td { width: 100% }`) just bloats one
- column instead of widening the table. On tablet/desktop, restore a real
- table box so `width: 100%` + auto layout distribute columns and fill the
- parent. Below 768px we keep Infima's display:block + overflow-x scroll so
- wide tables stay swipeable on mobile. */
-@media (min-width: 768px) {
+/* Keep tables as real table boxes. Horizontal scroll is handled by
+ .table-scroll-wrapper (MDX Table swizzle) and responsive-content.css. */
+@media (min-width: 997px) {
table {
display: table;
table-layout: auto;
@@ -340,7 +339,7 @@ td {
th,
td {
- overflow-wrap: anywhere;
+ overflow-wrap: break-word;
}
}
diff --git a/apps/docs/src/css/components/responsive-content.css b/apps/docs/src/css/components/responsive-content.css
new file mode 100644
index 000000000..e278b6540
--- /dev/null
+++ b/apps/docs/src/css/components/responsive-content.css
@@ -0,0 +1,163 @@
+/* Horizontal scroll container for doc tables. */
+.table-scroll-wrapper {
+ -webkit-overflow-scrolling: touch;
+ margin: 0.75rem 0;
+ max-width: 100%;
+ overflow-x: auto;
+}
+
+.table-scroll-wrapper > table {
+ border-collapse: collapse;
+ display: table;
+ margin: 0;
+ table-layout: auto;
+ width: 100%;
+}
+
+/* Diagrams and wide visual content */
+.docusaurus-mermaid-container {
+ max-width: 100%;
+ overflow-x: auto;
+ -webkit-overflow-scrolling: touch;
+}
+
+.docusaurus-mermaid-container svg {
+ max-width: none;
+}
+
+/* Tablet + mobile */
+@media (max-width: 996px) {
+ .markdown,
+ .theme-doc-markdown {
+ max-width: 100%;
+ }
+
+ .table-scroll-wrapper > table,
+ .markdown table,
+ .theme-doc-markdown table {
+ display: table !important;
+ table-layout: auto !important;
+ width: max-content;
+ min-width: 100%;
+ }
+
+ /* Two-column Field / Details tables: fill width, keep labels readable */
+ .markdown table:has(> thead > tr > :nth-child(2):last-child),
+ .theme-doc-markdown table:has(> thead > tr > :nth-child(2):last-child),
+ .table-scroll-wrapper > table:has(> thead > tr > :nth-child(2):last-child),
+ .markdown table:has(> tbody > tr > :nth-child(2):last-child):not(:has(> thead)),
+ .theme-doc-markdown
+ table:has(> tbody > tr > :nth-child(2):last-child):not(:has(> thead)),
+ .table-scroll-wrapper
+ > table:has(> tbody > tr > :nth-child(2):last-child):not(:has(> thead)) {
+ width: 100%;
+ }
+
+ .markdown table th,
+ .markdown table td,
+ .theme-doc-markdown table th,
+ .theme-doc-markdown table td,
+ .table-scroll-wrapper > table th,
+ .table-scroll-wrapper > table td {
+ overflow-wrap: break-word;
+ word-break: normal;
+ }
+
+ .markdown table:has(> thead > tr > :nth-child(2):last-child) th:first-child,
+ .markdown table:has(> thead > tr > :nth-child(2):last-child) td:first-child,
+ .theme-doc-markdown table:has(> thead > tr > :nth-child(2):last-child)
+ th:first-child,
+ .theme-doc-markdown table:has(> thead > tr > :nth-child(2):last-child)
+ td:first-child,
+ .table-scroll-wrapper > table:has(> thead > tr > :nth-child(2):last-child)
+ th:first-child,
+ .table-scroll-wrapper > table:has(> thead > tr > :nth-child(2):last-child)
+ td:first-child,
+ .markdown
+ table:has(> tbody > tr > :nth-child(2):last-child):not(:has(> thead))
+ td:first-child,
+ .theme-doc-markdown
+ table:has(> tbody > tr > :nth-child(2):last-child):not(:has(> thead))
+ td:first-child,
+ .table-scroll-wrapper
+ > table:has(> tbody > tr > :nth-child(2):last-child):not(:has(> thead))
+ td:first-child {
+ min-width: 6.5rem;
+ white-space: nowrap;
+ vertical-align: top;
+ width: auto !important;
+ }
+
+ .markdown th[class*='w-fit'],
+ .markdown td[class*='w-fit'],
+ .theme-doc-markdown th[class*='w-fit'],
+ .theme-doc-markdown td[class*='w-fit'],
+ .table-scroll-wrapper th[class*='w-fit'],
+ .table-scroll-wrapper td[class*='w-fit'] {
+ min-width: 6.5rem;
+ white-space: nowrap;
+ width: auto !important;
+ }
+
+ .markdown th[class*='w-full'],
+ .markdown td[class*='w-full'],
+ .theme-doc-markdown th[class*='w-full'],
+ .theme-doc-markdown td[class*='w-full'],
+ .table-scroll-wrapper th[class*='w-full'],
+ .table-scroll-wrapper td[class*='w-full'] {
+ min-width: 12rem;
+ white-space: normal;
+ width: auto !important;
+ }
+
+ .reference-table,
+ table.reference-table,
+ table.table-fixed,
+ table[class*='table-fixed'],
+ table[class*='whitespace-nowrap'] {
+ table-layout: auto !important;
+ width: max-content;
+ min-width: 100%;
+ }
+
+ .reference-table th,
+ .reference-table td,
+ table[class*='whitespace-nowrap'] th,
+ table[class*='whitespace-nowrap'] td {
+ white-space: normal;
+ }
+
+ .zcp-landscape-table table,
+ .zcp-summary-table table {
+ min-width: 100%;
+ width: max-content;
+ }
+
+ .ascii-graph,
+ .intro-ascii {
+ max-width: 100%;
+ }
+}
+
+/* Doc prev/next pagination */
+@media (max-width: 996px) {
+ .doc-pagination-nav {
+ flex-direction: column;
+ gap: 0.75rem;
+ }
+
+ .doc-pagination-nav > a {
+ max-width: 100%;
+ min-width: 0;
+ width: 100%;
+ }
+
+ .doc-pagination-nav > a span {
+ min-width: 0;
+ overflow-wrap: anywhere;
+ }
+
+ .doc-pagination-nav > div:empty {
+ display: none;
+ }
+}
diff --git a/apps/docs/src/css/custom.css b/apps/docs/src/css/custom.css
index 2bfb0e819..277d4a1bd 100644
--- a/apps/docs/src/css/custom.css
+++ b/apps/docs/src/css/custom.css
@@ -236,14 +236,12 @@ html[data-theme='dark'] .docsearch-btn:hover {
@import url('./components/toc.css');
@import url('./components/copy-page-menu.css');
@import url('./components/tooltip.css');
+@import url('./components/responsive-content.css');
-/* ZCP + paired feature pages: force balanced table column widths on tablet
- and up. Default markdown tables render as display:block with browser
- auto-layout, which collapses one column to ~17% when the other has
- bold-led short text the browser treats as max-content. Equal-width
- fixed layout keeps long-cell content readable. Below 768px we leave the
- default responsive overflow-x behavior alone. */
-@media (min-width: 768px) {
+/* ZCP + paired feature pages: balanced table columns on desktop only.
+ Below 997px, site-wide responsive table rules (end of file) keep wide
+ tables horizontally scrollable instead of squishing. */
+@media (min-width: 997px) {
html[class*='docs-doc-id-zcp'] .theme-doc-markdown table,
html[class*='docs-doc-id-features/coding-agents'] .theme-doc-markdown table,
html[class*='docs-doc-id-features/local-remote-development']
@@ -277,37 +275,6 @@ html[data-theme='dark'] .docsearch-btn:hover {
}
}
-@media (max-width: 767px) {
- html[class*='docs-doc-id-zcp'] article,
- html[class*='docs-doc-id-features/coding-agents'] article,
- html[class*='docs-doc-id-features/local-remote-development'] article,
- html[class*='docs-doc-id-zcp'] .theme-doc-footer,
- html[class*='docs-doc-id-features/coding-agents'] .theme-doc-footer,
- html[class*='docs-doc-id-features/local-remote-development'] .theme-doc-footer {
- overflow-x: hidden;
- }
-
- html[class*='docs-doc-id-zcp'] article pre,
- html[class*='docs-doc-id-features/coding-agents'] article pre,
- html[class*='docs-doc-id-features/local-remote-development'] article pre,
- html[class*='docs-doc-id-zcp'] article table,
- html[class*='docs-doc-id-features/coding-agents'] article table,
- html[class*='docs-doc-id-features/local-remote-development'] article table {
- max-width: 100%;
- overflow-x: auto;
- }
-
- html[class*='docs-doc-id-zcp'] .theme-doc-footer a,
- html[class*='docs-doc-id-features/coding-agents'] .theme-doc-footer a,
- html[class*='docs-doc-id-features/local-remote-development']
- .theme-doc-footer
- a {
- max-width: calc(50% - 0.25rem);
- min-width: 0;
- overflow-wrap: anywhere;
- }
-}
-
.zcp-lifecycle-diagram {
margin: 1.5rem 0 1.75rem;
}
@@ -576,6 +543,12 @@ html[data-theme='dark'] .zcp-agent-flow__node--proof {
}
html[data-theme='dark'] .zcp-lifecycle-stage {
+ background: rgba(24, 24, 27, 0.72);
+ border-color: rgba(63, 63, 70, 0.8);
+ color: #f8fafc;
+}
+
+html[data-theme='dark'] .zcp-lifecycle-stage h3 {
color: #f8fafc;
}
@@ -583,6 +556,14 @@ html[data-theme='dark'] .zcp-lifecycle-stage p {
color: #cbd5e1;
}
+html[data-theme='dark'] .zcp-lifecycle-stage li {
+ color: #cbd5e1;
+}
+
+html[data-theme='dark'] .zcp-lifecycle-stage::after {
+ color: #9ca3af;
+}
+
html[data-theme='dark'] .zcp-lifecycle-stage--infra {
background: rgba(20, 83, 45, 0.22);
}
@@ -697,13 +678,200 @@ html[data-theme='dark'] .zcp-lifecycle-stage--delivery {
.zcp-claim-callout { grid-column: 1 / -1; padding: 1.15rem 1.25rem; }
}
-html[data-theme='dark'] .zcp-claim-card { color: #f8fafc; }
+html[data-theme='dark'] .zcp-claim-card {
+ background: rgba(24, 24, 27, 0.72);
+ border-color: rgba(63, 63, 70, 0.8);
+ color: #f8fafc;
+}
+
+html[data-theme='dark'] .zcp-claim-card h3 {
+ color: #f8fafc;
+}
+
+html[data-theme='dark'] .zcp-claim-card a {
+ color: #93c5fd;
+}
+
html[data-theme='dark'] .zcp-claim-card p,
-html[data-theme='dark'] .zcp-claim-card span { color: #cbd5e1; }
-html[data-theme='dark'] .zcp-claim-card--services { background: rgba(20, 83, 45, 0.22); }
-html[data-theme='dark'] .zcp-claim-card--deploy { background: rgba(76, 29, 149, 0.22); }
-html[data-theme='dark'] .zcp-claim-card--stack { background: rgba(30, 58, 138, 0.22); }
-html[data-theme='dark'] .zcp-claim-card--handover { background: rgba(120, 53, 15, 0.2); }
+html[data-theme='dark'] .zcp-claim-card span {
+ color: #cbd5e1;
+}
+
+html[data-theme='dark'] .zcp-claim-card--services { background: rgba(20, 83, 45, 0.22); border-color: rgba(50, 132, 90, 0.35); }
+html[data-theme='dark'] .zcp-claim-card--deploy { background: rgba(76, 29, 149, 0.22); border-color: rgba(113, 87, 217, 0.35); }
+html[data-theme='dark'] .zcp-claim-card--stack { background: rgba(30, 58, 138, 0.22); border-color: rgba(45, 114, 217, 0.35); }
+html[data-theme='dark'] .zcp-claim-card--handover { background: rgba(120, 53, 15, 0.2); border-color: rgba(196, 127, 23, 0.35); }
+
+/* Mermaid diagrams — theme-aware styling */
+
+.docusaurus-mermaid-container {
+ margin: 1.25rem 0;
+}
+
+.docusaurus-mermaid-container svg {
+ background: transparent !important;
+}
+
+/* Edges and arrowheads */
+html[data-theme='dark'] .docusaurus-mermaid-container .edgePath path,
+html[data-theme='dark'] .docusaurus-mermaid-container .flowchart-link {
+ stroke: #94a3b8 !important;
+}
+
+html[data-theme='dark'] .docusaurus-mermaid-container marker path {
+ fill: #94a3b8 !important;
+ stroke: #94a3b8 !important;
+}
+
+/* Edge labels (yes / no / etc.) */
+html[data-theme='dark'] .docusaurus-mermaid-container .edgeLabel rect,
+html[data-theme='dark'] .docusaurus-mermaid-container .edgeLabel .label-container {
+ fill: #1e293b !important;
+}
+
+html[data-theme='dark'] .docusaurus-mermaid-container .edgeLabel span,
+html[data-theme='dark'] .docusaurus-mermaid-container .edgeLabel p,
+html[data-theme='dark'] .docusaurus-mermaid-container .edgeLabel .label {
+ color: #e2e8f0 !important;
+ fill: #e2e8f0 !important;
+}
+
+/* Default nodes (diagrams without classDef) */
+html[data-theme='light'] .docusaurus-mermaid-container .node.default rect,
+html[data-theme='light'] .docusaurus-mermaid-container .node.default polygon,
+html[data-theme='light'] .docusaurus-mermaid-container .node.default circle {
+ fill: #eceff3 !important;
+ stroke: #d1d5db !important;
+}
+
+html[data-theme='dark'] .docusaurus-mermaid-container .node.default rect,
+html[data-theme='dark'] .docusaurus-mermaid-container .node.default polygon,
+html[data-theme='dark'] .docusaurus-mermaid-container .node.default circle {
+ fill: rgba(30, 41, 59, 0.92) !important;
+ stroke: #64748b !important;
+}
+
+html[data-theme='light'] .docusaurus-mermaid-container .node.default foreignObject div,
+html[data-theme='light'] .docusaurus-mermaid-container .node.default .label,
+html[data-theme='light'] .docusaurus-mermaid-container .node.default .nodeLabel {
+ color: #030712 !important;
+}
+
+html[data-theme='dark'] .docusaurus-mermaid-container .node.default foreignObject div,
+html[data-theme='dark'] .docusaurus-mermaid-container .node.default .label,
+html[data-theme='dark'] .docusaurus-mermaid-container .node.default .nodeLabel {
+ color: #f8fafc !important;
+ fill: #f8fafc !important;
+}
+
+/* classDef nodes — light mode fills */
+html[data-theme='light'] .docusaurus-mermaid-container .node.user rect,
+html[data-theme='light'] .docusaurus-mermaid-container .node.user polygon {
+ fill: #f7fbff !important;
+ stroke: #2d72d9 !important;
+}
+
+html[data-theme='light'] .docusaurus-mermaid-container .node.zcpbox rect,
+html[data-theme='light'] .docusaurus-mermaid-container .node.zcpbox polygon {
+ fill: #eef7f1 !important;
+ stroke: #32845a !important;
+}
+
+html[data-theme='light'] .docusaurus-mermaid-container .node.work rect,
+html[data-theme='light'] .docusaurus-mermaid-container .node.work polygon {
+ fill: #fffaf0 !important;
+ stroke: #c47f17 !important;
+}
+
+html[data-theme='light'] .docusaurus-mermaid-container .node.done rect,
+html[data-theme='light'] .docusaurus-mermaid-container .node.done polygon {
+ fill: #f5f3ff !important;
+ stroke: #7157d9 !important;
+}
+
+html[data-theme='light'] .docusaurus-mermaid-container .node.stop rect,
+html[data-theme='light'] .docusaurus-mermaid-container .node.stop polygon {
+ fill: #fff1f2 !important;
+ stroke: #d33f49 !important;
+}
+
+html[data-theme='light'] .docusaurus-mermaid-container .node.user foreignObject div,
+html[data-theme='light'] .docusaurus-mermaid-container .node.zcpbox foreignObject div,
+html[data-theme='light'] .docusaurus-mermaid-container .node.work foreignObject div,
+html[data-theme='light'] .docusaurus-mermaid-container .node.done foreignObject div,
+html[data-theme='light'] .docusaurus-mermaid-container .node.stop foreignObject div,
+html[data-theme='light'] .docusaurus-mermaid-container .node.user .label,
+html[data-theme='light'] .docusaurus-mermaid-container .node.zcpbox .label,
+html[data-theme='light'] .docusaurus-mermaid-container .node.work .label,
+html[data-theme='light'] .docusaurus-mermaid-container .node.done .label,
+html[data-theme='light'] .docusaurus-mermaid-container .node.stop .label {
+ color: #172033 !important;
+}
+
+/* classDef nodes — dark mode fills */
+html[data-theme='dark'] .docusaurus-mermaid-container .node.user rect,
+html[data-theme='dark'] .docusaurus-mermaid-container .node.user polygon {
+ fill: rgba(30, 58, 138, 0.45) !important;
+ stroke: #60a5fa !important;
+}
+
+html[data-theme='dark'] .docusaurus-mermaid-container .node.zcpbox rect,
+html[data-theme='dark'] .docusaurus-mermaid-container .node.zcpbox polygon {
+ fill: rgba(20, 83, 45, 0.4) !important;
+ stroke: #4ade80 !important;
+}
+
+html[data-theme='dark'] .docusaurus-mermaid-container .node.work rect,
+html[data-theme='dark'] .docusaurus-mermaid-container .node.work polygon {
+ fill: rgba(120, 53, 15, 0.38) !important;
+ stroke: #fbbf24 !important;
+}
+
+html[data-theme='dark'] .docusaurus-mermaid-container .node.done rect,
+html[data-theme='dark'] .docusaurus-mermaid-container .node.done polygon {
+ fill: rgba(76, 29, 149, 0.38) !important;
+ stroke: #a78bfa !important;
+}
+
+html[data-theme='dark'] .docusaurus-mermaid-container .node.stop rect,
+html[data-theme='dark'] .docusaurus-mermaid-container .node.stop polygon {
+ fill: rgba(127, 29, 29, 0.38) !important;
+ stroke: #f87171 !important;
+}
+
+html[data-theme='dark'] .docusaurus-mermaid-container .node.user foreignObject div,
+html[data-theme='dark'] .docusaurus-mermaid-container .node.zcpbox foreignObject div,
+html[data-theme='dark'] .docusaurus-mermaid-container .node.work foreignObject div,
+html[data-theme='dark'] .docusaurus-mermaid-container .node.done foreignObject div,
+html[data-theme='dark'] .docusaurus-mermaid-container .node.stop foreignObject div,
+html[data-theme='dark'] .docusaurus-mermaid-container .node.user .label,
+html[data-theme='dark'] .docusaurus-mermaid-container .node.zcpbox .label,
+html[data-theme='dark'] .docusaurus-mermaid-container .node.work .label,
+html[data-theme='dark'] .docusaurus-mermaid-container .node.done .label,
+html[data-theme='dark'] .docusaurus-mermaid-container .node.stop .label,
+html[data-theme='dark'] .docusaurus-mermaid-container .node.user .nodeLabel,
+html[data-theme='dark'] .docusaurus-mermaid-container .node.zcpbox .nodeLabel,
+html[data-theme='dark'] .docusaurus-mermaid-container .node.work .nodeLabel,
+html[data-theme='dark'] .docusaurus-mermaid-container .node.done .nodeLabel,
+html[data-theme='dark'] .docusaurus-mermaid-container .node.stop .nodeLabel {
+ color: #f8fafc !important;
+ fill: #f8fafc !important;
+}
+
+/* Inline code inside diagram labels */
+html[data-theme='light'] .docusaurus-mermaid-container foreignObject code {
+ background: rgba(3, 7, 18, 0.06) !important;
+ color: #172033 !important;
+ padding: 0.1em 0.35em;
+ border-radius: 4px;
+}
+
+html[data-theme='dark'] .docusaurus-mermaid-container foreignObject code {
+ background: rgba(15, 23, 42, 0.75) !important;
+ color: #e2e8f0 !important;
+ padding: 0.1em 0.35em;
+ border-radius: 4px;
+}
/* gap objection cards */
@@ -895,7 +1063,9 @@ html[data-theme='dark'] .zcp-substrate-card p em { background: rgba(196, 127, 23
border: 1px solid rgba(45, 65, 96, 0.18);
border-radius: 10px;
margin: 1.4rem 0 1.8rem;
- overflow: hidden;
+ max-width: 100%;
+ overflow-x: auto;
+ -webkit-overflow-scrolling: touch;
}
.zcp-landscape-table table {
diff --git a/apps/docs/src/mermaid/client.js b/apps/docs/src/mermaid/client.js
new file mode 100644
index 000000000..4f27bf6a0
--- /dev/null
+++ b/apps/docs/src/mermaid/client.js
@@ -0,0 +1,99 @@
+import { useState, useEffect, useMemo, useRef } from 'react';
+import { useColorMode, useThemeConfig } from '@docusaurus/theme-common';
+import mermaid from 'mermaid';
+
+export const MermaidContainerClassName = 'docusaurus-mermaid-container';
+
+const lightThemeVariables = {
+ background: 'transparent',
+ mainBkg: '#ECEFF3',
+ primaryColor: '#ECEFF3',
+ primaryTextColor: '#030712',
+ primaryBorderColor: '#D1D5DB',
+ nodeBorder: '#D1D5DB',
+ lineColor: '#11181C',
+ fontFamily: 'Inter',
+ fontSize: '14.75px',
+ tertiaryColor: '#F3F4F6',
+ tertiaryBorderColor: '#D1D5DB',
+ tertiaryTextColor: '#030712',
+ clusterBkg: '#F3F4F6',
+ edgeLabelBackground: '#ffffff',
+};
+
+const darkThemeVariables = {
+ background: 'transparent',
+ mainBkg: '#1e293b',
+ primaryColor: '#1e293b',
+ primaryTextColor: '#f8fafc',
+ primaryBorderColor: '#64748b',
+ nodeBorder: '#64748b',
+ lineColor: '#94a3b8',
+ fontFamily: 'Inter',
+ fontSize: '14.75px',
+ tertiaryColor: '#334155',
+ tertiaryBorderColor: '#64748b',
+ tertiaryTextColor: '#f8fafc',
+ clusterBkg: '#1e293b',
+ edgeLabelBackground: '#1e293b',
+ textColor: '#f8fafc',
+ secondaryColor: '#334155',
+ secondaryTextColor: '#e2e8f0',
+ secondaryBorderColor: '#64748b',
+};
+
+export function useMermaidThemeConfig() {
+ return useThemeConfig().mermaid;
+}
+
+export function useMermaidConfig() {
+ const { colorMode } = useColorMode();
+ const mermaidThemeConfig = useMermaidThemeConfig();
+ const theme = mermaidThemeConfig.theme[colorMode];
+ const { options } = mermaidThemeConfig;
+
+ return useMemo(() => {
+ const { themeVariables: _ignored, ...restOptions } = options;
+
+ return {
+ startOnLoad: false,
+ ...restOptions,
+ theme,
+ themeVariables:
+ colorMode === 'dark' ? darkThemeVariables : lightThemeVariables,
+ };
+ }, [theme, options, colorMode]);
+}
+
+function useMermaidId() {
+ return useRef(`mermaid-svg-${Math.round(Math.random() * 10000000)}`).current;
+}
+
+async function renderMermaid({ id, text, config }) {
+ mermaid.mermaidAPI.initialize(config);
+ try {
+ return await mermaid.render(id, text);
+ } catch (e) {
+ document.querySelector(`#d${id}`)?.remove();
+ throw e;
+ }
+}
+
+export function useMermaidRenderResult({ text, config: providedConfig }) {
+ const [result, setResult] = useState(null);
+ const id = useMermaidId();
+ const defaultMermaidConfig = useMermaidConfig();
+ const config = providedConfig ?? defaultMermaidConfig;
+
+ useEffect(() => {
+ renderMermaid({ id, text, config })
+ .then(setResult)
+ .catch((e) => {
+ setResult(() => {
+ throw e;
+ });
+ });
+ }, [id, text, config]);
+
+ return result;
+}
diff --git a/apps/docs/src/plugins/rehype-wrap-tables.js b/apps/docs/src/plugins/rehype-wrap-tables.js
new file mode 100644
index 000000000..0b89cc26c
--- /dev/null
+++ b/apps/docs/src/plugins/rehype-wrap-tables.js
@@ -0,0 +1,59 @@
+/**
+ * Wraps every in a horizontal scroll container at build time.
+ * Covers JSX tables in MDX (which bypass MDXComponents.table).
+ */
+function normalizeClassName(className) {
+ if (!className) {
+ return [];
+ }
+ if (Array.isArray(className)) {
+ return className.flatMap((value) => String(value).split(/\s+/));
+ }
+ return String(className).split(/\s+/);
+}
+
+function isWrappedTableParent(parent) {
+ if (!parent || parent.type !== 'element' || parent.tagName !== 'div') {
+ return false;
+ }
+
+ const classes = normalizeClassName(parent.properties?.className);
+ return (
+ classes.includes('table-scroll-wrapper') ||
+ classes.some((name) => name.includes('tableContainer'))
+ );
+}
+
+function wrapTables(node) {
+ if (!node?.children?.length) {
+ return;
+ }
+
+ for (let index = 0; index < node.children.length; index += 1) {
+ const child = node.children[index];
+ wrapTables(child);
+
+ if (child?.type !== 'element' || child.tagName !== 'table') {
+ continue;
+ }
+
+ if (isWrappedTableParent(node)) {
+ continue;
+ }
+
+ node.children[index] = {
+ type: 'element',
+ tagName: 'div',
+ properties: {
+ className: ['table-scroll-wrapper'],
+ },
+ children: [child],
+ };
+ }
+}
+
+module.exports = function rehypeWrapTables() {
+ return (tree) => {
+ wrapTables(tree);
+ };
+};
diff --git a/apps/docs/src/plugins/remark-mdx-table-component.js b/apps/docs/src/plugins/remark-mdx-table-component.js
new file mode 100644
index 000000000..a866ffebe
--- /dev/null
+++ b/apps/docs/src/plugins/remark-mdx-table-component.js
@@ -0,0 +1,28 @@
+/**
+ * Rewrites JSX elements in MDX to so they use the
+ * ResponsiveTable MDX component (scroll wrapper). Markdown pipe tables are
+ * wrapped separately by rehype-wrap-tables.
+ */
+function visitMdxJsxTables(node) {
+ if (!node?.children?.length) {
+ return;
+ }
+
+ for (const child of node.children) {
+ if (
+ (child.type === 'mdxJsxFlowElement' ||
+ child.type === 'mdxJsxTextElement') &&
+ child.name === 'table'
+ ) {
+ child.name = 'Table';
+ }
+
+ visitMdxJsxTables(child);
+ }
+}
+
+module.exports = function remarkMdxTableComponent() {
+ return (tree) => {
+ visitMdxJsxTables(tree);
+ };
+};
diff --git a/apps/docs/src/theme/DocItem/Content/index.tsx b/apps/docs/src/theme/DocItem/Content/index.tsx
index 3f9217307..2664772db 100644
--- a/apps/docs/src/theme/DocItem/Content/index.tsx
+++ b/apps/docs/src/theme/DocItem/Content/index.tsx
@@ -8,7 +8,6 @@ import type { Props } from '@theme/DocItem/Content';
import { DocContextValue } from '@medusajs/docs';
import { Badge, BadgeVariant } from 'docs-ui';
import Head from '@docusaurus/Head';
-import { useLocation } from '@docusaurus/router';
/**
Title can be declared inside md content or declared through
@@ -35,10 +34,12 @@ export default function DocItemContent({ children }: Props): JSX.Element {
frontMatter: { badge, description, image },
metadata,
} = useDoc() as DocContextValue;
- const location = useLocation();
+ // OG microservice indexes pages by doc id (e.g. quickstart/quickstart), not
+ // custom permalinks (e.g. /quickstart/deploy-your-first-app).
+ const ogPath = `/${metadata.id}`;
const ogImage =
image ??
- `https://docs.zerops.io/og?path=${encodeURIComponent(location.pathname)}`;
+ `https://docs.zerops.io/og?path=${encodeURIComponent(ogPath)}`;
const syntheticTitle = useSyntheticTitle();
return (
diff --git a/apps/docs/src/theme/DocSidebarItem/Category/index.tsx b/apps/docs/src/theme/DocSidebarItem/Category/index.tsx
index 4cc9d6ed0..78259b0ac 100644
--- a/apps/docs/src/theme/DocSidebarItem/Category/index.tsx
+++ b/apps/docs/src/theme/DocSidebarItem/Category/index.tsx
@@ -14,6 +14,7 @@ import {
isSamePath,
} from '@docusaurus/theme-common/internal';
import Link from '@docusaurus/Link';
+import { useLocation } from '@docusaurus/router';
import { translate } from '@docusaurus/Translate';
import useIsBrowser from '@docusaurus/useIsBrowser';
import DocSidebarItems from '@theme/DocSidebarItems';
@@ -46,6 +47,42 @@ function useAutoExpandActiveCategory({
}, [isActive, wasActive, collapsed, updateCollapsed]);
}
+// Collapse a category when navigation leaves it (e.g. Reference → Overview).
+function useAutoCollapseInactiveCategory({
+ isActive,
+ collapsed,
+ updateCollapsed,
+ collapsible,
+}: {
+ isActive: boolean;
+ collapsed: boolean;
+ updateCollapsed: (b: boolean) => void;
+ collapsible: boolean;
+}) {
+ const { pathname } = useLocation();
+ const wasActive = usePrevious(isActive);
+ const previousPathname = usePrevious(pathname);
+ useEffect(() => {
+ if (!collapsible || collapsed || isActive) {
+ return;
+ }
+ const routeChanged =
+ previousPathname !== undefined && previousPathname !== pathname;
+ const justBecameInactive = !isActive && wasActive;
+ if (justBecameInactive || routeChanged) {
+ updateCollapsed(true);
+ }
+ }, [
+ isActive,
+ wasActive,
+ collapsed,
+ updateCollapsed,
+ collapsible,
+ pathname,
+ previousPathname,
+ ]);
+}
+
/**
* When a collapsible category has no link, we still link it to its first child
* during SSR as a temporary fallback. This allows to be able to navigate inside
@@ -134,6 +171,12 @@ export default function DocSidebarItemCategory({
setCollapsed(toCollapsed);
};
useAutoExpandActiveCategory({ isActive, collapsed, updateCollapsed });
+ useAutoCollapseInactiveCategory({
+ isActive,
+ collapsed,
+ updateCollapsed,
+ collapsible,
+ });
useEffect(() => {
if (
collapsible &&
diff --git a/apps/docs/src/theme/MDXComponents/Table.tsx b/apps/docs/src/theme/MDXComponents/Table.tsx
new file mode 100644
index 000000000..3c1e0db6d
--- /dev/null
+++ b/apps/docs/src/theme/MDXComponents/Table.tsx
@@ -0,0 +1,11 @@
+import React from 'react';
+
+type Props = React.TableHTMLAttributes;
+
+export default function Table({ children, ...props }: Props): JSX.Element {
+ return (
+
+ );
+}
diff --git a/apps/docs/src/theme/MDXComponents/index.tsx b/apps/docs/src/theme/MDXComponents/index.tsx
index 5a1c1a656..6c18a0cb3 100644
--- a/apps/docs/src/theme/MDXComponents/index.tsx
+++ b/apps/docs/src/theme/MDXComponents/index.tsx
@@ -10,6 +10,7 @@ import DocCard from '@theme/DocCard';
import DocCardList from '@theme/DocCardList';
import ExpandableTable from '@site/src/components/ExpandableTable';
import AsciiGraph from '@site/src/components/AsciiGraph';
+import MDXTable from './Table';
const components = {
// Re-use the default mapping
@@ -27,6 +28,7 @@ const components = {
Note,
ExpandableTable,
AsciiGraph,
+ Table: MDXTable,
};
export default components;
\ No newline at end of file
diff --git a/yarn.lock b/yarn.lock
index cd9a9e762..80c931e6e 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -3357,84 +3357,6 @@
resolved "https://registry.yarnpkg.com/@react-types/shared/-/shared-3.32.1.tgz#abfeb839d65d0abe923576f34ac08342c25dfa55"
integrity sha512-famxyD5emrGGpFuUlgOP6fVW2h/ZaF405G5KDi3zPHzyjAWys/8W6NAVJtNbkCkhedmvL0xOhvt8feGXyXaw5w==
-"@resvg/resvg-js-android-arm-eabi@2.6.2":
- version "2.6.2"
- resolved "https://registry.yarnpkg.com/@resvg/resvg-js-android-arm-eabi/-/resvg-js-android-arm-eabi-2.6.2.tgz#e761e0b688127db64879f455178c92468a9aeabe"
- integrity sha512-FrJibrAk6v29eabIPgcTUMPXiEz8ssrAk7TXxsiZzww9UTQ1Z5KAbFJs+Z0Ez+VZTYgnE5IQJqBcoSiMebtPHA==
-
-"@resvg/resvg-js-android-arm64@2.6.2":
- version "2.6.2"
- resolved "https://registry.yarnpkg.com/@resvg/resvg-js-android-arm64/-/resvg-js-android-arm64-2.6.2.tgz#b8cb564d7f6b3f37d9b43129f5dc5fe171e249e4"
- integrity sha512-VcOKezEhm2VqzXpcIJoITuvUS/fcjIw5NA/w3tjzWyzmvoCdd+QXIqy3FBGulWdClvp4g+IfUemigrkLThSjAQ==
-
-"@resvg/resvg-js-darwin-arm64@2.6.2":
- version "2.6.2"
- resolved "https://registry.yarnpkg.com/@resvg/resvg-js-darwin-arm64/-/resvg-js-darwin-arm64-2.6.2.tgz#49bd3faeda5c49f53302d970e6e79d006de18e7d"
- integrity sha512-nmok2LnAd6nLUKI16aEB9ydMC6Lidiiq2m1nEBDR1LaaP7FGs4AJ90qDraxX+CWlVuRlvNjyYJTNv8qFjtL9+A==
-
-"@resvg/resvg-js-darwin-x64@2.6.2":
- version "2.6.2"
- resolved "https://registry.yarnpkg.com/@resvg/resvg-js-darwin-x64/-/resvg-js-darwin-x64-2.6.2.tgz#e1344173aa27bfb4d880ab576d1acf1c1648faca"
- integrity sha512-GInyZLjgWDfsVT6+SHxQVRwNzV0AuA1uqGsOAW+0th56J7Nh6bHHKXHBWzUrihxMetcFDmQMAX1tZ1fZDYSRsw==
-
-"@resvg/resvg-js-linux-arm-gnueabihf@2.6.2":
- version "2.6.2"
- resolved "https://registry.yarnpkg.com/@resvg/resvg-js-linux-arm-gnueabihf/-/resvg-js-linux-arm-gnueabihf-2.6.2.tgz#34c445eba45efd68f6130b2ab426d76a7424253d"
- integrity sha512-YIV3u/R9zJbpqTTNwTZM5/ocWetDKGsro0SWp70eGEM9eV2MerWyBRZnQIgzU3YBnSBQ1RcxRZvY/UxwESfZIw==
-
-"@resvg/resvg-js-linux-arm64-gnu@2.6.2":
- version "2.6.2"
- resolved "https://registry.yarnpkg.com/@resvg/resvg-js-linux-arm64-gnu/-/resvg-js-linux-arm64-gnu-2.6.2.tgz#30da47087dd8153182198b94fe9f8d994890dae5"
- integrity sha512-zc2BlJSim7YR4FZDQ8OUoJg5holYzdiYMeobb9pJuGDidGL9KZUv7SbiD4E8oZogtYY42UZEap7dqkkYuA91pg==
-
-"@resvg/resvg-js-linux-arm64-musl@2.6.2":
- version "2.6.2"
- resolved "https://registry.yarnpkg.com/@resvg/resvg-js-linux-arm64-musl/-/resvg-js-linux-arm64-musl-2.6.2.tgz#5d75b8ff5c83103729c1ca3779987302753c50d4"
- integrity sha512-3h3dLPWNgSsD4lQBJPb4f+kvdOSJHa5PjTYVsWHxLUzH4IFTJUAnmuWpw4KqyQ3NA5QCyhw4TWgxk3jRkQxEKg==
-
-"@resvg/resvg-js-linux-x64-gnu@2.6.2":
- version "2.6.2"
- resolved "https://registry.yarnpkg.com/@resvg/resvg-js-linux-x64-gnu/-/resvg-js-linux-x64-gnu-2.6.2.tgz#411abedfaee5edc57cbb7701736cecba522e26f3"
- integrity sha512-IVUe+ckIerA7xMZ50duAZzwf1U7khQe2E0QpUxu5MBJNao5RqC0zwV/Zm965vw6D3gGFUl7j4m+oJjubBVoftw==
-
-"@resvg/resvg-js-linux-x64-musl@2.6.2":
- version "2.6.2"
- resolved "https://registry.yarnpkg.com/@resvg/resvg-js-linux-x64-musl/-/resvg-js-linux-x64-musl-2.6.2.tgz#fe4984038f0372f279e3ff570b72934dd7eb2a5c"
- integrity sha512-UOf83vqTzoYQO9SZ0fPl2ZIFtNIz/Rr/y+7X8XRX1ZnBYsQ/tTb+cj9TE+KHOdmlTFBxhYzVkP2lRByCzqi4jQ==
-
-"@resvg/resvg-js-win32-arm64-msvc@2.6.2":
- version "2.6.2"
- resolved "https://registry.yarnpkg.com/@resvg/resvg-js-win32-arm64-msvc/-/resvg-js-win32-arm64-msvc-2.6.2.tgz#d3a053cf7ff687087a2106330c0fdaae706254d1"
- integrity sha512-7C/RSgCa+7vqZ7qAbItfiaAWhyRSoD4l4BQAbVDqRRsRgY+S+hgS3in0Rxr7IorKUpGE69X48q6/nOAuTJQxeQ==
-
-"@resvg/resvg-js-win32-ia32-msvc@2.6.2":
- version "2.6.2"
- resolved "https://registry.yarnpkg.com/@resvg/resvg-js-win32-ia32-msvc/-/resvg-js-win32-ia32-msvc-2.6.2.tgz#7cdda1ce29ef7209e28191d917fa5bef0624a4ad"
- integrity sha512-har4aPAlvjnLcil40AC77YDIk6loMawuJwFINEM7n0pZviwMkMvjb2W5ZirsNOZY4aDbo5tLx0wNMREp5Brk+w==
-
-"@resvg/resvg-js-win32-x64-msvc@2.6.2":
- version "2.6.2"
- resolved "https://registry.yarnpkg.com/@resvg/resvg-js-win32-x64-msvc/-/resvg-js-win32-x64-msvc-2.6.2.tgz#cb0ad04525d65f3def4c8d346157a57976d5b388"
- integrity sha512-ZXtYhtUr5SSaBrUDq7DiyjOFJqBVL/dOBN7N/qmi/pO0IgiWW/f/ue3nbvu9joWE5aAKDoIzy/CxsY0suwGosQ==
-
-"@resvg/resvg-js@^2.6.2":
- version "2.6.2"
- resolved "https://registry.yarnpkg.com/@resvg/resvg-js/-/resvg-js-2.6.2.tgz#3e92a907d88d879256c585347c5b21a7f3bb5b46"
- integrity sha512-xBaJish5OeGmniDj9cW5PRa/PtmuVU3ziqrbr5xJj901ZDN4TosrVaNZpEiLZAxdfnhAe7uQ7QFWfjPe9d9K2Q==
- optionalDependencies:
- "@resvg/resvg-js-android-arm-eabi" "2.6.2"
- "@resvg/resvg-js-android-arm64" "2.6.2"
- "@resvg/resvg-js-darwin-arm64" "2.6.2"
- "@resvg/resvg-js-darwin-x64" "2.6.2"
- "@resvg/resvg-js-linux-arm-gnueabihf" "2.6.2"
- "@resvg/resvg-js-linux-arm64-gnu" "2.6.2"
- "@resvg/resvg-js-linux-arm64-musl" "2.6.2"
- "@resvg/resvg-js-linux-x64-gnu" "2.6.2"
- "@resvg/resvg-js-linux-x64-musl" "2.6.2"
- "@resvg/resvg-js-win32-arm64-msvc" "2.6.2"
- "@resvg/resvg-js-win32-ia32-msvc" "2.6.2"
- "@resvg/resvg-js-win32-x64-msvc" "2.6.2"
-
"@rtsao/scc@^1.1.0":
version "1.1.0"
resolved "https://registry.yarnpkg.com/@rtsao/scc/-/scc-1.1.0.tgz#927dd2fae9bc3361403ac2c7a00c32ddce9ad7e8"
@@ -3510,14 +3432,6 @@
resolved "https://registry.yarnpkg.com/@segment/isodate/-/isodate-1.0.3.tgz#f44e8202d5edd277ce822785239474b2c9411d4a"
integrity sha512-BtanDuvJqnACFkeeYje7pWULVv8RgZaqKHWwGFnL/g/TH/CcZjkIVTfGDp/MAxmilYHUkrX70SqwnYSTNEaN7A==
-"@shuding/opentype.js@1.4.0-beta.0":
- version "1.4.0-beta.0"
- resolved "https://registry.yarnpkg.com/@shuding/opentype.js/-/opentype.js-1.4.0-beta.0.tgz#5d1e7e9e056f546aad41df1c5043f8f85d39e24b"
- integrity sha512-3NgmNyH3l/Hv6EvsWJbsvpcpUba6R8IREQ83nH83cyakCw7uM1arZKNfHwv1Wz6jgqrF/j4x5ELvR6PnK9nTcA==
- dependencies:
- fflate "^0.7.3"
- string.prototype.codepointat "^0.2.1"
-
"@sideway/address@^4.1.5":
version "4.1.5"
resolved "https://registry.yarnpkg.com/@sideway/address/-/address-4.1.5.tgz#4bc149a0076623ced99ca8208ba780d65a99b9d5"
@@ -5304,11 +5218,6 @@ base64-arraybuffer@^1.0.2:
resolved "https://registry.yarnpkg.com/base64-arraybuffer/-/base64-arraybuffer-1.0.2.tgz#1c37589a7c4b0746e34bd1feb951da2df01c1bdc"
integrity sha512-I3yl4r9QB5ZRY3XuJVEPfc2XhZO6YweFPI+UovAzn+8/hb3oJ6lnysaFcjVpkCPfVWFUDvoZ8kmVDP7WyRtYtQ==
-base64-js@0.0.8:
- version "0.0.8"
- resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-0.0.8.tgz#1101e9544f4a76b1bc3b26d452ca96d7a35e7978"
- integrity sha512-3XSA2cR/h/73EzlXXdU6YNycmYI7+kicTxks4eJg2g39biHR84slg2+des+p7iHYhbRg/udIS4TD53WabcOUkw==
-
baseline-browser-mapping@^2.8.25:
version "2.8.31"
resolved "https://registry.yarnpkg.com/baseline-browser-mapping/-/baseline-browser-mapping-2.8.31.tgz#16c0f1814638257932e0486dbfdbb3348d0a5710"
@@ -5532,11 +5441,6 @@ camelcase@^7.0.1:
resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-7.0.1.tgz#f02e50af9fd7782bc8b88a3558c32fd3a388f048"
integrity sha512-xlx1yCK2Oc1APsPXDL2LdlNP6+uu8OCDdhOBSVT279M/S+y75O30C2VuD8T2ogdePBBl7PfPF4504tnLgX3zfw==
-camelize@^1.0.0:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/camelize/-/camelize-1.0.1.tgz#89b7e16884056331a35d6b5ad064332c91daa6c3"
- integrity sha512-dU+Tx2fsypxTgtLoE36npi3UqcjSSMNYfkqgmoEhtZrraP5VWq0K7FkWVTYa8eMPtnU/G2txVsfdCJTn9uzpuQ==
-
caniuse-api@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/caniuse-api/-/caniuse-api-3.0.0.tgz#5e4d90e2274961d46291997df599e3ed008ee4c0"
@@ -5757,7 +5661,7 @@ color-convert@^2.0.1:
dependencies:
color-name "~1.1.4"
-color-name@^1.0.0, color-name@^1.1.4, color-name@~1.1.4:
+color-name@^1.0.0, color-name@~1.1.4:
version "1.1.4"
resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2"
integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==
@@ -6063,31 +5967,11 @@ crypto-random-string@^4.0.0:
dependencies:
type-fest "^1.0.1"
-css-background-parser@^0.1.0:
- version "0.1.0"
- resolved "https://registry.yarnpkg.com/css-background-parser/-/css-background-parser-0.1.0.tgz#48a17f7fe6d4d4f1bca3177ddf16c5617950741b"
- integrity sha512-2EZLisiZQ+7m4wwur/qiYJRniHX4K5Tc9w93MT3AS0WS1u5kaZ4FKXlOTBhOjc+CgEgPiGY+fX1yWD8UwpEqUA==
-
-css-box-shadow@1.0.0-3:
- version "1.0.0-3"
- resolved "https://registry.yarnpkg.com/css-box-shadow/-/css-box-shadow-1.0.0-3.tgz#9eaeb7140947bf5d649fc49a19e4bbaa5f602713"
- integrity sha512-9jaqR6e7Ohds+aWwmhe6wILJ99xYQbfmK9QQB9CcMjDbTxPZjwEmUQpU91OG05Xgm8BahT5fW+svbsQGjS/zPg==
-
-css-color-keywords@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/css-color-keywords/-/css-color-keywords-1.0.0.tgz#fea2616dc676b2962686b3af8dbdbe180b244e05"
- integrity sha512-FyyrDHZKEjXDpNJYvVsV960FiqQyXc/LlYmsxl2BcdMb2WPx0OGRVgTg55rPSyLSNMqP52R9r8geSp7apN3Ofg==
-
css-declaration-sorter@^7.2.0:
version "7.3.0"
resolved "https://registry.yarnpkg.com/css-declaration-sorter/-/css-declaration-sorter-7.3.0.tgz#edc45c36bcdfea0788b1d4452829f142ef1c4a4a"
integrity sha512-LQF6N/3vkAMYF4xoHLJfG718HRJh34Z8BnNhd6bosOMIVjMlhuZK5++oZa3uYAgrI5+7x2o27gUqTR2U/KjUOQ==
-css-gradient-parser@^0.0.16:
- version "0.0.16"
- resolved "https://registry.yarnpkg.com/css-gradient-parser/-/css-gradient-parser-0.0.16.tgz#5735da0822aef39da9b1960b314792ab542d9bb5"
- integrity sha512-3O5QdqgFRUbXvK1x5INf1YkBz1UKSWqrd63vWsum8MNHDBYD5urm3QtxZbKU259OrEXNM26lP/MPY3d1IGkBgA==
-
css-line-break@^2.1.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/css-line-break/-/css-line-break-2.1.0.tgz#bfef660dfa6f5397ea54116bb3cb4873edbc4fa0"
@@ -6143,15 +6027,6 @@ css-select@^5.1.0:
domutils "^3.0.1"
nth-check "^2.0.1"
-css-to-react-native@^3.0.0:
- version "3.2.0"
- resolved "https://registry.yarnpkg.com/css-to-react-native/-/css-to-react-native-3.2.0.tgz#cdd8099f71024e149e4f6fe17a7d46ecd55f1e32"
- integrity sha512-e8RKaLXMOFii+02mOlqwjbD00KSEKqblnpO9e++1aXS1fPQOpS1YoqdVHBqPjHNoxeF2mimzVqawm2KCbEdtHQ==
- dependencies:
- camelize "^1.0.0"
- css-color-keywords "^1.0.0"
- postcss-value-parser "^4.0.2"
-
css-tree@^1.1.2, css-tree@^1.1.3:
version "1.1.3"
resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-1.1.3.tgz#eb4870fb6fd7707327ec95c2ff2ab09b5e8db91d"
@@ -6985,11 +6860,6 @@ elkjs@^0.9.0:
resolved "https://registry.yarnpkg.com/elkjs/-/elkjs-0.9.3.tgz#16711f8ceb09f1b12b99e971b138a8384a529161"
integrity sha512-f/ZeWvW/BCXbhGEf1Ujp29EASo/lk1FDnETgNKwJrsVvGZhUWCZyg3xLJjAsxfOmt8KjswHmI5EwCQcPMpOYhQ==
-emoji-regex@^10.2.1:
- version "10.6.0"
- resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-10.6.0.tgz#bf3d6e8f7f8fd22a65d9703475bc0147357a6b0d"
- integrity sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==
-
emoji-regex@^8.0.0:
version "8.0.0"
resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37"
@@ -7924,11 +7794,6 @@ feed@^4.2.2:
dependencies:
xml-js "^1.6.11"
-fflate@^0.7.3:
- version "0.7.4"
- resolved "https://registry.yarnpkg.com/fflate/-/fflate-0.7.4.tgz#61587e5d958fdabb5a9368a302c25363f4f69f50"
- integrity sha512-5u2V/CDW15QM1XbbgS+0DfPxVB+jUKhWEKuuFuHncbk3tEEqzmoXL+2KyOFuKGqOnmdIy0/davWF1CkuwtibCw==
-
fflate@^0.8.1:
version "0.8.2"
resolved "https://registry.yarnpkg.com/fflate/-/fflate-0.8.2.tgz#fc8631f5347812ad6028bbe4a2308b2792aa1dea"
@@ -8571,11 +8436,6 @@ hermes-parser@^0.25.1:
dependencies:
hermes-estree "0.25.1"
-hex-rgb@^4.1.0:
- version "4.3.0"
- resolved "https://registry.yarnpkg.com/hex-rgb/-/hex-rgb-4.3.0.tgz#af5e974e83bb2fefe44d55182b004ec818c07776"
- integrity sha512-Ox1pJVrDCyGHMG9CFg1tmrRUMRPRsAWYc/PinY0XzJU4K7y7vjNoLKIQ7BR5UJMCxNN8EM1MNDmHWA/B3aZUuw==
-
history@^4.9.0:
version "4.10.1"
resolved "https://registry.yarnpkg.com/history/-/history-4.10.1.tgz#33371a65e3a83b267434e2b3f3b1b4c58aad4cf3"
@@ -9635,14 +9495,6 @@ lilconfig@^3.0.0, lilconfig@^3.1.1, lilconfig@^3.1.3:
resolved "https://registry.yarnpkg.com/lilconfig/-/lilconfig-3.1.3.tgz#a1bcfd6257f9585bf5ae14ceeebb7b559025e4c4"
integrity sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==
-linebreak@^1.1.0:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/linebreak/-/linebreak-1.1.0.tgz#831cf378d98bced381d8ab118f852bd50d81e46b"
- integrity sha512-MHp03UImeVhB7XZtjd0E4n6+3xr5Dq/9xI/5FptGk5FrbDR3zagPa2DS6U8ks/3HjbKWG9Q1M2ufOzxV2qLYSQ==
- dependencies:
- base64-js "0.0.8"
- unicode-trie "^2.0.0"
-
lines-and-columns@^1.1.6:
version "1.2.4"
resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632"
@@ -11344,11 +11196,6 @@ package-json@^8.1.0:
registry-url "^6.0.0"
semver "^7.3.7"
-pako@^0.2.5:
- version "0.2.9"
- resolved "https://registry.yarnpkg.com/pako/-/pako-0.2.9.tgz#f3f7522f4ef782348da8161bad9ecfd51bf83a75"
- integrity sha512-NUcwaKxUxWrZLpDG+z/xZaCgQITkA/Dv4V/T6bw7VON6l1Xz/VnrBqrYjZQ12TamKHzITTfOEIYUj48y2KXImA==
-
param-case@^3.0.4:
version "3.0.4"
resolved "https://registry.yarnpkg.com/param-case/-/param-case-3.0.4.tgz#7d17fe4aa12bde34d4a77d91acfb6219caad01c5"
@@ -11364,14 +11211,6 @@ parent-module@^1.0.0:
dependencies:
callsites "^3.0.0"
-parse-css-color@^0.2.1:
- version "0.2.1"
- resolved "https://registry.yarnpkg.com/parse-css-color/-/parse-css-color-0.2.1.tgz#b687a583f2e42e66ffdfce80a570706966e807c9"
- integrity sha512-bwS/GGIFV3b6KS4uwpzCFj4w297Yl3uqnSgIPsoQkx7GMLROXfMnWvxfNkL0oh8HVhZA4hvJoEoEIqonfJ3BWg==
- dependencies:
- color-name "^1.1.4"
- hex-rgb "^4.1.0"
-
parse-entities@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/parse-entities/-/parse-entities-2.0.0.tgz#53c6eb5b9314a1f4ec99fa0fdf7ce01ecda0cbe8"
@@ -11913,7 +11752,7 @@ postcss-unique-selectors@^6.0.4:
dependencies:
postcss-selector-parser "^6.0.16"
-postcss-value-parser@^4.0.0, postcss-value-parser@^4.0.2, postcss-value-parser@^4.1.0, postcss-value-parser@^4.2.0:
+postcss-value-parser@^4.0.0, postcss-value-parser@^4.1.0, postcss-value-parser@^4.2.0:
version "4.2.0"
resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz#723c09920836ba6d3e5af019f92bc0971c02e514"
integrity sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==
@@ -12909,23 +12748,6 @@ safe-regex-test@^1.0.3, safe-regex-test@^1.1.0:
resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a"
integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==
-satori@^0.12.2:
- version "0.12.2"
- resolved "https://registry.yarnpkg.com/satori/-/satori-0.12.2.tgz#b0b06ed5eed3cd1b9140777364ba6bd1cb32c37c"
- integrity sha512-3C/laIeE6UUe9A+iQ0A48ywPVCCMKCNSTU5Os101Vhgsjd3AAxGNjyq0uAA8kulMPK5n0csn8JlxPN9riXEjLA==
- dependencies:
- "@shuding/opentype.js" "1.4.0-beta.0"
- css-background-parser "^0.1.0"
- css-box-shadow "1.0.0-3"
- css-gradient-parser "^0.0.16"
- css-to-react-native "^3.0.0"
- emoji-regex "^10.2.1"
- escape-html "^1.0.3"
- linebreak "^1.1.0"
- parse-css-color "^0.2.1"
- postcss-value-parser "^4.2.0"
- yoga-wasm-web "^0.3.3"
-
sax@^1.2.4:
version "1.4.3"
resolved "https://registry.yarnpkg.com/sax/-/sax-1.4.3.tgz#fcebae3b756cdc8428321805f4b70f16ec0ab5db"
@@ -13447,11 +13269,6 @@ string-width@^5.0.1, string-width@^5.1.2:
emoji-regex "^9.2.2"
strip-ansi "^7.0.1"
-string.prototype.codepointat@^0.2.1:
- version "0.2.1"
- resolved "https://registry.yarnpkg.com/string.prototype.codepointat/-/string.prototype.codepointat-0.2.1.tgz#004ad44c8afc727527b108cd462b4d971cd469bc"
- integrity sha512-2cBVCj6I4IOvEnjgO/hWqXjqBGsY+zwPmHl12Srk9IXSZ56Jwwmy+66XO5Iut/oQVR7t5ihYdLB0GMa4alEUcg==
-
string.prototype.includes@^2.0.1:
version "2.0.1"
resolved "https://registry.yarnpkg.com/string.prototype.includes/-/string.prototype.includes-2.0.1.tgz#eceef21283640761a81dbe16d6c7171a4edf7d92"
@@ -13849,11 +13666,6 @@ thunky@^1.0.2:
resolved "https://registry.yarnpkg.com/thunky/-/thunky-1.1.0.tgz#5abaf714a9405db0504732bbccd2cedd9ef9537d"
integrity sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==
-tiny-inflate@^1.0.0:
- version "1.0.3"
- resolved "https://registry.yarnpkg.com/tiny-inflate/-/tiny-inflate-1.0.3.tgz#122715494913a1805166aaf7c93467933eea26c4"
- integrity sha512-pkY1fj1cKHb2seWDy0B16HeWyczlJA9/WW3u3c4z/NiWDsO3DOU5D7nhTLE9CF0yXv/QZFY7sEJmj24dK+Rrqw==
-
tiny-invariant@^1.0.2:
version "1.3.3"
resolved "https://registry.yarnpkg.com/tiny-invariant/-/tiny-invariant-1.3.3.tgz#46680b7a873a0d5d10005995eb90a70d74d60127"
@@ -14223,14 +14035,6 @@ unicode-property-aliases-ecmascript@^2.0.0:
resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.2.0.tgz#301d4f8a43d2b75c97adfad87c9dd5350c9475d1"
integrity sha512-hpbDzxUY9BFwX+UeBnxv3Sh1q7HFxj48DTmXchNgRa46lO8uj3/1iEn3MiNUYTg1g9ctIqXCCERn8gYZhHC5lQ==
-unicode-trie@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/unicode-trie/-/unicode-trie-2.0.0.tgz#8fd8845696e2e14a8b67d78fa9e0dd2cad62fec8"
- integrity sha512-x7bc76x0bm4prf1VLg79uhAzKw8DVboClSN5VxJuQ+LKDOVEW9CdH+VY7SP+vX7xCYQqzzgQpFqz15zeLvAtZQ==
- dependencies:
- pako "^0.2.5"
- tiny-inflate "^1.0.0"
-
unified@^10.0.0:
version "10.1.2"
resolved "https://registry.yarnpkg.com/unified/-/unified-10.1.2.tgz#b1d64e55dafe1f0b98bb6c719881103ecf6c86df"
@@ -14934,11 +14738,6 @@ yocto-queue@^1.0.0:
resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-1.2.2.tgz#3e09c95d3f1aa89a58c114c99223edf639152c00"
integrity sha512-4LCcse/U2MHZ63HAJVE+v71o7yOdIe4cZ70Wpf8D/IyjDKYQLV5GD46B+hSTjJsvV5PztjvHoU580EftxjDZFQ==
-yoga-wasm-web@^0.3.3:
- version "0.3.3"
- resolved "https://registry.yarnpkg.com/yoga-wasm-web/-/yoga-wasm-web-0.3.3.tgz#eb8e9fcb18e5e651994732f19a220cb885d932ba"
- integrity sha512-N+d4UJSJbt/R3wqY7Coqs5pcV0aUj2j9IaQ3rNj9bVCLld8tTGKRa2USARjnvZJWVx1NDmQev8EknoczaOQDOA==
-
zod-to-json-schema@3.24.6:
version "3.24.6"
resolved "https://registry.yarnpkg.com/zod-to-json-schema/-/zod-to-json-schema-3.24.6.tgz#5920f020c4d2647edfbb954fa036082b92c9e12d"