From ee4313035e056f44987c8425ca5fbfa729236b59 Mon Sep 17 00:00:00 2001 From: Bram Suurd <78373894+BramSuurdje@users.noreply.github.com> Date: Fri, 3 May 2024 17:38:33 +0200 Subject: [PATCH] added /new page for testing. experimenting with grid layout --- app/new/page.tsx | 377 +++++++++++++++++++++++++++++++++++++++ bun.lockb | Bin 190631 -> 191583 bytes components/ui/dialog.tsx | 122 +++++++++++++ package.json | 1 + 4 files changed, 500 insertions(+) create mode 100644 app/new/page.tsx create mode 100644 components/ui/dialog.tsx diff --git a/app/new/page.tsx b/app/new/page.tsx new file mode 100644 index 0000000..234eebf --- /dev/null +++ b/app/new/page.tsx @@ -0,0 +1,377 @@ +"use client"; +import { pb } from "@/lib/pocketbase"; +import Image from "next/image"; +import React, { useEffect, useState } from "react"; +import { + Dialog, + DialogContent, + DialogDescription, + DialogHeader, + DialogTitle, + DialogTrigger, +} from "@/components/ui/dialog"; +import { Clipboard, Info } from "lucide-react"; +import { Separator } from "@/components/ui/separator"; +import { Button } from "@/components/ui/button"; +import Link from "next/link"; +import { extractDate } from "@/lib/time"; +import { toast } from "sonner"; + + +interface Script { + title: string; + scriptID: string; +} + +interface Category { + id: string; + Catagory_Title: string; + Items: Script[]; +} + +type Scripts = { + id: string; + title: string; + description: string; + installCommand: string; + logo: string; + updated: string; + created: string; + default_cpu: string; + default_ram: string; + default_hdd: string; + port: number; + item_type: string; + website: string; + documentation: string; + isUpdateable: boolean; + post_install: string; + hasAlpineScript: boolean; + alpineScript: string; + alpine_default_cpu: string; + alpine_default_ram: string; + alpine_default_hdd: string; + alert1: string; + alert2: string; + alert3: string; +}; + +const getCatagories = async () => { + const res = await fetch( + `${process.env.NEXT_PUBLIC_POCKETBASE_URL}/api/collections/proxmox_items/records`, + ); + const data = await res.json(); + return data.items as Category[]; +}; + +const getItems = async () => { + const records = await pb.collection("proxmox_scripts").getFullList({ + sort: "-created", + }); + return records as unknown as Scripts[]; +}; + + function handleCopy(type: string, value: any) { + navigator.clipboard.writeText(value); + toast( +
+ + Copied {type} to clipboard +
, + ); + } + + +function page() { + const [selectedItem, setSelectedItem] = useState(""); + const [categories, setCategories] = useState([]); + const [items, setItems] = useState([]); + + useEffect(() => { + const fetchdata = async () => { + try { + const categories = await getCatagories(); + const items = await getItems(); + setCategories(categories); + setItems(items); + } catch (error) { + console.error("Error fetching links:", error); + } + }; + fetchdata(); + }, []); + + return ( +
+ {categories.map((category: Category) => ( +
+

+ {category.Catagory_Title} +

{" "} +
+ {category.Items.map((script: Script) => { + const item = items.find((item) => item.id === script.scriptID); + if (item) { + return ( + + +
setSelectedItem(item.id)} + > +
+
+ {item.title} +
+
+

+ {item.title} +

+
+
+
+
+ + + +
+ {item && ( + <> +
+
+
+ {item.title} +
+
+
+

+ {item.title} +

+

+ Date added:{" "} + {extractDate(item.created)} +

+
+
+ {item.default_cpu && ( +
+

+ Default settings +

+

+ CPU: {item.default_cpu} +

+

+ RAM: {item.default_ram} +

+

+ HDD: {item.default_hdd} +

+
+ )} + {item.hasAlpineScript && ( +
+

+ Default Alpine settings +

+

+ CPU: {item.alpine_default_cpu} +

+

+ RAM: {item.alpine_default_ram} +

+

+ HDD: {item.alpine_default_hdd} +

+
+ )} +
+
+
+
+
+ {item.website && ( + + )} + {item.documentation && ( + + )} +
+
+ +
+
+

+ Description +

+

{item.description}

+ + {item.alert1 && ( +
+

+ + {item.alert1} +

+ {item.alert2 && ( +

+ + {item.alert2} +

+ )} + {item.alert3 && ( +

+ + {item.alert3} +

+ )} +
+ )} +
+ +
+

+ How to{" "} + {item.item_type ? "install" : "use"} +

+ {item.item_type && ( + <> +

+ To create a new Proxmox VE{" "} + {item.title} {item.item_type}, run + the command below in the Proxmox VE + Shell. +

+ {item.isUpdateable && ( +

+ To Update {item.title}, run the + command below (or type update) in + the LXC Console. +

+ )} + + )} + +

+ click to copy +

+ + + {item.hasAlpineScript && ( + <> + + +

+ Alpine Linux +

+

+ As an alternative option, you can + use Alpine Linux and the{" "} + {item.title} package to create a{" "} + {item.title} {item.item_type}{" "} + container with faster creation time + and minimal system resource usage. +

+ +

+ To create a new Proxmox VE Alpine- + {item.title} {item.item_type}, run + the command below in the{" "} + + Proxmox VE Shell + +

+ +

+ click to copy +

+ + + )} +
+ {item.port != 0 && ( +
+

+ Default Port +

+

+ click to copy +

+ +
+ )} +
+
+ + )} +
+
+
+
+
+ ); + } + return null; + })} +
+
+ ))} +
+ ); +} + +export default page; diff --git a/bun.lockb b/bun.lockb index da7a42260240948085602278378d70acc5977b96..486020ad49bff78f61f401bfaec9ec58c4e9cd9c 100644 GIT binary patch delta 33098 zcmeIb33yFc`#ya3mP0l|j2TWMVkQzYCqj;Sp65_Q5E2q1i4s$iYHOyt)uJt`s(4#e z`}QSDTh)Q8s*V(;R8bVIwo=9azV})?p-takd;P!PcU|9ibzkm0`?=S%)_T^nroGSJ z&e?dR!l|Pb9t&$6Hmi%?!2IsHxT>eeo_g`i8<$_nO+Fvf=*;uAe{+drt>zxSq&s+g zuxwCJNWgoVr8pcJxuMCKnGVNo5Y-%x{Qlr8KxR)Fot2!O;`nXZI-k7b9+J#SO_`WB zHrKIF=^sLR!T3@chocJQxb#V*Snk%c(mo??Vp?W$cJ@u^2GSQQxwV|bQ5kv}Pluxt zjQZKL9KX?rQGUeDY2}qyO9Rht*^z=cI;CNXb2eIKYGagOGIV zJ2b`*@-U;_IS!bs$^_;0MAYfNcWpU< zlPBh8BPLDqy!Yb2ZTuX+xLFZ961(w)q#wCs%W z*^X@JY~HXYQuc#HFXZL7#R&_F4v|r82%Q7D5+n!qZ^%do(jbu`-zQX7SOyY9G=Ex7 z%0vu1$EBvS;?E%I(EE^V_W3Z?K;=mKq^ap?<5F{~puCD4XJeD6q%)vnCuN~y9FEn9 z6DxXL#cg8BG$uQ$Vr;NwMd8x1Q;-;H`R_rJe+d!+&tIYVS&(c%8YCU<2T8}eK(hSF z(Qq&iCy5~FX#^yDZq$_QQIm2Vj^!~@_fxzpR_fl+4cHZ^4xIwYe5sJ^n$hXm)97$- z=yc51TR^7+jUlT*UW!NjS#b>z^e`a7;b;K453)9-0}^98|9lJC5>44{Zz=gb;Mp~| zS~(oSkk2W*#gL4IfSo_&bm$yQhau_E1vtmZ96hxjuj zb3jlY?j#G^0ZC8SD!BlX1?E7~u5A}t(HclbU@;^^nu>Bbc)LTgAuHfG?Po!<#hKk? zI+iVK42&?3m1~%HrjOK)Dp}B1mY$yS;6xZYrb6e48KdMxNP~JxN@i$Uw&MWuaj*FO z-nX;A%(n;W93U$pF%2To@Pf5wjb)0%Y7MqftnUw-3 z+ry5dD`}W?E_w8%EQT!(JX@VVT=MmxbMTCrG&(0MZKAo+@Y9Z)dyR&9TSv;2<&Ye& zUa;gax!T*|z}lYwDI|OKFqTdB>if{yAG;vEA@_`y9&CqXjT6R5IUJG`vIvr4TnBrO zf;o^Z*GKAk`Nw<70^S)X4bG&>0>aW{zpQ}Hg4RPa-uu9_z}e6#lazdaye!8(K@Q)Y z(5oVS+@wsn;BbV1X9$kKz6#_!>C~|Xz6OHhbd*YXFGE(e6*?=P3(3C7hNJ^GGGzh1 zCrch{XDIfi)V-5rdU;5eHz`X-^c?J&KL!Jz^XNTDI(`Rs2G_tHAiN=;hoon#l|cw3 zEBpinuqEXnIZ}5+vWqq-X{z*GNOoZ|BqwlpNLJVik`CY^AS-2D%Cx4?Sx;Jaa#mhe za;_r?1Y24Il6`wYwcseEH}nr6*|#r4R)*XJNxR1(+0q%1bSNFNGUUb?($OK%>39c7 zI?`Op+K?>w>O{n!gX;^7S$dqElJOw-d;7v|E5-yXvi5z<_I1$d=yD|=f@B3bkc`YY z#Yg1JzFq-Y4g6=AflP0Ybm|KVWWEapY7OlBkR+}^(z9N3WW^nnMCh_pa;)p942Jh8 z?AW5ckZk!&kPNAsUnxyd5gSw$l3j8O4$$r_B>8uG$;kEVJy*8qSx6?dhNOoPko0&= z%H%1@7^%tAQbIAeQ|c++ACi&Tj)FLX?*KQ^sK~ zOhGQj{S0{SEssIxp0i}J%=aZE!!TRPoaD^pQRyj;2VloZ+<&RuvwR`xb#usikg1PZ z`TdJK(!MjvO-@fw%g%8uG?Oa@^=bLIoB{7GlLP$b61nHrL-CAKMMxHlbIT1(0;@Up z^;zh08Ew$k1o`2WBb7Rp^Ykv-Hq-0dE_Gk=tvRxs?yZ~C0~56wW?`UPTW%Hwx^-_4 zvqh~$E!oVi<<^8*h`-;OMfls?j1O`fW1S91BC6HQHud7n!XPUZe_NaJwcT2wnOobf zYvs&cwG*{?v#7S)$SLP=v_J;K+*>(iN zr@1#c)_56npP9;;1x;d&U!b*wR@N*)S}SxZH77MK*UYW!HjaZE2(FA}AC6eiM^8(e zq%;q+ASl+@1+6X8bhAy*IIW_&t6rkk)-0;$HfCZlu-tN{RzKF*sWhuj?S@%c-%UIG z%{Sv4xQ(|l#aKsKQ-e=BhGA!DWz4;(V8rzo! zt)rDjZ8tP}DBE%eTAZb!WM>QpTnlqgP=c0e7BzC~WvZAh8YgOLW^QA*u^W@Ct29Le z%3{v5P>l|1gUt9QZtWd2w~5;sg1OVuoE4a$jWdgyxQ!Q~N5N7z3);qcLSgNixfi}S zGYdo9`ts`RF5?X55bdO6H8Hi@Lz4j-Viq=a8*9MH%xxOPI!{AGJxvm{CT4D^+Zc{z zuqSeOFa+rKB5)_bv7=?+YGN?63(!@;vCa|D+M2V16O45@>j1v8x%Z(s4~%-NSfe%0 znuCVph4LD;3G-i`S^CP9{>}tJ+%WM&mXmrG~5d#wsvrWTT<56fV3q6l|-hw8_4eHSy z0cMNHL~V$f8|ii~2|$v$r+$L=fmsyk)@qsYQEsCT)*cpy4#E7HYZih#3a+)qv8fGf z**#rQH`d62=C-OUXwE1XM!StK!O;bb1=!aNvWJuw6stX8=Ek^<<@a*N2hbQUt5rsD zZ8@%Fm?uDsLmGN4I@VYZEex8|8rDakwXrn%RTZnHECt=8jWKiM+}f*VVVqm{sAK*b zmuSS-aqtczzpB*(^PxrBnzq|4jCUI~>dIhaKs1TfdYSPp+}Z*&w}spI04W2lsxVZH zI`w2!oz{#SX~rkGwNK341h?+2Z|+J+)Lt-)65Phg`m&SJG3bga4eTg#n)WdZTe^*T z;23SR4s+;rXdJO+Oti;YtD(cuo#WX#9%pf8s|hVVal#g$zy`6}Ni#mtZPaSyaC8GF zCtj{u2yQ31Byg2Yt!1pytg$`l*#QM+t{WEMRIsoHOlTrCtJ95b&}8>v2pE^3b+yW; z);`4Ud}z)E(1x3P>LoZY;B1I>*0w3#z8#ccEWsJe!IVWEp`i{(e_2jctWf}svj-7G zXpTVRYGqATqYQd@Ff@$dA#r9=Teqy#%-$LtUw(8i@Gg^iTV;Z4&8k%wutJarhZfCdV zXBKvLJ4a%mM47j1B^b}(tThTkmt!QIHgmhUjfSyuXgI8SG71_Bl2u__jqmE#zBY65 zx3yW=)osi{G|_ssNW21#0Y~0iu||b>JB{6z0Ii2rS3$d2V>7h2mWH4jKSL|_)ri6} zC3gT0lq8JP@iHGK%vor|i?ucw6`V}6qYgpqZE0A(oPn)Sin#}?@MxS#D^9sWXtHK% z0jPFlad|VL$r7|-ah_1R7bp2*ZR%?mZj6V3NkHSriS1y@tV~sbUad=vDO7Gd*{B>}m^D^dROS4sj1ievTb9z#u zu?&%83uG4@gVr1xRsjUoz*Occg~1;mYjjW=rdHQDPbf03tm-vrn0Pd-7wfzZ4dXOE z!H9*|w6fN4ZL(Q7)NQ;4P8Q11dIuWkE4Gz{SR)ZDLKZYR>|Te)QmuP3FkZr03(E?#Pxl&bwn#}dS`U{UiEDN&fAgWy1TjTH z`=D{G$_Q5*AzNTw0qWgGnA6858nZxRPh=wz%+1gutPIpHLSuiI4!#ew*3GN9nU5u#A=V4x#@20j#-$F`?FM8gEaz-mTB^W932=E z>nwnV8gPa20nRuQ&@^;&`SG$sOLMlTX3h#qaL$%z=+u)qV=GV&F0ckoz%tFz=iG)f zd8u^^XU)yq-CKI3Bcj#@Fau{@kqLp|z$R}Mfq|_z&M>EEqGL1cbxniG$Izr#h?UcO zBE7}!kFzh%I$Gm+rCB%`*NT(PUneIzM@+U>66|;zaK>IoFUIilt}x5(bYZFJZ)Km4 zvj?o}!E-pX_DE;9Y=l!zAe?b9T6?Oqe2&$4RN5YAotfWQgfq57?lqs&qS)Sh3a1!% z-JUq>Zt>i^o`i<2h5^PzJOvG#AFQGuw3qe0xM6`Jv$P3`^MLYzdAn_bGjb}!i!*JZ z89xhxxPkEm$hQxVquv9jdNf6umf6utGo&`?Dn+53Y`p1ddlv66QH6#o1vd!&afyP$K_1O9Fy;?jpY^Ln5cCpSy(Bv39gEKkr+BA>z zd_+zSYe{pCfrgnIonY+7*#lN)`se#-aW`U#oCr+@n%nog(C9k?orup&=GtN0J0Mou zW#&HYc2=9mP+-6s$vA5dTLcU{%!Ya9t^&6wxHxbaikKKx=1U9giwO4sXl$&trD)5{ z_($FP;05ONM-z>g7s%eTHUj5mXmRH4$OLD-g;@O=GJW7ebNbvw<1rAd(;Aw_r_i`k zA$;(*&LX*0plh;X_5O>@>GM!B$Wc}XHm~|(dA*H#24dbq;~c<^V*6Oh!jSGO(Dm>VU2&|jNOZU z5&OXfXdJNe>Y~mvS(mjt7=xiP&9GMN$Du_-t6*(ZA47|PW`)Y|cwELC8hq>kjrn9L zdC<7R$_;K0v;oj8ADvZAj>=iJ6O7?FF9{0*J&^rROM`SID<-j^hlTM`c z0CWIbwRPMh^Q;1TgJyw!WV$7p0Zp_H%CbNbKnE}_EPHgAbx@KYX=(RMmYWPvj#BBA zv`=Bvm@rl)P%;6VuXU6r=@_!2)Su3qbt$5JvSS*m2I*#L86ud$BOB<-*>SjWAR zH0k(9l-Q+ILwU4easurcxw)G_2WL4rx?~&K^UqIj*yiA4@$Ol6+j1`Qu@=7 zJSfSp0cf`t;PKz2C(<`sR+b!MW!waU1#DIclq~oKrQa)Q_aZ>KMWs{HejC6pdl}Ho z#ikqxuR`NNNvjP&;DSJRRfXr4rB^}9CIwenM;1A20 zsdyV#|PoGx&YQJjzZGW6OcS8IVHYUdTEmB-y)rTa~YBqUs3XVC9mqJpDp#q17O792B@&-fVpJS+!!<9^iWW^~;&r8J#D;Td5CPMO{q+u2$J7urKdGR)MUHR2JY(tKUiTRTN*EWO`Mk zSB0zxNz+Ek{$5GD#^9~_#}m};XbQ=MP$k0@9}Y*?=-`gt-y5d)PWCHX;+ENGbGDaj94`n{44j8r@&?UI!o1mqfl3oB0N>=>;*8SUnQLGgQCC5MtKnKPGJSfShQNdA~ zWN0T?sZ#!P|K?c4*RyymlERXV(-P|c+`s*E|0c%;@8dWuE=tvsoPPJ-w=s!2?JfiV z+`n;8_~-uZpZm9bP6-^A{OA7duiUpWT(sk!e(!x7dFs5r`{(}cpZm9e?%)2ofBXNy z{Tpu7dAXGG%BmMn^y=;(J%7Zt>d)1>aq??z{EUL9A6Xqdtwqca9gL}7Pc#^F)+hag zhRH9k)Yf&Hl9|@x`|CZ6#P>xoucH|?h<=4*pQoCfs@)L%rr2K@qbv04LBBrcLzse|aDgSaJD=^#3n z0dbqeZPBF+h?^v~lmT&96p`5E0b-a32u*DE05RAJ!pjMwj7V~V@GJ{r4+*C*%7WNQ zBBLyba-xt#YB>;r^*5}PW67*-iXu-IG~#9(g_Ufv+; ziX?9ko>f5XAyHo#RY2?{kx>OiLs3W~wJM0fsvsJRw5lL{tARK~B1HIA1F@gPtZE=a z#Q_r2s)Gov4x*XJtq!754Gs^qKhAhn+5JX@gh%O>65QJ|n5Qj)~ z6MnTo>?bj+7Kk3=0EuZqAVPyc^b)y2AR5&MagszI(YQ8t4qDwsxH%V-% z2V#UMBC)AHh+*|XB#X`UK@4sH!m9y@(ITk<2+xKf_K-*sMne!gNn|txF-{bcNNofn zun~wfk=6)=Z(|ULNK6oZjX~@uF{?3%3~_+Ov?d@zn}C=ka+`o?6awNTiOHgI2#BL3 z7Keby7RN};YYL)OQxH?c{H7q{LP1<1F;&Eeg1A6pbts5jagoHzFc3Y$K+F)U!a#Ix z2I4k}S)xlb5I0F|X$B%s6p`4}9K^8ZAPU6h<{$=#gYXImF-IhYgYb+1v4_MX!iWH| zlSD=Yh`FMWL~106z(^4DMOq{X-zX4=NGue7Q6Tn{m=y(Lu{c0tS~Q5zXb?+9ZZwES zF(6KoSSA|BfH+EGaSRAk93wF=7DTI95KoBt_`gFUE)K*M5<}Z3Bs!-i1i|= zB?!+}Aoh^hAdFTZc9O{8GQUw2l1NPif&akPP1`Ke5<&R7K^!9Sg79;L*iT}X8^jiI zfW)-cAVOP%*d}sYgJ{$S#7Pp{MdLOgj*?j12E;4k7>RjpL9}WM;#D!fEr_^wAg++u zA>!MCxIkicI}nB9B8iplLG)-3;x)0VJ&4X7K-?y=M|9}`;wFhL9YDMxib!ng2x3@A z5PQYujvxki0^!vO#6FSK34~{75PL|xBaF@^rJ2v&w9?+cS@!?#Bl6ritdYn0R@PYr1 zg2CGQGPGSW2<3g;9FI7qrFgTe){+TY!H!vjwMY-MbzpVz(gRv&=hU9cGasgVrQk~{ zCg$LCaeRtvWp-H=7~|D{U4LmukKx)z-RUtL_gf`yG}qZ^`FE$4L!3_6JZqevWj$uK zZgTDaSlfLE+8tTOIT^QXY<70AaUv5I?Lal9qprMNf1(Gkpt;-?*NDLX!5 z@1P!J@TCFzzz10IihIYh!xINSv;PF(@vh2@x#gIzyk@}g&w7cVD=P~6ALj*npm z0X#lYc6@zeFu=T@Db5$?sQ@ecLgi&wjsaLkgQJS{hcX0UA;%QANxfU)eMBtTuf1HU z9@6-*h!2oPdx$3wXkB}ZfQKW2WMC998W;nl0Aqo1Kq`<1j0YwF=|BcB5tsyI0-U;8 zBIAJ8FnTtsVO;Wo20%lA!=*9M1mGwM1DXL?koX_b91)_;`0i0$*Qv3RnRM z;8CCecnHV`mcfqicjN-ofth@XAO|N?fN8)3Fc^vc;#0`>0H;JppcxPca5^Lad`wym zs1DQs{DE3P5KtQk2I>HJG2e8^GJpr*1j+*C00St`hqx7SvI~{(2KE5&0Pg|s18d>X zGr+UJ2H<(X1Xcixfw{mu;1S>L251Ys2+T*gS77)Na0K`m_ypjKa<2n#0B-{OfVTmD_V;gKHO`*`_-@EZ$aRpD zASVKIaXt^=dcl`u@@C=BY@jm|y8zvQ?m$mOr7zGHXbte0`+tBPz)qkL*abu(Ee6O% zo_dh=fd)WBfKR#KfX!RLKHzQO9pGKyJz#$s^#4|z@Ui)7$Th&naON}MbKnbL2@2i> zECe!v$v_s+4(I^9jVN(>$w59|fl8qQ>P(I;Zv=bB6VPV_mdtKM32kHTQ)iMaE1q1*t zz+Xcrdf|kd2S1c;0obWO12=(RfS&-`{s@q# zPI(Kc3j7A}s-!Gm7&UO>36uvoLio~XCBP5x0V)G{i`r2Wr~y<5=m2-UDnK=W=ajxc zAP@}H2H0Yr*9FKEY+gzFrXn_??VM_rRX8J&4GaRZfXToFAQKn{j0Prgz%VTIY9heUr32$d!3kWsjl$^=pg&;y zHW25mZveoEv-~80ekTLuh5{pj5x{VO^*sPEjrj=LQ!)?F?Q+=$`i3&|O0C#7C@m8? z29yQxoI{0yEA5;^$WCJ(28VXGb8Xo>^f*H$urTTj77YozBK8K;$+0l%Jh#UxhXo@w z4PYc#32i7j6zqKLsp4}kaK#GFIZW;?)UJr#%x+~`w&?Q}zTWhqdra9#+Yh_JrRhvt z0L%k880G-?RyQBI?d!ey*$(#bJ+^sP5I9^p*=WFF%JFXxQ4Y^V07n}OqYZ<*7~p)l zr?BFHvWz7Fhd%?i0$@O&0G0#n!AU>{dyZppDbODI7o&jQZ?Yk|5*UkJ&NatT}w+`9~NxmyEnodV0* z2C#cr-WEUrTY(n=mJb{*#;0V16y$ZZ^(VX4qzwnAAkkWj$9BxY4fk+oUPdd zxeF)+cp>l_rNeu@w8GR!XmI^ip3~g>n%2( z)grZ2aU7a!3e4em{@ad={eDjTY(RfUW?8(f?Uvy0ws zktBw}03Y%$`v%4C6fZ!y7!R5!)(AT@=;E$#U>+R?=W(qqPSNhHC}OUwBJ>=z+oIDs zEyNg(KvYAnLNVi<)&pTUa1J(~h}*O|A>Iho{Y3L`wJ6tl7~)f){AmGcAALP<_zx&P zLKc5b5Jw`nV`zVwYjs-^aqTN7|c3$h@ItV)-*gaKa$9MjZ z?4AHSM34bLBaWO$GcF0|1=#%tJ9gQ3eMZmdy|B@2%Pu?&E7v}eaRC+D-;v#S{^wh3 z4enaLq{8E3-33Ico>TUfwAZr4Rc3prtPIJU{`JegHew_PO9bkV#FEz^Ps1=gESxR6DJH|vC^i%sy>&mmjHh_>BF38i9ouXE_4uWlH9md> z`Qi`=G|>JQ?oGLOCPhBuYU9DChqJdE39s+qTQ~HTH>$q*>x|U51~1>BYf)ert)Zd~ z4DzN!Wp|B9+V|F)%Fj4;Ed@*sF!mR55BTJAz3G#@ldM{;fwTb@Ua$x+fBjOEj@3PM zZ5bGb*8Vc?p3UBR*6;m&)scr?hR(OY2K;uq_EKh@_Fq~l;b9&~8Y)iGRr?FWhiFe9 z@A%8wOjtzA?k*HnE}^^M79kWvMM#kDhvyU{pheqX8-8T)zdq`6W9>Ozn~j);VIG#^ zON<<;jl>pN5F>!6pI=jp61OM{MUT!XT}H>%6`|pf?L9kv_lfPVya=CSWqSsQ(U&o_ zP6%-sL(Bel@$wf31-hSE^egPtpx-6#UWS{8(FraTR8%Ep!kwr?c$SW?k3#1=>@ObA zz5eRal>D zkBY$Wkvveuey{b=1Xt(t=26gLSOwJc=BDh3zj3G??Mxe zKwwhDB?y=OMdF_rzuug2YRG$-;b90N0yswm{RHzBBI74*gzMS*(i3jTn63FUd=q|6 zo7;b^xAv?!|C1Jc&&a6zGqxT33(McSS*3C0r>~Z^8f{HwYn1rmQS-u|;f4%bxkv`Q zN@MZn&suk^<6ggDIcv~ZR+T2&`~u5tG4vNS^*6B;TD1MWeQJ@Qx^YRuB0IQThK!`k3RSFl=bV8!f}bPmI)PGZ)(1HMdZDkXw7+X3qnWBn-^*A zTfG4b?pc3~vYldo>-g49KhEv@HgM{yOiL;(yiB%Y$3 z{Y~p%JXCYL@kvvU61(@rVHm{NU(MeA*yh|$ef3%;2KJY?k6S$DlSRu?^Gi~yMu=Ls zFzK3LYF35QLtpY7oRao%diCN-(^B-gg~;s`k5Eh&g|{$PW@5_MhWT=F zctROi1JzHPE`kj#@Qa@a$KU6~_OcLr#9kkW!{RQr^J057-OpuzYx|oX+PkNxj6I5u z!U$m50bV_(}Ts>*$05~>u5<@Kh<{Yk>J%pW-0Lm^I8fH&L4EIL)1 zztT}W_GayAw3bh^gp;V5O% zUvc-`A*xhG5r;)c)xQ*B<**W^E_br9NHOxRR`qu)q14t~J51^VGx= zyN|^-7{r{10q%P8_phoG{PvGu4=ph$-&0=WUF|g}wfCH>c*JG<-=wFwLnk`Ig15<^ zN9KRM_{~lamsli=aDP2A!2UY_fvdjBuN<&uQ_0nHy^vJr+d&`gd=0Mg$4cWT~ys%ZTd>sX;o3M3aHA-;Vzi^T= z`{LBBq_4T2^HVciOujFUu%=JNCED4)l+q%+TYvw8Q~bPvI|)`N>t@+k@pVrw;x>m#lO=)QXUKB9b}KGtRb3XI?WWyZ-zUU~tR zxMkxfnq$SnKm;L)U6N}<+_88ySWz`nLd+>$g zFg`VL**~CD!+ZN{)0a-f{~oYD<-p>8R8--IHuAF@*O@-@nti~ruS2Q^b(;=5e4NEi zV2l_MgqrMM=6SQy`OTeP8N-0$UY{QeOch&TfOmtxW_gympUeJXpSTsF%Y*k-#XZ$* zT&WkA=NDlAie1th-#efF>PjQ4yznr5f~`Jd!`;ZN+Njw6WuCoN6Mh=e{qcj+Gk(_g zp*UC@H69b^Y9sLWZ}c?VnE2+mkBq`i8b5erjU$po&tN@YH-?Chg3(h}XljbcI(nd9 zeTe8=2c2R6L{CQJTBH88d{i%8OBVcq7XzYsFTTy}GU*?<(cPF?{a9 z9LL4=x(LLdj2HO0T)68Y5L-o3J-r7uxQ+GD9}C6tdiqn?ey7&AG!BP=J)_kJxLb}) zz4C=$G~D8tLm9)zh|~3T-x&KBelFh}b#g>C&nU}rYy8^3^>e9WZNCZ+)sL|9S}ACJ zSOYZv3%uIEwZeYIwXlEwjBVbVZhC9o@!CcUqWng`_)O4Kqrhy*evVZKQ#=t{oo7R1MxMhJJi2te{|;Z`L;&gF4M7$!6j=p zt`pZ`fasoYh%2d`qFN(881FGhH_}7Oe}y7zqsXLGQ9DNW#l_imeBy`CRgSdPeab{Q zW{WCKq0bdZ8bPcOOXG0Y>CssC$D86+;;mAzG=q3exOww?L}WBZ>(Agd5CTB!165?Xu`pL*J)RcWODyTaZP zvs&Pzbya|lCgw-!HMl9LXewWih+Bwdfc;BPp9Q>mqTj#Ye$MWAys0ojG!KOf?}-Ww zrpzX0hU)&VKZz&?oGSbaaWE8x<2Q?}5qvHGVDBakik?)3V@)nUX+;$ZU4&Bl`-F3 z{CVDt?j?O-{|?jeo~Qd=?9-@?l@iWTA%pF*f3T^t$C@)EA_DT2PuL7Li9XHrNIS%G zWcaBe$YJ5*0i&(L8j3HAU=HEEBDguk2cjSW;;0zVT#t;ge>%$dk^QS)AH4ajssZ7# ze(nlGw)&@w+P(h#!7C~S%Xzs>@p^OJH^Bb+sbfAOtZM#PJ_X~TM#c8lKP@!m(#$6Q7p#)3#i12aD#MEz>w9%g-ugkRsssLY z&lF3-(JRTY;L4NPdgcpn<|R~87IApPL+s_KF~xBRm;LKo)!Rh3o$}V<nwN{@=qE|F#hny9@F8f!*9Pu|Ee74iV86}0wyn0NwNNkUyR*P+s zaMS+Pu?lArzUyW#^Rn!%UB&)gvN8jvF8Fpuz|X2AOo=<2(cfbG(>gHNZMmp4zEFNc|J15llIqx~mbXtFeOr0L4aYcD$l~7q8!$ zt4aC$QtY{^76QBQVp^>(YW}H-ZLi>^vua&$?kGvN*DAHzG>Fsv?as18zyR6Bt94PW z$Zsj@$2y?Lls{?=$jMM#l*)f^BT%!i+)}JX-pXFRoHb}*Z562&H(9A&maNEnrew9J zhLcOYT!rPd=g`AA*eJGRVa9TLkn6MRVm^ve<*89CA`*(*Y%SZWR=IQ(hx-rg{gJa* z8o3ZN*S$e0b~I8h*mx+!ix$ff>v@)1wJwM&E#+*nax1p9r*fq~Lb9$VQYeq!Ad|Ep`wbRY1rxSKrbIp2y6O<{2yV23s zRY*-IY~h#H^_E}1@5UA4l>3jq|IS-=ArkQCi}vr@uJWtk``Me7dZ?+2)2v;lcq6}m zm%-%|cbDh|1#;PJ6Q-x8kNYJ+tw-1e{(Mze9iTe9__uIESowau( zj9huC@cSOLT47%o-0yTu--o1M``f>9c*oMjp2{yQc7L+%VmneZq84VvOUPb@8_zF4 zgzg>jJT5lvhf^EHx^|dEd&O%MN5yCD&^?k2`*$>VcbfkKH#nOIwh|kfchU-S_x$-vXV%ZNb`Ba%(goJjN>RUP1(P(W@Hv zt--S*whQjcl#6G?+Ab*YPv$!sEZZP1chRHppL+4}h#&qNe?nK>!da`Bk9f4J9w2XF zi|<|RAA)SzU{knv+sD=^_s~#l)riz>ITP#Ea zT$ac>{lsJ4cjlcyj+|FL%I| zO|1MV!_j}K_^_wmz1XsSA2|-rZ_Qmc=*;9_ESLDUfkTz0%N!Bn>0aoMh2lsrbVRCf z_J+7A;wiRTZw6tPoJ;K!@mgm|IW0b~!k^Dcg#zg+ulJf_+71A3aJBT`r#Q zqes;HVY$5VGbXis_q#q%zGl5r5fOvUc;x^@569qv;|h@(^n6Im<$oj|F6M^ z6UPV4cy7=Owf&|+=M7|m&wxsIt4DqHu-M*Lcl)2}Ch3RcqCe24Rk|~8pe*#gOQL)~ z{g5*)IepSNarg;6aL3txdR*5UV=SgwXfyc}tx^?le5lu_mABZ_Pd9edTcgkE`hNib CnT78F delta 32151 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 diff --git a/components/ui/dialog.tsx b/components/ui/dialog.tsx new file mode 100644 index 0000000..00ac307 --- /dev/null +++ b/components/ui/dialog.tsx @@ -0,0 +1,122 @@ +"use client" + +import * as React from "react" +import * as DialogPrimitive from "@radix-ui/react-dialog" +import { X } from "lucide-react" + +import { cn } from "@/lib/utils" + +const Dialog = DialogPrimitive.Root + +const DialogTrigger = DialogPrimitive.Trigger + +const DialogPortal = DialogPrimitive.Portal + +const DialogClose = DialogPrimitive.Close + +const DialogOverlay = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + +)) +DialogOverlay.displayName = DialogPrimitive.Overlay.displayName + +const DialogContent = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, children, ...props }, ref) => ( + + + + {children} + + + Close + + + +)) +DialogContent.displayName = DialogPrimitive.Content.displayName + +const DialogHeader = ({ + className, + ...props +}: React.HTMLAttributes) => ( +
+) +DialogHeader.displayName = "DialogHeader" + +const DialogFooter = ({ + className, + ...props +}: React.HTMLAttributes) => ( +
+) +DialogFooter.displayName = "DialogFooter" + +const DialogTitle = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + +)) +DialogTitle.displayName = DialogPrimitive.Title.displayName + +const DialogDescription = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + +)) +DialogDescription.displayName = DialogPrimitive.Description.displayName + +export { + Dialog, + DialogPortal, + DialogOverlay, + DialogClose, + DialogTrigger, + DialogContent, + DialogHeader, + DialogFooter, + DialogTitle, + DialogDescription, +} diff --git a/package.json b/package.json index 6a731a5..e1740e6 100644 --- a/package.json +++ b/package.json @@ -10,6 +10,7 @@ }, "dependencies": { "@radix-ui/react-accordion": "^1.1.2", + "@radix-ui/react-dialog": "^1.0.5", "@radix-ui/react-dropdown-menu": "^2.0.6", "@radix-ui/react-navigation-menu": "^1.1.4", "@radix-ui/react-separator": "^1.0.3",