Compare commits

..

164 Commits

Author SHA1 Message Date
5fdf5f1ea0 Fix tec counter
Signed-off-by: Egor Savkin <es@m-labs.hk>
2024-12-23 12:51:39 +08:00
4ee4e5fb23 hvamp: increase price 2024-12-20 11:16:42 +08:00
2df8078988 hvamp: clarify 2024-12-20 11:16:33 +08:00
7220ee0e68 Update HVAMP32 according to the factual specs
Signed-off-by: Egor Savkin <es@m-labs.hk>
2024-12-20 11:16:02 +08:00
5856369684 remove invalid entry from config.toml 2024-12-04 23:01:19 +08:00
a5a8589b28 add link to OffsetStabilizer 2024-11-16 11:55:30 +08:00
bb42788fd3 remove dead link/project 2024-10-30 22:03:16 +08:00
f29807a913 Optimize the download button
Replace download button with windows icon (just four squares).
Make the download button last so on certain screens it wouldn't cause additional empty-ish lines.
Redo the wording so the button is shorter, but the dropdown menu is filled.

Signed-off-by: Egor Savkin <es@m-labs.hk>
2024-10-21 17:46:40 +08:00
9d9a4c9f5a Split dropdown
On main click it downloads stable, in dropdown there are two choices - stable and beta. Similar to the downloads on jetbrains website

Signed-off-by: Egor Savkin <es@m-labs.hk>
2024-10-21 15:32:19 +08:00
92f7428ac8 Replace download button with dropdown
Signed-off-by: Egor Savkin <es@m-labs.hk>
2024-10-18 12:29:19 +08:00
a163a269b9 Update NUC
Signed-off-by: Egor Savkin <es@m-labs.hk>
2024-10-17 11:10:40 +08:00
f087a00cee Fix price not getting updated on crate clear and deletion
Signed-off-by: Egor Savkin <es@m-labs.hk>
2024-10-04 11:25:49 +08:00
f69102fa0e update FAQ 2024-10-02 13:56:35 +08:00
0d978c1e22 Add mcx-idc 32 channel to the shop
The icon had to be altered in order to lower the risk of triggering trypophobia

Signed-off-by: Egor Savkin <es@m-labs.hk>
2024-09-27 13:47:04 +08:00
76bc87ce5c faq: add entries 2024-09-10 18:45:12 +08:00
3987343e16 advertise Phaser MIQRO gateware 2024-08-27 22:48:42 +08:00
8a12d35c06 faq: add US mirror 2024-08-14 12:51:09 +08:00
d2ae816cb0 add links to cheap boards 2024-08-12 17:11:38 +08:00
bcdf005896 Fix pounder and eem pwr mode hp consumption
Signed-off-by: Egor Savkin <es@m-labs.hk>
2024-08-09 12:03:43 +08:00
b53e191528 Update and clean up NPM dependencies
npm audit also reported 0 vulnerabilities

Signed-off-by: Egor Savkin <es@m-labs.hk>
2024-08-05 11:26:28 +08:00
52c05c2e2a Move out subcomponents of ProductItem
This improves maintenance as it reduces complexity of the ProductItem component and allows seeing components in react dev tools

Signed-off-by: Egor Savkin <es@m-labs.hk>
2024-08-05 11:25:32 +08:00
c7b0d5568c Fix options pop up being both first and last
Signed-off-by: Egor Savkin <es@m-labs.hk>
2024-08-05 11:25:32 +08:00
68677dce6e Make tooltip icons inline
Signed-off-by: Egor Savkin <es@m-labs.hk>
2024-08-05 10:29:26 +08:00
b0ef9d07fc Remove unused type field from shop_data
Signed-off-by: Egor Savkin <es@m-labs.hk>
2024-08-05 10:29:01 +08:00
cedf853301 edit Kirdy description 2024-08-04 12:01:07 +08:00
c5c723ae40 Add Kirdy to the shop
Signed-off-by: Egor Savkin <es@m-labs.hk>
2024-08-02 17:14:35 +08:00
ff56f369af Show No results instead of all cards when search failed
Signed-off-by: Egor Savkin <es@m-labs.hk>
2024-08-02 15:39:34 +08:00
580dd1964c advertise AOM integration 2024-07-29 12:55:22 +08:00
a2e672ffc9 update ordering FAQ 2024-07-27 17:25:35 +08:00
950518ba97 add FAQ 2024-07-26 18:16:30 +08:00
c6696f5098 Fix typo
Signed-off-by: Egor Savkin <es@m-labs.hk>
2024-07-26 16:18:08 +08:00
c63249e8a0 Inject JS in templates with correct domains
Signed-off-by: Egor Savkin <es@m-labs.hk>
2024-07-18 11:56:58 +08:00
95304cfd61 Add HVAMP32 to the webshop
Signed-off-by: Egor Savkin <es@m-labs.hk>
2024-07-09 17:41:35 +08:00
cba6ab72c4 Add development scripts for smoother development process
Signed-off-by: Egor Savkin <es@m-labs.hk>
2024-07-05 15:07:12 +08:00
d3cc86dfa5 Add 2 channel thermostat to shop
Signed-off-by: Egor Savkin <es@m-labs.hk>
2024-07-05 14:48:55 +08:00
69cd11e3f1 Add Fast Servo to shop
Signed-off-by: Egor Savkin <es@m-labs.hk>
2024-07-03 17:09:55 +08:00
c91020b72b Add icon for windows installer download button
Icon from https://www.iconfinder.com/icons/9026548/download_thin_icon - MIT license.
In accessibility options, the link reads as `download Windows installer`

Signed-off-by: Egor Savkin <es@m-labs.hk>
2024-06-21 13:10:20 +08:00
243851ea56 update installer button 2024-06-06 11:14:39 +08:00
5abec7c676 Add installer to the main page
Signed-off-by: Egor Savkin <es@m-labs.hk>
2024-06-06 11:10:56 +08:00
da39ac3f56 External clock reference variants -> options
Signed-off-by: Egor Savkin <es@m-labs.hk>
2024-05-10 09:58:41 +08:00
6f7c2c020b Revert "Add installer to the main page"
This reverts commit a6fbae7bcb.
2024-05-08 19:51:32 +08:00
63d33210c1 Fix broken links
Signed-off-by: Egor Savkin <es@m-labs.hk>
2024-05-08 12:36:57 +08:00
a6fbae7bcb Add installer to the main page
Signed-off-by: Egor Savkin <es@m-labs.hk>
2024-05-08 11:22:22 +08:00
火焚富良
c02b57c4c2 Add WRPLL option to Kasli SoC 2024-05-07 15:28:47 +08:00
6fe4f124bc add link to Argent 2024-04-23 13:14:23 +08:00
3fd43e0de8 Increase padding in searchbar to avoid shadow
Signed-off-by: Egor Savkin <es@m-labs.hk>
2024-04-10 15:17:31 +08:00
4448029757 Update bundle and make example configuration correct
Signed-off-by: Egor Savkin <es@m-labs.hk>
2024-04-09 14:56:05 +08:00
51c9031f24 Add text options validation
Signed-off-by: Egor Savkin <es@m-labs.hk>
2024-04-09 14:56:05 +08:00
be50b2a3c3 Optimize bundle size, and drop its support for J2ME's Opera (layout doesn't support small screens anyway)
Signed-off-by: Egor Savkin <es@m-labs.hk>
2024-04-09 14:56:05 +08:00
ee6da1b282 Update bundle
Signed-off-by: Egor Savkin <es@m-labs.hk>
2024-04-09 14:56:05 +08:00
5e3a9af749 Fix notification remained visible when side menu is opened
Signed-off-by: Egor Savkin <es@m-labs.hk>
2024-04-09 14:56:05 +08:00
d3fb46956e Fix notification overlay making "added" notification disappear on touchables
When notification doesn't fit viewport on touch-enabled devices, it makes the canvas extend to its boundaries, braking the fixed positioned elements placement

Signed-off-by: Egor Savkin <es@m-labs.hk>
2024-04-09 14:56:05 +08:00
6bfed3e779 Show at max only one options notification
Closes #124

Signed-off-by: Egor Savkin <es@m-labs.hk>
2024-04-09 14:56:05 +08:00
dfe1f0ea2d Rename backlog to catalog
Signed-off-by: Egor Savkin <es@m-labs.hk>
2024-04-09 14:56:05 +08:00
839d7c6612 Fix search bar icon conflicting in webkit and make backlog scroll bar thin
Signed-off-by: Egor Savkin <es@m-labs.hk>
2024-04-09 14:56:05 +08:00
1cb9c90c65 Fix bottom side gradient
Signed-off-by: Egor Savkin <es@m-labs.hk>
2024-04-09 14:56:05 +08:00
eb196b086e Make fonts sizes more consistent and fiz minor paddings issues
Signed-off-by: Egor Savkin <es@m-labs.hk>
2024-04-09 14:56:05 +08:00
56a44ce4a3 Do not show groups when there are search results
Signed-off-by: Egor Savkin <es@m-labs.hk>
2024-04-09 14:56:05 +08:00
aa35348288 Apply styles to the search bar
Signed-off-by: Egor Savkin <es@m-labs.hk>
2024-04-09 14:56:05 +08:00
4bc6f6a3ee Prototype search bar for the backlog
Signed-off-by: Egor Savkin <es@m-labs.hk>
2024-04-09 14:56:05 +08:00
2ba10dd2e8 improve sales info 2024-03-08 09:31:30 +08:00
df7607ffd8 Do not show copy button in not secured contexts and add product number to the backlog header
Signed-off-by: Egor Savkin <es@m-labs.hk>
2024-02-21 11:57:33 +08:00
4906ad1713 shop: price excludes shipping 2024-02-15 12:36:09 +08:00
41e20d205c shop: improve wording 2024-02-15 12:34:01 +08:00
67cef120b6 Move order options to the OrderForm, fix missing tooltip props, update tooltip contents
Signed-off-by: Egor Savkin <es@m-labs.hk>
2024-02-15 12:17:19 +08:00
759f7cffcc Add css classes to the radio component, add shipping summary and other content fixes
Signed-off-by: Egor Savkin <es@m-labs.hk>
2024-02-15 12:17:19 +08:00
0b5797b1ba Add more order options and enhance the look of them
Signed-off-by: Egor Savkin <es@m-labs.hk>
2024-02-15 12:17:19 +08:00
bcc8db6819 Add order options
Signed-off-by: Egor Savkin <es@m-labs.hk>
2024-02-15 12:17:19 +08:00
15d9124025 Cache total price calculation
Signed-off-by: Egor Savkin <es@m-labs.hk>
2024-02-15 12:17:19 +08:00
4527189994 Add flexible crate options
Signed-off-by: Egor Savkin <es@m-labs.hk>
2024-02-15 12:17:19 +08:00
bc81035555 Prototype crate and order options
Signed-off-by: Egor Savkin <es@m-labs.hk>
2024-02-15 12:17:19 +08:00
cbe61efc1d Delete idc-mcx adapter
Signed-off-by: Egor Savkin <es@m-labs.hk>
2024-02-15 11:38:14 +08:00
ad262c6657 avoid uncommon/incorrect 'TEC chip' terminology 2024-02-07 10:31:53 +08:00
3fb2a219de fix fan tray price and description 2024-01-26 15:47:30 +08:00
ddd8b2d894 Add fan tray option to the crate
Signed-off-by: Egor Savkin <es@m-labs.hk>
2024-01-25 17:10:14 +08:00
3366f80ed7 Fix reminder background color
Signed-off-by: Egor Savkin <es@m-labs.hk>
2024-01-23 16:30:27 +08:00
9d5ed66985 Do not show reminders in summary
Signed-off-by: Egor Savkin <es@m-labs.hk>
2024-01-23 11:44:01 +08:00
ca2eb29fbf Alignment fixes, remove price of spare cards, reworded the description phrase,
Signed-off-by: Egor Savkin <es@m-labs.hk>
2024-01-23 11:36:56 +08:00
7ceba1d461 Extend shop description to 80% and fix notification on mobiles when sidemenu is open
Signed-off-by: Egor Savkin <es@m-labs.hk>
2024-01-15 15:51:04 +08:00
4f702e9064 Remove delete crate from spare cards and add crate numbers to the summary
Signed-off-by: Egor Savkin <es@m-labs.hk>
2024-01-15 13:01:27 +08:00
6d6809af7f Show tooltip instead of badge by default
Signed-off-by: Egor Savkin <es@m-labs.hk>
2024-01-15 12:28:07 +08:00
fcf0f49816 Fix form submit
Signed-off-by: Egor Savkin <es@m-labs.hk>
2024-01-09 10:14:53 +08:00
d8bad3d7b4 Fix example for import
Signed-off-by: Egor Savkin <es@m-labs.hk>
2024-01-09 10:14:53 +08:00
e87c4a16a8 Add copy to clipboard button in ShowJSON
Signed-off-by: Egor Savkin <es@m-labs.hk>
2024-01-09 10:14:53 +08:00
83be26ecbb Change JSON structure from array to object, so that we can add more fields later
Signed-off-by: Egor Savkin <es@m-labs.hk>
2024-01-09 10:14:53 +08:00
火焚 富良
963f342c89 Spare cards is always last
Also add warning if no cards were added
2024-01-09 10:14:53 +08:00
火焚 富良
a589c309cc Notification badge on unviewed options 2024-01-09 10:14:53 +08:00
0ed9f730b2 Add prototype of the notification, fixes and animation needed
Signed-off-by: Egor Savkin <es@m-labs.hk>
2024-01-09 10:14:53 +08:00
c3e583d644 Revert legend
Signed-off-by: Egor Savkin <es@m-labs.hk>
2024-01-09 10:14:53 +08:00
161666b09c Disable warnings and options for the spare cards crate mode
Signed-off-by: Egor Savkin <es@m-labs.hk>
2024-01-09 10:14:53 +08:00
2673f81526 Disable warnings and resources for standalone->spare cards
Signed-off-by: Egor Savkin <es@m-labs.hk>
2024-01-09 10:14:53 +08:00
a9e24c6202 Fix same options in different crates and drop to the backlog
Signed-off-by: Egor Savkin <es@m-labs.hk>
2024-01-09 10:14:53 +08:00
14c365b20f Add legend to help users discover options
Signed-off-by: Egor Savkin <es@m-labs.hk>
2024-01-09 10:14:53 +08:00
a03a151c42 Modals style fixes
Signed-off-by: Egor Savkin <es@m-labs.hk>
2024-01-09 10:14:53 +08:00
c09d583fa6 Fix moving cards in carts, json importer, and further rerender fixes and optimizations
Signed-off-by: Egor Savkin <es@m-labs.hk>
2024-01-09 10:14:53 +08:00
2bfc16e3c0 Split Summary so that it rerenders only partially
Signed-off-by: Egor Savkin <es@m-labs.hk>
2024-01-09 10:14:53 +08:00
bf05594813 Set up preprocessor for conditional compilation
Signed-off-by: Egor Savkin <es@m-labs.hk>
2024-01-09 10:14:53 +08:00
25c4ff970d Significantly reduce number of renders
Signed-off-by: Egor Savkin <es@m-labs.hk>
2024-01-09 10:14:53 +08:00
0e60eb9bce Fix buttons colors
Signed-off-by: Egor Savkin <es@m-labs.hk>
2024-01-09 10:14:53 +08:00
07e01bcc93 Crates UI fixes
TODO ex .rfqFeedback fixes

Signed-off-by: Egor Savkin <es@m-labs.hk>
2024-01-09 10:14:53 +08:00
c7314801ed Fix crate list expansion behavior
Signed-off-by: Egor Savkin <es@m-labs.hk>
2024-01-09 10:14:53 +08:00
3b1d9fcb56 Minor fixes
Signed-off-by: Egor Savkin <es@m-labs.hk>
2024-01-09 10:14:53 +08:00
ff7eac97dc Restored all the functionality, but needs UI fixes
Signed-off-by: Egor Savkin <es@m-labs.hk>
2024-01-09 10:14:53 +08:00
火焚 富良
59f726e805 Start refactor of order form 2024-01-09 10:14:53 +08:00
火焚 富良
6b92bf9145 Make cards behavior working somewhat properly 2024-01-09 10:14:53 +08:00
ec2c0a3b80 Somewhat minimal working example
Signed-off-by: Egor Savkin <es@m-labs.hk>
2024-01-09 10:14:53 +08:00
9edf410e4d Start refactor to state manager zustand
Signed-off-by: Egor Savkin <es@m-labs.hk>
2024-01-09 10:14:53 +08:00
9bdaca2ca9 Start adding the warnings
Signed-off-by: Egor Savkin <es@m-labs.hk>
2024-01-09 10:14:53 +08:00
94f321ecf7 Minimal summary and crate mode
Signed-off-by: Egor Savkin <es@m-labs.hk>
2024-01-09 10:14:53 +08:00
e6df70b96a Add add/delete functionality to crates
Signed-off-by: Egor Savkin <es@m-labs.hk>
2024-01-09 10:14:53 +08:00
691e5bbd86 Minimal working multiple crates
Signed-off-by: Egor Savkin <es@m-labs.hk>
2024-01-09 10:14:53 +08:00
63d83b5e10 Add other warnings for the cards
Signed-off-by: Egor Savkin <es@m-labs.hk>
2024-01-09 10:14:53 +08:00
abb472f0ea Minimal working warnings and resources
TODO:
* Add all other warnings for cards
* Add crate level warnings
* Add reminders to the bottom of the crate
* Refactor crate mode selection (???)
* Add resource consumers, instead of a bunch of nbrOccupiedSLots

Signed-off-by: Egor Savkin <es@m-labs.hk>
2024-01-09 10:14:53 +08:00
530be12334 Start refactoring warnings
Signed-off-by: Egor Savkin <es@m-labs.hk>
2024-01-09 10:14:53 +08:00
e8b1d70356 Refactor resource subsystem (still needs integration)
Signed-off-by: Egor Savkin <es@m-labs.hk>
2024-01-09 10:14:53 +08:00
da3f18d6d9 Slightly reduce dependencies
Signed-off-by: Egor Savkin <es@m-labs.hk>
2024-01-09 10:14:53 +08:00
ecbbd6898d Split components into separate files
Signed-off-by: Egor Savkin <es@m-labs.hk>
2024-01-09 10:14:53 +08:00
2d6cb872f1 rfq: use password file 2024-01-08 17:53:04 +08:00
11d2e7c3d0 replace deprecated json.htmlsafe_dumps 2024-01-08 16:47:42 +08:00
49ef25b5c3 Demangle email addresses on the site
Signed-off-by: Egor Savkin <es@m-labs.hk>
2023-11-29 17:21:33 +08:00
9966593166 Add options for the cards (#93)
Closes #85
Closes #80
Co-authored-by: Egor Savkin <es@m-labs.hk>
Co-committed-by: Egor Savkin <es@m-labs.hk>
2023-11-28 15:32:34 +08:00
f8c19cf9b9 Update funding design
Wrap each funder into the horizontal card with logo and description, increase margins for platinum/gold/... headers

Signed-off-by: Egor Savkin <es@m-labs.hk>
2023-11-20 14:32:50 +08:00
cb99047571 Articles from Nature magazine
Signed-off-by: Egor Savkin <es@m-labs.hk>
2023-11-20 14:28:39 +08:00
83a04be40e Sort publications - put individual works to the bottom, add expandable view
Signed-off-by: Egor Savkin <es@m-labs.hk>
2023-11-20 14:28:39 +08:00
e576704db3 Add publications by "artiq" keyword
Signed-off-by: Egor Savkin <es@m-labs.hk>
2023-11-20 14:28:39 +08:00
a93f210c92 Update icons for BNC cards - Sampler, IDC and TTL
Make connectors same across cards and adjust labels to fit them

Signed-off-by: Egor Savkin <es@m-labs.hk>
2023-11-17 12:05:17 +08:00
a5b217c183 Fix hover logic on touchables
* fix cards removal
* fix cards progress bar overlay
* fix cards warning overlay

Signed-off-by: Egor Savkin <es@m-labs.hk>
2023-11-07 14:59:20 +08:00
bd33946b0e Use thin spaces between initials
Signed-off-by: Egor Savkin <es@m-labs.hk>
2023-10-26 10:28:41 +08:00
b88e6bc485 Refactor publications section and layout them as cards
Signed-off-by: Egor Savkin <es@m-labs.hk>
2023-10-26 10:28:21 +08:00
c34b1d9e4b Optimize preview with pngquant 256
Signed-off-by: Egor Savkin <es@m-labs.hk>
2023-10-17 14:04:54 +08:00
026c3c3108 Add photos for Thermostat EEM (@mwojcik)
Signed-off-by: Egor Savkin <es@m-labs.hk>
2023-10-17 14:04:54 +08:00
5d298b3325 Fix card at index 0 being not addable
Signed-off-by: Egor Savkin <es@m-labs.hk>
2023-10-11 12:15:12 +08:00
fe26aa890d Update shuttler to have one mandatory EEM and clock source
Signed-off-by: Egor Savkin <es@m-labs.hk>
2023-10-11 11:38:00 +08:00
896946336b Shuttler precisions 2023-10-11 11:04:33 +08:00
da74bb1d8d Add Shuttler to the shop (#98)
Closes #95

Reviewed-on: M-Labs/web2019#98
Co-authored-by: Egor Savkin <es@m-labs.hk>
Co-committed-by: Egor Savkin <es@m-labs.hk>
2023-10-11 11:01:26 +08:00
320665c3bd cleanup 2023-10-10 17:53:25 +08:00
a6faaecb8b clarify external PSU 2023-10-10 17:51:18 +08:00
393fc8e3c9 Add EEM power module to the shop
Co-authored-by: Egor Savkin <es@m-labs.hk>
Co-committed-by: Egor Savkin <es@m-labs.hk>
2023-10-10 17:34:52 +08:00
a7c4c079a4 add link to UCLA AMO 2023-09-11 21:02:44 +08:00
212a7743eb Update bundle file
Signed-off-by: Egor Savkin <es@m-labs.hk>
2023-08-22 16:34:12 +08:00
27c7db1df4 Allow duplicating cards in the backlog
Signed-off-by: Egor Savkin <es@m-labs.hk>
2023-08-22 16:18:22 +08:00
4dc15f5633 Fix Show JSON button functionality regression introduced with 0e9f822536
Signed-off-by: Egor Savkin <es@m-labs.hk>
2023-08-22 16:14:11 +08:00
dee2a40151 Fix #72 - make side-panel button depend on screen size, same as the appearance
Signed-off-by: Egor Savkin <es@m-labs.hk>
2023-08-10 12:29:40 +08:00
52afd69445 Fix shop import json buttons spacing
Signed-off-by: Egor Savkin <es@m-labs.hk>
2023-08-10 12:29:40 +08:00
5d69e9cef5 Remove weird animations from backlog
Signed-off-by: Egor Savkin <es@m-labs.hk>
2023-08-10 12:29:40 +08:00
77e3ce05aa Fix unused css class
Signed-off-by: Egor Savkin <es@m-labs.hk>
2023-08-10 12:29:40 +08:00
ad91b12879 Fix react-beautiful-dnd warning in development
Signed-off-by: Egor Savkin <es@m-labs.hk>
2023-08-10 12:29:40 +08:00
0e9f822536 Fix React warnings in development
Signed-off-by: Egor Savkin <es@m-labs.hk>
2023-08-10 12:29:40 +08:00
77b3836d90 A bit more forgotten pr/pl -> pe/ps
Signed-off-by: Egor Savkin <es@m-labs.hk>
2023-08-10 12:29:40 +08:00
b3964ec2c9 shop: add Pounder (#87)
Closes #42

Reviewed-on: M-Labs/web2019#87
Co-authored-by: Egor Savkin <es@m-labs.hk>
Co-committed-by: Egor Savkin <es@m-labs.hk>
2023-08-10 12:27:06 +08:00
23d404a7ce improved crate pricing 2023-08-09 10:00:50 +08:00
752d2fb177 bye bye kam hoi 2023-07-14 10:04:02 +08:00
053d31ddce Optimize webpack usage
Signed-off-by: Egor Savkin <es@m-labs.hk>
2023-07-12 13:16:44 +08:00
ddd49b71af Fix solvespace 3d models display
Signed-off-by: Egor Savkin <es@m-labs.hk>
2023-07-12 12:46:39 +08:00
191d6a970b Fix overflown content in the cards in the resources page on tablets
Signed-off-by: Egor Savkin <es@m-labs.hk>
2023-07-11 17:43:48 +08:00
15f08a5b1a Replace removed negative margins with opposite positive ones
Signed-off-by: Egor Savkin <es@m-labs.hk>
2023-07-11 16:25:06 +08:00
61d580fda4 Bring back source map for bootstrap stylesheet
Signed-off-by: Egor Savkin <es@m-labs.hk>
2023-07-11 16:23:37 +08:00
a377ef9ab3 Fix left/right -> start/end, and other styles issues and adjustments
Signed-off-by: Egor Savkin <es@m-labs.hk>
2023-07-11 13:50:32 +08:00
76dc20c798 Fix dropdown, accordion and modal
Signed-off-by: Egor Savkin <es@m-labs.hk>
2023-07-10 17:46:45 +08:00
85429b64f8 Add webpack
Signed-off-by: Egor Savkin <es@m-labs.hk>
2023-07-10 16:32:09 +08:00
e5d754d2bc Just update dependencies, without any migration/bugfixing
Signed-off-by: Egor Savkin <es@m-labs.hk>
2023-07-10 14:55:19 +08:00
73e396a633 Fix incorrect min-height for the crate
Signed-off-by: Egor Savkin <es@m-labs.hk>
2023-07-07 16:30:52 +08:00
48eb492410 Fix incorrect vertical size of the shop body, which lead to additional scrolling panel
Signed-off-by: Egor Savkin <es@m-labs.hk>
2023-07-05 17:50:41 +08:00
4141e5b315 add 8453 Thermostat EEM to the shop and control loops (#71)
Co-authored-by: Egor Savkin <es@m-labs.hk>
Co-committed-by: Egor Savkin <es@m-labs.hk>
2023-07-05 12:36:06 +08:00
153 changed files with 10500 additions and 12980 deletions

View File

@ -12,14 +12,29 @@ Clone the project:
Install Zola.
Start:
Start with targeting `m-labs.hk` domain:
```
zola serve
```
To update the .min.js and .jsx file:
Environmental variable `DOMAINNAME` can be specified to [substitute links on the website](#domain-handling).
To build the .bundle.js from .jsx files:
```
nix-shell -p nodejs --run "npm run build"
nix-shell -p nodejs
npm install
npm run build
```
Development builds are also available. `npm run build-dev` to re/build once, or `npm run start-dev` for incremental
continuous builds as source files change.
## Domain handling
Environmental variable `DOMAINNAME` controls only the following links on the website:
* email `mailto:` links
* hook for the RFQ server (`window.API_RFQ`) variable
If absent, `DOMAINNAME` defaults to `m-labs.hk`.

View File

@ -3,7 +3,6 @@ title = "M-Labs"
description = "Open tools for open physics."
compile_sass = true
insert_anchor_links = true
build_search_index = false
[markdown]

View File

@ -18,4 +18,4 @@ Selling drinks is not our main business and only a service we do to other Club M
* In case of any dispute, the seller is always right.
Contact: sb@m-****.hk
Contact: {{ email(address="sb") }}

112
content/about-us/faq.md Normal file
View File

@ -0,0 +1,112 @@
+++
title = "FAQ"
weight = 3
template = "page.html"
+++
##### Why are you in Hong Kong?
Low taxes, efficient infrastructure, no import/export fees and red tape for most products including high-tech items, good quality of life.
##### Why are you in Manila?
For the convenience of our customers who may be discouraged from doing business with companies registered in Hong Kong.
##### Where will my Sinara order be manufactured and where will it ship from?
M-Labs can manufacture Sinara hardware orders in Hong Kong, or, upon request, in Manila, Philippines. Additional fees, minimum quantities, and/or extended lead times may apply to orders to be made in the Philippines. Shipping is from the manufacturing place.
##### Do I need to pay additional import fees?
M-Labs ships orders according to FCA or DAP terms as defined by the International Commercial Terms (Incoterms<sup>®</sup>) published by the International Chamber of Commerce, edition 2020.
According to these terms, you are responsible for resolving problems created by customs at the destination country or territory, at your own expense.
If you are a credit customer (eligible for Net 15 or Net 30 payment), upon your request and for your convenience, we may ask UPS to deal with customs on your behalf and we will add the fees to your final invoice.
Import fees are determined by customs at the time of import in the destination country or territory, and are outside our control.
##### My institution cannot import your products. Do you have a distributor in my country?
Typical countries where this situation happens and suitable distributor contacts are as follows:
* China (mainland): kitty-zheng@kehua-trade.com
* Japan: hishida@symphotony.com or h_yamamoto@autex-inc.co.jp
* India: sale.sannidhi@gmail.com
* Thailand: info@irct.co.th or thayika@ryts-instruments.co.th
You are responsible for paying distributor fees and we do not grant discounts on the basis of requiring a distributor. On our side, we do not mandate the use of any distributor and we can ship directly to you or via another distributor of your choosing not listed here. Generally, you may solve the import problems created by customs and other bureaucracy in any way that you deem acceptable.
##### How will my order be shipped?
M-Labs ships with UPS by default, and we also offer FedEx or DHL shipping for an additional fee. We can ship on your courier account and you may also arrange your own pickup and shipping. For orders exceeding USD 200.00, there is no handling fee.
##### Can I have a discount?
M-Labs offers discounts in the following cases:
* 10% discount plus free DAP shipping if the research supported by our equipment is made public and exclusively published in a non-predatory scientific journal. A non-predatory journal is defined as an open access journal with an article processing fee of USD 500.00 or less.
* Volume discounts (applies to new orders and not retroactively, volume is determined over the 365 days prior to the new order, the new order is included in the amount compared against the threshold):
- 2% discount with an order volume exceeding USD 100,000.00.
- 4% discount with an order volume exceeding USD 250,000.00.
* Use of our equipment exclusively in jurisdictions outside the World Bank's "High Income" group, and where the R&D expenditure is less than 2% of GDP as determined by the World Bank, and which do not possess nuclear weapons.
* Equipment with cosmetic or other minor damage - please enquire.
* Advanced hobbyist and amateur use. Please describe your project when applying for the discount and provide supporting evidence (e.g. publications of past projects, personal website, copy of amateur radio license, ...).
We reserve the right of final decision regarding discount eligibility and amount.
##### I am on a really tight budget, what can I do?
You can build a useful ARTIQ system and spend very little money by running the open-source code on mass-produced low-cost electronics that were not made for this purpose. For example, in theory the [Colorlight-75E](https://hackaday.com/2020/01/24/new-part-day-led-driver-is-fpga-dev-board-in-disguise/) and [EBAZ4205](https://github.com/xjtuecho/EBAZ4205) can be used as core devices, and the Taobao shop [ZONRI](https://world.taobao.com/dianpu/73267337.htm) sells many inexpensive boards that can be useful as I/O peripherals such as DDS and data converters.
This is not a turn-key solution; experience with electronics, FPGA, and software development is required, and you will have to spend some time studying the code, porting it to these boards, writing drivers, and building hardware adapters.
See also [193THz.com](https://193THz.com) for ideas about low-cost homebrew laser systems.
##### Do you have a warranty?
For most products, we offer a 1-year warranty against manufacturing defects.
##### What should I do if I need technical support, or there is a problem with my order?
Please contact us at helpdesk@m-labs.hk.
If you have contacted the helpdesk and your issue cannot be satisfactorily resolved, then contact sb@m-labs.hk or text +852 65873703. Mention your helpdesk ticket number.
##### What are your payment terms?
For most established institutions (determined at our discretion), we offer Net 15 and Net 30 terms after delivery. Please enquire from your institutional email address to help us determine your eligibility for these terms.
For all others, payment is due 100% in advance before shipment.
Letters of credit are not an option.
##### What currency can I pay in?
We accept all major currencies including USD, EUR, RMB, GBP, BTC and XMR.
##### Can I pay by credit card?
Yes, however processing credit cards is expensive and you need to cover the costs. 4\% card processing fee applies for payment by credit card in Hong Kong dollars. 7\% card processing and exchange fee applies for payment by credit card in US dollars.
##### We are a distributor. Can we have exclusive rights to your products?
Exclusivity is subject to contractual minimum order volumes determined at our discretion, but generally exceeding USD 300,000.00 per year for most countries.
##### What is m-labs-intl.com?
[m-labs-intl.com](https://m-labs-intl.com) is a mirror site operated by us and hosted in the USA by Hetzner. It is useful in situations where your institution or local authorities block access to Hong Kong websites (.hk domains and/or Hong Kong IP addresses). To our knowledge, no internet blocking is done on the Hong Kong side other than through ISP DNS resolvers, which we do not use and which does not affect your access to our website.
Some features are currently not available on the mirror site, and you may use a VPN or another circumvention measure of your choice to access these as required.
##### Why are you ignoring my emails?
If you are using the email server of a large institution, be aware that some may silently drop emails sent to .hk email addresses and/or to servers located in Hong Kong.
Try sending your message from your personal address (for example Gmail, Outlook and Yahoo do not block our email system), or to the same email address at the m-labs-intl.com domain (for example, sales@m-labs-intl.com or sb@m-labs-intl.com).
Alternatively, you may use our [contact phone numbers](../office/), which are also registered with several popular messaging apps.
##### We are a recruitment firm. Can we help you find talent?
No.

View File

@ -73,7 +73,7 @@ We post specific vacancies on job boards such as Indeed.com, but if you think yo
{% layout_centered_content(min_width=true) %}
Our main office is located in the center of Hong Kong, a cosmopolitan city with world-class infrastructure, many cultural and social events, and <a href="https://www.discoverhongkong.com/eng/see-do/great-outdoors/hikes/index.jsp" rel="noopener noreferrer" target="_blank">beautiful natural scenery</a>. It has a separate system from mainland China, where, for example, communications are unrestricted, taxes are low, and customs tariffs virtually inexistent. Hong Kong is located next to Shenzhen, a city with <a href="https://www.wired.co.uk/video/shenzhen-full-documentary" rel="noopener noreferrer" target="_blank">a bustling tech scene</a>, and where many of the world's electronic gadgets are designed and manufactured.
Our main office is located in the center of Hong Kong, a cosmopolitan city with world-class infrastructure, many cultural and social events, and <a href="https://www.discoverhongkong.com/eng/see-do/great-outdoors/hikes/index.jsp" rel="noopener noreferrer" target="_blank">beautiful natural scenery</a>. It has a separate system from mainland China, where, for example, communications are unrestricted, taxes are low, and customs tariffs virtually inexistent. Hong Kong is located next to Shenzhen, a city with <a href="https://www.wired.com/video/watch/shenzhen-the-silicon-valley-of-hardware-full-documentary-future-cities-wired" rel="noopener noreferrer" target="_blank">a bustling tech scene</a>, and where many of the world's electronic gadgets are designed and manufactured.
We also have a location in Manila, Philippines.
@ -83,5 +83,5 @@ Now is your chance to work on top-notch science and technology projects that get
{% layout_centered_content() %}
##### Contact us at jobs@m-\*\*\*\*.hk or jobs@m-\*\*\*\*.ph!
##### Contact us at {{ email(address="jobs") }} or [jobs@m-labs.ph](mailto:jobs@m-labs.ph)!
{% end %}

View File

@ -8,8 +8,6 @@ template = "page.html"
{% layout_div(css="col-12 col-md-6") %}
##### Main office
**M-Labs Limited**
Unit 7, 21/F Kodak House II, 39 Healthy Street East, North Point, Hong Kong
@ -22,13 +20,11 @@ In Chinese: 北角健康東街39號 柯達大廈二座 21樓7號房 右邊210
{% layout_div(css="col-12 col-md-6") %}
##### Public transport
MTR: Island Line, Quarry Bay, exit C
**MTR:** Island Line, Quarry Bay, exit C
Tramway: Healthy Street East
**Tramway:** Healthy Street East
**Bus:** Kodak House / North Point Government Office / North Point Fire Station / Healthy Village; King's Road
Bus: Kodak House / North Point Government Office / North Point Fire Station / Healthy Village; King's Road
{% end %}
@ -37,33 +33,3 @@ In Chinese: 北角健康東街39號 柯達大廈二座 21樓7號房 右邊210
<img class="img-fluid" src="/images/kodakview2.jpg" height="250" alt="view">
<small>Photo: Mateusz Wójcik</small>
##### Workshop
{% layout_text_img(src="images/map@2x.jpg", alt="", textleft=true, shadow=false) %}
G/F Kam Hoi Mansion, 31 Pan Hoi Street, Quarry Bay, Hong Kong
This is part of the building complex numbered 15-53A on the street entrance.
In Chinese: 香港鰂魚涌濱海街31號金海大廈G字樓
Public transport to the workshop:
MTR: Island Line, Quarry Bay, exit A
Tramway: Mount Parker Road
Bus: Sunway Gardens / Westlands Road / Pan Hoi Street
Those transportation options take you to King's Road, then see the directions below.
{% end %}
<div class="row">
{{ layout_flex_office_direction() }}
</div>

View File

@ -19,7 +19,7 @@ The Sinara 8452 DSP is a CPU-based dual-channel digital signal processing platfo
- connectors for optional analog front-end (AFE) module
- IDC connectors for BNC-IDC/SMA-IDC extension for digital IO and aux analog inputs and outputs
It can be used as a general-purpose PID controller. Several AFE extensions are under development including high current power supply for magnets.
It can be used as a general-purpose PID controller. Several AFE extensions are under development including high current power supply for magnets and 2-channel Pound Drever Hall (PDH) lock generator.
<a href="https://github.com/sinara-hw/stabilizer/wiki" target="_blank" rel="noopener noreferrer">More information</a>
@ -62,7 +62,7 @@ The <a href="https://github.com/quartiq/stabilizer" target="_blank" rel="noopene
<div class="col-12 col-md-4">
<p>
To purchase this controller, email sales@m-***s.hk. We also offer firmware customizations and development of new features. Note that features that are not implemented in the open source code above (e.g. control from Kasli) are not supported unless purchased separately.
To purchase this controller, email {{ email(address="sales") }}. We also offer firmware customizations and development of new features. Note that features that are not implemented in the open source code above (e.g. control from Kasli) are not supported unless purchased separately.
</p>
</div>
@ -96,7 +96,7 @@ Specifications:
{% layout_text_img(src="images/side-min.png", textleft=true, shadow=false) %}
{% layout_text_img(src="images/Thermostat_EEM@2x.png", popup="images/origin/thermostat_eem.jpg", alt="", textleft=true, shadow=false) %}
##### Sinara 8453 Thermostat EEM

View File

@ -6,6 +6,8 @@ template = "page.html"
[extra]
+++
{% layout_funding(position="center") %}
The free and open dissemination of methods and results is central to scientific progress.
The ARTIQ and Sinara authors, contributors, and supporters consider the free and open exchange of scientific tools to be equally important and have chosen the licensing terms of ARTIQ and Sinara accordingly. ARTIQ, including its gateware, the firmware, and the ARTIQ tools and libraries are licensed as LGPLv3+. The Sinara hardware designs are licensed under CERN OHL.
@ -13,68 +15,105 @@ This ensures that a user of ARTIQ or Sinara hardware designs obtains broad right
ARTIQ and the related components that we are developing ([Migen/MiSoC](/gateware/migen), [nMigen](/gateware/nmigen), [smoltcp](/software/smoltcp), [minimq](https://github.com/quartiq/minimq), [zynq-rs](https://git.m-labs.hk/m-labs/zynq-rs), [SiPyCo](https://github.com/m-labs/sipyco), [RayOpt](https://github.com/quartiq/rayopt), [WFVM](https://git.m-labs.hk/m-labs/wfvm), ...) need to be kept on a sound financial basis. We have been relying on a combination of [hardware sales](../place-order), sponsorships, and grants.
##### Sponsors
{% end %}
We acknowledge support from our partners below. Please get in touch (sales@m-\*\*\*.hk) if you also want to move ARTIQ forward!
{% layout_funding(position="center", title="Sponsors") %}
###### Platinum level
We acknowledge support from our partners below. Please get in touch ({{ email(address="sales") }}) if you also want to move ARTIQ forward!
[![log nist](/images/logo_nist.png)](https://www.nist.gov/pml/time-and-frequency-division/ion-storage)
{% end %}
#### Platinum level
{% layout_funding(logo="/images/logo_nist.png", logo_link="https://www.nist.gov/pml/time-and-frequency-division/ion-storage", logo_alt="logo nist", title="NIST", position="left", icon="/images/icons/diamond.svg") %}
ARTIQ was initiated by the [Ion Storage Group](https://www.nist.gov/pml/time-and-frequency-division/ion-storage) at NIST, who provided valuable technical insight as well as financial support to develop the first version of the ARTIQ software and gateware targeting the KC705 development kit. This included some FPGA SoC libraries such as a SDRAM controller and PHYs, the first two iterations of the ARTIQ runtime including the development of [smoltcp](/software/smoltcp), the RTIO infrastructure and PHYs, the ARTIQ-Python LLVM-based compiler, RTIO DMA, the ARTIQ dashboard and browser, the ARTIQ master, and several controllers. They also supported the more recent ARTIQ port to Zynq, targeting the ZC706 development kit, and enabling ARTIQ-Python kernels to take advantage of the 1GHz CPU in the core device; as well as matrix and trigonometric function support in ARTIQ-Python kernels.
<small>*Disclaimer: NIST and the United States government are not providing an endorsement of ARTIQ.*</small>
[![logo oxford](/images/logo_oxford.png)](https://www2.physics.ox.ac.uk/research/ion-trap-quantum-computing-group)
{% end %}
{% layout_funding(logo="/images/logo_oxford.png", logo_link="https://www2.physics.ox.ac.uk/research/ion-trap-quantum-computing-group", logo_alt="logo oxford", title="Oxford", icon="/images/icons/diamond.svg", position="right") %}
The [University of Oxford](https://www2.physics.ox.ac.uk/research/ion-trap-quantum-computing-group) funded major improvements to the RTIO infrastructure: the Distributed RTIO (DRTIO) system that allows clock synchronization and RTIO command transfer between FPGAs using cost-effective high-speed serial links (e.g. over fiber optics), and changes to the RTIO architecture to improve scalability. They also funded the Sinara Sampler hardware and software, the [SU-Servo](https://m-labs.hk/artiq/manual-beta/core_drivers_reference.html?highlight=suservo#artiq.coredevice.suservo.SUServo) integrated laser intensity servo, parts of Urukul and Zotino, firmware development on the Sinara Thermostat, the Kasli v2.0 ARTIQ support, the Fastino ARTIQ support, parts of the Sinara Phaser gateware and software development, and significant parts of the Booster RF amplifier.
[![logo wut](/images/logo_wut.png)](http://www.ise.pw.edu.pl)
{% end %}
{% layout_funding(logo="/images/logo_wut.png", logo_link="http://www.ise.pw.edu.pl", logo_alt="logo wut", title="Warsaw University of Technology", icon="/images/icons/diamond.svg", position="left") %}
[Warsaw University of Technology](http://www.ise.pw.edu.pl) contributed most of the hardware designs and prototypes for the Sinara ecosystem.
###### Gold level
{% end %}
[![logo oregon](/images/logo_oregon.png)](https://ions.uoregon.edu/)
#### Gold level
{% layout_funding(logo="/images/logo_oregon.png", logo_link="https://ions.uoregon.edu/", logo_alt="logo oregon", title="University of Oregon", icon="/images/icons/gold-badge.svg", position="right") %}
The [University of Oregon](https://ions.uoregon.edu/) funded a large part of the Sinara Phaser gateware and software development, as well as firmware for the Pounder PDH/phase lock signal generator for Stabilizer.
[![logo duke](/images/duke_brown.svg)](https://brownlab.pratt.duke.edu/)
{% end %}
{% layout_funding(logo="/images/duke_brown.svg", logo_link="https://brownlab.pratt.duke.edu/", logo_alt="logo duke brown", title="Brown Lab at Duke University", icon="/images/icons/gold-badge.svg", position="left") %}
The [Brown Lab at Duke University](https://brownlab.pratt.duke.edu/) funded the migration of ARTIQ softcore platforms to the RISC-V architecture, memory protection support, and floating point unit support.
[![logo arl](/images/logo_arl_devcom.png)](http://brittonlab.umd.edu/)
{% end %}
{% layout_funding(logo="/images/logo_arl_devcom.png", logo_link="http://brittonlab.umd.edu/", logo_alt="logo arl", title="Army Research Lab", icon="/images/icons/gold-badge.svg", position="right") %}
The [Army Research Lab](http://brittonlab.umd.edu/) funded the SAWG high-throughput digital waveform generator, as well as ARTIQ support for the Sayma and Metlino boards.
{% end %}
###### Silver level
#### Silver level
[![logo quest](/images/logo_luh.png)](https://www.quest-lfs.uni-hannover.de/)
{% layout_funding(logo="/images/logo_luh.png", logo_link="https://www.quest-lfs.uni-hannover.de/", logo_alt="logo hannover", title="QUEST/Uni Hannover", icon="/images/icons/silver-badge.svg", position="left") %}
[QUEST/Uni Hannover](https://www.quest-lfs.uni-hannover.de/) funded gateware and software support for the Grabber EEM, partial Mirny support, part of the Fastino development, and part of Urukul synchronization support.
[![logo ptb](/images/logo_ptb.png)](http://ptb.de)
{% end %}
{% layout_funding(logo="/images/logo_ptb.png", logo_link="http://ptb.de", logo_alt="logo ptb", title="PTB", icon="/images/icons/silver-badge.svg", position="right") %}
PTB funded the development of lock-in amplifier support for the Sinara Stabilizer, as well as part of Urukul synchronization support.
[![logo uwisc](/images/logo_uwisc.png)](http://hexagon.physics.wisc.edu/)
{% end %}
{% layout_funding(logo="/images/logo_uwisc.png", logo_link="http://hexagon.physics.wisc.edu/", logo_alt="logo uwisc", title="University of Wisconsin-Madison", icon="/images/icons/silver-badge.svg", position="left") %}
The [University of Wisconsin-Madison](http://hexagon.physics.wisc.edu/) funded the development of Urukul RAM mode support.
{% end %}
{% layout_funding(title="MIT", icon="/images/icons/silver-badge.svg", position="right") %}
[MIT](http://web.mit.edu/~cua/www/quanta/) funded parts of the Sinara Phaser gateware and software development.
[![logo hu](/images/logo_hu.png)](https://www.physik.hu-berlin.de/en/qom/people/qom-group/markus/view)
{% end %}
{% layout_funding(logo="/images/logo_hu.png", logo_link="https://www.physik.hu-berlin.de/en/qom/people/qom-group/markus/view", logo_alt="logo hu", title="Humboldt University of Berlin", icon="/images/icons/silver-badge.svg", position="left") %}
[Humboldt University of Berlin](https://www.physik.hu-berlin.de/en/qom/people/qom-group/markus/view) funded [prototype digital spectroscopy modulation/demodulation firmware](https://github.com/quartiq/queenmod), which is part of the "Optical quantum technologies on nanosatellites" (QUEEN) project.
##### Grants
{% end %}
{% layout_funding(position="center", title="Grants") %}
Parts of ARTIQ and Sinara have been developed through the participation of our sister company QUARTIQ GmbH in European research grant programmes.
[![logo opticlock](/images/logo_opticlock.png)](https://www.opticlock.de/)
{% end %}
{% layout_funding(logo="/images/logo_opticlock.png", logo_link="https://www.opticlock.de/", logo_alt="logo opticlock", title="Opticlock", icon="/images/icons/grant.svg", position="left") %}
The BMBF project [Opticlock](https://www.opticlock.de/) developed an optical clock as a replacement for a hydrogen maser, based on a single ytterbium ion captured and laser-cooled in an ion trap. It helped fund the development of the Kasli, Urukul, Zotino and Sampler modules.
![logo aiartiq](/images/logo_aiartiq.png)
{% end %}
{% layout_funding(logo="/images/logo_aiartiq.png", logo_link="https://www.opticlock.de/", logo_alt="logo aiartiq", title="AI-ARTIQ", icon="/images/icons/grant.svg", position="right") %}
AI-ARTIQ develops a control platform for laser sources and atom interferometer-based quantum sensors.
{% end %}

View File

@ -1,103 +1,15 @@
+++
title = "Publications"
weight = 4
template = "page.html"
template = "publications.html"
[extra]
data = "content/experiment-control/publications.yaml"
+++
##### This page lists publications about experiments performed using ARTIQ, or which otherwise cite ARTIQ.
- **Fast quantum logic gates with trapped-ion qubits**<br />
V. M. Schäfer, C. J. Ballance, K. Thirumalai, L. J. Stephenson, T. G. Ballance, A. M. Steane & D. M. Lucas<br />
[Nature volume 555, pages75-78(2018)](https://www.nature.com/articles/nature25737) | [arXiv](https://arxiv.org/pdf/1709.06952.pdf)
- **Programming languages and compiler design for realistic quantum hardware**<br />
Frederic T. Chong, Diana Franklin & Margaret Martonosi<br />
[Nature volume 549, pages180-187(2017)](https://www.nature.com/articles/nature23459)
- **High-rate, high-fidelity entanglement of qubits across an elementary quantum network**<br />
L.J. Stephenson, D.P. Nadlinger, B.C. Nichol, S. An, P. Drmota, T.G. Ballance, K. Thirumalai, J.F. Goodwin, D.M. Lucas & C.J. Ballance<br />
[Phys. Rev. Lett. 124, 110501](https://journals.aps.org/prl/abstract/10.1103/PhysRevLett.124.110501) | [arXiv](https://arxiv.org/abs/1911.10841)
- **Device-Independent Quantum Key Distribution**<br />
D. P. Nadlinger, P. Drmota, B. C. Nichol, G. Araneda, D. Main, R. Srinivas, D. M. Lucas, C. J. Ballance, K. Ivanov, E. Y-Z. Tan, P. Sekatski, R. L. Urbanke, R. Renner, N. Sangouard & J-D. Bancal<br />
[arXiv](https://arxiv.org/abs/2109.14600)
- **Universal Graph-Based Scheduling for Quantum Systems**<br />
L. Riesebos, B. Bondurant, & Kenneth R. Brown<br />
[IEEE Micro, Volume: 41, Issue: 5, Sept.-Oct. 1 2021](https://doi.org/10.1109/MM.2021.3094968)<br />
- **Functional simulation of real-time quantum control software**<br />
Leon Riesebos & Kenneth R. Brown<br />
[QCE2022](https://doi.org/10.1109/QCE53715.2022.00076) (Best Paper Award) | [arXiv](https://arxiv.org/abs/2210.14364)<br />
- **Modular software for real-time quantum control systems**<br />
Leon Riesebos, Brad Bondurant, Jacob Whitlow, Junki Kim, Mark Kuzyk, Tianyi Chen, Samuel Phiri, Ye Wang, Chao Fang, Andrew Van Horn, Jungsang Kim & Kenneth R. Brown<br />
[QCE2022](https://doi.org/10.1109/QCE53715.2022.00077) | [arXiv](https://arxiv.org/abs/2210.14341)<br />
- **Fault-Tolerant Operation of a Quantum Error-Correction Code**<br />
Laird Egan, Dripto M. Debroy, Crystal Noel, Andrew Risinger, Daiwei Zhu, Debopriyo Biswas, Michael Newman, Muyuan Li, Kenneth R. Brown, Marko Cetina & Christopher Monroe<br />
[arXiv](https://arxiv.org/abs/2009.11482)
- **Probing Qubit Memory Errors at the Part-per-Million Level**<br />
M.A. Sepiol, A.C. Hughes, J.E. Tarlton, D.P. Nadlinger, T.G. Ballance, C.J. Ballance, T.P. Harty, A.M. Steane, J.F. Goodwin & D.M. Lucas<br />
[Phys. Rev. Lett. 123, 110503](https://journals.aps.org/prl/abstract/10.1103/PhysRevLett.123.110503) | [arXiv](https://arxiv.org/abs/1905.06878)
- **Quantum amplification of mechanical oscillator motion**<br />
S. C. Burd, R. Srinivas, J. J. Bollinger, A. C. Wilson, D. J. Wineland, D. Leibfried, D. H. Slichter & D. T. C. Allcock<br />
[Science, Vol 364, Issue 6446, 21 June 2019](https://science.sciencemag.org/content/364/6446/1163)
- **State Readout of a Trapped Ion Qubit Using a Trap-Integrated Superconducting Photon Detector**<br />
S. L. Todaro, V. B. Verma, K. C. McCormick, D. T. C. Allcock, R. P. Mirin, D. J. Wineland, S. W. Nam, A. C. Wilson, D. Leibfried & D. H. Slichter<br />
[arXiv](https://arxiv.org/abs/2008.00065)
- **Trapped-Ion Spin-Motion Coupling with Microwaves and a Near-Motional Oscillating Magnetic Field Gradient**<br />
R. Srinivas, S.C. Burd, R.T. Sutherland, A.C. Wilson, D.J. Wineland, D. Leibfried, D.T.C. Allcock & D.H. Slichter<br />
[Phys. Rev. Lett. 122, 163201](https://journals.aps.org/prl/abstract/10.1103/PhysRevLett.122.163201) | [arXiv](https://arxiv.org/abs/1812.02098.pdf)
- **Speed, retention loss, and motional heating of atoms in an optical conveyor belt**<br />
G. T. Hickman & M. Saffman<br />
[Phys. Rev. A 101, 063411](https://journals.aps.org/pra/abstract/10.1103/PhysRevA.101.063411) | [arXiv](https://arxiv.org/abs/2004.04848)
- **A hybrid ion-atom trap with integrated high resolution mass spectrometer**<br />
S. Jyothi, Kisra N. Egodapitiya, Brad Bondurant, Zhubing Jia, Eric Pretzsch, Piero Chiappina, Gang Shu & Kenneth R. Brown<br />
[Review of Scientific Instruments 90, 103201 (2019)](https://aip.scitation.org/doi/abs/10.1063/1.5121431) | [arXiv](https://arxiv.org/abs/1907.10455)
- **Photon-mediated charge-exchange reactions between <sup>39</sup>K atoms and <sup>40</sup>Ca<sup>+</sup> ions in a hybrid trap**<br />
Hui Li, S. Jyothi, Ming Li, Jacek Klos, Alexander Petrov, Kenneth R Brown & Svetlana Kotochigova<br />
[Phys. Chem. Chem. Phys., 2020,22, 10870-10881](https://pubs.rsc.org/en/content/articlelanding/2020/cp/d0cp01131b) | [arXiv](https://arxiv.org/abs/2003.03430)
- **Spin Readout Techniques of the Nitrogen-Vacancy Center in Diamond**<br />
David A. Hopper, Henry J. Shulevitz, & Lee C. Bassett<br />
[Micromachines 2018, 9(9), 437](https://www.mdpi.com/2072-666X/9/9/437) | [arXiv](https://arxiv.org/abs/1809.05237)
- **High-accuracy inertial measurements with cold-atom sensors**<br />
Remi Geiger, Arnaud Landragin, Sébastien Merlet & Franck Pereira Dos Santos<br />
[AVS Quantum Sci. 2, 024702 (2020)](https://avs.scitation.org/doi/10.1116/5.0009093) | [arXiv](https://arxiv.org/abs/2003.12516)
- **Dynamical low-noise microwave source for cold atom experiments**<br />
Bernd Meyer, Alexander Idel, Fabian Anders, Jan Peise & Carsten Klempt<br />
[arXiv](https://arxiv.org/abs/2003.10989)
- **Ion-trapping lab setup for quantum information experiments**<br />
Alexander Quinn, Jeremy Metzner, Daniel Moore, Vikram Sandhu, Dave Wineland, David Allcock<br />
[DAMOP20 poster](https://meetings.aps.org/Meeting/DAMOP20/Session/K01.113)
- **Short Time Fourier Transform Pulse Generator for Trapped Ion Quantum Gates**<br />
Norman Krackow<br />
[local copy](/thesis_nkrackow.pdf)
- **Precise PID controller for quantum applications**<br />
Jakub Matyas<br />
[Warsaw University of Technology, Engineer's thesis](https://repo.pw.edu.pl/info/bachelor/WUTe90de3461b53456c9d63c55d80d34220/) | [local copy](/JMatyas_inz_v6.pdf)
- **Controller module for real-time quantum applications**<br />
Paweł Kulik<br />
[Warsaw University of Technology, Masters's diploma thesis](https://repo.pw.edu.pl/info/master/WUT6212c3c3cdcd40ea9095f4ead6482596/) | [local copy](/pawel_kulik_kasli_thesis_2019_compressed.pdf)
- **Driver module for quantum computer experiments: Kasli**<br />
Paweł Kulik, Grzegorz Kasprowicz and Michał Gąska<br />
[Proceedings Volume 10808, Photonics Applications in Astronomy, Communications, Industry, and High-Energy Physics Experiments 2018](https://doi.org/10.1117/12.2501709) | [slides](https://raw.githubusercontent.com/wiki/sinara-hw/meta/talks/pawel_kasli_mgr2.pdf)
- **Urukul open-source frequency synthesizer module for quantum physics**<br />
Grzegorz Kasprowicz, Thomas Harty, Sébastien Bourdeauducq, Robert Jördens, David Allcock, David Nadlinger, Joseph Britton, Ana Sotirova, Dorota Nowicka<br />
[International Journal of Electronics and Telecommunications, Vol 68, No 1 (2022)](http://ijet.pl/index.php/ijet/issue/view/58)
- **Control system for ion Penning traps at the AEgIS experiment at CERN**<br />
Dorota Nowicka<br />
[TIPP 2021 Poster](https://indico.cern.ch/event/981823/contributions/4295432/attachments/2250078/3816845/poster_445.pdf)
- **Integrated photonic control of trapped ion qubits**<br />
Jules Stuart, Dave Reens, Cheri Sorace-Agaskar, Dave Kharas, Jeremy Sage, John Chiaverini<br />
[NY CREATES presentation](https://ny-creates.org/wp-content/uploads/Niffenegger_NY_CREATES_04_22_2021.pdf)
- **Sayma: Agile RF for Coherent Quantum Control Using ARTIQ**<br />
Joseph W. Britton, David T. C. Allcock, Chris Ballance, Tom P. Harty, Robert Jordens, Greg Kasprowicz, Pawel Kulik, Daniel H. Slichter, Weida Zhang, Sebastien Bourdeauducq<br />
APS Division of Atomic and Molecular Physics Meeting 2019, abstract id.E01.164
- **Programowalny sterownik siłownika piezoelektrycznego**<br />
Adam Kołodyński<br />
Warsaw University of Technology, Engineer's thesis | [local copy](/AdamKolodynski.pdf)
- **Microwave synthesizer for driving ion traps in quantum computing**<br />
Krzysztof Belewicz<br />
Warsaw University of Technology, Bachelor's dipoma thesis | [local copy](/Krzysztof_Belewicz_V1.1.pdf)
- **Wielokanałowy moduł sterujący pułapką jonową w standardzie MicroTCA.4**<br />
Tomasz Przywózki<br />
Warsaw University of Technology, Master's thesis | [local copy](/TomaszPrzywozki_v3.pdf)
To have your publication listed here, write to sb@m-l\*\*\*.hk.

View File

@ -0,0 +1,410 @@
- title: "Fast quantum logic gates with trapped-ion qubits"
authors: "V.M. Schäfer, C.J. Ballance, K. Thirumalai, L.J. Stephenson, T.G. Ballance, A.M. Steane & D.M. Lucas"
links:
- name: "Nature volume 555, pages75-78(2018)"
path: "https://www.nature.com/articles/nature25737"
- name: "arXiv"
path: "https://arxiv.org/pdf/1709.06952.pdf"
- title: "Experimental quantum key distribution certified by Bell's theorem"
authors: "D.P. Nadlinger, P. Drmota, B.C. Nichol, G. Araneda, D. Main, R. Srinivas, D.M. Lucas, C.J. Ballance, K. Ivanov, E. Y-Z. Tan, P. Sekatski, R.L. Urbanke, R. Renner, N. Sangouard, J-D. Bancal"
links:
- name: "Nature 607, 682686 (2022)"
path: "https://www.nature.com/articles/s41586-022-04941-5"
- name: "arXiv"
path: "https://arxiv.org/abs/2109.14600"
- title: "Programming languages and compiler design for realistic quantum hardware"
authors: "Frederic T. Chong, Diana Franklin & Margaret Martonosi"
links:
- name: "Nature volume 549, pages180-187(2017)"
path: "https://www.nature.com/articles/nature23459"
- title: "High-rate, high-fidelity entanglement of qubits across an elementary quantum network"
authors: "L.J. Stephenson, D.P. Nadlinger, B.C. Nichol, S. An, P. Drmota, T.G. Ballance, K. Thirumalai, J.F. Goodwin, D.M. Lucas & C.J. Ballance"
links:
- name: "Phys. Rev. Lett. 124, 110501"
path: "https://journals.aps.org/prl/abstract/10.1103/PhysRevLett.124.110501"
- name: "arXiv"
path: "https://arxiv.org/abs/1911.10841"
- title: "Device-Independent Quantum Key Distribution"
authors: "D.P. Nadlinger, P. Drmota, B.C. Nichol, G. Araneda, D. Main, R. Srinivas, D.M. Lucas, C.J. Ballance, K. Ivanov, E.Y-Z. Tan, P. Sekatski, R.L. Urbanke, R. Renner, N. Sangouard & J-D. Bancal"
links:
- name: "arXiv"
path: "https://arxiv.org/abs/2109.14600"
- title: "Universal Graph-Based Scheduling for Quantum Systems"
authors: "L. Riesebos, B. Bondurant, & Kenneth R. Brown"
links:
- name: "IEEE Micro, Volume: 41, Issue: 5, Sept.-Oct. 1 2021"
path: "https://doi.org/10.1109/MM.2021.3094968"
- title: "Functional simulation of real-time quantum control software"
authors: "Leon Riesebos & Kenneth R. Brown"
links:
- name: "QCE2022 (Best Paper Award)"
path: "https://doi.org/10.1109/QCE53715.2022.00076"
- name: "arXiv"
path: "https://arxiv.org/abs/2210.14364"
- title: "Modular software for real-time quantum control systems"
authors: "Leon Riesebos, Brad Bondurant, Jacob Whitlow, Junki Kim, Mark Kuzyk, Tianyi Chen, Samuel Phiri, Ye Wang, Chao Fang, Andrew Van Horn, Jungsang Kim & Kenneth R. Brown"
links:
- name: "QCE2022"
path: "https://doi.org/10.1109/QCE53715.2022.00077"
- name: "arXiv"
path: "https://arxiv.org/abs/2210.14341"
- title: "Fault-Tolerant Operation of a Quantum Error-Correction Code"
authors: "Laird Egan, Dripto M. Debroy, Crystal Noel, Andrew Risinger, Daiwei Zhu, Debopriyo Biswas, Michael Newman, Muyuan Li, Kenneth R. Brown, Marko Cetina & Christopher Monroe"
links:
- name: "arXiv"
path: "https://arxiv.org/abs/2009.11482"
- name: "Nature 598, 281286 (2021)"
path: "https://www.nature.com/articles/s41586-021-03928-y"
- title: "Probing Qubit Memory Errors at the Part-per-Million Level"
authors: "M.A. Sepiol, A.C. Hughes, J.E. Tarlton, D.P. Nadlinger, T.G. Ballance, C.J. Ballance, T.P. Harty, A.M. Steane, J.F. Goodwin & D.M. Lucas"
links:
- name: "Phys. Rev. Lett. 123, 110503"
path: "https://journals.aps.org/prl/abstract/10.1103/PhysRevLett.123.110503"
- name: "arXiv"
path: "https://arxiv.org/abs/1905.06878"
- title: "Quantum amplification of mechanical oscillator motion"
authors: "S.C. Burd, R. Srinivas, J.J. Bollinger, A.C. Wilson, D.J. Wineland, D. Leibfried, D.H. Slichter & D.T.C. Allcock"
links:
- name: "Science, Vol 364, Issue 6446, 21 June 2019"
path: "https://science.sciencemag.org/content/364/6446/1163"
- title: "Quantum amplification of boson-mediated interactions"
authors: "S.C. Burd, R. Srinivas, H.M. Knaack, W. Ge, A.C. Wilson, D.J. Wineland, D. Leibfried, J.J. Bollinger, D.T.C. Allcock, D.H. Slichter"
links:
- name: "Nat. Phys. 17, 898902 (2021)"
path: "https://www.nature.com/articles/s41567-021-01237-9"
- name: "arXiv"
path: "https://arxiv.org/abs/2009.14342"
- title: "State Readout of a Trapped Ion Qubit Using a Trap-Integrated Superconducting Photon Detector"
authors: "S.L. Todaro, V.B. Verma, K.C. McCormick, D.T.C. Allcock, R.P. Mirin, D.J. Wineland, S.W. Nam, A.C. Wilson, D. Leibfried & D.H. Slichter"
links:
- name: "arXiv"
path: "https://arxiv.org/abs/2008.00065"
- title: "Trapped-Ion Spin-Motion Coupling with Microwaves and a Near-Motional Oscillating Magnetic Field Gradient"
authors: "R. Srinivas, S.C. Burd, R.T. Sutherland, A.C. Wilson, D.J. Wineland, D. Leibfried, D.T.C. Allcock & D.H. Slichter"
links:
- name: "Phys. Rev. Lett. 122, 163201"
path: "https://journals.aps.org/prl/abstract/10.1103/PhysRevLett.122.163201"
- name: "arXiv"
path: "https://arxiv.org/abs/1812.02098.pdf"
- title: "Speed, retention loss, and motional heating of atoms in an optical conveyor belt"
authors: "G.T. Hickman & M. Saffman"
links:
- name: "Phys. Rev. A 101, 063411"
path: "https://journals.aps.org/pra/abstract/10.1103/PhysRevA.101.063411"
- name: "arXiv"
path: "https://arxiv.org/abs/2004.04848"
- title: "A hybrid ion-atom trap with integrated high resolution mass spectrometer"
authors: "S. Jyothi, Kisra N. Egodapitiya, Brad Bondurant, Zhubing Jia, Eric Pretzsch, Piero Chiappina, Gang Shu & Kenneth R. Brown"
links:
- name: "Review of Scientific Instruments 90, 103201 (2019)"
path: "https://aip.scitation.org/doi/abs/10.1063/1.5121431"
- name: "arXiv"
path: "https://arxiv.org/abs/1907.10455"
- title: "Photon-mediated charge-exchange reactions between <sup>39</sup>K atoms and <sup>40</sup>Ca<sup>+</sup> ions in a hybrid trap"
authors: "Hui Li, S. Jyothi, Ming Li, Jacek Klos, Alexander Petrov, Kenneth R Brown & Svetlana Kotochigova"
links:
- name: "Phys. Chem. Chem. Phys., 2020,22, 10870-10881"
path: "https://pubs.rsc.org/en/content/articlelanding/2020/cp/d0cp01131b"
- name: "arXiv"
path: "https://arxiv.org/abs/2003.03430"
- title: "Spin Readout Techniques of the Nitrogen-Vacancy Center in Diamond"
authors: "David A. Hopper, Henry J. Shulevitz, & Lee C. Bassett"
links:
- name: "Micromachines 2018, 9(9), 437"
path: "https://www.mdpi.com/2072-666X/9/9/437"
- name: "arXiv"
path: "https://arxiv.org/abs/1809.05237"
- title: "High-accuracy inertial measurements with cold-atom sensors"
authors: "Remi Geiger, Arnaud Landragin, Sébastien Merlet & Franck Pereira Dos Santos"
links:
- name: "AVS Quantum Sci. 2, 024702 (2020)"
path: "https://avs.scitation.org/doi/10.1116/5.0009093"
- name: "arXiv"
path: "https://arxiv.org/abs/2003.12516"
- title: "Dynamical low-noise microwave source for cold atom experiments"
authors: "Bernd Meyer, Alexander Idel, Fabian Anders, Jan Peise & Carsten Klempt"
links:
- name: "arXiv"
path: "https://arxiv.org/abs/2003.10989"
- title: "Ion-trapping lab setup for quantum information experiments"
authors: "Alexander Quinn, Jeremy Metzner, Daniel Moore, Vikram Sandhu, Dave Wineland, David Allcock"
links:
- name: "DAMOP20 poster"
path: "https://meetings.aps.org/Meeting/DAMOP20/Session/K01.113"
- title: "Driver module for quantum computer experiments: Kasli"
authors: "Paweł Kulik, Grzegorz Kasprowicz and Michał Gąska"
links:
- name: "Proceedings Volume 10808, Photonics Applications in Astronomy, Communications, Industry, and High-Energy Physics Experiments 2018"
path: "https://doi.org/10.1117/12.2501709"
- name: "slides"
path: "https://raw.githubusercontent.com/wiki/sinara-hw/meta/talks/pawel_kasli_mgr2.pdf"
- title: "Urukul open-source frequency synthesizer module for quantum physics"
authors: "Grzegorz Kasprowicz, Thomas Harty, Sébastien Bourdeauducq, Robert Jördens, David Allcock, David Nadlinger, Joseph Britton, Ana Sotirova, Dorota Nowicka"
links:
- name: "International Journal of Electronics and Telecommunications, Vol 68, No 1 (2022)"
path: "http://ijet.pl/index.php/ijet/issue/view/58"
- title: "Control system for ion Penning traps at the AEgIS experiment at CERN"
authors: "Dorota Nowicka"
links:
- name: "TIPP 2021 Poster"
path: "https://indico.cern.ch/event/981823/contributions/4295432/attachments/2250078/3816845/poster_445.pdf"
- title: "Integrated photonic control of trapped ion qubits"
authors: "Jules Stuart, Dave Reens, Cheri Sorace-Agaskar, Dave Kharas, Jeremy Sage, John Chiaverini"
links:
- name: "NY CREATES presentation"
path: "https://ny-creates.org/wp-content/uploads/Niffenegger_NY_CREATES_04_22_2021.pdf"
- title: "Sayma: Agile RF for Coherent Quantum Control Using ARTIQ"
authors: "Joseph W. Britton, David T.C. Allcock, Chris Ballance, Tom P. Harty, Robert Jordens, Greg Kasprowicz, Pawel Kulik, Daniel H. Slichter, Weida Zhang, Sebastien Bourdeauducq"
links:
- name: "APS Division of Atomic and Molecular Physics Meeting 2019, abstract id.E01.164"
path: null
- title: "Progress towards ultracold Sr for the AION project — sub-microkelvin atoms and an optical-heterodyne diagnostic tool for injection-locked laser diodes"
authors: "E. Pasatembou, C.F.A. Baynham, O. Buchmüller, D. Evans, R. Hobson, L. Iannizzotto-Venezze, A. Josset"
links:
- name: "arXiv"
path: "https://arxiv.org/abs/2310.08500"
- title: "Experimental demonstration of enhanced violations of Leggett-Garg inequalities in a PT-symmetric trapped-ion qubit"
authors: "Pengfei Lu, Xinxin Rao, Teng Liu, Yang Liu, Ji Bian, Feng Zhu, Le Luo"
links:
- name: "arXiv"
path: "https://arxiv.org/abs/2309.06713"
- title: "Fast adiabatic transport of single laser-cooled <sup>9</sup>Be+ ions in a cryogenic Penning trap stack"
authors: "T. Meiners, J.-A. Coenders, J. Mielke, M. Niemann, J.M. Cornejo, S. Ulmer, C. Ospelkaus"
links:
- name: "arXiv"
path: "https://arxiv.org/abs/2309.06776"
- title: "Schlussbericht zum Verbundvorhaben Quanten-Inertialsensorsystem (QGyro)"
authors:
short: "S. Schön, S. Abend, E. v. Hinüber, N.B. Weddig,"
full: "B. Tennstedt, P. Barbey, M. Gersemann, T. Kersten, Yueyang Zou, Ashwin Rajagopalan, Mouine Abidi, Alexander Löwer, Ernst M. Rasel"
links:
- name: "Leibniz Universität Hannover"
path: "https://www.repo.uni-hannover.de/handle/123456789/14823"
- title: "One-Time Compilation of Device-Level Instructions for Quantum Subroutines"
authors: "Aniket S. Dalvi, Jacob Whitlow, Marissa D'Onofrio, Leon Riesebos, Tianyi Chen, Samuel Phiri, Kenneth R. Brown, Jonathan M. Baker"
links:
- name: "arXiv"
path: "https://arxiv.org/abs/2308.10787"
- title: "QUANT-NET: A testbed for quantum networking research over deployed fiber"
authors: "Inder Monga, Erhan Saglamyurek, Ezra Kissel, Hartmut Häffner, Wenji Wu"
links:
- name: "Association for Computing Machinery"
path: "https://dl.acm.org/doi/abs/10.1145/3610251.3610561"
- name: "eScholarship University of California"
path: "https://escholarship.org/uc/item/7hk9g5d3"
- title: "An environmental monitoring network for quantum gas experiments and devices"
authors: "T.J. Barrett, W. Evans, A. Gadge, S. Bhumbra, S. Sleegers, R. Shah, J. Fekete, F. Oručević and P. Krüger"
links:
- name: "IOPscience"
path: "https://iopscience.iop.org/article/10.1088/2058-9565/ac3385"
- title: "Adiabatically controlled motional states of a ground-state cooled CaO<sup>+</sup> and Ca<sup>+</sup> trapped ion chain"
authors: "Lu Qi, Evan C. Reed, Kenneth R. Brown"
links:
- name: "arXiv"
path: "https://arxiv.org/abs/2212.05105"
- title: "Dynamical low-noise microwave source for cold-atom experiments"
authors: "Bernd Meyer-Hoppe, Maximilian Baron, Christophe Cassens, Fabian Anders, Alexander Idel, Jan Peise, and Carsten Klempt"
links:
- name: "AIP Publishing"
path: "https://pubs.aip.org/aip/rsi/article/94/7/074705/2902630"
- title: "Fast, high-fidelity addressed single-qubit gates using efficient composite pulse sequences"
authors: "A.D. Leu, M.F. Gely, M.A. Weber, M.C. Smith, D.P. Nadlinger, D.M. Lucas"
links:
- name: "arXiv"
path: "https://arxiv.org/abs/2305.06725"
- title: "QisDAX: An Open Source Bridge from Qiskit to Trapped Ion Quantum Devices."
authors: "Kaustubh Jagdish Badrike"
links:
- name: "NCSU"
path: "https://repository.lib.ncsu.edu/bitstream/handle/1840.20/40949/etd.pdf"
- title: "Verifiable blind quantum computing with trapped ions and single photons"
authors: "P. Drmota, D.P. Nadlinger, D. Main, B.C. Nichol, E.M. Ainley, D. Leichtle, A. Mantri, E. Kashefi, R. Srinivas, G. Araneda, C.J. Ballance, D.M. Lucas"
links:
- name: "arXiv"
path: "https://arxiv.org/abs/2305.02936"
- title: "Low noise quantum frequency conversion of photons from a trapped barium ion to the telecom O-band"
authors: "Uday Saha, James D. Siverns, John Hannegan, Qudsia Quraishi, Edo Waks"
links:
- name: "arXiv"
path: "https://arxiv.org/abs/2305.01205"
- title: "Open-source electronics ecosystem for optical atomic clocks"
authors: "Piotr Morzyński, Sławomir Bilicki, Marcin Bober, Adam Ledziński, Marcin Witkowski, Mehrdad Zarei and Michał Zawada"
links:
- name: "IOPscience"
path: "https://iopscience.iop.org/article/10.1088/1361-6501/acc5a1"
- title: "Transient fluorescence with a single trapped ion"
authors: "Nicolás Nuñez Barreto, Lucas Giardino, Carla Crucianelli, Muriel Bonetto, Martin Drechsler, Christian Tomás Schmiegelow"
links:
- name: "arXiv"
path: "https://arxiv.org/abs/2303.00650"
- title: "Sampler: Open-Source Data Acquisition Module for Quantum Physics"
authors: "Kasprowicz Grzegorz, Harty Thomas, Bourdeauducq Sébastien, Jördens Robert, Allcock David, Slichter Daniel, Nadlinger David, Britton Joseph W. ,Sotirova Ana"
links:
- name: "BazTech"
path: "https://yadda.icm.edu.pl/baztech/element/bwmeta1.element.baztech-e97e8039-a7dd-4283-b1af-45b6a61993d1"
- title: "Practical Implementation of an Analogue and Digital Electronics System for a Modular Cosmic Ray Detector — MCORD"
authors:
short: "Marcin Bielewicz, Aleksandr Bancer, Andrzej Dziedzic, Jaroslaw Grzyb,"
full: "Elzbieta Jaworska, Grzegorz Kasprowicz, Michal Kiecana, Piotr Kolasinski, Michal Kuc, Michal Kuklewski, Marcin Pietrzak, Krzysztof Pozniak, Maciej Sitek, Mikolaj Sowinski, Łukasz ´Swiderski, Agnieszka Syntfeld-Kazuch, Jaroslaw Szewinski and Wojciech Marek Zabołotny"
links:
- name: "MDPI"
path: "https://www.mdpi.com/2079-9292/12/6/1492"
- title: "Cold highly charged ions in a radio-frequency trap with superconducting magnetic shielding"
authors:
short: "Elwin A. Dijck, Christian Warnecke, Malte Wehrheim, Ruben B. Henninger, Julia Eff,"
full: "Kostas Georgiou, Andrea Graf, Stepan Kokh, Lakshmi P. Kozhiparambil Sajith, Christopher Mayo, Vera M. Schäfer, Claudia Volk, Piet O. Schmidt, Thomas Pfeifer, José R. Crespo López-Urrutia"
links:
- name: "arXiv"
path: "https://arxiv.org/abs/2306.01670"
- title: "Positronium laser cooling via the 1<sup>3</sup>S-2<sup>3</sup>P transition with a broadband laser pulse"
authors:
short: "AEgIS Collaboration:"
full: "L.T. Glöggler, N. Gusakova, B. Rienäcker, A. Camper, R. Caravita, S. Huck, M. Volponi, T. Wolz, L. Penasa, V. Krumins, F. Gustafsson, M. Auzins, B. Bergmann, P. Burian, R.S. Brusa, F. Castelli, R. Ciuryło, D. Comparat, G. Consolati, M. Doser, Ł. Graczykowski, M. Grosbart, F. Guatieri, S. Haider, M.A. Janik, G. Kasprowicz, G. Khatri, Ł.Kłosowski, G. Kornakov, L. Lappo, A. Linek, J. Malamant, S. Mariazzi, V. Petracek, M. Piwiński, S. Pospisil, L. Povolo, F. Prelz, S.A. Rangwala, T. Rauschendorfer, B.S. Rawat, V. Rodin, O.M. Røhne, H. Sandaker, P. Smolyanskiy, T. Sowiński, D. Tefelski, T. Vafeiadis, C.P. Welsch, M. Zawada, J. Zielinski, N. Zurlo"
links:
- name: "arXiv"
path: "https://arxiv.org/abs/2310.08760"
- name: "CERN"
path: "https://cds.cern.ch/record/2878376"
- title: "Open Hardware in Quantum Technology"
authors:
short: "Nathan Shammah, Anurag Saha Roy, Carmen G. Almudever, Sébastien Bourdeauducq, Anastasiia Butko,"
full: "Gustavo Cancelo, Susan M. Clark, Johannes Heinsoo, Loïc Henriet, Gang Huang, Christophe Jurczak, Janne Kotilahti, Alessandro Landra, Ryan LaRose, Andrea Mari, Kasra Nowrouzi, Caspar Ockeloen-Korppi, Guen Prawiroatmodjo, Irfan Siddiqi, William J. Zeng"
links:
- name: "arXiv"
path: "https://arxiv.org/abs/2309.17233"
- title: "Weighing antimatter: AEg over bar IS Phase 2, upgrades and first data"
authors: "M. Volponi, G. Consolati, AEgIS Collaboration"
links:
- name: "Politecnico di Milano"
path: "https://re.public.polimi.it/handle/11311/1249382"
- title: "The Electronic Control System of a Trapped-Ion Quantum Processor: A Systematic Literature Review"
authors: "Stefanie Castillo"
links:
- name: "IEEE"
path: "https://ieeexplore.ieee.org/abstract/document/10164086"
- title: "Engineering a Control System for a Logical Qubit-Scalee Trapped Ion Quantum Computer"
authors: "Andrew Russ Risinger"
links:
- name: "Duke"
path: "https://iontrap.duke.edu/files/2023/07/thesis-arr-2023-04-16.pdf"
- title: "An optical clock based on a highly charged ion"
authors: "Lukas Josef Spieß"
links:
- name: "Leibniz Universität Hannover"
path: "https://www.repo.uni-hannover.de/handle/123456789/13801"
- title: "Advances in performance and automation of a single ytterbium ion optical clock"
authors: "Alexandra Tofful"
links:
- name: "Imperial College London"
path: "https://spiral.imperial.ac.uk/handle/10044/1/103468"
- title: "A many-channel FPGA control system"
authors: "Daniel T. Schussheim, Kurt Gibble"
links:
- name: "arXiv"
path: "https://arxiv.org/abs/2307.16008"
- title: "Radium ions and radioactive molecules for probing new physics"
authors: "Mingyu Fan"
links:
- name: "eScholarship University of California"
path: "https://escholarship.org/uc/item/5j42z6c8"
- title: "Programowalny sterownik siłownika piezoelektrycznego"
authors: "Adam Kołodyński"
links:
- name: "Warsaw University of Technology, Engineer's thesis"
path: null
- name: "local copy"
path: "/AdamKolodynski.pdf"
- title: "Microwave synthesizer for driving ion traps in quantum computing"
authors: "Krzysztof Belewicz"
links:
- name: "Warsaw University of Technology, Bachelor's dipoma thesis"
path: null
- name: "local copy"
path: "/Krzysztof_Belewicz_V1.1.pdf"
- title: "Wielokanałowy moduł sterujący pułapką jonową w standardzie MicroTCA.4"
authors: "Tomasz Przywózki"
links:
- name: "Warsaw University of Technology, Master's thesis"
path: null
- name: "local copy"
path: "/TomaszPrzywozki_v3.pdf"
- title: "Short Time Fourier Transform Pulse Generator for Trapped Ion Quantum Gates"
authors: "Norman Krackow"
links:
- name: "local copy"
path: "/thesis_nkrackow.pdf"
- title: "Precise PID controller for quantum applications"
authors: "Jakub Matyas"
links:
- name: "Warsaw University of Technology, Engineer's thesis"
path: "https://repo.pw.edu.pl/info/bachelor/WUTe90de3461b53456c9d63c55d80d34220/"
- name: "local copy"
path: "/JMatyas_inz_v6.pdf"
- title: "Controller module for real-time quantum applications"
authors: "Paweł Kulik"
links:
- name: "Warsaw University of Technology, Masters's diploma thesis"
path: "https://repo.pw.edu.pl/info/master/WUT6212c3c3cdcd40ea9095f4ead6482596/"
- name: "local copy"
path: "/pawel_kulik_kasli_thesis_2019_compressed.pdf"

View File

@ -114,7 +114,7 @@ template = "page.html"
**Sinara hardware purchases, ports to your hardware, feature development, technical support, bugfixing**
contact sales@m-\*\*\*s.hk
contact {{ email(address="sales") }}
We welcome inquiries from research groups of all sizes.<br>[See what has been funded before](/experiment-control/funding)
@ -146,6 +146,12 @@ We welcome inquiries from research groups of all sizes.<br>[See what has been fu
<a href="https://github.com/OxfordIonTrapGroup/oitg" target="_blank" rel="noopener noreferrer">Repository</a>
{% end %}
{% layout_card(title="UCLA routines", sameheight=120) %}
<small>ARTIQ experiments in use at UCLA AMO</small>
<a href="https://github.com/EGGS-Experiment/LAX_exp" target="_blank" rel="noopener noreferrer">Repository</a>
{% end %}
{% layout_card(title="nvOS", sameheight=120) %}
<small>A quantum operating system built around ARTIQ and NV centers in diamond.</small>
@ -164,13 +170,6 @@ We welcome inquiries from research groups of all sizes.<br>[See what has been fu
<a href="https://github.com/cnourshargh/Bham-ARTIQ-examples" target="_blank" rel="noopener noreferrer">Repository</a>
{% end %}
{% layout_card(title="Deltaflow-on-ARTIQ", sameheight=120) %}
<small>Run programs in the Deltaflow language from Riverlane on simulated ARTIQ</small>
<a href="https://github.com/riverlane/deltaflow-on-artiq" target="_blank" rel="noopener noreferrer">Repository</a>
{% end %}
{% layout_card(title="DAX - Duke ARTIQ extensions", sameheight=120) %}
<small>A library to provide tools for system organization/abstraction and to improve usability by automating common functionality.</small>
@ -178,6 +177,12 @@ We welcome inquiries from research groups of all sizes.<br>[See what has been fu
{% end %}
{% layout_card(title="Argent", sameheight=120) %}
<small>High-level sequence control interface for ARTIQ.</small>
<a href="https://github.com/robertfasano/argent" target="_blank" rel="noopener noreferrer">Repository</a>
{% end %}
{% layout_card(title="flake8-artiq", sameheight=120) %}
<small>A Flake8 plugin for checking ARTIQ code</small>
@ -222,9 +227,15 @@ We welcome inquiries from research groups of all sizes.<br>[See what has been fu
<a href="https://github.com/vuthalab/artiq" target="_blank" rel="noopener noreferrer">Repository</a>
{% end %}
{% layout_card(title="OffsetStabilizer", sameheight=120) %}
<small>Stabilizer firmware for laser frequency offset stabilization</small>
<a href="https://github.com/PhBrb/OffsetStabilizer" target="_blank" rel="noopener noreferrer">Repository</a>
{% end %}
</div>
{% layout_div(css="col-12 text-center") %}
Want your project listed here? Write to sb@m-l\*\*\*.hk.
Want your project listed here? Write to {{ email(address="sb") }}.
{% end %}

View File

@ -12,9 +12,9 @@ title = "Sinara hardware"
The first ARTIQ core devices used hardware built in-house by physicists (based on a Xilinx KC705 development board with custom FMC cards). To improve the quality, features and scalability of ARTIQ systems, we have been developing the Sinara device family. It provides turnkey control hardware that is reproducible, open, flexible, modular, well-tested, and well-supported by the ARTIQ control software.
The Sinara hardware is in active development, and the latest information is available <a href="https://github.com/sinara-hw" target="_blank" rel="noopener noreferrer">on the wiki of each project's page</a>. Most of the hardware engineering is done at the <a href="http://www.ise.pw.edu.pl/" target="_blank" rel="noopener noreferrer">Institute for Electronics Systems</a> at the Warsaw University of Technology.
The Sinara hardware is in active development, and the latest information is available <a href="https://github.com/sinara-hw" target="_blank" rel="noopener noreferrer">on the wiki of each project's page</a>. Most of the hardware engineering is done at the <a href="https://www.ise.pw.edu.pl/" target="_blank" rel="noopener noreferrer">Institute for Electronics Systems</a> at the Warsaw University of Technology.
Kasli and EEMs can be ordered now. We can deliver a rack-mountable crate that contains all the cards, is fully tested, and is ready to be connected to your experiment and computer network. Contact sales@m-\*\*\*s.hk with your requirements and we will establish a quote.
Kasli and EEMs can be ordered now. We can deliver a rack-mountable crate that contains all the cards, is fully tested, and is ready to be connected to your experiment and computer network. Use our [web-based configuration and ordering tool](../place-order), or contact {{ email(address="sales") }} with your requirements, and we will establish a quote.
{% end %}
@ -270,6 +270,7 @@ The 4624 AWG "Phaser" is a quad channel 1.25 GS/s RF generator card with dual IQ
- 2x 1.25 GS/s IQ upconverters.
- dual IQ mixer + 0.3 GHz to 4.8 GHz VCO + PLL.
- up to 16 dynamic tones per channel using <a href="https://github.com/quartiq/miqro-sim" target="_blank" rel="noopener noreferrer">MIQRO gateware</a> (available separately from QUARTIQ).
- 31.5 dB range digital step attenuator (similar to Urukul).
- 2 channels of 5 MS/s ADC (similar to Sampler).
- Artix-7 FPGA.
@ -293,11 +294,11 @@ The 4624 AWG "Phaser" is a quad channel 1.25 GS/s RF generator card with dual IQ
{% layout_centered_content(min_width=true, css="row d-flex align-items-center mt-5") %}
##### Kasli and EEMs can be ordered now
##### Ordering from M-Labs is easy and quick
We can deliver a rack-mountable crate that contains all the cards, is fully tested, and is ready to be connected to your experiment and computer network.
We can deliver a rack-mountable crate that contains all the cards, is fully tested, and is ready to be connected to your experiment and computer network. The lead time can be as short as a few working days and we will provide assistance to help you set up your new equipment with ARTIQ via the online helpdesk. Using our AFWS tool, you can keep the firmware of your M-Labs devices up-to-date easily, and benefit from the new features we continuously develop into ARTIQ.
Contact sales@m-\*\*\*s.hk with your requirements and we will establish a quote.
Use our [web-based configuration and ordering tool](../place-order), or contact {{ email(address="sales") }} with your requirements, and we will establish a quote.
{% end %}

View File

@ -15,7 +15,7 @@ The Milkymist One is programmable and customizable at many different levels.
The simplest way one can use a Milkymist One is by affecting MIDI controls to the existing snippets of code (called "patches") that create the effects. The Milkymist One ships with dozens of pre-existing patches.
Creating new patches can be done with a simple programming language based on the <a href="http://www.milkdrop.co.uk/guide.htm" target="_blank" rel="noopener noreferrer">MilkDrop preset format</a>. The Milkymist One device comes with a built-in editor.
Creating new patches can be done with a simple programming language based on the <a href="https://web.archive.org/web/20130825023759/http://www.milkdrop.co.uk/guide.htm" target="_blank" rel="noopener noreferrer">MilkDrop preset format</a>. The Milkymist One device comes with a built-in editor.
Under the hood, the Milkymist One is like a mini-computer running our Flickernoise video synthesis software.
@ -50,10 +50,10 @@ But we did not stop at open source <em>software</em>. As a matter of fact, when
##### Press
- Create Digital Motion (10/02/2012): <a href="http://createdigitalmotion.com/2012/02/milkymist-is-digital-visual-synthesizer-and-processor-built-on-sophisticated-open-source-hardware/">Milkymist is Digital Visual Synthesizer and Processor, Built as Sophisticated Open Source Hardware</a>
- MikroBitti (03/2012): <a href="http://www.mbnet.fi/artikkeli/lehti/avointa_vj_rautaa_3_2012">Milkymist One -visualisaattori: Avointa vj-rautaa</a> [FI]
- MikroBitti (03/2012): <a href="https://web.archive.org/web/20140226181735/http://www.mbnet.fi/artikkeli/lehti/avointa_vj_rautaa_3_2012">Milkymist One -visualisaattori: Avointa vj-rautaa</a> [FI]
- Make Magazine (30/09/2011): <a href="http://blog.makezine.com/2011/09/30/milkymist-one-an-open-source-vj-console-goes-on-sale/">Milkymist One, an Open Source VJ Console, Goes on Sale</a>
- The Register (28/09/2011): <a href="http://www.theregister.co.uk/2011/09/28/milkymist/print.html">Open-source hardware group puts out vid system-on-a-chip</a>
- Theory&amp;Practice (22/09/2011): <a href="http://theoryandpractice.ru/seminars/19402-videosintezator-s-otkrytym-kodom-milkymist-one-22-9">Видеосинтезатор с открытым кодом Milkymist One</a> [RU]
- Theory&amp;Practice (22/09/2011): <a href="https://web.archive.org/web/20160409033154/http://theoryandpractice.ru/seminars/19402-videosintezator-s-otkrytym-kodom-milkymist-one-22-9">Видеосинтезатор с открытым кодом Milkymist One</a> [RU]
- ETN (17/05/2011): <a href="http://www.etn.se/index.php?option=com_content&view=article&id=53785">Videoeffekter i öppen hårdvara söker partners</a> [SE]
- Linux-Magazin (28/01/2011): <a href="http://www.linux-magazin.de/NEWS/VJ-System-Milkymist-als-Entwicklerboard-erhaeltlich">VJ-System Milkymist als Entwicklerboard erhältlich</a> [DE]
- Create Digital Motion (16/08/2010): <a href="http://createdigitalmotion.com/2010/08/milkymist-one-all-in-one-open-source-vj-workstation/">Milkymist One, All-in-One Open Source VJ Workstation</a>
@ -154,17 +154,17 @@ Milkymist SoC is phased out in favor of the more powerful [MiSoC](../migen).
##### Flickernoise
Flickernoise is the video synthesis application developed for the Milkymist One and the Milkymist SoC. It renders hardware-accelerated visual effects comparable (and, to some extent, compatible) with those of <a href="http://www.nullsoft.com/free/milkdrop">MilkDrop</a> 1.x, the popular audio visualization plug-in for Winamp.
Flickernoise is the video synthesis application developed for the Milkymist One and the Milkymist SoC. It renders hardware-accelerated visual effects comparable (and, to some extent, compatible) with those of <a href="https://www.geisswerks.com/milkdrop/">MilkDrop</a> 1.x, the popular audio visualization plug-in for Winamp.
Flickernoise allows the creation of visual patches and their connection with all the interfaces that the Milkymist One provides thanks to a built-in graphical user interface. Let the visuals react to sound and MIDI events, connect a camera and create live phantasmagoric images of yourself...
Flickernoise uses:
- The <a href="http://www.rtems.org">RTEMS</a> real-time operating system.
- The <a href="http://www.yaffs.org">YAFFS</a> flash filesystem (modified version <a href="http://www.github.com/m-labs/rtems-yaffs2">here</a>).
- The <a href="https://web.archive.org/web/20151025081338/http://www.yaffs.org/">YAFFS</a> flash filesystem (modified version <a href="http://www.github.com/m-labs/rtems-yaffs2">here</a>).
- The <a href="http://www.libpng.org">libpng</a>, <a href="http://www.ijg.org">libjpeg</a>, <a href="http://www.ijg.org">openjpeg</a> and <a href="http://jbig2dec.sourceforge.net/">jbig2dec</a> image decompression libraries.
- The <a href="http://www.freetype.org">freetype</a> font rendering system.
- The <a href="http://www.mupdf.com">MuPDF</a> library for the online help system.
- The <a href="https://www.mupdf.com">MuPDF</a> library for the online help system.
- <a href="http://www.github.com/m-labs/mtk">MTK</a>, a modified version of the <a href="http://www.genode-labs.com/products/fpga-graphics">Genode FX</a> embedded GUI toolkit, which provides all the elements for common user interaction (windows, buttons, etc.).
- <a href="http://www.github.com/m-labs/liboscparse">liboscparse</a>, a variant of <a href="http://liblo.sourceforge.net/">liblo</a>, for <a href="http://www.opensoundcontrol.org">OpenSoundControl</a> communications.

View File

@ -54,7 +54,7 @@ You can find the Migen source <a href="http://github.com/m-labs/migen" target="_
- <a href="https://www.wdj-consulting.com/blog/migen-port.html" target="_blank" rel="noopener noreferrer">Tutorial "Porting a New Board To Migen"</a> by cr1901
- <a href="https://lab.whitequark.org/notes/2016-10-18/implementing-an-uart-in-verilog-and-migen/" target="_blank" rel="noopener noreferrer">"Implementing a UART in Verilog and Migen"</a> by whitequark
- <a href="https://lab.whitequark.org/notes/2016-10-19/implementing-a-simple-soc-in-migen/" target="_blank" rel="noopener noreferrer">"Implementing a simple SoC in Migen"</a> by whitequark
- <a href="http://blog.lambdaconcept.com/doku.php?id=migen:tutorial" target="_blank" rel="noopener noreferrer">Migen Step by Step Tutorial</a> by LambdaConcept
- <a href="https://web.archive.org/web/20210416131215/http://blog.lambdaconcept.com/doku.php?id=migen:tutorial" target="_blank" rel="noopener noreferrer">Migen Step by Step Tutorial</a> by LambdaConcept
{% end %}

View File

@ -28,7 +28,7 @@ nMigen itself provides the core language, and is complemented by a number of ext
##### Documentation
Documentation for nMigen and its external components is rather limited at the moment. However, you can follow the <a href="http://blog.lambdaconcept.com/doku.php?id=nmigen:tutorial" target="_blank" rel="noopener noreferrer">tutorial by LambdaConcept</a>, and another <a href="https://github.com/RobertBaruch/nmigen-tutorial" target="_blank" rel="noopener noreferrer">tutorial by Robert Baruch</a>, as well as his video series on building a 6800 CPU on an FPGA with nMigen: <a href="https://www.youtube.com/watch?v=85ZCTuekjGA" target="_blank" rel="noopener noreferrer">part 1</a> <a href="https://www.youtube.com/watch?v=AQOXoKQhG3I" target="_blank" rel="noopener noreferrer">part 2</a> <a href="https://www.youtube.com/watch?v=aLQqOxnVMOQ" target="_blank" rel="noopener noreferrer">part 3</a> <a href="https://www.youtube.com/watch?v=xqMtyCu4lME" target="_blank" rel="noopener noreferrer">part 4</a>.
Documentation for nMigen and its external components is rather limited at the moment. However, you can follow the <a href="https://web.archive.org/web/20210518042504/http://blog.lambdaconcept.com/doku.php?id=nmigen:tutorial" target="_blank" rel="noopener noreferrer">tutorial by LambdaConcept</a>, and another <a href="https://github.com/RobertBaruch/nmigen-tutorial" target="_blank" rel="noopener noreferrer">tutorial by Robert Baruch</a>, as well as his video series on building a 6800 CPU on an FPGA with nMigen: <a href="https://www.youtube.com/watch?v=85ZCTuekjGA" target="_blank" rel="noopener noreferrer">part 1</a> <a href="https://www.youtube.com/watch?v=AQOXoKQhG3I" target="_blank" rel="noopener noreferrer">part 2</a> <a href="https://www.youtube.com/watch?v=aLQqOxnVMOQ" target="_blank" rel="noopener noreferrer">part 3</a> <a href="https://www.youtube.com/watch?v=xqMtyCu4lME" target="_blank" rel="noopener noreferrer">part 4</a>.
{% end %}

View File

@ -30,7 +30,7 @@ Built on the <a href="/gateware/migen/">MiSoC and Migen</a> technologies that or
The Mixxeo supported mixing from two DVI or HDMI sources up to 720p60, with crossfade, fade to black and potentially other effects with a latency of less than two frames.
<b>Status (Aug 2014)</b> - Main board and gateware have been <a href="/images/mixxeo_result.jpg">mostly functional</a> for a while, mechanical design and manufacturing for the case/mechatronics are progressing slowly. If you have the skills and would like to help out, email sb at m-labs.hk or the mailing list.
<b>Status (Aug 2014)</b> - Main board and gateware have been <a href="/images/mixxeo_result.jpg">mostly functional</a> for a while, mechanical design and manufacturing for the case/mechatronics are progressing slowly. If you have the skills and would like to help out, email {{ email(address="sb") }} or the mailing list.
<center><img src="/images/mixxeo_menu.png"><br /><br /><img src="/images/mixxeo_board.jpg" class="picimg"></center>

View File

@ -26,6 +26,6 @@ smoltcp achieves <a href="https://github.com/smoltcp-rs/smoltcp#examplesbenchmar
The source code is available <a href="https://github.com/smoltcp-rs/smoltcp" rel="noopener noreferrer">on GitHub</a>.
**Commercial support for smoltcp is available.** Email sales@m-l\*\*\*s.hk.
**Commercial support for smoltcp is available.** Email {{ email(address="sales") }}.
{% end %}

View File

@ -9,7 +9,7 @@ layout_css = "col-12 col-md-10 mx-auto"
{% div() %}
<script src="/js/hammer-2.0.8.js"></script>
<script src="/js/hammer.min.js"></script>
<script src="/js/three-r76.js"></script>
<script src="/js/SolveSpaceControls.js"></script>
{% end %}

7211
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@ -1,27 +1,55 @@
{
"name": "m-labs-zola",
"sideEffects": false,
"version": "1.0.0",
"description": "These instructions will get you a copy of the project up and running on your local machine for development and testing purposes. For deployment, see the nix-scripts repository. Commits to https://git.m-labs.hk/M-Labs/web2019.git are automatically deployed to m-labs.hk through Hydra.",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1",
"start": "./node_modules/.bin/babel static/js/shop.jsx --watch -o static/js/shop.min.js",
"build": "./node_modules/.bin/babel static/js/shop.jsx -o static/js/shop.min.js"
"start": "npx webpack --watch",
"build": "npx webpack",
"start-dev": "npx webpack --watch --mode=development --devtool=inline-source-map",
"build-dev": "npx webpack --mode=development --devtool=inline-source-map"
},
"repository": {
"type": "git",
"url": "https://git.m-labs.hk/M-Labs/web2019.git"
},
"dependencies": {
"@hello-pangea/dnd": "^16.6.0",
"bootstrap": "^5.3.3",
"json-logic-js": "^2.0.5",
"react": "^18.3.1",
"react-bootstrap": "^2.10.4",
"uuid": "^9.0.1",
"zustand": "^4.5.4"
},
"devDependencies": {
"@babel/cli": "^7.8.4",
"@babel/core": "^7.9.0",
"@babel/preset-env": "^7.9.5",
"@babel/preset-react": "^7.9.4",
"babel-preset-minify": "^0.5.1"
"@babel/cli": "^7.24.8",
"@babel/core": "^7.25.2",
"@babel/preset-env": "^7.25.3",
"@babel/preset-react": "^7.24.7",
"@uidotdev/usehooks": "^2.4.1",
"babel-loader": "^9.1.3",
"babel-preset-minify": "^0.5.2",
"webpack": "^5.93.0",
"webpack-cli": "^5.1.4",
"webpack-preprocessor-loader": "^1.3.0"
},
"babel": {
"presets": [
"@babel/preset-env",
"@babel/preset-react"
"@babel/preset-react",
[
"@babel/preset-env",
{
"targets": {
"browsers": [
">0.25%",
"not dead",
"not op_mini all"
]
}
}
]
]
}
}

View File

@ -90,28 +90,52 @@ a {
}
}
.navbar-light .navbar-nav .nav-link,
.dropdown-item {
outline: none;
color: $color-primary;
text-decoration: none;
&:visited {
.navbar {
.navbar-light .navbar-nav .nav-link,
.dropdown-item {
outline: none;
color: $color-primary;
text-decoration: none;
&:visited {
color: $color-primary;
}
&:hover {
color: $color-secondary;
}
}
&:hover {
.navbar-light .navbar-nav .active>.nav-link,
.navbar-light .navbar-nav .nav-link.active,
.navbar-light .navbar-nav .nav-link.show,
.navbar-light .navbar-nav .show>.nav-link {
color: $color-secondary;
}
}
.navbar-light .navbar-nav .active>.nav-link,
.navbar-light .navbar-nav .nav-link.active,
.navbar-light .navbar-nav .nav-link.show,
.navbar-light .navbar-nav .show>.nav-link {
color: $color-secondary;
}
.dropdown-menu {
border: none;
}
.dropdown-item {
&:hover,
&:active {
background-color: transparent;
}
}
.dropdown-item.active {
color: $color-secondary;
background-color: transparent;
}
.navbar-toggler {
outline: none;
&:focus,
&:hover {
outline: none;
}
}
}
/**
@ -127,45 +151,23 @@ a {
border: 1px solid transparent;
}
.dropdown-menu {
border: none;
margin-top: 0;
padding-top: 0;
}
.dropdown-item {
&:hover,
&:active {
background-color: transparent;
}
}
.dropdown-item.active {
color: $color-secondary;
background-color: transparent;
}
.btn-primary {
background-color: $btn-primary-2;
color: #fff !important;
border: 1px solid $btn-primary-2 !important;
text-decoration: none;
margin: 0.125rem 0rem;
&:hover {
&:hover, &:disabled {
background-color: $btn-secondary-2;
border: 1px solid $btn-secondary-2 !important;
}
}
.btn-lg {
font-size: 1rem;
padding: 1rem 1.25rem;
}
.navbar-toggler {
outline: none;
&:focus,
&:hover {
outline: none;
}
}
ul.th {
list-style: none;
@ -199,6 +201,63 @@ ul:not(.navbar-nav) li {
}
.download-selector {
display: inline-flex;
.divider {
border-right: solid 1px white;
margin: 0.125rem 0;
height: inherit;
z-index: 10;
}
.dropdown-menu {
border: none;
margin-top: 0;
padding-top: 0;
}
.btn {
background-color: $btn-primary-2;
&:hover {
background-color: $btn-secondary-2;
}
&:after {
align-self: center;
}
}
button {
&[aria-expanded='true']:after {
transform: rotate(-180deg);
}
span {
margin-right: 0.5rem;
}
}
ul {
list-style: none;
margin-left: 0!important;
width: 100%;
padding: 0;
li {
padding: 0;
margin: 0;
a {
padding: 0.75rem 0.5rem 0.75rem 1.25rem;
}
}
li::before {
content: none;
display: none;
}
}
}
.bg-white-shadow {
background: url(../images/migen-links@2x.png);
background-repeat: no-repeat;
@ -242,4 +301,7 @@ a[aria-expanded='true']:after {
margin-right: 12px;
display: block;
float: left;
}
}
.hide-expanded[aria-expanded="true"], .show-expanded[aria-expanded="false"], .show-expanded {display: none;}
.hide-expanded[aria-expanded="false"], .show-expanded[aria-expanded="true"] {display: inline;}

View File

@ -83,10 +83,18 @@
.card h5,
.card h4,
h5 {
color: $brand-color;
}
h4 {
color: $color-primary;
margin-top: 3rem;
margin-bottom: 3rem;
text-align: center;
}
h3, h2, h1 {
color: $color-secondary;
}
@ -236,4 +244,22 @@ img.kf25 {
#root-shop, #root-shop>div {
height: 100%;
}
}
}
// follow respective border-[start, end, top, bottom] from bootstrap
@media (max-width: 767px) {
.funding-logo-start {
border-bottom:var(--bs-border-width) var(--bs-border-style) var(--bs-border-color)!important;
}
.funding-logo-end {
border-top:var(--bs-border-width) var(--bs-border-style) var(--bs-border-color)!important;
}
}
@media (min-width: 768px) {
.funding-logo-start {
border-right:var(--bs-border-width) var(--bs-border-style) var(--bs-border-color)!important;
}
.funding-logo-end {
border-left:var(--bs-border-width) var(--bs-border-style) var(--bs-border-color)!important;
}
}

View File

@ -1,6 +1,6 @@
#root-shop, #root-shop > div {
width: 100%;
height: calc(100vh - 72px);
height: calc(100vh - 40px - 2.625rem); /* .pb-md-3 + .pt-md-3 + img.height + .navbar-brand.paddings */
overflow: hidden;
}
@ -8,50 +8,61 @@ button {
outline: none!important;
}
#root-shop {
.rfqFeedback {
/* -webkit-box-shadow: 0px 0px 33px -7px rgba(0,0,0,0.75);
-moz-box-shadow: 0px 0px 33px -7px rgba(0,0,0,0.75);
box-shadow: 0px 0px 33px -7px rgba(0,0,0,0.75);*/
border: 1px solid $brand-color;
.modal-body, .modal-content, .modal {
border-radius: 0;
}
.form-group {
display: flex;
align-items: center;
padding: 0.5rem 0.75rem;
text-align: center;
.layout {
/*position: absolute;
width: 350px;*/
background: white;
/*left: calc(100%/2 - 350px/2);*/
.rfqFeedback {
display: flex;
align-items: center;
padding: 2rem 3rem;
text-align: center;
/*position: absolute;
width: 350px;*/
background: white;
/*left: calc(100%/2 - 350px/2);*/
-webkit-box-shadow: 0px 0px 33px -7px rgba(0,0,0,0.75);
-moz-box-shadow: 0px 0px 33px -7px rgba(0,0,0,0.75);
box-shadow: 0px 0px 33px -7px rgba(0,0,0,0.75);
/*top: calc(50% - 50px);*/
border: 1px solid $brand-color;
font-size: .9rem;
/*top: calc(50% - 50px);*/
button {
background-color: inherit;
align-self: center;
border: 0;
position: absolute;
right: 10px;
top: 10px;
font-size: .9rem;
}
img {
width: 15px;
}
}
button {
background-color: inherit;
align-self: center;
border: 0;
position: absolute;
right: 10px;
top: 10px;
.btn.btn-primary.disabled {
background-color: gray;
}
.btn-outline-primary,
.btn-outline-primary:hover {
color: $btn-primary-2;
border-color: $btn-primary-2;
background-color: inherit;
}
img {
width: 15px;
}
}
.btn.btn-primary.disabled {
background-color: gray;
}
.btn-outline-primary {
color: $btn-primary-2;
border-color: $btn-primary-2;
background-color: inherit;
&:hover {
background-color: inherit;
color: $btn-secondary-2;
border-color: $btn-secondary-2;
}
}
}
#root-shop {
.layout {
display: flex;
@ -61,26 +72,32 @@ button {
overflow-y: scroll;
overflow-x: hidden;
position: relative;
max-width: max(1/4 * 100%, 310px);
scrollbar-width: thin;
scrollbar-gutter: stable;
scrollbar-color: #6e7e87 transparent;
scrollbar-arrow-color: transparent;
/*padding-bottom: 4rem!important;*/
}
> aside.aside:after {
position: fixed;
bottom: 0;
height: 100px;
width: calc(2 / 6 * 100%);
content: "";
background: linear-gradient(
to top,
rgba(13, 53, 71, 1),
rgba(13, 53, 71, 0)
);
pointer-events: none;
.gradient-bottom {
position: sticky;
bottom: 0;
height: 100px;
//width: max(1/4 * 100%, 310px);
width: inherit;
content: "";
background: linear-gradient(
to top,
rgba(13, 53, 71, 1),
rgba(13, 53, 71, 0)
);
pointer-events: none;
}
}
> section.main {
flex: 4;
max-width: calc(4 / 6 * 100%);
width: calc(3/4 * 100%);
overflow-y: scroll;
}
}
@ -89,7 +106,7 @@ button {
display: flex;
color: white;
padding: 3rem 2rem 1rem;
padding: 1rem 0rem 1rem 1.5rem;
.content {
flex: 1;
@ -108,6 +125,7 @@ button {
h3 {
color: white;
font-size: 1.5rem;
}
button {
@ -165,8 +183,57 @@ button {
}
}
.backlog-container {
.catalog-container {
padding-bottom: 4rem;
.no-results {
color: rgba(255, 255, 255, 0.58);
display: inline-block;
padding: 0rem 1.5rem;
font-size: 1rem;
}
.catalog-bar {
display: flex;
width: 100%;
margin: 13px 0 0.4rem 0;
padding: 0 0.5rem;
justify-content: space-around;
.mobileCloseMenu {
display: flex;
padding: 0;
margin: 0;
width: 10%;
align-content: center;
}
.search-catalog {
display: inline-block;
border: 0;
width: 90%;
.search-catalog-input {
display: inline;
border: 0;
color: white;
border-radius: 2rem;
background: rgba(255, 255, 255, 0.15) url("/images/shop/icon-search.svg") no-repeat;
background-position: left 2% center;
background-size: 20px;
padding-right: 1rem;
text-indent: 20px;
&::placeholder {
color: white;
opacity: 0.5;
}
&:focus {
box-shadow: none;
}
}
}
}
}
.rule {
@ -186,37 +253,25 @@ button {
padding-bottom: .5rem;
}
.btn-outline-primary,
.btn-outline-primary:hover {
.btn-outline-primary {
color: $btn-primary-2;
border-color: $btn-primary-2;
background-color: inherit;
&:hover {
background-color: inherit;
color: $btn-secondary-2;
border-color: $btn-secondary-2;
}
}
.control {
display: flex;
font-size: .8rem;
> p {
width: 50%;
> .description {
width: 80%;
padding-right: 30px;
}
.crate-mode {
text-align: right;
width: 50%;
a {
cursor: pointer;
margin-right: 1rem;
color: inherit;
text-decoration: none;
padding-bottom: 5px;
}
a.active {
font-weight: 700;
border-bottom: 3px solid $btn-primary-2;
}
}
}
.summary {
@ -242,6 +297,9 @@ button {
.item-card-name {
font-weight: 700;
&.tabbed {
padding-left: 16px;
}
}
.price {
@ -255,11 +313,31 @@ button {
.item-card-name,
.price {
> .alert-warning {
.alert-warning, .alert-info {
background-color: inherit;
height: inherit;
width: 20px;
padding-bottom: 3px;
padding-bottom: 0;
}
}
.overlayVariant {
min-width: 100px;
max-height: 150px;
min-height: 50px;
overflow-y: scroll;
position: absolute;
display: flex;
align-items: start;
text-align: left;
background-color: white;
color: black;
flex-direction: column;
cursor: pointer;
p {
font-size: .875rem;
margin: 0;
}
}
@ -296,13 +374,19 @@ button {
button {
background-color: inherit;
border: 0;
margin-left: 20px;
margin-left: 16px;
img {
width: 20px;
height: auto;
}
}
span {
width: 28px;
}
.span-with-margin {
margin-left: 16px;
}
}
> .summary-form {
@ -327,7 +411,7 @@ button {
outline: none;
}
input[type="submit"],
.order-form-submit,
.btn-cla {
/*background-color: $btn-primary-2;*/
font-weight: 700;
@ -346,16 +430,39 @@ button {
border: 1px solid #e53e3e !important;
}
.btn-outline-primary,
.btn-outline-primary:hover {
.btn-outline-primary {
color: $btn-primary-2;
border-color: $btn-primary-2;
background-color: inherit;
&:hover {
background-color: inherit;
color: $btn-secondary-2;
}
}
}
}
}
.order-bar {
width: 90%;
font-size: 0.9rem;
padding: 0;
input[type="text"] {
padding: 0;
font-size: 0.9rem;
line-height: 1.1;
}
.options-group {
margin-bottom: 1rem;
padding: 0.5rem;
}
.shop-radio-label {
font-weight: bold;
}
}
.crate {
position: relative;
@ -371,7 +478,9 @@ button {
overflow-y: hidden;
-webkit-overflow-scrolling: touch;
-ms-overflow-style: -ms-autohiding-scrollbar;
min-height: 345px;
/* img.height + .items-cart-list.padding + .items-cart-list.div.padding + h6.font-size*_base.h6.line-height + progress-container.warning.height +
+ bootstrap.h6.margin-bottom + progress-container.height */
min-height: calc(350px + 17px + 10px + 0.6rem*1.1 + 24px + 0.5rem + 22px);
background-color: #ebebeb;
padding: 5px 5px 12px;
position: relative;
@ -380,7 +489,7 @@ button {
display: flex;
flex-direction: column;
/*max-width: 96px;*/
max-width: 130px;
max-width: 132px;
justify-content: flex-start;
align-content: center;
align-items: center;
@ -424,57 +533,18 @@ button {
width: 100%;
text-align: center;
position: relative;
height: 22px;
> .alert-warning {
&.warning {
height: 24px;
}
> .alert-warning, .alert-info {
background-color: inherit;
height: inherit;
width: 20px;
padding-bottom: 3px;
}
.k-popup-connectors,
.k-popup-warning {
position: absolute;
background-color: $color-primary;
color: white;
font-weight: 700;
font-size: .6rem;
padding: .8rem 1rem;
box-shadow: 0 0.5rem 1rem rgba(0,0,0,0.15);
text-align: left;
p {
margin-bottom: 0;
}
p + p {
padding-bottom: 8px;
}
}
.k-popup-connectors {
min-width: 200px;
bottom: 50px;
}
.k-popup-warning {
background-color: #c75e5e;
min-width: 350px;
.rule.warning {
display: flex;
font-size: .75rem;
img {
margin-right: 10px;
height: 100%;
}
}
}
.k-popup-warning.inverted {
right: 0;
}
}
.overlayRemove {
@ -501,6 +571,67 @@ button {
}
}
.overlayVariant {
top: 24px;
width: 140px;
min-height: 40px;
max-height: 320px;
overflow-y: scroll;
position: absolute;
display: flex;
align-items: start;
text-align: left;
background-color: white;
color: black;
flex-direction: column;
cursor: pointer;
padding: 0.2rem 0;
p {
font-size: .65rem;
margin: 0;
}
div {
margin: 0.1rem 0.2rem;
font-size: 0.75rem;
input {
padding: 0;
font-size: 0.75rem;
line-height: 1.1;
}
label {
margin-bottom: 0.1rem;
}
.options-icon {
display: inline;
height: .875rem;
margin-right: 0.2rem;
margin-left: 0.2rem;
}
}
.form-check {
min-height: 1rem;
}
}
}
.overlay-smallcard {
left: -38.5px; // (card width (63) - overlay width (140)) / 2
&.overlay-first {
left: 0;
}
&.overlay-last {
left: -67px;
}
}
.overlay-bigcard {
left: -7px; // (card width (126) - overlay width (140)) / 2
}
.hovered {
@ -511,6 +642,43 @@ button {
.crate-info {
padding: 1rem 0 0;
}
.crate-bar {
width: 100%;
font-size: 0.9rem;
.crate-mode {
text-align: left;
width: 75%;
display: inline;
a {
cursor: pointer;
margin-right: 1rem;
color: inherit;
text-decoration: none;
padding-bottom: 5px;
display: inline-block;
}
a.active {
font-weight: 700;
border-bottom: 3px solid $btn-primary-2;
}
}
.delete-crate {
text-decoration: none;
cursor: pointer;
text-align: right;
display: inline-flex;
width: 25%;
color: inherit;
img {
margin-left: 1rem;
align-self: center;
}
}
}
}
}
@ -543,4 +711,70 @@ button {
margin-left: -10px;
}
#accordion_crates {
background-color: inherit;
.accordion_crates_item {
.accordion-header {
padding-bottom: 0;
}
.accordion-button {
background-color: inherit;
font-weight: bold;
&:hover {
background-color: $color-highlight;
}
}
}
#accordion_crates_add {
.accordion-header {
padding-bottom: 0;
}
.accordion-button {
font-weight: bold;
&:hover {
background-color: $color-highlight;
}
}
.accordion-button:after {
background-image: url("/images/shop/icon-add.svg");
}
}
}
}
.k-popup-connectors,
.k-popup-warning {
background-color: $color-primary;
color: white;
font-weight: 700;
font-size: .6rem;
padding: .5rem .8rem;
box-shadow: 0 0.5rem 1rem rgba(0,0,0,0.15);
text-align: left;
p {
margin-bottom: 0;
}
}
.k-popup-connectors {
min-width: 200px;
}
.k-popup-warning {
background-color: #c75e5e;
min-width: 300px;
.rule.warning {
display: flex;
font-size: .75rem;
img {
margin-right: 10px;
height: 100%;
}
}
}

View File

@ -24,7 +24,8 @@ $btn-secondary-2: #a88cfd !default;
$link-primary-dark: #c2affd !default;
$link-secondary-dark: #cec2ea !default;
$color-hover: #eae7f7 !default;
$color-hover: #eae7f7 !default;
$color-highlight: #dfe9ff !default;
// Import partials.
@import

View File

@ -10,10 +10,18 @@ from flask import request
from flask_mail import Mail
from flask_mail import Message
from werkzeug.middleware.proxy_fix import ProxyFix
from jinja2.utils import htmlsafe_json_dumps
load_dotenv()
mail_password_file = getenv("FLASK_MAIL_PASSWORD_FILE")
if mail_password_file is not None:
with open(mail_password_file, "r") as f:
mail_password = f.read().strip()
else:
mail_password = None
app = Flask(__name__)
app.config.update(
DEBUG=getenv("FLASK_DEBUG") == "True",
@ -22,7 +30,7 @@ app.config.update(
MAIL_USE_SSL=getenv("FLASK_MAIL_USE_SSL"),
MAIL_DEBUG=False,
MAIL_USERNAME=getenv("FLASK_MAIL_USERNAME"),
MAIL_PASSWORD=getenv("FLASK_MAIL_PASSWORD"),
MAIL_PASSWORD=mail_password,
MAIL_RECIPIENT=getenv("FLASK_MAIL_RECIPIENT"),
MAIL_SENDER=getenv("FLASK_MAIL_SENDER")
)
@ -41,7 +49,7 @@ def after(response):
@app.route("/rfq", methods=["POST"])
def send_rfq():
payload = request.json
payload = json.loads(json.htmlsafe_dumps(payload))
payload = json.loads(htmlsafe_json_dumps(payload))
if payload is None:
resp = jsonify(error="invalid data")

File diff suppressed because one or more lines are too long

6
static/css/bootstrap-5.3.0.min.css vendored Normal file

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -4,40 +4,65 @@
padding: 1em 1em 0;
}
.simu-clone {
.simclone {
z-index: 10;
}
.feedback-add-success {
display: none;
}
#accordion_categories,
#accordion_categories .card {
background-color: inherit;
.feedback-add-failure {
background-color: #c75e5e;
display: block;
position: fixed;
top: 20px;
right: 20px;
padding: 1em;
z-index: 100000;
color: white;
border-radius: 10px;
box-shadow: 0 0 5px 3px;
}
#accordion_categories .card:not(:first-child) {
#accordion_categories,
#accordion_categories .accordion-header,
#accordion_categories .accordion-button,
#accordion_categories .accordion-item {
background-color: inherit;
border: none;
--bs-accordion-border-width: 0;
}
.accordion-button:focus {
box-shadow: none;
border-color: rgba(0,0,0,.125);
}
#accordion_categories .accordion-item:not(:first-child) {
border-top: thin rgba(255,255, 255, 20%) solid ;
border-radius: 0;
}
#accordion_categories .card-header {
#accordion_categories .accordion-header {
padding: 0;
}
#accordion_categories .accordion-button:after {
background-image: url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23ffffff'><path fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/></svg>");
}
#accordion_categories button {
color: white;
font-weight: bold;
font-size: 1.75rem;
padding: .75rem 2rem;
padding: .75rem 1.5rem;
}
#accordion_categories .card .card-body {
#accordion_categories .accordion-body {
padding: 0;
}
#accordion_categories .card-header:hover {
#accordion_categories .accordion-header:hover {
background-color: #1f4f68;
transition: 0.3s;
text-decoration: none;
@ -48,6 +73,10 @@
text-decoration: none;
}
.options-invalid {
box-shadow: 0 0 0 .25rem rgba(229, 62, 62, 0.25)!important;
--bs-border-opacity:1;border-color:rgba(var(--bs-danger-rgb),var(--bs-border-opacity))!important;
}
/*
##Device = Tablets, Ipads (portrait)
##Screen = B/w 768px to 1024px
@ -66,7 +95,15 @@
}
#root-shop, #root-shop>div {
height: calc(100vh - 50px);
height: calc(100vh - 10px - 2.5rem); /* .navbar vertical padding + line height (.navbar-brand.font-size.rem * body.font-size * body.line-height)*/
}
#root-shop .layout>aside.aside {
min-width: max(300px, 30%);
}
#root-shop .layout>aside.aside .gradient-bottom {
width: inherit;
}
#root-shop .productItem {
@ -86,7 +123,7 @@
}
#root-shop .productItem .content ul {
font-size: .6rem;
font-size: .75rem;
}
#root-shop .panel .control {
@ -95,11 +132,11 @@
}
#root-shop .panel .control > .description,
#root-shop .panel .control > .crate-mode {
#root-shop .crate-mode {
width: 100%;
}
#root-shop .panel .control > .crate-mode {
#root-shop .crate-mode {
text-align: left;
}
@ -108,10 +145,11 @@
}
#root-shop .panel .summary>.summary-price table {
font-size: 1rem;
font-size: 0.8rem;
}
#root-shop .panel .summary>.summary-form form {
#root-shop .panel .summary>.summary-form form,
#root-shop .panel .summary>.summary-form .order-bar {
width: 100%;
}
@ -137,7 +175,7 @@
}
#root-shop table tr {
padding: .8em 0;
padding: .2em 0;
display: flex !important;
justify-content: space-between;
}
@ -166,11 +204,11 @@
}
body {
font-size: .7rem;
font-size: .8rem;
}
#root-shop, #root-shop>div {
height: calc(100vh - 50px);
height: calc(100vh - 10px - 2.5rem); /* .navbar vertical padding + line height (.navbar-brand.font-size.rem * body.font-size * body.line-height)*/
}
#root-shop .mobileBtnDisplaySideMenu,
@ -191,7 +229,7 @@
}
#root-shop table tr {
padding: .8em 0;
padding: .2em 0;
display: flex !important;
justify-content: space-between;
}
@ -201,15 +239,16 @@
}
#root-shop .panel .summary>.summary-price table {
font-size: .7rem;
font-size: .8rem;
}
#root-shop .panel .summary>.summary-form form {
#root-shop .panel .summary>.summary-form form,
#root-shop .panel .summary>.summary-form .order-bar {
width: 100%;
}
#root-shop .panel .summary>.summary-price tfoot {
font-size: .85rem;
font-size: 1.0rem;
}
/*#root-shop .panel .summary>.summary-form form input[type="submit"] {
@ -230,7 +269,7 @@
##Screen = B/w 481px to 767px
*/
@media (min-width: 481px) and (max-width: 767px) {
.feedback-add-success {
.feedback-add-success, .feedback-add-failure {
background-color: green;
display: block;
position: fixed;
@ -242,6 +281,9 @@
border-radius: 10px;
box-shadow: 0 0 5px 3px;
}
.feedback-add-failure {
background-color: #c75e5e;
}
.dropdown-item {
font-size: .75em;
@ -258,12 +300,11 @@
}
body {
font-size: .7rem;
font-size: .8rem;
}
#root-shop, #root-shop>div {
/*height: calc(100vh - 50px);*/
height: 100%;
height: calc(100vh - 10px - 2.5rem); /* .navbar vertical padding + line height (.navbar-brand.font-size.rem * body.font-size * body.line-height)*/
}
#root-shop .productItem {
@ -279,11 +320,11 @@
}
#root-shop .productItem .content h3 {
font-size: 1rem;
font-size: 1.25rem;
}
#root-shop .productItem .content ul {
font-size: .5rem;
font-size: .75rem;
}
#root-shop .panel {
@ -295,13 +336,16 @@
margin-bottom: 1.5rem;
}
#root-shop .panel .control > .description,
#root-shop .panel .control > .crate-mode {
#root-shop .panel .control > .description {
width: 100%;
}
#root-shop .panel .control > .crate-mode {
#root-shop .panel .crate .crate-bar .crate-mode {
text-align: left;
width: 50%;
}
#root-shop .panel .crate .crate-bar .crate-mode a {
display: block;
}
#root-shop .panel .summary {
@ -313,15 +357,16 @@
}
#root-shop .panel .summary>.summary-price table {
font-size: .7rem;
font-size: .8rem;
}
#root-shop .panel .summary>.summary-form form {
#root-shop .panel .summary>.summary-form form,
#root-shop .panel .summary>.summary-form .order-bar {
width: 100%;
}
#root-shop .panel .summary>.summary-price tfoot {
font-size: .85rem;
font-size: 1rem;
}
/*#root-shop .panel .summary>.summary-form form input[type="submit"] {
@ -334,7 +379,6 @@
border-top-right-radius: 30px;
width: 80px;
padding: 5px 0 5px 10px;
margin-bottom: -25px;
margin-left: -1.3rem;
position: relative;
z-index: 1;
@ -353,7 +397,7 @@
}
#root-shop table tr {
padding: .8em 0;
padding: .2em 0;
display: flex !important;
justify-content: space-between;
}
@ -361,21 +405,22 @@
#root-shop .layout>aside.aside.menu-opened {
/*transform: translate3d(0, 0, 0);*/
transition: left .3s;
width: 310px;
width: min(310px, 60vw);
max-width: 60%;
left: 0;
}
#root-shop .layout>aside.aside.menu-opened + section.main {
/*transform: translate3d(310px, 0, 0);*/
transition: left .3s;
left: 310px;
left: min(310px, 60vw);
position: relative;
z-index: 0;
}
#root-shop .layout>aside.aside.menu-opened + section.main:after {
content: '';
position: absolute;
position: fixed;
height: 100%;
width: 100%;
background-color: rgba(0, 0, 0, .3);
@ -389,13 +434,13 @@
transition: left .3s;
position: fixed;
z-index: 1;
left: -310px;
width: 310px;
left: max(-310px, -60vw);
width: min(310px, 60vw);
height: 100%;
}
#root-shop .layout>aside.aside:after {
width: 0;
#root-shop .layout>aside.aside .gradient-bottom {
display: none;
}
#root-shop .layout>aside.aside + section.main {
@ -417,7 +462,7 @@
overflow: initial;
}
#root-shop .layout>aside.aside.menu-opened > .backlog-container {
#root-shop .layout>aside.aside.menu-opened > .catalog-container {
overflow-y: scroll;
height: 100%;
}
@ -427,7 +472,7 @@
}
#accordion_categories button {
font-size: 1rem;
font-size: 1.5rem;
padding: .5rem 0.5rem;
}
}
@ -436,7 +481,7 @@
##Screen = B/w 320px to 479px
*/
@media (min-width: 320px) and (max-width: 480px) {
.feedback-add-success {
.feedback-add-success, .feedback-add-failure {
background-color: green;
display: block;
position: fixed;
@ -448,6 +493,9 @@
border-radius: 10px;
box-shadow: 0 0 5px 3px;
}
.feedback-add-failure {
background-color: #c75e5e;
}
.dropdown-item {
font-size: .75em;
@ -464,11 +512,11 @@
}
body {
font-size: .7rem;
font-size: .8rem;
}
#root-shop, #root-shop>div {
height: calc(100vh - 50px);
height: calc(100vh - 10px - 2.5rem); /* .navbar vertical padding + line height (.navbar-brand.font-size.rem * body.font-size * body.line-height)*/
}
#root-shop .productItem {
@ -480,20 +528,21 @@
}
#root-shop .productItem .content h3 {
font-size: 1rem;
font-size: 1.25rem;
}
#root-shop .layout>aside.aside.menu-opened {
/*transform: translate3d(0, 0, 0);*/
transition: left .3s;
width: 310px;
width: min(310px, 90vw);
max-width: 90%;
left: 0;
}
#root-shop .layout>aside.aside.menu-opened + section.main {
/*transform: translate3d(310px, 0, 0);*/
transition: left .3s;
left: 310px;
left: min(310px, 90vw);
position: relative;
z-index: 0;
}
@ -513,13 +562,13 @@
transition: left .3s;
position: fixed;
z-index: 1;
left: -310px;
width: 310px;
left: max(-310px, -90vw);
width: min(310px, 90vw);
height: 100%;
}
#root-shop .layout>aside.aside:after {
width: 0;
#root-shop .layout>aside.aside .gradient-bottom {
display: none;
}
#root-shop .layout>aside.aside + section.main {
@ -558,13 +607,16 @@
font-size: 1.5rem;
}
#root-shop .panel .control > .description,
#root-shop .panel .control > .crate-mode {
#root-shop .panel .control > .description {
width: 100%;
}
#root-shop .panel .control > .crate-mode {
#root-shop .panel .crate .crate-bar .crate-mode {
text-align: left;
width: 50%;
}
#root-shop .panel .crate .crate-bar .crate-mode a {
display: block;
}
#root-shop .panel .summary {
@ -572,15 +624,16 @@
}
#root-shop .panel .summary>.summary-price table {
font-size: .7rem;
font-size: .8rem;
}
#root-shop .panel .summary>.summary-form form {
#root-shop .panel .summary>.summary-form form,
#root-shop .panel .summary>.summary-form .order-bar {
width: 100%;
}
#root-shop .panel .summary>.summary-price tfoot {
font-size: .85rem;
font-size: 1rem;
}
/*#root-shop .panel .summary>.summary-form form input[type="submit"] {
@ -593,7 +646,6 @@
border-top-right-radius: 30px;
width: 80px;
padding: 5px 0 5px 10px;
margin-bottom: 15px;
margin-left: -1.3rem;
}
@ -610,7 +662,7 @@
}
#root-shop table tr {
padding: .8em 0;
padding: .2em 0;
display: flex !important;
justify-content: space-between;
}
@ -619,7 +671,7 @@
overflow: initial;
}
#root-shop .layout>aside.aside.menu-opened > .backlog-container {
#root-shop .layout>aside.aside.menu-opened > .catalog-container {
overflow-y: scroll;
height: 100%;
}
@ -629,7 +681,7 @@
}
#accordion_categories button {
font-size: 1rem;
font-size: 1.5rem;
padding: .5rem 0.5rem;
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 67 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 508 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 458 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 455 KiB

View File

@ -0,0 +1 @@
<?xml version="1.0" ?><!DOCTYPE svg PUBLIC '-//W3C//DTD SVG 1.1//EN' 'http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd'><svg enable-background="new 0 0 128 128" height="128px" id="Layer_1" version="1.1" viewBox="0 0 128 128" width="128px" xml:space="preserve" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><g><g><path d="M127.744,46.594c-0.777-2.07-3.086-3.113-5.152-2.34L94.655,54.731L79.847,2.902 C79.354,1.184,77.784,0,75.999,0H52c-1.785,0-3.355,1.184-3.848,2.902L33.344,54.731L5.406,44.254 c-2.063-0.773-4.375,0.27-5.152,2.34c-0.773,2.07,0.273,4.375,2.34,5.152l30.421,11.408l27.32,62.447 c0.637,1.457,2.074,2.398,3.664,2.398s3.027-0.941,3.664-2.398l27.32-62.447l30.421-11.408 C127.471,50.969,128.518,48.664,127.744,46.594z M55.015,8h17.968l13.712,48H41.303L55.015,8z M63.999,114.016L42.117,64h43.765 L63.999,114.016z" fill="#81D4FA"/></g></g><path d="M95.999,8l23.999,40l-55.999,72L8,48L32,8H95.999L95.999,8 M95.999,0H32c-2.809,0-5.414,1.473-6.859,3.883 l-24,40c-1.699,2.836-1.484,6.422,0.543,9.027l55.999,72c1.516,1.949,3.848,3.09,6.316,3.09s4.801-1.141,6.316-3.09l55.999-72 c2.027-2.605,2.242-6.191,0.543-9.027l-23.999-40C101.413,1.473,98.808,0,95.999,0L95.999,0z" fill="#03A9F4"/></svg>

After

Width:  |  Height:  |  Size: 1.2 KiB

View File

@ -0,0 +1 @@
<?xml version="1.0" ?><!DOCTYPE svg PUBLIC '-//W3C//DTD SVG 1.1//EN' 'http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd'><svg enable-background="new 0 0 128 128" height="128px" id="Layer_1" version="1.1" viewBox="0 0 128 128" width="128px" xml:space="preserve" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><g><g><path d="M117.996,8.242C115.176,3.156,109.816,0,104,0H24c-5.816,0-11.176,3.156-13.996,8.242 c-2.816,5.086-2.656,11.305,0.43,16.234l11.605,18.57c1.809-2.055,3.742-3.992,5.832-5.766L17.215,20.234 c-1.539-2.461-1.621-5.57-0.215-8.109C18.41,9.578,21.094,8,24,8h80c2.906,0,5.59,1.578,6.996,4.117 c1.41,2.547,1.328,5.656-0.215,8.117l-10.656,17.047c2.09,1.773,4.027,3.711,5.836,5.766l11.605-18.57 C120.652,19.547,120.813,13.328,117.996,8.242z" fill="#F44336"/></g></g><path d="M64,56c13.234,0,24,10.766,24,24s-10.766,24-24,24S40,93.234,40,80S50.766,56,64,56 M64,48 c-17.672,0-32,14.328-32,32s14.328,32,32,32s32-14.328,32-32S81.672,48,64,48L64,48z" fill="#FFC107"/><path d="M64,40c22.055,0,40,17.945,40,40s-17.945,40-40,40s-40-17.945-40-40S41.945,40,64,40 M64,32 c-26.508,0-48,21.492-48,48s21.492,48,48,48s48-21.492,48-48S90.508,32,64,32L64,32z" fill="#FFA726"/></svg>

After

Width:  |  Height:  |  Size: 1.2 KiB

View File

@ -0,0 +1,65 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
enable-background="new 0 0 128 128"
height="128px"
id="Layer_1"
version="1.1"
viewBox="0 0 128 128"
width="128px"
xml:space="preserve"
sodipodi:docname="728958_economy_finance_money_shopping_currency_icon.svg"
inkscape:version="1.2.2 (b0a8486541, 2022-12-01)"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg"><defs
id="defs1174" /><sodipodi:namedview
id="namedview1172"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:showpageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#d1d1d1"
showgrid="false"
inkscape:zoom="6.2578125"
inkscape:cx="64.0799"
inkscape:cy="64.1598"
inkscape:window-width="1920"
inkscape:window-height="1011"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="1"
inkscape:current-layer="g1155" /><g
id="g1157"
style="display:inline"><g
id="g1155"><path
d="M 97.469,32 H 30.531 C 28.119,38.793 22.793,44.121 16,46.531 V 81.469 C 22.793,83.875 28.125,89.207 30.531,96 H 97.469 C 99.879,89.207 105.207,83.879 112,81.469 V 46.531 C 105.207,44.121 99.879,38.793 97.469,32 Z M 104,76.441 C 99.211,79.226 95.227,83.211 92.441,88 H 35.559 C 32.774,83.211 28.789,79.227 24,76.441 V 51.559 c 4.789,-2.785 8.773,-6.77 11.559,-11.559 19.783981,0 36.595699,0 56.882,0 2.785,4.789 6.77,8.773 11.559,11.559 z"
fill="#b0bec5"
id="path1153"
sodipodi:nodetypes="cccccccccccccccccc" /></g></g><path
d="m 64,48 c 8.824,0 16,7.176 16,16 0,8.824 -7.176,16 -16,16 -8.824,0 -16,-7.176 -16,-16 0,-8.824 7.176,-16 16,-16 m 0,-8 C 50.746,40 40,50.746 40,64 40,77.25 50.746,88 64,88 77.254,88 88,77.25 88,64 88,50.746 77.254,40 64,40 Z"
fill="#546e7a"
id="path1159"
style="display:inline" /><path
d="m 0,16 v 96 H 128 V 16 Z m 16,88 C 16,99.578 12.422,96 8,96 V 32 c 4.422,0 8,-3.578 8,-8 h 96 c 0,4.422 3.578,8 8,8 v 64 c -4.422,0 -8,3.578 -8,8 z"
fill="#546e7a"
id="path1161"
style="display:inline" /><path
d="m 20,40 c 2.211,0 4,-1.789 4,-4 0,-2.211 -1.789,-4 -4,-4 -2.211,0 -4,1.789 -4,4 0,2.211 1.789,4 4,4 z"
fill="#546e7a"
id="path1163"
style="display:inline" /><path
d="m 20,88 c -2.211,0 -4,1.789 -4,4 0,2.211 1.789,4 4,4 2.211,0 4,-1.789 4,-4 0,-2.211 -1.789,-4 -4,-4 z"
fill="#546e7a"
id="path1165"
style="display:inline" /><path
d="m 108,88 c -2.211,0 -4,1.789 -4,4 0,2.211 1.789,4 4,4 2.211,0 4,-1.789 4,-4 0,-2.211 -1.789,-4 -4,-4 z"
fill="#546e7a"
id="path1167"
style="display:inline" /><path
d="m 108,32 c -2.211,0 -4,1.789 -4,4 0,2.211 1.789,4 4,4 2.211,0 4,-1.789 4,-4 0,-2.211 -1.789,-4 -4,-4 z"
fill="#546e7a"
id="path1169"
style="display:inline" /></svg>

After

Width:  |  Height:  |  Size: 3.0 KiB

View File

@ -0,0 +1 @@
<svg version="1.1" viewBox="0 0 256 256" xmlns="http://www.w3.org/2000/svg"><g transform="matrix(1.1429 0 0 1.1429 -18.286 -4.5719)" stroke="#fff"><g fill="none" stroke-linecap="round" stroke-linejoin="round" stroke-width="15.999"><path d="m176 128h48a8 8 0 0 1 8 8v64a8 8 0 0 1-8 8h-192a8 8 0 0 1-8-8v-64a8 8 0 0 1 8-8h48"/><line x1="128" x2="128" y1="24" y2="128"/><polyline points="80 80 128 128 176 80"/></g><circle cx="188" cy="168" r="8" fill="#fff" stroke-width="3.9994"/></g></svg>

After

Width:  |  Height:  |  Size: 490 B

View File

@ -0,0 +1 @@
<svg width="48" height="48" version="1.1" viewBox="0 0 12.7 12.7" xmlns="http://www.w3.org/2000/svg"><g fill="#fff" stroke-linecap="round" stroke-opacity=".6" stroke-width=".35269"><path d="m0.52917 0.52917h5.5563v5.5563h-5.5563z"/><path d="m6.6146 0.52917h5.5563v5.5563h-5.5563z"/><path d="m0.52917 6.6146h5.5563v5.5563h-5.5563z"/><path d="m6.6146 6.6146h5.5563v5.5563h-5.5563z"/></g></svg>

After

Width:  |  Height:  |  Size: 392 B

View File

@ -0,0 +1 @@
<?xml version="1.0" ?><!DOCTYPE svg PUBLIC '-//W3C//DTD SVG 1.1//EN' 'http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd'><svg enable-background="new 0 0 128 128" height="128px" id="Layer_1" version="1.1" viewBox="0 0 128 128" width="128px" xml:space="preserve" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><g><g><path d="M117.996,8.242C115.176,3.156,109.816,0,104,0H24c-5.816,0-11.176,3.156-13.996,8.242 c-2.816,5.086-2.656,11.305,0.43,16.234l11.605,18.57c1.809-2.055,3.742-3.992,5.832-5.766L17.215,20.234 c-1.539-2.461-1.621-5.57-0.215-8.109C18.41,9.578,21.094,8,24,8h80c2.906,0,5.59,1.578,6.996,4.117 c1.41,2.547,1.328,5.656-0.215,8.117l-10.656,17.047c2.09,1.773,4.027,3.711,5.836,5.766l11.605-18.57 C120.652,19.547,120.813,13.328,117.996,8.242z" fill="#F44336"/></g></g><path d="M64,56c13.234,0,24,10.766,24,24s-10.766,24-24,24S40,93.234,40,80S50.766,56,64,56 M64,48 c-17.672,0-32,14.328-32,32s14.328,32,32,32s32-14.328,32-32S81.672,48,64,48L64,48z" fill="#BDBDBD"/><path d="M64,40c22.055,0,40,17.945,40,40s-17.945,40-40,40s-40-17.945-40-40S41.945,40,64,40 M64,32 c-26.508,0-48,21.492-48,48s21.492,48,48,48s48-21.492,48-48S90.508,32,64,32L64,32z" fill="#616161"/></svg>

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 351 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 54 KiB

After

Width:  |  Height:  |  Size: 52 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 46 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 31 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 41 KiB

After

Width:  |  Height:  |  Size: 42 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 33 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 37 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 117 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 76 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 47 KiB

After

Width:  |  Height:  |  Size: 44 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 37 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 35 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 28 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 34 KiB

View File

@ -0,0 +1 @@
<svg width="232" height="232" version="1.1" viewBox="0 0 232 232" xmlns="http://www.w3.org/2000/svg"><g transform="translate(-4.0001 -12)" fill="none" stroke="#715ec7" stroke-linecap="round" stroke-linejoin="round" stroke-width="16"><path d="m61.7 204.1-45.7-76.1 45.7-76.1a7.9 7.9 0 0 1 6.8-3.9h147.5a8 8 0 0 1 8 8v144a8 8 0 0 1-8 8h-147.5a7.9 7.9 0 0 1-6.8-3.9z"/><line x1="160" x2="112" y1="104" y2="152"/><line x1="160" x2="112" y1="152" y2="104"/></g></svg>

After

Width:  |  Height:  |  Size: 463 B

View File

@ -0,0 +1 @@
<svg enable-background="new 0 0 48 48" version="1.1" viewBox="0 0 48 48" xml:space="preserve" xmlns="http://www.w3.org/2000/svg"><g enable-background="new 0 0 48 48" fill="#715ec7"><path d="m36.9 6c-0.4-1.7-2-3-3.9-3s-3.4 1.3-3.9 3h-27.1v2h27.1c0.4 1.7 2 3 3.9 3s3.4-1.3 3.9-3h9.1v-2zm-3.9 3c-1.1 0-2-0.9-2-2s0.9-2 2-2 2 0.9 2 2-0.9 2-2 2z"/><path d="m33 37c-1.9 0-3.4 1.3-3.9 3h-27.1v2h27.1c0.4 1.7 2 3 3.9 3s3.4-1.3 3.9-3h9.1v-2h-9.1c-0.5-1.7-2-3-3.9-3zm0 6c-1.1 0-2-0.9-2-2s0.9-2 2-2 2 0.9 2 2-0.9 2-2 2z"/><path d="m15 20c-1.9 0-3.4 1.3-3.9 3h-9.1v2h9.1c0.4 1.7 2 3 3.9 3s3.4-1.3 3.9-3h27.1v-2h-27.1c-0.5-1.7-2-3-3.9-3zm0 6c-1.1 0-2-0.9-2-2s0.9-2 2-2 2 0.9 2 2-0.9 2-2 2z"/></g></svg>

After

Width:  |  Height:  |  Size: 689 B

View File

@ -0,0 +1 @@
<svg width="32" height="32" version="1.1" viewBox="0 0 8.4667 8.4667" xmlns="http://www.w3.org/2000/svg"><circle cx="4.2333" cy="4.2333" r="3.9077" fill="#d0423f" stroke="#d0423f" stroke-linecap="round" stroke-width=".65136"/></svg>

After

Width:  |  Height:  |  Size: 233 B

View File

@ -0,0 +1,39 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
width="512"
height="512"
version="1.1"
viewBox="0 0 512 512"
id="svg1"
sodipodi:docname="icon-search.svg"
inkscape:version="1.3.2 (091e20ef0f, 2023-11-25)"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<defs
id="defs1" />
<sodipodi:namedview
id="namedview1"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:showpageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#d1d1d1"
inkscape:zoom="1.59375"
inkscape:cx="255.68627"
inkscape:cy="256"
inkscape:window-width="1920"
inkscape:window-height="1011"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="1"
inkscape:current-layer="svg1" />
<path
d="M456.69,421.39,362.6,327.3a173.81,173.81,0,0,0,34.84-104.58C397.44,126.38,319.06,48,222.72,48S48,126.38,48,222.72s78.38,174.72,174.72,174.72A173.81,173.81,0,0,0,327.3,362.6l94.09,94.09a25,25,0,0,0,35.3-35.3ZM97.92,222.72a124.8,124.8,0,1,1,124.8,124.8A124.95,124.95,0,0,1,97.92,222.72Z"
fill="#fff"
id="path1"
style="fill:#ffffff;fill-opacity:0.5" />
</svg>

After

Width:  |  Height:  |  Size: 1.4 KiB

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load Diff

7
static/js/hammer.min.js vendored Normal file

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

2
static/js/jquery-3.7.0.min.js vendored Normal file

File diff suppressed because one or more lines are too long

2
static/js/jquery-3.7.0.slim.min.js vendored Normal file

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -1 +0,0 @@
!function(f){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=f();else if("function"==typeof define&&define.amd)define([],f);else{var g;g="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this,g.PropTypes=f()}}(function(){return function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a="function"==typeof require&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}for(var i="function"==typeof require&&require,o=0;o<r.length;o++)s(r[o]);return s}({1:[function(require,module){"use strict";function emptyFunction(){}var ReactPropTypesSecret=require(3);module.exports=function(){function e(e,r,t,o,n,p){if(p!==ReactPropTypesSecret){var c=new Error("Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. Read more at http://fb.me/use-check-prop-types");throw c.name="Invariant Violation",c}}function r(){return e}e.isRequired=e;var t={array:e,bool:e,func:e,number:e,object:e,string:e,symbol:e,any:e,arrayOf:r,element:e,instanceOf:r,node:e,objectOf:r,oneOf:r,oneOfType:r,shape:r,exact:r};return t.checkPropTypes=emptyFunction,t.PropTypes=t,t}},{3:3}],2:[function(require,module){module.exports=require(1)()},{1:1}],3:[function(require,module){"use strict";var ReactPropTypesSecret="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED";module.exports=ReactPropTypesSecret},{}]},{},[2])(2)});

File diff suppressed because one or more lines are too long

View File

@ -1,244 +0,0 @@
/** @license React v16.10.2
* react-dom.production.min.js
*
* Copyright (c) Facebook, Inc. and its affiliates.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*/
/*
Modernizr 3.0.0pre (Custom Build) | MIT
*/
'use strict';(function(la,l){"object"===typeof exports&&"undefined"!==typeof module?module.exports=l(require("react")):"function"===typeof define&&define.amd?define(["react"],l):la.ReactDOM=l(la.React)})(this,function(la){function l(a){for(var b=a.message,c="https://reactjs.org/docs/error-decoder.html?invariant="+b,d=1;d<arguments.length;d++)c+="&args[]="+encodeURIComponent(arguments[d]);a.message="Minified React error #"+b+"; visit "+c+" for the full message or use the non-minified dev environment for full errors and additional helpful warnings. ";
return a}function tf(){if(pc)for(var a in cb){var b=cb[a],c=pc.indexOf(a);if(!(-1<c))throw l(Error(96),a);if(!qc[c]){if(!b.extractEvents)throw l(Error(97),a);qc[c]=b;c=b.eventTypes;for(var d in c){var e=void 0;var f=c[d],g=b,h=d;if(yd.hasOwnProperty(h))throw l(Error(99),h);yd[h]=f;var k=f.phasedRegistrationNames;if(k){for(e in k)k.hasOwnProperty(e)&&uf(k[e],g,h);e=!0}else f.registrationName?(uf(f.registrationName,g,h),e=!0):e=!1;if(!e)throw l(Error(98),d,a);}}}}function uf(a,b,c){if(db[a])throw l(Error(100),
a);db[a]=b;zd[a]=b.eventTypes[c].dependencies}function vi(a,b,c,d,e,f,g,h,k){Eb=!1;rc=null;wi.apply(xi,arguments)}function yi(a,b,c,d,e,f,g,h,k){vi.apply(this,arguments);if(Eb){if(Eb){var m=rc;Eb=!1;rc=null}else throw l(Error(198));sc||(sc=!0,Ad=m)}}function vf(a,b,c){var d=a.type||"unknown-event";a.currentTarget=wf(c);yi(d,b,void 0,a);a.currentTarget=null}function eb(a,b){if(null==b)throw l(Error(30));if(null==a)return b;if(Array.isArray(a)){if(Array.isArray(b))return a.push.apply(a,b),a;a.push(b);
return a}return Array.isArray(b)?[a].concat(b):[a,b]}function Bd(a,b,c){Array.isArray(a)?a.forEach(b,c):a&&b.call(c,a)}function tc(a){null!==a&&(Fb=eb(Fb,a));a=Fb;Fb=null;if(a){Bd(a,zi);if(Fb)throw l(Error(95));if(sc)throw a=Ad,sc=!1,Ad=null,a;}}function xf(a,b){var c=a.stateNode;if(!c)return null;var d=Cd(c);if(!d)return null;c=d[b];a:switch(b){case "onClick":case "onClickCapture":case "onDoubleClick":case "onDoubleClickCapture":case "onMouseDown":case "onMouseDownCapture":case "onMouseMove":case "onMouseMoveCapture":case "onMouseUp":case "onMouseUpCapture":(d=
!d.disabled)||(a=a.type,d=!("button"===a||"input"===a||"select"===a||"textarea"===a));a=!d;break a;default:a=!1}if(a)return null;if(c&&"function"!==typeof c)throw l(Error(231),b,typeof c);return c}function Gb(a){if(null===a||"object"!==typeof a)return null;a=yf&&a[yf]||a["@@iterator"];return"function"===typeof a?a:null}function Ai(a){if(-1===a._status){a._status=0;var b=a._ctor;b=b();a._result=b;b.then(function(b){0===a._status&&(b=b.default,a._status=1,a._result=b)},function(b){0===a._status&&(a._status=
2,a._result=b)})}}function xa(a){if(null==a)return null;if("function"===typeof a)return a.displayName||a.name||null;if("string"===typeof a)return a;switch(a){case ya:return"Fragment";case fb:return"Portal";case uc:return"Profiler";case zf:return"StrictMode";case vc:return"Suspense";case Dd:return"SuspenseList"}if("object"===typeof a)switch(a.$$typeof){case Af:return"Context.Consumer";case Bf:return"Context.Provider";case Ed:var b=a.render;b=b.displayName||b.name||"";return a.displayName||(""!==b?
"ForwardRef("+b+")":"ForwardRef");case Fd:return xa(a.type);case Cf:if(a=1===a._status?a._result:null)return xa(a)}return null}function Gd(a){var b="";do{a:switch(a.tag){case 3:case 4:case 6:case 7:case 10:case 9:var c="";break a;default:var d=a._debugOwner,e=a._debugSource,f=xa(a.type);c=null;d&&(c=xa(d.type));d=f;f="";e?f=" (at "+e.fileName.replace(Bi,"")+":"+e.lineNumber+")":c&&(f=" (created by "+c+")");c="\n in "+(d||"Unknown")+f}b+=c;a=a.return}while(a);return b}function Df(a){if(a=Ef(a)){if("function"!==
typeof Hd)throw l(Error(280));var b=Cd(a.stateNode);Hd(a.stateNode,a.type,b)}}function Ff(a){gb?hb?hb.push(a):hb=[a]:gb=a}function Gf(){if(gb){var a=gb,b=hb;hb=gb=null;Df(a);if(b)for(a=0;a<b.length;a++)Df(b[a])}}function Id(){if(null!==gb||null!==hb)Jd(),Gf()}function Ci(a){if(Hf.call(If,a))return!0;if(Hf.call(Jf,a))return!1;if(Di.test(a))return If[a]=!0;Jf[a]=!0;return!1}function Ei(a,b,c,d){if(null!==c&&0===c.type)return!1;switch(typeof b){case "function":case "symbol":return!0;case "boolean":if(d)return!1;
if(null!==c)return!c.acceptsBooleans;a=a.toLowerCase().slice(0,5);return"data-"!==a&&"aria-"!==a;default:return!1}}function Fi(a,b,c,d){if(null===b||"undefined"===typeof b||Ei(a,b,c,d))return!0;if(d)return!1;if(null!==c)switch(c.type){case 3:return!b;case 4:return!1===b;case 5:return isNaN(b);case 6:return isNaN(b)||1>b}return!1}function K(a,b,c,d,e,f){this.acceptsBooleans=2===b||3===b||4===b;this.attributeName=d;this.attributeNamespace=e;this.mustUseProperty=c;this.propertyName=a;this.type=b;this.sanitizeURL=
f}function za(a){switch(typeof a){case "boolean":case "number":case "object":case "string":case "undefined":return a;default:return""}}function Kd(a,b,c,d){var e=H.hasOwnProperty(b)?H[b]:null;var f=null!==e?0===e.type:d?!1:!(2<b.length)||"o"!==b[0]&&"O"!==b[0]||"n"!==b[1]&&"N"!==b[1]?!1:!0;f||(Fi(b,c,e,d)&&(c=null),d||null===e?Ci(b)&&(null===c?a.removeAttribute(b):a.setAttribute(b,""+c)):e.mustUseProperty?a[e.propertyName]=null===c?3===e.type?!1:"":c:(b=e.attributeName,d=e.attributeNamespace,null===
c?a.removeAttribute(b):(e=e.type,c=3===e||4===e&&!0===c?"":""+c,d?a.setAttributeNS(d,b,c):a.setAttribute(b,c))))}function Kf(a){var b=a.type;return(a=a.nodeName)&&"input"===a.toLowerCase()&&("checkbox"===b||"radio"===b)}function Gi(a){var b=Kf(a)?"checked":"value",c=Object.getOwnPropertyDescriptor(a.constructor.prototype,b),d=""+a[b];if(!a.hasOwnProperty(b)&&"undefined"!==typeof c&&"function"===typeof c.get&&"function"===typeof c.set){var e=c.get,f=c.set;Object.defineProperty(a,b,{configurable:!0,
get:function(){return e.call(this)},set:function(a){d=""+a;f.call(this,a)}});Object.defineProperty(a,b,{enumerable:c.enumerable});return{getValue:function(){return d},setValue:function(a){d=""+a},stopTracking:function(){a._valueTracker=null;delete a[b]}}}}function wc(a){a._valueTracker||(a._valueTracker=Gi(a))}function Lf(a){if(!a)return!1;var b=a._valueTracker;if(!b)return!0;var c=b.getValue();var d="";a&&(d=Kf(a)?a.checked?"true":"false":a.value);a=d;return a!==c?(b.setValue(a),!0):!1}function Ld(a,
b){var c=b.checked;return J({},b,{defaultChecked:void 0,defaultValue:void 0,value:void 0,checked:null!=c?c:a._wrapperState.initialChecked})}function Mf(a,b){var c=null==b.defaultValue?"":b.defaultValue,d=null!=b.checked?b.checked:b.defaultChecked;c=za(null!=b.value?b.value:c);a._wrapperState={initialChecked:d,initialValue:c,controlled:"checkbox"===b.type||"radio"===b.type?null!=b.checked:null!=b.value}}function Nf(a,b){b=b.checked;null!=b&&Kd(a,"checked",b,!1)}function Md(a,b){Nf(a,b);var c=za(b.value),
d=b.type;if(null!=c)if("number"===d){if(0===c&&""===a.value||a.value!=c)a.value=""+c}else a.value!==""+c&&(a.value=""+c);else if("submit"===d||"reset"===d){a.removeAttribute("value");return}b.hasOwnProperty("value")?Nd(a,b.type,c):b.hasOwnProperty("defaultValue")&&Nd(a,b.type,za(b.defaultValue));null==b.checked&&null!=b.defaultChecked&&(a.defaultChecked=!!b.defaultChecked)}function Of(a,b,c){if(b.hasOwnProperty("value")||b.hasOwnProperty("defaultValue")){var d=b.type;if(!("submit"!==d&&"reset"!==
d||void 0!==b.value&&null!==b.value))return;b=""+a._wrapperState.initialValue;c||b===a.value||(a.value=b);a.defaultValue=b}c=a.name;""!==c&&(a.name="");a.defaultChecked=!a.defaultChecked;a.defaultChecked=!!a._wrapperState.initialChecked;""!==c&&(a.name=c)}function Nd(a,b,c){if("number"!==b||a.ownerDocument.activeElement!==a)null==c?a.defaultValue=""+a._wrapperState.initialValue:a.defaultValue!==""+c&&(a.defaultValue=""+c)}function Hi(a){var b="";la.Children.forEach(a,function(a){null!=a&&(b+=a)});
return b}function Od(a,b){a=J({children:void 0},b);if(b=Hi(b.children))a.children=b;return a}function ib(a,b,c,d){a=a.options;if(b){b={};for(var e=0;e<c.length;e++)b["$"+c[e]]=!0;for(c=0;c<a.length;c++)e=b.hasOwnProperty("$"+a[c].value),a[c].selected!==e&&(a[c].selected=e),e&&d&&(a[c].defaultSelected=!0)}else{c=""+za(c);b=null;for(e=0;e<a.length;e++){if(a[e].value===c){a[e].selected=!0;d&&(a[e].defaultSelected=!0);return}null!==b||a[e].disabled||(b=a[e])}null!==b&&(b.selected=!0)}}function Pd(a,b){if(null!=
b.dangerouslySetInnerHTML)throw l(Error(91));return J({},b,{value:void 0,defaultValue:void 0,children:""+a._wrapperState.initialValue})}function Pf(a,b){var c=b.value;if(null==c){c=b.defaultValue;b=b.children;if(null!=b){if(null!=c)throw l(Error(92));if(Array.isArray(b)){if(!(1>=b.length))throw l(Error(93));b=b[0]}c=b}null==c&&(c="")}a._wrapperState={initialValue:za(c)}}function Qf(a,b){var c=za(b.value),d=za(b.defaultValue);null!=c&&(c=""+c,c!==a.value&&(a.value=c),null==b.defaultValue&&a.defaultValue!==
c&&(a.defaultValue=c));null!=d&&(a.defaultValue=""+d)}function Rf(a,b){b=a.textContent;b===a._wrapperState.initialValue&&""!==b&&null!==b&&(a.value=b)}function Sf(a){switch(a){case "svg":return"http://www.w3.org/2000/svg";case "math":return"http://www.w3.org/1998/Math/MathML";default:return"http://www.w3.org/1999/xhtml"}}function Qd(a,b){return null==a||"http://www.w3.org/1999/xhtml"===a?Sf(b):"http://www.w3.org/2000/svg"===a&&"foreignObject"===b?"http://www.w3.org/1999/xhtml":a}function xc(a,b){var c=
{};c[a.toLowerCase()]=b.toLowerCase();c["Webkit"+a]="webkit"+b;c["Moz"+a]="moz"+b;return c}function yc(a){if(Rd[a])return Rd[a];if(!jb[a])return a;var b=jb[a],c;for(c in b)if(b.hasOwnProperty(c)&&c in Tf)return Rd[a]=b[c];return a}function Ii(a){var b=Sd(a);Td.forEach(function(c){Ud(c,a,b)});Ji.forEach(function(c){Ud(c,a,b)})}function Vd(a,b,c,d){return{blockedOn:a,topLevelType:b,eventSystemFlags:c|32,nativeEvent:d}}function Uf(a,b){switch(a){case "focus":case "blur":Aa=null;break;case "dragenter":case "dragleave":Ba=
null;break;case "mouseover":case "mouseout":Ca=null;break;case "pointerover":case "pointerout":Hb.delete(b.pointerId);break;case "gotpointercapture":case "lostpointercapture":Ib.delete(b.pointerId)}}function Jb(a,b,c,d,e){if(null===a||a.nativeEvent!==e)return Vd(b,c,d,e);a.eventSystemFlags|=d;return a}function Ki(a,b,c,d){switch(b){case "focus":return Aa=Jb(Aa,a,b,c,d),!0;case "dragenter":return Ba=Jb(Ba,a,b,c,d),!0;case "mouseover":return Ca=Jb(Ca,a,b,c,d),!0;case "pointerover":var e=d.pointerId;
Hb.set(e,Jb(Hb.get(e)||null,a,b,c,d));return!0;case "gotpointercapture":return e=d.pointerId,Ib.set(e,Jb(Ib.get(e)||null,a,b,c,d)),!0}return!1}function zc(a){if(null!==a.blockedOn)return!1;var b=Wd(a.topLevelType,a.eventSystemFlags,a.nativeEvent);return null!==b?(a.blockedOn=b,!1):!0}function Vf(a,b,c){zc(a)&&c.delete(b)}function Li(){for(Xd=!1;0<ca.length;){var a=ca[0];if(null!==a.blockedOn)break;var b=Wd(a.topLevelType,a.eventSystemFlags,a.nativeEvent);null!==b?a.blockedOn=b:ca.shift()}null!==Aa&&
zc(Aa)&&(Aa=null);null!==Ba&&zc(Ba)&&(Ba=null);null!==Ca&&zc(Ca)&&(Ca=null);Hb.forEach(Vf);Ib.forEach(Vf)}function Kb(a,b){a.blockedOn===b&&(a.blockedOn=null,Xd||(Xd=!0,Wf(Xf,Li)))}function Yf(a){if(0<ca.length){Kb(ca[0],a);for(var b=1;b<ca.length;b++){var c=ca[b];c.blockedOn===a&&(c.blockedOn=null)}}null!==Aa&&Kb(Aa,a);null!==Ba&&Kb(Ba,a);null!==Ca&&Kb(Ca,a);b=function(b){return Kb(b,a)};Hb.forEach(b);Ib.forEach(b)}function kb(a){var b=a,c=a;if(a.alternate)for(;b.return;)b=b.return;else{a=b;do b=
a,(b.effectTag&(I|Da))!==C&&(c=b.return),a=b.return;while(a)}return 3===b.tag?c:null}function Zf(a){if(kb(a)!==a)throw l(Error(188));}function Mi(a){var b=a.alternate;if(!b){b=kb(a);if(null===b)throw l(Error(188));return b!==a?null:a}for(var c=a,d=b;;){var e=c.return;if(null===e)break;var f=e.alternate;if(null===f){d=e.return;if(null!==d){c=d;continue}break}if(e.child===f.child){for(f=e.child;f;){if(f===c)return Zf(e),a;if(f===d)return Zf(e),b;f=f.sibling}throw l(Error(188));}if(c.return!==d.return)c=
e,d=f;else{for(var g=!1,h=e.child;h;){if(h===c){g=!0;c=e;d=f;break}if(h===d){g=!0;d=e;c=f;break}h=h.sibling}if(!g){for(h=f.child;h;){if(h===c){g=!0;c=f;d=e;break}if(h===d){g=!0;d=f;c=e;break}h=h.sibling}if(!g)throw l(Error(189));}}if(c.alternate!==d)throw l(Error(190));}if(3!==c.tag)throw l(Error(188));return c.stateNode.current===c?a:b}function $f(a){a=Mi(a);if(!a)return null;for(var b=a;;){if(5===b.tag||6===b.tag)return b;if(b.child)b.child.return=b,b=b.child;else{if(b===a)break;for(;!b.sibling;){if(!b.return||
b.return===a)return null;b=b.return}b.sibling.return=b.return;b=b.sibling}}return null}function Yd(a){a=a.target||a.srcElement||window;a.correspondingUseElement&&(a=a.correspondingUseElement);return 3===a.nodeType?a.parentNode:a}function ma(a){do a=a.return;while(a&&5!==a.tag);return a?a:null}function ag(a,b,c){if(b=xf(a,c.dispatchConfig.phasedRegistrationNames[b]))c._dispatchListeners=eb(c._dispatchListeners,b),c._dispatchInstances=eb(c._dispatchInstances,a)}function Ni(a){if(a&&a.dispatchConfig.phasedRegistrationNames){for(var b=
a._targetInst,c=[];b;)c.push(b),b=ma(b);for(b=c.length;0<b--;)ag(c[b],"captured",a);for(b=0;b<c.length;b++)ag(c[b],"bubbled",a)}}function Zd(a,b,c){a&&c&&c.dispatchConfig.registrationName&&(b=xf(a,c.dispatchConfig.registrationName))&&(c._dispatchListeners=eb(c._dispatchListeners,b),c._dispatchInstances=eb(c._dispatchInstances,a))}function Oi(a){a&&a.dispatchConfig.registrationName&&Zd(a._targetInst,null,a)}function lb(a){Bd(a,Ni)}function Ac(){return!0}function Bc(){return!1}function O(a,b,c,d){this.dispatchConfig=
a;this._targetInst=b;this.nativeEvent=c;a=this.constructor.Interface;for(var e in a)a.hasOwnProperty(e)&&((b=a[e])?this[e]=b(c):"target"===e?this.target=d:this[e]=c[e]);this.isDefaultPrevented=(null!=c.defaultPrevented?c.defaultPrevented:!1===c.returnValue)?Ac:Bc;this.isPropagationStopped=Bc;return this}function Pi(a,b,c,d){if(this.eventPool.length){var e=this.eventPool.pop();this.call(e,a,b,c,d);return e}return new this(a,b,c,d)}function Qi(a){if(!(a instanceof this))throw l(Error(279));a.destructor();
10>this.eventPool.length&&this.eventPool.push(a)}function bg(a){a.eventPool=[];a.getPooled=Pi;a.release=Qi}function Cc(a){var b=a.keyCode;"charCode"in a?(a=a.charCode,0===a&&13===b&&(a=13)):a=b;10===a&&(a=13);return 32<=a||13===a?a:0}function Ri(a){var b=this.nativeEvent;return b.getModifierState?b.getModifierState(a):(a=Si[a])?!!b[a]:!1}function $d(a){return Ri}function Ti(a){var b=a.targetInst,c=b;do{if(!c){a.ancestors.push(c);break}var d=c;if(3===d.tag)d=d.stateNode.containerInfo;else{for(;d.return;)d=
d.return;d=3!==d.tag?null:d.stateNode.containerInfo}if(!d)break;b=c.tag;5!==b&&6!==b||a.ancestors.push(c);c=Dc(d)}while(c);for(c=0;c<a.ancestors.length;c++){b=a.ancestors[c];var e=Yd(a.nativeEvent);d=a.topLevelType;for(var f=a.nativeEvent,g=a.eventSystemFlags,h=null,k=0;k<qc.length;k++){var m=qc[k];m&&(m=m.extractEvents(d,b,f,e,g))&&(h=eb(h,m))}tc(h)}}function x(a,b){Lb(b,a,!1)}function Lb(a,b,c){switch(Ui(b)){case 0:var d=Vi.bind(null,b,1);break;case 1:d=Wi.bind(null,b,1);break;default:d=Ec.bind(null,
b,1)}c?a.addEventListener(b,d,!0):a.addEventListener(b,d,!1)}function Vi(a,b,c){Oa||Jd();var d=Ec,e=Oa;Oa=!0;try{cg(d,a,b,c)}finally{(Oa=e)||Id()}}function Wi(a,b,c){Ec(a,b,c)}function dg(a,b,c,d){if(Fc.length){var e=Fc.pop();e.topLevelType=a;e.eventSystemFlags=b;e.nativeEvent=c;e.targetInst=d;a=e}else a={topLevelType:a,eventSystemFlags:b,nativeEvent:c,targetInst:d,ancestors:[]};try{if(b=Ti,c=a,ae)b(c,void 0);else{ae=!0;try{eg(b,c,void 0)}finally{ae=!1,Id()}}}finally{a.topLevelType=null,a.nativeEvent=
null,a.targetInst=null,a.ancestors.length=0,Fc.length<Xi&&Fc.push(a)}}function Ec(a,b,c){if(Gc)if(0<ca.length&&-1<Td.indexOf(a))a=Vd(null,a,b,c),ca.push(a);else{var d=Wd(a,b,c);null===d?Uf(a,c):-1<Td.indexOf(a)?(a=Vd(d,a,b,c),ca.push(a)):Ki(d,a,b,c)||(Uf(a,c),dg(a,b,c,null))}}function Wd(a,b,c){var d=Yd(c),e=Dc(d);if(null!==e)if(d=kb(e),null===d)e=null;else{var f=d.tag;if(13===f){a:{if(13===d.tag&&(e=d.memoizedState,null===e&&(d=d.alternate,null!==d&&(e=d.memoizedState)),null!==e)){d=e.dehydrated;
break a}d=null}if(null!==d)return d;e=null}else if(3===f){if(d.stateNode.hydrate)return 3===d.tag?d.stateNode.containerInfo:null;e=null}else d!==e&&(e=null)}dg(a,b,c,e);return null}function fg(a){if(!Ea)return!1;a="on"+a;var b=a in document;b||(b=document.createElement("div"),b.setAttribute(a,"return;"),b="function"===typeof b[a]);return b}function Sd(a){var b=gg.get(a);void 0===b&&(b=new Set,gg.set(a,b));return b}function Ud(a,b,c){if(!c.has(a)){switch(a){case "scroll":Lb(b,"scroll",!0);break;case "focus":case "blur":Lb(b,
"focus",!0);Lb(b,"blur",!0);c.add("blur");c.add("focus");break;case "cancel":case "close":fg(a)&&Lb(b,a,!0);break;case "invalid":case "submit":case "reset":break;default:-1===Mb.indexOf(a)&&x(a,b)}c.add(a)}}function hg(a,b,c){return null==b||"boolean"===typeof b||""===b?"":c||"number"!==typeof b||0===b||Nb.hasOwnProperty(a)&&Nb[a]?(""+b).trim():b+"px"}function ig(a,b){a=a.style;for(var c in b)if(b.hasOwnProperty(c)){var d=0===c.indexOf("--"),e=hg(c,b[c],d);"float"===c&&(c="cssFloat");d?a.setProperty(c,
e):a[c]=e}}function be(a,b){if(b){if(Yi[a]&&(null!=b.children||null!=b.dangerouslySetInnerHTML))throw l(Error(137),a,"");if(null!=b.dangerouslySetInnerHTML){if(null!=b.children)throw l(Error(60));if(!("object"===typeof b.dangerouslySetInnerHTML&&"__html"in b.dangerouslySetInnerHTML))throw l(Error(61));}if(null!=b.style&&"object"!==typeof b.style)throw l(Error(62),"");}}function ce(a,b){if(-1===a.indexOf("-"))return"string"===typeof b.is;switch(a){case "annotation-xml":case "color-profile":case "font-face":case "font-face-src":case "font-face-uri":case "font-face-format":case "font-face-name":case "missing-glyph":return!1;
default:return!0}}function na(a,b){a=9===a.nodeType||11===a.nodeType?a:a.ownerDocument;var c=Sd(a);b=zd[b];for(var d=0;d<b.length;d++)Ud(b[d],a,c)}function Hc(){}function de(a){a=a||("undefined"!==typeof document?document:void 0);if("undefined"===typeof a)return null;try{return a.activeElement||a.body}catch(b){return a.body}}function jg(a){for(;a&&a.firstChild;)a=a.firstChild;return a}function kg(a,b){var c=jg(a);a=0;for(var d;c;){if(3===c.nodeType){d=a+c.textContent.length;if(a<=b&&d>=b)return{node:c,
offset:b-a};a=d}a:{for(;c;){if(c.nextSibling){c=c.nextSibling;break a}c=c.parentNode}c=void 0}c=jg(c)}}function lg(a,b){return a&&b?a===b?!0:a&&3===a.nodeType?!1:b&&3===b.nodeType?lg(a,b.parentNode):"contains"in a?a.contains(b):a.compareDocumentPosition?!!(a.compareDocumentPosition(b)&16):!1:!1}function mg(){for(var a=window,b=de();b instanceof a.HTMLIFrameElement;){try{var c="string"===typeof b.contentWindow.location.href}catch(d){c=!1}if(c)a=b.contentWindow;else break;b=de(a.document)}return b}
function ee(a){var b=a&&a.nodeName&&a.nodeName.toLowerCase();return b&&("input"===b&&("text"===a.type||"search"===a.type||"tel"===a.type||"url"===a.type||"password"===a.type)||"textarea"===b||"true"===a.contentEditable)}function ng(a,b){switch(a){case "button":case "input":case "select":case "textarea":return!!b.autoFocus}return!1}function fe(a,b){return"textarea"===a||"option"===a||"noscript"===a||"string"===typeof b.children||"number"===typeof b.children||"object"===typeof b.dangerouslySetInnerHTML&&
null!==b.dangerouslySetInnerHTML&&null!=b.dangerouslySetInnerHTML.__html}function mb(a){for(;null!=a;a=a.nextSibling){var b=a.nodeType;if(1===b||3===b)break}return a}function og(a){a=a.previousSibling;for(var b=0;a;){if(a.nodeType===Pa){var c=a.data;if(c===pg||c===ge||c===he){if(0===b)return a;b--}else c===qg&&b++}a=a.previousSibling}return null}function Dc(a){var b=a[Fa];if(b)return b;for(var c=a.parentNode;c;){if(b=c[ie]||c[Fa]){c=b.alternate;if(null!==b.child||null!==c&&null!==c.child)for(a=og(a);null!==
a;){if(c=a[Fa])return c;a=og(a)}return b}a=c;c=a.parentNode}return null}function rg(a){a=a[Fa]||a[ie];return!a||5!==a.tag&&6!==a.tag&&13!==a.tag&&3!==a.tag?null:a}function Qa(a){if(5===a.tag||6===a.tag)return a.stateNode;throw l(Error(33));}function je(a){return a[Ic]||null}function sg(){if(Jc)return Jc;var a,b=ke,c=b.length,d,e="value"in Ga?Ga.value:Ga.textContent,f=e.length;for(a=0;a<c&&b[a]===e[a];a++);var g=c-a;for(d=1;d<=g&&b[c-d]===e[f-d];d++);return Jc=e.slice(a,1<d?1-d:void 0)}function tg(a,
b){switch(a){case "keyup":return-1!==Zi.indexOf(b.keyCode);case "keydown":return 229!==b.keyCode;case "keypress":case "mousedown":case "blur":return!0;default:return!1}}function ug(a){a=a.detail;return"object"===typeof a&&"data"in a?a.data:null}function $i(a,b){switch(a){case "compositionend":return ug(b);case "keypress":if(32!==b.which)return null;vg=!0;return wg;case "textInput":return a=b.data,a===wg&&vg?null:a;default:return null}}function aj(a,b){if(nb)return"compositionend"===a||!le&&tg(a,b)?
(a=sg(),Jc=ke=Ga=null,nb=!1,a):null;switch(a){case "paste":return null;case "keypress":if(!(b.ctrlKey||b.altKey||b.metaKey)||b.ctrlKey&&b.altKey){if(b.char&&1<b.char.length)return b.char;if(b.which)return String.fromCharCode(b.which)}return null;case "compositionend":return xg&&"ko"!==b.locale?null:b.data;default:return null}}function yg(a){var b=a&&a.nodeName&&a.nodeName.toLowerCase();return"input"===b?!!bj[a.type]:"textarea"===b?!0:!1}function zg(a,b,c){a=O.getPooled(Ag.change,a,b,c);a.type="change";
Ff(c);lb(a);return a}function cj(a){tc(a)}function Kc(a){var b=Qa(a);if(Lf(b))return a}function dj(a,b){if("change"===a)return b}function Bg(){Ob&&(Ob.detachEvent("onpropertychange",Cg),Pb=Ob=null)}function Cg(a){if("value"===a.propertyName&&Kc(Pb))if(a=zg(Pb,a,Yd(a)),Oa)tc(a);else{Oa=!0;try{me(cj,a)}finally{Oa=!1,Id()}}}function ej(a,b,c){"focus"===a?(Bg(),Ob=b,Pb=c,Ob.attachEvent("onpropertychange",Cg)):"blur"===a&&Bg()}function fj(a,b){if("selectionchange"===a||"keyup"===a||"keydown"===a)return Kc(Pb)}
function gj(a,b){if("click"===a)return Kc(b)}function hj(a,b){if("input"===a||"change"===a)return Kc(b)}function ij(a,b){return a===b&&(0!==a||1/a===1/b)||a!==a&&b!==b}function Qb(a,b){if(Ra(a,b))return!0;if("object"!==typeof a||null===a||"object"!==typeof b||null===b)return!1;var c=Object.keys(a),d=Object.keys(b);if(c.length!==d.length)return!1;for(d=0;d<c.length;d++)if(!jj.call(b,c[d])||!Ra(a[c[d]],b[c[d]]))return!1;return!0}function Dg(a,b){var c=b.window===b?b.document:9===b.nodeType?b:b.ownerDocument;
if(ne||null==ob||ob!==de(c))return null;c=ob;"selectionStart"in c&&ee(c)?c={start:c.selectionStart,end:c.selectionEnd}:(c=(c.ownerDocument&&c.ownerDocument.defaultView||window).getSelection(),c={anchorNode:c.anchorNode,anchorOffset:c.anchorOffset,focusNode:c.focusNode,focusOffset:c.focusOffset});return Rb&&Qb(Rb,c)?null:(Rb=c,a=O.getPooled(Eg.select,oe,a,b),a.type="select",a.target=ob,lb(a),a)}function B(a,b){0>pb||(a.current=pe[pb],pe[pb]=null,pb--)}function y(a,b,c){pb++;pe[pb]=a.current;a.current=
b}function qb(a,b){var c=a.type.contextTypes;if(!c)return Ha;var d=a.stateNode;if(d&&d.__reactInternalMemoizedUnmaskedChildContext===b)return d.__reactInternalMemoizedMaskedChildContext;var e={},f;for(f in c)e[f]=b[f];d&&(a=a.stateNode,a.__reactInternalMemoizedUnmaskedChildContext=b,a.__reactInternalMemoizedMaskedChildContext=e);return e}function L(a){a=a.childContextTypes;return null!==a&&void 0!==a}function Lc(a){B(M,a);B(P,a)}function qe(a){B(M,a);B(P,a)}function Fg(a,b,c){if(P.current!==Ha)throw l(Error(168));
y(P,b,a);y(M,c,a)}function Gg(a,b,c){var d=a.stateNode;a=b.childContextTypes;if("function"!==typeof d.getChildContext)return c;d=d.getChildContext();for(var e in d)if(!(e in a))throw l(Error(108),xa(b)||"Unknown",e);return J({},c,{},d)}function Mc(a){var b=a.stateNode;b=b&&b.__reactInternalMemoizedMergedChildContext||Ha;Sa=P.current;y(P,b,a);y(M,M.current,a);return!0}function Hg(a,b,c){var d=a.stateNode;if(!d)throw l(Error(169));c?(b=Gg(a,b,Sa),d.__reactInternalMemoizedMergedChildContext=b,B(M,a),
B(P,a),y(P,b,a)):B(M,a);y(M,c,a)}function re(){switch(kj()){case Nc:return 99;case Ig:return 98;case Jg:return 97;case Kg:return 96;case Lg:return 95;default:throw l(Error(332));}}function Mg(a){switch(a){case 99:return Nc;case 98:return Ig;case 97:return Jg;case 96:return Kg;case 95:return Lg;default:throw l(Error(332));}}function Ta(a,b){a=Mg(a);return lj(a,b)}function se(a,b,c){a=Mg(a);return te(a,b,c)}function Ng(a){null===oa?(oa=[a],Oc=te(Nc,Og)):oa.push(a);return Pg}function W(){if(null!==Oc){var a=
Oc;Oc=null;Qg(a)}Og()}function Og(){if(!ue&&null!==oa){ue=!0;var a=0;try{var b=oa;Ta(99,function(){for(;a<b.length;a++){var c=b[a];do c=c(!0);while(null!==c)}});oa=null}catch(c){throw null!==oa&&(oa=oa.slice(a+1)),te(Nc,W),c;}finally{ue=!1}}}function Y(a,b){if(a&&a.defaultProps){b=J({},b);a=a.defaultProps;for(var c in a)void 0===b[c]&&(b[c]=a[c])}return b}function ve(){Pc=rb=Qc=null}function Rg(a,b){var c=a.type._context;y(we,c._currentValue,a);c._currentValue=b}function xe(a){var b=we.current;B(we,
a);a.type._context._currentValue=b}function Sg(a,b){for(;null!==a;){var c=a.alternate;if(a.childExpirationTime<b)a.childExpirationTime=b,null!==c&&c.childExpirationTime<b&&(c.childExpirationTime=b);else if(null!==c&&c.childExpirationTime<b)c.childExpirationTime=b;else break;a=a.return}}function sb(a,b){Qc=a;Pc=rb=null;a=a.dependencies;null!==a&&null!==a.firstContext&&(a.expirationTime>=b&&(da=!0),a.firstContext=null)}function ea(a,b){if(Pc!==a&&!1!==b&&0!==b){if("number"!==typeof b||1073741823===
b)Pc=a,b=1073741823;b={context:a,observedBits:b,next:null};if(null===rb){if(null===Qc)throw l(Error(308));rb=b;Qc.dependencies={expirationTime:0,firstContext:b,responders:null}}else rb=rb.next=b}return a._currentValue}function Rc(a){return{baseState:a,firstUpdate:null,lastUpdate:null,firstCapturedUpdate:null,lastCapturedUpdate:null,firstEffect:null,lastEffect:null,firstCapturedEffect:null,lastCapturedEffect:null}}function ye(a){return{baseState:a.baseState,firstUpdate:a.firstUpdate,lastUpdate:a.lastUpdate,
firstCapturedUpdate:null,lastCapturedUpdate:null,firstEffect:null,lastEffect:null,firstCapturedEffect:null,lastCapturedEffect:null}}function Ia(a,b){return{expirationTime:a,suspenseConfig:b,tag:Tg,payload:null,callback:null,next:null,nextEffect:null}}function Sc(a,b){null===a.lastUpdate?a.firstUpdate=a.lastUpdate=b:(a.lastUpdate.next=b,a.lastUpdate=b)}function Ja(a,b){var c=a.alternate;if(null===c){var d=a.updateQueue;var e=null;null===d&&(d=a.updateQueue=Rc(a.memoizedState))}else d=a.updateQueue,
e=c.updateQueue,null===d?null===e?(d=a.updateQueue=Rc(a.memoizedState),e=c.updateQueue=Rc(c.memoizedState)):d=a.updateQueue=ye(e):null===e&&(e=c.updateQueue=ye(d));null===e||d===e?Sc(d,b):null===d.lastUpdate||null===e.lastUpdate?(Sc(d,b),Sc(e,b)):(Sc(d,b),e.lastUpdate=b)}function Ug(a,b){var c=a.updateQueue;c=null===c?a.updateQueue=Rc(a.memoizedState):Vg(a,c);null===c.lastCapturedUpdate?c.firstCapturedUpdate=c.lastCapturedUpdate=b:(c.lastCapturedUpdate.next=b,c.lastCapturedUpdate=b)}function Vg(a,
b){var c=a.alternate;null!==c&&b===c.updateQueue&&(b=a.updateQueue=ye(b));return b}function Wg(a,b,c,d,e,f){switch(c.tag){case 1:return a=c.payload,"function"===typeof a?a.call(f,d,e):a;case 3:a.effectTag=a.effectTag&-4097|64;case Tg:a=c.payload;e="function"===typeof a?a.call(f,d,e):a;if(null===e||void 0===e)break;return J({},d,e);case Tc:Ka=!0}return d}function Sb(a,b,c,d,e){Ka=!1;b=Vg(a,b);for(var f=b.baseState,g=null,h=0,k=b.firstUpdate,m=f;null!==k;){var l=k.expirationTime;l<e?(null===g&&(g=k,
f=m),h<l&&(h=l)):(Xg(l,k.suspenseConfig),m=Wg(a,b,k,m,c,d),null!==k.callback&&(a.effectTag|=32,k.nextEffect=null,null===b.lastEffect?b.firstEffect=b.lastEffect=k:(b.lastEffect.nextEffect=k,b.lastEffect=k)));k=k.next}l=null;for(k=b.firstCapturedUpdate;null!==k;){var q=k.expirationTime;q<e?(null===l&&(l=k,null===g&&(f=m)),h<q&&(h=q)):(m=Wg(a,b,k,m,c,d),null!==k.callback&&(a.effectTag|=32,k.nextEffect=null,null===b.lastCapturedEffect?b.firstCapturedEffect=b.lastCapturedEffect=k:(b.lastCapturedEffect.nextEffect=
k,b.lastCapturedEffect=k)));k=k.next}null===g&&(b.lastUpdate=null);null===l?b.lastCapturedUpdate=null:a.effectTag|=32;null===g&&null===l&&(f=m);b.baseState=f;b.firstUpdate=g;b.firstCapturedUpdate=l;Uc(h);a.expirationTime=h;a.memoizedState=m}function Yg(a,b,c,d){null!==b.firstCapturedUpdate&&(null!==b.lastUpdate&&(b.lastUpdate.next=b.firstCapturedUpdate,b.lastUpdate=b.lastCapturedUpdate),b.firstCapturedUpdate=b.lastCapturedUpdate=null);Zg(b.firstEffect,c);b.firstEffect=b.lastEffect=null;Zg(b.firstCapturedEffect,
c);b.firstCapturedEffect=b.lastCapturedEffect=null}function Zg(a,b){for(;null!==a;){var c=a.callback;if(null!==c){a.callback=null;var d=b;if("function"!==typeof c)throw l(Error(191),c);c.call(d)}a=a.nextEffect}}function Vc(a,b,c,d){b=a.memoizedState;c=c(d,b);c=null===c||void 0===c?b:J({},b,c);a.memoizedState=c;d=a.updateQueue;null!==d&&0===a.expirationTime&&(d.baseState=c)}function $g(a,b,c,d,e,f,g){a=a.stateNode;return"function"===typeof a.shouldComponentUpdate?a.shouldComponentUpdate(d,f,g):b.prototype&&
b.prototype.isPureReactComponent?!Qb(c,d)||!Qb(e,f):!0}function ah(a,b,c,d){var e=!1;d=Ha;var f=b.contextType;"object"===typeof f&&null!==f?f=ea(f):(d=L(b)?Sa:P.current,e=b.contextTypes,f=(e=null!==e&&void 0!==e)?qb(a,d):Ha);b=new b(c,f);a.memoizedState=null!==b.state&&void 0!==b.state?b.state:null;b.updater=Wc;a.stateNode=b;b._reactInternalFiber=a;e&&(a=a.stateNode,a.__reactInternalMemoizedUnmaskedChildContext=d,a.__reactInternalMemoizedMaskedChildContext=f);return b}function bh(a,b,c,d){a=b.state;
"function"===typeof b.componentWillReceiveProps&&b.componentWillReceiveProps(c,d);"function"===typeof b.UNSAFE_componentWillReceiveProps&&b.UNSAFE_componentWillReceiveProps(c,d);b.state!==a&&Wc.enqueueReplaceState(b,b.state,null)}function ze(a,b,c,d){var e=a.stateNode;e.props=c;e.state=a.memoizedState;e.refs=ch;var f=b.contextType;"object"===typeof f&&null!==f?e.context=ea(f):(f=L(b)?Sa:P.current,e.context=qb(a,f));f=a.updateQueue;null!==f&&(Sb(a,f,c,e,d),e.state=a.memoizedState);f=b.getDerivedStateFromProps;
"function"===typeof f&&(Vc(a,b,f,c),e.state=a.memoizedState);"function"===typeof b.getDerivedStateFromProps||"function"===typeof e.getSnapshotBeforeUpdate||"function"!==typeof e.UNSAFE_componentWillMount&&"function"!==typeof e.componentWillMount||(b=e.state,"function"===typeof e.componentWillMount&&e.componentWillMount(),"function"===typeof e.UNSAFE_componentWillMount&&e.UNSAFE_componentWillMount(),b!==e.state&&Wc.enqueueReplaceState(e,e.state,null),f=a.updateQueue,null!==f&&(Sb(a,f,c,e,d),e.state=
a.memoizedState));"function"===typeof e.componentDidMount&&(a.effectTag|=4)}function Tb(a,b,c){a=c.ref;if(null!==a&&"function"!==typeof a&&"object"!==typeof a){if(c._owner){c=c._owner;if(c){if(1!==c.tag)throw l(Error(309));var d=c.stateNode}if(!d)throw l(Error(147),a);var e=""+a;if(null!==b&&null!==b.ref&&"function"===typeof b.ref&&b.ref._stringRef===e)return b.ref;b=function(a){var b=d.refs;b===ch&&(b=d.refs={});null===a?delete b[e]:b[e]=a};b._stringRef=e;return b}if("string"!==typeof a)throw l(Error(284));
if(!c._owner)throw l(Error(290),a);}return a}function Xc(a,b){if("textarea"!==a.type)throw l(Error(31),"[object Object]"===Object.prototype.toString.call(b)?"object with keys {"+Object.keys(b).join(", ")+"}":b,"");}function dh(a){function b(b,c){if(a){var d=b.lastEffect;null!==d?(d.nextEffect=c,b.lastEffect=c):b.firstEffect=b.lastEffect=c;c.nextEffect=null;c.effectTag=8}}function c(c,d){if(!a)return null;for(;null!==d;)b(c,d),d=d.sibling;return null}function d(a,b){for(a=new Map;null!==b;)null!==
b.key?a.set(b.key,b):a.set(b.index,b),b=b.sibling;return a}function e(a,b,c){a=Ua(a,b,c);a.index=0;a.sibling=null;return a}function f(b,c,d){b.index=d;if(!a)return c;d=b.alternate;if(null!==d)return d=d.index,d<c?(b.effectTag=I,c):d;b.effectTag=I;return c}function g(b){a&&null===b.alternate&&(b.effectTag=I);return b}function h(a,b,c,d){if(null===b||6!==b.tag)return b=Ae(c,a.mode,d),b.return=a,b;b=e(b,c,d);b.return=a;return b}function k(a,b,c,d){if(null!==b&&b.elementType===c.type)return d=e(b,c.props,
d),d.ref=Tb(a,b,c),d.return=a,d;d=Yc(c.type,c.key,c.props,null,a.mode,d);d.ref=Tb(a,b,c);d.return=a;return d}function m(a,b,c,d){if(null===b||4!==b.tag||b.stateNode.containerInfo!==c.containerInfo||b.stateNode.implementation!==c.implementation)return b=Be(c,a.mode,d),b.return=a,b;b=e(b,c.children||[],d);b.return=a;return b}function p(a,b,c,d,f){if(null===b||7!==b.tag)return b=La(c,a.mode,d,f),b.return=a,b;b=e(b,c,d);b.return=a;return b}function q(a,b,c){if("string"===typeof b||"number"===typeof b)return b=
Ae(""+b,a.mode,c),b.return=a,b;if("object"===typeof b&&null!==b){switch(b.$$typeof){case Zc:return c=Yc(b.type,b.key,b.props,null,a.mode,c),c.ref=Tb(a,null,b),c.return=a,c;case fb:return b=Be(b,a.mode,c),b.return=a,b}if($c(b)||Gb(b))return b=La(b,a.mode,c,null),b.return=a,b;Xc(a,b)}return null}function n(a,b,c,d){var e=null!==b?b.key:null;if("string"===typeof c||"number"===typeof c)return null!==e?null:h(a,b,""+c,d);if("object"===typeof c&&null!==c){switch(c.$$typeof){case Zc:return c.key===e?c.type===
ya?p(a,b,c.props.children,d,e):k(a,b,c,d):null;case fb:return c.key===e?m(a,b,c,d):null}if($c(c)||Gb(c))return null!==e?null:p(a,b,c,d,null);Xc(a,c)}return null}function v(a,b,c,d,e){if("string"===typeof d||"number"===typeof d)return a=a.get(c)||null,h(b,a,""+d,e);if("object"===typeof d&&null!==d){switch(d.$$typeof){case Zc:return a=a.get(null===d.key?c:d.key)||null,d.type===ya?p(b,a,d.props.children,e,d.key):k(b,a,d,e);case fb:return a=a.get(null===d.key?c:d.key)||null,m(b,a,d,e)}if($c(d)||Gb(d))return a=
a.get(c)||null,p(b,a,d,e,null);Xc(b,d)}return null}function x(e,g,h,k){for(var m=null,l=null,p=g,t=g=0,z=null;null!==p&&t<h.length;t++){p.index>t?(z=p,p=null):z=p.sibling;var Z=n(e,p,h[t],k);if(null===Z){null===p&&(p=z);break}a&&p&&null===Z.alternate&&b(e,p);g=f(Z,g,t);null===l?m=Z:l.sibling=Z;l=Z;p=z}if(t===h.length)return c(e,p),m;if(null===p){for(;t<h.length;t++)p=q(e,h[t],k),null!==p&&(g=f(p,g,t),null===l?m=p:l.sibling=p,l=p);return m}for(p=d(e,p);t<h.length;t++)z=v(p,e,t,h[t],k),null!==z&&(a&&
null!==z.alternate&&p.delete(null===z.key?t:z.key),g=f(z,g,t),null===l?m=z:l.sibling=z,l=z);a&&p.forEach(function(a){return b(e,a)});return m}function A(e,g,h,k){var m=Gb(h);if("function"!==typeof m)throw l(Error(150));h=m.call(h);if(null==h)throw l(Error(151));for(var p=m=null,t=g,z=g=0,Z=null,r=h.next();null!==t&&!r.done;z++,r=h.next()){t.index>z?(Z=t,t=null):Z=t.sibling;var tb=n(e,t,r.value,k);if(null===tb){null===t&&(t=Z);break}a&&t&&null===tb.alternate&&b(e,t);g=f(tb,g,z);null===p?m=tb:p.sibling=
tb;p=tb;t=Z}if(r.done)return c(e,t),m;if(null===t){for(;!r.done;z++,r=h.next())r=q(e,r.value,k),null!==r&&(g=f(r,g,z),null===p?m=r:p.sibling=r,p=r);return m}for(t=d(e,t);!r.done;z++,r=h.next())r=v(t,e,z,r.value,k),null!==r&&(a&&null!==r.alternate&&t.delete(null===r.key?z:r.key),g=f(r,g,z),null===p?m=r:p.sibling=r,p=r);a&&t.forEach(function(a){return b(e,a)});return m}return function(a,d,f,h){var k="object"===typeof f&&null!==f&&f.type===ya&&null===f.key;k&&(f=f.props.children);var m="object"===typeof f&&
null!==f;if(m)switch(f.$$typeof){case Zc:a:{m=f.key;for(k=d;null!==k;){if(k.key===m){if(7===k.tag?f.type===ya:k.elementType===f.type){c(a,k.sibling);d=e(k,f.type===ya?f.props.children:f.props,h);d.ref=Tb(a,k,f);d.return=a;a=d;break a}c(a,k);break}else b(a,k);k=k.sibling}f.type===ya?(d=La(f.props.children,a.mode,h,f.key),d.return=a,a=d):(h=Yc(f.type,f.key,f.props,null,a.mode,h),h.ref=Tb(a,d,f),h.return=a,a=h)}return g(a);case fb:a:{for(k=f.key;null!==d;){if(d.key===k){if(4===d.tag&&d.stateNode.containerInfo===
f.containerInfo&&d.stateNode.implementation===f.implementation){c(a,d.sibling);d=e(d,f.children||[],h);d.return=a;a=d;break a}c(a,d);break}else b(a,d);d=d.sibling}d=Be(f,a.mode,h);d.return=a;a=d}return g(a)}if("string"===typeof f||"number"===typeof f)return f=""+f,null!==d&&6===d.tag?(c(a,d.sibling),d=e(d,f,h),d.return=a,a=d):(c(a,d),d=Ae(f,a.mode,h),d.return=a,a=d),g(a);if($c(f))return x(a,d,f,h);if(Gb(f))return A(a,d,f,h);m&&Xc(a,f);if("undefined"===typeof f&&!k)switch(a.tag){case 1:case 0:throw a=
a.type,l(Error(152),a.displayName||a.name||"Component");}return c(a,d)}}function Va(a){if(a===Ub)throw l(Error(174));return a}function Ce(a,b){y(Vb,b,a);y(Wb,a,a);y(fa,Ub,a);var c=b.nodeType;switch(c){case 9:case 11:b=(b=b.documentElement)?b.namespaceURI:Qd(null,"");break;default:c=c===Pa?b.parentNode:b,b=c.namespaceURI||null,c=c.tagName,b=Qd(b,c)}B(fa,a);y(fa,b,a)}function ub(a){B(fa,a);B(Wb,a);B(Vb,a)}function eh(a){Va(Vb.current);var b=Va(fa.current);var c=Qd(b,a.type);b!==c&&(y(Wb,a,a),y(fa,c,
a))}function De(a){Wb.current===a&&(B(fa,a),B(Wb,a))}function ad(a){for(var b=a;null!==b;){if(13===b.tag){var c=b.memoizedState;if(null!==c&&(c=c.dehydrated,null===c||c.data===he||c.data===ge))return b}else if(19===b.tag&&void 0!==b.memoizedProps.revealOrder){if((b.effectTag&64)!==C)return b}else if(null!==b.child){b.child.return=b;b=b.child;continue}if(b===a)break;for(;null===b.sibling;){if(null===b.return||b.return===a)return null;b=b.return}b.sibling.return=b.return;b=b.sibling}return null}function fh(a,
b){return{responder:a,props:b}}function R(){throw l(Error(321));}function Ee(a,b){if(null===b)return!1;for(var c=0;c<b.length&&c<a.length;c++)if(!Ra(a[c],b[c]))return!1;return!0}function Fe(a,b,c,d,e,f){Xb=f;Ma=b;ha=null!==a?a.memoizedState:null;bd.current=null===ha?mj:gh;b=c(d,e);if(Yb){do Yb=!1,Zb+=1,ha=null!==a?a.memoizedState:null,vb=wb,ia=N=D=null,bd.current=gh,b=c(d,e);while(Yb);pa=null;Zb=0}bd.current=cd;a=Ma;a.memoizedState=wb;a.expirationTime=xb;a.updateQueue=ia;a.effectTag|=$b;a=null!==
D&&null!==D.next;Xb=0;vb=N=wb=ha=D=Ma=null;xb=0;ia=null;$b=0;if(a)throw l(Error(300));return b}function hh(){bd.current=cd;Xb=0;vb=N=wb=ha=D=Ma=null;xb=0;ia=null;$b=0;Yb=!1;pa=null;Zb=0}function yb(){var a={memoizedState:null,baseState:null,queue:null,baseUpdate:null,next:null};null===N?wb=N=a:N=N.next=a;return N}function ac(){if(null!==vb)N=vb,vb=N.next,D=ha,ha=null!==D?D.next:null;else{if(null===ha)throw l(Error(310));D=ha;var a={memoizedState:D.memoizedState,baseState:D.baseState,queue:D.queue,
baseUpdate:D.baseUpdate,next:null};N=null===N?wb=a:N.next=a;ha=D.next}return N}function ih(a,b){return"function"===typeof b?b(a):b}function jh(a,b,c){b=ac();c=b.queue;if(null===c)throw l(Error(311));c.lastRenderedReducer=a;if(0<Zb){var d=c.dispatch;if(null!==pa){var e=pa.get(c);if(void 0!==e){pa.delete(c);var f=b.memoizedState;do f=a(f,e.action),e=e.next;while(null!==e);Ra(f,b.memoizedState)||(da=!0);b.memoizedState=f;b.baseUpdate===c.last&&(b.baseState=f);c.lastRenderedState=f;return[f,d]}}return[b.memoizedState,
d]}d=c.last;var g=b.baseUpdate;f=b.baseState;null!==g?(null!==d&&(d.next=null),d=g.next):d=null!==d?d.next:null;if(null!==d){var h=e=null,k=d,m=!1;do{var p=k.expirationTime;p<Xb?(m||(m=!0,h=g,e=f),p>xb&&(xb=p,Uc(xb))):(Xg(p,k.suspenseConfig),f=k.eagerReducer===a?k.eagerState:a(f,k.action));g=k;k=k.next}while(null!==k&&k!==d);m||(h=g,e=f);Ra(f,b.memoizedState)||(da=!0);b.memoizedState=f;b.baseUpdate=h;b.baseState=e;c.lastRenderedState=f}return[b.memoizedState,c.dispatch]}function Ge(a,b,c,d){a={tag:a,
create:b,destroy:c,deps:d,next:null};null===ia?(ia={lastEffect:null},ia.lastEffect=a.next=a):(b=ia.lastEffect,null===b?ia.lastEffect=a.next=a:(c=b.next,b.next=a,a.next=c,ia.lastEffect=a));return a}function He(a,b,c,d){var e=yb();$b|=a;e.memoizedState=Ge(b,c,void 0,void 0===d?null:d)}function Ie(a,b,c,d){var e=ac();d=void 0===d?null:d;var f=void 0;if(null!==D){var g=D.memoizedState;f=g.destroy;if(null!==d&&Ee(d,g.deps)){Ge(0,c,f,d);return}}$b|=a;e.memoizedState=Ge(b,c,f,d)}function kh(a,b){if("function"===
typeof b)return a=a(),b(a),function(){b(null)};if(null!==b&&void 0!==b)return a=a(),b.current=a,function(){b.current=null}}function lh(a,b){}function mh(a,b,c){if(!(25>Zb))throw l(Error(301));var d=a.alternate;if(a===Ma||null!==d&&d===Ma)if(Yb=!0,a={expirationTime:Xb,suspenseConfig:null,action:c,eagerReducer:null,eagerState:null,next:null},null===pa&&(pa=new Map),c=pa.get(b),void 0===c)pa.set(b,a);else{for(b=c;null!==b.next;)b=b.next;b.next=a}else{var e=qa(),f=bc.suspense;e=zb(e,a,f);f={expirationTime:e,
suspenseConfig:f,action:c,eagerReducer:null,eagerState:null,next:null};var g=b.last;if(null===g)f.next=f;else{var h=g.next;null!==h&&(f.next=h);g.next=f}b.last=f;if(0===a.expirationTime&&(null===d||0===d.expirationTime)&&(d=b.lastRenderedReducer,null!==d))try{var k=b.lastRenderedState,m=d(k,c);f.eagerReducer=d;f.eagerState=m;if(Ra(m,k))return}catch(p){}finally{}cc(a,e)}}function nh(a,b){var c=ja(5,null,null,0);c.elementType="DELETED";c.type="DELETED";c.stateNode=b;c.return=a;c.effectTag=8;null!==
a.lastEffect?(a.lastEffect.nextEffect=c,a.lastEffect=c):a.firstEffect=a.lastEffect=c}function oh(a,b){switch(a.tag){case 5:var c=a.type;b=1!==b.nodeType||c.toLowerCase()!==b.nodeName.toLowerCase()?null:b;return null!==b?(a.stateNode=b,!0):!1;case 6:return b=""===a.pendingProps||3!==b.nodeType?null:b,null!==b?(a.stateNode=b,!0):!1;case 13:return!1;default:return!1}}function ph(a){if(Wa){var b=Xa;if(b){var c=b;if(!oh(a,b)){b=mb(c.nextSibling);if(!b||!oh(a,b)){a.effectTag=a.effectTag&~Da|I;Wa=!1;ra=
a;return}nh(ra,c)}ra=a;Xa=mb(b.firstChild)}else a.effectTag=a.effectTag&~Da|I,Wa=!1,ra=a}}function qh(a){for(a=a.return;null!==a&&5!==a.tag&&3!==a.tag&&13!==a.tag;)a=a.return;ra=a}function dd(a){if(a!==ra)return!1;if(!Wa)return qh(a),Wa=!0,!1;var b=a.type;if(5!==a.tag||"head"!==b&&"body"!==b&&!fe(b,a.memoizedProps))for(b=Xa;b;)nh(a,b),b=mb(b.nextSibling);qh(a);if(13===a.tag)if(a=a.memoizedState,a=null!==a?a.dehydrated:null,null===a)a=Xa;else a:{a=a.nextSibling;for(b=0;a;){if(a.nodeType===Pa){var c=
a.data;if(c===qg){if(0===b){a=mb(a.nextSibling);break a}b--}else c!==pg&&c!==ge&&c!==he||b++}a=a.nextSibling}a=null}else a=ra?mb(a.stateNode.nextSibling):null;Xa=a;return!0}function Je(){Xa=ra=null;Wa=!1}function Q(a,b,c,d){b.child=null===a?Ke(b,null,c,d):Ab(b,a.child,c,d)}function rh(a,b,c,d,e){c=c.render;var f=b.ref;sb(b,e);d=Fe(a,b,c,d,f,e);if(null!==a&&!da)return b.updateQueue=a.updateQueue,b.effectTag&=-517,a.expirationTime<=e&&(a.expirationTime=0),sa(a,b,e);b.effectTag|=1;Q(a,b,d,e);return b.child}
function sh(a,b,c,d,e,f){if(null===a){var g=c.type;if("function"===typeof g&&!Le(g)&&void 0===g.defaultProps&&null===c.compare&&void 0===c.defaultProps)return b.tag=15,b.type=g,th(a,b,g,d,e,f);a=Yc(c.type,null,d,null,b.mode,f);a.ref=b.ref;a.return=b;return b.child=a}g=a.child;if(e<f&&(e=g.memoizedProps,c=c.compare,c=null!==c?c:Qb,c(e,d)&&a.ref===b.ref))return sa(a,b,f);b.effectTag|=1;a=Ua(g,d,f);a.ref=b.ref;a.return=b;return b.child=a}function th(a,b,c,d,e,f){return null!==a&&Qb(a.memoizedProps,d)&&
a.ref===b.ref&&(da=!1,e<f)?sa(a,b,f):Me(a,b,c,d,f)}function uh(a,b){var c=b.ref;if(null===a&&null!==c||null!==a&&a.ref!==c)b.effectTag|=128}function Me(a,b,c,d,e){var f=L(c)?Sa:P.current;f=qb(b,f);sb(b,e);c=Fe(a,b,c,d,f,e);if(null!==a&&!da)return b.updateQueue=a.updateQueue,b.effectTag&=-517,a.expirationTime<=e&&(a.expirationTime=0),sa(a,b,e);b.effectTag|=1;Q(a,b,c,e);return b.child}function vh(a,b,c,d,e){if(L(c)){var f=!0;Mc(b)}else f=!1;sb(b,e);if(null===b.stateNode)null!==a&&(a.alternate=null,
b.alternate=null,b.effectTag|=I),ah(b,c,d,e),ze(b,c,d,e),d=!0;else if(null===a){var g=b.stateNode,h=b.memoizedProps;g.props=h;var k=g.context,m=c.contextType;"object"===typeof m&&null!==m?m=ea(m):(m=L(c)?Sa:P.current,m=qb(b,m));var l=c.getDerivedStateFromProps,q="function"===typeof l||"function"===typeof g.getSnapshotBeforeUpdate;q||"function"!==typeof g.UNSAFE_componentWillReceiveProps&&"function"!==typeof g.componentWillReceiveProps||(h!==d||k!==m)&&bh(b,g,d,m);Ka=!1;var n=b.memoizedState;k=g.state=
n;var v=b.updateQueue;null!==v&&(Sb(b,v,d,g,e),k=b.memoizedState);h!==d||n!==k||M.current||Ka?("function"===typeof l&&(Vc(b,c,l,d),k=b.memoizedState),(h=Ka||$g(b,c,h,d,n,k,m))?(q||"function"!==typeof g.UNSAFE_componentWillMount&&"function"!==typeof g.componentWillMount||("function"===typeof g.componentWillMount&&g.componentWillMount(),"function"===typeof g.UNSAFE_componentWillMount&&g.UNSAFE_componentWillMount()),"function"===typeof g.componentDidMount&&(b.effectTag|=4)):("function"===typeof g.componentDidMount&&
(b.effectTag|=4),b.memoizedProps=d,b.memoizedState=k),g.props=d,g.state=k,g.context=m,d=h):("function"===typeof g.componentDidMount&&(b.effectTag|=4),d=!1)}else g=b.stateNode,h=b.memoizedProps,g.props=b.type===b.elementType?h:Y(b.type,h),k=g.context,m=c.contextType,"object"===typeof m&&null!==m?m=ea(m):(m=L(c)?Sa:P.current,m=qb(b,m)),l=c.getDerivedStateFromProps,(q="function"===typeof l||"function"===typeof g.getSnapshotBeforeUpdate)||"function"!==typeof g.UNSAFE_componentWillReceiveProps&&"function"!==
typeof g.componentWillReceiveProps||(h!==d||k!==m)&&bh(b,g,d,m),Ka=!1,k=b.memoizedState,n=g.state=k,v=b.updateQueue,null!==v&&(Sb(b,v,d,g,e),n=b.memoizedState),h!==d||k!==n||M.current||Ka?("function"===typeof l&&(Vc(b,c,l,d),n=b.memoizedState),(l=Ka||$g(b,c,h,d,k,n,m))?(q||"function"!==typeof g.UNSAFE_componentWillUpdate&&"function"!==typeof g.componentWillUpdate||("function"===typeof g.componentWillUpdate&&g.componentWillUpdate(d,n,m),"function"===typeof g.UNSAFE_componentWillUpdate&&g.UNSAFE_componentWillUpdate(d,
n,m)),"function"===typeof g.componentDidUpdate&&(b.effectTag|=4),"function"===typeof g.getSnapshotBeforeUpdate&&(b.effectTag|=256)):("function"!==typeof g.componentDidUpdate||h===a.memoizedProps&&k===a.memoizedState||(b.effectTag|=4),"function"!==typeof g.getSnapshotBeforeUpdate||h===a.memoizedProps&&k===a.memoizedState||(b.effectTag|=256),b.memoizedProps=d,b.memoizedState=n),g.props=d,g.state=n,g.context=m,d=l):("function"!==typeof g.componentDidUpdate||h===a.memoizedProps&&k===a.memoizedState||
(b.effectTag|=4),"function"!==typeof g.getSnapshotBeforeUpdate||h===a.memoizedProps&&k===a.memoizedState||(b.effectTag|=256),d=!1);return Ne(a,b,c,d,f,e)}function Ne(a,b,c,d,e,f){uh(a,b);var g=(b.effectTag&64)!==C;if(!d&&!g)return e&&Hg(b,c,!1),sa(a,b,f);d=b.stateNode;nj.current=b;var h=g&&"function"!==typeof c.getDerivedStateFromError?null:d.render();b.effectTag|=1;null!==a&&g?(b.child=Ab(b,a.child,null,f),b.child=Ab(b,null,h,f)):Q(a,b,h,f);b.memoizedState=d.state;e&&Hg(b,c,!0);return b.child}function wh(a){var b=
a.stateNode;b.pendingContext?Fg(a,b.pendingContext,b.pendingContext!==b.context):b.context&&Fg(a,b.context,!1);Ce(a,b.containerInfo)}function xh(a,b,c){var d=b.mode,e=b.pendingProps,f=A.current,g=!1,h;(h=(b.effectTag&64)!==C)||(h=0!==(f&2)&&(null===a||null!==a.memoizedState));h?(g=!0,b.effectTag&=-65):null!==a&&null===a.memoizedState||void 0===e.fallback||!0===e.unstable_avoidThisFallback||(f|=1);y(A,f&1,b);if(null===a){if(g){g=e.fallback;e=La(null,d,0,null);e.return=b;if(0===(b.mode&2))for(a=null!==
b.memoizedState?b.child.child:b.child,e.child=a;null!==a;)a.return=e,a=a.sibling;c=La(g,d,c,null);c.return=b;e.sibling=c;b.memoizedState=Oe;b.child=e;return c}d=e.children;b.memoizedState=null;return b.child=Ke(b,null,d,c)}if(null!==a.memoizedState){a=a.child;d=a.sibling;if(g){e=e.fallback;c=Ua(a,a.pendingProps,0);c.return=b;if(0===(b.mode&2)&&(g=null!==b.memoizedState?b.child.child:b.child,g!==a.child))for(c.child=g;null!==g;)g.return=c,g=g.sibling;d=Ua(d,e,d.expirationTime);d.return=b;c.sibling=
d;c.childExpirationTime=0;b.memoizedState=Oe;b.child=c;return d}c=Ab(b,a.child,e.children,c);b.memoizedState=null;return b.child=c}a=a.child;if(g){g=e.fallback;e=La(null,d,0,null);e.return=b;e.child=a;null!==a&&(a.return=e);if(0===(b.mode&2))for(a=null!==b.memoizedState?b.child.child:b.child,e.child=a;null!==a;)a.return=e,a=a.sibling;c=La(g,d,c,null);c.return=b;e.sibling=c;c.effectTag|=I;e.childExpirationTime=0;b.memoizedState=Oe;b.child=e;return c}b.memoizedState=null;return b.child=Ab(b,a,e.children,
c)}function Pe(a,b,c,d,e){var f=a.memoizedState;null===f?a.memoizedState={isBackwards:b,rendering:null,last:d,tail:c,tailExpiration:0,tailMode:e}:(f.isBackwards=b,f.rendering=null,f.last=d,f.tail=c,f.tailExpiration=0,f.tailMode=e)}function yh(a,b,c){var d=b.pendingProps,e=d.revealOrder,f=d.tail;Q(a,b,d.children,c);d=A.current;if(0!==(d&2))d=d&1|2,b.effectTag|=64;else{if(null!==a&&(a.effectTag&64)!==C)a:for(a=b.child;null!==a;){if(13===a.tag){if(null!==a.memoizedState){a.expirationTime<c&&(a.expirationTime=
c);var g=a.alternate;null!==g&&g.expirationTime<c&&(g.expirationTime=c);Sg(a.return,c)}}else if(null!==a.child){a.child.return=a;a=a.child;continue}if(a===b)break a;for(;null===a.sibling;){if(null===a.return||a.return===b)break a;a=a.return}a.sibling.return=a.return;a=a.sibling}d&=1}y(A,d,b);if(0===(b.mode&2))b.memoizedState=null;else switch(e){case "forwards":c=b.child;for(e=null;null!==c;)d=c.alternate,null!==d&&null===ad(d)&&(e=c),c=c.sibling;c=e;null===c?(e=b.child,b.child=null):(e=c.sibling,
c.sibling=null);Pe(b,!1,e,c,f);break;case "backwards":c=null;e=b.child;for(b.child=null;null!==e;){d=e.alternate;if(null!==d&&null===ad(d)){b.child=e;break}d=e.sibling;e.sibling=c;c=e;e=d}Pe(b,!0,c,null,f);break;case "together":Pe(b,!1,null,null,void 0);break;default:b.memoizedState=null}return b.child}function sa(a,b,c){null!==a&&(b.dependencies=a.dependencies);var d=b.expirationTime;0!==d&&Uc(d);if(b.childExpirationTime<c)return null;if(null!==a&&b.child!==a.child)throw l(Error(153));if(null!==
b.child){a=b.child;c=Ua(a,a.pendingProps,a.expirationTime);b.child=c;for(c.return=b;null!==a.sibling;)a=a.sibling,c=c.sibling=Ua(a,a.pendingProps,a.expirationTime),c.return=b;c.sibling=null}return b.child}function Bb(a){a.effectTag|=4}function ed(a,b){switch(a.tailMode){case "hidden":b=a.tail;for(var c=null;null!==b;)null!==b.alternate&&(c=b),b=b.sibling;null===c?a.tail=null:c.sibling=null;break;case "collapsed":c=a.tail;for(var d=null;null!==c;)null!==c.alternate&&(d=c),c=c.sibling;null===d?b||null===
a.tail?a.tail=null:a.tail.sibling=null:d.sibling=null}}function oj(a,b){switch(a.tag){case 1:return L(a.type)&&Lc(a),b=a.effectTag,b&4096?(a.effectTag=b&-4097|64,a):null;case 3:ub(a);qe(a);b=a.effectTag;if((b&64)!==C)throw l(Error(285));a.effectTag=b&-4097|64;return a;case 5:return De(a),null;case 13:return B(A,a),b=a.effectTag,b&4096?(a.effectTag=b&-4097|64,a):null;case 19:return B(A,a),null;case 4:return ub(a),null;case 10:return xe(a),null;default:return null}}function Qe(a,b){return{value:a,source:b,
stack:Gd(b)}}function Re(a,b){var c=b.source,d=b.stack;null===d&&null!==c&&(d=Gd(c));null!==c&&xa(c.type);b=b.value;null!==a&&1===a.tag&&xa(a.type);try{console.error(b)}catch(e){setTimeout(function(){throw e;})}}function pj(a,b){try{b.props=a.memoizedProps,b.state=a.memoizedState,b.componentWillUnmount()}catch(c){Ya(a,c)}}function zh(a){var b=a.ref;if(null!==b)if("function"===typeof b)try{b(null)}catch(c){Ya(a,c)}else b.current=null}function qj(a,b){switch(b.tag){case 0:case 11:case 15:dc(2,0,b);
break;case 1:if(b.effectTag&256&&null!==a){var c=a.memoizedProps,d=a.memoizedState;a=b.stateNode;b=a.getSnapshotBeforeUpdate(b.elementType===b.type?c:Y(b.type,c),d);a.__reactInternalSnapshotBeforeUpdate=b}break;case 3:case 5:case 6:case 4:case 17:break;default:throw l(Error(163));}}function dc(a,b,c){c=c.updateQueue;c=null!==c?c.lastEffect:null;if(null!==c){var d=c=c.next;do{if(0!==(d.tag&a)){var e=d.destroy;d.destroy=void 0;void 0!==e&&e()}0!==(d.tag&b)&&(e=d.create,d.destroy=e());d=d.next}while(d!==
c)}}function Ah(a,b,c){"function"===typeof Se&&Se(b);switch(b.tag){case 0:case 11:case 14:case 15:a=b.updateQueue;if(null!==a&&(a=a.lastEffect,null!==a)){var d=a.next;Ta(97<c?97:c,function(){var a=d;do{var c=a.destroy;if(void 0!==c){var g=b;try{c()}catch(h){Ya(g,h)}}a=a.next}while(a!==d)})}break;case 1:zh(b);c=b.stateNode;"function"===typeof c.componentWillUnmount&&pj(b,c);break;case 5:zh(b);break;case 4:Bh(a,b,c)}}function Ch(a){var b=a.alternate;a.return=null;a.child=null;a.memoizedState=null;a.updateQueue=
null;a.dependencies=null;a.alternate=null;a.firstEffect=null;a.lastEffect=null;a.pendingProps=null;a.memoizedProps=null;null!==b&&Ch(b)}function Dh(a){return 5===a.tag||3===a.tag||4===a.tag}function Eh(a){a:{for(var b=a.return;null!==b;){if(Dh(b)){var c=b;break a}b=b.return}throw l(Error(160));}b=c.stateNode;switch(c.tag){case 5:var d=!1;break;case 3:b=b.containerInfo;d=!0;break;case 4:b=b.containerInfo;d=!0;break;default:throw l(Error(161));}c.effectTag&16&&(ec(b,""),c.effectTag&=-17);a:b:for(c=
a;;){for(;null===c.sibling;){if(null===c.return||Dh(c.return)){c=null;break a}c=c.return}c.sibling.return=c.return;for(c=c.sibling;5!==c.tag&&6!==c.tag&&18!==c.tag;){if(c.effectTag&I)continue b;if(null===c.child||4===c.tag)continue b;else c.child.return=c,c=c.child}if(!(c.effectTag&I)){c=c.stateNode;break a}}for(var e=a;;){var f=5===e.tag||6===e.tag;if(f){var g=f?e.stateNode:e.stateNode.instance;if(c)if(d){f=b;var h=g;g=c;f.nodeType===Pa?f.parentNode.insertBefore(h,g):f.insertBefore(h,g)}else b.insertBefore(g,
c);else d?(h=b,h.nodeType===Pa?(f=h.parentNode,f.insertBefore(g,h)):(f=h,f.appendChild(g)),h=h._reactRootContainer,null!==h&&void 0!==h||null!==f.onclick||(f.onclick=Hc)):b.appendChild(g)}else if(4!==e.tag&&null!==e.child){e.child.return=e;e=e.child;continue}if(e===a)break;for(;null===e.sibling;){if(null===e.return||e.return===a)return;e=e.return}e.sibling.return=e.return;e=e.sibling}}function Bh(a,b,c){for(var d=b,e=!1,f,g;;){if(!e){e=d.return;a:for(;;){if(null===e)throw l(Error(160));f=e.stateNode;
switch(e.tag){case 5:g=!1;break a;case 3:f=f.containerInfo;g=!0;break a;case 4:f=f.containerInfo;g=!0;break a}e=e.return}e=!0}if(5===d.tag||6===d.tag){a:for(var h=a,k=d,m=c,p=k;;)if(Ah(h,p,m),null!==p.child&&4!==p.tag)p.child.return=p,p=p.child;else{if(p===k)break;for(;null===p.sibling;){if(null===p.return||p.return===k)break a;p=p.return}p.sibling.return=p.return;p=p.sibling}g?(h=f,k=d.stateNode,h.nodeType===Pa?h.parentNode.removeChild(k):h.removeChild(k)):f.removeChild(d.stateNode)}else if(4===
d.tag){if(null!==d.child){f=d.stateNode.containerInfo;g=!0;d.child.return=d;d=d.child;continue}}else if(Ah(a,d,c),null!==d.child){d.child.return=d;d=d.child;continue}if(d===b)break;for(;null===d.sibling;){if(null===d.return||d.return===b)return;d=d.return;4===d.tag&&(e=!1)}d.sibling.return=d.return;d=d.sibling}}function Te(a,b){switch(b.tag){case 0:case 11:case 14:case 15:dc(4,8,b);break;case 1:break;case 5:var c=b.stateNode;if(null!=c){var d=b.memoizedProps,e=null!==a?a.memoizedProps:d;a=b.type;
var f=b.updateQueue;b.updateQueue=null;if(null!==f){c[Ic]=d;"input"===a&&"radio"===d.type&&null!=d.name&&Nf(c,d);ce(a,e);b=ce(a,d);for(e=0;e<f.length;e+=2){var g=f[e],h=f[e+1];"style"===g?ig(c,h):"dangerouslySetInnerHTML"===g?Fh(c,h):"children"===g?ec(c,h):Kd(c,g,h,b)}switch(a){case "input":Md(c,d);break;case "textarea":Qf(c,d);break;case "select":b=c._wrapperState.wasMultiple,c._wrapperState.wasMultiple=!!d.multiple,a=d.value,null!=a?ib(c,!!d.multiple,a,!1):b!==!!d.multiple&&(null!=d.defaultValue?
ib(c,!!d.multiple,d.defaultValue,!0):ib(c,!!d.multiple,d.multiple?[]:"",!1))}}}break;case 6:if(null===b.stateNode)throw l(Error(162));b.stateNode.nodeValue=b.memoizedProps;break;case 3:b=b.stateNode;b.hydrate&&(b.hydrate=!1,Yf(b.containerInfo));break;case 12:break;case 13:c=b;null===b.memoizedState?d=!1:(d=!0,c=b.child,Ue=aa());if(null!==c)a:for(a=c;;){if(5===a.tag)f=a.stateNode,d?(f=f.style,"function"===typeof f.setProperty?f.setProperty("display","none","important"):f.display="none"):(f=a.stateNode,
e=a.memoizedProps.style,e=void 0!==e&&null!==e&&e.hasOwnProperty("display")?e.display:null,f.style.display=hg("display",e));else if(6===a.tag)a.stateNode.nodeValue=d?"":a.memoizedProps;else if(13===a.tag&&null!==a.memoizedState&&null===a.memoizedState.dehydrated){f=a.child.sibling;f.return=a;a=f;continue}else if(null!==a.child){a.child.return=a;a=a.child;continue}if(a===c)break a;for(;null===a.sibling;){if(null===a.return||a.return===c)break a;a=a.return}a.sibling.return=a.return;a=a.sibling}Gh(b);
break;case 19:Gh(b);break;case 17:break;case 20:break;case 21:break;default:throw l(Error(163));}}function Gh(a){var b=a.updateQueue;if(null!==b){a.updateQueue=null;var c=a.stateNode;null===c&&(c=a.stateNode=new rj);b.forEach(function(b){var d=sj.bind(null,a,b);c.has(b)||(c.add(b),b.then(d,d))})}}function Hh(a,b,c){c=Ia(c,null);c.tag=3;c.payload={element:null};var d=b.value;c.callback=function(){fd||(fd=!0,Ve=d);Re(a,b)};return c}function Ih(a,b,c){c=Ia(c,null);c.tag=3;var d=a.type.getDerivedStateFromError;
if("function"===typeof d){var e=b.value;c.payload=function(){Re(a,b);return d(e)}}var f=a.stateNode;null!==f&&"function"===typeof f.componentDidCatch&&(c.callback=function(){"function"!==typeof d&&(null===Na?Na=new Set([this]):Na.add(this),Re(a,b));var c=b.stack;this.componentDidCatch(b.value,{componentStack:null!==c?c:""})});return c}function qa(){return(n&(X|ba))!==E?1073741821-(aa()/10|0):0!==gd?gd:gd=1073741821-(aa()/10|0)}function zb(a,b,c){b=b.mode;if(0===(b&2))return 1073741823;var d=re();
if(0===(b&4))return 99===d?1073741823:1073741822;if((n&X)!==E)return S;if(null!==c)a=1073741821-25*(((1073741821-a+(c.timeoutMs|0||5E3)/10)/25|0)+1);else switch(d){case 99:a=1073741823;break;case 98:a=1073741821-10*(((1073741821-a+15)/10|0)+1);break;case 97:case 96:a=1073741821-25*(((1073741821-a+500)/25|0)+1);break;case 95:a=2;break;default:throw l(Error(326));}null!==V&&a===S&&--a;return a}function hd(a,b){a.expirationTime<b&&(a.expirationTime=b);var c=a.alternate;null!==c&&c.expirationTime<b&&
(c.expirationTime=b);var d=a.return,e=null;if(null===d&&3===a.tag)e=a.stateNode;else for(;null!==d;){c=d.alternate;d.childExpirationTime<b&&(d.childExpirationTime=b);null!==c&&c.childExpirationTime<b&&(c.childExpirationTime=b);if(null===d.return&&3===d.tag){e=d.stateNode;break}d=d.return}null!==e&&(V===e&&(Uc(b),F===id&&ta(e,S)),Jh(e,b));return e}function jd(a){var b=a.lastExpiredTime;if(0!==b)return b;b=a.firstPendingTime;if(!Kh(a,b))return b;b=a.lastPingedTime;a=a.nextKnownPendingLevel;return b>
a?b:a}function U(a){if(0!==a.lastExpiredTime)a.callbackExpirationTime=1073741823,a.callbackPriority=99,a.callbackNode=Ng(We.bind(null,a));else{var b=jd(a),c=a.callbackNode;if(0===b)null!==c&&(a.callbackNode=null,a.callbackExpirationTime=0,a.callbackPriority=90);else{var d=qa();1073741823===b?d=99:1===b||2===b?d=95:(d=10*(1073741821-b)-10*(1073741821-d),d=0>=d?99:250>=d?98:5250>=d?97:95);if(null!==c){var e=a.callbackPriority;if(a.callbackExpirationTime===b&&e>=d)return;c!==Pg&&Qg(c)}a.callbackExpirationTime=
b;a.callbackPriority=d;b=1073741823===b?Ng(We.bind(null,a)):se(d,Lh.bind(null,a),{timeout:10*(1073741821-b)-aa()});a.callbackNode=b}}}function Lh(a,b){gd=0;if(b)return b=qa(),kd(a,b),U(a),null;var c=jd(a);if(0!==c){b=a.callbackNode;if((n&(X|ba))!==E)throw l(Error(327));Cb();a===V&&c===S||Za(a,c);if(null!==v){var d=n;n|=X;var e=Mh(a);do try{tj();break}catch(h){Nh(a,h)}while(1);ve();n=d;ld.current=e;if(F===md)throw b=nd,Za(a,c),ta(a,c),U(a),b;if(null===v)switch(e=a.finishedWork=a.current.alternate,
a.finishedExpirationTime=c,Oh(a,c),d=F,V=null,d){case $a:case md:throw l(Error(345));case Ph:if(2!==c){kd(a,2);break}ua(a);break;case od:ta(a,c);d=a.lastSuspendedTime;c===d&&(a.nextKnownPendingLevel=Xe(e));if(1073741823===va&&(e=Ue+Qh-aa(),10<e)){if(pd){var f=a.lastPingedTime;if(0===f||f>=c){a.lastPingedTime=c;Za(a,c);break}}f=jd(a);if(0!==f&&f!==c)break;if(0!==d&&d!==c){a.lastPingedTime=d;break}a.timeoutHandle=Ye(ua.bind(null,a),e);break}ua(a);break;case id:ta(a,c);d=a.lastSuspendedTime;c===d&&(a.nextKnownPendingLevel=
Xe(e));if(pd&&(e=a.lastPingedTime,0===e||e>=c)){a.lastPingedTime=c;Za(a,c);break}e=jd(a);if(0!==e&&e!==c)break;if(0!==d&&d!==c){a.lastPingedTime=d;break}1073741823!==fc?d=10*(1073741821-fc)-aa():1073741823===va?d=0:(d=10*(1073741821-va)-5E3,e=aa(),c=10*(1073741821-c)-e,d=e-d,0>d&&(d=0),d=(120>d?120:480>d?480:1080>d?1080:1920>d?1920:3E3>d?3E3:4320>d?4320:1960*uj(d/1960))-d,c<d&&(d=c));if(10<d){a.timeoutHandle=Ye(ua.bind(null,a),d);break}ua(a);break;case Ze:if(1073741823!==va&&null!==qd){f=va;var g=
qd;d=g.busyMinDurationMs|0;0>=d?d=0:(e=g.busyDelayMs|0,f=aa()-(10*(1073741821-f)-(g.timeoutMs|0||5E3)),d=f<=e?0:e+d-f);if(10<d){ta(a,c);a.timeoutHandle=Ye(ua.bind(null,a),d);break}}ua(a);break;case $e:ta(a,c);break;default:throw l(Error(329));}U(a);if(a.callbackNode===b)return Lh.bind(null,a)}}return null}function We(a){var b=a.lastExpiredTime;b=0!==b?b:1073741823;if(a.finishedExpirationTime===b)ua(a);else{if((n&(X|ba))!==E)throw l(Error(327));Cb();a===V&&b===S||Za(a,b);if(null!==v){var c=n;n|=X;
var d=Mh(a);do try{vj();break}catch(e){Nh(a,e)}while(1);ve();n=c;ld.current=d;if(F===md)throw c=nd,Za(a,b),ta(a,b),U(a),c;if(null!==v)throw l(Error(261));a.finishedWork=a.current.alternate;a.finishedExpirationTime=b;Oh(a,b);F===$e?ta(a,b):(V=null,ua(a));U(a)}}return null}function af(){(n&(1|X|ba))===E&&(wj(),Cb())}function Oh(a,b){var c=a.firstBatch;null!==c&&c._defer&&c._expirationTime>=b&&(se(97,function(){c._onComplete();return null}),F=$e)}function wj(){if(null!==ab){var a=ab;ab=null;a.forEach(function(a,
c){kd(c,a);U(c)});W()}}function Rh(a,b){var c=n;n|=1;try{return a(b)}finally{n=c,n===E&&W()}}function bf(a,b,c,d){var e=n;n|=4;try{return Ta(98,a.bind(null,b,c,d))}finally{n=e,n===E&&W()}}function Sh(a,b){var c=n;n&=-2;n|=cf;try{return a(b)}finally{n=c,n===E&&W()}}function Za(a,b){a.finishedWork=null;a.finishedExpirationTime=0;var c=a.timeoutHandle;-1!==c&&(a.timeoutHandle=-1,xj(c));if(null!==v)for(c=v.return;null!==c;){var d=c;switch(d.tag){case 1:var e=d.type.childContextTypes;null!==e&&void 0!==
e&&Lc(d);break;case 3:ub(d);qe(d);break;case 5:De(d);break;case 4:ub(d);break;case 13:B(A,d);break;case 19:B(A,d);break;case 10:xe(d)}c=c.return}V=a;v=Ua(a.current,null,b);S=b;F=$a;nd=null;fc=va=1073741823;qd=null;gc=0;pd=!1}function Nh(a,b){do{try{ve();hh();if(null===v||null===v.return)return F=md,nd=b,null;a:{var c=a,d=v.return,e=v,f=b;b=S;e.effectTag|=2048;e.firstEffect=e.lastEffect=null;if(null!==f&&"object"===typeof f&&"function"===typeof f.then){var g=f,h=0!==(A.current&1),k=d;do{var m;if(m=
13===k.tag){var l=k.memoizedState;if(null!==l)m=null!==l.dehydrated?!0:!1;else{var q=k.memoizedProps;m=void 0===q.fallback?!1:!0!==q.unstable_avoidThisFallback?!0:h?!1:!0}}if(m){var n=k.updateQueue;if(null===n){var x=new Set;x.add(g);k.updateQueue=x}else n.add(g);if(0===(k.mode&2)){k.effectTag|=64;e.effectTag&=-2981;if(1===e.tag)if(null===e.alternate)e.tag=17;else{var B=Ia(1073741823,null);B.tag=Tc;Ja(e,B)}e.expirationTime=1073741823;break a}f=void 0;e=b;var y=c.pingCache;null===y?(y=c.pingCache=
new yj,f=new Set,y.set(g,f)):(f=y.get(g),void 0===f&&(f=new Set,y.set(g,f)));if(!f.has(e)){f.add(e);var t=zj.bind(null,c,g,e);g.then(t,t)}k.effectTag|=4096;k.expirationTime=b;break a}k=k.return}while(null!==k);f=Error((xa(e.type)||"A React component")+" suspended while rendering, but no fallback UI was specified.\n\nAdd a <Suspense fallback=...> component higher in the tree to provide a loading indicator or placeholder to display."+Gd(e))}F!==Ze&&(F=Ph);f=Qe(f,e);k=d;do{switch(k.tag){case 3:g=f;k.effectTag|=
4096;k.expirationTime=b;var z=Hh(k,g,b);Ug(k,z);break a;case 1:g=f;var E=k.type,r=k.stateNode;if((k.effectTag&64)===C&&("function"===typeof E.getDerivedStateFromError||null!==r&&"function"===typeof r.componentDidCatch&&(null===Na||!Na.has(r)))){k.effectTag|=4096;k.expirationTime=b;var u=Ih(k,g,b);Ug(k,u);break a}}k=k.return}while(null!==k)}v=Th(v)}catch(w){b=w;continue}break}while(1)}function Mh(a){a=ld.current;ld.current=cd;return null===a?cd:a}function Xg(a,b){a<va&&2<a&&(va=a);null!==b&&a<fc&&
2<a&&(fc=a,qd=b)}function Uc(a){a>gc&&(gc=a)}function vj(){for(;null!==v;)v=Uh(v)}function tj(){for(;null!==v&&!Aj();)v=Uh(v)}function Uh(a){var b=Bj(a.alternate,a,S);a.memoizedProps=a.pendingProps;null===b&&(b=Th(a));Vh.current=null;return b}function Th(a){v=a;do{var b=v.alternate;a=v.return;if((v.effectTag&2048)===C){a:{var c=b;b=v;var d=S;var e=b.pendingProps;switch(b.tag){case 2:break;case 16:break;case 15:case 0:break;case 1:L(b.type)&&Lc(b);break;case 3:ub(b);qe(b);e=b.stateNode;e.pendingContext&&
(e.context=e.pendingContext,e.pendingContext=null);(null===c||null===c.child)&&dd(b)&&Bb(b);Wh(b);break;case 5:De(b);var f=Va(Vb.current);d=b.type;if(null!==c&&null!=b.stateNode)Cj(c,b,d,e,f),c.ref!==b.ref&&(b.effectTag|=128);else if(e){var g=Va(fa.current);if(dd(b)){e=void 0;d=b.stateNode;c=b.type;g=b.memoizedProps;d[Fa]=b;d[Ic]=g;switch(c){case "iframe":case "object":case "embed":x("load",d);break;case "video":case "audio":for(var h=0;h<Mb.length;h++)x(Mb[h],d);break;case "source":x("error",d);
break;case "img":case "image":case "link":x("error",d);x("load",d);break;case "form":x("reset",d);x("submit",d);break;case "details":x("toggle",d);break;case "input":Mf(d,g);x("invalid",d);na(f,"onChange");break;case "select":d._wrapperState={wasMultiple:!!g.multiple};x("invalid",d);na(f,"onChange");break;case "textarea":Pf(d,g),x("invalid",d),na(f,"onChange")}be(c,g);h=null;for(e in g)if(g.hasOwnProperty(e)){var k=g[e];"children"===e?"string"===typeof k?d.textContent!==k&&(h=["children",k]):"number"===
typeof k&&d.textContent!==""+k&&(h=["children",""+k]):db.hasOwnProperty(e)&&null!=k&&na(f,e)}switch(c){case "input":wc(d);Of(d,g,!0);break;case "textarea":wc(d);Rf(d,g);break;case "select":case "option":break;default:"function"===typeof g.onClick&&(d.onclick=Hc)}e=h;b.updateQueue=e;(e=null!==e?!0:!1)&&Bb(b)}else{c=9===f.nodeType?f:f.ownerDocument;"http://www.w3.org/1999/xhtml"===g&&(g=Sf(d));"http://www.w3.org/1999/xhtml"===g?"script"===d?(c=c.createElement("div"),c.innerHTML="<script>\x3c/script>",
c=c.removeChild(c.firstChild)):"string"===typeof e.is?c=c.createElement(d,{is:e.is}):(c=c.createElement(d),"select"===d&&(g=c,e.multiple?g.multiple=!0:e.size&&(g.size=e.size))):c=c.createElementNS(g,d);c[Fa]=b;c[Ic]=e;Dj(c,b,!1,!1);b.stateNode=c;var m=ce(d,e);switch(d){case "iframe":case "object":case "embed":x("load",c);g=e;break;case "video":case "audio":for(g=0;g<Mb.length;g++)x(Mb[g],c);g=e;break;case "source":x("error",c);g=e;break;case "img":case "image":case "link":x("error",c);x("load",c);
g=e;break;case "form":x("reset",c);x("submit",c);g=e;break;case "details":x("toggle",c);g=e;break;case "input":Mf(c,e);g=Ld(c,e);x("invalid",c);na(f,"onChange");break;case "option":g=Od(c,e);break;case "select":c._wrapperState={wasMultiple:!!e.multiple};g=J({},e,{value:void 0});x("invalid",c);na(f,"onChange");break;case "textarea":Pf(c,e);g=Pd(c,e);x("invalid",c);na(f,"onChange");break;default:g=e}be(d,g);h=void 0;k=d;var p=c,q=g;for(h in q)if(q.hasOwnProperty(h)){var n=q[h];"style"===h?ig(p,n):"dangerouslySetInnerHTML"===
h?(n=n?n.__html:void 0,null!=n&&Fh(p,n)):"children"===h?"string"===typeof n?("textarea"!==k||""!==n)&&ec(p,n):"number"===typeof n&&ec(p,""+n):"suppressContentEditableWarning"!==h&&"suppressHydrationWarning"!==h&&"autoFocus"!==h&&(db.hasOwnProperty(h)?null!=n&&na(f,h):null!=n&&Kd(p,h,n,m))}switch(d){case "input":wc(c);Of(c,e,!1);break;case "textarea":wc(c);Rf(c,e);break;case "option":null!=e.value&&c.setAttribute("value",""+za(e.value));break;case "select":f=c;c=e;f.multiple=!!c.multiple;g=c.value;
null!=g?ib(f,!!c.multiple,g,!1):null!=c.defaultValue&&ib(f,!!c.multiple,c.defaultValue,!0);break;default:"function"===typeof g.onClick&&(c.onclick=Hc)}(e=ng(d,e))&&Bb(b)}null!==b.ref&&(b.effectTag|=128)}else if(null===b.stateNode)throw l(Error(166));break;case 6:if(c&&null!=b.stateNode)Ej(c,b,c.memoizedProps,e);else{if("string"!==typeof e&&null===b.stateNode)throw l(Error(166));d=Va(Vb.current);Va(fa.current);dd(b)?(e=b.stateNode,d=b.memoizedProps,e[Fa]=b,e.nodeValue!==d&&Bb(b)):(e=(9===d.nodeType?
d:d.ownerDocument).createTextNode(e),e[Fa]=b,b.stateNode=e)}break;case 11:break;case 13:B(A,b);e=b.memoizedState;if((b.effectTag&64)!==C){b.expirationTime=d;break a}e=null!==e;d=!1;null===c?dd(b):(f=c.memoizedState,d=null!==f,e||null===f||(f=c.child.sibling,null!==f&&(g=b.firstEffect,null!==g?(b.firstEffect=f,f.nextEffect=g):(b.firstEffect=b.lastEffect=f,f.nextEffect=null),f.effectTag=8)));if(e&&!d&&0!==(b.mode&2))if(null===c&&!0!==b.memoizedProps.unstable_avoidThisFallback||0!==(A.current&1))F===
$a&&(F=od);else{if(F===$a||F===od)F=id;0!==gc&&null!==V&&(ta(V,S),Jh(V,gc))}if(e||d)b.effectTag|=4;break;case 7:break;case 8:break;case 12:break;case 4:ub(b);Wh(b);break;case 10:xe(b);break;case 9:break;case 14:break;case 17:L(b.type)&&Lc(b);break;case 19:B(A,b);e=b.memoizedState;if(null===e)break;f=(b.effectTag&64)!==C;g=e.rendering;if(null===g)if(f)ed(e,!1);else{if(F!==$a||null!==c&&(c.effectTag&64)!==C)for(c=b.child;null!==c;){g=ad(c);if(null!==g){b.effectTag|=64;ed(e,!1);e=g.updateQueue;null!==
e&&(b.updateQueue=e,b.effectTag|=4);b.firstEffect=b.lastEffect=null;e=d;for(d=b.child;null!==d;)f=d,c=e,f.effectTag&=I,f.nextEffect=null,f.firstEffect=null,f.lastEffect=null,g=f.alternate,null===g?(f.childExpirationTime=0,f.expirationTime=c,f.child=null,f.memoizedProps=null,f.memoizedState=null,f.updateQueue=null,f.dependencies=null):(f.childExpirationTime=g.childExpirationTime,f.expirationTime=g.expirationTime,f.child=g.child,f.memoizedProps=g.memoizedProps,f.memoizedState=g.memoizedState,f.updateQueue=
g.updateQueue,c=g.dependencies,f.dependencies=null===c?null:{expirationTime:c.expirationTime,firstContext:c.firstContext,responders:c.responders}),d=d.sibling;y(A,A.current&1|2,b);b=b.child;break a}c=c.sibling}}else{if(!f)if(c=ad(g),null!==c){if(b.effectTag|=64,f=!0,ed(e,!0),null===e.tail&&"hidden"===e.tailMode){d=c.updateQueue;null!==d&&(b.updateQueue=d,b.effectTag|=4);b=b.lastEffect=e.lastEffect;null!==b&&(b.nextEffect=null);break}}else aa()>e.tailExpiration&&1<d&&(b.effectTag|=64,f=!0,ed(e,!1),
b.expirationTime=b.childExpirationTime=d-1);e.isBackwards?(g.sibling=b.child,b.child=g):(d=e.last,null!==d?d.sibling=g:b.child=g,e.last=g)}if(null!==e.tail){0===e.tailExpiration&&(e.tailExpiration=aa()+500);d=e.tail;e.rendering=d;e.tail=d.sibling;e.lastEffect=b.lastEffect;d.sibling=null;e=A.current;e=f?e&1|2:e&1;y(A,e,b);b=d;break a}break;case 20:break;case 21:break;default:throw l(Error(156),b.tag);}b=null}e=v;if(1===S||1!==e.childExpirationTime){d=0;for(f=e.child;null!==f;)c=f.expirationTime,g=
f.childExpirationTime,c>d&&(d=c),g>d&&(d=g),f=f.sibling;e.childExpirationTime=d}if(null!==b)return b;null!==a&&(a.effectTag&2048)===C&&(null===a.firstEffect&&(a.firstEffect=v.firstEffect),null!==v.lastEffect&&(null!==a.lastEffect&&(a.lastEffect.nextEffect=v.firstEffect),a.lastEffect=v.lastEffect),1<v.effectTag&&(null!==a.lastEffect?a.lastEffect.nextEffect=v:a.firstEffect=v,a.lastEffect=v))}else{b=oj(v,S);if(null!==b)return b.effectTag&=2047,b;null!==a&&(a.firstEffect=a.lastEffect=null,a.effectTag|=
2048)}b=v.sibling;if(null!==b)return b;v=a}while(null!==v);F===$a&&(F=Ze);return null}function Xe(a){var b=a.expirationTime;a=a.childExpirationTime;return b>a?b:a}function ua(a){var b=re();Ta(99,Fj.bind(null,a,b));return null}function Fj(a,b){Cb();if((n&(X|ba))!==E)throw l(Error(327));var c=a.finishedWork,d=a.finishedExpirationTime;if(null===c)return null;a.finishedWork=null;a.finishedExpirationTime=0;if(c===a.current)throw l(Error(177));a.callbackNode=null;a.callbackExpirationTime=0;a.callbackPriority=
90;a.nextKnownPendingLevel=0;var e=Xe(c);a.firstPendingTime=e;d<=a.lastSuspendedTime?a.firstSuspendedTime=a.lastSuspendedTime=a.nextKnownPendingLevel=0:d<=a.firstSuspendedTime&&(a.firstSuspendedTime=d-1);d<=a.lastPingedTime&&(a.lastPingedTime=0);d<=a.lastExpiredTime&&(a.lastExpiredTime=0);a===V&&(v=V=null,S=0);1<c.effectTag?null!==c.lastEffect?(c.lastEffect.nextEffect=c,e=c.firstEffect):e=c:e=c.firstEffect;if(null!==e){var f=n;n|=ba;Vh.current=null;df=Gc;var g=mg();if(ee(g)){if("selectionStart"in
g)var h={start:g.selectionStart,end:g.selectionEnd};else a:{h=(h=g.ownerDocument)&&h.defaultView||window;var k=h.getSelection&&h.getSelection();if(k&&0!==k.rangeCount){h=k.anchorNode;var m=k.anchorOffset,p=k.focusNode;k=k.focusOffset;try{h.nodeType,p.nodeType}catch(Db){h=null;break a}var x=0,y=-1,A=-1,B=0,F=0,t=g,z=null;b:for(;;){for(var C;;){t!==h||0!==m&&3!==t.nodeType||(y=x+m);t!==p||0!==k&&3!==t.nodeType||(A=x+k);3===t.nodeType&&(x+=t.nodeValue.length);if(null===(C=t.firstChild))break;z=t;t=C}for(;;){if(t===
g)break b;z===h&&++B===m&&(y=x);z===p&&++F===k&&(A=x);if(null!==(C=t.nextSibling))break;t=z;z=t.parentNode}t=C}h=-1===y||-1===A?null:{start:y,end:A}}else h=null}h=h||{start:0,end:0}}else h=null;ef={focusedElem:g,selectionRange:h};Gc=!1;q=e;do try{Gj()}catch(Db){if(null===q)throw l(Error(330));Ya(q,Db);q=q.nextEffect}while(null!==q);q=e;do try{for(g=a,h=b;null!==q;){var r=q.effectTag;r&16&&ec(q.stateNode,"");if(r&128){var u=q.alternate;if(null!==u){var w=u.ref;null!==w&&("function"===typeof w?w(null):
w.current=null)}}switch(r&(I|12|Da)){case I:Eh(q);q.effectTag&=~I;break;case 6:Eh(q);q.effectTag&=~I;Te(q.alternate,q);break;case Da:q.effectTag&=~Da;break;case 1028:q.effectTag&=~Da;Te(q.alternate,q);break;case 4:Te(q.alternate,q);break;case 8:m=q,Bh(g,m,h),Ch(m)}q=q.nextEffect}}catch(Db){if(null===q)throw l(Error(330));Ya(q,Db);q=q.nextEffect}while(null!==q);w=ef;u=mg();r=w.focusedElem;h=w.selectionRange;if(u!==r&&r&&r.ownerDocument&&lg(r.ownerDocument.documentElement,r)){null!==h&&ee(r)&&(u=h.start,
w=h.end,void 0===w&&(w=u),"selectionStart"in r?(r.selectionStart=u,r.selectionEnd=Math.min(w,r.value.length)):(w=(u=r.ownerDocument||document)&&u.defaultView||window,w.getSelection&&(w=w.getSelection(),m=r.textContent.length,g=Math.min(h.start,m),h=void 0===h.end?g:Math.min(h.end,m),!w.extend&&g>h&&(m=h,h=g,g=m),m=kg(r,g),p=kg(r,h),m&&p&&(1!==w.rangeCount||w.anchorNode!==m.node||w.anchorOffset!==m.offset||w.focusNode!==p.node||w.focusOffset!==p.offset)&&(u=u.createRange(),u.setStart(m.node,m.offset),
w.removeAllRanges(),g>h?(w.addRange(u),w.extend(p.node,p.offset)):(u.setEnd(p.node,p.offset),w.addRange(u))))));u=[];for(w=r;w=w.parentNode;)1===w.nodeType&&u.push({element:w,left:w.scrollLeft,top:w.scrollTop});"function"===typeof r.focus&&r.focus();for(r=0;r<u.length;r++)w=u[r],w.element.scrollLeft=w.left,w.element.scrollTop=w.top}ef=null;Gc=!!df;df=null;a.current=c;q=e;do try{for(r=d;null!==q;){var H=q.effectTag;if(H&36){var D=q.alternate;u=q;w=r;switch(u.tag){case 0:case 11:case 15:dc(16,32,u);
break;case 1:var G=u.stateNode;if(u.effectTag&4)if(null===D)G.componentDidMount();else{var K=u.elementType===u.type?D.memoizedProps:Y(u.type,D.memoizedProps);G.componentDidUpdate(K,D.memoizedState,G.__reactInternalSnapshotBeforeUpdate)}var J=u.updateQueue;null!==J&&Yg(u,J,G,w);break;case 3:var L=u.updateQueue;if(null!==L){g=null;if(null!==u.child)switch(u.child.tag){case 5:g=u.child.stateNode;break;case 1:g=u.child.stateNode}Yg(u,L,g,w)}break;case 5:var P=u.stateNode;null===D&&u.effectTag&4&&(w=P,
ng(u.type,u.memoizedProps)&&w.focus());break;case 6:break;case 4:break;case 12:break;case 13:if(null===u.memoizedState){var N=u.alternate;if(null!==N){var O=N.memoizedState;if(null!==O){var Q=O.dehydrated;null!==Q&&Yf(Q)}}}break;case 19:case 17:case 20:case 21:break;default:throw l(Error(163));}}if(H&128){u=q;var M=u.ref;if(null!==M){var T=u.stateNode;switch(u.tag){case 5:var R=T;break;default:R=T}"function"===typeof M?M(R):M.current=R}}q=q.nextEffect}}catch(Db){if(null===q)throw l(Error(330));Ya(q,
Db);q=q.nextEffect}while(null!==q);q=null;Hj();n=f}else a.current=c;if(rd)rd=!1,sd=a,hc=b;else for(q=e;null!==q;)b=q.nextEffect,q.nextEffect=null,q=b;b=a.firstPendingTime;0===b&&(Na=null);1073741823===b?a===ff?ic++:(ic=0,ff=a):ic=0;"function"===typeof gf&&gf(c.stateNode,d);U(a);if(fd)throw fd=!1,a=Ve,Ve=null,a;if((n&cf)!==E)return null;W();return null}function Gj(){for(;null!==q;){var a=q.effectTag;(a&256)!==C&&qj(q.alternate,q);(a&512)===C||rd||(rd=!0,se(97,function(){Cb();return null}));q=q.nextEffect}}
function Cb(){if(90!==hc){var a=97<hc?97:hc;hc=90;return Ta(a,Ij)}}function Ij(){if(null===sd)return!1;var a=sd;sd=null;if((n&(X|ba))!==E)throw l(Error(331));var b=n;n|=ba;for(a=a.current.firstEffect;null!==a;){try{var c=a;if((c.effectTag&512)!==C)switch(c.tag){case 0:case 11:case 15:dc(128,0,c),dc(0,64,c)}}catch(d){if(null===a)throw l(Error(330));Ya(a,d)}c=a.nextEffect;a.nextEffect=null;a=c}n=b;W();return!0}function Xh(a,b,c){b=Qe(c,b);b=Hh(a,b,1073741823);Ja(a,b);a=hd(a,1073741823);null!==a&&U(a)}
function Ya(a,b){if(3===a.tag)Xh(a,a,b);else for(var c=a.return;null!==c;){if(3===c.tag){Xh(c,a,b);break}else if(1===c.tag){var d=c.stateNode;if("function"===typeof c.type.getDerivedStateFromError||"function"===typeof d.componentDidCatch&&(null===Na||!Na.has(d))){a=Qe(b,a);a=Ih(c,a,1073741823);Ja(c,a);c=hd(c,1073741823);null!==c&&U(c);break}}c=c.return}}function zj(a,b,c){var d=a.pingCache;null!==d&&d.delete(b);V===a&&S===c?F===id||F===od&&1073741823===va&&aa()-Ue<Qh?Za(a,S):pd=!0:Kh(a,c)&&(b=a.lastPingedTime,
0!==b&&b<c||(a.lastPingedTime=c,a.finishedExpirationTime===c&&(a.finishedExpirationTime=0,a.finishedWork=null),U(a)))}function sj(a,b){var c=a.stateNode;null!==c&&c.delete(b);b=1;1===b&&(b=qa(),b=zb(b,a,null));a=hd(a,b);null!==a&&U(a)}function Jj(a){if("undefined"===typeof __REACT_DEVTOOLS_GLOBAL_HOOK__)return!1;var b=__REACT_DEVTOOLS_GLOBAL_HOOK__;if(b.isDisabled||!b.supportsFiber)return!0;try{var c=b.inject(a);gf=function(a,e){try{b.onCommitFiberRoot(c,a,void 0,64===(a.current.effectTag&64))}catch(f){}};
Se=function(a){try{b.onCommitFiberUnmount(c,a)}catch(e){}}}catch(d){}return!0}function Kj(a,b,c,d){this.tag=a;this.key=c;this.sibling=this.child=this.return=this.stateNode=this.type=this.elementType=null;this.index=0;this.ref=null;this.pendingProps=b;this.dependencies=this.memoizedState=this.updateQueue=this.memoizedProps=null;this.mode=d;this.effectTag=C;this.lastEffect=this.firstEffect=this.nextEffect=null;this.childExpirationTime=this.expirationTime=0;this.alternate=null}function Le(a){a=a.prototype;
return!(!a||!a.isReactComponent)}function Lj(a){if("function"===typeof a)return Le(a)?1:0;if(void 0!==a&&null!==a){a=a.$$typeof;if(a===Ed)return 11;if(a===Fd)return 14}return 2}function Ua(a,b,c){c=a.alternate;null===c?(c=ja(a.tag,b,a.key,a.mode),c.elementType=a.elementType,c.type=a.type,c.stateNode=a.stateNode,c.alternate=a,a.alternate=c):(c.pendingProps=b,c.effectTag=C,c.nextEffect=null,c.firstEffect=null,c.lastEffect=null);c.childExpirationTime=a.childExpirationTime;c.expirationTime=a.expirationTime;
c.child=a.child;c.memoizedProps=a.memoizedProps;c.memoizedState=a.memoizedState;c.updateQueue=a.updateQueue;b=a.dependencies;c.dependencies=null===b?null:{expirationTime:b.expirationTime,firstContext:b.firstContext,responders:b.responders};c.sibling=a.sibling;c.index=a.index;c.ref=a.ref;return c}function Yc(a,b,c,d,e,f){var g=2;d=a;if("function"===typeof a)Le(a)&&(g=1);else if("string"===typeof a)g=5;else a:switch(a){case ya:return La(c.children,e,f,b);case Mj:g=8;e|=7;break;case zf:g=8;e|=1;break;
case uc:return a=ja(12,c,b,e|8),a.elementType=uc,a.type=uc,a.expirationTime=f,a;case vc:return a=ja(13,c,b,e),a.type=vc,a.elementType=vc,a.expirationTime=f,a;case Dd:return a=ja(19,c,b,e),a.elementType=Dd,a.expirationTime=f,a;default:if("object"===typeof a&&null!==a)switch(a.$$typeof){case Bf:g=10;break a;case Af:g=9;break a;case Ed:g=11;break a;case Fd:g=14;break a;case Cf:g=16;d=null;break a}throw l(Error(130),null==a?a:typeof a,"");}b=ja(g,c,b,e);b.elementType=a;b.type=d;b.expirationTime=f;return b}
function La(a,b,c,d){a=ja(7,a,d,b);a.expirationTime=c;return a}function Ae(a,b,c){a=ja(6,a,null,b);a.expirationTime=c;return a}function Be(a,b,c){b=ja(4,null!==a.children?a.children:[],a.key,b);b.expirationTime=c;b.stateNode={containerInfo:a.containerInfo,pendingChildren:null,implementation:a.implementation};return b}function Nj(a,b,c){this.tag=b;this.current=null;this.containerInfo=a;this.pingCache=this.pendingChildren=null;this.finishedExpirationTime=0;this.finishedWork=null;this.timeoutHandle=
-1;this.pendingContext=this.context=null;this.hydrate=c;this.callbackNode=this.firstBatch=null;this.callbackPriority=90;this.lastExpiredTime=this.lastPingedTime=this.nextKnownPendingLevel=this.lastSuspendedTime=this.firstSuspendedTime=this.firstPendingTime=0}function Kh(a,b){var c=a.firstSuspendedTime;a=a.lastSuspendedTime;return 0!==c&&c>=b&&a<=b}function ta(a,b){var c=a.firstSuspendedTime,d=a.lastSuspendedTime;c<b&&(a.firstSuspendedTime=b);if(d>b||0===c)a.lastSuspendedTime=b;b<=a.lastPingedTime&&
(a.lastPingedTime=0);b<=a.lastExpiredTime&&(a.lastExpiredTime=0)}function Jh(a,b){b>a.firstPendingTime&&(a.firstPendingTime=b);var c=a.firstSuspendedTime;0!==c&&(b>=c?a.firstSuspendedTime=a.lastSuspendedTime=a.nextKnownPendingLevel=0:b>=a.lastSuspendedTime&&(a.lastSuspendedTime=b+1),b>a.nextKnownPendingLevel&&(a.nextKnownPendingLevel=b))}function kd(a,b){var c=a.lastExpiredTime;if(0===c||c>b)a.lastExpiredTime=b}function Yh(a,b,c,d,e,f){var g=b.current;a:if(c){c=c._reactInternalFiber;b:{if(kb(c)!==
c||1!==c.tag)throw l(Error(170));var h=c;do{switch(h.tag){case 3:h=h.stateNode.context;break b;case 1:if(L(h.type)){h=h.stateNode.__reactInternalMemoizedMergedChildContext;break b}}h=h.return}while(null!==h);throw l(Error(171));}if(1===c.tag){var k=c.type;if(L(k)){c=Gg(c,k,h);break a}}c=h}else c=Ha;null===b.context?b.context=c:b.pendingContext=c;b=f;e=Ia(d,e);e.payload={element:a};b=void 0===b?null:b;null!==b&&(e.callback=b);Ja(g,e);cc(g,d);return d}function td(a,b,c,d){var e=b.current,f=qa(),g=bc.suspense;
e=zb(f,e,g);return Yh(a,b,c,e,g,d)}function hf(a){a=a.current;if(!a.child)return null;switch(a.child.tag){case 5:return a.child.stateNode;default:return a.child.stateNode}}function Oj(a,b,c){var d=3<arguments.length&&void 0!==arguments[3]?arguments[3]:null;return{$$typeof:fb,key:null==d?null:""+d,children:a,containerInfo:b,implementation:c}}function jc(a){var b=1073741821-25*(((1073741821-qa()+500)/25|0)+1);b<=Zh&&--b;this._expirationTime=Zh=b;this._root=a;this._callbacks=this._next=null;this._hasChildren=
this._didComplete=!1;this._children=null;this._defer=!0}function kc(){this._callbacks=null;this._didCommit=!1;this._onCommit=this._onCommit.bind(this)}function $h(a,b,c){c=null!=c&&!0===c.hydrate;var d=new Nj(a,b,c);var e=ja(3,null,null,2===b?7:1===b?3:0);d.current=e;e.stateNode=d;a[ie]=d.current;c&&0!==b&&Ii(9===a.nodeType?a:a.ownerDocument);return d}function ud(a,b,c){this._internalRoot=$h(a,b,c)}function vd(a,b){this._internalRoot=$h(a,2,b)}function bb(a){return!(!a||1!==a.nodeType&&9!==a.nodeType&&
11!==a.nodeType&&(a.nodeType!==Pa||" react-mount-point-unstable "!==a.nodeValue))}function Pj(a,b){b||(b=a?9===a.nodeType?a.documentElement:a.firstChild:null,b=!(!b||1!==b.nodeType||!b.hasAttribute("data-reactroot")));if(!b)for(var c;c=a.lastChild;)a.removeChild(c);return new ud(a,0,b?{hydrate:!0}:void 0)}function wd(a,b,c,d,e){var f=c._reactRootContainer;if(f){var g=f._internalRoot;if("function"===typeof e){var h=e;e=function(){var a=hf(g);h.call(a)}}td(b,g,a,e)}else{f=c._reactRootContainer=Pj(c,
d);g=f._internalRoot;if("function"===typeof e){var k=e;e=function(){var a=hf(g);k.call(a)}}Sh(function(){td(b,g,a,e)})}return hf(g)}function ai(a,b){var c=2<arguments.length&&void 0!==arguments[2]?arguments[2]:null;if(!bb(b))throw l(Error(200));return Oj(a,b,null,c)}if(!la)throw l(Error(227));var pc=null,cb={},qc=[],yd={},db={},zd={},wi=function(a,b,c,d,e,f,g,h,k){var m=Array.prototype.slice.call(arguments,3);try{b.apply(c,m)}catch(p){this.onError(p)}},Eb=!1,rc=null,sc=!1,Ad=null,xi={onError:function(a){Eb=
!0;rc=a}},Cd=null,Ef=null,wf=null,Fb=null,zi=function(a){if(a){var b=a._dispatchListeners,c=a._dispatchInstances;if(Array.isArray(b))for(var d=0;d<b.length&&!a.isPropagationStopped();d++)vf(a,b[d],c[d]);else b&&vf(a,b,c);a._dispatchListeners=null;a._dispatchInstances=null;a.isPersistent()||a.constructor.release(a)}},jf={injectEventPluginOrder:function(a){if(pc)throw l(Error(101));pc=Array.prototype.slice.call(a);tf()},injectEventPluginsByName:function(a){var b=!1,c;for(c in a)if(a.hasOwnProperty(c)){var d=
a[c];if(!cb.hasOwnProperty(c)||cb[c]!==d){if(cb[c])throw l(Error(102),c);cb[c]=d;b=!0}}b&&tf()}},ka=la.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED;ka.hasOwnProperty("ReactCurrentDispatcher")||(ka.ReactCurrentDispatcher={current:null});ka.hasOwnProperty("ReactCurrentBatchConfig")||(ka.ReactCurrentBatchConfig={suspense:null});var Bi=/^(.*)[\\\/]/,G="function"===typeof Symbol&&Symbol.for,Zc=G?Symbol.for("react.element"):60103,fb=G?Symbol.for("react.portal"):60106,ya=G?Symbol.for("react.fragment"):
60107,zf=G?Symbol.for("react.strict_mode"):60108,uc=G?Symbol.for("react.profiler"):60114,Bf=G?Symbol.for("react.provider"):60109,Af=G?Symbol.for("react.context"):60110,Mj=G?Symbol.for("react.concurrent_mode"):60111,Ed=G?Symbol.for("react.forward_ref"):60112,vc=G?Symbol.for("react.suspense"):60113,Dd=G?Symbol.for("react.suspense_list"):60120,Fd=G?Symbol.for("react.memo"):60115,Cf=G?Symbol.for("react.lazy"):60116;G&&Symbol.for("react.fundamental");G&&Symbol.for("react.responder");G&&Symbol.for("react.scope");
var yf="function"===typeof Symbol&&Symbol.iterator,Ea=!("undefined"===typeof window||"undefined"===typeof window.document||"undefined"===typeof window.document.createElement),J=la.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.assign,Hd=null,gb=null,hb=null,me=function(a,b){return a(b)},cg=function(a,b,c,d){return a(b,c,d)},Jd=function(){},eg=me,Oa=!1,ae=!1,T=la.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.Scheduler,Qj=T.unstable_cancelCallback,kf=T.unstable_now,Wf=T.unstable_scheduleCallback,
Rj=T.unstable_shouldYield,bi=T.unstable_requestPaint,Sj=T.unstable_runWithPriority,Tj=T.unstable_getCurrentPriorityLevel,Uj=T.unstable_ImmediatePriority,Vj=T.unstable_UserBlockingPriority,Xf=T.unstable_NormalPriority,Wj=T.unstable_LowPriority,Xj=T.unstable_IdlePriority;new Map;new Map;new Map;var Di=/^[:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD][:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD\-.0-9\u00B7\u0300-\u036F\u203F-\u2040]*$/,
Hf=Object.prototype.hasOwnProperty,Jf={},If={},H={};"children dangerouslySetInnerHTML defaultValue defaultChecked innerHTML suppressContentEditableWarning suppressHydrationWarning style".split(" ").forEach(function(a){H[a]=new K(a,0,!1,a,null,!1)});[["acceptCharset","accept-charset"],["className","class"],["htmlFor","for"],["httpEquiv","http-equiv"]].forEach(function(a){var b=a[0];H[b]=new K(b,1,!1,a[1],null,!1)});["contentEditable","draggable","spellCheck","value"].forEach(function(a){H[a]=new K(a,
2,!1,a.toLowerCase(),null,!1)});["autoReverse","externalResourcesRequired","focusable","preserveAlpha"].forEach(function(a){H[a]=new K(a,2,!1,a,null,!1)});"allowFullScreen async autoFocus autoPlay controls default defer disabled disablePictureInPicture formNoValidate hidden loop noModule noValidate open playsInline readOnly required reversed scoped seamless itemScope".split(" ").forEach(function(a){H[a]=new K(a,3,!1,a.toLowerCase(),null,!1)});["checked","multiple","muted","selected"].forEach(function(a){H[a]=
new K(a,3,!0,a,null,!1)});["capture","download"].forEach(function(a){H[a]=new K(a,4,!1,a,null,!1)});["cols","rows","size","span"].forEach(function(a){H[a]=new K(a,6,!1,a,null,!1)});["rowSpan","start"].forEach(function(a){H[a]=new K(a,5,!1,a.toLowerCase(),null,!1)});var lf=/[\-:]([a-z])/g,mf=function(a){return a[1].toUpperCase()};"accent-height alignment-baseline arabic-form baseline-shift cap-height clip-path clip-rule color-interpolation color-interpolation-filters color-profile color-rendering dominant-baseline enable-background fill-opacity fill-rule flood-color flood-opacity font-family font-size font-size-adjust font-stretch font-style font-variant font-weight glyph-name glyph-orientation-horizontal glyph-orientation-vertical horiz-adv-x horiz-origin-x image-rendering letter-spacing lighting-color marker-end marker-mid marker-start overline-position overline-thickness paint-order panose-1 pointer-events rendering-intent shape-rendering stop-color stop-opacity strikethrough-position strikethrough-thickness stroke-dasharray stroke-dashoffset stroke-linecap stroke-linejoin stroke-miterlimit stroke-opacity stroke-width text-anchor text-decoration text-rendering underline-position underline-thickness unicode-bidi unicode-range units-per-em v-alphabetic v-hanging v-ideographic v-mathematical vector-effect vert-adv-y vert-origin-x vert-origin-y word-spacing writing-mode xmlns:xlink x-height".split(" ").forEach(function(a){var b=
a.replace(lf,mf);H[b]=new K(b,1,!1,a,null,!1)});"xlink:actuate xlink:arcrole xlink:role xlink:show xlink:title xlink:type".split(" ").forEach(function(a){var b=a.replace(lf,mf);H[b]=new K(b,1,!1,a,"http://www.w3.org/1999/xlink",!1)});["xml:base","xml:lang","xml:space"].forEach(function(a){var b=a.replace(lf,mf);H[b]=new K(b,1,!1,a,"http://www.w3.org/XML/1998/namespace",!1)});["tabIndex","crossOrigin"].forEach(function(a){H[a]=new K(a,1,!1,a.toLowerCase(),null,!1)});H.xlinkHref=new K("xlinkHref",1,
!1,"xlink:href","http://www.w3.org/1999/xlink",!0);["src","href","action","formAction"].forEach(function(a){H[a]=new K(a,1,!1,a.toLowerCase(),null,!0)});var xd,Fh=function(a){return"undefined"!==typeof MSApp&&MSApp.execUnsafeLocalFunction?function(b,c,d,e){MSApp.execUnsafeLocalFunction(function(){return a(b,c,d,e)})}:a}(function(a,b){if("http://www.w3.org/2000/svg"!==a.namespaceURI||"innerHTML"in a)a.innerHTML=b;else{xd=xd||document.createElement("div");xd.innerHTML="<svg>"+b.valueOf().toString()+
"</svg>";for(b=xd.firstChild;a.firstChild;)a.removeChild(a.firstChild);for(;b.firstChild;)a.appendChild(b.firstChild)}}),Pa=8,ec=function(a,b){if(b){var c=a.firstChild;if(c&&c===a.lastChild&&3===c.nodeType){c.nodeValue=b;return}}a.textContent=b},jb={animationend:xc("Animation","AnimationEnd"),animationiteration:xc("Animation","AnimationIteration"),animationstart:xc("Animation","AnimationStart"),transitionend:xc("Transition","TransitionEnd")},Rd={},Tf={};Ea&&(Tf=document.createElement("div").style,
"AnimationEvent"in window||(delete jb.animationend.animation,delete jb.animationiteration.animation,delete jb.animationstart.animation),"TransitionEvent"in window||delete jb.transitionend.transition);var ci=yc("animationend"),di=yc("animationiteration"),ei=yc("animationstart"),fi=yc("transitionend"),Mb="abort canplay canplaythrough durationchange emptied encrypted ended error loadeddata loadedmetadata loadstart pause play playing progress ratechange seeked seeking stalled suspend timeupdate volumechange waiting".split(" "),
Xd=!1,ca=[],Aa=null,Ba=null,Ca=null,Hb=new Map,Ib=new Map,Td="mousedown mouseup touchcancel touchend touchstart auxclick dblclick pointercancel pointerdown pointerup dragend dragstart drop compositionend compositionstart keydown keypress keyup input textInput close cancel copy cut paste click change contextmenu reset submit".split(" "),Ji="focus blur dragenter dragleave mouseover mouseout pointerover pointerout gotpointercapture lostpointercapture".split(" "),C=0,I=2,Da=1024;J(O.prototype,{preventDefault:function(){this.defaultPrevented=
!0;var a=this.nativeEvent;a&&(a.preventDefault?a.preventDefault():"unknown"!==typeof a.returnValue&&(a.returnValue=!1),this.isDefaultPrevented=Ac)},stopPropagation:function(){var a=this.nativeEvent;a&&(a.stopPropagation?a.stopPropagation():"unknown"!==typeof a.cancelBubble&&(a.cancelBubble=!0),this.isPropagationStopped=Ac)},persist:function(){this.isPersistent=Ac},isPersistent:Bc,destructor:function(){var a=this.constructor.Interface,b;for(b in a)this[b]=null;this.nativeEvent=this._targetInst=this.dispatchConfig=
null;this.isPropagationStopped=this.isDefaultPrevented=Bc;this._dispatchInstances=this._dispatchListeners=null}});O.Interface={type:null,target:null,currentTarget:function(){return null},eventPhase:null,bubbles:null,cancelable:null,timeStamp:function(a){return a.timeStamp||Date.now()},defaultPrevented:null,isTrusted:null};O.extend=function(a){function b(){return c.apply(this,arguments)}var c=this,d=function(){};d.prototype=c.prototype;d=new d;J(d,b.prototype);b.prototype=d;b.prototype.constructor=
b;b.Interface=J({},c.Interface,a);b.extend=c.extend;bg(b);return b};bg(O);var Yj=O.extend({animationName:null,elapsedTime:null,pseudoElement:null}),Zj=O.extend({clipboardData:function(a){return"clipboardData"in a?a.clipboardData:window.clipboardData}}),lc=O.extend({view:null,detail:null}),ak=lc.extend({relatedTarget:null}),bk={Esc:"Escape",Spacebar:" ",Left:"ArrowLeft",Up:"ArrowUp",Right:"ArrowRight",Down:"ArrowDown",Del:"Delete",Win:"OS",Menu:"ContextMenu",Apps:"ContextMenu",Scroll:"ScrollLock",
MozPrintableKey:"Unidentified"},ck={8:"Backspace",9:"Tab",12:"Clear",13:"Enter",16:"Shift",17:"Control",18:"Alt",19:"Pause",20:"CapsLock",27:"Escape",32:" ",33:"PageUp",34:"PageDown",35:"End",36:"Home",37:"ArrowLeft",38:"ArrowUp",39:"ArrowRight",40:"ArrowDown",45:"Insert",46:"Delete",112:"F1",113:"F2",114:"F3",115:"F4",116:"F5",117:"F6",118:"F7",119:"F8",120:"F9",121:"F10",122:"F11",123:"F12",144:"NumLock",145:"ScrollLock",224:"Meta"},Si={Alt:"altKey",Control:"ctrlKey",Meta:"metaKey",Shift:"shiftKey"},
dk=lc.extend({key:function(a){if(a.key){var b=bk[a.key]||a.key;if("Unidentified"!==b)return b}return"keypress"===a.type?(a=Cc(a),13===a?"Enter":String.fromCharCode(a)):"keydown"===a.type||"keyup"===a.type?ck[a.keyCode]||"Unidentified":""},location:null,ctrlKey:null,shiftKey:null,altKey:null,metaKey:null,repeat:null,locale:null,getModifierState:$d,charCode:function(a){return"keypress"===a.type?Cc(a):0},keyCode:function(a){return"keydown"===a.type||"keyup"===a.type?a.keyCode:0},which:function(a){return"keypress"===
a.type?Cc(a):"keydown"===a.type||"keyup"===a.type?a.keyCode:0}}),gi=0,hi=0,ii=!1,ji=!1,mc=lc.extend({screenX:null,screenY:null,clientX:null,clientY:null,pageX:null,pageY:null,ctrlKey:null,shiftKey:null,altKey:null,metaKey:null,getModifierState:$d,button:null,buttons:null,relatedTarget:function(a){return a.relatedTarget||(a.fromElement===a.srcElement?a.toElement:a.fromElement)},movementX:function(a){if("movementX"in a)return a.movementX;var b=gi;gi=a.screenX;return ii?"mousemove"===a.type?a.screenX-
b:0:(ii=!0,0)},movementY:function(a){if("movementY"in a)return a.movementY;var b=hi;hi=a.screenY;return ji?"mousemove"===a.type?a.screenY-b:0:(ji=!0,0)}}),ki=mc.extend({pointerId:null,width:null,height:null,pressure:null,tangentialPressure:null,tiltX:null,tiltY:null,twist:null,pointerType:null,isPrimary:null}),ek=mc.extend({dataTransfer:null}),fk=lc.extend({touches:null,targetTouches:null,changedTouches:null,altKey:null,metaKey:null,ctrlKey:null,shiftKey:null,getModifierState:$d}),gk=O.extend({propertyName:null,
elapsedTime:null,pseudoElement:null}),hk=mc.extend({deltaX:function(a){return"deltaX"in a?a.deltaX:"wheelDeltaX"in a?-a.wheelDeltaX:0},deltaY:function(a){return"deltaY"in a?a.deltaY:"wheelDeltaY"in a?-a.wheelDeltaY:"wheelDelta"in a?-a.wheelDelta:0},deltaZ:null,deltaMode:null}),li=[["blur","blur",0],["cancel","cancel",0],["click","click",0],["close","close",0],["contextmenu","contextMenu",0],["copy","copy",0],["cut","cut",0],["auxclick","auxClick",0],["dblclick","doubleClick",0],["dragend","dragEnd",
0],["dragstart","dragStart",0],["drop","drop",0],["focus","focus",0],["input","input",0],["invalid","invalid",0],["keydown","keyDown",0],["keypress","keyPress",0],["keyup","keyUp",0],["mousedown","mouseDown",0],["mouseup","mouseUp",0],["paste","paste",0],["pause","pause",0],["play","play",0],["pointercancel","pointerCancel",0],["pointerdown","pointerDown",0],["pointerup","pointerUp",0],["ratechange","rateChange",0],["reset","reset",0],["seeked","seeked",0],["submit","submit",0],["touchcancel","touchCancel",
0],["touchend","touchEnd",0],["touchstart","touchStart",0],["volumechange","volumeChange",0],["drag","drag",1],["dragenter","dragEnter",1],["dragexit","dragExit",1],["dragleave","dragLeave",1],["dragover","dragOver",1],["mousemove","mouseMove",1],["mouseout","mouseOut",1],["mouseover","mouseOver",1],["pointermove","pointerMove",1],["pointerout","pointerOut",1],["pointerover","pointerOver",1],["scroll","scroll",1],["toggle","toggle",1],["touchmove","touchMove",1],["wheel","wheel",1],["abort","abort",
2],[ci,"animationEnd",2],[di,"animationIteration",2],[ei,"animationStart",2],["canplay","canPlay",2],["canplaythrough","canPlayThrough",2],["durationchange","durationChange",2],["emptied","emptied",2],["encrypted","encrypted",2],["ended","ended",2],["error","error",2],["gotpointercapture","gotPointerCapture",2],["load","load",2],["loadeddata","loadedData",2],["loadedmetadata","loadedMetadata",2],["loadstart","loadStart",2],["lostpointercapture","lostPointerCapture",2],["playing","playing",2],["progress",
"progress",2],["seeking","seeking",2],["stalled","stalled",2],["suspend","suspend",2],["timeupdate","timeUpdate",2],[fi,"transitionEnd",2],["waiting","waiting",2]],mi={},nf={},of=0;for(;of<li.length;of++){var pf=li[of],ni=pf[0],qf=pf[1],ik=pf[2],oi="on"+(qf[0].toUpperCase()+qf.slice(1)),pi={phasedRegistrationNames:{bubbled:oi,captured:oi+"Capture"},dependencies:[ni],eventPriority:ik};mi[qf]=pi;nf[ni]=pi}var qi={eventTypes:mi,getEventPriority:function(a){a=nf[a];return void 0!==a?a.eventPriority:2},
extractEvents:function(a,b,c,d,e){e=nf[a];if(!e)return null;switch(a){case "keypress":if(0===Cc(c))return null;case "keydown":case "keyup":a=dk;break;case "blur":case "focus":a=ak;break;case "click":if(2===c.button)return null;case "auxclick":case "dblclick":case "mousedown":case "mousemove":case "mouseup":case "mouseout":case "mouseover":case "contextmenu":a=mc;break;case "drag":case "dragend":case "dragenter":case "dragexit":case "dragleave":case "dragover":case "dragstart":case "drop":a=ek;break;
case "touchcancel":case "touchend":case "touchmove":case "touchstart":a=fk;break;case ci:case di:case ei:a=Yj;break;case fi:a=gk;break;case "scroll":a=lc;break;case "wheel":a=hk;break;case "copy":case "cut":case "paste":a=Zj;break;case "gotpointercapture":case "lostpointercapture":case "pointercancel":case "pointerdown":case "pointermove":case "pointerout":case "pointerover":case "pointerup":a=ki;break;default:a=O}b=a.getPooled(e,b,c,d);lb(b);return b}},Ui=qi.getEventPriority,Xi=10,Fc=[],Gc=!0,gg=
new ("function"===typeof WeakMap?WeakMap:Map),Nb={animationIterationCount:!0,borderImageOutset:!0,borderImageSlice:!0,borderImageWidth:!0,boxFlex:!0,boxFlexGroup:!0,boxOrdinalGroup:!0,columnCount:!0,columns:!0,flex:!0,flexGrow:!0,flexPositive:!0,flexShrink:!0,flexNegative:!0,flexOrder:!0,gridArea:!0,gridRow:!0,gridRowEnd:!0,gridRowSpan:!0,gridRowStart:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnSpan:!0,gridColumnStart:!0,fontWeight:!0,lineClamp:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,tabSize:!0,
widows:!0,zIndex:!0,zoom:!0,fillOpacity:!0,floodOpacity:!0,stopOpacity:!0,strokeDasharray:!0,strokeDashoffset:!0,strokeMiterlimit:!0,strokeOpacity:!0,strokeWidth:!0},jk=["Webkit","ms","Moz","O"];Object.keys(Nb).forEach(function(a){jk.forEach(function(b){b=b+a.charAt(0).toUpperCase()+a.substring(1);Nb[b]=Nb[a]})});var Yi=J({menuitem:!0},{area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0}),pg="$",qg="/$",he="$?",ge="$!",df=null,
ef=null,Ye="function"===typeof setTimeout?setTimeout:void 0,xj="function"===typeof clearTimeout?clearTimeout:void 0,rf=Math.random().toString(36).slice(2),Fa="__reactInternalInstance$"+rf,Ic="__reactEventHandlers$"+rf,ie="__reactContainere$"+rf,Ga=null,ke=null,Jc=null,kk=O.extend({data:null}),lk=O.extend({data:null}),Zi=[9,13,27,32],le=Ea&&"CompositionEvent"in window,nc=null;Ea&&"documentMode"in document&&(nc=document.documentMode);var mk=Ea&&"TextEvent"in window&&!nc,xg=Ea&&(!le||nc&&8<nc&&11>=nc),
wg=String.fromCharCode(32),wa={beforeInput:{phasedRegistrationNames:{bubbled:"onBeforeInput",captured:"onBeforeInputCapture"},dependencies:["compositionend","keypress","textInput","paste"]},compositionEnd:{phasedRegistrationNames:{bubbled:"onCompositionEnd",captured:"onCompositionEndCapture"},dependencies:"blur compositionend keydown keypress keyup mousedown".split(" ")},compositionStart:{phasedRegistrationNames:{bubbled:"onCompositionStart",captured:"onCompositionStartCapture"},dependencies:"blur compositionstart keydown keypress keyup mousedown".split(" ")},
compositionUpdate:{phasedRegistrationNames:{bubbled:"onCompositionUpdate",captured:"onCompositionUpdateCapture"},dependencies:"blur compositionupdate keydown keypress keyup mousedown".split(" ")}},vg=!1,nb=!1,nk={eventTypes:wa,extractEvents:function(a,b,c,d,e){var f;if(le)b:{switch(a){case "compositionstart":var g=wa.compositionStart;break b;case "compositionend":g=wa.compositionEnd;break b;case "compositionupdate":g=wa.compositionUpdate;break b}g=void 0}else nb?tg(a,c)&&(g=wa.compositionEnd):"keydown"===
a&&229===c.keyCode&&(g=wa.compositionStart);g?(xg&&"ko"!==c.locale&&(nb||g!==wa.compositionStart?g===wa.compositionEnd&&nb&&(f=sg()):(Ga=d,ke="value"in Ga?Ga.value:Ga.textContent,nb=!0)),e=kk.getPooled(g,b,c,d),f?e.data=f:(f=ug(c),null!==f&&(e.data=f)),lb(e),f=e):f=null;(a=mk?$i(a,c):aj(a,c))?(b=lk.getPooled(wa.beforeInput,b,c,d),b.data=a,lb(b)):b=null;return null===f?b:null===b?f:[f,b]}},bj={color:!0,date:!0,datetime:!0,"datetime-local":!0,email:!0,month:!0,number:!0,password:!0,range:!0,search:!0,
tel:!0,text:!0,time:!0,url:!0,week:!0},Ag={change:{phasedRegistrationNames:{bubbled:"onChange",captured:"onChangeCapture"},dependencies:"blur change click focus input keydown keyup selectionchange".split(" ")}},Ob=null,Pb=null,sf=!1;Ea&&(sf=fg("input")&&(!document.documentMode||9<document.documentMode));var ok={eventTypes:Ag,_isInputEventSupported:sf,extractEvents:function(a,b,c,d,e){e=b?Qa(b):window;var f=e.nodeName&&e.nodeName.toLowerCase();if("select"===f||"input"===f&&"file"===e.type)var g=dj;
else if(yg(e))if(sf)g=hj;else{g=fj;var h=ej}else(f=e.nodeName)&&"input"===f.toLowerCase()&&("checkbox"===e.type||"radio"===e.type)&&(g=gj);if(g&&(g=g(a,b)))return zg(g,c,d);h&&h(a,e,b);"blur"===a&&(a=e._wrapperState)&&a.controlled&&"number"===e.type&&Nd(e,"number",e.value)}},oc={mouseEnter:{registrationName:"onMouseEnter",dependencies:["mouseout","mouseover"]},mouseLeave:{registrationName:"onMouseLeave",dependencies:["mouseout","mouseover"]},pointerEnter:{registrationName:"onPointerEnter",dependencies:["pointerout",
"pointerover"]},pointerLeave:{registrationName:"onPointerLeave",dependencies:["pointerout","pointerover"]}},pk={eventTypes:oc,extractEvents:function(a,b,c,d,e){var f="mouseover"===a||"pointerover"===a,g="mouseout"===a||"pointerout"===a;if(f&&0===(e&32)&&(c.relatedTarget||c.fromElement)||!g&&!f)return null;e=d.window===d?d:(e=d.ownerDocument)?e.defaultView||e.parentWindow:window;if(g){if(g=b,b=(b=c.relatedTarget||c.toElement)?Dc(b):null,null!==b&&(f=kb(b),b!==f||5!==b.tag&&6!==b.tag))b=null}else g=
null;if(g===b)return null;if("mouseout"===a||"mouseover"===a){var h=mc;var k=oc.mouseLeave;var m=oc.mouseEnter;var l="mouse"}else if("pointerout"===a||"pointerover"===a)h=ki,k=oc.pointerLeave,m=oc.pointerEnter,l="pointer";a=null==g?e:Qa(g);e=null==b?e:Qa(b);k=h.getPooled(k,g,c,d);k.type=l+"leave";k.target=a;k.relatedTarget=e;c=h.getPooled(m,b,c,d);c.type=l+"enter";c.target=e;c.relatedTarget=a;d=g;l=b;if(d&&l)a:{h=d;m=l;a=0;for(g=h;g;g=ma(g))a++;g=0;for(b=m;b;b=ma(b))g++;for(;0<a-g;)h=ma(h),a--;for(;0<
g-a;)m=ma(m),g--;for(;a--;){if(h===m||h===m.alternate)break a;h=ma(h);m=ma(m)}h=null}else h=null;m=h;for(h=[];d&&d!==m;){a=d.alternate;if(null!==a&&a===m)break;h.push(d);d=ma(d)}for(d=[];l&&l!==m;){a=l.alternate;if(null!==a&&a===m)break;d.push(l);l=ma(l)}for(l=0;l<h.length;l++)Zd(h[l],"bubbled",k);for(l=d.length;0<l--;)Zd(d[l],"captured",c);return[k,c]}},Ra="function"===typeof Object.is?Object.is:ij,jj=Object.prototype.hasOwnProperty,qk=Ea&&"documentMode"in document&&11>=document.documentMode,Eg=
{select:{phasedRegistrationNames:{bubbled:"onSelect",captured:"onSelectCapture"},dependencies:"blur contextmenu dragend focus keydown keyup mousedown mouseup selectionchange".split(" ")}},ob=null,oe=null,Rb=null,ne=!1,rk={eventTypes:Eg,extractEvents:function(a,b,c,d,e){e=d.window===d?d.document:9===d.nodeType?d:d.ownerDocument;var f;if(!(f=!e)){a:{e=Sd(e);f=zd.onSelect;for(var g=0;g<f.length;g++)if(!e.has(f[g])){e=!1;break a}e=!0}f=!e}if(f)return null;e=b?Qa(b):window;switch(a){case "focus":if(yg(e)||
"true"===e.contentEditable)ob=e,oe=b,Rb=null;break;case "blur":Rb=oe=ob=null;break;case "mousedown":ne=!0;break;case "contextmenu":case "mouseup":case "dragend":return ne=!1,Dg(c,d);case "selectionchange":if(qk)break;case "keydown":case "keyup":return Dg(c,d)}return null}};jf.injectEventPluginOrder("ResponderEventPlugin SimpleEventPlugin EnterLeaveEventPlugin ChangeEventPlugin SelectEventPlugin BeforeInputEventPlugin".split(" "));(function(a,b,c){Cd=a;Ef=b;wf=c})(je,rg,Qa);jf.injectEventPluginsByName({SimpleEventPlugin:qi,
EnterLeaveEventPlugin:pk,ChangeEventPlugin:ok,SelectEventPlugin:rk,BeforeInputEventPlugin:nk});new Set;var pe=[],pb=-1,Ha={},P={current:Ha},M={current:!1},Sa=Ha,lj=Sj,te=Wf,Qg=Qj,kj=Tj,Nc=Uj,Ig=Vj,Jg=Xf,Kg=Wj,Lg=Xj,Pg={},Aj=Rj,Hj=void 0!==bi?bi:function(){},oa=null,Oc=null,ue=!1,ri=kf(),aa=1E4>ri?kf:function(){return kf()-ri},we={current:null},Qc=null,rb=null,Pc=null,Tg=0,Tc=2,Ka=!1,bc=ka.ReactCurrentBatchConfig,ch=(new la.Component).refs,Wc={isMounted:function(a){return(a=a._reactInternalFiber)?
kb(a)===a:!1},enqueueSetState:function(a,b,c){a=a._reactInternalFiber;var d=qa(),e=bc.suspense;d=zb(d,a,e);e=Ia(d,e);e.payload=b;void 0!==c&&null!==c&&(e.callback=c);Ja(a,e);cc(a,d)},enqueueReplaceState:function(a,b,c){a=a._reactInternalFiber;var d=qa(),e=bc.suspense;d=zb(d,a,e);e=Ia(d,e);e.tag=1;e.payload=b;void 0!==c&&null!==c&&(e.callback=c);Ja(a,e);cc(a,d)},enqueueForceUpdate:function(a,b){a=a._reactInternalFiber;var c=qa(),d=bc.suspense;c=zb(c,a,d);d=Ia(c,d);d.tag=Tc;void 0!==b&&null!==b&&(d.callback=
b);Ja(a,d);cc(a,c)}},$c=Array.isArray,Ab=dh(!0),Ke=dh(!1),Ub={},fa={current:Ub},Wb={current:Ub},Vb={current:Ub},A={current:0},bd=ka.ReactCurrentDispatcher,Xb=0,Ma=null,D=null,ha=null,wb=null,N=null,vb=null,xb=0,ia=null,$b=0,Yb=!1,pa=null,Zb=0,cd={readContext:ea,useCallback:R,useContext:R,useEffect:R,useImperativeHandle:R,useLayoutEffect:R,useMemo:R,useReducer:R,useRef:R,useState:R,useDebugValue:R,useResponder:R},mj={readContext:ea,useCallback:function(a,b){yb().memoizedState=[a,void 0===b?null:b];
return a},useContext:ea,useEffect:function(a,b){return He(516,192,a,b)},useImperativeHandle:function(a,b,c){c=null!==c&&void 0!==c?c.concat([a]):null;return He(4,36,kh.bind(null,b,a),c)},useLayoutEffect:function(a,b){return He(4,36,a,b)},useMemo:function(a,b){var c=yb();b=void 0===b?null:b;a=a();c.memoizedState=[a,b];return a},useReducer:function(a,b,c){var d=yb();b=void 0!==c?c(b):b;d.memoizedState=d.baseState=b;a=d.queue={last:null,dispatch:null,lastRenderedReducer:a,lastRenderedState:b};a=a.dispatch=
mh.bind(null,Ma,a);return[d.memoizedState,a]},useRef:function(a){var b=yb();a={current:a};return b.memoizedState=a},useState:function(a){var b=yb();"function"===typeof a&&(a=a());b.memoizedState=b.baseState=a;a=b.queue={last:null,dispatch:null,lastRenderedReducer:ih,lastRenderedState:a};a=a.dispatch=mh.bind(null,Ma,a);return[b.memoizedState,a]},useDebugValue:lh,useResponder:fh},gh={readContext:ea,useCallback:function(a,b){var c=ac();b=void 0===b?null:b;var d=c.memoizedState;if(null!==d&&null!==b&&
Ee(b,d[1]))return d[0];c.memoizedState=[a,b];return a},useContext:ea,useEffect:function(a,b){return Ie(516,192,a,b)},useImperativeHandle:function(a,b,c){c=null!==c&&void 0!==c?c.concat([a]):null;return Ie(4,36,kh.bind(null,b,a),c)},useLayoutEffect:function(a,b){return Ie(4,36,a,b)},useMemo:function(a,b){var c=ac();b=void 0===b?null:b;var d=c.memoizedState;if(null!==d&&null!==b&&Ee(b,d[1]))return d[0];a=a();c.memoizedState=[a,b];return a},useReducer:jh,useRef:function(a){return ac().memoizedState},
useState:function(a){return jh(ih,a)},useDebugValue:lh,useResponder:fh},ra=null,Xa=null,Wa=!1,nj=ka.ReactCurrentOwner,da=!1,Oe={dehydrated:null,retryTime:1};var Dj=function(a,b,c,d){for(c=b.child;null!==c;){if(5===c.tag||6===c.tag)a.appendChild(c.stateNode);else if(4!==c.tag&&null!==c.child){c.child.return=c;c=c.child;continue}if(c===b)break;for(;null===c.sibling;){if(null===c.return||c.return===b)return;c=c.return}c.sibling.return=c.return;c=c.sibling}};var Wh=function(a){};var Cj=function(a,b,c,
d,e){var f=a.memoizedProps;if(f!==d){var g=b.stateNode;Va(fa.current);a=null;switch(c){case "input":f=Ld(g,f);d=Ld(g,d);a=[];break;case "option":f=Od(g,f);d=Od(g,d);a=[];break;case "select":f=J({},f,{value:void 0});d=J({},d,{value:void 0});a=[];break;case "textarea":f=Pd(g,f);d=Pd(g,d);a=[];break;default:"function"!==typeof f.onClick&&"function"===typeof d.onClick&&(g.onclick=Hc)}be(c,d);var h,k;c=null;for(h in f)if(!d.hasOwnProperty(h)&&f.hasOwnProperty(h)&&null!=f[h])if("style"===h)for(k in g=f[h],
g)g.hasOwnProperty(k)&&(c||(c={}),c[k]="");else"dangerouslySetInnerHTML"!==h&&"children"!==h&&"suppressContentEditableWarning"!==h&&"suppressHydrationWarning"!==h&&"autoFocus"!==h&&(db.hasOwnProperty(h)?a||(a=[]):(a=a||[]).push(h,null));for(h in d){var l=d[h];g=null!=f?f[h]:void 0;if(d.hasOwnProperty(h)&&l!==g&&(null!=l||null!=g))if("style"===h)if(g){for(k in g)!g.hasOwnProperty(k)||l&&l.hasOwnProperty(k)||(c||(c={}),c[k]="");for(k in l)l.hasOwnProperty(k)&&g[k]!==l[k]&&(c||(c={}),c[k]=l[k])}else c||
(a||(a=[]),a.push(h,c)),c=l;else"dangerouslySetInnerHTML"===h?(l=l?l.__html:void 0,g=g?g.__html:void 0,null!=l&&g!==l&&(a=a||[]).push(h,""+l)):"children"===h?g===l||"string"!==typeof l&&"number"!==typeof l||(a=a||[]).push(h,""+l):"suppressContentEditableWarning"!==h&&"suppressHydrationWarning"!==h&&(db.hasOwnProperty(h)?(null!=l&&na(e,h),a||g===l||(a=[])):(a=a||[]).push(h,l))}c&&(a=a||[]).push("style",c);e=a;(b.updateQueue=e)&&Bb(b)}};var Ej=function(a,b,c,d){c!==d&&Bb(b)};var rj="function"===typeof WeakSet?
WeakSet:Set,yj="function"===typeof WeakMap?WeakMap:Map,uj=Math.ceil,ld=ka.ReactCurrentDispatcher,Vh=ka.ReactCurrentOwner,E=0,cf=8,X=16,ba=32,$a=0,md=1,Ph=2,od=3,id=4,Ze=5,$e=6,n=E,V=null,v=null,S=0,F=$a,nd=null,va=1073741823,fc=1073741823,qd=null,gc=0,pd=!1,Ue=0,Qh=500,q=null,fd=!1,Ve=null,Na=null,rd=!1,sd=null,hc=90,ab=null,ic=0,ff=null,gd=0,Zh=0,cc=function(a,b){if(50<ic)throw ic=0,ff=null,l(Error(185));a=hd(a,b);if(null!==a){var c=re();1073741823===b?(n&cf)!==E&&(n&(X|ba))===E?We(a):(U(a),n===
E&&W()):U(a);(n&4)===E||98!==c&&99!==c||(null===ab?ab=new Map([[a,b]]):(c=ab.get(a),(void 0===c||c>b)&&ab.set(a,b)))}};var Bj=function(a,b,c){var d=b.expirationTime;if(null!==a){var e=b.pendingProps;if(a.memoizedProps!==e||M.current)da=!0;else{if(d<c){da=!1;switch(b.tag){case 3:wh(b);Je();break;case 5:eh(b);if(b.mode&4&&1!==c&&e.hidden)return b.expirationTime=b.childExpirationTime=1,null;break;case 1:L(b.type)&&Mc(b);break;case 4:Ce(b,b.stateNode.containerInfo);break;case 10:Rg(b,b.memoizedProps.value);
break;case 13:if(null!==b.memoizedState){d=b.child.childExpirationTime;if(0!==d&&d>=c)return xh(a,b,c);y(A,A.current&1,b);b=sa(a,b,c);return null!==b?b.sibling:null}y(A,A.current&1,b);break;case 19:d=b.childExpirationTime>=c;if((a.effectTag&64)!==C){if(d)return yh(a,b,c);b.effectTag|=64}e=b.memoizedState;null!==e&&(e.rendering=null,e.tail=null);y(A,A.current,b);if(!d)return null}return sa(a,b,c)}da=!1}}else da=!1;b.expirationTime=0;switch(b.tag){case 2:d=b.type;null!==a&&(a.alternate=null,b.alternate=
null,b.effectTag|=I);a=b.pendingProps;e=qb(b,P.current);sb(b,c);e=Fe(null,b,d,a,e,c);b.effectTag|=1;if("object"===typeof e&&null!==e&&"function"===typeof e.render&&void 0===e.$$typeof){b.tag=1;hh();if(L(d)){var f=!0;Mc(b)}else f=!1;b.memoizedState=null!==e.state&&void 0!==e.state?e.state:null;var g=d.getDerivedStateFromProps;"function"===typeof g&&Vc(b,d,g,a);e.updater=Wc;b.stateNode=e;e._reactInternalFiber=b;ze(b,d,a,c);b=Ne(null,b,d,!0,f,c)}else b.tag=0,Q(null,b,e,c),b=b.child;return b;case 16:e=
b.elementType;null!==a&&(a.alternate=null,b.alternate=null,b.effectTag|=I);a=b.pendingProps;Ai(e);if(1!==e._status)throw e._result;e=e._result;b.type=e;f=b.tag=Lj(e);a=Y(e,a);switch(f){case 0:b=Me(null,b,e,a,c);break;case 1:b=vh(null,b,e,a,c);break;case 11:b=rh(null,b,e,a,c);break;case 14:b=sh(null,b,e,Y(e.type,a),d,c);break;default:throw l(Error(306),e,"");}return b;case 0:return d=b.type,e=b.pendingProps,e=b.elementType===d?e:Y(d,e),Me(a,b,d,e,c);case 1:return d=b.type,e=b.pendingProps,e=b.elementType===
d?e:Y(d,e),vh(a,b,d,e,c);case 3:wh(b);d=b.updateQueue;if(null===d)throw l(Error(282));e=b.memoizedState;e=null!==e?e.element:null;Sb(b,d,b.pendingProps,null,c);d=b.memoizedState.element;if(d===e)Je(),b=sa(a,b,c);else{if(e=b.stateNode.hydrate)Xa=mb(b.stateNode.containerInfo.firstChild),ra=b,e=Wa=!0;if(e)for(c=Ke(b,null,d,c),b.child=c;c;)c.effectTag=c.effectTag&~I|Da,c=c.sibling;else Q(a,b,d,c),Je();b=b.child}return b;case 5:return eh(b),null===a&&ph(b),d=b.type,e=b.pendingProps,f=null!==a?a.memoizedProps:
null,g=e.children,fe(d,e)?g=null:null!==f&&fe(d,f)&&(b.effectTag|=16),uh(a,b),b.mode&4&&1!==c&&e.hidden?(b.expirationTime=b.childExpirationTime=1,b=null):(Q(a,b,g,c),b=b.child),b;case 6:return null===a&&ph(b),null;case 13:return xh(a,b,c);case 4:return Ce(b,b.stateNode.containerInfo),d=b.pendingProps,null===a?b.child=Ab(b,null,d,c):Q(a,b,d,c),b.child;case 11:return d=b.type,e=b.pendingProps,e=b.elementType===d?e:Y(d,e),rh(a,b,d,e,c);case 7:return Q(a,b,b.pendingProps,c),b.child;case 8:return Q(a,
b,b.pendingProps.children,c),b.child;case 12:return Q(a,b,b.pendingProps.children,c),b.child;case 10:a:{d=b.type._context;e=b.pendingProps;g=b.memoizedProps;f=e.value;Rg(b,f);if(null!==g){var h=g.value;f=Ra(h,f)?0:("function"===typeof d._calculateChangedBits?d._calculateChangedBits(h,f):1073741823)|0;if(0===f){if(g.children===e.children&&!M.current){b=sa(a,b,c);break a}}else for(h=b.child,null!==h&&(h.return=b);null!==h;){var k=h.dependencies;if(null!==k){g=h.child;for(var m=k.firstContext;null!==
m;){if(m.context===d&&0!==(m.observedBits&f)){1===h.tag&&(m=Ia(c,null),m.tag=Tc,Ja(h,m));h.expirationTime<c&&(h.expirationTime=c);m=h.alternate;null!==m&&m.expirationTime<c&&(m.expirationTime=c);Sg(h.return,c);k.expirationTime<c&&(k.expirationTime=c);break}m=m.next}}else g=10===h.tag?h.type===b.type?null:h.child:h.child;if(null!==g)g.return=h;else for(g=h;null!==g;){if(g===b){g=null;break}h=g.sibling;if(null!==h){h.return=g.return;g=h;break}g=g.return}h=g}}Q(a,b,e.children,c);b=b.child}return b;case 9:return e=
b.type,f=b.pendingProps,d=f.children,sb(b,c),e=ea(e,f.unstable_observedBits),d=d(e),b.effectTag|=1,Q(a,b,d,c),b.child;case 14:return e=b.type,f=Y(e,b.pendingProps),f=Y(e.type,f),sh(a,b,e,f,d,c);case 15:return th(a,b,b.type,b.pendingProps,d,c);case 17:return d=b.type,e=b.pendingProps,e=b.elementType===d?e:Y(d,e),null!==a&&(a.alternate=null,b.alternate=null,b.effectTag|=I),b.tag=1,L(d)?(a=!0,Mc(b)):a=!1,sb(b,c),ah(b,d,e,c),ze(b,d,e,c),Ne(null,b,d,!0,a,c);case 19:return yh(a,b,c)}throw l(Error(156),
b.tag);};var gf=null,Se=null,ja=function(a,b,c,d){return new Kj(a,b,c,d)};Hd=function(a,b,c){switch(b){case "input":Md(a,c);b=c.name;if("radio"===c.type&&null!=b){for(c=a;c.parentNode;)c=c.parentNode;c=c.querySelectorAll("input[name="+JSON.stringify(""+b)+'][type="radio"]');for(b=0;b<c.length;b++){var d=c[b];if(d!==a&&d.form===a.form){var e=je(d);if(!e)throw l(Error(90));Lf(d);Md(d,e)}}}break;case "textarea":Qf(a,c);break;case "select":b=c.value,null!=b&&ib(a,!!c.multiple,b,!1)}};jc.prototype.render=
function(a){if(!this._defer)throw l(Error(250));this._hasChildren=!0;this._children=a;var b=this._root._internalRoot,c=this._expirationTime,d=new kc;Yh(a,b,null,c,null,d._onCommit);return d};jc.prototype.then=function(a){if(this._didComplete)a();else{var b=this._callbacks;null===b&&(b=this._callbacks=[]);b.push(a)}};jc.prototype.commit=function(){var a=this._root._internalRoot,b=a.firstBatch;if(!this._defer||null===b)throw l(Error(251));if(this._hasChildren){var c=this._expirationTime;if(b!==this){this._hasChildren&&
(c=this._expirationTime=b._expirationTime,this.render(this._children));for(var d=null,e=b;e!==this;)d=e,e=e._next;if(null===d)throw l(Error(251));d._next=e._next;this._next=b;a.firstBatch=this}this._defer=!1;b=c;if((n&(X|ba))!==E)throw l(Error(253));kd(a,b);U(a);W();b=this._next;this._next=null;b=a.firstBatch=b;null!==b&&b._hasChildren&&b.render(b._children)}else this._next=null,this._defer=!1};jc.prototype._onComplete=function(){if(!this._didComplete){this._didComplete=!0;var a=this._callbacks;if(null!==
a)for(var b=0;b<a.length;b++)(0,a[b])()}};kc.prototype.then=function(a){if(this._didCommit)a();else{var b=this._callbacks;null===b&&(b=this._callbacks=[]);b.push(a)}};kc.prototype._onCommit=function(){if(!this._didCommit){this._didCommit=!0;var a=this._callbacks;if(null!==a)for(var b=0;b<a.length;b++){var c=a[b];if("function"!==typeof c)throw l(Error(191),c);c()}}};vd.prototype.render=ud.prototype.render=function(a,b){var c=this._internalRoot,d=new kc;b=void 0===b?null:b;null!==b&&d.then(b);td(a,
c,null,d._onCommit);return d};vd.prototype.unmount=ud.prototype.unmount=function(a){var b=this._internalRoot,c=new kc;a=void 0===a?null:a;null!==a&&c.then(a);td(null,b,null,c._onCommit);return c};vd.prototype.createBatch=function(){var a=new jc(this),b=a._expirationTime,c=this._internalRoot,d=c.firstBatch;if(null===d)c.firstBatch=a,a._next=null;else{for(c=null;null!==d&&d._expirationTime>=b;)c=d,d=d._next;a._next=d;null!==c&&(c._next=a)}return a};(function(a,b,c,d){me=a;cg=b;Jd=c;eg=d})(Rh,bf,af,
function(a,b){var c=n;n|=2;try{return a(b)}finally{n=c,n===E&&W()}});var si={createPortal:ai,findDOMNode:function(a){if(null==a)a=null;else if(1!==a.nodeType){var b=a._reactInternalFiber;if(void 0===b){if("function"===typeof a.render)throw l(Error(188));throw l(Error(268),Object.keys(a));}a=$f(b);a=null===a?null:a.stateNode}return a},hydrate:function(a,b,c){if(!bb(b))throw l(Error(200));return wd(null,a,b,!0,c)},render:function(a,b,c){if(!bb(b))throw l(Error(200));return wd(null,a,b,!1,c)},unstable_renderSubtreeIntoContainer:function(a,
b,c,d){if(!bb(c))throw l(Error(200));if(null==a||void 0===a._reactInternalFiber)throw l(Error(38));return wd(a,b,c,!1,d)},unmountComponentAtNode:function(a){if(!bb(a))throw l(Error(40));return a._reactRootContainer?(Sh(function(){wd(null,null,a,!1,function(){a._reactRootContainer=null})}),!0):!1},unstable_createPortal:function(){return ai.apply(void 0,arguments)},unstable_batchedUpdates:Rh,unstable_interactiveUpdates:function(a,b,c,d){af();return bf(a,b,c,d)},unstable_discreteUpdates:bf,unstable_flushDiscreteUpdates:af,
flushSync:function(a,b){if((n&(X|ba))!==E)throw l(Error(187));var c=n;n|=1;try{return Ta(99,a.bind(null,b))}finally{n=c,W()}},unstable_createRoot:function(a,b){if(!bb(a))throw l(Error(299),"unstable_createRoot");return new vd(a,b)},unstable_createSyncRoot:function(a,b){if(!bb(a))throw l(Error(299),"unstable_createRoot");return new ud(a,1,b)},unstable_flushControlled:function(a){var b=n;n|=1;try{Ta(99,a)}finally{n=b,n===E&&W()}},__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED:{Events:[rg,Qa,je,
jf.injectEventPluginsByName,yd,lb,function(a){Bd(a,Oi)},Ff,Gf,Ec,tc,Cb,{current:!1}]}};(function(a){var b=a.findFiberByHostInstance;return Jj(J({},a,{overrideHookState:null,overrideProps:null,setSuspenseHandler:null,scheduleUpdate:null,currentDispatcherRef:ka.ReactCurrentDispatcher,findHostInstanceByFiber:function(a){a=$f(a);return null===a?null:a.stateNode},findFiberByHostInstance:function(a){return b?b(a):null},findHostInstancesForRefresh:null,scheduleRefresh:null,scheduleRoot:null,setRefreshHandler:null,
getCurrentFiber:null}))})({findFiberByHostInstance:Dc,bundleType:0,version:"16.10.2",rendererPackageName:"react-dom"});var ti={default:si},ui=ti&&si||ti;return ui.default||ui});

View File

@ -1,33 +0,0 @@
/** @license React v16.10.2
* react.production.min.js
*
* Copyright (c) Facebook, Inc. and its affiliates.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*/
'use strict';(function(v,m){"object"===typeof exports&&"undefined"!==typeof module?module.exports=m():"function"===typeof define&&define.amd?define(m):v.React=m()})(this,function(){function v(a){for(var b=a.message,c="https://reactjs.org/docs/error-decoder.html?invariant="+b,d=1;d<arguments.length;d++)c+="&args[]="+encodeURIComponent(arguments[d]);a.message="Minified React error #"+b+"; visit "+c+" for the full message or use the non-minified dev environment for full errors and additional helpful warnings. ";
return a}function m(a,b,c){this.props=a;this.context=b;this.refs=da;this.updater=c||ea}function fa(){}function M(a,b,c){this.props=a;this.context=b;this.refs=da;this.updater=c||ea}function ha(a,b,c){var d,e={},p=null,f=null;if(null!=b)for(d in void 0!==b.ref&&(f=b.ref),void 0!==b.key&&(p=""+b.key),b)ia.call(b,d)&&!ja.hasOwnProperty(d)&&(e[d]=b[d]);var g=arguments.length-2;if(1===g)e.children=c;else if(1<g){for(var k=Array(g),h=0;h<g;h++)k[h]=arguments[h+2];e.children=k}if(a&&a.defaultProps)for(d in g=
a.defaultProps,g)void 0===e[d]&&(e[d]=g[d]);return{$$typeof:z,type:a,key:p,ref:f,props:e,_owner:N.current}}function wa(a,b){return{$$typeof:z,type:a.type,key:b,ref:a.ref,props:a.props,_owner:a._owner}}function O(a){return"object"===typeof a&&null!==a&&a.$$typeof===z}function xa(a){var b={"=":"=0",":":"=2"};return"$"+(""+a).replace(/[=:]/g,function(a){return b[a]})}function ka(a,b,c,d){if(D.length){var e=D.pop();e.result=a;e.keyPrefix=b;e.func=c;e.context=d;e.count=0;return e}return{result:a,keyPrefix:b,
func:c,context:d,count:0}}function la(a){a.result=null;a.keyPrefix=null;a.func=null;a.context=null;a.count=0;10>D.length&&D.push(a)}function P(a,b,c,d){var e=typeof a;if("undefined"===e||"boolean"===e)a=null;var p=!1;if(null===a)p=!0;else switch(e){case "string":case "number":p=!0;break;case "object":switch(a.$$typeof){case z:case ya:p=!0}}if(p)return c(d,a,""===b?"."+Q(a,0):b),1;p=0;b=""===b?".":b+":";if(Array.isArray(a))for(var f=0;f<a.length;f++){e=a[f];var g=b+Q(e,f);p+=P(e,g,c,d)}else if(null===
a||"object"!==typeof a?g=null:(g=ma&&a[ma]||a["@@iterator"],g="function"===typeof g?g:null),"function"===typeof g)for(a=g.call(a),f=0;!(e=a.next()).done;)e=e.value,g=b+Q(e,f++),p+=P(e,g,c,d);else if("object"===e)throw c=""+a,v(Error(31),"[object Object]"===c?"object with keys {"+Object.keys(a).join(", ")+"}":c,"");return p}function R(a,b,c){return null==a?0:P(a,"",b,c)}function Q(a,b){return"object"===typeof a&&null!==a&&null!=a.key?xa(a.key):b.toString(36)}function za(a,b,c){a.func.call(a.context,
b,a.count++)}function Aa(a,b,c){var d=a.result,e=a.keyPrefix;a=a.func.call(a.context,b,a.count++);Array.isArray(a)?S(a,d,c,function(a){return a}):null!=a&&(O(a)&&(a=wa(a,e+(!a.key||b&&b.key===a.key?"":(""+a.key).replace(na,"$&/")+"/")+c)),d.push(a))}function S(a,b,c,d,e){var f="";null!=c&&(f=(""+c).replace(na,"$&/")+"/");b=ka(b,f,d,e);R(a,Aa,b);la(b)}function t(){var a=oa.current;if(null===a)throw v(Error(321));return a}function T(a,b){var c=a.length;a.push(b);a:for(;;){var d=Math.floor((c-1)/2),
e=a[d];if(void 0!==e&&0<E(e,b))a[d]=b,a[c]=e,c=d;else break a}}function n(a){a=a[0];return void 0===a?null:a}function F(a){var b=a[0];if(void 0!==b){var c=a.pop();if(c!==b){a[0]=c;a:for(var d=0,e=a.length;d<e;){var f=2*(d+1)-1,h=a[f],g=f+1,k=a[g];if(void 0!==h&&0>E(h,c))void 0!==k&&0>E(k,h)?(a[d]=k,a[g]=c,d=g):(a[d]=h,a[f]=c,d=f);else if(void 0!==k&&0>E(k,c))a[d]=k,a[g]=c,d=g;else break a}}return b}return null}function E(a,b){var c=a.sortIndex-b.sortIndex;return 0!==c?c:a.id-b.id}function G(a){for(var b=
n(u);null!==b;){if(null===b.callback)F(u);else if(b.startTime<=a)F(u),b.sortIndex=b.expirationTime,T(q,b);else break;b=n(u)}}function U(a){A=!1;G(a);if(!w)if(null!==n(q))w=!0,B(V);else{var b=n(u);null!==b&&H(U,b.startTime-a)}}function V(a,b){w=!1;A&&(A=!1,W());I=!0;var c=h;try{G(b);for(l=n(q);null!==l&&(!(l.expirationTime>b)||a&&!X());){var d=l.callback;if(null!==d){l.callback=null;h=l.priorityLevel;var e=d(l.expirationTime<=b);b=r();"function"===typeof e?l.callback=e:l===n(q)&&F(q);G(b)}else F(q);
l=n(q)}if(null!==l)var f=!0;else{var m=n(u);null!==m&&H(U,m.startTime-b);f=!1}return f}finally{l=null,h=c,I=!1}}function pa(a){switch(a){case 1:return-1;case 2:return 250;case 5:return 1073741823;case 4:return 1E4;default:return 5E3}}var f="function"===typeof Symbol&&Symbol.for,z=f?Symbol.for("react.element"):60103,ya=f?Symbol.for("react.portal"):60106,x=f?Symbol.for("react.fragment"):60107,Y=f?Symbol.for("react.strict_mode"):60108,Ba=f?Symbol.for("react.profiler"):60114,Ca=f?Symbol.for("react.provider"):
60109,Da=f?Symbol.for("react.context"):60110,Ea=f?Symbol.for("react.forward_ref"):60112,Fa=f?Symbol.for("react.suspense"):60113,Ga=f?Symbol.for("react.suspense_list"):60120,Ha=f?Symbol.for("react.memo"):60115,Ia=f?Symbol.for("react.lazy"):60116;f&&Symbol.for("react.fundamental");f&&Symbol.for("react.responder");f&&Symbol.for("react.scope");var ma="function"===typeof Symbol&&Symbol.iterator,qa=Object.getOwnPropertySymbols,Ja=Object.prototype.hasOwnProperty,Ka=Object.prototype.propertyIsEnumerable,
J=function(){try{if(!Object.assign)return!1;var a=new String("abc");a[5]="de";if("5"===Object.getOwnPropertyNames(a)[0])return!1;var b={};for(a=0;10>a;a++)b["_"+String.fromCharCode(a)]=a;if("0123456789"!==Object.getOwnPropertyNames(b).map(function(a){return b[a]}).join(""))return!1;var c={};"abcdefghijklmnopqrst".split("").forEach(function(a){c[a]=a});return"abcdefghijklmnopqrst"!==Object.keys(Object.assign({},c)).join("")?!1:!0}catch(d){return!1}}()?Object.assign:function(a,b){if(null===a||void 0===
a)throw new TypeError("Object.assign cannot be called with null or undefined");var c=Object(a);for(var d,e=1;e<arguments.length;e++){var f=Object(arguments[e]);for(var h in f)Ja.call(f,h)&&(c[h]=f[h]);if(qa){d=qa(f);for(var g=0;g<d.length;g++)Ka.call(f,d[g])&&(c[d[g]]=f[d[g]])}}return c},ea={isMounted:function(a){return!1},enqueueForceUpdate:function(a,b,c){},enqueueReplaceState:function(a,b,c,d){},enqueueSetState:function(a,b,c,d){}},da={};m.prototype.isReactComponent={};m.prototype.setState=function(a,
b){if("object"!==typeof a&&"function"!==typeof a&&null!=a)throw v(Error(85));this.updater.enqueueSetState(this,a,b,"setState")};m.prototype.forceUpdate=function(a){this.updater.enqueueForceUpdate(this,a,"forceUpdate")};fa.prototype=m.prototype;f=M.prototype=new fa;f.constructor=M;J(f,m.prototype);f.isPureReactComponent=!0;var oa={current:null},N={current:null},ia=Object.prototype.hasOwnProperty,ja={key:!0,ref:!0,__self:!0,__source:!0},na=/\/+/g,D=[],Z;if("undefined"===typeof window||"function"!==
typeof MessageChannel){var C=null,ra=null,sa=function(){if(null!==C)try{var a=r();C(!0,a);C=null}catch(b){throw setTimeout(sa,0),b;}},La=Date.now();var r=function(){return Date.now()-La};var B=function(a){null!==C?setTimeout(B,0,a):(C=a,setTimeout(sa,0))};var H=function(a,b){ra=setTimeout(a,b)};var W=function(){clearTimeout(ra)};var X=function(){return!1};f=Z=function(){}}else{var aa=window.performance,ta=window.Date,Ma=window.setTimeout,Na=window.clearTimeout;f=window.requestAnimationFrame;var y=
window.cancelAnimationFrame;"undefined"!==typeof console&&("function"!==typeof f&&console.error("This browser doesn't support requestAnimationFrame. Make sure that you load a polyfill in older browsers. https://fb.me/react-polyfills"),"function"!==typeof y&&console.error("This browser doesn't support cancelAnimationFrame. Make sure that you load a polyfill in older browsers. https://fb.me/react-polyfills"));if("object"===typeof aa&&"function"===typeof aa.now)r=function(){return aa.now()};else{var Oa=
ta.now();r=function(){return ta.now()-Oa}}var K=!1,L=null,ba=-1,ua=5,va=0;X=function(){return r()>=va};f=function(){};Z=function(a){0>a||125<a?console.error("forceFrameRate takes a positive int between 0 and 125, forcing framerates higher than 125 fps is not unsupported"):ua=0<a?Math.floor(1E3/a):33.33};y=new MessageChannel;var ca=y.port2;y.port1.onmessage=function(){if(null!==L){var a=r();va=a+ua;try{L(!0,a)?ca.postMessage(null):(K=!1,L=null)}catch(b){throw ca.postMessage(null),b;}}else K=!1};B=
function(a){L=a;K||(K=!0,ca.postMessage(null))};H=function(a,b){ba=Ma(function(){a(r())},b)};W=function(){Na(ba);ba=-1}}var q=[],u=[],Pa=1,l=null,h=3,I=!1,w=!1,A=!1,Qa=0;y={ReactCurrentDispatcher:oa,ReactCurrentOwner:N,IsSomeRendererActing:{current:!1},assign:J};J(y,{Scheduler:{unstable_ImmediatePriority:1,unstable_UserBlockingPriority:2,unstable_NormalPriority:3,unstable_IdlePriority:5,unstable_LowPriority:4,unstable_runWithPriority:function(a,b){switch(a){case 1:case 2:case 3:case 4:case 5:break;
default:a=3}var c=h;h=a;try{return b()}finally{h=c}},unstable_next:function(a){switch(h){case 1:case 2:case 3:var b=3;break;default:b=h}var c=h;h=b;try{return a()}finally{h=c}},unstable_scheduleCallback:function(a,b,c){var d=r();if("object"===typeof c&&null!==c){var e=c.delay;e="number"===typeof e&&0<e?d+e:d;c="number"===typeof c.timeout?c.timeout:pa(a)}else c=pa(a),e=d;c=e+c;a={id:Pa++,callback:b,priorityLevel:a,startTime:e,expirationTime:c,sortIndex:-1};e>d?(a.sortIndex=e,T(u,a),null===n(q)&&a===
n(u)&&(A?W():A=!0,H(U,e-d))):(a.sortIndex=c,T(q,a),w||I||(w=!0,B(V)));return a},unstable_cancelCallback:function(a){a.callback=null},unstable_wrapCallback:function(a){var b=h;return function(){var c=h;h=b;try{return a.apply(this,arguments)}finally{h=c}}},unstable_getCurrentPriorityLevel:function(){return h},unstable_shouldYield:function(){var a=r();G(a);var b=n(q);return b!==l&&null!==l&&null!==b&&null!==b.callback&&b.startTime<=a&&b.expirationTime<l.expirationTime||X()},unstable_requestPaint:f,unstable_continueExecution:function(){w||
I||(w=!0,B(V))},unstable_pauseExecution:function(){},unstable_getFirstCallbackNode:function(){return n(q)},get unstable_now(){return r},get unstable_forceFrameRate(){return Z},unstable_Profiling:null},SchedulerTracing:{get __interactionsRef(){return null},get __subscriberRef(){return null},unstable_clear:function(a){return a()},unstable_getCurrent:function(){return null},unstable_getThreadID:function(){return++Qa},unstable_trace:function(a,b,c){return c()},unstable_wrap:function(a){return a},unstable_subscribe:function(a){},
unstable_unsubscribe:function(a){}}});x={Children:{map:function(a,b,c){if(null==a)return a;var d=[];S(a,d,null,b,c);return d},forEach:function(a,b,c){if(null==a)return a;b=ka(null,null,b,c);R(a,za,b);la(b)},count:function(a){return R(a,function(){return null},null)},toArray:function(a){var b=[];S(a,b,null,function(a){return a});return b},only:function(a){if(!O(a))throw v(Error(143));return a}},createRef:function(){return{current:null}},Component:m,PureComponent:M,createContext:function(a,b){void 0===
b&&(b=null);a={$$typeof:Da,_calculateChangedBits:b,_currentValue:a,_currentValue2:a,_threadCount:0,Provider:null,Consumer:null};a.Provider={$$typeof:Ca,_context:a};return a.Consumer=a},forwardRef:function(a){return{$$typeof:Ea,render:a}},lazy:function(a){return{$$typeof:Ia,_ctor:a,_status:-1,_result:null}},memo:function(a,b){return{$$typeof:Ha,type:a,compare:void 0===b?null:b}},useCallback:function(a,b){return t().useCallback(a,b)},useContext:function(a,b){return t().useContext(a,b)},useEffect:function(a,
b){return t().useEffect(a,b)},useImperativeHandle:function(a,b,c){return t().useImperativeHandle(a,b,c)},useDebugValue:function(a,b){},useLayoutEffect:function(a,b){return t().useLayoutEffect(a,b)},useMemo:function(a,b){return t().useMemo(a,b)},useReducer:function(a,b,c){return t().useReducer(a,b,c)},useRef:function(a){return t().useRef(a)},useState:function(a){return t().useState(a)},Fragment:x,Profiler:Ba,StrictMode:Y,Suspense:Fa,unstable_SuspenseList:Ga,createElement:ha,cloneElement:function(a,
b,c){if(null===a||void 0===a)throw v(Error(267),a);var d=J({},a.props),e=a.key,f=a.ref,h=a._owner;if(null!=b){void 0!==b.ref&&(f=b.ref,h=N.current);void 0!==b.key&&(e=""+b.key);if(a.type&&a.type.defaultProps)var g=a.type.defaultProps;for(k in b)ia.call(b,k)&&!ja.hasOwnProperty(k)&&(d[k]=void 0===b[k]&&void 0!==g?g[k]:b[k])}var k=arguments.length-2;if(1===k)d.children=c;else if(1<k){g=Array(k);for(var l=0;l<k;l++)g[l]=arguments[l+2];d.children=g}return{$$typeof:z,type:a.type,key:e,ref:f,props:d,_owner:h}},
createFactory:function(a){var b=ha.bind(null,a);b.type=a;return b},isValidElement:O,version:"16.10.2",unstable_withSuspenseConfig:function(a,b){a()},__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED:y};x=(Y={default:x},x)||Y;return x.default||x});

2
static/js/shop.bundle.js Normal file

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load Diff

2205
static/js/shop.min.js vendored

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,46 @@
import {OverlayTrigger} from "react-bootstrap";
import React from "react";
import {Levels, MaxLevel} from "./warnings";
import {useShopStore} from "./shop_store";
import {compareArraysLevelOne} from "./utils";
export function CardWarnings({crate_index, card_index}) {
const warnings = useShopStore(state => state.crates[crate_index].items[card_index].show_warnings, compareArraysLevelOne);
const max_level = MaxLevel(warnings);
return (
<OverlayTrigger
placement="bottom"
trigger={['click', 'hover', 'focus']}
overlay={
({arrowProps, hasDoneInitialMeasure, show, style, ...props}) => (
<div className="k-popup-warning" style={{...style, backgroundColor: max_level.color}} {...props}>
{warnings.map((warning, _i) => {
return (
<p className="rule warning" key={`warnmsg_${card_index}_${warning.name}`}>
<i>{warning.message}</i>
</p>
)
})}
</div>)
}
rootClose
>
<img className="alert-warning p-0" src={max_level.icon}/>
</OverlayTrigger>
)
}
export function WarningIndicator({crate_index, card_index}) {
const warnings = useShopStore(state => state.crates[crate_index].items[card_index].show_warnings, compareArraysLevelOne);
const max_level = MaxLevel(warnings);
return max_level.priority === Levels.warning.priority ? (
<img
className="alert-warning align-self-start d-block"
src={max_level.icon}
/>
) : (<span className="alert-warning align-self-start d-block"></span>);
}

70
static/js/shop/Cart.jsx Normal file
View File

@ -0,0 +1,70 @@
import React from 'react'
import {Droppable} from "@hello-pangea/dnd";
import {cartStyle, compareArraysWithIds} from "./utils";
import {ProductCartItem} from "./ProductCartItem";
import {FakePlaceholder} from "./FakePlaceholder";
import {hp_to_slots} from "./count_resources";
import {useShopStore} from "./shop_store";
// #!render_count
import {useRenderCount} from "@uidotdev/usehooks";
/**
* Component that displays a list of <ProductCartItem>
*/
export function Cart({crate_index}) {
// #!render_count
const renderCount = useRenderCount();
const crate = useShopStore((state) => state.crates[crate_index], (a, b) => {
return compareArraysWithIds(a.items, b.items) && a.occupiedHP === b.occupiedHP && a.crate_mode === b.crate_mode
});
const crateParams = useShopStore((state) => state.crateParams);
// #!render_count
console.log("Cart renders: ", renderCount)
const nbrOccupied = hp_to_slots(crate.occupiedHP);
const nbrSlots = hp_to_slots(crateParams(crate.crate_mode).hp);
const products = crate.items.map((item, index) => {
return (
<ProductCartItem
card_index={index}
crate_index={crate_index}
first={index === 0}
last={index === crate.items.length - 1 && nbrOccupied >= nbrSlots}
key={item.id}/>
);
});
return (
<Droppable droppableId={crate.id} direction="horizontal">
{(provided, snapshot) => (
<div
ref={provided.innerRef}
{...provided.droppableProps}
style={cartStyle(
provided.droppableProps.style,
snapshot,
)}
className="items-cart-list">
{products}
{provided.placeholder && (
<div style={{display: 'none'}}>
{provided.placeholder}
</div>
)}
<FakePlaceholder
nToDraw={nbrSlots - nbrOccupied}
isDraggingOver={snapshot.isDraggingOver}/>
</div>
)}
</Droppable>
);
}

View File

@ -0,0 +1,69 @@
import React from 'react';
import {Droppable} from "@hello-pangea/dnd";
import {useShopStore} from "./shop_store";
// #!render_count
import {useRenderCount} from "@uidotdev/usehooks";
import {CatalogGroups} from "./CatalogGroups";
import {SearchBar} from "./SearchBar";
import {CatalogSearchResult} from "./CatalogSearchResult";
import {GradientBottom} from "./GradientBottom";
/**
* Component that renders the catalog in the aside
*/
export function Catalog() {
// #!render_count
const renderCount = useRenderCount();
const data = useShopStore((state) => state.groups);
const items = useShopStore((state) => state.cards);
const onClickToggleMobileSideMenu = useShopStore((state) => state.switchSideMenu);
const isMobile = useShopStore((state) => state.isMobile);
const showSearch = useShopStore((state) => state.listed_cards.length > 0 && state.search_bar_value.length > 0);
const noResults = useShopStore((state) => state.listed_cards.length === 0 && state.search_bar_value.length > 0);
// #!render_count
console.log("Catalog renders: ", renderCount)
return (
<Droppable
droppableId={data.id}
isDropDisabled={false}>
{(provided) => (
<div
className="catalog-container"
ref={provided.innerRef}
{...provided.droppableProps}>
<div className="catalog-bar">
<SearchBar/>
{isMobile ? (
<div className="mobileCloseMenu">
<button onClick={onClickToggleMobileSideMenu}>
<img src="/images/shop/icon-close-white.svg" alt="add"/>
</button>
</div>
) : null}
</div>
{(showSearch && <CatalogSearchResult/>) ||
(noResults && <p className="no-results">No results</p>) ||
<CatalogGroups/>}
{provided.placeholder && (
<div style={{display: 'none'}}>
{provided.placeholder}
</div>
)}
<GradientBottom/>
</div>
)}
</Droppable>
);
}

View File

@ -0,0 +1,44 @@
import {ProductItem} from "./ProductItem";
import React from "react";
import {useShopStore} from "./shop_store";
export function CatalogGroups() {
const data = useShopStore((state) => state.groups);
const items = useShopStore((state) => state.cards);
const ordered_groups = data.categories.map(groupItem => ({
name: groupItem.name,
items: groupItem.itemIds.map(itemId => items[itemId])
}));
let item_index = -1;
const groups = ordered_groups.map((group, g_index) => {
return (
<div className="accordion-item" key={`${group.name}`}>
<h2 className="accordion-header">
<button className="accordion-button collapsed" type="button" data-bs-toggle="collapse"
data-bs-target={`#collapse${g_index}`} aria-expanded="true"
aria-controls={`collapse${g_index}`}>
{group.name}
</button>
</h2>
<div id={`collapse${g_index}`} className="accordion-collapse collapse" aria-labelledby="headingOne"
data-bs-parent="#accordion_categories">
<div className="accordion-body">
{group.items.map(item => {
item_index++;
return (
<ProductItem card_index={item_index} key={item.id} />
)
})}
</div>
</div>
</div>
);
}
);
return (
<div className="accordion accordion-flush" id="accordion_categories">
{groups}
</div>
)
}

View File

@ -0,0 +1,16 @@
import React from 'react';
import {useShopStore} from "./shop_store";
import {ProductItem} from "./ProductItem";
export function CatalogSearchResult() {
const cards_to_display = useShopStore((state) => state.listed_cards);
return ( <>
{cards_to_display.map((item, _) => {
return (
<ProductItem card_index={item} key={"searched_" + item} />
)
})}
</>
)
}

53
static/js/shop/Crate.jsx Normal file
View File

@ -0,0 +1,53 @@
import React from 'react';
import {Cart} from "./Cart";
import {CrateMode} from "./CrateMode";
import {CrateWarnings} from "./CrateWarnings";
import {useShopStore} from "./shop_store";
import {CrateOptions} from "./CrateOptions";
// #!render_count
import {useRenderCount} from "@uidotdev/usehooks";
/**
* Component that displays the main crate with reminder rules.
* It includes <Cart> and rules
*/
export function Crate({crate_index}) {
// #!render_count
const renderCount = useRenderCount();
const crate = useShopStore((state) => state.crates[crate_index],
(a, b) => a.length === b.length && a.id === b.id);
const modes_order = useShopStore((state) => state.modes_order);
const onDeleteCrate = useShopStore((state) => state.delCrate);
// #!render_count
console.log("Crate renders: ", renderCount)
return (
<div className="crate">
{
modes_order.includes(crate.crate_mode) ? (
<div className="crate-bar d-inline-flex justify-content-between">
<CrateMode crate_index={crate_index}/>
<div className="delete-crate align-self-start align-content-start justify-content-end" onClick={() => onDeleteCrate(crate.id)}>
Delete crate <img src="/images/shop/icon-remove.svg" alt="remove"/>
</div>
</div>
) : <></>
}
<div className="crate-products">
<Cart crate_index={crate_index}/>
<CrateWarnings crate_index={crate_index} />
<CrateOptions crate_index={crate_index}/>
</div>
</div>
);
}

View File

@ -0,0 +1,45 @@
import React from 'react'
import {Accordion} from "react-bootstrap";
import {Crate} from "./Crate";
import {useShopStore} from "./shop_store";
// #!render_count
import {useRenderCount} from "@uidotdev/usehooks";
export function CrateList() {
// #!render_count
const renderCount = useRenderCount();
const crates = useShopStore((state) => state.crates,
(a, b) => a.length === b.length);
const active_crate = useShopStore((state) => state.active_crate);
const onAddCrate = useShopStore((state) => state.newCrate);
const setActiveCrate = useShopStore((state) => state.setActiveCrate);
const onSelectHandler = (e) => {
// if e === null, that means that an accordion item was collapsed rather than expanded. e will be non-null when an item is expanded
if (e !== null)
setActiveCrate(e);
else
setActiveCrate("")
};
// #!render_count
console.log("CrateList renders: ", renderCount)
return (
<Accordion id="accordion_crates" flush activeKey={active_crate} onSelect={onSelectHandler}>
{crates.map((crate, index) =>
<Accordion.Item eventKey={crate.id} key={"accordion"+crate.id} className="accordion_crates_item">
<Accordion.Header>{crate.name ? crate.name : <>Crate #{`${index}`}</>} </Accordion.Header>
<Accordion.Body>
<Crate crate_index={index}/>
</Accordion.Body>
</Accordion.Item>
)}
<Accordion.Item eventKey="last" id="accordion_crates_add">
<Accordion.Header onClick={onAddCrate}>
Add new crate
</Accordion.Header>
</Accordion.Item>
</Accordion>)
}

View File

@ -0,0 +1,35 @@
import React from 'react';
import {useShopStore} from "./shop_store";
// #!render_count
import {useRenderCount} from "@uidotdev/usehooks";
/**
* Component that displays crate modes
*/
export function CrateMode({crate_index}) {
// #!render_count
const renderCount = useRenderCount();
const modes_order = useShopStore((state) => state.modes_order);
const crate_modes = useShopStore((state) => state.crate_modes);
const crate = useShopStore((state) => state.crates[crate_index],
(a, b) => a.id === b.id && a.crate_mode === b.crate_mode);
const setMode = useShopStore((state) => state.setCrateMode);
// #!render_count
console.log("CrateMode renders: ", renderCount)
return (
<div className="crate-mode">
{modes_order.map((mode_name, _) => (
<a
key={mode_name}
className={(crate.crate_mode === mode_name ? 'active' : '')}
onClick={() => setMode(crate.id, mode_name)}
href="#"
role="button">{crate_modes[mode_name].name}</a>
))}
</div>
);
}

View File

@ -0,0 +1,39 @@
import React from 'react';
import {useShopStore} from "./shop_store";
import {ProcessOptions} from "./options/Options";
export function CrateOptions({crate_index}) {
const crate_id = useShopStore((state) => state.crates[crate_index].id);
const optionsLogic = useShopStore((state) => state.crate_options);
const updateOptions = useShopStore((state) => state.updateCrateOptions);
const options_data = useShopStore((state) => state.crates[crate_index].options_data || {});
const options = ProcessOptions({
options: optionsLogic,
data: options_data,
id: "crate_options" + crate_id,
target: {
construct: ((outvar, value) => {
// #!options_log
console.log("construct", outvar, value, options_data);
options_data[outvar] = value;
}),
update: ((outvar, value) => {
// #!options_log
console.log("update", outvar, value, options_data);
if (outvar in options_data) options_data[outvar] = value;
updateOptions(crate_id, {[outvar]: value});
})
}
});
return (
<div className="crate-bar">
{options}
</div>
)
}

View File

@ -0,0 +1,27 @@
import React from "react";
import {LevelUI} from "./warnings";
import {useShopStore} from "./shop_store";
import {compareArraysWithIds} from "./utils";
// #!render_count
import {useRenderCount} from "@uidotdev/usehooks";
export function CrateWarnings({crate_index}) {
// #!render_count
const renderCount = useRenderCount();
const crate_warnings = useShopStore(state => (state.crates[crate_index].warnings), compareArraysWithIds)
// #!render_count
console.log("CrateWarnings renders: ", renderCount)
return (
<div className="crate-info">
{crate_warnings.map((rule, index) => (
<p key={index} className="rule" style={{'color': LevelUI(rule.level).color}}>
<img src={LevelUI(rule.level).icon} /> <i>{rule.message}</i>
</p>
))}
</div>
)
}

View File

@ -0,0 +1,13 @@
import React from "react";
import {DOMAIN} from "./utils";
export function DomainedEmail({address}) {
const target = `${address}@${DOMAIN}`;
return <a href={"mailto:" + target}>{target}</a>
}
export const DomainedRFQMessages = {
OK: <>We've received your request and will be in contact soon.</>,
ERROR: <>We cannot receive your request. Try using the export by coping the configuration and send it to us at <DomainedEmail address="sales"/></>
}

View File

@ -0,0 +1,27 @@
import React from 'react';
/**
* Component that displays a placeholder inside crate.
* Allows to display how it remains space for the current crate.
*/
export function FakePlaceholder({isDraggingOver, nToDraw}) {
const fakePlaceholder = [];
for (let i = nToDraw; i > 0; i--) {
fakePlaceholder.push(
<div key={i} style={{
display: isDraggingOver ? 'none' : 'block',
border: '1px dashed #ccc',
width: '45px',
marginBottom: '5px',
}}></div>
);
}
return (
<React.Fragment>
{fakePlaceholder}
</React.Fragment>
);
}

View File

@ -0,0 +1,7 @@
import React from 'react';
export function GradientBottom() {
return (
<div className="gradient-bottom"></div>
)
}

View File

@ -0,0 +1,104 @@
import {useShopStore} from "./shop_store";
import {useClickAway} from "./options/useClickAway";
import {Modal} from "react-bootstrap";
import React from "react";
import {Validation} from "./validate";
// #!render_count
import {useRenderCount} from "@uidotdev/usehooks";
const JSONExample = JSON.stringify({
"crates": [
{
"items": [
{
"pn": "1124",
"options": null
},
{
"pn": "2128",
"options": null
},
{
"pn": "2128",
"options": null
},
{
"pn": "2128",
"options": null
}
],
"type": "rack",
"options": {}
},
{
"items": [],
"type": "no_crate",
"options": {}
}
],
"options": {}
});
export function ImportJSON() {
// #!render_count
const renderCount = useRenderCount();
const shouldShow = useShopStore((state) => state.importShouldOpen);
const data = useShopStore((state) => state.importValue);
const loadDescription = useShopStore((state) => state.loadDescription);
const updateImportDescription = useShopStore((state) => state.updateImportDescription);
const closeImport = useShopStore((state) => state.closeImport);
const showImport = useShopStore((state) => state.openImport);
// #!render_count
console.log("ImportJSON renders: ", renderCount)
const ref = useClickAway((e) => {
if (e.type === "mousedown") // ignore touchstart
closeImport()
}
);
return (<>
<button
className="btn btn-sm btn-outline-primary m-0 mb-2"
style={{'cursor': 'pointer'}}
onClick={showImport}>Import JSON
</button>
<Modal show={shouldShow} animation={true} centered className="rfqFeedback">
<Modal.Body ref={ref}>
<div className="form-group">
<p className="small">
Input the JSON description below. Should be something like:
<br/>
{JSONExample}
</p>
</div>
<div className="form-group w-100">
<textarea
onChange={(event) => {
updateImportDescription(event.target.value)
}}
value={data.value}
className="form-control w-100"
rows="5"
placeholder="Input JSON description here."/>
</div>
{data.error !== Validation.OK ? (
<div className="form-group">
<p className="text-danger">{data.error === Validation.Empty ? "Empty input" : "Invalid JSON"}</p>
</div>
) : null}
<div className="d-flex flex-column flex-sm-row justify-content-end">
<a type="button" onClick={closeImport}
className="btn btn-sm btn-outline-primary m-0 mb-2 mt-2 mb-sm-0 me-sm-2">Close</a>
<a type="button" onClick={loadDescription}
className={`btn btn-sm btn-primary m-0 ms-sm-2 mt-2 ${data.error ? 'disabled' : ''}`}>Load
configuration</a>
</div>
</Modal.Body>
</Modal>
</>)
}

46
static/js/shop/Layout.jsx Normal file
View File

@ -0,0 +1,46 @@
import React from 'react';
import {useShopStore} from "./shop_store";
// #!render_count
import {useRenderCount} from "@uidotdev/usehooks";
/**
* Component that provides a base layout (aside/main) for the page.
*/
export function Layout({aside, main}) {
// #!render_count
const renderCount = useRenderCount();
const mobileSideMenuShouldOpen = useShopStore(state => state.sideMenuIsOpen);
const onClickToggleMobileSideMenu = useShopStore(state => state.switchSideMenu);
const showCardAddedFeedback = useShopStore(state => state.showCardAddedFeedback);
const showNoDestination = useShopStore(state => state.showNoDestination);
// #!render_count
console.log("Layout renders: ", renderCount)
return (
<div className="layout">
<aside className={'aside ' + (mobileSideMenuShouldOpen ? 'menu-opened' : '')}>{aside}</aside>
{mobileSideMenuShouldOpen ? (
<section className="main" onClick={onClickToggleMobileSideMenu}>{main}</section>
) : (
<section className="main">{main}</section>
)}
{showCardAddedFeedback ? (
!showNoDestination ?
(<div className="feedback-add-success">
added
</div>)
: (<div className="feedback-add-failure">
No cards added: all crates are closed
</div>)
) : null}
</div>
);
}

View File

@ -0,0 +1,63 @@
import {DialogPopup} from "./options/DialogPopup";
import React from "react";
import {useShopStore} from "./shop_store";
import {SummaryPopup} from "./options/SummaryPopup";
export function OptionsDialogWrapper({crate_index, card_index, first, last}) {
const crate_id = useShopStore((state) => state.crates[crate_index].id);
const options = useShopStore((state) => state.crates[crate_index].items[card_index].options);
const options_data = useShopStore((state) => state.crates[crate_index].items[card_index].options_data);
const card_size = useShopStore((state) => state.crates[crate_index].items[card_index].size);
const card_id = useShopStore((state) => state.crates[crate_index].items[card_index].id);
const options_class = useShopStore((state) => state.crates[crate_index].items[card_index].options_class);
const sideMenuIsOpen = useShopStore((state) => state.sideMenuIsOpen);
const _notificationTimer = useShopStore((state) => state.notificationTimer);
const hideNotification = useShopStore((state) => state.hideNotification);
const displayNotification = useShopStore((state) =>
state.notificationCrateId === crate_id &&
(state.notificationCardIndex === card_index || (state.crates[crate_index].items.length + (state.notificationCardIndex || -1)) === card_index));
const onOptionsUpdate = useShopStore((state) => state.updateOptions);
return (
<DialogPopup
options={options}
data={options_data}
options_class={options_class}
key={"popover" + crate_id +card_id}
id={"popover"+ crate_id + card_id}
big={card_size === "big"}
first={first}
last={last}
sideMenuIsOpen={sideMenuIsOpen}
onHideNotification={hideNotification}
displayNotification={displayNotification}
target={{
construct: ((outvar, value) => {
// #!options_log
console.log("construct", outvar, value, options_data);
options_data[outvar] = value;
}),
update: ((outvar, value) => {
// #!options_log
console.log("update", outvar, value, options_data);
if (outvar in options_data) options_data[outvar] = value;
onOptionsUpdate(crate_id, card_index, {[outvar]: value});
})
}}
/>
)
}
export function OptionsSummaryWrapper({crate_index, card_index}) {
const card_id = useShopStore((state) => state.crates[crate_index].items[card_index].id);
const options = useShopStore((state) => state.crates[crate_index].items[card_index].options);
const options_data = useShopStore((state) => state.crates[crate_index].items[card_index].options_data);
return (
<SummaryPopup id={card_id + "options"} options={options}
data={options_data}/>
)
}

View File

@ -0,0 +1,78 @@
import React from 'react'
import {Validation} from "./validate.js";
import {useShopStore} from "./shop_store";
import {ShowJSON} from "./ShowJSON";
// #!render_count
import {useRenderCount} from "@uidotdev/usehooks";
import {OrderOptions} from "./OrderOptions";
/**
* Components that renders the form to request quote.
*/
export function OrderForm() {
// #!render_count
const renderCount = useRenderCount();
const email = useShopStore((state) => state.email);
const note = useShopStore((state) => state.note);
const isProcessing = useShopStore((state) => state.isProcessing);
const updateEmail = useShopStore((state) => state.updateEmail);
const updateNote = useShopStore((state) => state.updateNote);
const submitForm = useShopStore((state) => state.submitForm);
const submitDisabled = useShopStore((state) => state.submitDisabled);
const resetEmailValidation = useShopStore((state) => state.resetEmailValidation);
// #!render_count
console.log("OrderForm renders: ", renderCount)
return (
<div className="summary-form">
<OrderOptions/>
<form onSubmit={submitForm} noValidate>
<input
className={`${email.error > 0 ? 'errorField' : ''}`}
type="email"
placeholder="Email"
onFocus={resetEmailValidation}
onChange={(event) => updateEmail(event.target.value)}
onBlur={(event) => updateEmail(event.target.value)}
value={email.value}/>
{email.error === Validation.Empty ? (
<div className="error">
<small>Required</small>
</div>
) : null}
{email.error === Validation.Invalid ? (
<div className="error">
<small>Your email is incomplete</small>
</div>
) : null}
<textarea
onChange={(event) => updateNote(event.target.value)}
defaultValue={note.value}
rows="5"
placeholder="Additional notes"/>
<div className="d-flex flex-column flex-sm-row justify-content-between">
<ShowJSON/>
<input className="btn btn-primary w-100 m-0 ms-sm-2 order-form-submit" type="button"
disabled={submitDisabled()}
onClick={submitForm}
value={`${isProcessing ? 'Processing ...' : 'Request quote'}`}/>
</div>
{/*This will open an email window. Send the email to make your request.*/}
</form>
</div>
);
}

View File

@ -0,0 +1,38 @@
import {useShopStore} from "./shop_store";
import {ProcessOptions} from "./options/Options";
import React from "react";
export function OrderOptions() {
const optionsLogic = useShopStore((state) => state.order_options);
const updateOptions = useShopStore((state) => state.updateOrderOptions);
const options_data = useShopStore((state) => state.order_options_data || {});
const options = ProcessOptions({
options: optionsLogic,
data: options_data,
id: "order_options",
target: {
construct: ((outvar, value) => {
// #!options_log
console.log("construct", outvar, value, options_data);
options_data[outvar] = value;
updateOptions({[outvar]: value});
}),
update: ((outvar, value) => {
// #!options_log
console.log("update", outvar, value, options_data);
if (outvar in options_data) options_data[outvar] = value;
updateOptions({[outvar]: value});
})
}
});
return (
<div className="order-bar">
{options}
</div>
)
}

View File

@ -0,0 +1,56 @@
import React from 'react'
import {SummaryOrder} from "./SummaryOrder";
import {OrderForm} from "./OrderForm";
import {CrateList} from "./CrateList";
import {useShopStore} from "./shop_store";
import {ImportJSON} from "./ImportJSON";
import {RFQFeedback} from "./RFQFeedback";
// #!render_count
import {useRenderCount} from "@uidotdev/usehooks";
import {OrderOptions} from "./OrderOptions";
/**
* Component that renders all things for order.
* It acts like-a layout, this component do nothing more.
*/
export function OrderPanel({title, description}) {
// #!render_count
const renderCount = useRenderCount();
const isMobile = useShopStore((state) => state.isMobile);
const onClickToggleMobileSideMenu = useShopStore((state) => state.switchSideMenu);
// #!render_count
console.log("OrderPanel renders: ", renderCount)
return (<section className="panel">
<h2>{title}</h2>
<div className="control justify-content-between">
{description}
</div>
<div>
<ImportJSON/>
</div>
<RFQFeedback/>
{isMobile ? (
<div className="mobileBtnDisplaySideMenu">
<button onClick={onClickToggleMobileSideMenu}>
<img src="/images/shop/icon-add.svg" alt="add"/>
</button>
</div>
) : null}
<CrateList/>
<section className="summary">
<SummaryOrder/>
<OrderForm/>
</section>
</section>);
}

View File

@ -0,0 +1,115 @@
import React from 'react'
import {Draggable} from "@hello-pangea/dnd";
import {compareObjectsEmptiness, productStyle} from "./utils";
import {Resources} from "./Resources";
import {CardWarnings} from "./CardWarnings";
import {useShopStore} from "./shop_store";
import {OptionsDialogWrapper} from "./OptionsWrapper";
// #!render_count
import {useRenderCount} from "@uidotdev/usehooks";
/**
* Component that renders a product.
* Used in the crate
*/
export function ProductCartItem({card_index, crate_index, first, last}) {
// #!render_count
const renderCount = useRenderCount();
const card = useShopStore((state) => state.crates[crate_index].items[card_index],
(a, b) => a.id === b.id);
const card_show_warnings = useShopStore(state => state.crates[crate_index].items[card_index].show_warnings, compareObjectsEmptiness);
const card_counted_resources = useShopStore(state => state.crates[crate_index].items[card_index].counted_resources, compareObjectsEmptiness);
const highlighted = useShopStore((state) => state.crates[crate_index].id === state.highlighted.crate && card_index === state.highlighted.card);
const options_disabled = useShopStore((state) => !!state.crateParams(state.crates[crate_index].crate_mode).warnings_disabled);
const crate_id = useShopStore((state) => state.crates[crate_index].id);
const setHighlight = useShopStore((state) => state.highlightCard);
const removeHighlight = useShopStore((state) => state.highlightReset);
const onCardRemove = useShopStore((state) => state.deleteCard);
// #!render_count
console.log("ProductCartItem renders: ", renderCount)
const options = !options_disabled && card && card.options && card.options.length > 0;
const warnings = !options_disabled && card_show_warnings && card_show_warnings.length > 0;
const resources = !options_disabled && card_counted_resources && card_counted_resources.length > 0;
return (
<Draggable draggableId={card.id} index={card_index}>
{(provided, snapshot) => (
<div
ref={provided.innerRef}
{...provided.draggableProps}
{...provided.dragHandleProps}
style={{
...productStyle(
provided.draggableProps.style,
snapshot,
true,
!!highlighted,
false,
true
)
}}
onMouseEnter={() => setHighlight(crate_id, card_index)}
onMouseLeave={removeHighlight}
>
{/* warning container */}
<div className="progress-container warning d-flex justify-content-evenly">
{warnings &&
(<CardWarnings crate_index={crate_index} card_index={card_index} />)
}
{options && (
<OptionsDialogWrapper
crate_index={crate_index}
card_index={card_index}
first={first}
last={last}
/>
)}
</div>
<h6>{card.name_number}</h6>
<div
onMouseEnter={() => setHighlight(crate_id, card_index)}
onClick={() => setHighlight(crate_id, card_index)}
>
<img
className='item-cart'
src={card.image}/>
</div>
{/* remove container */}
<div
style={{'display': highlighted ? 'flex' : 'none'}}
className="overlayRemove"
onClick={() => onCardRemove(crate_id, card_index)}>
<img src="/images/shop/icon-remove.svg" alt="rm"/>
<p>Remove</p>
</div>
{/* progression container */}
{resources && (
<Resources crate_index={crate_index} card_index={card_index} />
)}
</div>
)}
</Draggable>
);
}

Some files were not shown because too many files have changed in this diff Show More