├── .github ├── ISSUE_TEMPLATE │ ├── bug_report.yml │ ├── config.yml │ ├── feature_request.yml │ └── typo.yml ├── PULL_REQUEST_TEMPLATE.md ├── dependabot.yml ├── funding.yml └── workflows │ └── tests.yml ├── .gitignore ├── .npmignore ├── .npmrc ├── .nvmrc ├── LICENSE ├── README.md ├── example ├── .npmignore ├── .prettierrc ├── index.html ├── package.json ├── pnpm-lock.yaml ├── src │ ├── App.css │ ├── App.tsx │ ├── Timezone.tsx │ ├── env.d.ts │ ├── index.css │ └── index.tsx ├── tsconfig.json └── vite.config.ts ├── package.json ├── pnpm-lock.yaml ├── src ├── index.tsx ├── tests │ ├── TimezoneSelect.spec.tsx │ ├── mocks │ │ └── cssStub.ts │ └── setupTests.ts ├── timezone-list.ts └── types │ ├── globals.ts │ └── timezone.ts ├── tsconfig.json └── vite.config.ts /.github/ISSUE_TEMPLATE/bug_report.yml: -------------------------------------------------------------------------------- 1 | name: 🐞 Bug report 2 | description: Report an issue 3 | labels: [pending triage] 4 | body: 5 | - type: markdown 6 | attributes: 7 | value: | 8 | Thanks for taking the time to fill out this bug report! 9 | - type: textarea 10 | id: bug-description 11 | attributes: 12 | label: Describe the bug 13 | description: A clear and concise description of what the bug is. If you intend to submit a PR for this issue, tell us in the description. Thanks! 14 | placeholder: Bug description 15 | validations: 16 | required: true 17 | - type: input 18 | id: reproduction 19 | attributes: 20 | label: Reproduction 21 | description: A [minimal reproduction](https://stackoverflow.com/help/minimal-reproducible-example) is **required**, otherwise the issue might be closed without further notice. [**Why & How?**](https://antfu.me/posts/why-reproductions-are-required) 22 | placeholder: Reproduction 23 | validations: 24 | required: true 25 | - type: textarea 26 | id: system-info 27 | attributes: 28 | label: System Info 29 | description: Output of `npx envinfo --system --binaries --browsers` 30 | render: Shell 31 | placeholder: System, Binaries, Browsers 32 | validations: 33 | required: true 34 | - type: dropdown 35 | id: package-manager 36 | attributes: 37 | label: Used Package Manager 38 | description: Select the used package manager 39 | options: 40 | - npm 41 | - yarn 42 | - pnpm 43 | - bun 44 | - n/a 45 | validations: 46 | required: true 47 | - type: checkboxes 48 | id: checkboxes 49 | attributes: 50 | label: Validations 51 | description: Before submitting the issue, please make sure you do the following 52 | options: 53 | - label: Check that there isn't already an issue that reports the same bug to avoid creating a duplicate. 54 | required: true 55 | - label: Check that this is a concrete bug. For Q&A, please open a GitHub Discussion instead. 56 | required: true 57 | - label: The provided reproduction is a [minimal reproducible](https://stackoverflow.com/help/minimal-reproducible-example) of the bug. 58 | required: true 59 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/config.yml: -------------------------------------------------------------------------------- 1 | contact_links: 2 | - name: ⁉️ Why and how to make a reproduction? 3 | url: https://antfu.me/posts/why-reproductions-are-required 4 | about: Reproduction is very important for maintainer to help on your issues! 5 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/feature_request.yml: -------------------------------------------------------------------------------- 1 | name: 🚀 New feature proposal 2 | description: Propose a new feature 3 | labels: [enhancement] 4 | body: 5 | - type: markdown 6 | attributes: 7 | value: | 8 | Thanks for your interest in the project and taking the time to fill out this feature report! 9 | - type: textarea 10 | id: feature-description 11 | attributes: 12 | label: Clear and concise description of the problem 13 | description: 'As a developer using VueUse I want [goal / wish] so that [benefit]. If you intend to submit a PR for this issue, tell us in the description. Thanks!' 14 | validations: 15 | required: true 16 | - type: textarea 17 | id: suggested-solution 18 | attributes: 19 | label: Suggested solution 20 | description: 'In module [xy] we could provide following implementation...' 21 | validations: 22 | required: true 23 | - type: textarea 24 | id: alternative 25 | attributes: 26 | label: Alternative 27 | description: Clear and concise description of any alternative solutions or features you've considered. 28 | - type: textarea 29 | id: additional-context 30 | attributes: 31 | label: Additional context 32 | description: Any other context or screenshots about the feature request here. 33 | - type: checkboxes 34 | id: checkboxes 35 | attributes: 36 | label: Validations 37 | description: Before submitting the issue, please make sure you do the following 38 | options: 39 | - label: Check that there isn't already an issue that request the same feature to avoid creating a duplicate. 40 | required: true 41 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/typo.yml: -------------------------------------------------------------------------------- 1 | name: 👀 Typo / Grammar fix 2 | description: You can just go ahead and send a PR! Thank you! 3 | labels: [] 4 | body: 5 | - type: markdown 6 | attributes: 7 | value: | 8 | ## PR Welcome! 9 | 10 | If the typo / grammar issue is trivial and straightforward, you can help by **directly sending a quick pull request**! 11 | If you spot multiple of them, we suggest combining them into a single PR. Thanks! 12 | - type: textarea 13 | id: context 14 | attributes: 15 | label: Additional context 16 | -------------------------------------------------------------------------------- /.github/PULL_REQUEST_TEMPLATE.md: -------------------------------------------------------------------------------- 1 | 13 | 14 | ### Description 15 | 16 | 17 | 18 | ### Linked Issues 19 | 20 | ### Additional context 21 | 22 | 23 | -------------------------------------------------------------------------------- /.github/dependabot.yml: -------------------------------------------------------------------------------- 1 | version: 2 2 | updates: 3 | - package-ecosystem: "npm" 4 | directory: "/" 5 | open-pull-requests-limit: 3 6 | labels: 7 | - "dependencies" 8 | schedule: 9 | interval: "monthly" 10 | allow: 11 | - dependency-name: "spacetime" 12 | - dependency-name: "timezone-soft" 13 | - dependency-name: "react-select" 14 | -------------------------------------------------------------------------------- /.github/funding.yml: -------------------------------------------------------------------------------- 1 | github: [ndom91] 2 | -------------------------------------------------------------------------------- /.github/workflows/tests.yml: -------------------------------------------------------------------------------- 1 | name: Tests CI 2 | on: [push] 3 | jobs: 4 | test: 5 | runs-on: ubuntu-latest 6 | steps: 7 | - uses: actions/checkout@v3 8 | - uses: pnpm/action-setup@v2 9 | with: 10 | version: '7.30.3' 11 | - name: Test using Node.js 12 | uses: actions/setup-node@v3 13 | with: 14 | node-version: '18' 15 | - run: pnpm install 16 | - run: pnpm test:ci 17 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules/ 2 | dist/ 3 | example/build/ 4 | example/node_modules 5 | -------------------------------------------------------------------------------- /.npmignore: -------------------------------------------------------------------------------- 1 | example/ 2 | tsconfig.json 3 | .gitignore 4 | jest.config.js 5 | .github -------------------------------------------------------------------------------- /.npmrc: -------------------------------------------------------------------------------- 1 | enable-pre-post-scripts=true 2 | auto-install-peers = true 3 | -------------------------------------------------------------------------------- /.nvmrc: -------------------------------------------------------------------------------- 1 | 20 2 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2022 Nico Domino 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # 🌐⌚ react-timezone-select 2 | 3 | [![npm](https://img.shields.io/npm/v/react-timezone-select?style=flat-square)](https://www.npmjs.com/package/react-timezone-select) 4 | [![NPM Downloads](https://img.shields.io/npm/dm/react-timezone-select?style=flat-square)](https://www.npmjs.com/package/react-timezone-select) 5 | [![Skypack](https://img.shields.io/badge/%3C%2F%3E-TypeScript-%230074c1.svg?style=flat-square)](https://skypack.dev/view/react-timezone-select) 6 | [![Test CI](https://flat.badgen.net/github/checks/ndom91/react-timezone-select/main?style=flat-square&label=tests)](https://github.com/ndom91/react-timezone-select/actions?query=workflow%3A%22Tests+CI%22) 7 | [![MIT](https://flat.badgen.net/badge/license/MIT/blue?style=flat-square)](https://github.com/ndom91/react-timezone-select/blob/main/LICENSE) 8 | 9 | Another react timezone select component, I know.. However this one has a few key benefits! 10 | 11 | While looking around for a good option, I had trouble finding a timezone select components which: 12 | 13 | 1. Adjusted the choices automatically with Daylight Savings Time (DST) 14 | 2. Didn't have a huge list of choices to scroll through when technically only 24 (ish) are necessary 15 | 16 | > [!IMPORTANT] 17 | > 18 | > ### Demo: [ndom91.github.io/react-timezone-select](https://ndom91.github.io/react-timezone-select/) 19 | > 20 | > This demo is also available in the `./examples` directory. Simply run `pnpm dev` in the root of the repository and the vite dev server will start, where you can then find the example app at [`localhost:3001`](http://localhost:3001). 21 | 22 | ## 🏗️ Installing 23 | 24 | ```bash 25 | npm install react-timezone-select react-select 26 | ``` 27 | 28 | > [!CAUTION] 29 | > The package `react-select` is optional. It is unnecessary if you're only using [the hook](#-timezone-hook). 30 | 31 | ## 🔭 Usage 32 | 33 | ```tsx 34 | import React, { useState } from "react" 35 | import ReactDOM from "react-dom" 36 | import TimezoneSelect, { type ITimezone } from "react-timezone-select" 37 | 38 | const App = () => { 39 | const [selectedTimezone, setSelectedTimezone] = useState( 40 | Intl.DateTimeFormat().resolvedOptions().timeZone, 41 | ) 42 | 43 | return ( 44 |
45 |

react-timezone-select

46 |
Please make a selection
47 |
48 | 49 |
50 |

Output:

51 |
60 |
 67 |           {JSON.stringify(selectedTimezone, null, 2)}
 68 |         
69 |
70 |
71 | ) 72 | } 73 | 74 | const rootElement = document.getElementById("root") 75 | ReactDOM.render(, rootElement) 76 | ``` 77 | 78 | ## 🎨 Timezone Hook 79 | 80 | By default, `react-timezone-select` uses [`react-select`](https://github.com/jedwatson/react-select) as underlying select component. If you'd like to bring your own select component, you can use the `useTimezoneSelect` hook instead of the `TimezoneSelect` component to render the timezones using your self-provided select component. 81 | 82 | ```tsx 83 | import { useTimezoneSelect, allTimezones } from "react-timezone-select" 84 | 85 | const labelStyle = "original" 86 | const timezones = { 87 | ...allTimezones, 88 | "Europe/Berlin": "Frankfurt", 89 | } 90 | 91 | const customSelect = () => { 92 | const { options, parseTimezone } = useTimezoneSelect({ labelStyle, timezones }) 93 | 94 | return ( 95 | 100 | ) 101 | } 102 | ``` 103 | 104 | ## 🕹️ Props 105 | 106 | 107 | 108 | 109 | 110 | 111 | 112 | 113 | 114 | 115 | 116 | 117 | 118 | 119 | 120 | 121 | 122 | 123 | 124 | 125 | 126 | 127 | 128 | 129 | 130 | 131 | 132 | 133 | 134 | 135 | 136 | 137 | 138 | 139 | 140 | 141 | 142 | 143 | 144 | 145 | 146 | 147 | 148 | 149 | 150 | 151 | 152 | 153 | 154 | 155 | 156 | 157 |
PropTypeDefaultNote
valuestring | ITimezoneOptionnullInitial/current Timezone
onBlur() => voidnull
onChange(timezone: ITimezoneOption) => voidnull
labelStyle'original' | 'altName' | 'abbrev' | 'offsetHidden''original'
displayValue'GMT' | 'UTC''GMT'Prefix for the label (i.e. "(GMT+2:00)" or "(UTC+2:00)")
timezonesRecordallTimezones
currentDatetimeDate | stringnullOverride datetime used to calculate timezone values (alternative to current datetime), useful for calculating different summer / winter times, etc.
158 | 159 | #### Example `value`s: 160 | 161 | ```ts 162 | // string 163 | value='America/Juneau' 164 | // ITimezoneOption; i.e. `onChange` return value 165 | value={{ 166 | value: 'America/Juneau' 167 | label: '(GMT-8:00) Alaska, 168 | abbrev: 'AHST', 169 | offset: -8, 170 | altName: 'Alaskan Standard Time' 171 | }} 172 | ``` 173 | 174 | #### Example `timezones`: 175 | 176 | ```ts 177 | timezones={{ 178 | ...allTimezones, 179 | 'America/Lima': 'Pittsburgh', 180 | 'Europe/Berlin': 'Frankfurt', 181 | }} 182 | ``` 183 | 184 | ## ✨ Tips 185 | 186 | ### 👤 Default Users Timezone 187 | 188 | If you'd like the user's own timezone to be set as the initially selected option on render, we can make use of the new `Intl` browser API by setting the default state value to `Intl.DateTimeFormat().resolvedOptions().timeZone`. 189 | 190 | ```tsx 191 | const [timezone, setTimezone] = useState(Intl.DateTimeFormat().resolvedOptions().timeZone) 192 | ``` 193 | 194 | ### 🕒 Custom Timezones 195 | 196 | You can append custom choices of your own, or fully replace the listed timezone options. 197 | 198 | The `timezones` prop takes a dictionary of timezones in the format of "`{ tzIdentifier: Label }`" ([Timezone Identifiers](https://en.wikipedia.org/wiki/List_of_tz_database_time_zones)). 199 | 200 | ```tsx 201 | import TimezoneSelect, { type ITimezone, allTimezones } from 'react-timezone-select' 202 | 203 | const [selectedTimezone, setSelectedTimezone] = useState('Europe/Berlin') 204 | 205 | 214 | ``` 215 | 216 | The example above will include all original timezones and generate two additional choices: 217 | 218 | - `'(GMT-5:00) Pittsburgh'` 219 | - `'(GMT+1:00) Frankfurt'` 220 | 221 | We'll prepend the correct `(GMT...)` part to the generated label, you just have to provide the string you want in your label. Also, you can omit spreading in the `allTimezones` object for a select dropdown consisting of only your custom choices. 222 | 223 | ## 🚧 Contributing 224 | 225 | Pull requests are always welcome! Please stick to repo formatting/linting settings, and if adding new features, please consider adding test(s) and documentation where appropriate! 226 | 227 | ## 🙏 Thanks 228 | 229 | - [All Contributors](https://github.com/ndom91/react-timezone-select/graphs/contributors) 230 | - [Carlos Matallin](https://github.com/matallo/) 231 | - [spacetime](https://github.com/spencermountain/spacetime) 232 | - [react-select](https://react-select.com) 233 | 234 | ## 📝 License 235 | 236 | MIT 237 | -------------------------------------------------------------------------------- /example/.npmignore: -------------------------------------------------------------------------------- 1 | .build 2 | build -------------------------------------------------------------------------------- /example/.prettierrc: -------------------------------------------------------------------------------- 1 | { 2 | "singleQuote": true, 3 | "trailingComma": "all" 4 | } 5 | -------------------------------------------------------------------------------- /example/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | react-timezone-select 9 | 10 | 11 | 42 | 43 | 70 |
71 | 72 | 73 | 83 | 84 | 85 | -------------------------------------------------------------------------------- /example/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "react-timezone-select-example", 3 | "description": "Example app for development / demoing react-timezone-select", 4 | "version": "0.0.1", 5 | "license": "MIT", 6 | "type": "module", 7 | "homepage": "https://github.com/ndom91/react-timezone-select", 8 | "repository": { 9 | "type": "git", 10 | "url": "https://github.com/ndom91/react-timezone-select" 11 | }, 12 | "keywords": [ 13 | "timezone", 14 | "react", 15 | "react-select" 16 | ], 17 | "publishConfig": { 18 | "access": "public" 19 | }, 20 | "scripts": { 21 | "dev": "vite", 22 | "build": "vite build", 23 | "preview": "vite preview", 24 | "format": "prettier --write \"src/**/*.{js,jsx,ts,tsx}\"", 25 | "lint": "prettier --check \"src/**/*.{js,jsx,ts,tsx}\"" 26 | }, 27 | "dependencies": { 28 | "react": "^18.2.0", 29 | "react-dom": "^18.2.0", 30 | "react-select": "^5.8.0", 31 | "spacetime": "^7.5.0", 32 | "spacetime-informal": "^0.6.1" 33 | }, 34 | "devDependencies": { 35 | "@types/react": "^18.2.48", 36 | "@types/react-dom": "^18.2.18", 37 | "@vitejs/plugin-react": "^4.2.1", 38 | "prettier": "^3.2.4", 39 | "typescript": "^5.3.3", 40 | "vite": "^5.0.12" 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /example/pnpm-lock.yaml: -------------------------------------------------------------------------------- 1 | lockfileVersion: '9.0' 2 | 3 | settings: 4 | autoInstallPeers: true 5 | excludeLinksFromLockfile: false 6 | 7 | importers: 8 | 9 | .: 10 | dependencies: 11 | react: 12 | specifier: ^18.2.0 13 | version: 18.2.0 14 | react-dom: 15 | specifier: ^18.2.0 16 | version: 18.2.0(react@18.2.0) 17 | react-select: 18 | specifier: ^5.8.0 19 | version: 5.8.0(@types/react@18.2.48)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) 20 | spacetime: 21 | specifier: ^7.5.0 22 | version: 7.5.0 23 | spacetime-informal: 24 | specifier: ^0.6.1 25 | version: 0.6.1 26 | devDependencies: 27 | '@types/react': 28 | specifier: ^18.2.48 29 | version: 18.2.48 30 | '@types/react-dom': 31 | specifier: ^18.2.18 32 | version: 18.2.18 33 | '@vitejs/plugin-react': 34 | specifier: ^4.2.1 35 | version: 4.2.1(vite@5.1.8) 36 | prettier: 37 | specifier: ^3.2.4 38 | version: 3.2.4 39 | typescript: 40 | specifier: ^5.3.3 41 | version: 5.3.3 42 | vite: 43 | specifier: ^5.0.12 44 | version: 5.1.8 45 | 46 | packages: 47 | 48 | '@ampproject/remapping@2.2.0': 49 | resolution: {integrity: sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==} 50 | engines: {node: '>=6.0.0'} 51 | 52 | '@babel/code-frame@7.18.6': 53 | resolution: {integrity: sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==} 54 | engines: {node: '>=6.9.0'} 55 | 56 | '@babel/code-frame@7.23.5': 57 | resolution: {integrity: sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA==} 58 | engines: {node: '>=6.9.0'} 59 | 60 | '@babel/compat-data@7.23.5': 61 | resolution: {integrity: sha512-uU27kfDRlhfKl+w1U6vp16IuvSLtjAxdArVXPa9BvLkrr7CYIsxH5adpHObeAGY/41+syctUWOZ140a2Rvkgjw==} 62 | engines: {node: '>=6.9.0'} 63 | 64 | '@babel/core@7.23.7': 65 | resolution: {integrity: sha512-+UpDgowcmqe36d4NwqvKsyPMlOLNGMsfMmQ5WGCu+siCe3t3dfe9njrzGfdN4qq+bcNUt0+Vw6haRxBOycs4dw==} 66 | engines: {node: '>=6.9.0'} 67 | 68 | '@babel/generator@7.23.6': 69 | resolution: {integrity: sha512-qrSfCYxYQB5owCmGLbl8XRpX1ytXlpueOb0N0UmQwA073KZxejgQTzAmJezxvpwQD9uGtK2shHdi55QT+MbjIw==} 70 | engines: {node: '>=6.9.0'} 71 | 72 | '@babel/helper-compilation-targets@7.23.6': 73 | resolution: {integrity: sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ==} 74 | engines: {node: '>=6.9.0'} 75 | 76 | '@babel/helper-environment-visitor@7.22.20': 77 | resolution: {integrity: sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==} 78 | engines: {node: '>=6.9.0'} 79 | 80 | '@babel/helper-function-name@7.23.0': 81 | resolution: {integrity: sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==} 82 | engines: {node: '>=6.9.0'} 83 | 84 | '@babel/helper-hoist-variables@7.22.5': 85 | resolution: {integrity: sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==} 86 | engines: {node: '>=6.9.0'} 87 | 88 | '@babel/helper-module-imports@7.18.6': 89 | resolution: {integrity: sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==} 90 | engines: {node: '>=6.9.0'} 91 | 92 | '@babel/helper-module-imports@7.22.15': 93 | resolution: {integrity: sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==} 94 | engines: {node: '>=6.9.0'} 95 | 96 | '@babel/helper-module-transforms@7.23.3': 97 | resolution: {integrity: sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ==} 98 | engines: {node: '>=6.9.0'} 99 | peerDependencies: 100 | '@babel/core': ^7.0.0 101 | 102 | '@babel/helper-plugin-utils@7.22.5': 103 | resolution: {integrity: sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==} 104 | engines: {node: '>=6.9.0'} 105 | 106 | '@babel/helper-simple-access@7.22.5': 107 | resolution: {integrity: sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==} 108 | engines: {node: '>=6.9.0'} 109 | 110 | '@babel/helper-split-export-declaration@7.22.6': 111 | resolution: {integrity: sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==} 112 | engines: {node: '>=6.9.0'} 113 | 114 | '@babel/helper-string-parser@7.19.4': 115 | resolution: {integrity: sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw==} 116 | engines: {node: '>=6.9.0'} 117 | 118 | '@babel/helper-string-parser@7.23.4': 119 | resolution: {integrity: sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ==} 120 | engines: {node: '>=6.9.0'} 121 | 122 | '@babel/helper-validator-identifier@7.19.1': 123 | resolution: {integrity: sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==} 124 | engines: {node: '>=6.9.0'} 125 | 126 | '@babel/helper-validator-identifier@7.22.20': 127 | resolution: {integrity: sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==} 128 | engines: {node: '>=6.9.0'} 129 | 130 | '@babel/helper-validator-option@7.23.5': 131 | resolution: {integrity: sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw==} 132 | engines: {node: '>=6.9.0'} 133 | 134 | '@babel/helpers@7.23.8': 135 | resolution: {integrity: sha512-KDqYz4PiOWvDFrdHLPhKtCThtIcKVy6avWD2oG4GEvyQ+XDZwHD4YQd+H2vNMnq2rkdxsDkU82T+Vk8U/WXHRQ==} 136 | engines: {node: '>=6.9.0'} 137 | 138 | '@babel/highlight@7.18.6': 139 | resolution: {integrity: sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==} 140 | engines: {node: '>=6.9.0'} 141 | 142 | '@babel/highlight@7.23.4': 143 | resolution: {integrity: sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A==} 144 | engines: {node: '>=6.9.0'} 145 | 146 | '@babel/parser@7.21.3': 147 | resolution: {integrity: sha512-lobG0d7aOfQRXh8AyklEAgZGvA4FShxo6xQbUrrT/cNBPUdIDojlokwJsQyCC/eKia7ifqM0yP+2DRZ4WKw2RQ==} 148 | engines: {node: '>=6.0.0'} 149 | hasBin: true 150 | 151 | '@babel/parser@7.23.6': 152 | resolution: {integrity: sha512-Z2uID7YJ7oNvAI20O9X0bblw7Qqs8Q2hFy0R9tAfnfLkp5MW0UH9eUvnDSnFwKZ0AvgS1ucqR4KzvVHgnke1VQ==} 153 | engines: {node: '>=6.0.0'} 154 | hasBin: true 155 | 156 | '@babel/plugin-transform-react-jsx-self@7.23.3': 157 | resolution: {integrity: sha512-qXRvbeKDSfwnlJnanVRp0SfuWE5DQhwQr5xtLBzp56Wabyo+4CMosF6Kfp+eOD/4FYpql64XVJ2W0pVLlJZxOQ==} 158 | engines: {node: '>=6.9.0'} 159 | peerDependencies: 160 | '@babel/core': ^7.0.0-0 161 | 162 | '@babel/plugin-transform-react-jsx-source@7.23.3': 163 | resolution: {integrity: sha512-91RS0MDnAWDNvGC6Wio5XYkyWI39FMFO+JK9+4AlgaTH+yWwVTsw7/sn6LK0lH7c5F+TFkpv/3LfCJ1Ydwof/g==} 164 | engines: {node: '>=6.9.0'} 165 | peerDependencies: 166 | '@babel/core': ^7.0.0-0 167 | 168 | '@babel/runtime@7.21.0': 169 | resolution: {integrity: sha512-xwII0//EObnq89Ji5AKYQaRYiW/nZ3llSv29d49IuxPhKbtJoLP+9QUUZ4nVragQVtaVGeZrpB+ZtG/Pdy/POw==} 170 | engines: {node: '>=6.9.0'} 171 | 172 | '@babel/template@7.22.15': 173 | resolution: {integrity: sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==} 174 | engines: {node: '>=6.9.0'} 175 | 176 | '@babel/traverse@7.23.7': 177 | resolution: {integrity: sha512-tY3mM8rH9jM0YHFGyfC0/xf+SB5eKUu7HPj7/k3fpi9dAlsMc5YbQvDi0Sh2QTPXqMhyaAtzAr807TIyfQrmyg==} 178 | engines: {node: '>=6.9.0'} 179 | 180 | '@babel/types@7.21.3': 181 | resolution: {integrity: sha512-sBGdETxC+/M4o/zKC0sl6sjWv62WFR/uzxrJ6uYyMLZOUlPnwzw0tKgVHOXxaAd5l2g8pEDM5RZ495GPQI77kg==} 182 | engines: {node: '>=6.9.0'} 183 | 184 | '@babel/types@7.23.6': 185 | resolution: {integrity: sha512-+uarb83brBzPKN38NX1MkB6vb6+mwvR6amUulqAE7ccQw1pEl+bCia9TbdG1lsnFP7lZySvUn37CHyXQdfTwzg==} 186 | engines: {node: '>=6.9.0'} 187 | 188 | '@emotion/babel-plugin@11.10.6': 189 | resolution: {integrity: sha512-p2dAqtVrkhSa7xz1u/m9eHYdLi+en8NowrmXeF/dKtJpU8lCWli8RUAati7NcSl0afsBott48pdnANuD0wh9QQ==} 190 | 191 | '@emotion/cache@11.10.5': 192 | resolution: {integrity: sha512-dGYHWyzTdmK+f2+EnIGBpkz1lKc4Zbj2KHd4cX3Wi8/OWr5pKslNjc3yABKH4adRGCvSX4VDC0i04mrrq0aiRA==} 193 | 194 | '@emotion/hash@0.9.0': 195 | resolution: {integrity: sha512-14FtKiHhy2QoPIzdTcvh//8OyBlknNs2nXRwIhG904opCby3l+9Xaf/wuPvICBF0rc1ZCNBd3nKe9cd2mecVkQ==} 196 | 197 | '@emotion/memoize@0.8.0': 198 | resolution: {integrity: sha512-G/YwXTkv7Den9mXDO7AhLWkE3q+I92B+VqAE+dYG4NGPaHZGvt3G8Q0p9vmE+sq7rTGphUbAvmQ9YpbfMQGGlA==} 199 | 200 | '@emotion/react@11.10.6': 201 | resolution: {integrity: sha512-6HT8jBmcSkfzO7mc+N1L9uwvOnlcGoix8Zn7srt+9ga0MjREo6lRpuVX0kzo6Jp6oTqDhREOFsygN6Ew4fEQbw==} 202 | peerDependencies: 203 | '@types/react': '*' 204 | react: '>=16.8.0' 205 | peerDependenciesMeta: 206 | '@types/react': 207 | optional: true 208 | 209 | '@emotion/serialize@1.1.1': 210 | resolution: {integrity: sha512-Zl/0LFggN7+L1liljxXdsVSVlg6E/Z/olVWpfxUTxOAmi8NU7YoeWeLfi1RmnB2TATHoaWwIBRoL+FvAJiTUQA==} 211 | 212 | '@emotion/sheet@1.2.1': 213 | resolution: {integrity: sha512-zxRBwl93sHMsOj4zs+OslQKg/uhF38MB+OMKoCrVuS0nyTkqnau+BM3WGEoOptg9Oz45T/aIGs1qbVAsEFo3nA==} 214 | 215 | '@emotion/unitless@0.8.0': 216 | resolution: {integrity: sha512-VINS5vEYAscRl2ZUDiT3uMPlrFQupiKgHz5AA4bCH1miKBg4qtwkim1qPmJj/4WG6TreYMY111rEFsjupcOKHw==} 217 | 218 | '@emotion/use-insertion-effect-with-fallbacks@1.0.0': 219 | resolution: {integrity: sha512-1eEgUGmkaljiBnRMTdksDV1W4kUnmwgp7X9G8B++9GYwl1lUdqSndSriIrTJ0N7LQaoauY9JJ2yhiOYK5+NI4A==} 220 | peerDependencies: 221 | react: '>=16.8.0' 222 | 223 | '@emotion/utils@1.2.0': 224 | resolution: {integrity: sha512-sn3WH53Kzpw8oQ5mgMmIzzyAaH2ZqFEbozVVBSYp538E06OSE6ytOp7pRAjNQR+Q/orwqdQYJSe2m3hCOeznkw==} 225 | 226 | '@emotion/weak-memoize@0.3.0': 227 | resolution: {integrity: sha512-AHPmaAx+RYfZz0eYu6Gviiagpmiyw98ySSlQvCUhVGDRtDFe4DBS0x1bSjdF3gqUDYOczB+yYvBTtEylYSdRhg==} 228 | 229 | '@esbuild/aix-ppc64@0.19.11': 230 | resolution: {integrity: sha512-FnzU0LyE3ySQk7UntJO4+qIiQgI7KoODnZg5xzXIrFJlKd2P2gwHsHY4927xj9y5PJmJSzULiUCWmv7iWnNa7g==} 231 | engines: {node: '>=12'} 232 | cpu: [ppc64] 233 | os: [aix] 234 | 235 | '@esbuild/android-arm64@0.19.11': 236 | resolution: {integrity: sha512-aiu7K/5JnLj//KOnOfEZ0D90obUkRzDMyqd/wNAUQ34m4YUPVhRZpnqKV9uqDGxT7cToSDnIHsGooyIczu9T+Q==} 237 | engines: {node: '>=12'} 238 | cpu: [arm64] 239 | os: [android] 240 | 241 | '@esbuild/android-arm@0.19.11': 242 | resolution: {integrity: sha512-5OVapq0ClabvKvQ58Bws8+wkLCV+Rxg7tUVbo9xu034Nm536QTII4YzhaFriQ7rMrorfnFKUsArD2lqKbFY4vw==} 243 | engines: {node: '>=12'} 244 | cpu: [arm] 245 | os: [android] 246 | 247 | '@esbuild/android-x64@0.19.11': 248 | resolution: {integrity: sha512-eccxjlfGw43WYoY9QgB82SgGgDbibcqyDTlk3l3C0jOVHKxrjdc9CTwDUQd0vkvYg5um0OH+GpxYvp39r+IPOg==} 249 | engines: {node: '>=12'} 250 | cpu: [x64] 251 | os: [android] 252 | 253 | '@esbuild/darwin-arm64@0.19.11': 254 | resolution: {integrity: sha512-ETp87DRWuSt9KdDVkqSoKoLFHYTrkyz2+65fj9nfXsaV3bMhTCjtQfw3y+um88vGRKRiF7erPrh/ZuIdLUIVxQ==} 255 | engines: {node: '>=12'} 256 | cpu: [arm64] 257 | os: [darwin] 258 | 259 | '@esbuild/darwin-x64@0.19.11': 260 | resolution: {integrity: sha512-fkFUiS6IUK9WYUO/+22omwetaSNl5/A8giXvQlcinLIjVkxwTLSktbF5f/kJMftM2MJp9+fXqZ5ezS7+SALp4g==} 261 | engines: {node: '>=12'} 262 | cpu: [x64] 263 | os: [darwin] 264 | 265 | '@esbuild/freebsd-arm64@0.19.11': 266 | resolution: {integrity: sha512-lhoSp5K6bxKRNdXUtHoNc5HhbXVCS8V0iZmDvyWvYq9S5WSfTIHU2UGjcGt7UeS6iEYp9eeymIl5mJBn0yiuxA==} 267 | engines: {node: '>=12'} 268 | cpu: [arm64] 269 | os: [freebsd] 270 | 271 | '@esbuild/freebsd-x64@0.19.11': 272 | resolution: {integrity: sha512-JkUqn44AffGXitVI6/AbQdoYAq0TEullFdqcMY/PCUZ36xJ9ZJRtQabzMA+Vi7r78+25ZIBosLTOKnUXBSi1Kw==} 273 | engines: {node: '>=12'} 274 | cpu: [x64] 275 | os: [freebsd] 276 | 277 | '@esbuild/linux-arm64@0.19.11': 278 | resolution: {integrity: sha512-LneLg3ypEeveBSMuoa0kwMpCGmpu8XQUh+mL8XXwoYZ6Be2qBnVtcDI5azSvh7vioMDhoJFZzp9GWp9IWpYoUg==} 279 | engines: {node: '>=12'} 280 | cpu: [arm64] 281 | os: [linux] 282 | 283 | '@esbuild/linux-arm@0.19.11': 284 | resolution: {integrity: sha512-3CRkr9+vCV2XJbjwgzjPtO8T0SZUmRZla+UL1jw+XqHZPkPgZiyWvbDvl9rqAN8Zl7qJF0O/9ycMtjU67HN9/Q==} 285 | engines: {node: '>=12'} 286 | cpu: [arm] 287 | os: [linux] 288 | 289 | '@esbuild/linux-ia32@0.19.11': 290 | resolution: {integrity: sha512-caHy++CsD8Bgq2V5CodbJjFPEiDPq8JJmBdeyZ8GWVQMjRD0sU548nNdwPNvKjVpamYYVL40AORekgfIubwHoA==} 291 | engines: {node: '>=12'} 292 | cpu: [ia32] 293 | os: [linux] 294 | 295 | '@esbuild/linux-loong64@0.19.11': 296 | resolution: {integrity: sha512-ppZSSLVpPrwHccvC6nQVZaSHlFsvCQyjnvirnVjbKSHuE5N24Yl8F3UwYUUR1UEPaFObGD2tSvVKbvR+uT1Nrg==} 297 | engines: {node: '>=12'} 298 | cpu: [loong64] 299 | os: [linux] 300 | 301 | '@esbuild/linux-mips64el@0.19.11': 302 | resolution: {integrity: sha512-B5x9j0OgjG+v1dF2DkH34lr+7Gmv0kzX6/V0afF41FkPMMqaQ77pH7CrhWeR22aEeHKaeZVtZ6yFwlxOKPVFyg==} 303 | engines: {node: '>=12'} 304 | cpu: [mips64el] 305 | os: [linux] 306 | 307 | '@esbuild/linux-ppc64@0.19.11': 308 | resolution: {integrity: sha512-MHrZYLeCG8vXblMetWyttkdVRjQlQUb/oMgBNurVEnhj4YWOr4G5lmBfZjHYQHHN0g6yDmCAQRR8MUHldvvRDA==} 309 | engines: {node: '>=12'} 310 | cpu: [ppc64] 311 | os: [linux] 312 | 313 | '@esbuild/linux-riscv64@0.19.11': 314 | resolution: {integrity: sha512-f3DY++t94uVg141dozDu4CCUkYW+09rWtaWfnb3bqe4w5NqmZd6nPVBm+qbz7WaHZCoqXqHz5p6CM6qv3qnSSQ==} 315 | engines: {node: '>=12'} 316 | cpu: [riscv64] 317 | os: [linux] 318 | 319 | '@esbuild/linux-s390x@0.19.11': 320 | resolution: {integrity: sha512-A5xdUoyWJHMMlcSMcPGVLzYzpcY8QP1RtYzX5/bS4dvjBGVxdhuiYyFwp7z74ocV7WDc0n1harxmpq2ePOjI0Q==} 321 | engines: {node: '>=12'} 322 | cpu: [s390x] 323 | os: [linux] 324 | 325 | '@esbuild/linux-x64@0.19.11': 326 | resolution: {integrity: sha512-grbyMlVCvJSfxFQUndw5mCtWs5LO1gUlwP4CDi4iJBbVpZcqLVT29FxgGuBJGSzyOxotFG4LoO5X+M1350zmPA==} 327 | engines: {node: '>=12'} 328 | cpu: [x64] 329 | os: [linux] 330 | 331 | '@esbuild/netbsd-x64@0.19.11': 332 | resolution: {integrity: sha512-13jvrQZJc3P230OhU8xgwUnDeuC/9egsjTkXN49b3GcS5BKvJqZn86aGM8W9pd14Kd+u7HuFBMVtrNGhh6fHEQ==} 333 | engines: {node: '>=12'} 334 | cpu: [x64] 335 | os: [netbsd] 336 | 337 | '@esbuild/openbsd-x64@0.19.11': 338 | resolution: {integrity: sha512-ysyOGZuTp6SNKPE11INDUeFVVQFrhcNDVUgSQVDzqsqX38DjhPEPATpid04LCoUr2WXhQTEZ8ct/EgJCUDpyNw==} 339 | engines: {node: '>=12'} 340 | cpu: [x64] 341 | os: [openbsd] 342 | 343 | '@esbuild/sunos-x64@0.19.11': 344 | resolution: {integrity: sha512-Hf+Sad9nVwvtxy4DXCZQqLpgmRTQqyFyhT3bZ4F2XlJCjxGmRFF0Shwn9rzhOYRB61w9VMXUkxlBy56dk9JJiQ==} 345 | engines: {node: '>=12'} 346 | cpu: [x64] 347 | os: [sunos] 348 | 349 | '@esbuild/win32-arm64@0.19.11': 350 | resolution: {integrity: sha512-0P58Sbi0LctOMOQbpEOvOL44Ne0sqbS0XWHMvvrg6NE5jQ1xguCSSw9jQeUk2lfrXYsKDdOe6K+oZiwKPilYPQ==} 351 | engines: {node: '>=12'} 352 | cpu: [arm64] 353 | os: [win32] 354 | 355 | '@esbuild/win32-ia32@0.19.11': 356 | resolution: {integrity: sha512-6YOrWS+sDJDmshdBIQU+Uoyh7pQKrdykdefC1avn76ss5c+RN6gut3LZA4E2cH5xUEp5/cA0+YxRaVtRAb0xBg==} 357 | engines: {node: '>=12'} 358 | cpu: [ia32] 359 | os: [win32] 360 | 361 | '@esbuild/win32-x64@0.19.11': 362 | resolution: {integrity: sha512-vfkhltrjCAb603XaFhqhAF4LGDi2M4OrCRrFusyQ+iTLQ/o60QQXxc9cZC/FFpihBI9N1Grn6SMKVJ4KP7Fuiw==} 363 | engines: {node: '>=12'} 364 | cpu: [x64] 365 | os: [win32] 366 | 367 | '@floating-ui/core@1.5.3': 368 | resolution: {integrity: sha512-O0WKDOo0yhJuugCx6trZQj5jVJ9yR0ystG2JaNAemYUWce+pmM6WUEFIibnWyEJKdrDxhm75NoSRME35FNaM/Q==} 369 | 370 | '@floating-ui/dom@1.5.4': 371 | resolution: {integrity: sha512-jByEsHIY+eEdCjnTVu+E3ephzTOzkQ8hgUfGwos+bg7NlH33Zc5uO+QHz1mrQUOgIKKDD1RtS201P9NvAfq3XQ==} 372 | 373 | '@floating-ui/utils@0.2.1': 374 | resolution: {integrity: sha512-9TANp6GPoMtYzQdt54kfAyMmz1+osLlXdg2ENroU7zzrtflTLrrC/lgrIfaSe+Wu0b89GKccT7vxXA0MoAIO+Q==} 375 | 376 | '@jridgewell/gen-mapping@0.1.1': 377 | resolution: {integrity: sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==} 378 | engines: {node: '>=6.0.0'} 379 | 380 | '@jridgewell/gen-mapping@0.3.2': 381 | resolution: {integrity: sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==} 382 | engines: {node: '>=6.0.0'} 383 | 384 | '@jridgewell/resolve-uri@3.1.0': 385 | resolution: {integrity: sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==} 386 | engines: {node: '>=6.0.0'} 387 | 388 | '@jridgewell/set-array@1.1.2': 389 | resolution: {integrity: sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==} 390 | engines: {node: '>=6.0.0'} 391 | 392 | '@jridgewell/sourcemap-codec@1.4.14': 393 | resolution: {integrity: sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==} 394 | 395 | '@jridgewell/trace-mapping@0.3.17': 396 | resolution: {integrity: sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==} 397 | 398 | '@rollup/rollup-android-arm-eabi@4.28.0': 399 | resolution: {integrity: sha512-wLJuPLT6grGZsy34g4N1yRfYeouklTgPhH1gWXCYspenKYD0s3cR99ZevOGw5BexMNywkbV3UkjADisozBmpPQ==} 400 | cpu: [arm] 401 | os: [android] 402 | 403 | '@rollup/rollup-android-arm64@4.28.0': 404 | resolution: {integrity: sha512-eiNkznlo0dLmVG/6wf+Ifi/v78G4d4QxRhuUl+s8EWZpDewgk7PX3ZyECUXU0Zq/Ca+8nU8cQpNC4Xgn2gFNDA==} 405 | cpu: [arm64] 406 | os: [android] 407 | 408 | '@rollup/rollup-darwin-arm64@4.28.0': 409 | resolution: {integrity: sha512-lmKx9yHsppblnLQZOGxdO66gT77bvdBtr/0P+TPOseowE7D9AJoBw8ZDULRasXRWf1Z86/gcOdpBrV6VDUY36Q==} 410 | cpu: [arm64] 411 | os: [darwin] 412 | 413 | '@rollup/rollup-darwin-x64@4.28.0': 414 | resolution: {integrity: sha512-8hxgfReVs7k9Js1uAIhS6zq3I+wKQETInnWQtgzt8JfGx51R1N6DRVy3F4o0lQwumbErRz52YqwjfvuwRxGv1w==} 415 | cpu: [x64] 416 | os: [darwin] 417 | 418 | '@rollup/rollup-freebsd-arm64@4.28.0': 419 | resolution: {integrity: sha512-lA1zZB3bFx5oxu9fYud4+g1mt+lYXCoch0M0V/xhqLoGatbzVse0wlSQ1UYOWKpuSu3gyN4qEc0Dxf/DII1bhQ==} 420 | cpu: [arm64] 421 | os: [freebsd] 422 | 423 | '@rollup/rollup-freebsd-x64@4.28.0': 424 | resolution: {integrity: sha512-aI2plavbUDjCQB/sRbeUZWX9qp12GfYkYSJOrdYTL/C5D53bsE2/nBPuoiJKoWp5SN78v2Vr8ZPnB+/VbQ2pFA==} 425 | cpu: [x64] 426 | os: [freebsd] 427 | 428 | '@rollup/rollup-linux-arm-gnueabihf@4.28.0': 429 | resolution: {integrity: sha512-WXveUPKtfqtaNvpf0iOb0M6xC64GzUX/OowbqfiCSXTdi/jLlOmH0Ba94/OkiY2yTGTwteo4/dsHRfh5bDCZ+w==} 430 | cpu: [arm] 431 | os: [linux] 432 | 433 | '@rollup/rollup-linux-arm-musleabihf@4.28.0': 434 | resolution: {integrity: sha512-yLc3O2NtOQR67lI79zsSc7lk31xjwcaocvdD1twL64PK1yNaIqCeWI9L5B4MFPAVGEVjH5k1oWSGuYX1Wutxpg==} 435 | cpu: [arm] 436 | os: [linux] 437 | 438 | '@rollup/rollup-linux-arm64-gnu@4.28.0': 439 | resolution: {integrity: sha512-+P9G9hjEpHucHRXqesY+3X9hD2wh0iNnJXX/QhS/J5vTdG6VhNYMxJ2rJkQOxRUd17u5mbMLHM7yWGZdAASfcg==} 440 | cpu: [arm64] 441 | os: [linux] 442 | 443 | '@rollup/rollup-linux-arm64-musl@4.28.0': 444 | resolution: {integrity: sha512-1xsm2rCKSTpKzi5/ypT5wfc+4bOGa/9yI/eaOLW0oMs7qpC542APWhl4A37AENGZ6St6GBMWhCCMM6tXgTIplw==} 445 | cpu: [arm64] 446 | os: [linux] 447 | 448 | '@rollup/rollup-linux-powerpc64le-gnu@4.28.0': 449 | resolution: {integrity: sha512-zgWxMq8neVQeXL+ouSf6S7DoNeo6EPgi1eeqHXVKQxqPy1B2NvTbaOUWPn/7CfMKL7xvhV0/+fq/Z/J69g1WAQ==} 450 | cpu: [ppc64] 451 | os: [linux] 452 | 453 | '@rollup/rollup-linux-riscv64-gnu@4.28.0': 454 | resolution: {integrity: sha512-VEdVYacLniRxbRJLNtzwGt5vwS0ycYshofI7cWAfj7Vg5asqj+pt+Q6x4n+AONSZW/kVm+5nklde0qs2EUwU2g==} 455 | cpu: [riscv64] 456 | os: [linux] 457 | 458 | '@rollup/rollup-linux-s390x-gnu@4.28.0': 459 | resolution: {integrity: sha512-LQlP5t2hcDJh8HV8RELD9/xlYtEzJkm/aWGsauvdO2ulfl3QYRjqrKW+mGAIWP5kdNCBheqqqYIGElSRCaXfpw==} 460 | cpu: [s390x] 461 | os: [linux] 462 | 463 | '@rollup/rollup-linux-x64-gnu@4.28.0': 464 | resolution: {integrity: sha512-Nl4KIzteVEKE9BdAvYoTkW19pa7LR/RBrT6F1dJCV/3pbjwDcaOq+edkP0LXuJ9kflW/xOK414X78r+K84+msw==} 465 | cpu: [x64] 466 | os: [linux] 467 | 468 | '@rollup/rollup-linux-x64-musl@4.28.0': 469 | resolution: {integrity: sha512-eKpJr4vBDOi4goT75MvW+0dXcNUqisK4jvibY9vDdlgLx+yekxSm55StsHbxUsRxSTt3JEQvlr3cGDkzcSP8bw==} 470 | cpu: [x64] 471 | os: [linux] 472 | 473 | '@rollup/rollup-win32-arm64-msvc@4.28.0': 474 | resolution: {integrity: sha512-Vi+WR62xWGsE/Oj+mD0FNAPY2MEox3cfyG0zLpotZdehPFXwz6lypkGs5y38Jd/NVSbOD02aVad6q6QYF7i8Bg==} 475 | cpu: [arm64] 476 | os: [win32] 477 | 478 | '@rollup/rollup-win32-ia32-msvc@4.28.0': 479 | resolution: {integrity: sha512-kN/Vpip8emMLn/eOza+4JwqDZBL6MPNpkdaEsgUtW1NYN3DZvZqSQrbKzJcTL6hd8YNmFTn7XGWMwccOcJBL0A==} 480 | cpu: [ia32] 481 | os: [win32] 482 | 483 | '@rollup/rollup-win32-x64-msvc@4.28.0': 484 | resolution: {integrity: sha512-Bvno2/aZT6usSa7lRDL2+hMjVAGjuqaymF1ApZm31JXzniR/hvr14jpU+/z4X6Gt5BPlzosscyJZGUvguXIqeQ==} 485 | cpu: [x64] 486 | os: [win32] 487 | 488 | '@types/babel__core@7.20.5': 489 | resolution: {integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==} 490 | 491 | '@types/babel__generator@7.6.8': 492 | resolution: {integrity: sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==} 493 | 494 | '@types/babel__template@7.4.4': 495 | resolution: {integrity: sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==} 496 | 497 | '@types/babel__traverse@7.20.5': 498 | resolution: {integrity: sha512-WXCyOcRtH37HAUkpXhUduaxdm82b4GSlyTqajXviN4EfiuPgNYR109xMCKvpl6zPIpua0DGlMEDCq+g8EdoheQ==} 499 | 500 | '@types/estree@1.0.6': 501 | resolution: {integrity: sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==} 502 | 503 | '@types/parse-json@4.0.0': 504 | resolution: {integrity: sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==} 505 | 506 | '@types/prop-types@15.7.5': 507 | resolution: {integrity: sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==} 508 | 509 | '@types/react-dom@18.2.18': 510 | resolution: {integrity: sha512-TJxDm6OfAX2KJWJdMEVTwWke5Sc/E/RlnPGvGfS0W7+6ocy2xhDVQVh/KvC2Uf7kACs+gDytdusDSdWfWkaNzw==} 511 | 512 | '@types/react-transition-group@4.4.10': 513 | resolution: {integrity: sha512-hT/+s0VQs2ojCX823m60m5f0sL5idt9SO6Tj6Dg+rdphGPIeJbJ6CxvBYkgkGKrYeDjvIpKTR38UzmtHJOGW3Q==} 514 | 515 | '@types/react@18.2.48': 516 | resolution: {integrity: sha512-qboRCl6Ie70DQQG9hhNREz81jqC1cs9EVNcjQ1AU+jH6NFfSAhVVbrrY/+nSF+Bsk4AOwm9Qa61InvMCyV+H3w==} 517 | 518 | '@types/scheduler@0.16.3': 519 | resolution: {integrity: sha512-5cJ8CB4yAx7BH1oMvdU0Jh9lrEXyPkar6F9G/ERswkCuvP4KQZfZkSjcMbAICCpQTN4OuZn8tz0HiKv9TGZgrQ==} 520 | 521 | '@vitejs/plugin-react@4.2.1': 522 | resolution: {integrity: sha512-oojO9IDc4nCUUi8qIR11KoQm0XFFLIwsRBwHRR4d/88IWghn1y6ckz/bJ8GHDCsYEJee8mDzqtJxh15/cisJNQ==} 523 | engines: {node: ^14.18.0 || >=16.0.0} 524 | peerDependencies: 525 | vite: ^4.2.0 || ^5.0.0 526 | 527 | ansi-styles@3.2.1: 528 | resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} 529 | engines: {node: '>=4'} 530 | 531 | babel-plugin-macros@3.1.0: 532 | resolution: {integrity: sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==} 533 | engines: {node: '>=10', npm: '>=6'} 534 | 535 | browserslist@4.22.2: 536 | resolution: {integrity: sha512-0UgcrvQmBDvZHFGdYUehrCNIazki7/lUP3kkoi/r3YB2amZbFM9J43ZRkJTXBUZK4gmx56+Sqk9+Vs9mwZx9+A==} 537 | engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} 538 | hasBin: true 539 | 540 | callsites@3.1.0: 541 | resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} 542 | engines: {node: '>=6'} 543 | 544 | caniuse-lite@1.0.30001579: 545 | resolution: {integrity: sha512-u5AUVkixruKHJjw/pj9wISlcMpgFWzSrczLZbrqBSxukQixmg0SJ5sZTpvaFvxU0HoQKd4yoyAogyrAz9pzJnA==} 546 | 547 | chalk@2.4.2: 548 | resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} 549 | engines: {node: '>=4'} 550 | 551 | color-convert@1.9.3: 552 | resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} 553 | 554 | color-name@1.1.3: 555 | resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==} 556 | 557 | convert-source-map@1.9.0: 558 | resolution: {integrity: sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==} 559 | 560 | convert-source-map@2.0.0: 561 | resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} 562 | 563 | cosmiconfig@7.1.0: 564 | resolution: {integrity: sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==} 565 | engines: {node: '>=10'} 566 | 567 | csstype@3.1.1: 568 | resolution: {integrity: sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw==} 569 | 570 | debug@4.3.4: 571 | resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} 572 | engines: {node: '>=6.0'} 573 | peerDependencies: 574 | supports-color: '*' 575 | peerDependenciesMeta: 576 | supports-color: 577 | optional: true 578 | 579 | dom-helpers@5.2.1: 580 | resolution: {integrity: sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==} 581 | 582 | efrt-unpack@2.2.0: 583 | resolution: {integrity: sha512-9xUSSj7qcUxz+0r4X3+bwUNttEfGfK5AH+LVa1aTpqdAfrN5VhROYCfcF+up4hp5OL7IUKcZJJrzAGipQRDoiQ==} 584 | 585 | electron-to-chromium@1.4.640: 586 | resolution: {integrity: sha512-z/6oZ/Muqk4BaE7P69bXhUhpJbUM9ZJeka43ZwxsDshKtePns4mhBlh8bU5+yrnOnz3fhG82XLzGUXazOmsWnA==} 587 | 588 | error-ex@1.3.2: 589 | resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} 590 | 591 | esbuild@0.19.11: 592 | resolution: {integrity: sha512-HJ96Hev2hX/6i5cDVwcqiJBBtuo9+FeIJOtZ9W1kA5M6AMJRHUZlpYZ1/SbEwtO0ioNAW8rUooVpC/WehY2SfA==} 593 | engines: {node: '>=12'} 594 | hasBin: true 595 | 596 | escalade@3.1.1: 597 | resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==} 598 | engines: {node: '>=6'} 599 | 600 | escape-string-regexp@1.0.5: 601 | resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} 602 | engines: {node: '>=0.8.0'} 603 | 604 | escape-string-regexp@4.0.0: 605 | resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} 606 | engines: {node: '>=10'} 607 | 608 | find-root@1.1.0: 609 | resolution: {integrity: sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==} 610 | 611 | fsevents@2.3.3: 612 | resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} 613 | engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} 614 | os: [darwin] 615 | 616 | function-bind@1.1.1: 617 | resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==} 618 | 619 | gensync@1.0.0-beta.2: 620 | resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} 621 | engines: {node: '>=6.9.0'} 622 | 623 | globals@11.12.0: 624 | resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} 625 | engines: {node: '>=4'} 626 | 627 | has-flag@3.0.0: 628 | resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} 629 | engines: {node: '>=4'} 630 | 631 | has@1.0.3: 632 | resolution: {integrity: sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==} 633 | engines: {node: '>= 0.4.0'} 634 | 635 | hoist-non-react-statics@3.3.2: 636 | resolution: {integrity: sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==} 637 | 638 | import-fresh@3.3.0: 639 | resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} 640 | engines: {node: '>=6'} 641 | 642 | is-arrayish@0.2.1: 643 | resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} 644 | 645 | is-core-module@2.11.0: 646 | resolution: {integrity: sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==} 647 | 648 | js-tokens@4.0.0: 649 | resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} 650 | 651 | jsesc@2.5.2: 652 | resolution: {integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==} 653 | engines: {node: '>=4'} 654 | hasBin: true 655 | 656 | json-parse-even-better-errors@2.3.1: 657 | resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} 658 | 659 | json5@2.2.3: 660 | resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} 661 | engines: {node: '>=6'} 662 | hasBin: true 663 | 664 | lines-and-columns@1.2.4: 665 | resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} 666 | 667 | loose-envify@1.4.0: 668 | resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} 669 | hasBin: true 670 | 671 | lru-cache@5.1.1: 672 | resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} 673 | 674 | memoize-one@6.0.0: 675 | resolution: {integrity: sha512-rkpe71W0N0c0Xz6QD0eJETuWAJGnJ9afsl1srmwPrI+yBCkge5EycXXbYRyvL29zZVUWQCY7InPRCv3GDXuZNw==} 676 | 677 | ms@2.1.2: 678 | resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} 679 | 680 | nanoid@3.3.8: 681 | resolution: {integrity: sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w==} 682 | engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} 683 | hasBin: true 684 | 685 | node-releases@2.0.14: 686 | resolution: {integrity: sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==} 687 | 688 | object-assign@4.1.1: 689 | resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} 690 | engines: {node: '>=0.10.0'} 691 | 692 | parent-module@1.0.1: 693 | resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} 694 | engines: {node: '>=6'} 695 | 696 | parse-json@5.2.0: 697 | resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} 698 | engines: {node: '>=8'} 699 | 700 | path-parse@1.0.7: 701 | resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} 702 | 703 | path-type@4.0.0: 704 | resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} 705 | engines: {node: '>=8'} 706 | 707 | picocolors@1.1.0: 708 | resolution: {integrity: sha512-TQ92mBOW0l3LeMeyLV6mzy/kWr8lkd/hp3mTg7wYK7zJhuBStmGMBG0BdeDZS/dZx1IukaX6Bk11zcln25o1Aw==} 709 | 710 | postcss@8.4.47: 711 | resolution: {integrity: sha512-56rxCq7G/XfB4EkXq9Egn5GCqugWvDFjafDOThIdMBsI15iqPqR5r15TfSr1YPYeEI19YeaXMCbY6u88Y76GLQ==} 712 | engines: {node: ^10 || ^12 || >=14} 713 | 714 | prettier@3.2.4: 715 | resolution: {integrity: sha512-FWu1oLHKCrtpO1ypU6J0SbK2d9Ckwysq6bHj/uaCP26DxrPpppCLQRGVuqAxSTvhF00AcvDRyYrLNW7ocBhFFQ==} 716 | engines: {node: '>=14'} 717 | hasBin: true 718 | 719 | prop-types@15.8.1: 720 | resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==} 721 | 722 | react-dom@18.2.0: 723 | resolution: {integrity: sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==} 724 | peerDependencies: 725 | react: ^18.2.0 726 | 727 | react-is@16.13.1: 728 | resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==} 729 | 730 | react-refresh@0.14.0: 731 | resolution: {integrity: sha512-wViHqhAd8OHeLS/IRMJjTSDHF3U9eWi62F/MledQGPdJGDhodXJ9PBLNGr6WWL7qlH12Mt3TyTpbS+hGXMjCzQ==} 732 | engines: {node: '>=0.10.0'} 733 | 734 | react-select@5.8.0: 735 | resolution: {integrity: sha512-TfjLDo58XrhP6VG5M/Mi56Us0Yt8X7xD6cDybC7yoRMUNm7BGO7qk8J0TLQOua/prb8vUOtsfnXZwfm30HGsAA==} 736 | peerDependencies: 737 | react: ^16.8.0 || ^17.0.0 || ^18.0.0 738 | react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 739 | 740 | react-transition-group@4.4.5: 741 | resolution: {integrity: sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g==} 742 | peerDependencies: 743 | react: '>=16.6.0' 744 | react-dom: '>=16.6.0' 745 | 746 | react@18.2.0: 747 | resolution: {integrity: sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==} 748 | engines: {node: '>=0.10.0'} 749 | 750 | regenerator-runtime@0.13.11: 751 | resolution: {integrity: sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==} 752 | 753 | resolve-from@4.0.0: 754 | resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} 755 | engines: {node: '>=4'} 756 | 757 | resolve@1.22.1: 758 | resolution: {integrity: sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==} 759 | hasBin: true 760 | 761 | rollup@4.28.0: 762 | resolution: {integrity: sha512-G9GOrmgWHBma4YfCcX8PjH0qhXSdH8B4HDE2o4/jaxj93S4DPCIDoLcXz99eWMji4hB29UFCEd7B2gwGJDR9cQ==} 763 | engines: {node: '>=18.0.0', npm: '>=8.0.0'} 764 | hasBin: true 765 | 766 | scheduler@0.23.0: 767 | resolution: {integrity: sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==} 768 | 769 | semver@6.3.1: 770 | resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} 771 | hasBin: true 772 | 773 | source-map-js@1.2.1: 774 | resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} 775 | engines: {node: '>=0.10.0'} 776 | 777 | source-map@0.5.7: 778 | resolution: {integrity: sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==} 779 | engines: {node: '>=0.10.0'} 780 | 781 | spacetime-informal@0.6.1: 782 | resolution: {integrity: sha512-fOA+RMi2mpCbkLkjBIzWQttmkYE/v9VfdbbrvE2Pus/WoiQNmHO20YGNEqJOuFADsrrZOd/hJVuBwAkV3s6BHg==} 783 | 784 | spacetime@7.5.0: 785 | resolution: {integrity: sha512-FJ8EqkHf3W69s1/fDZVKQwVSrP7fd8oPdEIkgrXw2Mdcq9NeimrflEQFkCLQI84NVHHPTdwMq8L2sD39tIBJPg==} 786 | 787 | stylis@4.1.3: 788 | resolution: {integrity: sha512-GP6WDNWf+o403jrEp9c5jibKavrtLW+/qYGhFxFrG8maXhwTBI7gLLhiBb0o7uFccWN+EOS9aMO6cGHWAO07OA==} 789 | 790 | supports-color@5.5.0: 791 | resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} 792 | engines: {node: '>=4'} 793 | 794 | supports-preserve-symlinks-flag@1.0.0: 795 | resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} 796 | engines: {node: '>= 0.4'} 797 | 798 | to-fast-properties@2.0.0: 799 | resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==} 800 | engines: {node: '>=4'} 801 | 802 | typescript@5.3.3: 803 | resolution: {integrity: sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw==} 804 | engines: {node: '>=14.17'} 805 | hasBin: true 806 | 807 | update-browserslist-db@1.0.13: 808 | resolution: {integrity: sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==} 809 | hasBin: true 810 | peerDependencies: 811 | browserslist: '>= 4.21.0' 812 | 813 | use-isomorphic-layout-effect@1.1.2: 814 | resolution: {integrity: sha512-49L8yCO3iGT/ZF9QttjwLF/ZD9Iwto5LnH5LmEdk/6cFmXddqi2ulF0edxTwjj+7mqvpVVGQWvbXZdn32wRSHA==} 815 | peerDependencies: 816 | '@types/react': '*' 817 | react: ^16.8.0 || ^17.0.0 || ^18.0.0 818 | peerDependenciesMeta: 819 | '@types/react': 820 | optional: true 821 | 822 | vite@5.1.8: 823 | resolution: {integrity: sha512-mB8ToUuSmzODSpENgvpFk2fTiU/YQ1tmcVJJ4WZbq4fPdGJkFNVcmVL5k7iDug6xzWjjuGDKAuSievIsD6H7Xw==} 824 | engines: {node: ^18.0.0 || >=20.0.0} 825 | hasBin: true 826 | peerDependencies: 827 | '@types/node': ^18.0.0 || >=20.0.0 828 | less: '*' 829 | lightningcss: ^1.21.0 830 | sass: '*' 831 | stylus: '*' 832 | sugarss: '*' 833 | terser: ^5.4.0 834 | peerDependenciesMeta: 835 | '@types/node': 836 | optional: true 837 | less: 838 | optional: true 839 | lightningcss: 840 | optional: true 841 | sass: 842 | optional: true 843 | stylus: 844 | optional: true 845 | sugarss: 846 | optional: true 847 | terser: 848 | optional: true 849 | 850 | yallist@3.1.1: 851 | resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} 852 | 853 | yaml@1.10.2: 854 | resolution: {integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==} 855 | engines: {node: '>= 6'} 856 | 857 | snapshots: 858 | 859 | '@ampproject/remapping@2.2.0': 860 | dependencies: 861 | '@jridgewell/gen-mapping': 0.1.1 862 | '@jridgewell/trace-mapping': 0.3.17 863 | 864 | '@babel/code-frame@7.18.6': 865 | dependencies: 866 | '@babel/highlight': 7.18.6 867 | 868 | '@babel/code-frame@7.23.5': 869 | dependencies: 870 | '@babel/highlight': 7.23.4 871 | chalk: 2.4.2 872 | 873 | '@babel/compat-data@7.23.5': {} 874 | 875 | '@babel/core@7.23.7': 876 | dependencies: 877 | '@ampproject/remapping': 2.2.0 878 | '@babel/code-frame': 7.23.5 879 | '@babel/generator': 7.23.6 880 | '@babel/helper-compilation-targets': 7.23.6 881 | '@babel/helper-module-transforms': 7.23.3(@babel/core@7.23.7) 882 | '@babel/helpers': 7.23.8 883 | '@babel/parser': 7.23.6 884 | '@babel/template': 7.22.15 885 | '@babel/traverse': 7.23.7 886 | '@babel/types': 7.23.6 887 | convert-source-map: 2.0.0 888 | debug: 4.3.4 889 | gensync: 1.0.0-beta.2 890 | json5: 2.2.3 891 | semver: 6.3.1 892 | transitivePeerDependencies: 893 | - supports-color 894 | 895 | '@babel/generator@7.23.6': 896 | dependencies: 897 | '@babel/types': 7.23.6 898 | '@jridgewell/gen-mapping': 0.3.2 899 | '@jridgewell/trace-mapping': 0.3.17 900 | jsesc: 2.5.2 901 | 902 | '@babel/helper-compilation-targets@7.23.6': 903 | dependencies: 904 | '@babel/compat-data': 7.23.5 905 | '@babel/helper-validator-option': 7.23.5 906 | browserslist: 4.22.2 907 | lru-cache: 5.1.1 908 | semver: 6.3.1 909 | 910 | '@babel/helper-environment-visitor@7.22.20': {} 911 | 912 | '@babel/helper-function-name@7.23.0': 913 | dependencies: 914 | '@babel/template': 7.22.15 915 | '@babel/types': 7.23.6 916 | 917 | '@babel/helper-hoist-variables@7.22.5': 918 | dependencies: 919 | '@babel/types': 7.23.6 920 | 921 | '@babel/helper-module-imports@7.18.6': 922 | dependencies: 923 | '@babel/types': 7.21.3 924 | 925 | '@babel/helper-module-imports@7.22.15': 926 | dependencies: 927 | '@babel/types': 7.23.6 928 | 929 | '@babel/helper-module-transforms@7.23.3(@babel/core@7.23.7)': 930 | dependencies: 931 | '@babel/core': 7.23.7 932 | '@babel/helper-environment-visitor': 7.22.20 933 | '@babel/helper-module-imports': 7.22.15 934 | '@babel/helper-simple-access': 7.22.5 935 | '@babel/helper-split-export-declaration': 7.22.6 936 | '@babel/helper-validator-identifier': 7.22.20 937 | 938 | '@babel/helper-plugin-utils@7.22.5': {} 939 | 940 | '@babel/helper-simple-access@7.22.5': 941 | dependencies: 942 | '@babel/types': 7.23.6 943 | 944 | '@babel/helper-split-export-declaration@7.22.6': 945 | dependencies: 946 | '@babel/types': 7.23.6 947 | 948 | '@babel/helper-string-parser@7.19.4': {} 949 | 950 | '@babel/helper-string-parser@7.23.4': {} 951 | 952 | '@babel/helper-validator-identifier@7.19.1': {} 953 | 954 | '@babel/helper-validator-identifier@7.22.20': {} 955 | 956 | '@babel/helper-validator-option@7.23.5': {} 957 | 958 | '@babel/helpers@7.23.8': 959 | dependencies: 960 | '@babel/template': 7.22.15 961 | '@babel/traverse': 7.23.7 962 | '@babel/types': 7.23.6 963 | transitivePeerDependencies: 964 | - supports-color 965 | 966 | '@babel/highlight@7.18.6': 967 | dependencies: 968 | '@babel/helper-validator-identifier': 7.19.1 969 | chalk: 2.4.2 970 | js-tokens: 4.0.0 971 | 972 | '@babel/highlight@7.23.4': 973 | dependencies: 974 | '@babel/helper-validator-identifier': 7.22.20 975 | chalk: 2.4.2 976 | js-tokens: 4.0.0 977 | 978 | '@babel/parser@7.21.3': 979 | dependencies: 980 | '@babel/types': 7.21.3 981 | 982 | '@babel/parser@7.23.6': 983 | dependencies: 984 | '@babel/types': 7.23.6 985 | 986 | '@babel/plugin-transform-react-jsx-self@7.23.3(@babel/core@7.23.7)': 987 | dependencies: 988 | '@babel/core': 7.23.7 989 | '@babel/helper-plugin-utils': 7.22.5 990 | 991 | '@babel/plugin-transform-react-jsx-source@7.23.3(@babel/core@7.23.7)': 992 | dependencies: 993 | '@babel/core': 7.23.7 994 | '@babel/helper-plugin-utils': 7.22.5 995 | 996 | '@babel/runtime@7.21.0': 997 | dependencies: 998 | regenerator-runtime: 0.13.11 999 | 1000 | '@babel/template@7.22.15': 1001 | dependencies: 1002 | '@babel/code-frame': 7.23.5 1003 | '@babel/parser': 7.23.6 1004 | '@babel/types': 7.23.6 1005 | 1006 | '@babel/traverse@7.23.7': 1007 | dependencies: 1008 | '@babel/code-frame': 7.23.5 1009 | '@babel/generator': 7.23.6 1010 | '@babel/helper-environment-visitor': 7.22.20 1011 | '@babel/helper-function-name': 7.23.0 1012 | '@babel/helper-hoist-variables': 7.22.5 1013 | '@babel/helper-split-export-declaration': 7.22.6 1014 | '@babel/parser': 7.23.6 1015 | '@babel/types': 7.23.6 1016 | debug: 4.3.4 1017 | globals: 11.12.0 1018 | transitivePeerDependencies: 1019 | - supports-color 1020 | 1021 | '@babel/types@7.21.3': 1022 | dependencies: 1023 | '@babel/helper-string-parser': 7.19.4 1024 | '@babel/helper-validator-identifier': 7.19.1 1025 | to-fast-properties: 2.0.0 1026 | 1027 | '@babel/types@7.23.6': 1028 | dependencies: 1029 | '@babel/helper-string-parser': 7.23.4 1030 | '@babel/helper-validator-identifier': 7.22.20 1031 | to-fast-properties: 2.0.0 1032 | 1033 | '@emotion/babel-plugin@11.10.6': 1034 | dependencies: 1035 | '@babel/helper-module-imports': 7.18.6 1036 | '@babel/runtime': 7.21.0 1037 | '@emotion/hash': 0.9.0 1038 | '@emotion/memoize': 0.8.0 1039 | '@emotion/serialize': 1.1.1 1040 | babel-plugin-macros: 3.1.0 1041 | convert-source-map: 1.9.0 1042 | escape-string-regexp: 4.0.0 1043 | find-root: 1.1.0 1044 | source-map: 0.5.7 1045 | stylis: 4.1.3 1046 | 1047 | '@emotion/cache@11.10.5': 1048 | dependencies: 1049 | '@emotion/memoize': 0.8.0 1050 | '@emotion/sheet': 1.2.1 1051 | '@emotion/utils': 1.2.0 1052 | '@emotion/weak-memoize': 0.3.0 1053 | stylis: 4.1.3 1054 | 1055 | '@emotion/hash@0.9.0': {} 1056 | 1057 | '@emotion/memoize@0.8.0': {} 1058 | 1059 | '@emotion/react@11.10.6(@types/react@18.2.48)(react@18.2.0)': 1060 | dependencies: 1061 | '@babel/runtime': 7.21.0 1062 | '@emotion/babel-plugin': 11.10.6 1063 | '@emotion/cache': 11.10.5 1064 | '@emotion/serialize': 1.1.1 1065 | '@emotion/use-insertion-effect-with-fallbacks': 1.0.0(react@18.2.0) 1066 | '@emotion/utils': 1.2.0 1067 | '@emotion/weak-memoize': 0.3.0 1068 | hoist-non-react-statics: 3.3.2 1069 | react: 18.2.0 1070 | optionalDependencies: 1071 | '@types/react': 18.2.48 1072 | 1073 | '@emotion/serialize@1.1.1': 1074 | dependencies: 1075 | '@emotion/hash': 0.9.0 1076 | '@emotion/memoize': 0.8.0 1077 | '@emotion/unitless': 0.8.0 1078 | '@emotion/utils': 1.2.0 1079 | csstype: 3.1.1 1080 | 1081 | '@emotion/sheet@1.2.1': {} 1082 | 1083 | '@emotion/unitless@0.8.0': {} 1084 | 1085 | '@emotion/use-insertion-effect-with-fallbacks@1.0.0(react@18.2.0)': 1086 | dependencies: 1087 | react: 18.2.0 1088 | 1089 | '@emotion/utils@1.2.0': {} 1090 | 1091 | '@emotion/weak-memoize@0.3.0': {} 1092 | 1093 | '@esbuild/aix-ppc64@0.19.11': 1094 | optional: true 1095 | 1096 | '@esbuild/android-arm64@0.19.11': 1097 | optional: true 1098 | 1099 | '@esbuild/android-arm@0.19.11': 1100 | optional: true 1101 | 1102 | '@esbuild/android-x64@0.19.11': 1103 | optional: true 1104 | 1105 | '@esbuild/darwin-arm64@0.19.11': 1106 | optional: true 1107 | 1108 | '@esbuild/darwin-x64@0.19.11': 1109 | optional: true 1110 | 1111 | '@esbuild/freebsd-arm64@0.19.11': 1112 | optional: true 1113 | 1114 | '@esbuild/freebsd-x64@0.19.11': 1115 | optional: true 1116 | 1117 | '@esbuild/linux-arm64@0.19.11': 1118 | optional: true 1119 | 1120 | '@esbuild/linux-arm@0.19.11': 1121 | optional: true 1122 | 1123 | '@esbuild/linux-ia32@0.19.11': 1124 | optional: true 1125 | 1126 | '@esbuild/linux-loong64@0.19.11': 1127 | optional: true 1128 | 1129 | '@esbuild/linux-mips64el@0.19.11': 1130 | optional: true 1131 | 1132 | '@esbuild/linux-ppc64@0.19.11': 1133 | optional: true 1134 | 1135 | '@esbuild/linux-riscv64@0.19.11': 1136 | optional: true 1137 | 1138 | '@esbuild/linux-s390x@0.19.11': 1139 | optional: true 1140 | 1141 | '@esbuild/linux-x64@0.19.11': 1142 | optional: true 1143 | 1144 | '@esbuild/netbsd-x64@0.19.11': 1145 | optional: true 1146 | 1147 | '@esbuild/openbsd-x64@0.19.11': 1148 | optional: true 1149 | 1150 | '@esbuild/sunos-x64@0.19.11': 1151 | optional: true 1152 | 1153 | '@esbuild/win32-arm64@0.19.11': 1154 | optional: true 1155 | 1156 | '@esbuild/win32-ia32@0.19.11': 1157 | optional: true 1158 | 1159 | '@esbuild/win32-x64@0.19.11': 1160 | optional: true 1161 | 1162 | '@floating-ui/core@1.5.3': 1163 | dependencies: 1164 | '@floating-ui/utils': 0.2.1 1165 | 1166 | '@floating-ui/dom@1.5.4': 1167 | dependencies: 1168 | '@floating-ui/core': 1.5.3 1169 | '@floating-ui/utils': 0.2.1 1170 | 1171 | '@floating-ui/utils@0.2.1': {} 1172 | 1173 | '@jridgewell/gen-mapping@0.1.1': 1174 | dependencies: 1175 | '@jridgewell/set-array': 1.1.2 1176 | '@jridgewell/sourcemap-codec': 1.4.14 1177 | 1178 | '@jridgewell/gen-mapping@0.3.2': 1179 | dependencies: 1180 | '@jridgewell/set-array': 1.1.2 1181 | '@jridgewell/sourcemap-codec': 1.4.14 1182 | '@jridgewell/trace-mapping': 0.3.17 1183 | 1184 | '@jridgewell/resolve-uri@3.1.0': {} 1185 | 1186 | '@jridgewell/set-array@1.1.2': {} 1187 | 1188 | '@jridgewell/sourcemap-codec@1.4.14': {} 1189 | 1190 | '@jridgewell/trace-mapping@0.3.17': 1191 | dependencies: 1192 | '@jridgewell/resolve-uri': 3.1.0 1193 | '@jridgewell/sourcemap-codec': 1.4.14 1194 | 1195 | '@rollup/rollup-android-arm-eabi@4.28.0': 1196 | optional: true 1197 | 1198 | '@rollup/rollup-android-arm64@4.28.0': 1199 | optional: true 1200 | 1201 | '@rollup/rollup-darwin-arm64@4.28.0': 1202 | optional: true 1203 | 1204 | '@rollup/rollup-darwin-x64@4.28.0': 1205 | optional: true 1206 | 1207 | '@rollup/rollup-freebsd-arm64@4.28.0': 1208 | optional: true 1209 | 1210 | '@rollup/rollup-freebsd-x64@4.28.0': 1211 | optional: true 1212 | 1213 | '@rollup/rollup-linux-arm-gnueabihf@4.28.0': 1214 | optional: true 1215 | 1216 | '@rollup/rollup-linux-arm-musleabihf@4.28.0': 1217 | optional: true 1218 | 1219 | '@rollup/rollup-linux-arm64-gnu@4.28.0': 1220 | optional: true 1221 | 1222 | '@rollup/rollup-linux-arm64-musl@4.28.0': 1223 | optional: true 1224 | 1225 | '@rollup/rollup-linux-powerpc64le-gnu@4.28.0': 1226 | optional: true 1227 | 1228 | '@rollup/rollup-linux-riscv64-gnu@4.28.0': 1229 | optional: true 1230 | 1231 | '@rollup/rollup-linux-s390x-gnu@4.28.0': 1232 | optional: true 1233 | 1234 | '@rollup/rollup-linux-x64-gnu@4.28.0': 1235 | optional: true 1236 | 1237 | '@rollup/rollup-linux-x64-musl@4.28.0': 1238 | optional: true 1239 | 1240 | '@rollup/rollup-win32-arm64-msvc@4.28.0': 1241 | optional: true 1242 | 1243 | '@rollup/rollup-win32-ia32-msvc@4.28.0': 1244 | optional: true 1245 | 1246 | '@rollup/rollup-win32-x64-msvc@4.28.0': 1247 | optional: true 1248 | 1249 | '@types/babel__core@7.20.5': 1250 | dependencies: 1251 | '@babel/parser': 7.21.3 1252 | '@babel/types': 7.21.3 1253 | '@types/babel__generator': 7.6.8 1254 | '@types/babel__template': 7.4.4 1255 | '@types/babel__traverse': 7.20.5 1256 | 1257 | '@types/babel__generator@7.6.8': 1258 | dependencies: 1259 | '@babel/types': 7.21.3 1260 | 1261 | '@types/babel__template@7.4.4': 1262 | dependencies: 1263 | '@babel/parser': 7.21.3 1264 | '@babel/types': 7.21.3 1265 | 1266 | '@types/babel__traverse@7.20.5': 1267 | dependencies: 1268 | '@babel/types': 7.21.3 1269 | 1270 | '@types/estree@1.0.6': {} 1271 | 1272 | '@types/parse-json@4.0.0': {} 1273 | 1274 | '@types/prop-types@15.7.5': {} 1275 | 1276 | '@types/react-dom@18.2.18': 1277 | dependencies: 1278 | '@types/react': 18.2.48 1279 | 1280 | '@types/react-transition-group@4.4.10': 1281 | dependencies: 1282 | '@types/react': 18.2.48 1283 | 1284 | '@types/react@18.2.48': 1285 | dependencies: 1286 | '@types/prop-types': 15.7.5 1287 | '@types/scheduler': 0.16.3 1288 | csstype: 3.1.1 1289 | 1290 | '@types/scheduler@0.16.3': {} 1291 | 1292 | '@vitejs/plugin-react@4.2.1(vite@5.1.8)': 1293 | dependencies: 1294 | '@babel/core': 7.23.7 1295 | '@babel/plugin-transform-react-jsx-self': 7.23.3(@babel/core@7.23.7) 1296 | '@babel/plugin-transform-react-jsx-source': 7.23.3(@babel/core@7.23.7) 1297 | '@types/babel__core': 7.20.5 1298 | react-refresh: 0.14.0 1299 | vite: 5.1.8 1300 | transitivePeerDependencies: 1301 | - supports-color 1302 | 1303 | ansi-styles@3.2.1: 1304 | dependencies: 1305 | color-convert: 1.9.3 1306 | 1307 | babel-plugin-macros@3.1.0: 1308 | dependencies: 1309 | '@babel/runtime': 7.21.0 1310 | cosmiconfig: 7.1.0 1311 | resolve: 1.22.1 1312 | 1313 | browserslist@4.22.2: 1314 | dependencies: 1315 | caniuse-lite: 1.0.30001579 1316 | electron-to-chromium: 1.4.640 1317 | node-releases: 2.0.14 1318 | update-browserslist-db: 1.0.13(browserslist@4.22.2) 1319 | 1320 | callsites@3.1.0: {} 1321 | 1322 | caniuse-lite@1.0.30001579: {} 1323 | 1324 | chalk@2.4.2: 1325 | dependencies: 1326 | ansi-styles: 3.2.1 1327 | escape-string-regexp: 1.0.5 1328 | supports-color: 5.5.0 1329 | 1330 | color-convert@1.9.3: 1331 | dependencies: 1332 | color-name: 1.1.3 1333 | 1334 | color-name@1.1.3: {} 1335 | 1336 | convert-source-map@1.9.0: {} 1337 | 1338 | convert-source-map@2.0.0: {} 1339 | 1340 | cosmiconfig@7.1.0: 1341 | dependencies: 1342 | '@types/parse-json': 4.0.0 1343 | import-fresh: 3.3.0 1344 | parse-json: 5.2.0 1345 | path-type: 4.0.0 1346 | yaml: 1.10.2 1347 | 1348 | csstype@3.1.1: {} 1349 | 1350 | debug@4.3.4: 1351 | dependencies: 1352 | ms: 2.1.2 1353 | 1354 | dom-helpers@5.2.1: 1355 | dependencies: 1356 | '@babel/runtime': 7.21.0 1357 | csstype: 3.1.1 1358 | 1359 | efrt-unpack@2.2.0: {} 1360 | 1361 | electron-to-chromium@1.4.640: {} 1362 | 1363 | error-ex@1.3.2: 1364 | dependencies: 1365 | is-arrayish: 0.2.1 1366 | 1367 | esbuild@0.19.11: 1368 | optionalDependencies: 1369 | '@esbuild/aix-ppc64': 0.19.11 1370 | '@esbuild/android-arm': 0.19.11 1371 | '@esbuild/android-arm64': 0.19.11 1372 | '@esbuild/android-x64': 0.19.11 1373 | '@esbuild/darwin-arm64': 0.19.11 1374 | '@esbuild/darwin-x64': 0.19.11 1375 | '@esbuild/freebsd-arm64': 0.19.11 1376 | '@esbuild/freebsd-x64': 0.19.11 1377 | '@esbuild/linux-arm': 0.19.11 1378 | '@esbuild/linux-arm64': 0.19.11 1379 | '@esbuild/linux-ia32': 0.19.11 1380 | '@esbuild/linux-loong64': 0.19.11 1381 | '@esbuild/linux-mips64el': 0.19.11 1382 | '@esbuild/linux-ppc64': 0.19.11 1383 | '@esbuild/linux-riscv64': 0.19.11 1384 | '@esbuild/linux-s390x': 0.19.11 1385 | '@esbuild/linux-x64': 0.19.11 1386 | '@esbuild/netbsd-x64': 0.19.11 1387 | '@esbuild/openbsd-x64': 0.19.11 1388 | '@esbuild/sunos-x64': 0.19.11 1389 | '@esbuild/win32-arm64': 0.19.11 1390 | '@esbuild/win32-ia32': 0.19.11 1391 | '@esbuild/win32-x64': 0.19.11 1392 | 1393 | escalade@3.1.1: {} 1394 | 1395 | escape-string-regexp@1.0.5: {} 1396 | 1397 | escape-string-regexp@4.0.0: {} 1398 | 1399 | find-root@1.1.0: {} 1400 | 1401 | fsevents@2.3.3: 1402 | optional: true 1403 | 1404 | function-bind@1.1.1: {} 1405 | 1406 | gensync@1.0.0-beta.2: {} 1407 | 1408 | globals@11.12.0: {} 1409 | 1410 | has-flag@3.0.0: {} 1411 | 1412 | has@1.0.3: 1413 | dependencies: 1414 | function-bind: 1.1.1 1415 | 1416 | hoist-non-react-statics@3.3.2: 1417 | dependencies: 1418 | react-is: 16.13.1 1419 | 1420 | import-fresh@3.3.0: 1421 | dependencies: 1422 | parent-module: 1.0.1 1423 | resolve-from: 4.0.0 1424 | 1425 | is-arrayish@0.2.1: {} 1426 | 1427 | is-core-module@2.11.0: 1428 | dependencies: 1429 | has: 1.0.3 1430 | 1431 | js-tokens@4.0.0: {} 1432 | 1433 | jsesc@2.5.2: {} 1434 | 1435 | json-parse-even-better-errors@2.3.1: {} 1436 | 1437 | json5@2.2.3: {} 1438 | 1439 | lines-and-columns@1.2.4: {} 1440 | 1441 | loose-envify@1.4.0: 1442 | dependencies: 1443 | js-tokens: 4.0.0 1444 | 1445 | lru-cache@5.1.1: 1446 | dependencies: 1447 | yallist: 3.1.1 1448 | 1449 | memoize-one@6.0.0: {} 1450 | 1451 | ms@2.1.2: {} 1452 | 1453 | nanoid@3.3.8: {} 1454 | 1455 | node-releases@2.0.14: {} 1456 | 1457 | object-assign@4.1.1: {} 1458 | 1459 | parent-module@1.0.1: 1460 | dependencies: 1461 | callsites: 3.1.0 1462 | 1463 | parse-json@5.2.0: 1464 | dependencies: 1465 | '@babel/code-frame': 7.18.6 1466 | error-ex: 1.3.2 1467 | json-parse-even-better-errors: 2.3.1 1468 | lines-and-columns: 1.2.4 1469 | 1470 | path-parse@1.0.7: {} 1471 | 1472 | path-type@4.0.0: {} 1473 | 1474 | picocolors@1.1.0: {} 1475 | 1476 | postcss@8.4.47: 1477 | dependencies: 1478 | nanoid: 3.3.8 1479 | picocolors: 1.1.0 1480 | source-map-js: 1.2.1 1481 | 1482 | prettier@3.2.4: {} 1483 | 1484 | prop-types@15.8.1: 1485 | dependencies: 1486 | loose-envify: 1.4.0 1487 | object-assign: 4.1.1 1488 | react-is: 16.13.1 1489 | 1490 | react-dom@18.2.0(react@18.2.0): 1491 | dependencies: 1492 | loose-envify: 1.4.0 1493 | react: 18.2.0 1494 | scheduler: 0.23.0 1495 | 1496 | react-is@16.13.1: {} 1497 | 1498 | react-refresh@0.14.0: {} 1499 | 1500 | react-select@5.8.0(@types/react@18.2.48)(react-dom@18.2.0(react@18.2.0))(react@18.2.0): 1501 | dependencies: 1502 | '@babel/runtime': 7.21.0 1503 | '@emotion/cache': 11.10.5 1504 | '@emotion/react': 11.10.6(@types/react@18.2.48)(react@18.2.0) 1505 | '@floating-ui/dom': 1.5.4 1506 | '@types/react-transition-group': 4.4.10 1507 | memoize-one: 6.0.0 1508 | prop-types: 15.8.1 1509 | react: 18.2.0 1510 | react-dom: 18.2.0(react@18.2.0) 1511 | react-transition-group: 4.4.5(react-dom@18.2.0(react@18.2.0))(react@18.2.0) 1512 | use-isomorphic-layout-effect: 1.1.2(@types/react@18.2.48)(react@18.2.0) 1513 | transitivePeerDependencies: 1514 | - '@types/react' 1515 | 1516 | react-transition-group@4.4.5(react-dom@18.2.0(react@18.2.0))(react@18.2.0): 1517 | dependencies: 1518 | '@babel/runtime': 7.21.0 1519 | dom-helpers: 5.2.1 1520 | loose-envify: 1.4.0 1521 | prop-types: 15.8.1 1522 | react: 18.2.0 1523 | react-dom: 18.2.0(react@18.2.0) 1524 | 1525 | react@18.2.0: 1526 | dependencies: 1527 | loose-envify: 1.4.0 1528 | 1529 | regenerator-runtime@0.13.11: {} 1530 | 1531 | resolve-from@4.0.0: {} 1532 | 1533 | resolve@1.22.1: 1534 | dependencies: 1535 | is-core-module: 2.11.0 1536 | path-parse: 1.0.7 1537 | supports-preserve-symlinks-flag: 1.0.0 1538 | 1539 | rollup@4.28.0: 1540 | dependencies: 1541 | '@types/estree': 1.0.6 1542 | optionalDependencies: 1543 | '@rollup/rollup-android-arm-eabi': 4.28.0 1544 | '@rollup/rollup-android-arm64': 4.28.0 1545 | '@rollup/rollup-darwin-arm64': 4.28.0 1546 | '@rollup/rollup-darwin-x64': 4.28.0 1547 | '@rollup/rollup-freebsd-arm64': 4.28.0 1548 | '@rollup/rollup-freebsd-x64': 4.28.0 1549 | '@rollup/rollup-linux-arm-gnueabihf': 4.28.0 1550 | '@rollup/rollup-linux-arm-musleabihf': 4.28.0 1551 | '@rollup/rollup-linux-arm64-gnu': 4.28.0 1552 | '@rollup/rollup-linux-arm64-musl': 4.28.0 1553 | '@rollup/rollup-linux-powerpc64le-gnu': 4.28.0 1554 | '@rollup/rollup-linux-riscv64-gnu': 4.28.0 1555 | '@rollup/rollup-linux-s390x-gnu': 4.28.0 1556 | '@rollup/rollup-linux-x64-gnu': 4.28.0 1557 | '@rollup/rollup-linux-x64-musl': 4.28.0 1558 | '@rollup/rollup-win32-arm64-msvc': 4.28.0 1559 | '@rollup/rollup-win32-ia32-msvc': 4.28.0 1560 | '@rollup/rollup-win32-x64-msvc': 4.28.0 1561 | fsevents: 2.3.3 1562 | 1563 | scheduler@0.23.0: 1564 | dependencies: 1565 | loose-envify: 1.4.0 1566 | 1567 | semver@6.3.1: {} 1568 | 1569 | source-map-js@1.2.1: {} 1570 | 1571 | source-map@0.5.7: {} 1572 | 1573 | spacetime-informal@0.6.1: 1574 | dependencies: 1575 | efrt-unpack: 2.2.0 1576 | 1577 | spacetime@7.5.0: {} 1578 | 1579 | stylis@4.1.3: {} 1580 | 1581 | supports-color@5.5.0: 1582 | dependencies: 1583 | has-flag: 3.0.0 1584 | 1585 | supports-preserve-symlinks-flag@1.0.0: {} 1586 | 1587 | to-fast-properties@2.0.0: {} 1588 | 1589 | typescript@5.3.3: {} 1590 | 1591 | update-browserslist-db@1.0.13(browserslist@4.22.2): 1592 | dependencies: 1593 | browserslist: 4.22.2 1594 | escalade: 3.1.1 1595 | picocolors: 1.1.0 1596 | 1597 | use-isomorphic-layout-effect@1.1.2(@types/react@18.2.48)(react@18.2.0): 1598 | dependencies: 1599 | react: 18.2.0 1600 | optionalDependencies: 1601 | '@types/react': 18.2.48 1602 | 1603 | vite@5.1.8: 1604 | dependencies: 1605 | esbuild: 0.19.11 1606 | postcss: 8.4.47 1607 | rollup: 4.28.0 1608 | optionalDependencies: 1609 | fsevents: 2.3.3 1610 | 1611 | yallist@3.1.1: {} 1612 | 1613 | yaml@1.10.2: {} 1614 | -------------------------------------------------------------------------------- /example/src/App.css: -------------------------------------------------------------------------------- 1 | .wrapper { 2 | padding-top: 25px; 3 | width: 750px; 4 | margin: 0 auto; 5 | } 6 | 7 | .header { 8 | display: flex; 9 | flex-direction: column; 10 | align-items: center; 11 | margin: 50px 0; 12 | } 13 | 14 | .header * { 15 | margin: 0px; 16 | } 17 | 18 | .author { 19 | text-decoration: none; 20 | font-size: 0.8rem; 21 | padding-top: 10px; 22 | color: #666; 23 | } 24 | 25 | .label-style-select { 26 | border: 1px solid #ddd; 27 | border-radius: 6px; 28 | padding: 10px 20px; 29 | margin-top: 20px; 30 | } 31 | 32 | .label-style-select label { 33 | margin-left: 50px; 34 | } 35 | 36 | .select-wrapper { 37 | margin-top: 15px; 38 | width: 750px; 39 | max-width: 90vw; 40 | text-align: left; 41 | } 42 | 43 | .code { 44 | background-color: #efefef; 45 | 46 | width: auto; 47 | margin-top: 20px; 48 | padding: 30px; 49 | 50 | font-family: monospace; 51 | font-weight: 100; 52 | font-size: 1.2rem; 53 | } 54 | .code pre { 55 | white-space: pre-wrap; 56 | word-wrap: normal; 57 | word-break: keep-all; 58 | } 59 | -------------------------------------------------------------------------------- /example/src/App.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import Timezone from './Timezone'; 3 | import './App.css'; 4 | 5 | function App() { 6 | return ( 7 |
8 | 9 |
10 | ); 11 | } 12 | 13 | export default App; 14 | -------------------------------------------------------------------------------- /example/src/Timezone.tsx: -------------------------------------------------------------------------------- 1 | import React, { useMemo, useState } from 'react'; 2 | import spacetime from 'spacetime'; 3 | import TimezoneSelect, { allTimezones, useTimezoneSelect } from '../../dist'; 4 | import type { 5 | ITimezone, 6 | ILabelStyle, 7 | TimezoneSelectOptions, 8 | ITimezoneOption, 9 | } from '../../dist'; 10 | 11 | export type ISelectStyle = 'react-select' | 'select'; 12 | 13 | const timezones = { 14 | ...allTimezones, 15 | 'America/Lima': 'Pittsburgh', 16 | 'Europe/Berlin': 'Frankfurt', 17 | }; 18 | 19 | const Timezone = () => { 20 | const [selectedTimezone, setSelectedTimezone] = React.useState(''); 21 | const [selectStyle, setSelectStyle] = 22 | React.useState('react-select'); 23 | const [labelStyle, setLabelStyle] = React.useState('original'); 24 | 25 | const handleSelectChange = (event: React.ChangeEvent) => { 26 | setSelectStyle(event.target.value as ISelectStyle); 27 | }; 28 | const handleLabelChange = (event: React.ChangeEvent) => { 29 | setLabelStyle(event.target.value as ILabelStyle); 30 | }; 31 | 32 | const [datetime, setDatetime] = useState(spacetime.now()); 33 | 34 | useMemo(() => { 35 | const tzValue = 36 | typeof selectedTimezone === 'string' 37 | ? selectedTimezone 38 | : selectedTimezone?.value; 39 | setDatetime(datetime.goto(tzValue)); 40 | }, [selectedTimezone]); 41 | 42 | const selectOptions = { 43 | labelStyle, 44 | timezones, 45 | }; 46 | 47 | return ( 48 |
49 |
50 |

react-timezone-select

51 |

52 | 58 | ndom91 59 | 60 |

61 |
62 |
63 | {selectStyle === 'react-select' ? ( 64 | 69 | ) : ( 70 | 75 | )} 76 |
77 |
78 | Select Style: 79 | 89 | 93 |
94 |
95 | Label Style: 96 | 106 | 110 | 114 | 123 |
124 |
125 |
126 | Current Date / Time in{' '} 127 | {typeof selectedTimezone === 'string' 128 | ? selectedTimezone.split('/')[1] 129 | : selectedTimezone?.value.split('/')[1]} 130 | :
{datetime.unixFmt('dd.MM.YY HH:mm:ss')}
131 |
132 |
{JSON.stringify(selectedTimezone, null, 2)}
133 |
134 |
135 | ); 136 | }; 137 | 138 | type Props = { 139 | value: ITimezone; 140 | selectOptions: TimezoneSelectOptions; 141 | onChange?: (timezone: ITimezoneOption) => void; 142 | }; 143 | 144 | function NativeSelectTimezone({ selectOptions, value, onChange }: Props) { 145 | const { options, parseTimezone } = useTimezoneSelect(selectOptions); 146 | return ( 147 | 157 | ); 158 | } 159 | 160 | export default Timezone; 161 | -------------------------------------------------------------------------------- /example/src/env.d.ts: -------------------------------------------------------------------------------- 1 | /// 2 | -------------------------------------------------------------------------------- /example/src/index.css: -------------------------------------------------------------------------------- 1 | body { 2 | margin: 0; 3 | font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen', 4 | 'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue', 5 | sans-serif; 6 | -webkit-font-smoothing: antialiased; 7 | -moz-osx-font-smoothing: grayscale; 8 | } 9 | 10 | code { 11 | font-family: source-code-pro, Menlo, Monaco, Consolas, 'Courier New', 12 | monospace; 13 | } 14 | -------------------------------------------------------------------------------- /example/src/index.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import ReactDOM from 'react-dom/client'; 3 | import App from './App'; 4 | import './index.css'; 5 | 6 | ReactDOM.createRoot(document.getElementById('root')).render( 7 | 8 | 9 | , 10 | ); 11 | 12 | if (import.meta.hot) { 13 | import.meta.hot.accept(); 14 | } 15 | -------------------------------------------------------------------------------- /example/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "include": ["src"], 3 | "compilerOptions": { 4 | "module": "esnext", 5 | "target": "esnext", 6 | "moduleResolution": "node", 7 | "jsx": "react", 8 | "baseUrl": "./", 9 | "paths": { 10 | "*": ["../../src"] 11 | }, 12 | "noEmit": true, 13 | "strict": false, 14 | "skipLibCheck": true, 15 | "lib": ["dom", "dom.iterable", "esnext"], 16 | "forceConsistentCasingInFileNames": true, 17 | "resolveJsonModule": true, 18 | "allowSyntheticDefaultImports": true, 19 | "importsNotUsedAsValues": "error" 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /example/vite.config.ts: -------------------------------------------------------------------------------- 1 | import { defineConfig } from 'vite'; 2 | import react from '@vitejs/plugin-react'; 3 | 4 | // https://vitejs.dev/config/ 5 | export default defineConfig({ 6 | base: '/react-timezone-select/', 7 | build: { 8 | rollupOptions: { 9 | input: ['index.html', 'src/App.tsx', 'src/index.tsx', 'src/Timezone.tsx'], 10 | }, 11 | }, 12 | optimizeDeps: { 13 | include: ['react/jsx-runtime'], 14 | }, 15 | server: { 16 | fs: { 17 | allow: ['..'], 18 | strict: false, 19 | }, 20 | }, 21 | plugins: [react()], 22 | }); 23 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "react-timezone-select", 3 | "version": "3.2.8", 4 | "description": "Usable, dynamic React Timezone Select", 5 | "scripts": { 6 | "dev": "concurrently \"tsup src/index.tsx --format esm --watch\" \"cd example && pnpm dev\"", 7 | "prepublishOnly": "pnpm run build", 8 | "postpublish": "pnpm run build:example && npm run deploy", 9 | "build": "tsup src/index.tsx --format esm --clean --dts && sed -i '1i \"use client\"\\n' dist/index.js", 10 | "build:example": "cd example && pnpm run build", 11 | "deploy": "gh-pages -d example/dist", 12 | "pretest": "pnpm run build", 13 | "test": "vitest", 14 | "test:watch": "vitest --watch", 15 | "test:ci": "pnpm run build && pnpm test", 16 | "tsc": "tsc" 17 | }, 18 | "author": "Nico Domino ", 19 | "homepage": "https://github.com/ndom91/react-timezone-select", 20 | "repository": { 21 | "type": "git", 22 | "url": "git+https://github.com/ndom91/react-timezone-select.git" 23 | }, 24 | "bugs": { 25 | "url": "https://github.com/ndom91/react-timezone-select/issues" 26 | }, 27 | "license": "MIT", 28 | "keywords": [ 29 | "react", 30 | "timezone", 31 | "select", 32 | "react-select" 33 | ], 34 | "files": [ 35 | "dist/**/*", 36 | "package.json" 37 | ], 38 | "type": "module", 39 | "module": "./dist/index.js", 40 | "types": "./dist/index.d.ts", 41 | "exports": { 42 | ".": { 43 | "types": "./dist/index.d.ts", 44 | "import": "./dist/index.js" 45 | } 46 | }, 47 | "peerDependencies": { 48 | "react": "^16 || ^17.0.1 || ^18 || ^19.0.0-0", 49 | "react-dom": "^16 || ^17.0.1 || ^18 || ^19.0.0-0", 50 | "react-select": "^5.8.0" 51 | }, 52 | "dependencies": { 53 | "spacetime": "^7.6.0", 54 | "timezone-soft": "^1.5.2" 55 | }, 56 | "devDependencies": { 57 | "@babel/core": "^7.24.9", 58 | "@testing-library/jest-dom": "^6.4.8", 59 | "@testing-library/react": "^16.0.0", 60 | "@types/jest": "^29.5.12", 61 | "@types/react": "^18.3.3", 62 | "@types/react-dom": "^18.3.0", 63 | "@types/testing-library__jest-dom": "^5.14.9", 64 | "@typescript-eslint/eslint-plugin": "^7.17.0", 65 | "@typescript-eslint/parser": "^7.17.0", 66 | "@vitejs/plugin-react": "^4.3.1", 67 | "concurrently": "^8.2.2", 68 | "esbuild": "^0.23.0", 69 | "esbuild-jest": "^0.5.0", 70 | "eslint": "^8.57.0", 71 | "eslint-config-prettier": "^9.1.0", 72 | "eslint-plugin-prettier": "5.2.1", 73 | "gh-pages": "^6.1.1", 74 | "jest-environment-jsdom": "^29.7.0", 75 | "prettier": "^3.3.3", 76 | "react": "^18.2.0", 77 | "react-dom": "^18.2.0", 78 | "simple-git-hooks": "^2.11.1", 79 | "ts-jest": "^29.2.3", 80 | "tsup": "^8.2.2", 81 | "typescript": "^5.5.4", 82 | "vite": "^5.3.4", 83 | "vite-tsconfig-paths": "^4.3.2", 84 | "vitest": "^2.0.4" 85 | }, 86 | "eslintConfig": { 87 | "parser": "@typescript-eslint/parser", 88 | "parserOptions": { 89 | "ecmaVersion": "latest", 90 | "sourceType": "module" 91 | }, 92 | "extends": [ 93 | "eslint:recommended", 94 | "plugin:@typescript-eslint/recommended", 95 | "plugin:prettier/recommended" 96 | ], 97 | "plugins": [ 98 | "@typescript-eslint" 99 | ], 100 | "root": true 101 | }, 102 | "prettier": { 103 | "semi": false, 104 | "printWidth": 100 105 | }, 106 | "simple-git-hooks": { 107 | "pre-commit": "npx lint-staged" 108 | }, 109 | "lint-staged": { 110 | "*.{js,jsx,ts,tsx}": [ 111 | "eslint --fix" 112 | ] 113 | }, 114 | "packageManager": "pnpm@9.0.6+sha256.0624e30eff866cdeb363b15061bdb7fd9425b17bc1bb42c22f5f4efdea21f6b3" 115 | } 116 | -------------------------------------------------------------------------------- /src/index.tsx: -------------------------------------------------------------------------------- 1 | import { useMemo } from "react" 2 | import Select from "react-select" 3 | import spacetime, { type Spacetime } from "spacetime" 4 | import soft from "timezone-soft" 5 | import allTimezones from "./timezone-list.js" 6 | import type { Props, ITimezone, ITimezoneOption, ILabelStyle } from "./types/timezone" 7 | import { TimezoneSelectOptions } from "./types/timezone" 8 | 9 | export function useTimezoneSelect({ 10 | timezones = allTimezones, 11 | labelStyle = "original", 12 | displayValue = "GMT", 13 | currentDatetime, 14 | }: TimezoneSelectOptions): { 15 | parseTimezone: (zone: ITimezone) => ITimezoneOption 16 | options: ITimezoneOption[] 17 | } { 18 | const options = useMemo(() => { 19 | return Object.entries(timezones) 20 | .map((zone) => { 21 | try { 22 | const now = (currentDatetime ? spacetime(currentDatetime) : spacetime.now()).goto(zone[0]) 23 | const isDstString = now.isDST() ? "daylight" : "standard" 24 | const tz = now.timezone() 25 | const tzStrings = soft(zone[0]) 26 | 27 | const abbr = tzStrings?.[0]?.[isDstString]?.abbr 28 | const altName = tzStrings?.[0]?.[isDstString]?.name 29 | 30 | const min = tz.current.offset * 60 31 | const hr = `${(min / 60) ^ 0}:${min % 60 === 0 ? "00" : Math.abs(min % 60)}` 32 | const prefix = `(${displayValue}${hr.includes("-") ? hr : `+${hr}`}) ${zone[1]}` 33 | 34 | let label = "" 35 | 36 | switch (labelStyle) { 37 | case "original": 38 | label = prefix 39 | break 40 | case "altName": 41 | label = `${prefix} ${altName ? `(${altName})` : ""}` 42 | break 43 | case "abbrev": 44 | label = `${prefix} ${abbr ? `(${abbr})` : ""}` 45 | break 46 | case "offsetHidden": 47 | label = `${prefix.replace(/^\(.*?\)\s*/, "")}` 48 | break 49 | default: 50 | label = `${prefix}` 51 | } 52 | 53 | return { 54 | value: tz.name, 55 | label: label, 56 | offset: tz.current.offset, 57 | abbrev: abbr, 58 | altName: altName, 59 | } 60 | } catch { 61 | return null 62 | } 63 | }) 64 | .filter(Boolean) 65 | .sort((a: ITimezoneOption, b: ITimezoneOption) => a.offset - b.offset) 66 | }, [labelStyle, timezones, currentDatetime]) 67 | 68 | const findFuzzyTz = (zone: string): ITimezoneOption => { 69 | let currentTime: Spacetime 70 | try { 71 | currentTime = (currentDatetime ? spacetime(currentDatetime) : spacetime.now()).goto(zone) 72 | } catch (err) { 73 | currentTime = (currentDatetime ? spacetime(currentDatetime) : spacetime.now()).goto("GMT") 74 | } 75 | 76 | return options 77 | .filter((tz: ITimezoneOption) => tz.offset === currentTime.timezone().current.offset) 78 | .map((tz: ITimezoneOption) => { 79 | let score = 0 80 | if ( 81 | currentTime.timezones[tz.value.toLowerCase()] && 82 | !!currentTime.timezones[tz.value.toLowerCase()].dst === currentTime.timezone().hasDst 83 | ) { 84 | if ( 85 | tz.value 86 | .toLowerCase() 87 | .indexOf(currentTime.tz.substring(currentTime.tz.indexOf("/") + 1)) !== -1 88 | ) { 89 | score += 8 90 | } 91 | if ( 92 | tz.label 93 | .toLowerCase() 94 | .indexOf(currentTime.tz.substring(currentTime.tz.indexOf("/") + 1)) !== -1 95 | ) { 96 | score += 4 97 | } 98 | if ( 99 | tz.value 100 | .toLowerCase() 101 | .indexOf(currentTime.tz.substring(0, currentTime.tz.indexOf("/"))) !== -1 102 | ) { 103 | score += 2 104 | } 105 | score += 1 106 | } else if (tz.value === "GMT") { 107 | score += 1 108 | } 109 | return { tz, score } 110 | }) 111 | .sort((a, b) => b.score - a.score)?.[0]?.tz 112 | } 113 | 114 | function isObject(item: unknown) { 115 | return typeof item === "object" && !Array.isArray(item) && item !== null 116 | } 117 | 118 | const parseTimezone = (zone: ITimezone) => { 119 | if (typeof zone === "string") { 120 | return ( 121 | options.find((tz) => tz.value === zone) || (zone.indexOf("/") !== -1 && findFuzzyTz(zone)) 122 | ) 123 | } else if (isObject(zone) && !zone.label) { 124 | return options.find((tz) => tz.value === zone.value) 125 | } else { 126 | return zone 127 | } 128 | } 129 | 130 | return { options, parseTimezone } 131 | } 132 | 133 | const TimezoneSelect = ({ 134 | value, 135 | onBlur, 136 | onChange, 137 | labelStyle, 138 | displayValue, 139 | timezones, 140 | currentDatetime, 141 | ...props 142 | }: Props) => { 143 | const { options, parseTimezone } = useTimezoneSelect({ 144 | timezones, 145 | labelStyle, 146 | displayValue, 147 | currentDatetime, 148 | }) 149 | 150 | const handleChange = (tz: ITimezoneOption) => { 151 | onChange && onChange(tz) 152 | } 153 | 154 | return ( 155 |