From 9af3e6c982f3e9229555658b16d434a54a5f87fc Mon Sep 17 00:00:00 2001 From: Alex Grover Date: Sat, 26 Oct 2024 09:38:28 -0700 Subject: [PATCH 01/13] chore(create): remove unused tamagui css file --- examples/one-basic/public/tamagui.css | 846 -------------------------- 1 file changed, 846 deletions(-) delete mode 100644 examples/one-basic/public/tamagui.css diff --git a/examples/one-basic/public/tamagui.css b/examples/one-basic/public/tamagui.css deleted file mode 100644 index cbaa8b7aa..000000000 --- a/examples/one-basic/public/tamagui.css +++ /dev/null @@ -1,846 +0,0 @@ -._ovs-contain {overscroll-behavior:contain;} -.is_Text .is_Text {display:inline-flex;} -._dsp_contents {display:contents;} -:root {--white0:rgba(255,255,255,0);--white075:rgba(255,255,255,0.75);--white05:rgba(255,255,255,0.5);--white025:rgba(255,255,255,0.25);--black0:rgba(10,10,10,0);--black075:rgba(10,10,10,0.75);--black05:rgba(10,10,10,0.5);--black025:rgba(10,10,10,0.25);--white1:#fff;--white2:#f8f8f8;--white3:hsl(0, 0%, 96.3%);--white4:hsl(0, 0%, 94.1%);--white5:hsl(0, 0%, 92.0%);--white6:hsl(0, 0%, 90.0%);--white7:hsl(0, 0%, 88.5%);--white8:hsl(0, 0%, 81.0%);--white9:hsl(0, 0%, 56.1%);--white10:hsl(0, 0%, 50.3%);--white11:hsl(0, 0%, 42.5%);--white12:hsl(0, 0%, 9.0%);--black1:#050505;--black2:#151515;--black3:#191919;--black4:#232323;--black5:#282828;--black6:#323232;--black7:#424242;--black8:#494949;--black9:#545454;--black10:#626262;--black11:#a5a5a5;--black12:#fff;--blue1Light:hsl(206, 100%, 99.2%);--blue2Light:hsl(210, 100%, 98.0%);--blue3Light:hsl(209, 100%, 96.5%);--blue4Light:hsl(210, 98.8%, 94.0%);--blue5Light:hsl(209, 95.0%, 90.1%);--blue6Light:hsl(209, 81.2%, 84.5%);--blue7Light:hsl(208, 77.5%, 76.9%);--blue8Light:hsl(206, 81.9%, 65.3%);--blue9Light:hsl(206, 100%, 50.0%);--blue10Light:hsl(208, 100%, 47.3%);--blue11Light:hsl(211, 100%, 43.2%);--blue12Light:hsl(211, 100%, 15.0%);--gray1Light:hsl(0, 0%, 99.0%);--gray2Light:hsl(0, 0%, 97.3%);--gray3Light:hsl(0, 0%, 95.1%);--gray4Light:hsl(0, 0%, 93.0%);--gray5Light:hsl(0, 0%, 90.9%);--gray6Light:hsl(0, 0%, 88.7%);--gray7Light:hsl(0, 0%, 85.8%);--gray8Light:hsl(0, 0%, 78.0%);--gray9Light:hsl(0, 0%, 56.1%);--gray10Light:hsl(0, 0%, 52.3%);--gray11Light:hsl(0, 0%, 43.5%);--gray12Light:hsl(0, 0%, 9.0%);--green1Light:hsl(136, 50.0%, 98.9%);--green2Light:hsl(138, 62.5%, 96.9%);--green3Light:hsl(139, 55.2%, 94.5%);--green4Light:hsl(140, 48.7%, 91.0%);--green5Light:hsl(141, 43.7%, 86.0%);--green6Light:hsl(143, 40.3%, 79.0%);--green7Light:hsl(146, 38.5%, 69.0%);--green8Light:hsl(151, 40.2%, 54.1%);--green9Light:hsl(151, 55.0%, 41.5%);--green10Light:hsl(152, 57.5%, 37.6%);--green11Light:hsl(153, 67.0%, 28.5%);--green12Light:hsl(155, 40.0%, 14.0%);--orange1Light:hsl(24, 70.0%, 99.0%);--orange2Light:hsl(24, 83.3%, 97.6%);--orange3Light:hsl(24, 100%, 95.3%);--orange4Light:hsl(25, 100%, 92.2%);--orange5Light:hsl(25, 100%, 88.2%);--orange6Light:hsl(25, 100%, 82.8%);--orange7Light:hsl(24, 100%, 75.3%);--orange8Light:hsl(24, 94.5%, 64.3%);--orange9Light:hsl(24, 94.0%, 50.0%);--orange10Light:hsl(24, 100%, 46.5%);--orange11Light:hsl(24, 100%, 37.0%);--orange12Light:hsl(15, 60.0%, 17.0%);--pink1Light:hsl(322, 100%, 99.4%);--pink2Light:hsl(323, 100%, 98.4%);--pink3Light:hsl(323, 86.3%, 96.5%);--pink4Light:hsl(323, 78.7%, 94.2%);--pink5Light:hsl(323, 72.2%, 91.1%);--pink6Light:hsl(323, 66.3%, 86.6%);--pink7Light:hsl(323, 62.0%, 80.1%);--pink8Light:hsl(323, 60.3%, 72.4%);--pink9Light:hsl(322, 65.0%, 54.5%);--pink10Light:hsl(322, 63.9%, 50.7%);--pink11Light:hsl(322, 75.0%, 46.0%);--pink12Light:hsl(320, 70.0%, 13.5%);--purple1Light:hsl(280, 65.0%, 99.4%);--purple2Light:hsl(276, 100%, 99.0%);--purple3Light:hsl(276, 83.1%, 97.0%);--purple4Light:hsl(275, 76.4%, 94.7%);--purple5Light:hsl(275, 70.8%, 91.8%);--purple6Light:hsl(274, 65.4%, 87.8%);--purple7Light:hsl(273, 61.0%, 81.7%);--purple8Light:hsl(272, 60.0%, 73.5%);--purple9Light:hsl(272, 51.0%, 54.0%);--purple10Light:hsl(272, 46.8%, 50.3%);--purple11Light:hsl(272, 50.0%, 45.8%);--purple12Light:hsl(272, 66.0%, 16.0%);--red1Light:hsl(359, 100%, 99.4%);--red2Light:hsl(359, 100%, 98.6%);--red3Light:hsl(360, 100%, 96.8%);--red4Light:hsl(360, 97.9%, 94.8%);--red5Light:hsl(360, 90.2%, 91.9%);--red6Light:hsl(360, 81.7%, 87.8%);--red7Light:hsl(359, 74.2%, 81.7%);--red8Light:hsl(359, 69.5%, 74.3%);--red9Light:hsl(358, 75.0%, 59.0%);--red10Light:hsl(358, 69.4%, 55.2%);--red11Light:hsl(358, 65.0%, 48.7%);--red12Light:hsl(354, 50.0%, 14.6%);--yellow1Light:hsl(60, 54.0%, 98.5%);--yellow2Light:hsl(52, 100%, 95.5%);--yellow3Light:hsl(55, 100%, 90.9%);--yellow4Light:hsl(54, 100%, 86.6%);--yellow5Light:hsl(52, 97.9%, 82.0%);--yellow6Light:hsl(50, 89.4%, 76.1%);--yellow7Light:hsl(47, 80.4%, 68.0%);--yellow8Light:hsl(48, 100%, 46.1%);--yellow9Light:hsl(53, 92.0%, 50.0%);--yellow10Light:hsl(50, 100%, 48.5%);--yellow11Light:hsl(42, 100%, 29.0%);--yellow12Light:hsl(40, 55.0%, 13.5%);--blue1Dark:hsl(212, 35.0%, 9.2%);--blue2Dark:hsl(216, 50.0%, 11.8%);--blue3Dark:hsl(214, 59.4%, 15.3%);--blue4Dark:hsl(214, 65.8%, 17.9%);--blue5Dark:hsl(213, 71.2%, 20.2%);--blue6Dark:hsl(212, 77.4%, 23.1%);--blue7Dark:hsl(211, 85.1%, 27.4%);--blue8Dark:hsl(211, 89.7%, 34.1%);--blue9Dark:hsl(206, 100%, 50.0%);--blue10Dark:hsl(209, 100%, 60.6%);--blue11Dark:hsl(210, 100%, 66.1%);--blue12Dark:hsl(206, 98.0%, 95.8%);--gray1Dark:hsl(0, 0%, 8.5%);--gray2Dark:hsl(0, 0%, 11.0%);--gray3Dark:hsl(0, 0%, 13.6%);--gray4Dark:hsl(0, 0%, 15.8%);--gray5Dark:hsl(0, 0%, 17.9%);--gray6Dark:hsl(0, 0%, 20.5%);--gray7Dark:hsl(0, 0%, 24.3%);--gray8Dark:hsl(0, 0%, 31.2%);--gray9Dark:hsl(0, 0%, 43.9%);--gray10Dark:hsl(0, 0%, 49.4%);--gray11Dark:hsl(0, 0%, 62.8%);--gray12Dark:hsl(0, 0%, 93.0%);--green1Dark:hsl(146, 30.0%, 7.4%);--green2Dark:hsl(155, 44.2%, 8.4%);--green3Dark:hsl(155, 46.7%, 10.9%);--green4Dark:hsl(154, 48.4%, 12.9%);--green5Dark:hsl(154, 49.7%, 14.9%);--green6Dark:hsl(154, 50.9%, 17.6%);--green7Dark:hsl(153, 51.8%, 21.8%);--green8Dark:hsl(151, 51.7%, 28.4%);--green9Dark:hsl(151, 55.0%, 41.5%);--green10Dark:hsl(151, 49.3%, 46.5%);--green11Dark:hsl(151, 50.0%, 53.2%);--green12Dark:hsl(137, 72.0%, 94.0%);--orange1Dark:hsl(30, 70.0%, 7.2%);--orange2Dark:hsl(28, 100%, 8.4%);--orange3Dark:hsl(26, 91.1%, 11.6%);--orange4Dark:hsl(25, 88.3%, 14.1%);--orange5Dark:hsl(24, 87.6%, 16.6%);--orange6Dark:hsl(24, 88.6%, 19.8%);--orange7Dark:hsl(24, 92.4%, 24.0%);--orange8Dark:hsl(25, 100%, 29.0%);--orange9Dark:hsl(24, 94.0%, 50.0%);--orange10Dark:hsl(24, 100%, 58.5%);--orange11Dark:hsl(24, 100%, 62.2%);--orange12Dark:hsl(24, 97.0%, 93.2%);--pink1Dark:hsl(318, 25.0%, 9.6%);--pink2Dark:hsl(319, 32.2%, 11.6%);--pink3Dark:hsl(319, 41.0%, 16.0%);--pink4Dark:hsl(320, 45.4%, 18.7%);--pink5Dark:hsl(320, 49.0%, 21.1%);--pink6Dark:hsl(321, 53.6%, 24.4%);--pink7Dark:hsl(321, 61.1%, 29.7%);--pink8Dark:hsl(322, 74.9%, 37.5%);--pink9Dark:hsl(322, 65.0%, 54.5%);--pink10Dark:hsl(323, 72.8%, 59.2%);--pink11Dark:hsl(325, 90.0%, 66.4%);--pink12Dark:hsl(322, 90.0%, 95.8%);--purple1Dark:hsl(284, 20.0%, 9.6%);--purple2Dark:hsl(283, 30.0%, 11.8%);--purple3Dark:hsl(281, 37.5%, 16.5%);--purple4Dark:hsl(280, 41.2%, 20.0%);--purple5Dark:hsl(279, 43.8%, 23.3%);--purple6Dark:hsl(277, 46.4%, 27.5%);--purple7Dark:hsl(275, 49.3%, 34.6%);--purple8Dark:hsl(272, 52.1%, 45.9%);--purple9Dark:hsl(272, 51.0%, 54.0%);--purple10Dark:hsl(273, 57.3%, 59.1%);--purple11Dark:hsl(275, 80.0%, 71.0%);--purple12Dark:hsl(279, 75.0%, 95.7%);--red1Dark:hsl(353, 23.0%, 9.8%);--red2Dark:hsl(357, 34.4%, 12.0%);--red3Dark:hsl(356, 43.4%, 16.4%);--red4Dark:hsl(356, 47.6%, 19.2%);--red5Dark:hsl(356, 51.1%, 21.9%);--red6Dark:hsl(356, 55.2%, 25.9%);--red7Dark:hsl(357, 60.2%, 31.8%);--red8Dark:hsl(358, 65.0%, 40.4%);--red9Dark:hsl(358, 75.0%, 59.0%);--red10Dark:hsl(358, 85.3%, 64.0%);--red11Dark:hsl(358, 100%, 69.5%);--red12Dark:hsl(351, 89.0%, 96.0%);--yellow1Dark:hsl(45, 100%, 5.5%);--yellow2Dark:hsl(46, 100%, 6.7%);--yellow3Dark:hsl(45, 100%, 8.7%);--yellow4Dark:hsl(45, 100%, 10.4%);--yellow5Dark:hsl(47, 100%, 12.1%);--yellow6Dark:hsl(49, 100%, 14.3%);--yellow7Dark:hsl(49, 90.3%, 18.4%);--yellow8Dark:hsl(50, 100%, 22.0%);--yellow9Dark:hsl(53, 92.0%, 50.0%);--yellow10Dark:hsl(54, 100%, 68.0%);--yellow11Dark:hsl(48, 100%, 47.0%);--yellow12Dark:hsl(53, 100%, 91.0%);--radius-0:0px;--radius-1:3px;--radius-2:5px;--radius-3:7px;--radius-4:9px;--radius-5:10px;--radius-6:16px;--radius-7:19px;--radius-8:22px;--radius-9:26px;--radius-10:34px;--radius-11:42px;--radius-12:50px;--radius-true:9px;--zIndex-0:0;--zIndex-1:100;--zIndex-2:200;--zIndex-3:300;--zIndex-4:400;--zIndex-5:500;--space-0:0px;--space-1:2px;--space-2:7px;--space-3:13px;--space-4:18px;--space-5:24px;--space-6:32px;--space-7:39px;--space-8:46px;--space-9:53px;--space-10:60px;--space-11:74px;--space-12:88px;--space-13:102px;--space-14:116px;--space-15:130px;--space-16:144px;--space-17:144px;--space-18:158px;--space-19:172px;--space-20:186px;--space-0--25:0.5px;--space-0--5:1px;--space-0--75:1.5px;--space-1--5:4px;--space-2--5:10px;--space-3--5:16px;--space-true:18px;--space-4--5:21px;--space--0--25:-0.5px;--space--0--5:-1px;--space--0--75:-1.5px;--space--1:-2px;--space--1--5:-4px;--space--2:-7px;--space--2--5:-10px;--space--3:-13px;--space--3--5:-16px;--space--4:-18px;--space--true:-18px;--space--4--5:-21px;--space--5:-24px;--space--6:-32px;--space--7:-39px;--space--8:-46px;--space--9:-53px;--space--10:-60px;--space--11:-74px;--space--12:-88px;--space--13:-102px;--space--14:-116px;--space--15:-130px;--space--16:-144px;--space--17:-144px;--space--18:-158px;--space--19:-172px;--space--20:-186px;--size-0:0px;--size-1:20px;--size-2:28px;--size-3:36px;--size-4:44px;--size-5:52px;--size-6:64px;--size-7:74px;--size-8:84px;--size-9:94px;--size-10:104px;--size-11:124px;--size-12:144px;--size-13:164px;--size-14:184px;--size-15:204px;--size-16:224px;--size-17:224px;--size-18:244px;--size-19:264px;--size-20:284px;--size-0--25:2px;--size-0--5:4px;--size-0--75:8px;--size-1--5:24px;--size-2--5:32px;--size-3--5:40px;--size-true:44px;--size-4--5:48px} -:root .font_heading, :root .t_lang-heading-default .font_heading {--f-family:Inter, -apple-system, system-ui, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;--f-lineHeight-1:22px;--f-lineHeight-2:23px;--f-lineHeight-3:24px;--f-lineHeight-4:25px;--f-lineHeight-5:24px;--f-lineHeight-6:27px;--f-lineHeight-7:32px;--f-lineHeight-8:35px;--f-lineHeight-9:40px;--f-lineHeight-10:53px;--f-lineHeight-11:66px;--f-lineHeight-12:73px;--f-lineHeight-13:84px;--f-lineHeight-14:106px;--f-lineHeight-15:130px;--f-lineHeight-16:152px;--f-lineHeight-true:25px;--f-weight-1:400;--f-weight-2:400;--f-weight-3:400;--f-weight-4:400;--f-weight-5:400;--f-weight-6:400;--f-weight-7:700;--f-weight-8:700;--f-weight-9:700;--f-weight-10:700;--f-weight-11:700;--f-weight-12:700;--f-weight-13:700;--f-weight-14:700;--f-weight-15:700;--f-weight-16:700;--f-weight-true:700;--f-letterSpacing-1:2px;--f-letterSpacing-2:2px;--f-letterSpacing-3:2px;--f-letterSpacing-4:2px;--f-letterSpacing-5:2px;--f-letterSpacing-6:1px;--f-letterSpacing-7:0px;--f-letterSpacing-8:0px;--f-letterSpacing-9:-1px;--f-letterSpacing-10:-1.5px;--f-letterSpacing-11:-1.5px;--f-letterSpacing-12:-2px;--f-letterSpacing-13:-2px;--f-letterSpacing-14:-3px;--f-letterSpacing-15:-4px;--f-letterSpacing-16:-4px;--f-letterSpacing-true:-4px;--f-size-1:11px;--f-size-2:12px;--f-size-3:13px;--f-size-4:14px;--f-size-5:13px;--f-size-6:15px;--f-size-7:20px;--f-size-8:23px;--f-size-9:32px;--f-size-10:44px;--f-size-11:55px;--f-size-12:62px;--f-size-13:72px;--f-size-14:92px;--f-size-15:114px;--f-size-16:134px;--f-size-true:14px;--f-transform-1:uppercase;--f-transform-2:uppercase;--f-transform-3:uppercase;--f-transform-4:uppercase;--f-transform-5:uppercase;--f-transform-6:uppercase;--f-transform-7:none;--f-transform-8:none;--f-transform-9:none;--f-transform-10:none;--f-transform-11:none;--f-transform-12:none;--f-transform-13:none;--f-transform-14:none;--f-transform-15:none;--f-transform-16:none;--f-transform-true:none} -:root .font_body, :root .t_lang-body-default .font_body {--f-family:Inter, -apple-system, system-ui, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;--f-lineHeight-1:16px;--f-lineHeight-2:21px;--f-lineHeight-3:22px;--f-lineHeight-4:23px;--f-lineHeight-5:26px;--f-lineHeight-6:28px;--f-lineHeight-7:30px;--f-lineHeight-8:33px;--f-lineHeight-9:41px;--f-lineHeight-10:59px;--f-lineHeight-11:69px;--f-lineHeight-12:76px;--f-lineHeight-13:87px;--f-lineHeight-14:109px;--f-lineHeight-15:133px;--f-lineHeight-16:155px;--f-lineHeight-true:23px;--f-weight-1:400;--f-weight-2:400;--f-weight-3:400;--f-weight-4:400;--f-weight-5:400;--f-weight-6:400;--f-weight-7:600;--f-weight-8:600;--f-weight-9:600;--f-weight-10:600;--f-weight-11:600;--f-weight-12:600;--f-weight-13:600;--f-weight-14:600;--f-weight-15:600;--f-weight-16:600;--f-weight-true:600;--f-letterSpacing-1:0px;--f-letterSpacing-2:0px;--f-letterSpacing-3:0px;--f-letterSpacing-4:0px;--f-letterSpacing-5:0px;--f-letterSpacing-6:0px;--f-letterSpacing-7:0px;--f-letterSpacing-8:0px;--f-letterSpacing-9:0px;--f-letterSpacing-10:0px;--f-letterSpacing-11:0px;--f-letterSpacing-12:0px;--f-letterSpacing-13:0px;--f-letterSpacing-14:0px;--f-letterSpacing-15:0px;--f-letterSpacing-16:0px;--f-letterSpacing-true:0px;--f-size-1:11px;--f-size-2:12px;--f-size-3:13px;--f-size-4:14px;--f-size-5:16px;--f-size-6:18px;--f-size-7:20px;--f-size-8:23px;--f-size-9:30px;--f-size-10:46px;--f-size-11:55px;--f-size-12:62px;--f-size-13:72px;--f-size-14:92px;--f-size-15:114px;--f-size-16:134px;--f-size-true:14px} -:root .font_mono, :root .t_lang-mono-default .font_mono {--f-family:"ui-monospace", "SFMono-Regular", "SF Mono", Menlo, Consolas, "Liberation Mono", monospace;--f-size-1:11px;--f-size-2:12px;--f-size-3:13px;--f-size-4:14px;--f-size-5:16px;--f-size-6:18px;--f-size-7:20px;--f-size-8:22px;--f-size-9:30px;--f-size-10:42px;--f-size-11:52px;--f-size-12:62px;--f-size-13:72px;--f-size-14:92px;--f-size-15:114px;--f-size-16:124px;--f-lineHeight-1:16.5px;--f-lineHeight-2:18px;--f-lineHeight-3:19.5px;--f-lineHeight-4:21px;--f-lineHeight-5:24px;--f-lineHeight-6:27px;--f-lineHeight-7:30px;--f-lineHeight-8:33px;--f-lineHeight-9:45px;--f-lineHeight-10:63px;--f-lineHeight-11:78px;--f-lineHeight-12:93px;--f-lineHeight-13:108px;--f-lineHeight-14:138px;--f-lineHeight-15:171px;--f-lineHeight-16:186px;--f-weight-1:500;--f-weight-2:500;--f-weight-3:500;--f-weight-4:500;--f-weight-5:500;--f-weight-6:500;--f-weight-7:500;--f-weight-8:500;--f-weight-9:500;--f-weight-10:500;--f-weight-11:500;--f-weight-12:500;--f-weight-13:500;--f-weight-14:500;--f-weight-15:500;--f-weight-16:500;--f-letterSpacing-1:0px;--f-letterSpacing-2:0px;--f-letterSpacing-3:0px;--f-letterSpacing-4:0px;--f-letterSpacing-5:0px;--f-letterSpacing-6:0px;--f-letterSpacing-7:0px;--f-letterSpacing-8:0px;--f-letterSpacing-9:0px;--f-letterSpacing-10:0px;--f-letterSpacing-11:0px;--f-letterSpacing-12:0px;--f-letterSpacing-13:0px;--f-letterSpacing-14:0px;--f-letterSpacing-15:0px;--f-letterSpacing-16:0px} -:root .font_silkscreen, :root .t_lang-silkscreen-default .font_silkscreen {--f-family:Silkscreen, Fira Code, Monaco, Consolas, Ubuntu Mono, monospace;--f-size-1:11px;--f-size-2:12px;--f-size-3:13px;--f-size-4:14px;--f-size-5:15px;--f-size-6:16px;--f-size-7:18px;--f-size-8:21px;--f-size-9:28px;--f-size-10:42px;--f-size-11:52px;--f-size-12:62px;--f-size-13:72px;--f-size-14:92px;--f-size-15:114px;--f-size-16:124px;--f-lineHeight-1:19px;--f-lineHeight-2:20px;--f-lineHeight-3:22px;--f-lineHeight-4:23px;--f-lineHeight-5:24px;--f-lineHeight-6:25px;--f-lineHeight-7:28px;--f-lineHeight-8:31px;--f-lineHeight-9:40px;--f-lineHeight-10:56px;--f-lineHeight-11:68px;--f-lineHeight-12:80px;--f-lineHeight-13:92px;--f-lineHeight-14:116px;--f-lineHeight-15:143px;--f-lineHeight-16:155px;--f-weight-1:300;--f-weight-2:300;--f-weight-3:300;--f-weight-4:300;--f-weight-5:300;--f-weight-6:300;--f-weight-7:300;--f-weight-8:300;--f-weight-9:300;--f-weight-10:300;--f-weight-11:300;--f-weight-12:300;--f-weight-13:300;--f-weight-14:300;--f-weight-15:300;--f-weight-16:300;--f-letterSpacing-1:1px;--f-letterSpacing-2:1px;--f-letterSpacing-3:1px;--f-letterSpacing-4:1px;--f-letterSpacing-5:3px;--f-letterSpacing-6:3px;--f-letterSpacing-7:3px;--f-letterSpacing-8:3px;--f-letterSpacing-9:-2px;--f-letterSpacing-10:-3px;--f-letterSpacing-11:-3px;--f-letterSpacing-12:-4px;--f-letterSpacing-13:-4px;--f-letterSpacing-14:-4px;--f-letterSpacing-15:-4px;--f-letterSpacing-16:-4px} -:root.t_light, :root.t_light {--accentBackground:var(--blue4Light);--accentColor:var(--blue4Dark);--background0:var(--white0);--background025:var(--white025);--background05:var(--white05);--background075:var(--white075);--color1:var(--black12);--color2:var(--white2);--color3:var(--white3);--color4:var(--white4);--color5:var(--white5);--color6:var(--white6);--color7:var(--white7);--color8:var(--white8);--color9:var(--gray9Light);--color10:var(--white10);--color11:var(--white11);--color12:var(--gray12Light);--color0:var(--black0);--color025:var(--black025);--color05:var(--black05);--color075:var(--black075);--background:var(--black12);--backgroundHover:var(--white075);--backgroundPress:var(--white2);--backgroundFocus:var(--white2);--borderColor:var(--white4);--borderColorHover:var(--white3);--borderColorPress:var(--white5);--borderColorFocus:var(--white4);--color:var(--gray12Light);--colorHover:var(--white11);--colorPress:var(--gray12Light);--colorFocus:var(--white11);--colorTransparent:var(--black0);--placeholderColor:var(--gray9Light);--outlineColor:var(--black025);--blue1:var(--blue1Light);--blue2:var(--blue2Light);--blue3:var(--blue3Light);--blue4:var(--blue4Light);--blue5:var(--blue5Light);--blue6:var(--blue6Light);--blue7:var(--blue7Light);--blue8:var(--blue8Light);--blue9:var(--blue9Dark);--blue10:var(--blue10Light);--blue11:var(--blue11Light);--blue12:var(--blue12Light);--gray1:var(--gray1Light);--gray2:var(--gray2Light);--gray3:var(--gray3Light);--gray4:var(--gray12Dark);--gray5:var(--gray5Light);--gray6:var(--gray6Light);--gray7:var(--gray7Light);--gray8:var(--gray8Light);--gray9:var(--gray9Light);--gray10:var(--gray10Light);--gray11:var(--gray11Light);--gray12:var(--gray12Light);--green1:var(--green1Light);--green2:var(--green2Light);--green3:var(--green3Light);--green4:var(--green4Light);--green5:var(--green5Light);--green6:var(--green6Light);--green7:var(--green7Light);--green8:var(--green8Light);--green9:var(--green9Dark);--green10:var(--green10Light);--green11:var(--green11Light);--green12:var(--green12Light);--orange1:var(--orange1Light);--orange2:var(--orange2Light);--orange3:var(--orange3Light);--orange4:var(--orange4Light);--orange5:var(--orange5Light);--orange6:var(--orange6Light);--orange7:var(--orange7Light);--orange8:var(--orange8Light);--orange9:var(--orange9Dark);--orange10:var(--orange10Light);--orange11:var(--orange11Light);--orange12:var(--orange12Light);--pink1:var(--pink1Light);--pink2:var(--pink2Light);--pink3:var(--pink3Light);--pink4:var(--pink4Light);--pink5:var(--pink5Light);--pink6:var(--pink6Light);--pink7:var(--pink7Light);--pink8:var(--pink8Light);--pink9:var(--pink9Dark);--pink10:var(--pink10Light);--pink11:var(--pink11Light);--pink12:var(--pink12Light);--purple1:var(--purple1Light);--purple2:var(--purple2Light);--purple3:var(--purple3Light);--purple4:var(--purple4Light);--purple5:var(--purple5Light);--purple6:var(--purple6Light);--purple7:var(--purple7Light);--purple8:var(--purple8Light);--purple9:var(--purple9Dark);--purple10:var(--purple10Light);--purple11:var(--purple11Light);--purple12:var(--purple12Light);--red1:var(--red1Light);--red2:var(--red2Light);--red3:var(--red3Light);--red4:var(--red4Light);--red5:var(--red5Light);--red6:var(--red6Light);--red7:var(--red7Light);--red8:var(--red8Light);--red9:var(--red9Dark);--red10:var(--red10Light);--red11:var(--red11Light);--red12:var(--red12Light);--yellow1:var(--yellow1Light);--yellow2:var(--yellow2Light);--yellow3:var(--yellow3Light);--yellow4:var(--yellow4Light);--yellow5:var(--yellow5Light);--yellow6:var(--yellow6Light);--yellow7:var(--yellow7Light);--yellow8:var(--yellow8Light);--yellow9:var(--yellow9Dark);--yellow10:var(--yellow10Light);--yellow11:var(--yellow11Light);--yellow12:var(--yellow12Light);--shadowColor:rgba(0,0,0,0.085);--shadowColorHover:rgba(0,0,0,0.085);--shadowColorPress:rgba(0,0,0,0.04);--shadowColorFocus:rgba(0,0,0,0.04);} -@media(prefers-color-scheme:light){ - body{background:var(--background);color:var(--color)} - :root {--accentBackground:var(--blue4Light);--accentColor:var(--blue4Dark);--background0:var(--white0);--background025:var(--white025);--background05:var(--white05);--background075:var(--white075);--color1:var(--black12);--color2:var(--white2);--color3:var(--white3);--color4:var(--white4);--color5:var(--white5);--color6:var(--white6);--color7:var(--white7);--color8:var(--white8);--color9:var(--gray9Light);--color10:var(--white10);--color11:var(--white11);--color12:var(--gray12Light);--color0:var(--black0);--color025:var(--black025);--color05:var(--black05);--color075:var(--black075);--background:var(--black12);--backgroundHover:var(--white075);--backgroundPress:var(--white2);--backgroundFocus:var(--white2);--borderColor:var(--white4);--borderColorHover:var(--white3);--borderColorPress:var(--white5);--borderColorFocus:var(--white4);--color:var(--gray12Light);--colorHover:var(--white11);--colorPress:var(--gray12Light);--colorFocus:var(--white11);--colorTransparent:var(--black0);--placeholderColor:var(--gray9Light);--outlineColor:var(--black025);--blue1:var(--blue1Light);--blue2:var(--blue2Light);--blue3:var(--blue3Light);--blue4:var(--blue4Light);--blue5:var(--blue5Light);--blue6:var(--blue6Light);--blue7:var(--blue7Light);--blue8:var(--blue8Light);--blue9:var(--blue9Dark);--blue10:var(--blue10Light);--blue11:var(--blue11Light);--blue12:var(--blue12Light);--gray1:var(--gray1Light);--gray2:var(--gray2Light);--gray3:var(--gray3Light);--gray4:var(--gray12Dark);--gray5:var(--gray5Light);--gray6:var(--gray6Light);--gray7:var(--gray7Light);--gray8:var(--gray8Light);--gray9:var(--gray9Light);--gray10:var(--gray10Light);--gray11:var(--gray11Light);--gray12:var(--gray12Light);--green1:var(--green1Light);--green2:var(--green2Light);--green3:var(--green3Light);--green4:var(--green4Light);--green5:var(--green5Light);--green6:var(--green6Light);--green7:var(--green7Light);--green8:var(--green8Light);--green9:var(--green9Dark);--green10:var(--green10Light);--green11:var(--green11Light);--green12:var(--green12Light);--orange1:var(--orange1Light);--orange2:var(--orange2Light);--orange3:var(--orange3Light);--orange4:var(--orange4Light);--orange5:var(--orange5Light);--orange6:var(--orange6Light);--orange7:var(--orange7Light);--orange8:var(--orange8Light);--orange9:var(--orange9Dark);--orange10:var(--orange10Light);--orange11:var(--orange11Light);--orange12:var(--orange12Light);--pink1:var(--pink1Light);--pink2:var(--pink2Light);--pink3:var(--pink3Light);--pink4:var(--pink4Light);--pink5:var(--pink5Light);--pink6:var(--pink6Light);--pink7:var(--pink7Light);--pink8:var(--pink8Light);--pink9:var(--pink9Dark);--pink10:var(--pink10Light);--pink11:var(--pink11Light);--pink12:var(--pink12Light);--purple1:var(--purple1Light);--purple2:var(--purple2Light);--purple3:var(--purple3Light);--purple4:var(--purple4Light);--purple5:var(--purple5Light);--purple6:var(--purple6Light);--purple7:var(--purple7Light);--purple8:var(--purple8Light);--purple9:var(--purple9Dark);--purple10:var(--purple10Light);--purple11:var(--purple11Light);--purple12:var(--purple12Light);--red1:var(--red1Light);--red2:var(--red2Light);--red3:var(--red3Light);--red4:var(--red4Light);--red5:var(--red5Light);--red6:var(--red6Light);--red7:var(--red7Light);--red8:var(--red8Light);--red9:var(--red9Dark);--red10:var(--red10Light);--red11:var(--red11Light);--red12:var(--red12Light);--yellow1:var(--yellow1Light);--yellow2:var(--yellow2Light);--yellow3:var(--yellow3Light);--yellow4:var(--yellow4Light);--yellow5:var(--yellow5Light);--yellow6:var(--yellow6Light);--yellow7:var(--yellow7Light);--yellow8:var(--yellow8Light);--yellow9:var(--yellow9Dark);--yellow10:var(--yellow10Light);--yellow11:var(--yellow11Light);--yellow12:var(--yellow12Light);--shadowColor:rgba(0,0,0,0.085);--shadowColorHover:rgba(0,0,0,0.085);--shadowColorPress:rgba(0,0,0,0.04);--shadowColorFocus:rgba(0,0,0,0.04);} - } -.t_light ::selection{background:var(--color5);color:var(--color11)} -:root.t_dark, :root.t_dark {--accentBackground:var(--blue4Dark);--accentColor:var(--blue4Light);--background0:var(--black0);--background025:var(--black025);--background05:var(--black05);--background075:var(--black075);--color1:var(--black1);--color2:var(--black2);--color3:var(--black3);--color4:var(--black4);--color5:var(--black5);--color6:var(--black6);--color7:var(--black7);--color8:var(--black8);--color9:var(--black9);--color10:var(--black10);--color11:var(--black11);--color12:var(--black12);--color0:var(--white0);--color025:var(--white025);--color05:var(--white05);--color075:var(--white075);--background:var(--black1);--backgroundHover:var(--black2);--backgroundPress:var(--black075);--backgroundFocus:var(--black075);--borderColor:var(--black4);--borderColorHover:var(--black5);--borderColorPress:var(--black3);--borderColorFocus:var(--black4);--color:var(--black12);--colorHover:var(--black11);--colorPress:var(--black12);--colorFocus:var(--black11);--colorTransparent:var(--white0);--placeholderColor:var(--black9);--outlineColor:var(--white025);--blue1:var(--blue1Dark);--blue2:var(--blue2Dark);--blue3:var(--blue3Dark);--blue4:var(--blue4Dark);--blue5:var(--blue5Dark);--blue6:var(--blue6Dark);--blue7:var(--blue7Dark);--blue8:var(--blue8Dark);--blue9:var(--blue9Dark);--blue10:var(--blue10Dark);--blue11:var(--blue11Dark);--blue12:var(--blue12Dark);--gray1:var(--gray1Dark);--gray2:var(--gray2Dark);--gray3:var(--gray3Dark);--gray4:var(--gray4Dark);--gray5:var(--gray5Dark);--gray6:var(--gray6Dark);--gray7:var(--gray7Dark);--gray8:var(--gray8Dark);--gray9:var(--gray9Dark);--gray10:var(--gray10Dark);--gray11:var(--gray11Dark);--gray12:var(--gray12Dark);--green1:var(--green1Dark);--green2:var(--green2Dark);--green3:var(--green3Dark);--green4:var(--green4Dark);--green5:var(--green5Dark);--green6:var(--green6Dark);--green7:var(--green7Dark);--green8:var(--green8Dark);--green9:var(--green9Dark);--green10:var(--green10Dark);--green11:var(--green11Dark);--green12:var(--green12Dark);--orange1:var(--orange1Dark);--orange2:var(--orange2Dark);--orange3:var(--orange3Dark);--orange4:var(--orange4Dark);--orange5:var(--orange5Dark);--orange6:var(--orange6Dark);--orange7:var(--orange7Dark);--orange8:var(--orange8Dark);--orange9:var(--orange9Dark);--orange10:var(--orange10Dark);--orange11:var(--orange11Dark);--orange12:var(--orange12Dark);--pink1:var(--pink1Dark);--pink2:var(--pink2Dark);--pink3:var(--pink3Dark);--pink4:var(--pink4Dark);--pink5:var(--pink5Dark);--pink6:var(--pink6Dark);--pink7:var(--pink7Dark);--pink8:var(--pink8Dark);--pink9:var(--pink9Dark);--pink10:var(--pink10Dark);--pink11:var(--pink11Dark);--pink12:var(--pink12Dark);--purple1:var(--purple1Dark);--purple2:var(--purple2Dark);--purple3:var(--purple3Dark);--purple4:var(--purple4Dark);--purple5:var(--purple5Dark);--purple6:var(--purple6Dark);--purple7:var(--purple7Dark);--purple8:var(--purple8Dark);--purple9:var(--purple9Dark);--purple10:var(--purple10Dark);--purple11:var(--purple11Dark);--purple12:var(--purple12Dark);--red1:var(--red1Dark);--red2:var(--red2Dark);--red3:var(--red3Dark);--red4:var(--red4Dark);--red5:var(--red5Dark);--red6:var(--red6Dark);--red7:var(--red7Dark);--red8:var(--red8Dark);--red9:var(--red9Dark);--red10:var(--red10Dark);--red11:var(--red11Dark);--red12:var(--red12Dark);--yellow1:var(--yellow1Dark);--yellow2:var(--yellow2Dark);--yellow3:var(--yellow3Dark);--yellow4:var(--yellow4Dark);--yellow5:var(--yellow5Dark);--yellow6:var(--yellow6Dark);--yellow7:var(--yellow7Dark);--yellow8:var(--yellow8Dark);--yellow9:var(--yellow9Dark);--yellow10:var(--yellow10Dark);--yellow11:var(--yellow11Dark);--yellow12:var(--yellow12Dark);--shadowColor:rgba(0,0,0,0.3);--shadowColorHover:rgba(0,0,0,0.3);--shadowColorPress:rgba(0,0,0,0.2);--shadowColorFocus:rgba(0,0,0,0.2);} -@media(prefers-color-scheme:dark){ - body{background:var(--background);color:var(--color)} - :root {--accentBackground:var(--blue4Dark);--accentColor:var(--blue4Light);--background0:var(--black0);--background025:var(--black025);--background05:var(--black05);--background075:var(--black075);--color1:var(--black1);--color2:var(--black2);--color3:var(--black3);--color4:var(--black4);--color5:var(--black5);--color6:var(--black6);--color7:var(--black7);--color8:var(--black8);--color9:var(--black9);--color10:var(--black10);--color11:var(--black11);--color12:var(--black12);--color0:var(--white0);--color025:var(--white025);--color05:var(--white05);--color075:var(--white075);--background:var(--black1);--backgroundHover:var(--black2);--backgroundPress:var(--black075);--backgroundFocus:var(--black075);--borderColor:var(--black4);--borderColorHover:var(--black5);--borderColorPress:var(--black3);--borderColorFocus:var(--black4);--color:var(--black12);--colorHover:var(--black11);--colorPress:var(--black12);--colorFocus:var(--black11);--colorTransparent:var(--white0);--placeholderColor:var(--black9);--outlineColor:var(--white025);--blue1:var(--blue1Dark);--blue2:var(--blue2Dark);--blue3:var(--blue3Dark);--blue4:var(--blue4Dark);--blue5:var(--blue5Dark);--blue6:var(--blue6Dark);--blue7:var(--blue7Dark);--blue8:var(--blue8Dark);--blue9:var(--blue9Dark);--blue10:var(--blue10Dark);--blue11:var(--blue11Dark);--blue12:var(--blue12Dark);--gray1:var(--gray1Dark);--gray2:var(--gray2Dark);--gray3:var(--gray3Dark);--gray4:var(--gray4Dark);--gray5:var(--gray5Dark);--gray6:var(--gray6Dark);--gray7:var(--gray7Dark);--gray8:var(--gray8Dark);--gray9:var(--gray9Dark);--gray10:var(--gray10Dark);--gray11:var(--gray11Dark);--gray12:var(--gray12Dark);--green1:var(--green1Dark);--green2:var(--green2Dark);--green3:var(--green3Dark);--green4:var(--green4Dark);--green5:var(--green5Dark);--green6:var(--green6Dark);--green7:var(--green7Dark);--green8:var(--green8Dark);--green9:var(--green9Dark);--green10:var(--green10Dark);--green11:var(--green11Dark);--green12:var(--green12Dark);--orange1:var(--orange1Dark);--orange2:var(--orange2Dark);--orange3:var(--orange3Dark);--orange4:var(--orange4Dark);--orange5:var(--orange5Dark);--orange6:var(--orange6Dark);--orange7:var(--orange7Dark);--orange8:var(--orange8Dark);--orange9:var(--orange9Dark);--orange10:var(--orange10Dark);--orange11:var(--orange11Dark);--orange12:var(--orange12Dark);--pink1:var(--pink1Dark);--pink2:var(--pink2Dark);--pink3:var(--pink3Dark);--pink4:var(--pink4Dark);--pink5:var(--pink5Dark);--pink6:var(--pink6Dark);--pink7:var(--pink7Dark);--pink8:var(--pink8Dark);--pink9:var(--pink9Dark);--pink10:var(--pink10Dark);--pink11:var(--pink11Dark);--pink12:var(--pink12Dark);--purple1:var(--purple1Dark);--purple2:var(--purple2Dark);--purple3:var(--purple3Dark);--purple4:var(--purple4Dark);--purple5:var(--purple5Dark);--purple6:var(--purple6Dark);--purple7:var(--purple7Dark);--purple8:var(--purple8Dark);--purple9:var(--purple9Dark);--purple10:var(--purple10Dark);--purple11:var(--purple11Dark);--purple12:var(--purple12Dark);--red1:var(--red1Dark);--red2:var(--red2Dark);--red3:var(--red3Dark);--red4:var(--red4Dark);--red5:var(--red5Dark);--red6:var(--red6Dark);--red7:var(--red7Dark);--red8:var(--red8Dark);--red9:var(--red9Dark);--red10:var(--red10Dark);--red11:var(--red11Dark);--red12:var(--red12Dark);--yellow1:var(--yellow1Dark);--yellow2:var(--yellow2Dark);--yellow3:var(--yellow3Dark);--yellow4:var(--yellow4Dark);--yellow5:var(--yellow5Dark);--yellow6:var(--yellow6Dark);--yellow7:var(--yellow7Dark);--yellow8:var(--yellow8Dark);--yellow9:var(--yellow9Dark);--yellow10:var(--yellow10Dark);--yellow11:var(--yellow11Dark);--yellow12:var(--yellow12Dark);--shadowColor:rgba(0,0,0,0.3);--shadowColorHover:rgba(0,0,0,0.3);--shadowColorPress:rgba(0,0,0,0.2);--shadowColorFocus:rgba(0,0,0,0.2);} - } -.t_dark ::selection{background:var(--color5);color:var(--color11)} -:root.t_light .t_orange {--accentBackground:var(--pink1Light);--accentColor:var(--pink12Light);--background0:hsla(24, 70.0%, 99.0%, 0);--background025:hsla(24, 70.0%, 99.0%, 0.25);--background05:hsla(24, 70.0%, 99.0%, 0.5);--background075:hsla(24, 70.0%, 99.0%, 0.75);--color1:var(--orange1Light);--color2:var(--orange2Light);--color3:var(--orange3Light);--color4:var(--orange4Light);--color5:var(--orange5Light);--color6:var(--orange6Light);--color7:var(--orange7Light);--color8:var(--orange8Light);--color9:var(--orange9Dark);--color10:var(--orange10Light);--color11:var(--orange11Light);--color12:var(--orange12Light);--color0:hsla(24, 94.0%, 50.0%, 0);--color025:hsla(24, 94.0%, 50.0%, 0.25);--color05:hsla(24, 94.0%, 50.0%, 0.5);--color075:hsla(24, 94.0%, 50.0%, 0.75);--background:var(--orange1Light);--backgroundHover:hsla(24, 70.0%, 99.0%, 0.75);--backgroundPress:var(--orange2Light);--backgroundFocus:var(--orange2Light);--borderColor:var(--orange4Light);--borderColorHover:var(--orange3Light);--borderColorPress:var(--orange5Light);--borderColorFocus:var(--orange4Light);--color:var(--orange12Light);--colorHover:var(--orange11Light);--colorPress:var(--orange12Light);--colorFocus:var(--orange11Light);--colorTransparent:hsla(24, 94.0%, 50.0%, 0);--placeholderColor:var(--orange9Dark);--outlineColor:hsla(24, 94.0%, 50.0%, 0.25);} -@media(prefers-color-scheme:light){ - body{background:var(--background);color:var(--color)} - .t_orange {--accentBackground:var(--pink1Light);--accentColor:var(--pink12Light);--background0:hsla(24, 70.0%, 99.0%, 0);--background025:hsla(24, 70.0%, 99.0%, 0.25);--background05:hsla(24, 70.0%, 99.0%, 0.5);--background075:hsla(24, 70.0%, 99.0%, 0.75);--color1:var(--orange1Light);--color2:var(--orange2Light);--color3:var(--orange3Light);--color4:var(--orange4Light);--color5:var(--orange5Light);--color6:var(--orange6Light);--color7:var(--orange7Light);--color8:var(--orange8Light);--color9:var(--orange9Dark);--color10:var(--orange10Light);--color11:var(--orange11Light);--color12:var(--orange12Light);--color0:hsla(24, 94.0%, 50.0%, 0);--color025:hsla(24, 94.0%, 50.0%, 0.25);--color05:hsla(24, 94.0%, 50.0%, 0.5);--color075:hsla(24, 94.0%, 50.0%, 0.75);--background:var(--orange1Light);--backgroundHover:hsla(24, 70.0%, 99.0%, 0.75);--backgroundPress:var(--orange2Light);--backgroundFocus:var(--orange2Light);--borderColor:var(--orange4Light);--borderColorHover:var(--orange3Light);--borderColorPress:var(--orange5Light);--borderColorFocus:var(--orange4Light);--color:var(--orange12Light);--colorHover:var(--orange11Light);--colorPress:var(--orange12Light);--colorFocus:var(--orange11Light);--colorTransparent:hsla(24, 94.0%, 50.0%, 0);--placeholderColor:var(--orange9Dark);--outlineColor:hsla(24, 94.0%, 50.0%, 0.25);} - } -.t_light_orange ::selection{background:var(--color5);color:var(--color11)} -:root.t_light .t_yellow {--accentBackground:var(--blue1Light);--accentColor:var(--blue12Light);--background0:hsla(60, 54.0%, 98.5%, 0);--background025:hsla(60, 54.0%, 98.5%, 0.25);--background05:hsla(60, 54.0%, 98.5%, 0.5);--background075:hsla(60, 54.0%, 98.5%, 0.75);--color1:var(--yellow1Light);--color2:var(--yellow2Light);--color3:var(--yellow3Light);--color4:var(--yellow4Light);--color5:var(--yellow5Light);--color6:var(--yellow6Light);--color7:var(--yellow7Light);--color8:var(--yellow8Light);--color9:var(--yellow9Dark);--color10:var(--yellow10Light);--color11:var(--yellow11Light);--color12:var(--yellow12Light);--color0:hsla(53, 92.0%, 50.0%, 0);--color025:hsla(53, 92.0%, 50.0%, 0.25);--color05:hsla(53, 92.0%, 50.0%, 0.5);--color075:hsla(53, 92.0%, 50.0%, 0.75);--background:var(--yellow1Light);--backgroundHover:hsla(60, 54.0%, 98.5%, 0.75);--backgroundPress:var(--yellow2Light);--backgroundFocus:var(--yellow2Light);--borderColor:var(--yellow4Light);--borderColorHover:var(--yellow3Light);--borderColorPress:var(--yellow5Light);--borderColorFocus:var(--yellow4Light);--color:var(--yellow12Light);--colorHover:var(--yellow11Light);--colorPress:var(--yellow12Light);--colorFocus:var(--yellow11Light);--colorTransparent:hsla(53, 92.0%, 50.0%, 0);--placeholderColor:var(--yellow9Dark);--outlineColor:hsla(53, 92.0%, 50.0%, 0.25);} -@media(prefers-color-scheme:light){ - body{background:var(--background);color:var(--color)} - .t_yellow {--accentBackground:var(--blue1Light);--accentColor:var(--blue12Light);--background0:hsla(60, 54.0%, 98.5%, 0);--background025:hsla(60, 54.0%, 98.5%, 0.25);--background05:hsla(60, 54.0%, 98.5%, 0.5);--background075:hsla(60, 54.0%, 98.5%, 0.75);--color1:var(--yellow1Light);--color2:var(--yellow2Light);--color3:var(--yellow3Light);--color4:var(--yellow4Light);--color5:var(--yellow5Light);--color6:var(--yellow6Light);--color7:var(--yellow7Light);--color8:var(--yellow8Light);--color9:var(--yellow9Dark);--color10:var(--yellow10Light);--color11:var(--yellow11Light);--color12:var(--yellow12Light);--color0:hsla(53, 92.0%, 50.0%, 0);--color025:hsla(53, 92.0%, 50.0%, 0.25);--color05:hsla(53, 92.0%, 50.0%, 0.5);--color075:hsla(53, 92.0%, 50.0%, 0.75);--background:var(--yellow1Light);--backgroundHover:hsla(60, 54.0%, 98.5%, 0.75);--backgroundPress:var(--yellow2Light);--backgroundFocus:var(--yellow2Light);--borderColor:var(--yellow4Light);--borderColorHover:var(--yellow3Light);--borderColorPress:var(--yellow5Light);--borderColorFocus:var(--yellow4Light);--color:var(--yellow12Light);--colorHover:var(--yellow11Light);--colorPress:var(--yellow12Light);--colorFocus:var(--yellow11Light);--colorTransparent:hsla(53, 92.0%, 50.0%, 0);--placeholderColor:var(--yellow9Dark);--outlineColor:hsla(53, 92.0%, 50.0%, 0.25);} - } -.t_light_yellow ::selection{background:var(--color5);color:var(--color11)} -:root.t_light .t_green {--accentBackground:var(--orange1Light);--accentColor:var(--orange12Light);--background0:hsla(136, 50.0%, 98.9%, 0);--background025:hsla(136, 50.0%, 98.9%, 0.25);--background05:hsla(136, 50.0%, 98.9%, 0.5);--background075:hsla(136, 50.0%, 98.9%, 0.75);--color1:var(--green1Light);--color2:var(--green2Light);--color3:var(--green3Light);--color4:var(--green4Light);--color5:var(--green5Light);--color6:var(--green6Light);--color7:var(--green7Light);--color8:var(--green8Light);--color9:var(--green9Dark);--color10:var(--green10Light);--color11:var(--green11Light);--color12:var(--green12Light);--color0:hsla(151, 55.0%, 41.5%, 0);--color025:hsla(151, 55.0%, 41.5%, 0.25);--color05:hsla(151, 55.0%, 41.5%, 0.5);--color075:hsla(151, 55.0%, 41.5%, 0.75);--background:var(--green1Light);--backgroundHover:hsla(136, 50.0%, 98.9%, 0.75);--backgroundPress:var(--green2Light);--backgroundFocus:var(--green2Light);--borderColor:var(--green4Light);--borderColorHover:var(--green3Light);--borderColorPress:var(--green5Light);--borderColorFocus:var(--green4Light);--color:var(--green12Light);--colorHover:var(--green11Light);--colorPress:var(--green12Light);--colorFocus:var(--green11Light);--colorTransparent:hsla(151, 55.0%, 41.5%, 0);--placeholderColor:var(--green9Dark);--outlineColor:hsla(151, 55.0%, 41.5%, 0.25);} -@media(prefers-color-scheme:light){ - body{background:var(--background);color:var(--color)} - .t_green {--accentBackground:var(--orange1Light);--accentColor:var(--orange12Light);--background0:hsla(136, 50.0%, 98.9%, 0);--background025:hsla(136, 50.0%, 98.9%, 0.25);--background05:hsla(136, 50.0%, 98.9%, 0.5);--background075:hsla(136, 50.0%, 98.9%, 0.75);--color1:var(--green1Light);--color2:var(--green2Light);--color3:var(--green3Light);--color4:var(--green4Light);--color5:var(--green5Light);--color6:var(--green6Light);--color7:var(--green7Light);--color8:var(--green8Light);--color9:var(--green9Dark);--color10:var(--green10Light);--color11:var(--green11Light);--color12:var(--green12Light);--color0:hsla(151, 55.0%, 41.5%, 0);--color025:hsla(151, 55.0%, 41.5%, 0.25);--color05:hsla(151, 55.0%, 41.5%, 0.5);--color075:hsla(151, 55.0%, 41.5%, 0.75);--background:var(--green1Light);--backgroundHover:hsla(136, 50.0%, 98.9%, 0.75);--backgroundPress:var(--green2Light);--backgroundFocus:var(--green2Light);--borderColor:var(--green4Light);--borderColorHover:var(--green3Light);--borderColorPress:var(--green5Light);--borderColorFocus:var(--green4Light);--color:var(--green12Light);--colorHover:var(--green11Light);--colorPress:var(--green12Light);--colorFocus:var(--green11Light);--colorTransparent:hsla(151, 55.0%, 41.5%, 0);--placeholderColor:var(--green9Dark);--outlineColor:hsla(151, 55.0%, 41.5%, 0.25);} - } -.t_light_green ::selection{background:var(--color5);color:var(--color11)} -:root.t_light .t_blue {--accentBackground:var(--gray1Light);--accentColor:var(--gray12Light);--background0:hsla(206, 100%, 99.2%, 0);--background025:hsla(206, 100%, 99.2%, 0.25);--background05:hsla(206, 100%, 99.2%, 0.5);--background075:hsla(206, 100%, 99.2%, 0.75);--color1:var(--blue1Light);--color2:var(--blue2Light);--color3:var(--blue3Light);--color4:var(--blue4Light);--color5:var(--blue5Light);--color6:var(--blue6Light);--color7:var(--blue7Light);--color8:var(--blue8Light);--color9:var(--blue9Dark);--color10:var(--blue10Light);--color11:var(--blue11Light);--color12:var(--blue12Light);--color0:hsla(206, 100%, 50.0%, 0);--color025:hsla(206, 100%, 50.0%, 0.25);--color05:hsla(206, 100%, 50.0%, 0.5);--color075:hsla(206, 100%, 50.0%, 0.75);--background:var(--blue1Light);--backgroundHover:hsla(206, 100%, 99.2%, 0.75);--backgroundPress:var(--blue2Light);--backgroundFocus:var(--blue2Light);--borderColor:var(--blue4Light);--borderColorHover:var(--blue3Light);--borderColorPress:var(--blue5Light);--borderColorFocus:var(--blue4Light);--color:var(--blue12Light);--colorHover:var(--blue11Light);--colorPress:var(--blue12Light);--colorFocus:var(--blue11Light);--colorTransparent:hsla(206, 100%, 50.0%, 0);--placeholderColor:var(--blue9Dark);--outlineColor:hsla(206, 100%, 50.0%, 0.25);} -@media(prefers-color-scheme:light){ - body{background:var(--background);color:var(--color)} - .t_blue {--accentBackground:var(--gray1Light);--accentColor:var(--gray12Light);--background0:hsla(206, 100%, 99.2%, 0);--background025:hsla(206, 100%, 99.2%, 0.25);--background05:hsla(206, 100%, 99.2%, 0.5);--background075:hsla(206, 100%, 99.2%, 0.75);--color1:var(--blue1Light);--color2:var(--blue2Light);--color3:var(--blue3Light);--color4:var(--blue4Light);--color5:var(--blue5Light);--color6:var(--blue6Light);--color7:var(--blue7Light);--color8:var(--blue8Light);--color9:var(--blue9Dark);--color10:var(--blue10Light);--color11:var(--blue11Light);--color12:var(--blue12Light);--color0:hsla(206, 100%, 50.0%, 0);--color025:hsla(206, 100%, 50.0%, 0.25);--color05:hsla(206, 100%, 50.0%, 0.5);--color075:hsla(206, 100%, 50.0%, 0.75);--background:var(--blue1Light);--backgroundHover:hsla(206, 100%, 99.2%, 0.75);--backgroundPress:var(--blue2Light);--backgroundFocus:var(--blue2Light);--borderColor:var(--blue4Light);--borderColorHover:var(--blue3Light);--borderColorPress:var(--blue5Light);--borderColorFocus:var(--blue4Light);--color:var(--blue12Light);--colorHover:var(--blue11Light);--colorPress:var(--blue12Light);--colorFocus:var(--blue11Light);--colorTransparent:hsla(206, 100%, 50.0%, 0);--placeholderColor:var(--blue9Dark);--outlineColor:hsla(206, 100%, 50.0%, 0.25);} - } -.t_light_blue ::selection{background:var(--color5);color:var(--color11)} -:root.t_light .t_purple {--accentBackground:var(--red1Light);--accentColor:var(--red12Light);--background0:hsla(280, 65.0%, 99.4%, 0);--background025:hsla(280, 65.0%, 99.4%, 0.25);--background05:hsla(280, 65.0%, 99.4%, 0.5);--background075:hsla(280, 65.0%, 99.4%, 0.75);--color1:var(--purple1Light);--color2:var(--purple2Light);--color3:var(--purple3Light);--color4:var(--purple4Light);--color5:var(--purple5Light);--color6:var(--purple6Light);--color7:var(--purple7Light);--color8:var(--purple8Light);--color9:var(--purple9Dark);--color10:var(--purple10Light);--color11:var(--purple11Light);--color12:var(--purple12Light);--color0:hsla(272, 51.0%, 54.0%, 0);--color025:hsla(272, 51.0%, 54.0%, 0.25);--color05:hsla(272, 51.0%, 54.0%, 0.5);--color075:hsla(272, 51.0%, 54.0%, 0.75);--background:var(--purple1Light);--backgroundHover:hsla(280, 65.0%, 99.4%, 0.75);--backgroundPress:var(--purple2Light);--backgroundFocus:var(--purple2Light);--borderColor:var(--purple4Light);--borderColorHover:var(--purple3Light);--borderColorPress:var(--purple5Light);--borderColorFocus:var(--purple4Light);--color:var(--purple12Light);--colorHover:var(--purple11Light);--colorPress:var(--purple12Light);--colorFocus:var(--purple11Light);--colorTransparent:hsla(272, 51.0%, 54.0%, 0);--placeholderColor:var(--purple9Dark);--outlineColor:hsla(272, 51.0%, 54.0%, 0.25);} -@media(prefers-color-scheme:light){ - body{background:var(--background);color:var(--color)} - .t_purple {--accentBackground:var(--red1Light);--accentColor:var(--red12Light);--background0:hsla(280, 65.0%, 99.4%, 0);--background025:hsla(280, 65.0%, 99.4%, 0.25);--background05:hsla(280, 65.0%, 99.4%, 0.5);--background075:hsla(280, 65.0%, 99.4%, 0.75);--color1:var(--purple1Light);--color2:var(--purple2Light);--color3:var(--purple3Light);--color4:var(--purple4Light);--color5:var(--purple5Light);--color6:var(--purple6Light);--color7:var(--purple7Light);--color8:var(--purple8Light);--color9:var(--purple9Dark);--color10:var(--purple10Light);--color11:var(--purple11Light);--color12:var(--purple12Light);--color0:hsla(272, 51.0%, 54.0%, 0);--color025:hsla(272, 51.0%, 54.0%, 0.25);--color05:hsla(272, 51.0%, 54.0%, 0.5);--color075:hsla(272, 51.0%, 54.0%, 0.75);--background:var(--purple1Light);--backgroundHover:hsla(280, 65.0%, 99.4%, 0.75);--backgroundPress:var(--purple2Light);--backgroundFocus:var(--purple2Light);--borderColor:var(--purple4Light);--borderColorHover:var(--purple3Light);--borderColorPress:var(--purple5Light);--borderColorFocus:var(--purple4Light);--color:var(--purple12Light);--colorHover:var(--purple11Light);--colorPress:var(--purple12Light);--colorFocus:var(--purple11Light);--colorTransparent:hsla(272, 51.0%, 54.0%, 0);--placeholderColor:var(--purple9Dark);--outlineColor:hsla(272, 51.0%, 54.0%, 0.25);} - } -.t_light_purple ::selection{background:var(--color5);color:var(--color11)} -:root.t_light .t_pink {--accentBackground:var(--purple1Light);--accentColor:var(--purple12Light);--background0:hsla(322, 100%, 99.4%, 0);--background025:hsla(322, 100%, 99.4%, 0.25);--background05:hsla(322, 100%, 99.4%, 0.5);--background075:hsla(322, 100%, 99.4%, 0.75);--color1:var(--pink1Light);--color2:var(--pink2Light);--color3:var(--pink3Light);--color4:var(--pink4Light);--color5:var(--pink5Light);--color6:var(--pink6Light);--color7:var(--pink7Light);--color8:var(--pink8Light);--color9:var(--pink9Dark);--color10:var(--pink10Light);--color11:var(--pink11Light);--color12:var(--pink12Light);--color0:hsla(322, 65.0%, 54.5%, 0);--color025:hsla(322, 65.0%, 54.5%, 0.25);--color05:hsla(322, 65.0%, 54.5%, 0.5);--color075:hsla(322, 65.0%, 54.5%, 0.75);--background:var(--pink1Light);--backgroundHover:hsla(322, 100%, 99.4%, 0.75);--backgroundPress:var(--pink2Light);--backgroundFocus:var(--pink2Light);--borderColor:var(--pink4Light);--borderColorHover:var(--pink3Light);--borderColorPress:var(--pink5Light);--borderColorFocus:var(--pink4Light);--color:var(--pink12Light);--colorHover:var(--pink11Light);--colorPress:var(--pink12Light);--colorFocus:var(--pink11Light);--colorTransparent:hsla(322, 65.0%, 54.5%, 0);--placeholderColor:var(--pink9Dark);--outlineColor:hsla(322, 65.0%, 54.5%, 0.25);} -@media(prefers-color-scheme:light){ - body{background:var(--background);color:var(--color)} - .t_pink {--accentBackground:var(--purple1Light);--accentColor:var(--purple12Light);--background0:hsla(322, 100%, 99.4%, 0);--background025:hsla(322, 100%, 99.4%, 0.25);--background05:hsla(322, 100%, 99.4%, 0.5);--background075:hsla(322, 100%, 99.4%, 0.75);--color1:var(--pink1Light);--color2:var(--pink2Light);--color3:var(--pink3Light);--color4:var(--pink4Light);--color5:var(--pink5Light);--color6:var(--pink6Light);--color7:var(--pink7Light);--color8:var(--pink8Light);--color9:var(--pink9Dark);--color10:var(--pink10Light);--color11:var(--pink11Light);--color12:var(--pink12Light);--color0:hsla(322, 65.0%, 54.5%, 0);--color025:hsla(322, 65.0%, 54.5%, 0.25);--color05:hsla(322, 65.0%, 54.5%, 0.5);--color075:hsla(322, 65.0%, 54.5%, 0.75);--background:var(--pink1Light);--backgroundHover:hsla(322, 100%, 99.4%, 0.75);--backgroundPress:var(--pink2Light);--backgroundFocus:var(--pink2Light);--borderColor:var(--pink4Light);--borderColorHover:var(--pink3Light);--borderColorPress:var(--pink5Light);--borderColorFocus:var(--pink4Light);--color:var(--pink12Light);--colorHover:var(--pink11Light);--colorPress:var(--pink12Light);--colorFocus:var(--pink11Light);--colorTransparent:hsla(322, 65.0%, 54.5%, 0);--placeholderColor:var(--pink9Dark);--outlineColor:hsla(322, 65.0%, 54.5%, 0.25);} - } -.t_light_pink ::selection{background:var(--color5);color:var(--color11)} -:root.t_light .t_red {--accentBackground:var(--yellow1Light);--accentColor:var(--yellow12Light);--background0:hsla(359, 100%, 99.4%, 0);--background025:hsla(359, 100%, 99.4%, 0.25);--background05:hsla(359, 100%, 99.4%, 0.5);--background075:hsla(359, 100%, 99.4%, 0.75);--color1:var(--red1Light);--color2:var(--red2Light);--color3:var(--red3Light);--color4:var(--red4Light);--color5:var(--red5Light);--color6:var(--red6Light);--color7:var(--red7Light);--color8:var(--red8Light);--color9:var(--red9Dark);--color10:var(--red10Light);--color11:var(--red11Light);--color12:var(--red12Light);--color0:hsla(358, 75.0%, 59.0%, 0);--color025:hsla(358, 75.0%, 59.0%, 0.25);--color05:hsla(358, 75.0%, 59.0%, 0.5);--color075:hsla(358, 75.0%, 59.0%, 0.75);--background:var(--red1Light);--backgroundHover:hsla(359, 100%, 99.4%, 0.75);--backgroundPress:var(--red2Light);--backgroundFocus:var(--red2Light);--borderColor:var(--red4Light);--borderColorHover:var(--red3Light);--borderColorPress:var(--red5Light);--borderColorFocus:var(--red4Light);--color:var(--red12Light);--colorHover:var(--red11Light);--colorPress:var(--red12Light);--colorFocus:var(--red11Light);--colorTransparent:hsla(358, 75.0%, 59.0%, 0);--placeholderColor:var(--red9Dark);--outlineColor:hsla(358, 75.0%, 59.0%, 0.25);} -@media(prefers-color-scheme:light){ - body{background:var(--background);color:var(--color)} - .t_red {--accentBackground:var(--yellow1Light);--accentColor:var(--yellow12Light);--background0:hsla(359, 100%, 99.4%, 0);--background025:hsla(359, 100%, 99.4%, 0.25);--background05:hsla(359, 100%, 99.4%, 0.5);--background075:hsla(359, 100%, 99.4%, 0.75);--color1:var(--red1Light);--color2:var(--red2Light);--color3:var(--red3Light);--color4:var(--red4Light);--color5:var(--red5Light);--color6:var(--red6Light);--color7:var(--red7Light);--color8:var(--red8Light);--color9:var(--red9Dark);--color10:var(--red10Light);--color11:var(--red11Light);--color12:var(--red12Light);--color0:hsla(358, 75.0%, 59.0%, 0);--color025:hsla(358, 75.0%, 59.0%, 0.25);--color05:hsla(358, 75.0%, 59.0%, 0.5);--color075:hsla(358, 75.0%, 59.0%, 0.75);--background:var(--red1Light);--backgroundHover:hsla(359, 100%, 99.4%, 0.75);--backgroundPress:var(--red2Light);--backgroundFocus:var(--red2Light);--borderColor:var(--red4Light);--borderColorHover:var(--red3Light);--borderColorPress:var(--red5Light);--borderColorFocus:var(--red4Light);--color:var(--red12Light);--colorHover:var(--red11Light);--colorPress:var(--red12Light);--colorFocus:var(--red11Light);--colorTransparent:hsla(358, 75.0%, 59.0%, 0);--placeholderColor:var(--red9Dark);--outlineColor:hsla(358, 75.0%, 59.0%, 0.25);} - } -.t_light_red ::selection{background:var(--color5);color:var(--color11)} -:root.t_light .t_gray {--accentBackground:var(--green1Light);--accentColor:var(--green12Light);--background0:hsla(0, 0%, 99.0%, 0);--background025:hsla(0, 0%, 99.0%, 0.25);--background05:hsla(0, 0%, 99.0%, 0.5);--background075:hsla(0, 0%, 99.0%, 0.75);--color1:var(--gray1Light);--color2:var(--gray2Light);--color3:var(--gray3Light);--color4:var(--gray12Dark);--color5:var(--gray5Light);--color6:var(--gray6Light);--color7:var(--gray7Light);--color8:var(--gray8Light);--color9:var(--gray9Light);--color10:var(--gray10Light);--color11:var(--gray11Light);--color12:var(--gray12Light);--color0:hsla(0, 0%, 56.1%, 0);--color025:hsla(0, 0%, 56.1%, 0.25);--color05:hsla(0, 0%, 56.1%, 0.5);--color075:hsla(0, 0%, 56.1%, 0.75);--background:var(--gray1Light);--backgroundHover:hsla(0, 0%, 99.0%, 0.75);--backgroundPress:var(--gray2Light);--backgroundFocus:var(--gray2Light);--borderColor:var(--gray12Dark);--borderColorHover:var(--gray3Light);--borderColorPress:var(--gray5Light);--borderColorFocus:var(--gray12Dark);--color:var(--gray12Light);--colorHover:var(--gray11Light);--colorPress:var(--gray12Light);--colorFocus:var(--gray11Light);--colorTransparent:hsla(0, 0%, 56.1%, 0);--placeholderColor:var(--gray9Light);--outlineColor:hsla(0, 0%, 56.1%, 0.25);} -@media(prefers-color-scheme:light){ - body{background:var(--background);color:var(--color)} - .t_gray {--accentBackground:var(--green1Light);--accentColor:var(--green12Light);--background0:hsla(0, 0%, 99.0%, 0);--background025:hsla(0, 0%, 99.0%, 0.25);--background05:hsla(0, 0%, 99.0%, 0.5);--background075:hsla(0, 0%, 99.0%, 0.75);--color1:var(--gray1Light);--color2:var(--gray2Light);--color3:var(--gray3Light);--color4:var(--gray12Dark);--color5:var(--gray5Light);--color6:var(--gray6Light);--color7:var(--gray7Light);--color8:var(--gray8Light);--color9:var(--gray9Light);--color10:var(--gray10Light);--color11:var(--gray11Light);--color12:var(--gray12Light);--color0:hsla(0, 0%, 56.1%, 0);--color025:hsla(0, 0%, 56.1%, 0.25);--color05:hsla(0, 0%, 56.1%, 0.5);--color075:hsla(0, 0%, 56.1%, 0.75);--background:var(--gray1Light);--backgroundHover:hsla(0, 0%, 99.0%, 0.75);--backgroundPress:var(--gray2Light);--backgroundFocus:var(--gray2Light);--borderColor:var(--gray12Dark);--borderColorHover:var(--gray3Light);--borderColorPress:var(--gray5Light);--borderColorFocus:var(--gray12Dark);--color:var(--gray12Light);--colorHover:var(--gray11Light);--colorPress:var(--gray12Light);--colorFocus:var(--gray11Light);--colorTransparent:hsla(0, 0%, 56.1%, 0);--placeholderColor:var(--gray9Light);--outlineColor:hsla(0, 0%, 56.1%, 0.25);} - } -.t_light_gray ::selection{background:var(--color5);color:var(--color11)} -:root.t_dark .t_orange {--accentBackground:var(--pink1Light);--accentColor:var(--pink12Light);--background0:hsla(30, 70.0%, 7.2%, 0);--background025:hsla(30, 70.0%, 7.2%, 0.25);--background05:hsla(30, 70.0%, 7.2%, 0.5);--background075:hsla(30, 70.0%, 7.2%, 0.75);--color1:var(--orange1Dark);--color2:var(--orange2Dark);--color3:var(--orange3Dark);--color4:var(--orange4Dark);--color5:var(--orange5Dark);--color6:var(--orange6Dark);--color7:var(--orange7Dark);--color8:var(--orange8Dark);--color9:var(--orange9Dark);--color10:var(--orange10Dark);--color11:var(--orange11Dark);--color12:var(--orange12Dark);--color0:hsla(24, 94.0%, 50.0%, 0);--color025:hsla(24, 94.0%, 50.0%, 0.25);--color05:hsla(24, 94.0%, 50.0%, 0.5);--color075:hsla(24, 94.0%, 50.0%, 0.75);--background:var(--orange1Dark);--backgroundHover:var(--orange2Dark);--backgroundPress:hsla(30, 70.0%, 7.2%, 0.75);--backgroundFocus:hsla(30, 70.0%, 7.2%, 0.75);--borderColor:var(--orange4Dark);--borderColorHover:var(--orange5Dark);--borderColorPress:var(--orange3Dark);--borderColorFocus:var(--orange4Dark);--color:var(--orange12Dark);--colorHover:var(--orange11Dark);--colorPress:var(--orange12Dark);--colorFocus:var(--orange11Dark);--colorTransparent:hsla(24, 94.0%, 50.0%, 0);--placeholderColor:var(--orange9Dark);--outlineColor:hsla(24, 94.0%, 50.0%, 0.25);} -@media(prefers-color-scheme:dark){ - body{background:var(--background);color:var(--color)} - .t_orange {--accentBackground:var(--pink1Light);--accentColor:var(--pink12Light);--background0:hsla(30, 70.0%, 7.2%, 0);--background025:hsla(30, 70.0%, 7.2%, 0.25);--background05:hsla(30, 70.0%, 7.2%, 0.5);--background075:hsla(30, 70.0%, 7.2%, 0.75);--color1:var(--orange1Dark);--color2:var(--orange2Dark);--color3:var(--orange3Dark);--color4:var(--orange4Dark);--color5:var(--orange5Dark);--color6:var(--orange6Dark);--color7:var(--orange7Dark);--color8:var(--orange8Dark);--color9:var(--orange9Dark);--color10:var(--orange10Dark);--color11:var(--orange11Dark);--color12:var(--orange12Dark);--color0:hsla(24, 94.0%, 50.0%, 0);--color025:hsla(24, 94.0%, 50.0%, 0.25);--color05:hsla(24, 94.0%, 50.0%, 0.5);--color075:hsla(24, 94.0%, 50.0%, 0.75);--background:var(--orange1Dark);--backgroundHover:var(--orange2Dark);--backgroundPress:hsla(30, 70.0%, 7.2%, 0.75);--backgroundFocus:hsla(30, 70.0%, 7.2%, 0.75);--borderColor:var(--orange4Dark);--borderColorHover:var(--orange5Dark);--borderColorPress:var(--orange3Dark);--borderColorFocus:var(--orange4Dark);--color:var(--orange12Dark);--colorHover:var(--orange11Dark);--colorPress:var(--orange12Dark);--colorFocus:var(--orange11Dark);--colorTransparent:hsla(24, 94.0%, 50.0%, 0);--placeholderColor:var(--orange9Dark);--outlineColor:hsla(24, 94.0%, 50.0%, 0.25);} - } -.t_dark_orange ::selection{background:var(--color5);color:var(--color11)} -:root.t_dark .t_yellow {--accentBackground:var(--blue1Light);--accentColor:var(--blue12Light);--background0:hsla(45, 100%, 5.5%, 0);--background025:hsla(45, 100%, 5.5%, 0.25);--background05:hsla(45, 100%, 5.5%, 0.5);--background075:hsla(45, 100%, 5.5%, 0.75);--color1:var(--yellow1Dark);--color2:var(--yellow2Dark);--color3:var(--yellow3Dark);--color4:var(--yellow4Dark);--color5:var(--yellow5Dark);--color6:var(--yellow6Dark);--color7:var(--yellow7Dark);--color8:var(--yellow8Dark);--color9:var(--yellow9Dark);--color10:var(--yellow10Dark);--color11:var(--yellow11Dark);--color12:var(--yellow12Dark);--color0:hsla(53, 92.0%, 50.0%, 0);--color025:hsla(53, 92.0%, 50.0%, 0.25);--color05:hsla(53, 92.0%, 50.0%, 0.5);--color075:hsla(53, 92.0%, 50.0%, 0.75);--background:var(--yellow1Dark);--backgroundHover:var(--yellow2Dark);--backgroundPress:hsla(45, 100%, 5.5%, 0.75);--backgroundFocus:hsla(45, 100%, 5.5%, 0.75);--borderColor:var(--yellow4Dark);--borderColorHover:var(--yellow5Dark);--borderColorPress:var(--yellow3Dark);--borderColorFocus:var(--yellow4Dark);--color:var(--yellow12Dark);--colorHover:var(--yellow11Dark);--colorPress:var(--yellow12Dark);--colorFocus:var(--yellow11Dark);--colorTransparent:hsla(53, 92.0%, 50.0%, 0);--placeholderColor:var(--yellow9Dark);--outlineColor:hsla(53, 92.0%, 50.0%, 0.25);} -@media(prefers-color-scheme:dark){ - body{background:var(--background);color:var(--color)} - .t_yellow {--accentBackground:var(--blue1Light);--accentColor:var(--blue12Light);--background0:hsla(45, 100%, 5.5%, 0);--background025:hsla(45, 100%, 5.5%, 0.25);--background05:hsla(45, 100%, 5.5%, 0.5);--background075:hsla(45, 100%, 5.5%, 0.75);--color1:var(--yellow1Dark);--color2:var(--yellow2Dark);--color3:var(--yellow3Dark);--color4:var(--yellow4Dark);--color5:var(--yellow5Dark);--color6:var(--yellow6Dark);--color7:var(--yellow7Dark);--color8:var(--yellow8Dark);--color9:var(--yellow9Dark);--color10:var(--yellow10Dark);--color11:var(--yellow11Dark);--color12:var(--yellow12Dark);--color0:hsla(53, 92.0%, 50.0%, 0);--color025:hsla(53, 92.0%, 50.0%, 0.25);--color05:hsla(53, 92.0%, 50.0%, 0.5);--color075:hsla(53, 92.0%, 50.0%, 0.75);--background:var(--yellow1Dark);--backgroundHover:var(--yellow2Dark);--backgroundPress:hsla(45, 100%, 5.5%, 0.75);--backgroundFocus:hsla(45, 100%, 5.5%, 0.75);--borderColor:var(--yellow4Dark);--borderColorHover:var(--yellow5Dark);--borderColorPress:var(--yellow3Dark);--borderColorFocus:var(--yellow4Dark);--color:var(--yellow12Dark);--colorHover:var(--yellow11Dark);--colorPress:var(--yellow12Dark);--colorFocus:var(--yellow11Dark);--colorTransparent:hsla(53, 92.0%, 50.0%, 0);--placeholderColor:var(--yellow9Dark);--outlineColor:hsla(53, 92.0%, 50.0%, 0.25);} - } -.t_dark_yellow ::selection{background:var(--color5);color:var(--color11)} -:root.t_dark .t_green {--accentBackground:var(--orange1Light);--accentColor:var(--orange12Light);--background0:hsla(146, 30.0%, 7.4%, 0);--background025:hsla(146, 30.0%, 7.4%, 0.25);--background05:hsla(146, 30.0%, 7.4%, 0.5);--background075:hsla(146, 30.0%, 7.4%, 0.75);--color1:var(--green1Dark);--color2:var(--green2Dark);--color3:var(--green3Dark);--color4:var(--green4Dark);--color5:var(--green5Dark);--color6:var(--green6Dark);--color7:var(--green7Dark);--color8:var(--green8Dark);--color9:var(--green9Dark);--color10:var(--green10Dark);--color11:var(--green11Dark);--color12:var(--green12Dark);--color0:hsla(151, 55.0%, 41.5%, 0);--color025:hsla(151, 55.0%, 41.5%, 0.25);--color05:hsla(151, 55.0%, 41.5%, 0.5);--color075:hsla(151, 55.0%, 41.5%, 0.75);--background:var(--green1Dark);--backgroundHover:var(--green2Dark);--backgroundPress:hsla(146, 30.0%, 7.4%, 0.75);--backgroundFocus:hsla(146, 30.0%, 7.4%, 0.75);--borderColor:var(--green4Dark);--borderColorHover:var(--green5Dark);--borderColorPress:var(--green3Dark);--borderColorFocus:var(--green4Dark);--color:var(--green12Dark);--colorHover:var(--green11Dark);--colorPress:var(--green12Dark);--colorFocus:var(--green11Dark);--colorTransparent:hsla(151, 55.0%, 41.5%, 0);--placeholderColor:var(--green9Dark);--outlineColor:hsla(151, 55.0%, 41.5%, 0.25);} -@media(prefers-color-scheme:dark){ - body{background:var(--background);color:var(--color)} - .t_green {--accentBackground:var(--orange1Light);--accentColor:var(--orange12Light);--background0:hsla(146, 30.0%, 7.4%, 0);--background025:hsla(146, 30.0%, 7.4%, 0.25);--background05:hsla(146, 30.0%, 7.4%, 0.5);--background075:hsla(146, 30.0%, 7.4%, 0.75);--color1:var(--green1Dark);--color2:var(--green2Dark);--color3:var(--green3Dark);--color4:var(--green4Dark);--color5:var(--green5Dark);--color6:var(--green6Dark);--color7:var(--green7Dark);--color8:var(--green8Dark);--color9:var(--green9Dark);--color10:var(--green10Dark);--color11:var(--green11Dark);--color12:var(--green12Dark);--color0:hsla(151, 55.0%, 41.5%, 0);--color025:hsla(151, 55.0%, 41.5%, 0.25);--color05:hsla(151, 55.0%, 41.5%, 0.5);--color075:hsla(151, 55.0%, 41.5%, 0.75);--background:var(--green1Dark);--backgroundHover:var(--green2Dark);--backgroundPress:hsla(146, 30.0%, 7.4%, 0.75);--backgroundFocus:hsla(146, 30.0%, 7.4%, 0.75);--borderColor:var(--green4Dark);--borderColorHover:var(--green5Dark);--borderColorPress:var(--green3Dark);--borderColorFocus:var(--green4Dark);--color:var(--green12Dark);--colorHover:var(--green11Dark);--colorPress:var(--green12Dark);--colorFocus:var(--green11Dark);--colorTransparent:hsla(151, 55.0%, 41.5%, 0);--placeholderColor:var(--green9Dark);--outlineColor:hsla(151, 55.0%, 41.5%, 0.25);} - } -.t_dark_green ::selection{background:var(--color5);color:var(--color11)} -:root.t_dark .t_blue {--accentBackground:var(--gray1Light);--accentColor:var(--gray12Light);--background0:hsla(212, 35.0%, 9.2%, 0);--background025:hsla(212, 35.0%, 9.2%, 0.25);--background05:hsla(212, 35.0%, 9.2%, 0.5);--background075:hsla(212, 35.0%, 9.2%, 0.75);--color1:var(--blue1Dark);--color2:var(--blue2Dark);--color3:var(--blue3Dark);--color4:var(--blue4Dark);--color5:var(--blue5Dark);--color6:var(--blue6Dark);--color7:var(--blue7Dark);--color8:var(--blue8Dark);--color9:var(--blue9Dark);--color10:var(--blue10Dark);--color11:var(--blue11Dark);--color12:var(--blue12Dark);--color0:hsla(206, 100%, 50.0%, 0);--color025:hsla(206, 100%, 50.0%, 0.25);--color05:hsla(206, 100%, 50.0%, 0.5);--color075:hsla(206, 100%, 50.0%, 0.75);--background:var(--blue1Dark);--backgroundHover:var(--blue2Dark);--backgroundPress:hsla(212, 35.0%, 9.2%, 0.75);--backgroundFocus:hsla(212, 35.0%, 9.2%, 0.75);--borderColor:var(--blue4Dark);--borderColorHover:var(--blue5Dark);--borderColorPress:var(--blue3Dark);--borderColorFocus:var(--blue4Dark);--color:var(--blue12Dark);--colorHover:var(--blue11Dark);--colorPress:var(--blue12Dark);--colorFocus:var(--blue11Dark);--colorTransparent:hsla(206, 100%, 50.0%, 0);--placeholderColor:var(--blue9Dark);--outlineColor:hsla(206, 100%, 50.0%, 0.25);} -@media(prefers-color-scheme:dark){ - body{background:var(--background);color:var(--color)} - .t_blue {--accentBackground:var(--gray1Light);--accentColor:var(--gray12Light);--background0:hsla(212, 35.0%, 9.2%, 0);--background025:hsla(212, 35.0%, 9.2%, 0.25);--background05:hsla(212, 35.0%, 9.2%, 0.5);--background075:hsla(212, 35.0%, 9.2%, 0.75);--color1:var(--blue1Dark);--color2:var(--blue2Dark);--color3:var(--blue3Dark);--color4:var(--blue4Dark);--color5:var(--blue5Dark);--color6:var(--blue6Dark);--color7:var(--blue7Dark);--color8:var(--blue8Dark);--color9:var(--blue9Dark);--color10:var(--blue10Dark);--color11:var(--blue11Dark);--color12:var(--blue12Dark);--color0:hsla(206, 100%, 50.0%, 0);--color025:hsla(206, 100%, 50.0%, 0.25);--color05:hsla(206, 100%, 50.0%, 0.5);--color075:hsla(206, 100%, 50.0%, 0.75);--background:var(--blue1Dark);--backgroundHover:var(--blue2Dark);--backgroundPress:hsla(212, 35.0%, 9.2%, 0.75);--backgroundFocus:hsla(212, 35.0%, 9.2%, 0.75);--borderColor:var(--blue4Dark);--borderColorHover:var(--blue5Dark);--borderColorPress:var(--blue3Dark);--borderColorFocus:var(--blue4Dark);--color:var(--blue12Dark);--colorHover:var(--blue11Dark);--colorPress:var(--blue12Dark);--colorFocus:var(--blue11Dark);--colorTransparent:hsla(206, 100%, 50.0%, 0);--placeholderColor:var(--blue9Dark);--outlineColor:hsla(206, 100%, 50.0%, 0.25);} - } -.t_dark_blue ::selection{background:var(--color5);color:var(--color11)} -:root.t_dark .t_purple {--accentBackground:var(--red1Light);--accentColor:var(--red12Light);--background0:hsla(284, 20.0%, 9.6%, 0);--background025:hsla(284, 20.0%, 9.6%, 0.25);--background05:hsla(284, 20.0%, 9.6%, 0.5);--background075:hsla(284, 20.0%, 9.6%, 0.75);--color1:var(--purple1Dark);--color2:var(--purple2Dark);--color3:var(--purple3Dark);--color4:var(--purple4Dark);--color5:var(--purple5Dark);--color6:var(--purple6Dark);--color7:var(--purple7Dark);--color8:var(--purple8Dark);--color9:var(--purple9Dark);--color10:var(--purple10Dark);--color11:var(--purple11Dark);--color12:var(--purple12Dark);--color0:hsla(272, 51.0%, 54.0%, 0);--color025:hsla(272, 51.0%, 54.0%, 0.25);--color05:hsla(272, 51.0%, 54.0%, 0.5);--color075:hsla(272, 51.0%, 54.0%, 0.75);--background:var(--purple1Dark);--backgroundHover:var(--purple2Dark);--backgroundPress:hsla(284, 20.0%, 9.6%, 0.75);--backgroundFocus:hsla(284, 20.0%, 9.6%, 0.75);--borderColor:var(--purple4Dark);--borderColorHover:var(--purple5Dark);--borderColorPress:var(--purple3Dark);--borderColorFocus:var(--purple4Dark);--color:var(--purple12Dark);--colorHover:var(--purple11Dark);--colorPress:var(--purple12Dark);--colorFocus:var(--purple11Dark);--colorTransparent:hsla(272, 51.0%, 54.0%, 0);--placeholderColor:var(--purple9Dark);--outlineColor:hsla(272, 51.0%, 54.0%, 0.25);} -@media(prefers-color-scheme:dark){ - body{background:var(--background);color:var(--color)} - .t_purple {--accentBackground:var(--red1Light);--accentColor:var(--red12Light);--background0:hsla(284, 20.0%, 9.6%, 0);--background025:hsla(284, 20.0%, 9.6%, 0.25);--background05:hsla(284, 20.0%, 9.6%, 0.5);--background075:hsla(284, 20.0%, 9.6%, 0.75);--color1:var(--purple1Dark);--color2:var(--purple2Dark);--color3:var(--purple3Dark);--color4:var(--purple4Dark);--color5:var(--purple5Dark);--color6:var(--purple6Dark);--color7:var(--purple7Dark);--color8:var(--purple8Dark);--color9:var(--purple9Dark);--color10:var(--purple10Dark);--color11:var(--purple11Dark);--color12:var(--purple12Dark);--color0:hsla(272, 51.0%, 54.0%, 0);--color025:hsla(272, 51.0%, 54.0%, 0.25);--color05:hsla(272, 51.0%, 54.0%, 0.5);--color075:hsla(272, 51.0%, 54.0%, 0.75);--background:var(--purple1Dark);--backgroundHover:var(--purple2Dark);--backgroundPress:hsla(284, 20.0%, 9.6%, 0.75);--backgroundFocus:hsla(284, 20.0%, 9.6%, 0.75);--borderColor:var(--purple4Dark);--borderColorHover:var(--purple5Dark);--borderColorPress:var(--purple3Dark);--borderColorFocus:var(--purple4Dark);--color:var(--purple12Dark);--colorHover:var(--purple11Dark);--colorPress:var(--purple12Dark);--colorFocus:var(--purple11Dark);--colorTransparent:hsla(272, 51.0%, 54.0%, 0);--placeholderColor:var(--purple9Dark);--outlineColor:hsla(272, 51.0%, 54.0%, 0.25);} - } -.t_dark_purple ::selection{background:var(--color5);color:var(--color11)} -:root.t_dark .t_pink {--accentBackground:var(--purple1Light);--accentColor:var(--purple12Light);--background0:hsla(318, 25.0%, 9.6%, 0);--background025:hsla(318, 25.0%, 9.6%, 0.25);--background05:hsla(318, 25.0%, 9.6%, 0.5);--background075:hsla(318, 25.0%, 9.6%, 0.75);--color1:var(--pink1Dark);--color2:var(--pink2Dark);--color3:var(--pink3Dark);--color4:var(--pink4Dark);--color5:var(--pink5Dark);--color6:var(--pink6Dark);--color7:var(--pink7Dark);--color8:var(--pink8Dark);--color9:var(--pink9Dark);--color10:var(--pink10Dark);--color11:var(--pink11Dark);--color12:var(--pink12Dark);--color0:hsla(322, 65.0%, 54.5%, 0);--color025:hsla(322, 65.0%, 54.5%, 0.25);--color05:hsla(322, 65.0%, 54.5%, 0.5);--color075:hsla(322, 65.0%, 54.5%, 0.75);--background:var(--pink1Dark);--backgroundHover:var(--pink2Dark);--backgroundPress:hsla(318, 25.0%, 9.6%, 0.75);--backgroundFocus:hsla(318, 25.0%, 9.6%, 0.75);--borderColor:var(--pink4Dark);--borderColorHover:var(--pink5Dark);--borderColorPress:var(--pink3Dark);--borderColorFocus:var(--pink4Dark);--color:var(--pink12Dark);--colorHover:var(--pink11Dark);--colorPress:var(--pink12Dark);--colorFocus:var(--pink11Dark);--colorTransparent:hsla(322, 65.0%, 54.5%, 0);--placeholderColor:var(--pink9Dark);--outlineColor:hsla(322, 65.0%, 54.5%, 0.25);} -@media(prefers-color-scheme:dark){ - body{background:var(--background);color:var(--color)} - .t_pink {--accentBackground:var(--purple1Light);--accentColor:var(--purple12Light);--background0:hsla(318, 25.0%, 9.6%, 0);--background025:hsla(318, 25.0%, 9.6%, 0.25);--background05:hsla(318, 25.0%, 9.6%, 0.5);--background075:hsla(318, 25.0%, 9.6%, 0.75);--color1:var(--pink1Dark);--color2:var(--pink2Dark);--color3:var(--pink3Dark);--color4:var(--pink4Dark);--color5:var(--pink5Dark);--color6:var(--pink6Dark);--color7:var(--pink7Dark);--color8:var(--pink8Dark);--color9:var(--pink9Dark);--color10:var(--pink10Dark);--color11:var(--pink11Dark);--color12:var(--pink12Dark);--color0:hsla(322, 65.0%, 54.5%, 0);--color025:hsla(322, 65.0%, 54.5%, 0.25);--color05:hsla(322, 65.0%, 54.5%, 0.5);--color075:hsla(322, 65.0%, 54.5%, 0.75);--background:var(--pink1Dark);--backgroundHover:var(--pink2Dark);--backgroundPress:hsla(318, 25.0%, 9.6%, 0.75);--backgroundFocus:hsla(318, 25.0%, 9.6%, 0.75);--borderColor:var(--pink4Dark);--borderColorHover:var(--pink5Dark);--borderColorPress:var(--pink3Dark);--borderColorFocus:var(--pink4Dark);--color:var(--pink12Dark);--colorHover:var(--pink11Dark);--colorPress:var(--pink12Dark);--colorFocus:var(--pink11Dark);--colorTransparent:hsla(322, 65.0%, 54.5%, 0);--placeholderColor:var(--pink9Dark);--outlineColor:hsla(322, 65.0%, 54.5%, 0.25);} - } -.t_dark_pink ::selection{background:var(--color5);color:var(--color11)} -:root.t_dark .t_red {--accentBackground:var(--yellow1Light);--accentColor:var(--yellow12Light);--background0:hsla(353, 23.0%, 9.8%, 0);--background025:hsla(353, 23.0%, 9.8%, 0.25);--background05:hsla(353, 23.0%, 9.8%, 0.5);--background075:hsla(353, 23.0%, 9.8%, 0.75);--color1:var(--red1Dark);--color2:var(--red2Dark);--color3:var(--red3Dark);--color4:var(--red4Dark);--color5:var(--red5Dark);--color6:var(--red6Dark);--color7:var(--red7Dark);--color8:var(--red8Dark);--color9:var(--red9Dark);--color10:var(--red10Dark);--color11:var(--red11Dark);--color12:var(--red12Dark);--color0:hsla(358, 75.0%, 59.0%, 0);--color025:hsla(358, 75.0%, 59.0%, 0.25);--color05:hsla(358, 75.0%, 59.0%, 0.5);--color075:hsla(358, 75.0%, 59.0%, 0.75);--background:var(--red1Dark);--backgroundHover:var(--red2Dark);--backgroundPress:hsla(353, 23.0%, 9.8%, 0.75);--backgroundFocus:hsla(353, 23.0%, 9.8%, 0.75);--borderColor:var(--red4Dark);--borderColorHover:var(--red5Dark);--borderColorPress:var(--red3Dark);--borderColorFocus:var(--red4Dark);--color:var(--red12Dark);--colorHover:var(--red11Dark);--colorPress:var(--red12Dark);--colorFocus:var(--red11Dark);--colorTransparent:hsla(358, 75.0%, 59.0%, 0);--placeholderColor:var(--red9Dark);--outlineColor:hsla(358, 75.0%, 59.0%, 0.25);} -@media(prefers-color-scheme:dark){ - body{background:var(--background);color:var(--color)} - .t_red {--accentBackground:var(--yellow1Light);--accentColor:var(--yellow12Light);--background0:hsla(353, 23.0%, 9.8%, 0);--background025:hsla(353, 23.0%, 9.8%, 0.25);--background05:hsla(353, 23.0%, 9.8%, 0.5);--background075:hsla(353, 23.0%, 9.8%, 0.75);--color1:var(--red1Dark);--color2:var(--red2Dark);--color3:var(--red3Dark);--color4:var(--red4Dark);--color5:var(--red5Dark);--color6:var(--red6Dark);--color7:var(--red7Dark);--color8:var(--red8Dark);--color9:var(--red9Dark);--color10:var(--red10Dark);--color11:var(--red11Dark);--color12:var(--red12Dark);--color0:hsla(358, 75.0%, 59.0%, 0);--color025:hsla(358, 75.0%, 59.0%, 0.25);--color05:hsla(358, 75.0%, 59.0%, 0.5);--color075:hsla(358, 75.0%, 59.0%, 0.75);--background:var(--red1Dark);--backgroundHover:var(--red2Dark);--backgroundPress:hsla(353, 23.0%, 9.8%, 0.75);--backgroundFocus:hsla(353, 23.0%, 9.8%, 0.75);--borderColor:var(--red4Dark);--borderColorHover:var(--red5Dark);--borderColorPress:var(--red3Dark);--borderColorFocus:var(--red4Dark);--color:var(--red12Dark);--colorHover:var(--red11Dark);--colorPress:var(--red12Dark);--colorFocus:var(--red11Dark);--colorTransparent:hsla(358, 75.0%, 59.0%, 0);--placeholderColor:var(--red9Dark);--outlineColor:hsla(358, 75.0%, 59.0%, 0.25);} - } -.t_dark_red ::selection{background:var(--color5);color:var(--color11)} -:root.t_dark .t_gray {--accentBackground:var(--green1Light);--accentColor:var(--green12Light);--background0:hsla(0, 0%, 8.5%, 0);--background025:hsla(0, 0%, 8.5%, 0.25);--background05:hsla(0, 0%, 8.5%, 0.5);--background075:hsla(0, 0%, 8.5%, 0.75);--color1:var(--gray1Dark);--color2:var(--gray2Dark);--color3:var(--gray3Dark);--color4:var(--gray4Dark);--color5:var(--gray5Dark);--color6:var(--gray6Dark);--color7:var(--gray7Dark);--color8:var(--gray8Dark);--color9:var(--gray9Dark);--color10:var(--gray10Dark);--color11:var(--gray11Dark);--color12:var(--gray12Dark);--color0:hsla(0, 0%, 43.9%, 0);--color025:hsla(0, 0%, 43.9%, 0.25);--color05:hsla(0, 0%, 43.9%, 0.5);--color075:hsla(0, 0%, 43.9%, 0.75);--background:var(--gray1Dark);--backgroundHover:var(--gray2Dark);--backgroundPress:hsla(0, 0%, 8.5%, 0.75);--backgroundFocus:hsla(0, 0%, 8.5%, 0.75);--borderColor:var(--gray4Dark);--borderColorHover:var(--gray5Dark);--borderColorPress:var(--gray3Dark);--borderColorFocus:var(--gray4Dark);--color:var(--gray12Dark);--colorHover:var(--gray11Dark);--colorPress:var(--gray12Dark);--colorFocus:var(--gray11Dark);--colorTransparent:hsla(0, 0%, 43.9%, 0);--placeholderColor:var(--gray9Dark);--outlineColor:hsla(0, 0%, 43.9%, 0.25);} -@media(prefers-color-scheme:dark){ - body{background:var(--background);color:var(--color)} - .t_gray {--accentBackground:var(--green1Light);--accentColor:var(--green12Light);--background0:hsla(0, 0%, 8.5%, 0);--background025:hsla(0, 0%, 8.5%, 0.25);--background05:hsla(0, 0%, 8.5%, 0.5);--background075:hsla(0, 0%, 8.5%, 0.75);--color1:var(--gray1Dark);--color2:var(--gray2Dark);--color3:var(--gray3Dark);--color4:var(--gray4Dark);--color5:var(--gray5Dark);--color6:var(--gray6Dark);--color7:var(--gray7Dark);--color8:var(--gray8Dark);--color9:var(--gray9Dark);--color10:var(--gray10Dark);--color11:var(--gray11Dark);--color12:var(--gray12Dark);--color0:hsla(0, 0%, 43.9%, 0);--color025:hsla(0, 0%, 43.9%, 0.25);--color05:hsla(0, 0%, 43.9%, 0.5);--color075:hsla(0, 0%, 43.9%, 0.75);--background:var(--gray1Dark);--backgroundHover:var(--gray2Dark);--backgroundPress:hsla(0, 0%, 8.5%, 0.75);--backgroundFocus:hsla(0, 0%, 8.5%, 0.75);--borderColor:var(--gray4Dark);--borderColorHover:var(--gray5Dark);--borderColorPress:var(--gray3Dark);--borderColorFocus:var(--gray4Dark);--color:var(--gray12Dark);--colorHover:var(--gray11Dark);--colorPress:var(--gray12Dark);--colorFocus:var(--gray11Dark);--colorTransparent:hsla(0, 0%, 43.9%, 0);--placeholderColor:var(--gray9Dark);--outlineColor:hsla(0, 0%, 43.9%, 0.25);} - } -.t_dark_gray ::selection{background:var(--color5);color:var(--color11)} -:root.t_light .t_alt1 {--color:var(--white11);--colorHover:var(--white10);--colorPress:var(--white11);--colorFocus:var(--white10);} -@media(prefers-color-scheme:light){ - body{color:var(--color)} - .t_alt1 {--color:var(--white11);--colorHover:var(--white10);--colorPress:var(--white11);--colorFocus:var(--white10);} - } -:root.t_light .t_alt2 {--color:var(--white10);--colorHover:var(--gray9Light);--colorPress:var(--white10);--colorFocus:var(--gray9Light);} -@media(prefers-color-scheme:light){ - body{color:var(--color)} - .t_alt2 {--color:var(--white10);--colorHover:var(--gray9Light);--colorPress:var(--white10);--colorFocus:var(--gray9Light);} - } -:root.t_light .t_active, :root.t_light .t_active_SliderTrackActive, :root.t_light .t_Button, :root.t_light .t_SliderTrackActive, :root.t_light .t_surface3 {--background:var(--white4);--backgroundHover:var(--white3);--backgroundPress:var(--white5);--backgroundFocus:var(--white5);--borderColor:var(--white7);--borderColorHover:var(--white6);--borderColorFocus:var(--white7);--borderColorPress:var(--white8);} -@media(prefers-color-scheme:light){ - body{background:var(--background);} - .t_active, .t_active_SliderTrackActive, .t_Button, .t_SliderTrackActive, .t_surface3 {--background:var(--white4);--backgroundHover:var(--white3);--backgroundPress:var(--white5);--backgroundFocus:var(--white5);--borderColor:var(--white7);--borderColorHover:var(--white6);--borderColorFocus:var(--white7);--borderColorPress:var(--white8);} - } -:root.t_light .t_active_ListItem, :root.t_light .t_active_Progress, :root.t_light .t_active_SliderTrack, :root.t_light .t_active_TooltipArrow, :root.t_light .t_Card, :root.t_light .t_Input, :root.t_light .t_ListItem, :root.t_light .t_Progress, :root.t_light .t_SelectTrigger, :root.t_light .t_SliderTrack, :root.t_light .t_surface1, :root.t_light .t_TextArea, :root.t_light .t_TooltipArrow {--background:var(--white2);--backgroundHover:var(--black12);--backgroundPress:var(--white3);--backgroundFocus:var(--white3);--borderColor:var(--white5);--borderColorHover:var(--white4);--borderColorFocus:var(--white5);--borderColorPress:var(--white6);} -@media(prefers-color-scheme:light){ - body{background:var(--background);} - .t_active_ListItem, .t_active_Progress, .t_active_SliderTrack, .t_active_TooltipArrow, .t_Card, .t_Input, .t_ListItem, .t_Progress, .t_SelectTrigger, .t_SliderTrack, .t_surface1, .t_TextArea, .t_TooltipArrow {--background:var(--white2);--backgroundHover:var(--black12);--backgroundPress:var(--white3);--backgroundFocus:var(--white3);--borderColor:var(--white5);--borderColorHover:var(--white4);--borderColorFocus:var(--white5);--borderColorPress:var(--white6);} - } -:root.t_light .t_Checkbox, :root.t_light .t_RadioGroupItem, :root.t_light .t_surface2, :root.t_light .t_Switch, :root.t_light .t_TooltipContent {--background:var(--white3);--backgroundHover:var(--white2);--backgroundPress:var(--white4);--backgroundFocus:var(--white4);--borderColor:var(--white6);--borderColorHover:var(--white5);--borderColorFocus:var(--white6);--borderColorPress:var(--white7);} -@media(prefers-color-scheme:light){ - body{background:var(--background);} - .t_Checkbox, .t_RadioGroupItem, .t_surface2, .t_Switch, .t_TooltipContent {--background:var(--white3);--backgroundHover:var(--white2);--backgroundPress:var(--white4);--backgroundFocus:var(--white4);--borderColor:var(--white6);--borderColorHover:var(--white5);--borderColorFocus:var(--white6);--borderColorPress:var(--white7);} - } -:root.t_light .t_active_Button, :root.t_light .t_active_Card, :root.t_light .t_active_Checkbox, :root.t_light .t_active_Input, :root.t_light .t_active_RadioGroupItem, :root.t_light .t_active_SelectTrigger, :root.t_light .t_active_Switch, :root.t_light .t_active_TextArea, :root.t_light .t_active_TooltipContent, :root.t_light .t_surface4 {--background:var(--white6);--backgroundHover:var(--white6);--backgroundPress:var(--white7);--backgroundFocus:var(--white7);--borderColor:var(--white6);--borderColorHover:var(--white6);--borderColorFocus:var(--white7);--borderColorPress:var(--white7);} -@media(prefers-color-scheme:light){ - body{background:var(--background);} - .t_active_Button, .t_active_Card, .t_active_Checkbox, .t_active_Input, .t_active_RadioGroupItem, .t_active_SelectTrigger, .t_active_Switch, .t_active_TextArea, .t_active_TooltipContent, .t_surface4 {--background:var(--white6);--backgroundHover:var(--white6);--backgroundPress:var(--white7);--backgroundFocus:var(--white7);--borderColor:var(--white6);--borderColorHover:var(--white6);--borderColorFocus:var(--white7);--borderColorPress:var(--white7);} - } -:root.t_dark .t_alt1 {--color:var(--black11);--colorHover:var(--black10);--colorPress:var(--black11);--colorFocus:var(--black10);} -@media(prefers-color-scheme:dark){ - body{color:var(--color)} - .t_alt1 {--color:var(--black11);--colorHover:var(--black10);--colorPress:var(--black11);--colorFocus:var(--black10);} - } -:root.t_dark .t_alt2 {--color:var(--black10);--colorHover:var(--black9);--colorPress:var(--black10);--colorFocus:var(--black9);} -@media(prefers-color-scheme:dark){ - body{color:var(--color)} - .t_alt2 {--color:var(--black10);--colorHover:var(--black9);--colorPress:var(--black10);--colorFocus:var(--black9);} - } -:root.t_dark .t_active, :root.t_dark .t_active_SliderTrackActive, :root.t_dark .t_Button, :root.t_dark .t_SliderTrackActive, :root.t_dark .t_surface3 {--background:var(--black4);--backgroundHover:var(--black5);--backgroundPress:var(--black3);--backgroundFocus:var(--black3);--borderColor:var(--black7);--borderColorHover:var(--black8);--borderColorFocus:var(--black7);--borderColorPress:var(--black6);} -@media(prefers-color-scheme:dark){ - body{background:var(--background);} - .t_active, .t_active_SliderTrackActive, .t_Button, .t_SliderTrackActive, .t_surface3 {--background:var(--black4);--backgroundHover:var(--black5);--backgroundPress:var(--black3);--backgroundFocus:var(--black3);--borderColor:var(--black7);--borderColorHover:var(--black8);--borderColorFocus:var(--black7);--borderColorPress:var(--black6);} - } -:root.t_dark .t_active_ListItem, :root.t_dark .t_active_Progress, :root.t_dark .t_active_SliderTrack, :root.t_dark .t_active_TooltipArrow, :root.t_dark .t_Card, :root.t_dark .t_Input, :root.t_dark .t_ListItem, :root.t_dark .t_Progress, :root.t_dark .t_SelectTrigger, :root.t_dark .t_SliderTrack, :root.t_dark .t_surface1, :root.t_dark .t_TextArea, :root.t_dark .t_TooltipArrow {--background:var(--black2);--backgroundHover:var(--black3);--backgroundPress:var(--black1);--backgroundFocus:var(--black1);--borderColor:var(--black5);--borderColorHover:var(--black6);--borderColorFocus:var(--black5);--borderColorPress:var(--black4);} -@media(prefers-color-scheme:dark){ - body{background:var(--background);} - .t_active_ListItem, .t_active_Progress, .t_active_SliderTrack, .t_active_TooltipArrow, .t_Card, .t_Input, .t_ListItem, .t_Progress, .t_SelectTrigger, .t_SliderTrack, .t_surface1, .t_TextArea, .t_TooltipArrow {--background:var(--black2);--backgroundHover:var(--black3);--backgroundPress:var(--black1);--backgroundFocus:var(--black1);--borderColor:var(--black5);--borderColorHover:var(--black6);--borderColorFocus:var(--black5);--borderColorPress:var(--black4);} - } -:root.t_dark .t_Checkbox, :root.t_dark .t_RadioGroupItem, :root.t_dark .t_surface2, :root.t_dark .t_Switch, :root.t_dark .t_TooltipContent {--background:var(--black3);--backgroundHover:var(--black4);--backgroundPress:var(--black2);--backgroundFocus:var(--black2);--borderColor:var(--black6);--borderColorHover:var(--black7);--borderColorFocus:var(--black6);--borderColorPress:var(--black5);} -@media(prefers-color-scheme:dark){ - body{background:var(--background);} - .t_Checkbox, .t_RadioGroupItem, .t_surface2, .t_Switch, .t_TooltipContent {--background:var(--black3);--backgroundHover:var(--black4);--backgroundPress:var(--black2);--backgroundFocus:var(--black2);--borderColor:var(--black6);--borderColorHover:var(--black7);--borderColorFocus:var(--black6);--borderColorPress:var(--black5);} - } -:root.t_dark .t_active_Button, :root.t_dark .t_active_Card, :root.t_dark .t_active_Checkbox, :root.t_dark .t_active_Input, :root.t_dark .t_active_RadioGroupItem, :root.t_dark .t_active_SelectTrigger, :root.t_dark .t_active_Switch, :root.t_dark .t_active_TextArea, :root.t_dark .t_active_TooltipContent, :root.t_dark .t_surface4 {--background:var(--black6);--backgroundHover:var(--black6);--backgroundPress:var(--black5);--backgroundFocus:var(--black5);--borderColor:var(--black6);--borderColorHover:var(--black6);--borderColorFocus:var(--black5);--borderColorPress:var(--black5);} -@media(prefers-color-scheme:dark){ - body{background:var(--background);} - .t_active_Button, .t_active_Card, .t_active_Checkbox, .t_active_Input, .t_active_RadioGroupItem, .t_active_SelectTrigger, .t_active_Switch, .t_active_TextArea, .t_active_TooltipContent, .t_surface4 {--background:var(--black6);--backgroundHover:var(--black6);--backgroundPress:var(--black5);--backgroundFocus:var(--black5);--borderColor:var(--black6);--borderColorHover:var(--black6);--borderColorFocus:var(--black5);--borderColorPress:var(--black5);} - } -:root.t_light .t_orange_alt1 {--color:var(--orange11Light);--colorHover:var(--orange10Light);--colorPress:var(--orange11Light);--colorFocus:var(--orange10Light);} -@media(prefers-color-scheme:light){ - body{color:var(--color)} - .t_orange_alt1 {--color:var(--orange11Light);--colorHover:var(--orange10Light);--colorPress:var(--orange11Light);--colorFocus:var(--orange10Light);} - } -:root.t_light .t_orange_alt2 {--color:var(--orange10Light);--colorHover:var(--orange9Dark);--colorPress:var(--orange10Light);--colorFocus:var(--orange9Dark);} -@media(prefers-color-scheme:light){ - body{color:var(--color)} - .t_orange_alt2 {--color:var(--orange10Light);--colorHover:var(--orange9Dark);--colorPress:var(--orange10Light);--colorFocus:var(--orange9Dark);} - } -:root.t_light .t_orange_active, :root.t_light .t_orange_active_SliderTrackActive, :root.t_light .t_orange_Button, :root.t_light .t_orange_SliderTrackActive, :root.t_light .t_orange_surface3 {--background:var(--orange4Light);--backgroundHover:var(--orange3Light);--backgroundPress:var(--orange5Light);--backgroundFocus:var(--orange5Light);--borderColor:var(--orange7Light);--borderColorHover:var(--orange6Light);--borderColorFocus:var(--orange7Light);--borderColorPress:var(--orange8Light);} -@media(prefers-color-scheme:light){ - body{background:var(--background);} - .t_orange_active, .t_orange_active_SliderTrackActive, .t_orange_Button, .t_orange_SliderTrackActive, .t_orange_surface3 {--background:var(--orange4Light);--backgroundHover:var(--orange3Light);--backgroundPress:var(--orange5Light);--backgroundFocus:var(--orange5Light);--borderColor:var(--orange7Light);--borderColorHover:var(--orange6Light);--borderColorFocus:var(--orange7Light);--borderColorPress:var(--orange8Light);} - } -:root.t_light .t_orange_active_ListItem, :root.t_light .t_orange_active_Progress, :root.t_light .t_orange_active_SliderTrack, :root.t_light .t_orange_active_TooltipArrow, :root.t_light .t_orange_Card, :root.t_light .t_orange_Input, :root.t_light .t_orange_ListItem, :root.t_light .t_orange_Progress, :root.t_light .t_orange_SelectTrigger, :root.t_light .t_orange_SliderTrack, :root.t_light .t_orange_surface1, :root.t_light .t_orange_TextArea, :root.t_light .t_orange_TooltipArrow {--background:var(--orange2Light);--backgroundHover:var(--orange1Light);--backgroundPress:var(--orange3Light);--backgroundFocus:var(--orange3Light);--borderColor:var(--orange5Light);--borderColorHover:var(--orange4Light);--borderColorFocus:var(--orange5Light);--borderColorPress:var(--orange6Light);} -@media(prefers-color-scheme:light){ - body{background:var(--background);} - .t_orange_active_ListItem, .t_orange_active_Progress, .t_orange_active_SliderTrack, .t_orange_active_TooltipArrow, .t_orange_Card, .t_orange_Input, .t_orange_ListItem, .t_orange_Progress, .t_orange_SelectTrigger, .t_orange_SliderTrack, .t_orange_surface1, .t_orange_TextArea, .t_orange_TooltipArrow {--background:var(--orange2Light);--backgroundHover:var(--orange1Light);--backgroundPress:var(--orange3Light);--backgroundFocus:var(--orange3Light);--borderColor:var(--orange5Light);--borderColorHover:var(--orange4Light);--borderColorFocus:var(--orange5Light);--borderColorPress:var(--orange6Light);} - } -:root.t_light .t_orange_Checkbox, :root.t_light .t_orange_RadioGroupItem, :root.t_light .t_orange_surface2, :root.t_light .t_orange_Switch, :root.t_light .t_orange_TooltipContent {--background:var(--orange3Light);--backgroundHover:var(--orange2Light);--backgroundPress:var(--orange4Light);--backgroundFocus:var(--orange4Light);--borderColor:var(--orange6Light);--borderColorHover:var(--orange5Light);--borderColorFocus:var(--orange6Light);--borderColorPress:var(--orange7Light);} -@media(prefers-color-scheme:light){ - body{background:var(--background);} - .t_orange_Checkbox, .t_orange_RadioGroupItem, .t_orange_surface2, .t_orange_Switch, .t_orange_TooltipContent {--background:var(--orange3Light);--backgroundHover:var(--orange2Light);--backgroundPress:var(--orange4Light);--backgroundFocus:var(--orange4Light);--borderColor:var(--orange6Light);--borderColorHover:var(--orange5Light);--borderColorFocus:var(--orange6Light);--borderColorPress:var(--orange7Light);} - } -:root.t_light .t_orange_active_Button, :root.t_light .t_orange_active_Card, :root.t_light .t_orange_active_Checkbox, :root.t_light .t_orange_active_Input, :root.t_light .t_orange_active_RadioGroupItem, :root.t_light .t_orange_active_SelectTrigger, :root.t_light .t_orange_active_Switch, :root.t_light .t_orange_active_TextArea, :root.t_light .t_orange_active_TooltipContent, :root.t_light .t_orange_surface4 {--background:var(--orange6Light);--backgroundHover:var(--orange6Light);--backgroundPress:var(--orange7Light);--backgroundFocus:var(--orange7Light);--borderColor:var(--orange6Light);--borderColorHover:var(--orange6Light);--borderColorFocus:var(--orange7Light);--borderColorPress:var(--orange7Light);} -@media(prefers-color-scheme:light){ - body{background:var(--background);} - .t_orange_active_Button, .t_orange_active_Card, .t_orange_active_Checkbox, .t_orange_active_Input, .t_orange_active_RadioGroupItem, .t_orange_active_SelectTrigger, .t_orange_active_Switch, .t_orange_active_TextArea, .t_orange_active_TooltipContent, .t_orange_surface4 {--background:var(--orange6Light);--backgroundHover:var(--orange6Light);--backgroundPress:var(--orange7Light);--backgroundFocus:var(--orange7Light);--borderColor:var(--orange6Light);--borderColorHover:var(--orange6Light);--borderColorFocus:var(--orange7Light);--borderColorPress:var(--orange7Light);} - } -:root.t_light .t_yellow_alt1 {--color:var(--yellow11Light);--colorHover:var(--yellow10Light);--colorPress:var(--yellow11Light);--colorFocus:var(--yellow10Light);} -@media(prefers-color-scheme:light){ - body{color:var(--color)} - .t_yellow_alt1 {--color:var(--yellow11Light);--colorHover:var(--yellow10Light);--colorPress:var(--yellow11Light);--colorFocus:var(--yellow10Light);} - } -:root.t_light .t_yellow_alt2 {--color:var(--yellow10Light);--colorHover:var(--yellow9Dark);--colorPress:var(--yellow10Light);--colorFocus:var(--yellow9Dark);} -@media(prefers-color-scheme:light){ - body{color:var(--color)} - .t_yellow_alt2 {--color:var(--yellow10Light);--colorHover:var(--yellow9Dark);--colorPress:var(--yellow10Light);--colorFocus:var(--yellow9Dark);} - } -:root.t_light .t_yellow_active, :root.t_light .t_yellow_active_SliderTrackActive, :root.t_light .t_yellow_Button, :root.t_light .t_yellow_SliderTrackActive, :root.t_light .t_yellow_surface3 {--background:var(--yellow4Light);--backgroundHover:var(--yellow3Light);--backgroundPress:var(--yellow5Light);--backgroundFocus:var(--yellow5Light);--borderColor:var(--yellow7Light);--borderColorHover:var(--yellow6Light);--borderColorFocus:var(--yellow7Light);--borderColorPress:var(--yellow8Light);} -@media(prefers-color-scheme:light){ - body{background:var(--background);} - .t_yellow_active, .t_yellow_active_SliderTrackActive, .t_yellow_Button, .t_yellow_SliderTrackActive, .t_yellow_surface3 {--background:var(--yellow4Light);--backgroundHover:var(--yellow3Light);--backgroundPress:var(--yellow5Light);--backgroundFocus:var(--yellow5Light);--borderColor:var(--yellow7Light);--borderColorHover:var(--yellow6Light);--borderColorFocus:var(--yellow7Light);--borderColorPress:var(--yellow8Light);} - } -:root.t_light .t_yellow_active_ListItem, :root.t_light .t_yellow_active_Progress, :root.t_light .t_yellow_active_SliderTrack, :root.t_light .t_yellow_active_TooltipArrow, :root.t_light .t_yellow_Card, :root.t_light .t_yellow_Input, :root.t_light .t_yellow_ListItem, :root.t_light .t_yellow_Progress, :root.t_light .t_yellow_SelectTrigger, :root.t_light .t_yellow_SliderTrack, :root.t_light .t_yellow_surface1, :root.t_light .t_yellow_TextArea, :root.t_light .t_yellow_TooltipArrow {--background:var(--yellow2Light);--backgroundHover:var(--yellow1Light);--backgroundPress:var(--yellow3Light);--backgroundFocus:var(--yellow3Light);--borderColor:var(--yellow5Light);--borderColorHover:var(--yellow4Light);--borderColorFocus:var(--yellow5Light);--borderColorPress:var(--yellow6Light);} -@media(prefers-color-scheme:light){ - body{background:var(--background);} - .t_yellow_active_ListItem, .t_yellow_active_Progress, .t_yellow_active_SliderTrack, .t_yellow_active_TooltipArrow, .t_yellow_Card, .t_yellow_Input, .t_yellow_ListItem, .t_yellow_Progress, .t_yellow_SelectTrigger, .t_yellow_SliderTrack, .t_yellow_surface1, .t_yellow_TextArea, .t_yellow_TooltipArrow {--background:var(--yellow2Light);--backgroundHover:var(--yellow1Light);--backgroundPress:var(--yellow3Light);--backgroundFocus:var(--yellow3Light);--borderColor:var(--yellow5Light);--borderColorHover:var(--yellow4Light);--borderColorFocus:var(--yellow5Light);--borderColorPress:var(--yellow6Light);} - } -:root.t_light .t_yellow_Checkbox, :root.t_light .t_yellow_RadioGroupItem, :root.t_light .t_yellow_surface2, :root.t_light .t_yellow_Switch, :root.t_light .t_yellow_TooltipContent {--background:var(--yellow3Light);--backgroundHover:var(--yellow2Light);--backgroundPress:var(--yellow4Light);--backgroundFocus:var(--yellow4Light);--borderColor:var(--yellow6Light);--borderColorHover:var(--yellow5Light);--borderColorFocus:var(--yellow6Light);--borderColorPress:var(--yellow7Light);} -@media(prefers-color-scheme:light){ - body{background:var(--background);} - .t_yellow_Checkbox, .t_yellow_RadioGroupItem, .t_yellow_surface2, .t_yellow_Switch, .t_yellow_TooltipContent {--background:var(--yellow3Light);--backgroundHover:var(--yellow2Light);--backgroundPress:var(--yellow4Light);--backgroundFocus:var(--yellow4Light);--borderColor:var(--yellow6Light);--borderColorHover:var(--yellow5Light);--borderColorFocus:var(--yellow6Light);--borderColorPress:var(--yellow7Light);} - } -:root.t_light .t_yellow_active_Button, :root.t_light .t_yellow_active_Card, :root.t_light .t_yellow_active_Checkbox, :root.t_light .t_yellow_active_Input, :root.t_light .t_yellow_active_RadioGroupItem, :root.t_light .t_yellow_active_SelectTrigger, :root.t_light .t_yellow_active_Switch, :root.t_light .t_yellow_active_TextArea, :root.t_light .t_yellow_active_TooltipContent, :root.t_light .t_yellow_surface4 {--background:var(--yellow6Light);--backgroundHover:var(--yellow6Light);--backgroundPress:var(--yellow7Light);--backgroundFocus:var(--yellow7Light);--borderColor:var(--yellow6Light);--borderColorHover:var(--yellow6Light);--borderColorFocus:var(--yellow7Light);--borderColorPress:var(--yellow7Light);} -@media(prefers-color-scheme:light){ - body{background:var(--background);} - .t_yellow_active_Button, .t_yellow_active_Card, .t_yellow_active_Checkbox, .t_yellow_active_Input, .t_yellow_active_RadioGroupItem, .t_yellow_active_SelectTrigger, .t_yellow_active_Switch, .t_yellow_active_TextArea, .t_yellow_active_TooltipContent, .t_yellow_surface4 {--background:var(--yellow6Light);--backgroundHover:var(--yellow6Light);--backgroundPress:var(--yellow7Light);--backgroundFocus:var(--yellow7Light);--borderColor:var(--yellow6Light);--borderColorHover:var(--yellow6Light);--borderColorFocus:var(--yellow7Light);--borderColorPress:var(--yellow7Light);} - } -:root.t_light .t_green_alt1 {--color:var(--green11Light);--colorHover:var(--green10Light);--colorPress:var(--green11Light);--colorFocus:var(--green10Light);} -@media(prefers-color-scheme:light){ - body{color:var(--color)} - .t_green_alt1 {--color:var(--green11Light);--colorHover:var(--green10Light);--colorPress:var(--green11Light);--colorFocus:var(--green10Light);} - } -:root.t_light .t_green_alt2 {--color:var(--green10Light);--colorHover:var(--green9Dark);--colorPress:var(--green10Light);--colorFocus:var(--green9Dark);} -@media(prefers-color-scheme:light){ - body{color:var(--color)} - .t_green_alt2 {--color:var(--green10Light);--colorHover:var(--green9Dark);--colorPress:var(--green10Light);--colorFocus:var(--green9Dark);} - } -:root.t_light .t_green_active, :root.t_light .t_green_active_SliderTrackActive, :root.t_light .t_green_Button, :root.t_light .t_green_SliderTrackActive, :root.t_light .t_green_surface3 {--background:var(--green4Light);--backgroundHover:var(--green3Light);--backgroundPress:var(--green5Light);--backgroundFocus:var(--green5Light);--borderColor:var(--green7Light);--borderColorHover:var(--green6Light);--borderColorFocus:var(--green7Light);--borderColorPress:var(--green8Light);} -@media(prefers-color-scheme:light){ - body{background:var(--background);} - .t_green_active, .t_green_active_SliderTrackActive, .t_green_Button, .t_green_SliderTrackActive, .t_green_surface3 {--background:var(--green4Light);--backgroundHover:var(--green3Light);--backgroundPress:var(--green5Light);--backgroundFocus:var(--green5Light);--borderColor:var(--green7Light);--borderColorHover:var(--green6Light);--borderColorFocus:var(--green7Light);--borderColorPress:var(--green8Light);} - } -:root.t_light .t_green_active_ListItem, :root.t_light .t_green_active_Progress, :root.t_light .t_green_active_SliderTrack, :root.t_light .t_green_active_TooltipArrow, :root.t_light .t_green_Card, :root.t_light .t_green_Input, :root.t_light .t_green_ListItem, :root.t_light .t_green_Progress, :root.t_light .t_green_SelectTrigger, :root.t_light .t_green_SliderTrack, :root.t_light .t_green_surface1, :root.t_light .t_green_TextArea, :root.t_light .t_green_TooltipArrow {--background:var(--green2Light);--backgroundHover:var(--green1Light);--backgroundPress:var(--green3Light);--backgroundFocus:var(--green3Light);--borderColor:var(--green5Light);--borderColorHover:var(--green4Light);--borderColorFocus:var(--green5Light);--borderColorPress:var(--green6Light);} -@media(prefers-color-scheme:light){ - body{background:var(--background);} - .t_green_active_ListItem, .t_green_active_Progress, .t_green_active_SliderTrack, .t_green_active_TooltipArrow, .t_green_Card, .t_green_Input, .t_green_ListItem, .t_green_Progress, .t_green_SelectTrigger, .t_green_SliderTrack, .t_green_surface1, .t_green_TextArea, .t_green_TooltipArrow {--background:var(--green2Light);--backgroundHover:var(--green1Light);--backgroundPress:var(--green3Light);--backgroundFocus:var(--green3Light);--borderColor:var(--green5Light);--borderColorHover:var(--green4Light);--borderColorFocus:var(--green5Light);--borderColorPress:var(--green6Light);} - } -:root.t_light .t_green_Checkbox, :root.t_light .t_green_RadioGroupItem, :root.t_light .t_green_surface2, :root.t_light .t_green_Switch, :root.t_light .t_green_TooltipContent {--background:var(--green3Light);--backgroundHover:var(--green2Light);--backgroundPress:var(--green4Light);--backgroundFocus:var(--green4Light);--borderColor:var(--green6Light);--borderColorHover:var(--green5Light);--borderColorFocus:var(--green6Light);--borderColorPress:var(--green7Light);} -@media(prefers-color-scheme:light){ - body{background:var(--background);} - .t_green_Checkbox, .t_green_RadioGroupItem, .t_green_surface2, .t_green_Switch, .t_green_TooltipContent {--background:var(--green3Light);--backgroundHover:var(--green2Light);--backgroundPress:var(--green4Light);--backgroundFocus:var(--green4Light);--borderColor:var(--green6Light);--borderColorHover:var(--green5Light);--borderColorFocus:var(--green6Light);--borderColorPress:var(--green7Light);} - } -:root.t_light .t_green_active_Button, :root.t_light .t_green_active_Card, :root.t_light .t_green_active_Checkbox, :root.t_light .t_green_active_Input, :root.t_light .t_green_active_RadioGroupItem, :root.t_light .t_green_active_SelectTrigger, :root.t_light .t_green_active_Switch, :root.t_light .t_green_active_TextArea, :root.t_light .t_green_active_TooltipContent, :root.t_light .t_green_surface4 {--background:var(--green6Light);--backgroundHover:var(--green6Light);--backgroundPress:var(--green7Light);--backgroundFocus:var(--green7Light);--borderColor:var(--green6Light);--borderColorHover:var(--green6Light);--borderColorFocus:var(--green7Light);--borderColorPress:var(--green7Light);} -@media(prefers-color-scheme:light){ - body{background:var(--background);} - .t_green_active_Button, .t_green_active_Card, .t_green_active_Checkbox, .t_green_active_Input, .t_green_active_RadioGroupItem, .t_green_active_SelectTrigger, .t_green_active_Switch, .t_green_active_TextArea, .t_green_active_TooltipContent, .t_green_surface4 {--background:var(--green6Light);--backgroundHover:var(--green6Light);--backgroundPress:var(--green7Light);--backgroundFocus:var(--green7Light);--borderColor:var(--green6Light);--borderColorHover:var(--green6Light);--borderColorFocus:var(--green7Light);--borderColorPress:var(--green7Light);} - } -:root.t_light .t_blue_alt1 {--color:var(--blue11Light);--colorHover:var(--blue10Light);--colorPress:var(--blue11Light);--colorFocus:var(--blue10Light);} -@media(prefers-color-scheme:light){ - body{color:var(--color)} - .t_blue_alt1 {--color:var(--blue11Light);--colorHover:var(--blue10Light);--colorPress:var(--blue11Light);--colorFocus:var(--blue10Light);} - } -:root.t_light .t_blue_alt2 {--color:var(--blue10Light);--colorHover:var(--blue9Dark);--colorPress:var(--blue10Light);--colorFocus:var(--blue9Dark);} -@media(prefers-color-scheme:light){ - body{color:var(--color)} - .t_blue_alt2 {--color:var(--blue10Light);--colorHover:var(--blue9Dark);--colorPress:var(--blue10Light);--colorFocus:var(--blue9Dark);} - } -:root.t_light .t_blue_active, :root.t_light .t_blue_active_SliderTrackActive, :root.t_light .t_blue_Button, :root.t_light .t_blue_SliderTrackActive, :root.t_light .t_blue_surface3 {--background:var(--blue4Light);--backgroundHover:var(--blue3Light);--backgroundPress:var(--blue5Light);--backgroundFocus:var(--blue5Light);--borderColor:var(--blue7Light);--borderColorHover:var(--blue6Light);--borderColorFocus:var(--blue7Light);--borderColorPress:var(--blue8Light);} -@media(prefers-color-scheme:light){ - body{background:var(--background);} - .t_blue_active, .t_blue_active_SliderTrackActive, .t_blue_Button, .t_blue_SliderTrackActive, .t_blue_surface3 {--background:var(--blue4Light);--backgroundHover:var(--blue3Light);--backgroundPress:var(--blue5Light);--backgroundFocus:var(--blue5Light);--borderColor:var(--blue7Light);--borderColorHover:var(--blue6Light);--borderColorFocus:var(--blue7Light);--borderColorPress:var(--blue8Light);} - } -:root.t_light .t_blue_active_ListItem, :root.t_light .t_blue_active_Progress, :root.t_light .t_blue_active_SliderTrack, :root.t_light .t_blue_active_TooltipArrow, :root.t_light .t_blue_Card, :root.t_light .t_blue_Input, :root.t_light .t_blue_ListItem, :root.t_light .t_blue_Progress, :root.t_light .t_blue_SelectTrigger, :root.t_light .t_blue_SliderTrack, :root.t_light .t_blue_surface1, :root.t_light .t_blue_TextArea, :root.t_light .t_blue_TooltipArrow {--background:var(--blue2Light);--backgroundHover:var(--blue1Light);--backgroundPress:var(--blue3Light);--backgroundFocus:var(--blue3Light);--borderColor:var(--blue5Light);--borderColorHover:var(--blue4Light);--borderColorFocus:var(--blue5Light);--borderColorPress:var(--blue6Light);} -@media(prefers-color-scheme:light){ - body{background:var(--background);} - .t_blue_active_ListItem, .t_blue_active_Progress, .t_blue_active_SliderTrack, .t_blue_active_TooltipArrow, .t_blue_Card, .t_blue_Input, .t_blue_ListItem, .t_blue_Progress, .t_blue_SelectTrigger, .t_blue_SliderTrack, .t_blue_surface1, .t_blue_TextArea, .t_blue_TooltipArrow {--background:var(--blue2Light);--backgroundHover:var(--blue1Light);--backgroundPress:var(--blue3Light);--backgroundFocus:var(--blue3Light);--borderColor:var(--blue5Light);--borderColorHover:var(--blue4Light);--borderColorFocus:var(--blue5Light);--borderColorPress:var(--blue6Light);} - } -:root.t_light .t_blue_Checkbox, :root.t_light .t_blue_RadioGroupItem, :root.t_light .t_blue_surface2, :root.t_light .t_blue_Switch, :root.t_light .t_blue_TooltipContent {--background:var(--blue3Light);--backgroundHover:var(--blue2Light);--backgroundPress:var(--blue4Light);--backgroundFocus:var(--blue4Light);--borderColor:var(--blue6Light);--borderColorHover:var(--blue5Light);--borderColorFocus:var(--blue6Light);--borderColorPress:var(--blue7Light);} -@media(prefers-color-scheme:light){ - body{background:var(--background);} - .t_blue_Checkbox, .t_blue_RadioGroupItem, .t_blue_surface2, .t_blue_Switch, .t_blue_TooltipContent {--background:var(--blue3Light);--backgroundHover:var(--blue2Light);--backgroundPress:var(--blue4Light);--backgroundFocus:var(--blue4Light);--borderColor:var(--blue6Light);--borderColorHover:var(--blue5Light);--borderColorFocus:var(--blue6Light);--borderColorPress:var(--blue7Light);} - } -:root.t_light .t_blue_active_Button, :root.t_light .t_blue_active_Card, :root.t_light .t_blue_active_Checkbox, :root.t_light .t_blue_active_Input, :root.t_light .t_blue_active_RadioGroupItem, :root.t_light .t_blue_active_SelectTrigger, :root.t_light .t_blue_active_Switch, :root.t_light .t_blue_active_TextArea, :root.t_light .t_blue_active_TooltipContent, :root.t_light .t_blue_surface4 {--background:var(--blue6Light);--backgroundHover:var(--blue6Light);--backgroundPress:var(--blue7Light);--backgroundFocus:var(--blue7Light);--borderColor:var(--blue6Light);--borderColorHover:var(--blue6Light);--borderColorFocus:var(--blue7Light);--borderColorPress:var(--blue7Light);} -@media(prefers-color-scheme:light){ - body{background:var(--background);} - .t_blue_active_Button, .t_blue_active_Card, .t_blue_active_Checkbox, .t_blue_active_Input, .t_blue_active_RadioGroupItem, .t_blue_active_SelectTrigger, .t_blue_active_Switch, .t_blue_active_TextArea, .t_blue_active_TooltipContent, .t_blue_surface4 {--background:var(--blue6Light);--backgroundHover:var(--blue6Light);--backgroundPress:var(--blue7Light);--backgroundFocus:var(--blue7Light);--borderColor:var(--blue6Light);--borderColorHover:var(--blue6Light);--borderColorFocus:var(--blue7Light);--borderColorPress:var(--blue7Light);} - } -:root.t_light .t_purple_alt1 {--color:var(--purple11Light);--colorHover:var(--purple10Light);--colorPress:var(--purple11Light);--colorFocus:var(--purple10Light);} -@media(prefers-color-scheme:light){ - body{color:var(--color)} - .t_purple_alt1 {--color:var(--purple11Light);--colorHover:var(--purple10Light);--colorPress:var(--purple11Light);--colorFocus:var(--purple10Light);} - } -:root.t_light .t_purple_alt2 {--color:var(--purple10Light);--colorHover:var(--purple9Dark);--colorPress:var(--purple10Light);--colorFocus:var(--purple9Dark);} -@media(prefers-color-scheme:light){ - body{color:var(--color)} - .t_purple_alt2 {--color:var(--purple10Light);--colorHover:var(--purple9Dark);--colorPress:var(--purple10Light);--colorFocus:var(--purple9Dark);} - } -:root.t_light .t_purple_active, :root.t_light .t_purple_active_SliderTrackActive, :root.t_light .t_purple_Button, :root.t_light .t_purple_SliderTrackActive, :root.t_light .t_purple_surface3 {--background:var(--purple4Light);--backgroundHover:var(--purple3Light);--backgroundPress:var(--purple5Light);--backgroundFocus:var(--purple5Light);--borderColor:var(--purple7Light);--borderColorHover:var(--purple6Light);--borderColorFocus:var(--purple7Light);--borderColorPress:var(--purple8Light);} -@media(prefers-color-scheme:light){ - body{background:var(--background);} - .t_purple_active, .t_purple_active_SliderTrackActive, .t_purple_Button, .t_purple_SliderTrackActive, .t_purple_surface3 {--background:var(--purple4Light);--backgroundHover:var(--purple3Light);--backgroundPress:var(--purple5Light);--backgroundFocus:var(--purple5Light);--borderColor:var(--purple7Light);--borderColorHover:var(--purple6Light);--borderColorFocus:var(--purple7Light);--borderColorPress:var(--purple8Light);} - } -:root.t_light .t_purple_active_ListItem, :root.t_light .t_purple_active_Progress, :root.t_light .t_purple_active_SliderTrack, :root.t_light .t_purple_active_TooltipArrow, :root.t_light .t_purple_Card, :root.t_light .t_purple_Input, :root.t_light .t_purple_ListItem, :root.t_light .t_purple_Progress, :root.t_light .t_purple_SelectTrigger, :root.t_light .t_purple_SliderTrack, :root.t_light .t_purple_surface1, :root.t_light .t_purple_TextArea, :root.t_light .t_purple_TooltipArrow {--background:var(--purple2Light);--backgroundHover:var(--purple1Light);--backgroundPress:var(--purple3Light);--backgroundFocus:var(--purple3Light);--borderColor:var(--purple5Light);--borderColorHover:var(--purple4Light);--borderColorFocus:var(--purple5Light);--borderColorPress:var(--purple6Light);} -@media(prefers-color-scheme:light){ - body{background:var(--background);} - .t_purple_active_ListItem, .t_purple_active_Progress, .t_purple_active_SliderTrack, .t_purple_active_TooltipArrow, .t_purple_Card, .t_purple_Input, .t_purple_ListItem, .t_purple_Progress, .t_purple_SelectTrigger, .t_purple_SliderTrack, .t_purple_surface1, .t_purple_TextArea, .t_purple_TooltipArrow {--background:var(--purple2Light);--backgroundHover:var(--purple1Light);--backgroundPress:var(--purple3Light);--backgroundFocus:var(--purple3Light);--borderColor:var(--purple5Light);--borderColorHover:var(--purple4Light);--borderColorFocus:var(--purple5Light);--borderColorPress:var(--purple6Light);} - } -:root.t_light .t_purple_Checkbox, :root.t_light .t_purple_RadioGroupItem, :root.t_light .t_purple_surface2, :root.t_light .t_purple_Switch, :root.t_light .t_purple_TooltipContent {--background:var(--purple3Light);--backgroundHover:var(--purple2Light);--backgroundPress:var(--purple4Light);--backgroundFocus:var(--purple4Light);--borderColor:var(--purple6Light);--borderColorHover:var(--purple5Light);--borderColorFocus:var(--purple6Light);--borderColorPress:var(--purple7Light);} -@media(prefers-color-scheme:light){ - body{background:var(--background);} - .t_purple_Checkbox, .t_purple_RadioGroupItem, .t_purple_surface2, .t_purple_Switch, .t_purple_TooltipContent {--background:var(--purple3Light);--backgroundHover:var(--purple2Light);--backgroundPress:var(--purple4Light);--backgroundFocus:var(--purple4Light);--borderColor:var(--purple6Light);--borderColorHover:var(--purple5Light);--borderColorFocus:var(--purple6Light);--borderColorPress:var(--purple7Light);} - } -:root.t_light .t_purple_active_Button, :root.t_light .t_purple_active_Card, :root.t_light .t_purple_active_Checkbox, :root.t_light .t_purple_active_Input, :root.t_light .t_purple_active_RadioGroupItem, :root.t_light .t_purple_active_SelectTrigger, :root.t_light .t_purple_active_Switch, :root.t_light .t_purple_active_TextArea, :root.t_light .t_purple_active_TooltipContent, :root.t_light .t_purple_surface4 {--background:var(--purple6Light);--backgroundHover:var(--purple6Light);--backgroundPress:var(--purple7Light);--backgroundFocus:var(--purple7Light);--borderColor:var(--purple6Light);--borderColorHover:var(--purple6Light);--borderColorFocus:var(--purple7Light);--borderColorPress:var(--purple7Light);} -@media(prefers-color-scheme:light){ - body{background:var(--background);} - .t_purple_active_Button, .t_purple_active_Card, .t_purple_active_Checkbox, .t_purple_active_Input, .t_purple_active_RadioGroupItem, .t_purple_active_SelectTrigger, .t_purple_active_Switch, .t_purple_active_TextArea, .t_purple_active_TooltipContent, .t_purple_surface4 {--background:var(--purple6Light);--backgroundHover:var(--purple6Light);--backgroundPress:var(--purple7Light);--backgroundFocus:var(--purple7Light);--borderColor:var(--purple6Light);--borderColorHover:var(--purple6Light);--borderColorFocus:var(--purple7Light);--borderColorPress:var(--purple7Light);} - } -:root.t_light .t_pink_alt1 {--color:var(--pink11Light);--colorHover:var(--pink10Light);--colorPress:var(--pink11Light);--colorFocus:var(--pink10Light);} -@media(prefers-color-scheme:light){ - body{color:var(--color)} - .t_pink_alt1 {--color:var(--pink11Light);--colorHover:var(--pink10Light);--colorPress:var(--pink11Light);--colorFocus:var(--pink10Light);} - } -:root.t_light .t_pink_alt2 {--color:var(--pink10Light);--colorHover:var(--pink9Dark);--colorPress:var(--pink10Light);--colorFocus:var(--pink9Dark);} -@media(prefers-color-scheme:light){ - body{color:var(--color)} - .t_pink_alt2 {--color:var(--pink10Light);--colorHover:var(--pink9Dark);--colorPress:var(--pink10Light);--colorFocus:var(--pink9Dark);} - } -:root.t_light .t_pink_active, :root.t_light .t_pink_active_SliderTrackActive, :root.t_light .t_pink_Button, :root.t_light .t_pink_SliderTrackActive, :root.t_light .t_pink_surface3 {--background:var(--pink4Light);--backgroundHover:var(--pink3Light);--backgroundPress:var(--pink5Light);--backgroundFocus:var(--pink5Light);--borderColor:var(--pink7Light);--borderColorHover:var(--pink6Light);--borderColorFocus:var(--pink7Light);--borderColorPress:var(--pink8Light);} -@media(prefers-color-scheme:light){ - body{background:var(--background);} - .t_pink_active, .t_pink_active_SliderTrackActive, .t_pink_Button, .t_pink_SliderTrackActive, .t_pink_surface3 {--background:var(--pink4Light);--backgroundHover:var(--pink3Light);--backgroundPress:var(--pink5Light);--backgroundFocus:var(--pink5Light);--borderColor:var(--pink7Light);--borderColorHover:var(--pink6Light);--borderColorFocus:var(--pink7Light);--borderColorPress:var(--pink8Light);} - } -:root.t_light .t_pink_active_ListItem, :root.t_light .t_pink_active_Progress, :root.t_light .t_pink_active_SliderTrack, :root.t_light .t_pink_active_TooltipArrow, :root.t_light .t_pink_Card, :root.t_light .t_pink_Input, :root.t_light .t_pink_ListItem, :root.t_light .t_pink_Progress, :root.t_light .t_pink_SelectTrigger, :root.t_light .t_pink_SliderTrack, :root.t_light .t_pink_surface1, :root.t_light .t_pink_TextArea, :root.t_light .t_pink_TooltipArrow {--background:var(--pink2Light);--backgroundHover:var(--pink1Light);--backgroundPress:var(--pink3Light);--backgroundFocus:var(--pink3Light);--borderColor:var(--pink5Light);--borderColorHover:var(--pink4Light);--borderColorFocus:var(--pink5Light);--borderColorPress:var(--pink6Light);} -@media(prefers-color-scheme:light){ - body{background:var(--background);} - .t_pink_active_ListItem, .t_pink_active_Progress, .t_pink_active_SliderTrack, .t_pink_active_TooltipArrow, .t_pink_Card, .t_pink_Input, .t_pink_ListItem, .t_pink_Progress, .t_pink_SelectTrigger, .t_pink_SliderTrack, .t_pink_surface1, .t_pink_TextArea, .t_pink_TooltipArrow {--background:var(--pink2Light);--backgroundHover:var(--pink1Light);--backgroundPress:var(--pink3Light);--backgroundFocus:var(--pink3Light);--borderColor:var(--pink5Light);--borderColorHover:var(--pink4Light);--borderColorFocus:var(--pink5Light);--borderColorPress:var(--pink6Light);} - } -:root.t_light .t_pink_Checkbox, :root.t_light .t_pink_RadioGroupItem, :root.t_light .t_pink_surface2, :root.t_light .t_pink_Switch, :root.t_light .t_pink_TooltipContent {--background:var(--pink3Light);--backgroundHover:var(--pink2Light);--backgroundPress:var(--pink4Light);--backgroundFocus:var(--pink4Light);--borderColor:var(--pink6Light);--borderColorHover:var(--pink5Light);--borderColorFocus:var(--pink6Light);--borderColorPress:var(--pink7Light);} -@media(prefers-color-scheme:light){ - body{background:var(--background);} - .t_pink_Checkbox, .t_pink_RadioGroupItem, .t_pink_surface2, .t_pink_Switch, .t_pink_TooltipContent {--background:var(--pink3Light);--backgroundHover:var(--pink2Light);--backgroundPress:var(--pink4Light);--backgroundFocus:var(--pink4Light);--borderColor:var(--pink6Light);--borderColorHover:var(--pink5Light);--borderColorFocus:var(--pink6Light);--borderColorPress:var(--pink7Light);} - } -:root.t_light .t_pink_active_Button, :root.t_light .t_pink_active_Card, :root.t_light .t_pink_active_Checkbox, :root.t_light .t_pink_active_Input, :root.t_light .t_pink_active_RadioGroupItem, :root.t_light .t_pink_active_SelectTrigger, :root.t_light .t_pink_active_Switch, :root.t_light .t_pink_active_TextArea, :root.t_light .t_pink_active_TooltipContent, :root.t_light .t_pink_surface4 {--background:var(--pink6Light);--backgroundHover:var(--pink6Light);--backgroundPress:var(--pink7Light);--backgroundFocus:var(--pink7Light);--borderColor:var(--pink6Light);--borderColorHover:var(--pink6Light);--borderColorFocus:var(--pink7Light);--borderColorPress:var(--pink7Light);} -@media(prefers-color-scheme:light){ - body{background:var(--background);} - .t_pink_active_Button, .t_pink_active_Card, .t_pink_active_Checkbox, .t_pink_active_Input, .t_pink_active_RadioGroupItem, .t_pink_active_SelectTrigger, .t_pink_active_Switch, .t_pink_active_TextArea, .t_pink_active_TooltipContent, .t_pink_surface4 {--background:var(--pink6Light);--backgroundHover:var(--pink6Light);--backgroundPress:var(--pink7Light);--backgroundFocus:var(--pink7Light);--borderColor:var(--pink6Light);--borderColorHover:var(--pink6Light);--borderColorFocus:var(--pink7Light);--borderColorPress:var(--pink7Light);} - } -:root.t_light .t_red_alt1 {--color:var(--red11Light);--colorHover:var(--red10Light);--colorPress:var(--red11Light);--colorFocus:var(--red10Light);} -@media(prefers-color-scheme:light){ - body{color:var(--color)} - .t_red_alt1 {--color:var(--red11Light);--colorHover:var(--red10Light);--colorPress:var(--red11Light);--colorFocus:var(--red10Light);} - } -:root.t_light .t_red_alt2 {--color:var(--red10Light);--colorHover:var(--red9Dark);--colorPress:var(--red10Light);--colorFocus:var(--red9Dark);} -@media(prefers-color-scheme:light){ - body{color:var(--color)} - .t_red_alt2 {--color:var(--red10Light);--colorHover:var(--red9Dark);--colorPress:var(--red10Light);--colorFocus:var(--red9Dark);} - } -:root.t_light .t_red_active, :root.t_light .t_red_active_SliderTrackActive, :root.t_light .t_red_Button, :root.t_light .t_red_SliderTrackActive, :root.t_light .t_red_surface3 {--background:var(--red4Light);--backgroundHover:var(--red3Light);--backgroundPress:var(--red5Light);--backgroundFocus:var(--red5Light);--borderColor:var(--red7Light);--borderColorHover:var(--red6Light);--borderColorFocus:var(--red7Light);--borderColorPress:var(--red8Light);} -@media(prefers-color-scheme:light){ - body{background:var(--background);} - .t_red_active, .t_red_active_SliderTrackActive, .t_red_Button, .t_red_SliderTrackActive, .t_red_surface3 {--background:var(--red4Light);--backgroundHover:var(--red3Light);--backgroundPress:var(--red5Light);--backgroundFocus:var(--red5Light);--borderColor:var(--red7Light);--borderColorHover:var(--red6Light);--borderColorFocus:var(--red7Light);--borderColorPress:var(--red8Light);} - } -:root.t_light .t_red_active_ListItem, :root.t_light .t_red_active_Progress, :root.t_light .t_red_active_SliderTrack, :root.t_light .t_red_active_TooltipArrow, :root.t_light .t_red_Card, :root.t_light .t_red_Input, :root.t_light .t_red_ListItem, :root.t_light .t_red_Progress, :root.t_light .t_red_SelectTrigger, :root.t_light .t_red_SliderTrack, :root.t_light .t_red_surface1, :root.t_light .t_red_TextArea, :root.t_light .t_red_TooltipArrow {--background:var(--red2Light);--backgroundHover:var(--red1Light);--backgroundPress:var(--red3Light);--backgroundFocus:var(--red3Light);--borderColor:var(--red5Light);--borderColorHover:var(--red4Light);--borderColorFocus:var(--red5Light);--borderColorPress:var(--red6Light);} -@media(prefers-color-scheme:light){ - body{background:var(--background);} - .t_red_active_ListItem, .t_red_active_Progress, .t_red_active_SliderTrack, .t_red_active_TooltipArrow, .t_red_Card, .t_red_Input, .t_red_ListItem, .t_red_Progress, .t_red_SelectTrigger, .t_red_SliderTrack, .t_red_surface1, .t_red_TextArea, .t_red_TooltipArrow {--background:var(--red2Light);--backgroundHover:var(--red1Light);--backgroundPress:var(--red3Light);--backgroundFocus:var(--red3Light);--borderColor:var(--red5Light);--borderColorHover:var(--red4Light);--borderColorFocus:var(--red5Light);--borderColorPress:var(--red6Light);} - } -:root.t_light .t_red_Checkbox, :root.t_light .t_red_RadioGroupItem, :root.t_light .t_red_surface2, :root.t_light .t_red_Switch, :root.t_light .t_red_TooltipContent {--background:var(--red3Light);--backgroundHover:var(--red2Light);--backgroundPress:var(--red4Light);--backgroundFocus:var(--red4Light);--borderColor:var(--red6Light);--borderColorHover:var(--red5Light);--borderColorFocus:var(--red6Light);--borderColorPress:var(--red7Light);} -@media(prefers-color-scheme:light){ - body{background:var(--background);} - .t_red_Checkbox, .t_red_RadioGroupItem, .t_red_surface2, .t_red_Switch, .t_red_TooltipContent {--background:var(--red3Light);--backgroundHover:var(--red2Light);--backgroundPress:var(--red4Light);--backgroundFocus:var(--red4Light);--borderColor:var(--red6Light);--borderColorHover:var(--red5Light);--borderColorFocus:var(--red6Light);--borderColorPress:var(--red7Light);} - } -:root.t_light .t_red_active_Button, :root.t_light .t_red_active_Card, :root.t_light .t_red_active_Checkbox, :root.t_light .t_red_active_Input, :root.t_light .t_red_active_RadioGroupItem, :root.t_light .t_red_active_SelectTrigger, :root.t_light .t_red_active_Switch, :root.t_light .t_red_active_TextArea, :root.t_light .t_red_active_TooltipContent, :root.t_light .t_red_surface4 {--background:var(--red6Light);--backgroundHover:var(--red6Light);--backgroundPress:var(--red7Light);--backgroundFocus:var(--red7Light);--borderColor:var(--red6Light);--borderColorHover:var(--red6Light);--borderColorFocus:var(--red7Light);--borderColorPress:var(--red7Light);} -@media(prefers-color-scheme:light){ - body{background:var(--background);} - .t_red_active_Button, .t_red_active_Card, .t_red_active_Checkbox, .t_red_active_Input, .t_red_active_RadioGroupItem, .t_red_active_SelectTrigger, .t_red_active_Switch, .t_red_active_TextArea, .t_red_active_TooltipContent, .t_red_surface4 {--background:var(--red6Light);--backgroundHover:var(--red6Light);--backgroundPress:var(--red7Light);--backgroundFocus:var(--red7Light);--borderColor:var(--red6Light);--borderColorHover:var(--red6Light);--borderColorFocus:var(--red7Light);--borderColorPress:var(--red7Light);} - } -:root.t_light .t_gray_alt1 {--color:var(--gray11Light);--colorHover:var(--gray10Light);--colorPress:var(--gray11Light);--colorFocus:var(--gray10Light);} -@media(prefers-color-scheme:light){ - body{color:var(--color)} - .t_gray_alt1 {--color:var(--gray11Light);--colorHover:var(--gray10Light);--colorPress:var(--gray11Light);--colorFocus:var(--gray10Light);} - } -:root.t_light .t_gray_alt2 {--color:var(--gray10Light);--colorHover:var(--gray9Light);--colorPress:var(--gray10Light);--colorFocus:var(--gray9Light);} -@media(prefers-color-scheme:light){ - body{color:var(--color)} - .t_gray_alt2 {--color:var(--gray10Light);--colorHover:var(--gray9Light);--colorPress:var(--gray10Light);--colorFocus:var(--gray9Light);} - } -:root.t_light .t_gray_active, :root.t_light .t_gray_active_SliderTrackActive, :root.t_light .t_gray_Button, :root.t_light .t_gray_SliderTrackActive, :root.t_light .t_gray_surface3 {--background:var(--gray12Dark);--backgroundHover:var(--gray3Light);--backgroundPress:var(--gray5Light);--backgroundFocus:var(--gray5Light);--borderColor:var(--gray7Light);--borderColorHover:var(--gray6Light);--borderColorFocus:var(--gray7Light);--borderColorPress:var(--gray8Light);} -@media(prefers-color-scheme:light){ - body{background:var(--background);} - .t_gray_active, .t_gray_active_SliderTrackActive, .t_gray_Button, .t_gray_SliderTrackActive, .t_gray_surface3 {--background:var(--gray12Dark);--backgroundHover:var(--gray3Light);--backgroundPress:var(--gray5Light);--backgroundFocus:var(--gray5Light);--borderColor:var(--gray7Light);--borderColorHover:var(--gray6Light);--borderColorFocus:var(--gray7Light);--borderColorPress:var(--gray8Light);} - } -:root.t_light .t_gray_active_ListItem, :root.t_light .t_gray_active_Progress, :root.t_light .t_gray_active_SliderTrack, :root.t_light .t_gray_active_TooltipArrow, :root.t_light .t_gray_Card, :root.t_light .t_gray_Input, :root.t_light .t_gray_ListItem, :root.t_light .t_gray_Progress, :root.t_light .t_gray_SelectTrigger, :root.t_light .t_gray_SliderTrack, :root.t_light .t_gray_surface1, :root.t_light .t_gray_TextArea, :root.t_light .t_gray_TooltipArrow {--background:var(--gray2Light);--backgroundHover:var(--gray1Light);--backgroundPress:var(--gray3Light);--backgroundFocus:var(--gray3Light);--borderColor:var(--gray5Light);--borderColorHover:var(--gray12Dark);--borderColorFocus:var(--gray5Light);--borderColorPress:var(--gray6Light);} -@media(prefers-color-scheme:light){ - body{background:var(--background);} - .t_gray_active_ListItem, .t_gray_active_Progress, .t_gray_active_SliderTrack, .t_gray_active_TooltipArrow, .t_gray_Card, .t_gray_Input, .t_gray_ListItem, .t_gray_Progress, .t_gray_SelectTrigger, .t_gray_SliderTrack, .t_gray_surface1, .t_gray_TextArea, .t_gray_TooltipArrow {--background:var(--gray2Light);--backgroundHover:var(--gray1Light);--backgroundPress:var(--gray3Light);--backgroundFocus:var(--gray3Light);--borderColor:var(--gray5Light);--borderColorHover:var(--gray12Dark);--borderColorFocus:var(--gray5Light);--borderColorPress:var(--gray6Light);} - } -:root.t_light .t_gray_Checkbox, :root.t_light .t_gray_RadioGroupItem, :root.t_light .t_gray_surface2, :root.t_light .t_gray_Switch, :root.t_light .t_gray_TooltipContent {--background:var(--gray3Light);--backgroundHover:var(--gray2Light);--backgroundPress:var(--gray12Dark);--backgroundFocus:var(--gray12Dark);--borderColor:var(--gray6Light);--borderColorHover:var(--gray5Light);--borderColorFocus:var(--gray6Light);--borderColorPress:var(--gray7Light);} -@media(prefers-color-scheme:light){ - body{background:var(--background);} - .t_gray_Checkbox, .t_gray_RadioGroupItem, .t_gray_surface2, .t_gray_Switch, .t_gray_TooltipContent {--background:var(--gray3Light);--backgroundHover:var(--gray2Light);--backgroundPress:var(--gray12Dark);--backgroundFocus:var(--gray12Dark);--borderColor:var(--gray6Light);--borderColorHover:var(--gray5Light);--borderColorFocus:var(--gray6Light);--borderColorPress:var(--gray7Light);} - } -:root.t_light .t_gray_active_Button, :root.t_light .t_gray_active_Card, :root.t_light .t_gray_active_Checkbox, :root.t_light .t_gray_active_Input, :root.t_light .t_gray_active_RadioGroupItem, :root.t_light .t_gray_active_SelectTrigger, :root.t_light .t_gray_active_Switch, :root.t_light .t_gray_active_TextArea, :root.t_light .t_gray_active_TooltipContent, :root.t_light .t_gray_surface4 {--background:var(--gray6Light);--backgroundHover:var(--gray6Light);--backgroundPress:var(--gray7Light);--backgroundFocus:var(--gray7Light);--borderColor:var(--gray6Light);--borderColorHover:var(--gray6Light);--borderColorFocus:var(--gray7Light);--borderColorPress:var(--gray7Light);} -@media(prefers-color-scheme:light){ - body{background:var(--background);} - .t_gray_active_Button, .t_gray_active_Card, .t_gray_active_Checkbox, .t_gray_active_Input, .t_gray_active_RadioGroupItem, .t_gray_active_SelectTrigger, .t_gray_active_Switch, .t_gray_active_TextArea, .t_gray_active_TooltipContent, .t_gray_surface4 {--background:var(--gray6Light);--backgroundHover:var(--gray6Light);--backgroundPress:var(--gray7Light);--backgroundFocus:var(--gray7Light);--borderColor:var(--gray6Light);--borderColorHover:var(--gray6Light);--borderColorFocus:var(--gray7Light);--borderColorPress:var(--gray7Light);} - } -:root.t_dark .t_orange_alt1 {--color:var(--orange11Dark);--colorHover:var(--orange10Dark);--colorPress:var(--orange11Dark);--colorFocus:var(--orange10Dark);} -@media(prefers-color-scheme:dark){ - body{color:var(--color)} - .t_orange_alt1 {--color:var(--orange11Dark);--colorHover:var(--orange10Dark);--colorPress:var(--orange11Dark);--colorFocus:var(--orange10Dark);} - } -:root.t_dark .t_orange_alt2 {--color:var(--orange10Dark);--colorHover:var(--orange9Dark);--colorPress:var(--orange10Dark);--colorFocus:var(--orange9Dark);} -@media(prefers-color-scheme:dark){ - body{color:var(--color)} - .t_orange_alt2 {--color:var(--orange10Dark);--colorHover:var(--orange9Dark);--colorPress:var(--orange10Dark);--colorFocus:var(--orange9Dark);} - } -:root.t_dark .t_orange_active, :root.t_dark .t_orange_active_SliderTrackActive, :root.t_dark .t_orange_Button, :root.t_dark .t_orange_SliderTrackActive, :root.t_dark .t_orange_surface3 {--background:var(--orange4Dark);--backgroundHover:var(--orange5Dark);--backgroundPress:var(--orange3Dark);--backgroundFocus:var(--orange3Dark);--borderColor:var(--orange7Dark);--borderColorHover:var(--orange8Dark);--borderColorFocus:var(--orange7Dark);--borderColorPress:var(--orange6Dark);} -@media(prefers-color-scheme:dark){ - body{background:var(--background);} - .t_orange_active, .t_orange_active_SliderTrackActive, .t_orange_Button, .t_orange_SliderTrackActive, .t_orange_surface3 {--background:var(--orange4Dark);--backgroundHover:var(--orange5Dark);--backgroundPress:var(--orange3Dark);--backgroundFocus:var(--orange3Dark);--borderColor:var(--orange7Dark);--borderColorHover:var(--orange8Dark);--borderColorFocus:var(--orange7Dark);--borderColorPress:var(--orange6Dark);} - } -:root.t_dark .t_orange_active_ListItem, :root.t_dark .t_orange_active_Progress, :root.t_dark .t_orange_active_SliderTrack, :root.t_dark .t_orange_active_TooltipArrow, :root.t_dark .t_orange_Card, :root.t_dark .t_orange_Input, :root.t_dark .t_orange_ListItem, :root.t_dark .t_orange_Progress, :root.t_dark .t_orange_SelectTrigger, :root.t_dark .t_orange_SliderTrack, :root.t_dark .t_orange_surface1, :root.t_dark .t_orange_TextArea, :root.t_dark .t_orange_TooltipArrow {--background:var(--orange2Dark);--backgroundHover:var(--orange3Dark);--backgroundPress:var(--orange1Dark);--backgroundFocus:var(--orange1Dark);--borderColor:var(--orange5Dark);--borderColorHover:var(--orange6Dark);--borderColorFocus:var(--orange5Dark);--borderColorPress:var(--orange4Dark);} -@media(prefers-color-scheme:dark){ - body{background:var(--background);} - .t_orange_active_ListItem, .t_orange_active_Progress, .t_orange_active_SliderTrack, .t_orange_active_TooltipArrow, .t_orange_Card, .t_orange_Input, .t_orange_ListItem, .t_orange_Progress, .t_orange_SelectTrigger, .t_orange_SliderTrack, .t_orange_surface1, .t_orange_TextArea, .t_orange_TooltipArrow {--background:var(--orange2Dark);--backgroundHover:var(--orange3Dark);--backgroundPress:var(--orange1Dark);--backgroundFocus:var(--orange1Dark);--borderColor:var(--orange5Dark);--borderColorHover:var(--orange6Dark);--borderColorFocus:var(--orange5Dark);--borderColorPress:var(--orange4Dark);} - } -:root.t_dark .t_orange_Checkbox, :root.t_dark .t_orange_RadioGroupItem, :root.t_dark .t_orange_surface2, :root.t_dark .t_orange_Switch, :root.t_dark .t_orange_TooltipContent {--background:var(--orange3Dark);--backgroundHover:var(--orange4Dark);--backgroundPress:var(--orange2Dark);--backgroundFocus:var(--orange2Dark);--borderColor:var(--orange6Dark);--borderColorHover:var(--orange7Dark);--borderColorFocus:var(--orange6Dark);--borderColorPress:var(--orange5Dark);} -@media(prefers-color-scheme:dark){ - body{background:var(--background);} - .t_orange_Checkbox, .t_orange_RadioGroupItem, .t_orange_surface2, .t_orange_Switch, .t_orange_TooltipContent {--background:var(--orange3Dark);--backgroundHover:var(--orange4Dark);--backgroundPress:var(--orange2Dark);--backgroundFocus:var(--orange2Dark);--borderColor:var(--orange6Dark);--borderColorHover:var(--orange7Dark);--borderColorFocus:var(--orange6Dark);--borderColorPress:var(--orange5Dark);} - } -:root.t_dark .t_orange_active_Button, :root.t_dark .t_orange_active_Card, :root.t_dark .t_orange_active_Checkbox, :root.t_dark .t_orange_active_Input, :root.t_dark .t_orange_active_RadioGroupItem, :root.t_dark .t_orange_active_SelectTrigger, :root.t_dark .t_orange_active_Switch, :root.t_dark .t_orange_active_TextArea, :root.t_dark .t_orange_active_TooltipContent, :root.t_dark .t_orange_surface4 {--background:var(--orange6Dark);--backgroundHover:var(--orange6Dark);--backgroundPress:var(--orange5Dark);--backgroundFocus:var(--orange5Dark);--borderColor:var(--orange6Dark);--borderColorHover:var(--orange6Dark);--borderColorFocus:var(--orange5Dark);--borderColorPress:var(--orange5Dark);} -@media(prefers-color-scheme:dark){ - body{background:var(--background);} - .t_orange_active_Button, .t_orange_active_Card, .t_orange_active_Checkbox, .t_orange_active_Input, .t_orange_active_RadioGroupItem, .t_orange_active_SelectTrigger, .t_orange_active_Switch, .t_orange_active_TextArea, .t_orange_active_TooltipContent, .t_orange_surface4 {--background:var(--orange6Dark);--backgroundHover:var(--orange6Dark);--backgroundPress:var(--orange5Dark);--backgroundFocus:var(--orange5Dark);--borderColor:var(--orange6Dark);--borderColorHover:var(--orange6Dark);--borderColorFocus:var(--orange5Dark);--borderColorPress:var(--orange5Dark);} - } -:root.t_dark .t_yellow_alt1 {--color:var(--yellow11Dark);--colorHover:var(--yellow10Dark);--colorPress:var(--yellow11Dark);--colorFocus:var(--yellow10Dark);} -@media(prefers-color-scheme:dark){ - body{color:var(--color)} - .t_yellow_alt1 {--color:var(--yellow11Dark);--colorHover:var(--yellow10Dark);--colorPress:var(--yellow11Dark);--colorFocus:var(--yellow10Dark);} - } -:root.t_dark .t_yellow_alt2 {--color:var(--yellow10Dark);--colorHover:var(--yellow9Dark);--colorPress:var(--yellow10Dark);--colorFocus:var(--yellow9Dark);} -@media(prefers-color-scheme:dark){ - body{color:var(--color)} - .t_yellow_alt2 {--color:var(--yellow10Dark);--colorHover:var(--yellow9Dark);--colorPress:var(--yellow10Dark);--colorFocus:var(--yellow9Dark);} - } -:root.t_dark .t_yellow_active, :root.t_dark .t_yellow_active_SliderTrackActive, :root.t_dark .t_yellow_Button, :root.t_dark .t_yellow_SliderTrackActive, :root.t_dark .t_yellow_surface3 {--background:var(--yellow4Dark);--backgroundHover:var(--yellow5Dark);--backgroundPress:var(--yellow3Dark);--backgroundFocus:var(--yellow3Dark);--borderColor:var(--yellow7Dark);--borderColorHover:var(--yellow8Dark);--borderColorFocus:var(--yellow7Dark);--borderColorPress:var(--yellow6Dark);} -@media(prefers-color-scheme:dark){ - body{background:var(--background);} - .t_yellow_active, .t_yellow_active_SliderTrackActive, .t_yellow_Button, .t_yellow_SliderTrackActive, .t_yellow_surface3 {--background:var(--yellow4Dark);--backgroundHover:var(--yellow5Dark);--backgroundPress:var(--yellow3Dark);--backgroundFocus:var(--yellow3Dark);--borderColor:var(--yellow7Dark);--borderColorHover:var(--yellow8Dark);--borderColorFocus:var(--yellow7Dark);--borderColorPress:var(--yellow6Dark);} - } -:root.t_dark .t_yellow_active_ListItem, :root.t_dark .t_yellow_active_Progress, :root.t_dark .t_yellow_active_SliderTrack, :root.t_dark .t_yellow_active_TooltipArrow, :root.t_dark .t_yellow_Card, :root.t_dark .t_yellow_Input, :root.t_dark .t_yellow_ListItem, :root.t_dark .t_yellow_Progress, :root.t_dark .t_yellow_SelectTrigger, :root.t_dark .t_yellow_SliderTrack, :root.t_dark .t_yellow_surface1, :root.t_dark .t_yellow_TextArea, :root.t_dark .t_yellow_TooltipArrow {--background:var(--yellow2Dark);--backgroundHover:var(--yellow3Dark);--backgroundPress:var(--yellow1Dark);--backgroundFocus:var(--yellow1Dark);--borderColor:var(--yellow5Dark);--borderColorHover:var(--yellow6Dark);--borderColorFocus:var(--yellow5Dark);--borderColorPress:var(--yellow4Dark);} -@media(prefers-color-scheme:dark){ - body{background:var(--background);} - .t_yellow_active_ListItem, .t_yellow_active_Progress, .t_yellow_active_SliderTrack, .t_yellow_active_TooltipArrow, .t_yellow_Card, .t_yellow_Input, .t_yellow_ListItem, .t_yellow_Progress, .t_yellow_SelectTrigger, .t_yellow_SliderTrack, .t_yellow_surface1, .t_yellow_TextArea, .t_yellow_TooltipArrow {--background:var(--yellow2Dark);--backgroundHover:var(--yellow3Dark);--backgroundPress:var(--yellow1Dark);--backgroundFocus:var(--yellow1Dark);--borderColor:var(--yellow5Dark);--borderColorHover:var(--yellow6Dark);--borderColorFocus:var(--yellow5Dark);--borderColorPress:var(--yellow4Dark);} - } -:root.t_dark .t_yellow_Checkbox, :root.t_dark .t_yellow_RadioGroupItem, :root.t_dark .t_yellow_surface2, :root.t_dark .t_yellow_Switch, :root.t_dark .t_yellow_TooltipContent {--background:var(--yellow3Dark);--backgroundHover:var(--yellow4Dark);--backgroundPress:var(--yellow2Dark);--backgroundFocus:var(--yellow2Dark);--borderColor:var(--yellow6Dark);--borderColorHover:var(--yellow7Dark);--borderColorFocus:var(--yellow6Dark);--borderColorPress:var(--yellow5Dark);} -@media(prefers-color-scheme:dark){ - body{background:var(--background);} - .t_yellow_Checkbox, .t_yellow_RadioGroupItem, .t_yellow_surface2, .t_yellow_Switch, .t_yellow_TooltipContent {--background:var(--yellow3Dark);--backgroundHover:var(--yellow4Dark);--backgroundPress:var(--yellow2Dark);--backgroundFocus:var(--yellow2Dark);--borderColor:var(--yellow6Dark);--borderColorHover:var(--yellow7Dark);--borderColorFocus:var(--yellow6Dark);--borderColorPress:var(--yellow5Dark);} - } -:root.t_dark .t_yellow_active_Button, :root.t_dark .t_yellow_active_Card, :root.t_dark .t_yellow_active_Checkbox, :root.t_dark .t_yellow_active_Input, :root.t_dark .t_yellow_active_RadioGroupItem, :root.t_dark .t_yellow_active_SelectTrigger, :root.t_dark .t_yellow_active_Switch, :root.t_dark .t_yellow_active_TextArea, :root.t_dark .t_yellow_active_TooltipContent, :root.t_dark .t_yellow_surface4 {--background:var(--yellow6Dark);--backgroundHover:var(--yellow6Dark);--backgroundPress:var(--yellow5Dark);--backgroundFocus:var(--yellow5Dark);--borderColor:var(--yellow6Dark);--borderColorHover:var(--yellow6Dark);--borderColorFocus:var(--yellow5Dark);--borderColorPress:var(--yellow5Dark);} -@media(prefers-color-scheme:dark){ - body{background:var(--background);} - .t_yellow_active_Button, .t_yellow_active_Card, .t_yellow_active_Checkbox, .t_yellow_active_Input, .t_yellow_active_RadioGroupItem, .t_yellow_active_SelectTrigger, .t_yellow_active_Switch, .t_yellow_active_TextArea, .t_yellow_active_TooltipContent, .t_yellow_surface4 {--background:var(--yellow6Dark);--backgroundHover:var(--yellow6Dark);--backgroundPress:var(--yellow5Dark);--backgroundFocus:var(--yellow5Dark);--borderColor:var(--yellow6Dark);--borderColorHover:var(--yellow6Dark);--borderColorFocus:var(--yellow5Dark);--borderColorPress:var(--yellow5Dark);} - } -:root.t_dark .t_green_alt1 {--color:var(--green11Dark);--colorHover:var(--green10Dark);--colorPress:var(--green11Dark);--colorFocus:var(--green10Dark);} -@media(prefers-color-scheme:dark){ - body{color:var(--color)} - .t_green_alt1 {--color:var(--green11Dark);--colorHover:var(--green10Dark);--colorPress:var(--green11Dark);--colorFocus:var(--green10Dark);} - } -:root.t_dark .t_green_alt2 {--color:var(--green10Dark);--colorHover:var(--green9Dark);--colorPress:var(--green10Dark);--colorFocus:var(--green9Dark);} -@media(prefers-color-scheme:dark){ - body{color:var(--color)} - .t_green_alt2 {--color:var(--green10Dark);--colorHover:var(--green9Dark);--colorPress:var(--green10Dark);--colorFocus:var(--green9Dark);} - } -:root.t_dark .t_green_active, :root.t_dark .t_green_active_SliderTrackActive, :root.t_dark .t_green_Button, :root.t_dark .t_green_SliderTrackActive, :root.t_dark .t_green_surface3 {--background:var(--green4Dark);--backgroundHover:var(--green5Dark);--backgroundPress:var(--green3Dark);--backgroundFocus:var(--green3Dark);--borderColor:var(--green7Dark);--borderColorHover:var(--green8Dark);--borderColorFocus:var(--green7Dark);--borderColorPress:var(--green6Dark);} -@media(prefers-color-scheme:dark){ - body{background:var(--background);} - .t_green_active, .t_green_active_SliderTrackActive, .t_green_Button, .t_green_SliderTrackActive, .t_green_surface3 {--background:var(--green4Dark);--backgroundHover:var(--green5Dark);--backgroundPress:var(--green3Dark);--backgroundFocus:var(--green3Dark);--borderColor:var(--green7Dark);--borderColorHover:var(--green8Dark);--borderColorFocus:var(--green7Dark);--borderColorPress:var(--green6Dark);} - } -:root.t_dark .t_green_active_ListItem, :root.t_dark .t_green_active_Progress, :root.t_dark .t_green_active_SliderTrack, :root.t_dark .t_green_active_TooltipArrow, :root.t_dark .t_green_Card, :root.t_dark .t_green_Input, :root.t_dark .t_green_ListItem, :root.t_dark .t_green_Progress, :root.t_dark .t_green_SelectTrigger, :root.t_dark .t_green_SliderTrack, :root.t_dark .t_green_surface1, :root.t_dark .t_green_TextArea, :root.t_dark .t_green_TooltipArrow {--background:var(--green2Dark);--backgroundHover:var(--green3Dark);--backgroundPress:var(--green1Dark);--backgroundFocus:var(--green1Dark);--borderColor:var(--green5Dark);--borderColorHover:var(--green6Dark);--borderColorFocus:var(--green5Dark);--borderColorPress:var(--green4Dark);} -@media(prefers-color-scheme:dark){ - body{background:var(--background);} - .t_green_active_ListItem, .t_green_active_Progress, .t_green_active_SliderTrack, .t_green_active_TooltipArrow, .t_green_Card, .t_green_Input, .t_green_ListItem, .t_green_Progress, .t_green_SelectTrigger, .t_green_SliderTrack, .t_green_surface1, .t_green_TextArea, .t_green_TooltipArrow {--background:var(--green2Dark);--backgroundHover:var(--green3Dark);--backgroundPress:var(--green1Dark);--backgroundFocus:var(--green1Dark);--borderColor:var(--green5Dark);--borderColorHover:var(--green6Dark);--borderColorFocus:var(--green5Dark);--borderColorPress:var(--green4Dark);} - } -:root.t_dark .t_green_Checkbox, :root.t_dark .t_green_RadioGroupItem, :root.t_dark .t_green_surface2, :root.t_dark .t_green_Switch, :root.t_dark .t_green_TooltipContent {--background:var(--green3Dark);--backgroundHover:var(--green4Dark);--backgroundPress:var(--green2Dark);--backgroundFocus:var(--green2Dark);--borderColor:var(--green6Dark);--borderColorHover:var(--green7Dark);--borderColorFocus:var(--green6Dark);--borderColorPress:var(--green5Dark);} -@media(prefers-color-scheme:dark){ - body{background:var(--background);} - .t_green_Checkbox, .t_green_RadioGroupItem, .t_green_surface2, .t_green_Switch, .t_green_TooltipContent {--background:var(--green3Dark);--backgroundHover:var(--green4Dark);--backgroundPress:var(--green2Dark);--backgroundFocus:var(--green2Dark);--borderColor:var(--green6Dark);--borderColorHover:var(--green7Dark);--borderColorFocus:var(--green6Dark);--borderColorPress:var(--green5Dark);} - } -:root.t_dark .t_green_active_Button, :root.t_dark .t_green_active_Card, :root.t_dark .t_green_active_Checkbox, :root.t_dark .t_green_active_Input, :root.t_dark .t_green_active_RadioGroupItem, :root.t_dark .t_green_active_SelectTrigger, :root.t_dark .t_green_active_Switch, :root.t_dark .t_green_active_TextArea, :root.t_dark .t_green_active_TooltipContent, :root.t_dark .t_green_surface4 {--background:var(--green6Dark);--backgroundHover:var(--green6Dark);--backgroundPress:var(--green5Dark);--backgroundFocus:var(--green5Dark);--borderColor:var(--green6Dark);--borderColorHover:var(--green6Dark);--borderColorFocus:var(--green5Dark);--borderColorPress:var(--green5Dark);} -@media(prefers-color-scheme:dark){ - body{background:var(--background);} - .t_green_active_Button, .t_green_active_Card, .t_green_active_Checkbox, .t_green_active_Input, .t_green_active_RadioGroupItem, .t_green_active_SelectTrigger, .t_green_active_Switch, .t_green_active_TextArea, .t_green_active_TooltipContent, .t_green_surface4 {--background:var(--green6Dark);--backgroundHover:var(--green6Dark);--backgroundPress:var(--green5Dark);--backgroundFocus:var(--green5Dark);--borderColor:var(--green6Dark);--borderColorHover:var(--green6Dark);--borderColorFocus:var(--green5Dark);--borderColorPress:var(--green5Dark);} - } -:root.t_dark .t_blue_alt1 {--color:var(--blue11Dark);--colorHover:var(--blue10Dark);--colorPress:var(--blue11Dark);--colorFocus:var(--blue10Dark);} -@media(prefers-color-scheme:dark){ - body{color:var(--color)} - .t_blue_alt1 {--color:var(--blue11Dark);--colorHover:var(--blue10Dark);--colorPress:var(--blue11Dark);--colorFocus:var(--blue10Dark);} - } -:root.t_dark .t_blue_alt2 {--color:var(--blue10Dark);--colorHover:var(--blue9Dark);--colorPress:var(--blue10Dark);--colorFocus:var(--blue9Dark);} -@media(prefers-color-scheme:dark){ - body{color:var(--color)} - .t_blue_alt2 {--color:var(--blue10Dark);--colorHover:var(--blue9Dark);--colorPress:var(--blue10Dark);--colorFocus:var(--blue9Dark);} - } -:root.t_dark .t_blue_active, :root.t_dark .t_blue_active_SliderTrackActive, :root.t_dark .t_blue_Button, :root.t_dark .t_blue_SliderTrackActive, :root.t_dark .t_blue_surface3 {--background:var(--blue4Dark);--backgroundHover:var(--blue5Dark);--backgroundPress:var(--blue3Dark);--backgroundFocus:var(--blue3Dark);--borderColor:var(--blue7Dark);--borderColorHover:var(--blue8Dark);--borderColorFocus:var(--blue7Dark);--borderColorPress:var(--blue6Dark);} -@media(prefers-color-scheme:dark){ - body{background:var(--background);} - .t_blue_active, .t_blue_active_SliderTrackActive, .t_blue_Button, .t_blue_SliderTrackActive, .t_blue_surface3 {--background:var(--blue4Dark);--backgroundHover:var(--blue5Dark);--backgroundPress:var(--blue3Dark);--backgroundFocus:var(--blue3Dark);--borderColor:var(--blue7Dark);--borderColorHover:var(--blue8Dark);--borderColorFocus:var(--blue7Dark);--borderColorPress:var(--blue6Dark);} - } -:root.t_dark .t_blue_active_ListItem, :root.t_dark .t_blue_active_Progress, :root.t_dark .t_blue_active_SliderTrack, :root.t_dark .t_blue_active_TooltipArrow, :root.t_dark .t_blue_Card, :root.t_dark .t_blue_Input, :root.t_dark .t_blue_ListItem, :root.t_dark .t_blue_Progress, :root.t_dark .t_blue_SelectTrigger, :root.t_dark .t_blue_SliderTrack, :root.t_dark .t_blue_surface1, :root.t_dark .t_blue_TextArea, :root.t_dark .t_blue_TooltipArrow {--background:var(--blue2Dark);--backgroundHover:var(--blue3Dark);--backgroundPress:var(--blue1Dark);--backgroundFocus:var(--blue1Dark);--borderColor:var(--blue5Dark);--borderColorHover:var(--blue6Dark);--borderColorFocus:var(--blue5Dark);--borderColorPress:var(--blue4Dark);} -@media(prefers-color-scheme:dark){ - body{background:var(--background);} - .t_blue_active_ListItem, .t_blue_active_Progress, .t_blue_active_SliderTrack, .t_blue_active_TooltipArrow, .t_blue_Card, .t_blue_Input, .t_blue_ListItem, .t_blue_Progress, .t_blue_SelectTrigger, .t_blue_SliderTrack, .t_blue_surface1, .t_blue_TextArea, .t_blue_TooltipArrow {--background:var(--blue2Dark);--backgroundHover:var(--blue3Dark);--backgroundPress:var(--blue1Dark);--backgroundFocus:var(--blue1Dark);--borderColor:var(--blue5Dark);--borderColorHover:var(--blue6Dark);--borderColorFocus:var(--blue5Dark);--borderColorPress:var(--blue4Dark);} - } -:root.t_dark .t_blue_Checkbox, :root.t_dark .t_blue_RadioGroupItem, :root.t_dark .t_blue_surface2, :root.t_dark .t_blue_Switch, :root.t_dark .t_blue_TooltipContent {--background:var(--blue3Dark);--backgroundHover:var(--blue4Dark);--backgroundPress:var(--blue2Dark);--backgroundFocus:var(--blue2Dark);--borderColor:var(--blue6Dark);--borderColorHover:var(--blue7Dark);--borderColorFocus:var(--blue6Dark);--borderColorPress:var(--blue5Dark);} -@media(prefers-color-scheme:dark){ - body{background:var(--background);} - .t_blue_Checkbox, .t_blue_RadioGroupItem, .t_blue_surface2, .t_blue_Switch, .t_blue_TooltipContent {--background:var(--blue3Dark);--backgroundHover:var(--blue4Dark);--backgroundPress:var(--blue2Dark);--backgroundFocus:var(--blue2Dark);--borderColor:var(--blue6Dark);--borderColorHover:var(--blue7Dark);--borderColorFocus:var(--blue6Dark);--borderColorPress:var(--blue5Dark);} - } -:root.t_dark .t_blue_active_Button, :root.t_dark .t_blue_active_Card, :root.t_dark .t_blue_active_Checkbox, :root.t_dark .t_blue_active_Input, :root.t_dark .t_blue_active_RadioGroupItem, :root.t_dark .t_blue_active_SelectTrigger, :root.t_dark .t_blue_active_Switch, :root.t_dark .t_blue_active_TextArea, :root.t_dark .t_blue_active_TooltipContent, :root.t_dark .t_blue_surface4 {--background:var(--blue6Dark);--backgroundHover:var(--blue6Dark);--backgroundPress:var(--blue5Dark);--backgroundFocus:var(--blue5Dark);--borderColor:var(--blue6Dark);--borderColorHover:var(--blue6Dark);--borderColorFocus:var(--blue5Dark);--borderColorPress:var(--blue5Dark);} -@media(prefers-color-scheme:dark){ - body{background:var(--background);} - .t_blue_active_Button, .t_blue_active_Card, .t_blue_active_Checkbox, .t_blue_active_Input, .t_blue_active_RadioGroupItem, .t_blue_active_SelectTrigger, .t_blue_active_Switch, .t_blue_active_TextArea, .t_blue_active_TooltipContent, .t_blue_surface4 {--background:var(--blue6Dark);--backgroundHover:var(--blue6Dark);--backgroundPress:var(--blue5Dark);--backgroundFocus:var(--blue5Dark);--borderColor:var(--blue6Dark);--borderColorHover:var(--blue6Dark);--borderColorFocus:var(--blue5Dark);--borderColorPress:var(--blue5Dark);} - } -:root.t_dark .t_purple_alt1 {--color:var(--purple11Dark);--colorHover:var(--purple10Dark);--colorPress:var(--purple11Dark);--colorFocus:var(--purple10Dark);} -@media(prefers-color-scheme:dark){ - body{color:var(--color)} - .t_purple_alt1 {--color:var(--purple11Dark);--colorHover:var(--purple10Dark);--colorPress:var(--purple11Dark);--colorFocus:var(--purple10Dark);} - } -:root.t_dark .t_purple_alt2 {--color:var(--purple10Dark);--colorHover:var(--purple9Dark);--colorPress:var(--purple10Dark);--colorFocus:var(--purple9Dark);} -@media(prefers-color-scheme:dark){ - body{color:var(--color)} - .t_purple_alt2 {--color:var(--purple10Dark);--colorHover:var(--purple9Dark);--colorPress:var(--purple10Dark);--colorFocus:var(--purple9Dark);} - } -:root.t_dark .t_purple_active, :root.t_dark .t_purple_active_SliderTrackActive, :root.t_dark .t_purple_Button, :root.t_dark .t_purple_SliderTrackActive, :root.t_dark .t_purple_surface3 {--background:var(--purple4Dark);--backgroundHover:var(--purple5Dark);--backgroundPress:var(--purple3Dark);--backgroundFocus:var(--purple3Dark);--borderColor:var(--purple7Dark);--borderColorHover:var(--purple8Dark);--borderColorFocus:var(--purple7Dark);--borderColorPress:var(--purple6Dark);} -@media(prefers-color-scheme:dark){ - body{background:var(--background);} - .t_purple_active, .t_purple_active_SliderTrackActive, .t_purple_Button, .t_purple_SliderTrackActive, .t_purple_surface3 {--background:var(--purple4Dark);--backgroundHover:var(--purple5Dark);--backgroundPress:var(--purple3Dark);--backgroundFocus:var(--purple3Dark);--borderColor:var(--purple7Dark);--borderColorHover:var(--purple8Dark);--borderColorFocus:var(--purple7Dark);--borderColorPress:var(--purple6Dark);} - } -:root.t_dark .t_purple_active_ListItem, :root.t_dark .t_purple_active_Progress, :root.t_dark .t_purple_active_SliderTrack, :root.t_dark .t_purple_active_TooltipArrow, :root.t_dark .t_purple_Card, :root.t_dark .t_purple_Input, :root.t_dark .t_purple_ListItem, :root.t_dark .t_purple_Progress, :root.t_dark .t_purple_SelectTrigger, :root.t_dark .t_purple_SliderTrack, :root.t_dark .t_purple_surface1, :root.t_dark .t_purple_TextArea, :root.t_dark .t_purple_TooltipArrow {--background:var(--purple2Dark);--backgroundHover:var(--purple3Dark);--backgroundPress:var(--purple1Dark);--backgroundFocus:var(--purple1Dark);--borderColor:var(--purple5Dark);--borderColorHover:var(--purple6Dark);--borderColorFocus:var(--purple5Dark);--borderColorPress:var(--purple4Dark);} -@media(prefers-color-scheme:dark){ - body{background:var(--background);} - .t_purple_active_ListItem, .t_purple_active_Progress, .t_purple_active_SliderTrack, .t_purple_active_TooltipArrow, .t_purple_Card, .t_purple_Input, .t_purple_ListItem, .t_purple_Progress, .t_purple_SelectTrigger, .t_purple_SliderTrack, .t_purple_surface1, .t_purple_TextArea, .t_purple_TooltipArrow {--background:var(--purple2Dark);--backgroundHover:var(--purple3Dark);--backgroundPress:var(--purple1Dark);--backgroundFocus:var(--purple1Dark);--borderColor:var(--purple5Dark);--borderColorHover:var(--purple6Dark);--borderColorFocus:var(--purple5Dark);--borderColorPress:var(--purple4Dark);} - } -:root.t_dark .t_purple_Checkbox, :root.t_dark .t_purple_RadioGroupItem, :root.t_dark .t_purple_surface2, :root.t_dark .t_purple_Switch, :root.t_dark .t_purple_TooltipContent {--background:var(--purple3Dark);--backgroundHover:var(--purple4Dark);--backgroundPress:var(--purple2Dark);--backgroundFocus:var(--purple2Dark);--borderColor:var(--purple6Dark);--borderColorHover:var(--purple7Dark);--borderColorFocus:var(--purple6Dark);--borderColorPress:var(--purple5Dark);} -@media(prefers-color-scheme:dark){ - body{background:var(--background);} - .t_purple_Checkbox, .t_purple_RadioGroupItem, .t_purple_surface2, .t_purple_Switch, .t_purple_TooltipContent {--background:var(--purple3Dark);--backgroundHover:var(--purple4Dark);--backgroundPress:var(--purple2Dark);--backgroundFocus:var(--purple2Dark);--borderColor:var(--purple6Dark);--borderColorHover:var(--purple7Dark);--borderColorFocus:var(--purple6Dark);--borderColorPress:var(--purple5Dark);} - } -:root.t_dark .t_purple_active_Button, :root.t_dark .t_purple_active_Card, :root.t_dark .t_purple_active_Checkbox, :root.t_dark .t_purple_active_Input, :root.t_dark .t_purple_active_RadioGroupItem, :root.t_dark .t_purple_active_SelectTrigger, :root.t_dark .t_purple_active_Switch, :root.t_dark .t_purple_active_TextArea, :root.t_dark .t_purple_active_TooltipContent, :root.t_dark .t_purple_surface4 {--background:var(--purple6Dark);--backgroundHover:var(--purple6Dark);--backgroundPress:var(--purple5Dark);--backgroundFocus:var(--purple5Dark);--borderColor:var(--purple6Dark);--borderColorHover:var(--purple6Dark);--borderColorFocus:var(--purple5Dark);--borderColorPress:var(--purple5Dark);} -@media(prefers-color-scheme:dark){ - body{background:var(--background);} - .t_purple_active_Button, .t_purple_active_Card, .t_purple_active_Checkbox, .t_purple_active_Input, .t_purple_active_RadioGroupItem, .t_purple_active_SelectTrigger, .t_purple_active_Switch, .t_purple_active_TextArea, .t_purple_active_TooltipContent, .t_purple_surface4 {--background:var(--purple6Dark);--backgroundHover:var(--purple6Dark);--backgroundPress:var(--purple5Dark);--backgroundFocus:var(--purple5Dark);--borderColor:var(--purple6Dark);--borderColorHover:var(--purple6Dark);--borderColorFocus:var(--purple5Dark);--borderColorPress:var(--purple5Dark);} - } -:root.t_dark .t_pink_alt1 {--color:var(--pink11Dark);--colorHover:var(--pink10Dark);--colorPress:var(--pink11Dark);--colorFocus:var(--pink10Dark);} -@media(prefers-color-scheme:dark){ - body{color:var(--color)} - .t_pink_alt1 {--color:var(--pink11Dark);--colorHover:var(--pink10Dark);--colorPress:var(--pink11Dark);--colorFocus:var(--pink10Dark);} - } -:root.t_dark .t_pink_alt2 {--color:var(--pink10Dark);--colorHover:var(--pink9Dark);--colorPress:var(--pink10Dark);--colorFocus:var(--pink9Dark);} -@media(prefers-color-scheme:dark){ - body{color:var(--color)} - .t_pink_alt2 {--color:var(--pink10Dark);--colorHover:var(--pink9Dark);--colorPress:var(--pink10Dark);--colorFocus:var(--pink9Dark);} - } -:root.t_dark .t_pink_active, :root.t_dark .t_pink_active_SliderTrackActive, :root.t_dark .t_pink_Button, :root.t_dark .t_pink_SliderTrackActive, :root.t_dark .t_pink_surface3 {--background:var(--pink4Dark);--backgroundHover:var(--pink5Dark);--backgroundPress:var(--pink3Dark);--backgroundFocus:var(--pink3Dark);--borderColor:var(--pink7Dark);--borderColorHover:var(--pink8Dark);--borderColorFocus:var(--pink7Dark);--borderColorPress:var(--pink6Dark);} -@media(prefers-color-scheme:dark){ - body{background:var(--background);} - .t_pink_active, .t_pink_active_SliderTrackActive, .t_pink_Button, .t_pink_SliderTrackActive, .t_pink_surface3 {--background:var(--pink4Dark);--backgroundHover:var(--pink5Dark);--backgroundPress:var(--pink3Dark);--backgroundFocus:var(--pink3Dark);--borderColor:var(--pink7Dark);--borderColorHover:var(--pink8Dark);--borderColorFocus:var(--pink7Dark);--borderColorPress:var(--pink6Dark);} - } -:root.t_dark .t_pink_active_ListItem, :root.t_dark .t_pink_active_Progress, :root.t_dark .t_pink_active_SliderTrack, :root.t_dark .t_pink_active_TooltipArrow, :root.t_dark .t_pink_Card, :root.t_dark .t_pink_Input, :root.t_dark .t_pink_ListItem, :root.t_dark .t_pink_Progress, :root.t_dark .t_pink_SelectTrigger, :root.t_dark .t_pink_SliderTrack, :root.t_dark .t_pink_surface1, :root.t_dark .t_pink_TextArea, :root.t_dark .t_pink_TooltipArrow {--background:var(--pink2Dark);--backgroundHover:var(--pink3Dark);--backgroundPress:var(--pink1Dark);--backgroundFocus:var(--pink1Dark);--borderColor:var(--pink5Dark);--borderColorHover:var(--pink6Dark);--borderColorFocus:var(--pink5Dark);--borderColorPress:var(--pink4Dark);} -@media(prefers-color-scheme:dark){ - body{background:var(--background);} - .t_pink_active_ListItem, .t_pink_active_Progress, .t_pink_active_SliderTrack, .t_pink_active_TooltipArrow, .t_pink_Card, .t_pink_Input, .t_pink_ListItem, .t_pink_Progress, .t_pink_SelectTrigger, .t_pink_SliderTrack, .t_pink_surface1, .t_pink_TextArea, .t_pink_TooltipArrow {--background:var(--pink2Dark);--backgroundHover:var(--pink3Dark);--backgroundPress:var(--pink1Dark);--backgroundFocus:var(--pink1Dark);--borderColor:var(--pink5Dark);--borderColorHover:var(--pink6Dark);--borderColorFocus:var(--pink5Dark);--borderColorPress:var(--pink4Dark);} - } -:root.t_dark .t_pink_Checkbox, :root.t_dark .t_pink_RadioGroupItem, :root.t_dark .t_pink_surface2, :root.t_dark .t_pink_Switch, :root.t_dark .t_pink_TooltipContent {--background:var(--pink3Dark);--backgroundHover:var(--pink4Dark);--backgroundPress:var(--pink2Dark);--backgroundFocus:var(--pink2Dark);--borderColor:var(--pink6Dark);--borderColorHover:var(--pink7Dark);--borderColorFocus:var(--pink6Dark);--borderColorPress:var(--pink5Dark);} -@media(prefers-color-scheme:dark){ - body{background:var(--background);} - .t_pink_Checkbox, .t_pink_RadioGroupItem, .t_pink_surface2, .t_pink_Switch, .t_pink_TooltipContent {--background:var(--pink3Dark);--backgroundHover:var(--pink4Dark);--backgroundPress:var(--pink2Dark);--backgroundFocus:var(--pink2Dark);--borderColor:var(--pink6Dark);--borderColorHover:var(--pink7Dark);--borderColorFocus:var(--pink6Dark);--borderColorPress:var(--pink5Dark);} - } -:root.t_dark .t_pink_active_Button, :root.t_dark .t_pink_active_Card, :root.t_dark .t_pink_active_Checkbox, :root.t_dark .t_pink_active_Input, :root.t_dark .t_pink_active_RadioGroupItem, :root.t_dark .t_pink_active_SelectTrigger, :root.t_dark .t_pink_active_Switch, :root.t_dark .t_pink_active_TextArea, :root.t_dark .t_pink_active_TooltipContent, :root.t_dark .t_pink_surface4 {--background:var(--pink6Dark);--backgroundHover:var(--pink6Dark);--backgroundPress:var(--pink5Dark);--backgroundFocus:var(--pink5Dark);--borderColor:var(--pink6Dark);--borderColorHover:var(--pink6Dark);--borderColorFocus:var(--pink5Dark);--borderColorPress:var(--pink5Dark);} -@media(prefers-color-scheme:dark){ - body{background:var(--background);} - .t_pink_active_Button, .t_pink_active_Card, .t_pink_active_Checkbox, .t_pink_active_Input, .t_pink_active_RadioGroupItem, .t_pink_active_SelectTrigger, .t_pink_active_Switch, .t_pink_active_TextArea, .t_pink_active_TooltipContent, .t_pink_surface4 {--background:var(--pink6Dark);--backgroundHover:var(--pink6Dark);--backgroundPress:var(--pink5Dark);--backgroundFocus:var(--pink5Dark);--borderColor:var(--pink6Dark);--borderColorHover:var(--pink6Dark);--borderColorFocus:var(--pink5Dark);--borderColorPress:var(--pink5Dark);} - } -:root.t_dark .t_red_alt1 {--color:var(--red11Dark);--colorHover:var(--red10Dark);--colorPress:var(--red11Dark);--colorFocus:var(--red10Dark);} -@media(prefers-color-scheme:dark){ - body{color:var(--color)} - .t_red_alt1 {--color:var(--red11Dark);--colorHover:var(--red10Dark);--colorPress:var(--red11Dark);--colorFocus:var(--red10Dark);} - } -:root.t_dark .t_red_alt2 {--color:var(--red10Dark);--colorHover:var(--red9Dark);--colorPress:var(--red10Dark);--colorFocus:var(--red9Dark);} -@media(prefers-color-scheme:dark){ - body{color:var(--color)} - .t_red_alt2 {--color:var(--red10Dark);--colorHover:var(--red9Dark);--colorPress:var(--red10Dark);--colorFocus:var(--red9Dark);} - } -:root.t_dark .t_red_active, :root.t_dark .t_red_active_SliderTrackActive, :root.t_dark .t_red_Button, :root.t_dark .t_red_SliderTrackActive, :root.t_dark .t_red_surface3 {--background:var(--red4Dark);--backgroundHover:var(--red5Dark);--backgroundPress:var(--red3Dark);--backgroundFocus:var(--red3Dark);--borderColor:var(--red7Dark);--borderColorHover:var(--red8Dark);--borderColorFocus:var(--red7Dark);--borderColorPress:var(--red6Dark);} -@media(prefers-color-scheme:dark){ - body{background:var(--background);} - .t_red_active, .t_red_active_SliderTrackActive, .t_red_Button, .t_red_SliderTrackActive, .t_red_surface3 {--background:var(--red4Dark);--backgroundHover:var(--red5Dark);--backgroundPress:var(--red3Dark);--backgroundFocus:var(--red3Dark);--borderColor:var(--red7Dark);--borderColorHover:var(--red8Dark);--borderColorFocus:var(--red7Dark);--borderColorPress:var(--red6Dark);} - } -:root.t_dark .t_red_active_ListItem, :root.t_dark .t_red_active_Progress, :root.t_dark .t_red_active_SliderTrack, :root.t_dark .t_red_active_TooltipArrow, :root.t_dark .t_red_Card, :root.t_dark .t_red_Input, :root.t_dark .t_red_ListItem, :root.t_dark .t_red_Progress, :root.t_dark .t_red_SelectTrigger, :root.t_dark .t_red_SliderTrack, :root.t_dark .t_red_surface1, :root.t_dark .t_red_TextArea, :root.t_dark .t_red_TooltipArrow {--background:var(--red2Dark);--backgroundHover:var(--red3Dark);--backgroundPress:var(--red1Dark);--backgroundFocus:var(--red1Dark);--borderColor:var(--red5Dark);--borderColorHover:var(--red6Dark);--borderColorFocus:var(--red5Dark);--borderColorPress:var(--red4Dark);} -@media(prefers-color-scheme:dark){ - body{background:var(--background);} - .t_red_active_ListItem, .t_red_active_Progress, .t_red_active_SliderTrack, .t_red_active_TooltipArrow, .t_red_Card, .t_red_Input, .t_red_ListItem, .t_red_Progress, .t_red_SelectTrigger, .t_red_SliderTrack, .t_red_surface1, .t_red_TextArea, .t_red_TooltipArrow {--background:var(--red2Dark);--backgroundHover:var(--red3Dark);--backgroundPress:var(--red1Dark);--backgroundFocus:var(--red1Dark);--borderColor:var(--red5Dark);--borderColorHover:var(--red6Dark);--borderColorFocus:var(--red5Dark);--borderColorPress:var(--red4Dark);} - } -:root.t_dark .t_red_Checkbox, :root.t_dark .t_red_RadioGroupItem, :root.t_dark .t_red_surface2, :root.t_dark .t_red_Switch, :root.t_dark .t_red_TooltipContent {--background:var(--red3Dark);--backgroundHover:var(--red4Dark);--backgroundPress:var(--red2Dark);--backgroundFocus:var(--red2Dark);--borderColor:var(--red6Dark);--borderColorHover:var(--red7Dark);--borderColorFocus:var(--red6Dark);--borderColorPress:var(--red5Dark);} -@media(prefers-color-scheme:dark){ - body{background:var(--background);} - .t_red_Checkbox, .t_red_RadioGroupItem, .t_red_surface2, .t_red_Switch, .t_red_TooltipContent {--background:var(--red3Dark);--backgroundHover:var(--red4Dark);--backgroundPress:var(--red2Dark);--backgroundFocus:var(--red2Dark);--borderColor:var(--red6Dark);--borderColorHover:var(--red7Dark);--borderColorFocus:var(--red6Dark);--borderColorPress:var(--red5Dark);} - } -:root.t_dark .t_red_active_Button, :root.t_dark .t_red_active_Card, :root.t_dark .t_red_active_Checkbox, :root.t_dark .t_red_active_Input, :root.t_dark .t_red_active_RadioGroupItem, :root.t_dark .t_red_active_SelectTrigger, :root.t_dark .t_red_active_Switch, :root.t_dark .t_red_active_TextArea, :root.t_dark .t_red_active_TooltipContent, :root.t_dark .t_red_surface4 {--background:var(--red6Dark);--backgroundHover:var(--red6Dark);--backgroundPress:var(--red5Dark);--backgroundFocus:var(--red5Dark);--borderColor:var(--red6Dark);--borderColorHover:var(--red6Dark);--borderColorFocus:var(--red5Dark);--borderColorPress:var(--red5Dark);} -@media(prefers-color-scheme:dark){ - body{background:var(--background);} - .t_red_active_Button, .t_red_active_Card, .t_red_active_Checkbox, .t_red_active_Input, .t_red_active_RadioGroupItem, .t_red_active_SelectTrigger, .t_red_active_Switch, .t_red_active_TextArea, .t_red_active_TooltipContent, .t_red_surface4 {--background:var(--red6Dark);--backgroundHover:var(--red6Dark);--backgroundPress:var(--red5Dark);--backgroundFocus:var(--red5Dark);--borderColor:var(--red6Dark);--borderColorHover:var(--red6Dark);--borderColorFocus:var(--red5Dark);--borderColorPress:var(--red5Dark);} - } -:root.t_dark .t_gray_alt1 {--color:var(--gray11Dark);--colorHover:var(--gray10Dark);--colorPress:var(--gray11Dark);--colorFocus:var(--gray10Dark);} -@media(prefers-color-scheme:dark){ - body{color:var(--color)} - .t_gray_alt1 {--color:var(--gray11Dark);--colorHover:var(--gray10Dark);--colorPress:var(--gray11Dark);--colorFocus:var(--gray10Dark);} - } -:root.t_dark .t_gray_alt2 {--color:var(--gray10Dark);--colorHover:var(--gray9Dark);--colorPress:var(--gray10Dark);--colorFocus:var(--gray9Dark);} -@media(prefers-color-scheme:dark){ - body{color:var(--color)} - .t_gray_alt2 {--color:var(--gray10Dark);--colorHover:var(--gray9Dark);--colorPress:var(--gray10Dark);--colorFocus:var(--gray9Dark);} - } -:root.t_dark .t_gray_active, :root.t_dark .t_gray_active_SliderTrackActive, :root.t_dark .t_gray_Button, :root.t_dark .t_gray_SliderTrackActive, :root.t_dark .t_gray_surface3 {--background:var(--gray4Dark);--backgroundHover:var(--gray5Dark);--backgroundPress:var(--gray3Dark);--backgroundFocus:var(--gray3Dark);--borderColor:var(--gray7Dark);--borderColorHover:var(--gray8Dark);--borderColorFocus:var(--gray7Dark);--borderColorPress:var(--gray6Dark);} -@media(prefers-color-scheme:dark){ - body{background:var(--background);} - .t_gray_active, .t_gray_active_SliderTrackActive, .t_gray_Button, .t_gray_SliderTrackActive, .t_gray_surface3 {--background:var(--gray4Dark);--backgroundHover:var(--gray5Dark);--backgroundPress:var(--gray3Dark);--backgroundFocus:var(--gray3Dark);--borderColor:var(--gray7Dark);--borderColorHover:var(--gray8Dark);--borderColorFocus:var(--gray7Dark);--borderColorPress:var(--gray6Dark);} - } -:root.t_dark .t_gray_active_ListItem, :root.t_dark .t_gray_active_Progress, :root.t_dark .t_gray_active_SliderTrack, :root.t_dark .t_gray_active_TooltipArrow, :root.t_dark .t_gray_Card, :root.t_dark .t_gray_Input, :root.t_dark .t_gray_ListItem, :root.t_dark .t_gray_Progress, :root.t_dark .t_gray_SelectTrigger, :root.t_dark .t_gray_SliderTrack, :root.t_dark .t_gray_surface1, :root.t_dark .t_gray_TextArea, :root.t_dark .t_gray_TooltipArrow {--background:var(--gray2Dark);--backgroundHover:var(--gray3Dark);--backgroundPress:var(--gray1Dark);--backgroundFocus:var(--gray1Dark);--borderColor:var(--gray5Dark);--borderColorHover:var(--gray6Dark);--borderColorFocus:var(--gray5Dark);--borderColorPress:var(--gray4Dark);} -@media(prefers-color-scheme:dark){ - body{background:var(--background);} - .t_gray_active_ListItem, .t_gray_active_Progress, .t_gray_active_SliderTrack, .t_gray_active_TooltipArrow, .t_gray_Card, .t_gray_Input, .t_gray_ListItem, .t_gray_Progress, .t_gray_SelectTrigger, .t_gray_SliderTrack, .t_gray_surface1, .t_gray_TextArea, .t_gray_TooltipArrow {--background:var(--gray2Dark);--backgroundHover:var(--gray3Dark);--backgroundPress:var(--gray1Dark);--backgroundFocus:var(--gray1Dark);--borderColor:var(--gray5Dark);--borderColorHover:var(--gray6Dark);--borderColorFocus:var(--gray5Dark);--borderColorPress:var(--gray4Dark);} - } -:root.t_dark .t_gray_Checkbox, :root.t_dark .t_gray_RadioGroupItem, :root.t_dark .t_gray_surface2, :root.t_dark .t_gray_Switch, :root.t_dark .t_gray_TooltipContent {--background:var(--gray3Dark);--backgroundHover:var(--gray4Dark);--backgroundPress:var(--gray2Dark);--backgroundFocus:var(--gray2Dark);--borderColor:var(--gray6Dark);--borderColorHover:var(--gray7Dark);--borderColorFocus:var(--gray6Dark);--borderColorPress:var(--gray5Dark);} -@media(prefers-color-scheme:dark){ - body{background:var(--background);} - .t_gray_Checkbox, .t_gray_RadioGroupItem, .t_gray_surface2, .t_gray_Switch, .t_gray_TooltipContent {--background:var(--gray3Dark);--backgroundHover:var(--gray4Dark);--backgroundPress:var(--gray2Dark);--backgroundFocus:var(--gray2Dark);--borderColor:var(--gray6Dark);--borderColorHover:var(--gray7Dark);--borderColorFocus:var(--gray6Dark);--borderColorPress:var(--gray5Dark);} - } -:root.t_dark .t_gray_active_Button, :root.t_dark .t_gray_active_Card, :root.t_dark .t_gray_active_Checkbox, :root.t_dark .t_gray_active_Input, :root.t_dark .t_gray_active_RadioGroupItem, :root.t_dark .t_gray_active_SelectTrigger, :root.t_dark .t_gray_active_Switch, :root.t_dark .t_gray_active_TextArea, :root.t_dark .t_gray_active_TooltipContent, :root.t_dark .t_gray_surface4 {--background:var(--gray6Dark);--backgroundHover:var(--gray6Dark);--backgroundPress:var(--gray5Dark);--backgroundFocus:var(--gray5Dark);--borderColor:var(--gray6Dark);--borderColorHover:var(--gray6Dark);--borderColorFocus:var(--gray5Dark);--borderColorPress:var(--gray5Dark);} -@media(prefers-color-scheme:dark){ - body{background:var(--background);} - .t_gray_active_Button, .t_gray_active_Card, .t_gray_active_Checkbox, .t_gray_active_Input, .t_gray_active_RadioGroupItem, .t_gray_active_SelectTrigger, .t_gray_active_Switch, .t_gray_active_TextArea, .t_gray_active_TooltipContent, .t_gray_surface4 {--background:var(--gray6Dark);--backgroundHover:var(--gray6Dark);--backgroundPress:var(--gray5Dark);--backgroundFocus:var(--gray5Dark);--borderColor:var(--gray6Dark);--borderColorHover:var(--gray6Dark);--borderColorFocus:var(--gray5Dark);--borderColorPress:var(--gray5Dark);} - } -:root.t_light .t_ProgressIndicator, :root.t_light .t_SliderThumb, :root.t_light .t_SwitchThumb, :root.t_light .t_Tooltip {--color:var(--white2);--colorHover:var(--black12);--colorPress:var(--white3);--colorFocus:var(--white3);--background:var(--gray12Light);--backgroundHover:var(--white11);--backgroundPress:var(--gray12Light);--backgroundFocus:var(--white11);--borderColor:var(--white10);--borderColorHover:var(--gray9Light);--borderColorFocus:var(--white8);--borderColorPress:var(--white7);} -@media(prefers-color-scheme:light){ - body{background:var(--background);color:var(--color)} - .t_ProgressIndicator, .t_SliderThumb, .t_SwitchThumb, .t_Tooltip {--color:var(--white2);--colorHover:var(--black12);--colorPress:var(--white3);--colorFocus:var(--white3);--background:var(--gray12Light);--backgroundHover:var(--white11);--backgroundPress:var(--gray12Light);--backgroundFocus:var(--white11);--borderColor:var(--white10);--borderColorHover:var(--gray9Light);--borderColorFocus:var(--white8);--borderColorPress:var(--white7);} - } -:root.t_light .t_active_DialogOverlay, :root.t_light .t_active_ModalOverlay, :root.t_light .t_active_SheetOverlay, :root.t_light .t_blue_active_DialogOverlay, :root.t_light .t_blue_active_ModalOverlay, :root.t_light .t_blue_active_SheetOverlay, :root.t_light .t_blue_DialogOverlay, :root.t_light .t_blue_ModalOverlay, :root.t_light .t_blue_SheetOverlay, :root.t_light .t_DialogOverlay, :root.t_light .t_gray_active_DialogOverlay, :root.t_light .t_gray_active_ModalOverlay, :root.t_light .t_gray_active_SheetOverlay, :root.t_light .t_gray_DialogOverlay, :root.t_light .t_gray_ModalOverlay, :root.t_light .t_gray_SheetOverlay, :root.t_light .t_green_active_DialogOverlay, :root.t_light .t_green_active_ModalOverlay, :root.t_light .t_green_active_SheetOverlay, :root.t_light .t_green_DialogOverlay, :root.t_light .t_green_ModalOverlay, :root.t_light .t_green_SheetOverlay, :root.t_light .t_ModalOverlay, :root.t_light .t_orange_active_DialogOverlay, :root.t_light .t_orange_active_ModalOverlay, :root.t_light .t_orange_active_SheetOverlay, :root.t_light .t_orange_DialogOverlay, :root.t_light .t_orange_ModalOverlay, :root.t_light .t_orange_SheetOverlay, :root.t_light .t_pink_active_DialogOverlay, :root.t_light .t_pink_active_ModalOverlay, :root.t_light .t_pink_active_SheetOverlay, :root.t_light .t_pink_DialogOverlay, :root.t_light .t_pink_ModalOverlay, :root.t_light .t_pink_SheetOverlay, :root.t_light .t_purple_active_DialogOverlay, :root.t_light .t_purple_active_ModalOverlay, :root.t_light .t_purple_active_SheetOverlay, :root.t_light .t_purple_DialogOverlay, :root.t_light .t_purple_ModalOverlay, :root.t_light .t_purple_SheetOverlay, :root.t_light .t_red_active_DialogOverlay, :root.t_light .t_red_active_ModalOverlay, :root.t_light .t_red_active_SheetOverlay, :root.t_light .t_red_DialogOverlay, :root.t_light .t_red_ModalOverlay, :root.t_light .t_red_SheetOverlay, :root.t_light .t_SheetOverlay, :root.t_light .t_yellow_active_DialogOverlay, :root.t_light .t_yellow_active_ModalOverlay, :root.t_light .t_yellow_active_SheetOverlay, :root.t_light .t_yellow_DialogOverlay, :root.t_light .t_yellow_ModalOverlay, :root.t_light .t_yellow_SheetOverlay {--background:rgba(0,0,0,0.5);} -@media(prefers-color-scheme:light){ - body{background:var(--background);} - .t_active_DialogOverlay, .t_active_ModalOverlay, .t_active_SheetOverlay, .t_blue_active_DialogOverlay, .t_blue_active_ModalOverlay, .t_blue_active_SheetOverlay, .t_blue_DialogOverlay, .t_blue_ModalOverlay, .t_blue_SheetOverlay, .t_DialogOverlay, .t_gray_active_DialogOverlay, .t_gray_active_ModalOverlay, .t_gray_active_SheetOverlay, .t_gray_DialogOverlay, .t_gray_ModalOverlay, .t_gray_SheetOverlay, .t_green_active_DialogOverlay, .t_green_active_ModalOverlay, .t_green_active_SheetOverlay, .t_green_DialogOverlay, .t_green_ModalOverlay, .t_green_SheetOverlay, .t_ModalOverlay, .t_orange_active_DialogOverlay, .t_orange_active_ModalOverlay, .t_orange_active_SheetOverlay, .t_orange_DialogOverlay, .t_orange_ModalOverlay, .t_orange_SheetOverlay, .t_pink_active_DialogOverlay, .t_pink_active_ModalOverlay, .t_pink_active_SheetOverlay, .t_pink_DialogOverlay, .t_pink_ModalOverlay, .t_pink_SheetOverlay, .t_purple_active_DialogOverlay, .t_purple_active_ModalOverlay, .t_purple_active_SheetOverlay, .t_purple_DialogOverlay, .t_purple_ModalOverlay, .t_purple_SheetOverlay, .t_red_active_DialogOverlay, .t_red_active_ModalOverlay, .t_red_active_SheetOverlay, .t_red_DialogOverlay, .t_red_ModalOverlay, .t_red_SheetOverlay, .t_SheetOverlay, .t_yellow_active_DialogOverlay, .t_yellow_active_ModalOverlay, .t_yellow_active_SheetOverlay, .t_yellow_DialogOverlay, .t_yellow_ModalOverlay, .t_yellow_SheetOverlay {--background:rgba(0,0,0,0.5);} - } -:root.t_dark .t_ProgressIndicator, :root.t_dark .t_SliderThumb, :root.t_dark .t_SwitchThumb, :root.t_dark .t_Tooltip {--color:var(--black2);--colorHover:var(--black3);--colorPress:var(--black1);--colorFocus:var(--black1);--background:var(--black12);--backgroundHover:var(--black11);--backgroundPress:var(--black12);--backgroundFocus:var(--black11);--borderColor:var(--black10);--borderColorHover:var(--black9);--borderColorFocus:var(--black8);--borderColorPress:var(--black7);} -@media(prefers-color-scheme:dark){ - body{background:var(--background);color:var(--color)} - .t_ProgressIndicator, .t_SliderThumb, .t_SwitchThumb, .t_Tooltip {--color:var(--black2);--colorHover:var(--black3);--colorPress:var(--black1);--colorFocus:var(--black1);--background:var(--black12);--backgroundHover:var(--black11);--backgroundPress:var(--black12);--backgroundFocus:var(--black11);--borderColor:var(--black10);--borderColorHover:var(--black9);--borderColorFocus:var(--black8);--borderColorPress:var(--black7);} - } -:root.t_dark .t_active_DialogOverlay, :root.t_dark .t_active_ModalOverlay, :root.t_dark .t_active_SheetOverlay, :root.t_dark .t_blue_active_DialogOverlay, :root.t_dark .t_blue_active_ModalOverlay, :root.t_dark .t_blue_active_SheetOverlay, :root.t_dark .t_blue_DialogOverlay, :root.t_dark .t_blue_ModalOverlay, :root.t_dark .t_blue_SheetOverlay, :root.t_dark .t_DialogOverlay, :root.t_dark .t_gray_active_DialogOverlay, :root.t_dark .t_gray_active_ModalOverlay, :root.t_dark .t_gray_active_SheetOverlay, :root.t_dark .t_gray_DialogOverlay, :root.t_dark .t_gray_ModalOverlay, :root.t_dark .t_gray_SheetOverlay, :root.t_dark .t_green_active_DialogOverlay, :root.t_dark .t_green_active_ModalOverlay, :root.t_dark .t_green_active_SheetOverlay, :root.t_dark .t_green_DialogOverlay, :root.t_dark .t_green_ModalOverlay, :root.t_dark .t_green_SheetOverlay, :root.t_dark .t_ModalOverlay, :root.t_dark .t_orange_active_DialogOverlay, :root.t_dark .t_orange_active_ModalOverlay, :root.t_dark .t_orange_active_SheetOverlay, :root.t_dark .t_orange_DialogOverlay, :root.t_dark .t_orange_ModalOverlay, :root.t_dark .t_orange_SheetOverlay, :root.t_dark .t_pink_active_DialogOverlay, :root.t_dark .t_pink_active_ModalOverlay, :root.t_dark .t_pink_active_SheetOverlay, :root.t_dark .t_pink_DialogOverlay, :root.t_dark .t_pink_ModalOverlay, :root.t_dark .t_pink_SheetOverlay, :root.t_dark .t_purple_active_DialogOverlay, :root.t_dark .t_purple_active_ModalOverlay, :root.t_dark .t_purple_active_SheetOverlay, :root.t_dark .t_purple_DialogOverlay, :root.t_dark .t_purple_ModalOverlay, :root.t_dark .t_purple_SheetOverlay, :root.t_dark .t_red_active_DialogOverlay, :root.t_dark .t_red_active_ModalOverlay, :root.t_dark .t_red_active_SheetOverlay, :root.t_dark .t_red_DialogOverlay, :root.t_dark .t_red_ModalOverlay, :root.t_dark .t_red_SheetOverlay, :root.t_dark .t_SheetOverlay, :root.t_dark .t_yellow_active_DialogOverlay, :root.t_dark .t_yellow_active_ModalOverlay, :root.t_dark .t_yellow_active_SheetOverlay, :root.t_dark .t_yellow_DialogOverlay, :root.t_dark .t_yellow_ModalOverlay, :root.t_dark .t_yellow_SheetOverlay {--background:rgba(0,0,0,0.8);} -@media(prefers-color-scheme:dark){ - body{background:var(--background);} - .t_active_DialogOverlay, .t_active_ModalOverlay, .t_active_SheetOverlay, .t_blue_active_DialogOverlay, .t_blue_active_ModalOverlay, .t_blue_active_SheetOverlay, .t_blue_DialogOverlay, .t_blue_ModalOverlay, .t_blue_SheetOverlay, .t_DialogOverlay, .t_gray_active_DialogOverlay, .t_gray_active_ModalOverlay, .t_gray_active_SheetOverlay, .t_gray_DialogOverlay, .t_gray_ModalOverlay, .t_gray_SheetOverlay, .t_green_active_DialogOverlay, .t_green_active_ModalOverlay, .t_green_active_SheetOverlay, .t_green_DialogOverlay, .t_green_ModalOverlay, .t_green_SheetOverlay, .t_ModalOverlay, .t_orange_active_DialogOverlay, .t_orange_active_ModalOverlay, .t_orange_active_SheetOverlay, .t_orange_DialogOverlay, .t_orange_ModalOverlay, .t_orange_SheetOverlay, .t_pink_active_DialogOverlay, .t_pink_active_ModalOverlay, .t_pink_active_SheetOverlay, .t_pink_DialogOverlay, .t_pink_ModalOverlay, .t_pink_SheetOverlay, .t_purple_active_DialogOverlay, .t_purple_active_ModalOverlay, .t_purple_active_SheetOverlay, .t_purple_DialogOverlay, .t_purple_ModalOverlay, .t_purple_SheetOverlay, .t_red_active_DialogOverlay, .t_red_active_ModalOverlay, .t_red_active_SheetOverlay, .t_red_DialogOverlay, .t_red_ModalOverlay, .t_red_SheetOverlay, .t_SheetOverlay, .t_yellow_active_DialogOverlay, .t_yellow_active_ModalOverlay, .t_yellow_active_SheetOverlay, .t_yellow_DialogOverlay, .t_yellow_ModalOverlay, .t_yellow_SheetOverlay {--background:rgba(0,0,0,0.8);} - } -:root.t_light .t_orange_ProgressIndicator, :root.t_light .t_orange_SliderThumb, :root.t_light .t_orange_SwitchThumb, :root.t_light .t_orange_Tooltip {--color:var(--orange2Light);--colorHover:var(--orange1Light);--colorPress:var(--orange3Light);--colorFocus:var(--orange3Light);--background:var(--orange12Light);--backgroundHover:var(--orange11Light);--backgroundPress:var(--orange12Light);--backgroundFocus:var(--orange11Light);--borderColor:var(--orange10Light);--borderColorHover:var(--orange9Dark);--borderColorFocus:var(--orange8Light);--borderColorPress:var(--orange7Light);} -@media(prefers-color-scheme:light){ - body{background:var(--background);color:var(--color)} - .t_orange_ProgressIndicator, .t_orange_SliderThumb, .t_orange_SwitchThumb, .t_orange_Tooltip {--color:var(--orange2Light);--colorHover:var(--orange1Light);--colorPress:var(--orange3Light);--colorFocus:var(--orange3Light);--background:var(--orange12Light);--backgroundHover:var(--orange11Light);--backgroundPress:var(--orange12Light);--backgroundFocus:var(--orange11Light);--borderColor:var(--orange10Light);--borderColorHover:var(--orange9Dark);--borderColorFocus:var(--orange8Light);--borderColorPress:var(--orange7Light);} - } -:root.t_light .t_yellow_ProgressIndicator, :root.t_light .t_yellow_SliderThumb, :root.t_light .t_yellow_SwitchThumb, :root.t_light .t_yellow_Tooltip {--color:var(--yellow2Light);--colorHover:var(--yellow1Light);--colorPress:var(--yellow3Light);--colorFocus:var(--yellow3Light);--background:var(--yellow12Light);--backgroundHover:var(--yellow11Light);--backgroundPress:var(--yellow12Light);--backgroundFocus:var(--yellow11Light);--borderColor:var(--yellow10Light);--borderColorHover:var(--yellow9Dark);--borderColorFocus:var(--yellow8Light);--borderColorPress:var(--yellow7Light);} -@media(prefers-color-scheme:light){ - body{background:var(--background);color:var(--color)} - .t_yellow_ProgressIndicator, .t_yellow_SliderThumb, .t_yellow_SwitchThumb, .t_yellow_Tooltip {--color:var(--yellow2Light);--colorHover:var(--yellow1Light);--colorPress:var(--yellow3Light);--colorFocus:var(--yellow3Light);--background:var(--yellow12Light);--backgroundHover:var(--yellow11Light);--backgroundPress:var(--yellow12Light);--backgroundFocus:var(--yellow11Light);--borderColor:var(--yellow10Light);--borderColorHover:var(--yellow9Dark);--borderColorFocus:var(--yellow8Light);--borderColorPress:var(--yellow7Light);} - } -:root.t_light .t_green_ProgressIndicator, :root.t_light .t_green_SliderThumb, :root.t_light .t_green_SwitchThumb, :root.t_light .t_green_Tooltip {--color:var(--green2Light);--colorHover:var(--green1Light);--colorPress:var(--green3Light);--colorFocus:var(--green3Light);--background:var(--green12Light);--backgroundHover:var(--green11Light);--backgroundPress:var(--green12Light);--backgroundFocus:var(--green11Light);--borderColor:var(--green10Light);--borderColorHover:var(--green9Dark);--borderColorFocus:var(--green8Light);--borderColorPress:var(--green7Light);} -@media(prefers-color-scheme:light){ - body{background:var(--background);color:var(--color)} - .t_green_ProgressIndicator, .t_green_SliderThumb, .t_green_SwitchThumb, .t_green_Tooltip {--color:var(--green2Light);--colorHover:var(--green1Light);--colorPress:var(--green3Light);--colorFocus:var(--green3Light);--background:var(--green12Light);--backgroundHover:var(--green11Light);--backgroundPress:var(--green12Light);--backgroundFocus:var(--green11Light);--borderColor:var(--green10Light);--borderColorHover:var(--green9Dark);--borderColorFocus:var(--green8Light);--borderColorPress:var(--green7Light);} - } -:root.t_light .t_blue_ProgressIndicator, :root.t_light .t_blue_SliderThumb, :root.t_light .t_blue_SwitchThumb, :root.t_light .t_blue_Tooltip {--color:var(--blue2Light);--colorHover:var(--blue1Light);--colorPress:var(--blue3Light);--colorFocus:var(--blue3Light);--background:var(--blue12Light);--backgroundHover:var(--blue11Light);--backgroundPress:var(--blue12Light);--backgroundFocus:var(--blue11Light);--borderColor:var(--blue10Light);--borderColorHover:var(--blue9Dark);--borderColorFocus:var(--blue8Light);--borderColorPress:var(--blue7Light);} -@media(prefers-color-scheme:light){ - body{background:var(--background);color:var(--color)} - .t_blue_ProgressIndicator, .t_blue_SliderThumb, .t_blue_SwitchThumb, .t_blue_Tooltip {--color:var(--blue2Light);--colorHover:var(--blue1Light);--colorPress:var(--blue3Light);--colorFocus:var(--blue3Light);--background:var(--blue12Light);--backgroundHover:var(--blue11Light);--backgroundPress:var(--blue12Light);--backgroundFocus:var(--blue11Light);--borderColor:var(--blue10Light);--borderColorHover:var(--blue9Dark);--borderColorFocus:var(--blue8Light);--borderColorPress:var(--blue7Light);} - } -:root.t_light .t_purple_ProgressIndicator, :root.t_light .t_purple_SliderThumb, :root.t_light .t_purple_SwitchThumb, :root.t_light .t_purple_Tooltip {--color:var(--purple2Light);--colorHover:var(--purple1Light);--colorPress:var(--purple3Light);--colorFocus:var(--purple3Light);--background:var(--purple12Light);--backgroundHover:var(--purple11Light);--backgroundPress:var(--purple12Light);--backgroundFocus:var(--purple11Light);--borderColor:var(--purple10Light);--borderColorHover:var(--purple9Dark);--borderColorFocus:var(--purple8Light);--borderColorPress:var(--purple7Light);} -@media(prefers-color-scheme:light){ - body{background:var(--background);color:var(--color)} - .t_purple_ProgressIndicator, .t_purple_SliderThumb, .t_purple_SwitchThumb, .t_purple_Tooltip {--color:var(--purple2Light);--colorHover:var(--purple1Light);--colorPress:var(--purple3Light);--colorFocus:var(--purple3Light);--background:var(--purple12Light);--backgroundHover:var(--purple11Light);--backgroundPress:var(--purple12Light);--backgroundFocus:var(--purple11Light);--borderColor:var(--purple10Light);--borderColorHover:var(--purple9Dark);--borderColorFocus:var(--purple8Light);--borderColorPress:var(--purple7Light);} - } -:root.t_light .t_pink_ProgressIndicator, :root.t_light .t_pink_SliderThumb, :root.t_light .t_pink_SwitchThumb, :root.t_light .t_pink_Tooltip {--color:var(--pink2Light);--colorHover:var(--pink1Light);--colorPress:var(--pink3Light);--colorFocus:var(--pink3Light);--background:var(--pink12Light);--backgroundHover:var(--pink11Light);--backgroundPress:var(--pink12Light);--backgroundFocus:var(--pink11Light);--borderColor:var(--pink10Light);--borderColorHover:var(--pink9Dark);--borderColorFocus:var(--pink8Light);--borderColorPress:var(--pink7Light);} -@media(prefers-color-scheme:light){ - body{background:var(--background);color:var(--color)} - .t_pink_ProgressIndicator, .t_pink_SliderThumb, .t_pink_SwitchThumb, .t_pink_Tooltip {--color:var(--pink2Light);--colorHover:var(--pink1Light);--colorPress:var(--pink3Light);--colorFocus:var(--pink3Light);--background:var(--pink12Light);--backgroundHover:var(--pink11Light);--backgroundPress:var(--pink12Light);--backgroundFocus:var(--pink11Light);--borderColor:var(--pink10Light);--borderColorHover:var(--pink9Dark);--borderColorFocus:var(--pink8Light);--borderColorPress:var(--pink7Light);} - } -:root.t_light .t_red_ProgressIndicator, :root.t_light .t_red_SliderThumb, :root.t_light .t_red_SwitchThumb, :root.t_light .t_red_Tooltip {--color:var(--red2Light);--colorHover:var(--red1Light);--colorPress:var(--red3Light);--colorFocus:var(--red3Light);--background:var(--red12Light);--backgroundHover:var(--red11Light);--backgroundPress:var(--red12Light);--backgroundFocus:var(--red11Light);--borderColor:var(--red10Light);--borderColorHover:var(--red9Dark);--borderColorFocus:var(--red8Light);--borderColorPress:var(--red7Light);} -@media(prefers-color-scheme:light){ - body{background:var(--background);color:var(--color)} - .t_red_ProgressIndicator, .t_red_SliderThumb, .t_red_SwitchThumb, .t_red_Tooltip {--color:var(--red2Light);--colorHover:var(--red1Light);--colorPress:var(--red3Light);--colorFocus:var(--red3Light);--background:var(--red12Light);--backgroundHover:var(--red11Light);--backgroundPress:var(--red12Light);--backgroundFocus:var(--red11Light);--borderColor:var(--red10Light);--borderColorHover:var(--red9Dark);--borderColorFocus:var(--red8Light);--borderColorPress:var(--red7Light);} - } -:root.t_light .t_gray_ProgressIndicator, :root.t_light .t_gray_SliderThumb, :root.t_light .t_gray_SwitchThumb, :root.t_light .t_gray_Tooltip {--color:var(--gray2Light);--colorHover:var(--gray1Light);--colorPress:var(--gray3Light);--colorFocus:var(--gray3Light);--background:var(--gray12Light);--backgroundHover:var(--gray11Light);--backgroundPress:var(--gray12Light);--backgroundFocus:var(--gray11Light);--borderColor:var(--gray10Light);--borderColorHover:var(--gray9Light);--borderColorFocus:var(--gray8Light);--borderColorPress:var(--gray7Light);} -@media(prefers-color-scheme:light){ - body{background:var(--background);color:var(--color)} - .t_gray_ProgressIndicator, .t_gray_SliderThumb, .t_gray_SwitchThumb, .t_gray_Tooltip {--color:var(--gray2Light);--colorHover:var(--gray1Light);--colorPress:var(--gray3Light);--colorFocus:var(--gray3Light);--background:var(--gray12Light);--backgroundHover:var(--gray11Light);--backgroundPress:var(--gray12Light);--backgroundFocus:var(--gray11Light);--borderColor:var(--gray10Light);--borderColorHover:var(--gray9Light);--borderColorFocus:var(--gray8Light);--borderColorPress:var(--gray7Light);} - } -:root.t_dark .t_orange_ProgressIndicator, :root.t_dark .t_orange_SliderThumb, :root.t_dark .t_orange_SwitchThumb, :root.t_dark .t_orange_Tooltip {--color:var(--orange2Dark);--colorHover:var(--orange3Dark);--colorPress:var(--orange1Dark);--colorFocus:var(--orange1Dark);--background:var(--orange12Dark);--backgroundHover:var(--orange11Dark);--backgroundPress:var(--orange12Dark);--backgroundFocus:var(--orange11Dark);--borderColor:var(--orange10Dark);--borderColorHover:var(--orange9Dark);--borderColorFocus:var(--orange8Dark);--borderColorPress:var(--orange7Dark);} -@media(prefers-color-scheme:dark){ - body{background:var(--background);color:var(--color)} - .t_orange_ProgressIndicator, .t_orange_SliderThumb, .t_orange_SwitchThumb, .t_orange_Tooltip {--color:var(--orange2Dark);--colorHover:var(--orange3Dark);--colorPress:var(--orange1Dark);--colorFocus:var(--orange1Dark);--background:var(--orange12Dark);--backgroundHover:var(--orange11Dark);--backgroundPress:var(--orange12Dark);--backgroundFocus:var(--orange11Dark);--borderColor:var(--orange10Dark);--borderColorHover:var(--orange9Dark);--borderColorFocus:var(--orange8Dark);--borderColorPress:var(--orange7Dark);} - } -:root.t_dark .t_yellow_ProgressIndicator, :root.t_dark .t_yellow_SliderThumb, :root.t_dark .t_yellow_SwitchThumb, :root.t_dark .t_yellow_Tooltip {--color:var(--yellow2Dark);--colorHover:var(--yellow3Dark);--colorPress:var(--yellow1Dark);--colorFocus:var(--yellow1Dark);--background:var(--yellow12Dark);--backgroundHover:var(--yellow11Dark);--backgroundPress:var(--yellow12Dark);--backgroundFocus:var(--yellow11Dark);--borderColor:var(--yellow10Dark);--borderColorHover:var(--yellow9Dark);--borderColorFocus:var(--yellow8Dark);--borderColorPress:var(--yellow7Dark);} -@media(prefers-color-scheme:dark){ - body{background:var(--background);color:var(--color)} - .t_yellow_ProgressIndicator, .t_yellow_SliderThumb, .t_yellow_SwitchThumb, .t_yellow_Tooltip {--color:var(--yellow2Dark);--colorHover:var(--yellow3Dark);--colorPress:var(--yellow1Dark);--colorFocus:var(--yellow1Dark);--background:var(--yellow12Dark);--backgroundHover:var(--yellow11Dark);--backgroundPress:var(--yellow12Dark);--backgroundFocus:var(--yellow11Dark);--borderColor:var(--yellow10Dark);--borderColorHover:var(--yellow9Dark);--borderColorFocus:var(--yellow8Dark);--borderColorPress:var(--yellow7Dark);} - } -:root.t_dark .t_green_ProgressIndicator, :root.t_dark .t_green_SliderThumb, :root.t_dark .t_green_SwitchThumb, :root.t_dark .t_green_Tooltip {--color:var(--green2Dark);--colorHover:var(--green3Dark);--colorPress:var(--green1Dark);--colorFocus:var(--green1Dark);--background:var(--green12Dark);--backgroundHover:var(--green11Dark);--backgroundPress:var(--green12Dark);--backgroundFocus:var(--green11Dark);--borderColor:var(--green10Dark);--borderColorHover:var(--green9Dark);--borderColorFocus:var(--green8Dark);--borderColorPress:var(--green7Dark);} -@media(prefers-color-scheme:dark){ - body{background:var(--background);color:var(--color)} - .t_green_ProgressIndicator, .t_green_SliderThumb, .t_green_SwitchThumb, .t_green_Tooltip {--color:var(--green2Dark);--colorHover:var(--green3Dark);--colorPress:var(--green1Dark);--colorFocus:var(--green1Dark);--background:var(--green12Dark);--backgroundHover:var(--green11Dark);--backgroundPress:var(--green12Dark);--backgroundFocus:var(--green11Dark);--borderColor:var(--green10Dark);--borderColorHover:var(--green9Dark);--borderColorFocus:var(--green8Dark);--borderColorPress:var(--green7Dark);} - } -:root.t_dark .t_blue_ProgressIndicator, :root.t_dark .t_blue_SliderThumb, :root.t_dark .t_blue_SwitchThumb, :root.t_dark .t_blue_Tooltip {--color:var(--blue2Dark);--colorHover:var(--blue3Dark);--colorPress:var(--blue1Dark);--colorFocus:var(--blue1Dark);--background:var(--blue12Dark);--backgroundHover:var(--blue11Dark);--backgroundPress:var(--blue12Dark);--backgroundFocus:var(--blue11Dark);--borderColor:var(--blue10Dark);--borderColorHover:var(--blue9Dark);--borderColorFocus:var(--blue8Dark);--borderColorPress:var(--blue7Dark);} -@media(prefers-color-scheme:dark){ - body{background:var(--background);color:var(--color)} - .t_blue_ProgressIndicator, .t_blue_SliderThumb, .t_blue_SwitchThumb, .t_blue_Tooltip {--color:var(--blue2Dark);--colorHover:var(--blue3Dark);--colorPress:var(--blue1Dark);--colorFocus:var(--blue1Dark);--background:var(--blue12Dark);--backgroundHover:var(--blue11Dark);--backgroundPress:var(--blue12Dark);--backgroundFocus:var(--blue11Dark);--borderColor:var(--blue10Dark);--borderColorHover:var(--blue9Dark);--borderColorFocus:var(--blue8Dark);--borderColorPress:var(--blue7Dark);} - } -:root.t_dark .t_purple_ProgressIndicator, :root.t_dark .t_purple_SliderThumb, :root.t_dark .t_purple_SwitchThumb, :root.t_dark .t_purple_Tooltip {--color:var(--purple2Dark);--colorHover:var(--purple3Dark);--colorPress:var(--purple1Dark);--colorFocus:var(--purple1Dark);--background:var(--purple12Dark);--backgroundHover:var(--purple11Dark);--backgroundPress:var(--purple12Dark);--backgroundFocus:var(--purple11Dark);--borderColor:var(--purple10Dark);--borderColorHover:var(--purple9Dark);--borderColorFocus:var(--purple8Dark);--borderColorPress:var(--purple7Dark);} -@media(prefers-color-scheme:dark){ - body{background:var(--background);color:var(--color)} - .t_purple_ProgressIndicator, .t_purple_SliderThumb, .t_purple_SwitchThumb, .t_purple_Tooltip {--color:var(--purple2Dark);--colorHover:var(--purple3Dark);--colorPress:var(--purple1Dark);--colorFocus:var(--purple1Dark);--background:var(--purple12Dark);--backgroundHover:var(--purple11Dark);--backgroundPress:var(--purple12Dark);--backgroundFocus:var(--purple11Dark);--borderColor:var(--purple10Dark);--borderColorHover:var(--purple9Dark);--borderColorFocus:var(--purple8Dark);--borderColorPress:var(--purple7Dark);} - } -:root.t_dark .t_pink_ProgressIndicator, :root.t_dark .t_pink_SliderThumb, :root.t_dark .t_pink_SwitchThumb, :root.t_dark .t_pink_Tooltip {--color:var(--pink2Dark);--colorHover:var(--pink3Dark);--colorPress:var(--pink1Dark);--colorFocus:var(--pink1Dark);--background:var(--pink12Dark);--backgroundHover:var(--pink11Dark);--backgroundPress:var(--pink12Dark);--backgroundFocus:var(--pink11Dark);--borderColor:var(--pink10Dark);--borderColorHover:var(--pink9Dark);--borderColorFocus:var(--pink8Dark);--borderColorPress:var(--pink7Dark);} -@media(prefers-color-scheme:dark){ - body{background:var(--background);color:var(--color)} - .t_pink_ProgressIndicator, .t_pink_SliderThumb, .t_pink_SwitchThumb, .t_pink_Tooltip {--color:var(--pink2Dark);--colorHover:var(--pink3Dark);--colorPress:var(--pink1Dark);--colorFocus:var(--pink1Dark);--background:var(--pink12Dark);--backgroundHover:var(--pink11Dark);--backgroundPress:var(--pink12Dark);--backgroundFocus:var(--pink11Dark);--borderColor:var(--pink10Dark);--borderColorHover:var(--pink9Dark);--borderColorFocus:var(--pink8Dark);--borderColorPress:var(--pink7Dark);} - } -:root.t_dark .t_red_ProgressIndicator, :root.t_dark .t_red_SliderThumb, :root.t_dark .t_red_SwitchThumb, :root.t_dark .t_red_Tooltip {--color:var(--red2Dark);--colorHover:var(--red3Dark);--colorPress:var(--red1Dark);--colorFocus:var(--red1Dark);--background:var(--red12Dark);--backgroundHover:var(--red11Dark);--backgroundPress:var(--red12Dark);--backgroundFocus:var(--red11Dark);--borderColor:var(--red10Dark);--borderColorHover:var(--red9Dark);--borderColorFocus:var(--red8Dark);--borderColorPress:var(--red7Dark);} -@media(prefers-color-scheme:dark){ - body{background:var(--background);color:var(--color)} - .t_red_ProgressIndicator, .t_red_SliderThumb, .t_red_SwitchThumb, .t_red_Tooltip {--color:var(--red2Dark);--colorHover:var(--red3Dark);--colorPress:var(--red1Dark);--colorFocus:var(--red1Dark);--background:var(--red12Dark);--backgroundHover:var(--red11Dark);--backgroundPress:var(--red12Dark);--backgroundFocus:var(--red11Dark);--borderColor:var(--red10Dark);--borderColorHover:var(--red9Dark);--borderColorFocus:var(--red8Dark);--borderColorPress:var(--red7Dark);} - } -:root.t_dark .t_gray_ProgressIndicator, :root.t_dark .t_gray_SliderThumb, :root.t_dark .t_gray_SwitchThumb, :root.t_dark .t_gray_Tooltip {--color:var(--gray2Dark);--colorHover:var(--gray3Dark);--colorPress:var(--gray1Dark);--colorFocus:var(--gray1Dark);--background:var(--gray12Dark);--backgroundHover:var(--gray11Dark);--backgroundPress:var(--gray12Dark);--backgroundFocus:var(--gray11Dark);--borderColor:var(--gray10Dark);--borderColorHover:var(--gray9Dark);--borderColorFocus:var(--gray8Dark);--borderColorPress:var(--gray7Dark);} -@media(prefers-color-scheme:dark){ - body{background:var(--background);color:var(--color)} - .t_gray_ProgressIndicator, .t_gray_SliderThumb, .t_gray_SwitchThumb, .t_gray_Tooltip {--color:var(--gray2Dark);--colorHover:var(--gray3Dark);--colorPress:var(--gray1Dark);--colorFocus:var(--gray1Dark);--background:var(--gray12Dark);--backgroundHover:var(--gray11Dark);--backgroundPress:var(--gray12Dark);--backgroundFocus:var(--gray11Dark);--borderColor:var(--gray10Dark);--borderColorHover:var(--gray9Dark);--borderColorFocus:var(--gray8Dark);--borderColorPress:var(--gray7Dark);} - } -:root.t_light .t_active_ProgressIndicator, :root.t_light .t_active_SliderThumb, :root.t_light .t_active_SwitchThumb, :root.t_light .t_active_Tooltip {--color:var(--white2);--colorHover:var(--black12);--colorPress:var(--white3);--colorFocus:var(--white3);--background:var(--white10);--backgroundHover:var(--gray9Light);--backgroundPress:var(--white10);--backgroundFocus:var(--gray9Light);--borderColor:var(--white8);--borderColorHover:var(--white7);--borderColorFocus:var(--white6);--borderColorPress:var(--white5);} -@media(prefers-color-scheme:light){ - body{background:var(--background);color:var(--color)} - .t_active_ProgressIndicator, .t_active_SliderThumb, .t_active_SwitchThumb, .t_active_Tooltip {--color:var(--white2);--colorHover:var(--black12);--colorPress:var(--white3);--colorFocus:var(--white3);--background:var(--white10);--backgroundHover:var(--gray9Light);--backgroundPress:var(--white10);--backgroundFocus:var(--gray9Light);--borderColor:var(--white8);--borderColorHover:var(--white7);--borderColorFocus:var(--white6);--borderColorPress:var(--white5);} - } -:root.t_dark .t_active_ProgressIndicator, :root.t_dark .t_active_SliderThumb, :root.t_dark .t_active_SwitchThumb, :root.t_dark .t_active_Tooltip {--color:var(--black2);--colorHover:var(--black3);--colorPress:var(--black1);--colorFocus:var(--black1);--background:var(--black10);--backgroundHover:var(--black9);--backgroundPress:var(--black10);--backgroundFocus:var(--black9);--borderColor:var(--black8);--borderColorHover:var(--black7);--borderColorFocus:var(--black6);--borderColorPress:var(--black5);} -@media(prefers-color-scheme:dark){ - body{background:var(--background);color:var(--color)} - .t_active_ProgressIndicator, .t_active_SliderThumb, .t_active_SwitchThumb, .t_active_Tooltip {--color:var(--black2);--colorHover:var(--black3);--colorPress:var(--black1);--colorFocus:var(--black1);--background:var(--black10);--backgroundHover:var(--black9);--backgroundPress:var(--black10);--backgroundFocus:var(--black9);--borderColor:var(--black8);--borderColorHover:var(--black7);--borderColorFocus:var(--black6);--borderColorPress:var(--black5);} - } -:root.t_light .t_orange_active_ProgressIndicator, :root.t_light .t_orange_active_SliderThumb, :root.t_light .t_orange_active_SwitchThumb, :root.t_light .t_orange_active_Tooltip {--color:var(--orange2Light);--colorHover:var(--orange1Light);--colorPress:var(--orange3Light);--colorFocus:var(--orange3Light);--background:var(--orange10Light);--backgroundHover:var(--orange9Dark);--backgroundPress:var(--orange10Light);--backgroundFocus:var(--orange9Dark);--borderColor:var(--orange8Light);--borderColorHover:var(--orange7Light);--borderColorFocus:var(--orange6Light);--borderColorPress:var(--orange5Light);} -@media(prefers-color-scheme:light){ - body{background:var(--background);color:var(--color)} - .t_orange_active_ProgressIndicator, .t_orange_active_SliderThumb, .t_orange_active_SwitchThumb, .t_orange_active_Tooltip {--color:var(--orange2Light);--colorHover:var(--orange1Light);--colorPress:var(--orange3Light);--colorFocus:var(--orange3Light);--background:var(--orange10Light);--backgroundHover:var(--orange9Dark);--backgroundPress:var(--orange10Light);--backgroundFocus:var(--orange9Dark);--borderColor:var(--orange8Light);--borderColorHover:var(--orange7Light);--borderColorFocus:var(--orange6Light);--borderColorPress:var(--orange5Light);} - } -:root.t_light .t_yellow_active_ProgressIndicator, :root.t_light .t_yellow_active_SliderThumb, :root.t_light .t_yellow_active_SwitchThumb, :root.t_light .t_yellow_active_Tooltip {--color:var(--yellow2Light);--colorHover:var(--yellow1Light);--colorPress:var(--yellow3Light);--colorFocus:var(--yellow3Light);--background:var(--yellow10Light);--backgroundHover:var(--yellow9Dark);--backgroundPress:var(--yellow10Light);--backgroundFocus:var(--yellow9Dark);--borderColor:var(--yellow8Light);--borderColorHover:var(--yellow7Light);--borderColorFocus:var(--yellow6Light);--borderColorPress:var(--yellow5Light);} -@media(prefers-color-scheme:light){ - body{background:var(--background);color:var(--color)} - .t_yellow_active_ProgressIndicator, .t_yellow_active_SliderThumb, .t_yellow_active_SwitchThumb, .t_yellow_active_Tooltip {--color:var(--yellow2Light);--colorHover:var(--yellow1Light);--colorPress:var(--yellow3Light);--colorFocus:var(--yellow3Light);--background:var(--yellow10Light);--backgroundHover:var(--yellow9Dark);--backgroundPress:var(--yellow10Light);--backgroundFocus:var(--yellow9Dark);--borderColor:var(--yellow8Light);--borderColorHover:var(--yellow7Light);--borderColorFocus:var(--yellow6Light);--borderColorPress:var(--yellow5Light);} - } -:root.t_light .t_green_active_ProgressIndicator, :root.t_light .t_green_active_SliderThumb, :root.t_light .t_green_active_SwitchThumb, :root.t_light .t_green_active_Tooltip {--color:var(--green2Light);--colorHover:var(--green1Light);--colorPress:var(--green3Light);--colorFocus:var(--green3Light);--background:var(--green10Light);--backgroundHover:var(--green9Dark);--backgroundPress:var(--green10Light);--backgroundFocus:var(--green9Dark);--borderColor:var(--green8Light);--borderColorHover:var(--green7Light);--borderColorFocus:var(--green6Light);--borderColorPress:var(--green5Light);} -@media(prefers-color-scheme:light){ - body{background:var(--background);color:var(--color)} - .t_green_active_ProgressIndicator, .t_green_active_SliderThumb, .t_green_active_SwitchThumb, .t_green_active_Tooltip {--color:var(--green2Light);--colorHover:var(--green1Light);--colorPress:var(--green3Light);--colorFocus:var(--green3Light);--background:var(--green10Light);--backgroundHover:var(--green9Dark);--backgroundPress:var(--green10Light);--backgroundFocus:var(--green9Dark);--borderColor:var(--green8Light);--borderColorHover:var(--green7Light);--borderColorFocus:var(--green6Light);--borderColorPress:var(--green5Light);} - } -:root.t_light .t_blue_active_ProgressIndicator, :root.t_light .t_blue_active_SliderThumb, :root.t_light .t_blue_active_SwitchThumb, :root.t_light .t_blue_active_Tooltip {--color:var(--blue2Light);--colorHover:var(--blue1Light);--colorPress:var(--blue3Light);--colorFocus:var(--blue3Light);--background:var(--blue10Light);--backgroundHover:var(--blue9Dark);--backgroundPress:var(--blue10Light);--backgroundFocus:var(--blue9Dark);--borderColor:var(--blue8Light);--borderColorHover:var(--blue7Light);--borderColorFocus:var(--blue6Light);--borderColorPress:var(--blue5Light);} -@media(prefers-color-scheme:light){ - body{background:var(--background);color:var(--color)} - .t_blue_active_ProgressIndicator, .t_blue_active_SliderThumb, .t_blue_active_SwitchThumb, .t_blue_active_Tooltip {--color:var(--blue2Light);--colorHover:var(--blue1Light);--colorPress:var(--blue3Light);--colorFocus:var(--blue3Light);--background:var(--blue10Light);--backgroundHover:var(--blue9Dark);--backgroundPress:var(--blue10Light);--backgroundFocus:var(--blue9Dark);--borderColor:var(--blue8Light);--borderColorHover:var(--blue7Light);--borderColorFocus:var(--blue6Light);--borderColorPress:var(--blue5Light);} - } -:root.t_light .t_purple_active_ProgressIndicator, :root.t_light .t_purple_active_SliderThumb, :root.t_light .t_purple_active_SwitchThumb, :root.t_light .t_purple_active_Tooltip {--color:var(--purple2Light);--colorHover:var(--purple1Light);--colorPress:var(--purple3Light);--colorFocus:var(--purple3Light);--background:var(--purple10Light);--backgroundHover:var(--purple9Dark);--backgroundPress:var(--purple10Light);--backgroundFocus:var(--purple9Dark);--borderColor:var(--purple8Light);--borderColorHover:var(--purple7Light);--borderColorFocus:var(--purple6Light);--borderColorPress:var(--purple5Light);} -@media(prefers-color-scheme:light){ - body{background:var(--background);color:var(--color)} - .t_purple_active_ProgressIndicator, .t_purple_active_SliderThumb, .t_purple_active_SwitchThumb, .t_purple_active_Tooltip {--color:var(--purple2Light);--colorHover:var(--purple1Light);--colorPress:var(--purple3Light);--colorFocus:var(--purple3Light);--background:var(--purple10Light);--backgroundHover:var(--purple9Dark);--backgroundPress:var(--purple10Light);--backgroundFocus:var(--purple9Dark);--borderColor:var(--purple8Light);--borderColorHover:var(--purple7Light);--borderColorFocus:var(--purple6Light);--borderColorPress:var(--purple5Light);} - } -:root.t_light .t_pink_active_ProgressIndicator, :root.t_light .t_pink_active_SliderThumb, :root.t_light .t_pink_active_SwitchThumb, :root.t_light .t_pink_active_Tooltip {--color:var(--pink2Light);--colorHover:var(--pink1Light);--colorPress:var(--pink3Light);--colorFocus:var(--pink3Light);--background:var(--pink10Light);--backgroundHover:var(--pink9Dark);--backgroundPress:var(--pink10Light);--backgroundFocus:var(--pink9Dark);--borderColor:var(--pink8Light);--borderColorHover:var(--pink7Light);--borderColorFocus:var(--pink6Light);--borderColorPress:var(--pink5Light);} -@media(prefers-color-scheme:light){ - body{background:var(--background);color:var(--color)} - .t_pink_active_ProgressIndicator, .t_pink_active_SliderThumb, .t_pink_active_SwitchThumb, .t_pink_active_Tooltip {--color:var(--pink2Light);--colorHover:var(--pink1Light);--colorPress:var(--pink3Light);--colorFocus:var(--pink3Light);--background:var(--pink10Light);--backgroundHover:var(--pink9Dark);--backgroundPress:var(--pink10Light);--backgroundFocus:var(--pink9Dark);--borderColor:var(--pink8Light);--borderColorHover:var(--pink7Light);--borderColorFocus:var(--pink6Light);--borderColorPress:var(--pink5Light);} - } -:root.t_light .t_red_active_ProgressIndicator, :root.t_light .t_red_active_SliderThumb, :root.t_light .t_red_active_SwitchThumb, :root.t_light .t_red_active_Tooltip {--color:var(--red2Light);--colorHover:var(--red1Light);--colorPress:var(--red3Light);--colorFocus:var(--red3Light);--background:var(--red10Light);--backgroundHover:var(--red9Dark);--backgroundPress:var(--red10Light);--backgroundFocus:var(--red9Dark);--borderColor:var(--red8Light);--borderColorHover:var(--red7Light);--borderColorFocus:var(--red6Light);--borderColorPress:var(--red5Light);} -@media(prefers-color-scheme:light){ - body{background:var(--background);color:var(--color)} - .t_red_active_ProgressIndicator, .t_red_active_SliderThumb, .t_red_active_SwitchThumb, .t_red_active_Tooltip {--color:var(--red2Light);--colorHover:var(--red1Light);--colorPress:var(--red3Light);--colorFocus:var(--red3Light);--background:var(--red10Light);--backgroundHover:var(--red9Dark);--backgroundPress:var(--red10Light);--backgroundFocus:var(--red9Dark);--borderColor:var(--red8Light);--borderColorHover:var(--red7Light);--borderColorFocus:var(--red6Light);--borderColorPress:var(--red5Light);} - } -:root.t_light .t_gray_active_ProgressIndicator, :root.t_light .t_gray_active_SliderThumb, :root.t_light .t_gray_active_SwitchThumb, :root.t_light .t_gray_active_Tooltip {--color:var(--gray2Light);--colorHover:var(--gray1Light);--colorPress:var(--gray3Light);--colorFocus:var(--gray3Light);--background:var(--gray10Light);--backgroundHover:var(--gray9Light);--backgroundPress:var(--gray10Light);--backgroundFocus:var(--gray9Light);--borderColor:var(--gray8Light);--borderColorHover:var(--gray7Light);--borderColorFocus:var(--gray6Light);--borderColorPress:var(--gray5Light);} -@media(prefers-color-scheme:light){ - body{background:var(--background);color:var(--color)} - .t_gray_active_ProgressIndicator, .t_gray_active_SliderThumb, .t_gray_active_SwitchThumb, .t_gray_active_Tooltip {--color:var(--gray2Light);--colorHover:var(--gray1Light);--colorPress:var(--gray3Light);--colorFocus:var(--gray3Light);--background:var(--gray10Light);--backgroundHover:var(--gray9Light);--backgroundPress:var(--gray10Light);--backgroundFocus:var(--gray9Light);--borderColor:var(--gray8Light);--borderColorHover:var(--gray7Light);--borderColorFocus:var(--gray6Light);--borderColorPress:var(--gray5Light);} - } -:root.t_dark .t_orange_active_ProgressIndicator, :root.t_dark .t_orange_active_SliderThumb, :root.t_dark .t_orange_active_SwitchThumb, :root.t_dark .t_orange_active_Tooltip {--color:var(--orange2Dark);--colorHover:var(--orange3Dark);--colorPress:var(--orange1Dark);--colorFocus:var(--orange1Dark);--background:var(--orange10Dark);--backgroundHover:var(--orange9Dark);--backgroundPress:var(--orange10Dark);--backgroundFocus:var(--orange9Dark);--borderColor:var(--orange8Dark);--borderColorHover:var(--orange7Dark);--borderColorFocus:var(--orange6Dark);--borderColorPress:var(--orange5Dark);} -@media(prefers-color-scheme:dark){ - body{background:var(--background);color:var(--color)} - .t_orange_active_ProgressIndicator, .t_orange_active_SliderThumb, .t_orange_active_SwitchThumb, .t_orange_active_Tooltip {--color:var(--orange2Dark);--colorHover:var(--orange3Dark);--colorPress:var(--orange1Dark);--colorFocus:var(--orange1Dark);--background:var(--orange10Dark);--backgroundHover:var(--orange9Dark);--backgroundPress:var(--orange10Dark);--backgroundFocus:var(--orange9Dark);--borderColor:var(--orange8Dark);--borderColorHover:var(--orange7Dark);--borderColorFocus:var(--orange6Dark);--borderColorPress:var(--orange5Dark);} - } -:root.t_dark .t_yellow_active_ProgressIndicator, :root.t_dark .t_yellow_active_SliderThumb, :root.t_dark .t_yellow_active_SwitchThumb, :root.t_dark .t_yellow_active_Tooltip {--color:var(--yellow2Dark);--colorHover:var(--yellow3Dark);--colorPress:var(--yellow1Dark);--colorFocus:var(--yellow1Dark);--background:var(--yellow10Dark);--backgroundHover:var(--yellow9Dark);--backgroundPress:var(--yellow10Dark);--backgroundFocus:var(--yellow9Dark);--borderColor:var(--yellow8Dark);--borderColorHover:var(--yellow7Dark);--borderColorFocus:var(--yellow6Dark);--borderColorPress:var(--yellow5Dark);} -@media(prefers-color-scheme:dark){ - body{background:var(--background);color:var(--color)} - .t_yellow_active_ProgressIndicator, .t_yellow_active_SliderThumb, .t_yellow_active_SwitchThumb, .t_yellow_active_Tooltip {--color:var(--yellow2Dark);--colorHover:var(--yellow3Dark);--colorPress:var(--yellow1Dark);--colorFocus:var(--yellow1Dark);--background:var(--yellow10Dark);--backgroundHover:var(--yellow9Dark);--backgroundPress:var(--yellow10Dark);--backgroundFocus:var(--yellow9Dark);--borderColor:var(--yellow8Dark);--borderColorHover:var(--yellow7Dark);--borderColorFocus:var(--yellow6Dark);--borderColorPress:var(--yellow5Dark);} - } -:root.t_dark .t_green_active_ProgressIndicator, :root.t_dark .t_green_active_SliderThumb, :root.t_dark .t_green_active_SwitchThumb, :root.t_dark .t_green_active_Tooltip {--color:var(--green2Dark);--colorHover:var(--green3Dark);--colorPress:var(--green1Dark);--colorFocus:var(--green1Dark);--background:var(--green10Dark);--backgroundHover:var(--green9Dark);--backgroundPress:var(--green10Dark);--backgroundFocus:var(--green9Dark);--borderColor:var(--green8Dark);--borderColorHover:var(--green7Dark);--borderColorFocus:var(--green6Dark);--borderColorPress:var(--green5Dark);} -@media(prefers-color-scheme:dark){ - body{background:var(--background);color:var(--color)} - .t_green_active_ProgressIndicator, .t_green_active_SliderThumb, .t_green_active_SwitchThumb, .t_green_active_Tooltip {--color:var(--green2Dark);--colorHover:var(--green3Dark);--colorPress:var(--green1Dark);--colorFocus:var(--green1Dark);--background:var(--green10Dark);--backgroundHover:var(--green9Dark);--backgroundPress:var(--green10Dark);--backgroundFocus:var(--green9Dark);--borderColor:var(--green8Dark);--borderColorHover:var(--green7Dark);--borderColorFocus:var(--green6Dark);--borderColorPress:var(--green5Dark);} - } -:root.t_dark .t_blue_active_ProgressIndicator, :root.t_dark .t_blue_active_SliderThumb, :root.t_dark .t_blue_active_SwitchThumb, :root.t_dark .t_blue_active_Tooltip {--color:var(--blue2Dark);--colorHover:var(--blue3Dark);--colorPress:var(--blue1Dark);--colorFocus:var(--blue1Dark);--background:var(--blue10Dark);--backgroundHover:var(--blue9Dark);--backgroundPress:var(--blue10Dark);--backgroundFocus:var(--blue9Dark);--borderColor:var(--blue8Dark);--borderColorHover:var(--blue7Dark);--borderColorFocus:var(--blue6Dark);--borderColorPress:var(--blue5Dark);} -@media(prefers-color-scheme:dark){ - body{background:var(--background);color:var(--color)} - .t_blue_active_ProgressIndicator, .t_blue_active_SliderThumb, .t_blue_active_SwitchThumb, .t_blue_active_Tooltip {--color:var(--blue2Dark);--colorHover:var(--blue3Dark);--colorPress:var(--blue1Dark);--colorFocus:var(--blue1Dark);--background:var(--blue10Dark);--backgroundHover:var(--blue9Dark);--backgroundPress:var(--blue10Dark);--backgroundFocus:var(--blue9Dark);--borderColor:var(--blue8Dark);--borderColorHover:var(--blue7Dark);--borderColorFocus:var(--blue6Dark);--borderColorPress:var(--blue5Dark);} - } -:root.t_dark .t_purple_active_ProgressIndicator, :root.t_dark .t_purple_active_SliderThumb, :root.t_dark .t_purple_active_SwitchThumb, :root.t_dark .t_purple_active_Tooltip {--color:var(--purple2Dark);--colorHover:var(--purple3Dark);--colorPress:var(--purple1Dark);--colorFocus:var(--purple1Dark);--background:var(--purple10Dark);--backgroundHover:var(--purple9Dark);--backgroundPress:var(--purple10Dark);--backgroundFocus:var(--purple9Dark);--borderColor:var(--purple8Dark);--borderColorHover:var(--purple7Dark);--borderColorFocus:var(--purple6Dark);--borderColorPress:var(--purple5Dark);} -@media(prefers-color-scheme:dark){ - body{background:var(--background);color:var(--color)} - .t_purple_active_ProgressIndicator, .t_purple_active_SliderThumb, .t_purple_active_SwitchThumb, .t_purple_active_Tooltip {--color:var(--purple2Dark);--colorHover:var(--purple3Dark);--colorPress:var(--purple1Dark);--colorFocus:var(--purple1Dark);--background:var(--purple10Dark);--backgroundHover:var(--purple9Dark);--backgroundPress:var(--purple10Dark);--backgroundFocus:var(--purple9Dark);--borderColor:var(--purple8Dark);--borderColorHover:var(--purple7Dark);--borderColorFocus:var(--purple6Dark);--borderColorPress:var(--purple5Dark);} - } -:root.t_dark .t_pink_active_ProgressIndicator, :root.t_dark .t_pink_active_SliderThumb, :root.t_dark .t_pink_active_SwitchThumb, :root.t_dark .t_pink_active_Tooltip {--color:var(--pink2Dark);--colorHover:var(--pink3Dark);--colorPress:var(--pink1Dark);--colorFocus:var(--pink1Dark);--background:var(--pink10Dark);--backgroundHover:var(--pink9Dark);--backgroundPress:var(--pink10Dark);--backgroundFocus:var(--pink9Dark);--borderColor:var(--pink8Dark);--borderColorHover:var(--pink7Dark);--borderColorFocus:var(--pink6Dark);--borderColorPress:var(--pink5Dark);} -@media(prefers-color-scheme:dark){ - body{background:var(--background);color:var(--color)} - .t_pink_active_ProgressIndicator, .t_pink_active_SliderThumb, .t_pink_active_SwitchThumb, .t_pink_active_Tooltip {--color:var(--pink2Dark);--colorHover:var(--pink3Dark);--colorPress:var(--pink1Dark);--colorFocus:var(--pink1Dark);--background:var(--pink10Dark);--backgroundHover:var(--pink9Dark);--backgroundPress:var(--pink10Dark);--backgroundFocus:var(--pink9Dark);--borderColor:var(--pink8Dark);--borderColorHover:var(--pink7Dark);--borderColorFocus:var(--pink6Dark);--borderColorPress:var(--pink5Dark);} - } -:root.t_dark .t_red_active_ProgressIndicator, :root.t_dark .t_red_active_SliderThumb, :root.t_dark .t_red_active_SwitchThumb, :root.t_dark .t_red_active_Tooltip {--color:var(--red2Dark);--colorHover:var(--red3Dark);--colorPress:var(--red1Dark);--colorFocus:var(--red1Dark);--background:var(--red10Dark);--backgroundHover:var(--red9Dark);--backgroundPress:var(--red10Dark);--backgroundFocus:var(--red9Dark);--borderColor:var(--red8Dark);--borderColorHover:var(--red7Dark);--borderColorFocus:var(--red6Dark);--borderColorPress:var(--red5Dark);} -@media(prefers-color-scheme:dark){ - body{background:var(--background);color:var(--color)} - .t_red_active_ProgressIndicator, .t_red_active_SliderThumb, .t_red_active_SwitchThumb, .t_red_active_Tooltip {--color:var(--red2Dark);--colorHover:var(--red3Dark);--colorPress:var(--red1Dark);--colorFocus:var(--red1Dark);--background:var(--red10Dark);--backgroundHover:var(--red9Dark);--backgroundPress:var(--red10Dark);--backgroundFocus:var(--red9Dark);--borderColor:var(--red8Dark);--borderColorHover:var(--red7Dark);--borderColorFocus:var(--red6Dark);--borderColorPress:var(--red5Dark);} - } -:root.t_dark .t_gray_active_ProgressIndicator, :root.t_dark .t_gray_active_SliderThumb, :root.t_dark .t_gray_active_SwitchThumb, :root.t_dark .t_gray_active_Tooltip {--color:var(--gray2Dark);--colorHover:var(--gray3Dark);--colorPress:var(--gray1Dark);--colorFocus:var(--gray1Dark);--background:var(--gray10Dark);--backgroundHover:var(--gray9Dark);--backgroundPress:var(--gray10Dark);--backgroundFocus:var(--gray9Dark);--borderColor:var(--gray8Dark);--borderColorHover:var(--gray7Dark);--borderColorFocus:var(--gray6Dark);--borderColorPress:var(--gray5Dark);} -@media(prefers-color-scheme:dark){ - body{background:var(--background);color:var(--color)} - .t_gray_active_ProgressIndicator, .t_gray_active_SliderThumb, .t_gray_active_SwitchThumb, .t_gray_active_Tooltip {--color:var(--gray2Dark);--colorHover:var(--gray3Dark);--colorPress:var(--gray1Dark);--colorFocus:var(--gray1Dark);--background:var(--gray10Dark);--backgroundHover:var(--gray9Dark);--backgroundPress:var(--gray10Dark);--backgroundFocus:var(--gray9Dark);--borderColor:var(--gray8Dark);--borderColorHover:var(--gray7Dark);--borderColorFocus:var(--gray6Dark);--borderColorPress:var(--gray5Dark);} - } From 9fd1449ad951686997369e9e84dcfc8fc9ed9b77 Mon Sep 17 00:00:00 2001 From: natew Date: Sun, 27 Oct 2024 08:49:00 +0900 Subject: [PATCH 02/13] chore: upgrade to vite v6 beta 5 --- examples/one-basic/package.json | 2 +- examples/one-fullstack/package.json | 2 +- examples/one-recommended/package.json | 2 +- examples/one-tamagui/package.json | 2 +- examples/testflight/package.json | 2 +- packages/one-ui/package.json | 2 +- packages/one/package.json | 2 +- packages/vite-flow/package.json | 2 +- packages/vxrn/package.json | 2 +- packages/vxrn/react-native-template.js | 216 ++++++++++--------- tests/test-expo-camera/package.json | 2 +- tests/test-react-native-svg/package.json | 2 +- tests/test/package.json | 2 +- tests/weird-deps/package.json | 2 +- yarn.lock | 252 ++++++++++------------- 15 files changed, 236 insertions(+), 258 deletions(-) diff --git a/examples/one-basic/package.json b/examples/one-basic/package.json index bc0f9d6fe..8c2182307 100644 --- a/examples/one-basic/package.json +++ b/examples/one-basic/package.json @@ -25,6 +25,6 @@ }, "devDependencies": { "@types/react": "^18.3.11", - "vite": "6.0.0-beta.1" + "vite": "^6.0.0-beta.5" } } diff --git a/examples/one-fullstack/package.json b/examples/one-fullstack/package.json index d2b81929c..778c9131e 100644 --- a/examples/one-fullstack/package.json +++ b/examples/one-fullstack/package.json @@ -31,7 +31,7 @@ "react-native-svg": "15.2.0", "swr": "^2.2.5", "tamagui": "^1.116.7", - "vite": "6.0.0-beta.1", + "vite": "^6.0.0-beta.5", "vite-plugin-inspect": "^0.8.7" }, "devDependencies": { diff --git a/examples/one-recommended/package.json b/examples/one-recommended/package.json index fe257b672..79fd80bf8 100644 --- a/examples/one-recommended/package.json +++ b/examples/one-recommended/package.json @@ -52,6 +52,6 @@ "@tamagui/vite-plugin": "^1.116.7", "@types/react": "^18.3.11", "tsx": "^4.19.0", - "vite": "6.0.0-beta.1" + "vite": "^6.0.0-beta.5" } } diff --git a/examples/one-tamagui/package.json b/examples/one-tamagui/package.json index eaa05159a..2798eb8b2 100644 --- a/examples/one-tamagui/package.json +++ b/examples/one-tamagui/package.json @@ -41,6 +41,6 @@ "@biomejs/biome": "^1.8.3", "@tamagui/vite-plugin": "^1.116.7", "@types/react": "^18.3.11", - "vite": "6.0.0-beta.1" + "vite": "^6.0.0-beta.5" } } diff --git a/examples/testflight/package.json b/examples/testflight/package.json index 4f942d3d1..17fba659c 100644 --- a/examples/testflight/package.json +++ b/examples/testflight/package.json @@ -50,6 +50,6 @@ "@faker-js/faker": "next", "@tamagui/vite-plugin": "^1.116.7", "tsx": "^4.19.0", - "vite": "6.0.0-beta.1" + "vite": "^6.0.0-beta.5" } } diff --git a/packages/one-ui/package.json b/packages/one-ui/package.json index 202de7a42..a04124c7f 100644 --- a/packages/one-ui/package.json +++ b/packages/one-ui/package.json @@ -30,6 +30,6 @@ "devDependencies": { "@tauri-apps/cli": "^1", "tsx": "^4.19.0", - "vite": "6.0.0-beta.1" + "vite": "^6.0.0-beta.5" } } diff --git a/packages/one/package.json b/packages/one/package.json index 93920b38c..2f31f1912 100644 --- a/packages/one/package.json +++ b/packages/one/package.json @@ -118,7 +118,7 @@ "react-native-screens": "3.31.1", "rollup-plugin-node-externals": "^7.1.2", "url-parse": "^1.5.10", - "vite": "6.0.0-beta.1", + "vite": "^6.0.0-beta.5", "vite-tsconfig-paths": "^5.0.1", "vxrn": "1.1.325", "ws": "^8.18.0", diff --git a/packages/vite-flow/package.json b/packages/vite-flow/package.json index 70ab07aad..15a89f760 100644 --- a/packages/vite-flow/package.json +++ b/packages/vite-flow/package.json @@ -35,7 +35,7 @@ "devDependencies": { "@biomejs/biome": "^1.8.3", "@tamagui/build": "^1.116.7", - "vite": "6.0.0-beta.1" + "vite": "^6.0.0-beta.5" }, "publishConfig": { "access": "public" diff --git a/packages/vxrn/package.json b/packages/vxrn/package.json index 470514f5c..a3e7c3a7b 100644 --- a/packages/vxrn/package.json +++ b/packages/vxrn/package.json @@ -77,7 +77,7 @@ "qrcode-terminal": "^0.12.0", "rollup": "^4.21.0", "semver": "^7.6.3", - "vite": "6.0.0-beta.1", + "vite": "^6.0.0-beta.5", "vite-bundle-analyzer": "^0.9.4", "vite-plugin-mkcert": "^1.17.5", "ws": "^8.7.0" diff --git a/packages/vxrn/react-native-template.js b/packages/vxrn/react-native-template.js index 135f02070..1812171e5 100644 --- a/packages/vxrn/react-native-template.js +++ b/packages/vxrn/react-native-template.js @@ -100,133 +100,151 @@ function createRequire(importer, importsMap) { } return function require(_mod) { - const getErrorDetails = (withStack) => { - return `In importsMap: + const output = getRequire(importer, importsMap, _mod) + + // some sort of compat with new Rollup commonjs transform + if (output && typeof output === 'object' && !('__require' in output)) { + return new Proxy(output, { + get(target, key) { + if (key === '__require') { + return () => output + } + return Reflect.get(target, key) + }, + }) + } + + return output + } +} + +function getRequire(importer, importsMap, _mod) { + const getErrorDetails = (withStack) => { + return `In importsMap: ${JSON.stringify(importsMap, null, 2)} - ${ - withStack - ? `Stack: +${ + withStack + ? `Stack: ${new Error().stack .split('\n') .map((l) => ` ${l}`) .join('\n')}` - : '' - } + : '' +} --------------` - } - - try { - if (_mod === 'one' || _mod === 'one' || _mod.endsWith('one/dist/esm/index.mjs')) { - // TODO this should be passed in not hardcoded - const found = - __getRequire('packages/one/dist/esm/index.js', _mod) || - // this is only for developing links module in ~/vxrn, can remove later - __getRequire('vxrn/packages/one/dist/esm/index.js', _mod) || - __getRequire('one/dist/esm/index.native.js') || - __getRequire('one/dist/esm/index.native.js') || - __getRequire('packages/one/dist/esm/index.native.js', _mod) || - __getRequire('vxrn/packages/one/dist/esm/index.native.js', _mod) - - if (found) return found - - // Try harder - const possibleId = Object.keys(___modules___).find((m) => - /(one|one)\/dist\/esm\/index\.native\.js$/.test(m) - ) - if (possibleId) { - return __getRequire(possibleId, _mod) - } - } + } - if (_mod.startsWith('node:') || nodeImports[_mod]) { - console.warn(`Warning node import not supported: "${_mod}" from "${importer}"`) - return {} - } + try { + if (_mod === 'one' || _mod === 'one' || _mod.endsWith('one/dist/esm/index.mjs')) { + // TODO this should be passed in not hardcoded + const found = + __getRequire('packages/one/dist/esm/index.js', _mod) || + // this is only for developing links module in ~/vxrn, can remove later + __getRequire('vxrn/packages/one/dist/esm/index.js', _mod) || + __getRequire('one/dist/esm/index.native.js') || + __getRequire('one/dist/esm/index.native.js') || + __getRequire('packages/one/dist/esm/index.native.js', _mod) || + __getRequire('vxrn/packages/one/dist/esm/index.native.js', _mod) - // find via maps - let path = __specialRequireMap[_mod] || importsMap[_mod] || _mod - const found = __getRequire(path, _mod) if (found) return found - // quick and dirty relative() - if (importer && path[0] === '.') { - let currentDir = (() => { - const paths = importer.split('/') - return paths.slice(0, paths.length - 1) // remove last part to get dir - })() - - const pathParts = path.split('/') - while (true) { - if (pathParts[0] !== '..') break - pathParts.shift() - currentDir.pop() - } - path = [...currentDir, ...pathParts] - // Prevent generating a path like this: `foo/./bar.js` when requiring `./bar.js` from `foo`. - .filter((p) => p !== '.') - .join('/') + // Try harder + const possibleId = Object.keys(___modules___).find((m) => + /(one|one)\/dist\/esm\/index\.native\.js$/.test(m) + ) + if (possibleId) { + return __getRequire(possibleId, _mod) } + } + + if (_mod.startsWith('node:') || nodeImports[_mod]) { + console.warn(`Warning node import not supported: "${_mod}" from "${importer}"`) + return {} + } - // find our import.meta.glob which don't get the nice path addition, for now hardcode but this shouldnt be hard to fix properly: - const foundGlob = __getRequire(path.replace(/\.[jt]sx?$/, '.js'), _mod) - if (foundGlob) { - return foundGlob + // find via maps + let path = __specialRequireMap[_mod] || importsMap[_mod] || _mod + const found = __getRequire(path, _mod) + if (found) return found + + // quick and dirty relative() + if (importer && path[0] === '.') { + let currentDir = (() => { + const paths = importer.split('/') + return paths.slice(0, paths.length - 1) // remove last part to get dir + })() + + const pathParts = path.split('/') + while (true) { + if (pathParts[0] !== '..') break + pathParts.shift() + currentDir.pop() } + path = [...currentDir, ...pathParts] + // Prevent generating a path like this: `foo/./bar.js` when requiring `./bar.js` from `foo`. + .filter((p) => p !== '.') + .join('/') + } - // find internals loosely - try { - for (const [key, value] of Object.entries(__specialRequireMap)) { - if (_mod.endsWith(value)) { - const found = __getRequire(__specialRequireMap[key]) - if (found) { - return found - } + // find our import.meta.glob which don't get the nice path addition, for now hardcode but this shouldnt be hard to fix properly: + const foundGlob = __getRequire(path.replace(/\.[jt]sx?$/, '.js'), _mod) + if (foundGlob) { + return foundGlob + } + + // find internals loosely + try { + for (const [key, value] of Object.entries(__specialRequireMap)) { + if (_mod.endsWith(value)) { + const found = __getRequire(__specialRequireMap[key]) + if (found) { + return found } } - } catch (err) { - console.info('error loose internal', err) } + } catch (err) { + console.info('error loose internal', err) + } - // find externals loosely - try { - for (const [key, value] of Object.entries(importsMap)) { - if (key.endsWith(_mod.replace(/(\.\.?\/)+/, ''))) { - const found = __getRequire(importsMap[key], key) - if (found) { - return found - } + // find externals loosely + try { + for (const [key, value] of Object.entries(importsMap)) { + if (key.endsWith(_mod.replace(/(\.\.?\/)+/, ''))) { + const found = __getRequire(importsMap[key], key) + if (found) { + return found } } - } catch (err) { - console.info('error loose external', err) - } - - // is this cruft - if (globalThis[path]) { - const output = globalThis[path]() - __cachedModules[_mod] = output - return output } - - console.error(`Module not found "${_mod}" imported by "${importer}"\n${getErrorDetails()}`) - return {} } catch (err) { - const errorMessage = - `\n◆ ${_mod} "${err}"`.replace('Error: ', '').replaceAll('"', '') + - '\n' + - getErrorDetails(false) - - if (globalThis['no_console']) { - // If we are in production, do not suppress error as it will be hard to debug (currently console.error in production is not shown or being logged anywhere). - throw new Error(errorMessage) - } + console.info('error loose external', err) + } - console.error(errorMessage) + // is this cruft + if (globalThis[path]) { + const output = globalThis[path]() + __cachedModules[_mod] = output + return output } + + console.error(`Module not found "${_mod}" imported by "${importer}"\n${getErrorDetails()}`) + return {} + } catch (err) { + const errorMessage = + `\n◆ ${_mod} "${err}"`.replace('Error: ', '').replaceAll('"', '') + + '\n' + + getErrorDetails(false) + + if (globalThis['no_console']) { + // If we are in production, do not suppress error as it will be hard to debug (currently console.error in production is not shown or being logged anywhere). + throw new Error(errorMessage) + } + + console.error(errorMessage) } } diff --git a/tests/test-expo-camera/package.json b/tests/test-expo-camera/package.json index 980c0ea7e..03a33ed08 100644 --- a/tests/test-expo-camera/package.json +++ b/tests/test-expo-camera/package.json @@ -36,6 +36,6 @@ "react-native-web": "^0.19.12" }, "devDependencies": { - "vite": "6.0.0-beta.1" + "vite": "^6.0.0-beta.5" } } diff --git a/tests/test-react-native-svg/package.json b/tests/test-react-native-svg/package.json index b1040eca2..45927fcb6 100644 --- a/tests/test-react-native-svg/package.json +++ b/tests/test-react-native-svg/package.json @@ -22,6 +22,6 @@ "react-native-web": "^0.19.12" }, "devDependencies": { - "vite": "6.0.0-beta.1" + "vite": "^6.0.0-beta.5" } } diff --git a/tests/test/package.json b/tests/test/package.json index f4e0feafc..0785c6963 100644 --- a/tests/test/package.json +++ b/tests/test/package.json @@ -45,6 +45,6 @@ "devDependencies": { "@faker-js/faker": "next", "tsx": "^4.19.0", - "vite": "6.0.0-beta.1" + "vite": "^6.0.0-beta.5" } } diff --git a/tests/weird-deps/package.json b/tests/weird-deps/package.json index 1c50efcce..6c92795db 100644 --- a/tests/weird-deps/package.json +++ b/tests/weird-deps/package.json @@ -25,6 +25,6 @@ "uuid": "9.0.0" }, "devDependencies": { - "vite": "6.0.0-beta.1" + "vite": "^6.0.0-beta.5" } } diff --git a/yarn.lock b/yarn.lock index 47a0ca6c1..e4eeb9a47 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2068,14 +2068,14 @@ __metadata: languageName: node linkType: hard -"@docsearch/css@npm:3.6.1, @docsearch/css@npm:^3.6.1": +"@docsearch/css@npm:3.6.1": version: 3.6.1 resolution: "@docsearch/css@npm:3.6.1" checksum: 10/9afddf93797d85519e18ba7b747a1dc7e2a7e46d5530180fbb890657bcf77039bd728e435a82b143363da6f05d4bb993a000963ac41491c60725874b55ccc696 languageName: node linkType: hard -"@docsearch/css@npm:3.6.2": +"@docsearch/css@npm:3.6.2, @docsearch/css@npm:^3.6.1": version: 3.6.2 resolution: "@docsearch/css@npm:3.6.2" checksum: 10/630a26b7a570cb8c04becad769d32be5371a37d0cde1f72114e4d37d4890ea228b6e04fa0ee4bc6f37653773ddaa9bab09ba887ccd2a95ed2b6d0ac43a48b7ac @@ -5193,114 +5193,114 @@ __metadata: languageName: node linkType: hard -"@rollup/rollup-android-arm-eabi@npm:4.22.4": - version: 4.22.4 - resolution: "@rollup/rollup-android-arm-eabi@npm:4.22.4" +"@rollup/rollup-android-arm-eabi@npm:4.24.0": + version: 4.24.0 + resolution: "@rollup/rollup-android-arm-eabi@npm:4.24.0" conditions: os=android & cpu=arm languageName: node linkType: hard -"@rollup/rollup-android-arm64@npm:4.22.4": - version: 4.22.4 - resolution: "@rollup/rollup-android-arm64@npm:4.22.4" +"@rollup/rollup-android-arm64@npm:4.24.0": + version: 4.24.0 + resolution: "@rollup/rollup-android-arm64@npm:4.24.0" conditions: os=android & cpu=arm64 languageName: node linkType: hard -"@rollup/rollup-darwin-arm64@npm:4.22.4": - version: 4.22.4 - resolution: "@rollup/rollup-darwin-arm64@npm:4.22.4" +"@rollup/rollup-darwin-arm64@npm:4.24.0": + version: 4.24.0 + resolution: "@rollup/rollup-darwin-arm64@npm:4.24.0" conditions: os=darwin & cpu=arm64 languageName: node linkType: hard -"@rollup/rollup-darwin-x64@npm:4.22.4": - version: 4.22.4 - resolution: "@rollup/rollup-darwin-x64@npm:4.22.4" +"@rollup/rollup-darwin-x64@npm:4.24.0": + version: 4.24.0 + resolution: "@rollup/rollup-darwin-x64@npm:4.24.0" conditions: os=darwin & cpu=x64 languageName: node linkType: hard -"@rollup/rollup-linux-arm-gnueabihf@npm:4.22.4": - version: 4.22.4 - resolution: "@rollup/rollup-linux-arm-gnueabihf@npm:4.22.4" +"@rollup/rollup-linux-arm-gnueabihf@npm:4.24.0": + version: 4.24.0 + resolution: "@rollup/rollup-linux-arm-gnueabihf@npm:4.24.0" conditions: os=linux & cpu=arm & libc=glibc languageName: node linkType: hard -"@rollup/rollup-linux-arm-musleabihf@npm:4.22.4": - version: 4.22.4 - resolution: "@rollup/rollup-linux-arm-musleabihf@npm:4.22.4" +"@rollup/rollup-linux-arm-musleabihf@npm:4.24.0": + version: 4.24.0 + resolution: "@rollup/rollup-linux-arm-musleabihf@npm:4.24.0" conditions: os=linux & cpu=arm & libc=musl languageName: node linkType: hard -"@rollup/rollup-linux-arm64-gnu@npm:4.22.4": - version: 4.22.4 - resolution: "@rollup/rollup-linux-arm64-gnu@npm:4.22.4" +"@rollup/rollup-linux-arm64-gnu@npm:4.24.0": + version: 4.24.0 + resolution: "@rollup/rollup-linux-arm64-gnu@npm:4.24.0" conditions: os=linux & cpu=arm64 & libc=glibc languageName: node linkType: hard -"@rollup/rollup-linux-arm64-musl@npm:4.22.4": - version: 4.22.4 - resolution: "@rollup/rollup-linux-arm64-musl@npm:4.22.4" +"@rollup/rollup-linux-arm64-musl@npm:4.24.0": + version: 4.24.0 + resolution: "@rollup/rollup-linux-arm64-musl@npm:4.24.0" conditions: os=linux & cpu=arm64 & libc=musl languageName: node linkType: hard -"@rollup/rollup-linux-powerpc64le-gnu@npm:4.22.4": - version: 4.22.4 - resolution: "@rollup/rollup-linux-powerpc64le-gnu@npm:4.22.4" +"@rollup/rollup-linux-powerpc64le-gnu@npm:4.24.0": + version: 4.24.0 + resolution: "@rollup/rollup-linux-powerpc64le-gnu@npm:4.24.0" conditions: os=linux & cpu=ppc64 & libc=glibc languageName: node linkType: hard -"@rollup/rollup-linux-riscv64-gnu@npm:4.22.4": - version: 4.22.4 - resolution: "@rollup/rollup-linux-riscv64-gnu@npm:4.22.4" +"@rollup/rollup-linux-riscv64-gnu@npm:4.24.0": + version: 4.24.0 + resolution: "@rollup/rollup-linux-riscv64-gnu@npm:4.24.0" conditions: os=linux & cpu=riscv64 & libc=glibc languageName: node linkType: hard -"@rollup/rollup-linux-s390x-gnu@npm:4.22.4": - version: 4.22.4 - resolution: "@rollup/rollup-linux-s390x-gnu@npm:4.22.4" +"@rollup/rollup-linux-s390x-gnu@npm:4.24.0": + version: 4.24.0 + resolution: "@rollup/rollup-linux-s390x-gnu@npm:4.24.0" conditions: os=linux & cpu=s390x & libc=glibc languageName: node linkType: hard -"@rollup/rollup-linux-x64-gnu@npm:4.22.4, @rollup/rollup-linux-x64-gnu@npm:^4.9.5": - version: 4.22.4 - resolution: "@rollup/rollup-linux-x64-gnu@npm:4.22.4" +"@rollup/rollup-linux-x64-gnu@npm:4.24.0, @rollup/rollup-linux-x64-gnu@npm:^4.9.5": + version: 4.24.0 + resolution: "@rollup/rollup-linux-x64-gnu@npm:4.24.0" conditions: os=linux & cpu=x64 & libc=glibc languageName: node linkType: hard -"@rollup/rollup-linux-x64-musl@npm:4.22.4": - version: 4.22.4 - resolution: "@rollup/rollup-linux-x64-musl@npm:4.22.4" +"@rollup/rollup-linux-x64-musl@npm:4.24.0": + version: 4.24.0 + resolution: "@rollup/rollup-linux-x64-musl@npm:4.24.0" conditions: os=linux & cpu=x64 & libc=musl languageName: node linkType: hard -"@rollup/rollup-win32-arm64-msvc@npm:4.22.4": - version: 4.22.4 - resolution: "@rollup/rollup-win32-arm64-msvc@npm:4.22.4" +"@rollup/rollup-win32-arm64-msvc@npm:4.24.0": + version: 4.24.0 + resolution: "@rollup/rollup-win32-arm64-msvc@npm:4.24.0" conditions: os=win32 & cpu=arm64 languageName: node linkType: hard -"@rollup/rollup-win32-ia32-msvc@npm:4.22.4": - version: 4.22.4 - resolution: "@rollup/rollup-win32-ia32-msvc@npm:4.22.4" +"@rollup/rollup-win32-ia32-msvc@npm:4.24.0": + version: 4.24.0 + resolution: "@rollup/rollup-win32-ia32-msvc@npm:4.24.0" conditions: os=win32 & cpu=ia32 languageName: node linkType: hard -"@rollup/rollup-win32-x64-msvc@npm:4.22.4": - version: 4.22.4 - resolution: "@rollup/rollup-win32-x64-msvc@npm:4.22.4" +"@rollup/rollup-win32-x64-msvc@npm:4.24.0": + version: 4.24.0 + resolution: "@rollup/rollup-win32-x64-msvc@npm:4.24.0" conditions: os=win32 & cpu=x64 languageName: node linkType: hard @@ -7675,10 +7675,10 @@ __metadata: languageName: node linkType: hard -"@types/estree@npm:*, @types/estree@npm:1.0.5, @types/estree@npm:^1.0.0": - version: 1.0.5 - resolution: "@types/estree@npm:1.0.5" - checksum: 10/7de6d928dd4010b0e20c6919e1a6c27b61f8d4567befa89252055fad503d587ecb9a1e3eab1b1901f923964d7019796db810b7fd6430acb26c32866d126fd408 +"@types/estree@npm:*, @types/estree@npm:1.0.6, @types/estree@npm:^1.0.0": + version: 1.0.6 + resolution: "@types/estree@npm:1.0.6" + checksum: 10/9d35d475095199c23e05b431bcdd1f6fec7380612aed068b14b2a08aa70494de8a9026765a5a91b1073f636fb0368f6d8973f518a31391d519e20c59388ed88d languageName: node linkType: hard @@ -7940,17 +7940,7 @@ __metadata: languageName: node linkType: hard -"@types/react@npm:*": - version: 18.3.6 - resolution: "@types/react@npm:18.3.6" - dependencies: - "@types/prop-types": "npm:*" - csstype: "npm:^3.0.2" - checksum: 10/ba0d337244347ecbf921de174d9db9bb80b03d41ad3ae7aa65500b3339925852c97e501d7657b5cd629ffed9f7fe3820a63069847e7b8529e4d02934d0f182e9 - languageName: node - linkType: hard - -"@types/react@npm:^18.2.24": +"@types/react@npm:*, @types/react@npm:^18.2.24, @types/react@npm:^18.3.11": version: 18.3.12 resolution: "@types/react@npm:18.3.12" dependencies: @@ -7960,16 +7950,6 @@ __metadata: languageName: node linkType: hard -"@types/react@npm:^18.3.11": - version: 18.3.11 - resolution: "@types/react@npm:18.3.11" - dependencies: - "@types/prop-types": "npm:*" - csstype: "npm:^3.0.2" - checksum: 10/a36f0707fdfe9fe19cbe5892bcdab0f042ecadb501ea4e1c39519943f3e74cffbd31e892d3860f5c87cf33f5f223552b246a552bed0087b95954f2cb39d5cf65 - languageName: node - linkType: hard - "@types/resolve@npm:1.20.2": version: 1.20.2 resolution: "@types/resolve@npm:1.20.2" @@ -8509,7 +8489,7 @@ __metadata: react-native-web: "npm:^0.19.12" tamagui: "npm:^1.116.7" tsx: "npm:^4.19.0" - vite: "npm:6.0.0-beta.1" + vite: "npm:^6.0.0-beta.5" languageName: unknown linkType: soft @@ -8612,7 +8592,7 @@ __metadata: "@tamagui/build": "npm:^1.116.7" flow-remove-types: "npm:^2.247.1" metro-react-native-babel-preset: "npm:^0.77.0" - vite: "npm:6.0.0-beta.1" + vite: "npm:^6.0.0-beta.5" languageName: unknown linkType: soft @@ -12067,7 +12047,7 @@ __metadata: react-native-safe-area-context: "npm:4.10.5" react-native-screens: "npm:3.31.1" react-native-web: "npm:^0.19.12" - vite: "npm:6.0.0-beta.1" + vite: "npm:^6.0.0-beta.5" languageName: unknown linkType: soft @@ -12095,7 +12075,7 @@ __metadata: react-native-svg: "npm:15.2.0" swr: "npm:^2.2.5" tamagui: "npm:^1.116.7" - vite: "npm:6.0.0-beta.1" + vite: "npm:^6.0.0-beta.5" vite-plugin-inspect: "npm:^0.8.7" languageName: unknown linkType: soft @@ -12112,7 +12092,7 @@ __metadata: react-native-screens: "npm:3.31.1" react-native-svg: "npm:^15.7.1" react-native-web: "npm:^0.19.12" - vite: "npm:6.0.0-beta.1" + vite: "npm:^6.0.0-beta.5" languageName: unknown linkType: soft @@ -12146,7 +12126,7 @@ __metadata: react-native-web: "npm:^0.19.12" tamagui: "npm:^1.116.7" tsx: "npm:^4.19.0" - vite: "npm:6.0.0-beta.1" + vite: "npm:^6.0.0-beta.5" languageName: unknown linkType: soft @@ -12175,7 +12155,7 @@ __metadata: react-native-svg: "npm:15.2.0" react-native-web: "npm:^0.19.12" tamagui: "npm:^1.116.7" - vite: "npm:6.0.0-beta.1" + vite: "npm:^6.0.0-beta.5" languageName: unknown linkType: soft @@ -12200,7 +12180,7 @@ __metadata: react-native-screens: "npm:3.31.1" react-native-svg: "npm:15.2.0" react-native-web: "npm:^0.19.12" - vite: "npm:6.0.0-beta.1" + vite: "npm:^6.0.0-beta.5" languageName: unknown linkType: soft @@ -12231,7 +12211,7 @@ __metadata: react-native-web: "npm:^0.19.12" tamagui: "npm:^1.116.7" tsx: "npm:^4.19.0" - vite: "npm:6.0.0-beta.1" + vite: "npm:^6.0.0-beta.5" languageName: unknown linkType: soft @@ -12264,7 +12244,7 @@ __metadata: react-native-web: "npm:^0.19.12" tamagui: "npm:^1.116.7" tsx: "npm:^4.19.0" - vite: "npm:6.0.0-beta.1" + vite: "npm:^6.0.0-beta.5" languageName: unknown linkType: soft @@ -12284,7 +12264,7 @@ __metadata: react-native-webview: "npm:^13.11.1" tamagui: "npm:^1.116.7" uuid: "npm:9.0.0" - vite: "npm:6.0.0-beta.1" + vite: "npm:^6.0.0-beta.5" languageName: unknown linkType: soft @@ -17260,7 +17240,7 @@ __metadata: rollup: "npm:^4.21.0" rollup-plugin-node-externals: "npm:^7.1.2" url-parse: "npm:^1.5.10" - vite: "npm:6.0.0-beta.1" + vite: "npm:^6.0.0-beta.5" vite-tsconfig-paths: "npm:^5.0.1" vitest: "npm:^2.1.1" vxrn: "npm:1.1.325" @@ -17938,7 +17918,7 @@ __metadata: languageName: node linkType: hard -"postcss@npm:^8.4.43, postcss@npm:^8.4.45, postcss@npm:^8.4.47, postcss@npm:~8.4.32": +"postcss@npm:^8.4.43, postcss@npm:^8.4.47, postcss@npm:~8.4.32": version: 8.4.47 resolution: "postcss@npm:8.4.47" dependencies: @@ -19209,27 +19189,27 @@ __metadata: languageName: node linkType: hard -"rollup@npm:^4.20.0, rollup@npm:^4.21.0": - version: 4.22.4 - resolution: "rollup@npm:4.22.4" - dependencies: - "@rollup/rollup-android-arm-eabi": "npm:4.22.4" - "@rollup/rollup-android-arm64": "npm:4.22.4" - "@rollup/rollup-darwin-arm64": "npm:4.22.4" - "@rollup/rollup-darwin-x64": "npm:4.22.4" - "@rollup/rollup-linux-arm-gnueabihf": "npm:4.22.4" - "@rollup/rollup-linux-arm-musleabihf": "npm:4.22.4" - "@rollup/rollup-linux-arm64-gnu": "npm:4.22.4" - "@rollup/rollup-linux-arm64-musl": "npm:4.22.4" - "@rollup/rollup-linux-powerpc64le-gnu": "npm:4.22.4" - "@rollup/rollup-linux-riscv64-gnu": "npm:4.22.4" - "@rollup/rollup-linux-s390x-gnu": "npm:4.22.4" - "@rollup/rollup-linux-x64-gnu": "npm:4.22.4" - "@rollup/rollup-linux-x64-musl": "npm:4.22.4" - "@rollup/rollup-win32-arm64-msvc": "npm:4.22.4" - "@rollup/rollup-win32-ia32-msvc": "npm:4.22.4" - "@rollup/rollup-win32-x64-msvc": "npm:4.22.4" - "@types/estree": "npm:1.0.5" +"rollup@npm:^4.20.0, rollup@npm:^4.21.0, rollup@npm:^4.23.0": + version: 4.24.0 + resolution: "rollup@npm:4.24.0" + dependencies: + "@rollup/rollup-android-arm-eabi": "npm:4.24.0" + "@rollup/rollup-android-arm64": "npm:4.24.0" + "@rollup/rollup-darwin-arm64": "npm:4.24.0" + "@rollup/rollup-darwin-x64": "npm:4.24.0" + "@rollup/rollup-linux-arm-gnueabihf": "npm:4.24.0" + "@rollup/rollup-linux-arm-musleabihf": "npm:4.24.0" + "@rollup/rollup-linux-arm64-gnu": "npm:4.24.0" + "@rollup/rollup-linux-arm64-musl": "npm:4.24.0" + "@rollup/rollup-linux-powerpc64le-gnu": "npm:4.24.0" + "@rollup/rollup-linux-riscv64-gnu": "npm:4.24.0" + "@rollup/rollup-linux-s390x-gnu": "npm:4.24.0" + "@rollup/rollup-linux-x64-gnu": "npm:4.24.0" + "@rollup/rollup-linux-x64-musl": "npm:4.24.0" + "@rollup/rollup-win32-arm64-msvc": "npm:4.24.0" + "@rollup/rollup-win32-ia32-msvc": "npm:4.24.0" + "@rollup/rollup-win32-x64-msvc": "npm:4.24.0" + "@types/estree": "npm:1.0.6" fsevents: "npm:~2.3.2" dependenciesMeta: "@rollup/rollup-android-arm-eabi": @@ -19268,7 +19248,7 @@ __metadata: optional: true bin: rollup: dist/bin/rollup - checksum: 10/0fbee8c14d9052624c76a09fe79ed4d46024832be3ceea86c69f1521ae84b581a64c6e6596fdd796030c206835987e1a0a3be85f4c0d35b71400be5dce799d12 + checksum: 10/291dce8f180628a73d6749119a3e50aa917c416075302bc6f6ac655affc7f0ce9d7f025bef7318d424d0c5623dcb83e360f9ea0125273b6a2285c232172800cc languageName: node linkType: hard @@ -21007,7 +20987,7 @@ __metadata: languageName: node linkType: hard -"typescript@npm:^5.2.2": +"typescript@npm:^5.2.2, typescript@npm:^5.5.2, typescript@npm:^5.6.2": version: 5.6.3 resolution: "typescript@npm:5.6.3" bin: @@ -21017,17 +20997,7 @@ __metadata: languageName: node linkType: hard -"typescript@npm:^5.5.2, typescript@npm:^5.6.2": - version: 5.6.2 - resolution: "typescript@npm:5.6.2" - bin: - tsc: bin/tsc - tsserver: bin/tsserver - checksum: 10/f95365d4898f357823e93d334ecda9fcade54f009b397c7d05b7621cd9e865981033cf89ccde0f3e3a7b73b1fdbae18e92bc77db237b43e912f053fef0f9a53b - languageName: node - linkType: hard - -"typescript@patch:typescript@npm%3A^5.2.2#optional!builtin": +"typescript@patch:typescript@npm%3A^5.2.2#optional!builtin, typescript@patch:typescript@npm%3A^5.5.2#optional!builtin, typescript@patch:typescript@npm%3A^5.6.2#optional!builtin": version: 5.6.3 resolution: "typescript@patch:typescript@npm%3A5.6.3#optional!builtin::version=5.6.3&hash=8c6c40" bin: @@ -21037,16 +21007,6 @@ __metadata: languageName: node linkType: hard -"typescript@patch:typescript@npm%3A^5.5.2#optional!builtin, typescript@patch:typescript@npm%3A^5.6.2#optional!builtin": - version: 5.6.2 - resolution: "typescript@patch:typescript@npm%3A5.6.2#optional!builtin::version=5.6.2&hash=8c6c40" - bin: - tsc: bin/tsc - tsserver: bin/tsserver - checksum: 10/8bfc7ca0d9feca4c3fcbd6c70741abfcd714197d6448e68225ae71e462447d904d3bfba49759a8fbe4956d87f054e2d346833c8349c222daa594a2626d4e1be8 - languageName: node - linkType: hard - "ua-parser-js@npm:^1.0.35": version: 1.0.39 resolution: "ua-parser-js@npm:1.0.39" @@ -21719,13 +21679,13 @@ __metadata: languageName: node linkType: hard -"vite@npm:6.0.0-beta.1": - version: 6.0.0-beta.1 - resolution: "vite@npm:6.0.0-beta.1" +"vite@npm:^5.0.0, vite@npm:^5.4.1": + version: 5.4.7 + resolution: "vite@npm:5.4.7" dependencies: esbuild: "npm:^0.21.3" fsevents: "npm:~2.3.3" - postcss: "npm:^8.4.45" + postcss: "npm:^8.4.43" rollup: "npm:^4.20.0" peerDependencies: "@types/node": ^18.0.0 || >=20.0.0 @@ -21758,18 +21718,18 @@ __metadata: optional: true bin: vite: bin/vite.js - checksum: 10/b5c1ae5e00c74ace8a4680fafc5c8b12b63c92ab6924b1717f96f69fb971f04868111ebfeb6ff1c82e9c02450eafed9fc3a4d4bc788f9b7e5b5d03870508f7bd + checksum: 10/3f27e870930ad83b51e009604c6b69ab090e69bb5bfe85007c7e4ec3326efae4e33ac799645926363f258595b3be3055cc1ebc5ee158cff4bacdf41adf4ef8ed languageName: node linkType: hard -"vite@npm:^5.0.0, vite@npm:^5.4.1": - version: 5.4.7 - resolution: "vite@npm:5.4.7" +"vite@npm:^6.0.0-beta.5": + version: 6.0.0-beta.5 + resolution: "vite@npm:6.0.0-beta.5" dependencies: - esbuild: "npm:^0.21.3" + esbuild: "npm:^0.24.0" fsevents: "npm:~2.3.3" - postcss: "npm:^8.4.43" - rollup: "npm:^4.20.0" + postcss: "npm:^8.4.47" + rollup: "npm:^4.23.0" peerDependencies: "@types/node": ^18.0.0 || >=20.0.0 less: "*" @@ -21778,7 +21738,7 @@ __metadata: sass-embedded: "*" stylus: "*" sugarss: "*" - terser: ^5.4.0 + terser: ^5.16.0 dependenciesMeta: fsevents: optional: true @@ -21801,7 +21761,7 @@ __metadata: optional: true bin: vite: bin/vite.js - checksum: 10/3f27e870930ad83b51e009604c6b69ab090e69bb5bfe85007c7e4ec3326efae4e33ac799645926363f258595b3be3055cc1ebc5ee158cff4bacdf41adf4ef8ed + checksum: 10/e5e17b60683a3efbb7878703da5c4b848aa2182c967e5a5b60bf20a57589adf221e5e5e29e421d7863ade84ba82298f862174ee13c845005e0c9d74314e53d51 languageName: node linkType: hard @@ -22003,7 +21963,7 @@ __metadata: qrcode-terminal: "npm:^0.12.0" rollup: "npm:^4.21.0" semver: "npm:^7.6.3" - vite: "npm:6.0.0-beta.1" + vite: "npm:^6.0.0-beta.5" vite-bundle-analyzer: "npm:^0.9.4" vite-plugin-mkcert: "npm:^1.17.5" ws: "npm:^8.7.0" From e4e724a93e6ab01379607b47ca0c89f592e03605 Mon Sep 17 00:00:00 2001 From: natew Date: Sun, 27 Oct 2024 10:19:58 +0900 Subject: [PATCH 03/13] feat(vxrn): handle both typescript in node_modules, and expo modules with jsx, automatically --- .../vxrn/src/utils/getReactNativeConfig.ts | 67 ++++++++++++++++--- .../types/plugins/clientInjectPlugin.d.ts | 2 +- .../types/utils/getReactNativeConfig.d.ts | 2 +- 3 files changed, 58 insertions(+), 13 deletions(-) diff --git a/packages/vxrn/src/utils/getReactNativeConfig.ts b/packages/vxrn/src/utils/getReactNativeConfig.ts index defed659d..1ef3e230e 100644 --- a/packages/vxrn/src/utils/getReactNativeConfig.ts +++ b/packages/vxrn/src/utils/getReactNativeConfig.ts @@ -1,5 +1,5 @@ import nodeResolve from '@rollup/plugin-node-resolve' -import viteNativeSWC from '@vxrn/vite-native-swc' +import viteNativeSWC, { swcTransform } from '@vxrn/vite-native-swc' import { stat } from 'node:fs/promises' import { dirname, join } from 'node:path' import { @@ -133,20 +133,65 @@ export async function getReactNativeConfig( production: mode === 'prod', }), + // TODO i think this probably should be a swc plugin (has to be wasm-rust unfortuantely) + // but luckily not too bad because its pretty simple: if export type, export let object + // and a basic check for if any other export exists that is already there { - name: 'fix-expo', + name: 'one-node-module-transforms', + transform: { order: 'pre', - async handler(code, id) { - if (!id.includes('node_modules/expo-') && !id.includes('node_modules/@expo/')) { - return null + async handler(code: string, id: string) { + const isNodeModule = id.includes('node_modules') + + // handles typescript + if (isNodeModule && /\.tsx?$/.test(id)) { + // we need to keep fake objects for type exports + const typeExportsMatch = code.match(/^\s*export\s+type\s+([^\s]+)/gi) + + const output = await swcTransform(id, code, { + mode: mode === 'dev' ? 'serve' : 'build', + }) + + if (!output) return null + + let codeOut = output.code + + // add back in export types as fake objects: + + if (typeExportsMatch) { + for (const typeExport of Array.from(typeExportsMatch)) { + const [_export, _type, name] = typeExport.split(/\s+/) + // basic sanity check it isn't exported already + const alreadyExported = new RegExp( + `export (const|let|class|function) ${name}\\s+` + ).test(codeOut) + + if (!alreadyExported) { + const fakeExport = `export let ${name} = {};` + codeOut += `\n${fakeExport}\n` + } + } + } + + return { + code: codeOut, + map: output.map, + } + } + + // handles expo modules + if ( + isNodeModule && + (id.includes('node_modules/expo-') || id.includes('node_modules/@expo/')) + ) { + // Use the exposed transform from vite, instead of directly + // transforming with esbuild + return transformWithEsbuild(code, id, { + loader: 'jsx', + jsx: 'automatic', + }) } - // Use the exposed transform from vite, instead of directly - // transforming with esbuild - return transformWithEsbuild(code, id, { - loader: 'jsx', - jsx: 'automatic', - }) }, }, }, diff --git a/packages/vxrn/types/plugins/clientInjectPlugin.d.ts b/packages/vxrn/types/plugins/clientInjectPlugin.d.ts index 5cfd80695..c1a4b04e3 100644 --- a/packages/vxrn/types/plugins/clientInjectPlugin.d.ts +++ b/packages/vxrn/types/plugins/clientInjectPlugin.d.ts @@ -23,7 +23,7 @@ export declare function getServerConfigPlugin(): { esbuild: import("vite").ESBuildOptions | false; server: import("vite").ResolvedServerOptions; dev: import("vite").ResolvedDevEnvironmentOptions; - builder: Required; + builder: Required | undefined; build: import("vite").ResolvedBuildOptions; preview: import("vite").ResolvedPreviewOptions; ssr: import("vite").ResolvedSSROptions; diff --git a/packages/vxrn/types/utils/getReactNativeConfig.d.ts b/packages/vxrn/types/utils/getReactNativeConfig.d.ts index eab46423e..c612bb296 100644 --- a/packages/vxrn/types/utils/getReactNativeConfig.d.ts +++ b/packages/vxrn/types/utils/getReactNativeConfig.d.ts @@ -66,7 +66,7 @@ export declare function getReactNativeResolvedConfig(): Readonly; + builder: Required | undefined; build: import("vite").ResolvedBuildOptions; preview: import("vite").ResolvedPreviewOptions; ssr: import("vite").ResolvedSSROptions; From b7cbbdbea6415a851f3af2e87dfa7f7e6f044581 Mon Sep 17 00:00:00 2001 From: natew Date: Mon, 28 Oct 2024 08:47:33 +0900 Subject: [PATCH 04/13] remove unused code in testflight --- .../testflight/app/api/authentication+api.tsx | 149 ------ examples/testflight/code/db/connection.ts | 17 - examples/testflight/code/db/drizzle.config.ts | 16 - .../migrations/0000_clean_justin_hammer.sql | 56 --- .../code/db/migrations/0000_tiny_joseph.sql | 100 ---- .../db/migrations/meta/0000_snapshot.json | 387 --------------- .../code/db/migrations/meta/_journal.json | 13 - examples/testflight/code/db/run-migrations.ts | 18 - examples/testflight/code/db/schema.ts | 151 ------ examples/testflight/code/db/seed.ts | 444 ------------------ 10 files changed, 1351 deletions(-) delete mode 100644 examples/testflight/app/api/authentication+api.tsx delete mode 100644 examples/testflight/code/db/connection.ts delete mode 100644 examples/testflight/code/db/drizzle.config.ts delete mode 100644 examples/testflight/code/db/migrations/0000_clean_justin_hammer.sql delete mode 100644 examples/testflight/code/db/migrations/0000_tiny_joseph.sql delete mode 100644 examples/testflight/code/db/migrations/meta/0000_snapshot.json delete mode 100644 examples/testflight/code/db/migrations/meta/_journal.json delete mode 100644 examples/testflight/code/db/run-migrations.ts delete mode 100644 examples/testflight/code/db/schema.ts delete mode 100644 examples/testflight/code/db/seed.ts diff --git a/examples/testflight/app/api/authentication+api.tsx b/examples/testflight/app/api/authentication+api.tsx deleted file mode 100644 index 69ca2936b..000000000 --- a/examples/testflight/app/api/authentication+api.tsx +++ /dev/null @@ -1,149 +0,0 @@ -/** - * This endpoint will handle user authentication including sign-up, login, update, delete, and logout. - * We will use the Node.js standard library for password hashing and verification. - * The methods will be: - * - GET: Check if the user is logged in - * - POST: Sign-up a new user - * - PUT: Update user details - * - DELETE: Delete a user account - * - GET (logout): Log out the user using a query string parameter - */ - -import { eq } from 'drizzle-orm' -import { createHash, randomBytes, timingSafeEqual } from 'node:crypto' -import { db } from '~/code/db/connection' -import { users } from '~/code/db/schema' - -// Helper function to hash passwords -const hashPassword = (password: string) => { - const salt = randomBytes(16).toString('hex') - const hash = createHash('sha256') - .update(password + salt) - .digest('hex') - return `${salt}:${hash}` -} - -// Helper function to verify passwords -const verifyPassword = (password: string, storedHash: string) => { - const [salt, originalHash] = storedHash.split(':') - const hash = createHash('sha256') - .update(password + salt) - .digest('hex') - return timingSafeEqual(Buffer.from(hash), Buffer.from(originalHash)) -} - -// Helper function to get session from cookies -const getSession = (request: Request) => { - const cookie = request.headers.get('Cookie') - if (!cookie) return null - const sessionCookie = cookie.split('; ').find((c) => c.startsWith('session=')) - if (!sessionCookie) return null - const session = JSON.parse(decodeURIComponent(sessionCookie.split('=')[1])) - return session -} - -// Helper function to destroy session -const destroySession = (session: any) => { - // Invalidate the session (implementation depends on your session management) - // For example, you could remove the session from a database or cache -} - -export async function GET(request: Request) { - const url = new URL(request.url) - const action = url.searchParams.get('action') - - if (action === 'logout') { - // Log out the user by destroying the session - const session = getSession(request) - if (session) { - destroySession(session) - return new Response(JSON.stringify({ success: true }), { - headers: { 'Content-Type': 'application/json' }, - }) - } - return new Response(JSON.stringify({ error: 'No active session' }), { - status: 400, - headers: { 'Content-Type': 'application/json' }, - }) - } - - // Check if the user is logged in - const session = getSession(request) - if (session?.user) { - return new Response(JSON.stringify({ loggedIn: true, user: session.user }), { - headers: { 'Content-Type': 'application/json' }, - }) - } - return new Response(JSON.stringify({ loggedIn: false }), { - headers: { 'Content-Type': 'application/json' }, - }) -} - -export async function POST(request: Request) { - const { username, email, password } = await request.json() - - // Hash the password - const passwordHash = hashPassword(password) - - try { - // Insert the new user into the database - const newUser = await db - .insert(users) - .values({ username, email, passwordHash }) - .returning({ id: users.id, username: users.username, email: users.email }) - .then((res) => res[0]) - - return new Response(JSON.stringify(newUser), { - headers: { 'Content-Type': 'application/json' }, - }) - } catch (error) { - return new Response(JSON.stringify({ error: 'Failed to sign up' }), { - status: 500, - headers: { 'Content-Type': 'application/json' }, - }) - } -} - -export async function PUT(request: Request) { - const { id, username, email, password } = await request.json() - - // Hash the new password if provided - const passwordHash = password ? hashPassword(password) : undefined - - try { - // Update the user details in the database - const updatedUser = await db - .update(users) - .set({ username, email, ...(passwordHash && { passwordHash }) }) - .where(eq(users.id, id)) - .returning({ id: users.id, username: users.username, email: users.email }) - .then((res) => res[0]) - - return new Response(JSON.stringify(updatedUser), { - headers: { 'Content-Type': 'application/json' }, - }) - } catch (error) { - return new Response(JSON.stringify({ error: 'Failed to update user' }), { - status: 500, - headers: { 'Content-Type': 'application/json' }, - }) - } -} - -export async function DELETE(request: Request) { - const { id } = await request.json() - - try { - // Delete the user from the database - await db.delete(users).where(eq(users.id, id)) - - return new Response(JSON.stringify({ success: true }), { - headers: { 'Content-Type': 'application/json' }, - }) - } catch (error) { - return new Response(JSON.stringify({ error: 'Failed to delete user' }), { - status: 500, - headers: { 'Content-Type': 'application/json' }, - }) - } -} diff --git a/examples/testflight/code/db/connection.ts b/examples/testflight/code/db/connection.ts deleted file mode 100644 index 2de69088e..000000000 --- a/examples/testflight/code/db/connection.ts +++ /dev/null @@ -1,17 +0,0 @@ -import { drizzle, type PostgresJsDatabase } from 'drizzle-orm/postgres-js' -import postgres from 'postgres' -import * as schema from './schema' - -export let connection: postgres.Sql - -export const db = (() => { - let val: PostgresJsDatabase - if (!global._db) { - connection = postgres(process.env.DATABASE_URL!) - val = drizzle(connection, { schema }) - global._db = val - } else { - val = global._db - } - return val -})() diff --git a/examples/testflight/code/db/drizzle.config.ts b/examples/testflight/code/db/drizzle.config.ts deleted file mode 100644 index af8496163..000000000 --- a/examples/testflight/code/db/drizzle.config.ts +++ /dev/null @@ -1,16 +0,0 @@ -import { defineConfig } from 'drizzle-kit' - -const { DATABASE_URL } = process.env - -if (!DATABASE_URL || typeof DATABASE_URL !== 'string') { - throw new Error('DATABASE_URL is not set or not a string') -} - -export default defineConfig({ - schema: './code/db/schema.ts', - out: './code/db/migrations', - dialect: 'postgresql', // 'postgresql' | 'mysql' | 'sqlite' - dbCredentials: { - url: DATABASE_URL as string, // Type assertion to ensure it's a string - }, -}) diff --git a/examples/testflight/code/db/migrations/0000_clean_justin_hammer.sql b/examples/testflight/code/db/migrations/0000_clean_justin_hammer.sql deleted file mode 100644 index 260a07b28..000000000 --- a/examples/testflight/code/db/migrations/0000_clean_justin_hammer.sql +++ /dev/null @@ -1,56 +0,0 @@ -CREATE TABLE `follows` ( - `follower_id` integer NOT NULL, - `following_id` integer NOT NULL, - `created_at` integer DEFAULT (CURRENT_TIMESTAMP), - FOREIGN KEY (`follower_id`) REFERENCES `users`(`id`) ON UPDATE no action ON DELETE cascade, - FOREIGN KEY (`following_id`) REFERENCES `users`(`id`) ON UPDATE no action ON DELETE cascade -); ---> statement-breakpoint -CREATE TABLE `likes` ( - `user_id` integer NOT NULL, - `post_id` integer NOT NULL, - `created_at` integer DEFAULT (CURRENT_TIMESTAMP), - PRIMARY KEY(`user_id`, `post_id`), - FOREIGN KEY (`user_id`) REFERENCES `users`(`id`) ON UPDATE no action ON DELETE cascade, - FOREIGN KEY (`post_id`) REFERENCES `posts`(`id`) ON UPDATE no action ON DELETE cascade -); ---> statement-breakpoint -CREATE TABLE `posts` ( - `id` integer PRIMARY KEY AUTOINCREMENT NOT NULL, - `user_id` integer NOT NULL, - `content` text NOT NULL, - `created_at` integer DEFAULT (CURRENT_TIMESTAMP), - FOREIGN KEY (`user_id`) REFERENCES `users`(`id`) ON UPDATE no action ON DELETE cascade -); ---> statement-breakpoint -CREATE TABLE `replies` ( - `id` integer PRIMARY KEY AUTOINCREMENT NOT NULL, - `user_id` integer NOT NULL, - `post_id` integer NOT NULL, - `content` text NOT NULL, - `created_at` integer DEFAULT (CURRENT_TIMESTAMP), - FOREIGN KEY (`user_id`) REFERENCES `users`(`id`) ON UPDATE no action ON DELETE cascade, - FOREIGN KEY (`post_id`) REFERENCES `posts`(`id`) ON UPDATE no action ON DELETE cascade -); ---> statement-breakpoint -CREATE TABLE `reposts` ( - `user_id` integer NOT NULL, - `post_id` integer NOT NULL, - `created_at` integer DEFAULT (CURRENT_TIMESTAMP), - PRIMARY KEY(`user_id`, `post_id`), - FOREIGN KEY (`user_id`) REFERENCES `users`(`id`) ON UPDATE no action ON DELETE cascade, - FOREIGN KEY (`post_id`) REFERENCES `posts`(`id`) ON UPDATE no action ON DELETE cascade -); ---> statement-breakpoint -CREATE TABLE `users` ( - `id` integer PRIMARY KEY AUTOINCREMENT NOT NULL, - `username` text NOT NULL, - `email` text NOT NULL, - `password_hash` text NOT NULL, - `bio` text DEFAULT '', - `avatar_url` text DEFAULT '', - `created_at` integer DEFAULT (CURRENT_TIMESTAMP) -); ---> statement-breakpoint -CREATE UNIQUE INDEX `users_username_unique` ON `users` (`username`);--> statement-breakpoint -CREATE UNIQUE INDEX `users_email_unique` ON `users` (`email`); \ No newline at end of file diff --git a/examples/testflight/code/db/migrations/0000_tiny_joseph.sql b/examples/testflight/code/db/migrations/0000_tiny_joseph.sql deleted file mode 100644 index d5efcedf0..000000000 --- a/examples/testflight/code/db/migrations/0000_tiny_joseph.sql +++ /dev/null @@ -1,100 +0,0 @@ -CREATE TABLE IF NOT EXISTS "follows" ( - "follower_id" integer NOT NULL, - "following_id" integer NOT NULL, - "created_at" timestamp DEFAULT now() -); ---> statement-breakpoint -CREATE TABLE IF NOT EXISTS "likes" ( - "user_id" integer NOT NULL, - "post_id" integer NOT NULL, - "created_at" timestamp DEFAULT now(), - CONSTRAINT "likes_user_id_post_id_pk" PRIMARY KEY("user_id","post_id") -); ---> statement-breakpoint -CREATE TABLE IF NOT EXISTS "posts" ( - "id" serial PRIMARY KEY NOT NULL, - "user_id" integer NOT NULL, - "content" text NOT NULL, - "created_at" timestamp DEFAULT now() -); ---> statement-breakpoint -CREATE TABLE IF NOT EXISTS "replies" ( - "id" serial PRIMARY KEY NOT NULL, - "user_id" integer NOT NULL, - "post_id" integer NOT NULL, - "content" text NOT NULL, - "created_at" timestamp DEFAULT now() -); ---> statement-breakpoint -CREATE TABLE IF NOT EXISTS "reposts" ( - "user_id" integer NOT NULL, - "post_id" integer NOT NULL, - "created_at" timestamp DEFAULT now(), - CONSTRAINT "reposts_user_id_post_id_pk" PRIMARY KEY("user_id","post_id") -); ---> statement-breakpoint -CREATE TABLE IF NOT EXISTS "users" ( - "id" serial PRIMARY KEY NOT NULL, - "username" varchar(50) NOT NULL, - "email" varchar(100) NOT NULL, - "password_hash" varchar(255) NOT NULL, - "bio" text DEFAULT '', - "avatar_url" varchar(255) DEFAULT '', - "created_at" timestamp DEFAULT now(), - CONSTRAINT "users_username_unique" UNIQUE("username"), - CONSTRAINT "users_email_unique" UNIQUE("email") -); ---> statement-breakpoint -DO $$ BEGIN - ALTER TABLE "follows" ADD CONSTRAINT "follows_follower_id_users_id_fk" FOREIGN KEY ("follower_id") REFERENCES "public"."users"("id") ON DELETE cascade ON UPDATE no action; -EXCEPTION - WHEN duplicate_object THEN null; -END $$; ---> statement-breakpoint -DO $$ BEGIN - ALTER TABLE "follows" ADD CONSTRAINT "follows_following_id_users_id_fk" FOREIGN KEY ("following_id") REFERENCES "public"."users"("id") ON DELETE cascade ON UPDATE no action; -EXCEPTION - WHEN duplicate_object THEN null; -END $$; ---> statement-breakpoint -DO $$ BEGIN - ALTER TABLE "likes" ADD CONSTRAINT "likes_user_id_users_id_fk" FOREIGN KEY ("user_id") REFERENCES "public"."users"("id") ON DELETE cascade ON UPDATE no action; -EXCEPTION - WHEN duplicate_object THEN null; -END $$; ---> statement-breakpoint -DO $$ BEGIN - ALTER TABLE "likes" ADD CONSTRAINT "likes_post_id_posts_id_fk" FOREIGN KEY ("post_id") REFERENCES "public"."posts"("id") ON DELETE cascade ON UPDATE no action; -EXCEPTION - WHEN duplicate_object THEN null; -END $$; ---> statement-breakpoint -DO $$ BEGIN - ALTER TABLE "posts" ADD CONSTRAINT "posts_user_id_users_id_fk" FOREIGN KEY ("user_id") REFERENCES "public"."users"("id") ON DELETE cascade ON UPDATE no action; -EXCEPTION - WHEN duplicate_object THEN null; -END $$; ---> statement-breakpoint -DO $$ BEGIN - ALTER TABLE "replies" ADD CONSTRAINT "replies_user_id_users_id_fk" FOREIGN KEY ("user_id") REFERENCES "public"."users"("id") ON DELETE cascade ON UPDATE no action; -EXCEPTION - WHEN duplicate_object THEN null; -END $$; ---> statement-breakpoint -DO $$ BEGIN - ALTER TABLE "replies" ADD CONSTRAINT "replies_post_id_posts_id_fk" FOREIGN KEY ("post_id") REFERENCES "public"."posts"("id") ON DELETE cascade ON UPDATE no action; -EXCEPTION - WHEN duplicate_object THEN null; -END $$; ---> statement-breakpoint -DO $$ BEGIN - ALTER TABLE "reposts" ADD CONSTRAINT "reposts_user_id_users_id_fk" FOREIGN KEY ("user_id") REFERENCES "public"."users"("id") ON DELETE cascade ON UPDATE no action; -EXCEPTION - WHEN duplicate_object THEN null; -END $$; ---> statement-breakpoint -DO $$ BEGIN - ALTER TABLE "reposts" ADD CONSTRAINT "reposts_post_id_posts_id_fk" FOREIGN KEY ("post_id") REFERENCES "public"."posts"("id") ON DELETE cascade ON UPDATE no action; -EXCEPTION - WHEN duplicate_object THEN null; -END $$; diff --git a/examples/testflight/code/db/migrations/meta/0000_snapshot.json b/examples/testflight/code/db/migrations/meta/0000_snapshot.json deleted file mode 100644 index 6252f30ba..000000000 --- a/examples/testflight/code/db/migrations/meta/0000_snapshot.json +++ /dev/null @@ -1,387 +0,0 @@ -{ - "id": "ccebedf0-f104-420e-95b1-155591f0ef6c", - "prevId": "00000000-0000-0000-0000-000000000000", - "version": "7", - "dialect": "postgresql", - "tables": { - "public.follows": { - "name": "follows", - "schema": "", - "columns": { - "follower_id": { - "name": "follower_id", - "type": "integer", - "primaryKey": false, - "notNull": true - }, - "following_id": { - "name": "following_id", - "type": "integer", - "primaryKey": false, - "notNull": true - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": false, - "default": "now()" - } - }, - "indexes": {}, - "foreignKeys": { - "follows_follower_id_users_id_fk": { - "name": "follows_follower_id_users_id_fk", - "tableFrom": "follows", - "tableTo": "users", - "columnsFrom": [ - "follower_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "follows_following_id_users_id_fk": { - "name": "follows_following_id_users_id_fk", - "tableFrom": "follows", - "tableTo": "users", - "columnsFrom": [ - "following_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {} - }, - "public.likes": { - "name": "likes", - "schema": "", - "columns": { - "user_id": { - "name": "user_id", - "type": "integer", - "primaryKey": false, - "notNull": true - }, - "post_id": { - "name": "post_id", - "type": "integer", - "primaryKey": false, - "notNull": true - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": false, - "default": "now()" - } - }, - "indexes": {}, - "foreignKeys": { - "likes_user_id_users_id_fk": { - "name": "likes_user_id_users_id_fk", - "tableFrom": "likes", - "tableTo": "users", - "columnsFrom": [ - "user_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "likes_post_id_posts_id_fk": { - "name": "likes_post_id_posts_id_fk", - "tableFrom": "likes", - "tableTo": "posts", - "columnsFrom": [ - "post_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "likes_user_id_post_id_pk": { - "name": "likes_user_id_post_id_pk", - "columns": [ - "user_id", - "post_id" - ] - } - }, - "uniqueConstraints": {} - }, - "public.posts": { - "name": "posts", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "serial", - "primaryKey": true, - "notNull": true - }, - "user_id": { - "name": "user_id", - "type": "integer", - "primaryKey": false, - "notNull": true - }, - "content": { - "name": "content", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": false, - "default": "now()" - } - }, - "indexes": {}, - "foreignKeys": { - "posts_user_id_users_id_fk": { - "name": "posts_user_id_users_id_fk", - "tableFrom": "posts", - "tableTo": "users", - "columnsFrom": [ - "user_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {} - }, - "public.replies": { - "name": "replies", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "serial", - "primaryKey": true, - "notNull": true - }, - "user_id": { - "name": "user_id", - "type": "integer", - "primaryKey": false, - "notNull": true - }, - "post_id": { - "name": "post_id", - "type": "integer", - "primaryKey": false, - "notNull": true - }, - "content": { - "name": "content", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": false, - "default": "now()" - } - }, - "indexes": {}, - "foreignKeys": { - "replies_user_id_users_id_fk": { - "name": "replies_user_id_users_id_fk", - "tableFrom": "replies", - "tableTo": "users", - "columnsFrom": [ - "user_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "replies_post_id_posts_id_fk": { - "name": "replies_post_id_posts_id_fk", - "tableFrom": "replies", - "tableTo": "posts", - "columnsFrom": [ - "post_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {} - }, - "public.reposts": { - "name": "reposts", - "schema": "", - "columns": { - "user_id": { - "name": "user_id", - "type": "integer", - "primaryKey": false, - "notNull": true - }, - "post_id": { - "name": "post_id", - "type": "integer", - "primaryKey": false, - "notNull": true - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": false, - "default": "now()" - } - }, - "indexes": {}, - "foreignKeys": { - "reposts_user_id_users_id_fk": { - "name": "reposts_user_id_users_id_fk", - "tableFrom": "reposts", - "tableTo": "users", - "columnsFrom": [ - "user_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "reposts_post_id_posts_id_fk": { - "name": "reposts_post_id_posts_id_fk", - "tableFrom": "reposts", - "tableTo": "posts", - "columnsFrom": [ - "post_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "reposts_user_id_post_id_pk": { - "name": "reposts_user_id_post_id_pk", - "columns": [ - "user_id", - "post_id" - ] - } - }, - "uniqueConstraints": {} - }, - "public.users": { - "name": "users", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "serial", - "primaryKey": true, - "notNull": true - }, - "username": { - "name": "username", - "type": "varchar(50)", - "primaryKey": false, - "notNull": true - }, - "email": { - "name": "email", - "type": "varchar(100)", - "primaryKey": false, - "notNull": true - }, - "password_hash": { - "name": "password_hash", - "type": "varchar(255)", - "primaryKey": false, - "notNull": true - }, - "bio": { - "name": "bio", - "type": "text", - "primaryKey": false, - "notNull": false, - "default": "''" - }, - "avatar_url": { - "name": "avatar_url", - "type": "varchar(255)", - "primaryKey": false, - "notNull": false, - "default": "''" - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": false, - "default": "now()" - } - }, - "indexes": {}, - "foreignKeys": {}, - "compositePrimaryKeys": {}, - "uniqueConstraints": { - "users_username_unique": { - "name": "users_username_unique", - "nullsNotDistinct": false, - "columns": [ - "username" - ] - }, - "users_email_unique": { - "name": "users_email_unique", - "nullsNotDistinct": false, - "columns": [ - "email" - ] - } - } - } - }, - "enums": {}, - "schemas": {}, - "sequences": {}, - "_meta": { - "columns": {}, - "schemas": {}, - "tables": {} - } -} \ No newline at end of file diff --git a/examples/testflight/code/db/migrations/meta/_journal.json b/examples/testflight/code/db/migrations/meta/_journal.json deleted file mode 100644 index 782bed734..000000000 --- a/examples/testflight/code/db/migrations/meta/_journal.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "version": "7", - "dialect": "postgresql", - "entries": [ - { - "idx": 0, - "version": "7", - "when": 1725362020757, - "tag": "0000_tiny_joseph", - "breakpoints": true - } - ] -} \ No newline at end of file diff --git a/examples/testflight/code/db/run-migrations.ts b/examples/testflight/code/db/run-migrations.ts deleted file mode 100644 index dbd573385..000000000 --- a/examples/testflight/code/db/run-migrations.ts +++ /dev/null @@ -1,18 +0,0 @@ -#!/usr/bin/env node -import 'dotenv/config' -import { migrate } from 'drizzle-orm/postgres-js/migrator' - -if (!process.env.DATABASE_URL) { - console.error('DATABASE_URL is not set in the environment variables') - process.exit(1) -} -import { db, connection } from './connection' - -const run = async () => { - // This will run migrations on the database, skipping the ones already applied - await migrate(db, { migrationsFolder: './db/migrations' }) - // Don't forget to close the connection, otherwise the script will hang - await connection.end() -} - -run() diff --git a/examples/testflight/code/db/schema.ts b/examples/testflight/code/db/schema.ts deleted file mode 100644 index dd254b401..000000000 --- a/examples/testflight/code/db/schema.ts +++ /dev/null @@ -1,151 +0,0 @@ -import { integer, serial, varchar, text, timestamp, pgTable, primaryKey } from 'drizzle-orm/pg-core' -import { relations } from 'drizzle-orm' - -export const users = pgTable('users', { - id: serial('id').primaryKey(), - username: varchar('username', { length: 50 }).notNull().unique(), - email: varchar('email', { length: 100 }).notNull().unique(), - passwordHash: varchar('password_hash', { length: 255 }).notNull(), - bio: text('bio').default(''), - avatarUrl: varchar('avatar_url', { length: 255 }).default(''), - createdAt: timestamp('created_at').defaultNow(), -}) - -export const posts = pgTable('posts', { - id: serial('id').primaryKey(), - userId: integer('user_id') - .references(() => users.id, { onDelete: 'cascade' }) - .notNull(), - content: text('content').notNull(), - createdAt: timestamp('created_at').defaultNow(), -}) - -export const follows = pgTable('follows', { - followerId: integer('follower_id') - .references(() => users.id, { onDelete: 'cascade' }) - .notNull(), - followingId: integer('following_id') - .references(() => users.id, { onDelete: 'cascade' }) - .notNull(), - createdAt: timestamp('created_at').defaultNow(), -}) - -export const likes = pgTable( - 'likes', - { - userId: integer('user_id') - .references(() => users.id, { onDelete: 'cascade' }) - .notNull(), - postId: integer('post_id') - .references(() => posts.id, { onDelete: 'cascade' }) - .notNull(), - createdAt: timestamp('created_at').defaultNow(), - }, - (table) => { - return { - pk: primaryKey({ columns: [table.userId, table.postId] }), - } - } -) - -export const reposts = pgTable( - 'reposts', - { - userId: integer('user_id') - .references(() => users.id, { onDelete: 'cascade' }) - .notNull(), - postId: integer('post_id') - .references(() => posts.id, { onDelete: 'cascade' }) - .notNull(), - createdAt: timestamp('created_at').defaultNow(), - }, - (table) => { - return { - pk: primaryKey({ columns: [table.userId, table.postId] }), - } - } -) - -export const replies = pgTable('replies', { - id: serial('id').primaryKey(), - userId: integer('user_id') - .references(() => users.id, { onDelete: 'cascade' }) - .notNull(), - postId: integer('post_id') - .references(() => posts.id, { onDelete: 'cascade' }) - .notNull(), - content: text('content').notNull(), - createdAt: timestamp('created_at').defaultNow(), -}) - -export const userRelations = relations(users, ({ one, many }) => ({ - posts: many(posts), - followers: many(follows, { relationName: 'follower' }), - followings: many(follows, { relationName: 'following' }), - likes: many(likes), - reposts: many(reposts), - replies: many(replies), -})) - -export const postRelations = relations(posts, ({ one, many }) => ({ - user: one(users, { - relationName: 'user', - fields: [posts.userId], - references: [users.id], - }), - likes: many(likes), - reposts: many(reposts), - replies: many(replies), -})) - -export const followRelations = relations(follows, ({ one }) => ({ - follower: one(users, { - relationName: 'follower', - fields: [follows.followerId], - references: [users.id], - }), - following: one(users, { - relationName: 'following', - fields: [follows.followingId], - references: [users.id], - }), -})) - -export const likeRelations = relations(likes, ({ one }) => ({ - user: one(users, { - relationName: 'user', - fields: [likes.userId], - references: [users.id], - }), - post: one(posts, { - relationName: 'post', - fields: [likes.postId], - references: [posts.id], - }), -})) - -export const repostRelations = relations(reposts, ({ one }) => ({ - user: one(users, { - relationName: 'user', - fields: [reposts.userId], - references: [users.id], - }), - post: one(posts, { - relationName: 'post', - fields: [reposts.postId], - references: [posts.id], - }), -})) - -export const replyRelations = relations(replies, ({ one }) => ({ - user: one(users, { - relationName: 'user', - fields: [replies.userId], - references: [users.id], - }), - post: one(posts, { - relationName: 'post', - fields: [replies.postId], - references: [posts.id], - }), -})) diff --git a/examples/testflight/code/db/seed.ts b/examples/testflight/code/db/seed.ts deleted file mode 100644 index 7c0b2ce7c..000000000 --- a/examples/testflight/code/db/seed.ts +++ /dev/null @@ -1,444 +0,0 @@ -import { db } from './connection' -import { users, posts, follows, likes, reposts, replies } from './schema' -import { faker } from '@faker-js/faker' - -const USER_COUNT = 10 -const POST_COUNT_PER_USER = 10 -const REPLY_COUNT_PER_POST = 2.5 -const FOLLOW_COUNT_PER_USER = 7.5 -const LIKE_COUNT_PER_USER = 20 -const REPOST_COUNT_PER_USER = 4 - -const userNames = [ - 'SomeRandomDevWeb', - 'Floren Ryance', - 'PrimeRageN', - 'bramadov 22', - 'CodeWarrior', - 'RustEvangelist', - 'AdrenalineCoder', - 'JSFrameworkFanatic', - 'DebuggingDetective', - 'VimGuru', - 'DuckDebugger', - 'ChangeChampion', - // Additional names to reach 100 users - 'ByteMaster', - 'SyntaxSage', - 'DevNinja', - 'BugHunter', - 'PixelPioneer', - 'DataDiva', - 'CloudCrusader', - 'APIWizard', - 'GitGuru', - 'FrontEndPhenom', - 'BackEndBoss', - 'FullStackFanatic', - 'AIEnthusiast', - 'BlockchainBeliver', - 'CSSWizard', - 'DevOpsDestroyer', - 'DatabaseDiva', - 'SecuritySage', - 'UXUnicorn', - 'MobileMaestro', - 'CloudCommander', - 'MLMaverick', - 'IoTInnovator', - 'ScalabilityScientist', - 'AgileAdvocate', - 'CodeClinic', - 'BugBountyHunter', - 'PenTesterPro', - 'EthicalHacker', - 'DataScientist', - 'QuantumCoder', - 'RoboticsRenegade', - 'VRVirtuoso', - 'ARArchitect', - 'GameDevGuru', - 'CryptoCodeCracker', - 'JavaJedi', - 'PythonPioneer', - 'RubyRockstar', - 'GoGopher', - 'SwiftSavant', - 'KotlinKing', - 'TypeScriptTitan', - 'PHPPhenom', - 'CSharpChampion', - 'ScalaScientist', - 'RustRenegade', - 'ClojureCleric', - 'HaskellHero', - 'ElixirExpert', - 'DartDeveloper', - 'LuaLuminary', - 'JuliaJuggler', - 'ErlangEngineer', - 'FortranFanatic', - 'COBOLCoder', - 'AssemblyAce', - 'BrainfuckBoss', - 'SQLSorcerer', - 'NoSQLNinja', - 'GraphQLGuru', - 'RESTfulRanger', - 'WebSocketWizard', - 'OAuth2Oracle', - 'JWTJedi', - 'DockerDiva', - 'KubernetesKing', - 'TerraformTitan', - 'AnsibleAce', - 'JenkinsGenius', - 'GitLabGladiator', - 'CircleCISage', - 'TravisTrooper', - 'SonarQubeSorcerer', - 'SeleniumSensei', - 'CypressChampion', - 'JestJuggler', - 'MochaMatador', - 'KarmaKing', - 'WebpackWarrior', - 'GulpGladiator', - 'GruntGuru', - 'NPMNinja', - 'YarnYogi', - 'BabelBoss', - 'ESLintExpert', - 'PrettierPro', - 'StylelintStar', - 'SassySorcerer', - 'LessLegend', -] - -type Topic = { - subject: string - quirk: string -} - -const topics: Topic[] = [ - { - subject: 'Responsive design', - quirk: 'spending more time adjusting margins than coding actual features', - }, - { subject: 'AI-driven development', quirk: 'realizing the AI writes better comments than I do' }, - { - subject: 'Cross-browser compatibility', - quirk: 'feeling nostalgic for the days when we only had to support one browser', - }, - { subject: 'React', quirk: 'creating 47 components for a simple landing page' }, - { subject: 'Dark mode', quirk: 'accidentally designing for light mode at 3 AM' }, - { - subject: 'Progressive Web Apps', - quirk: "explaining to my mom that it's not a 'real' app, but also not just a website", - }, - { - subject: 'Cross-platform development', - quirk: 'celebrating when it works on two platforms out of five', - }, - { - subject: 'Serverless architecture', - quirk: 'missing the days when I could blame the server for everything', - }, - { - subject: 'Content personalization', - quirk: 'realizing the algorithm knows me better than I know myself', - }, - { - subject: 'Voice search optimization', - quirk: "talking to my code hoping it'll understand me better", - }, - { subject: 'JavaScript frameworks', quirk: 'learning a new one every time I start a project' }, - { subject: 'CSS-in-JS', quirk: 'forgetting where I put that one crucial style' }, - { subject: 'WebAssembly', quirk: 'pretending I understand how it works' }, - { - subject: 'Microservices', - quirk: 'drawing so many boxes and arrows that my architecture diagram looks like abstract art', - }, - { subject: 'GraphQL', quirk: 'over-fetching data out of habit anyway' }, - { - subject: 'Agile development', - quirk: "turning 'it's not a bug, it's a feature' into a lifestyle", - }, - { - subject: 'TypeScript', - quirk: 'feeling smug about catching a type error, then spending hours fixing it', - }, - { subject: 'Web3', quirk: 'nodding along in meetings while secretly Googling what it means' }, - { - subject: 'Low-code platforms', - quirk: 'spending more time customizing than I would have spent coding', - }, - { subject: 'Code reviews', quirk: 'leaving comments on my own PR because no one else will' }, -] - -const formats: string[] = [ - "Embracing {subject} means {quirk}. It's not much, but it's honest work. {hashtag}", - "They said {subject} would be fun. They didn't mention {quirk}. Still, I'm having a blast! {hashtag}", - 'My love letter to {subject}: Roses are red, violets are blue, {quirk}, and I still love you. {hashtag}', - 'Day 47 of {subject}: {quirk}. Send help... or coffee. {hashtag}', - 'Pro tip: Master {subject} by {quirk}. Works 60% of the time, every time. {hashtag}', - 'In my {subject} era: {quirk} and loving every minute of it. {hashtag}', - "Confession: I thought {subject} would cure my imposter syndrome. Now I'm just {quirk}. Progress? {hashtag}", - '{subject} has taught me that {quirk} is a valuable life skill. Thanks, I guess? {hashtag}', - 'My {subject} journey: 10% inspiration, 90% {quirk}. {hashtag}', - "Plot twist: {subject} isn't about coding, it's about {quirk}. Mind blown. {hashtag}", - 'Dear future self, remember when {subject} meant {quirk}? Good times. {hashtag}', - 'Breaking: Local developer finds joy in {subject}. Sources confirm {quirk} is involved. {hashtag}', - "To all my {subject} folks out there {quirk}, you're not alone. We're in this together! {hashtag}", - 'TIL that {subject} is less about syntax and more about {quirk}. The more you know! {hashtag}', - "Me: I'm a {subject} expert. Also me: {quirk}. Fake it till you make it, right? {hashtag}", -] - -const hashtags: string[] = [ - '#WebDevLife', - '#CodeHumor', - '#DevProblems', - '#ProgrammerHumor', - '#TechLife', - '#DeveloperProblems', - '#CodeNewbie', - '#SoftwareEngineering', - '#WebDevelopment', - '#DevJokes', -] - -const replyTemplates = [ - 'Have you tried turning it off and on again? #TechSupport101', - "Ah, I see you've played {subject}y-spoon before!", - "This is why we can't have nice things in {subject}.", - 'I feel personally attacked by this relatable {subject} content.', - '{quirk}? Story of my life! #DeveloperProblems', - "I'm in this tweet and I don't like it. #TooReal", - 'Plot twist: {quirk} is actually a feature, not a bug!', - 'Wait, you guys are getting {subject} to work?', - 'Me, reading about {subject}: I know some of these words!', - '*Laughs nervously in {subject}*', - 'Bold of you to assume I understand {subject} at all.', - '{quirk} is my middle name! ...Unfortunately.', - 'Ah yes, {subject}, my old nemesis, we meet again.', - 'This tweet is brought to you by {quirk} gang.', - "I didn't choose the {subject} life, the {subject} life chose me.", -] - -function generatePostContent(topic: Topic): string { - const format = formats[Math.floor(Math.random() * formats.length)] - const hashtag = hashtags[Math.floor(Math.random() * hashtags.length)] - - return format - .replace('{subject}', topic.subject) - .replace('{quirk}', topic.quirk) - .replace('{hashtag}', hashtag) -} - -function generateReply(topic: Topic): string { - const template = replyTemplates[Math.floor(Math.random() * replyTemplates.length)] - - return template.replace('{subject}', topic.subject).replace('{quirk}', topic.quirk) -} - -const seed = async () => { - try { - console.info('Starting the seeding process...') - - // Clear existing data - console.info('Clearing existing data...') - await db.transaction(async (trx) => { - await trx.delete(replies) - await trx.delete(reposts) - await trx.delete(likes) - await trx.delete(follows) - await trx.delete(posts) - await trx.delete(users) - }) - console.info('Existing data cleared.') - - // Insert users - const randomizedUserCount = Math.round(USER_COUNT * (0.8 + Math.random() * 0.4)) - console.info(`Generating ${randomizedUserCount} users with random names...`) - const userIds = await insertUsers(randomizedUserCount) - console.info(`${userIds.length} users generated.`) - - // Insert posts - console.info('Generating posts...') - await generatePosts(userIds) - console.info('Posts generation completed.') - - // Fetch all post IDs - const allPostIds = await db.select({ id: posts.id }).from(posts) - console.info(`${allPostIds.length} posts fetched.`) - - // Insert replies - console.info('Generating replies...') - await generateReplies(userIds, allPostIds) - console.info('Replies generation completed.') - - // Insert follows - console.info('Generating follows...') - await generateFollows(userIds) - console.info('Follows generation completed.') - - // Insert likes - console.info('Generating likes...') - await generateLikes(userIds, allPostIds) - console.info('Likes generation completed.') - - // Insert reposts - console.info('Generating reposts...') - await generateReposts(userIds, allPostIds) - console.info('Reposts generation completed.') - - console.info('Seeding completed successfully.') - process.exit(0) - } catch (error) { - console.error('Error seeding data:', error) - process.exit(1) - } -} - -async function insertUsers(count: number) { - const selectedUserNames = faker.helpers.arrayElements(userNames, count) - console.time('insertUsers') - const userIds: { id: number }[] = await db.transaction(async (trx) => { - return trx - .insert(users) - .values( - selectedUserNames.map((name) => ({ - username: name, - email: `${name.toLowerCase().replace(/\s+/g, '.')}@example.com`, - passwordHash: faker.internet.password(), - avatarUrl: `https://i.pravatar.cc/150?u=${name}`, - })) - ) - .returning({ id: users.id }) - }) - console.timeEnd('insertUsers') - return userIds -} - -async function generatePosts(userIds: { id: number }[]) { - console.time('generatePosts') - for (const user of userIds) { - const randomizedPostCount = Math.round(POST_COUNT_PER_USER * (0.8 + Math.random() * 0.4)) - for (let i = 0; i < randomizedPostCount; i++) { - try { - const topic = topics[Math.floor(Math.random() * topics.length)] - const postContent = generatePostContent(topic) - - await db.insert(posts).values({ - userId: user.id, - content: postContent, - createdAt: faker.date.recent({ days: 1 }), - }) - } catch (error) { - console.error(`Failed to insert post for user ${user.id}:`, error) - } - } - } - console.timeEnd('generatePosts') -} - -async function generateReplies(userIds: { id: number }[], allPostIds: { id: number }[]) { - console.time('generateReplies') - for (const post of allPostIds) { - const randomizedReplyCount = Math.round(REPLY_COUNT_PER_POST * (0.8 + Math.random() * 0.4)) - for (let j = 0; j < randomizedReplyCount; j++) { - try { - const replyingUser = userIds[Math.floor(Math.random() * userIds.length)] - const topic = topics[Math.floor(Math.random() * topics.length)] - await db.insert(replies).values({ - userId: replyingUser.id, - postId: post.id, - content: generateReply(topic), - createdAt: faker.date.recent({ days: 1 }), - }) - } catch (error) { - console.error(`Failed to insert reply for post ${post.id}:`, error) - } - } - } - console.timeEnd('generateReplies') -} - -async function generateFollows(userIds: { id: number }[]) { - console.time('generateFollows') - for (const follower of userIds) { - const randomizedFollowCount = Math.round(FOLLOW_COUNT_PER_USER * (0.8 + Math.random() * 0.4)) - const followingIds = faker.helpers.arrayElements( - userIds.filter((user) => user.id !== follower.id), - Math.min(randomizedFollowCount, userIds.length - 1) - ) - for (const following of followingIds) { - try { - await db.insert(follows).values({ - followerId: follower.id, - followingId: following.id, - createdAt: faker.date.recent({ days: 1 }), - }) - } catch (error) { - console.error( - `Failed to insert follow relationship (${follower.id} -> ${following.id}):`, - error - ) - } - } - } - console.timeEnd('generateFollows') -} - -async function generateLikes(userIds: { id: number }[], allPostIds: { id: number }[]) { - console.time('generateLikes') - for (const user of userIds) { - const postIds = faker.helpers.arrayElements( - allPostIds, - Math.min(LIKE_COUNT_PER_USER, allPostIds.length) - ) - for (const post of postIds) { - try { - await db.insert(likes).values({ - userId: user.id, - postId: post.id, - createdAt: faker.date.recent({ days: 1 }), - }) - } catch (error) { - console.error(`Failed to insert like (user ${user.id}, post ${post.id}):`, error) - } - } - } - console.timeEnd('generateLikes') -} - -async function generateReposts(userIds: { id: number }[], allPostIds: { id: number }[]) { - console.time('generateReposts') - const allPostsWithUsers: { - id: number - userId: number - }[] = await db.select({ id: posts.id, userId: posts.userId }).from(posts) - for (const user of userIds) { - // This code selects random posts for a user to repost - // It filters out the user's own posts to avoid self-reposts - // The number of reposts is limited by REPOST_COUNT_PER_USER or the total available posts - const postIds = faker.helpers.arrayElements( - allPostsWithUsers.filter((post) => post.userId !== user.id), - Math.min(REPOST_COUNT_PER_USER, allPostsWithUsers.length) - ) - for (const post of postIds) { - try { - await db.insert(reposts).values({ - userId: user.id, - postId: post.id, - createdAt: faker.date.recent({ days: 1 }), - }) - } catch (error) { - console.error(`Failed to insert repost (user ${user.id}, post ${post.id}):`, error) - } - } - } - console.timeEnd('generateReposts') -} - -seed() From b5fb1bfc9fb0df54b82d53435c1647b759eacfbc Mon Sep 17 00:00:00 2001 From: natew Date: Mon, 28 Oct 2024 12:26:35 +0900 Subject: [PATCH 05/13] feat(one): add href() utility function to help creating typed Href strings --- .../data/docs/helpers-utility-functions.mdx | 10 ++++ .../one-recommended/app/notifications+spa.tsx | 8 ++-- packages/one/src/href.ts | 12 +++++ packages/one/src/index.ts | 47 +++++++++---------- packages/one/types/href.d.ts | 7 +++ packages/one/types/index.d.ts | 27 ++++++----- 6 files changed, 69 insertions(+), 42 deletions(-) create mode 100644 packages/one/src/href.ts create mode 100644 packages/one/types/href.d.ts diff --git a/apps/onestack.dev/data/docs/helpers-utility-functions.mdx b/apps/onestack.dev/data/docs/helpers-utility-functions.mdx index 94ba43764..268f2276f 100644 --- a/apps/onestack.dev/data/docs/helpers-utility-functions.mdx +++ b/apps/onestack.dev/data/docs/helpers-utility-functions.mdx @@ -29,3 +29,13 @@ For example, in dev-mode by default this would be a string of `http://127.0.0.1: ### isResponse One uses `Request`/`Response` type objects for API routes, but for some environments doing an `instanceof Response` can fail, `isResponse` takes any value and returns true if it is a Response-like object. Useful for API utility functions. + +### href + +A simple function allows for creating typed route strings. It's a type-level only check, at runtime it only validates that it is a string. + +```tsx +import { href } from 'one' + +const postPageLink = href(`/post/hello-world`) // will type error if invalid Href +``` diff --git a/examples/one-recommended/app/notifications+spa.tsx b/examples/one-recommended/app/notifications+spa.tsx index f471a1fa7..834d77c72 100644 --- a/examples/one-recommended/app/notifications+spa.tsx +++ b/examples/one-recommended/app/notifications+spa.tsx @@ -1,5 +1,5 @@ import { desc, eq, sql } from 'drizzle-orm' -import { type Href, type LoaderProps, SafeAreaView, getURL, useLoader } from 'one' +import { type Href, type LoaderProps, SafeAreaView, getURL, href, useLoader } from 'one' import { ScrollView } from 'react-native' import { isWeb } from 'tamagui' import { db } from '~/code/db/connection' @@ -91,13 +91,12 @@ export async function loader({ path }: LoaderProps) { action: notification.actionType as NotificationType, fromUser: { username: notification.username, - // TODO: Href helper function - userLink: `/profile/${notification.userId}` as Href, + userLink: '/TODO' as Href, avatar: notification.avatar, }, post: notification.postId ? { - postLink: `/post/${notification.postId}` as Href, + postLink: href(`/post/${notification.postId || 0}`), content: notification.postContent, } : null, @@ -119,6 +118,7 @@ export async function loader({ path }: LoaderProps) { export default function NotificationsPage() { const { notifications } = useLoader(loader) const feed = notifications.map((item, i) => { + item.post?.postLink return }) diff --git a/packages/one/src/href.ts b/packages/one/src/href.ts new file mode 100644 index 000000000..93b40d4bf --- /dev/null +++ b/packages/one/src/href.ts @@ -0,0 +1,12 @@ +import type { OneRouter } from './interfaces/router' + +/** + * Type-level utility function to help pass valid Href typed strings. + * Does not actually validate at runtime, though we could add this later. + */ +export function href(a: A): A { + if (!a || typeof a !== 'string') { + throw new Error(`Invalid href`) + } + return a +} diff --git a/packages/one/src/index.ts b/packages/one/src/index.ts index c7f1f8796..f49f8ed4b 100644 --- a/packages/one/src/index.ts +++ b/packages/one/src/index.ts @@ -6,34 +6,34 @@ export type LinkProps = OneRouter.LinkProps< export type { Endpoint, LoaderProps } from './types' -export * from '@vxrn/universal-color-scheme' +// base +export { router } from './imperative-api' +export { createRoute, route } from './createRoute' +export { onClientLoaderResolve } from './clientLoaderResolver' -export { Root } from './Root' +// internals +export { createApp } from './createApp' export { render } from './render' +export { Root } from './Root' +export * as routerStore from './router/router' +// components export { Stack } from './layouts/Stack' export { Tabs } from './layouts/Tabs' - // TODO breaking due to react-native-gesture-handler // export { Drawer } from './layouts/Drawer' - +// export { Unmatched } from './fallbackViews/Unmatched' export { SafeAreaView } from 'react-native-safe-area-context' export { Navigator, Slot } from './views/Navigator' export { ErrorBoundary } from './views/ErrorBoundary' -// export { Unmatched } from './fallbackViews/Unmatched' export { ScrollRestoration } from './views/ScrollRestoration' export { LoadProgressBar } from './views/LoadProgressBar' +export { Link } from './link/Link' +export { Redirect } from './link/Redirect' +export { Head } from './head' -export { createApp } from './createApp' -export { createRoute, route } from './createRoute' -export { onClientLoaderResolve } from './clientLoaderResolver' - -export { isResponse } from './utils/isResponse' -export { getURL } from './getURL' -export { redirect } from './utils/redirect' - +// hooks export { useLinkTo } from './link/useLinkTo' - export { useRouter, useUnstableGlobalHref, @@ -44,26 +44,23 @@ export { useSegments, useRootNavigationState, } from './hooks' - // for easier expo-router migration export { useLocalSearchParams, useGlobalSearchParams, } from './hooks' -export * as routerStore from './router/router' - -export { router } from './imperative-api' - -export { Link } from './link/Link' -export { Redirect } from './link/Redirect' - -export { Head } from './head' - +// utilities export { withLayoutContext } from './layouts/withLayoutContext' +export { isResponse } from './utils/isResponse' +export { getURL } from './getURL' +export { redirect } from './utils/redirect' +export { href } from './href' + +// re-export +export * from '@vxrn/universal-color-scheme' // React Navigation export { useFocusEffect } from './useFocusEffect' export { useNavigation } from './useNavigation' - export { useLoader } from './useLoader' diff --git a/packages/one/types/href.d.ts b/packages/one/types/href.d.ts new file mode 100644 index 000000000..97308082e --- /dev/null +++ b/packages/one/types/href.d.ts @@ -0,0 +1,7 @@ +import type { OneRouter } from './interfaces/router'; +/** + * Type-level utility function to help pass valid Href typed strings. + * Does not actually validate at runtime, though we could add this later. + */ +export declare function href(a: A): A; +//# sourceMappingURL=href.d.ts.map \ No newline at end of file diff --git a/packages/one/types/index.d.ts b/packages/one/types/index.d.ts index c42c12d99..c0b8dbfb3 100644 --- a/packages/one/types/index.d.ts +++ b/packages/one/types/index.d.ts @@ -3,9 +3,13 @@ import type { OneRouter } from './interfaces/router'; export type Href = OneRouter.Href; export type LinkProps = OneRouter.LinkProps; export type { Endpoint, LoaderProps } from './types'; -export * from '@vxrn/universal-color-scheme'; -export { Root } from './Root'; +export { router } from './imperative-api'; +export { createRoute, route } from './createRoute'; +export { onClientLoaderResolve } from './clientLoaderResolver'; +export { createApp } from './createApp'; export { render } from './render'; +export { Root } from './Root'; +export * as routerStore from './router/router'; export { Stack } from './layouts/Stack'; export { Tabs } from './layouts/Tabs'; export { SafeAreaView } from 'react-native-safe-area-context'; @@ -13,21 +17,18 @@ export { Navigator, Slot } from './views/Navigator'; export { ErrorBoundary } from './views/ErrorBoundary'; export { ScrollRestoration } from './views/ScrollRestoration'; export { LoadProgressBar } from './views/LoadProgressBar'; -export { createApp } from './createApp'; -export { createRoute, route } from './createRoute'; -export { onClientLoaderResolve } from './clientLoaderResolver'; -export { isResponse } from './utils/isResponse'; -export { getURL } from './getURL'; -export { redirect } from './utils/redirect'; -export { useLinkTo } from './link/useLinkTo'; -export { useRouter, useUnstableGlobalHref, usePathname, useNavigationContainerRef, useParams, useActiveParams, useSegments, useRootNavigationState, } from './hooks'; -export { useLocalSearchParams, useGlobalSearchParams, } from './hooks'; -export * as routerStore from './router/router'; -export { router } from './imperative-api'; export { Link } from './link/Link'; export { Redirect } from './link/Redirect'; export { Head } from './head'; +export { useLinkTo } from './link/useLinkTo'; +export { useRouter, useUnstableGlobalHref, usePathname, useNavigationContainerRef, useParams, useActiveParams, useSegments, useRootNavigationState, } from './hooks'; +export { useLocalSearchParams, useGlobalSearchParams, } from './hooks'; export { withLayoutContext } from './layouts/withLayoutContext'; +export { isResponse } from './utils/isResponse'; +export { getURL } from './getURL'; +export { redirect } from './utils/redirect'; +export { href } from './href'; +export * from '@vxrn/universal-color-scheme'; export { useFocusEffect } from './useFocusEffect'; export { useNavigation } from './useNavigation'; export { useLoader } from './useLoader'; From 6cfc71f25b00f3b23a574d1ce1015ae29c0b575b Mon Sep 17 00:00:00 2001 From: natew Date: Mon, 28 Oct 2024 12:28:14 +0900 Subject: [PATCH 06/13] chore(one): remove hardcoded register app name from entry --- examples/expo-blank/README.md | 2 +- packages/one/src/createApp.native.tsx | 3 --- 2 files changed, 1 insertion(+), 4 deletions(-) diff --git a/examples/expo-blank/README.md b/examples/expo-blank/README.md index 2f11fa6d0..cc9e5f165 100644 --- a/examples/expo-blank/README.md +++ b/examples/expo-blank/README.md @@ -7,7 +7,7 @@ Originally from https://github.com/expo/expo/tree/main/templates/expo-template-b * Adds the `"vxrn": "workspace:^"` dependency in `package.json`, and changes relative NPM scripts to use `vxrn` instead of `expo`. * Removes `babel.config.js` which originally adds the `babel-preset-expo` preset, since vxrn has pre-configured Babel configurations that might conflict with `babel-preset-expo`. * Renames `App.js` to `App.jsx`. -* Adds `src/entry-native.tsx`. (TODO: this may be temporary until we support specifying entry points via something like `vxrn.config.js`.) +* Adds `src/entry-native.tsx`. * `App.jsx` is moved into `src/` to avoid some issues (TODO: may need to look into & fix this in vxrn). * `/ios` and `/android` ignored in `.gitignore`. * `"plugins": ["vxrn/expo-plugin"]` added in `app.json`. diff --git a/packages/one/src/createApp.native.tsx b/packages/one/src/createApp.native.tsx index 8cae5b595..9b5783c9f 100644 --- a/packages/one/src/createApp.native.tsx +++ b/packages/one/src/createApp.native.tsx @@ -12,9 +12,6 @@ export function createApp(options: CreateAppProps): void { AppRegistry.registerComponent('main', () => App) - // TODO remove once we get a nice setup in tamagui repo for building native app and loading it - AppRegistry.registerComponent('tamaguikitchensink', () => App) - if (process.env.ONE_APP_NAME) { AppRegistry.registerComponent(process.env.ONE_APP_NAME, () => App) } From 07345c6e405bc7d01d00943b0da2dc912b26debf Mon Sep 17 00:00:00 2001 From: natew Date: Mon, 28 Oct 2024 12:30:07 +0900 Subject: [PATCH 07/13] chore(one): return Partial params object for useParams to match runtime --- packages/one/src/hooks.tsx | 3 +-- packages/one/types/createRoute.d.ts | 4 ++-- packages/one/types/hooks.d.ts | 2 +- 3 files changed, 4 insertions(+), 5 deletions(-) diff --git a/packages/one/src/hooks.tsx b/packages/one/src/hooks.tsx index e0dd0e35d..d615e9222 100644 --- a/packages/one/src/hooks.tsx +++ b/packages/one/src/hooks.tsx @@ -114,8 +114,7 @@ export const useGlobalSearchParams = useActiveParams * To observe updates even when the invoking route is not focused, use `useActiveParams()`. */ -// TODO @nate: i removed Partial for better types for demo -export function useParams(): TParams { +export function useParams(): Partial { const context = React.useContext(NavigationRouteContext) const params = context?.params ?? {} diff --git a/packages/one/types/createRoute.d.ts b/packages/one/types/createRoute.d.ts index a78cf6b9a..92701ea0a 100644 --- a/packages/one/types/createRoute.d.ts +++ b/packages/one/types/createRoute.d.ts @@ -1,6 +1,6 @@ import type { OneRouter } from './interfaces/router'; export declare function createRoute(): { - useParams: () => OneRouter.InputRouteParams; + useParams: () => Partial>; useActiveParams: () => Partial>; createLoader: (a: (props: { params: OneRouter.InputRouteParams; @@ -9,7 +9,7 @@ export declare function createRoute(): { }) => any; }; declare const postIdRoute: { - useParams: () => OneRouter.InputRouteParams<"/feed/[id]">; + useParams: () => Partial>; useActiveParams: () => Partial>; createLoader: (a: (props: { params: OneRouter.InputRouteParams<"/feed/[id]">; diff --git a/packages/one/types/hooks.d.ts b/packages/one/types/hooks.d.ts index af33e8344..14c34b364 100644 --- a/packages/one/types/hooks.d.ts +++ b/packages/one/types/hooks.d.ts @@ -57,6 +57,6 @@ export declare const useGlobalSearchParams: typeof useActiveParams; * * To observe updates even when the invoking route is not focused, use `useActiveParams()`. */ -export declare function useParams(): TParams; +export declare function useParams(): Partial; export {}; //# sourceMappingURL=hooks.d.ts.map \ No newline at end of file From 2175feac81e2d406fecab6b2192ba11033c7eb7e Mon Sep 17 00:00:00 2001 From: natew Date: Mon, 28 Oct 2024 12:45:22 +0900 Subject: [PATCH 08/13] chore(one): fix internal type --- packages/one/src/imperative-api.ts | 6 +----- packages/one/src/interfaces/router.ts | 7 ++++--- packages/one/src/router/router.ts | 2 +- packages/one/types/interfaces/router.d.ts | 4 +++- packages/one/types/router/router.d.ts | 2 +- 5 files changed, 10 insertions(+), 11 deletions(-) diff --git a/packages/one/src/imperative-api.ts b/packages/one/src/imperative-api.ts index 15ab86ce8..7613bf9e4 100644 --- a/packages/one/src/imperative-api.ts +++ b/packages/one/src/imperative-api.ts @@ -10,11 +10,7 @@ export const router: OneRouter.Router = { replace: store.replace, back: store.goBack, canGoBack: store.canGoBack, - setParams: (params) => - store.setParams( - // TODO - params as any - ), + setParams: (params) => store.setParams(params), subscribe: store.subscribeToRootState, onLoadState: store.subscribeToLoadingState, } diff --git a/packages/one/src/interfaces/router.ts b/packages/one/src/interfaces/router.ts index 6ac9bf6bf..fe7107ea7 100644 --- a/packages/one/src/interfaces/router.ts +++ b/packages/one/src/interfaces/router.ts @@ -218,6 +218,9 @@ export namespace OneRouter { * One Exports * ***********************/ + export type InputRouteParamsBlank = Record + export type InpurRouteParamsGeneric = InputRouteParamsBlank | InputRouteParams + export type Router = { /** Go back in the history. */ back: () => void @@ -236,9 +239,7 @@ export namespace OneRouter { /** If there's history that supports invoking the `dismiss` and `dismissAll` function. */ canDismiss: () => boolean /** Update the current route query params. */ - setParams: ( - params?: T extends '' ? Record : InputRouteParams - ) => void + setParams: (params?: T extends '' ? InputRouteParamsBlank : InputRouteParams) => void /** Subscribe to state updates from the router */ subscribe: (listener: RootStateListener) => () => void /** Subscribe to loading state updates */ diff --git a/packages/one/src/router/router.ts b/packages/one/src/router/router.ts index 6e4771a7a..50664e63a 100644 --- a/packages/one/src/router/router.ts +++ b/packages/one/src/router/router.ts @@ -164,7 +164,7 @@ export function replace(url: OneRouter.Href, options?: OneRouter.LinkToOptions) return linkTo(resolveHref(url), 'REPLACE', options) } -export function setParams(params: Record = {}) { +export function setParams(params: OneRouter.InpurRouteParamsGeneric = {}) { assertIsReady(navigationRef) return navigationRef?.current?.setParams( // @ts-expect-error diff --git a/packages/one/types/interfaces/router.d.ts b/packages/one/types/interfaces/router.d.ts index ac1cc8dfd..a30ca1a66 100644 --- a/packages/one/types/interfaces/router.d.ts +++ b/packages/one/types/interfaces/router.d.ts @@ -129,6 +129,8 @@ export declare namespace OneRouter { /*********************** * One Exports * ***********************/ + export type InputRouteParamsBlank = Record; + export type InpurRouteParamsGeneric = InputRouteParamsBlank | InputRouteParams; export type Router = { /** Go back in the history. */ back: () => void; @@ -147,7 +149,7 @@ export declare namespace OneRouter { /** If there's history that supports invoking the `dismiss` and `dismissAll` function. */ canDismiss: () => boolean; /** Update the current route query params. */ - setParams: (params?: T extends '' ? Record : InputRouteParams) => void; + setParams: (params?: T extends '' ? InputRouteParamsBlank : InputRouteParams) => void; /** Subscribe to state updates from the router */ subscribe: (listener: RootStateListener) => () => void; /** Subscribe to loading state updates */ diff --git a/packages/one/types/router/router.d.ts b/packages/one/types/router/router.d.ts index 2f59bb4b7..59be33565 100644 --- a/packages/one/types/router/router.d.ts +++ b/packages/one/types/router/router.d.ts @@ -18,7 +18,7 @@ export declare function navigate(url: OneRouter.Href, options?: OneRouter.LinkTo export declare function push(url: OneRouter.Href, options?: OneRouter.LinkToOptions): Promise; export declare function dismiss(count?: number): void; export declare function replace(url: OneRouter.Href, options?: OneRouter.LinkToOptions): Promise; -export declare function setParams(params?: Record): void | undefined; +export declare function setParams(params?: OneRouter.InpurRouteParamsGeneric): void | undefined; export declare function dismissAll(): void; export declare function goBack(): void; export declare function canGoBack(): boolean; From e5ce2d30c60a46e14622d0401c6e806098d00cf2 Mon Sep 17 00:00:00 2001 From: natew Date: Mon, 28 Oct 2024 12:47:38 +0900 Subject: [PATCH 09/13] chore: remove old todos and remove bindKeypressInput --- .../one/src/vite/clientTreeShakePlugin.ts | 1 - packages/one/src/vite/vitePluginSsrCss.ts | 1 - packages/vxrn/react-native-template.js | 4 -- packages/vxrn/src/exports/dev.ts | 4 -- packages/vxrn/src/utils/bindKeypressInput.ts | 46 ------------------- .../types/plugins/clientInjectPlugin.d.ts | 2 +- .../types/utils/getReactNativeConfig.d.ts | 2 +- 7 files changed, 2 insertions(+), 58 deletions(-) delete mode 100644 packages/vxrn/src/utils/bindKeypressInput.ts diff --git a/packages/one/src/vite/clientTreeShakePlugin.ts b/packages/one/src/vite/clientTreeShakePlugin.ts index 1d7d03c2a..a70cf9ec9 100644 --- a/packages/one/src/vite/clientTreeShakePlugin.ts +++ b/packages/one/src/vite/clientTreeShakePlugin.ts @@ -79,7 +79,6 @@ export async function transformTreeShakeClient(code: string, id: string) { const codeOut = out.code + '\n\n' + - // TODO ideally put it back in same place as it was removedFunctions .map((key) => { if (key === 'loader') { diff --git a/packages/one/src/vite/vitePluginSsrCss.ts b/packages/one/src/vite/vitePluginSsrCss.ts index 60130b0a7..2b1c650d7 100644 --- a/packages/one/src/vite/vitePluginSsrCss.ts +++ b/packages/one/src/vite/vitePluginSsrCss.ts @@ -8,7 +8,6 @@ export const VIRTUAL_ENTRY = `virtual:ssr-css.css` export function vitePluginSsrCss(pluginOpts: { entries: string[] }): Plugin { let server: ViteDevServer - // TODO: base const virtualHref = '/@id/__x00__' + VIRTUAL_ENTRY return { diff --git a/packages/vxrn/react-native-template.js b/packages/vxrn/react-native-template.js index 1812171e5..406f3a82f 100644 --- a/packages/vxrn/react-native-template.js +++ b/packages/vxrn/react-native-template.js @@ -17,10 +17,6 @@ global['___vxrnAbsoluteToRelative___'] = {} // to avoid it looking like browser... delete globalThis['window'] -// TODO fixing vite bringing along some preload-helper.js and this: -// var e = new Event("vite:preloadError", { -// cancelable: true -// }); global['Event'] = global['Event'] || function () { diff --git a/packages/vxrn/src/exports/dev.ts b/packages/vxrn/src/exports/dev.ts index 31cd9bde0..e38efd748 100644 --- a/packages/vxrn/src/exports/dev.ts +++ b/packages/vxrn/src/exports/dev.ts @@ -6,7 +6,6 @@ import { createServer } from 'vite' import { WebSocket } from 'ws' import type { VXRNOptions } from '../types' import { startUserInterface } from '../user-interface/index' -import { bindKeypressInput } from '../utils/bindKeypressInput' import { addConnectedNativeClient, removeConnectedNativeClient, @@ -40,9 +39,6 @@ export const dev = async (optionsIn: DevOptions) => { await clean(optionsIn) } - // TODO move somewhere - bindKeypressInput() - applyBuiltInPatches(options).catch((err) => { console.error(`\n 🥺 error applying built-in patches`, err) }) diff --git a/packages/vxrn/src/utils/bindKeypressInput.ts b/packages/vxrn/src/utils/bindKeypressInput.ts deleted file mode 100644 index 1e7e18223..000000000 --- a/packages/vxrn/src/utils/bindKeypressInput.ts +++ /dev/null @@ -1,46 +0,0 @@ -import readline from 'node:readline' - -export function bindKeypressInput() { - if (!process.stdin.setRawMode) { - console.warn({ - msg: 'Interactive mode is not supported in this environment', - }) - return - } - - readline.emitKeypressEvents(process.stdin) - process.stdin.setRawMode(true) - - process.stdin.on('keypress', (_key, data) => { - const { ctrl, name } = data - if (ctrl === true) { - switch (name) { - // biome-ignore lint/suspicious/noFallthroughSwitchClause: - case 'c': - process.exit() - case 'z': - process.emit('SIGTSTP', 'SIGTSTP') - break - } - } else { - switch (name) { - case 'r': - // ctx.broadcastToMessageClients({ method: 'reload' }) - // ctx.log.info({ - // msg: 'Reloading app', - // }) - break - case 'd': - // ctx.broadcastToMessageClients({ method: 'devMenu' }) - // ctx.log.info({ - // msg: 'Opening developer menu', - // }) - break - case 'c': - process.stdout.write('\u001b[2J\u001b[0;0H') - // TODO: after logging we should print information about port and host - break - } - } - }) -} diff --git a/packages/vxrn/types/plugins/clientInjectPlugin.d.ts b/packages/vxrn/types/plugins/clientInjectPlugin.d.ts index c1a4b04e3..146679d09 100644 --- a/packages/vxrn/types/plugins/clientInjectPlugin.d.ts +++ b/packages/vxrn/types/plugins/clientInjectPlugin.d.ts @@ -1,7 +1,7 @@ import type { Plugin, UserConfig } from 'vite'; export declare function getServerConfigPlugin(): { name: string; - configResolved(this: void, conf: Readonly & { + configResolved(this: void, conf: Readonly & { configFile: string | undefined; configFileDependencies: string[]; inlineConfig: import("vite").InlineConfig; diff --git a/packages/vxrn/types/utils/getReactNativeConfig.d.ts b/packages/vxrn/types/utils/getReactNativeConfig.d.ts index c612bb296..48aefbddb 100644 --- a/packages/vxrn/types/utils/getReactNativeConfig.d.ts +++ b/packages/vxrn/types/utils/getReactNativeConfig.d.ts @@ -44,7 +44,7 @@ export declare function getReactNativeConfig(options: VXRNOptionsFilled, interna }; }; }>; -export declare function getReactNativeResolvedConfig(): Readonly & { +export declare function getReactNativeResolvedConfig(): Readonly & { configFile: string | undefined; configFileDependencies: string[]; inlineConfig: InlineConfig; From db84d971a529dff0048ee868188995193dc4afd9 Mon Sep 17 00:00:00 2001 From: natew Date: Tue, 29 Oct 2024 09:23:30 +0800 Subject: [PATCH 10/13] feat(debug): add debug package for easier debugging --- packages/debug/LICENSE | 21 ++++++++++ packages/debug/biome.json | 1 + packages/debug/package.json | 40 +++++++++++++++++++ .../createDebugger.ts => debug/src/index.tsx} | 20 +++++++--- packages/debug/tsconfig.json | 7 ++++ packages/debug/types/index.d.ts | 17 ++++++++ packages/vxrn/package.json | 2 +- .../plugins/autoPreBundleDepsForSsrPlugin.ts | 8 ++-- packages/vxrn/types/utils/createDebugger.d.ts | 11 +++-- yarn.lock | 13 +++++- 10 files changed, 124 insertions(+), 16 deletions(-) create mode 100644 packages/debug/LICENSE create mode 120000 packages/debug/biome.json create mode 100644 packages/debug/package.json rename packages/{vxrn/src/utils/createDebugger.ts => debug/src/index.tsx} (68%) create mode 100644 packages/debug/tsconfig.json create mode 100644 packages/debug/types/index.d.ts diff --git a/packages/debug/LICENSE b/packages/debug/LICENSE new file mode 100644 index 000000000..e946c1ec5 --- /dev/null +++ b/packages/debug/LICENSE @@ -0,0 +1,21 @@ +MIT License + + Copyright (c) 2020 Nate Wienert + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all + copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + SOFTWARE. diff --git a/packages/debug/biome.json b/packages/debug/biome.json new file mode 120000 index 000000000..fbaf105a9 --- /dev/null +++ b/packages/debug/biome.json @@ -0,0 +1 @@ +../../biome.json \ No newline at end of file diff --git a/packages/debug/package.json b/packages/debug/package.json new file mode 100644 index 000000000..878a6c4a3 --- /dev/null +++ b/packages/debug/package.json @@ -0,0 +1,40 @@ +{ + "name": "@vxrn/debug", + "version": "1.1.325", + "sideEffects": false, + "source": "src/index.ts", + "type": "module", + "types": "./types/index.d.ts", + "main": "dist/cjs", + "module": "dist/esm", + "exports": { + "./package.json": "./package.json", + ".": { + "types": "./types/index.d.ts", + "import": "./dist/esm/index.mjs", + "require": "./dist/cjs/index.js" + } + }, + "files": [ + "src", + "types", + "dist" + ], + "scripts": { + "build": "tamagui-build", + "watch": "tamagui-build --watch", + "lint": "npx biome check src", + "lint:fix": "npx biome check --apply-unsafe src", + "clean": "tamagui-build clean", + "clean:build": "tamagui-build clean:build" + }, + "dependencies": { + "@vxrn/debug": "1.1.325" + }, + "devDependencies": { + "@tamagui/build": "^1.116.7" + }, + "publishConfig": { + "access": "public" + } +} diff --git a/packages/vxrn/src/utils/createDebugger.ts b/packages/debug/src/index.tsx similarity index 68% rename from packages/vxrn/src/utils/createDebugger.ts rename to packages/debug/src/index.tsx index e9d9ba650..04e70fc51 100644 --- a/packages/vxrn/src/utils/createDebugger.ts +++ b/packages/debug/src/index.tsx @@ -1,11 +1,11 @@ import debug from 'debug' +type Debugger = debug.Debugger['log'] & { namespace: string } + interface DebuggerOptions { onlyWhenFocused?: boolean | string } -export type VxrnDebugScope = `vxrn:${string}` - const DEBUG = process.env.DEBUG /** @@ -13,10 +13,20 @@ const DEBUG = process.env.DEBUG * but some of its features are not supported yet to keeps things simple. */ export function createDebugger( - namespace: VxrnDebugScope | undefined, + namespacePartial: string, + options: DebuggerOptions = {} +): { debug?: Debugger; debugDetails?: Debugger } { + return { + debug: createSingleDebugger(namespacePartial, options), + debugDetails: createSingleDebugger(namespacePartial, options), + } +} + +function createSingleDebugger( + namespacePartial: string, options: DebuggerOptions = {} -): (debug.Debugger['log'] & { namespace: VxrnDebugScope }) | undefined { - if (!namespace) return +): Debugger | undefined { + const namespace = `vxrn:${namespacePartial}` const log = debug(namespace) const { onlyWhenFocused } = options diff --git a/packages/debug/tsconfig.json b/packages/debug/tsconfig.json new file mode 100644 index 000000000..6b74372c1 --- /dev/null +++ b/packages/debug/tsconfig.json @@ -0,0 +1,7 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "composite": true, + }, + "references": [] +} diff --git a/packages/debug/types/index.d.ts b/packages/debug/types/index.d.ts new file mode 100644 index 000000000..c710390dd --- /dev/null +++ b/packages/debug/types/index.d.ts @@ -0,0 +1,17 @@ +import debug from 'debug'; +type Debugger = debug.Debugger['log'] & { + namespace: string; +}; +interface DebuggerOptions { + onlyWhenFocused?: boolean | string; +} +/** + * This is like `createDebugger()` in the Vite source code ([see](https://github.com/vitejs/vite/blob/v6.0.0-beta.5/packages/vite/src/node/utils.ts#L163)), + * but some of its features are not supported yet to keeps things simple. + */ +export declare function createDebugger(namespacePartial: string, options?: DebuggerOptions): { + debug?: Debugger; + debugDetails?: Debugger; +}; +export {}; +//# sourceMappingURL=index.d.ts.map \ No newline at end of file diff --git a/packages/vxrn/package.json b/packages/vxrn/package.json index a3e7c3a7b..b0c080aa1 100644 --- a/packages/vxrn/package.json +++ b/packages/vxrn/package.json @@ -48,6 +48,7 @@ "@rollup/plugin-node-resolve": "^15.2.3", "@tamagui/react-native-svg": "^1.116.7", "@vitejs/plugin-react-swc": "^3.7.0", + "@vxrn/debug": "1.1.325", "@vxrn/query-string": "1.1.325", "@vxrn/react-native-prebuilt": "1.1.325", "@vxrn/resolve": "1.1.325", @@ -58,7 +59,6 @@ "@vxrn/vite-native-swc": "1.1.325", "citty": "^0.1.6", "crossws": "^0.2.4", - "debug": "^4.3.7", "env-editor": "^1.1.0", "es-module-lexer": "^1.3.0", "esbuild": "^0.24.0", diff --git a/packages/vxrn/src/plugins/autoPreBundleDepsForSsrPlugin.ts b/packages/vxrn/src/plugins/autoPreBundleDepsForSsrPlugin.ts index adbc96410..e37bbe368 100644 --- a/packages/vxrn/src/plugins/autoPreBundleDepsForSsrPlugin.ts +++ b/packages/vxrn/src/plugins/autoPreBundleDepsForSsrPlugin.ts @@ -3,14 +3,14 @@ import FSExtra from 'fs-extra' import type { Plugin } from 'vite' import { EXCLUDE_LIST, scanDepsToPreBundleForSsr } from '../utils/scanDepsToPreBundleForSsr' import { getFileHash, lookupFile } from '../utils/utils' -import { createDebugger } from '../utils/createDebugger' +import { createDebugger } from '@vxrn/debug' -const debug = createDebugger('vxrn:auto-pre-bundle-deps-for-ssr') -const debugDetails = createDebugger(debug?.namespace, { onlyWhenFocused: true }) +const name = 'auto-pre-bundle-deps-for-ssr' +const { debug, debugDetails } = createDebugger(name) export function autoPreBundleDepsForSsrPlugin({ root }: { root: string }) { return { - name: 'vxrn:auto-pre-bundle-deps-for-ssr', + name: `vxrn:${name}`, enforce: 'pre', async config(_cfg, env) { debug?.('Config hook called') diff --git a/packages/vxrn/types/utils/createDebugger.d.ts b/packages/vxrn/types/utils/createDebugger.d.ts index 8905eb4f6..8a32343e3 100644 --- a/packages/vxrn/types/utils/createDebugger.d.ts +++ b/packages/vxrn/types/utils/createDebugger.d.ts @@ -1,14 +1,17 @@ import debug from 'debug'; +type Debugger = debug.Debugger['log'] & { + namespace: string; +}; interface DebuggerOptions { onlyWhenFocused?: boolean | string; } -export type VxrnDebugScope = `vxrn:${string}`; /** * This is like `createDebugger()` in the Vite source code ([see](https://github.com/vitejs/vite/blob/v6.0.0-beta.5/packages/vite/src/node/utils.ts#L163)), * but some of its features are not supported yet to keeps things simple. */ -export declare function createDebugger(namespace: VxrnDebugScope | undefined, options?: DebuggerOptions): (debug.Debugger['log'] & { - namespace: VxrnDebugScope; -}) | undefined; +export declare function createDebugger(namespacePartial: string, options?: DebuggerOptions): { + debug?: Debugger; + debugDetails?: Debugger; +}; export {}; //# sourceMappingURL=createDebugger.d.ts.map \ No newline at end of file diff --git a/yarn.lock b/yarn.lock index e4eeb9a47..3bb801f00 100644 --- a/yarn.lock +++ b/yarn.lock @@ -8446,6 +8446,15 @@ __metadata: languageName: unknown linkType: soft +"@vxrn/debug@npm:1.1.325, @vxrn/debug@workspace:packages/debug": + version: 0.0.0-use.local + resolution: "@vxrn/debug@workspace:packages/debug" + dependencies: + "@tamagui/build": "npm:^1.116.7" + "@vxrn/debug": "npm:1.1.325" + languageName: unknown + linkType: soft + "@vxrn/mdx@npm:1.1.325, @vxrn/mdx@workspace:packages/mdx": version: 0.0.0-use.local resolution: "@vxrn/mdx@workspace:packages/mdx" @@ -10525,7 +10534,7 @@ __metadata: languageName: node linkType: hard -"debug@npm:4, debug@npm:^4.0.0, debug@npm:^4.1.0, debug@npm:^4.1.1, debug@npm:^4.3.1, debug@npm:^4.3.2, debug@npm:^4.3.4, debug@npm:^4.3.6, debug@npm:^4.3.7": +"debug@npm:4, debug@npm:^4.0.0, debug@npm:^4.1.0, debug@npm:^4.1.1, debug@npm:^4.3.1, debug@npm:^4.3.2, debug@npm:^4.3.4, debug@npm:^4.3.6": version: 4.3.7 resolution: "debug@npm:4.3.7" dependencies: @@ -21933,6 +21942,7 @@ __metadata: "@types/qrcode-terminal": "npm:^0" "@types/ws": "npm:^8.5.10" "@vitejs/plugin-react-swc": "npm:^3.7.0" + "@vxrn/debug": "npm:1.1.325" "@vxrn/query-string": "npm:1.1.325" "@vxrn/react-native-prebuilt": "npm:1.1.325" "@vxrn/resolve": "npm:1.1.325" @@ -21943,7 +21953,6 @@ __metadata: "@vxrn/vite-native-swc": "npm:1.1.325" citty: "npm:^0.1.6" crossws: "npm:^0.2.4" - debug: "npm:^4.3.7" depcheck: "npm:^1.4.7" env-editor: "npm:^1.1.0" es-module-lexer: "npm:^1.3.0" From 67293b396633f063fd298913b32fde32fedd7a7f Mon Sep 17 00:00:00 2001 From: Pokai Chang Date: Tue, 22 Oct 2024 20:04:36 +0800 Subject: [PATCH 11/13] basic setup of native integration test --- .github/actions/install-maestro/action.yml | 28 ++ .github/actions/install/action.yml | 24 +- .github/workflows/build-ios-test-app.yml | 221 ++++++++++++++++ .github/workflows/test-native.yml | 286 +++++++++++++++++++++ tests/test/.gitignore | 12 + tests/test/app.json | 24 ++ tests/test/app/index.tsx | 7 +- tests/test/assets/app-icon.png | Bin 0 -> 121781 bytes tests/test/assets/splash.png | Bin 0 -> 75580 bytes tests/test/maestro-flows/basic.yaml | 9 + tests/test/package.json | 3 +- tests/test/react-native.config.cjs | 6 + tests/test/scripts/start-dev-server.mjs | 175 +++++++++++++ tests/test/vite.config.ts | 8 + yarn.lock | 170 ++++-------- 15 files changed, 838 insertions(+), 135 deletions(-) create mode 100644 .github/actions/install-maestro/action.yml create mode 100644 .github/workflows/build-ios-test-app.yml create mode 100644 .github/workflows/test-native.yml create mode 100644 tests/test/app.json create mode 100644 tests/test/assets/app-icon.png create mode 100644 tests/test/assets/splash.png create mode 100644 tests/test/maestro-flows/basic.yaml create mode 100644 tests/test/react-native.config.cjs create mode 100644 tests/test/scripts/start-dev-server.mjs diff --git a/.github/actions/install-maestro/action.yml b/.github/actions/install-maestro/action.yml new file mode 100644 index 000000000..69db51ddb --- /dev/null +++ b/.github/actions/install-maestro/action.yml @@ -0,0 +1,28 @@ +name: 'Install Maestro' +description: 'Install Maestro' +runs: + using: composite + steps: + - name: Install Maestro + shell: bash + run: | + retries=0 + maestro_executable_path="$HOME/.maestro/bin/maestro" + + # Loop until the maestro binary exists or retries exceed the limit + while [ ! -f "$maestro_executable_path" ]; do + if [ "$retries" -gt 5 ]; then + echo "Error: Reached max retry limit. Unable to install maestro." + exit 1 + fi + + echo "Maestro not found at $maestro_executable_path. Installing..." + + # Run the installation command + curl -fsSL "https://get.maestro.mobile.dev" | bash + + # Increment retries + retries=$((retries + 1)) + done + + echo "Maestro installed successfully!" diff --git a/.github/actions/install/action.yml b/.github/actions/install/action.yml index d7310928b..4bf0a3edb 100644 --- a/.github/actions/install/action.yml +++ b/.github/actions/install/action.yml @@ -1,6 +1,10 @@ name: 'Install' -description: 'Install and pre-build' - +description: 'Install and build packages' +inputs: + workspace-focus: + required: false + description: 'Only install and build a specific workspace (and its dependencies)' + type: string runs: using: composite steps: @@ -22,14 +26,24 @@ runs: shell: bash run: corepack enable && corepack prepare yarn@4.4.1 --activate + - name: Cache node_modules + uses: actions/cache@v4 + env: + cache-name: node_modules + with: + path: '**/node_modules' + key: ${{ runner.os }}-${{ env.cache-name }}${{ inputs.workspace-focus && format('-{0}', inputs.workspace-focus) || '' }}-${{ hashFiles('yarn.lock') }} + restore-keys: | + ${{ runner.os }}-${{ env.cache-name }}${{ inputs.workspace-focus && format('-{0}', inputs.workspace-focus) || '' }}- + - name: Install Dependencies shell: bash - run: yarn install + run: ${{ inputs.workspace-focus && format('yarn workspaces focus vxrn-monorepo {0}', inputs.workspace-focus) || 'yarn install'}} - name: Clean Build shell: bash - run: yarn clean:build + run: ${{ inputs.workspace-focus && format('yarn workspaces foreach -Rpt --from "{0}" run clean:build', inputs.workspace-focus) || 'yarn clean:build'}} - name: Build shell: bash - run: yarn build + run: ${{ inputs.workspace-focus && format('yarn workspaces foreach -Rpt --from "{0}" run build', inputs.workspace-focus) || 'yarn build'}} diff --git a/.github/workflows/build-ios-test-app.yml b/.github/workflows/build-ios-test-app.yml new file mode 100644 index 000000000..2c1e8313c --- /dev/null +++ b/.github/workflows/build-ios-test-app.yml @@ -0,0 +1,221 @@ +name: Build iOS Test Development Container App +env: + # Relative path from the monorepo root to the app + test_app_path: tests/test + # Package name in the monorepo + test_app_package_name: test-app + # Used for cache keys, must be unique among all workflows + app_identifier: ios-test-app + # Should match the name of "ios/.xcworkspace" + app_name: OneTestApp +on: + workflow_call: + inputs: + configuration: + required: true + type: string + description: "Either 'Debug' or 'Release'." + outputs: + build-hash: + description: "A hash to identify the build." + value: ${{ jobs.build-ios.outputs.build-hash }} + built-app-cache-key: + description: "The cache key of the built .app." + value: ${{ jobs.build-ios.outputs.built-app-cache-key }} + built-app-path: + description: "The path to the built .app relative to the repository root." + value: ${{ jobs.build-ios.outputs.built-app-path }} + +jobs: + build-ios: + name: Build + runs-on: macos-13 + permissions: + contents: read + pull-requests: read + timeout-minutes: 60 + outputs: + build-hash: ${{ steps.caculate-build-hash.outputs.build_hash }} + built-app-cache-key: ${{ steps.check-previous-build.outputs.cache-primary-key || steps.pre-check-previous-build.outputs.cache-primary-key }} + built-app-path: ${{ steps.get-built-app-path.outputs.built_app_path }} + defaults: + run: + working-directory: ${{ env.test_app_path }} + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Get Built App Path + id: get-built-app-path + env: + BUILT_APP_PATH: ${{ env.test_app_path }}/build/Build/Products/${{ inputs.configuration }}-iphonesimulator/${{ env.app_name }}.app + run: | + echo "Built app path: $BUILT_APP_PATH" + echo "built_app_path=$BUILT_APP_PATH" >> $GITHUB_OUTPUT + + - name: Caculate Pre-Build Hash + id: caculate-pre-build-hash + env: + # A hash that can save us more time if we can already know that the build hash will not change. + # + # Calculating the build_hash relies on generated files, for example, `Podfile.lock`, and it’ll take some time to run `yarn install`, `expo prebuild` and `pod install` in order to get that. But if `yarn.lock` didn’t change, there’s no likely that `Podfile.lock` will change - we can leverage that and skip some installation steps. + # + # This hash MUST be different if the build_hash will be different. + # + # This hash can be different if the build_hash remains the same. For example, if `yarn.lock` changes, `Podfile.lock` may not change if the updated package contains no native code. + PRE_BUILD_HASH: ${{ hashFiles(format('{0}/yarn.lock', env.test_app_path), format('{0}/app.json', env.test_app_path), 'packages/vxrn/expo-plugin.cjs') }} + run: | + if [ -z "$PRE_BUILD_HASH" ]; then + echo '[ERROR] Failed to calculate pre-build hash.' + fi + echo "Pre-build hash: $PRE_BUILD_HASH" + echo "pre_build_hash=$PRE_BUILD_HASH" >> $GITHUB_OUTPUT + + - name: Get Pre-Build Hash Mapping Key + id: get-pre-build-hash-mapping-key + env: + PRE_BUILD_HASH_MAPPING_KEY: ${{ env.app_identifier }}-${{ inputs.configuration }}-pre-build-hash-to-hash-mapping-${{ steps.caculate-pre-build-hash.outputs.pre_build_hash }} + BUILD_HASH_MAPPING_FILE_PATH: ${{ env.test_app_path }}/build-hash.txt + run: | + echo "Pre-build hash mapping key: $PRE_BUILD_HASH_MAPPING_KEY" + echo "pre_build_hash_mapping_key=$PRE_BUILD_HASH_MAPPING_KEY" >> $GITHUB_OUTPUT + echo "Build hash mapping file path: $BUILD_HASH_MAPPING_FILE_PATH" + echo "build_hash_mapping_file_path=$BUILD_HASH_MAPPING_FILE_PATH" >> $GITHUB_OUTPUT + + - name: Get Pre-Build Hash Mapping + uses: actions/cache/restore@v4 + with: + key: ${{ steps.get-pre-build-hash-mapping-key.outputs.pre_build_hash_mapping_key }} + path: ${{ steps.get-pre-build-hash-mapping-key.outputs.build_hash_mapping_file_path }} + + - name: Read Build Hash from Mapping + id: read-build-hash + run: | + if [ -f build-hash.txt ]; then + BUILD_HASH=$(tr -d '[:space:]' < build-hash.txt) + echo "Build hash: $BUILD_HASH" + echo "build_hash=$BUILD_HASH" >> $GITHUB_OUTPUT + else + echo 'No cached build hash found.' + echo "build_hash=NULL" >> $GITHUB_OUTPUT + fi + + - name: Check If Previous Build Exists + uses: actions/cache/restore@v4 + id: pre-check-previous-build + with: + key: ${{ env.app_identifier }}-${{ inputs.configuration }}-${{ steps.read-build-hash.outputs.build_hash }} + lookup-only: true + path: ${{ steps.get-built-app-path.outputs.built_app_path }} + + - name: Install + uses: ./.github/actions/install + if: ${{ !steps.pre-check-previous-build.outputs.cache-hit }} + with: + workspace-focus: ${{ env.test_app_package_name }} + + - name: Prebuild + if: ${{ !steps.pre-check-previous-build.outputs.cache-hit }} + run: | + node_modules/.bin/expo prebuild --platform ios --no-install # --no-install is used to skip installing dependencies, specifically `pod install` as we want to do it after the Cache Pods step + + - name: Cache Pods + uses: actions/cache@v4 + if: ${{ !steps.pre-check-previous-build.outputs.cache-hit }} + env: + cache-name: ${{ env.app_identifier }}-pods + with: + path: ${{ env.test_app_path }}/ios/Pods + key: ${{ runner.os }}-${{ env.cache-name }}-${{ hashFiles(format('{0}/ios/Podfile.lock', env.test_app_path)) }} + restore-keys: | + ${{ runner.os }}-${{ env.cache-name }}- + + - name: Pod Install + if: ${{ !steps.pre-check-previous-build.outputs.cache-hit }} + run: | + cd ios && pod install + + - name: Caculate Build Hash + id: caculate-build-hash + if: ${{ !steps.pre-check-previous-build.outputs.cache-hit }} + env: + # We need to list all files that will affect native code in hashFiles. + BUILD_HASH: ${{ hashFiles(format('{0}/ios/Podfile.lock', env.test_app_path), format('{0}/app.json', env.test_app_path), 'packages/vxrn/expo-plugin.cjs') }} + run: | + if [ -z "$BUILD_HASH" ]; then + echo '[ERROR] Failed to calculate build hash.' + exit 1 + fi + echo "Build hash: $BUILD_HASH" + echo "build_hash=$BUILD_HASH" >> $GITHUB_OUTPUT + + - name: Write Build Hash + if: ${{ !steps.pre-check-previous-build.outputs.cache-hit }} + env: + BUILD_HASH: ${{ steps.caculate-build-hash.outputs.build_hash }} + run: | + echo $BUILD_HASH > build-hash.txt + + - name: Save Pre-Build Hash Mapping + uses: actions/cache/save@v4 + if: ${{ !steps.pre-check-previous-build.outputs.cache-hit }} + with: + key: ${{ steps.get-pre-build-hash-mapping-key.outputs.pre_build_hash_mapping_key }} + path: ${{ steps.get-pre-build-hash-mapping-key.outputs.build_hash_mapping_file_path }} + + - name: Check If Previous Build Exists + uses: actions/cache/restore@v4 + id: check-previous-build + if: ${{ !steps.pre-check-previous-build.outputs.cache-hit }} + with: + key: ${{ env.app_identifier }}-${{ inputs.configuration }}-${{ steps.caculate-build-hash.outputs.build_hash }} + lookup-only: true + path: ${{ steps.get-built-app-path.outputs.built_app_path }} + + - name: Restore Build Cache + id: restore-build-cache + uses: actions/cache/restore@v4 + if: ${{ !steps.pre-check-previous-build.outputs.cache-hit && !steps.check-previous-build.outputs.cache-hit }} + env: + cache-name: ${{ env.app_identifier }}-build + with: + key: ${{ runner.os }}-${{ env.cache-name }}-${{ inputs.configuration }}-${{ steps.caculate-build-hash.outputs.build_hash }} + restore-keys: | + ${{ runner.os }}-${{ env.cache-name }}-${{ inputs.configuration }}- + ${{ runner.os }}-${{ env.cache-name }}- + path: | + ${{ env.test_app_path }}/build + + - name: Build + if: ${{ !steps.pre-check-previous-build.outputs.cache-hit && !steps.check-previous-build.outputs.cache-hit }} + run: | + xcrun xcodebuild -scheme '${{ env.app_name }}' \ + -workspace 'ios/${{ env.app_name }}.xcworkspace' \ + -configuration ${{ inputs.configuration }} \ + -sdk 'iphonesimulator' \ + -destination 'generic/platform=iOS Simulator' \ + -derivedDataPath \ + build | tee xcodebuild.log | xcpretty + + - name: Save Built App + uses: actions/cache/save@v4 + if: ${{ !steps.pre-check-previous-build.outputs.cache-hit && !steps.check-previous-build.outputs.cache-hit }} + with: + key: ${{ steps.check-previous-build.outputs.cache-primary-key }} + path: ${{ steps.get-built-app-path.outputs.built_app_path }} + + - name: Save Build Cache + uses: actions/cache/save@v4 + if: ${{ always() && !steps.pre-check-previous-build.outputs.cache-hit && !steps.check-previous-build.outputs.cache-hit }} + with: + key: ${{ steps.restore-build-cache.outputs.cache-primary-key }} + path: | + ${{ env.test_app_path }}/build + + - name: Upload Build Log + uses: actions/upload-artifact@v4.3.1 + if: ${{ always() && !steps.pre-check-previous-build.outputs.cache-hit && !steps.check-previous-build.outputs.cache-hit }} + with: + name: xcodebuild-${{ inputs.configuration }}.log + path: | + ${{ env.test_app_path }}/xcodebuild.log diff --git a/.github/workflows/test-native.yml b/.github/workflows/test-native.yml new file mode 100644 index 000000000..3441ea369 --- /dev/null +++ b/.github/workflows/test-native.yml @@ -0,0 +1,286 @@ +name: Native Integration Tests +env: + test_app_path: tests/test + # Used for cache keys, must be same as the build-ios-test-app workflow + app_identifier: ios-test-app + +on: + push: + pull_request: + +jobs: + build-ios-test-dev-container: + name: Build iOS Test Development Container App + uses: ./.github/workflows/build-ios-test-app.yml + secrets: inherit + permissions: + contents: read + pull-requests: read + with: + configuration: Debug + + build-ios-test-app: + name: Build iOS Release App + uses: ./.github/workflows/build-ios-test-app.yml + secrets: inherit + permissions: + contents: read + pull-requests: read + with: + configuration: Release + + test-ios-native: + name: iOS Development Integration Test + needs: + - build-ios-test-dev-container + runs-on: macos-14 + defaults: + run: + working-directory: ${{ env.test_app_path }} + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Install + uses: ./.github/actions/install + with: + workspace-focus: test-app + + - name: Start Dev Server + run: node scripts/start-dev-server.mjs --no-wait + + - name: Download Dev Container App + uses: actions/cache/restore@v4 + with: + fail-on-cache-miss: true + key: ${{ needs.build-ios-test-dev-container.outputs.built-app-cache-key }} + path: ${{ needs.build-ios-test-dev-container.outputs.built-app-path }} + + - name: Get Simulator UDID + id: get-simulator-udid + run: | + AVAILABLE_SIMULATORS=$(xcrun simctl list devices available --json) + echo "Available simulators: $AVAILABLE_SIMULATORS" + RUNTIME=$(echo $AVAILABLE_SIMULATORS | jq -r '.devices | keys | map(select(test("iOS"))) | last') + echo "Runtime: $RUNTIME" + SIMULATOR_INFO=$(echo $AVAILABLE_SIMULATORS | jq ".devices.\"$RUNTIME\" | map(select(.name | test(\"iPhone\"))) | last") + SIMULATOR_UDID=$(echo $SIMULATOR_INFO | jq -r .udid) + echo "Simulator info: $SIMULATOR_INFO" + echo "Simulator UDID: $SIMULATOR_UDID" + echo "simulator_udid=$SIMULATOR_UDID" >> $GITHUB_OUTPUT + + - name: Boot Simulator + env: + SIMULATOR_UDID: ${{ steps.get-simulator-udid.outputs.simulator_udid }} + run: xcrun simctl boot $SIMULATOR_UDID + + - name: Install Maestro + uses: ./.github/actions/install-maestro + id: install-maestro + + - name: Wait for Dev Server to Be Ready + run: node scripts/start-dev-server.mjs --check-only + + - name: Get a Copy of the Bundle + run: | + echo 'Fetching the React Native bundle in the background, since the first request can take a while pre-bundling dependencies and producing the first bundle without a cache. The bundle we got can also serve as troubleshooting material in case of a failure, and will be uploaded as an artifact.' + wget -O bundle.ios.js 'http://localhost:8081/index.bundle?platform.ios' & + + - name: Install Dev Container App in Simulator + env: + SIMULATOR_UDID: ${{ steps.get-simulator-udid.outputs.simulator_udid }} + APP_PATH: ${{ needs.build-ios-test-dev-container.outputs.built-app-path }} + working-directory: . + run: xcrun simctl install $SIMULATOR_UDID $APP_PATH + + - name: Test + run: | + export PATH="$PATH":"$HOME/.maestro/bin" + export MAESTRO_DRIVER_STARTUP_TIMEOUT=180000 # 3 minutes + maestro test maestro-flows/basic.yaml + + - name: Upload Dev Container App + uses: actions/upload-artifact@v4.3.1 + # Only upload if the test failed to save space + if: ${{ failure() }} + continue-on-error: true + with: + name: dev-container-app + path: | + path: ${{ needs.build-ios-test-dev-container.outputs.built-app-path }} + + - name: Upload Server Log + uses: actions/upload-artifact@v4.3.1 + if: ${{ always() }} + continue-on-error: true + with: + name: dev-server.log + path: | + ${{ env.test_app_path }}/dev-server.log + + - name: Prepare Maestro Logs + id: prepare-maestro-logs + if: ${{ always() && steps.install-maestro.outcome == 'success' }} + continue-on-error: true + run: cp -r "$HOME/.maestro/tests" maestro-logs + + - name: Upload Maestro Logs + uses: actions/upload-artifact@v4.3.1 + if: ${{ always() && steps.prepare-maestro-logs.outcome == 'success' }} + continue-on-error: true + with: + name: release-maestro-logs + path: | + ${{ env.test_app_path }}/maestro-logs + + - name: Upload Maestro Screenshots + uses: actions/upload-artifact@v4.3.1 + if: ${{ always() && steps.install-maestro.outcome == 'success' }} + continue-on-error: true + with: + name: release-maestro-screenshots + path: | + ${{ env.test_app_path }}/maestro-screenshots + + - name: Upload Reference React Native Bundle + uses: actions/upload-artifact@v4.3.1 + if: ${{ always() }} + continue-on-error: true + with: + name: dev-sample-bundle.ios.js + path: | + ${{ env.test_app_path }}/bundle.ios.js + + test-ios-native-release: + name: iOS Release Integration Test + # Note: Some parts of the native build process are not covered by this test: + # * We do not test the generated Xcode project has the Build Phase "Bundle React Native code and images" setup correctly using the standard `react-native bundle` command. This is done by the "vxrn/expo-plugin" Expo plugin which users should include in their `app.json` configuration. If that didn't work properally, Expo prebuild may setup the Xcode project to use Expo's custom bundle command that uses Metro. + # * We do not test `react-native/scripts/react-native-xcode.sh`, instead we copy parts of it into our test scripts, simulating parts of the build process without running the whole native build. + needs: + - build-ios-test-app + runs-on: macos-14 + defaults: + run: + working-directory: ${{ env.test_app_path }} + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Install + uses: ./.github/actions/install + with: + workspace-focus: test-app + + - name: Download Built Native App + uses: actions/cache/restore@v4 + with: + fail-on-cache-miss: true + key: ${{ needs.build-ios-test-app.outputs.built-app-cache-key }} + path: ${{ needs.build-ios-test-app.outputs.built-app-path }} + + - name: Get Simulator UDID + id: get-simulator-udid + run: | + AVAILABLE_SIMULATORS=$(xcrun simctl list devices available --json) + echo "Available simulators: $AVAILABLE_SIMULATORS" + RUNTIME=$(echo $AVAILABLE_SIMULATORS | jq -r '.devices | keys | map(select(test("iOS"))) | last') + echo "Runtime: $RUNTIME" + SIMULATOR_INFO=$(echo $AVAILABLE_SIMULATORS | jq ".devices.\"$RUNTIME\" | map(select(.name | test(\"iPhone\"))) | last") + SIMULATOR_UDID=$(echo $SIMULATOR_INFO | jq -r .udid) + echo "Simulator info: $SIMULATOR_INFO" + echo "Simulator UDID: $SIMULATOR_UDID" + echo "simulator_udid=$SIMULATOR_UDID" >> $GITHUB_OUTPUT + + - name: Boot Simulator + env: + SIMULATOR_UDID: ${{ steps.get-simulator-udid.outputs.simulator_udid }} + run: xcrun simctl boot $SIMULATOR_UDID + + - name: Install Maestro + id: install-maestro + uses: ./.github/actions/install-maestro + + - name: Patch Packages + run: | + node_modules/.bin/one patch + + # Prebuild and pod install because we need hermesc which is installed by pod install + - name: Prebuild + run: | + node_modules/.bin/expo prebuild --platform ios --no-install # --no-install is used to skip installing dependencies, specifically `pod install` as we want to do it after the Cache Pods step + - name: Cache Pods + uses: actions/cache@v4 + env: + cache-name: ${{ env.app_identifier }}-pods + with: + path: ${{ env.test_app_path }}/ios/Pods + key: ${{ runner.os }}-${{ env.cache-name }}-${{ hashFiles(format('{0}/ios/Podfile.lock', env.test_app_path)) }} + restore-keys: | + ${{ runner.os }}-${{ env.cache-name }}- + - name: Pod Install + run: | + cd ios && pod install + + - name: Bundle React Native code and images + run: | + mkdir test-bundle-output + node_modules/.bin/react-native bundle --platform ios --dev false --bundle-output test-bundle-output/main.tmp.jsbundle --assets-dest test-bundle-output + ios/Pods/hermes-engine/destroot/bin/hermesc -emit-binary -max-diagnostic-width=80 -O -output-source-map -out test-bundle-output/main.jsbundle test-bundle-output/main.tmp.jsbundle + + - name: Replace JS Bundle and Assets in App + run: | + cp -r test-bundle-output/. ${{ github.workspace }}/${{ needs.build-ios-test-app.outputs.built-app-path }}/ + + - name: Check .app + id: check-app + run: | + if [ ! -e ${{ github.workspace }}/${{ needs.build-ios-test-app.outputs.built-app-path }} ]; then + echo "Error: .app not found" + exit 1 + fi + + - name: Install App in Simulator + env: + SIMULATOR_UDID: ${{ steps.get-simulator-udid.outputs.simulator_udid }} + APP_PATH: ${{ needs.build-ios-test-app.outputs.built-app-path }} + working-directory: . + run: xcrun simctl install $SIMULATOR_UDID $APP_PATH + + - name: Test + run: | + export PATH="$PATH":"$HOME/.maestro/bin" + export MAESTRO_DRIVER_STARTUP_TIMEOUT=180000 # 3 minutes + maestro test maestro-flows/basic.yaml + + - name: Upload App + uses: actions/upload-artifact@v4.3.1 + if: ${{ always() && steps.check-app.outcome == 'success' }} + continue-on-error: true + with: + name: release-app + path: | + path: ${{ needs.build-ios-test-app.outputs.built-app-path }} + + - name: Prepare Maestro Logs + id: prepare-maestro-logs + if: ${{ always() && steps.install-maestro.outcome == 'success' }} + continue-on-error: true + run: cp -r "$HOME/.maestro/tests" maestro-logs + + - name: Upload Maestro Logs + uses: actions/upload-artifact@v4.3.1 + if: ${{ always() && steps.prepare-maestro-logs.outcome == 'success' }} + continue-on-error: true + with: + name: release-maestro-logs + path: | + ${{ env.test_app_path }}/maestro-logs + + - name: Upload Maestro Screenshots + uses: actions/upload-artifact@v4.3.1 + if: ${{ always() && steps.install-maestro.outcome == 'success' }} + continue-on-error: true + with: + name: release-maestro-screenshots + path: | + ${{ env.test_app_path }}/maestro-screenshots diff --git a/tests/test/.gitignore b/tests/test/.gitignore index 790d66f66..dbc1f2667 100644 --- a/tests/test/.gitignore +++ b/tests/test/.gitignore @@ -30,3 +30,15 @@ tsconfig.tsbuildinfo .env.production.local .expo + +# generated code +/build +/ios +/android + +# testing +/xcodebuild.log +/dev-server.pid +/dev-server.log +/maestro-screenshots +/test-bundle-output diff --git a/tests/test/app.json b/tests/test/app.json new file mode 100644 index 000000000..f625f8023 --- /dev/null +++ b/tests/test/app.json @@ -0,0 +1,24 @@ +{ + "expo": { + "name": "One Test App", + "slug": "one-test-app", + "icon": "./assets/app-icon.png", + "splash": { + "image": "./assets/splash.png", + "backgroundColor": "#000000", + "resizeMode": "contain" + }, + "sdkVersion": "51.0.0", + "platforms": ["ios", "android"], + "plugins": ["vxrn/expo-plugin"], + "android": { + "package": "dev.onestack.dev.test" + }, + "ios": { + "bundleIdentifier": "dev.onestack.dev.test", + "config": { + "usesNonExemptEncryption": false + } + } + } +} diff --git a/tests/test/app/index.tsx b/tests/test/app/index.tsx index 8e8e68a2f..46dc513fb 100644 --- a/tests/test/app/index.tsx +++ b/tests/test/app/index.tsx @@ -1,8 +1,9 @@ import { Link } from 'one' +import { Text, View } from 'react-native' export default () => ( -
- Welcome to VXS + + Welcome to VXS Go to sub -
+ ) diff --git a/tests/test/assets/app-icon.png b/tests/test/assets/app-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..6db9866c1a378d5aa676b18fb38627356d2de1c6 GIT binary patch literal 121781 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%0DSRBo=X%w^+9A1V<+Cnv-Qa}_uHma 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
Es|D!m{x7A4hKCc^OOz=h0-C}QCAau| zpAk^OtB1DN_e=W3OEgOEkN1XgvKN+SbJGL$GVO2-Y@5%5lV^yhDy(*a=qkFbN%hJB z=$-|R_u;NNQS{Nh!)uX&nm){{6CHj$z%+u#-TU2Y|Hjq0K`!-TX5JBV_0=vA;v5Z^ zV&Jp2T_Gq+(vYR#!esV(O?fT;AS-TBOOjampLmsi5)po zAVN!n#d>MGcr}=Y%5dRI(h9d~OqHdPn9@UqtVm>3IM&=m!+#_kofQnL=k39YHCY#;B)K6m3F2;0js?b5<=Zg~^32`gUyAVG9EcwgE-uj9 zuo2a~Ut6qk&A%3Yy-!;ETBzqha{HBiY z{w)2fWh(jRIOEphZl3>ouXIaZJlc^d7#sz}GGS)ZB@8R$A2_?Z&W9n!sm z0aPKVpPAFLlfeV*OJ{1?_nc33aHCrtt5*IKuNQBHP^+9LnjQ3U*F?Xx5)ditT#*yF zSX0J$(}y~_F4JdWguI<1&t*i>3ET^jzObsjD9lP8G&o8Er*yttpxfIpW(%IkP|2}x z`?#PG6vpZ3yGGJC#;>l^OH5qWc+MgAWHQP67DP}1ijpv*58GzqobfsBR{%|g4BW%f zQLsJ-8Ugw~0^LkDA4>v+?I$-FDJ*03xQqWJ=L$Wf7>(pQg5~ZfuVuc-sLo;)TAEG1 zrs@qH>3Rkj^q?I}*bP0*5Gxe_719m7?ZUG3f?3y0C~Ezibw8b3Wve-U(&W2J?P#S) zgLu0wr}H?96B@$Qrsu8^ z&{mFpZ!#hE#To+kC*KCIG0-%Y8e_4HKR)R6Ihm5bAcGcl@gjAT1{o1E4sc)f59moP zm>wLqQNZ0-VU4rm)|Mk$KW)adTeug!$*4O|7`B>!`bZPe@)&M zTRn5`sk`VpDK0f%g1Z;F)dKBj2|?t|+n1UTT{|pcz@$q0O`?eV1tGgcMTog40^rAoF^!c0ulRSe`;^wpp$GRZr9Rl zAc-@^wU60%6Rd%4U2SDq&at>IKTM|A09!D9K>K%eu}a4Q{yQjw6Fu=T<%!Nk_MV4? zLw%>M>%{RobyL*6r35h|m{N}a0T*s5NYt#YzQlf)4O)wL=^)i;yEvgoUn*%x4-@JfITzUk71u7 zqYtWs@z&JaNZPayecQ;mH0!?-=-XsN1RaIltI;rWT0{?c5hHfFC#`avX)YEIP-q%8 zvCJBUmo+Dv)-|LGs1#WBQJsCTW2_bEIk1lURlVD10(?J&M;J#`%r4PI8G;;wZUAW;-*s|r*P`Qj1!KLL+b-RB zEj<(X-7I}>ydabatXomF#P z?5{q5Jw|TZg|D|@l8JD@_5g>dqph~9Va%1niQJ{A8cZ+I=NbDm6xqh1%X5H0~m%qbqJOC-3(mjiAQNAq@G#>AN>_OhRM@ zT=Hyb_|QnGcKwBhqxzamN0&RYt<#BQ<6r`%y+svSi@07|d!D!BM}lv18eaB2sfxNI zX@wOzx_1T^ttc|G|1gBT1Pzj;JK#RQPQeF_s) zy^*SL%hsjI^I<9vj@s&ceny_1NmX*$;P;XX5y6ADd#(Ff=F^$7UDbJxkL%*f z?f+2i6NlHo=b^uz`SkDBd;i+3hpo2Tr)Tuo!+N`aaPB_Y8eu#j{+v_SC^t&rFL%!O zVID?fC5~STapLS9?b6sEHM#FTdE#~5AM;*$FpYlQ+8)Xya&XRXeYg!9MQE$l>=yZAh{bE_f(|*mT=&P z`2VJ&BcLpq)~thtv)+I=2UI*&@_Grgsx(LT7?-I>Sw zj3Hfj{W%Q?a6gX6R-QTgs}K~kyuUL2+Z=46{G|j-JHR@=s0%)IDi^N^9KzayDn`3L zX>bbwc0L0b6n6^!1f17=su9TqsXcaY$O(OYz-HB%cy4ZGIBY5L*eez)xVp4)NBxL8s5^ya9hT_2#;0sG-=72 z5+7?kbJma(BQ(P))7zymm47miy5n9KIoA0i1^w&6xK@gu@zvm2dZe_-DPS?N-gb?P z=y%(mMehDLktUmwT9dleg#deyyn;j7+*MN4&dE0NY#ILT{Y1o=P0G-J<=oZ8#oitD zx=p5=-1>c^w14$(G9#hG%kB5qAFa4$r#{92+C0HyJ6y&3}Uw+f05I z9js}CG;`>I7C)$qsTq`jmbN8UbowCp=+&nogD;g{15@^bpMoGALsou51_FwXd&aDF5q`;`2EDK zP6?%cCj8W&0(`s^VcJ`7b|U6P#aI$sM{JpAB(3G(qxwR?Z-iwSK8N`v)y`1nNNo80 z^!PJtW131oM&q)gP9388#)obMnJu#=m~s(OgY?4eFD4Z4pCXt_d@^EbHd-28!u!a& zM-wU4`oWe!eLKwFjXZ_wk+y>p_>XWUTDwQV<9lB|z2t+apVO=4TDBUSLwSig(bE>E zZwu`{H&m3Ia(z6EkqB|)T;NtDbv*>C`|=V_Jy*A>N{B+n7f+lnwKZ(Gegw|*MEt;x z5B8~1JO=)ywB*Q>sKIgnM4wm+c@iaOp3DL$`s)v~jQx*O0?uT|tm;LtycaEpcpqoo z{b3bm^oB0pxt8)!F@Nf#z$XTntv=AGj9T{T7|QsiBg(D@1wJXi!)OT7z=zy|l}Q9Ng2oW%7%0?upeVD?+I{@k^bL`|Dv~I(VOO54{Oxs&!pO?2}KAt-q&- zSpU((nB0SV?jXBmg8%m51$|8n0b{LR=_lRd&)}CmA=Qna zI@;k(W`ow72dt8BCT%{4SSf+kS&>Dp5HLd{z;kxtux6aO%}nDu$J~;LDZju@)p$ww zSr9`oGvT}GaHq%Mqg2oVm8x!JSOFQ`Gxe-npPv0wH77t3LFe!E!A;ER^mII6hVAwP zIfsq?tc$iT0A`M+PNsSrD zFmf~Wvxt<6{B!Z0(X=ecboOUh`(2m&<`HjcJUL^EVvg$9H@eXoEQFr(PZ(m0>I%=n z7sOuVgf_4uYs&1LdxzKW&0$iwk&vSDgnQ8goc`g&CA~mRTwU8p^Aef%;61P3u4ayI zhDgZ~{hF~sgAEA>^ ze<*z~r{+f};;fPNMSS~;eXegV%V#}j`ST|-o_3m%%W)JR)~p^%NKdO(YB0}YlLS`_ zCKJo$lY9&cffj7n`OHt3%`b}EZigZvd&vWCSBgO|F?1NE*HpP zoqw!BAGB|GOwR^?EEfvPQ_~$8qz1%CnC;qKm}dtqzgjX4p^?( zyLQ&hn%RICeb^#mioHpC^1T40s4zl&EGHYh4R*u_saesSPUFwgL(!C4TH$wW;B^%ra_oH{X(w^u4$> zyKh)R8sbMdQvdY@*9eIUYe$?d#;?5ji%b=YnWzldmK-*Fo}Hx=f5+igFY?;GV?l3} zWioDXf?iLmmpOfqaHoyCH3gwkJtgFJwrrL$-R?-OX^2W>l`$bmE#+j>`>%Cy>fD?e zc!YZE?NuI1m*SS|u`cr}f!nQ!?T+%!#VzX*@$s$|oUX$sja8qqj+v^KNj4@!NadTv zKJyNs0jLdd9LQzWh1ZY?-%?1~HgMD>W zd13YE@Gh!j*gAS)**B2U|iXf&osi}I=P@&h1ru_ zO)d1Dr2~@k({Gx)4=fvSRG1p5_$%aa8A+@wcznO*aV+I?u*H0!r(Brb#&CIOxHS3( za@Xm;H~3B<-O+XhpBK{mya#+fcaF{^DBXXo^xWTCtm#K8@~W<@2pJ~#lcm}i+dkY+ z#v}i}noqPchg2n}-{NrAa~7G9{eam!=l|B@T<^>wU|H9iJ^wU^6r}Rj-sray+A6ZW z`!u)obvbnKyV8g=PpQle~ri7YBl+ zo5AUys)`e9j6Xa8vNGp?d;y}^FU?-Ix@yc22B7`H660}lyPlXAw*4;y`o4xLK3m-xB2?#@1+CL~cc0-H%5L(a{eK7g2+q@URxY&~zGz$<8}vi3 z8_pf?a{7X+!~RpxBE`NL4xU59_ox4|I`n^FaWV7#oXvxAz*K zvvwq?#h>pJmXVfdMOf-$SK>7k>Dz3uKF1~#eyvfuqo z*Xf`XfEgu}SD1E`oRI}8PM&4tBY6X$^(}-Q)Jd-jtvJb+0<|B81(AsHGwF75WJ_+3^$6UKPz!F1mzHDf15VYE@rY{9HCD`xA zst-Q-|5*T9%zf#iz*@)Io2^d$1!2(rPJ|B}*Nx8#htwsVtM^PWxo!JdXvI-N6K z-u{jyyVO^1|EJGB>7Bcrml7SOz8E_n;i;;lU?}O{|f_MtDcRjWf;@JA3yFntm0J6g>E)X`~(1efpzu$m>a) z1a`}*uL(wF27?@5bCOjIAx?p0afMSZ#n9J7QwgVS#TjC>oJzW4#1#B_3eD5avD9Bw z+#IQ-Z%m-BH8-&hki*9WxvYfC>Caf{-SZg_2=O{q%ueob2()a1gbJFsZ_6op0wO#R zSe(G^sd}f!P0iPBzNi+!K5nz|PLLPm!qV5Wk51XO+dbce# zz7xwQWTf4mu9P=!Rf^J3vB|sQ@II67rC=!|6kIt}(@=voIXLG;tJfpFz$^9ygL8X) zq@FeuknR>AvnGMfSG@kan0>8*{yv4mP5bakcP&1~Y*cuqox$XWBDW}TNU<+8&5c&% ztbW>;hkxjf$s9!vx9~;T`P)c{IzS6=Abb-2EXpTWKVM`#k-R)sZRM+nD{0=?`y{8~ zIN)D=RmP%*mW7fW`igpO3fW66OSZ{7ACr7~8UNF7zM^&vxWpkf;FoUgVI5{uzotBW z!v=q)rWYq(a{WH>5jc4rQ`qrZ%9r~>4?QarG)%VI+N10apdbC1F*)XK@^Qy~#Jl3D zC`bLXTu2rZ65wioJ;}HP1Q-AMBMeLT1!9)O%gnY*s}m*cvW%{>y;x>H*JY4^)~tVP z>|KU-5F|^x1sfiV)W!x0Al@e>`7r6(Tb-aJGYyi9_kQZ~BUY~%n~7!k#A7sJhK$1p zE`3W_+tvF3!{`UxD{+*lpq&*!M_fLaA=dc<%N{WIz2s~fR)w*jJ286OZ?E2I^-!pV zUm5$1v}a4v%mi04drKe1dqz5~=vh-J!grIsV^& zP{zrEeJ;=e$H(=1)!YAL0Vdb0i6^u8R(St@LoAEL79)ikdb!oe|MMC0-my6b{$pho3~3vaXFfm};~td&{^|ZPA6Y`zcrf_<$=iY1ULFj*IP(2G zk7D8ba!NMz$7&?Mlyf-{6^mYuV+<)UC_8Bv5-)AfQljy1vI_h(Oc&G`w3FG4sczn^kobSiUk`C6Y4a}Kp_9)!_5@%FNtAV`{q3UZ^!11SK zD)6n52DI~a=KG@~jmzgR4dZjgmhm3fpIoGm9vI1orMS!l#BLeP`5g?9W7(DEPLyV2 zA3h5-@!wqQ^HRdH^ZpGMaNZ%~X`8cpy9WOW2}dpGr(mO0d|tErQDgi9@Js%14#1Bn z6M6aa=e(^QHmwdiJjR0|8InVTBc(Xh(ycAJL~gjM!~ttI&cOZkvkmr?)R#{bst=X9 zpR#G{=6b)a-UZU^c$PSrY&z45UtwOSnRL36A>B`&8V(TW^ZZst3T`h_bZUN{QwQty z%$>AVfQ;uB>!2#l?v|~XE=hknf0(MVs4n{&^LNu(3jwI6~XbH;2{|LY`cC3k-}JPQ{J?u|y;AIB8NPy2=~YxLJL{7L9nI2W*JQohvc zuj6~{0j7WZ+uH`Z+8D5>e5A_?M4+z$T35*tvzudhZK;Xi$=(ZNqI++LOnBYuG)Pup ziOX3Un>6dcJ?Gy#7z68r208M$Zjg1uuc^0#=y4$iVLqv1RM=$7vn=$<$AFD9Bhvk` zyvtZbo_*`^4EYnDYwqSP|JJiGkK&kEYs!iPKPh+ms4y`i7vE^|I|UPP(O;HbQPab) z{bjSv-aH+z0Wt0owJt0(hvZKZK5^$1-k_yIVXpbEM~+p-s$$!13>hI`PqypPJ@oVq z&g$;IG;%%>E+2M|f|~{Zkh(kr3j)BmSpopX!7r&9wq#&W&V0>^f|O?u+g>CZg4Q$f zgCh1*T7Qn}z1QTUqm4-$SvaPKm9?=5WAnX&=x7e8C4|69l2kOd-Rs%1J^pGqMs<;S zd(U^T@Yk_yVv83$yDT~5+oOK?-R05RQi|93E>6h{d45BAeM?L&H~p#gKSJ~-^y!UB zDfoYMwq*7ZG|Ig6&77as^M_e`wXvss66d4C#S7 zYXTVUvg`!NtMba{NYJ(JRb&Au{wFuxTGUx_6lIMu7j*wSiNw=FW+-aT8)Bf7-Ma{< z>MA8PZT%}|6k|dd5J()j-fc)1w=}E!Bm|;TED2XFefE(~T|8e-Z*80{XjD-J){-jI z2Jr=2xMsQ(t`x?1kO5GGrIP)iAKY>vwqQre5U&FM>dBuGpQ@QFUxpexZKP1ij1U@Y zX{@F8qkQJeZoplX`R0CZ)9|_g@Zwo1UtF5Ca^xPXDe~v6{ap3s`iBPX$JlgGNy)@u zX+8%!j2`Sr51{;%+!Ykufu(p*n=TYCB!I`)_qU#Y?WTNb^*ZUaT$x_;l-o2W&F_H*vslvPbXWAGH4-}2;~ckm?b zXT?o9$)e8U2Uq9xDn>MZKG*3NrcuN7^m@b=c&49Vf_daa=NXz0Ajnm=et`5!W@4ez zn&+a=jGlR(q5tnm%}mqJx0YSGAIy!6Mp3x8m}_TbD|3Fcj&j!F)%m?a^L{fsXoLDU zWJ;WZt$#@7eVf+iSId}wQlmr$NIYT$0|fp4 zzOrw$g-#Upct02h$1vx+*SB&OYv&vyF*=f=m2&(3kj0z~XhLtnSN>k|viWLD7ZYlT z&i?iEz~R;bA9Xk#wq~8lkrP-QUe_TkB()yvP}rt!cWzsFn3Y8Lb5|M!A}sNjwdY_g zaWiVD@m@E&X!{BVYH3XXbbChtyemz)X9>ogLH&p*PY&#K{*4vr*Zx4)i#AKLjq?04 zbWQ-^YGXi$qZ86KGzz+muXCH z!rv3wjp?J7@U@|hQ`HtH9I6x3a)fcAYPF4k(?N0=eLIN6X`Zwk=(WRuT%3&M>pzd5 zxlYW?BF78%4u!2Rd?Qs>e zbJarvF1(;HoE|m!DbY|fF+Oy=qC|_BT>yQKaJ^Qv-^tNA0P)RwqhS|nzOXx-4R)|9 z+3Bc@0qv_V?zINY=y)#*iadyPcMwE!kLm8OraF9zqzW#f_6~Ur*;~2;>&kH*&)fBg z8knjS(1UM{h9K6u zM65?mu>QY%59$pfS^IpaSkSJp$AwU0YTtO>j2#31b^#O%_8_w6;S?-4>gHX?X>%Z5Kb zebq#cX%T5b>918eQrzy}HYAPmfwztV0Cz%_*u*>Q@06w_=8@_C9MOz$FSTdBf}VfB zBr}$I>ZYxofTik*y0ifQu+kh_O-AmzwM7=X`1M=-0Nn*?A!$MT2Er{XxQ6jvcUzbg z%3KP`yz^T8z%kKi_d~IuXM^g3hTM`_R3C3ShTV@1$44CG* ziZW|^2tNnRE>jGrDB$ep1OC|=>-`u6T|MDc>cs%Dfr3;jBu@Pq0 zbO1z#(@{#=%X-cN>@`B_}Hq(f8R>_yn=^tg&>OCBP+TvB`jfgXQ4XRts#9IdQ?$G@_sOJ}gzn`-aivi)(fe8cC zrDsaVw&(8>F?qtoJN+=`fyEeO#)s4^^?LKWUz9pc4D;~&J88if?*2>+&krJN+qU|$ zEn5D%0s;w9)`A@{7u zG28WcrwJYEM%j|B_U|pr3r}PXvfVyUqJErB_ltG%u3%MW4{gYu7(S2au_o63=^l!xEAG6uQ8zQr}0Ew20bFMelQhd<722NYR6M_|*w zam&<4rxk20iyliABgXtBw8hN_@%Md4l}FOU}4O!8cbKR8gu?B_ta+6}Mz4FuBW9LK}WKa;JKBaFzR_ zjpml>Jwvnz!2~n7S$V=|)G-!yHA2Ha-y@Jq@Rf`!w$^2k>-2TxtDR?qPmodC+Y`EC zzr(2GlpM#*TM+<4Rgf2_fng}x;oup@m8xlR&7R^*w@M?<-JHUBhWR12{QgU6&Z=Er zihY}z@dcKsu@ldRU{*{y1U+!s)Z;LG89rwQzvveRVCPq&haD*n3WXQ(&lQ)vucLJOfiE<(no469dl}Qp@&>xSx6ued9Evs0Vl{yXfD(YtO zYl>lh6FQy2&D0kB7UVgfP@>3xIa$c!Vdz-X&>RK!ATd#n|I}xj``!Aftkpkr?0H=z z$Fv(=KbuL5_9dIipGKELui>WhL<6;TEb@v8J%UM>&OJ}aubRgRdm5B+-O0rWjDwqh2|V%EGO|ItnP;qrquhV^Im@THVv_N|f2`{lpkMIMeL9f7a~ zvS)n!3y~^ZMBpz|I^=@a6*lYLaNg)ci%1*CL1pXBRP1T!{u{P78a#$FdO95S5&Q2w zo_cl|`*$x%@hL~~*{%9p*?rItbMyA*7nc>sf`oDlOaHa}*_pF6u~11dYYyvKAw~6< zw6~4x6_&Vym>I9VkIhh2DQ36}l*>|l5%uru=WR$Y$H)?VT<&eoH3fCPhpiIAcVAr3 z=zU1e*|DCrUfJ9q_w$|F4Q$JFqv$C_>eWUx^~?>f=aM{}OxnybLogrt_9e``Pf@#yz`D_}FSJ6Z+# z+AvV|d3^7sx>|p2M=x{F?q=nm`yXJ9A@Ba}S<7WBjv5wiFjBR3QFgFcHq6r%56x{j zdht}L`dq>k30pB_`5gzlVus>w^2is>Rlu+;&RUc|lcV##B1gBzim~~BG+k9#n_aUF z!AtQL3KX{%EkRn`-MzRwf#Pn3BE<=A!KDm%NFF&#&RM6_$5-tF#OAsEJ!}?&+Ysv*=X(ZZRhn7yds{T+oCD7 z`4Er&sq2ZKyHpg-S?7VL8y3qgPX**$TN;8!nGwORBXLeUne9ok33f6I1!NC2kX0~o zdy=>st`?1>g=n`KvXis0;)_``!$pGf0+z4Q!)@S;D+dcAX{S^P)IXEzWOzZ(t!-K|V#y_9Kedo4!Ja{`~?*Ka2! zg5~&(cWQe4`+FXMKopY1RADe<-5X?`3SQV-OV5Mbp_P|COwKM2t@RFi3JgZ0qQ6NS(b2V4A9QjQzLP-1%115`h>RG~Zy! z6JtY}+byPDHI=?3%5_r_5azvx4eGVA2{p2u&nySqGS_aPsVZT!$^o4H`-@V?+_5O^ z8YXC+I?2@*oj}_ouFfzzIi{DIJiFp3E34AeR?0({(lT^*Trv;WN6%DkNj7UpT*Av@ zu%nL#COc9MzMDlBD9(yeKj_5tW&N3PrT!$U?mel*SiMhsp=3L-(8H(HS=$2O`Z&h$ z;@!VCbZFqWf@%!jXbRXD!-d$dPy;$1tdZ_M*y?S``O4`#fqprU|A?X(mn4%s$|W(p zBj9Y^*0lUKN@z+1FaOagfCVVczxe1Sus%0(x&oh3P=bTyW_18})N2gBWB@MI1 zp+8mTx9WtAm(XiZe36|xqMbJio(pP*6mkN93Ct*^d@R_aMXHiIjNFOb5j?nFY9r##A@`X>Uu` zOx|=XN?c!T^)N?jf^V&1WSesR*ceP`wZqt|0Lm&>B!pdY02IfsafFZUoU>Vg3W#D8 z)(e~$rKyY%I()(boX-%MYUuQ!JQon99RLB_iD5kE+wa~dT0M5mM6o>zJz55Q`?@Qh zvw|9E!}5sRK6AW!Z)VwgDeCj{q8hh3L_x8DHS?K|epHk6+8_!JT~D&zuZq?( zvc|2Wn6(%m#UY!;BNFQh1ywRrFNz1bNIPxwW@f50WIv+_VOCq($NO33gxPUu!_>B6 z-K8w0+E zCdt1nk$zx!bE;}Sm*x2fRN)}AG$X0!_H%zodPNGeD!;aVI_uE7JnBG#gR{C8QXOIi zwjq;kp8sZjQ{iu`wDXNOEOU0AHYdfiJa>C2Khj^Uw!Th1eM!kx-EdOdKwdk2)|S}M z$mx#fG*iKLs!+VYce>i7_YL!ms+TqnSauYAT$QvJv^`k>eQ@;)j@evPX_HVokw70g zpZ7==SH7!SXnzm}-Ny#m?X1~<3duviVIWqZPZRO9b^tU0dASO){ z^3$g9of-+4v7Wr6Zi=JRP)&{0T(vI7rx(t2s%Expi*>jy9~Yt(Lo+g_q@uz|>;U#me(RKG3@{;Bf3Z3%tj8hvCM;e(lpv_v{$g z_-Mq4lFWuTz*6M4AtL1H(;v{4*|s%PslJ}v4vAe@B5Akty2AoTVAmt=ya`Qn_!oyAwM}F?YvzM7+9`U`1sD^90p*q1G!)9h+;=w5os?o{(v%K&cU+Ckf+PpRV}~*hWA}5K5B7_ z6!z!0I7Qudm2C4kmrf%@a>fb%8iRFbkdBj+Es40cfv!Q2P&p}e*2~~qVsaGgHUG>{ zy_n3SVepv7CB z-i3Ge(SAGJ4W5f>yb)#*d0&B+e|TinJLdHvlXtcb!b#@Afw<)PS6Z}mp{=Rr$Zd3Y z?!pECGglX?VoW0RN^~aWR!4|H`MjW^W`4G^c~Jg2;pF~e*57Y}(sqA+VAAvvbL>Sf zaFIBDCZZ9(6(4jphjC1UwEZ5=!|~kPg4Q1wtQu->bs|6qgK2}z_lmS_#`fM z<|~_3w{-%?6kJ)1J$YfnhIwvKHtfrT-I7B2;u|>vp#uwF&M^RYi2We6fbh>ZpTEF% zEFXvFGWOT^FrqC~F#s?_-Sx^ociG4IU$6tm+qrG0}h+N_b~F z)hCJ=c*bjbs(W0LDo2oNUYP6;pTzK4%O>{~_c&_uuvt;LAh9ZvuXrAOyy67$9Z%mY z2?q)q_$C`L%V1P!2Jv&c-dfr_zbULqDP0X7*GmO=K4L%9keX+Lvb^{tjMTS2Z0P9m zHo3kZAHE>)qBEQN-axl0r~ZtRa)+wVl(imj8YPtA>G|`hRGAp}GY(k3%`a^MvEODG zYio66doAzJJmPYqaWj)_3nWL+W1}H6qyW}fR9`bjhwJ?1hzp8$GnM-wv5A)bDc$x9 znC56t;(>MISE?S4BZt;ufV6MmB($IK7iFzQps~PM-KY%(CvaLCb!pPU%3UqV_zZj^1p`vfHQC zFO%R~RO>oFNUY6ZBmbRTd0u~kZcqV?Io8l?nZ7SBg~Puvwb&GOlqY6O8{gR0&V)5{E?oxpvV|x`cAAv`Ft;eybIKKCHN`GQ%wg~KD zWW`5oz7q+)-7>agajBi{g>(6irT5;;td>Vl0hzW{)!7*4#F?8MQu$_NV1%vGRWZy%`ZrH6n63F(if$WP$QrZ{p zsQId=vJg*E(>@Qm)V}ft_2goXq?j}q@ey+@ymEqBFpuuPu=$SRdf{P>YGOPfVO)>z zdB@;l|B2L3L&{0CHh#M44a!ghFKt#D>f30LF!*DFy0^jo(|ndcpJ8FH`(kos-7h16 zh#Gs?jBLZfQa`E)83qYglI&v6M}xx;m%{)iWb%kEhMu@sumYuI_(?x#TvXOoP0&gq zxyWx|=HpL4wI!FR1{ZVdgyp3IO5eIIzV@yWu)@e?(6cPf7#c;%-snpz8e5xwsXB$Lb9 zguKx`?q?JEqu7L}r)h>!qiR9-`4lgMH>oaTX68t1NQo5n>gpjoMVgWi)tlF84XCD6 zP^CvI)=c#=eqQCx*K+b&9K2edTG(mHHvad=vFt^^WqKo>p+Zm_}Y%D&nx1ba^DZ>=W&O448>Avsx?GG*PiO#g3ZnZK$U zXyC#o*Cge`>6oFM*}VBCzKCZH_FZt+t$@q=<#r4^BmmWM%hnM@O#W$U?kP&(6-?M% z@boFV+Z>D@b=E=Q@*1>CpEH-@9lF^;GI;%=?bIf~mbpzsQFclzChbURCn4F+z?}UZ z#k=R@C_K#n$mV;XKHzJUdS76K2vHEE(f*lMR?jfK(0#$B7{%ZLv%dTy2j`>Pj!Er+ zyO^?-YPv{hk1E5~1H^p;C_XBcUO;PFACx*iJ6{*Na;GeE@rW@UI_)0ytIR(sR%p?| z$O2YB)Ks(R?l}vU56dcmZkEHmvJXXjlT=v}E8Tph1NhLAf(_mr6wk+u><`TiUA}bC zoavi?C*GQ>3?P1C1B{(F#`xFs-reb$2kpxXEPEH|8o>cmxi>%sRt>u6#ks3jZ8`?e zr+d*shCTA;R#BxfdV42`)WXYgOV*q2&NrJf)3QA@I$2bC8<_UT42wh0&8i$2dnfEe z^3?3}Vj3w7-VBc5qNx(Y_=aTsLy1V79_WR_(3n0!NBX3YJ^Dg}Cz243SSrq7wAvC@ zTAFE4b~MgKQjgiHuKC)x=7K|_ZTMKCNenhZGP0-(&1|^j z{(7kAm6IFY9ZkD&bmPyQyw6uRt!*ogG86FN0GR*IcHHtp2%TMhLs`atlZTj}K#qO( z<7~ZKl8Ci{;D3O>^bM?Ee!m4qvGrD#Y}EGESfd#X1RVJ zCuifA-0L%d3Yl!ygENHiTmy$=`%y_h`DAE!$H1Ux=Vk)2&w*fts|)(@lTuISQ}8d= zb*z6wR^TNlR^8THl3r%TEAp1Fcva52{mG38o{|6;PG0ke|4r=-h!DX5#vi|HI&|CZ zG+U+Nmts@kJ|CQ+rBCLXth9}I{S`c{`A6@aUPnzX4z*Ev@Y(ZK3$(smpuBcDE!(ZA zro`#l>Cu{)IC`!;vd~P4B@)Hxxg>Ng<*j;r-RR+ig_;RJ&Hb|fsGn6R+*{5f5&i`(dOoPt}|OJ*fKPbaGj+=T-0b zb7a5q1lnjUy8T@1a%ZvhL4nS0uW{XUhmUeEQ-k)-I8!Y*4{AaRznzS~$EG~w#lYJx(tS&Tha)r{?Af<)9dZ;xS~xa+@v!&&-3{uBb(G%jL>7kyxs=C@R0I=Cl+`Qdg-)rke zwE6xi@0XR>(chBhI={922^nJQO}@Xedv85uXjo*lAyST44aiR#HKBd#TnoQDlSor~ z-!jJ?p1qm$Z%}hEig9<~e0;yy+4h(KfuuATe`>qmVy2lOzI=ntPC)1xeV|m;oszBX zhHOueOa~!)uh*IWd`DX8v*8j-key&2!OgvJr&m8L@2$&NPJ85K&#uIAJuY_~+LF3r z00Ux-MSFHFSe=WZtnbf}vkJi11TB9fjnGnWaUbKHVq6&k)*p2DmXgz+f-g~c1&th7 z!TdU?iU$dQin-`6;v(!?vet$~(YT5moSXFk{3z#_0h4n-fGwN=*kA=xSw@{CLxUhs za4?jS{ozq^!P6;z-dM*1r6>}-5|bALZQBxd9QA*7h88!bA6<2>~RDFJ8}Qv!(?9gI?ve zwi!Y;+5aleJEW20|K$=l%FRDAdUO8(V((QLN#O9K<>SMeIgFCFI{+E4 z1oG6qd_Lbee44P9aJC%;IC?`3yeL#)x6kjR=Y*-n`e@jXZs$&%^6{7hnQ|AfHFFOOC&vo06-}O4@ew2fQdGRPF><8cf%1-PV__j{9L&n4xLhCVFqyroNj&4KRU)L?-QEYxz+_h@E{)18 zgTSVVj=zA1$CfmW=5flLI)60e#^yQ8E=_*(;NDn54MHK74;COoNhCS~XTdcQ=muxY zpu^F_dJ4k`p~}Is)(zXAhrW7RZXB{YX~lD54jxuGFD&|NtLOf6*%iEY9XTxHz2Hm| zz4*s+U)2%-;{J)IqotijxDs*P(Qkr&ya?O>E~r;yc9}82^h;qixfN^O=C;)(gI#72 zxmyT-pBKRr_U|!GJtaCNjbRinGA~zf>6E^kJiGy=@J-CTF^{D81fzd?Fj*J#%m{VQ zHH?lzVwrYwBT&9>gQJDEcdBYnzkXIkT+^EIHL|3zGce!Pfa-N6?Zs z-0A>ET)~oP2g6Np7JT3-=xQ3P5`O#ToxyD5_&a4hp!dnpoaj)kSh@}IOiU>AW}H=e zbtc(bl#E=U{R-%vf}zJ8WxC7Zp=ve)26m`BQ3H2Ol*c4;c!2!*8y#;8%j}pND%O=4 zh$bBT0IVdgmhwM1i*5coLNqfv`%br7enen1I*qLk0VyNex0s_1Z5(Pc#?`!%f)eUj zS4yWmsfy9lt-Bq>uFIFGyhJqPtiWJ#BV!z)(=6C(1d;zly=BRt<9T^y zMZs{#zR#$0uirnj-AwA>TZSvld}!mLahcg~-N4m4NI+;dA^~{wQAZvD=azI5IUGR# zGeOsxo?}0S*WU`;IDTF-J+P%=vT{bE{Yz4u)h&;LZSwhFWY?WUUW)|(z9~GJ1oIb3 zqO!k48limg+c0{d>C~WjQ1?H^Vt*qMQ1ni1VxL#dCyc~kn| z>_h;NnZ+(fWX0+_qjO@q-}BbcW!JI2FUsTGe-4&#Z~HbpbfCmG-X0%e5pC(|X#Bb= zyQ^ACR#1()KJaeCn)%I4Y3rfIc4;+GV>LGVJIanRnLQ<9#|6Z1HEJ(-3fs$kNwkXw zBQpCT0$}O&Kg|^YG^-6Ohbz3Kcvo05s@HDpn~x>AEqO(UeC8b1B%fY%cT3uxjrgtT zK)5i?mSDunl(Jt0!(4fg_Z(btB|}cIp06ErHRPEa8|d_iseF#or-9_(LjwAXqK#b1 z+wLyV#}j&iN9++s{ajzHrRJW98Q>4q^MTEyoDY$qw4{a~gbD9>YTdT)%m0khTbIul z#QW14vyc6WN>1dlc>j4Xs^OMH+JqX2a7gghft{~1=|W{t+*d#QrWYg`DbpoK2Qu7} zhD|9Gf_J(b6f#QyON1DCt^1$cc02+HBfc{IIlo;b3pWa?lhF_RrgEmc`;CB9WtslFq{QHLHskLE8N1?6YqFYHg-@;2Rr0YoV!{^!S%E zn=e{0&ZQXVGo8(L4RNCs-&A82t}4BmDc?|%FgV`%5y;N_(h)jVVih!rfDsmC1aW0S zc6*=$a^uAbSH(ZYLZ8hJ_<`;`ArTrfqH1SDdF5PICSB=b&dgjHfPR6DdAmGEyMC?o zJ27QB2DZXnt*nBqp&eqR5NHP^CS-}>*pyarz(g5*kmYd&L2$5E3AXNFe|y^O&R^JZ z6H=;zbCu`z$A1YaiO8boW`E_onM-N6joOpHY|hic>4B^?<8=4hw_4gn#W?!#Bg=1h zALX)3FOrNjoZCMLa|XYrny>T=)X$(f*SWQx3Lw`bEmoHH(oGq>^OSSB4$I%~kP(KX zD@f`fl<9Fols|xR2w~T!a1nfjVz}~Rl`!$tO(S#=DFGNP)pLG!Ey~OJ~OMVJ2!QMYpzZ}gYsG_P$`!23CU;z6-tQ)-gZTpbm-E!y(S6!(o^PdQ8?fC5QNEA7=JLV$oy) zg~3aA&A$g`s!lOPYILs0@gfj2wJW#(mQzTI9%G%aP@0$O1{5x@?yPXF(GlG&5UNvg zxCfUa~YW9uxa17#t4 znf@Cr9|OcC+_tqM47kRHj%jS(dd($+gOksxEN#Z+U0IbElW}<8lqa1IvGk0ROI&SP167WgML+g( z-tB~?ELvXa<-9*{j;`@W{(E|(4Li7Z)5XO!z`@?yDzY!JP{~J=qv!!LXjky>$@CSu zoswtM7?8zcK*G6qsN&%jO|$VaMdKz4Ka+9TU##{00s7a&o;{ zp@;JbakD`7xO2_`(#QvC@=I{$Z0r?ha|G)^#7aa9S?4AY8iBn5Hn@wn^t@>7q{qVl ziUGU;8o6js?1NkoN42;o_P@H&2BmYRREh}xtPd9P{^;1BIVTq$3rYhS9)1Er1IAjU z*p(mc@erZPk0NJT(-xV8gdY?wX6&3#a+=BcP_i8ityM)fis*V^%Mu$N$dGSc@=^GaGvK4LTZokn?9zWo-v5Dp5(-cVAi}#z zfTGq3ZS?c9D9eySqqXmI@^j9JPH2(lzVqzM45)6!2wQv0s6*T`ju~Csd>n~!bFjSC zw)UP?ssiH};Dch{>!YFY;8r^LUR!5W#gmhboxO_rf-B1Am~rEW>FW&$<(Y41=KbBJ zIqUI8nsHe|4O6>al|n<}9_e7c{Pp?u?+=%U+NtaoDfeueEEcmZXbbY5rEMTfj!sSY zy^YAZCAP(-=hpoNh9;SmUKt8}Dqy4(RhkpqBI`3kVN>}LNC&Ts)BiCT@K!~BV~F3qSSWoUWw6Uf~ zoTfCC_ct0s?Ru1J_0Y-RxMamcyIvU7F^sFKfOZPm*R!9^30Bs(DPbQ5zZ`$%zNgIS z%Fnix(r(qdyJlFOrGrxgv7|b0J^!v}GNzv#1?UO=MYqhul%4)%ZW+ZEK0f#7xDX?y zh9a@Tv^r%l;o@I+3iHYJtz)#Ij%hXv0t%DE0aoJjDA0-sL`8zcrk-R;O9jy04{=L^ z3fRez+I($KdLW~=T`u>s!aHWzJVm{FKPGNgPL#J@rA2mQ{6-?rj`Ojfw`1DNCzSU; zD$Br%ob)t^oc@59lsD@+{)WD>V|I{Zv1^vgE7|IjI-D&e9{gHac;?2Q{ z@VU?K2zc#-DBT)_F7uZ;wkb8p!ddg-AzDdnNW-GpqP52JmuDIP$gf$Al5V4;P+6;9 z8~?1KNK6ccot<_Oq3|0z?ua`w`&DSh~ueE2JQR=nYMki}MvY zLEb?9gGgTj{x?SRril3w`+=Pn@AUKUXG7Nfr6*BbX~%Xn_I4svphYFCit*v$;G!_t zX3NFJNDIxSEl2NMW8hIeIkcQ0)_9PTJy zmDYYhfu$%HLq`+Ib$1<_daNxvp%fP_00MHK&lF}|eC6X;r>!$CHj~LMC#pcr0A~*?h5wB zLSa+w4EH5w_nz_86ZL}~^R=+AnQ`AGzgwF(P(BYQJO(%@Y;{QFpdhWS+z?#ovds74 zKpBL7x{fa2IM>2E&qjMxQ={k;G=0O91`}bHd1(Z4*H_M;-j3DnPW*fKYCrM*m5R|H znF;zvSt{y=A@kPO!EMfBp%#y4O?Hmr^d1RvM0hugidZ?Xd@a^Qe6~e6Rhb(d3CD<> z1#c6T$3g4)o?VGbxfGM}^Cy=*lZxt<**0{Rn8I{%Wc^RrfnOmq-_3LnnIUw{>=UwH z5!uno33hbTJf&Kcf5RM^W4HBi$8*d0WY-Rv**BI9P^=lFdc2&&7RYGBkW+;C?=T-tyB`h7mywc@YZ5 z^eN> zu2$@^H<8jkw9g42R08-kQgD5|(Fv&MPKtCRB*T;U0F)^9ptdJooeEp)ChkopqLW(w z)MdPK4GlM6-9d0-n5g*oSYUbsHT#My2SCsd7w{zFz$E+ymQC>zS^BY2SKHlCzTJJOy93Xqmw^NXcOA_5v?6s z=e_3TooqQc&2ozmviF`NcTTX^OJ~>)@2*DDQ5>D(u`kI!LSPRJ#^XSDJud!QcBwDo z&X{>Z5fX6arr?ASo|0gFaLOQbBAO~9j5jC1cbS(cI{OdGX&hSgRwNtA{9oJkdJ!8G zxse-F#Pxq=<`+efIL#$5W#h9@ml#IK;FTdB5Vx<(W0(#^oYr-&$@af4B{{P5mtkc} zBxxIA5DwlSxR%RmP{i^xG&P?*wRmt8@7zG@M{-(3S=20s)LG6EAB*P&haYj^RXO

Vp&|C-02%6Bd0mxi1;+cBhBD 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

-^C_l;Oy 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 literal 0 HcmV?d00001 diff --git a/tests/test/assets/splash.png b/tests/test/assets/splash.png new file mode 100644 index 0000000000000000000000000000000000000000..73599e7c55e3d32f1ba32b535070aef2cccc44d1 GIT binary patch literal 75580 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 literal 0 HcmV?d00001 diff --git a/tests/test/maestro-flows/basic.yaml b/tests/test/maestro-flows/basic.yaml new file mode 100644 index 000000000..efff8a922 --- /dev/null +++ b/tests/test/maestro-flows/basic.yaml @@ -0,0 +1,9 @@ +appId: dev.onestack.dev.test +--- +- launchApp +# - assertVisible: ".*Welcome to.*" +- extendedWaitUntil: + visible: ".*Welcome to.*" + timeout: 1200000 # 20 minutes +- takeScreenshot: + path: maestro-screenshots/app-startup diff --git a/tests/test/package.json b/tests/test/package.json index 0785c6963..5589bba86 100644 --- a/tests/test/package.json +++ b/tests/test/package.json @@ -1,5 +1,5 @@ { - "name": "example-test", + "name": "test-app", "version": "1.1.325", "private": true, "type": "module", @@ -31,6 +31,7 @@ "dotenv": "^16.4.5", "drizzle-kit": "^0.24.2", "drizzle-orm": "^0.33.0", + "expo": "~51.0.28", "one": "1.1.325", "postgres": "^3.4.4", "react": "^18.3.1", diff --git a/tests/test/react-native.config.cjs b/tests/test/react-native.config.cjs new file mode 100644 index 000000000..55058c7f0 --- /dev/null +++ b/tests/test/react-native.config.cjs @@ -0,0 +1,6 @@ +module.exports = { + // Setting up and overriding some react-native CLI commands. + // Necessary for building native iOS and Android apps, + // where Vite shall be used instead of Metro for JS bundling during the build precess. + commands: [...require('vxrn/react-native-commands')] +} diff --git a/tests/test/scripts/start-dev-server.mjs b/tests/test/scripts/start-dev-server.mjs new file mode 100644 index 000000000..78d074e36 --- /dev/null +++ b/tests/test/scripts/start-dev-server.mjs @@ -0,0 +1,175 @@ +import { spawn } from 'node:child_process' +import http from 'node:http' +import fs from 'node:fs' +import path from 'node:path' +import { fileURLToPath } from 'node:url' + +const __filename = fileURLToPath(import.meta.url) +const __dirname = path.dirname(__filename) +const PROJECT_ROOT = path.join(__dirname, '..') + +const PID_FILE = path.join(PROJECT_ROOT, 'dev-server.pid') +const LOG_FILE = path.join(PROJECT_ROOT, 'dev-server.log') + +const SERVER_PORT = 8081 + +// Function to check if the server is running +function checkServer() { + return new Promise((resolve, reject) => { + const options = { + host: 'localhost', + port: SERVER_PORT, + } + const req = http.get(options, (res) => { + resolve(res.statusCode === 200) // Server is up if status is 200 + }) + req.on('error', () => { + reject(false) // Server is not up + }) + }) +} + +// Function to wait for the server to be up +async function waitForServer(pid) { + const maxRetries = 100 + const delay = 1000 // 1 second + let retries = 0 + let isProcessExited = false + + while (retries < maxRetries) { + try { + const isUp = await checkServer() + if (isUp) { + console.info('Server is up!') + return + } + } catch { + // Ignore errors and retry + } + + // If the child process has exited, stop waiting + if (!isProcessRunning(pid)) { + isProcessExited = true + break + } + + console.info(`Waiting for server... (${retries + 1}/${maxRetries})`) + await new Promise((resolve) => setTimeout(resolve, delay)) + retries++ + } + + let lastFewLinesOfServerLog = null + try { + lastFewLinesOfServerLog = fs.readFileSync(LOG_FILE, 'utf8').split('\n').slice(-50).join('\n') + } catch {} + + throw new Error( + [ + isProcessExited + ? 'Server process crashed or exited unexpectedly.' + : 'Server did not start within the expected time.', + lastFewLinesOfServerLog !== null + ? `Last few lines of server log:\n--------\n${lastFewLinesOfServerLog}\n--------\n` + : null, + ] + .filter(Boolean) + .join('\n') + ) +} + +// Function to kill any existing server using the PID from the file +function killExistingServer() { + if (fs.existsSync(PID_FILE)) { + const pid = fs.readFileSync(PID_FILE, 'utf8') + try { + process.kill(pid, 'SIGTERM') + console.info(`Killed existing server with PID: ${pid}`) + } catch (error) { + console.error(`Failed to kill process with PID: ${pid}`, error) + } + fs.unlinkSync(PID_FILE) // Remove the PID file + } +} + +// Function to start a new server +function startNewServer() { + const out = fs.openSync(LOG_FILE, 'a' /* append mode */) + const err = fs.openSync(LOG_FILE, 'a' /* append mode */) + + const child = spawn( + // Not using `yarn dev` here since if we use `yarn dev` we will get a PID that is not the actual server's PID + path.join(PROJECT_ROOT, 'node_modules', '.bin', 'one'), + ['dev', '--port', SERVER_PORT], + { + cwd: PROJECT_ROOT, + stdio: ['ignore', out, err], // Redirect output to server.log + detached: true, // Detaches the process from the parent + } + ) + fs.writeFileSync(PID_FILE, String(child.pid)) + console.info(`Started new server with PID: ${child.pid}`) + child.unref() // Allows the parent process to exit independently of the child + + return child +} + +function isProcessRunning(pid) { + try { + // Sending signal 0 does not kill the process, it's just a way to check if it exists + process.kill(pid, 0) + return true // Process exists + } catch (error) { + if (error.code === 'ESRCH') { + return false // Process does not exist + } + + if (error.code === 'EPERM') { + // Permission error but process exists + return true + } + + throw error // Re-throw other errors + } +} + +async function main() { + try { + /** Only start or restart the server but do not wait for it to be up. */ + const noWait = process.argv.includes('--no-wait') + /** Do not try to start or restart the server, only check and wait for the server to be up. */ + const checkOnly = process.argv.includes('--check-only') + + let serverProcessPid = null + if (checkOnly) { + try { + serverProcessPid = fs.readFileSync(PID_FILE, 'utf8') + } catch {} + } else { + // Kill any existing server + killExistingServer() + + // Start a new server + const serverProcess = startNewServer() + + serverProcessPid = serverProcess.pid + } + + if (!noWait) { + if (!serverProcessPid) { + throw new Error( + `Server process PID not found. Did the server start successfully? You might want to check if the PID file ${PID_FILE} exists.` + ) + } + // Wait for the server to be up + await waitForServer(serverProcessPid) + } + + console.info('Exiting script while keeping the server running in the background.') + process.exit(0) + } catch (error) { + console.error('Error:', error) + process.exit(1) + } +} + +main() diff --git a/tests/test/vite.config.ts b/tests/test/vite.config.ts index ce6631e59..f90306b95 100644 --- a/tests/test/vite.config.ts +++ b/tests/test/vite.config.ts @@ -11,6 +11,14 @@ export default { app: { key: 'one-example', }, + + config: { + tsConfigPaths: { + // On CI, the mono-repo may be partially installed and built. + // While the `tsconfig-paths` plugin might attempt to parsing `tsconfig.json` other apps in the mono-repo and give us errors such as `failed to resolve "extends":"expo/tsconfig.base"`, we will ignore these errors. + ignoreConfigErrors: true, + }, + }, }), ], } satisfies UserConfig diff --git a/yarn.lock b/yarn.lock index 3bb801f00..41d5f3cf4 100644 --- a/yarn.lock +++ b/yarn.lock @@ -7940,7 +7940,7 @@ __metadata: languageName: node linkType: hard -"@types/react@npm:*, @types/react@npm:^18.2.24, @types/react@npm:^18.3.11": +"@types/react@npm:*, @types/react@npm:^18.2.24": version: 18.3.12 resolution: "@types/react@npm:18.3.12" dependencies: @@ -7950,6 +7950,16 @@ __metadata: languageName: node linkType: hard +"@types/react@npm:^18.3.11": + version: 18.3.11 + resolution: "@types/react@npm:18.3.11" + dependencies: + "@types/prop-types": "npm:*" + csstype: "npm:^3.0.2" + checksum: 10/a36f0707fdfe9fe19cbe5892bcdab0f042ecadb501ea4e1c39519943f3e74cffbd31e892d3860f5c87cf33f5f223552b246a552bed0087b95954f2cb39d5cf65 + languageName: node + linkType: hard + "@types/resolve@npm:1.20.2": version: 1.20.2 resolution: "@types/resolve@npm:1.20.2" @@ -10938,100 +10948,7 @@ __metadata: languageName: node linkType: hard -"drizzle-orm@npm:*": - version: 0.35.3 - resolution: "drizzle-orm@npm:0.35.3" - peerDependencies: - "@aws-sdk/client-rds-data": ">=3" - "@cloudflare/workers-types": ">=3" - "@electric-sql/pglite": ">=0.1.1" - "@libsql/client": ">=0.10.0" - "@libsql/client-wasm": ">=0.10.0" - "@neondatabase/serverless": ">=0.1" - "@op-engineering/op-sqlite": ">=2" - "@opentelemetry/api": ^1.4.1 - "@planetscale/database": ">=1" - "@prisma/client": "*" - "@tidbcloud/serverless": "*" - "@types/better-sqlite3": "*" - "@types/pg": "*" - "@types/react": ">=18" - "@types/sql.js": "*" - "@vercel/postgres": ">=0.8.0" - "@xata.io/client": "*" - better-sqlite3: ">=7" - bun-types: "*" - expo-sqlite: ">=13.2.0" - knex: "*" - kysely: "*" - mysql2: ">=2" - pg: ">=8" - postgres: ">=3" - react: ">=18" - sql.js: ">=1" - sqlite3: ">=5" - peerDependenciesMeta: - "@aws-sdk/client-rds-data": - optional: true - "@cloudflare/workers-types": - optional: true - "@electric-sql/pglite": - optional: true - "@libsql/client": - optional: true - "@neondatabase/serverless": - optional: true - "@op-engineering/op-sqlite": - optional: true - "@opentelemetry/api": - optional: true - "@planetscale/database": - optional: true - "@prisma/client": - optional: true - "@tidbcloud/serverless": - optional: true - "@types/better-sqlite3": - optional: true - "@types/pg": - optional: true - "@types/react": - optional: true - "@types/sql.js": - optional: true - "@vercel/postgres": - optional: true - "@xata.io/client": - optional: true - better-sqlite3: - optional: true - bun-types: - optional: true - expo-sqlite: - optional: true - knex: - optional: true - kysely: - optional: true - mysql2: - optional: true - pg: - optional: true - postgres: - optional: true - prisma: - optional: true - react: - optional: true - sql.js: - optional: true - sqlite3: - optional: true - checksum: 10/d91b5bb85983508e838e12f75b5463ca87b4dad31e55026dfeeeba9153226d86eb7743b8cedc0a7c8e609e2930f4b7ffff426416c4a939dd0f0e6b6c581b39f0 - languageName: node - linkType: hard - -"drizzle-orm@npm:^0.33.0": +"drizzle-orm@npm:*, drizzle-orm@npm:^0.33.0": version: 0.33.0 resolution: "drizzle-orm@npm:0.33.0" peerDependencies: @@ -12193,37 +12110,6 @@ __metadata: languageName: unknown linkType: soft -"example-test@workspace:tests/test": - version: 0.0.0-use.local - resolution: "example-test@workspace:tests/test" - dependencies: - "@dotenvx/dotenvx": "npm:^1.12.1" - "@faker-js/faker": "npm:next" - "@tamagui/config": "npm:^1.116.7" - "@tamagui/image-next": "npm:^1.116.7" - "@tamagui/lucide-icons": "npm:^1.116.7" - "@tamagui/vite-plugin": "npm:^1.116.7" - "@vercel/og": "npm:^0.6.3" - "@vxrn/color-scheme": "npm:1.1.325" - better-sqlite3: "npm:^11.2.1" - dotenv: "npm:^16.4.5" - drizzle-kit: "npm:^0.24.2" - drizzle-orm: "npm:^0.33.0" - one: "npm:1.1.325" - postgres: "npm:^3.4.4" - react: "npm:^18.3.1" - react-native: "npm:0.74.5" - react-native-reanimated: "npm:~3.10.1" - react-native-safe-area-context: "npm:4.10.5" - react-native-screens: "npm:3.31.1" - react-native-svg: "npm:15.2.0" - react-native-web: "npm:^0.19.12" - tamagui: "npm:^1.116.7" - tsx: "npm:^4.19.0" - vite: "npm:^6.0.0-beta.5" - languageName: unknown - linkType: soft - "example-testflight@workspace:examples/testflight": version: 0.0.0-use.local resolution: "example-testflight@workspace:examples/testflight" @@ -20556,6 +20442,38 @@ __metadata: languageName: node linkType: hard +"test-app@workspace:tests/test": + version: 0.0.0-use.local + resolution: "test-app@workspace:tests/test" + dependencies: + "@dotenvx/dotenvx": "npm:^1.12.1" + "@faker-js/faker": "npm:next" + "@tamagui/config": "npm:^1.116.7" + "@tamagui/image-next": "npm:^1.116.7" + "@tamagui/lucide-icons": "npm:^1.116.7" + "@tamagui/vite-plugin": "npm:^1.116.7" + "@vercel/og": "npm:^0.6.3" + "@vxrn/color-scheme": "npm:1.1.325" + better-sqlite3: "npm:^11.2.1" + dotenv: "npm:^16.4.5" + drizzle-kit: "npm:^0.24.2" + drizzle-orm: "npm:^0.33.0" + expo: "npm:~51.0.28" + one: "npm:1.1.325" + postgres: "npm:^3.4.4" + react: "npm:^18.3.1" + react-native: "npm:0.74.5" + react-native-reanimated: "npm:~3.10.1" + react-native-safe-area-context: "npm:4.10.5" + react-native-screens: "npm:3.31.1" + react-native-svg: "npm:15.2.0" + react-native-web: "npm:^0.19.12" + tamagui: "npm:^1.116.7" + tsx: "npm:^4.19.0" + vite: "npm:^6.0.0-beta.5" + languageName: unknown + linkType: soft + "test-exclude@npm:^6.0.0": version: 6.0.0 resolution: "test-exclude@npm:6.0.0" From 59e0ccf9c646d0260fbacec03e696a9cf340bd1f Mon Sep 17 00:00:00 2001 From: Pokai Chang Date: Sun, 27 Oct 2024 16:29:06 +0800 Subject: [PATCH 12/13] disable flaky tests Due to insufficient resources on the GitHub macOS Actions runner, this test does not pass consistently. --- .github/workflows/test-native.yml | 242 +++++++++++++++--------------- 1 file changed, 121 insertions(+), 121 deletions(-) diff --git a/.github/workflows/test-native.yml b/.github/workflows/test-native.yml index 3441ea369..6ec472021 100644 --- a/.github/workflows/test-native.yml +++ b/.github/workflows/test-native.yml @@ -29,127 +29,127 @@ jobs: with: configuration: Release - test-ios-native: - name: iOS Development Integration Test - needs: - - build-ios-test-dev-container - runs-on: macos-14 - defaults: - run: - working-directory: ${{ env.test_app_path }} - steps: - - name: Checkout - uses: actions/checkout@v4 - - - name: Install - uses: ./.github/actions/install - with: - workspace-focus: test-app - - - name: Start Dev Server - run: node scripts/start-dev-server.mjs --no-wait - - - name: Download Dev Container App - uses: actions/cache/restore@v4 - with: - fail-on-cache-miss: true - key: ${{ needs.build-ios-test-dev-container.outputs.built-app-cache-key }} - path: ${{ needs.build-ios-test-dev-container.outputs.built-app-path }} - - - name: Get Simulator UDID - id: get-simulator-udid - run: | - AVAILABLE_SIMULATORS=$(xcrun simctl list devices available --json) - echo "Available simulators: $AVAILABLE_SIMULATORS" - RUNTIME=$(echo $AVAILABLE_SIMULATORS | jq -r '.devices | keys | map(select(test("iOS"))) | last') - echo "Runtime: $RUNTIME" - SIMULATOR_INFO=$(echo $AVAILABLE_SIMULATORS | jq ".devices.\"$RUNTIME\" | map(select(.name | test(\"iPhone\"))) | last") - SIMULATOR_UDID=$(echo $SIMULATOR_INFO | jq -r .udid) - echo "Simulator info: $SIMULATOR_INFO" - echo "Simulator UDID: $SIMULATOR_UDID" - echo "simulator_udid=$SIMULATOR_UDID" >> $GITHUB_OUTPUT - - - name: Boot Simulator - env: - SIMULATOR_UDID: ${{ steps.get-simulator-udid.outputs.simulator_udid }} - run: xcrun simctl boot $SIMULATOR_UDID - - - name: Install Maestro - uses: ./.github/actions/install-maestro - id: install-maestro - - - name: Wait for Dev Server to Be Ready - run: node scripts/start-dev-server.mjs --check-only - - - name: Get a Copy of the Bundle - run: | - echo 'Fetching the React Native bundle in the background, since the first request can take a while pre-bundling dependencies and producing the first bundle without a cache. The bundle we got can also serve as troubleshooting material in case of a failure, and will be uploaded as an artifact.' - wget -O bundle.ios.js 'http://localhost:8081/index.bundle?platform.ios' & - - - name: Install Dev Container App in Simulator - env: - SIMULATOR_UDID: ${{ steps.get-simulator-udid.outputs.simulator_udid }} - APP_PATH: ${{ needs.build-ios-test-dev-container.outputs.built-app-path }} - working-directory: . - run: xcrun simctl install $SIMULATOR_UDID $APP_PATH - - - name: Test - run: | - export PATH="$PATH":"$HOME/.maestro/bin" - export MAESTRO_DRIVER_STARTUP_TIMEOUT=180000 # 3 minutes - maestro test maestro-flows/basic.yaml - - - name: Upload Dev Container App - uses: actions/upload-artifact@v4.3.1 - # Only upload if the test failed to save space - if: ${{ failure() }} - continue-on-error: true - with: - name: dev-container-app - path: | - path: ${{ needs.build-ios-test-dev-container.outputs.built-app-path }} - - - name: Upload Server Log - uses: actions/upload-artifact@v4.3.1 - if: ${{ always() }} - continue-on-error: true - with: - name: dev-server.log - path: | - ${{ env.test_app_path }}/dev-server.log - - - name: Prepare Maestro Logs - id: prepare-maestro-logs - if: ${{ always() && steps.install-maestro.outcome == 'success' }} - continue-on-error: true - run: cp -r "$HOME/.maestro/tests" maestro-logs - - - name: Upload Maestro Logs - uses: actions/upload-artifact@v4.3.1 - if: ${{ always() && steps.prepare-maestro-logs.outcome == 'success' }} - continue-on-error: true - with: - name: release-maestro-logs - path: | - ${{ env.test_app_path }}/maestro-logs - - - name: Upload Maestro Screenshots - uses: actions/upload-artifact@v4.3.1 - if: ${{ always() && steps.install-maestro.outcome == 'success' }} - continue-on-error: true - with: - name: release-maestro-screenshots - path: | - ${{ env.test_app_path }}/maestro-screenshots - - - name: Upload Reference React Native Bundle - uses: actions/upload-artifact@v4.3.1 - if: ${{ always() }} - continue-on-error: true - with: - name: dev-sample-bundle.ios.js - path: | - ${{ env.test_app_path }}/bundle.ios.js + # test-ios-native: + # name: iOS Development Integration Test + # needs: + # - build-ios-test-dev-container + # runs-on: macos-14 + # defaults: + # run: + # working-directory: ${{ env.test_app_path }} + # steps: + # - name: Checkout + # uses: actions/checkout@v4 + + # - name: Install + # uses: ./.github/actions/install + # with: + # workspace-focus: test-app + + # - name: Start Dev Server + # run: node scripts/start-dev-server.mjs --no-wait + + # - name: Download Dev Container App + # uses: actions/cache/restore@v4 + # with: + # fail-on-cache-miss: true + # key: ${{ needs.build-ios-test-dev-container.outputs.built-app-cache-key }} + # path: ${{ needs.build-ios-test-dev-container.outputs.built-app-path }} + + # - name: Get Simulator UDID + # id: get-simulator-udid + # run: | + # AVAILABLE_SIMULATORS=$(xcrun simctl list devices available --json) + # echo "Available simulators: $AVAILABLE_SIMULATORS" + # RUNTIME=$(echo $AVAILABLE_SIMULATORS | jq -r '.devices | keys | map(select(test("iOS"))) | last') + # echo "Runtime: $RUNTIME" + # SIMULATOR_INFO=$(echo $AVAILABLE_SIMULATORS | jq ".devices.\"$RUNTIME\" | map(select(.name | test(\"iPhone\"))) | last") + # SIMULATOR_UDID=$(echo $SIMULATOR_INFO | jq -r .udid) + # echo "Simulator info: $SIMULATOR_INFO" + # echo "Simulator UDID: $SIMULATOR_UDID" + # echo "simulator_udid=$SIMULATOR_UDID" >> $GITHUB_OUTPUT + + # - name: Boot Simulator + # env: + # SIMULATOR_UDID: ${{ steps.get-simulator-udid.outputs.simulator_udid }} + # run: xcrun simctl boot $SIMULATOR_UDID + + # - name: Install Maestro + # uses: ./.github/actions/install-maestro + # id: install-maestro + + # - name: Wait for Dev Server to Be Ready + # run: node scripts/start-dev-server.mjs --check-only + + # - name: Get a Copy of the Bundle + # run: | + # echo 'Fetching the React Native bundle in the background, since the first request can take a while pre-bundling dependencies and producing the first bundle without a cache. The bundle we got can also serve as troubleshooting material in case of a failure, and will be uploaded as an artifact.' + # wget -O bundle.ios.js 'http://localhost:8081/index.bundle?platform.ios' & + + # - name: Install Dev Container App in Simulator + # env: + # SIMULATOR_UDID: ${{ steps.get-simulator-udid.outputs.simulator_udid }} + # APP_PATH: ${{ needs.build-ios-test-dev-container.outputs.built-app-path }} + # working-directory: . + # run: xcrun simctl install $SIMULATOR_UDID $APP_PATH + + # - name: Test + # run: | + # export PATH="$PATH":"$HOME/.maestro/bin" + # export MAESTRO_DRIVER_STARTUP_TIMEOUT=180000 # 3 minutes + # maestro test maestro-flows/basic.yaml + + # - name: Upload Dev Container App + # uses: actions/upload-artifact@v4.3.1 + # # Only upload if the test failed to save space + # if: ${{ failure() }} + # continue-on-error: true + # with: + # name: dev-container-app + # path: | + # path: ${{ needs.build-ios-test-dev-container.outputs.built-app-path }} + + # - name: Upload Server Log + # uses: actions/upload-artifact@v4.3.1 + # if: ${{ always() }} + # continue-on-error: true + # with: + # name: dev-server.log + # path: | + # ${{ env.test_app_path }}/dev-server.log + + # - name: Prepare Maestro Logs + # id: prepare-maestro-logs + # if: ${{ always() && steps.install-maestro.outcome == 'success' }} + # continue-on-error: true + # run: cp -r "$HOME/.maestro/tests" maestro-logs + + # - name: Upload Maestro Logs + # uses: actions/upload-artifact@v4.3.1 + # if: ${{ always() && steps.prepare-maestro-logs.outcome == 'success' }} + # continue-on-error: true + # with: + # name: release-maestro-logs + # path: | + # ${{ env.test_app_path }}/maestro-logs + + # - name: Upload Maestro Screenshots + # uses: actions/upload-artifact@v4.3.1 + # if: ${{ always() && steps.install-maestro.outcome == 'success' }} + # continue-on-error: true + # with: + # name: release-maestro-screenshots + # path: | + # ${{ env.test_app_path }}/maestro-screenshots + + # - name: Upload Reference React Native Bundle + # uses: actions/upload-artifact@v4.3.1 + # if: ${{ always() }} + # continue-on-error: true + # with: + # name: dev-sample-bundle.ios.js + # path: | + # ${{ env.test_app_path }}/bundle.ios.js test-ios-native-release: name: iOS Release Integration Test From 2c1d71bbc6596f854043e2ff20ce9a1898c53664 Mon Sep 17 00:00:00 2001 From: natew Date: Tue, 29 Oct 2024 09:26:11 +0800 Subject: [PATCH 13/13] bring back keypress handler for ctrl+c --- packages/vxrn/src/exports/dev.ts | 3 ++ packages/vxrn/src/utils/bindKeypressInput.ts | 46 ++++++++++++++++++++ 2 files changed, 49 insertions(+) create mode 100644 packages/vxrn/src/utils/bindKeypressInput.ts diff --git a/packages/vxrn/src/exports/dev.ts b/packages/vxrn/src/exports/dev.ts index e38efd748..bd850a2f4 100644 --- a/packages/vxrn/src/exports/dev.ts +++ b/packages/vxrn/src/exports/dev.ts @@ -15,6 +15,7 @@ import { getReactNativeBundle } from '../utils/getReactNativeBundle' import { getViteServerConfig } from '../utils/getViteServerConfig' import { hotUpdateCache } from '../utils/hotUpdateCache' import { applyBuiltInPatches } from '../utils/patches' +import { bindKeypressInput } from '../utils/bindKeypressInput' import { clean } from './clean' const { ensureDir } = FSExtra @@ -35,6 +36,8 @@ export const dev = async (optionsIn: DevOptions) => { const options = await fillOptions(optionsIn) const { cacheDir, server } = options + bindKeypressInput() + if (options.clean) { await clean(optionsIn) } diff --git a/packages/vxrn/src/utils/bindKeypressInput.ts b/packages/vxrn/src/utils/bindKeypressInput.ts new file mode 100644 index 000000000..1e7e18223 --- /dev/null +++ b/packages/vxrn/src/utils/bindKeypressInput.ts @@ -0,0 +1,46 @@ +import readline from 'node:readline' + +export function bindKeypressInput() { + if (!process.stdin.setRawMode) { + console.warn({ + msg: 'Interactive mode is not supported in this environment', + }) + return + } + + readline.emitKeypressEvents(process.stdin) + process.stdin.setRawMode(true) + + process.stdin.on('keypress', (_key, data) => { + const { ctrl, name } = data + if (ctrl === true) { + switch (name) { + // biome-ignore lint/suspicious/noFallthroughSwitchClause: + case 'c': + process.exit() + case 'z': + process.emit('SIGTSTP', 'SIGTSTP') + break + } + } else { + switch (name) { + case 'r': + // ctx.broadcastToMessageClients({ method: 'reload' }) + // ctx.log.info({ + // msg: 'Reloading app', + // }) + break + case 'd': + // ctx.broadcastToMessageClients({ method: 'devMenu' }) + // ctx.log.info({ + // msg: 'Opening developer menu', + // }) + break + case 'c': + process.stdout.write('\u001b[2J\u001b[0;0H') + // TODO: after logging we should print information about port and host + break + } + } + }) +}