premiere modif front

This commit is contained in:
guillaume 2019-01-23 10:39:13 +01:00
commit 157b64d075
39 changed files with 1721 additions and 97 deletions

View file

@ -1,92 +0,0 @@
package org.chtijbug.drools.console;
import com.vaadin.flow.component.button.Button;
import com.vaadin.flow.component.orderedlayout.HorizontalLayout;
import com.vaadin.flow.component.orderedlayout.VerticalLayout;
import com.vaadin.flow.component.textfield.PasswordField;
import com.vaadin.flow.component.textfield.TextField;
import com.vaadin.flow.router.Route;
import org.chtijbug.drools.console.service.KieRepositoryService;
import org.chtijbug.drools.console.service.UserConnectedService;
import org.chtijbug.drools.console.service.model.UserConnected;
import org.chtijbug.drools.console.service.model.kie.KieConfigurationData;
import org.springframework.beans.factory.annotation.Autowired;
import javax.annotation.PostConstruct;
@Route("")
public class WelcomeView extends DroolsAdminConsoleMainView {
private UserConnected userConnected;
private TextField userNameTextField;
private PasswordField userpasswdTextField;
private Button loginButton;
private Button logoutButton;
@Autowired
private KieRepositoryService kieRepositoryService;
@Autowired
private KieConfigurationData configKie;
@Autowired
private UserConnectedService userConnectedService;
public WelcomeView() {
super();
}
@PostConstruct
public void buildUI() {
userConnected = new UserConnected();
VerticalLayout verticalLayout = new VerticalLayout();
HorizontalLayout userHorizontal = new HorizontalLayout();
verticalLayout.add(userHorizontal);
TextField urlTextField = new TextField("Kie-Wb url");
urlTextField.setValue(configKie.getKiewbUrl());
urlTextField.setMaxLength(200);
userHorizontal.add(urlTextField);
userNameTextField = new TextField("User name");
userNameTextField.setValue(configKie.getUserName());
userConnected.setUserName(configKie.getUserName());
userNameTextField.addValueChangeListener(valueChangeEvent -> userConnected.setUserName(valueChangeEvent.getValue()));
userHorizontal.add(userNameTextField);
userpasswdTextField = new PasswordField("Password");
userpasswdTextField.setValue(configKie.getPassword());
userConnected.setUserPassword(configKie.getPassword());
userpasswdTextField.addValueChangeListener(valueChangeEvent -> userConnected.setUserPassword(valueChangeEvent.getValue()));
userHorizontal.add(userpasswdTextField);
loginButton = new Button("login");
userHorizontal.add(loginButton);
logoutButton = new Button("logout");
logoutButton.setEnabled(false);
userHorizontal.add(logoutButton);
loginButton.addClickListener(event -> {
UserConnected connected = kieRepositoryService.login(this.configKie.getKiewbUrl(), userConnected.getUserName(), userConnected.getUserPassword());
userConnected.getProjectResponses().clear();
userConnected.getProjectResponses().addAll(connected.getProjectResponses());
userConnected.getRoles().clear();
userConnected.getRoles().addAll(connected.getRoles());
loginButton.setEnabled(false);
logoutButton.setEnabled(true);
userConnected.setConnected(true);
userConnectedService.addToSession(userConnected);
});
logoutButton.addClickListener(event -> {
userConnected.getRoles().clear();
userConnected.getProjectResponses().clear();
userConnected.setConnected(false);
loginButton.setEnabled(true);
logoutButton.setEnabled(false);
userConnectedService.addToSession(null);
});
setActionView(verticalLayout);
}
}

View file

@ -20,6 +20,10 @@ public class UserConnectedService {
VaadinSession.getCurrent().setAttribute(USER, userConnected);
}
public void disconnect(){
VaadinSession.getCurrent().setAttribute(USER, null);
}
public void addAssetToSession(String asset) {
VaadinSession.getCurrent().setAttribute(ASSET, asset);
}

View file

@ -0,0 +1,12 @@
package org.chtijbug.drools.console.util;
import com.vaadin.flow.data.validator.RegexpValidator;
public class PasswordValidator extends RegexpValidator {
private static final String PATTERN = "[a-zA-Z0-9_@./*#&+-]{4,30}";
public PasswordValidator(String errorMessage) {
super(errorMessage, "[a-zA-Z0-9_@./#*&+-]{4,30}", true);
}
}

View file

@ -0,0 +1,12 @@
package org.chtijbug.drools.console.util;
import com.vaadin.flow.data.validator.RegexpValidator;
public class hostnameValidator extends RegexpValidator {
private static final String PATTERN ="(^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$|^(([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9\\-]*[a-zA-Z0-9])\\.)*([A-Za-z0-9]|[A-Za-z0-9][A-Za-z0-9\\-]*[A-Za-z0-9])$)";
public hostnameValidator(String errorMessage) {
super(errorMessage, PATTERN, true);
}
}

View file

@ -0,0 +1,43 @@
package org.chtijbug.drools.console.vaadinComponent.ComponentPerso;
import com.vaadin.flow.component.combobox.ComboBox;
import com.vaadin.flow.component.dependency.StyleSheet;
import com.vaadin.flow.component.icon.Icon;
import com.vaadin.flow.component.orderedlayout.HorizontalLayout;
import com.vaadin.flow.component.orderedlayout.VerticalLayout;
@StyleSheet("css/composantperso/textFieldPerso.css")
public class ComboBoxPerso<T> extends HorizontalLayout {
ComboBox<T> comboBox;
public ComboBoxPerso (String caption, Icon icon){
this.setMargin(false);
this.setSpacing(false);
setClassName("horizontal-content");
VerticalLayout verticalLayout=new VerticalLayout();
verticalLayout.setClassName("content-icon");
icon.setClassName("passwordField-perso-icon");
verticalLayout.add(icon);
comboBox =new ComboBox<>(caption);
comboBox.setClassName("horizontal-content");
this.add(verticalLayout);
this.add(comboBox);
}
public ComboBox<T> getComboBox() {
return comboBox;
}
public void setComboBox(ComboBox<T> comboBox) {
this.comboBox = comboBox;
}
}

View file

@ -0,0 +1,36 @@
package org.chtijbug.drools.console.vaadinComponent.ComponentPerso;
import com.vaadin.flow.component.datepicker.DatePicker;
import com.vaadin.flow.component.dependency.StyleSheet;
import com.vaadin.flow.component.icon.Icon;
import com.vaadin.flow.component.orderedlayout.HorizontalLayout;
import com.vaadin.flow.component.orderedlayout.VerticalLayout;
@StyleSheet("css/composantperso/datePickerPerso.css")
public class DatePickerPerso extends HorizontalLayout {
DatePicker datepicker;
public DatePickerPerso (String caption, Icon icon){
this.setMargin(false);
this.setSpacing(false);
setClassName("horizontal-content");
VerticalLayout verticalLayout=new VerticalLayout();
verticalLayout.setClassName("content-icon");
icon.setClassName("datepicker-perso-icon");
verticalLayout.add(icon);
datepicker =new DatePicker(caption);
datepicker.setClassName("horizontal-content");
this.add(verticalLayout);
this.add(datepicker);
}
public DatePicker getDatepicker() {
return datepicker;
}
}

View file

@ -0,0 +1,39 @@
package org.chtijbug.drools.console.vaadinComponent.ComponentPerso;
import com.vaadin.flow.component.dependency.StyleSheet;
import com.vaadin.flow.component.icon.Icon;
import com.vaadin.flow.component.orderedlayout.HorizontalLayout;
import com.vaadin.flow.component.orderedlayout.VerticalLayout;
import com.vaadin.flow.component.textfield.PasswordField;
@StyleSheet("css/composantperso/textFieldPerso.css")
public class PasswordFieldPerso extends HorizontalLayout {
private PasswordField passwordField;
public PasswordFieldPerso (String caption, Icon icon){
this.setMargin(false);
this.setSpacing(false);
VerticalLayout verticalLayout=new VerticalLayout();
verticalLayout.setClassName("content-icon");
icon.setClassName("passwordField-perso-icon");
verticalLayout.add(icon);
passwordField =new PasswordField(caption);
passwordField.setClassName("horizontal-content");
this.add(verticalLayout);
this.add(passwordField);
passwordField.setRequired(true);
}
public PasswordField getPasswordField() {
return passwordField;
}
public void setPasswordField(PasswordField passwordField) {
this.passwordField = passwordField;
}
}

View file

@ -0,0 +1,40 @@
package org.chtijbug.drools.console.vaadinComponent.ComponentPerso;
import com.vaadin.flow.component.dependency.StyleSheet;
import com.vaadin.flow.component.icon.Icon;
import com.vaadin.flow.component.orderedlayout.HorizontalLayout;
import com.vaadin.flow.component.orderedlayout.VerticalLayout;
import com.vaadin.flow.component.textfield.TextField;
@StyleSheet("css/composantperso/textFieldPerso.css")
public class TextFieldPerso extends HorizontalLayout {
TextField textField;
public TextFieldPerso (String caption,String placeHolder, Icon icon){
this.setMargin(false);
this.setSpacing(false);
setClassName("content-perso-field");
VerticalLayout verticalLayout=new VerticalLayout();
verticalLayout.setClassName("content-icon");
icon.setClassName("passwordField-perso-icon");
verticalLayout.add(icon);
textField=new TextField(caption,placeHolder);
textField.setClassName("horizontal-content");
textField.setRequired(true);
this.add(verticalLayout);
this.add(textField);
}
public TextField getTextField() {
return textField;
}
public void setTextField(TextField textField) {
this.textField = textField;
}
}

View file

@ -0,0 +1,105 @@
package org.chtijbug.drools.console.vaadinComponent.Squelette;
import com.vaadin.flow.component.dependency.StyleSheet;
import com.vaadin.flow.component.orderedlayout.HorizontalLayout;
import com.vaadin.flow.component.orderedlayout.VerticalLayout;
import org.chtijbug.drools.console.vaadinComponent.leftMenu.LeftMenuGlobal;
import org.chtijbug.drools.console.vaadinComponent.menu.MenuPrincipal;
import org.chtijbug.drools.console.vaadinComponent.menu.MenuScondaireDeployement;
import org.chtijbug.drools.console.vaadinComponent.menu.MenuSecondaireInfoUser;
@StyleSheet("css/accueil.css")
public class SqueletteComposant extends VerticalLayout {
private MenuPrincipal menuPrincipal;
private LeftMenuGlobal leftMenuGlobal;
private MenuScondaireDeployement menuScondaireDeployement;
private MenuSecondaireInfoUser menuSecondaireInfoUser;
private VerticalLayout content;
private VerticalLayout infoPage;
public SqueletteComposant(){
setClassName("squelette-composant-contentAll");
menuPrincipal=new MenuPrincipal(this);
add(menuPrincipal);
HorizontalLayout horizontalLayout=new HorizontalLayout();
horizontalLayout.setClassName("squelette-component-horizontal");
add(horizontalLayout);
content=new VerticalLayout();
content.setClassName("squelette-component-content");
menuScondaireDeployement=new MenuScondaireDeployement();
content.add(menuScondaireDeployement);
menuSecondaireInfoUser=new MenuSecondaireInfoUser();
content.add(menuSecondaireInfoUser);
infoPage=new VerticalLayout();
infoPage.setClassName("squelette-component-infoPage");
content.add(infoPage);
leftMenuGlobal=new LeftMenuGlobal();
horizontalLayout.add(leftMenuGlobal);
horizontalLayout.add(content);
}
public MenuPrincipal getMenuPrincipal() {
return menuPrincipal;
}
public void setMenuPrincipal(MenuPrincipal menuPrincipal) {
this.menuPrincipal = menuPrincipal;
}
public LeftMenuGlobal getLeftMenuGlobal() {
return leftMenuGlobal;
}
public void setLeftMenuGlobal(LeftMenuGlobal leftMenuGlobal) {
this.leftMenuGlobal = leftMenuGlobal;
}
public MenuScondaireDeployement getMenuScondaireDeployement() {
return menuScondaireDeployement;
}
public void setMenuScondaireDeployement(MenuScondaireDeployement menuScondaireDeployement) {
this.menuScondaireDeployement = menuScondaireDeployement;
}
public MenuSecondaireInfoUser getMenuSecondaireInfoUser() {
return menuSecondaireInfoUser;
}
public void setMenuSecondaireInfoUser(MenuSecondaireInfoUser menuSecondaireInfoUser) {
this.menuSecondaireInfoUser = menuSecondaireInfoUser;
}
public VerticalLayout getContent() {
return content;
}
public void setContent(VerticalLayout content) {
this.content = content;
}
public VerticalLayout getInfoPage() {
return infoPage;
}
public void setInfoPage(VerticalLayout infoPage) {
this.infoPage = infoPage;
}
}

View file

@ -0,0 +1,110 @@
package org.chtijbug.drools.console.vaadinComponent.leftMenu;
import com.vaadin.flow.component.dependency.StyleSheet;
import com.vaadin.flow.component.html.Image;
import com.vaadin.flow.component.orderedlayout.VerticalLayout;
import com.vaadin.flow.component.html.Label;
import com.vaadin.flow.server.InputStreamFactory;
import com.vaadin.flow.server.StreamResource;
import java.io.InputStream;
@StyleSheet("css/accueil.css")
public class InformationStructure extends VerticalLayout {
private Label nomPage;
private Label numberProject;
private Label numberKieWb;
private Label numberKieServer;
private Image logo;
private String strProject="Number of projects : ";
private String strKieWb="Number of kie-workbench : ";
private String strKieServer="Number of Kie-Server : ";
public InformationStructure(){
setClassName("leftMenu-global-infoStructure-content");
VerticalLayout verticalLayout=new VerticalLayout();
verticalLayout.setClassName("leftMenu-global-infoStrcutre-contentTitre");
add(verticalLayout);
nomPage=new Label("Accueil");
nomPage.setClassName("leftMenu-global-inforStructure-titre");
verticalLayout.add(nomPage);
InputStreamFactory inputStreamFactory=new InputStreamFactory() {
@Override
public InputStream createInputStream() {
return getClass().getResourceAsStream("/images/book.png");
}
};
StreamResource str=new StreamResource("logo",inputStreamFactory);
logo=new Image(str,"");
logo.setClassName("leftMenu-global-inforStructure-logo");
add(logo);
VerticalLayout verticalLayout1=new VerticalLayout();
verticalLayout1.setClassName("leftMenu-global-inforStructure-content-label");
add(verticalLayout1);
numberKieServer=new Label(strKieServer+"0");
numberKieServer.setClassName("leftMenu-global-inforStructure-label");
verticalLayout1.add(numberKieServer);
numberKieWb=new Label(strKieWb+"0");
numberKieWb.setClassName("leftMenu-global-inforStructure-label");
verticalLayout1.add(numberKieWb);
numberProject=new Label(strProject+"0");
numberProject.setClassName("leftMenu-global-inforStructure-label");
verticalLayout1.add(numberProject);
}
public void actualiseKieWb(Integer numberOfKieWb){
numberKieWb.setText(strKieWb+numberOfKieWb);
}
public void actualiseKieServer(Integer numberOfKieServer){
numberKieServer.setText(strKieServer+numberOfKieServer);
}
public void actualiseProject(Integer numberOfProject){
numberProject.setText(strProject+numberOfProject);
}
public Label getNomPage() {
return nomPage;
}
public void setNomPage(Label nomPage) {
this.nomPage = nomPage;
}
public Label getNumberProject() {
return numberProject;
}
public Label getNumberKieWb() {
return numberKieWb;
}
public Label getNumberKieServer() {
return numberKieServer;
}
public Image getLogo() {
return logo;
}
public void setLogo(Image logo) {
this.logo = logo;
}
}

View file

@ -0,0 +1,100 @@
package org.chtijbug.drools.console.vaadinComponent.leftMenu;
import com.vaadin.flow.component.button.Button;
import com.vaadin.flow.component.dependency.StyleSheet;
import com.vaadin.flow.component.html.Anchor;
import com.vaadin.flow.component.icon.Icon;
import com.vaadin.flow.component.icon.VaadinIcon;
import com.vaadin.flow.component.orderedlayout.HorizontalLayout;
import com.vaadin.flow.component.orderedlayout.VerticalLayout;
@StyleSheet("css/accueil.css")
public class LeftMenuGlobal extends VerticalLayout {
private Button actionOne;
private Button actionTwo;
private Boolean visibility=true;
public LeftMenuGlobal(){
setClassName("leftMenu-global-content");
InformationStructure informationStructure=new InformationStructure();
add(informationStructure);
VerticalLayout verticalLayout=new VerticalLayout();
verticalLayout.setClassName("leftMenu-global-action");
add(verticalLayout);
actionOne=new Button("ActionOne", VaadinIcon.TOOLS.create());
actionOne.setClassName("leftMenu-global-button");
verticalLayout.add(actionOne);
actionOne.addClickListener(buttonClickEvent -> {
active(actionOne);
});
actionTwo=new Button("ActionTwo",VaadinIcon.TOOLS.create());
actionTwo.setClassName("leftMenu-global-button");
verticalLayout.add(actionTwo);
actionTwo.addClickListener(buttonClickEvent -> {
active(actionTwo);
});
HorizontalLayout horizontalLayout=new HorizontalLayout();
horizontalLayout.setClassName("leftMenu-global-infoEntreprise");
add(horizontalLayout);
Anchor aproposFooter=new Anchor("https://pymma-software.heron-software.com/","A propos");
aproposFooter.setClassName("footer-button");
horizontalLayout.add(aproposFooter);
Anchor contactFooter=new Anchor("https://pymma-software.heron-software.com/contact","Contact");
contactFooter.setClassName("footer-button");
horizontalLayout.add(contactFooter);
}
private boolean isActive(Button button){
return button.getClassNames().contains("active");
}
private void removeActive(Button button) {
if(button.getClassNames().contains("active")){
button.getClassNames().remove("active");
}
}
private void active(Button button){
removeActive(actionOne);
removeActive(actionTwo);
button.getClassNames().add("active");
}
public Button getActionOne() {
return actionOne;
}
public void setActionOne(Button actionOne) {
this.actionOne = actionOne;
}
public Button getActionTwo() {
return actionTwo;
}
public void setActionTwo(Button actionTwo) {
this.actionTwo = actionTwo;
}
public Boolean getVisibility() {
return visibility;
}
public void setVisibility(Boolean visibility) {
this.visibility = visibility;
}
}

View file

@ -0,0 +1,175 @@
package org.chtijbug.drools.console.vaadinComponent.login;
import com.vaadin.flow.component.button.Button;
import com.vaadin.flow.component.dependency.StyleSheet;
import com.vaadin.flow.component.html.Label;
import com.vaadin.flow.component.icon.VaadinIcon;
import com.vaadin.flow.component.orderedlayout.VerticalLayout;
import com.vaadin.flow.data.binder.Binder;
import com.vaadin.flow.data.value.ValueChangeMode;
import org.chtijbug.drools.console.service.KieRepositoryService;
import org.chtijbug.drools.console.service.UserConnectedService;
import org.chtijbug.drools.console.service.model.UserConnected;
import org.chtijbug.drools.console.service.model.kie.KieConfigurationData;
import org.chtijbug.drools.console.service.util.AppContext;
import org.chtijbug.drools.console.util.PasswordValidator;
import org.chtijbug.drools.console.vaadinComponent.ComponentPerso.PasswordFieldPerso;
import org.chtijbug.drools.console.vaadinComponent.ComponentPerso.TextFieldPerso;
@StyleSheet("css/accueil.css")
public class FormulaireComposant extends VerticalLayout {
//Composant
private Label title;
private TextFieldPerso username;
private PasswordFieldPerso password;
private Button login;
private Button forgotPassword;
//METIER
private Binder<UserConnected> userConnectedBinder;
private KieRepositoryService kieRepositoryService;
private KieConfigurationData configKie;
private UserConnectedService userConnectedService;
public FormulaireComposant(){
kieRepositoryService= AppContext.getApplicationContext().getBean(KieRepositoryService.class);
configKie= AppContext.getApplicationContext().getBean(KieConfigurationData.class);
userConnectedService=AppContext.getApplicationContext().getBean(UserConnectedService.class);
setClassName("login-application-layout");
userConnectedBinder=new Binder<>();
userConnectedBinder.setBean(new UserConnected());
//FORMULAIRE
title=new Label("Sign in ");
title.setClassName("login-application-title");
add(title);
username=new TextFieldPerso("Username","", VaadinIcon.USER.create());
username.getTextField().setValueChangeMode(ValueChangeMode.EAGER);
username.getTextField().addValueChangeListener(textFieldStringComponentValueChangeEvent -> verifyValidity());
userConnectedBinder.forField(username.getTextField())
.bind(
userConnected -> userConnected.getUserName(),
(userConnected, s) -> userConnected.setUserName(s));
add(username);
password=new PasswordFieldPerso("Password", VaadinIcon.PASSWORD.create());
password.getPasswordField().setValueChangeMode(ValueChangeMode.EAGER);
password.getPasswordField().addValueChangeListener(textFieldStringComponentValueChangeEvent -> verifyValidity());
userConnectedBinder.forField(password.getPasswordField())
.withValidator(new PasswordValidator("Ce n'est pas un password valide"))
.bind(
userConnected -> userConnected.getUserPassword(),
(userConnected, s) -> userConnected.setUserPassword(s));
add(password);
forgotPassword=new Button("Forgot password?");
forgotPassword.setClassName("footer-button");
add(forgotPassword);
login=new Button("Connexion");
login.setEnabled(false);
login.setClassName("login-application-connexion");
login.addClickListener(buttonClickEvent ->{
Boolean test=connexion();
if(test){
getUI().get().navigate("accueil");
}else {
login.setEnabled(false);
username.getTextField().setValue("");
password.getPasswordField().setValue("");
}
});
add(login);
password.getPasswordField().setValue(configKie.getPassword());
username.getTextField().setValue(configKie.getUserName());
}
public void verifyValidity(){
if(!username.getTextField().isInvalid()&&username.getTextField().getValue()!=null&&!username.getTextField().isEmpty()&&
!password.getPasswordField().isInvalid()&&password.getPasswordField().getValue()!=null&&!password.getPasswordField().isEmpty()){
login.setEnabled(true);
}else {
login.setEnabled(false);
}
}
public boolean connexion(){
UserConnected connected = kieRepositoryService.login(
configKie.getKiewbUrl(),
userConnectedBinder.getBean().getUserName(),
userConnectedBinder.getBean().getUserPassword());
if(connected!=null) {
connected.getProjectResponses().clear();
connected.getProjectResponses().addAll(connected.getProjectResponses());
connected.getRoles().clear();
connected.getRoles().addAll(connected.getRoles());
connected.setConnected(true);
userConnectedService.addToSession(connected);
return true;
}else {
return false;
}
}
public Label getTitle() {
return title;
}
public void setTitle(Label title) {
this.title = title;
}
public TextFieldPerso getUsername() {
return username;
}
public void setUsername(TextFieldPerso username) {
this.username = username;
}
public PasswordFieldPerso getPassword() {
return password;
}
public void setPassword(PasswordFieldPerso password) {
this.password = password;
}
public Button getLogin() {
return login;
}
public void setLogin(Button login) {
this.login = login;
}
public Button getForgotPassword() {
return forgotPassword;
}
public void setForgotPassword(Button forgotPassword) {
this.forgotPassword = forgotPassword;
}
}

View file

@ -0,0 +1,42 @@
package org.chtijbug.drools.console.vaadinComponent.login;
import com.vaadin.flow.component.dependency.StyleSheet;
import com.vaadin.flow.component.orderedlayout.VerticalLayout;
import com.vaadin.flow.component.html.Label;
@StyleSheet("css/accueil.css")
public class FormulaireInfoComposant extends VerticalLayout {
public Label title;
public Label paragraphe;
public FormulaireInfoComposant(){
setClassName("login-application-layout-FormulaireInfo");
title=new Label("How to connect?");
title.setClassName("login-application-layout-FormulaireInfo-Title");
add(title);
paragraphe=new Label("To access this application, make sure you already have an account on the kie-workbench");
paragraphe.setClassName("login-application-layout-FormulaireInfo-Paragraphe");
add(paragraphe);
}
public Label getTitle() {
return title;
}
public void setTitle(Label title) {
this.title = title;
}
public Label getParagraphe() {
return paragraphe;
}
public void setParagraphe(Label paragraphe) {
this.paragraphe = paragraphe;
}
}

View file

@ -0,0 +1,40 @@
package org.chtijbug.drools.console.vaadinComponent.login;
import com.vaadin.flow.component.dependency.StyleSheet;
import com.vaadin.flow.component.orderedlayout.HorizontalLayout;
import com.vaadin.flow.component.orderedlayout.VerticalLayout;
@StyleSheet("css/accueil.css")
public class LoginComponent extends HorizontalLayout {
private FormulaireComposant layoutLeft;
private FormulaireInfoComposant layoutRight;
public LoginComponent(){
setClassName("login-formulaire-globalLayout");
layoutLeft=new FormulaireComposant();
layoutRight=new FormulaireInfoComposant();
add(layoutLeft);
add(layoutRight);
}
public FormulaireComposant getLayoutLeft() {
return layoutLeft;
}
public void setLayoutLeft(FormulaireComposant layoutLeft) {
this.layoutLeft = layoutLeft;
}
public FormulaireInfoComposant getLayoutRight() {
return layoutRight;
}
public void setLayoutRight(FormulaireInfoComposant layoutRight) {
this.layoutRight = layoutRight;
}
}

View file

@ -0,0 +1,51 @@
package org.chtijbug.drools.console.vaadinComponent.login;
import com.vaadin.flow.component.checkbox.Checkbox;
import com.vaadin.flow.component.dependency.StyleSheet;
import com.vaadin.flow.component.orderedlayout.HorizontalLayout;
import com.vaadin.flow.component.orderedlayout.VerticalLayout;
import com.vaadin.flow.component.html.Label;
@StyleSheet("css/accueil.css")
public class TextInfoComponent extends VerticalLayout {
private Label title;
private HorizontalLayout separator;
public TextInfoComponent(){
setClassName("login-layout-textInfo");
title=new Label("Drools kie-platform");
title.setClassName("login-title");
add(title);
separator=new HorizontalLayout();
separator.setClassName("separator");
add(separator);
add(row("Dynamic management of kie-servers"));
add(row("Facilitates the process drools as a whole"));
}
public HorizontalLayout row(String text){
HorizontalLayout horizontalLayout=new HorizontalLayout();
horizontalLayout.setClassName("login-textInfo-layoutContent");
Checkbox checkbox=new Checkbox();
checkbox.setValue(true);
checkbox.setEnabled(false);
horizontalLayout.add(checkbox);
checkbox.setClassName("login-textInfo-button");
Label label=new Label(text);
horizontalLayout.add(label);
label.setClassName("login-textInfo-paragraph");
return horizontalLayout;
}
}

View file

@ -0,0 +1,153 @@
package org.chtijbug.drools.console.vaadinComponent.menu;
import com.vaadin.flow.component.button.Button;
import com.vaadin.flow.component.dependency.StyleSheet;
import com.vaadin.flow.component.html.Image;
import com.vaadin.flow.component.icon.Icon;
import com.vaadin.flow.component.icon.VaadinIcon;
import com.vaadin.flow.component.orderedlayout.HorizontalLayout;
import com.vaadin.flow.server.InputStreamFactory;
import com.vaadin.flow.server.StreamResource;
import org.chtijbug.drools.console.service.UserConnectedService;
import org.chtijbug.drools.console.service.util.AppContext;
import org.chtijbug.drools.console.vaadinComponent.Squelette.SqueletteComposant;
import java.io.InputStream;
@StyleSheet("css/accueil.css")
public class MenuPrincipal extends HorizontalLayout {
//COMPONENT
private Image logo;
private Button deployement;
private Button infoUser;
private Button hamburger;
//METIER
private UserConnectedService userConnectedService;
public MenuPrincipal(SqueletteComposant squeletteComposant){
userConnectedService= AppContext.getApplicationContext().getBean(UserConnectedService.class);
addClassName("menu-principal-menubar-content");
InputStreamFactory inputStreamFactory=new InputStreamFactory() {
@Override
public InputStream createInputStream() {
return getClass().getResourceAsStream("/images/pymma.png");
}
};
StreamResource str=new StreamResource("logo",inputStreamFactory);
logo=new Image(str,"");
logo.setClassName("menu-principal-logoPresentation");
Icon icon=VaadinIcon.MENU.create();
icon.setClassName("icon-menuPrincipal");
hamburger=new Button("",icon);
hamburger.setClassName("hamburger");
add(hamburger);
hamburger.addClickListener(buttonClickEvent -> {
if(squeletteComposant.getLeftMenuGlobal().getVisibility()) {
squeletteComposant.getLeftMenuGlobal().setVisible(false);
squeletteComposant.getLeftMenuGlobal().setVisibility(false);
}else {
squeletteComposant.getLeftMenuGlobal().setVisible(true);
squeletteComposant.getLeftMenuGlobal().setVisibility(true);
}
});
deployement=new Button("Déployment");
deployement.setClassName("menu-principal-button");
add(deployement);
deployement.addClickListener(buttonClickEvent -> {
if(!isActive(deployement)) {
active(deployement);
squeletteComposant.getMenuScondaireDeployement().setVisible(true);
squeletteComposant.getMenuSecondaireInfoUser().setVisible(false);
}else {
removeActive(deployement);
squeletteComposant.getMenuScondaireDeployement().setVisible(false);
squeletteComposant.getMenuSecondaireInfoUser().setVisible(false);
}
});
add(logo);
infoUser=new Button(userConnectedService.getUserConnected().getUserName(), VaadinIcon.USER.create());
infoUser.setClassName("menu-principal-button-user");
infoUser.addClickListener(buttonClickEvent -> {
if(!isActive(infoUser)) {
active(infoUser);
squeletteComposant.getMenuScondaireDeployement().setVisible(false);
squeletteComposant.getMenuSecondaireInfoUser().setVisible(true);
}else {
removeActive(infoUser);
squeletteComposant.getMenuScondaireDeployement().setVisible(false);
squeletteComposant.getMenuSecondaireInfoUser().setVisible(false);
}
});
add(infoUser);
}
private boolean isActive(Button button){
return button.getClassNames().contains("active");
}
private void removeActive(Button button) {
if(button.getClassNames().contains("active")){
button.getClassNames().remove("active");
}
}
private void active(Button button){
removeActive(infoUser);
removeActive(deployement);
button.getClassNames().add("active");
}
public Image getLogo() {
return logo;
}
public void setLogo(Image logo) {
this.logo = logo;
}
public Button getDeployement() {
return deployement;
}
public void setDeployement(Button deployement) {
this.deployement = deployement;
}
public Button getInfoUser() {
return infoUser;
}
public void setInfoUser(Button infoUser) {
this.infoUser = infoUser;
}
public UserConnectedService getUserConnectedService() {
return userConnectedService;
}
public void setUserConnectedService(UserConnectedService userConnectedService) {
this.userConnectedService = userConnectedService;
}
}

View file

@ -0,0 +1,69 @@
package org.chtijbug.drools.console.vaadinComponent.menu;
import com.vaadin.flow.component.button.Button;
import com.vaadin.flow.component.dependency.StyleSheet;
import com.vaadin.flow.component.dialog.Dialog;
import com.vaadin.flow.component.icon.VaadinIcon;
import com.vaadin.flow.component.orderedlayout.HorizontalLayout;
import org.chtijbug.drools.console.view.AddRuntime;
@StyleSheet("css/accueil.css")
public class MenuScondaireDeployement extends HorizontalLayout {
private Button addRuntime;
private Button projectDeploy;
private Button accueilDeployment;
public MenuScondaireDeployement(){
setVisible(false);
setClassName("menu-secondaire-content");
accueilDeployment=new Button("Accueil deployement",VaadinIcon.ARCHIVE.create());
accueilDeployment.setClassName("menu-secondaire-button");
add(accueilDeployment);
projectDeploy=new Button("Deployable project",VaadinIcon.EJECT.create());
projectDeploy.setClassName("menu-secondaire-button");
add(projectDeploy);
addRuntime=new Button("add runtime", VaadinIcon.PLUS.create());
addRuntime.setClassName("menu-secondaire-button");
add(addRuntime);
Dialog dialog=new Dialog();
dialog.add(new AddRuntime(dialog));
addRuntime.addClickListener(buttonClickEvent -> {
dialog.open();
});
}
public Button getAddRuntime() {
return addRuntime;
}
public void setAddRuntime(Button addRuntime) {
this.addRuntime = addRuntime;
}
public Button getProjectDeploy() {
return projectDeploy;
}
public void setProjectDeploy(Button projectDeploy) {
this.projectDeploy = projectDeploy;
}
public Button getAccueilDeployment() {
return accueilDeployment;
}
public void setAccueilDeployment(Button accueilDeployment) {
this.accueilDeployment = accueilDeployment;
}
}

View file

@ -0,0 +1,55 @@
package org.chtijbug.drools.console.vaadinComponent.menu;
import com.vaadin.flow.component.button.Button;
import com.vaadin.flow.component.dependency.StyleSheet;
import com.vaadin.flow.component.icon.VaadinIcon;
import com.vaadin.flow.component.orderedlayout.HorizontalLayout;
import org.chtijbug.drools.console.service.UserConnectedService;
import org.chtijbug.drools.console.service.util.AppContext;
@StyleSheet("css/accueil.css")
public class MenuSecondaireInfoUser extends HorizontalLayout {
private Button infoUser;
private Button disconnect;
private UserConnectedService userConnectedService;
public MenuSecondaireInfoUser() {
setVisible(false);
userConnectedService= AppContext.getApplicationContext().getBean(UserConnectedService.class);
setClassName("menu-secondaire-content");
infoUser=new Button("Information User", VaadinIcon.INFO.create());
infoUser.setClassName("menu-secondaire-button");
add(infoUser);
disconnect=new Button("Disconnect",VaadinIcon.SIGN_OUT.create());
disconnect.setClassName("menu-secondaire-button");
disconnect.addClickListener(buttonClickEvent -> {
userConnectedService.disconnect();
getUI().get().navigate("");
});
add(disconnect);
}
public Button getInfoUser() {
return infoUser;
}
public void setInfoUser(Button infoUser) {
this.infoUser = infoUser;
}
public Button getDisconnect() {
return disconnect;
}
public void setDisconnect(Button disconnect) {
this.disconnect = disconnect;
}
}

View file

@ -0,0 +1,14 @@
package org.chtijbug.drools.console.view;
import com.vaadin.flow.component.dependency.StyleSheet;
import com.vaadin.flow.component.page.Push;
import com.vaadin.flow.router.Route;
import org.chtijbug.drools.console.vaadinComponent.Squelette.SqueletteComposant;
@Push
@StyleSheet("css/accueil.css")
@Route("accueil")
public class AccueilView extends SqueletteComposant {
}

View file

@ -0,0 +1,111 @@
package org.chtijbug.drools.console.view;
import com.vaadin.flow.component.button.Button;
import com.vaadin.flow.component.dependency.StyleSheet;
import com.vaadin.flow.component.dialog.Dialog;
import com.vaadin.flow.component.icon.VaadinIcon;
import com.vaadin.flow.component.html.Label;
import com.vaadin.flow.component.orderedlayout.VerticalLayout;
import com.vaadin.flow.data.value.ValueChangeMode;
import org.chtijbug.drools.console.vaadinComponent.ComponentPerso.TextFieldPerso;
@StyleSheet("css/accueil.css")
public class AddRuntime extends VerticalLayout {
private TextFieldPerso host;
private TextFieldPerso port;
private TextFieldPerso runtimeName;
private Button testConnexion;
private Label label;
public AddRuntime(Dialog dialog){
setClassName("creation-runtime-content");
label=new Label("Add Runtime");
label.setClassName("creation-runtime-title");
add(label);
runtimeName=new TextFieldPerso("Runtime name","", VaadinIcon.USER.create());
runtimeName.getTextField().setRequired(true);
runtimeName.getTextField().setValueChangeMode(ValueChangeMode.EAGER);
runtimeName.getTextField().addValueChangeListener(textFieldStringComponentValueChangeEvent -> {
verify();
});
add(runtimeName);
host=new TextFieldPerso("Host","111.111.1.111",VaadinIcon.HARDDRIVE.create());
host.getTextField().setRequired(true);
host.getTextField().setValueChangeMode(ValueChangeMode.EAGER);
host.getTextField().addValueChangeListener(textFieldStringComponentValueChangeEvent -> {
verify();
});
add(host);
port=new TextFieldPerso("Port","",VaadinIcon.INBOX.create());
port.getTextField().setRequired(true);
port.getTextField().setValueChangeMode(ValueChangeMode.EAGER);
port.getTextField().addValueChangeListener(textFieldStringComponentValueChangeEvent -> {
verify();
});
add(port);
testConnexion=new Button("Tester connexion");
testConnexion.setEnabled(false);
testConnexion.setClassName("login-application-connexion");
add(testConnexion);
testConnexion.addClickListener(buttonClickEvent -> {
dialog.close();
});
}
public void verify(){
if(runtimeName.getTextField().isInvalid()||runtimeName.getTextField().getValue().isEmpty()||runtimeName.getTextField().getValue()==null&&
port.getTextField().isInvalid()||port.getTextField().getValue().isEmpty()||port.getTextField().getValue()==null&&
host.getTextField().isInvalid()||host.getTextField().getValue().isEmpty()||host.getTextField().getValue()==null){
testConnexion.setEnabled(false);
}else {
testConnexion.setEnabled(true);
}
}
public TextFieldPerso getHost() {
return host;
}
public void setHost(TextFieldPerso host) {
this.host = host;
}
public TextFieldPerso getPort() {
return port;
}
public void setPort(TextFieldPerso port) {
this.port = port;
}
public TextFieldPerso getRuntimeName() {
return runtimeName;
}
public void setRuntimeName(TextFieldPerso runtimeName) {
this.runtimeName = runtimeName;
}
public Button getTestConnexion() {
return testConnexion;
}
public void setTestConnexion(Button testConnexion) {
this.testConnexion = testConnexion;
}
}

View file

@ -0,0 +1,101 @@
package org.chtijbug.drools.console.view;
import com.vaadin.flow.component.button.Button;
import com.vaadin.flow.component.dependency.StyleSheet;
import com.vaadin.flow.component.html.Anchor;
import com.vaadin.flow.component.html.Image;
import com.vaadin.flow.component.orderedlayout.HorizontalLayout;
import com.vaadin.flow.component.orderedlayout.VerticalLayout;
import com.vaadin.flow.router.Route;
import com.vaadin.flow.server.InputStreamFactory;
import com.vaadin.flow.server.StreamResource;
import org.chtijbug.drools.console.vaadinComponent.login.LoginComponent;
import org.chtijbug.drools.console.vaadinComponent.login.TextInfoComponent;
import java.io.InputStream;
@Route("")
@StyleSheet("css/accueil.css")
public class LoginView extends VerticalLayout {
private TextInfoComponent textInfoComponent;
private LoginComponent loginComponent;
private Image logo;
private VerticalLayout verticalLayout;
public LoginView(){
setClassName("global-layout");
HorizontalLayout contentImage=new HorizontalLayout();
contentImage.setClassName("content-image");
add(contentImage);
verticalLayout=new VerticalLayout();
verticalLayout.setClassName("login-global");
add(verticalLayout);
HorizontalLayout contentImage2=new HorizontalLayout();
contentImage2.setClassName("content-image2");
add(contentImage2);
Anchor aproposFooter=new Anchor("https://pymma-software.heron-software.com/","A propos");
aproposFooter.setClassName("footer-button");
contentImage2.add(aproposFooter);
Anchor contactFooter=new Anchor("https://pymma-software.heron-software.com/contact","Contact");
contactFooter.setClassName("footer-button");
contentImage2.add(contactFooter);
InputStreamFactory inputStreamFactory=new InputStreamFactory() {
@Override
public InputStream createInputStream() {
return getClass().getResourceAsStream("/images/pymma.png");
}
};
StreamResource str=new StreamResource("logo",inputStreamFactory);
logo=new Image(str,"");
logo.setClassName("login-logoPresentation");
contentImage.add(logo);
HorizontalLayout horizontalLayout=new HorizontalLayout();
horizontalLayout.setClassName("login-global-content");
verticalLayout.add(horizontalLayout);
textInfoComponent=new TextInfoComponent();
horizontalLayout.add(textInfoComponent);
loginComponent=new LoginComponent();
horizontalLayout.add(loginComponent);
}
public TextInfoComponent getTextInfoComponent() {
return textInfoComponent;
}
public void setTextInfoComponent(TextInfoComponent textInfoComponent) {
this.textInfoComponent = textInfoComponent;
}
public LoginComponent getLoginComponent() {
return loginComponent;
}
public void setLoginComponent(LoginComponent loginComponent) {
this.loginComponent = loginComponent;
}
public Image getLogo() {
return logo;
}
public void setLogo(Image logo) {
this.logo = logo;
}
}

View file

@ -1,4 +1,41 @@
@import "login/globalLogin.css";
@import "menu/menuGlobal.css";
@import "leftMenu/leftMenuGlobal.css";
@import "view/global.css";
.separator{
height: 2px;
background-color: rgba(0, 0, 0, 0.2) !important;
width: 100%;
}
.squelette-composant-contentAll{
width: 100%!important;
height: 100%;
padding: 0px;
}
.squelette-component-content{
padding: 0px;
margin: 0px;
background-color: whitesmoke;
}
.squelette-component-horizontal{
width: 100%;
height: 100%;
margin: 0px;
}
.squelette-component-infoPage{
width: 100%;
height: 100%;
margin: 0px;
}
.footer-button{
background: transparent;
cursor: pointer;
font-size: 0.8vw;
}
.grid-perso {
height: 800px !important;
}

View file

@ -0,0 +1,22 @@
.datepicker-perso-icon{
color: #a5a5a5;
margin-top: 18px;
}
.content-icon{
background-color: grey;
height: 40px;
border-radius: 3px;
margin-top: 35px;
padding: 6px !important;
}
.vaadin-date-picker-container.style-scope.vaadin-date-picker >label {
margin-left: -35px;
}
.vaadin-date-picker-container.style-scope.vaadin-date-picker {
width: 400px;
}
vaadin-date-picker [part="input-field"]{
width: 400px;
}

View file

@ -0,0 +1,25 @@
.passwordField-perso-icon{
color: #a5a5a5;
margin-top: 18px;
}
.content-icon{
background-color: grey;
height: 40px;
border-radius: 3px;
margin-top: 35px;
padding: 6px !important;
width: 37px !important;
}
.horizontal-content{
width: 90%;
}
.vaadin-text-field-container.style-scope.vaadin-password-field {
width: 100%;
}
.vaadin-text-field-container.style-scope.vaadin-text-field {
width: 100%;
}
.content-perso-field{
width: 100%;
}

View file

@ -0,0 +1,73 @@
.leftMenu-global-content{
width: 19%!important;
padding: 0px;
height: 100%;
text-align: center;
position: relative;
box-shadow: 5px 4px 10px #A0A0A0A0;
}
.leftMenu-global-infoEntreprise{
width: 100%;
display: inline-block;
bottom: 0;
position: absolute;
}
.leftMenu-global-button{
background: transparent;
width: 100%;
font-size: 1vw;
margin: 0px;
height: 3vw;
color: #32CBC5;
border-radius: 0px;
cursor: pointer;
}
.leftMenu-global-button.active{
border-left-color: rgb(50, 203, 187);
border-left-style: solid;
border-left-width: 0.2vw;
background-color: whitesmoke;
}
.leftMenu-global-action{
height: 100%;
padding: 0px;
margin-left: 0px;
margin-right: 0px;
}
.leftMenu-global-infoStructure-content{
width: 100%!important;
padding: 0px;
height: 100%;
display: inline-block;
}
.leftMenu-global-infoStrcutre-contentTitre{
background-color: #DCDCDC;
width: 100%!important;
height: 4vw;
margin: 0px;
display: inline-block;
}
.leftMenu-global-inforStructure-titre{
font-size: 1.5vw;
font-weight: bold;
color: rgba(0,0,0,0.4);
}
.leftMenu-global-inforStructure-logo{
width: 6vw;
}
.leftMenu-global-inforStructure-label{
color: rgba(0,0,0,0.6);
font-size: 0.9vw;
}
.leftMenu-global-inforStructure-content-label{}

View file

@ -0,0 +1,43 @@
.login-application-title{
color: #32CBBB;
font-weight: bolder;
font-size: 30px;
}
.login-application-forgotPassword{}
.login-application-connexion {
font-family: var(--lumo-font-family);
font-size: var(--lumo-font-size-m);
font-weight: 500;
color: white;
background-color:#32cbcb ;
border-radius: var(--lumo-border-radius);
width: 100%;
-webkit-tap-highlight-color: transparent;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
margin-top: 10%;
cursor: pointer;
display: inline-block;
}
.login-application-connexion[disabled][disabled] {
pointer-events: none;
color: var(--lumo-disabled-text-color);
background-color: gainsboro;
}
.login-application-layout{
display: inline-block;
box-shadow: 5px 4px 10px #A0A0A0A0;
border-bottom-right-radius: 2px;
border-bottom-left-radius: 2px;
padding: 15px;
border-radius: 5px;
background-color: white;
}
.login-application-layout-separation{}
.login-application-layout-formulaire{}

View file

@ -0,0 +1,43 @@
.login-application-layout-FormulaireInfo {
position: relative;
background: #32CBBB;
border: 4px solid #32CBBB;
width: 50%!important;
display: inline-grid;
}
.login-application-layout-FormulaireInfo:after, .arrow_box:before {
right: 100%;
top: 50%;
border: solid transparent;
content: " ";
height: 0;
width: 0;
position: absolute;
pointer-events: none;
}
.login-application-layout-FormulaireInfo:after {
border-color: rgba(50, 203, 187, 0);
border-right-color: #32CBBB;
border-width: 30px;
margin-top: -30px;
}
.login-application-layout-FormulaireInfo:before {
border-color: rgba(50, 203, 187, 0);
border-right-color: #32CBBB;
border-width: 36px;
margin-top: -36px;
}
.login-application-layout-FormulaireInfo-Title{
color: whitesmoke;
font-size: 20px;
font-weight: bold;
margin-top: -30%;
}
.login-application-layout-FormulaireInfo-Paragraphe{
color: whitesmoke;
margin-top: -30%;
}

View file

@ -0,0 +1,50 @@
@import "formulaire.css";
@import "formulaireInfoContent.css";
@import "textInfo.css";
@import "loginComponent.css";
.login-global{
text-align: center;
background-color: #F0F0F0;
height: 76%!important;
padding-top: 8%;
}
.global-layout{
width: 100%;
height: 100%;
text-align: center;
padding: 0 !important;
background-color: #F0F0F0;
}
.footer-button .vaadin-button-container {
text-decoration: underline!important;
}
.footer-button :hover{
background: transparent;
}
.login-global-content{}
.login-logoPresentation{
width: 200px;
}
.content-image{
display: inline-block;
width: 100%;
padding-top: 1%;
padding-bottom: 1%;
background-color: white;
height: 12%;
box-shadow: 0px 2px 10px #A0A0A0A0;
}
.content-image2{
display: inline-block;
width: 100%;
padding-top: 1%;
padding-bottom: 1%;
background-color: white;
height: 12%;
box-shadow: 0px -2px 12px #A0A0A0A0;
}

View file

@ -0,0 +1,4 @@
.login-formulaire-globalLayout{
text-align: center;
margin-left: 14%;
}

View file

@ -0,0 +1,15 @@
.login-layout-textInfo{
width: 40%!important;
margin-left: 10%;
}
.login-title{
font-size: 20px;
font-weight: bold;
}
.login-textInfo-layoutContent{}
.login-textInfo-button{}
.login-textInfo-paragraph{}

View file

@ -0,0 +1,2 @@
@import "menuPrincipal.css";
@import "menuSecondaire.css";

View file

@ -0,0 +1,57 @@
.menu-principal-menubar-content{
height: 8%;
width: 100%;
position: relative;
padding: 0px;
box-shadow: 5px 4px 10px #A0A0A0A0;
}
.menu-principal-logoPresentation{
margin-left: auto;
margin-right: auto;
margin-top: 0.4%;
margin-bottom: 0.4%;
width: 11vw;
}
.icon-menuPrincipal{
color: rgba(0,0,0,0.60);
}
.hamburger{
background-color: transparent;
height: 100%;
margin: 0px;
cursor: pointer;
margin-left: 18px;
font-size: 2vw;
}
.menu-principal-button{
background-color: transparent;
cursor: pointer;
height: 100%;
border-radius: 0px;
color: rgba(0,0,0,0.60);
margin: 0px;
font-size: 0.9vw;
}
.menu-principal-button.active{
border-bottom-color: rgb(50, 203, 187);
border-bottom-style: solid;
border-bottom-width: 0.2vw;
background-color: whitesmoke;
}
.menu-principal-button-user{
background-color: #32CBC3;
cursor: pointer;
height: 100%;
border-radius: 0px;
color: white;
position: absolute;
right: 0;
margin: 0px;
width: 14%;
font-size: 1.3vw;
font-weight: bolder;
}

View file

@ -0,0 +1,14 @@
.menu-secondaire-content{
width: 100%;
background-color: #32cbcb;
box-shadow: 5px 4px 10px #A0A0A0A0;
height: 7%;
padding: 0;
}
.menu-secondaire-button{
background-color: transparent;
height: 100%;
color: white;
cursor: pointer;
font-size: 1vw;
}

View file

@ -0,0 +1,9 @@
.creation-runtime-title{
color: #32CBBB;
font-weight: bolder;
font-size: 1.5vw;
margin-left: auto;
margin-right: auto;
}
.creation-runtime-content{}

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 208 KiB