From caa88b14914a0785f1990da4e405735670faa87b Mon Sep 17 00:00:00 2001 From: KangSan Lee <xylitol79@gmail.com> Date: Fri, 18 Aug 2023 17:54:36 +0900 Subject: [PATCH] =?UTF-8?q?=EB=B0=94=ED=86=A4=20v1.0.0=20=EB=A6=B4?= =?UTF-8?q?=EB=A6=AC=EC=A6=88=20(#423)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * webpack 초기 환경 설정 (#8) chore: 프로젝트 초기 환경 설정 * Layout 컴포넌트 구현 (#10) * assets: Pretendard 폰트 추가 * design: GlobalStyle 및 ResetStyle 적용 * feat: Header, Layout 컴포넌트 구현 * MSW 설정 (#17) * chore: 환경 변수 NODE_ENV 설정 * feat: msw 초기 설정 * Avartar, Tag, Button, Modal 컴포넌트 구현 (#20) * feat: Avatar 컴포넌트 구현 * feat: Button 컴포넌트 구현 * assets: close-icon-red svg 추가 * feat: Tag 컴포넌트 구현 * design: Button 디폴트 스타일 설정 * feat: Modal 컴포넌트 구현 * React Router 설정 (#23) * design: Layout background 제거 * feat: 페이지 라우팅 설정 * msw, tsconfig, Avatar 공통 변경사항 반영 (#27) * chore: json 파일을 import하기 위한 tsconfig 수정 * fix: msw dev에서만 작동하도록 수정 * design: Avatar 기본 사이즈 설정 * 러너 게시글 조회 페이지 구현 (#31) * feat: RunnerPostPage 구현 * assets: 채팅수, 조회수 아이콘 svg 추가 * feat: 러너 게시글 mock data 추가 * feat: RunnerPostPage api 요청 기능 추가 * refactor: PostTag 컴포넌트 분리 * 러너 게시물 생성 페이지 구현 (#33) * feat: InputBox 컴포넌트 구현 * feat: TagInput 컴포넌트 구현 * feat: Textarea 컴포넌트 구현 * feat: RunnerPostCreatePage 페이지 구현 * refactor: InputBox 컴포넌트 InputText Props 삭제 * refactor: props로state를 받도록 변경 * refactor: 입력 state관련 set 함수명 수정 --------- Co-authored-by: 상규 <tkdrb@sang-gyuui-MacBookPro.local> * 메인 페이지 구현 (#34) * chore: json 파일을 import하기 위한 tsconfig 수정 * fix: msw dev에서만 작동하도록 수정 * design: Avatar 기본 사이즈 설정 * feat: MainPage 구현 * fix: map key 오류 수정 * feat: RunnerPost 타입 추가 * feat: 러너가 올린 게시물 조회 msw 구현 * refactor: RunnerPost 타입 지정 * feat: Tag 컴포넌트 렌더링 추가 * refactor: mock data 네이밍 통일 * 구현한 페이지 라우터 연결 (#42) * feat: 구현한 페이지 라우터 연결 및 hook 분리 Co-authored-by: 에이든 <gyeongza@users.noreply.github.com> Co-authored-by: 남상규 <tkdrb12@users.noreply.github.com> * feat: 로고 클릭시 홈 이동 기능 추가 --------- Co-authored-by: 에이든 <gyeongza@users.noreply.github.com> Co-authored-by: 남상규 <tkdrb12@users.noreply.github.com> * 러너 글 목록 조회 API 변경에 따른 MainPage 수정 (#55) * fix: api 명세 변경에 따른 러너 글 타입 수정 * feat: 러너 글 목록 조회 api 변경에 따른 MainPage 수정 * API 요청 Endpoint 변경 (#69) * fix: dev server 새로고침 오류 수정 * refactor: index.html 경로 src 외부 public 폴더로 이동 * feat: api 엔드포인트 변경 dev server에서만 msw 적용하도록 변경 * 절대 경로 재설정 (#71) chore: import 절대경로 path 재설정 * 불필요한 환경 변수 플러그인 제거 (#73) fix: build 오류 수정 웹팩 dev 환경변수 플러그인 제거 * Label 컴포넌트 구현 (#88) feat: Label 컴포넌트 구현 * 서포터 선택 결과 페이지 구현 (#90) feat: 서포터 선택 결과 페이지 구현 * 메인 페이지 및 상세 게시글 리뷰 상태 라벨 추가 (#91) * feat: mockData에 reviewStatus 추가 * feat: reviewStatus 타입 및 Label text 추가 * feat: 메인 페이지에 리뷰 상태 Label 추가 * feat: 러너 게시글 상세 페이지에 리뷰 상태 Label 추가 * 서포터 선택 시 확인 모달창 구현 (#92) feat: 서포터 선택 시 확인 모달창 구현 * 서포터 선택 페이지 구현 (#103) * feat: 서포터 선택페이지 라우팅 추가 * asset: github-icon svg파일 추가 * feat: 서포터 선택 페이지 msw 핸들러 추가 * feat: SupporterSelectPage 페이지 컴포넌트 추가 * feat: 서포터 선택 페이지 관련 타입 추가 * feat: SupporterSelectItem, List 컴포넌트 추가 * feat: ConfirmModal 컴포넌트 Props 추가 * feat: RunnerPostCreatePage 페이지 컴포넌트 api 기능 제거 * fix: supportSelect 타입 오류 수정 * fix: 저장 누락 반영 --------- Co-authored-by: 상규 <tkdrb@sang-gyuui-MacBookPro.local> * CI를 위한 테스트 코드 작성 (#111) * chore: testing library react 및 jest 패키지 설정 * test: CI를 위한 컴포넌트 테스트코드 작성 * CI설정 with GitHub Actions (#113) * style: 팀 컨벤션에 맞게 프론트엔드 최상위 폴더명 변경 * chore: 프론트엔드 CI 설정 * ConfirmModal 컴포넌트 테스트코드 작성 (#116) * test: ConfirmModal 컴포넌트 테스트코드 작성 * fix: workflow -> workflows 수정 * fix: github action working directory 수정 * API 명세 변경에 따른 기능 추가 (#123) * fix: types 파일명 변경을 위한 파일 삭제 * feat: API 명세에 맞춰 타입 추가 및 mock data 변경 * feat: 러너 게시글 상세 페이지 삭제, 코드 보러가기 기능 추가 * style: 러너 상세 게시글 타입 이름 수정 * refactor: API 명세에 맞춘 타입을 import 하도록 변경 * 로그인 페이지 구현 (#124) * feat: 헤더에 로그인 버튼 클릭시 로그인 페이지로 이동하는 기능 추가 * feat: 로그인 페이지 컴포넌트 구현 * fix: asset경로 절대경로로 수정 --------- Co-authored-by: 상규 <tkdrb@sang-gyuui-MacBookPro.local> * 서포터 선택 목록 -> 글 생성할 때 띄우는 기능 구현 (#128) * feat: InputBox font-size, font-weight props 추가 * feat: 서포터 리스트 mockData 추가 * feat: 서포터 선택 목록 페이지를 모달 컴포넌트로 변경 * design: Textarea border 수정 * fix: TagInput을 form태그 안에 넣을 경우 submit이 되는 오류 수정 * feat: 서포터 선택 목록 모달 기능 구현 * fix: cherry-pick conflict 해결 * fix: type 오류 수정 * feat: 프론트엔드 로컬에서 백엔드 서버 api 요청을 위한 proxy 포트 설정 * feat: api 명세 변경에 따른 컴포넌트 props 수정 * 서버 api 엔드포인트 변경 (#133) * feat: 변경된 api 명세에 따른 msw uri 수정 * feat: 배포 서버 base url 수정 * feat: 삭제 확인 모달창 구현 * test: 확인 모달창 변경에 따른 테스트코드 작성 * 사용하지 않는 기능 숨기기 (#137) * design: Layout margin-bottom 추가 * design: 리뷰 진행중 라벨 디자인 추가 * feat: 준비중인 기능 알림 메시지 추가 * feat: 사용하지 않는 기능 주석 처리 * 프론트엔드 배포 작업 (#135) * webpack 초기 환경 설정 (#8) chore: 프로젝트 초기 환경 설정 * Layout 컴포넌트 구현 (#10) * assets: Pretendard 폰트 추가 * design: GlobalStyle 및 ResetStyle 적용 * feat: Header, Layout 컴포넌트 구현 * MSW 설정 (#17) * chore: 환경 변수 NODE_ENV 설정 * feat: msw 초기 설정 * Avartar, Tag, Button, Modal 컴포넌트 구현 (#20) * feat: Avatar 컴포넌트 구현 * feat: Button 컴포넌트 구현 * assets: close-icon-red svg 추가 * feat: Tag 컴포넌트 구현 * design: Button 디폴트 스타일 설정 * feat: Modal 컴포넌트 구현 * React Router 설정 (#23) * design: Layout background 제거 * feat: 페이지 라우팅 설정 * msw, tsconfig, Avatar 공통 변경사항 반영 (#27) * chore: json 파일을 import하기 위한 tsconfig 수정 * fix: msw dev에서만 작동하도록 수정 * design: Avatar 기본 사이즈 설정 * 러너 게시글 조회 페이지 구현 (#31) * feat: RunnerPostPage 구현 * assets: 채팅수, 조회수 아이콘 svg 추가 * feat: 러너 게시글 mock data 추가 * feat: RunnerPostPage api 요청 기능 추가 * refactor: PostTag 컴포넌트 분리 * 러너 게시물 생성 페이지 구현 (#33) * feat: InputBox 컴포넌트 구현 * feat: TagInput 컴포넌트 구현 * feat: Textarea 컴포넌트 구현 * feat: RunnerPostCreatePage 페이지 구현 * refactor: InputBox 컴포넌트 InputText Props 삭제 * refactor: props로state를 받도록 변경 * refactor: 입력 state관련 set 함수명 수정 --------- Co-authored-by: 상규 <tkdrb@sang-gyuui-MacBookPro.local> * 메인 페이지 구현 (#34) * chore: json 파일을 import하기 위한 tsconfig 수정 * fix: msw dev에서만 작동하도록 수정 * design: Avatar 기본 사이즈 설정 * feat: MainPage 구현 * fix: map key 오류 수정 * feat: RunnerPost 타입 추가 * feat: 러너가 올린 게시물 조회 msw 구현 * refactor: RunnerPost 타입 지정 * feat: Tag 컴포넌트 렌더링 추가 * refactor: mock data 네이밍 통일 * 구현한 페이지 라우터 연결 (#42) * feat: 구현한 페이지 라우터 연결 및 hook 분리 Co-authored-by: 에이든 <gyeongza@users.noreply.github.com> Co-authored-by: 남상규 <tkdrb12@users.noreply.github.com> * feat: 로고 클릭시 홈 이동 기능 추가 --------- Co-authored-by: 에이든 <gyeongza@users.noreply.github.com> Co-authored-by: 남상규 <tkdrb12@users.noreply.github.com> * 러너 글 목록 조회 API 변경에 따른 MainPage 수정 (#55) * fix: api 명세 변경에 따른 러너 글 타입 수정 * feat: 러너 글 목록 조회 api 변경에 따른 MainPage 수정 * API 요청 Endpoint 변경 (#69) * fix: dev server 새로고침 오류 수정 * refactor: index.html 경로 src 외부 public 폴더로 이동 * feat: api 엔드포인트 변경 dev server에서만 msw 적용하도록 변경 * 절대 경로 재설정 (#71) chore: import 절대경로 path 재설정 * 불필요한 환경 변수 플러그인 제거 (#73) fix: build 오류 수정 웹팩 dev 환경변수 플러그인 제거 * Label 컴포넌트 구현 (#88) feat: Label 컴포넌트 구현 * 서포터 선택 결과 페이지 구현 (#90) feat: 서포터 선택 결과 페이지 구현 * 메인 페이지 및 상세 게시글 리뷰 상태 라벨 추가 (#91) * feat: mockData에 reviewStatus 추가 * feat: reviewStatus 타입 및 Label text 추가 * feat: 메인 페이지에 리뷰 상태 Label 추가 * feat: 러너 게시글 상세 페이지에 리뷰 상태 Label 추가 * 서포터 선택 시 확인 모달창 구현 (#92) feat: 서포터 선택 시 확인 모달창 구현 * 서포터 선택 페이지 구현 (#103) * feat: 서포터 선택페이지 라우팅 추가 * asset: github-icon svg파일 추가 * feat: 서포터 선택 페이지 msw 핸들러 추가 * feat: SupporterSelectPage 페이지 컴포넌트 추가 * feat: 서포터 선택 페이지 관련 타입 추가 * feat: SupporterSelectItem, List 컴포넌트 추가 * feat: ConfirmModal 컴포넌트 Props 추가 * feat: RunnerPostCreatePage 페이지 컴포넌트 api 기능 제거 * fix: supportSelect 타입 오류 수정 * fix: 저장 누락 반영 --------- Co-authored-by: 상규 <tkdrb@sang-gyuui-MacBookPro.local> * CI를 위한 테스트 코드 작성 (#111) * chore: testing library react 및 jest 패키지 설정 * test: CI를 위한 컴포넌트 테스트코드 작성 * CI설정 with GitHub Actions (#113) * style: 팀 컨벤션에 맞게 프론트엔드 최상위 폴더명 변경 * chore: 프론트엔드 CI 설정 * ConfirmModal 컴포넌트 테스트코드 작성 (#116) * test: ConfirmModal 컴포넌트 테스트코드 작성 * fix: workflow -> workflows 수정 * fix: github action working directory 수정 * API 명세 변경에 따른 기능 추가 (#123) * fix: types 파일명 변경을 위한 파일 삭제 * feat: API 명세에 맞춰 타입 추가 및 mock data 변경 * feat: 러너 게시글 상세 페이지 삭제, 코드 보러가기 기능 추가 * style: 러너 상세 게시글 타입 이름 수정 * refactor: API 명세에 맞춘 타입을 import 하도록 변경 * 로그인 페이지 구현 (#124) * feat: 헤더에 로그인 버튼 클릭시 로그인 페이지로 이동하는 기능 추가 * feat: 로그인 페이지 컴포넌트 구현 * fix: asset경로 절대경로로 수정 --------- Co-authored-by: 상규 <tkdrb@sang-gyuui-MacBookPro.local> * 서포터 선택 목록 -> 글 생성할 때 띄우는 기능 구현 (#128) * feat: InputBox font-size, font-weight props 추가 * feat: 서포터 리스트 mockData 추가 * feat: 서포터 선택 목록 페이지를 모달 컴포넌트로 변경 * design: Textarea border 수정 * fix: TagInput을 form태그 안에 넣을 경우 submit이 되는 오류 수정 * feat: 서포터 선택 목록 모달 기능 구현 * fix: cherry-pick conflict 해결 * fix: type 오류 수정 * feat: 프론트엔드 로컬에서 백엔드 서버 api 요청을 위한 proxy 포트 설정 * feat: api 명세 변경에 따른 컴포넌트 props 수정 * 서버 api 엔드포인트 변경 (#133) * feat: 변경된 api 명세에 따른 msw uri 수정 * feat: 배포 서버 base url 수정 * feat: 삭제 확인 모달창 구현 * test: 확인 모달창 변경에 따른 테스트코드 작성 * 사용하지 않는 기능 숨기기 (#137) * design: Layout margin-bottom 추가 * design: 리뷰 진행중 라벨 디자인 추가 * feat: 준비중인 기능 알림 메시지 추가 * feat: 사용하지 않는 기능 주석 처리 --------- Co-authored-by: KangSan Lee <xylitol79@gmail.com> Co-authored-by: 남상규 <103256030+tkdrb12@users.noreply.github.com> Co-authored-by: 상규 <tkdrb@sang-gyuui-MacBookPro.local> Co-authored-by: 에이든 <gyeongza@users.noreply.github.com> Co-authored-by: 남상규 <tkdrb12@users.noreply.github.com> * webpack prod publicPath 재설정 (#153) * fix: 이미지 경로 및 새로고침 오류 수정 index.html base 태그 설정 * fix: base 태그 사용 대신 webpack publicPath 변경 상대경로를 사용하지 않도록 변경 * 게시물 상세 조회 페이지 디자인 수정 (#182) * feat: Button 컴포넌트 colorTheme 추가 * fix: 선택 완료 목록 height값 추가 * design: 게시물 상제 조회 디자인 수정 * feat: 글 생성 완료 멘트 수정 * 마이페이지 구현 (#185) * feat: 마이페이지 관련 타입추가 * feat: 마이페이지 관련 msw 데이터 및 핸들러 추가 * feat: MyPage 페이지 컴포넌트 추가 * feat: ProfileRunnerPostItem 컴포넌트 추가 * feat: ListFilter 컴포넌트 추가 * feat: 마이페이지 페이지 라우팅 추가 * refactor: list태그div에서ul로 수정 * fix : 페이지 상수에 / 추가 * refactor: runnerProfile 타입명에 Get추가 * refactor: Profile 타입을 따로 분리 * refactor: iternator 명 수정 --------- Co-authored-by: 상규 <tkdrb@sang-gyuui-MacBookPro.local> * 서포터 선택 상세정보 개발언어 추가, 분야별 필터링 기능 구현 (#181) * fix: type import 파일명 수정 * fix: 브라우저의 높이가 작아졌을 때 모달 컨텐츠가 화면을 벗어나는 오류 수정 * feat: 개발스택 라벨 추가 * feat: 개발 분야 필터링 기능 구현 * feat: 서포터 선택 목록 목데이터 수정 * feat: 서포터 technicalTags 타입 추가 * feat: 개발스택 라벨 svg 컴포넌트 추가 * design: 선택된 서포터 width값 변경 * fix: dom에 스타일이 나타나지 않도록 달러사인 추가 * fix: 기술스택 라벨 key값 추가 * feat: 서포터 분야별 필터링 기능 구현 * refactor: svg 컴포넌트 화살표 함수로 변경 * refactor: 기술태그 key 고유값으로 변경 * refactor: 변수 네이밍 변경 * 웹 표준 및 웹 접근성 준수 (#198) * refactor: 시멘틱 태그 적용 * refactor: 이미지 alt 속성 추가 * feat: 제목 input autoFocus 기능 추가 * feat: 리뷰 요청 글 작성 aria-label 추가 * 서포터 선택 필터 기능 useEffect dependency 수정 (#200) * fix: supporterId와 key값이 겹치는 오류 수정 * fix: 무한으로 useEffect가 호출되는 오류 수정 * 깃허브 소셜 로그인 기능 구현 (#203) * feat: 로그인 버튼 URL 연결 * feat: 깃허브 콜백 페이지 구현 * feat: useLogin 구현 * feat: Header 로그인 버튼 기능 구현 * feat: 토큰 유효기간 검증 기능 구현 * fix: 토큰 유효기간 검증 로직 수정 * refactor: useLogin -> useToken 으로 변경 * feat: Avartar 컴포넌트 onClick Props 추가 * feat: usePageRouter 마이 페이지 추가 * feat: api 요청시 헤더에 토큰 추가 * feat: 상세 페이지 목록 버튼 뒤로가기로 변경 Co-authored-by: 에이든 <gyeongza@users.noreply.github.com> Co-authored-by: 남상규 <tkdrb12@users.noreply.github.com> * fix: 컴포넌트 list key값 및 DOM에 나타나지 않도록 달러 사인 추가 * feat: 마이 페이지 게시글 바로가기 기능 추가 및 hover 스타일 추가 * feat: 메인 페이지 게시글 조회수, 채팅수 아이콘 추가 --------- Co-authored-by: 에이든 <gyeongza@users.noreply.github.com> Co-authored-by: 남상규 <tkdrb12@users.noreply.github.com> * 프론트엔드 배포 작업 (#208) feat: api 엔드포인트 localhost로 변경 * [hotfix] 프론트엔드 엔드포인트 변경 후 재배포 (#215) * fix: api 요청 엔드포인트 변경 * fix: api 요청 엔드포인트 도메인 주소로 변경 * [hotfix] 프론트엔드 엔드포인트 변경 후 재배포(2) (#216) * fix: api 요청 엔드포인트 변경 * fix: api 요청 엔드포인트 도메인 주소로 변경 * fix: https 사이트에서 http 요청을 보내기 위한 meta 태그 추가 * [hotfix] 프론트엔드 엔드포인트 변경 후 재배포 (3) (#217) fix: 엔드포인트 포트 삭제 Co-authored-by: 상규 <tkdrb@sang-gyuui-MacBookPro.local> * 헤더 프로필 이름 렌더링 및 삭제 완료 후 메인페이지로 이동하는 기능 구현 (#225) * fix: 삭제가 완료되면 메인 페이지로 이동하도록 변경 * feat: header 프로필 이름 추가 * 글 상세조회 . 오타 수정 (#228) * fix: 삭제가 완료되면 메인 페이지로 이동하도록 변경 * feat: header 프로필 이름 추가 * style: 오타 수정 * hotfix (#232) * fix: 삭제가 완료되면 메인 페이지로 이동하도록 변경 * feat: header 프로필 이름 추가 * style: 오타 수정 * hotfix: 권한이 없을 경우 글 조회 안되는 오류 수정 * 서포터 선택기능 제거 (#257) feat: 서포터 선택기능 제거 Co-authored-by: 상규 <tkdrb@sang-gyuui-MacBookPro.local> * 로그아웃시 기능 사용 못하도록 수정 (#258) fix: 로그아웃시 메인 페이지로 이동하도록 수정 * 스토리북 구현 (#259) * style: components 내부 파일 폴더로 분리 * chore: 스토리북 패키지 설치 및 기본 설정 * test: 공용 컴포넌트 스토리북 추가 * 프론트엔드 CD 설정 (#261) chore: 프론트엔드 CD 설정 * 프론트엔드 CD 테스트 (#262) * webpack 초기 환경 설정 (#8) chore: 프로젝트 초기 환경 설정 * Layout 컴포넌트 구현 (#10) * assets: Pretendard 폰트 추가 * design: GlobalStyle 및 ResetStyle 적용 * feat: Header, Layout 컴포넌트 구현 * MSW 설정 (#17) * chore: 환경 변수 NODE_ENV 설정 * feat: msw 초기 설정 * Avartar, Tag, Button, Modal 컴포넌트 구현 (#20) * feat: Avatar 컴포넌트 구현 * feat: Button 컴포넌트 구현 * assets: close-icon-red svg 추가 * feat: Tag 컴포넌트 구현 * design: Button 디폴트 스타일 설정 * feat: Modal 컴포넌트 구현 * React Router 설정 (#23) * design: Layout background 제거 * feat: 페이지 라우팅 설정 * msw, tsconfig, Avatar 공통 변경사항 반영 (#27) * chore: json 파일을 import하기 위한 tsconfig 수정 * fix: msw dev에서만 작동하도록 수정 * design: Avatar 기본 사이즈 설정 * 러너 게시글 조회 페이지 구현 (#31) * feat: RunnerPostPage 구현 * assets: 채팅수, 조회수 아이콘 svg 추가 * feat: 러너 게시글 mock data 추가 * feat: RunnerPostPage api 요청 기능 추가 * refactor: PostTag 컴포넌트 분리 * 러너 게시물 생성 페이지 구현 (#33) * feat: InputBox 컴포넌트 구현 * feat: TagInput 컴포넌트 구현 * feat: Textarea 컴포넌트 구현 * feat: RunnerPostCreatePage 페이지 구현 * refactor: InputBox 컴포넌트 InputText Props 삭제 * refactor: props로state를 받도록 변경 * refactor: 입력 state관련 set 함수명 수정 --------- Co-authored-by: 상규 <tkdrb@sang-gyuui-MacBookPro.local> * 메인 페이지 구현 (#34) * chore: json 파일을 import하기 위한 tsconfig 수정 * fix: msw dev에서만 작동하도록 수정 * design: Avatar 기본 사이즈 설정 * feat: MainPage 구현 * fix: map key 오류 수정 * feat: RunnerPost 타입 추가 * feat: 러너가 올린 게시물 조회 msw 구현 * refactor: RunnerPost 타입 지정 * feat: Tag 컴포넌트 렌더링 추가 * refactor: mock data 네이밍 통일 * 구현한 페이지 라우터 연결 (#42) * feat: 구현한 페이지 라우터 연결 및 hook 분리 Co-authored-by: 에이든 <gyeongza@users.noreply.github.com> Co-authored-by: 남상규 <tkdrb12@users.noreply.github.com> * feat: 로고 클릭시 홈 이동 기능 추가 --------- Co-authored-by: 에이든 <gyeongza@users.noreply.github.com> Co-authored-by: 남상규 <tkdrb12@users.noreply.github.com> * 러너 글 목록 조회 API 변경에 따른 MainPage 수정 (#55) * fix: api 명세 변경에 따른 러너 글 타입 수정 * feat: 러너 글 목록 조회 api 변경에 따른 MainPage 수정 * API 요청 Endpoint 변경 (#69) * fix: dev server 새로고침 오류 수정 * refactor: index.html 경로 src 외부 public 폴더로 이동 * feat: api 엔드포인트 변경 dev server에서만 msw 적용하도록 변경 * 절대 경로 재설정 (#71) chore: import 절대경로 path 재설정 * 불필요한 환경 변수 플러그인 제거 (#73) fix: build 오류 수정 웹팩 dev 환경변수 플러그인 제거 * Label 컴포넌트 구현 (#88) feat: Label 컴포넌트 구현 * 서포터 선택 결과 페이지 구현 (#90) feat: 서포터 선택 결과 페이지 구현 * 메인 페이지 및 상세 게시글 리뷰 상태 라벨 추가 (#91) * feat: mockData에 reviewStatus 추가 * feat: reviewStatus 타입 및 Label text 추가 * feat: 메인 페이지에 리뷰 상태 Label 추가 * feat: 러너 게시글 상세 페이지에 리뷰 상태 Label 추가 * 서포터 선택 시 확인 모달창 구현 (#92) feat: 서포터 선택 시 확인 모달창 구현 * 서포터 선택 페이지 구현 (#103) * feat: 서포터 선택페이지 라우팅 추가 * asset: github-icon svg파일 추가 * feat: 서포터 선택 페이지 msw 핸들러 추가 * feat: SupporterSelectPage 페이지 컴포넌트 추가 * feat: 서포터 선택 페이지 관련 타입 추가 * feat: SupporterSelectItem, List 컴포넌트 추가 * feat: ConfirmModal 컴포넌트 Props 추가 * feat: RunnerPostCreatePage 페이지 컴포넌트 api 기능 제거 * fix: supportSelect 타입 오류 수정 * fix: 저장 누락 반영 --------- Co-authored-by: 상규 <tkdrb@sang-gyuui-MacBookPro.local> * CI를 위한 테스트 코드 작성 (#111) * chore: testing library react 및 jest 패키지 설정 * test: CI를 위한 컴포넌트 테스트코드 작성 * CI설정 with GitHub Actions (#113) * style: 팀 컨벤션에 맞게 프론트엔드 최상위 폴더명 변경 * chore: 프론트엔드 CI 설정 * ConfirmModal 컴포넌트 테스트코드 작성 (#116) * test: ConfirmModal 컴포넌트 테스트코드 작성 * fix: workflow -> workflows 수정 * fix: github action working directory 수정 * API 명세 변경에 따른 기능 추가 (#123) * fix: types 파일명 변경을 위한 파일 삭제 * feat: API 명세에 맞춰 타입 추가 및 mock data 변경 * feat: 러너 게시글 상세 페이지 삭제, 코드 보러가기 기능 추가 * style: 러너 상세 게시글 타입 이름 수정 * refactor: API 명세에 맞춘 타입을 import 하도록 변경 * 로그인 페이지 구현 (#124) * feat: 헤더에 로그인 버튼 클릭시 로그인 페이지로 이동하는 기능 추가 * feat: 로그인 페이지 컴포넌트 구현 * fix: asset경로 절대경로로 수정 --------- Co-authored-by: 상규 <tkdrb@sang-gyuui-MacBookPro.local> * 서포터 선택 목록 -> 글 생성할 때 띄우는 기능 구현 (#128) * feat: InputBox font-size, font-weight props 추가 * feat: 서포터 리스트 mockData 추가 * feat: 서포터 선택 목록 페이지를 모달 컴포넌트로 변경 * design: Textarea border 수정 * fix: TagInput을 form태그 안에 넣을 경우 submit이 되는 오류 수정 * feat: 서포터 선택 목록 모달 기능 구현 * fix: cherry-pick conflict 해결 * fix: type 오류 수정 * feat: 프론트엔드 로컬에서 백엔드 서버 api 요청을 위한 proxy 포트 설정 * feat: api 명세 변경에 따른 컴포넌트 props 수정 * 서버 api 엔드포인트 변경 (#133) * feat: 변경된 api 명세에 따른 msw uri 수정 * feat: 배포 서버 base url 수정 * feat: 삭제 확인 모달창 구현 * test: 확인 모달창 변경에 따른 테스트코드 작성 * 사용하지 않는 기능 숨기기 (#137) * design: Layout margin-bottom 추가 * design: 리뷰 진행중 라벨 디자인 추가 * feat: 준비중인 기능 알림 메시지 추가 * feat: 사용하지 않는 기능 주석 처리 * 프론트엔드 배포 작업 (#135) * webpack 초기 환경 설정 (#8) chore: 프로젝트 초기 환경 설정 * Layout 컴포넌트 구현 (#10) * assets: Pretendard 폰트 추가 * design: GlobalStyle 및 ResetStyle 적용 * feat: Header, Layout 컴포넌트 구현 * MSW 설정 (#17) * chore: 환경 변수 NODE_ENV 설정 * feat: msw 초기 설정 * Avartar, Tag, Button, Modal 컴포넌트 구현 (#20) * feat: Avatar 컴포넌트 구현 * feat: Button 컴포넌트 구현 * assets: close-icon-red svg 추가 * feat: Tag 컴포넌트 구현 * design: Button 디폴트 스타일 설정 * feat: Modal 컴포넌트 구현 * React Router 설정 (#23) * design: Layout background 제거 * feat: 페이지 라우팅 설정 * msw, tsconfig, Avatar 공통 변경사항 반영 (#27) * chore: json 파일을 import하기 위한 tsconfig 수정 * fix: msw dev에서만 작동하도록 수정 * design: Avatar 기본 사이즈 설정 * 러너 게시글 조회 페이지 구현 (#31) * feat: RunnerPostPage 구현 * assets: 채팅수, 조회수 아이콘 svg 추가 * feat: 러너 게시글 mock data 추가 * feat: RunnerPostPage api 요청 기능 추가 * refactor: PostTag 컴포넌트 분리 * 러너 게시물 생성 페이지 구현 (#33) * feat: InputBox 컴포넌트 구현 * feat: TagInput 컴포넌트 구현 * feat: Textarea 컴포넌트 구현 * feat: RunnerPostCreatePage 페이지 구현 * refactor: InputBox 컴포넌트 InputText Props 삭제 * refactor: props로state를 받도록 변경 * refactor: 입력 state관련 set 함수명 수정 --------- Co-authored-by: 상규 <tkdrb@sang-gyuui-MacBookPro.local> * 메인 페이지 구현 (#34) * chore: json 파일을 import하기 위한 tsconfig 수정 * fix: msw dev에서만 작동하도록 수정 * design: Avatar 기본 사이즈 설정 * feat: MainPage 구현 * fix: map key 오류 수정 * feat: RunnerPost 타입 추가 * feat: 러너가 올린 게시물 조회 msw 구현 * refactor: RunnerPost 타입 지정 * feat: Tag 컴포넌트 렌더링 추가 * refactor: mock data 네이밍 통일 * 구현한 페이지 라우터 연결 (#42) * feat: 구현한 페이지 라우터 연결 및 hook 분리 Co-authored-by: 에이든 <gyeongza@users.noreply.github.com> Co-authored-by: 남상규 <tkdrb12@users.noreply.github.com> * feat: 로고 클릭시 홈 이동 기능 추가 --------- Co-authored-by: 에이든 <gyeongza@users.noreply.github.com> Co-authored-by: 남상규 <tkdrb12@users.noreply.github.com> * 러너 글 목록 조회 API 변경에 따른 MainPage 수정 (#55) * fix: api 명세 변경에 따른 러너 글 타입 수정 * feat: 러너 글 목록 조회 api 변경에 따른 MainPage 수정 * API 요청 Endpoint 변경 (#69) * fix: dev server 새로고침 오류 수정 * refactor: index.html 경로 src 외부 public 폴더로 이동 * feat: api 엔드포인트 변경 dev server에서만 msw 적용하도록 변경 * 절대 경로 재설정 (#71) chore: import 절대경로 path 재설정 * 불필요한 환경 변수 플러그인 제거 (#73) fix: build 오류 수정 웹팩 dev 환경변수 플러그인 제거 * Label 컴포넌트 구현 (#88) feat: Label 컴포넌트 구현 * 서포터 선택 결과 페이지 구현 (#90) feat: 서포터 선택 결과 페이지 구현 * 메인 페이지 및 상세 게시글 리뷰 상태 라벨 추가 (#91) * feat: mockData에 reviewStatus 추가 * feat: reviewStatus 타입 및 Label text 추가 * feat: 메인 페이지에 리뷰 상태 Label 추가 * feat: 러너 게시글 상세 페이지에 리뷰 상태 Label 추가 * 서포터 선택 시 확인 모달창 구현 (#92) feat: 서포터 선택 시 확인 모달창 구현 * 서포터 선택 페이지 구현 (#103) * feat: 서포터 선택페이지 라우팅 추가 * asset: github-icon svg파일 추가 * feat: 서포터 선택 페이지 msw 핸들러 추가 * feat: SupporterSelectPage 페이지 컴포넌트 추가 * feat: 서포터 선택 페이지 관련 타입 추가 * feat: SupporterSelectItem, List 컴포넌트 추가 * feat: ConfirmModal 컴포넌트 Props 추가 * feat: RunnerPostCreatePage 페이지 컴포넌트 api 기능 제거 * fix: supportSelect 타입 오류 수정 * fix: 저장 누락 반영 --------- Co-authored-by: 상규 <tkdrb@sang-gyuui-MacBookPro.local> * CI를 위한 테스트 코드 작성 (#111) * chore: testing library react 및 jest 패키지 설정 * test: CI를 위한 컴포넌트 테스트코드 작성 * CI설정 with GitHub Actions (#113) * style: 팀 컨벤션에 맞게 프론트엔드 최상위 폴더명 변경 * chore: 프론트엔드 CI 설정 * ConfirmModal 컴포넌트 테스트코드 작성 (#116) * test: ConfirmModal 컴포넌트 테스트코드 작성 * fix: workflow -> workflows 수정 * fix: github action working directory 수정 * API 명세 변경에 따른 기능 추가 (#123) * fix: types 파일명 변경을 위한 파일 삭제 * feat: API 명세에 맞춰 타입 추가 및 mock data 변경 * feat: 러너 게시글 상세 페이지 삭제, 코드 보러가기 기능 추가 * style: 러너 상세 게시글 타입 이름 수정 * refactor: API 명세에 맞춘 타입을 import 하도록 변경 * 로그인 페이지 구현 (#124) * feat: 헤더에 로그인 버튼 클릭시 로그인 페이지로 이동하는 기능 추가 * feat: 로그인 페이지 컴포넌트 구현 * fix: asset경로 절대경로로 수정 --------- Co-authored-by: 상규 <tkdrb@sang-gyuui-MacBookPro.local> * 서포터 선택 목록 -> 글 생성할 때 띄우는 기능 구현 (#128) * feat: InputBox font-size, font-weight props 추가 * feat: 서포터 리스트 mockData 추가 * feat: 서포터 선택 목록 페이지를 모달 컴포넌트로 변경 * design: Textarea border 수정 * fix: TagInput을 form태그 안에 넣을 경우 submit이 되는 오류 수정 * feat: 서포터 선택 목록 모달 기능 구현 * fix: cherry-pick conflict 해결 * fix: type 오류 수정 * feat: 프론트엔드 로컬에서 백엔드 서버 api 요청을 위한 proxy 포트 설정 * feat: api 명세 변경에 따른 컴포넌트 props 수정 * 서버 api 엔드포인트 변경 (#133) * feat: 변경된 api 명세에 따른 msw uri 수정 * feat: 배포 서버 base url 수정 * feat: 삭제 확인 모달창 구현 * test: 확인 모달창 변경에 따른 테스트코드 작성 * 사용하지 않는 기능 숨기기 (#137) * design: Layout margin-bottom 추가 * design: 리뷰 진행중 라벨 디자인 추가 * feat: 준비중인 기능 알림 메시지 추가 * feat: 사용하지 않는 기능 주석 처리 --------- Co-authored-by: KangSan Lee <xylitol79@gmail.com> Co-authored-by: 남상규 <103256030+tkdrb12@users.noreply.github.com> Co-authored-by: 상규 <tkdrb@sang-gyuui-MacBookPro.local> Co-authored-by: 에이든 <gyeongza@users.noreply.github.com> Co-authored-by: 남상규 <tkdrb12@users.noreply.github.com> * webpack prod publicPath 재설정 (#153) * fix: 이미지 경로 및 새로고침 오류 수정 index.html base 태그 설정 * fix: base 태그 사용 대신 webpack publicPath 변경 상대경로를 사용하지 않도록 변경 * 게시물 상세 조회 페이지 디자인 수정 (#182) * feat: Button 컴포넌트 colorTheme 추가 * fix: 선택 완료 목록 height값 추가 * design: 게시물 상제 조회 디자인 수정 * feat: 글 생성 완료 멘트 수정 * 마이페이지 구현 (#185) * feat: 마이페이지 관련 타입추가 * feat: 마이페이지 관련 msw 데이터 및 핸들러 추가 * feat: MyPage 페이지 컴포넌트 추가 * feat: ProfileRunnerPostItem 컴포넌트 추가 * feat: ListFilter 컴포넌트 추가 * feat: 마이페이지 페이지 라우팅 추가 * refactor: list태그div에서ul로 수정 * fix : 페이지 상수에 / 추가 * refactor: runnerProfile 타입명에 Get추가 * refactor: Profile 타입을 따로 분리 * refactor: iternator 명 수정 --------- Co-authored-by: 상규 <tkdrb@sang-gyuui-MacBookPro.local> * 서포터 선택 상세정보 개발언어 추가, 분야별 필터링 기능 구현 (#181) * fix: type import 파일명 수정 * fix: 브라우저의 높이가 작아졌을 때 모달 컨텐츠가 화면을 벗어나는 오류 수정 * feat: 개발스택 라벨 추가 * feat: 개발 분야 필터링 기능 구현 * feat: 서포터 선택 목록 목데이터 수정 * feat: 서포터 technicalTags 타입 추가 * feat: 개발스택 라벨 svg 컴포넌트 추가 * design: 선택된 서포터 width값 변경 * fix: dom에 스타일이 나타나지 않도록 달러사인 추가 * fix: 기술스택 라벨 key값 추가 * feat: 서포터 분야별 필터링 기능 구현 * refactor: svg 컴포넌트 화살표 함수로 변경 * refactor: 기술태그 key 고유값으로 변경 * refactor: 변수 네이밍 변경 * 웹 표준 및 웹 접근성 준수 (#198) * refactor: 시멘틱 태그 적용 * refactor: 이미지 alt 속성 추가 * feat: 제목 input autoFocus 기능 추가 * feat: 리뷰 요청 글 작성 aria-label 추가 * 서포터 선택 필터 기능 useEffect dependency 수정 (#200) * fix: supporterId와 key값이 겹치는 오류 수정 * fix: 무한으로 useEffect가 호출되는 오류 수정 * 깃허브 소셜 로그인 기능 구현 (#203) * feat: 로그인 버튼 URL 연결 * feat: 깃허브 콜백 페이지 구현 * feat: useLogin 구현 * feat: Header 로그인 버튼 기능 구현 * feat: 토큰 유효기간 검증 기능 구현 * fix: 토큰 유효기간 검증 로직 수정 * refactor: useLogin -> useToken 으로 변경 * feat: Avartar 컴포넌트 onClick Props 추가 * feat: usePageRouter 마이 페이지 추가 * feat: api 요청시 헤더에 토큰 추가 * feat: 상세 페이지 목록 버튼 뒤로가기로 변경 Co-authored-by: 에이든 <gyeongza@users.noreply.github.com> Co-authored-by: 남상규 <tkdrb12@users.noreply.github.com> * fix: 컴포넌트 list key값 및 DOM에 나타나지 않도록 달러 사인 추가 * feat: 마이 페이지 게시글 바로가기 기능 추가 및 hover 스타일 추가 * feat: 메인 페이지 게시글 조회수, 채팅수 아이콘 추가 --------- Co-authored-by: 에이든 <gyeongza@users.noreply.github.com> Co-authored-by: 남상규 <tkdrb12@users.noreply.github.com> * 프론트엔드 배포 작업 (#208) feat: api 엔드포인트 localhost로 변경 * [hotfix] 프론트엔드 엔드포인트 변경 후 재배포 (#215) * fix: api 요청 엔드포인트 변경 * fix: api 요청 엔드포인트 도메인 주소로 변경 * [hotfix] 프론트엔드 엔드포인트 변경 후 재배포(2) (#216) * fix: api 요청 엔드포인트 변경 * fix: api 요청 엔드포인트 도메인 주소로 변경 * fix: https 사이트에서 http 요청을 보내기 위한 meta 태그 추가 * [hotfix] 프론트엔드 엔드포인트 변경 후 재배포 (3) (#217) fix: 엔드포인트 포트 삭제 Co-authored-by: 상규 <tkdrb@sang-gyuui-MacBookPro.local> * 헤더 프로필 이름 렌더링 및 삭제 완료 후 메인페이지로 이동하는 기능 구현 (#225) * fix: 삭제가 완료되면 메인 페이지로 이동하도록 변경 * feat: header 프로필 이름 추가 * 글 상세조회 . 오타 수정 (#228) * fix: 삭제가 완료되면 메인 페이지로 이동하도록 변경 * feat: header 프로필 이름 추가 * style: 오타 수정 * hotfix (#232) * fix: 삭제가 완료되면 메인 페이지로 이동하도록 변경 * feat: header 프로필 이름 추가 * style: 오타 수정 * hotfix: 권한이 없을 경우 글 조회 안되는 오류 수정 * 서포터 선택기능 제거 (#257) feat: 서포터 선택기능 제거 Co-authored-by: 상규 <tkdrb@sang-gyuui-MacBookPro.local> * 로그아웃시 기능 사용 못하도록 수정 (#258) fix: 로그아웃시 메인 페이지로 이동하도록 수정 * 스토리북 구현 (#259) * style: components 내부 파일 폴더로 분리 * chore: 스토리북 패키지 설치 및 기본 설정 * test: 공용 컴포넌트 스토리북 추가 * 프론트엔드 CD 설정 (#261) chore: 프론트엔드 CD 설정 --------- Co-authored-by: KangSan Lee <xylitol79@gmail.com> Co-authored-by: 남상규 <103256030+tkdrb12@users.noreply.github.com> Co-authored-by: 상규 <tkdrb@sang-gyuui-MacBookPro.local> Co-authored-by: 에이든 <gyeongza@users.noreply.github.com> Co-authored-by: 남상규 <tkdrb12@users.noreply.github.com> * 프론트엔드 CD 테스트 (2) (#263) * chore: 프론트엔드 CD 설정 * fix: npm i 추가 * 프론트엔드 CD 재설정 (#267) chore: 프론트엔드 CD workflow 설정 * 프론트 개발 서버용 CD 설정 (#294) * chore: 프론트엔드 개발 서버 CD 설정 * feat: 개발용, 제품용 서버 URL 분리 * fix: https 변환 메타 태그 삭제 * 프론트 개발 서버용 CD 설정 (#299) * chore: 프론트엔드 개발 서버 CD 설정 * feat: 개발용, 제품용 서버 URL 분리 * fix: https 변환 메타 태그 삭제 * fix: 배포시 개발서버에서 제품용 URL로 요청보내는 오류 수정 * chore: 개발 서버용 환경변수 설정 * 프론트엔드 개발 서버 환경변수 적용 (#301) fix: 개발 서버 환경변수 적용 * dotenv 환경변수 설정 (#303) * hotfix: 환경변수 플러그인 추가 * fix: 개발 서버 포트 변경 * chore: dotenv 패키지 설정 * 러너 게시물 생성 페이지 수정 ( 마감기한 입력 ) (#306) * feat: date 연산 유틸 함수 추가 * feat: 마감기한 input 타입 수정 및 입력 일자 최대 최소값 추가 * refactor: 필요없는 스타일 컴포넌트 삭제 --------- Co-authored-by: 상규 <tkdrb@sang-gyuui-MacBookPro.local> * 태그 입력 수정 (#269) fix: 빈 태그 입력창에 enter 입력 시 기존에 입력된 태그가 사라지는 현상 수정 Co-authored-by: 상규 <tkdrb@sang-gyuui-MacBookPro.local> * 채팅방 아이콘을 사람 아이콘으로 변경 (#314) * feat: api 명세 변경에 따른 서포터 지원 수 네이밍 추가 * assets: 서포터 지원자 아이콘 추가 * API 요청 메서드 분리 (#319) * feat: fetch 관련 메서드 분리 * refactor: 메인 페이지 게시글 get api 메서드 분리 * 웹팩 플러그인 설정 수정 (#313) * fix: EnvironmentPlugin 플러그인이 prod환경에서만 동작하도록 변경 * refactor: webpack dev prod 중복 플러그인 common 파일로 통합 * refactor: 필요없는 공백, import 제거 * refactor: 필요없는 공백 제거 --------- Co-authored-by: 상규 <tkdrb@sang-gyuui-MacBookPro.local> * ConfirmModal 문구 수정 및 esc 기능 추가 (#327) feat: ConfirmModal 확인,취소 Props 및 esc 기능 추가 * 서포터 선택 페이지 구현 (#312) * feat: 서포터 후보 타입 추가 * feat: 서포터 후보 목록 컴포넌트 구현 * feat: 서포터 선택 페이지 구현 * feat: 서포터 후보 msw 추가 * feat: 서포터 선택 api 추가 * feat: 서포터가 남긴 메시지 스크롤 비표시 * refactor: (구)서포터 선택 관련 컴포넌트, 타입 삭제 * refactor: 컴포넌트에서 fetch 메서드를 사용하도록 변경 * Toast 기능 구현 (#333) * assets: 토스트에 필요한 완료/에러 아이콘 추가 * feat: index에 토스트를 위한 div 추가 * feat: Toast 컴포넌트 구현 * feat: useToast hook 추가 * test: Toast 스토리북 추가 * design: Toast 화면 가운데로 조정 * 프로필 수정 페이지 구현 (#330) * feat: 러너, 서포터 프로필 mock 데이터 추가 * feat: Object 타입 깊은 비교 유틸 함수 추가 * feat: 기술 tag 관련 타입, 상수 추가 * assets: 기술 태그 svg 파일 추가 * feat: inputBox, Textarea 컴포넌트 rest, style props 추가 * feat: techLabelButton 컴포넌트 추가 * feat: TechTagSelectModal 컴포넌트 추가 * feat: profile 관련 타입 추가 * feat: 프로필 수정 페이지 컴포넌트 추가 * feat: 프로필 수정 페이지 라우팅 추가 * feat: 마이 프로필 수정, 조회 msw 핸들러 추가 * feat: 소속, 이름을 입력 시 공백 문자 하나만을 입력 후 저장할 수 없도록 수정 * feat: 프로필 저장 시 앞뒤 공백이 자동 삭제되는 기능 추가 * feat: form 내부에서 enter입력 시 저장되는 기능 추가 * style: 변수명 수정 * style: 화살표 함수로 유틸함수 수정 * refactor: sort 콜백 함수 삭제 * refactor: modal컴포넌트 sort 콜백 함수 삭제 * sytle: props명 수정 --------- Co-authored-by: 상규 <tkdrb@sang-gyuui-MacBookPro.local> * 핸들러 오타 수정 (#356) fix: 오타 수정 Co-authored-by: 상규 <tkdrb@sang-gyuui-MacBookPro.local> * 마이페이지 기능 구현 (#328) * feat: api 명세 변경에 따른 mockData 추가 및 타입명 변경 * refactor: 마이페이지 runner response type명 변경 * refactor: 마이페이지 러너 게시글 목록 컴포넌트 분리 * feat: 마이페이지 러너 게시글 조회수 및 지원자 수 mockData 추가 * fix: tag명 타입 오타 수정 * feat: 서포터 선택하기 버튼 추가 * feat: 기술스택 라벨 및 깃허브 바로가기 버튼 추가 * feat: 진행중인 리뷰 코드 보러가기 버튼 추가 * fix: 잘못된 mockData 수정 * feat: 러너, 서포터별 마이페이지 mockData 추가 * refactor: 러너, 서포터 게시글 fetch 분리 및 공통 컴포넌트 통합 * design: 화면 전환시 레이아웃 밀리는 현상 수정 * feat: 러너, 서포터 상태에 따른 게시물 버튼 렌더링 * feat: 러너, 서포터별 정보를 마이페이지에 불러오는 기능 구현 * refactor: 로컬 개발용 토큰 삭제 * refactor: 프로필, 글 목록 fetch를 각각 하나의 함수로 통합 * refactor: profile과 myPage 타입을 분리 * refactor: 글 목록 옵션 생성 함수를 유틸 함수로 분리 * refactor: styled-components 적용 * refactor: supporter로 수정 및 삼항연산자 적용 * refactor: type명 통일 * fix: 중복된 BASE_URL 삭제 * api 공통 메서드 수정 (#376) * refactor: 모든 메서드에 .json()을 사용하지 않도록 수정 * refactor: 불필요한 정보 삭제 * feat: response 에러코드를 처리하도록 fetch함수 변경 * refactor: useEffect 내부 fetch 함수 분리 * Toast에 Context API 적용 (#379) * feat: ToastContext 구현 * feat: useToast 제거, 전역 Toast 적용 * test: Toast 스토리북 ms 추가 * 러너 글 작성 PR 주소 유효성 검증 (#380) * feat: PR 주소 유효성 검증 추가 * refactor: 입력 유효성 검증 함수 유틸함수로 분리 --------- Co-authored-by: 상규 <tkdrb@sang-gyuui-MacBookPro.local> * 프로필 상세 보기 페이지 구현 (러너, 서포터) (#364) * refactor: 중복된 타입 삭제 및 타입명 수정 * feat: 프로필 조회를 위한 runner, supporter id mockData 추가 * feat: 서포터 프로필 조회 컴포넌트 구현 * feat: 러너 프로필 조회 컴포넌트 구현 * test: 러너, 서포터 프로필 조회 msw 구현 * feat: 서포터 완료한 리뷰 게시글 렌더링 구현 * fix: 서포터 게시글 조회에서 러너 프로필 안보이도록 타입 및 컴포넌트 수정 * refactor: fetch 함수 수정 * 후기 작성 페이지 구현 (#366) * assets: 후기 작성페이지 asset 추가 * assets: letter 아이콘 파일 수정 * feat: 후기 작성 페이지 라우팅 및 msw 핸들러 추가 * assets: checkbox 아이콘 파일 수정 * feat: 피드백 페이지 상수 및 타입 설정 * feat: CheckBox 컴포넌트 생성 * feat: reviewTypeButton (피드백 페이지 캐릭터 버튼)컴포넌트 생성 * feat: 후기 작성 페이지 컴포넌트 생성 * feat: 후기 작성 옵션 수정 * fix: api 함수 수정 * feat: 피드백 버튼 아이콘 수정 * refactor: ReviewTypeButton 컴포넌트 Props 번경 * feat: reviewTypeContainer 스타일 컴포넌트 추가 --------- Co-authored-by: 상규 <tkdrb@sang-gyuui-MacBookPro.local> * 분리된 fetch 적용안된 컴포넌트 수정 (#384) * feat: Header 컴포넌트 프로필 GET api 변경 * refactor: MainPage 게시글 GET 타입 추가 * refactor: 게시글 상세 조회 컴포넌트 GET, DELETE api 수정 * refactor: 마이페이지 GET api 수정 * refactor: 러너 글 생성 POST api 수정 * refactor: 서포터 선택 GET, PATCH api 수정 * refactor: 프로필 수정 GET, PATCH api 수정 * refactor: 로그인 토큰 GET api 수정 * fix: msw handler 병합 오류 수정 * fix: ProfileEditPage 병합 오류 수정 * refactor: 헤더 프로필 정보 변수명 변경 * style: 오타 수정 * refactor: 토큰 오류 alert로 수정 * fix: RunnerPostCreatePage 병합 오류 수정 * 배포용 api uri 적용 (#386) feat: 변경된 api uri 적용 * fetch content-type 수정 (#388) fix: fetch Content-type 수정 * 메인페이지 더보기 기능 추가 (#385) * feat: 전체 러너 게시글 조회 타입 pageInfo 추가 * feat: RunnerPostList 더보기 기능 구현 및 리팩터링 게시글 목록을 Props로 받도록 변경 * feat: 러너 게시글 전체 mock data에 pageInfo 추가 * 서포터 마이페이지 버튼 기능 추가 (제안취소, 리뷰완료) (#389) * feat: patch 요청 body 옵셔널로 변경 * refactor: MyPage api 요청 방식 변경 * feat: usePageRouter 서포터 선택, 서포터 피드백 페이지 추가 * feat: 마이페이지 게시글 supporterId 추가 * feat: 마이페이지 러너 게시글 mock data supporterId 추가 * fix: 서포터 선택, 서포터 피드백 페이지 라우터 인자 추가 * feat: MyPagePostButton 구현 * 게시물 상세 조회 리뷰 제안하기 기능 추가 (#381) * design: Textarea 컴포넌트 변경 line-height Props 추가 resize: none 추가 placeholder의 fontSize도 변경 가능 * feat: SendMessageModal 컴포넌트 구현 * refactor: 러너 게시글 상세 페이지 api 메서드 분리 * feat: 상세 게시글 타입 isApplied 추가 * refactor: SendMessageModal 메시지 state Props 추가 * feat: 리뷰 제안 기능 추가 * feat: 리뷰 제안 msw 추가 * feat: 러너 상세 조회 mock data에 isApplied 추가 * MSW 버전 업 (#397) chore: msw v1.2.3으로 변경 * 마이페이지 게시글 uri 수정 및 필터 삭제 (#399) * fix: MainPage get uri 수정 * fix: 불필요한 msw mockData 삭제 * feat: 마이페이지 쿼리 파라미터 추가 * 토스트 메세지 적용 및 에러 핸들링 수정 (#403) * feat: toast 메세지 상수 추가 * feat: useToken 유효성 검증 방식 변경 * feat: toast 메세지 상수 추가 * alert 메세지로 toast 메세지로 변경 * fix: 마이페이지 무한 리렌더링 오류 수정 * fix: 러너 페이지 생성 창에서 엔터 입력시 입력되어 있던 태그가 사라지는 현상 수정 * refactor: fetch 함수 매개변수 변경 * feat: 병합 후 누락된 토스트 메세지 추가 --------- Co-authored-by: 상규 <tkdrb@sang-gyuui-MacBookPro.local> * 로고 이미지 및 메인 색상 변경 + 폰트 CDN 추가 (#402) * assets: 새로운 로고 svg 추가 * design: 전역 폰트, 메인 색상 및 폰트를 CDN으로 불러오도록 변경 * assets: font를 CDN으로 불러오도록 변경 * chore: 불필요한 모듈 삭제 * 프로필 수정하기 기능 연결 (#405) * design: 로그인 버튼 디자인 수정 * design: 로그인 페이지 헤더 삭제 * feat: 마이페이지에서 프로필 수정 페이지로 가는 기능 구현 * design: 마이페이지 소개 width 설정 * refactor: 서포터 선택 토스트 메시지 상수화 * 메인 페이지 게시글 get 요청, Toast 에러 수정 (#411) * feat: 마이페이지, 메인페이지 pageInfo 추가 * fix: msw 오류 수정 * 배포 전 오류 수정 (#418) * design: 버튼 위치 변경 및 필터 밑줄 스타일 변경 * fix: 러너 서포터 옵션값을 변경했을 때 본래의 게시물 리스트가 남아있는 오류 수정 * asset: asset 속성 값 수정 * feat: 리뷰 제안 취소 기능 msw 추가 * refactor: 누락된 메세지 상수화 완료 * feat: 피드백 작성 완료 메세지 추가 * design: 게시물 생성 페이지 잘린 글자 스타일 수정 * feat: 배포용 prod workflow 파일 생성 * design: 마이페이지 디자인 수정 * design: 프로필 페이지 스타일 수정 * fix: 러너, 서포터 옵션을 변경할 시 기존 리스트가 남아있는 오류 수정 * feat: 메인페이지 더보기 기능 토큰 존재 여부 검사 추가 * feat: 리뷰 제안 취소, 리뷰 완료 후 리로드 기능 추가 --------- Co-authored-by: 상규 <tkdrb@sang-gyuui-MacBookPro.local> * [hotfix] 페이지 계속 추가되는 오류 수정 (#419) fix: 페이지 계속 추가되는 오류 수정 * 마감기한 지남 (OVERDUE) 라벨 추가 (#421) * feat: 마감기한 지남 상태 추가 * design: 러너 게시글 프로필 이름 가운데 정렬 * [hotfix] 피드백 제출 토스트 문구 수정 (#422) fix: 피드백 제출 토스트 문구 수정 --------- Co-authored-by: 에이든 <62369936+gyeongza@users.noreply.github.com> Co-authored-by: 남상규 <103256030+tkdrb12@users.noreply.github.com> Co-authored-by: 상규 <tkdrb@sang-gyuui-MacBookPro.local> Co-authored-by: 에이든 <gyeongza@users.noreply.github.com> Co-authored-by: 남상규 <tkdrb12@users.noreply.github.com> --- .github/workflows/frontend_ci.yml | 27 + .github/workflows/frontend_dev_cd.yml | 59 + .github/workflows/frontend_prod_cd.yml | 59 + frontend/.babelrc | 14 + frontend/.eslintrc | 9 + frontend/.gitignore | 2 + frontend/.prettierrc | 7 + frontend/.storybook/main.ts | 31 + frontend/.storybook/preview-body.html | 2 + frontend/.storybook/preview.ts | 22 + frontend/jest.config.js | 7 + frontend/package-lock.json | 21416 ++++++++++++++++ frontend/package.json | 69 + frontend/public/index.html | 15 + frontend/public/mockServiceWorker.js | 303 + frontend/src/App.tsx | 27 + frontend/src/__test__/components.test.tsx | 34 + frontend/src/api/fetch.ts | 88 + frontend/src/assets/applicant-icon.svg | 3 + frontend/src/assets/checkboxIcon.tsx | 27 + frontend/src/assets/close-icon-red.svg | 14 + frontend/src/assets/complete-icon.svg | 11 + frontend/src/assets/error-icon.svg | 5 + frontend/src/assets/eye-icon.svg | 14 + .../feedback-icon/bad-feedback-gray-icon.svg | 87 + .../feedback-icon/bad-feedback-icon.svg | 100 + .../feedback-icon/good-feedback-gray-icon.svg | 87 + .../feedback-icon/good-feedback-icon.svg | 100 + .../great-feedback-gray-icon.svg | 87 + .../feedback-icon/great-feedback-icon.svg | 102 + frontend/src/assets/github-icon.svg | 1 + frontend/src/assets/letter-icon.svg | 21 + frontend/src/assets/logo-image.svg | 14 + frontend/src/assets/technicalLabelIcon.tsx | 174 + frontend/src/components/CheckBox/CheckBox.tsx | 59 + .../components/ConfirmModal/ConfirmModal.tsx | 74 + frontend/src/components/InputBox/InputBox.tsx | 76 + .../src/components/ListFilter/ListFilter.tsx | 91 + .../MyPagePostButton/MyPagePostButton.tsx | 116 + .../MyPage/MyPagePostItem/MyPagePostItem.tsx | 162 + .../MyPage/MyPagePostList/MyPagePostList.tsx | 33 + frontend/src/components/PostTag/PostTag.tsx | 21 + .../components/PostTagList/PostTagList.tsx | 29 + .../ReviewTypeButton/ReviewTypeButton.tsx | 148 + .../RunnerPostItem/RunnerPostItem.tsx | 168 + .../RunnerPostList/RunnerPostList.tsx | 30 + .../SendMessageModal/SendMessageModal.tsx | 69 + .../SupporterCardItem/SupporterCardItem.tsx | 188 + .../SupporterCartList/SupporterCardList.tsx | 59 + frontend/src/components/TagInput/TagInput.tsx | 130 + .../src/components/TechLabel/TechLabel.tsx | 50 + .../TechLabelButton/TechLabelButton.tsx | 68 + .../TechTagSelectModal/TechTagSelectModal.tsx | 124 + frontend/src/components/Textarea/Textarea.tsx | 87 + .../common/Avatar/Avatar.stories.ts | 20 + .../src/components/common/Avatar/Avatar.tsx | 32 + .../common/Button/Button.stories.ts | 24 + .../src/components/common/Button/Button.tsx | 85 + .../components/common/Label/Label.stories.ts | 23 + .../src/components/common/Label/Label.tsx | 68 + .../components/common/Modal/Modal.stories.tsx | 22 + .../src/components/common/Modal/Modal.tsx | 52 + .../src/components/common/Tag/Tag.stories.ts | 20 + frontend/src/components/common/Tag/Tag.tsx | 49 + .../components/common/Toast/Toast.stories.ts | 23 + .../src/components/common/Toast/Toast.tsx | 98 + frontend/src/constants/feedback.ts | 68 + frontend/src/constants/index.ts | 17 + frontend/src/constants/message.ts | 83 + frontend/src/constants/tags.ts | 11 + frontend/src/contexts/ToastContext.tsx | 79 + frontend/src/hooks/usePageRouter.ts | 74 + frontend/src/hooks/useToken.ts | 62 + frontend/src/index.tsx | 19 + frontend/src/layout/Header.tsx | 135 + frontend/src/layout/Layout.tsx | 32 + frontend/src/mocks/data/headerProfile.json | 4 + frontend/src/mocks/data/myPagePost/done.json | 23 + .../src/mocks/data/myPagePost/inProgress.json | 51 + .../src/mocks/data/myPagePost/notStarted.json | 41 + .../src/mocks/data/myPageRunnerProfile.json | 8 + .../mocks/data/myPageSupporterProfile.json | 8 + .../src/mocks/data/runnerPostDetails.json | 23 + frontend/src/mocks/data/runnerPostList.json | 136 + .../src/mocks/data/runnerProfileInfo.json | 9 + .../src/mocks/data/supporterCandidate.json | 40 + .../src/mocks/data/supporterProfileInfo.json | 9 + .../src/mocks/data/supporterProfilePost.json | 31 + frontend/src/mocks/handlers.ts | 152 + frontend/src/mocks/worker.ts | 4 + frontend/src/pages/CreationResultPage.tsx | 44 + frontend/src/pages/GithubCallbackPage.tsx | 61 + frontend/src/pages/LoginPage.tsx | 106 + frontend/src/pages/MainPage.tsx | 148 + frontend/src/pages/MyPage.tsx | 288 + frontend/src/pages/ProfileEditPage.tsx | 469 + frontend/src/pages/RunnerPostCreatePage.tsx | 263 + frontend/src/pages/RunnerPostDetailPage.tsx | 406 + frontend/src/pages/RunnerProfilePage.tsx | 175 + frontend/src/pages/SupporterFeedbackPage.tsx | 247 + frontend/src/pages/SupporterProfilePage.tsx | 217 + frontend/src/pages/SupporterSelectPage.tsx | 42 + frontend/src/router.tsx | 89 + frontend/src/styles/GlobalStyles.ts | 52 + frontend/src/styles/ResetStyle.ts | 137 + frontend/src/types/feedback.ts | 14 + frontend/src/types/font.d.ts | 2 + frontend/src/types/image.d.ts | 2 + frontend/src/types/myPage.ts | 20 + frontend/src/types/profile.ts | 22 + frontend/src/types/runnerPost.ts | 59 + frontend/src/types/select.ts | 7 + frontend/src/types/supporterCandidate.ts | 13 + frontend/src/types/tags.ts | 3 + frontend/src/utils/date.ts | 41 + frontend/src/utils/object.ts | 27 + frontend/src/utils/postOption.ts | 26 + frontend/src/utils/validate.ts | 63 + frontend/tsconfig.json | 78 + frontend/webpack/webpack.common.js | 36 + frontend/webpack/webpack.dev.js | 21 + frontend/webpack/webpack.prod.js | 28 + 122 files changed, 29661 insertions(+) create mode 100644 .github/workflows/frontend_ci.yml create mode 100644 .github/workflows/frontend_dev_cd.yml create mode 100644 .github/workflows/frontend_prod_cd.yml create mode 100644 frontend/.babelrc create mode 100644 frontend/.eslintrc create mode 100644 frontend/.gitignore create mode 100644 frontend/.prettierrc create mode 100644 frontend/.storybook/main.ts create mode 100644 frontend/.storybook/preview-body.html create mode 100644 frontend/.storybook/preview.ts create mode 100644 frontend/jest.config.js create mode 100644 frontend/package-lock.json create mode 100644 frontend/package.json create mode 100644 frontend/public/index.html create mode 100644 frontend/public/mockServiceWorker.js create mode 100644 frontend/src/App.tsx create mode 100644 frontend/src/__test__/components.test.tsx create mode 100644 frontend/src/api/fetch.ts create mode 100644 frontend/src/assets/applicant-icon.svg create mode 100644 frontend/src/assets/checkboxIcon.tsx create mode 100644 frontend/src/assets/close-icon-red.svg create mode 100644 frontend/src/assets/complete-icon.svg create mode 100644 frontend/src/assets/error-icon.svg create mode 100644 frontend/src/assets/eye-icon.svg create mode 100644 frontend/src/assets/feedback-icon/bad-feedback-gray-icon.svg create mode 100644 frontend/src/assets/feedback-icon/bad-feedback-icon.svg create mode 100644 frontend/src/assets/feedback-icon/good-feedback-gray-icon.svg create mode 100644 frontend/src/assets/feedback-icon/good-feedback-icon.svg create mode 100644 frontend/src/assets/feedback-icon/great-feedback-gray-icon.svg create mode 100644 frontend/src/assets/feedback-icon/great-feedback-icon.svg create mode 100644 frontend/src/assets/github-icon.svg create mode 100644 frontend/src/assets/letter-icon.svg create mode 100644 frontend/src/assets/logo-image.svg create mode 100644 frontend/src/assets/technicalLabelIcon.tsx create mode 100644 frontend/src/components/CheckBox/CheckBox.tsx create mode 100644 frontend/src/components/ConfirmModal/ConfirmModal.tsx create mode 100644 frontend/src/components/InputBox/InputBox.tsx create mode 100644 frontend/src/components/ListFilter/ListFilter.tsx create mode 100644 frontend/src/components/MyPage/MyPagePostButton/MyPagePostButton.tsx create mode 100644 frontend/src/components/MyPage/MyPagePostItem/MyPagePostItem.tsx create mode 100644 frontend/src/components/MyPage/MyPagePostList/MyPagePostList.tsx create mode 100644 frontend/src/components/PostTag/PostTag.tsx create mode 100644 frontend/src/components/PostTagList/PostTagList.tsx create mode 100644 frontend/src/components/ReviewTypeButton/ReviewTypeButton.tsx create mode 100644 frontend/src/components/RunnerPost/RunnerPostItem/RunnerPostItem.tsx create mode 100644 frontend/src/components/RunnerPost/RunnerPostList/RunnerPostList.tsx create mode 100644 frontend/src/components/SendMessageModal/SendMessageModal.tsx create mode 100644 frontend/src/components/SupporterCard/SupporterCardItem/SupporterCardItem.tsx create mode 100644 frontend/src/components/SupporterCard/SupporterCartList/SupporterCardList.tsx create mode 100644 frontend/src/components/TagInput/TagInput.tsx create mode 100644 frontend/src/components/TechLabel/TechLabel.tsx create mode 100644 frontend/src/components/TechLabelButton/TechLabelButton.tsx create mode 100644 frontend/src/components/TechTagSelectModal/TechTagSelectModal.tsx create mode 100644 frontend/src/components/Textarea/Textarea.tsx create mode 100644 frontend/src/components/common/Avatar/Avatar.stories.ts create mode 100644 frontend/src/components/common/Avatar/Avatar.tsx create mode 100644 frontend/src/components/common/Button/Button.stories.ts create mode 100644 frontend/src/components/common/Button/Button.tsx create mode 100644 frontend/src/components/common/Label/Label.stories.ts create mode 100644 frontend/src/components/common/Label/Label.tsx create mode 100644 frontend/src/components/common/Modal/Modal.stories.tsx create mode 100644 frontend/src/components/common/Modal/Modal.tsx create mode 100644 frontend/src/components/common/Tag/Tag.stories.ts create mode 100644 frontend/src/components/common/Tag/Tag.tsx create mode 100644 frontend/src/components/common/Toast/Toast.stories.ts create mode 100644 frontend/src/components/common/Toast/Toast.tsx create mode 100644 frontend/src/constants/feedback.ts create mode 100644 frontend/src/constants/index.ts create mode 100644 frontend/src/constants/message.ts create mode 100644 frontend/src/constants/tags.ts create mode 100644 frontend/src/contexts/ToastContext.tsx create mode 100644 frontend/src/hooks/usePageRouter.ts create mode 100644 frontend/src/hooks/useToken.ts create mode 100644 frontend/src/index.tsx create mode 100644 frontend/src/layout/Header.tsx create mode 100644 frontend/src/layout/Layout.tsx create mode 100644 frontend/src/mocks/data/headerProfile.json create mode 100644 frontend/src/mocks/data/myPagePost/done.json create mode 100644 frontend/src/mocks/data/myPagePost/inProgress.json create mode 100644 frontend/src/mocks/data/myPagePost/notStarted.json create mode 100644 frontend/src/mocks/data/myPageRunnerProfile.json create mode 100644 frontend/src/mocks/data/myPageSupporterProfile.json create mode 100644 frontend/src/mocks/data/runnerPostDetails.json create mode 100644 frontend/src/mocks/data/runnerPostList.json create mode 100644 frontend/src/mocks/data/runnerProfileInfo.json create mode 100644 frontend/src/mocks/data/supporterCandidate.json create mode 100644 frontend/src/mocks/data/supporterProfileInfo.json create mode 100644 frontend/src/mocks/data/supporterProfilePost.json create mode 100644 frontend/src/mocks/handlers.ts create mode 100644 frontend/src/mocks/worker.ts create mode 100644 frontend/src/pages/CreationResultPage.tsx create mode 100644 frontend/src/pages/GithubCallbackPage.tsx create mode 100644 frontend/src/pages/LoginPage.tsx create mode 100644 frontend/src/pages/MainPage.tsx create mode 100644 frontend/src/pages/MyPage.tsx create mode 100644 frontend/src/pages/ProfileEditPage.tsx create mode 100644 frontend/src/pages/RunnerPostCreatePage.tsx create mode 100644 frontend/src/pages/RunnerPostDetailPage.tsx create mode 100644 frontend/src/pages/RunnerProfilePage.tsx create mode 100644 frontend/src/pages/SupporterFeedbackPage.tsx create mode 100644 frontend/src/pages/SupporterProfilePage.tsx create mode 100644 frontend/src/pages/SupporterSelectPage.tsx create mode 100644 frontend/src/router.tsx create mode 100644 frontend/src/styles/GlobalStyles.ts create mode 100644 frontend/src/styles/ResetStyle.ts create mode 100644 frontend/src/types/feedback.ts create mode 100644 frontend/src/types/font.d.ts create mode 100644 frontend/src/types/image.d.ts create mode 100644 frontend/src/types/myPage.ts create mode 100644 frontend/src/types/profile.ts create mode 100644 frontend/src/types/runnerPost.ts create mode 100644 frontend/src/types/select.ts create mode 100644 frontend/src/types/supporterCandidate.ts create mode 100644 frontend/src/types/tags.ts create mode 100644 frontend/src/utils/date.ts create mode 100644 frontend/src/utils/object.ts create mode 100644 frontend/src/utils/postOption.ts create mode 100644 frontend/src/utils/validate.ts create mode 100644 frontend/tsconfig.json create mode 100644 frontend/webpack/webpack.common.js create mode 100644 frontend/webpack/webpack.dev.js create mode 100644 frontend/webpack/webpack.prod.js diff --git a/.github/workflows/frontend_ci.yml b/.github/workflows/frontend_ci.yml new file mode 100644 index 000000000..3aa9e9eaf --- /dev/null +++ b/.github/workflows/frontend_ci.yml @@ -0,0 +1,27 @@ +name: frontend_ci + +on: + push: + branches: + - dev/FE + paths: 'frontend/**' + pull_request: + branches: + - dev/FE + paths: 'frontend/**' + +jobs: + test: + runs-on: ubuntu-latest + defaults: + run: + working-directory: ./frontend + steps: + - name: Checkout code + uses: actions/checkout@v3 + + - name: 의존성을 설치한다 + run: npm install + + - name: 테스트를 수행한다 + run: npm run test diff --git a/.github/workflows/frontend_dev_cd.yml b/.github/workflows/frontend_dev_cd.yml new file mode 100644 index 000000000..8cdf3f92f --- /dev/null +++ b/.github/workflows/frontend_dev_cd.yml @@ -0,0 +1,59 @@ +name: frontend_cd + +on: + push: + branches: + - deploy/FE + +defaults: + run: + working-directory: ./frontend + +permissions: + contents: read + +jobs: + build-and-upload: + runs-on: ubuntu-latest + + steps: + - name: Setup Repository + uses: actions/checkout@v3 + + - name: Setup node with cache + uses: actions/setup-node@v3 + with: + node-version: 18 + cache: 'npm' + cache-dependency-path: '**/package-lock.json' + + - name: Setup environment variables + run: | + echo "REACT_APP_BASE_URL=${{ secrets.REACT_APP_DEV_BASE_URL }}" >> .env + + - name: Install Dependancies + run: npm install + + - name: Build App + run: npm run build + + - name: Upload frontend build file to artifact + uses: actions/upload-artifact@v3 + with: + name: FrontendApplication + path: frontend/dist + + deploy: + needs: build-and-upload + runs-on: [self-hosted, Linux, ARM64] + + steps: + - name: Remove previous version app + working-directory: frontend/dist + run: rm -rf dist + + - name: Download build file from artifact + uses: actions/download-artifact@v3 + with: + name: FrontendApplication + path: frontend/dist diff --git a/.github/workflows/frontend_prod_cd.yml b/.github/workflows/frontend_prod_cd.yml new file mode 100644 index 000000000..5aa97e89a --- /dev/null +++ b/.github/workflows/frontend_prod_cd.yml @@ -0,0 +1,59 @@ +name: frontend_cd + +on: + push: + branches: + - prod/FE + +defaults: + run: + working-directory: ./frontend + +permissions: + contents: read + +jobs: + build-and-upload: + runs-on: ubuntu-latest + + steps: + - name: Setup Repository + uses: actions/checkout@v3 + + - name: Setup node with cache + uses: actions/setup-node@v3 + with: + node-version: 18 + cache: 'npm' + cache-dependency-path: '**/package-lock.json' + + - name: Setup environment variables + run: | + echo "REACT_APP_BASE_URL=${{ secrets.REACT_APP_PROD_BASE_URL }}" >> .env + + - name: Install Dependancies + run: npm install + + - name: Build App + run: npm run build + + - name: Upload frontend build file to artifact + uses: actions/upload-artifact@v3 + with: + name: FrontendApplication + path: frontend/dist + + deploy: + needs: build-and-upload + runs-on: [self-hosted, Linux, ARM64, deploy] + + steps: + - name: Remove previous version app + working-directory: frontend/dist + run: rm -rf dist + + - name: Download build file from artifact + uses: actions/download-artifact@v3 + with: + name: FrontendApplication + path: frontend/dist diff --git a/frontend/.babelrc b/frontend/.babelrc new file mode 100644 index 000000000..883ea502d --- /dev/null +++ b/frontend/.babelrc @@ -0,0 +1,14 @@ +{ + "presets": [ + "@babel/preset-react", + [ + "@babel/preset-env", + { + "modules": false, + "useBuiltIns": "usage", + "corejs": 3 + } + ], + "@babel/preset-typescript" + ] +} diff --git a/frontend/.eslintrc b/frontend/.eslintrc new file mode 100644 index 000000000..59b6529a8 --- /dev/null +++ b/frontend/.eslintrc @@ -0,0 +1,9 @@ +{ + "parserOptions": { + "ecmaVersion": "latest" + }, + "env": { + "es6": true + }, + "extends": ["plugin:prettier/recommended"] +} diff --git a/frontend/.gitignore b/frontend/.gitignore new file mode 100644 index 000000000..0771922dd --- /dev/null +++ b/frontend/.gitignore @@ -0,0 +1,2 @@ +node_modules +/dist \ No newline at end of file diff --git a/frontend/.prettierrc b/frontend/.prettierrc new file mode 100644 index 000000000..23783160a --- /dev/null +++ b/frontend/.prettierrc @@ -0,0 +1,7 @@ +{ + "printWidth": 120, + "tabWidth": 2, + "singleQuote": true, + "trailingComma": "all", + "semi": true +} diff --git a/frontend/.storybook/main.ts b/frontend/.storybook/main.ts new file mode 100644 index 000000000..0c4275a39 --- /dev/null +++ b/frontend/.storybook/main.ts @@ -0,0 +1,31 @@ +import type { StorybookConfig } from '@storybook/react-webpack5'; +import webpack from '../webpack/webpack.common'; + +const config: StorybookConfig = { + stories: ['../src/**/*.stories.@(js|jsx|mjs|ts|tsx)'], + + staticDirs: ['../src/assets'], + addons: [ + '@storybook/addon-links', + '@storybook/addon-essentials', + '@storybook/addon-onboarding', + '@storybook/addon-interactions', + '@storybook/addon-essentials', + '@storybook/addon-styling', + ], + framework: { + name: '@storybook/react-webpack5', + options: {}, + }, + docs: { + autodocs: 'tag', + }, + webpackFinal: async (config) => { + return { + ...config, + module: { ...config.module }, + resolve: { ...webpack.resolve }, + }; + }, +}; +export default config; diff --git a/frontend/.storybook/preview-body.html b/frontend/.storybook/preview-body.html new file mode 100644 index 000000000..54ac17607 --- /dev/null +++ b/frontend/.storybook/preview-body.html @@ -0,0 +1,2 @@ +<div id="modal-root"></div> +<div id="toast-root"></div> diff --git a/frontend/.storybook/preview.ts b/frontend/.storybook/preview.ts new file mode 100644 index 000000000..4e8491db8 --- /dev/null +++ b/frontend/.storybook/preview.ts @@ -0,0 +1,22 @@ +import type { Preview } from '@storybook/react'; +import { withThemeFromJSXProvider } from '@storybook/addon-styling'; +import { GlobalStyle } from '../src/styles/GlobalStyles'; + +const preview: Preview = { + parameters: { + actions: { argTypesRegex: '^on[A-Z].*' }, + controls: { + matchers: { + color: /(background|color)$/i, + date: /Date$/, + }, + }, + }, + decorators: [ + withThemeFromJSXProvider({ + GlobalStyles: GlobalStyle, + }), + ], +}; + +export default preview; diff --git a/frontend/jest.config.js b/frontend/jest.config.js new file mode 100644 index 000000000..a079a2817 --- /dev/null +++ b/frontend/jest.config.js @@ -0,0 +1,7 @@ +module.exports = { + preset: 'ts-jest', + testEnvironment: 'jsdom', + moduleNameMapper: { + '^@/(.*)$': '<rootDir>/src/$1', + }, +}; diff --git a/frontend/package-lock.json b/frontend/package-lock.json new file mode 100644 index 000000000..b0156f3c9 --- /dev/null +++ b/frontend/package-lock.json @@ -0,0 +1,21416 @@ +{ + "name": "baton", + "version": "1.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "baton", + "version": "1.0.0", + "license": "ISC", + "dependencies": { + "@types/react": "^18.2.14", + "@types/react-dom": "^18.2.6", + "core-js": "^3.31.1", + "dotenv": "^16.3.1", + "react": "^18.2.0", + "react-dom": "^18.2.0", + "react-router-dom": "^6.14.2", + "styled-components": "^6.0.4" + }, + "devDependencies": { + "@babel/core": "^7.22.5", + "@babel/preset-env": "^7.22.5", + "@babel/preset-react": "^7.22.5", + "@babel/preset-typescript": "^7.22.5", + "@storybook/addon-essentials": "^7.2.1", + "@storybook/addon-interactions": "^7.2.1", + "@storybook/addon-links": "^7.2.1", + "@storybook/addon-onboarding": "^1.0.8", + "@storybook/addon-styling": "^1.3.5", + "@storybook/blocks": "^7.2.1", + "@storybook/react": "^7.2.1", + "@storybook/react-webpack5": "^7.2.1", + "@storybook/testing-library": "^0.2.0", + "@testing-library/jest-dom": "^5.17.0", + "@testing-library/react": "^14.0.0", + "@types/jest": "^29.5.3", + "@types/styled-components": "^5.1.26", + "babel-loader": "^9.1.2", + "eslint": "^8.44.0", + "eslint-config-prettier": "^8.8.0", + "eslint-plugin-prettier": "^4.2.1", + "eslint-plugin-storybook": "^0.6.13", + "html-webpack-plugin": "^5.5.3", + "jest": "^29.6.1", + "jest-environment-jsdom": "^29.6.1", + "msw": "^1.2.3", + "prettier": "^2.8.8", + "storybook": "^7.2.1", + "ts-jest": "^29.1.1", + "typescript": "^5.1.6", + "webpack": "^5.88.1", + "webpack-cli": "^5.1.4", + "webpack-dev-server": "^4.15.1" + } + }, + "node_modules/@aashutoshrathi/word-wrap": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz", + "integrity": "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@adobe/css-tools": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/@adobe/css-tools/-/css-tools-4.3.0.tgz", + "integrity": "sha512-+RNNcQvw2V1bmnBTPAtOLfW/9mhH2vC67+rUSi5T8EtEWt6lEnGNY2GuhZ1/YwbgikT1TkhvidCDmN5Q5YCo/w==", + "dev": true + }, + "node_modules/@ampproject/remapping": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.1.tgz", + "integrity": "sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.0", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@aw-web-design/x-default-browser": { + "version": "1.4.126", + "resolved": "https://registry.npmjs.org/@aw-web-design/x-default-browser/-/x-default-browser-1.4.126.tgz", + "integrity": "sha512-Xk1sIhyNC/esHGGVjL/niHLowM0csl/kFO5uawBy4IrWwy0o1G8LGt3jP6nmWGz+USxeeqbihAmp/oVZju6wug==", + "dev": true, + "dependencies": { + "default-browser-id": "3.0.0" + }, + "bin": { + "x-default-browser": "bin/x-default-browser.js" + } + }, + "node_modules/@babel/cli": { + "version": "7.22.9", + "resolved": "https://registry.npmjs.org/@babel/cli/-/cli-7.22.9.tgz", + "integrity": "sha512-nb2O7AThqRo7/E53EGiuAkMaRbb7J5Qp3RvN+dmua1U+kydm0oznkhqbTEG15yk26G/C3yL6OdZjzgl+DMXVVA==", + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.17", + "commander": "^4.0.1", + "convert-source-map": "^1.1.0", + "fs-readdir-recursive": "^1.1.0", + "glob": "^7.2.0", + "make-dir": "^2.1.0", + "slash": "^2.0.0" + }, + "bin": { + "babel": "bin/babel.js", + "babel-external-helpers": "bin/babel-external-helpers.js" + }, + "engines": { + "node": ">=6.9.0" + }, + "optionalDependencies": { + "@nicolo-ribaudo/chokidar-2": "2.1.8-no-fsevents.3", + "chokidar": "^3.4.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/cli/node_modules/commander": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", + "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", + "engines": { + "node": ">= 6" + } + }, + "node_modules/@babel/cli/node_modules/make-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", + "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", + "dependencies": { + "pify": "^4.0.1", + "semver": "^5.6.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@babel/cli/node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.22.10", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.10.tgz", + "integrity": "sha512-/KKIMG4UEL35WmI9OlvMhurwtytjvXoFcGNrOvyG9zIzA8YmPjVtIZUf7b05+TPO7G7/GEmLHDaoCgACHl9hhA==", + "dependencies": { + "@babel/highlight": "^7.22.10", + "chalk": "^2.4.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.22.9", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.22.9.tgz", + "integrity": "sha512-5UamI7xkUcJ3i9qVDS+KFDEK8/7oJ55/sJMB1Ge7IEapr7KfdfV/HErR+koZwOfd+SgtFKOKRhRakdg++DcJpQ==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.22.10", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.22.10.tgz", + "integrity": "sha512-fTmqbbUBAwCcre6zPzNngvsI0aNrPZe77AeqvDxWM9Nm+04RrJ3CAmGHA9f7lJQY6ZMhRztNemy4uslDxTX4Qw==", + "dependencies": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.22.10", + "@babel/generator": "^7.22.10", + "@babel/helper-compilation-targets": "^7.22.10", + "@babel/helper-module-transforms": "^7.22.9", + "@babel/helpers": "^7.22.10", + "@babel/parser": "^7.22.10", + "@babel/template": "^7.22.5", + "@babel/traverse": "^7.22.10", + "@babel/types": "^7.22.10", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.2", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/core/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/@babel/core/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "node_modules/@babel/core/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/generator": { + "version": "7.22.10", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.22.10.tgz", + "integrity": "sha512-79KIf7YiWjjdZ81JnLujDRApWtl7BxTqWD88+FFdQEIOG8LJ0etDOM7CXuIgGJa55sGOwZVwuEsaLEm0PJ5/+A==", + "dependencies": { + "@babel/types": "^7.22.10", + "@jridgewell/gen-mapping": "^0.3.2", + "@jridgewell/trace-mapping": "^0.3.17", + "jsesc": "^2.5.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-annotate-as-pure": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.22.5.tgz", + "integrity": "sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==", + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.22.5.tgz", + "integrity": "sha512-m1EP3lVOPptR+2DwD125gziZNcmoNSHGmJROKoy87loWUQyJaVXDgpmruWqDARZSmtYQ+Dl25okU8+qhVzuykw==", + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.22.10", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.10.tgz", + "integrity": "sha512-JMSwHD4J7SLod0idLq5PKgI+6g/hLD/iuWBq08ZX49xE14VpVEojJ5rHWptpirV2j020MvypRLAXAO50igCJ5Q==", + "dependencies": { + "@babel/compat-data": "^7.22.9", + "@babel/helper-validator-option": "^7.22.5", + "browserslist": "^4.21.9", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-create-class-features-plugin": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.22.5.tgz", + "integrity": "sha512-xkb58MyOYIslxu3gKmVXmjTtUPvBU4odYzbiIQbWwLKIHCsx6UGZGX6F1IznMFVnDdirseUZopzN+ZRt8Xb33Q==", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-function-name": "^7.22.5", + "@babel/helper-member-expression-to-functions": "^7.22.5", + "@babel/helper-optimise-call-expression": "^7.22.5", + "@babel/helper-replace-supers": "^7.22.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.5", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-create-regexp-features-plugin": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.22.5.tgz", + "integrity": "sha512-1VpEFOIbMRaXyDeUwUfmTIxExLwQ+zkW+Bh5zXpApA3oQedBx9v/updixWxnx/bZpKw7u8VxWjb/qWpIcmPq8A==", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "regexpu-core": "^5.3.1", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-define-polyfill-provider": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.4.2.tgz", + "integrity": "sha512-k0qnnOqHn5dK9pZpfD5XXZ9SojAITdCKRn2Lp6rnDGzIbaP0rHyMPk/4wsSxVBVz4RfN0q6VpXWP2pDGIoQ7hw==", + "dependencies": { + "@babel/helper-compilation-targets": "^7.22.6", + "@babel/helper-plugin-utils": "^7.22.5", + "debug": "^4.1.1", + "lodash.debounce": "^4.0.8", + "resolve": "^1.14.2" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/@babel/helper-define-polyfill-provider/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/@babel/helper-define-polyfill-provider/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "node_modules/@babel/helper-environment-visitor": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.5.tgz", + "integrity": "sha512-XGmhECfVA/5sAt+H+xpSg0mfrHq6FzNr9Oxh7PSEBBRUb/mL7Kz3NICXb194rCqAEdxkhPT1a88teizAFyvk8Q==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-function-name": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.22.5.tgz", + "integrity": "sha512-wtHSq6jMRE3uF2otvfuD3DIvVhOsSNshQl0Qrd7qC9oQJzHvOL4qQXlQn2916+CXGywIjpGuIkoyZRRxHPiNQQ==", + "dependencies": { + "@babel/template": "^7.22.5", + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-hoist-variables": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz", + "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==", + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-member-expression-to-functions": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.22.5.tgz", + "integrity": "sha512-aBiH1NKMG0H2cGZqspNvsaBe6wNGjbJjuLy29aU+eDZjSbbN53BaxlpB02xm9v34pLTZ1nIQPFYn2qMZoa5BQQ==", + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.5.tgz", + "integrity": "sha512-8Dl6+HD/cKifutF5qGd/8ZJi84QeAKh+CEe1sBzz8UayBBGg1dAIJrdHOcOM5b2MpzWL2yuotJTtGjETq0qjXg==", + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.22.9", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.22.9.tgz", + "integrity": "sha512-t+WA2Xn5K+rTeGtC8jCsdAH52bjggG5TKRuRrAGNM/mjIbO4GxvlLMFOEz9wXY5I2XQ60PMFsAG2WIcG82dQMQ==", + "dependencies": { + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-module-imports": "^7.22.5", + "@babel/helper-simple-access": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.6", + "@babel/helper-validator-identifier": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-optimise-call-expression": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.22.5.tgz", + "integrity": "sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw==", + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz", + "integrity": "sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-remap-async-to-generator": { + "version": "7.22.9", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.22.9.tgz", + "integrity": "sha512-8WWC4oR4Px+tr+Fp0X3RHDVfINGpF3ad1HIbrc8A77epiR6eMMc6jsgozkzT2uDiOOdoS9cLIQ+XD2XvI2WSmQ==", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-wrap-function": "^7.22.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-replace-supers": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.22.5.tgz", + "integrity": "sha512-aLdNM5I3kdI/V9xGNyKSF3X/gTyMUBohTZ+/3QdQKAA9vxIiy12E+8E2HoOP1/DjeqU+g6as35QHJNMDDYpuCg==", + "dependencies": { + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-member-expression-to-functions": "^7.22.5", + "@babel/helper-optimise-call-expression": "^7.22.5", + "@babel/template": "^7.22.5", + "@babel/traverse": "^7.22.5", + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-simple-access": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz", + "integrity": "sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==", + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-skip-transparent-expression-wrappers": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.22.5.tgz", + "integrity": "sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q==", + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-split-export-declaration": { + "version": "7.22.6", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz", + "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==", + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz", + "integrity": "sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.5.tgz", + "integrity": "sha512-aJXu+6lErq8ltp+JhkJUfk1MTGyuA4v7f3pA+BJ5HLfNC6nAQ0Cpi9uOquUj8Hehg0aUiHzWQbOVJGao6ztBAQ==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.22.5.tgz", + "integrity": "sha512-R3oB6xlIVKUnxNUxbmgq7pKjxpru24zlimpE8WK47fACIlM0II/Hm1RS8IaOI7NgCr6LNS+jl5l75m20npAziw==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-wrap-function": { + "version": "7.22.10", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.22.10.tgz", + "integrity": "sha512-OnMhjWjuGYtdoO3FmsEFWvBStBAe2QOgwOLsLNDjN+aaiMD8InJk1/O3HSD8lkqTjCgg5YI34Tz15KNNA3p+nQ==", + "dependencies": { + "@babel/helper-function-name": "^7.22.5", + "@babel/template": "^7.22.5", + "@babel/types": "^7.22.10" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.22.10", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.22.10.tgz", + "integrity": "sha512-a41J4NW8HyZa1I1vAndrraTlPZ/eZoga2ZgS7fEr0tZJGVU4xqdE80CEm0CcNjha5EZ8fTBYLKHF0kqDUuAwQw==", + "dependencies": { + "@babel/template": "^7.22.5", + "@babel/traverse": "^7.22.10", + "@babel/types": "^7.22.10" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight": { + "version": "7.22.10", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.10.tgz", + "integrity": "sha512-78aUtVcT7MUscr0K5mIEnkwxPE0MaxkR5RxRwuHaQ+JuU5AmTPhY+do2mdzVTnIJJpyBglql2pehuBIWHug+WQ==", + "dependencies": { + "@babel/helper-validator-identifier": "^7.22.5", + "chalk": "^2.4.2", + "js-tokens": "^4.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.22.10", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.22.10.tgz", + "integrity": "sha512-lNbdGsQb9ekfsnjFGhEiF4hfFqGgfOP3H3d27re3n+CGhNuTSUEQdfWk556sTLNTloczcdM5TYF2LhzmDQKyvQ==", + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.22.5.tgz", + "integrity": "sha512-NP1M5Rf+u2Gw9qfSO4ihjcTGW5zXTi36ITLd4/EoAcEhIZ0yjMqmftDNl3QC19CX7olhrjpyU454g/2W7X0jvQ==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.22.5.tgz", + "integrity": "sha512-31Bb65aZaUwqCbWMnZPduIZxCBngHFlzyN6Dq6KAJjtx+lx6ohKHubc61OomYi7XwVD4Ol0XCVz4h+pYFR048g==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", + "@babel/plugin-transform-optional-chaining": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.13.0" + } + }, + "node_modules/@babel/plugin-external-helpers": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-external-helpers/-/plugin-external-helpers-7.22.5.tgz", + "integrity": "sha512-ngnNEWxmykPk82mH4ajZT0qTztr3Je6hrMuKAslZVM8G1YZTENJSYwrIGtt6KOtznug3exmAtF4so/nPqJuA4A==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-class-properties": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.18.6.tgz", + "integrity": "sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==", + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-nullish-coalescing-operator": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.18.6.tgz", + "integrity": "sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-object-rest-spread": { + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.20.7.tgz", + "integrity": "sha512-d2S98yCiLxDVmBmE8UjGcfPvNEUbA1U5q5WxaWFUGRzJSVAZqm5W6MbPct0jxnegUZ0niLeNX+IOzEs7wYg9Dg==", + "dependencies": { + "@babel/compat-data": "^7.20.5", + "@babel/helper-compilation-targets": "^7.20.7", + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-transform-parameters": "^7.20.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-optional-chaining": { + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.21.0.tgz", + "integrity": "sha512-p4zeefM72gpmEe2fkUr/OnOXpWEf8nAgk7ZYVqqfFiyIG7oFfVZcCrU64hWn5xp4tQ9LkV4bTIa5rD0KANpKNA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/helper-skip-transparent-expression-wrappers": "^7.20.0", + "@babel/plugin-syntax-optional-chaining": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-private-property-in-object": { + "version": "7.21.0-placeholder-for-preset-env.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz", + "integrity": "sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==", + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-async-generators": { + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", + "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-bigint": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz", + "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-class-properties": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", + "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-class-static-block": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", + "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-dynamic-import": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", + "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-export-namespace-from": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", + "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.3" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-flow": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.22.5.tgz", + "integrity": "sha512-9RdCl0i+q0QExayk2nOS7853w08yLucnnPML6EN9S8fgMPVtdLDCdx/cOQ/i44Lb9UeQX9A35yaqBBOMMZxPxQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-assertions": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.22.5.tgz", + "integrity": "sha512-rdV97N7KqsRzeNGoWUOK6yUsWarLjE5Su/Snk9IYPU9CwkWHs4t+rTGOvffTR8XGkJMTAdLfO0xVnXm8wugIJg==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-attributes": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.22.5.tgz", + "integrity": "sha512-KwvoWDeNKPETmozyFE0P2rOLqh39EoQHNjqizrI5B8Vt0ZNS7M56s7dAiAqbYfiAYOuIzIh96z3iR2ktgu3tEg==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-meta": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", + "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-json-strings": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", + "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-jsx": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.22.5.tgz", + "integrity": "sha512-gvyP4hZrgrs/wWMaocvxZ44Hw0b3W8Pe+cMxc8V1ULQ07oh8VNbIRaoD1LRZVTvD+0nieDKjfgKg89sD7rrKrg==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-logical-assignment-operators": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", + "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", + "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-numeric-separator": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", + "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-object-rest-spread": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", + "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-optional-catch-binding": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", + "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-optional-chaining": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", + "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-private-property-in-object": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", + "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-top-level-await": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", + "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-typescript": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.22.5.tgz", + "integrity": "sha512-1mS2o03i7t1c6VzH6fdQ3OA8tcEIxwG18zIPRp+UY1Ihv6W+XZzBCVxExF9upussPXJ0xE9XRHwMoNs1ep/nRQ==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-unicode-sets-regex": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz", + "integrity": "sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-transform-arrow-functions": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.22.5.tgz", + "integrity": "sha512-26lTNXoVRdAnsaDXPpvCNUq+OVWEVC6bx7Vvz9rC53F2bagUWW4u4ii2+h8Fejfh7RYqPxn+libeFBBck9muEw==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-async-generator-functions": { + "version": "7.22.10", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.22.10.tgz", + "integrity": "sha512-eueE8lvKVzq5wIObKK/7dvoeKJ+xc6TvRn6aysIjS6pSCeLy7S/eVi7pEQknZqyqvzaNKdDtem8nUNTBgDVR2g==", + "dependencies": { + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-remap-async-to-generator": "^7.22.9", + "@babel/plugin-syntax-async-generators": "^7.8.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-async-to-generator": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.22.5.tgz", + "integrity": "sha512-b1A8D8ZzE/VhNDoV1MSJTnpKkCG5bJo+19R4o4oy03zM7ws8yEMK755j61Dc3EyvdysbqH5BOOTquJ7ZX9C6vQ==", + "dependencies": { + "@babel/helper-module-imports": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-remap-async-to-generator": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-block-scoped-functions": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.22.5.tgz", + "integrity": "sha512-tdXZ2UdknEKQWKJP1KMNmuF5Lx3MymtMN/pvA+p/VEkhK8jVcQ1fzSy8KM9qRYhAf2/lV33hoMPKI/xaI9sADA==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-block-scoping": { + "version": "7.22.10", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.22.10.tgz", + "integrity": "sha512-1+kVpGAOOI1Albt6Vse7c8pHzcZQdQKW+wJH+g8mCaszOdDVwRXa/slHPqIw+oJAJANTKDMuM2cBdV0Dg618Vg==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-class-properties": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.22.5.tgz", + "integrity": "sha512-nDkQ0NfkOhPTq8YCLiWNxp1+f9fCobEjCb0n8WdbNUBc4IB5V7P1QnX9IjpSoquKrXF5SKojHleVNs2vGeHCHQ==", + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-class-static-block": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.22.5.tgz", + "integrity": "sha512-SPToJ5eYZLxlnp1UzdARpOGeC2GbHvr9d/UV0EukuVx8atktg194oe+C5BqQ8jRTkgLRVOPYeXRSBg1IlMoVRA==", + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-class-static-block": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.12.0" + } + }, + "node_modules/@babel/plugin-transform-classes": { + "version": "7.22.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.22.6.tgz", + "integrity": "sha512-58EgM6nuPNG6Py4Z3zSuu0xWu2VfodiMi72Jt5Kj2FECmaYk1RrTXA45z6KBFsu9tRgwQDwIiY4FXTt+YsSFAQ==", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-compilation-targets": "^7.22.6", + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-function-name": "^7.22.5", + "@babel/helper-optimise-call-expression": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-replace-supers": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.6", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-computed-properties": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.22.5.tgz", + "integrity": "sha512-4GHWBgRf0krxPX+AaPtgBAlTgTeZmqDynokHOX7aqqAB4tHs3U2Y02zH6ETFdLZGcg9UQSD1WCmkVrE9ErHeOg==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/template": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-destructuring": { + "version": "7.22.10", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.22.10.tgz", + "integrity": "sha512-dPJrL0VOyxqLM9sritNbMSGx/teueHF/htMKrPT7DNxccXxRDPYqlgPFFdr8u+F+qUZOkZoXue/6rL5O5GduEw==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-dotall-regex": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.22.5.tgz", + "integrity": "sha512-5/Yk9QxCQCl+sOIB1WelKnVRxTJDSAIxtJLL2/pqL14ZVlbH0fUQUZa/T5/UnQtBNgghR7mfB8ERBKyKPCi7Vw==", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-duplicate-keys": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.22.5.tgz", + "integrity": "sha512-dEnYD+9BBgld5VBXHnF/DbYGp3fqGMsyxKbtD1mDyIA7AkTSpKXFhCVuj/oQVOoALfBs77DudA0BE4d5mcpmqw==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-dynamic-import": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.22.5.tgz", + "integrity": "sha512-0MC3ppTB1AMxd8fXjSrbPa7LT9hrImt+/fcj+Pg5YMD7UQyWp/02+JWpdnCymmsXwIx5Z+sYn1bwCn4ZJNvhqQ==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-dynamic-import": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-exponentiation-operator": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.22.5.tgz", + "integrity": "sha512-vIpJFNM/FjZ4rh1myqIya9jXwrwwgFRHPjT3DkUA9ZLHuzox8jiXkOLvwm1H+PQIP3CqfC++WPKeuDi0Sjdj1g==", + "dependencies": { + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-export-namespace-from": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.22.5.tgz", + "integrity": "sha512-X4hhm7FRnPgd4nDA4b/5V280xCx6oL7Oob5+9qVS5C13Zq4bh1qq7LU0GgRU6b5dBWBvhGaXYVB4AcN6+ol6vg==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-flow-strip-types": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.22.5.tgz", + "integrity": "sha512-tujNbZdxdG0/54g/oua8ISToaXTFBf8EnSb5PgQSciIXWOWKX3S4+JR7ZE9ol8FZwf9kxitzkGQ+QWeov/mCiA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-flow": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-for-of": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.22.5.tgz", + "integrity": "sha512-3kxQjX1dU9uudwSshyLeEipvrLjBCVthCgeTp6CzE/9JYrlAIaeekVxRpCWsDDfYTfRZRoCeZatCQvwo+wvK8A==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-function-name": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.22.5.tgz", + "integrity": "sha512-UIzQNMS0p0HHiQm3oelztj+ECwFnj+ZRV4KnguvlsD2of1whUeM6o7wGNj6oLwcDoAXQ8gEqfgC24D+VdIcevg==", + "dependencies": { + "@babel/helper-compilation-targets": "^7.22.5", + "@babel/helper-function-name": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-json-strings": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.22.5.tgz", + "integrity": "sha512-DuCRB7fu8MyTLbEQd1ew3R85nx/88yMoqo2uPSjevMj3yoN7CDM8jkgrY0wmVxfJZyJ/B9fE1iq7EQppWQmR5A==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-json-strings": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-literals": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.22.5.tgz", + "integrity": "sha512-fTLj4D79M+mepcw3dgFBTIDYpbcB9Sm0bpm4ppXPaO+U+PKFFyV9MGRvS0gvGw62sd10kT5lRMKXAADb9pWy8g==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-logical-assignment-operators": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.22.5.tgz", + "integrity": "sha512-MQQOUW1KL8X0cDWfbwYP+TbVbZm16QmQXJQ+vndPtH/BoO0lOKpVoEDMI7+PskYxH+IiE0tS8xZye0qr1lGzSA==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-member-expression-literals": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.22.5.tgz", + "integrity": "sha512-RZEdkNtzzYCFl9SE9ATaUMTj2hqMb4StarOJLrZRbqqU4HSBE7UlBw9WBWQiDzrJZJdUWiMTVDI6Gv/8DPvfew==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-amd": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.22.5.tgz", + "integrity": "sha512-R+PTfLTcYEmb1+kK7FNkhQ1gP4KgjpSO6HfH9+f8/yfp2Nt3ggBjiVpRwmwTlfqZLafYKJACy36yDXlEmI9HjQ==", + "dependencies": { + "@babel/helper-module-transforms": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-commonjs": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.22.5.tgz", + "integrity": "sha512-B4pzOXj+ONRmuaQTg05b3y/4DuFz3WcCNAXPLb2Q0GT0TrGKGxNKV4jwsXts+StaM0LQczZbOpj8o1DLPDJIiA==", + "dependencies": { + "@babel/helper-module-transforms": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-simple-access": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-systemjs": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.22.5.tgz", + "integrity": "sha512-emtEpoaTMsOs6Tzz+nbmcePl6AKVtS1yC4YNAeMun9U8YCsgadPNxnOPQ8GhHFB2qdx+LZu9LgoC0Lthuu05DQ==", + "dependencies": { + "@babel/helper-hoist-variables": "^7.22.5", + "@babel/helper-module-transforms": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-validator-identifier": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-umd": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.22.5.tgz", + "integrity": "sha512-+S6kzefN/E1vkSsKx8kmQuqeQsvCKCd1fraCM7zXm4SFoggI099Tr4G8U81+5gtMdUeMQ4ipdQffbKLX0/7dBQ==", + "dependencies": { + "@babel/helper-module-transforms": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.22.5.tgz", + "integrity": "sha512-YgLLKmS3aUBhHaxp5hi1WJTgOUb/NCuDHzGT9z9WTt3YG+CPRhJs6nprbStx6DnWM4dh6gt7SU3sZodbZ08adQ==", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-transform-new-target": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.22.5.tgz", + "integrity": "sha512-AsF7K0Fx/cNKVyk3a+DW0JLo+Ua598/NxMRvxDnkpCIGFh43+h/v2xyhRUYf6oD8gE4QtL83C7zZVghMjHd+iw==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-nullish-coalescing-operator": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.22.5.tgz", + "integrity": "sha512-6CF8g6z1dNYZ/VXok5uYkkBBICHZPiGEl7oDnAx2Mt1hlHVHOSIKWJaXHjQJA5VB43KZnXZDIexMchY4y2PGdA==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-numeric-separator": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.22.5.tgz", + "integrity": "sha512-NbslED1/6M+sXiwwtcAB/nieypGw02Ejf4KtDeMkCEpP6gWFMX1wI9WKYua+4oBneCCEmulOkRpwywypVZzs/g==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-numeric-separator": "^7.10.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-object-rest-spread": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.22.5.tgz", + "integrity": "sha512-Kk3lyDmEslH9DnvCDA1s1kkd3YWQITiBOHngOtDL9Pt6BZjzqb6hiOlb8VfjiiQJ2unmegBqZu0rx5RxJb5vmQ==", + "dependencies": { + "@babel/compat-data": "^7.22.5", + "@babel/helper-compilation-targets": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-transform-parameters": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-object-super": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.22.5.tgz", + "integrity": "sha512-klXqyaT9trSjIUrcsYIfETAzmOEZL3cBYqOYLJxBHfMFFggmXOv+NYSX/Jbs9mzMVESw/WycLFPRx8ba/b2Ipw==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-replace-supers": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-optional-catch-binding": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.22.5.tgz", + "integrity": "sha512-pH8orJahy+hzZje5b8e2QIlBWQvGpelS76C63Z+jhZKsmzfNaPQ+LaW6dcJ9bxTpo1mtXbgHwy765Ro3jftmUg==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-optional-chaining": { + "version": "7.22.10", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.22.10.tgz", + "integrity": "sha512-MMkQqZAZ+MGj+jGTG3OTuhKeBpNcO+0oCEbrGNEaOmiEn+1MzRyQlYsruGiU8RTK3zV6XwrVJTmwiDOyYK6J9g==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", + "@babel/plugin-syntax-optional-chaining": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-parameters": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.22.5.tgz", + "integrity": "sha512-AVkFUBurORBREOmHRKo06FjHYgjrabpdqRSwq6+C7R5iTCZOsM4QbcB27St0a4U6fffyAOqh3s/qEfybAhfivg==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-private-methods": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.22.5.tgz", + "integrity": "sha512-PPjh4gyrQnGe97JTalgRGMuU4icsZFnWkzicB/fUtzlKUqvsWBKEpPPfr5a2JiyirZkHxnAqkQMO5Z5B2kK3fA==", + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-private-property-in-object": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.22.5.tgz", + "integrity": "sha512-/9xnaTTJcVoBtSSmrVyhtSvO3kbqS2ODoh2juEU72c3aYonNF0OMGiaz2gjukyKM2wBBYJP38S4JiE0Wfb5VMQ==", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-create-class-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-property-literals": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.22.5.tgz", + "integrity": "sha512-TiOArgddK3mK/x1Qwf5hay2pxI6wCZnvQqrFSqbtg1GLl2JcNMitVH/YnqjP+M31pLUeTfzY1HAXFDnUBV30rQ==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-display-name": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.22.5.tgz", + "integrity": "sha512-PVk3WPYudRF5z4GKMEYUrLjPl38fJSKNaEOkFuoprioowGuWN6w2RKznuFNSlJx7pzzXXStPUnNSOEO0jL5EVw==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.22.5.tgz", + "integrity": "sha512-rog5gZaVbUip5iWDMTYbVM15XQq+RkUKhET/IHR6oizR+JEoN6CAfTTuHcK4vwUyzca30qqHqEpzBOnaRMWYMA==", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-module-imports": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-jsx": "^7.22.5", + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-development": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.22.5.tgz", + "integrity": "sha512-bDhuzwWMuInwCYeDeMzyi7TaBgRQei6DqxhbyniL7/VG4RSS7HtSL2QbY4eESy1KJqlWt8g3xeEBGPuo+XqC8A==", + "dependencies": { + "@babel/plugin-transform-react-jsx": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-pure-annotations": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.22.5.tgz", + "integrity": "sha512-gP4k85wx09q+brArVinTXhWiyzLl9UpmGva0+mWyKxk6JZequ05x3eUcIUE+FyttPKJFRRVtAvQaJ6YF9h1ZpA==", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-regenerator": { + "version": "7.22.10", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.22.10.tgz", + "integrity": "sha512-F28b1mDt8KcT5bUyJc/U9nwzw6cV+UmTeRlXYIl2TNqMMJif0Jeey9/RQ3C4NOd2zp0/TRsDns9ttj2L523rsw==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "regenerator-transform": "^0.15.2" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-reserved-words": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.22.5.tgz", + "integrity": "sha512-DTtGKFRQUDm8svigJzZHzb/2xatPc6TzNvAIJ5GqOKDsGFYgAskjRulbR/vGsPKq3OPqtexnz327qYpP57RFyA==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-shorthand-properties": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.22.5.tgz", + "integrity": "sha512-vM4fq9IXHscXVKzDv5itkO1X52SmdFBFcMIBZ2FRn2nqVYqw6dBexUgMvAjHW+KXpPPViD/Yo3GrDEBaRC0QYA==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-spread": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.22.5.tgz", + "integrity": "sha512-5ZzDQIGyvN4w8+dMmpohL6MBo+l2G7tfC/O2Dg7/hjpgeWvUx8FzfeOKxGog9IimPa4YekaQ9PlDqTLOljkcxg==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-sticky-regex": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.22.5.tgz", + "integrity": "sha512-zf7LuNpHG0iEeiyCNwX4j3gDg1jgt1k3ZdXBKbZSoA3BbGQGvMiSvfbZRR3Dr3aeJe3ooWFZxOOG3IRStYp2Bw==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-template-literals": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.22.5.tgz", + "integrity": "sha512-5ciOehRNf+EyUeewo8NkbQiUs4d6ZxiHo6BcBcnFlgiJfu16q0bQUw9Jvo0b0gBKFG1SMhDSjeKXSYuJLeFSMA==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-typeof-symbol": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.22.5.tgz", + "integrity": "sha512-bYkI5lMzL4kPii4HHEEChkD0rkc+nvnlR6+o/qdqR6zrm0Sv/nodmyLhlq2DO0YKLUNd2VePmPRjJXSBh9OIdA==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-typescript": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.22.5.tgz", + "integrity": "sha512-SMubA9S7Cb5sGSFFUlqxyClTA9zWJ8qGQrppNUm05LtFuN1ELRFNndkix4zUJrC9F+YivWwa1dHMSyo0e0N9dA==", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-create-class-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-typescript": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-escapes": { + "version": "7.22.10", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.22.10.tgz", + "integrity": "sha512-lRfaRKGZCBqDlRU3UIFovdp9c9mEvlylmpod0/OatICsSfuQ9YFthRo1tpTkGsklEefZdqlEFdY4A2dwTb6ohg==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-property-regex": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.22.5.tgz", + "integrity": "sha512-HCCIb+CbJIAE6sXn5CjFQXMwkCClcOfPCzTlilJ8cUatfzwHlWQkbtV0zD338u9dZskwvuOYTuuaMaA8J5EI5A==", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-regex": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.22.5.tgz", + "integrity": "sha512-028laaOKptN5vHJf9/Arr/HiJekMd41hOEZYvNsrsXqJ7YPYuX2bQxh31fkZzGmq3YqHRJzYFFAVYvKfMPKqyg==", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-sets-regex": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.22.5.tgz", + "integrity": "sha512-lhMfi4FC15j13eKrh3DnYHjpGj6UKQHtNKTbtc1igvAhRy4+kLhV07OpLcsN0VgDEw/MjAvJO4BdMJsHwMhzCg==", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/preset-env": { + "version": "7.22.10", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.22.10.tgz", + "integrity": "sha512-riHpLb1drNkpLlocmSyEg4oYJIQFeXAK/d7rI6mbD0XsvoTOOweXDmQPG/ErxsEhWk3rl3Q/3F6RFQlVFS8m0A==", + "dependencies": { + "@babel/compat-data": "^7.22.9", + "@babel/helper-compilation-targets": "^7.22.10", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-validator-option": "^7.22.5", + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.22.5", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.22.5", + "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2", + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-class-properties": "^7.12.13", + "@babel/plugin-syntax-class-static-block": "^7.14.5", + "@babel/plugin-syntax-dynamic-import": "^7.8.3", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3", + "@babel/plugin-syntax-import-assertions": "^7.22.5", + "@babel/plugin-syntax-import-attributes": "^7.22.5", + "@babel/plugin-syntax-import-meta": "^7.10.4", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.10.4", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5", + "@babel/plugin-syntax-top-level-await": "^7.14.5", + "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", + "@babel/plugin-transform-arrow-functions": "^7.22.5", + "@babel/plugin-transform-async-generator-functions": "^7.22.10", + "@babel/plugin-transform-async-to-generator": "^7.22.5", + "@babel/plugin-transform-block-scoped-functions": "^7.22.5", + "@babel/plugin-transform-block-scoping": "^7.22.10", + "@babel/plugin-transform-class-properties": "^7.22.5", + "@babel/plugin-transform-class-static-block": "^7.22.5", + "@babel/plugin-transform-classes": "^7.22.6", + "@babel/plugin-transform-computed-properties": "^7.22.5", + "@babel/plugin-transform-destructuring": "^7.22.10", + "@babel/plugin-transform-dotall-regex": "^7.22.5", + "@babel/plugin-transform-duplicate-keys": "^7.22.5", + "@babel/plugin-transform-dynamic-import": "^7.22.5", + "@babel/plugin-transform-exponentiation-operator": "^7.22.5", + "@babel/plugin-transform-export-namespace-from": "^7.22.5", + "@babel/plugin-transform-for-of": "^7.22.5", + "@babel/plugin-transform-function-name": "^7.22.5", + "@babel/plugin-transform-json-strings": "^7.22.5", + "@babel/plugin-transform-literals": "^7.22.5", + "@babel/plugin-transform-logical-assignment-operators": "^7.22.5", + "@babel/plugin-transform-member-expression-literals": "^7.22.5", + "@babel/plugin-transform-modules-amd": "^7.22.5", + "@babel/plugin-transform-modules-commonjs": "^7.22.5", + "@babel/plugin-transform-modules-systemjs": "^7.22.5", + "@babel/plugin-transform-modules-umd": "^7.22.5", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.22.5", + "@babel/plugin-transform-new-target": "^7.22.5", + "@babel/plugin-transform-nullish-coalescing-operator": "^7.22.5", + "@babel/plugin-transform-numeric-separator": "^7.22.5", + "@babel/plugin-transform-object-rest-spread": "^7.22.5", + "@babel/plugin-transform-object-super": "^7.22.5", + "@babel/plugin-transform-optional-catch-binding": "^7.22.5", + "@babel/plugin-transform-optional-chaining": "^7.22.10", + "@babel/plugin-transform-parameters": "^7.22.5", + "@babel/plugin-transform-private-methods": "^7.22.5", + "@babel/plugin-transform-private-property-in-object": "^7.22.5", + "@babel/plugin-transform-property-literals": "^7.22.5", + "@babel/plugin-transform-regenerator": "^7.22.10", + "@babel/plugin-transform-reserved-words": "^7.22.5", + "@babel/plugin-transform-shorthand-properties": "^7.22.5", + "@babel/plugin-transform-spread": "^7.22.5", + "@babel/plugin-transform-sticky-regex": "^7.22.5", + "@babel/plugin-transform-template-literals": "^7.22.5", + "@babel/plugin-transform-typeof-symbol": "^7.22.5", + "@babel/plugin-transform-unicode-escapes": "^7.22.10", + "@babel/plugin-transform-unicode-property-regex": "^7.22.5", + "@babel/plugin-transform-unicode-regex": "^7.22.5", + "@babel/plugin-transform-unicode-sets-regex": "^7.22.5", + "@babel/preset-modules": "0.1.6-no-external-plugins", + "@babel/types": "^7.22.10", + "babel-plugin-polyfill-corejs2": "^0.4.5", + "babel-plugin-polyfill-corejs3": "^0.8.3", + "babel-plugin-polyfill-regenerator": "^0.5.2", + "core-js-compat": "^3.31.0", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/preset-env/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/preset-flow": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/preset-flow/-/preset-flow-7.22.5.tgz", + "integrity": "sha512-ta2qZ+LSiGCrP5pgcGt8xMnnkXQrq8Sa4Ulhy06BOlF5QbLw9q5hIx7bn5MrsvyTGAfh6kTOo07Q+Pfld/8Y5Q==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-validator-option": "^7.22.5", + "@babel/plugin-transform-flow-strip-types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/preset-modules": { + "version": "0.1.6-no-external-plugins", + "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.6-no-external-plugins.tgz", + "integrity": "sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/types": "^7.4.4", + "esutils": "^2.0.2" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/@babel/preset-react": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.22.5.tgz", + "integrity": "sha512-M+Is3WikOpEJHgR385HbuCITPTaPRaNkibTEa9oiofmJvIsrceb4yp9RL9Kb+TE8LznmeyZqpP+Lopwcx59xPQ==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-validator-option": "^7.22.5", + "@babel/plugin-transform-react-display-name": "^7.22.5", + "@babel/plugin-transform-react-jsx": "^7.22.5", + "@babel/plugin-transform-react-jsx-development": "^7.22.5", + "@babel/plugin-transform-react-pure-annotations": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/preset-typescript": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.22.5.tgz", + "integrity": "sha512-YbPaal9LxztSGhmndR46FmAbkJ/1fAsw293tSU+I5E5h+cnJ3d4GTwyUgGYmOXJYdGA+uNePle4qbaRzj2NISQ==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-validator-option": "^7.22.5", + "@babel/plugin-syntax-jsx": "^7.22.5", + "@babel/plugin-transform-modules-commonjs": "^7.22.5", + "@babel/plugin-transform-typescript": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/register": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/register/-/register-7.22.5.tgz", + "integrity": "sha512-vV6pm/4CijSQ8Y47RH5SopXzursN35RQINfGJkmOlcpAtGuf94miFvIPhCKGQN7WGIcsgG1BHEX2KVdTYwTwUQ==", + "dev": true, + "dependencies": { + "clone-deep": "^4.0.1", + "find-cache-dir": "^2.0.0", + "make-dir": "^2.1.0", + "pirates": "^4.0.5", + "source-map-support": "^0.5.16" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/register/node_modules/find-cache-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz", + "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==", + "dev": true, + "dependencies": { + "commondir": "^1.0.1", + "make-dir": "^2.0.0", + "pkg-dir": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@babel/register/node_modules/find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dev": true, + "dependencies": { + "locate-path": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@babel/register/node_modules/locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dev": true, + "dependencies": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@babel/register/node_modules/make-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", + "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", + "dev": true, + "dependencies": { + "pify": "^4.0.1", + "semver": "^5.6.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@babel/register/node_modules/p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dev": true, + "dependencies": { + "p-limit": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@babel/register/node_modules/path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/register/node_modules/pkg-dir": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", + "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", + "dev": true, + "dependencies": { + "find-up": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@babel/register/node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "dev": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/@babel/regjsgen": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/@babel/regjsgen/-/regjsgen-0.8.0.tgz", + "integrity": "sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==" + }, + "node_modules/@babel/runtime": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.22.5.tgz", + "integrity": "sha512-ecjvYlnAaZ/KVneE/OdKYBYfgXV3Ptu6zQWmgEF7vwKhQnvVS6bjMD2XYgj+SNvQ1GfK/pjgokfPkC/2CO8CuA==", + "dependencies": { + "regenerator-runtime": "^0.13.11" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/template": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.5.tgz", + "integrity": "sha512-X7yV7eiwAxdj9k94NEylvbVHLiVG1nvzCV2EAowhxLTwODV1jl9UzZ48leOC0sH7OnuHrIkllaBgneUykIcZaw==", + "dependencies": { + "@babel/code-frame": "^7.22.5", + "@babel/parser": "^7.22.5", + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.22.10", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.22.10.tgz", + "integrity": "sha512-Q/urqV4pRByiNNpb/f5OSv28ZlGJiFiiTh+GAHktbIrkPhPbl90+uW6SmpoLyZqutrg9AEaEf3Q/ZBRHBXgxig==", + "dependencies": { + "@babel/code-frame": "^7.22.10", + "@babel/generator": "^7.22.10", + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-function-name": "^7.22.5", + "@babel/helper-hoist-variables": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.6", + "@babel/parser": "^7.22.10", + "@babel/types": "^7.22.10", + "debug": "^4.1.0", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/@babel/traverse/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "node_modules/@babel/types": { + "version": "7.22.10", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.22.10.tgz", + "integrity": "sha512-obaoigiLrlDZ7TUQln/8m4mSqIW2QFeOrCQc9r+xsaHGNoplVNYlRVpsfE8Vj35GEm2ZH4ZhrNYogs/3fj85kg==", + "dependencies": { + "@babel/helper-string-parser": "^7.22.5", + "@babel/helper-validator-identifier": "^7.22.5", + "to-fast-properties": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@base2/pretty-print-object": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@base2/pretty-print-object/-/pretty-print-object-1.0.1.tgz", + "integrity": "sha512-4iri8i1AqYHJE2DstZYkyEprg6Pq6sKx3xn5FpySk9sNhH7qN2LLlHJCfDTZRILNwQNPD7mATWM0TBui7uC1pA==", + "dev": true + }, + "node_modules/@bcoe/v8-coverage": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", + "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", + "dev": true + }, + "node_modules/@colors/colors": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz", + "integrity": "sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==", + "dev": true, + "optional": true, + "engines": { + "node": ">=0.1.90" + } + }, + "node_modules/@discoveryjs/json-ext": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz", + "integrity": "sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==", + "dev": true, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/@emotion/is-prop-valid": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-1.2.1.tgz", + "integrity": "sha512-61Mf7Ufx4aDxx1xlDeOm8aFFigGHE4z+0sKCa+IHCeZKiyP9RLD0Mmx7m8b9/Cf37f7NAvQOOJAbQQGVr5uERw==", + "dependencies": { + "@emotion/memoize": "^0.8.1" + } + }, + "node_modules/@emotion/memoize": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.8.1.tgz", + "integrity": "sha512-W2P2c/VRW1/1tLox0mVUalvnWXxavmv/Oum2aPsRcoDJuob75FC3Y8FbpfLwUegRcxINtGUMPq0tFCvYNTBXNA==" + }, + "node_modules/@emotion/unitless": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.8.1.tgz", + "integrity": "sha512-KOEGMu6dmJZtpadb476IsZBclKvILjopjUii3V+7MnXIQCYh8W3NgNcgwo21n9LXZX6EDIKvqfjYxXebDwxKmQ==" + }, + "node_modules/@emotion/use-insertion-effect-with-fallbacks": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@emotion/use-insertion-effect-with-fallbacks/-/use-insertion-effect-with-fallbacks-1.0.1.tgz", + "integrity": "sha512-jT/qyKZ9rzLErtrjGgdkMBn2OP8wl0G3sQlBb3YPryvKHsjvINUhVaPFfP+fpBcOkmrVOVEEHQFJ7nbj2TH2gw==", + "dev": true, + "peerDependencies": { + "react": ">=16.8.0" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.18.20.tgz", + "integrity": "sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.18.20.tgz", + "integrity": "sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.18.20.tgz", + "integrity": "sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.18.20.tgz", + "integrity": "sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.18.20.tgz", + "integrity": "sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.18.20.tgz", + "integrity": "sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.18.20.tgz", + "integrity": "sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.18.20.tgz", + "integrity": "sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.18.20.tgz", + "integrity": "sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.18.20.tgz", + "integrity": "sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.18.20.tgz", + "integrity": "sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==", + "cpu": [ + "loong64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.18.20.tgz", + "integrity": "sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ==", + "cpu": [ + "mips64el" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.18.20.tgz", + "integrity": "sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.18.20.tgz", + "integrity": "sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.18.20.tgz", + "integrity": "sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.18.20.tgz", + "integrity": "sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.18.20.tgz", + "integrity": "sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.18.20.tgz", + "integrity": "sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.18.20.tgz", + "integrity": "sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.18.20.tgz", + "integrity": "sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.18.20.tgz", + "integrity": "sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.18.20.tgz", + "integrity": "sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@eslint-community/eslint-utils": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", + "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", + "dev": true, + "dependencies": { + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + } + }, + "node_modules/@eslint-community/regexpp": { + "version": "4.5.1", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.5.1.tgz", + "integrity": "sha512-Z5ba73P98O1KUYCCJTUeVpja9RcGoMdncZ6T49FCUl2lN38JtCJ+3WgIDBv0AuY4WChU5PmtJmOCTlN6FZTFKQ==", + "dev": true, + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.0.tgz", + "integrity": "sha512-Lj7DECXqIVCqnqjjHMPna4vn6GJcMgul/wuS0je9OZ9gsL0zzDpKPVtcG1HaDVc+9y+qgXneTeUMbCqXJNpH1A==", + "dev": true, + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.6.0", + "globals": "^13.19.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint/eslintrc/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/@eslint/eslintrc/node_modules/globals": { + "version": "13.20.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz", + "integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==", + "dev": true, + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@eslint/eslintrc/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/@eslint/js": { + "version": "8.44.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.44.0.tgz", + "integrity": "sha512-Ag+9YM4ocKQx9AarydN0KY2j0ErMHNIocPDrVo8zAE44xLTjEtz81OdR68/cydGtk6m6jDb5Za3r2useMzYmSw==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/@fal-works/esbuild-plugin-global-externals": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@fal-works/esbuild-plugin-global-externals/-/esbuild-plugin-global-externals-2.1.2.tgz", + "integrity": "sha512-cEee/Z+I12mZcFJshKcCqC8tuX5hG3s+d+9nZ3LabqKF1vKdF41B92pJVCBggjAGORAeOzyyDDKrZwIkLffeOQ==", + "dev": true + }, + "node_modules/@floating-ui/core": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.4.1.tgz", + "integrity": "sha512-jk3WqquEJRlcyu7997NtR5PibI+y5bi+LS3hPmguVClypenMsCY3CBa3LAQnozRCtCrYWSEtAdiskpamuJRFOQ==", + "dev": true, + "dependencies": { + "@floating-ui/utils": "^0.1.1" + } + }, + "node_modules/@floating-ui/dom": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.5.1.tgz", + "integrity": "sha512-KwvVcPSXg6mQygvA1TjbN/gh///36kKtllIF8SUm0qpFj8+rvYrpvlYdL1JoA71SHpDqgSSdGOSoQ0Mp3uY5aw==", + "dev": true, + "dependencies": { + "@floating-ui/core": "^1.4.1", + "@floating-ui/utils": "^0.1.1" + } + }, + "node_modules/@floating-ui/react-dom": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@floating-ui/react-dom/-/react-dom-2.0.1.tgz", + "integrity": "sha512-rZtAmSht4Lry6gdhAJDrCp/6rKN7++JnL1/Anbr/DdeyYXQPxvg/ivrbYvJulbRf4vL8b212suwMM2lxbv+RQA==", + "dev": true, + "dependencies": { + "@floating-ui/dom": "^1.3.0" + }, + "peerDependencies": { + "react": ">=16.8.0", + "react-dom": ">=16.8.0" + } + }, + "node_modules/@floating-ui/utils": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.1.1.tgz", + "integrity": "sha512-m0G6wlnhm/AX0H12IOWtK8gASEMffnX08RtKkCgTdHb9JpHKGloI7icFfLg9ZmQeavcvR0PKmzxClyuFPSjKWw==", + "dev": true + }, + "node_modules/@humanwhocodes/config-array": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.10.tgz", + "integrity": "sha512-KVVjQmNUepDVGXNuoRRdmmEjruj0KfiGSbS8LVc12LMsWDQzRXJ0qdhN8L8uUigKpfEHRhlaQFY0ib1tnUbNeQ==", + "dev": true, + "dependencies": { + "@humanwhocodes/object-schema": "^1.2.1", + "debug": "^4.1.1", + "minimatch": "^3.0.5" + }, + "engines": { + "node": ">=10.10.0" + } + }, + "node_modules/@humanwhocodes/config-array/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/@humanwhocodes/config-array/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true, + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/object-schema": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", + "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", + "dev": true + }, + "node_modules/@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "dev": true, + "dependencies": { + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@isaacs/cliui/node_modules/ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true + }, + "node_modules/@isaacs/cliui/node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dev": true, + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@isaacs/cliui/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dev": true, + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/@istanbuljs/load-nyc-config": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", + "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", + "dev": true, + "dependencies": { + "camelcase": "^5.3.1", + "find-up": "^4.1.0", + "get-package-type": "^0.1.0", + "js-yaml": "^3.13.1", + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dev": true, + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/@istanbuljs/schema": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", + "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/console": { + "version": "29.6.2", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-29.6.2.tgz", + "integrity": "sha512-0N0yZof5hi44HAR2pPS+ikJ3nzKNoZdVu8FffRf3wy47I7Dm7etk/3KetMdRUqzVd16V4O2m2ISpNTbnIuqy1w==", + "dev": true, + "dependencies": { + "@jest/types": "^29.6.1", + "@types/node": "*", + "chalk": "^4.0.0", + "jest-message-util": "^29.6.2", + "jest-util": "^29.6.2", + "slash": "^3.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/console/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@jest/console/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@jest/console/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@jest/console/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/@jest/console/node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/console/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/core": { + "version": "29.6.2", + "resolved": "https://registry.npmjs.org/@jest/core/-/core-29.6.2.tgz", + "integrity": "sha512-Oj+5B+sDMiMWLhPFF+4/DvHOf+U10rgvCLGPHP8Xlsy/7QxS51aU/eBngudHlJXnaWD5EohAgJ4js+T6pa+zOg==", + "dev": true, + "dependencies": { + "@jest/console": "^29.6.2", + "@jest/reporters": "^29.6.2", + "@jest/test-result": "^29.6.2", + "@jest/transform": "^29.6.2", + "@jest/types": "^29.6.1", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.9", + "jest-changed-files": "^29.5.0", + "jest-config": "^29.6.2", + "jest-haste-map": "^29.6.2", + "jest-message-util": "^29.6.2", + "jest-regex-util": "^29.4.3", + "jest-resolve": "^29.6.2", + "jest-resolve-dependencies": "^29.6.2", + "jest-runner": "^29.6.2", + "jest-runtime": "^29.6.2", + "jest-snapshot": "^29.6.2", + "jest-util": "^29.6.2", + "jest-validate": "^29.6.2", + "jest-watcher": "^29.6.2", + "micromatch": "^4.0.4", + "pretty-format": "^29.6.2", + "slash": "^3.0.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/@jest/core/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@jest/core/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@jest/core/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@jest/core/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/@jest/core/node_modules/pretty-format": { + "version": "29.6.2", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.6.2.tgz", + "integrity": "sha512-1q0oC8eRveTg5nnBEWMXAU2qpv65Gnuf2eCQzSjxpWFkPaPARwqZZDGuNE0zPAZfTCHzIk3A8dIjwlQKKLphyg==", + "dev": true, + "dependencies": { + "@jest/schemas": "^29.6.0", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/core/node_modules/pretty-format/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@jest/core/node_modules/react-is": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", + "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", + "dev": true + }, + "node_modules/@jest/core/node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/core/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/environment": { + "version": "29.6.2", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.6.2.tgz", + "integrity": "sha512-AEcW43C7huGd/vogTddNNTDRpO6vQ2zaQNrttvWV18ArBx9Z56h7BIsXkNFJVOO4/kblWEQz30ckw0+L3izc+Q==", + "dev": true, + "dependencies": { + "@jest/fake-timers": "^29.6.2", + "@jest/types": "^29.6.1", + "@types/node": "*", + "jest-mock": "^29.6.2" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/expect": { + "version": "29.6.2", + "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-29.6.2.tgz", + "integrity": "sha512-m6DrEJxVKjkELTVAztTLyS/7C92Y2b0VYqmDROYKLLALHn8T/04yPs70NADUYPrV3ruI+H3J0iUIuhkjp7vkfg==", + "dev": true, + "dependencies": { + "expect": "^29.6.2", + "jest-snapshot": "^29.6.2" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/expect-utils": { + "version": "29.6.2", + "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.6.2.tgz", + "integrity": "sha512-6zIhM8go3RV2IG4aIZaZbxwpOzz3ZiM23oxAlkquOIole+G6TrbeXnykxWYlqF7kz2HlBjdKtca20x9atkEQYg==", + "dev": true, + "dependencies": { + "jest-get-type": "^29.4.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/fake-timers": { + "version": "29.6.2", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.6.2.tgz", + "integrity": "sha512-euZDmIlWjm1Z0lJ1D0f7a0/y5Kh/koLFMUBE5SUYWrmy8oNhJpbTBDAP6CxKnadcMLDoDf4waRYCe35cH6G6PA==", + "dev": true, + "dependencies": { + "@jest/types": "^29.6.1", + "@sinonjs/fake-timers": "^10.0.2", + "@types/node": "*", + "jest-message-util": "^29.6.2", + "jest-mock": "^29.6.2", + "jest-util": "^29.6.2" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/globals": { + "version": "29.6.2", + "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-29.6.2.tgz", + "integrity": "sha512-cjuJmNDjs6aMijCmSa1g2TNG4Lby/AeU7/02VtpW+SLcZXzOLK2GpN2nLqcFjmhy3B3AoPeQVx7BnyOf681bAw==", + "dev": true, + "dependencies": { + "@jest/environment": "^29.6.2", + "@jest/expect": "^29.6.2", + "@jest/types": "^29.6.1", + "jest-mock": "^29.6.2" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/reporters": { + "version": "29.6.2", + "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-29.6.2.tgz", + "integrity": "sha512-sWtijrvIav8LgfJZlrGCdN0nP2EWbakglJY49J1Y5QihcQLfy7ovyxxjJBRXMNltgt4uPtEcFmIMbVshEDfFWw==", + "dev": true, + "dependencies": { + "@bcoe/v8-coverage": "^0.2.3", + "@jest/console": "^29.6.2", + "@jest/test-result": "^29.6.2", + "@jest/transform": "^29.6.2", + "@jest/types": "^29.6.1", + "@jridgewell/trace-mapping": "^0.3.18", + "@types/node": "*", + "chalk": "^4.0.0", + "collect-v8-coverage": "^1.0.0", + "exit": "^0.1.2", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "istanbul-lib-coverage": "^3.0.0", + "istanbul-lib-instrument": "^5.1.0", + "istanbul-lib-report": "^3.0.0", + "istanbul-lib-source-maps": "^4.0.0", + "istanbul-reports": "^3.1.3", + "jest-message-util": "^29.6.2", + "jest-util": "^29.6.2", + "jest-worker": "^29.6.2", + "slash": "^3.0.0", + "string-length": "^4.0.1", + "strip-ansi": "^6.0.0", + "v8-to-istanbul": "^9.0.1" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/@jest/reporters/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@jest/reporters/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@jest/reporters/node_modules/chalk/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/reporters/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@jest/reporters/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/@jest/reporters/node_modules/jest-worker": { + "version": "29.6.2", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.6.2.tgz", + "integrity": "sha512-l3ccBOabTdkng8I/ORCkADz4eSMKejTYv1vB/Z83UiubqhC1oQ5Li6dWCyqOIvSifGjUBxuvxvlm6KGK2DtuAQ==", + "dev": true, + "dependencies": { + "@types/node": "*", + "jest-util": "^29.6.2", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/reporters/node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/schemas": { + "version": "29.6.0", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.0.tgz", + "integrity": "sha512-rxLjXyJBTL4LQeJW3aKo0M/+GkCOXsO+8i9Iu7eDb6KwtP65ayoDsitrdPBtujxQ88k4wI2FNYfa6TOGwSn6cQ==", + "dev": true, + "dependencies": { + "@sinclair/typebox": "^0.27.8" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/source-map": { + "version": "29.6.0", + "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-29.6.0.tgz", + "integrity": "sha512-oA+I2SHHQGxDCZpbrsCQSoMLb3Bz547JnM+jUr9qEbuw0vQlWZfpPS7CO9J7XiwKicEz9OFn/IYoLkkiUD7bzA==", + "dev": true, + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.18", + "callsites": "^3.0.0", + "graceful-fs": "^4.2.9" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/test-result": { + "version": "29.6.2", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-29.6.2.tgz", + "integrity": "sha512-3VKFXzcV42EYhMCsJQURptSqnyjqCGbtLuX5Xxb6Pm6gUf1wIRIl+mandIRGJyWKgNKYF9cnstti6Ls5ekduqw==", + "dev": true, + "dependencies": { + "@jest/console": "^29.6.2", + "@jest/types": "^29.6.1", + "@types/istanbul-lib-coverage": "^2.0.0", + "collect-v8-coverage": "^1.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/test-sequencer": { + "version": "29.6.2", + "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-29.6.2.tgz", + "integrity": "sha512-GVYi6PfPwVejO7slw6IDO0qKVum5jtrJ3KoLGbgBWyr2qr4GaxFV6su+ZAjdTX75Sr1DkMFRk09r2ZVa+wtCGw==", + "dev": true, + "dependencies": { + "@jest/test-result": "^29.6.2", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.6.2", + "slash": "^3.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/test-sequencer/node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/transform": { + "version": "29.6.2", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.6.2.tgz", + "integrity": "sha512-ZqCqEISr58Ce3U+buNFJYUktLJZOggfyvR+bZMaiV1e8B1SIvJbwZMrYz3gx/KAPn9EXmOmN+uB08yLCjWkQQg==", + "dev": true, + "dependencies": { + "@babel/core": "^7.11.6", + "@jest/types": "^29.6.1", + "@jridgewell/trace-mapping": "^0.3.18", + "babel-plugin-istanbul": "^6.1.1", + "chalk": "^4.0.0", + "convert-source-map": "^2.0.0", + "fast-json-stable-stringify": "^2.1.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.6.2", + "jest-regex-util": "^29.4.3", + "jest-util": "^29.6.2", + "micromatch": "^4.0.4", + "pirates": "^4.0.4", + "slash": "^3.0.0", + "write-file-atomic": "^4.0.2" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/transform/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@jest/transform/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@jest/transform/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@jest/transform/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/@jest/transform/node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true + }, + "node_modules/@jest/transform/node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/transform/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/types": { + "version": "29.6.1", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.1.tgz", + "integrity": "sha512-tPKQNMPuXgvdOn2/Lg9HNfUvjYVGolt04Hp03f5hAk878uwOLikN+JzeLY0HcVgKgFl9Hs3EIqpu3WX27XNhnw==", + "dev": true, + "dependencies": { + "@jest/schemas": "^29.6.0", + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^17.0.8", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/types/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@jest/types/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@jest/types/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@jest/types/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/@jest/types/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", + "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", + "dependencies": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", + "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/set-array": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", + "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/source-map": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.5.tgz", + "integrity": "sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ==", + "dev": true, + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.0", + "@jridgewell/trace-mapping": "^0.3.9" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.14", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", + "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.18", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.18.tgz", + "integrity": "sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA==", + "dependencies": { + "@jridgewell/resolve-uri": "3.1.0", + "@jridgewell/sourcemap-codec": "1.4.14" + } + }, + "node_modules/@juggle/resize-observer": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/@juggle/resize-observer/-/resize-observer-3.4.0.tgz", + "integrity": "sha512-dfLbk+PwWvFzSxwk3n5ySL0hfBog779o8h68wK/7/APo/7cgyWp5jcXockbxdk5kFRkbeXWm4Fbi9FrdN381sA==", + "dev": true + }, + "node_modules/@leichtgewicht/ip-codec": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.4.tgz", + "integrity": "sha512-Hcv+nVC0kZnQ3tD9GVu5xSMR4VVYOteQIr/hwFPVEvPdlXqgGEuRjiheChHgdM+JyqdgNcmzZOX/tnl0JOiI7A==", + "dev": true + }, + "node_modules/@mdx-js/react": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@mdx-js/react/-/react-2.3.0.tgz", + "integrity": "sha512-zQH//gdOmuu7nt2oJR29vFhDv88oGPmVw6BggmrHeMI+xgEkp1B2dX9/bMBSYtK0dyLX/aOmesKS09g222K1/g==", + "dev": true, + "dependencies": { + "@types/mdx": "^2.0.0", + "@types/react": ">=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + }, + "peerDependencies": { + "react": ">=16" + } + }, + "node_modules/@mswjs/cookies": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/@mswjs/cookies/-/cookies-0.2.2.tgz", + "integrity": "sha512-mlN83YSrcFgk7Dm1Mys40DLssI1KdJji2CMKN8eOlBqsTADYzj2+jWzsANsUTFbxDMWPD5e9bfA1RGqBpS3O1g==", + "dev": true, + "dependencies": { + "@types/set-cookie-parser": "^2.4.0", + "set-cookie-parser": "^2.4.6" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/@mswjs/interceptors": { + "version": "0.17.9", + "resolved": "https://registry.npmjs.org/@mswjs/interceptors/-/interceptors-0.17.9.tgz", + "integrity": "sha512-4LVGt03RobMH/7ZrbHqRxQrS9cc2uh+iNKSj8UWr8M26A2i793ju+csaB5zaqYltqJmA2jUq4VeYfKmVqvsXQg==", + "dev": true, + "dependencies": { + "@open-draft/until": "^1.0.3", + "@types/debug": "^4.1.7", + "@xmldom/xmldom": "^0.8.3", + "debug": "^4.3.3", + "headers-polyfill": "^3.1.0", + "outvariant": "^1.2.1", + "strict-event-emitter": "^0.2.4", + "web-encoding": "^1.1.5" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/@mswjs/interceptors/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/@mswjs/interceptors/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/@mswjs/interceptors/node_modules/strict-event-emitter": { + "version": "0.2.8", + "resolved": "https://registry.npmjs.org/strict-event-emitter/-/strict-event-emitter-0.2.8.tgz", + "integrity": "sha512-KDf/ujU8Zud3YaLtMCcTI4xkZlZVIYxTLr+XIULexP+77EEVWixeXroLUXQXiVtH4XH2W7jr/3PT1v3zBuvc3A==", + "dev": true, + "dependencies": { + "events": "^3.3.0" + } + }, + "node_modules/@ndelangen/get-tarball": { + "version": "3.0.9", + "resolved": "https://registry.npmjs.org/@ndelangen/get-tarball/-/get-tarball-3.0.9.tgz", + "integrity": "sha512-9JKTEik4vq+yGosHYhZ1tiH/3WpUS0Nh0kej4Agndhox8pAdWhEx5knFVRcb/ya9knCRCs1rPxNrSXTDdfVqpA==", + "dev": true, + "dependencies": { + "gunzip-maybe": "^1.4.2", + "pump": "^3.0.0", + "tar-fs": "^2.1.1" + } + }, + "node_modules/@nicolo-ribaudo/chokidar-2": { + "version": "2.1.8-no-fsevents.3", + "resolved": "https://registry.npmjs.org/@nicolo-ribaudo/chokidar-2/-/chokidar-2-2.1.8-no-fsevents.3.tgz", + "integrity": "sha512-s88O1aVtXftvp5bCPB7WnmXc5IwOZZ7YPuwNPt+GtOOXpPvad1LfbmjYv+qII7zP6RU2QGnqve27dnLycEnyEQ==", + "optional": true + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@open-draft/until": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@open-draft/until/-/until-1.0.3.tgz", + "integrity": "sha512-Aq58f5HiWdyDlFffbbSjAlv596h/cOnt2DO1w3DOC7OJ5EHs0hd/nycJfiu9RJbT6Yk6F1knnRRXNSpxoIVZ9Q==", + "dev": true + }, + "node_modules/@pkgjs/parseargs": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "dev": true, + "optional": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/@pmmmwh/react-refresh-webpack-plugin": { + "version": "0.5.10", + "resolved": "https://registry.npmjs.org/@pmmmwh/react-refresh-webpack-plugin/-/react-refresh-webpack-plugin-0.5.10.tgz", + "integrity": "sha512-j0Ya0hCFZPd4x40qLzbhGsh9TMtdb+CJQiso+WxLOPNasohq9cc5SNUcwsZaRH6++Xh91Xkm/xHCkuIiIu0LUA==", + "dev": true, + "dependencies": { + "ansi-html-community": "^0.0.8", + "common-path-prefix": "^3.0.0", + "core-js-pure": "^3.23.3", + "error-stack-parser": "^2.0.6", + "find-up": "^5.0.0", + "html-entities": "^2.1.0", + "loader-utils": "^2.0.4", + "schema-utils": "^3.0.0", + "source-map": "^0.7.3" + }, + "engines": { + "node": ">= 10.13" + }, + "peerDependencies": { + "@types/webpack": "4.x || 5.x", + "react-refresh": ">=0.10.0 <1.0.0", + "sockjs-client": "^1.4.0", + "type-fest": ">=0.17.0 <4.0.0", + "webpack": ">=4.43.0 <6.0.0", + "webpack-dev-server": "3.x || 4.x", + "webpack-hot-middleware": "2.x", + "webpack-plugin-serve": "0.x || 1.x" + }, + "peerDependenciesMeta": { + "@types/webpack": { + "optional": true + }, + "sockjs-client": { + "optional": true + }, + "type-fest": { + "optional": true + }, + "webpack-dev-server": { + "optional": true + }, + "webpack-hot-middleware": { + "optional": true + }, + "webpack-plugin-serve": { + "optional": true + } + } + }, + "node_modules/@pmmmwh/react-refresh-webpack-plugin/node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@pmmmwh/react-refresh-webpack-plugin/node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@pmmmwh/react-refresh-webpack-plugin/node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@pmmmwh/react-refresh-webpack-plugin/node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@pmmmwh/react-refresh-webpack-plugin/node_modules/source-map": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", + "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@radix-ui/number": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@radix-ui/number/-/number-1.0.1.tgz", + "integrity": "sha512-T5gIdVO2mmPW3NNhjNgEP3cqMXjXL9UbO0BzWcXfvdBs+BohbQxvd/K5hSVKmn9/lbTdsQVKbUcP5WLCwvUbBg==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.13.10" + } + }, + "node_modules/@radix-ui/primitive": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@radix-ui/primitive/-/primitive-1.0.1.tgz", + "integrity": "sha512-yQ8oGX2GVsEYMWGxcovu1uGWPCxV5BFfeeYxqPmuAzUyLT9qmaMXSAhXpb0WrspIeqYzdJpkh2vHModJPgRIaw==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.13.10" + } + }, + "node_modules/@radix-ui/react-arrow": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-arrow/-/react-arrow-1.0.3.tgz", + "integrity": "sha512-wSP+pHsB/jQRaL6voubsQ/ZlrGBHHrOjmBnr19hxYgtS0WvAFwZhK2WP/YY5yF9uKECCEEDGxuLxq1NBK51wFA==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-primitive": "1.0.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-collection": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-collection/-/react-collection-1.0.3.tgz", + "integrity": "sha512-3SzW+0PW7yBBoQlT8wNcGtaxaD0XSu0uLUFgrtHY08Acx05TaHaOmVLR73c0j/cqpDy53KBMO7s0dx2wmOIDIA==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-compose-refs": "1.0.1", + "@radix-ui/react-context": "1.0.1", + "@radix-ui/react-primitive": "1.0.3", + "@radix-ui/react-slot": "1.0.2" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-compose-refs": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-compose-refs/-/react-compose-refs-1.0.1.tgz", + "integrity": "sha512-fDSBgd44FKHa1FRMU59qBMPFcl2PZE+2nmqunj+BWFyYYjnhIDWL2ItDs3rrbJDQOtzt5nIebLCQc4QRfz6LJw==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.13.10" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-context": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-context/-/react-context-1.0.1.tgz", + "integrity": "sha512-ebbrdFoYTcuZ0v4wG5tedGnp9tzcV8awzsxYph7gXUyvnNLuTIcCk1q17JEbnVhXAKG9oX3KtchwiMIAYp9NLg==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.13.10" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-direction": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-direction/-/react-direction-1.0.1.tgz", + "integrity": "sha512-RXcvnXgyvYvBEOhCBuddKecVkoMiI10Jcm5cTI7abJRAHYfFxeu+FBQs/DvdxSYucxR5mna0dNsL6QFlds5TMA==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.13.10" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-dismissable-layer": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@radix-ui/react-dismissable-layer/-/react-dismissable-layer-1.0.4.tgz", + "integrity": "sha512-7UpBa/RKMoHJYjie1gkF1DlK8l1fdU/VKDpoS3rCCo8YBJR294GwcEHyxHw72yvphJ7ld0AXEcSLAzY2F/WyCg==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/primitive": "1.0.1", + "@radix-ui/react-compose-refs": "1.0.1", + "@radix-ui/react-primitive": "1.0.3", + "@radix-ui/react-use-callback-ref": "1.0.1", + "@radix-ui/react-use-escape-keydown": "1.0.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-focus-guards": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-focus-guards/-/react-focus-guards-1.0.1.tgz", + "integrity": "sha512-Rect2dWbQ8waGzhMavsIbmSVCgYxkXLxxR3ZvCX79JOglzdEy4JXMb98lq4hPxUbLr77nP0UOGf4rcMU+s1pUA==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.13.10" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-focus-scope": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-focus-scope/-/react-focus-scope-1.0.3.tgz", + "integrity": "sha512-upXdPfqI4islj2CslyfUBNlaJCPybbqRHAi1KER7Isel9Q2AtSJ0zRBZv8mWQiFXD2nyAJ4BhC3yXgZ6kMBSrQ==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-compose-refs": "1.0.1", + "@radix-ui/react-primitive": "1.0.3", + "@radix-ui/react-use-callback-ref": "1.0.1" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-id": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-id/-/react-id-1.0.1.tgz", + "integrity": "sha512-tI7sT/kqYp8p96yGWY1OAnLHrqDgzHefRBKQ2YAkBS5ja7QLcZ9Z/uY7bEjPUatf8RomoXM8/1sMj1IJaE5UzQ==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-use-layout-effect": "1.0.1" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-popper": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-popper/-/react-popper-1.1.2.tgz", + "integrity": "sha512-1CnGGfFi/bbqtJZZ0P/NQY20xdG3E0LALJaLUEoKwPLwl6PPPfbeiCqMVQnhoFRAxjJj4RpBRJzDmUgsex2tSg==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.13.10", + "@floating-ui/react-dom": "^2.0.0", + "@radix-ui/react-arrow": "1.0.3", + "@radix-ui/react-compose-refs": "1.0.1", + "@radix-ui/react-context": "1.0.1", + "@radix-ui/react-primitive": "1.0.3", + "@radix-ui/react-use-callback-ref": "1.0.1", + "@radix-ui/react-use-layout-effect": "1.0.1", + "@radix-ui/react-use-rect": "1.0.1", + "@radix-ui/react-use-size": "1.0.1", + "@radix-ui/rect": "1.0.1" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-portal": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-portal/-/react-portal-1.0.3.tgz", + "integrity": "sha512-xLYZeHrWoPmA5mEKEfZZevoVRK/Q43GfzRXkWV6qawIWWK8t6ifIiLQdd7rmQ4Vk1bmI21XhqF9BN3jWf+phpA==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-primitive": "1.0.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-primitive": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-1.0.3.tgz", + "integrity": "sha512-yi58uVyoAcK/Nq1inRY56ZSjKypBNKTa/1mcL8qdl6oJeEaDbOldlzrGn7P6Q3Id5d+SYNGc5AJgc4vGhjs5+g==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-slot": "1.0.2" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-select": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-select/-/react-select-1.2.2.tgz", + "integrity": "sha512-zI7McXr8fNaSrUY9mZe4x/HC0jTLY9fWNhO1oLWYMQGDXuV4UCivIGTxwioSzO0ZCYX9iSLyWmAh/1TOmX3Cnw==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/number": "1.0.1", + "@radix-ui/primitive": "1.0.1", + "@radix-ui/react-collection": "1.0.3", + "@radix-ui/react-compose-refs": "1.0.1", + "@radix-ui/react-context": "1.0.1", + "@radix-ui/react-direction": "1.0.1", + "@radix-ui/react-dismissable-layer": "1.0.4", + "@radix-ui/react-focus-guards": "1.0.1", + "@radix-ui/react-focus-scope": "1.0.3", + "@radix-ui/react-id": "1.0.1", + "@radix-ui/react-popper": "1.1.2", + "@radix-ui/react-portal": "1.0.3", + "@radix-ui/react-primitive": "1.0.3", + "@radix-ui/react-slot": "1.0.2", + "@radix-ui/react-use-callback-ref": "1.0.1", + "@radix-ui/react-use-controllable-state": "1.0.1", + "@radix-ui/react-use-layout-effect": "1.0.1", + "@radix-ui/react-use-previous": "1.0.1", + "@radix-ui/react-visually-hidden": "1.0.3", + "aria-hidden": "^1.1.1", + "react-remove-scroll": "2.5.5" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-slot": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.0.2.tgz", + "integrity": "sha512-YeTpuq4deV+6DusvVUW4ivBgnkHwECUu0BiN43L5UCDFgdhsRUWAghhTF5MbvNTPzmiFOx90asDSUjWuCNapwg==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-compose-refs": "1.0.1" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-use-callback-ref": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-callback-ref/-/react-use-callback-ref-1.0.1.tgz", + "integrity": "sha512-D94LjX4Sp0xJFVaoQOd3OO9k7tpBYNOXdVhkltUbGv2Qb9OXdrg/CpsjlZv7ia14Sylv398LswWBVVu5nqKzAQ==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.13.10" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-use-controllable-state": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-controllable-state/-/react-use-controllable-state-1.0.1.tgz", + "integrity": "sha512-Svl5GY5FQeN758fWKrjM6Qb7asvXeiZltlT4U2gVfl8Gx5UAv2sMR0LWo8yhsIZh2oQ0eFdZ59aoOOMV7b47VA==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-use-callback-ref": "1.0.1" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-use-escape-keydown": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-escape-keydown/-/react-use-escape-keydown-1.0.3.tgz", + "integrity": "sha512-vyL82j40hcFicA+M4Ex7hVkB9vHgSse1ZWomAqV2Je3RleKGO5iM8KMOEtfoSB0PnIelMd2lATjTGMYqN5ylTg==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-use-callback-ref": "1.0.1" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-use-layout-effect": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-layout-effect/-/react-use-layout-effect-1.0.1.tgz", + "integrity": "sha512-v/5RegiJWYdoCvMnITBkNNx6bCj20fiaJnWtRkU18yITptraXjffz5Qbn05uOiQnOvi+dbkznkoaMltz1GnszQ==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.13.10" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-use-previous": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-previous/-/react-use-previous-1.0.1.tgz", + "integrity": "sha512-cV5La9DPwiQ7S0gf/0qiD6YgNqM5Fk97Kdrlc5yBcrF3jyEZQwm7vYFqMo4IfeHgJXsRaMvLABFtd0OVEmZhDw==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.13.10" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-use-rect": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-rect/-/react-use-rect-1.0.1.tgz", + "integrity": "sha512-Cq5DLuSiuYVKNU8orzJMbl15TXilTnJKUCltMVQg53BQOF1/C5toAaGrowkgksdBQ9H+SRL23g0HDmg9tvmxXw==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/rect": "1.0.1" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-use-size": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-size/-/react-use-size-1.0.1.tgz", + "integrity": "sha512-ibay+VqrgcaI6veAojjofPATwledXiSmX+C0KrBk/xgpX9rBzPV3OsfwlhQdUOFbh+LKQorLYT+xTXW9V8yd0g==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-use-layout-effect": "1.0.1" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-visually-hidden": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-visually-hidden/-/react-visually-hidden-1.0.3.tgz", + "integrity": "sha512-D4w41yN5YRKtu464TLnByKzMDG/JlMPHtfZgQAu9v6mNakUqGUI9vUrfQKz8NK41VMm/xbZbh76NUTVtIYqOMA==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-primitive": "1.0.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/rect": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@radix-ui/rect/-/rect-1.0.1.tgz", + "integrity": "sha512-fyrgCaedtvMg9NK3en0pnOYJdtfwxUcNolezkNPUsoX57X8oQk+NkqcvzHXD2uKNij6GXmWU9NDru2IWjrO4BQ==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.13.10" + } + }, + "node_modules/@remix-run/router": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.7.2.tgz", + "integrity": "sha512-7Lcn7IqGMV+vizMPoEl5F0XDshcdDYtMI6uJLQdQz5CfZAwy3vvGKYSUk789qndt5dEC4HfSjviSYlSoHGL2+A==", + "engines": { + "node": ">=14" + } + }, + "node_modules/@sinclair/typebox": { + "version": "0.27.8", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", + "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==", + "dev": true + }, + "node_modules/@sinonjs/commons": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.0.tgz", + "integrity": "sha512-jXBtWAF4vmdNmZgD5FoKsVLv3rPgDnLgPbU84LIJ3otV44vJlDRokVng5v8NFJdCf/da9legHcKaRuZs4L7faA==", + "dev": true, + "dependencies": { + "type-detect": "4.0.8" + } + }, + "node_modules/@sinonjs/fake-timers": { + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz", + "integrity": "sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==", + "dev": true, + "dependencies": { + "@sinonjs/commons": "^3.0.0" + } + }, + "node_modules/@storybook/addon-actions": { + "version": "7.2.1", + "resolved": "https://registry.npmjs.org/@storybook/addon-actions/-/addon-actions-7.2.1.tgz", + "integrity": "sha512-YUiKksgRIUm80eZacj/x14BEYCQY5iel1/Wo6mrTP7bVQrUNiCmnINSrup0DObg7lmIaq00h3ow7gKeYJ+x6zw==", + "dev": true, + "dependencies": { + "@storybook/client-logger": "7.2.1", + "@storybook/components": "7.2.1", + "@storybook/core-events": "7.2.1", + "@storybook/global": "^5.0.0", + "@storybook/manager-api": "7.2.1", + "@storybook/preview-api": "7.2.1", + "@storybook/theming": "7.2.1", + "@storybook/types": "7.2.1", + "dequal": "^2.0.2", + "lodash": "^4.17.21", + "polished": "^4.2.2", + "prop-types": "^15.7.2", + "react-inspector": "^6.0.0", + "telejson": "^7.0.3", + "ts-dedent": "^2.0.0", + "uuid": "^9.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "react": { + "optional": true + }, + "react-dom": { + "optional": true + } + } + }, + "node_modules/@storybook/addon-actions/node_modules/uuid": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.0.tgz", + "integrity": "sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg==", + "dev": true, + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/@storybook/addon-backgrounds": { + "version": "7.2.1", + "resolved": "https://registry.npmjs.org/@storybook/addon-backgrounds/-/addon-backgrounds-7.2.1.tgz", + "integrity": "sha512-F+/eERFnCIjDaOkCbCS0erre1AbjsHoM0IdLu2sGIBwuroFwKYy/ijadSsJ1zk4eBqZFxdyN4CuMN6EsK1Xm+Q==", + "dev": true, + "dependencies": { + "@storybook/client-logger": "7.2.1", + "@storybook/components": "7.2.1", + "@storybook/core-events": "7.2.1", + "@storybook/global": "^5.0.0", + "@storybook/manager-api": "7.2.1", + "@storybook/preview-api": "7.2.1", + "@storybook/theming": "7.2.1", + "@storybook/types": "7.2.1", + "memoizerific": "^1.11.3", + "ts-dedent": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "react": { + "optional": true + }, + "react-dom": { + "optional": true + } + } + }, + "node_modules/@storybook/addon-controls": { + "version": "7.2.1", + "resolved": "https://registry.npmjs.org/@storybook/addon-controls/-/addon-controls-7.2.1.tgz", + "integrity": "sha512-ioILEP4wZo6n8ifr1b+o8xCdMVLWyhHqNWoQoBRixxWwpzR4/fHaKo7wBGSkOOWubkhen6wUMUuiJbDdoGyR7g==", + "dev": true, + "dependencies": { + "@storybook/blocks": "7.2.1", + "@storybook/client-logger": "7.2.1", + "@storybook/components": "7.2.1", + "@storybook/core-common": "7.2.1", + "@storybook/core-events": "7.2.1", + "@storybook/manager-api": "7.2.1", + "@storybook/node-logger": "7.2.1", + "@storybook/preview-api": "7.2.1", + "@storybook/theming": "7.2.1", + "@storybook/types": "7.2.1", + "lodash": "^4.17.21", + "ts-dedent": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "react": { + "optional": true + }, + "react-dom": { + "optional": true + } + } + }, + "node_modules/@storybook/addon-docs": { + "version": "7.2.1", + "resolved": "https://registry.npmjs.org/@storybook/addon-docs/-/addon-docs-7.2.1.tgz", + "integrity": "sha512-QlUM22wK0cE9glMRt1auP3BccjafdRvcsAnaLvDIL12HRaUqMpH6vvNN3A3MXo6XuzbOmDwAov5mXdCenpz02A==", + "dev": true, + "dependencies": { + "@jest/transform": "^29.3.1", + "@mdx-js/react": "^2.1.5", + "@storybook/blocks": "7.2.1", + "@storybook/client-logger": "7.2.1", + "@storybook/components": "7.2.1", + "@storybook/csf-plugin": "7.2.1", + "@storybook/csf-tools": "7.2.1", + "@storybook/global": "^5.0.0", + "@storybook/mdx2-csf": "^1.0.0", + "@storybook/node-logger": "7.2.1", + "@storybook/postinstall": "7.2.1", + "@storybook/preview-api": "7.2.1", + "@storybook/react-dom-shim": "7.2.1", + "@storybook/theming": "7.2.1", + "@storybook/types": "7.2.1", + "fs-extra": "^11.1.0", + "remark-external-links": "^8.0.0", + "remark-slug": "^6.0.0", + "ts-dedent": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" + } + }, + "node_modules/@storybook/addon-essentials": { + "version": "7.2.1", + "resolved": "https://registry.npmjs.org/@storybook/addon-essentials/-/addon-essentials-7.2.1.tgz", + "integrity": "sha512-+ICPYpuljKOoO1oTRfoax4n+3UD2/xAY8qQmAsRNN3xOBNJfdrsrCocrfY1j74xqoX+Zflvp5V481zq+MpP4XQ==", + "dev": true, + "dependencies": { + "@storybook/addon-actions": "7.2.1", + "@storybook/addon-backgrounds": "7.2.1", + "@storybook/addon-controls": "7.2.1", + "@storybook/addon-docs": "7.2.1", + "@storybook/addon-highlight": "7.2.1", + "@storybook/addon-measure": "7.2.1", + "@storybook/addon-outline": "7.2.1", + "@storybook/addon-toolbars": "7.2.1", + "@storybook/addon-viewport": "7.2.1", + "@storybook/core-common": "7.2.1", + "@storybook/manager-api": "7.2.1", + "@storybook/node-logger": "7.2.1", + "@storybook/preview-api": "7.2.1", + "ts-dedent": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" + } + }, + "node_modules/@storybook/addon-highlight": { + "version": "7.2.1", + "resolved": "https://registry.npmjs.org/@storybook/addon-highlight/-/addon-highlight-7.2.1.tgz", + "integrity": "sha512-6nNqpSMImn1mSGmEKF1o+C6o4lWJjduGYnCIO/ouXExaNLMrdcGKUEWrluABLOeDRPcNC9/EkuIEd8IsDnUX4A==", + "dev": true, + "dependencies": { + "@storybook/core-events": "7.2.1", + "@storybook/global": "^5.0.0", + "@storybook/preview-api": "7.2.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + } + }, + "node_modules/@storybook/addon-interactions": { + "version": "7.2.1", + "resolved": "https://registry.npmjs.org/@storybook/addon-interactions/-/addon-interactions-7.2.1.tgz", + "integrity": "sha512-EuQMvigfEfQedNBojZhVs8x2mG8tL2n2yhtuYUsmHCmwAITcVxgPRV0xCgv676B8uRQvUru+cm9/nBIf2rUg/A==", + "dev": true, + "dependencies": { + "@storybook/client-logger": "7.2.1", + "@storybook/components": "7.2.1", + "@storybook/core-common": "7.2.1", + "@storybook/core-events": "7.2.1", + "@storybook/global": "^5.0.0", + "@storybook/instrumenter": "7.2.1", + "@storybook/manager-api": "7.2.1", + "@storybook/preview-api": "7.2.1", + "@storybook/theming": "7.2.1", + "@storybook/types": "7.2.1", + "jest-mock": "^27.0.6", + "polished": "^4.2.2", + "ts-dedent": "^2.2.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "react": { + "optional": true + }, + "react-dom": { + "optional": true + } + } + }, + "node_modules/@storybook/addon-interactions/node_modules/@jest/types": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", + "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^16.0.0", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@storybook/addon-interactions/node_modules/@types/yargs": { + "version": "16.0.5", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.5.tgz", + "integrity": "sha512-AxO/ADJOBFJScHbWhq2xAhlWP24rY4aCEG/NFaMvbT3X2MgRsLjhjQwsn0Zi5zn0LG9jUhCCZMeX9Dkuw6k+vQ==", + "dev": true, + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/@storybook/addon-interactions/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@storybook/addon-interactions/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@storybook/addon-interactions/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@storybook/addon-interactions/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/@storybook/addon-interactions/node_modules/jest-mock": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-27.5.1.tgz", + "integrity": "sha512-K4jKbY1d4ENhbrG2zuPWaQBvDly+iZ2yAW+T1fATN78hc0sInwn7wZB8XtlNnvHug5RMwV897Xm4LqmPM4e2Og==", + "dev": true, + "dependencies": { + "@jest/types": "^27.5.1", + "@types/node": "*" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@storybook/addon-interactions/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@storybook/addon-links": { + "version": "7.2.1", + "resolved": "https://registry.npmjs.org/@storybook/addon-links/-/addon-links-7.2.1.tgz", + "integrity": "sha512-3UQfOZ1+wGlPsHWWjXjPskq6nsDXuB+8QvOcpqy51mK+5Zv/EQe386hWj9VUpjLNMxXarWETa5CXGfoQdFzJTA==", + "dev": true, + "dependencies": { + "@storybook/client-logger": "7.2.1", + "@storybook/core-events": "7.2.1", + "@storybook/csf": "^0.1.0", + "@storybook/global": "^5.0.0", + "@storybook/manager-api": "7.2.1", + "@storybook/preview-api": "7.2.1", + "@storybook/router": "7.2.1", + "@storybook/types": "7.2.1", + "prop-types": "^15.7.2", + "ts-dedent": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "react": { + "optional": true + }, + "react-dom": { + "optional": true + } + } + }, + "node_modules/@storybook/addon-measure": { + "version": "7.2.1", + "resolved": "https://registry.npmjs.org/@storybook/addon-measure/-/addon-measure-7.2.1.tgz", + "integrity": "sha512-3Rq/B3Iurbo5dZvUN735GHK+9EDm0xw+liK0PdeYvl21/RkXTV+a4aBcWyyeWwwu1S7pdK1B/0WEc9d5Lot8sA==", + "dev": true, + "dependencies": { + "@storybook/client-logger": "7.2.1", + "@storybook/components": "7.2.1", + "@storybook/core-events": "7.2.1", + "@storybook/global": "^5.0.0", + "@storybook/manager-api": "7.2.1", + "@storybook/preview-api": "7.2.1", + "@storybook/types": "7.2.1", + "tiny-invariant": "^1.3.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "react": { + "optional": true + }, + "react-dom": { + "optional": true + } + } + }, + "node_modules/@storybook/addon-onboarding": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@storybook/addon-onboarding/-/addon-onboarding-1.0.8.tgz", + "integrity": "sha512-3WwCocUuTibHWO89uzAbeONEn6x9NkmxA0mOU4rYPhEsMQ4NDNDD1GXcievZmpwt5VviFgw5FRx8+BxPn54YmQ==", + "dev": true, + "dependencies": { + "@storybook/telemetry": "^7.1.0-alpha.32", + "react-confetti": "^6.1.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" + } + }, + "node_modules/@storybook/addon-outline": { + "version": "7.2.1", + "resolved": "https://registry.npmjs.org/@storybook/addon-outline/-/addon-outline-7.2.1.tgz", + "integrity": "sha512-v2dYDhfSzV8Nsi1pmjcLEOHGJLlUnpnSXlQymb338YJEFKP2G5ylHzKAHG16MmzKeZZd3rthTB0246SFCyf0hg==", + "dev": true, + "dependencies": { + "@storybook/client-logger": "7.2.1", + "@storybook/components": "7.2.1", + "@storybook/core-events": "7.2.1", + "@storybook/global": "^5.0.0", + "@storybook/manager-api": "7.2.1", + "@storybook/preview-api": "7.2.1", + "@storybook/types": "7.2.1", + "ts-dedent": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "react": { + "optional": true + }, + "react-dom": { + "optional": true + } + } + }, + "node_modules/@storybook/addon-styling": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/@storybook/addon-styling/-/addon-styling-1.3.5.tgz", + "integrity": "sha512-W0oejixqUEd2yhy3ZAu9urKJZNCLrRFwpz7JD7OgN9HiUefLw3Rn2NHeP7v4Q1oznIxpYcsgYFzv10zX21Mq5w==", + "dev": true, + "dependencies": { + "@babel/template": "^7.20.7", + "@babel/types": "^7.21.5", + "@storybook/api": "^7.0.12", + "@storybook/components": "^7.0.12", + "@storybook/core-common": "^7.0.12", + "@storybook/core-events": "^7.0.12", + "@storybook/manager-api": "^7.0.12", + "@storybook/node-logger": "^7.0.12", + "@storybook/preview-api": "^7.0.12", + "@storybook/theming": "^7.0.12", + "@storybook/types": "^7.0.12", + "css-loader": "^6.7.3", + "less-loader": "^11.1.0", + "postcss-loader": "^7.2.4", + "prettier": "^2.8.0", + "resolve-url-loader": "^5.0.0", + "sass-loader": "^13.2.2", + "style-loader": "^3.3.2" + }, + "bin": { + "addon-styling-setup": "postinstall.js" + }, + "peerDependencies": { + "less": "^3.5.0 || ^4.0.0", + "postcss": "^7.0.0 || ^8.0.1", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0", + "webpack": "^5.0.0" + }, + "peerDependenciesMeta": { + "less": { + "optional": true + }, + "postcss": { + "optional": true + }, + "react": { + "optional": true + }, + "react-dom": { + "optional": true + }, + "webpack": { + "optional": true + } + } + }, + "node_modules/@storybook/addon-toolbars": { + "version": "7.2.1", + "resolved": "https://registry.npmjs.org/@storybook/addon-toolbars/-/addon-toolbars-7.2.1.tgz", + "integrity": "sha512-SEDj9f0EgifPK/Eyh703N1tbk7SZ7yAZOnNUK8T0mwdKrMa7jskvYuift8iSnJA2ldp1siqwe1Obq+Oielp9hQ==", + "dev": true, + "dependencies": { + "@storybook/client-logger": "7.2.1", + "@storybook/components": "7.2.1", + "@storybook/manager-api": "7.2.1", + "@storybook/preview-api": "7.2.1", + "@storybook/theming": "7.2.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "react": { + "optional": true + }, + "react-dom": { + "optional": true + } + } + }, + "node_modules/@storybook/addon-viewport": { + "version": "7.2.1", + "resolved": "https://registry.npmjs.org/@storybook/addon-viewport/-/addon-viewport-7.2.1.tgz", + "integrity": "sha512-aHl3rCh4MNByfWVtjBzkwMtz0iHQHFhatWXVt7mQoTQFBbZHpeynKvLfKBprp+2whK9RoDHqBUjqGTZrECdpRA==", + "dev": true, + "dependencies": { + "@storybook/client-logger": "7.2.1", + "@storybook/components": "7.2.1", + "@storybook/core-events": "7.2.1", + "@storybook/global": "^5.0.0", + "@storybook/manager-api": "7.2.1", + "@storybook/preview-api": "7.2.1", + "@storybook/theming": "7.2.1", + "memoizerific": "^1.11.3", + "prop-types": "^15.7.2" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "react": { + "optional": true + }, + "react-dom": { + "optional": true + } + } + }, + "node_modules/@storybook/addons": { + "version": "7.2.1", + "resolved": "https://registry.npmjs.org/@storybook/addons/-/addons-7.2.1.tgz", + "integrity": "sha512-I49JOSU5Imv91IWiNQvqGJDZ/llnSxQvttWAh+exhw7+Pq3xfwRmD+fNfyqm1C68/dVGNgwY/w40AP5cQb2PLA==", + "dev": true, + "dependencies": { + "@storybook/manager-api": "7.2.1", + "@storybook/preview-api": "7.2.1", + "@storybook/types": "7.2.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" + } + }, + "node_modules/@storybook/api": { + "version": "7.2.1", + "resolved": "https://registry.npmjs.org/@storybook/api/-/api-7.2.1.tgz", + "integrity": "sha512-wPZYOFBFVgzXv7QxwtBYi17tn4bCneV3FO3vNa9JUPrD+NaLkuY73BiuRJ1gk2+FuDnodJyOwNJFCkKUKJZa6Q==", + "dev": true, + "dependencies": { + "@storybook/client-logger": "7.2.1", + "@storybook/manager-api": "7.2.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "react": { + "optional": true + }, + "react-dom": { + "optional": true + } + } + }, + "node_modules/@storybook/blocks": { + "version": "7.2.1", + "resolved": "https://registry.npmjs.org/@storybook/blocks/-/blocks-7.2.1.tgz", + "integrity": "sha512-1fPsFC6n9R267KwxGHiL80OuIdMDRC9QuIW4sRF0tF/G/yvucbofySYRQl/Y8LjsMJq8D4NpG5xLsneSxMP5cg==", + "dev": true, + "dependencies": { + "@storybook/channels": "7.2.1", + "@storybook/client-logger": "7.2.1", + "@storybook/components": "7.2.1", + "@storybook/core-events": "7.2.1", + "@storybook/csf": "^0.1.0", + "@storybook/docs-tools": "7.2.1", + "@storybook/global": "^5.0.0", + "@storybook/manager-api": "7.2.1", + "@storybook/preview-api": "7.2.1", + "@storybook/theming": "7.2.1", + "@storybook/types": "7.2.1", + "@types/lodash": "^4.14.167", + "color-convert": "^2.0.1", + "dequal": "^2.0.2", + "lodash": "^4.17.21", + "markdown-to-jsx": "^7.1.8", + "memoizerific": "^1.11.3", + "polished": "^4.2.2", + "react-colorful": "^5.1.2", + "telejson": "^7.0.3", + "tocbot": "^4.20.1", + "ts-dedent": "^2.0.0", + "util-deprecate": "^1.0.2" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" + } + }, + "node_modules/@storybook/blocks/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@storybook/blocks/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/@storybook/builder-manager": { + "version": "7.2.1", + "resolved": "https://registry.npmjs.org/@storybook/builder-manager/-/builder-manager-7.2.1.tgz", + "integrity": "sha512-X8B1cUfDaTtsJY3xJNwPy6W4UN7LWXkKktJBoNUGESigQGKpAMvUAmABCZIjZD8GcdGMtU8y/fA7YimUpy/ZKQ==", + "dev": true, + "dependencies": { + "@fal-works/esbuild-plugin-global-externals": "^2.1.2", + "@storybook/core-common": "7.2.1", + "@storybook/manager": "7.2.1", + "@storybook/node-logger": "7.2.1", + "@types/ejs": "^3.1.1", + "@types/find-cache-dir": "^3.2.1", + "@yarnpkg/esbuild-plugin-pnp": "^3.0.0-rc.10", + "browser-assert": "^1.2.1", + "ejs": "^3.1.8", + "esbuild": "^0.18.0", + "esbuild-plugin-alias": "^0.2.1", + "express": "^4.17.3", + "find-cache-dir": "^3.0.0", + "fs-extra": "^11.1.0", + "process": "^0.11.10", + "util": "^0.12.4" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + } + }, + "node_modules/@storybook/builder-webpack5": { + "version": "7.2.1", + "resolved": "https://registry.npmjs.org/@storybook/builder-webpack5/-/builder-webpack5-7.2.1.tgz", + "integrity": "sha512-llN66MbvsGfjgHArVZxfNXxgwhUzQRjpiyqFBfzzP5q83ck16pkqYjffRKRH/Y6CR4VNwXn2XMurPJQqT+aWVA==", + "dev": true, + "dependencies": { + "@babel/core": "^7.22.9", + "@storybook/addons": "7.2.1", + "@storybook/channels": "7.2.1", + "@storybook/client-api": "7.2.1", + "@storybook/client-logger": "7.2.1", + "@storybook/components": "7.2.1", + "@storybook/core-common": "7.2.1", + "@storybook/core-events": "7.2.1", + "@storybook/core-webpack": "7.2.1", + "@storybook/global": "^5.0.0", + "@storybook/manager-api": "7.2.1", + "@storybook/node-logger": "7.2.1", + "@storybook/preview": "7.2.1", + "@storybook/preview-api": "7.2.1", + "@storybook/router": "7.2.1", + "@storybook/store": "7.2.1", + "@storybook/theming": "7.2.1", + "@swc/core": "^1.3.49", + "@types/node": "^16.0.0", + "@types/semver": "^7.3.4", + "babel-loader": "^9.0.0", + "babel-plugin-named-exports-order": "^0.0.2", + "browser-assert": "^1.2.1", + "case-sensitive-paths-webpack-plugin": "^2.4.0", + "constants-browserify": "^1.0.0", + "css-loader": "^6.7.1", + "express": "^4.17.3", + "fork-ts-checker-webpack-plugin": "^8.0.0", + "fs-extra": "^11.1.0", + "html-webpack-plugin": "^5.5.0", + "path-browserify": "^1.0.1", + "process": "^0.11.10", + "semver": "^7.3.7", + "style-loader": "^3.3.1", + "swc-loader": "^0.2.3", + "terser-webpack-plugin": "^5.3.1", + "ts-dedent": "^2.0.0", + "url": "^0.11.0", + "util": "^0.12.4", + "util-deprecate": "^1.0.2", + "webpack": "5", + "webpack-dev-middleware": "^6.1.1", + "webpack-hot-middleware": "^2.25.1", + "webpack-virtual-modules": "^0.5.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@storybook/builder-webpack5/node_modules/@types/node": { + "version": "16.18.39", + "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.39.tgz", + "integrity": "sha512-8q9ZexmdYYyc5/cfujaXb4YOucpQxAV4RMG0himLyDUOEr8Mr79VrqsFI+cQ2M2h89YIuy95lbxuYjxT4Hk4kQ==", + "dev": true + }, + "node_modules/@storybook/builder-webpack5/node_modules/ajv": { + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", + "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/@storybook/builder-webpack5/node_modules/ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.3" + }, + "peerDependencies": { + "ajv": "^8.8.2" + } + }, + "node_modules/@storybook/builder-webpack5/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true + }, + "node_modules/@storybook/builder-webpack5/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@storybook/builder-webpack5/node_modules/schema-utils": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.2.0.tgz", + "integrity": "sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.9.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.1.0" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/@storybook/builder-webpack5/node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@storybook/builder-webpack5/node_modules/webpack-dev-middleware": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-6.1.1.tgz", + "integrity": "sha512-y51HrHaFeeWir0YO4f0g+9GwZawuigzcAdRNon6jErXy/SqV/+O6eaVAzDqE6t3e3NpGeR5CS+cCDaTC+V3yEQ==", + "dev": true, + "dependencies": { + "colorette": "^2.0.10", + "memfs": "^3.4.12", + "mime-types": "^2.1.31", + "range-parser": "^1.2.1", + "schema-utils": "^4.0.0" + }, + "engines": { + "node": ">= 14.15.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.0.0" + }, + "peerDependenciesMeta": { + "webpack": { + "optional": true + } + } + }, + "node_modules/@storybook/builder-webpack5/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/@storybook/channels": { + "version": "7.2.1", + "resolved": "https://registry.npmjs.org/@storybook/channels/-/channels-7.2.1.tgz", + "integrity": "sha512-3ZogzjwlFG+oarwnI7TTvWvHVOUtJbjrgZkM5QuLMlxNzIR1XuBY8f01yf4K8+VpdNy9DY+7Q/j6tBThfwYvpA==", + "dev": true, + "dependencies": { + "@storybook/client-logger": "7.2.1", + "@storybook/core-events": "7.2.1", + "@storybook/global": "^5.0.0", + "qs": "^6.10.0", + "telejson": "^7.0.3", + "tiny-invariant": "^1.3.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + } + }, + "node_modules/@storybook/cli": { + "version": "7.2.1", + "resolved": "https://registry.npmjs.org/@storybook/cli/-/cli-7.2.1.tgz", + "integrity": "sha512-rPZDUvM0FRHZU4Wcm0ASOr/0xZq/6uySulqpLgoSkeZIC0xLXh/bI6YoDrD9UJV6GIRiqHMWMdxWd1e+TH8XHg==", + "dev": true, + "dependencies": { + "@babel/core": "^7.22.9", + "@babel/preset-env": "^7.22.9", + "@babel/types": "^7.22.5", + "@ndelangen/get-tarball": "^3.0.7", + "@storybook/codemod": "7.2.1", + "@storybook/core-common": "7.2.1", + "@storybook/core-server": "7.2.1", + "@storybook/csf-tools": "7.2.1", + "@storybook/node-logger": "7.2.1", + "@storybook/telemetry": "7.2.1", + "@storybook/types": "7.2.1", + "@types/semver": "^7.3.4", + "@yarnpkg/fslib": "2.10.3", + "@yarnpkg/libzip": "2.3.0", + "chalk": "^4.1.0", + "commander": "^6.2.1", + "cross-spawn": "^7.0.3", + "detect-indent": "^6.1.0", + "envinfo": "^7.7.3", + "execa": "^5.0.0", + "express": "^4.17.3", + "find-up": "^5.0.0", + "fs-extra": "^11.1.0", + "get-npm-tarball-url": "^2.0.3", + "get-port": "^5.1.1", + "giget": "^1.0.0", + "globby": "^11.0.2", + "jscodeshift": "^0.14.0", + "leven": "^3.1.0", + "ora": "^5.4.1", + "prettier": "^2.8.0", + "prompts": "^2.4.0", + "puppeteer-core": "^2.1.1", + "read-pkg-up": "^7.0.1", + "semver": "^7.3.7", + "simple-update-notifier": "^2.0.0", + "strip-json-comments": "^3.0.1", + "tempy": "^1.0.1", + "ts-dedent": "^2.0.0", + "util-deprecate": "^1.0.2" + }, + "bin": { + "getstorybook": "bin/index.js", + "sb": "bin/index.js" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + } + }, + "node_modules/@storybook/cli/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@storybook/cli/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@storybook/cli/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@storybook/cli/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/@storybook/cli/node_modules/commander": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-6.2.1.tgz", + "integrity": "sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/@storybook/cli/node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@storybook/cli/node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@storybook/cli/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@storybook/cli/node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@storybook/cli/node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@storybook/cli/node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@storybook/cli/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@storybook/cli/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/@storybook/client-api": { + "version": "7.2.1", + "resolved": "https://registry.npmjs.org/@storybook/client-api/-/client-api-7.2.1.tgz", + "integrity": "sha512-VeRUxc4ufSaGAQPe/LM4aucpEx2UHHw9c+tzolV3hzGIp6pmIAS8XI6thL2IccYmsNMS2zz9oDESYP9cNlTsyA==", + "dev": true, + "dependencies": { + "@storybook/client-logger": "7.2.1", + "@storybook/preview-api": "7.2.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + } + }, + "node_modules/@storybook/client-logger": { + "version": "7.2.1", + "resolved": "https://registry.npmjs.org/@storybook/client-logger/-/client-logger-7.2.1.tgz", + "integrity": "sha512-Lyht/lJg2S65CXRy9rXAZXP/Mgye7jbi/aqQL8z9VRMGChbL+k/3pSZnXTTrD1OVSpCEr4UWA+9bStzT4VjtYA==", + "dev": true, + "dependencies": { + "@storybook/global": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + } + }, + "node_modules/@storybook/codemod": { + "version": "7.2.1", + "resolved": "https://registry.npmjs.org/@storybook/codemod/-/codemod-7.2.1.tgz", + "integrity": "sha512-R19fdPfslupxfbtyuGcRa2m1nCug2Zm8bS0GhnPtUl7eGBA4glcf4KKwP52pEqgJAsarfiL2cLSnN5wqQGQ/Sw==", + "dev": true, + "dependencies": { + "@babel/core": "^7.22.9", + "@babel/preset-env": "^7.22.9", + "@babel/types": "^7.22.5", + "@storybook/csf": "^0.1.0", + "@storybook/csf-tools": "7.2.1", + "@storybook/node-logger": "7.2.1", + "@storybook/types": "7.2.1", + "@types/cross-spawn": "^6.0.2", + "cross-spawn": "^7.0.3", + "globby": "^11.0.2", + "jscodeshift": "^0.14.0", + "lodash": "^4.17.21", + "prettier": "^2.8.0", + "recast": "^0.23.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + } + }, + "node_modules/@storybook/components": { + "version": "7.2.1", + "resolved": "https://registry.npmjs.org/@storybook/components/-/components-7.2.1.tgz", + "integrity": "sha512-7JuMT2yK9FGPu9hFCo38tC3FDyr/hJ3CQwU6dSR6E5rT9E658dq31Xl3y/fM5OMzl8MX8Off7TWiybHSuwYJTA==", + "dev": true, + "dependencies": { + "@radix-ui/react-select": "^1.2.2", + "@storybook/client-logger": "7.2.1", + "@storybook/csf": "^0.1.0", + "@storybook/global": "^5.0.0", + "@storybook/icons": "^1.1.0", + "@storybook/theming": "7.2.1", + "@storybook/types": "7.2.1", + "memoizerific": "^1.11.3", + "use-resize-observer": "^9.1.0", + "util-deprecate": "^1.0.2" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" + } + }, + "node_modules/@storybook/core-client": { + "version": "7.2.1", + "resolved": "https://registry.npmjs.org/@storybook/core-client/-/core-client-7.2.1.tgz", + "integrity": "sha512-ujJdkaY6LXGCA8pqFBYTNMySmawm3GPcORYevkmM2edSbNKlu904+HvheRirajluzV7ropzGxUBZR9TMwgmDGg==", + "dev": true, + "dependencies": { + "@storybook/client-logger": "7.2.1", + "@storybook/preview-api": "7.2.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + } + }, + "node_modules/@storybook/core-common": { + "version": "7.2.1", + "resolved": "https://registry.npmjs.org/@storybook/core-common/-/core-common-7.2.1.tgz", + "integrity": "sha512-g1MQ04lgL16Ct89tPj6RSw72yd+a+ZJ4ceH3Ev+SmnU8efBLPmr6+G5Bx7+rY1W2c6NdpFgtSidjgOGqQ8gppw==", + "dev": true, + "dependencies": { + "@storybook/node-logger": "7.2.1", + "@storybook/types": "7.2.1", + "@types/find-cache-dir": "^3.2.1", + "@types/node": "^16.0.0", + "@types/node-fetch": "^2.6.4", + "@types/pretty-hrtime": "^1.0.0", + "chalk": "^4.1.0", + "esbuild": "^0.18.0", + "esbuild-register": "^3.4.0", + "file-system-cache": "2.3.0", + "find-cache-dir": "^3.0.0", + "find-up": "^5.0.0", + "fs-extra": "^11.1.0", + "glob": "^10.0.0", + "handlebars": "^4.7.7", + "lazy-universal-dotenv": "^4.0.0", + "node-fetch": "^2.0.0", + "picomatch": "^2.3.0", + "pkg-dir": "^5.0.0", + "pretty-hrtime": "^1.0.3", + "resolve-from": "^5.0.0", + "ts-dedent": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + } + }, + "node_modules/@storybook/core-common/node_modules/@types/node": { + "version": "16.18.39", + "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.39.tgz", + "integrity": "sha512-8q9ZexmdYYyc5/cfujaXb4YOucpQxAV4RMG0himLyDUOEr8Mr79VrqsFI+cQ2M2h89YIuy95lbxuYjxT4Hk4kQ==", + "dev": true + }, + "node_modules/@storybook/core-common/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@storybook/core-common/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/@storybook/core-common/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@storybook/core-common/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@storybook/core-common/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/@storybook/core-common/node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@storybook/core-common/node_modules/foreground-child": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz", + "integrity": "sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.0", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@storybook/core-common/node_modules/glob": { + "version": "10.3.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.3.tgz", + "integrity": "sha512-92vPiMb/iqpmEgsOoIDvTjc50wf9CCCvMzsi6W0JLPeUKE8TWP1a73PgqSrqy7iAZxaSD1YdzU7QZR5LF51MJw==", + "dev": true, + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^2.0.3", + "minimatch": "^9.0.1", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0", + "path-scurry": "^1.10.1" + }, + "bin": { + "glob": "dist/cjs/src/bin.js" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@storybook/core-common/node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@storybook/core-common/node_modules/minimatch": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", + "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@storybook/core-common/node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@storybook/core-common/node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@storybook/core-common/node_modules/pkg-dir": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-5.0.0.tgz", + "integrity": "sha512-NPE8TDbzl/3YQYY7CSS228s3g2ollTFnc+Qi3tqmqJp9Vg2ovUpixcJEo2HJScN2Ez+kEaal6y70c0ehqJBJeA==", + "dev": true, + "dependencies": { + "find-up": "^5.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@storybook/core-common/node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@storybook/core-common/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@storybook/core-events": { + "version": "7.2.1", + "resolved": "https://registry.npmjs.org/@storybook/core-events/-/core-events-7.2.1.tgz", + "integrity": "sha512-EUXYb3gyQ2EzpDAWkgfoDl1EPabj3OE6+zntsD/gwvzQU85BTocs10ksnRyS55bfrQpYbf+Z+gw2CZboyagLgg==", + "dev": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + } + }, + "node_modules/@storybook/core-server": { + "version": "7.2.1", + "resolved": "https://registry.npmjs.org/@storybook/core-server/-/core-server-7.2.1.tgz", + "integrity": "sha512-jhS918Frl5j6LSB3x7qzHHuRL5e3RXqCkBQe5KtR2zXMgYlalSyGcX5uT8byWFznUsQIjGmUrf6ZIoKdRdslWg==", + "dev": true, + "dependencies": { + "@aw-web-design/x-default-browser": "1.4.126", + "@discoveryjs/json-ext": "^0.5.3", + "@storybook/builder-manager": "7.2.1", + "@storybook/channels": "7.2.1", + "@storybook/core-common": "7.2.1", + "@storybook/core-events": "7.2.1", + "@storybook/csf": "^0.1.0", + "@storybook/csf-tools": "7.2.1", + "@storybook/docs-mdx": "^0.1.0", + "@storybook/global": "^5.0.0", + "@storybook/manager": "7.2.1", + "@storybook/node-logger": "7.2.1", + "@storybook/preview-api": "7.2.1", + "@storybook/telemetry": "7.2.1", + "@storybook/types": "7.2.1", + "@types/detect-port": "^1.3.0", + "@types/node": "^16.0.0", + "@types/pretty-hrtime": "^1.0.0", + "@types/semver": "^7.3.4", + "better-opn": "^3.0.2", + "chalk": "^4.1.0", + "cli-table3": "^0.6.1", + "compression": "^1.7.4", + "detect-port": "^1.3.0", + "express": "^4.17.3", + "fs-extra": "^11.1.0", + "globby": "^11.0.2", + "ip": "^2.0.0", + "lodash": "^4.17.21", + "open": "^8.4.0", + "pretty-hrtime": "^1.0.3", + "prompts": "^2.4.0", + "read-pkg-up": "^7.0.1", + "semver": "^7.3.7", + "serve-favicon": "^2.5.0", + "telejson": "^7.0.3", + "tiny-invariant": "^1.3.1", + "ts-dedent": "^2.0.0", + "util": "^0.12.4", + "util-deprecate": "^1.0.2", + "watchpack": "^2.2.0", + "ws": "^8.2.3" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + } + }, + "node_modules/@storybook/core-server/node_modules/@types/node": { + "version": "16.18.39", + "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.39.tgz", + "integrity": "sha512-8q9ZexmdYYyc5/cfujaXb4YOucpQxAV4RMG0himLyDUOEr8Mr79VrqsFI+cQ2M2h89YIuy95lbxuYjxT4Hk4kQ==", + "dev": true + }, + "node_modules/@storybook/core-server/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@storybook/core-server/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@storybook/core-server/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@storybook/core-server/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/@storybook/core-server/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@storybook/core-server/node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@storybook/core-server/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@storybook/core-server/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/@storybook/core-webpack": { + "version": "7.2.1", + "resolved": "https://registry.npmjs.org/@storybook/core-webpack/-/core-webpack-7.2.1.tgz", + "integrity": "sha512-8Oc6HJFphDVid8DRKSlFc3wK64zuCAbbRFRI9Flf6he4wPncaDL1tXfCJjCbeujJQHLrgG7BjXYNHwIUiB2wRA==", + "dev": true, + "dependencies": { + "@storybook/core-common": "7.2.1", + "@storybook/node-logger": "7.2.1", + "@storybook/types": "7.2.1", + "@types/node": "^16.0.0", + "ts-dedent": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + } + }, + "node_modules/@storybook/core-webpack/node_modules/@types/node": { + "version": "16.18.39", + "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.39.tgz", + "integrity": "sha512-8q9ZexmdYYyc5/cfujaXb4YOucpQxAV4RMG0himLyDUOEr8Mr79VrqsFI+cQ2M2h89YIuy95lbxuYjxT4Hk4kQ==", + "dev": true + }, + "node_modules/@storybook/csf": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@storybook/csf/-/csf-0.1.1.tgz", + "integrity": "sha512-4hE3AlNVxR60Wc5KSC68ASYzUobjPqtSKyhV6G+ge0FIXU55N5nTY7dXGRZHQGDBPq+XqchMkIdlkHPRs8nTHg==", + "dev": true, + "dependencies": { + "type-fest": "^2.19.0" + } + }, + "node_modules/@storybook/csf-plugin": { + "version": "7.2.1", + "resolved": "https://registry.npmjs.org/@storybook/csf-plugin/-/csf-plugin-7.2.1.tgz", + "integrity": "sha512-qhxkKOsUjCS/hqsDgwgoM81ZXAXfTNrJJPHCs4Wa1dHoUVUn7rro7VANIO0GVNrRDnha3YR4fEmnD8kklLKmCQ==", + "dev": true, + "dependencies": { + "@storybook/csf-tools": "7.2.1", + "unplugin": "^1.3.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + } + }, + "node_modules/@storybook/csf-tools": { + "version": "7.2.1", + "resolved": "https://registry.npmjs.org/@storybook/csf-tools/-/csf-tools-7.2.1.tgz", + "integrity": "sha512-QqZOBd6lmhPoIBLutyYYJ3wBwEZF+fUjiL8vhw3lgq+Mrer14lmKrImKDSjd1PsqVbbGQEJZ4TAJHZc3vdQs0w==", + "dev": true, + "dependencies": { + "@babel/generator": "^7.22.9", + "@babel/parser": "^7.22.7", + "@babel/traverse": "^7.22.8", + "@babel/types": "^7.22.5", + "@storybook/csf": "^0.1.0", + "@storybook/types": "7.2.1", + "fs-extra": "^11.1.0", + "prettier": "^2.8.0", + "recast": "^0.23.1", + "ts-dedent": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + } + }, + "node_modules/@storybook/csf/node_modules/type-fest": { + "version": "2.19.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz", + "integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==", + "dev": true, + "engines": { + "node": ">=12.20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@storybook/docs-mdx": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/@storybook/docs-mdx/-/docs-mdx-0.1.0.tgz", + "integrity": "sha512-JDaBR9lwVY4eSH5W8EGHrhODjygPd6QImRbwjAuJNEnY0Vw4ie3bPkeGfnacB3OBW6u/agqPv2aRlR46JcAQLg==", + "dev": true + }, + "node_modules/@storybook/docs-tools": { + "version": "7.2.1", + "resolved": "https://registry.npmjs.org/@storybook/docs-tools/-/docs-tools-7.2.1.tgz", + "integrity": "sha512-snRdkqdaxAwlalIEtuElySzC68Lo/0KfrGRR6xSDxWIhjAPNqsRLPHEXlZrJ43Tn/V2oxCRU8eb21pP5/58krw==", + "dev": true, + "dependencies": { + "@storybook/core-common": "7.2.1", + "@storybook/preview-api": "7.2.1", + "@storybook/types": "7.2.1", + "@types/doctrine": "^0.0.3", + "doctrine": "^3.0.0", + "lodash": "^4.17.21" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + } + }, + "node_modules/@storybook/global": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@storybook/global/-/global-5.0.0.tgz", + "integrity": "sha512-FcOqPAXACP0I3oJ/ws6/rrPT9WGhu915Cg8D02a9YxLo0DE9zI+a9A5gRGvmQ09fiWPukqI8ZAEoQEdWUKMQdQ==", + "dev": true + }, + "node_modules/@storybook/icons": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/@storybook/icons/-/icons-1.1.5.tgz", + "integrity": "sha512-PWJIaa/NtOu2VSWnj07evF1OI5+6H7ZTAvy0LO38RheW4W8iS+xoYsh2cr/nxLBblfhbw533uJrhdqpxCytxfA==", + "dev": true, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" + } + }, + "node_modules/@storybook/instrumenter": { + "version": "7.2.1", + "resolved": "https://registry.npmjs.org/@storybook/instrumenter/-/instrumenter-7.2.1.tgz", + "integrity": "sha512-eA1xke6JWhqDNhrn/qK3KxeE9yXySyzK1gUhu1jtIt8npenebZsuG5Uu/IzJkSB8se1F419Pmbcpeq0V8GA1lQ==", + "dev": true, + "dependencies": { + "@storybook/channels": "7.2.1", + "@storybook/client-logger": "7.2.1", + "@storybook/core-events": "7.2.1", + "@storybook/global": "^5.0.0", + "@storybook/preview-api": "7.2.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + } + }, + "node_modules/@storybook/manager": { + "version": "7.2.1", + "resolved": "https://registry.npmjs.org/@storybook/manager/-/manager-7.2.1.tgz", + "integrity": "sha512-wD2tRH8gLk2VNFMVcWmGZTXGTMNXdM3rnXiyKtmSVwFzacmOtLzEsCOprwI6WJpZv3v1vHY0s6idN9iadTVMhw==", + "dev": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + } + }, + "node_modules/@storybook/manager-api": { + "version": "7.2.1", + "resolved": "https://registry.npmjs.org/@storybook/manager-api/-/manager-api-7.2.1.tgz", + "integrity": "sha512-jRuYTrsNKq+g1u9kbQRvBsRKVITOdiNu9c633MeCH73oBVo8WNnZF/tW/ER86oTnru0H7EmRdgz3v9ft/wS2GQ==", + "dev": true, + "dependencies": { + "@storybook/channels": "7.2.1", + "@storybook/client-logger": "7.2.1", + "@storybook/core-events": "7.2.1", + "@storybook/csf": "^0.1.0", + "@storybook/global": "^5.0.0", + "@storybook/router": "7.2.1", + "@storybook/theming": "7.2.1", + "@storybook/types": "7.2.1", + "dequal": "^2.0.2", + "lodash": "^4.17.21", + "memoizerific": "^1.11.3", + "semver": "^7.3.7", + "store2": "^2.14.2", + "telejson": "^7.0.3", + "ts-dedent": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" + } + }, + "node_modules/@storybook/manager-api/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@storybook/manager-api/node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@storybook/manager-api/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/@storybook/mdx2-csf": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@storybook/mdx2-csf/-/mdx2-csf-1.1.0.tgz", + "integrity": "sha512-TXJJd5RAKakWx4BtpwvSNdgTDkKM6RkXU8GK34S/LhidQ5Pjz3wcnqb0TxEkfhK/ztbP8nKHqXFwLfa2CYkvQw==", + "dev": true + }, + "node_modules/@storybook/node-logger": { + "version": "7.2.1", + "resolved": "https://registry.npmjs.org/@storybook/node-logger/-/node-logger-7.2.1.tgz", + "integrity": "sha512-Ywjqi8iAc26RYbZfmpzvzdKbaQZaD1T/IRNfVGReM/jTXnX0VSdsa6P/pfurbyHcQw//D3TSdqRHOMtbp0nIJg==", + "dev": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + } + }, + "node_modules/@storybook/postinstall": { + "version": "7.2.1", + "resolved": "https://registry.npmjs.org/@storybook/postinstall/-/postinstall-7.2.1.tgz", + "integrity": "sha512-xOzX1MygQ+9xpku6FuODhXvfv/CcKlQPOGpZk8ejE/04Eow0JHluGI1cxdnpqGcCBygkw7DP+xrtQCv75c7Gjg==", + "dev": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + } + }, + "node_modules/@storybook/preset-react-webpack": { + "version": "7.2.1", + "resolved": "https://registry.npmjs.org/@storybook/preset-react-webpack/-/preset-react-webpack-7.2.1.tgz", + "integrity": "sha512-PhWql1hxpUxy+SJ9jLrt+Db2yc0Qgo8ivRWU0eqZJIrXnZXtUQiGByMqYWdr0MzNbBEJIqrxO4RCpowKmDh/Xw==", + "dev": true, + "dependencies": { + "@babel/preset-flow": "^7.22.5", + "@babel/preset-react": "^7.22.5", + "@pmmmwh/react-refresh-webpack-plugin": "^0.5.5", + "@storybook/core-webpack": "7.2.1", + "@storybook/docs-tools": "7.2.1", + "@storybook/node-logger": "7.2.1", + "@storybook/react": "7.2.1", + "@storybook/react-docgen-typescript-plugin": "1.0.6--canary.9.0c3f3b7.0", + "@types/node": "^16.0.0", + "@types/semver": "^7.3.4", + "babel-plugin-add-react-displayname": "^0.0.5", + "babel-plugin-react-docgen": "^4.2.1", + "fs-extra": "^11.1.0", + "react-refresh": "^0.11.0", + "semver": "^7.3.7", + "webpack": "5" + }, + "engines": { + "node": ">=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + }, + "peerDependencies": { + "@babel/core": "^7.22.0", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@babel/core": { + "optional": true + }, + "typescript": { + "optional": true + } + } + }, + "node_modules/@storybook/preset-react-webpack/node_modules/@types/node": { + "version": "16.18.39", + "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.39.tgz", + "integrity": "sha512-8q9ZexmdYYyc5/cfujaXb4YOucpQxAV4RMG0himLyDUOEr8Mr79VrqsFI+cQ2M2h89YIuy95lbxuYjxT4Hk4kQ==", + "dev": true + }, + "node_modules/@storybook/preset-react-webpack/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@storybook/preset-react-webpack/node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@storybook/preset-react-webpack/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/@storybook/preview": { + "version": "7.2.1", + "resolved": "https://registry.npmjs.org/@storybook/preview/-/preview-7.2.1.tgz", + "integrity": "sha512-5mLNhuaePx3Zv8mO93Y/M+U7ppqV5bS13rPfMHcVmSb7mQ/3hN7zkF6NhPOX6LoBUxetHiAJh5dA5McNE3adLQ==", + "dev": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + } + }, + "node_modules/@storybook/preview-api": { + "version": "7.2.1", + "resolved": "https://registry.npmjs.org/@storybook/preview-api/-/preview-api-7.2.1.tgz", + "integrity": "sha512-WKecuOdeh9+og6bPR9KoQf/JCeSRPCcfZv9uNfJzAp3IiTnS3UpfCz+HBZzZJQrisgbd7OulNY400HQUmxY2Ag==", + "dev": true, + "dependencies": { + "@storybook/channels": "7.2.1", + "@storybook/client-logger": "7.2.1", + "@storybook/core-events": "7.2.1", + "@storybook/csf": "^0.1.0", + "@storybook/global": "^5.0.0", + "@storybook/types": "7.2.1", + "@types/qs": "^6.9.5", + "dequal": "^2.0.2", + "lodash": "^4.17.21", + "memoizerific": "^1.11.3", + "qs": "^6.10.0", + "synchronous-promise": "^2.0.15", + "ts-dedent": "^2.0.0", + "util-deprecate": "^1.0.2" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + } + }, + "node_modules/@storybook/react": { + "version": "7.2.1", + "resolved": "https://registry.npmjs.org/@storybook/react/-/react-7.2.1.tgz", + "integrity": "sha512-WRAVrSQKAtCoypUrrIXWGOvyGRVkrh73hSkKVC0gEqxWDmjZIZJ1uc3VrUd/yHJdLsqNphcAyU8Ahu52yozubg==", + "dev": true, + "dependencies": { + "@storybook/client-logger": "7.2.1", + "@storybook/core-client": "7.2.1", + "@storybook/docs-tools": "7.2.1", + "@storybook/global": "^5.0.0", + "@storybook/preview-api": "7.2.1", + "@storybook/react-dom-shim": "7.2.1", + "@storybook/types": "7.2.1", + "@types/escodegen": "^0.0.6", + "@types/estree": "^0.0.51", + "@types/node": "^16.0.0", + "acorn": "^7.4.1", + "acorn-jsx": "^5.3.1", + "acorn-walk": "^7.2.0", + "escodegen": "^2.0.0", + "html-tags": "^3.1.0", + "lodash": "^4.17.21", + "prop-types": "^15.7.2", + "react-element-to-jsx-string": "^15.0.0", + "ts-dedent": "^2.0.0", + "type-fest": "~2.19", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0", + "typescript": "*" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@storybook/react-docgen-typescript-plugin": { + "version": "1.0.6--canary.9.0c3f3b7.0", + "resolved": "https://registry.npmjs.org/@storybook/react-docgen-typescript-plugin/-/react-docgen-typescript-plugin-1.0.6--canary.9.0c3f3b7.0.tgz", + "integrity": "sha512-KUqXC3oa9JuQ0kZJLBhVdS4lOneKTOopnNBK4tUAgoxWQ3u/IjzdueZjFr7gyBrXMoU6duutk3RQR9u8ZpYJ4Q==", + "dev": true, + "dependencies": { + "debug": "^4.1.1", + "endent": "^2.0.1", + "find-cache-dir": "^3.3.1", + "flat-cache": "^3.0.4", + "micromatch": "^4.0.2", + "react-docgen-typescript": "^2.2.2", + "tslib": "^2.0.0" + }, + "peerDependencies": { + "typescript": ">= 4.x", + "webpack": ">= 4" + } + }, + "node_modules/@storybook/react-docgen-typescript-plugin/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/@storybook/react-docgen-typescript-plugin/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/@storybook/react-dom-shim": { + "version": "7.2.1", + "resolved": "https://registry.npmjs.org/@storybook/react-dom-shim/-/react-dom-shim-7.2.1.tgz", + "integrity": "sha512-QzQQN2nZkG7c0Mg5HvhfQuH10HjAJEnA8vDlENIFMj3XqtUAq4HE2n73gEcvdFJMXL4G16N58+TgR1e2cFdRKw==", + "dev": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" + } + }, + "node_modules/@storybook/react-webpack5": { + "version": "7.2.1", + "resolved": "https://registry.npmjs.org/@storybook/react-webpack5/-/react-webpack5-7.2.1.tgz", + "integrity": "sha512-hkJ+PzVDXTuA4v/wZF6YQTEuUswiZfYPdKl/c5rJp8XvK6WhcMkSTlwzZ2+vnk4s0vbVdlBZLG78LFUmGZy4jQ==", + "dev": true, + "dependencies": { + "@storybook/builder-webpack5": "7.2.1", + "@storybook/preset-react-webpack": "7.2.1", + "@storybook/react": "7.2.1", + "@types/node": "^16.0.0" + }, + "engines": { + "node": ">=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + }, + "peerDependencies": { + "@babel/core": "^7.22.0", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0", + "typescript": "*" + }, + "peerDependenciesMeta": { + "@babel/core": { + "optional": true + }, + "typescript": { + "optional": true + } + } + }, + "node_modules/@storybook/react-webpack5/node_modules/@types/node": { + "version": "16.18.39", + "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.39.tgz", + "integrity": "sha512-8q9ZexmdYYyc5/cfujaXb4YOucpQxAV4RMG0himLyDUOEr8Mr79VrqsFI+cQ2M2h89YIuy95lbxuYjxT4Hk4kQ==", + "dev": true + }, + "node_modules/@storybook/react/node_modules/@types/estree": { + "version": "0.0.51", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.51.tgz", + "integrity": "sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ==", + "dev": true + }, + "node_modules/@storybook/react/node_modules/@types/node": { + "version": "16.18.39", + "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.39.tgz", + "integrity": "sha512-8q9ZexmdYYyc5/cfujaXb4YOucpQxAV4RMG0himLyDUOEr8Mr79VrqsFI+cQ2M2h89YIuy95lbxuYjxT4Hk4kQ==", + "dev": true + }, + "node_modules/@storybook/react/node_modules/acorn": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/@storybook/react/node_modules/acorn-walk": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", + "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/@storybook/react/node_modules/type-fest": { + "version": "2.19.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz", + "integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==", + "dev": true, + "engines": { + "node": ">=12.20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@storybook/router": { + "version": "7.2.1", + "resolved": "https://registry.npmjs.org/@storybook/router/-/router-7.2.1.tgz", + "integrity": "sha512-9Cn5boUS+7yhrKlSy1kt7ruNs/znk3555kclBD6+uuhH/dD84feGeiGYE4GUuLmcKrDFtNF185/Gr1huJ556tA==", + "dev": true, + "dependencies": { + "@storybook/client-logger": "7.2.1", + "memoizerific": "^1.11.3", + "qs": "^6.10.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" + } + }, + "node_modules/@storybook/store": { + "version": "7.2.1", + "resolved": "https://registry.npmjs.org/@storybook/store/-/store-7.2.1.tgz", + "integrity": "sha512-0EBD3GMCZpVk2y/Yzk7koH91Ny+kyq+krWaGFgZQ8JrGouuw1JAszxzgO1VVgnRio88UKeK3UALx9hGSHqDXeg==", + "dev": true, + "dependencies": { + "@storybook/client-logger": "7.2.1", + "@storybook/preview-api": "7.2.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + } + }, + "node_modules/@storybook/telemetry": { + "version": "7.2.1", + "resolved": "https://registry.npmjs.org/@storybook/telemetry/-/telemetry-7.2.1.tgz", + "integrity": "sha512-ewYvX+ZzuTCl9a8DUbKkSPD6GhxUStl/+Eni1faE1OEnyduwbJFlse0EBpOa4YZTcghlngrHV3pulEW8qOgNFA==", + "dev": true, + "dependencies": { + "@storybook/client-logger": "7.2.1", + "@storybook/core-common": "7.2.1", + "@storybook/csf-tools": "7.2.1", + "chalk": "^4.1.0", + "detect-package-manager": "^2.0.1", + "fetch-retry": "^5.0.2", + "fs-extra": "^11.1.0", + "read-pkg-up": "^7.0.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + } + }, + "node_modules/@storybook/telemetry/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@storybook/telemetry/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@storybook/telemetry/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@storybook/telemetry/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/@storybook/telemetry/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@storybook/testing-library": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/@storybook/testing-library/-/testing-library-0.2.0.tgz", + "integrity": "sha512-Ff6jNnrsosmDshgCf0Eb5Cz7IA34p/1Ps5N3Kp3598kfXpBSccSkQQvVFUXC3kIHw/isIXWPqntZuKqnWUz7Gw==", + "dev": true, + "dependencies": { + "@testing-library/dom": "^9.0.0", + "@testing-library/user-event": "^14.0.0", + "ts-dedent": "^2.2.0" + } + }, + "node_modules/@storybook/theming": { + "version": "7.2.1", + "resolved": "https://registry.npmjs.org/@storybook/theming/-/theming-7.2.1.tgz", + "integrity": "sha512-cfnNCLvKmzxjmoYKfLl7Q64gSTouLvd23CtvBAOlWcRYnMJ9v4/7A2tK3xQyVRlJYh9OuXiHFLL8AXbN58Hkzw==", + "dev": true, + "dependencies": { + "@emotion/use-insertion-effect-with-fallbacks": "^1.0.0", + "@storybook/client-logger": "7.2.1", + "@storybook/global": "^5.0.0", + "memoizerific": "^1.11.3" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" + } + }, + "node_modules/@storybook/types": { + "version": "7.2.1", + "resolved": "https://registry.npmjs.org/@storybook/types/-/types-7.2.1.tgz", + "integrity": "sha512-YwlIY1uyxfJjijbB5x1d1QOKaUUDJnMX8BSb8oGqU4cyT76X/Is4CbGs+vccFsJo0tZu1GfuahYXl0EDT0nnSQ==", + "dev": true, + "dependencies": { + "@storybook/channels": "7.2.1", + "@types/babel__core": "^7.0.0", + "@types/express": "^4.7.0", + "file-system-cache": "2.3.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + } + }, + "node_modules/@swc/core": { + "version": "1.3.74", + "resolved": "https://registry.npmjs.org/@swc/core/-/core-1.3.74.tgz", + "integrity": "sha512-P+MIExOTdWlfq8Heb1/NhBAke6UTckd4cRDuJoFcFMGBRvgoCMNWhnfP3FRRXPLI7GGg27dRZS+xHiqYyQmSrA==", + "dev": true, + "hasInstallScript": true, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/swc" + }, + "optionalDependencies": { + "@swc/core-darwin-arm64": "1.3.74", + "@swc/core-darwin-x64": "1.3.74", + "@swc/core-linux-arm-gnueabihf": "1.3.74", + "@swc/core-linux-arm64-gnu": "1.3.74", + "@swc/core-linux-arm64-musl": "1.3.74", + "@swc/core-linux-x64-gnu": "1.3.74", + "@swc/core-linux-x64-musl": "1.3.74", + "@swc/core-win32-arm64-msvc": "1.3.74", + "@swc/core-win32-ia32-msvc": "1.3.74", + "@swc/core-win32-x64-msvc": "1.3.74" + }, + "peerDependencies": { + "@swc/helpers": "^0.5.0" + }, + "peerDependenciesMeta": { + "@swc/helpers": { + "optional": true + } + } + }, + "node_modules/@swc/core-darwin-arm64": { + "version": "1.3.74", + "resolved": "https://registry.npmjs.org/@swc/core-darwin-arm64/-/core-darwin-arm64-1.3.74.tgz", + "integrity": "sha512-2rMV4QxM583jXcREfo0MhV3Oj5pgRSfSh/kVrB1twL2rQxOrbzkAPT/8flmygdVoL4f2F7o1EY5lKlYxEBiIKQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-darwin-x64": { + "version": "1.3.74", + "resolved": "https://registry.npmjs.org/@swc/core-darwin-x64/-/core-darwin-x64-1.3.74.tgz", + "integrity": "sha512-KKEGE1wXneYXe15fWDRM8/oekd/Q4yAuccA0vWY/7i6nOSPqWYcSDR0nRtR030ltDxWt0rk/eCTmNkrOWrKs3A==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-linux-arm-gnueabihf": { + "version": "1.3.74", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.3.74.tgz", + "integrity": "sha512-HehH5DR6r/5fIVu7tu8ZqgrHkhSCQNewf1ztFQJgcmaQWn+H4AJERBjwkjosqh4TvUJucZv8vyRTvrFeBXaCSA==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-linux-arm64-gnu": { + "version": "1.3.74", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.3.74.tgz", + "integrity": "sha512-+xkbCRz/wczgdknoV4NwYxbRI2dD7x/qkIFcVM2buzLCq8oWLweuV8+aL4pRqu0qDh7ZSb1jcaVTUIsySCJznA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-linux-arm64-musl": { + "version": "1.3.74", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.3.74.tgz", + "integrity": "sha512-maKFZSCD3tQznzPV7T3V+TtiWZFEFM8YrnSS5fQNNb+K9J65sL+170uTb3M7H4cFkG+9Sm5k5yCrCIutlvV48g==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-linux-x64-gnu": { + "version": "1.3.74", + "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.3.74.tgz", + "integrity": "sha512-LEXpcShF6DLTWJSiBhMSYZkLQ27UvaQ24fCFhoIV/R3dhYaUpHmIyLPPBNC82T03lB3ONUFVwrRw6fxDJ/f00A==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-linux-x64-musl": { + "version": "1.3.74", + "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.3.74.tgz", + "integrity": "sha512-sxsFctbFMZEFmDE7CmYljG0dMumH8XBTwwtGr8s6z0fYAzXBGNq2AFPcmEh2np9rPWkt7pE1m0ByESD+dMkbxQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-win32-arm64-msvc": { + "version": "1.3.74", + "resolved": "https://registry.npmjs.org/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.3.74.tgz", + "integrity": "sha512-F7hY9/BjFCozA4YPFYFH5FGCyWwa44vIXHqG66F5cDwXDGFn8ZtBsYIsiPfUYcx0AeAo1ojnVWKPxokZhYNYqA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-win32-ia32-msvc": { + "version": "1.3.74", + "resolved": "https://registry.npmjs.org/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.3.74.tgz", + "integrity": "sha512-qBAsiD1AlIdqED6wy3UNRHyAys9pWMUidX0LJ6mj24r/vfrzzTBAUrLJe5m7bzE+F1Rgi001avYJeEW1DLEJ+Q==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-win32-x64-msvc": { + "version": "1.3.74", + "resolved": "https://registry.npmjs.org/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.3.74.tgz", + "integrity": "sha512-S3YAvvLprTnPRwQuy9Dkwubb5SRLpVK3JJsqYDbGfgj8PGQyKHZcVJ5X3nfFsoWLy3j9B/3Os2nawprRSzeC5A==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@testing-library/dom": { + "version": "9.3.1", + "resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-9.3.1.tgz", + "integrity": "sha512-0DGPd9AR3+iDTjGoMpxIkAsUihHZ3Ai6CneU6bRRrffXMgzCdlNk43jTrD2/5LT6CBb3MWTP8v510JzYtahD2w==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.10.4", + "@babel/runtime": "^7.12.5", + "@types/aria-query": "^5.0.1", + "aria-query": "5.1.3", + "chalk": "^4.1.0", + "dom-accessibility-api": "^0.5.9", + "lz-string": "^1.5.0", + "pretty-format": "^27.0.2" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/@testing-library/dom/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@testing-library/dom/node_modules/aria-query": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.1.3.tgz", + "integrity": "sha512-R5iJ5lkuHybztUfuOAznmboyjWq8O6sqNqtK7CLOqdydi54VNbORp49mb14KbWgG1QD3JFO9hJdZ+y4KutfdOQ==", + "dev": true, + "dependencies": { + "deep-equal": "^2.0.5" + } + }, + "node_modules/@testing-library/dom/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@testing-library/dom/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@testing-library/dom/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/@testing-library/dom/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@testing-library/jest-dom": { + "version": "5.17.0", + "resolved": "https://registry.npmjs.org/@testing-library/jest-dom/-/jest-dom-5.17.0.tgz", + "integrity": "sha512-ynmNeT7asXyH3aSVv4vvX4Rb+0qjOhdNHnO/3vuZNqPmhDpV/+rCSGwQ7bLcmU2cJ4dvoheIO85LQj0IbJHEtg==", + "dev": true, + "dependencies": { + "@adobe/css-tools": "^4.0.1", + "@babel/runtime": "^7.9.2", + "@types/testing-library__jest-dom": "^5.9.1", + "aria-query": "^5.0.0", + "chalk": "^3.0.0", + "css.escape": "^1.5.1", + "dom-accessibility-api": "^0.5.6", + "lodash": "^4.17.15", + "redent": "^3.0.0" + }, + "engines": { + "node": ">=8", + "npm": ">=6", + "yarn": ">=1" + } + }, + "node_modules/@testing-library/jest-dom/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@testing-library/jest-dom/node_modules/chalk": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@testing-library/jest-dom/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@testing-library/jest-dom/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/@testing-library/jest-dom/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@testing-library/react": { + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/@testing-library/react/-/react-14.0.0.tgz", + "integrity": "sha512-S04gSNJbYE30TlIMLTzv6QCTzt9AqIF5y6s6SzVFILNcNvbV/jU96GeiTPillGQo+Ny64M/5PV7klNYYgv5Dfg==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.12.5", + "@testing-library/dom": "^9.0.0", + "@types/react-dom": "^18.0.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "react": "^18.0.0", + "react-dom": "^18.0.0" + } + }, + "node_modules/@testing-library/user-event": { + "version": "14.4.3", + "resolved": "https://registry.npmjs.org/@testing-library/user-event/-/user-event-14.4.3.tgz", + "integrity": "sha512-kCUc5MEwaEMakkO5x7aoD+DLi02ehmEM2QCGWvNqAS1dV/fAvORWEjnjsEIvml59M7Y5kCkWN6fCCyPOe8OL6Q==", + "dev": true, + "engines": { + "node": ">=12", + "npm": ">=6" + }, + "peerDependencies": { + "@testing-library/dom": ">=7.21.4" + } + }, + "node_modules/@tootallnate/once": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", + "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==", + "dev": true, + "engines": { + "node": ">= 10" + } + }, + "node_modules/@types/aria-query": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@types/aria-query/-/aria-query-5.0.1.tgz", + "integrity": "sha512-XTIieEY+gvJ39ChLcB4If5zHtPxt3Syj5rgZR+e1ctpmK8NjPf0zFqsz4JpLJT0xla9GFDKjy8Cpu331nrmE1Q==", + "dev": true + }, + "node_modules/@types/babel__core": { + "version": "7.20.1", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.1.tgz", + "integrity": "sha512-aACu/U/omhdk15O4Nfb+fHgH/z3QsfQzpnvRZhYhThms83ZnAOZz7zZAWO7mn2yyNQaA4xTO8GLK3uqFU4bYYw==", + "dev": true, + "dependencies": { + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7", + "@types/babel__generator": "*", + "@types/babel__template": "*", + "@types/babel__traverse": "*" + } + }, + "node_modules/@types/babel__generator": { + "version": "7.6.4", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.4.tgz", + "integrity": "sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg==", + "dev": true, + "dependencies": { + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__template": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.1.tgz", + "integrity": "sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==", + "dev": true, + "dependencies": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__traverse": { + "version": "7.20.1", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.1.tgz", + "integrity": "sha512-MitHFXnhtgwsGZWtT68URpOvLN4EREih1u3QtQiN4VdAxWKRVvGCSvw/Qth0M0Qq3pJpnGOu5JaM/ydK7OGbqg==", + "dev": true, + "dependencies": { + "@babel/types": "^7.20.7" + } + }, + "node_modules/@types/body-parser": { + "version": "1.19.2", + "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.2.tgz", + "integrity": "sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==", + "dev": true, + "dependencies": { + "@types/connect": "*", + "@types/node": "*" + } + }, + "node_modules/@types/bonjour": { + "version": "3.5.10", + "resolved": "https://registry.npmjs.org/@types/bonjour/-/bonjour-3.5.10.tgz", + "integrity": "sha512-p7ienRMiS41Nu2/igbJxxLDWrSZ0WxM8UQgCeO9KhoVF7cOVFkrKsiDr1EsJIla8vV3oEEjGcz11jc5yimhzZw==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/connect": { + "version": "3.4.35", + "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.35.tgz", + "integrity": "sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/connect-history-api-fallback": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.5.0.tgz", + "integrity": "sha512-4x5FkPpLipqwthjPsF7ZRbOv3uoLUFkTA9G9v583qi4pACvq0uTELrB8OLUzPWUI4IJIyvM85vzkV1nyiI2Lig==", + "dev": true, + "dependencies": { + "@types/express-serve-static-core": "*", + "@types/node": "*" + } + }, + "node_modules/@types/cookie": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.4.1.tgz", + "integrity": "sha512-XW/Aa8APYr6jSVVA1y/DEIZX0/GMKLEVekNG727R8cs56ahETkRAy/3DR7+fJyh7oUgGwNQaRfXCun0+KbWY7Q==", + "dev": true + }, + "node_modules/@types/cross-spawn": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/@types/cross-spawn/-/cross-spawn-6.0.2.tgz", + "integrity": "sha512-KuwNhp3eza+Rhu8IFI5HUXRP0LIhqH5cAjubUvGXXthh4YYBuP2ntwEX+Cz8GJoZUHlKo247wPWOfA9LYEq4cw==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/debug": { + "version": "4.1.8", + "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.8.tgz", + "integrity": "sha512-/vPO1EPOs306Cvhwv7KfVfYvOJqA/S/AXjaHQiJboCZzcNDb+TIJFN9/2C9DZ//ijSKWioNyUxD792QmDJ+HKQ==", + "dev": true, + "dependencies": { + "@types/ms": "*" + } + }, + "node_modules/@types/detect-port": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/@types/detect-port/-/detect-port-1.3.3.tgz", + "integrity": "sha512-bV/jQlAJ/nPY3XqSatkGpu+nGzou+uSwrH1cROhn+jBFg47yaNH+blW4C7p9KhopC7QxCv/6M86s37k8dMk0Yg==", + "dev": true + }, + "node_modules/@types/doctrine": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/@types/doctrine/-/doctrine-0.0.3.tgz", + "integrity": "sha512-w5jZ0ee+HaPOaX25X2/2oGR/7rgAQSYII7X7pp0m9KgBfMP7uKfMfTvcpl5Dj+eDBbpxKGiqE+flqDr6XTd2RA==", + "dev": true + }, + "node_modules/@types/ejs": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@types/ejs/-/ejs-3.1.2.tgz", + "integrity": "sha512-ZmiaE3wglXVWBM9fyVC17aGPkLo/UgaOjEiI2FXQfyczrCefORPxIe+2dVmnmk3zkVIbizjrlQzmPGhSYGXG5g==", + "dev": true + }, + "node_modules/@types/emscripten": { + "version": "1.39.7", + "resolved": "https://registry.npmjs.org/@types/emscripten/-/emscripten-1.39.7.tgz", + "integrity": "sha512-tLqYV94vuqDrXh515F/FOGtBcRMTPGvVV1LzLbtYDcQmmhtpf/gLYf+hikBbQk8MzOHNz37wpFfJbYAuSn8HqA==", + "dev": true + }, + "node_modules/@types/escodegen": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/@types/escodegen/-/escodegen-0.0.6.tgz", + "integrity": "sha512-AjwI4MvWx3HAOaZqYsjKWyEObT9lcVV0Y0V8nXo6cXzN8ZiMxVhf6F3d/UNvXVGKrEzL/Dluc5p+y9GkzlTWig==", + "dev": true + }, + "node_modules/@types/eslint": { + "version": "8.40.2", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.40.2.tgz", + "integrity": "sha512-PRVjQ4Eh9z9pmmtaq8nTjZjQwKFk7YIHIud3lRoKRBgUQjgjRmoGxxGEPXQkF+lH7QkHJRNr5F4aBgYCW0lqpQ==", + "dev": true, + "dependencies": { + "@types/estree": "*", + "@types/json-schema": "*" + } + }, + "node_modules/@types/eslint-scope": { + "version": "3.7.4", + "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.4.tgz", + "integrity": "sha512-9K4zoImiZc3HlIp6AVUDE4CWYx22a+lhSZMYNpbjW04+YF0KWj4pJXnEMjdnFTiQibFFmElcsasJXDbdI/EPhA==", + "dev": true, + "dependencies": { + "@types/eslint": "*", + "@types/estree": "*" + } + }, + "node_modules/@types/estree": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.1.tgz", + "integrity": "sha512-LG4opVs2ANWZ1TJoKc937iMmNstM/d0ae1vNbnBvBhqCSezgVUOzcLCqbI5elV8Vy6WKwKjaqR+zO9VKirBBCA==", + "dev": true + }, + "node_modules/@types/express": { + "version": "4.17.17", + "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.17.tgz", + "integrity": "sha512-Q4FmmuLGBG58btUnfS1c1r/NQdlp3DMfGDGig8WhfpA2YRUtEkxAjkZb0yvplJGYdF1fsQ81iMDcH24sSCNC/Q==", + "dev": true, + "dependencies": { + "@types/body-parser": "*", + "@types/express-serve-static-core": "^4.17.33", + "@types/qs": "*", + "@types/serve-static": "*" + } + }, + "node_modules/@types/express-serve-static-core": { + "version": "4.17.35", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.35.tgz", + "integrity": "sha512-wALWQwrgiB2AWTT91CB62b6Yt0sNHpznUXeZEcnPU3DRdlDIz74x8Qg1UUYKSVFi+va5vKOLYRBI1bRKiLLKIg==", + "dev": true, + "dependencies": { + "@types/node": "*", + "@types/qs": "*", + "@types/range-parser": "*", + "@types/send": "*" + } + }, + "node_modules/@types/find-cache-dir": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/@types/find-cache-dir/-/find-cache-dir-3.2.1.tgz", + "integrity": "sha512-frsJrz2t/CeGifcu/6uRo4b+SzAwT4NYCVPu1GN8IB9XTzrpPkGuV0tmh9mN+/L0PklAlsC3u5Fxt0ju00LXIw==", + "dev": true + }, + "node_modules/@types/graceful-fs": { + "version": "4.1.6", + "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.6.tgz", + "integrity": "sha512-Sig0SNORX9fdW+bQuTEovKj3uHcUL6LQKbCrrqb1X7J6/ReAbhCXRAhc+SMejhLELFj2QcyuxmUooZ4bt5ReSw==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/hoist-non-react-statics": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/@types/hoist-non-react-statics/-/hoist-non-react-statics-3.3.1.tgz", + "integrity": "sha512-iMIqiko6ooLrTh1joXodJK5X9xeEALT1kM5G3ZLhD3hszxBdIEd5C75U834D9mLcINgD4OyZf5uQXjkuYydWvA==", + "dev": true, + "dependencies": { + "@types/react": "*", + "hoist-non-react-statics": "^3.3.0" + } + }, + "node_modules/@types/html-minifier-terser": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/@types/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz", + "integrity": "sha512-oh/6byDPnL1zeNXFrDXFLyZjkr1MsBG667IM792caf1L2UPOOMf65NFzjUH/ltyfwjAGfs1rsX1eftK0jC/KIg==", + "dev": true + }, + "node_modules/@types/http-errors": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.1.tgz", + "integrity": "sha512-/K3ds8TRAfBvi5vfjuz8y6+GiAYBZ0x4tXv1Av6CWBWn0IlADc+ZX9pMq7oU0fNQPnBwIZl3rmeLp6SBApbxSQ==", + "dev": true + }, + "node_modules/@types/http-proxy": { + "version": "1.17.11", + "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.11.tgz", + "integrity": "sha512-HC8G7c1WmaF2ekqpnFq626xd3Zz0uvaqFmBJNRZCGEZCXkvSdJoNFn/8Ygbd9fKNQj8UzLdCETaI0UWPAjK7IA==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/istanbul-lib-coverage": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz", + "integrity": "sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==", + "dev": true + }, + "node_modules/@types/istanbul-lib-report": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", + "integrity": "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-coverage": "*" + } + }, + "node_modules/@types/istanbul-reports": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz", + "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-report": "*" + } + }, + "node_modules/@types/jest": { + "version": "29.5.3", + "resolved": "https://registry.npmjs.org/@types/jest/-/jest-29.5.3.tgz", + "integrity": "sha512-1Nq7YrO/vJE/FYnqYyw0FS8LdrjExSgIiHyKg7xPpn+yi8Q4huZryKnkJatN1ZRH89Kw2v33/8ZMB7DuZeSLlA==", + "dev": true, + "dependencies": { + "expect": "^29.0.0", + "pretty-format": "^29.0.0" + } + }, + "node_modules/@types/jest/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@types/jest/node_modules/pretty-format": { + "version": "29.6.2", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.6.2.tgz", + "integrity": "sha512-1q0oC8eRveTg5nnBEWMXAU2qpv65Gnuf2eCQzSjxpWFkPaPARwqZZDGuNE0zPAZfTCHzIk3A8dIjwlQKKLphyg==", + "dev": true, + "dependencies": { + "@jest/schemas": "^29.6.0", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@types/jest/node_modules/react-is": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", + "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", + "dev": true + }, + "node_modules/@types/js-levenshtein": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@types/js-levenshtein/-/js-levenshtein-1.1.1.tgz", + "integrity": "sha512-qC4bCqYGy1y/NP7dDVr7KJarn+PbX1nSpwA7JXdu0HxT3QYjO8MJ+cntENtHFVy2dRAyBV23OZ6MxsW1AM1L8g==", + "dev": true + }, + "node_modules/@types/jsdom": { + "version": "20.0.1", + "resolved": "https://registry.npmjs.org/@types/jsdom/-/jsdom-20.0.1.tgz", + "integrity": "sha512-d0r18sZPmMQr1eG35u12FZfhIXNrnsPU/g5wvRKCUf/tOGilKKwYMYGqh33BNR6ba+2gkHw1EUiHoN3mn7E5IQ==", + "dev": true, + "dependencies": { + "@types/node": "*", + "@types/tough-cookie": "*", + "parse5": "^7.0.0" + } + }, + "node_modules/@types/json-schema": { + "version": "7.0.12", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.12.tgz", + "integrity": "sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA==", + "dev": true + }, + "node_modules/@types/lodash": { + "version": "4.14.196", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.196.tgz", + "integrity": "sha512-22y3o88f4a94mKljsZcanlNWPzO0uBsBdzLAngf2tp533LzZcQzb6+eZPJ+vCTt+bqF2XnvT9gejTLsAcJAJyQ==", + "dev": true + }, + "node_modules/@types/mdx": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@types/mdx/-/mdx-2.0.5.tgz", + "integrity": "sha512-76CqzuD6Q7LC+AtbPqrvD9AqsN0k8bsYo2bM2J8pmNldP1aIPAbzUQ7QbobyXL4eLr1wK5x8FZFe8eF/ubRuBg==", + "dev": true + }, + "node_modules/@types/mime": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.2.tgz", + "integrity": "sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw==", + "dev": true + }, + "node_modules/@types/mime-types": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@types/mime-types/-/mime-types-2.1.1.tgz", + "integrity": "sha512-vXOTGVSLR2jMw440moWTC7H19iUyLtP3Z1YTj7cSsubOICinjMxFeb/V57v9QdyyPGbbWolUFSSmSiRSn94tFw==", + "dev": true + }, + "node_modules/@types/ms": { + "version": "0.7.31", + "resolved": "https://registry.npmjs.org/@types/ms/-/ms-0.7.31.tgz", + "integrity": "sha512-iiUgKzV9AuaEkZqkOLDIvlQiL6ltuZd9tGcW3gwpnX8JbuiuhFlEGmmFXEXkN50Cvq7Os88IY2v0dkDqXYWVgA==", + "dev": true + }, + "node_modules/@types/node": { + "version": "20.3.3", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.3.3.tgz", + "integrity": "sha512-wheIYdr4NYML61AjC8MKj/2jrR/kDQri/CIpVoZwldwhnIrD/j9jIU5bJ8yBKuB2VhpFV7Ab6G2XkBjv9r9Zzw==", + "dev": true + }, + "node_modules/@types/node-fetch": { + "version": "2.6.4", + "resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.6.4.tgz", + "integrity": "sha512-1ZX9fcN4Rvkvgv4E6PAY5WXUFWFcRWxZa3EW83UjycOB9ljJCedb2CupIP4RZMEwF/M3eTcCihbBRgwtGbg5Rg==", + "dev": true, + "dependencies": { + "@types/node": "*", + "form-data": "^3.0.0" + } + }, + "node_modules/@types/node-fetch/node_modules/form-data": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", + "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==", + "dev": true, + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/@types/normalize-package-data": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz", + "integrity": "sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==", + "dev": true + }, + "node_modules/@types/parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==", + "dev": true + }, + "node_modules/@types/pretty-hrtime": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@types/pretty-hrtime/-/pretty-hrtime-1.0.1.tgz", + "integrity": "sha512-VjID5MJb1eGKthz2qUerWT8+R4b9N+CHvGCzg9fn4kWZgaF9AhdYikQio3R7wV8YY1NsQKPaCwKz1Yff+aHNUQ==", + "dev": true + }, + "node_modules/@types/prop-types": { + "version": "15.7.5", + "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.5.tgz", + "integrity": "sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==" + }, + "node_modules/@types/qs": { + "version": "6.9.7", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz", + "integrity": "sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==", + "dev": true + }, + "node_modules/@types/range-parser": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.4.tgz", + "integrity": "sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==", + "dev": true + }, + "node_modules/@types/react": { + "version": "18.2.14", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.14.tgz", + "integrity": "sha512-A0zjq+QN/O0Kpe30hA1GidzyFjatVvrpIvWLxD+xv67Vt91TWWgco9IvrJBkeyHm1trGaFS/FSGqPlhyeZRm0g==", + "dependencies": { + "@types/prop-types": "*", + "@types/scheduler": "*", + "csstype": "^3.0.2" + } + }, + "node_modules/@types/react-dom": { + "version": "18.2.6", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.2.6.tgz", + "integrity": "sha512-2et4PDvg6PVCyS7fuTc4gPoksV58bW0RwSxWKcPRcHZf0PRUGq03TKcD/rUHe3azfV6/5/biUBJw+HhCQjaP0A==", + "dependencies": { + "@types/react": "*" + } + }, + "node_modules/@types/retry": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.0.tgz", + "integrity": "sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==", + "dev": true + }, + "node_modules/@types/scheduler": { + "version": "0.16.3", + "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.3.tgz", + "integrity": "sha512-5cJ8CB4yAx7BH1oMvdU0Jh9lrEXyPkar6F9G/ERswkCuvP4KQZfZkSjcMbAICCpQTN4OuZn8tz0HiKv9TGZgrQ==" + }, + "node_modules/@types/semver": { + "version": "7.5.0", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.0.tgz", + "integrity": "sha512-G8hZ6XJiHnuhQKR7ZmysCeJWE08o8T0AXtk5darsCaTVsYZhhgUrq53jizaR2FvsoeCwJhlmwTjkXBY5Pn/ZHw==", + "dev": true + }, + "node_modules/@types/send": { + "version": "0.17.1", + "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.1.tgz", + "integrity": "sha512-Cwo8LE/0rnvX7kIIa3QHCkcuF21c05Ayb0ZfxPiv0W8VRiZiNW/WuRupHKpqqGVGf7SUA44QSOUKaEd9lIrd/Q==", + "dev": true, + "dependencies": { + "@types/mime": "^1", + "@types/node": "*" + } + }, + "node_modules/@types/serve-index": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/@types/serve-index/-/serve-index-1.9.1.tgz", + "integrity": "sha512-d/Hs3nWDxNL2xAczmOVZNj92YZCS6RGxfBPjKzuu/XirCgXdpKEb88dYNbrYGint6IVWLNP+yonwVAuRC0T2Dg==", + "dev": true, + "dependencies": { + "@types/express": "*" + } + }, + "node_modules/@types/serve-static": { + "version": "1.15.2", + "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.2.tgz", + "integrity": "sha512-J2LqtvFYCzaj8pVYKw8klQXrLLk7TBZmQ4ShlcdkELFKGwGMfevMLneMMRkMgZxotOD9wg497LpC7O8PcvAmfw==", + "dev": true, + "dependencies": { + "@types/http-errors": "*", + "@types/mime": "*", + "@types/node": "*" + } + }, + "node_modules/@types/set-cookie-parser": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/@types/set-cookie-parser/-/set-cookie-parser-2.4.3.tgz", + "integrity": "sha512-7QhnH7bi+6KAhBB+Auejz1uV9DHiopZqu7LfR/5gZZTkejJV5nYeZZpgfFoE0N8aDsXuiYpfKyfyMatCwQhyTQ==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/sockjs": { + "version": "0.3.33", + "resolved": "https://registry.npmjs.org/@types/sockjs/-/sockjs-0.3.33.tgz", + "integrity": "sha512-f0KEEe05NvUnat+boPTZ0dgaLZ4SfSouXUgv5noUiefG2ajgKjmETo9ZJyuqsl7dfl2aHlLJUiki6B4ZYldiiw==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/stack-utils": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.1.tgz", + "integrity": "sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==", + "dev": true + }, + "node_modules/@types/styled-components": { + "version": "5.1.26", + "resolved": "https://registry.npmjs.org/@types/styled-components/-/styled-components-5.1.26.tgz", + "integrity": "sha512-KuKJ9Z6xb93uJiIyxo/+ksS7yLjS1KzG6iv5i78dhVg/X3u5t1H7juRWqVmodIdz6wGVaIApo1u01kmFRdJHVw==", + "dev": true, + "dependencies": { + "@types/hoist-non-react-statics": "*", + "@types/react": "*", + "csstype": "^3.0.2" + } + }, + "node_modules/@types/stylis": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@types/stylis/-/stylis-4.2.0.tgz", + "integrity": "sha512-n4sx2bqL0mW1tvDf/loQ+aMX7GQD3lc3fkCMC55VFNDu/vBOabO+LTIeXKM14xK0ppk5TUGcWRjiSpIlUpghKw==" + }, + "node_modules/@types/testing-library__jest-dom": { + "version": "5.14.9", + "resolved": "https://registry.npmjs.org/@types/testing-library__jest-dom/-/testing-library__jest-dom-5.14.9.tgz", + "integrity": "sha512-FSYhIjFlfOpGSRyVoMBMuS3ws5ehFQODymf3vlI7U1K8c7PHwWwFY7VREfmsuzHSOnoKs/9/Y983ayOs7eRzqw==", + "dev": true, + "dependencies": { + "@types/jest": "*" + } + }, + "node_modules/@types/tough-cookie": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@types/tough-cookie/-/tough-cookie-4.0.2.tgz", + "integrity": "sha512-Q5vtl1W5ue16D+nIaW8JWebSSraJVlK+EthKn7e7UcD4KWsaSJ8BqGPXNaPghgtcn/fhvrN17Tv8ksUsQpiplw==", + "dev": true + }, + "node_modules/@types/unist": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.7.tgz", + "integrity": "sha512-cputDpIbFgLUaGQn6Vqg3/YsJwxUwHLO13v3i5ouxT4lat0khip9AEWxtERujXV9wxIB1EyF97BSJFt6vpdI8g==", + "dev": true + }, + "node_modules/@types/ws": { + "version": "8.5.5", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.5.tgz", + "integrity": "sha512-lwhs8hktwxSjf9UaZ9tG5M03PGogvFaH8gUgLNbN9HKIg0dvv6q+gkSuJ8HN4/VbyxkuLzCjlN7GquQ0gUJfIg==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/yargs": { + "version": "17.0.24", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.24.tgz", + "integrity": "sha512-6i0aC7jV6QzQB8ne1joVZ0eSFIstHsCrobmOtghM11yGlH0j43FKL2UhWdELkyps0zuf7qVTUVCCR+tgSlyLLw==", + "dev": true, + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/@types/yargs-parser": { + "version": "21.0.0", + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.0.tgz", + "integrity": "sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==", + "dev": true + }, + "node_modules/@typescript-eslint/scope-manager": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.62.0.tgz", + "integrity": "sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/visitor-keys": "5.62.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/types": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.62.0.tgz", + "integrity": "sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/typescript-estree": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.62.0.tgz", + "integrity": "sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/visitor-keys": "5.62.0", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "semver": "^7.3.7", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/@typescript-eslint/utils": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.62.0.tgz", + "integrity": "sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==", + "dev": true, + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@types/json-schema": "^7.0.9", + "@types/semver": "^7.3.12", + "@typescript-eslint/scope-manager": "5.62.0", + "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/typescript-estree": "5.62.0", + "eslint-scope": "^5.1.1", + "semver": "^7.3.7" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/@typescript-eslint/utils/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@typescript-eslint/utils/node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@typescript-eslint/utils/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/@typescript-eslint/visitor-keys": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.62.0.tgz", + "integrity": "sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "5.62.0", + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@webassemblyjs/ast": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.6.tgz", + "integrity": "sha512-IN1xI7PwOvLPgjcf180gC1bqn3q/QaOCwYUahIOhbYUu8KA/3tw2RT/T0Gidi1l7Hhj5D/INhJxiICObqpMu4Q==", + "dev": true, + "dependencies": { + "@webassemblyjs/helper-numbers": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6" + } + }, + "node_modules/@webassemblyjs/floating-point-hex-parser": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.6.tgz", + "integrity": "sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==", + "dev": true + }, + "node_modules/@webassemblyjs/helper-api-error": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.6.tgz", + "integrity": "sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==", + "dev": true + }, + "node_modules/@webassemblyjs/helper-buffer": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.6.tgz", + "integrity": "sha512-z3nFzdcp1mb8nEOFFk8DrYLpHvhKC3grJD2ardfKOzmbmJvEf/tPIqCY+sNcwZIY8ZD7IkB2l7/pqhUhqm7hLA==", + "dev": true + }, + "node_modules/@webassemblyjs/helper-numbers": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.6.tgz", + "integrity": "sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==", + "dev": true, + "dependencies": { + "@webassemblyjs/floating-point-hex-parser": "1.11.6", + "@webassemblyjs/helper-api-error": "1.11.6", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/helper-wasm-bytecode": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.6.tgz", + "integrity": "sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==", + "dev": true + }, + "node_modules/@webassemblyjs/helper-wasm-section": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.6.tgz", + "integrity": "sha512-LPpZbSOwTpEC2cgn4hTydySy1Ke+XEu+ETXuoyvuyezHO3Kjdu90KK95Sh9xTbmjrCsUwvWwCOQQNta37VrS9g==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-buffer": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/wasm-gen": "1.11.6" + } + }, + "node_modules/@webassemblyjs/ieee754": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.6.tgz", + "integrity": "sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==", + "dev": true, + "dependencies": { + "@xtuc/ieee754": "^1.2.0" + } + }, + "node_modules/@webassemblyjs/leb128": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.6.tgz", + "integrity": "sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==", + "dev": true, + "dependencies": { + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/utf8": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.6.tgz", + "integrity": "sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==", + "dev": true + }, + "node_modules/@webassemblyjs/wasm-edit": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.6.tgz", + "integrity": "sha512-Ybn2I6fnfIGuCR+Faaz7YcvtBKxvoLV3Lebn1tM4o/IAJzmi9AWYIPWpyBfU8cC+JxAO57bk4+zdsTjJR+VTOw==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-buffer": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/helper-wasm-section": "1.11.6", + "@webassemblyjs/wasm-gen": "1.11.6", + "@webassemblyjs/wasm-opt": "1.11.6", + "@webassemblyjs/wasm-parser": "1.11.6", + "@webassemblyjs/wast-printer": "1.11.6" + } + }, + "node_modules/@webassemblyjs/wasm-gen": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.6.tgz", + "integrity": "sha512-3XOqkZP/y6B4F0PBAXvI1/bky7GryoogUtfwExeP/v7Nzwo1QLcq5oQmpKlftZLbT+ERUOAZVQjuNVak6UXjPA==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/ieee754": "1.11.6", + "@webassemblyjs/leb128": "1.11.6", + "@webassemblyjs/utf8": "1.11.6" + } + }, + "node_modules/@webassemblyjs/wasm-opt": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.6.tgz", + "integrity": "sha512-cOrKuLRE7PCe6AsOVl7WasYf3wbSo4CeOk6PkrjS7g57MFfVUF9u6ysQBBODX0LdgSvQqRiGz3CXvIDKcPNy4g==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-buffer": "1.11.6", + "@webassemblyjs/wasm-gen": "1.11.6", + "@webassemblyjs/wasm-parser": "1.11.6" + } + }, + "node_modules/@webassemblyjs/wasm-parser": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.6.tgz", + "integrity": "sha512-6ZwPeGzMJM3Dqp3hCsLgESxBGtT/OeCvCZ4TA1JUPYgmhAx38tTPR9JaKy0S5H3evQpO/h2uWs2j6Yc/fjkpTQ==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-api-error": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/ieee754": "1.11.6", + "@webassemblyjs/leb128": "1.11.6", + "@webassemblyjs/utf8": "1.11.6" + } + }, + "node_modules/@webassemblyjs/wast-printer": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.6.tgz", + "integrity": "sha512-JM7AhRcE+yW2GWYaKeHL5vt4xqee5N2WcezptmgyhNS+ScggqcT1OtXykhAb13Sn5Yas0j2uv9tHgrjwvzAP4A==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.6", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webpack-cli/configtest": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-2.1.1.tgz", + "integrity": "sha512-wy0mglZpDSiSS0XHrVR+BAdId2+yxPSoJW8fsna3ZpYSlufjvxnP4YbKTCBZnNIcGN4r6ZPXV55X4mYExOfLmw==", + "dev": true, + "engines": { + "node": ">=14.15.0" + }, + "peerDependencies": { + "webpack": "5.x.x", + "webpack-cli": "5.x.x" + } + }, + "node_modules/@webpack-cli/info": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@webpack-cli/info/-/info-2.0.2.tgz", + "integrity": "sha512-zLHQdI/Qs1UyT5UBdWNqsARasIA+AaF8t+4u2aS2nEpBQh2mWIVb8qAklq0eUENnC5mOItrIB4LiS9xMtph18A==", + "dev": true, + "engines": { + "node": ">=14.15.0" + }, + "peerDependencies": { + "webpack": "5.x.x", + "webpack-cli": "5.x.x" + } + }, + "node_modules/@webpack-cli/serve": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-2.0.5.tgz", + "integrity": "sha512-lqaoKnRYBdo1UgDX8uF24AfGMifWK19TxPmM5FHc2vAGxrJ/qtyUyFBWoY1tISZdelsQ5fBcOusifo5o5wSJxQ==", + "dev": true, + "engines": { + "node": ">=14.15.0" + }, + "peerDependencies": { + "webpack": "5.x.x", + "webpack-cli": "5.x.x" + }, + "peerDependenciesMeta": { + "webpack-dev-server": { + "optional": true + } + } + }, + "node_modules/@xmldom/xmldom": { + "version": "0.8.9", + "resolved": "https://registry.npmjs.org/@xmldom/xmldom/-/xmldom-0.8.9.tgz", + "integrity": "sha512-4VSbbcMoxc4KLjb1gs96SRmi7w4h1SF+fCoiK0XaQX62buCc1G5d0DC5bJ9xJBNPDSVCmIrcl8BiYxzjrqaaJA==", + "dev": true, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/@xtuc/ieee754": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", + "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", + "dev": true + }, + "node_modules/@xtuc/long": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", + "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", + "dev": true + }, + "node_modules/@yarnpkg/esbuild-plugin-pnp": { + "version": "3.0.0-rc.15", + "resolved": "https://registry.npmjs.org/@yarnpkg/esbuild-plugin-pnp/-/esbuild-plugin-pnp-3.0.0-rc.15.tgz", + "integrity": "sha512-kYzDJO5CA9sy+on/s2aIW0411AklfCi8Ck/4QDivOqsMKpStZA2SsR+X27VTggGwpStWaLrjJcDcdDMowtG8MA==", + "dev": true, + "dependencies": { + "tslib": "^2.4.0" + }, + "engines": { + "node": ">=14.15.0" + }, + "peerDependencies": { + "esbuild": ">=0.10.0" + } + }, + "node_modules/@yarnpkg/fslib": { + "version": "2.10.3", + "resolved": "https://registry.npmjs.org/@yarnpkg/fslib/-/fslib-2.10.3.tgz", + "integrity": "sha512-41H+Ga78xT9sHvWLlFOZLIhtU6mTGZ20pZ29EiZa97vnxdohJD2AF42rCoAoWfqUz486xY6fhjMH+DYEM9r14A==", + "dev": true, + "dependencies": { + "@yarnpkg/libzip": "^2.3.0", + "tslib": "^1.13.0" + }, + "engines": { + "node": ">=12 <14 || 14.2 - 14.9 || >14.10.0" + } + }, + "node_modules/@yarnpkg/fslib/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + }, + "node_modules/@yarnpkg/libzip": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@yarnpkg/libzip/-/libzip-2.3.0.tgz", + "integrity": "sha512-6xm38yGVIa6mKm/DUCF2zFFJhERh/QWp1ufm4cNUvxsONBmfPg8uZ9pZBdOmF6qFGr/HlT6ABBkCSx/dlEtvWg==", + "dev": true, + "dependencies": { + "@types/emscripten": "^1.39.6", + "tslib": "^1.13.0" + }, + "engines": { + "node": ">=12 <14 || 14.2 - 14.9 || >14.10.0" + } + }, + "node_modules/@yarnpkg/libzip/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + }, + "node_modules/@zxing/text-encoding": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/@zxing/text-encoding/-/text-encoding-0.9.0.tgz", + "integrity": "sha512-U/4aVJ2mxI0aDNI8Uq0wEhMgY+u4CNtEb0om3+y3+niDAsoTCOB33UF0sxpzqzdqXLqmvc+vZyAt4O8pPdfkwA==", + "dev": true, + "optional": true + }, + "node_modules/abab": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.6.tgz", + "integrity": "sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==", + "dev": true + }, + "node_modules/accepts": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "dev": true, + "dependencies": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/acorn": { + "version": "8.9.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.9.0.tgz", + "integrity": "sha512-jaVNAFBHNLXspO543WnNNPZFRtavh3skAkITqD0/2aeMkKZTN+254PyhwxFYrk3vQ1xfY+2wbesJMs/JC8/PwQ==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-globals": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-7.0.1.tgz", + "integrity": "sha512-umOSDSDrfHbTNPuNpC2NSnnA3LUrqpevPb4T9jRx4MagXNS0rs+gwiTcAvqCRmsD6utzsrzNt+ebm00SNWiC3Q==", + "dev": true, + "dependencies": { + "acorn": "^8.1.0", + "acorn-walk": "^8.0.2" + } + }, + "node_modules/acorn-import-assertions": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.9.0.tgz", + "integrity": "sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA==", + "dev": true, + "peerDependencies": { + "acorn": "^8" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/acorn-walk": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", + "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/address": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/address/-/address-1.2.2.tgz", + "integrity": "sha512-4B/qKCfeE/ODUaAUpSwfzazo5x29WD4r3vXiWsB7I2mSDAihwEqKO+g8GELZUQSSAo5e1XTYh3ZVfLyxBc12nA==", + "dev": true, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/adjust-sourcemap-loader": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/adjust-sourcemap-loader/-/adjust-sourcemap-loader-4.0.0.tgz", + "integrity": "sha512-OXwN5b9pCUXNQHJpwwD2qP40byEmSgzj8B4ydSN0uMNYWiFmJ6x6KwUllMmfk8Rwu/HJDFR7U8ubsWBoN0Xp0A==", + "dev": true, + "dependencies": { + "loader-utils": "^2.0.0", + "regex-parser": "^2.2.11" + }, + "engines": { + "node": ">=8.9" + } + }, + "node_modules/agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "dev": true, + "dependencies": { + "debug": "4" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/agent-base/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/agent-base/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/aggregate-error": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", + "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", + "dev": true, + "dependencies": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ajv-formats": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", + "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", + "dev": true, + "dependencies": { + "ajv": "^8.0.0" + }, + "peerDependencies": { + "ajv": "^8.0.0" + }, + "peerDependenciesMeta": { + "ajv": { + "optional": true + } + } + }, + "node_modules/ajv-formats/node_modules/ajv": { + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", + "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ajv-formats/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true + }, + "node_modules/ajv-keywords": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "dev": true, + "peerDependencies": { + "ajv": "^6.9.1" + } + }, + "node_modules/ansi-escapes": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "dev": true, + "dependencies": { + "type-fest": "^0.21.3" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ansi-escapes/node_modules/type-fest": { + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ansi-html-community": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/ansi-html-community/-/ansi-html-community-0.0.8.tgz", + "integrity": "sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==", + "dev": true, + "engines": [ + "node >= 0.8.0" + ], + "bin": { + "ansi-html": "bin/ansi-html" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "devOptional": true, + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/app-root-dir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/app-root-dir/-/app-root-dir-1.0.2.tgz", + "integrity": "sha512-jlpIfsOoNoafl92Sz//64uQHGSyMrD2vYG5d8o2a4qGvyNCvXur7bzIsWtAC/6flI2RYAp3kv8rsfBtaLm7w0g==", + "dev": true + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "node_modules/aria-hidden": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/aria-hidden/-/aria-hidden-1.2.3.tgz", + "integrity": "sha512-xcLxITLe2HYa1cnYnwCjkOO1PqUHQpozB8x9AR0OgWN2woOBi5kSDVxKfd0b7sb1hw5qFeJhXm9H1nu3xSfLeQ==", + "dev": true, + "dependencies": { + "tslib": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/aria-query": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.0.tgz", + "integrity": "sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==", + "dev": true, + "dependencies": { + "dequal": "^2.0.3" + } + }, + "node_modules/array-buffer-byte-length": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz", + "integrity": "sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "is-array-buffer": "^3.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array-flatten": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz", + "integrity": "sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==", + "dev": true + }, + "node_modules/array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/assert": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/assert/-/assert-2.0.0.tgz", + "integrity": "sha512-se5Cd+js9dXJnu6Ag2JFc00t+HmHOen+8Q+L7O9zI0PqQXr20uk2J0XQqMxZEeo5U50o8Nvmmx7dZrl+Ufr35A==", + "dev": true, + "dependencies": { + "es6-object-assign": "^1.1.0", + "is-nan": "^1.2.1", + "object-is": "^1.0.1", + "util": "^0.12.0" + } + }, + "node_modules/ast-types": { + "version": "0.14.2", + "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.14.2.tgz", + "integrity": "sha512-O0yuUDnZeQDL+ncNGlJ78BiO4jnYI3bvMsD5prT0/nsgijG/LpNBIr63gTjVTNsiGkgQhiyCShTgxt8oXOrklA==", + "dev": true, + "dependencies": { + "tslib": "^2.0.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/async": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz", + "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==", + "dev": true + }, + "node_modules/async-limiter": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz", + "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==", + "dev": true + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "dev": true + }, + "node_modules/available-typed-arrays": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", + "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/babel-core": { + "version": "7.0.0-bridge.0", + "resolved": "https://registry.npmjs.org/babel-core/-/babel-core-7.0.0-bridge.0.tgz", + "integrity": "sha512-poPX9mZH/5CSanm50Q+1toVci6pv5KSRv/5TWCwtzQS5XEwn40BcCrgIeMFWP9CKKIniKXNxoIOnOq4VVlGXhg==", + "dev": true, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/babel-jest": { + "version": "29.6.2", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-29.6.2.tgz", + "integrity": "sha512-BYCzImLos6J3BH/+HvUCHG1dTf2MzmAB4jaVxHV+29RZLjR29XuYTmsf2sdDwkrb+FczkGo3kOhE7ga6sI0P4A==", + "dev": true, + "dependencies": { + "@jest/transform": "^29.6.2", + "@types/babel__core": "^7.1.14", + "babel-plugin-istanbul": "^6.1.1", + "babel-preset-jest": "^29.5.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "slash": "^3.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.8.0" + } + }, + "node_modules/babel-jest/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/babel-jest/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/babel-jest/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/babel-jest/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/babel-jest/node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/babel-jest/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/babel-loader": { + "version": "9.1.2", + "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-9.1.2.tgz", + "integrity": "sha512-mN14niXW43tddohGl8HPu5yfQq70iUThvFL/4QzESA7GcZoC0eVOhvWdQ8+3UlSjaDE9MVtsW9mxDY07W7VpVA==", + "dev": true, + "dependencies": { + "find-cache-dir": "^3.3.2", + "schema-utils": "^4.0.0" + }, + "engines": { + "node": ">= 14.15.0" + }, + "peerDependencies": { + "@babel/core": "^7.12.0", + "webpack": ">=5" + } + }, + "node_modules/babel-loader/node_modules/ajv": { + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", + "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/babel-loader/node_modules/ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.3" + }, + "peerDependencies": { + "ajv": "^8.8.2" + } + }, + "node_modules/babel-loader/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true + }, + "node_modules/babel-loader/node_modules/schema-utils": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.2.0.tgz", + "integrity": "sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.9.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.1.0" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/babel-plugin-add-react-displayname": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/babel-plugin-add-react-displayname/-/babel-plugin-add-react-displayname-0.0.5.tgz", + "integrity": "sha512-LY3+Y0XVDYcShHHorshrDbt4KFWL4bSeniCtl4SYZbask+Syngk1uMPCeN9+nSiZo6zX5s0RTq/J9Pnaaf/KHw==", + "dev": true + }, + "node_modules/babel-plugin-istanbul": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", + "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.0.0", + "@istanbuljs/load-nyc-config": "^1.0.0", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-instrument": "^5.0.4", + "test-exclude": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/babel-plugin-jest-hoist": { + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.5.0.tgz", + "integrity": "sha512-zSuuuAlTMT4mzLj2nPnUm6fsE6270vdOfnpbJ+RmruU75UhLFvL0N2NgI7xpeS7NaB6hGqmd5pVpGTDYvi4Q3w==", + "dev": true, + "dependencies": { + "@babel/template": "^7.3.3", + "@babel/types": "^7.3.3", + "@types/babel__core": "^7.1.14", + "@types/babel__traverse": "^7.0.6" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/babel-plugin-named-exports-order": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/babel-plugin-named-exports-order/-/babel-plugin-named-exports-order-0.0.2.tgz", + "integrity": "sha512-OgOYHOLoRK+/mvXU9imKHlG6GkPLYrUCvFXG/CM93R/aNNO8pOOF4aS+S8CCHMDQoNSeiOYEZb/G6RwL95Jktw==", + "dev": true + }, + "node_modules/babel-plugin-polyfill-corejs2": { + "version": "0.4.5", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.5.tgz", + "integrity": "sha512-19hwUH5FKl49JEsvyTcoHakh6BE0wgXLLptIyKZ3PijHc/Ci521wygORCUCCred+E/twuqRyAkE02BAWPmsHOg==", + "dependencies": { + "@babel/compat-data": "^7.22.6", + "@babel/helper-define-polyfill-provider": "^0.4.2", + "semver": "^6.3.1" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/babel-plugin-polyfill-corejs2/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/babel-plugin-polyfill-corejs3": { + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.8.3.tgz", + "integrity": "sha512-z41XaniZL26WLrvjy7soabMXrfPWARN25PZoriDEiLMxAp50AUW3t35BGQUMg5xK3UrpVTtagIDklxYa+MhiNA==", + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.4.2", + "core-js-compat": "^3.31.0" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/babel-plugin-polyfill-regenerator": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.5.2.tgz", + "integrity": "sha512-tAlOptU0Xj34V1Y2PNTL4Y0FOJMDB6bZmoW39FeCQIhigGLkqu3Fj6uiXpxIf6Ij274ENdYx64y6Au+ZKlb1IA==", + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.4.2" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/babel-plugin-react-docgen": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/babel-plugin-react-docgen/-/babel-plugin-react-docgen-4.2.1.tgz", + "integrity": "sha512-UQ0NmGHj/HAqi5Bew8WvNfCk8wSsmdgNd8ZdMjBCICtyCJCq9LiqgqvjCYe570/Wg7AQArSq1VQ60Dd/CHN7mQ==", + "dev": true, + "dependencies": { + "ast-types": "^0.14.2", + "lodash": "^4.17.15", + "react-docgen": "^5.0.0" + } + }, + "node_modules/babel-preset-current-node-syntax": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz", + "integrity": "sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==", + "dev": true, + "dependencies": { + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-bigint": "^7.8.3", + "@babel/plugin-syntax-class-properties": "^7.8.3", + "@babel/plugin-syntax-import-meta": "^7.8.3", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.8.3", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.8.3", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-syntax-top-level-await": "^7.8.3" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/babel-preset-jest": { + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-29.5.0.tgz", + "integrity": "sha512-JOMloxOqdiBSxMAzjRaH023/vvcaSaec49zvg+2LmNsktC7ei39LTJGw02J+9uUtTZUq6xbLyJ4dxe9sSmIuAg==", + "dev": true, + "dependencies": { + "babel-plugin-jest-hoist": "^29.5.0", + "babel-preset-current-node-syntax": "^1.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" + }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/batch": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", + "integrity": "sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==", + "dev": true + }, + "node_modules/better-opn": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/better-opn/-/better-opn-3.0.2.tgz", + "integrity": "sha512-aVNobHnJqLiUelTaHat9DZ1qM2w0C0Eym4LPI/3JxOnSokGVdsl1T1kN7TFvsEAD8G47A6VKQ0TVHqbBnYMJlQ==", + "dev": true, + "dependencies": { + "open": "^8.0.4" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/big-integer": { + "version": "1.6.51", + "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.51.tgz", + "integrity": "sha512-GPEid2Y9QU1Exl1rpO9B2IPJGHPSupF5GnVIP0blYvNOMer2bTvSWs1jGOUg04hTmu67nmLsQ9TBo1puaotBHg==", + "dev": true, + "engines": { + "node": ">=0.6" + } + }, + "node_modules/big.js": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", + "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "devOptional": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/bl": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "dev": true, + "dependencies": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } + }, + "node_modules/body-parser": { + "version": "1.20.1", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz", + "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==", + "dev": true, + "dependencies": { + "bytes": "3.1.2", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "on-finished": "2.4.1", + "qs": "6.11.0", + "raw-body": "2.5.1", + "type-is": "~1.6.18", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/body-parser/node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/bonjour-service": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/bonjour-service/-/bonjour-service-1.1.1.tgz", + "integrity": "sha512-Z/5lQRMOG9k7W+FkeGTNjh7htqn/2LMnfOvBZ8pynNZCM9MwkQkI3zeI4oz09uWdcgmgHugVvBqxGg4VQJ5PCg==", + "dev": true, + "dependencies": { + "array-flatten": "^2.1.2", + "dns-equal": "^1.0.0", + "fast-deep-equal": "^3.1.3", + "multicast-dns": "^7.2.5" + } + }, + "node_modules/boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", + "dev": true + }, + "node_modules/bplist-parser": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/bplist-parser/-/bplist-parser-0.2.0.tgz", + "integrity": "sha512-z0M+byMThzQmD9NILRniCUXYsYpjwnlO8N5uCFaCqIOpqRsJCrQL9NK3JsD67CN5a08nF5oIL2bD6loTdHOuKw==", + "dev": true, + "dependencies": { + "big-integer": "^1.6.44" + }, + "engines": { + "node": ">= 5.10.0" + } + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "devOptional": true, + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browser-assert": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/browser-assert/-/browser-assert-1.2.1.tgz", + "integrity": "sha512-nfulgvOR6S4gt9UKCeGJOuSGBPGiFT6oQ/2UBnvTY/5aQ1PnksW72fhZkM30DzoRRv2WpwZf1vHHEr3mtuXIWQ==", + "dev": true + }, + "node_modules/browserify-zlib": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.1.4.tgz", + "integrity": "sha512-19OEpq7vWgsH6WkvkBJQDFvJS1uPcbFOQ4v9CU839dO+ZZXUZO6XpE6hNCqvlIIj+4fZvRiJ6DsAQ382GwiyTQ==", + "dev": true, + "dependencies": { + "pako": "~0.2.0" + } + }, + "node_modules/browserslist": { + "version": "4.21.9", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.9.tgz", + "integrity": "sha512-M0MFoZzbUrRU4KNfCrDLnvyE7gub+peetoTid3TBIqtunaDJyXlwhakT+/VkvSXcfIzFfK/nkCs4nmyTmxdNSg==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "caniuse-lite": "^1.0.30001503", + "electron-to-chromium": "^1.4.431", + "node-releases": "^2.0.12", + "update-browserslist-db": "^1.0.11" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/bs-logger": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/bs-logger/-/bs-logger-0.2.6.tgz", + "integrity": "sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==", + "dev": true, + "dependencies": { + "fast-json-stable-stringify": "2.x" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/bser": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", + "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", + "dev": true, + "dependencies": { + "node-int64": "^0.4.0" + } + }, + "node_modules/buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "node_modules/buffer-crc32": { + "version": "0.2.13", + "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", + "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "dev": true + }, + "node_modules/bytes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", + "integrity": "sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/c8": { + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/c8/-/c8-7.14.0.tgz", + "integrity": "sha512-i04rtkkcNcCf7zsQcSv/T9EbUn4RXQ6mropeMcjFOsQXQ0iGLAr/xT6TImQg4+U9hmNpN9XdvPkjUL1IzbgxJw==", + "dev": true, + "dependencies": { + "@bcoe/v8-coverage": "^0.2.3", + "@istanbuljs/schema": "^0.1.3", + "find-up": "^5.0.0", + "foreground-child": "^2.0.0", + "istanbul-lib-coverage": "^3.2.0", + "istanbul-lib-report": "^3.0.0", + "istanbul-reports": "^3.1.4", + "rimraf": "^3.0.2", + "test-exclude": "^6.0.0", + "v8-to-istanbul": "^9.0.0", + "yargs": "^16.2.0", + "yargs-parser": "^20.2.9" + }, + "bin": { + "c8": "bin/c8.js" + }, + "engines": { + "node": ">=10.12.0" + } + }, + "node_modules/c8/node_modules/cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "dev": true, + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "node_modules/c8/node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/c8/node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/c8/node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/c8/node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/c8/node_modules/yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "dev": true, + "dependencies": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/c8/node_modules/yargs-parser": { + "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/camel-case": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-4.1.2.tgz", + "integrity": "sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==", + "dev": true, + "dependencies": { + "pascal-case": "^3.1.2", + "tslib": "^2.0.3" + } + }, + "node_modules/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/camelize": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/camelize/-/camelize-1.0.1.tgz", + "integrity": "sha512-dU+Tx2fsypxTgtLoE36npi3UqcjSSMNYfkqgmoEhtZrraP5VWq0K7FkWVTYa8eMPtnU/G2txVsfdCJTn9uzpuQ==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001512", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001512.tgz", + "integrity": "sha512-2S9nK0G/mE+jasCUsMPlARhRCts1ebcp2Ji8Y8PWi4NDE1iRdLCnEPHkEfeBrGC45L4isBx5ur3IQ6yTE2mRZw==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ] + }, + "node_modules/case-sensitive-paths-webpack-plugin": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/case-sensitive-paths-webpack-plugin/-/case-sensitive-paths-webpack-plugin-2.4.0.tgz", + "integrity": "sha512-roIFONhcxog0JSSWbvVAh3OocukmSgpqOH6YpMkCvav/ySIV3JKg4Dc8vYtQjYi/UxpNE36r/9v+VqTQqgkYmw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/chalk/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "engines": { + "node": ">=4" + } + }, + "node_modules/chalk/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/char-regex": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", + "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/chardet": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", + "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", + "dev": true + }, + "node_modules/chokidar": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "devOptional": true, + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/chownr": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", + "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/chrome-trace-event": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", + "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==", + "dev": true, + "engines": { + "node": ">=6.0" + } + }, + "node_modules/ci-info": { + "version": "3.8.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.8.0.tgz", + "integrity": "sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], + "engines": { + "node": ">=8" + } + }, + "node_modules/cjs-module-lexer": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.3.tgz", + "integrity": "sha512-0TNiGstbQmCFwt4akjjBg5pLRTSyj/PkWQ1ZoO2zntmg9yLqSRxwEa4iCfQLGjqhiqBfOJa7W/E8wfGrTDmlZQ==", + "dev": true + }, + "node_modules/clean-css": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-5.3.2.tgz", + "integrity": "sha512-JVJbM+f3d3Q704rF4bqQ5UUyTtuJ0JRKNbTKVEeujCCBoMdkEi+V+e8oktO9qGQNSvHrFTM6JZRXrUvGR1czww==", + "dev": true, + "dependencies": { + "source-map": "~0.6.0" + }, + "engines": { + "node": ">= 10.0" + } + }, + "node_modules/clean-stack": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", + "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/cli-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", + "dev": true, + "dependencies": { + "restore-cursor": "^3.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cli-spinners": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.0.tgz", + "integrity": "sha512-4/aL9X3Wh0yiMQlE+eeRhWP6vclO3QRtw1JHKIT0FFUs5FjpFmESqtMvYZ0+lbzBw900b95mS0hohy+qn2VK/g==", + "dev": true, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-table3": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.3.tgz", + "integrity": "sha512-w5Jac5SykAeZJKntOxJCrm63Eg5/4dhMWIcuTbo9rpE+brgaSZo0RuNJZeOyMgsUdhDeojvgyQLmjI+K50ZGyg==", + "dev": true, + "dependencies": { + "string-width": "^4.2.0" + }, + "engines": { + "node": "10.* || >= 12.*" + }, + "optionalDependencies": { + "@colors/colors": "1.5.0" + } + }, + "node_modules/cli-width": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz", + "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==", + "dev": true, + "engines": { + "node": ">= 10" + } + }, + "node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "dev": true, + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/clone": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", + "dev": true, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/clone-deep": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", + "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", + "dev": true, + "dependencies": { + "is-plain-object": "^2.0.4", + "kind-of": "^6.0.2", + "shallow-clone": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/co": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", + "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==", + "dev": true, + "engines": { + "iojs": ">= 1.0.0", + "node": ">= 0.12.0" + } + }, + "node_modules/collect-v8-coverage": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.2.tgz", + "integrity": "sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q==", + "dev": true + }, + "node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" + }, + "node_modules/colorette": { + "version": "2.0.20", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", + "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", + "dev": true + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dev": true, + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true + }, + "node_modules/common-path-prefix": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/common-path-prefix/-/common-path-prefix-3.0.0.tgz", + "integrity": "sha512-QE33hToZseCH3jS0qN96O/bSh3kaw/h+Tq7ngyY9eWDUnTlTNUyqfqvCXioLe5Na5jFsL78ra/wuBU4iuEgd4w==", + "dev": true + }, + "node_modules/commondir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", + "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==", + "dev": true + }, + "node_modules/compressible": { + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", + "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", + "dev": true, + "dependencies": { + "mime-db": ">= 1.43.0 < 2" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/compression": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz", + "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", + "dev": true, + "dependencies": { + "accepts": "~1.3.5", + "bytes": "3.0.0", + "compressible": "~2.0.16", + "debug": "2.6.9", + "on-headers": "~1.0.2", + "safe-buffer": "5.1.2", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/compression/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" + }, + "node_modules/concat-stream": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", + "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", + "dev": true, + "engines": [ + "node >= 0.8" + ], + "dependencies": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" + } + }, + "node_modules/concat-stream/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dev": true, + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/concat-stream/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "node_modules/concat-stream/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/connect-history-api-fallback": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-2.0.0.tgz", + "integrity": "sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA==", + "dev": true, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/constants-browserify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", + "integrity": "sha512-xFxOwqIzR/e1k1gLiWEophSCMqXcwVHIH7akf7b/vxcUeGunlj3hvZaaqxwHsTgn+IndtkQJgSztIDWeumWJDQ==", + "dev": true + }, + "node_modules/content-disposition": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", + "dev": true, + "dependencies": { + "safe-buffer": "5.2.1" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/content-type": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", + "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/convert-source-map": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", + "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==" + }, + "node_modules/cookie": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", + "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==", + "dev": true + }, + "node_modules/copy-anything": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/copy-anything/-/copy-anything-2.0.6.tgz", + "integrity": "sha512-1j20GZTsvKNkc4BY3NpMOM8tt///wY3FpIzozTOFO2ffuZcV61nojHXVKIy3WM+7ADCy5FVhdZYHYDdgTU0yJw==", + "dev": true, + "peer": true, + "dependencies": { + "is-what": "^3.14.1" + }, + "funding": { + "url": "https://github.com/sponsors/mesqueeb" + } + }, + "node_modules/core-js": { + "version": "3.31.1", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.31.1.tgz", + "integrity": "sha512-2sKLtfq1eFST7l7v62zaqXacPc7uG8ZAya8ogijLhTtaKNcpzpB4TMoTw2Si+8GYKRwFPMMtUT0263QFWFfqyQ==", + "hasInstallScript": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, + "node_modules/core-js-compat": { + "version": "3.32.0", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.32.0.tgz", + "integrity": "sha512-7a9a3D1k4UCVKnLhrgALyFcP7YCsLOQIxPd0dKjf/6GuPcgyiGP70ewWdCGrSK7evyhymi0qO4EqCmSJofDeYw==", + "dependencies": { + "browserslist": "^4.21.9" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, + "node_modules/core-js-pure": { + "version": "3.32.0", + "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.32.0.tgz", + "integrity": "sha512-qsev1H+dTNYpDUEURRuOXMvpdtAnNEvQWS/FMJ2Vb5AY8ZP4rAPQldkE27joykZPJTe0+IVgHZYh1P5Xu1/i1g==", + "dev": true, + "hasInstallScript": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, + "node_modules/core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", + "dev": true + }, + "node_modules/cosmiconfig": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz", + "integrity": "sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==", + "dev": true, + "dependencies": { + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.2.1", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.10.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/crypto-random-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz", + "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/css-color-keywords": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/css-color-keywords/-/css-color-keywords-1.0.0.tgz", + "integrity": "sha512-FyyrDHZKEjXDpNJYvVsV960FiqQyXc/LlYmsxl2BcdMb2WPx0OGRVgTg55rPSyLSNMqP52R9r8geSp7apN3Ofg==", + "engines": { + "node": ">=4" + } + }, + "node_modules/css-loader": { + "version": "6.8.1", + "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-6.8.1.tgz", + "integrity": "sha512-xDAXtEVGlD0gJ07iclwWVkLoZOpEvAWaSyf6W18S2pOC//K8+qUDIx8IIT3D+HjnmkJPQeesOPv5aiUaJsCM2g==", + "dev": true, + "dependencies": { + "icss-utils": "^5.1.0", + "postcss": "^8.4.21", + "postcss-modules-extract-imports": "^3.0.0", + "postcss-modules-local-by-default": "^4.0.3", + "postcss-modules-scope": "^3.0.0", + "postcss-modules-values": "^4.0.0", + "postcss-value-parser": "^4.2.0", + "semver": "^7.3.8" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.0.0" + } + }, + "node_modules/css-loader/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/css-loader/node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/css-loader/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/css-select": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz", + "integrity": "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==", + "dev": true, + "dependencies": { + "boolbase": "^1.0.0", + "css-what": "^6.0.1", + "domhandler": "^4.3.1", + "domutils": "^2.8.0", + "nth-check": "^2.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/css-to-react-native": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/css-to-react-native/-/css-to-react-native-3.2.0.tgz", + "integrity": "sha512-e8RKaLXMOFii+02mOlqwjbD00KSEKqblnpO9e++1aXS1fPQOpS1YoqdVHBqPjHNoxeF2mimzVqawm2KCbEdtHQ==", + "dependencies": { + "camelize": "^1.0.0", + "css-color-keywords": "^1.0.0", + "postcss-value-parser": "^4.0.2" + } + }, + "node_modules/css-what": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", + "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", + "dev": true, + "engines": { + "node": ">= 6" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/css.escape": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/css.escape/-/css.escape-1.5.1.tgz", + "integrity": "sha512-YUifsXXuknHlUsmlgyY0PKzgPOr7/FjCePfHNt0jxm83wHZi44VDMQ7/fGNkjY3/jV1MC+1CmZbaHzugyeRtpg==", + "dev": true + }, + "node_modules/cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "dev": true, + "bin": { + "cssesc": "bin/cssesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/cssom": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.5.0.tgz", + "integrity": "sha512-iKuQcq+NdHqlAcwUY0o/HL69XQrUaQdMjmStJ8JFmUaiiQErlhrmuigkg/CU4E2J0IyUKUrMAgl36TvN67MqTw==", + "dev": true + }, + "node_modules/cssstyle": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz", + "integrity": "sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==", + "dev": true, + "dependencies": { + "cssom": "~0.3.6" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cssstyle/node_modules/cssom": { + "version": "0.3.8", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", + "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==", + "dev": true + }, + "node_modules/csstype": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.2.tgz", + "integrity": "sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==" + }, + "node_modules/data-urls": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-3.0.2.tgz", + "integrity": "sha512-Jy/tj3ldjZJo63sVAvg6LHt2mHvl4V6AgRAmNDtLdm7faqtsx+aJG42rsyCo9JCoRVKwPFzKlIPx3DIibwSIaQ==", + "dev": true, + "dependencies": { + "abab": "^2.0.6", + "whatwg-mimetype": "^3.0.0", + "whatwg-url": "^11.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/data-urls/node_modules/tr46": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-3.0.0.tgz", + "integrity": "sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==", + "dev": true, + "dependencies": { + "punycode": "^2.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/data-urls/node_modules/webidl-conversions": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", + "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==", + "dev": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/data-urls/node_modules/whatwg-url": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-11.0.0.tgz", + "integrity": "sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ==", + "dev": true, + "dependencies": { + "tr46": "^3.0.0", + "webidl-conversions": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/decimal.js": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.4.3.tgz", + "integrity": "sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==", + "dev": true + }, + "node_modules/dedent": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.5.1.tgz", + "integrity": "sha512-+LxW+KLWxu3HW3M2w2ympwtqPrqYRzU8fqi6Fhd18fBALe15blJPI/I4+UHveMVG6lJqB4JNd4UG0S5cnVHwIg==", + "dev": true, + "peerDependencies": { + "babel-plugin-macros": "^3.1.0" + }, + "peerDependenciesMeta": { + "babel-plugin-macros": { + "optional": true + } + } + }, + "node_modules/deep-equal": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-2.2.2.tgz", + "integrity": "sha512-xjVyBf0w5vH0I42jdAZzOKVldmPgSulmiyPRywoyq7HXC9qdgo17kxJE+rdnif5Tz6+pIrpJI8dCpMNLIGkUiA==", + "dev": true, + "dependencies": { + "array-buffer-byte-length": "^1.0.0", + "call-bind": "^1.0.2", + "es-get-iterator": "^1.1.3", + "get-intrinsic": "^1.2.1", + "is-arguments": "^1.1.1", + "is-array-buffer": "^3.0.2", + "is-date-object": "^1.0.5", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.2", + "isarray": "^2.0.5", + "object-is": "^1.1.5", + "object-keys": "^1.1.1", + "object.assign": "^4.1.4", + "regexp.prototype.flags": "^1.5.0", + "side-channel": "^1.0.4", + "which-boxed-primitive": "^1.0.2", + "which-collection": "^1.0.1", + "which-typed-array": "^1.1.9" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/deep-equal/node_modules/isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "dev": true + }, + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true + }, + "node_modules/deepmerge": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", + "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/default-browser-id": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/default-browser-id/-/default-browser-id-3.0.0.tgz", + "integrity": "sha512-OZ1y3y0SqSICtE8DE4S8YOE9UZOJ8wO16fKWVP5J1Qz42kV9jcnMVFrEE/noXb/ss3Q4pZIH79kxofzyNNtUNA==", + "dev": true, + "dependencies": { + "bplist-parser": "^0.2.0", + "untildify": "^4.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/default-gateway": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-6.0.3.tgz", + "integrity": "sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg==", + "dev": true, + "dependencies": { + "execa": "^5.0.0" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/defaults": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz", + "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==", + "dev": true, + "dependencies": { + "clone": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/define-lazy-prop": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", + "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/define-properties": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.0.tgz", + "integrity": "sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==", + "dev": true, + "dependencies": { + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/defu": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/defu/-/defu-6.1.2.tgz", + "integrity": "sha512-+uO4+qr7msjNNWKYPHqN/3+Dx3NFkmIzayk2L1MyZQlvgZb/J1A0fo410dpKrN2SnqFjt8n4JL8fDJE0wIgjFQ==", + "dev": true + }, + "node_modules/del": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/del/-/del-6.1.1.tgz", + "integrity": "sha512-ua8BhapfP0JUJKC/zV9yHHDW/rDoDxP4Zhn3AkA6/xT6gY7jYXJiaeyBZznYVujhZZET+UgcbZiQ7sN3WqcImg==", + "dev": true, + "dependencies": { + "globby": "^11.0.1", + "graceful-fs": "^4.2.4", + "is-glob": "^4.0.1", + "is-path-cwd": "^2.2.0", + "is-path-inside": "^3.0.2", + "p-map": "^4.0.0", + "rimraf": "^3.0.2", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/del/node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/dequal": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", + "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/destroy": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", + "dev": true, + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/detect-indent": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-6.1.0.tgz", + "integrity": "sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/detect-newline": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", + "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/detect-node": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", + "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==", + "dev": true + }, + "node_modules/detect-node-es": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/detect-node-es/-/detect-node-es-1.1.0.tgz", + "integrity": "sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ==", + "dev": true + }, + "node_modules/detect-package-manager": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/detect-package-manager/-/detect-package-manager-2.0.1.tgz", + "integrity": "sha512-j/lJHyoLlWi6G1LDdLgvUtz60Zo5GEj+sVYtTVXnYLDPuzgC3llMxonXym9zIwhhUII8vjdw0LXxavpLqTbl1A==", + "dev": true, + "dependencies": { + "execa": "^5.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/detect-port": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/detect-port/-/detect-port-1.5.1.tgz", + "integrity": "sha512-aBzdj76lueB6uUst5iAs7+0H/oOjqI5D16XUWxlWMIMROhcM0rfsNVk93zTngq1dDNpoXRr++Sus7ETAExppAQ==", + "dev": true, + "dependencies": { + "address": "^1.0.1", + "debug": "4" + }, + "bin": { + "detect": "bin/detect-port.js", + "detect-port": "bin/detect-port.js" + } + }, + "node_modules/detect-port/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/detect-port/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/diff-sequences": { + "version": "29.4.3", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.4.3.tgz", + "integrity": "sha512-ofrBgwpPhCD85kMKtE9RYFFq6OC1A89oW2vvgWZNCwxrUpRUILopY7lsYyMDSjc8g6U6aiO0Qubg6r4Wgt5ZnA==", + "dev": true, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dev": true, + "dependencies": { + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/dns-equal": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz", + "integrity": "sha512-z+paD6YUQsk+AbGCEM4PrOXSss5gd66QfcVBFTKR/HpFL9jCqikS94HYwKww6fQyO7IxrIIyUu+g0Ka9tUS2Cg==", + "dev": true + }, + "node_modules/dns-packet": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-5.6.0.tgz", + "integrity": "sha512-rza3UH1LwdHh9qyPXp8lkwpjSNk/AMD3dPytUoRoqnypDUhY0xvbdmVhWOfxO68frEfV9BU8V12Ez7ZsHGZpCQ==", + "dev": true, + "dependencies": { + "@leichtgewicht/ip-codec": "^2.0.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/dom-accessibility-api": { + "version": "0.5.16", + "resolved": "https://registry.npmjs.org/dom-accessibility-api/-/dom-accessibility-api-0.5.16.tgz", + "integrity": "sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg==", + "dev": true + }, + "node_modules/dom-converter": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/dom-converter/-/dom-converter-0.2.0.tgz", + "integrity": "sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA==", + "dev": true, + "dependencies": { + "utila": "~0.4" + } + }, + "node_modules/dom-serializer": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", + "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", + "dev": true, + "dependencies": { + "domelementtype": "^2.0.1", + "domhandler": "^4.2.0", + "entities": "^2.0.0" + }, + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + } + }, + "node_modules/domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ] + }, + "node_modules/domexception": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/domexception/-/domexception-4.0.0.tgz", + "integrity": "sha512-A2is4PLG+eeSfoTMA95/s4pvAoSo2mKtiM5jlHkAVewmiO8ISFTFKZjH7UAM1Atli/OT/7JHOrJRJiMKUZKYBw==", + "dev": true, + "dependencies": { + "webidl-conversions": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/domexception/node_modules/webidl-conversions": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", + "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==", + "dev": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/domhandler": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", + "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", + "dev": true, + "dependencies": { + "domelementtype": "^2.2.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, + "node_modules/domutils": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", + "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", + "dev": true, + "dependencies": { + "dom-serializer": "^1.0.1", + "domelementtype": "^2.2.0", + "domhandler": "^4.2.0" + }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" + } + }, + "node_modules/dot-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz", + "integrity": "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==", + "dev": true, + "dependencies": { + "no-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "node_modules/dotenv": { + "version": "16.3.1", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.3.1.tgz", + "integrity": "sha512-IPzF4w4/Rd94bA9imS68tZBaYyBWSCE47V1RGuMrB94iyTOIEwRmVL2x/4An+6mETpLrKJ5hQkB8W4kFAadeIQ==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/motdotla/dotenv?sponsor=1" + } + }, + "node_modules/dotenv-expand": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-10.0.0.tgz", + "integrity": "sha512-GopVGCpVS1UKH75VKHGuQFqS1Gusej0z4FyQkPdwjil2gNIv+LNsqBlboOzpJFZKVT95GkCyWJbBSdFEFUWI2A==", + "dev": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/duplexify": { + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz", + "integrity": "sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==", + "dev": true, + "dependencies": { + "end-of-stream": "^1.0.0", + "inherits": "^2.0.1", + "readable-stream": "^2.0.0", + "stream-shift": "^1.0.0" + } + }, + "node_modules/duplexify/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dev": true, + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/duplexify/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "node_modules/duplexify/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "dev": true + }, + "node_modules/ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", + "dev": true + }, + "node_modules/ejs": { + "version": "3.1.9", + "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.9.tgz", + "integrity": "sha512-rC+QVNMJWv+MtPgkt0y+0rVEIdbtxVADApW9JXrUVlzHetgcyczP/E7DJmWJ4fJCZF2cPcBk0laWO9ZHMG3DmQ==", + "dev": true, + "dependencies": { + "jake": "^10.8.5" + }, + "bin": { + "ejs": "bin/cli.js" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/electron-to-chromium": { + "version": "1.4.449", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.449.tgz", + "integrity": "sha512-TxLRpRUj/107ATefeP8VIUWNOv90xJxZZbCW/eIbSZQiuiFANCx2b7u+GbVc9X4gU+xnbvypNMYVM/WArE1DNQ==" + }, + "node_modules/emittery": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.13.1.tgz", + "integrity": "sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sindresorhus/emittery?sponsor=1" + } + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "node_modules/emojis-list": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", + "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "dev": true, + "dependencies": { + "once": "^1.4.0" + } + }, + "node_modules/endent": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/endent/-/endent-2.1.0.tgz", + "integrity": "sha512-r8VyPX7XL8U01Xgnb1CjZ3XV+z90cXIJ9JPE/R9SEC9vpw2P6CfsRPJmp20DppC5N7ZAMCmjYkJIa744Iyg96w==", + "dev": true, + "dependencies": { + "dedent": "^0.7.0", + "fast-json-parse": "^1.0.3", + "objectorarray": "^1.0.5" + } + }, + "node_modules/endent/node_modules/dedent": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", + "integrity": "sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==", + "dev": true + }, + "node_modules/enhanced-resolve": { + "version": "5.15.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.15.0.tgz", + "integrity": "sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/entities": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", + "dev": true, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/envinfo": { + "version": "7.10.0", + "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.10.0.tgz", + "integrity": "sha512-ZtUjZO6l5mwTHvc1L9+1q5p/R3wTopcfqMW8r5t8SJSKqeVI/LtajORwRFEKpEFuekjD0VBjwu1HMxL4UalIRw==", + "dev": true, + "bin": { + "envinfo": "dist/cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/errno": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz", + "integrity": "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "prr": "~1.0.1" + }, + "bin": { + "errno": "cli.js" + } + }, + "node_modules/error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dev": true, + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, + "node_modules/error-stack-parser": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/error-stack-parser/-/error-stack-parser-2.1.4.tgz", + "integrity": "sha512-Sk5V6wVazPhq5MhpO+AUxJn5x7XSXGl1R93Vn7i+zS15KDVxQijejNCrz8340/2bgLBjR9GtEG8ZVKONDjcqGQ==", + "dev": true, + "dependencies": { + "stackframe": "^1.3.4" + } + }, + "node_modules/es-get-iterator": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/es-get-iterator/-/es-get-iterator-1.1.3.tgz", + "integrity": "sha512-sPZmqHBe6JIiTfN5q2pEi//TwxmAFHwj/XEuYjTuse78i8KxaqMTTzxPoFKuzRpDpTJ+0NAbpfenkmH2rePtuw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.3", + "has-symbols": "^1.0.3", + "is-arguments": "^1.1.1", + "is-map": "^2.0.2", + "is-set": "^2.0.2", + "is-string": "^1.0.7", + "isarray": "^2.0.5", + "stop-iteration-iterator": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es-get-iterator/node_modules/isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "dev": true + }, + "node_modules/es-module-lexer": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.3.0.tgz", + "integrity": "sha512-vZK7T0N2CBmBOixhmjdqx2gWVbFZ4DXZ/NyRMZVlJXPa7CyFS+/a4QQsDGDQy9ZfEzxFuNEsMLeQJnKP2p5/JA==", + "dev": true + }, + "node_modules/es6-object-assign": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/es6-object-assign/-/es6-object-assign-1.1.0.tgz", + "integrity": "sha512-MEl9uirslVwqQU369iHNWZXsI8yaZYGg/D65aOgZkeyFJwHYSxilf7rQzXKI7DdDuBPrBXbfk3sl9hJhmd5AUw==", + "dev": true + }, + "node_modules/esbuild": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.18.20.tgz", + "integrity": "sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==", + "dev": true, + "hasInstallScript": true, + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/android-arm": "0.18.20", + "@esbuild/android-arm64": "0.18.20", + "@esbuild/android-x64": "0.18.20", + "@esbuild/darwin-arm64": "0.18.20", + "@esbuild/darwin-x64": "0.18.20", + "@esbuild/freebsd-arm64": "0.18.20", + "@esbuild/freebsd-x64": "0.18.20", + "@esbuild/linux-arm": "0.18.20", + "@esbuild/linux-arm64": "0.18.20", + "@esbuild/linux-ia32": "0.18.20", + "@esbuild/linux-loong64": "0.18.20", + "@esbuild/linux-mips64el": "0.18.20", + "@esbuild/linux-ppc64": "0.18.20", + "@esbuild/linux-riscv64": "0.18.20", + "@esbuild/linux-s390x": "0.18.20", + "@esbuild/linux-x64": "0.18.20", + "@esbuild/netbsd-x64": "0.18.20", + "@esbuild/openbsd-x64": "0.18.20", + "@esbuild/sunos-x64": "0.18.20", + "@esbuild/win32-arm64": "0.18.20", + "@esbuild/win32-ia32": "0.18.20", + "@esbuild/win32-x64": "0.18.20" + } + }, + "node_modules/esbuild-plugin-alias": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/esbuild-plugin-alias/-/esbuild-plugin-alias-0.2.1.tgz", + "integrity": "sha512-jyfL/pwPqaFXyKnj8lP8iLk6Z0m099uXR45aSN8Av1XD4vhvQutxxPzgA2bTcAwQpa1zCXDcWOlhFgyP3GKqhQ==", + "dev": true + }, + "node_modules/esbuild-register": { + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/esbuild-register/-/esbuild-register-3.4.2.tgz", + "integrity": "sha512-kG/XyTDyz6+YDuyfB9ZoSIOOmgyFCH+xPRtsCa8W85HLRV5Csp+o3jWVbOSHgSLfyLc5DmP+KFDNwty4mEjC+Q==", + "dev": true, + "dependencies": { + "debug": "^4.3.4" + }, + "peerDependencies": { + "esbuild": ">=0.12 <1" + } + }, + "node_modules/esbuild-register/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/esbuild-register/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", + "dev": true + }, + "node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/escodegen": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.1.0.tgz", + "integrity": "sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==", + "dev": true, + "dependencies": { + "esprima": "^4.0.1", + "estraverse": "^5.2.0", + "esutils": "^2.0.2" + }, + "bin": { + "escodegen": "bin/escodegen.js", + "esgenerate": "bin/esgenerate.js" + }, + "engines": { + "node": ">=6.0" + }, + "optionalDependencies": { + "source-map": "~0.6.1" + } + }, + "node_modules/escodegen/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/eslint": { + "version": "8.44.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.44.0.tgz", + "integrity": "sha512-0wpHoUbDUHgNCyvFB5aXLiQVfK9B0at6gUvzy83k4kAsQ/u769TQDX6iKC+aO4upIHO9WSaA3QoXYQDHbNwf1A==", + "dev": true, + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.4.0", + "@eslint/eslintrc": "^2.1.0", + "@eslint/js": "8.44.0", + "@humanwhocodes/config-array": "^0.11.10", + "@humanwhocodes/module-importer": "^1.0.1", + "@nodelib/fs.walk": "^1.2.8", + "ajv": "^6.10.0", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "doctrine": "^3.0.0", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^7.2.0", + "eslint-visitor-keys": "^3.4.1", + "espree": "^9.6.0", + "esquery": "^1.4.2", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "globals": "^13.19.0", + "graphemer": "^1.4.0", + "ignore": "^5.2.0", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "is-path-inside": "^3.0.3", + "js-yaml": "^4.1.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.3", + "strip-ansi": "^6.0.1", + "strip-json-comments": "^3.1.0", + "text-table": "^0.2.0" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-config-prettier": { + "version": "8.8.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.8.0.tgz", + "integrity": "sha512-wLbQiFre3tdGgpDv67NQKnJuTlcUVYHas3k+DZCc2U2BadthoEY4B7hLPvAxaqdyOGCzuLfii2fqGph10va7oA==", + "dev": true, + "bin": { + "eslint-config-prettier": "bin/cli.js" + }, + "peerDependencies": { + "eslint": ">=7.0.0" + } + }, + "node_modules/eslint-plugin-prettier": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-4.2.1.tgz", + "integrity": "sha512-f/0rXLXUt0oFYs8ra4w49wYZBG5GKZpAYsJSm6rnYL5uVDjd+zowwMwVZHnAjf4edNrKpCDYfXDgmRE/Ak7QyQ==", + "dev": true, + "dependencies": { + "prettier-linter-helpers": "^1.0.0" + }, + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "eslint": ">=7.28.0", + "prettier": ">=2.0.0" + }, + "peerDependenciesMeta": { + "eslint-config-prettier": { + "optional": true + } + } + }, + "node_modules/eslint-plugin-storybook": { + "version": "0.6.13", + "resolved": "https://registry.npmjs.org/eslint-plugin-storybook/-/eslint-plugin-storybook-0.6.13.tgz", + "integrity": "sha512-smd+CS0WH1jBqUEJ3znGS7DU4ayBE9z6lkQAK2yrSUv1+rq8BT/tiI5C/rKE7rmiqiAfojtNYZRhzo5HrulccQ==", + "dev": true, + "dependencies": { + "@storybook/csf": "^0.0.1", + "@typescript-eslint/utils": "^5.45.0", + "requireindex": "^1.1.0", + "ts-dedent": "^2.2.0" + }, + "engines": { + "node": "12.x || 14.x || >= 16" + }, + "peerDependencies": { + "eslint": ">=6" + } + }, + "node_modules/eslint-plugin-storybook/node_modules/@storybook/csf": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/@storybook/csf/-/csf-0.0.1.tgz", + "integrity": "sha512-USTLkZze5gkel8MYCujSRBVIrUQ3YPBrLOx7GNk/0wttvVtlzWXAq9eLbQ4p/NicGxP+3T7KPEMVV//g+yubpw==", + "dev": true, + "dependencies": { + "lodash": "^4.17.15" + } + }, + "node_modules/eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dev": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.1.tgz", + "integrity": "sha512-pZnmmLwYzf+kWaM/Qgrvpen51upAktaaiI01nsJD/Yr3lMOdNtq0cxkrrg16w64VtisN6okbs7Q8AfGqj4c9fA==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/eslint/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/eslint/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/eslint/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/eslint/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/eslint/node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/eslint-scope": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.0.tgz", + "integrity": "sha512-DYj5deGlHBfMt15J7rdtyKNq/Nqlv5KfU4iodrQ019XESsRnwXH9KAE0y3cwtUHDo2ob7CypAnCqefh6vioWRw==", + "dev": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/eslint/node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/eslint/node_modules/globals": { + "version": "13.20.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz", + "integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==", + "dev": true, + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/eslint/node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/espree": { + "version": "9.6.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.0.tgz", + "integrity": "sha512-1FH/IiruXZ84tpUlm0aCUEwMl2Ho5ilqVh0VvQXw+byAz/4SAciyHLlfmL5WYqsvD38oymdUwBss0LtK8m4s/A==", + "dev": true, + "dependencies": { + "acorn": "^8.9.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.4.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true, + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/esquery": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", + "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", + "dev": true, + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esquery/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esrecurse/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estree-to-babel": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/estree-to-babel/-/estree-to-babel-3.2.1.tgz", + "integrity": "sha512-YNF+mZ/Wu2FU/gvmzuWtYc8rloubL7wfXCTgouFrnjGVXPA/EeYYA7pupXWrb3Iv1cTBeSSxxJIbK23l4MRNqg==", + "dev": true, + "dependencies": { + "@babel/traverse": "^7.1.6", + "@babel/types": "^7.2.0", + "c8": "^7.6.0" + }, + "engines": { + "node": ">=8.3.0" + } + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/eventemitter3": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", + "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", + "dev": true + }, + "node_modules/events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "dev": true, + "engines": { + "node": ">=0.8.x" + } + }, + "node_modules/execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/exit": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", + "integrity": "sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/expect": { + "version": "29.6.2", + "resolved": "https://registry.npmjs.org/expect/-/expect-29.6.2.tgz", + "integrity": "sha512-iAErsLxJ8C+S02QbLAwgSGSezLQK+XXRDt8IuFXFpwCNw2ECmzZSmjKcCaFVp5VRMk+WAvz6h6jokzEzBFZEuA==", + "dev": true, + "dependencies": { + "@jest/expect-utils": "^29.6.2", + "@types/node": "*", + "jest-get-type": "^29.4.3", + "jest-matcher-utils": "^29.6.2", + "jest-message-util": "^29.6.2", + "jest-util": "^29.6.2" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/express": { + "version": "4.18.2", + "resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz", + "integrity": "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==", + "dev": true, + "dependencies": { + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "1.20.1", + "content-disposition": "0.5.4", + "content-type": "~1.0.4", + "cookie": "0.5.0", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "2.0.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "1.2.0", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.7", + "qs": "6.11.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "0.18.0", + "serve-static": "1.15.0", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/express/node_modules/array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==", + "dev": true + }, + "node_modules/extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "dev": true + }, + "node_modules/external-editor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", + "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", + "dev": true, + "dependencies": { + "chardet": "^0.7.0", + "iconv-lite": "^0.4.24", + "tmp": "^0.0.33" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/extract-zip": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-1.7.0.tgz", + "integrity": "sha512-xoh5G1W/PB0/27lXgMQyIhP5DSY/LhoCsOyZgb+6iMmRtCwVBo55uKaMoEYrDCKQhWvqEip5ZPKAc6eFNyf/MA==", + "dev": true, + "dependencies": { + "concat-stream": "^1.6.2", + "debug": "^2.6.9", + "mkdirp": "^0.5.4", + "yauzl": "^2.10.0" + }, + "bin": { + "extract-zip": "cli.js" + } + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + }, + "node_modules/fast-diff": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.3.0.tgz", + "integrity": "sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==", + "dev": true + }, + "node_modules/fast-glob": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.1.tgz", + "integrity": "sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-json-parse": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/fast-json-parse/-/fast-json-parse-1.0.3.tgz", + "integrity": "sha512-FRWsaZRWEJ1ESVNbDWmsAlqDk96gPQezzLghafp5J4GUKjbCz3OkAHuZs5TuPEtkbVQERysLp9xv6c24fBm8Aw==", + "dev": true + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true + }, + "node_modules/fastest-levenshtein": { + "version": "1.0.16", + "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz", + "integrity": "sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==", + "dev": true, + "engines": { + "node": ">= 4.9.1" + } + }, + "node_modules/fastq": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", + "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", + "dev": true, + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/faye-websocket": { + "version": "0.11.4", + "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz", + "integrity": "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==", + "dev": true, + "dependencies": { + "websocket-driver": ">=0.5.1" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/fb-watchman": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz", + "integrity": "sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==", + "dev": true, + "dependencies": { + "bser": "2.1.1" + } + }, + "node_modules/fd-slicer": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", + "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==", + "dev": true, + "dependencies": { + "pend": "~1.2.0" + } + }, + "node_modules/fetch-retry": { + "version": "5.0.6", + "resolved": "https://registry.npmjs.org/fetch-retry/-/fetch-retry-5.0.6.tgz", + "integrity": "sha512-3yurQZ2hD9VISAhJJP9bpYFNQrHHBXE2JxxjY5aLEcDi46RmAzJE2OC9FAde0yis5ElW0jTTzs0zfg/Cca4XqQ==", + "dev": true + }, + "node_modules/figures": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", + "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", + "dev": true, + "dependencies": { + "escape-string-regexp": "^1.0.5" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "dev": true, + "dependencies": { + "flat-cache": "^3.0.4" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/file-system-cache": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/file-system-cache/-/file-system-cache-2.3.0.tgz", + "integrity": "sha512-l4DMNdsIPsVnKrgEXbJwDJsA5mB8rGwHYERMgqQx/xAUtChPJMre1bXBzDEqqVbWv9AIbFezXMxeEkZDSrXUOQ==", + "dev": true, + "dependencies": { + "fs-extra": "11.1.1", + "ramda": "0.29.0" + } + }, + "node_modules/filelist": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz", + "integrity": "sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==", + "dev": true, + "dependencies": { + "minimatch": "^5.0.1" + } + }, + "node_modules/filelist/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/filelist/node_modules/minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "devOptional": true, + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/finalhandler": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", + "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", + "dev": true, + "dependencies": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "statuses": "2.0.1", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/find-cache-dir": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", + "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", + "dev": true, + "dependencies": { + "commondir": "^1.0.1", + "make-dir": "^3.0.2", + "pkg-dir": "^4.1.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/avajs/find-cache-dir?sponsor=1" + } + }, + "node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/flat-cache": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", + "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", + "dev": true, + "dependencies": { + "flatted": "^3.1.0", + "rimraf": "^3.0.2" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/flatted": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz", + "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==", + "dev": true + }, + "node_modules/flow-parser": { + "version": "0.214.0", + "resolved": "https://registry.npmjs.org/flow-parser/-/flow-parser-0.214.0.tgz", + "integrity": "sha512-RW1Dh6BuT14DA7+gtNRKzgzvG3GTPdrceHCi4ddZ9VFGQ9HtO5L8wzxMGsor7XtInIrbWZZCSak0oxnBF7tApw==", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/follow-redirects": { + "version": "1.15.2", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz", + "integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/for-each": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", + "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", + "dev": true, + "dependencies": { + "is-callable": "^1.1.3" + } + }, + "node_modules/foreground-child": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-2.0.0.tgz", + "integrity": "sha512-dCIq9FpEcyQyXKCkyzmlPTFNgrCzPudOe+mhvJU5zAtlBnGVy2yKxtfsxK2tQBThwq225jcvBjpw1Gr40uzZCA==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.0", + "signal-exit": "^3.0.2" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/fork-ts-checker-webpack-plugin": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-8.0.0.tgz", + "integrity": "sha512-mX3qW3idpueT2klaQXBzrIM/pHw+T0B/V9KHEvNrqijTq9NFnMZU6oreVxDYcf33P8a5cW+67PjodNHthGnNVg==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.16.7", + "chalk": "^4.1.2", + "chokidar": "^3.5.3", + "cosmiconfig": "^7.0.1", + "deepmerge": "^4.2.2", + "fs-extra": "^10.0.0", + "memfs": "^3.4.1", + "minimatch": "^3.0.4", + "node-abort-controller": "^3.0.1", + "schema-utils": "^3.1.1", + "semver": "^7.3.5", + "tapable": "^2.2.1" + }, + "engines": { + "node": ">=12.13.0", + "yarn": ">=1.0.0" + }, + "peerDependencies": { + "typescript": ">3.6.0", + "webpack": "^5.11.0" + } + }, + "node_modules/fork-ts-checker-webpack-plugin/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/fork-ts-checker-webpack-plugin/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/fork-ts-checker-webpack-plugin/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/fork-ts-checker-webpack-plugin/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/fork-ts-checker-webpack-plugin/node_modules/fs-extra": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/fork-ts-checker-webpack-plugin/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/fork-ts-checker-webpack-plugin/node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/fork-ts-checker-webpack-plugin/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/fork-ts-checker-webpack-plugin/node_modules/universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "dev": true, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/fork-ts-checker-webpack-plugin/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/form-data": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "dev": true, + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fs-constants": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", + "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", + "dev": true + }, + "node_modules/fs-extra": { + "version": "11.1.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.1.1.tgz", + "integrity": "sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=14.14" + } + }, + "node_modules/fs-extra/node_modules/universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "dev": true, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/fs-minipass": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", + "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", + "dev": true, + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/fs-minipass/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/fs-minipass/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/fs-monkey": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.4.tgz", + "integrity": "sha512-INM/fWAxMICjttnD0DX1rBvinKskj5G1w+oy/pnm9u/tSlnBrzFonJMcalKJ30P8RRsPzKcCG7Q8l0jx5Fh9YQ==", + "dev": true + }, + "node_modules/fs-readdir-recursive": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fs-readdir-recursive/-/fs-readdir-recursive-1.1.0.tgz", + "integrity": "sha512-GNanXlVr2pf02+sPN40XN8HG+ePaNcvM0q5mZBd668Obwb0yD5GiUbZOFgwn8kGMY6I3mdyDJzieUy3PTYyTRA==" + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" + }, + "node_modules/fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + }, + "node_modules/functions-have-names": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true, + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-intrinsic": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz", + "integrity": "sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-nonce": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-nonce/-/get-nonce-1.0.1.tgz", + "integrity": "sha512-FJhYRoDaiatfEkUK8HKlicmu/3SGFD51q3itKDGoSTysQJBnfOcxU5GxnhE1E6soB76MbT0MBtnKJuXyAx+96Q==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/get-npm-tarball-url": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/get-npm-tarball-url/-/get-npm-tarball-url-2.0.3.tgz", + "integrity": "sha512-R/PW6RqyaBQNWYaSyfrh54/qtcnOp22FHCCiRhSSZj0FP3KQWCsxxt0DzIdVTbwTqe9CtQfvl/FPD4UIPt4pqw==", + "dev": true, + "engines": { + "node": ">=12.17" + } + }, + "node_modules/get-package-type": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", + "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", + "dev": true, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/get-port": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/get-port/-/get-port-5.1.1.tgz", + "integrity": "sha512-g/Q1aTSDOxFpchXC4i8ZWvxA1lnPqx/JHqcpIw0/LX9T8x/GBbi6YnlN5nhaKIFkT8oFsscUKgDJYxfwfS6QsQ==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/giget": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/giget/-/giget-1.1.2.tgz", + "integrity": "sha512-HsLoS07HiQ5oqvObOI+Qb2tyZH4Gj5nYGfF9qQcZNrPw+uEFhdXtgJr01aO2pWadGHucajYDLxxbtQkm97ON2A==", + "dev": true, + "dependencies": { + "colorette": "^2.0.19", + "defu": "^6.1.2", + "https-proxy-agent": "^5.0.1", + "mri": "^1.2.0", + "node-fetch-native": "^1.0.2", + "pathe": "^1.1.0", + "tar": "^6.1.13" + }, + "bin": { + "giget": "dist/cli.mjs" + } + }, + "node_modules/github-slugger": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/github-slugger/-/github-slugger-1.5.0.tgz", + "integrity": "sha512-wIh+gKBI9Nshz2o46B0B3f5k/W+WI9ZAv6y5Dn5WJ5SK1t0TnDimB4WE5rmTD05ZAIn8HALCZVmCsvj0w0v0lw==", + "dev": true + }, + "node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "devOptional": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/glob-to-regexp": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", + "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", + "dev": true + }, + "node_modules/globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "engines": { + "node": ">=4" + } + }, + "node_modules/globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "dev": true, + "dependencies": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/globby/node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true + }, + "node_modules/graphemer": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", + "dev": true + }, + "node_modules/graphql": { + "version": "16.7.1", + "resolved": "https://registry.npmjs.org/graphql/-/graphql-16.7.1.tgz", + "integrity": "sha512-DRYR9tf+UGU0KOsMcKAlXeFfX89UiiIZ0dRU3mR0yJfu6OjZqUcp68NnFLnqQU5RexygFoDy1EW+ccOYcPfmHg==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.16.0 || ^16.0.0 || >=17.0.0" + } + }, + "node_modules/gunzip-maybe": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/gunzip-maybe/-/gunzip-maybe-1.4.2.tgz", + "integrity": "sha512-4haO1M4mLO91PW57BMsDFf75UmwoRX0GkdD+Faw+Lr+r/OZrOCS0pIBwOL1xCKQqnQzbNFGgK2V2CpBUPeFNTw==", + "dev": true, + "dependencies": { + "browserify-zlib": "^0.1.4", + "is-deflate": "^1.0.0", + "is-gzip": "^1.0.0", + "peek-stream": "^1.1.0", + "pumpify": "^1.3.3", + "through2": "^2.0.3" + }, + "bin": { + "gunzip-maybe": "bin.js" + } + }, + "node_modules/handle-thing": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz", + "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==", + "dev": true + }, + "node_modules/handlebars": { + "version": "4.7.8", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.8.tgz", + "integrity": "sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ==", + "dev": true, + "dependencies": { + "minimist": "^1.2.5", + "neo-async": "^2.6.2", + "source-map": "^0.6.1", + "wordwrap": "^1.0.0" + }, + "bin": { + "handlebars": "bin/handlebars" + }, + "engines": { + "node": ">=0.4.7" + }, + "optionalDependencies": { + "uglify-js": "^3.1.4" + } + }, + "node_modules/has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dependencies": { + "function-bind": "^1.1.1" + }, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/has-bigints": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", + "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/has-property-descriptors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", + "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.1.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", + "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", + "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", + "dev": true, + "dependencies": { + "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/he": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "dev": true, + "bin": { + "he": "bin/he" + } + }, + "node_modules/headers-polyfill": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/headers-polyfill/-/headers-polyfill-3.1.2.tgz", + "integrity": "sha512-tWCK4biJ6hcLqTviLXVR9DTRfYGQMXEIUj3gwJ2rZ5wO/at3XtkI4g8mCvFdUF9l1KMBNCfmNAdnahm1cgavQA==", + "dev": true + }, + "node_modules/hoist-non-react-statics": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz", + "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==", + "dev": true, + "dependencies": { + "react-is": "^16.7.0" + } + }, + "node_modules/hosted-git-info": { + "version": "2.8.9", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", + "dev": true + }, + "node_modules/hpack.js": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", + "integrity": "sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ==", + "dev": true, + "dependencies": { + "inherits": "^2.0.1", + "obuf": "^1.0.0", + "readable-stream": "^2.0.1", + "wbuf": "^1.1.0" + } + }, + "node_modules/hpack.js/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dev": true, + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/hpack.js/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "node_modules/hpack.js/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/html-encoding-sniffer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-3.0.0.tgz", + "integrity": "sha512-oWv4T4yJ52iKrufjnyZPkrN0CH3QnrUqdB6In1g5Fe1mia8GmF36gnfNySxoZtxD5+NmYw1EElVXiBk93UeskA==", + "dev": true, + "dependencies": { + "whatwg-encoding": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/html-entities": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.4.0.tgz", + "integrity": "sha512-igBTJcNNNhvZFRtm8uA6xMY6xYleeDwn3PeBCkDz7tHttv4F2hsDI2aPgNERWzvRcNYHNT3ymRaQzllmXj4YsQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/mdevils" + }, + { + "type": "patreon", + "url": "https://patreon.com/mdevils" + } + ] + }, + "node_modules/html-escaper": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", + "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", + "dev": true + }, + "node_modules/html-minifier-terser": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz", + "integrity": "sha512-YXxSlJBZTP7RS3tWnQw74ooKa6L9b9i9QYXY21eUEvhZ3u9XLfv6OnFsQq6RxkhHygsaUMvYsZRV5rU/OVNZxw==", + "dev": true, + "dependencies": { + "camel-case": "^4.1.2", + "clean-css": "^5.2.2", + "commander": "^8.3.0", + "he": "^1.2.0", + "param-case": "^3.0.4", + "relateurl": "^0.2.7", + "terser": "^5.10.0" + }, + "bin": { + "html-minifier-terser": "cli.js" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/html-minifier-terser/node_modules/commander": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", + "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", + "dev": true, + "engines": { + "node": ">= 12" + } + }, + "node_modules/html-tags": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-3.3.1.tgz", + "integrity": "sha512-ztqyC3kLto0e9WbNp0aeP+M3kTt+nbaIveGmUxAtZa+8iFgKLUOD4YKM5j+f3QD89bra7UeumolZHKuOXnTmeQ==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/html-webpack-plugin": { + "version": "5.5.3", + "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-5.5.3.tgz", + "integrity": "sha512-6YrDKTuqaP/TquFH7h4srYWsZx+x6k6+FbsTm0ziCwGHDP78Unr1r9F/H4+sGmMbX08GQcJ+K64x55b+7VM/jg==", + "dev": true, + "dependencies": { + "@types/html-minifier-terser": "^6.0.0", + "html-minifier-terser": "^6.0.2", + "lodash": "^4.17.21", + "pretty-error": "^4.0.0", + "tapable": "^2.0.0" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/html-webpack-plugin" + }, + "peerDependencies": { + "webpack": "^5.20.0" + } + }, + "node_modules/htmlparser2": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz", + "integrity": "sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==", + "dev": true, + "funding": [ + "https://github.com/fb55/htmlparser2?sponsor=1", + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "dependencies": { + "domelementtype": "^2.0.1", + "domhandler": "^4.0.0", + "domutils": "^2.5.2", + "entities": "^2.0.0" + } + }, + "node_modules/http-deceiver": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", + "integrity": "sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw==", + "dev": true + }, + "node_modules/http-errors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "dev": true, + "dependencies": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/http-parser-js": { + "version": "0.5.8", + "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.8.tgz", + "integrity": "sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q==", + "dev": true + }, + "node_modules/http-proxy": { + "version": "1.18.1", + "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", + "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", + "dev": true, + "dependencies": { + "eventemitter3": "^4.0.0", + "follow-redirects": "^1.0.0", + "requires-port": "^1.0.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/http-proxy-agent": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", + "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", + "dev": true, + "dependencies": { + "@tootallnate/once": "2", + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/http-proxy-agent/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/http-proxy-agent/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/http-proxy-middleware": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.6.tgz", + "integrity": "sha512-ya/UeJ6HVBYxrgYotAZo1KvPWlgB48kUJLDePFeneHsVujFaW5WNj2NgWCAE//B1Dl02BIfYlpNgBy8Kf8Rjmw==", + "dev": true, + "dependencies": { + "@types/http-proxy": "^1.17.8", + "http-proxy": "^1.18.1", + "is-glob": "^4.0.1", + "is-plain-obj": "^3.0.0", + "micromatch": "^4.0.2" + }, + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "@types/express": "^4.17.13" + }, + "peerDependenciesMeta": { + "@types/express": { + "optional": true + } + } + }, + "node_modules/https-proxy-agent": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", + "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "dev": true, + "dependencies": { + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/https-proxy-agent/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/https-proxy-agent/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "dev": true, + "engines": { + "node": ">=10.17.0" + } + }, + "node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dev": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/icss-utils": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", + "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", + "dev": true, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/ignore": { + "version": "5.2.4", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", + "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/image-size": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/image-size/-/image-size-0.5.5.tgz", + "integrity": "sha512-6TDAlDPZxUFCv+fuOkIoXT/V/f3Qbq8e37p+YOiYrUv3v9cc3/6x78VdfPgFVaB9dZYeLUfKgHRebpkm/oP2VQ==", + "dev": true, + "optional": true, + "peer": true, + "bin": { + "image-size": "bin/image-size.js" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dev": true, + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/import-fresh/node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/import-local": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz", + "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==", + "dev": true, + "dependencies": { + "pkg-dir": "^4.2.0", + "resolve-cwd": "^3.0.0" + }, + "bin": { + "import-local-fixture": "fixtures/cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true, + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "node_modules/inquirer": { + "version": "8.2.5", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-8.2.5.tgz", + "integrity": "sha512-QAgPDQMEgrDssk1XiwwHoOGYF9BAbUcc1+j+FhEvaOt8/cKRqyLn0U5qA6F74fGhTMGxf92pOvPBeh29jQJDTQ==", + "dev": true, + "dependencies": { + "ansi-escapes": "^4.2.1", + "chalk": "^4.1.1", + "cli-cursor": "^3.1.0", + "cli-width": "^3.0.0", + "external-editor": "^3.0.3", + "figures": "^3.0.0", + "lodash": "^4.17.21", + "mute-stream": "0.0.8", + "ora": "^5.4.1", + "run-async": "^2.4.0", + "rxjs": "^7.5.5", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0", + "through": "^2.3.6", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/inquirer/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/inquirer/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/inquirer/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/inquirer/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/inquirer/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/internal-slot": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.5.tgz", + "integrity": "sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.2.0", + "has": "^1.0.3", + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/interpret": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-3.1.1.tgz", + "integrity": "sha512-6xwYfHbajpoF0xLW+iwLkhwgvLoZDfjYfoFNu8ftMoXINzwuymNLd9u/KmwtdT2GbR+/Cz66otEGEVVUHX9QLQ==", + "dev": true, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/invariant": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", + "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", + "dev": true, + "dependencies": { + "loose-envify": "^1.0.0" + } + }, + "node_modules/ip": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ip/-/ip-2.0.0.tgz", + "integrity": "sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==", + "dev": true + }, + "node_modules/ipaddr.js": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.1.0.tgz", + "integrity": "sha512-LlbxQ7xKzfBusov6UMi4MFpEg0m+mAm9xyNGEduwXMEDuf4WfzB/RZwMVYEd7IKGvh4IUkEXYxtAVu9T3OelJQ==", + "dev": true, + "engines": { + "node": ">= 10" + } + }, + "node_modules/is-absolute-url": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-3.0.3.tgz", + "integrity": "sha512-opmNIX7uFnS96NtPmhWQgQx6/NYFgsUXYMllcfzwWKUMwfo8kku1TvE6hkNcH+Q1ts5cMVrsY7j0bxXQDciu9Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-arguments": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", + "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-array-buffer": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.2.tgz", + "integrity": "sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.0", + "is-typed-array": "^1.1.10" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", + "dev": true + }, + "node_modules/is-bigint": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", + "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", + "dev": true, + "dependencies": { + "has-bigints": "^1.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "devOptional": true, + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-boolean-object": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", + "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-callable": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-core-module": { + "version": "2.12.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.12.1.tgz", + "integrity": "sha512-Q4ZuBAe2FUsKtyQJoQHlvP8OvBERxO3jEmy1I7hcRXcJBGGHFh/aJBswbXuS9sgrDH2QUO8ilkwNPHvHMd8clg==", + "dependencies": { + "has": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-date-object": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", + "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", + "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-deflate": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-deflate/-/is-deflate-1.0.0.tgz", + "integrity": "sha512-YDoFpuZWu1VRXlsnlYMzKyVRITXj7Ej/V9gXQ2/pAe7X1J7M/RNOqaIYi6qUn+B7nGyB9pDXrv02dsB58d2ZAQ==", + "dev": true + }, + "node_modules/is-docker": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", + "dev": true, + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "devOptional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-generator-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", + "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/is-generator-function": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", + "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", + "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "devOptional": true, + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-gzip": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-gzip/-/is-gzip-1.0.0.tgz", + "integrity": "sha512-rcfALRIb1YewtnksfRIHGcIY93QnK8BIQ/2c9yDYcG/Y6+vRoJuTWBmmSEbyLLYtXm7q35pHOHbZFQBaLrhlWQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-interactive": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", + "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-map": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.2.tgz", + "integrity": "sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-nan": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/is-nan/-/is-nan-1.3.2.tgz", + "integrity": "sha512-E+zBKpQ2t6MEo1VsonYmluk9NxGrbzpeeLC2xIViuO2EjU2xsXsBPwTr3Ykv9l08UYEVEdWeRZNouaZqF6RN0w==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-node-process": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/is-node-process/-/is-node-process-1.2.0.tgz", + "integrity": "sha512-Vg4o6/fqPxIjtxgUH5QLJhwZ7gW5diGCVlXpuUfELC62CuxM1iHcRe51f2W1FDy04Ai4KJkagKjx3XaqyfRKXw==", + "dev": true + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "devOptional": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-number-object": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", + "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", + "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-path-cwd": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz", + "integrity": "sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-plain-obj": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-3.0.0.tgz", + "integrity": "sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "dev": true, + "dependencies": { + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-potential-custom-element-name": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", + "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==", + "dev": true + }, + "node_modules/is-regex": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", + "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-set": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.2.tgz", + "integrity": "sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-shared-array-buffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", + "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-string": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", + "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", + "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-symbol": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", + "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", + "dev": true, + "dependencies": { + "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-typed-array": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.11.tgz", + "integrity": "sha512-l2SCJk9RflSWHQjOJJgNsV5FnE1pq/RpHnYW6ckSjTCYypv07SMbiRSCmLQD63WOv2eXaEwNsn+7kcn3csvYSw==", + "dev": true, + "dependencies": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-unicode-supported": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-weakmap": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.1.tgz", + "integrity": "sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakset": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.2.tgz", + "integrity": "sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-what": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/is-what/-/is-what-3.14.1.tgz", + "integrity": "sha512-sNxgpk9793nzSs7bA6JQJGeIuRBQhAaNGG77kzYQgMkrID+lS6SlK07K5LaptscDlSaIgH+GPFzf+d75FVxozA==", + "dev": true, + "peer": true + }, + "node_modules/is-wsl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "dev": true, + "dependencies": { + "is-docker": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true + }, + "node_modules/isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/istanbul-lib-coverage": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", + "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-instrument": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz", + "integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==", + "dev": true, + "dependencies": { + "@babel/core": "^7.12.3", + "@babel/parser": "^7.14.7", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-coverage": "^3.2.0", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-report": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", + "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==", + "dev": true, + "dependencies": { + "istanbul-lib-coverage": "^3.0.0", + "make-dir": "^4.0.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-lib-report/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-lib-report/node_modules/make-dir": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", + "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", + "dev": true, + "dependencies": { + "semver": "^7.5.3" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/istanbul-lib-report/node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-lib-report/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-report/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/istanbul-lib-source-maps": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", + "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", + "dev": true, + "dependencies": { + "debug": "^4.1.1", + "istanbul-lib-coverage": "^3.0.0", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-lib-source-maps/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/istanbul-lib-source-maps/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/istanbul-reports": { + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.6.tgz", + "integrity": "sha512-TLgnMkKg3iTDsQ9PbPTdpfAK2DzjF9mqUG7RMgcQl8oFjad8ob4laGxv5XV5U9MAfx8D6tSJiUyuAwzLicaxlg==", + "dev": true, + "dependencies": { + "html-escaper": "^2.0.0", + "istanbul-lib-report": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jackspeak": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.2.2.tgz", + "integrity": "sha512-mgNtVv4vUuaKA97yxUHoA3+FkuhtxkjdXEWOyB/N76fjy0FjezEt34oy3epBtvCvS+7DyKwqCFWx/oJLV5+kCg==", + "dev": true, + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" + } + }, + "node_modules/jake": { + "version": "10.8.7", + "resolved": "https://registry.npmjs.org/jake/-/jake-10.8.7.tgz", + "integrity": "sha512-ZDi3aP+fG/LchyBzUM804VjddnwfSfsdeYkwt8NcbKRvo4rFkjhs456iLFn3k2ZUWvNe4i48WACDbza8fhq2+w==", + "dev": true, + "dependencies": { + "async": "^3.2.3", + "chalk": "^4.0.2", + "filelist": "^1.0.4", + "minimatch": "^3.1.2" + }, + "bin": { + "jake": "bin/cli.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/jake/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jake/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jake/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jake/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/jake/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest": { + "version": "29.6.2", + "resolved": "https://registry.npmjs.org/jest/-/jest-29.6.2.tgz", + "integrity": "sha512-8eQg2mqFbaP7CwfsTpCxQ+sHzw1WuNWL5UUvjnWP4hx2riGz9fPSzYOaU5q8/GqWn1TfgZIVTqYJygbGbWAANg==", + "dev": true, + "dependencies": { + "@jest/core": "^29.6.2", + "@jest/types": "^29.6.1", + "import-local": "^3.0.2", + "jest-cli": "^29.6.2" + }, + "bin": { + "jest": "bin/jest.js" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/jest-changed-files": { + "version": "29.5.0", + "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-29.5.0.tgz", + "integrity": "sha512-IFG34IUMUaNBIxjQXF/iu7g6EcdMrGRRxaUSw92I/2g2YC6vCdTltl4nHvt7Ci5nSJwXIkCu8Ka1DKF+X7Z1Ag==", + "dev": true, + "dependencies": { + "execa": "^5.0.0", + "p-limit": "^3.1.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-changed-files/node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/jest-circus": { + "version": "29.6.2", + "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-29.6.2.tgz", + "integrity": "sha512-G9mN+KOYIUe2sB9kpJkO9Bk18J4dTDArNFPwoZ7WKHKel55eKIS/u2bLthxgojwlf9NLCVQfgzM/WsOVvoC6Fw==", + "dev": true, + "dependencies": { + "@jest/environment": "^29.6.2", + "@jest/expect": "^29.6.2", + "@jest/test-result": "^29.6.2", + "@jest/types": "^29.6.1", + "@types/node": "*", + "chalk": "^4.0.0", + "co": "^4.6.0", + "dedent": "^1.0.0", + "is-generator-fn": "^2.0.0", + "jest-each": "^29.6.2", + "jest-matcher-utils": "^29.6.2", + "jest-message-util": "^29.6.2", + "jest-runtime": "^29.6.2", + "jest-snapshot": "^29.6.2", + "jest-util": "^29.6.2", + "p-limit": "^3.1.0", + "pretty-format": "^29.6.2", + "pure-rand": "^6.0.0", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-circus/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-circus/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-circus/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-circus/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/jest-circus/node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/jest-circus/node_modules/pretty-format": { + "version": "29.6.2", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.6.2.tgz", + "integrity": "sha512-1q0oC8eRveTg5nnBEWMXAU2qpv65Gnuf2eCQzSjxpWFkPaPARwqZZDGuNE0zPAZfTCHzIk3A8dIjwlQKKLphyg==", + "dev": true, + "dependencies": { + "@jest/schemas": "^29.6.0", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-circus/node_modules/pretty-format/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-circus/node_modules/react-is": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", + "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", + "dev": true + }, + "node_modules/jest-circus/node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-circus/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-cli": { + "version": "29.6.2", + "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-29.6.2.tgz", + "integrity": "sha512-TT6O247v6dCEX2UGHGyflMpxhnrL0DNqP2fRTKYm3nJJpCTfXX3GCMQPGFjXDoj0i5/Blp3jriKXFgdfmbYB6Q==", + "dev": true, + "dependencies": { + "@jest/core": "^29.6.2", + "@jest/test-result": "^29.6.2", + "@jest/types": "^29.6.1", + "chalk": "^4.0.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.9", + "import-local": "^3.0.2", + "jest-config": "^29.6.2", + "jest-util": "^29.6.2", + "jest-validate": "^29.6.2", + "prompts": "^2.0.1", + "yargs": "^17.3.1" + }, + "bin": { + "jest": "bin/jest.js" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/jest-cli/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-cli/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-cli/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-cli/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/jest-cli/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-config": { + "version": "29.6.2", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-29.6.2.tgz", + "integrity": "sha512-VxwFOC8gkiJbuodG9CPtMRjBUNZEHxwfQXmIudSTzFWxaci3Qub1ddTRbFNQlD/zUeaifLndh/eDccFX4wCMQw==", + "dev": true, + "dependencies": { + "@babel/core": "^7.11.6", + "@jest/test-sequencer": "^29.6.2", + "@jest/types": "^29.6.1", + "babel-jest": "^29.6.2", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "deepmerge": "^4.2.2", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "jest-circus": "^29.6.2", + "jest-environment-node": "^29.6.2", + "jest-get-type": "^29.4.3", + "jest-regex-util": "^29.4.3", + "jest-resolve": "^29.6.2", + "jest-runner": "^29.6.2", + "jest-util": "^29.6.2", + "jest-validate": "^29.6.2", + "micromatch": "^4.0.4", + "parse-json": "^5.2.0", + "pretty-format": "^29.6.2", + "slash": "^3.0.0", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "@types/node": "*", + "ts-node": ">=9.0.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "ts-node": { + "optional": true + } + } + }, + "node_modules/jest-config/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-config/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-config/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-config/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/jest-config/node_modules/pretty-format": { + "version": "29.6.2", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.6.2.tgz", + "integrity": "sha512-1q0oC8eRveTg5nnBEWMXAU2qpv65Gnuf2eCQzSjxpWFkPaPARwqZZDGuNE0zPAZfTCHzIk3A8dIjwlQKKLphyg==", + "dev": true, + "dependencies": { + "@jest/schemas": "^29.6.0", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-config/node_modules/pretty-format/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-config/node_modules/react-is": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", + "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", + "dev": true + }, + "node_modules/jest-config/node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-config/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-diff": { + "version": "29.6.2", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.6.2.tgz", + "integrity": "sha512-t+ST7CB9GX5F2xKwhwCf0TAR17uNDiaPTZnVymP9lw0lssa9vG+AFyDZoeIHStU3WowFFwT+ky+er0WVl2yGhA==", + "dev": true, + "dependencies": { + "chalk": "^4.0.0", + "diff-sequences": "^29.4.3", + "jest-get-type": "^29.4.3", + "pretty-format": "^29.6.2" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-diff/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-diff/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-diff/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-diff/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/jest-diff/node_modules/pretty-format": { + "version": "29.6.2", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.6.2.tgz", + "integrity": "sha512-1q0oC8eRveTg5nnBEWMXAU2qpv65Gnuf2eCQzSjxpWFkPaPARwqZZDGuNE0zPAZfTCHzIk3A8dIjwlQKKLphyg==", + "dev": true, + "dependencies": { + "@jest/schemas": "^29.6.0", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-diff/node_modules/pretty-format/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-diff/node_modules/react-is": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", + "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", + "dev": true + }, + "node_modules/jest-diff/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-docblock": { + "version": "29.4.3", + "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-29.4.3.tgz", + "integrity": "sha512-fzdTftThczeSD9nZ3fzA/4KkHtnmllawWrXO69vtI+L9WjEIuXWs4AmyME7lN5hU7dB0sHhuPfcKofRsUb/2Fg==", + "dev": true, + "dependencies": { + "detect-newline": "^3.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-each": { + "version": "29.6.2", + "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-29.6.2.tgz", + "integrity": "sha512-MsrsqA0Ia99cIpABBc3izS1ZYoYfhIy0NNWqPSE0YXbQjwchyt6B1HD2khzyPe1WiJA7hbxXy77ZoUQxn8UlSw==", + "dev": true, + "dependencies": { + "@jest/types": "^29.6.1", + "chalk": "^4.0.0", + "jest-get-type": "^29.4.3", + "jest-util": "^29.6.2", + "pretty-format": "^29.6.2" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-each/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-each/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-each/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-each/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/jest-each/node_modules/pretty-format": { + "version": "29.6.2", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.6.2.tgz", + "integrity": "sha512-1q0oC8eRveTg5nnBEWMXAU2qpv65Gnuf2eCQzSjxpWFkPaPARwqZZDGuNE0zPAZfTCHzIk3A8dIjwlQKKLphyg==", + "dev": true, + "dependencies": { + "@jest/schemas": "^29.6.0", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-each/node_modules/pretty-format/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-each/node_modules/react-is": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", + "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", + "dev": true + }, + "node_modules/jest-each/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-environment-jsdom": { + "version": "29.6.2", + "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-29.6.2.tgz", + "integrity": "sha512-7oa/+266AAEgkzae8i1awNEfTfjwawWKLpiw2XesZmaoVVj9u9t8JOYx18cG29rbPNtkUlZ8V4b5Jb36y/VxoQ==", + "dev": true, + "dependencies": { + "@jest/environment": "^29.6.2", + "@jest/fake-timers": "^29.6.2", + "@jest/types": "^29.6.1", + "@types/jsdom": "^20.0.0", + "@types/node": "*", + "jest-mock": "^29.6.2", + "jest-util": "^29.6.2", + "jsdom": "^20.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "canvas": "^2.5.0" + }, + "peerDependenciesMeta": { + "canvas": { + "optional": true + } + } + }, + "node_modules/jest-environment-node": { + "version": "29.6.2", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.6.2.tgz", + "integrity": "sha512-YGdFeZ3T9a+/612c5mTQIllvWkddPbYcN2v95ZH24oWMbGA4GGS2XdIF92QMhUhvrjjuQWYgUGW2zawOyH63MQ==", + "dev": true, + "dependencies": { + "@jest/environment": "^29.6.2", + "@jest/fake-timers": "^29.6.2", + "@jest/types": "^29.6.1", + "@types/node": "*", + "jest-mock": "^29.6.2", + "jest-util": "^29.6.2" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-get-type": { + "version": "29.4.3", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.4.3.tgz", + "integrity": "sha512-J5Xez4nRRMjk8emnTpWrlkyb9pfRQQanDrvWHhsR1+VUfbwxi30eVcZFlcdGInRibU4G5LwHXpI7IRHU0CY+gg==", + "dev": true, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-haste-map": { + "version": "29.6.2", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.6.2.tgz", + "integrity": "sha512-+51XleTDAAysvU8rT6AnS1ZJ+WHVNqhj1k6nTvN2PYP+HjU3kqlaKQ1Lnw3NYW3bm2r8vq82X0Z1nDDHZMzHVA==", + "dev": true, + "dependencies": { + "@jest/types": "^29.6.1", + "@types/graceful-fs": "^4.1.3", + "@types/node": "*", + "anymatch": "^3.0.3", + "fb-watchman": "^2.0.0", + "graceful-fs": "^4.2.9", + "jest-regex-util": "^29.4.3", + "jest-util": "^29.6.2", + "jest-worker": "^29.6.2", + "micromatch": "^4.0.4", + "walker": "^1.0.8" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "optionalDependencies": { + "fsevents": "^2.3.2" + } + }, + "node_modules/jest-haste-map/node_modules/jest-worker": { + "version": "29.6.2", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.6.2.tgz", + "integrity": "sha512-l3ccBOabTdkng8I/ORCkADz4eSMKejTYv1vB/Z83UiubqhC1oQ5Li6dWCyqOIvSifGjUBxuvxvlm6KGK2DtuAQ==", + "dev": true, + "dependencies": { + "@types/node": "*", + "jest-util": "^29.6.2", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-leak-detector": { + "version": "29.6.2", + "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-29.6.2.tgz", + "integrity": "sha512-aNqYhfp5uYEO3tdWMb2bfWv6f0b4I0LOxVRpnRLAeque2uqOVVMLh6khnTcE2qJ5wAKop0HcreM1btoysD6bPQ==", + "dev": true, + "dependencies": { + "jest-get-type": "^29.4.3", + "pretty-format": "^29.6.2" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-leak-detector/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-leak-detector/node_modules/pretty-format": { + "version": "29.6.2", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.6.2.tgz", + "integrity": "sha512-1q0oC8eRveTg5nnBEWMXAU2qpv65Gnuf2eCQzSjxpWFkPaPARwqZZDGuNE0zPAZfTCHzIk3A8dIjwlQKKLphyg==", + "dev": true, + "dependencies": { + "@jest/schemas": "^29.6.0", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-leak-detector/node_modules/react-is": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", + "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", + "dev": true + }, + "node_modules/jest-matcher-utils": { + "version": "29.6.2", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.6.2.tgz", + "integrity": "sha512-4LiAk3hSSobtomeIAzFTe+N8kL6z0JtF3n6I4fg29iIW7tt99R7ZcIFW34QkX+DuVrf+CUe6wuVOpm7ZKFJzZQ==", + "dev": true, + "dependencies": { + "chalk": "^4.0.0", + "jest-diff": "^29.6.2", + "jest-get-type": "^29.4.3", + "pretty-format": "^29.6.2" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-matcher-utils/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-matcher-utils/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-matcher-utils/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-matcher-utils/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/jest-matcher-utils/node_modules/pretty-format": { + "version": "29.6.2", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.6.2.tgz", + "integrity": "sha512-1q0oC8eRveTg5nnBEWMXAU2qpv65Gnuf2eCQzSjxpWFkPaPARwqZZDGuNE0zPAZfTCHzIk3A8dIjwlQKKLphyg==", + "dev": true, + "dependencies": { + "@jest/schemas": "^29.6.0", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-matcher-utils/node_modules/pretty-format/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-matcher-utils/node_modules/react-is": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", + "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", + "dev": true + }, + "node_modules/jest-matcher-utils/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-message-util": { + "version": "29.6.2", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.6.2.tgz", + "integrity": "sha512-vnIGYEjoPSuRqV8W9t+Wow95SDp6KPX2Uf7EoeG9G99J2OVh7OSwpS4B6J0NfpEIpfkBNHlBZpA2rblEuEFhZQ==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.12.13", + "@jest/types": "^29.6.1", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.4", + "pretty-format": "^29.6.2", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-message-util/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-message-util/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-message-util/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-message-util/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/jest-message-util/node_modules/pretty-format": { + "version": "29.6.2", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.6.2.tgz", + "integrity": "sha512-1q0oC8eRveTg5nnBEWMXAU2qpv65Gnuf2eCQzSjxpWFkPaPARwqZZDGuNE0zPAZfTCHzIk3A8dIjwlQKKLphyg==", + "dev": true, + "dependencies": { + "@jest/schemas": "^29.6.0", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-message-util/node_modules/pretty-format/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-message-util/node_modules/react-is": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", + "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", + "dev": true + }, + "node_modules/jest-message-util/node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-message-util/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-mock": { + "version": "29.6.2", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.6.2.tgz", + "integrity": "sha512-hoSv3lb3byzdKfwqCuT6uTscan471GUECqgNYykg6ob0yiAw3zYc7OrPnI9Qv8Wwoa4lC7AZ9hyS4AiIx5U2zg==", + "dev": true, + "dependencies": { + "@jest/types": "^29.6.1", + "@types/node": "*", + "jest-util": "^29.6.2" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-pnp-resolver": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz", + "integrity": "sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==", + "dev": true, + "engines": { + "node": ">=6" + }, + "peerDependencies": { + "jest-resolve": "*" + }, + "peerDependenciesMeta": { + "jest-resolve": { + "optional": true + } + } + }, + "node_modules/jest-regex-util": { + "version": "29.4.3", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.4.3.tgz", + "integrity": "sha512-O4FglZaMmWXbGHSQInfXewIsd1LMn9p3ZXB/6r4FOkyhX2/iP/soMG98jGvk/A3HAN78+5VWcBGO0BJAPRh4kg==", + "dev": true, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-resolve": { + "version": "29.6.2", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.6.2.tgz", + "integrity": "sha512-G/iQUvZWI5e3SMFssc4ug4dH0aZiZpsDq9o1PtXTV1210Ztyb2+w+ZgQkB3iOiC5SmAEzJBOHWz6Hvrd+QnNPw==", + "dev": true, + "dependencies": { + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.6.2", + "jest-pnp-resolver": "^1.2.2", + "jest-util": "^29.6.2", + "jest-validate": "^29.6.2", + "resolve": "^1.20.0", + "resolve.exports": "^2.0.0", + "slash": "^3.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-resolve-dependencies": { + "version": "29.6.2", + "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-29.6.2.tgz", + "integrity": "sha512-LGqjDWxg2fuQQm7ypDxduLu/m4+4Lb4gczc13v51VMZbVP5tSBILqVx8qfWcsdP8f0G7aIqByIALDB0R93yL+w==", + "dev": true, + "dependencies": { + "jest-regex-util": "^29.4.3", + "jest-snapshot": "^29.6.2" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-resolve/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-resolve/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-resolve/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-resolve/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/jest-resolve/node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-resolve/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-runner": { + "version": "29.6.2", + "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-29.6.2.tgz", + "integrity": "sha512-wXOT/a0EspYgfMiYHxwGLPCZfC0c38MivAlb2lMEAlwHINKemrttu1uSbcGbfDV31sFaPWnWJPmb2qXM8pqZ4w==", + "dev": true, + "dependencies": { + "@jest/console": "^29.6.2", + "@jest/environment": "^29.6.2", + "@jest/test-result": "^29.6.2", + "@jest/transform": "^29.6.2", + "@jest/types": "^29.6.1", + "@types/node": "*", + "chalk": "^4.0.0", + "emittery": "^0.13.1", + "graceful-fs": "^4.2.9", + "jest-docblock": "^29.4.3", + "jest-environment-node": "^29.6.2", + "jest-haste-map": "^29.6.2", + "jest-leak-detector": "^29.6.2", + "jest-message-util": "^29.6.2", + "jest-resolve": "^29.6.2", + "jest-runtime": "^29.6.2", + "jest-util": "^29.6.2", + "jest-watcher": "^29.6.2", + "jest-worker": "^29.6.2", + "p-limit": "^3.1.0", + "source-map-support": "0.5.13" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-runner/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-runner/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-runner/node_modules/chalk/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-runner/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-runner/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/jest-runner/node_modules/jest-worker": { + "version": "29.6.2", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.6.2.tgz", + "integrity": "sha512-l3ccBOabTdkng8I/ORCkADz4eSMKejTYv1vB/Z83UiubqhC1oQ5Li6dWCyqOIvSifGjUBxuvxvlm6KGK2DtuAQ==", + "dev": true, + "dependencies": { + "@types/node": "*", + "jest-util": "^29.6.2", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-runner/node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/jest-runner/node_modules/source-map-support": { + "version": "0.5.13", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz", + "integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==", + "dev": true, + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/jest-runtime": { + "version": "29.6.2", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-29.6.2.tgz", + "integrity": "sha512-2X9dqK768KufGJyIeLmIzToDmsN0m7Iek8QNxRSI/2+iPFYHF0jTwlO3ftn7gdKd98G/VQw9XJCk77rbTGZnJg==", + "dev": true, + "dependencies": { + "@jest/environment": "^29.6.2", + "@jest/fake-timers": "^29.6.2", + "@jest/globals": "^29.6.2", + "@jest/source-map": "^29.6.0", + "@jest/test-result": "^29.6.2", + "@jest/transform": "^29.6.2", + "@jest/types": "^29.6.1", + "@types/node": "*", + "chalk": "^4.0.0", + "cjs-module-lexer": "^1.0.0", + "collect-v8-coverage": "^1.0.0", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.6.2", + "jest-message-util": "^29.6.2", + "jest-mock": "^29.6.2", + "jest-regex-util": "^29.4.3", + "jest-resolve": "^29.6.2", + "jest-snapshot": "^29.6.2", + "jest-util": "^29.6.2", + "slash": "^3.0.0", + "strip-bom": "^4.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-runtime/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-runtime/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-runtime/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-runtime/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/jest-runtime/node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-runtime/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-snapshot": { + "version": "29.6.2", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.6.2.tgz", + "integrity": "sha512-1OdjqvqmRdGNvWXr/YZHuyhh5DeaLp1p/F8Tht/MrMw4Kr1Uu/j4lRG+iKl1DAqUJDWxtQBMk41Lnf/JETYBRA==", + "dev": true, + "dependencies": { + "@babel/core": "^7.11.6", + "@babel/generator": "^7.7.2", + "@babel/plugin-syntax-jsx": "^7.7.2", + "@babel/plugin-syntax-typescript": "^7.7.2", + "@babel/types": "^7.3.3", + "@jest/expect-utils": "^29.6.2", + "@jest/transform": "^29.6.2", + "@jest/types": "^29.6.1", + "babel-preset-current-node-syntax": "^1.0.0", + "chalk": "^4.0.0", + "expect": "^29.6.2", + "graceful-fs": "^4.2.9", + "jest-diff": "^29.6.2", + "jest-get-type": "^29.4.3", + "jest-matcher-utils": "^29.6.2", + "jest-message-util": "^29.6.2", + "jest-util": "^29.6.2", + "natural-compare": "^1.4.0", + "pretty-format": "^29.6.2", + "semver": "^7.5.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-snapshot/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-snapshot/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-snapshot/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-snapshot/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/jest-snapshot/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/jest-snapshot/node_modules/pretty-format": { + "version": "29.6.2", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.6.2.tgz", + "integrity": "sha512-1q0oC8eRveTg5nnBEWMXAU2qpv65Gnuf2eCQzSjxpWFkPaPARwqZZDGuNE0zPAZfTCHzIk3A8dIjwlQKKLphyg==", + "dev": true, + "dependencies": { + "@jest/schemas": "^29.6.0", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-snapshot/node_modules/pretty-format/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-snapshot/node_modules/react-is": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", + "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", + "dev": true + }, + "node_modules/jest-snapshot/node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/jest-snapshot/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-snapshot/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/jest-util": { + "version": "29.6.2", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.6.2.tgz", + "integrity": "sha512-3eX1qb6L88lJNCFlEADKOkjpXJQyZRiavX1INZ4tRnrBVr2COd3RgcTLyUiEXMNBlDU/cgYq6taUS0fExrWW4w==", + "dev": true, + "dependencies": { + "@jest/types": "^29.6.1", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-util/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-util/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-util/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-util/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/jest-util/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-validate": { + "version": "29.6.2", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.6.2.tgz", + "integrity": "sha512-vGz0yMN5fUFRRbpJDPwxMpgSXW1LDKROHfBopAvDcmD6s+B/s8WJrwi+4bfH4SdInBA5C3P3BI19dBtKzx1Arg==", + "dev": true, + "dependencies": { + "@jest/types": "^29.6.1", + "camelcase": "^6.2.0", + "chalk": "^4.0.0", + "jest-get-type": "^29.4.3", + "leven": "^3.1.0", + "pretty-format": "^29.6.2" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-validate/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-validate/node_modules/camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/jest-validate/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-validate/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-validate/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/jest-validate/node_modules/pretty-format": { + "version": "29.6.2", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.6.2.tgz", + "integrity": "sha512-1q0oC8eRveTg5nnBEWMXAU2qpv65Gnuf2eCQzSjxpWFkPaPARwqZZDGuNE0zPAZfTCHzIk3A8dIjwlQKKLphyg==", + "dev": true, + "dependencies": { + "@jest/schemas": "^29.6.0", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-validate/node_modules/pretty-format/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-validate/node_modules/react-is": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", + "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", + "dev": true + }, + "node_modules/jest-validate/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-watcher": { + "version": "29.6.2", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-29.6.2.tgz", + "integrity": "sha512-GZitlqkMkhkefjfN/p3SJjrDaxPflqxEAv3/ik10OirZqJGYH5rPiIsgVcfof0Tdqg3shQGdEIxDBx+B4tuLzA==", + "dev": true, + "dependencies": { + "@jest/test-result": "^29.6.2", + "@jest/types": "^29.6.1", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "emittery": "^0.13.1", + "jest-util": "^29.6.2", + "string-length": "^4.0.1" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-watcher/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-watcher/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-watcher/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-watcher/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/jest-watcher/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-worker": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", + "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", + "dev": true, + "dependencies": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/jiti": { + "version": "1.19.1", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.19.1.tgz", + "integrity": "sha512-oVhqoRDaBXf7sjkll95LHVS6Myyyb1zaunVwk4Z0+WPSW4gjS0pl01zYKHScTuyEhQsFxV5L4DR5r+YqSyqyyg==", + "dev": true, + "bin": { + "jiti": "bin/jiti.js" + } + }, + "node_modules/js-levenshtein": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/js-levenshtein/-/js-levenshtein-1.1.6.tgz", + "integrity": "sha512-X2BB11YZtrRqY4EnQcLX5Rh373zbK4alC1FW7D7MBhL2gtcC17cTnr6DmfHZeS0s2rTHjUTMMHfG7gO8SSdw+g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" + }, + "node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jscodeshift": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/jscodeshift/-/jscodeshift-0.14.0.tgz", + "integrity": "sha512-7eCC1knD7bLUPuSCwXsMZUH51O8jIcoVyKtI6P0XM0IVzlGjckPy3FIwQlorzbN0Sg79oK+RlohN32Mqf/lrYA==", + "dev": true, + "dependencies": { + "@babel/core": "^7.13.16", + "@babel/parser": "^7.13.16", + "@babel/plugin-proposal-class-properties": "^7.13.0", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.13.8", + "@babel/plugin-proposal-optional-chaining": "^7.13.12", + "@babel/plugin-transform-modules-commonjs": "^7.13.8", + "@babel/preset-flow": "^7.13.13", + "@babel/preset-typescript": "^7.13.0", + "@babel/register": "^7.13.16", + "babel-core": "^7.0.0-bridge.0", + "chalk": "^4.1.2", + "flow-parser": "0.*", + "graceful-fs": "^4.2.4", + "micromatch": "^4.0.4", + "neo-async": "^2.5.0", + "node-dir": "^0.1.17", + "recast": "^0.21.0", + "temp": "^0.8.4", + "write-file-atomic": "^2.3.0" + }, + "bin": { + "jscodeshift": "bin/jscodeshift.js" + }, + "peerDependencies": { + "@babel/preset-env": "^7.1.6" + } + }, + "node_modules/jscodeshift/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jscodeshift/node_modules/ast-types": { + "version": "0.15.2", + "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.15.2.tgz", + "integrity": "sha512-c27loCv9QkZinsa5ProX751khO9DJl/AcB5c2KNtA6NRvHKS0PgLfcftz72KVq504vB0Gku5s2kUZzDBvQWvHg==", + "dev": true, + "dependencies": { + "tslib": "^2.0.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/jscodeshift/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jscodeshift/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jscodeshift/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/jscodeshift/node_modules/recast": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/recast/-/recast-0.21.5.tgz", + "integrity": "sha512-hjMmLaUXAm1hIuTqOdeYObMslq/q+Xff6QE3Y2P+uoHAg2nmVlLBps2hzh1UJDdMtDTMXOFewK6ky51JQIeECg==", + "dev": true, + "dependencies": { + "ast-types": "0.15.2", + "esprima": "~4.0.0", + "source-map": "~0.6.1", + "tslib": "^2.0.1" + }, + "engines": { + "node": ">= 4" + } + }, + "node_modules/jscodeshift/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jscodeshift/node_modules/write-file-atomic": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.3.tgz", + "integrity": "sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.1.11", + "imurmurhash": "^0.1.4", + "signal-exit": "^3.0.2" + } + }, + "node_modules/jsdom": { + "version": "20.0.3", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-20.0.3.tgz", + "integrity": "sha512-SYhBvTh89tTfCD/CRdSOm13mOBa42iTaTyfyEWBdKcGdPxPtLFBXuHR8XHb33YNYaP+lLbmSvBTsnoesCNJEsQ==", + "dev": true, + "dependencies": { + "abab": "^2.0.6", + "acorn": "^8.8.1", + "acorn-globals": "^7.0.0", + "cssom": "^0.5.0", + "cssstyle": "^2.3.0", + "data-urls": "^3.0.2", + "decimal.js": "^10.4.2", + "domexception": "^4.0.0", + "escodegen": "^2.0.0", + "form-data": "^4.0.0", + "html-encoding-sniffer": "^3.0.0", + "http-proxy-agent": "^5.0.0", + "https-proxy-agent": "^5.0.1", + "is-potential-custom-element-name": "^1.0.1", + "nwsapi": "^2.2.2", + "parse5": "^7.1.1", + "saxes": "^6.0.0", + "symbol-tree": "^3.2.4", + "tough-cookie": "^4.1.2", + "w3c-xmlserializer": "^4.0.0", + "webidl-conversions": "^7.0.0", + "whatwg-encoding": "^2.0.0", + "whatwg-mimetype": "^3.0.0", + "whatwg-url": "^11.0.0", + "ws": "^8.11.0", + "xml-name-validator": "^4.0.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "canvas": "^2.5.0" + }, + "peerDependenciesMeta": { + "canvas": { + "optional": true + } + } + }, + "node_modules/jsdom/node_modules/tr46": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-3.0.0.tgz", + "integrity": "sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==", + "dev": true, + "dependencies": { + "punycode": "^2.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/jsdom/node_modules/webidl-conversions": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", + "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==", + "dev": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/jsdom/node_modules/whatwg-url": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-11.0.0.tgz", + "integrity": "sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ==", + "dev": true, + "dependencies": { + "tr46": "^3.0.0", + "webidl-conversions": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "dev": true + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true + }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/jsonfile/node_modules/universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "dev": true, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/kleur": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", + "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/launch-editor": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/launch-editor/-/launch-editor-2.6.0.tgz", + "integrity": "sha512-JpDCcQnyAAzZZaZ7vEiSqL690w7dAEyLao+KC96zBplnYbJS7TYNjvM3M7y3dGz+v7aIsJk3hllWuc0kWAjyRQ==", + "dev": true, + "dependencies": { + "picocolors": "^1.0.0", + "shell-quote": "^1.7.3" + } + }, + "node_modules/lazy-universal-dotenv": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/lazy-universal-dotenv/-/lazy-universal-dotenv-4.0.0.tgz", + "integrity": "sha512-aXpZJRnTkpK6gQ/z4nk+ZBLd/Qdp118cvPruLSIQzQNRhKwEcdXCOzXuF55VDqIiuAaY3UGZ10DJtvZzDcvsxg==", + "dev": true, + "dependencies": { + "app-root-dir": "^1.0.2", + "dotenv": "^16.0.0", + "dotenv-expand": "^10.0.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/less": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/less/-/less-4.2.0.tgz", + "integrity": "sha512-P3b3HJDBtSzsXUl0im2L7gTO5Ubg8mEN6G8qoTS77iXxXX4Hvu4Qj540PZDvQ8V6DmX6iXo98k7Md0Cm1PrLaA==", + "dev": true, + "peer": true, + "dependencies": { + "copy-anything": "^2.0.1", + "parse-node-version": "^1.0.1", + "tslib": "^2.3.0" + }, + "bin": { + "lessc": "bin/lessc" + }, + "engines": { + "node": ">=6" + }, + "optionalDependencies": { + "errno": "^0.1.1", + "graceful-fs": "^4.1.2", + "image-size": "~0.5.0", + "make-dir": "^2.1.0", + "mime": "^1.4.1", + "needle": "^3.1.0", + "source-map": "~0.6.0" + } + }, + "node_modules/less-loader": { + "version": "11.1.3", + "resolved": "https://registry.npmjs.org/less-loader/-/less-loader-11.1.3.tgz", + "integrity": "sha512-A5b7O8dH9xpxvkosNrP0dFp2i/dISOJa9WwGF3WJflfqIERE2ybxh1BFDj5CovC2+jCE4M354mk90hN6ziXlVw==", + "dev": true, + "engines": { + "node": ">= 14.15.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "less": "^3.5.0 || ^4.0.0", + "webpack": "^5.0.0" + } + }, + "node_modules/less/node_modules/make-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", + "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "pify": "^4.0.1", + "semver": "^5.6.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/less/node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "dev": true, + "optional": true, + "peer": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/leven": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", + "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "dev": true + }, + "node_modules/loader-runner": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", + "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==", + "dev": true, + "engines": { + "node": ">=6.11.5" + } + }, + "node_modules/loader-utils": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", + "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", + "dev": true, + "dependencies": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + }, + "engines": { + "node": ">=8.9.0" + } + }, + "node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true + }, + "node_modules/lodash.debounce": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", + "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==" + }, + "node_modules/lodash.memoize": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", + "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==", + "dev": true + }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true + }, + "node_modules/log-symbols": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", + "dev": true, + "dependencies": { + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/log-symbols/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/log-symbols/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/log-symbols/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/log-symbols/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/log-symbols/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "dependencies": { + "js-tokens": "^3.0.0 || ^4.0.0" + }, + "bin": { + "loose-envify": "cli.js" + } + }, + "node_modules/lower-case": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", + "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==", + "dev": true, + "dependencies": { + "tslib": "^2.0.3" + } + }, + "node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/lz-string": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/lz-string/-/lz-string-1.5.0.tgz", + "integrity": "sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==", + "dev": true, + "bin": { + "lz-string": "bin/bin.js" + } + }, + "node_modules/make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "dev": true, + "dependencies": { + "semver": "^6.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/make-error": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", + "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", + "dev": true + }, + "node_modules/makeerror": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", + "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", + "dev": true, + "dependencies": { + "tmpl": "1.0.5" + } + }, + "node_modules/map-or-similar": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/map-or-similar/-/map-or-similar-1.5.0.tgz", + "integrity": "sha512-0aF7ZmVon1igznGI4VS30yugpduQW3y3GkcgGJOp7d8x8QrizhigUxjI/m2UojsXXto+jLAH3KSz+xOJTiORjg==", + "dev": true + }, + "node_modules/markdown-to-jsx": { + "version": "7.3.2", + "resolved": "https://registry.npmjs.org/markdown-to-jsx/-/markdown-to-jsx-7.3.2.tgz", + "integrity": "sha512-B+28F5ucp83aQm+OxNrPkS8z0tMKaeHiy0lHJs3LqCyDQFtWuenaIrkaVTgAm1pf1AU85LXltva86hlaT17i8Q==", + "dev": true, + "engines": { + "node": ">= 10" + }, + "peerDependencies": { + "react": ">= 0.14.0" + } + }, + "node_modules/mdast-util-definitions": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-definitions/-/mdast-util-definitions-4.0.0.tgz", + "integrity": "sha512-k8AJ6aNnUkB7IE+5azR9h81O5EQ/cTDXtWdMq9Kk5KcEW/8ritU5CeLg/9HhOC++nALHBlaogJ5jz0Ybk3kPMQ==", + "dev": true, + "dependencies": { + "unist-util-visit": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-to-string": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-1.1.0.tgz", + "integrity": "sha512-jVU0Nr2B9X3MU4tSK7JP1CMkSvOj7X5l/GboG1tKRw52lLF1x2Ju92Ms9tNetCcbfX3hzlM73zYo2NKkWSfF/A==", + "dev": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/memfs": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.5.3.tgz", + "integrity": "sha512-UERzLsxzllchadvbPs5aolHh65ISpKpM+ccLbOJ8/vvpBKmAWf+la7dXFy7Mr0ySHbdHrFv5kGFCUHHe6GFEmw==", + "dev": true, + "dependencies": { + "fs-monkey": "^1.0.4" + }, + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/memoizerific": { + "version": "1.11.3", + "resolved": "https://registry.npmjs.org/memoizerific/-/memoizerific-1.11.3.tgz", + "integrity": "sha512-/EuHYwAPdLtXwAwSZkh/Gutery6pD2KYd44oQLhAvQp/50mpyduZh8Q7PYHXTCJ+wuXxt7oij2LXyIJOOYFPog==", + "dev": true, + "dependencies": { + "map-or-similar": "^1.5.0" + } + }, + "node_modules/merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==", + "dev": true + }, + "node_modules/merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "dev": true, + "dependencies": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "dev": true, + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dev": true, + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/min-indent": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", + "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/minimalistic-assert": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", + "dev": true + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/minipass": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", + "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/minizlib": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", + "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", + "dev": true, + "dependencies": { + "minipass": "^3.0.0", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/minizlib/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minizlib/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/mkdirp": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "dev": true, + "dependencies": { + "minimist": "^1.2.6" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, + "node_modules/mkdirp-classic": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", + "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==", + "dev": true + }, + "node_modules/mri": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/mri/-/mri-1.2.0.tgz", + "integrity": "sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "node_modules/msw": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/msw/-/msw-1.2.3.tgz", + "integrity": "sha512-Fqy/TaLKR32x4IkMwudJHJysBzVM/v/lSoMPS9f3QaHLOmb3xHN9YurSUnRt+2eEvNXLjVPij1wMBQtLmTbKsg==", + "dev": true, + "hasInstallScript": true, + "dependencies": { + "@mswjs/cookies": "^0.2.2", + "@mswjs/interceptors": "^0.17.5", + "@open-draft/until": "^1.0.3", + "@types/cookie": "^0.4.1", + "@types/js-levenshtein": "^1.1.1", + "chalk": "4.1.1", + "chokidar": "^3.4.2", + "cookie": "^0.4.2", + "graphql": "^15.0.0 || ^16.0.0", + "headers-polyfill": "^3.1.2", + "inquirer": "^8.2.0", + "is-node-process": "^1.2.0", + "js-levenshtein": "^1.1.6", + "node-fetch": "^2.6.7", + "outvariant": "^1.4.0", + "path-to-regexp": "^6.2.0", + "strict-event-emitter": "^0.4.3", + "type-fest": "^2.19.0", + "yargs": "^17.3.1" + }, + "bin": { + "msw": "cli/index.js" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mswjs" + }, + "peerDependencies": { + "typescript": ">= 4.4.x <= 5.1.x" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/msw/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/msw/node_modules/chalk": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", + "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/msw/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/msw/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/msw/node_modules/cookie": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz", + "integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/msw/node_modules/path-to-regexp": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-6.2.1.tgz", + "integrity": "sha512-JLyh7xT1kizaEvcaXOQwOc2/Yhw6KZOvPf1S8401UyLk86CU79LN3vl7ztXGm/pZ+YjoyAJ4rxmHwbkBXJX+yw==", + "dev": true + }, + "node_modules/msw/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/msw/node_modules/type-fest": { + "version": "2.19.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz", + "integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==", + "dev": true, + "engines": { + "node": ">=12.20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/multicast-dns": { + "version": "7.2.5", + "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-7.2.5.tgz", + "integrity": "sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg==", + "dev": true, + "dependencies": { + "dns-packet": "^5.2.2", + "thunky": "^1.0.2" + }, + "bin": { + "multicast-dns": "cli.js" + } + }, + "node_modules/mute-stream": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", + "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", + "dev": true + }, + "node_modules/nanoid": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz", + "integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true + }, + "node_modules/needle": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/needle/-/needle-3.2.0.tgz", + "integrity": "sha512-oUvzXnyLiVyVGoianLijF9O/RecZUf7TkBfimjGrLM4eQhXyeJwM6GeAWccwfQ9aa4gMCZKqhAOuLaMIcQxajQ==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "debug": "^3.2.6", + "iconv-lite": "^0.6.3", + "sax": "^1.2.4" + }, + "bin": { + "needle": "bin/needle" + }, + "engines": { + "node": ">= 4.4.x" + } + }, + "node_modules/needle/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/needle/node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/needle/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true, + "optional": true, + "peer": true + }, + "node_modules/negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", + "dev": true + }, + "node_modules/no-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz", + "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==", + "dev": true, + "dependencies": { + "lower-case": "^2.0.2", + "tslib": "^2.0.3" + } + }, + "node_modules/node-abort-controller": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/node-abort-controller/-/node-abort-controller-3.1.1.tgz", + "integrity": "sha512-AGK2yQKIjRuqnc6VkX2Xj5d+QW8xZ87pa1UK6yA6ouUyuxfHuMP6umE5QK7UmTeOAymo+Zx1Fxiuw9rVx8taHQ==", + "dev": true + }, + "node_modules/node-dir": { + "version": "0.1.17", + "resolved": "https://registry.npmjs.org/node-dir/-/node-dir-0.1.17.tgz", + "integrity": "sha512-tmPX422rYgofd4epzrNoOXiE8XFZYOcCq1vD7MAXCDO+O+zndlA2ztdKKMa+EeuBG5tHETpr4ml4RGgpqDCCAg==", + "dev": true, + "dependencies": { + "minimatch": "^3.0.2" + }, + "engines": { + "node": ">= 0.10.5" + } + }, + "node_modules/node-fetch": { + "version": "2.6.12", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.12.tgz", + "integrity": "sha512-C/fGU2E8ToujUivIO0H+tpQ6HWo4eEmchoPIoXtxCrVghxdKq+QOHqEZW7tuP3KlV3bC8FRMO5nMCC7Zm1VP6g==", + "dev": true, + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, + "node_modules/node-fetch-native": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/node-fetch-native/-/node-fetch-native-1.2.0.tgz", + "integrity": "sha512-5IAMBTl9p6PaAjYCnMv5FmqIF6GcZnawAVnzaCG0rX2aYZJ4CxEkZNtVPuTRug7fL7wyM5BQYTlAzcyMPi6oTQ==", + "dev": true + }, + "node_modules/node-forge": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", + "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==", + "dev": true, + "engines": { + "node": ">= 6.13.0" + } + }, + "node_modules/node-int64": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", + "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==", + "dev": true + }, + "node_modules/node-releases": { + "version": "2.0.12", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.12.tgz", + "integrity": "sha512-QzsYKWhXTWx8h1kIvqfnC++o0pEmpRQA/aenALsL2F4pqNVr7YzcdMlDij5WBnwftRbJCNJL/O7zdKaxKPHqgQ==" + }, + "node_modules/normalize-package-data": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "dev": true, + "dependencies": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + } + }, + "node_modules/normalize-package-data/node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "dev": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "devOptional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "dev": true, + "dependencies": { + "path-key": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/nth-check": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", + "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", + "dev": true, + "dependencies": { + "boolbase": "^1.0.0" + }, + "funding": { + "url": "https://github.com/fb55/nth-check?sponsor=1" + } + }, + "node_modules/nwsapi": { + "version": "2.2.7", + "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.7.tgz", + "integrity": "sha512-ub5E4+FBPKwAZx0UwIQOjYWGHTEq5sPqHQNRN8Z9e4A7u3Tj1weLJsL59yH9vmvqEtBHaOmT6cYQKIZOxp35FQ==", + "dev": true + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-inspect": { + "version": "1.12.3", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz", + "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object-is": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.5.tgz", + "integrity": "sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.assign": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz", + "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "has-symbols": "^1.0.3", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/objectorarray": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/objectorarray/-/objectorarray-1.0.5.tgz", + "integrity": "sha512-eJJDYkhJFFbBBAxeh8xW+weHlkI28n2ZdQV/J/DNfWfSKlGEf2xcfAbZTv3riEXHAhL9SVOTs2pRmXiSTf78xg==", + "dev": true + }, + "node_modules/obuf": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", + "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==", + "dev": true + }, + "node_modules/on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "dev": true, + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/on-headers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", + "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/open": { + "version": "8.4.2", + "resolved": "https://registry.npmjs.org/open/-/open-8.4.2.tgz", + "integrity": "sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==", + "dev": true, + "dependencies": { + "define-lazy-prop": "^2.0.0", + "is-docker": "^2.1.1", + "is-wsl": "^2.2.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/optionator": { + "version": "0.9.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz", + "integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==", + "dev": true, + "dependencies": { + "@aashutoshrathi/word-wrap": "^1.2.3", + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/ora": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", + "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", + "dev": true, + "dependencies": { + "bl": "^4.1.0", + "chalk": "^4.1.0", + "cli-cursor": "^3.1.0", + "cli-spinners": "^2.5.0", + "is-interactive": "^1.0.0", + "is-unicode-supported": "^0.1.0", + "log-symbols": "^4.1.0", + "strip-ansi": "^6.0.0", + "wcwidth": "^1.0.1" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ora/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/ora/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/ora/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/ora/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/ora/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/outvariant": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/outvariant/-/outvariant-1.4.0.tgz", + "integrity": "sha512-AlWY719RF02ujitly7Kk/0QlV+pXGFDHrHf9O2OKqyqgBieaPOIeuSkL8sRK6j2WK+/ZAURq2kZsY0d8JapUiw==", + "dev": true + }, + "node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/p-map": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "dev": true, + "dependencies": { + "aggregate-error": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-retry": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-4.6.2.tgz", + "integrity": "sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ==", + "dev": true, + "dependencies": { + "@types/retry": "0.12.0", + "retry": "^0.13.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/pako": { + "version": "0.2.9", + "resolved": "https://registry.npmjs.org/pako/-/pako-0.2.9.tgz", + "integrity": "sha512-NUcwaKxUxWrZLpDG+z/xZaCgQITkA/Dv4V/T6bw7VON6l1Xz/VnrBqrYjZQ12TamKHzITTfOEIYUj48y2KXImA==", + "dev": true + }, + "node_modules/param-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz", + "integrity": "sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==", + "dev": true, + "dependencies": { + "dot-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/parse-node-version": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parse-node-version/-/parse-node-version-1.0.1.tgz", + "integrity": "sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA==", + "dev": true, + "peer": true, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/parse5": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz", + "integrity": "sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==", + "dev": true, + "dependencies": { + "entities": "^4.4.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, + "node_modules/parse5/node_modules/entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "dev": true, + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/pascal-case": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.2.tgz", + "integrity": "sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==", + "dev": true, + "dependencies": { + "no-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "node_modules/path-browserify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz", + "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==", + "dev": true + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" + }, + "node_modules/path-scurry": { + "version": "1.10.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.10.1.tgz", + "integrity": "sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ==", + "dev": true, + "dependencies": { + "lru-cache": "^9.1.1 || ^10.0.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/path-scurry/node_modules/lru-cache": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.0.0.tgz", + "integrity": "sha512-svTf/fzsKHffP42sujkO/Rjs37BCIsQVRCeNYIm9WN8rgT7ffoUnRtZCqU+6BqcSBdv8gwJeTz8knJpgACeQMw==", + "dev": true, + "engines": { + "node": "14 || >=16.14" + } + }, + "node_modules/path-to-regexp": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==", + "dev": true + }, + "node_modules/path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/pathe": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/pathe/-/pathe-1.1.1.tgz", + "integrity": "sha512-d+RQGp0MAYTIaDBIMmOfMwz3E+LOZnxx1HZd5R18mmCZY0QBlK0LDZfPc8FW8Ed2DlvsuE6PRjroDY+wg4+j/Q==", + "dev": true + }, + "node_modules/peek-stream": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/peek-stream/-/peek-stream-1.1.3.tgz", + "integrity": "sha512-FhJ+YbOSBb9/rIl2ZeE/QHEsWn7PqNYt8ARAY3kIgNGOk13g9FGyIY6JIl/xB/3TFRVoTv5as0l11weORrTekA==", + "dev": true, + "dependencies": { + "buffer-from": "^1.0.0", + "duplexify": "^3.5.0", + "through2": "^2.0.3" + } + }, + "node_modules/pend": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", + "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==", + "dev": true + }, + "node_modules/picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "devOptional": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "engines": { + "node": ">=6" + } + }, + "node_modules/pirates": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz", + "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "dev": true, + "dependencies": { + "find-up": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/polished": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/polished/-/polished-4.2.2.tgz", + "integrity": "sha512-Sz2Lkdxz6F2Pgnpi9U5Ng/WdWAUZxmHrNPoVlm3aAemxoy2Qy7LGjQg4uf8qKelDAUW94F4np3iH2YPf2qefcQ==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.17.8" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/postcss": { + "version": "8.4.24", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.24.tgz", + "integrity": "sha512-M0RzbcI0sO/XJNucsGjvWU9ERWxb/ytp1w6dKtxTKgixdtQDq4rmx/g8W1hnaheq9jgwL/oyEdH5Bc4WwJKMqg==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "nanoid": "^3.3.6", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/postcss-loader": { + "version": "7.3.3", + "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-7.3.3.tgz", + "integrity": "sha512-YgO/yhtevGO/vJePCQmTxiaEwER94LABZN0ZMT4A0vsak9TpO+RvKRs7EmJ8peIlB9xfXCsS7M8LjqncsUZ5HA==", + "dev": true, + "dependencies": { + "cosmiconfig": "^8.2.0", + "jiti": "^1.18.2", + "semver": "^7.3.8" + }, + "engines": { + "node": ">= 14.15.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "postcss": "^7.0.0 || ^8.0.1", + "webpack": "^5.0.0" + } + }, + "node_modules/postcss-loader/node_modules/cosmiconfig": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.2.0.tgz", + "integrity": "sha512-3rTMnFJA1tCOPwRxtgF4wd7Ab2qvDbL8jX+3smjIbS4HlZBagTlpERbdN7iAbWlrfxE3M8c27kTwTawQ7st+OQ==", + "dev": true, + "dependencies": { + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "parse-json": "^5.0.0", + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/d-fischer" + } + }, + "node_modules/postcss-loader/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/postcss-loader/node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/postcss-loader/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/postcss-modules-extract-imports": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz", + "integrity": "sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==", + "dev": true, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-modules-local-by-default": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.3.tgz", + "integrity": "sha512-2/u2zraspoACtrbFRnTijMiQtb4GW4BvatjaG/bCjYQo8kLTdevCUlwuBHx2sCnSyrI3x3qj4ZK1j5LQBgzmwA==", + "dev": true, + "dependencies": { + "icss-utils": "^5.0.0", + "postcss-selector-parser": "^6.0.2", + "postcss-value-parser": "^4.1.0" + }, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-modules-scope": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.0.0.tgz", + "integrity": "sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg==", + "dev": true, + "dependencies": { + "postcss-selector-parser": "^6.0.4" + }, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-modules-values": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz", + "integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==", + "dev": true, + "dependencies": { + "icss-utils": "^5.0.0" + }, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-selector-parser": { + "version": "6.0.13", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.13.tgz", + "integrity": "sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ==", + "dev": true, + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-value-parser": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==" + }, + "node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/prettier": { + "version": "2.8.8", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz", + "integrity": "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==", + "dev": true, + "bin": { + "prettier": "bin-prettier.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, + "node_modules/prettier-linter-helpers": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz", + "integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==", + "dev": true, + "dependencies": { + "fast-diff": "^1.1.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/pretty-error": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-4.0.0.tgz", + "integrity": "sha512-AoJ5YMAcXKYxKhuJGdcvse+Voc6v1RgnsR3nWcYU7q4t6z0Q6T86sv5Zq8VIRbOWWFpvdGE83LtdSMNd+6Y0xw==", + "dev": true, + "dependencies": { + "lodash": "^4.17.20", + "renderkid": "^3.0.0" + } + }, + "node_modules/pretty-format": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.5.1.tgz", + "integrity": "sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^17.0.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/pretty-format/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/pretty-format/node_modules/react-is": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", + "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", + "dev": true + }, + "node_modules/pretty-hrtime": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz", + "integrity": "sha512-66hKPCr+72mlfiSjlEB1+45IjXSqvVAIy6mocupoww4tBFE9R9IhwwUGoI4G++Tc9Aq+2rxOt0RFU6gPcrte0A==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/process": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", + "dev": true, + "engines": { + "node": ">= 0.6.0" + } + }, + "node_modules/process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", + "dev": true + }, + "node_modules/progress": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/prompts": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", + "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", + "dev": true, + "dependencies": { + "kleur": "^3.0.3", + "sisteransi": "^1.0.5" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/prop-types": { + "version": "15.8.1", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", + "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", + "dev": true, + "dependencies": { + "loose-envify": "^1.4.0", + "object-assign": "^4.1.1", + "react-is": "^16.13.1" + } + }, + "node_modules/proxy-addr": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "dev": true, + "dependencies": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/proxy-addr/node_modules/ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "dev": true, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", + "dev": true + }, + "node_modules/prr": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", + "integrity": "sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==", + "dev": true, + "optional": true, + "peer": true + }, + "node_modules/psl": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz", + "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==", + "dev": true + }, + "node_modules/pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "dev": true, + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "node_modules/pumpify": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz", + "integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==", + "dev": true, + "dependencies": { + "duplexify": "^3.6.0", + "inherits": "^2.0.3", + "pump": "^2.0.0" + } + }, + "node_modules/pumpify/node_modules/pump": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz", + "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", + "dev": true, + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "node_modules/punycode": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", + "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/puppeteer-core": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/puppeteer-core/-/puppeteer-core-2.1.1.tgz", + "integrity": "sha512-n13AWriBMPYxnpbb6bnaY5YoY6rGj8vPLrz6CZF3o0qJNEwlcfJVxBzYZ0NJsQ21UbdJoijPCDrM++SUVEz7+w==", + "dev": true, + "dependencies": { + "@types/mime-types": "^2.1.0", + "debug": "^4.1.0", + "extract-zip": "^1.6.6", + "https-proxy-agent": "^4.0.0", + "mime": "^2.0.3", + "mime-types": "^2.1.25", + "progress": "^2.0.1", + "proxy-from-env": "^1.0.0", + "rimraf": "^2.6.1", + "ws": "^6.1.0" + }, + "engines": { + "node": ">=8.16.0" + } + }, + "node_modules/puppeteer-core/node_modules/agent-base": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-5.1.1.tgz", + "integrity": "sha512-TMeqbNl2fMW0nMjTEPOwe3J/PRFP4vqeoNuQMG0HlMrtm5QxKqdvAkZ1pRBQ/ulIyDD5Yq0nJ7YbdD8ey0TO3g==", + "dev": true, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/puppeteer-core/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/puppeteer-core/node_modules/https-proxy-agent": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-4.0.0.tgz", + "integrity": "sha512-zoDhWrkR3of1l9QAL8/scJZyLu8j/gBkcwcaQOZh7Gyh/+uJQzGVETdgT30akuwkpL8HTRfssqI3BZuV18teDg==", + "dev": true, + "dependencies": { + "agent-base": "5", + "debug": "4" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/puppeteer-core/node_modules/mime": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz", + "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==", + "dev": true, + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/puppeteer-core/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/puppeteer-core/node_modules/rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + } + }, + "node_modules/puppeteer-core/node_modules/ws": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.2.tgz", + "integrity": "sha512-zmhltoSR8u1cnDsD43TX59mzoMZsLKqUweyYBAIvTngR3shc0W6aOZylZmq/7hqyVxPdi+5Ud2QInblgyE72fw==", + "dev": true, + "dependencies": { + "async-limiter": "~1.0.0" + } + }, + "node_modules/pure-rand": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-6.0.2.tgz", + "integrity": "sha512-6Yg0ekpKICSjPswYOuC5sku/TSWaRYlA0qsXqJgM/d/4pLPHPuTxK7Nbf7jFKzAeedUhR8C7K9Uv63FBsSo8xQ==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/dubzzz" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fast-check" + } + ] + }, + "node_modules/qs": { + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", + "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", + "dev": true, + "dependencies": { + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/querystringify": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", + "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==", + "dev": true + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/ramda": { + "version": "0.29.0", + "resolved": "https://registry.npmjs.org/ramda/-/ramda-0.29.0.tgz", + "integrity": "sha512-BBea6L67bYLtdbOqfp8f58fPMqEwx0doL+pAi8TZyp2YWz8R9G8z9x75CZI8W+ftqhFHCpEX2cRnUUXK130iKA==", + "dev": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/ramda" + } + }, + "node_modules/randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dev": true, + "dependencies": { + "safe-buffer": "^5.1.0" + } + }, + "node_modules/range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/raw-body": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", + "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", + "dev": true, + "dependencies": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/raw-body/node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/react": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz", + "integrity": "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==", + "dependencies": { + "loose-envify": "^1.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-colorful": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/react-colorful/-/react-colorful-5.6.1.tgz", + "integrity": "sha512-1exovf0uGTGyq5mXQT0zgQ80uvj2PCwvF8zY1RN9/vbJVSjSo3fsB/4L3ObbF7u70NduSiK4xu4Y6q1MHoUGEw==", + "dev": true, + "peerDependencies": { + "react": ">=16.8.0", + "react-dom": ">=16.8.0" + } + }, + "node_modules/react-confetti": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/react-confetti/-/react-confetti-6.1.0.tgz", + "integrity": "sha512-7Ypx4vz0+g8ECVxr88W9zhcQpbeujJAVqL14ZnXJ3I23mOI9/oBVTQ3dkJhUmB0D6XOtCZEM6N0Gm9PMngkORw==", + "dev": true, + "dependencies": { + "tween-functions": "^1.2.0" + }, + "engines": { + "node": ">=10.18" + }, + "peerDependencies": { + "react": "^16.3.0 || ^17.0.1 || ^18.0.0" + } + }, + "node_modules/react-docgen": { + "version": "5.4.3", + "resolved": "https://registry.npmjs.org/react-docgen/-/react-docgen-5.4.3.tgz", + "integrity": "sha512-xlLJyOlnfr8lLEEeaDZ+X2J/KJoe6Nr9AzxnkdQWush5hz2ZSu66w6iLMOScMmxoSHWpWMn+k3v5ZiyCfcWsOA==", + "dev": true, + "dependencies": { + "@babel/core": "^7.7.5", + "@babel/generator": "^7.12.11", + "@babel/runtime": "^7.7.6", + "ast-types": "^0.14.2", + "commander": "^2.19.0", + "doctrine": "^3.0.0", + "estree-to-babel": "^3.1.0", + "neo-async": "^2.6.1", + "node-dir": "^0.1.10", + "strip-indent": "^3.0.0" + }, + "bin": { + "react-docgen": "bin/react-docgen.js" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/react-docgen-typescript": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/react-docgen-typescript/-/react-docgen-typescript-2.2.2.tgz", + "integrity": "sha512-tvg2ZtOpOi6QDwsb3GZhOjDkkX0h8Z2gipvTg6OVMUyoYoURhEiRNePT8NZItTVCDh39JJHnLdfCOkzoLbFnTg==", + "dev": true, + "peerDependencies": { + "typescript": ">= 4.3.x" + } + }, + "node_modules/react-dom": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz", + "integrity": "sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==", + "dependencies": { + "loose-envify": "^1.1.0", + "scheduler": "^0.23.0" + }, + "peerDependencies": { + "react": "^18.2.0" + } + }, + "node_modules/react-element-to-jsx-string": { + "version": "15.0.0", + "resolved": "https://registry.npmjs.org/react-element-to-jsx-string/-/react-element-to-jsx-string-15.0.0.tgz", + "integrity": "sha512-UDg4lXB6BzlobN60P8fHWVPX3Kyw8ORrTeBtClmIlGdkOOE+GYQSFvmEU5iLLpwp/6v42DINwNcwOhOLfQ//FQ==", + "dev": true, + "dependencies": { + "@base2/pretty-print-object": "1.0.1", + "is-plain-object": "5.0.0", + "react-is": "18.1.0" + }, + "peerDependencies": { + "react": "^0.14.8 || ^15.0.1 || ^16.0.0 || ^17.0.1 || ^18.0.0", + "react-dom": "^0.14.8 || ^15.0.1 || ^16.0.0 || ^17.0.1 || ^18.0.0" + } + }, + "node_modules/react-element-to-jsx-string/node_modules/is-plain-object": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", + "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-element-to-jsx-string/node_modules/react-is": { + "version": "18.1.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.1.0.tgz", + "integrity": "sha512-Fl7FuabXsJnV5Q1qIOQwx/sagGF18kogb4gpfcG4gjLBWO0WDiiz1ko/ExayuxE7InyQkBLkxRFG5oxY6Uu3Kg==", + "dev": true + }, + "node_modules/react-inspector": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/react-inspector/-/react-inspector-6.0.2.tgz", + "integrity": "sha512-x+b7LxhmHXjHoU/VrFAzw5iutsILRoYyDq97EDYdFpPLcvqtEzk4ZSZSQjnFPbr5T57tLXnHcqFYoN1pI6u8uQ==", + "dev": true, + "peerDependencies": { + "react": "^16.8.4 || ^17.0.0 || ^18.0.0" + } + }, + "node_modules/react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", + "dev": true + }, + "node_modules/react-refresh": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.11.0.tgz", + "integrity": "sha512-F27qZr8uUqwhWZboondsPx8tnC3Ct3SxZA3V5WyEvujRyyNv0VYPhoBg1gZ8/MV5tubQp76Trw8lTv9hzRBa+A==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-remove-scroll": { + "version": "2.5.5", + "resolved": "https://registry.npmjs.org/react-remove-scroll/-/react-remove-scroll-2.5.5.tgz", + "integrity": "sha512-ImKhrzJJsyXJfBZ4bzu8Bwpka14c/fQt0k+cyFp/PBhTfyDnU5hjOtM4AG/0AMyy8oKzOTR0lDgJIM7pYXI0kw==", + "dev": true, + "dependencies": { + "react-remove-scroll-bar": "^2.3.3", + "react-style-singleton": "^2.2.1", + "tslib": "^2.1.0", + "use-callback-ref": "^1.3.0", + "use-sidecar": "^1.1.2" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/react-remove-scroll-bar": { + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/react-remove-scroll-bar/-/react-remove-scroll-bar-2.3.4.tgz", + "integrity": "sha512-63C4YQBUt0m6ALadE9XV56hV8BgJWDmmTPY758iIJjfQKt2nYwoUrPk0LXRXcB/yIj82T1/Ixfdpdk68LwIB0A==", + "dev": true, + "dependencies": { + "react-style-singleton": "^2.2.1", + "tslib": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/react-router": { + "version": "6.14.2", + "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.14.2.tgz", + "integrity": "sha512-09Zss2dE2z+T1D03IheqAFtK4UzQyX8nFPWx6jkwdYzGLXd5ie06A6ezS2fO6zJfEb/SpG6UocN2O1hfD+2urQ==", + "dependencies": { + "@remix-run/router": "1.7.2" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "react": ">=16.8" + } + }, + "node_modules/react-router-dom": { + "version": "6.14.2", + "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.14.2.tgz", + "integrity": "sha512-5pWX0jdKR48XFZBuJqHosX3AAHjRAzygouMTyimnBPOLdY3WjzUSKhus2FVMihUFWzeLebDgr4r8UeQFAct7Bg==", + "dependencies": { + "@remix-run/router": "1.7.2", + "react-router": "6.14.2" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "react": ">=16.8", + "react-dom": ">=16.8" + } + }, + "node_modules/react-style-singleton": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/react-style-singleton/-/react-style-singleton-2.2.1.tgz", + "integrity": "sha512-ZWj0fHEMyWkHzKYUr2Bs/4zU6XLmq9HsgBURm7g5pAVfyn49DgUiNgY2d4lXRlYSiCif9YBGpQleewkcqddc7g==", + "dev": true, + "dependencies": { + "get-nonce": "^1.0.0", + "invariant": "^2.2.4", + "tslib": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/read-pkg": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", + "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", + "dev": true, + "dependencies": { + "@types/normalize-package-data": "^2.4.0", + "normalize-package-data": "^2.5.0", + "parse-json": "^5.0.0", + "type-fest": "^0.6.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/read-pkg-up": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", + "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", + "dev": true, + "dependencies": { + "find-up": "^4.1.0", + "read-pkg": "^5.2.0", + "type-fest": "^0.8.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/read-pkg-up/node_modules/type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/read-pkg/node_modules/type-fest": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", + "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dev": true, + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "devOptional": true, + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/recast": { + "version": "0.23.3", + "resolved": "https://registry.npmjs.org/recast/-/recast-0.23.3.tgz", + "integrity": "sha512-HbCVFh2ANP6a09nzD4lx7XthsxMOJWKX5pIcUwtLrmeEIl3I0DwjCoVXDE0Aobk+7k/mS3H50FK4iuYArpcT6Q==", + "dev": true, + "dependencies": { + "assert": "^2.0.0", + "ast-types": "^0.16.1", + "esprima": "~4.0.0", + "source-map": "~0.6.1", + "tslib": "^2.0.1" + }, + "engines": { + "node": ">= 4" + } + }, + "node_modules/recast/node_modules/ast-types": { + "version": "0.16.1", + "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.16.1.tgz", + "integrity": "sha512-6t10qk83GOG8p0vKmaCr8eiilZwO171AvbROMtvvNiwrTly62t+7XkA8RdIIVbpMhCASAsxgAzdRSwh6nw/5Dg==", + "dev": true, + "dependencies": { + "tslib": "^2.0.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/rechoir": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.8.0.tgz", + "integrity": "sha512-/vxpCXddiX8NGfGO/mTafwjq4aFa/71pvamip0++IQk3zG8cbCj0fifNPrjjF1XMXUne91jL9OoxmdykoEtifQ==", + "dev": true, + "dependencies": { + "resolve": "^1.20.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/redent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", + "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==", + "dev": true, + "dependencies": { + "indent-string": "^4.0.0", + "strip-indent": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/regenerate": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", + "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==" + }, + "node_modules/regenerate-unicode-properties": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.0.tgz", + "integrity": "sha512-d1VudCLoIGitcU/hEg2QqvyGZQmdC0Lf8BqdOMXGFSvJP4bNV1+XqbPQeHHLD51Jh4QJJ225dlIFvY4Ly6MXmQ==", + "dependencies": { + "regenerate": "^1.4.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/regenerator-runtime": { + "version": "0.13.11", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", + "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==" + }, + "node_modules/regenerator-transform": { + "version": "0.15.2", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.2.tgz", + "integrity": "sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg==", + "dependencies": { + "@babel/runtime": "^7.8.4" + } + }, + "node_modules/regex-parser": { + "version": "2.2.11", + "resolved": "https://registry.npmjs.org/regex-parser/-/regex-parser-2.2.11.tgz", + "integrity": "sha512-jbD/FT0+9MBU2XAZluI7w2OBs1RBi6p9M83nkoZayQXXU9e8Robt69FcZc7wU4eJD/YFTjn1JdCk3rbMJajz8Q==", + "dev": true + }, + "node_modules/regexp.prototype.flags": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.0.tgz", + "integrity": "sha512-0SutC3pNudRKgquxGoRGIz946MZVHqbNfPjBdxeOhBrdgDKlRoXmYLQN9xRbrR09ZXWeGAdPuif7egofn6v5LA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "functions-have-names": "^1.2.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/regexpu-core": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.3.2.tgz", + "integrity": "sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ==", + "dependencies": { + "@babel/regjsgen": "^0.8.0", + "regenerate": "^1.4.2", + "regenerate-unicode-properties": "^10.1.0", + "regjsparser": "^0.9.1", + "unicode-match-property-ecmascript": "^2.0.0", + "unicode-match-property-value-ecmascript": "^2.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/regjsparser": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.9.1.tgz", + "integrity": "sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==", + "dependencies": { + "jsesc": "~0.5.0" + }, + "bin": { + "regjsparser": "bin/parser" + } + }, + "node_modules/regjsparser/node_modules/jsesc": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", + "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==", + "bin": { + "jsesc": "bin/jsesc" + } + }, + "node_modules/relateurl": { + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz", + "integrity": "sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog==", + "dev": true, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/remark-external-links": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/remark-external-links/-/remark-external-links-8.0.0.tgz", + "integrity": "sha512-5vPSX0kHoSsqtdftSHhIYofVINC8qmp0nctkeU9YoJwV3YfiBRiI6cbFRJ0oI/1F9xS+bopXG0m2KS8VFscuKA==", + "dev": true, + "dependencies": { + "extend": "^3.0.0", + "is-absolute-url": "^3.0.0", + "mdast-util-definitions": "^4.0.0", + "space-separated-tokens": "^1.0.0", + "unist-util-visit": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-slug": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/remark-slug/-/remark-slug-6.1.0.tgz", + "integrity": "sha512-oGCxDF9deA8phWvxFuyr3oSJsdyUAxMFbA0mZ7Y1Sas+emILtO+e5WutF9564gDsEN4IXaQXm5pFo6MLH+YmwQ==", + "dev": true, + "dependencies": { + "github-slugger": "^1.0.0", + "mdast-util-to-string": "^1.0.0", + "unist-util-visit": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/renderkid": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-3.0.0.tgz", + "integrity": "sha512-q/7VIQA8lmM1hF+jn+sFSPWGlMkSAeNYcPLmDQx2zzuiDfaLrOmumR8iaUKlenFgh0XRPIUeSPlH3A+AW3Z5pg==", + "dev": true, + "dependencies": { + "css-select": "^4.1.3", + "dom-converter": "^0.2.0", + "htmlparser2": "^6.1.0", + "lodash": "^4.17.21", + "strip-ansi": "^6.0.1" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/requireindex": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/requireindex/-/requireindex-1.2.0.tgz", + "integrity": "sha512-L9jEkOi3ASd9PYit2cwRfyppc9NoABujTP8/5gFcbERmo5jUoAKovIC3fsF17pkTnGsrByysqX+Kxd2OTNI1ww==", + "dev": true, + "engines": { + "node": ">=0.10.5" + } + }, + "node_modules/requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==", + "dev": true + }, + "node_modules/resolve": { + "version": "1.22.2", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.2.tgz", + "integrity": "sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g==", + "dependencies": { + "is-core-module": "^2.11.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve-cwd": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", + "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", + "dev": true, + "dependencies": { + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/resolve-url-loader": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-url-loader/-/resolve-url-loader-5.0.0.tgz", + "integrity": "sha512-uZtduh8/8srhBoMx//5bwqjQ+rfYOUq8zC9NrMUGtjBiGTtFJM42s58/36+hTqeqINcnYe08Nj3LkK9lW4N8Xg==", + "dev": true, + "dependencies": { + "adjust-sourcemap-loader": "^4.0.0", + "convert-source-map": "^1.7.0", + "loader-utils": "^2.0.0", + "postcss": "^8.2.14", + "source-map": "0.6.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/resolve.exports": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.2.tgz", + "integrity": "sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/restore-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", + "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", + "dev": true, + "dependencies": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/retry": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", + "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true, + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/run-async": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", + "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==", + "dev": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/rxjs": { + "version": "7.8.1", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz", + "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==", + "dev": true, + "dependencies": { + "tslib": "^2.1.0" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true + }, + "node_modules/sass-loader": { + "version": "13.3.2", + "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-13.3.2.tgz", + "integrity": "sha512-CQbKl57kdEv+KDLquhC+gE3pXt74LEAzm+tzywcA0/aHZuub8wTErbjAoNI57rPUWRYRNC5WUnNl8eGJNbDdwg==", + "dev": true, + "dependencies": { + "neo-async": "^2.6.2" + }, + "engines": { + "node": ">= 14.15.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "fibers": ">= 3.1.0", + "node-sass": "^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0 || ^9.0.0", + "sass": "^1.3.0", + "sass-embedded": "*", + "webpack": "^5.0.0" + }, + "peerDependenciesMeta": { + "fibers": { + "optional": true + }, + "node-sass": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + } + } + }, + "node_modules/sax": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", + "dev": true, + "optional": true, + "peer": true + }, + "node_modules/saxes": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/saxes/-/saxes-6.0.0.tgz", + "integrity": "sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==", + "dev": true, + "dependencies": { + "xmlchars": "^2.2.0" + }, + "engines": { + "node": ">=v12.22.7" + } + }, + "node_modules/scheduler": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz", + "integrity": "sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==", + "dependencies": { + "loose-envify": "^1.1.0" + } + }, + "node_modules/schema-utils": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", + "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/select-hose": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", + "integrity": "sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg==", + "dev": true + }, + "node_modules/selfsigned": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-2.1.1.tgz", + "integrity": "sha512-GSL3aowiF7wa/WtSFwnUrludWFoNhftq8bUkH9pkzjpN2XSPOAYEgg6e0sS9s0rZwgJzJiQRPU18A6clnoW5wQ==", + "dev": true, + "dependencies": { + "node-forge": "^1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/send": { + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", + "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", + "dev": true, + "dependencies": { + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "2.4.1", + "range-parser": "~1.2.1", + "statuses": "2.0.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/send/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + }, + "node_modules/serialize-javascript": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.1.tgz", + "integrity": "sha512-owoXEFjWRllis8/M1Q+Cw5k8ZH40e3zhp/ovX+Xr/vi1qj6QesbyXXViFbpNvWvPNAD62SutwEXavefrLJWj7w==", + "dev": true, + "dependencies": { + "randombytes": "^2.1.0" + } + }, + "node_modules/serve-favicon": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/serve-favicon/-/serve-favicon-2.5.0.tgz", + "integrity": "sha512-FMW2RvqNr03x+C0WxTyu6sOv21oOjkq5j8tjquWccwa6ScNyGFOGJVpuS1NmTVGBAHS07xnSKotgf2ehQmf9iA==", + "dev": true, + "dependencies": { + "etag": "~1.8.1", + "fresh": "0.5.2", + "ms": "2.1.1", + "parseurl": "~1.3.2", + "safe-buffer": "5.1.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/serve-favicon/node_modules/ms": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", + "dev": true + }, + "node_modules/serve-favicon/node_modules/safe-buffer": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", + "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==", + "dev": true + }, + "node_modules/serve-index": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", + "integrity": "sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw==", + "dev": true, + "dependencies": { + "accepts": "~1.3.4", + "batch": "0.6.1", + "debug": "2.6.9", + "escape-html": "~1.0.3", + "http-errors": "~1.6.2", + "mime-types": "~2.1.17", + "parseurl": "~1.3.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/serve-index/node_modules/depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/serve-index/node_modules/http-errors": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", + "integrity": "sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==", + "dev": true, + "dependencies": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.0", + "statuses": ">= 1.4.0 < 2" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/serve-index/node_modules/inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==", + "dev": true + }, + "node_modules/serve-index/node_modules/setprototypeof": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", + "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", + "dev": true + }, + "node_modules/serve-index/node_modules/statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/serve-static": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", + "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", + "dev": true, + "dependencies": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.18.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/set-cookie-parser": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/set-cookie-parser/-/set-cookie-parser-2.6.0.tgz", + "integrity": "sha512-RVnVQxTXuerk653XfuliOxBP81Sf0+qfQE73LIYKcyMYHG94AuH0kgrQpRDuTZnSmjpysHmzxJXKNfa6PjFhyQ==", + "dev": true + }, + "node_modules/setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", + "dev": true + }, + "node_modules/shallow-clone": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", + "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", + "dev": true, + "dependencies": { + "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shallowequal": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/shallowequal/-/shallowequal-1.1.0.tgz", + "integrity": "sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ==" + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/shell-quote": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.1.tgz", + "integrity": "sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true + }, + "node_modules/simple-update-notifier": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/simple-update-notifier/-/simple-update-notifier-2.0.0.tgz", + "integrity": "sha512-a2B9Y0KlNXl9u/vsW6sTIu9vGEpfKu2wRV6l1H3XEas/0gUIzGzBoP/IouTcUQbm9JWZLH3COxyn03TYlFax6w==", + "dev": true, + "dependencies": { + "semver": "^7.5.3" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/simple-update-notifier/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/simple-update-notifier/node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/simple-update-notifier/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/sisteransi": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", + "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", + "dev": true + }, + "node_modules/slash": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz", + "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==", + "engines": { + "node": ">=6" + } + }, + "node_modules/sockjs": { + "version": "0.3.24", + "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.24.tgz", + "integrity": "sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==", + "dev": true, + "dependencies": { + "faye-websocket": "^0.11.3", + "uuid": "^8.3.2", + "websocket-driver": "^0.7.4" + } + }, + "node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-js": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", + "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "dev": true, + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/space-separated-tokens": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-1.1.5.tgz", + "integrity": "sha512-q/JSVd1Lptzhf5bkYm4ob4iWPjx0KiRe3sRFBNrVqbJkFaBm5vbbowy1mymoPNLRa52+oadOhJ+K49wsSeSjTA==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/spdx-correct": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz", + "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==", + "dev": true, + "dependencies": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-exceptions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", + "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", + "dev": true + }, + "node_modules/spdx-expression-parse": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", + "dev": true, + "dependencies": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-license-ids": { + "version": "3.0.13", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.13.tgz", + "integrity": "sha512-XkD+zwiqXHikFZm4AX/7JSCXA98U5Db4AFd5XUg/+9UNtnH75+Z9KxtpYiJZx36mUDVOwH83pl7yvCer6ewM3w==", + "dev": true + }, + "node_modules/spdy": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz", + "integrity": "sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==", + "dev": true, + "dependencies": { + "debug": "^4.1.0", + "handle-thing": "^2.0.0", + "http-deceiver": "^1.2.7", + "select-hose": "^2.0.0", + "spdy-transport": "^3.0.0" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/spdy-transport": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz", + "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==", + "dev": true, + "dependencies": { + "debug": "^4.1.0", + "detect-node": "^2.0.4", + "hpack.js": "^2.1.6", + "obuf": "^1.1.2", + "readable-stream": "^3.0.6", + "wbuf": "^1.7.3" + } + }, + "node_modules/spdy-transport/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/spdy-transport/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/spdy/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/spdy/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", + "dev": true + }, + "node_modules/stack-utils": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", + "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==", + "dev": true, + "dependencies": { + "escape-string-regexp": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/stack-utils/node_modules/escape-string-regexp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", + "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/stackframe": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/stackframe/-/stackframe-1.3.4.tgz", + "integrity": "sha512-oeVtt7eWQS+Na6F//S4kJ2K2VbRlS9D43mAlMyVpVWovy9o+jfgH8O9agzANzaiLjclA0oYzUXEM4PurhSUChw==", + "dev": true + }, + "node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/stop-iteration-iterator": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/stop-iteration-iterator/-/stop-iteration-iterator-1.0.0.tgz", + "integrity": "sha512-iCGQj+0l0HOdZ2AEeBADlsRC+vsnDsZsbdSiH1yNSjcfKM7fdpCMfqAL/dwF5BLiw/XhRft/Wax6zQbhq2BcjQ==", + "dev": true, + "dependencies": { + "internal-slot": "^1.0.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/store2": { + "version": "2.14.2", + "resolved": "https://registry.npmjs.org/store2/-/store2-2.14.2.tgz", + "integrity": "sha512-siT1RiqlfQnGqgT/YzXVUNsom9S0H1OX+dpdGN1xkyYATo4I6sep5NmsRD/40s3IIOvlCq6akxkqG82urIZW1w==", + "dev": true + }, + "node_modules/storybook": { + "version": "7.2.1", + "resolved": "https://registry.npmjs.org/storybook/-/storybook-7.2.1.tgz", + "integrity": "sha512-uNNqJrWUVaxdZdd3GpMTHt9h2EftoUKxtpAWeQlzx20DDvcliVC1yvLT54sLAzY8nlxxN+fBUuBbTSJ1Dx4TPg==", + "dev": true, + "dependencies": { + "@storybook/cli": "7.2.1" + }, + "bin": { + "sb": "index.js", + "storybook": "index.js" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + } + }, + "node_modules/stream-shift": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.1.tgz", + "integrity": "sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==", + "dev": true + }, + "node_modules/strict-event-emitter": { + "version": "0.4.6", + "resolved": "https://registry.npmjs.org/strict-event-emitter/-/strict-event-emitter-0.4.6.tgz", + "integrity": "sha512-12KWeb+wixJohmnwNFerbyiBrAlq5qJLwIt38etRtKtmmHyDSoGlIqFE9wx+4IwG0aDjI7GV8tc8ZccjWZZtTg==", + "dev": true + }, + "node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/string-length": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", + "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==", + "dev": true, + "dependencies": { + "char-regex": "^1.0.2", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs": { + "name": "string-width", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi-cjs": { + "name": "strip-ansi", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-bom": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", + "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/strip-indent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", + "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==", + "dev": true, + "dependencies": { + "min-indent": "^1.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/style-loader": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-3.3.3.tgz", + "integrity": "sha512-53BiGLXAcll9maCYtZi2RCQZKa8NQQai5C4horqKyRmHj9H7QmcUyucrH+4KW/gBQbXM2AsB0axoEcFZPlfPcw==", + "dev": true, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.0.0" + } + }, + "node_modules/styled-components": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/styled-components/-/styled-components-6.0.4.tgz", + "integrity": "sha512-lRJt4vg8hKJhlVG+VKz8QEqPCXKyTryZZ59odyK0UC0HHV3u/mshWTfSay8NpkN0Xijw1iN9r0Leld3dcCcp/w==", + "dependencies": { + "@babel/cli": "^7.21.0", + "@babel/core": "^7.21.0", + "@babel/helper-module-imports": "^7.18.6", + "@babel/plugin-external-helpers": "^7.18.6", + "@babel/plugin-proposal-class-properties": "^7.18.6", + "@babel/plugin-proposal-object-rest-spread": "^7.20.7", + "@babel/preset-env": "^7.20.2", + "@babel/preset-react": "^7.18.6", + "@babel/preset-typescript": "^7.21.0", + "@babel/traverse": "^7.21.2", + "@emotion/is-prop-valid": "^1.2.1", + "@emotion/unitless": "^0.8.0", + "@types/stylis": "^4.0.2", + "css-to-react-native": "^3.2.0", + "csstype": "^3.1.2", + "postcss": "^8.4.23", + "shallowequal": "^1.1.0", + "stylis": "^4.3.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">= 16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/styled-components" + }, + "peerDependencies": { + "babel-plugin-styled-components": ">= 2", + "react": ">= 16.8.0", + "react-dom": ">= 16.8.0" + }, + "peerDependenciesMeta": { + "babel-plugin-styled-components": { + "optional": true + } + } + }, + "node_modules/stylis": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.3.0.tgz", + "integrity": "sha512-E87pIogpwUsUwXw7dNyU4QDjdgVMy52m+XEOPEKUn161cCzWjjhPSQhByfd1CcNvrOLnXQ6OnnZDwnJrz/Z4YQ==" + }, + "node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/swc-loader": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/swc-loader/-/swc-loader-0.2.3.tgz", + "integrity": "sha512-D1p6XXURfSPleZZA/Lipb3A8pZ17fP4NObZvFCDjK/OKljroqDpPmsBdTraWhVBqUNpcWBQY1imWdoPScRlQ7A==", + "dev": true, + "peerDependencies": { + "@swc/core": "^1.2.147", + "webpack": ">=2" + } + }, + "node_modules/symbol-tree": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", + "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", + "dev": true + }, + "node_modules/synchronous-promise": { + "version": "2.0.17", + "resolved": "https://registry.npmjs.org/synchronous-promise/-/synchronous-promise-2.0.17.tgz", + "integrity": "sha512-AsS729u2RHUfEra9xJrE39peJcc2stq2+poBXX8bcM08Y6g9j/i/PUzwNQqkaJde7Ntg1TO7bSREbR5sdosQ+g==", + "dev": true + }, + "node_modules/tapable": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", + "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/tar": { + "version": "6.1.15", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.15.tgz", + "integrity": "sha512-/zKt9UyngnxIT/EAGYuxaMYgOIJiP81ab9ZfkILq4oNLPFX50qyYmu7jRj9qeXoxmJHjGlbH0+cm2uy1WCs10A==", + "dev": true, + "dependencies": { + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "minipass": "^5.0.0", + "minizlib": "^2.1.1", + "mkdirp": "^1.0.3", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/tar-fs": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz", + "integrity": "sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==", + "dev": true, + "dependencies": { + "chownr": "^1.1.1", + "mkdirp-classic": "^0.5.2", + "pump": "^3.0.0", + "tar-stream": "^2.1.4" + } + }, + "node_modules/tar-fs/node_modules/chownr": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", + "dev": true + }, + "node_modules/tar-stream": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", + "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", + "dev": true, + "dependencies": { + "bl": "^4.0.3", + "end-of-stream": "^1.4.1", + "fs-constants": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.1.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/tar/node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "dev": true, + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/tar/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/telejson": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/telejson/-/telejson-7.1.0.tgz", + "integrity": "sha512-jFJO4P5gPebZAERPkJsqMAQ0IMA1Hi0AoSfxpnUaV6j6R2SZqlpkbS20U6dEUtA3RUYt2Ak/mTlkQzHH9Rv/hA==", + "dev": true, + "dependencies": { + "memoizerific": "^1.11.3" + } + }, + "node_modules/temp": { + "version": "0.8.4", + "resolved": "https://registry.npmjs.org/temp/-/temp-0.8.4.tgz", + "integrity": "sha512-s0ZZzd0BzYv5tLSptZooSjK8oj6C+c19p7Vqta9+6NPOf7r+fxq0cJe6/oN4LTC79sy5NY8ucOJNgwsKCSbfqg==", + "dev": true, + "dependencies": { + "rimraf": "~2.6.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/temp-dir": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-2.0.0.tgz", + "integrity": "sha512-aoBAniQmmwtcKp/7BzsH8Cxzv8OL736p7v1ihGb5e9DJ9kTwGWHrQrVB5+lfVDzfGrdRzXch+ig7LHaY1JTOrg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/temp/node_modules/rimraf": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", + "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + } + }, + "node_modules/tempy": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/tempy/-/tempy-1.0.1.tgz", + "integrity": "sha512-biM9brNqxSc04Ee71hzFbryD11nX7VPhQQY32AdDmjFvodsRFz/3ufeoTZ6uYkRFfGo188tENcASNs3vTdsM0w==", + "dev": true, + "dependencies": { + "del": "^6.0.0", + "is-stream": "^2.0.0", + "temp-dir": "^2.0.0", + "type-fest": "^0.16.0", + "unique-string": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/tempy/node_modules/type-fest": { + "version": "0.16.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.16.0.tgz", + "integrity": "sha512-eaBzG6MxNzEn9kiwvtre90cXaNLkmadMWa1zQMs3XORCXNbsH/OewwbxC5ia9dCxIxnTAsSxXJaa/p5y8DlvJg==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/terser": { + "version": "5.18.2", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.18.2.tgz", + "integrity": "sha512-Ah19JS86ypbJzTzvUCX7KOsEIhDaRONungA4aYBjEP3JZRf4ocuDzTg4QWZnPn9DEMiMYGJPiSOy7aykoCc70w==", + "dev": true, + "dependencies": { + "@jridgewell/source-map": "^0.3.3", + "acorn": "^8.8.2", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + }, + "bin": { + "terser": "bin/terser" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/terser-webpack-plugin": { + "version": "5.3.9", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.9.tgz", + "integrity": "sha512-ZuXsqE07EcggTWQjXUj+Aot/OMcD0bMKGgF63f7UxYcu5/AJF53aIpK1YoP5xR9l6s/Hy2b+t1AM0bLNPRuhwA==", + "dev": true, + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.17", + "jest-worker": "^27.4.5", + "schema-utils": "^3.1.1", + "serialize-javascript": "^6.0.1", + "terser": "^5.16.8" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.1.0" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true + }, + "esbuild": { + "optional": true + }, + "uglify-js": { + "optional": true + } + } + }, + "node_modules/test-exclude": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", + "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", + "dev": true, + "dependencies": { + "@istanbuljs/schema": "^0.1.2", + "glob": "^7.1.4", + "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", + "dev": true + }, + "node_modules/through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", + "dev": true + }, + "node_modules/through2": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", + "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", + "dev": true, + "dependencies": { + "readable-stream": "~2.3.6", + "xtend": "~4.0.1" + } + }, + "node_modules/through2/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dev": true, + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/through2/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "node_modules/through2/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/thunky": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", + "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==", + "dev": true + }, + "node_modules/tiny-invariant": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.3.1.tgz", + "integrity": "sha512-AD5ih2NlSssTCwsMznbvwMZpJ1cbhkGd2uueNxzv2jDlEeZdU04JQfRnggJQ8DrcVBGjAsCKwFBbDlVNtEMlzw==", + "dev": true + }, + "node_modules/tmp": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "dev": true, + "dependencies": { + "os-tmpdir": "~1.0.2" + }, + "engines": { + "node": ">=0.6.0" + } + }, + "node_modules/tmpl": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", + "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==", + "dev": true + }, + "node_modules/to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", + "engines": { + "node": ">=4" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "devOptional": true, + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/tocbot": { + "version": "4.21.1", + "resolved": "https://registry.npmjs.org/tocbot/-/tocbot-4.21.1.tgz", + "integrity": "sha512-IfajhBTeg0HlMXu1f+VMbPef05QpDTsZ9X2Yn1+8npdaXsXg/+wrm9Ze1WG5OS1UDC3qJ5EQN/XOZ3gfXjPFCw==", + "dev": true + }, + "node_modules/toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "dev": true, + "engines": { + "node": ">=0.6" + } + }, + "node_modules/tough-cookie": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.3.tgz", + "integrity": "sha512-aX/y5pVRkfRnfmuX+OdbSdXvPe6ieKX/G2s7e98f4poJHnqH3281gDPm/metm6E/WRamfx7WC4HUqkWHfQHprw==", + "dev": true, + "dependencies": { + "psl": "^1.1.33", + "punycode": "^2.1.1", + "universalify": "^0.2.0", + "url-parse": "^1.5.3" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", + "dev": true + }, + "node_modules/ts-dedent": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/ts-dedent/-/ts-dedent-2.2.0.tgz", + "integrity": "sha512-q5W7tVM71e2xjHZTlgfTDoPF/SmqKG5hddq9SzR49CH2hayqRKJtQ4mtRlSxKaJlR/+9rEM+mnBHf7I2/BQcpQ==", + "dev": true, + "engines": { + "node": ">=6.10" + } + }, + "node_modules/ts-jest": { + "version": "29.1.1", + "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-29.1.1.tgz", + "integrity": "sha512-D6xjnnbP17cC85nliwGiL+tpoKN0StpgE0TeOjXQTU6MVCfsB4v7aW05CgQ/1OywGb0x/oy9hHFnN+sczTiRaA==", + "dev": true, + "dependencies": { + "bs-logger": "0.x", + "fast-json-stable-stringify": "2.x", + "jest-util": "^29.0.0", + "json5": "^2.2.3", + "lodash.memoize": "4.x", + "make-error": "1.x", + "semver": "^7.5.3", + "yargs-parser": "^21.0.1" + }, + "bin": { + "ts-jest": "cli.js" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "@babel/core": ">=7.0.0-beta.0 <8", + "@jest/types": "^29.0.0", + "babel-jest": "^29.0.0", + "jest": "^29.0.0", + "typescript": ">=4.3 <6" + }, + "peerDependenciesMeta": { + "@babel/core": { + "optional": true + }, + "@jest/types": { + "optional": true + }, + "babel-jest": { + "optional": true + }, + "esbuild": { + "optional": true + } + } + }, + "node_modules/ts-jest/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/ts-jest/node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/ts-jest/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/tslib": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.0.tgz", + "integrity": "sha512-7At1WUettjcSRHXCyYtTselblcHl9PJFFVKiCAy/bY97+BPZXSQ2wbq0P9s8tK2G7dFQfNnlJnPAiArVBVBsfA==" + }, + "node_modules/tsutils": { + "version": "3.21.0", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", + "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", + "dev": true, + "dependencies": { + "tslib": "^1.8.1" + }, + "engines": { + "node": ">= 6" + }, + "peerDependencies": { + "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" + } + }, + "node_modules/tsutils/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + }, + "node_modules/tween-functions": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/tween-functions/-/tween-functions-1.2.0.tgz", + "integrity": "sha512-PZBtLYcCLtEcjL14Fzb1gSxPBeL7nWvGhO5ZFPGqziCcr8uvHp0NDmdjBchp6KHL+tExcg0m3NISmKxhU394dA==", + "dev": true + }, + "node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/type-detect": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "dev": true, + "dependencies": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==", + "dev": true + }, + "node_modules/typescript": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.1.6.tgz", + "integrity": "sha512-zaWCozRZ6DLEWAWFrVDz1H6FVXzUSfTy5FUMWsQlU8Ym5JP9eO4xkTIROFCQvhQf61z6O/G6ugw3SgAnvvm+HA==", + "dev": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/uglify-js": { + "version": "3.17.4", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.17.4.tgz", + "integrity": "sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==", + "dev": true, + "optional": true, + "bin": { + "uglifyjs": "bin/uglifyjs" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/unicode-canonical-property-names-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz", + "integrity": "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==", + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-match-property-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", + "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", + "dependencies": { + "unicode-canonical-property-names-ecmascript": "^2.0.0", + "unicode-property-aliases-ecmascript": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-match-property-value-ecmascript": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz", + "integrity": "sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==", + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-property-aliases-ecmascript": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz", + "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==", + "engines": { + "node": ">=4" + } + }, + "node_modules/unique-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", + "integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==", + "dev": true, + "dependencies": { + "crypto-random-string": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/unist-util-is": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-4.1.0.tgz", + "integrity": "sha512-ZOQSsnce92GrxSqlnEEseX0gi7GH9zTJZ0p9dtu87WRb/37mMPO2Ilx1s/t9vBHrFhbgweUwb+t7cIn5dxPhZg==", + "dev": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-visit": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-2.0.3.tgz", + "integrity": "sha512-iJ4/RczbJMkD0712mGktuGpm/U4By4FfDonL7N/9tATGIF4imikjOuagyMY53tnZq3NP6BcmlrHhEKAfGWjh7Q==", + "dev": true, + "dependencies": { + "@types/unist": "^2.0.0", + "unist-util-is": "^4.0.0", + "unist-util-visit-parents": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-visit-parents": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-3.1.1.tgz", + "integrity": "sha512-1KROIZWo6bcMrZEwiH2UrXDyalAa0uqzWCxCJj6lPOvTve2WkfgCytoDTPaMnodXh1WrXOq0haVYHj99ynJlsg==", + "dev": true, + "dependencies": { + "@types/unist": "^2.0.0", + "unist-util-is": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/universalify": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz", + "integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==", + "dev": true, + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/unplugin": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/unplugin/-/unplugin-1.4.0.tgz", + "integrity": "sha512-5x4eIEL6WgbzqGtF9UV8VEC/ehKptPXDS6L2b0mv4FRMkJxRtjaJfOWDd6a8+kYbqsjklix7yWP0N3SUepjXcg==", + "dev": true, + "dependencies": { + "acorn": "^8.9.0", + "chokidar": "^3.5.3", + "webpack-sources": "^3.2.3", + "webpack-virtual-modules": "^0.5.0" + } + }, + "node_modules/untildify": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/untildify/-/untildify-4.0.0.tgz", + "integrity": "sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/update-browserslist-db": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz", + "integrity": "sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "escalade": "^3.1.1", + "picocolors": "^1.0.0" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/url": { + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/url/-/url-0.11.1.tgz", + "integrity": "sha512-rWS3H04/+mzzJkv0eZ7vEDGiQbgquI1fGfOad6zKvgYQi1SzMmhl7c/DdRGxhaWrVH6z0qWITo8rpnxK/RfEhA==", + "dev": true, + "dependencies": { + "punycode": "^1.4.1", + "qs": "^6.11.0" + } + }, + "node_modules/url-parse": { + "version": "1.5.10", + "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz", + "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==", + "dev": true, + "dependencies": { + "querystringify": "^2.1.1", + "requires-port": "^1.0.0" + } + }, + "node_modules/url/node_modules/punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==", + "dev": true + }, + "node_modules/use-callback-ref": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/use-callback-ref/-/use-callback-ref-1.3.0.tgz", + "integrity": "sha512-3FT9PRuRdbB9HfXhEq35u4oZkvpJ5kuYbpqhCfmiZyReuRgpnhDlbr2ZEnnuS0RrJAPn6l23xjFg9kpDM+Ms7w==", + "dev": true, + "dependencies": { + "tslib": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/use-resize-observer": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/use-resize-observer/-/use-resize-observer-9.1.0.tgz", + "integrity": "sha512-R25VqO9Wb3asSD4eqtcxk8sJalvIOYBqS8MNZlpDSQ4l4xMQxC/J7Id9HoTqPq8FwULIn0PVW+OAqF2dyYbjow==", + "dev": true, + "dependencies": { + "@juggle/resize-observer": "^3.3.1" + }, + "peerDependencies": { + "react": "16.8.0 - 18", + "react-dom": "16.8.0 - 18" + } + }, + "node_modules/use-sidecar": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/use-sidecar/-/use-sidecar-1.1.2.tgz", + "integrity": "sha512-epTbsLuzZ7lPClpz2TyryBfztm7m+28DlEv2ZCQ3MDr5ssiwyOwGH/e5F9CkfWjJ1t4clvI58yF822/GUkjjhw==", + "dev": true, + "dependencies": { + "detect-node-es": "^1.1.0", + "tslib": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@types/react": "^16.9.0 || ^17.0.0 || ^18.0.0", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/util": { + "version": "0.12.5", + "resolved": "https://registry.npmjs.org/util/-/util-0.12.5.tgz", + "integrity": "sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==", + "dev": true, + "dependencies": { + "inherits": "^2.0.3", + "is-arguments": "^1.0.4", + "is-generator-function": "^1.0.7", + "is-typed-array": "^1.1.3", + "which-typed-array": "^1.1.2" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "dev": true + }, + "node_modules/utila": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/utila/-/utila-0.4.0.tgz", + "integrity": "sha512-Z0DbgELS9/L/75wZbro8xAnT50pBVFQZ+hUEueGDU5FN51YSCYM+jdxsfCiHjwNP/4LCDD0i/graKpeBnOXKRA==", + "dev": true + }, + "node_modules/utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", + "dev": true, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "dev": true, + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/v8-to-istanbul": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.1.0.tgz", + "integrity": "sha512-6z3GW9x8G1gd+JIIgQQQxXuiJtCXeAjp6RaPEPLv62mH3iPHPxV6W3robxtCzNErRo6ZwTmzWhsbNvjyEBKzKA==", + "dev": true, + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.12", + "@types/istanbul-lib-coverage": "^2.0.1", + "convert-source-map": "^1.6.0" + }, + "engines": { + "node": ">=10.12.0" + } + }, + "node_modules/validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "dev": true, + "dependencies": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "node_modules/vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/w3c-xmlserializer": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-4.0.0.tgz", + "integrity": "sha512-d+BFHzbiCx6zGfz0HyQ6Rg69w9k19nviJspaj4yNscGjrHu94sVP+aRm75yEbCh+r2/yR+7q6hux9LVtbuTGBw==", + "dev": true, + "dependencies": { + "xml-name-validator": "^4.0.0" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/walker": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", + "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==", + "dev": true, + "dependencies": { + "makeerror": "1.0.12" + } + }, + "node_modules/watchpack": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.0.tgz", + "integrity": "sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==", + "dev": true, + "dependencies": { + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.1.2" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/wbuf": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz", + "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==", + "dev": true, + "dependencies": { + "minimalistic-assert": "^1.0.0" + } + }, + "node_modules/wcwidth": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", + "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", + "dev": true, + "dependencies": { + "defaults": "^1.0.3" + } + }, + "node_modules/web-encoding": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/web-encoding/-/web-encoding-1.1.5.tgz", + "integrity": "sha512-HYLeVCdJ0+lBYV2FvNZmv3HJ2Nt0QYXqZojk3d9FJOLkwnuhzM9tmamh8d7HPM8QqjKH8DeHkFTx+CFlWpZZDA==", + "dev": true, + "dependencies": { + "util": "^0.12.3" + }, + "optionalDependencies": { + "@zxing/text-encoding": "0.9.0" + } + }, + "node_modules/webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", + "dev": true + }, + "node_modules/webpack": { + "version": "5.88.1", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.88.1.tgz", + "integrity": "sha512-FROX3TxQnC/ox4N+3xQoWZzvGXSuscxR32rbzjpXgEzWudJFEJBpdlkkob2ylrv5yzzufD1zph1OoFsLtm6stQ==", + "dev": true, + "dependencies": { + "@types/eslint-scope": "^3.7.3", + "@types/estree": "^1.0.0", + "@webassemblyjs/ast": "^1.11.5", + "@webassemblyjs/wasm-edit": "^1.11.5", + "@webassemblyjs/wasm-parser": "^1.11.5", + "acorn": "^8.7.1", + "acorn-import-assertions": "^1.9.0", + "browserslist": "^4.14.5", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^5.15.0", + "es-module-lexer": "^1.2.1", + "eslint-scope": "5.1.1", + "events": "^3.2.0", + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.2.9", + "json-parse-even-better-errors": "^2.3.1", + "loader-runner": "^4.2.0", + "mime-types": "^2.1.27", + "neo-async": "^2.6.2", + "schema-utils": "^3.2.0", + "tapable": "^2.1.1", + "terser-webpack-plugin": "^5.3.7", + "watchpack": "^2.4.0", + "webpack-sources": "^3.2.3" + }, + "bin": { + "webpack": "bin/webpack.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependenciesMeta": { + "webpack-cli": { + "optional": true + } + } + }, + "node_modules/webpack-cli": { + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-5.1.4.tgz", + "integrity": "sha512-pIDJHIEI9LR0yxHXQ+Qh95k2EvXpWzZ5l+d+jIo+RdSm9MiHfzazIxwwni/p7+x4eJZuvG1AJwgC4TNQ7NRgsg==", + "dev": true, + "dependencies": { + "@discoveryjs/json-ext": "^0.5.0", + "@webpack-cli/configtest": "^2.1.1", + "@webpack-cli/info": "^2.0.2", + "@webpack-cli/serve": "^2.0.5", + "colorette": "^2.0.14", + "commander": "^10.0.1", + "cross-spawn": "^7.0.3", + "envinfo": "^7.7.3", + "fastest-levenshtein": "^1.0.12", + "import-local": "^3.0.2", + "interpret": "^3.1.1", + "rechoir": "^0.8.0", + "webpack-merge": "^5.7.3" + }, + "bin": { + "webpack-cli": "bin/cli.js" + }, + "engines": { + "node": ">=14.15.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "5.x.x" + }, + "peerDependenciesMeta": { + "@webpack-cli/generators": { + "optional": true + }, + "webpack-bundle-analyzer": { + "optional": true + }, + "webpack-dev-server": { + "optional": true + } + } + }, + "node_modules/webpack-cli/node_modules/commander": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz", + "integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==", + "dev": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/webpack-dev-middleware": { + "version": "5.3.3", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-5.3.3.tgz", + "integrity": "sha512-hj5CYrY0bZLB+eTO+x/j67Pkrquiy7kWepMHmUMoPsmcUaeEnQJqFzHJOyxgWlq746/wUuA64p9ta34Kyb01pA==", + "dev": true, + "dependencies": { + "colorette": "^2.0.10", + "memfs": "^3.4.3", + "mime-types": "^2.1.31", + "range-parser": "^1.2.1", + "schema-utils": "^4.0.0" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^4.0.0 || ^5.0.0" + } + }, + "node_modules/webpack-dev-middleware/node_modules/ajv": { + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", + "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/webpack-dev-middleware/node_modules/ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.3" + }, + "peerDependencies": { + "ajv": "^8.8.2" + } + }, + "node_modules/webpack-dev-middleware/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true + }, + "node_modules/webpack-dev-middleware/node_modules/schema-utils": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.2.0.tgz", + "integrity": "sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.9.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.1.0" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/webpack-dev-server": { + "version": "4.15.1", + "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.15.1.tgz", + "integrity": "sha512-5hbAst3h3C3L8w6W4P96L5vaV0PxSmJhxZvWKYIdgxOQm8pNZ5dEOmmSLBVpP85ReeyRt6AS1QJNyo/oFFPeVA==", + "dev": true, + "dependencies": { + "@types/bonjour": "^3.5.9", + "@types/connect-history-api-fallback": "^1.3.5", + "@types/express": "^4.17.13", + "@types/serve-index": "^1.9.1", + "@types/serve-static": "^1.13.10", + "@types/sockjs": "^0.3.33", + "@types/ws": "^8.5.5", + "ansi-html-community": "^0.0.8", + "bonjour-service": "^1.0.11", + "chokidar": "^3.5.3", + "colorette": "^2.0.10", + "compression": "^1.7.4", + "connect-history-api-fallback": "^2.0.0", + "default-gateway": "^6.0.3", + "express": "^4.17.3", + "graceful-fs": "^4.2.6", + "html-entities": "^2.3.2", + "http-proxy-middleware": "^2.0.3", + "ipaddr.js": "^2.0.1", + "launch-editor": "^2.6.0", + "open": "^8.0.9", + "p-retry": "^4.5.0", + "rimraf": "^3.0.2", + "schema-utils": "^4.0.0", + "selfsigned": "^2.1.1", + "serve-index": "^1.9.1", + "sockjs": "^0.3.24", + "spdy": "^4.0.2", + "webpack-dev-middleware": "^5.3.1", + "ws": "^8.13.0" + }, + "bin": { + "webpack-dev-server": "bin/webpack-dev-server.js" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^4.37.0 || ^5.0.0" + }, + "peerDependenciesMeta": { + "webpack": { + "optional": true + }, + "webpack-cli": { + "optional": true + } + } + }, + "node_modules/webpack-dev-server/node_modules/ajv": { + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", + "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/webpack-dev-server/node_modules/ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.3" + }, + "peerDependencies": { + "ajv": "^8.8.2" + } + }, + "node_modules/webpack-dev-server/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true + }, + "node_modules/webpack-dev-server/node_modules/schema-utils": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.2.0.tgz", + "integrity": "sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.9.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.1.0" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/webpack-hot-middleware": { + "version": "2.25.4", + "resolved": "https://registry.npmjs.org/webpack-hot-middleware/-/webpack-hot-middleware-2.25.4.tgz", + "integrity": "sha512-IRmTspuHM06aZh98OhBJtqLpeWFM8FXJS5UYpKYxCJzyFoyWj1w6VGFfomZU7OPA55dMLrQK0pRT1eQ3PACr4w==", + "dev": true, + "dependencies": { + "ansi-html-community": "0.0.8", + "html-entities": "^2.1.0", + "strip-ansi": "^6.0.0" + } + }, + "node_modules/webpack-merge": { + "version": "5.9.0", + "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.9.0.tgz", + "integrity": "sha512-6NbRQw4+Sy50vYNTw7EyOn41OZItPiXB8GNv3INSoe3PSFaHJEz3SHTrYVaRm2LilNGnFUzh0FAwqPEmU/CwDg==", + "dev": true, + "dependencies": { + "clone-deep": "^4.0.1", + "wildcard": "^2.0.0" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/webpack-sources": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", + "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", + "dev": true, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/webpack-virtual-modules": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/webpack-virtual-modules/-/webpack-virtual-modules-0.5.0.tgz", + "integrity": "sha512-kyDivFZ7ZM0BVOUteVbDFhlRt7Ah/CSPwJdi8hBpkK7QLumUqdLtVfm/PX/hkcnrvr0i77fO5+TjZ94Pe+C9iw==", + "dev": true + }, + "node_modules/websocket-driver": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz", + "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==", + "dev": true, + "dependencies": { + "http-parser-js": ">=0.5.1", + "safe-buffer": ">=5.1.0", + "websocket-extensions": ">=0.1.1" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/websocket-extensions": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz", + "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/whatwg-encoding": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-2.0.0.tgz", + "integrity": "sha512-p41ogyeMUrw3jWclHWTQg1k05DSVXPLcVxRTYsXUk+ZooOCZLcoYgPZ/HL/D/N+uQPOtcp1me1WhBEaX02mhWg==", + "dev": true, + "dependencies": { + "iconv-lite": "0.6.3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/whatwg-encoding/node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "dev": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/whatwg-mimetype": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-3.0.0.tgz", + "integrity": "sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q==", + "dev": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "dev": true, + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/which-boxed-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", + "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", + "dev": true, + "dependencies": { + "is-bigint": "^1.0.1", + "is-boolean-object": "^1.1.0", + "is-number-object": "^1.0.4", + "is-string": "^1.0.5", + "is-symbol": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-collection": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.1.tgz", + "integrity": "sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A==", + "dev": true, + "dependencies": { + "is-map": "^2.0.1", + "is-set": "^2.0.1", + "is-weakmap": "^2.0.1", + "is-weakset": "^2.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-typed-array": { + "version": "1.1.10", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.10.tgz", + "integrity": "sha512-uxoA5vLUfRPdjCuJ1h5LlYdmTLbYfums398v3WLkM+i/Wltl2/XyZpQWKbN++ck5L64SR/grOHqtXCUKmlZPNA==", + "dev": true, + "dependencies": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.0", + "is-typed-array": "^1.1.10" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/wildcard": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.1.tgz", + "integrity": "sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==", + "dev": true + }, + "node_modules/wordwrap": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", + "integrity": "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==", + "dev": true + }, + "node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs": { + "name": "wrap-ansi", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/wrap-ansi/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/wrap-ansi/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/wrap-ansi/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" + }, + "node_modules/write-file-atomic": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz", + "integrity": "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==", + "dev": true, + "dependencies": { + "imurmurhash": "^0.1.4", + "signal-exit": "^3.0.7" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/ws": { + "version": "8.13.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.13.0.tgz", + "integrity": "sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==", + "dev": true, + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/xml-name-validator": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-4.0.0.tgz", + "integrity": "sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==", + "dev": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/xmlchars": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", + "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==", + "dev": true + }, + "node_modules/xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "dev": true, + "engines": { + "node": ">=0.4" + } + }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" + }, + "node_modules/yaml": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", + "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "dev": true, + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "dev": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/yauzl": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", + "integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==", + "dev": true, + "dependencies": { + "buffer-crc32": "~0.2.3", + "fd-slicer": "~1.1.0" + } + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + } + } +} diff --git a/frontend/package.json b/frontend/package.json new file mode 100644 index 000000000..67a3565b3 --- /dev/null +++ b/frontend/package.json @@ -0,0 +1,69 @@ +{ + "name": "baton", + "version": "1.0.0", + "description": "코드 리뷰를 주고 받을 수 있는 서비스", + "main": "index.js", + "scripts": { + "dev": "webpack-dev-server --config webpack/webpack.dev.js", + "build": "webpack --config webpack/webpack.prod.js", + "test": "jest", + "storybook": "storybook dev -p 6006", + "build-storybook": "storybook build" + }, + "keywords": [], + "author": "", + "license": "ISC", + "dependencies": { + "@types/react": "^18.2.14", + "@types/react-dom": "^18.2.6", + "core-js": "^3.31.1", + "dotenv": "^16.3.1", + "react": "^18.2.0", + "react-dom": "^18.2.0", + "react-router-dom": "^6.14.2", + "styled-components": "^6.0.4" + }, + "devDependencies": { + "@babel/core": "^7.22.5", + "@babel/preset-env": "^7.22.5", + "@babel/preset-react": "^7.22.5", + "@babel/preset-typescript": "^7.22.5", + "@storybook/addon-essentials": "^7.2.1", + "@storybook/addon-interactions": "^7.2.1", + "@storybook/addon-links": "^7.2.1", + "@storybook/addon-onboarding": "^1.0.8", + "@storybook/addon-styling": "^1.3.5", + "@storybook/blocks": "^7.2.1", + "@storybook/react": "^7.2.1", + "@storybook/react-webpack5": "^7.2.1", + "@storybook/testing-library": "^0.2.0", + "@testing-library/jest-dom": "^5.17.0", + "@testing-library/react": "^14.0.0", + "@types/jest": "^29.5.3", + "@types/styled-components": "^5.1.26", + "babel-loader": "^9.1.2", + "eslint": "^8.44.0", + "eslint-config-prettier": "^8.8.0", + "eslint-plugin-prettier": "^4.2.1", + "eslint-plugin-storybook": "^0.6.13", + "html-webpack-plugin": "^5.5.3", + "jest": "^29.6.1", + "jest-environment-jsdom": "^29.6.1", + "msw": "^1.2.3", + "prettier": "^2.8.8", + "storybook": "^7.2.1", + "ts-jest": "^29.1.1", + "typescript": "^5.1.6", + "webpack": "^5.88.1", + "webpack-cli": "^5.1.4", + "webpack-dev-server": "^4.15.1" + }, + "msw": { + "workerDirectory": "public" + }, + "eslintConfig": { + "extends": [ + "plugin:storybook/recommended" + ] + } +} diff --git a/frontend/public/index.html b/frontend/public/index.html new file mode 100644 index 000000000..e993ef6e4 --- /dev/null +++ b/frontend/public/index.html @@ -0,0 +1,15 @@ +<!DOCTYPE html> +<html lang="ko"> + <head> + <meta charset="utf-8" /> + <meta name="viewport" content="width=device-width, initial-scale=1" /> + <meta name="theme-color" content="#000000" /> + <meta name="description" content="코드 리뷰를 주고 받을 수 있는 서비스" /> + <title>Baton</title> + </head> + <body> + <div id="root"></div> + <div id="modal-root"></div> + <div id="toast-root"></div> + </body> +</html> diff --git a/frontend/public/mockServiceWorker.js b/frontend/public/mockServiceWorker.js new file mode 100644 index 000000000..36a992745 --- /dev/null +++ b/frontend/public/mockServiceWorker.js @@ -0,0 +1,303 @@ +/* eslint-disable */ +/* tslint:disable */ + +/** + * Mock Service Worker (1.2.3). + * @see https://github.com/mswjs/msw + * - Please do NOT modify this file. + * - Please do NOT serve this file on production. + */ + +const INTEGRITY_CHECKSUM = '3d6b9f06410d179a7f7404d4bf4c3c70' +const activeClientIds = new Set() + +self.addEventListener('install', function () { + self.skipWaiting() +}) + +self.addEventListener('activate', function (event) { + event.waitUntil(self.clients.claim()) +}) + +self.addEventListener('message', async function (event) { + const clientId = event.source.id + + if (!clientId || !self.clients) { + return + } + + const client = await self.clients.get(clientId) + + if (!client) { + return + } + + const allClients = await self.clients.matchAll({ + type: 'window', + }) + + switch (event.data) { + case 'KEEPALIVE_REQUEST': { + sendToClient(client, { + type: 'KEEPALIVE_RESPONSE', + }) + break + } + + case 'INTEGRITY_CHECK_REQUEST': { + sendToClient(client, { + type: 'INTEGRITY_CHECK_RESPONSE', + payload: INTEGRITY_CHECKSUM, + }) + break + } + + case 'MOCK_ACTIVATE': { + activeClientIds.add(clientId) + + sendToClient(client, { + type: 'MOCKING_ENABLED', + payload: true, + }) + break + } + + case 'MOCK_DEACTIVATE': { + activeClientIds.delete(clientId) + break + } + + case 'CLIENT_CLOSED': { + activeClientIds.delete(clientId) + + const remainingClients = allClients.filter((client) => { + return client.id !== clientId + }) + + // Unregister itself when there are no more clients + if (remainingClients.length === 0) { + self.registration.unregister() + } + + break + } + } +}) + +self.addEventListener('fetch', function (event) { + const { request } = event + const accept = request.headers.get('accept') || '' + + // Bypass server-sent events. + if (accept.includes('text/event-stream')) { + return + } + + // Bypass navigation requests. + if (request.mode === 'navigate') { + return + } + + // Opening the DevTools triggers the "only-if-cached" request + // that cannot be handled by the worker. Bypass such requests. + if (request.cache === 'only-if-cached' && request.mode !== 'same-origin') { + return + } + + // Bypass all requests when there are no active clients. + // Prevents the self-unregistered worked from handling requests + // after it's been deleted (still remains active until the next reload). + if (activeClientIds.size === 0) { + return + } + + // Generate unique request ID. + const requestId = Math.random().toString(16).slice(2) + + event.respondWith( + handleRequest(event, requestId).catch((error) => { + if (error.name === 'NetworkError') { + console.warn( + '[MSW] Successfully emulated a network error for the "%s %s" request.', + request.method, + request.url, + ) + return + } + + // At this point, any exception indicates an issue with the original request/response. + console.error( + `\ +[MSW] Caught an exception from the "%s %s" request (%s). This is probably not a problem with Mock Service Worker. There is likely an additional logging output above.`, + request.method, + request.url, + `${error.name}: ${error.message}`, + ) + }), + ) +}) + +async function handleRequest(event, requestId) { + const client = await resolveMainClient(event) + const response = await getResponse(event, client, requestId) + + // Send back the response clone for the "response:*" life-cycle events. + // Ensure MSW is active and ready to handle the message, otherwise + // this message will pend indefinitely. + if (client && activeClientIds.has(client.id)) { + ;(async function () { + const clonedResponse = response.clone() + sendToClient(client, { + type: 'RESPONSE', + payload: { + requestId, + type: clonedResponse.type, + ok: clonedResponse.ok, + status: clonedResponse.status, + statusText: clonedResponse.statusText, + body: + clonedResponse.body === null ? null : await clonedResponse.text(), + headers: Object.fromEntries(clonedResponse.headers.entries()), + redirected: clonedResponse.redirected, + }, + }) + })() + } + + return response +} + +// Resolve the main client for the given event. +// Client that issues a request doesn't necessarily equal the client +// that registered the worker. It's with the latter the worker should +// communicate with during the response resolving phase. +async function resolveMainClient(event) { + const client = await self.clients.get(event.clientId) + + if (client?.frameType === 'top-level') { + return client + } + + const allClients = await self.clients.matchAll({ + type: 'window', + }) + + return allClients + .filter((client) => { + // Get only those clients that are currently visible. + return client.visibilityState === 'visible' + }) + .find((client) => { + // Find the client ID that's recorded in the + // set of clients that have registered the worker. + return activeClientIds.has(client.id) + }) +} + +async function getResponse(event, client, requestId) { + const { request } = event + const clonedRequest = request.clone() + + function passthrough() { + // Clone the request because it might've been already used + // (i.e. its body has been read and sent to the client). + const headers = Object.fromEntries(clonedRequest.headers.entries()) + + // Remove MSW-specific request headers so the bypassed requests + // comply with the server's CORS preflight check. + // Operate with the headers as an object because request "Headers" + // are immutable. + delete headers['x-msw-bypass'] + + return fetch(clonedRequest, { headers }) + } + + // Bypass mocking when the client is not active. + if (!client) { + return passthrough() + } + + // Bypass initial page load requests (i.e. static assets). + // The absence of the immediate/parent client in the map of the active clients + // means that MSW hasn't dispatched the "MOCK_ACTIVATE" event yet + // and is not ready to handle requests. + if (!activeClientIds.has(client.id)) { + return passthrough() + } + + // Bypass requests with the explicit bypass header. + // Such requests can be issued by "ctx.fetch()". + if (request.headers.get('x-msw-bypass') === 'true') { + return passthrough() + } + + // Notify the client that a request has been intercepted. + const clientMessage = await sendToClient(client, { + type: 'REQUEST', + payload: { + id: requestId, + url: request.url, + method: request.method, + headers: Object.fromEntries(request.headers.entries()), + cache: request.cache, + mode: request.mode, + credentials: request.credentials, + destination: request.destination, + integrity: request.integrity, + redirect: request.redirect, + referrer: request.referrer, + referrerPolicy: request.referrerPolicy, + body: await request.text(), + bodyUsed: request.bodyUsed, + keepalive: request.keepalive, + }, + }) + + switch (clientMessage.type) { + case 'MOCK_RESPONSE': { + return respondWithMock(clientMessage.data) + } + + case 'MOCK_NOT_FOUND': { + return passthrough() + } + + case 'NETWORK_ERROR': { + const { name, message } = clientMessage.data + const networkError = new Error(message) + networkError.name = name + + // Rejecting a "respondWith" promise emulates a network error. + throw networkError + } + } + + return passthrough() +} + +function sendToClient(client, message) { + return new Promise((resolve, reject) => { + const channel = new MessageChannel() + + channel.port1.onmessage = (event) => { + if (event.data && event.data.error) { + return reject(event.data.error) + } + + resolve(event.data) + } + + client.postMessage(message, [channel.port2]) + }) +} + +function sleep(timeMs) { + return new Promise((resolve) => { + setTimeout(resolve, timeMs) + }) +} + +async function respondWithMock(response) { + await sleep(response.delay) + return new Response(response.body, response) +} diff --git a/frontend/src/App.tsx b/frontend/src/App.tsx new file mode 100644 index 000000000..ff27f2011 --- /dev/null +++ b/frontend/src/App.tsx @@ -0,0 +1,27 @@ +import React from 'react'; +import { styled } from 'styled-components'; +import { Outlet } from 'react-router-dom'; +import { useToken } from './hooks/useToken'; +import ToastProvider from './contexts/ToastContext'; + +const App = () => { + const { validateToken } = useToken(); + + validateToken(); + + return ( + <ToastProvider> + <S.AppContainer> + <Outlet /> + </S.AppContainer> + </ToastProvider> + ); +}; + +export default App; + +const S = { + AppContainer: styled.div` + width: 100%; + `, +}; diff --git a/frontend/src/__test__/components.test.tsx b/frontend/src/__test__/components.test.tsx new file mode 100644 index 000000000..993508cf2 --- /dev/null +++ b/frontend/src/__test__/components.test.tsx @@ -0,0 +1,34 @@ +import React from 'react'; +import { render } from '@testing-library/react'; +import PostTagList from '@/components/PostTagList/PostTagList'; +import ConfirmModal from '@/components/ConfirmModal/ConfirmModal'; + +describe('컴포넌트를 렌더링 한다.', () => { + test('PostTagList: 개발 언어 태그 렌더링', () => { + const data = ['React', 'JS', 'TS', '개인프로젝트', '대학생']; + + const component = render(<PostTagList tags={data} />); + + data.forEach((tag) => { + component.getByText(`#${tag}`); + }); + }); + + test('ConfirmModal: 확인 모달창 렌더링 ', () => { + const confirmMessage = '정말 삭제하시겠습니까?'; + const closeModal = jest.fn(); + const handleClickConfirmButton = jest.fn(); + + render(<div id="modal-root"></div>); + + const modal = render( + <ConfirmModal + contents={confirmMessage} + closeModal={closeModal} + handleClickConfirmButton={handleClickConfirmButton} + />, + ); + + modal.getByText(`${confirmMessage}`); + }); +}); diff --git a/frontend/src/api/fetch.ts b/frontend/src/api/fetch.ts new file mode 100644 index 000000000..eb14e0913 --- /dev/null +++ b/frontend/src/api/fetch.ts @@ -0,0 +1,88 @@ +import { BATON_BASE_URL } from '@/constants'; +interface customError { + errorCode: string; + message: string; +} + +const fetchAPI = async (url: string, options: RequestInit) => { + const response = await fetch(`${BATON_BASE_URL}${url}`, options); + + if (!response.ok) { + const error: customError = await response.json(); + + throw new Error(error.message); + } + return response; +}; + +export const getRequest = async (url: string, token?: string) => { + const response = await fetchAPI( + url, + token + ? { + method: 'GET', + headers: { + Authorization: `Bearer ${token}`, + }, + } + : { + method: 'GET', + }, + ); + + return response; +}; + +export const postRequest = async (url: string, token: string, body: BodyInit) => { + const response = await fetchAPI(url, { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + Authorization: `Bearer ${token}`, + }, + body, + }); + + return response; +}; + +export const deleteRequest = async (url: string, token: string) => { + const response = await fetchAPI(url, { + method: 'DELETE', + headers: { + Authorization: `Bearer ${token}`, + }, + }); + + return response; +}; + +export const putRequest = async (url: string, token: string, body: BodyInit) => { + const response = await fetchAPI(url, { + method: 'PUT', + headers: { + 'Content-Type': 'application/json', + Authorization: `Bearer ${token}`, + }, + body, + }); + + return response; +}; + +export const patchRequest = async (url: string, token: string, body?: BodyInit) => { + const response = await fetchAPI(url, { + method: 'PATCH', + headers: body + ? { + 'Content-Type': 'application/json', + Authorization: `Bearer ${token}`, + } + : { + Authorization: `Bearer ${token}`, + }, + body, + }); + + return response; +}; diff --git a/frontend/src/assets/applicant-icon.svg b/frontend/src/assets/applicant-icon.svg new file mode 100644 index 000000000..7d075c051 --- /dev/null +++ b/frontend/src/assets/applicant-icon.svg @@ -0,0 +1,3 @@ +<svg width="20" height="14" viewBox="0 0 20 14" fill="none" xmlns="http://www.w3.org/2000/svg"> +<path d="M13.8923 7.94134C15.034 8.71634 15.834 9.76634 15.834 11.1663V13.6663H19.1673V11.1663C19.1673 9.34967 16.1923 8.27467 13.8923 7.94134ZM12.5007 6.99967C14.3423 6.99967 15.834 5.50801 15.834 3.66634C15.834 1.82467 14.3423 0.333008 12.5007 0.333008C12.109 0.333008 11.7423 0.416341 11.3923 0.533008C12.1094 1.41986 12.5006 2.52584 12.5006 3.66634C12.5006 4.80684 12.1094 5.91283 11.3923 6.79967C11.7423 6.91634 12.109 6.99967 12.5007 6.99967ZM7.50065 6.99967C9.34232 6.99967 10.834 5.50801 10.834 3.66634C10.834 1.82467 9.34232 0.333008 7.50065 0.333008C5.65898 0.333008 4.16732 1.82467 4.16732 3.66634C4.16732 5.50801 5.65898 6.99967 7.50065 6.99967ZM7.50065 1.99967C8.41732 1.99967 9.16732 2.74967 9.16732 3.66634C9.16732 4.58301 8.41732 5.33301 7.50065 5.33301C6.58398 5.33301 5.83398 4.58301 5.83398 3.66634C5.83398 2.74967 6.58398 1.99967 7.50065 1.99967ZM7.50065 7.83301C5.27565 7.83301 0.833984 8.94967 0.833984 11.1663V13.6663H14.1673V11.1663C14.1673 8.94967 9.72565 7.83301 7.50065 7.83301ZM12.5007 11.9997H2.50065V11.1747C2.66732 10.5747 5.25065 9.49967 7.50065 9.49967C9.75065 9.49967 12.334 10.5747 12.5007 11.1663V11.9997Z" fill="#A4A4A4"/> +</svg> diff --git a/frontend/src/assets/checkboxIcon.tsx b/frontend/src/assets/checkboxIcon.tsx new file mode 100644 index 000000000..567ec7b25 --- /dev/null +++ b/frontend/src/assets/checkboxIcon.tsx @@ -0,0 +1,27 @@ +import React from 'react'; + +interface Props extends React.SVGProps<SVGSVGElement> { + isSelected: boolean; +} + +export const CheckBoxIcon = (props: Props) => { + if (props.isSelected) { + return ( + <svg width="32" height="32" viewBox="0 0 32 32" fill="none" xmlns="http://www.w3.org/2000/svg"> + <path + d="M14.1333 17.8667L11.2667 15C11.0222 14.7556 10.7111 14.6333 10.3333 14.6333C9.95556 14.6333 9.64445 14.7556 9.4 15C9.15556 15.2444 9.03334 15.5556 9.03334 15.9333C9.03334 16.3111 9.15556 16.6222 9.4 16.8667L13.2 20.6667C13.4667 20.9333 13.7778 21.0667 14.1333 21.0667C14.4889 21.0667 14.8 20.9333 15.0667 20.6667L22.6 13.1333C22.8444 12.8889 22.9667 12.5778 22.9667 12.2C22.9667 11.8222 22.8444 11.5111 22.6 11.2667C22.3556 11.0222 22.0444 10.9 21.6667 10.9C21.2889 10.9 20.9778 11.0222 20.7333 11.2667L14.1333 17.8667ZM6.66667 28C5.93334 28 5.30534 27.7387 4.78267 27.216C4.26 26.6933 3.99911 26.0658 4 25.3333V6.66667C4 5.93334 4.26134 5.30534 4.784 4.78267C5.30667 4.26 5.93422 3.99911 6.66667 4H25.3333C26.0667 4 26.6947 4.26134 27.2173 4.784C27.74 5.30667 28.0009 5.93422 28 6.66667V25.3333C28 26.0667 27.7387 26.6947 27.216 27.2173C26.6933 27.74 26.0658 28.0009 25.3333 28H6.66667Z" + fill="black" + /> + </svg> + ); + } + + return ( + <svg width="32" height="32" viewBox="0 0 32 32" fill="none" xmlns="http://www.w3.org/2000/svg"> + <path + d="M6.66667 28C5.93334 28 5.30534 27.7387 4.78267 27.216C4.26 26.6933 3.99911 26.0658 4 25.3333V6.66667C4 5.93334 4.26134 5.30534 4.784 4.78267C5.30667 4.26 5.93422 3.99911 6.66667 4H25.3333C26.0667 4 26.6947 4.26134 27.2173 4.784C27.74 5.30667 28.0009 5.93422 28 6.66667V25.3333C28 26.0667 27.7387 26.6947 27.216 27.2173C26.6933 27.74 26.0658 28.0009 25.3333 28H6.66667ZM6.66667 25.3333H25.3333V6.66667H6.66667V25.3333Z" + fill="black" + /> + </svg> + ); +}; diff --git a/frontend/src/assets/close-icon-red.svg b/frontend/src/assets/close-icon-red.svg new file mode 100644 index 000000000..11d9a6209 --- /dev/null +++ b/frontend/src/assets/close-icon-red.svg @@ -0,0 +1,14 @@ +<svg width="20" height="21" viewBox="0 0 20 21" fill="none" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> +<mask id="mask0_1206_10771" style="mask-type:alpha" maskUnits="userSpaceOnUse" x="0" y="0" width="20" height="21"> +<rect y="0.5" width="20" height="20" fill="url(#pattern0)"/> +</mask> +<g mask="url(#mask0_1206_10771)"> +<rect x="-1.99609" y="-1.5" width="32" height="25" fill="#F13232"/> +</g> +<defs> +<pattern id="pattern0" patternContentUnits="objectBoundingBox" width="1" height="1"> +<use xlink:href="#image0_1206_10771" transform="scale(0.00195312)"/> +</pattern> +<image id="image0_1206_10771" width="512" height="512" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAgAAAAIACAYAAAD0eNT6AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAROwAAETsBZCdQzwAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAACAASURBVHic7d1drK15YRbw52xmoDDMQKCSNjAzAk7baAO2WD/QCq2WFBWtTZraxI+LpiYmKlpjvNLUSzU14YKYVGtqNaYajVbEtKaBgTLUWkwR/CgdPv5QeoEp0A5QhhYGL9ZZzJkz+5yz9t7rXc/78fslT4AhnPzXu8N+nvW+a+9zLaf1giQPXc+Lkzz7ep6Z5PNJfiPJY0kevZ5fSfLEic8IAMdwluSB7DrvdyW5L8nzsuu938qu9z6f5OPZdd4Hk3zqVIe7NvGf/7Ik35HkjyZ5TXalfxGfS/JzSd6Z5G3X/71BAMAcnSX5w0m+Lbve+0NJnnPBP+PjSd6RXe/91yTjiOeb3IuS/PXsyvrLR87Hk/xwkm8+2asBgNt7VZJ/nORXc9zOeyLJu5P8tSS/42Sv5hJeluRN2b1rP3bxn5d3JXlDpr+LAQA3u5bkjyd5S07TeY8n+fEkX3+KF3eor83uUF/KaS7CzXlvktdO/SIB4LpvT/K+dDrvi0l+LMnXTP0ib+fuJH8ruw/tNS7CzfmJJC+Z9BUDsGUvSfJv0++7L2f3ofkfTHLXpK/4HA9kdwu+fQHOuyDfO+HrBmCb/myST6bfczfnv2f3CP4kvjvJpyd+QVfNm5M8a6oLAMBmfFWSf5J+r90un0ryXVNdgL03pves/6J5OLuftwSAy3h+dj+S1+6zQ/JEkr8zxUW4luQfzOAFXjTvj88FAHBxX5PkF9PvsYvmTdn9PoKjefMMXtRl86HsPrMAAId4ILvuaPfXZfPmY12IH5rBi7lqRpKXHuuCALBa92f3K3nbvXXV/N2rXogfmMGLOFbcCQDgdpb+zv/mfP9lL8QrsvtLCtov4JgZcScAgKdbyzv/G/N4km+66IV4bpJfmsHhjQAAprbG8t/n0ST3XuRi/OgMDj1lPA4AIFnfbf/z8iOHXoxvyXJ+1v8qGXEnAGDL1vzO/8Z8KckfuNPFOEvy8zM4rBEAwJS2Uv77vCd3+P0Af34Ghzx1PA4A2JYt3PY/L7f9u3KW+FuPjpERdwIAtmBr7/xvzHuz+82+T/MnZnA4IwCAqWy5/Pd53XkX5i0zOFg7HgcArNNWb/vfnJ+8+cK8IMkXZnCwOWTEnQCANfHO/8n8VpIXJk9+IvB7kzzzctd1dR5M8vYYAQBrcH9239Nf3j7ITNyd5Ltv/Ac/lf4qmVs8DgBYNrf9z89b9xforiSPzeBAc8yIOwEAS+S2/63zG0mekSS/fwaHmXNGjACAJVH+d843n+WAXw+4cQ8m+Zl4HACwBA8keTie+d/JHzxL8vXtUyzAy5K8M+4EAMzZ/Unelt33bG7v686SPNQ+xUI8GD8dADBXPu1/MQ+dJfmd7VMsiMcBAPPjtv/FvfQsyX3tUyyMxwEA8+G2/+Xcd5bkue1TLJDHAQB9bvtf3nOvJflirv88IBf24STfluRj7YMAbMwD2ZW/d/6X88Wz7P4OAC7H4wCA03Pb/+oeP0vy2fYpFs7jAIDTcdv/OD5jAByHnw4AmJ5P+x/PZ8+S/Er7FCvhcQDAdNz2P66PnSV5tH2KFfE4AOD43PY/vkfPkvxy+xQr43EAwPG47T+NR8+S/I/2KVbI4wCAq3PbfzrvuZbk2Uk+neRZ5cOs0Uez+z0BH2kfBGBh3PafzheSPP8syeeTvKd8mLXymQCAi1P+0/pvuf57AJLkrc2TrJwRAHA45T+9p3T+A0meSPJlmSwjRgDA7dyf5IPpf79ec57I7o3pUzwyg4OtPSNGAMB5lP9p8s79Bd8/AkiSH7nll4VjeTB+RBDgZn7U73T+6Xn/8O7sPrXeXidbyIg7AQCJd/6nzMey6/okT70D8NtJ3nT+14cjezA+GAjgA3+n9Y+y6/pzPTu7n1lvr5StZMQIALbJO//T5qNJnnOnL8r3zOCgW8qIEQBsi/I/fb7roK9Mdh9Uax92S/lQfDAQ2IYHsvue1/6+u6X89EFfmevuT/JrMzj0ljLiTgCwbt75nz6fyjk/938nfyp+OdCpM2IEAOuk/E+fJ5L8mUO+OOf54Rm8gK3F4wBgbdz27+QfHvLFuZWzJP9mBi9iaxlxJwBYB+/8O/mJPPVH/S/lmdl9gKD9YraWESMAWDbl38nbkzzrgK/PQe5N8q4ZvKitxeMAYKnc9u/kXdl19lHdk92qaL+4rWXEnQBgWbzz7+SRTFD+e0ZAJyNGALAMyr+TSct/zwjoZMQIAOZN+XdykvLfMwI6GTECgHlS/p2ctPz3jIBORowAYF6UfyeV8t8zAjoZMQKAeVD+nVTLf88I6GTECAC6lH8nsyj/PSOgkxEjAOhQ/p3Mqvz3jIBORowA4LSUfyezLP89I6CTESMAOA3l38msy3/PCOhkxAgApqX8O1lE+e8ZAZ2MGAHANJR/J4sq/z0joJMRIwA4LuXfySLLf88I6GTECACOQ/l3sujy3zMCOhkxAoCrUf6drKL894yATkaMAOBylH8nqyr/PSOgkxEjALgY5d/JKst/zwjoZMQIAA6j/DtZdfnvGQGdjBgBwO0p/042Uf57RkAnI0YAcD7l38mmyn/PCOhkxAgAnkr5d7LJ8t8zAjoZMQKAHeXfyabLf88I6GTECICtU/6dKP8bGAGdjBgBsFXKvxPlfw4joJMRIwC2Rvl3ovxvwwjoZMQIgK1Q/p0o/wMYAZ2MGAGwdsq/E+V/AUZAJyNGAKyV8u9E+V+CEdDJiBEAa6P8O1H+V2AEdDJiBMBaKP9OlP8RGAGdjBgBsHTKvxPlf0RGQCcjRgAslfLvRPlPwAjoZMQIgKVR/p0o/wkZAZ2MGAGwFMq/E+V/AkZAJyNGAMyd8u9E+Z+QEdDJiBEAc6X8O1H+BUZAJyNGAMyN8u9E+RcZAZ2MGAEwF8q/E+U/A0ZAJyNGALQp/06U/4wYAZ2MGAHQovw7Uf4zZAR0MmIEwKkp/06U/4wZAZ2MGAFwKsq/E+W/AEZAJyNGAExN+Xei/BfECOhkxAiAqSj/TpT/AhkBnYwYAXBsyr8T5b9gRkAnI0YAHIvy70T5r4AR0MmIEQBXpfw7Uf4rYgR0MmIEwGUp/06U/woZAZ2MGAFwUcq/E+W/YkZAJyNGABxK+Xei/DfACOhkxAiAO1H+nSj/DTECOhkxAuBWlH8nyn+DjIBORowAuJny70T5b5gR0MmIEQB7yr8T5Y8RUMqIEQDKvxPlz1cYAZ2MGAFsl/LvRPnzNEZAJyNGANuj/DtR/tySEdDJiBHAdij/TpQ/d2QEdDJiBLB+yr8T5c/BjIBORowA1kv5d6L8uTAjoJMRI4D1Uf6dKH8uzQjoZMQIYD2UfyfKnyszAjoZMQJYPuXfifLnaIyATkaMAJZL+Xei/Dk6I6CTESOA5VH+nSh/JmMEdDJiBLAcyr8T5c/kjIBORowA5k/5d6L8ORkjoJMRI4D5Uv6dKH9OzgjoZMQIYH6UfyfKnxojoJMRI4D5UP6dKH/qjIBORowA+pR/J8qf2TACOhkxAuhR/p0of2bHCOhkxAjg9JR/J8qf2TICOhkxAjgd5d+J8mf2jIBORowApqf8O1H+LIYR0MmIEcB0lH8nyp/FMQI6GTECOD7l34nyZ7GMgE5GjACOR/l3ovxZPCOgkxEjgKtT/p0of1bDCOhkxAjg8pR/J8qf1TECOhkxArg45d+J8me1jIBORowADqf8O1H+rJ4R0MmIEcCdKf9OlD+bYQR0MmIEcGvKvxPlz+YYAZ2MGAE8nfLvRPmzWUZAJyNGAE9S/p0ofzbPCOhkxAhA+bei/OE6I6CTESNgy5R/J8ofbmIEdDJiBGyR8u9E+cMtGAGdjBgBW6L8O1H+cAdGQCcjRsAWKP9OlD8cyAjoZMQIWDPl34nyhwsyAjoZMQLWSPl3ovzhkoyATkaMgDVR/p0of7giI6CTESNgDZR/J8ofjsQI6GTECFgy5d+J8ocjMwI6GTEClkj5d6L8YSJGQCcjRsCSKP9OlD9M7J4kD6f/f/atZcQIWALl34nyhxMxAjoZMQLmTPl38kiS+w74+gBHYgR0MmIEzJHy70T5Q4kR0MmIETAnyr8T5Q9lRkAnI0bAHCj/TpQ/zIQR0MmIEdCk/DtR/jAzRkAnI0ZAg/LvRPnDTBkBnYwYAaek/DtR/jBzRkAnI0bAKSj/TpQ/LIQR0MmIETAl5d+J8oeFMQI6GTECpqD8O1H+sFBGQCcjRsAxKf9OlD8snBHQyYgRcAzKvxPlDythBHQyYgRchfLvRPnDyhgBnYwYAZeh/DtR/rBSRkAnI0bARSj/TpQ/rJwR0MmIEXAI5d+J8oeNMAI6GTECbkf5d6L8YWOMgE5GjIDzKP9OlD9slBHQyYgRcCPl34nyh40zAjoZMQIS5d+K8geSGAGtjGx7BCj/TpQ/8BRGQCcj2xwByr8T5Q+cywjoZGRbI0D5d6L8gdsyAjoZ2cYIUP6dKH/gIEZAJyPrHgHKvxPlD1yIEdDJyDpHgPLvRPkDl2IEdDKyrhGg/DtR/sCVGAGdjKxjBCj/TpQ/cBRGQCcjyx4Byr8T5Q8clRHQycgyR4Dy70T5A5MwAjoZWdYIUP6dKH9gUkZAJyPLGAHKvxPlD5yEEdDJyLxHgPLvRPkDJ2UEdDIyzxGg/DtR/kCFEdDJyLxGgPLvRPkDVUZAJyPzGAHKvxPlD8yCEdDJSHcEKP9OlD8wK0ZAJyOdEaD8O1H+wCwZAZ2MnHYEKP9OlD8wa0ZAJyOnGQHKvxPlDyyCEdDJyLQjQPl3ovyBRTECOhmZZgQo/06UP7BIRkAnI8cdAcq/E+UPLJoR0MnIcUaA8u9E+QOrYAR0MnK1EaD8O1H+wKoYAZ2MXG4EKP9OlD+wSkZAJyMXGwHKvxPlD6yaEdDJyGEjQPl3ovyBTTACOhm5/QhQ/p0of2BTjIBORs4fAcq/E+UPbJIR0MnIU0eA8u9E+QObZgR0MrIbAcq/E+VP3bX2ASDJvUl+Ksmr2wfZmA9n9z2g8dcJb9m7k3xnks+0D8K2GQDMxT1J3prkNe2DwITeneT1SR5rHwQMAObECGDNlD+zYgAwN0YAa6T8mR0DgDkyAlgT5c8sGQDMlRHAGih/ZssAYM6MAJZM+TNrBgBzZwSwRMqf2TMAWAIjgCVR/iyCAcBSGAEsgfJnMQwAlsQIYM6UP4tiALA0RgBzpPxZHAOAJTICmBPlzyIZACyVEcAcKH8WywBgyYwAmpQ/i2YAsHRGAA3Kn8UzAFgDI4BTUv6sggHAWhgBnILyZzUMANbECGBKyp9VMQBYGyOAKSh/gAW4J8nDSb4scoQ8kuS+ALAIRoAcI8ofYIGMALlKlD/AghkBcpkof4AVMALkIlH+ACtiBMghUf4AK2QEyO2i/AFWzAiQ86L8ATbACJAbo/wBNsQIEOUPsFFGwLaj/AE2zAjYZpQ/AEbAxqL8AfgKI2AbUf4API0RsO4ofwBuyQhYZ5Q/AHdkBKwryh+AgxkB64jyB+DCjIBlR/kDcGlGwDKj/AG4MiNgWVH+AByNEbCMKH8Ajs4ImHeUPwCTMQLmGeUPwOSMgHlF+QNwMkbAPKL8ATg5I0D5w2Jdax8AFu73JHlfkrP2QTbmiSSvSPK/2weBpfJNCy7v/iQ/Gf8/ajhL8l+SvLR9EAC25f4kH0z/NvjW89EYAQCciPKfV4wAACan/OcZIwCAySj/eccIAODolP8yYgQAcDTKf1kxAgC4MuW/zBgBAFya8l92jAAALkz5ryNGAAAHU/7rihEAwB0p/3XGCADglpT/umMEAPA0yn8bMQIA+Arlv60YAQAo/43GCADYMOW/7RgBbNq19gGg5P4kb0/y8vZBqPpYktcm+Uj5HHByBgBbpPy5kRHAJhkAbI3y5zxGAJtjALAlyp/bMQLYFAOArVD+HMIIYDMMALZA+XMRRgCbYACwdsqfyzACWD0DgDVT/lyFEcCqGQCslfLnGIwAVssAYI2UP8dkBLBKBgBro/yZghHA6hgArInyZ0pGAKtiALAWyp9TMAJYDQOANVD+nJIRwCoYACyd8qfBCGDxDACWTPnTZASwaAYAS6X8mQMjgMUyAFgi5c+cGAEskgHA0ih/5sgIYHEMAJZE+TNnRgCLYgCwFMqfJTACWAwDgCVQ/iyJEcAiGADMnfJniYwAZs8AYM6UP0tmBDBrBgBzpfxZAyOA2TIAmCPlz5oYAcySAcDcKH/WyAhgdgwA5kT5s2ZGALNiADAXyp8tMAKYjbP2ASDJA0kejvI/tUeS/Fz7EBvzQJKfuf6vAJt2f5IPJvmynDSPJLk3yT3Zja/2ebaWjyZ5aQA2Svl3si//PSOgEyMA2CTl38nN5b9nBHRiBACbovw7uVX57xkBnYwYAcAGKP9O7lT+e0ZAJyNGALBiyr+TQ8t/zwjoZMQIAFZI+Xdy0fLfMwI6GTECgBVR/p1ctvz3jIBORowAYAWUfydXLf89I6CTESMAWDDl38mxyn/PCOhkxAgAFkj5d3Ls8t8zAjoZMQKABVH+nUxV/ntGQCcjRgCwAMq/k6nLf88I6GTECABmTPl3cqry3zMCOhkxAoAZUv6dnLr894yATkaMAGBGlH8nrfLfMwI6GTECgBlQ/p20y3/PCOhkxAgAipR/J3Mp/z0joJMRIwAoUP6dzK3894yATkaMAOCElH8ncy3/PSOgkxEjADgB5d/J3Mt/zwjoZMQIACak/DtZSvnvGQGdjBgBwASUfydLK/89I6CTESMAOCLl38lSy3/PCOhkxAgAjkD5d7L08t8zAjoZMQKAK1D+nayl/PeMgE5GjADgEpR/J2sr/z0joJMRIwC4AOXfyVrLf88I6GTECAAOoPw7WXv57xkBnYwYAcBtKP9OtlL+e0ZAJyNGAHAO5d/J1sp/zwjoZMQIAG6g/DvZavnvGQGdjBgBQJR/K1sv/z0joJMRIwA2Tfl3ovyfygjoZMQIgE1S/p0o//MZAZ2MGAGwKcq/E+V/e0ZAJyNGAGyC8u9E+R/GCOhkxAiAVVP+nSj/izECOhkxAmCVlH8nyv9yjIBORowAWBXl34nyvxojoJMRIwBWQfl3ovyPwwjoZMQIgEVT/p0o/+MyAjoZMQJgkZR/J8p/GkZAJyNGACyK8u9E+U/LCOhkxAiARVD+nSj/0zACOhkxAmDWlH8nyv+0jIBORowAmCXl34ny7zACOhkxAmBWlH8nyr/LCOhkxAiAWVD+nSj/eTACOhkxAqBK+Xei/OfFCOhkxAiACuXfifKfJyOgkxEjAE5K+Xei/OfNCOhkxAiAk1D+nSj/ZTACOhkxAmBSyr8T5b8sRkAnI0YATEL5d6L8l8kI6GTECICjUv6dKP9lMwI6GTEC4CiUfyfKfx2MgE5GjAC4EuXfifJfFyOgkxEjAC5F+Xei/NfJCOhkxAiAC1H+nSj/dTMCOhkxAuAgyr8T5b8NRkAnI0YA3Jby70T5b4sR0MmIEQDnUv6dKP9tMgI6GTEC4CmUfyfKf9uMgE5GjABIovxbUf4kRkArI0YAG6f8O1H+3MgI6GTECGCjlH8nyp/zGAGdjBgBbIzy70T5cztGQCcjRgAbofw7Uf4cwgjoZMQIYOWUfyfKn4swAjoZMQJYKeXfifLnMoyATkaMAFZG+Xei/LkKI6CTESOAlVD+nSh/jsEI6GTECGDhlH8nyp9jMgI6GTECWCjl34nyZwpGQCcjRgALo/w7Uf5MyQjoZMQIYCGUfyfKn1MwAjoZMQKYOeXfifLnlIyATkaMAGZK+Xei/GkwAjoZMQKYGeXfifKnyQjoZMQIYCaUfyfKnzkwAjoZMQIoU/6dKH/mxAjoZMQIoET5d6L8mSMjoJMRI4ATU/6dKH/mzAjoZMQI4ESUfyfKnyUwAjoZMQKYmPLvRPmzJEZAJyNGABNR/p0of5bICOhkxAjgyJR/J8qfJTMCOhkxAjgS5d+J8mcNjIBORowArkj5d6L8WRMjoJMRI4BLUv6dKH/WyAjoZMQI4IKUfyfKnzUzAjoZMQI4kPLvRPmzBUZAJyNGAHeg/DtR/myJEdDJiBHALSj/TpQ/W2QEdDJiBHAT5d+J8mfLjIBORowArlP+nSh/MAJaGTECNk/5d6L84UlGQCcjRsBmKf9OlD88nRHQyYgRsDnKvxPlD7dmBHQyYgRshvLv5JEk9x3w9YEtMwI6GTECVk/5d6L84XBGQCcjRsBqKf9OlD9cnBHQyYgRsDrKvxPlD5dnBHQyYgSshvLvRPnD1RkBnYwYAYun/DtR/nA8RkAnI0bAYin/TpQ/HJ8R0MmIEbA4yr8T5Q/TMQI6GTECFkP5d6L8YXpGQCcjRsDsKf9OlD+cjhHQyYgRMFvKvxPlD6dnBHQyYgTMjvLvRPlDjxHQyYgRMBvKvxPlD31GQCcjRkCd8u9E+cN8GAGdjBgBNcq/E+UP82MEdDJiBJyc8u9E+cN8GQGdjBgBJ6P8O1H+MH9GQCcjRsDklH8nyh+WwwjoZMQImIzy70T5w/IYAZ2MGAFHp/w7Uf6wXEZAJyNGwNEo/06UPyyfEdDJiBFwZcq/E+UP62EEdDJiBFya8u9E+cP6GAGdjBgBF6b8O1H+sF5GQCcjRsDBlH8nyh/WzwjoZMQIuCPl34nyh+0wAjoZMQJuSfl3ovxhe4yATkaMgKdR/p0of9guI6CTESPgK5R/J8ofMAI6GTEClH8pyh/YMwI6GdnwCFD+nSh/4GZGQCcjGxwByr8T5Q/cihHQyciGRoDy70T5A3diBHQysoERoPw7Uf7AoYyATkZWPAKUfyfKH7goI6CTkRWOAOXfifIHLssI6GRkRSNA+Xei/IGrMgI6GVnBCFD+nSh/4FiMgE5GFjwClH8nyh84NiOgk5EFjgDl34nyB6ZiBHQysqARoPw7Uf7A1IyATkYWMAKUfyfKHzgVI6CTkRmPAOXfifIHTs0I6GRkhiNA+Xei/IEWI6CTkRmNAOXfifIH2oyATkZmMAKUfyfKH5gLI6CTkeIIUP6dKH9gboyATkYKI0D5d6L8gbkyAjoZOeEIUP6dKH9g7oyATkZOMAKUfyfKH1gKI6CTkQlHgPLvRPkDS2MEdDIywQi4P8mHZvDitpZHktx7wNcHYG7uy+57WPv76Nbyoew6+yhemOT/zOBFbS3e+QNL505AJ7+c5EV3/vLc3nNiwTWi/IG1MAI6+fnr1/5SriX5DzN4EVuL2/7A2twbbyYb+ffZdfmF/Y0ZHH5r8c4fWCt3Ajr5qwd8bZ7iVUken8HBtxTlD6ydEXD6PJ7kmw742iRJnpHkvTM49Jai/IGtMAJOn/cnueuAr03eOIPDbinKH9gaI+D0+St3+qK8KMmnZ3DQrcQH/oCt8sHA0+aT2f1Y/1ec3fQF+ZtJnh9O4d1JXp/kM+2DABR8JsnrkryjfZCNeEF2d/jPdW+8+z9V3PYH2PE44HT5ZJLn7i/8jXcAfiDe/Z/Cu5N8Z5LH2gcBmIHPJXlDdt8bmdYLknz/ef/F+9NfJ2uPd/4A53Mn4DT5nzdf+FfO4FBrj/IHuD0j4DT5xuTJRwDfd6evClfitj/AnXkccBpP6fxfTH+RrDXe+QNcjDsB0+YXkt1fEvC87D4Z+IxDvipcyP5H/bzzB7iYe5K8Nclr2gdZoS8leeFZkm+N8p+C2/4Al+dxwHSekeTVZ0l+b/skK+SX/ABcnV8WNJ1XniV5qH2KlXHbH+B4PpfkT8YIOLaHDIDjUv4Ax2cEHN9DZ0m+tn2KlfDMH2A6PhNwXC8+yw2/F5hL88wfYHo+E3A89xgAV+e2P8DpeBxwHPeeJbmrfYoFc9sf4PQ8Dri6u8+S/Gb7FAvltj9Aj8cBV/PZsySfbZ9igdz2B+jzOODyPnuW5Nfbp1gYt/0B5sPjgMv59bMkH26fYkHc9geYH48DLu5DZ0kebZ9iIdz2B5gvjwMu5tGzJL/UPsUCuO0PMH8eBxzuA0nyjen/3cRzziNJ7rvkBQbg9O5J8nD6/THnfEOSXEvyiRkcZo5R/gDLZATcOp9Icu3s+n/42Ute4DVz2x9guTwOuLWHs+v+JMn3pb9I5hTv/AHWwZ2Ap+d7brxAz8nuxyjah5pDlD/AuhgBT+axJM+++QL9yxkcrJ1Hktx784UBYPHuze57fLtn2vkX512c3zeDg7XL3zt/gPVyJyB51a0uzttmcDjlD8BUtjwCfvp2F+Z1Mzhgo/zd9gfYjq0+Dvi2O12Y/zyDQ56y/L3zB9ierd0J+I+HXJSXJ3l8BodV/gBMaSsj4PEkDx16Uf7+DA48dfm77Q/AFh4H/L2LXJC7krxrBoeeqvy98wdgb813At6ZXadfyEuS/NoMDq/8AZjaGkfAp5I8eNkL8h1JvjCDF3Gs8nfbH4BbWdPjgC8k+WNXvSB/LsmXZvBirlr+3vkDcCdruBPwRJK/cKwL8sbrf2D7RV0m74p3/gAc7t4s93NwT2TX2Uf1l5L89gxe3EXyn7L7i44A4CKeleTfpd9jF8kXk/zlKS5GkvzpJL85gxd5SP5ZLvHJRwC47q4kP5p+nx2SzyV5wzSX4Um/O8n7yy/0dvl8Jrj9AcBm/cXsCrbdb7fK/03yysle/U2em+THJnwxV7kIr5juZQOwUa/MrmPaPXdz/nl2H1w8uW9P8r8ueNgp8rkkP5TkqyZ9tQBs2TOzu8P8mfR77wNJXj/ty72zZyb520n+X05/Ab6Y5F8luX/yVwkAOw8m+dfZddCpe+8TSX4wyd2Tv8oLeFZ2z0k+kOkvwONJfjzJ153klQHA0700yZtyms8HfCS7uw+z/sm2syR/JLuLcsy7Al/K7ucy35jkq0/2agDg9p6X3Rvgt+S4Py7/6eze7L4hE/xU27Vj/4E3uTvJtyR5TZJvze4Dei8+8H/7WHZ3Ex5J8o4kP5vkkxOcEQCO5auzexP82iSvTvINOfyX0f1qkvdl9xf4pMkChAAAAA9JREFUvDPJL2Q3KCbx/wFAUgeuI+do3wAAAABJRU5ErkJggg=="/> +</defs> +</svg> diff --git a/frontend/src/assets/complete-icon.svg b/frontend/src/assets/complete-icon.svg new file mode 100644 index 000000000..aca152cec --- /dev/null +++ b/frontend/src/assets/complete-icon.svg @@ -0,0 +1,11 @@ +<svg width="25" height="25" viewBox="0 0 25 25" fill="none" xmlns="http://www.w3.org/2000/svg"> +<circle cx="12.5" cy="12.5" r="12.5" fill="#1EE06C"/> +<g clip-path="url(#clip0_2607_9814)"> +<path d="M10.3333 18.8673L5 13.534L6.86667 11.6673L10.3333 15.134L19.1333 6.33398L21 8.20065L10.3333 18.8673Z" fill="white"/> +</g> +<defs> +<clipPath id="clip0_2607_9814"> +<rect width="16" height="13" fill="white" transform="translate(5 6)"/> +</clipPath> +</defs> +</svg> diff --git a/frontend/src/assets/error-icon.svg b/frontend/src/assets/error-icon.svg new file mode 100644 index 000000000..bb516e2b3 --- /dev/null +++ b/frontend/src/assets/error-icon.svg @@ -0,0 +1,5 @@ +<svg width="25" height="25" viewBox="0 0 25 25" fill="none" xmlns="http://www.w3.org/2000/svg"> +<circle cx="12.5" cy="12.5" r="12.5" fill="#EB5757"/> +<path d="M14.4103 7.7493C14.4591 6.79803 13.7009 6 12.7484 6C11.7971 6 11.0394 6.79611 11.0864 7.74627L11.4225 14.544C11.4573 15.2475 12.0378 15.8 12.7422 15.8C13.4456 15.8 14.0257 15.2489 14.0617 14.5464L14.4103 7.7493Z" fill="white"/> +<path d="M13.916 18.3659C13.916 17.7216 13.3937 17.1992 12.7493 17.1992C12.105 17.1992 11.5827 17.7216 11.5827 18.3659V18.8326C11.5827 19.4769 12.105 19.9992 12.7493 19.9992C13.3937 19.9992 13.916 19.4769 13.916 18.8326V18.3659Z" fill="white"/> +</svg> diff --git a/frontend/src/assets/eye-icon.svg b/frontend/src/assets/eye-icon.svg new file mode 100644 index 000000000..5ee3dbc8e --- /dev/null +++ b/frontend/src/assets/eye-icon.svg @@ -0,0 +1,14 @@ +<svg width="20" height="21" viewBox="0 0 20 21" fill="none" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> +<mask id="mask0_1273_10733" style="mask-type:alpha" maskUnits="userSpaceOnUse" x="0" y="0" width="20" height="21"> +<rect width="20" height="20.4878" fill="url(#pattern0)"/> +</mask> +<g mask="url(#mask0_1273_10733)"> +<rect x="-2" y="-2" width="25" height="25" fill="#A4A4A4"/> +</g> +<defs> +<pattern id="pattern0" patternContentUnits="objectBoundingBox" width="1" height="1"> +<use xlink:href="#image0_1273_10733" transform="matrix(0.00200076 0 0 0.00195312 -0.0121951 0)"/> +</pattern> +<image id="image0_1273_10733" width="512" height="512" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAgAAAAIACAYAAAD0eNT6AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAN1wAADdcBQiibeAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAACAASURBVHic7N13tF1Vtcfx76RKld6bSAkIPBSVjjRBitJ9IF1ApVcVREFFOooIKvIA6V1AqoCEiCCCgEgNoYUSeu+SkPn+WCvkptzk3nvKXHvv32eMM8AxMPcH95yz5l5lLnN3REREpFmmiA4gIiIi3acCQEREpIFUAIiIiDSQCgAREZEGUgEgIiLSQCoAREREGkgFgIiISAOpABAREWkgFQAiIiINpAJARESkgVQAiIiINJAKABERkQZSASAiItJAKgBEREQaSAWAiIhIA6kAEBERaSAVACIiIg2kAkBERKSBVACIiIg0kAoAERGRBlIBICIi0kAqAERERBpIBYCIiEgDqQAQERFpIBUAIiIiDaQCQEREpIFUAIiIiDSQCgAREZEGUgEgIiLSQCoAREREGkgFgIiISAOpABAREWkgFQAiIiINpAJARESkgVQAiIiINJAKABERkQZSASAiItJAKgBEREQaSAWAiIhIA6kAEBERaSAVACIiIg2kAkBERKSBVACIiIg0kAoAERGRBlIBICIi0kAqAERERBpIBYCIiEgDqQAQERFpIBUAIiIiDaQCQEREpIFUAIiIiDSQCgAREZEGUgEgIiLSQCoAREREGkgFgIiISAOpABAREWkgFQAiIiINpAJARESkgVQAiIiINJAKABERkQZSASAiItJAKgBEREQaSAWAiIhIA6kAEBERaSAVACIiIg2kAkBERKSBVACIiIg0kAoAERGRBlIBICIi0kAqAERERBpIBYCIiEgDqQAQERFpIBUAIiIiDaQCQEREpIFUAIiIiDSQCgAREZEGUgEgIiLSQCoAREREGkgFgIiISAOpABAREWkgFQAiIiINpAJARESkgVQAiIiINJAKABERkQZSASAiItJAKgBEREQaSAWAiIhIA6kAEBERaSAVACIiIg2kAkBERKSBVACIiIg00FTRAUSkO8xsSuBT470APuz5cvePYxKKSDeZu0dnEJE+MLOpgHmAeXt5zcqEA3zPV18L/lGMVxSM93oDeKGX14vuPqq1f1MR6QYVACKFMLNZgEH5tRgwH+MO8HMCFhawbxx4hXGLgueBx4GhwFB3fzMunoiMoQJApIvMzICFGDvQL9Xj7+cOjNZNL5GLAeCRHn//jOsLSaRrVACIdIiZzQx8GVgRWIY0yC8BTB+Zq2DvA8NIxcCDwJ3AXe7+dmgqkZpSASDSBmY2BfA5YCXSgL8S6eleJ21aM5o0S/BPUkHwT+Ahdx8dmkqkBlQAiAyAmc1FGuTHDPhfAmYKDdUc7wD/YmxB8E93fzk2kkj1qAAQ6YO8QW8dYP3810VjE8l4ngRuBm4AbtZGQ5HJUwEgMhH5zPyXgfVIg/6XgSlDQ0lffQzcRSoGbiTtI1BvA5HxqAAQycxsIdJgP+Ypf5bYRNImbzJ2duAGd38mOI9IEVQASGPljXtrAJuRBv0lYxNJlzxKKgauAG7VhkJpKhUA0ih5an8NYCtgc5pz9l4m7iXgcuBSUjGgpQJpDBUAUnt50F8T2JI06M8VGkhK9TKpGLgMGKJiQOpOBYDUUh701yI96W9GaqMr0levkJYILgVuUTEgdaQCQGrFzFYGdiI96c8Rm0Zq4lXSzMBZ7n5HdBiRdlEBIJVnZnMDOwDfJrXbFemUR4AzgXPUfEiqTgWAVFK+GncDYBdgI/p+1a1IO4wEriEVA9driUCqSAWAVIqZLUl60t8BmCc4jgik647PBv7o7o9FhxHpKxUAUjwzmwH4Julpf9XgOCKTcitwBnCZu78fHUZkUlQASLHMbEFgb2A31JVPquV14DTgFHcfER1GZGJUAEhxzGxFYH9gC7S2L9U2knSU8ER3vzs6jEhPKgCkCPnc/makgX+V4DginXA7cCJwpTYNSglUAEgoM5sZ2BXYB1g4OI5INwwHfgOc4e5vB2eRBlMBICHM7DPAvqQd/TMFxxGJ8A5pw+Bv3P2p6DDSPCoApKvMbGHgJ8COaH1fBGAU6RjhEe7+dHQYaQ4VANIVZjY/cCjpKN80wXFESvQRaUbgSJ0ckG5QASAdldv0Hgx8D/hUcByRKvgQOBU4xt1fig4j9aUCQDrCzGYHfgDsBUwfHEekit4HTgGOc/fXosNI/agAkLYys1mAA4D90OY+kXZ4B/g18Ct3fzM6jNSHCgBpCzObkbSr/yDUtU+kE94ETgBOcvd3o8NI9akAkJaY2fTAnqTp/jmC44g0wavAccBvdd+AtEIFgAyImU0LfBc4BN3KJxLhReBo4A/u/t/oMFI9KgCkX8xsatJRvkOBBYLjiAg8BxxJ6iw4MjqMVIcKAOmT3Kt/B+AwYJHYNCIyEcOBnwPn6K4B6QsVADJJZjYFsDXwU2Dx2DTSR+8CrwEfAP8lnSvv7a+Q+jNMO4m/Tkfa3zFD1/4NpBWPkT6vF7n76OAsUjAVANIrM1sZ+D3wP9FZBAdGkL7cRwAv9/Zy9w86ESBv+Jyrx2vO8f73gsBiwHyAdSKD9Mt/gN3d/Y7oIFImFQAygdzE5xjSWr++yLun5yD/+Hh/faJTA3u75UJhsfxaPL/G/P18gdGayEnthQ9WMyEZnwoA+YSZGbAz6YjR7MFx6m4k8BBwb4/X/e7+XmiqDjOzmYDlgS/0eC0FTBmZqwFeIx3V/aPrS18yFQACgJktR5ruXyU6Sw2NAv4N3MPYwf5BHd1KzGw6YDnGLQqWB6aIzFVT/yAtC9wfHUTiqQBouNzB72fAPuh63nZ6HLgRuAkY7O5vB+epFDObFVgHWC+/Fo5NVCujgN8Ah6ujYLOpAGgwM9uS1GN8/ugsNfAmMJg06N/o7k8F56kVM1uCscXAmuieiXYYAezn7pdFB5EYKgAayMwWI90ytn50lgobBdxJHvCBf+nsdXfkZlQrM7YgWAEtF7TiBmAvd388Ooh0lwqABsntew/Or08Fx6kiTesXyMxmY9zlgoViE1XSh6STP8dob0pzqABoCDNbn/TUv1h0lgp5l7FP+JrWrwgzW5KxxcC6qNjtj8dJswE3RAeRzlMBUHNmNj9wIrBVdJaKGE1ayz8HuLzux/LqzsxmAb4J7IhOuPTHpcD+7j4iOoh0jgqAmjKzqYC9STv8tWFq8h4hDfrnuftz0WGk/fLelx2B7dGpgr54BzgcONndR0WHkfZTAVBDZrYK6Uz/ctFZCvcqcCHp8pS7o8NId+SGV18hFQNbAjPGJire/aTeAf+IDiLtpQKgRvJ05wnAt1EL3958BFxDetq/TtenNltuW7w5qRhYG50m6I0DZwIHufub0WGkPVQA1ISZrQWcTbqQRSZ0J2nQv8jdX48OI+UxswWA7UjFwKDgOKV6FtjR3W+JDiKtUwFQcWY2DXAkcCB66h/fM8C5pCn+YdFhpDrM7EukQmAbYLbgOKVx4JfAoe7+UXQYGTgVABVmZssA56Hrenty4FrSyYdbdPGJtCIX2N8ADiA1H5Kx/gNs5+4PRgeRgVEBUEF5E9O+wNHojPMYI4ELgOPd/aHoMFI/ZrYa6Ua9jdFs2xgfAocAJ6nYrh4VABWTz/WfRWpwIumo0mnAiTqzLN1gZksB3we2BaYJjlOKvwI76TNYLSoAKsTMtgJORWuSAC8CJwGnaleyRDCz+Ugzcd8DZg6OU4LXge+5+6XRQaRvVABUgJnNDJwM7BCdpQDDgOOBc9WzXEqQP5/fBfYD5guOU4JzgL11V0b5VAAUzsxWJ32gFgmOEu2fwHHAn919dHQYkfHlDYPbkpYHlgqOE204sL273xYdRHqnAqBQ+crTnwE/pLnNScbs6D/O3f8eHUakL/Im3Y1JGwZXC44TaTRwLHC4Gm6VSQVAgcxsEHA+8IXoLEG0o19qwcxWJhUC36C5hfy9wLbuPjQ6iIyrqW/IYpnZnqQPTBMH/49J7UYXdfedNPhL1bn7He6+GfA54IroPEG+ANybv9ukIJoBKISZzUMa/DaIzhLkWuCHGvSlzvJFXcfT3KuJrwe+7e4vRgcRzQAUwcw2BR6gmYP/v4C13H1jDf5Sd+7+D3dflXQBURPbU28APJC/8ySYCoBAZja1mZ1CmhqcIzpPlz0JbA2s6O5DgrOIdJW7X0FaFtgDeCk4TrfNAVxhZqfkzc4SREsAQcxsXuAymjcV+CrwC+D3ukike/LO9BmAmUhNa2bKL0jdFN8B3s5/fU9tXbvHzGYEDsqvGYLjdNvtwFbu/kJ0kCZSARAgn+2/BJgnOksXfQD8GjjW3d+KDlMXeWBfAFiyx2sJYHbGDvIzATPS9/71DrzL2MLgHeA10pT1oz1ez6lQaJ+8D+inwC7AVLFpuupFUhGgngFdpgKgy8xsH9JVmk35gI8GzgZ+oj7hA5cH+mWAZZlwsJ8+KNb7TFgUPAA8qMJg4PIx4KOBJq2TjwQOdPeTo4M0iQqALjGz6UmX1mwbnaWLriPt7Nd1oQOQB4K182tN0lN9FbwGDAEGA4N1/ntgzGxV0omBJl1DfB7wHXf/IDpIE6gA6AIz+yxwObBcdJYuuRv4gbvfEh2kSsxsEcYO+GsD80bmaaMXyMUAqSAYHhunWsxsc9KMwBLRWbrkPmBzd38qOkjdqQDoMDPbkNTVb5boLF3wGqkP+lmaAu4bM1uBdMnTN2jOfQ/DgauAc9z9nuAslWBmUwH7k/YIRC35dNPrpO6Bf4kOUmcqADokr9keBhxO3zdfVdk5pDW8V6ODlM7MFiAtBe0ALB0cJ9rDpPfO+e7+XHSY0uVZot/RjJ4ho0nfoUfpgaIzVAB0gJnNQlrL2ig6Sxc8RroDfHB0kJKZ2QzAFqRBfy3Ug2N8o4FbSMXAn9z9veA8RTOz/yWdqmnCSaI/AzvoeuH2UwHQZma2LKmxz2ejs3TYR6Sbvo509/9GhymVma0B7Erq/Na0M94D9R5pz8zp7n5rdJhS5QeNY4HdqP8s4zBgM3d/ODpInagAaCMz2wY4nfqv0d1Keup/JDpIqcxsA+DHNK/RU7vdDvxCa8G9y6cF/kDqLFhn75LuEbg0OkhdaBqyDcxsKjM7kXSFbZ0H/9dJT7NravCfkCWbm9k9pCOQGvxbtypwvZndbWab5r010oO73w58nlRwfhgcp5NmBC4xs+PMbMroMHWgGYAWmdncpK5+a0Rn6bDzgAPc/ZXoIKXJX0ZbAz9Cm/o67UHgSOASdx8dHaY0ZrYYcCqwTnSWDhsMbK3vo9aoAGiBma1M6uc/X3SWDnoc2N3d/xodpDRmNg1pU9/B1H/PR2keI52NP9fdR0WHKY2ZbQ/8inpfMvYssIW7/ys6SFWpABig/AE7HZgmOkuHjASOI62/1nlacUDMbD3gFGDx6CwN9wiwl06hTMjMZgdOAHYKjtJJ/wV2dPeLo4NUkfYADICZHUY6rlTXwf82YHl3/7EG/3GZ2fxmdglwAxr8S7AUcLOZXZBv2JTM3V9z951Jx06HRefpkGmBC83sh9FBqkgFQD+Y2dRmdibws+gsHfIRqZPfGjpuM6680fNAYCiwVXQemcA2wKNmtn/umieZuw8BlifNWNWRAceY2R/0u+8fLQH0kZnNDPwJWDc6S4c8RGq9+Z/oIKXJZ/l/S7qNT8r3ALCHrpedkJl9Dfgj9W0g9BfS1cLvRgepAs0A9IGZLUiaFq/j4O/Ab4AvavAfl5nNZWZnA39Dg3+VLAv83czONrO5osOUJPdTWBa4MjpLh3yN9LufPzpIFWgGYDLMbHngWuq50/8FYCd3vzE6SGnMbCPgbKpzBa9M3GukTWLXRgcpjZntSmonXMcOlc8BG7n7/dFBSqYZgEnI3dz+Tj0H/8uBZTX4jyuv9R8LXI0G/zqYHbjazI7V+vC43P100t6AO6OzdMACpJmA9aKDlEwFQC/M7DukQWDG6Cxt9i6wi7tv4e6vRYcpSb6lbwjwA+rfW71JjPQ7HZJ/x5K5++PAaqSNzR8Hx2m3mYFrzWyX6CCl0hLAeHKr0aNIzV3q5p/Adu7+RHSQ0pjZhqSjnXrqr7fXSDfLXRcdpDRmthKp42cdm1odBfxY1wqPSzMAPZjZtKR+/nUb/EcBPwVW0+A/rjzlfwxwDRr8m2B24BozO0ZLAuNy93+SlgTOjM7SAT8CzsvdOyXTDEBmZrORdsauHp2lzR4nPfXXcZ2vJXmn8EWkKVBpnttI/eRHRAcpjZltDpxG/YriW4FN3f2N6CAlUAEAmNmiwPXAEtFZ2ux0YD93fy86SGnMbBnSmWEdF2q2EcD67v5QdJDS5M6KZwF120j3KLChuz8ZHSRa45cAzGxF0tp4nQb/t0mXZOymwX9CZrYa6XSHBn+Zn7RbfNXoIKVx9xdI5+oPJC0j1sWSwB35u7/RGj0DYGabAecD00VnaaMHSIP/Y9FBSmRmm5Cm/T8VnUWK8gHwv+5+dXSQEuWi+RKgTvctfEDqfnpFdJAojZ0BMLPvkq7yrdPgfx6wkgb/iTOz3UjtnDX4y/imAy43s52jg5Qot1X+PKkrZl1MB1yWx4JGamQBYGYHAadSn3//j0i9z7d39/ejw5TIzH5M2tQ0ZXQWKdZUwJm6WW7i3P0lYB3g+OgsbTQFcGoeExqncUsAZvZz4CfROdroWWBLd78rOkiJzGwK4GRgj+gsUim/Bg7QufGJy8unZ5Ga7dTFEe5+WHSIbmpMAZAb/JwI7BudpY1uAr7l7q9GBylRHvzPB7aOziKVdDaws4qAiTOzJUhLanW6KOskYP+m/M7rMgU+SXkgOJ36DP4O/AL4mgb/SToZDf4ycDsCv4wOUSp3HwasSCqy62Jf4PQ8ZtRe7WcAzGxq0ua4b0ZnaZM3gO11u9mk5TX/I6JzSC0c7O7HRocomZntCfwKqEunvUtIDdRGRgfppFoXAGb2KdJO/42is7TJv0lH/J6KDlKyvNv/tOgcUis7u/tZ0SFKls/VX0a6ia8OriXtr/owOkin1LYAMLMZSbf5rRkcpV3OBPas85uxHfI5/z+h3f5jvEG6G/3tXl6QNnJN7LUgMEuX85ZqFLCZu18THaRkZjYHcCGwbnSWNhkCfN3d340O0gm1LADMbFZSa986dHr6ENg7390tk5CbldxE8875OzA0vx4Fho15ufsrrfzBZjYnqXPaEj1eg/KraVcmfwB81d1vjw5Ssrx+/nPSBTx1eI/cCWxQx/sDalcAmNncwI3ActFZ2uBF4Bvu/q/oIKXLvf3/TnOeWJ8ABgM3A4NbHej7KxcGa5POha9NPa+QnZg3gNV1d8Dk5aOC5wIzRGdpg/uB9XIvhNqoVQFgZgsCf6Ueff3vBzZ292ejg5Qu3+p3J/Xu7T+SNKv1Z+Bmd386OM84zGxhUjGwCbABMHVsoo4aAayoWwQnz8w+D1xFPfYFDAPWrdN3cm0KADNbnDT4LxSdpQ2uJV1TWst1p3bKd7rfQn2v9L0HOAe4oCpHPvM68LeAHYAVguN0ym3Amu7+cXSQ0uVbBa8CvhidpQ2eIRUBtWi3XosCwMyWJU37zxOdpQ1OInUgGx0dpArM7Bigbq1bXyQN+me7+8PRYVphZkuTztPvQD0+nz0d7e4/ig5RBWY2Hamx0lbRWdrgRdJywAPRQVpV+QLAzL5Eutd9tugsLRoF7OPuv48OUhVmtiFwDfXYaATwNHAccGbdTnvkI7nfBn4ALBwcp12ctDnshuggVZC7sf4c+HF0ljZ4ndSIrdL7sypdAJjZF0nT/p+OztKit4BvuvuN0UGqwswWAO4DZo/O0gbDgKOB89y9TveuTyAv2WwHHEI99uq8Aizv7s9HB6kKM9sWOAOYNjpLi94iLQfcHR1koCpbAOTNJTcDs0ZnadFTpM1+lZ7q7aY8iAwBVg2O0qqhwE+BS5u25JOPim1F+vcfFJumZX8D1tF+gL4zs5WBK4G5orO06A1gbXe/LzrIQFSy37GZ/Q/pyb/qg/8/SLuJNfj3z5FUe/B/n/QEvJy7X9y0wR/A3Ue7+8Wk47qHkP6bVNVXSIWM9JG73wF8GXgwOkuLZgVuyvvQKqdyMwD5vPctwBzRWVp0AfBtd/9vdJAqMbONSB0eq7rufyWwr7s/Ex2kJGa2EGkD7KbRWQZoNLC+u/81OkiVmNlMwEXAhtFZWvQy6VTII9FB+qNSBUDeUXwL1Z82Otzdfx4domrMbC7gYaq57v8kqaPjddFBSpY3dp4MLBqdZQBeApZ299ejg1RJXg76JbBfdJYWvQh8Jd+SWAmVWQIwsyVJa/5VHvw/BLbR4D9gx1PNwf8MYBkN/pOX/xstS7r7omrmBo6JDlE1eTlof+C7pNNQVTUPMNjMKtMVsxIzALnJzxBgvuAorXiTdKnEbdFBqij3+f97dI5+egf4nrtfEB2kisxsO+D3wIzRWfrBgZXd/c7oIFVkZuuTLvOqcvvgZ4E13H14dJDJKb4AMLNFSbtsq9xK8nnS+mDVN7yEyLv+7yU9GVbFfaSjnbXoGBYlz/xdSrV+9/8GvqRTAQNjZl8GrqOas31jDCcVAUW3DS56CcDMFiGt+Vd58H8UWEWDf0v2ploDwG+BlTT4t87dHyXd6vl/0Vn64fPAHtEhqsrd7yK19q7yRtlFgFvyPSXFKnYGIO8K/hvpP2RV3QVsVJUe7iXKfcQfBWaKztIHo0ndHH8bHaSOzOwA4ASqcQLkLWCQu78YHaSq8uB5A/C56CwtGEbaGFjk+6DIGYDc5e0Wqj3430BqEKHBvzW/pBqD/0hgWw3+nePuvyLdKTAyOksffJpUrMgA5dsWVyf1S6mqJUgbA4vcvF7cDICZzUfa8Ld4cJRWnA/s7O5V+KIqlpmtTTr5Ubr3gM3Vyrk7zOxrwGVUY6PY2u5+S3SIKjOz6YFLgI2is7TgAQp8ICyqADCzuUnT/ktGZ2nBicCBXtJ/2ArKG//uB5aKzjIZrwEb5nVL6RIzW5F0bXbpG8UeIXV8rPLxtnD5++B00s2SVXUfqQh4IzrIGMUsAZjZp0m3+lV58D/Y3Q/Q4N8W21ONwX8NDf7dl4/ZrUH6HZRsKdJ7WVqQC6idqfayyvLAtXlGowhFzADkq0L/QuqpXUWjgN3c/azoIHWQO4MNpexloPdI1bwG/0B5JuBmyl4OeIy0IbBxdz50gpkdRLo2uwqbQSfmemCTEpaIw2cAzGxK4EKqO/h/AGymwb+tvknZg/9I0pq/Bv9geSZgS8reGLg46T0tbeDuJwA7Ud2ugRsAZ5lZeAETPgNgZqcDu4SGGLg3SFf5VnmXalHyh+J+YJnoLL0YTdrtf1F0EBkrdw08h3KfCh8k7QWIn3KtiXxvxKVAMVPq/XSKu+8dGSB0BsDMjqa6g/+rwFoa/NtuE8od/CGd89fgXxh3Pw84KDrHJCxDem9Lm+R7IzYE3o3OMkB7mdlhkQHCZgByU49fhvzw1r0ErOPuD0UHqRszuxtYITpHL37r7ntFh5DeFT6jeI+7fzE6RN2Y2SqkdfWZo7MM0J7u/ruIHxxSAJjZ9sDZlDtdNykjSIP/o9FB6iaf774+Okcv7iO19/1vdBDpnZlNR+rAWeos0gbu/pfoEHVjZl8iNV+bNTrLAIwGvuXuF3f7B3e9ADCzjYArgam6+oPb4xnSzu8nooPUkZndBqwanWMi3gFWUG//ajCzQcDdlHky4HZ3Xy06RB2Z2fLATcAc0VkGYCTpttgbuvlDu7oHIE/VXEo1B/8nSWe+Nfh3gJmtQZmDP6QrfTX4V4S7DwV2j87Ri1Xze13azN3vA9YiLdFWzdTAn8xspW7+0K4VAGa2DHANMF23fmYbDSMN/k9HB6mxXaMD9OIMd78gOoT0j7ufC5wZnaMXpb7XKy/fuvoV0hXsVTMDqVHQ0t36gV1ZAjCzhUkXOszX8R/Wfg8B65Z6m1MdmNkMpKq9tCnbJ4Fl3P2D6CDSf7nj2gPAotFZxvMeMLe7vxcdpK7M7LPAYGCh6CwDMAJYtRsPnB2fATCz2YEbqebg/x/SUT8N/p21BeUN/gB7a/CvLnd/Hwg9Z92LGUjveemQvFS7BqmIr5r5gRvz2NlRHS0AzGwa4HLSlYhVczdpw98r0UEaYIfoABNxZT5nLBWWf4dXRueYiBLf87WSn6C/QlrCrZolgMvzGNoxHV0CMLM/klo2Vs0dpOM6b0UHqTszWwB4mgLaUvfwPrCUuz8THURaZ2YLkW7lK6lj3GhgYXd/LjpI3ZnZPKT7Irq2tt5GZ7n7zp36wzv2pWtmP6S6g/96Gvy7ZlvKGvwBjtDgXx/5d3lEdI7xTEF670uH5SXcNYGHg6MMxE5mdnCn/vCOzACY2ebAZVSv0c99pDX/N6ODNIWZPURZlflQUs/2ki+XkX4ys6lJd0wMis7Sw8Pu/rnoEE1hZvMBf6e8TaGT48CW7n55u//gtj95mdkKwLlUb/AfSnry1+DfJfm9UtLgD3C4Bv/6yb/Tn0bnGM/S+TMgXeDuzwPrAFVbdjHg3E68V9paAJjZ/MBVlLXW1hfDSUf9tOGvu0rbCDWUNHMl9XQp5W0IK+0zUGvuPhxYF3g5OEp/TQ9clcfYtmlbAZDPcl9N9Y77PU/q7T8iOkgDfSM6wHiOdPfR0SGkM/Lv9ujoHOMp7TNQe/kel/VI17lXyXzA1XmsbYu27AEwsymAPwGbtvyHdderwFfcvYqbQyrNzBYBngqO0dMTwJLu/nF0EOkcM5sKeBxYODpLD5/JT6bSRbnt7k3AjNFZ+ulKYIt2PKy0awbgGKo3+L8FrK/BP8za0QHGc7QG//pz91HAcdE5xlPaZ6ER3P2fpBmYD6Oz9NOmpDG3ZS0XAGa2C/D9NmTppveBjdz93uggDVbSl96zwDnRIaRrzgRK6u5Z0mehUdz9FmBL0m18VfL9PPa2pKUCwMzWBH7faogu+y+wqbvfHh2k4Ur60jtLO/+bw90/pKyCr6TPQuO4+7WkngxVmwH8fR6DB2zABYCZLU5a95+63BCI9gAAIABJREFUlQBdNgrY2t1vig7SZPm+9nmjc/RwbnQA6bqzowP0MG/+TEgQd78U2I105r4qxlwhvPhA/4ABFQBmNhtwLTDbQH9wgNHATu5eYl/wpinpieef7v5YdAjprrz3557oHD2U9JloJHf/I7BvdI5+mo10hfCAxuJ+FwC5o9afgAFXHUH2cPfzo0MIUNaXnZ7+m0vLADIOdz8ZODQ6Rz8tTpoJ6PdsfL+PAZrZ6UDLmw+67PvufkJ0CAEzM+AVoONXXfbBSGBed38tOoh0n5nNQeoDUsIy5mvAnN7J29mkz8zsaKBjPfg75Ax337U//4d+zQCY2fep3uB/hAb/oixDGYM/wHUa/JvL3V8Fro/Okc1O+mxIAdz9EOCU6Bz9tEseo/uszwWAmW1Cm84edtGv3f2w6BAyjmWjA/RwVXQACVfSe6Ckz4bAPsBZ0SH66Zg8VvdJnwoAM1seOL+v/3whzgAOiA4hE1gyOkAPN0cHkHCDowP0UNJno/HycsyuVOt+kCmA8/OY3ad/eJLMbBbSpr+29R/ugouB72g9rUilfMk94e5PR4eQWO7+FFDK+6CUz4ZkuTvot4DrorP0wwykTYGzTO4fnGQBkDdsnUu17k++Bthel7oUq5QvuZKe/CRWKe+FUj4b0kNuErYlMCQ4Sn8sSrpC2Cb1D01uBuAQYOO2Req8wcBW6upWpvxmXCI6R6bpfxmjlAJgicl9YUsMd/8A+DpwZ3SWftiYNIb3qtdjgGa2DnADMGX7c3XEvaSb/d6NDiITZ2YLAs9E5yB1+5rb3V+JDiLx8h3rz0XnyBZy92ejQ8jEmdmswO3AUtFZ+uhj0qV3E33gmegMQP5AXEh1Bv9ngY01+BevlCnOoRr8ZQx3H0E5V1OX8hmRiXD3N4CNgJejs/TRlMCFeUyfwAQFQO4mdCkwZ4eDtcs7pMH/heggMlmlfLkNjQ4gxSnlWvBSPiPSi7xx9OvAB9FZ+mhO4NKJdQqc2AzACcDKHY/UHh8D33T3+6ODSJ+U8uX2aHQAKU4p74lSPiMyCe5+F7Ad6Y6ZKliZNLaPY5wCwMz+l9T8oCr2cve/RIeQPitlA+Cw6ABSnFJmhUr5jMhkuPvlQL867wXbJ4/xn/ikADCzmYHfdz3SwJ3g7qdGh5B+KaUFsAoAGV8pMwClfEakD9z9V8DvonP0w+/zWA+MOwOwPzBr9/MMyOXAD6NDSL/NFB0gUwEg4ytlBqCUz4j03T7AtdEh+mhW0lgP5GOA+WjDU8Cnw2L13V3AmvlcplSImY0A5guO8Ya7D+jubKk3M3sDmGz3tA573t0numNbymVmMwK3Ap+PztIHbwGfcfc3xswAHEg1Bv/hwDc0+FdWCU83pZz3lvKUcP6+hM+I9FM+gr4x1fh++TRpzGcKM5sN2Dc2T5+8BWzk7i9FB5H+yx3OZozOAbwdHUCKVUIfkRnVDbCa3P15Uo+Ad6Kz9MG+ZjbbFKTjASV8MU/KSGALdy/lrK703wxACV9sKgCkNyV8cRvVunhNeshH0rcCRkVnmYwZgZWnAAZFJ+mD3XtrZSiVUcrUpgoA6U0JBQCU81mRAXD3G4A9o3P0waAqFABHu/sZ0SGkZTNP/h/pChUA0ptSCoBSPisyQO5+GnBcdI7JKL4AuBg4NDqEtEUpTzUqAKQ3JewBgHI+K9Kag0lt9UtVdAHwD2An7+26QqmaUr7UVABIb0qZASjlsyItyGPXDsAd0Vl6MWiitwGKiIhIWxT7EDsF5XTAGt8qwNk6ElMbpTxdaX1VelPKk3cpnxVpQR67ziaNZSUaWnIBAPBN4KjoENIWpXypqQCQ3pRyHLqUz4q05ijSGFaq4gsAgIPNbNfoENKyUtbeVQBIb0qZASjlsyIDlMesg6NzTEYlCgBINxh9NTqEtKSUpxoVANKbUgqAUj4rMgB5rKrCzbpDpyDtUCzl+EtvpgIuM7NlooPIgL1HGZthVABIb0ooAJz0WZEKymPUZaQxq2TvAndM4e6vAydFp+mDmYFrzWye6CDSf/lITAmFpgoA6U0JewDe1dHnaspj07VU4zvmJHd/vYrXAd8DrOHu70cHkf7RdcBSMl0HLANlZtOTrgNeITpLH4x7HbC7vwGcGJupz1YALjQz9TConhLWNmc1szmjQ0hZzGwu4gd/KOMzIv2Qx6ILqcbgD3BiHvPpOYieCLwRk6ffvgH8KjqE9FspX25LRAeQ4pTSEbWUz4j03a9IY1IVjPOw/0kB4O5vA7tHJBqgfc1s7+gQ0i+vRQfIVADI+JaMDpCV8hmRPshj0L7ROfph9zzWA+POAODuFwO/6XqkgTvRzDaODiF9Niw6QKYCQMZXygxAKZ8RmYw89lRl6RzgN3mM/8TE1tEPotzLC8Y3JXCRmX0hOoj0yaPRAbJSnvakHKW8J0r5jMgk5DHnItIYVAV3kMb2cUxQALj7SGAr4JUuhGqHGYCrzWzB6CAyWaV8uZXytCflWDo6QFbKZ0R6kceaq0ljTxW8AmyVx/ZxTHQnvbuPALYBPu5wsHaZD7jGzKpw/rLJSvlyG6STADKGmc0PfCY6R1bKZ0QmIo8x1xB/nLmvPga2yWP6BHo9SufuNwOHdSpVByxHahQ0fXQQ6dVzQAn9GwxYOzqEFGOt6ADZ+6TPiBQojy3XkMaaqjgsj+UTNbmz9EeT/oWrYjXgSjObNjqITCh3OCtlk9M60QGkGKUUg8PUBbBMZjYNcDmwenSWfriGNIb3apIFQH4zbg882cZQnfZV4GIzK70Xc1OVMsVZype+xCvlvVDKZ0N6MLMpSY1+1o/O0g9PAttPrqCcbDc9d38T2IJqXVCxCXC2ugUWqZQvuc+a2cLRISSWmX0GKOV9UMpnQzIzM+BMYPPoLP3wHrBFHrsnqU8DpLvfB2wLjG4xWDd9Czg1OoRMoKQvOS0DSClP/1DWZ0OSU4AdokP0w2hg2zxmT1afn5Dd/c/AwQNNFWQ3M1PL4LI8EB2gh6q075TOKek9UNJno/HM7Ghgj+gc/XRwHqv7xPq758TMTgd26W+qYEe4e5VONNRWnlJ7BZg9OgswEpjX3dV+tYHMbA7geWDq6CykFsBzahNgGczsEOCo6Bz9dIa779qf/8NA1sh3B4YM4P8X6Sdm9v3oEPLJxtIh0TmyqYH/jQ4hYb5FGYM/wBAN/mUws72o3uA/hAHc5dPvAiB3E9oCeKy//99gx5lZlS47qrPB0QF62D46gIQpaW23pM9EY5nZjlTrPhxIY/EWE+v0Nzn9XgL45P9otjjwT2C2Af0BMRzY0d3PjQ7SZGY2CHgkOkcPS7h71QpaaYGZLQ08FJ2jh6XcfWh0iCYzsy2Ai6lOf3+A14GVBvr9NeBjcvkHbkFaR60KA/6Yf9ESJH/RvRCdowfNAjTPjtEBenhBg38sM/sacAHVGvxHkp78B/zw0tI5eXcfwgDWHYJNCVyQf+ESp6Qpz53MrJS1YOkwM/sUmv6XzMxWJ3X5myY6Sz/tnsfgAWu5UY67nwEc3+qf02XTAJeb2VeigzRYSV96C1LWgCCd9W1gnugQPZT0WWgUM/siqWXudNFZ+un4PPa2ZMB7AMb5Q1LHvT8Bm7b8h3XXO8C67n5XdJCmMbNFgKeCY/T0BLCku1flBkwZgNwi/HHK6f4H8Bl3Hx4domnM7HPA3yjjSHJ/XEma+m+5MV9bWuXmINsB/27Hn9dFMwF/MbMq3e5UC/kLb3hwjJ4+S7oCW+ptO8oa/Idr8O8+M/sscBPVG/z/DWzXjsEf2lQAALj7e8DXSY01qmRW4CYzWyI6SANdFR1gPIfq/oj6yr/bQ6JzjKe0z0DtmdkCwF+BeaOz9NPzwNfzWNsWbf2yc/cRpNaaJdz53h9zATfnaWnpnnOiA4xnELBldAjpmK2A0gr90j4DtWZmc5EG/0WCo/TX+8A38hjbNm3ZAzDBH2q2OXAZ6dhdlTwBrO7uJR1RqzUzewhYOjpHD0OB5QbSVEPKlU953E8q8krxsLt/LjpEU5jZLMAtwPLRWfrJgS3d/fJ2/8Edme7MQUubauuLzwJ/NbM5o4M0SGlPQIOAA6NDSNsdSFmDP5T33q8tM5sRuI7qDf4AP+rE4A8dmgH45A83+yOwU8d+QOc8DKzj7i9GB6m7vB73NB0qRgfofVJntmeig0jrzGwhUufJ6aOz9DAaWNjdn4sOUndm9mngemDl6CwDcJa779ypP7zTX7rfBW7t8M/ohKWBv+XBSToofwHeEp1jPNMDJ0WHkLY5ibIGf4BbNPh3npnNRlrzr+LgfytpDO2YjhYA7v4RsDkwrJM/p0OWIBUBJR0ZqqsSp0I3NbMNo0NIa/LvsMT+JCW+52slL+UOBr4YnWUAhgGb5zG0Yzq6BPDJD0mD6O3A/B3/Ye33DLC2uz8RHaSuzGwG4CVghugs43kSWMbdP4gOIv1nZtMDDwCLRmcZz3vA3O08ziXjMrN5SE/+VdxkOQJY1d2f7vQP6sq6a/4XWR94oxs/r80WAm41syWjg9RV/iLsyCaXFi0KnBwdQgbsZMob/AEu1+DfOWY2P6nDXxUH/9eB9box+EMXN165+0PARlSvRwDAfKTlgGWig9TY6dEBerGLmX0rOoT0j5ltT+r5X6JS3+uVl2ebb6W8fg998R6wkbs/3K0f2JUlgHF+oNkGwJ+BKt6+9irwVXe/LzpIHZnZbcCq0Tkm4h1ghVau3ZTuMbNBwN2Ut6QEcLu7rxYdoo5ye9/BpFnbqhlJ6vJ3Qzd/aNePXrn79aSjgd2tPNpjDmCwmX0pOkhN/SI6QC9mAi4xs2mjg8ikmdl0wKWUOfhDue/xSstLtH+jmoP/aGD7bg/+EHT22t0vAPaL+NltMCupWdAq0UHqxt3/AtwTnaMXywO/jA4hk3UyUOpS3T35PS5t1ONWvypuMgfY290vjvjBYc1X3P03VLcanhm4wcy+Eh2khkp+T+xpZntGh5CJM7MDgF2ic0xCye/tSjKz/wGGAHMHRxmow939d1E/vOt7ACYIYHYqHW520EEfAFu5+7XRQerCzIzUs73Up7jRwLbuflF0EBnLzLYjna0v9f6RB0l3TFRx6bNIeRb2GtKsbBWd4u57RwYoof3qHqSLg6poOuBKM9sxOkhd5C/II6NzTMIUwDlmtl50EEnM7GvAmZQ7+AMcqcG/fcxsY9I5/6oO/hcA+0SHCJ8BADCzaUgXNawTnaUFP3T346JD1EG+t30osHh0lkl4j9Qg6q7oIE1mZisCN1Pupj+Ax4BB7j46OkgdmNlOwP8BUwVHGajrgU1KuHG0hBmAMS2DNyUd3amqY83sl3kKW1qQvyiPjs4xGTMA15lZSVcZN0r+b38tZQ/+AEdr8G8PM/sh8EeqO/jfQbraN3zwh0JmAMYwszlIGzqq2MFpjPOBnUv5BVeVmU1F2guwVHSWyXgN2FAzAd2Vn/yvBWaPzjIZj5DW/kdFB6my/GD1S2D/6CwtuI80a1hMR9wiZgDGcPdXScsAQ6OztGBb4Krc314GKH9h7hWdow9mJ/WG0J6ALslr/jdT/uAPsKcG/9aY2dTAuVR78H+A1ESumMEfCisAANz9JWBtqnmD4BhfIw0KVfiCKpa7DwYujM7RBzMA15jZ1tFB6i7v9r+K8qf9Ac5399Kuuq6U/CB1NenBqqoeAdbND7hFKWoJoKceFzp8NjpLCx4lXezwTHSQqjKzeUn/HWeKztIHo4F93P230UHqKJ/zP4Gyd/uP8RZp49+L0UGqKi8JXwt8OTpLC4YBXyn1fVDcDMAY7j4CWAsYHhylFUsC/9AlQgPn7i8Ah0fn6KMpgFPM7BS1DW4fM5vOzE4jrQFXYfAH+EmpX/pVkC/1uY1qD/5PkNb8i30fFDsDMIaZLUJ1ezyP8Qbpoofbo4NUUd4QeC+wbHSWfrgP+KYuEGpN7vF+KdX63f8b+JK7fxwdpIryA9MNpFtYq2o4sIa7PxsdZFKKnQEYw92Hk2YCnguO0opZgZvM7OvRQaoob6LaIzpHPy0P3KOrhAcur/ffTbUGfwd21+A/MGa2GvB3qj34PwusVfrgDxUoAADc/UnSxsAXorO0YDrgCjMLbf1YVe5+G6nVa5XMBJxvZqfnW+qkD8xsejM7g7Tze8boPP10urvfGR2iisxsG+AmYJboLC0YQRr8h0cH6YvilwB6yvd8D6G6Fz+M8TvSZjE9JfSDmc0FPEw1jn+N70nSrV/XRQcpmZltSLrRb9HoLAPwErC0u78eHaRqzOxw4KfROVr0ImnDX2VOsFViBmAMdx9K6hPwSnSWFu0BXGtmn44OUiXu/jKwI2matWoWJf3OrzCzKu9n6QgzW8jMriDt+q7i4D8a2E6Df/+Y2afM7AKqP/i/TNrwV5nBHypWAAC4+0PAuqQObFW2PumEwGeig1RJvnnx+OgcLdgUeMTMDs4NThrNzKY2s4NJZ6U3jc7TgqPc/a/RIaokz+gNBraJztKiV0nn/B+JDtJflVoC6MnMPk/qBlbV26DGeAXY1N3/ER2kKvKpgCHAqsFRWjWU9ORzadN6xecLn7Yi/fsPik3Tsr8B62hJr+/yTv+rgUWCo7TqDdKT/33RQQaisgUAgJl9kXQlZNWn0v8L7OLu50cHqQozW4B01K6K+wHGN4x0+dF5dW8bm4u37YBDgCWC47TDK8Dy7v58dJCqMLMNgIuAmaOztOgt0pN/ZS+xq9wSQE/5P/xXgaqvu00LnGdmP9dtgn3j7s8BO1DN/QDjW4J0w9njZraHmX0qOlC75bXePYDHSf+udRj8Hdheg3/f5VNQV1P9wf91Um//yg7+UPEZgDHMbFngRmCe6CxtcAmwo7t/GB2kCszsGOCH0Tna7EXSkcez3f3h6DCtyFf27kgq1urw+ezpaHf/UXSIKjCzKYGTgD2js7TBi6QW7w9EB2lVLQoAADNbnLQcUIcd1ncCm+SLkWQS8pTyLcBq0Vk65B5SMXBBiZeJTEzu4f4t0qC/QnCcTrkNWFPr/pNnZjOTHmzWj87SBs+Qpv1r0eGzNgUAgJktSCoC6jC9+AypffD90UFKly+OuhOYPzpLB40Ergf+DNzs7k8H5xlH7t2+DrAJsAFQ5xMOI4AV830lMgn5lNM1wNLRWdpgGGnwL77DX1/VqgAAMLO5ScsBy0VnaYN3gG3y0TeZhLyr+O9Uu4tYfzxBOkJ1MzDY3bvaG8PM5iR151wn/7XKt3b2xxvA6vk4skyCma0CXAnMGZ2lDe4nTfvXala2dgUAgJnNSnpaWjE6SxuMBn4GHOF1/GW1Ue4jfhNQu010k+GkI4VDSVcnDxvzarUwyAP9kqRZtTGvQfnVtA2rH5A2fulSr8kws92BXwPTRGdpgzuBDdz9jegg7VbLAgDAzGYk7TZdMzhKu1yPOo1NlpltAvwJmDI6SyHeIF2k9XYvL0g7sif2WpDmzKhMzihgM3e/JjpIycxseuBUYPvoLG0yhLQU+250kE6obQEA6egRcBmwUXSWNhkObOnu90QHKZmZ7QacFp1DamVndz8rOkTJzGwxUvFdh+VXSG2pt6zziaxK9wGYnPyL24y0A7UOFgFuN7Ndo4OUzN3/D/hJdA6pjYM1+E9annm7m/oM/peQZnxqO/hDzQsAAHcfSeo1fWZ0ljaZFvg/Mzuzjg1j2sXdf0G6dVGkFSe6+7HRIUplZlOa2dHAFVS/I+sYZ5I2X4+MDtJptV4C6Cl32DsR2Dc6SxvdB2zh7k9GBylR7jd/PrB1dBappLNJU//N+JLsp7xB9CLSKZC6OAnYvym/89rPAIzhyX7AEdFZ2mh54B4z2zg6SInyBTvbopkA6b9fo8G/V2a2EnAv9Rr8j3D3/Zr0O29MATCGux8GfD86RxvNAlxlZr/IT7zSg7uPdvc90Z4A6buD3b0xT4H9ZWZ7km5AXCA6Sxt9P48NjdKYJYDxmdl3SU+GdRo0/0pau6pEy9huy6cDfo+OCMrEjQK+4+5/jA5SonzE7zTSrFpdjAb2cPc/RAeJ0NgCAMDMNiOtEU8XnaWNngW2cvc7o4OUKO9WvojmNQuSSfsA+F93vzo6SInyXSuXA8tEZ2mjD4Bt3f2K6CBRGl0AAJjZiqSGQXVoVznGR8CB7n5KdJAS5Y6BV6MmN5K8QWr2og5/E2Fmm5OucK76Fb49vQx8o+kPSo0vAADMbFFSp706XCLU07XALnXrX90O+e6Av1DvC4Rk8kYA66u3/4RyN9VfA7tEZ2mzR4ENdXqqXuvfA5bfCCuTLpOpk42AB8zs69FBSuPuD5LuirgtOouEuY10q58G//HkXf73Ub/B/1ZgZQ3+iQqALPfY/yppfbhO5iSdEviDmc0QHaYk+TrXtYBjSRfqSDM46Xe+lq70HZeZTWVmPyUVR3W74fEC0mVOtbvUZ6C0BDCe3DDoKODg6Cwd8BjpQqG7ooOUxsw2BM4BZo/OIh31GrCDu18XHaQ0uZf/edTjFtXxHQX8WEc7x6UCoBdm9h3SMcG6HRkbBfwcOMrdP44OUxIzW4A0A7RqdBbpiNuBrd39ueggpclHZE8E6jZLOAr4nrufER2kRCoAJsHMNiBdCjFjdJYOuIM0G6C1sB7MbCrgSFKzqKbdd19XDhwPHOruo6LDlCS38/0/YJPoLB3wNulI9I3RQUqlAmAyzGx50m76+aKzdMC7wL7uXpeLktrGzDYi9YLXkkC1vQbs6O7XRgcpTV72OhOYOzpLBzwHbOTu90cHKZk2AU6Gu98HrAQ8EJ2lA2YEzjCzy81MA10PecBYmrQvQKrpHGBpDf7jMrPpzOy3pAebOg7+9wErafCfPM0A9JGZzQz8CVg3OkuHvEC6/OSG6CClMbM1gN9Sry5odfYAqb2rjniOx8xWIG30GxSdpUP+Qpr2fzc6SBVoBqCP3P1tYENSR6w6mhe43sx+Y2Z1ao3cMne/Ffg8cBBp2UTK9A5wAPAFDf7jMrMpzOxHpL0/dR38TyN1dNRntI80AzAAZnYY8LPoHB00DPiuuw+JDlIaM5uftFt6q+gsMo4LSe2vX4gOUhozWw74A2kps44cOMTdj40OUjUqAAbIzLYHTgemic7SQWcBB7n7a9FBSmNm6wGnAItHZ2m4R4C93H1wdJDS5Jm8w4EDgamC43TKf0mbPC+ODlJFKgBaYGYrA5dRzxMCY7wKHODu50YHKY2ZTQPsQGoaVbeuaaV7DDgaOFdH+yZkZuuTrr7+THSWDnoW2MLd/xUdpKpUALTIzOYm9QpYIzpLh91MaqjxeHSQ0pjZlMDWwI9IJwekcx4k9Wm4xN1HR4cpTf4++jXp/Vhng0lNnV6JDlJl2gTYonzT3jqkD12drUO6WOhQM5s6OkxJ3P1jdz+fdEpgC+De4Eh1dA+wGbCcu1+kwX9cluwGDKX+g//xwHoa/FunGYA2MrNtSPsCpo/O0mEPkTYJ6v70XuQukj8GVonOUnG3A79w979EBymVmS1N2uS3WnSWDnsX+La7XxodpC5UALSZmS0LXEH914Sd1EL0h+7+ZnSYUuUeArsCm1O/Puud8h5wOXB6PoIpE2FmnyIVmT8A6j4rNwzYzN0fjg5SJyoAOsDMZiE129goOksXvAjsp124k5avYt6CtGlwLbT8Nr7RwC2k7n1/cvf3gvMUzczWAU4FFovO0gV/Jt3g+HZ0kLpRAdAh+Vrhw0jHcJpwqcz1pO5rw6ODlC7fOrgtqRho+qbBh0mD/vm6pW/yzGwO4FfA9tFZumA06Tv0KF3j2xkqADosX7hxPjBLdJYueB/4KXCijmb1TW7NugPwDWCR2DRdMxy4CjjH3e8JzlIJ+YFiJ9IGuCbc2/E6sK32fnSWCoAuMLPPktY0l4vO0iXDSJ25Lo8OUiVmtgiwdo/XvJF52ugF0rGtwcBgzRL1j5mtBRwHfDE6S5fcB2zu7k9FB6k7FQBdYmbTk3pVbxudpYv+AXzf3f8RHaSKzGwQY4uBNanOk99rwBDGDvhDY+NUk5ktAxxLuoOkKc4DvuPuH0QHaQIVAF1mZvsAv6S+rTkn5grgYHcfFh2kqvIU8DLAssCSPV5LEHfs9H3SbM+jPV4PAA9qzXbg8n0TRwA70pzNoiNJdzmcHB2kSVQABDCz1UndA+eJztJFo0jHBn+WmydJG+TCYAEmLApmB2bq8ZqRvm9GddKZ63d6vF5jwsH+OQ307WNmnwZ+COwHNOlGzhdJV/jqBscuUwEQxMzmJd0j0LRGMe+SNjL9Uke9uicXCjOQioGZGVsYwNhB/u381/c0sHdPvlNid9KZ/jmC43Tb7aTBX7c4BlABECi31D0R2DM6S4AXSUckz3D3j6PDiHRbLsq+CRwFLBocJ8Jvgf3dfWR0kKZSAVAAM9uUND3etOof0nWuB7v7VdFBRLrFzNYk7ez/UnCUCK8Cu7n7ldFBmk4FQCHMbB7gTGCD6CxB/k46MXBndBCRTjGzz5F29jehS+jEXE/q5/9idBBpzg7T4rn7i+6+IbAX0MQjMKsD/zSzS8xs8egwIu1kZguY2RnAf2jm4P8BsJe7b6jBvxyaAShQPv99PvCF6CxBRpMaJx3v7ndFhxEZqPzEfxCp/0fdL+zpzb2krn7qB1EYzQAUKH9QVgKOJg2GTTMFsCVwp5kNMbMN84YpkUows9XN7GpSX4SdaObgP5r0HbaSBv8yaQagcLlnwDk0p098bx4ETgAu0K5hKZGZTQFsQrqed6XgONGGA9vrbH/ZVABUgJnNDJxMujSm6Z4Dfg2c5u7vRIcRMbNpSbfzHURqxNR05wB76/re8qkAqBAz24p0B/hs0VkK8Bbpv8VJaiIiEcxsFuB7wL40q6tnb14Hvuful0YHkb5RAVAxuU/4WcC6wVFK8RHpApHjtc4o3ZA/g/sD32FsN8Wm+yuwk7uPiA4ifacCoILyhrh9SRtsPhUcpxRdFb3eAAAJXElEQVQOXE0qBLTuKG2nHf0T9SFwCGkmToNJxagAqLB8Xeh5wP9EZynMHcCvgKvc/aPoMFJdudhei/TEvxF9v1CpCf4DbOfuD0YHkYFRAVBx+SKRI4ED0ZfT+F4HLgTOdvd/RYeR6jCzJUibbrcHFgqOUxonXWl+qArsalMBUBNmthZwNrBgdJZCDSX99znP3Z+LDiPlMbPZgK1JA/+KwXFK9Sywo7vfEh1EWqcCoEbyruQTgG+j2YDejAYGk4qBy939/eA8EijfyLkhadDfGJgmNlGxnHRXyUHu/mZ0GGkPFQA1ZGarAL8HlovOUrh3gctIxcDftImpOczsi6RBfxuaeQtnf/wH2N3d74gOIu2lAqCmzGwqYG/gZ+ioUl88DZxL2i/weHQYaT8zWwDYjjTwLxUcpwreAQ4DTnb3j6PDSPupAKi5fGb5RGCr6CwV8g/SrMAlmu6sNjObAdicNOivje4/6auLgQPc/fnoINI5KgAawszWB04BFovOUiEfkhqc3Ajc6O6PBueRPjCzzwDr9XjNGJuoUoYBe7r7X6ODSOepAGiQ3LP84PxSA6H+e4ZcDAA3u/vrwXmET+7KWBv4KmnAV5Hbfx8ARwHH6Whfc6gAaCAzW4w0G7B+dJYKGw3cw9iC4A7dUtgdZjYl8CXGPuGvCEwVGqrariVd3vNUdBDpLhUADWZmW5Ju1ps/OksNvAMMYexywbDYOPUy3rT+2sAssYlq4RlgX3e/MjqIxFAB0HBmNiPppMA+6CmqnZ5m3OWCN4LzVIqm9TtqJKlV9s/VB6PZVAAIAGa2HKl3wCrRWWpoNHAfcG+P1/3u/kFoqkLkvSnLAl/o8fo8Kkg7YQiwh7s/Eh1E4qkAkE/ki092Bo4DZg+OU3cfA48wblFwn7u/E5qqw/KM0/8w7kD/OTTYd9pLpC5+50UHkXKoAJAJmNnswDHALqilcLc9DzwGPJ7/OubvH6/KdK2ZTQd8Fli8x2ux/Nf50Huqm0aTZvYOdfe3osNIWVQASK/MbGXSl4euG47npOLgcdKFLC/n1ys9/v5l4OVOFQp5YJ+rl9ecwAKkQX5+NMiX4C7SdP890UGkTCoAZJLMbArSDWk/JX25S/neA14lNTIa8/pvL3+F1BNi2kn8dTrSkpAa6lTDQ8DhpMuu9AUvvVIBIH2Sz17vQOoNvkhsGhGZiMdIhfpF7j46OItUgAoA6Zd8feouwKGkKV8RiTUc+Dlwji7tkf5QASADko9ufRc4BJgnOI5IE40AjgROVxdKGQgVANISM5se2BP4AbpXXaQbXgaOBk519w8n9w+L9EYFgLRFPt+9L3AQatMq0gmvk3p0nOLu70WHkepTASBtZWazAAcA+wEzBccRqYO3gBOBE9397egwUh8qAKQjcjOhHwB7AdMHxxGpoveA3wDH6y4J6QQVANJRZjY3cDDwPdK5chGZtA+B3wHHuPsr0WGkvlQASFeY2fyko4O7ANMExxEp0UfA6cCR7v58dBipPxUA0lVmtjDwE2BHdAGMCMAo4GzgCHd/OjqMNIcKAAlhZp8hnRr4NtosKM30DnAG8Bt3fyo6jDSPCgAJZWYzA7sC+wALB8cR6YbhpM19Z2hXv0RSASBFyHcNbAbsD6wSHEekE24nHee7Ui17pQQqAKQ4ZrYiqRDYAu0TkGobCVxKOsN/d3QYkZ5UAEixzGxBYG9gN9RdUKrldeA0Ute+EdFhRCZGBYAUz8xmAL5JOkK4anAckUm5lbSx7zJ3fz86jMikqACQSjGzJUknB3ZAtxBKGZ4nHeP7o7s/Fh1GpK9UAEglmdlUwAakWYGN0F4B6a6RwDXAmcD12tQnVaQCQCovtxvegTQzMCg4jtTbI6RB/xx3fzk6jPx/e/fvIlcVh3H4PbERQVEw8UeRQsQfaGsSG1EEUxu090+zV7SOEJQ0rrFViCIWKdSoYFAQi5hrce+ym1XC6sa9k3mfBw5M+d1mz2fO3DnDUQgAtsoY4+Uk7yS5kOTRdadhS/yc5IMk707T9Onaw8DdIgDYSsu9Aq8leTvz/QIn152Ie8xPST7M/BW+jx3xs40EAFtviYFXk7yV+WTg1KoDsal+zPxO//0kn9j02XYCgCpLDLyS+WTgQpLH1p2IlV3PvOm/l+SyTZ8mAoBaY4wTmWPgzSTnkzy77kQck6+SXMx8xH95mqZbK88DqxAAsBhjnM4cAueTvB63D26LG0kuZd70L07TdG3leWAjCAD4B8tHBWeSvJE5CM4kuW/VoTisP5Ncybzhf5TkiqN9+DsBAIcwxng486nA7unAU+tOxAHfZu9d/qVpmm6sPA9sPAEA/8EY41SSc8s6m+SlJA+uOlSP35J8nuSzJDtJdlzKA/+eAIC7YHmg8IXsBcG5JM8nObHmXFvgVubb93ayt+F/6cE9ODoBAP+TMcZDmZ8dOJvkxczXFD+T5IE159pgvyf5OsnVJF9k3vCvTNP066pTwZYSAHCMxhgjyenMMfBc5lOC3dctdxJcz7zJX8387n739bXJPyQ4NgIANsTyoOFuDDyd5MkkT+xbJ5OM1QY8nCnzNbrf71vfJfkmy0bvAT3YDAIA7hHLTyA/ntujYP96JMn9d1iH/cnkm0n+uMP6Jbdv8PvXD9M03TzaXwocBwEAJZa7DQ5GQXJgg/edeeggAACgkK8oAUAhAQAAhQQAABQSAABQSAAAQCEBAACFBAAAFBIAAFBIAABAIQEAAIUEAAAUEgAAUEgAAEAhAQAAhQQAABQSAABQSAAAQCEBAACFBAAAFBIAAFBIAABAIQEAAIUEAAAUEgAAUEgAAEAhAQAAhQQAABQSAABQSAAAQCEBAACFBAAAFBIAAFBIAABAIQEAAIUEAAAUEgAAUEgAAEAhAQAAhQQAABQSAABQSAAAQCEBAACFBAAAFBIAAFBIAABAIQEAAIUEAAAUEgAAUEgAAEAhAQAAhQQAABQSAABQSAAAQCEBAACFBAAAFBIAAFBIAABAIQEAAIUEAAAUEgAAUEgAAEAhAQAAhQQAABQSAABQSAAAQCEBAACFBAAAFBIAAFBIAABAIQEAAIUEAAAUEgAAUEgAAEAhAQAAhQQAABQSAABQSAAAQCEBAACFBAAAFBIAAFBIAABAIQEAAIUEAAAUEgAAUEgAAEAhAQAAhQQAABQSAABQSAAAQCEBAACFBAAAFPoLqdNNJK3bEGwAAAAASUVORK5CYII="/> +</defs> +</svg> diff --git a/frontend/src/assets/feedback-icon/bad-feedback-gray-icon.svg b/frontend/src/assets/feedback-icon/bad-feedback-gray-icon.svg new file mode 100644 index 000000000..044ecded5 --- /dev/null +++ b/frontend/src/assets/feedback-icon/bad-feedback-gray-icon.svg @@ -0,0 +1,87 @@ +<?xml version="1.0" encoding="UTF-8"?> +<svg id="_레이어_2" data-name="레이어 2" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 73.56 45.78"> + <defs> + <style> + .cls-1 { + fill: #919191; + } + + .cls-2 { + fill: #7c7b7c; + } + + .cls-3 { + fill: #abaaaa; + } + + .cls-4 { + fill: #c9caca; + } + + .cls-5 { + fill: #dbdbdb; + } + + .cls-6 { + fill: #595757; + } + </style> + </defs> + <g id="_레이어_1-2" data-name="레이어 1"> + <g> + <g> + <g> + <g> + <path class="cls-2" d="m18.01,4.93c-1.96,9.36-3.4,18.82-4.31,28.33"/> + <path class="cls-3" d="m15.59,4.26c-2,9.58-3.46,19.26-4.4,29-.13,1.35,1.24,2.5,2.5,2.5,1.46,0,2.37-1.15,2.5-2.5.9-9.3,2.32-18.53,4.22-27.67.28-1.32-.39-2.7-1.75-3.08-1.24-.34-2.8.42-3.08,1.75h0Z"/> + </g> + <g> + <g> + <path class="cls-2" d="m18.49,4.59c9.53-1.11,18.87-1.24,28.63-1.77,7.93-.43,16.11-.32,23.87-.32"/> + <path class="cls-3" d="m18.49,7.09c8.77-1.01,17.59-1.23,26.4-1.66s17.39-.44,26.1-.44c3.22,0,3.22-5,0-5-8.71,0-17.39.01-26.1.44s-17.63.65-26.4,1.66c-1.34.15-2.5,1.04-2.5,2.5,0,1.23,1.15,2.66,2.5,2.5h0Z"/> + </g> + <g> + <path class="cls-2" d="m71.11,3.35c-1.68,10.43-1.58,21.05-1.47,31.61"/> + <path class="cls-3" d="m68.69,2.69c-1.7,10.69-1.67,21.48-1.56,32.27.03,3.22,5.03,3.22,5,0-.1-10.32-.24-20.72,1.39-30.94.21-1.33-.34-2.69-1.75-3.08-1.19-.33-2.86.4-3.08,1.75h0Z"/> + </g> + </g> + <g> + <path class="cls-2" d="m2.51,42.15c2.74-1.92,5.47-3.85,8.21-5.77.99-.69,2.11-1.37,3.09-1.96"/> + <path class="cls-3" d="m3.77,44.31c3.73-2.62,7.39-5.38,11.3-7.73,1.12-.67,1.63-2.28.9-3.42s-2.22-1.62-3.42-.9c-3.91,2.35-7.57,5.11-11.3,7.73-1.07.75-1.67,2.22-.9,3.42.68,1.06,2.28,1.7,3.42.9h0Z"/> + </g> + <g> + <path class="cls-2" d="m61.99,43.28c-19.72-.02-39.43-.2-59.15-.52"/> + <path class="cls-3" d="m61.99,40.78c-19.72-.02-39.43-.2-59.15-.52-3.22-.05-3.22,4.95,0,5,19.71.32,39.43.5,59.15.52,3.22,0,3.22-5,0-5h0Z"/> + </g> + <g> + <path class="cls-2" d="m68.51,35.67c-2.42,1.98-4.51,4.36-6.16,7.02"/> + <path class="cls-3" d="m66.74,33.9c-2.58,2.12-4.79,4.69-6.55,7.53-.69,1.11-.27,2.8.9,3.42s2.68.29,3.42-.9c.51-.83,1.07-1.63,1.66-2.4l-.39.51c1.32-1.7,2.83-3.25,4.49-4.62.47-.38.73-1.19.73-1.77,0-.61-.27-1.35-.73-1.77s-1.1-.76-1.77-.73c-.7.03-1.23.29-1.77.73h0Z"/> + </g> + </g> + <polygon class="cls-3" points="13.81 34.42 18.49 4.93 70.34 2.5 69.63 34.96 62.35 42.69 2.51 42.15 13.81 34.42"/> + </g> + <g> + <path class="cls-4" d="m23.83,11.13c13.13-.51,26.25-1.02,39.38-1.53,3.21-.12,3.22-5.12,0-5-13.13.51-26.25,1.02-39.38,1.53-3.21.12-3.22,5.12,0,5h0Z"/> + <path class="cls-4" d="m60.86,7.12c-.88,7.74-1.26,15.51-1.22,23.3l2.5-2.5c-13.82.06-27.66.23-41.47-.46l2.5,2.5c.04-3.56.67-7.18,1.04-10.73s.92-6.71,2.04-9.94c.44-1.28-.5-2.73-1.75-3.08-1.37-.38-2.63.47-3.08,1.75-1.22,3.52-1.78,7.16-2.17,10.85s-1.03,7.45-1.08,11.15c-.02,1.4,1.16,2.43,2.5,2.5,13.81.69,27.65.52,41.47.46,1.35,0,2.51-1.14,2.5-2.5-.04-7.79.34-15.56,1.22-23.3.15-1.34-1.26-2.5-2.5-2.5-1.48,0-2.35,1.15-2.5,2.5h0Z"/> + <path class="cls-4" d="m24.46,8.66s-4.54,9.61-2.36,20.59l40.67,1.21,1.54-23.3-39.85,1.5Z"/> + </g> + <path class="cls-6" d="m31.31,16.79c-.15,0-.29.03-.43.05-.04,0-.07.02-.11.03-.13.05-.27.1-.39.17-.02.01-.03.02-.05.03-.1.07-.2.15-.29.22-.03.02-.06.05-.08.08-.08.09-.15.19-.22.29-.01.01-.02.03-.03.05-.07.12-.13.28-.17.39-.01.04-.03.07-.03.11-.05.17-.06.33-.02.5,0,.17.06.32.15.46l.2.25c.16.15.34.26.55.32.13.05.26.1.4.12.11.02.28.05.42.05.02,0,.03,0,.05,0,0,0,.02,0,.02,0,.11-.01.24-.03.36-.05.03,0,.06-.01.09-.03.12-.04.25-.09.36-.15s.2-.14.29-.23c0,0,.01-.01.02-.02,0,0,0,0,0-.01.07-.08.15-.18.2-.26.01-.02.02-.03.03-.05,0,0,0-.02.01-.03.05-.11.1-.21.14-.32,0-.02.01-.04.01-.05.02-.12.03-.24.05-.35,0-.01,0-.02,0-.04,0-.02,0-.04,0-.06,0-.09-.03-.25-.05-.34,0,0,0,0,0-.01,0-.01,0-.02,0-.03,0,0,0,0,0-.01,0,0,0,0,0,0l-.13-.3s0-.02-.01-.03c-.03-.05-.09-.11-.11-.15-.02-.03-.07-.1-.11-.15-.09-.09-.19-.17-.29-.23,0,0,0,0-.01,0-.05-.02-.1-.04-.16-.07-.05-.02-.1-.05-.16-.07-.01,0-.02,0-.03,0-.17-.05-.33-.06-.5-.02-.17,0-.32.06-.46.15-.15.08-.26.19-.35.32-.11.12-.19.26-.22.43l-.04.33c0,.23.06.44.17.63l.2.25c.16.15.34.26.55.32.01,0,.03,0,.04.01l-.3-.13s.03.02.05.03l-.25-.2s.02.02.03.03l-.2-.25s.02.03.03.05l-.13-.3s.02.05.02.07l-.04-.33s0,.06,0,.09l.04-.33s-.01.07-.03.1l.13-.3s-.03.06-.05.08l.2-.25s-.03.04-.05.05l.25-.2s-.05.03-.07.04l.3-.13s-.08.03-.12.03l.33-.04c-.06,0-.11,0-.17,0l.33.04c-.14-.02-.27-.07-.4-.12l.87,1.54s.02-.08.04-.12l-.13.3s.05-.1.08-.14l-.2.25s.08-.09.12-.12l-.25.2s.09-.06.14-.08l-.3.13c.05-.02.1-.04.16-.04l-.33.04s.05,0,.07,0c.17,0,.33-.03.48-.11.15-.05.29-.14.4-.26.12-.11.21-.25.26-.4.08-.15.11-.31.11-.48l-.04-.33c-.06-.21-.17-.4-.32-.55l-.25-.2c-.19-.11-.41-.17-.63-.17h0Z"/> + <path class="cls-6" d="m49.54,16.33c-.05.03-.1.08-.15.11-.04.03-.1.07-.15.11-.01.01-.03.03-.04.04-.07.08-.15.18-.21.27,0,0-.01.02-.02.02,0,0,0,.01-.01.02,0,0,0,.01,0,.02-.04.09-.1.21-.13.31-.05.14-.06.3-.07.44,0,.04,0,.08,0,.12.02.13.03.26.05.38,0,.02.01.04.02.06.04.12.09.23.14.34,0,.02.02.04.03.06.07.12.16.24.26.34.01.01.03.03.04.04.08.07.18.15.27.21,0,0,.02.01.03.02.12.08.26.13.4.17,0,0,.02,0,.03,0,.11.02.24.04.35.05.02,0,.04,0,.06,0,.13,0,.3-.02.44-.07.1-.04.22-.08.31-.13,0,0,.02,0,.02-.01s.02,0,.02-.01c.09-.06.19-.14.27-.21.1-.09.2-.23.27-.33.02-.03.04-.06.06-.1.05-.11.1-.23.14-.34,0-.02.01-.04.02-.06.03-.12.04-.25.05-.38,0-.02,0-.04,0-.06s0-.04,0-.06c-.01-.12-.03-.24-.05-.36,0-.01,0-.02,0-.03,0-.02-.01-.04-.02-.06-.04-.11-.09-.21-.13-.32,0,0,0-.02-.01-.03,0-.02-.02-.04-.03-.05-.06-.09-.14-.19-.21-.27,0,0-.01-.02-.02-.02s-.02-.01-.02-.02c-.09-.07-.18-.14-.27-.21-.02-.01-.04-.02-.06-.03-.14-.09-.3-.14-.46-.15-.17-.04-.33-.03-.5.02-.16.04-.3.11-.43.22-.14.09-.24.21-.32.35l-.13.3c-.06.22-.06.44,0,.66l.13.3c.11.19.26.34.45.45.03.01.05.03.08.05l-.25-.2s.04.04.06.06l-.2-.25s.03.05.05.08l-.13-.3s.03.08.03.12l-.04-.33c0,.05,0,.1,0,.15l.04-.33c0,.05-.02.1-.04.15l.13-.3s-.04.07-.06.11l.2-.25s-.04.05-.07.07l.25-.2s-.05.04-.08.05l.3-.13s-.06.02-.09.02l.33-.04s-.06,0-.09,0l.33.04s-.06-.01-.09-.02l.3.13s-.06-.03-.09-.05l.25.2s-.06-.05-.08-.08l.2.25s-.05-.08-.07-.12l.13.3s-.03-.09-.04-.14l.04.33s0-.09,0-.14l-.04.33s.01-.06.03-.1l-.13.3s.03-.05.04-.08l-.2.25s.04-.04.06-.06l-.25.2s.01-.01.02-.02c.15-.08.26-.19.35-.32.11-.12.19-.26.22-.43.05-.17.06-.33.02-.5,0-.17-.06-.32-.15-.46l-.2-.25c-.16-.15-.34-.26-.55-.32l-.33-.04c-.23,0-.44.06-.63.17h0Z"/> + <g> + <path class="cls-2" d="m61.99,45.09h-.01l-59.71-.67c-.55,0-1-.46-.99-1.01,0-.55.45-.99,1-.99h.01l59.71.67c.55,0,1,.46.99,1.01,0,.55-.45.99-1,.99Z"/> + <path class="cls-2" d="m61.99,45.09c-.19,0-.38-.05-.55-.17-.46-.31-.58-.93-.28-1.39,2.64-3.98,5.62-7.09,8.85-9.26.46-.31,1.08-.19,1.39.27.31.46.19,1.08-.27,1.39-3.01,2.02-5.8,4.96-8.3,8.71-.19.29-.51.45-.83.45Z"/> + <path class="cls-2" d="m70.56,36.1c-.51,0-.95-.39-1-.91-1.27-13.86,1.46-32.66,1.49-32.85.08-.55.58-.93,1.13-.84.55.08.92.59.84,1.13-.03.19-2.72,18.75-1.48,32.38.05.55-.36,1.04-.91,1.09-.03,0-.06,0-.09,0Z"/> + </g> + <g> + <path class="cls-1" d="m38.87,37.76h0l-26.87-.3c-.47,0-.85-.39-.84-.86,0-.47.38-.84.85-.84h0l26.87.3c.47,0,.85.39.84.86,0,.47-.38.84-.85.84Z"/> + <path class="cls-1" d="m61.99,37.95h0l-20.14-.19c-.47,0-.85-.39-.84-.86,0-.47.42-.85.86-.84l20.14.19c.47,0,.85.39.84.86,0,.47-.38.84-.85.84Z"/> + <path class="cls-1" d="m46.34,40.76h0l-26.87-.3c-.47,0-.85-.39-.84-.86,0-.47.38-.84.85-.84h0l26.87.3c.47,0,.85.39.84.86,0,.47-.38.84-.85.84Z"/> + <path class="cls-1" d="m58.69,40.81h0l-9.02-.1c-.47,0-.85-.39-.84-.86,0-.47.38-.84.85-.84h0l9.02.1c.47,0,.85.39.84.86,0,.47-.38.84-.85.84Z"/> + <path class="cls-1" d="m16.29,40.5h0l-9.02-.1c-.47,0-.85-.39-.84-.86,0-.47.38-.84.85-.84h0l9.02.1c.47,0,.85.39.84.86,0,.47-.38.84-.85.84Z"/> + </g> + <path class="cls-5" d="m23.88,9.83c-.54,0-.98-.42-1-.96-.02-.55.41-1.02.96-1.03l3.52-.12c.5-.02,1.02.41,1.03.96.02.55-.41,1.02-.96,1.03l-3.52.12s-.02,0-.04,0Z"/> + <path class="cls-5" d="m30.59,9.71c-.54,0-.98-.42-1-.96-.02-.55.41-1.02.96-1.03l1.54-.05c.54-.01,1.01.41,1.03.96s-.41,1.02-.96,1.03l-1.54.05s-.02,0-.04,0Z"/> + <path class="cls-6" d="m37.13,21.32c.32-.28.87-.61,1.25-.75.28-.1.57-.18.86-.24.02,0,.21-.04.13-.02s.11-.01.13-.01c.16-.01.31-.02.47-.02.14,0,.28,0,.42.02.07,0,.14.01.21.02-.11-.02-.01,0,.04.01.15.04.3.07.45.11.09.03.31.11.31.11.46.19,1.1.56,1.58.88.45.3,1.11.09,1.37-.36.29-.49.09-1.07-.36-1.37-1.24-.82-2.61-1.46-4.12-1.42s-3.01.62-4.15,1.64c-.4.36-.37,1.05,0,1.41.4.4,1.01.36,1.41,0h0Z"/> + </g> + </g> +</svg> \ No newline at end of file diff --git a/frontend/src/assets/feedback-icon/bad-feedback-icon.svg b/frontend/src/assets/feedback-icon/bad-feedback-icon.svg new file mode 100644 index 000000000..efb88612a --- /dev/null +++ b/frontend/src/assets/feedback-icon/bad-feedback-icon.svg @@ -0,0 +1,100 @@ +<?xml version="1.0" encoding="UTF-8"?> +<svg id="_레이어_2" data-name="레이어 2" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 73.56 45.78"> + <defs> + <style> + .cls-1 { + fill: #f4abac; + } + + .cls-2 { + fill: #f08d8e; + } + + .cls-3 { + fill: #f5c7c7; + } + + .cls-4 { + fill: #f2aeb2; + } + + .cls-5 { + fill: #919191; + } + + .cls-6 { + fill: #7c7b7c; + } + + .cls-7 { + fill: #abaaaa; + } + + .cls-8 { + fill: #3c3d3d; + } + </style> + </defs> + <g id="_레이어_1-2" data-name="레이어 1"> + <g> + <g> + <g> + <g> + <g> + <path class="cls-6" d="m18.01,4.93c-1.96,9.36-3.4,18.82-4.31,28.33"/> + <path class="cls-7" d="m15.59,4.26c-2,9.58-3.46,19.26-4.4,29-.13,1.35,1.24,2.5,2.5,2.5,1.46,0,2.37-1.15,2.5-2.5.9-9.3,2.32-18.53,4.22-27.67.28-1.32-.39-2.7-1.75-3.08-1.24-.34-2.8.42-3.08,1.75h0Z"/> + </g> + <g> + <g> + <path class="cls-6" d="m18.49,4.59c9.53-1.11,18.87-1.24,28.63-1.77,7.93-.43,16.11-.32,23.87-.32"/> + <path class="cls-7" d="m18.49,7.09c8.77-1.01,17.59-1.23,26.4-1.66s17.39-.44,26.1-.44c3.22,0,3.22-5,0-5-8.71,0-17.39.01-26.1.44-8.81.43-17.63.65-26.4,1.66-1.34.15-2.5,1.04-2.5,2.5,0,1.23,1.15,2.66,2.5,2.5h0Z"/> + </g> + <g> + <path class="cls-6" d="m71.11,3.35c-1.68,10.43-1.58,21.05-1.47,31.61"/> + <path class="cls-7" d="m68.69,2.69c-1.7,10.69-1.67,21.48-1.56,32.27.03,3.22,5.03,3.22,5,0-.1-10.32-.24-20.72,1.39-30.94.21-1.33-.34-2.69-1.75-3.08-1.19-.33-2.86.4-3.08,1.75h0Z"/> + </g> + </g> + <g> + <path class="cls-6" d="m2.51,42.15c2.74-1.92,5.47-3.85,8.21-5.77.99-.69,2.11-1.37,3.09-1.96"/> + <path class="cls-7" d="m3.77,44.31c3.73-2.62,7.39-5.38,11.3-7.73,1.12-.67,1.63-2.28.9-3.42s-2.22-1.62-3.42-.9c-3.91,2.35-7.57,5.11-11.3,7.73-1.07.75-1.67,2.22-.9,3.42.68,1.06,2.28,1.7,3.42.9h0Z"/> + </g> + <g> + <path class="cls-6" d="m61.99,43.28c-19.72-.02-39.43-.2-59.15-.52"/> + <path class="cls-7" d="m61.99,40.78c-19.72-.02-39.43-.2-59.15-.52-3.22-.05-3.22,4.95,0,5,19.71.32,39.43.5,59.15.52,3.22,0,3.22-5,0-5h0Z"/> + </g> + <g> + <path class="cls-6" d="m68.51,35.67c-2.42,1.98-4.51,4.36-6.16,7.02"/> + <path class="cls-7" d="m66.74,33.9c-2.58,2.12-4.79,4.69-6.55,7.53-.69,1.11-.27,2.8.9,3.42s2.68.29,3.42-.9c.51-.83,1.07-1.63,1.66-2.4l-.39.51c1.32-1.7,2.83-3.25,4.49-4.62.47-.38.73-1.19.73-1.77,0-.61-.27-1.35-.73-1.77s-1.1-.76-1.77-.73c-.7.03-1.23.29-1.77.73h0Z"/> + </g> + </g> + <polygon class="cls-7" points="13.81 34.42 18.49 4.93 70.34 2.5 69.63 34.96 62.35 42.69 2.51 42.15 13.81 34.42"/> + </g> + <g> + <path class="cls-1" d="m23.83,11.13c13.13-.51,26.25-1.02,39.38-1.53,3.21-.12,3.22-5.12,0-5-13.13.51-26.25,1.02-39.38,1.53-3.21.12-3.22,5.12,0,5h0Z"/> + <path class="cls-1" d="m60.86,7.12c-.88,7.74-1.26,15.51-1.22,23.3l2.5-2.5c-13.82.06-27.66.23-41.47-.46l2.5,2.5c.04-3.56.67-7.18,1.04-10.73s.92-6.71,2.04-9.94c.44-1.28-.5-2.73-1.75-3.08-1.37-.38-2.63.47-3.08,1.75-1.22,3.52-1.78,7.16-2.17,10.85s-1.03,7.45-1.08,11.15c-.02,1.4,1.16,2.43,2.5,2.5,13.81.69,27.65.52,41.47.46,1.35,0,2.51-1.14,2.5-2.5-.04-7.79.34-15.56,1.22-23.3.15-1.34-1.26-2.5-2.5-2.5-1.48,0-2.35,1.15-2.5,2.5h0Z"/> + <path class="cls-1" d="m24.46,8.66s-4.54,9.61-2.36,20.59l40.67,1.21,1.54-23.3-39.85,1.5Z"/> + </g> + <path class="cls-8" d="m31.31,16.79c-.15,0-.29.03-.43.05-.04,0-.07.02-.11.03-.13.05-.27.1-.39.17-.02.01-.03.02-.05.03-.1.07-.2.15-.29.22-.03.02-.06.05-.08.08-.08.09-.15.19-.22.29-.01.01-.02.03-.03.05-.07.12-.13.28-.17.39-.01.04-.03.07-.03.11-.05.17-.06.33-.02.5,0,.17.06.32.15.46l.2.25c.16.15.34.26.55.32.13.05.26.1.4.12.11.02.28.05.42.05.02,0,.03,0,.05,0,0,0,.02,0,.02,0,.11-.01.24-.03.36-.05.03,0,.06-.01.09-.03.12-.04.25-.09.36-.15s.2-.14.29-.23c0,0,.01-.01.02-.02,0,0,0,0,0-.01.07-.08.15-.18.2-.26.01-.02.02-.03.03-.05,0,0,0-.02.01-.03.05-.11.1-.21.14-.32,0-.02.01-.04.01-.05.02-.12.03-.24.05-.35,0-.01,0-.02,0-.04,0-.02,0-.04,0-.06,0-.09-.03-.25-.05-.34,0,0,0,0,0-.01,0-.01,0-.02,0-.03,0,0,0,0,0-.01,0,0,0,0,0,0l-.13-.3s0-.02-.01-.03c-.03-.05-.09-.11-.11-.15-.02-.03-.07-.1-.11-.15-.09-.09-.19-.17-.29-.23,0,0,0,0-.01,0-.05-.02-.1-.04-.16-.07-.05-.02-.1-.05-.16-.07-.01,0-.02,0-.03,0-.17-.05-.33-.06-.5-.02-.17,0-.32.06-.46.15-.15.08-.26.19-.35.32-.11.12-.19.26-.22.43l-.04.33c0,.23.06.44.17.63l.2.25c.16.15.34.26.55.32.01,0,.03,0,.04.01l-.3-.13s.03.02.05.03l-.25-.2s.02.02.03.03l-.2-.25s.02.03.03.05l-.13-.3s.02.05.02.07l-.04-.33s0,.06,0,.09l.04-.33s-.01.07-.03.1l.13-.3s-.03.06-.05.08l.2-.25s-.03.04-.05.05l.25-.2s-.05.03-.07.04l.3-.13s-.08.03-.12.03l.33-.04c-.06,0-.11,0-.17,0l.33.04c-.14-.02-.27-.07-.4-.12l.87,1.54s.02-.08.04-.12l-.13.3s.05-.1.08-.14l-.2.25s.08-.09.12-.12l-.25.2s.09-.06.14-.08l-.3.13c.05-.02.1-.04.16-.04l-.33.04s.05,0,.07,0c.17,0,.33-.03.48-.11.15-.05.29-.14.4-.26.12-.11.21-.25.26-.4.08-.15.11-.31.11-.48l-.04-.33c-.06-.21-.17-.4-.32-.55l-.25-.2c-.19-.11-.41-.17-.63-.17h0Z"/> + <path class="cls-8" d="m49.54,16.33c-.05.03-.1.08-.15.11-.04.03-.1.07-.15.11-.01.01-.03.03-.04.04-.07.08-.15.18-.21.27,0,0-.01.02-.02.02,0,0,0,.01-.01.02,0,0,0,.01,0,.02-.04.09-.1.21-.13.31-.05.14-.06.3-.07.44,0,.04,0,.08,0,.12.02.13.03.26.05.38,0,.02.01.04.02.06.04.12.09.23.14.34,0,.02.02.04.03.06.07.12.16.24.26.34.01.01.03.03.04.04.08.07.18.15.27.21,0,0,.02.01.03.02.12.08.26.13.4.17,0,0,.02,0,.03,0,.11.02.24.04.35.05.02,0,.04,0,.06,0,.13,0,.3-.02.44-.07.1-.04.22-.08.31-.13,0,0,.02,0,.02-.01s.02,0,.02-.01c.09-.06.19-.14.27-.21.1-.09.2-.23.27-.33.02-.03.04-.06.06-.1.05-.11.1-.23.14-.34,0-.02.01-.04.02-.06.03-.12.04-.25.05-.38,0-.02,0-.04,0-.06s0-.04,0-.06c-.01-.12-.03-.24-.05-.36,0-.01,0-.02,0-.03,0-.02-.01-.04-.02-.06-.04-.11-.09-.21-.13-.32,0,0,0-.02-.01-.03,0-.02-.02-.04-.03-.05-.06-.09-.14-.19-.21-.27,0,0-.01-.02-.02-.02s-.02-.01-.02-.02c-.09-.07-.18-.14-.27-.21-.02-.01-.04-.02-.06-.03-.14-.09-.3-.14-.46-.15-.17-.04-.33-.03-.5.02-.16.04-.3.11-.43.22-.14.09-.24.21-.32.35l-.13.3c-.06.22-.06.44,0,.66l.13.3c.11.19.26.34.45.45.03.01.05.03.08.05l-.25-.2s.04.04.06.06l-.2-.25s.03.05.05.08l-.13-.3s.03.08.03.12l-.04-.33c0,.05,0,.1,0,.15l.04-.33c0,.05-.02.1-.04.15l.13-.3s-.04.07-.06.11l.2-.25s-.04.05-.07.07l.25-.2s-.05.04-.08.05l.3-.13s-.06.02-.09.02l.33-.04s-.06,0-.09,0l.33.04s-.06-.01-.09-.02l.3.13s-.06-.03-.09-.05l.25.2s-.06-.05-.08-.08l.2.25s-.05-.08-.07-.12l.13.3s-.03-.09-.04-.14l.04.33s0-.09,0-.14l-.04.33s.01-.06.03-.1l-.13.3s.03-.05.04-.08l-.2.25s.04-.04.06-.06l-.25.2s.01-.01.02-.02c.15-.08.26-.19.35-.32.11-.12.19-.26.22-.43.05-.17.06-.33.02-.5,0-.17-.06-.32-.15-.46l-.2-.25c-.16-.15-.34-.26-.55-.32l-.33-.04c-.23,0-.44.06-.63.17h0Z"/> + <path class="cls-4" d="m27.33,20.59c-.24.09-.45.18-.63.38-.04.05-.17.21-.2.26,0,0,0,.02-.01.02-.03.05-.12.24-.14.35-.06.31-.06.45,0,.76.03.14.09.28.17.41.15.24.28.36.51.52.1.07.27.12.35.16.03.01.06.02.09.03.15.03.33.06.49.05s.35-.04.51-.08.31-.1.46-.18c.31-.16.58-.49.66-.83.02-.06.02-.14.03-.2.01-.08.02-.13.02-.2,0-.13-.02-.28-.06-.41-.05-.15-.11-.3-.19-.44-.04-.07-.09-.13-.14-.19s-.09-.13-.14-.18c-.02-.02-.04-.04-.06-.06-.08-.07-.18-.14-.26-.2-.02-.01-.03-.02-.05-.03-.13-.08-.28-.14-.42-.19-.15-.05-.32-.07-.48-.07s-.33.02-.49.08c-.32.11-.42.18-.68.39-.02.02-.04.04-.06.06-.08.1-.17.2-.23.31-.15.28-.18.46-.21.77,0,.17.03.33.11.48.05.15.14.29.26.4.11.12.25.21.4.26.15.08.31.11.48.11l.33-.04c.21-.06.4-.17.55-.32l.2-.25c.11-.19.17-.41.17-.63,0,0,0-.02,0-.03l-.04.33s.01-.06.02-.09l-.13.3s.03-.05.05-.08l-.2.25s.05-.06.08-.08l-.25.2s.07-.04.1-.06l-.3.13s.07-.03.11-.03l-.33.04s.08,0,.12,0l-.33-.04s.08.02.12.03l-.3-.13s.09.05.13.08l-.25-.2s.08.08.12.12l-.2-.25s.07.1.09.16l-.13-.3s.03.07.03.1l-.04-.33s0,.03,0,.05l.04-.33s0,.03-.01.05l.13-.3s0,.02-.01.02l.2-.25s-.02.02-.03.03l.25-.2s-.03.02-.05.03l.3-.13c-.1.04-.2.06-.31.08l.33-.04c-.05,0-.11,0-.16,0l.33.04s-.07-.01-.11-.03l.3.13s-.04-.02-.06-.03l.25.2s-.03-.03-.05-.04l.2.25s-.03-.05-.04-.07l.13.3s-.02-.05-.02-.07l.04.33s0-.05,0-.08l-.04.33s0-.04.02-.06l-.13.3s.01-.02.02-.03l-.2.25s.02-.02.03-.03l-.25.2s.03-.02.04-.02l-.3.13h0c.16-.04.3-.12.43-.23.14-.09.24-.21.32-.35.09-.14.14-.3.15-.46.04-.17.03-.33-.02-.5l-.13-.3c-.11-.19-.26-.34-.45-.45l-.3-.13c-.22-.06-.44-.06-.66,0h0Z"/> + <path class="cls-4" d="m53.58,20.05c-.07-.06-.18-.16-.27-.21-.07-.04-.24-.11-.31-.13-.2-.06-.5-.06-.69,0-.01,0-.02,0-.03,0-.08.02-.24.09-.31.13-.04.02-.18.14-.14.11-.05.03-.1.07-.14.11l-.2.25c-.07.1-.12.22-.15.34-.02.09-.04.25-.05.35,0,.11.03.3.04.35,0,.01,0,.03,0,.04l.06.15c.02.06.05.11.07.17.06.11.15.21.23.31.11.12.25.21.38.3.06.04.12.08.18.11.15.08.31.14.46.2.07.03.14.05.21.06.36.07.63.08.99,0,.27-.06.49-.19.7-.36.09-.07.16-.12.23-.2.22-.26.27-.35.39-.67.11-.28.1-.65.02-.94-.04-.15-.11-.31-.2-.44-.07-.1-.15-.22-.24-.31-.05-.06-.13-.1-.19-.15-.18-.14-.33-.23-.55-.29-.31-.08-.5-.06-.81,0-.16.04-.3.11-.43.22-.14.09-.24.21-.32.35-.09.14-.14.3-.15.46-.04.17-.03.33.02.5.1.3.29.59.57.75l.3.13c.22.06.44.06.66,0h.02c-.11.01-.22.03-.33.04.03,0,.05,0,.08,0l-.33-.04s.06.01.09.02l-.3-.13s.06.03.08.05l-.25-.2s.06.05.08.08l-.2-.25s.05.08.07.12l-.13-.3s.02.08.03.12l-.04-.33s0,.07,0,.1l.04-.33s-.02.08-.03.12l.13-.3s-.04.07-.06.11l.2-.25s-.06.07-.1.1l.25-.2c-.05.04-.11.07-.17.1l.3-.13c-.06.02-.12.04-.19.05l.33-.04c-.07,0-.14,0-.21,0l.33.04c-.09-.01-.18-.04-.27-.08l.3.13c-.13-.06-.26-.13-.38-.22l.25.2s-.06-.05-.08-.08l.2.25s-.02-.04-.03-.06l.13.3s0-.03,0-.04l.04.33v-.02c-.01.11-.03.22-.04.33,0-.01,0-.02,0-.03l-.13.3s.01-.02.02-.03l-.2.25h.01c-.08.05-.17.12-.25.18,0,0,.02-.01.03-.02l-.3.13s.02,0,.03,0l-.33.04h.02c-.11-.02-.22-.03-.33-.04h.01c-.1-.04-.2-.08-.3-.12h.01c-.08-.06-.17-.12-.25-.19h.01c.11.13.25.22.4.27.15.08.31.11.48.11.17,0,.33-.03.48-.11.15-.05.29-.14.4-.26.22-.24.38-.55.37-.88l-.04-.33c-.06-.21-.17-.4-.32-.55h0Z"/> + <g> + <path class="cls-6" d="m61.99,45.09h-.01l-59.71-.67c-.55,0-1-.46-.99-1.01,0-.55.45-.99,1-.99h.01l59.71.67c.55,0,1,.46.99,1.01,0,.55-.45.99-1,.99Z"/> + <path class="cls-6" d="m61.99,45.09c-.19,0-.38-.05-.55-.17-.46-.31-.58-.93-.28-1.39,2.64-3.98,5.62-7.09,8.85-9.26.46-.31,1.08-.19,1.39.27.31.46.19,1.08-.27,1.39-3.01,2.02-5.8,4.96-8.3,8.71-.19.29-.51.45-.83.45Z"/> + <path class="cls-6" d="m70.56,36.1c-.51,0-.95-.39-1-.91-1.27-13.86,1.46-32.66,1.49-32.85.08-.55.58-.93,1.13-.84.55.08.92.59.84,1.13-.03.19-2.72,18.75-1.48,32.38.05.55-.36,1.04-.91,1.09-.03,0-.06,0-.09,0Z"/> + </g> + <g> + <path class="cls-5" d="m38.87,37.76h0l-26.87-.3c-.47,0-.85-.39-.84-.86,0-.47.38-.84.85-.84h0l26.87.3c.47,0,.85.39.84.86,0,.47-.38.84-.85.84Z"/> + <path class="cls-5" d="m61.99,37.95h0l-20.14-.19c-.47,0-.85-.39-.84-.86,0-.47.42-.85.86-.84l20.14.19c.47,0,.85.39.84.86,0,.47-.38.84-.85.84Z"/> + <path class="cls-5" d="m46.34,40.76h0l-26.87-.3c-.47,0-.85-.39-.84-.86,0-.47.38-.84.85-.84h0l26.87.3c.47,0,.85.39.84.86,0,.47-.38.84-.85.84Z"/> + <path class="cls-5" d="m58.69,40.81h0l-9.02-.1c-.47,0-.85-.39-.84-.86,0-.47.38-.84.85-.84h0l9.02.1c.47,0,.85.39.84.86,0,.47-.38.84-.85.84Z"/> + <path class="cls-5" d="m16.29,40.5h0l-9.02-.1c-.47,0-.85-.39-.84-.86,0-.47.38-.84.85-.84h0l9.02.1c.47,0,.85.39.84.86,0,.47-.38.84-.85.84Z"/> + </g> + <path class="cls-3" d="m23.88,9.83c-.54,0-.98-.42-1-.96-.02-.55.41-1.02.96-1.03l3.52-.12c.5-.02,1.02.41,1.03.96.02.55-.41,1.02-.96,1.03l-3.52.12s-.02,0-.04,0Z"/> + <path class="cls-3" d="m30.59,9.71c-.54,0-.98-.42-1-.96-.02-.55.41-1.02.96-1.03l1.54-.05c.54-.01,1.01.41,1.03.96s-.41,1.02-.96,1.03l-1.54.05s-.02,0-.04,0Z"/> + <path class="cls-8" d="m37.13,21.32c.32-.28.87-.61,1.25-.75.28-.1.57-.18.86-.24.02,0,.21-.04.13-.02s.11-.01.13-.01c.16-.01.31-.02.47-.02.14,0,.28,0,.42.02.07,0,.14.01.21.02-.11-.02-.01,0,.04.01.15.04.3.07.45.11.09.03.31.11.31.11.46.19,1.1.56,1.58.88.45.3,1.11.09,1.37-.36.29-.49.09-1.07-.36-1.37-1.24-.82-2.61-1.46-4.12-1.42s-3.01.62-4.15,1.64c-.4.36-.37,1.05,0,1.41.4.4,1.01.36,1.41,0h0Z"/> + </g> + <path class="cls-2" d="m59.6,8.7h.74c.14,0,.27-.02.39-.09.12-.04.23-.11.32-.21.1-.09.17-.2.21-.32.06-.12.09-.25.09-.39l-.04-.27c-.05-.17-.13-.32-.26-.44l-.2-.16c-.16-.09-.32-.14-.5-.14h-.74c-.14,0-.27.02-.39.09-.12.04-.23.11-.32.21-.1.09-.17.2-.21.32-.06.12-.09.25-.09.39l.04.27c.05.17.13.32.26.44l.2.16c.16.09.32.14.5.14h0Z"/> + </g> + </g> +</svg> \ No newline at end of file diff --git a/frontend/src/assets/feedback-icon/good-feedback-gray-icon.svg b/frontend/src/assets/feedback-icon/good-feedback-gray-icon.svg new file mode 100644 index 000000000..5f01ea745 --- /dev/null +++ b/frontend/src/assets/feedback-icon/good-feedback-gray-icon.svg @@ -0,0 +1,87 @@ +<?xml version="1.0" encoding="UTF-8"?> +<svg id="_레이어_2" data-name="레이어 2" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 73.56 45.78"> + <defs> + <style> + .cls-1 { + fill: #919191; + } + + .cls-2 { + fill: #7c7b7c; + } + + .cls-3 { + fill: #abaaaa; + } + + .cls-4 { + fill: #c9caca; + } + + .cls-5 { + fill: #dbdbdb; + } + + .cls-6 { + fill: #595757; + } + </style> + </defs> + <g id="_레이어_1-2" data-name="레이어 1"> + <g> + <g> + <g> + <g> + <path class="cls-2" d="m18.01,4.93c-1.96,9.36-3.4,18.82-4.31,28.33"/> + <path class="cls-3" d="m15.59,4.26c-2,9.58-3.46,19.26-4.4,29-.13,1.35,1.24,2.5,2.5,2.5,1.46,0,2.37-1.15,2.5-2.5.9-9.3,2.32-18.53,4.22-27.67.28-1.32-.39-2.7-1.75-3.08-1.24-.34-2.8.42-3.08,1.75h0Z"/> + </g> + <g> + <g> + <path class="cls-2" d="m18.49,4.59c9.53-1.11,18.87-1.24,28.63-1.77,7.93-.43,16.11-.32,23.87-.32"/> + <path class="cls-3" d="m18.49,7.09c8.77-1.01,17.59-1.23,26.4-1.66,8.7-.43,17.39-.44,26.1-.44,3.22,0,3.22-5,0-5-8.71,0-17.39.01-26.1.44-8.81.43-17.63.65-26.4,1.66-1.34.15-2.5,1.04-2.5,2.5,0,1.23,1.15,2.66,2.5,2.5h0Z"/> + </g> + <g> + <path class="cls-2" d="m71.11,3.35c-1.68,10.43-1.58,21.05-1.47,31.61"/> + <path class="cls-3" d="m68.69,2.69c-1.7,10.69-1.67,21.48-1.56,32.27.03,3.22,5.03,3.22,5,0-.1-10.32-.24-20.72,1.39-30.94.21-1.33-.34-2.69-1.75-3.08-1.19-.33-2.86.4-3.08,1.75h0Z"/> + </g> + </g> + <g> + <path class="cls-2" d="m2.51,42.15c2.74-1.92,5.47-3.85,8.21-5.77.99-.69,2.11-1.37,3.09-1.96"/> + <path class="cls-3" d="m3.77,44.31c3.73-2.62,7.39-5.38,11.3-7.73,1.12-.67,1.63-2.28.9-3.42s-2.22-1.62-3.42-.9c-3.91,2.35-7.57,5.11-11.3,7.73-1.07.75-1.67,2.22-.9,3.42.68,1.06,2.28,1.7,3.42.9h0Z"/> + </g> + <g> + <path class="cls-2" d="m61.99,43.28c-19.72-.02-39.43-.2-59.15-.52"/> + <path class="cls-3" d="m61.99,40.78c-19.72-.02-39.43-.2-59.15-.52-3.22-.05-3.22,4.95,0,5,19.71.32,39.43.5,59.15.52,3.22,0,3.22-5,0-5h0Z"/> + </g> + <g> + <path class="cls-2" d="m68.51,35.67c-2.42,1.98-4.51,4.36-6.16,7.02"/> + <path class="cls-3" d="m66.74,33.9c-2.58,2.12-4.79,4.69-6.55,7.53-.69,1.11-.27,2.8.9,3.42s2.68.29,3.42-.9c.51-.83,1.07-1.63,1.66-2.4l-.39.51c1.32-1.7,2.83-3.25,4.49-4.62.47-.38.73-1.19.73-1.77,0-.61-.27-1.35-.73-1.77s-1.1-.76-1.77-.73c-.7.03-1.23.29-1.77.73h0Z"/> + </g> + </g> + <polygon class="cls-3" points="13.81 34.42 18.49 4.93 70.34 2.5 69.63 34.96 62.35 42.69 2.51 42.15 13.81 34.42"/> + </g> + <g> + <path class="cls-4" d="m23.83,11.13c13.13-.51,26.25-1.02,39.38-1.53,3.21-.12,3.22-5.12,0-5-13.13.51-26.25,1.02-39.38,1.53-3.21.12-3.22,5.12,0,5h0Z"/> + <path class="cls-4" d="m60.86,7.12c-.88,7.74-1.26,15.51-1.22,23.3l2.5-2.5c-13.82.06-27.66.23-41.47-.46l2.5,2.5c.04-3.56.67-7.18,1.04-10.73s.92-6.71,2.04-9.94c.44-1.28-.5-2.73-1.75-3.08-1.37-.38-2.63.47-3.08,1.75-1.22,3.52-1.78,7.16-2.17,10.85s-1.03,7.45-1.08,11.15c-.02,1.4,1.16,2.43,2.5,2.5,13.81.69,27.65.52,41.47.46,1.35,0,2.51-1.14,2.5-2.5-.04-7.79.34-15.56,1.22-23.3.15-1.34-1.26-2.5-2.5-2.5-1.48,0-2.35,1.15-2.5,2.5h0Z"/> + <path class="cls-4" d="m24.46,8.66s-4.54,9.61-2.36,20.59l40.67,1.21,1.54-23.3-39.85,1.5Z"/> + </g> + <path class="cls-6" d="m31.31,16.79c-.15,0-.29.03-.43.05-.04,0-.07.02-.11.03-.13.05-.27.1-.39.17-.02.01-.03.02-.05.03-.1.07-.2.15-.29.22-.03.02-.06.05-.08.08-.08.09-.15.19-.22.29-.01.01-.02.03-.03.05-.07.12-.13.28-.17.39-.01.04-.03.07-.03.11-.05.17-.06.33-.02.5,0,.17.06.32.15.46l.2.25c.16.15.34.26.55.32.13.05.26.1.4.12.11.02.28.05.42.05.02,0,.03,0,.05,0,0,0,.02,0,.02,0,.11-.01.24-.03.36-.05.03,0,.06-.01.09-.03.12-.04.25-.09.36-.15s.2-.14.29-.23c0,0,.01-.01.02-.02,0,0,0,0,0-.01.07-.08.15-.18.2-.26.01-.02.02-.03.03-.05,0,0,0-.02.01-.03.05-.11.1-.21.14-.32,0-.02.01-.04.01-.05.02-.12.03-.24.05-.35,0-.01,0-.02,0-.04,0-.02,0-.04,0-.06,0-.09-.03-.25-.05-.34,0,0,0,0,0-.01,0-.01,0-.02,0-.03,0,0,0,0,0-.01,0,0,0,0,0,0l-.13-.3s0-.02-.01-.03c-.03-.05-.09-.11-.11-.15-.02-.03-.07-.1-.11-.15-.09-.09-.19-.17-.29-.23,0,0,0,0-.01,0-.05-.02-.1-.04-.16-.07-.05-.02-.1-.05-.16-.07-.01,0-.02,0-.03,0-.17-.05-.33-.06-.5-.02-.17,0-.32.06-.46.15-.15.08-.26.19-.35.32-.11.12-.19.26-.22.43l-.04.33c0,.23.06.44.17.63l.2.25c.16.15.34.26.55.32.01,0,.03,0,.04.01l-.3-.13s.03.02.05.03l-.25-.2s.02.02.03.03l-.2-.25s.02.03.03.05l-.13-.3s.02.05.02.07l-.04-.33s0,.06,0,.09l.04-.33s-.01.07-.03.1l.13-.3s-.03.06-.05.08l.2-.25s-.03.04-.05.05l.25-.2s-.05.03-.07.04l.3-.13s-.08.03-.12.03l.33-.04c-.06,0-.11,0-.17,0l.33.04c-.14-.02-.27-.07-.4-.12l.87,1.54s.02-.08.04-.12l-.13.3s.05-.1.08-.14l-.2.25s.08-.09.12-.12l-.25.2s.09-.06.14-.08l-.3.13c.05-.02.1-.04.16-.04l-.33.04s.05,0,.07,0c.17,0,.33-.03.48-.11.15-.05.29-.14.4-.26.12-.11.21-.25.26-.4.08-.15.11-.31.11-.48l-.04-.33c-.06-.21-.17-.4-.32-.55l-.25-.2c-.19-.11-.41-.17-.63-.17h0Z"/> + <path class="cls-6" d="m49.54,16.33c-.05.03-.1.08-.15.11-.04.03-.1.07-.15.11-.01.01-.03.03-.04.04-.07.08-.15.18-.21.27,0,0-.01.02-.02.02,0,0,0,.01-.01.02,0,0,0,.01,0,.02-.04.09-.1.21-.13.31-.05.14-.06.3-.07.44,0,.04,0,.08,0,.12.02.13.03.26.05.38,0,.02.01.04.02.06.04.12.09.23.14.34,0,.02.02.04.03.06.07.12.16.24.26.34.01.01.03.03.04.04.08.07.18.15.27.21,0,0,.02.01.03.02.12.08.26.13.4.17,0,0,.02,0,.03,0,.11.02.24.04.35.05.02,0,.04,0,.06,0,.13,0,.3-.02.44-.07.1-.04.22-.08.31-.13,0,0,.02,0,.02-.01s.02,0,.02-.01c.09-.06.19-.14.27-.21.1-.09.2-.23.27-.33.02-.03.04-.06.06-.1.05-.11.1-.23.14-.34,0-.02.01-.04.02-.06.03-.12.04-.25.05-.38,0-.02,0-.04,0-.06s0-.04,0-.06c-.01-.12-.03-.24-.05-.36,0-.01,0-.02,0-.03,0-.02-.01-.04-.02-.06-.04-.11-.09-.21-.13-.32,0,0,0-.02-.01-.03,0-.02-.02-.04-.03-.05-.06-.09-.14-.19-.21-.27,0,0-.01-.02-.02-.02s-.02-.01-.02-.02c-.09-.07-.18-.14-.27-.21-.02-.01-.04-.02-.06-.03-.14-.09-.3-.14-.46-.15-.17-.04-.33-.03-.5.02-.16.04-.3.11-.43.22-.14.09-.24.21-.32.35l-.13.3c-.06.22-.06.44,0,.66l.13.3c.11.19.26.34.45.45.03.01.05.03.08.05l-.25-.2s.04.04.06.06l-.2-.25s.03.05.05.08l-.13-.3s.03.08.03.12l-.04-.33c0,.05,0,.1,0,.15l.04-.33c0,.05-.02.1-.04.15l.13-.3s-.04.07-.06.11l.2-.25s-.04.05-.07.07l.25-.2s-.05.04-.08.05l.3-.13s-.06.02-.09.02l.33-.04s-.06,0-.09,0l.33.04s-.06-.01-.09-.02l.3.13s-.06-.03-.09-.05l.25.2s-.06-.05-.08-.08l.2.25s-.05-.08-.07-.12l.13.3s-.03-.09-.04-.14l.04.33s0-.09,0-.14l-.04.33s.01-.06.03-.1l-.13.3s.03-.05.04-.08l-.2.25s.04-.04.06-.06l-.25.2s.01-.01.02-.02c.15-.08.26-.19.35-.32.11-.12.19-.26.22-.43.05-.17.06-.33.02-.5,0-.17-.06-.32-.15-.46l-.2-.25c-.16-.15-.34-.26-.55-.32l-.33-.04c-.23,0-.44.06-.63.17h0Z"/> + <path class="cls-6" d="m35.16,19.59c.91,1.85,2.98,2.81,4.99,2.77,1.89-.03,4.15-.82,4.71-2.83.35-1.24-1.58-1.77-1.93-.53-.07.24-.14.36-.3.52-.2.2-.39.32-.7.47-.48.23-1.28.37-1.92.37-1.37,0-2.53-.6-3.12-1.78-.24-.48-.93-.62-1.37-.36-.49.29-.6.88-.36,1.37h0Z"/> + <g> + <path class="cls-2" d="m61.99,45.09h-.01l-59.71-.67c-.55,0-1-.46-.99-1.01,0-.55.45-.99,1-.99h.01l59.71.67c.55,0,1,.46.99,1.01,0,.55-.45.99-1,.99Z"/> + <path class="cls-2" d="m61.99,45.09c-.19,0-.38-.05-.55-.17-.46-.31-.58-.93-.28-1.39,2.64-3.98,5.62-7.09,8.85-9.26.46-.31,1.08-.19,1.39.27.31.46.19,1.08-.27,1.39-3.01,2.02-5.8,4.96-8.3,8.71-.19.29-.51.45-.83.45Z"/> + <path class="cls-2" d="m70.56,36.1c-.51,0-.95-.39-1-.91-1.27-13.86,1.46-32.66,1.49-32.85.08-.55.59-.93,1.13-.84.55.08.92.59.84,1.13-.03.19-2.72,18.75-1.48,32.38.05.55-.36,1.04-.91,1.09-.03,0-.06,0-.09,0Z"/> + </g> + <g> + <path class="cls-1" d="m38.87,37.76h0l-26.87-.3c-.47,0-.85-.39-.84-.86,0-.47.38-.84.85-.84h0l26.87.3c.47,0,.85.39.84.86,0,.47-.38.84-.85.84Z"/> + <path class="cls-1" d="m61.99,37.95h0l-20.14-.19c-.47,0-.85-.39-.84-.86,0-.47.37-.83.86-.84l20.14.19c.47,0,.85.39.84.86,0,.47-.38.84-.85.84Z"/> + <path class="cls-1" d="m46.34,40.76h0l-26.87-.3c-.47,0-.85-.39-.84-.86,0-.47.38-.84.85-.84h0l26.87.3c.47,0,.85.39.84.86,0,.47-.38.84-.85.84Z"/> + <path class="cls-1" d="m58.68,40.81h0l-9.02-.1c-.47,0-.85-.39-.84-.86,0-.47.38-.84.85-.84h0l9.02.1c.47,0,.85.39.84.86,0,.47-.38.84-.85.84Z"/> + <path class="cls-1" d="m16.29,40.5h0l-9.02-.1c-.47,0-.85-.39-.84-.86,0-.47.38-.84.85-.84h0l9.02.1c.47,0,.85.39.84.86,0,.47-.38.84-.85.84Z"/> + </g> + <path class="cls-5" d="m23.88,9.83c-.54,0-.98-.42-1-.96-.02-.55.41-1.02.96-1.03l3.52-.12c.54-.03,1.01.41,1.03.96s-.41,1.02-.96,1.03l-3.52.12s-.02,0-.04,0Z"/> + <path class="cls-5" d="m30.59,9.71c-.54,0-.98-.42-1-.96-.02-.55.41-1.02.96-1.03l1.54-.05s.02,0,.04,0c.54,0,.98.42,1,.96.02.55-.41,1.02-.96,1.03l-1.54.05s-.02,0-.04,0Z"/> + </g> + </g> +</svg> \ No newline at end of file diff --git a/frontend/src/assets/feedback-icon/good-feedback-icon.svg b/frontend/src/assets/feedback-icon/good-feedback-icon.svg new file mode 100644 index 000000000..a7bf95a97 --- /dev/null +++ b/frontend/src/assets/feedback-icon/good-feedback-icon.svg @@ -0,0 +1,100 @@ +<?xml version="1.0" encoding="UTF-8"?> +<svg id="_레이어_2" data-name="레이어 2" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 73.56 45.78"> + <defs> + <style> + .cls-1 { + fill: #e8f5fc; + } + + .cls-2 { + fill: #f2aeb2; + } + + .cls-3 { + fill: #919191; + } + + .cls-4 { + fill: #7c7b7c; + } + + .cls-5 { + fill: #c2dfab; + } + + .cls-6 { + fill: #abaaaa; + } + + .cls-7 { + fill: #3c3d3d; + } + + .cls-8 { + fill: #82c47a; + } + </style> + </defs> + <g id="_레이어_1-2" data-name="레이어 1"> + <g> + <g> + <g> + <g> + <g> + <path class="cls-4" d="m18.01,4.93c-1.96,9.36-3.4,18.82-4.31,28.33"/> + <path class="cls-6" d="m15.59,4.26c-2,9.58-3.46,19.26-4.4,29-.13,1.35,1.24,2.5,2.5,2.5,1.46,0,2.37-1.15,2.5-2.5.9-9.3,2.32-18.53,4.22-27.67.28-1.32-.39-2.7-1.75-3.08-1.24-.34-2.8.42-3.08,1.75h0Z"/> + </g> + <g> + <g> + <path class="cls-4" d="m18.49,4.59c9.53-1.11,18.87-1.24,28.63-1.77,7.93-.43,16.11-.32,23.87-.32"/> + <path class="cls-6" d="m18.49,7.09c8.77-1.01,17.59-1.23,26.4-1.66s17.39-.44,26.1-.44c3.22,0,3.22-5,0-5-8.71,0-17.39.01-26.1.44s-17.63.65-26.4,1.66c-1.34.15-2.5,1.04-2.5,2.5,0,1.23,1.15,2.66,2.5,2.5h0Z"/> + </g> + <g> + <path class="cls-4" d="m71.11,3.35c-1.68,10.43-1.58,21.05-1.47,31.61"/> + <path class="cls-6" d="m68.69,2.69c-1.7,10.69-1.67,21.48-1.56,32.27.03,3.22,5.03,3.22,5,0-.1-10.32-.24-20.72,1.39-30.94.21-1.33-.34-2.69-1.75-3.08-1.19-.33-2.86.4-3.08,1.75h0Z"/> + </g> + </g> + <g> + <path class="cls-4" d="m2.51,42.15c2.74-1.92,5.47-3.85,8.21-5.77.99-.69,2.11-1.37,3.09-1.96"/> + <path class="cls-6" d="m3.77,44.31c3.73-2.62,7.39-5.38,11.3-7.73,1.12-.67,1.63-2.28.9-3.42s-2.22-1.62-3.42-.9c-3.91,2.35-7.57,5.11-11.3,7.73-1.07.75-1.67,2.22-.9,3.42.68,1.06,2.28,1.7,3.42.9h0Z"/> + </g> + <g> + <path class="cls-4" d="m61.99,43.28c-19.72-.02-39.43-.2-59.15-.52"/> + <path class="cls-6" d="m61.99,40.78c-19.72-.02-39.43-.2-59.15-.52-3.22-.05-3.22,4.95,0,5,19.71.32,39.43.5,59.15.52,3.22,0,3.22-5,0-5h0Z"/> + </g> + <g> + <path class="cls-4" d="m68.51,35.67c-2.42,1.98-4.51,4.36-6.16,7.02"/> + <path class="cls-6" d="m66.74,33.9c-2.58,2.12-4.79,4.69-6.55,7.53-.69,1.11-.27,2.8.9,3.42s2.68.29,3.42-.9c.51-.83,1.07-1.63,1.66-2.4l-.39.51c1.32-1.7,2.83-3.25,4.49-4.62.47-.38.73-1.19.73-1.77,0-.61-.27-1.35-.73-1.77s-1.1-.76-1.77-.73c-.7.03-1.23.29-1.77.73h0Z"/> + </g> + </g> + <polygon class="cls-6" points="13.81 34.42 18.49 4.93 70.34 2.5 69.63 34.96 62.35 42.69 2.51 42.15 13.81 34.42"/> + </g> + <g> + <path class="cls-5" d="m23.83,11.13c13.13-.51,26.25-1.02,39.38-1.53,3.21-.12,3.22-5.12,0-5-13.13.51-26.25,1.02-39.38,1.53-3.21.12-3.22,5.12,0,5h0Z"/> + <path class="cls-5" d="m60.86,7.12c-.88,7.74-1.26,15.51-1.22,23.3l2.5-2.5c-13.82.06-27.66.23-41.47-.46l2.5,2.5c.04-3.56.67-7.18,1.04-10.73s.92-6.71,2.04-9.94c.44-1.28-.5-2.73-1.75-3.08-1.37-.38-2.63.47-3.08,1.75-1.22,3.52-1.78,7.16-2.17,10.85s-1.03,7.45-1.08,11.15c-.02,1.4,1.16,2.43,2.5,2.5,13.81.69,27.65.52,41.47.46,1.35,0,2.51-1.14,2.5-2.5-.04-7.79.34-15.56,1.22-23.3.15-1.34-1.26-2.5-2.5-2.5-1.48,0-2.35,1.15-2.5,2.5h0Z"/> + <path class="cls-5" d="m24.46,8.66s-4.54,9.61-2.36,20.59l40.67,1.21,1.54-23.3-39.85,1.5Z"/> + </g> + <path class="cls-7" d="m31.31,16.79c-.15,0-.29.03-.43.05-.04,0-.07.02-.11.03-.13.05-.27.1-.39.17-.02.01-.03.02-.05.03-.1.07-.2.15-.29.22-.03.02-.06.05-.08.08-.08.09-.15.19-.22.29-.01.01-.02.03-.03.05-.07.12-.13.28-.17.39-.01.04-.03.07-.03.11-.05.17-.06.33-.02.5,0,.17.06.32.15.46l.2.25c.16.15.34.26.55.32.13.05.26.1.4.12.11.02.28.05.42.05.02,0,.03,0,.05,0,0,0,.02,0,.02,0,.11-.01.24-.03.36-.05.03,0,.06-.01.09-.03.12-.04.25-.09.36-.15s.2-.14.29-.23c0,0,.01-.01.02-.02,0,0,0,0,0-.01.07-.08.15-.18.2-.26.01-.02.02-.03.03-.05,0,0,0-.02.01-.03.05-.11.1-.21.14-.32,0-.02.01-.04.01-.05.02-.12.03-.24.05-.35,0-.01,0-.02,0-.04,0-.02,0-.04,0-.06,0-.09-.03-.25-.05-.34,0,0,0,0,0-.01,0-.01,0-.02,0-.03,0,0,0,0,0-.01,0,0,0,0,0,0l-.13-.3s0-.02-.01-.03c-.03-.05-.09-.11-.11-.15-.02-.03-.07-.1-.11-.15-.09-.09-.19-.17-.29-.23,0,0,0,0-.01,0-.05-.02-.1-.04-.16-.07-.05-.02-.1-.05-.16-.07-.01,0-.02,0-.03,0-.17-.05-.33-.06-.5-.02-.17,0-.32.06-.46.15-.15.08-.26.19-.35.32-.11.12-.19.26-.22.43l-.04.33c0,.23.06.44.17.63l.2.25c.16.15.34.26.55.32.01,0,.03,0,.04.01l-.3-.13s.03.02.05.03l-.25-.2s.02.02.03.03l-.2-.25s.02.03.03.05l-.13-.3s.02.05.02.07l-.04-.33s0,.06,0,.09l.04-.33s-.01.07-.03.1l.13-.3s-.03.06-.05.08l.2-.25s-.03.04-.05.05l.25-.2s-.05.03-.07.04l.3-.13s-.08.03-.12.03l.33-.04c-.06,0-.11,0-.17,0l.33.04c-.14-.02-.27-.07-.4-.12l.87,1.54s.02-.08.04-.12l-.13.3s.05-.1.08-.14l-.2.25s.08-.09.12-.12l-.25.2s.09-.06.14-.08l-.3.13c.05-.02.1-.04.16-.04l-.33.04s.05,0,.07,0c.17,0,.33-.03.48-.11.15-.05.29-.14.4-.26.12-.11.21-.25.26-.4.08-.15.11-.31.11-.48l-.04-.33c-.06-.21-.17-.4-.32-.55l-.25-.2c-.19-.11-.41-.17-.63-.17h0Z"/> + <path class="cls-7" d="m49.54,16.33c-.05.03-.1.08-.15.11-.04.03-.1.07-.15.11-.01.01-.03.03-.04.04-.07.08-.15.18-.21.27,0,0-.01.02-.02.02,0,0,0,.01-.01.02,0,0,0,.01,0,.02-.04.09-.1.21-.13.31-.05.14-.06.3-.07.44,0,.04,0,.08,0,.12.02.13.03.26.05.38,0,.02.01.04.02.06.04.12.09.23.14.34,0,.02.02.04.03.06.07.12.16.24.26.34.01.01.03.03.04.04.08.07.18.15.27.21,0,0,.02.01.03.02.12.08.26.13.4.17,0,0,.02,0,.03,0,.11.02.24.04.35.05.02,0,.04,0,.06,0,.13,0,.3-.02.44-.07.1-.04.22-.08.31-.13,0,0,.02,0,.02-.01s.02,0,.02-.01c.09-.06.19-.14.27-.21.1-.09.2-.23.27-.33.02-.03.04-.06.06-.1.05-.11.1-.23.14-.34,0-.02.01-.04.02-.06.03-.12.04-.25.05-.38,0-.02,0-.04,0-.06s0-.04,0-.06c-.01-.12-.03-.24-.05-.36,0-.01,0-.02,0-.03,0-.02-.01-.04-.02-.06-.04-.11-.09-.21-.13-.32,0,0,0-.02-.01-.03,0-.02-.02-.04-.03-.05-.06-.09-.14-.19-.21-.27,0,0-.01-.02-.02-.02s-.02-.01-.02-.02c-.09-.07-.18-.14-.27-.21-.02-.01-.04-.02-.06-.03-.14-.09-.3-.14-.46-.15-.17-.04-.33-.03-.5.02-.16.04-.3.11-.43.22-.14.09-.24.21-.32.35l-.13.3c-.06.22-.06.44,0,.66l.13.3c.11.19.26.34.45.45.03.01.05.03.08.05l-.25-.2s.04.04.06.06l-.2-.25s.03.05.05.08l-.13-.3s.03.08.03.12l-.04-.33c0,.05,0,.1,0,.15l.04-.33c0,.05-.02.1-.04.15l.13-.3s-.04.07-.06.11l.2-.25s-.04.05-.07.07l.25-.2s-.05.04-.08.05l.3-.13s-.06.02-.09.02l.33-.04s-.06,0-.09,0l.33.04s-.06-.01-.09-.02l.3.13s-.06-.03-.09-.05l.25.2s-.06-.05-.08-.08l.2.25s-.05-.08-.07-.12l.13.3s-.03-.09-.04-.14l.04.33s0-.09,0-.14l-.04.33s.01-.06.03-.1l-.13.3s.03-.05.04-.08l-.2.25s.04-.04.06-.06l-.25.2s.01-.01.02-.02c.15-.08.26-.19.35-.32.11-.12.19-.26.22-.43.05-.17.06-.33.02-.5,0-.17-.06-.32-.15-.46l-.2-.25c-.16-.15-.34-.26-.55-.32l-.33-.04c-.23,0-.44.06-.63.17h0Z"/> + <path class="cls-7" d="m35.16,19.59c.91,1.85,2.98,2.81,4.99,2.77,1.89-.03,4.15-.82,4.71-2.83.35-1.24-1.58-1.77-1.93-.53-.07.24-.14.36-.3.52-.2.2-.39.32-.7.47-.48.23-1.28.37-1.92.37-1.37,0-2.53-.6-3.12-1.78-.24-.48-.93-.62-1.37-.36-.49.29-.6.88-.36,1.37h0Z"/> + <path class="cls-2" d="m27.33,20.59c-.24.09-.45.18-.63.38-.04.05-.17.21-.2.26,0,0,0,.02-.01.02-.03.05-.12.24-.14.35-.06.31-.06.45,0,.76.03.14.09.28.17.41.15.24.28.36.51.52.1.07.27.12.35.16.03.01.06.02.09.03.15.03.33.06.49.05s.35-.04.51-.08.31-.1.46-.18c.31-.16.58-.49.66-.83.02-.06.02-.14.03-.2.01-.08.02-.13.02-.2,0-.13-.02-.28-.06-.41-.05-.15-.11-.3-.19-.44-.04-.07-.09-.13-.14-.19s-.09-.13-.14-.18c-.02-.02-.04-.04-.06-.06-.08-.07-.18-.14-.26-.2-.02-.01-.03-.02-.05-.03-.13-.08-.28-.14-.42-.19-.15-.05-.32-.07-.48-.07s-.33.02-.49.08c-.32.11-.42.18-.68.39-.02.02-.04.04-.06.06-.08.1-.17.2-.23.31-.15.28-.18.46-.21.77,0,.17.03.33.11.48.05.15.14.29.26.4.11.12.25.21.4.26.15.08.31.11.48.11l.33-.04c.21-.06.4-.17.55-.32l.2-.25c.11-.19.17-.41.17-.63,0,0,0-.02,0-.03l-.04.33s.01-.06.02-.09l-.13.3s.03-.05.05-.08l-.2.25s.05-.06.08-.08l-.25.2s.07-.04.1-.06l-.3.13s.07-.03.11-.03l-.33.04s.08,0,.12,0l-.33-.04s.08.02.12.03l-.3-.13s.09.05.13.08l-.25-.2s.08.08.12.12l-.2-.25s.07.1.09.16l-.13-.3s.03.07.03.1l-.04-.33s0,.03,0,.05l.04-.33s0,.03-.01.05l.13-.3s0,.02-.01.02l.2-.25s-.02.02-.03.03l.25-.2s-.03.02-.05.03l.3-.13c-.1.04-.2.06-.31.08l.33-.04c-.05,0-.11,0-.16,0l.33.04s-.07-.01-.11-.03l.3.13s-.04-.02-.06-.03l.25.2s-.03-.03-.05-.04l.2.25s-.03-.05-.04-.07l.13.3s-.02-.05-.02-.07l.04.33s0-.05,0-.08l-.04.33s0-.04.02-.06l-.13.3s.01-.02.02-.03l-.2.25s.02-.02.03-.03l-.25.2s.03-.02.04-.02l-.3.13h0c.16-.04.3-.12.43-.23.14-.09.24-.21.32-.35.09-.14.14-.3.15-.46.04-.17.03-.33-.02-.5l-.13-.3c-.11-.19-.26-.34-.45-.45l-.3-.13c-.22-.06-.44-.06-.66,0h0Z"/> + <path class="cls-2" d="m53.58,20.05c-.07-.06-.18-.16-.27-.21-.07-.04-.24-.11-.31-.13-.2-.06-.5-.06-.69,0-.01,0-.02,0-.03,0-.08.02-.24.09-.31.13-.04.02-.18.14-.14.11-.05.03-.1.07-.14.11l-.2.25c-.07.1-.12.22-.15.34-.02.09-.04.25-.05.35,0,.11.03.3.04.35,0,.01,0,.03,0,.04l.06.15c.02.06.05.11.07.17.06.11.15.21.23.31.11.12.25.21.38.3.06.04.12.08.18.11.15.08.31.14.46.2.07.03.14.05.21.06.36.07.63.08.99,0,.27-.06.49-.19.7-.36.09-.07.16-.12.23-.2.22-.26.27-.35.39-.67.11-.28.1-.65.02-.94-.04-.15-.11-.31-.2-.44-.07-.1-.15-.22-.24-.31-.05-.06-.13-.1-.19-.15-.18-.14-.33-.23-.55-.29-.31-.08-.5-.06-.81,0-.16.04-.3.11-.43.22-.14.09-.24.21-.32.35-.09.14-.14.3-.15.46-.04.17-.03.33.02.5.1.3.29.59.57.75l.3.13c.22.06.44.06.66,0h.02c-.11.01-.22.03-.33.04.03,0,.05,0,.08,0l-.33-.04s.06.01.09.02l-.3-.13s.06.03.08.05l-.25-.2s.06.05.08.08l-.2-.25s.05.08.07.12l-.13-.3s.02.08.03.12l-.04-.33s0,.07,0,.1l.04-.33s-.02.08-.03.12l.13-.3s-.04.07-.06.11l.2-.25s-.06.07-.1.1l.25-.2c-.05.04-.11.07-.17.1l.3-.13c-.06.02-.12.04-.19.05l.33-.04c-.07,0-.14,0-.21,0l.33.04c-.09-.01-.18-.04-.27-.08l.3.13c-.13-.06-.26-.13-.38-.22l.25.2s-.06-.05-.08-.08l.2.25s-.02-.04-.03-.06l.13.3s0-.03,0-.04l.04.33v-.02c-.01.11-.03.22-.04.33,0-.01,0-.02,0-.03l-.13.3s.01-.02.02-.03l-.2.25h.01c-.08.05-.17.12-.25.18,0,0,.02-.01.03-.02l-.3.13s.02,0,.03,0l-.33.04h.02c-.11-.02-.22-.03-.33-.04h.01c-.1-.04-.2-.08-.3-.12h.01c-.08-.06-.17-.12-.25-.19h.01c.11.13.25.22.4.27.15.08.31.11.48.11.17,0,.33-.03.48-.11.15-.05.29-.14.4-.26.22-.24.38-.55.37-.88l-.04-.33c-.06-.21-.17-.4-.32-.55h0Z"/> + <g> + <path class="cls-4" d="m61.99,45.09h-.01l-59.71-.67c-.55,0-1-.46-.99-1.01,0-.55.45-.99,1-.99h.01l59.71.67c.55,0,1,.46.99,1.01,0,.55-.45.99-1,.99Z"/> + <path class="cls-4" d="m61.99,45.09c-.19,0-.38-.05-.55-.17-.46-.31-.58-.93-.28-1.39,2.64-3.98,5.62-7.09,8.85-9.26.46-.31,1.08-.19,1.39.27.31.46.19,1.08-.27,1.39-3.01,2.02-5.8,4.96-8.3,8.71-.19.29-.51.45-.83.45Z"/> + <path class="cls-4" d="m70.56,36.1c-.51,0-.95-.39-1-.91-1.27-13.86,1.46-32.66,1.49-32.85.08-.55.59-.93,1.13-.84.55.08.92.59.84,1.13-.03.19-2.72,18.75-1.48,32.38.05.55-.36,1.04-.91,1.09-.03,0-.06,0-.09,0Z"/> + </g> + <g> + <path class="cls-3" d="m38.87,37.76h0l-26.87-.3c-.47,0-.85-.39-.84-.86,0-.47.38-.84.85-.84h0l26.87.3c.47,0,.85.39.84.86,0,.47-.38.84-.85.84Z"/> + <path class="cls-3" d="m61.99,37.95h0l-20.14-.19c-.47,0-.85-.39-.84-.86,0-.47.37-.83.86-.84l20.14.19c.47,0,.85.39.84.86,0,.47-.38.84-.85.84Z"/> + <path class="cls-3" d="m46.34,40.76h0l-26.87-.3c-.47,0-.85-.39-.84-.86,0-.47.38-.84.85-.84h0l26.87.3c.47,0,.85.39.84.86,0,.47-.38.84-.85.84Z"/> + <path class="cls-3" d="m58.68,40.81h0l-9.02-.1c-.47,0-.85-.39-.84-.86,0-.47.38-.84.85-.84h0l9.02.1c.47,0,.85.39.84.86,0,.47-.38.84-.85.84Z"/> + <path class="cls-3" d="m16.29,40.5h0l-9.02-.1c-.47,0-.85-.39-.84-.86,0-.47.38-.84.85-.84h0l9.02.1c.47,0,.85.39.84.86,0,.47-.38.84-.85.84Z"/> + </g> + <path class="cls-1" d="m23.88,9.83c-.54,0-.98-.42-1-.96-.02-.55.41-1.02.96-1.03l3.52-.12c.54-.03,1.01.41,1.03.96s-.41,1.02-.96,1.03l-3.52.12s-.02,0-.04,0Z"/> + <path class="cls-1" d="m30.59,9.71c-.54,0-.98-.42-1-.96-.02-.55.41-1.02.96-1.03l1.54-.05s.02,0,.04,0c.54,0,.98.42,1,.96.02.55-.41,1.02-.96,1.03l-1.54.05s-.02,0-.04,0Z"/> + </g> + <path class="cls-8" d="m59.6,8.7h1.28c.26,0,.53-.11.71-.29.1-.09.17-.2.21-.32.06-.12.09-.25.09-.39-.01-.26-.1-.53-.29-.71s-.44-.29-.71-.29h-1.28c-.26,0-.53.11-.71.29-.1.09-.17.2-.21.32-.06.12-.09.25-.09.39.01.26.1.53.29.71s.44.29.71.29h0Z"/> + </g> + </g> +</svg> \ No newline at end of file diff --git a/frontend/src/assets/feedback-icon/great-feedback-gray-icon.svg b/frontend/src/assets/feedback-icon/great-feedback-gray-icon.svg new file mode 100644 index 000000000..2be741676 --- /dev/null +++ b/frontend/src/assets/feedback-icon/great-feedback-gray-icon.svg @@ -0,0 +1,87 @@ +<?xml version="1.0" encoding="UTF-8"?> +<svg id="_레이어_2" data-name="레이어 2" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 73.56 45.78"> + <defs> + <style> + .cls-1 { + fill: #919191; + } + + .cls-2 { + fill: #7c7b7c; + } + + .cls-3 { + fill: #abaaaa; + } + + .cls-4 { + fill: #c9caca; + } + + .cls-5 { + fill: #dbdbdb; + } + + .cls-6 { + fill: #3c3d3d; + } + </style> + </defs> + <g id="_레이어_1-2" data-name="레이어 1"> + <g> + <g> + <g> + <g> + <path class="cls-2" d="m18.01,4.93c-1.96,9.36-3.4,18.82-4.31,28.33"/> + <path class="cls-3" d="m15.59,4.26c-2,9.58-3.46,19.26-4.4,29-.13,1.35,1.24,2.5,2.5,2.5,1.46,0,2.37-1.15,2.5-2.5.9-9.3,2.32-18.53,4.22-27.67.28-1.32-.39-2.7-1.75-3.08-1.24-.34-2.8.42-3.08,1.75h0Z"/> + </g> + <g> + <g> + <path class="cls-2" d="m18.49,4.59c9.53-1.11,18.87-1.24,28.63-1.77,7.93-.43,16.11-.32,23.87-.32"/> + <path class="cls-3" d="m18.49,7.09c8.77-1.01,17.59-1.23,26.4-1.66s17.39-.44,26.1-.44c3.22,0,3.22-5,0-5-8.71,0-17.39.01-26.1.44s-17.63.65-26.4,1.66c-1.34.15-2.5,1.04-2.5,2.5,0,1.23,1.15,2.66,2.5,2.5h0Z"/> + </g> + <g> + <path class="cls-2" d="m71.11,3.35c-1.68,10.43-1.58,21.05-1.47,31.61"/> + <path class="cls-3" d="m68.69,2.69c-1.7,10.69-1.67,21.48-1.56,32.27.03,3.22,5.03,3.22,5,0-.1-10.32-.24-20.72,1.39-30.94.21-1.33-.34-2.69-1.75-3.08-1.19-.33-2.86.4-3.08,1.75h0Z"/> + </g> + </g> + <g> + <path class="cls-2" d="m2.51,42.15c2.74-1.92,5.47-3.85,8.21-5.77.99-.69,2.11-1.37,3.09-1.96"/> + <path class="cls-3" d="m3.77,44.31c3.73-2.62,7.39-5.38,11.3-7.73,1.12-.67,1.63-2.28.9-3.42s-2.22-1.62-3.42-.9c-3.91,2.35-7.57,5.11-11.3,7.73-1.07.75-1.67,2.22-.9,3.42.68,1.06,2.28,1.7,3.42.9h0Z"/> + </g> + <g> + <path class="cls-2" d="m61.99,43.28c-19.72-.02-39.43-.2-59.15-.52"/> + <path class="cls-3" d="m61.99,40.78c-19.72-.02-39.43-.2-59.15-.52-3.22-.05-3.22,4.95,0,5,19.71.32,39.43.5,59.15.52,3.22,0,3.22-5,0-5h0Z"/> + </g> + <g> + <path class="cls-2" d="m68.51,35.67c-2.42,1.98-4.51,4.36-6.16,7.02"/> + <path class="cls-3" d="m66.74,33.9c-2.58,2.12-4.79,4.69-6.55,7.53-.69,1.11-.27,2.8.9,3.42s2.68.29,3.42-.9c.51-.83,1.07-1.63,1.66-2.4l-.39.51c1.32-1.7,2.83-3.25,4.49-4.62.47-.38.73-1.19.73-1.77,0-.61-.27-1.35-.73-1.77s-1.1-.76-1.77-.73c-.7.03-1.23.29-1.77.73h0Z"/> + </g> + </g> + <polygon class="cls-3" points="13.81 34.42 18.49 4.93 70.34 2.5 69.63 34.96 62.35 42.69 2.51 42.15 13.81 34.42"/> + </g> + <g> + <path class="cls-4" d="m23.83,10.92c13.13-.51,26.25-1.02,39.38-1.53,3.21-.12,3.22-5.12,0-5-13.13.51-26.25,1.02-39.38,1.53-3.21.12-3.22,5.12,0,5h0Z"/> + <path class="cls-4" d="m60.86,6.91c-.88,7.74-1.26,15.51-1.22,23.3l2.5-2.5c-13.82.06-27.66.23-41.47-.46l2.5,2.5c.04-3.56.67-7.18,1.04-10.73s.92-6.71,2.04-9.94c.44-1.28-.5-2.73-1.75-3.08-1.37-.38-2.63.47-3.08,1.75-1.22,3.52-1.78,7.16-2.17,10.85s-1.03,7.45-1.08,11.15c-.02,1.4,1.16,2.43,2.5,2.5,13.81.69,27.65.52,41.47.46,1.35,0,2.51-1.14,2.5-2.5-.04-7.79.34-15.56,1.22-23.3.15-1.34-1.26-2.5-2.5-2.5-1.48,0-2.35,1.15-2.5,2.5h0Z"/> + <path class="cls-4" d="m23.5,7.52s-4.54,9.61-2.36,20.59l40.67,1.21,1.54-23.3-39.85,1.5Z"/> + </g> + <path class="cls-6" d="m35.16,19.59c.91,1.85,2.98,2.81,4.99,2.77,1.89-.03,4.15-.82,4.71-2.83.35-1.24-1.58-1.77-1.93-.53-.07.24-.14.36-.3.52-.2.2-.39.32-.7.47-.48.23-1.28.37-1.92.37-1.37,0-2.53-.6-3.12-1.78-.24-.48-.93-.62-1.37-.36-.49.29-.6.88-.36,1.37h0Z"/> + <g> + <path class="cls-2" d="m61.99,45.09h-.01l-59.71-.67c-.55,0-1-.46-.99-1.01,0-.55.45-.99,1-.99h.01l59.71.67c.55,0,1,.46.99,1.01,0,.55-.45.99-1,.99Z"/> + <path class="cls-2" d="m61.99,45.09c-.19,0-.38-.05-.55-.17-.46-.31-.58-.93-.28-1.39,2.65-3.98,5.62-7.09,8.85-9.26.46-.31,1.08-.19,1.39.27.31.46.19,1.08-.27,1.39-3.01,2.02-5.8,4.96-8.3,8.71-.19.29-.51.45-.83.45Z"/> + <path class="cls-2" d="m70.56,36.1c-.51,0-.95-.39-1-.91-1.27-13.86,1.46-32.66,1.49-32.85.08-.55.59-.93,1.13-.84.55.08.92.59.84,1.13-.03.19-2.72,18.75-1.48,32.38.05.55-.36,1.04-.91,1.09-.03,0-.06,0-.09,0Z"/> + </g> + <g> + <path class="cls-1" d="m38.87,37.76h0l-26.87-.3c-.47,0-.85-.39-.84-.86,0-.47.38-.84.85-.84h0l26.87.3c.47,0,.85.39.84.86,0,.47-.38.84-.85.84Z"/> + <path class="cls-1" d="m61.99,37.95h0l-20.14-.19c-.47,0-.85-.39-.84-.86,0-.47.38-.84.85-.84h0l20.14.19c.47,0,.85.39.84.86,0,.47-.38.84-.85.84Z"/> + <path class="cls-1" d="m46.34,40.76h0l-26.87-.3c-.47,0-.85-.39-.84-.86,0-.47.38-.84.85-.84h0l26.87.3c.47,0,.85.39.84.86,0,.47-.38.84-.85.84Z"/> + <path class="cls-1" d="m58.68,40.81h0l-9.02-.1c-.47,0-.85-.39-.84-.86,0-.47.38-.84.85-.84h0l9.02.1c.47,0,.85.39.84.86,0,.47-.38.84-.85.84Z"/> + <path class="cls-1" d="m16.29,40.5h0l-9.02-.1c-.47,0-.85-.39-.84-.86,0-.47.38-.84.85-.84h0l9.02.1c.47,0,.85.39.84.86,0,.47-.38.84-.85.84Z"/> + </g> + <path class="cls-5" d="m23.88,9.83c-.54,0-.98-.42-1-.96-.02-.55.41-1.02.96-1.03l3.52-.12c.57-.02,1.02.41,1.03.96.02.55-.41,1.02-.96,1.03l-3.52.12s-.02,0-.04,0Z"/> + <path class="cls-5" d="m30.59,9.71c-.54,0-.98-.42-1-.96-.02-.55.41-1.02.96-1.03l1.54-.05c.52-.02,1.02.41,1.03.96.02.55-.41,1.02-.96,1.03l-1.54.05s-.02,0-.04,0Z"/> + <path class="cls-6" d="m49.73,19.1c.05,0,.11,0,.16.01l-.33-.04c.18.02.35.07.51.14l-.3-.13c.16.07.31.15.44.26l-.25-.2s.08.07.13.11l1.51-1.96c-.3-.14-.6-.29-.9-.43-.14-.09-.3-.14-.46-.15-.17-.04-.33-.03-.5.02-.16.04-.3.11-.43.22-.14.09-.24.21-.32.35l-.13.3c-.06.22-.06.44,0,.66l.13.3c.11.19.26.34.45.45.3.14.6.29.9.43.14.09.3.14.46.15.17.04.33.03.5-.02l.3-.13c.15-.08.26-.19.35-.32.08-.08.13-.17.16-.28.08-.15.11-.31.11-.48l-.04-.33c-.06-.21-.17-.4-.32-.55-.08-.07-.17-.14-.25-.2s-.17-.14-.27-.2c-.19-.12-.39-.2-.6-.28-.11-.04-.22-.08-.33-.11-.06-.01-.12-.02-.18-.03-.16-.02-.33-.05-.5-.06-.17,0-.33.03-.48.11-.15.05-.29.14-.4.26-.12.11-.21.25-.26.4-.08.15-.11.31-.11.48l.04.33c.06.21.17.4.32.55l.25.2c.19.11.41.17.63.17h0Z"/> + <path class="cls-6" d="m30.76,19.62c.13-.09.27-.16.42-.23l-.3.13c.19-.08.39-.14.6-.17l.3-.13c.15-.08.26-.19.35-.32.08-.08.13-.17.16-.28.08-.15.11-.31.11-.48l-.04-.33-.13-.3c-.08-.15-.19-.26-.32-.35-.12-.11-.26-.19-.43-.22-.15-.05-.31-.07-.47-.06-.14,0-.32.03-.47.08-.2.07-.39.16-.57.25-.2.1-.4.2-.59.32-.15.08-.26.19-.35.32-.11.12-.19.26-.22.43-.05.17-.06.33-.02.5,0,.17.06.32.15.46l.2.25c.16.15.34.26.55.32l.33.04c.23,0,.44-.06.63-.17.25-.15.52-.29.79-.41l-.3.13c.06-.03.13-.05.2-.06l-.33.04s.07,0,.1,0l-.33-.04s.04,0,.06.02v-2.41c-.18.03-.37.08-.54.14-.27.1-.54.22-.78.37-.15.08-.26.19-.35.32-.11.12-.19.26-.22.43-.05.17-.06.33-.02.5,0,.17.06.32.15.46l.2.25c.16.15.34.26.55.32l.33.04c.23,0,.44-.06.63-.17h0Z"/> + </g> + </g> +</svg> \ No newline at end of file diff --git a/frontend/src/assets/feedback-icon/great-feedback-icon.svg b/frontend/src/assets/feedback-icon/great-feedback-icon.svg new file mode 100644 index 000000000..b969a162d --- /dev/null +++ b/frontend/src/assets/feedback-icon/great-feedback-icon.svg @@ -0,0 +1,102 @@ +<?xml version="1.0" encoding="UTF-8"?> +<svg id="_레이어_2" data-name="레이어 2" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 73.56 45.78"> + <defs> + <style> + .cls-1 { + fill: #e8f5fc; + } + + .cls-2 { + fill: #f2aeb2; + } + + .cls-3 { + fill: #919191; + } + + .cls-4 { + fill: #7c7b7c; + } + + .cls-5 { + fill: #b4dcf5; + } + + .cls-6 { + fill: #b4e0f8; + } + + .cls-7 { + fill: #abaaaa; + } + + .cls-8 { + fill: #3c3d3d; + } + + .cls-9 { + fill: #82c47a; + } + </style> + </defs> + <g id="_레이어_1-2" data-name="레이어 1"> + <g> + <g> + <g> + <g> + <path class="cls-4" d="m18.01,4.93c-1.96,9.36-3.4,18.82-4.31,28.33"/> + <path class="cls-7" d="m15.59,4.26c-2,9.58-3.46,19.26-4.4,29-.13,1.35,1.24,2.5,2.5,2.5,1.46,0,2.37-1.15,2.5-2.5.9-9.3,2.32-18.53,4.22-27.67.28-1.32-.39-2.7-1.75-3.08-1.24-.34-2.8.42-3.08,1.75h0Z"/> + </g> + <g> + <g> + <path class="cls-4" d="m18.49,4.59c9.53-1.11,18.87-1.24,28.63-1.77,7.93-.43,16.11-.32,23.87-.32"/> + <path class="cls-7" d="m18.49,7.09c8.77-1.01,17.59-1.23,26.4-1.66s17.39-.44,26.1-.44c3.22,0,3.22-5,0-5-8.71,0-17.39.01-26.1.44s-17.63.65-26.4,1.66c-1.34.15-2.5,1.04-2.5,2.5,0,1.23,1.15,2.66,2.5,2.5h0Z"/> + </g> + <g> + <path class="cls-4" d="m71.11,3.35c-1.68,10.43-1.58,21.05-1.47,31.61"/> + <path class="cls-7" d="m68.69,2.69c-1.7,10.69-1.67,21.48-1.56,32.27.03,3.22,5.03,3.22,5,0-.1-10.32-.24-20.72,1.39-30.94.21-1.33-.34-2.69-1.75-3.08-1.19-.33-2.86.4-3.08,1.75h0Z"/> + </g> + </g> + <g> + <path class="cls-4" d="m2.51,42.15c2.74-1.92,5.47-3.85,8.21-5.77.99-.69,2.11-1.37,3.09-1.96"/> + <path class="cls-7" d="m3.77,44.31c3.73-2.62,7.39-5.38,11.3-7.73,1.12-.67,1.63-2.28.9-3.42s-2.22-1.62-3.42-.9c-3.91,2.35-7.57,5.11-11.3,7.73-1.07.75-1.67,2.22-.9,3.42.68,1.06,2.28,1.7,3.42.9h0Z"/> + </g> + <g> + <path class="cls-4" d="m61.99,43.28c-19.72-.02-39.43-.2-59.15-.52"/> + <path class="cls-7" d="m61.99,40.78c-19.72-.02-39.43-.2-59.15-.52-3.22-.05-3.22,4.95,0,5,19.71.32,39.43.5,59.15.52,3.22,0,3.22-5,0-5h0Z"/> + </g> + <g> + <path class="cls-4" d="m68.51,35.67c-2.42,1.98-4.51,4.36-6.16,7.02"/> + <path class="cls-7" d="m66.74,33.9c-2.58,2.12-4.79,4.69-6.55,7.53-.69,1.11-.27,2.8.9,3.42s2.68.29,3.42-.9c.51-.83,1.07-1.63,1.66-2.4l-.39.51c1.32-1.7,2.83-3.25,4.49-4.62.47-.38.73-1.19.73-1.77,0-.61-.27-1.35-.73-1.77s-1.1-.76-1.77-.73c-.7.03-1.23.29-1.77.73h0Z"/> + </g> + </g> + <polygon class="cls-7" points="13.81 34.42 18.49 4.93 70.34 2.5 69.63 34.96 62.35 42.69 2.51 42.15 13.81 34.42"/> + </g> + <g> + <path class="cls-5" d="m23.83,10.92c13.13-.51,26.25-1.02,39.38-1.53,3.21-.12,3.22-5.12,0-5-13.13.51-26.25,1.02-39.38,1.53-3.21.12-3.22,5.12,0,5h0Z"/> + <path class="cls-6" d="m60.86,6.91c-.88,7.74-1.26,15.51-1.22,23.3l2.5-2.5c-13.82.06-27.66.23-41.47-.46l2.5,2.5c.04-3.56.67-7.18,1.04-10.73s.92-6.71,2.04-9.94c.44-1.28-.5-2.73-1.75-3.08-1.37-.38-2.63.47-3.08,1.75-1.22,3.52-1.78,7.16-2.17,10.85s-1.03,7.45-1.08,11.15c-.02,1.4,1.16,2.43,2.5,2.5,13.81.69,27.65.52,41.47.46,1.35,0,2.51-1.14,2.5-2.5-.04-7.79.34-15.56,1.22-23.3.15-1.34-1.26-2.5-2.5-2.5-1.48,0-2.35,1.15-2.5,2.5h0Z"/> + <path class="cls-6" d="m23.5,7.52s-4.54,9.61-2.36,20.59l40.67,1.21,1.54-23.3-39.85,1.5Z"/> + </g> + <path class="cls-8" d="m35.16,19.59c.91,1.85,2.98,2.81,4.99,2.77,1.89-.03,4.15-.82,4.71-2.83.35-1.24-1.58-1.77-1.93-.53-.07.24-.14.36-.3.52-.2.2-.39.32-.7.47-.48.23-1.28.37-1.92.37-1.37,0-2.53-.6-3.12-1.78-.24-.48-.93-.62-1.37-.36-.49.29-.6.88-.36,1.37h0Z"/> + <path class="cls-2" d="m27.33,20.59c-.24.09-.45.18-.63.38-.04.05-.17.21-.2.26,0,0,0,.02-.01.02-.03.05-.12.24-.14.35-.06.31-.06.45,0,.76.03.14.09.28.17.41.15.24.28.36.51.52.1.07.27.12.35.16.03.01.06.02.09.03.15.03.33.06.49.05s.35-.04.51-.08.31-.1.46-.18c.31-.16.58-.49.66-.83.02-.06.02-.14.03-.2.01-.08.02-.13.02-.2,0-.13-.02-.28-.06-.41-.05-.15-.11-.3-.19-.44-.04-.07-.09-.13-.14-.19s-.09-.13-.14-.18c-.02-.02-.04-.04-.06-.06-.08-.07-.18-.14-.26-.2-.02-.01-.03-.02-.05-.03-.13-.08-.28-.14-.42-.19-.15-.05-.32-.07-.48-.07s-.33.02-.49.08c-.32.11-.42.18-.68.39-.02.02-.04.04-.06.06-.08.1-.17.2-.23.31-.15.28-.18.46-.21.77,0,.17.03.33.11.48.05.15.14.29.26.4.11.12.25.21.4.26.15.08.31.11.48.11l.33-.04c.21-.06.4-.17.55-.32l.2-.25c.11-.19.17-.41.17-.63,0,0,0-.02,0-.03l-.04.33s.01-.06.02-.09l-.13.3s.03-.05.05-.08l-.2.25s.05-.06.08-.08l-.25.2s.07-.04.1-.06l-.3.13s.07-.03.11-.03l-.33.04s.08,0,.12,0l-.33-.04s.08.02.12.03l-.3-.13s.09.05.13.08l-.25-.2s.08.08.12.12l-.2-.25s.07.1.09.16l-.13-.3s.03.07.03.1l-.04-.33s0,.03,0,.05l.04-.33s0,.03-.01.05l.13-.3s0,.02-.01.02l.2-.25s-.02.02-.03.03l.25-.2s-.03.02-.05.03l.3-.13c-.1.04-.2.06-.31.08l.33-.04c-.05,0-.11,0-.16,0l.33.04s-.07-.01-.11-.03l.3.13s-.04-.02-.06-.03l.25.2s-.03-.03-.05-.04l.2.25s-.03-.05-.04-.07l.13.3s-.02-.05-.02-.07l.04.33s0-.05,0-.08l-.04.33s0-.04.02-.06l-.13.3s.01-.02.02-.03l-.2.25s.02-.02.03-.03l-.25.2s.03-.02.04-.02l-.3.13h0c.16-.04.3-.12.43-.23.14-.09.24-.21.32-.35.09-.14.14-.3.15-.46.04-.17.03-.33-.02-.5l-.13-.3c-.11-.19-.26-.34-.45-.45l-.3-.13c-.22-.06-.44-.06-.66,0h0Z"/> + <path class="cls-2" d="m53.58,20.05c-.07-.06-.18-.16-.27-.21-.07-.04-.24-.11-.31-.13-.2-.06-.5-.06-.69,0-.01,0-.02,0-.03,0-.08.02-.24.09-.31.13-.04.02-.18.14-.14.11-.05.03-.1.07-.14.11l-.2.25c-.07.1-.12.22-.15.34-.02.09-.04.25-.05.35,0,.11.03.3.04.35,0,.01,0,.03,0,.04l.06.15c.02.06.05.11.07.17.06.11.15.21.23.31.11.12.25.21.38.3.06.04.12.08.18.11.15.08.31.14.46.2.07.03.14.05.21.06.36.07.63.08.99,0,.27-.06.49-.19.7-.36.09-.07.16-.12.23-.2.22-.26.27-.35.39-.67.11-.28.1-.65.02-.94-.04-.15-.11-.31-.2-.44-.07-.1-.15-.22-.24-.31-.05-.06-.13-.1-.19-.15-.18-.14-.33-.23-.55-.29-.31-.08-.5-.06-.81,0-.16.04-.3.11-.43.22-.14.09-.24.21-.32.35-.09.14-.14.3-.15.46-.04.17-.03.33.02.5.1.3.29.59.57.75l.3.13c.22.06.44.06.66,0h.02c-.11.01-.22.03-.33.04.03,0,.05,0,.08,0l-.33-.04s.06.01.09.02l-.3-.13s.06.03.08.05l-.25-.2s.06.05.08.08l-.2-.25s.05.08.07.12l-.13-.3s.02.08.03.12l-.04-.33s0,.07,0,.1l.04-.33s-.02.08-.03.12l.13-.3s-.04.07-.06.11l.2-.25s-.06.07-.1.1l.25-.2c-.05.04-.11.07-.17.1l.3-.13c-.06.02-.12.04-.19.05l.33-.04c-.07,0-.14,0-.21,0l.33.04c-.09-.01-.18-.04-.27-.08l.3.13c-.13-.06-.26-.13-.38-.22l.25.2s-.06-.05-.08-.08l.2.25s-.02-.04-.03-.06l.13.3s0-.03,0-.04l.04.33v-.02c-.01.11-.03.22-.04.33,0-.01,0-.02,0-.03l-.13.3s.01-.02.02-.03l-.2.25h.01c-.08.05-.17.12-.25.18,0,0,.02-.01.03-.02l-.3.13s.02,0,.03,0l-.33.04h.02c-.11-.02-.22-.03-.33-.04h.01c-.1-.04-.2-.08-.3-.12h.01c-.08-.06-.17-.12-.25-.19h.01c.11.13.25.22.4.27.15.08.31.11.48.11.17,0,.33-.03.48-.11.15-.05.29-.14.4-.26.22-.24.38-.55.37-.88l-.04-.33c-.06-.21-.17-.4-.32-.55h0Z"/> + <g> + <path class="cls-4" d="m61.99,45.09h-.01l-59.71-.67c-.55,0-1-.46-.99-1.01,0-.55.45-.99,1-.99h.01l59.71.67c.55,0,1,.46.99,1.01,0,.55-.45.99-1,.99Z"/> + <path class="cls-4" d="m61.99,45.09c-.19,0-.38-.05-.55-.17-.46-.31-.58-.93-.28-1.39,2.65-3.98,5.62-7.09,8.85-9.26.46-.31,1.08-.19,1.39.27.31.46.19,1.08-.27,1.39-3.01,2.02-5.8,4.96-8.3,8.71-.19.29-.51.45-.83.45Z"/> + <path class="cls-4" d="m70.56,36.1c-.51,0-.95-.39-1-.91-1.27-13.86,1.46-32.66,1.49-32.85.08-.55.59-.93,1.13-.84.55.08.92.59.84,1.13-.03.19-2.72,18.75-1.48,32.38.05.55-.36,1.04-.91,1.09-.03,0-.06,0-.09,0Z"/> + </g> + <g> + <path class="cls-3" d="m38.87,37.76h0l-26.87-.3c-.47,0-.85-.39-.84-.86,0-.47.38-.84.85-.84h0l26.87.3c.47,0,.85.39.84.86,0,.47-.38.84-.85.84Z"/> + <path class="cls-3" d="m61.99,37.95h0l-20.14-.19c-.47,0-.85-.39-.84-.86,0-.47.38-.84.85-.84h0l20.14.19c.47,0,.85.39.84.86,0,.47-.38.84-.85.84Z"/> + <path class="cls-3" d="m46.34,40.76h0l-26.87-.3c-.47,0-.85-.39-.84-.86,0-.47.38-.84.85-.84h0l26.87.3c.47,0,.85.39.84.86,0,.47-.38.84-.85.84Z"/> + <path class="cls-3" d="m58.68,40.81h0l-9.02-.1c-.47,0-.85-.39-.84-.86,0-.47.38-.84.85-.84h0l9.02.1c.47,0,.85.39.84.86,0,.47-.38.84-.85.84Z"/> + <path class="cls-3" d="m16.29,40.5h0l-9.02-.1c-.47,0-.85-.39-.84-.86,0-.47.38-.84.85-.84h0l9.02.1c.47,0,.85.39.84.86,0,.47-.38.84-.85.84Z"/> + </g> + <path class="cls-1" d="m23.88,9.83c-.54,0-.98-.42-1-.96-.02-.55.41-1.02.96-1.03l3.52-.12c.57-.02,1.02.41,1.03.96.02.55-.41,1.02-.96,1.03l-3.52.12s-.02,0-.04,0Z"/> + <path class="cls-1" d="m30.59,9.71c-.54,0-.98-.42-1-.96-.02-.55.41-1.02.96-1.03l1.54-.05c.52-.02,1.02.41,1.03.96.02.55-.41,1.02-.96,1.03l-1.54.05s-.02,0-.04,0Z"/> + <path class="cls-9" d="m58.68,8.46h4.22c.52,0,1.02-.46,1-1s-.44-1-1-1h-4.22c-.52,0-1.02.46-1,1s.44,1,1,1h0Z"/> + <path class="cls-8" d="m49.73,19.1c.05,0,.11,0,.16.01l-.33-.04c.18.02.35.07.51.14l-.3-.13c.16.07.31.15.44.26l-.25-.2s.08.07.13.11l1.51-1.96c-.3-.14-.6-.29-.9-.43-.14-.09-.3-.14-.46-.15-.17-.04-.33-.03-.5.02-.16.04-.3.11-.43.22-.14.09-.24.21-.32.35l-.13.3c-.06.22-.06.44,0,.66l.13.3c.11.19.26.34.45.45.3.14.6.29.9.43.14.09.3.14.46.15.17.04.33.03.5-.02l.3-.13c.15-.08.26-.19.35-.32.08-.08.13-.17.16-.28.08-.15.11-.31.11-.48l-.04-.33c-.06-.21-.17-.4-.32-.55-.08-.07-.17-.14-.25-.2s-.17-.14-.27-.2c-.19-.12-.39-.2-.6-.28-.11-.04-.22-.08-.33-.11-.06-.01-.12-.02-.18-.03-.16-.02-.33-.05-.5-.06-.17,0-.33.03-.48.11-.15.05-.29.14-.4.26-.12.11-.21.25-.26.4-.08.15-.11.31-.11.48l.04.33c.06.21.17.4.32.55l.25.2c.19.11.41.17.63.17h0Z"/> + <path class="cls-8" d="m30.76,19.62c.13-.09.27-.16.42-.23l-.3.13c.19-.08.39-.14.6-.17l.3-.13c.15-.08.26-.19.35-.32.08-.08.13-.17.16-.28.08-.15.11-.31.11-.48l-.04-.33-.13-.3c-.08-.15-.19-.26-.32-.35-.12-.11-.26-.19-.43-.22-.15-.05-.31-.07-.47-.06-.14,0-.32.03-.47.08-.2.07-.39.16-.57.25-.2.1-.4.2-.59.32-.15.08-.26.19-.35.32-.11.12-.19.26-.22.43-.05.17-.06.33-.02.5,0,.17.06.32.15.46l.2.25c.16.15.34.26.55.32l.33.04c.23,0,.44-.06.63-.17.25-.15.52-.29.79-.41l-.3.13c.06-.03.13-.05.2-.06l-.33.04s.07,0,.1,0l-.33-.04s.04,0,.06.02v-2.41c-.18.03-.37.08-.54.14-.27.1-.54.22-.78.37-.15.08-.26.19-.35.32-.11.12-.19.26-.22.43-.05.17-.06.33-.02.5,0,.17.06.32.15.46l.2.25c.16.15.34.26.55.32l.33.04c.23,0,.44-.06.63-.17h0Z"/> + </g> + </g> +</svg> \ No newline at end of file diff --git a/frontend/src/assets/github-icon.svg b/frontend/src/assets/github-icon.svg new file mode 100644 index 000000000..6ef4b248a --- /dev/null +++ b/frontend/src/assets/github-icon.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24"><path d="M12 0c-6.626 0-12 5.373-12 12 0 5.302 3.438 9.8 8.207 11.387.599.111.793-.261.793-.577v-2.234c-3.338.726-4.033-1.416-4.033-1.416-.546-1.387-1.333-1.756-1.333-1.756-1.089-.745.083-.729.083-.729 1.205.084 1.839 1.237 1.839 1.237 1.07 1.834 2.807 1.304 3.492.997.107-.775.418-1.305.762-1.604-2.665-.305-5.467-1.334-5.467-5.931 0-1.311.469-2.381 1.236-3.221-.124-.303-.535-1.524.117-3.176 0 0 1.008-.322 3.301 1.23.957-.266 1.983-.399 3.003-.404 1.02.005 2.047.138 3.006.404 2.291-1.552 3.297-1.23 3.297-1.23.653 1.653.242 2.874.118 3.176.77.84 1.235 1.911 1.235 3.221 0 4.609-2.807 5.624-5.479 5.921.43.372.823 1.102.823 2.222v3.293c0 .319.192.694.801.576 4.765-1.589 8.199-6.086 8.199-11.386 0-6.627-5.373-12-12-12z"/></svg> \ No newline at end of file diff --git a/frontend/src/assets/letter-icon.svg b/frontend/src/assets/letter-icon.svg new file mode 100644 index 000000000..752477b1c --- /dev/null +++ b/frontend/src/assets/letter-icon.svg @@ -0,0 +1,21 @@ +<svg width="531" height="424" viewBox="0 0 531 424" fill="none" xmlns="http://www.w3.org/2000/svg"> +<g filter="url(#filter0_d_2642_10076)"> +<rect width="460.842" height="18.8141" rx="9.40705" transform="matrix(0.990908 0.134538 -0.133356 0.991068 62.6133 114.631)" fill="#D9D9D9"/> +<rect width="460.842" height="223.125" rx="10" transform="matrix(0.990908 0.134538 -0.133356 0.991068 62.0469 117.154)" fill="#DAD9D9"/> +<path d="M514.312 192.071L63.3418 130.842C65.7921 153.322 72.5036 228.331 96.1808 239.548C119.858 250.765 438.436 296.561 462.594 289.297C486.753 282.033 501.973 221.973 514.312 192.071Z" fill="#C1C1C1"/> +<path d="M516.406 196.128L60.2012 134.188C63.1094 153.737 71.3357 218.938 95.4429 229.132C119.55 239.326 441.875 285.287 466.109 279.458C490.344 273.63 504.535 221.826 516.406 196.128Z" fill="#F2F2F2"/> +<rect width="461.219" height="25.837" rx="10" transform="matrix(0.990097 0.134428 -0.133465 0.991873 62.5117 112.354)" fill="#F2F2F2"/> +</g> +<defs> +<filter id="filter0_d_2642_10076" x="29.5352" y="113.605" width="492.561" height="293.428" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB"> +<feFlood flood-opacity="0" result="BackgroundImageFix"/> +<feColorMatrix in="SourceAlpha" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0" result="hardAlpha"/> +<feOffset dy="4"/> +<feGaussianBlur stdDeviation="2"/> +<feComposite in2="hardAlpha" operator="out"/> +<feColorMatrix type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.25 0"/> +<feBlend mode="normal" in2="BackgroundImageFix" result="effect1_dropShadow_2642_10076"/> +<feBlend mode="normal" in="SourceGraphic" in2="effect1_dropShadow_2642_10076" result="shape"/> +</filter> +</defs> +</svg> diff --git a/frontend/src/assets/logo-image.svg b/frontend/src/assets/logo-image.svg new file mode 100644 index 000000000..d555a0b07 --- /dev/null +++ b/frontend/src/assets/logo-image.svg @@ -0,0 +1,14 @@ +<svg width="377" height="67" viewBox="0 0 377 67" fill="none" xmlns="http://www.w3.org/2000/svg"> +<path d="M37.2537 45.5458V60.5346L0 40.1614V27.3555L37.2537 45.5458Z" fill="#D23333"/> +<path d="M79.7461 45.5458V60.5346L117 40.1614V27.3555L79.7461 45.5458Z" fill="url(#paint0_linear_2757_9952)"/> +<path d="M37.2537 22.1158V7.12695L0 27.5001V40.3061L37.2537 22.1158Z" fill="#F64545"/> +<path d="M79.7461 22.2613V7.27246L117 27.6456V40.4516L79.7461 22.2613Z" fill="#F64545"/> +<path d="M76.3991 1.01562H61.4103L40.7461 66.9373H56.0259L76.3991 1.01562Z" fill="#333333"/> +<path d="M190.836 25.9621L183.061 30.4306V30.6094L190.836 35.078V56.8846L180.469 62.8725H146.598V0.3125H180.469L190.836 6.3004V25.9621ZM159.11 35.8823V52.1479H178.324V35.8823H159.11ZM159.11 11.037V25.1577H178.324V11.037H159.11ZM213.362 45.2663V53.0416H225.963V45.2663H213.362ZM211.485 63.3193L201.118 57.3314V41.8702L211.485 35.8823H225.963V28.6432H205.586V18.1868H227.84L238.207 24.1746V63.3193H232.308L225.963 59.6551L219.618 63.3193H211.485ZM245.796 28.6432V18.1868H254.019V10.6796L266.262 3.6192V18.1868H276.093V28.6432H266.262V52.416H276.093V62.8725H264.386L254.019 56.8846V28.6432H245.796ZM325.222 57.3314L314.855 63.3193H295.819L285.451 57.3314V23.7278L295.819 17.7399H314.855L325.222 23.7278V57.3314ZM297.695 28.1964V52.8629H312.978V28.1964H297.695ZM376.139 23.7278V62.8725H363.895V28.1964H348.613V62.8725H336.369V17.7399H346.468L348.613 21.4041L354.958 17.7399H365.772L376.139 23.7278Z" fill="#333333"/> +<defs> +<linearGradient id="paint0_linear_2757_9952" x1="110.718" y1="39.8854" x2="74.5971" y2="58.731" gradientUnits="userSpaceOnUse"> +<stop stop-color="#AE2121"/> +<stop offset="1" stop-color="#F64545"/> +</linearGradient> +</defs> +</svg> diff --git a/frontend/src/assets/technicalLabelIcon.tsx b/frontend/src/assets/technicalLabelIcon.tsx new file mode 100644 index 000000000..c19fae7ae --- /dev/null +++ b/frontend/src/assets/technicalLabelIcon.tsx @@ -0,0 +1,174 @@ +import React from 'react'; + +export const JavaIcon = (props: React.SVGProps<SVGSVGElement>) => { + return ( + <svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" viewBox="0 0 256 256" {...props}> + <g fill="none"> + <rect width="256" height="256" fill="#242938" rx="60"></rect> + <path + fill="#fff" + d="M101.634 182.619s-7.68 4.674 5.345 6.011c15.728 2.004 24.044 1.669 41.407-1.668c0 0 4.674 3.009 11.02 5.344c-39.075 16.696-88.497-1.002-57.772-9.687Zm-5.009-21.705s-8.35 6.346 4.674 7.679c17.028 1.669 30.391 2.004 53.433-2.667c0 0 3.009 3.341 8.015 5.01c-47.083 14.025-99.85 1.333-66.122-10.019v-.003Zm92.17 38.07s5.676 4.674-6.346 8.35c-22.376 6.678-93.839 8.685-113.876 0c-7.009-3.009 6.347-7.352 10.686-8.015c4.342-1.002 6.678-1.002 6.678-1.002c-7.68-5.344-51.095 11.02-22.041 15.729c79.813 13.027 145.603-5.676 124.896-15.028l.003-.034Zm-83.488-60.781s-36.402 8.685-13.028 11.687c10.019 1.333 29.721 1.002 48.089-.335c15.028-1.334 30.09-4.007 30.09-4.007s-5.345 2.338-9.017 4.674c-37.099 9.693-108.23 5.351-87.858-4.668c17.37-8.35 31.724-7.351 31.724-7.351Zm65.116 36.401c37.407-19.37 20.037-38.07 8.015-35.731c-3.009.667-4.342 1.334-4.342 1.334s1.001-2.004 3.34-2.667c23.709-8.35 42.413 25.046-7.679 38.07c0 0 .335-.335.666-1.002v-.004Zm-61.444 52.76c36.067 2.339 91.168-1.334 92.505-18.369c0 0-2.667 6.678-29.72 11.688c-30.722 5.676-68.796 5.009-91.168 1.333c0 0 4.674 4.007 28.386 5.344l-.003.004Z" + ></path> + <path + fill={props.color ?? '#F58219'} + d="M147.685 28s20.704 21.039-19.702 52.76c-32.394 25.712-7.351 40.408 0 57.101c-19.035-17.028-32.722-32.059-23.377-46.085C118.331 71.083 156.062 61.064 147.685 28ZM137 123.842c9.683 11.02-2.667 21.039-2.667 21.039s24.711-12.686 13.359-28.387c-10.354-15.028-18.368-22.376 25.046-47.425c0 0-68.46 17.028-35.731 54.766l-.007.007Z" + ></path> + </g> + </svg> + ); +}; + +export const JavascriptIcon = (props: React.SVGProps<SVGSVGElement>) => { + return ( + <svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" viewBox="0 0 256 256" {...props}> + <path fill={props.color ?? '#F7DF1E'} d="M0 0h256v256H0V0Z"></path> + <path d="m67.312 213.932l19.59-11.856c3.78 6.701 7.218 12.371 15.465 12.371c7.905 0 12.89-3.092 12.89-15.12v-81.798h24.057v82.138c0 24.917-14.606 36.259-35.916 36.259c-19.245 0-30.416-9.967-36.087-21.996m85.07-2.576l19.588-11.341c5.157 8.421 11.859 14.607 23.715 14.607c9.969 0 16.325-4.984 16.325-11.858c0-8.248-6.53-11.17-17.528-15.98l-6.013-2.58c-17.357-7.387-28.87-16.667-28.87-36.257c0-18.044 13.747-31.792 35.228-31.792c15.294 0 26.292 5.328 34.196 19.247l-18.732 12.03c-4.125-7.389-8.591-10.31-15.465-10.31c-7.046 0-11.514 4.468-11.514 10.31c0 7.217 4.468 10.14 14.778 14.608l6.014 2.577c20.45 8.765 31.963 17.7 31.963 37.804c0 21.654-17.012 33.51-39.867 33.51c-22.339 0-36.774-10.654-43.819-24.574"></path> + </svg> + ); +}; + +export const TypescriptIcon = (props: React.SVGProps<SVGSVGElement>) => { + return ( + <svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" viewBox="0 0 128 128" {...props}> + <path fill="#fff" d="M22.67 47h99.67v73.67H22.67z"></path> + <path + fill={props.color ?? '#007acc'} + d="M1.5 63.91v62.5h125v-125H1.5zm100.73-5a15.56 15.56 0 0 1 7.82 4.5a20.58 20.58 0 0 1 3 4c0 .16-5.4 3.81-8.69 5.85c-.12.08-.6-.44-1.13-1.23a7.09 7.09 0 0 0-5.87-3.53c-3.79-.26-6.23 1.73-6.21 5a4.58 4.58 0 0 0 .54 2.34c.83 1.73 2.38 2.76 7.24 4.86c8.95 3.85 12.78 6.39 15.16 10c2.66 4 3.25 10.46 1.45 15.24c-2 5.2-6.9 8.73-13.83 9.9a38.32 38.32 0 0 1-9.52-.1a23 23 0 0 1-12.72-6.63c-1.15-1.27-3.39-4.58-3.25-4.82a9.34 9.34 0 0 1 1.15-.73L82 101l3.59-2.08l.75 1.11a16.78 16.78 0 0 0 4.74 4.54c4 2.1 9.46 1.81 12.16-.62a5.43 5.43 0 0 0 .69-6.92c-1-1.39-3-2.56-8.59-5c-6.45-2.78-9.23-4.5-11.77-7.24a16.48 16.48 0 0 1-3.43-6.25a25 25 0 0 1-.22-8c1.33-6.23 6-10.58 12.82-11.87a31.66 31.66 0 0 1 9.49.26zm-29.34 5.24v5.12H56.66v46.23H45.15V69.26H28.88v-5a49.19 49.19 0 0 1 .12-5.17C29.08 59 39 59 51 59h21.83z" + ></path> + </svg> + ); +}; + +export const ReactIcon = (props: React.SVGProps<SVGSVGElement>) => { + return ( + <svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" viewBox="0 0 256 256" {...props}> + <g fill="none"> + <rect width="256" height="256" fill="#242938" rx="60"></rect> + <path + fill={props.color ?? '#00D8FF'} + d="M128.001 146.951c10.304 0 18.656-8.353 18.656-18.656c0-10.303-8.352-18.656-18.656-18.656c-10.303 0-18.656 8.353-18.656 18.656c0 10.303 8.353 18.656 18.656 18.656Z" + ></path> + <path + stroke="#00D8FF" + strokeWidth="8.911" + d="M128.002 90.363c25.048 0 48.317 3.594 65.862 9.635C215.003 107.275 228 118.306 228 128.295c0 10.409-13.774 22.128-36.475 29.649c-17.162 5.686-39.746 8.654-63.523 8.654c-24.378 0-47.463-2.786-64.819-8.717C41.225 150.376 28 138.506 28 128.295c0-9.908 12.41-20.854 33.252-28.12c17.61-6.14 41.453-9.812 66.746-9.812h.004Z" + clipRule="evenodd" + ></path> + <path + stroke="#00D8FF" + strokeWidth="8.911" + d="M94.981 109.438c12.514-21.698 27.251-40.06 41.249-52.24c16.864-14.677 32.914-20.425 41.566-15.436c9.017 5.2 12.288 22.988 7.463 46.41c-3.645 17.707-12.359 38.753-24.238 59.351c-12.179 21.118-26.124 39.724-39.931 51.792c-17.471 15.272-34.362 20.799-43.207 15.698c-8.583-4.946-11.865-21.167-7.747-42.852c3.479-18.323 12.21-40.812 24.841-62.723h.004Z" + clipRule="evenodd" + ></path> + <path + stroke="#00D8FF" + strokeWidth="8.911" + d="M95.012 147.578c-12.549-21.674-21.093-43.616-24.659-61.826c-4.293-21.941-1.258-38.716 7.387-43.72c9.009-5.216 26.052.834 43.934 16.712c13.52 12.004 27.403 30.061 39.316 50.639c12.214 21.098 21.368 42.473 24.929 60.461c4.506 22.764.859 40.157-7.978 45.272c-8.574 4.964-24.265-.291-40.996-14.689c-14.136-12.164-29.26-30.959-41.933-52.849Z" + clipRule="evenodd" + ></path> + </g> + </svg> + ); +}; + +export const SpringIcon = (props: React.SVGProps<SVGSVGElement>) => { + return ( + <svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" viewBox="0 0 256 256" {...props}> + <g fill="none"> + <rect width="256" height="256" fill="#242938" rx="60"></rect> + <path + fill={props.color ?? '#5FB832'} + d="M209.545 171.821c-24.615 32.797-77.198 21.726-110.91 23.318c0 0-5.968.332-11.979 1.322c0 0 2.273-.97 5.172-1.969c23.678-8.188 34.867-9.833 49.254-17.223c27.032-13.848 53.936-44.01 59.41-75.344c-10.29 30.136-41.583 56.073-70.077 66.605c-19.504 7.197-54.773 14.201-54.778 14.204c.016.025-1.406-.738-1.426-.755c-23.986-11.67-24.678-63.62 18.886-80.366c19.1-7.347 37.369-3.311 58.017-8.226c22.022-5.236 47.528-21.743 57.895-43.324c11.622 34.472 25.583 88.404.536 121.758Zm.428-132.44c-2.93 6.962-6.507 13.236-10.629 18.847C181.197 39.604 155.868 28 127.871 28C72.799 28 28 72.804 28 127.866c0 28.865 12.32 54.898 31.964 73.146l2.187 1.937c-3.652-2.978-4.213-8.341-1.253-11.997c2.978-3.657 8.346-4.224 12-1.262c3.664 2.968 4.222 8.345 1.256 12.007c-2.956 3.664-8.334 4.217-11.993 1.261l1.489 1.318c17.375 14.63 39.774 23.467 64.221 23.467c52.64 0 95.865-40.965 99.565-92.67c2.74-25.316-4.737-57.462-17.463-95.692Z" + ></path> + </g> + </svg> + ); +}; + +export const JavaIconWhite = (props: React.SVGProps<SVGSVGElement>) => { + return ( + <svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" viewBox="0 0 256 256" {...props}> + <g fill="none"> + <rect width="256" height="256" fill="tra" rx="60"></rect> + <path + fill={props.color ?? '#F58219'} + d="M101.634 182.619s-7.68 4.674 5.345 6.011c15.728 2.004 24.044 1.669 41.407-1.668c0 0 4.674 3.009 11.02 5.344c-39.075 16.696-88.497-1.002-57.772-9.687Zm-5.009-21.705s-8.35 6.346 4.674 7.679c17.028 1.669 30.391 2.004 53.433-2.667c0 0 3.009 3.341 8.015 5.01c-47.083 14.025-99.85 1.333-66.122-10.019v-.003Zm92.17 38.07s5.676 4.674-6.346 8.35c-22.376 6.678-93.839 8.685-113.876 0c-7.009-3.009 6.347-7.352 10.686-8.015c4.342-1.002 6.678-1.002 6.678-1.002c-7.68-5.344-51.095 11.02-22.041 15.729c79.813 13.027 145.603-5.676 124.896-15.028l.003-.034Zm-83.488-60.781s-36.402 8.685-13.028 11.687c10.019 1.333 29.721 1.002 48.089-.335c15.028-1.334 30.09-4.007 30.09-4.007s-5.345 2.338-9.017 4.674c-37.099 9.693-108.23 5.351-87.858-4.668c17.37-8.35 31.724-7.351 31.724-7.351Zm65.116 36.401c37.407-19.37 20.037-38.07 8.015-35.731c-3.009.667-4.342 1.334-4.342 1.334s1.001-2.004 3.34-2.667c23.709-8.35 42.413 25.046-7.679 38.07c0 0 .335-.335.666-1.002v-.004Zm-61.444 52.76c36.067 2.339 91.168-1.334 92.505-18.369c0 0-2.667 6.678-29.72 11.688c-30.722 5.676-68.796 5.009-91.168 1.333c0 0 4.674 4.007 28.386 5.344l-.003.004Z" + ></path> + <path + fill={props.color ?? '#F58219'} + d="M147.685 28s20.704 21.039-19.702 52.76c-32.394 25.712-7.351 40.408 0 57.101c-19.035-17.028-32.722-32.059-23.377-46.085C118.331 71.083 156.062 61.064 147.685 28ZM137 123.842c9.683 11.02-2.667 21.039-2.667 21.039s24.711-12.686 13.359-28.387c-10.354-15.028-18.368-22.376 25.046-47.425c0 0-68.46 17.028-35.731 54.766l-.007.007Z" + ></path> + </g> + </svg> + ); +}; + +export const JavascriptIconWhite = (props: React.SVGProps<SVGSVGElement>) => { + return ( + <svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" viewBox="0 0 256 256" {...props}> + <path fill={props.color ?? '#F7DF1E'} d="M0 0h256v256H0V0Z"></path> + <path + fill="#fff" + d="m67.312 213.932l19.59-11.856c3.78 6.701 7.218 12.371 15.465 12.371c7.905 0 12.89-3.092 12.89-15.12v-81.798h24.057v82.138c0 24.917-14.606 36.259-35.916 36.259c-19.245 0-30.416-9.967-36.087-21.996m85.07-2.576l19.588-11.341c5.157 8.421 11.859 14.607 23.715 14.607c9.969 0 16.325-4.984 16.325-11.858c0-8.248-6.53-11.17-17.528-15.98l-6.013-2.58c-17.357-7.387-28.87-16.667-28.87-36.257c0-18.044 13.747-31.792 35.228-31.792c15.294 0 26.292 5.328 34.196 19.247l-18.732 12.03c-4.125-7.389-8.591-10.31-15.465-10.31c-7.046 0-11.514 4.468-11.514 10.31c0 7.217 4.468 10.14 14.778 14.608l6.014 2.577c20.45 8.765 31.963 17.7 31.963 37.804c0 21.654-17.012 33.51-39.867 33.51c-22.339 0-36.774-10.654-43.819-24.574" + ></path> + </svg> + ); +}; + +export const TypescriptIconWhite = (props: React.SVGProps<SVGSVGElement>) => { + return ( + <svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" viewBox="0 0 128 128" {...props}> + <path fill="#fff" d="M22.67 47h99.67v73.67H22.67z"></path> + <path + fill={props.color ?? '#007acc'} + d="M1.5 63.91v62.5h125v-125H1.5zm100.73-5a15.56 15.56 0 0 1 7.82 4.5a20.58 20.58 0 0 1 3 4c0 .16-5.4 3.81-8.69 5.85c-.12.08-.6-.44-1.13-1.23a7.09 7.09 0 0 0-5.87-3.53c-3.79-.26-6.23 1.73-6.21 5a4.58 4.58 0 0 0 .54 2.34c.83 1.73 2.38 2.76 7.24 4.86c8.95 3.85 12.78 6.39 15.16 10c2.66 4 3.25 10.46 1.45 15.24c-2 5.2-6.9 8.73-13.83 9.9a38.32 38.32 0 0 1-9.52-.1a23 23 0 0 1-12.72-6.63c-1.15-1.27-3.39-4.58-3.25-4.82a9.34 9.34 0 0 1 1.15-.73L82 101l3.59-2.08l.75 1.11a16.78 16.78 0 0 0 4.74 4.54c4 2.1 9.46 1.81 12.16-.62a5.43 5.43 0 0 0 .69-6.92c-1-1.39-3-2.56-8.59-5c-6.45-2.78-9.23-4.5-11.77-7.24a16.48 16.48 0 0 1-3.43-6.25a25 25 0 0 1-.22-8c1.33-6.23 6-10.58 12.82-11.87a31.66 31.66 0 0 1 9.49.26zm-29.34 5.24v5.12H56.66v46.23H45.15V69.26H28.88v-5a49.19 49.19 0 0 1 .12-5.17C29.08 59 39 59 51 59h21.83z" + ></path> + </svg> + ); +}; + +export const ReactIconWhite = (props: React.SVGProps<SVGSVGElement>) => { + return ( + <svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" viewBox="0 0 256 256" {...props}> + <g fill="none"> + <rect width="256" height="256" fill={props.color ?? '#00D8FF'} rx="60"></rect> + <path + fill="#ffffff" + d="M128.001 146.951c10.304 0 18.656-8.353 18.656-18.656c0-10.303-8.352-18.656-18.656-18.656c-10.303 0-18.656 8.353-18.656 18.656c0 10.303 8.353 18.656 18.656 18.656Z" + ></path> + <path + stroke="#ffffff" + strokeWidth="8.911" + d="M128.002 90.363c25.048 0 48.317 3.594 65.862 9.635C215.003 107.275 228 118.306 228 128.295c0 10.409-13.774 22.128-36.475 29.649c-17.162 5.686-39.746 8.654-63.523 8.654c-24.378 0-47.463-2.786-64.819-8.717C41.225 150.376 28 138.506 28 128.295c0-9.908 12.41-20.854 33.252-28.12c17.61-6.14 41.453-9.812 66.746-9.812h.004Z" + clipRule="evenodd" + ></path> + <path + stroke="#ffffff" + strokeWidth="8.911" + d="M94.981 109.438c12.514-21.698 27.251-40.06 41.249-52.24c16.864-14.677 32.914-20.425 41.566-15.436c9.017 5.2 12.288 22.988 7.463 46.41c-3.645 17.707-12.359 38.753-24.238 59.351c-12.179 21.118-26.124 39.724-39.931 51.792c-17.471 15.272-34.362 20.799-43.207 15.698c-8.583-4.946-11.865-21.167-7.747-42.852c3.479-18.323 12.21-40.812 24.841-62.723h.004Z" + clipRule="evenodd" + ></path> + <path + stroke="#ffffff" + strokeWidth="8.911" + d="M95.012 147.578c-12.549-21.674-21.093-43.616-24.659-61.826c-4.293-21.941-1.258-38.716 7.387-43.72c9.009-5.216 26.052.834 43.934 16.712c13.52 12.004 27.403 30.061 39.316 50.639c12.214 21.098 21.368 42.473 24.929 60.461c4.506 22.764.859 40.157-7.978 45.272c-8.574 4.964-24.265-.291-40.996-14.689c-14.136-12.164-29.26-30.959-41.933-52.849Z" + clipRule="evenodd" + ></path> + </g> + </svg> + ); +}; + +export const SpringIconWhite = (props: React.SVGProps<SVGSVGElement>) => { + return ( + <svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" viewBox="0 0 256 256" {...props}> + <g fill="none"> + <rect width="256" height="256" fill="transparent" rx="60"></rect> + <path + fill={props.color ?? '#5FB832'} + d="M209.545 171.821c-24.615 32.797-77.198 21.726-110.91 23.318c0 0-5.968.332-11.979 1.322c0 0 2.273-.97 5.172-1.969c23.678-8.188 34.867-9.833 49.254-17.223c27.032-13.848 53.936-44.01 59.41-75.344c-10.29 30.136-41.583 56.073-70.077 66.605c-19.504 7.197-54.773 14.201-54.778 14.204c.016.025-1.406-.738-1.426-.755c-23.986-11.67-24.678-63.62 18.886-80.366c19.1-7.347 37.369-3.311 58.017-8.226c22.022-5.236 47.528-21.743 57.895-43.324c11.622 34.472 25.583 88.404.536 121.758Zm.428-132.44c-2.93 6.962-6.507 13.236-10.629 18.847C181.197 39.604 155.868 28 127.871 28C72.799 28 28 72.804 28 127.866c0 28.865 12.32 54.898 31.964 73.146l2.187 1.937c-3.652-2.978-4.213-8.341-1.253-11.997c2.978-3.657 8.346-4.224 12-1.262c3.664 2.968 4.222 8.345 1.256 12.007c-2.956 3.664-8.334 4.217-11.993 1.261l1.489 1.318c17.375 14.63 39.774 23.467 64.221 23.467c52.64 0 95.865-40.965 99.565-92.67c2.74-25.316-4.737-57.462-17.463-95.692Z" + ></path> + </g> + </svg> + ); +}; diff --git a/frontend/src/components/CheckBox/CheckBox.tsx b/frontend/src/components/CheckBox/CheckBox.tsx new file mode 100644 index 000000000..904045ffa --- /dev/null +++ b/frontend/src/components/CheckBox/CheckBox.tsx @@ -0,0 +1,59 @@ +import React from 'react'; +import { SelectOption } from '@/types/select'; +import { CheckBoxIcon } from '@/assets/checkboxIcon'; +import { styled } from 'styled-components'; + +interface Props { + options: SelectOption<string>[]; + selectOption: (value: string) => void; +} + +const CheckBox = ({ options, selectOption }: Props) => { + const makeHandleClickOption = (value: string) => () => { + if (options.filter((option) => option.value === value).length === 0) return; + + selectOption(value); + }; + + return ( + <S.CheckBoxContainer> + <S.CheckBoxList> + {options.map((option) => ( + <S.CheckBoxItem key={option.value}> + <S.CheckBoxButton onClick={makeHandleClickOption(option.value)}> + <CheckBoxIcon isSelected={option.selected} /> + {option.label} + </S.CheckBoxButton> + </S.CheckBoxItem> + ))} + </S.CheckBoxList> + </S.CheckBoxContainer> + ); +}; + +export default CheckBox; + +const S = { + CheckBoxContainer: styled.div` + padding: 45px 20px; + `, + + CheckBoxList: styled.ul` + display: flex; + flex-direction: column; + gap: 15px; + `, + + CheckBoxButton: styled.button` + display: flex; + align-items: center; + gap: 20px; + + background-color: transparent; + `, + + CheckBoxItem: styled.div` + font-size: 18px; + color: var(--gray-800); + `, +}; diff --git a/frontend/src/components/ConfirmModal/ConfirmModal.tsx b/frontend/src/components/ConfirmModal/ConfirmModal.tsx new file mode 100644 index 000000000..f040ecb61 --- /dev/null +++ b/frontend/src/components/ConfirmModal/ConfirmModal.tsx @@ -0,0 +1,74 @@ +import React, { useEffect } from 'react'; +import Modal from '../common/Modal/Modal'; +import Button from '../common/Button/Button'; +import { styled } from 'styled-components'; + +interface Props { + contents: string; + closeModal: () => void; + handleClickConfirmButton: () => void; + confirmText?: string; + cancelText?: string; +} + +const ConfirmModal = ({ contents, closeModal, handleClickConfirmButton, confirmText, cancelText }: Props) => { + useEffect(() => { + const handleEscapeKeyDown = (e: KeyboardEvent) => { + if (e.key === 'Escape') closeModal(); + }; + + window.addEventListener('keydown', handleEscapeKeyDown); + + return () => { + window.removeEventListener('keydown', handleEscapeKeyDown); + }; + }, []); + + return ( + <Modal width="495px" height="211px" closeModal={closeModal}> + <S.ConfirmModalContainer> + <S.ConfirmMessage>{contents}</S.ConfirmMessage> + <S.ButtonContainer> + <Button colorTheme="GRAY" width="134px" height="35px" fontSize="16px" fontWeight={700} onClick={closeModal}> + {cancelText || '취소'} + </Button> + <Button + colorTheme="WHITE" + width="134px" + height="35px" + fontSize="16px" + fontWeight={700} + onClick={handleClickConfirmButton} + > + {confirmText || '확인'} + </Button> + </S.ButtonContainer> + </S.ConfirmModalContainer> + </Modal> + ); +}; + +export default ConfirmModal; + +const S = { + ConfirmModalContainer: styled.div` + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + + width: 100%; + height: 100%; + `, + + ConfirmMessage: styled.p` + margin-bottom: 40px; + + font-size: 18px; + `, + + ButtonContainer: styled.div` + display: flex; + gap: 20px; + `, +}; diff --git a/frontend/src/components/InputBox/InputBox.tsx b/frontend/src/components/InputBox/InputBox.tsx new file mode 100644 index 000000000..127747fd4 --- /dev/null +++ b/frontend/src/components/InputBox/InputBox.tsx @@ -0,0 +1,76 @@ +import React, { useRef } from 'react'; +import styled from 'styled-components'; + +interface Props extends React.HTMLProps<HTMLInputElement> { + inputTextState: string; + handleInputTextState: (e: React.ChangeEvent<HTMLInputElement>) => void; + fontSize?: string | number; + fontWeight?: string | number; + maxLengthFontSize?: string | number; + autoFocus?: boolean; +} + +const InputBox = ({ + inputTextState, + maxLength, + width, + height, + fontSize, + fontWeight, + maxLengthFontSize, + autoFocus, + handleInputTextState, + ...rest +}: Props) => { + return ( + <S.InputContainer $fontSize={fontSize} $fontWeight={fontWeight} $width={width} $height={height}> + <S.InputBox onChange={handleInputTextState} maxLength={maxLength} autoFocus={autoFocus} {...rest} /> + {maxLength && ( + <S.InputTextLength $fontsize={maxLengthFontSize}> + {inputTextState.length ?? 0} / {maxLength} + </S.InputTextLength> + )} + </S.InputContainer> + ); +}; + +export default InputBox; + +const S = { + InputContainer: styled.div<{ + $width?: string | number; + $height?: string | number; + $fontSize?: string | number; + $fontWeight?: string | number; + }>` + display: flex; + justify-content: space-between; + + width: ${({ $width }) => $width || '400px'}; + height: ${({ $height }) => $height || '36px'}; + gap: 20px; + + font-size: ${({ $fontSize }) => $fontSize || '18px'}; + font-weight: ${({ $fontWeight }) => $fontWeight || '400'}; + `, + + InputTextLength: styled.div<{ $fontsize?: string | number }>` + display: flex; + align-items: center; + + font-size: ${({ $fontsize }) => $fontsize || '18px'}; + color: var(--gray-400); + `, + + InputBox: styled.input` + flex: 1; + + border-bottom: 1 solid var(--gray-400); + background-color: white; + border: transparent; + + &:focus { + outline: 0; + } + `, +}; diff --git a/frontend/src/components/ListFilter/ListFilter.tsx b/frontend/src/components/ListFilter/ListFilter.tsx new file mode 100644 index 000000000..52264aef2 --- /dev/null +++ b/frontend/src/components/ListFilter/ListFilter.tsx @@ -0,0 +1,91 @@ +import { ListSelectOption } from '@/types/select'; +import React from 'react'; +import styled, { css, keyframes } from 'styled-components'; + +interface Props { + options: ListSelectOption[]; + selectOption: (value: string | number) => void; + width?: string; +} + +const ListFilter = ({ options, selectOption, width }: Props) => { + const makeHandleClickOption = (value: string | number) => () => { + if (options.filter((option) => option.value === value).length === 0) return; + + selectOption(value); + }; + + return ( + <S.FilterContainer> + <S.FilterList $width={width}> + {options.map((option) => ( + <S.FilterItem> + <S.FilterButton + key={option.value} + onClick={makeHandleClickOption(option.value)} + $isSelected={option.selected} + > + {option.label} + </S.FilterButton> + </S.FilterItem> + ))} + </S.FilterList> + </S.FilterContainer> + ); +}; + +export default ListFilter; + +const appear = keyframes` + 0% { + transform-origin:left; + transform: scaleX(0); + } + 100% { + transform-origin:left; + transform: scaleX(1); + } +`; + +const underLine = css` + content: ''; + margin-top: 5px; + height: 3px; + width: calc(100% + 10px); + border-radius: 1px; + + background-color: var(--baton-red); + + animation: 0.3s ease-in ${appear}; +`; + +const S = { + FilterContainer: styled.div``, + + FilterList: styled.ul<{ $width?: string }>` + display: flex; + justify-content: space-between; + + width: ${({ $width }) => $width ?? '920px'}; + `, + + FilterItem: styled.li` + width: 150px; + `, + + FilterButton: styled.button<{ $isSelected: boolean }>` + display: flex; + flex-direction: column; + align-items: center; + + background-color: transparent; + + font-size: 26px; + font-weight: 700; + color: ${({ $isSelected }) => ($isSelected ? 'var(--baton-red)' : 'var(--gray-700)')}; + + &::after { + ${({ $isSelected }) => ($isSelected ? underLine : null)} + } + `, +}; diff --git a/frontend/src/components/MyPage/MyPagePostButton/MyPagePostButton.tsx b/frontend/src/components/MyPage/MyPagePostButton/MyPagePostButton.tsx new file mode 100644 index 000000000..3feb1de2a --- /dev/null +++ b/frontend/src/components/MyPage/MyPagePostButton/MyPagePostButton.tsx @@ -0,0 +1,116 @@ +import { patchRequest } from '@/api/fetch'; +import Button from '@/components/common/Button/Button'; +import { ERROR_DESCRIPTION, ERROR_TITLE, TOAST_COMPLETION_MESSAGE, TOAST_ERROR_MESSAGE } from '@/constants/message'; +import { ToastContext } from '@/contexts/ToastContext'; +import { usePageRouter } from '@/hooks/usePageRouter'; +import { useToken } from '@/hooks/useToken'; +import { ReviewStatus } from '@/types/runnerPost'; +import React, { useContext, useMemo } from 'react'; + +interface Props { + runnerPostId: number; + reviewStatus: ReviewStatus; + isRunner: boolean; + supporterId?: number; +} + +const MyPagePostButton = ({ runnerPostId, reviewStatus, isRunner, supporterId }: Props) => { + const { goToMyPage, goToSupportSelectPage, goToSupporterFeedbackPage } = usePageRouter(); + const { getToken } = useToken(); + const { showCompletionToast, showErrorToast } = useContext(ToastContext); + + const token = useMemo(() => getToken()?.value, [getToken]); + + const cancelReview = () => { + if (!token) { + showErrorToast(TOAST_ERROR_MESSAGE.NO_TOKEN); + return; + } + + patchRequest(`/posts/runner/${runnerPostId}/cancelation`, token) + .then(() => { + showCompletionToast(TOAST_COMPLETION_MESSAGE.REVIEW_CANCEL); + + setTimeout(window.location.reload, 2000); + }) + .catch((error: Error) => showErrorToast({ description: error.message, title: ERROR_TITLE.REQUEST })); + }; + + const finishReview = () => { + if (!token) { + showErrorToast(TOAST_ERROR_MESSAGE.NO_TOKEN); + return; + } + + patchRequest(`/posts/runner/${runnerPostId}/done`, token) + .then(() => { + showCompletionToast(TOAST_COMPLETION_MESSAGE.REVIEW_COMPETE); + setTimeout(window.location.reload, 2000); + }) + .catch((error: Error) => showErrorToast({ description: error.message, title: ERROR_TITLE.REQUEST })); + }; + + const handleClickCancelReviewButton = (e: React.MouseEvent<HTMLButtonElement>) => { + e.stopPropagation(); + + cancelReview(); + }; + + const handleClickFinishButton = (e: React.MouseEvent<HTMLButtonElement>) => { + e.stopPropagation(); + + finishReview(); + }; + + const handleClickSupportSelectButton = (e: React.MouseEvent<HTMLButtonElement>) => { + e.stopPropagation(); + goToSupportSelectPage(runnerPostId); + }; + + const handleClickSupportFeedbackButton = (e: React.MouseEvent<HTMLButtonElement>) => { + e.stopPropagation(); + if (!supporterId) { + showErrorToast({ title: ERROR_TITLE.ERROR, description: ERROR_DESCRIPTION.NO_SUPPORTER }); + return; + } + + goToSupporterFeedbackPage(runnerPostId, supporterId); + }; + + switch (reviewStatus) { + case 'NOT_STARTED': + return ( + <Button + colorTheme="WHITE" + fontWeight={700} + width="180px" + height="40px" + onClick={isRunner ? handleClickSupportSelectButton : handleClickCancelReviewButton} + > + {isRunner ? '서포터 선택하기' : '리뷰 제안 취소'} + </Button> + ); + case 'IN_PROGRESS': + return isRunner ? null : ( + <Button colorTheme="WHITE" fontWeight={700} width="180px" height="40px" onClick={handleClickFinishButton}> + 리뷰 완료 + </Button> + ); + case 'DONE': + return isRunner ? ( + <Button + colorTheme="WHITE" + fontWeight={700} + width="180px" + height="40px" + onClick={handleClickSupportFeedbackButton} + > + 후기 작성 + </Button> + ) : null; + default: + return null; + } +}; + +export default MyPagePostButton; diff --git a/frontend/src/components/MyPage/MyPagePostItem/MyPagePostItem.tsx b/frontend/src/components/MyPage/MyPagePostItem/MyPagePostItem.tsx new file mode 100644 index 000000000..894ccae8c --- /dev/null +++ b/frontend/src/components/MyPage/MyPagePostItem/MyPagePostItem.tsx @@ -0,0 +1,162 @@ +import Label from '@/components/common/Label/Label'; +import { REVIEW_STATUS_LABEL_TEXT } from '@/constants'; +import { usePageRouter } from '@/hooks/usePageRouter'; +import React from 'react'; +import styled from 'styled-components'; +import eyeIcon from '@/assets/eye-icon.svg'; +import applicantIcon from '@/assets/applicant-icon.svg'; +import { MyPagePost } from '@/types/myPage'; +import MyPagePostButton from '../MyPagePostButton/MyPagePostButton'; + +interface Props extends MyPagePost { + isRunner: boolean; +} + +const MyPagePostItem = ({ + runnerPostId, + title, + deadline, + reviewStatus, + tags, + watchedCount, + applicantCount, + isRunner, + supporterId, +}: Props) => { + const { goToRunnerPostPage } = usePageRouter(); + + const handlePostClick = () => { + goToRunnerPostPage(runnerPostId); + }; + + return ( + <S.RunnerPostItemContainer onClick={handlePostClick}> + <S.LeftSideContainer> + <S.PostTitle>{title}</S.PostTitle> + <S.DeadLineContainer> + <S.DeadLine>{deadline} 까지</S.DeadLine> + <Label + colorTheme={reviewStatus === 'NOT_STARTED' ? 'WHITE' : reviewStatus === 'IN_PROGRESS' ? 'RED' : 'GRAY'} + > + {REVIEW_STATUS_LABEL_TEXT[reviewStatus]} + </Label> + </S.DeadLineContainer> + <S.TagContainer> + {tags.map((tag, index) => ( + <S.Tag key={index}>#{tag}</S.Tag> + ))} + </S.TagContainer> + </S.LeftSideContainer> + <S.RightSideContainer> + <S.ChatViewContainer> + <S.statisticsContainer> + <S.statisticsImage src={eyeIcon} /> + <S.statisticsText>{watchedCount}</S.statisticsText> + <S.statisticsImage src={applicantIcon} /> + <S.statisticsText>{applicantCount}</S.statisticsText> + </S.statisticsContainer> + </S.ChatViewContainer> + <MyPagePostButton + runnerPostId={runnerPostId} + isRunner={isRunner} + reviewStatus={reviewStatus} + supporterId={supporterId} + /> + </S.RightSideContainer> + </S.RunnerPostItemContainer> + ); +}; + +export default MyPagePostItem; + +const S = { + RunnerPostItemContainer: styled.li` + display: flex; + justify-content: space-between; + + width: 1200px; + height: 206px; + padding: 35px 40px; + + border: 0.5px solid var(--gray-500); + border-radius: 12px; + box-shadow: 1px 2px 3px rgba(0, 0, 0, 0.2); + + cursor: pointer; + `, + + PostTitle: styled.p` + margin-bottom: 15px; + + font-size: 28px; + font-weight: 700; + `, + + DeadLineContainer: styled.div` + display: flex; + align-items: baseline; + gap: 10px; + `, + + DeadLine: styled.p` + margin-bottom: 60px; + + color: var(--gray-600); + `, + + TagContainer: styled.div` + & span { + margin-right: 10px; + + font-size: 14px; + color: var(--gray-600); + } + `, + Tag: styled.span``, + + LeftSideContainer: styled.div``, + + RightSideContainer: styled.div` + display: flex; + flex-direction: column; + justify-content: end; + gap: 15px; + + & button:hover { + transition: all 0.3s ease; + background-color: var(--baton-red); + color: var(--white-color); + } + `, + + ChatViewContainer: styled.div` + display: flex; + justify-content: end; + + gap: 10px; + + font-size: 12px; + `, + + statisticsContainer: styled.div` + display: flex; + align-items: center; + gap: 5px; + + margin-bottom: auto; + + & > p { + color: #a4a4a4; + } + `, + + statisticsImage: styled.img` + width: 20px; + + margin-left: 8px; + `, + + statisticsText: styled.p` + font-size: 14px; + `, +}; diff --git a/frontend/src/components/MyPage/MyPagePostList/MyPagePostList.tsx b/frontend/src/components/MyPage/MyPagePostList/MyPagePostList.tsx new file mode 100644 index 000000000..4fc163b73 --- /dev/null +++ b/frontend/src/components/MyPage/MyPagePostList/MyPagePostList.tsx @@ -0,0 +1,33 @@ +import React from 'react'; +import { styled } from 'styled-components'; +import { GetMyPagePostResponse, MyPagePost } from '@/types/myPage'; +import MyPagePostItem from '../MyPagePostItem/MyPagePostItem'; + +interface Props { + filteredPostList: MyPagePost[]; + isRunner: boolean; +} + +const MyPagePostList = ({ filteredPostList, isRunner }: Props) => { + if (filteredPostList?.length === 0) return <p>게시글 정보가 없습니다.</p>; + + return ( + <S.RunnerPostWrapper> + {filteredPostList?.map((item: MyPagePost) => ( + <MyPagePostItem key={item.runnerPostId} {...item} isRunner={isRunner} /> + ))} + </S.RunnerPostWrapper> + ); +}; + +export default MyPagePostList; + +const S = { + RunnerPostWrapper: styled.ul` + display: flex; + flex-direction: column; + align-items: center; + + gap: 30px; + `, +}; diff --git a/frontend/src/components/PostTag/PostTag.tsx b/frontend/src/components/PostTag/PostTag.tsx new file mode 100644 index 000000000..efbb6d986 --- /dev/null +++ b/frontend/src/components/PostTag/PostTag.tsx @@ -0,0 +1,21 @@ +import React from 'react'; +import { styled } from 'styled-components'; + +interface Props { + tag: string; +} + +function PostTag({ tag }: Props) { + return <S.TagName>#{tag}</S.TagName>; +} + +export default PostTag; + +const S = { + TagName: styled.li` + float: left; + + font-size: 18px; + color: var(--gray-500); + `, +}; diff --git a/frontend/src/components/PostTagList/PostTagList.tsx b/frontend/src/components/PostTagList/PostTagList.tsx new file mode 100644 index 000000000..37411b90a --- /dev/null +++ b/frontend/src/components/PostTagList/PostTagList.tsx @@ -0,0 +1,29 @@ +import React from 'react'; +import { styled } from 'styled-components'; +import PostTag from '../PostTag/PostTag'; + +interface Props { + tags: string[]; +} + +function PostTagList({ tags }: Props) { + return ( + <S.List> + {tags.map((tag) => ( + <PostTag key={tag} tag={tag} /> + ))} + </S.List> + ); +} + +export default PostTagList; + +const S = { + List: styled.ul` + list-style: none; + + li:not(:last-child) { + margin-right: 10px; + } + `, +}; diff --git a/frontend/src/components/ReviewTypeButton/ReviewTypeButton.tsx b/frontend/src/components/ReviewTypeButton/ReviewTypeButton.tsx new file mode 100644 index 000000000..07060030e --- /dev/null +++ b/frontend/src/components/ReviewTypeButton/ReviewTypeButton.tsx @@ -0,0 +1,148 @@ +import React, { useRef } from 'react'; +import GreatFeedbackIcon from '../../assets/feedback-icon/great-feedback-icon.svg'; +import GoodFeedbackIcon from '../../assets/feedback-icon/good-feedback-icon.svg'; +import BadFeedbackIcon from '../../assets/feedback-icon/bad-feedback-icon.svg'; +import GreatFeedbackGrayIcon from '../../assets/feedback-icon/great-feedback-gray-icon.svg'; +import GoodFeedbackGrayIcon from '../../assets/feedback-icon/good-feedback-gray-icon.svg'; +import BadFeedbackGrayIcon from '../../assets/feedback-icon/bad-feedback-gray-icon.svg'; +import { ReviewType } from '@/types/feedback'; +import { styled } from 'styled-components'; + +interface Props extends React.HTMLProps<HTMLImageElement> { + isSelected: boolean; + value: ReviewType; + label?: string; + selectReviewType?: (value: ReviewType) => void; +} + +const ReviewTypeButton = ({ isSelected, value, label, selectReviewType, ...rest }: Props) => { + const iconRef = useRef<HTMLImageElement>(null); + + const handleClick = () => { + if (!selectReviewType) return; + + selectReviewType(value); + }; + + const handleMouseHover = (e: React.PointerEvent<HTMLButtonElement>) => { + if (!iconRef.current) return; + + switch (value) { + case 'BAD': + iconRef.current.src = BadFeedbackIcon; + break; + case 'GOOD': + iconRef.current.src = GoodFeedbackIcon; + break; + case 'GREAT': + iconRef.current.src = GreatFeedbackIcon; + } + }; + + const handleMouseLeave = (e: React.PointerEvent<HTMLButtonElement>) => { + if (!iconRef.current) return; + switch (value) { + case 'BAD': + iconRef.current.src = BadFeedbackGrayIcon; + break; + case 'GOOD': + iconRef.current.src = GoodFeedbackGrayIcon; + break; + case 'GREAT': + iconRef.current.src = GreatFeedbackGrayIcon; + } + }; + + if (isSelected) { + switch (value) { + case 'BAD': + return ( + <S.ReviewTypeItem> + <S.Button> + <img src={BadFeedbackIcon} {...rest} /> + {label && <S.ReviewTypeLabel $isSelect={isSelected}>{label}</S.ReviewTypeLabel>} + </S.Button> + </S.ReviewTypeItem> + ); + case 'GOOD': + return ( + <S.ReviewTypeItem> + <S.Button> + <img src={GoodFeedbackIcon} {...rest} /> + {label && <S.ReviewTypeLabel $isSelect={isSelected}>{label}</S.ReviewTypeLabel>} + </S.Button> + </S.ReviewTypeItem> + ); + case 'GREAT': + return ( + <S.ReviewTypeItem> + <S.Button> + <img src={GreatFeedbackIcon} {...rest} /> + {label && <S.ReviewTypeLabel $isSelect={isSelected}>{label}</S.ReviewTypeLabel>} + </S.Button> + </S.ReviewTypeItem> + ); + default: + return null; + } + } + + switch (value) { + case 'BAD': + return ( + <S.ReviewTypeItem> + <S.Button onMouseOver={handleMouseHover} onMouseLeave={handleMouseLeave} onClick={handleClick}> + <img src={BadFeedbackGrayIcon} {...rest} ref={iconRef} /> + {label && <S.ReviewTypeLabel $isSelect={isSelected}>{label}</S.ReviewTypeLabel>} + </S.Button> + </S.ReviewTypeItem> + ); + case 'GOOD': + return ( + <S.ReviewTypeItem> + <S.Button onMouseOver={handleMouseHover} onMouseLeave={handleMouseLeave} onClick={handleClick}> + <img src={GoodFeedbackGrayIcon} {...rest} ref={iconRef} /> + {label && <S.ReviewTypeLabel $isSelect={isSelected}>{label}</S.ReviewTypeLabel>} + </S.Button> + </S.ReviewTypeItem> + ); + case 'GREAT': + return ( + <S.ReviewTypeItem> + <S.Button onMouseOver={handleMouseHover} onMouseLeave={handleMouseLeave} onClick={handleClick}> + <img src={GreatFeedbackGrayIcon} {...rest} ref={iconRef} /> + {label && <S.ReviewTypeLabel $isSelect={isSelected}>{label}</S.ReviewTypeLabel>} + </S.Button> + </S.ReviewTypeItem> + ); + default: + return null; + } +}; + +export default ReviewTypeButton; + +const S = { + ReviewTypeItem: styled.li``, + + Button: styled.button` + display: flex; + flex-direction: column; + align-items: center; + gap: 15px; + + background-color: transparent; + + &:hover { + & > div { + color: var(--gray-800); + } + } + `, + + ReviewTypeLabel: styled.div<{ $isSelect: boolean }>` + font-size: 18px; + font-weight: 600; + color: ${({ $isSelect }) => ($isSelect ? 'var(--gray-800)' : 'var(--gray-400)')}; + `, +}; diff --git a/frontend/src/components/RunnerPost/RunnerPostItem/RunnerPostItem.tsx b/frontend/src/components/RunnerPost/RunnerPostItem/RunnerPostItem.tsx new file mode 100644 index 000000000..23d14787a --- /dev/null +++ b/frontend/src/components/RunnerPost/RunnerPostItem/RunnerPostItem.tsx @@ -0,0 +1,168 @@ +import React from 'react'; +import { styled } from 'styled-components'; +import { usePageRouter } from '@/hooks/usePageRouter'; +import Avatar from '@/components/common/Avatar/Avatar'; +import { RunnerPost } from '@/types/runnerPost'; +import Label from '@/components/common/Label/Label'; +import { REVIEW_STATUS_LABEL_TEXT } from '@/constants'; +import eyeIcon from '@/assets/eye-icon.svg'; +import applicantIcon from '@/assets/applicant-icon.svg'; + +const RunnerPostItem = ({ + runnerPostData: { runnerPostId, title, deadline, tags, runnerProfile, watchedCount, applicantCount, reviewStatus }, +}: { + runnerPostData: RunnerPost; +}) => { + const { goToRunnerPostPage } = usePageRouter(); + + const handlePostClick = () => { + goToRunnerPostPage(runnerPostId); + }; + + return ( + <S.RunnerPostItemContainer onClick={handlePostClick}> + <S.LeftSideContainer> + <S.PostTitle>{title}</S.PostTitle> + <S.DeadLineContainer> + <S.DeadLine>{deadline.replace('T', ' ')} 까지</S.DeadLine> + <Label + colorTheme={reviewStatus === 'NOT_STARTED' ? 'WHITE' : reviewStatus === 'IN_PROGRESS' ? 'RED' : 'GRAY'} + > + {REVIEW_STATUS_LABEL_TEXT[reviewStatus]} + </Label> + </S.DeadLineContainer> + <S.TagContainer> + {tags.map((tag, index) => ( + <S.Tag key={index}>#{tag}</S.Tag> + ))} + </S.TagContainer> + </S.LeftSideContainer> + <S.RightSideContainer> + {runnerProfile ? ( + <> + <S.ProfileContainer> + <Avatar width="50px" height="50px" imageUrl={runnerProfile.imageUrl} /> + <S.ProfileName>{runnerProfile.name}</S.ProfileName> + </S.ProfileContainer> + </> + ) : null} + <S.ChatViewContainer> + <S.statisticsContainer> + <S.statisticsImage src={eyeIcon} /> + <S.statisticsText>{watchedCount}</S.statisticsText> + <S.statisticsImage src={applicantIcon} /> + <S.statisticsText>{applicantCount}</S.statisticsText> + </S.statisticsContainer> + </S.ChatViewContainer> + </S.RightSideContainer> + </S.RunnerPostItemContainer> + ); +}; + +export default RunnerPostItem; + +const S = { + RunnerPostItemContainer: styled.li` + display: flex; + justify-content: space-between; + + width: 1200px; + height: 206px; + padding: 35px 40px; + + border: 0.5px solid var(--gray-500); + border-radius: 12px; + box-shadow: 1px 2px 3px rgba(0, 0, 0, 0.2); + + cursor: pointer; + + &:hover { + transition: all 0.3s ease; + transform: scale(1.015); + outline: 1.5px solid var(--baton-red); + } + `, + + PostTitle: styled.p` + margin-bottom: 15px; + + font-size: 28px; + font-weight: 700; + `, + + DeadLineContainer: styled.div` + display: flex; + align-items: baseline; + gap: 10px; + `, + + DeadLine: styled.p` + margin-bottom: 60px; + + color: var(--gray-600); + `, + + TagContainer: styled.div` + & span { + margin-right: 10px; + + font-size: 14px; + color: var(--gray-600); + } + `, + Tag: styled.span``, + + LeftSideContainer: styled.div``, + RightSideContainer: styled.div` + display: flex; + flex-direction: column; + align-items: end; + justify-content: space-between; + `, + + ProfileContainer: styled.div` + display: flex; + flex-direction: column; + align-items: end; + + margin-bottom: 30px; + gap: 10px; + `, + + ProfileName: styled.p` + min-width: 50px; + + font-size: 14px; + text-align: center; + `, + + ChatViewContainer: styled.div` + display: flex; + + gap: 10px; + + font-size: 12px; + `, + + statisticsContainer: styled.div` + display: flex; + align-items: center; + gap: 5px; + + margin-bottom: auto; + + & > p { + color: #a4a4a4; + } + `, + + statisticsImage: styled.img` + width: 20px; + + margin-left: 8px; + `, + + statisticsText: styled.p` + font-size: 14px; + `, +}; diff --git a/frontend/src/components/RunnerPost/RunnerPostList/RunnerPostList.tsx b/frontend/src/components/RunnerPost/RunnerPostList/RunnerPostList.tsx new file mode 100644 index 000000000..36b0c992d --- /dev/null +++ b/frontend/src/components/RunnerPost/RunnerPostList/RunnerPostList.tsx @@ -0,0 +1,30 @@ +import React from 'react'; +import { styled } from 'styled-components'; +import RunnerPostItem from '../RunnerPostItem/RunnerPostItem'; +import { RunnerPost } from '@/types/runnerPost'; + +interface Props { + posts: RunnerPost[]; +} + +const RunnerPostList = ({ posts }: Props) => { + return ( + <S.RunnerPostWrapper> + {posts.map((runnerPostData) => ( + <RunnerPostItem key={runnerPostData.runnerPostId} runnerPostData={runnerPostData} /> + ))} + </S.RunnerPostWrapper> + ); +}; + +export default RunnerPostList; + +const S = { + RunnerPostWrapper: styled.ul` + display: flex; + flex-direction: column; + align-items: center; + + gap: 30px; + `, +}; diff --git a/frontend/src/components/SendMessageModal/SendMessageModal.tsx b/frontend/src/components/SendMessageModal/SendMessageModal.tsx new file mode 100644 index 000000000..a2f14c4d7 --- /dev/null +++ b/frontend/src/components/SendMessageModal/SendMessageModal.tsx @@ -0,0 +1,69 @@ +import React from 'react'; +import { styled } from 'styled-components'; +import Modal from '../common/Modal/Modal'; +import Button from '../common/Button/Button'; +import TextArea from '../Textarea/Textarea'; + +interface Props { + messageState: string; + handleChangeMessage: (e: React.ChangeEvent<HTMLTextAreaElement>) => void; + placeholder: string; + closeModal: () => void; + handleClickSendButton: () => void; +} + +const SendMessageModal = ({ + messageState, + handleChangeMessage, + placeholder, + closeModal, + handleClickSendButton, +}: Props) => { + return ( + <Modal width="900px" height="500px" closeModal={closeModal}> + <S.SendMessageModalContainer> + <TextArea + width="100%" + height="100%" + fontSize="28px" + lineHeight={1.2} + maxLength={500} + padding="0" + placeholder={placeholder} + handleInputTextState={handleChangeMessage} + inputTextState={messageState} + /> + <S.ButtonContainer> + <Button colorTheme="GRAY" fontWeight={700} onClick={closeModal}> + 취소 + </Button> + <Button colorTheme="WHITE" fontWeight={700} onClick={handleClickSendButton}> + 전송 + </Button> + </S.ButtonContainer> + </S.SendMessageModalContainer> + </Modal> + ); +}; + +export default SendMessageModal; + +const S = { + SendMessageModalContainer: styled.div` + display: flex; + flex-direction: column; + + padding: 12px; + + width: 100%; + height: 100%; + `, + + ButtonContainer: styled.div` + display: flex; + justify-content: center; + gap: 20px; + + margin-top: auto; + `, +}; diff --git a/frontend/src/components/SupporterCard/SupporterCardItem/SupporterCardItem.tsx b/frontend/src/components/SupporterCard/SupporterCardItem/SupporterCardItem.tsx new file mode 100644 index 000000000..4b4f5f746 --- /dev/null +++ b/frontend/src/components/SupporterCard/SupporterCardItem/SupporterCardItem.tsx @@ -0,0 +1,188 @@ +import { patchRequest } from '@/api/fetch'; +import ConfirmModal from '@/components/ConfirmModal/ConfirmModal'; +import TechLabel from '@/components/TechLabel/TechLabel'; +import Avatar from '@/components/common/Avatar/Avatar'; +import Button from '@/components/common/Button/Button'; +import { ERROR_DESCRIPTION, ERROR_TITLE, TOAST_COMPLETION_MESSAGE } from '@/constants/message'; +import { ToastContext } from '@/contexts/ToastContext'; +import { usePageRouter } from '@/hooks/usePageRouter'; +import { useToken } from '@/hooks/useToken'; +import { Candidate } from '@/types/supporterCandidate'; +import React, { useContext, useState } from 'react'; +import { useParams } from 'react-router-dom'; +import { styled } from 'styled-components'; + +interface Props { + supporter: Candidate; +} + +const SupporterCardItem = ({ supporter }: Props) => { + const { runnerPostId } = useParams(); + + const { getToken } = useToken(); + const { goToMyPage, goToSupporterProfilePage } = usePageRouter(); + + const { showErrorToast, showCompletionToast } = useContext(ToastContext); + + const [isModalOpen, setIsModalOpen] = useState<boolean>(false); + + const openModal = () => { + setIsModalOpen(true); + }; + + const closeModal = () => { + setIsModalOpen(false); + }; + + const viewProfile = () => { + goToSupporterProfilePage(supporter.supporterId); + }; + + const selectSupporter = () => { + const token = getToken()?.value; + if (!token) return; + + const body = JSON.stringify({ supporterId: supporter.supporterId }); + + patchRequest(`/posts/runner/${runnerPostId}/supporters`, token, body) + .then(async () => { + showCompletionToast(TOAST_COMPLETION_MESSAGE.SUPPORTER_SELECT); + + goToMyPage(); + }) + .catch((error: Error) => + showErrorToast({ + description: error instanceof Error ? error.message : ERROR_DESCRIPTION.UNEXPECTED, + title: ERROR_TITLE.REQUEST, + }), + ); + }; + + return ( + <S.SupporterCardItemContainer> + <S.ProfileContainer> + <Avatar imageUrl={supporter.imageUrl} width={'80px'} height={'80px'} /> + <S.InfoContainer> + <S.Name>{supporter.name}</S.Name> + <S.Company>{supporter.company}</S.Company> + <S.TechStackContainer> + {supporter.technicalTags.map((tag) => ( + <TechLabel key={tag} tag={tag} /> + ))} + </S.TechStackContainer> + </S.InfoContainer> + <S.ReviewCountContainer> + 완료된 리뷰 + <S.ReviewCount> {supporter.reviewCount}</S.ReviewCount> + </S.ReviewCountContainer> + </S.ProfileContainer> + <S.MessageContainer> + 📮 남긴 메시지 + <S.Message> {supporter.message}</S.Message> + </S.MessageContainer> + <S.ButtonContainer> + <Button colorTheme="BLACK" width="94px" height="35px" fontSize="14px" fontWeight={700} onClick={viewProfile}> + 프로필 보기 + </Button> + <Button colorTheme="WHITE" width="94px" height="35px" fontSize="14px" fontWeight={700} onClick={openModal}> + 선택하기 + </Button> + </S.ButtonContainer> + {isModalOpen && ( + <ConfirmModal + contents={`정말 ${supporter.name}님을 서포터로 선택하시겠습니까?`} + closeModal={closeModal} + handleClickConfirmButton={selectSupporter} + /> + )} + </S.SupporterCardItemContainer> + ); +}; + +export default SupporterCardItem; + +const S = { + SupporterCardItemContainer: styled.div` + display: flex; + flex-direction: column; + + height: 500px; + + padding: 30px 40px 40px 40px; + border: 1px solid var(--gray-500); + border-radius: 10px; + box-shadow: 1px 4px 5px rgba(0, 0, 0, 0.2); + `, + + ProfileContainer: styled.div` + display: flex; + flex-wrap: wrap column; + gap: 20px; + + height: 100px; + `, + + InfoContainer: styled.div` + display: flex; + flex-direction: column; + gap: 10px; + + height: 100%; + `, + + Name: styled.div` + font-size: 20px; + font-weight: 700; + `, + + Company: styled.div` + font-size: 18px; + `, + + ReviewCountContainer: styled.div` + margin-left: auto; + `, + + ReviewCount: styled.span` + font-weight: 700; + `, + + TechStackContainer: styled.div` + display: flex; + gap: 4px; + `, + + MessageContainer: styled.div` + display: flex; + flex-direction: column; + gap: 15px; + + font-size: 18px; + `, + + Message: styled.div` + height: 220px; + + padding: 20px; + border-radius: 5px; + + background-color: var(--gray-100); + + font-size: 16px; + line-height: 26px; + + overflow-y: scroll; + + &::-webkit-scrollbar { + display: none; + } + `, + + ButtonContainer: styled.div` + display: flex; + justify-content: center; + gap: 30px; + + margin-top: auto; + `, +}; diff --git a/frontend/src/components/SupporterCard/SupporterCartList/SupporterCardList.tsx b/frontend/src/components/SupporterCard/SupporterCartList/SupporterCardList.tsx new file mode 100644 index 000000000..7136aa655 --- /dev/null +++ b/frontend/src/components/SupporterCard/SupporterCartList/SupporterCardList.tsx @@ -0,0 +1,59 @@ +import { Candidate, GetSupporterCandidateResponse } from '@/types/supporterCandidate'; +import React, { useContext, useEffect, useState } from 'react'; +import { styled } from 'styled-components'; +import SupporterCardItem from '../SupporterCardItem/SupporterCardItem'; +import { useParams } from 'react-router-dom'; +import { useToken } from '@/hooks/useToken'; +import { getRequest } from '@/api/fetch'; +import { ToastContext } from '@/contexts/ToastContext'; +import { ERROR_DESCRIPTION, ERROR_TITLE } from '@/constants/message'; + +const SupporterCardList = () => { + const { runnerPostId } = useParams(); + + const { getToken } = useToken(); + + const { showErrorToast } = useContext(ToastContext); + + const [supporterList, setSupporterList] = useState<Candidate[]>([]); + + useEffect(() => { + getSupporterList(); + }, []); + + const getSupporterList = async () => { + const token = getToken()?.value; + if (!token) return; + + getRequest(`/posts/runner/${runnerPostId}/supporters`, token) + .then(async (response) => { + const data = await response.json(); + setSupporterList(data.data); + }) + .catch((error: Error) => { + const description = error instanceof Error ? error.message : ERROR_DESCRIPTION.UNEXPECTED; + showErrorToast({ title: ERROR_TITLE.REQUEST, description }); + }); + }; + + return ( + <S.SupporterCardListContainer> + {supporterList.map((supporter) => ( + <SupporterCardItem key={supporter.supporterId} supporter={supporter} /> + ))} + </S.SupporterCardListContainer> + ); +}; + +export default SupporterCardList; + +const S = { + SupporterCardListContainer: styled.ul` + display: grid; + grid-template-columns: repeat(2, 1fr); + row-gap: 80px; + column-gap: 40px; + + width: 100%; + `, +}; diff --git a/frontend/src/components/TagInput/TagInput.tsx b/frontend/src/components/TagInput/TagInput.tsx new file mode 100644 index 000000000..17179d6b1 --- /dev/null +++ b/frontend/src/components/TagInput/TagInput.tsx @@ -0,0 +1,130 @@ +import React, { useRef, useState } from 'react'; +import { styled } from 'styled-components'; +import Tag from '../common/Tag/Tag'; + +interface Props { + tags: string[]; + pushTag: (tag: string) => void; + popTag: (tag?: string) => void; + width?: string | number; +} + +const TagInput = ({ tags, pushTag, popTag, width }: Props) => { + const inputRef = useRef<HTMLInputElement>(null); + const [isFocus, setIsFocus] = useState(false); + + const onkeyDownInput = (e: React.KeyboardEvent<HTMLInputElement>) => { + if (e.nativeEvent.isComposing) return; + + if (!inputRef.current) return; + + if (e.key === 'Backspace' && !inputRef.current.value) { + popTag(); + } + + if (!inputRef.current.value.trim()) { + inputRef.current.value = ''; + + if (e.key === 'Enter') { + e.preventDefault(); + } + + return; + } + + if (e.key === 'Enter') { + e.preventDefault(); + const newTag = inputRef.current.value.trim(); + pushTag(newTag); + inputRef.current.value = ''; + } + }; + + const onFocus = () => { + setIsFocus(true); + }; + + const outFocus = () => { + setIsFocus(false); + }; + + return ( + <S.TagInputContainer $width={width}> + <S.TagList> + {tags.map((item) => ( + <S.TagItem key={item}> + <Tag + onClick={() => { + popTag(item); + }} + > + {item} + </Tag> + </S.TagItem> + ))} + <S.InputBoxContainer> + <S.InputBox + onKeyDown={onkeyDownInput} + ref={inputRef} + placeholder="태그를 입력해주세요" + onFocus={onFocus} + onBlur={outFocus} + /> + {isFocus && <S.InputDescription>엔터를 입력하여 태그를 등록할 수 있습니다.</S.InputDescription>} + </S.InputBoxContainer> + </S.TagList> + </S.TagInputContainer> + ); +}; + +export default TagInput; + +const S = { + TagInputContainer: styled.div<{ $width?: string | number }>` + display: flex; + align-items: center; + + gap: 15px; + width: ${({ $width }) => $width || '500px'}; + + font-size: 18px; + `, + + InputBox: styled.input` + height: 36px; + + border: transparent; + + &:focus { + outline: 0; + } + `, + + TagList: styled.ul` + display: flex; + flex-wrap: wrap; + + gap: 10px; + `, + + TagItem: styled.li``, + + InputBoxContainer: styled.div` + position: relative; + `, + + InputDescription: styled.div` + position: absolute; + top: 35px; + + width: 230px; + padding: 20px 10px; + + background-color: var(--gray-500); + border-radius: 3px; + box-shadow: rgba(0, 0, 0, 0.15) 1.95px 1.95px 2.6px; + + font-size: 12px; + color: white; + `, +}; diff --git a/frontend/src/components/TechLabel/TechLabel.tsx b/frontend/src/components/TechLabel/TechLabel.tsx new file mode 100644 index 000000000..aac50d197 --- /dev/null +++ b/frontend/src/components/TechLabel/TechLabel.tsx @@ -0,0 +1,50 @@ +import { JavaIcon, JavascriptIcon, ReactIcon, SpringIcon, TypescriptIcon } from '@/assets/technicalLabelIcon'; +import React from 'react'; +import { styled } from 'styled-components'; + +interface TechData { + icon: JSX.Element; + labelColor: string; +} + +interface Props { + tag: string; +} + +const techMapping: Record<string, TechData> = { + javascript: { icon: <JavascriptIcon />, labelColor: '#ffedcc' }, + typescript: { icon: <TypescriptIcon />, labelColor: '#dceeff' }, + react: { icon: <ReactIcon />, labelColor: '#cef2fc' }, + java: { icon: <JavaIcon />, labelColor: '#b0d8dd' }, + spring: { icon: <SpringIcon />, labelColor: '#c5eea9' }, +}; + +const TechLabel = ({ tag }: Props) => { + const techData = techMapping[tag]; + + return ( + <S.TagContainer $labelColor={techData.labelColor}> + {techData.icon} + <p>{tag}</p> + </S.TagContainer> + ); +}; + +export default TechLabel; + +const S = { + TagContainer: styled.div<{ $labelColor: string }>` + display: flex; + align-items: center; + gap: 4px; + + padding: 1px 8px; + + font-size: 12px; + line-height: 18px; + + border-radius: 2em; + + background-color: ${({ $labelColor }) => $labelColor}; + `, +}; diff --git a/frontend/src/components/TechLabelButton/TechLabelButton.tsx b/frontend/src/components/TechLabelButton/TechLabelButton.tsx new file mode 100644 index 000000000..edb038c07 --- /dev/null +++ b/frontend/src/components/TechLabelButton/TechLabelButton.tsx @@ -0,0 +1,68 @@ +import { + JavaIconWhite, + JavascriptIconWhite, + ReactIconWhite, + SpringIconWhite, + TypescriptIconWhite, +} from '@/assets/technicalLabelIcon'; +import { TECH_COLOR_MAP } from '@/constants/tags'; +import { Technic } from '@/types/tags'; +import React from 'react'; +import { styled } from 'styled-components'; + +interface Props { + tag: Technic; + handleClickTag: (tag: Technic) => void; + isSelected?: boolean; + isDeleteButton?: boolean; +} + +const TECH_ICON_MAP: Record<Technic, JSX.Element> = { + javascript: <JavascriptIconWhite />, + typescript: <TypescriptIconWhite />, + react: <ReactIconWhite />, + java: <JavaIconWhite />, + spring: <SpringIconWhite />, +}; + +const TECH_GARY_ICON_MAP: Record<Technic, JSX.Element> = { + javascript: <JavascriptIconWhite color="var(--gray-500)" />, + typescript: <TypescriptIconWhite color="var(--gray-500)" />, + react: <ReactIconWhite color="var(--gray-500)" />, + java: <JavaIconWhite color="var(--gray-500)" />, + spring: <SpringIconWhite color="var(--gray-500)" />, +}; + +const TechLabelButton = ({ tag, isSelected = true, handleClickTag, isDeleteButton }: Props) => { + const handleClick = () => { + handleClickTag(tag); + }; + + return ( + <S.TagSelectButton type="button" $isSelected={isSelected} $color={TECH_COLOR_MAP[tag]} onClick={handleClick}> + {isSelected ? TECH_ICON_MAP[tag] : TECH_GARY_ICON_MAP[tag]} + {isDeleteButton ? `${tag} X` : tag} + </S.TagSelectButton> + ); +}; + +export default TechLabelButton; + +const S = { + TagSelectButton: styled.button<{ $isSelected: boolean; $color: string }>` + display: flex; + justify-content: center; + align-items: center; + gap: 6px; + + padding: 0 15px; + height: 32px; + border-radius: 14px; + border: 1px solid ${({ $isSelected, $color }) => ($isSelected ? $color : 'white')}; + + background-color: ${({ $isSelected }) => ($isSelected ? 'white' : 'var(--gray-200)')}; + + color: ${({ $isSelected, $color }) => ($isSelected ? $color : 'var(--gray-500)')}; + font-size: 15px; + `, +}; diff --git a/frontend/src/components/TechTagSelectModal/TechTagSelectModal.tsx b/frontend/src/components/TechTagSelectModal/TechTagSelectModal.tsx new file mode 100644 index 000000000..dc9a8357c --- /dev/null +++ b/frontend/src/components/TechTagSelectModal/TechTagSelectModal.tsx @@ -0,0 +1,124 @@ +import React, { useState } from 'react'; +import styled from 'styled-components'; +import Modal from '../common/Modal/Modal'; +import { TECHNICS } from '@/constants/tags'; +import { Technic } from '@/types/tags'; +import Button from '../common/Button/Button'; +import TechLabelButton from '../TechLabelButton/TechLabelButton'; + +interface Props { + defaultTags?: Technic[]; + closeModal: () => void; + confirmTagSelect: (tags: Technic[]) => void; +} + +const TechTagSelectModal = ({ defaultTags, closeModal, confirmTagSelect }: Props) => { + const [SelectedTags, setSelectedTags] = useState<Technic[]>([...(defaultTags ?? [])]); + + const pushTag = (tag: Technic) => { + if (!SelectedTags) return; + + const newTags = [...SelectedTags, tag].sort(); + + setSelectedTags(newTags); + }; + + const popModalTag = (tag: Technic) => { + if (!SelectedTags) return; + + const newTags = SelectedTags.filter((item) => tag !== item); + setSelectedTags(newTags); + }; + + const handleClickModalTag = (tag: Technic) => { + if (!SelectedTags) return; + if (SelectedTags?.includes(tag)) { + popModalTag(tag); + + return; + } + + pushTag(tag); + }; + + const handleClickConfirmButton = () => { + confirmTagSelect(SelectedTags ?? []); + }; + + return ( + <Modal width="410px" closeModal={closeModal} height="100"> + <S.ModalContents> + <S.ModalTitle>기술스택</S.ModalTitle> + <S.TagContainer> + {TECHNICS?.map((tag) => ( + <S.TagButtonWrapper key={tag}> + <TechLabelButton + tag={tag} + isSelected={SelectedTags?.includes(tag) ?? false} + handleClickTag={handleClickModalTag} + /> + </S.TagButtonWrapper> + ))} + </S.TagContainer> + <S.ButtonContainer> + <Button type="button" colorTheme="GRAY" onClick={closeModal} fontWeight={700} width="160px"> + 취소 + </Button> + <Button type="button" colorTheme="WHITE" onClick={handleClickConfirmButton} fontWeight={700} width="160px"> + 선택 + </Button> + </S.ButtonContainer> + </S.ModalContents> + </Modal> + ); +}; + +export default TechTagSelectModal; +const S = { + ModalContents: styled.div` + display: flex; + flex-direction: column; + justify-content: space-between; + gap: 20px; + + padding: 15px 10px; + `, + + ModalTitle: styled.div` + color: var(--gray-800); + font-size: 17px; + font-weight: 700; + `, + + ButtonContainer: styled.div` + display: flex; + justify-content: center; + gap: 15px; + + margin-top: 15px; + `, + + TagContainer: styled.ul` + position: relative; + display: flex; + flex-wrap: wrap; + gap: 9px 7px; + + width: 325px; + margin-left: 30px; + + &::before { + position: absolute; + content: ''; + + left: -25px; + height: 100%; + width: 5px; + border-radius: 2px; + + background-color: var(--gray-400); + } + `, + + TagButtonWrapper: styled.li``, +}; diff --git a/frontend/src/components/Textarea/Textarea.tsx b/frontend/src/components/Textarea/Textarea.tsx new file mode 100644 index 000000000..fa3ab7d5e --- /dev/null +++ b/frontend/src/components/Textarea/Textarea.tsx @@ -0,0 +1,87 @@ +import React from 'react'; +import styled from 'styled-components'; + +interface Props extends React.HTMLProps<HTMLTextAreaElement> { + inputTextState: string; + handleInputTextState: (e: React.ChangeEvent<HTMLTextAreaElement>) => void; + fontSize?: string | number; + padding?: string; + lineHeight?: string | number; +} + +const TextArea = ({ + inputTextState, + maxLength, + width, + height, + handleInputTextState, + fontSize, + padding, + lineHeight, + ...rest +}: Props) => { + return ( + <S.InputContainer $width={width} $height={height} $padding={padding}> + <S.InputBox + onChange={handleInputTextState} + maxLength={maxLength} + $fontSize={fontSize} + $lineHeight={lineHeight} + {...rest} + /> + {maxLength && ( + <S.InputTextLength> + {inputTextState?.length ?? 0} / {maxLength} + </S.InputTextLength> + )} + </S.InputContainer> + ); +}; + +export default TextArea; + +const S = { + InputContainer: styled.div<{ $width?: string | number; $height?: string | number; $padding?: string }>` + display: flex; + flex-direction: column; + justify-content: space-between; + gap: 15px; + + width: ${({ $width }) => $width || '400px'}; + height: ${({ $height }) => $height || '36px'}; + padding: ${({ $padding }) => $padding || '20px 10px'}; + `, + + InputTextLength: styled.div` + display: flex; + flex-direction: column; + align-items: end; + flex-basis: 20px; + + font-size: 12px; + color: var(--gray-400); + `, + + InputBox: styled.textarea<{ $fontSize?: string | number; $lineHeight?: string | number }>` + flex: 1; + + border: transparent; + padding: 0; + + font-size: ${({ $fontSize }) => $fontSize || '18px'}; + line-height: ${({ $lineHeight }) => $lineHeight || 2}; + + resize: none; + + &.note { + } + + &::placeholder { + ${({ $fontSize }) => $fontSize || '18px'}; + } + + &:focus { + outline: 0; + } + `, +}; diff --git a/frontend/src/components/common/Avatar/Avatar.stories.ts b/frontend/src/components/common/Avatar/Avatar.stories.ts new file mode 100644 index 000000000..ad7f0b78e --- /dev/null +++ b/frontend/src/components/common/Avatar/Avatar.stories.ts @@ -0,0 +1,20 @@ +import type { Meta, StoryObj } from '@storybook/react'; +import Avatar from './Avatar'; + +const meta = { + title: 'common/Avatar', + component: Avatar, + parameters: { + layout: 'centered', + }, + tags: ['autodocs'], +} satisfies Meta<typeof Avatar>; + +export default meta; +type Story = StoryObj<typeof meta>; + +export const Primary: Story = { + args: { + imageUrl: 'https://api.iconify.design/material-symbols:account-circle.svg', + }, +}; diff --git a/frontend/src/components/common/Avatar/Avatar.tsx b/frontend/src/components/common/Avatar/Avatar.tsx new file mode 100644 index 000000000..142a71da5 --- /dev/null +++ b/frontend/src/components/common/Avatar/Avatar.tsx @@ -0,0 +1,32 @@ +import React from 'react'; +import styled from 'styled-components'; + +interface Props extends React.HTMLProps<HTMLImageElement> { + imageUrl: string; +} + +const Avatar = ({ imageUrl, width, height, onClick }: Props) => { + return ( + <S.ImageWrapper> + <S.Image src={imageUrl} $width={width} $height={height} alt="프로필" onClick={onClick} $isPointer={!!onClick} /> + </S.ImageWrapper> + ); +}; + +export default Avatar; + +const S = { + ImageWrapper: styled.div``, + + Image: styled.img<{ $width?: string | number; $height?: string | number; $isPointer: boolean }>` + width: ${({ $width }) => $width || '60px'}; + height: ${({ $height }) => $height || '60px'}; + + border: 0.5px solid var(--gray-800); + border-radius: 50%; + + object-fit: cover; + + cursor: ${({ $isPointer }) => ($isPointer ? 'pointer' : '')}; + `, +}; diff --git a/frontend/src/components/common/Button/Button.stories.ts b/frontend/src/components/common/Button/Button.stories.ts new file mode 100644 index 000000000..cab32ad61 --- /dev/null +++ b/frontend/src/components/common/Button/Button.stories.ts @@ -0,0 +1,24 @@ +import type { Meta, StoryObj } from '@storybook/react'; +import Button from './Button'; + +const meta = { + title: 'common/button', + component: Button, + parameters: { + layout: 'centered', + }, + tags: ['autodocs'], +} satisfies Meta<typeof Button>; + +export default meta; +type Story = StoryObj<typeof meta>; + +export const Primary: Story = { + args: { + children: '버튼', + colorTheme: 'RED', + fontSize: '18px', + fontWeight: 400, + type: 'button', + }, +}; diff --git a/frontend/src/components/common/Button/Button.tsx b/frontend/src/components/common/Button/Button.tsx new file mode 100644 index 000000000..e7b81b4de --- /dev/null +++ b/frontend/src/components/common/Button/Button.tsx @@ -0,0 +1,85 @@ +import React from 'react'; +import styled, { css } from 'styled-components'; + +interface Props extends React.HTMLProps<HTMLButtonElement> { + children: React.ReactNode; + colorTheme: 'RED' | 'WHITE' | 'GRAY' | 'BLACK'; + fontSize?: string | number; + fontWeight?: number; + type?: 'button' | 'submit' | 'reset'; + ariaLabel?: string; +} + +const Button = ({ colorTheme, children, width, height, type, fontSize, fontWeight, onClick, ariaLabel }: Props) => { + return ( + <S.ButtonWrapper> + <S.Button + $width={width} + $height={height} + $colorTheme={colorTheme} + type={type} + $fontSize={fontSize} + $fontWeight={fontWeight} + onClick={onClick} + aria-label={ariaLabel} + > + {children} + </S.Button> + </S.ButtonWrapper> + ); +}; + +export default Button; + +const S = { + ButtonWrapper: styled.div``, + + Button: styled.button<{ + $colorTheme: 'RED' | 'WHITE' | 'GRAY' | 'BLACK'; + $width?: string | number; + $height?: string | number; + $fontSize?: string | number; + $fontWeight?: number; + }>` + ${({ $colorTheme }) => themeStyles[$colorTheme]} + + width: ${({ $width }) => $width || '180px'}; + height: ${({ $height }) => $height || '40px'}; + + padding: 10px 10px; + + font-size: ${({ $fontSize }) => $fontSize || '18px'}; + font-weight: ${({ $fontWeight }) => $fontWeight || '400'}; + `, +}; + +export const themeStyles = { + RED: css` + background: var(--baton-red); + border-radius: 6px; + + color: #ffffff; + `, + WHITE: css` + background: #ffffff; + border: 1px solid var(--baton-red); + border-radius: 6px; + + color: var(--baton-red); + `, + GRAY: css` + background: #ffffff; + border: 1px solid var(--gray-500); + border-radius: 6px; + + color: var(--gray-400); + `, + + BLACK: css` + background: #ffffff; + border: 1px solid #000000; + border-radius: 6px; + + color: #000000; + `, +}; diff --git a/frontend/src/components/common/Label/Label.stories.ts b/frontend/src/components/common/Label/Label.stories.ts new file mode 100644 index 000000000..a0277f178 --- /dev/null +++ b/frontend/src/components/common/Label/Label.stories.ts @@ -0,0 +1,23 @@ +import type { Meta, StoryObj } from '@storybook/react'; +import Label from './Label'; + +const meta = { + title: 'common/Label', + component: Label, + parameters: { + layout: 'centered', + }, + tags: ['autodocs'], +} satisfies Meta<typeof Label>; + +export default meta; +type Story = StoryObj<typeof meta>; + +export const Primary: Story = { + args: { + children: '리뷰 상태 라벨', + colorTheme: 'RED', + fontSize: '14px', + fontWeight: 400, + }, +}; diff --git a/frontend/src/components/common/Label/Label.tsx b/frontend/src/components/common/Label/Label.tsx new file mode 100644 index 000000000..183203975 --- /dev/null +++ b/frontend/src/components/common/Label/Label.tsx @@ -0,0 +1,68 @@ +import React from 'react'; +import styled, { css } from 'styled-components'; + +interface Props extends React.HTMLProps<HTMLDivElement> { + children: React.ReactNode; + colorTheme: 'RED' | 'WHITE' | 'GRAY'; + fontSize?: string | number; + fontWeight?: number; +} + +const Label = ({ children, width, height, colorTheme, fontSize, fontWeight }: Props) => { + return ( + <S.LabelWrapper> + <S.Label $width={width} $height={height} $colorTheme={colorTheme} $fontSize={fontSize} $fontWeight={fontWeight}> + {children} + </S.Label> + </S.LabelWrapper> + ); +}; + +export default Label; + +const S = { + LabelWrapper: styled.div``, + + Label: styled.div<{ + $colorTheme: 'RED' | 'WHITE' | 'GRAY'; + $width?: string | number; + $height?: string | number; + $fontSize?: string | number; + $fontWeight?: number; + }>` + ${({ $colorTheme }) => themeStyles[$colorTheme]} + + display: flex; + justify-content: center; + align-items: center; + + width: ${({ $width }) => $width || 'fit-content'}; + height: ${({ $height }) => $height || '22px'}; + border-radius: 16px; + padding: 10px 10px; + + font-size: ${({ $fontSize }) => $fontSize || '12px'}; + font-weight: ${({ $fontWeight }) => $fontWeight || '400'}; + `, +}; + +const themeStyles = { + RED: css` + border: 1px solid var(--white-color); + + background: var(--baton-red); + + color: var(--white-color); + `, + + WHITE: css` + border: 1px solid var(--baton-red); + + color: var(--baton-red); + `, + GRAY: css` + background: var(--gray-500); + + color: white; + `, +}; diff --git a/frontend/src/components/common/Modal/Modal.stories.tsx b/frontend/src/components/common/Modal/Modal.stories.tsx new file mode 100644 index 000000000..a0fe4c9f3 --- /dev/null +++ b/frontend/src/components/common/Modal/Modal.stories.tsx @@ -0,0 +1,22 @@ +import type { Meta, StoryObj } from '@storybook/react'; +import Modal from './Modal'; +import Button from '../Button/Button'; +import React from 'react'; + +const meta = { + title: 'common/Modal', + component: Modal, + parameters: { + layout: 'centered', + }, +} satisfies Meta<typeof Modal>; + +export default meta; +type Story = StoryObj<typeof meta>; + +export const Primary: Story = { + args: { + children: <Button colorTheme="RED">Button</Button>, + closeModal: () => {}, + } as const, +}; diff --git a/frontend/src/components/common/Modal/Modal.tsx b/frontend/src/components/common/Modal/Modal.tsx new file mode 100644 index 000000000..05f527898 --- /dev/null +++ b/frontend/src/components/common/Modal/Modal.tsx @@ -0,0 +1,52 @@ +import React from 'react'; +import { createPortal } from 'react-dom'; +import styled from 'styled-components'; + +interface Props extends React.HTMLProps<HTMLDivElement> { + children: React.ReactNode; + closeModal: () => void; +} + +const Modal = ({ children, closeModal, width, height }: Props) => { + return createPortal( + <S.ModalContainer aria-label="서포터 선택 모달창" aria-modal="true" role="서포터 선택 모달창"> + <S.BackDrop onClick={closeModal} /> + <S.ModalViewContainer $width={width} $height={height}> + {children} + </S.ModalViewContainer> + </S.ModalContainer>, + document.getElementById('modal-root') as HTMLDivElement, + ); +}; + +export default Modal; + +const S = { + ModalContainer: styled.div``, + + BackDrop: styled.div` + position: fixed; + top: 0; + right: 0; + bottom: 0; + left: 0; + + background: rgba(0, 0, 0, 0.25); + `, + + ModalViewContainer: styled.div<{ $width?: string | number; $height?: string | number }>` + position: fixed; + top: 50%; + left: 50%; + + width: ${({ $width }) => $width || '300px'}; + height: ${({ $height }) => $height || '300px'}; + padding: 20px; + + border-radius: 8px; + background: white; + + z-index: 999; + transform: translate(-50%, -50%); + `, +}; diff --git a/frontend/src/components/common/Tag/Tag.stories.ts b/frontend/src/components/common/Tag/Tag.stories.ts new file mode 100644 index 000000000..b96bb9ebc --- /dev/null +++ b/frontend/src/components/common/Tag/Tag.stories.ts @@ -0,0 +1,20 @@ +import type { Meta, StoryObj } from '@storybook/react'; +import Tag from './Tag'; + +const meta = { + title: 'common/Tag', + component: Tag, + parameters: { + layout: 'centered', + }, + tags: ['autodocs'], +} satisfies Meta<typeof Tag>; + +export default meta; +type Story = StoryObj<typeof meta>; + +export const Primary: Story = { + args: { + children: 'React', + }, +}; diff --git a/frontend/src/components/common/Tag/Tag.tsx b/frontend/src/components/common/Tag/Tag.tsx new file mode 100644 index 000000000..e2992c64e --- /dev/null +++ b/frontend/src/components/common/Tag/Tag.tsx @@ -0,0 +1,49 @@ +import React from 'react'; +import styled from 'styled-components'; +import closeIcon from '@/assets/close-icon-red.svg'; + +interface Props extends React.HTMLProps<HTMLButtonElement> { + children: React.ReactNode; +} + +const Tag = ({ children, onClick }: Props) => { + return ( + <S.TagWrapper> + <S.Tag onClick={onClick} type="button"> + {`#${children}`} + <S.CloseTagIcon src={closeIcon} /> + </S.Tag> + </S.TagWrapper> + ); +}; + +export default Tag; + +const S = { + TagWrapper: styled.div` + :hover { + transition: all 0.35s ease; + transform: scale(1.04); + } + `, + + Tag: styled.button` + display: flex; + align-items: center; + + height: 34px; + padding: 0 15px; + gap: 5px; + + background-color: white; + border-radius: 16px; + border: 1px solid var(--baton-red); + + color: var(--baton-red); + `, + + CloseTagIcon: styled.img` + width: 9px; + height: 9px; + `, +}; diff --git a/frontend/src/components/common/Toast/Toast.stories.ts b/frontend/src/components/common/Toast/Toast.stories.ts new file mode 100644 index 000000000..f4f57f788 --- /dev/null +++ b/frontend/src/components/common/Toast/Toast.stories.ts @@ -0,0 +1,23 @@ +import type { Meta, StoryObj } from '@storybook/react'; +import Toast from './Toast'; + +const meta = { + title: 'common/Toast', + component: Toast, + parameters: { + layout: 'centered', + }, + tags: ['autodocs'], +} satisfies Meta<typeof Toast>; + +export default meta; +type Story = StoryObj<typeof meta>; + +export const Primary: Story = { + args: { + colorTheme: 'COMPLETION', + title: '생성 완료', + description: '리뷰 요청 글 생성이 완료되었습니다.', + ms: 3000, + }, +}; diff --git a/frontend/src/components/common/Toast/Toast.tsx b/frontend/src/components/common/Toast/Toast.tsx new file mode 100644 index 000000000..ad34cea4a --- /dev/null +++ b/frontend/src/components/common/Toast/Toast.tsx @@ -0,0 +1,98 @@ +import React from 'react'; +import { createPortal } from 'react-dom'; +import { css, keyframes, styled } from 'styled-components'; +import completeIcon from '@/assets/complete-icon.svg'; +import errorIcon from '@/assets/error-icon.svg'; + +interface Props { + colorTheme: 'ERROR' | 'COMPLETION'; + title: string; + description: string; + ms: number; +} + +const Toast = ({ colorTheme, description, title, ms }: Props) => { + return createPortal( + <S.ToastWrapper key={Date.now()} $colorTheme={colorTheme} ms={ms}> + <S.Icon src={colorTheme === 'COMPLETION' ? completeIcon : errorIcon} /> + <S.MessageContainer> + <S.Title>{title}</S.Title> + <S.Description>{description}</S.Description> + </S.MessageContainer> + </S.ToastWrapper>, + document.getElementById('toast-root') as HTMLDivElement, + ); +}; + +export default Toast; + +const fadeIn = keyframes` + 0% { + transform: translate(-50%, 150%); + } + + 8%, 92% { + transform: translate(-50%, 50%); + } + + 100% { + transform: translate(-50%, 170%); + } +`; + +const S = { + ToastWrapper: styled.div<{ $colorTheme: 'ERROR' | 'COMPLETION'; ms: number }>` + ${({ $colorTheme }) => themeStyles[$colorTheme]} + + position: fixed; + display: flex; + align-items: center; + gap: 15px; + bottom: 8%; + left: 50%; + transform: translate(-50%, -50%); + z-index: 999; + + width: 380px; + height: 90px; + padding: 10px 15px; + border-radius: 8px; + + background-color: white; + + animation-name: ${fadeIn}; + animation-timing-function: linear; + animation-duration: ${({ ms }) => `${ms + 50}ms`}; + `, + + Icon: styled.img` + width: 32px; + `, + + MessageContainer: styled.div` + display: flex; + flex-direction: column; + gap: 10px; + `, + + Title: styled.h2` + font-size: 19px; + font-weight: 700; + `, + + Description: styled.div` + font-size: 17px; + `, +}; + +const themeStyles = { + ERROR: css` + border: 1.5px solid var(--baton-red); + box-shadow: 0 0 16px 9px rgba(235, 87, 87, 0.1); + `, + + COMPLETION: css` + border: 1.5px solid#1ee06c; + box-shadow: 0 0 16px 9px rgba(30, 224, 108, 0.1); + `, +}; diff --git a/frontend/src/constants/feedback.ts b/frontend/src/constants/feedback.ts new file mode 100644 index 000000000..700be7e3c --- /dev/null +++ b/frontend/src/constants/feedback.ts @@ -0,0 +1,68 @@ +import { DescriptionOptions, ReviewTypeOptions } from '@/types/feedback'; + +export const REVIEW_TYPE = ['GREAT', 'GOOD', 'BAD'] as const; + +export const REVIEW_TYPE_OPTIONS: ReviewTypeOptions = [ + { + value: 'BAD', + label: '별로에요', + selected: false, + }, + { + value: 'GOOD', + label: '좋았어요', + selected: false, + }, + + { + value: 'GREAT', + label: '최고에요', + selected: false, + }, +]; + +export const DESCRIPTION_OPTIONS_GOOD: DescriptionOptions = [ + { + value: '제가 생각하지 못한 부분까지 꼼꼼하게 리뷰해주셨어요', + label: '제가 생각하지 못한 부분까지 꼼꼼하게 리뷰해주셨어요', + selected: false, + }, + { + value: '친절하고 매너가 좋아요', + label: '친절하고 매너가 좋아요', + selected: false, + }, + { + value: '시간 약속을 잘 지켜요', + label: '시간 약속을 잘 지켜요', + selected: false, + }, + { + value: '응답이 빨라요', + label: '응답이 빨라요', + selected: false, + }, +]; + +export const DESCRIPTION_OPTIONS_BAD: DescriptionOptions = [ + { + value: '리뷰가 꼼꼼하지 못해요', + label: '리뷰가 꼼꼼하지 못해요', + selected: false, + }, + { + value: '친절하지 못해요', + label: '친절하지 못해요', + selected: false, + }, + { + value: '약속을 잘 지키지 못해요', + label: '약속을 잘 지키지 못해요', + selected: false, + }, + { + value: '응답이 느려요', + label: '응답이 느려요', + selected: false, + }, +]; diff --git a/frontend/src/constants/index.ts b/frontend/src/constants/index.ts new file mode 100644 index 000000000..b8c3a22d9 --- /dev/null +++ b/frontend/src/constants/index.ts @@ -0,0 +1,17 @@ +import { ReviewStatus } from '@/types/runnerPost'; + +export const BATON_BASE_URL = + process.env.NODE_ENV === 'development' ? 'http://15.164.179.87/api/v1' : process.env.REACT_APP_BASE_URL; + +export const REVIEW_STATUS_LABEL_TEXT: { [key in ReviewStatus]: string } = { + NOT_STARTED: '리뷰 대기중', + IN_PROGRESS: '리뷰 진행중', + DONE: '리뷰 완료', + OVERDUE: '마감기한 지남', +}; + +export const REVIEW_STATUS: ReviewStatus[] = Object.keys(REVIEW_STATUS_LABEL_TEXT) as ReviewStatus[]; +export const RUNNER_POST_OPTIONS = ['대기중인 리뷰', '진행중인 리뷰', '완료된 리뷰']; +export const SUPPORTER_POST_OPTIONS = ['신청한 리뷰', '진행중인 리뷰', '완료된 리뷰']; + +export const ACCESS_TOKEN_LOCAL_STORAGE_KEY = 'ACCESS_TOKEN'; diff --git a/frontend/src/constants/message.ts b/frontend/src/constants/message.ts new file mode 100644 index 000000000..fa6b619b7 --- /dev/null +++ b/frontend/src/constants/message.ts @@ -0,0 +1,83 @@ +export const ERROR_TITLE = { + VALIDATION: '잘못된 입력', + REQUEST: '요청 오류', + EXPIRATION: '만료', + NO_PERMISSION: '권한 없음', + NETWORK: '네트워크 오류', + ERROR: '오류', +} as const; + +export const ERROR_DESCRIPTION = { + TOKEN_EXPIRATION: '로그인이 만료되었어요', + NO_TOKEN: '로그인이 필요한 기능이에요', + UNEXPECTED: '예기치 못한 오류가 발생했어요', + LOGIN: '로그인을 실패했어요', + NO_SUPPORTER: '해당 서포터가 존재하지 않아요', + NO_POST: '해당 게시물이 존재하지 않아요', + NO_MODIFICATION: '수정사항이 존재하지 않아요', + NO_PROFILE: '프로필 정보를 불러오지 못했어요', +} as const; + +export const TOAST_ERROR_MESSAGE = { + TOKEN_EXPIRATION: { + title: ERROR_TITLE.EXPIRATION, + description: ERROR_DESCRIPTION.TOKEN_EXPIRATION, + }, + + NO_TOKEN: { + title: ERROR_TITLE.NO_PERMISSION, + description: ERROR_DESCRIPTION.NO_TOKEN, + }, + + UNEXPECTED: { + title: ERROR_TITLE.ERROR, + description: ERROR_DESCRIPTION.UNEXPECTED, + }, + + LOGIN: { + title: ERROR_TITLE.ERROR, + description: ERROR_DESCRIPTION.LOGIN, + }, + + NO_PROFILE: { + title: ERROR_TITLE.REQUEST, + description: ERROR_DESCRIPTION.NO_PROFILE, + }, +} as const; + +export const TOAST_COMPLETION_MESSAGE = { + SUBMISSION: { + title: '제출 완료', + description: '리뷰 제안을 보냈어요', + }, + + SAVE: { + title: '저장 완료', + description: '저장을 완료했어요', + }, + + DELETE: { + title: '삭제 완료', + description: '삭제를 완료했어요', + }, + + SUPPORTER_SELECT: { + title: '선택 완료', + description: '서포터 선택을 완료했어요', + }, + + REVIEW_CANCEL: { + title: '취소 완료', + description: '취소를 완료했어요', + }, + + REVIEW_COMPETE: { + title: '리뷰 완료', + description: '리뷰를 완료했어요', + }, + + SUBMIT_FEEDBACK: { + title: '제출 완료', + description: '피드백을 제출했어요' + } +}; diff --git a/frontend/src/constants/tags.ts b/frontend/src/constants/tags.ts new file mode 100644 index 000000000..54f9b0c6b --- /dev/null +++ b/frontend/src/constants/tags.ts @@ -0,0 +1,11 @@ +import { Technic } from '@/types/tags'; + +export const TECHNICS = ['javascript', 'typescript', 'react', 'java', 'spring'] as const; + +export const TECH_COLOR_MAP: Record<Technic, string> = { + javascript: '#F7DF1E', + typescript: '#007acc', + react: '#00D8FF', + java: '#F58219', + spring: '#5FB832', +} as const; diff --git a/frontend/src/contexts/ToastContext.tsx b/frontend/src/contexts/ToastContext.tsx new file mode 100644 index 000000000..10d0074c2 --- /dev/null +++ b/frontend/src/contexts/ToastContext.tsx @@ -0,0 +1,79 @@ +import Toast from '@/components/common/Toast/Toast'; +import React, { createContext, useRef, useState } from 'react'; + +interface ToastMessage { + title: string; + description: string; + ms?: number; +} + +interface Props { + children: React.ReactNode; +} + +const DEFAULT_TIMEOUT = 3000; + +export const ToastContext = createContext({ + showCompletionToast: (message: ToastMessage) => {}, + showErrorToast: (message: ToastMessage) => {}, +}); + +const ToastProvider = ({ children }: Props) => { + const [completionToast, setCompletionToast] = useState<ToastMessage | null>(null); + const [errorToast, setErrorToast] = useState<ToastMessage | null>(null); + const timer = useRef<number | null>(null); + + const showCompletionToast = (message: ToastMessage) => { + if (timer.current) { + window.clearTimeout(timer.current); + + setCompletionToast(null); + setErrorToast(null); + } + + setCompletionToast(message); + + timer.current = window.setTimeout(() => { + setCompletionToast(null); + }, message.ms || DEFAULT_TIMEOUT); + }; + + const showErrorToast = (message: ToastMessage) => { + if (timer.current) { + window.clearTimeout(timer.current); + + setCompletionToast(null); + setErrorToast(null); + } + + setErrorToast(message); + + timer.current = window.setTimeout(() => { + setErrorToast(null); + }, message.ms || DEFAULT_TIMEOUT); + }; + + return ( + <ToastContext.Provider value={{ showCompletionToast, showErrorToast }}> + {children} + {completionToast && ( + <Toast + colorTheme="COMPLETION" + title={completionToast.title} + description={completionToast.description} + ms={completionToast.ms || DEFAULT_TIMEOUT} + /> + )} + {errorToast && ( + <Toast + colorTheme="ERROR" + title={errorToast.title} + description={errorToast.description} + ms={errorToast.ms || DEFAULT_TIMEOUT} + /> + )} + </ToastContext.Provider> + ); +}; + +export default ToastProvider; diff --git a/frontend/src/hooks/usePageRouter.ts b/frontend/src/hooks/usePageRouter.ts new file mode 100644 index 000000000..e91b0b4c6 --- /dev/null +++ b/frontend/src/hooks/usePageRouter.ts @@ -0,0 +1,74 @@ +import { useNavigate } from 'react-router-dom'; +import { ROUTER_PATH } from '../router'; + +export const usePageRouter = () => { + const navigate = useNavigate(); + + const goToMainPage = () => { + navigate(ROUTER_PATH.MAIN); + }; + + const goToRunnerPostPage = (runnerPostId: number) => { + navigate(ROUTER_PATH.RUNNER_POST.replace(':runnerPostId', runnerPostId.toString())); + }; + + const goToRunnerPostCreatePage = () => { + navigate(ROUTER_PATH.RUNNER_POST_CREATE); + }; + + const goToLoginPage = () => { + navigate(ROUTER_PATH.LOGIN); + }; + + const goToMyPage = () => { + navigate(ROUTER_PATH.MY_PAGE); + }; + + const goToCreationResultPage = () => { + navigate(ROUTER_PATH.RESULT); + }; + + const goToSupporterProfilePage = (supporterId: number) => { + navigate(ROUTER_PATH.SUPPORTER_PROFILE.replace(':supporterId', supporterId.toString())); + }; + + const goToRunnerProfilePage = (runnerId: number) => { + navigate(ROUTER_PATH.RUNNER_PROFILE.replace(':runnerId', runnerId.toString())); + }; + + const goToSupportSelectPage = (runnerPostId: number) => { + navigate(ROUTER_PATH.SUPPORTER_SELECT.replace(':runnerPostId', runnerPostId.toString())); + }; + + const goToSupporterFeedbackPage = (runnerPostId: number, supporterId: number) => { + navigate( + ROUTER_PATH.SUPPORTER_FEEDBACK.replace(':runnerPostId', runnerPostId.toString()).replace( + ':supporterId', + supporterId.toString(), + ), + ); + }; + + const goToProfileEditPage = () => { + navigate(ROUTER_PATH.PROFILE_EDIT); + }; + + const goBack = () => { + navigate(-1); + }; + + return { + goToMainPage, + goToRunnerPostPage, + goToRunnerPostCreatePage, + goToLoginPage, + goToMyPage, + goToCreationResultPage, + goToSupporterProfilePage, + goToRunnerProfilePage, + goToSupportSelectPage, + goToSupporterFeedbackPage, + goToProfileEditPage, + goBack, + }; +}; diff --git a/frontend/src/hooks/useToken.ts b/frontend/src/hooks/useToken.ts new file mode 100644 index 000000000..de842012a --- /dev/null +++ b/frontend/src/hooks/useToken.ts @@ -0,0 +1,62 @@ +import { ACCESS_TOKEN_LOCAL_STORAGE_KEY } from '@/constants'; +import { TOAST_ERROR_MESSAGE } from '@/constants/message'; +import { ToastContext } from '@/contexts/ToastContext'; +import { useContext, useState } from 'react'; + +export interface LoginToken { + value: string; + expirationDate: Date; +} + +export const useToken = () => { + const { showErrorToast } = useContext(ToastContext); + + const hasToken = () => { + const token = localStorage.getItem(ACCESS_TOKEN_LOCAL_STORAGE_KEY); + + return !!token; + }; + + const getToken = (): LoginToken | null => { + try { + const item = localStorage.getItem(ACCESS_TOKEN_LOCAL_STORAGE_KEY); + + if (!item) { + showErrorToast(TOAST_ERROR_MESSAGE.NO_TOKEN); + + return null; + } + + return JSON.parse(item); + } catch { + return null; + } + }; + + const saveToken = (token: string) => { + const date = new Date(); + date.setDate(date.getDate() + 30); + + localStorage.setItem(ACCESS_TOKEN_LOCAL_STORAGE_KEY, JSON.stringify({ value: token, expirationDate: date })); + }; + + const removeToken = () => { + localStorage.removeItem(ACCESS_TOKEN_LOCAL_STORAGE_KEY); + }; + + const validateToken = () => { + const item = localStorage.getItem(ACCESS_TOKEN_LOCAL_STORAGE_KEY); + if (!item) return; + + const token: LoginToken = JSON.parse(item); + const time = new Date(token.expirationDate); + + if (Number(time) - Date.now() < 0) { + removeToken(); + + showErrorToast(TOAST_ERROR_MESSAGE.TOKEN_EXPIRATION); + } + }; + + return { getToken, removeToken, saveToken, validateToken, hasToken }; +}; diff --git a/frontend/src/index.tsx b/frontend/src/index.tsx new file mode 100644 index 000000000..098693fa1 --- /dev/null +++ b/frontend/src/index.tsx @@ -0,0 +1,19 @@ +import React from 'react'; +import ReactDOM from 'react-dom/client'; +import { RouterProvider } from 'react-router-dom'; +import { router } from './router'; +import { GlobalStyle } from './styles/GlobalStyles'; +import { worker } from './mocks/worker'; + +const root = ReactDOM.createRoot(document.getElementById('root') as HTMLElement); + +if (process.env.NODE_ENV === 'development') { + worker.start(); +} + +root.render( + <React.StrictMode> + <GlobalStyle /> + <RouterProvider router={router} /> + </React.StrictMode>, +); diff --git a/frontend/src/layout/Header.tsx b/frontend/src/layout/Header.tsx new file mode 100644 index 000000000..de4675e00 --- /dev/null +++ b/frontend/src/layout/Header.tsx @@ -0,0 +1,135 @@ +import { usePageRouter } from '@/hooks/usePageRouter'; +import React, { useContext, useEffect, useState } from 'react'; +import styled from 'styled-components'; +import LogoImage from '@/assets/logo-image.svg'; +import { useToken } from '@/hooks/useToken'; +import { GetHeaderProfileResponse } from '@/types/profile'; +import Avatar from '@/components/common/Avatar/Avatar'; +import { getRequest } from '@/api/fetch'; +import { ToastContext } from '@/contexts/ToastContext'; +import { ERROR_DESCRIPTION, ERROR_TITLE } from '@/constants/message'; +import Button from '@/components/common/Button/Button'; + +const Header = () => { + const [profile, setProfile] = useState<GetHeaderProfileResponse | null>(null); + + const { goToMainPage, goToLoginPage, goToMyPage } = usePageRouter(); + + const { getToken, removeToken, hasToken } = useToken(); + + const { showErrorToast } = useContext(ToastContext); + + useEffect(() => { + const isLogin = hasToken(); + + if (isLogin) getProfile(); + }, []); + + const getProfile = () => { + const token = getToken()?.value; + if (!token) return; + + getRequest(`/profile/me`, token) + .then(async (response) => { + const data: GetHeaderProfileResponse = await response.json(); + + setProfile(data); + }) + .catch((error: Error) => + showErrorToast({ + description: error instanceof Error ? error.message : ERROR_DESCRIPTION.UNEXPECTED, + title: ERROR_TITLE.REQUEST, + }), + ); + }; + + const handleClickLogoutButton = () => { + removeToken(); + + goToMainPage(); + }; + + const handleClickProfile = () => { + goToMyPage(); + }; + + return ( + <S.HeaderWrapper> + <S.HeaderContainer> + <S.Logo src={LogoImage} onClick={goToMainPage} alt="바톤로고" /> + <S.MenuContainer> + {hasToken() ? ( + <> + <S.AvatarContainer onClick={handleClickProfile}> + <Avatar width="35px" height="35px" imageUrl={profile?.imageUrl || 'https://via.placeholder.com/150'} /> + <p>{profile?.name}</p> + </S.AvatarContainer> + <Button fontSize="14px" width="76px" height="35px" colorTheme="WHITE" onClick={handleClickLogoutButton}> + 로그아웃 + </Button> + </> + ) : ( + <Button fontSize="14px" width="76px" height="35px" colorTheme="RED" onClick={goToLoginPage}> + 로그인 + </Button> + )} + </S.MenuContainer> + </S.HeaderContainer> + </S.HeaderWrapper> + ); +}; + +export default Header; + +const S = { + HeaderWrapper: styled.header` + display: flex; + justify-content: center; + + width: 100%; + padding: 0 30px; + + border-bottom: 0.3px solid #333333; + `, + + HeaderContainer: styled.div` + display: flex; + justify-content: space-between; + align-items: center; + + width: 1200px; + height: 80px; + `, + + AvatarContainer: styled.div` + display: flex; + align-items: center; + gap: 10px; + + cursor: pointer; + `, + + Logo: styled.img` + width: 140px; + height: 40px; + + cursor: pointer; + `, + + MenuContainer: styled.div` + display: flex; + align-items: center; + gap: 30px; + `, + + LoginButton: styled.button` + width: 76px; + height: 35px; + + border-radius: 50px; + + background-color: var(--baton-red); + color: var(--white-color); + font-size: 14px; + `, +}; diff --git a/frontend/src/layout/Layout.tsx b/frontend/src/layout/Layout.tsx new file mode 100644 index 000000000..2d1657278 --- /dev/null +++ b/frontend/src/layout/Layout.tsx @@ -0,0 +1,32 @@ +import React from 'react'; +import Header from './Header'; +import { styled } from 'styled-components'; + +interface Props { + children: React.ReactNode; +} + +const Layout = ({ children }: Props) => { + return ( + <S.LayoutContainer> + <Header /> + <S.ChildrenWrapper>{children}</S.ChildrenWrapper> + </S.LayoutContainer> + ); +}; + +export default Layout; + +const S = { + LayoutContainer: styled.div` + display: flex; + flex-direction: column; + align-items: center; + `, + + ChildrenWrapper: styled.article` + width: 1200px; + + margin-bottom: 80px; + `, +}; diff --git a/frontend/src/mocks/data/headerProfile.json b/frontend/src/mocks/data/headerProfile.json new file mode 100644 index 000000000..f5e4c0de2 --- /dev/null +++ b/frontend/src/mocks/data/headerProfile.json @@ -0,0 +1,4 @@ +{ + "name": "에이든", + "imageUrl": "https://avatars.githubusercontent.com/u/62369936?v=4" +} diff --git a/frontend/src/mocks/data/myPagePost/done.json b/frontend/src/mocks/data/myPagePost/done.json new file mode 100644 index 000000000..3c68a6268 --- /dev/null +++ b/frontend/src/mocks/data/myPagePost/done.json @@ -0,0 +1,23 @@ +{ + "data": [ + { + "runnerPostId": 1, + "title": "끝난 리뷰입니다.", + "deadline": "마감기한", + "tags": ["java", "JAVA"], + "reviewStatus": "DONE", + "applicantCount": 4, + "watchedCount": 125, + "supporterId": 1 + } + ], + "pageInfo": { + "isFirst": true, + "isLast": false, + "hasNext": true, + "totalPages": 4, + "totalElements": 48, + "currentPage": 1, + "currentSize": 12 + } +} diff --git a/frontend/src/mocks/data/myPagePost/inProgress.json b/frontend/src/mocks/data/myPagePost/inProgress.json new file mode 100644 index 000000000..7258eb9bc --- /dev/null +++ b/frontend/src/mocks/data/myPagePost/inProgress.json @@ -0,0 +1,51 @@ +{ + "data": [ + { + "runnerPostId": 1, + "title": "진행중인 리뷰", + "deadline": "마감기한", + "tags": ["java", "JAVA"], + "reviewStatus": "IN_PROGRESS", + "applicantCount": 4, + "watchedCount": 125, + "supporterId": 1 + }, + { + "runnerPostId": 2, + "title": "진행중인 리뷰", + "deadline": "마감기한2", + "tags": ["java", "자바"], + "reviewStatus": "IN_PROGRESS", + "applicantCount": 4, + "watchedCount": 125 + }, + { + "runnerPostId": 3, + "title": "진행중인 리뷰2", + "deadline": "마감기한3", + "tags": ["java", "자바"], + "reviewStatus": "IN_PROGRESS", + "applicantCount": 4, + "watchedCount": 125 + }, + { + "runnerPostId": 4, + "title": "진행중인 리뷰4", + "deadline": "마감기한3", + "tags": ["java", "자바"], + "reviewStatus": "IN_PROGRESS", + "applicantCount": 4, + "watchedCount": 125, + "supporterId": 2 + } + ], + "pageInfo": { + "isFirst": true, + "isLast": false, + "hasNext": true, + "totalPages": 4, + "totalElements": 48, + "currentPage": 1, + "currentSize": 12 + } +} diff --git a/frontend/src/mocks/data/myPagePost/notStarted.json b/frontend/src/mocks/data/myPagePost/notStarted.json new file mode 100644 index 000000000..276e126dd --- /dev/null +++ b/frontend/src/mocks/data/myPagePost/notStarted.json @@ -0,0 +1,41 @@ +{ + "data": [ + { + "runnerPostId": 1, + "title": "시작안한 리뷰1", + "deadline": "마감기한", + "tags": ["java", "JAVA"], + "reviewStatus": "NOT_STARTED", + "applicantCount": 4, + "watchedCount": 125, + "supporterId": 1 + }, + { + "runnerPostId": 2, + "title": "시작안한 리뷰2", + "deadline": "마감기한2", + "tags": ["java", "자바"], + "reviewStatus": "NOT_STARTED", + "applicantCount": 4, + "watchedCount": 125 + }, + { + "runnerPostId": 3, + "title": "시작안한 리뷰3", + "deadline": "마감기한3", + "tags": ["java", "자바"], + "reviewStatus": "NOT_STARTED", + "applicantCount": 4, + "watchedCount": 125 + } + ], + "pageInfo": { + "isFirst": true, + "isLast": false, + "hasNext": true, + "totalPages": 4, + "totalElements": 48, + "currentPage": 1, + "currentSize": 12 + } +} diff --git a/frontend/src/mocks/data/myPageRunnerProfile.json b/frontend/src/mocks/data/myPageRunnerProfile.json new file mode 100644 index 000000000..ded0853ec --- /dev/null +++ b/frontend/src/mocks/data/myPageRunnerProfile.json @@ -0,0 +1,8 @@ +{ + "name": "에이든", + "company": "한국외국어대학교", + "imageUrl": "https://avatars.githubusercontent.com/u/62369936?v=4", + "githubUrl": "https://github.com/gyeongza", + "introduction": "안녕하세요 프론트엔드 공부중인 비전공자 학생입니다🖥️안녕하안녕하세요 프론트엔드 공부중인 비전공자 학생입니다🖥️안녕하세요 프론트엔드 공부중인 비전공자 학생입니다🖥️안녕하세요 프론트엔드 공부중인 비전공자 학생입니다🖥️안녕하세요 프론트엔드 공부중인 비전공자 학생입니다🖥️안녕하세요 프론트엔드 공부중인 비전공자 학생입니다🖥️안녕하세요 프론트엔드 공부중인 비전공자 학생입니다🖥️안녕하세요 프론트엔드 공부중인 비전공자 학생입니다🖥️세요 프론트엔드 공부중인 비전공자 학생입니다🖥️안녕하세요 프론트엔드 공부중인 비전공자 학생입니다🖥️안녕하세요 프론트엔드 공부중인 비전공자 학생입니다🖥️안녕하세요 프론트엔드 공부중인 비전공자 학생입니다🖥️안녕하세요 프론트엔드 공부중인 비전공자 학생입니다🖥️안녕하세요 프론트엔드 공부중인 비전공자 학생입니다🖥️안녕하세요 프론트엔드 공부중인 비전공자 학생입니다🖥️안녕하세요 프론트엔드 공부중인 비전공자 학생입니다🖥️안녕하세요 프론트엔드 공부중인 비전공자 학생입니다🖥️안녕하세요 프론트엔드 공부중인 비전공자 학생입니다🖥️안녕하세요 프론트엔드 공부중인 비전공자 학생입니다🖥️안녕하세요 프론트엔드 공부중인 비전공자 학생입니다🖥️안녕하세요 프론트엔드 공부중인 비전공자 학생입니다🖥️안녕하세요 프론트엔드 공부중인 비전공자 학생입니다🖥️안녕하세요 프론트엔드 공부중인 비전공자 학생입니다🖥️안녕하세요 프론트엔드 공부중인 비전공자 학생입니다🖥️", + "technicalTags": ["javascript", "react", "typescript"] +} diff --git a/frontend/src/mocks/data/myPageSupporterProfile.json b/frontend/src/mocks/data/myPageSupporterProfile.json new file mode 100644 index 000000000..06f9b396c --- /dev/null +++ b/frontend/src/mocks/data/myPageSupporterProfile.json @@ -0,0 +1,8 @@ +{ + "name": "서포터 - 에이든", + "company": "우아한테크코스 5기 프론트엔드 크루", + "imageUrl": "https://avatars.githubusercontent.com/u/62369936?v=4", + "githubUrl": "https://github.com/gyeongza", + "introduction": "리뷰 문의는 DM으로 부탁드려요 🙏", + "technicalTags": ["javascript", "react", "typescript"] +} diff --git a/frontend/src/mocks/data/runnerPostDetails.json b/frontend/src/mocks/data/runnerPostDetails.json new file mode 100644 index 000000000..21310180d --- /dev/null +++ b/frontend/src/mocks/data/runnerPostDetails.json @@ -0,0 +1,23 @@ +{ + "runnerPostId": 1, + "title": "리액트 리뷰 부탁드립니다.", + "deadline": "2023-07-15T13:56", + "tags": ["개인프로젝트", "리액트", "React"], + "contents": "자바를 배운지 3년 정도 되었는데요 제가 짠 코드가 어떤지 궁금해서 리뷰 요청 올려봅니다.\n현업에 계신 분들.. 좀 도와주세요 ㅠㅠ\nPR 메시지는 PR 링크에 작성해놨습니다 !", + "isOwner": false, + "isApplied": false, + "applicantCount": 1, + "watchedCount": 1, + "reviewStatus": "NOT_STARTED", + "pullRequestUrl": "https://www.google.co.kr/", + "runnerProfile": { + "runnerId": 2, + "name": "감자도리", + "company": "대학교 2학년", + "imageUrl": "https://avatars.githubusercontent.com/u/103256030?v=4" + }, + "supporter": { + "supporterId": 1, + "name": "박정훈" + } +} diff --git a/frontend/src/mocks/data/runnerPostList.json b/frontend/src/mocks/data/runnerPostList.json new file mode 100644 index 000000000..745b1d47b --- /dev/null +++ b/frontend/src/mocks/data/runnerPostList.json @@ -0,0 +1,136 @@ +{ + "data": [ + { + "runnerPostId": 1, + "title": "리액트 코드 리뷰 부탁드립니다!", + "deadline": "2023-07-28T13:30", + "tags": ["react", "리액트", "자바스크립트"], + "runnerProfile": { "name": "리액트초보", "imageUrl": "https://via.placeholder.com/150" }, + "watchedCount": 34, + "applicantCount": 4, + "reviewStatus": "NOT_STARTED" + }, + { + "runnerPostId": 2, + "title": "자바 스프링을 사용한 개인 프로젝트입니다.", + "deadline": "2023-07-28T13:30", + "tags": ["java", "자바", "스프링", "spring"], + "runnerProfile": { "name": "devPark", "imageUrl": "https://via.placeholder.com/150" }, + "watchedCount": 34, + "applicantCount": 4, + "reviewStatus": "NOT_STARTED" + }, + { + "runnerPostId": 3, + "title": "리액트와 노드로 만든 웹사이트에 대한 코드리뷰 요청합니다", + "deadline": "2023-07-22T18:00", + "tags": ["react", "리액트", "자바스크립트", "nodejs"], + "runnerProfile": { "name": "webDev_J", "imageUrl": "https://via.placeholder.com/150" }, + "watchedCount": 34, + "applicantCount": 4, + "reviewStatus": "IN_PROGRESS" + }, + { + "runnerPostId": 4, + "title": "Spring Boot와 JPA를 이용한 프로젝트입니다.", + "deadline": "2023-07-24T14:00", + "tags": ["java", "자바", "스프링", "spring", "JPA"], + "runnerProfile": { "name": "javaMaster_P", "imageUrl": "https://via.placeholder.com/150" }, + "watchedCount": 34, + "applicantCount": 4, + "reviewStatus": "NOT_STARTED" + }, + { + "runnerPostId": 5, + "title": "Express.js로 구현한 REST API에 대한 코드 리뷰 부탁드립니다.", + "deadline": "2023-07-25T11:00", + "tags": ["자바스크립트", "nodejs", "expressjs"], + "runnerProfile": { "name": "backendDev_B", "imageUrl": "https://via.placeholder.com/150" }, + "watchedCount": 34, + "applicantCount": 4, + "reviewStatus": "DONE" + }, + { + "runnerPostId": 6, + "title": "JavaScript를 이용해 구현한 알고리즘 문제 코드리뷰 요청", + "deadline": "2023-07-23T16:00", + "tags": ["자바스크립트"], + "runnerProfile": { "name": "algoKing_K", "imageUrl": "https://via.placeholder.com/150" }, + "watchedCount": 34, + "applicantCount": 4, + "reviewStatus": "NOT_STARTED" + }, + { + "runnerPostId": 7, + "title": "Vue.js와 Node.js를 활용한 풀스택 프로젝트 코드리뷰 요청", + "deadline": "2023-07-29T13:00", + "tags": ["자바스크립트", "nodejs", "vuejs"], + "runnerProfile": { "name": "fullStack_Y", "imageUrl": "https://via.placeholder.com/150" }, + "watchedCount": 34, + "applicantCount": 4, + "reviewStatus": "NOT_STARTED" + }, + { + "runnerPostId": 8, + "title": "Hibernate와 Spring을 사용한 웹 애플리케이션 코드리뷰 요청", + "deadline": "2023-07-26T12:00", + "tags": ["java", "자바", "스프링", "spring", "hibernate"], + "runnerProfile": { "name": "springGuru_G", "imageUrl": "https://via.placeholder.com/150" }, + "watchedCount": 34, + "applicantCount": 4, + "reviewStatus": "NOT_STARTED" + }, + { + "runnerPostId": 9, + "title": "자바스크립트로 작성한 게임 코드 리뷰 부탁드립니다.", + "deadline": "2023-07-27T15:00", + "tags": ["자바스크립트"], + "runnerProfile": { "name": "gameDev_L", "imageUrl": "https://via.placeholder.com/150" }, + "watchedCount": 34, + "applicantCount": 4, + "reviewStatus": "NOT_STARTED" + }, + { + "runnerPostId": 10, + "title": "자바를 이용한 애플리케이션 코드리뷰 요청드립니다.", + "deadline": "2023-07-30T17:00", + "tags": ["java", "자바"], + "runnerProfile": { "name": "javaNovice_N", "imageUrl": "https://via.placeholder.com/150" }, + "watchedCount": 34, + "applicantCount": 4, + "reviewStatus": "DONE" + }, + { + "runnerPostId": 11, + "title": "React Native로 만든 앱의 코드리뷰 부탁드립니다.", + "deadline": "2023-07-31T11:00", + "tags": ["react", "리액트", "자바스크립트", "react native"], + "runnerProfile": { "name": "mobileDev_M", "imageUrl": "https://via.placeholder.com/150" }, + "watchedCount": 34, + "applicantCount": 4, + "reviewStatus": "IN_PROGRESS" + }, + { + "runnerPostId": 12, + "title": "Spring Security를 사용한 로그인 시스템의 코드리뷰 요청", + "deadline": "2023-08-01T14:00", + "tags": ["java", "자바", "스프링", "spring", "spring security"], + "runnerProfile": { + "name": "securityExpert_S", + "imageUrl": "https://via.placeholder.com/150" + }, + "watchedCount": 34, + "applicantCount": 4, + "reviewStatus": "NOT_STARTED" + } + ], + "pageInfo": { + "isFirst": true, + "isLast": false, + "hasNext": true, + "totalPages": 4, + "totalElements": 48, + "currentPage": 1, + "currentSize": 12 + } +} diff --git a/frontend/src/mocks/data/runnerProfileInfo.json b/frontend/src/mocks/data/runnerProfileInfo.json new file mode 100644 index 000000000..5ff88ad64 --- /dev/null +++ b/frontend/src/mocks/data/runnerProfileInfo.json @@ -0,0 +1,9 @@ +{ + "runnerId": 1, + "name": "헤나(러너)", + "company": "우아한테크코스", + "imageUrl": "https://via.placeholder.com/150", + "githubUrl": "https://", + "introduction": "안녕하세요 헤나입니다.", + "technicalTags": ["java", "spring"] +} diff --git a/frontend/src/mocks/data/supporterCandidate.json b/frontend/src/mocks/data/supporterCandidate.json new file mode 100644 index 000000000..eb3548d00 --- /dev/null +++ b/frontend/src/mocks/data/supporterCandidate.json @@ -0,0 +1,40 @@ +{ + "data": [ + { + "supporterId": 1, + "name": "박정훈", + "company": "두나무", + "imageUrl": "https://api.iconify.design/material-symbols:account-circle.svg", + "reviewCount": 1, + "message": "우아한테크코스 5기를 수료하여 토스에 입사했습니다.\n 토스 결제팀의 리드 개발자입니다.\n 저처럼 킹왕짱 개발자가 되는 법을 전수해드립니다.", + "technicalTags": ["java", "spring"] + }, + { + "supporterId": 2, + "name": "김석호", + "company": "배달의민족", + "imageUrl": "https://api.iconify.design/material-symbols:account-circle.svg", + "reviewCount": 123, + "message": "우아한테크코스 5기를 수료하여 토스에 입사했습니다. 토스 결제팀의 리드 개발자입니다. 저처럼 킹왕짱 개발자가 되는 법을 전수해드립니다.우아한테크코스 5기를 수료하여 토스에 입사했습니다. 토스 결제팀의 리드 개발자입니다. 저처럼 킹왕짱 개발자가 되는 법을 전수해드립니다 우아한테크코스 5기를 수료하여 토스에 입사했습니다. 토스 결제팀의 리드 개발자입니다. 저처럼 킹왕짱 개발자가 되는 법을 전수해드립니다. 우아한테크코스 5기를 수료하여 토스에 입사했습니다. 토스 결제팀의 리드 개발자입니다. 저처럼 킹왕짱 개발자가 되는 법을 전수해드립니다. 우아한테크코스 5기를 수료하여 토스에 입사했습니다. 토스 결제팀의 리드 개발자입니다. 저처럼 킹왕짱 개발자가 되는 법을 전수해드립니다.", + "technicalTags": ["javascript", "react"] + }, + { + "supporterId": 3, + "name": "김석호", + "company": "배달의민족", + "imageUrl": "https://api.iconify.design/material-symbols:account-circle.svg", + "reviewCount": 0, + "message": "빠르게 리뷰해드립니다. 당일 가능.", + "technicalTags": ["javascript", "react"] + }, + { + "supporterId": 4, + "name": "도리토스", + "company": "우테코", + "imageUrl": "https://api.iconify.design/material-symbols:account-circle.svg", + "reviewCount": 30, + "message": "빠르게 리뷰해드립니다.\n 당일 가능.", + "technicalTags": ["javascript", "typescript"] + } + ] +} diff --git a/frontend/src/mocks/data/supporterProfileInfo.json b/frontend/src/mocks/data/supporterProfileInfo.json new file mode 100644 index 000000000..cc42a4b30 --- /dev/null +++ b/frontend/src/mocks/data/supporterProfileInfo.json @@ -0,0 +1,9 @@ +{ + "supporterId": 1, + "name": "헤나(서포터)", + "company": "우아한테크코스", + "imageUrl": "https://", + "githubUrl": "https://", + "introduction": "안녕하세요 스프링 고수 헤나입니다.", + "technicalTags": ["java", "spring"] +} diff --git a/frontend/src/mocks/data/supporterProfilePost.json b/frontend/src/mocks/data/supporterProfilePost.json new file mode 100644 index 000000000..bb74c87d9 --- /dev/null +++ b/frontend/src/mocks/data/supporterProfilePost.json @@ -0,0 +1,31 @@ +{ + "data": [ + { + "runnerPostId": 1, + "title": "이 서포터가 완료한 리뷰 1", + "deadline": "마감기한", + "tags": ["java", "JAVA"], + "watchedCount": 341, + "applicantCount": 4, + "reviewStatus": "DONE" + }, + { + "runnerPostId": 2, + "title": "이 서포터가 완료한 리뷰 2", + "deadline": "마감기한", + "tags": ["java", "JAVA"], + "watchedCount": 34, + "applicantCount": 41, + "reviewStatus": "DONE" + }, + { + "runnerPostId": 3, + "title": "이 서포터가 완료한 리뷰 3", + "deadline": "마감기한", + "tags": ["java", "JAVA"], + "watchedCount": 2224, + "applicantCount": 4, + "reviewStatus": "DONE" + } + ] +} diff --git a/frontend/src/mocks/handlers.ts b/frontend/src/mocks/handlers.ts new file mode 100644 index 000000000..a637db41c --- /dev/null +++ b/frontend/src/mocks/handlers.ts @@ -0,0 +1,152 @@ +import { rest } from 'msw'; +import runnerPostList from './data/runnerPostList.json'; +import runnerPostDetails from './data/runnerPostDetails.json'; +import myPageRunnerProfile from './data/myPageRunnerProfile.json'; +import myPageSupporterProfile from './data/myPageSupporterProfile.json'; +import runnerProfileInfo from './data/runnerProfileInfo.json'; +import supporterProfileInfo from './data/supporterProfileInfo.json'; +import supporterCandidate from './data/supporterCandidate.json'; +import headerProfile from './data/headerProfile.json'; +import supporterProfilePost from './data/supporterProfilePost.json'; +import notStarted from './data/myPagePost/notStarted.json'; +import inProgress from './data/myPagePost/inProgress.json'; +import done from './data/myPagePost/done.json'; + +export const handlers = [ + rest.post('*/posts/runner', async (req, res, ctx) => { + return res(ctx.delay(300), ctx.status(201)); + }), + + rest.get('*/posts/runner', async (req, res, ctx) => { + return res(ctx.delay(300), ctx.status(200), ctx.set('Content-Type', 'application/json'), ctx.json(runnerPostList)); + }), + + rest.get('*/profile/me', async (req, res, ctx) => { + return res(ctx.delay(300), ctx.status(200), ctx.set('Content-Type', 'application/json'), ctx.json(headerProfile)); + }), + + rest.put('*/posts/runner/:runnerPostId', async (req, res, ctx) => { + return res(ctx.delay(300), ctx.status(201)); + }), + + rest.delete('*/posts/runner/:runnerPostId', async (req, res, ctx) => { + return res(ctx.delay(300), ctx.status(204)); + }), + + rest.get('*/posts/runner/:runnerPostId', async (req, res, ctx) => { + return res( + ctx.delay(300), + ctx.status(200), + ctx.set('Content-Type', 'application/json'), + ctx.json(runnerPostDetails), + ); + }), + + rest.post('*/posts/runner', async (req, res, ctx) => { + return res(ctx.delay(300), ctx.status(201)); + }), + + rest.get('*/profile/runner/me', async (req, res, ctx) => { + return res(ctx.status(200), ctx.set('Content-Type', 'application/json'), ctx.json(myPageRunnerProfile)); + }), + + rest.get('*/profile/supporter/me', async (req, res, ctx) => { + return res(ctx.status(200), ctx.set('Content-Type', 'application/json'), ctx.json(myPageSupporterProfile)); + }), + + rest.get('*/posts/runner/me/runner?size&page&reviewStatus', async (req, res, ctx) => { + const reviewStatus = req.url.searchParams.get('reviewStatus'); + + switch (reviewStatus) { + case 'NOT_STARTED': + return res(ctx.status(200), ctx.set('Content-Type', 'application/json'), ctx.json(notStarted)); + + case 'IN_PROGRESS': + return res(ctx.status(200), ctx.set('Content-Type', 'application/json'), ctx.json(inProgress)); + + case 'DONE': + return res(ctx.status(200), ctx.set('Content-Type', 'application/json'), ctx.json(done)); + + default: + return res(ctx.status(200), ctx.set('Content-Type', 'application/json'), ctx.json({})); + } + }), + + rest.get('*/posts/runner/me/supporter?size&page&reviewStatus', async (req, res, ctx) => { + const reviewStatus = req.url.searchParams.get('reviewStatus'); + + switch (reviewStatus) { + case 'NOT_STARTED': + return res(ctx.status(200), ctx.set('Content-Type', 'application/json'), ctx.json(notStarted)); + + case 'IN_PROGRESS': + return res(ctx.status(200), ctx.set('Content-Type', 'application/json'), ctx.json(inProgress)); + + case 'DONE': + return res(ctx.status(200), ctx.set('Content-Type', 'application/json'), ctx.json(done)); + + default: + return res(ctx.status(200), ctx.set('Content-Type', 'application/json'), ctx.json({})); + } + }), + + rest.get('*/profile/runner/me', async (req, res, ctx) => { + return res( + ctx.status(200), + ctx.delay(500), + ctx.set('Content-Type', 'application/json'), + ctx.json(runnerProfileInfo), + ); + }), + + rest.get('*/profile/supporter/me', async (req, res, ctx) => { + return res( + ctx.status(200), + ctx.delay(500), + ctx.set('Content-Type', 'application/json'), + ctx.json(supporterProfileInfo), + ); + }), + + rest.patch('*/profile/runner/me', async (req, res, ctx) => { + return res(ctx.status(200), ctx.set('Content-Type', 'application/json'), ctx.json(runnerProfileInfo)); + }), + + rest.patch('*/profile/supporter/me', async (req, res, ctx) => { + return res(ctx.status(200), ctx.set('Content-Type', 'application/json'), ctx.json(runnerProfileInfo)); + }), + + rest.get('*/posts/runner/:runnerPostId/supporters', async (req, res, ctx) => { + return res(ctx.status(200), ctx.set('Content-Type', 'application/json'), ctx.json(supporterCandidate)); + }), + + rest.patch('*/posts/runner/:runnerPostId/supporters', async (req, res, ctx) => { + return res(ctx.status(200), ctx.set('Content-Type', 'application/json'), ctx.json(supporterCandidate)); + }), + + rest.post('*/feedback/supporter', async (req, res, ctx) => { + const { reviewType, descriptions, supporterId, runnerPostId } = await req.json(); + + return res(ctx.delay(300), ctx.status(201), ctx.set('Content-Type', 'application/json'), ctx.json({})); + }), + + rest.get('*/profile/runner/:runnerId', async (req, res, ctx) => { + return res(ctx.status(200), ctx.set('Content-Type', 'application/json'), ctx.json(runnerProfileInfo)); + }), + + rest.get('*/profile/supporter/:supporterId', async (req, res, ctx) => { + return res(ctx.status(200), ctx.set('Content-Type', 'application/json'), ctx.json(supporterProfileInfo)); + }), + + rest.get('*/posts/runner/search/:supporterId', async (req, res, ctx) => { + return res(ctx.status(200), ctx.set('Content-Type', 'application/json'), ctx.json(supporterProfilePost)); + }), + + rest.post('*/posts/runner/:runnerPostId/application', async (req, res, ctx) => { + return res(ctx.status(201)); + }), + + rest.patch('*/posts/runner/:runnerPostId/cancelation', async (req, res, ctx) => { + return res(ctx.status(201)); + }), +]; diff --git a/frontend/src/mocks/worker.ts b/frontend/src/mocks/worker.ts new file mode 100644 index 000000000..750e031c2 --- /dev/null +++ b/frontend/src/mocks/worker.ts @@ -0,0 +1,4 @@ +import { setupWorker } from 'msw'; +import { handlers } from './handlers'; + +export const worker = setupWorker(...handlers); diff --git a/frontend/src/pages/CreationResultPage.tsx b/frontend/src/pages/CreationResultPage.tsx new file mode 100644 index 000000000..6d7f74a31 --- /dev/null +++ b/frontend/src/pages/CreationResultPage.tsx @@ -0,0 +1,44 @@ +import Layout from '@/layout/Layout'; +import React from 'react'; +import { styled } from 'styled-components'; +import Button from '@/components/common/Button/Button'; +import { usePageRouter } from '@/hooks/usePageRouter'; + +const CreationResultPage = () => { + const { goToMainPage } = usePageRouter(); + + return ( + <Layout> + <S.ResultMessageContainer> + <S.ResultMessage>리뷰 요청 글이 생성되었어요.</S.ResultMessage> + <S.ResultMessage>선택한 서포터가 확인 후 코드 리뷰를 진행할 예정입니다😄</S.ResultMessage> + <Button onClick={goToMainPage} colorTheme="WHITE"> + 홈으로 가기 + </Button> + </S.ResultMessageContainer> + </Layout> + ); +}; + +export default CreationResultPage; + +const S = { + ResultMessageContainer: styled.div` + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + gap: 30px; + + min-height: 80vh; + + & button { + margin-top: 30px; + } + `, + + ResultMessage: styled.p` + font-size: 28px; + font-weight: 700; + `, +}; diff --git a/frontend/src/pages/GithubCallbackPage.tsx b/frontend/src/pages/GithubCallbackPage.tsx new file mode 100644 index 000000000..cc4861a48 --- /dev/null +++ b/frontend/src/pages/GithubCallbackPage.tsx @@ -0,0 +1,61 @@ +import { ACCESS_TOKEN_LOCAL_STORAGE_KEY } from '@/constants'; +import { useToken } from '@/hooks/useToken'; +import { usePageRouter } from '@/hooks/usePageRouter'; +import React, { useContext, useEffect } from 'react'; +import { useLocation } from 'react-router-dom'; +import { getRequest } from '@/api/fetch'; +import { ToastContext } from '@/contexts/ToastContext'; +import { ERROR_DESCRIPTION, ERROR_TITLE, TOAST_ERROR_MESSAGE } from '@/constants/message'; + +function GithubCallbackPage() { + const location = useLocation(); + + const { showErrorToast } = useContext(ToastContext); + + const { goToMainPage, goToLoginPage } = usePageRouter(); + const { saveToken } = useToken(); + + useEffect(() => { + const searchParams = new URLSearchParams(location.search); + const code = searchParams.get('code'); + const error = searchParams.get('error'); + + if (error) { + showErrorToast(TOAST_ERROR_MESSAGE.LOGIN); + + goToLoginPage(); + } + + if (code) { + getToken(code); + } + }, [location]); + + const getToken = (code: string) => { + if (localStorage.getItem(ACCESS_TOKEN_LOCAL_STORAGE_KEY) === null) { + getRequest(`/oauth/login/github?code=${code}`) + .then(async (response) => { + const jwt = await response.headers.get('Authorization'); + + if (!jwt) { + showErrorToast(TOAST_ERROR_MESSAGE.NO_TOKEN); + + return; + } + + saveToken(jwt); + goToMainPage(); + }) + .catch((error: Error) => { + const description = error instanceof Error ? error.message : ERROR_DESCRIPTION.UNEXPECTED; + showErrorToast({ title: ERROR_TITLE.REQUEST, description }); + + goToLoginPage(); + }); + } + }; + + return <div>GithubRedirect...</div>; +} + +export default GithubCallbackPage; diff --git a/frontend/src/pages/LoginPage.tsx b/frontend/src/pages/LoginPage.tsx new file mode 100644 index 000000000..86b267615 --- /dev/null +++ b/frontend/src/pages/LoginPage.tsx @@ -0,0 +1,106 @@ +import Layout from '@/layout/Layout'; +import React from 'react'; +import { styled } from 'styled-components'; +import LogoImage from '@/assets/logo-image.svg'; +import GithubIcon from '@/assets/github-icon.svg'; +import { BATON_BASE_URL } from '@/constants'; +import { usePageRouter } from '@/hooks/usePageRouter'; + +const LoginPage = () => { + const { goToMainPage } = usePageRouter(); + + const handleLoginButton = () => { + window.location.href = `${BATON_BASE_URL}/oauth/github`; + }; + + return ( + <S.LoginContainer> + <S.Logo src={LogoImage} onClick={goToMainPage} /> + <S.LoginBoxContainer> + <S.LoginBoxText>코드 리뷰를 위해 github로 로그인 해주세요</S.LoginBoxText> + <S.LoginBoxGithubIcon src={GithubIcon} /> + <S.LoginButton onClick={handleLoginButton}> + <S.LoginButtonIcon src={GithubIcon} /> + <S.LoginButtonText>Sign in with github</S.LoginButtonText> + </S.LoginButton> + </S.LoginBoxContainer> + </S.LoginContainer> + ); +}; + +export default LoginPage; + +const S = { + LoginContainer: styled.div` + display: flex; + align-items: center; + justify-content: center; + flex-direction: column; + gap: 30px; + + height: calc(100vh - 80px); + min-height: 570px; + + overflow-y: hidden; + `, + + Logo: styled.img` + width: 300px; + height: 80px; + + cursor: pointer; + `, + + LoginBoxContainer: styled.div` + display: flex; + flex-direction: column; + align-items: center; + gap: 37px; + + width: 450px; + min-height: 400px; + padding: 35px; + border-radius: 10px; + border: 1px solid var(--gray-700); + `, + + LoginBoxText: styled.div` + font-weight: 700; + font-size: 18px; + `, + + LoginBoxGithubIcon: styled.img` + width: 180px; + height: 180px; + `, + + LoginButton: styled.a` + display: flex; + justify-content: space-between; + align-items: center; + gap: 6px; + + width: 370px; + height: 60px; + padding: 0 45px; + border: 1px solid var(--gray-800); + border-radius: 5px; + + background-color: transparent; + + font-weight: 700; + font-size: 14px; + + cursor: pointer; + `, + + LoginButtonIcon: styled.img` + width: 35px; + height: 35px; + `, + + LoginButtonText: styled.div` + font-size: 19px; + margin-right: 40px; + `, +}; diff --git a/frontend/src/pages/MainPage.tsx b/frontend/src/pages/MainPage.tsx new file mode 100644 index 000000000..7cf536ce4 --- /dev/null +++ b/frontend/src/pages/MainPage.tsx @@ -0,0 +1,148 @@ +import { getRequest } from '@/api/fetch'; +import RunnerPostList from '@/components/RunnerPost/RunnerPostList/RunnerPostList'; +import Button from '@/components/common/Button/Button'; +import { ERROR_DESCRIPTION, ERROR_TITLE } from '@/constants/message'; +import { ToastContext } from '@/contexts/ToastContext'; +import { usePageRouter } from '@/hooks/usePageRouter'; +import { useToken } from '@/hooks/useToken'; +import Layout from '@/layout/Layout'; +import { GetRunnerPostResponse, RunnerPost } from '@/types/runnerPost'; +import React, { useContext, useEffect, useState } from 'react'; +import { styled } from 'styled-components'; + +const MainPage = () => { + const { goToRunnerPostCreatePage, goToLoginPage } = usePageRouter(); + + const { getToken } = useToken(); + + const { showErrorToast } = useContext(ToastContext); + + const [runnerPostList, setRunnerPostList] = useState<RunnerPost[]>([]); + const [isLast, setIsLast] = useState<boolean>(true); + const [page, setPage] = useState<number>(1); + + const handleClickMoreButton = () => { + setPage(page + 1); + + getRunnerPost(); + }; + + useEffect(() => { + getRunnerPost(); + }, []); + + const handleClickPostButton = () => { + if (getToken()) { + goToRunnerPostCreatePage(); + + return; + } + + goToLoginPage(); + }; + + const getRunnerPost = () => { + getRequest(`/posts/runner?size=10&page=${page}`) + .then(async (response) => { + const data: GetRunnerPostResponse = await response.json(); + setRunnerPostList([...runnerPostList, ...data.data]); + setIsLast(data.pageInfo.isLast); + }) + .catch((error: Error) => showErrorToast({ description: error.message, title: ERROR_TITLE.REQUEST })); + }; + + return ( + <Layout> + <S.TitleWrapper> + <S.Title>서포터를 찾고 있어요 👀</S.Title> + </S.TitleWrapper> + <S.ControlPanelContainer> + <S.LeftSideContainer> + {/* <S.FormContainer> + <S.SearchLabel htmlFor="search-tag">#tags</S.SearchLabel> + <S.SearchInput id="search-tag" type="text" placeholder="태그명 검색 (최대 5개 설정 가능)" /> + </S.FormContainer> + <S.TagContainer> + <Tag>자바</Tag> + <Tag>javascript</Tag> + <Tag>react</Tag> + </S.TagContainer> */} + </S.LeftSideContainer> + + <Button onClick={handleClickPostButton} colorTheme="WHITE" fontSize="18px" ariaLabel="리뷰 요청 글 작성하기"> + 리뷰 요청 글 작성하기 + </Button> + </S.ControlPanelContainer> + <S.RunnerPostContainer> + <RunnerPostList posts={runnerPostList} /> + {!isLast && ( + <Button colorTheme="RED" width="1200px" height="55px" onClick={handleClickMoreButton}> + 더보기 + </Button> + )} + </S.RunnerPostContainer> + </Layout> + ); +}; + +export default MainPage; + +const S = { + TitleWrapper: styled.header` + margin: 72px 0 53px 0; + `, + Title: styled.h1` + font-size: 36px; + font-weight: 700; + `, + ControlPanelContainer: styled.div` + display: flex; + justify-content: space-between; + align-items: end; + + margin-bottom: 36px; + `, + + LeftSideContainer: styled.div` + display: flex; + align-items: end; + gap: 20px; + `, + + FormContainer: styled.form` + display: flex; + flex-direction: column; + align-items: start; + `, + + SearchInput: styled.input` + width: 263px; + height: 40px; + padding: 10px 10px; + + font-size: 14px; + + border-radius: 6px; + border: 1px solid var(--gray-500); + `, + + SearchLabel: styled.label` + margin-bottom: 12px; + + font-size: 18px; + `, + + TagContainer: styled.div` + display: flex; + + margin-bottom: 3px; + gap: 10px; + `, + + RunnerPostContainer: styled.div` + display: flex; + flex-direction: column; + align-items: center; + gap: 50px; + `, +}; diff --git a/frontend/src/pages/MyPage.tsx b/frontend/src/pages/MyPage.tsx new file mode 100644 index 000000000..37a8e8d88 --- /dev/null +++ b/frontend/src/pages/MyPage.tsx @@ -0,0 +1,288 @@ +import ListFilter from '@/components/ListFilter/ListFilter'; +import TechLabel from '@/components/TechLabel/TechLabel'; +import Avatar from '@/components/common/Avatar/Avatar'; +import Button from '@/components/common/Button/Button'; +import { useToken } from '@/hooks/useToken'; +import Layout from '@/layout/Layout'; +import { GetMyPagePostResponse, GetMyPageProfileResponse, MyPagePost } from '@/types/myPage'; +import React, { useContext, useEffect, useState } from 'react'; +import styled from 'styled-components'; +import githubIcon from '@/assets/github-icon.svg'; +import MyPagePostList from '@/components/MyPage/MyPagePostList/MyPagePostList'; +import { getRequest } from '@/api/fetch'; +import { PostOptions, runnerPostOptions, supporterPostOptions } from '@/utils/postOption'; +import { ToastContext } from '@/contexts/ToastContext'; +import { ERROR_TITLE } from '@/constants/message'; +import { usePageRouter } from '@/hooks/usePageRouter'; + +const MyPage = () => { + const [myPageProfile, setMyPageProfile] = useState<GetMyPageProfileResponse | null>(null); + const [myPagePostList, setMyPagePostList] = useState<MyPagePost[]>([]); + + const [postOptions, setPostOptions] = useState<PostOptions>(runnerPostOptions); + + const [isRunner, setIsRunner] = useState<boolean>(true); + + const [page, setPage] = useState<number>(1); + const [isLast, setIsLast] = useState<boolean>(true); + + const { getToken } = useToken(); + const { goToProfileEditPage } = usePageRouter(); + const { showErrorToast } = useContext(ToastContext); + + useEffect(() => { + const fetchMyPageData = async (role: 'runner' | 'supporter') => { + setIsLast(() => true); + setPage(1); + + getProfile(role); + getPostList(role); + }; + + fetchMyPageData(isRunner ? 'runner' : 'supporter'); + }, [isRunner, postOptions]); + + const getProfile = (role: 'runner' | 'supporter') => { + const token = getToken()?.value; + if (!token) return; + + getRequest(`/profile/${role}/me`, token) + .then(async (response) => { + const data: GetMyPageProfileResponse = await response.json(); + + setMyPageProfile(data); + }) + .catch((error: Error) => showErrorToast({ title: ERROR_TITLE.REQUEST, description: error.message })); + }; + + const getPostList = (role: 'runner' | 'supporter') => { + const token = getToken()?.value; + if (!token) return; + + const selectedPostOption = postOptions.filter((option) => option.selected)[0].value; + + const rolePath = + role === 'runner' + ? `runner/me/runner?size=10&page=${page}&reviewStatus=${selectedPostOption}` + : `runner/me/supporter?size=10&page=${page}&reviewStatus=${selectedPostOption}`; + + getRequest(`/posts/${rolePath}`, token) + .then(async (response) => { + const data: GetMyPagePostResponse = await response.json(); + + setMyPagePostList(data.pageInfo.currentPage === 1 ? data.data : (current) => [...current, ...data.data]); + setPage(() => data.pageInfo.currentPage); + setIsLast(data.pageInfo.isLast); + }) + .catch((error: Error) => showErrorToast({ title: ERROR_TITLE.REQUEST, description: error.message })); + }; + + const selectOptions = (value: string | number) => { + const selectedOptionIndex = postOptions.findIndex((option) => option.value === value); + if (selectedOptionIndex === -1) return; + + const newOptions = postOptions.map((option, index) => { + if (index === selectedOptionIndex) return { ...option, selected: true }; + return { ...option, selected: false }; + }); + + setPostOptions(newOptions); + }; + + const handleClickSupporterButton = () => { + setPostOptions(isRunner ? runnerPostOptions : supporterPostOptions); + setIsRunner(!isRunner); + }; + + const handleClickMoreButton = () => { + const role = isRunner ? 'runner' : 'supporter'; + + setPage(() => page + 1); + getPostList(role); + }; + + return ( + <Layout> + <S.ProfileContainer> + <S.InfoContainer> + <Avatar + imageUrl={myPageProfile?.imageUrl || 'https://via.placeholder.com/150'} + width="100px" + height="100px" + /> + <S.InfoDetailContainer> + <S.Name>{myPageProfile?.name}</S.Name> + <S.Company>{myPageProfile?.company}</S.Company> + <S.TechLabel> + {myPageProfile?.technicalTags.map((tag) => ( + <TechLabel key={tag} tag={tag} /> + ))} + </S.TechLabel> + </S.InfoDetailContainer> + </S.InfoContainer> + <S.ButtonContainer> + <S.RunnerSupporterButton $isSelected={isRunner} onClick={handleClickSupporterButton}> + 러너 + </S.RunnerSupporterButton> + <S.RunnerSupporterButton $isSelected={!isRunner} onClick={handleClickSupporterButton}> + 서포터 + </S.RunnerSupporterButton> + </S.ButtonContainer> + </S.ProfileContainer> + + <S.IntroductionContainer> + <S.Introduction>{myPageProfile?.introduction}</S.Introduction> + <Button + width="95px" + height="38px" + colorTheme="WHITE" + fontSize="16px" + fontWeight={400} + onClick={goToProfileEditPage} + > + 수정하기 + </Button> + </S.IntroductionContainer> + + <S.PostsContainer> + <S.FilterWrapper> + <ListFilter options={postOptions} selectOption={selectOptions} /> + </S.FilterWrapper> + <MyPagePostList filteredPostList={myPagePostList} isRunner={isRunner} /> + <S.MoreButtonWrapper> + {!isLast && ( + <Button colorTheme="RED" width="1200px" height="55px" onClick={handleClickMoreButton}> + 더보기 + </Button> + )} + </S.MoreButtonWrapper> + </S.PostsContainer> + </Layout> + ); +}; + +export default MyPage; + +const S = { + TitleContainer: styled.div` + display: flex; + justify-content: space-between; + align-items: end; + `, + + Title: styled.h1` + font-size: 36px; + font-weight: 700; + `, + + ProfileContainer: styled.div` + display: flex; + justify-content: space-between; + align-items: flex-start; + + margin-top: 70px; + margin-bottom: 50px; + `, + + InfoContainer: styled.div` + display: flex; + align-items: center; + + gap: 20px; + `, + + InfoDetailContainer: styled.div` + display: flex; + flex-direction: column; + gap: 10px; + + margin: 30px 0; + `, + + Name: styled.div` + font-size: 26px; + font-weight: 700; + `, + + Company: styled.div` + font-size: 18px; + `, + + TechLabel: styled.div` + display: flex; + gap: 8px; + `, + + ButtonContainer: styled.div` + display: flex; + align-items: center; + justify-content: space-between; + gap: 10px; + + margin-top: 30px; + `, + + RunnerSupporterButton: styled.button<{ $isSelected: boolean }>` + display: flex; + justify-content: center; + align-items: center; + + width: 95px; + height: 38px; + border-radius: 18px; + border: 1px solid ${({ $isSelected }) => ($isSelected ? 'white' : 'var(--baton-red)')}; + + background-color: ${({ $isSelected }) => ($isSelected ? 'var(--baton-red)' : 'white')}; + + color: ${({ $isSelected }) => ($isSelected ? 'white' : 'var(--baton-red)')}; + `, + + IntroductionContainer: styled.div` + display: flex; + justify-content: space-between; + align-items: end; + + margin-bottom: 50px; + `, + + Introduction: styled.div` + position: relative; + display: flex; + flex-wrap: wrap; + gap: 9px 7px; + + margin-left: 40px; + width: 75%; + + &::before { + position: absolute; + content: ''; + + left: -30px; + height: 100%; + width: 4.5px; + border-radius: 2px; + + background-color: var(--gray-400); + } + + font-size: 18px; + line-height: 1.8; + + white-space: pre-line; + `, + + PostsContainer: styled.div` + display: flex; + flex-direction: column; + align-items: center; + `, + + FilterWrapper: styled.div` + padding: 80px 20px; + `, + + MoreButtonWrapper: styled.div` + margin-top: 50px; + `, +}; diff --git a/frontend/src/pages/ProfileEditPage.tsx b/frontend/src/pages/ProfileEditPage.tsx new file mode 100644 index 000000000..55bfadaf7 --- /dev/null +++ b/frontend/src/pages/ProfileEditPage.tsx @@ -0,0 +1,469 @@ +import { getRequest, patchRequest } from '@/api/fetch'; +import InputBox from '@/components/InputBox/InputBox'; +import TechLabelButton from '@/components/TechLabelButton/TechLabelButton'; +import TechTagSelectModal from '@/components/TechTagSelectModal/TechTagSelectModal'; +import TextArea from '@/components/Textarea/Textarea'; +import Avatar from '@/components/common/Avatar/Avatar'; +import Button from '@/components/common/Button/Button'; +import { ERROR_DESCRIPTION, ERROR_TITLE, TOAST_COMPLETION_MESSAGE, TOAST_ERROR_MESSAGE } from '@/constants/message'; +import { ToastContext } from '@/contexts/ToastContext'; +import { useToken } from '@/hooks/useToken'; +import Layout from '@/layout/Layout'; +import { + Profile, + PatchRunnerProfileRequest, + GetRunnerProfileResponse, + PatchSupporterProfileRequest, + GetSupporterProfileResponse, +} from '@/types/profile'; +import { Technic } from '@/types/tags'; +import { deepEqual } from '@/utils/object'; +import { validateCompany, validateIntroduction, validateName } from '@/utils/validate'; +import React, { useContext, useEffect, useState } from 'react'; +import styled from 'styled-components'; + +const ProfileEditPage = () => { + const { getToken } = useToken(); + + const { showErrorToast, showCompletionToast } = useContext(ToastContext); + + const [isRunner, setIsRunner] = useState(true); + + const [runnerProfile, setRunnerProfile] = useState<GetRunnerProfileResponse | null>(null); + const [supporterProfile, setSupporterProfile] = useState<GetSupporterProfileResponse | null>(null); + + const [name, setName] = useState<string | null>(null); + const [company, setCompany] = useState<string | null>(null); + const [introduction, setIntroduction] = useState<string | null>(null); + const [technicalTags, setTechnicalTags] = useState<Technic[] | null>(null); + + const [isModalOpen, setIsModalOpen] = useState(false); + + useEffect(() => { + getRunnerProfile(); + getSupporterProfile(); + }, []); + + const getRunnerProfile = () => { + const token = getToken()?.value; + if (!token) return; + + getRequest(`/profile/runner/me`, token).then(async (response) => { + const data: GetRunnerProfileResponse = await response.json(); + setRunnerProfile(data); + + if (isRunner) { + updateProfileInputValue(data); + } + }); + }; + + const getSupporterProfile = () => { + const token = getToken()?.value; + if (!token) return; + + getRequest(`/profile/supporter/me`, token).then(async (response) => { + const data: GetSupporterProfileResponse = await response.json(); + setSupporterProfile(data); + + if (!isRunner) { + updateProfileInputValue(data); + } + }); + }; + + const isModified = isRunner + ? !deepEqual({ ...runnerProfile }, { ...runnerProfile, name, company, introduction, technicalTags }) + : !deepEqual({ ...supporterProfile }, { ...supporterProfile, name, company, introduction, technicalTags }); + + const isLoading = isRunner ? !!runnerProfile : !!supporterProfile; + + const handleChangeName = (e: React.ChangeEvent<HTMLInputElement>) => { + if (e.target.value === ' ') { + e.target.value = ''; + } + + setName(e.target.value); + }; + + const handleChangeCompany = (e: React.ChangeEvent<HTMLInputElement>) => { + if (e.target.value === ' ') { + e.target.value = ''; + } + + setCompany(e.target.value); + }; + + const handleChangeIntroduction = (e: React.ChangeEvent<HTMLTextAreaElement>) => { + const newIntroduction = e.target.value.replace(`\n\n\n`, `\n\n`); + setIntroduction(newIntroduction); + }; + + const popTag = (tag: Technic) => { + if (!technicalTags) return; + + const newTags = technicalTags.filter((item) => tag !== item); + setTechnicalTags(newTags); + }; + + const updateProfileInputValue = (profile: Profile) => { + const newProfile = structuredClone(profile); + + setName(newProfile.name); + setCompany(newProfile.company); + setIntroduction(newProfile.introduction); + setTechnicalTags([...newProfile.technicalTags].sort()); + }; + + const handleClickSaveButton = (e: React.MouseEvent<HTMLButtonElement>) => { + e.preventDefault(); + + isRunner ? saveRunnerProfile() : saveSupporterProfile(); + }; + + const validateModification = () => { + validateName(name); + validateCompany(company); + validateIntroduction(introduction); + }; + + const saveRunnerProfile = () => { + if (!isModified) return; + + if (!runnerProfile || !technicalTags) return; + + try { + validateModification(); + } catch (error) { + return showErrorToast({ + description: error instanceof Error ? error.message : ERROR_DESCRIPTION.UNEXPECTED, + title: ERROR_TITLE.VALIDATION, + }); + } + + if (!name || !company || !introduction) return; + const newInfo = { name: name.trim(), company: company.trim(), introduction: introduction.trim(), technicalTags }; + + setRunnerProfile({ ...runnerProfile, ...newInfo }); + updateProfileInputValue({ ...runnerProfile, ...newInfo }); + patchRunnerProfile(newInfo); + }; + + const saveSupporterProfile = () => { + if (!isModified) return; + + if (!supporterProfile || !technicalTags) return; + + try { + validateModification(); + } catch (error) { + return showErrorToast({ + description: error instanceof Error ? error.message : ERROR_DESCRIPTION.UNEXPECTED, + title: ERROR_TITLE.VALIDATION, + }); + } + + if (!name || !company || !introduction) return; + const newInfo = { name: name.trim(), company: company.trim(), introduction: introduction.trim(), technicalTags }; + + setSupporterProfile({ ...supporterProfile, ...newInfo }); + updateProfileInputValue({ ...supporterProfile, ...newInfo }); + patchSupporterProfile(newInfo); + }; + + const confirmTagSelect = (tags: Technic[]) => { + setTechnicalTags([...tags]); + closeModal(); + }; + + const handleClickRunnerButton = (e: React.MouseEvent<HTMLButtonElement>) => { + e.preventDefault(); + + if (isRunner) return; + + if (!runnerProfile) return showErrorToast(TOAST_ERROR_MESSAGE.NO_PROFILE); + + if (isModified) { + if (!confirm('저장하지 않고 러너 프로필로 이동할까요?')) return; + } + + setIsRunner(true); + updateProfileInputValue(runnerProfile); + }; + + const handleClickSupporterButton = (e: React.MouseEvent<HTMLButtonElement>) => { + e.preventDefault(); + + if (!isRunner) return; + + if (!supporterProfile) return showErrorToast(TOAST_ERROR_MESSAGE.NO_PROFILE); + + if (isModified) { + if (!confirm('저장하지 않고 서포터 프로필로 이동할까요?')) return; + } + + setIsRunner(false); + updateProfileInputValue(supporterProfile); + }; + + const openModal = () => { + setIsModalOpen(true); + }; + + const closeModal = () => { + setIsModalOpen(false); + }; + + const patchRunnerProfile = async (runnerProfile: PatchRunnerProfileRequest) => { + const token = getToken()?.value; + if (!token) return; + + const body = JSON.stringify(runnerProfile); + + patchRequest(`/profile/runner/me`, token, body) + .then(() => showCompletionToast(TOAST_COMPLETION_MESSAGE.SAVE)) + .catch((error) => showErrorToast({ title: ERROR_TITLE.REQUEST, description: error.message })); + }; + + const patchSupporterProfile = async (supporterProfile: PatchSupporterProfileRequest) => { + const token = getToken()?.value; + if (!token) return; + + const body = JSON.stringify(supporterProfile); + + await patchRequest(`/profile/supporter/me`, token, body) + .then(() => showCompletionToast(TOAST_COMPLETION_MESSAGE.SAVE)) + .catch((error: Error) => showErrorToast({ title: ERROR_TITLE.REQUEST, description: error.message })); + }; + + return ( + <Layout> + <S.TitleWrapper> + <S.Title>프로필 수정</S.Title> + </S.TitleWrapper> + <S.ProfileContainer> + {isLoading ? ( + <S.Form> + <S.AvatarWrapper> + <Avatar + width="150px" + height="150px" + imageUrl={runnerProfile?.imageUrl ?? 'https://via.placeholder.com/150'} + /> + </S.AvatarWrapper> + <S.ButtonContainer> + <S.RunnerSupporterButton $isSelected={isRunner} onClick={isRunner ? undefined : handleClickRunnerButton}> + 러너 + </S.RunnerSupporterButton> + <S.RunnerSupporterButton + $isSelected={!isRunner} + onClick={isRunner ? handleClickSupporterButton : undefined} + > + 서포터 + </S.RunnerSupporterButton> + </S.ButtonContainer> + <S.SaveButtonWrapper> + <Button + width="80px" + height="37px" + colorTheme={isModified ? 'WHITE' : 'GRAY'} + onClick={handleClickSaveButton} + fontSize="16px" + fontWeight={400} + > + 저장 + </Button> + </S.SaveButtonWrapper> + <S.InputContainer> + <S.InputName>이름</S.InputName> + <S.InputWrapper> + <InputBox + value={name ?? undefined} + inputTextState={name ?? ''} + maxLength={10} + maxLengthFontSize="12px" + handleInputTextState={handleChangeName} + placeholder="이름을 입력하세요" + /> + </S.InputWrapper> + </S.InputContainer> + <S.InputContainer> + <S.InputName>소속</S.InputName> + <S.InputWrapper> + <InputBox + value={company ?? undefined} + inputTextState={company ?? ''} + maxLength={20} + maxLengthFontSize="12px" + handleInputTextState={handleChangeCompany} + placeholder="소속을 입력하세요" + /> + </S.InputWrapper> + </S.InputContainer> + <S.InputContainer> + <S.InputName>자기소개</S.InputName> + <S.InputWrapper> + <TextArea + value={introduction ?? undefined} + inputTextState={introduction ?? ''} + fontSize="18px" + width="400px" + height="200px" + padding="0" + maxLength={200} + handleInputTextState={handleChangeIntroduction} + placeholder="자기소개를 입력하세요" + /> + </S.InputWrapper> + </S.InputContainer> + <S.InputContainer> + <S.InputName> + {isRunner ? <pre>{`학습하고 싶은 \n기술스택`}</pre> : <pre>{`자신있는 \n기술스택`}</pre>} + </S.InputName> + <S.TechTagsList> + {technicalTags?.map((tag) => ( + <S.TagButtonWrapper key={tag}> + <TechLabelButton tag={tag} handleClickTag={popTag} isDeleteButton={true} /> + </S.TagButtonWrapper> + ))} + <S.AddTagButton type="button" onClick={openModal}> + + + </S.AddTagButton> + </S.TechTagsList> + </S.InputContainer> + </S.Form> + ) : ( + 'Loading' + )} + </S.ProfileContainer> + + {isModalOpen && ( + <TechTagSelectModal + closeModal={closeModal} + confirmTagSelect={confirmTagSelect} + defaultTags={technicalTags ?? undefined} + /> + )} + </Layout> + ); +}; + +export default ProfileEditPage; + +const S = { + TitleWrapper: styled.div` + margin: 72px 0 53px 0; + `, + + Title: styled.h1` + font-size: 36px; + font-weight: 700; + `, + + ProfileContainer: styled.div` + width: 900px; + + margin: 0 auto; + `, + + InputContainer: styled.div` + display: flex; + justify-content: start; + gap: 50px; + `, + + Form: styled.form` + display: flex; + flex-direction: column; + align-items: center; + + gap: 30px; + `, + + AvatarWrapper: styled.div``, + + SaveButtonWrapper: styled.div` + display: flex; + justify-content: end; + + width: 600px; + padding-bottom: 30px; + `, + + InputName: styled.div` + display: flex; + align-items: start; + + width: 100px; + padding: 5px 0; + + color: var(--gray-800); + font-size: 20px; + font-weight: 500; + line-height: 130%; + `, + + DeadlineContainer: styled.div` + display: flex; + + gap: 20px; + `, + + TechTagsList: styled.ul` + display: flex; + flex-wrap: wrap; + align-content: flex-start; + gap: 10px 8px; + + width: 400px; + height: 100px; + padding: 5px 0; + `, + + ButtonContainer: styled.div` + display: flex; + justify-content: center; + gap: 15px; + + margin-bottom: 10px; + `, + + InputWrapper: styled.div` + border-bottom: 1px solid var(--gray-200); + `, + + RunnerSupporterButton: styled.button<{ $isSelected: boolean }>` + display: flex; + justify-content: center; + align-items: center; + + width: 90px; + height: 38px; + border-radius: 18px; + border: 1px solid ${({ $isSelected }) => ($isSelected ? 'white' : 'var(--baton-red)')}; + + background-color: ${({ $isSelected }) => ($isSelected ? 'var(--baton-red)' : 'white')}; + + color: ${({ $isSelected }) => ($isSelected ? 'white' : 'var(--baton-red)')}; + `, + + TagButtonWrapper: styled.li` + height: 32px; + `, + + AddTagButton: styled.button` + display: flex; + justify-content: center; + align-items: center; + + width: 100px; + height: 32px; + border-radius: 14px; + + background: var(--gray-400); + + color: white; + font-size: 23px; + font-weight: 300; + `, +}; diff --git a/frontend/src/pages/RunnerPostCreatePage.tsx b/frontend/src/pages/RunnerPostCreatePage.tsx new file mode 100644 index 000000000..cc853edbb --- /dev/null +++ b/frontend/src/pages/RunnerPostCreatePage.tsx @@ -0,0 +1,263 @@ +import InputBox from '@/components/InputBox/InputBox'; +import TagInput from '@/components/TagInput/TagInput'; +import TextArea from '@/components/Textarea/Textarea'; +import Button from '@/components/common/Button/Button'; +import { usePageRouter } from '@/hooks/usePageRouter'; +import Layout from '@/layout/Layout'; +import React, { useContext, useState } from 'react'; +import { styled } from 'styled-components'; +import { CreateRunnerPostRequest } from '@/types/runnerPost'; +import { useToken } from '@/hooks/useToken'; +import { addDays, addHours, getDatetime, getDayLastTime, isPastTime } from '@/utils/date'; +import { postRequest } from '@/api/fetch'; +import { validateDeadline, validatePullRequestUrl, validateTags, validateTitle } from '@/utils/validate'; +import { ERROR_DESCRIPTION, ERROR_TITLE } from '@/constants/message'; +import { ToastContext } from '@/contexts/ToastContext'; + +const RunnerPostCreatePage = () => { + const nowDate = new Date(); + + const { goBack, goToCreationResultPage } = usePageRouter(); + const { getToken } = useToken(); + + const { showErrorToast } = useContext(ToastContext); + + const [tags, setTags] = useState<string[]>([]); + const [title, setTitle] = useState<string>(''); + const [pullRequestUrl, setPullRequestUrl] = useState<string>(''); + const [deadline, setDeadline] = useState<string>(getDayLastTime(addDays(nowDate, 1))); + const [contents, setContents] = useState<string>(''); + + const pushTag = (newTag: string) => { + const newTags = [...tags, newTag]; + + try { + validateTags(newTags); + } catch (error) { + const description = error instanceof Error ? error.message : ERROR_DESCRIPTION.UNEXPECTED; + showErrorToast({ title: ERROR_TITLE.VALIDATION, description }); + + return; + } + + setTags(newTags); + }; + + const removeTag = (tag?: string) => { + if (!tag) { + setTags((current) => current.slice(0, -1)); + return; + } + + const newTags = tags.filter((item) => item !== tag); + setTags(newTags); + }; + + const changeTitle = (e: React.ChangeEvent<HTMLInputElement>) => { + setTitle(e.target.value.trim()); + }; + + const changePullRequestUrl = (e: React.ChangeEvent<HTMLInputElement>) => { + setPullRequestUrl(e.target.value); + }; + + const changeDeadline = (e: React.ChangeEvent<HTMLInputElement>) => { + try { + validateDeadline(e.target.value); + } catch (error) { + const newDeadline = getDatetime(addHours(nowDate, 1)); + setDeadline(newDeadline); + + const description = error instanceof Error ? error.message : ERROR_DESCRIPTION.UNEXPECTED; + return showErrorToast({ title: ERROR_TITLE.VALIDATION, description }); + } + setDeadline(e.target.value); + }; + + const changeContents = (e: React.ChangeEvent<HTMLTextAreaElement>) => { + setContents(e.target.value); + }; + + const cancelPostWrite = (e: React.MouseEvent<HTMLButtonElement>) => { + e.preventDefault(); + + goBack(); + }; + + const goToNextForm = () => { + try { + validateInputs(); + } catch (error) { + const description = error instanceof Error ? error.message : ERROR_DESCRIPTION.UNEXPECTED; + return showErrorToast({ title: ERROR_TITLE.VALIDATION, description }); + } + + submitForm(); + }; + + const validateInputs = () => { + validateTitle(title); + validateTags(tags); + validatePullRequestUrl(pullRequestUrl); + validateDeadline(deadline); + }; + + const postRunnerForm = (data: CreateRunnerPostRequest) => { + const token = getToken()?.value; + if (!token) return; + + const body = JSON.stringify(data); + + postRequest(`/posts/runner`, token, body) + .then(async () => { + goToCreationResultPage(); + }) + .catch((error: Error) => { + const description = error instanceof Error ? error.message : ERROR_DESCRIPTION.UNEXPECTED; + showErrorToast({ title: ERROR_TITLE.REQUEST, description }); + }); + }; + + const submitForm = async () => { + const postData: CreateRunnerPostRequest = { + tags, + title, + pullRequestUrl, + deadline, + contents, + }; + + await postRunnerForm(postData); + }; + + return ( + <Layout> + <S.FormContainer> + <S.Form> + <S.InputContainer> + <InputBox + inputTextState={title} + handleInputTextState={changeTitle} + maxLength={30} + width="800px" + height="40px" + fontSize="38px" + fontWeight="700" + placeholder="제목을 입력해주세요" + autoFocus={true} + /> + </S.InputContainer> + <S.InputContainer> + <TagInput tags={tags} pushTag={pushTag} popTag={removeTag} width="100%" /> + </S.InputContainer> + + <S.InputContainer> + <InputBox + inputTextState={pullRequestUrl} + handleInputTextState={changePullRequestUrl} + width="500px" + placeholder="코드 리뷰받을 PR 주소를 입력해주세요" + /> + </S.InputContainer> + + <S.InputContainer> + <S.InputName>마감기한</S.InputName> + <S.Deadline + type="datetime-local" + value={deadline} + max={getDatetime(addDays(nowDate, 365))} + min={getDatetime(nowDate)} + onChange={changeDeadline} + /> + </S.InputContainer> + <TextArea + inputTextState={contents} + width="1200px" + height="340px" + maxLength={500} + handleInputTextState={changeContents} + placeholder="> 리뷰어가 작성된 코드의 의미를 파악할 수 있도록 내용을 작성해주시면 더 나은 리뷰가 될 수 있어요 :)" + /> + + <S.ButtonContainer> + <Button type="button" onClick={cancelPostWrite} colorTheme="GRAY" fontWeight={700}> + 취소 + </Button> + <Button type="button" colorTheme="WHITE" fontWeight={700} onClick={goToNextForm}> + 리뷰요청 글 생성 + </Button> + </S.ButtonContainer> + </S.Form> + </S.FormContainer> + </Layout> + ); +}; + +export default RunnerPostCreatePage; + +const S = { + Title: styled.div` + margin: 40px 0 50px 0; + + color: var(--gray-800); + font-size: 32px; + font-weight: 700; + `, + + FormContainer: styled.div` + display: flex; + flex-direction: column; + gap: 20px; + + padding: 0 20px; + `, + + InputContainer: styled.div` + display: flex; + justify-content: start; + `, + + Form: styled.form` + display: flex; + flex-direction: column; + gap: 30px; + + &:first-child { + margin-top: 60px; + } + `, + + InputName: styled.div` + display: flex; + align-items: center; + + height: 36px; + margin-right: 20px; + + color: var(--gray-800); + font-size: 18px; + font-weight: 500px; + `, + + Deadline: styled.input` + gap: 10px; + + &:focus { + outline: 0; + } + `, + + ButtonContainer: styled.div` + display: flex; + justify-content: center; + gap: 20px; + + margin: 50px 0; + `, + + SelectedSupporter: styled.div` + display: flex; + align-items: end; + gap: 30px; + `, +}; diff --git a/frontend/src/pages/RunnerPostDetailPage.tsx b/frontend/src/pages/RunnerPostDetailPage.tsx new file mode 100644 index 000000000..1dedeaa2c --- /dev/null +++ b/frontend/src/pages/RunnerPostDetailPage.tsx @@ -0,0 +1,406 @@ +import React, { useCallback, useContext, useEffect, useMemo, useState } from 'react'; +import { styled } from 'styled-components'; +import { useParams } from 'react-router-dom'; +import { usePageRouter } from '@/hooks/usePageRouter'; +import Layout from '@/layout/Layout'; +import PostTagList from '@/components/PostTagList/PostTagList'; +import Avatar from '@/components/common/Avatar/Avatar'; +import eyeIcon from '@/assets/eye-icon.svg'; +import applicantIcon from '@/assets/applicant-icon.svg'; +import Button from '@/components/common/Button/Button'; +import { REVIEW_STATUS_LABEL_TEXT } from '@/constants/index'; +import Label from '@/components/common/Label/Label'; +import { GetDetailedRunnerPostResponse } from '@/types/runnerPost'; +import ConfirmModal from '@/components/ConfirmModal/ConfirmModal'; +import githubIcon from '@/assets/github-icon.svg'; +import { useToken } from '@/hooks/useToken'; +import { deleteRequest, getRequest, postRequest } from '@/api/fetch'; +import { ERROR_DESCRIPTION, ERROR_TITLE, TOAST_COMPLETION_MESSAGE, TOAST_ERROR_MESSAGE } from '@/constants/message'; +import { ToastContext } from '@/contexts/ToastContext'; +import SendMessageModal from '@/components/SendMessageModal/SendMessageModal'; +import { validateMessage } from '@/utils/validate'; + +const RunnerPostPage = () => { + const { goToMainPage, goBack, goToRunnerProfilePage, goToMyPage } = usePageRouter(); + + const { runnerPostId } = useParams(); + + const { getToken, hasToken } = useToken(); + + const { showErrorToast, showCompletionToast } = useContext(ToastContext); + + const [runnerPost, setRunnerPost] = useState<GetDetailedRunnerPostResponse | null>(null); + const [isConfirmModalOpen, setIsConfirmModalOpen] = useState<boolean>(false); + const [isMessageModalOpen, setIsMessageModalOpen] = useState<boolean>(false); + const [message, setMessage] = useState<string>(''); + + useEffect(() => { + getRunnerPost(); + }, []); + + const getRunnerPost = () => { + const token = hasToken() ? getToken()?.value : undefined; + + getRequest(`/posts/runner/${runnerPostId}`, token) + .then(async (response) => { + const data: GetDetailedRunnerPostResponse = await response.json(); + setRunnerPost(data); + }) + .catch((error: Error) => { + showErrorToast({ title: ERROR_TITLE.REQUEST, description: error.message }); + goBack(); + }); + }; + + const deleteRunnerPost = () => { + const token = getToken()?.value; + if (!token) return; + + deleteRequest(`/posts/runner/${runnerPostId}`, token) + .then(() => { + showCompletionToast(TOAST_COMPLETION_MESSAGE.DELETE); + + goToMainPage(); + }) + .catch((error: Error) => showErrorToast({ title: ERROR_TITLE.REQUEST, description: error.message })); + }; + + const sendMessage = () => { + const token = getToken()?.value; + if (!token) return; + + try { + validateMessage(message); + } catch (error) { + const description = error instanceof Error ? error.message : ERROR_DESCRIPTION.UNEXPECTED; + showErrorToast({ title: ERROR_TITLE.REQUEST, description }); + + return; + } + + const body = JSON.stringify({ message: message }); + + postRequest(`/posts/runner/${runnerPostId}/application`, token!, body) + .then(() => { + showCompletionToast(TOAST_COMPLETION_MESSAGE.SUBMISSION); + + goToMyPage(); + }) + .catch((error: Error) => showErrorToast({ title: ERROR_TITLE.REQUEST, description: error.message })); + }; + + const handleChangeMessage = (e: React.ChangeEvent<HTMLTextAreaElement>) => { + setMessage(e.target.value); + }; + + const handleClickDeleteButton = () => { + setIsConfirmModalOpen(false); + + deleteRunnerPost(); + }; + + const openConfirmModal = () => { + setIsConfirmModalOpen(true); + }; + + const closeConfirmModal = () => { + setIsConfirmModalOpen(false); + }; + + const openMessageModal = () => { + setIsMessageModalOpen(true); + }; + + const closeMessageModal = () => { + setIsMessageModalOpen(false); + }; + + const viewProfile = () => { + if (runnerPost) { + goToRunnerProfilePage(runnerPost?.runnerProfile.runnerId); + } + }; + + return ( + <Layout> + <S.RunnerPostContainer> + {runnerPost && ( + <S.PostContainer> + <S.PostHeaderContainer> + <Label + width="131px" + height="33px" + fontSize="16px" + colorTheme={ + runnerPost.reviewStatus === 'DONE' + ? 'GRAY' + : runnerPost.reviewStatus === 'IN_PROGRESS' + ? 'RED' + : 'WHITE' + } + > + {REVIEW_STATUS_LABEL_TEXT[runnerPost.reviewStatus]} + </Label> + <S.PostDeadlineContainer> + <S.PostDeadline>{runnerPost.deadline.replace('T', ' ')} 까지</S.PostDeadline> + <S.EditLinkContainer + $isOwner={ + runnerPost.isOwner && + runnerPost.reviewStatus !== 'IN_PROGRESS' && + runnerPost.reviewStatus !== 'DONE' + } + > + <S.EditLink onClick={openConfirmModal}>삭제</S.EditLink> + </S.EditLinkContainer> + </S.PostDeadlineContainer> + <S.PostTitleContainer> + <S.PostTitle>{runnerPost.title}</S.PostTitle> + <S.InformationContainer> + <S.statisticsContainer> + <S.statisticsImage src={eyeIcon} /> + <S.statisticsText>{runnerPost.watchedCount}</S.statisticsText> + <S.statisticsImage src={applicantIcon} /> + <S.statisticsText>{runnerPost.applicantCount}</S.statisticsText> + </S.statisticsContainer> + </S.InformationContainer> + </S.PostTitleContainer> + </S.PostHeaderContainer> + <S.PostBodyContainer> + <S.Contents>{runnerPost.contents}</S.Contents> + <S.BottomContentContainer> + <S.LeftSideContainer> + <S.ProfileContainer onClick={viewProfile}> + <Avatar imageUrl={runnerPost.runnerProfile.imageUrl} /> + <S.Profile> + <S.Name>{runnerPost.runnerProfile.name}</S.Name> + <S.Job>{runnerPost.runnerProfile.company}</S.Job> + </S.Profile> + </S.ProfileContainer> + <PostTagList tags={runnerPost.tags} /> + </S.LeftSideContainer> + <S.RightSideContainer> + <Button colorTheme="BLACK" fontWeight={700}> + <S.Anchor href={runnerPost.pullRequestUrl} target="_blank"> + <img src={githubIcon} /> + <S.GoToGitHub>코드 보러가기</S.GoToGitHub> + </S.Anchor> + </Button> + {runnerPost.isOwner || runnerPost.isApplied || runnerPost.reviewStatus !== 'NOT_STARTED' ? null : ( + <Button colorTheme="WHITE" fontWeight={700} onClick={openMessageModal}> + 리뷰 제안하기 + </Button> + )} + </S.RightSideContainer> + </S.BottomContentContainer> + </S.PostBodyContainer> + <S.PostFooterContainer> + <Button colorTheme="GRAY" fontWeight={700} onClick={goBack}> + 목록 + </Button> + </S.PostFooterContainer> + </S.PostContainer> + )} + </S.RunnerPostContainer> + + {isConfirmModalOpen && ( + <ConfirmModal + contents="정말 삭제하시겠습니까?" + closeModal={closeConfirmModal} + handleClickConfirmButton={handleClickDeleteButton} + /> + )} + + {isMessageModalOpen && ( + <SendMessageModal + messageState={message} + handleChangeMessage={handleChangeMessage} + placeholder="러너에게 보낼 메세지를 입력해주세요." + closeModal={closeMessageModal} + handleClickSendButton={sendMessage} + /> + )} + </Layout> + ); +}; + +const S = { + RunnerPostContainer: styled.div` + width: 100%; + height: 100%; + + margin: 72px 0 53px 0; + + background-color: white; + `, + + Title: styled.div` + font-size: 36px; + font-weight: bold; + `, + PostDeadlineContainer: styled.div` + display: flex; + justify-content: space-between; + + margin: 20px 0; + `, + + PostContainer: styled.div` + display: flex; + flex-direction: column; + gap: 15px; + + width: 90%; + margin: 0 auto; + `, + + PostHeaderContainer: styled.div` + width: 100%; + `, + + EditLinkContainer: styled.div<{ $isOwner: boolean }>` + visibility: ${({ $isOwner }) => ($isOwner ? 'visible' : 'hidden')}; + + margin-left: auto; + + font-size: 20px; + font-weight: bold; + + :hover { + cursor: pointer; + text-decoration: underline; + } + `, + + EditLink: styled.a` + font-size: 16px; + color: var(--gray-500); + `, + + PostTitleContainer: styled.div` + display: flex; + align-items: center; + justify-content: space-between; + gap: 10px; + `, + + PostTitle: styled.h1` + font-size: 38px; + font-weight: 700; + `, + + PostDeadline: styled.div` + display: flex; + align-items: center; + font-size: 16px; + color: var(--gray-600); + `, + + PostBodyContainer: styled.div` + display: flex; + flex-direction: column; + gap: 30px; + + width: 100%; + + margin-bottom: 20px; + padding: 40px 10px 40px 0; + border-bottom: 1px solid #9d9d9d; + `, + + InformationContainer: styled.div` + display: flex; + justify-content: space-between; + `, + + ProfileContainer: styled.div` + display: flex; + flex-direction: row; + align-items: center; + gap: 20px; + + cursor: pointer; + `, + + Profile: styled.div` + display: flex; + flex-flow: column; + gap: 5px; + `, + + Name: styled.p` + font-size: 18px; + font-weight: bold; + `, + + Job: styled.p` + font-size: 18px; + `, + + statisticsContainer: styled.div` + display: flex; + align-items: center; + gap: 5px; + + margin-bottom: auto; + + & > p { + color: #a4a4a4; + } + `, + + statisticsImage: styled.img` + width: 20px; + `, + + statisticsText: styled.p` + margin-right: 10px; + + font-size: 14px; + `, + + Contents: styled.div` + min-height: 400px; + + font-size: 18px; + line-height: 200%; + white-space: pre-wrap; + `, + + BottomContentContainer: styled.div` + display: flex; + justify-content: space-between; + align-items: end; + `, + + LeftSideContainer: styled.div` + display: flex; + flex-direction: column; + gap: 24px; + `, + + RightSideContainer: styled.div` + display: flex; + flex-direction: column; + + gap: 24px; + `, + + GoToGitHub: styled.p``, + + PostFooterContainer: styled.div` + display: flex; + justify-content: space-between; + + font-size: 20px; + font-weight: bold; + `, + + Anchor: styled.a` + display: flex; + justify-content: center; + align-items: center; + gap: 10px; + `, +}; + +export default RunnerPostPage; diff --git a/frontend/src/pages/RunnerProfilePage.tsx b/frontend/src/pages/RunnerProfilePage.tsx new file mode 100644 index 000000000..3331e6961 --- /dev/null +++ b/frontend/src/pages/RunnerProfilePage.tsx @@ -0,0 +1,175 @@ +import { getRequest } from '@/api/fetch'; +import TechLabel from '@/components/TechLabel/TechLabel'; +import Avatar from '@/components/common/Avatar/Avatar'; +import Button from '@/components/common/Button/Button'; +import Layout from '@/layout/Layout'; +import { GetRunnerProfileResponse } from '@/types/profile'; +import React, { useContext, useEffect, useState } from 'react'; +import { useParams } from 'react-router-dom'; +import { styled } from 'styled-components'; +import githubIcon from '@/assets/github-icon.svg'; +import { ToastContext } from '@/contexts/ToastContext'; +import { ERROR_DESCRIPTION, ERROR_TITLE } from '@/constants/message'; + +const RunnerProfilePage = () => { + const [runnerProfile, setRunnerProfile] = useState<GetRunnerProfileResponse | null>(null); + + const { runnerId } = useParams(); + + const { showErrorToast } = useContext(ToastContext); + + useEffect(() => { + getProfile(); + }, [runnerId]); + + const getProfile = async () => { + getRequest(`/profile/runner/${runnerId}`) + .then(async (response) => { + const data: GetRunnerProfileResponse = await response.json(); + + setRunnerProfile(data); + }) + .catch((error: Error) => + showErrorToast({ + description: error instanceof Error ? error.message : ERROR_DESCRIPTION.UNEXPECTED, + title: ERROR_TITLE.REQUEST, + }), + ); + }; + + return ( + <Layout> + <S.ProfileContainer> + <S.InfoContainer> + <Avatar + imageUrl={runnerProfile?.imageUrl || 'https://via.placeholder.com/150'} + width="100px" + height="100px" + /> + <S.InfoDetailContainer> + <S.Name>{runnerProfile?.name}</S.Name> + <S.Company>{runnerProfile?.company}</S.Company> + <S.TechLabel> + {runnerProfile?.technicalTags.map((tag) => ( + <TechLabel key={tag} tag={tag} /> + ))} + </S.TechLabel> + </S.InfoDetailContainer> + </S.InfoContainer> + </S.ProfileContainer> + + <S.IntroductionContainer> + <S.Introduction>{runnerProfile?.introduction}</S.Introduction> + <Button width="127px" height="43px" colorTheme="BLACK" fontWeight={700}> + <S.Anchor href={runnerProfile?.githubUrl} target="_blank"> + <img src={githubIcon} /> + <S.GoToGitHub>Github</S.GoToGitHub> + </S.Anchor> + </Button> + </S.IntroductionContainer> + </Layout> + ); +}; + +export default RunnerProfilePage; + +const S = { + ProfileContainer: styled.div` + display: flex; + justify-content: space-between; + align-items: flex-start; + + padding: 50px 0; + `, + + InfoContainer: styled.div` + display: flex; + align-items: center; + + gap: 20px; + `, + + InfoDetailContainer: styled.div` + display: flex; + flex-direction: column; + gap: 10px; + `, + + Name: styled.div` + font-size: 26px; + font-weight: 700; + `, + + Company: styled.div` + font-size: 18px; + `, + TechLabel: styled.div` + display: flex; + gap: 8px; + `, + + ButtonContainer: styled.div` + display: flex; + align-items: center; + gap: 10px; + `, + + RunnerSupporterButton: styled.button<{ $isSelected: boolean }>` + display: flex; + justify-content: center; + align-items: center; + + width: 95px; + height: 38px; + border-radius: 18px; + border: 1px solid ${({ $isSelected }) => ($isSelected ? 'white' : 'var(--baton-red)')}; + + background-color: ${({ $isSelected }) => ($isSelected ? 'var(--baton-red)' : 'white')}; + + color: ${({ $isSelected }) => ($isSelected ? 'white' : 'var(--baton-red)')}; + `, + + IntroductionContainer: styled.div` + display: flex; + justify-content: space-between; + + padding: 0 10px; + margin-bottom: 50px; + `, + + Introduction: styled.div` + position: relative; + display: flex; + flex-wrap: wrap; + gap: 9px 7px; + + margin-left: 40px; + width: 75%; + + &::before { + position: absolute; + content: ''; + + left: -30px; + height: 100%; + width: 4.5px; + border-radius: 2px; + + background-color: var(--gray-400); + } + + font-size: 18px; + line-height: 1.8; + + white-space: pre-line; + `, + + Anchor: styled.a` + display: flex; + justify-content: center; + align-items: center; + gap: 10px; + `, + + GoToGitHub: styled.p``, +}; diff --git a/frontend/src/pages/SupporterFeedbackPage.tsx b/frontend/src/pages/SupporterFeedbackPage.tsx new file mode 100644 index 000000000..dcff7c168 --- /dev/null +++ b/frontend/src/pages/SupporterFeedbackPage.tsx @@ -0,0 +1,247 @@ +import letterIcon from '../assets/letter-icon.svg'; +import { postRequest } from '@/api/fetch'; +import CheckBox from '@/components/CheckBox/CheckBox'; +import ReviewTypeButton from '@/components/ReviewTypeButton/ReviewTypeButton'; +import Button from '@/components/common/Button/Button'; +import { DESCRIPTION_OPTIONS_BAD, DESCRIPTION_OPTIONS_GOOD, REVIEW_TYPE_OPTIONS } from '@/constants/feedback'; +import { ERROR_DESCRIPTION, ERROR_TITLE, TOAST_COMPLETION_MESSAGE } from '@/constants/message'; +import { ToastContext } from '@/contexts/ToastContext'; +import { usePageRouter } from '@/hooks/usePageRouter'; +import { useToken } from '@/hooks/useToken'; +import Layout from '@/layout/Layout'; +import { DescriptionOptions, PostFeedbackRequest, ReviewType, ReviewTypeOptions } from '@/types/feedback'; +import React, { useContext, useEffect, useState } from 'react'; +import { useParams } from 'react-router-dom'; +import { styled } from 'styled-components'; + +const SupporterFeedbackPage = () => { + const { runnerPostId, supporterId } = useParams(); + + const { getToken } = useToken(); + + const { goToMyPage } = usePageRouter(); + + const { showErrorToast, showCompletionToast } = useContext(ToastContext); + + const [reviewTypeOptions, setReviewTypeOptions] = useState<ReviewTypeOptions>(structuredClone(REVIEW_TYPE_OPTIONS)); + const [descriptionOptions, setDescriptionOptions] = useState<DescriptionOptions>( + structuredClone(DESCRIPTION_OPTIONS_GOOD), + ); + + const reviewType = React.useMemo( + () => reviewTypeOptions.filter((option) => option.selected)[0]?.value, + [reviewTypeOptions], + ); + + const descriptions = React.useMemo( + () => descriptionOptions.filter((option) => option.selected).map((option) => option.value), + [descriptionOptions], + ); + + const selectReviewType = (value: ReviewType) => { + const optionIndex = reviewTypeOptions.findIndex((option) => option.value === value); + if (optionIndex === -1) return; + + const newOptions = reviewTypeOptions.map((option, index) => { + if (index === optionIndex) return { ...option, selected: true }; + return { ...option, selected: false }; + }); + + setReviewTypeOptions(newOptions); + + switchDescriptionOption(value); + }; + + const switchDescriptionOption = (value: ReviewType) => { + switch (value) { + case 'BAD': + setDescriptionOptions(structuredClone(DESCRIPTION_OPTIONS_BAD)); + break; + case 'GOOD': + case 'GREAT': + default: + setDescriptionOptions(structuredClone(DESCRIPTION_OPTIONS_GOOD)); + } + }; + + const selectDescription = (description: string) => { + const optionIndex = descriptionOptions.findIndex((option) => option.value === description); + if (optionIndex === -1) return; + + const newOptions = structuredClone(descriptionOptions); + newOptions[optionIndex].selected = !newOptions[optionIndex].selected; + + setDescriptionOptions(newOptions); + }; + + const postSupporterProfile = async (feedback: PostFeedbackRequest) => { + const token = getToken()?.value; + if (!token) return; + + const body = JSON.stringify(feedback); + const authorization = token; + postRequest(`/feedback/supporter`, authorization, body) + .then(() => showCompletionToast(TOAST_COMPLETION_MESSAGE.SUBMIT_FEEDBACK)) + .catch((error) => showErrorToast({ description: error.message, title: ERROR_TITLE.REQUEST })); + }; + + const validateIds = () => { + if (!Number(supporterId)) throw new Error(ERROR_DESCRIPTION.NO_SUPPORTER); + if (!Number(runnerPostId)) throw new Error(ERROR_DESCRIPTION.NO_POST); + }; + + const handleClickSubmit = async () => { + if (!reviewType) return; + + try { + validateIds(); + } catch (error) { + const description = error instanceof Error ? error.message : ERROR_DESCRIPTION.UNEXPECTED; + return showErrorToast({ title: ERROR_TITLE.REQUEST, description }); + } + + await postSupporterProfile({ + reviewType, + descriptions, + supporterId: Number(supporterId), + runnerPostId: Number(runnerPostId), + }); + + goToMyPage(); + }; + + useEffect(() => { + getToken(); + + try { + validateIds(); + } catch (error) { + const description = error instanceof Error ? error.message : ERROR_DESCRIPTION.UNEXPECTED; + return showErrorToast({ title: ERROR_TITLE.REQUEST, description }); + } + }, []); + + const descriptionSubTitle = `코드 리뷰를 받으며 ${reviewType === 'BAD' ? '아쉬웠던' : '좋았던'} 점을 체크해주세요.`; + + return ( + <Layout> + <S.TitleWrapper> + <S.Title>리뷰 후기 남기기 💌</S.Title> + </S.TitleWrapper> + <S.FeedbackContainer> + <S.ReviewTypeContainer> + <S.SubTitle>리뷰에 대한 후기를 남겨주세요</S.SubTitle> + <S.ReviewTypeList> + {reviewTypeOptions.map((option) => ( + <ReviewTypeButton + key={option.value} + type="button" + value={option.value} + isSelected={option.selected} + width="100px" + height="70px" + label={option.label} + selectReviewType={selectReviewType} + /> + ))} + </S.ReviewTypeList> + </S.ReviewTypeContainer> + <S.UnderLine /> + {reviewType && ( + <S.DescriptionContainer> + <S.SubTitle>{descriptionSubTitle}</S.SubTitle> + <CheckBox options={descriptionOptions ?? []} selectOption={selectDescription} /> + <S.ButtonWrapper> + <Button colorTheme="WHITE" width="470px" height="47px" onClick={handleClickSubmit}> + 제출 + </Button> + </S.ButtonWrapper> + </S.DescriptionContainer> + )} + <S.LetterRight src={letterIcon} /> + </S.FeedbackContainer> + </Layout> + ); +}; + +export default SupporterFeedbackPage; + +const S = { + TitleWrapper: styled.div` + margin: 72px 0 53px 0; + `, + + Title: styled.h1` + font-size: 36px; + font-weight: 700; + `, + + FeedbackContainer: styled.div` + position: relative; + display: flex; + flex-direction: column; + align-items: center; + gap: 50px; + + width: 600px; + height: 780px; + + padding: 60px 30px; + margin: 0 auto; + + box-shadow: 0 10px 28px rgba(0, 0, 0, 0.25), 0 6px 10px rgba(0, 0, 0, 0.22); + `, + + ReviewTypeContainer: styled.div` + position: relative; + display: flex; + flex-direction: column; + align-items: center; + gap: 50px; + `, + + ReviewTypeList: styled.ul` + display: flex; + justify-content: space-between; + + width: 400px; + `, + + SubTitle: styled.div` + font-size: 20px; + font-weight: 700; + + text-align: center; + `, + + UnderLine: styled.hr` + width: 100%; + border: 0.5px solid var(--gray-200); + `, + + DescriptionContainer: styled.div``, + + DescriptionList: styled.ul` + display: flex; + flex-direction: column; + + width: 400px; + `, + + DescriptionItem: styled.button` + display: flex; + flex-direction: column; + + background-color: transparent; + `, + + ButtonWrapper: styled.div` + margin: 30px 0; + `, + + LetterRight: styled.img` + position: absolute; + top: 500px; + left: 500px; + `, +}; diff --git a/frontend/src/pages/SupporterProfilePage.tsx b/frontend/src/pages/SupporterProfilePage.tsx new file mode 100644 index 000000000..0fbfcd193 --- /dev/null +++ b/frontend/src/pages/SupporterProfilePage.tsx @@ -0,0 +1,217 @@ +import { getRequest } from '@/api/fetch'; +import TechLabel from '@/components/TechLabel/TechLabel'; +import Avatar from '@/components/common/Avatar/Avatar'; +import Button from '@/components/common/Button/Button'; +import Layout from '@/layout/Layout'; +import { GetSupporterProfileResponse } from '@/types/profile'; +import React, { useContext, useEffect, useState } from 'react'; +import { useParams } from 'react-router-dom'; +import { styled } from 'styled-components'; +import githubIcon from '@/assets/github-icon.svg'; +import { GetRunnerPostResponse } from '@/types/runnerPost'; +import RunnerPostItem from '@/components/RunnerPost/RunnerPostItem/RunnerPostItem'; +import { ToastContext } from '@/contexts/ToastContext'; +import { ERROR_TITLE } from '@/constants/message'; + +const SupporterProfilePage = () => { + const [supporterProfile, setSupporterProfile] = useState<GetSupporterProfileResponse | null>(null); + const [supporterProfilePost, setSupporterProfilePost] = useState<GetRunnerPostResponse | null>(null); + + const { supporterId } = useParams(); + + const { showErrorToast } = useContext(ToastContext); + + useEffect(() => { + getProfile(); + getPost(); + }, [supporterId]); + + const getProfile = () => { + getRequest(`/profile/supporter/${supporterId}`) + .then(async (response) => { + const data: GetSupporterProfileResponse = await response.json(); + + setSupporterProfile(data); + }) + .catch((error: Error) => showErrorToast({ description: error.message, title: ERROR_TITLE.REQUEST })); + }; + + const getPost = async () => { + getRequest(`/posts/runner/search/${supporterId}`) + .then(async (response) => { + const data: GetRunnerPostResponse = await response.json(); + + setSupporterProfilePost(data); + }) + .catch((error: Error) => showErrorToast({ description: error.message, title: ERROR_TITLE.REQUEST })); + }; + + return ( + <Layout> + <S.ProfileContainer> + <S.InfoContainer> + <Avatar + imageUrl={supporterProfile?.imageUrl || 'https://via.placeholder.com/150'} + width="100px" + height="100px" + /> + <S.InfoDetailContainer> + <S.Name>{supporterProfile?.name}</S.Name> + <S.Company>{supporterProfile?.company}</S.Company> + <S.TechLabel> + {supporterProfile?.technicalTags.map((tag) => ( + <TechLabel key={tag} tag={tag} /> + ))} + </S.TechLabel> + </S.InfoDetailContainer> + </S.InfoContainer> + </S.ProfileContainer> + + <S.IntroductionContainer> + <S.Introduction>{supporterProfile?.introduction}</S.Introduction> + <Button width="127px" height="43px" colorTheme="BLACK" fontWeight={700}> + <S.Anchor href={supporterProfile?.githubUrl} target="_blank"> + <img src={githubIcon} /> + <S.GoToGitHub>Github</S.GoToGitHub> + </S.Anchor> + </Button> + </S.IntroductionContainer> + + <S.ReviewCountWrapper> + <S.ReviewCountTitle>완료된 리뷰</S.ReviewCountTitle> + <S.ReviewCount>{supporterProfilePost?.data.length}</S.ReviewCount> + </S.ReviewCountWrapper> + <S.PostsContainer> + {supporterProfilePost?.data.map((runnerPostData) => ( + <RunnerPostItem key={runnerPostData.runnerPostId} runnerPostData={runnerPostData} /> + ))} + </S.PostsContainer> + </Layout> + ); +}; + +export default SupporterProfilePage; + +const S = { + ProfileContainer: styled.div` + display: flex; + justify-content: space-between; + align-items: flex-start; + + padding: 50px 0; + `, + + InfoContainer: styled.div` + display: flex; + align-items: center; + + gap: 20px; + `, + + InfoDetailContainer: styled.div` + display: flex; + flex-direction: column; + gap: 10px; + `, + + Name: styled.div` + font-size: 26px; + font-weight: 700; + `, + + Company: styled.div` + font-size: 18px; + `, + TechLabel: styled.div` + display: flex; + gap: 8px; + `, + + ButtonContainer: styled.div` + display: flex; + align-items: center; + gap: 10px; + `, + + RunnerSupporterButton: styled.button<{ $isSelected: boolean }>` + display: flex; + justify-content: center; + align-items: center; + + width: 95px; + height: 38px; + border-radius: 18px; + border: 1px solid ${({ $isSelected }) => ($isSelected ? 'white' : 'var(--baton-red)')}; + + background-color: ${({ $isSelected }) => ($isSelected ? 'var(--baton-red)' : 'white')}; + + color: ${({ $isSelected }) => ($isSelected ? 'white' : 'var(--baton-red)')}; + `, + + IntroductionContainer: styled.div` + display: flex; + justify-content: space-between; + + padding: 0 10px; + margin-bottom: 80px; + `, + + Introduction: styled.div` + position: relative; + display: flex; + flex-wrap: wrap; + gap: 9px 7px; + + margin-left: 40px; + width: 75%; + + &::before { + position: absolute; + content: ''; + + left: -30px; + height: 100%; + width: 4.5px; + border-radius: 2px; + + background-color: var(--gray-400); + } + + font-size: 18px; + line-height: 1.8; + + white-space: pre-line; + `, + + Anchor: styled.a` + display: flex; + justify-content: center; + align-items: center; + gap: 10px; + `, + + GoToGitHub: styled.p``, + + PostsContainer: styled.div` + display: flex; + flex-direction: column; + align-items: center; + gap: 30px; + `, + + ReviewCountWrapper: styled.div` + display: flex; + align-items: center; + margin: 0 0 40px 20px; + `, + + ReviewCountTitle: styled.span` + font-size: 30px; + margin-right: 15px; + `, + + ReviewCount: styled.span` + font-size: 40px; + font-weight: 700; + `, +}; diff --git a/frontend/src/pages/SupporterSelectPage.tsx b/frontend/src/pages/SupporterSelectPage.tsx new file mode 100644 index 000000000..1cdb24012 --- /dev/null +++ b/frontend/src/pages/SupporterSelectPage.tsx @@ -0,0 +1,42 @@ +import SupporterCardList from '@/components/SupporterCard/SupporterCartList/SupporterCardList'; +import Layout from '@/layout/Layout'; +import React from 'react'; +import { styled } from 'styled-components'; + +const SupporterSelectPage = () => { + return ( + <Layout> + <S.TitleWrapper> + <S.Title>서포터를 선택해 주세요 ✅</S.Title> + <S.SubTitle>선택한 서포터가 확인 후 리뷰를 진행합니다.</S.SubTitle> + </S.TitleWrapper> + <S.SupporterListContainer> + <SupporterCardList /> + </S.SupporterListContainer> + </Layout> + ); +}; + +const S = { + TitleWrapper: styled.header` + display: flex; + flex-direction: column; + gap: 20px; + + margin: 72px 0 53px 0; + `, + + Title: styled.h1` + font-size: 36px; + font-weight: 700; + `, + + SubTitle: styled.h2` + font-size: 18px; + color: var(--gray-500); + `, + + SupporterListContainer: styled.div``, +}; + +export default SupporterSelectPage; diff --git a/frontend/src/router.tsx b/frontend/src/router.tsx new file mode 100644 index 000000000..670232192 --- /dev/null +++ b/frontend/src/router.tsx @@ -0,0 +1,89 @@ +import React from 'react'; +import App from './App'; +import { createBrowserRouter } from 'react-router-dom'; +import MainPage from './pages/MainPage'; +import RunnerPostPage from './pages/RunnerPostDetailPage'; +import RunnerPostCreatePage from './pages/RunnerPostCreatePage'; +import LoginPage from './pages/LoginPage'; +import CreationResultPage from './pages/CreationResultPage'; +import MyPage from './pages/MyPage'; +import GithubCallbackPage from './pages/GithubCallbackPage'; +import ProfileEditPage from './pages/ProfileEditPage'; +import SupporterSelectPage from './pages/SupporterSelectPage'; +import SupporterFeedbackPage from './pages/SupporterFeedbackPage'; +import SupporterProfilePage from './pages/SupporterProfilePage'; +import RunnerProfilePage from './pages/RunnerProfilePage'; + +export const ROUTER_PATH = { + MAIN: '/', + RUNNER_POST: '/runner-post/:runnerPostId', + RUNNER_POST_CREATE: '/runner-post-create/', + SUPPORTER_SELECT: '/supporter-select/:runnerPostId', + MY_PAGE: '/my-page', + LOGIN: '/login', + NOT_FOUND: '/*', + RESULT: '/result', + RUNNER_PROFILE: '/runner-profile/:runnerId', + SUPPORTER_PROFILE: '/supporter-profile/:supporterId', + PROFILE_EDIT: '/profile-edit', + SUPPORTER_FEEDBACK: '/supporter-feedback/:runnerPostId/:supporterId', + GITHUB_CALLBACK: '/oauth/github/callback', // Authorization callback URL? +}; + +export const router = createBrowserRouter( + [ + { + element: <App />, + children: [ + { + index: true, + element: <MainPage />, + }, + { + path: ROUTER_PATH.RUNNER_POST, + element: <RunnerPostPage />, + }, + { + path: ROUTER_PATH.RUNNER_POST_CREATE, + element: <RunnerPostCreatePage />, + }, + { + path: ROUTER_PATH.LOGIN, + element: <LoginPage />, + }, + { + path: ROUTER_PATH.RESULT, + element: <CreationResultPage />, + }, + { + path: ROUTER_PATH.MY_PAGE, + element: <MyPage />, + }, + { + path: ROUTER_PATH.PROFILE_EDIT, + element: <ProfileEditPage />, + }, + { path: ROUTER_PATH.GITHUB_CALLBACK, element: <GithubCallbackPage /> }, + { + path: ROUTER_PATH.SUPPORTER_SELECT, + element: <SupporterSelectPage />, + }, + { + path: ROUTER_PATH.SUPPORTER_FEEDBACK, + element: <SupporterFeedbackPage />, + }, + { + path: ROUTER_PATH.RUNNER_PROFILE, + element: <RunnerProfilePage />, + }, + { + path: ROUTER_PATH.SUPPORTER_PROFILE, + element: <SupporterProfilePage />, + }, + ], + }, + ], + { + basename: '/', + }, +); diff --git a/frontend/src/styles/GlobalStyles.ts b/frontend/src/styles/GlobalStyles.ts new file mode 100644 index 000000000..7486d1097 --- /dev/null +++ b/frontend/src/styles/GlobalStyles.ts @@ -0,0 +1,52 @@ +import { createGlobalStyle } from 'styled-components'; +import { ResetStyle } from './ResetStyle'; + +export const GlobalStyle = createGlobalStyle` + +${ResetStyle} + @font-face { + font-family: 'Pretendard Variable'; + src: font-url('https://cdn.jsdelivr.net/gh/orioncactus/pretendard/dist/web/static/pretendard.css'); + } + + :root { + --font-pretendard: 'Pretendard Variable'; + } + + * { + box-sizing: border-box; + font-family: "Pretendard Variable", sans-serif !important; + color: #333333; + } + + html, + + /* Colors *****************************************/ + :root { + --baton-red: #F64545; + --label-color: #333333; + --count-color: #04c09e; + --border-color: #dddddd; + + --black: #000000; + --gray-800: #282828; + --gray-700: #5e5e5e; + --gray-500: #a6a6a6; + --gray-600: #727272; + --gray-300: #dddddd; + --gray-400: #bbbbbb; + --gray-100: #f3f3f3; + --gray-200: #e8e8e8; + --white-color: #ffffff; +} + + #root { + width: 100%; + display: flex; + justify-content: center; + } + + button{ + cursor: pointer; + } +`; diff --git a/frontend/src/styles/ResetStyle.ts b/frontend/src/styles/ResetStyle.ts new file mode 100644 index 000000000..70b34574c --- /dev/null +++ b/frontend/src/styles/ResetStyle.ts @@ -0,0 +1,137 @@ +import { css } from 'styled-components'; + +export const ResetStyle = css` + html, + body, + div, + span, + applet, + object, + iframe, + h1, + h2, + h3, + h4, + h5, + h6, + p, + blockquote, + pre, + a, + abbr, + acronym, + address, + big, + cite, + code, + del, + dfn, + em, + img, + ins, + kbd, + q, + s, + samp, + small, + strike, + strong, + sub, + sup, + tt, + var, + b, + u, + i, + center, + dl, + dt, + dd, + ol, + ul, + li, + fieldset, + form, + label, + legend, + table, + caption, + tbody, + tfoot, + thead, + tr, + th, + td, + article, + aside, + canvas, + details, + embed, + figure, + figcaption, + footer, + header, + hgroup, + menu, + nav, + output, + ruby, + section, + summary, + time, + mark, + audio, + button, + input, + video, + dialog { + margin: 0; + padding: 0; + border: 0; + font-size: 100%; + font: inherit; + vertical-align: baseline; + } + + /* HTML5 display-role reset for older browsers */ + article, + aside, + details, + figcaption, + figure, + footer, + header, + hgroup, + menu, + nav, + section { + display: block; + } + body { + line-height: 1; + } + ol, + ul { + list-style: none; + } + blockquote, + q { + quotes: none; + } + blockquote:before, + blockquote:after, + q:before, + q:after { + content: ''; + content: none; + } + table { + border-collapse: collapse; + border-spacing: 0; + } + + a { + color: inherit; + text-decoration: none; + } +`; diff --git a/frontend/src/types/feedback.ts b/frontend/src/types/feedback.ts new file mode 100644 index 000000000..7948f874c --- /dev/null +++ b/frontend/src/types/feedback.ts @@ -0,0 +1,14 @@ +import { REVIEW_TYPE } from '@/constants/feedback'; +import { SelectOption } from './select'; + +export type ReviewType = (typeof REVIEW_TYPE)[number]; + +export type ReviewTypeOptions = SelectOption<ReviewType>[]; +export type DescriptionOptions = SelectOption<string>[]; + +export interface PostFeedbackRequest { + reviewType: ReviewType; + descriptions: string[]; + supporterId: number; + runnerPostId: number; +} diff --git a/frontend/src/types/font.d.ts b/frontend/src/types/font.d.ts new file mode 100644 index 000000000..1a92df704 --- /dev/null +++ b/frontend/src/types/font.d.ts @@ -0,0 +1,2 @@ +// fonts.d.ts +declare module '*.woff2'; diff --git a/frontend/src/types/image.d.ts b/frontend/src/types/image.d.ts new file mode 100644 index 000000000..4b0d2770f --- /dev/null +++ b/frontend/src/types/image.d.ts @@ -0,0 +1,2 @@ +// image.d.ts +declare module '*.svg'; diff --git a/frontend/src/types/myPage.ts b/frontend/src/types/myPage.ts new file mode 100644 index 000000000..57856affe --- /dev/null +++ b/frontend/src/types/myPage.ts @@ -0,0 +1,20 @@ +import { Profile } from './profile'; +import { PageInfo, ReviewStatus } from './runnerPost'; + +export interface GetMyPageProfileResponse extends Profile {} + +export interface GetMyPagePostResponse { + pageInfo: PageInfo; + data: MyPagePost[]; +} + +export interface MyPagePost { + runnerPostId: number; + title: string; + deadline: string; + tags: string[]; + watchedCount: number; + applicantCount: number; + reviewStatus: ReviewStatus; + supporterId: number; +} diff --git a/frontend/src/types/profile.ts b/frontend/src/types/profile.ts new file mode 100644 index 000000000..8fcb028c9 --- /dev/null +++ b/frontend/src/types/profile.ts @@ -0,0 +1,22 @@ +import { Technic } from './tags'; + +export interface GetRunnerProfileResponse extends Profile {} + +export interface GetSupporterProfileResponse extends Profile {} + +export interface PatchRunnerProfileRequest extends ProfileRequest {} + +export interface PatchSupporterProfileRequest extends ProfileRequest {} + +export type ProfileRequest = Omit<Profile, 'githubUrl' | 'imageUrl'>; + +export type GetHeaderProfileResponse = Pick<Profile, 'name' | 'imageUrl'>; + +export interface Profile { + name: string; + company: string; + imageUrl: string; + githubUrl: string; + introduction: string; + technicalTags: Technic[]; +} diff --git a/frontend/src/types/runnerPost.ts b/frontend/src/types/runnerPost.ts new file mode 100644 index 000000000..2015de859 --- /dev/null +++ b/frontend/src/types/runnerPost.ts @@ -0,0 +1,59 @@ +export type ReviewStatus = 'NOT_STARTED' | 'IN_PROGRESS' | 'DONE' | 'OVERDUE'; + +export interface GetRunnerPostResponse { + data: RunnerPost[]; + pageInfo: PageInfo; +} + +export interface RunnerPost { + runnerPostId: number; + title: string; + deadline: string; + tags: string[]; + runnerProfile?: RunnerProfile; + watchedCount: number; + applicantCount: number; + reviewStatus: ReviewStatus; +} + +export interface RunnerProfile { + name: string; + imageUrl: string; +} + +export interface GetDetailedRunnerPostResponse extends RunnerPost { + contents: string; + isOwner: boolean; + isApplied: boolean; + pullRequestUrl: string; + runnerProfile: DetailedRunnerProfile; + supporter: Supporter; +} + +export interface DetailedRunnerProfile extends RunnerProfile { + runnerId: number; + company: string; +} + +export interface Supporter { + supporterId: number; + name: string; +} + +export interface CreateRunnerPostRequest { + title: string; + tags: string[]; + pullRequestUrl: string; + deadline: string; + contents: string; +} + +export interface PageInfo { + isFirst: boolean; + isLast: boolean; + hasNext: boolean; + totalPages: number; + totalElements: number; + currentPage: number; + currentSize: number; +} diff --git a/frontend/src/types/select.ts b/frontend/src/types/select.ts new file mode 100644 index 000000000..7d79be5cc --- /dev/null +++ b/frontend/src/types/select.ts @@ -0,0 +1,7 @@ +export interface SelectOption<T extends string | number> { + value: T; + label: string; + selected: boolean; +} + +export type ListSelectOption = SelectOption<string | number>; diff --git a/frontend/src/types/supporterCandidate.ts b/frontend/src/types/supporterCandidate.ts new file mode 100644 index 000000000..76e9006e5 --- /dev/null +++ b/frontend/src/types/supporterCandidate.ts @@ -0,0 +1,13 @@ +export interface GetSupporterCandidateResponse { + data: Candidate[]; +} + +export interface Candidate { + supporterId: number; + name: string; + company: string; + imageUrl: string; + reviewCount: number; + message: string; + technicalTags: string[]; +} diff --git a/frontend/src/types/tags.ts b/frontend/src/types/tags.ts new file mode 100644 index 000000000..78cca6af9 --- /dev/null +++ b/frontend/src/types/tags.ts @@ -0,0 +1,3 @@ +import { TECHNICS } from '@/constants/tags'; + +export type Technic = (typeof TECHNICS)[number]; diff --git a/frontend/src/utils/date.ts b/frontend/src/utils/date.ts new file mode 100644 index 000000000..042a10a8e --- /dev/null +++ b/frontend/src/utils/date.ts @@ -0,0 +1,41 @@ +export const getDatetime = (date: Date) => { + const year = date.getFullYear(); + const month = String(date.getMonth() + 1).padStart(2, '0'); + const day = String(date.getDate()).padStart(2, '0'); + const hours = String(date.getHours()).padStart(2, '0'); + const minutes = String(date.getMinutes()).padStart(2, '0'); + + const datetime = `${year}-${month}-${day}T${hours}:${minutes}`; + + return datetime; +}; + +export const getDayLastTime = (date: Date) => { + const year = date.getFullYear(); + const month = String(date.getMonth() + 1).padStart(2, '0'); + const day = String(date.getDate()).padStart(2, '0'); + + const datetime = `${year}-${month}-${day}T23:59`; + + return datetime; +}; + +export const addDays = (date: Date, days: number): Date => { + const clone = new Date(date); + clone.setDate(date.getDate() + days); + + return clone; +}; + +export const addHours = (date: Date, hours: number): Date => { + const clone = new Date(date); + clone.setHours(date.getHours() + hours); + + return clone; +}; + +export const isPastTime = (date: Date) => { + const nowDate = new Date(); + + return date < nowDate; +}; diff --git a/frontend/src/utils/object.ts b/frontend/src/utils/object.ts new file mode 100644 index 000000000..fb5abfff3 --- /dev/null +++ b/frontend/src/utils/object.ts @@ -0,0 +1,27 @@ +type Primitive = null | undefined | string | number | boolean | symbol | bigint; + +interface ObjType { + [key: string | number]: Primitive | Object | any[]; +} + +export const deepEqual = (object1: ObjType, object2: ObjType): boolean => { + if (Array.isArray(object1) && Array.isArray(object2)) { + if (object1.length !== object2.length) return false; + } + + for (const key in object1) { + if (typeof object1[key] === 'object') { + if (typeof object2[key] === 'object') { + return deepEqual(object1[key] as ObjType, object2[key] as ObjType); + } + + return false; + } + + if (object1[key] !== object2[key]) { + return false; + } + } + + return true; +}; diff --git a/frontend/src/utils/postOption.ts b/frontend/src/utils/postOption.ts new file mode 100644 index 000000000..f2ddd90a4 --- /dev/null +++ b/frontend/src/utils/postOption.ts @@ -0,0 +1,26 @@ +import { REVIEW_STATUS, RUNNER_POST_OPTIONS, SUPPORTER_POST_OPTIONS } from '@/constants'; +import { ReviewStatus } from '@/types/runnerPost'; +import { SelectOption } from '@/types/select'; + +export type PostOptions = SelectOption<ReviewStatus>[]; + +export const createPostOptions = (value: ReviewStatus[], labels: string[]) => { + const newOptions: PostOptions = []; + + for (const index in labels) { + const postOption = { + value: value[index], + label: labels[index], + selected: false, + }; + + newOptions.push(postOption); + } + + newOptions[0].selected = true; + + return newOptions; +}; + +export const runnerPostOptions = createPostOptions(REVIEW_STATUS, RUNNER_POST_OPTIONS); +export const supporterPostOptions = createPostOptions(REVIEW_STATUS, SUPPORTER_POST_OPTIONS); diff --git a/frontend/src/utils/validate.ts b/frontend/src/utils/validate.ts new file mode 100644 index 000000000..4fd6052e7 --- /dev/null +++ b/frontend/src/utils/validate.ts @@ -0,0 +1,63 @@ +import { isPastTime } from './date'; + +export const validateTitle = (title: string) => { + if (!title) { + throw new Error('제목을 입력해주세요'); + } +}; + +export const validateTags = (tags: string[]) => { + if (tags.some((tag) => tag.length > 15)) { + throw new Error('태그명은 15자 이내로 입력해주세요.'); + } + + if (tags.length > 5) { + throw new Error('태그는 최대 5개 입력할 수 있습니다.'); + } + + const tagSet = new Set(tags); + if (tags.length !== tagSet.size) { + throw new Error('중복된 태그는 입력 불가합니다.'); + } +}; + +export const validatePullRequestUrl = (pullRequestUrl: string) => { + if (!pullRequestUrl) { + throw new Error('PR 주소를 입력해주세요'); + } + + const URL_REG = new RegExp(/^((http(s?))\:\/\/)((github))\.+((com))(\:[0-9]+)?(\/\S*)?$/); + if (!pullRequestUrl.match(URL_REG)) + throw new Error('올바른 URL주소를 입력해주세요\nex) http://github.com/team/baton/pull/1'); +}; + +export const validateDeadline = (deadline: string) => { + if (!deadline) throw new Error('마감기한을 입력해주세요'); + + const date = new Date(deadline); + if (isPastTime(date)) { + throw new Error('현재보다 1시간 이후의 시간을 입력해주세요'); + } +}; + +export const validateCompany = (compony: string | null) => { + if (!compony) { + throw new Error('소속을 입력해주세요'); + } +}; + +export const validateName = (name: string | null) => { + if (!name) { + throw new Error('이름을 입력해주세요'); + } +}; + +export const validateIntroduction = (introduction: string | null) => { + if (!introduction) { + throw new Error('자기소개를 입력해주세요'); + } +}; + +export const validateMessage = (message: string) => { + if (message.length < 20) throw new Error('메세지는 20자 이상 입력해주세요'); +}; diff --git a/frontend/tsconfig.json b/frontend/tsconfig.json new file mode 100644 index 000000000..20e186465 --- /dev/null +++ b/frontend/tsconfig.json @@ -0,0 +1,78 @@ +{ + "compilerOptions": { + /* 기본 옵션 + * ------------------------------------------------------------------------------------------------------------------------------------------------ */ + // "incremental": true, /* 증분 컴파일 활성화 */ + "target": "es5" /* ECMAScript 목표 버전 설정: 'ES3'(기본), 'ES5', 'ES2015', 'ES2016', 'ES2017','ES2018', 'ES2019', 'ES2020', or 'ESNEXT'. */, + "module": "esnext" /* 생성될 모듈 코드 설정: 'none', 'commonjs', 'amd', 'system', 'umd', 'es2015', 'es2020', or 'ESNext'. */, + "lib": ["dom", "dom.iterable", "esnext"] /* 컴파일 과정에 사용될 라이브러리 파일 설정 */, + "allowJs": true /* JavaScript 파일 컴파일 허용 */, + // "checkJs": true, /* .js 파일 오류 리포트 설정 */ + "jsx": "react" /* 생성될 JSX 코드 설정: 'preserve', 'react-native', or 'react'. */, + // "declaration": true, /* '.d.ts' 파일 생성 설정 */ + // "declarationMap": true, /* 해당하는 각 '.d.ts'파일에 대한 소스 맵 생성 */ + // "sourceMap": true, /* 소스맵 '.map' 파일 생성 설정 */ + // "outFile": "./", /* 복수 파일을 묶어 하나의 파일로 출력 설정 */ + "outDir": "./dist" /* 출력될 디렉토리 설정 */, + // "rootDir": "./", /* 입력 파일들의 루트 디렉토리 설정. --outDir 옵션을 사용해 출력 디렉토리 설정이 가능 */ + // "composite": true, /* 프로젝트 컴파일 활성화 */ + // "tsBuildInfoFile": "./", /* 증분 컴파일 정보를 저장할 파일 지정 */ + // "removeComments": true, /* 출력 시, 주석 제거 설정 */ + "noEmit": true /* 출력 방출(emit) 유무 설정 */, + // "importHelpers": true, /* 'tslib'로부터 헬퍼를 호출할 지 설정 */ + // "downlevelIteration": true, /* 'ES5' 혹은 'ES3' 타겟 설정 시 Iterables 'for-of', 'spread', 'destructuring' 완벽 지원 설정 */ + "isolatedModules": true /* 각 파일을 별도 모듈로 변환 ('ts.transpileModule'과 유사) */, + + /* 엄격한 유형 검사 옵션 + * ------------------------------------------------------------------------------------------------------------------------------------------------ */ + "strict": true /* 모든 엄격한 유형 검사 옵션 활성화 */, + // "noImplicitAny": true, /* 명시적이지 않은 'any' 유형으로 표현식 및 선언 사용 시 오류 발생 */ + // "strictNullChecks": true, /* 엄격한 null 검사 사용 */ + // "strictFunctionTypes": true, /* 엄격한 함수 유형 검사 사용 */ + // "strictBindCallApply": true, /* 엄격한 'bind', 'call', 'apply' 함수 메서드 사용 */ + // "strictPropertyInitialization": true, /* 클래스에서 속성 초기화 엄격 검사 사용 */ + // "noImplicitThis": true, /* 명시적이지 않은 'any'유형으로 'this' 표현식 사용 시 오류 발생 */ + // "alwaysStrict": true, /* 엄격모드에서 구문 분석 후, 각 소스 파일에 "use strict" 코드를 출력 */ + + /* 추가 검사 옵션 + * ------------------------------------------------------------------------------------------------------------------------------------------------ */ + // "noUnusedLocals": true, /* 사용되지 않은 로컬이 있을 경우, 오류로 보고 */ + // "noUnusedParameters": true, /* 사용되지 않은 매개변수가 있을 경우, 오류로 보고 */ + // "noImplicitReturns": true, /* 함수가 값을 반환하지 않을 경우, 오류로 보고 */ + "noFallthroughCasesInSwitch": true /* switch 문 오류 유형에 대한 오류 보고 */, + // "noUncheckedIndexedAccess": true, /* 인덱스 시그니처 결과에 'undefined' 포함 */ + + /* 모듈 분석 옵션 + * ------------------------------------------------------------------------------------------------------------------------------------------------ */ + "moduleResolution": "node" /* 모듈 분석 방법 설정: 'node' (Node.js) 또는 'classic' (TypeScript pre-1.6). */, + "baseUrl": ".", + "paths": { + "@/*": ["./src/*"] + }, + "resolveJsonModule": true, // typescript에서 json 파일 import + // "rootDirs": [], /* 런타임 시 프로젝트 구조를 나타내는 로트 디렉토리 목록 */ + // "typeRoots": [], /* 유형 정의를 포함할 디렉토리 목록 */ + // "types": [], /* 컴파일 시 포함될 유형 선언 파일 입력 */ + "allowSyntheticDefaultImports": true /* 기본 출력(default export)이 없는 모듈로부터 기본 호출을 허용 (이 코드는 단지 유형 검사만 수행) */, + "esModuleInterop": true /* 모든 가져오기에 대한 네임스페이스 객체 생성을 통해 CommonJS와 ES 모듈 간의 상호 운용성을 제공. 'allowSyntheticDefaultImports' 암시 */, + // "preserveSymlinks": true, /* symlinks 실제 경로로 결정하지 않음 */ + // "allowUmdGlobalAccess": true, /* 모듈에서 UMD 글로벌에 접근 허용 */ + + /* 소스맵 옵션 + * ------------------------------------------------------------------------------------------------------------------------------------------------ */ + // "sourceRoot": "./", /* 디버거(debugger)가 소스 위치 대신 TypeScript 파일을 찾을 위치 설정 */ + // "mapRoot": "./", /* 디버거가 생성된 위치 대신 맵 파일을 찾을 위치 설정 */ + // "inlineSourceMap": true, /* 하나의 인라인 소스맵을 내보내도록 설정 */ + // "inlineSources": true, /* 하나의 파일 안에 소스와 소스 코드를 함께 내보내도록 설정. '--inlineSourceMap' 또는 '--sourceMap' 설정이 필요 */ + + /* 실험적인 기능 옵션 + * ------------------------------------------------------------------------------------------------------------------------------------------------ */ + // "experimentalDecorators": true, /* ES7 데코레이터(decorators) 실험 기능 지원 설정 */ + // "emitDecoratorMetadata": true, /* 데코레이터를 위한 유형 메타데이터 방출 실험 기능 지원 설정 */ + + /* 고급 옵션 + * ------------------------------------------------------------------------------------------------------------------------------------------------ */ + "skipLibCheck": true /* 선언 파일(.d.ts) 유형 검사 스킵 */, + "forceConsistentCasingInFileNames": true /* 동일한 파일에 대한 일관되지 않은 케이스 참조를 허용하지 않음 */ + } +} diff --git a/frontend/webpack/webpack.common.js b/frontend/webpack/webpack.common.js new file mode 100644 index 000000000..36e9be80e --- /dev/null +++ b/frontend/webpack/webpack.common.js @@ -0,0 +1,36 @@ +const dotenv = require('dotenv'); +dotenv.config(); +const path = require('path'); +const HtmlWebpackPlugin = require('html-webpack-plugin'); +const webpack = require('webpack'); + +module.exports = { + entry: `${path.resolve(__dirname, '../src')}/index.tsx`, + module: { + rules: [ + { + test: /\.(ts|tsx|js|jsx)$/, + use: 'babel-loader', + exclude: /node_modules/, + }, + { + test: /\.(png|svg|jpg|jpeg|gif)$/i, + type: 'asset/resource', + }, + ], + }, + plugins: [ + new HtmlWebpackPlugin({ + template: path.resolve(__dirname, '/public/index.html'), + }), + new webpack.ProvidePlugin({ + React: 'react', + }), + ], + resolve: { + alias: { + '@': path.resolve(__dirname, '../src'), + }, + extensions: ['.js', '.ts', '.jsx', '.tsx', '.css', '.json'], + }, +}; diff --git a/frontend/webpack/webpack.dev.js b/frontend/webpack/webpack.dev.js new file mode 100644 index 000000000..c9eca2526 --- /dev/null +++ b/frontend/webpack/webpack.dev.js @@ -0,0 +1,21 @@ +const { merge } = require('webpack-merge'); +const common = require('./webpack.common'); + +module.exports = merge(common, { + mode: 'development', + devtool: 'inline-source-map', + output: { + publicPath: '/', + }, + devServer: { + open: true, + hot: true, + compress: true, + port: 3000, + historyApiFallback: true, + liveReload: true, + proxy: { + '/api': 'http://localhost:8080', + }, + }, +}); diff --git a/frontend/webpack/webpack.prod.js b/frontend/webpack/webpack.prod.js new file mode 100644 index 000000000..64e4cdba2 --- /dev/null +++ b/frontend/webpack/webpack.prod.js @@ -0,0 +1,28 @@ +const { merge } = require('webpack-merge'); +const common = require('./webpack.common'); +const path = require('path'); +const webpack = require('webpack'); + +module.exports = merge(common, { + mode: 'production', + devtool: 'cheap-module-source-map', + output: { + filename: '[name].[contenthash].js', + path: path.resolve(__dirname, '../dist'), + publicPath: '/', + clean: true, + }, + optimization: { + usedExports: true, + minimize: true, + splitChunks: { + chunks: 'all', + }, + }, + performance: { + hints: false, + maxEntrypointSize: 512000, + maxAssetSize: 512000, + }, + plugins: [new webpack.EnvironmentPlugin(['REACT_APP_BASE_URL'])], +});