Spaces:
Running
Running
import dash | |
import dash_mp_components as dmp | |
from dash import dcc, html | |
display_columns = [ | |
"chemical_formula_descriptive", | |
"functional", | |
"immutable_id", | |
"energy", | |
] | |
display_names = { | |
"chemical_formula_descriptive": "Formula", | |
"functional": "Functional", | |
"immutable_id": "Material ID", | |
"energy": "Energy (eV)", | |
} | |
def get_periodic_table(id, table_kwargs, **style_kwargs): | |
return html.Div( | |
[ | |
html.H3("Search Materials (eg. 'Ac,Cd,Ge' or 'Ac2CdGe3')"), | |
html.Div( | |
[ | |
dmp.MaterialsInput( | |
allowedInputTypes=[ | |
"elements", | |
"formula", | |
], | |
hidePeriodicTable=False, | |
periodicTableMode="toggle", | |
hideWildcardButton=True, | |
showSubmitButton=True, | |
submitButtonText="Search", | |
type="elements", | |
**table_kwargs, | |
id=id, | |
), | |
], | |
id="materials-input-container", | |
style={ | |
"width": "100%", | |
}, | |
), | |
], | |
className="container periodic-table", | |
) | |
def get_dropdown(id, options, **style_kwargs): | |
return dcc.Dropdown( | |
id=id, | |
options=options, | |
placeholder="Embedder", | |
value=None, | |
clearable=False, | |
style=style_kwargs, | |
) | |
def get_upload_div(id, **style_kwargs): | |
return html.Div( | |
[ | |
html.H3("Upload a CIF file"), | |
dcc.Upload( | |
id=id, | |
children=html.Div( | |
[ | |
"Drag and Drop or ", | |
html.A("Select a CIF file"), | |
] | |
), | |
style={ | |
"width": "100%", | |
"height": "60px", | |
"lineHeight": "60px", | |
"borderWidth": "1px", | |
"borderStyle": "dashed", | |
"borderRadius": "5px", | |
"textAlign": "center", | |
"margin": "10px", | |
}, | |
multiple=False, | |
), | |
], | |
className="container", | |
) | |
def get_display_table(id, display_names, display_columns, text, **style_kwargs): | |
return html.Div( | |
[ | |
html.Label( | |
text, | |
style={"margin-bottom": "20px"}, | |
), | |
dash.dash_table.DataTable( | |
id=id, | |
columns=[ | |
( | |
{ | |
"name": display_names[col], | |
"id": col, | |
} | |
if col != "energy" | |
else { | |
"name": display_names[col], | |
"id": col, | |
"type": "numeric", | |
"format": {"specifier": ".2f"}, | |
} | |
) | |
for col in display_columns | |
], | |
data=[{}], | |
style_cell={ | |
"fontFamily": "Arial", | |
"padding": "10px", | |
"border": "1px solid #ddd", # Subtle border for elegance | |
"textAlign": "left", | |
"fontSize": "14px", | |
}, | |
style_header={ | |
"backgroundColor": "#f5f5f5", # Light grey header | |
"fontWeight": "bold", | |
"textAlign": "left", | |
"borderBottom": "2px solid #ddd", | |
}, | |
style_data={ | |
"backgroundColor": "#ffffff", | |
"color": "#333333", | |
"borderBottom": "1px solid #ddd", | |
}, | |
style_data_conditional=[ | |
{ | |
"if": {"state": "active"}, | |
"backgroundColor": "#e6f7ff", | |
"border": "1px solid #1890ff", | |
}, | |
], | |
style_table={ | |
"maxHeight": "400px", | |
"overflowX": "auto", | |
"overflowY": "auto", | |
}, | |
style_as_list_view=True, | |
row_selectable="single", | |
selected_rows=[], | |
), | |
], | |
className="container", | |
) | |
def get_materials_display(id, text_materials_div, text_table_div, **style_kwargs): | |
return html.Div( | |
[ | |
html.Div( | |
[ | |
html.Div( | |
text_materials_div, | |
style={"textAlign": "center"}, | |
), | |
], | |
id=f"structure-container{id}", | |
className="container container-visu", | |
), | |
html.Div( | |
id=f"properties-container{id}", | |
className="container container-table", | |
style={"width": "100%"}, | |
children=[ | |
html.Div( | |
text_table_div, | |
style={"textAlign": "center"}, | |
), | |
], | |
), | |
], | |
className="container-row", | |
) | |