├── .idea ├── modules.xml ├── react-h5-template.iml └── vcs.xml ├── LICENSE ├── README.md ├── index.html ├── package.json ├── pnpm-lock.yaml ├── postcss.config.js ├── public └── null.svg ├── src ├── api │ └── mock.ts ├── assets │ └── null.svg ├── component │ ├── carousel │ │ ├── index.less │ │ └── index.tsx │ └── qr-scanner │ │ └── index.tsx ├── composables │ ├── authorization.ts │ └── language.ts ├── enum │ └── http-enum.ts ├── hooks │ ├── i18n.ts │ ├── location.ts │ └── session.ts ├── http │ └── axios-instance.ts ├── index.css ├── layout │ └── main │ │ ├── MainLayout.tsx │ │ └── index.less ├── locales │ ├── en_US.json │ └── zh_CN.json ├── main.tsx ├── route │ ├── auth.tsx │ ├── render-routes.tsx │ └── routes.tsx ├── store │ ├── i18n.ts │ └── user.ts ├── types │ ├── http.d.ts │ └── store.d.ts ├── util │ ├── amount.ts │ ├── index.ts │ └── location.ts ├── view │ ├── app │ │ ├── App.css │ │ └── App.tsx │ └── home │ │ ├── index.less │ │ └── index.tsx └── vite-env.d.ts ├── tsconfig.json ├── tsconfig.node.json └── vite.config.ts /.idea/modules.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /.idea/react-h5-template.iml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /.idea/vcs.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Apache License 2 | Version 2.0, January 2004 3 | http://www.apache.org/licenses/ 4 | 5 | TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 6 | 7 | 1. Definitions. 8 | 9 | "License" shall mean the terms and conditions for use, reproduction, 10 | and distribution as defined by Sections 1 through 9 of this document. 11 | 12 | "Licensor" shall mean the copyright owner or entity authorized by 13 | the copyright owner that is granting the License. 14 | 15 | "Legal Entity" shall mean the union of the acting entity and all 16 | other entities that control, are controlled by, or are under common 17 | control with that entity. For the purposes of this definition, 18 | "control" means (i) the power, direct or indirect, to cause the 19 | direction or management of such entity, whether by contract or 20 | otherwise, or (ii) ownership of fifty percent (50%) or more of the 21 | outstanding shares, or (iii) beneficial ownership of such entity. 22 | 23 | "You" (or "Your") shall mean an individual or Legal Entity 24 | exercising permissions granted by this License. 25 | 26 | "Source" form shall mean the preferred form for making modifications, 27 | including but not limited to software source code, documentation 28 | source, and configuration files. 29 | 30 | "Object" form shall mean any form resulting from mechanical 31 | transformation or translation of a Source form, including but 32 | not limited to compiled object code, generated documentation, 33 | and conversions to other media types. 34 | 35 | "Work" shall mean the work of authorship, whether in Source or 36 | Object form, made available under the License, as indicated by a 37 | copyright notice that is included in or attached to the work 38 | (an example is provided in the Appendix below). 39 | 40 | "Derivative Works" shall mean any work, whether in Source or Object 41 | form, that is based on (or derived from) the Work and for which the 42 | editorial revisions, annotations, elaborations, or other modifications 43 | represent, as a whole, an original work of authorship. For the purposes 44 | of this License, Derivative Works shall not include works that remain 45 | separable from, or merely link (or bind by name) to the interfaces of, 46 | the Work and Derivative Works thereof. 47 | 48 | "Contribution" shall mean any work of authorship, including 49 | the original version of the Work and any modifications or additions 50 | to that Work or Derivative Works thereof, that is intentionally 51 | submitted to Licensor for inclusion in the Work by the copyright owner 52 | or by an individual or Legal Entity authorized to submit on behalf of 53 | the copyright owner. For the purposes of this definition, "submitted" 54 | means any form of electronic, verbal, or written communication sent 55 | to the Licensor or its representatives, including but not limited to 56 | communication on electronic mailing lists, source code control systems, 57 | and issue tracking systems that are managed by, or on behalf of, the 58 | Licensor for the purpose of discussing and improving the Work, but 59 | excluding communication that is conspicuously marked or otherwise 60 | designated in writing by the copyright owner as "Not a Contribution." 61 | 62 | "Contributor" shall mean Licensor and any individual or Legal Entity 63 | on behalf of whom a Contribution has been received by Licensor and 64 | subsequently incorporated within the Work. 65 | 66 | 2. Grant of Copyright License. Subject to the terms and conditions of 67 | this License, each Contributor hereby grants to You a perpetual, 68 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 69 | copyright license to reproduce, prepare Derivative Works of, 70 | publicly display, publicly perform, sublicense, and distribute the 71 | Work and such Derivative Works in Source or Object form. 72 | 73 | 3. Grant of Patent License. Subject to the terms and conditions of 74 | this License, each Contributor hereby grants to You a perpetual, 75 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 76 | (except as stated in this section) patent license to make, have made, 77 | use, offer to sell, sell, import, and otherwise transfer the Work, 78 | where such license applies only to those patent claims licensable 79 | by such Contributor that are necessarily infringed by their 80 | Contribution(s) alone or by combination of their Contribution(s) 81 | with the Work to which such Contribution(s) was submitted. If You 82 | institute patent litigation against any entity (including a 83 | cross-claim or counterclaim in a lawsuit) alleging that the Work 84 | or a Contribution incorporated within the Work constitutes direct 85 | or contributory patent infringement, then any patent licenses 86 | granted to You under this License for that Work shall terminate 87 | as of the date such litigation is filed. 88 | 89 | 4. Redistribution. You may reproduce and distribute copies of the 90 | Work or Derivative Works thereof in any medium, with or without 91 | modifications, and in Source or Object form, provided that You 92 | meet the following conditions: 93 | 94 | (a) You must give any other recipients of the Work or 95 | Derivative Works a copy of this License; and 96 | 97 | (b) You must cause any modified files to carry prominent notices 98 | stating that You changed the files; and 99 | 100 | (c) You must retain, in the Source form of any Derivative Works 101 | that You distribute, all copyright, patent, trademark, and 102 | attribution notices from the Source form of the Work, 103 | excluding those notices that do not pertain to any part of 104 | the Derivative Works; and 105 | 106 | (d) If the Work includes a "NOTICE" text file as part of its 107 | distribution, then any Derivative Works that You distribute must 108 | include a readable copy of the attribution notices contained 109 | within such NOTICE file, excluding those notices that do not 110 | pertain to any part of the Derivative Works, in at least one 111 | of the following places: within a NOTICE text file distributed 112 | as part of the Derivative Works; within the Source form or 113 | documentation, if provided along with the Derivative Works; or, 114 | within a display generated by the Derivative Works, if and 115 | wherever such third-party notices normally appear. The contents 116 | of the NOTICE file are for informational purposes only and 117 | do not modify the License. You may add Your own attribution 118 | notices within Derivative Works that You distribute, alongside 119 | or as an addendum to the NOTICE text from the Work, provided 120 | that such additional attribution notices cannot be construed 121 | as modifying the License. 122 | 123 | You may add Your own copyright statement to Your modifications and 124 | may provide additional or different license terms and conditions 125 | for use, reproduction, or distribution of Your modifications, or 126 | for any such Derivative Works as a whole, provided Your use, 127 | reproduction, and distribution of the Work otherwise complies with 128 | the conditions stated in this License. 129 | 130 | 5. Submission of Contributions. Unless You explicitly state otherwise, 131 | any Contribution intentionally submitted for inclusion in the Work 132 | by You to the Licensor shall be under the terms and conditions of 133 | this License, without any additional terms or conditions. 134 | Notwithstanding the above, nothing herein shall supersede or modify 135 | the terms of any separate license agreement you may have executed 136 | with Licensor regarding such Contributions. 137 | 138 | 6. Trademarks. This License does not grant permission to use the trade 139 | names, trademarks, service marks, or product names of the Licensor, 140 | except as required for reasonable and customary use in describing the 141 | origin of the Work and reproducing the content of the NOTICE file. 142 | 143 | 7. Disclaimer of Warranty. Unless required by applicable law or 144 | agreed to in writing, Licensor provides the Work (and each 145 | Contributor provides its Contributions) on an "AS IS" BASIS, 146 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or 147 | implied, including, without limitation, any warranties or conditions 148 | of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A 149 | PARTICULAR PURPOSE. You are solely responsible for determining the 150 | appropriateness of using or redistributing the Work and assume any 151 | risks associated with Your exercise of permissions under this License. 152 | 153 | 8. Limitation of Liability. In no event and under no legal theory, 154 | whether in tort (including negligence), contract, or otherwise, 155 | unless required by applicable law (such as deliberate and grossly 156 | negligent acts) or agreed to in writing, shall any Contributor be 157 | liable to You for damages, including any direct, indirect, special, 158 | incidental, or consequential damages of any character arising as a 159 | result of this License or out of the use or inability to use the 160 | Work (including but not limited to damages for loss of goodwill, 161 | work stoppage, computer failure or malfunction, or any and all 162 | other commercial damages or losses), even if such Contributor 163 | has been advised of the possibility of such damages. 164 | 165 | 9. Accepting Warranty or Additional Liability. While redistributing 166 | the Work or Derivative Works thereof, You may choose to offer, 167 | and charge a fee for, acceptance of support, warranty, indemnity, 168 | or other liability obligations and/or rights consistent with this 169 | License. However, in accepting such obligations, You may act only 170 | on Your own behalf and on Your sole responsibility, not on behalf 171 | of any other Contributor, and only if You agree to indemnify, 172 | defend, and hold each Contributor harmless for any liability 173 | incurred by, or claims asserted against, such Contributor by reason 174 | of your accepting any such warranty or additional liability. 175 | 176 | END OF TERMS AND CONDITIONS 177 | 178 | APPENDIX: How to apply the Apache License to your work. 179 | 180 | To apply the Apache License to your work, attach the following 181 | boilerplate notice, with the fields enclosed by brackets "[]" 182 | replaced with your own identifying information. (Don't include 183 | the brackets!) The text should be enclosed in the appropriate 184 | comment syntax for the file format. We also recommend that a 185 | file or class name and description of purpose be included on the 186 | same "printed page" as the copyright notice for easier 187 | identification within third-party archives. 188 | 189 | Copyright [yyyy] [name of copyright owner] 190 | 191 | Licensed under the Apache License, Version 2.0 (the "License"); 192 | you may not use this file except in compliance with the License. 193 | You may obtain a copy of the License at 194 | 195 | http://www.apache.org/licenses/LICENSE-2.0 196 | 197 | Unless required by applicable law or agreed to in writing, software 198 | distributed under the License is distributed on an "AS IS" BASIS, 199 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 200 | See the License for the specific language governing permissions and 201 | limitations under the License. 202 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 |
2 | 3 |

Antd Mobile H5 Template

4 | 5 |

6 | Vite + React + Antd Mobile 组件库的H5初始化模版(脚手架) 7 |

8 | 9 |
10 | 11 | ## 功能 12 | 1. 使用了`postcss`实现`px to rem` 13 | 2. 使用`zustand`作为全局缓存库,并依赖其功能实现了基本的`i18n`国际化 14 | 3. 配置了`icon-park`,即字节旗下`ico`库 15 | 4. 对`react-router-dom`进行了功能封装 16 | 5. 使用`Ant Design Mobile`与`Layout`实现了带有`Tabbar`的公共模版 17 | 6. 使用`axios-hooks`库作为请求库,并对`axios`进行少量封装 18 | 7. 自定义`hooks`: `useLocation`、`useI18n`、`useSessionStorage` 19 | 8. 基于`js-qr`实现了浏览器扫码功能组件`QRScanner` 20 | 21 | ## 说明 22 | 1. 配置`axios`的基地址直接修改`env`配置字段`VITE_BASE_URL` 23 | 2. 全局根字体大小断点(`src/index.css`) 24 | 25 | ```html 26 | html { 27 | -webkit-text-size-adjust: 100%; 28 | -ms-text-size-adjust: 100%; 29 | font-size: 100%; 30 | } 31 | 32 | /* 小屏幕设备(如手机)*/ 33 | @media (max-width: 600px) { 34 | html { 35 | font-size: 90%; /* 字体稍微小一点 */ 36 | } 37 | } 38 | 39 | /* 中等屏幕设备(如平板)*/ 40 | @media (min-width: 601px) and (max-width: 1024px) { 41 | html { 42 | font-size: 100%; /* 标准大小 */ 43 | } 44 | } 45 | 46 | /* 大屏幕设备(如桌面)*/ 47 | @media (min-width: 1025px) { 48 | html { 49 | font-size: 110%; /* 字体稍微大一点 */ 50 | } 51 | } 52 | ``` 53 | 54 | 3. 组件库全局配色(`src/index.css`) 55 | 56 | ```html 57 | :root { 58 | --primary-color: #FFC300; 59 | } 60 | 61 | :root:root { 62 | --adm-color-primary: #FFC300; 63 | --adm-color-success: #00b578; 64 | --adm-color-warning: #ff8f1f; 65 | --adm-color-danger: #ff3141; 66 | 67 | --adm-color-white: #ffffff; 68 | --adm-color-text: #333333; 69 | --adm-color-text-secondary: #666666; 70 | --adm-color-weak: #999999; 71 | --adm-color-light: #cccccc; 72 | --adm-color-border: #eeeeee; 73 | --adm-color-box: #f5f5f5; 74 | --adm-color-background: #ffffff; 75 | 76 | --adm-font-size-main: var(--adm-font-size-5); 77 | 78 | --adm-font-family: -apple-system, blinkmacsystemfont, 'Helvetica Neue', 79 | helvetica, segoe ui, arial, roboto, 'PingFang SC', 'miui', 80 | 'Hiragino Sans GB', 'Microsoft Yahei', sans-serif; 81 | } 82 | ``` 83 | 4. 修改语言 84 | 85 | ```js 86 | const i18nStore = useI18nStore() 87 | i18nStore.changeLanguage('en_US') 88 | i18nStore.changeLanguage('zh_CN') 89 | ``` 90 | 其他语言可自行扩展,在`App.tsx`中,使用`useI18nStore`hooks同步修改了组件库的国际化配置 91 | ```jsx 92 | const i18nStore = useI18nStore() 93 | return ( 94 | <> 95 | 98 | 99 | 100 | 101 | ) 102 | ``` 103 | 5. 使用i18n 104 | 105 | ```js 106 | const t = useI18n(); 107 | 108 |

t('index.title"')

109 | ``` 110 | 国际化文字映射在`src/locales`文件夹下 111 | 112 | 6. 发送请求 113 | 114 | 首先在`src/api`中新增请求文件`xxx.ts`,并定义返回值与参数的`ts interface`,利用 `axios-hooks`发送对应的`http`请求 115 | ```js 116 | import useAxios from 'axios-hooks'; 117 | import {Page, Result} from "@/types/http"; 118 | 119 | export interface MockResult { 120 | id: number; 121 | } 122 | 123 | export interface MockPage { 124 | id: number; 125 | } 126 | 127 | /** 128 | * fetch the data 129 | * 详细使用可以查看 useAxios 的文档 130 | */ 131 | export const useFetchXXX = () => { 132 | // set the url 133 | const url = `/xxx/xxx`; 134 | // fetch the data 135 | const [{data, loading, error}, refetch] = useAxios>(url); 136 | // to do something 137 | return {data, loading, error, refetch}; 138 | } 139 | 140 | 141 | /** 142 | * fetch the data with page 143 | * 详细使用可以查看 useAxios 的文档 144 | */ 145 | export const useFetchPageXXX = (page: number, size: number) => { 146 | // set the url 147 | const url = `/xxx/xxx?page=${page}&size=${size}`; 148 | // fetch the data 149 | const [{data, loading, error}, refetch] = useAxios>(url); 150 | // to do something 151 | return {data, loading, error, refetch}; 152 | } 153 | ``` 154 | `useAxios`返回值分别为`数据`、`状态`、`错误`、`操作对象`(`refetch`用于中断请求) 155 | 156 | 7. 路由与缓存配置可直接参考代码 157 | 158 | ## 补充 159 | 简单的封装,方便构建新项目时直接复用,没有复杂的操作,如果你想使用`react`构建一个`h5`或者是`响应式`的`web`项目,可以直接使用这个模版。 160 | 161 | 162 | ```shell 163 | git clone git@github.com:JanYork/react-h5-template.git 164 | 165 | cd react-h5-template 166 | 167 | pnpm i 168 | 169 | pnpm run dev 170 | ``` -------------------------------------------------------------------------------- /index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | Antd Mobile H5 Templet 8 | 9 | 10 |
11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "ec-web-h5", 3 | "private": true, 4 | "version": "0.0.0", 5 | "type": "module", 6 | "scripts": { 7 | "dev": "vite", 8 | "build": "tsc && vite build", 9 | "lint": "eslint . --ext ts,tsx --report-unused-disable-directives --max-warnings 0", 10 | "preview": "vite preview" 11 | }, 12 | "dependencies": { 13 | "@icon-park/react": "^1.4.2", 14 | "@types/node": "^20.10.0", 15 | "@types/react-router-dom": "^5.3.3", 16 | "@uidotdev/usehooks": "^2.4.1", 17 | "antd-mobile": "^5.33.0", 18 | "axios": "^1.6.2", 19 | "axios-hooks": "^5.0.2", 20 | "jsqr": "^1.4.0", 21 | "less": "^4.2.0", 22 | "lodash.isequal": "^4.5.0", 23 | "query-string": "^8.1.0", 24 | "react": "^18.2.0", 25 | "react-dom": "^18.2.0", 26 | "react-router-dom": "^6.20.0", 27 | "react-slick": "^0.29.0", 28 | "slick-carousel": "^1.8.1", 29 | "zustand": "^4.4.6" 30 | }, 31 | "devDependencies": { 32 | "@types/lodash.isequal": "^4.5.8", 33 | "@types/react": "^18.2.37", 34 | "@types/react-dom": "^18.2.15", 35 | "@types/react-slick": "^0.23.12", 36 | "@typescript-eslint/eslint-plugin": "^6.10.0", 37 | "@typescript-eslint/parser": "^6.10.0", 38 | "@vitejs/plugin-react-swc": "^3.5.0", 39 | "eslint": "^8.53.0", 40 | "eslint-plugin-react-hooks": "^4.6.0", 41 | "eslint-plugin-react-refresh": "^0.4.4", 42 | "postcss-pxtorem": "^6.0.0", 43 | "typescript": "^5.2.2", 44 | "vite": "^5.0.0" 45 | } 46 | } 47 | -------------------------------------------------------------------------------- /pnpm-lock.yaml: -------------------------------------------------------------------------------- 1 | lockfileVersion: '6.0' 2 | 3 | settings: 4 | autoInstallPeers: true 5 | excludeLinksFromLockfile: false 6 | 7 | dependencies: 8 | '@icon-park/react': 9 | specifier: ^1.4.2 10 | version: 1.4.2(react-dom@18.2.0)(react@18.2.0) 11 | '@types/node': 12 | specifier: ^20.10.0 13 | version: 20.10.0 14 | '@types/react-router-dom': 15 | specifier: ^5.3.3 16 | version: 5.3.3 17 | '@uidotdev/usehooks': 18 | specifier: ^2.4.1 19 | version: 2.4.1(react-dom@18.2.0)(react@18.2.0) 20 | antd-mobile: 21 | specifier: ^5.33.0 22 | version: 5.33.0(react-dom@18.2.0)(react@18.2.0) 23 | axios: 24 | specifier: ^1.6.2 25 | version: 1.6.2 26 | axios-hooks: 27 | specifier: ^5.0.2 28 | version: 5.0.2(axios@1.6.2)(react@18.2.0) 29 | jsqr: 30 | specifier: ^1.4.0 31 | version: 1.4.0 32 | less: 33 | specifier: ^4.2.0 34 | version: 4.2.0 35 | lodash.isequal: 36 | specifier: ^4.5.0 37 | version: 4.5.0 38 | query-string: 39 | specifier: ^8.1.0 40 | version: 8.1.0 41 | react: 42 | specifier: ^18.2.0 43 | version: 18.2.0 44 | react-dom: 45 | specifier: ^18.2.0 46 | version: 18.2.0(react@18.2.0) 47 | react-router-dom: 48 | specifier: ^6.20.0 49 | version: 6.20.0(react-dom@18.2.0)(react@18.2.0) 50 | react-slick: 51 | specifier: ^0.29.0 52 | version: 0.29.0(react-dom@18.2.0)(react@18.2.0) 53 | slick-carousel: 54 | specifier: ^1.8.1 55 | version: 1.8.1(jquery@3.7.1) 56 | zustand: 57 | specifier: ^4.4.6 58 | version: 4.4.6(@types/react@18.2.38)(react@18.2.0) 59 | 60 | devDependencies: 61 | '@types/lodash.isequal': 62 | specifier: ^4.5.8 63 | version: 4.5.8 64 | '@types/react': 65 | specifier: ^18.2.37 66 | version: 18.2.38 67 | '@types/react-dom': 68 | specifier: ^18.2.15 69 | version: 18.2.17 70 | '@types/react-slick': 71 | specifier: ^0.23.12 72 | version: 0.23.12 73 | '@typescript-eslint/eslint-plugin': 74 | specifier: ^6.10.0 75 | version: 6.12.0(@typescript-eslint/parser@6.12.0)(eslint@8.54.0)(typescript@5.3.2) 76 | '@typescript-eslint/parser': 77 | specifier: ^6.10.0 78 | version: 6.12.0(eslint@8.54.0)(typescript@5.3.2) 79 | '@vitejs/plugin-react-swc': 80 | specifier: ^3.5.0 81 | version: 3.5.0(vite@5.0.2) 82 | eslint: 83 | specifier: ^8.53.0 84 | version: 8.54.0 85 | eslint-plugin-react-hooks: 86 | specifier: ^4.6.0 87 | version: 4.6.0(eslint@8.54.0) 88 | eslint-plugin-react-refresh: 89 | specifier: ^0.4.4 90 | version: 0.4.4(eslint@8.54.0) 91 | postcss-pxtorem: 92 | specifier: ^6.0.0 93 | version: 6.0.0(postcss@8.4.31) 94 | typescript: 95 | specifier: ^5.2.2 96 | version: 5.3.2 97 | vite: 98 | specifier: ^5.0.0 99 | version: 5.0.2(@types/node@20.10.0)(less@4.2.0) 100 | 101 | packages: 102 | 103 | /@aashutoshrathi/word-wrap@1.2.6: 104 | resolution: {integrity: sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==} 105 | engines: {node: '>=0.10.0'} 106 | dev: true 107 | 108 | /@babel/runtime@7.23.4: 109 | resolution: {integrity: sha512-2Yv65nlWnWlSpe3fXEyX5i7fx5kIKo4Qbcj+hMO0odwaneFjfXw5fdum+4yL20O0QiaHpia0cYQ9xpNMqrBwHg==} 110 | engines: {node: '>=6.9.0'} 111 | dependencies: 112 | regenerator-runtime: 0.14.0 113 | dev: false 114 | 115 | /@esbuild/android-arm64@0.19.7: 116 | resolution: {integrity: sha512-YEDcw5IT7hW3sFKZBkCAQaOCJQLONVcD4bOyTXMZz5fr66pTHnAet46XAtbXAkJRfIn2YVhdC6R9g4xa27jQ1w==} 117 | engines: {node: '>=12'} 118 | cpu: [arm64] 119 | os: [android] 120 | requiresBuild: true 121 | dev: true 122 | optional: true 123 | 124 | /@esbuild/android-arm@0.19.7: 125 | resolution: {integrity: sha512-YGSPnndkcLo4PmVl2tKatEn+0mlVMr3yEpOOT0BeMria87PhvoJb5dg5f5Ft9fbCVgtAz4pWMzZVgSEGpDAlww==} 126 | engines: {node: '>=12'} 127 | cpu: [arm] 128 | os: [android] 129 | requiresBuild: true 130 | dev: true 131 | optional: true 132 | 133 | /@esbuild/android-x64@0.19.7: 134 | resolution: {integrity: sha512-jhINx8DEjz68cChFvM72YzrqfwJuFbfvSxZAk4bebpngGfNNRm+zRl4rtT9oAX6N9b6gBcFaJHFew5Blf6CvUw==} 135 | engines: {node: '>=12'} 136 | cpu: [x64] 137 | os: [android] 138 | requiresBuild: true 139 | dev: true 140 | optional: true 141 | 142 | /@esbuild/darwin-arm64@0.19.7: 143 | resolution: {integrity: sha512-dr81gbmWN//3ZnBIm6YNCl4p3pjnabg1/ZVOgz2fJoUO1a3mq9WQ/1iuEluMs7mCL+Zwv7AY5e3g1hjXqQZ9Iw==} 144 | engines: {node: '>=12'} 145 | cpu: [arm64] 146 | os: [darwin] 147 | requiresBuild: true 148 | dev: true 149 | optional: true 150 | 151 | /@esbuild/darwin-x64@0.19.7: 152 | resolution: {integrity: sha512-Lc0q5HouGlzQEwLkgEKnWcSazqr9l9OdV2HhVasWJzLKeOt0PLhHaUHuzb8s/UIya38DJDoUm74GToZ6Wc7NGQ==} 153 | engines: {node: '>=12'} 154 | cpu: [x64] 155 | os: [darwin] 156 | requiresBuild: true 157 | dev: true 158 | optional: true 159 | 160 | /@esbuild/freebsd-arm64@0.19.7: 161 | resolution: {integrity: sha512-+y2YsUr0CxDFF7GWiegWjGtTUF6gac2zFasfFkRJPkMAuMy9O7+2EH550VlqVdpEEchWMynkdhC9ZjtnMiHImQ==} 162 | engines: {node: '>=12'} 163 | cpu: [arm64] 164 | os: [freebsd] 165 | requiresBuild: true 166 | dev: true 167 | optional: true 168 | 169 | /@esbuild/freebsd-x64@0.19.7: 170 | resolution: {integrity: sha512-CdXOxIbIzPJmJhrpmJTLx+o35NoiKBIgOvmvT+jeSadYiWJn0vFKsl+0bSG/5lwjNHoIDEyMYc/GAPR9jxusTA==} 171 | engines: {node: '>=12'} 172 | cpu: [x64] 173 | os: [freebsd] 174 | requiresBuild: true 175 | dev: true 176 | optional: true 177 | 178 | /@esbuild/linux-arm64@0.19.7: 179 | resolution: {integrity: sha512-inHqdOVCkUhHNvuQPT1oCB7cWz9qQ/Cz46xmVe0b7UXcuIJU3166aqSunsqkgSGMtUCWOZw3+KMwI6otINuC9g==} 180 | engines: {node: '>=12'} 181 | cpu: [arm64] 182 | os: [linux] 183 | requiresBuild: true 184 | dev: true 185 | optional: true 186 | 187 | /@esbuild/linux-arm@0.19.7: 188 | resolution: {integrity: sha512-Y+SCmWxsJOdQtjcBxoacn/pGW9HDZpwsoof0ttL+2vGcHokFlfqV666JpfLCSP2xLxFpF1lj7T3Ox3sr95YXww==} 189 | engines: {node: '>=12'} 190 | cpu: [arm] 191 | os: [linux] 192 | requiresBuild: true 193 | dev: true 194 | optional: true 195 | 196 | /@esbuild/linux-ia32@0.19.7: 197 | resolution: {integrity: sha512-2BbiL7nLS5ZO96bxTQkdO0euGZIUQEUXMTrqLxKUmk/Y5pmrWU84f+CMJpM8+EHaBPfFSPnomEaQiG/+Gmh61g==} 198 | engines: {node: '>=12'} 199 | cpu: [ia32] 200 | os: [linux] 201 | requiresBuild: true 202 | dev: true 203 | optional: true 204 | 205 | /@esbuild/linux-loong64@0.19.7: 206 | resolution: {integrity: sha512-BVFQla72KXv3yyTFCQXF7MORvpTo4uTA8FVFgmwVrqbB/4DsBFWilUm1i2Oq6zN36DOZKSVUTb16jbjedhfSHw==} 207 | engines: {node: '>=12'} 208 | cpu: [loong64] 209 | os: [linux] 210 | requiresBuild: true 211 | dev: true 212 | optional: true 213 | 214 | /@esbuild/linux-mips64el@0.19.7: 215 | resolution: {integrity: sha512-DzAYckIaK+pS31Q/rGpvUKu7M+5/t+jI+cdleDgUwbU7KdG2eC3SUbZHlo6Q4P1CfVKZ1lUERRFP8+q0ob9i2w==} 216 | engines: {node: '>=12'} 217 | cpu: [mips64el] 218 | os: [linux] 219 | requiresBuild: true 220 | dev: true 221 | optional: true 222 | 223 | /@esbuild/linux-ppc64@0.19.7: 224 | resolution: {integrity: sha512-JQ1p0SmUteNdUaaiRtyS59GkkfTW0Edo+e0O2sihnY4FoZLz5glpWUQEKMSzMhA430ctkylkS7+vn8ziuhUugQ==} 225 | engines: {node: '>=12'} 226 | cpu: [ppc64] 227 | os: [linux] 228 | requiresBuild: true 229 | dev: true 230 | optional: true 231 | 232 | /@esbuild/linux-riscv64@0.19.7: 233 | resolution: {integrity: sha512-xGwVJ7eGhkprY/nB7L7MXysHduqjpzUl40+XoYDGC4UPLbnG+gsyS1wQPJ9lFPcxYAaDXbdRXd1ACs9AE9lxuw==} 234 | engines: {node: '>=12'} 235 | cpu: [riscv64] 236 | os: [linux] 237 | requiresBuild: true 238 | dev: true 239 | optional: true 240 | 241 | /@esbuild/linux-s390x@0.19.7: 242 | resolution: {integrity: sha512-U8Rhki5PVU0L0nvk+E8FjkV8r4Lh4hVEb9duR6Zl21eIEYEwXz8RScj4LZWA2i3V70V4UHVgiqMpszXvG0Yqhg==} 243 | engines: {node: '>=12'} 244 | cpu: [s390x] 245 | os: [linux] 246 | requiresBuild: true 247 | dev: true 248 | optional: true 249 | 250 | /@esbuild/linux-x64@0.19.7: 251 | resolution: {integrity: sha512-ZYZopyLhm4mcoZXjFt25itRlocKlcazDVkB4AhioiL9hOWhDldU9n38g62fhOI4Pth6vp+Mrd5rFKxD0/S+7aQ==} 252 | engines: {node: '>=12'} 253 | cpu: [x64] 254 | os: [linux] 255 | requiresBuild: true 256 | dev: true 257 | optional: true 258 | 259 | /@esbuild/netbsd-x64@0.19.7: 260 | resolution: {integrity: sha512-/yfjlsYmT1O3cum3J6cmGG16Fd5tqKMcg5D+sBYLaOQExheAJhqr8xOAEIuLo8JYkevmjM5zFD9rVs3VBcsjtQ==} 261 | engines: {node: '>=12'} 262 | cpu: [x64] 263 | os: [netbsd] 264 | requiresBuild: true 265 | dev: true 266 | optional: true 267 | 268 | /@esbuild/openbsd-x64@0.19.7: 269 | resolution: {integrity: sha512-MYDFyV0EW1cTP46IgUJ38OnEY5TaXxjoDmwiTXPjezahQgZd+j3T55Ht8/Q9YXBM0+T9HJygrSRGV5QNF/YVDQ==} 270 | engines: {node: '>=12'} 271 | cpu: [x64] 272 | os: [openbsd] 273 | requiresBuild: true 274 | dev: true 275 | optional: true 276 | 277 | /@esbuild/sunos-x64@0.19.7: 278 | resolution: {integrity: sha512-JcPvgzf2NN/y6X3UUSqP6jSS06V0DZAV/8q0PjsZyGSXsIGcG110XsdmuWiHM+pno7/mJF6fjH5/vhUz/vA9fw==} 279 | engines: {node: '>=12'} 280 | cpu: [x64] 281 | os: [sunos] 282 | requiresBuild: true 283 | dev: true 284 | optional: true 285 | 286 | /@esbuild/win32-arm64@0.19.7: 287 | resolution: {integrity: sha512-ZA0KSYti5w5toax5FpmfcAgu3ZNJxYSRm0AW/Dao5up0YV1hDVof1NvwLomjEN+3/GMtaWDI+CIyJOMTRSTdMw==} 288 | engines: {node: '>=12'} 289 | cpu: [arm64] 290 | os: [win32] 291 | requiresBuild: true 292 | dev: true 293 | optional: true 294 | 295 | /@esbuild/win32-ia32@0.19.7: 296 | resolution: {integrity: sha512-CTOnijBKc5Jpk6/W9hQMMvJnsSYRYgveN6O75DTACCY18RA2nqka8dTZR+x/JqXCRiKk84+5+bRKXUSbbwsS0A==} 297 | engines: {node: '>=12'} 298 | cpu: [ia32] 299 | os: [win32] 300 | requiresBuild: true 301 | dev: true 302 | optional: true 303 | 304 | /@esbuild/win32-x64@0.19.7: 305 | resolution: {integrity: sha512-gRaP2sk6hc98N734luX4VpF318l3w+ofrtTu9j5L8EQXF+FzQKV6alCOHMVoJJHvVK/mGbwBXfOL1HETQu9IGQ==} 306 | engines: {node: '>=12'} 307 | cpu: [x64] 308 | os: [win32] 309 | requiresBuild: true 310 | dev: true 311 | optional: true 312 | 313 | /@eslint-community/eslint-utils@4.4.0(eslint@8.54.0): 314 | resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} 315 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 316 | peerDependencies: 317 | eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 318 | dependencies: 319 | eslint: 8.54.0 320 | eslint-visitor-keys: 3.4.3 321 | dev: true 322 | 323 | /@eslint-community/regexpp@4.10.0: 324 | resolution: {integrity: sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==} 325 | engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} 326 | dev: true 327 | 328 | /@eslint/eslintrc@2.1.3: 329 | resolution: {integrity: sha512-yZzuIG+jnVu6hNSzFEN07e8BxF3uAzYtQb6uDkaYZLo6oYZDCq454c5kB8zxnzfCYyP4MIuyBn10L0DqwujTmA==} 330 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 331 | dependencies: 332 | ajv: 6.12.6 333 | debug: 4.3.4 334 | espree: 9.6.1 335 | globals: 13.23.0 336 | ignore: 5.3.0 337 | import-fresh: 3.3.0 338 | js-yaml: 4.1.0 339 | minimatch: 3.1.2 340 | strip-json-comments: 3.1.1 341 | transitivePeerDependencies: 342 | - supports-color 343 | dev: true 344 | 345 | /@eslint/js@8.54.0: 346 | resolution: {integrity: sha512-ut5V+D+fOoWPgGGNj83GGjnntO39xDy6DWxO0wb7Jp3DcMX0TfIqdzHF85VTQkerdyGmuuMD9AKAo5KiNlf/AQ==} 347 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 348 | dev: true 349 | 350 | /@floating-ui/core@1.5.0: 351 | resolution: {integrity: sha512-kK1h4m36DQ0UHGj5Ah4db7R0rHemTqqO0QLvUqi1/mUUp3LuAWbWxdxSIf/XsnH9VS6rRVPLJCncjRzUvyCLXg==} 352 | dependencies: 353 | '@floating-ui/utils': 0.1.6 354 | dev: false 355 | 356 | /@floating-ui/dom@1.5.3: 357 | resolution: {integrity: sha512-ClAbQnEqJAKCJOEbbLo5IUlZHkNszqhuxS4fHAVxRPXPya6Ysf2G8KypnYcOTpx6I8xcgF9bbHb6g/2KpbV8qA==} 358 | dependencies: 359 | '@floating-ui/core': 1.5.0 360 | '@floating-ui/utils': 0.1.6 361 | dev: false 362 | 363 | /@floating-ui/utils@0.1.6: 364 | resolution: {integrity: sha512-OfX7E2oUDYxtBvsuS4e/jSn4Q9Qb6DzgeYtsAdkPZ47znpoNsMgZw0+tVijiv3uGNR6dgNlty6r9rzIzHjtd/A==} 365 | dev: false 366 | 367 | /@humanwhocodes/config-array@0.11.13: 368 | resolution: {integrity: sha512-JSBDMiDKSzQVngfRjOdFXgFfklaXI4K9nLF49Auh21lmBWRLIK3+xTErTWD4KU54pb6coM6ESE7Awz/FNU3zgQ==} 369 | engines: {node: '>=10.10.0'} 370 | dependencies: 371 | '@humanwhocodes/object-schema': 2.0.1 372 | debug: 4.3.4 373 | minimatch: 3.1.2 374 | transitivePeerDependencies: 375 | - supports-color 376 | dev: true 377 | 378 | /@humanwhocodes/module-importer@1.0.1: 379 | resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} 380 | engines: {node: '>=12.22'} 381 | dev: true 382 | 383 | /@humanwhocodes/object-schema@2.0.1: 384 | resolution: {integrity: sha512-dvuCeX5fC9dXgJn9t+X5atfmgQAzUOWqS1254Gh0m6i8wKd10ebXkfNKiRK+1GWi/yTvvLDHpoxLr0xxxeslWw==} 385 | dev: true 386 | 387 | /@icon-park/react@1.4.2(react-dom@18.2.0)(react@18.2.0): 388 | resolution: {integrity: sha512-+MtQLjNiRuia3fC/NfpSCTIy5KH5b+NkMB9zYd7p3R4aAIK61AjK0OSraaICJdkKooU9jpzk8m0fY4g9A3JqhQ==} 389 | engines: {node: '>= 8.0.0', npm: '>= 5.0.0'} 390 | peerDependencies: 391 | react: '>=16.9' 392 | react-dom: '>=16.9' 393 | dependencies: 394 | react: 18.2.0 395 | react-dom: 18.2.0(react@18.2.0) 396 | dev: false 397 | 398 | /@nodelib/fs.scandir@2.1.5: 399 | resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} 400 | engines: {node: '>= 8'} 401 | dependencies: 402 | '@nodelib/fs.stat': 2.0.5 403 | run-parallel: 1.2.0 404 | dev: true 405 | 406 | /@nodelib/fs.stat@2.0.5: 407 | resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} 408 | engines: {node: '>= 8'} 409 | dev: true 410 | 411 | /@nodelib/fs.walk@1.2.8: 412 | resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} 413 | engines: {node: '>= 8'} 414 | dependencies: 415 | '@nodelib/fs.scandir': 2.1.5 416 | fastq: 1.15.0 417 | dev: true 418 | 419 | /@rc-component/mini-decimal@1.1.0: 420 | resolution: {integrity: sha512-jS4E7T9Li2GuYwI6PyiVXmxTiM6b07rlD9Ge8uGZSCz3WlzcG5ZK7g5bbuKNeZ9pgUuPK/5guV781ujdVpm4HQ==} 421 | engines: {node: '>=8.x'} 422 | dependencies: 423 | '@babel/runtime': 7.23.4 424 | dev: false 425 | 426 | /@react-spring/animated@9.6.1(react@18.2.0): 427 | resolution: {integrity: sha512-ls/rJBrAqiAYozjLo5EPPLLOb1LM0lNVQcXODTC1SMtS6DbuBCPaKco5svFUQFMP2dso3O+qcC4k9FsKc0KxMQ==} 428 | peerDependencies: 429 | react: ^16.8.0 || ^17.0.0 || ^18.0.0 430 | dependencies: 431 | '@react-spring/shared': 9.6.1(react@18.2.0) 432 | '@react-spring/types': 9.6.1 433 | react: 18.2.0 434 | dev: false 435 | 436 | /@react-spring/core@9.6.1(react@18.2.0): 437 | resolution: {integrity: sha512-3HAAinAyCPessyQNNXe5W0OHzRfa8Yo5P748paPcmMowZ/4sMfaZ2ZB6e5x5khQI8NusOHj8nquoutd6FRY5WQ==} 438 | peerDependencies: 439 | react: ^16.8.0 || ^17.0.0 || ^18.0.0 440 | dependencies: 441 | '@react-spring/animated': 9.6.1(react@18.2.0) 442 | '@react-spring/rafz': 9.6.1 443 | '@react-spring/shared': 9.6.1(react@18.2.0) 444 | '@react-spring/types': 9.6.1 445 | react: 18.2.0 446 | dev: false 447 | 448 | /@react-spring/rafz@9.6.1: 449 | resolution: {integrity: sha512-v6qbgNRpztJFFfSE3e2W1Uz+g8KnIBs6SmzCzcVVF61GdGfGOuBrbjIcp+nUz301awVmREKi4eMQb2Ab2gGgyQ==} 450 | dev: false 451 | 452 | /@react-spring/shared@9.6.1(react@18.2.0): 453 | resolution: {integrity: sha512-PBFBXabxFEuF8enNLkVqMC9h5uLRBo6GQhRMQT/nRTnemVENimgRd+0ZT4yFnAQ0AxWNiJfX3qux+bW2LbG6Bw==} 454 | peerDependencies: 455 | react: ^16.8.0 || ^17.0.0 || ^18.0.0 456 | dependencies: 457 | '@react-spring/rafz': 9.6.1 458 | '@react-spring/types': 9.6.1 459 | react: 18.2.0 460 | dev: false 461 | 462 | /@react-spring/types@9.6.1: 463 | resolution: {integrity: sha512-POu8Mk0hIU3lRXB3bGIGe4VHIwwDsQyoD1F394OK7STTiX9w4dG3cTLljjYswkQN+hDSHRrj4O36kuVa7KPU8Q==} 464 | dev: false 465 | 466 | /@react-spring/web@9.6.1(react-dom@18.2.0)(react@18.2.0): 467 | resolution: {integrity: sha512-X2zR6q2Z+FjsWfGAmAXlQaoUHbPmfuCaXpuM6TcwXPpLE1ZD4A1eys/wpXboFQmDkjnrlTmKvpVna1MjWpZ5Hw==} 468 | peerDependencies: 469 | react: ^16.8.0 || ^17.0.0 || ^18.0.0 470 | react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 471 | dependencies: 472 | '@react-spring/animated': 9.6.1(react@18.2.0) 473 | '@react-spring/core': 9.6.1(react@18.2.0) 474 | '@react-spring/shared': 9.6.1(react@18.2.0) 475 | '@react-spring/types': 9.6.1 476 | react: 18.2.0 477 | react-dom: 18.2.0(react@18.2.0) 478 | dev: false 479 | 480 | /@remix-run/router@1.13.0: 481 | resolution: {integrity: sha512-5dMOnVnefRsl4uRnAdoWjtVTdh8e6aZqgM4puy9nmEADH72ck+uXwzpJLEKE9Q6F8ZljNewLgmTfkxUrBdv4WA==} 482 | engines: {node: '>=14.0.0'} 483 | dev: false 484 | 485 | /@rollup/rollup-android-arm-eabi@4.5.2: 486 | resolution: {integrity: sha512-ee7BudTwwrglFYSc3UnqInDDjCLWHKrFmGNi4aK7jlEyg4CyPa1DCMrZfsN1O13YT76UFEqXz2CoN7BCGpUlJw==} 487 | cpu: [arm] 488 | os: [android] 489 | requiresBuild: true 490 | dev: true 491 | optional: true 492 | 493 | /@rollup/rollup-android-arm64@4.5.2: 494 | resolution: {integrity: sha512-xOuhj9HHtn8128ir8veoQsBbAUBasDbHIBniYTEx02pAmu9EXL+ZjJqngnNEy6ZgZ4h1JwL33GMNu3yJL5Mzow==} 495 | cpu: [arm64] 496 | os: [android] 497 | requiresBuild: true 498 | dev: true 499 | optional: true 500 | 501 | /@rollup/rollup-darwin-arm64@4.5.2: 502 | resolution: {integrity: sha512-NTGJWoL8bKyqyWFn9/RzSv4hQ4wTbaAv0lHHRwf4OnpiiP4P8W0jiXbm8Nc5BCXKmWAwuvJY82mcIU2TayC20g==} 503 | cpu: [arm64] 504 | os: [darwin] 505 | requiresBuild: true 506 | dev: true 507 | optional: true 508 | 509 | /@rollup/rollup-darwin-x64@4.5.2: 510 | resolution: {integrity: sha512-hlKqj7bpPvU15sZo4za14u185lpMzdwWLMc9raMqPK4wywt0wR23y1CaVQ4oAFXat3b5/gmRntyfpwWTKl+vvA==} 511 | cpu: [x64] 512 | os: [darwin] 513 | requiresBuild: true 514 | dev: true 515 | optional: true 516 | 517 | /@rollup/rollup-linux-arm-gnueabihf@4.5.2: 518 | resolution: {integrity: sha512-7ZIZx8c3u+pfI0ohQsft/GywrXez0uR6dUP0JhBuCK3sFO5TfdLn/YApnVkvPxuTv3+YKPIZend9Mt7Cz6sS3Q==} 519 | cpu: [arm] 520 | os: [linux] 521 | requiresBuild: true 522 | dev: true 523 | optional: true 524 | 525 | /@rollup/rollup-linux-arm64-gnu@4.5.2: 526 | resolution: {integrity: sha512-7Pk/5mO11JW/cH+a8lL/i0ZxmRGrbpYqN0VwO2DHhU+SJWWOH2zE1RAcPaj8KqiwC8DCDIJOSxjV9+9lLb6aeA==} 527 | cpu: [arm64] 528 | os: [linux] 529 | libc: [glibc] 530 | requiresBuild: true 531 | dev: true 532 | optional: true 533 | 534 | /@rollup/rollup-linux-arm64-musl@4.5.2: 535 | resolution: {integrity: sha512-KrRnuG5phJx756e62wxvWH2e+TK84MP2IVuPwfge+GBvWqIUfVzFRn09TKruuQBXzZp52Vyma7FjMDkwlA9xpg==} 536 | cpu: [arm64] 537 | os: [linux] 538 | libc: [musl] 539 | requiresBuild: true 540 | dev: true 541 | optional: true 542 | 543 | /@rollup/rollup-linux-x64-gnu@4.5.2: 544 | resolution: {integrity: sha512-My+53GasPa2D2tU5dXiyHYwrELAUouSfkNlZ3bUKpI7btaztO5vpALEs3mvFjM7aKTvEbc7GQckuXeXIDKQ0fg==} 545 | cpu: [x64] 546 | os: [linux] 547 | libc: [glibc] 548 | requiresBuild: true 549 | dev: true 550 | optional: true 551 | 552 | /@rollup/rollup-linux-x64-musl@4.5.2: 553 | resolution: {integrity: sha512-/f0Q6Sc+Vw54Ws6N8fxaEe4R7at3b8pFyv+O/F2VaQ4hODUJcRUcCBJh6zuqtgQQt7w845VTkGLFgWZkP3tUoQ==} 554 | cpu: [x64] 555 | os: [linux] 556 | libc: [musl] 557 | requiresBuild: true 558 | dev: true 559 | optional: true 560 | 561 | /@rollup/rollup-win32-arm64-msvc@4.5.2: 562 | resolution: {integrity: sha512-NCKuuZWLht6zj7s6EIFef4BxCRX1GMr83S2W4HPCA0RnJ4iHE4FS1695q6Ewoa6A9nFjJe1//yUu0kgBU07Edw==} 563 | cpu: [arm64] 564 | os: [win32] 565 | requiresBuild: true 566 | dev: true 567 | optional: true 568 | 569 | /@rollup/rollup-win32-ia32-msvc@4.5.2: 570 | resolution: {integrity: sha512-J5zL3riR4AOyU/J3M/i4k/zZ8eP1yT+nTmAKztCXJtnI36jYH0eepvob22mAQ/kLwfsK2TB6dbyVY1F8c/0H5A==} 571 | cpu: [ia32] 572 | os: [win32] 573 | requiresBuild: true 574 | dev: true 575 | optional: true 576 | 577 | /@rollup/rollup-win32-x64-msvc@4.5.2: 578 | resolution: {integrity: sha512-pL0RXRHuuGLhvs7ayX/SAHph1hrDPXOM5anyYUQXWJEENxw3nfHkzv8FfVlEVcLyKPAEgDRkd6RKZq2SMqS/yg==} 579 | cpu: [x64] 580 | os: [win32] 581 | requiresBuild: true 582 | dev: true 583 | optional: true 584 | 585 | /@swc/core-darwin-arm64@1.3.99: 586 | resolution: {integrity: sha512-Qj7Jct68q3ZKeuJrjPx7k8SxzWN6PqLh+VFxzA+KwLDpQDPzOlKRZwkIMzuFjLhITO4RHgSnXoDk/Syz0ZeN+Q==} 587 | engines: {node: '>=10'} 588 | cpu: [arm64] 589 | os: [darwin] 590 | requiresBuild: true 591 | dev: true 592 | optional: true 593 | 594 | /@swc/core-darwin-x64@1.3.99: 595 | resolution: {integrity: sha512-wR7m9QVJjgiBu1PSOHy7s66uJPa45Kf9bZExXUL+JAa9OQxt5y+XVzr+n+F045VXQOwdGWplgPnWjgbUUHEVyw==} 596 | engines: {node: '>=10'} 597 | cpu: [x64] 598 | os: [darwin] 599 | requiresBuild: true 600 | dev: true 601 | optional: true 602 | 603 | /@swc/core-linux-arm64-gnu@1.3.99: 604 | resolution: {integrity: sha512-gcGv1l5t0DScEONmw5OhdVmEI/o49HCe9Ik38zzH0NtDkc+PDYaCcXU5rvfZP2qJFaAAr8cua8iJcOunOSLmnA==} 605 | engines: {node: '>=10'} 606 | cpu: [arm64] 607 | os: [linux] 608 | libc: [glibc] 609 | requiresBuild: true 610 | dev: true 611 | optional: true 612 | 613 | /@swc/core-linux-arm64-musl@1.3.99: 614 | resolution: {integrity: sha512-XL1/eUsTO8BiKsWq9i3iWh7H99iPO61+9HYiWVKhSavknfj4Plbn+XyajDpxsauln5o8t+BRGitymtnAWJM4UQ==} 615 | engines: {node: '>=10'} 616 | cpu: [arm64] 617 | os: [linux] 618 | libc: [musl] 619 | requiresBuild: true 620 | dev: true 621 | optional: true 622 | 623 | /@swc/core-linux-x64-gnu@1.3.99: 624 | resolution: {integrity: sha512-fGrXYE6DbTfGNIGQmBefYxSk3rp/1lgbD0nVg4rl4mfFRQPi7CgGhrrqSuqZ/ezXInUIgoCyvYGWFSwjLXt/Qg==} 625 | engines: {node: '>=10'} 626 | cpu: [x64] 627 | os: [linux] 628 | libc: [glibc] 629 | requiresBuild: true 630 | dev: true 631 | optional: true 632 | 633 | /@swc/core-linux-x64-musl@1.3.99: 634 | resolution: {integrity: sha512-kvgZp/mqf3IJ806gUOL6gN6VU15+DfzM1Zv4Udn8GqgXiUAvbQehrtruid4Snn5pZTLj4PEpSCBbxgxK1jbssA==} 635 | engines: {node: '>=10'} 636 | cpu: [x64] 637 | os: [linux] 638 | libc: [musl] 639 | requiresBuild: true 640 | dev: true 641 | optional: true 642 | 643 | /@swc/core-win32-arm64-msvc@1.3.99: 644 | resolution: {integrity: sha512-yt8RtZ4W/QgFF+JUemOUQAkVW58cCST7mbfKFZ1v16w3pl3NcWd9OrtppFIXpbjU1rrUX2zp2R7HZZzZ2Zk/aQ==} 645 | engines: {node: '>=10'} 646 | cpu: [arm64] 647 | os: [win32] 648 | requiresBuild: true 649 | dev: true 650 | optional: true 651 | 652 | /@swc/core-win32-ia32-msvc@1.3.99: 653 | resolution: {integrity: sha512-62p5fWnOJR/rlbmbUIpQEVRconICy5KDScWVuJg1v3GPLBrmacjphyHiJC1mp6dYvvoEWCk/77c/jcQwlXrDXw==} 654 | engines: {node: '>=10'} 655 | cpu: [ia32] 656 | os: [win32] 657 | requiresBuild: true 658 | dev: true 659 | optional: true 660 | 661 | /@swc/core-win32-x64-msvc@1.3.99: 662 | resolution: {integrity: sha512-PdppWhkoS45VGdMBxvClVgF1hVjqamtvYd82Gab1i4IV45OSym2KinoDCKE1b6j3LwBLOn2J9fvChGSgGfDCHQ==} 663 | engines: {node: '>=10'} 664 | cpu: [x64] 665 | os: [win32] 666 | requiresBuild: true 667 | dev: true 668 | optional: true 669 | 670 | /@swc/core@1.3.99: 671 | resolution: {integrity: sha512-8O996RfuPC4ieb4zbYMfbyCU9k4gSOpyCNnr7qBQ+o7IEmh8JCV6B8wwu+fT/Om/6Lp34KJe1IpJ/24axKS6TQ==} 672 | engines: {node: '>=10'} 673 | requiresBuild: true 674 | peerDependencies: 675 | '@swc/helpers': ^0.5.0 676 | peerDependenciesMeta: 677 | '@swc/helpers': 678 | optional: true 679 | dependencies: 680 | '@swc/counter': 0.1.2 681 | '@swc/types': 0.1.5 682 | optionalDependencies: 683 | '@swc/core-darwin-arm64': 1.3.99 684 | '@swc/core-darwin-x64': 1.3.99 685 | '@swc/core-linux-arm64-gnu': 1.3.99 686 | '@swc/core-linux-arm64-musl': 1.3.99 687 | '@swc/core-linux-x64-gnu': 1.3.99 688 | '@swc/core-linux-x64-musl': 1.3.99 689 | '@swc/core-win32-arm64-msvc': 1.3.99 690 | '@swc/core-win32-ia32-msvc': 1.3.99 691 | '@swc/core-win32-x64-msvc': 1.3.99 692 | dev: true 693 | 694 | /@swc/counter@0.1.2: 695 | resolution: {integrity: sha512-9F4ys4C74eSTEUNndnER3VJ15oru2NumfQxS8geE+f3eB5xvfxpWyqE5XlVnxb/R14uoXi6SLbBwwiDSkv+XEw==} 696 | dev: true 697 | 698 | /@swc/types@0.1.5: 699 | resolution: {integrity: sha512-myfUej5naTBWnqOCc/MdVOLVjXUXtIA+NpDrDBKJtLLg2shUjBu3cZmB/85RyitKc55+lUUyl7oRfLOvkr2hsw==} 700 | dev: true 701 | 702 | /@types/history@4.7.11: 703 | resolution: {integrity: sha512-qjDJRrmvBMiTx+jyLxvLfJU7UznFuokDv4f3WRuriHKERccVpFU+8XMQUAbDzoiJCsmexxRExQeMwwCdamSKDA==} 704 | dev: false 705 | 706 | /@types/js-cookie@2.2.7: 707 | resolution: {integrity: sha512-aLkWa0C0vO5b4Sr798E26QgOkss68Un0bLjs7u9qxzPT5CG+8DuNTffWES58YzJs3hrVAOs1wonycqEBqNJubA==} 708 | dev: false 709 | 710 | /@types/json-schema@7.0.15: 711 | resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} 712 | dev: true 713 | 714 | /@types/lodash.isequal@4.5.8: 715 | resolution: {integrity: sha512-uput6pg4E/tj2LGxCZo9+y27JNyB2OZuuI/T5F+ylVDYuqICLG2/ktjxx0v6GvVntAf8TvEzeQLcV0ffRirXuA==} 716 | dependencies: 717 | '@types/lodash': 4.14.202 718 | dev: true 719 | 720 | /@types/lodash@4.14.202: 721 | resolution: {integrity: sha512-OvlIYQK9tNneDlS0VN54LLd5uiPCBOp7gS5Z0f1mjoJYBrtStzgmJBxONW3U6OZqdtNzZPmn9BS/7WI7BFFcFQ==} 722 | dev: true 723 | 724 | /@types/node@20.10.0: 725 | resolution: {integrity: sha512-D0WfRmU9TQ8I9PFx9Yc+EBHw+vSpIub4IDvQivcp26PtPrdMGAq5SDcpXEo/epqa/DXotVpekHiLNTg3iaKXBQ==} 726 | dependencies: 727 | undici-types: 5.26.5 728 | 729 | /@types/prop-types@15.7.11: 730 | resolution: {integrity: sha512-ga8y9v9uyeiLdpKddhxYQkxNDrfvuPrlFb0N1qnZZByvcElJaXthF1UhvCh9TLWJBEHeNtdnbysW7Y6Uq8CVng==} 731 | 732 | /@types/react-dom@18.2.17: 733 | resolution: {integrity: sha512-rvrT/M7Df5eykWFxn6MYt5Pem/Dbyc1N8Y0S9Mrkw2WFCRiqUgw9P7ul2NpwsXCSM1DVdENzdG9J5SreqfAIWg==} 734 | dependencies: 735 | '@types/react': 18.2.38 736 | dev: true 737 | 738 | /@types/react-router-dom@5.3.3: 739 | resolution: {integrity: sha512-kpqnYK4wcdm5UaWI3fLcELopqLrHgLqNsdpHauzlQktfkHL3npOSwtj1Uz9oKBAzs7lFtVkV8j83voAz2D8fhw==} 740 | dependencies: 741 | '@types/history': 4.7.11 742 | '@types/react': 18.2.38 743 | '@types/react-router': 5.1.20 744 | dev: false 745 | 746 | /@types/react-router@5.1.20: 747 | resolution: {integrity: sha512-jGjmu/ZqS7FjSH6owMcD5qpq19+1RS9DeVRqfl1FeBMxTDQAGwlMWOcs52NDoXaNKyG3d1cYQFMs9rCrb88o9Q==} 748 | dependencies: 749 | '@types/history': 4.7.11 750 | '@types/react': 18.2.38 751 | dev: false 752 | 753 | /@types/react-slick@0.23.12: 754 | resolution: {integrity: sha512-WjY/wIjzgXCh6gXRZL75OC9n/Hn4MwKWI7ZJ4iA2OxavN9eKvkV5MPFjSgH5sofabq78Ucrl6u3okiBUNNIrDQ==} 755 | dependencies: 756 | '@types/react': 18.2.38 757 | dev: true 758 | 759 | /@types/react@18.2.38: 760 | resolution: {integrity: sha512-cBBXHzuPtQK6wNthuVMV6IjHAFkdl/FOPFIlkd81/Cd1+IqkHu/A+w4g43kaQQoYHik/ruaQBDL72HyCy1vuMw==} 761 | dependencies: 762 | '@types/prop-types': 15.7.11 763 | '@types/scheduler': 0.16.8 764 | csstype: 3.1.2 765 | 766 | /@types/scheduler@0.16.8: 767 | resolution: {integrity: sha512-WZLiwShhwLRmeV6zH+GkbOFT6Z6VklCItrDioxUnv+u4Ll+8vKeFySoFyK/0ctcRpOmwAicELfmys1sDc/Rw+A==} 768 | 769 | /@types/semver@7.5.6: 770 | resolution: {integrity: sha512-dn1l8LaMea/IjDoHNd9J52uBbInB796CDffS6VdIxvqYCPSG0V0DzHp76GpaWnlhg88uYyPbXCDIowa86ybd5A==} 771 | dev: true 772 | 773 | /@typescript-eslint/eslint-plugin@6.12.0(@typescript-eslint/parser@6.12.0)(eslint@8.54.0)(typescript@5.3.2): 774 | resolution: {integrity: sha512-XOpZ3IyJUIV1b15M7HVOpgQxPPF7lGXgsfcEIu3yDxFPaf/xZKt7s9QO/pbk7vpWQyVulpJbu4E5LwpZiQo4kA==} 775 | engines: {node: ^16.0.0 || >=18.0.0} 776 | peerDependencies: 777 | '@typescript-eslint/parser': ^6.0.0 || ^6.0.0-alpha 778 | eslint: ^7.0.0 || ^8.0.0 779 | typescript: '*' 780 | peerDependenciesMeta: 781 | typescript: 782 | optional: true 783 | dependencies: 784 | '@eslint-community/regexpp': 4.10.0 785 | '@typescript-eslint/parser': 6.12.0(eslint@8.54.0)(typescript@5.3.2) 786 | '@typescript-eslint/scope-manager': 6.12.0 787 | '@typescript-eslint/type-utils': 6.12.0(eslint@8.54.0)(typescript@5.3.2) 788 | '@typescript-eslint/utils': 6.12.0(eslint@8.54.0)(typescript@5.3.2) 789 | '@typescript-eslint/visitor-keys': 6.12.0 790 | debug: 4.3.4 791 | eslint: 8.54.0 792 | graphemer: 1.4.0 793 | ignore: 5.3.0 794 | natural-compare: 1.4.0 795 | semver: 7.5.4 796 | ts-api-utils: 1.0.3(typescript@5.3.2) 797 | typescript: 5.3.2 798 | transitivePeerDependencies: 799 | - supports-color 800 | dev: true 801 | 802 | /@typescript-eslint/parser@6.12.0(eslint@8.54.0)(typescript@5.3.2): 803 | resolution: {integrity: sha512-s8/jNFPKPNRmXEnNXfuo1gemBdVmpQsK1pcu+QIvuNJuhFzGrpD7WjOcvDc/+uEdfzSYpNu7U/+MmbScjoQ6vg==} 804 | engines: {node: ^16.0.0 || >=18.0.0} 805 | peerDependencies: 806 | eslint: ^7.0.0 || ^8.0.0 807 | typescript: '*' 808 | peerDependenciesMeta: 809 | typescript: 810 | optional: true 811 | dependencies: 812 | '@typescript-eslint/scope-manager': 6.12.0 813 | '@typescript-eslint/types': 6.12.0 814 | '@typescript-eslint/typescript-estree': 6.12.0(typescript@5.3.2) 815 | '@typescript-eslint/visitor-keys': 6.12.0 816 | debug: 4.3.4 817 | eslint: 8.54.0 818 | typescript: 5.3.2 819 | transitivePeerDependencies: 820 | - supports-color 821 | dev: true 822 | 823 | /@typescript-eslint/scope-manager@6.12.0: 824 | resolution: {integrity: sha512-5gUvjg+XdSj8pcetdL9eXJzQNTl3RD7LgUiYTl8Aabdi8hFkaGSYnaS6BLc0BGNaDH+tVzVwmKtWvu0jLgWVbw==} 825 | engines: {node: ^16.0.0 || >=18.0.0} 826 | dependencies: 827 | '@typescript-eslint/types': 6.12.0 828 | '@typescript-eslint/visitor-keys': 6.12.0 829 | dev: true 830 | 831 | /@typescript-eslint/type-utils@6.12.0(eslint@8.54.0)(typescript@5.3.2): 832 | resolution: {integrity: sha512-WWmRXxhm1X8Wlquj+MhsAG4dU/Blvf1xDgGaYCzfvStP2NwPQh6KBvCDbiOEvaE0filhranjIlK/2fSTVwtBng==} 833 | engines: {node: ^16.0.0 || >=18.0.0} 834 | peerDependencies: 835 | eslint: ^7.0.0 || ^8.0.0 836 | typescript: '*' 837 | peerDependenciesMeta: 838 | typescript: 839 | optional: true 840 | dependencies: 841 | '@typescript-eslint/typescript-estree': 6.12.0(typescript@5.3.2) 842 | '@typescript-eslint/utils': 6.12.0(eslint@8.54.0)(typescript@5.3.2) 843 | debug: 4.3.4 844 | eslint: 8.54.0 845 | ts-api-utils: 1.0.3(typescript@5.3.2) 846 | typescript: 5.3.2 847 | transitivePeerDependencies: 848 | - supports-color 849 | dev: true 850 | 851 | /@typescript-eslint/types@6.12.0: 852 | resolution: {integrity: sha512-MA16p/+WxM5JG/F3RTpRIcuOghWO30//VEOvzubM8zuOOBYXsP+IfjoCXXiIfy2Ta8FRh9+IO9QLlaFQUU+10Q==} 853 | engines: {node: ^16.0.0 || >=18.0.0} 854 | dev: true 855 | 856 | /@typescript-eslint/typescript-estree@6.12.0(typescript@5.3.2): 857 | resolution: {integrity: sha512-vw9E2P9+3UUWzhgjyyVczLWxZ3GuQNT7QpnIY3o5OMeLO/c8oHljGc8ZpryBMIyympiAAaKgw9e5Hl9dCWFOYw==} 858 | engines: {node: ^16.0.0 || >=18.0.0} 859 | peerDependencies: 860 | typescript: '*' 861 | peerDependenciesMeta: 862 | typescript: 863 | optional: true 864 | dependencies: 865 | '@typescript-eslint/types': 6.12.0 866 | '@typescript-eslint/visitor-keys': 6.12.0 867 | debug: 4.3.4 868 | globby: 11.1.0 869 | is-glob: 4.0.3 870 | semver: 7.5.4 871 | ts-api-utils: 1.0.3(typescript@5.3.2) 872 | typescript: 5.3.2 873 | transitivePeerDependencies: 874 | - supports-color 875 | dev: true 876 | 877 | /@typescript-eslint/utils@6.12.0(eslint@8.54.0)(typescript@5.3.2): 878 | resolution: {integrity: sha512-LywPm8h3tGEbgfyjYnu3dauZ0U7R60m+miXgKcZS8c7QALO9uWJdvNoP+duKTk2XMWc7/Q3d/QiCuLN9X6SWyQ==} 879 | engines: {node: ^16.0.0 || >=18.0.0} 880 | peerDependencies: 881 | eslint: ^7.0.0 || ^8.0.0 882 | dependencies: 883 | '@eslint-community/eslint-utils': 4.4.0(eslint@8.54.0) 884 | '@types/json-schema': 7.0.15 885 | '@types/semver': 7.5.6 886 | '@typescript-eslint/scope-manager': 6.12.0 887 | '@typescript-eslint/types': 6.12.0 888 | '@typescript-eslint/typescript-estree': 6.12.0(typescript@5.3.2) 889 | eslint: 8.54.0 890 | semver: 7.5.4 891 | transitivePeerDependencies: 892 | - supports-color 893 | - typescript 894 | dev: true 895 | 896 | /@typescript-eslint/visitor-keys@6.12.0: 897 | resolution: {integrity: sha512-rg3BizTZHF1k3ipn8gfrzDXXSFKyOEB5zxYXInQ6z0hUvmQlhaZQzK+YmHmNViMA9HzW5Q9+bPPt90bU6GQwyw==} 898 | engines: {node: ^16.0.0 || >=18.0.0} 899 | dependencies: 900 | '@typescript-eslint/types': 6.12.0 901 | eslint-visitor-keys: 3.4.3 902 | dev: true 903 | 904 | /@uidotdev/usehooks@2.4.1(react-dom@18.2.0)(react@18.2.0): 905 | resolution: {integrity: sha512-1I+RwWyS+kdv3Mv0Vmc+p0dPYH0DTRAo04HLyXReYBL9AeseDWUJyi4THuksBJcu9F0Pih69Ak150VDnqbVnXg==} 906 | engines: {node: '>=16'} 907 | peerDependencies: 908 | react: '>=18.0.0' 909 | react-dom: '>=18.0.0' 910 | dependencies: 911 | react: 18.2.0 912 | react-dom: 18.2.0(react@18.2.0) 913 | dev: false 914 | 915 | /@ungap/structured-clone@1.2.0: 916 | resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} 917 | dev: true 918 | 919 | /@use-gesture/core@10.3.0: 920 | resolution: {integrity: sha512-rh+6MND31zfHcy9VU3dOZCqGY511lvGcfyJenN4cWZe0u1BH6brBpBddLVXhF2r4BMqWbvxfsbL7D287thJU2A==} 921 | dev: false 922 | 923 | /@use-gesture/react@10.3.0(react@18.2.0): 924 | resolution: {integrity: sha512-3zc+Ve99z4usVP6l9knYVbVnZgfqhKah7sIG+PS2w+vpig2v2OLct05vs+ZXMzwxdNCMka8B+8WlOo0z6Pn6DA==} 925 | peerDependencies: 926 | react: '>= 16.8.0' 927 | dependencies: 928 | '@use-gesture/core': 10.3.0 929 | react: 18.2.0 930 | dev: false 931 | 932 | /@vitejs/plugin-react-swc@3.5.0(vite@5.0.2): 933 | resolution: {integrity: sha512-1PrOvAaDpqlCV+Up8RkAh9qaiUjoDUcjtttyhXDKw53XA6Ve16SOp6cCOpRs8Dj8DqUQs6eTW5YkLcLJjrXAig==} 934 | peerDependencies: 935 | vite: ^4 || ^5 936 | dependencies: 937 | '@swc/core': 1.3.99 938 | vite: 5.0.2(@types/node@20.10.0)(less@4.2.0) 939 | transitivePeerDependencies: 940 | - '@swc/helpers' 941 | dev: true 942 | 943 | /acorn-jsx@5.3.2(acorn@8.11.2): 944 | resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} 945 | peerDependencies: 946 | acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 947 | dependencies: 948 | acorn: 8.11.2 949 | dev: true 950 | 951 | /acorn@8.11.2: 952 | resolution: {integrity: sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w==} 953 | engines: {node: '>=0.4.0'} 954 | hasBin: true 955 | dev: true 956 | 957 | /ahooks-v3-count@1.0.0: 958 | resolution: {integrity: sha512-V7uUvAwnimu6eh/PED4mCDjE7tokeZQLKlxg9lCTMPhN+NjsSbtdacByVlR1oluXQzD3MOw55wylDmQo4+S9ZQ==} 959 | dev: false 960 | 961 | /ahooks@3.7.8(react@18.2.0): 962 | resolution: {integrity: sha512-e/NMlQWoCjaUtncNFIZk3FG1ImSkV/JhScQSkTqnftakRwdfZWSw6zzoWSG9OMYqPNs2MguDYBUFFC6THelWXA==} 963 | engines: {node: '>=8.0.0'} 964 | peerDependencies: 965 | react: ^16.8.0 || ^17.0.0 || ^18.0.0 966 | dependencies: 967 | '@babel/runtime': 7.23.4 968 | '@types/js-cookie': 2.2.7 969 | ahooks-v3-count: 1.0.0 970 | dayjs: 1.11.10 971 | intersection-observer: 0.12.2 972 | js-cookie: 2.2.1 973 | lodash: 4.17.21 974 | react: 18.2.0 975 | resize-observer-polyfill: 1.5.1 976 | screenfull: 5.2.0 977 | tslib: 2.6.2 978 | dev: false 979 | 980 | /ajv@6.12.6: 981 | resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} 982 | dependencies: 983 | fast-deep-equal: 3.1.3 984 | fast-json-stable-stringify: 2.1.0 985 | json-schema-traverse: 0.4.1 986 | uri-js: 4.4.1 987 | dev: true 988 | 989 | /ansi-regex@5.0.1: 990 | resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} 991 | engines: {node: '>=8'} 992 | dev: true 993 | 994 | /ansi-styles@4.3.0: 995 | resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} 996 | engines: {node: '>=8'} 997 | dependencies: 998 | color-convert: 2.0.1 999 | dev: true 1000 | 1001 | /antd-mobile-icons@0.3.0: 1002 | resolution: {integrity: sha512-rqINQpJWZWrva9moCd1Ye695MZYWmqLPE+bY8d2xLRy7iSQwPsinCdZYjpUPp2zL/LnKYSyXxP2ut2A+DC+whQ==} 1003 | dev: false 1004 | 1005 | /antd-mobile-v5-count@1.0.1: 1006 | resolution: {integrity: sha512-YGsiEDCPUDz3SzfXi6gLZn/HpeSMW+jgPc4qiYUr1fSopg3hkUie2TnooJdExgfiETHefH3Ggs58He0OVfegLA==} 1007 | dev: false 1008 | 1009 | /antd-mobile@5.33.0(react-dom@18.2.0)(react@18.2.0): 1010 | resolution: {integrity: sha512-Q1t8It+8D8Sc2Y11KR+a75leTqsEJe3C2wzF154fJmzJHxYN5efSIrCOjrDVok4hvWWilpN9wb7+lxvDwmXF7g==} 1011 | peerDependencies: 1012 | react: ^16.8.0 || ^17.0.0 || ^18.0.0 1013 | dependencies: 1014 | '@floating-ui/dom': 1.5.3 1015 | '@rc-component/mini-decimal': 1.1.0 1016 | '@react-spring/web': 9.6.1(react-dom@18.2.0)(react@18.2.0) 1017 | '@use-gesture/react': 10.3.0(react@18.2.0) 1018 | ahooks: 3.7.8(react@18.2.0) 1019 | antd-mobile-icons: 0.3.0 1020 | antd-mobile-v5-count: 1.0.1 1021 | classnames: 2.3.2 1022 | dayjs: 1.11.10 1023 | lodash: 4.17.21 1024 | rc-field-form: 1.27.4(react-dom@18.2.0)(react@18.2.0) 1025 | rc-util: 5.38.1(react-dom@18.2.0)(react@18.2.0) 1026 | react: 18.2.0 1027 | react-is: 18.2.0 1028 | runes2: 1.1.3 1029 | staged-components: 1.1.3(react@18.2.0) 1030 | tslib: 2.6.2 1031 | use-sync-external-store: 1.2.0(react@18.2.0) 1032 | transitivePeerDependencies: 1033 | - react-dom 1034 | dev: false 1035 | 1036 | /argparse@2.0.1: 1037 | resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} 1038 | dev: true 1039 | 1040 | /array-union@2.1.0: 1041 | resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} 1042 | engines: {node: '>=8'} 1043 | dev: true 1044 | 1045 | /async-validator@4.2.5: 1046 | resolution: {integrity: sha512-7HhHjtERjqlNbZtqNqy2rckN/SpOOlmDliet+lP7k+eKZEjPk3DgyeU9lIXLdeLz0uBbbVp+9Qdow9wJWgwwfg==} 1047 | dev: false 1048 | 1049 | /asynckit@0.4.0: 1050 | resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} 1051 | dev: false 1052 | 1053 | /axios-hooks@5.0.2(axios@1.6.2)(react@18.2.0): 1054 | resolution: {integrity: sha512-A047WTutYx5mYzfPc+CFblEliHLlLQ9zyrCJGtQeu5RyX0aLiAaOqqSvu2C6ts4fHFZfK9IPflqppIeIjldlrg==} 1055 | peerDependencies: 1056 | axios: '>=1.0.0' 1057 | react: ^16.8.0-0 || ^17.0.0 || ^18.0.0 1058 | dependencies: 1059 | '@babel/runtime': 7.23.4 1060 | axios: 1.6.2 1061 | dequal: 2.0.3 1062 | lru-cache: 10.1.0 1063 | react: 18.2.0 1064 | dev: false 1065 | 1066 | /axios@1.6.2: 1067 | resolution: {integrity: sha512-7i24Ri4pmDRfJTR7LDBhsOTtcm+9kjX5WiY1X3wIisx6G9So3pfMkEiU7emUBe46oceVImccTEM3k6C5dbVW8A==} 1068 | dependencies: 1069 | follow-redirects: 1.15.3 1070 | form-data: 4.0.0 1071 | proxy-from-env: 1.1.0 1072 | transitivePeerDependencies: 1073 | - debug 1074 | dev: false 1075 | 1076 | /balanced-match@1.0.2: 1077 | resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} 1078 | dev: true 1079 | 1080 | /brace-expansion@1.1.11: 1081 | resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} 1082 | dependencies: 1083 | balanced-match: 1.0.2 1084 | concat-map: 0.0.1 1085 | dev: true 1086 | 1087 | /braces@3.0.2: 1088 | resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} 1089 | engines: {node: '>=8'} 1090 | dependencies: 1091 | fill-range: 7.0.1 1092 | dev: true 1093 | 1094 | /callsites@3.1.0: 1095 | resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} 1096 | engines: {node: '>=6'} 1097 | dev: true 1098 | 1099 | /chalk@4.1.2: 1100 | resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} 1101 | engines: {node: '>=10'} 1102 | dependencies: 1103 | ansi-styles: 4.3.0 1104 | supports-color: 7.2.0 1105 | dev: true 1106 | 1107 | /classnames@2.3.2: 1108 | resolution: {integrity: sha512-CSbhY4cFEJRe6/GQzIk5qXZ4Jeg5pcsP7b5peFSDpffpe1cqjASH/n9UTjBwOp6XpMSTwQ8Za2K5V02ueA7Tmw==} 1109 | dev: false 1110 | 1111 | /color-convert@2.0.1: 1112 | resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} 1113 | engines: {node: '>=7.0.0'} 1114 | dependencies: 1115 | color-name: 1.1.4 1116 | dev: true 1117 | 1118 | /color-name@1.1.4: 1119 | resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} 1120 | dev: true 1121 | 1122 | /combined-stream@1.0.8: 1123 | resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} 1124 | engines: {node: '>= 0.8'} 1125 | dependencies: 1126 | delayed-stream: 1.0.0 1127 | dev: false 1128 | 1129 | /concat-map@0.0.1: 1130 | resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} 1131 | dev: true 1132 | 1133 | /copy-anything@2.0.6: 1134 | resolution: {integrity: sha512-1j20GZTsvKNkc4BY3NpMOM8tt///wY3FpIzozTOFO2ffuZcV61nojHXVKIy3WM+7ADCy5FVhdZYHYDdgTU0yJw==} 1135 | dependencies: 1136 | is-what: 3.14.1 1137 | 1138 | /cross-spawn@7.0.3: 1139 | resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} 1140 | engines: {node: '>= 8'} 1141 | dependencies: 1142 | path-key: 3.1.1 1143 | shebang-command: 2.0.0 1144 | which: 2.0.2 1145 | dev: true 1146 | 1147 | /csstype@3.1.2: 1148 | resolution: {integrity: sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==} 1149 | 1150 | /dayjs@1.11.10: 1151 | resolution: {integrity: sha512-vjAczensTgRcqDERK0SR2XMwsF/tSvnvlv6VcF2GIhg6Sx4yOIt/irsr1RDJsKiIyBzJDpCoXiWWq28MqH2cnQ==} 1152 | dev: false 1153 | 1154 | /debug@3.2.7: 1155 | resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==} 1156 | requiresBuild: true 1157 | peerDependencies: 1158 | supports-color: '*' 1159 | peerDependenciesMeta: 1160 | supports-color: 1161 | optional: true 1162 | dependencies: 1163 | ms: 2.1.2 1164 | optional: true 1165 | 1166 | /debug@4.3.4: 1167 | resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} 1168 | engines: {node: '>=6.0'} 1169 | peerDependencies: 1170 | supports-color: '*' 1171 | peerDependenciesMeta: 1172 | supports-color: 1173 | optional: true 1174 | dependencies: 1175 | ms: 2.1.2 1176 | dev: true 1177 | 1178 | /decode-uri-component@0.4.1: 1179 | resolution: {integrity: sha512-+8VxcR21HhTy8nOt6jf20w0c9CADrw1O8d+VZ/YzzCt4bJ3uBjw+D1q2osAB8RnpwwaeYBxy0HyKQxD5JBMuuQ==} 1180 | engines: {node: '>=14.16'} 1181 | dev: false 1182 | 1183 | /deep-is@0.1.4: 1184 | resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} 1185 | dev: true 1186 | 1187 | /delayed-stream@1.0.0: 1188 | resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} 1189 | engines: {node: '>=0.4.0'} 1190 | dev: false 1191 | 1192 | /dequal@2.0.3: 1193 | resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==} 1194 | engines: {node: '>=6'} 1195 | dev: false 1196 | 1197 | /dir-glob@3.0.1: 1198 | resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} 1199 | engines: {node: '>=8'} 1200 | dependencies: 1201 | path-type: 4.0.0 1202 | dev: true 1203 | 1204 | /doctrine@3.0.0: 1205 | resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} 1206 | engines: {node: '>=6.0.0'} 1207 | dependencies: 1208 | esutils: 2.0.3 1209 | dev: true 1210 | 1211 | /enquire.js@2.1.6: 1212 | resolution: {integrity: sha512-/KujNpO+PT63F7Hlpu4h3pE3TokKRHN26JYmQpPyjkRD/N57R7bPDNojMXdi7uveAKjYB7yQnartCxZnFWr0Xw==} 1213 | dev: false 1214 | 1215 | /errno@0.1.8: 1216 | resolution: {integrity: sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==} 1217 | hasBin: true 1218 | requiresBuild: true 1219 | dependencies: 1220 | prr: 1.0.1 1221 | optional: true 1222 | 1223 | /esbuild@0.19.7: 1224 | resolution: {integrity: sha512-6brbTZVqxhqgbpqBR5MzErImcpA0SQdoKOkcWK/U30HtQxnokIpG3TX2r0IJqbFUzqLjhU/zC1S5ndgakObVCQ==} 1225 | engines: {node: '>=12'} 1226 | hasBin: true 1227 | requiresBuild: true 1228 | optionalDependencies: 1229 | '@esbuild/android-arm': 0.19.7 1230 | '@esbuild/android-arm64': 0.19.7 1231 | '@esbuild/android-x64': 0.19.7 1232 | '@esbuild/darwin-arm64': 0.19.7 1233 | '@esbuild/darwin-x64': 0.19.7 1234 | '@esbuild/freebsd-arm64': 0.19.7 1235 | '@esbuild/freebsd-x64': 0.19.7 1236 | '@esbuild/linux-arm': 0.19.7 1237 | '@esbuild/linux-arm64': 0.19.7 1238 | '@esbuild/linux-ia32': 0.19.7 1239 | '@esbuild/linux-loong64': 0.19.7 1240 | '@esbuild/linux-mips64el': 0.19.7 1241 | '@esbuild/linux-ppc64': 0.19.7 1242 | '@esbuild/linux-riscv64': 0.19.7 1243 | '@esbuild/linux-s390x': 0.19.7 1244 | '@esbuild/linux-x64': 0.19.7 1245 | '@esbuild/netbsd-x64': 0.19.7 1246 | '@esbuild/openbsd-x64': 0.19.7 1247 | '@esbuild/sunos-x64': 0.19.7 1248 | '@esbuild/win32-arm64': 0.19.7 1249 | '@esbuild/win32-ia32': 0.19.7 1250 | '@esbuild/win32-x64': 0.19.7 1251 | dev: true 1252 | 1253 | /escape-string-regexp@4.0.0: 1254 | resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} 1255 | engines: {node: '>=10'} 1256 | dev: true 1257 | 1258 | /eslint-plugin-react-hooks@4.6.0(eslint@8.54.0): 1259 | resolution: {integrity: sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==} 1260 | engines: {node: '>=10'} 1261 | peerDependencies: 1262 | eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 1263 | dependencies: 1264 | eslint: 8.54.0 1265 | dev: true 1266 | 1267 | /eslint-plugin-react-refresh@0.4.4(eslint@8.54.0): 1268 | resolution: {integrity: sha512-eD83+65e8YPVg6603Om2iCIwcQJf/y7++MWm4tACtEswFLYMwxwVWAfwN+e19f5Ad/FOyyNg9Dfi5lXhH3Y3rA==} 1269 | peerDependencies: 1270 | eslint: '>=7' 1271 | dependencies: 1272 | eslint: 8.54.0 1273 | dev: true 1274 | 1275 | /eslint-scope@7.2.2: 1276 | resolution: {integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==} 1277 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 1278 | dependencies: 1279 | esrecurse: 4.3.0 1280 | estraverse: 5.3.0 1281 | dev: true 1282 | 1283 | /eslint-visitor-keys@3.4.3: 1284 | resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} 1285 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 1286 | dev: true 1287 | 1288 | /eslint@8.54.0: 1289 | resolution: {integrity: sha512-NY0DfAkM8BIZDVl6PgSa1ttZbx3xHgJzSNJKYcQglem6CppHyMhRIQkBVSSMaSRnLhig3jsDbEzOjwCVt4AmmA==} 1290 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 1291 | hasBin: true 1292 | dependencies: 1293 | '@eslint-community/eslint-utils': 4.4.0(eslint@8.54.0) 1294 | '@eslint-community/regexpp': 4.10.0 1295 | '@eslint/eslintrc': 2.1.3 1296 | '@eslint/js': 8.54.0 1297 | '@humanwhocodes/config-array': 0.11.13 1298 | '@humanwhocodes/module-importer': 1.0.1 1299 | '@nodelib/fs.walk': 1.2.8 1300 | '@ungap/structured-clone': 1.2.0 1301 | ajv: 6.12.6 1302 | chalk: 4.1.2 1303 | cross-spawn: 7.0.3 1304 | debug: 4.3.4 1305 | doctrine: 3.0.0 1306 | escape-string-regexp: 4.0.0 1307 | eslint-scope: 7.2.2 1308 | eslint-visitor-keys: 3.4.3 1309 | espree: 9.6.1 1310 | esquery: 1.5.0 1311 | esutils: 2.0.3 1312 | fast-deep-equal: 3.1.3 1313 | file-entry-cache: 6.0.1 1314 | find-up: 5.0.0 1315 | glob-parent: 6.0.2 1316 | globals: 13.23.0 1317 | graphemer: 1.4.0 1318 | ignore: 5.3.0 1319 | imurmurhash: 0.1.4 1320 | is-glob: 4.0.3 1321 | is-path-inside: 3.0.3 1322 | js-yaml: 4.1.0 1323 | json-stable-stringify-without-jsonify: 1.0.1 1324 | levn: 0.4.1 1325 | lodash.merge: 4.6.2 1326 | minimatch: 3.1.2 1327 | natural-compare: 1.4.0 1328 | optionator: 0.9.3 1329 | strip-ansi: 6.0.1 1330 | text-table: 0.2.0 1331 | transitivePeerDependencies: 1332 | - supports-color 1333 | dev: true 1334 | 1335 | /espree@9.6.1: 1336 | resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==} 1337 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 1338 | dependencies: 1339 | acorn: 8.11.2 1340 | acorn-jsx: 5.3.2(acorn@8.11.2) 1341 | eslint-visitor-keys: 3.4.3 1342 | dev: true 1343 | 1344 | /esquery@1.5.0: 1345 | resolution: {integrity: sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==} 1346 | engines: {node: '>=0.10'} 1347 | dependencies: 1348 | estraverse: 5.3.0 1349 | dev: true 1350 | 1351 | /esrecurse@4.3.0: 1352 | resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} 1353 | engines: {node: '>=4.0'} 1354 | dependencies: 1355 | estraverse: 5.3.0 1356 | dev: true 1357 | 1358 | /estraverse@5.3.0: 1359 | resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} 1360 | engines: {node: '>=4.0'} 1361 | dev: true 1362 | 1363 | /esutils@2.0.3: 1364 | resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} 1365 | engines: {node: '>=0.10.0'} 1366 | dev: true 1367 | 1368 | /fast-deep-equal@3.1.3: 1369 | resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} 1370 | dev: true 1371 | 1372 | /fast-glob@3.3.2: 1373 | resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==} 1374 | engines: {node: '>=8.6.0'} 1375 | dependencies: 1376 | '@nodelib/fs.stat': 2.0.5 1377 | '@nodelib/fs.walk': 1.2.8 1378 | glob-parent: 5.1.2 1379 | merge2: 1.4.1 1380 | micromatch: 4.0.5 1381 | dev: true 1382 | 1383 | /fast-json-stable-stringify@2.1.0: 1384 | resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} 1385 | dev: true 1386 | 1387 | /fast-levenshtein@2.0.6: 1388 | resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} 1389 | dev: true 1390 | 1391 | /fastq@1.15.0: 1392 | resolution: {integrity: sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==} 1393 | dependencies: 1394 | reusify: 1.0.4 1395 | dev: true 1396 | 1397 | /file-entry-cache@6.0.1: 1398 | resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} 1399 | engines: {node: ^10.12.0 || >=12.0.0} 1400 | dependencies: 1401 | flat-cache: 3.2.0 1402 | dev: true 1403 | 1404 | /fill-range@7.0.1: 1405 | resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} 1406 | engines: {node: '>=8'} 1407 | dependencies: 1408 | to-regex-range: 5.0.1 1409 | dev: true 1410 | 1411 | /filter-obj@5.1.0: 1412 | resolution: {integrity: sha512-qWeTREPoT7I0bifpPUXtxkZJ1XJzxWtfoWWkdVGqa+eCr3SHW/Ocp89o8vLvbUuQnadybJpjOKu4V+RwO6sGng==} 1413 | engines: {node: '>=14.16'} 1414 | dev: false 1415 | 1416 | /find-up@5.0.0: 1417 | resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} 1418 | engines: {node: '>=10'} 1419 | dependencies: 1420 | locate-path: 6.0.0 1421 | path-exists: 4.0.0 1422 | dev: true 1423 | 1424 | /flat-cache@3.2.0: 1425 | resolution: {integrity: sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==} 1426 | engines: {node: ^10.12.0 || >=12.0.0} 1427 | dependencies: 1428 | flatted: 3.2.9 1429 | keyv: 4.5.4 1430 | rimraf: 3.0.2 1431 | dev: true 1432 | 1433 | /flatted@3.2.9: 1434 | resolution: {integrity: sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==} 1435 | dev: true 1436 | 1437 | /follow-redirects@1.15.3: 1438 | resolution: {integrity: sha512-1VzOtuEM8pC9SFU1E+8KfTjZyMztRsgEfwQl44z8A25uy13jSzTj6dyK2Df52iV0vgHCfBwLhDWevLn95w5v6Q==} 1439 | engines: {node: '>=4.0'} 1440 | peerDependencies: 1441 | debug: '*' 1442 | peerDependenciesMeta: 1443 | debug: 1444 | optional: true 1445 | dev: false 1446 | 1447 | /form-data@4.0.0: 1448 | resolution: {integrity: sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==} 1449 | engines: {node: '>= 6'} 1450 | dependencies: 1451 | asynckit: 0.4.0 1452 | combined-stream: 1.0.8 1453 | mime-types: 2.1.35 1454 | dev: false 1455 | 1456 | /fs.realpath@1.0.0: 1457 | resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} 1458 | dev: true 1459 | 1460 | /fsevents@2.3.3: 1461 | resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} 1462 | engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} 1463 | os: [darwin] 1464 | requiresBuild: true 1465 | dev: true 1466 | optional: true 1467 | 1468 | /glob-parent@5.1.2: 1469 | resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} 1470 | engines: {node: '>= 6'} 1471 | dependencies: 1472 | is-glob: 4.0.3 1473 | dev: true 1474 | 1475 | /glob-parent@6.0.2: 1476 | resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} 1477 | engines: {node: '>=10.13.0'} 1478 | dependencies: 1479 | is-glob: 4.0.3 1480 | dev: true 1481 | 1482 | /glob@7.2.3: 1483 | resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} 1484 | dependencies: 1485 | fs.realpath: 1.0.0 1486 | inflight: 1.0.6 1487 | inherits: 2.0.4 1488 | minimatch: 3.1.2 1489 | once: 1.4.0 1490 | path-is-absolute: 1.0.1 1491 | dev: true 1492 | 1493 | /globals@13.23.0: 1494 | resolution: {integrity: sha512-XAmF0RjlrjY23MA51q3HltdlGxUpXPvg0GioKiD9X6HD28iMjo2dKC8Vqwm7lne4GNr78+RHTfliktR6ZH09wA==} 1495 | engines: {node: '>=8'} 1496 | dependencies: 1497 | type-fest: 0.20.2 1498 | dev: true 1499 | 1500 | /globby@11.1.0: 1501 | resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} 1502 | engines: {node: '>=10'} 1503 | dependencies: 1504 | array-union: 2.1.0 1505 | dir-glob: 3.0.1 1506 | fast-glob: 3.3.2 1507 | ignore: 5.3.0 1508 | merge2: 1.4.1 1509 | slash: 3.0.0 1510 | dev: true 1511 | 1512 | /graceful-fs@4.2.11: 1513 | resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} 1514 | requiresBuild: true 1515 | optional: true 1516 | 1517 | /graphemer@1.4.0: 1518 | resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} 1519 | dev: true 1520 | 1521 | /has-flag@4.0.0: 1522 | resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} 1523 | engines: {node: '>=8'} 1524 | dev: true 1525 | 1526 | /iconv-lite@0.6.3: 1527 | resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==} 1528 | engines: {node: '>=0.10.0'} 1529 | requiresBuild: true 1530 | dependencies: 1531 | safer-buffer: 2.1.2 1532 | optional: true 1533 | 1534 | /ignore@5.3.0: 1535 | resolution: {integrity: sha512-g7dmpshy+gD7mh88OC9NwSGTKoc3kyLAZQRU1mt53Aw/vnvfXnbC+F/7F7QoYVKbV+KNvJx8wArewKy1vXMtlg==} 1536 | engines: {node: '>= 4'} 1537 | dev: true 1538 | 1539 | /image-size@0.5.5: 1540 | resolution: {integrity: sha512-6TDAlDPZxUFCv+fuOkIoXT/V/f3Qbq8e37p+YOiYrUv3v9cc3/6x78VdfPgFVaB9dZYeLUfKgHRebpkm/oP2VQ==} 1541 | engines: {node: '>=0.10.0'} 1542 | hasBin: true 1543 | requiresBuild: true 1544 | optional: true 1545 | 1546 | /import-fresh@3.3.0: 1547 | resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} 1548 | engines: {node: '>=6'} 1549 | dependencies: 1550 | parent-module: 1.0.1 1551 | resolve-from: 4.0.0 1552 | dev: true 1553 | 1554 | /imurmurhash@0.1.4: 1555 | resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} 1556 | engines: {node: '>=0.8.19'} 1557 | dev: true 1558 | 1559 | /inflight@1.0.6: 1560 | resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} 1561 | dependencies: 1562 | once: 1.4.0 1563 | wrappy: 1.0.2 1564 | dev: true 1565 | 1566 | /inherits@2.0.4: 1567 | resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} 1568 | dev: true 1569 | 1570 | /intersection-observer@0.12.2: 1571 | resolution: {integrity: sha512-7m1vEcPCxXYI8HqnL8CKI6siDyD+eIWSwgB3DZA+ZTogxk9I4CDnj4wilt9x/+/QbHI4YG5YZNmC6458/e9Ktg==} 1572 | dev: false 1573 | 1574 | /is-extglob@2.1.1: 1575 | resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} 1576 | engines: {node: '>=0.10.0'} 1577 | dev: true 1578 | 1579 | /is-glob@4.0.3: 1580 | resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} 1581 | engines: {node: '>=0.10.0'} 1582 | dependencies: 1583 | is-extglob: 2.1.1 1584 | dev: true 1585 | 1586 | /is-number@7.0.0: 1587 | resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} 1588 | engines: {node: '>=0.12.0'} 1589 | dev: true 1590 | 1591 | /is-path-inside@3.0.3: 1592 | resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} 1593 | engines: {node: '>=8'} 1594 | dev: true 1595 | 1596 | /is-what@3.14.1: 1597 | resolution: {integrity: sha512-sNxgpk9793nzSs7bA6JQJGeIuRBQhAaNGG77kzYQgMkrID+lS6SlK07K5LaptscDlSaIgH+GPFzf+d75FVxozA==} 1598 | 1599 | /isexe@2.0.0: 1600 | resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} 1601 | dev: true 1602 | 1603 | /jquery@3.7.1: 1604 | resolution: {integrity: sha512-m4avr8yL8kmFN8psrbFFFmB/If14iN5o9nw/NgnnM+kybDJpRsAynV2BsfpTYrTRysYUdADVD7CkUUizgkpLfg==} 1605 | dev: false 1606 | 1607 | /js-cookie@2.2.1: 1608 | resolution: {integrity: sha512-HvdH2LzI/EAZcUwA8+0nKNtWHqS+ZmijLA30RwZA0bo7ToCckjK5MkGhjED9KoRcXO6BaGI3I9UIzSA1FKFPOQ==} 1609 | dev: false 1610 | 1611 | /js-tokens@4.0.0: 1612 | resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} 1613 | dev: false 1614 | 1615 | /js-yaml@4.1.0: 1616 | resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} 1617 | hasBin: true 1618 | dependencies: 1619 | argparse: 2.0.1 1620 | dev: true 1621 | 1622 | /json-buffer@3.0.1: 1623 | resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} 1624 | dev: true 1625 | 1626 | /json-schema-traverse@0.4.1: 1627 | resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} 1628 | dev: true 1629 | 1630 | /json-stable-stringify-without-jsonify@1.0.1: 1631 | resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} 1632 | dev: true 1633 | 1634 | /json2mq@0.2.0: 1635 | resolution: {integrity: sha512-SzoRg7ux5DWTII9J2qkrZrqV1gt+rTaoufMxEzXbS26Uid0NwaJd123HcoB80TgubEppxxIGdNxCx50fEoEWQA==} 1636 | dependencies: 1637 | string-convert: 0.2.1 1638 | dev: false 1639 | 1640 | /jsqr@1.4.0: 1641 | resolution: {integrity: sha512-dxLob7q65Xg2DvstYkRpkYtmKm2sPJ9oFhrhmudT1dZvNFFTlroai3AWSpLey/w5vMcLBXRgOJsbXpdN9HzU/A==} 1642 | dev: false 1643 | 1644 | /keyv@4.5.4: 1645 | resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} 1646 | dependencies: 1647 | json-buffer: 3.0.1 1648 | dev: true 1649 | 1650 | /less@4.2.0: 1651 | resolution: {integrity: sha512-P3b3HJDBtSzsXUl0im2L7gTO5Ubg8mEN6G8qoTS77iXxXX4Hvu4Qj540PZDvQ8V6DmX6iXo98k7Md0Cm1PrLaA==} 1652 | engines: {node: '>=6'} 1653 | hasBin: true 1654 | dependencies: 1655 | copy-anything: 2.0.6 1656 | parse-node-version: 1.0.1 1657 | tslib: 2.6.2 1658 | optionalDependencies: 1659 | errno: 0.1.8 1660 | graceful-fs: 4.2.11 1661 | image-size: 0.5.5 1662 | make-dir: 2.1.0 1663 | mime: 1.6.0 1664 | needle: 3.2.0 1665 | source-map: 0.6.1 1666 | transitivePeerDependencies: 1667 | - supports-color 1668 | 1669 | /levn@0.4.1: 1670 | resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} 1671 | engines: {node: '>= 0.8.0'} 1672 | dependencies: 1673 | prelude-ls: 1.2.1 1674 | type-check: 0.4.0 1675 | dev: true 1676 | 1677 | /locate-path@6.0.0: 1678 | resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} 1679 | engines: {node: '>=10'} 1680 | dependencies: 1681 | p-locate: 5.0.0 1682 | dev: true 1683 | 1684 | /lodash.debounce@4.0.8: 1685 | resolution: {integrity: sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==} 1686 | dev: false 1687 | 1688 | /lodash.isequal@4.5.0: 1689 | resolution: {integrity: sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==} 1690 | dev: false 1691 | 1692 | /lodash.merge@4.6.2: 1693 | resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} 1694 | dev: true 1695 | 1696 | /lodash@4.17.21: 1697 | resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} 1698 | dev: false 1699 | 1700 | /loose-envify@1.4.0: 1701 | resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} 1702 | hasBin: true 1703 | dependencies: 1704 | js-tokens: 4.0.0 1705 | dev: false 1706 | 1707 | /lru-cache@10.1.0: 1708 | resolution: {integrity: sha512-/1clY/ui8CzjKFyjdvwPWJUYKiFVXG2I2cY0ssG7h4+hwk+XOIX7ZSG9Q7TW8TW3Kp3BUSqgFWBLgL4PJ+Blag==} 1709 | engines: {node: 14 || >=16.14} 1710 | dev: false 1711 | 1712 | /lru-cache@6.0.0: 1713 | resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} 1714 | engines: {node: '>=10'} 1715 | dependencies: 1716 | yallist: 4.0.0 1717 | dev: true 1718 | 1719 | /make-dir@2.1.0: 1720 | resolution: {integrity: sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==} 1721 | engines: {node: '>=6'} 1722 | requiresBuild: true 1723 | dependencies: 1724 | pify: 4.0.1 1725 | semver: 5.7.2 1726 | optional: true 1727 | 1728 | /merge2@1.4.1: 1729 | resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} 1730 | engines: {node: '>= 8'} 1731 | dev: true 1732 | 1733 | /micromatch@4.0.5: 1734 | resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==} 1735 | engines: {node: '>=8.6'} 1736 | dependencies: 1737 | braces: 3.0.2 1738 | picomatch: 2.3.1 1739 | dev: true 1740 | 1741 | /mime-db@1.52.0: 1742 | resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} 1743 | engines: {node: '>= 0.6'} 1744 | dev: false 1745 | 1746 | /mime-types@2.1.35: 1747 | resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} 1748 | engines: {node: '>= 0.6'} 1749 | dependencies: 1750 | mime-db: 1.52.0 1751 | dev: false 1752 | 1753 | /mime@1.6.0: 1754 | resolution: {integrity: sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==} 1755 | engines: {node: '>=4'} 1756 | hasBin: true 1757 | requiresBuild: true 1758 | optional: true 1759 | 1760 | /minimatch@3.1.2: 1761 | resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} 1762 | dependencies: 1763 | brace-expansion: 1.1.11 1764 | dev: true 1765 | 1766 | /ms@2.1.2: 1767 | resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} 1768 | 1769 | /nanoid@3.3.7: 1770 | resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==} 1771 | engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} 1772 | hasBin: true 1773 | dev: true 1774 | 1775 | /natural-compare@1.4.0: 1776 | resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} 1777 | dev: true 1778 | 1779 | /needle@3.2.0: 1780 | resolution: {integrity: sha512-oUvzXnyLiVyVGoianLijF9O/RecZUf7TkBfimjGrLM4eQhXyeJwM6GeAWccwfQ9aa4gMCZKqhAOuLaMIcQxajQ==} 1781 | engines: {node: '>= 4.4.x'} 1782 | hasBin: true 1783 | requiresBuild: true 1784 | dependencies: 1785 | debug: 3.2.7 1786 | iconv-lite: 0.6.3 1787 | sax: 1.3.0 1788 | transitivePeerDependencies: 1789 | - supports-color 1790 | optional: true 1791 | 1792 | /once@1.4.0: 1793 | resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} 1794 | dependencies: 1795 | wrappy: 1.0.2 1796 | dev: true 1797 | 1798 | /optionator@0.9.3: 1799 | resolution: {integrity: sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==} 1800 | engines: {node: '>= 0.8.0'} 1801 | dependencies: 1802 | '@aashutoshrathi/word-wrap': 1.2.6 1803 | deep-is: 0.1.4 1804 | fast-levenshtein: 2.0.6 1805 | levn: 0.4.1 1806 | prelude-ls: 1.2.1 1807 | type-check: 0.4.0 1808 | dev: true 1809 | 1810 | /p-limit@3.1.0: 1811 | resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} 1812 | engines: {node: '>=10'} 1813 | dependencies: 1814 | yocto-queue: 0.1.0 1815 | dev: true 1816 | 1817 | /p-locate@5.0.0: 1818 | resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} 1819 | engines: {node: '>=10'} 1820 | dependencies: 1821 | p-limit: 3.1.0 1822 | dev: true 1823 | 1824 | /parent-module@1.0.1: 1825 | resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} 1826 | engines: {node: '>=6'} 1827 | dependencies: 1828 | callsites: 3.1.0 1829 | dev: true 1830 | 1831 | /parse-node-version@1.0.1: 1832 | resolution: {integrity: sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA==} 1833 | engines: {node: '>= 0.10'} 1834 | 1835 | /path-exists@4.0.0: 1836 | resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} 1837 | engines: {node: '>=8'} 1838 | dev: true 1839 | 1840 | /path-is-absolute@1.0.1: 1841 | resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} 1842 | engines: {node: '>=0.10.0'} 1843 | dev: true 1844 | 1845 | /path-key@3.1.1: 1846 | resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} 1847 | engines: {node: '>=8'} 1848 | dev: true 1849 | 1850 | /path-type@4.0.0: 1851 | resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} 1852 | engines: {node: '>=8'} 1853 | dev: true 1854 | 1855 | /picocolors@1.0.0: 1856 | resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} 1857 | dev: true 1858 | 1859 | /picomatch@2.3.1: 1860 | resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} 1861 | engines: {node: '>=8.6'} 1862 | dev: true 1863 | 1864 | /pify@4.0.1: 1865 | resolution: {integrity: sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==} 1866 | engines: {node: '>=6'} 1867 | requiresBuild: true 1868 | optional: true 1869 | 1870 | /postcss-pxtorem@6.0.0(postcss@8.4.31): 1871 | resolution: {integrity: sha512-ZRXrD7MLLjLk2RNGV6UA4f5Y7gy+a/j1EqjAfp9NdcNYVjUMvg5HTYduTjSkKBkRkfqbg/iKrjMO70V4g1LZeg==} 1872 | peerDependencies: 1873 | postcss: ^8.0.0 1874 | dependencies: 1875 | postcss: 8.4.31 1876 | dev: true 1877 | 1878 | /postcss@8.4.31: 1879 | resolution: {integrity: sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==} 1880 | engines: {node: ^10 || ^12 || >=14} 1881 | dependencies: 1882 | nanoid: 3.3.7 1883 | picocolors: 1.0.0 1884 | source-map-js: 1.0.2 1885 | dev: true 1886 | 1887 | /prelude-ls@1.2.1: 1888 | resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} 1889 | engines: {node: '>= 0.8.0'} 1890 | dev: true 1891 | 1892 | /proxy-from-env@1.1.0: 1893 | resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} 1894 | dev: false 1895 | 1896 | /prr@1.0.1: 1897 | resolution: {integrity: sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==} 1898 | requiresBuild: true 1899 | optional: true 1900 | 1901 | /punycode@2.3.1: 1902 | resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} 1903 | engines: {node: '>=6'} 1904 | dev: true 1905 | 1906 | /query-string@8.1.0: 1907 | resolution: {integrity: sha512-BFQeWxJOZxZGix7y+SByG3F36dA0AbTy9o6pSmKFcFz7DAj0re9Frkty3saBn3nHo3D0oZJ/+rx3r8H8r8Jbpw==} 1908 | engines: {node: '>=14.16'} 1909 | dependencies: 1910 | decode-uri-component: 0.4.1 1911 | filter-obj: 5.1.0 1912 | split-on-first: 3.0.0 1913 | dev: false 1914 | 1915 | /queue-microtask@1.2.3: 1916 | resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} 1917 | dev: true 1918 | 1919 | /rc-field-form@1.27.4(react-dom@18.2.0)(react@18.2.0): 1920 | resolution: {integrity: sha512-PQColQnZimGKArnOh8V2907+VzDCXcqtFvHgevDLtqWc/P7YASb/FqntSmdS8q3VND5SHX3Y1vgMIzY22/f/0Q==} 1921 | engines: {node: '>=8.x'} 1922 | peerDependencies: 1923 | react: '>=16.9.0' 1924 | react-dom: '>=16.9.0' 1925 | dependencies: 1926 | '@babel/runtime': 7.23.4 1927 | async-validator: 4.2.5 1928 | rc-util: 5.38.1(react-dom@18.2.0)(react@18.2.0) 1929 | react: 18.2.0 1930 | react-dom: 18.2.0(react@18.2.0) 1931 | dev: false 1932 | 1933 | /rc-util@5.38.1(react-dom@18.2.0)(react@18.2.0): 1934 | resolution: {integrity: sha512-e4ZMs7q9XqwTuhIK7zBIVFltUtMSjphuPPQXHoHlzRzNdOwUxDejo0Zls5HYaJfRKNURcsS/ceKVULlhjBrxng==} 1935 | peerDependencies: 1936 | react: '>=16.9.0' 1937 | react-dom: '>=16.9.0' 1938 | dependencies: 1939 | '@babel/runtime': 7.23.4 1940 | react: 18.2.0 1941 | react-dom: 18.2.0(react@18.2.0) 1942 | react-is: 18.2.0 1943 | dev: false 1944 | 1945 | /react-dom@18.2.0(react@18.2.0): 1946 | resolution: {integrity: sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==} 1947 | peerDependencies: 1948 | react: ^18.2.0 1949 | dependencies: 1950 | loose-envify: 1.4.0 1951 | react: 18.2.0 1952 | scheduler: 0.23.0 1953 | dev: false 1954 | 1955 | /react-is@18.2.0: 1956 | resolution: {integrity: sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==} 1957 | dev: false 1958 | 1959 | /react-router-dom@6.20.0(react-dom@18.2.0)(react@18.2.0): 1960 | resolution: {integrity: sha512-CbcKjEyiSVpA6UtCHOIYLUYn/UJfwzp55va4yEfpk7JBN3GPqWfHrdLkAvNCcpXr8QoihcDMuk0dzWZxtlB/mQ==} 1961 | engines: {node: '>=14.0.0'} 1962 | peerDependencies: 1963 | react: '>=16.8' 1964 | react-dom: '>=16.8' 1965 | dependencies: 1966 | '@remix-run/router': 1.13.0 1967 | react: 18.2.0 1968 | react-dom: 18.2.0(react@18.2.0) 1969 | react-router: 6.20.0(react@18.2.0) 1970 | dev: false 1971 | 1972 | /react-router@6.20.0(react@18.2.0): 1973 | resolution: {integrity: sha512-pVvzsSsgUxxtuNfTHC4IxjATs10UaAtvLGVSA1tbUE4GDaOSU1Esu2xF5nWLz7KPiMuW8BJWuPFdlGYJ7/rW0w==} 1974 | engines: {node: '>=14.0.0'} 1975 | peerDependencies: 1976 | react: '>=16.8' 1977 | dependencies: 1978 | '@remix-run/router': 1.13.0 1979 | react: 18.2.0 1980 | dev: false 1981 | 1982 | /react-slick@0.29.0(react-dom@18.2.0)(react@18.2.0): 1983 | resolution: {integrity: sha512-TGdOKE+ZkJHHeC4aaoH85m8RnFyWqdqRfAGkhd6dirmATXMZWAxOpTLmw2Ll/jPTQ3eEG7ercFr/sbzdeYCJXA==} 1984 | peerDependencies: 1985 | react: ^0.14.0 || ^15.0.1 || ^16.0.0 || ^17.0.0 || ^18.0.0 1986 | react-dom: ^0.14.0 || ^15.0.1 || ^16.0.0 || ^17.0.0 || ^18.0.0 1987 | dependencies: 1988 | classnames: 2.3.2 1989 | enquire.js: 2.1.6 1990 | json2mq: 0.2.0 1991 | lodash.debounce: 4.0.8 1992 | react: 18.2.0 1993 | react-dom: 18.2.0(react@18.2.0) 1994 | resize-observer-polyfill: 1.5.1 1995 | dev: false 1996 | 1997 | /react@18.2.0: 1998 | resolution: {integrity: sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==} 1999 | engines: {node: '>=0.10.0'} 2000 | dependencies: 2001 | loose-envify: 1.4.0 2002 | dev: false 2003 | 2004 | /regenerator-runtime@0.14.0: 2005 | resolution: {integrity: sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA==} 2006 | dev: false 2007 | 2008 | /resize-observer-polyfill@1.5.1: 2009 | resolution: {integrity: sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg==} 2010 | dev: false 2011 | 2012 | /resolve-from@4.0.0: 2013 | resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} 2014 | engines: {node: '>=4'} 2015 | dev: true 2016 | 2017 | /reusify@1.0.4: 2018 | resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} 2019 | engines: {iojs: '>=1.0.0', node: '>=0.10.0'} 2020 | dev: true 2021 | 2022 | /rimraf@3.0.2: 2023 | resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} 2024 | hasBin: true 2025 | dependencies: 2026 | glob: 7.2.3 2027 | dev: true 2028 | 2029 | /rollup@4.5.2: 2030 | resolution: {integrity: sha512-CRK1uoROBfkcqrZKyaFcqCcZWNsvJ6yVYZkqTlRocZhO2s5yER6Z3f/QaYtO8RGyloPnmhwgzuPQpNGeK210xQ==} 2031 | engines: {node: '>=18.0.0', npm: '>=8.0.0'} 2032 | hasBin: true 2033 | optionalDependencies: 2034 | '@rollup/rollup-android-arm-eabi': 4.5.2 2035 | '@rollup/rollup-android-arm64': 4.5.2 2036 | '@rollup/rollup-darwin-arm64': 4.5.2 2037 | '@rollup/rollup-darwin-x64': 4.5.2 2038 | '@rollup/rollup-linux-arm-gnueabihf': 4.5.2 2039 | '@rollup/rollup-linux-arm64-gnu': 4.5.2 2040 | '@rollup/rollup-linux-arm64-musl': 4.5.2 2041 | '@rollup/rollup-linux-x64-gnu': 4.5.2 2042 | '@rollup/rollup-linux-x64-musl': 4.5.2 2043 | '@rollup/rollup-win32-arm64-msvc': 4.5.2 2044 | '@rollup/rollup-win32-ia32-msvc': 4.5.2 2045 | '@rollup/rollup-win32-x64-msvc': 4.5.2 2046 | fsevents: 2.3.3 2047 | dev: true 2048 | 2049 | /run-parallel@1.2.0: 2050 | resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} 2051 | dependencies: 2052 | queue-microtask: 1.2.3 2053 | dev: true 2054 | 2055 | /runes2@1.1.3: 2056 | resolution: {integrity: sha512-sJ/0iVFLne4f2S7cMB1OckBtC9lqkzP5a/wPnDIkbrWzgUsJ+JMQv6y7hk76U7zvbua+je5GltfpsZazUhG05w==} 2057 | dev: false 2058 | 2059 | /safer-buffer@2.1.2: 2060 | resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} 2061 | requiresBuild: true 2062 | optional: true 2063 | 2064 | /sax@1.3.0: 2065 | resolution: {integrity: sha512-0s+oAmw9zLl1V1cS9BtZN7JAd0cW5e0QH4W3LWEK6a4LaLEA2OTpGYWDY+6XasBLtz6wkm3u1xRw95mRuJ59WA==} 2066 | requiresBuild: true 2067 | optional: true 2068 | 2069 | /scheduler@0.23.0: 2070 | resolution: {integrity: sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==} 2071 | dependencies: 2072 | loose-envify: 1.4.0 2073 | dev: false 2074 | 2075 | /screenfull@5.2.0: 2076 | resolution: {integrity: sha512-9BakfsO2aUQN2K9Fdbj87RJIEZ82Q9IGim7FqM5OsebfoFC6ZHXgDq/KvniuLTPdeM8wY2o6Dj3WQ7KeQCj3cA==} 2077 | engines: {node: '>=0.10.0'} 2078 | dev: false 2079 | 2080 | /semver@5.7.2: 2081 | resolution: {integrity: sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==} 2082 | hasBin: true 2083 | requiresBuild: true 2084 | optional: true 2085 | 2086 | /semver@7.5.4: 2087 | resolution: {integrity: sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==} 2088 | engines: {node: '>=10'} 2089 | hasBin: true 2090 | dependencies: 2091 | lru-cache: 6.0.0 2092 | dev: true 2093 | 2094 | /shebang-command@2.0.0: 2095 | resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} 2096 | engines: {node: '>=8'} 2097 | dependencies: 2098 | shebang-regex: 3.0.0 2099 | dev: true 2100 | 2101 | /shebang-regex@3.0.0: 2102 | resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} 2103 | engines: {node: '>=8'} 2104 | dev: true 2105 | 2106 | /slash@3.0.0: 2107 | resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} 2108 | engines: {node: '>=8'} 2109 | dev: true 2110 | 2111 | /slick-carousel@1.8.1(jquery@3.7.1): 2112 | resolution: {integrity: sha512-XB9Ftrf2EEKfzoQXt3Nitrt/IPbT+f1fgqBdoxO3W/+JYvtEOW6EgxnWfr9GH6nmULv7Y2tPmEX3koxThVmebA==} 2113 | peerDependencies: 2114 | jquery: '>=1.8.0' 2115 | dependencies: 2116 | jquery: 3.7.1 2117 | dev: false 2118 | 2119 | /source-map-js@1.0.2: 2120 | resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==} 2121 | engines: {node: '>=0.10.0'} 2122 | dev: true 2123 | 2124 | /source-map@0.6.1: 2125 | resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} 2126 | engines: {node: '>=0.10.0'} 2127 | requiresBuild: true 2128 | optional: true 2129 | 2130 | /split-on-first@3.0.0: 2131 | resolution: {integrity: sha512-qxQJTx2ryR0Dw0ITYyekNQWpz6f8dGd7vffGNflQQ3Iqj9NJ6qiZ7ELpZsJ/QBhIVAiDfXdag3+Gp8RvWa62AA==} 2132 | engines: {node: '>=12'} 2133 | dev: false 2134 | 2135 | /staged-components@1.1.3(react@18.2.0): 2136 | resolution: {integrity: sha512-9EIswzDqjwlEu+ymkV09TTlJfzSbKgEnNteUnZSTxkpMgr5Wx2CzzA9WcMFWBNCldqVPsHVnRGGrApduq2Se5A==} 2137 | peerDependencies: 2138 | react: ^16.8.0 || ^17.0.0 || ^18.0.0 2139 | dependencies: 2140 | react: 18.2.0 2141 | dev: false 2142 | 2143 | /string-convert@0.2.1: 2144 | resolution: {integrity: sha512-u/1tdPl4yQnPBjnVrmdLo9gtuLvELKsAoRapekWggdiQNvvvum+jYF329d84NAa660KQw7pB2n36KrIKVoXa3A==} 2145 | dev: false 2146 | 2147 | /strip-ansi@6.0.1: 2148 | resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} 2149 | engines: {node: '>=8'} 2150 | dependencies: 2151 | ansi-regex: 5.0.1 2152 | dev: true 2153 | 2154 | /strip-json-comments@3.1.1: 2155 | resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} 2156 | engines: {node: '>=8'} 2157 | dev: true 2158 | 2159 | /supports-color@7.2.0: 2160 | resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} 2161 | engines: {node: '>=8'} 2162 | dependencies: 2163 | has-flag: 4.0.0 2164 | dev: true 2165 | 2166 | /text-table@0.2.0: 2167 | resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} 2168 | dev: true 2169 | 2170 | /to-regex-range@5.0.1: 2171 | resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} 2172 | engines: {node: '>=8.0'} 2173 | dependencies: 2174 | is-number: 7.0.0 2175 | dev: true 2176 | 2177 | /ts-api-utils@1.0.3(typescript@5.3.2): 2178 | resolution: {integrity: sha512-wNMeqtMz5NtwpT/UZGY5alT+VoKdSsOOP/kqHFcUW1P/VRhH2wJ48+DN2WwUliNbQ976ETwDL0Ifd2VVvgonvg==} 2179 | engines: {node: '>=16.13.0'} 2180 | peerDependencies: 2181 | typescript: '>=4.2.0' 2182 | dependencies: 2183 | typescript: 5.3.2 2184 | dev: true 2185 | 2186 | /tslib@2.6.2: 2187 | resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==} 2188 | 2189 | /type-check@0.4.0: 2190 | resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} 2191 | engines: {node: '>= 0.8.0'} 2192 | dependencies: 2193 | prelude-ls: 1.2.1 2194 | dev: true 2195 | 2196 | /type-fest@0.20.2: 2197 | resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} 2198 | engines: {node: '>=10'} 2199 | dev: true 2200 | 2201 | /typescript@5.3.2: 2202 | resolution: {integrity: sha512-6l+RyNy7oAHDfxC4FzSJcz9vnjTKxrLpDG5M2Vu4SHRVNg6xzqZp6LYSR9zjqQTu8DU/f5xwxUdADOkbrIX2gQ==} 2203 | engines: {node: '>=14.17'} 2204 | hasBin: true 2205 | dev: true 2206 | 2207 | /undici-types@5.26.5: 2208 | resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} 2209 | 2210 | /uri-js@4.4.1: 2211 | resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} 2212 | dependencies: 2213 | punycode: 2.3.1 2214 | dev: true 2215 | 2216 | /use-sync-external-store@1.2.0(react@18.2.0): 2217 | resolution: {integrity: sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA==} 2218 | peerDependencies: 2219 | react: ^16.8.0 || ^17.0.0 || ^18.0.0 2220 | dependencies: 2221 | react: 18.2.0 2222 | dev: false 2223 | 2224 | /vite@5.0.2(@types/node@20.10.0)(less@4.2.0): 2225 | resolution: {integrity: sha512-6CCq1CAJCNM1ya2ZZA7+jS2KgnhbzvxakmlIjN24cF/PXhRMzpM/z8QgsVJA/Dm5fWUWnVEsmtBoMhmerPxT0g==} 2226 | engines: {node: ^18.0.0 || >=20.0.0} 2227 | hasBin: true 2228 | peerDependencies: 2229 | '@types/node': ^18.0.0 || >=20.0.0 2230 | less: '*' 2231 | lightningcss: ^1.21.0 2232 | sass: '*' 2233 | stylus: '*' 2234 | sugarss: '*' 2235 | terser: ^5.4.0 2236 | peerDependenciesMeta: 2237 | '@types/node': 2238 | optional: true 2239 | less: 2240 | optional: true 2241 | lightningcss: 2242 | optional: true 2243 | sass: 2244 | optional: true 2245 | stylus: 2246 | optional: true 2247 | sugarss: 2248 | optional: true 2249 | terser: 2250 | optional: true 2251 | dependencies: 2252 | '@types/node': 20.10.0 2253 | esbuild: 0.19.7 2254 | less: 4.2.0 2255 | postcss: 8.4.31 2256 | rollup: 4.5.2 2257 | optionalDependencies: 2258 | fsevents: 2.3.3 2259 | dev: true 2260 | 2261 | /which@2.0.2: 2262 | resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} 2263 | engines: {node: '>= 8'} 2264 | hasBin: true 2265 | dependencies: 2266 | isexe: 2.0.0 2267 | dev: true 2268 | 2269 | /wrappy@1.0.2: 2270 | resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} 2271 | dev: true 2272 | 2273 | /yallist@4.0.0: 2274 | resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} 2275 | dev: true 2276 | 2277 | /yocto-queue@0.1.0: 2278 | resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} 2279 | engines: {node: '>=10'} 2280 | dev: true 2281 | 2282 | /zustand@4.4.6(@types/react@18.2.38)(react@18.2.0): 2283 | resolution: {integrity: sha512-Rb16eW55gqL4W2XZpJh0fnrATxYEG3Apl2gfHTyDSE965x/zxslTikpNch0JgNjJA9zK6gEFW8Fl6d1rTZaqgg==} 2284 | engines: {node: '>=12.7.0'} 2285 | peerDependencies: 2286 | '@types/react': '>=16.8' 2287 | immer: '>=9.0' 2288 | react: '>=16.8' 2289 | peerDependenciesMeta: 2290 | '@types/react': 2291 | optional: true 2292 | immer: 2293 | optional: true 2294 | react: 2295 | optional: true 2296 | dependencies: 2297 | '@types/react': 18.2.38 2298 | react: 18.2.0 2299 | use-sync-external-store: 1.2.0(react@18.2.0) 2300 | dev: false 2301 | -------------------------------------------------------------------------------- /postcss.config.js: -------------------------------------------------------------------------------- 1 | export default { 2 | plugins: { 3 | 'postcss-pxtorem': { 4 | rootValue: 16, 5 | unitPrecision: 5, 6 | propList: ['*'], 7 | selectorBlackList: [], 8 | replace: true, 9 | mediaQuery: false, 10 | minPixelValue: 0, 11 | }, 12 | }, 13 | }; 14 | -------------------------------------------------------------------------------- /public/null.svg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JanYork/react-h5-template/44b603167d83eea31e2fd4cb86fbb1c6ea7e9f92/public/null.svg -------------------------------------------------------------------------------- /src/api/mock.ts: -------------------------------------------------------------------------------- 1 | import useAxios from 'axios-hooks'; 2 | import {Page, Result} from "@/types/http"; 3 | 4 | export interface MockResult { 5 | id: number; 6 | } 7 | 8 | export interface MockPage { 9 | id: number; 10 | } 11 | 12 | /** 13 | * fetch the data 14 | * 详细使用可以查看 useAxios 的文档 15 | */ 16 | export const useFetchXXX = () => { 17 | // set the url 18 | const url = `/xxx/xxx`; 19 | // fetch the data 20 | const [{data, loading, error}, refetch] = useAxios>(url); 21 | // to do something 22 | return {data, loading, error, refetch}; 23 | } 24 | 25 | 26 | /** 27 | * fetch the data with page 28 | * 详细使用可以查看 useAxios 的文档 29 | */ 30 | export const useFetchPageXXX = (page: number, size: number) => { 31 | // set the url 32 | const url = `/xxx/xxx?page=${page}&size=${size}`; 33 | // fetch the data 34 | const [{data, loading, error}, refetch] = useAxios>(url); 35 | // to do something 36 | return {data, loading, error, refetch}; 37 | } -------------------------------------------------------------------------------- /src/assets/null.svg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JanYork/react-h5-template/44b603167d83eea31e2fd4cb86fbb1c6ea7e9f92/src/assets/null.svg -------------------------------------------------------------------------------- /src/component/carousel/index.less: -------------------------------------------------------------------------------- 1 | .carousel { 2 | .carousel-item { 3 | .carousel-image { 4 | border-radius: 15px; 5 | } 6 | } 7 | } -------------------------------------------------------------------------------- /src/component/carousel/index.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import Slider, {Settings} from 'react-slick'; 3 | import 'slick-carousel/slick/slick.css'; 4 | import 'slick-carousel/slick/slick-theme.css'; 5 | import './index.less'; 6 | 7 | export interface CarouselComponentProps { 8 | images: string[]; 9 | height?: number; 10 | } 11 | 12 | /** 13 | * 轮播图组件 14 | * @param images 图片地址数组 15 | * @param height 图片高度 16 | * @constructor Carousel 17 | */ 18 | const Carousel: React.FC = ({images, height = 180}) => { 19 | const settings: Settings = { 20 | dots: false, 21 | infinite: true, 22 | speed: 3000, 23 | slidesToShow: 1, 24 | slidesToScroll: 1, 25 | autoplay: true, 26 | autoplaySpeed: 2000, 27 | responsive: [ 28 | { 29 | breakpoint: 768, 30 | settings: { 31 | arrows: false, 32 | } 33 | } 34 | ] 35 | }; 36 | 37 | return ( 38 | 39 | {images.map((image, index) => ( 40 |
41 | {`Slide 43 |
44 | ))} 45 |
46 | ); 47 | }; 48 | 49 | export default Carousel; -------------------------------------------------------------------------------- /src/component/qr-scanner/index.tsx: -------------------------------------------------------------------------------- 1 | import React, {useRef, useEffect, useState} from 'react'; 2 | import jsQR from 'jsqr'; 3 | 4 | export interface QRScannerProps { 5 | width?: number; 6 | height?: number; 7 | onScan: (data: string) => void; 8 | } 9 | 10 | /** 11 | * 二维码扫描组件 12 | * @param width 画布宽度 13 | * @param height 画布高度 14 | * @param onScan 扫描成功的回调函数 15 | * @constructor QRScanner 16 | */ 17 | const QRScanner: React.FC = ({width = 300, height = 300, onScan}) => { 18 | const videoRef = useRef(null); 19 | const canvasRef = useRef(null); 20 | const [isScanning, setIsScanning] = useState(true); 21 | const [scanSuccess, setScanSuccess] = useState(false); // 新的状态变量 22 | let streamRef: MediaStream | null = null; // 存储摄像头流的引用 23 | 24 | useEffect(() => { 25 | navigator.mediaDevices.getUserMedia({video: {facingMode: "environment"}}) 26 | .then(stream => { 27 | streamRef = stream; // 存储对摄像头流的引用 28 | if (videoRef.current) { 29 | videoRef.current.srcObject = stream; 30 | videoRef.current.addEventListener('loadedmetadata', () => { 31 | videoRef.current?.play().then(() => { 32 | requestAnimationFrame(tick); 33 | }).catch(err => console.error("Error playing video: ", err)); 34 | }); 35 | } 36 | }).catch(err => { 37 | console.error("Error accessing media devices: ", err); 38 | setIsScanning(false); 39 | }); 40 | }, []); 41 | const tick = () => { 42 | // 如果已经成功扫描,就不再继续执行tick 43 | if (!isScanning) return; 44 | 45 | if (videoRef.current && canvasRef.current) { 46 | if (videoRef.current.readyState === videoRef.current.HAVE_ENOUGH_DATA) { 47 | let video = videoRef.current; 48 | let canvas = canvasRef.current; 49 | let ctx = canvas.getContext('2d'); 50 | 51 | if (ctx) { 52 | canvas.height = height; 53 | canvas.width = width; 54 | ctx.drawImage(video, 0, 0, canvas.width, canvas.height); 55 | 56 | let imageData = ctx.getImageData(0, 0, canvas.width, canvas.height); 57 | let code = jsQR(imageData.data, imageData.width, imageData.height); 58 | 59 | if (code) { 60 | onScan(code.data); // 扫码成功 61 | setIsScanning(false); // 更新状态为不再扫描 62 | setScanSuccess(true); // 显示扫描成功的蒙层 63 | if (streamRef) { 64 | let tracks = streamRef.getTracks(); 65 | tracks.forEach(track => track.stop()); // 关闭摄像头 66 | } 67 | return; // 直接返回,避免再次调用 requestAnimationFrame 68 | } 69 | } 70 | } 71 | requestAnimationFrame(tick); 72 | } 73 | }; 74 | return ( 75 |
76 | 77 | 83 | {scanSuccess &&
识别成功!
} {/* 显示识别成功的蒙层 */} 84 |
85 | ); 86 | } 87 | 88 | export default QRScanner; 89 | -------------------------------------------------------------------------------- /src/composables/authorization.ts: -------------------------------------------------------------------------------- 1 | import {useState, useEffect} from 'react'; 2 | 3 | export const STORAGE_AUTHORIZE_KEY = 'token'; 4 | 5 | export const useAuthorization = () => { 6 | const [currentToken, setCurrentToken] = useState(localStorage.getItem(STORAGE_AUTHORIZE_KEY)); 7 | 8 | // 同步 localStorage 变更 9 | useEffect(() => { 10 | const handleStorageChange = (event: StorageEvent) => { 11 | if (event.key === STORAGE_AUTHORIZE_KEY) { 12 | setCurrentToken(localStorage.getItem(STORAGE_AUTHORIZE_KEY)); 13 | } 14 | }; 15 | 16 | window.addEventListener('storage', handleStorageChange); 17 | return () => { 18 | window.removeEventListener('storage', handleStorageChange); 19 | }; 20 | }, []); 21 | 22 | const login = (token: string) => { 23 | localStorage.setItem(STORAGE_AUTHORIZE_KEY, token); 24 | setCurrentToken(token); 25 | }; 26 | 27 | const logout = () => { 28 | localStorage.removeItem(STORAGE_AUTHORIZE_KEY); 29 | setCurrentToken(null); 30 | }; 31 | 32 | const isLogin = () => { 33 | return !!currentToken; 34 | }; 35 | 36 | return { 37 | token: currentToken, 38 | login, 39 | logout, 40 | isLogin 41 | }; 42 | }; 43 | -------------------------------------------------------------------------------- /src/composables/language.ts: -------------------------------------------------------------------------------- 1 | import {setDefaultConfig} from 'antd-mobile'; 2 | import enUS from 'antd-mobile/es/locales/en-US'; 3 | import zhCN from 'antd-mobile/es/locales/zh-CN'; 4 | 5 | function changeLanguage(language: string) { 6 | let locale; 7 | switch (language) { 8 | case 'zh_CN': 9 | locale = enUS; 10 | break; 11 | case 'en_US': 12 | locale = zhCN; 13 | break; 14 | default: 15 | locale = enUS; // 或者是你的默认语言 16 | } 17 | 18 | setDefaultConfig({locale: locale}); 19 | } 20 | 21 | export default changeLanguage; 22 | -------------------------------------------------------------------------------- /src/enum/http-enum.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * @description: request method 3 | */ 4 | export enum RequestEnum { 5 | GET = 'GET', 6 | POST = 'POST', 7 | PUT = 'PUT', 8 | DELETE = 'DELETE', 9 | } 10 | 11 | /** 12 | * @description: contentType 13 | */ 14 | export enum ContentTypeEnum { 15 | // json 16 | JSON = 'application/json;charset=UTF-8', 17 | // form-data qs 18 | FORM_URLENCODED = 'application/x-www-form-urlencoded;charset=UTF-8', 19 | // form-data upload 20 | FORM_DATA = 'multipart/form-data;charset=UTF-8', 21 | } 22 | -------------------------------------------------------------------------------- /src/hooks/i18n.ts: -------------------------------------------------------------------------------- 1 | import zhCN from '@/locales/zh_CN.json' 2 | import enUS from '@/locales/en_US.json' 3 | import {useI18nStore} from '@/store/i18n'; 4 | 5 | export default function useI18n() { 6 | const {lang} = useI18nStore(); 7 | const locales = lang === 'en_US' ? enUS : zhCN; 8 | 9 | return (name: string) => { 10 | return locales[name as keyof typeof locales] || name; 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /src/hooks/location.ts: -------------------------------------------------------------------------------- 1 | import {useState, useEffect} from 'react'; 2 | import useI18n from "@/hooks/i18n"; 3 | 4 | // 定义位置坐标的类型 5 | export interface Coordinates { 6 | lat: number; 7 | lng: number; 8 | } 9 | 10 | // 定义返回的位置状态的类型 11 | export interface LocationState { 12 | loaded: boolean; 13 | coordinates: Coordinates | null; 14 | } 15 | 16 | // 定义错误状态的类型 17 | export type ErrorState = string | null; 18 | 19 | export const useLocation = (): { location: LocationState; error: ErrorState } => { 20 | const t = useI18n(); 21 | 22 | // 用于存储位置信息和加载状态的状态 23 | const [location, setLocation] = useState({ 24 | loaded: false, 25 | coordinates: null, 26 | }); 27 | 28 | // 用于存储任何错误消息的状态 29 | const [error, setError] = useState(null); 30 | 31 | // 地理位置成功处理函数 32 | const onSuccess = (location: GeolocationPosition) => { 33 | setLocation({ 34 | loaded: true, 35 | coordinates: { 36 | lat: location.coords.latitude, 37 | lng: location.coords.longitude, 38 | }, 39 | }); 40 | }; 41 | 42 | // 地理位置错误处理函数 43 | const onError = (error: GeolocationPositionError) => { 44 | setError(error.message); 45 | }; 46 | 47 | // 使用 useEffect 在组件挂载时执行地理位置请求 48 | useEffect(() => { 49 | // 检查浏览器是否支持地理位置 50 | if (!navigator.geolocation) { 51 | setError(t('hooks.location.unsupported')); 52 | return; 53 | } 54 | 55 | // 请求用户的当前位置 56 | navigator.geolocation.getCurrentPosition(onSuccess, onError); 57 | }, []); 58 | 59 | return {location, error}; 60 | }; 61 | -------------------------------------------------------------------------------- /src/hooks/session.ts: -------------------------------------------------------------------------------- 1 | import {useState, useEffect} from 'react'; 2 | import isEqual from 'lodash.isequal'; 3 | 4 | function useSessionStorage(key: string, initialValue: T): [T, (value: T) => void] { 5 | // 初始化状态 6 | const [storedValue, setStoredValue] = useState(() => { 7 | const item = sessionStorage.getItem(key); 8 | if (item !== null) { 9 | // 如果 sessionStorage 中有数据,则使用现有数据 10 | return JSON.parse(item); 11 | } else { 12 | // 当 sessionStorage 中没有相应的键时,使用 initialValue 初始化,并写入 sessionStorage 13 | sessionStorage.setItem(key, JSON.stringify(initialValue)); 14 | return initialValue; 15 | } 16 | }); 17 | 18 | // 监听并保存变化到 sessionStorage 19 | useEffect(() => { 20 | if (!isEqual(JSON.parse(sessionStorage.getItem(key) || 'null'), storedValue)) { 21 | sessionStorage.setItem(key, JSON.stringify(storedValue)); 22 | } 23 | }, [key, storedValue]); 24 | 25 | return [storedValue, setStoredValue]; 26 | } 27 | 28 | export default useSessionStorage; 29 | -------------------------------------------------------------------------------- /src/http/axios-instance.ts: -------------------------------------------------------------------------------- 1 | import Axios, { 2 | AxiosError, 3 | AxiosInstance as AxiosType, 4 | AxiosResponse, 5 | InternalAxiosRequestConfig 6 | } from 'axios'; 7 | import {STORAGE_AUTHORIZE_KEY} from "@/composables/authorization.ts"; 8 | 9 | export interface ResponseBody { 10 | code: number; 11 | data?: T; 12 | msg: string; 13 | } 14 | 15 | async function requestHandler(config: InternalAxiosRequestConfig): Promise { 16 | const token = localStorage.getItem(STORAGE_AUTHORIZE_KEY); 17 | if (token) { 18 | config.headers[STORAGE_AUTHORIZE_KEY] = token; 19 | } 20 | return config; 21 | } 22 | 23 | function responseHandler(response: AxiosResponse): AxiosResponse { 24 | // 响应拦截器逻辑... 25 | return response; 26 | } 27 | 28 | function errorHandler(error: AxiosError): Promise> { 29 | // 错误处理逻辑... 30 | return Promise.reject(error); 31 | } 32 | 33 | class AxiosInstance { 34 | private readonly instance: AxiosType; 35 | 36 | constructor(baseURL: string) { 37 | this.instance = Axios.create({baseURL}); 38 | 39 | this.instance.interceptors.request.use(requestHandler, errorHandler); 40 | this.instance.interceptors.response.use(responseHandler, errorHandler); 41 | } 42 | 43 | public getInstance(): AxiosType { 44 | return this.instance; 45 | } 46 | } 47 | 48 | const baseURL = import.meta.env.VITE_BASE_URL || 'http://127.0.0.1:8080'; 49 | export const axiosInstance = new AxiosInstance(baseURL).getInstance(); 50 | -------------------------------------------------------------------------------- /src/index.css: -------------------------------------------------------------------------------- 1 | * { 2 | margin: 0; 3 | padding: 0; 4 | box-sizing: border-box; 5 | } 6 | 7 | body { 8 | font-family: 'Roboto', sans-serif; 9 | } 10 | 11 | a, button, input, textarea { 12 | -webkit-tap-highlight-color: transparent; 13 | } 14 | 15 | html { 16 | -webkit-text-size-adjust: 100%; 17 | -ms-text-size-adjust: 100%; 18 | font-size: 100%; 19 | } 20 | 21 | /* 小屏幕设备(如手机)*/ 22 | @media (max-width: 600px) { 23 | html { 24 | font-size: 90%; /* 字体稍微小一点 */ 25 | } 26 | } 27 | 28 | /* 中等屏幕设备(如平板)*/ 29 | @media (min-width: 601px) and (max-width: 1024px) { 30 | html { 31 | font-size: 100%; /* 标准大小 */ 32 | } 33 | } 34 | 35 | /* 大屏幕设备(如桌面)*/ 36 | @media (min-width: 1025px) { 37 | html { 38 | font-size: 110%; /* 字体稍微大一点 */ 39 | } 40 | } 41 | 42 | 43 | * { 44 | -webkit-backface-visibility: hidden; 45 | -moz-backface-visibility: hidden; 46 | -ms-backface-visibility: hidden; 47 | } 48 | 49 | a { 50 | text-decoration: none; 51 | color: inherit; 52 | } 53 | 54 | img { 55 | max-width: 100%; 56 | height: auto; 57 | } 58 | 59 | .ec-navbar { 60 | position: fixed; 61 | top: 0; 62 | left: 0; 63 | right: 0; 64 | z-index: 100; 65 | background-color: #fff; 66 | border-bottom: 1px solid #e5e5e5; 67 | -webkit-transition: all .3s; 68 | transition: all .3s; 69 | } 70 | 71 | :root { 72 | --primary-color: #FFC300; 73 | } 74 | 75 | :root:root { 76 | --adm-color-primary: #FFC300; 77 | --adm-color-success: #00b578; 78 | --adm-color-warning: #ff8f1f; 79 | --adm-color-danger: #ff3141; 80 | 81 | --adm-color-white: #ffffff; 82 | --adm-color-text: #333333; 83 | --adm-color-text-secondary: #666666; 84 | --adm-color-weak: #999999; 85 | --adm-color-light: #cccccc; 86 | --adm-color-border: #eeeeee; 87 | --adm-color-box: #f5f5f5; 88 | --adm-color-background: #ffffff; 89 | 90 | --adm-font-size-main: var(--adm-font-size-5); 91 | 92 | --adm-font-family: -apple-system, blinkmacsystemfont, 'Helvetica Neue', 93 | helvetica, segoe ui, arial, roboto, 'PingFang SC', 'miui', 94 | 'Hiragino Sans GB', 'Microsoft Yahei', sans-serif; 95 | } -------------------------------------------------------------------------------- /src/layout/main/MainLayout.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import {TabBar} from 'antd-mobile'; 3 | import {useNavigate, useLocation} from 'react-router-dom'; 4 | import {ShoppingBag, TransactionOrder, User, Wallet} from '@icon-park/react'; 5 | import useI18n from "@/hooks/i18n.ts"; 6 | import './index.less'; 7 | 8 | interface MainLayoutProps { 9 | children: React.ReactNode; 10 | } 11 | 12 | const MainLayout: React.FC = ({children}) => { 13 | const navigate = useNavigate(); 14 | const t = useI18n(); 15 | const location = useLocation(); 16 | const {pathname} = location; 17 | const [activeKey, setActiveKey] = React.useState(pathname); 18 | 19 | const tabs = [ 20 | { 21 | key: '/', title: t('tabs.home'), icon: activeKey === '/' ? 22 | : 23 | }, 24 | { 25 | key: '/wallet', title: t('tabs.wallet'), icon: activeKey === '/wallet' ? 26 | : 27 | }, 28 | { 29 | key: '/bill', title: t('tabs.bill'), icon: activeKey === '/bill' ? 30 | : 31 | }, 32 | { 33 | key: '/mine', title: t('tabs.mine'), icon: activeKey === '/mine' ? 34 | : 35 | }, 36 | ]; 37 | 38 | const setRouteActive = (value: string) => { 39 | setActiveKey(value); 40 | navigate(value); 41 | }; 42 | 43 | return ( 44 |
45 |
46 | {children} 47 |
48 | 49 |
50 | 51 | {tabs.map(item => ( 52 | 57 | ))} 58 | 59 |
60 |
61 | ); 62 | }; 63 | 64 | export default MainLayout; 65 | -------------------------------------------------------------------------------- /src/layout/main/index.less: -------------------------------------------------------------------------------- 1 | .main-layout { 2 | display: flex; 3 | flex-direction: column; 4 | height: 100vh; 5 | 6 | .layout-content { 7 | flex: 1 1 auto; 8 | overflow-y: auto; 9 | margin-bottom: 50px; 10 | } 11 | 12 | .layout-tab { 13 | flex: 0 0 auto; 14 | position: fixed; 15 | bottom: 0; 16 | width: 100%; 17 | z-index: 1000; 18 | background-color: #fff; 19 | box-shadow: 0 0 3px rgba(0, 0, 0, 0.1); 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /src/locales/en_US.json: -------------------------------------------------------------------------------- 1 | { 2 | "index.title": "Hello World!" 3 | } -------------------------------------------------------------------------------- /src/locales/zh_CN.json: -------------------------------------------------------------------------------- 1 | { 2 | "index.title": "你好,世界!" 3 | } -------------------------------------------------------------------------------- /src/main.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import ReactDOM from 'react-dom/client' 3 | import {BrowserRouter} from 'react-router-dom'; 4 | import App from '@/view/app/App.tsx' 5 | import './index.css' 6 | 7 | ReactDOM.createRoot(document.getElementById('root')!).render( 8 | 9 | 10 | 11 | 12 | , 13 | ) 14 | -------------------------------------------------------------------------------- /src/route/auth.tsx: -------------------------------------------------------------------------------- 1 | import React, {useEffect} from 'react'; 2 | import {useNavigate} from 'react-router-dom'; 3 | 4 | interface AuthRouteProps { 5 | children: React.ReactNode; 6 | auth?: boolean; 7 | } 8 | 9 | /** 10 | * 认证路由 11 | * @param children 子组件 12 | * @param auth 是否需要认证 13 | * @constructor 认证路由组件 14 | */ 15 | const AuthRoute: React.FC = ({children, auth}) => { 16 | const navigate = useNavigate(); 17 | const token = localStorage.getItem('token'); // 或者其他认证令牌的获取方式 18 | const isAuthenticated = Boolean(token); // 认证逻辑 19 | 20 | useEffect(() => { 21 | if (auth && !isAuthenticated) { 22 | navigate('/login'); // 如果未认证且路由需要认证,则重定向到登录 23 | } 24 | }, [auth, isAuthenticated, navigate]); 25 | 26 | return <>{children}; 27 | }; 28 | 29 | export default AuthRoute; 30 | -------------------------------------------------------------------------------- /src/route/render-routes.tsx: -------------------------------------------------------------------------------- 1 | import {Route, Routes} from 'react-router-dom'; 2 | import {routes, AppRoute} from './routes'; 3 | import AuthRoute from './auth.tsx'; 4 | 5 | /** 6 | * 渲染路由 7 | * @constructor RenderRoutes 8 | */ 9 | export const RenderRoutes = () => { 10 | const renderRoutes = (routes: AppRoute[]) => { 11 | return routes.map(route => ( 12 | 17 | {route.element} 18 | 19 | } 20 | > 21 | {route.children && renderRoutes(route.children)} 22 | 23 | )); 24 | }; 25 | 26 | return {renderRoutes(routes)}; 27 | }; 28 | -------------------------------------------------------------------------------- /src/route/routes.tsx: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | import Home from "@/view/home"; 3 | 4 | export interface AppRoute { 5 | path: string; 6 | element: React.ReactNode; 7 | auth?: boolean; 8 | children?: AppRoute[]; 9 | } 10 | 11 | export const routes: AppRoute[] = [ 12 | {path: '/', element: , auth: false}, 13 | {path: '*', element: , auth: false} 14 | ]; -------------------------------------------------------------------------------- /src/store/i18n.ts: -------------------------------------------------------------------------------- 1 | import {create} from 'zustand' 2 | import {persist, createJSONStorage} from 'zustand/middleware' 3 | 4 | export const LANG_KEY = 'lang' 5 | export const useI18nStore = create()( 6 | persist( 7 | (set, get) => ({ 8 | lang: 'en_US', 9 | changeLanguage: (lang) => set({lang}), 10 | toggleLanguage: () => set(() => { 11 | return { 12 | lang: get().lang.includes('zh') ? 'en_US' : 'zh_CN' 13 | } 14 | }) 15 | }), 16 | { 17 | name: 'i18n-storage', 18 | storage: createJSONStorage(() => localStorage) 19 | }, 20 | ), 21 | ) -------------------------------------------------------------------------------- /src/store/user.ts: -------------------------------------------------------------------------------- 1 | import {create} from 'zustand' 2 | import {persist, createJSONStorage} from 'zustand/middleware' 3 | 4 | export const useUserStore = create()( 5 | persist( 6 | (set) => ({ 7 | user: { 8 | name: '', 9 | avatar: '', 10 | email: '' 11 | }, 12 | setUser: (user: User) => set({user}), 13 | clearUser: () => set({ 14 | user: null 15 | }), 16 | }), 17 | { 18 | name: 'user-storage', 19 | storage: createJSONStorage(() => localStorage) 20 | }, 21 | ), 22 | ) -------------------------------------------------------------------------------- /src/types/http.d.ts: -------------------------------------------------------------------------------- 1 | interface Page { 2 | total: number; 3 | size: number; 4 | current: number; 5 | pages: number; 6 | records: T[]; 7 | } 8 | 9 | export interface Result { 10 | success: boolean; 11 | code: number; 12 | message: string; 13 | data: T; 14 | } -------------------------------------------------------------------------------- /src/types/store.d.ts: -------------------------------------------------------------------------------- 1 | interface User { 2 | name: string; 3 | avatar: string; 4 | email: string; 5 | } 6 | 7 | interface UserState { 8 | user: User | null; 9 | setUser: (user: User) => void; 10 | clearUser: () => void; 11 | } 12 | 13 | type lang = 'zh_CN' | 'en_US' 14 | 15 | interface LangStore { 16 | lang: lang; 17 | changeLanguage: (lang: lang) => void 18 | toggleLanguage: () => void 19 | } -------------------------------------------------------------------------------- /src/util/amount.ts: -------------------------------------------------------------------------------- 1 | export function toYuan(num: number) { 2 | return (num / 100).toFixed(2); 3 | } -------------------------------------------------------------------------------- /src/util/index.ts: -------------------------------------------------------------------------------- 1 | export * from './amount'; 2 | export * from './location'; -------------------------------------------------------------------------------- /src/util/location.ts: -------------------------------------------------------------------------------- 1 | export function toKm(m: number): number { 2 | return m / 1000; 3 | } -------------------------------------------------------------------------------- /src/view/app/App.css: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JanYork/react-h5-template/44b603167d83eea31e2fd4cb86fbb1c6ea7e9f92/src/view/app/App.css -------------------------------------------------------------------------------- /src/view/app/App.tsx: -------------------------------------------------------------------------------- 1 | import './App.css' 2 | import {RenderRoutes} from "@/route/render-routes.tsx"; 3 | import {axiosInstance} from "@/http/axios-instance.ts"; 4 | import {configure} from 'axios-hooks' 5 | import enUS from "antd-mobile/es/locales/en-US"; 6 | import {ConfigProvider} from "antd-mobile"; 7 | import {useI18nStore} from "@/store/i18n.ts"; 8 | import zhCN from "antd-mobile/es/locales/zh-CN"; 9 | 10 | function App() { 11 | configure({ 12 | axios: axiosInstance 13 | }) 14 | const i18nStore = useI18nStore() 15 | return ( 16 | <> 17 | 20 | 21 | 22 | 23 | ) 24 | } 25 | 26 | export default App 27 | -------------------------------------------------------------------------------- /src/view/home/index.less: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JanYork/react-h5-template/44b603167d83eea31e2fd4cb86fbb1c6ea7e9f92/src/view/home/index.less -------------------------------------------------------------------------------- /src/view/home/index.tsx: -------------------------------------------------------------------------------- 1 | import useI18n from "@/hooks/i18n.ts"; 2 | import './index.less' 3 | import MainLayout from "@/layout/main/MainLayout.tsx"; 4 | import {Button} from "antd-mobile"; 5 | import {useI18nStore} from "@/store/i18n.ts"; 6 | 7 | function Index() { 8 | const t = useI18n(); 9 | const i18nStore = useI18nStore() 10 | 11 | return ( 12 | <> 13 | 14 |
15 |

{t('index.title')}

16 | 21 | 26 |

Font size 12px

31 | 32 |

Font size 14px

37 | 38 |

Font size 16px

43 | 44 |

Font size 18px

49 |
50 |
51 | 52 | ); 53 | } 54 | 55 | export default Index 56 | -------------------------------------------------------------------------------- /src/vite-env.d.ts: -------------------------------------------------------------------------------- 1 | /// 2 | 3 | interface ImportMetaEnv { 4 | readonly VITE_BASE_URL: string; 5 | } 6 | 7 | interface ImportMeta { 8 | readonly env: ImportMetaEnv; 9 | } -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "ES2020", 4 | "useDefineForClassFields": true, 5 | "lib": ["ES2020", "DOM", "DOM.Iterable"], 6 | "module": "ESNext", 7 | "skipLibCheck": true, 8 | 9 | /* Bundler mode */ 10 | "moduleResolution": "bundler", 11 | "allowImportingTsExtensions": true, 12 | "resolveJsonModule": true, 13 | "isolatedModules": true, 14 | "noEmit": true, 15 | "jsx": "react-jsx", 16 | 17 | /* Linting */ 18 | "strict": true, 19 | "noUnusedLocals": true, 20 | "noUnusedParameters": true, 21 | "noFallthroughCasesInSwitch": true, 22 | 23 | "baseUrl": "./", 24 | "paths": { 25 | "@/*": ["src/*"] 26 | }, 27 | }, 28 | "include": ["src"], 29 | "references": [{ "path": "./tsconfig.node.json" }] 30 | } 31 | -------------------------------------------------------------------------------- /tsconfig.node.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "composite": true, 4 | "skipLibCheck": true, 5 | "module": "ESNext", 6 | "moduleResolution": "bundler", 7 | "allowSyntheticDefaultImports": true 8 | }, 9 | "include": ["vite.config.ts"] 10 | } 11 | -------------------------------------------------------------------------------- /vite.config.ts: -------------------------------------------------------------------------------- 1 | import {defineConfig} from 'vite' 2 | import react from '@vitejs/plugin-react-swc' 3 | import path from "path"; 4 | 5 | export default defineConfig({ 6 | plugins: [react()], 7 | server: { 8 | port: 3000, 9 | host: '0.0.0.0', 10 | }, 11 | resolve: { 12 | alias: { 13 | '@': path.resolve(__dirname, './src'), 14 | '~': '/src', 15 | } 16 | } 17 | }) 18 | --------------------------------------------------------------------------------