diff --git a/.gitignore b/.gitignore
index e1e00a8..ce27564 100644
--- a/.gitignore
+++ b/.gitignore
@@ -4,4 +4,6 @@ dist/
.astro
.claude/worktrees
src/docs-site/public/sample-report.html
-.DS_Store
\ No newline at end of file
+.DS_Store
+**/.DS_Store
+**/.netlify/
diff --git a/package-lock.json b/package-lock.json
index 2773931..51be852 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -7,6 +7,7 @@
"": {
"name": "@netlify/axis",
"version": "1.15.4",
+ "license": "MIT",
"workspaces": [
"src/docs-site"
],
@@ -118,6 +119,118 @@
"node": ">=22.12.0"
}
},
+ "node_modules/@astrojs/react": {
+ "version": "5.0.7",
+ "resolved": "https://registry.npmjs.org/@astrojs/react/-/react-5.0.7.tgz",
+ "integrity": "sha512-N9cCoxvnLWaP+AK1Fv4e5Mc7ktnVTpSo2nWLwvD9Ohr1dJKygwrTSm9yatqoahgb1A5Kwjg/rT2shRiIVdn3aw==",
+ "license": "MIT",
+ "dependencies": {
+ "@astrojs/internal-helpers": "0.10.0",
+ "@vitejs/plugin-react": "^5.2.0",
+ "devalue": "^5.8.1",
+ "ultrahtml": "^1.6.0",
+ "vite": "^7.3.2"
+ },
+ "engines": {
+ "node": ">=22.12.0"
+ },
+ "peerDependencies": {
+ "@types/react": "^17.0.50 || ^18.0.21 || ^19.0.0",
+ "@types/react-dom": "^17.0.17 || ^18.0.6 || ^19.0.0",
+ "react": "^17.0.2 || ^18.0.0 || ^19.0.0",
+ "react-dom": "^17.0.2 || ^18.0.0 || ^19.0.0"
+ }
+ },
+ "node_modules/@astrojs/react/node_modules/@astrojs/internal-helpers": {
+ "version": "0.10.0",
+ "resolved": "https://registry.npmjs.org/@astrojs/internal-helpers/-/internal-helpers-0.10.0.tgz",
+ "integrity": "sha512-Ry2R3VPeIN4uPCSA4xQc+e+vsJXkalKpEbDc07hV+a/o5Bs2N/s/uDcPJH/05L19DKh9tAy7e6JM3YZ6Cxfezw==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/hast": "^3.0.4",
+ "@types/mdast": "^4.0.4",
+ "js-yaml": "^4.1.1",
+ "picomatch": "^4.0.4",
+ "retext-smartypants": "^6.2.0",
+ "shiki": "^4.0.2",
+ "smol-toml": "^1.6.0",
+ "unified": "^11.0.5"
+ }
+ },
+ "node_modules/@astrojs/react/node_modules/vite": {
+ "version": "7.3.5",
+ "resolved": "https://registry.npmjs.org/vite/-/vite-7.3.5.tgz",
+ "integrity": "sha512-KuOaNhcnGFN2zIPGA7wRmzF+lJA1sea7rHq17aiJ++9lzY1WWG6Jpwqwe1KNbRVPIqHmr8GLYx7jbrQcN/7/ww==",
+ "license": "MIT",
+ "dependencies": {
+ "esbuild": "^0.27.0",
+ "fdir": "^6.5.0",
+ "picomatch": "^4.0.3",
+ "postcss": "^8.5.6",
+ "rollup": "^4.43.0",
+ "tinyglobby": "^0.2.15"
+ },
+ "bin": {
+ "vite": "bin/vite.js"
+ },
+ "engines": {
+ "node": "^20.19.0 || >=22.12.0"
+ },
+ "funding": {
+ "url": "https://github.com/vitejs/vite?sponsor=1"
+ },
+ "optionalDependencies": {
+ "fsevents": "~2.3.3"
+ },
+ "peerDependencies": {
+ "@types/node": "^20.19.0 || >=22.12.0",
+ "jiti": ">=1.21.0",
+ "less": "^4.0.0",
+ "lightningcss": "^1.21.0",
+ "sass": "^1.70.0",
+ "sass-embedded": "^1.70.0",
+ "stylus": ">=0.54.8",
+ "sugarss": "^5.0.0",
+ "terser": "^5.16.0",
+ "tsx": "^4.8.1",
+ "yaml": "^2.4.2"
+ },
+ "peerDependenciesMeta": {
+ "@types/node": {
+ "optional": true
+ },
+ "jiti": {
+ "optional": true
+ },
+ "less": {
+ "optional": true
+ },
+ "lightningcss": {
+ "optional": true
+ },
+ "sass": {
+ "optional": true
+ },
+ "sass-embedded": {
+ "optional": true
+ },
+ "stylus": {
+ "optional": true
+ },
+ "sugarss": {
+ "optional": true
+ },
+ "terser": {
+ "optional": true
+ },
+ "tsx": {
+ "optional": true
+ },
+ "yaml": {
+ "optional": true
+ }
+ }
+ },
"node_modules/@astrojs/sitemap": {
"version": "3.7.2",
"resolved": "https://registry.npmjs.org/@astrojs/sitemap/-/sitemap-3.7.2.tgz",
@@ -149,7 +262,6 @@
"version": "7.29.0",
"resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.29.0.tgz",
"integrity": "sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw==",
- "dev": true,
"dependencies": {
"@babel/helper-validator-identifier": "^7.28.5",
"js-tokens": "^4.0.0",
@@ -163,7 +275,6 @@
"version": "7.29.3",
"resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.29.3.tgz",
"integrity": "sha512-LIVqM46zQWZhj17qA8wb4nW/ixr2y1Nw+r1etiAWgRM6U1IqP+LNhL1yg440jYZR72jCWcWbLWzIosH+uP1fqg==",
- "dev": true,
"engines": {
"node": ">=6.9.0"
}
@@ -172,7 +283,6 @@
"version": "7.29.0",
"resolved": "https://registry.npmjs.org/@babel/core/-/core-7.29.0.tgz",
"integrity": "sha512-CGOfOJqWjg2qW/Mb6zNsDm+u5vFQ8DxXfbM09z69p5Z6+mE1ikP2jUXw+j42Pf1XTYED2Rni5f95npYeuwMDQA==",
- "dev": true,
"dependencies": {
"@babel/code-frame": "^7.29.0",
"@babel/generator": "^7.29.0",
@@ -202,7 +312,6 @@
"version": "6.3.1",
"resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
"integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
- "dev": true,
"bin": {
"semver": "bin/semver.js"
}
@@ -211,7 +320,6 @@
"version": "7.29.1",
"resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.29.1.tgz",
"integrity": "sha512-qsaF+9Qcm2Qv8SRIMMscAvG4O3lJ0F1GuMo5HR/Bp02LopNgnZBC/EkbevHFeGs4ls/oPz9v+Bsmzbkbe+0dUw==",
- "dev": true,
"dependencies": {
"@babel/parser": "^7.29.0",
"@babel/types": "^7.29.0",
@@ -227,7 +335,6 @@
"version": "7.28.6",
"resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.28.6.tgz",
"integrity": "sha512-JYtls3hqi15fcx5GaSNL7SCTJ2MNmjrkHXg4FSpOA/grxK8KwyZ5bubHsCq8FXCkua6xhuaaBit+3b7+VZRfcA==",
- "dev": true,
"dependencies": {
"@babel/compat-data": "^7.28.6",
"@babel/helper-validator-option": "^7.27.1",
@@ -243,7 +350,6 @@
"version": "5.1.1",
"resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz",
"integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==",
- "dev": true,
"dependencies": {
"yallist": "^3.0.2"
}
@@ -252,7 +358,6 @@
"version": "6.3.1",
"resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
"integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
- "dev": true,
"bin": {
"semver": "bin/semver.js"
}
@@ -261,7 +366,6 @@
"version": "7.28.0",
"resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.28.0.tgz",
"integrity": "sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==",
- "dev": true,
"engines": {
"node": ">=6.9.0"
}
@@ -270,7 +374,6 @@
"version": "7.28.6",
"resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.28.6.tgz",
"integrity": "sha512-l5XkZK7r7wa9LucGw9LwZyyCUscb4x37JWTPz7swwFE/0FMQAGpiWUZn8u9DzkSBWEcK25jmvubfpw2dnAMdbw==",
- "dev": true,
"dependencies": {
"@babel/traverse": "^7.28.6",
"@babel/types": "^7.28.6"
@@ -283,7 +386,6 @@
"version": "7.28.6",
"resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.28.6.tgz",
"integrity": "sha512-67oXFAYr2cDLDVGLXTEABjdBJZ6drElUSI7WKp70NrpyISso3plG9SAGEF6y7zbha/wOzUByWWTJvEDVNIUGcA==",
- "dev": true,
"dependencies": {
"@babel/helper-module-imports": "^7.28.6",
"@babel/helper-validator-identifier": "^7.28.5",
@@ -296,6 +398,15 @@
"@babel/core": "^7.0.0"
}
},
+ "node_modules/@babel/helper-plugin-utils": {
+ "version": "7.29.7",
+ "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.29.7.tgz",
+ "integrity": "sha512-G7sHYigPY17oO5SYWnfD/0MTBwVR781S/JI643e/JhUYgVgWE/61SoW3NH9KWUKyKq5LVh3npif99Wkt6j86Jw==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
"node_modules/@babel/helper-string-parser": {
"version": "7.27.1",
"resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz",
@@ -316,7 +427,6 @@
"version": "7.27.1",
"resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.27.1.tgz",
"integrity": "sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==",
- "dev": true,
"engines": {
"node": ">=6.9.0"
}
@@ -325,7 +435,6 @@
"version": "7.29.2",
"resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.29.2.tgz",
"integrity": "sha512-HoGuUs4sCZNezVEKdVcwqmZN8GoHirLUcLaYVNBK2J0DadGtdcqgr3BCbvH8+XUo4NGjNl3VOtSjEKNzqfFgKw==",
- "dev": true,
"dependencies": {
"@babel/template": "^7.28.6",
"@babel/types": "^7.29.0"
@@ -348,11 +457,40 @@
"node": ">=6.0.0"
}
},
+ "node_modules/@babel/plugin-transform-react-jsx-self": {
+ "version": "7.29.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.29.7.tgz",
+ "integrity": "sha512-TL0hMc9xzy86VD31nUiwzd5otRAcyEPcsegCxolO0PvcXuH1v0kECe/UIznYFihpkvU5wg/jk4v0TTEFfm53fw==",
+ "license": "MIT",
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.29.7"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-transform-react-jsx-source": {
+ "version": "7.29.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.29.7.tgz",
+ "integrity": "sha512-06IyK09H3wi4cGbhDBwp5gUGo0IKtnYa8tyTiephirPCK6fbobVGiXMMI5zLQ4aKEYP3wZ3ArU44o+8KMrSG/Q==",
+ "license": "MIT",
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.29.7"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
"node_modules/@babel/template": {
"version": "7.28.6",
"resolved": "https://registry.npmjs.org/@babel/template/-/template-7.28.6.tgz",
"integrity": "sha512-YA6Ma2KsCdGb+WC6UpBVFJGXL58MDA6oyONbjyF/+5sBgxY/dwkhLogbMT2GXXyU84/IhRw/2D1Os1B/giz+BQ==",
- "dev": true,
"dependencies": {
"@babel/code-frame": "^7.28.6",
"@babel/parser": "^7.28.6",
@@ -366,7 +504,6 @@
"version": "7.29.0",
"resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.29.0.tgz",
"integrity": "sha512-4HPiQr0X7+waHfyXPZpWPfWL/J7dcN1mx9gL6WdQVMbPnF3+ZhSMs8tCxN7oHddJE9fhNE7+lxdnlyemKfJRuA==",
- "dev": true,
"dependencies": {
"@babel/code-frame": "^7.29.0",
"@babel/generator": "^7.29.0",
@@ -1495,7 +1632,6 @@
"version": "0.3.13",
"resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz",
"integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==",
- "dev": true,
"dependencies": {
"@jridgewell/sourcemap-codec": "^1.5.0",
"@jridgewell/trace-mapping": "^0.3.24"
@@ -1505,7 +1641,6 @@
"version": "2.3.5",
"resolved": "https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz",
"integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==",
- "dev": true,
"dependencies": {
"@jridgewell/gen-mapping": "^0.3.5",
"@jridgewell/trace-mapping": "^0.3.24"
@@ -1515,7 +1650,6 @@
"version": "3.1.2",
"resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz",
"integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==",
- "dev": true,
"engines": {
"node": ">=6.0.0"
}
@@ -1529,7 +1663,6 @@
"version": "0.3.31",
"resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz",
"integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==",
- "dev": true,
"dependencies": {
"@jridgewell/resolve-uri": "^3.1.0",
"@jridgewell/sourcemap-codec": "^1.4.14"
@@ -1544,6 +1677,12 @@
"resolved": "https://registry.npmjs.org/@oslojs/encoding/-/encoding-1.1.0.tgz",
"integrity": "sha512-70wQhgYmndg4GCPxPPxPGevRKqTIJ2Nh4OkiMWmDAVYsTQ+Ta7Sq+rPevXyXGdzr30/qZBnyOalCszoMxlyldQ=="
},
+ "node_modules/@rolldown/pluginutils": {
+ "version": "1.0.0-rc.3",
+ "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.0-rc.3.tgz",
+ "integrity": "sha512-eybk3TjzzzV97Dlj5c+XrBFW57eTNhzod66y9HrBlzJ6NsCrWCp/2kaPS3K9wJmurBC0Tdw4yPjXKZqlznim3Q==",
+ "license": "MIT"
+ },
"node_modules/@rollup/pluginutils": {
"version": "5.3.0",
"resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.3.0.tgz",
@@ -1869,7 +2008,6 @@
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/@shikijs/core/-/core-4.1.0.tgz",
"integrity": "sha512-jLJtSJeuFffqX6/inRE1zqU5aFv2hrszvYgq3OjbAgFRZiWv7abKMDdQzYxuSDfmUPQozZvI/kuy6VMTvnvqTQ==",
- "dev": true,
"dependencies": {
"@shikijs/primitive": "4.1.0",
"@shikijs/types": "4.1.0",
@@ -1885,7 +2023,6 @@
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/@shikijs/engine-javascript/-/engine-javascript-4.1.0.tgz",
"integrity": "sha512-YquhawCUgaBfhsS72e2Y/dI59gCBNPHu3fEO/tvLaXrTssxZrY5ddjtNLTwndrMgPo8b3IscE+xoICDzpTmlFQ==",
- "dev": true,
"dependencies": {
"@shikijs/types": "4.1.0",
"@shikijs/vscode-textmate": "^10.0.2",
@@ -1899,7 +2036,6 @@
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/@shikijs/engine-oniguruma/-/engine-oniguruma-4.1.0.tgz",
"integrity": "sha512-axLpjVs45YBvvINa+dJF+NPW+KtFkNXsFr4SDw2BMj9GdeMnGxVB9PQb2xXlJYovslt/nz6giedAyOANkfc7hg==",
- "dev": true,
"dependencies": {
"@shikijs/types": "4.1.0",
"@shikijs/vscode-textmate": "^10.0.2"
@@ -1912,7 +2048,6 @@
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/@shikijs/langs/-/langs-4.1.0.tgz",
"integrity": "sha512-nwOMruEkbgdZfQ/b8CgpNBVOpvG1k0N5tbmgiFeqsan401+x3ILqlzZJowSla4Agmq4hG2Uf2wh5jLTEhR8VSg==",
- "dev": true,
"dependencies": {
"@shikijs/types": "4.1.0"
},
@@ -1924,7 +2059,6 @@
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/@shikijs/primitive/-/primitive-4.1.0.tgz",
"integrity": "sha512-zx2/2Uwj2q9X3KSyYREEhXO23xBw5WUhP4orK2lE4r+t9JGITmEe0JH+wPmJhqHpOT2bRRs6lAL945+LDvOAGw==",
- "dev": true,
"dependencies": {
"@shikijs/types": "4.1.0",
"@shikijs/vscode-textmate": "^10.0.2",
@@ -1938,7 +2072,6 @@
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/@shikijs/themes/-/themes-4.1.0.tgz",
"integrity": "sha512-emCcTnUM7yO2wltYbaxm+yLvcCI4+h8XBKc4KmJ7EZUXoSGjcCHifkI//R4OFit9ewpg7H2/9tjOuXrT2v/Knw==",
- "dev": true,
"dependencies": {
"@shikijs/types": "4.1.0"
},
@@ -1950,7 +2083,6 @@
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/@shikijs/types/-/types-4.1.0.tgz",
"integrity": "sha512-3EQWX54fMpniOrDblzAhiwiJwpiTMW6+B9DWyUd9ska483tbayFYuw47UxwuPknI31bKnySfVQ/QW+jFL4rFdA==",
- "dev": true,
"dependencies": {
"@shikijs/vscode-textmate": "^10.0.2",
"@types/hast": "^3.0.4"
@@ -1964,6 +2096,47 @@
"resolved": "https://registry.npmjs.org/@shikijs/vscode-textmate/-/vscode-textmate-10.0.2.tgz",
"integrity": "sha512-83yeghZ2xxin3Nj8z1NMd/NCuca+gsYXswywDy5bHvwlWL8tpTQmzGeUuHd9FC3E/SBEMvzJRwWEOz5gGes9Qg=="
},
+ "node_modules/@types/babel__core": {
+ "version": "7.20.5",
+ "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz",
+ "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==",
+ "license": "MIT",
+ "dependencies": {
+ "@babel/parser": "^7.20.7",
+ "@babel/types": "^7.20.7",
+ "@types/babel__generator": "*",
+ "@types/babel__template": "*",
+ "@types/babel__traverse": "*"
+ }
+ },
+ "node_modules/@types/babel__generator": {
+ "version": "7.27.0",
+ "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.27.0.tgz",
+ "integrity": "sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg==",
+ "license": "MIT",
+ "dependencies": {
+ "@babel/types": "^7.0.0"
+ }
+ },
+ "node_modules/@types/babel__template": {
+ "version": "7.4.4",
+ "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz",
+ "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==",
+ "license": "MIT",
+ "dependencies": {
+ "@babel/parser": "^7.1.0",
+ "@babel/types": "^7.0.0"
+ }
+ },
+ "node_modules/@types/babel__traverse": {
+ "version": "7.28.0",
+ "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.28.0.tgz",
+ "integrity": "sha512-8PvcXf70gTDZBgt9ptxJ8elBeBjcLOAcOtoO/mPJjtji1+CdGbHgm77om1GrsPxsiE+uXIpNSK64UYaIwQXd4Q==",
+ "license": "MIT",
+ "dependencies": {
+ "@babel/types": "^7.28.2"
+ }
+ },
"node_modules/@types/debug": {
"version": "4.1.13",
"resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.13.tgz",
@@ -2026,14 +2199,23 @@
"integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ=="
},
"node_modules/@types/react": {
- "version": "19.2.15",
- "resolved": "https://registry.npmjs.org/@types/react/-/react-19.2.15.tgz",
- "integrity": "sha512-eRwcGNHve+E8qtEQSSRl6urh+rFop4v8gm6O8rGv25CodbvFdLjA1vVQ1KkiFE0w0UPOnb8tDiFKL5lp0rtY5Q==",
- "devOptional": true,
+ "version": "19.2.17",
+ "resolved": "https://registry.npmjs.org/@types/react/-/react-19.2.17.tgz",
+ "integrity": "sha512-MXfmqaVPEVgkBT/aY0aGCkRWWtByiYQXo3xdQ8r5RzuFrPiRn8Gar2tQdXSUQ2GKV3bkXckek89V8wQBY2Q/Aw==",
+ "license": "MIT",
"dependencies": {
"csstype": "^3.2.2"
}
},
+ "node_modules/@types/react-dom": {
+ "version": "19.2.3",
+ "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-19.2.3.tgz",
+ "integrity": "sha512-jp2L/eY6fn+KgVVQAOqYItbF0VY/YApe5Mz2F0aykSO8gx31bYCZyvSeYxCHKvzHG5eZjc+zyaS5BrBWya2+kQ==",
+ "license": "MIT",
+ "peerDependencies": {
+ "@types/react": "^19.2.0"
+ }
+ },
"node_modules/@types/sax": {
"version": "1.2.7",
"resolved": "https://registry.npmjs.org/@types/sax/-/sax-1.2.7.tgz",
@@ -2320,6 +2502,26 @@
"resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.3.1.tgz",
"integrity": "sha512-mUFwbeTqrVgDQxFveS+df2yfap6iuP20NAKAsBt5jDEoOTDew+zwLAOilHCeQJOVSvmgCX4ogqIrA0mnyr08yQ=="
},
+ "node_modules/@vitejs/plugin-react": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-5.2.0.tgz",
+ "integrity": "sha512-YmKkfhOAi3wsB1PhJq5Scj3GXMn3WvtQ/JC0xoopuHoXSdmtdStOpFrYaT1kie2YgFBcIe64ROzMYRjCrYOdYw==",
+ "license": "MIT",
+ "dependencies": {
+ "@babel/core": "^7.29.0",
+ "@babel/plugin-transform-react-jsx-self": "^7.27.1",
+ "@babel/plugin-transform-react-jsx-source": "^7.27.1",
+ "@rolldown/pluginutils": "1.0.0-rc.3",
+ "@types/babel__core": "^7.20.5",
+ "react-refresh": "^0.18.0"
+ },
+ "engines": {
+ "node": "^20.19.0 || >=22.12.0"
+ },
+ "peerDependencies": {
+ "vite": "^4.2.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0"
+ }
+ },
"node_modules/@vitest/expect": {
"version": "2.1.9",
"resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-2.1.9.tgz",
@@ -2978,7 +3180,6 @@
"version": "2.10.31",
"resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.10.31.tgz",
"integrity": "sha512-MujYO3eP72uvmSE0i4wltsodRfIpZATP3jvzRNRGGxgzId7aVocVJJV3nf01qnzzKFGxQVC9bpWxl5cjxTr/7Q==",
- "dev": true,
"bin": {
"baseline-browser-mapping": "dist/cli.cjs"
},
@@ -3112,7 +3313,6 @@
"version": "4.28.2",
"resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.2.tgz",
"integrity": "sha512-48xSriZYYg+8qXna9kwqjIVzuQxi+KYWp2+5nCYnYKPTr0LvD89Jqk2Or5ogxz0NUMfIjhh2lIUX/LyX9B4oIg==",
- "dev": true,
"funding": [
{
"type": "opencollective",
@@ -3222,7 +3422,6 @@
"version": "1.0.30001793",
"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001793.tgz",
"integrity": "sha512-iwSsYWaCOoh26cV8NwNRViHlrfUvYsHDfRVcbtmw0Kg6PJIZZXwMkj1442FYLBGkeUf1juAsU3DTfxW579mrPA==",
- "dev": true,
"funding": [
{
"type": "opencollective",
@@ -3456,8 +3655,7 @@
"node_modules/convert-source-map": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz",
- "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==",
- "dev": true
+ "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg=="
},
"node_modules/convert-to-spaces": {
"version": "2.0.1",
@@ -3589,8 +3787,7 @@
"node_modules/csstype": {
"version": "3.2.3",
"resolved": "https://registry.npmjs.org/csstype/-/csstype-3.2.3.tgz",
- "integrity": "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==",
- "devOptional": true
+ "integrity": "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ=="
},
"node_modules/data-view-buffer": {
"version": "1.0.2",
@@ -3889,8 +4086,7 @@
"node_modules/electron-to-chromium": {
"version": "1.5.360",
"resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.360.tgz",
- "integrity": "sha512-GkcBt6YYAw9SxFWn+xVar4cLVGlXVuswwtRLBozi2zp0GjXs4ZnOrqV4zbXzg35n7w81hCkyJNYicgXlVHAmBA==",
- "dev": true
+ "integrity": "sha512-GkcBt6YYAw9SxFWn+xVar4cLVGlXVuswwtRLBozi2zp0GjXs4ZnOrqV4zbXzg35n7w81hCkyJNYicgXlVHAmBA=="
},
"node_modules/emoji-regex": {
"version": "10.6.0",
@@ -4143,7 +4339,6 @@
"version": "3.2.0",
"resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz",
"integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==",
- "dev": true,
"engines": {
"node": ">=6"
}
@@ -4603,6 +4798,33 @@
"url": "https://github.com/sponsors/ljharb"
}
},
+ "node_modules/framer-motion": {
+ "version": "12.41.0",
+ "resolved": "https://registry.npmjs.org/framer-motion/-/framer-motion-12.41.0.tgz",
+ "integrity": "sha512-OHAMNiCEON1RDBlRGuulsN5AD8ptMjvk5QWfFmYmBLPZ3zFGIJe60kQucQQf4cez1OzQmjYBWDY+dYfISkUdqg==",
+ "license": "MIT",
+ "dependencies": {
+ "motion-dom": "^12.41.0",
+ "motion-utils": "^12.39.0",
+ "tslib": "^2.4.0"
+ },
+ "peerDependencies": {
+ "@emotion/is-prop-valid": "*",
+ "react": "^18.0.0 || ^19.0.0",
+ "react-dom": "^18.0.0 || ^19.0.0"
+ },
+ "peerDependenciesMeta": {
+ "@emotion/is-prop-valid": {
+ "optional": true
+ },
+ "react": {
+ "optional": true
+ },
+ "react-dom": {
+ "optional": true
+ }
+ }
+ },
"node_modules/fsevents": {
"version": "2.3.3",
"resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz",
@@ -4667,7 +4889,6 @@
"version": "1.0.0-beta.2",
"resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz",
"integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==",
- "dev": true,
"engines": {
"node": ">=6.9.0"
}
@@ -5759,8 +5980,7 @@
"node_modules/js-tokens": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
- "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==",
- "dev": true
+ "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ=="
},
"node_modules/js-yaml": {
"version": "4.1.1",
@@ -5777,7 +5997,6 @@
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz",
"integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==",
- "dev": true,
"bin": {
"jsesc": "bin/jsesc"
},
@@ -5807,7 +6026,6 @@
"version": "2.2.3",
"resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz",
"integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==",
- "dev": true,
"bin": {
"json5": "lib/cli.js"
},
@@ -7024,6 +7242,21 @@
"node": "*"
}
},
+ "node_modules/motion-dom": {
+ "version": "12.41.0",
+ "resolved": "https://registry.npmjs.org/motion-dom/-/motion-dom-12.41.0.tgz",
+ "integrity": "sha512-Lk3J39fOGg6xNr1KRZsN6usDyBf8aP7MEbUPez1VCughHt79OrP7VGqNrPyFL0riaT7WS8t9DRw1M3BHtM/xKw==",
+ "license": "MIT",
+ "dependencies": {
+ "motion-utils": "^12.39.0"
+ }
+ },
+ "node_modules/motion-utils": {
+ "version": "12.39.0",
+ "resolved": "https://registry.npmjs.org/motion-utils/-/motion-utils-12.39.0.tgz",
+ "integrity": "sha512-8nadJAJjTtqRkmRF36FoJTrywK9nnFmnPwnSMyxaOCU7GDjN9RTMJIxx9De8ErM+vpPhMccr/6fo5WciyQLnMQ==",
+ "license": "MIT"
+ },
"node_modules/mrmime": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/mrmime/-/mrmime-2.0.1.tgz",
@@ -7121,7 +7354,6 @@
"version": "2.0.45",
"resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.45.tgz",
"integrity": "sha512-iIbHXV9eBB2nB0wa7oTsrrXq+qQt+9SIlx9AX3T96YgobtEQfis5n6TJ6vV+3QP8DwdriEAcGhARaFCu37peBg==",
- "dev": true,
"engines": {
"node": ">=18"
}
@@ -7648,13 +7880,26 @@
"integrity": "sha512-b484I/7b8rDEdSDKckSSBA8knMpcdsXudlE/LNL639wFoHKwLbEkQFZHWEYwDC0wa0FKUcCY+GAF73Z7wxNVFA=="
},
"node_modules/react": {
- "version": "19.2.6",
- "resolved": "https://registry.npmjs.org/react/-/react-19.2.6.tgz",
- "integrity": "sha512-sfWGGfavi0xr8Pg0sVsyHMAOziVYKgPLNrS7ig+ivMNb3wbCBw3KxtflsGBAwD3gYQlE/AEZsTLgToRrSCjb0Q==",
+ "version": "19.2.7",
+ "resolved": "https://registry.npmjs.org/react/-/react-19.2.7.tgz",
+ "integrity": "sha512-HNe9WslTbXmFK8o8cmwgAeJFSBvt1bPdHCVKtaaV+WlAN36mpT4hcRpwbf3fY56ar2oIXzsBpOAiIRHAdY0OlQ==",
+ "license": "MIT",
"engines": {
"node": ">=0.10.0"
}
},
+ "node_modules/react-dom": {
+ "version": "19.2.7",
+ "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.2.7.tgz",
+ "integrity": "sha512-t0BRVXvbiE/o20Hfw669rLbMCDWtYZLvmJigy2f0MxsXF+71pxhR3xOkspmsO8h3ZlNzyibAmtCa3l4lYKk6gQ==",
+ "license": "MIT",
+ "dependencies": {
+ "scheduler": "^0.27.0"
+ },
+ "peerDependencies": {
+ "react": "^19.2.7"
+ }
+ },
"node_modules/react-is": {
"version": "16.13.1",
"resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz",
@@ -7675,6 +7920,15 @@
"react": "^19.2.0"
}
},
+ "node_modules/react-refresh": {
+ "version": "0.18.0",
+ "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.18.0.tgz",
+ "integrity": "sha512-QgT5//D3jfjJb6Gsjxv0Slpj23ip+HtOpnNgnb2S5zU3CB26G/IDPGoy4RJB42wzFE46DRsstbW6tKHoKbhAxw==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
"node_modules/readdirp": {
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/readdirp/-/readdirp-5.0.0.tgz",
@@ -8241,7 +8495,6 @@
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/shiki/-/shiki-4.1.0.tgz",
"integrity": "sha512-l/ABZPUR5v70jI10EzqfMS/I96vjSGv2y0ihUV+WYFzv0EfvW4s54m0Lg8wCrrL+2IkwBzFTuxkZjPf8b2NX9Q==",
- "dev": true,
"dependencies": {
"@shikijs/core": "4.1.0",
"@shikijs/engine-javascript": "4.1.0",
@@ -8826,9 +9079,7 @@
"node_modules/tslib": {
"version": "2.8.1",
"resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz",
- "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==",
- "dev": true,
- "optional": true
+ "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="
},
"node_modules/type-check": {
"version": "0.4.0",
@@ -9245,7 +9496,6 @@
"version": "1.2.3",
"resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.2.3.tgz",
"integrity": "sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==",
- "dev": true,
"funding": [
{
"type": "opencollective",
@@ -9323,7 +9573,6 @@
"version": "5.4.21",
"resolved": "https://registry.npmjs.org/vite/-/vite-5.4.21.tgz",
"integrity": "sha512-o5a9xKjbtuhY6Bi5S3+HvbRERmouabWbyUcpXXUA1u+GNUKoROi9byOJ8M0nHbHYHkYICiMlqxkg1KkYmm25Sw==",
- "devOptional": true,
"license": "MIT",
"dependencies": {
"esbuild": "^0.21.3",
@@ -9435,7 +9684,6 @@
"cpu": [
"ppc64"
],
- "dev": true,
"license": "MIT",
"optional": true,
"os": [
@@ -9452,7 +9700,6 @@
"cpu": [
"arm"
],
- "dev": true,
"license": "MIT",
"optional": true,
"os": [
@@ -9469,7 +9716,6 @@
"cpu": [
"arm64"
],
- "dev": true,
"license": "MIT",
"optional": true,
"os": [
@@ -9486,7 +9732,6 @@
"cpu": [
"x64"
],
- "dev": true,
"license": "MIT",
"optional": true,
"os": [
@@ -9503,7 +9748,6 @@
"cpu": [
"arm64"
],
- "dev": true,
"license": "MIT",
"optional": true,
"os": [
@@ -9520,7 +9764,6 @@
"cpu": [
"x64"
],
- "dev": true,
"license": "MIT",
"optional": true,
"os": [
@@ -9537,7 +9780,6 @@
"cpu": [
"arm64"
],
- "dev": true,
"license": "MIT",
"optional": true,
"os": [
@@ -9554,7 +9796,6 @@
"cpu": [
"x64"
],
- "dev": true,
"license": "MIT",
"optional": true,
"os": [
@@ -9571,7 +9812,6 @@
"cpu": [
"arm"
],
- "dev": true,
"license": "MIT",
"optional": true,
"os": [
@@ -9588,7 +9828,6 @@
"cpu": [
"arm64"
],
- "dev": true,
"license": "MIT",
"optional": true,
"os": [
@@ -9605,7 +9844,6 @@
"cpu": [
"ia32"
],
- "dev": true,
"license": "MIT",
"optional": true,
"os": [
@@ -9622,7 +9860,6 @@
"cpu": [
"loong64"
],
- "dev": true,
"license": "MIT",
"optional": true,
"os": [
@@ -9639,7 +9876,6 @@
"cpu": [
"mips64el"
],
- "dev": true,
"license": "MIT",
"optional": true,
"os": [
@@ -9656,7 +9892,6 @@
"cpu": [
"ppc64"
],
- "dev": true,
"license": "MIT",
"optional": true,
"os": [
@@ -9673,7 +9908,6 @@
"cpu": [
"riscv64"
],
- "dev": true,
"license": "MIT",
"optional": true,
"os": [
@@ -9690,7 +9924,6 @@
"cpu": [
"s390x"
],
- "dev": true,
"license": "MIT",
"optional": true,
"os": [
@@ -9707,7 +9940,6 @@
"cpu": [
"x64"
],
- "dev": true,
"license": "MIT",
"optional": true,
"os": [
@@ -9724,7 +9956,6 @@
"cpu": [
"x64"
],
- "dev": true,
"license": "MIT",
"optional": true,
"os": [
@@ -9741,7 +9972,6 @@
"cpu": [
"x64"
],
- "dev": true,
"license": "MIT",
"optional": true,
"os": [
@@ -9758,7 +9988,6 @@
"cpu": [
"x64"
],
- "dev": true,
"license": "MIT",
"optional": true,
"os": [
@@ -9775,7 +10004,6 @@
"cpu": [
"arm64"
],
- "dev": true,
"license": "MIT",
"optional": true,
"os": [
@@ -9792,7 +10020,6 @@
"cpu": [
"ia32"
],
- "dev": true,
"license": "MIT",
"optional": true,
"os": [
@@ -9809,7 +10036,6 @@
"cpu": [
"x64"
],
- "dev": true,
"license": "MIT",
"optional": true,
"os": [
@@ -9823,7 +10049,6 @@
"version": "0.21.5",
"resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.21.5.tgz",
"integrity": "sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==",
- "devOptional": true,
"hasInstallScript": true,
"license": "MIT",
"bin": {
@@ -10142,8 +10367,7 @@
"node_modules/yallist": {
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz",
- "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==",
- "dev": true
+ "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g=="
},
"node_modules/yaml": {
"version": "2.9.0",
@@ -10253,8 +10477,14 @@
"src/docs-site": {
"name": "@netlify/axis-docs",
"dependencies": {
+ "@astrojs/react": "^5.0.7",
"@astrojs/sitemap": "^3.7.2",
- "astro": "^5.7.10"
+ "@types/react": "^19.2.17",
+ "@types/react-dom": "^19.2.3",
+ "astro": "^5.7.10",
+ "framer-motion": "^12.40.0",
+ "react": "^19.2.7",
+ "react-dom": "^19.2.7"
}
},
"src/docs-site/node_modules/@astrojs/compiler": {
diff --git a/src/docs-site/astro.config.mjs b/src/docs-site/astro.config.mjs
index 4c477fe..cc7feac 100644
--- a/src/docs-site/astro.config.mjs
+++ b/src/docs-site/astro.config.mjs
@@ -1,8 +1,10 @@
import { defineConfig } from "astro/config";
import sitemap from "@astrojs/sitemap";
+import react from "@astrojs/react";
+
export default defineConfig({
site: "https://axis.run",
outDir: "../../dist/docs-site",
- integrations: [sitemap()],
-});
+ integrations: [sitemap(), react()],
+});
\ No newline at end of file
diff --git a/src/docs-site/package.json b/src/docs-site/package.json
index b739379..c3c8065 100644
--- a/src/docs-site/package.json
+++ b/src/docs-site/package.json
@@ -8,7 +8,13 @@
"preview": "astro preview"
},
"dependencies": {
+ "@astrojs/react": "^5.0.7",
"@astrojs/sitemap": "^3.7.2",
- "astro": "^5.7.10"
+ "@types/react": "^19.2.17",
+ "@types/react-dom": "^19.2.3",
+ "astro": "^5.7.10",
+ "framer-motion": "^12.40.0",
+ "react": "^19.2.7",
+ "react-dom": "^19.2.7"
}
}
diff --git a/src/docs-site/public/AXIS_OG.png b/src/docs-site/public/AXIS_OG.png
new file mode 100644
index 0000000..693a6cc
Binary files /dev/null and b/src/docs-site/public/AXIS_OG.png differ
diff --git a/src/docs-site/public/Digerati-Regular.woff b/src/docs-site/public/Digerati-Regular.woff
new file mode 100644
index 0000000..e8c24ee
Binary files /dev/null and b/src/docs-site/public/Digerati-Regular.woff differ
diff --git a/src/docs-site/public/Header/AXIS.svg b/src/docs-site/public/Header/AXIS.svg
new file mode 100644
index 0000000..db90c7d
--- /dev/null
+++ b/src/docs-site/public/Header/AXIS.svg
@@ -0,0 +1,6 @@
+
diff --git a/src/docs-site/public/agents/auggie.png b/src/docs-site/public/agents/auggie.png
new file mode 100644
index 0000000..74b1c2d
Binary files /dev/null and b/src/docs-site/public/agents/auggie.png differ
diff --git a/src/docs-site/public/agents/blackbox.png b/src/docs-site/public/agents/blackbox.png
new file mode 100644
index 0000000..55c6d70
Binary files /dev/null and b/src/docs-site/public/agents/blackbox.png differ
diff --git a/src/docs-site/public/agents/claude.svg b/src/docs-site/public/agents/claude.svg
new file mode 100644
index 0000000..d300701
--- /dev/null
+++ b/src/docs-site/public/agents/claude.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/docs-site/public/agents/cline.svg b/src/docs-site/public/agents/cline.svg
new file mode 100644
index 0000000..4e9df4e
--- /dev/null
+++ b/src/docs-site/public/agents/cline.svg
@@ -0,0 +1,5 @@
+
+
\ No newline at end of file
diff --git a/src/docs-site/public/agents/codex.svg b/src/docs-site/public/agents/codex.svg
new file mode 100644
index 0000000..1716a13
--- /dev/null
+++ b/src/docs-site/public/agents/codex.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/docs-site/public/agents/copilot.png b/src/docs-site/public/agents/copilot.png
new file mode 100644
index 0000000..5545de5
Binary files /dev/null and b/src/docs-site/public/agents/copilot.png differ
diff --git a/src/docs-site/public/agents/cursor.png b/src/docs-site/public/agents/cursor.png
new file mode 100644
index 0000000..2dbb356
Binary files /dev/null and b/src/docs-site/public/agents/cursor.png differ
diff --git a/src/docs-site/public/agents/cursor.svg b/src/docs-site/public/agents/cursor.svg
new file mode 100644
index 0000000..7ba0a56
--- /dev/null
+++ b/src/docs-site/public/agents/cursor.svg
@@ -0,0 +1,7 @@
+
diff --git a/src/docs-site/public/agents/factorydroid.png b/src/docs-site/public/agents/factorydroid.png
new file mode 100644
index 0000000..4fd23c6
Binary files /dev/null and b/src/docs-site/public/agents/factorydroid.png differ
diff --git a/src/docs-site/public/agents/fastagent.png b/src/docs-site/public/agents/fastagent.png
new file mode 100644
index 0000000..4fc3f3e
Binary files /dev/null and b/src/docs-site/public/agents/fastagent.png differ
diff --git a/src/docs-site/public/agents/gemini.svg b/src/docs-site/public/agents/gemini.svg
new file mode 100644
index 0000000..87cce06
--- /dev/null
+++ b/src/docs-site/public/agents/gemini.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/docs-site/public/agents/goose.svg b/src/docs-site/public/agents/goose.svg
new file mode 100644
index 0000000..1082090
--- /dev/null
+++ b/src/docs-site/public/agents/goose.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/docs-site/public/agents/kilo.svg b/src/docs-site/public/agents/kilo.svg
new file mode 100644
index 0000000..e5c9c45
--- /dev/null
+++ b/src/docs-site/public/agents/kilo.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/docs-site/public/agents/kimi.svg b/src/docs-site/public/agents/kimi.svg
new file mode 100644
index 0000000..209edf3
--- /dev/null
+++ b/src/docs-site/public/agents/kimi.svg
@@ -0,0 +1,4 @@
+
diff --git a/src/docs-site/public/agents/kiro.png b/src/docs-site/public/agents/kiro.png
new file mode 100644
index 0000000..d541d9c
Binary files /dev/null and b/src/docs-site/public/agents/kiro.png differ
diff --git a/src/docs-site/public/agents/mistral.svg b/src/docs-site/public/agents/mistral.svg
new file mode 100644
index 0000000..26f5913
--- /dev/null
+++ b/src/docs-site/public/agents/mistral.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/docs-site/public/agents/opencode.svg b/src/docs-site/public/agents/opencode.svg
new file mode 100644
index 0000000..9c4cb89
--- /dev/null
+++ b/src/docs-site/public/agents/opencode.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/docs-site/public/agents/openhands.png b/src/docs-site/public/agents/openhands.png
new file mode 100644
index 0000000..8bba00e
Binary files /dev/null and b/src/docs-site/public/agents/openhands.png differ
diff --git a/src/docs-site/public/agents/poolside.svg b/src/docs-site/public/agents/poolside.svg
new file mode 100644
index 0000000..5ab18ab
--- /dev/null
+++ b/src/docs-site/public/agents/poolside.svg
@@ -0,0 +1,26 @@
+
diff --git a/src/docs-site/public/agents/qoder.svg b/src/docs-site/public/agents/qoder.svg
new file mode 100644
index 0000000..c25f9b5
--- /dev/null
+++ b/src/docs-site/public/agents/qoder.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/docs-site/public/agents/qwen.svg b/src/docs-site/public/agents/qwen.svg
new file mode 100644
index 0000000..984235f
--- /dev/null
+++ b/src/docs-site/public/agents/qwen.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/docs-site/public/agents/stakpak.png b/src/docs-site/public/agents/stakpak.png
new file mode 100644
index 0000000..465dbcf
Binary files /dev/null and b/src/docs-site/public/agents/stakpak.png differ
diff --git a/src/docs-site/public/apple-touch-icon.png b/src/docs-site/public/apple-touch-icon.png
index 651c98b..6423cf3 100644
Binary files a/src/docs-site/public/apple-touch-icon.png and b/src/docs-site/public/apple-touch-icon.png differ
diff --git a/src/docs-site/public/favicon-16x16.png b/src/docs-site/public/favicon-16x16.png
index 4b2c23a..72a59f6 100644
Binary files a/src/docs-site/public/favicon-16x16.png and b/src/docs-site/public/favicon-16x16.png differ
diff --git a/src/docs-site/public/favicon-32x32.png b/src/docs-site/public/favicon-32x32.png
index 988fd26..4d42c2d 100644
Binary files a/src/docs-site/public/favicon-32x32.png and b/src/docs-site/public/favicon-32x32.png differ
diff --git a/src/docs-site/public/favicon.ico b/src/docs-site/public/favicon.ico
index f139851..3b56bfe 100644
Binary files a/src/docs-site/public/favicon.ico and b/src/docs-site/public/favicon.ico differ
diff --git a/src/docs-site/public/logos/auth0.png b/src/docs-site/public/logos/auth0.png
new file mode 100644
index 0000000..fcf13b6
Binary files /dev/null and b/src/docs-site/public/logos/auth0.png differ
diff --git a/src/docs-site/public/logos/netlify.png b/src/docs-site/public/logos/netlify.png
new file mode 100644
index 0000000..fcad466
Binary files /dev/null and b/src/docs-site/public/logos/netlify.png differ
diff --git a/src/docs-site/src/components/DimensionCards.tsx b/src/docs-site/src/components/DimensionCards.tsx
new file mode 100644
index 0000000..1c619db
--- /dev/null
+++ b/src/docs-site/src/components/DimensionCards.tsx
@@ -0,0 +1,40 @@
+const CARD_DEFS = [
+ { cls: "lp-dim-goal", weight: "40%", name: "Goal achievement", desc: "Did the agent actually finish the task? Scored against your rubric checks by an LLM judge." },
+ { cls: "lp-dim-env", weight: "20%", name: "Environment", desc: "Shell, filesystem, build tools. Measure whether your project structure and dev workflow trip agents up." },
+ { cls: "lp-dim-svc", weight: "20%", name: "Service", desc: "APIs, MCP tools, third-party services. Tells you whether your endpoints are actually usable by an agent." },
+ { cls: "lp-dim-agent",weight: "20%", name: "Agent", desc: "Planning, tool selection, self-organization. Captures the quality of the agent's own decisions." },
+];
+
+export default function DimensionCards() {
+ return (
+ {c.desc}
+ A single pass/fail tells you nothing about why an agent + struggled. AXIS scores four independent dimensions so you can focus on + what matters: a slow API, a confusing layout, a noisy tool, or the + agent's own decisions. +
+- AXIS is an open scoring framework and CLI that measures how well your project, - APIs, and tooling actually work when an AI agent tries to use them. Run real agents - against real scenarios, capture every tool call, and get a comparable - 0–100 score back. -
++ Think Lighthouse, but for agent experience. AXIS — the Agent Experience Index Score — is open source tooling and a scoring framework to measure how well your APIs, services, and project structure work for AI agents. +
-$npm i -g @netlify/axis
-
- $axis init
-
- $axis run
-
+
+ $ npm i -g @netlify/axis
+ $ axis init
+ $ axis run
+ - A single pass/fail tells you nothing about why an agent struggled. AXIS scores - four independent dimensions so you can focus on what matters: a slow API, a confusing - layout, a noisy tool, or the agent's own decisions. -
+ + +- Did the agent actually finish the task? Scored against your rubric checks by an - LLM judge. -
- - -- Shell, filesystem, build tools. Measures whether your project structure and dev - workflow trip agents up. +
+ AXIS is built to slot into the same place as your unit tests, just for agent + experience. Run it locally to iterate, then turn on baselines and let your CI catch + regressions automatically.
- - -+ A JSON file with a prompt, a rubric, and optional setup steps. A minimal scenario is five lines. +
- APIs, MCP tools, third-party services. Tells you whether your endpoints are - actually usable by an agent. -
- - -+ 23 built-in agents including Claude Code, Codex, Gemini, Cursor, Copilot, and more. Not listed? Register any agent via the custom agent API. +
- Planning, tool selection, self-organization. Captures the quality of the agent's - own decisions. -
- ++ Snapshot a passing run, commit the baseline, and any future regression beyond + noise tolerance fails the build. +
+- AXIS doesn't just hand you a number. Each run produces a self-contained HTML report - with the full transcript, every tool call, the LLM judge's per-criterion grading, - and a sparse-index view that's optimized for skimming. Try the live sample - below. Click around, expand interactions, read the rubric grades. -
-+ AXIS was created by Netlify and is being developed in the open. These are the founding + contributors — the first teams to run it, publish their results, and help shape the standard. +
+