diff --git a/multisurveys-apis/pyproject.toml b/multisurveys-apis/pyproject.toml index 664b2ddd7..471579983 100644 --- a/multisurveys-apis/pyproject.toml +++ b/multisurveys-apis/pyproject.toml @@ -69,6 +69,7 @@ lightcurve = "scripts.run_api:run_lightcurve" magstat = "scripts.run_api:run_magstat" classifier = "scripts.run_api:run_classifier" probability = "scripts.run_api:run_probability" +crossmatch = "scripts.run_api:run_crossmatch" dbp = "db_plugins.cli.manage:cli" initdb = "scripts.initdb:initdb" create_q3c_idx = "scripts.initdb:create_q3c_idx_cmd" diff --git a/multisurveys-apis/scripts/run_api.py b/multisurveys-apis/scripts/run_api.py index 3459f1dc4..576ed8d69 100644 --- a/multisurveys-apis/scripts/run_api.py +++ b/multisurveys-apis/scripts/run_api.py @@ -66,6 +66,13 @@ def run_probability(): run_service(service_config) +def run_crossmatch(): + config_dict = config_from_yaml() + service_config = config_dict["services"]["crossmatch_api"] + print(f"Running service: crossmatch_api with config: {service_config}") + run_service(service_config) + + ### ### A function to run all the services configured in the yaml file ### diff --git a/multisurveys-apis/src/classifier_api/services/parsers.py b/multisurveys-apis/src/classifier_api/services/parsers.py index 8af812540..77e8bd06a 100644 --- a/multisurveys-apis/src/classifier_api/services/parsers.py +++ b/multisurveys-apis/src/classifier_api/services/parsers.py @@ -1,3 +1,4 @@ +import pprint from ..models.classifiers import Classifiers diff --git a/multisurveys-apis/src/core/repository/dummy_data.py b/multisurveys-apis/src/core/repository/dummy_data.py index 9868c601f..de9dbde25 100644 --- a/multisurveys-apis/src/core/repository/dummy_data.py +++ b/multisurveys-apis/src/core/repository/dummy_data.py @@ -1,3 +1,7 @@ +import random +import time + + object_basic_information_dict = { "oid": "12", # si "corrected": "Yes", # si @@ -422,3 +426,29 @@ {"lc_classifier": "Lc Classifier"}, {"LC_classifier_ATAT_forced_phot": "Lc Classifier ATAT Forced Phot"}, ] + + +def generate_array_dicts_data_table(n=20, seed=None): + rnd = random.Random(seed if seed is not None else time.time_ns()) + base_oid = rnd.randint(10000, 99999) + + rows = [] + for i in range(n): + oid = f"{base_oid + i}" + n_det = rnd.randint(5, 45) + firstmjd = 57900.0 + rnd.uniform(0, 200) + lastmjd = firstmjd + rnd.uniform(10, 200) + meanra = round(rnd.uniform(0, 360), 5) + meandec = round(rnd.uniform(-90, 90), 5) + probability = round(rnd.uniform(0.5, 0.99), 2) + + rows.append({ + 'oid': oid, + 'n_det': n_det, + 'firstmjd': round(firstmjd, 3), + 'lastmjd': round(lastmjd, 3), + 'meanra': meanra, + 'meandec': meandec, + 'Probability': probability + }) + return rows \ No newline at end of file diff --git a/multisurveys-apis/src/core/repository/queries/classifiers.py b/multisurveys-apis/src/core/repository/queries/classifiers.py index 653bda799..822c868f0 100644 --- a/multisurveys-apis/src/core/repository/queries/classifiers.py +++ b/multisurveys-apis/src/core/repository/queries/classifiers.py @@ -56,4 +56,5 @@ def get_all_classifiers( ) result = session.execute(stmt) result = result.all() + return result diff --git a/multisurveys-apis/src/crossmatch_api/api.py b/multisurveys-apis/src/crossmatch_api/api.py index 25bf16011..71d87c8db 100644 --- a/multisurveys-apis/src/crossmatch_api/api.py +++ b/multisurveys-apis/src/crossmatch_api/api.py @@ -18,8 +18,9 @@ allow_headers=["*"], ) -app.mount("/static", StaticFiles(directory="src/crossmatch_api/static"), name="static") -app.mount("/htmx-static", StaticFiles(directory="src/htmx"), name="htmx-static") - app.include_router(rest.router) app.include_router(htmx.router) + +app.mount("/static", StaticFiles(directory="src/crossmatch_api/static"), name="static") +app.mount("/htmx", StaticFiles(directory="src/core/htmx"), name="htmx") + diff --git a/multisurveys-apis/src/crossmatch_api/routes/htmx.py b/multisurveys-apis/src/crossmatch_api/routes/htmx.py index 854e7a20c..0e56fc390 100644 --- a/multisurveys-apis/src/crossmatch_api/routes/htmx.py +++ b/multisurveys-apis/src/crossmatch_api/routes/htmx.py @@ -10,6 +10,7 @@ templates.env.globals["API_URL"] = os.getenv("API_URL", "http://localhost:8005") + @router.get("/htmx/crossmatch", response_class=HTMLResponse) async def object_mag_app( request: Request, diff --git a/multisurveys-apis/src/object_api/routes/htmx.py b/multisurveys-apis/src/object_api/routes/htmx.py index af6a9a784..35c6c93fd 100644 --- a/multisurveys-apis/src/object_api/routes/htmx.py +++ b/multisurveys-apis/src/object_api/routes/htmx.py @@ -21,7 +21,7 @@ from ..services.jinja_tools import truncate_float from core.exceptions import ObjectNotFound -from core.repository.dummy_data import object_basic_information_dict, tns_data_dict, tns_link_str +from core.repository.dummy_data import object_basic_information_dict, tns_data_dict, tns_link_str, generate_array_dicts_data_table router = APIRouter() @@ -32,7 +32,7 @@ templates.env.filters["truncate"] = truncate_float -@router.get("/htmx/object", response_class=HTMLResponse) +@router.get("/htmx/object_information", response_class=HTMLResponse) async def object_info_app(request: Request, oid: str, survey_id: str): try: # session = request.app.state.psql_session @@ -66,8 +66,8 @@ async def object_info_app(request: Request, oid: str, survey_id: str): ) -@router.get("/tns/", response_class=HTMLResponse) -async def tns_info(request: Request, ra: float, dec: float): +@router.get("/htmx/tns/", response_class=HTMLResponse) +async def tns_info(request: Request, ra: float, dec:float): try: # tns_data, tns_link = get_tns(ra, dec) tns_data, tns_link = tns_data_dict, tns_link_str @@ -89,7 +89,7 @@ async def tns_info(request: Request, ra: float, dec: float): ) -@router.get("/form/", response_class=HTMLResponse) +@router.get("/htmx/search_objects/", response_class=HTMLResponse) async def objects_form(request: Request): try: session = request.app.state.psql_session @@ -104,7 +104,7 @@ async def objects_form(request: Request): raise HTTPException(status_code=500, detail="An error occurred") -@router.get("/select", response_class=HTMLResponse) +@router.get("/htmx/classes_select", response_class=HTMLResponse) async def select_classes_classifier(request: Request, classifier_classes: list[str] = Query(...)): try: classes = classifier_classes @@ -118,7 +118,7 @@ async def select_classes_classifier(request: Request, classifier_classes: list[s raise HTTPException(status_code=500, detail="An error occurred") -@router.get("/table", response_class=HTMLResponse) +@router.get("/htmx/list_objects", response_class=HTMLResponse) def objects_table( request: Request, class_name: str | None = None, @@ -181,7 +181,18 @@ def objects_table( order_args=order, ) - object_list = get_objects_list(session_ms=session, search_params=search_params) + # object_list = get_objects_list(session_ms=session, search_params=search_params) + + + object_list = { + "next": page+1, + "has_next": True, + "prev": page - 1 , + "has_prev": True, + "current_page": page, + "items": generate_array_dicts_data_table(), + } + else: object_list = { "next": False, @@ -213,7 +224,7 @@ def objects_table( raise HTTPException(status_code=500, detail="An error occurred") -@router.get("/sidebar", response_class=HTMLResponse) +@router.get("/htmx/side_objects", response_class=HTMLResponse) def sidebar( request: Request, survey: str | None = None, @@ -273,7 +284,16 @@ def sidebar( order_args=order, ) - object_list = get_objects_list(session_ms=session, search_params=search_params) + # object_list = get_objects_list(session_ms=session, search_params=search_params) + + object_list = { + "next": page+1, + "has_next": True, + "prev": page - 1 , + "has_prev": True, + "current_page": page, + "items": generate_array_dicts_data_table(), + } else: object_list = { diff --git a/multisurveys-apis/src/object_api/services/classifiers_utils.py b/multisurveys-apis/src/object_api/services/classifiers_utils.py index 320d255ce..1f711ce5f 100644 --- a/multisurveys-apis/src/object_api/services/classifiers_utils.py +++ b/multisurveys-apis/src/object_api/services/classifiers_utils.py @@ -10,7 +10,7 @@ def format_classifier_name(name): def sort_classifiers(classifiers): - sort_arr_classifiers = [None] * 6 + sort_arr_classifiers = [None] * 7 priorities = { "lc_classifier": 0, @@ -19,6 +19,7 @@ def sort_classifiers(classifiers): "LC_classifier_ATAT_forced_phot": 3, "LC_classifier_BHRF_forced_phot": 4, "lc_classifier_lsst": 5, + "rubin_stamp_1": 6 } # insertar por prioridad diff --git a/multisurveys-apis/src/object_api/static/draw_elements.js b/multisurveys-apis/src/object_api/static/draw_elements.js index 4af0dab97..e2786d38d 100644 --- a/multisurveys-apis/src/object_api/static/draw_elements.js +++ b/multisurveys-apis/src/object_api/static/draw_elements.js @@ -11,7 +11,18 @@ export function draw_span(text){ export function draw_close_tags(father_element, div_tag, oid, oids_arr){ let newBtn = document.createElement("div") - newBtn.innerHTML = '' + let svg = document.createElementNS("http://www.w3.org/2000/svg", "svg"); + svg.setAttribute("width", "18"); + svg.setAttribute("height", "18"); + svg.setAttribute("viewBox", "0 -960 960 960"); + svg.classList.add("custom-close-svg-id"); + + let path = document.createElementNS("http://www.w3.org/2000/svg", "path"); + path.setAttribute("d", "m336-280 144-144 144 144 56-56-144-144 144-144-56-56-144 144-144-144-56 56 144 144-144 144 56 56ZM480-80q-83 0-156-31.5T197-197q-54-54-85.5-127T80-480q0-83 31.5-156T197-763q54-54 127-85.5T480-880q83 0 156 31.5T763-763q54 54 85.5 127T880-480q0 83-31.5 156T763-197q-54 54-127 85.5T480-80Z"); + + svg.appendChild(path); + newBtn.appendChild(svg); + newBtn.classList.add("tw-inline-block") newBtn.addEventListener("click", () =>{ let index = oids_arr.indexOf(oid) @@ -25,8 +36,6 @@ export function draw_close_tags(father_element, div_tag, oid, oids_arr){ father_element.removeChild(erase_tag) }, { once: true}); - newBtn.classList.add("custom-close-id") - return newBtn } @@ -54,20 +63,20 @@ export function draw_oids_tags(oids_arr){ export function draw_arrow_order_table(order_mode){ let svg = document.createElementNS("http://www.w3.org/2000/svg", "svg"); svg.id = 'selected_order_table' - svg.setAttribute("xmlns", "http://www.w3.org/2000/svg"); - svg.setAttribute("height", "24px"); svg.setAttribute("viewBox", "0 -960 960 960"); - svg.setAttribute("width", "24px"); - svg.setAttribute("fill", "#FFFFFF"); + svg.setAttribute("width", "20px"); + svg.setAttribute("height", "20px"); + svg.classList.add("tw-inline-block", "tw-fill-black", "dark:tw-fill-white") + let path = document.createElementNS("http://www.w3.org/2000/svg", "path"); + if(order_mode == 'DESC'){ - path.setAttribute("d", "M480-240 240-480l56-56 144 144v-368h80v368l144-144 56 56-240 240Z"); + path.setAttribute("d", "M480-240 240-480l56-56 144 144v-368h80v368l144-144 56 56-240 240Z"); } else { - path.setAttribute("d", "M440-240v-368L296-464l-56-56 240-240 240 240-56 56-144-144v368h-80Z"); + path.setAttribute("d", "M440-240v-368L296-464l-56-56 240-240 240 240-56 56-144-144v368h-80Z"); } - svg.classList.add("tw-inline-block") svg.appendChild(path) return svg diff --git a/multisurveys-apis/src/object_api/static/form_search.js b/multisurveys-apis/src/object_api/static/form_search.js index 067ba67bb..706f87fe1 100644 --- a/multisurveys-apis/src/object_api/static/form_search.js +++ b/multisurveys-apis/src/object_api/static/form_search.js @@ -2,7 +2,7 @@ import { jdToDate, gregorianToJd, raDectoHMS, HMStoRa, DMStoDec} from "./AstroDa import { getUTCDate, extractDate, extractTime, convertToDate, formatDate} from "./time.js" import { handle_error } from "./error_handler.js"; import {draw_oids_tags} from "./draw_elements.js"; -import { display, split_oids, format_oids, survey_emphasize, check_radio_consearch } from "./ui_helpers.js"; +import { display, highlight_text, split_oids, format_oids, survey_emphasize, check_radio_consearch, switch_arrow_icon } from "./ui_helpers.js"; import {get_sesame_object} from "./sesame.js" import { send_classes_data, send_pagination_data, send_order_data, clean_nulls_form, get_values_array_fields } from "./api_payload_helpers.js" @@ -89,16 +89,22 @@ export function init(){ // clicks events general_filters.addEventListener("click", () =>{ item_name = general_filters.id + "_container" + switch_arrow_icon(general_filters) + highlight_text(general_filters) display(item_name) }) discovery_date_filters.addEventListener("click", () =>{ item_name = discovery_date_filters.id + "_container" + switch_arrow_icon(discovery_date_filters) + highlight_text(discovery_date_filters) display(item_name) }) conesearch_filters.addEventListener("click", () =>{ item_name = conesearch_filters.id + "_container" + switch_arrow_icon(conesearch_filters) + highlight_text(conesearch_filters) display(item_name) }) diff --git a/multisurveys-apis/src/object_api/static/object.css b/multisurveys-apis/src/object_api/static/object.css index af931bcc6..84e63dc1d 100644 --- a/multisurveys-apis/src/object_api/static/object.css +++ b/multisurveys-apis/src/object_api/static/object.css @@ -44,12 +44,30 @@ opacity: 1; } -.obj-survey-selected{ +.placeholder-span:empty:before { + content: attr(data-placeholder); + color: rgba(0, 0, 0, 0.6) +} + +.tw-dark .placeholder-span:empty:before { + color: rgba(255, 255, 255, 0.6) +} + +.tw-preflight .obj-survey-selected{ + display: inline-block; + border: 2px solid black; + background-color: transparent; + text-align: center; +} + +.tw-dark .obj-survey-selected{ background-color: #424242; + border: 0px; } .obj-surveys-unselect{ - opacity: 0.75; + opacity: 0.5; + text-align: center; } .obj-select-wrapper{ @@ -86,6 +104,10 @@ z-index: 20; visibility: hidden; opacity: 0; + background: white; +} + +.tw-dark .obj-custom-options{ background: #1e1e1e; } @@ -100,18 +122,22 @@ display: block; padding: 0px 16px; line-height: 2.25rem; - color: #EEEEEE; + color: black; cursor: pointer; transition: all; } +.tw-dark .obj-custom-option{ + color: #EEEEEE; +} + .obj-custom-option.obj-selected{ color: #1976D2; background-color: rgba(25, 118, 210, 0.3); } .custom-oid{ - background-color: rgba(255, 255, 255, 0.2); + background-color: rgba(0, 0, 0, 0.1); display: inline-flex; justify-content: space-around; align-items: center; @@ -121,17 +147,30 @@ max-width: 12rem; } +.tw-dark .custom-oid{ + background-color: rgba(255, 255, 255, 0.2); +} + .custom-span{ display: inline-block; } -.custom-close-id{ +.custom-close-svg-id{ display: inline-block; cursor: pointer; + fill: rgba(0, 0, 0, 0.6); +} + +.tw-dark .custom-close-svg-id{ + fill: rgba(255, 255, 255, 1); +} + +.custom-close-svg-id:hover{ + fill: rgba(0, 0, 0, 0.2); } -.custom-close-id:hover svg path{ - fill: rgba(255, 255, 255, 0.2); +.tw-dark .custom-close-svg-id:hover{ + fill: rgba(255, 255, 255, 0.4); } .custom-error{ @@ -151,6 +190,30 @@ background-color: rgb(190 40 40 / 0.2); } +.tw-scheme-dark { + color-scheme: dark; +} + +.tw-scheme-light { + color-scheme: light; +} + +.tw-preflight :is(.tw-pointer-events-none){ + pointer-events: none; +} + +.tw-preflight :is(.tw-pointer-events-auto){ + pointer-events: auto; +} + +.tw-preflight :is(.tw-visible){ + visibility: visible; +} + +.tw-preflight :is(.tw-invisible){ + visibility: hidden; +} + .tw-preflight :is(.tw-absolute){ position: absolute; } @@ -159,28 +222,164 @@ position: relative; } +.tw-preflight :is(.tw-bottom-0){ + bottom: 0px; +} + +.tw-preflight :is(.tw-left-0){ + left: 0px; +} + +.tw-preflight :is(.tw-left-10){ + left: 2.5rem; +} + +.tw-preflight :is(.tw-right-0){ + right: 0px; +} + +.tw-preflight :is(.tw-top-1){ + top: 0.25rem; +} + +.tw-preflight :is(.tw-top-1\/2){ + top: 50%; +} + +.tw-preflight :is(.tw-top-\[100\%\]){ + top: 100%; +} + +.tw-preflight :is(.tw-z-10){ + z-index: 10; +} + .tw-preflight :is(.tw-z-\[10\]){ z-index: 10; } +.tw-preflight :is(.tw-z-\[11\]){ + z-index: 11; +} + +.tw-preflight :is(.tw-z-\[2\]){ + z-index: 2; +} + +.tw-preflight :is(.tw-z-\[9999\]){ + z-index: 9999; +} + +.tw-preflight :is(.tw-col-span-1){ + grid-column: span 1 / span 1; +} + .tw-preflight :is(.tw-col-span-12){ grid-column: span 12 / span 12; } +.tw-preflight :is(.tw-col-span-2){ + grid-column: span 2 / span 2; +} + +.tw-preflight :is(.tw-col-span-4){ + grid-column: span 4 / span 4; +} + +.tw-preflight :is(.tw-col-span-5){ + grid-column: span 5 / span 5; +} + +.tw-preflight :is(.tw-float-right){ + float: right; +} + +.tw-preflight :is(.tw-float-left){ + float: left; +} + +.tw-preflight :is(.tw-m-0){ + margin: 0px; +} + +.tw-preflight :is(.tw-m-auto){ + margin: auto; +} + +.tw-preflight :is(.tw-mx-0){ + margin-left: 0px; + margin-right: 0px; +} + +.tw-preflight :is(.tw-mx-2){ + margin-left: 0.5rem; + margin-right: 0.5rem; +} + +.tw-preflight :is(.tw-mx-4){ + margin-left: 1rem; + margin-right: 1rem; +} + .tw-preflight :is(.tw-mx-auto){ margin-left: auto; margin-right: auto; } +.tw-preflight :is(.tw-my-1){ + margin-top: 0.25rem; + margin-bottom: 0.25rem; +} + .tw-preflight :is(.tw-my-4){ margin-top: 1rem; margin-bottom: 1rem; } +.tw-preflight :is(.tw-mb-4){ + margin-bottom: 1rem; +} + +.tw-preflight :is(.tw-mb-\[10px\]){ + margin-bottom: 10px; +} + +.tw-preflight :is(.tw-mb-\[20px\]){ + margin-bottom: 20px; +} + +.tw-preflight :is(.tw-mb-\[5px\]){ + margin-bottom: 5px; +} + +.tw-preflight :is(.tw-me-2){ + margin-inline-end: 0.5rem; +} + +.tw-preflight :is(.tw-ml-2){ + margin-left: 0.5rem; +} + +.tw-preflight :is(.tw-ml-4){ + margin-left: 1rem; +} + .tw-preflight :is(.tw-mt-1){ margin-top: 0.25rem; } +.tw-preflight :is(.tw-mt-2){ + margin-top: 0.5rem; +} + +.tw-preflight :is(.tw-mt-3){ + margin-top: 0.75rem; +} + +.tw-preflight :is(.tw-mt-\[6px\]){ + margin-top: 6px; +} + .tw-preflight :is(.tw-block){ display: block; } @@ -189,10 +388,18 @@ display: inline-block; } +.tw-preflight :is(.tw-inline){ + display: inline; +} + .tw-preflight :is(.tw-flex){ display: flex; } +.tw-preflight :is(.tw-table-header-group){ + display: table-header-group; +} + .tw-preflight :is(.tw-grid){ display: grid; } @@ -201,24 +408,81 @@ display: none; } +.tw-preflight :is(.tw-h-32){ + height: 8rem; +} + +.tw-preflight :is(.tw-h-5){ + height: 1.25rem; +} + +.tw-preflight :is(.tw-h-6){ + height: 1.5rem; +} + +.tw-preflight :is(.tw-h-8){ + height: 2rem; +} + +.tw-preflight :is(.tw-h-\[20px\]){ + height: 20px; +} + +.tw-preflight :is(.tw-h-\[24px\]){ + height: 24px; +} + .tw-preflight :is(.tw-h-\[28px\]){ height: 28px; } +.tw-preflight :is(.tw-h-\[30px\]){ + height: 30px; +} + .tw-preflight :is(.tw-h-\[34px\]){ height: 34px; } +.tw-preflight :is(.tw-h-\[36px\]){ + height: 36px; +} + +.tw-preflight :is(.tw-h-\[384px\]){ + height: 384px; +} + +.tw-preflight :is(.tw-h-\[3px\]){ + height: 3px; +} + +.tw-preflight :is(.tw-h-\[40px\]){ + height: 40px; +} + .tw-preflight :is(.tw-h-\[48px\]){ height: 48px; } -.tw-preflight :is(.tw-max-h-\[304px\]){ - max-height: 304px; +.tw-preflight :is(.tw-h-\[64px\]){ + height: 64px; } -.tw-preflight :is(.tw-w-1\/2){ - width: 50%; +.tw-preflight :is(.tw-h-\[95vh\]){ + height: 95vh; +} + +.tw-preflight :is(.tw-h-auto){ + height: auto; +} + +.tw-preflight :is(.tw-h-fit){ + height: -moz-fit-content; + height: fit-content; +} + +.tw-preflight :is(.tw-max-h-\[304px\]){ + max-height: 304px; } .tw-preflight :is(.tw-w-1\/3){ @@ -229,6 +493,42 @@ width: 25%; } +.tw-preflight :is(.tw-w-12){ + width: 3rem; +} + +.tw-preflight :is(.tw-w-32){ + width: 8rem; +} + +.tw-preflight :is(.tw-w-48){ + width: 12rem; +} + +.tw-preflight :is(.tw-w-5){ + width: 1.25rem; +} + +.tw-preflight :is(.tw-w-6){ + width: 1.5rem; +} + +.tw-preflight :is(.tw-w-80){ + width: 20rem; +} + +.tw-preflight :is(.tw-w-\[20px\]){ + width: 20px; +} + +.tw-preflight :is(.tw-w-\[24px\]){ + width: 24px; +} + +.tw-preflight :is(.tw-w-\[28px\]){ + width: 28px; +} + .tw-preflight :is(.tw-w-\[290px\]){ width: 290px; } @@ -237,14 +537,30 @@ width: 30%; } +.tw-preflight :is(.tw-w-\[30px\]){ + width: 30px; +} + .tw-preflight :is(.tw-w-\[36px\]){ width: 36px; } +.tw-preflight :is(.tw-w-\[400px\]){ + width: 400px; +} + .tw-preflight :is(.tw-w-\[48px\]){ width: 48px; } +.tw-preflight :is(.tw-w-\[50\%\]){ + width: 50%; +} + +.tw-preflight :is(.tw-w-\[80px\]){ + width: 80px; +} + .tw-preflight :is(.tw-w-\[90\%\]){ width: 90%; } @@ -253,16 +569,32 @@ width: 95%; } +.tw-preflight :is(.tw-w-\[98\%\]){ + width: 98%; +} + .tw-preflight :is(.tw-w-full){ width: 100%; } -.tw-preflight :is(.tw-max-w-\[1422px\]){ - max-width: 1422px; +.tw-preflight :is(.tw-min-w-full){ + min-width: 100%; +} + +.tw-preflight :is(.tw-max-w-\[40\%\]){ + max-width: 40%; } -.tw-preflight :is(.tw-max-w-\[458px\]){ - max-width: 458px; +.tw-preflight :is(.tw-max-w-\[630px\]){ + max-width: 630px; +} + +.tw-preflight :is(.tw-max-w-\[95\%\]){ + max-width: 95%; +} + +.tw-preflight :is(.tw-grow){ + flex-grow: 1; } .tw-preflight :is(.tw-table-auto){ @@ -273,14 +605,62 @@ border-collapse: collapse; } +.tw-preflight :is(.-tw-translate-y-1){ + --tw-translate-y: -0.25rem; + transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); +} + +.tw-preflight :is(.-tw-translate-y-1\/2){ + --tw-translate-y: -50%; + transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); +} + +.tw-preflight :is(.tw-transform){ + transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); +} + +@keyframes tw-pulse{ + 50%{ + opacity: .5; + } +} + +.tw-preflight :is(.tw-animate-pulse){ + animation: tw-pulse 2s cubic-bezier(0.4, 0, 0.6, 1) infinite; +} + +@keyframes tw-spin{ + to{ + transform: rotate(360deg); + } +} + +.tw-preflight :is(.tw-animate-spin){ + animation: tw-spin 1s linear infinite; +} + .tw-preflight :is(.tw-cursor-pointer){ cursor: pointer; } +.tw-preflight :is(.tw-appearance-none){ + -webkit-appearance: none; + -moz-appearance: none; + appearance: none; +} + +.tw-preflight :is(.tw-grid-cols-10){ + grid-template-columns: repeat(10, minmax(0, 1fr)); +} + .tw-preflight :is(.tw-grid-cols-12){ grid-template-columns: repeat(12, minmax(0, 1fr)); } +.tw-preflight :is(.tw-grid-cols-6){ + grid-template-columns: repeat(6, minmax(0, 1fr)); +} + .tw-preflight :is(.tw-flex-col){ flex-direction: column; } @@ -289,6 +669,14 @@ flex-wrap: wrap; } +.tw-preflight :is(.tw-place-content-center){ + place-content: center; +} + +.tw-preflight :is(.tw-place-items-center){ + place-items: center; +} + .tw-preflight :is(.tw-content-center){ align-content: center; } @@ -317,6 +705,10 @@ justify-content: space-between; } +.tw-preflight :is(.tw-gap-1){ + gap: 0.25rem; +} + .tw-preflight :is(.tw-gap-2){ gap: 0.5rem; } @@ -329,6 +721,39 @@ row-gap: 1rem; } +.tw-preflight :is(.tw-space-x-2 > :not([hidden]) ~ :not([hidden])){ + --tw-space-x-reverse: 0; + margin-right: calc(0.5rem * var(--tw-space-x-reverse)); + margin-left: calc(0.5rem * calc(1 - var(--tw-space-x-reverse))); +} + +.tw-preflight :is(.tw-space-x-4 > :not([hidden]) ~ :not([hidden])){ + --tw-space-x-reverse: 0; + margin-right: calc(1rem * var(--tw-space-x-reverse)); + margin-left: calc(1rem * calc(1 - var(--tw-space-x-reverse))); +} + +.tw-preflight :is(.tw-space-y-2 > :not([hidden]) ~ :not([hidden])){ + --tw-space-y-reverse: 0; + margin-top: calc(0.5rem * calc(1 - var(--tw-space-y-reverse))); + margin-bottom: calc(0.5rem * var(--tw-space-y-reverse)); +} + +.tw-preflight :is(.tw-divide-y > :not([hidden]) ~ :not([hidden])){ + --tw-divide-y-reverse: 0; + border-top-width: calc(1px * calc(1 - var(--tw-divide-y-reverse))); + border-bottom-width: calc(1px * var(--tw-divide-y-reverse)); +} + +.tw-preflight :is(.tw-divide-gray-200 > :not([hidden]) ~ :not([hidden])){ + --tw-divide-opacity: 1; + border-color: rgb(229 231 235 / var(--tw-divide-opacity)); +} + +.tw-preflight :is(.tw-place-self-center){ + place-self: center; +} + .tw-preflight :is(.tw-self-end){ align-self: flex-end; } @@ -337,123 +762,305 @@ overflow: auto; } +.tw-preflight :is(.tw-overflow-hidden){ + overflow: hidden; +} + +.tw-preflight :is(.tw-overflow-x-auto){ + overflow-x: auto; +} + +.tw-preflight :is(.tw-truncate){ + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} + +.tw-preflight :is(.tw-whitespace-nowrap){ + white-space: nowrap; +} + +.tw-preflight :is(.tw-text-wrap){ + text-wrap: wrap; +} + +.tw-preflight :is(.tw-break-words){ + overflow-wrap: break-word; +} + .tw-preflight :is(.tw-rounded){ border-radius: 0.25rem; } +.tw-preflight :is(.tw-rounded-\[6px\]){ + border-radius: 6px; +} + +.tw-preflight :is(.tw-rounded-full){ + border-radius: 9999px; +} + +.tw-preflight :is(.tw-rounded-lg){ + border-radius: 0.5rem; +} + +.tw-preflight :is(.tw-rounded-md){ + border-radius: 0.375rem; +} + .tw-preflight :is(.tw-border){ border-width: 1px; } -.tw-preflight :is(.tw-border-y-2){ - border-top-width: 2px; - border-bottom-width: 2px; +.tw-preflight :is(.tw-border-8){ + border-width: 8px; +} + +.tw-preflight :is(.tw-border-x-0){ + border-left-width: 0px; + border-right-width: 0px; +} + +.tw-preflight :is(.tw-border-y){ + border-top-width: 1px; + border-bottom-width: 1px; +} + +.tw-preflight :is(.tw-border-y-0){ + border-top-width: 0px; + border-bottom-width: 0px; +} + +.tw-preflight :is(.tw-border-b){ + border-bottom-width: 1px; } -.tw-preflight :is(.tw-border-b-2){ - border-bottom-width: 2px; +.tw-preflight :is(.tw-border-b-\[1px\]){ + border-bottom-width: 1px; +} + +.tw-preflight :is(.tw-border-t){ + border-top-width: 1px; +} + +.tw-preflight :is(.tw-border-solid){ + border-style: solid; +} + +.tw-preflight :is(.tw-border-\[\#1e1e1e\]){ + --tw-border-opacity: 1; + border-color: rgb(30 30 30 / var(--tw-border-opacity)); +} + +.tw-preflight :is(.tw-border-\[\#616161\]){ + --tw-border-opacity: 1; + border-color: rgb(97 97 97 / var(--tw-border-opacity)); } .tw-preflight :is(.tw-border-\[\#757575\]\/70){ border-color: rgb(117 117 117 / 0.7); } -.tw-preflight :is(.tw-border-black){ +.tw-preflight :is(.tw-border-blue-400){ --tw-border-opacity: 1; - border-color: rgb(0 0 0 / var(--tw-border-opacity)); + border-color: rgb(96 165 250 / var(--tw-border-opacity)); +} + +.tw-preflight :is(.tw-border-gray-300){ + --tw-border-opacity: 1; + border-color: rgb(209 213 219 / var(--tw-border-opacity)); +} + +.tw-preflight :is(.tw-border-b-\[\#1e1e1e\]){ + --tw-border-opacity: 1; + border-bottom-color: rgb(30 30 30 / var(--tw-border-opacity)); +} + +.tw-preflight :is(.tw-border-b-\[\#757575\]){ + --tw-border-opacity: 1; + border-bottom-color: rgb(117 117 117 / var(--tw-border-opacity)); +} + +.tw-preflight :is(.tw-border-b-black){ + --tw-border-opacity: 1; + border-bottom-color: rgb(0 0 0 / var(--tw-border-opacity)); +} + +.tw-preflight :is(.tw-border-t-transparent){ + border-top-color: transparent; +} + +.tw-preflight :is(.tw-border-opacity-20){ + --tw-border-opacity: 0.2; +} + +.tw-preflight :is(.tw-bg-\[\#0097A7\]){ + --tw-bg-opacity: 1; + background-color: rgb(0 151 167 / var(--tw-bg-opacity)); +} + +.tw-preflight :is(.tw-bg-\[\#1565C0\]){ + --tw-bg-opacity: 1; + background-color: rgb(21 101 192 / var(--tw-bg-opacity)); +} + +.tw-preflight :is(.tw-bg-\[\#1976D2\]\/30){ + background-color: rgb(25 118 210 / 0.3); +} + +.tw-preflight :is(.tw-bg-\[\#2196f3\]){ + --tw-bg-opacity: 1; + background-color: rgb(33 150 243 / var(--tw-bg-opacity)); } -.tw-preflight :is(.tw-border-transparent){ - border-color: transparent; +.tw-preflight :is(.tw-bg-\[\#424242\]){ + --tw-bg-opacity: 1; + background-color: rgb(66 66 66 / var(--tw-bg-opacity)); } -.tw-preflight :is(.tw-border-b-\[\#757575\]){ - --tw-border-opacity: 1; - border-bottom-color: rgb(117 117 117 / var(--tw-border-opacity)); +.tw-preflight :is(.tw-bg-\[\#757575\]\/60){ + background-color: rgb(117 117 117 / 0.6); } -.tw-preflight :is(.tw-bg-\[\#1565C0\]){ +.tw-preflight :is(.tw-bg-\[\#f5f5f5\]){ --tw-bg-opacity: 1; - background-color: rgb(21 101 192 / var(--tw-bg-opacity)); + background-color: rgb(245 245 245 / var(--tw-bg-opacity)); } -.tw-preflight :is(.tw-bg-\[\#1e1e1e\]){ +.tw-preflight :is(.tw-bg-blue-500){ --tw-bg-opacity: 1; - background-color: rgb(30 30 30 / var(--tw-bg-opacity)); + background-color: rgb(59 130 246 / var(--tw-bg-opacity)); } -.tw-preflight :is(.tw-bg-\[\#1e1e1e\]\/95){ - background-color: rgb(30 30 30 / 0.95); +.tw-preflight :is(.tw-bg-blue-600){ + --tw-bg-opacity: 1; + background-color: rgb(37 99 235 / var(--tw-bg-opacity)); } -.tw-preflight :is(.tw-bg-\[\#424242\]){ +.tw-preflight :is(.tw-bg-gray-100){ --tw-bg-opacity: 1; - background-color: rgb(66 66 66 / var(--tw-bg-opacity)); + background-color: rgb(243 244 246 / var(--tw-bg-opacity)); } -.tw-preflight :is(.tw-bg-\[\#757575\]){ +.tw-preflight :is(.tw-bg-gray-900){ --tw-bg-opacity: 1; - background-color: rgb(117 117 117 / var(--tw-bg-opacity)); + background-color: rgb(17 24 39 / var(--tw-bg-opacity)); } -.tw-preflight :is(.tw-bg-sky-500){ +.tw-preflight :is(.tw-bg-green-500){ --tw-bg-opacity: 1; - background-color: rgb(14 165 233 / var(--tw-bg-opacity)); + background-color: rgb(34 197 94 / var(--tw-bg-opacity)); } .tw-preflight :is(.tw-bg-transparent){ background-color: transparent; } -.tw-preflight :is(.tw-bg-\[\#1976D2\]){ +.tw-preflight :is(.tw-bg-white){ --tw-bg-opacity: 1; - background-color: rgb(25 118 210 / var(--tw-bg-opacity)); -} - -.tw-preflight :is(.tw-bg-\[\#1976D2\]\/50){ - background-color: rgb(25 118 210 / 0.5); + background-color: rgb(255 255 255 / var(--tw-bg-opacity)); } -.tw-preflight :is(.tw-bg-\[\#1976D2\]\/20){ - background-color: rgb(25 118 210 / 0.2); +.tw-preflight :is(.tw-fill-\[\#1565C0\]){ + fill: #1565C0; } -.tw-preflight :is(.tw-bg-\[\#1976D2\]\/10){ - background-color: rgb(25 118 210 / 0.1); +.tw-preflight :is(.tw-fill-\[\#1976d2\]){ + fill: #1976d2; } -.tw-preflight :is(.tw-bg-\[\#121212\]){ - --tw-bg-opacity: 1; - background-color: rgb(18 18 18 / var(--tw-bg-opacity)); +.tw-preflight :is(.tw-fill-black){ + fill: #000; } -.tw-preflight :is(.tw-bg-\[\#212121\]){ - --tw-bg-opacity: 1; - background-color: rgb(33 33 33 / var(--tw-bg-opacity)); +.tw-preflight :is(.tw-fill-current){ + fill: currentColor; } -.tw-preflight :is(.tw-bg-\[\#1976D2\]\/30){ - background-color: rgb(25 118 210 / 0.3); +.tw-preflight :is(.tw-p-2){ + padding: 0.5rem; } .tw-preflight :is(.tw-p-4){ padding: 1rem; } +.tw-preflight :is(.tw-p-\[5px\]){ + padding: 5px; +} + +.tw-preflight :is(.tw-px-2){ + padding-left: 0.5rem; + padding-right: 0.5rem; +} + .tw-preflight :is(.tw-px-4){ padding-left: 1rem; padding-right: 1rem; } +.tw-preflight :is(.tw-px-\[8px\]){ + padding-left: 8px; + padding-right: 8px; +} + +.tw-preflight :is(.tw-py-1){ + padding-top: 0.25rem; + padding-bottom: 0.25rem; +} + .tw-preflight :is(.tw-py-2){ padding-top: 0.5rem; padding-bottom: 0.5rem; } +.tw-preflight :is(.tw-py-3){ + padding-top: 0.75rem; + padding-bottom: 0.75rem; +} + +.tw-preflight :is(.tw-py-4){ + padding-top: 1rem; + padding-bottom: 1rem; +} + +.tw-preflight :is(.tw-py-\[2px\]){ + padding-top: 2px; + padding-bottom: 2px; +} + .tw-preflight :is(.tw-pb-2){ padding-bottom: 0.5rem; } +.tw-preflight :is(.tw-pl-\[10px\]){ + padding-left: 10px; +} + +.tw-preflight :is(.tw-pr-2){ + padding-right: 0.5rem; +} + +.tw-preflight :is(.tw-pr-\[10px\]){ + padding-right: 10px; +} + +.tw-preflight :is(.tw-ps-2){ + padding-inline-start: 0.5rem; +} + +.tw-preflight :is(.tw-pt-3){ + padding-top: 0.75rem; +} + +.tw-preflight :is(.tw-pt-\[25px\]){ + padding-top: 25px; +} + +.tw-preflight :is(.tw-pt-\[30px\]){ + padding-top: 30px; +} + .tw-preflight :is(.tw-text-left){ text-align: left; } @@ -462,6 +1069,19 @@ text-align: center; } +.tw-preflight :is(.tw-text-right){ + text-align: right; +} + +.tw-preflight :is(.tw-font-roboto){ + font-family: Roboto, sans-serif; +} + +.tw-preflight :is(.tw-text-2xl){ + font-size: 1.5rem; + line-height: 2rem; +} + .tw-preflight :is(.tw-text-\[0\.875rem\]){ font-size: 0.875rem; } @@ -481,28 +1101,77 @@ line-height: 1.25rem; } +.tw-preflight :is(.tw-text-xl){ + font-size: 1.25rem; + line-height: 1.75rem; +} + +.tw-preflight :is(.tw-text-xs){ + font-size: 0.75rem; + line-height: 1rem; +} + +.tw-preflight :is(.tw-font-bold){ + font-weight: 700; +} + +.tw-preflight :is(.tw-font-light){ + font-weight: 300; +} + .tw-preflight :is(.tw-font-medium){ font-weight: 500; } +.tw-preflight :is(.tw-font-semibold){ + font-weight: 600; +} + .tw-preflight :is(.tw-ordinal){ --tw-ordinal: ordinal; font-variant-numeric: var(--tw-ordinal) var(--tw-slashed-zero) var(--tw-numeric-figure) var(--tw-numeric-spacing) var(--tw-numeric-fraction); } -.tw-preflight :is(.tw-text-\[\#EEEEEE\]){ +.tw-preflight :is(.tw-leading-9){ + line-height: 2.25rem; +} + +.tw-preflight :is(.tw-text-\[\#1976D2\]){ + --tw-text-opacity: 1; + color: rgb(25 118 210 / var(--tw-text-opacity)); +} + +.tw-preflight :is(.tw-text-\[\#1976d2\]){ --tw-text-opacity: 1; - color: rgb(238 238 238 / var(--tw-text-opacity)); + color: rgb(25 118 210 / var(--tw-text-opacity)); } -.tw-preflight :is(.tw-text-\[\#F5F5F5\]){ +.tw-preflight :is(.tw-text-\[\#1e1e1e\]){ --tw-text-opacity: 1; - color: rgb(245 245 245 / var(--tw-text-opacity)); + color: rgb(30 30 30 / var(--tw-text-opacity)); +} + +.tw-preflight :is(.tw-text-\[\#BDBDBD\]){ + --tw-text-opacity: 1; + color: rgb(189 189 189 / var(--tw-text-opacity)); +} + +.tw-preflight :is(.tw-text-\[\#FAFAFA\]){ + --tw-text-opacity: 1; + color: rgb(250 250 250 / var(--tw-text-opacity)); } -.tw-preflight :is(.tw-text-\[\#a9a9a9\]){ +.tw-preflight :is(.tw-text-black){ --tw-text-opacity: 1; - color: rgb(169 169 169 / var(--tw-text-opacity)); + color: rgb(0 0 0 / var(--tw-text-opacity)); +} + +.tw-preflight :is(.tw-text-black\/60){ + color: rgb(0 0 0 / 0.6); +} + +.tw-preflight :is(.tw-text-black\/80){ + color: rgb(0 0 0 / 0.8); } .tw-preflight :is(.tw-text-blue-50){ @@ -510,38 +1179,106 @@ color: rgb(239 246 255 / var(--tw-text-opacity)); } -.tw-preflight :is(.tw-text-white){ +.tw-preflight :is(.tw-text-blue-600){ --tw-text-opacity: 1; - color: rgb(255 255 255 / var(--tw-text-opacity)); + color: rgb(37 99 235 / var(--tw-text-opacity)); } -.tw-preflight :is(.tw-text-white\/70){ - color: rgb(255 255 255 / 0.7); +.tw-preflight :is(.tw-text-cyan-50){ + --tw-text-opacity: 1; + color: rgb(236 254 255 / var(--tw-text-opacity)); } -.tw-preflight :is(.tw-text-\[\#1976D2\]){ +.tw-preflight :is(.tw-text-gray-300){ --tw-text-opacity: 1; - color: rgb(25 118 210 / var(--tw-text-opacity)); + color: rgb(209 213 219 / var(--tw-text-opacity)); } -.tw-preflight :is(.tw-text-\[\#0D47A1\]){ +.tw-preflight :is(.tw-text-gray-400){ --tw-text-opacity: 1; - color: rgb(13 71 161 / var(--tw-text-opacity)); + color: rgb(156 163 175 / var(--tw-text-opacity)); } -.tw-preflight :is(.tw-text-\[\#1565C0\]){ +.tw-preflight :is(.tw-text-gray-900){ --tw-text-opacity: 1; - color: rgb(21 101 192 / var(--tw-text-opacity)); + color: rgb(17 24 39 / var(--tw-text-opacity)); } -.tw-preflight :is(.tw-text-\[\#42A5F5\]){ +.tw-preflight :is(.tw-text-red-500){ --tw-text-opacity: 1; - color: rgb(66 165 245 / var(--tw-text-opacity)); + color: rgb(239 68 68 / var(--tw-text-opacity)); } -.tw-preflight :is(.tw-text-\[\#1E88E5\]){ +.tw-preflight :is(.tw-text-white){ --tw-text-opacity: 1; - color: rgb(30 136 229 / var(--tw-text-opacity)); + color: rgb(255 255 255 / var(--tw-text-opacity)); +} + +.tw-preflight :is(.tw-text-white\/70){ + color: rgb(255 255 255 / 0.7); +} + +.tw-preflight :is(.tw-underline){ + text-decoration-line: underline; +} + +.tw-preflight :is(.tw-placeholder-black\/50)::-moz-placeholder{ + color: rgb(0 0 0 / 0.5); +} + +.tw-preflight :is(.tw-placeholder-black\/50)::placeholder{ + color: rgb(0 0 0 / 0.5); +} + +.tw-preflight :is(.tw-opacity-0){ + opacity: 0; +} + +.tw-preflight :is(.tw-opacity-100){ + opacity: 1; +} + +.tw-preflight :is(.tw-opacity-50){ + opacity: 0.5; +} + +.tw-preflight :is(.tw-shadow-2xl){ + --tw-shadow: 0 25px 50px -12px rgb(0 0 0 / 0.25); + --tw-shadow-colored: 0 25px 50px -12px var(--tw-shadow-color); + box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow); +} + +.tw-preflight :is(.tw-shadow-lg){ + --tw-shadow: 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1); + --tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color); + box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow); +} + +.tw-preflight :is(.tw-shadow-md){ + --tw-shadow: 0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1); + --tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color); + box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow); +} + +.tw-preflight :is(.tw-shadow-xl){ + --tw-shadow: 0 20px 25px -5px rgb(0 0 0 / 0.1), 0 8px 10px -6px rgb(0 0 0 / 0.1); + --tw-shadow-colored: 0 20px 25px -5px var(--tw-shadow-color), 0 8px 10px -6px var(--tw-shadow-color); + box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow); +} + +.tw-preflight :is(.tw-outline-none){ + outline: 2px solid transparent; + outline-offset: 2px; +} + +.tw-preflight :is(.tw-transition-all){ + transition-property: all; + transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); + transition-duration: 150ms; +} + +.tw-preflight :is(.tw-duration-200){ + transition-duration: 200ms; } /* roboto font */ @@ -1163,15 +1900,32 @@ Constrain images and videos to the parent width and preserve their intrinsic asp width: 100%; } +:is(.tw-dark .dark\:tw-scheme-dark) { + color-scheme: dark; +} + .tw-preflight :is(.hover\:tw-cursor-pointer:hover){ cursor: pointer; } +.tw-preflight :is(.hover\:tw-border-b-black\/70:hover){ + border-bottom-color: rgb(0 0 0 / 0.7); +} + .tw-preflight :is(.hover\:tw-border-b-white:hover){ --tw-border-opacity: 1; border-bottom-color: rgb(255 255 255 / var(--tw-border-opacity)); } +.tw-preflight :is(.hover\:tw-bg-\[\#1976d2\]\/20:hover){ + background-color: rgb(25 118 210 / 0.2); +} + +.tw-preflight :is(.hover\:tw-bg-\[\#757575\]:hover){ + --tw-bg-opacity: 1; + background-color: rgb(117 117 117 / var(--tw-bg-opacity)); +} + .tw-preflight :is(.hover\:tw-bg-\[\#b2b2b2\]:hover){ --tw-bg-opacity: 1; background-color: rgb(178 178 178 / var(--tw-bg-opacity)); @@ -1181,26 +1935,153 @@ Constrain images and videos to the parent width and preserve their intrinsic asp background-color: rgb(178 178 178 / 0.5); } +.tw-preflight :is(.hover\:tw-bg-\[\#e5e4e2\]:hover){ + --tw-bg-opacity: 1; + background-color: rgb(229 228 226 / var(--tw-bg-opacity)); +} + +.tw-preflight :is(.hover\:tw-bg-gray-600:hover){ + --tw-bg-opacity: 1; + background-color: rgb(75 85 99 / var(--tw-bg-opacity)); +} + +.tw-preflight :is(.hover\:tw-text-gray-600:hover){ + --tw-text-opacity: 1; + color: rgb(75 85 99 / var(--tw-text-opacity)); +} + +.tw-preflight :is(.focus\:tw-outline-none:focus){ + outline: 2px solid transparent; + outline-offset: 2px; +} + +.tw-preflight :is(.tw-group:hover .group-hover\:tw-block){ + display: block; +} + +.tw-preflight :is(.tw-group:hover .group-hover\:tw-flex){ + display: flex; +} + +.tw-preflight :is(.tw-group:hover .group-hover\:tw-flex-col){ + flex-direction: column; +} + +.tw-preflight :is(.tw-dark .dark\:tw-border){ + border-width: 1px; +} + +.tw-preflight :is(.tw-dark .dark\:tw-border-black){ + --tw-border-opacity: 1; + border-color: rgb(0 0 0 / var(--tw-border-opacity)); +} + +.tw-preflight :is(.tw-dark .dark\:tw-border-white){ + --tw-border-opacity: 1; + border-color: rgb(255 255 255 / var(--tw-border-opacity)); +} + .tw-preflight :is(.tw-dark .dark\:tw-border-b-\[\#757575\]){ --tw-border-opacity: 1; border-bottom-color: rgb(117 117 117 / var(--tw-border-opacity)); } +.tw-preflight :is(.tw-dark .dark\:tw-border-b-gray-600){ + --tw-border-opacity: 1; + border-bottom-color: rgb(75 85 99 / var(--tw-border-opacity)); +} + +.tw-preflight :is(.tw-dark .dark\:tw-border-b-white){ + --tw-border-opacity: 1; + border-bottom-color: rgb(255 255 255 / var(--tw-border-opacity)); +} + +.tw-preflight :is(.tw-dark .dark\:tw-border-opacity-20){ + --tw-border-opacity: 0.2; +} + .tw-preflight :is(.tw-dark .dark\:tw-bg-\[\#1e1e1e\]){ --tw-bg-opacity: 1; background-color: rgb(30 30 30 / var(--tw-bg-opacity)); } +.tw-preflight :is(.tw-dark .dark\:tw-bg-\[\#1e1e1e\]\/95){ + background-color: rgb(30 30 30 / 0.95); +} + +.tw-preflight :is(.tw-dark .dark\:tw-bg-\[\#424242\]){ + --tw-bg-opacity: 1; + background-color: rgb(66 66 66 / var(--tw-bg-opacity)); +} + +.tw-preflight :is(.tw-dark .dark\:tw-bg-\[\#757575\]\/60){ + background-color: rgb(117 117 117 / 0.6); +} + +.tw-preflight :is(.tw-dark .dark\:tw-bg-gray-700){ + --tw-bg-opacity: 1; + background-color: rgb(55 65 81 / var(--tw-bg-opacity)); +} + +.tw-preflight :is(.tw-dark .dark\:tw-fill-\[\#1976d2\]){ + fill: #1976d2; +} + +.tw-preflight :is(.tw-dark .dark\:tw-fill-white){ + fill: #fff; +} + .tw-preflight :is(.tw-dark .dark\:tw-text-\[\#EEEEEE\]){ --tw-text-opacity: 1; color: rgb(238 238 238 / var(--tw-text-opacity)); } +.tw-preflight :is(.tw-dark .dark\:tw-text-\[\#F5F5F5\]){ + --tw-text-opacity: 1; + color: rgb(245 245 245 / var(--tw-text-opacity)); +} + +.tw-preflight :is(.tw-dark .dark\:tw-text-\[\#FAFAFA\]){ + --tw-text-opacity: 1; + color: rgb(250 250 250 / var(--tw-text-opacity)); +} + +.tw-preflight :is(.tw-dark .dark\:tw-text-gray-300){ + --tw-text-opacity: 1; + color: rgb(209 213 219 / var(--tw-text-opacity)); +} + +.tw-preflight :is(.tw-dark .dark\:tw-text-white){ + --tw-text-opacity: 1; + color: rgb(255 255 255 / var(--tw-text-opacity)); +} + +.tw-preflight :is(.tw-dark .dark\:tw-text-white\/70){ + color: rgb(255 255 255 / 0.7); +} + +.tw-preflight :is(.tw-dark .dark\:tw-text-white\/80){ + color: rgb(255 255 255 / 0.8); +} + +.tw-preflight :is(.tw-dark .dark\:tw-placeholder-white\/60)::-moz-placeholder{ + color: rgb(255 255 255 / 0.6); +} + +.tw-preflight :is(.tw-dark .dark\:tw-placeholder-white\/60)::placeholder{ + color: rgb(255 255 255 / 0.6); +} + .tw-preflight :is(.tw-dark .dark\:hover\:tw-border-b-white:hover){ --tw-border-opacity: 1; border-bottom-color: rgb(255 255 255 / var(--tw-border-opacity)); } +.tw-preflight :is(.tw-dark .dark\:hover\:tw-bg-\[\#3b3939\]:hover){ + --tw-bg-opacity: 1; + background-color: rgb(59 57 57 / var(--tw-bg-opacity)); +} + @media (min-width: 640px){ .tw-preflight :is(.sm\:tw-col-span-11){ grid-column: span 11 / span 11; @@ -1210,15 +2091,59 @@ Constrain images and videos to the parent width and preserve their intrinsic asp grid-column: span 12 / span 12; } + .tw-preflight :is(.sm\:tw-table-cell){ + display: table-cell; + } + + .tw-preflight :is(.sm\:tw-table-header-group){ + display: table-header-group; + } + + .tw-preflight :is(.sm\:tw-table-row){ + display: table-row; + } + + .tw-preflight :is(.sm\:tw-hidden){ + display: none; + } + + .tw-preflight :is(.sm\:tw-h-\[100\%\]){ + height: 100%; + } + + .tw-preflight :is(.sm\:tw-h-\[32px\]){ + height: 32px; + } + + .tw-preflight :is(.sm\:tw-h-\[34px\]){ + height: 34px; + } + + .tw-preflight :is(.sm\:tw-w-\[100\%\]){ + width: 100%; + } + .tw-preflight :is(.sm\:tw-w-full){ width: 100%; } + + .tw-preflight :is(.sm\:tw-flex-none){ + flex: none; + } } @media (min-width: 768px){ .tw-preflight :is(.md\:tw-col-span-12){ grid-column: span 12 / span 12; } + + .tw-preflight :is(.md\:tw-h-\[250px\]){ + height: 250px; + } + + .tw-preflight :is(.md\:tw-w-\[365px\]){ + width: 365px; + } } @media (min-width: 1024px){ @@ -1237,4 +2162,24 @@ Constrain images and videos to the parent width and preserve their intrinsic asp .tw-preflight :is(.lg\:tw-col-span-7){ grid-column: span 7 / span 7; } + + .tw-preflight :is(.lg\:tw-w-1\/2){ + width: 50%; + } + + .tw-preflight :is(.lg\:tw-w-1\/4){ + width: 25%; + } + + .tw-preflight :is(.lg\:tw-w-\[85\%\]){ + width: 85%; + } + + .tw-preflight :is(.lg\:tw-max-w-\[458px\]){ + max-width: 458px; + } + + .tw-preflight :is(.lg\:tw-flex-row){ + flex-direction: row; + } } \ No newline at end of file diff --git a/multisurveys-apis/src/object_api/static/sidebar.js b/multisurveys-apis/src/object_api/static/sidebar.js index 53f01b18b..b8bcdd152 100644 --- a/multisurveys-apis/src/object_api/static/sidebar.js +++ b/multisurveys-apis/src/object_api/static/sidebar.js @@ -28,22 +28,20 @@ export function elementReady(selector) { function prepare_params(evt){ let url = new URL(evt.detail.headers['HX-Current-URL']) - if(evt.detail.elt.getAttribute("name") == "next_page_sidebar" || evt.detail.elt.getAttribute("name") == "prev_page_sidebar"){ + if(evt.detail.elt.getAttribute("name") == "side_objects_btn"){ let next_page = evt.detail.elt.dataset.next url.searchParams.set("page", next_page) - - evt.detail.parameters = {...prepare_data(url)} }else{ let selected_oid = evt.detail.elt.dataset.oid let current_page = document.getElementById('current_page').dataset.page url.searchParams.set("selected_oid", selected_oid) url.searchParams.set("page", current_page) - - evt.detail.parameters = {...prepare_data(url)} } + evt.detail.parameters = {...prepare_data(url)} + } function prepare_data(url){ diff --git a/multisurveys-apis/src/object_api/static/ui_helpers.js b/multisurveys-apis/src/object_api/static/ui_helpers.js index bba0394cf..238d207d6 100644 --- a/multisurveys-apis/src/object_api/static/ui_helpers.js +++ b/multisurveys-apis/src/object_api/static/ui_helpers.js @@ -10,6 +10,61 @@ function display(item){ } +function highlight_text(item){ + if(item.classList.contains("tw-text-[#1976d2]")){ + item.classList.remove("tw-text-[#1976d2]", "hover:tw-bg-[#1976d2]/20") + item.classList.add("hover:tw-bg-[#b2b2b2]") + + darken_icon_color(item) + } else { + item.classList.remove("hover:tw-bg-[#b2b2b2]") + item.classList.add("tw-text-[#1976d2]", "hover:tw-bg-[#1976d2]/20") + + highlight_icon_color(item) + } +} + + +function darken_icon_color(item){ + let svg_items = item.querySelectorAll('svg') + + svg_items.forEach((element) => { + element.classList.remove("tw-fill-[#1976d2]", "dark:tw-fill-[#1976d2]") + + element.classList.add("tw-fill-dark", "dark:tw-fill-white") + }) +} + + +function highlight_icon_color(item){ + let svg_items = item.querySelectorAll('svg') + + svg_items.forEach((element) => { + element.classList.add("tw-fill-[#1976d2]", "dark:tw-fill-[#1976d2]") + + element.classList.remove("tw-fill-dark", "dark:tw-fill-white") + }) +} + + +function switch_arrow_icon(item){ + for(let child of item.children){ + if(child.getAttribute('name') == 'arrow_icon'){ + let direction = child.dataset.direction + let path = child.querySelector('path') + + if(direction == 'down'){ + child.dataset.direction = 'up' + path.setAttribute('d', "M480-528 296-344l-56-56 240-240 240 240-56 56-184-184Z") + } else { + child.dataset.direction = 'down' + path.setAttribute('d', "M480-344 240-584l56-56 184 184 184-184 56 56-240 240Z") + } + } + } +} + + function survey_emphasize(btn){ document.getElementById("survey").dataset.survey = btn.textContent document.querySelector('.obj-survey-selected').classList.remove('obj-survey-selected') @@ -58,4 +113,4 @@ function check_radio_consearch(ra_consearch, dec_consearch){ return [ra_consearch, dec_consearch] } -export {display, split_oids, format_oids, survey_emphasize, check_radio_consearch} \ No newline at end of file +export {display, highlight_text, split_oids, format_oids, survey_emphasize, check_radio_consearch, switch_arrow_icon} \ No newline at end of file diff --git a/multisurveys-apis/src/object_api/templates/basic_information/basicInformationPreview.html.jinja b/multisurveys-apis/src/object_api/templates/basic_information/basicInformationPreview.html.jinja index 7b35b97d9..05f0c0d73 100644 --- a/multisurveys-apis/src/object_api/templates/basic_information/basicInformationPreview.html.jinja +++ b/multisurveys-apis/src/object_api/templates/basic_information/basicInformationPreview.html.jinja @@ -3,7 +3,7 @@ - +
@@ -162,7 +162,7 @@ -
+
diff --git a/multisurveys-apis/src/object_api/templates/dependent_select.html.jinja b/multisurveys-apis/src/object_api/templates/dependent_select.html.jinja index 160fe88ce..9a57de8c2 100644 --- a/multisurveys-apis/src/object_api/templates/dependent_select.html.jinja +++ b/multisurveys-apis/src/object_api/templates/dependent_select.html.jinja @@ -1,7 +1,7 @@
{% for value in classes%} - {{value}} + {{value}} {% endfor %}
diff --git a/multisurveys-apis/src/object_api/templates/dropdown_order_table.html.jinja b/multisurveys-apis/src/object_api/templates/dropdown_order_table.html.jinja new file mode 100644 index 000000000..c94cd5498 --- /dev/null +++ b/multisurveys-apis/src/object_api/templates/dropdown_order_table.html.jinja @@ -0,0 +1,71 @@ + +
+ +
+
+
+ + Highest Probability +
+
+ + + FirstMJD + + + LastMJD + + + Highest Probability + + + + DeltaMJD (days) + +
+
+
+
+ + + + \ No newline at end of file diff --git a/multisurveys-apis/src/object_api/templates/form.html.jinja b/multisurveys-apis/src/object_api/templates/form.html.jinja index 1c2154e90..346e7d708 100644 --- a/multisurveys-apis/src/object_api/templates/form.html.jinja +++ b/multisurveys-apis/src/object_api/templates/form.html.jinja @@ -1,61 +1,68 @@ + -
Type
- - - - - - - - - - - - - - {% for item in objects_list['items']%} - - - - - - - - - +
+ {% include "dropdown_order_table.html.jinja" %} + +
Object IDNumber of detectionsFirstMJDLastMJDRA/DEC(degrees)Highest Probability ClassHighest ProbabilityDeltaMJD (days)
{{item['oid']}}{{item['n_det']}}{{item['firstmjd'] | truncate(3)}}{{item['lastmjd'] | truncate(3)}} - {{ item['meanra'] | truncate(3) }}, {{ item['meandec'] | truncate(3) }} - {{item['class_name']}}{{item['ranking']}}{{item['deltamjd']}}
+ + + + + + + + + + - {% endfor %} - -
Object IDNumber of detectionsFirstMJDLastMJDRA/DEC(degrees)Highest Probability ClassHighest ProbabilityDeltaMJD (days)
+ + + {% for item in objects_list['items']%} + + + oid + {{item['oid']}} + + + + Number of detections + {{item['n_det']}} + + + + FirstMJD + {{item['firstmjd'] | truncate(3)}} + + + + LastMJD + {{item['lastmjd'] | truncate(3)}} + + + + RA/Dec (degrees) + {{ item['meanra'] | truncate(3) }}, {{ item['meandec'] | truncate(3) }} + + + + Highest Probability Class + {{item['class_name']}} + + + + Highest Probability + {{item['ranking']}} + + + DeltaMJD (days) + {{item['deltamjd']}} + + + {% endfor %} + + +
+ {% else %} - {% from "objects_table_default.html.jinja" import default_table as defaultTable %}
- {{defaultTable()}} + {% include "objects_table_default.html.jinja" %} {% if objects_list['info_message'] %} - + {{objects_list['info_message'] }} {% endif %} @@ -144,7 +178,7 @@ \ No newline at end of file diff --git a/multisurveys-apis/src/object_api/templates/objects_table_default.html.jinja b/multisurveys-apis/src/object_api/templates/objects_table_default.html.jinja index 123c5d6d7..b0e99c6b0 100644 --- a/multisurveys-apis/src/object_api/templates/objects_table_default.html.jinja +++ b/multisurveys-apis/src/object_api/templates/objects_table_default.html.jinja @@ -1,20 +1,21 @@ -{% macro default_table() %} - - - - - - - - - - - - - -
Object IDNumber of detectionsFirstMJDLastMJDRA/DEC(degrees)Highest Probability ClassHighest ProbabilityDeltaMJD (days)
-{%endmacro%} + +
+ + + + + + + + + + + + + +
Object IDNumber of detectionsFirstMJDLastMJDRA/DEC(degrees)Highest Probability ClassHighest ProbabilityDeltaMJD (days)
+
diff --git a/multisurveys-apis/src/object_api/templates/sidebar.html.jinja b/multisurveys-apis/src/object_api/templates/sidebar.html.jinja index 19c5d253e..13a73975b 100644 --- a/multisurveys-apis/src/object_api/templates/sidebar.html.jinja +++ b/multisurveys-apis/src/object_api/templates/sidebar.html.jinja @@ -6,13 +6,13 @@ {% if objects_list['items']|length > 0 %}