diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index de2c7316adaaf..26070b7c2b510 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -563,18 +563,6 @@ repos: language_version: python3 additional_dependencies: ['flynt'] files: \.py$ - - id: ui-lint - name: Lint React UI - language: node - entry: bash - args: ["-c", "cd airflow/ui && yarn install && yarn lint"] - files: ^airflow/ui/.*\.(ts|tsx)$ - - id: ui-test - name: Test React UI - language: node - entry: bash - args: ["-c", "cd airflow/ui && yarn install && yarn test"] - files: ^airflow/ui/.*\.(ts|tsx)$ ## ADD MOST PRE-COMMITS ABOVE THAT LINE # The below pre-commits are those requiring CI image to be built - id: build diff --git a/BREEZE.rst b/BREEZE.rst index 315c85b8b79ba..55cc46a26e222 100644 --- a/BREEZE.rst +++ b/BREEZE.rst @@ -2298,8 +2298,8 @@ This is the current syntax for `./breeze <./breeze>`_: pre-commit-hook-names provide-create-sessions providers-init-file provider-yamls pydevd pydocstyle pylint pylint-tests python-no-log-warn pyupgrade restrict-start_date rst-backticks setup-order setup-extra-packages shellcheck - sort-in-the-wild sort-spelling-wordlist stylelint trailing-whitespace ui-lint - ui-test update-breeze-file update-extras update-local-yml-file update-setup-cfg-file + sort-in-the-wild sort-spelling-wordlist stylelint trailing-whitespace + update-breeze-file update-extras update-local-yml-file update-setup-cfg-file version-sync yamllint You can pass extra arguments including options to the pre-commit framework as diff --git a/STATIC_CODE_CHECKS.rst b/STATIC_CODE_CHECKS.rst index 5b14a8597a40d..69bc52a05e74c 100644 --- a/STATIC_CODE_CHECKS.rst +++ b/STATIC_CODE_CHECKS.rst @@ -170,10 +170,6 @@ require Breeze Docker images to be installed locally: ----------------------------------- ---------------------------------------------------------------- ------------ ``trailing-whitespace`` Removes trailing whitespace at end of line ----------------------------------- ---------------------------------------------------------------- ------------ -``ui-lint`` Lint the React UI ------------------------------------ ---------------------------------------------------------------- ------------ -``ui-test`` Test the React UI ------------------------------------ ---------------------------------------------------------------- ------------ ``update-breeze-file`` Update output of breeze command in BREEZE.rst ----------------------------------- ---------------------------------------------------------------- ------------ ``update-extras`` Updates extras in the documentation diff --git a/airflow/providers/microsoft/azure/log/wasb_task_handler.py b/airflow/providers/microsoft/azure/log/wasb_task_handler.py index ade1da238388c..2416322826dc6 100644 --- a/airflow/providers/microsoft/azure/log/wasb_task_handler.py +++ b/airflow/providers/microsoft/azure/log/wasb_task_handler.py @@ -51,6 +51,7 @@ def __init__( self.remote_base = wasb_log_folder self.log_relative_path = '' self._hook = None + self.encoding = "UTF-8" self.closed = False self.upload_on_close = True self.delete_local_copy = delete_local_copy @@ -159,7 +160,7 @@ def wasb_read(self, remote_log_location: str, return_error: bool = False): :type return_error: bool """ try: - return self.hook.read_file(self.wasb_container, remote_log_location) + return self.hook.read_file(self.wasb_container, remote_log_location).decode(self.encoding) except AzureHttpError as e: msg = f'Could not read logs from {remote_log_location}' self.log.exception("Message: '%s', exception '%s'", msg, e) @@ -181,11 +182,10 @@ def wasb_write(self, log: str, remote_log_location: str, append: bool = True) -> the new log is appended to any existing logs. :type append: bool """ - if append and self.wasb_log_exists(remote_log_location): - old_log = self.wasb_read(remote_log_location) - log = '\n'.join([old_log, log]) if old_log else log - try: + if append and self.wasb_log_exists(remote_log_location): + old_log = self.wasb_read(remote_log_location) + log = '\n'.join([old_log, log]) if old_log else log self.hook.load_string( log, self.wasb_container, diff --git a/airflow/ui/.env.example b/airflow/ui/.env.example new file mode 100644 index 0000000000000..2e5267dc4b219 --- /dev/null +++ b/airflow/ui/.env.example @@ -0,0 +1 @@ +API_URL = 'http://127.0.0.1:28080/api/v1/' diff --git a/airflow/ui/.neutrinorc.js b/airflow/ui/.neutrinorc.js index ad38d0f3294b4..f6a699e33a861 100644 --- a/airflow/ui/.neutrinorc.js +++ b/airflow/ui/.neutrinorc.js @@ -20,6 +20,7 @@ /* Config for running and building the app */ +require('dotenv').config(); const typescript = require('neutrinojs-typescript'); const typescriptLint = require('neutrinojs-typescript-eslint'); const react = require('@neutrinojs/react'); @@ -37,6 +38,10 @@ module.exports = { // Aliases for internal modules neutrino.config.resolve.alias.set('root', resolve(__dirname)); neutrino.config.resolve.alias.set('src', resolve(__dirname, 'src')); + neutrino.config.resolve.alias.set('views', resolve(__dirname, 'src/views')); + neutrino.config.resolve.alias.set('utils', resolve(__dirname, 'src/utils')); + neutrino.config.resolve.alias.set('auth', resolve(__dirname, 'src/auth')); + neutrino.config.resolve.alias.set('components', resolve(__dirname, 'src/components')); }, typescript(), // Modify typescript config in .tsconfig.json @@ -51,6 +56,9 @@ module.exports = { moduleDirectories: ['node_modules', 'src'], }), react({ + env: [ + 'API_URL' + ], html: { title: 'Apache Airflow', } diff --git a/airflow/ui/README.md b/airflow/ui/README.md index 940469667d5fe..586614ecf7c89 100644 --- a/airflow/ui/README.md +++ b/airflow/ui/README.md @@ -27,6 +27,25 @@ - [Chakra UI](https://chakra-ui.com/) - a simple, modular and accessible component library that gives you all the building blocks you need to build your React applications. - [React Testing Library](https://testing-library.com/docs/react-testing-library/intro/) - write tests that focus on functionality instead of implementation +## Environment variables + +To communicate with the API you need to adjust some environment variables for the webserver and this UI. + +Be sure to allow CORS headers and set up an auth backend on your Airflow instance. + +``` +export AIRFLOW__API__AUTH_BACKEND=airflow.api.auth.backend.basic_auth +export AIRFLOW__API__ACCESS_CONTROL_ALLOW_HEADERS=* +export AIRFLOW__API__ACCESS_CONTROL_ALLOW_METHODS=* +export AIRFLOW__API__ACCESS_CONTROL_ALLOW_ORIGIN=http://127.0.0.1:28080/ +``` + +Create your local environment and adjust the `API_URL` if needed. + +```bash +cp .env.example .env +``` + ## Installation Clone the repository and use the package manager [yarn](https://yarnpkg.com) to install dependencies and get the project running. diff --git a/airflow/ui/package.json b/airflow/ui/package.json index 42741264c0075..d4f0cad3dc4c8 100644 --- a/airflow/ui/package.json +++ b/airflow/ui/package.json @@ -13,10 +13,15 @@ "@emotion/react": "^11.1.5", "@emotion/styled": "^11.1.5", "@neutrinojs/copy": "^9.5.0", + "axios": "^0.21.1", + "dotenv": "^8.2.0", "framer-motion": "^3.10.0", "react": "^16", "react-dom": "^16", - "react-hot-loader": "^4" + "react-hot-loader": "^4", + "react-icons": "^4.2.0", + "react-query": "^3.12.3", + "react-router-dom": "^5.2.0" }, "devDependencies": { "@neutrinojs/eslint": "^9.5.0", @@ -27,14 +32,18 @@ "@types/jest": "^26.0.20", "@types/react": "^17.0.3", "@types/react-dom": "^17.0.2", + "@types/react-router-dom": "^5.1.7", "eslint": "^7", "eslint-config-airbnb-typescript": "^12.3.1", "eslint-plugin-import": "^2.22.1", "eslint-plugin-jsx-a11y": "^6.4.1", + "history": "^5.0.0", "jest": "^26", "neutrino": "^9.5.0", "neutrinojs-typescript": "^1.1.6", "neutrinojs-typescript-eslint": "^1.3.1", + "nock": "^13.0.11", + "react-test-renderer": "^17.0.1", "typescript": "^4.2.3", "webpack": "^4", "webpack-cli": "^3", diff --git a/airflow/ui/src/App.tsx b/airflow/ui/src/App.tsx index 286350d8ecffd..b6d2f35f13df3 100644 --- a/airflow/ui/src/App.tsx +++ b/airflow/ui/src/App.tsx @@ -19,12 +19,45 @@ import { hot } from 'react-hot-loader'; import React from 'react'; -import { Center, Heading } from '@chakra-ui/react'; +import { Route, Redirect, Switch } from 'react-router-dom'; + +import PrivateRoute from 'auth/PrivateRoute'; + +import Pipelines from 'views/Pipelines'; +import Pipeline from 'views/Pipeline'; + +import EventLogs from 'views/Activity/EventLogs'; + +import Config from 'views/Config'; + +import Access from 'views/Access'; +import Users from 'views/Access/Users'; +import Roles from 'views/Access/Roles'; + +import Docs from 'views/Docs'; +import NotFound from 'views/NotFound'; const App = () => ( -
- Apache Airflow new UI -
+ + + + + + + + + + + + + + + + + + + + ); export default hot(module)(App); diff --git a/airflow/ui/src/auth/AuthProvider.tsx b/airflow/ui/src/auth/AuthProvider.tsx new file mode 100644 index 0000000000000..8e52fae1f4675 --- /dev/null +++ b/airflow/ui/src/auth/AuthProvider.tsx @@ -0,0 +1,113 @@ +/*! + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import React, { + useState, useEffect, useCallback, ReactNode, ReactElement, +} from 'react'; +import axios from 'axios'; +import { useQueryClient } from 'react-query'; + +import { + checkExpire, clearAuth, get, set, +} from 'utils/localStorage'; +import { AuthContext } from './context'; + +type Props = { + children: ReactNode; +}; + +const AuthProvider = ({ children }: Props): ReactElement => { + const [hasValidAuthToken, setHasValidAuthToken] = useState(false); + const [error, setError] = useState(null); + const [loading, setLoading] = useState(true); + const queryClient = useQueryClient(); + + const clearData = useCallback(() => { + setHasValidAuthToken(false); + clearAuth(); + queryClient.clear(); + axios.defaults.headers.common.Authorization = null; + }, [queryClient]); + + const logout = () => clearData(); + + // intercept responses and logout on unauthorized error + axios.interceptors.response.use( + (res) => res, + (err) => { + if (err && err.response && err.response.status === 401) { + logout(); + } + return Promise.reject(err); + }, + ); + + useEffect(() => { + const token = get('token'); + const isExpired = checkExpire('token'); + if (token && !isExpired) { + axios.defaults.headers.common.Authorization = token; + setHasValidAuthToken(true); + } else if (token) { + clearData(); + setError(new Error('Token invalid, please reauthenticate.')); + } else { + setHasValidAuthToken(false); + } + setLoading(false); + }, [clearData]); + + // Login with basic auth. + // There is no actual auth endpoint yet, so we check against a generic endpoint + const login = async (username: string, password: string) => { + setLoading(true); + setError(null); + try { + const authorization = `Basic ${btoa(`${username}:${password}`)}`; + await axios.get(`${process.env.API_URL}config`, { + headers: { + Authorization: authorization, + }, + }); + set('token', authorization); + axios.defaults.headers.common.Authorization = authorization; + setLoading(false); + setHasValidAuthToken(true); + } catch (e) { + setLoading(false); + setError(e); + } + }; + + return ( + + {children} + + ); +}; + +export default AuthProvider; diff --git a/airflow/ui/src/auth/PrivateRoute.tsx b/airflow/ui/src/auth/PrivateRoute.tsx new file mode 100644 index 0000000000000..6258ffe3c7787 --- /dev/null +++ b/airflow/ui/src/auth/PrivateRoute.tsx @@ -0,0 +1,33 @@ +/*! + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import React, { + FC, +} from 'react'; +import { Route, RouteProps } from 'react-router-dom'; + +import Login from 'views/Login'; +import { useAuthContext } from './context'; + +const PrivateRoute: FC = (props) => { + const { hasValidAuthToken } = useAuthContext(); + return hasValidAuthToken ? : ; +}; + +export default PrivateRoute; diff --git a/airflow/ui/src/auth/context.ts b/airflow/ui/src/auth/context.ts new file mode 100644 index 0000000000000..da741c64bf684 --- /dev/null +++ b/airflow/ui/src/auth/context.ts @@ -0,0 +1,43 @@ +/*! + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { + createContext, useContext, +} from 'react'; + +// todo: eventually replace hasValidAuthToken with a user object +interface AuthContextData { + hasValidAuthToken: boolean; + login: (username: string, password: string) => void; + logout: () => void; + loading: boolean; + error: Error | null; +} + +export const authContextDefaultValue: AuthContextData = { + hasValidAuthToken: false, + login: () => null, + logout: () => null, + loading: true, + error: null, +}; + +export const AuthContext = createContext(authContextDefaultValue); + +export const useAuthContext = () => useContext(AuthContext); diff --git a/airflow/ui/src/components/AppHeader.tsx b/airflow/ui/src/components/AppHeader.tsx new file mode 100644 index 0000000000000..b3193bb82135a --- /dev/null +++ b/airflow/ui/src/components/AppHeader.tsx @@ -0,0 +1,57 @@ +/*! + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import React from 'react'; +import { + Button, + Flex, + Box, + Icon, +} from '@chakra-ui/react'; +import { MdExitToApp } from 'react-icons/md'; +import { useAuthContext } from 'auth/context'; + +const AppHeader: React.FC = ({ children }) => { + const { logout } = useAuthContext(); + + return ( + + + + + + {children} + + ); +}; + +export default AppHeader; diff --git a/airflow/ui/src/index.tsx b/airflow/ui/src/index.tsx index 1ac3ef3b7ee71..7cba9ab7472da 100644 --- a/airflow/ui/src/index.tsx +++ b/airflow/ui/src/index.tsx @@ -19,14 +19,29 @@ import React from 'react'; import { render } from 'react-dom'; +import { BrowserRouter } from 'react-router-dom'; import { ChakraProvider } from '@chakra-ui/react'; +import { + QueryClient, + QueryClientProvider, +} from 'react-query'; + +import AuthProvider from 'auth/AuthProvider'; import App from './App'; import theme from './theme'; +const queryClient = new QueryClient(); + render( - - - , + + + + + + + + + , document.getElementById('root'), ); diff --git a/airflow/ui/src/utils/localStorage.ts b/airflow/ui/src/utils/localStorage.ts new file mode 100644 index 0000000000000..d07166ee10f1c --- /dev/null +++ b/airflow/ui/src/utils/localStorage.ts @@ -0,0 +1,55 @@ +/*! + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +export function set(key: string, value:string): Record { + localStorage[key] = value; + + // Set session expiry (24hrs) + if (key === 'token') { + const date = new Date(); + localStorage[`${key}-expire`] = new Date(date.getTime() + 86400000); + } + + return localStorage[key]; +} + +export function get(key: string, defaultValue = undefined): string { + const value = localStorage[key] || defaultValue; + return value; +} + +export function clear(): void { + return localStorage.clear(); +} + +export function remove(key: string): void { + return localStorage.removeItem(key); +} + +export function checkExpire(key: string): boolean { + const sessExpire = get(`${key}-expire`); + const sess = get(key); + if (!sessExpire || !sess) return true; + return new Date() > new Date(sessExpire); +} + +export function clearAuth(): void { + localStorage.removeItem('token'); + localStorage.removeItem('token-expire'); +} diff --git a/airflow/ui/src/views/Access/Roles.tsx b/airflow/ui/src/views/Access/Roles.tsx new file mode 100644 index 0000000000000..023f3fca72aba --- /dev/null +++ b/airflow/ui/src/views/Access/Roles.tsx @@ -0,0 +1,29 @@ +/*! + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import React from 'react'; +import { Center, Heading } from '@chakra-ui/react'; + +const Roles: React.FC = () => ( +
+ Roles +
+); + +export default Roles; diff --git a/airflow/ui/src/views/Access/Users.tsx b/airflow/ui/src/views/Access/Users.tsx new file mode 100644 index 0000000000000..60aed7765bc40 --- /dev/null +++ b/airflow/ui/src/views/Access/Users.tsx @@ -0,0 +1,29 @@ +/*! + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import React from 'react'; +import { Center, Heading } from '@chakra-ui/react'; + +const Users: React.FC = () => ( +
+ Users +
+); + +export default Users; diff --git a/airflow/ui/src/views/Access/index.tsx b/airflow/ui/src/views/Access/index.tsx new file mode 100644 index 0000000000000..b5593bac500c3 --- /dev/null +++ b/airflow/ui/src/views/Access/index.tsx @@ -0,0 +1,29 @@ +/*! + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import React from 'react'; +import { Center, Heading } from '@chakra-ui/react'; + +const Access: React.FC = () => ( +
+ Access +
+); + +export default Access; diff --git a/airflow/ui/src/views/Activity/EventLogs.tsx b/airflow/ui/src/views/Activity/EventLogs.tsx new file mode 100644 index 0000000000000..82b50e0b76991 --- /dev/null +++ b/airflow/ui/src/views/Activity/EventLogs.tsx @@ -0,0 +1,29 @@ +/*! + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import React from 'react'; +import { Center, Heading } from '@chakra-ui/react'; + +const EventLogs: React.FC = () => ( +
+ Event Logs +
+); + +export default EventLogs; diff --git a/airflow/ui/src/views/Config/index.tsx b/airflow/ui/src/views/Config/index.tsx new file mode 100644 index 0000000000000..bfb5ad873fc52 --- /dev/null +++ b/airflow/ui/src/views/Config/index.tsx @@ -0,0 +1,29 @@ +/*! + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import React from 'react'; +import { Center, Heading } from '@chakra-ui/react'; + +const Config: React.FC = () => ( +
+ Config +
+); + +export default Config; diff --git a/airflow/ui/src/views/Docs.tsx b/airflow/ui/src/views/Docs.tsx new file mode 100644 index 0000000000000..9aaae2c365cca --- /dev/null +++ b/airflow/ui/src/views/Docs.tsx @@ -0,0 +1,29 @@ +/*! + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import React from 'react'; +import { Center, Heading } from '@chakra-ui/react'; + +const Docs: React.FC = () => ( +
+ Docs +
+); + +export default Docs; diff --git a/airflow/ui/src/views/Login.tsx b/airflow/ui/src/views/Login.tsx new file mode 100644 index 0000000000000..45f4cc95f7b84 --- /dev/null +++ b/airflow/ui/src/views/Login.tsx @@ -0,0 +1,106 @@ +/*! + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import React, { useState, FormEvent } from 'react'; +import { + Box, + Button, + FormLabel, + FormControl, + Icon, + Input, + InputGroup, + InputLeftElement, + Spinner, + Alert, + AlertIcon, +} from '@chakra-ui/react'; +import { MdLock, MdPerson } from 'react-icons/md'; + +import { useAuthContext } from 'auth/context'; + +const Login: React.FC = () => { + const [username, setUsername] = useState(''); + const [password, setPassword] = useState(''); + const { login, error, loading } = useAuthContext(); + + const onSubmit = (e: FormEvent) => { + e.preventDefault(); + login(username, password); + }; + + return ( + + + + Username + + + + + setUsername(e.target.value)} + isRequired + /> + + + + Password + + + + + setPassword(e.target.value)} + isRequired + /> + + + + {error && ( + + + {error.message} + + )} + + + ); +}; + +export default Login; diff --git a/airflow/ui/src/views/NotFound.tsx b/airflow/ui/src/views/NotFound.tsx new file mode 100644 index 0000000000000..a6191e724f749 --- /dev/null +++ b/airflow/ui/src/views/NotFound.tsx @@ -0,0 +1,44 @@ +/*! + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import React from 'react'; +import { Link as RouterLink } from 'react-router-dom'; +import { + Center, + Box, + Heading, + Link, +} from '@chakra-ui/react'; + +const NotFound: React.FC = () => ( +
+ + Page not found + + Return to the main page + + +
+); + +export default NotFound; diff --git a/airflow/ui/src/views/Pipeline/index.tsx b/airflow/ui/src/views/Pipeline/index.tsx new file mode 100644 index 0000000000000..92741b3f44948 --- /dev/null +++ b/airflow/ui/src/views/Pipeline/index.tsx @@ -0,0 +1,29 @@ +/*! + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import React from 'react'; +import { Center, Heading } from '@chakra-ui/react'; + +const Pipeline: React.FC = () => ( +
+ Pipeline +
+); + +export default Pipeline; diff --git a/airflow/ui/src/views/Pipelines.tsx b/airflow/ui/src/views/Pipelines.tsx new file mode 100644 index 0000000000000..a9afa5b65412f --- /dev/null +++ b/airflow/ui/src/views/Pipelines.tsx @@ -0,0 +1,32 @@ +/*! + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import React from 'react'; +import { Center, Heading } from '@chakra-ui/react'; +import AppHeader from 'components/AppHeader'; + +const Pipelines: React.FC = () => ( + +
+ Pipelines +
+
+); + +export default Pipelines; diff --git a/airflow/ui/test/App.test.tsx b/airflow/ui/test/App.test.tsx index 479f97c9f3b8a..927c63d2f978d 100644 --- a/airflow/ui/test/App.test.tsx +++ b/airflow/ui/test/App.test.tsx @@ -19,11 +19,44 @@ import React from 'react'; import '@testing-library/jest-dom'; +import { Router, BrowserRouter } from 'react-router-dom'; import { render } from '@testing-library/react'; +import { createMemoryHistory } from 'history'; import App from 'App'; -test('App renders message', () => { - const { getByText } = render(); - expect(getByText('Apache Airflow new UI')).toBeInTheDocument(); +// mock auth to be logged in +jest.mock('auth/context', () => ({ + useAuthContext: () => ({ + hasValidAuthToken: true, + }), +})); + +describe('test routes after login', () => { + test('Root path redirects to Pipelines view', () => { + // Redirect is not working in for some reason + const { getByText } = render( + + + + , + ); + + expect(getByText('Pipelines')).toBeInTheDocument(); + }); + + test('App displays 404 page on a bad route', () => { + const history = createMemoryHistory(); + history.push('/pipelines'); + const { getByText } = render( + + + , + ); + + expect(getByText('Pipelines')).toBeInTheDocument(); + + history.push('/invalid-path'); + expect(getByText('Page not found')).toBeInTheDocument(); + }); }); diff --git a/airflow/ui/test/Login.test.tsx b/airflow/ui/test/Login.test.tsx new file mode 100644 index 0000000000000..5c297f39fd598 --- /dev/null +++ b/airflow/ui/test/Login.test.tsx @@ -0,0 +1,106 @@ +/*! + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import React from 'react'; +import '@testing-library/jest-dom'; +import { render, fireEvent, waitFor } from '@testing-library/react'; +import { BrowserRouter } from 'react-router-dom'; +import nock from 'nock'; +import axios from 'axios'; + +import Login from 'views/Login'; +import App from 'App'; +import AuthProvider from 'auth/AuthProvider'; + +import { url, defaultHeaders, QueryWrapper } from './utils'; + +axios.defaults.adapter = require('axios/lib/adapters/http'); + +test('App shows Login screen by default', () => { + const { getByText } = render( + + + , + ); + + expect(getByText('Password')).toBeInTheDocument(); +}); + +describe('test login component', () => { + test('Button is disabled when there is no username or password', () => { + const { getByTestId } = render( + , + ); + const button = getByTestId('submit'); + + expect(button).toBeDisabled(); + }); + + test('Button is clickable only when username and password exist', () => { + const { getByTestId } = render( + , + ); + + const button = getByTestId('submit'); + const username = getByTestId('username'); + const password = getByTestId('password'); + + fireEvent.change(username, { target: { value: 'admin' } }); + expect(button).toBeDisabled(); + fireEvent.change(password, { target: { value: 'admin' } }); + expect(button).not.toBeDisabled(); + }); + + test('Login page shows loading after submit', async () => { + const { getByTestId, getByText } = render( + , + ); + + const button = getByTestId('submit'); + const username = getByTestId('username'); + const password = getByTestId('password'); + + fireEvent.change(username, { target: { value: 'admin' } }); + fireEvent.change(password, { target: { value: 'admin' } }); + fireEvent.click(button); + await waitFor(() => expect(getByText('Loading...')).toBeInTheDocument()); + }); + + test('Login page shows message on error', async () => { + nock(url) + .persist() + .defaultReplyHeaders(defaultHeaders) + .intercept('/config', 'GET') + .replyWithError('Unauthorized'); + + const { getByTestId, getByText } = render( + , + { wrapper: QueryWrapper }, + ); + + const button = getByTestId('submit'); + const username = getByTestId('username'); + const password = getByTestId('password'); + + fireEvent.change(username, { target: { value: 'admin' } }); + fireEvent.change(password, { target: { value: 'admin' } }); + fireEvent.click(button); + await waitFor(() => expect(getByText('Unauthorized')).toBeInTheDocument()); + }); +}); diff --git a/airflow/ui/test/utils.tsx b/airflow/ui/test/utils.tsx new file mode 100644 index 0000000000000..935637cb0455b --- /dev/null +++ b/airflow/ui/test/utils.tsx @@ -0,0 +1,39 @@ +/*! + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import React from 'react'; +import { QueryClient, QueryClientProvider } from 'react-query'; + +export const url: string = process.env.API_URL || ''; + +export const defaultHeaders = { + 'access-control-allow-origin': url, + 'access-control-allow-credentials': 'true', + 'access-control-allow-headers': '*', + 'access-control-allow-methods': '*', +}; + +export const QueryWrapper: React.FC<{}> = ({ children }) => { + const queryClient = new QueryClient(); + return ( + + {children} + + ); +}; diff --git a/airflow/ui/tsconfig.json b/airflow/ui/tsconfig.json index ee30c9b7ff822..85085f279cb82 100644 --- a/airflow/ui/tsconfig.json +++ b/airflow/ui/tsconfig.json @@ -13,6 +13,7 @@ "isolatedModules": true, "esModuleInterop": true, "resolveJsonModule": true, + "skipLibCheck": true, "jsx": "preserve", // baseUrl allows to absolute paths but you also have to add the alias in .neutrinorc.js "baseUrl": "src", diff --git a/airflow/ui/yarn.lock b/airflow/ui/yarn.lock index ea5a37f81f25f..bebe69c2dc0c4 100644 --- a/airflow/ui/yarn.lock +++ b/airflow/ui/yarn.lock @@ -898,20 +898,20 @@ core-js-pure "^3.0.0" regenerator-runtime "^0.13.4" -"@babel/runtime@^7.0.0", "@babel/runtime@^7.10.2", "@babel/runtime@^7.12.13", "@babel/runtime@^7.7.2", "@babel/runtime@^7.8.4": - version "7.13.9" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.13.9.tgz#97dbe2116e2630c489f22e0656decd60aaa1fcee" - integrity sha512-aY2kU+xgJ3dJ1eU6FMB9EH8dIe8dmusF1xEku52joLvw6eAFN0AI+WxCLDnpev2LEejWBAy2sBvBOBAjI3zmvA== - dependencies: - regenerator-runtime "^0.13.4" - -"@babel/runtime@^7.11.2", "@babel/runtime@^7.12.5", "@babel/runtime@^7.9.2": +"@babel/runtime@^7.0.0", "@babel/runtime@^7.1.2", "@babel/runtime@^7.11.2", "@babel/runtime@^7.12.1", "@babel/runtime@^7.12.13", "@babel/runtime@^7.12.5", "@babel/runtime@^7.5.5", "@babel/runtime@^7.6.2", "@babel/runtime@^7.7.6", "@babel/runtime@^7.9.2": version "7.13.10" resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.13.10.tgz#47d42a57b6095f4468da440388fdbad8bebf0d7d" integrity sha512-4QPkjJq6Ns3V/RgpEahRk+AGfL0eO6RHHtTWoNNr5mO49G6B5+X6d6THgWEAvTrznU5xYpbAlVKRYcsCgh/Akw== dependencies: regenerator-runtime "^0.13.4" +"@babel/runtime@^7.10.2", "@babel/runtime@^7.7.2", "@babel/runtime@^7.8.4": + version "7.13.9" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.13.9.tgz#97dbe2116e2630c489f22e0656decd60aaa1fcee" + integrity sha512-aY2kU+xgJ3dJ1eU6FMB9EH8dIe8dmusF1xEku52joLvw6eAFN0AI+WxCLDnpev2LEejWBAy2sBvBOBAjI3zmvA== + dependencies: + regenerator-runtime "^0.13.4" + "@babel/template@^7.12.13", "@babel/template@^7.3.3": version "7.12.13" resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.12.13.tgz#530265be8a2589dbb37523844c5bcb55947fb327" @@ -950,498 +950,496 @@ resolved "https://registry.yarnpkg.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39" integrity sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw== -"@chakra-ui/accordion@1.1.3": +"@chakra-ui/accordion@1.1.4": + version "1.1.4" + resolved "https://registry.yarnpkg.com/@chakra-ui/accordion/-/accordion-1.1.4.tgz#7f114ee546185a9cfc3fc0dfbbb63daaae2af8cb" + integrity sha512-8SBSZlxtGuZEi9iXeVF+V9ziM7RH1MW1WJ0K6AcQQVU8uyMa6Ld+FWzsROawwkEJgVCrrd3tFH9coY/0ZXlZRQ== + dependencies: + "@chakra-ui/descendant" "1.0.9" + "@chakra-ui/hooks" "1.2.0" + "@chakra-ui/icon" "1.1.3" + "@chakra-ui/transition" "1.1.0" + "@chakra-ui/utils" "1.4.0" + +"@chakra-ui/alert@1.1.3": version "1.1.3" - resolved "https://registry.yarnpkg.com/@chakra-ui/accordion/-/accordion-1.1.3.tgz#bfe4901aab137bd08e0796d09c4b4baeb54d3e4e" - integrity sha512-if61BesRBHK5kmqfS0FesTtsmoYcpSYdgcn2cQ0nk9vEc2RvK6H8FTPlFvu64ycpbD73sa9unpdNdxTtzZp7bw== + resolved "https://registry.yarnpkg.com/@chakra-ui/alert/-/alert-1.1.3.tgz#05b86d62b4a20d5e0b4c88be788a79cd5666e071" + integrity sha512-Q/A2K6m/FqN4W/bNh+OAPzrwNGGGS9yxznPTQMHC0Map34t0/pP2A/luKC00B0oDHhF9AAcLosjn3NXhphT2pw== dependencies: - "@chakra-ui/descendant" "1.0.8" - "@chakra-ui/hooks" "1.1.5" - "@chakra-ui/icon" "1.1.2" - "@chakra-ui/transition" "1.0.9" - "@chakra-ui/utils" "1.3.0" + "@chakra-ui/icon" "1.1.3" + "@chakra-ui/utils" "1.4.0" -"@chakra-ui/alert@1.1.2": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@chakra-ui/alert/-/alert-1.1.2.tgz#78a1693e405464784bef83922a26b63782c5d0ef" - integrity sha512-paJyY9S7EvYPZVqpvP3EyzzqXRRQDsEbR62ohfpFQg6C5+S5YWgjos/0YJNPEHDDj/XSQ/4RuAis78CcfivzwQ== +"@chakra-ui/avatar@1.1.4": + version "1.1.4" + resolved "https://registry.yarnpkg.com/@chakra-ui/avatar/-/avatar-1.1.4.tgz#63a41624fabee5cad35380f4cd1ced3bc8a4d413" + integrity sha512-/l7ibd8at75gIW3WzU9cis0+o5lWfwgUO4oI9yevFgllSyyPgwgZhdR/lcTQmJlmEuA0eaawQPM3GN8LsJfFnQ== dependencies: - "@chakra-ui/icon" "1.1.2" - "@chakra-ui/utils" "1.3.0" + "@chakra-ui/image" "1.0.9" + "@chakra-ui/utils" "1.4.0" -"@chakra-ui/avatar@1.1.3": +"@chakra-ui/breadcrumb@1.1.3": version "1.1.3" - resolved "https://registry.yarnpkg.com/@chakra-ui/avatar/-/avatar-1.1.3.tgz#ebdbf90a0a1d51c98a523341b684e0301b6bfd79" - integrity sha512-fM5yzEUd7zyFs+bdFnfDEafQoSlt84AdbWoJ9jG55WwFnJ5CWV2kXb0CRe9MADj2V11EKXzQFT/YYeEg00Jb+Q== + resolved "https://registry.yarnpkg.com/@chakra-ui/breadcrumb/-/breadcrumb-1.1.3.tgz#956f58ac2e349a51dae47cad8139df2534c6ce3e" + integrity sha512-FpHlrJiheSQ6SAXvvZMp7juMOnaYeGFtmz4FK1n4sDaaim6jy7haMxbxY6yINOhMC/FGjpdpLLjdK0lPKUuZPw== dependencies: - "@chakra-ui/image" "1.0.8" - "@chakra-ui/utils" "1.3.0" + "@chakra-ui/utils" "1.4.0" -"@chakra-ui/breadcrumb@1.1.2": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@chakra-ui/breadcrumb/-/breadcrumb-1.1.2.tgz#875200b383ef24f1c262c712f041e73bad9e234e" - integrity sha512-spKkKKd8z738ExOGa5zCg8f1YSou8DEYpB5FHbfdQDzyI0VAuwsxZHy4WPPqWf+V7Tgsjnn/gUEYCQIayHcJcw== +"@chakra-ui/button@1.1.4": + version "1.1.4" + resolved "https://registry.yarnpkg.com/@chakra-ui/button/-/button-1.1.4.tgz#6b474f56f51d46115894342a8a06a2f5321faedc" + integrity sha512-xLrISCqC/oe+QuBfhfTmdxCNbgad2dz5lu2BZ9TE6d1ppeP13RtFArQHaJ9/0wUVs3Oke6+ksSr1oCvGXvDadA== dependencies: - "@chakra-ui/utils" "1.3.0" + "@chakra-ui/spinner" "1.1.3" + "@chakra-ui/utils" "1.4.0" -"@chakra-ui/button@1.1.3": - version "1.1.3" - resolved "https://registry.yarnpkg.com/@chakra-ui/button/-/button-1.1.3.tgz#d41514efb2cee211a5b9564aac303d3b0234b842" - integrity sha512-KfBLKCl7QDwZjVkSo7UEU0zU0u/j8TImU2571L9AVwIrzatQXGuyx4m4PYxrEgU4lb+YhbDwNWNnHgTPNzcdVw== +"@chakra-ui/checkbox@1.3.0": + version "1.3.0" + resolved "https://registry.yarnpkg.com/@chakra-ui/checkbox/-/checkbox-1.3.0.tgz#51874dcdbc038ac2d896ddd9c327f966619a3353" + integrity sha512-erZxnK7ybI7ruyAQaDaDzPEV4eL+AJgP0dWQBzssLwOUhLqYkLG5km/tmgZZzfwg5A62WaBf9QT0tZymWTJ+ng== dependencies: - "@chakra-ui/spinner" "1.1.2" - "@chakra-ui/utils" "1.3.0" + "@chakra-ui/hooks" "1.2.0" + "@chakra-ui/utils" "1.4.0" + "@chakra-ui/visually-hidden" "1.0.6" -"@chakra-ui/checkbox@1.2.4": - version "1.2.4" - resolved "https://registry.yarnpkg.com/@chakra-ui/checkbox/-/checkbox-1.2.4.tgz#b1743fafe591c20482bdc9e58d33e397480e82e7" - integrity sha512-4GgkRAPFWHyat6tFfhmdzBeF7W+C0MEsMiSNmF5dsp13/6txsOaUiIg0sy6VzoGAp9rIBEr0IaXjVR3MmSTWsw== +"@chakra-ui/clickable@1.0.6": + version "1.0.6" + resolved "https://registry.yarnpkg.com/@chakra-ui/clickable/-/clickable-1.0.6.tgz#9ab45fbbfe01ac484f5a3d6f5c26e13000353d52" + integrity sha512-k4+mS2l3GbYbJbdIVpZzAB3xQ9EiECUoMmlZKp+NHh9pUR2XZWSmjVhfedVyk7WuOfpXWxAhwhgCVrM5+hRd9w== dependencies: - "@chakra-ui/hooks" "1.1.5" - "@chakra-ui/utils" "1.3.0" - "@chakra-ui/visually-hidden" "1.0.5" + "@chakra-ui/utils" "1.4.0" -"@chakra-ui/clickable@1.0.5": - version "1.0.5" - resolved "https://registry.yarnpkg.com/@chakra-ui/clickable/-/clickable-1.0.5.tgz#b9f42c06955eb7d52a7e9dd8baf97a1ea819cc61" - integrity sha512-bymyXqh3/NTYobgF7ea3o5TaxMo0O7yD97Osj756sLhMl8mbovnKDdPsFO2uL6Y/v+BAvlBUftQVOnwXgMMJkQ== +"@chakra-ui/close-button@1.1.3": + version "1.1.3" + resolved "https://registry.yarnpkg.com/@chakra-ui/close-button/-/close-button-1.1.3.tgz#db0a0c62549a14c529deae8184d20466170fe3e8" + integrity sha512-pLj5E2or8VdQ69w/ZZ/B09E446B6wbmJFQ8fuqnaxOeBZKp3VtvOLXWDg23SsijKKgw71EBq0O7qUOKvQRygKA== dependencies: - "@chakra-ui/utils" "1.3.0" + "@chakra-ui/icon" "1.1.3" + "@chakra-ui/utils" "1.4.0" -"@chakra-ui/close-button@1.1.2": +"@chakra-ui/color-mode@1.1.2": version "1.1.2" - resolved "https://registry.yarnpkg.com/@chakra-ui/close-button/-/close-button-1.1.2.tgz#eb212e4439bfd43c8af400819e037871be3aadd2" - integrity sha512-jLDhVMV5s7BTHDhwZMEPNLlHG8cI5Pw4y0dWrrnGWi3XQIFWYvAfLDhApn7W1cF1ijch000Heloq9WcN/WxilA== - dependencies: - "@chakra-ui/icon" "1.1.2" - "@chakra-ui/utils" "1.3.0" - -"@chakra-ui/color-mode@1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@chakra-ui/color-mode/-/color-mode-1.1.1.tgz#762da845c24c9ca01114b5b2c99cc78852b44b19" - integrity sha512-vTT7SNjYie5O2EucJ+rQvta2srLUHXxY2J0mfOVRIvMzpMr4l49DYAqZmRHFie7rTvV+e0h5JaA3qwdHUsBu/w== + resolved "https://registry.yarnpkg.com/@chakra-ui/color-mode/-/color-mode-1.1.2.tgz#824ea170b04152021bc5c39a7f17f7f0b6d59801" + integrity sha512-RnJvLFNmLyC9bnYgzunJ19pwr7chc3T6mvZJG4Goqxdn8jPQ3QJPh6A0vA5tvIIgbXqvIPn8imknBntHq1P0kw== dependencies: - "@chakra-ui/hooks" "1.1.5" - "@chakra-ui/utils" "1.3.0" + "@chakra-ui/hooks" "1.2.0" + "@chakra-ui/utils" "1.4.0" -"@chakra-ui/control-box@1.0.5": - version "1.0.5" - resolved "https://registry.yarnpkg.com/@chakra-ui/control-box/-/control-box-1.0.5.tgz#a2c0bbf329d47b17b6ce0321c8a76d7a263401ea" - integrity sha512-gwmWfobqeNjMlHNG4ATj0yg7p/WYIONwFhLU0l85qLsfSs+GkX5xTBV+ssrnD9l2ADG8lALmDAxgPFOOhLZMvg== +"@chakra-ui/control-box@1.0.6": + version "1.0.6" + resolved "https://registry.yarnpkg.com/@chakra-ui/control-box/-/control-box-1.0.6.tgz#aa6f2b385fb22cf2033e1e567db87321a70bfb6e" + integrity sha512-5Tkwre9BF3wifx6pe5cgBlpcAZaJWhLF2KGs29lsmjOHV14JvLff9sPNaqNIaugRZY25bF4JVgMXg42aIfS17Q== dependencies: - "@chakra-ui/utils" "1.3.0" + "@chakra-ui/utils" "1.4.0" -"@chakra-ui/counter@1.0.8": - version "1.0.8" - resolved "https://registry.yarnpkg.com/@chakra-ui/counter/-/counter-1.0.8.tgz#6ff32914e7eba25408eed421db6b4b9edc4d4c31" - integrity sha512-TynFTt6JmYqg5EreZuv619ePUqXEj6a/zVPGXA3QPgJBEOcNwbhqX/SRaQ1vMD+Cv9xVbxjWFV6J2na5j3E3yQ== +"@chakra-ui/counter@1.0.9": + version "1.0.9" + resolved "https://registry.yarnpkg.com/@chakra-ui/counter/-/counter-1.0.9.tgz#e0a107293c433856e17de8ec6d755b891fc60e9f" + integrity sha512-D1iXgA2rjHhZx2Gm3Tp3BD6fCX+LMvI0D/SkWGnJ5ES4n/0QXk1AoEAaz7jIrk6nEY1Sv/U4GxErRTV3KtSOzw== dependencies: - "@chakra-ui/hooks" "1.1.5" - "@chakra-ui/utils" "1.3.0" + "@chakra-ui/hooks" "1.2.0" + "@chakra-ui/utils" "1.4.0" "@chakra-ui/css-reset@1.0.0": version "1.0.0" resolved "https://registry.yarnpkg.com/@chakra-ui/css-reset/-/css-reset-1.0.0.tgz#8395921b35ef27bee0579a4d730c5ab7f7b39734" integrity sha512-UaPsImGHvCgFO3ayp6Ugafu2/3/EG8wlW/8Y9Ihfk1UFv8cpV+3BfWKmuZ7IcmxcBL9dkP6E8p3/M1T0FB92hg== -"@chakra-ui/descendant@1.0.8": - version "1.0.8" - resolved "https://registry.yarnpkg.com/@chakra-ui/descendant/-/descendant-1.0.8.tgz#50e809b82b5a54e77c1b3d3291afc1ec6b8ebbf4" - integrity sha512-amKxOoFJ2uiQxJqAw5XZOI5nwVdUQ4BxZAY2Y7kM9Ml5qATxzRiVv8eoyJ0uQ/VksFRfECFxyudFtLm0VwO8hQ== +"@chakra-ui/descendant@1.0.9": + version "1.0.9" + resolved "https://registry.yarnpkg.com/@chakra-ui/descendant/-/descendant-1.0.9.tgz#acc0470c42d5ec962586a91e7165c8e654377f5f" + integrity sha512-N/s5+mr7SfDHdMDKcXaJsISYxtIoUTy+Wj9fYbVO2ABx5TrMWc/6Y+3sIlEHzobpsAGfaPTLUhTUYT9P82zGSw== dependencies: - "@chakra-ui/hooks" "1.1.5" + "@chakra-ui/hooks" "1.2.0" -"@chakra-ui/editable@1.1.2": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@chakra-ui/editable/-/editable-1.1.2.tgz#ae4adee0e1dcd2c1aad74a2d7273ba1a90fd6b5b" - integrity sha512-uWt0I8Oo9prs5rDYF2Yqairq2Wl1MMaAU6y2NTSLLq0Un2RTVtyW29TkHFpx7SF1mlrtClyKmh0yk0qEiEMcWQ== +"@chakra-ui/editable@1.1.3": + version "1.1.3" + resolved "https://registry.yarnpkg.com/@chakra-ui/editable/-/editable-1.1.3.tgz#7abaa3ebc5bcd2402d2a39d47948c437aa959eae" + integrity sha512-jH38V+LQveXAxB80GAw5kXkB4Q0BbV+1YU/u5fyxYjoQ2GSkTe34kUiWXzCtYdnHska8xaZ08qtkfEcS5eDZsQ== dependencies: - "@chakra-ui/hooks" "1.1.5" - "@chakra-ui/utils" "1.3.0" + "@chakra-ui/hooks" "1.2.0" + "@chakra-ui/utils" "1.4.0" -"@chakra-ui/focus-lock@1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@chakra-ui/focus-lock/-/focus-lock-1.1.1.tgz#46292f52e6140cbffa94cc6610354ad926c4f843" - integrity sha512-fscXuFgaxbf1GnRB3/a7KMwYwcmSGT61XmF5yUOw8PflkBl/4a8u+UuSZMuzw8blD5/fK9thWNJK2Nqq/24aOA== +"@chakra-ui/focus-lock@1.1.2": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@chakra-ui/focus-lock/-/focus-lock-1.1.2.tgz#2e8fda42887372b39b440c1b90b9fa380dcc0376" + integrity sha512-t9CYCX+E/9rqVCpFq7emIWMkTYPSl5fBJtuTUoWBNVXeyDBHB+Kfg7miM2ET0Re2By4ZFTCofcCs5sTYHGbeQA== dependencies: - "@chakra-ui/utils" "1.3.0" + "@chakra-ui/utils" "1.4.0" react-focus-lock "2.5.0" -"@chakra-ui/form-control@1.2.2": - version "1.2.2" - resolved "https://registry.yarnpkg.com/@chakra-ui/form-control/-/form-control-1.2.2.tgz#88d75491e59f0791dabfdaf032e09360a59e7d67" - integrity sha512-p/tLw25/0NZBeuv6WG9NzRfPkS1EfIcs60IWu7ehxvNrNo4TAzTNkp9eEeSDAgpEin1hlAEBWdi2ZzgvK28qEA== +"@chakra-ui/form-control@1.2.3": + version "1.2.3" + resolved "https://registry.yarnpkg.com/@chakra-ui/form-control/-/form-control-1.2.3.tgz#8ee931d769c22afbcdf62e304751de9a440130f2" + integrity sha512-FwT+Bet7wHg4yPZBjcJd08TVtHMgVc33iNT1gUKluMskHH1dPiXvgH0+bNLlQcjO3869qP6rqG0ul4BuWga/XA== dependencies: - "@chakra-ui/hooks" "1.1.5" - "@chakra-ui/icon" "1.1.2" - "@chakra-ui/utils" "1.3.0" + "@chakra-ui/hooks" "1.2.0" + "@chakra-ui/icon" "1.1.3" + "@chakra-ui/utils" "1.4.0" -"@chakra-ui/hooks@1.1.5": - version "1.1.5" - resolved "https://registry.yarnpkg.com/@chakra-ui/hooks/-/hooks-1.1.5.tgz#54d22fc1f291b085ba431c9f9ec59b2ddfdbeb4a" - integrity sha512-JBBeQ5woByVRV0yuc318ogyjjIHJJSujdBhOZUmB+nAjlmx5lpFoAm59IAKuH8ZIqZBEzjwcnhKNw67wXjoowQ== +"@chakra-ui/hooks@1.2.0": + version "1.2.0" + resolved "https://registry.yarnpkg.com/@chakra-ui/hooks/-/hooks-1.2.0.tgz#4faedf2840c9c8bfad6dac289cdd13ffbb36e6a5" + integrity sha512-un6FuNRVtX4YKT842otuthOPvsBMsRfiDFSu0afoOZHcxfUPmtPFdE0mWQGlyAcolaj5wkL7zxXR6tbY47FnBA== dependencies: - "@chakra-ui/utils" "1.3.0" + "@chakra-ui/utils" "1.4.0" compute-scroll-into-view "1.0.14" copy-to-clipboard "3.3.1" -"@chakra-ui/icon@1.1.2": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@chakra-ui/icon/-/icon-1.1.2.tgz#b57f53c801b515301f26bc829957f32b7ca5fb8d" - integrity sha512-Gp/G0CZ8X8RWJWrs8jUm1dfA+5lS4zgNd078zQAj+yppnyhRGEGuZ6jAVJowtF+gbljZttmZwfXUgV3WpKnT/A== +"@chakra-ui/icon@1.1.3": + version "1.1.3" + resolved "https://registry.yarnpkg.com/@chakra-ui/icon/-/icon-1.1.3.tgz#5fbc310652fa20da973ea9422ed5e1a654596d23" + integrity sha512-XZ9RTU0J/qB5bZawUK5yk6YN3P2fi74aTLap1qygmodAPo5sIroRzfuXndezjAYFhuRjI62zfSs/FVhwJyhmsw== dependencies: - "@chakra-ui/utils" "1.3.0" + "@chakra-ui/utils" "1.4.0" -"@chakra-ui/image@1.0.8": - version "1.0.8" - resolved "https://registry.yarnpkg.com/@chakra-ui/image/-/image-1.0.8.tgz#3e20c89966c651859d95728f9d4987ae2f8cd8a9" - integrity sha512-WSVFFvx0bJ7qdJslBrj9FGFJvOLXk05rQC+tL+lPI8/jqhzj6EwUzsQ4qXlwcjo8KR5LviMA8zZsaoEZ+kAUqw== +"@chakra-ui/image@1.0.9": + version "1.0.9" + resolved "https://registry.yarnpkg.com/@chakra-ui/image/-/image-1.0.9.tgz#bd301f6028000d9dc3370c897868b465edc39ed5" + integrity sha512-GpfwgXzVC/IVkcFGUX0I4/NcQafjdCCSVNkdTRxYo0v368VrXb4087i2ypx+7w4PgRqZv3ABunM2BbbXE35U0w== dependencies: - "@chakra-ui/hooks" "1.1.5" - "@chakra-ui/utils" "1.3.0" + "@chakra-ui/hooks" "1.2.0" + "@chakra-ui/utils" "1.4.0" -"@chakra-ui/input@1.1.3": - version "1.1.3" - resolved "https://registry.yarnpkg.com/@chakra-ui/input/-/input-1.1.3.tgz#d40ab036332d1eef1f9a5225bb9e329eff63b5ad" - integrity sha512-WwTx6jPTqoXPXMYCftcnIPhJjZqmbcUlju2Oyt32+M1jc1uFa+uUUd2zBfNQVK2KrbzWISquCzYVF5WVehHVtA== +"@chakra-ui/input@1.1.4": + version "1.1.4" + resolved "https://registry.yarnpkg.com/@chakra-ui/input/-/input-1.1.4.tgz#c4a7ada280df66fc0fc3e1fa1edb2bb4a4d286e0" + integrity sha512-dk2JD7tfRmQLqbQXpDLrkRjVpdZeVIqNKPqzQFOTApzQPxyF0/wHVbrPtipQCzlqwGuzhF0WDVc+G/KAQ+3SmA== dependencies: - "@chakra-ui/form-control" "1.2.2" - "@chakra-ui/utils" "1.3.0" + "@chakra-ui/form-control" "1.2.3" + "@chakra-ui/utils" "1.4.0" -"@chakra-ui/layout@1.3.2": - version "1.3.2" - resolved "https://registry.yarnpkg.com/@chakra-ui/layout/-/layout-1.3.2.tgz#59524b4971bf299e9b439f8669abd2064976cec2" - integrity sha512-L2dM3yRu2RKkENpuTiuBxz9Vq07LDhIWLo3aeB7uSbjWNi4kD8pVsHUw4489xEUVnVplC1T4XryM4gDck7jIVg== +"@chakra-ui/layout@1.3.3": + version "1.3.3" + resolved "https://registry.yarnpkg.com/@chakra-ui/layout/-/layout-1.3.3.tgz#837d2d7be4d2c8f57b3aee2eb9288f740ffbb0d4" + integrity sha512-PvJSNAkTNmeYv10J0tD1oBZdKSeWDkrb0hrF8IrGtmLztL+gA5fGMIkNN4/bWq25mqI7mCRHqwYei4PhhZKYXg== dependencies: - "@chakra-ui/icon" "1.1.2" - "@chakra-ui/utils" "1.3.0" + "@chakra-ui/icon" "1.1.3" + "@chakra-ui/utils" "1.4.0" -"@chakra-ui/live-region@1.0.5": - version "1.0.5" - resolved "https://registry.yarnpkg.com/@chakra-ui/live-region/-/live-region-1.0.5.tgz#9862e16f7d9c128fb6af98d26c7ee2ed419bdda2" - integrity sha512-2DBI1wgTcXILW+pEceZwWDK1DbzIS/dNBCZVjkiE2ZT17rxjkl1/olq/em4jaNvlXGcZ9V0EjmiVO3NFM3mFmA== +"@chakra-ui/live-region@1.0.6": + version "1.0.6" + resolved "https://registry.yarnpkg.com/@chakra-ui/live-region/-/live-region-1.0.6.tgz#85d20b273d35a27ebe35e98cc9f6c9d66500e38e" + integrity sha512-pLtOXsb4H0+WNtxro3KGjaoTmruvXy7uedcf61lm3d3QaRAmA+R5nCjnGayvSGK9ex8Wr+CJQSzTUUijNzKiwg== dependencies: - "@chakra-ui/utils" "1.3.0" + "@chakra-ui/utils" "1.4.0" -"@chakra-ui/media-query@1.0.6": - version "1.0.6" - resolved "https://registry.yarnpkg.com/@chakra-ui/media-query/-/media-query-1.0.6.tgz#c86fce1fdeb5b660050de88d9017e7e72b14a59d" - integrity sha512-CRav7owkwkLBJC96vwZjlOpU4igQoZvDFd7aH/u9KivGg3saICtSfHwWPl58WIrowTIkvV5ycHyo0efzcB1S1Q== +"@chakra-ui/media-query@1.0.7": + version "1.0.7" + resolved "https://registry.yarnpkg.com/@chakra-ui/media-query/-/media-query-1.0.7.tgz#08d9011ef7a5dcb238026fd35549257e21f1fcac" + integrity sha512-loonqcxL4Buqt6c558D8fR6zwQiL4yRqTG3LZZMP3UtFo4ja9tyFI0bFtmnP1PYMgOrlITkty82KuLshppwuFg== dependencies: - "@chakra-ui/utils" "1.3.0" + "@chakra-ui/utils" "1.4.0" -"@chakra-ui/menu@1.1.3": - version "1.1.3" - resolved "https://registry.yarnpkg.com/@chakra-ui/menu/-/menu-1.1.3.tgz#03cb360e9d3e10dd4983b711c424131af40f2d59" - integrity sha512-tO98inArQCg0nlMgl+9uL9YwN09AClmP3HZtGk/kINTvFD/eqKI/UDh/IcBhlHw5DczPKQtBBWO8yg2z7PqGPg== +"@chakra-ui/menu@1.2.0": + version "1.2.0" + resolved "https://registry.yarnpkg.com/@chakra-ui/menu/-/menu-1.2.0.tgz#489738547f69d2d36a67cb3863cb620b0454fd97" + integrity sha512-OYVlc1F2QNtCMWdrs611DnfqbLNTkKtpKUDJnaxGB8lzHY4aN0rPrYo0eIiY+10TCDLXCm7o4jWd+vHn1zqBGA== dependencies: - "@chakra-ui/clickable" "1.0.5" - "@chakra-ui/descendant" "1.0.8" - "@chakra-ui/hooks" "1.1.5" - "@chakra-ui/popper" "1.1.5" - "@chakra-ui/transition" "1.0.9" - "@chakra-ui/utils" "1.3.0" + "@chakra-ui/clickable" "1.0.6" + "@chakra-ui/descendant" "1.0.9" + "@chakra-ui/hooks" "1.2.0" + "@chakra-ui/popper" "2.0.0" + "@chakra-ui/transition" "1.1.0" + "@chakra-ui/utils" "1.4.0" -"@chakra-ui/modal@1.6.1": - version "1.6.1" - resolved "https://registry.yarnpkg.com/@chakra-ui/modal/-/modal-1.6.1.tgz#40faefe2b94f7da630ef774e8ba5f99b51090862" - integrity sha512-Eu2jp2aXrrmaLe+xAqdRQRXdmsMmQMu52gvunYRDoR94oGlKyhixMrxTZrATjq5+JNCV1D1QbwFhh+GvZhjbcg== - dependencies: - "@chakra-ui/close-button" "1.1.2" - "@chakra-ui/focus-lock" "1.1.1" - "@chakra-ui/hooks" "1.1.5" - "@chakra-ui/portal" "1.1.2" - "@chakra-ui/transition" "1.0.9" - "@chakra-ui/utils" "1.3.0" +"@chakra-ui/modal@1.7.0": + version "1.7.0" + resolved "https://registry.yarnpkg.com/@chakra-ui/modal/-/modal-1.7.0.tgz#801ff8dbb27e4f740739768500973e6097536ba4" + integrity sha512-TxXcGbMdNkiD4WU55FLshAk4XlHvoUraKAJ1rcI5AcNc/DXuW8wy9P1t8Ho0iGgq1xRWQjzDgDfgBOh98fO7fQ== + dependencies: + "@chakra-ui/close-button" "1.1.3" + "@chakra-ui/focus-lock" "1.1.2" + "@chakra-ui/hooks" "1.2.0" + "@chakra-ui/portal" "1.1.3" + "@chakra-ui/transition" "1.1.0" + "@chakra-ui/utils" "1.4.0" aria-hidden "^1.1.1" react-remove-scroll "2.4.1" -"@chakra-ui/number-input@1.1.2": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@chakra-ui/number-input/-/number-input-1.1.2.tgz#fd330133769db8fdf64f869d0cde720a19bc13cc" - integrity sha512-bSiX1cgE7tTJpuaYAqzhheU3F6S+WjlxY7tsJ842KoN8aooMFaB6VClkkjZAQfvCeXLXyYNlDi+FZwlwQq8j3Q== +"@chakra-ui/number-input@1.1.3": + version "1.1.3" + resolved "https://registry.yarnpkg.com/@chakra-ui/number-input/-/number-input-1.1.3.tgz#6035270af9e9177cb64521a94f9ab76b067e4eb3" + integrity sha512-vISd0obMse4EWVkowIyTE4JUfhzrPCjQkzdv9PgLEk1b5F5TVcKMCDAwPlsHhQGciaKnXRaMcOCTVeRS8oUoUQ== dependencies: - "@chakra-ui/counter" "1.0.8" - "@chakra-ui/form-control" "1.2.2" - "@chakra-ui/hooks" "1.1.5" - "@chakra-ui/icon" "1.1.2" - "@chakra-ui/utils" "1.3.0" + "@chakra-ui/counter" "1.0.9" + "@chakra-ui/form-control" "1.2.3" + "@chakra-ui/hooks" "1.2.0" + "@chakra-ui/icon" "1.1.3" + "@chakra-ui/utils" "1.4.0" -"@chakra-ui/pin-input@1.4.1": - version "1.4.1" - resolved "https://registry.yarnpkg.com/@chakra-ui/pin-input/-/pin-input-1.4.1.tgz#3e676c5707b58d2f166ea7dc2445830d64cbe4bf" - integrity sha512-0DY+q71VBbjmLh/soUcibj9Mi5+Jr0eKugRP8hzx1ywoSqmNVa4hhw12cC4xeEaO242Ec3752D7TLGCSZFD04Q== +"@chakra-ui/pin-input@1.4.2": + version "1.4.2" + resolved "https://registry.yarnpkg.com/@chakra-ui/pin-input/-/pin-input-1.4.2.tgz#01b461210eca8b7878b2a49b9cdf5c96a1f9082d" + integrity sha512-7aS2IP67hfV1agnji8FemBJl1M7zqu2X5DTIy2NxuTNqU3/H8douMwVnNUrjavSltve4OYycxY8gPK/h9u4/uQ== dependencies: - "@chakra-ui/descendant" "1.0.8" - "@chakra-ui/hooks" "1.1.5" - "@chakra-ui/utils" "1.3.0" + "@chakra-ui/descendant" "1.0.9" + "@chakra-ui/hooks" "1.2.0" + "@chakra-ui/utils" "1.4.0" -"@chakra-ui/popover@1.2.3": - version "1.2.3" - resolved "https://registry.yarnpkg.com/@chakra-ui/popover/-/popover-1.2.3.tgz#7e2f64169276c318b092de3ad1b632289eeabe8e" - integrity sha512-hA44W7GwDpQWep5R+4lRkN9C3FE7zW+cTYuJXNNx2CwpUOWCdTAaPwx4LJb+yLmTMbRXDKSR1KrkzWK3C6Abcg== +"@chakra-ui/popover@1.3.0": + version "1.3.0" + resolved "https://registry.yarnpkg.com/@chakra-ui/popover/-/popover-1.3.0.tgz#df32ede440f36c26fadc3dcc754955aa9ddbd462" + integrity sha512-iVDe1A8BU4kImXKdOnaHnA0swcMXkkBYMxuTyhXVqvJwb+8uZgZ1OUdvYOgSEk/dA+idMQX7pINE0snw0W7USg== dependencies: - "@chakra-ui/close-button" "1.1.2" - "@chakra-ui/hooks" "1.1.5" - "@chakra-ui/popper" "1.1.5" - "@chakra-ui/portal" "1.1.2" - "@chakra-ui/transition" "1.0.9" - "@chakra-ui/utils" "1.3.0" + "@chakra-ui/close-button" "1.1.3" + "@chakra-ui/hooks" "1.2.0" + "@chakra-ui/popper" "2.0.0" + "@chakra-ui/portal" "1.1.3" + "@chakra-ui/transition" "1.1.0" + "@chakra-ui/utils" "1.4.0" -"@chakra-ui/popper@1.1.5": - version "1.1.5" - resolved "https://registry.yarnpkg.com/@chakra-ui/popper/-/popper-1.1.5.tgz#0284969e5755a5faab27da446791b2bdef1ae0ac" - integrity sha512-Z7NpOMoycnELII8TTEC1FmMqAIO69xJ8pyNL4lo/ifNyTngIuEQw4o40U7rfA4E7A6AM24WmlgwH0lxFOfOqqg== +"@chakra-ui/popper@2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@chakra-ui/popper/-/popper-2.0.0.tgz#48cf74a434cd4e292b9304b65ef8a391b149ddd9" + integrity sha512-7qm1Zms9YOhtx48Zo8TvZ5pw0Uz91gK7D+2B2Lu9W3hNovDUA0/UuHcSnDf9iBZAQqwNkyYakXtJsYPOEdhbkw== dependencies: - "@chakra-ui/hooks" "1.1.5" - "@chakra-ui/utils" "1.3.0" + "@chakra-ui/utils" "1.4.0" "@popperjs/core" "2.4.4" - dequal "2.0.2" -"@chakra-ui/portal@1.1.2": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@chakra-ui/portal/-/portal-1.1.2.tgz#b1da6d6d91a7e34033ae74aa7d53760470cbc702" - integrity sha512-cGZgevVcSC59egLn++nJ2RifrDGzVSZfY8DDpDaoeb7hLqa9w+zWjcMq54+BTHDIJ4PeRjZtnk1gl16KG4V8iQ== +"@chakra-ui/portal@1.1.3": + version "1.1.3" + resolved "https://registry.yarnpkg.com/@chakra-ui/portal/-/portal-1.1.3.tgz#a74f4f98540c3b6c3fbcb143831292374664af14" + integrity sha512-8CvC7YCFcvJV+LyuEP6EDMEZKl+C0u4A6L6JeUbkGNMqY3QcWhg+7+v0jrnq4ZvpZdpBSlzqRYX+dvZTJkZYjg== dependencies: - "@chakra-ui/hooks" "1.1.5" - "@chakra-ui/utils" "1.3.0" + "@chakra-ui/hooks" "1.2.0" + "@chakra-ui/utils" "1.4.0" -"@chakra-ui/progress@1.1.2": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@chakra-ui/progress/-/progress-1.1.2.tgz#8e6c9f963672c915ae422c980bf4658b6620345a" - integrity sha512-ndxmLq5SF/yaOmDaGPeBuaDelDu3mtf0nzJcCKTVGjLIksTNUt71puQNsTEHGXp089wJlFKJLKAx2i0UqgasWA== +"@chakra-ui/progress@1.1.3": + version "1.1.3" + resolved "https://registry.yarnpkg.com/@chakra-ui/progress/-/progress-1.1.3.tgz#80d61c3dbbb35a1e692d209fb370583b584c2ddf" + integrity sha512-SLxLfDAFQ1kiIp8SKwTUPaCldiHKgLg8F9exOt0KDX0nUen/u1PLvpeFKh+rX850ahn+/3tpIUOg1gPq4S9USw== dependencies: - "@chakra-ui/theme-tools" "1.1.0" - "@chakra-ui/utils" "1.3.0" + "@chakra-ui/theme-tools" "1.1.1" + "@chakra-ui/utils" "1.4.0" -"@chakra-ui/radio@1.2.4": - version "1.2.4" - resolved "https://registry.yarnpkg.com/@chakra-ui/radio/-/radio-1.2.4.tgz#377471a9ee002158977a8920c432689f0c3277f7" - integrity sha512-nf9haPcD2jX50XbaiSP5mJUZUUP0wKJSeHeCgMsPtTSMjmQcsr8V8qZ3s31uvy3K17KfPhxChtH7MvDHBNDHsQ== +"@chakra-ui/radio@1.2.5": + version "1.2.5" + resolved "https://registry.yarnpkg.com/@chakra-ui/radio/-/radio-1.2.5.tgz#0ef48110c702616cbd15949082b462e21029a7d7" + integrity sha512-GtcNlDaD3cWBCY8Yr6S5AZgryY/w2rxL4b+uli2l3X1dlh1313IyOGR4HHpBKDGa+vr2tGUJA9f9oO4bhfGLPg== dependencies: - "@chakra-ui/form-control" "1.2.2" - "@chakra-ui/hooks" "1.1.5" - "@chakra-ui/utils" "1.3.0" - "@chakra-ui/visually-hidden" "1.0.5" + "@chakra-ui/form-control" "1.2.3" + "@chakra-ui/hooks" "1.2.0" + "@chakra-ui/utils" "1.4.0" + "@chakra-ui/visually-hidden" "1.0.6" "@chakra-ui/react@^1.3.4": - version "1.3.4" - resolved "https://registry.yarnpkg.com/@chakra-ui/react/-/react-1.3.4.tgz#4701feddffc6d632a1b5bb16302c71057759609e" - integrity sha512-RLj+PswKfJ14TTxhmqQeXmCREwoF36QivH0hKt6mu9BeGux5su8hbxcRwfZc+QW7pqyHIy17w0AqVGn79U7uDA== - dependencies: - "@chakra-ui/accordion" "1.1.3" - "@chakra-ui/alert" "1.1.2" - "@chakra-ui/avatar" "1.1.3" - "@chakra-ui/breadcrumb" "1.1.2" - "@chakra-ui/button" "1.1.3" - "@chakra-ui/checkbox" "1.2.4" - "@chakra-ui/close-button" "1.1.2" - "@chakra-ui/control-box" "1.0.5" - "@chakra-ui/counter" "1.0.8" + version "1.4.1" + resolved "https://registry.yarnpkg.com/@chakra-ui/react/-/react-1.4.1.tgz#95caaaea65373dce2d64ad9803dad56bfdcf0315" + integrity sha512-jbFWV++0yhTJF92CulRDgkNkoMe589fdrc3YUyAh5ZqadNVB3qJoJxaTZLFV8gl8EUMCOu0Fu+EQkSoqkpzKGw== + dependencies: + "@chakra-ui/accordion" "1.1.4" + "@chakra-ui/alert" "1.1.3" + "@chakra-ui/avatar" "1.1.4" + "@chakra-ui/breadcrumb" "1.1.3" + "@chakra-ui/button" "1.1.4" + "@chakra-ui/checkbox" "1.3.0" + "@chakra-ui/close-button" "1.1.3" + "@chakra-ui/control-box" "1.0.6" + "@chakra-ui/counter" "1.0.9" "@chakra-ui/css-reset" "1.0.0" - "@chakra-ui/editable" "1.1.2" - "@chakra-ui/form-control" "1.2.2" - "@chakra-ui/hooks" "1.1.5" - "@chakra-ui/icon" "1.1.2" - "@chakra-ui/image" "1.0.8" - "@chakra-ui/input" "1.1.3" - "@chakra-ui/layout" "1.3.2" - "@chakra-ui/live-region" "1.0.5" - "@chakra-ui/media-query" "1.0.6" - "@chakra-ui/menu" "1.1.3" - "@chakra-ui/modal" "1.6.1" - "@chakra-ui/number-input" "1.1.2" - "@chakra-ui/pin-input" "1.4.1" - "@chakra-ui/popover" "1.2.3" - "@chakra-ui/popper" "1.1.5" - "@chakra-ui/portal" "1.1.2" - "@chakra-ui/progress" "1.1.2" - "@chakra-ui/radio" "1.2.4" - "@chakra-ui/select" "1.1.2" - "@chakra-ui/skeleton" "1.1.4" - "@chakra-ui/slider" "1.1.2" - "@chakra-ui/spinner" "1.1.2" - "@chakra-ui/stat" "1.1.2" - "@chakra-ui/switch" "1.1.4" - "@chakra-ui/system" "1.4.0" - "@chakra-ui/table" "1.1.2" - "@chakra-ui/tabs" "1.2.0" - "@chakra-ui/tag" "1.1.2" - "@chakra-ui/textarea" "1.1.2" - "@chakra-ui/theme" "1.7.0" - "@chakra-ui/toast" "1.1.12" - "@chakra-ui/tooltip" "1.1.3" - "@chakra-ui/transition" "1.0.9" - "@chakra-ui/utils" "1.3.0" - "@chakra-ui/visually-hidden" "1.0.5" - -"@chakra-ui/select@1.1.2": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@chakra-ui/select/-/select-1.1.2.tgz#bd7bbe7be19a68b7d28eb4c809a1e6f1f271c635" - integrity sha512-iN1oarmhBGdLc/MuExyymPsbGBKXTcw/ubkhTgYydGbiyOo8LkYtpzK4tfXyAJEI1banH5kZ7/DxLACqplaamw== + "@chakra-ui/editable" "1.1.3" + "@chakra-ui/form-control" "1.2.3" + "@chakra-ui/hooks" "1.2.0" + "@chakra-ui/icon" "1.1.3" + "@chakra-ui/image" "1.0.9" + "@chakra-ui/input" "1.1.4" + "@chakra-ui/layout" "1.3.3" + "@chakra-ui/live-region" "1.0.6" + "@chakra-ui/media-query" "1.0.7" + "@chakra-ui/menu" "1.2.0" + "@chakra-ui/modal" "1.7.0" + "@chakra-ui/number-input" "1.1.3" + "@chakra-ui/pin-input" "1.4.2" + "@chakra-ui/popover" "1.3.0" + "@chakra-ui/popper" "2.0.0" + "@chakra-ui/portal" "1.1.3" + "@chakra-ui/progress" "1.1.3" + "@chakra-ui/radio" "1.2.5" + "@chakra-ui/select" "1.1.3" + "@chakra-ui/skeleton" "1.1.6" + "@chakra-ui/slider" "1.1.3" + "@chakra-ui/spinner" "1.1.3" + "@chakra-ui/stat" "1.1.3" + "@chakra-ui/switch" "1.1.5" + "@chakra-ui/system" "1.5.1" + "@chakra-ui/table" "1.1.3" + "@chakra-ui/tabs" "1.2.1" + "@chakra-ui/tag" "1.1.3" + "@chakra-ui/textarea" "1.1.3" + "@chakra-ui/theme" "1.7.1" + "@chakra-ui/toast" "1.2.0" + "@chakra-ui/tooltip" "1.2.0" + "@chakra-ui/transition" "1.1.0" + "@chakra-ui/utils" "1.4.0" + "@chakra-ui/visually-hidden" "1.0.6" + +"@chakra-ui/select@1.1.3": + version "1.1.3" + resolved "https://registry.yarnpkg.com/@chakra-ui/select/-/select-1.1.3.tgz#9ca61436a2881960b576f4968ffedb7a77d499cb" + integrity sha512-t5x7rM29aSc0LHMIvXMRvyNhufG5t+MNhZZZyxCnV8ySN/8IfpA01umGGn7Pz1qmME3gUw1Jz1paMvik0WTFsA== dependencies: - "@chakra-ui/form-control" "1.2.2" - "@chakra-ui/utils" "1.3.0" + "@chakra-ui/form-control" "1.2.3" + "@chakra-ui/utils" "1.4.0" -"@chakra-ui/skeleton@1.1.4": - version "1.1.4" - resolved "https://registry.yarnpkg.com/@chakra-ui/skeleton/-/skeleton-1.1.4.tgz#0eaf47d3be25a33c767346e383d721e7a4c06e92" - integrity sha512-Dp4dmZ1TJRcqoXmRoGQxWI8q2yEPpTCeJquKmmJlca1pHghu9iIfLNdeJ0uZTw5xvm/PO0LIlNc8Kkyw1thMxQ== +"@chakra-ui/skeleton@1.1.6": + version "1.1.6" + resolved "https://registry.yarnpkg.com/@chakra-ui/skeleton/-/skeleton-1.1.6.tgz#2a3cceb101574a7dfaad4489bb73714a17a0a1d2" + integrity sha512-wzm9fCaLhTTO0i0bjlEc2PrVRgZcOEpxvJth9sFHOwd1aYGDigMhmi3azOzfWMeVcAoAkHBOkwa4o1BosD69rQ== dependencies: - "@chakra-ui/hooks" "1.1.5" - "@chakra-ui/media-query" "1.0.6" - "@chakra-ui/system" "1.4.0" - "@chakra-ui/utils" "1.3.0" + "@chakra-ui/hooks" "1.2.0" + "@chakra-ui/media-query" "1.0.7" + "@chakra-ui/system" "1.5.1" + "@chakra-ui/utils" "1.4.0" -"@chakra-ui/slider@1.1.2": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@chakra-ui/slider/-/slider-1.1.2.tgz#2ba4995660b4ae60523c67c2399dba8c651607f1" - integrity sha512-ag5Dr6sXeakcQa+XLtpCM7GVwcZIjhFJt+DkdbxO2dVjUmtJSsAvCBdCUzM63HFzsZTD61RaOXSMWWLcyZ6Rrw== +"@chakra-ui/slider@1.1.3": + version "1.1.3" + resolved "https://registry.yarnpkg.com/@chakra-ui/slider/-/slider-1.1.3.tgz#e55740fff98269d2dccd03b8b8542389cf0b0122" + integrity sha512-stEzjnJBd2r3XAKOPSnufHHKAHrsuU2BQelJUzCpGxJtFYFSGvfNLMgQj3LjuqaIDjbOxSU4mkJYZ/KS+kXwFA== dependencies: - "@chakra-ui/hooks" "1.1.5" - "@chakra-ui/utils" "1.3.0" + "@chakra-ui/hooks" "1.2.0" + "@chakra-ui/utils" "1.4.0" -"@chakra-ui/spinner@1.1.2": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@chakra-ui/spinner/-/spinner-1.1.2.tgz#65214402a6ff7761318a2eddb4a0d65661e75a6f" - integrity sha512-WZj+XcxXjWPWSjoJoeFupy2RDVqAVqIxFAylFolQ3mhmIAYDSBN6t1lUsSKxl8fWK1lSOAGxTOlvsI6eobMM/w== +"@chakra-ui/spinner@1.1.3": + version "1.1.3" + resolved "https://registry.yarnpkg.com/@chakra-ui/spinner/-/spinner-1.1.3.tgz#97e96acfe4fdb2b3e41d2ddd01e14ca923b1cb37" + integrity sha512-kJZ7PhJ3wQdwSvfcUHUf3w8xULO3xepjKQZ3GV+p/F+xxl1/i+kvBIvDqGpDNHK3Fke27DW9jfOUMVqFa3Jrpw== dependencies: - "@chakra-ui/utils" "1.3.0" - "@chakra-ui/visually-hidden" "1.0.5" + "@chakra-ui/utils" "1.4.0" + "@chakra-ui/visually-hidden" "1.0.6" -"@chakra-ui/stat@1.1.2": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@chakra-ui/stat/-/stat-1.1.2.tgz#212b0a68a6dde42cbf5fb6abb226bc7b104463ae" - integrity sha512-Iw61iJY8ffx1miB+BOOw6Mnnuic3lD8tepxn8GdUrr+6liBreYbbEe9+VGZeaeU5qx9FDpjr8EtwzzHjKe/X7g== +"@chakra-ui/stat@1.1.3": + version "1.1.3" + resolved "https://registry.yarnpkg.com/@chakra-ui/stat/-/stat-1.1.3.tgz#9d7418bb0240c7401b39dc14303cc97ff244745a" + integrity sha512-ewEuymCAIKs9g+gS5s+kXmxdggrP5rBaFEIcQ/EPEO4zXFkTbPPPf1ZbUECfq53qrGnNzYZSIx2hqGaW2k0c3w== dependencies: - "@chakra-ui/icon" "1.1.2" - "@chakra-ui/utils" "1.3.0" - "@chakra-ui/visually-hidden" "1.0.5" + "@chakra-ui/icon" "1.1.3" + "@chakra-ui/utils" "1.4.0" + "@chakra-ui/visually-hidden" "1.0.6" -"@chakra-ui/styled-system@1.8.0": - version "1.8.0" - resolved "https://registry.yarnpkg.com/@chakra-ui/styled-system/-/styled-system-1.8.0.tgz#b34f561b9c5e0acc495ca4c6b45da69cd690b329" - integrity sha512-EKtVaZSW3drOxNBV/Cl3Int3YN9o7BJ9WOsPBcXfdXjAsk5XORN74Mw8HVHPvcheW0ERTlOFWlTSv4Ot/U8GXg== +"@chakra-ui/styled-system@1.9.1": + version "1.9.1" + resolved "https://registry.yarnpkg.com/@chakra-ui/styled-system/-/styled-system-1.9.1.tgz#4541a3944c64fc2c2705685abe76faaf1591c7f3" + integrity sha512-LS/1oW2BP1/wY+GbBpoMTdb1ezVx1P32zR52OUn4ANogsDcB/7/DMMj6tuS4yaZEZ9AKliORI+p0CD9P/ETyQA== dependencies: - "@chakra-ui/utils" "1.3.0" + "@chakra-ui/utils" "1.4.0" csstype "^3.0.6" -"@chakra-ui/switch@1.1.4": - version "1.1.4" - resolved "https://registry.yarnpkg.com/@chakra-ui/switch/-/switch-1.1.4.tgz#f42f061dd10dbc0fd71b5132d27410dc5d129097" - integrity sha512-fqGq7s9Pn4r5o0h9PMM2U60ScJF/6tWefCYqftIiWYNAQek+Iak0sug/JRo2/tbKJq1Vd2kheHVo4eVYRqUVCQ== +"@chakra-ui/switch@1.1.5": + version "1.1.5" + resolved "https://registry.yarnpkg.com/@chakra-ui/switch/-/switch-1.1.5.tgz#9d7ae9f20047cdeafbd3ed01f8432e7e2e659b37" + integrity sha512-zezIVpoAIKaspZShnkMkveT6wa7N8VIhlZhcLl32zaBr5W865t8eGM0uFcNpGu6FU881bMR9dRvK/S7OXnzqTw== dependencies: - "@chakra-ui/checkbox" "1.2.4" - "@chakra-ui/utils" "1.3.0" + "@chakra-ui/checkbox" "1.3.0" + "@chakra-ui/utils" "1.4.0" -"@chakra-ui/system@1.4.0": - version "1.4.0" - resolved "https://registry.yarnpkg.com/@chakra-ui/system/-/system-1.4.0.tgz#d459656c3009b6339bb8992cf900712d8de73731" - integrity sha512-AvfrF/eVMYJEw5im6sXFcbkxCYQP6RrFcpSjcQ4aD71tfnqDCrlr6oQ8P+fugbrUpGSERoVWpQs1rK4LMTWNLg== +"@chakra-ui/system@1.5.1": + version "1.5.1" + resolved "https://registry.yarnpkg.com/@chakra-ui/system/-/system-1.5.1.tgz#ab668a5b5d8f8899cd18c14d59546dff7df4537f" + integrity sha512-rbuCWqWHYvZ4Y89WsSkMvTPFP8usz3JN0/a36nsLzQ0YLG0Ehi6jUhjDSTbm9pQXh8cUpojGGNFtKW79HyIoXQ== dependencies: - "@chakra-ui/color-mode" "1.1.1" - "@chakra-ui/styled-system" "1.8.0" - "@chakra-ui/utils" "1.3.0" + "@chakra-ui/color-mode" "1.1.2" + "@chakra-ui/styled-system" "1.9.1" + "@chakra-ui/utils" "1.4.0" react-fast-compare "3.2.0" -"@chakra-ui/table@1.1.2": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@chakra-ui/table/-/table-1.1.2.tgz#13fd5de1b4ce1befe096f0db75278856ddec1119" - integrity sha512-buaWwNS8VCx3T6izWjmULuIIQKDitI6kObthGIhmG3OsJgkSuzKk5xypK4Oa1b2H03gQT/jGeuwfv8ejjzjITw== +"@chakra-ui/table@1.1.3": + version "1.1.3" + resolved "https://registry.yarnpkg.com/@chakra-ui/table/-/table-1.1.3.tgz#d7463c59afa3d702d5e93a22ebdf803d4da4601c" + integrity sha512-vP4AJ+rXtB9l3YnlCvhdfbGzrs18lq9Nq9fDRNf8p8u2vtuiSTVar/kHXUO/JBI0NCpUfdAkELTxH3LonO7z4w== dependencies: - "@chakra-ui/utils" "1.3.0" + "@chakra-ui/utils" "1.4.0" -"@chakra-ui/tabs@1.2.0": - version "1.2.0" - resolved "https://registry.yarnpkg.com/@chakra-ui/tabs/-/tabs-1.2.0.tgz#65d83dde70668cc64d8b0016d0fed44b7f062c45" - integrity sha512-9yorwUbbEqL6b+vDGvbAmOJTucLpC+pHxKCWFHub1DuZNXHKfqVZcBYYKWPVs0ydzVHCwxd0RRmhqtWAP8n0vQ== +"@chakra-ui/tabs@1.2.1": + version "1.2.1" + resolved "https://registry.yarnpkg.com/@chakra-ui/tabs/-/tabs-1.2.1.tgz#606168281ff8fe9916ccf2f79fa454136d5d2ae0" + integrity sha512-+nzHORo+obsZ3582qp8585WdCc9tRGu9I21edsaPwaYy3HJJNYh3/qXIaqW9xKbMuQmdPjGJlPN+sLWlda0gbw== dependencies: - "@chakra-ui/clickable" "1.0.5" - "@chakra-ui/descendant" "1.0.8" - "@chakra-ui/hooks" "1.1.5" - "@chakra-ui/utils" "1.3.0" + "@chakra-ui/clickable" "1.0.6" + "@chakra-ui/descendant" "1.0.9" + "@chakra-ui/hooks" "1.2.0" + "@chakra-ui/utils" "1.4.0" -"@chakra-ui/tag@1.1.2": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@chakra-ui/tag/-/tag-1.1.2.tgz#bd8056f70106e7b84baf3e251d6364de444c7f9c" - integrity sha512-oEGQSll4is63lulTkRwsL4QAOo6iHYaOL0gqSRQmHmHfeDBVNdxvaedN3mnxPPP8oFO8pKGJ9LqcaHe1pj7rTg== +"@chakra-ui/tag@1.1.3": + version "1.1.3" + resolved "https://registry.yarnpkg.com/@chakra-ui/tag/-/tag-1.1.3.tgz#bacda9ad0890028a4f31247b380942049a9c1467" + integrity sha512-qc4AfYDobBp7JhRcbIzmJal5BruJCZlvbcS/Ee8RPHUFIj9ZuaYB3OiZzGyScJxEzNch6kTxOSl5hooj+UYvig== dependencies: - "@chakra-ui/icon" "1.1.2" - "@chakra-ui/utils" "1.3.0" + "@chakra-ui/icon" "1.1.3" + "@chakra-ui/utils" "1.4.0" -"@chakra-ui/textarea@1.1.2": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@chakra-ui/textarea/-/textarea-1.1.2.tgz#41ef1a26b77d087d7191b80302acbb26c9582434" - integrity sha512-yltPY89AbFYKIvyVhj3h2yb5sglkxF6WigNmV/vn3LB2ZTxM0ozTj1rdgPC6LW48UIzRcW9F70L5N77SW0UfAQ== +"@chakra-ui/textarea@1.1.3": + version "1.1.3" + resolved "https://registry.yarnpkg.com/@chakra-ui/textarea/-/textarea-1.1.3.tgz#fa029bdb8ac917d061f2ef5fd2c55c67868c62d1" + integrity sha512-/lWWBP3JBhiQMjdthKi4kRiMz7M22xZPshaWFYJJ/SNKZVdSExhQDQmG6ytUcSvI4nNRV8N5kFkZMP8MZ7j35g== dependencies: - "@chakra-ui/form-control" "1.2.2" - "@chakra-ui/utils" "1.3.0" + "@chakra-ui/form-control" "1.2.3" + "@chakra-ui/utils" "1.4.0" -"@chakra-ui/theme-tools@1.1.0": - version "1.1.0" - resolved "https://registry.yarnpkg.com/@chakra-ui/theme-tools/-/theme-tools-1.1.0.tgz#3f3599aae6fe1b7e0d28d6e518b25e1247270897" - integrity sha512-o1rJBJj3vbhq4C02Ld9Ay1xXKrfphQAqDacowKQlRu8G5DL+EvH/v0RGLkdJQd1ORoUsUZrZBvOcXO9dQt9DeQ== +"@chakra-ui/theme-tools@1.1.1": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@chakra-ui/theme-tools/-/theme-tools-1.1.1.tgz#c5e2fda87fb9602f637ea8360e4084503faa4f2c" + integrity sha512-ECW8IF0DxMxQgwgn4SPKPbHXhp1fnz50WtInNTvyXHvFZSst0ANn8k+WRAMb9qXolzuZw0sFjhd8U59rtIIpwA== dependencies: - "@chakra-ui/utils" "1.3.0" + "@chakra-ui/utils" "1.4.0" "@types/tinycolor2" "1.4.2" tinycolor2 "1.4.2" -"@chakra-ui/theme@1.7.0": - version "1.7.0" - resolved "https://registry.yarnpkg.com/@chakra-ui/theme/-/theme-1.7.0.tgz#a341ff46aa7d3c5c15e6f9969689d01383827d06" - integrity sha512-3GqSBOfKrgyq2SZ+Rv6YEFOvhKlyUPh4yCsPq0JpT5fbZjaVPS4zkcoUSqcNzEOyDI4Fb5NYtqhdGWVnLOPDcg== - dependencies: - "@chakra-ui/theme-tools" "1.1.0" - "@chakra-ui/utils" "1.3.0" - -"@chakra-ui/toast@1.1.12": - version "1.1.12" - resolved "https://registry.yarnpkg.com/@chakra-ui/toast/-/toast-1.1.12.tgz#465d9a74bdd54cdc981371d7513830a8c3999992" - integrity sha512-mLc8mB5mp34UXGD+XKmBYUUiB1dIZtD9AXkLbfeTwMPIsm52vCMk73CnZByr26G8HZM1wXLQF3/UO/1PzeWOug== - dependencies: - "@chakra-ui/alert" "1.1.2" - "@chakra-ui/close-button" "1.1.2" - "@chakra-ui/hooks" "1.1.5" - "@chakra-ui/theme" "1.7.0" - "@chakra-ui/transition" "1.0.9" - "@chakra-ui/utils" "1.3.0" +"@chakra-ui/theme@1.7.1": + version "1.7.1" + resolved "https://registry.yarnpkg.com/@chakra-ui/theme/-/theme-1.7.1.tgz#71491d9610cfe3558b56ec92c4037e2a5de9528a" + integrity sha512-O1bAt9mbVdSF8u2QGewtA//rr4Vldo6p7tm3zFXm4vRfY0gQdvx3oEDxBWZX/KFRZbWV8c2IPmP0/fy4LWM0Ig== + dependencies: + "@chakra-ui/theme-tools" "1.1.1" + "@chakra-ui/utils" "1.4.0" + +"@chakra-ui/toast@1.2.0": + version "1.2.0" + resolved "https://registry.yarnpkg.com/@chakra-ui/toast/-/toast-1.2.0.tgz#ebe43c611b81bfb5ed67ba462630f75e96610f1b" + integrity sha512-KbCofqnZRmCGaOtdctI8Q3GUXy5nzpnv+hKCWApC0i3GQononcXU5b/FYre+MM+egp9nqtds9u8/NhC1CCn4xg== + dependencies: + "@chakra-ui/alert" "1.1.3" + "@chakra-ui/close-button" "1.1.3" + "@chakra-ui/hooks" "1.2.0" + "@chakra-ui/theme" "1.7.1" + "@chakra-ui/transition" "1.1.0" + "@chakra-ui/utils" "1.4.0" "@reach/alert" "0.13.0" -"@chakra-ui/tooltip@1.1.3": - version "1.1.3" - resolved "https://registry.yarnpkg.com/@chakra-ui/tooltip/-/tooltip-1.1.3.tgz#531d598e8df2e5515164b568b2997f036f6541ff" - integrity sha512-wYEezJnMkYT23mwV+NS4cwG5+xOgoPdQ2YBDaOAOHGmX5wX4gZ9YjC9t17MunvFt4hknvjMhtujUSjaYHMSqxA== +"@chakra-ui/tooltip@1.2.0": + version "1.2.0" + resolved "https://registry.yarnpkg.com/@chakra-ui/tooltip/-/tooltip-1.2.0.tgz#4d5d784a954b33c3be05e2277c0b1d97e6ab1ff3" + integrity sha512-u6PA8amBTmUNbeCs73+A/BEhJwvK7BJz9UlPA3IwAXup2upzQlRWqgb1fYYME+fl4S7UZNGmjExBlanLq4ZxSQ== dependencies: - "@chakra-ui/hooks" "1.1.5" - "@chakra-ui/popper" "1.1.5" - "@chakra-ui/portal" "1.1.2" - "@chakra-ui/utils" "1.3.0" - "@chakra-ui/visually-hidden" "1.0.5" + "@chakra-ui/hooks" "1.2.0" + "@chakra-ui/popper" "2.0.0" + "@chakra-ui/portal" "1.1.3" + "@chakra-ui/utils" "1.4.0" + "@chakra-ui/visually-hidden" "1.0.6" -"@chakra-ui/transition@1.0.9": - version "1.0.9" - resolved "https://registry.yarnpkg.com/@chakra-ui/transition/-/transition-1.0.9.tgz#a842f1ccfce24c585394084d93778bbf9cb9b694" - integrity sha512-ry7i3VY8xhfWxrOcHs4W7hpyT4HsL3P4qe8jbZICzVxuWL7rtYb26P+yItGJeeujE53m2wKjXqrE8kdSivaMVg== +"@chakra-ui/transition@1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@chakra-ui/transition/-/transition-1.1.0.tgz#7ac05f7dd2e817f321099b54d654cb1ce82b9035" + integrity sha512-cCOTfxvRF8zNfXF9R4CYBiCx24fzWvpAVbQrkjA+A4oUSFYwuqIt72H9fnCOCAh/q84NNKVFuXqtUCawuFjxcg== dependencies: - "@chakra-ui/hooks" "1.1.5" - "@chakra-ui/utils" "1.3.0" + "@chakra-ui/hooks" "1.2.0" + "@chakra-ui/utils" "1.4.0" -"@chakra-ui/utils@1.3.0": - version "1.3.0" - resolved "https://registry.yarnpkg.com/@chakra-ui/utils/-/utils-1.3.0.tgz#7bfe8ffd4a8613ec562f51d27a08c4c430b88132" - integrity sha512-MezHglxjRaAZIQDVAi1uOMVNd4a0zKGmV4cvp8+r3xTmGMU/XJCC5J49qufEqLLJbR31Y7UiCRTz86O66s1r5A== +"@chakra-ui/utils@1.4.0": + version "1.4.0" + resolved "https://registry.yarnpkg.com/@chakra-ui/utils/-/utils-1.4.0.tgz#4b20c522141d68dc62b5c7be929bb6d1596db190" + integrity sha512-ND7NIilpncnkzcNBnAySGBFpOXb3urO1X9esSY0+M5zXiq+VSSfK9JuoJd3ilvV4Dbwgzil7hMAELBuHme4uTg== dependencies: "@types/lodash.mergewith" "4.6.6" "@types/object-assign" "4.0.30" css-box-model "1.2.1" lodash.mergewith "4.6.2" -"@chakra-ui/visually-hidden@1.0.5": - version "1.0.5" - resolved "https://registry.yarnpkg.com/@chakra-ui/visually-hidden/-/visually-hidden-1.0.5.tgz#dcbd32a1eacb19e9636d2242e55aca5914dc3011" - integrity sha512-EIRZ081CgfFqhnOuhTfoluoqaKtx1id3/oCLk9QrJcB3s3r3PWexg41/z0WUaQzeQSPobw3hz5M5QxymmrZ4UQ== +"@chakra-ui/visually-hidden@1.0.6": + version "1.0.6" + resolved "https://registry.yarnpkg.com/@chakra-ui/visually-hidden/-/visually-hidden-1.0.6.tgz#c47578afbbd9396996c4ee3d7ce05d91f00a43c1" + integrity sha512-PM1QOGabhMAQyfNUq05GKSUr85dJdQGeQZVO6Gw8QOJ29+J/xS6Qpyvvn358OrWVYQjw3eEQ15ALEGXb/HJfeA== dependencies: - "@chakra-ui/utils" "1.3.0" + "@chakra-ui/utils" "1.4.0" "@cnakazawa/watch@^1.0.3": version "1.0.4" @@ -2046,6 +2044,11 @@ dependencies: "@types/node" "*" +"@types/history@*": + version "4.7.8" + resolved "https://registry.yarnpkg.com/@types/history/-/history-4.7.8.tgz#49348387983075705fe8f4e02fb67f7daaec4934" + integrity sha512-S78QIYirQcUoo6UJZx9CSP0O2ix9IaeAXwQi26Rhr/+mg7qqPy8TzaxHSUut7eGjL8WmLccT7/MXf304WjqHcA== + "@types/html-minifier-terser@^5.0.0": version "5.1.1" resolved "https://registry.yarnpkg.com/@types/html-minifier-terser/-/html-minifier-terser-5.1.1.tgz#3c9ee980f1a10d6021ae6632ca3e79ca2ec4fb50" @@ -2150,6 +2153,23 @@ dependencies: "@types/react" "*" +"@types/react-router-dom@^5.1.7": + version "5.1.7" + resolved "https://registry.yarnpkg.com/@types/react-router-dom/-/react-router-dom-5.1.7.tgz#a126d9ea76079ffbbdb0d9225073eb5797ab7271" + integrity sha512-D5mHD6TbdV/DNHYsnwBTv+y73ei+mMjrkGrla86HthE4/PVvL1J94Bu3qABU+COXzpL23T1EZapVVpwHuBXiUg== + dependencies: + "@types/history" "*" + "@types/react" "*" + "@types/react-router" "*" + +"@types/react-router@*": + version "5.1.12" + resolved "https://registry.yarnpkg.com/@types/react-router/-/react-router-5.1.12.tgz#0f300e09468e7aed86e18241c90238c18c377e51" + integrity sha512-0bhXQwHYfMeJlCh7mGhc0VJTRm0Gk+Z8T00aiP4702mDUuLs9SMhnd2DitpjWFjdOecx2UXtICK14H9iMnziGA== + dependencies: + "@types/history" "*" + "@types/react" "*" + "@types/react@*", "@types/react@^17.0.3": version "17.0.3" resolved "https://registry.yarnpkg.com/@types/react/-/react-17.0.3.tgz#ba6e215368501ac3826951eef2904574c262cc79" @@ -2823,6 +2843,13 @@ axe-core@^4.0.2: resolved "https://registry.yarnpkg.com/axe-core/-/axe-core-4.1.3.tgz#64a4c85509e0991f5168340edc4bedd1ceea6966" integrity sha512-vwPpH4Aj4122EW38mxO/fxhGKtwWTMLDIJfZ1He0Edbtjcfna/R3YB67yVhezUMzqc3Jr3+Ii50KRntlENL4xQ== +axios@^0.21.1: + version "0.21.1" + resolved "https://registry.yarnpkg.com/axios/-/axios-0.21.1.tgz#22563481962f4d6bde9a76d516ef0e5d3c09b2b8" + integrity sha512-dKQiRHxGD9PPRIUNIWvZhPTPpl1rf/OxTYKsqKUDjBwYylTvV7SjSHJb9ratfyzM6wCdLCOYLzs73qpg5c4iGA== + dependencies: + follow-redirects "^1.10.0" + axobject-query@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/axobject-query/-/axobject-query-2.2.0.tgz#943d47e10c0b704aa42275e20edf3722648989be" @@ -3004,6 +3031,11 @@ bcrypt-pbkdf@^1.0.0: dependencies: tweetnacl "^0.14.3" +big-integer@^1.6.16: + version "1.6.48" + resolved "https://registry.yarnpkg.com/big-integer/-/big-integer-1.6.48.tgz#8fd88bd1632cba4a1c8c3e3d7159f08bb95b4b9e" + integrity sha512-j51egjPa7/i+RdiRuJbPdJ2FIUYYPhvYLjzoYbcMMm62ooO6F94fETG4MTs46zPAF9Brs04OajboA/qTGuz78w== + big.js@^5.2.2: version "5.2.2" resolved "https://registry.yarnpkg.com/big.js/-/big.js-5.2.2.tgz#65f0af382f578bcdc742bd9c281e9cb2d7768328" @@ -3105,6 +3137,19 @@ braces@^3.0.1, braces@~3.0.2: dependencies: fill-range "^7.0.1" +broadcast-channel@^3.4.1: + version "3.5.3" + resolved "https://registry.yarnpkg.com/broadcast-channel/-/broadcast-channel-3.5.3.tgz#c75c39d923ae8af6284a893bfdc8bd3996d2dd2d" + integrity sha512-OLOXfwReZa2AAAh9yOUyiALB3YxBe0QpThwwuyRHLgpl8bSznSDmV6Mz7LeBJg1VZsMcDcNMy7B53w12qHrIhQ== + dependencies: + "@babel/runtime" "^7.7.2" + detect-node "^2.0.4" + js-sha3 "0.8.0" + microseconds "0.2.0" + nano-time "1.0.0" + rimraf "3.0.2" + unload "2.2.0" + brorand@^1.0.1, brorand@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" @@ -4015,11 +4060,6 @@ depd@~1.1.2: resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" integrity sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak= -dequal@2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/dequal/-/dequal-2.0.2.tgz#85ca22025e3a87e65ef75a7a437b35284a7e319d" - integrity sha512-q9K8BlJVxK7hQYqa6XISGmBZbtQQWVXSrRrWreHC94rMt1QL/Impruc+7p2CYSYuVIUr+YCt6hjrs1kkdJRTug== - des.js@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/des.js/-/des.js-1.0.1.tgz#5382142e1bdc53f85d86d53e5f4aa7deb91e0843" @@ -4043,10 +4083,10 @@ detect-newline@^3.0.0: resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-3.1.0.tgz#576f5dfc63ae1a192ff192d8ad3af6308991b651" integrity sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA== -detect-node-es@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/detect-node-es/-/detect-node-es-1.0.0.tgz#c0318b9e539a5256ca780dd9575c9345af05b8ed" - integrity sha512-S4AHriUkTX9FoFvL4G8hXDcx6t3gp2HpfCza3Q0v6S78gul2hKWifLQbeW+ZF89+hSm2ZIc/uF3J97ZgytgTRg== +detect-node-es@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/detect-node-es/-/detect-node-es-1.1.0.tgz#163acdf643330caa0b4cd7c21e7ee7755d6fa493" + integrity sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ== detect-node@^2.0.4: version "2.0.4" @@ -4193,6 +4233,11 @@ dot-case@^3.0.4: no-case "^3.0.4" tslib "^2.0.3" +dotenv@^8.2.0: + version "8.2.0" + resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-8.2.0.tgz#97e619259ada750eea3e4ea3e26bceea5424b16a" + integrity sha512-8sJ78ElpbDJBHNeBzUbUVLsqKdccaa/BXF1uPTw3GrvQTBgrQrtObr2mUrE38vzYd8cEv+m/JBfDLioYcfXoaw== + duplexify@^3.4.2, duplexify@^3.6.0: version "3.7.1" resolved "https://registry.yarnpkg.com/duplexify/-/duplexify-3.7.1.tgz#2a4df5317f6ccfd91f86d6fd25d8d8a103b88309" @@ -5013,7 +5058,7 @@ focus-lock@^0.8.1: dependencies: tslib "^1.9.3" -follow-redirects@^1.0.0: +follow-redirects@^1.0.0, follow-redirects@^1.10.0: version "1.13.3" resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.13.3.tgz#e5598ad50174c1bc4e872301e82ac2cd97f90267" integrity sha512-DUgl6+HDzB0iEptNQEXLx/KhTmDb8tZUHSeLqpnjpknR70H0nC2t9N73BK6fN4hOvJ84pKlIQVQ4k5FFlBedKA== @@ -5420,6 +5465,25 @@ hey-listen@^1.0.8: resolved "https://registry.yarnpkg.com/hey-listen/-/hey-listen-1.0.8.tgz#8e59561ff724908de1aa924ed6ecc84a56a9aa68" integrity sha512-COpmrF2NOg4TBWUJ5UVyaCU2A88wEMkUPK4hNqyCkqHbxT92BbvfjoSozkAIIm6XhicGlJHhFdullInrdhwU8Q== +history@^4.9.0: + version "4.10.1" + resolved "https://registry.yarnpkg.com/history/-/history-4.10.1.tgz#33371a65e3a83b267434e2b3f3b1b4c58aad4cf3" + integrity sha512-36nwAD620w12kuzPAsyINPWJqlNbij+hpK1k9XRloDtym8mxzGYl2c17LnV6IAGB2Dmg4tEa7G7DlawS0+qjew== + dependencies: + "@babel/runtime" "^7.1.2" + loose-envify "^1.2.0" + resolve-pathname "^3.0.0" + tiny-invariant "^1.0.2" + tiny-warning "^1.0.0" + value-equal "^1.0.1" + +history@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/history/-/history-5.0.0.tgz#0cabbb6c4bbf835addb874f8259f6d25101efd08" + integrity sha512-3NyRMKIiFSJmIPdq7FxkNMJkQ7ZEtVblOQ38VtKaA0zZMW1Eo6Q6W8oDKEflr1kNNTItSnk4JMCO1deeSgbLLg== + dependencies: + "@babel/runtime" "^7.7.6" + hmac-drbg@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1" @@ -5429,7 +5493,7 @@ hmac-drbg@^1.0.1: minimalistic-assert "^1.0.0" minimalistic-crypto-utils "^1.0.1" -hoist-non-react-statics@^3.3.0, hoist-non-react-statics@^3.3.1: +hoist-non-react-statics@^3.1.0, hoist-non-react-statics@^3.3.0, hoist-non-react-statics@^3.3.1: version "3.3.2" resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz#ece0acaf71d62c2969c2ec59feff42a4b1a85b45" integrity sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw== @@ -6053,6 +6117,11 @@ is-wsl@^2.2.0: dependencies: is-docker "^2.0.0" +isarray@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf" + integrity sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8= + isarray@1.0.0, isarray@^1.0.0, isarray@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" @@ -6499,6 +6568,11 @@ jest@^26: import-local "^3.0.2" jest-cli "^26.6.3" +js-sha3@0.8.0: + version "0.8.0" + resolved "https://registry.yarnpkg.com/js-sha3/-/js-sha3-0.8.0.tgz#b9b7a5da73afad7dedd0f8c463954cbde6818840" + integrity sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q== + "js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" @@ -6589,7 +6663,7 @@ json-stable-stringify-without-jsonify@^1.0.1: resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" integrity sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE= -json-stringify-safe@~5.0.1: +json-stringify-safe@^5.0.1, json-stringify-safe@~5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus= @@ -6786,6 +6860,11 @@ lodash.omit@^4.5.0: resolved "https://registry.yarnpkg.com/lodash.omit/-/lodash.omit-4.5.0.tgz#6eb19ae5a1ee1dd9df0b969e66ce0b7fa30b5e60" integrity sha1-brGa5aHuHdnfC5aeZs4Lf6MLXmA= +lodash.set@^4.3.2: + version "4.3.2" + resolved "https://registry.yarnpkg.com/lodash.set/-/lodash.set-4.3.2.tgz#d8757b1da807dde24816b0d6a84bea1a76230b23" + integrity sha1-2HV7HagH3eJIFrDWqEvqGnYjCyM= + lodash.sortby@^4.7.0: version "4.7.0" resolved "https://registry.yarnpkg.com/lodash.sortby/-/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438" @@ -6801,7 +6880,7 @@ loglevel@^1.6.8: resolved "https://registry.yarnpkg.com/loglevel/-/loglevel-1.7.1.tgz#005fde2f5e6e47068f935ff28573e125ef72f197" integrity sha512-Hesni4s5UkWkwCGJMQGAh71PaLUmKFM60dHvq0zi/vDhhrzuk+4GgNbTXJ12YYQJn6ZKBDNIjYcuQGKudvqrIw== -loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.4.0: +loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.2.0, loose-envify@^1.3.1, loose-envify@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q== @@ -6873,6 +6952,14 @@ map-visit@^1.0.0: dependencies: object-visit "^1.0.0" +match-sorter@^6.0.2: + version "6.3.0" + resolved "https://registry.yarnpkg.com/match-sorter/-/match-sorter-6.3.0.tgz#454a1b31ed218cddbce6231a0ecb5fdc549fed01" + integrity sha512-efYOf/wUpNb8FgNY+cOD2EIJI1S5I7YPKsw0LBp7wqPh5pmMS6i/wr3ZWwfwrAw1NvqTA2KUReVRWDX84lUcOQ== + dependencies: + "@babel/runtime" "^7.12.5" + remove-accents "0.4.2" + md5.js@^1.3.4: version "1.3.5" resolved "https://registry.yarnpkg.com/md5.js/-/md5.js-1.3.5.tgz#b5d07b8e3216e3e27cd728d72f70d1e6a342005f" @@ -6950,6 +7037,11 @@ micromatch@^4.0.2: braces "^3.0.1" picomatch "^2.0.5" +microseconds@0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/microseconds/-/microseconds-0.2.0.tgz#233b25f50c62a65d861f978a4a4f8ec18797dc39" + integrity sha512-n7DHHMjR1avBbSpsTBj6fmMGh2AGrifVV4e+WYc3Q9lO+xnSZ3NyhcBND3vzzatt05LFhoKFRxrIyklmLlUtyA== + miller-rabin@^4.0.0: version "4.0.1" resolved "https://registry.yarnpkg.com/miller-rabin/-/miller-rabin-4.0.1.tgz#f080351c865b0dc562a8462966daa53543c78a4d" @@ -6997,6 +7089,14 @@ min-indent@^1.0.0: resolved "https://registry.yarnpkg.com/min-indent/-/min-indent-1.0.1.tgz#a63f681673b30571fbe8bc25686ae746eefa9869" integrity sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg== +mini-create-react-context@^0.4.0: + version "0.4.1" + resolved "https://registry.yarnpkg.com/mini-create-react-context/-/mini-create-react-context-0.4.1.tgz#072171561bfdc922da08a60c2197a497cc2d1d5e" + integrity sha512-YWCYEmd5CQeHGSAKrYvXgmzzkrvssZcuuQDDeqkT+PziKGMgE+0MCCtcKbROzocGBG1meBLl2FotlRwf4gAzbQ== + dependencies: + "@babel/runtime" "^7.12.1" + tiny-warning "^1.0.3" + mini-css-extract-plugin@^0.12.0: version "0.12.0" resolved "https://registry.yarnpkg.com/mini-css-extract-plugin/-/mini-css-extract-plugin-0.12.0.tgz#ddeb74fd6304ca9f99c1db74acc7d5b507705454" @@ -7110,6 +7210,13 @@ nan@^2.12.1: resolved "https://registry.yarnpkg.com/nan/-/nan-2.14.2.tgz#f5376400695168f4cc694ac9393d0c9585eeea19" integrity sha512-M2ufzIiINKCuDfBSAUr1vWQ+vuVcA9kqx8JJUsbQi6yf1uGRyb7HfpdfUr5qLXf3B/t8dPvcjhKMmlfnP47EzQ== +nano-time@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/nano-time/-/nano-time-1.0.0.tgz#b0554f69ad89e22d0907f7a12b0993a5d96137ef" + integrity sha1-sFVPaa2J4i0JB/ehKwmTpdlhN+8= + dependencies: + big-integer "^1.6.16" + nanomatch@^1.2.9: version "1.2.13" resolved "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.13.tgz#b87a8aa4fc0de8fe6be88895b38983ff265bd119" @@ -7198,6 +7305,16 @@ no-case@^3.0.4: lower-case "^2.0.2" tslib "^2.0.3" +nock@^13.0.11: + version "13.0.11" + resolved "https://registry.yarnpkg.com/nock/-/nock-13.0.11.tgz#ba733252e720897ca50033205c39db0c7470f331" + integrity sha512-sKZltNkkWblkqqPAsjYW0bm3s9DcHRPiMOyKO/PkfJ+ANHZ2+LA2PLe22r4lLrKgXaiSaDQwW3qGsJFtIpQIeQ== + dependencies: + debug "^4.1.0" + json-stringify-safe "^5.0.1" + lodash.set "^4.3.2" + propagate "^2.0.0" + node-forge@^0.10.0: version "0.10.0" resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-0.10.0.tgz#32dea2afb3e9926f02ee5ce8794902691a676bf3" @@ -7712,6 +7829,13 @@ path-to-regexp@0.1.7: resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" integrity sha1-32BBeABfUi8V60SQ5yR6G/qmf4w= +path-to-regexp@^1.7.0: + version "1.8.0" + resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-1.8.0.tgz#887b3ba9d84393e87a0a0b9f4cb756198b53548a" + integrity sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA== + dependencies: + isarray "0.0.1" + path-type@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/path-type/-/path-type-2.0.0.tgz#f012ccb8415b7096fc2daa1054c3d72389594c73" @@ -7963,6 +8087,11 @@ prop-types@^15.6.1, prop-types@^15.6.2, prop-types@^15.7.2: object-assign "^4.1.1" react-is "^16.8.1" +propagate@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/propagate/-/propagate-2.0.1.tgz#40cdedab18085c792334e64f0ac17256d38f9a45" + integrity sha512-vGrhOavPSTz4QVNuBNdcNXePNdNMaO1xj9yBeH1ScQPjk/rhg9sSlCXPhMkFuaNNW/syTvYqsnbIJxMBfRbbag== + proxy-addr@~2.0.5: version "2.0.6" resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.6.tgz#fdc2336505447d3f2f2c638ed272caf614bbb2bf" @@ -8149,21 +8278,35 @@ react-hot-loader@^4: shallowequal "^1.1.0" source-map "^0.7.3" -react-is@^16.7.0, react-is@^16.8.1: - version "16.13.1" - resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4" - integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== +react-icons@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/react-icons/-/react-icons-4.2.0.tgz#6dda80c8a8f338ff96a1851424d63083282630d0" + integrity sha512-rmzEDFt+AVXRzD7zDE21gcxyBizD/3NqjbX6cmViAgdqfJ2UiLer8927/QhhrXQV7dEj/1EGuOTPp7JnLYVJKQ== -react-is@^17.0.1: +"react-is@^16.12.0 || ^17.0.0", react-is@^17.0.1: version "17.0.1" resolved "https://registry.yarnpkg.com/react-is/-/react-is-17.0.1.tgz#5b3531bd76a645a4c9fb6e693ed36419e3301339" integrity sha512-NAnt2iGDXohE5LI7uBnLnqvLQMtzhkiAOLXTmv+qnF9Ky7xAPcX8Up/xWIhxvLVGJvuLiNc4xQLtuqDRzb4fSA== +react-is@^16.6.0, react-is@^16.7.0, react-is@^16.8.1: + version "16.13.1" + resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4" + integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== + react-lifecycles-compat@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz#4f1a273afdfc8f3488a8c516bfda78f872352362" integrity sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA== +react-query@^3.12.3: + version "3.12.3" + resolved "https://registry.yarnpkg.com/react-query/-/react-query-3.12.3.tgz#5665bf798f8e4a0df686333dd9cc8f90ff6eb74d" + integrity sha512-EKkN/10BL5q4bBf195+ZOpd4mkpAJ3Uj1sFPc4ZoxmWXLsf/ABrLU2iTWYcfgN/iWhshhO3SKL32RYNYl86Nsg== + dependencies: + "@babel/runtime" "^7.5.5" + broadcast-channel "^3.4.1" + match-sorter "^6.0.2" + react-remove-scroll-bar@^2.1.0: version "2.2.0" resolved "https://registry.yarnpkg.com/react-remove-scroll-bar/-/react-remove-scroll-bar-2.2.0.tgz#d4d545a7df024f75d67e151499a6ab5ac97c8cdd" @@ -8183,6 +8326,43 @@ react-remove-scroll@2.4.1: use-callback-ref "^1.2.3" use-sidecar "^1.0.1" +react-router-dom@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/react-router-dom/-/react-router-dom-5.2.0.tgz#9e65a4d0c45e13289e66c7b17c7e175d0ea15662" + integrity sha512-gxAmfylo2QUjcwxI63RhQ5G85Qqt4voZpUXSEqCwykV0baaOTQDR1f0PmY8AELqIyVc0NEZUj0Gov5lNGcXgsA== + dependencies: + "@babel/runtime" "^7.1.2" + history "^4.9.0" + loose-envify "^1.3.1" + prop-types "^15.6.2" + react-router "5.2.0" + tiny-invariant "^1.0.2" + tiny-warning "^1.0.0" + +react-router@5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/react-router/-/react-router-5.2.0.tgz#424e75641ca8747fbf76e5ecca69781aa37ea293" + integrity sha512-smz1DUuFHRKdcJC0jobGo8cVbhO3x50tCL4icacOlcwDOEQPq4TMqwx3sY1TP+DvtTgz4nm3thuo7A+BK2U0Dw== + dependencies: + "@babel/runtime" "^7.1.2" + history "^4.9.0" + hoist-non-react-statics "^3.1.0" + loose-envify "^1.3.1" + mini-create-react-context "^0.4.0" + path-to-regexp "^1.7.0" + prop-types "^15.6.2" + react-is "^16.6.0" + tiny-invariant "^1.0.2" + tiny-warning "^1.0.0" + +react-shallow-renderer@^16.13.1: + version "16.14.1" + resolved "https://registry.yarnpkg.com/react-shallow-renderer/-/react-shallow-renderer-16.14.1.tgz#bf0d02df8a519a558fd9b8215442efa5c840e124" + integrity sha512-rkIMcQi01/+kxiTE9D3fdS959U1g7gs+/rborw++42m1O9FAQiNI/UNRZExVUoAOprn4umcXf+pFRou8i4zuBg== + dependencies: + object-assign "^4.1.1" + react-is "^16.12.0 || ^17.0.0" + react-style-singleton@^2.1.0: version "2.1.1" resolved "https://registry.yarnpkg.com/react-style-singleton/-/react-style-singleton-2.1.1.tgz#ce7f90b67618be2b6b94902a30aaea152ce52e66" @@ -8192,6 +8372,16 @@ react-style-singleton@^2.1.0: invariant "^2.2.4" tslib "^1.0.0" +react-test-renderer@^17.0.1: + version "17.0.1" + resolved "https://registry.yarnpkg.com/react-test-renderer/-/react-test-renderer-17.0.1.tgz#3187e636c3063e6ae498aedf21ecf972721574c7" + integrity sha512-/dRae3mj6aObwkjCcxZPlxDFh73XZLgvwhhyON2haZGUEhiaY5EjfAdw+d/rQmlcFwdTpMXCSGVk374QbCTlrA== + dependencies: + object-assign "^4.1.1" + react-is "^17.0.1" + react-shallow-renderer "^16.13.1" + scheduler "^0.20.1" + react@^16: version "16.14.0" resolved "https://registry.yarnpkg.com/react/-/react-16.14.0.tgz#94d776ddd0aaa37da3eda8fc5b6b18a4c9a3114d" @@ -8367,6 +8557,11 @@ relateurl@0.2.x, relateurl@^0.2.7: resolved "https://registry.yarnpkg.com/relateurl/-/relateurl-0.2.7.tgz#54dbf377e51440aca90a4cd274600d3ff2d888a9" integrity sha1-VNvzd+UUQKypCkzSdGANP/LYiKk= +remove-accents@0.4.2: + version "0.4.2" + resolved "https://registry.yarnpkg.com/remove-accents/-/remove-accents-0.4.2.tgz#0a43d3aaae1e80db919e07ae254b285d9e1c7bb5" + integrity sha1-CkPTqq4egNuRngeuJUsoXZ4ce7U= + remove-trailing-separator@^1.0.1: version "1.1.0" resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef" @@ -8492,6 +8687,11 @@ resolve-from@^5.0.0: resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69" integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw== +resolve-pathname@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/resolve-pathname/-/resolve-pathname-3.0.0.tgz#99d02224d3cf263689becbb393bc560313025dcd" + integrity sha512-C7rARubxI8bXFNB/hqcp/4iUeIXJhJZvFPFPiSPRnhU5UPxzMFIl+2E6yY6c4k9giDJAhtV+enfA+G89N6Csng== + resolve-url@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" @@ -8520,6 +8720,13 @@ reusify@^1.0.4: resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== +rimraf@3.0.2, rimraf@^3.0.0, rimraf@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" + integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== + dependencies: + glob "^7.1.3" + rimraf@^2.5.4, rimraf@^2.6.3: version "2.7.1" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" @@ -8527,13 +8734,6 @@ rimraf@^2.5.4, rimraf@^2.6.3: dependencies: glob "^7.1.3" -rimraf@^3.0.0, rimraf@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" - integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== - dependencies: - glob "^7.1.3" - ripemd160@^2.0.0, ripemd160@^2.0.1: version "2.0.2" resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-2.0.2.tgz#a1c1a6f624751577ba5d07914cbc92850585890c" @@ -8613,6 +8813,14 @@ scheduler@^0.19.1: loose-envify "^1.1.0" object-assign "^4.1.1" +scheduler@^0.20.1: + version "0.20.1" + resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.20.1.tgz#da0b907e24026b01181ecbc75efdc7f27b5a000c" + integrity sha512-LKTe+2xNJBNxu/QhHvDR14wUXHRQbVY5ZOYpOGWRzhydZUqrLb2JBvLPY7cAqFmqrWuDED0Mjk7013SZiOz6Bw== + dependencies: + loose-envify "^1.1.0" + object-assign "^4.1.1" + schema-utils@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-1.0.0.tgz#0b79a93204d7b600d4b2850d1f66c2a34951c770" @@ -9356,11 +9564,16 @@ timers-browserify@^2.0.4: dependencies: setimmediate "^1.0.4" -tiny-invariant@^1.0.6: +tiny-invariant@^1.0.2, tiny-invariant@^1.0.6: version "1.1.0" resolved "https://registry.yarnpkg.com/tiny-invariant/-/tiny-invariant-1.1.0.tgz#634c5f8efdc27714b7f386c35e6760991d230875" integrity sha512-ytxQvrb1cPc9WBEI/HSeYYoGD0kWnGEOR8RY6KomWLBVhqz0RgTwVO9dLrGz7dC+nN9llyI7OKAgRq8Vq4ZBSw== +tiny-warning@^1.0.0, tiny-warning@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/tiny-warning/-/tiny-warning-1.0.3.tgz#94a30db453df4c643d0fd566060d60a875d84754" + integrity sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA== + tinycolor2@1.4.2: version "1.4.2" resolved "https://registry.yarnpkg.com/tinycolor2/-/tinycolor2-1.4.2.tgz#3f6a4d1071ad07676d7fa472e1fac40a719d8803" @@ -9638,6 +9851,14 @@ universalify@^0.1.0, universalify@^0.1.2: resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== +unload@2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/unload/-/unload-2.2.0.tgz#ccc88fdcad345faa06a92039ec0f80b488880ef7" + integrity sha512-B60uB5TNBLtN6/LsgAf3udH9saB5p7gqJwcFfbOEZ8BcBHnGwCf6G/TGiEqkRAxX7zAFIUtzdrXQSdL3Q/wqNA== + dependencies: + "@babel/runtime" "^7.6.2" + detect-node "^2.0.4" + unpipe@1.0.0, unpipe@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" @@ -9704,11 +9925,11 @@ use-callback-ref@^1.2.1, use-callback-ref@^1.2.3: integrity sha512-gN3vgMISAgacF7sqsLPByqoePooY3n2emTH59Ur5d/M8eg4WTWu1xp8i8DHjohftIyEx0S08RiYxbffr4j8Peg== use-sidecar@^1.0.1: - version "1.0.4" - resolved "https://registry.yarnpkg.com/use-sidecar/-/use-sidecar-1.0.4.tgz#38398c3723727f9f924bed2343dfa3db6aaaee46" - integrity sha512-A5ggIS3/qTdxCAlcy05anO2/oqXOfpmxnpRE1Jm+fHHtCvUvNSZDGqgOSAXPriBVAcw2fMFFkh5v5KqrFFhCMA== + version "1.0.5" + resolved "https://registry.yarnpkg.com/use-sidecar/-/use-sidecar-1.0.5.tgz#ffff2a17c1df42e348624b699ba6e5c220527f2b" + integrity sha512-k9jnrjYNwN6xYLj1iaGhonDghfvmeTmYjAiGvOr7clwKfPjMXJf4/HOr7oT5tJwYafgp2tG2l3eZEOfoELiMcA== dependencies: - detect-node-es "^1.0.0" + detect-node-es "^1.1.0" tslib "^1.9.3" use@^3.1.0: @@ -9785,6 +10006,11 @@ validate-npm-package-license@^3.0.1: spdx-correct "^3.0.0" spdx-expression-parse "^3.0.0" +value-equal@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/value-equal/-/value-equal-1.0.1.tgz#1e0b794c734c5c0cade179c437d356d931a34d6c" + integrity sha512-NOJ6JZCAWr0zlxZt+xqCHNTEKOsrks2HQd4MqhP1qy4z1SkbEP467eNx6TgDKXMvUOb+OENfJCZwM+16n7fRfw== + vary@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" diff --git a/breeze-complete b/breeze-complete index 9c9f575805710..ecb7b87658d3c 100644 --- a/breeze-complete +++ b/breeze-complete @@ -137,8 +137,6 @@ sort-in-the-wild sort-spelling-wordlist stylelint trailing-whitespace -ui-lint -ui-test update-breeze-file update-extras update-local-yml-file diff --git a/chart/tests/test_git_sync_scheduler.py b/chart/tests/test_git_sync_scheduler.py index 68129fc2ca303..151a6f27f4281 100644 --- a/chart/tests/test_git_sync_scheduler.py +++ b/chart/tests/test_git_sync_scheduler.py @@ -57,7 +57,7 @@ def test_validate_the_git_sync_container_spec(self): "gitSync": { "repository": "test-registry/test-repo", "tag": "test-tag", - "pullPolicy": "Allways", + "pullPolicy": "Always", } }, "dags": { @@ -87,7 +87,7 @@ def test_validate_the_git_sync_container_spec(self): "name": "git-sync-test", "securityContext": {"runAsUser": 65533}, "image": "test-registry/test-repo:test-tag", - "imagePullPolicy": "Allways", + "imagePullPolicy": "Always", "env": [ {"name": "GIT_SYNC_REV", "value": "HEAD"}, {"name": "GIT_SYNC_BRANCH", "value": "test-branch"}, diff --git a/chart/tests/test_pod_template_file.py b/chart/tests/test_pod_template_file.py index f58fd3bb0f9d9..70a5d2db6abcf 100644 --- a/chart/tests/test_pod_template_file.py +++ b/chart/tests/test_pod_template_file.py @@ -55,7 +55,7 @@ def test_should_add_an_init_container_if_git_sync_is_true(self): "gitSync": { "repository": "test-registry/test-repo", "tag": "test-tag", - "pullPolicy": "Allways", + "pullPolicy": "Always", } }, "dags": { @@ -85,7 +85,7 @@ def test_should_add_an_init_container_if_git_sync_is_true(self): "name": "git-sync-test", "securityContext": {"runAsUser": 65533}, "image": "test-registry/test-repo:test-tag", - "imagePullPolicy": "Allways", + "imagePullPolicy": "Always", "env": [ {"name": "GIT_SYNC_REV", "value": "HEAD"}, {"name": "GIT_SYNC_BRANCH", "value": "test-branch"}, diff --git a/docs/apache-airflow/concepts.rst b/docs/apache-airflow/concepts.rst index 90da836cc4f7c..10d564488ebad 100644 --- a/docs/apache-airflow/concepts.rst +++ b/docs/apache-airflow/concepts.rst @@ -1350,6 +1350,12 @@ Here is what it may look like: :start-after: [START example_dag_cluster_policy] :end-before: [END example_dag_cluster_policy] + +.. note:: + + To avoid import cycles, if using ``DAG`` in type annotations in your cluster policy, be sure to import from ``airflow.models`` and not from ``airflow``. + + Task level cluster policy ----------------------------- For example, this function could apply a specific queue property when diff --git a/docs/exts/docs_build/fetch_inventories.py b/docs/exts/docs_build/fetch_inventories.py index da66d0217dab6..592e8184abf41 100644 --- a/docs/exts/docs_build/fetch_inventories.py +++ b/docs/exts/docs_build/fetch_inventories.py @@ -123,8 +123,8 @@ def fetch_inventories(): (path for _, _, path in to_download), ) failed, success = partition(lambda d: d[1], download_results) - failed, success = list(failed), list(failed) - print(f"Result: {len(success)}, success {len(failed)} failed") + failed, success = list(failed), list(success) + print(f"Result: {len(success)} success, {len(failed)} failed") if failed: print("Failed packages:") for pkg_no, (pkg_name, _) in enumerate(failed, start=1): diff --git a/docs/exts/docs_build/third_party_inventories.py b/docs/exts/docs_build/third_party_inventories.py index 27b461f7881e8..307fd391f26b3 100644 --- a/docs/exts/docs_build/third_party_inventories.py +++ b/docs/exts/docs_build/third_party_inventories.py @@ -20,7 +20,7 @@ 'celery': 'https://docs.celeryproject.org/en/stable', 'hdfs': 'https://hdfscli.readthedocs.io/en/latest', 'jinja2': 'https://jinja.palletsprojects.com/en/master', - 'mongodb': 'https://pymongo.readthedocs.io/en/stable/', + 'mongodb': 'https://pymongo.readthedocs.io/en/3.11.3', 'pandas': 'https://pandas.pydata.org/pandas-docs/stable', 'python': 'https://docs.python.org/3', 'requests': 'https://requests.readthedocs.io/en/master', diff --git a/scripts/ci/libraries/_initialization.sh b/scripts/ci/libraries/_initialization.sh index 310d6be7e5084..91f04ecc96876 100644 --- a/scripts/ci/libraries/_initialization.sh +++ b/scripts/ci/libraries/_initialization.sh @@ -202,6 +202,8 @@ function initialization::initialize_files_for_rebuild_check() { "airflow/www/package.json" "airflow/www/yarn.lock" "airflow/www/webpack.config.js" + "airflow/ui/package.json" + "airflow/ui/yarn.lock" ) } diff --git a/tests/cluster_policies/__init__.py b/tests/cluster_policies/__init__.py index 9d2818117187e..d395ec0982c04 100644 --- a/tests/cluster_policies/__init__.py +++ b/tests/cluster_policies/__init__.py @@ -18,10 +18,9 @@ from datetime import timedelta from typing import Callable, List -from airflow import DAG from airflow.configuration import conf from airflow.exceptions import AirflowClusterPolicyViolation -from airflow.models import TaskInstance +from airflow.models import DAG, TaskInstance from airflow.models.baseoperator import BaseOperator diff --git a/tests/providers/microsoft/azure/log/test_wasb_task_handler.py b/tests/providers/microsoft/azure/log/test_wasb_task_handler.py index 8362333737136..083d34df9aa97 100644 --- a/tests/providers/microsoft/azure/log/test_wasb_task_handler.py +++ b/tests/providers/microsoft/azure/log/test_wasb_task_handler.py @@ -98,7 +98,7 @@ def test_wasb_log_exists(self, mock_hook): @mock.patch("airflow.providers.microsoft.azure.hooks.wasb.WasbHook") def test_wasb_read(self, mock_hook): - mock_hook.return_value.read_file.return_value = 'Log line' + mock_hook.return_value.read_file.return_value = b'Log line' assert self.wasb_task_handler.wasb_read(self.remote_log_location) == "Log line" assert self.wasb_task_handler.read(self.ti) == ( [ @@ -146,6 +146,7 @@ def test_write_log(self, mock_log_exists, mock_wasb_read, mock_hook): def test_write_on_existing_log(self, mock_log_exists, mock_wasb_read, mock_hook): mock_log_exists.return_value = True mock_wasb_read.return_value = "old log" + self.wasb_task_handler.wasb_write('text', self.remote_log_location) mock_hook.return_value.load_string.assert_called_once_with( "old log\ntext", self.container_name, self.remote_log_location