From 478a981996653f3ea369f8cf9104cecaa74d141f Mon Sep 17 00:00:00 2001 From: Johannes <72809645+jobenjada@users.noreply.github.com> Date: Thu, 15 Jun 2023 02:53:56 -0500 Subject: [PATCH] Improve Dev-Experience with a new Demo-App to test the SDK (#372) * update demo app with new UI --------- Co-authored-by: Matthias Nannt --- apps/demo/components/ConsoleFeed.tsx | 29 ++ apps/demo/next.config.js | 2 +- apps/demo/package.json | 1 + apps/demo/pages/_app.tsx | 8 +- apps/demo/pages/app/index.tsx | 543 +++++++++------------------ apps/demo/public/fb-setup.png | Bin 0 -> 6332 bytes pnpm-lock.yaml | 236 +++++++++++- 7 files changed, 435 insertions(+), 384 deletions(-) create mode 100644 apps/demo/components/ConsoleFeed.tsx create mode 100644 apps/demo/public/fb-setup.png diff --git a/apps/demo/components/ConsoleFeed.tsx b/apps/demo/components/ConsoleFeed.tsx new file mode 100644 index 0000000000..d359eb3eff --- /dev/null +++ b/apps/demo/components/ConsoleFeed.tsx @@ -0,0 +1,29 @@ +// @ts-nocheck +import React, { useState, useEffect, useRef } from "react"; +import { Console, Hook, Unhook } from "console-feed"; + +const LogsContainer = () => { + const [logs, setLogs] = useState([]); + const messagesEndRef = useRef(null); + + const scrollToBottom = () => { + messagesEndRef.current?.scrollIntoView({ behavior: "smooth" }); + }; + + // run once! + useEffect(() => { + const hookedConsole = Hook(window.console, (log) => setLogs((currLogs) => [...currLogs, log]), false); + return () => Unhook(hookedConsole); + }, []); + + useEffect(scrollToBottom, [logs]); + + return ( + <> + +
+ + ); +}; + +export { LogsContainer }; diff --git a/apps/demo/next.config.js b/apps/demo/next.config.js index 4d37938da8..75fd113eb6 100644 --- a/apps/demo/next.config.js +++ b/apps/demo/next.config.js @@ -5,7 +5,7 @@ const nextConfig = { return [ { source: "/", - destination: "/signin", + destination: "/app", permanent: false, }, ]; diff --git a/apps/demo/package.json b/apps/demo/package.json index e1b11b44a3..fe1bdd65d8 100644 --- a/apps/demo/package.json +++ b/apps/demo/package.json @@ -15,6 +15,7 @@ "@types/node": "18.15.11", "@types/react": "18.0.33", "@types/react-dom": "18.0.11", + "console-feed": "^3.5.0", "eslint": "8.37.0", "eslint-config-formbricks": "workspace:*", "next": "13.2.4", diff --git a/apps/demo/pages/_app.tsx b/apps/demo/pages/_app.tsx index 42f6f9e3b5..a960d63878 100644 --- a/apps/demo/pages/_app.tsx +++ b/apps/demo/pages/_app.tsx @@ -1,5 +1,6 @@ -import formbricks, { PersonId, SurveyId } from "@formbricks/js"; +import formbricks from "@formbricks/js"; import type { AppProps } from "next/app"; +import Head from "next/head"; import { useRouter } from "next/router"; import { useEffect } from "react"; import "../styles/globals.css"; @@ -35,10 +36,13 @@ export default function App({ Component, pageProps }: AppProps) { return ( <> + + Demo App + {(!process.env.NEXT_PUBLIC_FORMBRICKS_ENVIRONMENT_ID || !process.env.NEXT_PUBLIC_FORMBRICKS_API_HOST) && (
- Please set Formbricks environment variables + Please set Formbricks environment variables in apps/demo/.env
)} diff --git a/apps/demo/pages/app/index.tsx b/apps/demo/pages/app/index.tsx index f421dae2c4..c0ebd33500 100644 --- a/apps/demo/pages/app/index.tsx +++ b/apps/demo/pages/app/index.tsx @@ -1,378 +1,189 @@ -import LayoutApp from "@/components/LayoutApp"; -import { classNames } from "@/lib/utils"; -import { Bars3CenterLeftIcon, BellIcon, ScaleIcon } from "@heroicons/react/24/outline"; -import { - BanknotesIcon, - BuildingOfficeIcon, - CheckCircleIcon, - ChevronDownIcon, - ChevronRightIcon, - MagnifyingGlassIcon, -} from "@heroicons/react/24/solid"; -import Image from "next/image"; +import fbsetup from "../../public/fb-setup.png"; import formbricks from "@formbricks/js"; - -const cards = [{ name: "Account balance", href: "#", icon: ScaleIcon, amount: "$30,659.45" }]; -const transactions = [ - { - id: 1, - name: "Payment to Molly Sanders", - href: "#", - amount: "$20,000", - currency: "USD", - status: "success", - date: "July 11, 2020", - datetime: "2020-07-11", - }, -]; -const statusStyles: any = { - success: "bg-green-100 text-green-800", - processing: "bg-yellow-100 text-yellow-800", - failed: "bg-slate-100 text-slate-800", -}; +import Image from "next/image"; +import { LogsContainer } from "../../components/ConsoleFeed"; export default function AppPage({}) { return ( - -
- - {/* Search bar */} -
-
-
- -
- - -
-
+
+
+

Formbricks In-product Survey Demo App

+

+ This app helps you test your in-app surveys. You can create an test user actions, create and update + user attributes, etc. +

+
+
+
+
+

Setup .env

+

+ Copy the environment ID of your Formbricks app to the env variable in demo/.env +

+ fb setup
-
- - - - - - +
+

Console

+

You can also open your browser console to logs:

+
+ +
+
+
- {/* Profile dropdown */} -
-
- -
+
+
+

Reset person / pull data from Formbricks app

+

+ On formbricks.logout() a few things happen: New person is created and{" "} + surveys & no-code actions are pulled from Formbricks:. +

+ +

+ If you made a change in Formbricks app and it does not seem to work, hit 'Logout' and + try again. +

+
+ +
+
+ +
+
+

+ This button sends a{" "} + + Code Action + {" "} + to the Formbricks API called 'Code Action'. You will find it in the Actions Tab. +

+
+
+
+
+ +
+
+

+ This button sends a{" "} + + No Code Action + {" "} + as long as you created it beforehand in the Formbricks App.{" "} + + Here are instructions on how to do it. + +

+
+
+
+
+ +
+
+

+ This button sets the{" "} + + attribute + {" "} + 'Plan' to 'Free'. If the attribute does not exist, it creates it. +

+
+
+
+
+ +
+
+

+ This button sets the{" "} + + attribute + {" "} + 'Plan' to 'Paid'. If the attribute does not exist, it creates it. +

+
+
+
+
+ +
+
+

+ This button sets the{" "} + + user email + {" "} + 'test@web.com' +

+
+
+
+
+ +
+
+

+ This button sets an external{" "} + + user ID + {" "} + to 'THIS-IS-A-VERY-LONG-USER-ID-FOR-TESTING' +

-
- {/* Page header */} -
-
-
-
- {/* Profile */} -
- -
-
- -

- Good morning, Emilia Birch -

-
-
-
Company
-
-
-
Account status
-
-
-
-
-
-
-
- - -
-
-
-
- -
-
-

Overview

-
- {/* Card */} - {cards.map((card) => ( -
-
-
-
-
-
-
-
{card.name}
-
-
{card.amount}
-
-
-
-
-
- -
- ))} -
-
- -

- Recent activity -

- - {/* Activity list (smallest breakpoint only) */} - - - {/* Activity table (small breakpoint and up) */} -
-
-
-
- - - - - - - - - - - {transactions.map((transaction) => ( - - - - - - - ))} - -
- Transaction - - Amount - - Status - - Date -
- - - {transaction.amount} - {transaction.currency} - - - {transaction.status} - - - -
- {/* Pagination */} - -
-
-
-
-
-
- +
); } diff --git a/apps/demo/public/fb-setup.png b/apps/demo/public/fb-setup.png new file mode 100644 index 0000000000000000000000000000000000000000..73d50516f0de1b8fb896f6678958c3781d9ad13e GIT binary patch literal 6332 zcmcJTXH-+`wuXZp5kcuSf+8SYI#QG(ARQ7wkx(KaQX+;P0ydByQ7IC{4Ju0LV(0{r z5~T!CAs|hOBuHo>BmqL;;vQ$5d-u8b?_Fc8_0=`!`(w>_Jl{%jw729vDt;6I0PtE{ znL7gj`@nmB>m!Huo`M-)5qk|6+}Y9;P)U&dy*D@zaLMix08oSC+4ecOH|D-=brlW( zoDBbSb4~jLqX7U>Cu{RdplHZa0W3`lpWVZ%{Y1O$pJ5(37wr2hL-KyLRKP)J-xD_J z2UA<2O0SN5@WFbID~XL)pZ9ftn5-dlT3yGTOP~F*+S}?z=iN(c8D4DkH)g4cC#Apu zJjI$WY-l%?2i9VLY^+<_bM&(2_6@%E+t!n<7JHw67h1_uvrT@{Pu7cV@ zW1teD^yMl2jFD+|@ZsZL?~1<1G%81MyAehPX$T5D77YinM`i*EC|Q- z)wAVBRQl^`yH$=>E8GPq)M~g`xFE0g_;p)@S!t@r3dUr!ccj#lwC_<8YtV z&7VH&w>a-I>z<$1Otep`$@Df~3q#*5-(k0~v-DLrr+-qWKJOkY`Hii$9NBPU(e)y? zy2awFE4RAnM7HaqzNUA$Aue=J#*bnD?^U~2=}P--ZieOD@3YNN*V5#-8zCR;1Bt<$ zw;ONrKg;5W{AD=tC=hVL|9DzNgC;}oZ%8OLP2lw0cs z(F|l|UW(aeV=knlN>7VoP|Z|4lEZ4a&?Ig9G~frdtyUht?QWEZDHa)47Gk?K&_ugF2^_fV^IZ2mwrCb%H+(x2jHa`8Mr7gAtll~_94^Pv9_!h=M4 z4>g%NFMa0wlwnw=X0PMHb@B6-=PzrYR)0{M8rDEl;C=0HY&I9OSdCaae0WM=cP$km z$Kkn1K(|F$?shcTclLWns2L>Lg7v1u(NdZTNS?h!h98x8%p#cJVX}Yx1Sv6wZXiK9 zdnSb*0lWB7PrwJ(zDPY|Il0N&)$4VXyZ@X=aCd7^qQS5*qg%P;oD@CcTGGPZ3u_B@ zEPTu{AltkvYK;%_TE}%$9~r8APfyfq-nE$dI6gd#PXUZdQ<`1$4Uuo}Tr~%fKrnpQXo- zB2>ve8f(vp0lnA@TZQK4NW*$A=Rtkhx`jqjCF&M=pf|H`Wo%rr>R4@u(7^bYrVfiFsz~Ezb@oT>}i; z-7G?^cI4~p+>9)l{cglstpYY_2bI6df2HHmoIEx0LI=#Vc$m?kTbv_vtfq`KyY>FE zk529fdGDA-85c%D^KDX6^KEi^^LvmBb{VISm;Sb{zG6`nV*JGWO_U~vgf zrXt30IP)0+QZ&d`XwK2=LHZSo*FG5XnXaE~d&FaEk-=EQ3cONDRADp<*05HC8d3l3 z%^1@xS!mQP&f5C<-VQ7u2YEbehL+yuJTNvK^6(|{n8`p=HqDC!C8hBvec~%6<@aa7 zMJv;)Ent`S^CLo2>*tZ?{co{05BTpC-Y53k_GWOp(?i^ zD$eEsXfWuuiLA^{by-b$>y`wUngYLzvSr4D)VjlUZ?Y*QFyB zD#xCj%G)X9b^%cY5}m7~C2dwW^^NTD*WK~ov|nr-6))+na$9#Kb}y_pzJ_8_jHBQR zl+YK4J*%Q^L*iZ!2Y37DG3b&iU!r@5rC&BzwY;6(v4h?jC}obMJ{>HL7bel*Zc%I) z6xa6h%n$3;2FDV8)9XCqu*+YFm#l;BWTbS!ON>|6r75+6m=B*UUwxtcg%a}YM<@f! z0yvwpm(Rl$4vo&tiuN z0_DQ$V9B$W&s0MM6BQB74U0I=4})Ak$Fi& zcyd)c>pHo|&S6}>u&gqTl4Y??D2-tK0BtM`5Zmp9+92OXQwQAJK~9sS$acEKcZuUw zS*#9Vkc$x8tLr5Z)E#&5n;WxUu2LYuOKLlQh?W0#jYYDv;8(vSNH%@VEAakt=}CX6 z`>M@{Q%b4Yf;pvYNf%#`=;buwQE{mV7dh%@4lif8mCWHwdY3(6Xhe9pu_jG>ZOmc` z%ssyKImo#(TxAYT&86Qo9H^La^B%cdI=gz<1bNoyye-(}2U#eQ>q^J$KED(_lec)Y z<5#0Czm3$uOL}pT{09egxwkZ{?q$%7UJp)!YBq}Sin*@ANmmn~I8jQF)@o3CYd~+S zAoN2nZ`hRROAvN%rXaFjbi1G2B{G_2Fr`L$i%WQd|E#9%ROLnzER z_NfeIypa!m&J(qqa9-7XyzhjOSjzkZ-FyrI7tjba7`$z({fJgT43D{Qxj*k*CVzBn zbd>Dv0`9fHHj_;+%AV*hi`y8KKbqt1SKiW)EG9dc(c|sOrTNI6GK2+-ms}x>o}j;R z?AyNCpWNqr%LU9V7e@Q!^F;!a>D+a|(*riogAyBnlUgy(%khRpu-^@cWSQlky5jD9 zs{yar=B&en1)UaieK0*dzuV*b)C0@)r%!1Su9l?zwBrR<{nDr^ebQP-kh_1ihV0<$ z8tu7L+mB{_W|@EMrB~llU;|tw_H+wx*t^errTG zB98Bmu(+kafwg$y*|E=TEVn*sm?6=VQADAou)S|I|a!F$wWnLcGbh@5T=PWYBc1UBcv;M|JF?m z{MOJbCtB8ZWY}KIPDloxi+rWg=&II*ZRijGRKPt|dnMQ)v!pa0sV`5FzSWzg#4x!I zV;~kerrO!?aUL6ZZL(tQPQI-N~ihY-5%Q!cTSEG+c^iFPGKV3Jh`=WWdNJnoiPO0vC z+n7Yn%p4?bLmkAyB6+UATEIG(L7A+ z#q9;hct+N9Mp>p&CuS6D-dm-tPr{X;bNwn?-~QQc?v42yD9!@*B36Hy#39j~YSFt> z6lztQ&Wc@iY&%FJb7$QG02tGh+@v{hjpY`!{5Bk&>4qFCN%he_0s!PB%IN?W4|`)= z0cCsVuxe%H8ZK`WfD3k?JMW$xKc5s{0GlfhBh-G29{^D1u?arV#{PsH-#xXZwrmtc zK*1W>T08ZqNeS`>VXbG>ZP9W9E7=j>Jp+6>b&k*pQt7`MMcJ*JVn+UYs+*yIp>LQn z*a-W*+gQt_PQDhPE;qXkHb!x1imc7Dt=&O7q8@p_Cw{4pfekc%@k(!@sl91pfkKR7 zty@G)S+F+gfrjN$Yt@AANxjR3Yg@LBk(M)0li#5zIu{r8ExTNeM4*12Glj-Ncu2TM zPKL65&fydpgk z`oby-`DIzgNjRM%-y;vy@YjrJP<8NEIFl)|oHh|aqM?^b1ot`8l#F4XS`*C6kIyAm zfmuAP1N_}l*wYH&7P$COwARo)MK&kFUA|~Uwqo#i7}C(ut*cU=TSbJUI(jr3#H! zP|V2zc*RiJOyaRiHk}&5OZG?^_`c7H?>w8T{YF^4xR8e`k zQ}9Hb*L?K6_@TLMsx8Y@AJz|%cbN;yz&fG4F=zdsm)uH|ZutGvhOd3+QZUbhGe=Sq zMqsH6aeT{xc0y9{OJXi=7FGfLN1i5$-l-X!Z*rG1&JDNK9;SpIpPQ_xonm18PQ4Zj z{0AM?S3zyFbvZSW!vUTSehK}EqH#@a;m=`fMh#g1>t;1gl7aDgX8JX>9%R=FOtUV( zo>bCH!4T`Li$S8Y8N${UCso7Z_dbRqWnOdPNX5eIr}TXc`?JZWg#!K`i8=UimDb@^ z?EIMG;D@@(w9L+ie)(dAmdjxHq8`qItXQBn{R2c@AVeS=2K!ThB8?vg;r&=+_PZ4! znGF8U^Eaky63lWI7Kp%UDkz{0qLr%-cDciV*0*vJn``~kmriYW*na$FktLnl8vXE5 z<#vYo=IwP;C*(~6>&K|9@Te7E(8(hzv)k7<`sq2;fZ@-SE8)kbZM6J5{)4ZcJ`8Ub z@Yz}n@}_k+71#a25tEfxi_EDezUX)}M5p4yERn_1WN55EVwqD^@#o2{Lkm|2)|2CA zo5BfI)-+J2;M9a>Kkm5iLU9!(`tWu2lNs4$vl&~F&(b&RDjzla62Cv?nzJ?5hcIT4h+>f5u;2I z6!XKJt3hT?#Y}w_t@3ochH?`7+B)zMm(;XoEN};Q!MCzFQb(7CIZgIhR~s#*)9}iX z(`ZpOGPjGiP*BvQ$i&1lsjO%0_-X0wou5-iaqLIN+UY#82X}6(nLo-~=~%KzaQDjr}c@qaH(zq6>p9hje;akB#wp({a`RLbuCcEf0<@ zDK6tsd{vM>3pvT}un9Ceo z1>xf)Vr5|ycj3y<1yOad^F!+czx67z25eFTDx3zr#B-WXz$q=6f_&hsDS%*ZY7S6-Z z!y1XBNC9#u$nKIBsF|~$@i0yuf0!9~)^zq~@QEHyr%8U<8kf<`g9+i9huLm6KMWcg zj*kkd!;>S9dwRT)OOnMW=cy$+ku9N@uM4}NG4J;X>X?nzCh`z;ZTB93ja?PlArKX@v@@-I?5wa2`lDX6-mtaRV7Ei9A3~bepLzmu!5m<6B zB;fs?ks#)D|ag7Ze7Nhg)ECkldh0#vLG)-Y2|5PKJ5Shh;fw zMKV6~G(JbUbKMW(afj{ z|ACChY^>PyJ3AW*oVVO`{In*?4(vWLL;6_V%}Aw-U7$n`Zfm!=6-RAJFIFy%I>5r? z3N7pw^TlklGb<<=OYnOUYV+_OT4e)NIuU^V0RP}iMCb^5pijn3R@xBkf^w1KBkVe&g8ogGv+ixUf~RmkZ9gA74j<8jQ#co|NcAPwZgIj| zVAz-|8Xq?5R}$|P3K8k?iPEbK)8jJINL568rFFy+=k3T~DOe5!agAlFQ9=yvOjKxV z96odpMWdZ*IjXWii`$5G5WBx)pfW8JX(P#o=d@dr1QZhUDcO%@RS+NPtH~Qeq^ur` zc)va4bRA5N4L0p|pcRVd2$zgu;kXkYViXAK;Orc=xoclZs8*^&0bx5?}&S)*SN|L zEgdDhi9CPamN}+We#_IQYwMO;XPf>0r`5j@V<*v^i<=DKv61-w|09Y7fVp2CtaNwe z6ae5ZoHGWf2L9_e`WU`_4|(@4TY#<5pSJzL|L25qKNoAaWM&9pKHD4hC!Mv0y?Ldn H_x=9@J`;0! literal 0 HcmV?d00001 diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 9b401e98c8..a7e85011e0 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -37,6 +37,9 @@ importers: '@types/react-dom': specifier: 18.0.11 version: 18.0.11 + console-feed: + specifier: ^3.5.0 + version: 3.5.0(jquery@3.7.0)(react-dom@18.2.0)(react@18.2.0) eslint: specifier: 8.37.0 version: 8.37.0 @@ -873,7 +876,6 @@ packages: engines: {node: '>=6.9.0'} dependencies: '@babel/highlight': 7.18.6 - dev: true /@babel/compat-data@7.20.5: resolution: {integrity: sha512-KZXo2t10+/jxmkhNXc7pZTqRvSOIvVv/+lJwHS+B2rErwOyjuVRh60yVpb7liQ1U5t7lLJ1bz+t8tSypUZdm0g==} @@ -1039,7 +1041,6 @@ packages: engines: {node: '>=6.9.0'} dependencies: '@babel/types': 7.20.7 - dev: true /@babel/helper-module-transforms@7.20.11: resolution: {integrity: sha512-uRy78kN4psmji1s2QtbtcCSaj/LILFDp0f/ymhpQH5QY3nljUZCaNWz9X1dEj/8MBdBEFECs7yRhKn8i7NjZgg==} @@ -1121,12 +1122,10 @@ packages: /@babel/helper-string-parser@7.19.4: resolution: {integrity: sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw==} engines: {node: '>=6.9.0'} - dev: true /@babel/helper-validator-identifier@7.19.1: resolution: {integrity: sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==} engines: {node: '>=6.9.0'} - dev: true /@babel/helper-validator-option@7.18.6: resolution: {integrity: sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw==} @@ -1163,7 +1162,6 @@ packages: '@babel/helper-validator-identifier': 7.19.1 chalk: 2.4.2 js-tokens: 4.0.0 - dev: true /@babel/parser@7.20.13: resolution: {integrity: sha512-gFDLKMfpiXCsjt4za2JA9oTMn70CeseCehb11kRZgvd7+F67Hih3OHOK24cRrWECJ/ljfPGac6ygXAs/C8kIvw==} @@ -2232,7 +2230,6 @@ packages: '@babel/helper-string-parser': 7.19.4 '@babel/helper-validator-identifier': 7.19.1 to-fast-properties: 2.0.0 - dev: true /@bcoe/v8-coverage@0.2.3: resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==} @@ -2460,6 +2457,107 @@ packages: - '@algolia/client-search' dev: false + /@emotion/cache@10.0.29: + resolution: {integrity: sha512-fU2VtSVlHiF27empSbxi1O2JFdNWZO+2NFHfwO0pxgTep6Xa3uGb+3pVKfLww2l/IBGLNEZl5Xf/++A4wAYDYQ==} + dependencies: + '@emotion/sheet': 0.9.4 + '@emotion/stylis': 0.8.5 + '@emotion/utils': 0.11.3 + '@emotion/weak-memoize': 0.2.5 + dev: false + + /@emotion/core@10.3.1(react@18.2.0): + resolution: {integrity: sha512-447aUEjPIm0MnE6QYIaFz9VQOHSXf4Iu6EWOIqq11EAPqinkSZmfymPTmlOE3QjLv846lH4JVZBUOtwGbuQoww==} + peerDependencies: + react: '>=16.3.0' + dependencies: + '@babel/runtime': 7.21.0 + '@emotion/cache': 10.0.29 + '@emotion/css': 10.0.27 + '@emotion/serialize': 0.11.16 + '@emotion/sheet': 0.9.4 + '@emotion/utils': 0.11.3 + react: 18.2.0 + dev: false + + /@emotion/css@10.0.27: + resolution: {integrity: sha512-6wZjsvYeBhyZQYNrGoR5yPMYbMBNEnanDrqmsqS1mzDm1cOTu12shvl2j4QHNS36UaTE0USIJawCH9C8oW34Zw==} + dependencies: + '@emotion/serialize': 0.11.16 + '@emotion/utils': 0.11.3 + babel-plugin-emotion: 10.2.2 + dev: false + + /@emotion/hash@0.8.0: + resolution: {integrity: sha512-kBJtf7PH6aWwZ6fka3zQ0p6SBYzx4fl1LoZXE2RrnYST9Xljm7WfKJrU4g/Xr3Beg72MLrp1AWNUmuYJTL7Cow==} + dev: false + + /@emotion/is-prop-valid@0.8.8: + resolution: {integrity: sha512-u5WtneEAr5IDG2Wv65yhunPSMLIpuKsbuOktRojfrEiEvRyC85LgPMZI63cr7NUqT8ZIGdSVg8ZKGxIug4lXcA==} + dependencies: + '@emotion/memoize': 0.7.4 + dev: false + + /@emotion/memoize@0.7.4: + resolution: {integrity: sha512-Ja/Vfqe3HpuzRsG1oBtWTHk2PGZ7GR+2Vz5iYGelAw8dx32K0y7PjVuxK6z1nMpZOqAFsRUPCkK1YjJ56qJlgw==} + dev: false + + /@emotion/serialize@0.11.16: + resolution: {integrity: sha512-G3J4o8by0VRrO+PFeSc3js2myYNOXVJ3Ya+RGVxnshRYgsvErfAOglKAiy1Eo1vhzxqtUvjCyS5gtewzkmvSSg==} + dependencies: + '@emotion/hash': 0.8.0 + '@emotion/memoize': 0.7.4 + '@emotion/unitless': 0.7.5 + '@emotion/utils': 0.11.3 + csstype: 2.6.21 + dev: false + + /@emotion/sheet@0.9.4: + resolution: {integrity: sha512-zM9PFmgVSqBw4zL101Q0HrBVTGmpAxFZH/pYx/cjJT5advXguvcgjHFTCaIO3enL/xr89vK2bh0Mfyj9aa0ANA==} + dev: false + + /@emotion/styled-base@10.3.0(@emotion/core@10.3.1)(react@18.2.0): + resolution: {integrity: sha512-PBRqsVKR7QRNkmfH78hTSSwHWcwDpecH9W6heujWAcyp2wdz/64PP73s7fWS1dIPm8/Exc8JAzYS8dEWXjv60w==} + peerDependencies: + '@emotion/core': ^10.0.28 + react: '>=16.3.0' + dependencies: + '@babel/runtime': 7.21.0 + '@emotion/core': 10.3.1(react@18.2.0) + '@emotion/is-prop-valid': 0.8.8 + '@emotion/serialize': 0.11.16 + '@emotion/utils': 0.11.3 + react: 18.2.0 + dev: false + + /@emotion/styled@10.3.0(@emotion/core@10.3.1)(react@18.2.0): + resolution: {integrity: sha512-GgcUpXBBEU5ido+/p/mCT2/Xx+Oqmp9JzQRuC+a4lYM4i4LBBn/dWvc0rQ19N9ObA8/T4NWMrPNe79kMBDJqoQ==} + peerDependencies: + '@emotion/core': ^10.0.27 + react: '>=16.3.0' + dependencies: + '@emotion/core': 10.3.1(react@18.2.0) + '@emotion/styled-base': 10.3.0(@emotion/core@10.3.1)(react@18.2.0) + babel-plugin-emotion: 10.2.2 + react: 18.2.0 + dev: false + + /@emotion/stylis@0.8.5: + resolution: {integrity: sha512-h6KtPihKFn3T9fuIrwvXXUOwlx3rfUvfZIcP5a6rh8Y7zjE3O06hT5Ss4S/YI1AYhuZ1kjaE/5EaOOI2NqSylQ==} + dev: false + + /@emotion/unitless@0.7.5: + resolution: {integrity: sha512-OWORNpfjMsSSUBVrRBVGECkhWcULOAJz9ZW8uK9qgxD+87M7jHRcvh/A96XXNhXTLmKcoYSQtBEX7lHMO7YRwg==} + dev: false + + /@emotion/utils@0.11.3: + resolution: {integrity: sha512-0o4l6pZC+hI88+bzuaX/6BgOvQVhbt2PfmxauVaYOGgbsAw14wdKyvMCZXnsnsHys94iadcF+RG/wZyx6+ZZBw==} + dev: false + + /@emotion/weak-memoize@0.2.5: + resolution: {integrity: sha512-6U71C2Wp7r5XtFtQzYrW5iKFT67OixrSxjI4MptCHzdSVlgabczzqLe0ZSgnub/5Kp4hSbpDB1tMytZY9pwxxA==} + dev: false + /@esbuild-kit/cjs-loader@2.4.2: resolution: {integrity: sha512-BDXFbYOJzT/NBEtp71cvsrGPwGAMGRB/349rwKuoxNSiKjPraNNnlK6MIIabViCjqZugu6j+xeMDlEkWdHHJSg==} dependencies: @@ -5865,7 +5963,6 @@ packages: /@types/parse-json@4.0.0: resolution: {integrity: sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==} - dev: true /@types/prettier@2.7.2: resolution: {integrity: sha512-KufADq8uQqo1pYKVIYzfKbJfBAc0sOeXqGbFaSpv8MRmC/zXgowNZmFcbngndGk922QDmOASEXUZCaY48gs4cg==} @@ -7305,6 +7402,21 @@ packages: webpack: 4.46.0 dev: true + /babel-plugin-emotion@10.2.2: + resolution: {integrity: sha512-SMSkGoqTbTyUTDeuVuPIWifPdUGkTk1Kf9BWRiXIOIcuyMfsdp2EjeiiFvOzX8NOBvEh/ypKYvUh2rkgAJMCLA==} + dependencies: + '@babel/helper-module-imports': 7.18.6 + '@emotion/hash': 0.8.0 + '@emotion/memoize': 0.7.4 + '@emotion/serialize': 0.11.16 + babel-plugin-macros: 2.8.0 + babel-plugin-syntax-jsx: 6.18.0 + convert-source-map: 1.9.0 + escape-string-regexp: 1.0.5 + find-root: 1.1.0 + source-map: 0.5.7 + dev: false + /babel-plugin-istanbul@6.1.1: resolution: {integrity: sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==} engines: {node: '>=8'} @@ -7338,6 +7450,14 @@ packages: '@types/babel__traverse': 7.18.3 dev: true + /babel-plugin-macros@2.8.0: + resolution: {integrity: sha512-SEP5kJpfGYqYKpBrj5XU3ahw5p5GOHJ0U5ssOSQ/WBVdwkD2Dzlce95exQTs3jOVWPPKLBN2rlEWkCK7dSmLvg==} + dependencies: + '@babel/runtime': 7.21.0 + cosmiconfig: 6.0.0 + resolve: 1.22.2 + dev: false + /babel-plugin-macros@3.1.0: resolution: {integrity: sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==} engines: {node: '>=10', npm: '>=6'} @@ -7383,6 +7503,10 @@ packages: - supports-color dev: true + /babel-plugin-syntax-jsx@6.18.0: + resolution: {integrity: sha512-qrPaCSo9c8RHNRHIotaufGbuOBN8rtdC4QrrFFc43vyWCCz7Kl7GL1PGaXtMGQZUXrkCjNEgxDfmAuAabr/rlw==} + dev: false + /babel-plugin-transform-async-to-promises@0.8.18: resolution: {integrity: sha512-WpOrF76nUHijnNn10eBGOHZmXQC8JYRME9rOLxStOga7Av2VO53ehVFvVNImMksVtQuL2/7ZNxEgxnx7oo/3Hw==} dev: true @@ -8548,6 +8672,22 @@ packages: engines: {node: '>=4'} dev: true + /console-feed@3.5.0(jquery@3.7.0)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-2N5b37yH0HeaqbBDsHBx0jEy3qvhTGA1dVdGyEM6C1NQhVmIX+ToU6Rt/uo86K0lLs4Lg1orC940YSn+Z3kk5g==} + peerDependencies: + react: ^15.x || ^16.x || ^17.x || ^18.x + dependencies: + '@emotion/core': 10.3.1(react@18.2.0) + '@emotion/styled': 10.3.0(@emotion/core@10.3.1)(react@18.2.0) + emotion-theming: 10.3.0(@emotion/core@10.3.1)(react@18.2.0) + linkifyjs: 2.1.9(jquery@3.7.0)(react-dom@18.2.0)(react@18.2.0) + react: 18.2.0 + react-inspector: 5.1.1(react@18.2.0) + transitivePeerDependencies: + - jquery + - react-dom + dev: false + /constants-browserify@1.0.0: resolution: {integrity: sha512-xFxOwqIzR/e1k1gLiWEophSCMqXcwVHIH7akf7b/vxcUeGunlj3hvZaaqxwHsTgn+IndtkQJgSztIDWeumWJDQ==} dev: true @@ -8566,7 +8706,6 @@ packages: /convert-source-map@1.9.0: resolution: {integrity: sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==} - dev: true /convert-source-map@2.0.0: resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} @@ -8652,6 +8791,17 @@ packages: parse-json: 4.0.0 dev: true + /cosmiconfig@6.0.0: + resolution: {integrity: sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg==} + engines: {node: '>=8'} + dependencies: + '@types/parse-json': 4.0.0 + import-fresh: 3.3.0 + parse-json: 5.2.0 + path-type: 4.0.0 + yaml: 1.10.2 + dev: false + /cosmiconfig@7.1.0: resolution: {integrity: sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==} engines: {node: '>=10'} @@ -9059,6 +9209,10 @@ packages: cssom: 0.3.8 dev: true + /csstype@2.6.21: + resolution: {integrity: sha512-Z1PhmomIfypOpoMjRQB70jfvy/wxT50qW08YXO5lMIJkrdq4yOTR+AW7FqutScmB9NkLwxo+jU+kZLbofZZq/w==} + dev: false + /csstype@3.1.1: resolution: {integrity: sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw==} @@ -9613,6 +9767,19 @@ packages: engines: {node: '>= 4'} dev: true + /emotion-theming@10.3.0(@emotion/core@10.3.1)(react@18.2.0): + resolution: {integrity: sha512-mXiD2Oj7N9b6+h/dC6oLf9hwxbtKHQjoIqtodEyL8CpkN4F3V4IK/BT4D0C7zSs4BBFOu4UlPJbvvBLa88SGEA==} + peerDependencies: + '@emotion/core': ^10.0.27 + react: '>=16.3.0' + dependencies: + '@babel/runtime': 7.21.0 + '@emotion/core': 10.3.1(react@18.2.0) + '@emotion/weak-memoize': 0.2.5 + hoist-non-react-statics: 3.3.2 + react: 18.2.0 + dev: false + /encodeurl@1.0.2: resolution: {integrity: sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==} engines: {node: '>= 0.8'} @@ -9727,7 +9894,6 @@ packages: resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} dependencies: is-arrayish: 0.2.1 - dev: true /error-stack-parser@2.1.4: resolution: {integrity: sha512-Sk5V6wVazPhq5MhpO+AUxJn5x7XSXGl1R93Vn7i+zS15KDVxQijejNCrz8340/2bgLBjR9GtEG8ZVKONDjcqGQ==} @@ -11012,6 +11178,10 @@ packages: pkg-dir: 4.2.0 dev: true + /find-root@1.1.0: + resolution: {integrity: sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==} + dev: false + /find-up@3.0.0: resolution: {integrity: sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==} engines: {node: '>=6'} @@ -12250,7 +12420,6 @@ packages: /is-arrayish@0.2.1: resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} - dev: true /is-arrayish@0.3.2: resolution: {integrity: sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==} @@ -12386,6 +12555,13 @@ packages: engines: {node: '>=8'} hasBin: true + /is-dom@1.1.0: + resolution: {integrity: sha512-u82f6mvhYxRPKpw8V1N0W8ce1xXwOrQtgGcxl6UCL5zBmZu3is/18K0rR7uFCnMDuAsS/3W54mGL4vsaFUQlEQ==} + dependencies: + is-object: 1.0.2 + is-window: 1.0.2 + dev: false + /is-extendable@0.1.1: resolution: {integrity: sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==} engines: {node: '>=0.10.0'} @@ -12514,6 +12690,10 @@ packages: resolution: {integrity: sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==} engines: {node: '>=8'} + /is-object@1.0.2: + resolution: {integrity: sha512-2rRIahhZr2UWb45fIOuvZGpFtz0TyOZLf32KxBbSoUCeZR495zCKlWUKKUByk3geS2eAs7ZAABt0Y/Rx0GiQGA==} + dev: false + /is-path-cwd@2.2.0: resolution: {integrity: sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==} engines: {node: '>=6'} @@ -12641,6 +12821,10 @@ packages: dependencies: call-bind: 1.0.2 + /is-window@1.0.2: + resolution: {integrity: sha512-uj00kdXyZb9t9RcAUAwMZAnkBUwdYGhYlt7djMXhfyhUCzwNba50tIiBKR7q0l7tdoBtFVw/3JmLY6fI3rmZmg==} + dev: false + /is-windows@1.0.2: resolution: {integrity: sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==} engines: {node: '>=0.10.0'} @@ -13315,6 +13499,10 @@ packages: engines: {node: '>=10'} dev: true + /jquery@3.7.0: + resolution: {integrity: sha512-umpJ0/k8X0MvD1ds0P9SfowREz2LenHsQaxSohMZ5OMNEU2r0tf8pdeEFTHMFxWVxKNyU9rTtK3CWzUCTKJUeQ==} + dev: false + /js-cookie@2.2.1: resolution: {integrity: sha512-HvdH2LzI/EAZcUwA8+0nKNtWHqS+ZmijLA30RwZA0bo7ToCckjK5MkGhjED9KoRcXO6BaGI3I9UIzSA1FKFPOQ==} dev: false @@ -13635,7 +13823,6 @@ packages: /lines-and-columns@1.2.4: resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} - dev: true /linkify-it@4.0.1: resolution: {integrity: sha512-C7bfi1UZmoj8+PQx22XyeXCuBlokoyWQL5pWSP+EI6nzRylyThouddufc2c1NDIcP9k5agmN9fLpA7VNJfIiqw==} @@ -13643,6 +13830,18 @@ packages: uc.micro: 1.0.6 dev: false + /linkifyjs@2.1.9(jquery@3.7.0)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-74ivurkK6WHvHFozVaGtQWV38FzBwSTGNmJolEgFp7QgR2bl6ArUWlvT4GcHKbPe1z3nWYi+VUdDZk16zDOVug==} + peerDependencies: + jquery: '>= 1.11.0' + react: '>= 0.14.0' + react-dom: '>= 0.14.0' + dependencies: + jquery: 3.7.0 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + dev: false + /listify@1.0.3: resolution: {integrity: sha512-083swF7iH7bx8666zdzBColpgEuy46HjN3r1isD4zV6Ix7FuHfb/2/WVnl4CH8hjuoWeFF7P5KkKNXUnJCFEJg==} engines: {node: '>= 0.4'} @@ -15859,7 +16058,6 @@ packages: error-ex: 1.3.2 json-parse-even-better-errors: 2.3.1 lines-and-columns: 1.2.4 - dev: true /parse-passwd@1.0.0: resolution: {integrity: sha512-1Y1A//QUXEZK7YKz+rD9WydcE1+EuPr6ZBgKecAB8tmoW6UFv0NREVJe1p+jRxtThkcbbKkfwIbWJe/IeE6m2Q==} @@ -17604,6 +17802,17 @@ packages: react: 18.2.0 dev: false + /react-inspector@5.1.1(react@18.2.0): + resolution: {integrity: sha512-GURDaYzoLbW8pMGXwYPDBIv6nqei4kK7LPRZ9q9HCZF54wqXz/dnylBp/kfE9XmekBhHvLDdcYeyIwSrvtOiWg==} + peerDependencies: + react: ^16.8.4 || ^17.0.0 + dependencies: + '@babel/runtime': 7.21.0 + is-dom: 1.1.0 + prop-types: 15.8.1 + react: 18.2.0 + dev: false + /react-is@16.13.1: resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==} @@ -18860,7 +19069,6 @@ packages: /source-map@0.5.7: resolution: {integrity: sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==} engines: {node: '>=0.10.0'} - dev: true /source-map@0.6.1: resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} @@ -19867,7 +20075,6 @@ packages: /to-fast-properties@2.0.0: resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==} engines: {node: '>=4'} - dev: true /to-object-path@0.3.0: resolution: {integrity: sha512-9mWHdnGRuh3onocaHzukyvCZhzvr6tiflAy/JRFXcJX0TjgfWA9pk9t8CMbzmBE4Jfw58pXbkngtBtqYxzNEyg==} @@ -21519,7 +21726,6 @@ packages: /yaml@1.10.2: resolution: {integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==} engines: {node: '>= 6'} - dev: true /yaml@2.1.3: resolution: {integrity: sha512-AacA8nRULjKMX2DvWvOAdBZMOfQlypSFkjcOcu9FalllIDJ1kvlREzcdIZmidQUqqeMv7jorHjq2HlLv/+c2lg==}