From e1249e7b8150f57ce006be522166e228252b53a3 Mon Sep 17 00:00:00 2001 From: 0x1eef <0x1eef@protonmail.com> Date: Sun, 19 May 2024 16:48:09 -0300 Subject: [PATCH] Add Farsi support This change is a big one. It adds Farsi support, which by itself is significant. In the process of adding Farsi support other significant improvements were made: * Select.tsx component * TLocale (Quran/index.ts) * ... --- .gitmodules | 6 + .prettierrc | 2 +- Rules | 2 +- documentation/add-new-language.txt | 21 + packages/typescript/Quran/src/index.ts | 13 +- src/css/_base.scss | 74 +- src/css/base/_select.scss | 111 +- src/css/main/SurahIndex.scss | 15 +- src/css/main/SurahStream.scss | 11 +- src/css/themes/blue.scss | 19 +- src/css/themes/blue/_base.scss | 10 - src/css/themes/blue/base/_select.scss | 38 +- src/css/themes/blue/main/_SurahIndex.scss | 2 +- src/css/themes/blue/main/_SurahStream.scss | 2 +- src/css/themes/green.scss | 14 +- src/css/themes/green/_base.scss | 12 - src/css/themes/green/base/_colors.scss | 1 + src/css/themes/green/base/_select.scss | 33 +- src/css/themes/green/main/_SurahStream.scss | 2 +- src/css/vendor/tail.scss | 97 +- src/js/components/AudioControl.tsx | 13 +- src/js/components/Head.tsx | 4 +- src/js/components/LanguageSelect.tsx | 37 +- src/js/components/Select.tsx | 78 -- src/js/components/Select/Option.tsx | 11 + src/js/components/Select/index.tsx | 48 + src/js/components/SurahIndex/index.tsx | 30 +- src/js/components/SurahStream/Stream.tsx | 24 +- src/js/components/SurahStream/Timer.tsx | 4 +- src/js/components/SurahStream/index.tsx | 18 +- src/js/components/ThemeSelect.tsx | 26 +- src/js/hooks/useTheme.ts | 4 +- src/js/lib/t.ts | 4 +- src/js/loaders/SurahIndexLoader.ts | 4 +- src/js/loaders/SurahStreamLoader.ts | 7 +- src/js/main/surah-index.tsx | 18 +- src/js/main/surah-stream.tsx | 11 +- src/json/fa/1/info.json | 9 + src/json/fa/1/surah.json | 30 + src/json/fa/10/info.json | 9 + src/json/fa/10/surah.json | 438 +++++++ src/json/fa/100/info.json | 9 + src/json/fa/100/surah.json | 46 + src/json/fa/101/info.json | 9 + src/json/fa/101/surah.json | 46 + src/json/fa/102/info.json | 9 + src/json/fa/102/surah.json | 34 + src/json/fa/103/info.json | 9 + src/json/fa/103/surah.json | 14 + src/json/fa/104/info.json | 9 + src/json/fa/104/surah.json | 38 + src/json/fa/105/info.json | 9 + src/json/fa/105/surah.json | 22 + src/json/fa/106/info.json | 9 + src/json/fa/106/surah.json | 18 + src/json/fa/107/info.json | 9 + src/json/fa/107/surah.json | 30 + src/json/fa/108/info.json | 9 + src/json/fa/108/surah.json | 14 + src/json/fa/109/info.json | 9 + src/json/fa/109/surah.json | 26 + src/json/fa/11/info.json | 9 + src/json/fa/11/surah.json | 494 ++++++++ src/json/fa/110/info.json | 9 + src/json/fa/110/surah.json | 14 + src/json/fa/111/info.json | 9 + src/json/fa/111/surah.json | 22 + src/json/fa/112/info.json | 9 + src/json/fa/112/surah.json | 18 + src/json/fa/113/info.json | 9 + src/json/fa/113/surah.json | 22 + src/json/fa/114/info.json | 9 + src/json/fa/114/surah.json | 26 + src/json/fa/12/info.json | 9 + src/json/fa/12/surah.json | 446 ++++++++ src/json/fa/13/info.json | 9 + src/json/fa/13/surah.json | 174 +++ src/json/fa/14/info.json | 9 + src/json/fa/14/surah.json | 210 ++++ src/json/fa/15/info.json | 9 + src/json/fa/15/surah.json | 398 +++++++ src/json/fa/16/info.json | 9 + src/json/fa/16/surah.json | 514 +++++++++ src/json/fa/17/info.json | 9 + src/json/fa/17/surah.json | 446 ++++++++ src/json/fa/18/info.json | 9 + src/json/fa/18/surah.json | 442 +++++++ src/json/fa/19/info.json | 9 + src/json/fa/19/surah.json | 394 +++++++ src/json/fa/2/info.json | 9 + src/json/fa/2/surah.json | 1146 +++++++++++++++++++ src/json/fa/20/info.json | 9 + src/json/fa/20/surah.json | 542 +++++++++ src/json/fa/21/info.json | 9 + src/json/fa/21/surah.json | 450 ++++++++ src/json/fa/22/info.json | 9 + src/json/fa/22/surah.json | 314 +++++ src/json/fa/23/info.json | 9 + src/json/fa/23/surah.json | 474 ++++++++ src/json/fa/24/info.json | 9 + src/json/fa/24/surah.json | 258 +++++ src/json/fa/25/info.json | 9 + src/json/fa/25/surah.json | 310 +++++ src/json/fa/26/info.json | 9 + src/json/fa/26/surah.json | 910 +++++++++++++++ src/json/fa/27/info.json | 9 + src/json/fa/27/surah.json | 374 ++++++ src/json/fa/28/info.json | 9 + src/json/fa/28/surah.json | 354 ++++++ src/json/fa/29/info.json | 9 + src/json/fa/29/surah.json | 278 +++++ src/json/fa/3/info.json | 9 + src/json/fa/3/surah.json | 802 +++++++++++++ src/json/fa/30/info.json | 9 + src/json/fa/30/surah.json | 242 ++++ src/json/fa/31/info.json | 9 + src/json/fa/31/surah.json | 138 +++ src/json/fa/32/info.json | 9 + src/json/fa/32/surah.json | 122 ++ src/json/fa/33/info.json | 9 + src/json/fa/33/surah.json | 294 +++++ src/json/fa/34/info.json | 9 + src/json/fa/34/surah.json | 218 ++++ src/json/fa/35/info.json | 9 + src/json/fa/35/surah.json | 182 +++ src/json/fa/36/info.json | 9 + src/json/fa/36/surah.json | 334 ++++++ src/json/fa/37/info.json | 9 + src/json/fa/37/surah.json | 730 ++++++++++++ src/json/fa/38/info.json | 9 + src/json/fa/38/surah.json | 354 ++++++ src/json/fa/39/info.json | 9 + src/json/fa/39/surah.json | 302 +++++ src/json/fa/4/info.json | 9 + src/json/fa/4/surah.json | 706 ++++++++++++ src/json/fa/40/info.json | 9 + src/json/fa/40/surah.json | 342 ++++++ src/json/fa/41/info.json | 9 + src/json/fa/41/surah.json | 218 ++++ src/json/fa/42/info.json | 9 + src/json/fa/42/surah.json | 214 ++++ src/json/fa/43/info.json | 9 + src/json/fa/43/surah.json | 358 ++++++ src/json/fa/44/info.json | 9 + src/json/fa/44/surah.json | 238 ++++ src/json/fa/45/info.json | 9 + src/json/fa/45/surah.json | 150 +++ src/json/fa/46/info.json | 9 + src/json/fa/46/surah.json | 142 +++ src/json/fa/47/info.json | 9 + src/json/fa/47/surah.json | 154 +++ src/json/fa/48/info.json | 9 + src/json/fa/48/surah.json | 118 ++ src/json/fa/49/info.json | 9 + src/json/fa/49/surah.json | 74 ++ src/json/fa/5/info.json | 9 + src/json/fa/5/surah.json | 482 ++++++++ src/json/fa/50/info.json | 9 + src/json/fa/50/surah.json | 182 +++ src/json/fa/51/info.json | 9 + src/json/fa/51/surah.json | 242 ++++ src/json/fa/52/info.json | 9 + src/json/fa/52/surah.json | 198 ++++ src/json/fa/53/info.json | 9 + src/json/fa/53/surah.json | 250 ++++ src/json/fa/54/info.json | 9 + src/json/fa/54/surah.json | 222 ++++ src/json/fa/55/info.json | 9 + src/json/fa/55/surah.json | 314 +++++ src/json/fa/56/info.json | 9 + src/json/fa/56/surah.json | 386 +++++++ src/json/fa/57/info.json | 9 + src/json/fa/57/surah.json | 118 ++ src/json/fa/58/info.json | 9 + src/json/fa/58/surah.json | 90 ++ src/json/fa/59/info.json | 9 + src/json/fa/59/surah.json | 98 ++ src/json/fa/6/info.json | 9 + src/json/fa/6/surah.json | 662 +++++++++++ src/json/fa/60/info.json | 9 + src/json/fa/60/surah.json | 54 + src/json/fa/61/info.json | 9 + src/json/fa/61/surah.json | 58 + src/json/fa/62/info.json | 9 + src/json/fa/62/surah.json | 46 + src/json/fa/63/info.json | 9 + src/json/fa/63/surah.json | 46 + src/json/fa/64/info.json | 9 + src/json/fa/64/surah.json | 74 ++ src/json/fa/65/info.json | 9 + src/json/fa/65/surah.json | 50 + src/json/fa/66/info.json | 9 + src/json/fa/66/surah.json | 50 + src/json/fa/67/info.json | 9 + src/json/fa/67/surah.json | 122 ++ src/json/fa/68/info.json | 9 + src/json/fa/68/surah.json | 210 ++++ src/json/fa/69/info.json | 9 + src/json/fa/69/surah.json | 210 ++++ src/json/fa/7/info.json | 9 + src/json/fa/7/surah.json | 826 +++++++++++++ src/json/fa/70/info.json | 9 + src/json/fa/70/surah.json | 178 +++ src/json/fa/71/info.json | 9 + src/json/fa/71/surah.json | 114 ++ src/json/fa/72/info.json | 9 + src/json/fa/72/surah.json | 114 ++ src/json/fa/73/info.json | 9 + src/json/fa/73/surah.json | 82 ++ src/json/fa/74/info.json | 9 + src/json/fa/74/surah.json | 226 ++++ src/json/fa/75/info.json | 9 + src/json/fa/75/surah.json | 162 +++ src/json/fa/76/info.json | 9 + src/json/fa/76/surah.json | 126 ++ src/json/fa/77/info.json | 9 + src/json/fa/77/surah.json | 202 ++++ src/json/fa/78/info.json | 9 + src/json/fa/78/surah.json | 162 +++ src/json/fa/79/info.json | 9 + src/json/fa/79/surah.json | 186 +++ src/json/fa/8/info.json | 9 + src/json/fa/8/surah.json | 302 +++++ src/json/fa/80/info.json | 9 + src/json/fa/80/surah.json | 170 +++ src/json/fa/81/info.json | 9 + src/json/fa/81/surah.json | 118 ++ src/json/fa/82/info.json | 9 + src/json/fa/82/surah.json | 78 ++ src/json/fa/83/info.json | 9 + src/json/fa/83/surah.json | 146 +++ src/json/fa/84/info.json | 9 + src/json/fa/84/surah.json | 102 ++ src/json/fa/85/info.json | 9 + src/json/fa/85/surah.json | 90 ++ src/json/fa/86/info.json | 9 + src/json/fa/86/surah.json | 70 ++ src/json/fa/87/info.json | 9 + src/json/fa/87/surah.json | 78 ++ src/json/fa/88/info.json | 9 + src/json/fa/88/surah.json | 106 ++ src/json/fa/89/info.json | 9 + src/json/fa/89/surah.json | 122 ++ src/json/fa/9/info.json | 9 + src/json/fa/9/surah.json | 518 +++++++++ src/json/fa/90/info.json | 9 + src/json/fa/90/surah.json | 82 ++ src/json/fa/91/info.json | 9 + src/json/fa/91/surah.json | 62 + src/json/fa/92/info.json | 9 + src/json/fa/92/surah.json | 86 ++ src/json/fa/93/info.json | 9 + src/json/fa/93/surah.json | 46 + src/json/fa/94/info.json | 9 + src/json/fa/94/surah.json | 34 + src/json/fa/95/info.json | 9 + src/json/fa/95/surah.json | 34 + src/json/fa/96/info.json | 9 + src/json/fa/96/surah.json | 78 ++ src/json/fa/97/info.json | 9 + src/json/fa/97/surah.json | 22 + src/json/fa/98/info.json | 9 + src/json/fa/98/surah.json | 34 + src/json/fa/99/info.json | 9 + src/json/fa/99/surah.json | 34 + src/json/surahs.json | 1028 +++++++++++++++++ src/json/t.json | 136 +++ submodules/quran-json | 1 + submodules/tail.css | 1 + 269 files changed, 27736 insertions(+), 454 deletions(-) create mode 100644 documentation/add-new-language.txt delete mode 100644 src/js/components/Select.tsx create mode 100644 src/js/components/Select/Option.tsx create mode 100644 src/js/components/Select/index.tsx create mode 100644 src/json/fa/1/info.json create mode 100644 src/json/fa/1/surah.json create mode 100644 src/json/fa/10/info.json create mode 100644 src/json/fa/10/surah.json create mode 100644 src/json/fa/100/info.json create mode 100644 src/json/fa/100/surah.json create mode 100644 src/json/fa/101/info.json create mode 100644 src/json/fa/101/surah.json create mode 100644 src/json/fa/102/info.json create mode 100644 src/json/fa/102/surah.json create mode 100644 src/json/fa/103/info.json create mode 100644 src/json/fa/103/surah.json create mode 100644 src/json/fa/104/info.json create mode 100644 src/json/fa/104/surah.json create mode 100644 src/json/fa/105/info.json create mode 100644 src/json/fa/105/surah.json create mode 100644 src/json/fa/106/info.json create mode 100644 src/json/fa/106/surah.json create mode 100644 src/json/fa/107/info.json create mode 100644 src/json/fa/107/surah.json create mode 100644 src/json/fa/108/info.json create mode 100644 src/json/fa/108/surah.json create mode 100644 src/json/fa/109/info.json create mode 100644 src/json/fa/109/surah.json create mode 100644 src/json/fa/11/info.json create mode 100644 src/json/fa/11/surah.json create mode 100644 src/json/fa/110/info.json create mode 100644 src/json/fa/110/surah.json create mode 100644 src/json/fa/111/info.json create mode 100644 src/json/fa/111/surah.json create mode 100644 src/json/fa/112/info.json create mode 100644 src/json/fa/112/surah.json create mode 100644 src/json/fa/113/info.json create mode 100644 src/json/fa/113/surah.json create mode 100644 src/json/fa/114/info.json create mode 100644 src/json/fa/114/surah.json create mode 100644 src/json/fa/12/info.json create mode 100644 src/json/fa/12/surah.json create mode 100644 src/json/fa/13/info.json create mode 100644 src/json/fa/13/surah.json create mode 100644 src/json/fa/14/info.json create mode 100644 src/json/fa/14/surah.json create mode 100644 src/json/fa/15/info.json create mode 100644 src/json/fa/15/surah.json create mode 100644 src/json/fa/16/info.json create mode 100644 src/json/fa/16/surah.json create mode 100644 src/json/fa/17/info.json create mode 100644 src/json/fa/17/surah.json create mode 100644 src/json/fa/18/info.json create mode 100644 src/json/fa/18/surah.json create mode 100644 src/json/fa/19/info.json create mode 100644 src/json/fa/19/surah.json create mode 100644 src/json/fa/2/info.json create mode 100644 src/json/fa/2/surah.json create mode 100644 src/json/fa/20/info.json create mode 100644 src/json/fa/20/surah.json create mode 100644 src/json/fa/21/info.json create mode 100644 src/json/fa/21/surah.json create mode 100644 src/json/fa/22/info.json create mode 100644 src/json/fa/22/surah.json create mode 100644 src/json/fa/23/info.json create mode 100644 src/json/fa/23/surah.json create mode 100644 src/json/fa/24/info.json create mode 100644 src/json/fa/24/surah.json create mode 100644 src/json/fa/25/info.json create mode 100644 src/json/fa/25/surah.json create mode 100644 src/json/fa/26/info.json create mode 100644 src/json/fa/26/surah.json create mode 100644 src/json/fa/27/info.json create mode 100644 src/json/fa/27/surah.json create mode 100644 src/json/fa/28/info.json create mode 100644 src/json/fa/28/surah.json create mode 100644 src/json/fa/29/info.json create mode 100644 src/json/fa/29/surah.json create mode 100644 src/json/fa/3/info.json create mode 100644 src/json/fa/3/surah.json create mode 100644 src/json/fa/30/info.json create mode 100644 src/json/fa/30/surah.json create mode 100644 src/json/fa/31/info.json create mode 100644 src/json/fa/31/surah.json create mode 100644 src/json/fa/32/info.json create mode 100644 src/json/fa/32/surah.json create mode 100644 src/json/fa/33/info.json create mode 100644 src/json/fa/33/surah.json create mode 100644 src/json/fa/34/info.json create mode 100644 src/json/fa/34/surah.json create mode 100644 src/json/fa/35/info.json create mode 100644 src/json/fa/35/surah.json create mode 100644 src/json/fa/36/info.json create mode 100644 src/json/fa/36/surah.json create mode 100644 src/json/fa/37/info.json create mode 100644 src/json/fa/37/surah.json create mode 100644 src/json/fa/38/info.json create mode 100644 src/json/fa/38/surah.json create mode 100644 src/json/fa/39/info.json create mode 100644 src/json/fa/39/surah.json create mode 100644 src/json/fa/4/info.json create mode 100644 src/json/fa/4/surah.json create mode 100644 src/json/fa/40/info.json create mode 100644 src/json/fa/40/surah.json create mode 100644 src/json/fa/41/info.json create mode 100644 src/json/fa/41/surah.json create mode 100644 src/json/fa/42/info.json create mode 100644 src/json/fa/42/surah.json create mode 100644 src/json/fa/43/info.json create mode 100644 src/json/fa/43/surah.json create mode 100644 src/json/fa/44/info.json create mode 100644 src/json/fa/44/surah.json create mode 100644 src/json/fa/45/info.json create mode 100644 src/json/fa/45/surah.json create mode 100644 src/json/fa/46/info.json create mode 100644 src/json/fa/46/surah.json create mode 100644 src/json/fa/47/info.json create mode 100644 src/json/fa/47/surah.json create mode 100644 src/json/fa/48/info.json create mode 100644 src/json/fa/48/surah.json create mode 100644 src/json/fa/49/info.json create mode 100644 src/json/fa/49/surah.json create mode 100644 src/json/fa/5/info.json create mode 100644 src/json/fa/5/surah.json create mode 100644 src/json/fa/50/info.json create mode 100644 src/json/fa/50/surah.json create mode 100644 src/json/fa/51/info.json create mode 100644 src/json/fa/51/surah.json create mode 100644 src/json/fa/52/info.json create mode 100644 src/json/fa/52/surah.json create mode 100644 src/json/fa/53/info.json create mode 100644 src/json/fa/53/surah.json create mode 100644 src/json/fa/54/info.json create mode 100644 src/json/fa/54/surah.json create mode 100644 src/json/fa/55/info.json create mode 100644 src/json/fa/55/surah.json create mode 100644 src/json/fa/56/info.json create mode 100644 src/json/fa/56/surah.json create mode 100644 src/json/fa/57/info.json create mode 100644 src/json/fa/57/surah.json create mode 100644 src/json/fa/58/info.json create mode 100644 src/json/fa/58/surah.json create mode 100644 src/json/fa/59/info.json create mode 100644 src/json/fa/59/surah.json create mode 100644 src/json/fa/6/info.json create mode 100644 src/json/fa/6/surah.json create mode 100644 src/json/fa/60/info.json create mode 100644 src/json/fa/60/surah.json create mode 100644 src/json/fa/61/info.json create mode 100644 src/json/fa/61/surah.json create mode 100644 src/json/fa/62/info.json create mode 100644 src/json/fa/62/surah.json create mode 100644 src/json/fa/63/info.json create mode 100644 src/json/fa/63/surah.json create mode 100644 src/json/fa/64/info.json create mode 100644 src/json/fa/64/surah.json create mode 100644 src/json/fa/65/info.json create mode 100644 src/json/fa/65/surah.json create mode 100644 src/json/fa/66/info.json create mode 100644 src/json/fa/66/surah.json create mode 100644 src/json/fa/67/info.json create mode 100644 src/json/fa/67/surah.json create mode 100644 src/json/fa/68/info.json create mode 100644 src/json/fa/68/surah.json create mode 100644 src/json/fa/69/info.json create mode 100644 src/json/fa/69/surah.json create mode 100644 src/json/fa/7/info.json create mode 100644 src/json/fa/7/surah.json create mode 100644 src/json/fa/70/info.json create mode 100644 src/json/fa/70/surah.json create mode 100644 src/json/fa/71/info.json create mode 100644 src/json/fa/71/surah.json create mode 100644 src/json/fa/72/info.json create mode 100644 src/json/fa/72/surah.json create mode 100644 src/json/fa/73/info.json create mode 100644 src/json/fa/73/surah.json create mode 100644 src/json/fa/74/info.json create mode 100644 src/json/fa/74/surah.json create mode 100644 src/json/fa/75/info.json create mode 100644 src/json/fa/75/surah.json create mode 100644 src/json/fa/76/info.json create mode 100644 src/json/fa/76/surah.json create mode 100644 src/json/fa/77/info.json create mode 100644 src/json/fa/77/surah.json create mode 100644 src/json/fa/78/info.json create mode 100644 src/json/fa/78/surah.json create mode 100644 src/json/fa/79/info.json create mode 100644 src/json/fa/79/surah.json create mode 100644 src/json/fa/8/info.json create mode 100644 src/json/fa/8/surah.json create mode 100644 src/json/fa/80/info.json create mode 100644 src/json/fa/80/surah.json create mode 100644 src/json/fa/81/info.json create mode 100644 src/json/fa/81/surah.json create mode 100644 src/json/fa/82/info.json create mode 100644 src/json/fa/82/surah.json create mode 100644 src/json/fa/83/info.json create mode 100644 src/json/fa/83/surah.json create mode 100644 src/json/fa/84/info.json create mode 100644 src/json/fa/84/surah.json create mode 100644 src/json/fa/85/info.json create mode 100644 src/json/fa/85/surah.json create mode 100644 src/json/fa/86/info.json create mode 100644 src/json/fa/86/surah.json create mode 100644 src/json/fa/87/info.json create mode 100644 src/json/fa/87/surah.json create mode 100644 src/json/fa/88/info.json create mode 100644 src/json/fa/88/surah.json create mode 100644 src/json/fa/89/info.json create mode 100644 src/json/fa/89/surah.json create mode 100644 src/json/fa/9/info.json create mode 100644 src/json/fa/9/surah.json create mode 100644 src/json/fa/90/info.json create mode 100644 src/json/fa/90/surah.json create mode 100644 src/json/fa/91/info.json create mode 100644 src/json/fa/91/surah.json create mode 100644 src/json/fa/92/info.json create mode 100644 src/json/fa/92/surah.json create mode 100644 src/json/fa/93/info.json create mode 100644 src/json/fa/93/surah.json create mode 100644 src/json/fa/94/info.json create mode 100644 src/json/fa/94/surah.json create mode 100644 src/json/fa/95/info.json create mode 100644 src/json/fa/95/surah.json create mode 100644 src/json/fa/96/info.json create mode 100644 src/json/fa/96/surah.json create mode 100644 src/json/fa/97/info.json create mode 100644 src/json/fa/97/surah.json create mode 100644 src/json/fa/98/info.json create mode 100644 src/json/fa/98/surah.json create mode 100644 src/json/fa/99/info.json create mode 100644 src/json/fa/99/surah.json create mode 160000 submodules/quran-json create mode 160000 submodules/tail.css diff --git a/.gitmodules b/.gitmodules index c167cd7..d6747a9 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,3 +1,9 @@ [submodule "submodules/surah-name-glyphs"] path = submodules/surah-name-glyphs url = https://github.com/ReflectsLight/surah-name-glyphs +[submodule "submodules/quran-json"] + path = submodules/quran-json + url = https://github.com/ReflectsLight/quran-json +[submodule "submodules/tail.css"] + path = submodules/tail.css + url = https://github.com/0x1eef/tail.css diff --git a/.prettierrc b/.prettierrc index 4538f90..ab9c931 100644 --- a/.prettierrc +++ b/.prettierrc @@ -3,6 +3,6 @@ "tabWidth": 2, "semi": true, "singleQuote": false, - "printWidth": 80, + "printWidth": 90, "arrowParens": "avoid" } diff --git a/Rules b/Rules index 6dab0ae..1cb74f4 100644 --- a/Rules +++ b/Rules @@ -11,7 +11,7 @@ require "nanoc-tidy" ## # variables -locales = %w[ar en] +locales = %w[ar fa en] json_dir = File.join(Dir.getwd, "src", "json") name_by_id = Ryo.from_json_file("#{json_dir}/nameById.json") tdata = Ryo.from_json_file("#{json_dir}/t.json") diff --git a/documentation/add-new-language.txt b/documentation/add-new-language.txt new file mode 100644 index 0000000..ca721c4 --- /dev/null +++ b/documentation/add-new-language.txt @@ -0,0 +1,21 @@ +== Introduction + +This post documents the process +that should be followed when adding +a new language to the website. + +Ideally the process would require a +minimal amount of manual work and be +fast to complete but we're not there +yet. + +The process: + +* Add new locale to file 'Rules' + (/Rules) +* Add new locale to array 'Quran.locales' + (/packages/Quran/src/index.ts) +* Add new locale (+ translations) + (/src/json/t.json) + (/src/json/surahs.json) + (/src/json///{info,surah}.json) diff --git a/packages/typescript/Quran/src/index.ts b/packages/typescript/Quran/src/index.ts index 525d2f7..2254cd6 100644 --- a/packages/typescript/Quran/src/index.ts +++ b/packages/typescript/Quran/src/index.ts @@ -1,9 +1,14 @@ /** * Types */ -type TLocale = "ar" | "en"; type TAyat = Ayah[]; +type TLocale = { + readonly name: string, + readonly displayName: string, + readonly direction: "rtl" | "ltr" +}; + type TQuran = { readonly locale: TLocale; readonly surahs: Surah[]; @@ -32,7 +37,11 @@ class Quran { * @returns {Array} The available locales */ static get locales(): TLocale[] { - return ["ar", "en"]; + return [ + {"name": "en", "displayName": "English", "direction": "ltr"}, + {"name": "ar", "displayName": "العربية", "direction": "rtl"}, + {"name": "fa", "displayName": "فارسی", "direction": "rtl"} + ]; } constructor(self: TQuran) { diff --git a/src/css/_base.scss b/src/css/_base.scss index 050a72d..2639f7b 100644 --- a/src/css/_base.scss +++ b/src/css/_base.scss @@ -1,11 +1,16 @@ $black: #454545; $max-width: 768px; -html[lang="en"] { +html[lang="en"], .ltr { font-family: "Kanit Regular"; } -html[lang="ar"] { +html[lang="ar"], .rtl { + font-family: "Mada Regular"; +} + +html[lang="fa"] { + // FIXME: add font for farsi? font-family: "Mada Regular"; } @@ -28,38 +33,15 @@ body .root .content.theme { width: 85%; max-width: $max-width; - header { - .br { - width: 100%; - } - .react-select.theme { - .selected { - display: flex; - justify-content: flex-end; - } - } - .react-select.language { - ul { - position: relative; - top: 15px; - right: 0px; - } - } - } - - footer { - .br { - width: 100%; - } - } - .scroll-y { overflow-y: auto !important; } } -/* English-specific rules */ -body .root .content.en { +/** + * LTR languages + */ +body .root .content.ltr { h1 { font-size: x-large; } @@ -67,14 +49,6 @@ body .root .content.en { nav, div { font-size: large; } - .react-select.language { - ul { - li.ar span { - position: relative; - bottom: 3px; - } - } - } } ul.body { font-size: large; @@ -84,37 +58,31 @@ body .root .content.en { } } -/* Arabic-specific rules */ -body .root .content.theme.ar { +/** + * RTL languages + */ +body .root .content.theme.rtl { header { h1 { - font-size: xx-large; + font-size: x-large; } nav, div { direction: ltr; - .react-select.language { - ul { - position: relative; - top: 7.5px; + .react-select.language-select { + .active { + font-size: larger; } - li.en span { - position: relative; - right: 3px; - } - } - .selected { - font-size: x-large; } } } footer { - font-size: larger; + font-size: large; flex-direction: row-reverse; } } -.invisible { +.invisible, .hidden { display: none !important; } diff --git a/src/css/base/_select.scss b/src/css/base/_select.scss index a972671..7769bc1 100644 --- a/src/css/base/_select.scss +++ b/src/css/base/_select.scss @@ -1,113 +1,16 @@ .root .content.theme { .react-select { - display: flex; - flex-direction: column; - - height: 20px; - z-index: 3; - - .selected { + z-index: 2; + .active { cursor: pointer; } - - ul { - margin: 0; - padding: 0; - height: 0; - background: #fff; - list-style-type: none; - } - - ul li { - height: 100%; - width: 100%; - font-weight: normal; - cursor: pointer; - background: #fff; - } } - .react-select.language { - flex-direction: column; - justify-content: flex-start; - - ul { - height: 0; - li { - display: flex; - align-items: center; - justify-content: flex-start; - font-size: medium; - height: 30px; - min-width: 125px; - padding-left: 15px; - } - - li.en { - font-family: "Kanit Regular"; - font-weight: normal; - } - - li.ar { - display: flex; - align-items: center; - justify-content: flex-start; - font-size: large; - } - } - } - - .react-select.theme { - .selected { - .circle { - display: block; - width: 16px; - height: 16px; - border-radius: 16px; - } - } - - ul { - border: none; - height: 0; - width: 50px; - } - - ul li { - display: flex; - height: 20px; - align-items: flex-end; - justify-content: flex-end; - .circle { - display: block; - width: 16px; - height: 16px; - border-radius: 16px; - } - } - } -} - -.content.theme.en { - .react-select.language { - ul { - li.en { - display: none; - } - } - } -} - -.content.theme.ar { - .react-select.language { - .selected span { - position: relative; - bottom: 8px; - } - ul { - li.ar { - display: none; - } + .react-select.theme-select { + .circle { + width: 16px; + height: 16px; + border-radius: 12px; } } } diff --git a/src/css/main/SurahIndex.scss b/src/css/main/SurahIndex.scss index 9f24a69..ec25760 100644 --- a/src/css/main/SurahIndex.scss +++ b/src/css/main/SurahIndex.scss @@ -25,6 +25,7 @@ body .root .content.theme { input { border-radius: 5px; } + @media(max-width: $breakpoint-sm) { a { width: 100%; @@ -35,6 +36,7 @@ body .root .content.theme { } } } + @media(max-width: $breakpoint-sm) { .appver { display: none; @@ -42,14 +44,17 @@ body .root .content.theme { } } - -/* English-specific rules */ -body .root .content.theme.en { +/** + * LTR languages + */ +body .root .content.theme.ltr { } -/* Arabic-specific rules */ -body .root .content.theme.ar { +/** + * RTL languages + */ +body .root .content.theme.rtl { @import "base/breakpoints"; font-size: larger; diff --git a/src/css/main/SurahStream.scss b/src/css/main/SurahStream.scss index 38b5032..3030d17 100644 --- a/src/css/main/SurahStream.scss +++ b/src/css/main/SurahStream.scss @@ -32,7 +32,10 @@ body .root .content.theme { } } -/* English-specific rules */ + +/** + * LTR languages + */ body .root .content.theme.en { ul.body.stream { .sound-off.icon, .sound-on.icon { @@ -40,8 +43,10 @@ body .root .content.theme.en { } } -/* Arabic-specific rules */ -body .root .content.theme.ar { +/** + * RTL languages + */ +body .root .content.theme.rtl { font-size: larger; header { diff --git a/src/css/themes/blue.scss b/src/css/themes/blue.scss index ebfae7d..da3750a 100644 --- a/src/css/themes/blue.scss +++ b/src/css/themes/blue.scss @@ -1,4 +1,4 @@ -.root .content.theme.blue.ar { +.root .content.theme.blue.rtl { direction: rtl; } @@ -17,13 +17,16 @@ color: $accent-color; } - .react-select.theme { - .selected { - .circle { - background: $primary-color; - border-radius: 10px; - } - } + .background-primary { + background: $primary-color; + } + + .background-secondary { + background: $secondary-color; + } + + .background-accent { + background: $accent-color; } } diff --git a/src/css/themes/blue/_base.scss b/src/css/themes/blue/_base.scss index 4365918..b0cc6b0 100644 --- a/src/css/themes/blue/_base.scss +++ b/src/css/themes/blue/_base.scss @@ -7,15 +7,5 @@ header { h1 , h1 a { color: $primary-color; } - nav .react-select { - color: $secondary-color; - } - nav .react-select.language { - ul li { - background: $primary-color; - color: $white; - border: 3px solid $secondary-color; - } - } } } diff --git a/src/css/themes/blue/base/_select.scss b/src/css/themes/blue/base/_select.scss index 2f7e081..4068d14 100644 --- a/src/css/themes/blue/base/_select.scss +++ b/src/css/themes/blue/base/_select.scss @@ -1,34 +1,32 @@ .content.theme { @import "themes/blue/base/colors"; - - .react-select.theme { - .selected .circle { - background: $primary-color; - } - ul li.blue .circle { - background: $primary-color; - } + .blue { + background: $primary-color; } } .content.theme.blue { @import "themes/blue/base/colors"; - .react-select.language { - .selected { - color: $primary-color; + .react-select.theme-select { + .active .circle { + background: $primary-color; + } + ul li.blue .circle { + background: $primary-color; } } - .react-select.theme { - ul li.blue { - display: none; - } - } - - .react-select.language ul { - li { - color: $primary-color; + .react-select.language-select { + li a { + background: $secondary-color; + color: $white; + &:active, &:visited, &:link { + color: $white; + } + &:hover { + font-weight: bold; + } } } } diff --git a/src/css/themes/blue/main/_SurahIndex.scss b/src/css/themes/blue/main/_SurahIndex.scss index 5503cc4..773fe97 100644 --- a/src/css/themes/blue/main/_SurahIndex.scss +++ b/src/css/themes/blue/main/_SurahIndex.scss @@ -51,7 +51,7 @@ } } -.root .content.theme.blue.ar { +.root .content.theme.blue.rtl { @import "themes/blue/base/colors"; ul.body.index { li.surah a { diff --git a/src/css/themes/blue/main/_SurahStream.scss b/src/css/themes/blue/main/_SurahStream.scss index 5a58c84..6e19441 100644 --- a/src/css/themes/blue/main/_SurahStream.scss +++ b/src/css/themes/blue/main/_SurahStream.scss @@ -24,7 +24,7 @@ } } -.root .content.theme.blue.ar { +.root .content.theme.blue.rtl { @import "themes/blue/base/colors"; header { diff --git a/src/css/themes/green.scss b/src/css/themes/green.scss index 988257b..4694499 100644 --- a/src/css/themes/green.scss +++ b/src/css/themes/green.scss @@ -1,10 +1,7 @@ -.root .content.theme.green.ar { +.root .content.theme.green.rtl { @import "green/base/colors"; direction: rtl; - .react-select.language { - .selected { color: $primary-color; } - } } .root .content.theme.green { @@ -21,15 +18,6 @@ .color-accent { color: $accent-color; } - - .react-select.theme { - .selected { - .circle { - background: $primary-color; - border-radius: 10px; - } - } - } } @import "green/base"; diff --git a/src/css/themes/green/_base.scss b/src/css/themes/green/_base.scss index d55e1f8..cdb087c 100644 --- a/src/css/themes/green/_base.scss +++ b/src/css/themes/green/_base.scss @@ -7,17 +7,5 @@ header { h1 , h1 a { color: $primary-color; } - - nav .react-select { - background-color: transparent; - color: $primary-color; - } - nav .react-select.language { - ul li { - background-color: $primary-color; - color: $accent-color; - border: 3px solid $secondary-color; - } - } } } diff --git a/src/css/themes/green/base/_colors.scss b/src/css/themes/green/base/_colors.scss index f498a99..40f663e 100644 --- a/src/css/themes/green/base/_colors.scss +++ b/src/css/themes/green/base/_colors.scss @@ -1,3 +1,4 @@ $primary-color: lighten(#606850, 20%); $secondary-color: darken($primary-color, 10%); $accent-color: #FFF; +$white: $accent-color; diff --git a/src/css/themes/green/base/_select.scss b/src/css/themes/green/base/_select.scss index a42a020..73266fb 100644 --- a/src/css/themes/green/base/_select.scss +++ b/src/css/themes/green/base/_select.scss @@ -1,17 +1,32 @@ .content.theme { @import "themes/green/base/colors"; - .react-select.theme { - .selected.green .circle { - background: $primary-color; - } - ul li.green .circle { - background: $primary-color; - } + .green { + background: $primary-color; } } .content.theme.green { - .react-select.theme { - ul li.green { display: none; } + @import "themes/green/base/colors"; + + .react-select.theme-select { + .active { + .circle { + background: $primary-color; + border-radius: 10px; + } + } + } + + .react-select.language-select { + li a { + background: $primary-color; + color: $white; + &:active, &:visited, &:link { + color: $white; + } + &:hover { + font-weight: bold; + } + } } } diff --git a/src/css/themes/green/main/_SurahStream.scss b/src/css/themes/green/main/_SurahStream.scss index d9d7d2f..5502991 100644 --- a/src/css/themes/green/main/_SurahStream.scss +++ b/src/css/themes/green/main/_SurahStream.scss @@ -28,6 +28,6 @@ } } -.root .content.theme.green.ar { +.root .content.theme.green.rtl { @import "themes/green/base/colors"; } diff --git a/src/css/vendor/tail.scss b/src/css/vendor/tail.scss index 4c0abca..e61edc7 100644 --- a/src/css/vendor/tail.scss +++ b/src/css/vendor/tail.scss @@ -4116,6 +4116,14 @@ template { flex-basis: 100%; } +.grow { + flex-grow: 1; +} + +.grow-0 { + flex-grow: 0; +} + .content-normal { align-content: normal; } @@ -4316,14 +4324,6 @@ template { order: 0; } -.grow { - flex-grow: 1; -} - -.grow-0 { - flex-grow: 0; -} - .font-sans { font-family: ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; } @@ -4598,31 +4598,31 @@ template { } .shadow-sm { - box-shadow: 0 1px 2px 0 rgb(0, 0, 0); + box-shadow: 0 1px 2px 0 rgba(0, 0, 0, 0.05); } .shadow { - box-shadow: 0 1px 3px 0 rgb(0, 0, 0), 0 1px 2px -1px rgb(0, 0, 0); + box-shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.1), 0 1px 2px -1px rgba(0, 0, 0, 0.1); } .shadow-md { - box-shadow: 0 4px 6px -1px rgb(0, 0, 0), 0 2px 4px -2px rgb(0, 0, 0); + box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -2px rgba(0, 0, 0, 0.1); } .shadow-lg { - box-shadow: 0 10px 15px -3px rgb(0, 0, 0), 0 4px 6px -4px rgb(0, 0, 0); + box-shadow: 0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -4px rgba(0, 0, 0, 0.1); } .shadow-xl { - box-shadow: 0 20px 25px -5px rgb(0, 0, 0), 0 8px 10px -6px rgb(0, 0, 0); + box-shadow: 0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 8px 10px -6px rgba(0, 0, 0, 0.1); } .shadow-2xl { - box-shadow: 0 25px 50px -12px rgb(0, 0, 0); + box-shadow: 0 25px 50px -12px rgba(0, 0, 0, 0.25); } .shadow-inner { - box-shadow: inset 0 2px 4px 0 rgb(0, 0, 0); + box-shadow: inset 0 2px 4px 0 rgba(0, 0, 0, 0.05); } .shadow-none { @@ -5235,4 +5235,69 @@ template { border-bottom-left-radius: 9999px; } -/*# sourceMappingURL=data:application/json;charset=utf-8,%7B%22version%22:3,%22sourceRoot%22:%22%22,%22sources%22:%5B%22../src/normalize/index.scss%22,%22../src/tail/sizing/height/_height.scss%22,%22../src/tail/sizing/height/_max_height.scss%22,%22../src/tail/sizing/width/index.scss%22,%22../src/tail/margin/index.scss%22,%22../src/tail/padding/index.scss%22,%22../src/tail/cursor/index.scss%22,%22../src/tail/display/index.scss%22,%22../src/tail/flex/_direction.scss%22,%22../src/tail/flex/_wrap.scss%22,%22../src/tail/flex/_basis.scss%22,%22../src/tail/flex/_align_content.scss%22,%22../src/tail/flex/_align_items.scss%22,%22../src/tail/flex/_justify_content.scss%22,%22../src/tail/flex/_place_content.scss%22,%22../src/tail/flex/_order.scss%22,%22../src/tail/flex/_grow.scss%22,%22../src/tail/font/_family.scss%22,%22../src/tail/font/_size.scss%22,%22../src/tail/font/_style.scss%22,%22../src/tail/font/_weight.scss%22,%22../src/tail/font/_variant_numeric.scss%22,%22../src/tail/text/_transform.scss%22,%22../src/tail/text/_decoration.scss%22,%22../src/tail/text/_align.scss%22,%22../src/tail/layout/_overflow.scss%22,%22../src/tail/effects/_box_shadow.scss%22,%22../src/tail/list/_list_style_type.scss%22,%22../src/tail/border/_radius.scss%22%5D,%22names%22:%5B%5D,%22mappings%22:%22AAAA;AAEA;AAAA;AAGA;AAAA;AAAA;AAAA;AAKA;EACE;EACA;;;AAGF;AAAA;AAGA;AAAA;AAAA;AAIA;EACE;;;AAGF;AAAA;AAAA;AAIA;EACE;;;AAGF;AAAA;AAAA;AAAA;AAKA;EACE;EACA;;;AAGF;AAAA;AAGA;AAAA;AAAA;AAAA;AAKA;EACE;EACA;EACA;;;AAGF;AAAA;AAAA;AAAA;AAKA;EACE;EACA;;;AAGF;AAAA;AAGA;AAAA;AAAA;AAIA;EACE;;;AAGF;AAAA;AAAA;AAAA;AAKA;EACE;EACA;EACA;;;AAGF;AAAA;AAAA;AAIA;AAAA;EAEE;;;AAGF;AAAA;AAAA;AAAA;AAKA;AAAA;AAAA;EAGE;EACA;;;AAGF;AAAA;AAAA;AAIA;EACE;;;AAGF;AAAA;AAAA;AAAA;AAKA;AAAA;EAEE;EACA;EACA;EACA;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;AAAA;AAGA;AAAA;AAAA;AAIA;EACE;;;AAGF;AAAA;AAGA;AAAA;AAAA;AAAA;AAKA;AAAA;AAAA;AAAA;AAAA;EAKE;EACA;EACA;EACA;;;AAGF;AAAA;AAAA;AAAA;AAKA;AAAA,QACQ;EACN;;;AAGF;AAAA;AAAA;AAAA;AAKA;AAAA,SACS;EACP;;;AAGF;AAAA;AAAA;AAIA;AAAA;AAAA;AAAA;EAIE;;;AAGF;AAAA;AAAA;AAIA;AAAA;AAAA;AAAA;EAIE;EACA;;;AAGF;AAAA;AAAA;AAIA;AAAA;AAAA;AAAA;EAIE;;;AAGF;AAAA;AAAA;AAIA;EACE;;;AAGF;AAAA;AAAA;AAAA;AAAA;AAAA;AAOA;EACE;EACA;EACA;EACA;EACA;EACA;;;AAGF;AAAA;AAAA;AAIA;EACE;;;AAGF;AAAA;AAAA;AAIA;EACE;;;AAGF;AAAA;AAAA;AAAA;AAKA;AAAA;EAEE;EACA;;;AAGF;AAAA;AAAA;AAIA;AAAA;EAEE;;;AAGF;AAAA;AAAA;AAAA;AAKA;EACE;EACA;;;AAGF;AAAA;AAAA;AAIA;EACE;;;AAGF;AAAA;AAAA;AAAA;AAKA;EACE;EACA;;;AAGF;AAAA;AAGA;AAAA;AAAA;AAIA;EACE;;;AAGF;AAAA;AAAA;AAIA;EACE;;;AAGF;AAAA;AAGA;AAAA;AAAA;AAIA;EACE;;;AAGF;AAAA;AAAA;AAIA;EACE;;;AC3VF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AC/KF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE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;;;AACR;EAAQ;;;AACR;EAAO;;;AACP;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAO;;;AACP;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAO;;;AACP;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAO;;;AACP;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAO;;;AACP;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAO;;;AACP;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAO;;;AACP;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAQ;;;AACR;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAQ;;;AACR;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAQ;;;AACR;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAQ;;;AACR;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAQ;;;AACR;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAQ;;;AACR;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAQ;;;AACR;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAQ;;;AACR;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAQ;;;AACR;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAQ;;;AACR;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAQ;;;AACR;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAQ;;;AACR;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAQ;;;AACR;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAQ;;;AACR;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAQ;;;AACR;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAQ;;;AACR;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAQ;;;AACR;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAQ;;;AACR;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAQ;;;AACR;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAU;;;AACV;EAAW;;;AACX;EAAW;;;AACX;EAAW;;;AACX;EAAW;;;AACX;EAAW;;;AACX;EAAW;;;AACX;EAAW;;;AACX;EAAW;;;AC/RX;EAAO;;;AACP;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAO;;;AACP;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAO;;;AACP;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAO;;;AACP;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAO;;;AACP;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAO;;;AACP;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAO;;;AACP;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAO;;;AACP;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAO;;;AACP;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAO;;;AACP;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAQ;;;AACR;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAQ;;;AACR;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAQ;;;AACR;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAQ;;;AACR;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAQ;;;AACR;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAQ;;;AACR;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAQ;;;AACR;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAQ;;;AACR;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAQ;;;AACR;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAQ;;;AACR;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAQ;;;AACR;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAQ;;;AACR;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAQ;;;AACR;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAQ;;;AACR;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAQ;;;AACR;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAQ;;;AACR;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAQ;;;AACR;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAQ;;;AACR;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAQ;;;AACR;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;ACtRT;EAAe;;;AACf;EAAkB;;;AAClB;EAAkB;;;AAClB;EAAe;;;AACf;EAAe;;;AACf;EAAe;;;AACf;EAAe;;;AACf;EAAsB;;;AACtB;EAAe;;;AACf;EAAuB;;;AACvB;EAAmB;;;AACnB;EAAe;;;AACf;EAAoB;;;AACpB;EAAwB;;;AACxB;EAAgB;;;AAChB;EAAe;;;AACf;EAAkB;;;AAClB;EAAe;;;AACf;EAAmB;;;AACnB;EAAqB;;;AACrB;EAAqB;;;AACrB;EAAqB;;;AACrB;EAAmB;;;AACnB;EAAmB;;;AACnB;EAAmB;;;AACnB;EAAmB;;;AACnB;EAAoB;;;AACpB;EAAoB;;;AACpB;EAAoB;;;AACpB;EAAoB;;;AACpB;EAAoB;;;AACpB;EAAoB;;;AACpB;EAAsB;;;AACtB;EAAsB;;;AACtB;EAAkB;;;AClClB;EAAS;;;AACT;EAAgB;;;AAChB;EAAU;;;AACV;EAAQ;;;AACR;EAAe;;;AACf;EAAS;;;AACT;EAAgB;;;AAChB;EAAiB;;;AACjB;EAAc;;;AACd;EAAgB;;;AAChB;EAAsB;;;AACtB;EAAsB;;;AACtB;EAAsB;;;AACtB;EAAmB;;;AACnB;EAAa;;;AACb;EAAa;;;AACb;EAAQ;;;AACR;EAAe;;;AACf;EAAY;;;AACZ;EAAa;;;AACb;EAAU;;;ACpBV;AACA;AAAA;AAEA;EAAY;;;AACZ;EAAoB;;;AACpB;EAAY;;;AACZ;EAAoB;;;ACNpB;AAAA;AAAA;AAGA;EAAa;;;AACb;EAAqB;;;AACrB;EAAe;;;ACLf;AACA;AAAA;AAEA;EAAW;;;AACX;EAAW;;;AACX;EAAW;;;AACX;EAAW;;;AACX;EAAW;;;AACX;EAAW;;;AACX;EAAW;;;AACX;EAAW;;;AACX;EAAW;;;AACX;EAAW;;;AACX;EAAY;;;AACZ;EAAY;;;AACZ;EAAY;;;AACZ;EAAY;;;AACZ;EAAY;;;AACZ;EAAY;;;AACZ;EAAY;;;AACZ;EAAY;;;AACZ;EAAY;;;AACZ;EAAY;;;AACZ;EAAY;;;AACZ;EAAY;;;AACZ;EAAY;;;AACZ;EAAY;;;AACZ;EAAY;;;AACZ;EAAY;;;AACZ;EAAY;;;AACZ;EAAY;;;AACZ;EAAY;;;AACZ;EAAY;;;AACZ;EAAc;;;AACd;EAAY;;;AACZ;EAAc;;;AACd;EAAc;;;AACd;EAAc;;;AACd;EAAc;;;AACd;EAAc;;;AACd;EAAc;;;AACd;EAAc;;;AACd;EAAc;;;AACd;EAAc;;;AACd;EAAc;;;AACd;EAAc;;;AACd;EAAc;;;AACd;EAAc;;;AACd;EAAc;;;AACd;EAAc;;;AACd;EAAc;;;AACd;EAAc;;;AACd;EAAc;;;AACd;EAAc;;;AACd;EAAe;;;AACf;EAAe;;;AACf;EAAe;;;AACf;EAAe;;;AACf;EAAe;;;AACf;EAAe;;;AACf;EAAe;;;AACf;EAAe;;;AACf;EAAe;;;AACf;EAAgB;;;AAChB;EAAgB;;;AAChB;EAAc;;;ACjEd;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;ACzBF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AC5BF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;ACtBF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;ACtBF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AC3CF;EACE;;;AAEF;EACE;;;ACJF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;ACPF;EACE;EACA;;;AAEF;EACE;EACA;;;AAEF;EACE;EACA;;;AAEF;EACE;EACA;;;AAEF;EACE;EACA;;;AAEF;EACE;EACA;;;AAEF;EACE;EACA;;;AAEF;EACE;EACA;;;AAEF;EACE;EACA;;;AAEF;EACE;EACA;;;AAEF;EACE;EACA;;;AAEF;EACE;EACA;;;AAEF;EACE;EACA;;;AClDF;EACE;;;AAEF;EACE;;;ACJF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;ACzBF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;ACzBF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;ACVF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;ACVF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AChBF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;ACzCF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;ACxBF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;ACPF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;EACA;;;AAEF;EACE;EACA;;;AAEF;EACE;EACA;;;AAEF;EACE;EACA;;;AAEF;EACE;EACA;;;AAEF;EACE;EACA;;;AAEF;EACE;EACA;;;AAEF;EACE;EACA;;;AAEF;EACE;EACA;;;AAEF;EACE;EACA;;;AAEF;EACE;EACA;;;AAEF;EACE;EACA;;;AAEF;EACE;EACA;;;AAEF;EACE;EACA;;;AAEF;EACE;EACA;;;AAEF;EACE;EACA;;;AAEF;EACE;EACA;;;AAEF;EACE;EACA;;;AAEF;EACE;EACA;;;AAEF;EACE;EACA;;;AAEF;EACE;EACA;;;AAEF;EACE;EACA;;;AAEF;EACE;EACA;;;AAEF;EACE;EACA;;;AAEF;EACE;EACA;;;AAEF;EACE;EACA;;;AAEF;EACE;EACA;;;AAEF;EACE;EACA;;;AAEF;EACE;EACA;;;AAEF;EACE;EACA;;;AAEF;EACE;EACA;;;AAEF;EACE;EACA;;;AAEF;EACE;EACA;;;AAEF;EACE;EACA;;;AAEF;EACE;EACA;;;AAEF;EACE;EACA;;;AAEF;EACE;EACA;;;AAEF;EACE;EACA;;;AAEF;EACE;EACA;;;AAEF;EACE;EACA;;;AAEF;EACE;EACA;;;AAEF;EACE;EACA;;;AAEF;EACE;EACA;;;AAEF;EACE;EACA;;;AAEF;EACE;EACA;;;AAEF;EACE;EACA;;;AAEF;EACE;EACA;;;AAEF;EACE;EACA;;;AAEF;EACE;EACA;;;AAEF;EACE;EACA;;;AAEF;EACE;EACA;;;AAEF;EACE;EACA;;;AAEF;EACE;EACA;;;AAEF;EACE;EACA;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE%22,%22file%22:%22tail.css%22%7D */ +.outline-none { + outline: 2px solid transparent; + outline-offset: 2px; +} + +.outline { + outline-style: solid; +} + +.outline-dashed { + outline-style: dashed; +} + +.outline-dotted { + outline-style: dotted; +} + +.outline-double { + outline-style: double; +} + +.whitespace-normal { + white-space: normal; +} + +.whitespace-nowrap { + white-space: nowrap; +} + +.whitespace-pre { + white-space: pre; +} + +.whitespace-pre-line { + white-space: pre-line; +} + +.whitespace-pre-wrap { + white-space: pre-wrap; +} + +.whitespace-break-spaces { + white-space: break-spaces; +} + +.static { + position: static; +} + +.fixed { + position: fixed; +} + +.absolute { + position: absolute; +} + +.relative { + position: relative; +} + +.sticky { + position: sticky; +} + +/*# sourceMappingURL=data:application/json;charset=utf-8,%7B%22version%22:3,%22sourceRoot%22:%22%22,%22sources%22:%5B%22../src/normalize/index.scss%22,%22../src/tail/sizing/height/_height.scss%22,%22../src/tail/sizing/height/_max_height.scss%22,%22../src/tail/sizing/width/index.scss%22,%22../src/tail/margin/index.scss%22,%22../src/tail/padding/index.scss%22,%22../src/tail/cursor/index.scss%22,%22../src/tail/display/index.scss%22,%22../src/tail/flex/_flex_direction.scss%22,%22../src/tail/flex/_flex_wrap.scss%22,%22../src/tail/flex/_flex_basis.scss%22,%22../src/tail/flex/_flex_grow.scss%22,%22../src/tail/flex/_align_content.scss%22,%22../src/tail/flex/_align_items.scss%22,%22../src/tail/flex/_justify_content.scss%22,%22../src/tail/flex/_place_content.scss%22,%22../src/tail/flex/_order.scss%22,%22../src/tail/font/_font_family.scss%22,%22../src/tail/font/_font_size.scss%22,%22../src/tail/font/_font_style.scss%22,%22../src/tail/font/_font_weight.scss%22,%22../src/tail/font/_font_variant_numeric.scss%22,%22../src/tail/text/_transform.scss%22,%22../src/tail/text/_decoration.scss%22,%22../src/tail/text/_align.scss%22,%22../src/tail/layout/_overflow.scss%22,%22../src/tail/effects/_box_shadow.scss%22,%22../src/tail/list/_list_style_type.scss%22,%22../src/tail/border/_border_radius.scss%22,%22../src/tail/outline/index.scss%22,%22../src/tail/whitespace/index.scss%22,%22../src/tail/position/index.scss%22%5D,%22names%22:%5B%5D,%22mappings%22:%22AAAA;AAEA;AAAA;AAGA;AAAA;AAAA;AAAA;AAKA;EACE;EACA;;;AAGF;AAAA;AAGA;AAAA;AAAA;AAIA;EACE;;;AAGF;AAAA;AAAA;AAIA;EACE;;;AAGF;AAAA;AAAA;AAAA;AAKA;EACE;EACA;;;AAGF;AAAA;AAGA;AAAA;AAAA;AAAA;AAKA;EACE;EACA;EACA;;;AAGF;AAAA;AAAA;AAAA;AAKA;EACE;EACA;;;AAGF;AAAA;AAGA;AAAA;AAAA;AAIA;EACE;;;AAGF;AAAA;AAAA;AAAA;AAKA;EACE;EACA;EACA;;;AAGF;AAAA;AAAA;AAIA;AAAA;EAEE;;;AAGF;AAAA;AAAA;AAAA;AAKA;AAAA;AAAA;EAGE;EACA;;;AAGF;AAAA;AAAA;AAIA;EACE;;;AAGF;AAAA;AAAA;AAAA;AAKA;AAAA;EAEE;EACA;EACA;EACA;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;AAAA;AAGA;AAAA;AAAA;AAIA;EACE;;;AAGF;AAAA;AAGA;AAAA;AAAA;AAAA;AAKA;AAAA;AAAA;AAAA;AAAA;EAKE;EACA;EACA;EACA;;;AAGF;AAAA;AAAA;AAAA;AAKA;AAAA,QACQ;EACN;;;AAGF;AAAA;AAAA;AAAA;AAKA;AAAA,SACS;EACP;;;AAGF;AAAA;AAAA;AAIA;AAAA;AAAA;AAAA;EAIE;;;AAGF;AAAA;AAAA;AAIA;AAAA;AAAA;AAAA;EAIE;EACA;;;AAGF;AAAA;AAAA;AAIA;AAAA;AAAA;AAAA;EAIE;;;AAGF;AAAA;AAAA;AAIA;EACE;;;AAGF;AAAA;AAAA;AAAA;AAAA;AAAA;AAOA;EACE;EACA;EACA;EACA;EACA;EACA;;;AAGF;AAAA;AAAA;AAIA;EACE;;;AAGF;AAAA;AAAA;AAIA;EACE;;;AAGF;AAAA;AAAA;AAAA;AAKA;AAAA;EAEE;EACA;;;AAGF;AAAA;AAAA;AAIA;AAAA;EAEE;;;AAGF;AAAA;AAAA;AAAA;AAKA;EACE;EACA;;;AAGF;AAAA;AAAA;AAIA;EACE;;;AAGF;AAAA;AAAA;AAAA;AAKA;EACE;EACA;;;AAGF;AAAA;AAGA;AAAA;AAAA;AAIA;EACE;;;AAGF;AAAA;AAAA;AAIA;EACE;;;AAGF;AAAA;AAGA;AAAA;AAAA;AAIA;EACE;;;AAGF;AAAA;AAAA;AAIA;EACE;;;AC3VF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AC/KF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE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;;;AACR;EAAQ;;;AACR;EAAO;;;AACP;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAO;;;AACP;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAO;;;AACP;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAO;;;AACP;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAO;;;AACP;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAO;;;AACP;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAO;;;AACP;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAQ;;;AACR;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAQ;;;AACR;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAQ;;;AACR;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAQ;;;AACR;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAQ;;;AACR;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAQ;;;AACR;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAQ;;;AACR;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAQ;;;AACR;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAQ;;;AACR;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAQ;;;AACR;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAQ;;;AACR;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAQ;;;AACR;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAQ;;;AACR;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAQ;;;AACR;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAQ;;;AACR;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAQ;;;AACR;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAQ;;;AACR;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAQ;;;AACR;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAQ;;;AACR;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAU;;;AACV;EAAW;;;AACX;EAAW;;;AACX;EAAW;;;AACX;EAAW;;;AACX;EAAW;;;AACX;EAAW;;;AACX;EAAW;;;AACX;EAAW;;;AC/RX;EAAO;;;AACP;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAO;;;AACP;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAO;;;AACP;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAO;;;AACP;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAO;;;AACP;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAO;;;AACP;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAO;;;AACP;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAO;;;AACP;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAO;;;AACP;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAO;;;AACP;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAQ;;;AACR;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAQ;;;AACR;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAQ;;;AACR;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAQ;;;AACR;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAQ;;;AACR;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAQ;;;AACR;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAQ;;;AACR;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAQ;;;AACR;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAQ;;;AACR;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAQ;;;AACR;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAQ;;;AACR;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAQ;;;AACR;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAQ;;;AACR;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAQ;;;AACR;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAQ;;;AACR;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAQ;;;AACR;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAS;;;AACT;EAAQ;;;AACR;EAAS;;;AACT;EAAS;;;AACT;EAA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;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;ACtBF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AC3CF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;ACPF;EACE;EACA;;;AAEF;EACE;EACA;;;AAEF;EACE;EACA;;;AAEF;EACE;EACA;;;AAEF;EACE;EACA;;;AAEF;EACE;EACA;;;AAEF;EACE;EACA;;;AAEF;EACE;EACA;;;AAEF;EACE;EACA;;;AAEF;EACE;EACA;;;AAEF;EACE;EACA;;;AAEF;EACE;EACA;;;AAEF;EACE;EACA;;;AClDF;EACE;;;AAEF;EACE;;;ACJF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;ACzBF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;ACzBF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;ACVF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;ACVF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AChBF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AC3CF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AC7BF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;ACPF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;EACA;;;AAEF;EACE;EACA;;;AAEF;EACE;EACA;;;AAEF;EACE;EACA;;;AAEF;EACE;EACA;;;AAEF;EACE;EACA;;;AAEF;EACE;EACA;;;AAEF;EACE;EACA;;;AAEF;EACE;EACA;;;AAEF;EACE;EACA;;;AAEF;EACE;EACA;;;AAEF;EACE;EACA;;;AAEF;EACE;EACA;;;AAEF;EACE;EACA;;;AAEF;EACE;EACA;;;AAEF;EACE;EACA;;;AAEF;EACE;EACA;;;AAEF;EACE;EACA;;;AAEF;EACE;EACA;;;AAEF;EACE;EACA;;;AAEF;EACE;EACA;;;AAEF;EACE;EACA;;;AAEF;EACE;EACA;;;AAEF;EACE;EACA;;;AAEF;EACE;EACA;;;AAEF;EACE;EACA;;;AAEF;EACE;EACA;;;AAEF;EACE;EACA;;;AAEF;EACE;EACA;;;AAEF;EACE;EACA;;;AAEF;EACE;EACA;;;AAEF;EACE;EACA;;;AAEF;EACE;EACA;;;AAEF;EACE;EACA;;;AAEF;EACE;EACA;;;AAEF;EACE;EACA;;;AAEF;EACE;EACA;;;AAEF;EACE;EACA;;;AAEF;EACE;EACA;;;AAEF;EACE;EACA;;;AAEF;EACE;EACA;;;AAEF;EACE;EACA;;;AAEF;EACE;EACA;;;AAEF;EACE;EACA;;;AAEF;EACE;EACA;;;AAEF;EACE;EACA;;;AAEF;EACE;EACA;;;AAEF;EACE;EACA;;;AAEF;EACE;EACA;;;AAEF;EACE;EACA;;;AAEF;EACE;EACA;;;AAEF;EACE;EACA;;;AAEF;EACE;EACA;;;AAEF;EACE;EACA;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;ACzcF;EACE;EACA;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;ACdF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AChBF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE%22,%22file%22:%22tail.css%22%7D */ diff --git a/src/js/components/AudioControl.tsx b/src/js/components/AudioControl.tsx index 495b507..480ce94 100644 --- a/src/js/components/AudioControl.tsx +++ b/src/js/components/AudioControl.tsx @@ -70,10 +70,7 @@ export function AudioControl({ useEffect(() => { if (audioStatus) { - onStatusChange(audioStatus, [ - () => setEnabled(true), - () => setEnabled(false), - ]); + onStatusChange(audioStatus, [() => setEnabled(true), () => setEnabled(false)]); } }, [audioStatus]); @@ -83,12 +80,8 @@ export function AudioControl({ return ( <> - {enabled && ( - [setEnabled(false), pause(audio)]} /> - )} - {!enabled && ( - [setEnabled(true), play(audio)]} /> - )} + {enabled && [setEnabled(false), pause(audio)]} />} + {!enabled && [setEnabled(true), play(audio)]} />} ); } diff --git a/src/js/components/Head.tsx b/src/js/components/Head.tsx index 2a5de65..dfecde1 100644 --- a/src/js/components/Head.tsx +++ b/src/js/components/Head.tsx @@ -14,9 +14,9 @@ type Props = { export function Head({ locale, theme, setTheme, children }: Props) { return ( -
+

- + {children}

diff --git a/src/js/components/LanguageSelect.tsx b/src/js/components/LanguageSelect.tsx index 66f4e5a..d91508c 100644 --- a/src/js/components/LanguageSelect.tsx +++ b/src/js/components/LanguageSelect.tsx @@ -1,32 +1,29 @@ import React from "react"; +import { Quran, TLocale } from "Quran"; import { Select } from "~/components/Select"; +import classNames from "classnames"; type Props = { - locale: string; + locale: TLocale; }; export function LanguageSelect({ locale }: Props) { return ( - + {Quran.locales.map((l: TLocale, i: number) => { + const path = location.pathname; + const href = path.replace(`/${locale.name}/`, `/${l.name}/`); + return ( + + {l.displayName} + ); - content?.classList?.add("invisible"); - location.replace(path); - }} - > - - + })} ); } diff --git a/src/js/components/Select.tsx b/src/js/components/Select.tsx deleted file mode 100644 index 2c3dbd2..0000000 --- a/src/js/components/Select.tsx +++ /dev/null @@ -1,78 +0,0 @@ -import React, { useState, useEffect } from "react"; -import classNames from "classnames"; - -type Maybe = T | null | undefined; - -type Props = { - value: string; - children: JSX.Element[]; - onChange: (e: JSX.Element) => void; - className?: string; -}; - -export function Select({ - value: option, - children: within, - onChange, - className, -}: Props) { - const [open, setOpen] = useState(false); - const [selected, setSelected] = useState>( - query(option, { within }), - ); - const close = () => setOpen(false); - - useEffect(() => { - document.body.addEventListener("click", close); - return () => document.body.removeEventListener("click", close); - }, []); - - return ( -
- [e.stopPropagation(), setOpen(true)]} - > - {selected?.props?.children} - -
- -
- ); -} - -function query( - option: Maybe, - options: { within: JSX.Element[] }, -): Maybe { - if (!option) { - return null; - } - const { within } = options; - return within.find(({ props: { value } }) => option === value); -} diff --git a/src/js/components/Select/Option.tsx b/src/js/components/Select/Option.tsx new file mode 100644 index 0000000..f7fba6e --- /dev/null +++ b/src/js/components/Select/Option.tsx @@ -0,0 +1,11 @@ +import React, { ReactNode, AnchorHTMLAttributes } from "react"; + +type Rest = AnchorHTMLAttributes; +type Props = { + value: string; + children: ReactNode; +} & Rest; + +export function Option({ children, ...rest }: Props) { + return {children}; +} diff --git a/src/js/components/Select/index.tsx b/src/js/components/Select/index.tsx new file mode 100644 index 0000000..513db95 --- /dev/null +++ b/src/js/components/Select/index.tsx @@ -0,0 +1,48 @@ +import React, { useState, useEffect } from "react"; +import classNames from "classnames"; +import { Option } from "./Option"; + +type Props = { + value: string; + children: JSX.Element[]; + className?: string; +}; + +function Select({ value, children: options, className }: Props) { + const [isOpen, setOpen] = useState(false); + const [option, setOption] = useState(null); + const sortedOptions = options.sort(n => (value === n.props.value ? -1 : 1)); + const close = () => setOpen(false); + + useEffect(() => { + document.body.addEventListener("click", close); + return () => document.body.removeEventListener("click", close); + }, []); + + useEffect(() => { + setOption(options.find(n => value === n.props.value) || null); + }, [value]); + + return ( +
+
    + {sortedOptions.map((n: JSX.Element, key: number) => { + const isHidden = !isOpen && option?.props.value !== n.props.value; + return ( +
  • [e.stopPropagation(), setOpen(true)]} + > + {n} +
  • + ); + })} +
+
+ ); +} + +Select.Option = Option; + +export { Select }; diff --git a/src/js/components/SurahIndex/index.tsx b/src/js/components/SurahIndex/index.tsx index 614fa92..1f27ddc 100644 --- a/src/js/components/SurahIndex/index.tsx +++ b/src/js/components/SurahIndex/index.tsx @@ -18,7 +18,6 @@ export function SurahIndex({ appVersion, locale, surahs, t }: Props) { const [theme, setTheme] = useTheme(); const [index, setIndex] = useState(surahs); const ref = useRef(null); - const ltr = locale === "en"; useEffect(() => { const div = ref.current; @@ -33,7 +32,8 @@ export function SurahIndex({ appVersion, locale, surahs, t }: Props) { className={classNames( "flex flex-col invisible h-full content surah-index theme", theme, - locale, + locale.name, + locale.direction, )} > @@ -43,25 +43,24 @@ export function SurahIndex({ appVersion, locale, surahs, t }: Props) { {index.map((surah, key) => (
  • {formatNumber(locale, surah.id)} {surah.name} - {ltr && ( + {locale.direction === "ltr" && (
    {surah.roman.name} - {formatNumber(locale, surah.numberOfAyah)}{" "} - {t(locale, "ayat")} + {formatNumber(locale, surah.numberOfAyah)} {t(locale, "ayat")}
    @@ -73,10 +72,15 @@ export function SurahIndex({ appVersion, locale, surahs, t }: Props) {