├── .github ├── .okta │ └── sample-config.yaml ├── dependabot.yml └── workflows │ ├── main.yml │ └── merge.yml ├── .gitignore ├── .okta.env ├── .okta └── sample-config.yaml ├── README.md ├── index.html ├── package-lock.json ├── package.json ├── public ├── favicon.ico ├── index.html ├── manifest.json └── react.svg ├── src ├── App.css ├── App.jsx ├── Navbar.jsx ├── components │ ├── Loading.jsx │ ├── Routes.jsx │ └── SecureRoute.jsx ├── config.js ├── index.css ├── index.jsx ├── logo.svg └── pages │ ├── Home.jsx │ ├── Messages.jsx │ ├── Profile.jsx │ └── __tests__ │ └── Home.spec.jsx └── vite.config.js /.github/.okta/sample-config.yaml: -------------------------------------------------------------------------------- 1 | oauthClient: 2 | redirectUris: 3 | - http://localhost:3000/login/callback 4 | applicationType: browser 5 | trustedOrigins: 6 | - http://localhost:3000 7 | 8 | directions: |+2 9 | Okta configuration written to: .okta.env 10 | 11 | Build this example using NPM: 12 | 13 | npm install 14 | 15 | And run with: 16 | 17 | npm start 18 | -------------------------------------------------------------------------------- /.github/dependabot.yml: -------------------------------------------------------------------------------- 1 | version: 2 2 | 3 | updates: 4 | 5 | - package-ecosystem: "github-actions" 6 | directory: "/" 7 | schedule: 8 | interval: "weekly" 9 | 10 | - package-ecosystem: "npm" 11 | directory: "/" 12 | schedule: 13 | interval: "weekly" 14 | 15 | -------------------------------------------------------------------------------- /.github/workflows/main.yml: -------------------------------------------------------------------------------- 1 | name: React CI 2 | 3 | on: 4 | push: 5 | branches: [ main ] 6 | pull_request: 7 | branches: [ main ] 8 | 9 | jobs: 10 | build: 11 | runs-on: ubuntu-latest 12 | strategy: 13 | matrix: 14 | node-version: [18, 20] 15 | steps: 16 | - uses: actions/checkout@v4 17 | - name: Use Node.js ${{ matrix.node-version }} 18 | uses: actions/setup-node@v4 19 | with: 20 | node-version: ${{ matrix.node-version }} 21 | cache: 'npm' 22 | - name: Install dependencies 23 | run: npm ci 24 | - name: Create .env file 25 | run: | 26 | touch .okta.env 27 | echo ISSUER=https://dev-17700857.okta.com/oauth2/default > .okta.env 28 | echo CLIENT_ID=0oa73s4gvu9vD6vxv5d7 >> .okta.env 29 | cat .okta.env 30 | - name: Build and test 31 | run: | 32 | npm run build 33 | npm run test 34 | 35 | -------------------------------------------------------------------------------- /.github/workflows/merge.yml: -------------------------------------------------------------------------------- 1 | name: Auto Merge 2 | 3 | on: pull_request_target 4 | 5 | permissions: 6 | pull-requests: write 7 | contents: write 8 | 9 | jobs: 10 | enable-auto-merge: 11 | runs-on: ubuntu-latest 12 | if: ${{ github.repository == 'okta-samples/okta-react-sample' && github.event.pull_request.user.login == 'dependabot[bot]' }} 13 | steps: 14 | - name: Dependabot metadata 15 | id: dependabot-metadata 16 | uses: dependabot/fetch-metadata@v2.4.0 17 | - name: Enable auto-merge for Dependabot PRs 18 | if: ${{ steps.dependabot-metadata.outputs.update-type != 'version-update:semver-major' }} 19 | run: gh pr merge --auto --merge "$PR_URL" 20 | env: 21 | PR_URL: ${{github.event.pull_request.html_url}} 22 | GITHUB_TOKEN: ${{secrets.GITHUB_TOKEN}} 23 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | build 3 | dist 4 | npm-debug.log 5 | okta-oidc-tck 6 | samples-nodejs-express-4 7 | samples-java-spring 8 | .DS_Store 9 | .vscode 10 | .yalc 11 | .idea/ 12 | yalc.lock 13 | .eslintcache 14 | -------------------------------------------------------------------------------- /.okta.env: -------------------------------------------------------------------------------- 1 | ISSUER=${CLI_OKTA_ISSUER} 2 | CLIENT_ID=${CLI_OKTA_CLIENT_ID} 3 | -------------------------------------------------------------------------------- /.okta/sample-config.yaml: -------------------------------------------------------------------------------- 1 | oauthClient: 2 | redirectUris: 3 | - http://localhost:3000/login/callback 4 | applicationType: browser 5 | trustedOrigins: 6 | - http://localhost:3000 7 | 8 | directions: |+2 9 | Okta configuration written to: .okta.env 10 | 11 | Build this example using NPM: 12 | 13 | npm install 14 | 15 | And run with: 16 | 17 | npm start 18 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Okta React + Okta Hosted Login Example 2 | 3 | This example shows how to use the [Okta React Library][] and [React Router](https://github.com/ReactTraining/react-router) to login a user to a React application. The login is achieved through the [PKCE Flow][], where the user is redirected to the Okta-Hosted login page. After the user authenticates they are redirected back to the application with an ID token and access token. 4 | 5 | ## Prerequisites 6 | 7 | Before running this sample, you will need the following: 8 | 9 | * [The Okta CLI Tool](https://github.com/okta/okta-cli#installation) 10 | * An Okta Developer Account (create one using `okta register`, or configure an existing one with `okta login`) 11 | 12 | ## Configure Okta resources 13 | 14 | **Enable Refresh Tokens** 15 | 16 | Sign into your [Okta Developer Edition account](https://developer.okta.com/login/) to add a required setting to your React Okta app to avoid third-party cookies. Navigate to **Applications** > **Applications** and select "okta-react-sample" application to edit. Find the **General Settings** and press **Edit**. Enable **Refresh Token** in the **Grant type** section. **Save** your changes. 17 | 18 | **Verify Authorization Server** 19 | 20 | This repo calls a custom resource server to demonstrate making a protected resource request using an access token. Ensure that your default custom authorization server has an access policy. Add an access policy if it's not there. See [Create access polices](https://help.okta.com/okta_help.htm?type=oie&id=ext-create-access-policies). 21 | 22 | ## Get the Code 23 | 24 | Grab and configure this project using `okta start react`. 25 | 26 | Follow the instructions printed to the console. 27 | 28 | ## Run the Example 29 | 30 | To run this application, install its dependencies: 31 | 32 | ``` 33 | npm ci 34 | ``` 35 | 36 | With variables set, start your app: 37 | 38 | ``` 39 | npm start 40 | ``` 41 | 42 | Navigate to http://localhost:3000 in your browser. 43 | 44 | If you see a home page that prompts you to login, then things are working! Clicking the **Log in** button will redirect you to the Okta hosted sign-in page. 45 | 46 | You can sign in with the same account that you created when signing up for your Developer Org, or you can use a known username and password from your Okta Directory. 47 | 48 | > **Note:** If you are currently using your Developer Console, you already have a Single Sign-On (SSO) session for your Org. You will be automatically logged into your application as the same user that is using the Developer Console. You may want to use an incognito tab to test the flow from a blank slate. 49 | 50 | ## Integrating The Resource Server 51 | 52 | If you were able to successfully login in the previous section you can continue with the resource server example. Please download and run one of these sample applications in another terminal: 53 | 54 | * [Node/Express Resource Server Example](https://github.com/okta/samples-nodejs-express-4/tree/master/resource-server) 55 | * [Java/Spring MVC Resource Server Example](https://github.com/okta/samples-java-spring/tree/master/resource-server) 56 | * [ASP.NET](https://github.com/okta/samples-aspnet/tree/master/resource-server) and [ASP.NET Core](https://github.com/okta/samples-aspnetcore/tree/master/samples-aspnetcore-3x/resource-server) Resource Server Examples 57 | 58 | Once you have the resource server running (it will run on port 8000) you can visit the `/messages` page within the React application to see the authentication flow. The React application will use its stored access token to authenticate itself with the resource server, you will see this as the `Authorization: Bearer ` header on the request if you inspect the network traffic in your browser. 59 | 60 | [Okta React Library]: https://github.com/okta/okta-react 61 | [OIDC SPA Setup Instructions]: https://developer.okta.com/docs/guides/sign-into-spa/react/before-you-begin 62 | [PKCE Flow]: https://developer.okta.com/docs/guides/implement-auth-code-pkce 63 | [Okta Sign In Widget]: https://github.com/okta/okta-signin-widget 64 | -------------------------------------------------------------------------------- /index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | Okta React Sample 8 | 9 | 10 |
11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "okta-react-sample", 3 | "version": "0.0.0", 4 | "lockfileVersion": 3, 5 | "requires": true, 6 | "packages": { 7 | "": { 8 | "name": "okta-react-sample", 9 | "version": "0.0.0", 10 | "dependencies": { 11 | "@okta/okta-auth-js": "7.11.1", 12 | "@okta/okta-react": "^6.9.0", 13 | "react": "^18.3.1", 14 | "react-dom": "^18.3.1", 15 | "react-router-dom": "^7.4.1", 16 | "semantic-ui-css": "^2.5.0", 17 | "semantic-ui-react": "^2.1.5" 18 | }, 19 | "devDependencies": { 20 | "@testing-library/react": "^16.2.0", 21 | "@types/react": "^18.3.3", 22 | "@types/react-dom": "^18.3.0", 23 | "@vitejs/plugin-react": "^4.3.3", 24 | "dotenv": "^16.4.5", 25 | "jsdom": "^25.0.1", 26 | "vite": "^5.4.11", 27 | "vitest": "^2.1.8" 28 | } 29 | }, 30 | "node_modules/@ampproject/remapping": { 31 | "version": "2.3.0", 32 | "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", 33 | "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", 34 | "dev": true, 35 | "dependencies": { 36 | "@jridgewell/gen-mapping": "^0.3.5", 37 | "@jridgewell/trace-mapping": "^0.3.24" 38 | }, 39 | "engines": { 40 | "node": ">=6.0.0" 41 | } 42 | }, 43 | "node_modules/@babel/code-frame": { 44 | "version": "7.26.2", 45 | "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.26.2.tgz", 46 | "integrity": "sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==", 47 | "dev": true, 48 | "dependencies": { 49 | "@babel/helper-validator-identifier": "^7.25.9", 50 | "js-tokens": "^4.0.0", 51 | "picocolors": "^1.0.0" 52 | }, 53 | "engines": { 54 | "node": ">=6.9.0" 55 | } 56 | }, 57 | "node_modules/@babel/compat-data": { 58 | "version": "7.26.3", 59 | "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.26.3.tgz", 60 | "integrity": "sha512-nHIxvKPniQXpmQLb0vhY3VaFb3S0YrTAwpOWJZh1wn3oJPjJk9Asva204PsBdmAE8vpzfHudT8DB0scYvy9q0g==", 61 | "dev": true, 62 | "engines": { 63 | "node": ">=6.9.0" 64 | } 65 | }, 66 | "node_modules/@babel/core": { 67 | "version": "7.26.0", 68 | "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.26.0.tgz", 69 | "integrity": "sha512-i1SLeK+DzNnQ3LL/CswPCa/E5u4lh1k6IAEphON8F+cXt0t9euTshDru0q7/IqMa1PMPz5RnHuHscF8/ZJsStg==", 70 | "dev": true, 71 | "dependencies": { 72 | "@ampproject/remapping": "^2.2.0", 73 | "@babel/code-frame": "^7.26.0", 74 | "@babel/generator": "^7.26.0", 75 | "@babel/helper-compilation-targets": "^7.25.9", 76 | "@babel/helper-module-transforms": "^7.26.0", 77 | "@babel/helpers": "^7.26.0", 78 | "@babel/parser": "^7.26.0", 79 | "@babel/template": "^7.25.9", 80 | "@babel/traverse": "^7.25.9", 81 | "@babel/types": "^7.26.0", 82 | "convert-source-map": "^2.0.0", 83 | "debug": "^4.1.0", 84 | "gensync": "^1.0.0-beta.2", 85 | "json5": "^2.2.3", 86 | "semver": "^6.3.1" 87 | }, 88 | "engines": { 89 | "node": ">=6.9.0" 90 | }, 91 | "funding": { 92 | "type": "opencollective", 93 | "url": "https://opencollective.com/babel" 94 | } 95 | }, 96 | "node_modules/@babel/generator": { 97 | "version": "7.26.3", 98 | "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.26.3.tgz", 99 | "integrity": "sha512-6FF/urZvD0sTeO7k6/B15pMLC4CHUv1426lzr3N01aHJTl046uCAh9LXW/fzeXXjPNCJ6iABW5XaWOsIZB93aQ==", 100 | "dev": true, 101 | "dependencies": { 102 | "@babel/parser": "^7.26.3", 103 | "@babel/types": "^7.26.3", 104 | "@jridgewell/gen-mapping": "^0.3.5", 105 | "@jridgewell/trace-mapping": "^0.3.25", 106 | "jsesc": "^3.0.2" 107 | }, 108 | "engines": { 109 | "node": ">=6.9.0" 110 | } 111 | }, 112 | "node_modules/@babel/helper-compilation-targets": { 113 | "version": "7.25.9", 114 | "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.25.9.tgz", 115 | "integrity": "sha512-j9Db8Suy6yV/VHa4qzrj9yZfZxhLWQdVnRlXxmKLYlhWUVB1sB2G5sxuWYXk/whHD9iW76PmNzxZ4UCnTQTVEQ==", 116 | "dev": true, 117 | "dependencies": { 118 | "@babel/compat-data": "^7.25.9", 119 | "@babel/helper-validator-option": "^7.25.9", 120 | "browserslist": "^4.24.0", 121 | "lru-cache": "^5.1.1", 122 | "semver": "^6.3.1" 123 | }, 124 | "engines": { 125 | "node": ">=6.9.0" 126 | } 127 | }, 128 | "node_modules/@babel/helper-module-imports": { 129 | "version": "7.25.9", 130 | "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.25.9.tgz", 131 | "integrity": "sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw==", 132 | "dev": true, 133 | "dependencies": { 134 | "@babel/traverse": "^7.25.9", 135 | "@babel/types": "^7.25.9" 136 | }, 137 | "engines": { 138 | "node": ">=6.9.0" 139 | } 140 | }, 141 | "node_modules/@babel/helper-module-transforms": { 142 | "version": "7.26.0", 143 | "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.26.0.tgz", 144 | "integrity": "sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw==", 145 | "dev": true, 146 | "dependencies": { 147 | "@babel/helper-module-imports": "^7.25.9", 148 | "@babel/helper-validator-identifier": "^7.25.9", 149 | "@babel/traverse": "^7.25.9" 150 | }, 151 | "engines": { 152 | "node": ">=6.9.0" 153 | }, 154 | "peerDependencies": { 155 | "@babel/core": "^7.0.0" 156 | } 157 | }, 158 | "node_modules/@babel/helper-plugin-utils": { 159 | "version": "7.25.9", 160 | "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.25.9.tgz", 161 | "integrity": "sha512-kSMlyUVdWe25rEsRGviIgOWnoT/nfABVWlqt9N19/dIPWViAOW2s9wznP5tURbs/IDuNk4gPy3YdYRgH3uxhBw==", 162 | "dev": true, 163 | "engines": { 164 | "node": ">=6.9.0" 165 | } 166 | }, 167 | "node_modules/@babel/helper-string-parser": { 168 | "version": "7.25.9", 169 | "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.25.9.tgz", 170 | "integrity": "sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==", 171 | "dev": true, 172 | "engines": { 173 | "node": ">=6.9.0" 174 | } 175 | }, 176 | "node_modules/@babel/helper-validator-identifier": { 177 | "version": "7.25.9", 178 | "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz", 179 | "integrity": "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==", 180 | "dev": true, 181 | "engines": { 182 | "node": ">=6.9.0" 183 | } 184 | }, 185 | "node_modules/@babel/helper-validator-option": { 186 | "version": "7.25.9", 187 | "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.25.9.tgz", 188 | "integrity": "sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw==", 189 | "dev": true, 190 | "engines": { 191 | "node": ">=6.9.0" 192 | } 193 | }, 194 | "node_modules/@babel/helpers": { 195 | "version": "7.26.0", 196 | "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.26.0.tgz", 197 | "integrity": "sha512-tbhNuIxNcVb21pInl3ZSjksLCvgdZy9KwJ8brv993QtIVKJBBkYXz4q4ZbAv31GdnC+R90np23L5FbEBlthAEw==", 198 | "dev": true, 199 | "dependencies": { 200 | "@babel/template": "^7.25.9", 201 | "@babel/types": "^7.26.0" 202 | }, 203 | "engines": { 204 | "node": ">=6.9.0" 205 | } 206 | }, 207 | "node_modules/@babel/parser": { 208 | "version": "7.26.3", 209 | "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.26.3.tgz", 210 | "integrity": "sha512-WJ/CvmY8Mea8iDXo6a7RK2wbmJITT5fN3BEkRuFlxVyNx8jOKIIhmC4fSkTcPcf8JyavbBwIe6OpiCOBXt/IcA==", 211 | "dev": true, 212 | "dependencies": { 213 | "@babel/types": "^7.26.3" 214 | }, 215 | "bin": { 216 | "parser": "bin/babel-parser.js" 217 | }, 218 | "engines": { 219 | "node": ">=6.0.0" 220 | } 221 | }, 222 | "node_modules/@babel/plugin-transform-react-jsx-self": { 223 | "version": "7.25.9", 224 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.25.9.tgz", 225 | "integrity": "sha512-y8quW6p0WHkEhmErnfe58r7x0A70uKphQm8Sp8cV7tjNQwK56sNVK0M73LK3WuYmsuyrftut4xAkjjgU0twaMg==", 226 | "dev": true, 227 | "dependencies": { 228 | "@babel/helper-plugin-utils": "^7.25.9" 229 | }, 230 | "engines": { 231 | "node": ">=6.9.0" 232 | }, 233 | "peerDependencies": { 234 | "@babel/core": "^7.0.0-0" 235 | } 236 | }, 237 | "node_modules/@babel/plugin-transform-react-jsx-source": { 238 | "version": "7.25.9", 239 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.25.9.tgz", 240 | "integrity": "sha512-+iqjT8xmXhhYv4/uiYd8FNQsraMFZIfxVSqxxVSZP0WbbSAWvBXAul0m/zu+7Vv4O/3WtApy9pmaTMiumEZgfg==", 241 | "dev": true, 242 | "dependencies": { 243 | "@babel/helper-plugin-utils": "^7.25.9" 244 | }, 245 | "engines": { 246 | "node": ">=6.9.0" 247 | }, 248 | "peerDependencies": { 249 | "@babel/core": "^7.0.0-0" 250 | } 251 | }, 252 | "node_modules/@babel/runtime": { 253 | "version": "7.26.0", 254 | "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.26.0.tgz", 255 | "integrity": "sha512-FDSOghenHTiToteC/QRlv2q3DhPZ/oOXTBoirfWNx1Cx3TMVcGWQtMMmQcSvb/JjpNeGzx8Pq/b4fKEJuWm1sw==", 256 | "dependencies": { 257 | "regenerator-runtime": "^0.14.0" 258 | }, 259 | "engines": { 260 | "node": ">=6.9.0" 261 | } 262 | }, 263 | "node_modules/@babel/template": { 264 | "version": "7.25.9", 265 | "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.25.9.tgz", 266 | "integrity": "sha512-9DGttpmPvIxBb/2uwpVo3dqJ+O6RooAFOS+lB+xDqoE2PVCE8nfoHMdZLpfCQRLwvohzXISPZcgxt80xLfsuwg==", 267 | "dev": true, 268 | "dependencies": { 269 | "@babel/code-frame": "^7.25.9", 270 | "@babel/parser": "^7.25.9", 271 | "@babel/types": "^7.25.9" 272 | }, 273 | "engines": { 274 | "node": ">=6.9.0" 275 | } 276 | }, 277 | "node_modules/@babel/traverse": { 278 | "version": "7.26.4", 279 | "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.26.4.tgz", 280 | "integrity": "sha512-fH+b7Y4p3yqvApJALCPJcwb0/XaOSgtK4pzV6WVjPR5GLFQBRI7pfoX2V2iM48NXvX07NUxxm1Vw98YjqTcU5w==", 281 | "dev": true, 282 | "dependencies": { 283 | "@babel/code-frame": "^7.26.2", 284 | "@babel/generator": "^7.26.3", 285 | "@babel/parser": "^7.26.3", 286 | "@babel/template": "^7.25.9", 287 | "@babel/types": "^7.26.3", 288 | "debug": "^4.3.1", 289 | "globals": "^11.1.0" 290 | }, 291 | "engines": { 292 | "node": ">=6.9.0" 293 | } 294 | }, 295 | "node_modules/@babel/types": { 296 | "version": "7.26.3", 297 | "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.26.3.tgz", 298 | "integrity": "sha512-vN5p+1kl59GVKMvTHt55NzzmYVxprfJD+ql7U9NFIfKCBkYE55LYtS+WtPlaYOyzydrKI8Nezd+aZextrd+FMA==", 299 | "dev": true, 300 | "dependencies": { 301 | "@babel/helper-string-parser": "^7.25.9", 302 | "@babel/helper-validator-identifier": "^7.25.9" 303 | }, 304 | "engines": { 305 | "node": ">=6.9.0" 306 | } 307 | }, 308 | "node_modules/@esbuild/aix-ppc64": { 309 | "version": "0.21.5", 310 | "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz", 311 | "integrity": "sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==", 312 | "cpu": [ 313 | "ppc64" 314 | ], 315 | "dev": true, 316 | "optional": true, 317 | "os": [ 318 | "aix" 319 | ], 320 | "engines": { 321 | "node": ">=12" 322 | } 323 | }, 324 | "node_modules/@esbuild/android-arm": { 325 | "version": "0.21.5", 326 | "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.21.5.tgz", 327 | "integrity": "sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==", 328 | "cpu": [ 329 | "arm" 330 | ], 331 | "dev": true, 332 | "optional": true, 333 | "os": [ 334 | "android" 335 | ], 336 | "engines": { 337 | "node": ">=12" 338 | } 339 | }, 340 | "node_modules/@esbuild/android-arm64": { 341 | "version": "0.21.5", 342 | "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.21.5.tgz", 343 | "integrity": "sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==", 344 | "cpu": [ 345 | "arm64" 346 | ], 347 | "dev": true, 348 | "optional": true, 349 | "os": [ 350 | "android" 351 | ], 352 | "engines": { 353 | "node": ">=12" 354 | } 355 | }, 356 | "node_modules/@esbuild/android-x64": { 357 | "version": "0.21.5", 358 | "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.21.5.tgz", 359 | "integrity": "sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==", 360 | "cpu": [ 361 | "x64" 362 | ], 363 | "dev": true, 364 | "optional": true, 365 | "os": [ 366 | "android" 367 | ], 368 | "engines": { 369 | "node": ">=12" 370 | } 371 | }, 372 | "node_modules/@esbuild/darwin-arm64": { 373 | "version": "0.21.5", 374 | "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.21.5.tgz", 375 | "integrity": "sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==", 376 | "cpu": [ 377 | "arm64" 378 | ], 379 | "dev": true, 380 | "optional": true, 381 | "os": [ 382 | "darwin" 383 | ], 384 | "engines": { 385 | "node": ">=12" 386 | } 387 | }, 388 | "node_modules/@esbuild/darwin-x64": { 389 | "version": "0.21.5", 390 | "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.21.5.tgz", 391 | "integrity": "sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==", 392 | "cpu": [ 393 | "x64" 394 | ], 395 | "dev": true, 396 | "optional": true, 397 | "os": [ 398 | "darwin" 399 | ], 400 | "engines": { 401 | "node": ">=12" 402 | } 403 | }, 404 | "node_modules/@esbuild/freebsd-arm64": { 405 | "version": "0.21.5", 406 | "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.21.5.tgz", 407 | "integrity": "sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==", 408 | "cpu": [ 409 | "arm64" 410 | ], 411 | "dev": true, 412 | "optional": true, 413 | "os": [ 414 | "freebsd" 415 | ], 416 | "engines": { 417 | "node": ">=12" 418 | } 419 | }, 420 | "node_modules/@esbuild/freebsd-x64": { 421 | "version": "0.21.5", 422 | "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.21.5.tgz", 423 | "integrity": "sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==", 424 | "cpu": [ 425 | "x64" 426 | ], 427 | "dev": true, 428 | "optional": true, 429 | "os": [ 430 | "freebsd" 431 | ], 432 | "engines": { 433 | "node": ">=12" 434 | } 435 | }, 436 | "node_modules/@esbuild/linux-arm": { 437 | "version": "0.21.5", 438 | "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.21.5.tgz", 439 | "integrity": "sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==", 440 | "cpu": [ 441 | "arm" 442 | ], 443 | "dev": true, 444 | "optional": true, 445 | "os": [ 446 | "linux" 447 | ], 448 | "engines": { 449 | "node": ">=12" 450 | } 451 | }, 452 | "node_modules/@esbuild/linux-arm64": { 453 | "version": "0.21.5", 454 | "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.21.5.tgz", 455 | "integrity": "sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==", 456 | "cpu": [ 457 | "arm64" 458 | ], 459 | "dev": true, 460 | "optional": true, 461 | "os": [ 462 | "linux" 463 | ], 464 | "engines": { 465 | "node": ">=12" 466 | } 467 | }, 468 | "node_modules/@esbuild/linux-ia32": { 469 | "version": "0.21.5", 470 | "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.21.5.tgz", 471 | "integrity": "sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==", 472 | "cpu": [ 473 | "ia32" 474 | ], 475 | "dev": true, 476 | "optional": true, 477 | "os": [ 478 | "linux" 479 | ], 480 | "engines": { 481 | "node": ">=12" 482 | } 483 | }, 484 | "node_modules/@esbuild/linux-loong64": { 485 | "version": "0.21.5", 486 | "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.21.5.tgz", 487 | "integrity": "sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==", 488 | "cpu": [ 489 | "loong64" 490 | ], 491 | "dev": true, 492 | "optional": true, 493 | "os": [ 494 | "linux" 495 | ], 496 | "engines": { 497 | "node": ">=12" 498 | } 499 | }, 500 | "node_modules/@esbuild/linux-mips64el": { 501 | "version": "0.21.5", 502 | "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.21.5.tgz", 503 | "integrity": "sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==", 504 | "cpu": [ 505 | "mips64el" 506 | ], 507 | "dev": true, 508 | "optional": true, 509 | "os": [ 510 | "linux" 511 | ], 512 | "engines": { 513 | "node": ">=12" 514 | } 515 | }, 516 | "node_modules/@esbuild/linux-ppc64": { 517 | "version": "0.21.5", 518 | "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.21.5.tgz", 519 | "integrity": "sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==", 520 | "cpu": [ 521 | "ppc64" 522 | ], 523 | "dev": true, 524 | "optional": true, 525 | "os": [ 526 | "linux" 527 | ], 528 | "engines": { 529 | "node": ">=12" 530 | } 531 | }, 532 | "node_modules/@esbuild/linux-riscv64": { 533 | "version": "0.21.5", 534 | "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.21.5.tgz", 535 | "integrity": "sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==", 536 | "cpu": [ 537 | "riscv64" 538 | ], 539 | "dev": true, 540 | "optional": true, 541 | "os": [ 542 | "linux" 543 | ], 544 | "engines": { 545 | "node": ">=12" 546 | } 547 | }, 548 | "node_modules/@esbuild/linux-s390x": { 549 | "version": "0.21.5", 550 | "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.21.5.tgz", 551 | "integrity": "sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==", 552 | "cpu": [ 553 | "s390x" 554 | ], 555 | "dev": true, 556 | "optional": true, 557 | "os": [ 558 | "linux" 559 | ], 560 | "engines": { 561 | "node": ">=12" 562 | } 563 | }, 564 | "node_modules/@esbuild/linux-x64": { 565 | "version": "0.21.5", 566 | "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.21.5.tgz", 567 | "integrity": "sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==", 568 | "cpu": [ 569 | "x64" 570 | ], 571 | "dev": true, 572 | "optional": true, 573 | "os": [ 574 | "linux" 575 | ], 576 | "engines": { 577 | "node": ">=12" 578 | } 579 | }, 580 | "node_modules/@esbuild/netbsd-x64": { 581 | "version": "0.21.5", 582 | "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.21.5.tgz", 583 | "integrity": "sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==", 584 | "cpu": [ 585 | "x64" 586 | ], 587 | "dev": true, 588 | "optional": true, 589 | "os": [ 590 | "netbsd" 591 | ], 592 | "engines": { 593 | "node": ">=12" 594 | } 595 | }, 596 | "node_modules/@esbuild/openbsd-x64": { 597 | "version": "0.21.5", 598 | "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.21.5.tgz", 599 | "integrity": "sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==", 600 | "cpu": [ 601 | "x64" 602 | ], 603 | "dev": true, 604 | "optional": true, 605 | "os": [ 606 | "openbsd" 607 | ], 608 | "engines": { 609 | "node": ">=12" 610 | } 611 | }, 612 | "node_modules/@esbuild/sunos-x64": { 613 | "version": "0.21.5", 614 | "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.21.5.tgz", 615 | "integrity": "sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==", 616 | "cpu": [ 617 | "x64" 618 | ], 619 | "dev": true, 620 | "optional": true, 621 | "os": [ 622 | "sunos" 623 | ], 624 | "engines": { 625 | "node": ">=12" 626 | } 627 | }, 628 | "node_modules/@esbuild/win32-arm64": { 629 | "version": "0.21.5", 630 | "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.21.5.tgz", 631 | "integrity": "sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==", 632 | "cpu": [ 633 | "arm64" 634 | ], 635 | "dev": true, 636 | "optional": true, 637 | "os": [ 638 | "win32" 639 | ], 640 | "engines": { 641 | "node": ">=12" 642 | } 643 | }, 644 | "node_modules/@esbuild/win32-ia32": { 645 | "version": "0.21.5", 646 | "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.21.5.tgz", 647 | "integrity": "sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==", 648 | "cpu": [ 649 | "ia32" 650 | ], 651 | "dev": true, 652 | "optional": true, 653 | "os": [ 654 | "win32" 655 | ], 656 | "engines": { 657 | "node": ">=12" 658 | } 659 | }, 660 | "node_modules/@esbuild/win32-x64": { 661 | "version": "0.21.5", 662 | "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.21.5.tgz", 663 | "integrity": "sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==", 664 | "cpu": [ 665 | "x64" 666 | ], 667 | "dev": true, 668 | "optional": true, 669 | "os": [ 670 | "win32" 671 | ], 672 | "engines": { 673 | "node": ">=12" 674 | } 675 | }, 676 | "node_modules/@fluentui/react-component-event-listener": { 677 | "version": "0.63.1", 678 | "resolved": "https://registry.npmjs.org/@fluentui/react-component-event-listener/-/react-component-event-listener-0.63.1.tgz", 679 | "integrity": "sha512-gSMdOh6tI3IJKZFqxfQwbTpskpME0CvxdxGM2tdglmf6ZPVDi0L4+KKIm+2dN8nzb8Ya1A8ZT+Ddq0KmZtwVQg==", 680 | "dependencies": { 681 | "@babel/runtime": "^7.10.4" 682 | }, 683 | "peerDependencies": { 684 | "react": "^16.8.0 || ^17 || ^18", 685 | "react-dom": "^16.8.0 || ^17 || ^18" 686 | } 687 | }, 688 | "node_modules/@fluentui/react-component-ref": { 689 | "version": "0.63.1", 690 | "resolved": "https://registry.npmjs.org/@fluentui/react-component-ref/-/react-component-ref-0.63.1.tgz", 691 | "integrity": "sha512-8MkXX4+R3i80msdbD4rFpEB4WWq2UDvGwG386g3ckIWbekdvN9z2kWAd9OXhRGqB7QeOsoAGWocp6gAMCivRlw==", 692 | "dependencies": { 693 | "@babel/runtime": "^7.10.4", 694 | "react-is": "^16.6.3" 695 | }, 696 | "peerDependencies": { 697 | "react": "^16.8.0 || ^17 || ^18", 698 | "react-dom": "^16.8.0 || ^17 || ^18" 699 | } 700 | }, 701 | "node_modules/@fluentui/react-component-ref/node_modules/react-is": { 702 | "version": "16.13.1", 703 | "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", 704 | "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" 705 | }, 706 | "node_modules/@jridgewell/gen-mapping": { 707 | "version": "0.3.8", 708 | "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.8.tgz", 709 | "integrity": "sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==", 710 | "dev": true, 711 | "dependencies": { 712 | "@jridgewell/set-array": "^1.2.1", 713 | "@jridgewell/sourcemap-codec": "^1.4.10", 714 | "@jridgewell/trace-mapping": "^0.3.24" 715 | }, 716 | "engines": { 717 | "node": ">=6.0.0" 718 | } 719 | }, 720 | "node_modules/@jridgewell/resolve-uri": { 721 | "version": "3.1.2", 722 | "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", 723 | "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", 724 | "dev": true, 725 | "engines": { 726 | "node": ">=6.0.0" 727 | } 728 | }, 729 | "node_modules/@jridgewell/set-array": { 730 | "version": "1.2.1", 731 | "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", 732 | "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", 733 | "dev": true, 734 | "engines": { 735 | "node": ">=6.0.0" 736 | } 737 | }, 738 | "node_modules/@jridgewell/sourcemap-codec": { 739 | "version": "1.5.0", 740 | "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", 741 | "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", 742 | "dev": true 743 | }, 744 | "node_modules/@jridgewell/trace-mapping": { 745 | "version": "0.3.25", 746 | "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", 747 | "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", 748 | "dev": true, 749 | "dependencies": { 750 | "@jridgewell/resolve-uri": "^3.1.0", 751 | "@jridgewell/sourcemap-codec": "^1.4.14" 752 | } 753 | }, 754 | "node_modules/@okta/okta-auth-js": { 755 | "version": "7.11.1", 756 | "resolved": "https://registry.npmjs.org/@okta/okta-auth-js/-/okta-auth-js-7.11.1.tgz", 757 | "integrity": "sha512-LXlsL0DVtMc3c57fUhJXuS6zVY7WiXRxANMWUH8BA6/yAGmsTRIYp1gj/GaQbvmEUakrLMiUrDv0ptGVjYqt7w==", 758 | "license": "Apache-2.0", 759 | "dependencies": { 760 | "@babel/runtime": "^7.12.5", 761 | "@peculiar/webcrypto": "^1.4.0", 762 | "atob": "^2.1.2", 763 | "Base64": "1.1.0", 764 | "broadcast-channel": "~5.3.0", 765 | "btoa": "^1.2.1", 766 | "core-js": "^3.39.0", 767 | "cross-fetch": "^3.1.5", 768 | "fast-text-encoding": "^1.0.6", 769 | "js-cookie": "^3.0.1", 770 | "node-cache": "^5.1.2", 771 | "p-cancelable": "^2.0.0", 772 | "tiny-emitter": "1.1.0", 773 | "webcrypto-shim": "^0.1.5", 774 | "xhr2": "0.1.3" 775 | }, 776 | "engines": { 777 | "node": ">=14.0" 778 | } 779 | }, 780 | "node_modules/@okta/okta-react": { 781 | "version": "6.9.0", 782 | "resolved": "https://registry.npmjs.org/@okta/okta-react/-/okta-react-6.9.0.tgz", 783 | "integrity": "sha512-qqwo8QCaBxM4tXXDO2+wwGgF3GBOe0WFmT4kykU00KXLSbMuiUVlV4RfDqLdNU7ahckGEKh25mkBs31Ga2XGpw==", 784 | "dependencies": { 785 | "@babel/runtime": "^7.11.2", 786 | "compare-versions": "^4.1.2" 787 | }, 788 | "engines": { 789 | "node": ">=10.3", 790 | "yarn": "^1.7.0" 791 | }, 792 | "peerDependencies": { 793 | "@okta/okta-auth-js": "^5.3.1 || ^6.0.0 || ^7.0.0", 794 | "react": ">=16.8.0", 795 | "react-dom": ">=16.8.0", 796 | "react-router-dom": ">=5.1.0" 797 | } 798 | }, 799 | "node_modules/@peculiar/asn1-schema": { 800 | "version": "2.3.15", 801 | "resolved": "https://registry.npmjs.org/@peculiar/asn1-schema/-/asn1-schema-2.3.15.tgz", 802 | "integrity": "sha512-QPeD8UA8axQREpgR5UTAfu2mqQmm97oUqahDtNdBcfj3qAnoXzFdQW+aNf/tD2WVXF8Fhmftxoj0eMIT++gX2w==", 803 | "dependencies": { 804 | "asn1js": "^3.0.5", 805 | "pvtsutils": "^1.3.6", 806 | "tslib": "^2.8.1" 807 | } 808 | }, 809 | "node_modules/@peculiar/json-schema": { 810 | "version": "1.1.12", 811 | "resolved": "https://registry.npmjs.org/@peculiar/json-schema/-/json-schema-1.1.12.tgz", 812 | "integrity": "sha512-coUfuoMeIB7B8/NMekxaDzLhaYmp0HZNPEjYRm9goRou8UZIC3z21s0sL9AWoCw4EG876QyO3kYrc61WNF9B/w==", 813 | "dependencies": { 814 | "tslib": "^2.0.0" 815 | }, 816 | "engines": { 817 | "node": ">=8.0.0" 818 | } 819 | }, 820 | "node_modules/@peculiar/webcrypto": { 821 | "version": "1.5.0", 822 | "resolved": "https://registry.npmjs.org/@peculiar/webcrypto/-/webcrypto-1.5.0.tgz", 823 | "integrity": "sha512-BRs5XUAwiyCDQMsVA9IDvDa7UBR9gAvPHgugOeGng3YN6vJ9JYonyDc0lNczErgtCWtucjR5N7VtaonboD/ezg==", 824 | "dependencies": { 825 | "@peculiar/asn1-schema": "^2.3.8", 826 | "@peculiar/json-schema": "^1.1.12", 827 | "pvtsutils": "^1.3.5", 828 | "tslib": "^2.6.2", 829 | "webcrypto-core": "^1.8.0" 830 | }, 831 | "engines": { 832 | "node": ">=10.12.0" 833 | } 834 | }, 835 | "node_modules/@popperjs/core": { 836 | "version": "2.11.8", 837 | "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.8.tgz", 838 | "integrity": "sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==", 839 | "funding": { 840 | "type": "opencollective", 841 | "url": "https://opencollective.com/popperjs" 842 | } 843 | }, 844 | "node_modules/@rollup/rollup-android-arm-eabi": { 845 | "version": "4.29.1", 846 | "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.29.1.tgz", 847 | "integrity": "sha512-ssKhA8RNltTZLpG6/QNkCSge+7mBQGUqJRisZ2MDQcEGaK93QESEgWK2iOpIDZ7k9zPVkG5AS3ksvD5ZWxmItw==", 848 | "cpu": [ 849 | "arm" 850 | ], 851 | "dev": true, 852 | "optional": true, 853 | "os": [ 854 | "android" 855 | ] 856 | }, 857 | "node_modules/@rollup/rollup-android-arm64": { 858 | "version": "4.29.1", 859 | "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.29.1.tgz", 860 | "integrity": "sha512-CaRfrV0cd+NIIcVVN/jx+hVLN+VRqnuzLRmfmlzpOzB87ajixsN/+9L5xNmkaUUvEbI5BmIKS+XTwXsHEb65Ew==", 861 | "cpu": [ 862 | "arm64" 863 | ], 864 | "dev": true, 865 | "optional": true, 866 | "os": [ 867 | "android" 868 | ] 869 | }, 870 | "node_modules/@rollup/rollup-darwin-arm64": { 871 | "version": "4.29.1", 872 | "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.29.1.tgz", 873 | "integrity": "sha512-2ORr7T31Y0Mnk6qNuwtyNmy14MunTAMx06VAPI6/Ju52W10zk1i7i5U3vlDRWjhOI5quBcrvhkCHyF76bI7kEw==", 874 | "cpu": [ 875 | "arm64" 876 | ], 877 | "dev": true, 878 | "optional": true, 879 | "os": [ 880 | "darwin" 881 | ] 882 | }, 883 | "node_modules/@rollup/rollup-darwin-x64": { 884 | "version": "4.29.1", 885 | "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.29.1.tgz", 886 | "integrity": "sha512-j/Ej1oanzPjmN0tirRd5K2/nncAhS9W6ICzgxV+9Y5ZsP0hiGhHJXZ2JQ53iSSjj8m6cRY6oB1GMzNn2EUt6Ng==", 887 | "cpu": [ 888 | "x64" 889 | ], 890 | "dev": true, 891 | "optional": true, 892 | "os": [ 893 | "darwin" 894 | ] 895 | }, 896 | "node_modules/@rollup/rollup-freebsd-arm64": { 897 | "version": "4.29.1", 898 | "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.29.1.tgz", 899 | "integrity": "sha512-91C//G6Dm/cv724tpt7nTyP+JdN12iqeXGFM1SqnljCmi5yTXriH7B1r8AD9dAZByHpKAumqP1Qy2vVNIdLZqw==", 900 | "cpu": [ 901 | "arm64" 902 | ], 903 | "dev": true, 904 | "optional": true, 905 | "os": [ 906 | "freebsd" 907 | ] 908 | }, 909 | "node_modules/@rollup/rollup-freebsd-x64": { 910 | "version": "4.29.1", 911 | "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.29.1.tgz", 912 | "integrity": "sha512-hEioiEQ9Dec2nIRoeHUP6hr1PSkXzQaCUyqBDQ9I9ik4gCXQZjJMIVzoNLBRGet+hIUb3CISMh9KXuCcWVW/8w==", 913 | "cpu": [ 914 | "x64" 915 | ], 916 | "dev": true, 917 | "optional": true, 918 | "os": [ 919 | "freebsd" 920 | ] 921 | }, 922 | "node_modules/@rollup/rollup-linux-arm-gnueabihf": { 923 | "version": "4.29.1", 924 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.29.1.tgz", 925 | "integrity": "sha512-Py5vFd5HWYN9zxBv3WMrLAXY3yYJ6Q/aVERoeUFwiDGiMOWsMs7FokXihSOaT/PMWUty/Pj60XDQndK3eAfE6A==", 926 | "cpu": [ 927 | "arm" 928 | ], 929 | "dev": true, 930 | "optional": true, 931 | "os": [ 932 | "linux" 933 | ] 934 | }, 935 | "node_modules/@rollup/rollup-linux-arm-musleabihf": { 936 | "version": "4.29.1", 937 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.29.1.tgz", 938 | "integrity": "sha512-RiWpGgbayf7LUcuSNIbahr0ys2YnEERD4gYdISA06wa0i8RALrnzflh9Wxii7zQJEB2/Eh74dX4y/sHKLWp5uQ==", 939 | "cpu": [ 940 | "arm" 941 | ], 942 | "dev": true, 943 | "optional": true, 944 | "os": [ 945 | "linux" 946 | ] 947 | }, 948 | "node_modules/@rollup/rollup-linux-arm64-gnu": { 949 | "version": "4.29.1", 950 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.29.1.tgz", 951 | "integrity": "sha512-Z80O+taYxTQITWMjm/YqNoe9d10OX6kDh8X5/rFCMuPqsKsSyDilvfg+vd3iXIqtfmp+cnfL1UrYirkaF8SBZA==", 952 | "cpu": [ 953 | "arm64" 954 | ], 955 | "dev": true, 956 | "optional": true, 957 | "os": [ 958 | "linux" 959 | ] 960 | }, 961 | "node_modules/@rollup/rollup-linux-arm64-musl": { 962 | "version": "4.29.1", 963 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.29.1.tgz", 964 | "integrity": "sha512-fOHRtF9gahwJk3QVp01a/GqS4hBEZCV1oKglVVq13kcK3NeVlS4BwIFzOHDbmKzt3i0OuHG4zfRP0YoG5OF/rA==", 965 | "cpu": [ 966 | "arm64" 967 | ], 968 | "dev": true, 969 | "optional": true, 970 | "os": [ 971 | "linux" 972 | ] 973 | }, 974 | "node_modules/@rollup/rollup-linux-loongarch64-gnu": { 975 | "version": "4.29.1", 976 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.29.1.tgz", 977 | "integrity": "sha512-5a7q3tnlbcg0OodyxcAdrrCxFi0DgXJSoOuidFUzHZ2GixZXQs6Tc3CHmlvqKAmOs5eRde+JJxeIf9DonkmYkw==", 978 | "cpu": [ 979 | "loong64" 980 | ], 981 | "dev": true, 982 | "optional": true, 983 | "os": [ 984 | "linux" 985 | ] 986 | }, 987 | "node_modules/@rollup/rollup-linux-powerpc64le-gnu": { 988 | "version": "4.29.1", 989 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.29.1.tgz", 990 | "integrity": "sha512-9b4Mg5Yfz6mRnlSPIdROcfw1BU22FQxmfjlp/CShWwO3LilKQuMISMTtAu/bxmmrE6A902W2cZJuzx8+gJ8e9w==", 991 | "cpu": [ 992 | "ppc64" 993 | ], 994 | "dev": true, 995 | "optional": true, 996 | "os": [ 997 | "linux" 998 | ] 999 | }, 1000 | "node_modules/@rollup/rollup-linux-riscv64-gnu": { 1001 | "version": "4.29.1", 1002 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.29.1.tgz", 1003 | "integrity": "sha512-G5pn0NChlbRM8OJWpJFMX4/i8OEU538uiSv0P6roZcbpe/WfhEO+AT8SHVKfp8qhDQzaz7Q+1/ixMy7hBRidnQ==", 1004 | "cpu": [ 1005 | "riscv64" 1006 | ], 1007 | "dev": true, 1008 | "optional": true, 1009 | "os": [ 1010 | "linux" 1011 | ] 1012 | }, 1013 | "node_modules/@rollup/rollup-linux-s390x-gnu": { 1014 | "version": "4.29.1", 1015 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.29.1.tgz", 1016 | "integrity": "sha512-WM9lIkNdkhVwiArmLxFXpWndFGuOka4oJOZh8EP3Vb8q5lzdSCBuhjavJsw68Q9AKDGeOOIHYzYm4ZFvmWez5g==", 1017 | "cpu": [ 1018 | "s390x" 1019 | ], 1020 | "dev": true, 1021 | "optional": true, 1022 | "os": [ 1023 | "linux" 1024 | ] 1025 | }, 1026 | "node_modules/@rollup/rollup-linux-x64-gnu": { 1027 | "version": "4.29.1", 1028 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.29.1.tgz", 1029 | "integrity": "sha512-87xYCwb0cPGZFoGiErT1eDcssByaLX4fc0z2nRM6eMtV9njAfEE6OW3UniAoDhX4Iq5xQVpE6qO9aJbCFumKYQ==", 1030 | "cpu": [ 1031 | "x64" 1032 | ], 1033 | "dev": true, 1034 | "optional": true, 1035 | "os": [ 1036 | "linux" 1037 | ] 1038 | }, 1039 | "node_modules/@rollup/rollup-linux-x64-musl": { 1040 | "version": "4.29.1", 1041 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.29.1.tgz", 1042 | "integrity": "sha512-xufkSNppNOdVRCEC4WKvlR1FBDyqCSCpQeMMgv9ZyXqqtKBfkw1yfGMTUTs9Qsl6WQbJnsGboWCp7pJGkeMhKA==", 1043 | "cpu": [ 1044 | "x64" 1045 | ], 1046 | "dev": true, 1047 | "optional": true, 1048 | "os": [ 1049 | "linux" 1050 | ] 1051 | }, 1052 | "node_modules/@rollup/rollup-win32-arm64-msvc": { 1053 | "version": "4.29.1", 1054 | "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.29.1.tgz", 1055 | "integrity": "sha512-F2OiJ42m77lSkizZQLuC+jiZ2cgueWQL5YC9tjo3AgaEw+KJmVxHGSyQfDUoYR9cci0lAywv2Clmckzulcq6ig==", 1056 | "cpu": [ 1057 | "arm64" 1058 | ], 1059 | "dev": true, 1060 | "optional": true, 1061 | "os": [ 1062 | "win32" 1063 | ] 1064 | }, 1065 | "node_modules/@rollup/rollup-win32-ia32-msvc": { 1066 | "version": "4.29.1", 1067 | "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.29.1.tgz", 1068 | "integrity": "sha512-rYRe5S0FcjlOBZQHgbTKNrqxCBUmgDJem/VQTCcTnA2KCabYSWQDrytOzX7avb79cAAweNmMUb/Zw18RNd4mng==", 1069 | "cpu": [ 1070 | "ia32" 1071 | ], 1072 | "dev": true, 1073 | "optional": true, 1074 | "os": [ 1075 | "win32" 1076 | ] 1077 | }, 1078 | "node_modules/@rollup/rollup-win32-x64-msvc": { 1079 | "version": "4.29.1", 1080 | "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.29.1.tgz", 1081 | "integrity": "sha512-+10CMg9vt1MoHj6x1pxyjPSMjHTIlqs8/tBztXvPAx24SKs9jwVnKqHJumlH/IzhaPUaj3T6T6wfZr8okdXaIg==", 1082 | "cpu": [ 1083 | "x64" 1084 | ], 1085 | "dev": true, 1086 | "optional": true, 1087 | "os": [ 1088 | "win32" 1089 | ] 1090 | }, 1091 | "node_modules/@semantic-ui-react/event-stack": { 1092 | "version": "3.1.3", 1093 | "resolved": "https://registry.npmjs.org/@semantic-ui-react/event-stack/-/event-stack-3.1.3.tgz", 1094 | "integrity": "sha512-FdTmJyWvJaYinHrKRsMLDrz4tTMGdFfds299Qory53hBugiDvGC0tEJf+cHsi5igDwWb/CLOgOiChInHwq8URQ==", 1095 | "dependencies": { 1096 | "exenv": "^1.2.2", 1097 | "prop-types": "^15.6.2" 1098 | }, 1099 | "peerDependencies": { 1100 | "react": "^16.0.0 || ^17.0.0 || ^18.0.0", 1101 | "react-dom": "^16.0.0 || ^17.0.0 || ^18.0.0" 1102 | } 1103 | }, 1104 | "node_modules/@testing-library/dom": { 1105 | "version": "10.4.0", 1106 | "resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-10.4.0.tgz", 1107 | "integrity": "sha512-pemlzrSESWbdAloYml3bAJMEfNh1Z7EduzqPKprCH5S341frlpYnUEW0H72dLxa6IsYr+mPno20GiSm+h9dEdQ==", 1108 | "dev": true, 1109 | "peer": true, 1110 | "dependencies": { 1111 | "@babel/code-frame": "^7.10.4", 1112 | "@babel/runtime": "^7.12.5", 1113 | "@types/aria-query": "^5.0.1", 1114 | "aria-query": "5.3.0", 1115 | "chalk": "^4.1.0", 1116 | "dom-accessibility-api": "^0.5.9", 1117 | "lz-string": "^1.5.0", 1118 | "pretty-format": "^27.0.2" 1119 | }, 1120 | "engines": { 1121 | "node": ">=18" 1122 | } 1123 | }, 1124 | "node_modules/@testing-library/react": { 1125 | "version": "16.2.0", 1126 | "resolved": "https://registry.npmjs.org/@testing-library/react/-/react-16.2.0.tgz", 1127 | "integrity": "sha512-2cSskAvA1QNtKc8Y9VJQRv0tm3hLVgxRGDB+KYhIaPQJ1I+RHbhIXcM+zClKXzMes/wshsMVzf4B9vS4IZpqDQ==", 1128 | "dev": true, 1129 | "license": "MIT", 1130 | "dependencies": { 1131 | "@babel/runtime": "^7.12.5" 1132 | }, 1133 | "engines": { 1134 | "node": ">=18" 1135 | }, 1136 | "peerDependencies": { 1137 | "@testing-library/dom": "^10.0.0", 1138 | "@types/react": "^18.0.0 || ^19.0.0", 1139 | "@types/react-dom": "^18.0.0 || ^19.0.0", 1140 | "react": "^18.0.0 || ^19.0.0", 1141 | "react-dom": "^18.0.0 || ^19.0.0" 1142 | }, 1143 | "peerDependenciesMeta": { 1144 | "@types/react": { 1145 | "optional": true 1146 | }, 1147 | "@types/react-dom": { 1148 | "optional": true 1149 | } 1150 | } 1151 | }, 1152 | "node_modules/@types/aria-query": { 1153 | "version": "5.0.4", 1154 | "resolved": "https://registry.npmjs.org/@types/aria-query/-/aria-query-5.0.4.tgz", 1155 | "integrity": "sha512-rfT93uj5s0PRL7EzccGMs3brplhcrghnDoV26NqKhCAS1hVo+WdNsPvE/yb6ilfr5hi2MEk6d5EWJTKdxg8jVw==", 1156 | "dev": true, 1157 | "peer": true 1158 | }, 1159 | "node_modules/@types/babel__core": { 1160 | "version": "7.20.5", 1161 | "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", 1162 | "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==", 1163 | "dev": true, 1164 | "dependencies": { 1165 | "@babel/parser": "^7.20.7", 1166 | "@babel/types": "^7.20.7", 1167 | "@types/babel__generator": "*", 1168 | "@types/babel__template": "*", 1169 | "@types/babel__traverse": "*" 1170 | } 1171 | }, 1172 | "node_modules/@types/babel__generator": { 1173 | "version": "7.6.8", 1174 | "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.8.tgz", 1175 | "integrity": "sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==", 1176 | "dev": true, 1177 | "dependencies": { 1178 | "@babel/types": "^7.0.0" 1179 | } 1180 | }, 1181 | "node_modules/@types/babel__template": { 1182 | "version": "7.4.4", 1183 | "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz", 1184 | "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==", 1185 | "dev": true, 1186 | "dependencies": { 1187 | "@babel/parser": "^7.1.0", 1188 | "@babel/types": "^7.0.0" 1189 | } 1190 | }, 1191 | "node_modules/@types/babel__traverse": { 1192 | "version": "7.20.6", 1193 | "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.6.tgz", 1194 | "integrity": "sha512-r1bzfrm0tomOI8g1SzvCaQHo6Lcv6zu0EA+W2kHrt8dyrHQxGzBBL4kdkzIS+jBMV+EYcMAEAqXqYaLJq5rOZg==", 1195 | "dev": true, 1196 | "dependencies": { 1197 | "@babel/types": "^7.20.7" 1198 | } 1199 | }, 1200 | "node_modules/@types/cookie": { 1201 | "version": "0.6.0", 1202 | "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.6.0.tgz", 1203 | "integrity": "sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA==", 1204 | "license": "MIT" 1205 | }, 1206 | "node_modules/@types/estree": { 1207 | "version": "1.0.6", 1208 | "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.6.tgz", 1209 | "integrity": "sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==", 1210 | "dev": true 1211 | }, 1212 | "node_modules/@types/prop-types": { 1213 | "version": "15.7.14", 1214 | "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.14.tgz", 1215 | "integrity": "sha512-gNMvNH49DJ7OJYv+KAKn0Xp45p8PLl6zo2YnvDIbTd4J6MER2BmWN49TG7n9LvkyihINxeKW8+3bfS2yDC9dzQ==", 1216 | "dev": true 1217 | }, 1218 | "node_modules/@types/react": { 1219 | "version": "18.3.18", 1220 | "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.18.tgz", 1221 | "integrity": "sha512-t4yC+vtgnkYjNSKlFx1jkAhH8LgTo2N/7Qvi83kdEaUtMDiwpbLAktKDaAMlRcJ5eSxZkH74eEGt1ky31d7kfQ==", 1222 | "dev": true, 1223 | "dependencies": { 1224 | "@types/prop-types": "*", 1225 | "csstype": "^3.0.2" 1226 | } 1227 | }, 1228 | "node_modules/@types/react-dom": { 1229 | "version": "18.3.5", 1230 | "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.3.5.tgz", 1231 | "integrity": "sha512-P4t6saawp+b/dFrUr2cvkVsfvPguwsxtH6dNIYRllMsefqFzkZk5UIjzyDOv5g1dXIPdG4Sp1yCR4Z6RCUsG/Q==", 1232 | "dev": true, 1233 | "peerDependencies": { 1234 | "@types/react": "^18.0.0" 1235 | } 1236 | }, 1237 | "node_modules/@vitejs/plugin-react": { 1238 | "version": "4.3.4", 1239 | "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-4.3.4.tgz", 1240 | "integrity": "sha512-SCCPBJtYLdE8PX/7ZQAs1QAZ8Jqwih+0VBLum1EGqmCCQal+MIUqLCzj3ZUy8ufbC0cAM4LRlSTm7IQJwWT4ug==", 1241 | "dev": true, 1242 | "dependencies": { 1243 | "@babel/core": "^7.26.0", 1244 | "@babel/plugin-transform-react-jsx-self": "^7.25.9", 1245 | "@babel/plugin-transform-react-jsx-source": "^7.25.9", 1246 | "@types/babel__core": "^7.20.5", 1247 | "react-refresh": "^0.14.2" 1248 | }, 1249 | "engines": { 1250 | "node": "^14.18.0 || >=16.0.0" 1251 | }, 1252 | "peerDependencies": { 1253 | "vite": "^4.2.0 || ^5.0.0 || ^6.0.0" 1254 | } 1255 | }, 1256 | "node_modules/@vitest/expect": { 1257 | "version": "2.1.8", 1258 | "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-2.1.8.tgz", 1259 | "integrity": "sha512-8ytZ/fFHq2g4PJVAtDX57mayemKgDR6X3Oa2Foro+EygiOJHUXhCqBAAKQYYajZpFoIfvBCF1j6R6IYRSIUFuw==", 1260 | "dev": true, 1261 | "dependencies": { 1262 | "@vitest/spy": "2.1.8", 1263 | "@vitest/utils": "2.1.8", 1264 | "chai": "^5.1.2", 1265 | "tinyrainbow": "^1.2.0" 1266 | }, 1267 | "funding": { 1268 | "url": "https://opencollective.com/vitest" 1269 | } 1270 | }, 1271 | "node_modules/@vitest/mocker": { 1272 | "version": "2.1.8", 1273 | "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-2.1.8.tgz", 1274 | "integrity": "sha512-7guJ/47I6uqfttp33mgo6ga5Gr1VnL58rcqYKyShoRK9ebu8T5Rs6HN3s1NABiBeVTdWNrwUMcHH54uXZBN4zA==", 1275 | "dev": true, 1276 | "dependencies": { 1277 | "@vitest/spy": "2.1.8", 1278 | "estree-walker": "^3.0.3", 1279 | "magic-string": "^0.30.12" 1280 | }, 1281 | "funding": { 1282 | "url": "https://opencollective.com/vitest" 1283 | }, 1284 | "peerDependencies": { 1285 | "msw": "^2.4.9", 1286 | "vite": "^5.0.0" 1287 | }, 1288 | "peerDependenciesMeta": { 1289 | "msw": { 1290 | "optional": true 1291 | }, 1292 | "vite": { 1293 | "optional": true 1294 | } 1295 | } 1296 | }, 1297 | "node_modules/@vitest/pretty-format": { 1298 | "version": "2.1.8", 1299 | "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-2.1.8.tgz", 1300 | "integrity": "sha512-9HiSZ9zpqNLKlbIDRWOnAWqgcA7xu+8YxXSekhr0Ykab7PAYFkhkwoqVArPOtJhPmYeE2YHgKZlj3CP36z2AJQ==", 1301 | "dev": true, 1302 | "dependencies": { 1303 | "tinyrainbow": "^1.2.0" 1304 | }, 1305 | "funding": { 1306 | "url": "https://opencollective.com/vitest" 1307 | } 1308 | }, 1309 | "node_modules/@vitest/runner": { 1310 | "version": "2.1.8", 1311 | "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-2.1.8.tgz", 1312 | "integrity": "sha512-17ub8vQstRnRlIU5k50bG+QOMLHRhYPAna5tw8tYbj+jzjcspnwnwtPtiOlkuKC4+ixDPTuLZiqiWWQ2PSXHVg==", 1313 | "dev": true, 1314 | "dependencies": { 1315 | "@vitest/utils": "2.1.8", 1316 | "pathe": "^1.1.2" 1317 | }, 1318 | "funding": { 1319 | "url": "https://opencollective.com/vitest" 1320 | } 1321 | }, 1322 | "node_modules/@vitest/snapshot": { 1323 | "version": "2.1.8", 1324 | "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-2.1.8.tgz", 1325 | "integrity": "sha512-20T7xRFbmnkfcmgVEz+z3AU/3b0cEzZOt/zmnvZEctg64/QZbSDJEVm9fLnnlSi74KibmRsO9/Qabi+t0vCRPg==", 1326 | "dev": true, 1327 | "dependencies": { 1328 | "@vitest/pretty-format": "2.1.8", 1329 | "magic-string": "^0.30.12", 1330 | "pathe": "^1.1.2" 1331 | }, 1332 | "funding": { 1333 | "url": "https://opencollective.com/vitest" 1334 | } 1335 | }, 1336 | "node_modules/@vitest/spy": { 1337 | "version": "2.1.8", 1338 | "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-2.1.8.tgz", 1339 | "integrity": "sha512-5swjf2q95gXeYPevtW0BLk6H8+bPlMb4Vw/9Em4hFxDcaOxS+e0LOX4yqNxoHzMR2akEB2xfpnWUzkZokmgWDg==", 1340 | "dev": true, 1341 | "dependencies": { 1342 | "tinyspy": "^3.0.2" 1343 | }, 1344 | "funding": { 1345 | "url": "https://opencollective.com/vitest" 1346 | } 1347 | }, 1348 | "node_modules/@vitest/utils": { 1349 | "version": "2.1.8", 1350 | "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-2.1.8.tgz", 1351 | "integrity": "sha512-dwSoui6djdwbfFmIgbIjX2ZhIoG7Ex/+xpxyiEgIGzjliY8xGkcpITKTlp6B4MgtGkF2ilvm97cPM96XZaAgcA==", 1352 | "dev": true, 1353 | "dependencies": { 1354 | "@vitest/pretty-format": "2.1.8", 1355 | "loupe": "^3.1.2", 1356 | "tinyrainbow": "^1.2.0" 1357 | }, 1358 | "funding": { 1359 | "url": "https://opencollective.com/vitest" 1360 | } 1361 | }, 1362 | "node_modules/agent-base": { 1363 | "version": "7.1.3", 1364 | "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.3.tgz", 1365 | "integrity": "sha512-jRR5wdylq8CkOe6hei19GGZnxM6rBGwFl3Bg0YItGDimvjGtAvdZk4Pu6Cl4u4Igsws4a1fd1Vq3ezrhn4KmFw==", 1366 | "dev": true, 1367 | "engines": { 1368 | "node": ">= 14" 1369 | } 1370 | }, 1371 | "node_modules/ansi-regex": { 1372 | "version": "5.0.1", 1373 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", 1374 | "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", 1375 | "dev": true, 1376 | "peer": true, 1377 | "engines": { 1378 | "node": ">=8" 1379 | } 1380 | }, 1381 | "node_modules/ansi-styles": { 1382 | "version": "4.3.0", 1383 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", 1384 | "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", 1385 | "dev": true, 1386 | "peer": true, 1387 | "dependencies": { 1388 | "color-convert": "^2.0.1" 1389 | }, 1390 | "engines": { 1391 | "node": ">=8" 1392 | }, 1393 | "funding": { 1394 | "url": "https://github.com/chalk/ansi-styles?sponsor=1" 1395 | } 1396 | }, 1397 | "node_modules/aria-query": { 1398 | "version": "5.3.0", 1399 | "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.0.tgz", 1400 | "integrity": "sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==", 1401 | "dev": true, 1402 | "peer": true, 1403 | "dependencies": { 1404 | "dequal": "^2.0.3" 1405 | } 1406 | }, 1407 | "node_modules/asn1js": { 1408 | "version": "3.0.5", 1409 | "resolved": "https://registry.npmjs.org/asn1js/-/asn1js-3.0.5.tgz", 1410 | "integrity": "sha512-FVnvrKJwpt9LP2lAMl8qZswRNm3T4q9CON+bxldk2iwk3FFpuwhx2FfinyitizWHsVYyaY+y5JzDR0rCMV5yTQ==", 1411 | "dependencies": { 1412 | "pvtsutils": "^1.3.2", 1413 | "pvutils": "^1.1.3", 1414 | "tslib": "^2.4.0" 1415 | }, 1416 | "engines": { 1417 | "node": ">=12.0.0" 1418 | } 1419 | }, 1420 | "node_modules/assertion-error": { 1421 | "version": "2.0.1", 1422 | "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-2.0.1.tgz", 1423 | "integrity": "sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==", 1424 | "dev": true, 1425 | "engines": { 1426 | "node": ">=12" 1427 | } 1428 | }, 1429 | "node_modules/asynckit": { 1430 | "version": "0.4.0", 1431 | "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", 1432 | "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", 1433 | "dev": true 1434 | }, 1435 | "node_modules/atob": { 1436 | "version": "2.1.2", 1437 | "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", 1438 | "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", 1439 | "bin": { 1440 | "atob": "bin/atob.js" 1441 | }, 1442 | "engines": { 1443 | "node": ">= 4.5.0" 1444 | } 1445 | }, 1446 | "node_modules/Base64": { 1447 | "version": "1.1.0", 1448 | "resolved": "https://registry.npmjs.org/Base64/-/Base64-1.1.0.tgz", 1449 | "integrity": "sha512-qeacf8dvGpf+XAT27ESHMh7z84uRzj/ua2pQdJg483m3bEXv/kVFtDnMgvf70BQGqzbZhR9t6BmASzKvqfJf3Q==" 1450 | }, 1451 | "node_modules/broadcast-channel": { 1452 | "version": "5.3.0", 1453 | "resolved": "https://registry.npmjs.org/broadcast-channel/-/broadcast-channel-5.3.0.tgz", 1454 | "integrity": "sha512-0PmDYc/iUGZ4QbnCnV7u+WleygiS1bZ4oV6t4rANXYtSgEFtGhB5jimJPLOVpPtce61FVxrH8CYylfO5g7OLKw==", 1455 | "dependencies": { 1456 | "@babel/runtime": "7.22.10", 1457 | "oblivious-set": "1.1.1", 1458 | "p-queue": "6.6.2", 1459 | "unload": "2.4.1" 1460 | }, 1461 | "funding": { 1462 | "url": "https://github.com/sponsors/pubkey" 1463 | } 1464 | }, 1465 | "node_modules/broadcast-channel/node_modules/@babel/runtime": { 1466 | "version": "7.22.10", 1467 | "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.22.10.tgz", 1468 | "integrity": "sha512-21t/fkKLMZI4pqP2wlmsQAWnYW1PDyKyyUV4vCi+B25ydmdaYTKXPwCj0BzSUnZf4seIiYvSA3jcZ3gdsMFkLQ==", 1469 | "dependencies": { 1470 | "regenerator-runtime": "^0.14.0" 1471 | }, 1472 | "engines": { 1473 | "node": ">=6.9.0" 1474 | } 1475 | }, 1476 | "node_modules/browserslist": { 1477 | "version": "4.24.3", 1478 | "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.24.3.tgz", 1479 | "integrity": "sha512-1CPmv8iobE2fyRMV97dAcMVegvvWKxmq94hkLiAkUGwKVTyDLw33K+ZxiFrREKmmps4rIw6grcCFCnTMSZ/YiA==", 1480 | "dev": true, 1481 | "funding": [ 1482 | { 1483 | "type": "opencollective", 1484 | "url": "https://opencollective.com/browserslist" 1485 | }, 1486 | { 1487 | "type": "tidelift", 1488 | "url": "https://tidelift.com/funding/github/npm/browserslist" 1489 | }, 1490 | { 1491 | "type": "github", 1492 | "url": "https://github.com/sponsors/ai" 1493 | } 1494 | ], 1495 | "dependencies": { 1496 | "caniuse-lite": "^1.0.30001688", 1497 | "electron-to-chromium": "^1.5.73", 1498 | "node-releases": "^2.0.19", 1499 | "update-browserslist-db": "^1.1.1" 1500 | }, 1501 | "bin": { 1502 | "browserslist": "cli.js" 1503 | }, 1504 | "engines": { 1505 | "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" 1506 | } 1507 | }, 1508 | "node_modules/btoa": { 1509 | "version": "1.2.1", 1510 | "resolved": "https://registry.npmjs.org/btoa/-/btoa-1.2.1.tgz", 1511 | "integrity": "sha512-SB4/MIGlsiVkMcHmT+pSmIPoNDoHg+7cMzmt3Uxt628MTz2487DKSqK/fuhFBrkuqrYv5UCEnACpF4dTFNKc/g==", 1512 | "bin": { 1513 | "btoa": "bin/btoa.js" 1514 | }, 1515 | "engines": { 1516 | "node": ">= 0.4.0" 1517 | } 1518 | }, 1519 | "node_modules/cac": { 1520 | "version": "6.7.14", 1521 | "resolved": "https://registry.npmjs.org/cac/-/cac-6.7.14.tgz", 1522 | "integrity": "sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==", 1523 | "dev": true, 1524 | "engines": { 1525 | "node": ">=8" 1526 | } 1527 | }, 1528 | "node_modules/caniuse-lite": { 1529 | "version": "1.0.30001690", 1530 | "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001690.tgz", 1531 | "integrity": "sha512-5ExiE3qQN6oF8Clf8ifIDcMRCRE/dMGcETG/XGMD8/XiXm6HXQgQTh1yZYLXXpSOsEUlJm1Xr7kGULZTuGtP/w==", 1532 | "dev": true, 1533 | "funding": [ 1534 | { 1535 | "type": "opencollective", 1536 | "url": "https://opencollective.com/browserslist" 1537 | }, 1538 | { 1539 | "type": "tidelift", 1540 | "url": "https://tidelift.com/funding/github/npm/caniuse-lite" 1541 | }, 1542 | { 1543 | "type": "github", 1544 | "url": "https://github.com/sponsors/ai" 1545 | } 1546 | ] 1547 | }, 1548 | "node_modules/chai": { 1549 | "version": "5.1.2", 1550 | "resolved": "https://registry.npmjs.org/chai/-/chai-5.1.2.tgz", 1551 | "integrity": "sha512-aGtmf24DW6MLHHG5gCx4zaI3uBq3KRtxeVs0DjFH6Z0rDNbsvTxFASFvdj79pxjxZ8/5u3PIiN3IwEIQkiiuPw==", 1552 | "dev": true, 1553 | "dependencies": { 1554 | "assertion-error": "^2.0.1", 1555 | "check-error": "^2.1.1", 1556 | "deep-eql": "^5.0.1", 1557 | "loupe": "^3.1.0", 1558 | "pathval": "^2.0.0" 1559 | }, 1560 | "engines": { 1561 | "node": ">=12" 1562 | } 1563 | }, 1564 | "node_modules/chalk": { 1565 | "version": "4.1.2", 1566 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", 1567 | "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", 1568 | "dev": true, 1569 | "peer": true, 1570 | "dependencies": { 1571 | "ansi-styles": "^4.1.0", 1572 | "supports-color": "^7.1.0" 1573 | }, 1574 | "engines": { 1575 | "node": ">=10" 1576 | }, 1577 | "funding": { 1578 | "url": "https://github.com/chalk/chalk?sponsor=1" 1579 | } 1580 | }, 1581 | "node_modules/check-error": { 1582 | "version": "2.1.1", 1583 | "resolved": "https://registry.npmjs.org/check-error/-/check-error-2.1.1.tgz", 1584 | "integrity": "sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw==", 1585 | "dev": true, 1586 | "engines": { 1587 | "node": ">= 16" 1588 | } 1589 | }, 1590 | "node_modules/clone": { 1591 | "version": "2.1.2", 1592 | "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", 1593 | "integrity": "sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==", 1594 | "engines": { 1595 | "node": ">=0.8" 1596 | } 1597 | }, 1598 | "node_modules/clsx": { 1599 | "version": "1.2.1", 1600 | "resolved": "https://registry.npmjs.org/clsx/-/clsx-1.2.1.tgz", 1601 | "integrity": "sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg==", 1602 | "engines": { 1603 | "node": ">=6" 1604 | } 1605 | }, 1606 | "node_modules/color-convert": { 1607 | "version": "2.0.1", 1608 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", 1609 | "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", 1610 | "dev": true, 1611 | "peer": true, 1612 | "dependencies": { 1613 | "color-name": "~1.1.4" 1614 | }, 1615 | "engines": { 1616 | "node": ">=7.0.0" 1617 | } 1618 | }, 1619 | "node_modules/color-name": { 1620 | "version": "1.1.4", 1621 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", 1622 | "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", 1623 | "dev": true, 1624 | "peer": true 1625 | }, 1626 | "node_modules/combined-stream": { 1627 | "version": "1.0.8", 1628 | "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", 1629 | "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", 1630 | "dev": true, 1631 | "dependencies": { 1632 | "delayed-stream": "~1.0.0" 1633 | }, 1634 | "engines": { 1635 | "node": ">= 0.8" 1636 | } 1637 | }, 1638 | "node_modules/compare-versions": { 1639 | "version": "4.1.4", 1640 | "resolved": "https://registry.npmjs.org/compare-versions/-/compare-versions-4.1.4.tgz", 1641 | "integrity": "sha512-FemMreK9xNyL8gQevsdRMrvO4lFCkQP7qbuktn1q8ndcNk1+0mz7lgE7b/sNvbhVgY4w6tMN1FDp6aADjqw2rw==" 1642 | }, 1643 | "node_modules/convert-source-map": { 1644 | "version": "2.0.0", 1645 | "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", 1646 | "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", 1647 | "dev": true 1648 | }, 1649 | "node_modules/cookie": { 1650 | "version": "1.0.2", 1651 | "resolved": "https://registry.npmjs.org/cookie/-/cookie-1.0.2.tgz", 1652 | "integrity": "sha512-9Kr/j4O16ISv8zBBhJoi4bXOYNTkFLOqSL3UDB0njXxCXNezjeyVrJyGOWtgfs/q2km1gwBcfH8q1yEGoMYunA==", 1653 | "license": "MIT", 1654 | "engines": { 1655 | "node": ">=18" 1656 | } 1657 | }, 1658 | "node_modules/core-js": { 1659 | "version": "3.39.0", 1660 | "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.39.0.tgz", 1661 | "integrity": "sha512-raM0ew0/jJUqkJ0E6e8UDtl+y/7ktFivgWvqw8dNSQeNWoSDLvQ1H/RN3aPXB9tBd4/FhyR4RDPGhsNIMsAn7g==", 1662 | "hasInstallScript": true, 1663 | "funding": { 1664 | "type": "opencollective", 1665 | "url": "https://opencollective.com/core-js" 1666 | } 1667 | }, 1668 | "node_modules/cross-fetch": { 1669 | "version": "3.2.0", 1670 | "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.2.0.tgz", 1671 | "integrity": "sha512-Q+xVJLoGOeIMXZmbUK4HYk+69cQH6LudR0Vu/pRm2YlU/hDV9CiS0gKUMaWY5f2NeUH9C1nV3bsTlCo0FsTV1Q==", 1672 | "dependencies": { 1673 | "node-fetch": "^2.7.0" 1674 | } 1675 | }, 1676 | "node_modules/cssstyle": { 1677 | "version": "4.1.0", 1678 | "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-4.1.0.tgz", 1679 | "integrity": "sha512-h66W1URKpBS5YMI/V8PyXvTMFT8SupJ1IzoIV8IeBC/ji8WVmrO8dGlTi+2dh6whmdk6BiKJLD/ZBkhWbcg6nA==", 1680 | "dev": true, 1681 | "dependencies": { 1682 | "rrweb-cssom": "^0.7.1" 1683 | }, 1684 | "engines": { 1685 | "node": ">=18" 1686 | } 1687 | }, 1688 | "node_modules/csstype": { 1689 | "version": "3.1.3", 1690 | "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", 1691 | "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==", 1692 | "dev": true 1693 | }, 1694 | "node_modules/data-urls": { 1695 | "version": "5.0.0", 1696 | "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-5.0.0.tgz", 1697 | "integrity": "sha512-ZYP5VBHshaDAiVZxjbRVcFJpc+4xGgT0bK3vzy1HLN8jTO975HEbuYzZJcHoQEY5K1a0z8YayJkyVETa08eNTg==", 1698 | "dev": true, 1699 | "dependencies": { 1700 | "whatwg-mimetype": "^4.0.0", 1701 | "whatwg-url": "^14.0.0" 1702 | }, 1703 | "engines": { 1704 | "node": ">=18" 1705 | } 1706 | }, 1707 | "node_modules/debug": { 1708 | "version": "4.4.0", 1709 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", 1710 | "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", 1711 | "dev": true, 1712 | "dependencies": { 1713 | "ms": "^2.1.3" 1714 | }, 1715 | "engines": { 1716 | "node": ">=6.0" 1717 | }, 1718 | "peerDependenciesMeta": { 1719 | "supports-color": { 1720 | "optional": true 1721 | } 1722 | } 1723 | }, 1724 | "node_modules/decimal.js": { 1725 | "version": "10.4.3", 1726 | "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.4.3.tgz", 1727 | "integrity": "sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==", 1728 | "dev": true 1729 | }, 1730 | "node_modules/deep-eql": { 1731 | "version": "5.0.2", 1732 | "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-5.0.2.tgz", 1733 | "integrity": "sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==", 1734 | "dev": true, 1735 | "engines": { 1736 | "node": ">=6" 1737 | } 1738 | }, 1739 | "node_modules/delayed-stream": { 1740 | "version": "1.0.0", 1741 | "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", 1742 | "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", 1743 | "dev": true, 1744 | "engines": { 1745 | "node": ">=0.4.0" 1746 | } 1747 | }, 1748 | "node_modules/dequal": { 1749 | "version": "2.0.3", 1750 | "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", 1751 | "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", 1752 | "dev": true, 1753 | "peer": true, 1754 | "engines": { 1755 | "node": ">=6" 1756 | } 1757 | }, 1758 | "node_modules/dom-accessibility-api": { 1759 | "version": "0.5.16", 1760 | "resolved": "https://registry.npmjs.org/dom-accessibility-api/-/dom-accessibility-api-0.5.16.tgz", 1761 | "integrity": "sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg==", 1762 | "dev": true, 1763 | "peer": true 1764 | }, 1765 | "node_modules/dotenv": { 1766 | "version": "16.4.7", 1767 | "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.7.tgz", 1768 | "integrity": "sha512-47qPchRCykZC03FhkYAhrvwU4xDBFIj1QPqaarj6mdM/hgUzfPHcpkHJOn3mJAufFeeAxAzeGsr5X0M4k6fLZQ==", 1769 | "dev": true, 1770 | "engines": { 1771 | "node": ">=12" 1772 | }, 1773 | "funding": { 1774 | "url": "https://dotenvx.com" 1775 | } 1776 | }, 1777 | "node_modules/electron-to-chromium": { 1778 | "version": "1.5.76", 1779 | "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.76.tgz", 1780 | "integrity": "sha512-CjVQyG7n7Sr+eBXE86HIulnL5N8xZY1sgmOPGuq/F0Rr0FJq63lg0kEtOIDfZBk44FnDLf6FUJ+dsJcuiUDdDQ==", 1781 | "dev": true 1782 | }, 1783 | "node_modules/entities": { 1784 | "version": "4.5.0", 1785 | "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", 1786 | "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", 1787 | "dev": true, 1788 | "engines": { 1789 | "node": ">=0.12" 1790 | }, 1791 | "funding": { 1792 | "url": "https://github.com/fb55/entities?sponsor=1" 1793 | } 1794 | }, 1795 | "node_modules/es-module-lexer": { 1796 | "version": "1.6.0", 1797 | "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.6.0.tgz", 1798 | "integrity": "sha512-qqnD1yMU6tk/jnaMosogGySTZP8YtUgAffA9nMN+E/rjxcfRQ6IEk7IiozUjgxKoFHBGjTLnrHB/YC45r/59EQ==", 1799 | "dev": true 1800 | }, 1801 | "node_modules/esbuild": { 1802 | "version": "0.21.5", 1803 | "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.21.5.tgz", 1804 | "integrity": "sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==", 1805 | "dev": true, 1806 | "hasInstallScript": true, 1807 | "bin": { 1808 | "esbuild": "bin/esbuild" 1809 | }, 1810 | "engines": { 1811 | "node": ">=12" 1812 | }, 1813 | "optionalDependencies": { 1814 | "@esbuild/aix-ppc64": "0.21.5", 1815 | "@esbuild/android-arm": "0.21.5", 1816 | "@esbuild/android-arm64": "0.21.5", 1817 | "@esbuild/android-x64": "0.21.5", 1818 | "@esbuild/darwin-arm64": "0.21.5", 1819 | "@esbuild/darwin-x64": "0.21.5", 1820 | "@esbuild/freebsd-arm64": "0.21.5", 1821 | "@esbuild/freebsd-x64": "0.21.5", 1822 | "@esbuild/linux-arm": "0.21.5", 1823 | "@esbuild/linux-arm64": "0.21.5", 1824 | "@esbuild/linux-ia32": "0.21.5", 1825 | "@esbuild/linux-loong64": "0.21.5", 1826 | "@esbuild/linux-mips64el": "0.21.5", 1827 | "@esbuild/linux-ppc64": "0.21.5", 1828 | "@esbuild/linux-riscv64": "0.21.5", 1829 | "@esbuild/linux-s390x": "0.21.5", 1830 | "@esbuild/linux-x64": "0.21.5", 1831 | "@esbuild/netbsd-x64": "0.21.5", 1832 | "@esbuild/openbsd-x64": "0.21.5", 1833 | "@esbuild/sunos-x64": "0.21.5", 1834 | "@esbuild/win32-arm64": "0.21.5", 1835 | "@esbuild/win32-ia32": "0.21.5", 1836 | "@esbuild/win32-x64": "0.21.5" 1837 | } 1838 | }, 1839 | "node_modules/escalade": { 1840 | "version": "3.2.0", 1841 | "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", 1842 | "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", 1843 | "dev": true, 1844 | "engines": { 1845 | "node": ">=6" 1846 | } 1847 | }, 1848 | "node_modules/estree-walker": { 1849 | "version": "3.0.3", 1850 | "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", 1851 | "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", 1852 | "dev": true, 1853 | "dependencies": { 1854 | "@types/estree": "^1.0.0" 1855 | } 1856 | }, 1857 | "node_modules/eventemitter3": { 1858 | "version": "4.0.7", 1859 | "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", 1860 | "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==" 1861 | }, 1862 | "node_modules/exenv": { 1863 | "version": "1.2.2", 1864 | "resolved": "https://registry.npmjs.org/exenv/-/exenv-1.2.2.tgz", 1865 | "integrity": "sha512-Z+ktTxTwv9ILfgKCk32OX3n/doe+OcLTRtqK9pcL+JsP3J1/VW8Uvl4ZjLlKqeW4rzK4oesDOGMEMRIZqtP4Iw==" 1866 | }, 1867 | "node_modules/expect-type": { 1868 | "version": "1.1.0", 1869 | "resolved": "https://registry.npmjs.org/expect-type/-/expect-type-1.1.0.tgz", 1870 | "integrity": "sha512-bFi65yM+xZgk+u/KRIpekdSYkTB5W1pEf0Lt8Q8Msh7b+eQ7LXVtIB1Bkm4fvclDEL1b2CZkMhv2mOeF8tMdkA==", 1871 | "dev": true, 1872 | "engines": { 1873 | "node": ">=12.0.0" 1874 | } 1875 | }, 1876 | "node_modules/fast-text-encoding": { 1877 | "version": "1.0.6", 1878 | "resolved": "https://registry.npmjs.org/fast-text-encoding/-/fast-text-encoding-1.0.6.tgz", 1879 | "integrity": "sha512-VhXlQgj9ioXCqGstD37E/HBeqEGV/qOD/kmbVG8h5xKBYvM1L3lR1Zn4555cQ8GkYbJa8aJSipLPndE1k6zK2w==" 1880 | }, 1881 | "node_modules/form-data": { 1882 | "version": "4.0.1", 1883 | "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.1.tgz", 1884 | "integrity": "sha512-tzN8e4TX8+kkxGPK8D5u0FNmjPUjw3lwC9lSLxxoB/+GtsJG91CO8bSWy73APlgAZzZbXEYZJuxjkHH2w+Ezhw==", 1885 | "dev": true, 1886 | "dependencies": { 1887 | "asynckit": "^0.4.0", 1888 | "combined-stream": "^1.0.8", 1889 | "mime-types": "^2.1.12" 1890 | }, 1891 | "engines": { 1892 | "node": ">= 6" 1893 | } 1894 | }, 1895 | "node_modules/fsevents": { 1896 | "version": "2.3.3", 1897 | "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", 1898 | "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", 1899 | "dev": true, 1900 | "hasInstallScript": true, 1901 | "optional": true, 1902 | "os": [ 1903 | "darwin" 1904 | ], 1905 | "engines": { 1906 | "node": "^8.16.0 || ^10.6.0 || >=11.0.0" 1907 | } 1908 | }, 1909 | "node_modules/gensync": { 1910 | "version": "1.0.0-beta.2", 1911 | "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", 1912 | "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", 1913 | "dev": true, 1914 | "engines": { 1915 | "node": ">=6.9.0" 1916 | } 1917 | }, 1918 | "node_modules/globals": { 1919 | "version": "11.12.0", 1920 | "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", 1921 | "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", 1922 | "dev": true, 1923 | "engines": { 1924 | "node": ">=4" 1925 | } 1926 | }, 1927 | "node_modules/has-flag": { 1928 | "version": "4.0.0", 1929 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", 1930 | "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", 1931 | "dev": true, 1932 | "peer": true, 1933 | "engines": { 1934 | "node": ">=8" 1935 | } 1936 | }, 1937 | "node_modules/html-encoding-sniffer": { 1938 | "version": "4.0.0", 1939 | "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-4.0.0.tgz", 1940 | "integrity": "sha512-Y22oTqIU4uuPgEemfz7NDJz6OeKf12Lsu+QC+s3BVpda64lTiMYCyGwg5ki4vFxkMwQdeZDl2adZoqUgdFuTgQ==", 1941 | "dev": true, 1942 | "dependencies": { 1943 | "whatwg-encoding": "^3.1.1" 1944 | }, 1945 | "engines": { 1946 | "node": ">=18" 1947 | } 1948 | }, 1949 | "node_modules/http-proxy-agent": { 1950 | "version": "7.0.2", 1951 | "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz", 1952 | "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==", 1953 | "dev": true, 1954 | "dependencies": { 1955 | "agent-base": "^7.1.0", 1956 | "debug": "^4.3.4" 1957 | }, 1958 | "engines": { 1959 | "node": ">= 14" 1960 | } 1961 | }, 1962 | "node_modules/https-proxy-agent": { 1963 | "version": "7.0.6", 1964 | "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz", 1965 | "integrity": "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==", 1966 | "dev": true, 1967 | "dependencies": { 1968 | "agent-base": "^7.1.2", 1969 | "debug": "4" 1970 | }, 1971 | "engines": { 1972 | "node": ">= 14" 1973 | } 1974 | }, 1975 | "node_modules/iconv-lite": { 1976 | "version": "0.6.3", 1977 | "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", 1978 | "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", 1979 | "dev": true, 1980 | "dependencies": { 1981 | "safer-buffer": ">= 2.1.2 < 3.0.0" 1982 | }, 1983 | "engines": { 1984 | "node": ">=0.10.0" 1985 | } 1986 | }, 1987 | "node_modules/is-potential-custom-element-name": { 1988 | "version": "1.0.1", 1989 | "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", 1990 | "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==", 1991 | "dev": true 1992 | }, 1993 | "node_modules/jquery": { 1994 | "version": "3.7.1", 1995 | "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.7.1.tgz", 1996 | "integrity": "sha512-m4avr8yL8kmFN8psrbFFFmB/If14iN5o9nw/NgnnM+kybDJpRsAynV2BsfpTYrTRysYUdADVD7CkUUizgkpLfg==" 1997 | }, 1998 | "node_modules/js-cookie": { 1999 | "version": "3.0.5", 2000 | "resolved": "https://registry.npmjs.org/js-cookie/-/js-cookie-3.0.5.tgz", 2001 | "integrity": "sha512-cEiJEAEoIbWfCZYKWhVwFuvPX1gETRYPw6LlaTKoxD3s2AkXzkCjnp6h0V77ozyqj0jakteJ4YqDJT830+lVGw==", 2002 | "engines": { 2003 | "node": ">=14" 2004 | } 2005 | }, 2006 | "node_modules/js-tokens": { 2007 | "version": "4.0.0", 2008 | "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", 2009 | "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" 2010 | }, 2011 | "node_modules/jsdom": { 2012 | "version": "25.0.1", 2013 | "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-25.0.1.tgz", 2014 | "integrity": "sha512-8i7LzZj7BF8uplX+ZyOlIz86V6TAsSs+np6m1kpW9u0JWi4z/1t+FzcK1aek+ybTnAC4KhBL4uXCNT0wcUIeCw==", 2015 | "dev": true, 2016 | "dependencies": { 2017 | "cssstyle": "^4.1.0", 2018 | "data-urls": "^5.0.0", 2019 | "decimal.js": "^10.4.3", 2020 | "form-data": "^4.0.0", 2021 | "html-encoding-sniffer": "^4.0.0", 2022 | "http-proxy-agent": "^7.0.2", 2023 | "https-proxy-agent": "^7.0.5", 2024 | "is-potential-custom-element-name": "^1.0.1", 2025 | "nwsapi": "^2.2.12", 2026 | "parse5": "^7.1.2", 2027 | "rrweb-cssom": "^0.7.1", 2028 | "saxes": "^6.0.0", 2029 | "symbol-tree": "^3.2.4", 2030 | "tough-cookie": "^5.0.0", 2031 | "w3c-xmlserializer": "^5.0.0", 2032 | "webidl-conversions": "^7.0.0", 2033 | "whatwg-encoding": "^3.1.1", 2034 | "whatwg-mimetype": "^4.0.0", 2035 | "whatwg-url": "^14.0.0", 2036 | "ws": "^8.18.0", 2037 | "xml-name-validator": "^5.0.0" 2038 | }, 2039 | "engines": { 2040 | "node": ">=18" 2041 | }, 2042 | "peerDependencies": { 2043 | "canvas": "^2.11.2" 2044 | }, 2045 | "peerDependenciesMeta": { 2046 | "canvas": { 2047 | "optional": true 2048 | } 2049 | } 2050 | }, 2051 | "node_modules/jsesc": { 2052 | "version": "3.1.0", 2053 | "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", 2054 | "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", 2055 | "dev": true, 2056 | "bin": { 2057 | "jsesc": "bin/jsesc" 2058 | }, 2059 | "engines": { 2060 | "node": ">=6" 2061 | } 2062 | }, 2063 | "node_modules/json5": { 2064 | "version": "2.2.3", 2065 | "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", 2066 | "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", 2067 | "dev": true, 2068 | "bin": { 2069 | "json5": "lib/cli.js" 2070 | }, 2071 | "engines": { 2072 | "node": ">=6" 2073 | } 2074 | }, 2075 | "node_modules/keyboard-key": { 2076 | "version": "1.1.0", 2077 | "resolved": "https://registry.npmjs.org/keyboard-key/-/keyboard-key-1.1.0.tgz", 2078 | "integrity": "sha512-qkBzPTi3rlAKvX7k0/ub44sqOfXeLc/jcnGGmj5c7BJpU8eDrEVPyhCvNYAaoubbsLm9uGWwQJO1ytQK1a9/dQ==" 2079 | }, 2080 | "node_modules/lodash": { 2081 | "version": "4.17.21", 2082 | "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", 2083 | "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" 2084 | }, 2085 | "node_modules/lodash-es": { 2086 | "version": "4.17.21", 2087 | "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.21.tgz", 2088 | "integrity": "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==" 2089 | }, 2090 | "node_modules/loose-envify": { 2091 | "version": "1.4.0", 2092 | "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", 2093 | "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", 2094 | "dependencies": { 2095 | "js-tokens": "^3.0.0 || ^4.0.0" 2096 | }, 2097 | "bin": { 2098 | "loose-envify": "cli.js" 2099 | } 2100 | }, 2101 | "node_modules/loupe": { 2102 | "version": "3.1.2", 2103 | "resolved": "https://registry.npmjs.org/loupe/-/loupe-3.1.2.tgz", 2104 | "integrity": "sha512-23I4pFZHmAemUnz8WZXbYRSKYj801VDaNv9ETuMh7IrMc7VuVVSo+Z9iLE3ni30+U48iDWfi30d3twAXBYmnCg==", 2105 | "dev": true 2106 | }, 2107 | "node_modules/lru-cache": { 2108 | "version": "5.1.1", 2109 | "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", 2110 | "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", 2111 | "dev": true, 2112 | "dependencies": { 2113 | "yallist": "^3.0.2" 2114 | } 2115 | }, 2116 | "node_modules/lz-string": { 2117 | "version": "1.5.0", 2118 | "resolved": "https://registry.npmjs.org/lz-string/-/lz-string-1.5.0.tgz", 2119 | "integrity": "sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==", 2120 | "dev": true, 2121 | "peer": true, 2122 | "bin": { 2123 | "lz-string": "bin/bin.js" 2124 | } 2125 | }, 2126 | "node_modules/magic-string": { 2127 | "version": "0.30.17", 2128 | "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.17.tgz", 2129 | "integrity": "sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==", 2130 | "dev": true, 2131 | "dependencies": { 2132 | "@jridgewell/sourcemap-codec": "^1.5.0" 2133 | } 2134 | }, 2135 | "node_modules/mime-db": { 2136 | "version": "1.52.0", 2137 | "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", 2138 | "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", 2139 | "dev": true, 2140 | "engines": { 2141 | "node": ">= 0.6" 2142 | } 2143 | }, 2144 | "node_modules/mime-types": { 2145 | "version": "2.1.35", 2146 | "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", 2147 | "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", 2148 | "dev": true, 2149 | "dependencies": { 2150 | "mime-db": "1.52.0" 2151 | }, 2152 | "engines": { 2153 | "node": ">= 0.6" 2154 | } 2155 | }, 2156 | "node_modules/ms": { 2157 | "version": "2.1.3", 2158 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", 2159 | "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", 2160 | "dev": true 2161 | }, 2162 | "node_modules/nanoid": { 2163 | "version": "3.3.8", 2164 | "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.8.tgz", 2165 | "integrity": "sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w==", 2166 | "dev": true, 2167 | "funding": [ 2168 | { 2169 | "type": "github", 2170 | "url": "https://github.com/sponsors/ai" 2171 | } 2172 | ], 2173 | "bin": { 2174 | "nanoid": "bin/nanoid.cjs" 2175 | }, 2176 | "engines": { 2177 | "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" 2178 | } 2179 | }, 2180 | "node_modules/node-cache": { 2181 | "version": "5.1.2", 2182 | "resolved": "https://registry.npmjs.org/node-cache/-/node-cache-5.1.2.tgz", 2183 | "integrity": "sha512-t1QzWwnk4sjLWaQAS8CHgOJ+RAfmHpxFWmc36IWTiWHQfs0w5JDMBS1b1ZxQteo0vVVuWJvIUKHDkkeK7vIGCg==", 2184 | "dependencies": { 2185 | "clone": "2.x" 2186 | }, 2187 | "engines": { 2188 | "node": ">= 8.0.0" 2189 | } 2190 | }, 2191 | "node_modules/node-fetch": { 2192 | "version": "2.7.0", 2193 | "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", 2194 | "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", 2195 | "dependencies": { 2196 | "whatwg-url": "^5.0.0" 2197 | }, 2198 | "engines": { 2199 | "node": "4.x || >=6.0.0" 2200 | }, 2201 | "peerDependencies": { 2202 | "encoding": "^0.1.0" 2203 | }, 2204 | "peerDependenciesMeta": { 2205 | "encoding": { 2206 | "optional": true 2207 | } 2208 | } 2209 | }, 2210 | "node_modules/node-fetch/node_modules/tr46": { 2211 | "version": "0.0.3", 2212 | "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", 2213 | "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" 2214 | }, 2215 | "node_modules/node-fetch/node_modules/webidl-conversions": { 2216 | "version": "3.0.1", 2217 | "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", 2218 | "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" 2219 | }, 2220 | "node_modules/node-fetch/node_modules/whatwg-url": { 2221 | "version": "5.0.0", 2222 | "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", 2223 | "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", 2224 | "dependencies": { 2225 | "tr46": "~0.0.3", 2226 | "webidl-conversions": "^3.0.0" 2227 | } 2228 | }, 2229 | "node_modules/node-releases": { 2230 | "version": "2.0.19", 2231 | "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.19.tgz", 2232 | "integrity": "sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==", 2233 | "dev": true 2234 | }, 2235 | "node_modules/nwsapi": { 2236 | "version": "2.2.16", 2237 | "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.16.tgz", 2238 | "integrity": "sha512-F1I/bimDpj3ncaNDhfyMWuFqmQDBwDB0Fogc2qpL3BWvkQteFD/8BzWuIRl83rq0DXfm8SGt/HFhLXZyljTXcQ==", 2239 | "dev": true 2240 | }, 2241 | "node_modules/object-assign": { 2242 | "version": "4.1.1", 2243 | "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", 2244 | "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", 2245 | "engines": { 2246 | "node": ">=0.10.0" 2247 | } 2248 | }, 2249 | "node_modules/oblivious-set": { 2250 | "version": "1.1.1", 2251 | "resolved": "https://registry.npmjs.org/oblivious-set/-/oblivious-set-1.1.1.tgz", 2252 | "integrity": "sha512-Oh+8fK09mgGmAshFdH6hSVco6KZmd1tTwNFWj35OvzdmJTMZtAkbn05zar2iG3v6sDs1JLEtOiBGNb6BHwkb2w==" 2253 | }, 2254 | "node_modules/p-cancelable": { 2255 | "version": "2.1.1", 2256 | "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-2.1.1.tgz", 2257 | "integrity": "sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==", 2258 | "engines": { 2259 | "node": ">=8" 2260 | } 2261 | }, 2262 | "node_modules/p-finally": { 2263 | "version": "1.0.0", 2264 | "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", 2265 | "integrity": "sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==", 2266 | "engines": { 2267 | "node": ">=4" 2268 | } 2269 | }, 2270 | "node_modules/p-queue": { 2271 | "version": "6.6.2", 2272 | "resolved": "https://registry.npmjs.org/p-queue/-/p-queue-6.6.2.tgz", 2273 | "integrity": "sha512-RwFpb72c/BhQLEXIZ5K2e+AhgNVmIejGlTgiB9MzZ0e93GRvqZ7uSi0dvRF7/XIXDeNkra2fNHBxTyPDGySpjQ==", 2274 | "dependencies": { 2275 | "eventemitter3": "^4.0.4", 2276 | "p-timeout": "^3.2.0" 2277 | }, 2278 | "engines": { 2279 | "node": ">=8" 2280 | }, 2281 | "funding": { 2282 | "url": "https://github.com/sponsors/sindresorhus" 2283 | } 2284 | }, 2285 | "node_modules/p-timeout": { 2286 | "version": "3.2.0", 2287 | "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-3.2.0.tgz", 2288 | "integrity": "sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg==", 2289 | "dependencies": { 2290 | "p-finally": "^1.0.0" 2291 | }, 2292 | "engines": { 2293 | "node": ">=8" 2294 | } 2295 | }, 2296 | "node_modules/parse5": { 2297 | "version": "7.2.1", 2298 | "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.2.1.tgz", 2299 | "integrity": "sha512-BuBYQYlv1ckiPdQi/ohiivi9Sagc9JG+Ozs0r7b/0iK3sKmrb0b9FdWdBbOdx6hBCM/F9Ir82ofnBhtZOjCRPQ==", 2300 | "dev": true, 2301 | "dependencies": { 2302 | "entities": "^4.5.0" 2303 | }, 2304 | "funding": { 2305 | "url": "https://github.com/inikulin/parse5?sponsor=1" 2306 | } 2307 | }, 2308 | "node_modules/pathe": { 2309 | "version": "1.1.2", 2310 | "resolved": "https://registry.npmjs.org/pathe/-/pathe-1.1.2.tgz", 2311 | "integrity": "sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==", 2312 | "dev": true 2313 | }, 2314 | "node_modules/pathval": { 2315 | "version": "2.0.0", 2316 | "resolved": "https://registry.npmjs.org/pathval/-/pathval-2.0.0.tgz", 2317 | "integrity": "sha512-vE7JKRyES09KiunauX7nd2Q9/L7lhok4smP9RZTDeD4MVs72Dp2qNFVz39Nz5a0FVEW0BJR6C0DYrq6unoziZA==", 2318 | "dev": true, 2319 | "engines": { 2320 | "node": ">= 14.16" 2321 | } 2322 | }, 2323 | "node_modules/picocolors": { 2324 | "version": "1.1.1", 2325 | "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", 2326 | "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", 2327 | "dev": true 2328 | }, 2329 | "node_modules/postcss": { 2330 | "version": "8.4.49", 2331 | "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.49.tgz", 2332 | "integrity": "sha512-OCVPnIObs4N29kxTjzLfUryOkvZEq+pf8jTF0lg8E7uETuWHA+v7j3c/xJmiqpX450191LlmZfUKkXxkTry7nA==", 2333 | "dev": true, 2334 | "funding": [ 2335 | { 2336 | "type": "opencollective", 2337 | "url": "https://opencollective.com/postcss/" 2338 | }, 2339 | { 2340 | "type": "tidelift", 2341 | "url": "https://tidelift.com/funding/github/npm/postcss" 2342 | }, 2343 | { 2344 | "type": "github", 2345 | "url": "https://github.com/sponsors/ai" 2346 | } 2347 | ], 2348 | "dependencies": { 2349 | "nanoid": "^3.3.7", 2350 | "picocolors": "^1.1.1", 2351 | "source-map-js": "^1.2.1" 2352 | }, 2353 | "engines": { 2354 | "node": "^10 || ^12 || >=14" 2355 | } 2356 | }, 2357 | "node_modules/pretty-format": { 2358 | "version": "27.5.1", 2359 | "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.5.1.tgz", 2360 | "integrity": "sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==", 2361 | "dev": true, 2362 | "peer": true, 2363 | "dependencies": { 2364 | "ansi-regex": "^5.0.1", 2365 | "ansi-styles": "^5.0.0", 2366 | "react-is": "^17.0.1" 2367 | }, 2368 | "engines": { 2369 | "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" 2370 | } 2371 | }, 2372 | "node_modules/pretty-format/node_modules/ansi-styles": { 2373 | "version": "5.2.0", 2374 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", 2375 | "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", 2376 | "dev": true, 2377 | "peer": true, 2378 | "engines": { 2379 | "node": ">=10" 2380 | }, 2381 | "funding": { 2382 | "url": "https://github.com/chalk/ansi-styles?sponsor=1" 2383 | } 2384 | }, 2385 | "node_modules/prop-types": { 2386 | "version": "15.8.1", 2387 | "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", 2388 | "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", 2389 | "dependencies": { 2390 | "loose-envify": "^1.4.0", 2391 | "object-assign": "^4.1.1", 2392 | "react-is": "^16.13.1" 2393 | } 2394 | }, 2395 | "node_modules/prop-types/node_modules/react-is": { 2396 | "version": "16.13.1", 2397 | "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", 2398 | "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" 2399 | }, 2400 | "node_modules/punycode": { 2401 | "version": "2.3.1", 2402 | "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", 2403 | "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", 2404 | "dev": true, 2405 | "engines": { 2406 | "node": ">=6" 2407 | } 2408 | }, 2409 | "node_modules/pvtsutils": { 2410 | "version": "1.3.6", 2411 | "resolved": "https://registry.npmjs.org/pvtsutils/-/pvtsutils-1.3.6.tgz", 2412 | "integrity": "sha512-PLgQXQ6H2FWCaeRak8vvk1GW462lMxB5s3Jm673N82zI4vqtVUPuZdffdZbPDFRoU8kAhItWFtPCWiPpp4/EDg==", 2413 | "dependencies": { 2414 | "tslib": "^2.8.1" 2415 | } 2416 | }, 2417 | "node_modules/pvutils": { 2418 | "version": "1.1.3", 2419 | "resolved": "https://registry.npmjs.org/pvutils/-/pvutils-1.1.3.tgz", 2420 | "integrity": "sha512-pMpnA0qRdFp32b1sJl1wOJNxZLQ2cbQx+k6tjNtZ8CpvVhNqEPRgivZ2WOUev2YMajecdH7ctUPDvEe87nariQ==", 2421 | "engines": { 2422 | "node": ">=6.0.0" 2423 | } 2424 | }, 2425 | "node_modules/react": { 2426 | "version": "18.3.1", 2427 | "resolved": "https://registry.npmjs.org/react/-/react-18.3.1.tgz", 2428 | "integrity": "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==", 2429 | "dependencies": { 2430 | "loose-envify": "^1.1.0" 2431 | }, 2432 | "engines": { 2433 | "node": ">=0.10.0" 2434 | } 2435 | }, 2436 | "node_modules/react-dom": { 2437 | "version": "18.3.1", 2438 | "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.3.1.tgz", 2439 | "integrity": "sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==", 2440 | "dependencies": { 2441 | "loose-envify": "^1.1.0", 2442 | "scheduler": "^0.23.2" 2443 | }, 2444 | "peerDependencies": { 2445 | "react": "^18.3.1" 2446 | } 2447 | }, 2448 | "node_modules/react-fast-compare": { 2449 | "version": "3.2.2", 2450 | "resolved": "https://registry.npmjs.org/react-fast-compare/-/react-fast-compare-3.2.2.tgz", 2451 | "integrity": "sha512-nsO+KSNgo1SbJqJEYRE9ERzo7YtYbou/OqjSQKxV7jcKox7+usiUVZOAC+XnDOABXggQTno0Y1CpVnuWEc1boQ==" 2452 | }, 2453 | "node_modules/react-is": { 2454 | "version": "17.0.2", 2455 | "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", 2456 | "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==" 2457 | }, 2458 | "node_modules/react-popper": { 2459 | "version": "2.3.0", 2460 | "resolved": "https://registry.npmjs.org/react-popper/-/react-popper-2.3.0.tgz", 2461 | "integrity": "sha512-e1hj8lL3uM+sgSR4Lxzn5h1GxBlpa4CQz0XLF8kx4MDrDRWY0Ena4c97PUeSX9i5W3UAfDP0z0FXCTQkoXUl3Q==", 2462 | "dependencies": { 2463 | "react-fast-compare": "^3.0.1", 2464 | "warning": "^4.0.2" 2465 | }, 2466 | "peerDependencies": { 2467 | "@popperjs/core": "^2.0.0", 2468 | "react": "^16.8.0 || ^17 || ^18", 2469 | "react-dom": "^16.8.0 || ^17 || ^18" 2470 | } 2471 | }, 2472 | "node_modules/react-refresh": { 2473 | "version": "0.14.2", 2474 | "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.14.2.tgz", 2475 | "integrity": "sha512-jCvmsr+1IUSMUyzOkRcvnVbX3ZYC6g9TDrDbFuFmRDq7PD4yaGbLKNQL6k2jnArV8hjYxh7hVhAZB6s9HDGpZA==", 2476 | "dev": true, 2477 | "engines": { 2478 | "node": ">=0.10.0" 2479 | } 2480 | }, 2481 | "node_modules/react-router": { 2482 | "version": "7.4.1", 2483 | "resolved": "https://registry.npmjs.org/react-router/-/react-router-7.4.1.tgz", 2484 | "integrity": "sha512-Vmizn9ZNzxfh3cumddqv3kLOKvc7AskUT0dC1prTabhiEi0U4A33LmkDOJ79tXaeSqCqMBXBU/ySX88W85+EUg==", 2485 | "license": "MIT", 2486 | "dependencies": { 2487 | "@types/cookie": "^0.6.0", 2488 | "cookie": "^1.0.1", 2489 | "set-cookie-parser": "^2.6.0", 2490 | "turbo-stream": "2.4.0" 2491 | }, 2492 | "engines": { 2493 | "node": ">=20.0.0" 2494 | }, 2495 | "peerDependencies": { 2496 | "react": ">=18", 2497 | "react-dom": ">=18" 2498 | }, 2499 | "peerDependenciesMeta": { 2500 | "react-dom": { 2501 | "optional": true 2502 | } 2503 | } 2504 | }, 2505 | "node_modules/react-router-dom": { 2506 | "version": "7.4.1", 2507 | "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-7.4.1.tgz", 2508 | "integrity": "sha512-L3/4tig0Lvs6m6THK0HRV4eHUdpx0dlJasgCxXKnavwhh4tKYgpuZk75HRYNoRKDyDWi9QgzGXsQ1oQSBlWpAA==", 2509 | "license": "MIT", 2510 | "dependencies": { 2511 | "react-router": "7.4.1" 2512 | }, 2513 | "engines": { 2514 | "node": ">=20.0.0" 2515 | }, 2516 | "peerDependencies": { 2517 | "react": ">=18", 2518 | "react-dom": ">=18" 2519 | } 2520 | }, 2521 | "node_modules/regenerator-runtime": { 2522 | "version": "0.14.1", 2523 | "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", 2524 | "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==" 2525 | }, 2526 | "node_modules/rollup": { 2527 | "version": "4.29.1", 2528 | "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.29.1.tgz", 2529 | "integrity": "sha512-RaJ45M/kmJUzSWDs1Nnd5DdV4eerC98idtUOVr6FfKcgxqvjwHmxc5upLF9qZU9EpsVzzhleFahrT3shLuJzIw==", 2530 | "dev": true, 2531 | "dependencies": { 2532 | "@types/estree": "1.0.6" 2533 | }, 2534 | "bin": { 2535 | "rollup": "dist/bin/rollup" 2536 | }, 2537 | "engines": { 2538 | "node": ">=18.0.0", 2539 | "npm": ">=8.0.0" 2540 | }, 2541 | "optionalDependencies": { 2542 | "@rollup/rollup-android-arm-eabi": "4.29.1", 2543 | "@rollup/rollup-android-arm64": "4.29.1", 2544 | "@rollup/rollup-darwin-arm64": "4.29.1", 2545 | "@rollup/rollup-darwin-x64": "4.29.1", 2546 | "@rollup/rollup-freebsd-arm64": "4.29.1", 2547 | "@rollup/rollup-freebsd-x64": "4.29.1", 2548 | "@rollup/rollup-linux-arm-gnueabihf": "4.29.1", 2549 | "@rollup/rollup-linux-arm-musleabihf": "4.29.1", 2550 | "@rollup/rollup-linux-arm64-gnu": "4.29.1", 2551 | "@rollup/rollup-linux-arm64-musl": "4.29.1", 2552 | "@rollup/rollup-linux-loongarch64-gnu": "4.29.1", 2553 | "@rollup/rollup-linux-powerpc64le-gnu": "4.29.1", 2554 | "@rollup/rollup-linux-riscv64-gnu": "4.29.1", 2555 | "@rollup/rollup-linux-s390x-gnu": "4.29.1", 2556 | "@rollup/rollup-linux-x64-gnu": "4.29.1", 2557 | "@rollup/rollup-linux-x64-musl": "4.29.1", 2558 | "@rollup/rollup-win32-arm64-msvc": "4.29.1", 2559 | "@rollup/rollup-win32-ia32-msvc": "4.29.1", 2560 | "@rollup/rollup-win32-x64-msvc": "4.29.1", 2561 | "fsevents": "~2.3.2" 2562 | } 2563 | }, 2564 | "node_modules/rrweb-cssom": { 2565 | "version": "0.7.1", 2566 | "resolved": "https://registry.npmjs.org/rrweb-cssom/-/rrweb-cssom-0.7.1.tgz", 2567 | "integrity": "sha512-TrEMa7JGdVm0UThDJSx7ddw5nVm3UJS9o9CCIZ72B1vSyEZoziDqBYP3XIoi/12lKrJR8rE3jeFHMok2F/Mnsg==", 2568 | "dev": true 2569 | }, 2570 | "node_modules/safer-buffer": { 2571 | "version": "2.1.2", 2572 | "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", 2573 | "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", 2574 | "dev": true 2575 | }, 2576 | "node_modules/saxes": { 2577 | "version": "6.0.0", 2578 | "resolved": "https://registry.npmjs.org/saxes/-/saxes-6.0.0.tgz", 2579 | "integrity": "sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==", 2580 | "dev": true, 2581 | "dependencies": { 2582 | "xmlchars": "^2.2.0" 2583 | }, 2584 | "engines": { 2585 | "node": ">=v12.22.7" 2586 | } 2587 | }, 2588 | "node_modules/scheduler": { 2589 | "version": "0.23.2", 2590 | "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.2.tgz", 2591 | "integrity": "sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==", 2592 | "dependencies": { 2593 | "loose-envify": "^1.1.0" 2594 | } 2595 | }, 2596 | "node_modules/semantic-ui-css": { 2597 | "version": "2.5.0", 2598 | "resolved": "https://registry.npmjs.org/semantic-ui-css/-/semantic-ui-css-2.5.0.tgz", 2599 | "integrity": "sha512-jIWn3WXXE2uSaWCcB+gVJVRG3masIKtTMNEP2X8Aw909H2rHpXGneYOxzO3hT8TpyvB5/dEEo9mBFCitGwoj1A==", 2600 | "dependencies": { 2601 | "jquery": "x.*" 2602 | } 2603 | }, 2604 | "node_modules/semantic-ui-react": { 2605 | "version": "2.1.5", 2606 | "resolved": "https://registry.npmjs.org/semantic-ui-react/-/semantic-ui-react-2.1.5.tgz", 2607 | "integrity": "sha512-nIqmmUNpFHfovEb+RI2w3E2/maZQutd8UIWyRjf1SLse+XF51hI559xbz/sLN3O6RpLjr/echLOOXwKCirPy3Q==", 2608 | "dependencies": { 2609 | "@babel/runtime": "^7.10.5", 2610 | "@fluentui/react-component-event-listener": "~0.63.0", 2611 | "@fluentui/react-component-ref": "~0.63.0", 2612 | "@popperjs/core": "^2.6.0", 2613 | "@semantic-ui-react/event-stack": "^3.1.3", 2614 | "clsx": "^1.1.1", 2615 | "keyboard-key": "^1.1.0", 2616 | "lodash": "^4.17.21", 2617 | "lodash-es": "^4.17.21", 2618 | "prop-types": "^15.7.2", 2619 | "react-is": "^16.8.6 || ^17.0.0 || ^18.0.0", 2620 | "react-popper": "^2.3.0", 2621 | "shallowequal": "^1.1.0" 2622 | }, 2623 | "peerDependencies": { 2624 | "react": "^16.8.0 || ^17.0.0 || ^18.0.0", 2625 | "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" 2626 | } 2627 | }, 2628 | "node_modules/semver": { 2629 | "version": "6.3.1", 2630 | "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", 2631 | "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", 2632 | "dev": true, 2633 | "bin": { 2634 | "semver": "bin/semver.js" 2635 | } 2636 | }, 2637 | "node_modules/set-cookie-parser": { 2638 | "version": "2.7.1", 2639 | "resolved": "https://registry.npmjs.org/set-cookie-parser/-/set-cookie-parser-2.7.1.tgz", 2640 | "integrity": "sha512-IOc8uWeOZgnb3ptbCURJWNjWUPcO3ZnTTdzsurqERrP6nPyv+paC55vJM0LpOlT2ne+Ix+9+CRG1MNLlyZ4GjQ==", 2641 | "license": "MIT" 2642 | }, 2643 | "node_modules/shallowequal": { 2644 | "version": "1.1.0", 2645 | "resolved": "https://registry.npmjs.org/shallowequal/-/shallowequal-1.1.0.tgz", 2646 | "integrity": "sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ==" 2647 | }, 2648 | "node_modules/siginfo": { 2649 | "version": "2.0.0", 2650 | "resolved": "https://registry.npmjs.org/siginfo/-/siginfo-2.0.0.tgz", 2651 | "integrity": "sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==", 2652 | "dev": true 2653 | }, 2654 | "node_modules/source-map-js": { 2655 | "version": "1.2.1", 2656 | "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", 2657 | "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", 2658 | "dev": true, 2659 | "engines": { 2660 | "node": ">=0.10.0" 2661 | } 2662 | }, 2663 | "node_modules/stackback": { 2664 | "version": "0.0.2", 2665 | "resolved": "https://registry.npmjs.org/stackback/-/stackback-0.0.2.tgz", 2666 | "integrity": "sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==", 2667 | "dev": true 2668 | }, 2669 | "node_modules/std-env": { 2670 | "version": "3.8.0", 2671 | "resolved": "https://registry.npmjs.org/std-env/-/std-env-3.8.0.tgz", 2672 | "integrity": "sha512-Bc3YwwCB+OzldMxOXJIIvC6cPRWr/LxOp48CdQTOkPyk/t4JWWJbrilwBd7RJzKV8QW7tJkcgAmeuLLJugl5/w==", 2673 | "dev": true 2674 | }, 2675 | "node_modules/supports-color": { 2676 | "version": "7.2.0", 2677 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", 2678 | "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", 2679 | "dev": true, 2680 | "peer": true, 2681 | "dependencies": { 2682 | "has-flag": "^4.0.0" 2683 | }, 2684 | "engines": { 2685 | "node": ">=8" 2686 | } 2687 | }, 2688 | "node_modules/symbol-tree": { 2689 | "version": "3.2.4", 2690 | "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", 2691 | "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", 2692 | "dev": true 2693 | }, 2694 | "node_modules/tiny-emitter": { 2695 | "version": "1.1.0", 2696 | "resolved": "https://registry.npmjs.org/tiny-emitter/-/tiny-emitter-1.1.0.tgz", 2697 | "integrity": "sha512-HFhr+OKGIHRO6krgzEt9MqbMO98wPDzDPr1BOpM/nZCChkK40UYn8b70nSjcan4jTzDSQecy1KRVVQRohIRWrw==" 2698 | }, 2699 | "node_modules/tinybench": { 2700 | "version": "2.9.0", 2701 | "resolved": "https://registry.npmjs.org/tinybench/-/tinybench-2.9.0.tgz", 2702 | "integrity": "sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==", 2703 | "dev": true 2704 | }, 2705 | "node_modules/tinyexec": { 2706 | "version": "0.3.2", 2707 | "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-0.3.2.tgz", 2708 | "integrity": "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==", 2709 | "dev": true 2710 | }, 2711 | "node_modules/tinypool": { 2712 | "version": "1.0.2", 2713 | "resolved": "https://registry.npmjs.org/tinypool/-/tinypool-1.0.2.tgz", 2714 | "integrity": "sha512-al6n+QEANGFOMf/dmUMsuS5/r9B06uwlyNjZZql/zv8J7ybHCgoihBNORZCY2mzUuAnomQa2JdhyHKzZxPCrFA==", 2715 | "dev": true, 2716 | "engines": { 2717 | "node": "^18.0.0 || >=20.0.0" 2718 | } 2719 | }, 2720 | "node_modules/tinyrainbow": { 2721 | "version": "1.2.0", 2722 | "resolved": "https://registry.npmjs.org/tinyrainbow/-/tinyrainbow-1.2.0.tgz", 2723 | "integrity": "sha512-weEDEq7Z5eTHPDh4xjX789+fHfF+P8boiFB+0vbWzpbnbsEr/GRaohi/uMKxg8RZMXnl1ItAi/IUHWMsjDV7kQ==", 2724 | "dev": true, 2725 | "engines": { 2726 | "node": ">=14.0.0" 2727 | } 2728 | }, 2729 | "node_modules/tinyspy": { 2730 | "version": "3.0.2", 2731 | "resolved": "https://registry.npmjs.org/tinyspy/-/tinyspy-3.0.2.tgz", 2732 | "integrity": "sha512-n1cw8k1k0x4pgA2+9XrOkFydTerNcJ1zWCO5Nn9scWHTD+5tp8dghT2x1uduQePZTZgd3Tupf+x9BxJjeJi77Q==", 2733 | "dev": true, 2734 | "engines": { 2735 | "node": ">=14.0.0" 2736 | } 2737 | }, 2738 | "node_modules/tldts": { 2739 | "version": "6.1.70", 2740 | "resolved": "https://registry.npmjs.org/tldts/-/tldts-6.1.70.tgz", 2741 | "integrity": "sha512-/W1YVgYVJd9ZDjey5NXadNh0mJXkiUMUue9Zebd0vpdo1sU+H4zFFTaJ1RKD4N6KFoHfcXy6l+Vu7bh+bdWCzA==", 2742 | "dev": true, 2743 | "dependencies": { 2744 | "tldts-core": "^6.1.70" 2745 | }, 2746 | "bin": { 2747 | "tldts": "bin/cli.js" 2748 | } 2749 | }, 2750 | "node_modules/tldts-core": { 2751 | "version": "6.1.70", 2752 | "resolved": "https://registry.npmjs.org/tldts-core/-/tldts-core-6.1.70.tgz", 2753 | "integrity": "sha512-RNnIXDB1FD4T9cpQRErEqw6ZpjLlGdMOitdV+0xtbsnwr4YFka1zpc7D4KD+aAn8oSG5JyFrdasZTE04qDE9Yg==", 2754 | "dev": true 2755 | }, 2756 | "node_modules/tough-cookie": { 2757 | "version": "5.0.0", 2758 | "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-5.0.0.tgz", 2759 | "integrity": "sha512-FRKsF7cz96xIIeMZ82ehjC3xW2E+O2+v11udrDYewUbszngYhsGa8z6YUMMzO9QJZzzyd0nGGXnML/TReX6W8Q==", 2760 | "dev": true, 2761 | "dependencies": { 2762 | "tldts": "^6.1.32" 2763 | }, 2764 | "engines": { 2765 | "node": ">=16" 2766 | } 2767 | }, 2768 | "node_modules/tr46": { 2769 | "version": "5.0.0", 2770 | "resolved": "https://registry.npmjs.org/tr46/-/tr46-5.0.0.tgz", 2771 | "integrity": "sha512-tk2G5R2KRwBd+ZN0zaEXpmzdKyOYksXwywulIX95MBODjSzMIuQnQ3m8JxgbhnL1LeVo7lqQKsYa1O3Htl7K5g==", 2772 | "dev": true, 2773 | "dependencies": { 2774 | "punycode": "^2.3.1" 2775 | }, 2776 | "engines": { 2777 | "node": ">=18" 2778 | } 2779 | }, 2780 | "node_modules/tslib": { 2781 | "version": "2.8.1", 2782 | "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", 2783 | "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==" 2784 | }, 2785 | "node_modules/turbo-stream": { 2786 | "version": "2.4.0", 2787 | "resolved": "https://registry.npmjs.org/turbo-stream/-/turbo-stream-2.4.0.tgz", 2788 | "integrity": "sha512-FHncC10WpBd2eOmGwpmQsWLDoK4cqsA/UT/GqNoaKOQnT8uzhtCbg3EoUDMvqpOSAI0S26mr0rkjzbOO6S3v1g==", 2789 | "license": "ISC" 2790 | }, 2791 | "node_modules/unload": { 2792 | "version": "2.4.1", 2793 | "resolved": "https://registry.npmjs.org/unload/-/unload-2.4.1.tgz", 2794 | "integrity": "sha512-IViSAm8Z3sRBYA+9wc0fLQmU9Nrxb16rcDmIiR6Y9LJSZzI7QY5QsDhqPpKOjAn0O9/kfK1TfNEMMAGPTIraPw==", 2795 | "funding": { 2796 | "url": "https://github.com/sponsors/pubkey" 2797 | } 2798 | }, 2799 | "node_modules/update-browserslist-db": { 2800 | "version": "1.1.1", 2801 | "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.1.tgz", 2802 | "integrity": "sha512-R8UzCaa9Az+38REPiJ1tXlImTJXlVfgHZsglwBD/k6nj76ctsH1E3q4doGrukiLQd3sGQYu56r5+lo5r94l29A==", 2803 | "dev": true, 2804 | "funding": [ 2805 | { 2806 | "type": "opencollective", 2807 | "url": "https://opencollective.com/browserslist" 2808 | }, 2809 | { 2810 | "type": "tidelift", 2811 | "url": "https://tidelift.com/funding/github/npm/browserslist" 2812 | }, 2813 | { 2814 | "type": "github", 2815 | "url": "https://github.com/sponsors/ai" 2816 | } 2817 | ], 2818 | "dependencies": { 2819 | "escalade": "^3.2.0", 2820 | "picocolors": "^1.1.0" 2821 | }, 2822 | "bin": { 2823 | "update-browserslist-db": "cli.js" 2824 | }, 2825 | "peerDependencies": { 2826 | "browserslist": ">= 4.21.0" 2827 | } 2828 | }, 2829 | "node_modules/vite": { 2830 | "version": "5.4.11", 2831 | "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.11.tgz", 2832 | "integrity": "sha512-c7jFQRklXua0mTzneGW9QVyxFjUgwcihC4bXEtujIo2ouWCe1Ajt/amn2PCxYnhYfd5k09JX3SB7OYWFKYqj8Q==", 2833 | "dev": true, 2834 | "dependencies": { 2835 | "esbuild": "^0.21.3", 2836 | "postcss": "^8.4.43", 2837 | "rollup": "^4.20.0" 2838 | }, 2839 | "bin": { 2840 | "vite": "bin/vite.js" 2841 | }, 2842 | "engines": { 2843 | "node": "^18.0.0 || >=20.0.0" 2844 | }, 2845 | "funding": { 2846 | "url": "https://github.com/vitejs/vite?sponsor=1" 2847 | }, 2848 | "optionalDependencies": { 2849 | "fsevents": "~2.3.3" 2850 | }, 2851 | "peerDependencies": { 2852 | "@types/node": "^18.0.0 || >=20.0.0", 2853 | "less": "*", 2854 | "lightningcss": "^1.21.0", 2855 | "sass": "*", 2856 | "sass-embedded": "*", 2857 | "stylus": "*", 2858 | "sugarss": "*", 2859 | "terser": "^5.4.0" 2860 | }, 2861 | "peerDependenciesMeta": { 2862 | "@types/node": { 2863 | "optional": true 2864 | }, 2865 | "less": { 2866 | "optional": true 2867 | }, 2868 | "lightningcss": { 2869 | "optional": true 2870 | }, 2871 | "sass": { 2872 | "optional": true 2873 | }, 2874 | "sass-embedded": { 2875 | "optional": true 2876 | }, 2877 | "stylus": { 2878 | "optional": true 2879 | }, 2880 | "sugarss": { 2881 | "optional": true 2882 | }, 2883 | "terser": { 2884 | "optional": true 2885 | } 2886 | } 2887 | }, 2888 | "node_modules/vite-node": { 2889 | "version": "2.1.8", 2890 | "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-2.1.8.tgz", 2891 | "integrity": "sha512-uPAwSr57kYjAUux+8E2j0q0Fxpn8M9VoyfGiRI8Kfktz9NcYMCenwY5RnZxnF1WTu3TGiYipirIzacLL3VVGFg==", 2892 | "dev": true, 2893 | "dependencies": { 2894 | "cac": "^6.7.14", 2895 | "debug": "^4.3.7", 2896 | "es-module-lexer": "^1.5.4", 2897 | "pathe": "^1.1.2", 2898 | "vite": "^5.0.0" 2899 | }, 2900 | "bin": { 2901 | "vite-node": "vite-node.mjs" 2902 | }, 2903 | "engines": { 2904 | "node": "^18.0.0 || >=20.0.0" 2905 | }, 2906 | "funding": { 2907 | "url": "https://opencollective.com/vitest" 2908 | } 2909 | }, 2910 | "node_modules/vitest": { 2911 | "version": "2.1.8", 2912 | "resolved": "https://registry.npmjs.org/vitest/-/vitest-2.1.8.tgz", 2913 | "integrity": "sha512-1vBKTZskHw/aosXqQUlVWWlGUxSJR8YtiyZDJAFeW2kPAeX6S3Sool0mjspO+kXLuxVWlEDDowBAeqeAQefqLQ==", 2914 | "dev": true, 2915 | "dependencies": { 2916 | "@vitest/expect": "2.1.8", 2917 | "@vitest/mocker": "2.1.8", 2918 | "@vitest/pretty-format": "^2.1.8", 2919 | "@vitest/runner": "2.1.8", 2920 | "@vitest/snapshot": "2.1.8", 2921 | "@vitest/spy": "2.1.8", 2922 | "@vitest/utils": "2.1.8", 2923 | "chai": "^5.1.2", 2924 | "debug": "^4.3.7", 2925 | "expect-type": "^1.1.0", 2926 | "magic-string": "^0.30.12", 2927 | "pathe": "^1.1.2", 2928 | "std-env": "^3.8.0", 2929 | "tinybench": "^2.9.0", 2930 | "tinyexec": "^0.3.1", 2931 | "tinypool": "^1.0.1", 2932 | "tinyrainbow": "^1.2.0", 2933 | "vite": "^5.0.0", 2934 | "vite-node": "2.1.8", 2935 | "why-is-node-running": "^2.3.0" 2936 | }, 2937 | "bin": { 2938 | "vitest": "vitest.mjs" 2939 | }, 2940 | "engines": { 2941 | "node": "^18.0.0 || >=20.0.0" 2942 | }, 2943 | "funding": { 2944 | "url": "https://opencollective.com/vitest" 2945 | }, 2946 | "peerDependencies": { 2947 | "@edge-runtime/vm": "*", 2948 | "@types/node": "^18.0.0 || >=20.0.0", 2949 | "@vitest/browser": "2.1.8", 2950 | "@vitest/ui": "2.1.8", 2951 | "happy-dom": "*", 2952 | "jsdom": "*" 2953 | }, 2954 | "peerDependenciesMeta": { 2955 | "@edge-runtime/vm": { 2956 | "optional": true 2957 | }, 2958 | "@types/node": { 2959 | "optional": true 2960 | }, 2961 | "@vitest/browser": { 2962 | "optional": true 2963 | }, 2964 | "@vitest/ui": { 2965 | "optional": true 2966 | }, 2967 | "happy-dom": { 2968 | "optional": true 2969 | }, 2970 | "jsdom": { 2971 | "optional": true 2972 | } 2973 | } 2974 | }, 2975 | "node_modules/w3c-xmlserializer": { 2976 | "version": "5.0.0", 2977 | "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-5.0.0.tgz", 2978 | "integrity": "sha512-o8qghlI8NZHU1lLPrpi2+Uq7abh4GGPpYANlalzWxyWteJOCsr/P+oPBA49TOLu5FTZO4d3F9MnWJfiMo4BkmA==", 2979 | "dev": true, 2980 | "dependencies": { 2981 | "xml-name-validator": "^5.0.0" 2982 | }, 2983 | "engines": { 2984 | "node": ">=18" 2985 | } 2986 | }, 2987 | "node_modules/warning": { 2988 | "version": "4.0.3", 2989 | "resolved": "https://registry.npmjs.org/warning/-/warning-4.0.3.tgz", 2990 | "integrity": "sha512-rpJyN222KWIvHJ/F53XSZv0Zl/accqHR8et1kpaMTD/fLCRxtV8iX8czMzY7sVZupTI3zcUTg8eycS2kNF9l6w==", 2991 | "dependencies": { 2992 | "loose-envify": "^1.0.0" 2993 | } 2994 | }, 2995 | "node_modules/webcrypto-core": { 2996 | "version": "1.8.1", 2997 | "resolved": "https://registry.npmjs.org/webcrypto-core/-/webcrypto-core-1.8.1.tgz", 2998 | "integrity": "sha512-P+x1MvlNCXlKbLSOY4cYrdreqPG5hbzkmawbcXLKN/mf6DZW0SdNNkZ+sjwsqVkI4A4Ko2sPZmkZtCKY58w83A==", 2999 | "dependencies": { 3000 | "@peculiar/asn1-schema": "^2.3.13", 3001 | "@peculiar/json-schema": "^1.1.12", 3002 | "asn1js": "^3.0.5", 3003 | "pvtsutils": "^1.3.5", 3004 | "tslib": "^2.7.0" 3005 | } 3006 | }, 3007 | "node_modules/webcrypto-shim": { 3008 | "version": "0.1.7", 3009 | "resolved": "https://registry.npmjs.org/webcrypto-shim/-/webcrypto-shim-0.1.7.tgz", 3010 | "integrity": "sha512-JAvAQR5mRNRxZW2jKigWMjCMkjSdmP5cColRP1U/pTg69VgHXEi1orv5vVpJ55Zc5MIaPc1aaurzd9pjv2bveg==" 3011 | }, 3012 | "node_modules/webidl-conversions": { 3013 | "version": "7.0.0", 3014 | "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", 3015 | "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==", 3016 | "dev": true, 3017 | "engines": { 3018 | "node": ">=12" 3019 | } 3020 | }, 3021 | "node_modules/whatwg-encoding": { 3022 | "version": "3.1.1", 3023 | "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-3.1.1.tgz", 3024 | "integrity": "sha512-6qN4hJdMwfYBtE3YBTTHhoeuUrDBPZmbQaxWAqSALV/MeEnR5z1xd8UKud2RAkFoPkmB+hli1TZSnyi84xz1vQ==", 3025 | "dev": true, 3026 | "dependencies": { 3027 | "iconv-lite": "0.6.3" 3028 | }, 3029 | "engines": { 3030 | "node": ">=18" 3031 | } 3032 | }, 3033 | "node_modules/whatwg-mimetype": { 3034 | "version": "4.0.0", 3035 | "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-4.0.0.tgz", 3036 | "integrity": "sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg==", 3037 | "dev": true, 3038 | "engines": { 3039 | "node": ">=18" 3040 | } 3041 | }, 3042 | "node_modules/whatwg-url": { 3043 | "version": "14.1.0", 3044 | "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-14.1.0.tgz", 3045 | "integrity": "sha512-jlf/foYIKywAt3x/XWKZ/3rz8OSJPiWktjmk891alJUEjiVxKX9LEO92qH3hv4aJ0mN3MWPvGMCy8jQi95xK4w==", 3046 | "dev": true, 3047 | "dependencies": { 3048 | "tr46": "^5.0.0", 3049 | "webidl-conversions": "^7.0.0" 3050 | }, 3051 | "engines": { 3052 | "node": ">=18" 3053 | } 3054 | }, 3055 | "node_modules/why-is-node-running": { 3056 | "version": "2.3.0", 3057 | "resolved": "https://registry.npmjs.org/why-is-node-running/-/why-is-node-running-2.3.0.tgz", 3058 | "integrity": "sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==", 3059 | "dev": true, 3060 | "dependencies": { 3061 | "siginfo": "^2.0.0", 3062 | "stackback": "0.0.2" 3063 | }, 3064 | "bin": { 3065 | "why-is-node-running": "cli.js" 3066 | }, 3067 | "engines": { 3068 | "node": ">=8" 3069 | } 3070 | }, 3071 | "node_modules/ws": { 3072 | "version": "8.18.0", 3073 | "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.0.tgz", 3074 | "integrity": "sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==", 3075 | "dev": true, 3076 | "engines": { 3077 | "node": ">=10.0.0" 3078 | }, 3079 | "peerDependencies": { 3080 | "bufferutil": "^4.0.1", 3081 | "utf-8-validate": ">=5.0.2" 3082 | }, 3083 | "peerDependenciesMeta": { 3084 | "bufferutil": { 3085 | "optional": true 3086 | }, 3087 | "utf-8-validate": { 3088 | "optional": true 3089 | } 3090 | } 3091 | }, 3092 | "node_modules/xhr2": { 3093 | "version": "0.1.3", 3094 | "resolved": "https://registry.npmjs.org/xhr2/-/xhr2-0.1.3.tgz", 3095 | "integrity": "sha512-6RmGK22QwC7yXB1CRwyLWuS2opPcKOlAu0ViAnyZjDlzrEmCKL4kLHkfvB8oMRWeztMsNoDGAjsMZY15w/4tTw==", 3096 | "engines": { 3097 | "node": ">= 0.6" 3098 | } 3099 | }, 3100 | "node_modules/xml-name-validator": { 3101 | "version": "5.0.0", 3102 | "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-5.0.0.tgz", 3103 | "integrity": "sha512-EvGK8EJ3DhaHfbRlETOWAS5pO9MZITeauHKJyb8wyajUfQUenkIg2MvLDTZ4T/TgIcm3HU0TFBgWWboAZ30UHg==", 3104 | "dev": true, 3105 | "engines": { 3106 | "node": ">=18" 3107 | } 3108 | }, 3109 | "node_modules/xmlchars": { 3110 | "version": "2.2.0", 3111 | "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", 3112 | "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==", 3113 | "dev": true 3114 | }, 3115 | "node_modules/yallist": { 3116 | "version": "3.1.1", 3117 | "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", 3118 | "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", 3119 | "dev": true 3120 | } 3121 | } 3122 | } 3123 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "okta-react-sample", 3 | "version": "0.0.0", 4 | "private": true, 5 | "scripts": { 6 | "start": "vite", 7 | "build": "vite build", 8 | "test": "vitest --watch=false" 9 | }, 10 | "dependencies": { 11 | "@okta/okta-auth-js": "7.11.1", 12 | "@okta/okta-react": "^6.9.0", 13 | "react": "^18.3.1", 14 | "react-dom": "^18.3.1", 15 | "react-router-dom": "^7.4.1", 16 | "semantic-ui-css": "^2.5.0", 17 | "semantic-ui-react": "^2.1.5" 18 | }, 19 | "devDependencies": { 20 | "@testing-library/react": "^16.2.0", 21 | "@types/react": "^18.3.3", 22 | "@types/react-dom": "^18.3.0", 23 | "@vitejs/plugin-react": "^4.3.3", 24 | "dotenv": "^16.4.5", 25 | "jsdom": "^25.0.1", 26 | "vite": "^5.4.11", 27 | "vitest": "^2.1.8" 28 | }, 29 | "browserslist": { 30 | "production": [ 31 | ">0.2%", 32 | "not dead", 33 | "not op_mini all" 34 | ], 35 | "development": [ 36 | "last 1 chrome version", 37 | "last 1 firefox version", 38 | "last 1 safari version" 39 | ] 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/okta-samples/okta-react-sample/04e9ba64da9f104261521e4f24a8af76ca115b54/public/favicon.ico -------------------------------------------------------------------------------- /public/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 11 | 12 | 13 | 22 | React App 23 | 24 | 25 | 28 |
29 | 39 | 40 | 41 | -------------------------------------------------------------------------------- /public/manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "short_name": "React App", 3 | "name": "Create React App Sample", 4 | "icons": [ 5 | { 6 | "src": "favicon.ico", 7 | "sizes": "64x64 32x32 24x24 16x16", 8 | "type": "image/x-icon" 9 | } 10 | ], 11 | "start_url": "./index.html", 12 | "display": "standalone", 13 | "theme_color": "#000000", 14 | "background_color": "#ffffff" 15 | } 16 | -------------------------------------------------------------------------------- /public/react.svg: -------------------------------------------------------------------------------- 1 | 2 | React Logo 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /src/App.css: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2021-Present, Okta, Inc. and/or its affiliates. All rights reserved. 3 | * The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the "License.") 4 | * 5 | * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0. 6 | * Unless required by applicable law or agreed to in writing, software 7 | * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 8 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 9 | * 10 | * See the License for the specific language governing permissions and limitations under the License. 11 | */ 12 | 13 | .App { 14 | text-align: center; 15 | } 16 | 17 | .App-logo { 18 | animation: App-logo-spin infinite 20s linear; 19 | height: 80px; 20 | } 21 | 22 | .App-header { 23 | background-color: #222; 24 | height: 150px; 25 | padding: 20px; 26 | color: white; 27 | } 28 | 29 | .App-title { 30 | font-size: 1.5em; 31 | } 32 | 33 | .App-intro { 34 | font-size: large; 35 | } 36 | 37 | @keyframes App-logo-spin { 38 | from { transform: rotate(0deg); } 39 | to { transform: rotate(360deg); } 40 | } 41 | -------------------------------------------------------------------------------- /src/App.jsx: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2021-Present, Okta, Inc. and/or its affiliates. All rights reserved. 3 | * The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the "License.") 4 | * 5 | * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0. 6 | * Unless required by applicable law or agreed to in writing, software 7 | * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 8 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 9 | * 10 | * See the License for the specific language governing permissions and limitations under the License. 11 | */ 12 | 13 | import React from 'react'; 14 | 15 | import { useNavigate } from 'react-router-dom'; 16 | import { OktaAuth, toRelativeUrl } from '@okta/okta-auth-js'; 17 | import { Security } from '@okta/okta-react'; 18 | import { Container } from 'semantic-ui-react'; 19 | import config from './config'; 20 | import Navbar from './Navbar'; 21 | import Routes from './components/Routes'; 22 | 23 | const oktaAuth = new OktaAuth(config.oidc); 24 | 25 | const App = () => { 26 | const navigate = useNavigate(); 27 | const restoreOriginalUri = (_oktaAuth, originalUri) => { 28 | navigate(toRelativeUrl(originalUri || '/', window.location.origin)); 29 | }; 30 | 31 | return ( 32 | 33 | 34 |
35 | 36 |
37 |
38 | 39 |
40 |
41 |
42 | ); 43 | }; 44 | export default App; 45 | -------------------------------------------------------------------------------- /src/Navbar.jsx: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2021-Present, Okta, Inc. and/or its affiliates. All rights reserved. 3 | * The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the "License.") 4 | * 5 | * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0. 6 | * Unless required by applicable law or agreed to in writing, software 7 | * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 8 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 9 | * 10 | * See the License for the specific language governing permissions and limitations under the License. 11 | */ 12 | 13 | import { useOktaAuth } from '@okta/okta-react'; 14 | import React from 'react'; 15 | import { Link } from 'react-router-dom'; 16 | import { Container, Icon, Image, Menu } from 'semantic-ui-react'; 17 | 18 | const Navbar = () => { 19 | const { authState, oktaAuth } = useOktaAuth(); 20 | 21 | const login = async () => oktaAuth.signInWithRedirect(); 22 | const logout = async () => oktaAuth.signOut(); 23 | 24 | if (!authState) { 25 | return null; 26 | } 27 | 28 | return ( 29 |
30 | 31 | 32 | 33 | 34 |   35 | Okta-React Sample Project 36 | 37 | {authState.isAuthenticated && ( 38 | 39 | 40 | Messages 41 | 42 | )} 43 | {authState.isAuthenticated && ( 44 | 45 | Profile 46 | 47 | )} 48 | {authState.isAuthenticated && ( 49 | Logout 50 | )} 51 | {!authState && !authState.isAuthenticated && ( 52 | Login 53 | )} 54 | 55 | 56 |
57 | ); 58 | }; 59 | export default Navbar; 60 | -------------------------------------------------------------------------------- /src/components/Loading.jsx: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2021-Present, Okta, Inc. and/or its affiliates. All rights reserved. 3 | * The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the "License.") 4 | * 5 | * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0. 6 | * Unless required by applicable law or agreed to in writing, software 7 | * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 8 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 9 | * 10 | * See the License for the specific language governing permissions and limitations under the License. 11 | */ 12 | 13 | import React from 'react'; 14 | 15 | const Loading = () => { 16 | return ( 17 |

Loading...

18 | ); 19 | }; 20 | 21 | export default Loading; 22 | -------------------------------------------------------------------------------- /src/components/Routes.jsx: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2021-Present, Okta, Inc. and/or its affiliates. All rights reserved. 3 | * The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the "License.") 4 | * 5 | * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0. 6 | * Unless required by applicable law or agreed to in writing, software 7 | * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 8 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 9 | * 10 | * See the License for the specific language governing permissions and limitations under the License. 11 | */ 12 | 13 | import React from 'react'; 14 | import { Routes, Route } from 'react-router-dom'; 15 | import { LoginCallback } from '@okta/okta-react'; 16 | import { RequiredAuth } from './SecureRoute'; 17 | import Home from '../pages/Home'; 18 | import Loading from './Loading'; 19 | import Messages from '../pages/Messages'; 20 | import Profile from '../pages/Profile'; 21 | 22 | const AppRoutes = () => { 23 | return ( 24 | 25 | }/> 26 | }/>}/> 27 | }> 28 | }/> 29 | 30 | }> 31 | }/> 32 | 33 | 34 | ); 35 | }; 36 | 37 | export default AppRoutes; 38 | -------------------------------------------------------------------------------- /src/components/SecureRoute.jsx: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2021-Present, Okta, Inc. and/or its affiliates. All rights reserved. 3 | * The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the "License.") 4 | * 5 | * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0. 6 | * Unless required by applicable law or agreed to in writing, software 7 | * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 8 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 9 | * 10 | * See the License for the specific language governing permissions and limitations under the License. 11 | */ 12 | 13 | import React, { useEffect } from 'react'; 14 | import { useOktaAuth } from '@okta/okta-react'; 15 | import { toRelativeUrl } from '@okta/okta-auth-js'; 16 | import { Outlet } from 'react-router-dom'; 17 | import Loading from './Loading'; 18 | 19 | export const RequiredAuth = () => { 20 | const { oktaAuth, authState } = useOktaAuth(); 21 | 22 | useEffect(() => { 23 | if (!authState) { 24 | return; 25 | } 26 | 27 | if (!authState?.isAuthenticated) { 28 | const originalUri = toRelativeUrl(window.location.href, window.location.origin); 29 | oktaAuth.setOriginalUri(originalUri); 30 | oktaAuth.signInWithRedirect(); 31 | } 32 | }, [oktaAuth, !!authState, authState?.isAuthenticated]); 33 | 34 | if (!authState || !authState?.isAuthenticated) { 35 | return (); 36 | } 37 | 38 | return (); 39 | } 40 | -------------------------------------------------------------------------------- /src/config.js: -------------------------------------------------------------------------------- 1 | 2 | // eslint-disable-next-line 3 | export default { 4 | oidc: { 5 | clientId: CLIENT_ID, 6 | issuer: ISSUER, 7 | redirectUri: window.location.origin + '/login/callback', 8 | scopes: ['openid', 'profile', 'email', 'offline_access'], 9 | }, 10 | resourceServer: { 11 | messagesUrl: 'http://localhost:8000/api/messages', 12 | }, 13 | }; 14 | -------------------------------------------------------------------------------- /src/index.css: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2021-Present, Okta, Inc. and/or its affiliates. All rights reserved. 3 | * The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the "License.") 4 | * 5 | * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0. 6 | * Unless required by applicable law or agreed to in writing, software 7 | * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 8 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 9 | * 10 | * See the License for the specific language governing permissions and limitations under the License. 11 | */ 12 | 13 | body { 14 | margin: 0; 15 | padding: 0; 16 | font-family: sans-serif; 17 | } 18 | -------------------------------------------------------------------------------- /src/index.jsx: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2021-Present, Okta, Inc. and/or its affiliates. All rights reserved. 3 | * The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the "License.") 4 | * 5 | * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0. 6 | * Unless required by applicable law or agreed to in writing, software 7 | * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 8 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 9 | * 10 | * See the License for the specific language governing permissions and limitations under the License. 11 | */ 12 | 13 | import React from 'react'; 14 | 15 | import { createRoot } from 'react-dom/client'; 16 | import { BrowserRouter } from 'react-router-dom'; 17 | import 'semantic-ui-css/semantic.min.css'; 18 | import App from './App'; 19 | import './index.css'; 20 | 21 | const container = document.getElementById('root'); 22 | const root = createRoot(container); 23 | root.render( 24 | 25 | 26 | ); 27 | -------------------------------------------------------------------------------- /src/logo.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /src/pages/Home.jsx: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2021-Present, Okta, Inc. and/or its affiliates. All rights reserved. 3 | * The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the "License.") 4 | * 5 | * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0. 6 | * Unless required by applicable law or agreed to in writing, software 7 | * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 8 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 9 | * 10 | * See the License for the specific language governing permissions and limitations under the License. 11 | */ 12 | 13 | import { useOktaAuth } from '@okta/okta-react'; 14 | import React, { useState, useEffect } from 'react'; 15 | import { Button, Header } from 'semantic-ui-react'; 16 | 17 | const Home = () => { 18 | const { authState, oktaAuth } = useOktaAuth(); 19 | const [userInfo, setUserInfo] = useState(null); 20 | 21 | useEffect(() => { 22 | if (!authState || !authState.isAuthenticated) { 23 | // When user isn't authenticated, forget any user info 24 | setUserInfo(null); 25 | } else { 26 | oktaAuth.getUser().then((info) => { 27 | setUserInfo(info); 28 | }); 29 | } 30 | }, [authState, oktaAuth]); // Update if authState changes 31 | 32 | const login = async () => { 33 | await oktaAuth.signInWithRedirect(); 34 | }; 35 | 36 | const resourceServerExamples = [ 37 | { 38 | label: 'Node/Express Resource Server Example', 39 | url: 'https://github.com/okta/samples-nodejs-express-4/tree/master/resource-server', 40 | }, 41 | { 42 | label: 'Java/Spring MVC Resource Server Example', 43 | url: 'https://github.com/okta/samples-java-spring/tree/master/resource-server', 44 | }, 45 | { 46 | label: 'ASP.NET Core Resource Server Example', 47 | url: 'https://github.com/okta/samples-aspnetcore/tree/master/samples-aspnetcore-3x/resource-server', 48 | }, 49 | ]; 50 | 51 | if (!authState) { 52 | return ( 53 |
Loading...
54 | ); 55 | } 56 | 57 | return ( 58 |
59 |
60 |
PKCE Flow w/ Okta Hosted Login Page
61 | 62 | { authState.isAuthenticated && !userInfo 63 | &&
Loading user information...
} 64 | 65 | {authState.isAuthenticated && userInfo 66 | && ( 67 |
68 |

69 | Welcome back,  70 | {userInfo.name} 71 | ! 72 |

73 |

74 | You have successfully authenticated against your Okta org, and have been redirected back to this application. You now have an ID token and access token in local storage. 75 | Visit the 76 | {' '} 77 | My Profile 78 | {' '} 79 | page to take a look inside the ID token. 80 |

81 |

Next Steps

82 |

Currently this application is a stand-alone front end application. At this point you can use the access token to authenticate yourself against resource servers that you control.

83 |

This sample is designed to work with one of our resource server examples. To see access token authentication in action, please download one of these resource server examples:

84 | 87 |

88 | Once you have downloaded and started the example resource server, you can visit the 89 | {' '} 90 | My Messages 91 | {' '} 92 | page to see the authentication process in action. 93 |

94 |
95 | )} 96 | 97 | {!authState.isAuthenticated 98 | && ( 99 |
100 |

If you‘re viewing this page then you have successfully started this React application.

101 |

102 | This example shows you how to use the 103 | Okta React Library 104 | to add the 105 | PKCE Flow 106 | to your application. 107 |

108 |

109 | When you click the login button below, you will be redirected to the login page on your Okta org. 110 | After you authenticate, you will be returned to this application with an ID token and access token. These tokens will be stored in local storage and can be retrieved at a later time. 111 |

112 | 113 |
114 | )} 115 | 116 |
117 |
118 | ); 119 | }; 120 | export default Home; 121 | -------------------------------------------------------------------------------- /src/pages/Messages.jsx: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2021-Present, Okta, Inc. and/or its affiliates. All rights reserved. 3 | * The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the "License.") 4 | * 5 | * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0. 6 | * Unless required by applicable law or agreed to in writing, software 7 | * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 8 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 9 | * 10 | * See the License for the specific language governing permissions and limitations under the License. 11 | */ 12 | 13 | import { useOktaAuth } from '@okta/okta-react'; 14 | import React, { useState, useEffect } from 'react'; 15 | import { Header, Icon, Message, Table } from 'semantic-ui-react'; 16 | 17 | import config from '../config'; 18 | 19 | const Messages = () => { 20 | const { authState, oktaAuth } = useOktaAuth(); 21 | const [messages, setMessages] = useState(null); 22 | const [messageFetchFailed, setMessageFetchFailed] = useState(false); 23 | 24 | // fetch messages 25 | useEffect(() => { 26 | const fetchMessages = async () => { 27 | if (authState && authState.isAuthenticated) { 28 | try { 29 | const accessToken = oktaAuth.getAccessToken(); 30 | const response = await fetch(config.resourceServer.messagesUrl, { 31 | headers: { 32 | Authorization: `Bearer ${accessToken}`, 33 | }, 34 | }); 35 | 36 | const data = await response.json(); 37 | const formattedMessages = data.messages.map((message, index) => { 38 | const date = new Date(message.date); 39 | return { 40 | date: `${date.toLocaleDateString()} ${date.toLocaleTimeString()}`, 41 | text: message.text, 42 | id: `message-${index}`, 43 | }; 44 | }); 45 | 46 | setMessages(formattedMessages); 47 | setMessageFetchFailed(false); 48 | } catch (err) { 49 | setMessageFetchFailed(true); 50 | /* eslint-disable no-console */ 51 | console.error(err); 52 | } 53 | } 54 | } 55 | fetchMessages(); 56 | }, [authState, oktaAuth]); 57 | 58 | const possibleErrors = [ 59 | 'You\'ve downloaded one of our resource server examples, and it\'s running on port 8000.', 60 | 'Your resource server example is using the same Okta authorization server (issuer) that you have configured this React application to use.', 61 | ]; 62 | 63 | return ( 64 |
65 |
66 | 67 | My Messages 68 |
69 | {messageFetchFailed && } 70 | {!messages && !messageFetchFailed &&

Fetching Messages..

} 71 | {messages 72 | && ( 73 |
74 |

75 | This component makes a GET request to the resource server example, which must be running at 76 | localhost:8000/api/messages 77 |

78 |

79 | It attaches your current access token in the 80 | {' '} 81 | Authorization 82 | {' '} 83 | header on the request, 84 | and the resource server will attempt to authenticate this access token. 85 | If the token is valid the server will return a list of messages. If the token is not valid 86 | or the resource server is incorrectly configured, you will see a 401 87 | {' '} 88 | Unauthorized response 89 | . 90 |

91 |

92 | This route is protected with the 93 | {' '} 94 | <SecureRoute> 95 | {' '} 96 | component, which will 97 | ensure that this page cannot be accessed until you have authenticated and have an access token in local storage. 98 |

99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | {messages.map((message) => ( 108 | 109 | 110 | 111 | 112 | ))} 113 | 114 |
DateMessage
{message.date}{message.text}
115 |
116 | )} 117 |
118 | ); 119 | }; 120 | 121 | export default Messages; 122 | -------------------------------------------------------------------------------- /src/pages/Profile.jsx: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2021-Present, Okta, Inc. and/or its affiliates. All rights reserved. 3 | * The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the "License.") 4 | * 5 | * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0. 6 | * Unless required by applicable law or agreed to in writing, software 7 | * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 8 | * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 9 | * 10 | * See the License for the specific language governing permissions and limitations under the License. 11 | */ 12 | 13 | import React, { useState, useEffect } from 'react'; 14 | import { useOktaAuth } from '@okta/okta-react'; 15 | import { Header, Icon, Table } from 'semantic-ui-react'; 16 | 17 | const Profile = () => { 18 | const { authState, oktaAuth } = useOktaAuth(); 19 | const [userInfo, setUserInfo] = useState(null); 20 | 21 | useEffect(() => { 22 | if (!authState || !authState.isAuthenticated) { 23 | // When user isn't authenticated, forget any user info 24 | setUserInfo(null); 25 | } else { 26 | setUserInfo(authState.idToken.claims); 27 | // get user information from `/userinfo` endpoint 28 | /*oktaAuth.getUser().then((info) => { 29 | setUserInfo(info); 30 | });*/ 31 | } 32 | }, [authState, oktaAuth]); // Update if authState changes 33 | 34 | if (!userInfo) { 35 | return ( 36 |
37 |

Fetching user profile...

38 |
39 | ); 40 | } 41 | 42 | return ( 43 |
44 |
45 |
46 | 47 | {' '} 48 | My User Profile (ID Token Claims) 49 | {' '} 50 |
51 |

52 | Below is the information from your ID token which was obtained during the   53 | PKCE Flow 54 | {' '} 55 | and is now stored in local storage. 56 |

57 |

58 | This route is protected with the 59 | {' '} 60 | <SecureRoute> 61 | {' '} 62 | component, which will ensure that this page cannot be accessed until you have authenticated. 63 |

64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | {Object.entries(userInfo).map((claimEntry) => { 73 | const claimName = claimEntry[0]; 74 | const claimValue = claimEntry[1]; 75 | const claimId = `claim-${claimName}`; 76 | return ( 77 | 78 | 79 | 80 | 81 | ); 82 | })} 83 | 84 |
ClaimValue
{claimName}{claimValue.toString()}
85 |
86 |
87 | ); 88 | }; 89 | 90 | export default Profile; 91 | -------------------------------------------------------------------------------- /src/pages/__tests__/Home.spec.jsx: -------------------------------------------------------------------------------- 1 | import { describe, it, expect, afterEach, vi } from 'vitest' 2 | import { cleanup, render, screen } from '@testing-library/react' 3 | 4 | import Home from '../Home.jsx' 5 | 6 | describe('Home', () => { 7 | vi.mock('@okta/okta-react', () => ({ 8 | useOktaAuth: () => ({authState: {isAuthenticated: false}, oktaAuth: {}}) 9 | })) 10 | 11 | afterEach(() => { 12 | cleanup(); 13 | }) 14 | 15 | it('renders default text', () => { 16 | const msg = 'PKCE Flow w/ Okta Hosted Login Page' 17 | render(); 18 | const el = screen.getAllByText(msg); 19 | expect(el).toBeTruthy() 20 | }) 21 | }) 22 | -------------------------------------------------------------------------------- /vite.config.js: -------------------------------------------------------------------------------- 1 | import { defineConfig, loadEnv } from 'vite' 2 | import react from '@vitejs/plugin-react' 3 | import path from 'path'; 4 | import dotenv from 'dotenv' 5 | 6 | 7 | // https://vitejs.dev/config/ 8 | export default defineConfig(({ _, mode }) => { 9 | dotenv.config({path: '.okta.env'}) 10 | 11 | const env = loadEnv(mode, process.cwd(), '') 12 | 13 | if (!env.ISSUER || !env.CLIENT_ID) { 14 | throw new Error(`Set ISSUER and CLIENT_ID in .okta.env`) 15 | } 16 | 17 | return { 18 | plugins: [react()], 19 | resolve: { 20 | alias: { 21 | 'react-router-dom': path.resolve(__dirname, 'node_modules/react-router-dom') 22 | } 23 | }, 24 | define: { 25 | 'ISSUER': JSON.stringify(env.ISSUER), 26 | 'CLIENT_ID': JSON.stringify(env.CLIENT_ID) 27 | }, 28 | test: { 29 | environment: 'jsdom', 30 | globals: true 31 | } 32 | } 33 | 34 | }) 35 | --------------------------------------------------------------------------------