From 275d3acdd59d5315ddb42e3e19a155e8fc564205 Mon Sep 17 00:00:00 2001 From: kat Date: Tue, 12 Dec 2023 15:06:29 +0100 Subject: [PATCH 1/4] Dashboard --- blurme/pages/dashboard.py | 54 ++++++++++++++++++++++++++++++++++----- 1 file changed, 48 insertions(+), 6 deletions(-) diff --git a/blurme/pages/dashboard.py b/blurme/pages/dashboard.py index 5abe2ab..97949e3 100644 --- a/blurme/pages/dashboard.py +++ b/blurme/pages/dashboard.py @@ -3,14 +3,46 @@ from blurme.templates import template import reflex as rx +ICON_EMAIL = "assets/email-icon.png" +ICON_PHONE = "assets/phone-icon.png" @template(route="/dashboard", title="Kontakt", image="/contact-icon.png") +# def dashboard() -> rx.Component: +# """The dashboard page. +# +# Returns: +# The UI for the dashboard page. +# """ +# section_style = {"background-color": "#f5f5f5", "padding": "10px", "margin-bottom": "20px"} +# icon_style = {"width": "20px", "height": "20px", "margin-right": "10px"} +# heading_style = {"font-weight": "bold", "font-family": "Arial, sans-serif"} +# +# return rx.fragment( +# rx.heading("Kontakt", font_size="3em"), +# rx.text("Witaj na stronie Kontaktowej w aplikacji BlurMe!"), +# rx.text( +# "Jesteśmy dostępni dla Ciebie na różnych platformach. " +# "Skontaktuj się z nami, gdy tylko masz pytania, sugestie lub " +# "po prostu chcesz porozmawiać o naszej aplikacji." +# ), +# rx.image(src=ICON_EMAIL, alt="Email icon", style=icon_style), +# rx.heading("E-mail", level=2, style=heading_style), +# rx.text("Zapraszamy do napisania do nas na adres: contact@blurme.com", style=section_style), +# rx.image(src=ICON_PHONE, alt="Phone icon", style=icon_style), +# rx.heading("Telefon", level=2, style=heading_style), +# rx.text("Możesz także zadzwonić pod numer: +48 123 456 789", style=section_style), +# ) + def dashboard() -> rx.Component: """The dashboard page. Returns: The UI for the dashboard page. """ + container_style = {"background-color": "#f5f5f5", "padding": "10px", "margin-bottom": "20px", "display": "flex", "align-items": "center"} + icon_style = {"width": "20px", "height": "20px", "margin-right": "10px"} + heading_style = {"font-weight": "bold", "font-family": "Arial, sans-serif"} + return rx.fragment( rx.heading("Kontakt", font_size="3em"), rx.text("Witaj na stronie Kontaktowej w aplikacji BlurMe!"), @@ -19,10 +51,20 @@ def dashboard() -> rx.Component: "Skontaktuj się z nami, gdy tylko masz pytania, sugestie lub " "po prostu chcesz porozmawiać o naszej aplikacji." ), - rx.heading("E-mail:", level=3), - rx.text("Zapraszamy do napisania do nas na adres: contact@blurme.com"), - rx.heading("Telefon:", level=3), - rx.text("Możesz także zadzwonić pod numer: +48 123 456 789"), - rx.heading("Media Społecznościowe:", level=3), - rx.text("Odwiedź nas na Facebooku, Twitterze i Instagramie @BlurMeApp") + rx.fragment( + rx.fragment( + rx.image(src=ICON_EMAIL, alt="Email icon", style=icon_style), + rx.heading("E-mail", level=3, style=heading_style), + rx.text("Zapraszamy do napisania do nas na adres: contact@blurme.com"), + style=container_style + ) + ), + rx.fragment( + rx.fragment( + rx.image(src=ICON_PHONE, alt="Phone icon", style=icon_style), + rx.heading("Telefon", level=3, style=heading_style), + rx.text("Możesz także zadzwonić pod numer: +48 123 456 789"), + style=container_style + ) + ) ) From ec7c3861dd6d9275dc06727d7b0ce5ade0e1a0ab Mon Sep 17 00:00:00 2001 From: markrz12 Date: Tue, 12 Dec 2023 21:27:48 +0100 Subject: [PATCH 2/4] =?UTF-8?q?BLUR-8=20Podgl=C4=85d=20zdj=C4=99cia?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- blurme/components/sidebar.py | 8 +++-- blurme/pages/settings.py | 25 ++++++++++++--- blurme/state.py | 44 +++++++++++++++++++++++--- blurme/styles.py | 4 +++ blurme/templates/template.py | 61 ++++++------------------------------ 5 files changed, 79 insertions(+), 63 deletions(-) diff --git a/blurme/components/sidebar.py b/blurme/components/sidebar.py index 62ad937..123d750 100644 --- a/blurme/components/sidebar.py +++ b/blurme/components/sidebar.py @@ -3,6 +3,7 @@ from blurme import styles from blurme.state import State from reflex.page import get_decorated_pages +from blurme.templates import template import reflex as rx @@ -25,7 +26,7 @@ def sidebar_header() -> rx.Component: align = 'center', ) -def sidebar_item(text: str, icon: str, url: str, ) -> rx.Component: +def sidebar_item(text: str, icon: str, url: str) -> rx.Component: """Sidebar item. Args: @@ -39,6 +40,10 @@ def sidebar_item(text: str, icon: str, url: str, ) -> rx.Component: # Whether the item is active. active = State.router.page.path == url + default_dark_icon = "/image-icon-dark.png" + + #final_dark_icon = dark_icon if dark_icon else default_dark_icon + #active = (State.router.page.path == f"/{text.lower()}") | ( # (State.router.page.path == "/") & text == "Strona główna" #) @@ -82,7 +87,6 @@ def sidebar() -> rx.Component: Returns: The sidebar component. """ - # Get all the decorated pages and add them to the sidebar. from reflex.page import get_decorated_pages return rx.box( diff --git a/blurme/pages/settings.py b/blurme/pages/settings.py index 6f6d865..7703e77 100644 --- a/blurme/pages/settings.py +++ b/blurme/pages/settings.py @@ -1,14 +1,29 @@ """The settings page.""" - +import asyncio from blurme.templates import template +from blurme.state import State import reflex as rx + +color = "rgb(107,99,246)" + @template(route="/settings", title="Zdjęcie", image = "/image-icon.png") def settings() -> rx.Component: - return rx.vstack( + return rx.vstack( rx.heading("BlurMe", font_size="3em", margin_bottom="25px", background_image="linear-gradient(271.68deg, #7566fe 0.75%, #f96caf 88.52%)", background_clip="text", padding = "10px"), rx.text("Dodaj zdjęcie, które chcesz zanonimizować", font_size="1.2em"), - rx.upload(rx.text("Drag and drop files here or click to select files"),border="1px dotted rgb(107,99,246)", padding="5em")) - - + rx.upload( + rx.vstack(rx.text("Drag and drop files here or click to select files"),), + border=f"1px dotted {color}", + padding="5em",), + rx.hstack(rx.foreach(rx.selected_files, rx.text)), + rx.button( "Upload", + on_click=lambda: State.handle_upload( + rx.upload_files()),), + rx.button("Clear", + on_click=rx.clear_selected_files), + rx.foreach( + State.img, lambda img: rx.image(src=f'/{img}')), + padding="5em", + ) diff --git a/blurme/state.py b/blurme/state.py index 7efea12..3f84851 100644 --- a/blurme/state.py +++ b/blurme/state.py @@ -1,12 +1,48 @@ """Base state for the app.""" import reflex as rx +from blurme import styles +import asyncio +#class State(rx.State): +# def __init__(self): +# super().__init__() +# self.dark_mode_state: bool = False +# def __str__(self): +# self.dark_mode_state +# def toggle_dark_mode(self) -> None: +# self.dark_mode_state = not self.dark_mode_state +# text_color = styles.text_color_light if self.dark_mode_state == True else styles.text_color_dark +# styles.text_color = text_color +# print(f"Dark Mode State: {self.dark_mode_state}") +# print(f"Current Text Color: {text_color}") +# pass + class State(rx.State): - """Base state for the app. + """The app state.""" + + # The images to show. + img: list[str] = [] + + async def handle_upload(self, files: list[rx.UploadFile]): + """Handle the upload of file(s). + + Args: + files: The uploaded files. + """ + for file in files: + upload_data = await file.read() + outfile = rx.get_asset_path(file.filename) + + # Save the file. + with open(outfile, "wb") as file_object: + file_object.write(upload_data) + + # Update the img var. + self.img.append(file.filename) + self.img = self.img + print(f"Current Text Color: {self.img[0]}") + - The base state is used to store general vars used throughout the app. - """ - pass diff --git a/blurme/styles.py b/blurme/styles.py index 8bf3cc2..c0bd4f4 100644 --- a/blurme/styles.py +++ b/blurme/styles.py @@ -1,11 +1,15 @@ """Styles for the app.""" import reflex as rx +from blurme.state import State border_radius = "0.375rem" box_shadow = "0px 0px 0px 1px rgba(84, 82, 95, 0.14)" border = "1px solid #F4F3F6" text_color = "black" +#dark_mode_state = State.toggle_dark_mode() +#text_color = "white" if dark_mode_state == True else "purple" +text_color_light = "black" text_color_dark = "white" accent_text_color = "black" accent_color = "linear-gradient(linear-gradient(43deg, rgba(201,238,248,1) 18%, rgba(253,210,227,0.7792366946778712) 86%)" diff --git a/blurme/templates/template.py b/blurme/templates/template.py index 1d1c4dd..befb389 100644 --- a/blurme/templates/template.py +++ b/blurme/templates/template.py @@ -5,6 +5,7 @@ from __future__ import annotations from blurme import styles from blurme.components.sidebar import sidebar from typing import Callable +from blurme.state import State import reflex as rx @@ -16,71 +17,27 @@ default_meta = [ }, ] -#def menu_button() -> rx.Component: -# """The menu button on the top right of the page. -# -# Returns: -# The menu button component. -# """ -# from reflex.page import get_decorated_pages - -# return rx.box( -# rx.menu( -# rx.menu_button( -# rx.icon( -# tag="hamburger", -# size="4em", -# color=styles.text_color, -# ), -# ), -# rx.menu_list( -# *[ -# rx.menu_item( -# rx.link( -# page["title"], -# href=page["route"], -# width="100%", -# ) -# ) -# for page in get_decorated_pages() -# ], -# rx.menu_divider(), -# rx.menu_item( -# rx.link("About", href="/about", width="100%") -# ), -# rx.menu_item( -# rx.link("Contact", href="mailto:founders@=reflex.dev", width="100%") -# ), -# ), -# ), -# position="fixed", -# right="1.5em", -# top="1.5em", -# z_index="500", -# ) - def dark_mode() -> rx.Component: return rx.box( - rx.button( rx.icon( tag="moon", size="4em", color=styles.text_color, ), - on_click=rx.toggle_color_mode, + on_click= rx.toggle_color_mode + #State.toggle_dark_mode() ), - position="fixed", right="1.5em", top="1.5em", - z_index="500", - ) + z_index="500",) def template( route: str | None = None, title: str | None = None, image: str | None = None, + image_dark: str | None = None, description: str | None = None, meta: str | None = None, script_tags: list[rx.Component] | None = None, @@ -92,9 +49,10 @@ def template( route: The route to reach the page. title: The title of the page. image: The favicon of the page. + image_dark: The dark mode favicon of the page. description: The description of the page. - meta: Additionnal meta to add to the page. - on_load: The event handler(s) called when the page load. + meta: Additional meta to add to the page. + on_load: The event handler(s) called when the page loads. script_tags: Scripts to attach to the page. Returns: @@ -132,8 +90,7 @@ def template( ), **styles.template_page_style, ), - #menu_button(), - dark_mode(), + dark_mode(), align_items="flex-start", transition="left 0.5s, width 0.5s", position="relative", From 02d712614fe6c94677e5ee2d2bb868030bfcea4b Mon Sep 17 00:00:00 2001 From: markrz12 Date: Tue, 12 Dec 2023 21:28:17 +0100 Subject: [PATCH 3/4] BLUR 8 --- blurme/state.py | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/blurme/state.py b/blurme/state.py index 3f84851..359220d 100644 --- a/blurme/state.py +++ b/blurme/state.py @@ -24,21 +24,19 @@ class State(rx.State): # The images to show. img: list[str] = [] - async def handle_upload(self, files: list[rx.UploadFile]): """Handle the upload of file(s). - Args: files: The uploaded files. """ for file in files: upload_data = await file.read() outfile = rx.get_asset_path(file.filename) - + # Save the file. with open(outfile, "wb") as file_object: file_object.write(upload_data) - + # Update the img var. self.img.append(file.filename) self.img = self.img From 05b350c0b7e2872dc6a5fb0f9e97991818565d35 Mon Sep 17 00:00:00 2001 From: markrz12 Date: Tue, 12 Dec 2023 21:30:55 +0100 Subject: [PATCH 4/4] BLUR-36 dark mode icon --- assets/about-icon-dark.png | Bin 0 -> 903 bytes assets/contact-icon-dark.png | Bin 0 -> 732 bytes assets/home-icon-dark.png | Bin 0 -> 598 bytes assets/image-icon-dark.png | Bin 0 -> 820 bytes assets/logo-2.png | Bin 0 -> 24212 bytes 5 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 assets/about-icon-dark.png create mode 100644 assets/contact-icon-dark.png create mode 100644 assets/home-icon-dark.png create mode 100644 assets/image-icon-dark.png create mode 100644 assets/logo-2.png diff --git a/assets/about-icon-dark.png b/assets/about-icon-dark.png new file mode 100644 index 0000000000000000000000000000000000000000..48cfc9b778b975be6d17871f56c2cd914f4d2049 GIT binary patch literal 903 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE0wix1Z>k4UEa{HEjtmSN`?>!lvI6-`N#5=* z4FB8v&+G^C*h@TpUD==WaPu?qPTId|22hAGzsN6y@%*ClSwO|>JY5_^JdU58a^HJ$ zpv3Y0&+n#K33H$NyCOuTYtpH+r@mZ!b#C=1HH`^+KI*07Kg2o8lp9MkRXTVyomQ`2 zkP#`a_wxCqtev-t@A*!gVJ{Y4eSdlP-sY9&aQU3cchhVZTnpgwf65z8E&>PX!R~NHQD{V;k?;y{#g2d=%9J6P&ql3x*{-{APYW36;UWFi-bs7JX@ zXy;`Hl?H|hl2IjkR;Sw-Y?vchkIY=Us)SwPiIs4wep_#5kmZw}6U-c9vnAGFzjrt< zrRLr2`WYt{$Z?&XQlq!GZLRxL5#7t1=Jd#&Oj{D}cUq+NWzjsLrTbX3*RdOgx1P4R z`ruXcZ_$UXOBeV(4nHYNq7V}+_((>s^y*6Gn!@IJyWj3wQup|- z<>h+091jWW4clMp8LsAMXb@^Ym(KXKY1*m7(~AD`&3B$|vEG`&;bnUNUfzBl;l*>0 zT#8Rn7dGy4FZBD>xp?l;-Y@evy0YkKGwlA~d7D{-Gg#rT)UFT5Uj3Wacl|K)-CxH< zR)iML*S?YOwT8hvwAEvW)$Fs6X3alcm><68KywfO{U0p#Qy49|I`|!S?F~3^kFTS= zL1rqWZOh}1DPJYMch2tJ@j@^2$dQf5-dz8<)M~rg{@8PZ!TD<@&X{2`>qMRDYq`sd zg0n9f?@zln$vSS6`W3gkrbMi{irf+^7S8gbLS@cJ1Wh1 zxgykj@3F5N!~a=y+I?hN9U*%8!^*YNk2U_<-%wf`<_21Ztf#@Yr3Rt5$oc_uw58glbfGSez?YhX3* RF#u{{@O1TaS?83{1OR1MhOhtt literal 0 HcmV?d00001 diff --git a/assets/contact-icon-dark.png b/assets/contact-icon-dark.png new file mode 100644 index 0000000000000000000000000000000000000000..324d3b1ecbc3aae3564eddf1e6ac706a1342476a GIT binary patch literal 732 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE0wix1Z>k4UEa{HEjtmSN`?>!lvI6-`N#5=* z4FB8v&+G^C*h@TpUD==WaPu>%*)e zkpi!?wK4LM`MJmcQu7_+xbl{Kn^S%D`qG^j65K5V4xUo}a!I_$+dc8R zT3+G(Q_e9g3YZ-buB)yY1dJM%#0tjErC#6Fh^F&wc>pJrsyBolAwKQsTjaN?Dd zRgHCpvfl-k_k0#|Xli8bi3pzXb+hz;pG&jWlw9`RG3Nox-vtYwKE9TsyeE-$^~x~A zz%wt(8(uYMq<)S#{G)r3XipON+dAiq3=XTA)?D(cDdcw8U&B0;Ipe|Zg}FTqpI1ji3LJuu$gO3Sin$Epd$~Nl7e8wMs5Z1yT$~21drZhDN%Eh9QQg uRt82^#unNJ237_JCO+xhC>nC}Q!>*kacgiDyuTf&fx*+&&t;ucLK6VZ2tKp` literal 0 HcmV?d00001 diff --git a/assets/home-icon-dark.png b/assets/home-icon-dark.png new file mode 100644 index 0000000000000000000000000000000000000000..cd6d046dd127a831b082415edd6e6bf92e4fbbc1 GIT binary patch literal 598 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE0wix1Z>k4UEa{HEjtmSN`?>!lvI6-`N#5=* z4FB8v&+G^C*h@TpUD==WaPu?sr>=VR6)41*U*s3Ucz#j&EFinq)5S5wk&J;jpw zH(JMX%fg~>7Jv7Cx9Jqtka@G(kU>C;_W&D%)yYS$+nOeAH3}-`7h~99w8D95j{0G( zJoTkKu6Lt*-?>a%!s)8{=g>aA?JQH(g6tUj7EF3Ce&=rpW7j141n1SA8VuH)txu~x z9tj-h?YcBahcENai?^(5T_X1a3y^%?aXY)HAQW5M~Bbd z3x7ViM<`dx_7~5&pX{>B&gOv1tb9SivwKU!_QxLi&n)p-Z^PSjJKZIo6*KZrd61mX zao_dh&IX_q22WQ%mvv4F FO#r1@>W}~c literal 0 HcmV?d00001 diff --git a/assets/image-icon-dark.png b/assets/image-icon-dark.png new file mode 100644 index 0000000000000000000000000000000000000000..6fec9dfc6b31d23eb47f9bd46341ec86f9980d96 GIT binary patch literal 820 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE0wix1Z>k4UEa{HEjtmSN`?>!lvI6-`N#5=* z4FB8v&+G^C*h@TpUD==WaPu=ODU|MO017eY7x{%So?lcx3#d5S)5S5wFSOKeqlJcko8+kFt~h`MG#z ztPCmSPUiTUcxB?@-Wx^fT2^YOSd2bY+iW}e_~X>Fb8j8jcRbCtJ#wS+h2kz}oy~K1 zu1pYC{2#F6-v1w`0v4-nThv@8?Cg-gtIo%J8ei`7!?PK*>o2!5zFj%-xoWcSvN;Rd znQn>BJ7zU4LaV^uTDuhCOT?_8-i*~rs0$#ORLj1_y_c$1Q{PJLd- z`ibkT;Avhj1BodUq>q?P58oE3>&sSHy{B9=fa6qUQsmWRRx`}hRv+0Cz;Ww^kG+iA zG^bO=cI}%CB~O-KQ?g7J61})ay6V=BcD?0CvS)W*t=<33P|u`L?bE@i9W^C;D-2SX zI)7h1jj5OU6w~TQyA4JEzj?E&Z0h@Hsi;r>t)HJc$p*x2>RP{#(|p&wXY69T^!!>s z-xb$n|FGi65#fhT(s%XZ=JeHViBl1k{677ldd=_3i*xTSRoHgsaguA!&6iHy>mOC= zS50raw^58IWaIU$xt&!%CQg~W_vO8PTb{`8Tz&godHZzzx6)ZkhxMbn+xJ@>yw6sh z!hPvgY$`C#sg}4#l%yn9nO2EgLvHcCzd#KPp00i_>zopr0By2V8UO$Q literal 0 HcmV?d00001 diff --git a/assets/logo-2.png b/assets/logo-2.png new file mode 100644 index 0000000000000000000000000000000000000000..8c2b2fb232ee1d4ed80b97b6b2504e7bdd60a0b2 GIT binary patch literal 24212 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 L3*%Zt*T??@YO;D= literal 0 HcmV?d00001