mirror of
https://github.com/GitbookIO/gitbook.git
synced 2026-09-11 21:39:22 +00:00
Move the OpenAPI package from react-aria to Base UI (#4473)
This commit is contained in:
@@ -316,6 +316,7 @@
|
||||
"name": "@gitbook/react-openapi",
|
||||
"version": "1.5.15",
|
||||
"dependencies": {
|
||||
"@base-ui/react": "^1.7.0",
|
||||
"@gitbook/expr": "workspace:*",
|
||||
"@gitbook/openapi-parser": "workspace:*",
|
||||
"@scalar/api-client-react": "catalog:",
|
||||
@@ -325,9 +326,6 @@
|
||||
"flatted": "^3.2.9",
|
||||
"js-yaml": "^4.1.0",
|
||||
"json-xml-parse": "^1.3.0",
|
||||
"react-aria": "^3.44.0",
|
||||
"react-aria-components": "^1.13.0",
|
||||
"react-stately": "^3.42.0",
|
||||
"usehooks-ts": "catalog:",
|
||||
"zustand": "^5.0.3",
|
||||
},
|
||||
@@ -532,10 +530,14 @@
|
||||
|
||||
"@babel/parser": ["@babel/parser@7.28.4", "", { "dependencies": { "@babel/types": "^7.28.4" }, "bin": "./bin/babel-parser.js" }, "sha512-yZbBqeM6TkpP9du/I2pUZnJsRMGGvOuIrhjzC1AwHwW+6he4mni6Bp/m8ijn0iOuZuPI2BfkCoSRunpyjnrQKg=="],
|
||||
|
||||
"@babel/runtime": ["@babel/runtime@7.25.7", "", { "dependencies": { "regenerator-runtime": "^0.14.0" } }, "sha512-FjoyLe754PMiYsFaN5C94ttGiOmBNYTf6pLr4xXHAT5uctHb092PBszndLDR5XA/jghQvn4n7JMHl7dmTgbm9w=="],
|
||||
"@babel/runtime": ["@babel/runtime@7.29.7", "", {}, "sha512-Nq8OhGWiZIZGV6hLHoyAKLLcJihP/xFeBMGJoUrxTX2psI8dCifzLhZISFb+VWS3wFMRDmCGw5R+dOySCqPLhw=="],
|
||||
|
||||
"@babel/types": ["@babel/types@7.28.4", "", { "dependencies": { "@babel/helper-string-parser": "^7.27.1", "@babel/helper-validator-identifier": "^7.27.1" } }, "sha512-bkFqkLhh3pMBUQQkpVgWDWq/lqzc2678eUyDlTBhRqhCHFguYYGM0Efga7tYk4TogG/3x0EEl66/OQ+WGbWB/Q=="],
|
||||
|
||||
"@base-ui/react": ["@base-ui/react@1.7.0", "", { "dependencies": { "@babel/runtime": "^7.29.2", "@base-ui/utils": "0.3.2", "@floating-ui/react-dom": "^2.1.9", "@floating-ui/utils": "^0.2.12", "use-sync-external-store": "^1.6.0" }, "peerDependencies": { "@date-fns/tz": "^1.2.0", "@types/react": "^17 || ^18 || ^19", "date-fns": "^4.0.0", "react": "^17 || ^18 || ^19", "react-dom": "^17 || ^18 || ^19" }, "optionalPeers": ["@date-fns/tz", "@types/react", "date-fns"] }, "sha512-j+8QjX44C32jrXD/qyEAGpFr70FRpGL2CY61mQd9nBPWN737CK0xxD1ceJ055rW4RtdvFDT1e7otzdlfxvsYug=="],
|
||||
|
||||
"@base-ui/utils": ["@base-ui/utils@0.3.2", "", { "dependencies": { "@babel/runtime": "^7.29.2", "@floating-ui/utils": "^0.2.12", "reselect": "^5.2.0", "use-sync-external-store": "^1.6.0" }, "peerDependencies": { "@types/react": "^17 || ^18 || ^19", "react": "^17 || ^18 || ^19", "react-dom": "^17 || ^18 || ^19" }, "optionalPeers": ["@types/react"] }, "sha512-oWy1aq/I2GmYjpl4PhEAhzflF8VPGKgZeq0xAWTbfD5KBWyxcN0ZP2+WHSUm/5Z6lVMBDLReLcoXwSYoRc/zNQ=="],
|
||||
|
||||
"@biomejs/biome": ["@biomejs/biome@1.9.4", "", { "optionalDependencies": { "@biomejs/cli-darwin-arm64": "1.9.4", "@biomejs/cli-darwin-x64": "1.9.4", "@biomejs/cli-linux-arm64": "1.9.4", "@biomejs/cli-linux-arm64-musl": "1.9.4", "@biomejs/cli-linux-x64": "1.9.4", "@biomejs/cli-linux-x64-musl": "1.9.4", "@biomejs/cli-win32-arm64": "1.9.4", "@biomejs/cli-win32-x64": "1.9.4" }, "bin": { "biome": "bin/biome" } }, "sha512-1rkd7G70+o9KkTn5KLmDYXihGoTaIGO9PIIN2ZB7UJxFrWw04CZHPYiMRjYsaDvVV7hP1dYNRLxSANLaBFGpog=="],
|
||||
|
||||
"@biomejs/cli-darwin-arm64": ["@biomejs/cli-darwin-arm64@1.9.4", "", { "os": "darwin", "cpu": "arm64" }, "sha512-bFBsPWrNvkdKrNCYeAp+xo2HecOGPAy9WyNyB/jKnnedgzl4W4Hb9ZMzYNbf8dMCGmUdSavlYHiR01QaYR58cw=="],
|
||||
@@ -732,15 +734,15 @@
|
||||
|
||||
"@fastify/busboy": ["@fastify/busboy@2.1.1", "", {}, "sha512-vBZP4NlzfOlerQTnba4aqZoMhE/a9HY7HRqoOPaETQcSQuWEIyZMHGfVu6w9wGtGK5fED5qRs2DteVCjOH60sA=="],
|
||||
|
||||
"@floating-ui/core": ["@floating-ui/core@1.6.8", "", { "dependencies": { "@floating-ui/utils": "^0.2.8" } }, "sha512-7XJ9cPU+yI2QeLS+FCSlqNFZJq8arvswefkZrYI1yQBbftw6FyrZOxYSh+9S7z7TpeWlRt9zJ5IhM1WIL334jA=="],
|
||||
"@floating-ui/core": ["@floating-ui/core@1.8.0", "", { "dependencies": { "@floating-ui/utils": "^0.2.12" } }, "sha512-0CIZ5itps/8x7BG8dEIhs53BvCUH2PCoogtakwRTut+Arm58sJooJ0AuZhLw2HJYIR5cMLNPBSS728sPho2khQ=="],
|
||||
|
||||
"@floating-ui/dom": ["@floating-ui/dom@1.6.11", "", { "dependencies": { "@floating-ui/core": "^1.6.0", "@floating-ui/utils": "^0.2.8" } }, "sha512-qkMCxSR24v2vGkhYDo/UzxfJN3D4syqSjyuTFz6C7XcpU1pASPRieNI0Kj5VP3/503mOfYiGY891ugBX1GlABQ=="],
|
||||
"@floating-ui/dom": ["@floating-ui/dom@1.8.0", "", { "dependencies": { "@floating-ui/core": "^1.8.0", "@floating-ui/utils": "^0.2.12" } }, "sha512-yXSrzeHZBTZadLOlfyhCkJHNeLJnHRnRInwdZ40L7ZiaAtrBwoYlsDrX3v5zB1Utk7CLfzcOVnVVWoXEky7Ceg=="],
|
||||
|
||||
"@floating-ui/react": ["@floating-ui/react@0.27.18", "", { "dependencies": { "@floating-ui/react-dom": "^2.1.7", "@floating-ui/utils": "^0.2.10", "tabbable": "^6.0.0" }, "peerDependencies": { "react": ">=17.0.0", "react-dom": ">=17.0.0" } }, "sha512-xJWJxvmy3a05j643gQt+pRbht5XnTlGpsEsAPnMi5F5YTOEEJymA90uZKBD8OvIv5XvZ1qi4GcccSlqT3Bq44Q=="],
|
||||
|
||||
"@floating-ui/react-dom": ["@floating-ui/react-dom@2.1.2", "", { "dependencies": { "@floating-ui/dom": "^1.0.0" }, "peerDependencies": { "react": ">=16.8.0", "react-dom": ">=16.8.0" } }, "sha512-06okr5cgPzMNBy+Ycse2A6udMi4bqwW/zgBF/rwjcNqWkyr82Mcg8b0vjX8OJpZFy/FKjJmw6wV7t44kK6kW7A=="],
|
||||
"@floating-ui/react-dom": ["@floating-ui/react-dom@2.1.9", "", { "dependencies": { "@floating-ui/dom": "^1.8.0" }, "peerDependencies": { "react": ">=16.8.0", "react-dom": ">=16.8.0" } }, "sha512-JDjEFGCpImxDCA7JJKviA0M9+RtmJdj0m/NVU5IMgBK+AmZouAQQ7/+2GLH0GXXY0YMw9oXPB8hKdbPYg5QLYg=="],
|
||||
|
||||
"@floating-ui/utils": ["@floating-ui/utils@0.2.10", "", {}, "sha512-aGTxbpbg8/b5JfU1HXSrbH3wXZuLPJcNEcZQFMxLs3oSzgtVu6nFPkbbGGUvBcUjKV2YyB9Wxxabo+HEH9tcRQ=="],
|
||||
"@floating-ui/utils": ["@floating-ui/utils@0.2.12", "", {}, "sha512-HpCo8tmWzLVad5s2d19EhAz5zqrrQ6s69qd6moPMQvkOuSwDT1YgRfWSVuc4ennqrgv3OHppiOGMQ7oC13yIww=="],
|
||||
|
||||
"@floating-ui/vue": ["@floating-ui/vue@1.1.9", "", { "dependencies": { "@floating-ui/dom": "^1.7.4", "@floating-ui/utils": "^0.2.10", "vue-demi": ">=0.13.0" } }, "sha512-BfNqNW6KA83Nexspgb9DZuz578R7HT8MZw1CfK9I6Ah4QReNWEJsXWHN+SdmOVLNGmTPDi+fDT535Df5PzMLbQ=="],
|
||||
|
||||
@@ -1110,8 +1112,6 @@
|
||||
|
||||
"@radix-ui/rect": ["@radix-ui/rect@1.1.1", "", {}, "sha512-HPwpGIzkl28mWyZqG52jiqDJ12waP11Pa1lGoiyUkIEuMLBP0oeK/C89esbXrxsky5we7dfd8U58nm0SgAWpVw=="],
|
||||
|
||||
"@react-aria/autocomplete": ["@react-aria/autocomplete@3.0.0-rc.3", "", { "dependencies": { "@react-aria/combobox": "^3.14.0", "@react-aria/focus": "^3.21.2", "@react-aria/i18n": "^3.12.13", "@react-aria/interactions": "^3.25.6", "@react-aria/listbox": "^3.15.0", "@react-aria/searchfield": "^3.8.9", "@react-aria/textfield": "^3.18.2", "@react-aria/utils": "^3.31.0", "@react-stately/autocomplete": "3.0.0-beta.3", "@react-stately/combobox": "^3.12.0", "@react-types/autocomplete": "3.0.0-alpha.35", "@react-types/button": "^3.14.1", "@react-types/shared": "^3.32.1", "@swc/helpers": "^0.5.0" }, "peerDependencies": { "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" } }, "sha512-vemf7h3hvIDk3MxiiPryysfYgJDg8R72X46dRIeg0+cXKYxjPYou64/DTucSV2z5J6RC5JalINu0jIDaLhEILw=="],
|
||||
|
||||
"@react-aria/breadcrumbs": ["@react-aria/breadcrumbs@3.5.29", "", { "dependencies": { "@react-aria/i18n": "^3.12.13", "@react-aria/link": "^3.8.6", "@react-aria/utils": "^3.31.0", "@react-types/breadcrumbs": "^3.7.17", "@react-types/shared": "^3.32.1", "@swc/helpers": "^0.5.0" }, "peerDependencies": { "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" } }, "sha512-rKS0dryllaZJqrr3f/EAf2liz8CBEfmL5XACj+Z1TAig6GIYe1QuA3BtkX0cV9OkMugXdX8e3cbA7nD10ORRqg=="],
|
||||
|
||||
"@react-aria/button": ["@react-aria/button@3.14.2", "", { "dependencies": { "@react-aria/interactions": "^3.25.6", "@react-aria/toolbar": "3.0.0-beta.21", "@react-aria/utils": "^3.31.0", "@react-stately/toggle": "^3.9.2", "@react-types/button": "^3.14.1", "@react-types/shared": "^3.32.1", "@swc/helpers": "^0.5.0" }, "peerDependencies": { "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" } }, "sha512-VbLIA+Kd6f/MDjd+TJBUg2+vNDw66pnvsj2E4RLomjI9dfBuN7d+Yo2UnsqKVyhePjCUZ6xxa2yDuD63IOSIYA=="],
|
||||
@@ -1120,8 +1120,6 @@
|
||||
|
||||
"@react-aria/checkbox": ["@react-aria/checkbox@3.16.2", "", { "dependencies": { "@react-aria/form": "^3.1.2", "@react-aria/interactions": "^3.25.6", "@react-aria/label": "^3.7.22", "@react-aria/toggle": "^3.12.2", "@react-aria/utils": "^3.31.0", "@react-stately/checkbox": "^3.7.2", "@react-stately/form": "^3.2.2", "@react-stately/toggle": "^3.9.2", "@react-types/checkbox": "^3.10.2", "@react-types/shared": "^3.32.1", "@swc/helpers": "^0.5.0" }, "peerDependencies": { "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" } }, "sha512-29Mj9ZqXioJ0bcMnNGooHztnTau5pikZqX3qCRj5bYR3by/ZFFavYoMroh9F7s/MbFm/tsKX+Sf02lYFEdXRjA=="],
|
||||
|
||||
"@react-aria/collections": ["@react-aria/collections@3.0.0", "", { "dependencies": { "@react-aria/interactions": "^3.25.6", "@react-aria/ssr": "^3.9.10", "@react-aria/utils": "^3.31.0", "@react-types/shared": "^3.32.1", "@swc/helpers": "^0.5.0", "use-sync-external-store": "^1.4.0" }, "peerDependencies": { "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" } }, "sha512-vCFztpsl1AYjQn3lH7CwzYiiRAGfnm7+EXaXIt7yS4O6YC8C3FfOBf3jdxcFjE5u8CEfiL4X+4ABkfio10nneg=="],
|
||||
|
||||
"@react-aria/color": ["@react-aria/color@3.1.2", "", { "dependencies": { "@react-aria/i18n": "^3.12.13", "@react-aria/interactions": "^3.25.6", "@react-aria/numberfield": "^3.12.2", "@react-aria/slider": "^3.8.2", "@react-aria/spinbutton": "^3.6.19", "@react-aria/textfield": "^3.18.2", "@react-aria/utils": "^3.31.0", "@react-aria/visually-hidden": "^3.8.28", "@react-stately/color": "^3.9.2", "@react-stately/form": "^3.2.2", "@react-types/color": "^3.1.2", "@react-types/shared": "^3.32.1", "@swc/helpers": "^0.5.0" }, "peerDependencies": { "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" } }, "sha512-jCC+Q7rAQGLQBkHjkPAeDuGYuMbc4neifjlNRiyZ9as1z4gg63H8MteoWYYk6K4vCKKxSixgt8MfI29XWMOWPQ=="],
|
||||
|
||||
"@react-aria/combobox": ["@react-aria/combobox@3.14.0", "", { "dependencies": { "@react-aria/focus": "^3.21.2", "@react-aria/i18n": "^3.12.13", "@react-aria/listbox": "^3.15.0", "@react-aria/live-announcer": "^3.4.4", "@react-aria/menu": "^3.19.3", "@react-aria/overlays": "^3.30.0", "@react-aria/selection": "^3.26.0", "@react-aria/textfield": "^3.18.2", "@react-aria/utils": "^3.31.0", "@react-stately/collections": "^3.12.8", "@react-stately/combobox": "^3.12.0", "@react-stately/form": "^3.2.2", "@react-types/button": "^3.14.1", "@react-types/combobox": "^3.13.9", "@react-types/shared": "^3.32.1", "@swc/helpers": "^0.5.0" }, "peerDependencies": { "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" } }, "sha512-z4ro0Hma//p4nL2IJx5iUa7NwxeXbzSoZ0se5uTYjG1rUUMszg+wqQh/AQoL+eiULn7rs18JY9wwNbVIkRNKWA=="],
|
||||
@@ -1204,12 +1202,8 @@
|
||||
|
||||
"@react-aria/utils": ["@react-aria/utils@3.31.0", "", { "dependencies": { "@react-aria/ssr": "^3.9.10", "@react-stately/flags": "^3.1.2", "@react-stately/utils": "^3.10.8", "@react-types/shared": "^3.32.1", "@swc/helpers": "^0.5.0", "clsx": "^2.0.0" }, "peerDependencies": { "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" } }, "sha512-ABOzCsZrWzf78ysswmguJbx3McQUja7yeGj6/vZo4JVsZNlxAN+E9rs381ExBRI0KzVo6iBTeX5De8eMZPJXig=="],
|
||||
|
||||
"@react-aria/virtualizer": ["@react-aria/virtualizer@4.1.10", "", { "dependencies": { "@react-aria/i18n": "^3.12.13", "@react-aria/interactions": "^3.25.6", "@react-aria/utils": "^3.31.0", "@react-stately/virtualizer": "^4.4.4", "@react-types/shared": "^3.32.1", "@swc/helpers": "^0.5.0" }, "peerDependencies": { "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" } }, "sha512-s0xOFh602ybTWuDrV/i6fV7Pz7vYghsY7F/RpYL/5IX9qCZ5C1FWFePpVktQAZghnd3ljH8hS8DULPeDfVLCrg=="],
|
||||
|
||||
"@react-aria/visually-hidden": ["@react-aria/visually-hidden@3.8.28", "", { "dependencies": { "@react-aria/interactions": "^3.25.6", "@react-aria/utils": "^3.31.0", "@react-types/shared": "^3.32.1", "@swc/helpers": "^0.5.0" }, "peerDependencies": { "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" } }, "sha512-KRRjbVVob2CeBidF24dzufMxBveEUtUu7IM+hpdZKB+gxVROoh4XRLPv9SFmaH89Z7D9To3QoykVZoWD0lan6Q=="],
|
||||
|
||||
"@react-stately/autocomplete": ["@react-stately/autocomplete@3.0.0-beta.3", "", { "dependencies": { "@react-stately/utils": "^3.10.8", "@swc/helpers": "^0.5.0" }, "peerDependencies": { "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" } }, "sha512-YfP/TrvkOCp6j7oqpZxJSvmSeXn+XtbKSOiBOuo+m2zCIhW2ncThmDB9uAUOkpmikDv/LkGKni40RQE8USdGdA=="],
|
||||
|
||||
"@react-stately/calendar": ["@react-stately/calendar@3.9.0", "", { "dependencies": { "@internationalized/date": "^3.10.0", "@react-stately/utils": "^3.10.8", "@react-types/calendar": "^3.8.0", "@react-types/shared": "^3.32.1", "@swc/helpers": "^0.5.0" }, "peerDependencies": { "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" } }, "sha512-U5Nf2kx9gDhJRxdDUm5gjfyUlt/uUfOvM1vDW2UA62cA6+2k2cavMLc2wNlXOb/twFtl6p0joYKHG7T4xnEFkg=="],
|
||||
|
||||
"@react-stately/checkbox": ["@react-stately/checkbox@3.7.2", "", { "dependencies": { "@react-stately/form": "^3.2.2", "@react-stately/utils": "^3.10.8", "@react-types/checkbox": "^3.10.2", "@react-types/shared": "^3.32.1", "@swc/helpers": "^0.5.0" }, "peerDependencies": { "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" } }, "sha512-j1ycUVz5JmqhaL6mDZgDNZqBilOB8PBW096sDPFaTtuYreDx2HOd1igxiIvwlvPESZwsJP7FVM3mYnaoXtpKPA=="],
|
||||
@@ -1220,8 +1214,6 @@
|
||||
|
||||
"@react-stately/combobox": ["@react-stately/combobox@3.12.0", "", { "dependencies": { "@react-stately/collections": "^3.12.8", "@react-stately/form": "^3.2.2", "@react-stately/list": "^3.13.1", "@react-stately/overlays": "^3.6.20", "@react-stately/utils": "^3.10.8", "@react-types/combobox": "^3.13.9", "@react-types/shared": "^3.32.1", "@swc/helpers": "^0.5.0" }, "peerDependencies": { "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" } }, "sha512-A6q9R/7cEa/qoQsBkdslXWvD7ztNLLQ9AhBhVN9QvzrmrH5B4ymUwcTU8lWl22ykH7RRwfonLeLXJL4C+/L2oQ=="],
|
||||
|
||||
"@react-stately/data": ["@react-stately/data@3.14.1", "", { "dependencies": { "@react-types/shared": "^3.32.1", "@swc/helpers": "^0.5.0" }, "peerDependencies": { "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" } }, "sha512-lDNc4gZ6kVZcrABeeQZPTTnP+1ykNylSvFzAC/Hq1fs8+s54xLRvoENWIyG+yK19N9TIGEoA0AOFG8PoAun43g=="],
|
||||
|
||||
"@react-stately/datepicker": ["@react-stately/datepicker@3.15.2", "", { "dependencies": { "@internationalized/date": "^3.10.0", "@internationalized/string": "^3.2.7", "@react-stately/form": "^3.2.2", "@react-stately/overlays": "^3.6.20", "@react-stately/utils": "^3.10.8", "@react-types/datepicker": "^3.13.2", "@react-types/shared": "^3.32.1", "@swc/helpers": "^0.5.0" }, "peerDependencies": { "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" } }, "sha512-S5GL+W37chvV8knv9v0JRv0L6hKo732qqabCCHXzOpYxkLIkV4f/y3cHdEzFWzpZ0O0Gkg7WgeYo160xOdBKYg=="],
|
||||
|
||||
"@react-stately/disclosure": ["@react-stately/disclosure@3.0.8", "", { "dependencies": { "@react-stately/utils": "^3.10.8", "@react-types/shared": "^3.32.1", "@swc/helpers": "^0.5.0" }, "peerDependencies": { "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" } }, "sha512-/Ce/Z76y85eSBZiemfU/uEyXkBBa1RdfLRaKD13rnfUV7/nS3ae1VtNlsXgmwQjWv2pmAiSuEKYMbZfVL7q/lQ=="],
|
||||
@@ -1234,8 +1226,6 @@
|
||||
|
||||
"@react-stately/grid": ["@react-stately/grid@3.11.6", "", { "dependencies": { "@react-stately/collections": "^3.12.8", "@react-stately/selection": "^3.20.6", "@react-types/grid": "^3.3.6", "@react-types/shared": "^3.32.1", "@swc/helpers": "^0.5.0" }, "peerDependencies": { "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" } }, "sha512-vWPAkzpeTIsrurHfMubzMuqEw7vKzFhIJeEK5sEcLunyr1rlADwTzeWrHNbPMl66NAIAi70Dr1yNq+kahQyvMA=="],
|
||||
|
||||
"@react-stately/layout": ["@react-stately/layout@4.5.1", "", { "dependencies": { "@react-stately/collections": "^3.12.8", "@react-stately/table": "^3.15.1", "@react-stately/virtualizer": "^4.4.4", "@react-types/grid": "^3.3.6", "@react-types/shared": "^3.32.1", "@react-types/table": "^3.13.4", "@swc/helpers": "^0.5.0" }, "peerDependencies": { "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" } }, "sha512-Zk92HM6a8KFdyPzslhLCOmrrsvJ28+vFBisgiKMwVhe96cWlax1m9i4ktmO43xaUpSZkn06DRD/2k0d1x+Uwjw=="],
|
||||
|
||||
"@react-stately/list": ["@react-stately/list@3.13.1", "", { "dependencies": { "@react-stately/collections": "^3.12.8", "@react-stately/selection": "^3.20.6", "@react-stately/utils": "^3.10.8", "@react-types/shared": "^3.32.1", "@swc/helpers": "^0.5.0" }, "peerDependencies": { "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" } }, "sha512-eHaoauh21twbcl0kkwULhVJ+CzYcy1jUjMikNVMHOQdhr4WIBdExf7PmSgKHKqsSPhpGg6IpTCY2dUX3RycjDg=="],
|
||||
|
||||
"@react-stately/menu": ["@react-stately/menu@3.9.8", "", { "dependencies": { "@react-stately/overlays": "^3.6.20", "@react-types/menu": "^3.10.5", "@react-types/shared": "^3.32.1", "@swc/helpers": "^0.5.0" }, "peerDependencies": { "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" } }, "sha512-bo0NOhofnTHLESiYfsSSw6gyXiPVJJ0UlN2igUXtJk5PmyhWjFzUzTzcnd7B028OB0si9w3LIWM3stqz5271Eg=="],
|
||||
@@ -1268,10 +1258,6 @@
|
||||
|
||||
"@react-stately/utils": ["@react-stately/utils@3.10.8", "", { "dependencies": { "@swc/helpers": "^0.5.0" }, "peerDependencies": { "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" } }, "sha512-SN3/h7SzRsusVQjQ4v10LaVsDc81jyyR0DD5HnsQitm/I5WDpaSr2nRHtyloPFU48jlql1XX/S04T2DLQM7Y3g=="],
|
||||
|
||||
"@react-stately/virtualizer": ["@react-stately/virtualizer@4.4.4", "", { "dependencies": { "@react-types/shared": "^3.32.1", "@swc/helpers": "^0.5.0" }, "peerDependencies": { "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" } }, "sha512-ri8giqXSZOrznZDCCOE4U36wSkOhy+hrFK7yo/YVcpxTqqp3d3eisfKMqbDsgqBW+XTHycTU/xeAf0u9NqrfpQ=="],
|
||||
|
||||
"@react-types/autocomplete": ["@react-types/autocomplete@3.0.0-alpha.35", "", { "dependencies": { "@react-types/combobox": "^3.13.9", "@react-types/searchfield": "^3.6.6", "@react-types/shared": "^3.32.1" }, "peerDependencies": { "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" } }, "sha512-Wv5eU4WixfJ4M+fqvJUQqliWPbw7/VldRlgoJhqAlPwlNyLlHYwv5tlA64AySDXHGcSMIbzcS38LaHm44wt0AQ=="],
|
||||
|
||||
"@react-types/breadcrumbs": ["@react-types/breadcrumbs@3.7.17", "", { "dependencies": { "@react-types/link": "^3.6.5", "@react-types/shared": "^3.32.1" }, "peerDependencies": { "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" } }, "sha512-IhvVTcfli5o/UDlGACXxjlor2afGlMQA8pNR3faH0bBUay1Fmm3IWktVw9Xwmk+KraV2RTAg9e+E6p8DOQZfiw=="],
|
||||
|
||||
"@react-types/button": ["@react-types/button@3.14.1", "", { "dependencies": { "@react-types/shared": "^3.32.1" }, "peerDependencies": { "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" } }, "sha512-D8C4IEwKB7zEtiWYVJ3WE/5HDcWlze9mLWQ5hfsBfpePyWCgO3bT/+wjb/7pJvcAocrkXo90QrMm85LcpBtrpg=="],
|
||||
@@ -1288,8 +1274,6 @@
|
||||
|
||||
"@react-types/dialog": ["@react-types/dialog@3.5.22", "", { "dependencies": { "@react-types/overlays": "^3.9.2", "@react-types/shared": "^3.32.1" }, "peerDependencies": { "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" } }, "sha512-smSvzOcqKE196rWk0oqJDnz+ox5JM5+OT0PmmJXiUD4q7P5g32O6W5Bg7hMIFUI9clBtngo8kLaX2iMg+GqAzg=="],
|
||||
|
||||
"@react-types/form": ["@react-types/form@3.7.16", "", { "dependencies": { "@react-types/shared": "^3.32.1" }, "peerDependencies": { "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" } }, "sha512-Sb7KJoWEaQ/e4XIY+xRbjKvbP1luome98ZXevpD+zVSyGjEcfIroebizP6K1yMHCWP/043xH6GUkgEqWPoVGjg=="],
|
||||
|
||||
"@react-types/grid": ["@react-types/grid@3.3.6", "", { "dependencies": { "@react-types/shared": "^3.32.1" }, "peerDependencies": { "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" } }, "sha512-vIZJlYTii2n1We9nAugXwM2wpcpsC6JigJFBd6vGhStRdRWRoU4yv1Gc98Usbx0FQ/J7GLVIgeG8+1VMTKBdxw=="],
|
||||
|
||||
"@react-types/link": ["@react-types/link@3.6.5", "", { "dependencies": { "@react-types/shared": "^3.32.1" }, "peerDependencies": { "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" } }, "sha512-+I2s3XWBEvLrzts0GnNeA84mUkwo+a7kLUWoaJkW0TOBDG7my95HFYxF9WnqKye7NgpOkCqz4s3oW96xPdIniQ=="],
|
||||
@@ -3100,8 +3084,6 @@
|
||||
|
||||
"react-aria": ["react-aria@3.44.0", "", { "dependencies": { "@internationalized/string": "^3.2.7", "@react-aria/breadcrumbs": "^3.5.29", "@react-aria/button": "^3.14.2", "@react-aria/calendar": "^3.9.2", "@react-aria/checkbox": "^3.16.2", "@react-aria/color": "^3.1.2", "@react-aria/combobox": "^3.14.0", "@react-aria/datepicker": "^3.15.2", "@react-aria/dialog": "^3.5.31", "@react-aria/disclosure": "^3.1.0", "@react-aria/dnd": "^3.11.3", "@react-aria/focus": "^3.21.2", "@react-aria/gridlist": "^3.14.1", "@react-aria/i18n": "^3.12.13", "@react-aria/interactions": "^3.25.6", "@react-aria/label": "^3.7.22", "@react-aria/landmark": "^3.0.7", "@react-aria/link": "^3.8.6", "@react-aria/listbox": "^3.15.0", "@react-aria/menu": "^3.19.3", "@react-aria/meter": "^3.4.27", "@react-aria/numberfield": "^3.12.2", "@react-aria/overlays": "^3.30.0", "@react-aria/progress": "^3.4.27", "@react-aria/radio": "^3.12.2", "@react-aria/searchfield": "^3.8.9", "@react-aria/select": "^3.17.0", "@react-aria/selection": "^3.26.0", "@react-aria/separator": "^3.4.13", "@react-aria/slider": "^3.8.2", "@react-aria/ssr": "^3.9.10", "@react-aria/switch": "^3.7.8", "@react-aria/table": "^3.17.8", "@react-aria/tabs": "^3.10.8", "@react-aria/tag": "^3.7.2", "@react-aria/textfield": "^3.18.2", "@react-aria/toast": "^3.0.8", "@react-aria/tooltip": "^3.8.8", "@react-aria/tree": "^3.1.4", "@react-aria/utils": "^3.31.0", "@react-aria/visually-hidden": "^3.8.28", "@react-types/shared": "^3.32.1" }, "peerDependencies": { "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" } }, "sha512-2Pq3GQxBgM4/2BlpKYXeaZ47a3tdIcYSW/AYvKgypE3XipxOdQMDG5Sr/NBn7zuJq+thzmtfRb0lB9bTbsmaRw=="],
|
||||
|
||||
"react-aria-components": ["react-aria-components@1.13.0", "", { "dependencies": { "@internationalized/date": "^3.10.0", "@internationalized/string": "^3.2.7", "@react-aria/autocomplete": "3.0.0-rc.3", "@react-aria/collections": "^3.0.0", "@react-aria/dnd": "^3.11.3", "@react-aria/focus": "^3.21.2", "@react-aria/interactions": "^3.25.6", "@react-aria/live-announcer": "^3.4.4", "@react-aria/overlays": "^3.30.0", "@react-aria/ssr": "^3.9.10", "@react-aria/textfield": "^3.18.2", "@react-aria/toolbar": "3.0.0-beta.21", "@react-aria/utils": "^3.31.0", "@react-aria/virtualizer": "^4.1.10", "@react-stately/autocomplete": "3.0.0-beta.3", "@react-stately/layout": "^4.5.1", "@react-stately/selection": "^3.20.6", "@react-stately/table": "^3.15.1", "@react-stately/utils": "^3.10.8", "@react-stately/virtualizer": "^4.4.4", "@react-types/form": "^3.7.16", "@react-types/grid": "^3.3.6", "@react-types/shared": "^3.32.1", "@react-types/table": "^3.13.4", "@swc/helpers": "^0.5.0", "client-only": "^0.0.1", "react-aria": "^3.44.0", "react-stately": "^3.42.0", "use-sync-external-store": "^1.4.0" }, "peerDependencies": { "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" } }, "sha512-t1mm3AVy/MjUJBZ7zrb+sFC5iya8Vvw3go3mGKtTm269bXGZho7BLA4IgT+0nOS3j+ku6ChVi8NEoQVFoYzJJA=="],
|
||||
|
||||
"react-dom": ["react-dom@19.1.0", "", { "dependencies": { "scheduler": "^0.26.0" }, "peerDependencies": { "react": "^19.1.0" } }, "sha512-Xs1hdnE+DyKgeHJeJznQmYMIBG3TKIHJJT95Q58nHLSrElKlGQqDTR2HQ9fx5CN/Gk6Vh/kupBTDLU11/nDk/g=="],
|
||||
|
||||
"react-hotkeys-hook": ["react-hotkeys-hook@4.5.1", "", { "peerDependencies": { "react": ">=16.8.1", "react-dom": ">=16.8.1" } }, "sha512-scAEJOh3Irm0g95NIn6+tQVf/OICCjsQsC9NBHfQws/Vxw4sfq1tDQut5fhTEvPraXhu/sHxRd9lOtxzyYuNAg=="],
|
||||
@@ -3110,8 +3092,6 @@
|
||||
|
||||
"react-remove-scroll-bar": ["react-remove-scroll-bar@2.3.6", "", { "dependencies": { "react-style-singleton": "^2.2.1", "tslib": "^2.0.0" }, "peerDependencies": { "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0", "react": "^16.8.0 || ^17.0.0 || ^18.0.0" }, "optionalPeers": ["@types/react"] }, "sha512-DtSYaao4mBmX+HDo5YWYdBWQwYIQQshUV/dVxFxK+KM26Wjwp1gZ6rv6OC3oujI6Bfu6Xyg3TwK533AQutsn/g=="],
|
||||
|
||||
"react-stately": ["react-stately@3.42.0", "", { "dependencies": { "@react-stately/calendar": "^3.9.0", "@react-stately/checkbox": "^3.7.2", "@react-stately/collections": "^3.12.8", "@react-stately/color": "^3.9.2", "@react-stately/combobox": "^3.12.0", "@react-stately/data": "^3.14.1", "@react-stately/datepicker": "^3.15.2", "@react-stately/disclosure": "^3.0.8", "@react-stately/dnd": "^3.7.1", "@react-stately/form": "^3.2.2", "@react-stately/list": "^3.13.1", "@react-stately/menu": "^3.9.8", "@react-stately/numberfield": "^3.10.2", "@react-stately/overlays": "^3.6.20", "@react-stately/radio": "^3.11.2", "@react-stately/searchfield": "^3.5.16", "@react-stately/select": "^3.8.0", "@react-stately/selection": "^3.20.6", "@react-stately/slider": "^3.7.2", "@react-stately/table": "^3.15.1", "@react-stately/tabs": "^3.8.6", "@react-stately/toast": "^3.1.2", "@react-stately/toggle": "^3.9.2", "@react-stately/tooltip": "^3.5.8", "@react-stately/tree": "^3.9.3", "@react-types/shared": "^3.32.1" }, "peerDependencies": { "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" } }, "sha512-lYt2o1dd6dK8Bb4GRh08RG/2u64bSA1cqtRqtw4jEMgxC7Q17RFcIumBbChErndSdLzafEG/UBwV6shOfig6yw=="],
|
||||
|
||||
"react-style-singleton": ["react-style-singleton@2.2.1", "", { "dependencies": { "get-nonce": "^1.0.0", "invariant": "^2.2.4", "tslib": "^2.0.0" }, "peerDependencies": { "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0", "react": "^16.8.0 || ^17.0.0 || ^18.0.0" }, "optionalPeers": ["@types/react"] }, "sha512-ZWj0fHEMyWkHzKYUr2Bs/4zU6XLmq9HsgBURm7g5pAVfyn49DgUiNgY2d4lXRlYSiCif9YBGpQleewkcqddc7g=="],
|
||||
|
||||
"read-cache": ["read-cache@1.0.0", "", { "dependencies": { "pify": "^2.3.0" } }, "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA=="],
|
||||
@@ -3158,6 +3138,8 @@
|
||||
|
||||
"require-from-string": ["require-from-string@2.0.2", "", {}, "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw=="],
|
||||
|
||||
"reselect": ["reselect@5.2.0", "", {}, "sha512-AgZ3UOZm3YndfrJ4OYjgrT7bmCm/1iqkjvEfH/oYjzh6PD2qw4QuT3jjnXIrpdt4MTpMXclMT3lXbmRY+XRakw=="],
|
||||
|
||||
"resolve": ["resolve@1.22.11", "", { "dependencies": { "is-core-module": "^2.16.1", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" }, "bin": { "resolve": "bin/resolve" } }, "sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ=="],
|
||||
|
||||
"resolve-from": ["resolve-from@5.0.0", "", {}, "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw=="],
|
||||
@@ -3450,7 +3432,7 @@
|
||||
|
||||
"use-sidecar": ["use-sidecar@1.1.2", "", { "dependencies": { "detect-node-es": "^1.1.0", "tslib": "^2.0.0" }, "peerDependencies": { "@types/react": "^16.9.0 || ^17.0.0 || ^18.0.0", "react": "^16.8.0 || ^17.0.0 || ^18.0.0" }, "optionalPeers": ["@types/react"] }, "sha512-epTbsLuzZ7lPClpz2TyryBfztm7m+28DlEv2ZCQ3MDr5ssiwyOwGH/e5F9CkfWjJ1t4clvI58yF822/GUkjjhw=="],
|
||||
|
||||
"use-sync-external-store": ["use-sync-external-store@1.4.0", "", { "peerDependencies": { "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" } }, "sha512-9WXSPC5fMv61vaupRkCKCxsPxBocVnwakBEkMIHHpkTTg6icbJtg6jzgtLDm4bl3cSHAca52rYWih0k4K3PfHw=="],
|
||||
"use-sync-external-store": ["use-sync-external-store@1.6.0", "", { "peerDependencies": { "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" } }, "sha512-Pp6GSwGP/NrPIrxVFAIkOQeyw8lFenOHijQWkUTrDvrF4ALqylP2C/KCkeS9dpUM3KvYRQhna5vt7IL95+ZQ9w=="],
|
||||
|
||||
"usehooks-ts": ["usehooks-ts@3.1.1", "", { "dependencies": { "lodash.debounce": "^4.0.8" }, "peerDependencies": { "react": "^16.8.0 || ^17 || ^18 || ^19 || ^19.0.0-rc" } }, "sha512-I4diPp9Cq6ieSUH2wu+fDAVQO43xwtulo+fKEidHUwZPnYImbtkTjzIJYcDcJqxgmX31GVqNFURodvcgHcW0pA=="],
|
||||
|
||||
@@ -3656,17 +3638,15 @@
|
||||
|
||||
"@dotenvx/dotenvx/which": ["which@4.0.0", "", { "dependencies": { "isexe": "^3.1.1" }, "bin": { "node-which": "bin/which.js" } }, "sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg=="],
|
||||
|
||||
"@floating-ui/core/@floating-ui/utils": ["@floating-ui/utils@0.2.8", "", {}, "sha512-kym7SodPp8/wloecOpcmSnWJsK7M0E5Wg8UcFA+uO4B9s5d0ywXOEro/8HM9x0rW+TljRzul/14UYz3TleT3ig=="],
|
||||
|
||||
"@floating-ui/dom/@floating-ui/utils": ["@floating-ui/utils@0.2.8", "", {}, "sha512-kym7SodPp8/wloecOpcmSnWJsK7M0E5Wg8UcFA+uO4B9s5d0ywXOEro/8HM9x0rW+TljRzul/14UYz3TleT3ig=="],
|
||||
|
||||
"@floating-ui/react/@floating-ui/react-dom": ["@floating-ui/react-dom@2.1.7", "", { "dependencies": { "@floating-ui/dom": "^1.7.5" }, "peerDependencies": { "react": ">=16.8.0", "react-dom": ">=16.8.0" } }, "sha512-0tLRojf/1Go2JgEVm+3Frg9A3IW8bJgKgdO0BN5RkF//ufuz2joZM63Npau2ff3J6lUVYgDSNzNkR+aH3IVfjg=="],
|
||||
|
||||
"@floating-ui/react/@floating-ui/utils": ["@floating-ui/utils@0.2.10", "", {}, "sha512-aGTxbpbg8/b5JfU1HXSrbH3wXZuLPJcNEcZQFMxLs3oSzgtVu6nFPkbbGGUvBcUjKV2YyB9Wxxabo+HEH9tcRQ=="],
|
||||
|
||||
"@floating-ui/vue/@floating-ui/dom": ["@floating-ui/dom@1.7.4", "", { "dependencies": { "@floating-ui/core": "^1.7.3", "@floating-ui/utils": "^0.2.10" } }, "sha512-OOchDgh4F2CchOX94cRVqhvy7b3AFb+/rQXyswmzmGakRfkMgoWVjfnLWkRirfLEfuD4ysVW16eXzwt3jHIzKA=="],
|
||||
|
||||
"@headlessui/react/@floating-ui/react": ["@floating-ui/react@0.26.28", "", { "dependencies": { "@floating-ui/react-dom": "^2.1.2", "@floating-ui/utils": "^0.2.8", "tabbable": "^6.0.0" }, "peerDependencies": { "react": ">=16.8.0", "react-dom": ">=16.8.0" } }, "sha512-yORQuuAtVpiRjpMhdc0wJj06b9JFjrYF4qp96j++v2NBpbi6SEGF7donUJ3TMieerQ6qVkAv1tgr7L4r5roTqw=="],
|
||||
"@floating-ui/vue/@floating-ui/utils": ["@floating-ui/utils@0.2.10", "", {}, "sha512-aGTxbpbg8/b5JfU1HXSrbH3wXZuLPJcNEcZQFMxLs3oSzgtVu6nFPkbbGGUvBcUjKV2YyB9Wxxabo+HEH9tcRQ=="],
|
||||
|
||||
"@headlessui/react/use-sync-external-store": ["use-sync-external-store@1.6.0", "", { "peerDependencies": { "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" } }, "sha512-Pp6GSwGP/NrPIrxVFAIkOQeyw8lFenOHijQWkUTrDvrF4ALqylP2C/KCkeS9dpUM3KvYRQhna5vt7IL95+ZQ9w=="],
|
||||
"@headlessui/react/@floating-ui/react": ["@floating-ui/react@0.26.28", "", { "dependencies": { "@floating-ui/react-dom": "^2.1.2", "@floating-ui/utils": "^0.2.8", "tabbable": "^6.0.0" }, "peerDependencies": { "react": ">=16.8.0", "react-dom": ">=16.8.0" } }, "sha512-yORQuuAtVpiRjpMhdc0wJj06b9JFjrYF4qp96j++v2NBpbi6SEGF7donUJ3TMieerQ6qVkAv1tgr7L4r5roTqw=="],
|
||||
|
||||
"@hyperjump/json-schema/uuid": ["uuid@9.0.1", "", { "bin": { "uuid": "dist/bin/uuid" } }, "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA=="],
|
||||
|
||||
@@ -3700,10 +3680,14 @@
|
||||
|
||||
"@lezer/yaml/@lezer/common": ["@lezer/common@1.2.2", "", {}, "sha512-Z+R3hN6kXbgBWAuejUNPihylAL1Z5CaFqnIe0nTX8Ej+XlIy3EGtXxn6WtLMO+os2hRkQvm2yvaGMYliUzlJaw=="],
|
||||
|
||||
"@manypkg/find-root/@babel/runtime": ["@babel/runtime@7.25.7", "", { "dependencies": { "regenerator-runtime": "^0.14.0" } }, "sha512-FjoyLe754PMiYsFaN5C94ttGiOmBNYTf6pLr4xXHAT5uctHb092PBszndLDR5XA/jghQvn4n7JMHl7dmTgbm9w=="],
|
||||
|
||||
"@manypkg/find-root/@types/node": ["@types/node@12.20.55", "", {}, "sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ=="],
|
||||
|
||||
"@manypkg/find-root/fs-extra": ["fs-extra@8.1.0", "", { "dependencies": { "graceful-fs": "^4.2.0", "jsonfile": "^4.0.0", "universalify": "^0.1.0" } }, "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g=="],
|
||||
|
||||
"@manypkg/get-packages/@babel/runtime": ["@babel/runtime@7.25.7", "", { "dependencies": { "regenerator-runtime": "^0.14.0" } }, "sha512-FjoyLe754PMiYsFaN5C94ttGiOmBNYTf6pLr4xXHAT5uctHb092PBszndLDR5XA/jghQvn4n7JMHl7dmTgbm9w=="],
|
||||
|
||||
"@manypkg/get-packages/@changesets/types": ["@changesets/types@4.1.0", "", {}, "sha512-LDQvVDv5Kb50ny2s25Fhm3d9QSZimsoUGBsUioj6MC3qbMUCuC8GPIvk/M6IvXx3lYhAs0lwWUQLb+VIEUCECw=="],
|
||||
|
||||
"@manypkg/get-packages/fs-extra": ["fs-extra@8.1.0", "", { "dependencies": { "graceful-fs": "^4.2.0", "jsonfile": "^4.0.0", "universalify": "^0.1.0" } }, "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g=="],
|
||||
@@ -3828,6 +3812,8 @@
|
||||
|
||||
"@radix-ui/react-popover/@radix-ui/react-portal": ["@radix-ui/react-portal@1.1.2", "", { "dependencies": { "@radix-ui/react-primitive": "2.0.0", "@radix-ui/react-use-layout-effect": "1.1.0" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-WeDYLGPxJb/5EGBoedyJbT0MpoULmwnIPMJMSldkuiMsBAv7N1cRdsTWZWht9vpPOiN3qyiGAtbK2is47/uMFg=="],
|
||||
|
||||
"@radix-ui/react-popper/@floating-ui/react-dom": ["@floating-ui/react-dom@2.1.2", "", { "dependencies": { "@floating-ui/dom": "^1.0.0" }, "peerDependencies": { "react": ">=16.8.0", "react-dom": ">=16.8.0" } }, "sha512-06okr5cgPzMNBy+Ycse2A6udMi4bqwW/zgBF/rwjcNqWkyr82Mcg8b0vjX8OJpZFy/FKjJmw6wV7t44kK6kW7A=="],
|
||||
|
||||
"@radix-ui/react-popper/@radix-ui/react-compose-refs": ["@radix-ui/react-compose-refs@1.1.2", "", { "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-z4eqJvfiNnFMHIIvXP3CY57y2WJs5g2v3X0zm9mEJkrkNv4rDxu+sg9Jh8EkXyeqBkB7SOcboo9dMVqhyrACIg=="],
|
||||
|
||||
"@radix-ui/react-popper/@radix-ui/react-context": ["@radix-ui/react-context@1.1.2", "", { "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-jCi/QKUM2r1Ju5a3J64TH2A5SpKAgh0LpknyqdQ4m6DCV0xJ2HG1xARRwNGPQfi1SLdLWZ1OJz6F4OMBBNiGJA=="],
|
||||
@@ -3884,6 +3870,10 @@
|
||||
|
||||
"@radix-ui/react-visually-hidden/@radix-ui/react-primitive": ["@radix-ui/react-primitive@2.0.1", "", { "dependencies": { "@radix-ui/react-slot": "1.1.1" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-sHCWTtxwNn3L3fH8qAfnF3WbUZycW93SM1j3NFDzXBiz8D6F5UTTy8G1+WFEaiCdvCVRJWj6N2R4Xq6HdiHmDg=="],
|
||||
|
||||
"@react-aria/landmark/use-sync-external-store": ["use-sync-external-store@1.4.0", "", { "peerDependencies": { "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" } }, "sha512-9WXSPC5fMv61vaupRkCKCxsPxBocVnwakBEkMIHHpkTTg6icbJtg6jzgtLDm4bl3cSHAca52rYWih0k4K3PfHw=="],
|
||||
|
||||
"@react-stately/toast/use-sync-external-store": ["use-sync-external-store@1.4.0", "", { "peerDependencies": { "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" } }, "sha512-9WXSPC5fMv61vaupRkCKCxsPxBocVnwakBEkMIHHpkTTg6icbJtg6jzgtLDm4bl3cSHAca52rYWih0k4K3PfHw=="],
|
||||
|
||||
"@redis/client/generic-pool": ["generic-pool@3.9.0", "", {}, "sha512-hymDOu5B53XvN4QT9dBmZxPX4CWhBPPLguTZ9MMFeFa/Kg0xWVfylOVNlJji/E7yTZWFd/q9GO5TxDLq156D7g=="],
|
||||
|
||||
"@redis/client/yallist": ["yallist@4.0.0", "", {}, "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="],
|
||||
@@ -3918,6 +3908,8 @@
|
||||
|
||||
"@scalar/code-highlight/highlight.js": ["highlight.js@11.10.0", "", {}, "sha512-SYVnVFswQER+zu1laSya563s+F8VDGt7o35d4utbamowvUNLLMovFqwCLSocpZTz3MgaSRA1IbqRWZv97dtErQ=="],
|
||||
|
||||
"@scalar/components/@floating-ui/utils": ["@floating-ui/utils@0.2.10", "", {}, "sha512-aGTxbpbg8/b5JfU1HXSrbH3wXZuLPJcNEcZQFMxLs3oSzgtVu6nFPkbbGGUvBcUjKV2YyB9Wxxabo+HEH9tcRQ=="],
|
||||
|
||||
"@scalar/components/@scalar/helpers": ["@scalar/helpers@0.0.12", "", {}, "sha512-4NDmHShyi1hrVRsJCdRZT/FIpy+/5PFbVbQLRYX/pjpu5cYqHBj9s6n5RI6gGDXEBHAIFi63g9FC6Isgr66l1Q=="],
|
||||
|
||||
"@scalar/components/@scalar/oas-utils": ["@scalar/oas-utils@0.5.2", "", { "dependencies": { "@hyperjump/browser": "^1.1.0", "@hyperjump/json-schema": "^1.9.6", "@scalar/helpers": "0.0.12", "@scalar/json-magic": "0.6.1", "@scalar/object-utils": "1.2.8", "@scalar/openapi-types": "0.5.0", "@scalar/themes": "0.13.22", "@scalar/types": "0.3.2", "@scalar/workspace-store": "0.17.1", "@types/har-format": "^1.2.15", "flatted": "^3.3.3", "js-base64": "^3.7.8", "microdiff": "^1.5.0", "nanoid": "5.1.5", "type-fest": "5.0.0", "yaml": "2.8.0", "zod": "4.1.11" } }, "sha512-zuElgEjPDbqHigkF4AGOYztbMGKUlYRa3fUst4KjS1Jeq6LW4ojiiULfypog0S5SQ2hChX3B2PcRjs6lBLEtJQ=="],
|
||||
@@ -4256,6 +4248,8 @@
|
||||
|
||||
"pump/end-of-stream": ["end-of-stream@1.4.4", "", { "dependencies": { "once": "^1.4.0" } }, "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q=="],
|
||||
|
||||
"radix-vue/@floating-ui/dom": ["@floating-ui/dom@1.6.11", "", { "dependencies": { "@floating-ui/core": "^1.6.0", "@floating-ui/utils": "^0.2.8" } }, "sha512-qkMCxSR24v2vGkhYDo/UzxfJN3D4syqSjyuTFz6C7XcpU1pASPRieNI0Kj5VP3/503mOfYiGY891ugBX1GlABQ=="],
|
||||
|
||||
"radix-vue/@floating-ui/vue": ["@floating-ui/vue@1.1.5", "", { "dependencies": { "@floating-ui/dom": "^1.0.0", "@floating-ui/utils": "^0.2.8", "vue-demi": ">=0.13.0" } }, "sha512-ynL1p5Z+woPVSwgMGqeDrx6HrJfGIDzFyESFkyqJKilGW1+h/8yVY29Khn0LaU6wHBRwZ13ntG6reiHWK6jyzw=="],
|
||||
|
||||
"radix-vue/@internationalized/date": ["@internationalized/date@3.5.6", "", { "dependencies": { "@swc/helpers": "^0.5.0" } }, "sha512-jLxQjefH9VI5P9UQuqB6qNKnvFt1Ky1TPIzHGsIlCi7sZZoMR8SdYbBGRvM0y+Jtb+ez4ieBzmiAUcpmPYpyOw=="],
|
||||
@@ -4318,6 +4312,8 @@
|
||||
|
||||
"sucrase/commander": ["commander@4.1.1", "", {}, "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA=="],
|
||||
|
||||
"swr/use-sync-external-store": ["use-sync-external-store@1.4.0", "", { "peerDependencies": { "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" } }, "sha512-9WXSPC5fMv61vaupRkCKCxsPxBocVnwakBEkMIHHpkTTg6icbJtg6jzgtLDm4bl3cSHAca52rYWih0k4K3PfHw=="],
|
||||
|
||||
"terser/acorn": ["acorn@8.14.0", "", { "bin": { "acorn": "bin/acorn" } }, "sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA=="],
|
||||
|
||||
"terser/commander": ["commander@2.20.3", "", {}, "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ=="],
|
||||
@@ -4446,6 +4442,8 @@
|
||||
|
||||
"@headlessui/react/@floating-ui/react/@floating-ui/react-dom": ["@floating-ui/react-dom@2.1.7", "", { "dependencies": { "@floating-ui/dom": "^1.7.5" }, "peerDependencies": { "react": ">=16.8.0", "react-dom": ">=16.8.0" } }, "sha512-0tLRojf/1Go2JgEVm+3Frg9A3IW8bJgKgdO0BN5RkF//ufuz2joZM63Npau2ff3J6lUVYgDSNzNkR+aH3IVfjg=="],
|
||||
|
||||
"@headlessui/react/@floating-ui/react/@floating-ui/utils": ["@floating-ui/utils@0.2.10", "", {}, "sha512-aGTxbpbg8/b5JfU1HXSrbH3wXZuLPJcNEcZQFMxLs3oSzgtVu6nFPkbbGGUvBcUjKV2YyB9Wxxabo+HEH9tcRQ=="],
|
||||
|
||||
"@img/sharp-freebsd-wasm32/@img/sharp-wasm32/@emnapi/runtime": ["@emnapi/runtime@1.11.2", "", { "dependencies": { "tslib": "^2.4.0" } }, "sha512-kyOl3X0DuTiT1h2ft8r2fYO8JYtU9a9Xis/zBSiGArNaagCOWx90N1k2wxp18czFDH+OgcWGb5ZP/XMt3dcyPA=="],
|
||||
|
||||
"@img/sharp-webcontainers-wasm32/@img/sharp-wasm32/@emnapi/runtime": ["@emnapi/runtime@1.11.2", "", { "dependencies": { "tslib": "^2.4.0" } }, "sha512-kyOl3X0DuTiT1h2ft8r2fYO8JYtU9a9Xis/zBSiGArNaagCOWx90N1k2wxp18czFDH+OgcWGb5ZP/XMt3dcyPA=="],
|
||||
@@ -4504,6 +4502,8 @@
|
||||
|
||||
"@radix-ui/react-menu/@radix-ui/react-collection/@radix-ui/react-slot": ["@radix-ui/react-slot@1.2.0", "", { "dependencies": { "@radix-ui/react-compose-refs": "1.1.2" }, "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-ujc+V6r0HNDviYqIK3rW4ffgYiZ8g5DEHrGJVk4x7kTlLXRDILnKX9vAUYeIsLOoDpDJ0ujpqMkjH4w2ofuo6w=="],
|
||||
|
||||
"@radix-ui/react-menu/@radix-ui/react-popper/@floating-ui/react-dom": ["@floating-ui/react-dom@2.1.2", "", { "dependencies": { "@floating-ui/dom": "^1.0.0" }, "peerDependencies": { "react": ">=16.8.0", "react-dom": ">=16.8.0" } }, "sha512-06okr5cgPzMNBy+Ycse2A6udMi4bqwW/zgBF/rwjcNqWkyr82Mcg8b0vjX8OJpZFy/FKjJmw6wV7t44kK6kW7A=="],
|
||||
|
||||
"@radix-ui/react-menu/@radix-ui/react-popper/@radix-ui/react-arrow": ["@radix-ui/react-arrow@1.1.4", "", { "dependencies": { "@radix-ui/react-primitive": "2.1.0" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-qz+fxrqgNxG0dYew5l7qR3c7wdgRu1XVUHGnGYX7rg5HM4p9SWaRmJwfgR3J0SgyUKayLmzQIun+N6rWRgiRKw=="],
|
||||
|
||||
"@radix-ui/react-menu/@radix-ui/react-popper/@radix-ui/react-use-size": ["@radix-ui/react-use-size@1.1.1", "", { "dependencies": { "@radix-ui/react-use-layout-effect": "1.1.1" }, "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-ewrXRDTAqAXlkl6t/fkXWNAhFX9I+CkKlw6zjEwk86RSPKwZr3xpBRso655aqYafwtnbpHLj6toFzmd6xdVptQ=="],
|
||||
@@ -4528,6 +4528,8 @@
|
||||
|
||||
"@radix-ui/react-popover/@radix-ui/react-id/@radix-ui/react-use-layout-effect": ["@radix-ui/react-use-layout-effect@1.1.0", "", { "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-+FPE0rOdziWSrH9athwI1R0HDVbWlEhd+FR+aSDk4uWGmSJ9Z54sdZVDQPZAinJhJXwfT+qnj969mCsT2gfm5w=="],
|
||||
|
||||
"@radix-ui/react-popover/@radix-ui/react-popper/@floating-ui/react-dom": ["@floating-ui/react-dom@2.1.2", "", { "dependencies": { "@floating-ui/dom": "^1.0.0" }, "peerDependencies": { "react": ">=16.8.0", "react-dom": ">=16.8.0" } }, "sha512-06okr5cgPzMNBy+Ycse2A6udMi4bqwW/zgBF/rwjcNqWkyr82Mcg8b0vjX8OJpZFy/FKjJmw6wV7t44kK6kW7A=="],
|
||||
|
||||
"@radix-ui/react-popover/@radix-ui/react-popper/@radix-ui/react-arrow": ["@radix-ui/react-arrow@1.1.0", "", { "dependencies": { "@radix-ui/react-primitive": "2.0.0" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-FmlW1rCg7hBpEBwFbjHwCW6AmWLQM6g/v0Sn8XbP9NvmSZ2San1FpQeyPtufzOMSIx7Y4dzjlHoifhp+7NkZhw=="],
|
||||
|
||||
"@radix-ui/react-popover/@radix-ui/react-popper/@radix-ui/react-context": ["@radix-ui/react-context@1.1.0", "", { "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-OKrckBy+sMEgYM/sMmqmErVn0kZqrHPJze+Ql3DzYsDDp0hl0L62nx/2122/Bvps1qz645jlcu2tD9lrRSdf8A=="],
|
||||
@@ -4538,6 +4540,8 @@
|
||||
|
||||
"@radix-ui/react-popover/@radix-ui/react-popper/@radix-ui/rect": ["@radix-ui/rect@1.1.0", "", {}, "sha512-A9+lCBZoaMJlVKcRBz2YByCG+Cp2t6nAnMnNba+XiWxnj6r4JUFqfsgwocMBZU9LPtdxC6wB56ySYpc7LQIoJg=="],
|
||||
|
||||
"@radix-ui/react-popper/@floating-ui/react-dom/@floating-ui/dom": ["@floating-ui/dom@1.6.11", "", { "dependencies": { "@floating-ui/core": "^1.6.0", "@floating-ui/utils": "^0.2.8" } }, "sha512-qkMCxSR24v2vGkhYDo/UzxfJN3D4syqSjyuTFz6C7XcpU1pASPRieNI0Kj5VP3/503mOfYiGY891ugBX1GlABQ=="],
|
||||
|
||||
"@radix-ui/react-popper/@radix-ui/react-primitive/@radix-ui/react-slot": ["@radix-ui/react-slot@1.2.3", "", { "dependencies": { "@radix-ui/react-compose-refs": "1.1.2" }, "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A=="],
|
||||
|
||||
"@radix-ui/react-portal/@radix-ui/react-primitive/@radix-ui/react-slot": ["@radix-ui/react-slot@1.2.3", "", { "dependencies": { "@radix-ui/react-compose-refs": "1.1.2" }, "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A=="],
|
||||
@@ -4550,6 +4554,8 @@
|
||||
|
||||
"@radix-ui/react-tooltip/@radix-ui/react-id/@radix-ui/react-use-layout-effect": ["@radix-ui/react-use-layout-effect@1.1.0", "", { "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-+FPE0rOdziWSrH9athwI1R0HDVbWlEhd+FR+aSDk4uWGmSJ9Z54sdZVDQPZAinJhJXwfT+qnj969mCsT2gfm5w=="],
|
||||
|
||||
"@radix-ui/react-tooltip/@radix-ui/react-popper/@floating-ui/react-dom": ["@floating-ui/react-dom@2.1.2", "", { "dependencies": { "@floating-ui/dom": "^1.0.0" }, "peerDependencies": { "react": ">=16.8.0", "react-dom": ">=16.8.0" } }, "sha512-06okr5cgPzMNBy+Ycse2A6udMi4bqwW/zgBF/rwjcNqWkyr82Mcg8b0vjX8OJpZFy/FKjJmw6wV7t44kK6kW7A=="],
|
||||
|
||||
"@radix-ui/react-tooltip/@radix-ui/react-popper/@radix-ui/react-arrow": ["@radix-ui/react-arrow@1.1.2", "", { "dependencies": { "@radix-ui/react-primitive": "2.0.2" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-G+KcpzXHq24iH0uGG/pF8LyzpFJYGD4RfLjCIBfGdSLXvjLHST31RUiRVrupIBMvIppMgSzQ6l66iAxl03tdlg=="],
|
||||
|
||||
"@radix-ui/react-tooltip/@radix-ui/react-popper/@radix-ui/react-use-layout-effect": ["@radix-ui/react-use-layout-effect@1.1.0", "", { "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-+FPE0rOdziWSrH9athwI1R0HDVbWlEhd+FR+aSDk4uWGmSJ9Z54sdZVDQPZAinJhJXwfT+qnj969mCsT2gfm5w=="],
|
||||
@@ -4792,6 +4798,10 @@
|
||||
|
||||
"pino-abstract-transport/readable-stream/string_decoder": ["string_decoder@1.3.0", "", { "dependencies": { "safe-buffer": "~5.2.0" } }, "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA=="],
|
||||
|
||||
"radix-vue/@floating-ui/dom/@floating-ui/core": ["@floating-ui/core@1.6.8", "", { "dependencies": { "@floating-ui/utils": "^0.2.8" } }, "sha512-7XJ9cPU+yI2QeLS+FCSlqNFZJq8arvswefkZrYI1yQBbftw6FyrZOxYSh+9S7z7TpeWlRt9zJ5IhM1WIL334jA=="],
|
||||
|
||||
"radix-vue/@floating-ui/dom/@floating-ui/utils": ["@floating-ui/utils@0.2.8", "", {}, "sha512-kym7SodPp8/wloecOpcmSnWJsK7M0E5Wg8UcFA+uO4B9s5d0ywXOEro/8HM9x0rW+TljRzul/14UYz3TleT3ig=="],
|
||||
|
||||
"radix-vue/@floating-ui/vue/@floating-ui/utils": ["@floating-ui/utils@0.2.8", "", {}, "sha512-kym7SodPp8/wloecOpcmSnWJsK7M0E5Wg8UcFA+uO4B9s5d0ywXOEro/8HM9x0rW+TljRzul/14UYz3TleT3ig=="],
|
||||
|
||||
"radix-vue/@vueuse/core/@types/web-bluetooth": ["@types/web-bluetooth@0.0.20", "", {}, "sha512-g9gZnnXVq7gM7v3tJCWV/qw7w+KeOlSHAhgF9RytFyifW6AF61hdT2ucrYhPq9hLs5JIryeupHV3qGk95dH9ow=="],
|
||||
@@ -4876,10 +4886,20 @@
|
||||
|
||||
"@radix-ui/react-hover-card/@radix-ui/react-primitive/@radix-ui/react-slot/@radix-ui/react-compose-refs": ["@radix-ui/react-compose-refs@1.1.0", "", { "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-b4inOtiaOnYf9KWyO3jAeeCG6FeyfY6ldiEPanbUjWd+xIk5wZeHa8yVwmrJ2vderhu/BQvzCrJI0lHd+wIiqw=="],
|
||||
|
||||
"@radix-ui/react-menu/@radix-ui/react-popper/@floating-ui/react-dom/@floating-ui/dom": ["@floating-ui/dom@1.6.11", "", { "dependencies": { "@floating-ui/core": "^1.6.0", "@floating-ui/utils": "^0.2.8" } }, "sha512-qkMCxSR24v2vGkhYDo/UzxfJN3D4syqSjyuTFz6C7XcpU1pASPRieNI0Kj5VP3/503mOfYiGY891ugBX1GlABQ=="],
|
||||
|
||||
"@radix-ui/react-navigation-menu/@radix-ui/react-primitive/@radix-ui/react-slot/@radix-ui/react-compose-refs": ["@radix-ui/react-compose-refs@1.1.0", "", { "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-b4inOtiaOnYf9KWyO3jAeeCG6FeyfY6ldiEPanbUjWd+xIk5wZeHa8yVwmrJ2vderhu/BQvzCrJI0lHd+wIiqw=="],
|
||||
|
||||
"@radix-ui/react-popover/@radix-ui/react-popper/@floating-ui/react-dom/@floating-ui/dom": ["@floating-ui/dom@1.6.11", "", { "dependencies": { "@floating-ui/core": "^1.6.0", "@floating-ui/utils": "^0.2.8" } }, "sha512-qkMCxSR24v2vGkhYDo/UzxfJN3D4syqSjyuTFz6C7XcpU1pASPRieNI0Kj5VP3/503mOfYiGY891ugBX1GlABQ=="],
|
||||
|
||||
"@radix-ui/react-popper/@floating-ui/react-dom/@floating-ui/dom/@floating-ui/core": ["@floating-ui/core@1.6.8", "", { "dependencies": { "@floating-ui/utils": "^0.2.8" } }, "sha512-7XJ9cPU+yI2QeLS+FCSlqNFZJq8arvswefkZrYI1yQBbftw6FyrZOxYSh+9S7z7TpeWlRt9zJ5IhM1WIL334jA=="],
|
||||
|
||||
"@radix-ui/react-popper/@floating-ui/react-dom/@floating-ui/dom/@floating-ui/utils": ["@floating-ui/utils@0.2.8", "", {}, "sha512-kym7SodPp8/wloecOpcmSnWJsK7M0E5Wg8UcFA+uO4B9s5d0ywXOEro/8HM9x0rW+TljRzul/14UYz3TleT3ig=="],
|
||||
|
||||
"@radix-ui/react-popper/@radix-ui/react-primitive/@radix-ui/react-slot/@radix-ui/react-compose-refs": ["@radix-ui/react-compose-refs@1.1.0", "", { "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-b4inOtiaOnYf9KWyO3jAeeCG6FeyfY6ldiEPanbUjWd+xIk5wZeHa8yVwmrJ2vderhu/BQvzCrJI0lHd+wIiqw=="],
|
||||
|
||||
"@radix-ui/react-tooltip/@radix-ui/react-popper/@floating-ui/react-dom/@floating-ui/dom": ["@floating-ui/dom@1.6.11", "", { "dependencies": { "@floating-ui/core": "^1.6.0", "@floating-ui/utils": "^0.2.8" } }, "sha512-qkMCxSR24v2vGkhYDo/UzxfJN3D4syqSjyuTFz6C7XcpU1pASPRieNI0Kj5VP3/503mOfYiGY891ugBX1GlABQ=="],
|
||||
|
||||
"@scalar/components/@scalar/oas-utils/@scalar/workspace-store/@scalar/openapi-upgrader": ["@scalar/openapi-upgrader@0.1.3", "", { "dependencies": { "@scalar/openapi-types": "0.5.0" } }, "sha512-iROhcgy3vge6zsviPtoTLHale0nYt1PLhuMmJweQwJ0U23ZYyYhV5xgHtAd0OBEXuqT6rjYbJFvKOJZmJOwpNQ=="],
|
||||
|
||||
"@scalar/components/@scalar/themes/@scalar/types/@scalar/openapi-types": ["@scalar/openapi-types@0.5.0", "", { "dependencies": { "zod": "4.1.11" } }, "sha512-HJBcLa+/mPP+3TCcQngj/iW5UqynRosOQdEETXjmdy6Ngw8wBjwIcT6C86J5jufJ6sI8++HYnt+e7pAvp5FO6A=="],
|
||||
@@ -4944,6 +4964,18 @@
|
||||
|
||||
"@opennextjs/aws/express/serve-static/send/mime-types": ["mime-types@3.0.2", "", { "dependencies": { "mime-db": "^1.54.0" } }, "sha512-Lbgzdk0h4juoQ9fCKXW4by0UJqj+nOOrI9MJ1sSj4nI8aI2eo1qmvQEie4VD1glsS250n15LsWsYtCugiStS5A=="],
|
||||
|
||||
"@radix-ui/react-menu/@radix-ui/react-popper/@floating-ui/react-dom/@floating-ui/dom/@floating-ui/core": ["@floating-ui/core@1.6.8", "", { "dependencies": { "@floating-ui/utils": "^0.2.8" } }, "sha512-7XJ9cPU+yI2QeLS+FCSlqNFZJq8arvswefkZrYI1yQBbftw6FyrZOxYSh+9S7z7TpeWlRt9zJ5IhM1WIL334jA=="],
|
||||
|
||||
"@radix-ui/react-menu/@radix-ui/react-popper/@floating-ui/react-dom/@floating-ui/dom/@floating-ui/utils": ["@floating-ui/utils@0.2.8", "", {}, "sha512-kym7SodPp8/wloecOpcmSnWJsK7M0E5Wg8UcFA+uO4B9s5d0ywXOEro/8HM9x0rW+TljRzul/14UYz3TleT3ig=="],
|
||||
|
||||
"@radix-ui/react-popover/@radix-ui/react-popper/@floating-ui/react-dom/@floating-ui/dom/@floating-ui/core": ["@floating-ui/core@1.6.8", "", { "dependencies": { "@floating-ui/utils": "^0.2.8" } }, "sha512-7XJ9cPU+yI2QeLS+FCSlqNFZJq8arvswefkZrYI1yQBbftw6FyrZOxYSh+9S7z7TpeWlRt9zJ5IhM1WIL334jA=="],
|
||||
|
||||
"@radix-ui/react-popover/@radix-ui/react-popper/@floating-ui/react-dom/@floating-ui/dom/@floating-ui/utils": ["@floating-ui/utils@0.2.8", "", {}, "sha512-kym7SodPp8/wloecOpcmSnWJsK7M0E5Wg8UcFA+uO4B9s5d0ywXOEro/8HM9x0rW+TljRzul/14UYz3TleT3ig=="],
|
||||
|
||||
"@radix-ui/react-tooltip/@radix-ui/react-popper/@floating-ui/react-dom/@floating-ui/dom/@floating-ui/core": ["@floating-ui/core@1.6.8", "", { "dependencies": { "@floating-ui/utils": "^0.2.8" } }, "sha512-7XJ9cPU+yI2QeLS+FCSlqNFZJq8arvswefkZrYI1yQBbftw6FyrZOxYSh+9S7z7TpeWlRt9zJ5IhM1WIL334jA=="],
|
||||
|
||||
"@radix-ui/react-tooltip/@radix-ui/react-popper/@floating-ui/react-dom/@floating-ui/dom/@floating-ui/utils": ["@floating-ui/utils@0.2.8", "", {}, "sha512-kym7SodPp8/wloecOpcmSnWJsK7M0E5Wg8UcFA+uO4B9s5d0ywXOEro/8HM9x0rW+TljRzul/14UYz3TleT3ig=="],
|
||||
|
||||
"@scalar/draggable/vue/@vue/compiler-sfc/@babel/parser/@babel/types": ["@babel/types@7.28.2", "", { "dependencies": { "@babel/helper-string-parser": "^7.27.1", "@babel/helper-validator-identifier": "^7.27.1" } }, "sha512-ruv7Ae4J5dUYULmeXw1gmb7rYRz57OWCPM57pHojnLq/3Z1CK2lNSLTCVjxVk1F/TZHwOZZrOWi0ur95BbLxNQ=="],
|
||||
|
||||
"@scalar/draggable/vue/@vue/compiler-sfc/magic-string/@jridgewell/sourcemap-codec": ["@jridgewell/sourcemap-codec@1.5.0", "", {}, "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ=="],
|
||||
|
||||
@@ -639,33 +639,31 @@ button.openapi-mcp {
|
||||
@apply w-auto max-w-full;
|
||||
}
|
||||
|
||||
/* Prevent react-aria popover from setting overflow:auto on body */
|
||||
body:has(.openapi-select-popover) {
|
||||
overflow: unset !important;
|
||||
}
|
||||
|
||||
.openapi-select > button {
|
||||
@apply flex items-center font-normal cursor-pointer *:truncate gap-1.5 p-1.5 border border-tint-subtle text-tint-strong rounded-md straight-corners:rounded-none circular-corners:rounded-lg leading-none;
|
||||
@apply outline-none;
|
||||
@apply hover:bg-tint dark:hover:bg-tint-hover transition-all;
|
||||
}
|
||||
|
||||
.openapi-select:not(.openapi-select-unstyled) > button {
|
||||
@apply border border-tint-subtle bg-tint text-xs;
|
||||
/* The generic rule hovers to `bg-tint`, which is this variant's resting colour. */
|
||||
@apply hover:bg-tint-hover;
|
||||
}
|
||||
|
||||
.openapi-select-unstyled > button {
|
||||
@apply p-1 *:truncate max-w-full;
|
||||
}
|
||||
|
||||
.openapi-select > button[data-focused="true"] {
|
||||
.openapi-select > button:focus-visible {
|
||||
@apply outline-primary -outline-offset-1 outline;
|
||||
}
|
||||
|
||||
.openapi-select > button > span.react-aria-SelectValue {
|
||||
.openapi-select > button > span.openapi-select-value {
|
||||
@apply shrink truncate flex items-center;
|
||||
}
|
||||
|
||||
.openapi-select > button > .react-aria-SelectValue [slot="description"] {
|
||||
.openapi-select > button > .openapi-select-value [slot="description"] {
|
||||
display: none;
|
||||
}
|
||||
|
||||
@@ -678,16 +676,21 @@ body:has(.openapi-select-popover) {
|
||||
}
|
||||
|
||||
.openapi-select-popover {
|
||||
@apply min-w-32 z-10 max-w-[max(20rem,var(--trigger-width))] overflow-x-hidden max-h-52 overflow-y-auto p-1.5 border border-tint-subtle bg-tint-base backdrop-blur-xl rounded-corners:rounded-md circular-corners:rounded-xl straight-corners:rounded-none;
|
||||
@apply outline-none;
|
||||
@apply min-w-32 z-10 max-w-[max(20rem,var(--anchor-width))] p-1.5 border border-tint-subtle bg-tint-base rounded-corners:rounded-md circular-corners:rounded-xl straight-corners:rounded-none;
|
||||
@apply shadow-md shadow-tint-12/1 dark:shadow-tint-1/1;
|
||||
}
|
||||
|
||||
.openapi-select-popover[data-entering] {
|
||||
animation: popover-enter 0.2s ease-in-out;
|
||||
.openapi-select-popover[data-open] {
|
||||
@apply animate-scale-in;
|
||||
}
|
||||
|
||||
.openapi-select-popover[data-exiting] {
|
||||
animation: popover-leave 0.2s ease-in-out;
|
||||
.openapi-select-popover[data-closed] {
|
||||
@apply animate-scale-out;
|
||||
}
|
||||
|
||||
.openapi-select-list {
|
||||
@apply overflow-x-hidden max-h-52 overflow-y-auto;
|
||||
}
|
||||
|
||||
.openapi-select-item {
|
||||
@@ -699,7 +702,7 @@ body:has(.openapi-select-popover) {
|
||||
@apply flex flex-col gap-1 justify-start items-start;
|
||||
}
|
||||
|
||||
.openapi-select > button > span.react-aria-SelectValue:has(.openapi-statuscode),
|
||||
.openapi-select > button > span.openapi-select-value:has(.openapi-statuscode),
|
||||
.openapi-select-item:has(.openapi-statuscode) {
|
||||
@apply gap-2;
|
||||
}
|
||||
@@ -790,23 +793,6 @@ body:has(.openapi-select-popover) {
|
||||
|
||||
/* Tabs */
|
||||
.openapi-panel-header,
|
||||
.openapi-tabs-list {
|
||||
@apply flex flex-row gap-1.5 py-1.5 px-2.5 w-full overflow-x-auto no-scrollbar;
|
||||
}
|
||||
|
||||
.openapi-tabs-tab {
|
||||
@apply hover:bg-primary-hover whitespace-nowrap font-mono font-normal tabular-nums hover:text-primary cursor-pointer transition-all relative text-[0.813rem] text-tint px-1 border border-transparent rounded-md straight-corners:rounded-none circular-corners:rounded-lg;
|
||||
}
|
||||
|
||||
.openapi-tabs-tab[aria-selected="true"] {
|
||||
@apply text-primary-subtle! after:absolute after:-bottom-[calc(0.375rem+1px)] after:z-20 after:left-0 after:w-full after:h-px after:bg-primary-solid after:transition-all;
|
||||
}
|
||||
|
||||
.openapi-tabs-panel {
|
||||
@apply flex-1 text-sm relative focus-visible:outline-none;
|
||||
@apply before:w-full before:h-px before:absolute before:bg-tint-6 before:-top-px before:z-10;
|
||||
}
|
||||
|
||||
/* Disclosure group */
|
||||
.openapi-disclosure-group {
|
||||
@apply border-tint-subtle transition-all border-b border-x overflow-auto rounded-corners:last:rounded-b-xl circular-corners:last:rounded-b-2xl straight-corners:last:rounded-b-xs rounded-corners:first:rounded-t-xl circular-corners:first:rounded-t-2xl straight-corners:first:rounded-t-xs first:border-t relative;
|
||||
@@ -914,6 +900,10 @@ body:has(.openapi-select-popover) {
|
||||
@apply flex flex-row justify-between flex-wrap relative items-start gap-2 text-left -mx-3 px-3 -my-2.5 py-2.5 pr-10;
|
||||
}
|
||||
|
||||
.openapi-disclosure-trigger:focus-visible {
|
||||
outline: 2px solid rgb(var(--primary-color-500) / 0.4);
|
||||
}
|
||||
|
||||
.openapi-disclosure {
|
||||
@apply -mx-3 px-3 py-2.5 transition-all flex flex-col ring-tint-subtle;
|
||||
}
|
||||
@@ -942,14 +932,14 @@ body:has(.openapi-select-popover) {
|
||||
@apply bg-tint-subtle overflow-hidden;
|
||||
}
|
||||
|
||||
.openapi-disclosure[data-expanded="true"] {
|
||||
.openapi-disclosure[data-open] {
|
||||
@apply ring-1 shadow-sm;
|
||||
}
|
||||
|
||||
.openapi-disclosure[data-expanded="true"]:not(.openapi-schemas-disclosure,.openapi-required-scopes):not(:first-child) {
|
||||
.openapi-disclosure[data-open]:not(.openapi-schemas-disclosure,.openapi-required-scopes):not(:first-child) {
|
||||
@apply mt-2;
|
||||
}
|
||||
.openapi-disclosure[data-expanded="true"]:not(.openapi-schemas-disclosure,.openapi-required-scopes):not(:last-child) {
|
||||
.openapi-disclosure[data-open]:not(.openapi-schemas-disclosure,.openapi-required-scopes):not(:last-child) {
|
||||
@apply mb-2;
|
||||
}
|
||||
|
||||
@@ -1016,6 +1006,12 @@ body:has(.openapi-select-popover) {
|
||||
@apply p-0.5 tracking-wide leading-none uppercase text-[0.625rem] text-tint-subtle whitespace-nowrap absolute -left-3 -bottom-2.5 -translate-x-1/2 z-10 bg-tint-base border-y border-tint-subtle -rotate-6;
|
||||
}
|
||||
|
||||
/* z-index only applies to positioned elements, and the popup itself is static. */
|
||||
.openapi-tooltip-positioner,
|
||||
.openapi-select-positioner {
|
||||
@apply z-50;
|
||||
}
|
||||
|
||||
.openapi-tooltip {
|
||||
@apply flex items-center gap-1 bg-tint-base border border-tint-subtle text-tint-strong rounded-corners:rounded-md circular-corners:rounded-xl straight-corners:rounded-none font-medium px-1.5 py-0.5 shadow-sm text-[13px];
|
||||
}
|
||||
@@ -1024,52 +1020,12 @@ body:has(.openapi-select-popover) {
|
||||
@apply size-3 text-tint-strong;
|
||||
}
|
||||
|
||||
.openapi-tooltip[data-entering] {
|
||||
animation: tooltip-enter 0.2s ease-in-out forwards;
|
||||
.openapi-tooltip[data-open] {
|
||||
@apply animate-scale-in;
|
||||
}
|
||||
|
||||
.openapi-tooltip[data-exiting] {
|
||||
animation: tooltip-leave 0.2s ease-in-out forwards;
|
||||
}
|
||||
|
||||
@keyframes tooltip-enter {
|
||||
0% {
|
||||
opacity: 0;
|
||||
}
|
||||
100% {
|
||||
opacity: 1;
|
||||
}
|
||||
}
|
||||
|
||||
@keyframes tooltip-leave {
|
||||
0% {
|
||||
opacity: 1;
|
||||
}
|
||||
100% {
|
||||
opacity: 0;
|
||||
}
|
||||
}
|
||||
|
||||
@keyframes popover-enter {
|
||||
0% {
|
||||
opacity: 0;
|
||||
transform: translateY(4px) scale(0.95);
|
||||
}
|
||||
100% {
|
||||
opacity: 1;
|
||||
transform: translateY(0) scale(1);
|
||||
}
|
||||
}
|
||||
|
||||
@keyframes popover-leave {
|
||||
from {
|
||||
opacity: 1;
|
||||
transform: translateY(0) scale(1);
|
||||
}
|
||||
to {
|
||||
opacity: 0;
|
||||
transform: translateY(4px) scale(0.95);
|
||||
}
|
||||
.openapi-tooltip[data-closed] {
|
||||
@apply animate-scale-out;
|
||||
}
|
||||
|
||||
.openapi-copy-button {
|
||||
|
||||
@@ -10,6 +10,7 @@
|
||||
"version": "1.5.15",
|
||||
"sideEffects": false,
|
||||
"dependencies": {
|
||||
"@base-ui/react": "^1.7.0",
|
||||
"@gitbook/expr": "workspace:*",
|
||||
"@gitbook/openapi-parser": "workspace:*",
|
||||
"@scalar/api-client-react": "catalog:",
|
||||
@@ -17,13 +18,10 @@
|
||||
"@scalar/types": "^0.4.0",
|
||||
"classnames": "catalog:",
|
||||
"flatted": "^3.2.9",
|
||||
"js-yaml": "^4.1.0",
|
||||
"json-xml-parse": "^1.3.0",
|
||||
"react-aria-components": "^1.13.0",
|
||||
"react-aria": "^3.44.0",
|
||||
"react-stately": "^3.42.0",
|
||||
"usehooks-ts": "catalog:",
|
||||
"zustand": "^5.0.3",
|
||||
"js-yaml": "^4.1.0"
|
||||
"zustand": "^5.0.3"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@types/js-yaml": "^4.0.9",
|
||||
|
||||
@@ -1,10 +1,8 @@
|
||||
'use client';
|
||||
|
||||
import clsx from 'classnames';
|
||||
import { useRef } from 'react';
|
||||
import { mergeProps, useButton, useDisclosure, useFocusRing } from 'react-aria';
|
||||
import { useDisclosureState } from 'react-stately';
|
||||
import { OpenAPISelect, OpenAPISelectItem, useSelectState } from './OpenAPISelect';
|
||||
import { useId, useState } from 'react';
|
||||
import { OpenAPISelect, useSelectState } from './OpenAPISelect';
|
||||
import { Section, SectionBody, SectionHeader, SectionHeaderContent } from './StaticSection';
|
||||
|
||||
interface InteractiveSectionTab {
|
||||
@@ -53,14 +51,8 @@ export function InteractiveSection(props: {
|
||||
selectIcon,
|
||||
stateKey = 'interactive-section',
|
||||
} = props;
|
||||
const state = useDisclosureState({
|
||||
defaultExpanded: defaultOpened,
|
||||
});
|
||||
const panelRef = useRef<HTMLDivElement | null>(null);
|
||||
const triggerRef = useRef<HTMLButtonElement | null>(null);
|
||||
const { buttonProps: triggerProps, panelProps } = useDisclosure({}, state, panelRef);
|
||||
const { buttonProps } = useButton(triggerProps, triggerRef);
|
||||
const { isFocusVisible, focusProps } = useFocusRing();
|
||||
const [isExpanded, setIsExpanded] = useState(defaultOpened);
|
||||
const panelId = useId();
|
||||
const store = useSelectState(stateKey, defaultTab);
|
||||
|
||||
const selectedTab: InteractiveSectionTab | undefined =
|
||||
@@ -73,14 +65,14 @@ export function InteractiveSection(props: {
|
||||
'openapi-section',
|
||||
toggeable ? 'openapi-section-toggeable' : null,
|
||||
className,
|
||||
toggeable ? `${className}-${state.isExpanded ? 'opened' : 'closed'}` : null
|
||||
toggeable ? `${className}-${isExpanded ? 'opened' : 'closed'}` : null
|
||||
)}
|
||||
>
|
||||
{header ? (
|
||||
<SectionHeader
|
||||
onClick={() => {
|
||||
if (toggeable) {
|
||||
state.toggle();
|
||||
setIsExpanded((expanded) => !expanded);
|
||||
}
|
||||
}}
|
||||
className={className}
|
||||
@@ -88,14 +80,10 @@ export function InteractiveSection(props: {
|
||||
<SectionHeaderContent className={className}>
|
||||
{selectedTab?.body && toggeable ? (
|
||||
<button
|
||||
{...mergeProps(buttonProps, focusProps)}
|
||||
ref={triggerRef}
|
||||
type="button"
|
||||
aria-expanded={isExpanded}
|
||||
aria-controls={panelId}
|
||||
className={clsx('openapi-section-toggle', `${className}-toggle`)}
|
||||
style={{
|
||||
outline: isFocusVisible
|
||||
? '2px solid rgb(var(--primary-color-500) / 0.4)'
|
||||
: 'none',
|
||||
}}
|
||||
>
|
||||
{toggleIcon}
|
||||
</button>
|
||||
@@ -117,23 +105,19 @@ export function InteractiveSection(props: {
|
||||
stateKey={stateKey}
|
||||
items={tabs}
|
||||
onChange={() => {
|
||||
state.expand();
|
||||
setIsExpanded(true);
|
||||
}}
|
||||
icon={selectIcon}
|
||||
placement="bottom end"
|
||||
>
|
||||
{tabs.map((tab) => (
|
||||
<OpenAPISelectItem key={tab.key} id={tab.key} value={tab}>
|
||||
{tab.label}
|
||||
</OpenAPISelectItem>
|
||||
))}
|
||||
{(tab) => tab.label}
|
||||
</OpenAPISelect>
|
||||
) : null}
|
||||
</div>
|
||||
</SectionHeader>
|
||||
) : null}
|
||||
{(!toggeable || state.isExpanded) && selectedTab?.body ? (
|
||||
<SectionBody ref={panelRef} {...panelProps} className={className}>
|
||||
{(!toggeable || isExpanded) && selectedTab?.body ? (
|
||||
<SectionBody id={panelId} className={className}>
|
||||
{selectedTab?.body}
|
||||
</SectionBody>
|
||||
) : null}
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
'use client';
|
||||
import type { MediaTypeRenderer } from './OpenAPICodeSample';
|
||||
import { OpenAPISelect, OpenAPISelectItem, useSelectState } from './OpenAPISelect';
|
||||
import { OpenAPISelect, useSelectState } from './OpenAPISelect';
|
||||
import { createStateKey } from './utils';
|
||||
|
||||
export function OpenAPIMediaTypeExamplesSelector(props: {
|
||||
@@ -57,11 +57,7 @@ function MediaTypeSelector(props: {
|
||||
|
||||
return (
|
||||
<OpenAPISelect items={items} icon={selectIcon} stateKey={stateKey} placement="bottom start">
|
||||
{items.map((item) => (
|
||||
<OpenAPISelectItem key={item.key} id={item.key} value={item}>
|
||||
{item.label}
|
||||
</OpenAPISelectItem>
|
||||
))}
|
||||
{(item) => item.label}
|
||||
</OpenAPISelect>
|
||||
);
|
||||
}
|
||||
@@ -89,11 +85,7 @@ function ExamplesSelector(props: {
|
||||
stateKey={`media-type-sample-${renderer.mediaType}-${method}-${path}`}
|
||||
placement="bottom start"
|
||||
>
|
||||
{items.map((item) => (
|
||||
<OpenAPISelectItem key={item.key} id={item.key} value={item}>
|
||||
{item.label}
|
||||
</OpenAPISelectItem>
|
||||
))}
|
||||
{(item) => item.label}
|
||||
</OpenAPISelect>
|
||||
);
|
||||
}
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
'use client';
|
||||
|
||||
import { useCallback } from 'react';
|
||||
import type { Key } from 'react-aria';
|
||||
import { useStore } from 'zustand';
|
||||
import { OpenAPIPath } from './OpenAPIPath';
|
||||
import { OpenAPISelect, OpenAPISelectItem } from './OpenAPISelect';
|
||||
import type { Key } from './OpenAPISelect';
|
||||
import { OpenAPISelect, type OpenAPISelectItem } from './OpenAPISelect';
|
||||
import { StaticSection } from './StaticSection';
|
||||
import type { OpenAPIClientContext } from './context';
|
||||
import { getOrCreateStoreByKey } from './getOrCreateStoreByKey';
|
||||
@@ -47,11 +47,7 @@ function OpenAPICodeSampleHeader(props: {
|
||||
stateKey="codesample"
|
||||
placement="bottom end"
|
||||
>
|
||||
{items.map((item) => (
|
||||
<OpenAPISelectItem key={item.key} id={item.key} value={item}>
|
||||
{item.label}
|
||||
</OpenAPISelectItem>
|
||||
))}
|
||||
{(item) => item.label}
|
||||
</OpenAPISelect>
|
||||
) : items[0] ? (
|
||||
<span className="openapi-codesample-label">{items[0].label}</span>
|
||||
|
||||
@@ -2,25 +2,34 @@
|
||||
|
||||
import clsx from 'classnames';
|
||||
import { useState } from 'react';
|
||||
import { Button, type ButtonProps } from 'react-aria-components';
|
||||
import { OpenAPITooltip } from './OpenAPITooltip';
|
||||
import type { OpenAPIClientContext } from './context';
|
||||
import { t } from './translate';
|
||||
|
||||
export function OpenAPICopyButton(
|
||||
props: ButtonProps & {
|
||||
value: string;
|
||||
children: React.ReactNode;
|
||||
context: OpenAPIClientContext;
|
||||
label?: string;
|
||||
/**
|
||||
* Whether to show a tooltip.
|
||||
* @default true
|
||||
*/
|
||||
withTooltip?: boolean;
|
||||
}
|
||||
) {
|
||||
const { value, label, children, onPress, className, context, withTooltip = true } = props;
|
||||
export function OpenAPICopyButton(props: {
|
||||
value: string;
|
||||
children: React.ReactNode;
|
||||
context: OpenAPIClientContext;
|
||||
label?: string;
|
||||
className?: string;
|
||||
isDisabled?: boolean;
|
||||
onClick?: () => void;
|
||||
/**
|
||||
* Whether to show a tooltip.
|
||||
* @default true
|
||||
*/
|
||||
withTooltip?: boolean;
|
||||
}) {
|
||||
const {
|
||||
value,
|
||||
label,
|
||||
children,
|
||||
onClick,
|
||||
className,
|
||||
context,
|
||||
isDisabled,
|
||||
withTooltip = true,
|
||||
} = props;
|
||||
const [copied, setCopied] = useState(false);
|
||||
const [isOpen, setIsOpen] = useState(false);
|
||||
|
||||
@@ -38,21 +47,27 @@ export function OpenAPICopyButton(
|
||||
};
|
||||
|
||||
return (
|
||||
<OpenAPITooltip isDisabled={!withTooltip} isOpen={isOpen} onOpenChange={setIsOpen}>
|
||||
<Button
|
||||
type="button"
|
||||
preventFocusOnPress
|
||||
onPress={(e) => {
|
||||
handleCopy();
|
||||
onPress?.(e);
|
||||
}}
|
||||
className={clsx('openapi-copy-button', className)}
|
||||
{...props}
|
||||
>
|
||||
{children}
|
||||
</Button>
|
||||
<OpenAPITooltip disabled={!withTooltip} open={isOpen} onOpenChange={setIsOpen}>
|
||||
<OpenAPITooltip.Trigger
|
||||
render={
|
||||
<button
|
||||
type="button"
|
||||
disabled={isDisabled}
|
||||
data-disabled={isDisabled ? 'true' : undefined}
|
||||
// Stands in for react-aria's `preventFocusOnPress`.
|
||||
onMouseDown={(event) => event.preventDefault()}
|
||||
onClick={() => {
|
||||
handleCopy();
|
||||
onClick?.();
|
||||
}}
|
||||
className={clsx('openapi-copy-button', className)}
|
||||
>
|
||||
{children}
|
||||
</button>
|
||||
}
|
||||
/>
|
||||
|
||||
<OpenAPITooltip.Content isOpen={isOpen} onOpenChange={setIsOpen}>
|
||||
<OpenAPITooltip.Content>
|
||||
{copied ? (
|
||||
<>
|
||||
{context.icons.check}
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
'use client';
|
||||
import { Collapsible } from '@base-ui/react/collapsible';
|
||||
import clsx from 'classnames';
|
||||
import type React from 'react';
|
||||
import { useEffect, useState } from 'react';
|
||||
import { Button, Disclosure, DisclosurePanel } from 'react-aria-components';
|
||||
|
||||
/**
|
||||
* Display an interactive OpenAPI disclosure.
|
||||
@@ -45,20 +45,12 @@ export function OpenAPIDisclosure(props: {
|
||||
}, [id]);
|
||||
|
||||
return (
|
||||
<Disclosure
|
||||
<Collapsible.Root
|
||||
className={clsx('openapi-disclosure', className)}
|
||||
isExpanded={isExpanded}
|
||||
onExpandedChange={setIsExpanded}
|
||||
open={isExpanded}
|
||||
onOpenChange={setIsExpanded}
|
||||
>
|
||||
<Button
|
||||
slot="trigger"
|
||||
className="openapi-disclosure-trigger"
|
||||
style={({ isFocusVisible }) => ({
|
||||
outline: isFocusVisible
|
||||
? '2px solid rgb(var(--primary-color-500) / 0.4)'
|
||||
: 'none',
|
||||
})}
|
||||
>
|
||||
<Collapsible.Trigger className="openapi-disclosure-trigger">
|
||||
{header}
|
||||
<div className="openapi-disclosure-trigger-label">
|
||||
{label ? (
|
||||
@@ -66,10 +58,8 @@ export function OpenAPIDisclosure(props: {
|
||||
) : null}
|
||||
{icon}
|
||||
</div>
|
||||
</Button>
|
||||
{isExpanded ? (
|
||||
<DisclosurePanel className="openapi-disclosure-panel">{children}</DisclosurePanel>
|
||||
) : null}
|
||||
</Disclosure>
|
||||
</Collapsible.Trigger>
|
||||
<Collapsible.Panel className="openapi-disclosure-panel">{children}</Collapsible.Panel>
|
||||
</Collapsible.Root>
|
||||
);
|
||||
}
|
||||
|
||||
@@ -1,17 +1,9 @@
|
||||
'use client';
|
||||
|
||||
import clsx from 'classnames';
|
||||
import { createContext, useContext, useRef } from 'react';
|
||||
import { mergeProps, useButton, useDisclosure, useFocusRing, useId } from 'react-aria';
|
||||
import type { Key } from 'react-aria';
|
||||
import {
|
||||
type DisclosureGroupProps,
|
||||
type DisclosureGroupState,
|
||||
useDisclosureGroupState,
|
||||
useDisclosureState,
|
||||
} from 'react-stately';
|
||||
import { createContext, useContext, useId } from 'react';
|
||||
import { useStore } from 'zustand';
|
||||
import { OpenAPISelect, OpenAPISelectItem, useSelectState } from './OpenAPISelect';
|
||||
import { OpenAPISelect, useSelectState } from './OpenAPISelect';
|
||||
import { getOrCreateDisclosureStoreByKey } from './getOrCreateDisclosureStoreByKey';
|
||||
|
||||
interface Props {
|
||||
@@ -36,8 +28,25 @@ type TDisclosureGroup = {
|
||||
}[];
|
||||
};
|
||||
|
||||
export type Key = string | number;
|
||||
|
||||
type DisclosureGroupState = {
|
||||
expandedKeys: Set<Key>;
|
||||
toggleKey: (key: Key) => void;
|
||||
isDisabled: boolean;
|
||||
};
|
||||
|
||||
const DisclosureGroupStateContext = createContext<DisclosureGroupState | null>(null);
|
||||
|
||||
type DisclosureGroupProps = {
|
||||
/** When false, expanding a group collapses the others. */
|
||||
allowsMultipleExpanded?: boolean;
|
||||
expandedKeys?: Iterable<Key>;
|
||||
defaultExpandedKeys?: Iterable<Key>;
|
||||
onExpandedChange?: (keys: Set<Key>) => void;
|
||||
isDisabled?: boolean;
|
||||
};
|
||||
|
||||
function useDisclosureGroupStore(stateKey = 'disclosure-group', initialKeys?: Iterable<Key>) {
|
||||
const store = useStore(getOrCreateDisclosureStoreByKey(stateKey, initialKeys));
|
||||
return store;
|
||||
@@ -69,16 +78,23 @@ export function OpenAPIDisclosureGroup(props: DisclosureGroupProps & Props) {
|
||||
initialKeys
|
||||
);
|
||||
|
||||
const state = useDisclosureGroupState({
|
||||
...props,
|
||||
expandedKeys: isControlled ? expandedKeys : storeExpandedKeys,
|
||||
onExpandedChange: (keys) => {
|
||||
if (!isControlled) {
|
||||
setExpandedKeys(keys);
|
||||
const currentKeys = new Set(isControlled ? expandedKeys : storeExpandedKeys);
|
||||
const state: DisclosureGroupState = {
|
||||
expandedKeys: currentKeys,
|
||||
isDisabled: props.isDisabled ?? false,
|
||||
toggleKey: (key) => {
|
||||
const next = new Set(props.allowsMultipleExpanded ? currentKeys : []);
|
||||
if (currentKeys.has(key)) {
|
||||
next.delete(key);
|
||||
} else {
|
||||
next.add(key);
|
||||
}
|
||||
onExpandedChange?.(keys);
|
||||
if (!isControlled) {
|
||||
setExpandedKeys(next);
|
||||
}
|
||||
onExpandedChange?.(next);
|
||||
},
|
||||
});
|
||||
};
|
||||
|
||||
return (
|
||||
<DisclosureGroupStateContext.Provider value={state}>
|
||||
@@ -109,48 +125,33 @@ function DisclosureItem(props: {
|
||||
const id = group.key || defaultId;
|
||||
const groupState = useContext(DisclosureGroupStateContext);
|
||||
const isExpanded = groupState?.expandedKeys.has(id) || false;
|
||||
const state = useDisclosureState({
|
||||
isExpanded,
|
||||
onExpandedChange() {
|
||||
if (groupState) {
|
||||
groupState.toggleKey(id);
|
||||
}
|
||||
},
|
||||
});
|
||||
|
||||
const panelRef = useRef<HTMLDivElement | null>(null);
|
||||
const triggerRef = useRef<HTMLDivElement | null>(null);
|
||||
const isDisabled = groupState?.isDisabled || !group.tabs?.length || false;
|
||||
const { buttonProps: triggerProps, panelProps } = useDisclosure(
|
||||
{
|
||||
...props,
|
||||
isExpanded,
|
||||
isDisabled,
|
||||
},
|
||||
state,
|
||||
panelRef
|
||||
);
|
||||
const { buttonProps } = useButton(triggerProps, triggerRef);
|
||||
const { isFocusVisible, focusProps } = useFocusRing();
|
||||
const panelId = `${id}-panel`;
|
||||
const toggle = () => {
|
||||
if (!isDisabled) {
|
||||
groupState?.toggleKey(id);
|
||||
}
|
||||
};
|
||||
|
||||
const defaultTab = group.tabs?.[0]?.key || '';
|
||||
const store = useSelectState(selectStateKey, defaultTab);
|
||||
const selectedTab = group.tabs?.find((tab) => tab.key === store.key) || group.tabs?.[0];
|
||||
|
||||
return (
|
||||
<div
|
||||
className={clsx('openapi-disclosure-group', className)}
|
||||
aria-expanded={state.isExpanded}
|
||||
>
|
||||
<div className={clsx('openapi-disclosure-group', className)}>
|
||||
{/* A div, not a button: the header hosts the media-type select. */}
|
||||
<div
|
||||
slot="trigger"
|
||||
ref={triggerRef}
|
||||
{...mergeProps(buttonProps, focusProps)}
|
||||
role="button"
|
||||
tabIndex={isDisabled ? -1 : 0}
|
||||
aria-expanded={isExpanded}
|
||||
aria-controls={panelId}
|
||||
aria-disabled={isDisabled}
|
||||
style={{
|
||||
outline: isFocusVisible
|
||||
? '2px solid rgb(var(--primary-color-500)/0.4)'
|
||||
: 'none',
|
||||
onClick={toggle}
|
||||
onKeyDown={(event) => {
|
||||
if (event.key === 'Enter' || event.key === ' ') {
|
||||
event.preventDefault();
|
||||
toggle();
|
||||
}
|
||||
}}
|
||||
className="openapi-disclosure-group-trigger"
|
||||
>
|
||||
@@ -175,16 +176,14 @@ function DisclosureItem(props: {
|
||||
icon={selectIcon}
|
||||
stateKey={selectStateKey}
|
||||
onChange={() => {
|
||||
state.expand();
|
||||
if (!isExpanded) {
|
||||
groupState?.toggleKey(id);
|
||||
}
|
||||
}}
|
||||
items={group.tabs}
|
||||
placement="bottom end"
|
||||
>
|
||||
{group.tabs.map((tab) => (
|
||||
<OpenAPISelectItem key={tab.key} id={tab.key} value={tab}>
|
||||
{tab.label}
|
||||
</OpenAPISelectItem>
|
||||
))}
|
||||
{(tab) => tab.label}
|
||||
</OpenAPISelect>
|
||||
) : group.tabs[0]?.label ? (
|
||||
<span>{group.tabs[0].label}</span>
|
||||
@@ -194,8 +193,8 @@ function DisclosureItem(props: {
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{state.isExpanded && selectedTab && (
|
||||
<div className="openapi-disclosure-group-panel" ref={panelRef} {...panelProps}>
|
||||
{isExpanded && selectedTab && (
|
||||
<div className="openapi-disclosure-group-panel" id={panelId}>
|
||||
{selectedTab.body}
|
||||
</div>
|
||||
)}
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
'use client';
|
||||
|
||||
import type { Key } from 'react-aria';
|
||||
import { OpenAPIEmptyExample } from './OpenAPIExample';
|
||||
import { OpenAPISelect, OpenAPISelectItem, useSelectState } from './OpenAPISelect';
|
||||
import type { Key } from './OpenAPISelect';
|
||||
import { OpenAPISelect, type OpenAPISelectItem, useSelectState } from './OpenAPISelect';
|
||||
import { StaticSection } from './StaticSection';
|
||||
import type { OpenAPIClientContext } from './context';
|
||||
|
||||
@@ -84,11 +84,7 @@ function OpenAPIMediaTypeFooter(props: {
|
||||
stateKey={stateKey}
|
||||
placement="bottom start"
|
||||
>
|
||||
{items.map((item) => (
|
||||
<OpenAPISelectItem key={item.key} id={item.key} value={item}>
|
||||
<span>{item.label}</span>
|
||||
</OpenAPISelectItem>
|
||||
))}
|
||||
{(item) => <span>{item.label}</span>}
|
||||
</OpenAPISelect>
|
||||
)}
|
||||
|
||||
@@ -99,11 +95,7 @@ function OpenAPIMediaTypeFooter(props: {
|
||||
stateKey={`${stateKey}-examples`}
|
||||
placement="bottom start"
|
||||
>
|
||||
{examples.map((example) => (
|
||||
<OpenAPISelectItem key={example.key} id={example.key} value={example}>
|
||||
<span>{example.label}</span>
|
||||
</OpenAPISelectItem>
|
||||
))}
|
||||
{(example) => <span>{example.label}</span>}
|
||||
</OpenAPISelect>
|
||||
) : null}
|
||||
</>
|
||||
|
||||
@@ -1,9 +1,7 @@
|
||||
'use client';
|
||||
import { Text } from 'react-aria-components';
|
||||
import type { OpenAPIPathProps } from './OpenAPIPath';
|
||||
import { OpenAPIPathItem } from './OpenAPIPathItem';
|
||||
import { OpenAPISelect, OpenAPISelectItem, useSelectState } from './OpenAPISelect';
|
||||
import { OpenAPITooltip } from './OpenAPITooltip';
|
||||
import { OpenAPISelect, useSelectState } from './OpenAPISelect';
|
||||
import type { OpenAPIClientContext } from './context';
|
||||
import { formatPath } from './formatPath';
|
||||
import type { OpenAPIServerWithCustomProperties } from './types';
|
||||
@@ -46,33 +44,26 @@ export function OpenAPIPathMultipleServers(
|
||||
context={context}
|
||||
>
|
||||
{withServer ? (
|
||||
<OpenAPITooltip>
|
||||
<OpenAPISelect
|
||||
className="openapi-select openapi-select-unstyled"
|
||||
items={items}
|
||||
stateKey={serversStateKey}
|
||||
placement="bottom start"
|
||||
icon={context.icons.chevronDown}
|
||||
defaultValue={defaultServer}
|
||||
onChange={setKey}
|
||||
>
|
||||
{items.map((item) => (
|
||||
<OpenAPISelectItem
|
||||
textValue={item.label}
|
||||
key={item.key}
|
||||
id={item.key}
|
||||
value={item}
|
||||
className="openapi-select-item-column"
|
||||
>
|
||||
<Text slot="label">{item.label}</Text>
|
||||
{item.description ? (
|
||||
<Text slot="description">{item.description}</Text>
|
||||
) : null}
|
||||
</OpenAPISelectItem>
|
||||
))}
|
||||
</OpenAPISelect>
|
||||
<OpenAPITooltip.Content>Click to select a server</OpenAPITooltip.Content>
|
||||
</OpenAPITooltip>
|
||||
<OpenAPISelect
|
||||
className="openapi-select openapi-select-unstyled"
|
||||
items={items}
|
||||
itemClassName="openapi-select-item-column"
|
||||
stateKey={serversStateKey}
|
||||
placement="bottom start"
|
||||
icon={context.icons.chevronDown}
|
||||
defaultValue={defaultServer}
|
||||
onChange={setKey}
|
||||
tooltip="Click to select a server"
|
||||
>
|
||||
{(item) => (
|
||||
<>
|
||||
<span slot="label">{item.label}</span>
|
||||
{item.description ? (
|
||||
<span slot="description">{item.description}</span>
|
||||
) : null}
|
||||
</>
|
||||
)}
|
||||
</OpenAPISelect>
|
||||
) : null}
|
||||
{formattedPath}
|
||||
</OpenAPIPathItem>
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
'use client';
|
||||
|
||||
import clsx from 'classnames';
|
||||
import type { Key } from 'react-aria';
|
||||
import { OpenAPISelect, OpenAPISelectItem, useSelectState } from './OpenAPISelect';
|
||||
import type { Key } from './OpenAPISelect';
|
||||
import { OpenAPISelect, type OpenAPISelectItem, useSelectState } from './OpenAPISelect';
|
||||
import { StaticSection } from './StaticSection';
|
||||
import { createStateKey, getStatusCodeClassName } from './utils';
|
||||
|
||||
@@ -61,11 +61,7 @@ function OpenAPIResponseExampleHeader(props: {
|
||||
stateKey={getResponseExampleStateKey()}
|
||||
placement="bottom start"
|
||||
>
|
||||
{items.map((item) => (
|
||||
<OpenAPISelectItem key={item.key} id={item.key} value={item}>
|
||||
<OpenAPIResponseExampleItem item={item} />
|
||||
</OpenAPISelectItem>
|
||||
))}
|
||||
{(item) => <OpenAPIResponseExampleItem item={item} />}
|
||||
</OpenAPISelect>
|
||||
);
|
||||
}
|
||||
|
||||
@@ -2,11 +2,11 @@
|
||||
|
||||
import type { OpenAPIV3, OpenAPIV3_1 } from '@gitbook/openapi-parser';
|
||||
import clsx from 'classnames';
|
||||
import type { Key } from 'react-aria';
|
||||
import { Markdown } from './Markdown';
|
||||
import { OpenAPIDisclosureGroup } from './OpenAPIDisclosureGroup';
|
||||
import { OpenAPIResponse } from './OpenAPIResponse';
|
||||
import { useResponseExamplesState } from './OpenAPIResponseExampleContent';
|
||||
import type { Key } from './OpenAPISelect';
|
||||
import { StaticSection } from './StaticSection';
|
||||
import type { OpenAPIClientContext } from './context';
|
||||
import { t } from './translate';
|
||||
|
||||
@@ -1,36 +1,39 @@
|
||||
'use client';
|
||||
|
||||
import { Select } from '@base-ui/react/select';
|
||||
import clsx from 'classnames';
|
||||
import { useCallback } from 'react';
|
||||
import {
|
||||
Button,
|
||||
type Key,
|
||||
ListBox,
|
||||
ListBoxItem,
|
||||
type ListBoxItemProps,
|
||||
Popover,
|
||||
type PopoverProps,
|
||||
Select,
|
||||
type SelectProps,
|
||||
SelectValue,
|
||||
} from 'react-aria-components';
|
||||
import { useStore } from 'zustand';
|
||||
import { OpenAPITooltip } from './OpenAPITooltip';
|
||||
import { getOrCreateStoreByKey } from './getOrCreateStoreByKey';
|
||||
|
||||
export type Key = string | number;
|
||||
|
||||
export type OpenAPISelectItem = {
|
||||
key: Key;
|
||||
label: string | React.ReactNode;
|
||||
};
|
||||
|
||||
interface OpenAPISelectProps<T extends OpenAPISelectItem> extends Omit<SelectProps<T>, 'children'> {
|
||||
/** react-aria's `placement`, reduced to what the call sites actually use. */
|
||||
type Placement = 'bottom start' | 'bottom end' | 'top start' | 'top end';
|
||||
|
||||
interface OpenAPISelectProps<T extends OpenAPISelectItem> {
|
||||
items: T[];
|
||||
children: React.ReactNode | ((item: T) => React.ReactNode);
|
||||
placement?: PopoverProps['placement'];
|
||||
/** A function, not children: the trigger has to render the selected item's markup too. */
|
||||
children: (item: T) => React.ReactNode;
|
||||
className?: string;
|
||||
itemClassName?: string;
|
||||
placement?: Placement;
|
||||
stateKey?: string;
|
||||
value?: Key;
|
||||
defaultValue?: Key;
|
||||
onChange?: (key: Key) => void;
|
||||
/**
|
||||
* Icon to display in the select button.
|
||||
*/
|
||||
icon?: React.ReactNode | null;
|
||||
/** Owned here because only this component holds the trigger the tooltip anchors to. */
|
||||
tooltip?: React.ReactNode;
|
||||
}
|
||||
|
||||
export function useSelectState(stateKey = 'select-state', initialKey: Key = 'default') {
|
||||
@@ -42,51 +45,114 @@ export function useSelectState(stateKey = 'select-state', initialKey: Key = 'def
|
||||
}
|
||||
|
||||
export function OpenAPISelect<T extends OpenAPISelectItem>(props: OpenAPISelectProps<T>) {
|
||||
const { icon, items, children, className, placement, stateKey, value, onChange, defaultValue } =
|
||||
props;
|
||||
const {
|
||||
icon,
|
||||
items,
|
||||
children,
|
||||
className,
|
||||
itemClassName,
|
||||
placement,
|
||||
stateKey,
|
||||
value,
|
||||
onChange,
|
||||
defaultValue,
|
||||
tooltip,
|
||||
} = props;
|
||||
|
||||
const state = useSelectState(stateKey, defaultValue ?? items[0]?.key);
|
||||
|
||||
const selected = items.find((item) => item.key === state.key) || items[0];
|
||||
const [side, align] = (placement ?? 'bottom start').split(' ') as [
|
||||
'bottom' | 'top',
|
||||
'start' | 'end',
|
||||
];
|
||||
|
||||
// An element, not a component: declaring one inline would give React a new type on every
|
||||
// render and remount the whole trigger each time.
|
||||
const trigger = (
|
||||
<Select.Trigger aria-label="OpenAPI Select">
|
||||
<Select.Value className="openapi-select-value">
|
||||
{(current) => {
|
||||
const item = items.find((entry) => entry.key === current) ?? selected;
|
||||
return item ? children(item) : null;
|
||||
}}
|
||||
</Select.Value>
|
||||
{icon !== null ? icon || '▼' : null}
|
||||
</Select.Trigger>
|
||||
);
|
||||
|
||||
return (
|
||||
<Select
|
||||
aria-label="OpenAPI Select"
|
||||
{...props}
|
||||
<Select.Root<Key>
|
||||
value={value ?? selected?.key}
|
||||
onChange={(key) => {
|
||||
onChange?.(key);
|
||||
state.setKey(key);
|
||||
onValueChange={(key) => {
|
||||
onChange?.(key as Key);
|
||||
state.setKey(key as Key);
|
||||
}}
|
||||
className={clsx('openapi-select', className)}
|
||||
// The select sits inside a document, so it must not lock scrolling behind a modal layer.
|
||||
modal={false}
|
||||
>
|
||||
<Button>
|
||||
<SelectValue />
|
||||
{icon !== null ? icon || '▼' : null}
|
||||
</Button>
|
||||
<Popover placement={placement} className="openapi-select-popover">
|
||||
<ListBox className="openapi-select-listbox" items={items}>
|
||||
{children}
|
||||
</ListBox>
|
||||
</Popover>
|
||||
</Select>
|
||||
<div className={clsx('openapi-select', className)}>
|
||||
{tooltip ? (
|
||||
<OpenAPITooltip>
|
||||
<OpenAPITooltip.Trigger render={trigger} />
|
||||
<OpenAPITooltip.Content>{tooltip}</OpenAPITooltip.Content>
|
||||
</OpenAPITooltip>
|
||||
) : (
|
||||
trigger
|
||||
)}
|
||||
</div>
|
||||
<Select.Portal>
|
||||
<Select.Positioner
|
||||
className="openapi-select-positioner"
|
||||
side={side}
|
||||
align={align}
|
||||
sideOffset={8}
|
||||
// Absolute positioning makes floating-ui walk offset parents and read scroll
|
||||
// offsets on every measure, which dominates the profile on long pages.
|
||||
positionMethod="fixed"
|
||||
// Base UI overlaps the trigger by default to line the selected item up with it.
|
||||
alignItemWithTrigger={false}
|
||||
>
|
||||
<Select.Popup className="openapi-select-popover">
|
||||
{/* Base UI scrolls and reveals the selected item through the list, not the popup. */}
|
||||
<Select.List className="openapi-select-list">
|
||||
{items.map((item) => (
|
||||
<OpenAPISelectItem
|
||||
key={item.key}
|
||||
value={item.key}
|
||||
className={itemClassName}
|
||||
>
|
||||
{children(item)}
|
||||
</OpenAPISelectItem>
|
||||
))}
|
||||
</Select.List>
|
||||
</Select.Popup>
|
||||
</Select.Positioner>
|
||||
</Select.Portal>
|
||||
</Select.Root>
|
||||
);
|
||||
}
|
||||
|
||||
export function OpenAPISelectItem(props: ListBoxItemProps) {
|
||||
export function OpenAPISelectItem(props: {
|
||||
value: Key;
|
||||
children: React.ReactNode;
|
||||
className?: string;
|
||||
}) {
|
||||
const { value, children, className } = props;
|
||||
return (
|
||||
<ListBoxItem
|
||||
{...props}
|
||||
className={({ isFocused, isSelected }) =>
|
||||
<Select.Item
|
||||
value={value}
|
||||
className={({ selected, highlighted }) =>
|
||||
clsx(
|
||||
'openapi-select-item',
|
||||
{
|
||||
'openapi-select-item-focused': isFocused,
|
||||
'openapi-select-item-selected': isSelected,
|
||||
'openapi-select-item-focused': highlighted,
|
||||
'openapi-select-item-selected': selected,
|
||||
},
|
||||
props.className
|
||||
className
|
||||
)
|
||||
}
|
||||
/>
|
||||
>
|
||||
{children}
|
||||
</Select.Item>
|
||||
);
|
||||
}
|
||||
|
||||
@@ -1,147 +0,0 @@
|
||||
'use client';
|
||||
|
||||
import { createContext, useContext, useEffect, useMemo, useRef, useState } from 'react';
|
||||
import { type Key, Tab, TabList, TabPanel, Tabs, type TabsProps } from 'react-aria-components';
|
||||
import { useEventCallback } from 'usehooks-ts';
|
||||
import { getOrCreateStoreByKey } from './getOrCreateStoreByKey';
|
||||
|
||||
export type TabItem = {
|
||||
key: Key;
|
||||
label: string;
|
||||
body: React.ReactNode;
|
||||
footer?: React.ReactNode;
|
||||
};
|
||||
|
||||
type OpenAPITabsContextData = {
|
||||
items: TabItem[];
|
||||
selectedTab: TabItem | null;
|
||||
};
|
||||
|
||||
const OpenAPITabsContext = createContext<OpenAPITabsContextData | null>(null);
|
||||
|
||||
function useOpenAPITabsContext() {
|
||||
const context = useContext(OpenAPITabsContext);
|
||||
if (!context) {
|
||||
throw new Error('OpenAPITabsContext is missing');
|
||||
}
|
||||
return context;
|
||||
}
|
||||
|
||||
/**
|
||||
* The OpenAPI Tabs wrapper component.
|
||||
*/
|
||||
export function OpenAPITabs(
|
||||
props: React.PropsWithChildren<TabsProps & { items: TabItem[]; stateKey?: string }>
|
||||
) {
|
||||
const { children, items, stateKey } = props;
|
||||
const [tabKey, setTabKey] = useState<Key | null>(() => {
|
||||
if (stateKey && typeof window !== 'undefined') {
|
||||
const store = getOrCreateStoreByKey(stateKey);
|
||||
const tabKey = store.getState().key;
|
||||
if (tabKey) {
|
||||
return tabKey;
|
||||
}
|
||||
}
|
||||
return items[0]?.key ?? null;
|
||||
});
|
||||
const selectTab = useEventCallback((key: Key | null) => {
|
||||
if (!key || key === tabKey) {
|
||||
return;
|
||||
}
|
||||
const tab = items.find((item) => item.key === key);
|
||||
if (!tab) {
|
||||
return;
|
||||
}
|
||||
setTabKey(key);
|
||||
});
|
||||
const selectedTab = items.find((item) => item.key === tabKey) ?? items[0] ?? null;
|
||||
const cancelDeferRef = useRef<(() => void) | null>(null);
|
||||
useEffect(() => {
|
||||
if (!stateKey) {
|
||||
return undefined;
|
||||
}
|
||||
const store = getOrCreateStoreByKey(stateKey);
|
||||
return store.subscribe((state) => {
|
||||
cancelDeferRef.current?.();
|
||||
cancelDeferRef.current = defer(() => selectTab(state.key));
|
||||
});
|
||||
}, [stateKey, selectTab]);
|
||||
useEffect(() => {
|
||||
return () => cancelDeferRef.current?.();
|
||||
}, []);
|
||||
const contextValue = useMemo(() => ({ items, selectedTab }), [items, selectedTab]);
|
||||
return (
|
||||
<OpenAPITabsContext.Provider value={contextValue}>
|
||||
<Tabs
|
||||
className="openapi-tabs"
|
||||
onSelectionChange={(tabKey) => {
|
||||
selectTab(tabKey);
|
||||
if (stateKey) {
|
||||
const store = getOrCreateStoreByKey(stateKey);
|
||||
store.setState({ key: tabKey });
|
||||
}
|
||||
}}
|
||||
selectedKey={tabKey}
|
||||
>
|
||||
{children}
|
||||
</Tabs>
|
||||
</OpenAPITabsContext.Provider>
|
||||
);
|
||||
}
|
||||
|
||||
const defer = (fn: () => void) => {
|
||||
const id = setTimeout(fn, 0);
|
||||
return () => clearTimeout(id);
|
||||
};
|
||||
|
||||
/**
|
||||
* The OpenAPI Tabs list component.
|
||||
* This component should be used as a child of the OpenAPITabs component.
|
||||
* It renders the list of tabs.
|
||||
*/
|
||||
export function OpenAPITabsList() {
|
||||
const { items } = useOpenAPITabsContext();
|
||||
|
||||
return (
|
||||
<TabList className="openapi-tabs-list">
|
||||
{items.map((tab) => (
|
||||
<Tab
|
||||
key={tab.key}
|
||||
id={tab.key}
|
||||
style={({ isFocusVisible }) => ({
|
||||
outline: isFocusVisible
|
||||
? '2px solid rgb(var(--primary-color-500)/0.4)'
|
||||
: 'none',
|
||||
})}
|
||||
className="openapi-tabs-tab"
|
||||
>
|
||||
{tab.label}
|
||||
</Tab>
|
||||
))}
|
||||
</TabList>
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* The OpenAPI Tabs panels component.
|
||||
* This component should be used as a child of the OpenAPITabs component.
|
||||
* It renders the content of the selected tab.
|
||||
*/
|
||||
export function OpenAPITabsPanels() {
|
||||
const { selectedTab } = useOpenAPITabsContext();
|
||||
|
||||
if (!selectedTab) {
|
||||
return null;
|
||||
}
|
||||
|
||||
const key = selectedTab.key.toString();
|
||||
|
||||
return (
|
||||
<TabPanel id={key} className="openapi-tabs-panel">
|
||||
<div className="openapi-panel-body">{selectedTab.body}</div>
|
||||
{selectedTab.footer ? (
|
||||
<div className="openapi-panel-footer">{selectedTab.footer}</div>
|
||||
) : null}
|
||||
</TabPanel>
|
||||
);
|
||||
}
|
||||
@@ -1,34 +1,58 @@
|
||||
'use client';
|
||||
|
||||
import { Tooltip } from '@base-ui/react/tooltip';
|
||||
import classNames from 'classnames';
|
||||
import type { TooltipTriggerProps } from 'react-aria';
|
||||
import { Tooltip, type TooltipProps, TooltipTrigger } from 'react-aria-components';
|
||||
|
||||
export function OpenAPITooltip(
|
||||
props: TooltipTriggerProps & {
|
||||
children: React.ReactNode;
|
||||
}
|
||||
) {
|
||||
const { children, ...rest } = props;
|
||||
export function OpenAPITooltip(props: {
|
||||
children: React.ReactNode;
|
||||
open?: boolean;
|
||||
onOpenChange?: (open: boolean) => void;
|
||||
disabled?: boolean;
|
||||
}) {
|
||||
const { children, open, onOpenChange, disabled } = props;
|
||||
return (
|
||||
<TooltipTrigger {...rest} closeDelay={200} delay={200}>
|
||||
{children}
|
||||
</TooltipTrigger>
|
||||
<Tooltip.Provider delay={200} closeDelay={200}>
|
||||
<Tooltip.Root
|
||||
open={open}
|
||||
onOpenChange={onOpenChange}
|
||||
disabled={disabled}
|
||||
// These are plain labels; keeping them alive while the pointer travels towards them
|
||||
// just makes them linger after the trigger is left.
|
||||
disableHoverablePopup
|
||||
>
|
||||
{children}
|
||||
</Tooltip.Root>
|
||||
</Tooltip.Provider>
|
||||
);
|
||||
}
|
||||
|
||||
function OpenAPITooltipContent(props: TooltipProps) {
|
||||
const { children, placement = 'top', offset = 4, className, ...rest } = props;
|
||||
// react-aria inferred the trigger from the first child; Base UI wants it declared.
|
||||
function OpenAPITooltipTrigger(props: { render: React.ReactElement<Record<string, unknown>> }) {
|
||||
return <Tooltip.Trigger render={props.render} />;
|
||||
}
|
||||
|
||||
function OpenAPITooltipContent(props: {
|
||||
children: React.ReactNode;
|
||||
className?: string;
|
||||
side?: 'top' | 'bottom' | 'left' | 'right';
|
||||
sideOffset?: number;
|
||||
}) {
|
||||
const { children, className, side = 'top', sideOffset = 4 } = props;
|
||||
return (
|
||||
<Tooltip
|
||||
{...rest}
|
||||
placement={placement}
|
||||
offset={offset}
|
||||
className={classNames('openapi-tooltip', className)}
|
||||
>
|
||||
{children}
|
||||
</Tooltip>
|
||||
<Tooltip.Portal>
|
||||
<Tooltip.Positioner
|
||||
className="openapi-tooltip-positioner"
|
||||
side={side}
|
||||
sideOffset={sideOffset}
|
||||
positionMethod="fixed"
|
||||
>
|
||||
<Tooltip.Popup className={classNames('openapi-tooltip', className)}>
|
||||
{children}
|
||||
</Tooltip.Popup>
|
||||
</Tooltip.Positioner>
|
||||
</Tooltip.Portal>
|
||||
);
|
||||
}
|
||||
|
||||
OpenAPITooltip.Trigger = OpenAPITooltipTrigger;
|
||||
OpenAPITooltip.Content = OpenAPITooltipContent;
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import type { Key } from 'react-stately';
|
||||
export type Key = string | number;
|
||||
import { createStore } from 'zustand';
|
||||
|
||||
type DisclosureState = {
|
||||
|
||||
Reference in New Issue
Block a user