From 4688f65c5aab7312c9c05ccab90708eddec1ad24 Mon Sep 17 00:00:00 2001 From: Daniil Date: Mon, 19 Jan 2026 23:19:58 +0300 Subject: [PATCH] initial layout --- .env | 1 + AGENTS.md | 14 +- app/layout.tsx | 6 +- app/login/page.tsx | 9 + app/register/page.tsx | 11 + app/template.tsx | 7 + bun.lock | 140 +- package.json | 11 +- proxy.ts | 104 + src/pages/LoginPage/index.ts | 1 + src/pages/LoginPage/model/LoginPage.d.ts | 3 + src/pages/LoginPage/ui/LoginPage.module.scss | 41 + src/pages/LoginPage/ui/LoginPage.tsx | 84 + src/pages/RegisterPage/index.ts | 1 + .../RegisterPage/model/RegisterPage.d.ts | 3 + .../RegisterPage/ui/RegisterPage.module.scss | 29 + src/pages/RegisterPage/ui/RegisterPage.tsx | 114 + src/shared/api/__generated__/openapi.types.ts | 3346 +++++++++++++++++ src/shared/api/index.ts | 56 + src/shared/api/server.ts | 29 + src/shared/context/QueryClientProvider.tsx | 18 + src/shared/hooks/useCookie.tsx | 13 + src/shared/lib/constants.ts | 37 + src/shared/lib/query_client.ts | 3 + src/shared/model/index.ts | 0 src/shared/styles/global.scss | 4 + src/shared/ui/Alert/index.ts | 1 + src/shared/ui/Alert/model/Alert.d.ts | 3 + src/shared/ui/Alert/ui/Alert.module.scss | 0 src/shared/ui/Alert/ui/Alert.tsx | 13 + src/shared/ui/Badge/index.ts | 1 + src/shared/ui/Badge/model/Badge.d.ts | 3 + src/shared/ui/Badge/ui/Badge.module.scss | 0 src/shared/ui/Badge/ui/Badge.tsx | 13 + src/shared/ui/Button/Button.d.ts | 4 +- src/shared/ui/Button/Button.tsx | 8 +- src/shared/ui/Button/index.ts | 2 +- src/shared/ui/Button/model/Button.d.ts | 3 + src/shared/ui/Button/ui/Button.module.scss | 0 src/shared/ui/Button/ui/Button.tsx | 13 + src/shared/ui/Card/index.ts | 1 + src/shared/ui/Card/model/Card.d.ts | 3 + src/shared/ui/Card/ui/Card.module.scss | 0 src/shared/ui/Card/ui/Card.tsx | 13 + src/shared/ui/Checkbox/index.ts | 1 + src/shared/ui/Checkbox/model/Checkbox.d.ts | 3 + .../ui/Checkbox/ui/Checkbox.module.scss | 0 src/shared/ui/Checkbox/ui/Checkbox.tsx | 15 + src/shared/ui/Form/index.ts | 1 + src/shared/ui/Form/model/Form.d.ts | 3 + src/shared/ui/Form/ui/Form.module.scss | 0 src/shared/ui/Form/ui/Form.tsx | 13 + src/shared/ui/Modal/index.ts | 1 + src/shared/ui/Modal/model/Modal.d.ts | 3 + src/shared/ui/Modal/ui/Modal.module.scss | 0 src/shared/ui/Modal/ui/Modal.tsx | 13 + src/shared/ui/Pagination/index.ts | 1 + .../ui/Pagination/model/Pagination.d.ts | 3 + .../ui/Pagination/ui/Pagination.module.scss | 0 src/shared/ui/Pagination/ui/Pagination.tsx | 13 + src/shared/ui/Radio/index.ts | 1 + src/shared/ui/Radio/model/Radio.d.ts | 3 + src/shared/ui/Radio/ui/Radio.module.scss | 0 src/shared/ui/Radio/ui/Radio.tsx | 15 + src/shared/ui/Select/index.ts | 1 + src/shared/ui/Select/model/Select.d.ts | 3 + src/shared/ui/Select/ui/Select.module.scss | 0 src/shared/ui/Select/ui/Select.tsx | 13 + src/shared/ui/Table/index.ts | 1 + src/shared/ui/Table/model/Table.d.ts | 3 + src/shared/ui/Table/ui/Table.module.scss | 0 src/shared/ui/Table/ui/Table.tsx | 13 + src/shared/ui/Tabs/index.ts | 1 + src/shared/ui/Tabs/model/Tabs.d.ts | 3 + src/shared/ui/Tabs/ui/Tabs.module.scss | 0 src/shared/ui/Tabs/ui/Tabs.tsx | 18 + src/shared/ui/TextField/index.ts | 1 + src/shared/ui/TextField/model/TextField.d.ts | 7 + .../ui/TextField/ui/TextField.module.scss | 0 src/shared/ui/TextField/ui/TextField.tsx | 28 + src/shared/ui/index.ts | 12 + 81 files changed, 4343 insertions(+), 16 deletions(-) create mode 100644 .env create mode 100644 app/login/page.tsx create mode 100644 app/register/page.tsx create mode 100644 app/template.tsx create mode 100644 proxy.ts create mode 100644 src/pages/LoginPage/index.ts create mode 100644 src/pages/LoginPage/model/LoginPage.d.ts create mode 100644 src/pages/LoginPage/ui/LoginPage.module.scss create mode 100644 src/pages/LoginPage/ui/LoginPage.tsx create mode 100644 src/pages/RegisterPage/index.ts create mode 100644 src/pages/RegisterPage/model/RegisterPage.d.ts create mode 100644 src/pages/RegisterPage/ui/RegisterPage.module.scss create mode 100644 src/pages/RegisterPage/ui/RegisterPage.tsx create mode 100644 src/shared/api/__generated__/openapi.types.ts create mode 100644 src/shared/api/index.ts create mode 100644 src/shared/api/server.ts create mode 100644 src/shared/context/QueryClientProvider.tsx create mode 100644 src/shared/hooks/useCookie.tsx create mode 100644 src/shared/lib/constants.ts create mode 100644 src/shared/lib/query_client.ts create mode 100644 src/shared/model/index.ts create mode 100644 src/shared/ui/Alert/index.ts create mode 100644 src/shared/ui/Alert/model/Alert.d.ts create mode 100644 src/shared/ui/Alert/ui/Alert.module.scss create mode 100644 src/shared/ui/Alert/ui/Alert.tsx create mode 100644 src/shared/ui/Badge/index.ts create mode 100644 src/shared/ui/Badge/model/Badge.d.ts create mode 100644 src/shared/ui/Badge/ui/Badge.module.scss create mode 100644 src/shared/ui/Badge/ui/Badge.tsx create mode 100644 src/shared/ui/Button/model/Button.d.ts create mode 100644 src/shared/ui/Button/ui/Button.module.scss create mode 100644 src/shared/ui/Button/ui/Button.tsx create mode 100644 src/shared/ui/Card/index.ts create mode 100644 src/shared/ui/Card/model/Card.d.ts create mode 100644 src/shared/ui/Card/ui/Card.module.scss create mode 100644 src/shared/ui/Card/ui/Card.tsx create mode 100644 src/shared/ui/Checkbox/index.ts create mode 100644 src/shared/ui/Checkbox/model/Checkbox.d.ts create mode 100644 src/shared/ui/Checkbox/ui/Checkbox.module.scss create mode 100644 src/shared/ui/Checkbox/ui/Checkbox.tsx create mode 100644 src/shared/ui/Form/index.ts create mode 100644 src/shared/ui/Form/model/Form.d.ts create mode 100644 src/shared/ui/Form/ui/Form.module.scss create mode 100644 src/shared/ui/Form/ui/Form.tsx create mode 100644 src/shared/ui/Modal/index.ts create mode 100644 src/shared/ui/Modal/model/Modal.d.ts create mode 100644 src/shared/ui/Modal/ui/Modal.module.scss create mode 100644 src/shared/ui/Modal/ui/Modal.tsx create mode 100644 src/shared/ui/Pagination/index.ts create mode 100644 src/shared/ui/Pagination/model/Pagination.d.ts create mode 100644 src/shared/ui/Pagination/ui/Pagination.module.scss create mode 100644 src/shared/ui/Pagination/ui/Pagination.tsx create mode 100644 src/shared/ui/Radio/index.ts create mode 100644 src/shared/ui/Radio/model/Radio.d.ts create mode 100644 src/shared/ui/Radio/ui/Radio.module.scss create mode 100644 src/shared/ui/Radio/ui/Radio.tsx create mode 100644 src/shared/ui/Select/index.ts create mode 100644 src/shared/ui/Select/model/Select.d.ts create mode 100644 src/shared/ui/Select/ui/Select.module.scss create mode 100644 src/shared/ui/Select/ui/Select.tsx create mode 100644 src/shared/ui/Table/index.ts create mode 100644 src/shared/ui/Table/model/Table.d.ts create mode 100644 src/shared/ui/Table/ui/Table.module.scss create mode 100644 src/shared/ui/Table/ui/Table.tsx create mode 100644 src/shared/ui/Tabs/index.ts create mode 100644 src/shared/ui/Tabs/model/Tabs.d.ts create mode 100644 src/shared/ui/Tabs/ui/Tabs.module.scss create mode 100644 src/shared/ui/Tabs/ui/Tabs.tsx create mode 100644 src/shared/ui/TextField/index.ts create mode 100644 src/shared/ui/TextField/model/TextField.d.ts create mode 100644 src/shared/ui/TextField/ui/TextField.module.scss create mode 100644 src/shared/ui/TextField/ui/TextField.tsx diff --git a/.env b/.env new file mode 100644 index 0000000..fefb75e --- /dev/null +++ b/.env @@ -0,0 +1 @@ +NEXT_PUBLIC_API_URL=http://localhost:8000/ \ No newline at end of file diff --git a/AGENTS.md b/AGENTS.md index a1df8de..4f896d1 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -110,12 +110,16 @@ export const ComponentName: FunctionComponent< ### Generate Component +Use one of these commands to generate new project-wide standardized component, don't create new component file by file by yourself + ```bash bun run gc # Examples: bun run gc shared Button -bun run gc features AuthForm -bun run gc entities UserCard +bun run gc feature AuthForm +bun run gc entity UserCard +bun run gc page HomePage +bun run gc widget Sidebar ``` --- @@ -215,3 +219,9 @@ export const Button: FC = ({ variant, onClick }): JSX.Element => { | Global styles | `src/app/styles/global.scss` | | API client | Use Axios/Xior with React Query | | State management | TanStack Query (server state) | + +## Implementation sentiments + +Write less complicated code, simple but readable code +Less overhead - better +Write all components with html semantics in mind diff --git a/app/layout.tsx b/app/layout.tsx index bcf2b0f..98d721b 100644 --- a/app/layout.tsx +++ b/app/layout.tsx @@ -4,6 +4,8 @@ import type { ReactNode } from "react" import "@shared/styles/global.scss" import "bootstrap/dist/css/bootstrap.min.css" +import { QueryClientProvider } from "@shared/context/QueryClientProvider" + export const metadata: Metadata = { title: "Coffee Project", description: "Standalone Next.js app using FSD structure", @@ -16,7 +18,9 @@ export default function RootLayout({ }>) { return ( - {children} + + {children} + ) } diff --git a/app/login/page.tsx b/app/login/page.tsx new file mode 100644 index 0000000..047a387 --- /dev/null +++ b/app/login/page.tsx @@ -0,0 +1,9 @@ +import { LoginPage } from "@pages/LoginPage" + +export default function Home() { + return ( +
+ +
+ ) +} diff --git a/app/register/page.tsx b/app/register/page.tsx new file mode 100644 index 0000000..8900efa --- /dev/null +++ b/app/register/page.tsx @@ -0,0 +1,11 @@ +import type { JSX } from "react" + +import { RegisterPage } from "@pages/RegisterPage" + +export default function Register(): JSX.Element { + return ( +
+ +
+ ) +} diff --git a/app/template.tsx b/app/template.tsx new file mode 100644 index 0000000..1822973 --- /dev/null +++ b/app/template.tsx @@ -0,0 +1,7 @@ +export default function EssentialTemplate({ + children, +}: { + children: React.ReactNode +}) { + return children +} diff --git a/bun.lock b/bun.lock index 10334a2..8b01034 100644 --- a/bun.lock +++ b/bun.lock @@ -5,24 +5,30 @@ "": { "name": "fsd-nest-template", "dependencies": { + "@radix-ui/react-dropdown-menu": "^2.1.16", "@tanstack/react-query": "^5.90.14", "@tanstack/react-query-devtools": "^5.91.2", "axios": "^1.13.2", "bootstrap": "^5.3.8", "classnames": "^2.5.1", "framer-motion": "^12.23.26", + "js-cookie": "^3.0.5", "lodash": "^4.17.21", "lucide-react": "^0.562.0", "moment": "^2.30.1", "next": "16.1.1", "normalize.css": "^8.0.1", + "openapi-fetch": "^0.15.0", "openapi-react-query": "^0.5.1", "react": "^19.2.3", "react-aria-components": "^1.14.0", "react-bootstrap": "^2.10.10", "react-dom": "^19.2.3", "react-dropzone": "^14.3.8", + "react-hook-form": "^7.71.0", + "react-modern-drawer": "^1.4.0", "react-toastify": "^11.0.5", + "use-mask-input": "^3.6.0", "usehooks-ts": "^3.1.1", "xior": "^0.8.2", }, @@ -30,6 +36,7 @@ "@ianvs/prettier-plugin-sort-imports": "^4.7.0", "@svgr/cli": "^8.1.0", "@types/bun": "^1.3.5", + "@types/js-cookie": "^3.0.6", "@types/node": "^25.0.3", "@types/react": "^19.2.7", "@types/react-dom": "^19.2.3", @@ -40,6 +47,7 @@ "eslint-plugin-boundaries": "^5.3.1", "eslint-plugin-react-hooks": "^7.0.1", "eslint-plugin-react-refresh": "^0.4.26", + "openapi-typescript": "^7.10.1", "prettier": "^3.7.4", "sass": "^1.97.1", "stylelint": "^16.26.1", @@ -132,6 +140,14 @@ "@eslint/plugin-kit": ["@eslint/plugin-kit@0.4.1", "", { "dependencies": { "@eslint/core": "^0.17.0", "levn": "^0.4.1" } }, "sha512-43/qtrDUokr7LJqoF2c3+RInu/t4zfrpYdoSDfYyhg52rwLV6TnOvdG4fXm7IkSB3wErkcmJS9iEhjVtOSEjjA=="], + "@floating-ui/core": ["@floating-ui/core@1.7.3", "", { "dependencies": { "@floating-ui/utils": "^0.2.10" } }, "sha512-sGnvb5dmrJaKEZ+LDIpguvdX3bDlEllmv4/ClQ9awcmCZrlx5jQyyMWFM5kBI+EyNOCDDiKk8il0zeuX3Zlg/w=="], + + "@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=="], + + "@floating-ui/react-dom": ["@floating-ui/react-dom@2.1.6", "", { "dependencies": { "@floating-ui/dom": "^1.7.4" }, "peerDependencies": { "react": ">=16.8.0", "react-dom": ">=16.8.0" } }, "sha512-4JX6rEatQEvlmgU80wZyq9RT96HZJa88q8hp0pBd+LrczeDI4o6uA2M+uvxngVHo4Ihr8uibXxH6+70zhAFrVw=="], + + "@floating-ui/utils": ["@floating-ui/utils@0.2.10", "", {}, "sha512-aGTxbpbg8/b5JfU1HXSrbH3wXZuLPJcNEcZQFMxLs3oSzgtVu6nFPkbbGGUvBcUjKV2YyB9Wxxabo+HEH9tcRQ=="], + "@formatjs/ecma402-abstract": ["@formatjs/ecma402-abstract@2.3.6", "", { "dependencies": { "@formatjs/fast-memoize": "2.2.7", "@formatjs/intl-localematcher": "0.6.2", "decimal.js": "^10.4.3", "tslib": "^2.8.0" } }, "sha512-HJnTFeRM2kVFVr5gr5kH1XP6K0JcJtE7Lzvtr3FS/so5f1kpsqqqxy5JF+FRaO6H2qmcMfAUIox7AJteieRtVw=="], "@formatjs/fast-memoize": ["@formatjs/fast-memoize@2.2.7", "", { "dependencies": { "tslib": "^2.8.0" } }, "sha512-Yabmi9nSvyOMrlSeGGWDiH7rf3a7sIwplbvo/dlz9WCIjzIQAfy1RMf4S0X3yG724n5Ghu2GmEl5NJIV6O9sZQ=="], @@ -284,6 +300,58 @@ "@popperjs/core": ["@popperjs/core@2.11.8", "", {}, "sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A=="], + "@radix-ui/primitive": ["@radix-ui/primitive@1.1.3", "", {}, "sha512-JTF99U/6XIjCBo0wqkU5sK10glYe27MRRsfwoiq5zzOEZLHU3A3KCMa5X/azekYRCJ0HlwI0crAXS/5dEHTzDg=="], + + "@radix-ui/react-arrow": ["@radix-ui/react-arrow@1.1.7", "", { "dependencies": { "@radix-ui/react-primitive": "2.1.3" }, "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-F+M1tLhO+mlQaOWspE8Wstg+z6PwxwRd8oQ8IXceWz92kfAmalTRf0EjrouQeo7QssEPfCn05B4Ihs1K9WQ/7w=="], + + "@radix-ui/react-collection": ["@radix-ui/react-collection@1.1.7", "", { "dependencies": { "@radix-ui/react-compose-refs": "1.1.2", "@radix-ui/react-context": "1.1.2", "@radix-ui/react-primitive": "2.1.3", "@radix-ui/react-slot": "1.2.3" }, "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-Fh9rGN0MoI4ZFUNyfFVNU4y9LUz93u9/0K+yLgA2bwRojxM8JU1DyvvMBabnZPBgMWREAJvU2jjVzq+LrFUglw=="], + + "@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-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=="], + + "@radix-ui/react-direction": ["@radix-ui/react-direction@1.1.1", "", { "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-1UEWRX6jnOA2y4H5WczZ44gOOjTEmlqv1uNW4GAJEO5+bauCBhv8snY65Iw5/VOS/ghKN9gr2KjnLKxrsvoMVw=="], + + "@radix-ui/react-dismissable-layer": ["@radix-ui/react-dismissable-layer@1.1.11", "", { "dependencies": { "@radix-ui/primitive": "1.1.3", "@radix-ui/react-compose-refs": "1.1.2", "@radix-ui/react-primitive": "2.1.3", "@radix-ui/react-use-callback-ref": "1.1.1", "@radix-ui/react-use-escape-keydown": "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-Nqcp+t5cTB8BinFkZgXiMJniQH0PsUt2k51FUhbdfeKvc4ACcG2uQniY/8+h1Yv6Kza4Q7lD7PQV0z0oicE0Mg=="], + + "@radix-ui/react-dropdown-menu": ["@radix-ui/react-dropdown-menu@2.1.16", "", { "dependencies": { "@radix-ui/primitive": "1.1.3", "@radix-ui/react-compose-refs": "1.1.2", "@radix-ui/react-context": "1.1.2", "@radix-ui/react-id": "1.1.1", "@radix-ui/react-menu": "2.1.16", "@radix-ui/react-primitive": "2.1.3", "@radix-ui/react-use-controllable-state": "1.2.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-1PLGQEynI/3OX/ftV54COn+3Sud/Mn8vALg2rWnBLnRaGtJDduNW/22XjlGgPdpcIbiQxjKtb7BkcjP00nqfJw=="], + + "@radix-ui/react-focus-guards": ["@radix-ui/react-focus-guards@1.1.3", "", { "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-0rFg/Rj2Q62NCm62jZw0QX7a3sz6QCQU0LpZdNrJX8byRGaGVTqbrW9jAoIAHyMQqsNpeZ81YgSizOt5WXq0Pw=="], + + "@radix-ui/react-focus-scope": ["@radix-ui/react-focus-scope@1.1.7", "", { "dependencies": { "@radix-ui/react-compose-refs": "1.1.2", "@radix-ui/react-primitive": "2.1.3", "@radix-ui/react-use-callback-ref": "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-t2ODlkXBQyn7jkl6TNaw/MtVEVvIGelJDCG41Okq/KwUsJBwQ4XVZsHAVUkK4mBv3ewiAS3PGuUWuY2BoK4ZUw=="], + + "@radix-ui/react-id": ["@radix-ui/react-id@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-kGkGegYIdQsOb4XjsfM97rXsiHaBwco+hFI66oO4s9LU+PLAC5oJ7khdOVFxkhsmlbpUqDAvXw11CluXP+jkHg=="], + + "@radix-ui/react-menu": ["@radix-ui/react-menu@2.1.16", "", { "dependencies": { "@radix-ui/primitive": "1.1.3", "@radix-ui/react-collection": "1.1.7", "@radix-ui/react-compose-refs": "1.1.2", "@radix-ui/react-context": "1.1.2", "@radix-ui/react-direction": "1.1.1", "@radix-ui/react-dismissable-layer": "1.1.11", "@radix-ui/react-focus-guards": "1.1.3", "@radix-ui/react-focus-scope": "1.1.7", "@radix-ui/react-id": "1.1.1", "@radix-ui/react-popper": "1.2.8", "@radix-ui/react-portal": "1.1.9", "@radix-ui/react-presence": "1.1.5", "@radix-ui/react-primitive": "2.1.3", "@radix-ui/react-roving-focus": "1.1.11", "@radix-ui/react-slot": "1.2.3", "@radix-ui/react-use-callback-ref": "1.1.1", "aria-hidden": "^1.2.4", "react-remove-scroll": "^2.6.3" }, "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-72F2T+PLlphrqLcAotYPp0uJMr5SjP5SL01wfEspJbru5Zs5vQaSHb4VB3ZMJPimgHHCHG7gMOeOB9H3Hdmtxg=="], + + "@radix-ui/react-popper": ["@radix-ui/react-popper@1.2.8", "", { "dependencies": { "@floating-ui/react-dom": "^2.0.0", "@radix-ui/react-arrow": "1.1.7", "@radix-ui/react-compose-refs": "1.1.2", "@radix-ui/react-context": "1.1.2", "@radix-ui/react-primitive": "2.1.3", "@radix-ui/react-use-callback-ref": "1.1.1", "@radix-ui/react-use-layout-effect": "1.1.1", "@radix-ui/react-use-rect": "1.1.1", "@radix-ui/react-use-size": "1.1.1", "@radix-ui/rect": "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-0NJQ4LFFUuWkE7Oxf0htBKS6zLkkjBH+hM1uk7Ng705ReR8m/uelduy1DBo0PyBXPKVnBA6YBlU94MBGXrSBCw=="], + + "@radix-ui/react-portal": ["@radix-ui/react-portal@1.1.9", "", { "dependencies": { "@radix-ui/react-primitive": "2.1.3", "@radix-ui/react-use-layout-effect": "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-bpIxvq03if6UNwXZ+HTK71JLh4APvnXntDc6XOX8UVq4XQOVl7lwok0AvIl+b8zgCw3fSaVTZMpAPPagXbKmHQ=="], + + "@radix-ui/react-presence": ["@radix-ui/react-presence@1.1.5", "", { "dependencies": { "@radix-ui/react-compose-refs": "1.1.2", "@radix-ui/react-use-layout-effect": "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-/jfEwNDdQVBCNvjkGit4h6pMOzq8bHkopq458dPt2lMjx+eBQUohZNG9A7DtO/O5ukSbxuaNGXMjHicgwy6rQQ=="], + + "@radix-ui/react-primitive": ["@radix-ui/react-primitive@2.1.3", "", { "dependencies": { "@radix-ui/react-slot": "1.2.3" }, "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-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ=="], + + "@radix-ui/react-roving-focus": ["@radix-ui/react-roving-focus@1.1.11", "", { "dependencies": { "@radix-ui/primitive": "1.1.3", "@radix-ui/react-collection": "1.1.7", "@radix-ui/react-compose-refs": "1.1.2", "@radix-ui/react-context": "1.1.2", "@radix-ui/react-direction": "1.1.1", "@radix-ui/react-id": "1.1.1", "@radix-ui/react-primitive": "2.1.3", "@radix-ui/react-use-callback-ref": "1.1.1", "@radix-ui/react-use-controllable-state": "1.2.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-7A6S9jSgm/S+7MdtNDSb+IU859vQqJ/QAtcYQcfFC6W8RS4IxIZDldLR0xqCFZ6DCyrQLjLPsxtTNch5jVA4lA=="], + + "@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-use-callback-ref": ["@radix-ui/react-use-callback-ref@1.1.1", "", { "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-FkBMwD+qbGQeMu1cOHnuGB6x4yzPjho8ap5WtbEJ26umhgqVXbhekKUQO+hZEL1vU92a3wHwdp0HAcqAUF5iDg=="], + + "@radix-ui/react-use-controllable-state": ["@radix-ui/react-use-controllable-state@1.2.2", "", { "dependencies": { "@radix-ui/react-use-effect-event": "0.0.2", "@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-BjasUjixPFdS+NKkypcyyN5Pmg83Olst0+c6vGov0diwTEo6mgdqVR6hxcEgFuh4QrAs7Rc+9KuGJ9TVCj0Zzg=="], + + "@radix-ui/react-use-effect-event": ["@radix-ui/react-use-effect-event@0.0.2", "", { "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-Qp8WbZOBe+blgpuUT+lw2xheLP8q0oatc9UpmiemEICxGvFLYmHm9QowVZGHtJlGbS6A6yJ3iViad/2cVjnOiA=="], + + "@radix-ui/react-use-escape-keydown": ["@radix-ui/react-use-escape-keydown@1.1.1", "", { "dependencies": { "@radix-ui/react-use-callback-ref": "1.1.1" }, "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-Il0+boE7w/XebUHyBjroE+DbByORGR9KKmITzbR7MyQ4akpORYP/ZmbhAr0DG7RmmBqoOnZdy2QlvajJ2QA59g=="], + + "@radix-ui/react-use-layout-effect": ["@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-RbJRS4UWQFkzHTTwVymMTUv8EqYhOp8dOOviLj2ugtTiXRaRQS7GLGxZTLL1jWhMeoSCf5zmcZkqTl9IiYfXcQ=="], + + "@radix-ui/react-use-rect": ["@radix-ui/react-use-rect@1.1.1", "", { "dependencies": { "@radix-ui/rect": "1.1.1" }, "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-QTYuDesS0VtuHNNvMh+CjlKJ4LJickCMUAqjlE3+j8w+RlRpwyX3apEQKGFzbZGdo7XNG1tXa+bQqIE7HIXT2w=="], + + "@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=="], + + "@radix-ui/rect": ["@radix-ui/rect@1.1.1", "", {}, "sha512-HPwpGIzkl28mWyZqG52jiqDJ12waP11Pa1lGoiyUkIEuMLBP0oeK/C89esbXrxsky5we7dfd8U58nm0SgAWpVw=="], + "@react-aria/autocomplete": ["@react-aria/autocomplete@3.0.0-rc.4", "", { "dependencies": { "@react-aria/combobox": "^3.14.1", "@react-aria/focus": "^3.21.3", "@react-aria/i18n": "^3.12.14", "@react-aria/interactions": "^3.26.0", "@react-aria/listbox": "^3.15.1", "@react-aria/searchfield": "^3.8.10", "@react-aria/textfield": "^3.18.3", "@react-aria/utils": "^3.32.0", "@react-stately/autocomplete": "3.0.0-beta.4", "@react-stately/combobox": "^3.12.1", "@react-types/autocomplete": "3.0.0-alpha.36", "@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-4bMMVNaCuYDZX9HM4ZNSAImZMcL/orwhLLe818+lyzmSrvGmW9h433PZxTolb0d+FnJVfn1MDY0zEWLiyI86GA=="], "@react-aria/breadcrumbs": ["@react-aria/breadcrumbs@3.5.30", "", { "dependencies": { "@react-aria/i18n": "^3.12.14", "@react-aria/link": "^3.8.7", "@react-aria/utils": "^3.32.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-DZymglA70SwvDJA7GB147sUexvdDy6vWcriGrlEHhMMzBLhGB30I5J96R4pPzURLxXISrWFH56KC5rRgIqsqqg=="], @@ -500,6 +568,12 @@ "@react-types/tooltip": ["@react-types/tooltip@3.5.0", "", { "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-o/m1wlKlOD2sLb9vZLWdVkD5LFLHBMLGeeK/bhyUtp0IEdUeKy0ZRTS7pa/A50trov9RvdbzLK79xG8nKNxHew=="], + "@redocly/ajv": ["@redocly/ajv@8.17.1", "", { "dependencies": { "fast-deep-equal": "^3.1.3", "fast-uri": "^3.0.1", "json-schema-traverse": "^1.0.0", "require-from-string": "^2.0.2" } }, "sha512-EDtsGZS964mf9zAUXAl9Ew16eYbeyAFWhsPr0fX6oaJxgd8rApYlPBf0joyhnUHz88WxrigyFtTaqqzXNzPgqw=="], + + "@redocly/config": ["@redocly/config@0.22.2", "", {}, "sha512-roRDai8/zr2S9YfmzUfNhKjOF0NdcOIqF7bhf4MVC5UxpjIysDjyudvlAiVbpPHp3eDRWbdzUgtkK1a7YiDNyQ=="], + + "@redocly/openapi-core": ["@redocly/openapi-core@1.34.6", "", { "dependencies": { "@redocly/ajv": "^8.11.2", "@redocly/config": "^0.22.0", "colorette": "^1.2.0", "https-proxy-agent": "^7.0.5", "js-levenshtein": "^1.1.6", "js-yaml": "^4.1.0", "minimatch": "^5.0.1", "pluralize": "^8.0.0", "yaml-ast-parser": "0.0.43" } }, "sha512-2+O+riuIUgVSuLl3Lyh5AplWZyVMNuG2F98/o6NrutKJfW4/GTZdPpZlIphS0HGgcOHgmWcCSHj+dWFlZaGSHw=="], + "@restart/hooks": ["@restart/hooks@0.4.16", "", { "dependencies": { "dequal": "^2.0.3" }, "peerDependencies": { "react": ">=16.8.0" } }, "sha512-f7aCv7c+nU/3mF7NWLtVVr0Ra80RqsO89hO72r+Y/nvQr5+q0UFGkocElTH6MJApvReVh6JHUFYn2cw1WdHF3w=="], "@restart/ui": ["@restart/ui@1.9.4", "", { "dependencies": { "@babel/runtime": "^7.26.0", "@popperjs/core": "^2.11.8", "@react-aria/ssr": "^3.5.0", "@restart/hooks": "^0.5.0", "@types/warning": "^3.0.3", "dequal": "^2.0.3", "dom-helpers": "^5.2.0", "uncontrollable": "^8.0.4", "warning": "^4.0.3" }, "peerDependencies": { "react": ">=16.14.0", "react-dom": ">=16.14.0" } }, "sha512-N4C7haUc3vn4LTwVUPlkJN8Ach/+yIMvRuTVIhjilNHqegY60SGLrzud6errOMNJwSnmYFnt1J0H/k8FE3A4KA=="], @@ -562,6 +636,8 @@ "@types/estree": ["@types/estree@1.0.8", "", {}, "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w=="], + "@types/js-cookie": ["@types/js-cookie@3.0.6", "", {}, "sha512-wkw9yd1kEXOPnvEeEV1Go1MmxtBJL0RR79aOTAApecWFVu7w0NNXNqhcWgvw2YgZDYadliXkl14pa3WXw5jlCQ=="], + "@types/json-schema": ["@types/json-schema@7.0.15", "", {}, "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA=="], "@types/json5": ["@types/json5@0.0.29", "", {}, "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ=="], @@ -642,8 +718,12 @@ "acorn-walk": ["acorn-walk@8.3.4", "", { "dependencies": { "acorn": "^8.11.0" } }, "sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g=="], + "agent-base": ["agent-base@7.1.4", "", {}, "sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ=="], + "ajv": ["ajv@6.12.6", "", { "dependencies": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", "json-schema-traverse": "^0.4.1", "uri-js": "^4.2.2" } }, "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g=="], + "ansi-colors": ["ansi-colors@4.1.3", "", {}, "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw=="], + "ansi-regex": ["ansi-regex@5.0.1", "", {}, "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="], "ansi-styles": ["ansi-styles@4.3.0", "", { "dependencies": { "color-convert": "^2.0.1" } }, "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg=="], @@ -652,6 +732,8 @@ "argparse": ["argparse@2.0.1", "", {}, "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q=="], + "aria-hidden": ["aria-hidden@1.2.6", "", { "dependencies": { "tslib": "^2.0.0" } }, "sha512-ik3ZgC9dY/lYVVM++OISsaYDeg1tb0VtP5uL3ouh1koGOaUMDPpbFIei4JkFimWUFPn90sbMNMXQAIVOlnYKJA=="], + "aria-query": ["aria-query@5.3.2", "", {}, "sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw=="], "array-buffer-byte-length": ["array-buffer-byte-length@1.0.2", "", { "dependencies": { "call-bound": "^1.0.3", "is-array-buffer": "^3.0.5" } }, "sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw=="], @@ -722,6 +804,8 @@ "chalk": ["chalk@4.1.2", "", { "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } }, "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA=="], + "change-case": ["change-case@5.4.4", "", {}, "sha512-HRQyTk2/YPEkt9TnUPbOpr64Uw3KOicFWPVBb+xiHvd6eBx/qPr9xqfBFDT8P2vWsvvz4jbEkfDe71W3VyNu2w=="], + "chokidar": ["chokidar@4.0.3", "", { "dependencies": { "readdirp": "^4.0.1" } }, "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA=="], "classnames": ["classnames@2.5.1", "", {}, "sha512-saHYOzhIQs6wy2sVxTM6bUDsQO4F50V9RQ22qBpEdCW+I+/Wmke2HOl6lS6dTpdxVhb88/I6+Hs+438c3lfUow=="], @@ -738,6 +822,8 @@ "colord": ["colord@2.9.3", "", {}, "sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw=="], + "colorette": ["colorette@1.4.0", "", {}, "sha512-Y2oEozpomLn7Q3HFP7dpww7AtMJplbM9lGZP6RDfHqmbeRjiwRg4n6VM6j4KLmRke85uWEI7JqF17f3pqdRA0g=="], + "combined-stream": ["combined-stream@1.0.8", "", { "dependencies": { "delayed-stream": "~1.0.0" } }, "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg=="], "commander": ["commander@9.5.0", "", {}, "sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ=="], @@ -796,6 +882,8 @@ "detect-libc": ["detect-libc@1.0.3", "", { "bin": { "detect-libc": "./bin/detect-libc.js" } }, "sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg=="], + "detect-node-es": ["detect-node-es@1.1.0", "", {}, "sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ=="], + "diff": ["diff@4.0.2", "", {}, "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A=="], "dir-glob": ["dir-glob@3.0.1", "", { "dependencies": { "path-type": "^4.0.0" } }, "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA=="], @@ -936,6 +1024,8 @@ "get-intrinsic": ["get-intrinsic@1.3.0", "", { "dependencies": { "call-bind-apply-helpers": "^1.0.2", "es-define-property": "^1.0.1", "es-errors": "^1.3.0", "es-object-atoms": "^1.1.1", "function-bind": "^1.1.2", "get-proto": "^1.0.1", "gopd": "^1.2.0", "has-symbols": "^1.1.0", "hasown": "^2.0.2", "math-intrinsics": "^1.1.0" } }, "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ=="], + "get-nonce": ["get-nonce@1.0.1", "", {}, "sha512-FJhYRoDaiatfEkUK8HKlicmu/3SGFD51q3itKDGoSTysQJBnfOcxU5GxnhE1E6soB76MbT0MBtnKJuXyAx+96Q=="], + "get-proto": ["get-proto@1.0.1", "", { "dependencies": { "dunder-proto": "^1.0.1", "es-object-atoms": "^1.0.0" } }, "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g=="], "get-symbol-description": ["get-symbol-description@1.1.0", "", { "dependencies": { "call-bound": "^1.0.3", "es-errors": "^1.3.0", "get-intrinsic": "^1.2.6" } }, "sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg=="], @@ -986,6 +1076,8 @@ "html-tags": ["html-tags@3.3.1", "", {}, "sha512-ztqyC3kLto0e9WbNp0aeP+M3kTt+nbaIveGmUxAtZa+8iFgKLUOD4YKM5j+f3QD89bra7UeumolZHKuOXnTmeQ=="], + "https-proxy-agent": ["https-proxy-agent@7.0.6", "", { "dependencies": { "agent-base": "^7.1.2", "debug": "4" } }, "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw=="], + "ignore": ["ignore@5.3.2", "", {}, "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g=="], "immutable": ["immutable@5.1.4", "", {}, "sha512-p6u1bG3YSnINT5RQmx/yRZBpenIl30kVxkTLDyHLIMk0gict704Q9n+thfDI7lTRm9vXdDYutVzXhzcThxTnXA=="], @@ -994,6 +1086,8 @@ "imurmurhash": ["imurmurhash@0.1.4", "", {}, "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA=="], + "index-to-position": ["index-to-position@1.2.0", "", {}, "sha512-Yg7+ztRkqslMAS2iFaU+Oa4KTSidr63OsFGlOrJoW981kIYO3CGCS3wA95P1mUi/IVSJkn0D479KTJpVpvFNuw=="], + "inflight": ["inflight@1.0.6", "", { "dependencies": { "once": "^1.3.0", "wrappy": "1" } }, "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA=="], "inherits": ["inherits@2.0.4", "", {}, "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="], @@ -1070,6 +1164,10 @@ "iterator.prototype": ["iterator.prototype@1.1.5", "", { "dependencies": { "define-data-property": "^1.1.4", "es-object-atoms": "^1.0.0", "get-intrinsic": "^1.2.6", "get-proto": "^1.0.0", "has-symbols": "^1.1.0", "set-function-name": "^2.0.2" } }, "sha512-H0dkQoCa3b2VEeKQBOxFph+JAbcrQdE7KC0UkqwpLmv2EC4P41QXP+rqo9wYodACiG5/WM5s9oDApTU8utwj9g=="], + "js-cookie": ["js-cookie@3.0.5", "", {}, "sha512-cEiJEAEoIbWfCZYKWhVwFuvPX1gETRYPw6LlaTKoxD3s2AkXzkCjnp6h0V77ozyqj0jakteJ4YqDJT830+lVGw=="], + + "js-levenshtein": ["js-levenshtein@1.1.6", "", {}, "sha512-X2BB11YZtrRqY4EnQcLX5Rh373zbK4alC1FW7D7MBhL2gtcC17cTnr6DmfHZeS0s2rTHjUTMMHfG7gO8SSdw+g=="], + "js-tokens": ["js-tokens@4.0.0", "", {}, "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ=="], "js-yaml": ["js-yaml@4.1.1", "", { "dependencies": { "argparse": "^2.0.1" }, "bin": { "js-yaml": "bin/js-yaml.js" } }, "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA=="], @@ -1194,6 +1292,8 @@ "openapi-react-query": ["openapi-react-query@0.5.1", "", { "dependencies": { "openapi-typescript-helpers": "^0.0.15" }, "peerDependencies": { "@tanstack/react-query": "^5.80.0", "openapi-fetch": "^0.15.0" } }, "sha512-BzUDxICV9v8584pBiGM9jgCqSBBp/mP91SJ68Pu7PqeppqfWxazi3vVaMup5Acjxv3cN9GbV6xuVHfbGsJfexw=="], + "openapi-typescript": ["openapi-typescript@7.10.1", "", { "dependencies": { "@redocly/openapi-core": "^1.34.5", "ansi-colors": "^4.1.3", "change-case": "^5.4.4", "parse-json": "^8.3.0", "supports-color": "^10.2.2", "yargs-parser": "^21.1.1" }, "peerDependencies": { "typescript": "^5.x" }, "bin": { "openapi-typescript": "bin/cli.js" } }, "sha512-rBcU8bjKGGZQT4K2ekSTY2Q5veOQbVG/lTKZ49DeCyT9z62hM2Vj/LLHjDHC9W7LJG8YMHcdXpRZDqC1ojB/lw=="], + "openapi-typescript-helpers": ["openapi-typescript-helpers@0.0.15", "", {}, "sha512-opyTPaunsklCBpTK8JGef6mfPhLSnyy5a0IN9vKtx3+4aExf+KxEqYwIy3hqkedXIB97u357uLMJsOnm3GVjsw=="], "optionator": ["optionator@0.9.4", "", { "dependencies": { "deep-is": "^0.1.3", "fast-levenshtein": "^2.0.6", "levn": "^0.4.1", "prelude-ls": "^1.2.1", "type-check": "^0.4.0", "word-wrap": "^1.2.5" } }, "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g=="], @@ -1206,7 +1306,7 @@ "parent-module": ["parent-module@1.0.1", "", { "dependencies": { "callsites": "^3.0.0" } }, "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g=="], - "parse-json": ["parse-json@5.2.0", "", { "dependencies": { "@babel/code-frame": "^7.0.0", "error-ex": "^1.3.1", "json-parse-even-better-errors": "^2.3.0", "lines-and-columns": "^1.1.6" } }, "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg=="], + "parse-json": ["parse-json@8.3.0", "", { "dependencies": { "@babel/code-frame": "^7.26.2", "index-to-position": "^1.1.0", "type-fest": "^4.39.1" } }, "sha512-ybiGyvspI+fAoRQbIPRddCcSTV9/LsJbf0e/S85VLowVGzRmokfneg2kwVW/KU5rOXrPSbF1qAKPMgNTqqROQQ=="], "path-exists": ["path-exists@4.0.0", "", {}, "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w=="], @@ -1220,6 +1320,8 @@ "picomatch": ["picomatch@4.0.3", "", {}, "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q=="], + "pluralize": ["pluralize@8.0.0", "", {}, "sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA=="], + "possible-typed-array-names": ["possible-typed-array-names@1.1.0", "", {}, "sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg=="], "postcss": ["postcss@8.5.6", "", { "dependencies": { "nanoid": "^3.3.11", "picocolors": "^1.1.1", "source-map-js": "^1.2.1" } }, "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg=="], @@ -1266,12 +1368,22 @@ "react-dropzone": ["react-dropzone@14.3.8", "", { "dependencies": { "attr-accept": "^2.2.4", "file-selector": "^2.1.0", "prop-types": "^15.8.1" }, "peerDependencies": { "react": ">= 16.8 || 18.0.0" } }, "sha512-sBgODnq+lcA4P296DY4wacOZz3JFpD99fp+hb//iBO2HHnyeZU3FwWyXJ6salNpqQdsZrgMrotuko/BdJMV8Ug=="], + "react-hook-form": ["react-hook-form@7.71.0", "", { "peerDependencies": { "react": "^16.8.0 || ^17 || ^18 || ^19" } }, "sha512-oFDt/iIFMV9ZfV52waONXzg4xuSlbwKUPvXVH2jumL1me5qFhBMc4knZxuXiZ2+j6h546sYe3ZKJcg/900/iHw=="], + "react-is": ["react-is@16.13.1", "", {}, "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ=="], "react-lifecycles-compat": ["react-lifecycles-compat@3.0.4", "", {}, "sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA=="], + "react-modern-drawer": ["react-modern-drawer@1.4.0", "", { "peerDependencies": { "react": ">16.0.0" } }, "sha512-5OkcUstqUdd/CNW9+BvLkzm36R2G54RFXWF2mWCH13cUsz5SNo9aB9KzPRbJp2LEVfRL/u+MgikOWRe7/6wKEQ=="], + + "react-remove-scroll": ["react-remove-scroll@2.7.2", "", { "dependencies": { "react-remove-scroll-bar": "^2.3.7", "react-style-singleton": "^2.2.3", "tslib": "^2.1.0", "use-callback-ref": "^1.3.3", "use-sidecar": "^1.1.3" }, "peerDependencies": { "@types/react": "*", "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-Iqb9NjCCTt6Hf+vOdNIZGdTiH1QSqr27H/Ek9sv/a97gfueI/5h1s3yRi1nngzMUaOOToin5dI1dXKdXiF+u0Q=="], + + "react-remove-scroll-bar": ["react-remove-scroll-bar@2.3.8", "", { "dependencies": { "react-style-singleton": "^2.2.2", "tslib": "^2.0.0" }, "peerDependencies": { "@types/react": "*", "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" }, "optionalPeers": ["@types/react"] }, "sha512-9r+yi9+mgU33AKcj6IbT9oRCO78WriSj6t/cF8DWBZJ9aOGPOTEDvdUDz1FwKim7QXWwmHqtdHnRJfhAxEG46Q=="], + "react-stately": ["react-stately@3.43.0", "", { "dependencies": { "@react-stately/calendar": "^3.9.1", "@react-stately/checkbox": "^3.7.3", "@react-stately/collections": "^3.12.8", "@react-stately/color": "^3.9.3", "@react-stately/combobox": "^3.12.1", "@react-stately/data": "^3.15.0", "@react-stately/datepicker": "^3.15.3", "@react-stately/disclosure": "^3.0.9", "@react-stately/dnd": "^3.7.2", "@react-stately/form": "^3.2.2", "@react-stately/list": "^3.13.2", "@react-stately/menu": "^3.9.9", "@react-stately/numberfield": "^3.10.3", "@react-stately/overlays": "^3.6.21", "@react-stately/radio": "^3.11.3", "@react-stately/searchfield": "^3.5.17", "@react-stately/select": "^3.9.0", "@react-stately/selection": "^3.20.7", "@react-stately/slider": "^3.7.3", "@react-stately/table": "^3.15.2", "@react-stately/tabs": "^3.8.7", "@react-stately/toast": "^3.1.2", "@react-stately/toggle": "^3.9.3", "@react-stately/tooltip": "^3.5.9", "@react-stately/tree": "^3.9.4", "@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-dScb9fTL1tRtFODPnk/2rP0a9kp1C+7+40RArS0C7j0auAUmnrO/wDILojwQUso7/kkys4fP707fTwGJDeJ7vg=="], + "react-style-singleton": ["react-style-singleton@2.2.3", "", { "dependencies": { "get-nonce": "^1.0.0", "tslib": "^2.0.0" }, "peerDependencies": { "@types/react": "*", "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-b6jSvxvVnyptAiLjbkWLE/lOnR4lfTtDAl+eUC7RZy+QQWc6wRzIV2CE6xBuMmDxc2qIihtDCZD5NPOFl7fRBQ=="], + "react-toastify": ["react-toastify@11.0.5", "", { "dependencies": { "clsx": "^2.1.1" }, "peerDependencies": { "react": "^18 || ^19", "react-dom": "^18 || ^19" } }, "sha512-EpqHBGvnSTtHYhCPLxML05NLY2ZX0JURbAdNYa6BUkk+amz4wbKBQvoKQAB0ardvSarUBuY4Q4s1sluAzZwkmA=="], "react-transition-group": ["react-transition-group@4.4.5", "", { "dependencies": { "@babel/runtime": "^7.5.5", "dom-helpers": "^5.0.1", "loose-envify": "^1.4.0", "prop-types": "^15.6.2" }, "peerDependencies": { "react": ">=16.6.0", "react-dom": ">=16.6.0" } }, "sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g=="], @@ -1420,6 +1532,8 @@ "type-check": ["type-check@0.4.0", "", { "dependencies": { "prelude-ls": "^1.2.1" } }, "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew=="], + "type-fest": ["type-fest@4.41.0", "", {}, "sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA=="], + "typed-array-buffer": ["typed-array-buffer@1.0.3", "", { "dependencies": { "call-bound": "^1.0.3", "es-errors": "^1.3.0", "is-typed-array": "^1.1.14" } }, "sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw=="], "typed-array-byte-length": ["typed-array-byte-length@1.0.3", "", { "dependencies": { "call-bind": "^1.0.8", "for-each": "^0.3.3", "gopd": "^1.2.0", "has-proto": "^1.2.0", "is-typed-array": "^1.1.14" } }, "sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg=="], @@ -1446,6 +1560,12 @@ "uri-js": ["uri-js@4.4.1", "", { "dependencies": { "punycode": "^2.1.0" } }, "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg=="], + "use-callback-ref": ["use-callback-ref@1.3.3", "", { "dependencies": { "tslib": "^2.0.0" }, "peerDependencies": { "@types/react": "*", "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-jQL3lRnocaFtu3V00JToYz/4QkNWswxijDaCVNZRiRTO3HQDLsdu1ZtmIUvV4yPp+rvWm5j0y0TG/S61cuijTg=="], + + "use-mask-input": ["use-mask-input@3.6.0", "", { "peerDependencies": { "react": ">=17", "react-dom": ">=17" } }, "sha512-Kl6phBqMkumOxSVOYRAQZpJYfkzSIcaLt3gIEIKM4GnPXuW77niVGu11haYOEmPqIZ0UaHhhHhDDzdemjpbSgQ=="], + + "use-sidecar": ["use-sidecar@1.1.3", "", { "dependencies": { "detect-node-es": "^1.1.0", "tslib": "^2.0.0" }, "peerDependencies": { "@types/react": "*", "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-Fedw0aZvkhynoPYlA5WXrMCAMm+nSWdZt6lzJQ7Ok8S6Q+VsHmHpRWndVRJ8Be0ZbkfPc5LRYH+5XrzXcEeLRQ=="], + "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=="], @@ -1482,6 +1602,8 @@ "yallist": ["yallist@3.1.1", "", {}, "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g=="], + "yaml-ast-parser": ["yaml-ast-parser@0.0.43", "", {}, "sha512-2PTINUwsRqSd+s8XxKaJWQlUuEMHJQyEuh2edBbW8KNJz0SJPwUSD2zRWqezFEdN7IzAgeuYHFUCF7o8zRdZ0A=="], + "yargs": ["yargs@17.7.2", "", { "dependencies": { "cliui": "^8.0.1", "escalade": "^3.1.1", "get-caller-file": "^2.0.5", "require-directory": "^2.1.1", "string-width": "^4.2.3", "y18n": "^5.0.5", "yargs-parser": "^21.1.1" } }, "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w=="], "yargs-parser": ["yargs-parser@21.1.1", "", {}, "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw=="], @@ -1512,6 +1634,10 @@ "@next/eslint-plugin-next/fast-glob": ["fast-glob@3.3.1", "", { "dependencies": { "@nodelib/fs.stat": "^2.0.2", "@nodelib/fs.walk": "^1.2.3", "glob-parent": "^5.1.2", "merge2": "^1.3.0", "micromatch": "^4.0.4" } }, "sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg=="], + "@redocly/ajv/json-schema-traverse": ["json-schema-traverse@1.0.0", "", {}, "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug=="], + + "@redocly/openapi-core/minimatch": ["minimatch@5.1.6", "", { "dependencies": { "brace-expansion": "^2.0.1" } }, "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g=="], + "@restart/ui/@restart/hooks": ["@restart/hooks@0.5.1", "", { "dependencies": { "dequal": "^2.0.3" }, "peerDependencies": { "react": ">=16.8.0" } }, "sha512-EMoH04NHS1pbn07iLTjIjgttuqb7qu4+/EyhAx27MHpoENcB2ZdSsLTNxmKD+WEPnZigo62Qc8zjGnNxoSE/5Q=="], "@restart/ui/uncontrollable": ["uncontrollable@8.0.4", "", { "peerDependencies": { "react": ">=16.14.0" } }, "sha512-ulRWYWHvscPFc0QQXvyJjY6LIXU56f0h8pQFvhxiKk5V1fcI8gp9Ht9leVAhrVjzqMw0BgjspBINx9r6oyJUvQ=="], @@ -1532,6 +1658,8 @@ "chalk/supports-color": ["supports-color@7.2.0", "", { "dependencies": { "has-flag": "^4.0.0" } }, "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw=="], + "cosmiconfig/parse-json": ["parse-json@5.2.0", "", { "dependencies": { "@babel/code-frame": "^7.0.0", "error-ex": "^1.3.1", "json-parse-even-better-errors": "^2.3.0", "lines-and-columns": "^1.1.6" } }, "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg=="], + "csso/css-tree": ["css-tree@2.2.1", "", { "dependencies": { "mdn-data": "2.0.28", "source-map-js": "^1.0.1" } }, "sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA=="], "eslint-config-next/eslint-import-resolver-typescript": ["eslint-import-resolver-typescript@3.10.1", "", { "dependencies": { "@nolyfill/is-core-module": "1.0.39", "debug": "^4.4.0", "get-tsconfig": "^4.10.0", "is-bun-module": "^2.0.0", "stable-hash": "^0.0.5", "tinyglobby": "^0.2.13", "unrs-resolver": "^1.6.2" }, "peerDependencies": { "eslint": "*", "eslint-plugin-import": "*", "eslint-plugin-import-x": "*" }, "optionalPeers": ["eslint-plugin-import", "eslint-plugin-import-x"] }, "sha512-A1rHYb06zjMGAxdLSkN2fXPBwuSaQ0iO5M/hdyS0Ajj1VBaRp0sPD3dn1FhME3c/JluGFbwSxyCfqdSbtQLAHQ=="], @@ -1560,6 +1688,8 @@ "next/postcss": ["postcss@8.4.31", "", { "dependencies": { "nanoid": "^3.3.6", "picocolors": "^1.0.0", "source-map-js": "^1.0.2" } }, "sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ=="], + "openapi-typescript/supports-color": ["supports-color@10.2.2", "", {}, "sha512-SS+jx45GF1QjgEXQx4NJZV9ImqmO2NPz5FNsIHrsDjh2YsHnawpan7SNQ1o8NuhrbHZy9AZhIoCUiCeaW/C80g=="], + "sharp/detect-libc": ["detect-libc@2.1.2", "", {}, "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ=="], "string-width/emoji-regex": ["emoji-regex@8.0.0", "", {}, "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="], @@ -1582,6 +1712,12 @@ "@next/eslint-plugin-next/fast-glob/glob-parent": ["glob-parent@5.1.2", "", { "dependencies": { "is-glob": "^4.0.1" } }, "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow=="], + "@redocly/openapi-core/minimatch/brace-expansion": ["brace-expansion@2.0.2", "", { "dependencies": { "balanced-match": "^1.0.0" } }, "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ=="], + + "@svgr/core/cosmiconfig/parse-json": ["parse-json@5.2.0", "", { "dependencies": { "@babel/code-frame": "^7.0.0", "error-ex": "^1.3.1", "json-parse-even-better-errors": "^2.3.0", "lines-and-columns": "^1.1.6" } }, "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg=="], + + "@svgr/plugin-svgo/cosmiconfig/parse-json": ["parse-json@5.2.0", "", { "dependencies": { "@babel/code-frame": "^7.0.0", "error-ex": "^1.3.1", "json-parse-even-better-errors": "^2.3.0", "lines-and-columns": "^1.1.6" } }, "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg=="], + "@typescript-eslint/typescript-estree/minimatch/brace-expansion": ["brace-expansion@2.0.2", "", { "dependencies": { "balanced-match": "^1.0.0" } }, "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ=="], "csso/css-tree/mdn-data": ["mdn-data@2.0.28", "", {}, "sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g=="], @@ -1594,6 +1730,8 @@ "table/ajv/json-schema-traverse": ["json-schema-traverse@1.0.0", "", {}, "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug=="], + "@redocly/openapi-core/minimatch/brace-expansion/balanced-match": ["balanced-match@1.0.2", "", {}, "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="], + "@typescript-eslint/typescript-estree/minimatch/brace-expansion/balanced-match": ["balanced-match@1.0.2", "", {}, "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="], "glob/minimatch/brace-expansion/balanced-match": ["balanced-match@1.0.2", "", {}, "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="], diff --git a/package.json b/package.json index da7b99b..688202b 100644 --- a/package.json +++ b/package.json @@ -10,27 +10,34 @@ "lint": "concurrently \"bun run lint:es\" \"bun run lint:prettier\"", "create-component": "npx generate-react-cli component", "gc": "bun run .scripts/create-fsd-component.ts", - "gicons": "npx @svgr/cli --ext tsx --typescript --no-prettier --icon --ref --no-svgo ./src/shared/assets/raw-icons/ --out-dir ./src/shared/ui/Icons/" + "gicons": "npx @svgr/cli --ext tsx --typescript --no-prettier --icon --ref --no-svgo ./src/shared/assets/raw-icons/ --out-dir ./src/shared/ui/Icons/", + "gen:api-types": "openapi-typescript http://127.0.0.1:8000/api/schema/ --output src/shared/api/__generated__/openapi.types.ts" }, "dependencies": { + "@radix-ui/react-dropdown-menu": "^2.1.16", "@tanstack/react-query": "^5.90.14", "@tanstack/react-query-devtools": "^5.91.2", "axios": "^1.13.2", "bootstrap": "^5.3.8", "classnames": "^2.5.1", "framer-motion": "^12.23.26", + "js-cookie": "^3.0.5", "lodash": "^4.17.21", "lucide-react": "^0.562.0", "moment": "^2.30.1", "next": "16.1.1", "normalize.css": "^8.0.1", + "openapi-fetch": "^0.15.0", "openapi-react-query": "^0.5.1", "react": "^19.2.3", "react-aria-components": "^1.14.0", "react-bootstrap": "^2.10.10", "react-dom": "^19.2.3", "react-dropzone": "^14.3.8", + "react-hook-form": "^7.71.0", + "react-modern-drawer": "^1.4.0", "react-toastify": "^11.0.5", + "use-mask-input": "^3.6.0", "usehooks-ts": "^3.1.1", "xior": "^0.8.2" }, @@ -38,6 +45,7 @@ "@ianvs/prettier-plugin-sort-imports": "^4.7.0", "@svgr/cli": "^8.1.0", "@types/bun": "^1.3.5", + "@types/js-cookie": "^3.0.6", "@types/node": "^25.0.3", "@types/react": "^19.2.7", "@types/react-dom": "^19.2.3", @@ -48,6 +56,7 @@ "eslint-plugin-boundaries": "^5.3.1", "eslint-plugin-react-hooks": "^7.0.1", "eslint-plugin-react-refresh": "^0.4.26", + "openapi-typescript": "^7.10.1", "prettier": "^3.7.4", "sass": "^1.97.1", "stylelint": "^16.26.1", diff --git a/proxy.ts b/proxy.ts new file mode 100644 index 0000000..60a1ddf --- /dev/null +++ b/proxy.ts @@ -0,0 +1,104 @@ +import { NextRequest, NextResponse } from "next/server" + +import { pingServer, verifyToken } from "@shared/api/server" +import { ENTRY_PATHS_REGEXP, EXCLUDE_PATHS_REGEXP } from "@shared/lib/constants" + +const redirector = async ({ + pathname, + queryString, + headers, + initialPath, + endPath, + origin, +}: { + initialPath: string + endPath: string + pathname: string + queryString: string + origin: string + headers: Headers +}) => { + if (pathname.includes(initialPath)) { + const sp = queryString.length ? `?${queryString}` : "" + const finalURL = `${origin}${pathname.replace(initialPath, endPath)}${sp}` + return NextResponse.redirect(finalURL, { headers }) + } +} + +const redirections: { from: string; to: string }[] = [] + +export async function proxy(req: NextRequest) { + // Base URL data from nextjs + const { origin, pathname, searchParams } = req.nextUrl + // Headers data from nextjs + const headers = new Headers(req.headers) + // Token data from cookies + const token = req.cookies.get("access_token")?.value + // Server status check + const isServerAlive = (await pingServer()) !== false + // Entry paths checkers + const isEntryPath = ENTRY_PATHS_REGEXP.test(pathname) + const isExcludedPath = EXCLUDE_PATHS_REGEXP.test(pathname) + // Stringified qs + const queryParams = searchParams.toString() + + // Set current path header for analytics purposes + headers.set("x-current-path", req.nextUrl.pathname) + + // Redirect to under_maintenance if server is down + if (!isServerAlive && pathname !== "/under_maintenance") { + return NextResponse.redirect( + `${origin}/under_maintenance?path=${pathname}${queryParams}`, + { headers }, + ) + } + + // Verify user if page is not public + if (!isExcludedPath && isServerAlive) { + const isVerified = + token && + (await verifyToken(token).catch((e) => { + console.error( + "Middleware verification error\n", + String(e).toLowerCase(), + ) + return null + })) + if (isVerified && isEntryPath) { + return NextResponse.redirect(`${origin}/`, { headers }) + } + if (!isVerified && !isEntryPath) { + const returnParam = pathname === "/" ? "" : `?from=${pathname}` + return NextResponse.redirect(`${origin}/login${returnParam}`, { headers }) + } + } + + for (const redirection of redirections) { + const redirect = await redirector({ + pathname, + headers, + origin, + initialPath: redirection.from, + endPath: redirection.to, + queryString: searchParams.toString(), + }) + if (redirect) { + return redirect + } + } + + return NextResponse.next({ headers, request: { headers } }) +} + +export const config = { + matcher: [ + { + source: "/((?!api|_next/static|_next/image|favicon.ico).*)", + missing: [ + { type: "header", key: "next-router-prefetch" }, + { type: "header", key: "next-action" }, + { type: "header", key: "purpose", value: "prefetch" }, + ], + }, + ], +} diff --git a/src/pages/LoginPage/index.ts b/src/pages/LoginPage/index.ts new file mode 100644 index 0000000..dc2b166 --- /dev/null +++ b/src/pages/LoginPage/index.ts @@ -0,0 +1 @@ +export * from "./ui/LoginPage" diff --git a/src/pages/LoginPage/model/LoginPage.d.ts b/src/pages/LoginPage/model/LoginPage.d.ts new file mode 100644 index 0000000..e3f37e1 --- /dev/null +++ b/src/pages/LoginPage/model/LoginPage.d.ts @@ -0,0 +1,3 @@ +export interface ILoginPageProps { + message?: string +} diff --git a/src/pages/LoginPage/ui/LoginPage.module.scss b/src/pages/LoginPage/ui/LoginPage.module.scss new file mode 100644 index 0000000..c9d2d8d --- /dev/null +++ b/src/pages/LoginPage/ui/LoginPage.module.scss @@ -0,0 +1,41 @@ +.root { +} + +.form { + position: absolute; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); + max-width: 520px; + max-height: 720px; + + display: flex; + flex-direction: column; + gap: 16px; +} + +.title { + @include typography.font-header-l; + width: 100%; + text-align: center; +} + +.fields { + display: flex; + flex-direction: column; + gap: 8px; +} + +.actions { + display: flex; + justify-content: center; +} + +.link { + color: inherit; + text-decoration: none; + + &:hover { + text-decoration: underline; + } +} \ No newline at end of file diff --git a/src/pages/LoginPage/ui/LoginPage.tsx b/src/pages/LoginPage/ui/LoginPage.tsx new file mode 100644 index 0000000..14f7e55 --- /dev/null +++ b/src/pages/LoginPage/ui/LoginPage.tsx @@ -0,0 +1,84 @@ +"use client" + +import type { JSX } from "react" + +import { FunctionComponent } from "react" +import { useForm } from "react-hook-form" + +import Link from "next/link" + +import api from "@shared/api" +import { useCookie } from "@shared/hooks/useCookie" +import { + ACCESS_TOKEN_COOKIE, + REFRESH_TOKEN_COOKIE, +} from "@shared/lib/constants" +import { Button, Form, TextField } from "@shared/ui" + +import { ILoginPageProps } from "../model/LoginPage.d" +import styles from "./LoginPage.module.scss" + +interface ILoginFormData { + login: string + password: string +} + +export const LoginPage: FunctionComponent< + ILoginPageProps +> = (): JSX.Element => { + const [, setAccessTokenCookie] = useCookie(ACCESS_TOKEN_COOKIE) + const [, setRefreshTokenCookie] = useCookie(REFRESH_TOKEN_COOKIE) + + const { mutate, isPending } = api.useMutation("post", "/auth/login", { + onSuccess: ({ access, refresh, user }) => { + setAccessTokenCookie(access) + setRefreshTokenCookie(refresh) + console.log("Login successful:", user) + }, + onError: (error) => { + console.error("Login failed:", error) + }, + }) + + const { register, handleSubmit } = useForm() + + const onSubmit = (data: ILoginFormData): void => { + mutate({ + body: { + username: data.login, + password: data.password, + }, + }) + } + + return ( +
+
+

Вход

+
+ + +
+ +
+ + Нет аккаунта? Зарегистрироваться + +
+
+
+ ) +} diff --git a/src/pages/RegisterPage/index.ts b/src/pages/RegisterPage/index.ts new file mode 100644 index 0000000..62e46c2 --- /dev/null +++ b/src/pages/RegisterPage/index.ts @@ -0,0 +1 @@ +export * from "./ui/RegisterPage" diff --git a/src/pages/RegisterPage/model/RegisterPage.d.ts b/src/pages/RegisterPage/model/RegisterPage.d.ts new file mode 100644 index 0000000..e850c04 --- /dev/null +++ b/src/pages/RegisterPage/model/RegisterPage.d.ts @@ -0,0 +1,3 @@ +export interface IRegisterPageProps { + message?: string +} diff --git a/src/pages/RegisterPage/ui/RegisterPage.module.scss b/src/pages/RegisterPage/ui/RegisterPage.module.scss new file mode 100644 index 0000000..43c8627 --- /dev/null +++ b/src/pages/RegisterPage/ui/RegisterPage.module.scss @@ -0,0 +1,29 @@ +.root { + opacity: 1; +} + +.form { + position: absolute; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); + max-width: 520px; + max-height: 820px; + width: 100%; + + display: flex; + flex-direction: column; + gap: 16px; +} + +.title { + @include typography.font-header-l; + width: 100%; + text-align: center; +} + +.fields { + display: flex; + flex-direction: column; + gap: 8px; +} diff --git a/src/pages/RegisterPage/ui/RegisterPage.tsx b/src/pages/RegisterPage/ui/RegisterPage.tsx new file mode 100644 index 0000000..1dfea83 --- /dev/null +++ b/src/pages/RegisterPage/ui/RegisterPage.tsx @@ -0,0 +1,114 @@ +"use client" + +import type { JSX } from "react" + +import { FunctionComponent } from "react" +import { useForm } from "react-hook-form" + +import { useHookFormMask } from "use-mask-input" + +import api from "@shared/api" +import { Button, Form, TextField } from "@shared/ui" + +import { IRegisterPageProps } from "../model/RegisterPage.d" +import styles from "./RegisterPage.module.scss" + +interface IRegisterFormData { + username: string + email: string + password: string + first_name: string + last_name: string + phone_number?: string + avatar?: string +} + +export const RegisterPage: FunctionComponent< + IRegisterPageProps +> = (): JSX.Element => { + const { mutate, isPending } = api.useMutation("post", "/auth/register", { + onSuccess: (data) => { + console.log("Register successful:", data) + }, + onError: (error) => { + console.error("Register failed:", error) + }, + }) + + const { register, handleSubmit } = useForm() + const registerWithMask = useHookFormMask(register) + + const onSubmit = (data: IRegisterFormData): void => { + const phone = data.phone_number?.trim() + const avatar = data.avatar?.trim() + + mutate({ + body: { + username: data.username, + email: data.email, + password: data.password, + first_name: data.first_name, + last_name: data.last_name, + phone_number: phone || undefined, + avatar: avatar || undefined, + }, + }) + } + + return ( +
+
+

Регистрация

+
+ + + + + + + +
+ +
+
+ ) +} diff --git a/src/shared/api/__generated__/openapi.types.ts b/src/shared/api/__generated__/openapi.types.ts new file mode 100644 index 0000000..ccd3386 --- /dev/null +++ b/src/shared/api/__generated__/openapi.types.ts @@ -0,0 +1,3346 @@ +/** + * This file was auto-generated by openapi-typescript. + * Do not make direct changes to the file. + */ + +export interface paths { + "/api/ping/": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** Ping */ + get: operations["ping_api_ping__get"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/auth/register": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + /** Register */ + post: operations["register_auth_register_post"]; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/auth/login": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + /** Login */ + post: operations["login_auth_login_post"]; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/auth/refresh": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + /** Refresh */ + post: operations["refresh_auth_refresh_post"]; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/users/": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** List All Users */ + get: operations["list_all_users_api_users__get"]; + put?: never; + /** Create User Endpoint */ + post: operations["create_user_endpoint_api_users__post"]; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/users/me/": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** Me */ + get: operations["me_api_users_me__get"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/users/{user_id}/": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** Retrieve User */ + get: operations["retrieve_user_api_users__user_id___get"]; + put?: never; + post?: never; + /** Delete User */ + delete: operations["delete_user_api_users__user_id___delete"]; + options?: never; + head?: never; + /** Patch User */ + patch: operations["patch_user_api_users__user_id___patch"]; + trace?: never; + }; + "/api/projects/": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** List All Projects */ + get: operations["list_all_projects_api_projects__get"]; + put?: never; + /** Create Project Endpoint */ + post: operations["create_project_endpoint_api_projects__post"]; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/projects/{project_id}/": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** Retrieve Project */ + get: operations["retrieve_project_api_projects__project_id___get"]; + put?: never; + post?: never; + /** Delete Project */ + delete: operations["delete_project_api_projects__project_id___delete"]; + options?: never; + head?: never; + /** Patch Project */ + patch: operations["patch_project_api_projects__project_id___patch"]; + trace?: never; + }; + "/api/storage/upload/": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + /** Upload File */ + post: operations["upload_file_api_storage_upload__post"]; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/storage/get_file/": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** Get File Info */ + get: operations["get_file_info_api_storage_get_file__get"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/storage/local/{file_path}": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** Get Local File */ + get: operations["get_local_file_api_storage_local__file_path__get"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/storage/files/": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** List File Entries */ + get: operations["list_file_entries_api_storage_files__get"]; + put?: never; + /** Create File Entry */ + post: operations["create_file_entry_api_storage_files__post"]; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/storage/files/{file_id}/": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** Retrieve File Entry */ + get: operations["retrieve_file_entry_api_storage_files__file_id___get"]; + put?: never; + post?: never; + /** Delete File Entry */ + delete: operations["delete_file_entry_api_storage_files__file_id___delete"]; + options?: never; + head?: never; + /** Patch File Entry */ + patch: operations["patch_file_entry_api_storage_files__file_id___patch"]; + trace?: never; + }; + "/api/media/get_meta/": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** Get Meta */ + get: operations["get_meta_api_media_get_meta__get"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/media/silence_remove": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + /** Silence Remove */ + post: operations["silence_remove_api_media_silence_remove_post"]; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/media/convert": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + /** Convert */ + post: operations["convert_api_media_convert_post"]; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/media/mediafiles/": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** List Mediafiles */ + get: operations["list_mediafiles_api_media_mediafiles__get"]; + put?: never; + /** Create Mediafile */ + post: operations["create_mediafile_api_media_mediafiles__post"]; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/media/mediafiles/{media_file_id}/": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** Retrieve Mediafile */ + get: operations["retrieve_mediafile_api_media_mediafiles__media_file_id___get"]; + put?: never; + post?: never; + /** Delete Mediafile */ + delete: operations["delete_mediafile_api_media_mediafiles__media_file_id___delete"]; + options?: never; + head?: never; + /** Patch Mediafile */ + patch: operations["patch_mediafile_api_media_mediafiles__media_file_id___patch"]; + trace?: never; + }; + "/api/media/artifacts/": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** List Artifact Mediafiles */ + get: operations["list_artifact_mediafiles_api_media_artifacts__get"]; + put?: never; + /** Create Artifact Mediafile */ + post: operations["create_artifact_mediafile_api_media_artifacts__post"]; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/media/artifacts/{artifact_id}/": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** Retrieve Artifact Mediafile */ + get: operations["retrieve_artifact_mediafile_api_media_artifacts__artifact_id___get"]; + put?: never; + post?: never; + /** Delete Artifact Mediafile */ + delete: operations["delete_artifact_mediafile_api_media_artifacts__artifact_id___delete"]; + options?: never; + head?: never; + /** Patch Artifact Mediafile */ + patch: operations["patch_artifact_mediafile_api_media_artifacts__artifact_id___patch"]; + trace?: never; + }; + "/api/transcribe/transcriptions/": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** List All Transcriptions */ + get: operations["list_all_transcriptions_api_transcribe_transcriptions__get"]; + put?: never; + /** Create Transcription Entry */ + post: operations["create_transcription_entry_api_transcribe_transcriptions__post"]; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/transcribe/transcriptions/{transcription_id}/": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** Retrieve Transcription Entry */ + get: operations["retrieve_transcription_entry_api_transcribe_transcriptions__transcription_id___get"]; + put?: never; + post?: never; + /** Delete Transcription Entry */ + delete: operations["delete_transcription_entry_api_transcribe_transcriptions__transcription_id___delete"]; + options?: never; + head?: never; + /** Patch Transcription Entry */ + patch: operations["patch_transcription_entry_api_transcribe_transcriptions__transcription_id___patch"]; + trace?: never; + }; + "/api/transcribe/whisper/": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + /** Whisper Transcribe */ + post: operations["whisper_transcribe_api_transcribe_whisper__post"]; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/transcribe/google-speech/": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + /** Google Speech Transcribe */ + post: operations["google_speech_transcribe_api_transcribe_google_speech__post"]; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/captions/get_video/": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + /** Get Video */ + post: operations["get_video_api_captions_get_video__post"]; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/jobs/jobs/": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** List Jobs Endpoint */ + get: operations["list_jobs_endpoint_api_jobs_jobs__get"]; + put?: never; + /** Create Job Endpoint */ + post: operations["create_job_endpoint_api_jobs_jobs__post"]; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/jobs/jobs/{job_id}/": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** Retrieve Job Endpoint */ + get: operations["retrieve_job_endpoint_api_jobs_jobs__job_id___get"]; + put?: never; + post?: never; + /** Delete Job Endpoint */ + delete: operations["delete_job_endpoint_api_jobs_jobs__job_id___delete"]; + options?: never; + head?: never; + /** Patch Job Endpoint */ + patch: operations["patch_job_endpoint_api_jobs_jobs__job_id___patch"]; + trace?: never; + }; + "/api/jobs/events/": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** List Events Endpoint */ + get: operations["list_events_endpoint_api_jobs_events__get"]; + put?: never; + /** Create Event Endpoint */ + post: operations["create_event_endpoint_api_jobs_events__post"]; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/jobs/events/{event_id}/": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** Retrieve Event Endpoint */ + get: operations["retrieve_event_endpoint_api_jobs_events__event_id___get"]; + put?: never; + post?: never; + /** Delete Event Endpoint */ + delete: operations["delete_event_endpoint_api_jobs_events__event_id___delete"]; + options?: never; + head?: never; + /** Patch Event Endpoint */ + patch: operations["patch_event_endpoint_api_jobs_events__event_id___patch"]; + trace?: never; + }; + "/api/webhooks/": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** List All Webhooks */ + get: operations["list_all_webhooks_api_webhooks__get"]; + put?: never; + /** Create Webhook Endpoint */ + post: operations["create_webhook_endpoint_api_webhooks__post"]; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/webhooks/{webhook_id}/": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** Retrieve Webhook Endpoint */ + get: operations["retrieve_webhook_endpoint_api_webhooks__webhook_id___get"]; + put?: never; + post?: never; + /** Delete Webhook Endpoint */ + delete: operations["delete_webhook_endpoint_api_webhooks__webhook_id___delete"]; + options?: never; + head?: never; + /** Patch Webhook Endpoint */ + patch: operations["patch_webhook_endpoint_api_webhooks__webhook_id___patch"]; + trace?: never; + }; +} +export type webhooks = Record; +export interface components { + schemas: { + /** ArtifactMediaFileCreate */ + ArtifactMediaFileCreate: { + /** Project Id */ + project_id?: string | null; + /** File Id */ + file_id?: string | null; + /** + * Media File Id + * Format: uuid + */ + media_file_id: string; + /** + * Artifact Type + * @enum {string} + */ + artifact_type: "TRANSCRIPTION_JSON" | "SILENCE_REMOVED_VIDEO" | "THUMBNAIL" | "AUDIO_PROXY" | "RENDERED_VIDEO"; + }; + /** ArtifactMediaFileRead */ + ArtifactMediaFileRead: { + /** + * Id + * Format: uuid + */ + id: string; + /** Project Id */ + project_id: string | null; + /** File Id */ + file_id: string | null; + /** + * Media File Id + * Format: uuid + */ + media_file_id: string; + /** + * Artifact Type + * @enum {string} + */ + artifact_type: "TRANSCRIPTION_JSON" | "SILENCE_REMOVED_VIDEO" | "THUMBNAIL" | "AUDIO_PROXY" | "RENDERED_VIDEO"; + /** Is Deleted */ + is_deleted: boolean; + /** Is Active */ + is_active: boolean; + /** + * Created At + * Format: date-time + */ + created_at: string; + /** + * Updated At + * Format: date-time + */ + updated_at: string; + }; + /** ArtifactMediaFileUpdate */ + ArtifactMediaFileUpdate: { + /** Is Deleted */ + is_deleted?: boolean | null; + }; + /** Body_upload_file_api_storage_upload__post */ + Body_upload_file_api_storage_upload__post: { + /** + * File + * Format: binary + */ + file: string; + /** + * Folder + * @default + */ + folder: string; + }; + /** CaptionsRequest */ + CaptionsRequest: { + /** Folder */ + folder: string; + /** Video S3 Path */ + video_s3_path: string; + transcription: components["schemas"]["Document-Input"]; + }; + /** CaptionsResponse */ + CaptionsResponse: { + /** Result */ + result: string; + }; + /** DispositionSchema */ + DispositionSchema: { + /** Default */ + default?: number | null; + } & { + [key: string]: unknown; + }; + /** Document */ + "Document-Input": { + /** Segments */ + segments: components["schemas"]["SegmentNode-Input"][]; + }; + /** Document */ + "Document-Output": { + /** Segments */ + segments: components["schemas"]["SegmentNode-Output"][]; + }; + /** FileCreate */ + FileCreate: { + /** Project Id */ + project_id?: string | null; + /** Original Filename */ + original_filename: string; + /** Path */ + path: string; + /** + * Storage Backend + * @default S3 + * @enum {string} + */ + storage_backend: "LOCAL" | "S3"; + /** Mime Type */ + mime_type: string; + /** Size Bytes */ + size_bytes: number; + /** Checksum */ + checksum?: string | null; + /** File Format */ + file_format?: string | null; + /** + * Is Uploaded + * @default false + */ + is_uploaded: boolean; + }; + /** FileInfoResponse */ + FileInfoResponse: { + /** File Path */ + file_path: string; + /** File Url */ + file_url: string; + /** File Size */ + file_size?: number | null; + /** Filename */ + filename?: string | null; + }; + /** FileRead */ + FileRead: { + /** + * Id + * Format: uuid + */ + id: string; + /** Project Id */ + project_id: string | null; + /** Owner Id */ + owner_id: string | null; + /** Original Filename */ + original_filename: string; + /** Path */ + path: string; + /** + * Storage Backend + * @enum {string} + */ + storage_backend: "LOCAL" | "S3"; + /** Mime Type */ + mime_type: string; + /** Size Bytes */ + size_bytes: number; + /** Checksum */ + checksum: string | null; + /** File Format */ + file_format: string | null; + /** Is Uploaded */ + is_uploaded: boolean; + /** Is Deleted */ + is_deleted: boolean; + /** Is Active */ + is_active: boolean; + /** + * Created At + * Format: date-time + */ + created_at: string; + /** + * Updated At + * Format: date-time + */ + updated_at: string; + }; + /** FileUpdate */ + FileUpdate: { + /** Original Filename */ + original_filename?: string | null; + /** Is Uploaded */ + is_uploaded?: boolean | null; + /** Is Deleted */ + is_deleted?: boolean | null; + }; + /** FormatSchema */ + FormatSchema: { + /** Filename */ + filename?: string | null; + /** Nb Streams */ + nb_streams?: number | null; + /** Format Name */ + format_name?: string | null; + /** Format Long Name */ + format_long_name?: string | null; + /** Start Time */ + start_time?: string | null; + /** Duration */ + duration?: string | null; + /** Size */ + size?: string | null; + /** Bit Rate */ + bit_rate?: string | null; + /** Probe Score */ + probe_score?: number | null; + /** Tags */ + tags?: { + [key: string]: string; + } | null; + } & { + [key: string]: unknown; + }; + /** GoogleSpeechParams */ + GoogleSpeechParams: { + /** File Path */ + file_path: string; + /** Language Codes */ + language_codes?: string[] | null; + }; + /** HTTPValidationError */ + HTTPValidationError: { + /** Detail */ + detail?: components["schemas"]["ValidationError"][]; + }; + /** JobCreate */ + JobCreate: { + /** Broker Id */ + broker_id: string; + /** Project Id */ + project_id?: string | null; + /** Input Data */ + input_data?: { + [key: string]: unknown; + } | null; + /** + * Status + * @default PENDING + * @enum {string} + */ + status: "PENDING" | "RUNNING" | "FAILED" | "CANCELLED" | "DONE"; + /** + * Job Type + * @default PENDING + * @enum {string} + */ + job_type: "PENDING" | "RUNNING" | "FAILED" | "CANCELLED" | "DONE"; + }; + /** JobEventCreate */ + JobEventCreate: { + /** + * Job Id + * Format: uuid + */ + job_id: string; + /** Event Type */ + event_type: string; + /** Payload */ + payload?: { + [key: string]: unknown; + } | null; + }; + /** JobEventRead */ + JobEventRead: { + /** + * Id + * Format: uuid + */ + id: string; + /** + * Job Id + * Format: uuid + */ + job_id: string; + /** Event Type */ + event_type: string; + /** Payload */ + payload: { + [key: string]: unknown; + } | null; + /** Is Active */ + is_active: boolean; + /** + * Created At + * Format: date-time + */ + created_at: string; + /** + * Updated At + * Format: date-time + */ + updated_at: string; + }; + /** JobEventUpdate */ + JobEventUpdate: { + /** Payload */ + payload?: { + [key: string]: unknown; + } | null; + }; + /** JobRead */ + JobRead: { + /** + * Id + * Format: uuid + */ + id: string; + /** Broker Id */ + broker_id: string; + /** User Id */ + user_id: string | null; + /** Project Id */ + project_id: string | null; + /** Input Data */ + input_data: { + [key: string]: unknown; + } | null; + /** Output Data */ + output_data: { + [key: string]: unknown; + } | null; + /** + * Status + * @enum {string} + */ + status: "PENDING" | "RUNNING" | "FAILED" | "CANCELLED" | "DONE"; + /** + * Job Type + * @enum {string} + */ + job_type: "PENDING" | "RUNNING" | "FAILED" | "CANCELLED" | "DONE"; + /** Project Pct */ + project_pct: number | null; + /** Error Message */ + error_message: string | null; + /** Current Message */ + current_message: string | null; + /** Started At */ + started_at: string | null; + /** Finished At */ + finished_at: string | null; + /** Is Active */ + is_active: boolean; + /** + * Created At + * Format: date-time + */ + created_at: string; + /** + * Updated At + * Format: date-time + */ + updated_at: string; + }; + /** JobUpdate */ + JobUpdate: { + /** Output Data */ + output_data?: { + [key: string]: unknown; + } | null; + /** Status */ + status?: ("PENDING" | "RUNNING" | "FAILED" | "CANCELLED" | "DONE") | null; + /** Project Pct */ + project_pct?: number | null; + /** Error Message */ + error_message?: string | null; + /** Current Message */ + current_message?: string | null; + /** Started At */ + started_at?: string | null; + /** Finished At */ + finished_at?: string | null; + }; + /** LineNode */ + "LineNode-Input": { + /** Text */ + text: string; + /** Semantic Tags */ + semantic_tags: components["schemas"]["Tag"][]; + /** Structure Tags */ + structure_tags: components["schemas"]["Tag"][]; + time: components["schemas"]["TimeRange"]; + /** Words */ + words: components["schemas"]["WordNode"][]; + }; + /** LineNode */ + "LineNode-Output": { + /** Text */ + text: string; + /** Semantic Tags */ + semantic_tags: components["schemas"]["Tag"][]; + /** Structure Tags */ + structure_tags: components["schemas"]["Tag"][]; + time: components["schemas"]["TimeRange"]; + /** Words */ + words: components["schemas"]["WordNode"][]; + }; + /** MediaConverterParams */ + MediaConverterParams: { + /** File Path */ + file_path: string; + /** + * Folder + * @default + */ + folder: string; + }; + /** MediaFileCreate */ + MediaFileCreate: { + /** Project Id */ + project_id?: string | null; + /** Duration Seconds */ + duration_seconds: number; + /** Frame Rate */ + frame_rate?: number | null; + /** Width */ + width?: number | null; + /** Height */ + height?: number | null; + /** Probe Json */ + probe_json?: { + [key: string]: unknown; + } | null; + /** Notes */ + notes?: string | null; + /** Meta */ + meta?: { + [key: string]: unknown; + } | null; + }; + /** MediaFileRead */ + MediaFileRead: { + /** + * Id + * Format: uuid + */ + id: string; + /** + * Owner Id + * Format: uuid + */ + owner_id: string; + /** Project Id */ + project_id: string | null; + /** Duration Seconds */ + duration_seconds: number; + /** Frame Rate */ + frame_rate: number | null; + /** Width */ + width: number | null; + /** Height */ + height: number | null; + /** Probe Json */ + probe_json: { + [key: string]: unknown; + } | null; + /** Notes */ + notes: string | null; + /** Meta */ + meta: { + [key: string]: unknown; + } | null; + /** Is Deleted */ + is_deleted: boolean; + /** Is Active */ + is_active: boolean; + /** + * Created At + * Format: date-time + */ + created_at: string; + /** + * Updated At + * Format: date-time + */ + updated_at: string; + }; + /** MediaFileUpdate */ + MediaFileUpdate: { + /** Notes */ + notes?: string | null; + /** Meta */ + meta?: { + [key: string]: unknown; + } | null; + /** Is Deleted */ + is_deleted?: boolean | null; + }; + /** MediaProbeSchema */ + MediaProbeSchema: { + /** + * Streams + * @default [] + */ + streams: components["schemas"]["StreamSchema"][]; + format?: components["schemas"]["FormatSchema"] | null; + } & { + [key: string]: unknown; + }; + /** MediaSilencerParams */ + MediaSilencerParams: { + /** File Path */ + file_path: string; + /** + * Folder + * @default + */ + folder: string; + /** + * Min Silence Duration Ms + * @default 200 + */ + min_silence_duration_ms: number; + /** + * Silence Threshold Db + * @default 16 + */ + silence_threshold_db: number; + /** + * Padding Ms + * @default 100 + */ + padding_ms: number; + }; + /** ProjectCreate */ + ProjectCreate: { + /** Name */ + name: string; + /** Description */ + description?: string | null; + /** + * Language + * @default auto + */ + language: string; + /** Folder */ + folder?: string | null; + /** + * Status + * @default DRAFT + * @enum {string} + */ + status: "DRAFT" | "PROCESSING" | "DONE" | "FAILED"; + }; + /** ProjectRead */ + ProjectRead: { + /** + * Id + * Format: uuid + */ + id: string; + /** + * Owner Id + * Format: uuid + */ + owner_id: string; + /** Name */ + name: string; + /** Description */ + description: string | null; + /** Language */ + language: string; + /** Folder */ + folder: string | null; + /** + * Status + * @enum {string} + */ + status: "DRAFT" | "PROCESSING" | "DONE" | "FAILED"; + /** Is Active */ + is_active: boolean; + /** + * Created At + * Format: date-time + */ + created_at: string; + /** + * Updated At + * Format: date-time + */ + updated_at: string; + }; + /** ProjectUpdate */ + ProjectUpdate: { + /** Name */ + name?: string | null; + /** Description */ + description?: string | null; + /** Language */ + language?: string | null; + /** Folder */ + folder?: string | null; + /** Status */ + status?: ("DRAFT" | "PROCESSING" | "DONE" | "FAILED") | null; + }; + /** SegmentNode */ + "SegmentNode-Input": { + /** Text */ + text: string; + /** Semantic Tags */ + semantic_tags: components["schemas"]["Tag"][]; + /** Structure Tags */ + structure_tags: components["schemas"]["Tag"][]; + time: components["schemas"]["TimeRange"]; + /** Lines */ + lines: components["schemas"]["LineNode-Input"][]; + }; + /** SegmentNode */ + "SegmentNode-Output": { + /** Text */ + text: string; + /** Semantic Tags */ + semantic_tags: components["schemas"]["Tag"][]; + /** Structure Tags */ + structure_tags: components["schemas"]["Tag"][]; + time: components["schemas"]["TimeRange"]; + /** Lines */ + lines: components["schemas"]["LineNode-Output"][]; + }; + /** StreamSchema */ + StreamSchema: { + /** Index */ + index?: number | null; + /** Codec Name */ + codec_name?: string | null; + /** Codec Long Name */ + codec_long_name?: string | null; + /** Profile */ + profile?: string | null; + /** Codec Type */ + codec_type?: string | null; + /** Codec Tag String */ + codec_tag_string?: string | null; + /** Codec Tag */ + codec_tag?: string | null; + /** Width */ + width?: number | null; + /** Height */ + height?: number | null; + /** Id */ + id?: string | null; + /** R Frame Rate */ + r_frame_rate?: string | null; + /** Avg Frame Rate */ + avg_frame_rate?: string | null; + /** Time Base */ + time_base?: string | null; + /** Start Pts */ + start_pts?: number | null; + /** Start Time */ + start_time?: string | null; + /** Duration Ts */ + duration_ts?: number | null; + /** Duration */ + duration?: string | null; + /** Bit Rate */ + bit_rate?: string | null; + /** Nb Frames */ + nb_frames?: string | null; + /** Extradata Size */ + extradata_size?: number | null; + disposition?: components["schemas"]["DispositionSchema"] | null; + /** Tags */ + tags?: { + [key: string]: string; + } | null; + } & { + [key: string]: unknown; + }; + /** Tag */ + Tag: { + /** Name */ + name: string; + }; + /** TimeRange */ + TimeRange: { + /** Start */ + start: number; + /** End */ + end: number; + }; + /** TokenRefresh */ + TokenRefresh: { + /** Refresh */ + refresh: string; + }; + /** TokenRefreshResponse */ + TokenRefreshResponse: { + /** Access */ + access: string; + /** Refresh */ + refresh: string; + }; + /** TranscriptionCreate */ + TranscriptionCreate: { + /** Project Id */ + project_id?: string | null; + /** + * Source File Id + * Format: uuid + */ + source_file_id: string; + /** Artifact Id */ + artifact_id?: string | null; + /** + * Engine + * @default LOCAL_WHISPER + * @enum {string} + */ + engine: "LOCAL_WHISPER" | "GOOGLE_SPEECH_CLOUD"; + /** Language */ + language?: string | null; + /** Document */ + document: { + [key: string]: unknown; + }; + /** Transcribe Options */ + transcribe_options?: { + [key: string]: unknown; + } | null; + }; + /** TranscriptionRead */ + TranscriptionRead: { + /** + * Id + * Format: uuid + */ + id: string; + /** Project Id */ + project_id: string | null; + /** + * Source File Id + * Format: uuid + */ + source_file_id: string; + /** Artifact Id */ + artifact_id: string | null; + /** + * Engine + * @enum {string} + */ + engine: "LOCAL_WHISPER" | "GOOGLE_SPEECH_CLOUD"; + /** Language */ + language: string | null; + /** Document */ + document: { + [key: string]: unknown; + }; + /** Transcribe Options */ + transcribe_options: { + [key: string]: unknown; + } | null; + /** Is Active */ + is_active: boolean; + /** + * Created At + * Format: date-time + */ + created_at: string; + /** + * Updated At + * Format: date-time + */ + updated_at: string; + }; + /** TranscriptionUpdate */ + TranscriptionUpdate: { + /** Document */ + document?: { + [key: string]: unknown; + } | null; + /** Transcribe Options */ + transcribe_options?: { + [key: string]: unknown; + } | null; + }; + /** UserCreate */ + UserCreate: { + /** Username */ + username: string; + /** Email */ + email: string; + /** Password */ + password: string; + /** + * First Name + * @default + */ + first_name: string; + /** + * Last Name + * @default + */ + last_name: string; + /** Phone Number */ + phone_number?: string | null; + /** Avatar */ + avatar?: string | null; + }; + /** UserLogin */ + UserLogin: { + /** Username */ + username: string; + /** Password */ + password: string; + }; + /** UserRead */ + UserRead: { + /** + * Id + * Format: uuid + */ + id: string; + /** Username */ + username: string; + /** Email */ + email: string; + /** First Name */ + first_name: string; + /** Last Name */ + last_name: string; + /** Phone Number */ + phone_number: string | null; + /** Avatar */ + avatar: string | null; + /** Email Verified */ + email_verified: boolean; + /** Phone Verified */ + phone_verified: boolean; + /** Is Active */ + is_active: boolean; + /** Is Staff */ + is_staff: boolean; + /** Is Superuser */ + is_superuser: boolean; + /** + * Date Joined + * Format: date-time + */ + date_joined: string; + /** + * Created At + * Format: date-time + */ + created_at: string; + /** + * Updated At + * Format: date-time + */ + updated_at: string; + }; + /** UserRegister */ + UserRegister: { + /** Username */ + username: string; + /** Email */ + email: string; + /** Password */ + password: string; + /** + * First Name + * @default + */ + first_name: string; + /** + * Last Name + * @default + */ + last_name: string; + /** Phone Number */ + phone_number?: string | null; + /** Avatar */ + avatar?: string | null; + }; + /** UserRegisterResponse */ + UserRegisterResponse: { + user: components["schemas"]["UserRead"]; + /** Access */ + access: string; + /** Refresh */ + refresh: string; + }; + /** UserUpdate */ + UserUpdate: { + /** First Name */ + first_name?: string | null; + /** Last Name */ + last_name?: string | null; + /** Email */ + email?: string | null; + /** Phone Number */ + phone_number?: string | null; + /** Avatar */ + avatar?: string | null; + }; + /** ValidationError */ + ValidationError: { + /** Location */ + loc: (string | number)[]; + /** Message */ + msg: string; + /** Error Type */ + type: string; + }; + /** WebhookCreate */ + WebhookCreate: { + /** Project Id */ + project_id?: string | null; + /** Event */ + event?: string | null; + /** Url */ + url: string; + /** Secret */ + secret?: string | null; + /** + * Is Active + * @default true + */ + is_active: boolean; + }; + /** WebhookRead */ + WebhookRead: { + /** + * Id + * Format: uuid + */ + id: string; + /** Project Id */ + project_id: string | null; + /** User Id */ + user_id: string | null; + /** Event */ + event: string | null; + /** Url */ + url: string; + /** Secret */ + secret: string | null; + /** Is Active */ + is_active: boolean; + /** + * Created At + * Format: date-time + */ + created_at: string; + /** + * Updated At + * Format: date-time + */ + updated_at: string; + }; + /** WebhookUpdate */ + WebhookUpdate: { + /** Event */ + event?: string | null; + /** Url */ + url?: string | null; + /** Secret */ + secret?: string | null; + /** Is Active */ + is_active?: boolean | null; + }; + /** WhisperParams */ + WhisperParams: { + /** File Path */ + file_path: string; + /** Language */ + language?: string | null; + /** + * Model Name + * @default tiny + */ + model_name: string; + }; + /** WordNode */ + WordNode: { + /** Text */ + text: string; + /** Semantic Tags */ + semantic_tags: components["schemas"]["Tag"][]; + /** Structure Tags */ + structure_tags: components["schemas"]["Tag"][]; + time: components["schemas"]["TimeRange"]; + }; + }; + responses: never; + parameters: never; + requestBodies: never; + headers: never; + pathItems: never; +} +export type $defs = Record; +export interface operations { + ping_api_ping__get: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": { + [key: string]: string; + }; + }; + }; + }; + }; + register_auth_register_post: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody: { + content: { + "application/json": components["schemas"]["UserRegister"]; + }; + }; + responses: { + /** @description Successful Response */ + 201: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["UserRegisterResponse"]; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["HTTPValidationError"]; + }; + }; + }; + }; + login_auth_login_post: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody: { + content: { + "application/json": components["schemas"]["UserLogin"]; + }; + }; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["UserRegisterResponse"]; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["HTTPValidationError"]; + }; + }; + }; + }; + refresh_auth_refresh_post: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody: { + content: { + "application/json": components["schemas"]["TokenRefresh"]; + }; + }; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["TokenRefreshResponse"]; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["HTTPValidationError"]; + }; + }; + }; + }; + list_all_users_api_users__get: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["UserRead"][]; + }; + }; + }; + }; + create_user_endpoint_api_users__post: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody: { + content: { + "application/json": components["schemas"]["UserCreate"]; + }; + }; + responses: { + /** @description Successful Response */ + 201: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["UserRead"]; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["HTTPValidationError"]; + }; + }; + }; + }; + me_api_users_me__get: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["UserRead"]; + }; + }; + }; + }; + retrieve_user_api_users__user_id___get: { + parameters: { + query?: never; + header?: never; + path: { + user_id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["UserRead"]; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["HTTPValidationError"]; + }; + }; + }; + }; + delete_user_api_users__user_id___delete: { + parameters: { + query?: never; + header?: never; + path: { + user_id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 204: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["HTTPValidationError"]; + }; + }; + }; + }; + patch_user_api_users__user_id___patch: { + parameters: { + query?: never; + header?: never; + path: { + user_id: string; + }; + cookie?: never; + }; + requestBody: { + content: { + "application/json": components["schemas"]["UserUpdate"]; + }; + }; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["UserRead"]; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["HTTPValidationError"]; + }; + }; + }; + }; + list_all_projects_api_projects__get: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ProjectRead"][]; + }; + }; + }; + }; + create_project_endpoint_api_projects__post: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody: { + content: { + "application/json": components["schemas"]["ProjectCreate"]; + }; + }; + responses: { + /** @description Successful Response */ + 201: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ProjectRead"]; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["HTTPValidationError"]; + }; + }; + }; + }; + retrieve_project_api_projects__project_id___get: { + parameters: { + query?: never; + header?: never; + path: { + project_id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ProjectRead"]; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["HTTPValidationError"]; + }; + }; + }; + }; + delete_project_api_projects__project_id___delete: { + parameters: { + query?: never; + header?: never; + path: { + project_id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 204: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["HTTPValidationError"]; + }; + }; + }; + }; + patch_project_api_projects__project_id___patch: { + parameters: { + query?: never; + header?: never; + path: { + project_id: string; + }; + cookie?: never; + }; + requestBody: { + content: { + "application/json": components["schemas"]["ProjectUpdate"]; + }; + }; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ProjectRead"]; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["HTTPValidationError"]; + }; + }; + }; + }; + upload_file_api_storage_upload__post: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody: { + content: { + "multipart/form-data": components["schemas"]["Body_upload_file_api_storage_upload__post"]; + }; + }; + responses: { + /** @description Successful Response */ + 201: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["FileInfoResponse"]; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["HTTPValidationError"]; + }; + }; + }; + }; + get_file_info_api_storage_get_file__get: { + parameters: { + query: { + file_path: string; + }; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["FileInfoResponse"]; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["HTTPValidationError"]; + }; + }; + }; + }; + get_local_file_api_storage_local__file_path__get: { + parameters: { + query?: never; + header?: never; + path: { + file_path: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": unknown; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["HTTPValidationError"]; + }; + }; + }; + }; + list_file_entries_api_storage_files__get: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["FileRead"][]; + }; + }; + }; + }; + create_file_entry_api_storage_files__post: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody: { + content: { + "application/json": components["schemas"]["FileCreate"]; + }; + }; + responses: { + /** @description Successful Response */ + 201: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["FileRead"]; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["HTTPValidationError"]; + }; + }; + }; + }; + retrieve_file_entry_api_storage_files__file_id___get: { + parameters: { + query?: never; + header?: never; + path: { + file_id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["FileRead"]; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["HTTPValidationError"]; + }; + }; + }; + }; + delete_file_entry_api_storage_files__file_id___delete: { + parameters: { + query?: never; + header?: never; + path: { + file_id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 204: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["HTTPValidationError"]; + }; + }; + }; + }; + patch_file_entry_api_storage_files__file_id___patch: { + parameters: { + query?: never; + header?: never; + path: { + file_id: string; + }; + cookie?: never; + }; + requestBody: { + content: { + "application/json": components["schemas"]["FileUpdate"]; + }; + }; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["FileRead"]; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["HTTPValidationError"]; + }; + }; + }; + }; + get_meta_api_media_get_meta__get: { + parameters: { + query: { + file_path: string; + }; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["MediaProbeSchema"]; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["HTTPValidationError"]; + }; + }; + }; + }; + silence_remove_api_media_silence_remove_post: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody: { + content: { + "application/json": components["schemas"]["MediaSilencerParams"]; + }; + }; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["FileInfoResponse"]; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["HTTPValidationError"]; + }; + }; + }; + }; + convert_api_media_convert_post: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody: { + content: { + "application/json": components["schemas"]["MediaConverterParams"]; + }; + }; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["FileInfoResponse"]; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["HTTPValidationError"]; + }; + }; + }; + }; + list_mediafiles_api_media_mediafiles__get: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["MediaFileRead"][]; + }; + }; + }; + }; + create_mediafile_api_media_mediafiles__post: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody: { + content: { + "application/json": components["schemas"]["MediaFileCreate"]; + }; + }; + responses: { + /** @description Successful Response */ + 201: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["MediaFileRead"]; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["HTTPValidationError"]; + }; + }; + }; + }; + retrieve_mediafile_api_media_mediafiles__media_file_id___get: { + parameters: { + query?: never; + header?: never; + path: { + media_file_id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["MediaFileRead"]; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["HTTPValidationError"]; + }; + }; + }; + }; + delete_mediafile_api_media_mediafiles__media_file_id___delete: { + parameters: { + query?: never; + header?: never; + path: { + media_file_id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 204: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["HTTPValidationError"]; + }; + }; + }; + }; + patch_mediafile_api_media_mediafiles__media_file_id___patch: { + parameters: { + query?: never; + header?: never; + path: { + media_file_id: string; + }; + cookie?: never; + }; + requestBody: { + content: { + "application/json": components["schemas"]["MediaFileUpdate"]; + }; + }; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["MediaFileRead"]; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["HTTPValidationError"]; + }; + }; + }; + }; + list_artifact_mediafiles_api_media_artifacts__get: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ArtifactMediaFileRead"][]; + }; + }; + }; + }; + create_artifact_mediafile_api_media_artifacts__post: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody: { + content: { + "application/json": components["schemas"]["ArtifactMediaFileCreate"]; + }; + }; + responses: { + /** @description Successful Response */ + 201: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ArtifactMediaFileRead"]; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["HTTPValidationError"]; + }; + }; + }; + }; + retrieve_artifact_mediafile_api_media_artifacts__artifact_id___get: { + parameters: { + query?: never; + header?: never; + path: { + artifact_id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ArtifactMediaFileRead"]; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["HTTPValidationError"]; + }; + }; + }; + }; + delete_artifact_mediafile_api_media_artifacts__artifact_id___delete: { + parameters: { + query?: never; + header?: never; + path: { + artifact_id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 204: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["HTTPValidationError"]; + }; + }; + }; + }; + patch_artifact_mediafile_api_media_artifacts__artifact_id___patch: { + parameters: { + query?: never; + header?: never; + path: { + artifact_id: string; + }; + cookie?: never; + }; + requestBody: { + content: { + "application/json": components["schemas"]["ArtifactMediaFileUpdate"]; + }; + }; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ArtifactMediaFileRead"]; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["HTTPValidationError"]; + }; + }; + }; + }; + list_all_transcriptions_api_transcribe_transcriptions__get: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["TranscriptionRead"][]; + }; + }; + }; + }; + create_transcription_entry_api_transcribe_transcriptions__post: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody: { + content: { + "application/json": components["schemas"]["TranscriptionCreate"]; + }; + }; + responses: { + /** @description Successful Response */ + 201: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["TranscriptionRead"]; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["HTTPValidationError"]; + }; + }; + }; + }; + retrieve_transcription_entry_api_transcribe_transcriptions__transcription_id___get: { + parameters: { + query?: never; + header?: never; + path: { + transcription_id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["TranscriptionRead"]; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["HTTPValidationError"]; + }; + }; + }; + }; + delete_transcription_entry_api_transcribe_transcriptions__transcription_id___delete: { + parameters: { + query?: never; + header?: never; + path: { + transcription_id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 204: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["HTTPValidationError"]; + }; + }; + }; + }; + patch_transcription_entry_api_transcribe_transcriptions__transcription_id___patch: { + parameters: { + query?: never; + header?: never; + path: { + transcription_id: string; + }; + cookie?: never; + }; + requestBody: { + content: { + "application/json": components["schemas"]["TranscriptionUpdate"]; + }; + }; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["TranscriptionRead"]; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["HTTPValidationError"]; + }; + }; + }; + }; + whisper_transcribe_api_transcribe_whisper__post: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody: { + content: { + "application/json": components["schemas"]["WhisperParams"]; + }; + }; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["Document-Output"]; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["HTTPValidationError"]; + }; + }; + }; + }; + google_speech_transcribe_api_transcribe_google_speech__post: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody: { + content: { + "application/json": components["schemas"]["GoogleSpeechParams"]; + }; + }; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["Document-Output"]; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["HTTPValidationError"]; + }; + }; + }; + }; + get_video_api_captions_get_video__post: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody: { + content: { + "application/json": components["schemas"]["CaptionsRequest"]; + }; + }; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["CaptionsResponse"]; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["HTTPValidationError"]; + }; + }; + }; + }; + list_jobs_endpoint_api_jobs_jobs__get: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["JobRead"][]; + }; + }; + }; + }; + create_job_endpoint_api_jobs_jobs__post: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody: { + content: { + "application/json": components["schemas"]["JobCreate"]; + }; + }; + responses: { + /** @description Successful Response */ + 201: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["JobRead"]; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["HTTPValidationError"]; + }; + }; + }; + }; + retrieve_job_endpoint_api_jobs_jobs__job_id___get: { + parameters: { + query?: never; + header?: never; + path: { + job_id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["JobRead"]; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["HTTPValidationError"]; + }; + }; + }; + }; + delete_job_endpoint_api_jobs_jobs__job_id___delete: { + parameters: { + query?: never; + header?: never; + path: { + job_id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 204: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["HTTPValidationError"]; + }; + }; + }; + }; + patch_job_endpoint_api_jobs_jobs__job_id___patch: { + parameters: { + query?: never; + header?: never; + path: { + job_id: string; + }; + cookie?: never; + }; + requestBody: { + content: { + "application/json": components["schemas"]["JobUpdate"]; + }; + }; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["JobRead"]; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["HTTPValidationError"]; + }; + }; + }; + }; + list_events_endpoint_api_jobs_events__get: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["JobEventRead"][]; + }; + }; + }; + }; + create_event_endpoint_api_jobs_events__post: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody: { + content: { + "application/json": components["schemas"]["JobEventCreate"]; + }; + }; + responses: { + /** @description Successful Response */ + 201: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["JobEventRead"]; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["HTTPValidationError"]; + }; + }; + }; + }; + retrieve_event_endpoint_api_jobs_events__event_id___get: { + parameters: { + query?: never; + header?: never; + path: { + event_id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["JobEventRead"]; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["HTTPValidationError"]; + }; + }; + }; + }; + delete_event_endpoint_api_jobs_events__event_id___delete: { + parameters: { + query?: never; + header?: never; + path: { + event_id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 204: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["HTTPValidationError"]; + }; + }; + }; + }; + patch_event_endpoint_api_jobs_events__event_id___patch: { + parameters: { + query?: never; + header?: never; + path: { + event_id: string; + }; + cookie?: never; + }; + requestBody: { + content: { + "application/json": components["schemas"]["JobEventUpdate"]; + }; + }; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["JobEventRead"]; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["HTTPValidationError"]; + }; + }; + }; + }; + list_all_webhooks_api_webhooks__get: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["WebhookRead"][]; + }; + }; + }; + }; + create_webhook_endpoint_api_webhooks__post: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody: { + content: { + "application/json": components["schemas"]["WebhookCreate"]; + }; + }; + responses: { + /** @description Successful Response */ + 201: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["WebhookRead"]; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["HTTPValidationError"]; + }; + }; + }; + }; + retrieve_webhook_endpoint_api_webhooks__webhook_id___get: { + parameters: { + query?: never; + header?: never; + path: { + webhook_id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["WebhookRead"]; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["HTTPValidationError"]; + }; + }; + }; + }; + delete_webhook_endpoint_api_webhooks__webhook_id___delete: { + parameters: { + query?: never; + header?: never; + path: { + webhook_id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 204: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["HTTPValidationError"]; + }; + }; + }; + }; + patch_webhook_endpoint_api_webhooks__webhook_id___patch: { + parameters: { + query?: never; + header?: never; + path: { + webhook_id: string; + }; + cookie?: never; + }; + requestBody: { + content: { + "application/json": components["schemas"]["WebhookUpdate"]; + }; + }; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["WebhookRead"]; + }; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["HTTPValidationError"]; + }; + }; + }; + }; +} diff --git a/src/shared/api/index.ts b/src/shared/api/index.ts new file mode 100644 index 0000000..959a7ba --- /dev/null +++ b/src/shared/api/index.ts @@ -0,0 +1,56 @@ +import createClient from "openapi-react-query" + +import createFetchClient, { Middleware } from "openapi-fetch" + +import { ACCESS_TOKEN_REGEXP, API_URL } from "@shared/lib/constants" + +import { paths } from "./__generated__/openapi.types" + +const isServer = typeof window === "undefined" + +const getAccessTokenFromCookieHeader = ( + cookieHeader: string | null, +): string | undefined => { + if (!cookieHeader) return + const token = cookieHeader.replace(ACCESS_TOKEN_REGEXP, "$1") + return token.length ? token : undefined +} + +export const fetchClient = createFetchClient({ + baseUrl: API_URL, + // credentials: "include", + headers: { + "Content-Type": "application/json", + }, +}) + +const middleware: Middleware = { + async onRequest({ request }) { + if (request.headers.has("Authorization")) return + + let token: string | undefined + if (isServer) { + // In middleware/edge runtime there is no `next/headers` request scope. + token = getAccessTokenFromCookieHeader(request.headers.get("cookie")) + if (!token) { + try { + const { cookies } = await import("next/headers") + token = (await cookies()).get("access_token")?.value + } catch { + // Not in a request scope (e.g. middleware/edge or build-time). + } + } + } else { + token = document.cookie.replace(ACCESS_TOKEN_REGEXP, "$1") + } + + if (token?.length) request.headers.set("Authorization", `Bearer ${token}`) + }, + async onError({ error }) { + return new Error("Oops, fetch failed", { cause: error }) + }, +} +fetchClient.use(middleware) + +export const api = createClient(fetchClient) +export default api diff --git a/src/shared/api/server.ts b/src/shared/api/server.ts new file mode 100644 index 0000000..d490f6c --- /dev/null +++ b/src/shared/api/server.ts @@ -0,0 +1,29 @@ +"use server" + +import { fetchClient } from "." + +export const pingServer = async (): Promise => { + try { + await fetchClient.GET("/api/ping/") + return true + } catch (error) { + console.error("Ping server error:", error) + return false + } +} + +export const verifyToken = async (token: string): Promise => { + console.log("Verifying token:", token) + try { + const resp = await fetchClient.GET("/api/users/me/", { + headers: { + Authorization: `Bearer ${token}`, + }, + }) + console.log("Verify token response:", resp) + return true + } catch (error) { + console.error("Verify token error:", error) + return false + } +} diff --git a/src/shared/context/QueryClientProvider.tsx b/src/shared/context/QueryClientProvider.tsx new file mode 100644 index 0000000..6977546 --- /dev/null +++ b/src/shared/context/QueryClientProvider.tsx @@ -0,0 +1,18 @@ +"use client" + +import { QueryClientProvider as QueryClientProviderTanstack } from "@tanstack/react-query" +import { JSX, Suspense } from "react" + +import { queryClient } from "@shared/lib/query_client" + +export const QueryClientProvider = ({ + children, +}: { + children: React.ReactNode +}): JSX.Element => { + return ( + + {children} + + ) +} diff --git a/src/shared/hooks/useCookie.tsx b/src/shared/hooks/useCookie.tsx new file mode 100644 index 0000000..d218b5d --- /dev/null +++ b/src/shared/hooks/useCookie.tsx @@ -0,0 +1,13 @@ +import Cookies from "js-cookie" + +export const useCookie = (key: string, defaultValue: string | null = null) => { + const getCookie = Cookies.get(key) || defaultValue + const setCookie = (value: string) => Cookies.set(key, value) + const removeCookie = () => Cookies.remove(key) + + return [getCookie, setCookie, removeCookie] as [ + string | null, + (value: string) => void, + () => void, + ] +} diff --git a/src/shared/lib/constants.ts b/src/shared/lib/constants.ts new file mode 100644 index 0000000..1fcaa12 --- /dev/null +++ b/src/shared/lib/constants.ts @@ -0,0 +1,37 @@ +export const ACCESS_TOKEN_COOKIE = "access_token" +export const REFRESH_TOKEN_COOKIE = "refresh_token" + +export const ACCESS_TOKEN_REGEXP = new RegExp( + /(?:(?:^|.*;\s*)access_token\s*=\s*([^;]*).*$)|^.*$/, +) + +export const API_URL = process.env.NEXT_PUBLIC_API_URL + +// Paths that can be accessed without authentication and without redirecting to login +export const ESSENTIAL_PATHS = [ + ".*/login.*", + ".*/register.*", + ".*/reset-password.*", + ".*/recover.*", +] + +// Paths that are excluded from authentication checks +export const EXCLUDED_PATHS = [ + "^/public/.*", + "^/_next.*", + "^/static.*", + "^/fonts.*", + ".*/api.*", + ".*/logout.*", + ".*/confirm-email.*", + ".*/recover.*", + ".*/manifest.json.*", + ".*/android.*", + ".*/apple.*", + ".*/favicon.*", + ".*/workbox.*", + ".*/sw.js.*", +] + +export const ENTRY_PATHS_REGEXP = new RegExp(ESSENTIAL_PATHS.join("|")) +export const EXCLUDE_PATHS_REGEXP = new RegExp(EXCLUDED_PATHS.join("|")) diff --git a/src/shared/lib/query_client.ts b/src/shared/lib/query_client.ts new file mode 100644 index 0000000..944dbea --- /dev/null +++ b/src/shared/lib/query_client.ts @@ -0,0 +1,3 @@ +import { QueryClient } from "@tanstack/react-query" + +export const queryClient = new QueryClient() diff --git a/src/shared/model/index.ts b/src/shared/model/index.ts new file mode 100644 index 0000000..e69de29 diff --git a/src/shared/styles/global.scss b/src/shared/styles/global.scss index bcb8d01..7e19aff 100644 --- a/src/shared/styles/global.scss +++ b/src/shared/styles/global.scss @@ -14,6 +14,10 @@ body { background-color: #f8f8f8; + + @media (prefers-color-scheme: dark) { + background-color: #121212; + } } :root { diff --git a/src/shared/ui/Alert/index.ts b/src/shared/ui/Alert/index.ts new file mode 100644 index 0000000..30fc0d4 --- /dev/null +++ b/src/shared/ui/Alert/index.ts @@ -0,0 +1 @@ +export * from "./ui/Alert" diff --git a/src/shared/ui/Alert/model/Alert.d.ts b/src/shared/ui/Alert/model/Alert.d.ts new file mode 100644 index 0000000..558f4ec --- /dev/null +++ b/src/shared/ui/Alert/model/Alert.d.ts @@ -0,0 +1,3 @@ +import type { AlertProps } from "react-bootstrap/Alert" + +export interface IAlertProps extends AlertProps {} diff --git a/src/shared/ui/Alert/ui/Alert.module.scss b/src/shared/ui/Alert/ui/Alert.module.scss new file mode 100644 index 0000000..e69de29 diff --git a/src/shared/ui/Alert/ui/Alert.tsx b/src/shared/ui/Alert/ui/Alert.tsx new file mode 100644 index 0000000..3c50049 --- /dev/null +++ b/src/shared/ui/Alert/ui/Alert.tsx @@ -0,0 +1,13 @@ +"use client" + +import type { IAlertProps } from "../model/Alert.d" +import type { JSX } from "react" + +import { forwardRef } from "react" +import BootstrapAlert from "react-bootstrap/Alert" + +export const Alert = forwardRef( + (props, ref): JSX.Element => , +) + +Alert.displayName = "Alert" diff --git a/src/shared/ui/Badge/index.ts b/src/shared/ui/Badge/index.ts new file mode 100644 index 0000000..db92aa5 --- /dev/null +++ b/src/shared/ui/Badge/index.ts @@ -0,0 +1 @@ +export * from "./ui/Badge" diff --git a/src/shared/ui/Badge/model/Badge.d.ts b/src/shared/ui/Badge/model/Badge.d.ts new file mode 100644 index 0000000..e527287 --- /dev/null +++ b/src/shared/ui/Badge/model/Badge.d.ts @@ -0,0 +1,3 @@ +import type { BadgeProps } from "react-bootstrap/Badge" + +export interface IBadgeProps extends BadgeProps {} diff --git a/src/shared/ui/Badge/ui/Badge.module.scss b/src/shared/ui/Badge/ui/Badge.module.scss new file mode 100644 index 0000000..e69de29 diff --git a/src/shared/ui/Badge/ui/Badge.tsx b/src/shared/ui/Badge/ui/Badge.tsx new file mode 100644 index 0000000..9a134dd --- /dev/null +++ b/src/shared/ui/Badge/ui/Badge.tsx @@ -0,0 +1,13 @@ +"use client" + +import type { IBadgeProps } from "../model/Badge.d" +import type { JSX } from "react" + +import { forwardRef } from "react" +import BootstrapBadge from "react-bootstrap/Badge" + +export const Badge = forwardRef( + (props, ref): JSX.Element => , +) + +Badge.displayName = "Badge" diff --git a/src/shared/ui/Button/Button.d.ts b/src/shared/ui/Button/Button.d.ts index eccfc48..5dc7f3b 100644 --- a/src/shared/ui/Button/Button.d.ts +++ b/src/shared/ui/Button/Button.d.ts @@ -1,3 +1 @@ -export interface IButtonProps { - message?: string -} +export * from "./model/Button.d" diff --git a/src/shared/ui/Button/Button.tsx b/src/shared/ui/Button/Button.tsx index fbb586c..60d6887 100644 --- a/src/shared/ui/Button/Button.tsx +++ b/src/shared/ui/Button/Button.tsx @@ -1,7 +1 @@ -import BootstrapButton, { ButtonProps } from "react-bootstrap/Button" - -export const Button = (props: ButtonProps) => ( - - {props.children} - -) +export * from "./ui/Button" diff --git a/src/shared/ui/Button/index.ts b/src/shared/ui/Button/index.ts index 6783701..60d6887 100644 --- a/src/shared/ui/Button/index.ts +++ b/src/shared/ui/Button/index.ts @@ -1 +1 @@ -export * from "./Button" +export * from "./ui/Button" diff --git a/src/shared/ui/Button/model/Button.d.ts b/src/shared/ui/Button/model/Button.d.ts new file mode 100644 index 0000000..4163680 --- /dev/null +++ b/src/shared/ui/Button/model/Button.d.ts @@ -0,0 +1,3 @@ +import type { ButtonProps } from "react-bootstrap/Button" + +export interface IButtonProps extends ButtonProps {} diff --git a/src/shared/ui/Button/ui/Button.module.scss b/src/shared/ui/Button/ui/Button.module.scss new file mode 100644 index 0000000..e69de29 diff --git a/src/shared/ui/Button/ui/Button.tsx b/src/shared/ui/Button/ui/Button.tsx new file mode 100644 index 0000000..9b638b7 --- /dev/null +++ b/src/shared/ui/Button/ui/Button.tsx @@ -0,0 +1,13 @@ +"use client" + +import type { IButtonProps } from "../model/Button.d" +import type { JSX } from "react" + +import { forwardRef } from "react" +import BootstrapButton from "react-bootstrap/Button" + +export const Button = forwardRef( + (props, ref): JSX.Element => , +) + +Button.displayName = "Button" diff --git a/src/shared/ui/Card/index.ts b/src/shared/ui/Card/index.ts new file mode 100644 index 0000000..d92b158 --- /dev/null +++ b/src/shared/ui/Card/index.ts @@ -0,0 +1 @@ +export * from "./ui/Card" diff --git a/src/shared/ui/Card/model/Card.d.ts b/src/shared/ui/Card/model/Card.d.ts new file mode 100644 index 0000000..2aba8bb --- /dev/null +++ b/src/shared/ui/Card/model/Card.d.ts @@ -0,0 +1,3 @@ +import type { CardProps } from "react-bootstrap/Card" + +export interface ICardProps extends CardProps {} diff --git a/src/shared/ui/Card/ui/Card.module.scss b/src/shared/ui/Card/ui/Card.module.scss new file mode 100644 index 0000000..e69de29 diff --git a/src/shared/ui/Card/ui/Card.tsx b/src/shared/ui/Card/ui/Card.tsx new file mode 100644 index 0000000..49e939c --- /dev/null +++ b/src/shared/ui/Card/ui/Card.tsx @@ -0,0 +1,13 @@ +"use client" + +import type { ICardProps } from "../model/Card.d" +import type { JSX } from "react" + +import { forwardRef } from "react" +import BootstrapCard from "react-bootstrap/Card" + +export const Card = forwardRef( + (props, ref): JSX.Element => , +) + +Card.displayName = "Card" diff --git a/src/shared/ui/Checkbox/index.ts b/src/shared/ui/Checkbox/index.ts new file mode 100644 index 0000000..e5e0f22 --- /dev/null +++ b/src/shared/ui/Checkbox/index.ts @@ -0,0 +1 @@ +export * from "./ui/Checkbox" diff --git a/src/shared/ui/Checkbox/model/Checkbox.d.ts b/src/shared/ui/Checkbox/model/Checkbox.d.ts new file mode 100644 index 0000000..08c6da3 --- /dev/null +++ b/src/shared/ui/Checkbox/model/Checkbox.d.ts @@ -0,0 +1,3 @@ +import type { FormCheckProps } from "react-bootstrap/FormCheck" + +export interface ICheckboxProps extends Omit {} diff --git a/src/shared/ui/Checkbox/ui/Checkbox.module.scss b/src/shared/ui/Checkbox/ui/Checkbox.module.scss new file mode 100644 index 0000000..e69de29 diff --git a/src/shared/ui/Checkbox/ui/Checkbox.tsx b/src/shared/ui/Checkbox/ui/Checkbox.tsx new file mode 100644 index 0000000..f7cb6ac --- /dev/null +++ b/src/shared/ui/Checkbox/ui/Checkbox.tsx @@ -0,0 +1,15 @@ +"use client" + +import type { ICheckboxProps } from "../model/Checkbox.d" +import type { JSX } from "react" + +import { forwardRef } from "react" +import BootstrapFormCheck from "react-bootstrap/FormCheck" + +export const Checkbox = forwardRef( + (props, ref): JSX.Element => ( + + ), +) + +Checkbox.displayName = "Checkbox" diff --git a/src/shared/ui/Form/index.ts b/src/shared/ui/Form/index.ts new file mode 100644 index 0000000..4058e71 --- /dev/null +++ b/src/shared/ui/Form/index.ts @@ -0,0 +1 @@ +export * from "./ui/Form" diff --git a/src/shared/ui/Form/model/Form.d.ts b/src/shared/ui/Form/model/Form.d.ts new file mode 100644 index 0000000..5989daf --- /dev/null +++ b/src/shared/ui/Form/model/Form.d.ts @@ -0,0 +1,3 @@ +import type { FormProps } from "react-bootstrap/Form" + +export interface IFormProps extends FormProps {} diff --git a/src/shared/ui/Form/ui/Form.module.scss b/src/shared/ui/Form/ui/Form.module.scss new file mode 100644 index 0000000..e69de29 diff --git a/src/shared/ui/Form/ui/Form.tsx b/src/shared/ui/Form/ui/Form.tsx new file mode 100644 index 0000000..a341f58 --- /dev/null +++ b/src/shared/ui/Form/ui/Form.tsx @@ -0,0 +1,13 @@ +"use client" + +import type { IFormProps } from "../model/Form.d" +import type { JSX } from "react" + +import { forwardRef } from "react" +import BootstrapForm from "react-bootstrap/Form" + +export const Form = forwardRef( + (props, ref): JSX.Element => , +) + +Form.displayName = "Form" diff --git a/src/shared/ui/Modal/index.ts b/src/shared/ui/Modal/index.ts new file mode 100644 index 0000000..1615d64 --- /dev/null +++ b/src/shared/ui/Modal/index.ts @@ -0,0 +1 @@ +export * from "./ui/Modal" diff --git a/src/shared/ui/Modal/model/Modal.d.ts b/src/shared/ui/Modal/model/Modal.d.ts new file mode 100644 index 0000000..34ef7e0 --- /dev/null +++ b/src/shared/ui/Modal/model/Modal.d.ts @@ -0,0 +1,3 @@ +import type { ModalProps } from "react-bootstrap/Modal" + +export interface IModalProps extends ModalProps {} diff --git a/src/shared/ui/Modal/ui/Modal.module.scss b/src/shared/ui/Modal/ui/Modal.module.scss new file mode 100644 index 0000000..e69de29 diff --git a/src/shared/ui/Modal/ui/Modal.tsx b/src/shared/ui/Modal/ui/Modal.tsx new file mode 100644 index 0000000..03f3b12 --- /dev/null +++ b/src/shared/ui/Modal/ui/Modal.tsx @@ -0,0 +1,13 @@ +"use client" + +import type { IModalProps } from "../model/Modal.d" +import type { JSX } from "react" + +import { forwardRef } from "react" +import BootstrapModal from "react-bootstrap/Modal" + +export const Modal = forwardRef( + (props, ref): JSX.Element => , +) + +Modal.displayName = "Modal" diff --git a/src/shared/ui/Pagination/index.ts b/src/shared/ui/Pagination/index.ts new file mode 100644 index 0000000..7cf01a3 --- /dev/null +++ b/src/shared/ui/Pagination/index.ts @@ -0,0 +1 @@ +export * from "./ui/Pagination" diff --git a/src/shared/ui/Pagination/model/Pagination.d.ts b/src/shared/ui/Pagination/model/Pagination.d.ts new file mode 100644 index 0000000..61bc911 --- /dev/null +++ b/src/shared/ui/Pagination/model/Pagination.d.ts @@ -0,0 +1,3 @@ +import type { PaginationProps } from "react-bootstrap/Pagination" + +export interface IPaginationProps extends PaginationProps {} diff --git a/src/shared/ui/Pagination/ui/Pagination.module.scss b/src/shared/ui/Pagination/ui/Pagination.module.scss new file mode 100644 index 0000000..e69de29 diff --git a/src/shared/ui/Pagination/ui/Pagination.tsx b/src/shared/ui/Pagination/ui/Pagination.tsx new file mode 100644 index 0000000..e6fbb93 --- /dev/null +++ b/src/shared/ui/Pagination/ui/Pagination.tsx @@ -0,0 +1,13 @@ +"use client" + +import type { IPaginationProps } from "../model/Pagination.d" +import type { JSX } from "react" + +import { forwardRef } from "react" +import BootstrapPagination from "react-bootstrap/Pagination" + +export const Pagination = forwardRef( + (props, ref): JSX.Element => , +) + +Pagination.displayName = "Pagination" diff --git a/src/shared/ui/Radio/index.ts b/src/shared/ui/Radio/index.ts new file mode 100644 index 0000000..8a7a1b7 --- /dev/null +++ b/src/shared/ui/Radio/index.ts @@ -0,0 +1 @@ +export * from "./ui/Radio" diff --git a/src/shared/ui/Radio/model/Radio.d.ts b/src/shared/ui/Radio/model/Radio.d.ts new file mode 100644 index 0000000..0a8c4bd --- /dev/null +++ b/src/shared/ui/Radio/model/Radio.d.ts @@ -0,0 +1,3 @@ +import type { FormCheckProps } from "react-bootstrap/FormCheck" + +export interface IRadioProps extends Omit {} diff --git a/src/shared/ui/Radio/ui/Radio.module.scss b/src/shared/ui/Radio/ui/Radio.module.scss new file mode 100644 index 0000000..e69de29 diff --git a/src/shared/ui/Radio/ui/Radio.tsx b/src/shared/ui/Radio/ui/Radio.tsx new file mode 100644 index 0000000..6558e16 --- /dev/null +++ b/src/shared/ui/Radio/ui/Radio.tsx @@ -0,0 +1,15 @@ +"use client" + +import type { IRadioProps } from "../model/Radio.d" +import type { JSX } from "react" + +import { forwardRef } from "react" +import BootstrapFormCheck from "react-bootstrap/FormCheck" + +export const Radio = forwardRef( + (props, ref): JSX.Element => ( + + ), +) + +Radio.displayName = "Radio" diff --git a/src/shared/ui/Select/index.ts b/src/shared/ui/Select/index.ts new file mode 100644 index 0000000..ad2f54a --- /dev/null +++ b/src/shared/ui/Select/index.ts @@ -0,0 +1 @@ +export * from "./ui/Select" diff --git a/src/shared/ui/Select/model/Select.d.ts b/src/shared/ui/Select/model/Select.d.ts new file mode 100644 index 0000000..0cdeed5 --- /dev/null +++ b/src/shared/ui/Select/model/Select.d.ts @@ -0,0 +1,3 @@ +import type { FormSelectProps } from "react-bootstrap/FormSelect" + +export interface ISelectProps extends FormSelectProps {} diff --git a/src/shared/ui/Select/ui/Select.module.scss b/src/shared/ui/Select/ui/Select.module.scss new file mode 100644 index 0000000..e69de29 diff --git a/src/shared/ui/Select/ui/Select.tsx b/src/shared/ui/Select/ui/Select.tsx new file mode 100644 index 0000000..648080f --- /dev/null +++ b/src/shared/ui/Select/ui/Select.tsx @@ -0,0 +1,13 @@ +"use client" + +import type { ISelectProps } from "../model/Select.d" +import type { JSX } from "react" + +import { forwardRef } from "react" +import BootstrapFormSelect from "react-bootstrap/FormSelect" + +export const Select = forwardRef( + (props, ref): JSX.Element => , +) + +Select.displayName = "Select" diff --git a/src/shared/ui/Table/index.ts b/src/shared/ui/Table/index.ts new file mode 100644 index 0000000..3425854 --- /dev/null +++ b/src/shared/ui/Table/index.ts @@ -0,0 +1 @@ +export * from "./ui/Table" diff --git a/src/shared/ui/Table/model/Table.d.ts b/src/shared/ui/Table/model/Table.d.ts new file mode 100644 index 0000000..d675509 --- /dev/null +++ b/src/shared/ui/Table/model/Table.d.ts @@ -0,0 +1,3 @@ +import type { TableProps } from "react-bootstrap/Table" + +export interface ITableProps extends TableProps {} diff --git a/src/shared/ui/Table/ui/Table.module.scss b/src/shared/ui/Table/ui/Table.module.scss new file mode 100644 index 0000000..e69de29 diff --git a/src/shared/ui/Table/ui/Table.tsx b/src/shared/ui/Table/ui/Table.tsx new file mode 100644 index 0000000..0c1dadc --- /dev/null +++ b/src/shared/ui/Table/ui/Table.tsx @@ -0,0 +1,13 @@ +"use client" + +import type { ITableProps } from "../model/Table.d" +import type { JSX } from "react" + +import { forwardRef } from "react" +import BootstrapTable from "react-bootstrap/Table" + +export const Table = forwardRef( + (props, ref): JSX.Element => , +) + +Table.displayName = "Table" diff --git a/src/shared/ui/Tabs/index.ts b/src/shared/ui/Tabs/index.ts new file mode 100644 index 0000000..a8eb638 --- /dev/null +++ b/src/shared/ui/Tabs/index.ts @@ -0,0 +1 @@ +export * from "./ui/Tabs" diff --git a/src/shared/ui/Tabs/model/Tabs.d.ts b/src/shared/ui/Tabs/model/Tabs.d.ts new file mode 100644 index 0000000..3be63eb --- /dev/null +++ b/src/shared/ui/Tabs/model/Tabs.d.ts @@ -0,0 +1,3 @@ +import type { TabsProps } from "react-bootstrap/Tabs" + +export interface ITabsProps extends TabsProps {} diff --git a/src/shared/ui/Tabs/ui/Tabs.module.scss b/src/shared/ui/Tabs/ui/Tabs.module.scss new file mode 100644 index 0000000..e69de29 diff --git a/src/shared/ui/Tabs/ui/Tabs.tsx b/src/shared/ui/Tabs/ui/Tabs.tsx new file mode 100644 index 0000000..784dbf9 --- /dev/null +++ b/src/shared/ui/Tabs/ui/Tabs.tsx @@ -0,0 +1,18 @@ +"use client" + +import type { ITabsProps } from "../model/Tabs.d" +import type { ForwardRefExoticComponent, JSX, RefAttributes } from "react" + +import { forwardRef } from "react" +import BootstrapTabs from "react-bootstrap/Tabs" + +const BootstrapTabsWithRef = + BootstrapTabs as unknown as ForwardRefExoticComponent< + ITabsProps & RefAttributes + > + +export const Tabs = forwardRef( + (props, ref): JSX.Element => , +) + +Tabs.displayName = "Tabs" diff --git a/src/shared/ui/TextField/index.ts b/src/shared/ui/TextField/index.ts new file mode 100644 index 0000000..20ef7b8 --- /dev/null +++ b/src/shared/ui/TextField/index.ts @@ -0,0 +1 @@ +export * from "./ui/TextField" diff --git a/src/shared/ui/TextField/model/TextField.d.ts b/src/shared/ui/TextField/model/TextField.d.ts new file mode 100644 index 0000000..0c62ddb --- /dev/null +++ b/src/shared/ui/TextField/model/TextField.d.ts @@ -0,0 +1,7 @@ +import type { FormControlProps } from "react-bootstrap/FormControl" + +export interface ITextFieldProps extends FormControlProps { + id: string + label?: string + undertitle?: string +} diff --git a/src/shared/ui/TextField/ui/TextField.module.scss b/src/shared/ui/TextField/ui/TextField.module.scss new file mode 100644 index 0000000..e69de29 diff --git a/src/shared/ui/TextField/ui/TextField.tsx b/src/shared/ui/TextField/ui/TextField.tsx new file mode 100644 index 0000000..2db080e --- /dev/null +++ b/src/shared/ui/TextField/ui/TextField.tsx @@ -0,0 +1,28 @@ +"use client" + +import type { ITextFieldProps } from "../model/TextField.d" +import type { JSX } from "react" + +import React, { forwardRef } from "react" +import BootstrapForm from "react-bootstrap/Form" + +export const TextField = forwardRef( + ({ id, label, undertitle, ...props }, ref): JSX.Element => ( + + {label && {label}} + + {undertitle && ( + + {undertitle} + + )} + + ), +) + +TextField.displayName = "TextField" diff --git a/src/shared/ui/index.ts b/src/shared/ui/index.ts index 6783701..6ce798c 100644 --- a/src/shared/ui/index.ts +++ b/src/shared/ui/index.ts @@ -1 +1,13 @@ +export * from "./Alert" +export * from "./Badge" export * from "./Button" +export * from "./Card" +export * from "./Checkbox" +export * from "./Form" +export * from "./TextField" +export * from "./Modal" +export * from "./Pagination" +export * from "./Radio" +export * from "./Select" +export * from "./Table" +export * from "./Tabs"