From a2d6f85bbb9194029a38e52725c29e255eb88123 Mon Sep 17 00:00:00 2001 From: bprize15 Date: Tue, 3 Sep 2024 11:42:09 -0400 Subject: [PATCH 1/4] add epic pages for auth and visualization --- src/main/webapp/app/config/constants.tsx | 2 + .../webapp/app/pages/epic/EpicAnnotate.tsx | 60 + .../app/pages/epic/EpicAuthenticate.tsx | 50 + src/main/webapp/app/pages/epic/constants.ts | 1 + src/main/webapp/app/routes/routes.tsx | 18 + .../shared/api/generated/OncoKbAPI-docs.json | 1755 +++++++++++------ .../app/shared/api/generated/OncoKbAPI.ts | 1073 +++++++--- .../api/generated/OncoKbPrivateAPI-docs.json | 12 +- .../shared/api/generated/OncoKbPrivateAPI.ts | 8 +- 9 files changed, 2145 insertions(+), 834 deletions(-) create mode 100644 src/main/webapp/app/pages/epic/EpicAnnotate.tsx create mode 100644 src/main/webapp/app/pages/epic/EpicAuthenticate.tsx create mode 100644 src/main/webapp/app/pages/epic/constants.ts diff --git a/src/main/webapp/app/config/constants.tsx b/src/main/webapp/app/config/constants.tsx index 1148e6450..a93b313ad 100644 --- a/src/main/webapp/app/config/constants.tsx +++ b/src/main/webapp/app/config/constants.tsx @@ -590,6 +590,8 @@ export enum PAGE_ROUTE { ACCOUNT_PASSWORD_RESET_REQUEST = '/account/reset/request', ACCOUNT_PASSWORD_RESET_FINISH = '/account/reset/finish', ACCOUNT_ACTIVE_TRIAL_FINISH = '/account/active-trial/finish', + EPIC_AUTHENTICATE = '/epic/authenticate', + EPIC_ANNOTATE = 'epic/annotate', } export enum TABLE_COLUMN_KEY { diff --git a/src/main/webapp/app/pages/epic/EpicAnnotate.tsx b/src/main/webapp/app/pages/epic/EpicAnnotate.tsx new file mode 100644 index 000000000..0247be04d --- /dev/null +++ b/src/main/webapp/app/pages/epic/EpicAnnotate.tsx @@ -0,0 +1,60 @@ +import { SampleQueryResp } from 'app/shared/api/generated/OncoKbAPI'; +import React, { useEffect, useState } from 'react'; +import { CLIENT_ID } from './constants'; +import { inject } from 'mobx-react'; +import WindowStore from 'app/store/WindowStore'; +import { PAGE_ROUTE } from 'app/config/constants'; +import { useLocation } from 'react-router-dom'; +import axios from 'axios'; + +interface IEpicAnnotateProps { + windowStore: WindowStore; +} + +const EpicAnnotate = ({ windowStore }: IEpicAnnotateProps) => { + const url = useLocation(); + const [samples, setSamples] = useState(); + + useEffect(() => { + const tokenUrl = localStorage.getItem('tokenUrl'); + const iss = localStorage.getItem('iss'); + + const urlParams = new URLSearchParams(url.search); + const code = urlParams.get('code'); + + async function fetchAccessToken() { + if (!tokenUrl || !iss || !code) { + return; // decide what to do here + } + + const params = new URLSearchParams(); + params.append('grant_type', 'authorization_code'); + params.append( + 'redirect_uri', + `${windowStore.baseUrl}/${PAGE_ROUTE.EPIC_ANNOTATE}` + ); + params.append('code', code); + params.append('client_id', CLIENT_ID); + const config = { + headers: { + 'Content-Type': 'application/x-www-form-urlencoded', + }, + }; + + const epicResponse = await axios.post(tokenUrl, params, config); + + const token = epicResponse.data; + + //Pass ISS and token to backend, so it can use Epic APIs. + const mskResponse = await axios.get( + `/api/token?iss=${iss}&accessToken=${token.access_token}&patientId=${token.patient}` + ); + } + + fetchAccessToken().catch(console.error); + }, [url]); + + return <>; +}; + +export default inject('windowStore')(EpicAnnotate); diff --git a/src/main/webapp/app/pages/epic/EpicAuthenticate.tsx b/src/main/webapp/app/pages/epic/EpicAuthenticate.tsx new file mode 100644 index 000000000..6d57a2fed --- /dev/null +++ b/src/main/webapp/app/pages/epic/EpicAuthenticate.tsx @@ -0,0 +1,50 @@ +import LoadingIndicator from 'app/components/loadingIndicator/LoadingIndicator'; +import { PAGE_ROUTE } from 'app/config/constants'; +import WindowStore from 'app/store/WindowStore'; +import axios from 'axios'; +import { inject } from 'mobx-react'; +import React, { useEffect } from 'react'; +import { useLocation } from 'react-router-dom'; +import { CLIENT_ID } from './constants'; + +interface IEpicAuthenticateProps { + windowStore: WindowStore; +} + +const EpicAuthenticate = ({ windowStore }: IEpicAuthenticateProps) => { + const url = useLocation(); + const urlParams = new URLSearchParams(url.search); + + const launchCode = urlParams.get('launch'); + const iss = urlParams.get('iss'); + + useEffect(() => { + if (iss) { + localStorage.setItem('iss', iss); + } + }, [iss]); + + useEffect(() => { + const authenticate = async () => { + const response = await axios.get(`${iss}/metadata`); + const data = response.data; + const urlInfo = data.rest[0].security.extension[0].extension; + const metadata = { + authUrl: urlInfo[0].valueUri, + tokenUrl: urlInfo[1].valueUri, + }; + + localStorage.setItem('tokenUrl', metadata.tokenUrl); + + window.location.href = `${metadata.authUrl}?scope=launch&response_type=code&redirect_uri=${windowStore.baseUrl}/${PAGE_ROUTE.EPIC_ANNOTATE}&client_id=${CLIENT_ID}&launch=${launchCode}&state=98wrghuwuogerg97&aud=${iss}`; + }; + + if (iss) { + authenticate().catch(console.error); + } + }, [iss, windowStore.baseUrl]); + + return ; +}; + +export default inject('windowStore')(EpicAuthenticate); diff --git a/src/main/webapp/app/pages/epic/constants.ts b/src/main/webapp/app/pages/epic/constants.ts new file mode 100644 index 000000000..7083e844f --- /dev/null +++ b/src/main/webapp/app/pages/epic/constants.ts @@ -0,0 +1 @@ +export const CLIENT_ID = '5352bc80-84e4-4411-bd33-258a002badea'; diff --git a/src/main/webapp/app/routes/routes.tsx b/src/main/webapp/app/routes/routes.tsx index 3c514738b..4086c78ed 100644 --- a/src/main/webapp/app/routes/routes.tsx +++ b/src/main/webapp/app/routes/routes.tsx @@ -38,6 +38,8 @@ import OncologyTherapiesPage from 'app/pages/oncologyTherapiesPage/oncologyThera import { NewsPageNavTab } from 'app/pages/newsPage/NewsPageNavTab'; import CompanionDiagnosticDevicePage from 'app/pages/companionDiagnosticDevicesPage/companionDiagnosticDevicePage'; import OncokbRoute from 'app/shared/route/OncokbRoute'; +import EpicAnnotate from 'app/pages/epic/EpicAnnotate'; +import EpicAuthenticate from 'app/pages/epic/EpicAuthenticate'; const getOldLevelsRedirectRoute = (hash: string) => { const queryStrings = QueryString.parse(hash) as { @@ -342,6 +344,22 @@ const AppRouts = (props: { render={ReadOnlyMode(CreateCompanyUsersPage)} hasAnyAuthorities={[AUTHORITIES.ADMIN]} /> + + diff --git a/src/main/webapp/app/shared/api/generated/OncoKbAPI-docs.json b/src/main/webapp/app/shared/api/generated/OncoKbAPI-docs.json index 4c8d16582..0936db524 100644 --- a/src/main/webapp/app/shared/api/generated/OncoKbAPI-docs.json +++ b/src/main/webapp/app/shared/api/generated/OncoKbAPI-docs.json @@ -2,7 +2,7 @@ "swagger": "2.0", "info": { "description": "These endpoints are for private use only.", - "version": "v1.4.0", + "version": "v1.4.1", "title": "OncoKB Private APIs", "contact": { "name": "OncoKB", @@ -192,6 +192,50 @@ } } }, + "/annotate/epic": { + "post": { + "tags": [ + "Annotations" + ], + "summary": "annotateEpicPost", + "description": "Annotate epic genomic data.", + "operationId": "annotateEpicPostUsingPOST", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "parameters": [ + { + "in": "body", + "name": "body", + "description": "Epic genomic data in FHIR format", + "required": true, + "schema": { + "$ref": "#/definitions/GenomicData" + } + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "type": "array", + "items": { + "$ref": "#/definitions/SampleQueryResp" + } + } + }, + "400": { + "description": "Error, error message will be given.", + "schema": { + "type": "string" + } + } + } + } + }, "/annotate/mutations/byGenomicChange": { "get": { "tags": [ @@ -560,6 +604,47 @@ } } }, + "/annotate/sample": { + "post": { + "tags": [ + "Annotations" + ], + "summary": "annotateSamplePost", + "description": "Annotate a sample.", + "operationId": "annotateSamplePostUsingPOST", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "parameters": [ + { + "in": "body", + "name": "body", + "description": "Lists of queries for each alteration type. Please see swagger.json for request body format.", + "required": true, + "schema": { + "$ref": "#/definitions/AnnotateSampleQuery" + } + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/SampleQueryResp" + } + }, + "400": { + "description": "Error, error message will be given.", + "schema": { + "type": "string" + } + } + } + } + }, "/annotate/structuralVariants": { "get": { "tags": [ @@ -713,6 +798,51 @@ } } }, + "/annotation/search": { + "get": { + "tags": [ + "Annotations" + ], + "summary": "annotationSearchGet", + "description": "Get annotations based on search", + "operationId": "annotationSearchGetUsingGET", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "parameters": [ + { + "name": "query", + "in": "query", + "description": "The search query, it could be hugoSymbol, variant or cancer type. At least two characters. Maximum two keywords are supported, separated by space", + "required": true, + "type": "string" + }, + { + "name": "limit", + "in": "query", + "description": "The limit of returned result.", + "required": false, + "type": "integer", + "default": 10, + "format": "int32" + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "type": "array", + "items": { + "$ref": "#/definitions/AnnotationSearchResult" + } + } + } + } + } + }, "/classification/variants": { "get": { "tags": [ @@ -2058,6 +2188,71 @@ } } }, + "/utils/allVariantsOfUnknownSignificance": { + "get": { + "tags": [ + "Variants", + "Cancer Genes" + ], + "summary": "utilsAllVariantsOfUnknownSignificanceGet", + "description": "Get All Variants of Unknown Significance.", + "operationId": "utilsAllVariantsOfUnknownSignificanceGetUsingGET", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "type": "array", + "items": { + "$ref": "#/definitions/VariantOfUnknownSignificance" + } + } + }, + "404": { + "description": "Not Found" + }, + "503": { + "description": "Service Unavailable" + } + } + } + }, + "/utils/allVariantsOfUnknownSignificance.txt": { + "get": { + "tags": [ + "Variants", + "Cancer Genes" + ], + "summary": "utilsAllVariantsOfUnknownSignificanceTxtGet", + "description": "Get All Variants of Unknown Significance in text file.", + "operationId": "utilsAllVariantsOfUnknownSignificanceTxtGetUsingGET", + "consumes": [ + "application/json" + ], + "produces": [ + "text/plain" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "type": "string" + } + }, + "404": { + "description": "Not Found" + }, + "503": { + "description": "Service Unavailable" + } + } + } + }, "/utils/cancerGeneList": { "get": { "tags": [ @@ -2370,178 +2565,51 @@ } } }, - "Article": { - "type": "object", - "properties": { - "abstract": { - "type": "string" - }, - "authors": { - "type": "string" - }, - "elocationId": { - "type": "string" - }, - "issue": { - "type": "string" - }, - "journal": { - "type": "string" - }, - "link": { - "type": "string" - }, - "pages": { - "type": "string" - }, - "pmid": { - "type": "string" - }, - "pubDate": { - "type": "string" - }, - "reference": { - "type": "string" - }, - "title": { - "type": "string" - }, - "volume": { - "type": "string" - } - } - }, - "Alteration": { + "SemVer": { "type": "object", "properties": { - "alteration": { - "type": "string" - }, - "consequence": { - "$ref": "#/definitions/VariantConsequence" - }, - "gene": { - "$ref": "#/definitions/Gene" - }, - "name": { - "type": "string" + "major": { + "type": "integer", + "format": "int32" }, - "proteinEnd": { + "minor": { "type": "integer", "format": "int32" }, - "proteinStart": { + "patch": { "type": "integer", "format": "int32" }, - "refResidues": { - "type": "string" + "stable": { + "type": "boolean" }, - "referenceGenomes": { + "suffixTokens": { "type": "array", "items": { - "type": "string", - "enum": [ - "GRCh37", - "GRCh38" - ] + "type": "string" } }, - "variantResidues": { + "version": { "type": "string" } } }, - "AnnotatedVariant": { + "Implication": { "type": "object", "properties": { - "entrezGeneId": { - "type": "integer", - "format": "int32" + "abstracts": { + "type": "array", + "items": { + "$ref": "#/definitions/ArticleAbstract" + } }, - "gene": { - "type": "string" - }, - "grch37Isoform": { - "type": "string" - }, - "grch37RefSeq": { - "type": "string" - }, - "grch38Isoform": { - "type": "string" - }, - "grch38RefSeq": { - "type": "string" - }, - "mutationEffect": { - "type": "string" - }, - "mutationEffectAbstracts": { - "type": "string" - }, - "mutationEffectPmids": { - "type": "string" - }, - "oncogenicity": { - "type": "string" - }, - "proteinChange": { - "type": "string" - }, - "referenceGenome": { - "type": "string" - }, - "variant": { - "type": "string" - } - } - }, - "SemVer": { - "type": "object", - "properties": { - "major": { - "type": "integer", - "format": "int32" - }, - "minor": { - "type": "integer", - "format": "int32" - }, - "patch": { - "type": "integer", - "format": "int32" - }, - "stable": { - "type": "boolean" - }, - "suffixTokens": { - "type": "array", - "items": { - "type": "string" - } - }, - "version": { - "type": "string" - } - } - }, - "Implication": { - "type": "object", - "properties": { - "abstracts": { - "type": "array", - "items": { - "$ref": "#/definitions/ArticleAbstract" - } - }, - "alterations": { - "type": "array", - "items": { - "type": "string" - } - }, - "description": { + "alterations": { + "type": "array", + "items": { + "type": "string" + } + }, + "description": { "type": "string" }, "levelOfEvidence": { @@ -2577,6 +2645,46 @@ } } }, + "MutationsQuery": { + "type": "object", + "properties": { + "cDnaChange": { + "type": "array", + "items": { + "type": "object" + } + }, + "genomicChange": { + "type": "array", + "items": { + "$ref": "#/definitions/AnnotateMutationByGenomicChangeQuery" + } + }, + "hgvsg": { + "type": "array", + "items": { + "$ref": "#/definitions/AnnotateMutationByHGVSgQuery" + } + }, + "proteinChange": { + "type": "array", + "items": { + "$ref": "#/definitions/AnnotateMutationByProteinChangeQuery" + } + } + } + }, + "HasMember": { + "type": "object", + "properties": { + "display": { + "type": "string" + }, + "reference": { + "type": "string" + } + } + }, "TumorType": { "type": "object", "properties": { @@ -2665,6 +2773,20 @@ } } }, + "Coding": { + "type": "object", + "properties": { + "code": { + "type": "string" + }, + "display": { + "type": "string" + }, + "system": { + "type": "string" + } + } + }, "Version": { "type": "object", "properties": { @@ -2676,6 +2798,14 @@ } } }, + "Search": { + "type": "object", + "properties": { + "mode": { + "type": "string" + } + } + }, "TreatmentDrugId": { "type": "object", "properties": { @@ -2743,61 +2873,94 @@ } } }, - "Evidence": { + "AnnotateStructuralVariantQuery": { "type": "object", "properties": { - "additionalInfo": { - "type": "string" - }, - "alterations": { + "evidenceTypes": { "type": "array", "items": { - "$ref": "#/definitions/Alteration" + "type": "string", + "enum": [ + "GENE_SUMMARY", + "MUTATION_SUMMARY", + "TUMOR_TYPE_SUMMARY", + "GENE_TUMOR_TYPE_SUMMARY", + "PROGNOSTIC_SUMMARY", + "DIAGNOSTIC_SUMMARY", + "GENE_BACKGROUND", + "ONCOGENIC", + "MUTATION_EFFECT", + "VUS", + "PROGNOSTIC_IMPLICATION", + "DIAGNOSTIC_IMPLICATION", + "STANDARD_THERAPEUTIC_IMPLICATIONS_FOR_DRUG_SENSITIVITY", + "STANDARD_THERAPEUTIC_IMPLICATIONS_FOR_DRUG_RESISTANCE", + "INVESTIGATIONAL_THERAPEUTIC_IMPLICATIONS_DRUG_SENSITIVITY", + "INVESTIGATIONAL_THERAPEUTIC_IMPLICATIONS_DRUG_RESISTANCE" + ] } }, - "articles": { - "type": "array", - "items": { - "$ref": "#/definitions/Article" - } + "functionalFusion": { + "type": "boolean" }, - "cancerTypes": { - "type": "array", - "items": { - "$ref": "#/definitions/TumorType" - } + "geneA": { + "$ref": "#/definitions/QueryGene" }, - "description": { + "geneB": { + "$ref": "#/definitions/QueryGene" + }, + "id": { "type": "string" }, - "evidenceType": { + "referenceGenome": { "type": "string", "enum": [ - "GENE_SUMMARY", - "MUTATION_SUMMARY", - "TUMOR_TYPE_SUMMARY", - "GENE_TUMOR_TYPE_SUMMARY", - "PROGNOSTIC_SUMMARY", - "DIAGNOSTIC_SUMMARY", - "GENE_BACKGROUND", - "ONCOGENIC", - "MUTATION_EFFECT", - "VUS", - "PROGNOSTIC_IMPLICATION", - "DIAGNOSTIC_IMPLICATION", - "STANDARD_THERAPEUTIC_IMPLICATIONS_FOR_DRUG_SENSITIVITY", - "STANDARD_THERAPEUTIC_IMPLICATIONS_FOR_DRUG_RESISTANCE", - "INVESTIGATIONAL_THERAPEUTIC_IMPLICATIONS_DRUG_SENSITIVITY", - "INVESTIGATIONAL_THERAPEUTIC_IMPLICATIONS_DRUG_RESISTANCE" + "GRCh37", + "GRCh38" ] }, - "excludedCancerTypes": { + "structuralVariantType": { + "type": "string", + "enum": [ + "DELETION", + "TRANSLOCATION", + "DUPLICATION", + "INSERTION", + "INVERSION", + "FUSION", + "UNKNOWN" + ] + }, + "tumorType": { + "type": "string" + } + } + }, + "IndicatorQueryResp": { + "type": "object", + "properties": { + "alleleExist": { + "type": "boolean" + }, + "dataVersion": { + "type": "string" + }, + "diagnosticImplications": { "type": "array", "items": { - "$ref": "#/definitions/TumorType" + "$ref": "#/definitions/Implication" } }, - "fdaLevel": { + "diagnosticSummary": { + "type": "string" + }, + "geneExist": { + "type": "boolean" + }, + "geneSummary": { + "type": "string" + }, + "highestDiagnosticImplicationLevel": { "type": "string", "enum": [ "LEVEL_1", @@ -2819,217 +2982,7 @@ "NO" ] }, - "gene": { - "$ref": "#/definitions/Gene" - }, - "id": { - "type": "integer", - "format": "int32" - }, - "knownEffect": { - "type": "string" - }, - "lastEdit": { - "type": "string", - "format": "date-time" - }, - "lastReview": { - "type": "string", - "format": "date-time" - }, - "levelOfEvidence": { - "type": "string", - "enum": [ - "LEVEL_1", - "LEVEL_2", - "LEVEL_3A", - "LEVEL_3B", - "LEVEL_4", - "LEVEL_R1", - "LEVEL_R2", - "LEVEL_Px1", - "LEVEL_Px2", - "LEVEL_Px3", - "LEVEL_Dx1", - "LEVEL_Dx2", - "LEVEL_Dx3", - "LEVEL_Fda1", - "LEVEL_Fda2", - "LEVEL_Fda3", - "NO" - ] - }, - "liquidPropagationLevel": { - "type": "string", - "enum": [ - "LEVEL_1", - "LEVEL_2", - "LEVEL_3A", - "LEVEL_3B", - "LEVEL_4", - "LEVEL_R1", - "LEVEL_R2", - "LEVEL_Px1", - "LEVEL_Px2", - "LEVEL_Px3", - "LEVEL_Dx1", - "LEVEL_Dx2", - "LEVEL_Dx3", - "LEVEL_Fda1", - "LEVEL_Fda2", - "LEVEL_Fda3", - "NO" - ] - }, - "relevantCancerTypes": { - "type": "array", - "items": { - "$ref": "#/definitions/TumorType" - } - }, - "solidPropagationLevel": { - "type": "string", - "enum": [ - "LEVEL_1", - "LEVEL_2", - "LEVEL_3A", - "LEVEL_3B", - "LEVEL_4", - "LEVEL_R1", - "LEVEL_R2", - "LEVEL_Px1", - "LEVEL_Px2", - "LEVEL_Px3", - "LEVEL_Dx1", - "LEVEL_Dx2", - "LEVEL_Dx3", - "LEVEL_Fda1", - "LEVEL_Fda2", - "LEVEL_Fda3", - "NO" - ] - }, - "treatments": { - "type": "array", - "items": { - "$ref": "#/definitions/Treatment" - } - }, - "uuid": { - "type": "string" - } - } - }, - "AnnotateStructuralVariantQuery": { - "type": "object", - "properties": { - "evidenceTypes": { - "type": "array", - "items": { - "type": "string", - "enum": [ - "GENE_SUMMARY", - "MUTATION_SUMMARY", - "TUMOR_TYPE_SUMMARY", - "GENE_TUMOR_TYPE_SUMMARY", - "PROGNOSTIC_SUMMARY", - "DIAGNOSTIC_SUMMARY", - "GENE_BACKGROUND", - "ONCOGENIC", - "MUTATION_EFFECT", - "VUS", - "PROGNOSTIC_IMPLICATION", - "DIAGNOSTIC_IMPLICATION", - "STANDARD_THERAPEUTIC_IMPLICATIONS_FOR_DRUG_SENSITIVITY", - "STANDARD_THERAPEUTIC_IMPLICATIONS_FOR_DRUG_RESISTANCE", - "INVESTIGATIONAL_THERAPEUTIC_IMPLICATIONS_DRUG_SENSITIVITY", - "INVESTIGATIONAL_THERAPEUTIC_IMPLICATIONS_DRUG_RESISTANCE" - ] - } - }, - "functionalFusion": { - "type": "boolean" - }, - "geneA": { - "$ref": "#/definitions/QueryGene" - }, - "geneB": { - "$ref": "#/definitions/QueryGene" - }, - "id": { - "type": "string" - }, - "referenceGenome": { - "type": "string", - "enum": [ - "GRCh37", - "GRCh38" - ] - }, - "structuralVariantType": { - "type": "string", - "enum": [ - "DELETION", - "TRANSLOCATION", - "DUPLICATION", - "INSERTION", - "INVERSION", - "FUSION", - "UNKNOWN" - ] - }, - "tumorType": { - "type": "string" - } - } - }, - "IndicatorQueryResp": { - "type": "object", - "properties": { - "alleleExist": { - "type": "boolean" - }, - "dataVersion": { - "type": "string" - }, - "diagnosticImplications": { - "type": "array", - "items": { - "$ref": "#/definitions/Implication" - } - }, - "diagnosticSummary": { - "type": "string" - }, - "geneExist": { - "type": "boolean" - }, - "geneSummary": { - "type": "string" - }, - "highestDiagnosticImplicationLevel": { - "type": "string", - "enum": [ - "LEVEL_1", - "LEVEL_2", - "LEVEL_3A", - "LEVEL_3B", - "LEVEL_4", - "LEVEL_R1", - "LEVEL_R2", - "LEVEL_Px1", - "LEVEL_Px2", - "LEVEL_Px3", - "LEVEL_Dx1", - "LEVEL_Dx2", - "LEVEL_Dx3", - "LEVEL_Fda1", - "LEVEL_Fda2", - "LEVEL_Fda3", - "NO" - ] - }, - "highestFdaLevel": { + "highestFdaLevel": { "type": "string", "enum": [ "LEVEL_1", @@ -3220,6 +3173,9 @@ "cancerType": { "type": "string" }, + "description": { + "type": "string" + }, "drugs": { "type": "string" }, @@ -3259,30 +3215,720 @@ } } }, - "ArticleAbstract": { + "InfoLevel": { "type": "object", "properties": { - "abstract": { + "colorHex": { "type": "string" }, - "link": { + "description": { + "type": "string" + }, + "htmlDescription": { "type": "string" + }, + "levelOfEvidence": { + "type": "string", + "enum": [ + "LEVEL_1", + "LEVEL_2", + "LEVEL_3A", + "LEVEL_3B", + "LEVEL_4", + "LEVEL_R1", + "LEVEL_R2", + "LEVEL_Px1", + "LEVEL_Px2", + "LEVEL_Px3", + "LEVEL_Dx1", + "LEVEL_Dx2", + "LEVEL_Dx3", + "LEVEL_Fda1", + "LEVEL_Fda2", + "LEVEL_Fda3", + "NO" + ] } } }, - "InfoLevel": { + "Trial": { "type": "object", "properties": { - "colorHex": { + "arms": { + "type": "array", + "items": { + "$ref": "#/definitions/Arms" + } + }, + "briefTitle": { "type": "string" }, - "description": { + "currentTrialStatus": { "type": "string" }, - "htmlDescription": { + "isUSTrial": { + "type": "boolean" + }, + "nctId": { "type": "string" }, - "levelOfEvidence": { + "principalInvestigator": { + "type": "string" + } + } + }, + "Resource": { + "type": "object", + "properties": { + "basedOn": { + "type": "array", + "items": { + "$ref": "#/definitions/BasedOn" + } + }, + "category": { + "type": "array", + "items": { + "$ref": "#/definitions/Category" + } + }, + "code": { + "$ref": "#/definitions/Code" + }, + "component": { + "type": "array", + "items": { + "$ref": "#/definitions/Component" + } + }, + "derivedFrom": { + "type": "array", + "items": { + "$ref": "#/definitions/DerivedFrom" + } + }, + "effectiveDateTime": { + "type": "string", + "format": "date-time" + }, + "extension": { + "type": "array", + "items": { + "$ref": "#/definitions/Extension" + } + }, + "hasMember": { + "type": "array", + "items": { + "$ref": "#/definitions/HasMember" + } + }, + "id": { + "type": "string" + }, + "issued": { + "type": "string", + "format": "date-time" + }, + "resourceType": { + "type": "string" + }, + "status": { + "type": "string" + }, + "subject": { + "$ref": "#/definitions/Subject" + }, + "valueCodeableConcept": { + "$ref": "#/definitions/ValueCodeableConcept" + } + } + }, + "Arms": { + "type": "object", + "properties": { + "armDescription": { + "type": "string" + }, + "drugs": { + "type": "array", + "items": { + "$ref": "#/definitions/Drug" + } + } + } + }, + "OncoKBInfo": { + "type": "object", + "properties": { + "apiVersion": { + "$ref": "#/definitions/SemVer" + }, + "appVersion": { + "$ref": "#/definitions/SemVer" + }, + "dataVersion": { + "$ref": "#/definitions/Version" + }, + "levels": { + "type": "array", + "items": { + "$ref": "#/definitions/InfoLevel" + } + }, + "ncitVersion": { + "type": "string" + }, + "oncoTreeVersion": { + "type": "string" + }, + "publicInstance": { + "type": "boolean" + } + } + }, + "VariantConsequence": { + "type": "object", + "properties": { + "description": { + "type": "string" + }, + "isGenerallyTruncating": { + "type": "boolean" + }, + "term": { + "type": "string" + } + } + }, + "Code": { + "type": "object", + "properties": { + "coding": { + "type": "array", + "items": { + "$ref": "#/definitions/Coding" + } + }, + "text": { + "type": "string" + } + } + }, + "ValueRange": { + "type": "object", + "properties": { + "high": { + "$ref": "#/definitions/High" + }, + "low": { + "$ref": "#/definitions/Low" + } + } + }, + "EvidenceQueries": { + "type": "object", + "properties": { + "evidenceTypes": { + "type": "string" + }, + "highestLevelOnly": { + "type": "boolean" + }, + "levels": { + "type": "array", + "items": { + "type": "string", + "enum": [ + "LEVEL_1", + "LEVEL_2", + "LEVEL_3A", + "LEVEL_3B", + "LEVEL_4", + "LEVEL_R1", + "LEVEL_R2", + "LEVEL_Px1", + "LEVEL_Px2", + "LEVEL_Px3", + "LEVEL_Dx1", + "LEVEL_Dx2", + "LEVEL_Dx3", + "LEVEL_Fda1", + "LEVEL_Fda2", + "LEVEL_Fda3", + "NO" + ] + } + }, + "queries": { + "type": "array", + "items": { + "$ref": "#/definitions/Query" + } + } + } + }, + "AnnotateCopyNumberAlterationQuery": { + "type": "object", + "properties": { + "copyNameAlterationType": { + "type": "string", + "enum": [ + "AMPLIFICATION", + "DELETION", + "GAIN", + "LOSS" + ] + }, + "evidenceTypes": { + "type": "array", + "items": { + "type": "string", + "enum": [ + "GENE_SUMMARY", + "MUTATION_SUMMARY", + "TUMOR_TYPE_SUMMARY", + "GENE_TUMOR_TYPE_SUMMARY", + "PROGNOSTIC_SUMMARY", + "DIAGNOSTIC_SUMMARY", + "GENE_BACKGROUND", + "ONCOGENIC", + "MUTATION_EFFECT", + "VUS", + "PROGNOSTIC_IMPLICATION", + "DIAGNOSTIC_IMPLICATION", + "STANDARD_THERAPEUTIC_IMPLICATIONS_FOR_DRUG_SENSITIVITY", + "STANDARD_THERAPEUTIC_IMPLICATIONS_FOR_DRUG_RESISTANCE", + "INVESTIGATIONAL_THERAPEUTIC_IMPLICATIONS_DRUG_SENSITIVITY", + "INVESTIGATIONAL_THERAPEUTIC_IMPLICATIONS_DRUG_RESISTANCE" + ] + } + }, + "gene": { + "$ref": "#/definitions/QueryGene" + }, + "id": { + "type": "string" + }, + "referenceGenome": { + "type": "string", + "enum": [ + "GRCh37", + "GRCh38" + ] + }, + "tumorType": { + "type": "string" + } + } + }, + "Low": { + "type": "object", + "properties": { + "value": { + "type": "integer", + "format": "int32" + } + } + }, + "BasedOn": { + "type": "object", + "properties": { + "reference": { + "type": "string" + } + } + }, + "Link": { + "type": "object", + "properties": { + "relation": { + "type": "string" + }, + "url": { + "type": "string" + } + } + }, + "Category": { + "type": "object", + "properties": { + "coding": { + "type": "array", + "items": { + "$ref": "#/definitions/Coding" + } + }, + "text": { + "type": "string" + } + } + }, + "Article": { + "type": "object", + "properties": { + "abstract": { + "type": "string" + }, + "authors": { + "type": "string" + }, + "elocationId": { + "type": "string" + }, + "issue": { + "type": "string" + }, + "journal": { + "type": "string" + }, + "link": { + "type": "string" + }, + "pages": { + "type": "string" + }, + "pmid": { + "type": "string" + }, + "pubDate": { + "type": "string" + }, + "reference": { + "type": "string" + }, + "title": { + "type": "string" + }, + "volume": { + "type": "string" + } + } + }, + "Alteration": { + "type": "object", + "properties": { + "alteration": { + "type": "string" + }, + "consequence": { + "$ref": "#/definitions/VariantConsequence" + }, + "gene": { + "$ref": "#/definitions/Gene" + }, + "name": { + "type": "string" + }, + "proteinEnd": { + "type": "integer", + "format": "int32" + }, + "proteinStart": { + "type": "integer", + "format": "int32" + }, + "refResidues": { + "type": "string" + }, + "referenceGenomes": { + "type": "array", + "items": { + "type": "string", + "enum": [ + "GRCh37", + "GRCh38" + ] + } + }, + "variantResidues": { + "type": "string" + } + } + }, + "GenomicData": { + "type": "object", + "properties": { + "entry": { + "type": "array", + "items": { + "$ref": "#/definitions/Entry" + } + }, + "link": { + "type": "array", + "items": { + "$ref": "#/definitions/Link" + } + }, + "resourceType": { + "type": "string" + }, + "samples": { + "type": "array", + "items": { + "$ref": "#/definitions/AnnotateSampleQuery" + } + }, + "total": { + "type": "integer", + "format": "int32" + }, + "type": { + "type": "string" + } + } + }, + "AnnotatedVariant": { + "type": "object", + "properties": { + "description": { + "type": "string" + }, + "entrezGeneId": { + "type": "integer", + "format": "int32" + }, + "gene": { + "type": "string" + }, + "grch37Isoform": { + "type": "string" + }, + "grch37RefSeq": { + "type": "string" + }, + "grch38Isoform": { + "type": "string" + }, + "grch38RefSeq": { + "type": "string" + }, + "mutationEffect": { + "type": "string" + }, + "mutationEffectAbstracts": { + "type": "string" + }, + "mutationEffectPmids": { + "type": "string" + }, + "oncogenicity": { + "type": "string" + }, + "proteinChange": { + "type": "string" + }, + "referenceGenome": { + "type": "string" + }, + "variant": { + "type": "string" + } + } + }, + "Entry": { + "type": "object", + "properties": { + "fullUrl": { + "type": "string" + }, + "link": { + "type": "array", + "items": { + "$ref": "#/definitions/Link" + } + }, + "resource": { + "$ref": "#/definitions/Resource" + }, + "search": { + "$ref": "#/definitions/Search" + } + } + }, + "AnnotateSampleQuery": { + "type": "object", + "properties": { + "copyNumberAlterations": { + "type": "array", + "items": { + "$ref": "#/definitions/AnnotateCopyNumberAlterationQuery" + } + }, + "mutations": { + "$ref": "#/definitions/MutationsQuery" + }, + "structuralVariants": { + "type": "array", + "items": { + "$ref": "#/definitions/AnnotateStructuralVariantQuery" + } + } + } + }, + "AnnotationSearchResult": { + "type": "object", + "properties": { + "indicatorQueryResp": { + "$ref": "#/definitions/IndicatorQueryResp" + }, + "queryType": { + "type": "string", + "enum": [ + "GENE", + "VARIANT", + "DRUG", + "CANCER_TYPE" + ] + } + } + }, + "Evidence": { + "type": "object", + "properties": { + "additionalInfo": { + "type": "string" + }, + "alterations": { + "type": "array", + "items": { + "$ref": "#/definitions/Alteration" + } + }, + "articles": { + "type": "array", + "items": { + "$ref": "#/definitions/Article" + } + }, + "cancerTypes": { + "type": "array", + "items": { + "$ref": "#/definitions/TumorType" + } + }, + "description": { + "type": "string" + }, + "evidenceType": { + "type": "string", + "enum": [ + "GENE_SUMMARY", + "MUTATION_SUMMARY", + "TUMOR_TYPE_SUMMARY", + "GENE_TUMOR_TYPE_SUMMARY", + "PROGNOSTIC_SUMMARY", + "DIAGNOSTIC_SUMMARY", + "GENE_BACKGROUND", + "ONCOGENIC", + "MUTATION_EFFECT", + "VUS", + "PROGNOSTIC_IMPLICATION", + "DIAGNOSTIC_IMPLICATION", + "STANDARD_THERAPEUTIC_IMPLICATIONS_FOR_DRUG_SENSITIVITY", + "STANDARD_THERAPEUTIC_IMPLICATIONS_FOR_DRUG_RESISTANCE", + "INVESTIGATIONAL_THERAPEUTIC_IMPLICATIONS_DRUG_SENSITIVITY", + "INVESTIGATIONAL_THERAPEUTIC_IMPLICATIONS_DRUG_RESISTANCE" + ] + }, + "excludedCancerTypes": { + "type": "array", + "items": { + "$ref": "#/definitions/TumorType" + } + }, + "fdaLevel": { + "type": "string", + "enum": [ + "LEVEL_1", + "LEVEL_2", + "LEVEL_3A", + "LEVEL_3B", + "LEVEL_4", + "LEVEL_R1", + "LEVEL_R2", + "LEVEL_Px1", + "LEVEL_Px2", + "LEVEL_Px3", + "LEVEL_Dx1", + "LEVEL_Dx2", + "LEVEL_Dx3", + "LEVEL_Fda1", + "LEVEL_Fda2", + "LEVEL_Fda3", + "NO" + ] + }, + "gene": { + "$ref": "#/definitions/Gene" + }, + "id": { + "type": "integer", + "format": "int32" + }, + "knownEffect": { + "type": "string" + }, + "lastEdit": { + "type": "string", + "format": "date-time" + }, + "lastReview": { + "type": "string", + "format": "date-time" + }, + "levelOfEvidence": { + "type": "string", + "enum": [ + "LEVEL_1", + "LEVEL_2", + "LEVEL_3A", + "LEVEL_3B", + "LEVEL_4", + "LEVEL_R1", + "LEVEL_R2", + "LEVEL_Px1", + "LEVEL_Px2", + "LEVEL_Px3", + "LEVEL_Dx1", + "LEVEL_Dx2", + "LEVEL_Dx3", + "LEVEL_Fda1", + "LEVEL_Fda2", + "LEVEL_Fda3", + "NO" + ] + }, + "liquidPropagationLevel": { + "type": "string", + "enum": [ + "LEVEL_1", + "LEVEL_2", + "LEVEL_3A", + "LEVEL_3B", + "LEVEL_4", + "LEVEL_R1", + "LEVEL_R2", + "LEVEL_Px1", + "LEVEL_Px2", + "LEVEL_Px3", + "LEVEL_Dx1", + "LEVEL_Dx2", + "LEVEL_Dx3", + "LEVEL_Fda1", + "LEVEL_Fda2", + "LEVEL_Fda3", + "NO" + ] + }, + "relevantCancerTypes": { + "type": "array", + "items": { + "$ref": "#/definitions/TumorType" + } + }, + "solidPropagationLevel": { "type": "string", "enum": [ "LEVEL_1", @@ -3303,6 +3949,64 @@ "LEVEL_Fda3", "NO" ] + }, + "treatments": { + "type": "array", + "items": { + "$ref": "#/definitions/Treatment" + } + }, + "uuid": { + "type": "string" + } + } + }, + "VariantOfUnknownSignificance": { + "type": "object", + "properties": { + "entrezGeneId": { + "type": "integer", + "format": "int32" + }, + "gene": { + "type": "string" + }, + "variant": { + "type": "string" + } + } + }, + "Component": { + "type": "object", + "properties": { + "code": { + "$ref": "#/definitions/Code" + }, + "extension": { + "type": "array", + "items": { + "$ref": "#/definitions/Extension" + } + }, + "valueCodeableConcept": { + "$ref": "#/definitions/ValueCodeableConcept" + }, + "valueRange": { + "$ref": "#/definitions/ValueRange" + }, + "valueString": { + "type": "string" + } + } + }, + "ArticleAbstract": { + "type": "object", + "properties": { + "abstract": { + "type": "string" + }, + "link": { + "type": "string" } } }, @@ -3317,6 +4021,15 @@ } } }, + "High": { + "type": "object", + "properties": { + "value": { + "type": "integer", + "format": "int32" + } + } + }, "CuratedGene": { "type": "object", "properties": { @@ -3431,32 +4144,6 @@ } } }, - "Trial": { - "type": "object", - "properties": { - "arms": { - "type": "array", - "items": { - "$ref": "#/definitions/Arms" - } - }, - "briefTitle": { - "type": "string" - }, - "currentTrialStatus": { - "type": "string" - }, - "isUSTrial": { - "type": "boolean" - }, - "nctId": { - "type": "string" - }, - "principalInvestigator": { - "type": "string" - } - } - }, "QueryGene": { "type": "object", "properties": { @@ -3541,20 +4228,6 @@ } } }, - "Arms": { - "type": "object", - "properties": { - "armDescription": { - "type": "string" - }, - "drugs": { - "type": "array", - "items": { - "$ref": "#/definitions/Drug" - } - } - } - }, "MainType": { "type": "object", "properties": { @@ -3576,46 +4249,26 @@ }, "description": "OncoTree Cancer Type" }, - "OncoKBInfo": { + "SampleQueryResp": { "type": "object", "properties": { - "apiVersion": { - "$ref": "#/definitions/SemVer" - }, - "appVersion": { - "$ref": "#/definitions/SemVer" - }, - "dataVersion": { - "$ref": "#/definitions/Version" - }, - "levels": { + "copyNumberAlterations": { "type": "array", "items": { - "$ref": "#/definitions/InfoLevel" + "$ref": "#/definitions/IndicatorQueryResp" } }, - "ncitVersion": { - "type": "string" - }, - "oncoTreeVersion": { - "type": "string" - }, - "publicInstance": { - "type": "boolean" - } - } - }, - "VariantConsequence": { - "type": "object", - "properties": { - "description": { - "type": "string" - }, - "isGenerallyTruncating": { - "type": "boolean" + "mutations": { + "type": "array", + "items": { + "$ref": "#/definitions/IndicatorQueryResp" + } }, - "term": { - "type": "string" + "structuralVariants": { + "type": "array", + "items": { + "$ref": "#/definitions/IndicatorQueryResp" + } } } }, @@ -3769,6 +4422,51 @@ } } }, + "DerivedFrom": { + "type": "object", + "properties": { + "display": { + "type": "string" + }, + "reference": { + "type": "string" + } + } + }, + "Subject": { + "type": "object", + "properties": { + "display": { + "type": "string" + }, + "reference": { + "type": "string" + } + } + }, + "Extension": { + "type": "object", + "properties": { + "extension": { + "type": "array", + "items": { + "$ref": "#/definitions/Extension" + } + }, + "url": { + "type": "string" + }, + "valueBoolean": { + "type": "boolean" + }, + "valueCodeableConcept": { + "$ref": "#/definitions/ValueCodeableConcept" + }, + "valueString": { + "type": "string" + } + } + }, "ResponseEntity": { "type": "object", "properties": { @@ -3832,6 +4530,7 @@ "428", "429", "431", + "451", "500", "501", "502", @@ -3845,6 +4544,10 @@ "510", "511" ] + }, + "statusCodeValue": { + "type": "integer", + "format": "int32" } } }, @@ -3869,48 +4572,6 @@ } } }, - "EvidenceQueries": { - "type": "object", - "properties": { - "evidenceTypes": { - "type": "string" - }, - "highestLevelOnly": { - "type": "boolean" - }, - "levels": { - "type": "array", - "items": { - "type": "string", - "enum": [ - "LEVEL_1", - "LEVEL_2", - "LEVEL_3A", - "LEVEL_3B", - "LEVEL_4", - "LEVEL_R1", - "LEVEL_R2", - "LEVEL_Px1", - "LEVEL_Px2", - "LEVEL_Px3", - "LEVEL_Dx1", - "LEVEL_Dx2", - "LEVEL_Dx3", - "LEVEL_Fda1", - "LEVEL_Fda2", - "LEVEL_Fda3", - "NO" - ] - } - }, - "queries": { - "type": "array", - "items": { - "$ref": "#/definitions/Query" - } - } - } - }, "VariantSearchQuery": { "type": "object", "properties": { @@ -3964,56 +4625,16 @@ } } }, - "AnnotateCopyNumberAlterationQuery": { + "ValueCodeableConcept": { "type": "object", "properties": { - "copyNameAlterationType": { - "type": "string", - "enum": [ - "AMPLIFICATION", - "DELETION", - "GAIN", - "LOSS" - ] - }, - "evidenceTypes": { + "coding": { "type": "array", "items": { - "type": "string", - "enum": [ - "GENE_SUMMARY", - "MUTATION_SUMMARY", - "TUMOR_TYPE_SUMMARY", - "GENE_TUMOR_TYPE_SUMMARY", - "PROGNOSTIC_SUMMARY", - "DIAGNOSTIC_SUMMARY", - "GENE_BACKGROUND", - "ONCOGENIC", - "MUTATION_EFFECT", - "VUS", - "PROGNOSTIC_IMPLICATION", - "DIAGNOSTIC_IMPLICATION", - "STANDARD_THERAPEUTIC_IMPLICATIONS_FOR_DRUG_SENSITIVITY", - "STANDARD_THERAPEUTIC_IMPLICATIONS_FOR_DRUG_RESISTANCE", - "INVESTIGATIONAL_THERAPEUTIC_IMPLICATIONS_DRUG_SENSITIVITY", - "INVESTIGATIONAL_THERAPEUTIC_IMPLICATIONS_DRUG_RESISTANCE" - ] + "$ref": "#/definitions/Coding" } }, - "gene": { - "$ref": "#/definitions/QueryGene" - }, - "id": { - "type": "string" - }, - "referenceGenome": { - "type": "string", - "enum": [ - "GRCh37", - "GRCh38" - ] - }, - "tumorType": { + "text": { "type": "string" } } diff --git a/src/main/webapp/app/shared/api/generated/OncoKbAPI.ts b/src/main/webapp/app/shared/api/generated/OncoKbAPI.ts index e30269b6b..f8763aef8 100644 --- a/src/main/webapp/app/shared/api/generated/OncoKbAPI.ts +++ b/src/main/webapp/app/shared/api/generated/OncoKbAPI.ts @@ -45,56 +45,78 @@ export type Query = { 'tumorType': string }; -export type Article = { - 'abstract': string +export type SemVer = { + 'major': number - 'authors': string + 'minor': number - 'elocationId': string + 'patch': number - 'issue': string + 'stable': boolean - 'journal': string + 'suffixTokens': Array < string > - 'link': string + 'version': string - 'pages': string +}; +export type Implication = { + 'abstracts': Array < ArticleAbstract > - 'pmid': string + 'alterations': Array < string > - 'pubDate': string + 'description': string - 'reference': string + 'levelOfEvidence': "LEVEL_1" | "LEVEL_2" | "LEVEL_3A" | "LEVEL_3B" | "LEVEL_4" | "LEVEL_R1" | "LEVEL_R2" | "LEVEL_Px1" | "LEVEL_Px2" | "LEVEL_Px3" | "LEVEL_Dx1" | "LEVEL_Dx2" | "LEVEL_Dx3" | "LEVEL_Fda1" | "LEVEL_Fda2" | "LEVEL_Fda3" | "NO" - 'title': string + 'pmids': Array < string > - 'volume': string + 'tumorType': TumorType }; -export type Alteration = { - 'alteration': string +export type MutationsQuery = { + 'cDnaChange': Array < {} > - 'consequence': VariantConsequence + 'genomicChange': Array < AnnotateMutationByGenomicChangeQuery > - 'gene': Gene + 'hgvsg': Array < AnnotateMutationByHGVSgQuery > - 'name': string + 'proteinChange': Array < AnnotateMutationByProteinChangeQuery > - 'proteinEnd': number +}; +export type HasMember = { + 'display': string - 'proteinStart': number + 'reference': string - 'refResidues': string +}; +export type TumorType = { + 'children': {} - 'referenceGenomes': Array < "GRCh37" | "GRCh38" > + 'code': string - 'variantResidues': string + 'color': string + + 'id': number + + 'level': number + + 'mainType': MainType + + 'name': string + + 'parent': string + + 'tissue': string + + 'tumorForm': "SOLID" | "LIQUID" | "MIXED" }; -export type AnnotatedVariant = { +export type Gene = { 'entrezGeneId': number - 'gene': string + 'geneAliases': Array < string > + + 'genesets': Array < Geneset > 'grch37Isoform': string @@ -104,13 +126,149 @@ export type AnnotatedVariant = { 'grch38RefSeq': string - 'mutationEffect': string + 'hugoSymbol': string - 'mutationEffectAbstracts': string + 'oncogene': boolean - 'mutationEffectPmids': string + 'tsg': boolean - 'oncogenicity': string +}; +export type Coding = { + 'code': string + + 'display': string + + 'system': string + +}; +export type Version = { + 'date': string + + 'version': string + +}; +export type Search = { + 'mode': string + +}; +export type TreatmentDrugId = { + 'drug': Drug + +}; +export type GeneEvidence = { + 'articles': Array < Article > + + 'desc': string + + 'evidenceId': number + + 'evidenceType': "GENE_SUMMARY" | "MUTATION_SUMMARY" | "TUMOR_TYPE_SUMMARY" | "GENE_TUMOR_TYPE_SUMMARY" | "PROGNOSTIC_SUMMARY" | "DIAGNOSTIC_SUMMARY" | "GENE_BACKGROUND" | "ONCOGENIC" | "MUTATION_EFFECT" | "VUS" | "PROGNOSTIC_IMPLICATION" | "DIAGNOSTIC_IMPLICATION" | "STANDARD_THERAPEUTIC_IMPLICATIONS_FOR_DRUG_SENSITIVITY" | "STANDARD_THERAPEUTIC_IMPLICATIONS_FOR_DRUG_RESISTANCE" | "INVESTIGATIONAL_THERAPEUTIC_IMPLICATIONS_DRUG_SENSITIVITY" | "INVESTIGATIONAL_THERAPEUTIC_IMPLICATIONS_DRUG_RESISTANCE" + + 'gene': Gene + + 'id': string + + 'lastEdit': string + + 'shortDesc': string + + 'status': string + +}; +export type AnnotateStructuralVariantQuery = { + 'evidenceTypes': Array < "GENE_SUMMARY" | "MUTATION_SUMMARY" | "TUMOR_TYPE_SUMMARY" | "GENE_TUMOR_TYPE_SUMMARY" | "PROGNOSTIC_SUMMARY" | "DIAGNOSTIC_SUMMARY" | "GENE_BACKGROUND" | "ONCOGENIC" | "MUTATION_EFFECT" | "VUS" | "PROGNOSTIC_IMPLICATION" | "DIAGNOSTIC_IMPLICATION" | "STANDARD_THERAPEUTIC_IMPLICATIONS_FOR_DRUG_SENSITIVITY" | "STANDARD_THERAPEUTIC_IMPLICATIONS_FOR_DRUG_RESISTANCE" | "INVESTIGATIONAL_THERAPEUTIC_IMPLICATIONS_DRUG_SENSITIVITY" | "INVESTIGATIONAL_THERAPEUTIC_IMPLICATIONS_DRUG_RESISTANCE" > + + 'functionalFusion': boolean + + 'geneA': QueryGene + + 'geneB': QueryGene + + 'id': string + + 'referenceGenome': "GRCh37" | "GRCh38" + + 'structuralVariantType': "DELETION" | "TRANSLOCATION" | "DUPLICATION" | "INSERTION" | "INVERSION" | "FUSION" | "UNKNOWN" + + 'tumorType': string + +}; +export type IndicatorQueryResp = { + 'alleleExist': boolean + + 'dataVersion': string + + 'diagnosticImplications': Array < Implication > + + 'diagnosticSummary': string + + 'geneExist': boolean + + 'geneSummary': string + + 'highestDiagnosticImplicationLevel': "LEVEL_1" | "LEVEL_2" | "LEVEL_3A" | "LEVEL_3B" | "LEVEL_4" | "LEVEL_R1" | "LEVEL_R2" | "LEVEL_Px1" | "LEVEL_Px2" | "LEVEL_Px3" | "LEVEL_Dx1" | "LEVEL_Dx2" | "LEVEL_Dx3" | "LEVEL_Fda1" | "LEVEL_Fda2" | "LEVEL_Fda3" | "NO" + + 'highestFdaLevel': "LEVEL_1" | "LEVEL_2" | "LEVEL_3A" | "LEVEL_3B" | "LEVEL_4" | "LEVEL_R1" | "LEVEL_R2" | "LEVEL_Px1" | "LEVEL_Px2" | "LEVEL_Px3" | "LEVEL_Dx1" | "LEVEL_Dx2" | "LEVEL_Dx3" | "LEVEL_Fda1" | "LEVEL_Fda2" | "LEVEL_Fda3" | "NO" + + 'highestPrognosticImplicationLevel': "LEVEL_1" | "LEVEL_2" | "LEVEL_3A" | "LEVEL_3B" | "LEVEL_4" | "LEVEL_R1" | "LEVEL_R2" | "LEVEL_Px1" | "LEVEL_Px2" | "LEVEL_Px3" | "LEVEL_Dx1" | "LEVEL_Dx2" | "LEVEL_Dx3" | "LEVEL_Fda1" | "LEVEL_Fda2" | "LEVEL_Fda3" | "NO" + + 'highestResistanceLevel': "LEVEL_1" | "LEVEL_2" | "LEVEL_3A" | "LEVEL_3B" | "LEVEL_4" | "LEVEL_R1" | "LEVEL_R2" | "LEVEL_Px1" | "LEVEL_Px2" | "LEVEL_Px3" | "LEVEL_Dx1" | "LEVEL_Dx2" | "LEVEL_Dx3" | "LEVEL_Fda1" | "LEVEL_Fda2" | "LEVEL_Fda3" | "NO" + + 'highestSensitiveLevel': "LEVEL_1" | "LEVEL_2" | "LEVEL_3A" | "LEVEL_3B" | "LEVEL_4" | "LEVEL_R1" | "LEVEL_R2" | "LEVEL_Px1" | "LEVEL_Px2" | "LEVEL_Px3" | "LEVEL_Dx1" | "LEVEL_Dx2" | "LEVEL_Dx3" | "LEVEL_Fda1" | "LEVEL_Fda2" | "LEVEL_Fda3" | "NO" + + 'hotspot': boolean + + 'lastUpdate': string + + 'mutationEffect': MutationEffectResp + + 'oncogenic': string + + 'otherSignificantResistanceLevels': Array < "LEVEL_1" | "LEVEL_2" | "LEVEL_3A" | "LEVEL_3B" | "LEVEL_4" | "LEVEL_R1" | "LEVEL_R2" | "LEVEL_Px1" | "LEVEL_Px2" | "LEVEL_Px3" | "LEVEL_Dx1" | "LEVEL_Dx2" | "LEVEL_Dx3" | "LEVEL_Fda1" | "LEVEL_Fda2" | "LEVEL_Fda3" | "NO" > + + 'otherSignificantSensitiveLevels': Array < "LEVEL_1" | "LEVEL_2" | "LEVEL_3A" | "LEVEL_3B" | "LEVEL_4" | "LEVEL_R1" | "LEVEL_R2" | "LEVEL_Px1" | "LEVEL_Px2" | "LEVEL_Px3" | "LEVEL_Dx1" | "LEVEL_Dx2" | "LEVEL_Dx3" | "LEVEL_Fda1" | "LEVEL_Fda2" | "LEVEL_Fda3" | "NO" > + + 'prognosticImplications': Array < Implication > + + 'prognosticSummary': string + + 'query': Query + + 'treatments': Array < IndicatorQueryTreatment > + + 'tumorTypeSummary': string + + 'variantExist': boolean + + 'variantSummary': string + + 'vus': boolean + +}; +export type ActionableGene = { + 'abstracts': string + + 'cancerType': string + + 'description': string + + 'drugs': string + + 'entrezGeneId': number + + 'gene': string + + 'grch37Isoform': string + + 'grch37RefSeq': string + + 'grch38Isoform': string + + 'grch38RefSeq': string + + 'level': string + + 'pmids': string 'proteinChange': string @@ -119,62 +277,212 @@ export type AnnotatedVariant = { 'variant': string }; -export type SemVer = { - 'major': number +export type InfoLevel = { + 'colorHex': string - 'minor': number + 'description': string - 'patch': number + 'htmlDescription': string - 'stable': boolean + 'levelOfEvidence': "LEVEL_1" | "LEVEL_2" | "LEVEL_3A" | "LEVEL_3B" | "LEVEL_4" | "LEVEL_R1" | "LEVEL_R2" | "LEVEL_Px1" | "LEVEL_Px2" | "LEVEL_Px3" | "LEVEL_Dx1" | "LEVEL_Dx2" | "LEVEL_Dx3" | "LEVEL_Fda1" | "LEVEL_Fda2" | "LEVEL_Fda3" | "NO" - 'suffixTokens': Array < string > +}; +export type Trial = { + 'arms': Array < Arms > - 'version': string + 'briefTitle': string + + 'currentTrialStatus': string + + 'isUSTrial': boolean + + 'nctId': string + + 'principalInvestigator': string }; -export type Implication = { - 'abstracts': Array < ArticleAbstract > +export type Resource = { + 'basedOn': Array < BasedOn > - 'alterations': Array < string > + 'category': Array < Category > - 'description': string + 'code': Code - 'levelOfEvidence': "LEVEL_1" | "LEVEL_2" | "LEVEL_3A" | "LEVEL_3B" | "LEVEL_4" | "LEVEL_R1" | "LEVEL_R2" | "LEVEL_Px1" | "LEVEL_Px2" | "LEVEL_Px3" | "LEVEL_Dx1" | "LEVEL_Dx2" | "LEVEL_Dx3" | "LEVEL_Fda1" | "LEVEL_Fda2" | "LEVEL_Fda3" | "NO" + 'component': Array < Component > - 'pmids': Array < string > + 'derivedFrom': Array < DerivedFrom > - 'tumorType': TumorType + 'effectiveDateTime': string + + 'extension': Array < Extension > + + 'hasMember': Array < HasMember > + + 'id': string + + 'issued': string + + 'resourceType': string + + 'status': string + + 'subject': Subject + + 'valueCodeableConcept': ValueCodeableConcept }; -export type TumorType = { - 'children': {} +export type Arms = { + 'armDescription': string - 'code': string + 'drugs': Array < Drug > - 'color': string +}; +export type OncoKBInfo = { + 'apiVersion': SemVer - 'id': number + 'appVersion': SemVer - 'level': number + 'dataVersion': Version - 'mainType': MainType + 'levels': Array < InfoLevel > + + 'ncitVersion': string + + 'oncoTreeVersion': string + + 'publicInstance': boolean + +}; +export type VariantConsequence = { + 'description': string + + 'isGenerallyTruncating': boolean + + 'term': string + +}; +export type Code = { + 'coding': Array < Coding > + + 'text': string + +}; +export type ValueRange = { + 'high': High + + 'low': Low + +}; +export type EvidenceQueries = { + 'evidenceTypes': string + + 'highestLevelOnly': boolean + + 'levels': Array < "LEVEL_1" | "LEVEL_2" | "LEVEL_3A" | "LEVEL_3B" | "LEVEL_4" | "LEVEL_R1" | "LEVEL_R2" | "LEVEL_Px1" | "LEVEL_Px2" | "LEVEL_Px3" | "LEVEL_Dx1" | "LEVEL_Dx2" | "LEVEL_Dx3" | "LEVEL_Fda1" | "LEVEL_Fda2" | "LEVEL_Fda3" | "NO" > + + 'queries': Array < Query > + +}; +export type AnnotateCopyNumberAlterationQuery = { + 'copyNameAlterationType': "AMPLIFICATION" | "DELETION" | "GAIN" | "LOSS" + + 'evidenceTypes': Array < "GENE_SUMMARY" | "MUTATION_SUMMARY" | "TUMOR_TYPE_SUMMARY" | "GENE_TUMOR_TYPE_SUMMARY" | "PROGNOSTIC_SUMMARY" | "DIAGNOSTIC_SUMMARY" | "GENE_BACKGROUND" | "ONCOGENIC" | "MUTATION_EFFECT" | "VUS" | "PROGNOSTIC_IMPLICATION" | "DIAGNOSTIC_IMPLICATION" | "STANDARD_THERAPEUTIC_IMPLICATIONS_FOR_DRUG_SENSITIVITY" | "STANDARD_THERAPEUTIC_IMPLICATIONS_FOR_DRUG_RESISTANCE" | "INVESTIGATIONAL_THERAPEUTIC_IMPLICATIONS_DRUG_SENSITIVITY" | "INVESTIGATIONAL_THERAPEUTIC_IMPLICATIONS_DRUG_RESISTANCE" > + + 'gene': QueryGene + + 'id': string + + 'referenceGenome': "GRCh37" | "GRCh38" + + 'tumorType': string + +}; +export type Low = { + 'value': number + +}; +export type BasedOn = { + 'reference': string + +}; +export type Link = { + 'relation': string + + 'url': string + +}; +export type Category = { + 'coding': Array < Coding > + + 'text': string + +}; +export type Article = { + 'abstract': string + + 'authors': string + + 'elocationId': string + + 'issue': string + + 'journal': string + + 'link': string + + 'pages': string + + 'pmid': string + + 'pubDate': string + + 'reference': string + + 'title': string + + 'volume': string + +}; +export type Alteration = { + 'alteration': string + + 'consequence': VariantConsequence + + 'gene': Gene 'name': string - 'parent': string + 'proteinEnd': number - 'tissue': string + 'proteinStart': number - 'tumorForm': "SOLID" | "LIQUID" | "MIXED" + 'refResidues': string + + 'referenceGenomes': Array < "GRCh37" | "GRCh38" > + + 'variantResidues': string }; -export type Gene = { - 'entrezGeneId': number +export type GenomicData = { + 'entry': Array < Entry > - 'geneAliases': Array < string > + 'link': Array < Link > - 'genesets': Array < Geneset > + 'resourceType': string + + 'samples': Array < AnnotateSampleQuery > + + 'total': number + + 'type': string + +}; +export type AnnotatedVariant = { + 'description': string + + 'entrezGeneId': number + + 'gene': string 'grch37Isoform': string @@ -184,41 +492,43 @@ export type Gene = { 'grch38RefSeq': string - 'hugoSymbol': string + 'mutationEffect': string - 'oncogene': boolean + 'mutationEffectAbstracts': string - 'tsg': boolean + 'mutationEffectPmids': string -}; -export type Version = { - 'date': string + 'oncogenicity': string - 'version': string + 'proteinChange': string -}; -export type TreatmentDrugId = { - 'drug': Drug + 'referenceGenome': string + + 'variant': string }; -export type GeneEvidence = { - 'articles': Array < Article > +export type Entry = { + 'fullUrl': string - 'desc': string + 'link': Array < Link > - 'evidenceId': number + 'resource': Resource - 'evidenceType': "GENE_SUMMARY" | "MUTATION_SUMMARY" | "TUMOR_TYPE_SUMMARY" | "GENE_TUMOR_TYPE_SUMMARY" | "PROGNOSTIC_SUMMARY" | "DIAGNOSTIC_SUMMARY" | "GENE_BACKGROUND" | "ONCOGENIC" | "MUTATION_EFFECT" | "VUS" | "PROGNOSTIC_IMPLICATION" | "DIAGNOSTIC_IMPLICATION" | "STANDARD_THERAPEUTIC_IMPLICATIONS_FOR_DRUG_SENSITIVITY" | "STANDARD_THERAPEUTIC_IMPLICATIONS_FOR_DRUG_RESISTANCE" | "INVESTIGATIONAL_THERAPEUTIC_IMPLICATIONS_DRUG_SENSITIVITY" | "INVESTIGATIONAL_THERAPEUTIC_IMPLICATIONS_DRUG_RESISTANCE" + 'search': Search - 'gene': Gene +}; +export type AnnotateSampleQuery = { + 'copyNumberAlterations': Array < AnnotateCopyNumberAlterationQuery > - 'id': string + 'mutations': MutationsQuery - 'lastEdit': string + 'structuralVariants': Array < AnnotateStructuralVariantQuery > - 'shortDesc': string +}; +export type AnnotationSearchResult = { + 'indicatorQueryResp': IndicatorQueryResp - 'status': string + 'queryType': "GENE" | "VARIANT" | "DRUG" | "CANCER_TYPE" }; export type Evidence = { @@ -261,104 +571,24 @@ export type Evidence = { 'uuid': string }; -export type AnnotateStructuralVariantQuery = { - 'evidenceTypes': Array < "GENE_SUMMARY" | "MUTATION_SUMMARY" | "TUMOR_TYPE_SUMMARY" | "GENE_TUMOR_TYPE_SUMMARY" | "PROGNOSTIC_SUMMARY" | "DIAGNOSTIC_SUMMARY" | "GENE_BACKGROUND" | "ONCOGENIC" | "MUTATION_EFFECT" | "VUS" | "PROGNOSTIC_IMPLICATION" | "DIAGNOSTIC_IMPLICATION" | "STANDARD_THERAPEUTIC_IMPLICATIONS_FOR_DRUG_SENSITIVITY" | "STANDARD_THERAPEUTIC_IMPLICATIONS_FOR_DRUG_RESISTANCE" | "INVESTIGATIONAL_THERAPEUTIC_IMPLICATIONS_DRUG_SENSITIVITY" | "INVESTIGATIONAL_THERAPEUTIC_IMPLICATIONS_DRUG_RESISTANCE" > - - 'functionalFusion': boolean - - 'geneA': QueryGene - - 'geneB': QueryGene - - 'id': string - - 'referenceGenome': "GRCh37" | "GRCh38" - - 'structuralVariantType': "DELETION" | "TRANSLOCATION" | "DUPLICATION" | "INSERTION" | "INVERSION" | "FUSION" | "UNKNOWN" - - 'tumorType': string - -}; -export type IndicatorQueryResp = { - 'alleleExist': boolean - - 'dataVersion': string - - 'diagnosticImplications': Array < Implication > - - 'diagnosticSummary': string - - 'geneExist': boolean - - 'geneSummary': string - - 'highestDiagnosticImplicationLevel': "LEVEL_1" | "LEVEL_2" | "LEVEL_3A" | "LEVEL_3B" | "LEVEL_4" | "LEVEL_R1" | "LEVEL_R2" | "LEVEL_Px1" | "LEVEL_Px2" | "LEVEL_Px3" | "LEVEL_Dx1" | "LEVEL_Dx2" | "LEVEL_Dx3" | "LEVEL_Fda1" | "LEVEL_Fda2" | "LEVEL_Fda3" | "NO" - - 'highestFdaLevel': "LEVEL_1" | "LEVEL_2" | "LEVEL_3A" | "LEVEL_3B" | "LEVEL_4" | "LEVEL_R1" | "LEVEL_R2" | "LEVEL_Px1" | "LEVEL_Px2" | "LEVEL_Px3" | "LEVEL_Dx1" | "LEVEL_Dx2" | "LEVEL_Dx3" | "LEVEL_Fda1" | "LEVEL_Fda2" | "LEVEL_Fda3" | "NO" - - 'highestPrognosticImplicationLevel': "LEVEL_1" | "LEVEL_2" | "LEVEL_3A" | "LEVEL_3B" | "LEVEL_4" | "LEVEL_R1" | "LEVEL_R2" | "LEVEL_Px1" | "LEVEL_Px2" | "LEVEL_Px3" | "LEVEL_Dx1" | "LEVEL_Dx2" | "LEVEL_Dx3" | "LEVEL_Fda1" | "LEVEL_Fda2" | "LEVEL_Fda3" | "NO" - - 'highestResistanceLevel': "LEVEL_1" | "LEVEL_2" | "LEVEL_3A" | "LEVEL_3B" | "LEVEL_4" | "LEVEL_R1" | "LEVEL_R2" | "LEVEL_Px1" | "LEVEL_Px2" | "LEVEL_Px3" | "LEVEL_Dx1" | "LEVEL_Dx2" | "LEVEL_Dx3" | "LEVEL_Fda1" | "LEVEL_Fda2" | "LEVEL_Fda3" | "NO" - - 'highestSensitiveLevel': "LEVEL_1" | "LEVEL_2" | "LEVEL_3A" | "LEVEL_3B" | "LEVEL_4" | "LEVEL_R1" | "LEVEL_R2" | "LEVEL_Px1" | "LEVEL_Px2" | "LEVEL_Px3" | "LEVEL_Dx1" | "LEVEL_Dx2" | "LEVEL_Dx3" | "LEVEL_Fda1" | "LEVEL_Fda2" | "LEVEL_Fda3" | "NO" - - 'hotspot': boolean - - 'lastUpdate': string - - 'mutationEffect': MutationEffectResp - - 'oncogenic': string - - 'otherSignificantResistanceLevels': Array < "LEVEL_1" | "LEVEL_2" | "LEVEL_3A" | "LEVEL_3B" | "LEVEL_4" | "LEVEL_R1" | "LEVEL_R2" | "LEVEL_Px1" | "LEVEL_Px2" | "LEVEL_Px3" | "LEVEL_Dx1" | "LEVEL_Dx2" | "LEVEL_Dx3" | "LEVEL_Fda1" | "LEVEL_Fda2" | "LEVEL_Fda3" | "NO" > - - 'otherSignificantSensitiveLevels': Array < "LEVEL_1" | "LEVEL_2" | "LEVEL_3A" | "LEVEL_3B" | "LEVEL_4" | "LEVEL_R1" | "LEVEL_R2" | "LEVEL_Px1" | "LEVEL_Px2" | "LEVEL_Px3" | "LEVEL_Dx1" | "LEVEL_Dx2" | "LEVEL_Dx3" | "LEVEL_Fda1" | "LEVEL_Fda2" | "LEVEL_Fda3" | "NO" > - - 'prognosticImplications': Array < Implication > - - 'prognosticSummary': string - - 'query': Query - - 'treatments': Array < IndicatorQueryTreatment > - - 'tumorTypeSummary': string - - 'variantExist': boolean - - 'variantSummary': string - - 'vus': boolean - -}; -export type ActionableGene = { - 'abstracts': string - - 'cancerType': string - - 'drugs': string - - 'entrezGeneId': number +export type VariantOfUnknownSignificance = { + 'entrezGeneId': number 'gene': string - 'grch37Isoform': string - - 'grch37RefSeq': string - - 'grch38Isoform': string - - 'grch38RefSeq': string + 'variant': string - 'level': string +}; +export type Component = { + 'code': Code - 'pmids': string + 'extension': Array < Extension > - 'proteinChange': string + 'valueCodeableConcept': ValueCodeableConcept - 'referenceGenome': string + 'valueRange': ValueRange - 'variant': string + 'valueString': string }; export type ArticleAbstract = { @@ -366,22 +596,16 @@ export type ArticleAbstract = { 'link': string -}; -export type InfoLevel = { - 'colorHex': string - - 'description': string - - 'htmlDescription': string - - 'levelOfEvidence': "LEVEL_1" | "LEVEL_2" | "LEVEL_3A" | "LEVEL_3B" | "LEVEL_4" | "LEVEL_R1" | "LEVEL_R2" | "LEVEL_Px1" | "LEVEL_Px2" | "LEVEL_Px3" | "LEVEL_Dx1" | "LEVEL_Dx2" | "LEVEL_Dx3" | "LEVEL_Fda1" | "LEVEL_Fda2" | "LEVEL_Fda3" | "NO" - }; export type Drug = { 'drugName': string 'ncitCode': string +}; +export type High = { + 'value': number + }; export type CuratedGene = { 'background': string @@ -432,20 +656,6 @@ export type EvidenceQueryRes = { 'query': Query -}; -export type Trial = { - 'arms': Array < Arms > - - 'briefTitle': string - - 'currentTrialStatus': string - - 'isUSTrial': boolean - - 'nctId': string - - 'principalInvestigator': string - }; export type QueryGene = { 'entrezGeneId': number @@ -492,12 +702,6 @@ export type CancerGene = { 'vogelstein': boolean -}; -export type Arms = { - 'armDescription': string - - 'drugs': Array < Drug > - }; export type MainType = { 'id': number @@ -507,28 +711,12 @@ export type MainType = { 'tumorForm': "SOLID" | "LIQUID" | "MIXED" }; -export type OncoKBInfo = { - 'apiVersion': SemVer - - 'appVersion': SemVer - - 'dataVersion': Version - - 'levels': Array < InfoLevel > - - 'ncitVersion': string - - 'oncoTreeVersion': string - - 'publicInstance': boolean - -}; -export type VariantConsequence = { - 'description': string +export type SampleQueryResp = { + 'copyNumberAlterations': Array < IndicatorQueryResp > - 'isGenerallyTruncating': boolean + 'mutations': Array < IndicatorQueryResp > - 'term': string + 'structuralVariants': Array < IndicatorQueryResp > }; export type AnnotateMutationByProteinChangeQuery = { @@ -572,11 +760,37 @@ export type IndicatorQueryTreatment = { 'pmids': Array < string > +}; +export type DerivedFrom = { + 'display': string + + 'reference': string + +}; +export type Subject = { + 'display': string + + 'reference': string + +}; +export type Extension = { + 'extension': Array < Extension > + + 'url': string + + 'valueBoolean': boolean + + 'valueCodeableConcept': ValueCodeableConcept + + 'valueString': string + }; export type ResponseEntity = { 'body': {} - 'statusCode': "100" | "101" | "102" | "103" | "200" | "201" | "202" | "203" | "204" | "205" | "206" | "207" | "208" | "226" | "300" | "301" | "302" | "302" | "303" | "304" | "305" | "307" | "308" | "400" | "401" | "402" | "403" | "404" | "405" | "406" | "407" | "408" | "409" | "410" | "411" | "412" | "413" | "413" | "414" | "414" | "415" | "416" | "417" | "418" | "419" | "420" | "421" | "422" | "423" | "424" | "426" | "428" | "429" | "431" | "500" | "501" | "502" | "503" | "504" | "505" | "506" | "507" | "508" | "509" | "510" | "511" + 'statusCode': "100" | "101" | "102" | "103" | "200" | "201" | "202" | "203" | "204" | "205" | "206" | "207" | "208" | "226" | "300" | "301" | "302" | "302" | "303" | "304" | "305" | "307" | "308" | "400" | "401" | "402" | "403" | "404" | "405" | "406" | "407" | "408" | "409" | "410" | "411" | "412" | "413" | "413" | "414" | "414" | "415" | "416" | "417" | "418" | "419" | "420" | "421" | "422" | "423" | "424" | "426" | "428" | "429" | "431" | "451" | "500" | "501" | "502" | "503" | "504" | "505" | "506" | "507" | "508" | "509" | "510" | "511" + + 'statusCodeValue': number }; export type Treatment = { @@ -586,16 +800,6 @@ export type Treatment = { 'priority': number -}; -export type EvidenceQueries = { - 'evidenceTypes': string - - 'highestLevelOnly': boolean - - 'levels': Array < "LEVEL_1" | "LEVEL_2" | "LEVEL_3A" | "LEVEL_3B" | "LEVEL_4" | "LEVEL_R1" | "LEVEL_R2" | "LEVEL_Px1" | "LEVEL_Px2" | "LEVEL_Px3" | "LEVEL_Dx1" | "LEVEL_Dx2" | "LEVEL_Dx3" | "LEVEL_Fda1" | "LEVEL_Fda2" | "LEVEL_Fda3" | "NO" > - - 'queries': Array < Query > - }; export type VariantSearchQuery = { 'consequence': string @@ -625,18 +829,10 @@ export type MutationEffectResp = { 'knownEffect': string }; -export type AnnotateCopyNumberAlterationQuery = { - 'copyNameAlterationType': "AMPLIFICATION" | "DELETION" | "GAIN" | "LOSS" - - 'evidenceTypes': Array < "GENE_SUMMARY" | "MUTATION_SUMMARY" | "TUMOR_TYPE_SUMMARY" | "GENE_TUMOR_TYPE_SUMMARY" | "PROGNOSTIC_SUMMARY" | "DIAGNOSTIC_SUMMARY" | "GENE_BACKGROUND" | "ONCOGENIC" | "MUTATION_EFFECT" | "VUS" | "PROGNOSTIC_IMPLICATION" | "DIAGNOSTIC_IMPLICATION" | "STANDARD_THERAPEUTIC_IMPLICATIONS_FOR_DRUG_SENSITIVITY" | "STANDARD_THERAPEUTIC_IMPLICATIONS_FOR_DRUG_RESISTANCE" | "INVESTIGATIONAL_THERAPEUTIC_IMPLICATIONS_DRUG_SENSITIVITY" | "INVESTIGATIONAL_THERAPEUTIC_IMPLICATIONS_DRUG_RESISTANCE" > - - 'gene': QueryGene - - 'id': string - - 'referenceGenome': "GRCh37" | "GRCh38" +export type ValueCodeableConcept = { + 'coding': Array < Coding > - 'tumorType': string + 'text': string }; export type AnnotateMutationByHGVSgQuery = { @@ -871,7 +1067,84 @@ export default class OncoKbAPI { $queryParameters ? : any }): string { let queryParameters: any = {}; - let path = '/annotate/copyNumberAlterations'; + let path = '/annotate/copyNumberAlterations'; + + if (parameters.$queryParameters) { + Object.keys(parameters.$queryParameters).forEach(function(parameterName) { + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + let keys = Object.keys(queryParameters); + return this.domain + path + (keys.length > 0 ? '?' + (keys.map(key => key + '=' + encodeURIComponent(queryParameters[key])).join('&')) : ''); + }; + + /** + * Annotate copy number alterations. + * @method + * @name OncoKbAPI#annotateCopyNumberAlterationsPostUsingPOST + * @param {} body - List of queries. Please see swagger.json for request body format. + */ + annotateCopyNumberAlterationsPostUsingPOSTWithHttpInfo(parameters: { + 'body': Array < AnnotateCopyNumberAlterationQuery > , + $queryParameters ? : any, + $domain ? : string + }): Promise < request.Response > { + const domain = parameters.$domain ? parameters.$domain : this.domain; + const errorHandlers = this.errorHandlers; + const request = this.request; + let path = '/annotate/copyNumberAlterations'; + let body: any; + let queryParameters: any = {}; + let headers: any = {}; + let form: any = {}; + return new Promise(function(resolve, reject) { + headers['Accept'] = 'application/json'; + headers['Content-Type'] = 'application/json'; + + if (parameters['body'] !== undefined) { + body = parameters['body']; + } + + if (parameters['body'] === undefined) { + reject(new Error('Missing required parameter: body')); + return; + } + + if (parameters.$queryParameters) { + Object.keys(parameters.$queryParameters).forEach(function(parameterName) { + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + + request('POST', domain + path, body, headers, queryParameters, form, reject, resolve, errorHandlers); + + }); + }; + + /** + * Annotate copy number alterations. + * @method + * @name OncoKbAPI#annotateCopyNumberAlterationsPostUsingPOST + * @param {} body - List of queries. Please see swagger.json for request body format. + */ + annotateCopyNumberAlterationsPostUsingPOST(parameters: { + 'body': Array < AnnotateCopyNumberAlterationQuery > , + $queryParameters ? : any, + $domain ? : string + }): Promise < Array < IndicatorQueryResp > + > { + return this.annotateCopyNumberAlterationsPostUsingPOSTWithHttpInfo(parameters).then(function(response: request.Response) { + return response.body; + }); + }; + annotateEpicPostUsingPOSTURL(parameters: { + 'body': GenomicData, + $queryParameters ? : any + }): string { + let queryParameters: any = {}; + let path = '/annotate/epic'; if (parameters.$queryParameters) { Object.keys(parameters.$queryParameters).forEach(function(parameterName) { @@ -884,20 +1157,20 @@ export default class OncoKbAPI { }; /** - * Annotate copy number alterations. + * Annotate epic genomic data. * @method - * @name OncoKbAPI#annotateCopyNumberAlterationsPostUsingPOST - * @param {} body - List of queries. Please see swagger.json for request body format. + * @name OncoKbAPI#annotateEpicPostUsingPOST + * @param {} body - Epic genomic data in FHIR format */ - annotateCopyNumberAlterationsPostUsingPOSTWithHttpInfo(parameters: { - 'body': Array < AnnotateCopyNumberAlterationQuery > , + annotateEpicPostUsingPOSTWithHttpInfo(parameters: { + 'body': GenomicData, $queryParameters ? : any, $domain ? : string }): Promise < request.Response > { const domain = parameters.$domain ? parameters.$domain : this.domain; const errorHandlers = this.errorHandlers; const request = this.request; - let path = '/annotate/copyNumberAlterations'; + let path = '/annotate/epic'; let body: any; let queryParameters: any = {}; let headers: any = {}; @@ -928,18 +1201,18 @@ export default class OncoKbAPI { }; /** - * Annotate copy number alterations. + * Annotate epic genomic data. * @method - * @name OncoKbAPI#annotateCopyNumberAlterationsPostUsingPOST - * @param {} body - List of queries. Please see swagger.json for request body format. + * @name OncoKbAPI#annotateEpicPostUsingPOST + * @param {} body - Epic genomic data in FHIR format */ - annotateCopyNumberAlterationsPostUsingPOST(parameters: { - 'body': Array < AnnotateCopyNumberAlterationQuery > , + annotateEpicPostUsingPOST(parameters: { + 'body': GenomicData, $queryParameters ? : any, $domain ? : string - }): Promise < Array < IndicatorQueryResp > + }): Promise < Array < SampleQueryResp > > { - return this.annotateCopyNumberAlterationsPostUsingPOSTWithHttpInfo(parameters).then(function(response: request.Response) { + return this.annotateEpicPostUsingPOSTWithHttpInfo(parameters).then(function(response: request.Response) { return response.body; }); }; @@ -1588,6 +1861,82 @@ export default class OncoKbAPI { return response.body; }); }; + annotateSamplePostUsingPOSTURL(parameters: { + 'body': AnnotateSampleQuery, + $queryParameters ? : any + }): string { + let queryParameters: any = {}; + let path = '/annotate/sample'; + + if (parameters.$queryParameters) { + Object.keys(parameters.$queryParameters).forEach(function(parameterName) { + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + let keys = Object.keys(queryParameters); + return this.domain + path + (keys.length > 0 ? '?' + (keys.map(key => key + '=' + encodeURIComponent(queryParameters[key])).join('&')) : ''); + }; + + /** + * Annotate a sample. + * @method + * @name OncoKbAPI#annotateSamplePostUsingPOST + * @param {} body - Lists of queries for each alteration type. Please see swagger.json for request body format. + */ + annotateSamplePostUsingPOSTWithHttpInfo(parameters: { + 'body': AnnotateSampleQuery, + $queryParameters ? : any, + $domain ? : string + }): Promise < request.Response > { + const domain = parameters.$domain ? parameters.$domain : this.domain; + const errorHandlers = this.errorHandlers; + const request = this.request; + let path = '/annotate/sample'; + let body: any; + let queryParameters: any = {}; + let headers: any = {}; + let form: any = {}; + return new Promise(function(resolve, reject) { + headers['Accept'] = 'application/json'; + headers['Content-Type'] = 'application/json'; + + if (parameters['body'] !== undefined) { + body = parameters['body']; + } + + if (parameters['body'] === undefined) { + reject(new Error('Missing required parameter: body')); + return; + } + + if (parameters.$queryParameters) { + Object.keys(parameters.$queryParameters).forEach(function(parameterName) { + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + + request('POST', domain + path, body, headers, queryParameters, form, reject, resolve, errorHandlers); + + }); + }; + + /** + * Annotate a sample. + * @method + * @name OncoKbAPI#annotateSamplePostUsingPOST + * @param {} body - Lists of queries for each alteration type. Please see swagger.json for request body format. + */ + annotateSamplePostUsingPOST(parameters: { + 'body': AnnotateSampleQuery, + $queryParameters ? : any, + $domain ? : string + }): Promise < SampleQueryResp > { + return this.annotateSamplePostUsingPOSTWithHttpInfo(parameters).then(function(response: request.Response) { + return response.body; + }); + }; annotateStructuralVariantsGetUsingGETURL(parameters: { 'hugoSymbolA' ? : string, 'entrezGeneIdA' ? : number, @@ -1853,6 +2202,99 @@ export default class OncoKbAPI { return response.body; }); }; + annotationSearchGetUsingGETURL(parameters: { + 'query': string, + 'limit' ? : number, + $queryParameters ? : any + }): string { + let queryParameters: any = {}; + let path = '/annotation/search'; + if (parameters['query'] !== undefined) { + queryParameters['query'] = parameters['query']; + } + + if (parameters['limit'] !== undefined) { + queryParameters['limit'] = parameters['limit']; + } + + if (parameters.$queryParameters) { + Object.keys(parameters.$queryParameters).forEach(function(parameterName) { + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + let keys = Object.keys(queryParameters); + return this.domain + path + (keys.length > 0 ? '?' + (keys.map(key => key + '=' + encodeURIComponent(queryParameters[key])).join('&')) : ''); + }; + + /** + * Get annotations based on search + * @method + * @name OncoKbAPI#annotationSearchGetUsingGET + * @param {string} query - The search query, it could be hugoSymbol, variant or cancer type. At least two characters. Maximum two keywords are supported, separated by space + * @param {integer} limit - The limit of returned result. + */ + annotationSearchGetUsingGETWithHttpInfo(parameters: { + 'query': string, + 'limit' ? : number, + $queryParameters ? : any, + $domain ? : string + }): Promise < request.Response > { + const domain = parameters.$domain ? parameters.$domain : this.domain; + const errorHandlers = this.errorHandlers; + const request = this.request; + let path = '/annotation/search'; + let body: any; + let queryParameters: any = {}; + let headers: any = {}; + let form: any = {}; + return new Promise(function(resolve, reject) { + headers['Accept'] = 'application/json'; + headers['Content-Type'] = 'application/json'; + + if (parameters['query'] !== undefined) { + queryParameters['query'] = parameters['query']; + } + + if (parameters['query'] === undefined) { + reject(new Error('Missing required parameter: query')); + return; + } + + if (parameters['limit'] !== undefined) { + queryParameters['limit'] = parameters['limit']; + } + + if (parameters.$queryParameters) { + Object.keys(parameters.$queryParameters).forEach(function(parameterName) { + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + + request('GET', domain + path, body, headers, queryParameters, form, reject, resolve, errorHandlers); + + }); + }; + + /** + * Get annotations based on search + * @method + * @name OncoKbAPI#annotationSearchGetUsingGET + * @param {string} query - The search query, it could be hugoSymbol, variant or cancer type. At least two characters. Maximum two keywords are supported, separated by space + * @param {integer} limit - The limit of returned result. + */ + annotationSearchGetUsingGET(parameters: { + 'query': string, + 'limit' ? : number, + $queryParameters ? : any, + $domain ? : string + }): Promise < Array < AnnotationSearchResult > + > { + return this.annotationSearchGetUsingGETWithHttpInfo(parameters).then(function(response: request.Response) { + return response.body; + }); + }; classificationVariantsGetUsingGETURL(parameters: { $queryParameters ? : any }): string { @@ -4537,6 +4979,131 @@ export default class OncoKbAPI { return response.body; }); }; + utilsAllVariantsOfUnknownSignificanceGetUsingGETURL(parameters: { + $queryParameters ? : any + }): string { + let queryParameters: any = {}; + let path = '/utils/allVariantsOfUnknownSignificance'; + + if (parameters.$queryParameters) { + Object.keys(parameters.$queryParameters).forEach(function(parameterName) { + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + let keys = Object.keys(queryParameters); + return this.domain + path + (keys.length > 0 ? '?' + (keys.map(key => key + '=' + encodeURIComponent(queryParameters[key])).join('&')) : ''); + }; + + /** + * Get All Variants of Unknown Significance. + * @method + * @name OncoKbAPI#utilsAllVariantsOfUnknownSignificanceGetUsingGET + */ + utilsAllVariantsOfUnknownSignificanceGetUsingGETWithHttpInfo(parameters: { + $queryParameters ? : any, + $domain ? : string + }): Promise < request.Response > { + const domain = parameters.$domain ? parameters.$domain : this.domain; + const errorHandlers = this.errorHandlers; + const request = this.request; + let path = '/utils/allVariantsOfUnknownSignificance'; + let body: any; + let queryParameters: any = {}; + let headers: any = {}; + let form: any = {}; + return new Promise(function(resolve, reject) { + headers['Accept'] = 'application/json'; + headers['Content-Type'] = 'application/json'; + + if (parameters.$queryParameters) { + Object.keys(parameters.$queryParameters).forEach(function(parameterName) { + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + + request('GET', domain + path, body, headers, queryParameters, form, reject, resolve, errorHandlers); + + }); + }; + + /** + * Get All Variants of Unknown Significance. + * @method + * @name OncoKbAPI#utilsAllVariantsOfUnknownSignificanceGetUsingGET + */ + utilsAllVariantsOfUnknownSignificanceGetUsingGET(parameters: { + $queryParameters ? : any, + $domain ? : string + }): Promise < Array < VariantOfUnknownSignificance > + > { + return this.utilsAllVariantsOfUnknownSignificanceGetUsingGETWithHttpInfo(parameters).then(function(response: request.Response) { + return response.body; + }); + }; + utilsAllVariantsOfUnknownSignificanceTxtGetUsingGETURL(parameters: { + $queryParameters ? : any + }): string { + let queryParameters: any = {}; + let path = '/utils/allVariantsOfUnknownSignificance.txt'; + + if (parameters.$queryParameters) { + Object.keys(parameters.$queryParameters).forEach(function(parameterName) { + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + let keys = Object.keys(queryParameters); + return this.domain + path + (keys.length > 0 ? '?' + (keys.map(key => key + '=' + encodeURIComponent(queryParameters[key])).join('&')) : ''); + }; + + /** + * Get All Variants of Unknown Significance in text file. + * @method + * @name OncoKbAPI#utilsAllVariantsOfUnknownSignificanceTxtGetUsingGET + */ + utilsAllVariantsOfUnknownSignificanceTxtGetUsingGETWithHttpInfo(parameters: { + $queryParameters ? : any, + $domain ? : string + }): Promise < request.Response > { + const domain = parameters.$domain ? parameters.$domain : this.domain; + const errorHandlers = this.errorHandlers; + const request = this.request; + let path = '/utils/allVariantsOfUnknownSignificance.txt'; + let body: any; + let queryParameters: any = {}; + let headers: any = {}; + let form: any = {}; + return new Promise(function(resolve, reject) { + headers['Accept'] = 'text/plain'; + headers['Content-Type'] = 'application/json'; + + if (parameters.$queryParameters) { + Object.keys(parameters.$queryParameters).forEach(function(parameterName) { + var parameter = parameters.$queryParameters[parameterName]; + queryParameters[parameterName] = parameter; + }); + } + + request('GET', domain + path, body, headers, queryParameters, form, reject, resolve, errorHandlers); + + }); + }; + + /** + * Get All Variants of Unknown Significance in text file. + * @method + * @name OncoKbAPI#utilsAllVariantsOfUnknownSignificanceTxtGetUsingGET + */ + utilsAllVariantsOfUnknownSignificanceTxtGetUsingGET(parameters: { + $queryParameters ? : any, + $domain ? : string + }): Promise < string > { + return this.utilsAllVariantsOfUnknownSignificanceTxtGetUsingGETWithHttpInfo(parameters).then(function(response: request.Response) { + return response.body; + }); + }; utilsCancerGeneListGetUsingGETURL(parameters: { 'version' ? : string, $queryParameters ? : any diff --git a/src/main/webapp/app/shared/api/generated/OncoKbPrivateAPI-docs.json b/src/main/webapp/app/shared/api/generated/OncoKbPrivateAPI-docs.json index f7f3c2f8c..4d27b97a9 100644 --- a/src/main/webapp/app/shared/api/generated/OncoKbPrivateAPI-docs.json +++ b/src/main/webapp/app/shared/api/generated/OncoKbPrivateAPI-docs.json @@ -2296,6 +2296,9 @@ "AnnotatedVariant": { "type": "object", "properties": { + "description": { + "type": "string" + }, "entrezGeneId": { "type": "integer", "format": "int32" @@ -3040,15 +3043,6 @@ }, "ncitCode": { "type": "string" - }, - "synonyms": { - "type": "array", - "items": { - "type": "string" - } - }, - "uuid": { - "type": "string" } } }, diff --git a/src/main/webapp/app/shared/api/generated/OncoKbPrivateAPI.ts b/src/main/webapp/app/shared/api/generated/OncoKbPrivateAPI.ts index 327e22870..078a56ba4 100644 --- a/src/main/webapp/app/shared/api/generated/OncoKbPrivateAPI.ts +++ b/src/main/webapp/app/shared/api/generated/OncoKbPrivateAPI.ts @@ -200,7 +200,9 @@ export type VariantAnnotation = { }; export type AnnotatedVariant = { - 'entrezGeneId': number + 'description': string + + 'entrezGeneId': number 'gene': string @@ -490,10 +492,6 @@ export type Drug = { 'ncitCode': string - 'synonyms': Array < string > - - 'uuid': string - }; export type RelevantCancerTypeQuery = { 'code': string From 6628992cca8fbea360c242ac15870e0154e80ff9 Mon Sep 17 00:00:00 2001 From: bprize15 Date: Thu, 5 Sep 2024 11:19:56 -0400 Subject: [PATCH 2/4] fix epic auth flow --- src/main/webapp/app/config/constants.tsx | 2 +- .../webapp/app/pages/epic/EpicAnnotate.tsx | 2 +- .../app/pages/epic/EpicAuthenticate.tsx | 2 +- src/main/webapp/app/routes/routes.tsx | 26 +- .../shared/api/generated/OncoKbAPI-docs.json | 1615 +++++++---------- .../app/shared/api/generated/OncoKbAPI.ts | 629 +++---- 6 files changed, 930 insertions(+), 1346 deletions(-) diff --git a/src/main/webapp/app/config/constants.tsx b/src/main/webapp/app/config/constants.tsx index a93b313ad..0248a0a54 100644 --- a/src/main/webapp/app/config/constants.tsx +++ b/src/main/webapp/app/config/constants.tsx @@ -591,7 +591,7 @@ export enum PAGE_ROUTE { ACCOUNT_PASSWORD_RESET_FINISH = '/account/reset/finish', ACCOUNT_ACTIVE_TRIAL_FINISH = '/account/active-trial/finish', EPIC_AUTHENTICATE = '/epic/authenticate', - EPIC_ANNOTATE = 'epic/annotate', + EPIC_ANNOTATE = '/epic/annotate', } export enum TABLE_COLUMN_KEY { diff --git a/src/main/webapp/app/pages/epic/EpicAnnotate.tsx b/src/main/webapp/app/pages/epic/EpicAnnotate.tsx index 0247be04d..142a0b7ac 100644 --- a/src/main/webapp/app/pages/epic/EpicAnnotate.tsx +++ b/src/main/webapp/app/pages/epic/EpicAnnotate.tsx @@ -31,7 +31,7 @@ const EpicAnnotate = ({ windowStore }: IEpicAnnotateProps) => { params.append('grant_type', 'authorization_code'); params.append( 'redirect_uri', - `${windowStore.baseUrl}/${PAGE_ROUTE.EPIC_ANNOTATE}` + `${windowStore.baseUrl}${PAGE_ROUTE.EPIC_ANNOTATE}` ); params.append('code', code); params.append('client_id', CLIENT_ID); diff --git a/src/main/webapp/app/pages/epic/EpicAuthenticate.tsx b/src/main/webapp/app/pages/epic/EpicAuthenticate.tsx index 6d57a2fed..b83bacaa8 100644 --- a/src/main/webapp/app/pages/epic/EpicAuthenticate.tsx +++ b/src/main/webapp/app/pages/epic/EpicAuthenticate.tsx @@ -36,7 +36,7 @@ const EpicAuthenticate = ({ windowStore }: IEpicAuthenticateProps) => { localStorage.setItem('tokenUrl', metadata.tokenUrl); - window.location.href = `${metadata.authUrl}?scope=launch&response_type=code&redirect_uri=${windowStore.baseUrl}/${PAGE_ROUTE.EPIC_ANNOTATE}&client_id=${CLIENT_ID}&launch=${launchCode}&state=98wrghuwuogerg97&aud=${iss}`; + window.location.href = `${metadata.authUrl}?scope=launch&response_type=code&redirect_uri=${windowStore.baseUrl}${PAGE_ROUTE.EPIC_ANNOTATE}&client_id=${CLIENT_ID}&launch=${launchCode}&state=98wrghuwuogerg97&aud=${iss}`; }; if (iss) { diff --git a/src/main/webapp/app/routes/routes.tsx b/src/main/webapp/app/routes/routes.tsx index 4086c78ed..73d9ecf18 100644 --- a/src/main/webapp/app/routes/routes.tsx +++ b/src/main/webapp/app/routes/routes.tsx @@ -268,6 +268,16 @@ const AppRouts = (props: { path={PAGE_ROUTE.FDA_NGS} component={LevelOfEvidencePage} /> + + - - diff --git a/src/main/webapp/app/shared/api/generated/OncoKbAPI-docs.json b/src/main/webapp/app/shared/api/generated/OncoKbAPI-docs.json index 0936db524..64fc44462 100644 --- a/src/main/webapp/app/shared/api/generated/OncoKbAPI-docs.json +++ b/src/main/webapp/app/shared/api/generated/OncoKbAPI-docs.json @@ -193,13 +193,13 @@ } }, "/annotate/epic": { - "post": { + "get": { "tags": [ "Annotations" ], - "summary": "annotateEpicPost", + "summary": "annotateEpicGet", "description": "Annotate epic genomic data.", - "operationId": "annotateEpicPostUsingPOST", + "operationId": "annotateEpicGetUsingGET", "consumes": [ "application/json" ], @@ -208,13 +208,25 @@ ], "parameters": [ { - "in": "body", - "name": "body", - "description": "Epic genomic data in FHIR format", + "name": "iss", + "in": "query", + "description": "iss", "required": true, - "schema": { - "$ref": "#/definitions/GenomicData" - } + "type": "string" + }, + { + "name": "accessToken", + "in": "query", + "description": "accessToken", + "required": true, + "type": "string" + }, + { + "name": "patientId", + "in": "query", + "description": "patientId", + "required": true, + "type": "string" } ], "responses": { @@ -2565,6 +2577,136 @@ } } }, + "Article": { + "type": "object", + "properties": { + "abstract": { + "type": "string" + }, + "authors": { + "type": "string" + }, + "elocationId": { + "type": "string" + }, + "issue": { + "type": "string" + }, + "journal": { + "type": "string" + }, + "link": { + "type": "string" + }, + "pages": { + "type": "string" + }, + "pmid": { + "type": "string" + }, + "pubDate": { + "type": "string" + }, + "reference": { + "type": "string" + }, + "title": { + "type": "string" + }, + "volume": { + "type": "string" + } + } + }, + "Alteration": { + "type": "object", + "properties": { + "alteration": { + "type": "string" + }, + "consequence": { + "$ref": "#/definitions/VariantConsequence" + }, + "gene": { + "$ref": "#/definitions/Gene" + }, + "name": { + "type": "string" + }, + "proteinEnd": { + "type": "integer", + "format": "int32" + }, + "proteinStart": { + "type": "integer", + "format": "int32" + }, + "refResidues": { + "type": "string" + }, + "referenceGenomes": { + "type": "array", + "items": { + "type": "string", + "enum": [ + "GRCh37", + "GRCh38" + ] + } + }, + "variantResidues": { + "type": "string" + } + } + }, + "AnnotatedVariant": { + "type": "object", + "properties": { + "description": { + "type": "string" + }, + "entrezGeneId": { + "type": "integer", + "format": "int32" + }, + "gene": { + "type": "string" + }, + "grch37Isoform": { + "type": "string" + }, + "grch37RefSeq": { + "type": "string" + }, + "grch38Isoform": { + "type": "string" + }, + "grch38RefSeq": { + "type": "string" + }, + "mutationEffect": { + "type": "string" + }, + "mutationEffectAbstracts": { + "type": "string" + }, + "mutationEffectPmids": { + "type": "string" + }, + "oncogenicity": { + "type": "string" + }, + "proteinChange": { + "type": "string" + }, + "referenceGenome": { + "type": "string" + }, + "variant": { + "type": "string" + } + } + }, "SemVer": { "type": "object", "properties": { @@ -2674,14 +2816,23 @@ } } }, - "HasMember": { + "AnnotateSampleQuery": { "type": "object", "properties": { - "display": { - "type": "string" + "copyNumberAlterations": { + "type": "array", + "items": { + "$ref": "#/definitions/AnnotateCopyNumberAlterationQuery" + } }, - "reference": { - "type": "string" + "mutations": { + "$ref": "#/definitions/MutationsQuery" + }, + "structuralVariants": { + "type": "array", + "items": { + "$ref": "#/definitions/AnnotateStructuralVariantQuery" + } } } }, @@ -2773,20 +2924,6 @@ } } }, - "Coding": { - "type": "object", - "properties": { - "code": { - "type": "string" - }, - "display": { - "type": "string" - }, - "system": { - "type": "string" - } - } - }, "Version": { "type": "object", "properties": { @@ -2798,14 +2935,6 @@ } } }, - "Search": { - "type": "object", - "properties": { - "mode": { - "type": "string" - } - } - }, "TreatmentDrugId": { "type": "object", "properties": { @@ -2873,116 +3002,78 @@ } } }, - "AnnotateStructuralVariantQuery": { + "AnnotationSearchResult": { "type": "object", "properties": { - "evidenceTypes": { - "type": "array", - "items": { - "type": "string", - "enum": [ - "GENE_SUMMARY", - "MUTATION_SUMMARY", - "TUMOR_TYPE_SUMMARY", - "GENE_TUMOR_TYPE_SUMMARY", - "PROGNOSTIC_SUMMARY", - "DIAGNOSTIC_SUMMARY", - "GENE_BACKGROUND", - "ONCOGENIC", - "MUTATION_EFFECT", - "VUS", - "PROGNOSTIC_IMPLICATION", - "DIAGNOSTIC_IMPLICATION", - "STANDARD_THERAPEUTIC_IMPLICATIONS_FOR_DRUG_SENSITIVITY", - "STANDARD_THERAPEUTIC_IMPLICATIONS_FOR_DRUG_RESISTANCE", - "INVESTIGATIONAL_THERAPEUTIC_IMPLICATIONS_DRUG_SENSITIVITY", - "INVESTIGATIONAL_THERAPEUTIC_IMPLICATIONS_DRUG_RESISTANCE" - ] - } - }, - "functionalFusion": { - "type": "boolean" - }, - "geneA": { - "$ref": "#/definitions/QueryGene" - }, - "geneB": { - "$ref": "#/definitions/QueryGene" - }, - "id": { - "type": "string" - }, - "referenceGenome": { - "type": "string", - "enum": [ - "GRCh37", - "GRCh38" - ] + "indicatorQueryResp": { + "$ref": "#/definitions/IndicatorQueryResp" }, - "structuralVariantType": { + "queryType": { "type": "string", "enum": [ - "DELETION", - "TRANSLOCATION", - "DUPLICATION", - "INSERTION", - "INVERSION", - "FUSION", - "UNKNOWN" + "GENE", + "VARIANT", + "DRUG", + "CANCER_TYPE" ] - }, - "tumorType": { - "type": "string" } } }, - "IndicatorQueryResp": { + "Evidence": { "type": "object", "properties": { - "alleleExist": { - "type": "boolean" - }, - "dataVersion": { + "additionalInfo": { "type": "string" }, - "diagnosticImplications": { + "alterations": { "type": "array", "items": { - "$ref": "#/definitions/Implication" + "$ref": "#/definitions/Alteration" } }, - "diagnosticSummary": { - "type": "string" + "articles": { + "type": "array", + "items": { + "$ref": "#/definitions/Article" + } }, - "geneExist": { - "type": "boolean" + "cancerTypes": { + "type": "array", + "items": { + "$ref": "#/definitions/TumorType" + } }, - "geneSummary": { + "description": { "type": "string" }, - "highestDiagnosticImplicationLevel": { + "evidenceType": { "type": "string", "enum": [ - "LEVEL_1", - "LEVEL_2", - "LEVEL_3A", - "LEVEL_3B", - "LEVEL_4", - "LEVEL_R1", - "LEVEL_R2", - "LEVEL_Px1", - "LEVEL_Px2", - "LEVEL_Px3", - "LEVEL_Dx1", - "LEVEL_Dx2", - "LEVEL_Dx3", - "LEVEL_Fda1", - "LEVEL_Fda2", - "LEVEL_Fda3", - "NO" + "GENE_SUMMARY", + "MUTATION_SUMMARY", + "TUMOR_TYPE_SUMMARY", + "GENE_TUMOR_TYPE_SUMMARY", + "PROGNOSTIC_SUMMARY", + "DIAGNOSTIC_SUMMARY", + "GENE_BACKGROUND", + "ONCOGENIC", + "MUTATION_EFFECT", + "VUS", + "PROGNOSTIC_IMPLICATION", + "DIAGNOSTIC_IMPLICATION", + "STANDARD_THERAPEUTIC_IMPLICATIONS_FOR_DRUG_SENSITIVITY", + "STANDARD_THERAPEUTIC_IMPLICATIONS_FOR_DRUG_RESISTANCE", + "INVESTIGATIONAL_THERAPEUTIC_IMPLICATIONS_DRUG_SENSITIVITY", + "INVESTIGATIONAL_THERAPEUTIC_IMPLICATIONS_DRUG_RESISTANCE" ] }, - "highestFdaLevel": { + "excludedCancerTypes": { + "type": "array", + "items": { + "$ref": "#/definitions/TumorType" + } + }, + "fdaLevel": { "type": "string", "enum": [ "LEVEL_1", @@ -3004,7 +3095,25 @@ "NO" ] }, - "highestPrognosticImplicationLevel": { + "gene": { + "$ref": "#/definitions/Gene" + }, + "id": { + "type": "integer", + "format": "int32" + }, + "knownEffect": { + "type": "string" + }, + "lastEdit": { + "type": "string", + "format": "date-time" + }, + "lastReview": { + "type": "string", + "format": "date-time" + }, + "levelOfEvidence": { "type": "string", "enum": [ "LEVEL_1", @@ -3026,7 +3135,7 @@ "NO" ] }, - "highestResistanceLevel": { + "liquidPropagationLevel": { "type": "string", "enum": [ "LEVEL_1", @@ -3048,7 +3157,13 @@ "NO" ] }, - "highestSensitiveLevel": { + "relevantCancerTypes": { + "type": "array", + "items": { + "$ref": "#/definitions/TumorType" + } + }, + "solidPropagationLevel": { "type": "string", "enum": [ "LEVEL_1", @@ -3070,115 +3185,83 @@ "NO" ] }, - "hotspot": { - "type": "boolean" - }, - "lastUpdate": { - "type": "string" - }, - "mutationEffect": { - "$ref": "#/definitions/MutationEffectResp" - }, - "oncogenic": { - "type": "string" - }, - "otherSignificantResistanceLevels": { + "treatments": { "type": "array", "items": { - "type": "string", - "enum": [ - "LEVEL_1", - "LEVEL_2", - "LEVEL_3A", - "LEVEL_3B", - "LEVEL_4", - "LEVEL_R1", - "LEVEL_R2", - "LEVEL_Px1", - "LEVEL_Px2", - "LEVEL_Px3", - "LEVEL_Dx1", - "LEVEL_Dx2", - "LEVEL_Dx3", - "LEVEL_Fda1", - "LEVEL_Fda2", - "LEVEL_Fda3", - "NO" - ] + "$ref": "#/definitions/Treatment" } }, - "otherSignificantSensitiveLevels": { + "uuid": { + "type": "string" + } + } + }, + "AnnotateStructuralVariantQuery": { + "type": "object", + "properties": { + "evidenceTypes": { "type": "array", "items": { "type": "string", "enum": [ - "LEVEL_1", - "LEVEL_2", - "LEVEL_3A", - "LEVEL_3B", - "LEVEL_4", - "LEVEL_R1", - "LEVEL_R2", - "LEVEL_Px1", - "LEVEL_Px2", - "LEVEL_Px3", - "LEVEL_Dx1", - "LEVEL_Dx2", - "LEVEL_Dx3", - "LEVEL_Fda1", - "LEVEL_Fda2", - "LEVEL_Fda3", - "NO" + "GENE_SUMMARY", + "MUTATION_SUMMARY", + "TUMOR_TYPE_SUMMARY", + "GENE_TUMOR_TYPE_SUMMARY", + "PROGNOSTIC_SUMMARY", + "DIAGNOSTIC_SUMMARY", + "GENE_BACKGROUND", + "ONCOGENIC", + "MUTATION_EFFECT", + "VUS", + "PROGNOSTIC_IMPLICATION", + "DIAGNOSTIC_IMPLICATION", + "STANDARD_THERAPEUTIC_IMPLICATIONS_FOR_DRUG_SENSITIVITY", + "STANDARD_THERAPEUTIC_IMPLICATIONS_FOR_DRUG_RESISTANCE", + "INVESTIGATIONAL_THERAPEUTIC_IMPLICATIONS_DRUG_SENSITIVITY", + "INVESTIGATIONAL_THERAPEUTIC_IMPLICATIONS_DRUG_RESISTANCE" ] } }, - "prognosticImplications": { - "type": "array", - "items": { - "$ref": "#/definitions/Implication" - } - }, - "prognosticSummary": { - "type": "string" + "functionalFusion": { + "type": "boolean" }, - "query": { - "$ref": "#/definitions/Query" + "geneA": { + "$ref": "#/definitions/QueryGene" }, - "treatments": { - "type": "array", - "items": { - "$ref": "#/definitions/IndicatorQueryTreatment" - } + "geneB": { + "$ref": "#/definitions/QueryGene" }, - "tumorTypeSummary": { + "id": { "type": "string" }, - "variantExist": { - "type": "boolean" + "referenceGenome": { + "type": "string", + "enum": [ + "GRCh37", + "GRCh38" + ] }, - "variantSummary": { - "type": "string" + "structuralVariantType": { + "type": "string", + "enum": [ + "DELETION", + "TRANSLOCATION", + "DUPLICATION", + "INSERTION", + "INVERSION", + "FUSION", + "UNKNOWN" + ] }, - "vus": { - "type": "boolean" + "tumorType": { + "type": "string" } } }, - "ActionableGene": { + "VariantOfUnknownSignificance": { "type": "object", "properties": { - "abstracts": { - "type": "string" - }, - "cancerType": { - "type": "string" - }, - "description": { - "type": "string" - }, - "drugs": { - "type": "string" - }, "entrezGeneId": { "type": "integer", "format": "int32" @@ -3186,659 +3269,58 @@ "gene": { "type": "string" }, - "grch37Isoform": { + "variant": { "type": "string" + } + } + }, + "IndicatorQueryResp": { + "type": "object", + "properties": { + "alleleExist": { + "type": "boolean" }, - "grch37RefSeq": { + "dataVersion": { "type": "string" }, - "grch38Isoform": { - "type": "string" + "diagnosticImplications": { + "type": "array", + "items": { + "$ref": "#/definitions/Implication" + } }, - "grch38RefSeq": { + "diagnosticSummary": { "type": "string" }, - "level": { - "type": "string" + "geneExist": { + "type": "boolean" }, - "pmids": { + "geneSummary": { "type": "string" }, - "proteinChange": { - "type": "string" - }, - "referenceGenome": { - "type": "string" - }, - "variant": { - "type": "string" - } - } - }, - "InfoLevel": { - "type": "object", - "properties": { - "colorHex": { - "type": "string" - }, - "description": { - "type": "string" - }, - "htmlDescription": { - "type": "string" - }, - "levelOfEvidence": { - "type": "string", - "enum": [ - "LEVEL_1", - "LEVEL_2", - "LEVEL_3A", - "LEVEL_3B", - "LEVEL_4", - "LEVEL_R1", - "LEVEL_R2", - "LEVEL_Px1", - "LEVEL_Px2", - "LEVEL_Px3", - "LEVEL_Dx1", - "LEVEL_Dx2", - "LEVEL_Dx3", - "LEVEL_Fda1", - "LEVEL_Fda2", - "LEVEL_Fda3", - "NO" - ] - } - } - }, - "Trial": { - "type": "object", - "properties": { - "arms": { - "type": "array", - "items": { - "$ref": "#/definitions/Arms" - } - }, - "briefTitle": { - "type": "string" - }, - "currentTrialStatus": { - "type": "string" - }, - "isUSTrial": { - "type": "boolean" - }, - "nctId": { - "type": "string" - }, - "principalInvestigator": { - "type": "string" - } - } - }, - "Resource": { - "type": "object", - "properties": { - "basedOn": { - "type": "array", - "items": { - "$ref": "#/definitions/BasedOn" - } - }, - "category": { - "type": "array", - "items": { - "$ref": "#/definitions/Category" - } - }, - "code": { - "$ref": "#/definitions/Code" - }, - "component": { - "type": "array", - "items": { - "$ref": "#/definitions/Component" - } - }, - "derivedFrom": { - "type": "array", - "items": { - "$ref": "#/definitions/DerivedFrom" - } - }, - "effectiveDateTime": { - "type": "string", - "format": "date-time" - }, - "extension": { - "type": "array", - "items": { - "$ref": "#/definitions/Extension" - } - }, - "hasMember": { - "type": "array", - "items": { - "$ref": "#/definitions/HasMember" - } - }, - "id": { - "type": "string" - }, - "issued": { - "type": "string", - "format": "date-time" - }, - "resourceType": { - "type": "string" - }, - "status": { - "type": "string" - }, - "subject": { - "$ref": "#/definitions/Subject" - }, - "valueCodeableConcept": { - "$ref": "#/definitions/ValueCodeableConcept" - } - } - }, - "Arms": { - "type": "object", - "properties": { - "armDescription": { - "type": "string" - }, - "drugs": { - "type": "array", - "items": { - "$ref": "#/definitions/Drug" - } - } - } - }, - "OncoKBInfo": { - "type": "object", - "properties": { - "apiVersion": { - "$ref": "#/definitions/SemVer" - }, - "appVersion": { - "$ref": "#/definitions/SemVer" - }, - "dataVersion": { - "$ref": "#/definitions/Version" - }, - "levels": { - "type": "array", - "items": { - "$ref": "#/definitions/InfoLevel" - } - }, - "ncitVersion": { - "type": "string" - }, - "oncoTreeVersion": { - "type": "string" - }, - "publicInstance": { - "type": "boolean" - } - } - }, - "VariantConsequence": { - "type": "object", - "properties": { - "description": { - "type": "string" - }, - "isGenerallyTruncating": { - "type": "boolean" - }, - "term": { - "type": "string" - } - } - }, - "Code": { - "type": "object", - "properties": { - "coding": { - "type": "array", - "items": { - "$ref": "#/definitions/Coding" - } - }, - "text": { - "type": "string" - } - } - }, - "ValueRange": { - "type": "object", - "properties": { - "high": { - "$ref": "#/definitions/High" - }, - "low": { - "$ref": "#/definitions/Low" - } - } - }, - "EvidenceQueries": { - "type": "object", - "properties": { - "evidenceTypes": { - "type": "string" - }, - "highestLevelOnly": { - "type": "boolean" - }, - "levels": { - "type": "array", - "items": { - "type": "string", - "enum": [ - "LEVEL_1", - "LEVEL_2", - "LEVEL_3A", - "LEVEL_3B", - "LEVEL_4", - "LEVEL_R1", - "LEVEL_R2", - "LEVEL_Px1", - "LEVEL_Px2", - "LEVEL_Px3", - "LEVEL_Dx1", - "LEVEL_Dx2", - "LEVEL_Dx3", - "LEVEL_Fda1", - "LEVEL_Fda2", - "LEVEL_Fda3", - "NO" - ] - } - }, - "queries": { - "type": "array", - "items": { - "$ref": "#/definitions/Query" - } - } - } - }, - "AnnotateCopyNumberAlterationQuery": { - "type": "object", - "properties": { - "copyNameAlterationType": { - "type": "string", - "enum": [ - "AMPLIFICATION", - "DELETION", - "GAIN", - "LOSS" - ] - }, - "evidenceTypes": { - "type": "array", - "items": { - "type": "string", - "enum": [ - "GENE_SUMMARY", - "MUTATION_SUMMARY", - "TUMOR_TYPE_SUMMARY", - "GENE_TUMOR_TYPE_SUMMARY", - "PROGNOSTIC_SUMMARY", - "DIAGNOSTIC_SUMMARY", - "GENE_BACKGROUND", - "ONCOGENIC", - "MUTATION_EFFECT", - "VUS", - "PROGNOSTIC_IMPLICATION", - "DIAGNOSTIC_IMPLICATION", - "STANDARD_THERAPEUTIC_IMPLICATIONS_FOR_DRUG_SENSITIVITY", - "STANDARD_THERAPEUTIC_IMPLICATIONS_FOR_DRUG_RESISTANCE", - "INVESTIGATIONAL_THERAPEUTIC_IMPLICATIONS_DRUG_SENSITIVITY", - "INVESTIGATIONAL_THERAPEUTIC_IMPLICATIONS_DRUG_RESISTANCE" - ] - } - }, - "gene": { - "$ref": "#/definitions/QueryGene" - }, - "id": { - "type": "string" - }, - "referenceGenome": { - "type": "string", - "enum": [ - "GRCh37", - "GRCh38" - ] - }, - "tumorType": { - "type": "string" - } - } - }, - "Low": { - "type": "object", - "properties": { - "value": { - "type": "integer", - "format": "int32" - } - } - }, - "BasedOn": { - "type": "object", - "properties": { - "reference": { - "type": "string" - } - } - }, - "Link": { - "type": "object", - "properties": { - "relation": { - "type": "string" - }, - "url": { - "type": "string" - } - } - }, - "Category": { - "type": "object", - "properties": { - "coding": { - "type": "array", - "items": { - "$ref": "#/definitions/Coding" - } - }, - "text": { - "type": "string" - } - } - }, - "Article": { - "type": "object", - "properties": { - "abstract": { - "type": "string" - }, - "authors": { - "type": "string" - }, - "elocationId": { - "type": "string" - }, - "issue": { - "type": "string" - }, - "journal": { - "type": "string" - }, - "link": { - "type": "string" - }, - "pages": { - "type": "string" - }, - "pmid": { - "type": "string" - }, - "pubDate": { - "type": "string" - }, - "reference": { - "type": "string" - }, - "title": { - "type": "string" - }, - "volume": { - "type": "string" - } - } - }, - "Alteration": { - "type": "object", - "properties": { - "alteration": { - "type": "string" - }, - "consequence": { - "$ref": "#/definitions/VariantConsequence" - }, - "gene": { - "$ref": "#/definitions/Gene" - }, - "name": { - "type": "string" - }, - "proteinEnd": { - "type": "integer", - "format": "int32" - }, - "proteinStart": { - "type": "integer", - "format": "int32" - }, - "refResidues": { - "type": "string" - }, - "referenceGenomes": { - "type": "array", - "items": { - "type": "string", - "enum": [ - "GRCh37", - "GRCh38" - ] - } - }, - "variantResidues": { - "type": "string" - } - } - }, - "GenomicData": { - "type": "object", - "properties": { - "entry": { - "type": "array", - "items": { - "$ref": "#/definitions/Entry" - } - }, - "link": { - "type": "array", - "items": { - "$ref": "#/definitions/Link" - } - }, - "resourceType": { - "type": "string" - }, - "samples": { - "type": "array", - "items": { - "$ref": "#/definitions/AnnotateSampleQuery" - } - }, - "total": { - "type": "integer", - "format": "int32" - }, - "type": { - "type": "string" - } - } - }, - "AnnotatedVariant": { - "type": "object", - "properties": { - "description": { - "type": "string" - }, - "entrezGeneId": { - "type": "integer", - "format": "int32" - }, - "gene": { - "type": "string" - }, - "grch37Isoform": { - "type": "string" - }, - "grch37RefSeq": { - "type": "string" - }, - "grch38Isoform": { - "type": "string" - }, - "grch38RefSeq": { - "type": "string" - }, - "mutationEffect": { - "type": "string" - }, - "mutationEffectAbstracts": { - "type": "string" - }, - "mutationEffectPmids": { - "type": "string" - }, - "oncogenicity": { - "type": "string" - }, - "proteinChange": { - "type": "string" - }, - "referenceGenome": { - "type": "string" - }, - "variant": { - "type": "string" - } - } - }, - "Entry": { - "type": "object", - "properties": { - "fullUrl": { - "type": "string" - }, - "link": { - "type": "array", - "items": { - "$ref": "#/definitions/Link" - } - }, - "resource": { - "$ref": "#/definitions/Resource" - }, - "search": { - "$ref": "#/definitions/Search" - } - } - }, - "AnnotateSampleQuery": { - "type": "object", - "properties": { - "copyNumberAlterations": { - "type": "array", - "items": { - "$ref": "#/definitions/AnnotateCopyNumberAlterationQuery" - } - }, - "mutations": { - "$ref": "#/definitions/MutationsQuery" - }, - "structuralVariants": { - "type": "array", - "items": { - "$ref": "#/definitions/AnnotateStructuralVariantQuery" - } - } - } - }, - "AnnotationSearchResult": { - "type": "object", - "properties": { - "indicatorQueryResp": { - "$ref": "#/definitions/IndicatorQueryResp" - }, - "queryType": { - "type": "string", - "enum": [ - "GENE", - "VARIANT", - "DRUG", - "CANCER_TYPE" - ] - } - } - }, - "Evidence": { - "type": "object", - "properties": { - "additionalInfo": { - "type": "string" - }, - "alterations": { - "type": "array", - "items": { - "$ref": "#/definitions/Alteration" - } - }, - "articles": { - "type": "array", - "items": { - "$ref": "#/definitions/Article" - } - }, - "cancerTypes": { - "type": "array", - "items": { - "$ref": "#/definitions/TumorType" - } - }, - "description": { - "type": "string" - }, - "evidenceType": { + "highestDiagnosticImplicationLevel": { "type": "string", "enum": [ - "GENE_SUMMARY", - "MUTATION_SUMMARY", - "TUMOR_TYPE_SUMMARY", - "GENE_TUMOR_TYPE_SUMMARY", - "PROGNOSTIC_SUMMARY", - "DIAGNOSTIC_SUMMARY", - "GENE_BACKGROUND", - "ONCOGENIC", - "MUTATION_EFFECT", - "VUS", - "PROGNOSTIC_IMPLICATION", - "DIAGNOSTIC_IMPLICATION", - "STANDARD_THERAPEUTIC_IMPLICATIONS_FOR_DRUG_SENSITIVITY", - "STANDARD_THERAPEUTIC_IMPLICATIONS_FOR_DRUG_RESISTANCE", - "INVESTIGATIONAL_THERAPEUTIC_IMPLICATIONS_DRUG_SENSITIVITY", - "INVESTIGATIONAL_THERAPEUTIC_IMPLICATIONS_DRUG_RESISTANCE" + "LEVEL_1", + "LEVEL_2", + "LEVEL_3A", + "LEVEL_3B", + "LEVEL_4", + "LEVEL_R1", + "LEVEL_R2", + "LEVEL_Px1", + "LEVEL_Px2", + "LEVEL_Px3", + "LEVEL_Dx1", + "LEVEL_Dx2", + "LEVEL_Dx3", + "LEVEL_Fda1", + "LEVEL_Fda2", + "LEVEL_Fda3", + "NO" ] }, - "excludedCancerTypes": { - "type": "array", - "items": { - "$ref": "#/definitions/TumorType" - } - }, - "fdaLevel": { + "highestFdaLevel": { "type": "string", "enum": [ "LEVEL_1", @@ -3860,25 +3342,7 @@ "NO" ] }, - "gene": { - "$ref": "#/definitions/Gene" - }, - "id": { - "type": "integer", - "format": "int32" - }, - "knownEffect": { - "type": "string" - }, - "lastEdit": { - "type": "string", - "format": "date-time" - }, - "lastReview": { - "type": "string", - "format": "date-time" - }, - "levelOfEvidence": { + "highestPrognosticImplicationLevel": { "type": "string", "enum": [ "LEVEL_1", @@ -3900,7 +3364,7 @@ "NO" ] }, - "liquidPropagationLevel": { + "highestResistanceLevel": { "type": "string", "enum": [ "LEVEL_1", @@ -3922,13 +3386,7 @@ "NO" ] }, - "relevantCancerTypes": { - "type": "array", - "items": { - "$ref": "#/definitions/TumorType" - } - }, - "solidPropagationLevel": { + "highestSensitiveLevel": { "type": "string", "enum": [ "LEVEL_1", @@ -3950,25 +3408,144 @@ "NO" ] }, + "hotspot": { + "type": "boolean" + }, + "lastUpdate": { + "type": "string" + }, + "mutationEffect": { + "$ref": "#/definitions/MutationEffectResp" + }, + "oncogenic": { + "type": "string" + }, + "otherSignificantResistanceLevels": { + "type": "array", + "items": { + "type": "string", + "enum": [ + "LEVEL_1", + "LEVEL_2", + "LEVEL_3A", + "LEVEL_3B", + "LEVEL_4", + "LEVEL_R1", + "LEVEL_R2", + "LEVEL_Px1", + "LEVEL_Px2", + "LEVEL_Px3", + "LEVEL_Dx1", + "LEVEL_Dx2", + "LEVEL_Dx3", + "LEVEL_Fda1", + "LEVEL_Fda2", + "LEVEL_Fda3", + "NO" + ] + } + }, + "otherSignificantSensitiveLevels": { + "type": "array", + "items": { + "type": "string", + "enum": [ + "LEVEL_1", + "LEVEL_2", + "LEVEL_3A", + "LEVEL_3B", + "LEVEL_4", + "LEVEL_R1", + "LEVEL_R2", + "LEVEL_Px1", + "LEVEL_Px2", + "LEVEL_Px3", + "LEVEL_Dx1", + "LEVEL_Dx2", + "LEVEL_Dx3", + "LEVEL_Fda1", + "LEVEL_Fda2", + "LEVEL_Fda3", + "NO" + ] + } + }, + "prognosticImplications": { + "type": "array", + "items": { + "$ref": "#/definitions/Implication" + } + }, + "prognosticSummary": { + "type": "string" + }, + "query": { + "$ref": "#/definitions/Query" + }, "treatments": { "type": "array", "items": { - "$ref": "#/definitions/Treatment" + "$ref": "#/definitions/IndicatorQueryTreatment" } }, - "uuid": { + "tumorTypeSummary": { + "type": "string" + }, + "variantExist": { + "type": "boolean" + }, + "variantSummary": { "type": "string" + }, + "vus": { + "type": "boolean" } } }, - "VariantOfUnknownSignificance": { + "ActionableGene": { "type": "object", "properties": { + "abstracts": { + "type": "string" + }, + "cancerType": { + "type": "string" + }, + "description": { + "type": "string" + }, + "drugs": { + "type": "string" + }, "entrezGeneId": { "type": "integer", "format": "int32" }, - "gene": { + "gene": { + "type": "string" + }, + "grch37Isoform": { + "type": "string" + }, + "grch37RefSeq": { + "type": "string" + }, + "grch38Isoform": { + "type": "string" + }, + "grch38RefSeq": { + "type": "string" + }, + "level": { + "type": "string" + }, + "pmids": { + "type": "string" + }, + "proteinChange": { + "type": "string" + }, + "referenceGenome": { "type": "string" }, "variant": { @@ -3976,37 +3553,50 @@ } } }, - "Component": { + "ArticleAbstract": { "type": "object", "properties": { - "code": { - "$ref": "#/definitions/Code" - }, - "extension": { - "type": "array", - "items": { - "$ref": "#/definitions/Extension" - } - }, - "valueCodeableConcept": { - "$ref": "#/definitions/ValueCodeableConcept" - }, - "valueRange": { - "$ref": "#/definitions/ValueRange" + "abstract": { + "type": "string" }, - "valueString": { + "link": { "type": "string" } } }, - "ArticleAbstract": { + "InfoLevel": { "type": "object", "properties": { - "abstract": { + "colorHex": { "type": "string" }, - "link": { + "description": { + "type": "string" + }, + "htmlDescription": { "type": "string" + }, + "levelOfEvidence": { + "type": "string", + "enum": [ + "LEVEL_1", + "LEVEL_2", + "LEVEL_3A", + "LEVEL_3B", + "LEVEL_4", + "LEVEL_R1", + "LEVEL_R2", + "LEVEL_Px1", + "LEVEL_Px2", + "LEVEL_Px3", + "LEVEL_Dx1", + "LEVEL_Dx2", + "LEVEL_Dx3", + "LEVEL_Fda1", + "LEVEL_Fda2", + "LEVEL_Fda3", + "NO" + ] } } }, @@ -4021,15 +3611,6 @@ } } }, - "High": { - "type": "object", - "properties": { - "value": { - "type": "integer", - "format": "int32" - } - } - }, "CuratedGene": { "type": "object", "properties": { @@ -4144,6 +3725,32 @@ } } }, + "Trial": { + "type": "object", + "properties": { + "arms": { + "type": "array", + "items": { + "$ref": "#/definitions/Arms" + } + }, + "briefTitle": { + "type": "string" + }, + "currentTrialStatus": { + "type": "string" + }, + "isUSTrial": { + "type": "boolean" + }, + "nctId": { + "type": "string" + }, + "principalInvestigator": { + "type": "string" + } + } + }, "QueryGene": { "type": "object", "properties": { @@ -4228,6 +3835,20 @@ } } }, + "Arms": { + "type": "object", + "properties": { + "armDescription": { + "type": "string" + }, + "drugs": { + "type": "array", + "items": { + "$ref": "#/definitions/Drug" + } + } + } + }, "MainType": { "type": "object", "properties": { @@ -4249,6 +3870,35 @@ }, "description": "OncoTree Cancer Type" }, + "OncoKBInfo": { + "type": "object", + "properties": { + "apiVersion": { + "$ref": "#/definitions/SemVer" + }, + "appVersion": { + "$ref": "#/definitions/SemVer" + }, + "dataVersion": { + "$ref": "#/definitions/Version" + }, + "levels": { + "type": "array", + "items": { + "$ref": "#/definitions/InfoLevel" + } + }, + "ncitVersion": { + "type": "string" + }, + "oncoTreeVersion": { + "type": "string" + }, + "publicInstance": { + "type": "boolean" + } + } + }, "SampleQueryResp": { "type": "object", "properties": { @@ -4272,6 +3922,20 @@ } } }, + "VariantConsequence": { + "type": "object", + "properties": { + "description": { + "type": "string" + }, + "isGenerallyTruncating": { + "type": "boolean" + }, + "term": { + "type": "string" + } + } + }, "AnnotateMutationByProteinChangeQuery": { "type": "object", "properties": { @@ -4422,51 +4086,6 @@ } } }, - "DerivedFrom": { - "type": "object", - "properties": { - "display": { - "type": "string" - }, - "reference": { - "type": "string" - } - } - }, - "Subject": { - "type": "object", - "properties": { - "display": { - "type": "string" - }, - "reference": { - "type": "string" - } - } - }, - "Extension": { - "type": "object", - "properties": { - "extension": { - "type": "array", - "items": { - "$ref": "#/definitions/Extension" - } - }, - "url": { - "type": "string" - }, - "valueBoolean": { - "type": "boolean" - }, - "valueCodeableConcept": { - "$ref": "#/definitions/ValueCodeableConcept" - }, - "valueString": { - "type": "string" - } - } - }, "ResponseEntity": { "type": "object", "properties": { @@ -4572,6 +4191,48 @@ } } }, + "EvidenceQueries": { + "type": "object", + "properties": { + "evidenceTypes": { + "type": "string" + }, + "highestLevelOnly": { + "type": "boolean" + }, + "levels": { + "type": "array", + "items": { + "type": "string", + "enum": [ + "LEVEL_1", + "LEVEL_2", + "LEVEL_3A", + "LEVEL_3B", + "LEVEL_4", + "LEVEL_R1", + "LEVEL_R2", + "LEVEL_Px1", + "LEVEL_Px2", + "LEVEL_Px3", + "LEVEL_Dx1", + "LEVEL_Dx2", + "LEVEL_Dx3", + "LEVEL_Fda1", + "LEVEL_Fda2", + "LEVEL_Fda3", + "NO" + ] + } + }, + "queries": { + "type": "array", + "items": { + "$ref": "#/definitions/Query" + } + } + } + }, "VariantSearchQuery": { "type": "object", "properties": { @@ -4625,16 +4286,56 @@ } } }, - "ValueCodeableConcept": { + "AnnotateCopyNumberAlterationQuery": { "type": "object", "properties": { - "coding": { + "copyNameAlterationType": { + "type": "string", + "enum": [ + "AMPLIFICATION", + "DELETION", + "GAIN", + "LOSS" + ] + }, + "evidenceTypes": { "type": "array", "items": { - "$ref": "#/definitions/Coding" + "type": "string", + "enum": [ + "GENE_SUMMARY", + "MUTATION_SUMMARY", + "TUMOR_TYPE_SUMMARY", + "GENE_TUMOR_TYPE_SUMMARY", + "PROGNOSTIC_SUMMARY", + "DIAGNOSTIC_SUMMARY", + "GENE_BACKGROUND", + "ONCOGENIC", + "MUTATION_EFFECT", + "VUS", + "PROGNOSTIC_IMPLICATION", + "DIAGNOSTIC_IMPLICATION", + "STANDARD_THERAPEUTIC_IMPLICATIONS_FOR_DRUG_SENSITIVITY", + "STANDARD_THERAPEUTIC_IMPLICATIONS_FOR_DRUG_RESISTANCE", + "INVESTIGATIONAL_THERAPEUTIC_IMPLICATIONS_DRUG_SENSITIVITY", + "INVESTIGATIONAL_THERAPEUTIC_IMPLICATIONS_DRUG_RESISTANCE" + ] } }, - "text": { + "gene": { + "$ref": "#/definitions/QueryGene" + }, + "id": { + "type": "string" + }, + "referenceGenome": { + "type": "string", + "enum": [ + "GRCh37", + "GRCh38" + ] + }, + "tumorType": { "type": "string" } } diff --git a/src/main/webapp/app/shared/api/generated/OncoKbAPI.ts b/src/main/webapp/app/shared/api/generated/OncoKbAPI.ts index f8763aef8..a4008d69e 100644 --- a/src/main/webapp/app/shared/api/generated/OncoKbAPI.ts +++ b/src/main/webapp/app/shared/api/generated/OncoKbAPI.ts @@ -44,6 +44,82 @@ export type Query = { 'tumorType': string +}; +export type Article = { + 'abstract': string + + 'authors': string + + 'elocationId': string + + 'issue': string + + 'journal': string + + 'link': string + + 'pages': string + + 'pmid': string + + 'pubDate': string + + 'reference': string + + 'title': string + + 'volume': string + +}; +export type Alteration = { + 'alteration': string + + 'consequence': VariantConsequence + + 'gene': Gene + + 'name': string + + 'proteinEnd': number + + 'proteinStart': number + + 'refResidues': string + + 'referenceGenomes': Array < "GRCh37" | "GRCh38" > + + 'variantResidues': string + +}; +export type AnnotatedVariant = { + 'description': string + + 'entrezGeneId': number + + 'gene': string + + 'grch37Isoform': string + + 'grch37RefSeq': string + + 'grch38Isoform': string + + 'grch38RefSeq': string + + 'mutationEffect': string + + 'mutationEffectAbstracts': string + + 'mutationEffectPmids': string + + 'oncogenicity': string + + 'proteinChange': string + + 'referenceGenome': string + + 'variant': string + }; export type SemVer = { 'major': number @@ -83,10 +159,12 @@ export type MutationsQuery = { 'proteinChange': Array < AnnotateMutationByProteinChangeQuery > }; -export type HasMember = { - 'display': string +export type AnnotateSampleQuery = { + 'copyNumberAlterations': Array < AnnotateCopyNumberAlterationQuery > - 'reference': string + 'mutations': MutationsQuery + + 'structuralVariants': Array < AnnotateStructuralVariantQuery > }; export type TumorType = { @@ -132,24 +210,12 @@ export type Gene = { 'tsg': boolean -}; -export type Coding = { - 'code': string - - 'display': string - - 'system': string - }; export type Version = { 'date': string 'version': string -}; -export type Search = { - 'mode': string - }; export type TreatmentDrugId = { 'drug': Drug @@ -174,6 +240,52 @@ export type GeneEvidence = { 'status': string +}; +export type AnnotationSearchResult = { + 'indicatorQueryResp': IndicatorQueryResp + + 'queryType': "GENE" | "VARIANT" | "DRUG" | "CANCER_TYPE" + +}; +export type Evidence = { + 'additionalInfo': string + + 'alterations': Array < Alteration > + + 'articles': Array < Article > + + 'cancerTypes': Array < TumorType > + + 'description': string + + 'evidenceType': "GENE_SUMMARY" | "MUTATION_SUMMARY" | "TUMOR_TYPE_SUMMARY" | "GENE_TUMOR_TYPE_SUMMARY" | "PROGNOSTIC_SUMMARY" | "DIAGNOSTIC_SUMMARY" | "GENE_BACKGROUND" | "ONCOGENIC" | "MUTATION_EFFECT" | "VUS" | "PROGNOSTIC_IMPLICATION" | "DIAGNOSTIC_IMPLICATION" | "STANDARD_THERAPEUTIC_IMPLICATIONS_FOR_DRUG_SENSITIVITY" | "STANDARD_THERAPEUTIC_IMPLICATIONS_FOR_DRUG_RESISTANCE" | "INVESTIGATIONAL_THERAPEUTIC_IMPLICATIONS_DRUG_SENSITIVITY" | "INVESTIGATIONAL_THERAPEUTIC_IMPLICATIONS_DRUG_RESISTANCE" + + 'excludedCancerTypes': Array < TumorType > + + 'fdaLevel': "LEVEL_1" | "LEVEL_2" | "LEVEL_3A" | "LEVEL_3B" | "LEVEL_4" | "LEVEL_R1" | "LEVEL_R2" | "LEVEL_Px1" | "LEVEL_Px2" | "LEVEL_Px3" | "LEVEL_Dx1" | "LEVEL_Dx2" | "LEVEL_Dx3" | "LEVEL_Fda1" | "LEVEL_Fda2" | "LEVEL_Fda3" | "NO" + + 'gene': Gene + + 'id': number + + 'knownEffect': string + + 'lastEdit': string + + 'lastReview': string + + 'levelOfEvidence': "LEVEL_1" | "LEVEL_2" | "LEVEL_3A" | "LEVEL_3B" | "LEVEL_4" | "LEVEL_R1" | "LEVEL_R2" | "LEVEL_Px1" | "LEVEL_Px2" | "LEVEL_Px3" | "LEVEL_Dx1" | "LEVEL_Dx2" | "LEVEL_Dx3" | "LEVEL_Fda1" | "LEVEL_Fda2" | "LEVEL_Fda3" | "NO" + + 'liquidPropagationLevel': "LEVEL_1" | "LEVEL_2" | "LEVEL_3A" | "LEVEL_3B" | "LEVEL_4" | "LEVEL_R1" | "LEVEL_R2" | "LEVEL_Px1" | "LEVEL_Px2" | "LEVEL_Px3" | "LEVEL_Dx1" | "LEVEL_Dx2" | "LEVEL_Dx3" | "LEVEL_Fda1" | "LEVEL_Fda2" | "LEVEL_Fda3" | "NO" + + 'relevantCancerTypes': Array < TumorType > + + 'solidPropagationLevel': "LEVEL_1" | "LEVEL_2" | "LEVEL_3A" | "LEVEL_3B" | "LEVEL_4" | "LEVEL_R1" | "LEVEL_R2" | "LEVEL_Px1" | "LEVEL_Px2" | "LEVEL_Px3" | "LEVEL_Dx1" | "LEVEL_Dx2" | "LEVEL_Dx3" | "LEVEL_Fda1" | "LEVEL_Fda2" | "LEVEL_Fda3" | "NO" + + 'treatments': Array < Treatment > + + 'uuid': string + }; export type AnnotateStructuralVariantQuery = { 'evidenceTypes': Array < "GENE_SUMMARY" | "MUTATION_SUMMARY" | "TUMOR_TYPE_SUMMARY" | "GENE_TUMOR_TYPE_SUMMARY" | "PROGNOSTIC_SUMMARY" | "DIAGNOSTIC_SUMMARY" | "GENE_BACKGROUND" | "ONCOGENIC" | "MUTATION_EFFECT" | "VUS" | "PROGNOSTIC_IMPLICATION" | "DIAGNOSTIC_IMPLICATION" | "STANDARD_THERAPEUTIC_IMPLICATIONS_FOR_DRUG_SENSITIVITY" | "STANDARD_THERAPEUTIC_IMPLICATIONS_FOR_DRUG_RESISTANCE" | "INVESTIGATIONAL_THERAPEUTIC_IMPLICATIONS_DRUG_SENSITIVITY" | "INVESTIGATIONAL_THERAPEUTIC_IMPLICATIONS_DRUG_RESISTANCE" > @@ -192,6 +304,14 @@ export type AnnotateStructuralVariantQuery = { 'tumorType': string +}; +export type VariantOfUnknownSignificance = { + 'entrezGeneId': number + + 'gene': string + + 'variant': string + }; export type IndicatorQueryResp = { 'alleleExist': boolean @@ -277,335 +397,27 @@ export type ActionableGene = { 'variant': string }; -export type InfoLevel = { - 'colorHex': string - - 'description': string - - 'htmlDescription': string - - 'levelOfEvidence': "LEVEL_1" | "LEVEL_2" | "LEVEL_3A" | "LEVEL_3B" | "LEVEL_4" | "LEVEL_R1" | "LEVEL_R2" | "LEVEL_Px1" | "LEVEL_Px2" | "LEVEL_Px3" | "LEVEL_Dx1" | "LEVEL_Dx2" | "LEVEL_Dx3" | "LEVEL_Fda1" | "LEVEL_Fda2" | "LEVEL_Fda3" | "NO" - -}; -export type Trial = { - 'arms': Array < Arms > - - 'briefTitle': string - - 'currentTrialStatus': string - - 'isUSTrial': boolean - - 'nctId': string - - 'principalInvestigator': string - -}; -export type Resource = { - 'basedOn': Array < BasedOn > - - 'category': Array < Category > - - 'code': Code - - 'component': Array < Component > - - 'derivedFrom': Array < DerivedFrom > - - 'effectiveDateTime': string - - 'extension': Array < Extension > - - 'hasMember': Array < HasMember > - - 'id': string - - 'issued': string - - 'resourceType': string - - 'status': string - - 'subject': Subject - - 'valueCodeableConcept': ValueCodeableConcept - -}; -export type Arms = { - 'armDescription': string - - 'drugs': Array < Drug > - -}; -export type OncoKBInfo = { - 'apiVersion': SemVer - - 'appVersion': SemVer - - 'dataVersion': Version - - 'levels': Array < InfoLevel > - - 'ncitVersion': string - - 'oncoTreeVersion': string - - 'publicInstance': boolean - -}; -export type VariantConsequence = { - 'description': string - - 'isGenerallyTruncating': boolean - - 'term': string - -}; -export type Code = { - 'coding': Array < Coding > - - 'text': string - -}; -export type ValueRange = { - 'high': High - - 'low': Low - -}; -export type EvidenceQueries = { - 'evidenceTypes': string - - 'highestLevelOnly': boolean - - 'levels': Array < "LEVEL_1" | "LEVEL_2" | "LEVEL_3A" | "LEVEL_3B" | "LEVEL_4" | "LEVEL_R1" | "LEVEL_R2" | "LEVEL_Px1" | "LEVEL_Px2" | "LEVEL_Px3" | "LEVEL_Dx1" | "LEVEL_Dx2" | "LEVEL_Dx3" | "LEVEL_Fda1" | "LEVEL_Fda2" | "LEVEL_Fda3" | "NO" > - - 'queries': Array < Query > - -}; -export type AnnotateCopyNumberAlterationQuery = { - 'copyNameAlterationType': "AMPLIFICATION" | "DELETION" | "GAIN" | "LOSS" - - 'evidenceTypes': Array < "GENE_SUMMARY" | "MUTATION_SUMMARY" | "TUMOR_TYPE_SUMMARY" | "GENE_TUMOR_TYPE_SUMMARY" | "PROGNOSTIC_SUMMARY" | "DIAGNOSTIC_SUMMARY" | "GENE_BACKGROUND" | "ONCOGENIC" | "MUTATION_EFFECT" | "VUS" | "PROGNOSTIC_IMPLICATION" | "DIAGNOSTIC_IMPLICATION" | "STANDARD_THERAPEUTIC_IMPLICATIONS_FOR_DRUG_SENSITIVITY" | "STANDARD_THERAPEUTIC_IMPLICATIONS_FOR_DRUG_RESISTANCE" | "INVESTIGATIONAL_THERAPEUTIC_IMPLICATIONS_DRUG_SENSITIVITY" | "INVESTIGATIONAL_THERAPEUTIC_IMPLICATIONS_DRUG_RESISTANCE" > - - 'gene': QueryGene - - 'id': string - - 'referenceGenome': "GRCh37" | "GRCh38" - - 'tumorType': string - -}; -export type Low = { - 'value': number - -}; -export type BasedOn = { - 'reference': string - -}; -export type Link = { - 'relation': string - - 'url': string - -}; -export type Category = { - 'coding': Array < Coding > - - 'text': string - -}; -export type Article = { +export type ArticleAbstract = { 'abstract': string - 'authors': string - - 'elocationId': string - - 'issue': string - - 'journal': string - 'link': string - 'pages': string - - 'pmid': string - - 'pubDate': string - - 'reference': string - - 'title': string - - 'volume': string - -}; -export type Alteration = { - 'alteration': string - - 'consequence': VariantConsequence - - 'gene': Gene - - 'name': string - - 'proteinEnd': number - - 'proteinStart': number - - 'refResidues': string - - 'referenceGenomes': Array < "GRCh37" | "GRCh38" > - - 'variantResidues': string - -}; -export type GenomicData = { - 'entry': Array < Entry > - - 'link': Array < Link > - - 'resourceType': string - - 'samples': Array < AnnotateSampleQuery > - - 'total': number - - 'type': string - -}; -export type AnnotatedVariant = { - 'description': string - - 'entrezGeneId': number - - 'gene': string - - 'grch37Isoform': string - - 'grch37RefSeq': string - - 'grch38Isoform': string - - 'grch38RefSeq': string - - 'mutationEffect': string - - 'mutationEffectAbstracts': string - - 'mutationEffectPmids': string - - 'oncogenicity': string - - 'proteinChange': string - - 'referenceGenome': string - - 'variant': string - -}; -export type Entry = { - 'fullUrl': string - - 'link': Array < Link > - - 'resource': Resource - - 'search': Search - -}; -export type AnnotateSampleQuery = { - 'copyNumberAlterations': Array < AnnotateCopyNumberAlterationQuery > - - 'mutations': MutationsQuery - - 'structuralVariants': Array < AnnotateStructuralVariantQuery > - -}; -export type AnnotationSearchResult = { - 'indicatorQueryResp': IndicatorQueryResp - - 'queryType': "GENE" | "VARIANT" | "DRUG" | "CANCER_TYPE" - }; -export type Evidence = { - 'additionalInfo': string - - 'alterations': Array < Alteration > - - 'articles': Array < Article > - - 'cancerTypes': Array < TumorType > +export type InfoLevel = { + 'colorHex': string 'description': string - 'evidenceType': "GENE_SUMMARY" | "MUTATION_SUMMARY" | "TUMOR_TYPE_SUMMARY" | "GENE_TUMOR_TYPE_SUMMARY" | "PROGNOSTIC_SUMMARY" | "DIAGNOSTIC_SUMMARY" | "GENE_BACKGROUND" | "ONCOGENIC" | "MUTATION_EFFECT" | "VUS" | "PROGNOSTIC_IMPLICATION" | "DIAGNOSTIC_IMPLICATION" | "STANDARD_THERAPEUTIC_IMPLICATIONS_FOR_DRUG_SENSITIVITY" | "STANDARD_THERAPEUTIC_IMPLICATIONS_FOR_DRUG_RESISTANCE" | "INVESTIGATIONAL_THERAPEUTIC_IMPLICATIONS_DRUG_SENSITIVITY" | "INVESTIGATIONAL_THERAPEUTIC_IMPLICATIONS_DRUG_RESISTANCE" - - 'excludedCancerTypes': Array < TumorType > - - 'fdaLevel': "LEVEL_1" | "LEVEL_2" | "LEVEL_3A" | "LEVEL_3B" | "LEVEL_4" | "LEVEL_R1" | "LEVEL_R2" | "LEVEL_Px1" | "LEVEL_Px2" | "LEVEL_Px3" | "LEVEL_Dx1" | "LEVEL_Dx2" | "LEVEL_Dx3" | "LEVEL_Fda1" | "LEVEL_Fda2" | "LEVEL_Fda3" | "NO" - - 'gene': Gene - - 'id': number - - 'knownEffect': string - - 'lastEdit': string - - 'lastReview': string + 'htmlDescription': string 'levelOfEvidence': "LEVEL_1" | "LEVEL_2" | "LEVEL_3A" | "LEVEL_3B" | "LEVEL_4" | "LEVEL_R1" | "LEVEL_R2" | "LEVEL_Px1" | "LEVEL_Px2" | "LEVEL_Px3" | "LEVEL_Dx1" | "LEVEL_Dx2" | "LEVEL_Dx3" | "LEVEL_Fda1" | "LEVEL_Fda2" | "LEVEL_Fda3" | "NO" - 'liquidPropagationLevel': "LEVEL_1" | "LEVEL_2" | "LEVEL_3A" | "LEVEL_3B" | "LEVEL_4" | "LEVEL_R1" | "LEVEL_R2" | "LEVEL_Px1" | "LEVEL_Px2" | "LEVEL_Px3" | "LEVEL_Dx1" | "LEVEL_Dx2" | "LEVEL_Dx3" | "LEVEL_Fda1" | "LEVEL_Fda2" | "LEVEL_Fda3" | "NO" - - 'relevantCancerTypes': Array < TumorType > - - 'solidPropagationLevel': "LEVEL_1" | "LEVEL_2" | "LEVEL_3A" | "LEVEL_3B" | "LEVEL_4" | "LEVEL_R1" | "LEVEL_R2" | "LEVEL_Px1" | "LEVEL_Px2" | "LEVEL_Px3" | "LEVEL_Dx1" | "LEVEL_Dx2" | "LEVEL_Dx3" | "LEVEL_Fda1" | "LEVEL_Fda2" | "LEVEL_Fda3" | "NO" - - 'treatments': Array < Treatment > - - 'uuid': string - -}; -export type VariantOfUnknownSignificance = { - 'entrezGeneId': number - - 'gene': string - - 'variant': string - -}; -export type Component = { - 'code': Code - - 'extension': Array < Extension > - - 'valueCodeableConcept': ValueCodeableConcept - - 'valueRange': ValueRange - - 'valueString': string - -}; -export type ArticleAbstract = { - 'abstract': string - - 'link': string - }; export type Drug = { 'drugName': string 'ncitCode': string -}; -export type High = { - 'value': number - }; export type CuratedGene = { 'background': string @@ -656,6 +468,20 @@ export type EvidenceQueryRes = { 'query': Query +}; +export type Trial = { + 'arms': Array < Arms > + + 'briefTitle': string + + 'currentTrialStatus': string + + 'isUSTrial': boolean + + 'nctId': string + + 'principalInvestigator': string + }; export type QueryGene = { 'entrezGeneId': number @@ -702,6 +528,12 @@ export type CancerGene = { 'vogelstein': boolean +}; +export type Arms = { + 'armDescription': string + + 'drugs': Array < Drug > + }; export type MainType = { 'id': number @@ -710,6 +542,22 @@ export type MainType = { 'tumorForm': "SOLID" | "LIQUID" | "MIXED" +}; +export type OncoKBInfo = { + 'apiVersion': SemVer + + 'appVersion': SemVer + + 'dataVersion': Version + + 'levels': Array < InfoLevel > + + 'ncitVersion': string + + 'oncoTreeVersion': string + + 'publicInstance': boolean + }; export type SampleQueryResp = { 'copyNumberAlterations': Array < IndicatorQueryResp > @@ -718,6 +566,14 @@ export type SampleQueryResp = { 'structuralVariants': Array < IndicatorQueryResp > +}; +export type VariantConsequence = { + 'description': string + + 'isGenerallyTruncating': boolean + + 'term': string + }; export type AnnotateMutationByProteinChangeQuery = { 'alteration': string @@ -760,30 +616,6 @@ export type IndicatorQueryTreatment = { 'pmids': Array < string > -}; -export type DerivedFrom = { - 'display': string - - 'reference': string - -}; -export type Subject = { - 'display': string - - 'reference': string - -}; -export type Extension = { - 'extension': Array < Extension > - - 'url': string - - 'valueBoolean': boolean - - 'valueCodeableConcept': ValueCodeableConcept - - 'valueString': string - }; export type ResponseEntity = { 'body': {} @@ -800,6 +632,16 @@ export type Treatment = { 'priority': number +}; +export type EvidenceQueries = { + 'evidenceTypes': string + + 'highestLevelOnly': boolean + + 'levels': Array < "LEVEL_1" | "LEVEL_2" | "LEVEL_3A" | "LEVEL_3B" | "LEVEL_4" | "LEVEL_R1" | "LEVEL_R2" | "LEVEL_Px1" | "LEVEL_Px2" | "LEVEL_Px3" | "LEVEL_Dx1" | "LEVEL_Dx2" | "LEVEL_Dx3" | "LEVEL_Fda1" | "LEVEL_Fda2" | "LEVEL_Fda3" | "NO" > + + 'queries': Array < Query > + }; export type VariantSearchQuery = { 'consequence': string @@ -829,10 +671,18 @@ export type MutationEffectResp = { 'knownEffect': string }; -export type ValueCodeableConcept = { - 'coding': Array < Coding > +export type AnnotateCopyNumberAlterationQuery = { + 'copyNameAlterationType': "AMPLIFICATION" | "DELETION" | "GAIN" | "LOSS" + + 'evidenceTypes': Array < "GENE_SUMMARY" | "MUTATION_SUMMARY" | "TUMOR_TYPE_SUMMARY" | "GENE_TUMOR_TYPE_SUMMARY" | "PROGNOSTIC_SUMMARY" | "DIAGNOSTIC_SUMMARY" | "GENE_BACKGROUND" | "ONCOGENIC" | "MUTATION_EFFECT" | "VUS" | "PROGNOSTIC_IMPLICATION" | "DIAGNOSTIC_IMPLICATION" | "STANDARD_THERAPEUTIC_IMPLICATIONS_FOR_DRUG_SENSITIVITY" | "STANDARD_THERAPEUTIC_IMPLICATIONS_FOR_DRUG_RESISTANCE" | "INVESTIGATIONAL_THERAPEUTIC_IMPLICATIONS_DRUG_SENSITIVITY" | "INVESTIGATIONAL_THERAPEUTIC_IMPLICATIONS_DRUG_RESISTANCE" > + + 'gene': QueryGene + + 'id': string + + 'referenceGenome': "GRCh37" | "GRCh38" - 'text': string + 'tumorType': string }; export type AnnotateMutationByHGVSgQuery = { @@ -1139,12 +989,25 @@ export default class OncoKbAPI { return response.body; }); }; - annotateEpicPostUsingPOSTURL(parameters: { - 'body': GenomicData, + annotateEpicGetUsingGETURL(parameters: { + 'iss': string, + 'accessToken': string, + 'patientId': string, $queryParameters ? : any }): string { let queryParameters: any = {}; let path = '/annotate/epic'; + if (parameters['iss'] !== undefined) { + queryParameters['iss'] = parameters['iss']; + } + + if (parameters['accessToken'] !== undefined) { + queryParameters['accessToken'] = parameters['accessToken']; + } + + if (parameters['patientId'] !== undefined) { + queryParameters['patientId'] = parameters['patientId']; + } if (parameters.$queryParameters) { Object.keys(parameters.$queryParameters).forEach(function(parameterName) { @@ -1159,11 +1022,15 @@ export default class OncoKbAPI { /** * Annotate epic genomic data. * @method - * @name OncoKbAPI#annotateEpicPostUsingPOST - * @param {} body - Epic genomic data in FHIR format + * @name OncoKbAPI#annotateEpicGetUsingGET + * @param {string} iss - iss + * @param {string} accessToken - accessToken + * @param {string} patientId - patientId */ - annotateEpicPostUsingPOSTWithHttpInfo(parameters: { - 'body': GenomicData, + annotateEpicGetUsingGETWithHttpInfo(parameters: { + 'iss': string, + 'accessToken': string, + 'patientId': string, $queryParameters ? : any, $domain ? : string }): Promise < request.Response > { @@ -1179,12 +1046,30 @@ export default class OncoKbAPI { headers['Accept'] = 'application/json'; headers['Content-Type'] = 'application/json'; - if (parameters['body'] !== undefined) { - body = parameters['body']; + if (parameters['iss'] !== undefined) { + queryParameters['iss'] = parameters['iss']; } - if (parameters['body'] === undefined) { - reject(new Error('Missing required parameter: body')); + if (parameters['iss'] === undefined) { + reject(new Error('Missing required parameter: iss')); + return; + } + + if (parameters['accessToken'] !== undefined) { + queryParameters['accessToken'] = parameters['accessToken']; + } + + if (parameters['accessToken'] === undefined) { + reject(new Error('Missing required parameter: accessToken')); + return; + } + + if (parameters['patientId'] !== undefined) { + queryParameters['patientId'] = parameters['patientId']; + } + + if (parameters['patientId'] === undefined) { + reject(new Error('Missing required parameter: patientId')); return; } @@ -1195,7 +1080,7 @@ export default class OncoKbAPI { }); } - request('POST', domain + path, body, headers, queryParameters, form, reject, resolve, errorHandlers); + request('GET', domain + path, body, headers, queryParameters, form, reject, resolve, errorHandlers); }); }; @@ -1203,16 +1088,20 @@ export default class OncoKbAPI { /** * Annotate epic genomic data. * @method - * @name OncoKbAPI#annotateEpicPostUsingPOST - * @param {} body - Epic genomic data in FHIR format + * @name OncoKbAPI#annotateEpicGetUsingGET + * @param {string} iss - iss + * @param {string} accessToken - accessToken + * @param {string} patientId - patientId */ - annotateEpicPostUsingPOST(parameters: { - 'body': GenomicData, + annotateEpicGetUsingGET(parameters: { + 'iss': string, + 'accessToken': string, + 'patientId': string, $queryParameters ? : any, $domain ? : string }): Promise < Array < SampleQueryResp > > { - return this.annotateEpicPostUsingPOSTWithHttpInfo(parameters).then(function(response: request.Response) { + return this.annotateEpicGetUsingGETWithHttpInfo(parameters).then(function(response: request.Response) { return response.body; }); }; From 6d899c96b9b5012d077d9614436edcdfc2c149ae Mon Sep 17 00:00:00 2001 From: bprize15 Date: Thu, 5 Sep 2024 11:52:24 -0400 Subject: [PATCH 3/4] add request to backend --- src/main/webapp/app/pages/epic/EpicAnnotate.tsx | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/main/webapp/app/pages/epic/EpicAnnotate.tsx b/src/main/webapp/app/pages/epic/EpicAnnotate.tsx index 142a0b7ac..89b86067f 100644 --- a/src/main/webapp/app/pages/epic/EpicAnnotate.tsx +++ b/src/main/webapp/app/pages/epic/EpicAnnotate.tsx @@ -6,6 +6,7 @@ import WindowStore from 'app/store/WindowStore'; import { PAGE_ROUTE } from 'app/config/constants'; import { useLocation } from 'react-router-dom'; import axios from 'axios'; +import client from 'app/shared/api/oncokbClientInstance'; interface IEpicAnnotateProps { windowStore: WindowStore; @@ -45,10 +46,11 @@ const EpicAnnotate = ({ windowStore }: IEpicAnnotateProps) => { const token = epicResponse.data; - //Pass ISS and token to backend, so it can use Epic APIs. - const mskResponse = await axios.get( - `/api/token?iss=${iss}&accessToken=${token.access_token}&patientId=${token.patient}` - ); + client.annotateEpicGetUsingGET({ + accessToken: token.access_token, + iss, + patientId: token.patient, + }); } fetchAccessToken().catch(console.error); From 0803452d675416c9159bf5f30ecf5930a7760884 Mon Sep 17 00:00:00 2001 From: bprize15 Date: Wed, 2 Oct 2024 16:48:07 -0400 Subject: [PATCH 4/4] add onckb vizualizer package --- package.json | 1 + .../oncokb/config/SecurityConfiguration.java | 2 +- .../AnnotationVisualisation.tsx | 566 + .../annotationVisualization/alert/Alert.scss | 37 + .../annotationVisualization/alert/Alert.tsx | 33 + .../config/constants.ts | 570 + .../config/html2pdf.d.ts | 1 + .../annotationVisualization/config/utils.tsx | 1082 ++ .../dropdown/Dropdown.scss | 83 + .../dropdown/Dropdown.tsx | 64 + .../notifications/notifications.tsx | 56 + .../notifications/styles.scss | 42 + .../readMore/ReadMore.tsx | 40 + .../readMore/styles.scss | 16 + .../styles/index.module.scss | 73 + .../styles/variables.scss | 47 + .../tables/GenePageTable.tsx | 72 + .../tables/OncoKBTable.scss | 174 + .../tables/OncoKBTable.tsx | 148 + .../tables/ReactTable.scss | 10922 ++++++++++++++++ .../annotationVisualization/tabs/Tab.tsx | 13 + .../tabs/TabNumbers.tsx | 37 + .../annotationVisualization/tabs/Tabs.tsx | 175 + .../annotationVisualization/tabs/styles.scss | 100 + .../webapp/app/components/public/logo.png | Bin 0 -> 3815 bytes src/main/webapp/app/config/constants.tsx | 3 + .../webapp/app/pages/epic/EpicAnnotate.tsx | 47 +- yarn.lock | 121 +- 28 files changed, 14520 insertions(+), 5 deletions(-) create mode 100644 src/main/webapp/app/components/annotationVisualization/AnnotationVisualisation.tsx create mode 100644 src/main/webapp/app/components/annotationVisualization/alert/Alert.scss create mode 100644 src/main/webapp/app/components/annotationVisualization/alert/Alert.tsx create mode 100644 src/main/webapp/app/components/annotationVisualization/config/constants.ts create mode 100644 src/main/webapp/app/components/annotationVisualization/config/html2pdf.d.ts create mode 100644 src/main/webapp/app/components/annotationVisualization/config/utils.tsx create mode 100644 src/main/webapp/app/components/annotationVisualization/dropdown/Dropdown.scss create mode 100644 src/main/webapp/app/components/annotationVisualization/dropdown/Dropdown.tsx create mode 100644 src/main/webapp/app/components/annotationVisualization/notifications/notifications.tsx create mode 100644 src/main/webapp/app/components/annotationVisualization/notifications/styles.scss create mode 100644 src/main/webapp/app/components/annotationVisualization/readMore/ReadMore.tsx create mode 100644 src/main/webapp/app/components/annotationVisualization/readMore/styles.scss create mode 100644 src/main/webapp/app/components/annotationVisualization/styles/index.module.scss create mode 100644 src/main/webapp/app/components/annotationVisualization/styles/variables.scss create mode 100644 src/main/webapp/app/components/annotationVisualization/tables/GenePageTable.tsx create mode 100644 src/main/webapp/app/components/annotationVisualization/tables/OncoKBTable.scss create mode 100644 src/main/webapp/app/components/annotationVisualization/tables/OncoKBTable.tsx create mode 100644 src/main/webapp/app/components/annotationVisualization/tables/ReactTable.scss create mode 100644 src/main/webapp/app/components/annotationVisualization/tabs/Tab.tsx create mode 100644 src/main/webapp/app/components/annotationVisualization/tabs/TabNumbers.tsx create mode 100644 src/main/webapp/app/components/annotationVisualization/tabs/Tabs.tsx create mode 100644 src/main/webapp/app/components/annotationVisualization/tabs/styles.scss create mode 100644 src/main/webapp/app/components/public/logo.png diff --git a/package.json b/package.json index 8ab5dc302..071ac81d7 100644 --- a/package.json +++ b/package.json @@ -41,6 +41,7 @@ "mobx": "^3.1.11", "mobx-react": "^4.2.1", "mobx-react-router": "^4.0.7", + "html2pdf.js": "^0.10.2", "moment": "2.29.4", "oncokb-styles": "~1.4.0-alpha.0", "pluralize": "^8.0.0", diff --git a/src/main/java/org/mskcc/cbio/oncokb/config/SecurityConfiguration.java b/src/main/java/org/mskcc/cbio/oncokb/config/SecurityConfiguration.java index 421dd6175..bf00357f6 100644 --- a/src/main/java/org/mskcc/cbio/oncokb/config/SecurityConfiguration.java +++ b/src/main/java/org/mskcc/cbio/oncokb/config/SecurityConfiguration.java @@ -76,7 +76,7 @@ public void configure(HttpSecurity http) throws Exception { .featurePolicy("geolocation 'none'; midi 'none'; sync-xhr 'none'; microphone 'none'; camera 'none'; magnetometer 'none'; gyroscope 'none'; speaker 'none'; fullscreen 'self'; payment 'none'") .and() .frameOptions() - .deny() + .disable() .and() .sessionManagement() .sessionCreationPolicy(SessionCreationPolicy.STATELESS) diff --git a/src/main/webapp/app/components/annotationVisualization/AnnotationVisualisation.tsx b/src/main/webapp/app/components/annotationVisualization/AnnotationVisualisation.tsx new file mode 100644 index 000000000..c8fb1b1f9 --- /dev/null +++ b/src/main/webapp/app/components/annotationVisualization/AnnotationVisualisation.tsx @@ -0,0 +1,566 @@ +/* eslint-disable @typescript-eslint/no-use-before-define */ +import * as React from 'react'; +import { COLOR_BLUE } from 'app/config/theme'; +import { SearchColumn } from '../oncokbTable/OncoKBTable'; +import { computed } from 'mobx'; +import { getDefaultColumnDefinition, filterByKeyword } from './config/utils'; +import { + AnnotationImplication, + TreatmentImplication, + NotificationImplication, + Drug, + APIResponse, + ColumnOption, + Treatment, +} from './config/constants'; +import Tab from './tabs/Tab'; +import Tabs from './tabs/Tabs'; +import './styles/index.module.scss'; +import TabNumbers from './tabs/TabNumbers'; +import { + defaultAnnotationColumns, + defaultTreatmentColumns, + ANNOTATION_TYPE, + annotationColumns, + treatmentColumns, + PatientInfo, +} from './config/constants'; +import { compareDates, compareVersions } from './config/utils'; +import { GenePageTable } from './tables/GenePageTable'; + +interface Data { + mutationData: APIResponse[]; + copyNumberAlterationData: APIResponse[]; + structuralVariantData: APIResponse[]; +} + +export interface AnnotationVisualisationProps { + data: Data; + patientInfo: PatientInfo; + isPatientInfoVisible?: boolean; + notifications: NotificationImplication[]; +} + +interface MetaData { + lastUpdate: string; + dataVersion: string; +} + +export interface AnnotationVisualisationState { + selectedAnnotationColumns: string[]; + selectedTreatmentColumns: string[]; + viewportWidth: number; +} +export class AnnotationVisualisation extends React.Component< + AnnotationVisualisationProps, + AnnotationVisualisationState +> { + @computed + get mutationsAnnotations(): AnnotationImplication[] { + return this.getAnnotations( + ANNOTATION_TYPE.MUTATION, + this.props.data.mutationData + ); + } + + @computed + get copyNumberAnnotations(): AnnotationImplication[] { + return this.getAnnotations( + ANNOTATION_TYPE.COPY_NUMBER_ALTERATION, + this.props.data.copyNumberAlterationData + ); + } + + @computed + get structuralAnnotations(): AnnotationImplication[] { + return this.getAnnotations( + ANNOTATION_TYPE.STRUCTURAL_VARIANT, + this.props.data.structuralVariantData + ); + } + + @computed + get allAnnotations(): AnnotationImplication[] { + const annotations = [ + ...this.mutationsAnnotations, + ...this.copyNumberAnnotations, + ...this.structuralAnnotations, + ]; + return annotations; + } + + @computed + get mutationsTreatments(): TreatmentImplication[] { + return this.getTreatments( + ANNOTATION_TYPE.MUTATION, + this.props.data.mutationData + ); + } + + @computed + get copyNumberTreatments(): TreatmentImplication[] { + return this.getTreatments( + ANNOTATION_TYPE.COPY_NUMBER_ALTERATION, + this.props.data.copyNumberAlterationData + ); + } + + @computed + get structuralTreatments(): TreatmentImplication[] { + return this.getTreatments( + ANNOTATION_TYPE.STRUCTURAL_VARIANT, + this.props.data.structuralVariantData + ); + } + + @computed + get allTreatments(): TreatmentImplication[] { + return [ + ...this.mutationsTreatments, + ...this.copyNumberTreatments, + ...this.structuralTreatments, + ]; + } + + @computed + get lastUpdateAndVersion(): MetaData { + let latestDate: string | null = null; + let highestVersion: string | null = null; + this.allAnnotations.forEach(annotation => { + if ( + annotation['lastUpdate'] && + compareDates(annotation['lastUpdate'], latestDate) > 0 + ) { + latestDate = annotation['lastUpdate']; + } + + if ( + annotation['dataVersion'] && + compareVersions(annotation['dataVersion'], highestVersion) > 0 + ) { + highestVersion = annotation['dataVersion']; + } + }); + + return { + lastUpdate: latestDate || 'NA', + dataVersion: highestVersion || 'NA', + }; + } + + constructor(props: AnnotationVisualisationProps) { + super(props); + this.state = { + selectedAnnotationColumns: defaultAnnotationColumns, + selectedTreatmentColumns: defaultTreatmentColumns, + viewportWidth: window.innerWidth, + }; + this.handleResize = this.handleResize.bind(this); + } + + componentDidMount(): void { + const savedAnnotationColumns = localStorage.getItem( + 'selectedAnnotationColumns' + ); + const savedTreatmentColumns = localStorage.getItem( + 'selectedTreatmentColumns' + ); + + if (savedAnnotationColumns === null) { + this.setState({ + selectedAnnotationColumns: defaultAnnotationColumns, + }); + } else { + this.setState({ + selectedAnnotationColumns: JSON.parse(savedAnnotationColumns), + }); + } + + if (savedTreatmentColumns === null) { + this.setState({ + selectedTreatmentColumns: defaultTreatmentColumns, + }); + } else { + this.setState({ + selectedTreatmentColumns: JSON.parse(savedTreatmentColumns), + }); + } + window.addEventListener('resize', this.handleResize); + } + componentWillUnmount(): void { + window.removeEventListener('resize', this.handleResize); + } + + handleResize(): void { + this.setState({ viewportWidth: window.innerWidth }); + } + + handleAnnotationColumnsChange = (selectedOptions: ColumnOption[]): void => { + this.setState({ + selectedAnnotationColumns: selectedOptions.map( + (option: ColumnOption) => option.value + ), + }); + localStorage.setItem( + 'selectedAnnotationColumns', + JSON.stringify( + selectedOptions.map((option: ColumnOption) => option.value) + ) + ); + }; + + handleTreatmentColumnsChange = (selectedOptions: ColumnOption[]): void => { + this.setState({ + selectedTreatmentColumns: selectedOptions.map( + (option: ColumnOption) => option.value + ), + }); + localStorage.setItem( + 'selectedTreatmentColumns', + JSON.stringify( + selectedOptions.map((option: ColumnOption) => option.value) + ) + ); + }; + + treatmentTableColumns( + alterationType: string + ): SearchColumn[] { + const selectedKeys = this.state.selectedTreatmentColumns; + const filteredColumns = treatmentColumns.filter(col => + selectedKeys.includes(col.key) + ); + return filteredColumns.map(column => ({ + ...getDefaultColumnDefinition( + column.key, + this.state.viewportWidth, + alterationType + ), + onFilter: (data: TreatmentImplication, keyword) => + filterByKeyword( + data[column.prop as keyof TreatmentImplication], + keyword + ), + })) as SearchColumn[]; + } + + annotationTableColumns( + alterationType: string + ): SearchColumn[] { + const selectedKeys = this.state.selectedAnnotationColumns; + const filteredColumns = annotationColumns.filter(col => + selectedKeys.includes(col.key) + ); + + return filteredColumns.map(column => ({ + ...getDefaultColumnDefinition( + column.key, + this.state.viewportWidth, + alterationType + ), + onFilter: (data: AnnotationImplication, keyword) => + filterByKeyword( + data[column.prop as keyof AnnotationImplication], + keyword + ), + })) as SearchColumn[]; + } + + getTreatments( + annotationType: ANNOTATION_TYPE, + data: APIResponse[] + ): TreatmentImplication[] { + const treatmentsMap: Map = new Map(); + + for (const key of Object.keys(data)) { + if (Object.prototype.hasOwnProperty.call(data, key)) { + const response = data[key]; + + if (!response || !response['treatments']) { + continue; + } + + response['treatments'].forEach((treatment: Treatment) => { + if (!treatment || !treatment['drugs']) { + return; + } + + const biomarker = + response['query']['hugoSymbol'] && response['query']['alteration'] + ? `${response['query']['hugoSymbol']} ${response['query']['alteration']}` + : 'NA'; + const level = treatment['level'] || 'NA'; + const annotation = + response['geneSummary'] || + response['variantSummary'] || + response['tumorTypeSummary'] + ? `${response['geneSummary'] || ''} ${ + response['variantSummary'] || '' + } ${response['tumorTypeSummary'] || ''}` + : 'NA'; + const alterationType = annotationType; + const treatmentFdaLevel = treatment['fdaLevel'] || 'NA'; + const treatmentDescription = treatment['description'] || 'NA'; + + const biomarkerKey = `${biomarker}-${level}`; + + const drugNames = treatment['drugs'] + .map((drug: Drug) => drug['drugName']) + .filter(Boolean); + + if (treatmentsMap.has(biomarkerKey)) { + const existingEntry = treatmentsMap.get(biomarkerKey); + if (existingEntry) { + const existingDrugs = new Set(existingEntry.drug.split(', ')); + drugNames.forEach((drug: string) => existingDrugs.add(drug)); + existingEntry.drug = Array.from(existingDrugs).join(', '); + } + } else { + treatmentsMap.set(biomarkerKey, { + biomarker, + drug: Array.from(new Set(drugNames)).join(', '), + level, + annotation, + alterationType, + treatmentFdaLevel, + treatmentDescription, + }); + } + }); + } + } + + return Array.from(treatmentsMap.values()); + } + + getAnnotations( + annotationType: ANNOTATION_TYPE, + data: APIResponse[] + ): AnnotationImplication[] { + const listData: APIResponse[] = []; + + for (const key of Object.keys(data)) { + if (Object.prototype.hasOwnProperty.call(data, key)) { + const response = data[key]; + listData.push(response); + } + } + + const annotations = listData.map((response: APIResponse) => { + return { + level: response['highestSensitiveLevel'] || 'NA', + gene: response['query']['hugoSymbol'] || 'NA', + mutation: response['query']['alteration'] || 'NA', + consequenceType: response['query']['consequence'] || 'NA', + location: response['query']['proteinStart'] + ? response['query']['proteinStart'] + + (response['query']['proteinEnd'] + ? ',' + response['query']['proteinEnd'] + : '') + : 'NA', + oncogenicity: response['oncogenic'], + biologicalEffect: response['mutationEffect']['knownEffect'] || 'NA', + alterationType: annotationType, + mutationDescription: response['mutationEffect']['description'] || 'NA', + tumorType: response['query']['tumorType'] || 'NA', + fdaLevel: response['highestFdaLevel'] || 'NA', + lastUpdate: response['lastUpdate'], + dataVersion: response['dataVersion'], + }; + }); + + return annotations; + } + + getAPIResponsesList(): APIResponse[] { + return [ + ...this.props.data.mutationData, + ...this.props.data.copyNumberAlterationData, + ...this.props.data.structuralVariantData, + ]; + } + + render() { + return ( + <> + {this.props.isPatientInfoVisible && ( +
+
+

+ {this.props.patientInfo.patientId} +

+
+
+
+ {this.props.patientInfo.age + + ' years, ' + + this.props.patientInfo.gender} +
+
+
+ )} + + + } + > +
+
+ +
+
+ +
+
+
+ + } + > +
+
+ +
+
+ +
+
+
+ + } + > +
+
+ +
+
+ +
+
+
+ + } + > +
+
+ +
+
+ +
+
+
+
+ + ); + } +} diff --git a/src/main/webapp/app/components/annotationVisualization/alert/Alert.scss b/src/main/webapp/app/components/annotationVisualization/alert/Alert.scss new file mode 100644 index 000000000..32907e555 --- /dev/null +++ b/src/main/webapp/app/components/annotationVisualization/alert/Alert.scss @@ -0,0 +1,37 @@ +.alert { + display: flex; + align-items: center; + padding: 1rem; + border: 1px solid transparent; + border-radius: 0.25rem; + min-height: 3rem; + box-shadow: 0px 4px 8px rgba(0, 0, 0, 0.1); + background-color: white; + text-align: left; + .mr-2 { + padding-right: 0.8rem; + } + &-danger { + color: #721c24; + background-color: #f8d7da; + border-color: #f5c6cb; + } + + &-primary { + color: #004085; + background-color: #cce5ff; + border-color: #b8daff; + } + + &-warning { + color: #856404; + background-color: #fff3cd; + border-color: #ffeeba; + } + + &-success { + color: #155724; + background-color: #d4edda; + border-color: #c3e6cb; + } +} diff --git a/src/main/webapp/app/components/annotationVisualization/alert/Alert.tsx b/src/main/webapp/app/components/annotationVisualization/alert/Alert.tsx new file mode 100644 index 000000000..d2abf09e9 --- /dev/null +++ b/src/main/webapp/app/components/annotationVisualization/alert/Alert.tsx @@ -0,0 +1,33 @@ +import React from 'react'; +import './Alert.scss'; + +export interface NotificationImplication { + message: string; + type: 'danger' | 'primary' | 'warning' | 'success'; +} + +interface AlertProps { + notification: NotificationImplication; +} + +export enum NotificationType { + 'danger' = 'exclamation-circle', + 'primary' = 'info-circle', + 'warning' = 'exclamation-triangle', + 'success' = 'check', +} + +const Alert: React.FC = ({ notification }) => { + return ( +
+ + {notification.message} +
+ ); +}; + +export default Alert; diff --git a/src/main/webapp/app/components/annotationVisualization/config/constants.ts b/src/main/webapp/app/components/annotationVisualization/config/constants.ts new file mode 100644 index 000000000..e60f80a1a --- /dev/null +++ b/src/main/webapp/app/components/annotationVisualization/config/constants.ts @@ -0,0 +1,570 @@ +import { default as URL } from 'url'; +// import { ActionMeta, ValueType } from 'react-select/src/types'; // tslint:disable-line no-submodule-imports + +export const ONCOGENIC_MUTATIONS = 'Oncogenic Mutations'; +export const FUSIONS = 'Fusions'; +export const TRUNCATING_MUTATIONS = 'Truncating Mutations'; +export const GAIN_OF_FUNCTION_MUTATIONS = 'Gain-of-function Mutations'; +export const LOSS_OF_FUNCTION_MUTATIONS = 'Loss-of-function Mutations'; +export const SWITCH_OF_FUNCTION_MUTATIONS = 'Switch-of-function Mutations'; + +export const CATEGORICAL_ALTERATIONS = [ + ONCOGENIC_MUTATIONS, + FUSIONS, + TRUNCATING_MUTATIONS, + GAIN_OF_FUNCTION_MUTATIONS, + LOSS_OF_FUNCTION_MUTATIONS, + SWITCH_OF_FUNCTION_MUTATIONS, +]; + +export enum ANNOTATION_TYPE { + MUTATION = 'MUTATION', + COPY_NUMBER_ALTERATION = 'COPY_NUMBER_ALTERATION', + STRUCTURAL_VARIANT = 'STRUCTURAL_VARIANT', +} + +type AnnotationPageSearchQueries = { + refGenome?: REFERENCE_GENOME; + tumorType?: string; +}; +type AnnotationPageHashQueries = { + tab?: ANNOTATION_PAGE_TAB_KEYS; +}; + +export type GenePageSearchQueries = AnnotationPageSearchQueries & + Record; +export type GenePageHashQueries = AnnotationPageHashQueries & + Record; + +export type AlterationPageSearchQueries = AnnotationPageSearchQueries & + Record; +export type AlterationPageHashQueries = AnnotationPageHashQueries & + Record; + +export enum ANNOTATION_PAGE_TAB_KEYS { + BIOLOGICAL = 'Biological', + TX = 'Tx', + DX = 'Dx', + PX = 'Px', + FDA = 'FDA', +} + +export enum Version { + V1 = 'V1', + V2 = 'V2', + FDA = 'FDA', + FDA_NGS = 'FDA_NGS', + AAC = 'AAC', + DX = 'DX', + PX = 'PX', +} + +export enum REFERENCE_GENOME { + GRCh37 = 'GRCh37', + GRCh38 = 'GRCh38', +} + +export const DEFAULT_REFERENCE_GENOME = REFERENCE_GENOME.GRCh37; + +export const HOSTNAME = 'http://localhost:9090'; + +export enum PAGE_ROUTE { + GENE_HEADER = '/gene', + DX = '/diagnostic-levels', + PX = '/prognostic-levels', + V2 = '/therapeutic-levels', + FDA_NGS = '/fda-levels', +} + +export enum PAGE_TITLE { + V1 = 'OncoKBâ„¢ Therapeutic Level of Evidence V1', + V2 = 'OncoKBâ„¢ Therapeutic Level of Evidence V2', + FDA = 'Mapping between the OncoKBâ„¢ Levels of Evidence and the FDA Levels of Evidence', + AAC = 'Mapping between the OncoKBâ„¢ Levels of Evidence and the AMP/ASCO/CAP Consensus Recommendation', + FDA_NGS = 'FDA fact sheet', +} + +export enum MUTATIONS_TABLE_COLUMN_KEY { + GENE = 'GENE', + MUTATION = 'MUTATION', + CONSEQUENCE_TYPE = 'CONSEQUENCE_TYPE', + LOCATION = 'LOCATION', + ONCOGENICITY = 'ONCOGENICITY', + BIOLOGICAL_EFFECT = 'BIOLOGICAL_EFFECT', + LEVEL = 'LEVEL', + MUTATION_DESCRIPTION = 'MUTATION_DESCRIPTION', + TUMOR_TYPE = 'TUMOR_TYPE', + FDA_LEVEL = 'FDA_LEVEL', +} +export enum TREATMENTS_TABLE_COLUMN_KEY { + BIOMARKER = 'BIOMARKER', + DRUG = 'DRUG', + TREATMENTS_LEVEL = 'TREATMENTS_LEVEL', + ANNOTATION = 'ANNOTATION', + TREATMENT_FDA_LEVEL = 'TREATMENT_FDA_LEVEL', + TREATMENT_DESCRIPTION = 'TREATMENT_DESCRIPTION', +} +export const TOOLTIP_MAX_HEIGHT = 300; +export const LG_TABLE_FIXED_HEIGHT = 640; +export const THRESHOLD_TABLE_FIXED_HEIGHT = 15; +export const LONG_TEXT_CUTOFF = 200; + +export enum ONCOGENICITY { + ONCOGENIC = 'Oncogenic', + LIKELY_ONCOGENIC = 'Likely Oncogenic', + PREDICTED_ONCOGENIC = 'Predicted Oncogenic', + RESISTANCE = 'Resistance', + LIKELY_NEUTRAL = 'Likely Neutral', + NEUTRAL = 'Neutral', + INCONCLUSIVE = 'Inconclusive', + UNKNOWN = 'Unknown', +} + +export enum MUTATION_EFFECT { + GAIN_OF_FUNCTION = 'Gain-of-function', + LIKELY_GAIN_OF_FUNCTION = 'Likely Gain-of-function', + LOSS_OF_FUNCTION = 'Loss-of-function', + LIKELY_LOSS_OF_FUNCTION = 'Likely Loss-of-function', + SWITCH_OF_FUNCTION = 'Switch-of-function', + LIKELY_SWITCH_OF_FUNCTION = 'Likely Switch-of-function', + NEUTRAL = 'Neutral', + LIKELY_NEUTRAL = 'Likely Neutral', + INCONCLUSIVE = 'Inconclusive', + UNKNOWN = 'Unknown', +} + +type ValueType = T; +type ActionMeta = { action: string; name: string }; + +export type HandleColumnsChange = ( + /* eslint-disable @typescript-eslint/ban-ts-comment */ + // @ts-ignore + value: ValueType, + /* eslint-disable @typescript-eslint/ban-ts-comment */ + // @ts-ignore + actionMeta?: ActionMeta +) => void; + +export interface ColumnOption { + value: TREATMENTS_TABLE_COLUMN_KEY | MUTATIONS_TABLE_COLUMN_KEY; + label: string | undefined; +} + +export const treatmentColumns = [ + { + key: TREATMENTS_TABLE_COLUMN_KEY.BIOMARKER, + label: 'Biomarker', + prop: 'biomarker', + }, + { key: TREATMENTS_TABLE_COLUMN_KEY.DRUG, label: 'Drug', prop: 'drug' }, + { + key: TREATMENTS_TABLE_COLUMN_KEY.TREATMENTS_LEVEL, + label: 'Treatments level', + prop: 'treatmentLevel', + }, + { + key: TREATMENTS_TABLE_COLUMN_KEY.ANNOTATION, + label: 'Annotation', + prop: 'annotation', + }, + { + key: TREATMENTS_TABLE_COLUMN_KEY.TREATMENT_FDA_LEVEL, + label: 'Treatment FDA Level', + prop: 'treatmentFdaLevel', + }, +]; + +export const annotationColumns = [ + { key: MUTATIONS_TABLE_COLUMN_KEY.GENE, label: 'Gene', prop: 'gene' }, + { + key: MUTATIONS_TABLE_COLUMN_KEY.MUTATION, + label: 'Mutation', + prop: 'mutation', + }, + { + key: MUTATIONS_TABLE_COLUMN_KEY.ONCOGENICITY, + label: 'Oncogenicity', + prop: 'oncogenicity', + }, + { + key: MUTATIONS_TABLE_COLUMN_KEY.LEVEL, + label: 'Level of Evidence', + prop: 'level', + }, + { + key: MUTATIONS_TABLE_COLUMN_KEY.BIOLOGICAL_EFFECT, + label: 'Biological Effect', + prop: 'biologicalEffect', + }, + { + key: MUTATIONS_TABLE_COLUMN_KEY.MUTATION_DESCRIPTION, + label: 'Description', + prop: 'mutationDescription', + }, + + { + key: MUTATIONS_TABLE_COLUMN_KEY.LOCATION, + label: 'Location', + prop: 'location', + }, + { + key: MUTATIONS_TABLE_COLUMN_KEY.CONSEQUENCE_TYPE, + label: 'Consequence Type', + prop: 'consequenceType', + }, + { + key: MUTATIONS_TABLE_COLUMN_KEY.TUMOR_TYPE, + label: 'Tumor Type', + prop: 'tumorType', + }, + { + key: MUTATIONS_TABLE_COLUMN_KEY.FDA_LEVEL, + label: 'FDA Level', + prop: 'fdaLevel', + }, +]; + +export const defaultAnnotationColumns = [ + MUTATIONS_TABLE_COLUMN_KEY.GENE, + MUTATIONS_TABLE_COLUMN_KEY.MUTATION, + MUTATIONS_TABLE_COLUMN_KEY.ONCOGENICITY, + MUTATIONS_TABLE_COLUMN_KEY.LEVEL, + MUTATIONS_TABLE_COLUMN_KEY.BIOLOGICAL_EFFECT, + MUTATIONS_TABLE_COLUMN_KEY.MUTATION_DESCRIPTION, +]; +export const defaultTreatmentColumns = [ + TREATMENTS_TABLE_COLUMN_KEY.BIOMARKER, + TREATMENTS_TABLE_COLUMN_KEY.DRUG, + TREATMENTS_TABLE_COLUMN_KEY.TREATMENTS_LEVEL, + TREATMENTS_TABLE_COLUMN_KEY.ANNOTATION, +]; + +export enum NOTIFICATION_TYPE { + INFO = 'primary', + ERROR = 'danger', + WARNING = 'warning', + SUCCESS = 'success', +} + +export type ProcessedData = { + level: string; + gene: string; + mutation: string; + oncogenicity: string; + biologicalEffect: string; + alterationType: string; + tumorType: string; +}; + +export type ProcessedTreatmentData = { + biomarker: string; + drugNames: string[]; + annotation: string; + alterationType: string; + level: string; +}; + +export type AnnotationImplication = { + level: string; + gene: string; + mutation: string; + consequenceType: string; + location: string; + oncogenicity: string; + biologicalEffect: string; + alterationType: string; + mutationDescription: string; + tumorType: string; + fdaLevel: string; + lastUpdate: string; + dataVersion: string; +}; + +export type TreatmentImplication = { + biomarker: string; + drug: string; + level: string; + annotation: string; + alterationType: string; + treatmentFdaLevel: string; + treatmentDescription: string; +}; + +export type TreatmentImplicationKeys = keyof TreatmentImplication; +export type AnnotationImplicationKeys = keyof AnnotationImplication; + +export type NotificationImplication = { + message: string; + type: 'danger' | 'primary' | 'warning' | 'success'; + alterationType: string; +}; + +export type PatientInfo = { + patientId: string; + age: string; + gender: string; +}; + +export type QueryParams = { + [key: string]: undefined | null | string | string[]; +}; + +export type BuildUrlParams = { + pathname: string; + query?: QueryParams; + hash?: string; +}; + +export function getNCBIlink( + pathnameOrParams?: BuildUrlParams | string +): string { + const params = + typeof pathnameOrParams === 'string' + ? { pathname: pathnameOrParams } + : pathnameOrParams; + return URL.format({ + protocol: 'https', + host: 'www.ncbi.nlm.nih.gov', + ...params, + }); +} + +export function getNCTlink(pathnameOrParams?: BuildUrlParams | string): string { + const params = + typeof pathnameOrParams === 'string' + ? { pathname: pathnameOrParams } + : pathnameOrParams; + return URL.format({ + protocol: 'https', + host: 'www.clinicaltrials.gov', + ...params, + }); +} + +// example reference groups to capture: +// (PMID: 11900253) +// (PMID: 11753428, 16007150, 21467160) +// (NCT1234567) +export const REF_CAPTURE = /(\(\s*(?:PMID|NCT|Abstract):?.*?\))/i; + +export enum LEVEL_TYPES { + TX = 'Tx', + DX = 'Dx', + PX = 'Px', + FDA = 'FDA', +} + +export enum LEVELS { + Dx1 = 'Dx1', + Dx2 = 'Dx2', + Dx3 = 'Dx3', + Px1 = 'Px1', + Px2 = 'Px2', + Px3 = 'Px3', + Tx1 = '1', + Tx2 = '2', + Tx3 = '3', + Tx3A = '3A', + Tx3B = '3B', + Tx4 = '4', + R1 = 'R1', + R2 = 'R2', + Fda1 = 'Fda1', + Fda2 = 'Fda2', + Fda3 = 'Fda3', + NA = 'NA', +} + +export const LEVEL_PRIORITY: LEVELS[] = [ + LEVELS.Fda3, + LEVELS.Fda2, + LEVELS.Fda1, + LEVELS.Px3, + LEVELS.Px2, + LEVELS.Px1, + LEVELS.Dx3, + LEVELS.Dx2, + LEVELS.Dx1, + LEVELS.R2, + LEVELS.Tx4, + LEVELS.Tx3B, + LEVELS.Tx3A, + LEVELS.Tx3, + LEVELS.Tx2, + LEVELS.R1, + LEVELS.Tx1, + LEVELS.NA, +]; + +export type InfoLevel = { + colorHex: string; + + description: string; + + htmlDescription: string; + + levelOfEvidence: + | 'LEVEL_1' + | 'LEVEL_2' + | 'LEVEL_3A' + | 'LEVEL_3B' + | 'LEVEL_4' + | 'LEVEL_R1' + | 'LEVEL_R2' + | 'LEVEL_Px1' + | 'LEVEL_Px2' + | 'LEVEL_Px3' + | 'LEVEL_Dx1' + | 'LEVEL_Dx2' + | 'LEVEL_Dx3' + | 'LEVEL_Fda1' + | 'LEVEL_Fda2' + | 'LEVEL_Fda3' + | 'NO'; +}; + +export type Gene = { + entrezGeneId: number; + + geneAliases: Array; + + genesets: Array; + + grch37Isoform: string; + + grch37RefSeq: string; + + grch38Isoform: string; + + grch38RefSeq: string; + + hugoSymbol: string; + + oncogene: boolean; + + tsg: boolean; +}; + +export type Geneset = { + genes: Array; + + id: number; + + name: string; + + uuid: string; +}; + +export type VariantConsequence = { + description: string; + + isGenerallyTruncating: boolean; + + term: string; +}; + +export type Alteration = { + alteration: string; + + consequence: VariantConsequence; + + gene: Gene; + + name: string; + + proteinEnd: number; + + proteinStart: number; + + refResidues: string; + + referenceGenomes: Array<'GRCh37' | 'GRCh38'>; + + variantResidues: string; +}; + +interface MutationEffect { + knownEffect: string; + description: string; + citations: { + pmids: string[]; + abstracts: { + link: string; + abstract: string; + }[]; + }; +} + +export interface Drug { + ncitCode: string; + drugName: string; +} + +export interface Treatment { + alterations: string[]; + drugs: Drug[]; + approvedIndications: unknown[]; + level: string; + fdaLevel: string; + levelAssociatedCancerType: { + id: number; + code: string; + color: string; + name: string; + mainType: { + id: number | null; + name: string; + tumorForm: string; + }; + tissue: string; + children: unknown; + parent: unknown; + level: number; + tumorForm: string; + }; + levelExcludedCancerTypes: unknown[]; + pmids: string[]; + abstracts: unknown[]; + description: string; +} + +export interface APIResponse { + query: { + id: string | null; + referenceGenome: string; + hugoSymbol: string; + entrezGeneId: number; + alteration: string; + alterationType: string; + svType: string | null; + tumorType: string; + consequence: string | null; + proteinStart: string | null; + proteinEnd: string | null; + hgvs: string | null; + }; + geneExist: boolean; + variantExist: boolean; + alleleExist: boolean; + oncogenic: string; + mutationEffect: MutationEffect; + highestSensitiveLevel: string; + highestResistanceLevel: string | null; + highestDiagnosticImplicationLevel: string | null; + highestPrognosticImplicationLevel: string | null; + highestFdaLevel: string; + otherSignificantSensitiveLevels: unknown[]; + otherSignificantResistanceLevels: unknown[]; + hotspot: boolean; + geneSummary: string; + variantSummary: string; + tumorTypeSummary: string; + prognosticSummary: string; + diagnosticSummary: string; + diagnosticImplications: unknown[]; + prognosticImplications: unknown[]; + treatments: Treatment[]; + dataVersion: string; + lastUpdate: string; + vus: boolean; +} diff --git a/src/main/webapp/app/components/annotationVisualization/config/html2pdf.d.ts b/src/main/webapp/app/components/annotationVisualization/config/html2pdf.d.ts new file mode 100644 index 000000000..1baef22d9 --- /dev/null +++ b/src/main/webapp/app/components/annotationVisualization/config/html2pdf.d.ts @@ -0,0 +1 @@ +declare module 'html2pdf.js'; diff --git a/src/main/webapp/app/components/annotationVisualization/config/utils.tsx b/src/main/webapp/app/components/annotationVisualization/config/utils.tsx new file mode 100644 index 000000000..3eacbae7d --- /dev/null +++ b/src/main/webapp/app/components/annotationVisualization/config/utils.tsx @@ -0,0 +1,1082 @@ +import { + LEVEL_PRIORITY, + LEVEL_TYPES, + LEVELS, + MUTATIONS_TABLE_COLUMN_KEY, + ONCOGENICITY, + MUTATION_EFFECT, + TREATMENTS_TABLE_COLUMN_KEY, + ProcessedData, + ProcessedTreatmentData, + TreatmentImplication, + AnnotationImplication, +} from './../config/constants'; +import html2pdf from 'html2pdf.js'; +import InfoIcon from 'app/shared/icons/InfoIcon'; +import { + DEFAULT_REFERENCE_GENOME, + PAGE_ROUTE, + REFERENCE_GENOME, +} from './../config/constants'; +import { PAGE_TITLE } from './../config/constants'; +import { + AlterationPageHashQueries, + AlterationPageSearchQueries, + GenePageHashQueries, + GenePageSearchQueries, + Version, + CATEGORICAL_ALTERATIONS, +} from './../config/constants'; +import * as QueryString from 'querystring'; +import React from 'react'; +import { LevelWithDescription } from 'app/components/LevelWithDescription'; +import { HOSTNAME } from './../config/constants'; +import ReadMore from '../readMore/ReadMore'; +import '../styles/index.module.scss'; +import logoImage from '../../public/logo.png'; +import { COLOR_BLUE } from 'app/config/theme'; + +export interface IAlteration { + alteration: string; + name: string; +} + +export function isCategoricalAlteration(alteration: string): string | boolean { + return ( + alteration && + CATEGORICAL_ALTERATIONS.filter(alt => + alteration.toLowerCase().startsWith(alt.toLowerCase()) + ).length > 0 + ); +} + +export function getCategoricalAlteration( + alteration: string +): string | undefined { + if (isCategoricalAlteration(alteration)) { + const matched = CATEGORICAL_ALTERATIONS.filter(categoricalAlt => { + return alteration.toLowerCase().startsWith(categoricalAlt.toLowerCase()); + }); + return matched.pop(); + } + return alteration; +} + +/** + * + * @param alteration Alteration, either in string or in IAlteration + * @param showNameDiff show alteration when name is different. Default: false + */ +export function getAlterationName( + alteration: IAlteration | string, + showNameDiff?: boolean +): string { + const alt: string = + typeof alteration === 'string' ? alteration : alteration.alteration; + const name: string = + typeof alteration === 'string' ? alteration : alteration.name; + const isCategoricalAlt = isCategoricalAlteration(alt); + const hasExclusionArm = alt.includes('{'); + if ( + !showNameDiff || + alt === name || + isCategoricalAlt || + hasExclusionArm || + name.includes(alt) + ) { + return name; + } else { + return `${name} (${alt})`; + } +} + +const SLASH_HTML_ENTITY_CODE = '%2F'; +export function encodeSlash(content: string | undefined): string | undefined { + return content + ? content.replace(new RegExp('/', 'g'), SLASH_HTML_ENTITY_CODE) + : content; +} + +const getLevelPageLink = (levelType: LEVEL_TYPES, version?: Version) => { + let levelLink = `${HOSTNAME}`; + switch (levelType) { + case LEVEL_TYPES.TX: + levelLink += PAGE_ROUTE.V2; + break; + case LEVEL_TYPES.DX: + levelLink += PAGE_ROUTE.DX; + break; + case LEVEL_TYPES.PX: + levelLink += PAGE_ROUTE.PX; + break; + case LEVEL_TYPES.FDA: + levelLink += PAGE_ROUTE.FDA_NGS; + break; + default: + break; + } + if (version) { + levelLink = `${levelLink}#version=${version}`; + } + return levelLink; +}; + +const getDefaultLinkContent = (levelType: LEVEL_TYPES, version?: Version) => { + let content = ''; + switch (levelType) { + case LEVEL_TYPES.TX: + content = PAGE_TITLE.V2; + if (version) { + switch (version) { + case Version.AAC: + content = PAGE_TITLE.AAC; + break; + case Version.FDA: + content = PAGE_TITLE.FDA; + break; + case Version.V1: + content = PAGE_TITLE.V1; + break; + default: + break; + } + } + break; + case LEVEL_TYPES.DX: + content = PAGE_TITLE.V2; + break; + case LEVEL_TYPES.PX: + content = PAGE_TITLE.V2; + break; + case LEVEL_TYPES.FDA: + content = PAGE_TITLE.FDA_NGS; + break; + default: + content = 'level of evidence'; + break; + } + return content; +}; + +/*eslint-disable @typescript-eslint/no-explicit-any */ +type SortFunction = (a: any, b: any) => number; + +export const LevelOfEvidencePageLink: React.FunctionComponent<{ + levelType: LEVEL_TYPES; + version?: Version; + children?: React.ReactNode; +}> = props => { + return ( + + {props.children ? ( + props.children + ) : ( + {getDefaultLinkContent(props.levelType, props.version)} + )} + + ); +}; + +export const getGenePageLink = (props: { + hugoSymbol: string; + searchQueries?: GenePageSearchQueries; + hashQueries?: GenePageHashQueries; +}): string => { + let pageLink = `${HOSTNAME}${PAGE_ROUTE.GENE_HEADER}/${props.hugoSymbol}`; + if (props.searchQueries && Object.keys(props.searchQueries).length > 0) { + pageLink = `${pageLink}?${QueryString.stringify(props.searchQueries)}`; + } + if (props.hashQueries) { + pageLink = `${pageLink}#${QueryString.stringify(props.hashQueries)}`; + } + return pageLink; +}; + +export const GenePageLink: React.FunctionComponent<{ + hugoSymbol: string; + highlightContent?: boolean; + searchQueries?: GenePageSearchQueries; + hashQueries?: GenePageHashQueries; + onClick?: () => void; + children?: React.ReactNode; +}> = props => { + const highlightContent = + props.highlightContent === undefined ? true : props.highlightContent; + const pageLink = getGenePageLink({ + hugoSymbol: props.hugoSymbol, + searchQueries: props.searchQueries, + hashQueries: props.hashQueries, + }); + return ( + + {props.children ? props.children : props.hugoSymbol} + + ); +}; + +export const getAlterationPageLink = (props: { + hugoSymbol: string; + alteration: IAlteration | string; + alterationRefGenomes?: REFERENCE_GENOME[]; + cancerType?: string; + searchQueries?: AlterationPageSearchQueries; + hashQueries?: AlterationPageHashQueries; +}): string => { + const linkoutAltName = getCategoricalAlteration( + typeof props.alteration === 'string' + ? props.alteration + : props.alteration.name + ); + + let pageLink = `${HOSTNAME}${PAGE_ROUTE.GENE_HEADER}/${props.hugoSymbol}/${linkoutAltName}`; + if (props.cancerType) { + pageLink = `${pageLink}/${encodeSlash(props.cancerType)}`; + } + const sq = props.searchQueries || {}; + + // Prop alterationRefGenomes is just a convenient way to process reference genomes when it's a list. + if (!sq.refGenome && props.alterationRefGenomes) { + if (!props.alterationRefGenomes.includes(DEFAULT_REFERENCE_GENOME)) { + sq.refGenome = props.alterationRefGenomes[0]; + } + } + if (Object.keys(sq).length > 0) { + pageLink = `${pageLink}?${QueryString.stringify(sq)}`; + } + if (props.hashQueries) { + pageLink = `${pageLink}#${QueryString.stringify(props.hashQueries)}`; + } + return pageLink; +}; + +export const AlterationPageLink: React.FunctionComponent<{ + hugoSymbol: string; + alteration: IAlteration | string; + alterationRefGenomes?: REFERENCE_GENOME[]; + cancerType?: string; + searchQueries?: AlterationPageSearchQueries; + hashQueries?: AlterationPageHashQueries; + showGene?: boolean; + onClick?: () => void; + children?: React.ReactNode; +}> = props => { + const alterationName = getAlterationName(props.alteration, true); + const pageLink = getAlterationPageLink({ + hugoSymbol: props.hugoSymbol, + alteration: props.alteration, + alterationRefGenomes: props.alterationRefGenomes, + cancerType: props.cancerType, + searchQueries: props.searchQueries, + hashQueries: props.hashQueries, + }); + return ( + <> + + {props.children + ? props.children + : props.showGene + ? `${props.hugoSymbol} ${alterationName}` + : alterationName} + + + ); +}; + +export function defaultSortMethod( + a: string | ONCOGENICITY | number, + b: string | ONCOGENICITY | number +): number { + // force null and undefined to the bottom + a = a === null || a === undefined ? -Infinity : a; + b = b === null || b === undefined ? -Infinity : b; + + // force any string values to lowercase + a = typeof a === 'string' ? a.toLowerCase() : a; + b = typeof b === 'string' ? b.toLowerCase() : b; + + // Return either 1 or -1 to indicate a sort priority + if (a > b) { + return 1; + } + if (a < b) { + return -1; + } + + // returning 0 or undefined will use any subsequent column sorting methods or the row index as a tiebreaker + return 0; +} + +const oncogenicityOrder = [ + ONCOGENICITY.ONCOGENIC, + ONCOGENICITY.LIKELY_ONCOGENIC, + ONCOGENICITY.PREDICTED_ONCOGENIC, + ONCOGENICITY.RESISTANCE, + ONCOGENICITY.NEUTRAL, + ONCOGENICITY.LIKELY_NEUTRAL, + ONCOGENICITY.INCONCLUSIVE, + ONCOGENICITY.UNKNOWN, +]; +const mutationEffectOrder = [ + MUTATION_EFFECT.GAIN_OF_FUNCTION, + MUTATION_EFFECT.LIKELY_GAIN_OF_FUNCTION, + MUTATION_EFFECT.LOSS_OF_FUNCTION, + MUTATION_EFFECT.LIKELY_LOSS_OF_FUNCTION, + MUTATION_EFFECT.NEUTRAL, + MUTATION_EFFECT.LIKELY_NEUTRAL, + MUTATION_EFFECT.SWITCH_OF_FUNCTION, + MUTATION_EFFECT.LIKELY_SWITCH_OF_FUNCTION, + MUTATION_EFFECT.INCONCLUSIVE, + MUTATION_EFFECT.UNKNOWN, +]; + +export function sortByArrayIndexAsc(aIndex: number, bIndex: number): number { + if (aIndex === bIndex) { + return 0; + } else if (aIndex === -1) { + return 1; + } else if (bIndex === -1) { + return -1; + } else { + return aIndex - bIndex; + } +} + +export function sortByArrayIndexDesc(aIndex: number, bIndex: number): number { + if (aIndex === bIndex) { + return 0; + } else if (aIndex === -1) { + return 1; + } else if (bIndex === -1) { + return -1; + } else { + return bIndex - aIndex; + } +} + +export function oncogenicitySortMethod( + a: ONCOGENICITY, + b: ONCOGENICITY +): number { + return sortByArrayIndexDesc( + oncogenicityOrder.indexOf(a), + oncogenicityOrder.indexOf(b) + ); +} + +export function mutationEffectSortMethod( + a: MUTATION_EFFECT, + b: MUTATION_EFFECT +): number { + return sortByArrayIndexAsc( + mutationEffectOrder.indexOf(a), + mutationEffectOrder.indexOf(b) + ); +} + +export function level2LevelOfEvidence(level: string): string { + switch (level) { + case LEVELS.Tx3: + case LEVELS.Tx3A: + return 'LEVEL_3A'; + default: + return `LEVEL_${level}`; + } +} + +export function OncogenicityToClassnames(oncogenicity: string): string { + if (oncogenicity === 'Predicted Oncogenic') { + return 'likely-oncogenic'; + } else { + const oncogenicityTerms = oncogenicity.split(' '); + return oncogenicityTerms.length === 1 + ? oncogenicityTerms[0].toLowerCase() + : oncogenicityTerms.map(term => term.toLowerCase()).join('-'); + } +} + +export function LevelOfEvidenceToClassnames(level: string): string | null { + if (level.startsWith('LEVEL_')) { + const remainingString = level.substring(6); + return 'level-' + remainingString; + } + return null; +} + +export const FdaLevelIcon: React.FunctionComponent<{ + level: string; + withDescription?: boolean; +}> = ({ level, withDescription = true }) => { + const fdaIcon = level ? ( + + + {level.replace('LEVEL_Fda', '')} + + ) : ( + 'NA' + ); + + let levelDescription = ''; + switch (level) { + case LEVELS.Fda1: + levelDescription = 'Companion Diagnostics'; + break; + case LEVELS.Fda2: + levelDescription = + 'Cancer Mutations with Evidence of Clinical Significance'; + break; + case LEVELS.Fda3: + levelDescription = + 'Cancer Mutations with Evidence of Potential Clinical Significance'; + break; + default: + break; + } + return withDescription && level ? ( + + {fdaIcon} + + ) : ( + <>{fdaIcon} + ); +}; + +export function filterByKeyword( + value: string | undefined | null, + keyword: string +): boolean { + return value ? value.toLowerCase().includes(keyword.trim()) : false; +} + +export const OncoKBLevelIcon: React.FunctionComponent<{ + level: string; + withDescription?: boolean; +}> = ({ level, withDescription = true }) => { + const oncokbIcon = level ? ( + + ) : ( + 'NA' + ); + return withDescription && level ? ( + + {oncokbIcon} + + ) : ( + <>{oncokbIcon} + ); +}; + +export const EvidenceLevelIcon: React.FunctionComponent<{ + level: string; + withDescription?: boolean; +}> = ({ level, withDescription = true }) => { + const oncokbIcon = level ? ( + + ) : ( + 'NA' + ); + return withDescription && level ? ( + + {oncokbIcon} + + ) : ( + <>{oncokbIcon} + ); +}; + +export function getDefaultColumnDefinition( + columnKey: MUTATIONS_TABLE_COLUMN_KEY | TREATMENTS_TABLE_COLUMN_KEY, + viewportWidth: number, + alterationType: string +): + | { + id: string; + Header: React.ReactNode; + accessor: string; + minWidth?: number; + width: number; + style?: React.CSSProperties; + defaultSortDesc: boolean; + Cell?: + | React.FC<{ original: AnnotationImplication }> + | React.FC<{ original: TreatmentImplication }>; + sortMethod?: SortFunction; + sortable?: boolean; + } + | undefined { + switch (columnKey) { + case MUTATIONS_TABLE_COLUMN_KEY.GENE: + return { + id: MUTATIONS_TABLE_COLUMN_KEY.GENE, + Header: Gene, + accessor: 'gene', + width: 100, + minWidth: 100, + defaultSortDesc: false, + sortMethod: defaultSortMethod, + Cell: (props: { original: AnnotationImplication }) => ( + + ), + }; + case MUTATIONS_TABLE_COLUMN_KEY.MUTATION: + return { + id: MUTATIONS_TABLE_COLUMN_KEY.MUTATION, + Header: {alterationType}, + accessor: 'mutation', + width: 120, + minWidth: 120, + defaultSortDesc: false, + sortMethod: defaultSortMethod, + Cell: (props: { original: AnnotationImplication }) => ( + + ), + }; + case MUTATIONS_TABLE_COLUMN_KEY.ONCOGENICITY: + return { + id: MUTATIONS_TABLE_COLUMN_KEY.ONCOGENICITY, + Header: Oncogenicity, + accessor: 'oncogenicity', + width: 150, + minWidth: 150, + defaultSortDesc: true, + sortable: true, + sortMethod: oncogenicitySortMethod, + Cell: (props: { original: AnnotationImplication }) => ( +
+ + + +
+ ), + }; + case MUTATIONS_TABLE_COLUMN_KEY.LEVEL: + return { + id: MUTATIONS_TABLE_COLUMN_KEY.LEVEL, + Header: ( +
+ + Level of evidence + + For more information about the FDA Level of Evidence, please + see{' '} + + HERE + + . + + } + /> + +
+ ), + accessor: 'level', + width: 140, + minWidth: 140, + defaultSortDesc: true, + sortMethod(a: string, b: string) { + return ( + LEVEL_PRIORITY.indexOf(a.replace('LEVEL_', '') as LEVELS) - + LEVEL_PRIORITY.indexOf(b.replace('LEVEL_', '') as LEVELS) + ); + }, + Cell: (props: { original: AnnotationImplication }) => ( +
+ + {props.original.level === 'NA' ? ( + 'NA' + ) : props.original.level[6] === 'F' ? ( + + ) : ( + + )} + +
+ ), + }; + case MUTATIONS_TABLE_COLUMN_KEY.BIOLOGICAL_EFFECT: + return { + id: MUTATIONS_TABLE_COLUMN_KEY.BIOLOGICAL_EFFECT, + Header: Biological effect, + accessor: 'biologicalEffect', + width: 150, + minWidth: 150, + defaultSortDesc: false, + sortable: false, + }; + case MUTATIONS_TABLE_COLUMN_KEY.MUTATION_DESCRIPTION: + return { + id: MUTATIONS_TABLE_COLUMN_KEY.MUTATION_DESCRIPTION, + Header: Description, + accessor: 'mutationDescription', + style: { whiteSpace: 'normal' }, + width: viewportWidth * 0.275, + minWidth: viewportWidth * 0.275, + defaultSortDesc: false, + sortable: false, + Cell: (props: { original: AnnotationImplication }) => ( +
+ {props.original.mutationDescription !== 'NA' ? ( + + ) : ( +
{props.original.mutationDescription}
+ )} +
+ ), + }; + case MUTATIONS_TABLE_COLUMN_KEY.CONSEQUENCE_TYPE: + return { + id: MUTATIONS_TABLE_COLUMN_KEY.CONSEQUENCE_TYPE, + Header: Consequence type, + accessor: 'consequenceType', + style: { whiteSpace: 'normal' }, + width: 150, + minWidth: 150, + defaultSortDesc: false, + sortMethod: defaultSortMethod, + }; + case TREATMENTS_TABLE_COLUMN_KEY.BIOMARKER: + return { + id: TREATMENTS_TABLE_COLUMN_KEY.BIOMARKER, + Header: Biomarker, + accessor: 'biomarker', + style: { whiteSpace: 'normal' }, + width: 150, + minWidth: 150, + defaultSortDesc: false, + sortMethod: defaultSortMethod, + }; + case TREATMENTS_TABLE_COLUMN_KEY.DRUG: + return { + id: TREATMENTS_TABLE_COLUMN_KEY.DRUG, + Header: Drug, + accessor: 'drug', + style: { whiteSpace: 'normal' }, + width: 200, + minWidth: 200, + defaultSortDesc: false, + sortMethod: defaultSortMethod, + Cell: (props: { original: TreatmentImplication }) => ( +
+ {props.original.drug} +
+ ), + }; + case TREATMENTS_TABLE_COLUMN_KEY.TREATMENTS_LEVEL: + return { + id: TREATMENTS_TABLE_COLUMN_KEY.TREATMENTS_LEVEL, + Header: ( +
+
+ Level of evidence + + For more information about the FDA Level of Evidence, please + see{' '} + + HERE + + . + + } + /> +
+
+ ), + accessor: 'treatmentLevel', + width: 150, + minWidth: 150, + defaultSortDesc: true, + sortMethod(a: string, b: string) { + return ( + LEVEL_PRIORITY.indexOf(a.replace('LEVEL_', '') as LEVELS) - + LEVEL_PRIORITY.indexOf(b.replace('LEVEL_', '') as LEVELS) + ); + }, + Cell: (props: { original: AnnotationImplication }) => ( +
+ {props.original.level === 'NA' ? ( + 'NA' + ) : props.original.level[6] === 'F' ? ( + + + + {props.original.level.replace('LEVEL_Fda', '')} + + + ) : ( + + + + )} +
+ ), + }; + case MUTATIONS_TABLE_COLUMN_KEY.LOCATION: + return { + id: MUTATIONS_TABLE_COLUMN_KEY.LOCATION, + Header: Location, + accessor: 'location', + width: 140, + minWidth: 140, + defaultSortDesc: false, + sortable: false, + }; + case TREATMENTS_TABLE_COLUMN_KEY.ANNOTATION: + return { + id: TREATMENTS_TABLE_COLUMN_KEY.ANNOTATION, + Header: Annotation, + accessor: 'annotation', + width: viewportWidth / 2.5, + minWidth: viewportWidth / 2.5, + defaultSortDesc: false, + sortable: false, + Cell: (props: { original: TreatmentImplication }) => ( +
+ {props.original.annotation} +
+ ), + }; + case MUTATIONS_TABLE_COLUMN_KEY.TUMOR_TYPE: + return { + id: MUTATIONS_TABLE_COLUMN_KEY.TUMOR_TYPE, + Header: Tumor type, + accessor: 'tumorType', + style: { whiteSpace: 'normal' }, + width: 130, + minWidth: 130, + defaultSortDesc: false, + sortMethod: defaultSortMethod, + }; + case MUTATIONS_TABLE_COLUMN_KEY.FDA_LEVEL: + return { + id: MUTATIONS_TABLE_COLUMN_KEY.FDA_LEVEL, + Header: FDA level, + accessor: 'fdaLevel', + style: { whiteSpace: 'normal' }, + width: 150, + minWidth: 150, + defaultSortDesc: false, + sortMethod(a: string, b: string) { + return ( + LEVEL_PRIORITY.indexOf(a.replace('LEVEL_', '') as LEVELS) - + LEVEL_PRIORITY.indexOf(b.replace('LEVEL_', '') as LEVELS) + ); + }, + Cell: (props: { original: AnnotationImplication }) => ( +
+ + {props.original.fdaLevel === 'NA' ? ( + 'NA' + ) : ( + + + + {props.original.fdaLevel.replace('LEVEL_Fda', '')} + + + )} + +
+ ), + }; + case TREATMENTS_TABLE_COLUMN_KEY.TREATMENT_FDA_LEVEL: + return { + id: TREATMENTS_TABLE_COLUMN_KEY.TREATMENT_FDA_LEVEL, + Header: FDA level, + accessor: 'treatmentFdaLevel', + style: { whiteSpace: 'normal' }, + width: 130, + minWidth: 130, + defaultSortDesc: false, + sortMethod(a: string, b: string) { + return ( + LEVEL_PRIORITY.indexOf(a.replace('LEVEL_', '') as LEVELS) - + LEVEL_PRIORITY.indexOf(b.replace('LEVEL_', '') as LEVELS) + ); + }, + Cell: (props: { original: TreatmentImplication }) => ( +
+ + {props.original.treatmentFdaLevel === 'NA' ? ( + 'NA' + ) : ( + + + + {props.original.treatmentFdaLevel.replace('LEVEL_Fda', '')} + + + )} + +
+ ), + }; + default: + return undefined; + } +} + +export function shortenTextByCharacters(text: string, cutoff: number): string { + const shortText = (text || '').trim(); + if (shortText.length <= cutoff) { + return shortText; + } else { + const separator = ' '; + const words = (text || '').slice(0, cutoff).split(separator); + words.pop(); + return words.join(separator); + } +} + +export function compareDates( + date1: string | null, + date2: string | null +): number { + const [day1, month1, year1] = + date1 !== null ? date1.split('/').map(Number) : [0, 0, 0]; + const [day2, month2, year2] = + date2 !== null ? date2.split('/').map(Number) : [0, 0, 0]; + + if (year1 !== year2) return year1 - year2; + if (month1 !== month2) return month1 - month2; + return day1 - day2; +} + +export function compareVersions( + version1: string | null, + version2: string | null +): number { + const [major1, minor1] = + version1 !== null ? version1.substring(1).split('.').map(Number) : [0, 0]; + const [major2, minor2] = + version2 !== null ? version2.substring(1).split('.').map(Number) : [0, 0]; + + if (major1 !== major2) return major1 - major2; + return minor1 - minor2; +} + +export function loadImageAsBase64(path: string): Promise { + return new Promise((resolve, reject) => { + const img = new Image(); + img.crossOrigin = 'Anonymous'; + img.src = path; + img.onload = () => { + const c = document.createElement('canvas'); + c.width = img.width; + c.height = img.height; + const ctx = c.getContext('2d'); + ctx?.drawImage(img, 0, 0); + const dataURL = c.toDataURL('image/png'); + resolve(dataURL); + }; + img.onerror = () => + reject(new Error(`Failed to load image at path: ${path}`)); + }); +} + +type PatientData = { + col1: string; + col2: string; + col3: string; + col4: string; +}; + +interface GroupedData { + [key: string]: ProcessedData[]; +} + +interface GroupedTreatmentData { + [key: string]: ProcessedTreatmentData[]; +} + +export const generatePDF = async ( + patientData: PatientData[], + processedData: ProcessedData[], + processedTreatmentData: ProcessedTreatmentData[] +): Promise => { + try { + const logoBase64 = await loadImageAsBase64(logoImage); + const groupedData = processedData.reduce((acc, row) => { + const { alterationType } = row; + if (!acc[alterationType]) { + acc[alterationType] = []; + } + acc[alterationType].push(row); + return acc; + }, {}); + + const groupedTreatmentData = processedTreatmentData.reduce< + GroupedTreatmentData + >((acc, row) => { + const { alterationType } = row; + if (!acc[alterationType]) { + acc[alterationType] = []; + } + acc[alterationType].push(row); + return acc; + }, {}); + + // Create a container for the HTML content + const container = document.createElement('div'); + container.innerHTML = ` +
+
+ +

Sample Report

+
+
+ + + ${patientData + .map( + (item: PatientData) => ` + + + + + + + ` + ) + .join('')} + +
${item.col1}${item.col2}${item.col3}${item.col4}
+
Alterations within the sample
+ + + + + + + + + + + + + ${Object.entries(groupedData) + .map( + ([alterationType, rows]) => ` + + + + ${rows + .map((row, index) => { + const levelClass = LevelOfEvidenceToClassnames(row.level); + const oncogenicityClass = OncogenicityToClassnames( + row.oncogenicity + ); + const backgroundColor = + index % 2 === 0 ? '#f3f3f3' : '#ffffff'; // Alternate row color + return ` + + + + + + + + + `; + }) + .join('')} + ` + ) + .join('')} + +
GeneMutationOncogenicityLevel of EvidenceBiological EffectTumor Type
Alteration Type: ${alterationType}
${row.gene}${row.mutation} +
+ +
+
+
+ +
+
${row.biologicalEffect}${row.tumorType}
+
Treatment for the biomarker
+ + + + + + + + + + ${Object.entries(groupedTreatmentData) + .map( + ([alterationType, rows]) => ` + + + + ${rows + .map((row, index) => { + const backgroundColor = + index % 2 === 0 ? '#f3f3f3' : '#ffffff'; // Alternate row color + return ` + + + + + + `; + }) + .join('')} + ` + ) + .join('')} + +
BiomarkerDrug NamesAnnotation
Alteration Type: ${alterationType}
${row.biomarker}${row.drugNames}${row.annotation}
+ `; + + const opt = { + margin: 1, + filename: 'report.pdf', + image: { type: 'jpeg', quality: 0.98 }, + html2canvas: { scale: 2 }, + jsPDF: { unit: 'in', format: 'letter', orientation: 'portrait' }, + }; + + // Generate PDF from the HTML content + html2pdf().from(container).set(opt).save(); + } catch (error) { + console.error('Failed to generate PDF:', error); + } +}; diff --git a/src/main/webapp/app/components/annotationVisualization/dropdown/Dropdown.scss b/src/main/webapp/app/components/annotationVisualization/dropdown/Dropdown.scss new file mode 100644 index 000000000..ac317520b --- /dev/null +++ b/src/main/webapp/app/components/annotationVisualization/dropdown/Dropdown.scss @@ -0,0 +1,83 @@ +@import '../../../variables.scss'; + +.custom-dropdown { + position: relative; + text-align: right; + + .btn { + background-color: #fff; + border: 1px solid #d5d9d9; + border-radius: 8px; + box-sizing: border-box; + color: #0f1111; + cursor: pointer; + display: inline-block; + font-size: 13px; + line-height: 29px; + padding: 3px 10px 3px 11px; + position: relative; + text-align: center; + text-decoration: none; + vertical-align: middle; + width: 150px; + height: 100%; + } + + .dropdown-menu { + text-align: left; + width: 300px; + background: white; + border: 1px solid #ccc; + border-radius: 4px; + max-height: 15rem; + padding: 15ps; + overflow-y: auto; + position: absolute; + z-index: 1000; + top: 100%; + right: 0; + &::-webkit-scrollbar { + width: 5px; + } + } + &::-webkit-scrollbar-track { + background: #f1f1f1; + } + + &::-webkit-scrollbar-thumb { + background: $grey; + } + + .form-check { + padding: 5px 10px; + } + + .form-check-input { + margin-right: 10px; + } + + .form-check-label { + margin: 0; + } +} + +input[type='checkbox']:checked { + + label:before { + width: 21px; + letter-spacing: 10px; + font-family: FontAwesome; + display: inline-block; + } +} + +@media (max-width: 768px) { + .custom-dropdown { + position: relative; + text-align: left; + margin-left: 0 !important; + .btn { + margin-left: 0; + width: 100%; + } + } +} diff --git a/src/main/webapp/app/components/annotationVisualization/dropdown/Dropdown.tsx b/src/main/webapp/app/components/annotationVisualization/dropdown/Dropdown.tsx new file mode 100644 index 000000000..cf6c0a6ae --- /dev/null +++ b/src/main/webapp/app/components/annotationVisualization/dropdown/Dropdown.tsx @@ -0,0 +1,64 @@ +import React, { useState, useRef } from 'react'; +import './Dropdown.scss'; +import { ColumnOption } from '../config/constants'; + +interface DropdownProps { + options: ColumnOption[]; + selectedOptions: string[]; + onChange: (selectedOptions: ColumnOption[]) => void; +} + +const Dropdown: React.FC = ({ + options, + selectedOptions, + onChange, +}) => { + const [isOpen, setIsOpen] = useState(false); + const dropdownRef = useRef(null); + + const handleToggle = () => { + setIsOpen(!isOpen); + }; + + const handleCheckboxChange = (option: ColumnOption) => { + const newSelectedOptions = selectedOptions.includes(option.value) + ? selectedOptions.filter((item: string) => item !== option.value) + : [...selectedOptions, option.value]; + /* eslint-disable @typescript-eslint/ban-ts-comment */ + //@ts-ignore + onChange(newSelectedOptions.map(value => ({ value }))); + }; + + return ( +
+ + {isOpen && ( +
+ {options.map(option => ( +
+ handleCheckboxChange(option)} + data-testid={`checkbox`} + /> + +
+ ))} +
+ )} +
+ ); +}; + +export default Dropdown; diff --git a/src/main/webapp/app/components/annotationVisualization/notifications/notifications.tsx b/src/main/webapp/app/components/annotationVisualization/notifications/notifications.tsx new file mode 100644 index 000000000..382b9abc3 --- /dev/null +++ b/src/main/webapp/app/components/annotationVisualization/notifications/notifications.tsx @@ -0,0 +1,56 @@ +import React, { useState } from 'react'; +import Alert from './../alert/Alert'; +import './styles.scss'; + +interface NotificationImplication { + message: string; + type: 'danger' | 'primary' | 'warning' | 'success'; +} + +interface NotificationProps { + notifications: NotificationImplication[]; +} + +const Notification: React.FC = ({ notifications }) => { + const [show, setShow] = useState(false); + const [showNotificationsCount, setShowNotificationsCount] = useState(true); + + const toggleShow = () => { + setShow(!show); + if (showNotificationsCount) setShowNotificationsCount(false); + }; + + return ( +
+
+ +
+ {show && ( +
+ {notifications.length > 0 ? ( + notifications.map((notification, index) => ( + + )) + ) : ( + + )} +
+ )} +
+ ); +}; + +export default Notification; diff --git a/src/main/webapp/app/components/annotationVisualization/notifications/styles.scss b/src/main/webapp/app/components/annotationVisualization/notifications/styles.scss new file mode 100644 index 000000000..1983f4b4c --- /dev/null +++ b/src/main/webapp/app/components/annotationVisualization/notifications/styles.scss @@ -0,0 +1,42 @@ +@import '../../../variables'; + +.notification-container { + position: relative; + text-align: right; + + .notification-icon-container { + display: flex; + align-items: center; + justify-content: flex-end; + + .notification-icon { + position: relative; + cursor: pointer; + } + + .notification-badge { + position: absolute; + top: -6px; + left: 10px; + background-color: $danger; + color: #fff; + width: 0.9rem; + height: 0.9rem; + border-radius: 50%; + font-size: 0.6rem; + display: flex; + align-items: center; + justify-content: center; + font-weight: bold; + } + } + + .notification-dropdown { + margin-top: 15px; + position: absolute; + top: 10px; + width: 300px; + right: 0px; + z-index: 1001; + } +} diff --git a/src/main/webapp/app/components/annotationVisualization/readMore/ReadMore.tsx b/src/main/webapp/app/components/annotationVisualization/readMore/ReadMore.tsx new file mode 100644 index 000000000..513347af5 --- /dev/null +++ b/src/main/webapp/app/components/annotationVisualization/readMore/ReadMore.tsx @@ -0,0 +1,40 @@ +import React, { useState } from 'react'; +import './styles.scss'; + +interface ReadMoreCellProps { + text: string; +} + +const ReadMoreCell: React.FC = ({ text }) => { + const [isExpanded, setIsExpanded] = useState(false); + const toggleReadMore = () => setIsExpanded(!isExpanded); + + const renderText = (): JSX.Element => { + if (isExpanded) { + return ( +
+ {text} + + Read less + +
+ ); + } + const limitedText = + text.length > 100 ? text.substring(0, 100) + '...' : text; + return ( + <> + {limitedText} + {text.length > 100 && ( + + Read more + + )} + + ); + }; + + return
{renderText()}
; +}; + +export default ReadMoreCell; diff --git a/src/main/webapp/app/components/annotationVisualization/readMore/styles.scss b/src/main/webapp/app/components/annotationVisualization/readMore/styles.scss new file mode 100644 index 000000000..294dd5506 --- /dev/null +++ b/src/main/webapp/app/components/annotationVisualization/readMore/styles.scss @@ -0,0 +1,16 @@ +@import '../../../variables.scss'; + +.read-more-toggle { + color: $oncokb-blue; + cursor: pointer; + margin-left: 5px; + + &:hover { + text-decoration: underline; + } +} + +.left-align-content { + justify-content: left !important; + text-align: left !important; +} diff --git a/src/main/webapp/app/components/annotationVisualization/styles/index.module.scss b/src/main/webapp/app/components/annotationVisualization/styles/index.module.scss new file mode 100644 index 000000000..e90f62403 --- /dev/null +++ b/src/main/webapp/app/components/annotationVisualization/styles/index.module.scss @@ -0,0 +1,73 @@ +@import 'variables'; + +// Custom styles +.btnLinkText { + @extend .btn-link !optional; + + &:hover { + cursor: pointer; + } +} + +.linkOutText { + color: #0968c3; + cursor: pointer; + + &:hover { + text-decoration: underline; + } +} + +.biggerText { + font-size: 1.2rem; +} + +:global(.btn).actionButton { + border: 1px solid #d3d3d3; + background-color: white; + border-radius: 0.5rem; + width: 100%; + font-size: 1.2rem; +} + +// Overwrite react-responsive-tabs +:global(.RRT__tab) { + z-index: 0 !important; +} + +.nav-link { + color: white; + background-color: #d3d3d3; +} + +.notification-container { + display: flex; + justify-content: flex-end; +} + +.fda-icon-size { + font-size: 5; + + line-height: '10px' !important; +} + +.fa-circle-thin { + color: red !important; +} +.info-icon-overlay { + max-width: 400; + max-height: 400; + padding: 5%; + font-size: 0.8rem; + &::-webkit-scrollbar { + width: 5px; + } + + &::-webkit-scrollbar-track { + background: #f1f1f1; + } + + &::-webkit-scrollbar-thumb { + background: $grey; + } +} diff --git a/src/main/webapp/app/components/annotationVisualization/styles/variables.scss b/src/main/webapp/app/components/annotationVisualization/styles/variables.scss new file mode 100644 index 000000000..91d27be76 --- /dev/null +++ b/src/main/webapp/app/components/annotationVisualization/styles/variables.scss @@ -0,0 +1,47 @@ +@import '~oncokb-styles/scss/vars'; + +$oncokb-font-font-size: 15px; +$oncokb-blue: #0968c3; +/* Overwrite the bootstrap defaults */ +$font-family-sans-serif: 'Gotham Book', serif; +// color overwrite +$blue: $oncokb-blue; +$grey: #808080; // grey +$light-grey: #d3d3d3; // light grey +$primary: $oncokb-blue; +$secondary: $grey; +$warning: #ffc107; +$danger: #dc3545; + +$link-hover-color: $oncokb-darker-blue; +$nav-bg-color: $oncokb-blue; + +$breadcrumb-bg: transparent; +$breadcrumb-padding-x: 0; +$breadcrumb-padding-y: 0; +$breadcrumb-margin-bottom: 0.5rem; + +$navbar-padding-x: 0; + +$navbar-item-border-bottom: 0.5rem; +$navbar-padding-top: $navbar-item-border-bottom; + +$grid-breakpoints: ( + xs: 0, + sm: 576px, + md: 768px, + lg: 1050px, + xl: 1413px, +) !default; + +// we only need to define the max width for xl, smaller size will use the fluid width. +$container-max-widths: ( + xl: 1500px, +) !default; + +// $font-size-base: 1rem; // or your base font size in rem +// $nav-link-padding-y: 0.5rem; // converted value from px to rem + +// $nav-link-height: ($font-size-base * $line-height-base) + ($nav-link-padding-y * 2); + +$bigger-default-font-size: 1.2rem; diff --git a/src/main/webapp/app/components/annotationVisualization/tables/GenePageTable.tsx b/src/main/webapp/app/components/annotationVisualization/tables/GenePageTable.tsx new file mode 100644 index 000000000..cc42be71c --- /dev/null +++ b/src/main/webapp/app/components/annotationVisualization/tables/GenePageTable.tsx @@ -0,0 +1,72 @@ +import OncoKBTable, { SearchColumn } from './OncoKBTable'; +import { + AnnotationImplication, + LG_TABLE_FIXED_HEIGHT, + MUTATIONS_TABLE_COLUMN_KEY, + THRESHOLD_TABLE_FIXED_HEIGHT, + TreatmentImplication, + TREATMENTS_TABLE_COLUMN_KEY, +} from '../config/constants'; +import React from 'react'; +import { SortingRule } from 'react-table'; +import { ColumnOption } from '../config/constants'; + +export const GenePageTable = < + T extends TreatmentImplication | AnnotationImplication +>({ + data, + columns, + isPending, + defaultSorted, + selectedAnnotationColumns, + selectedColumns, + name, + handleColumnsChange, +}: { + data: T[]; + columns: SearchColumn[]; + isPending: boolean; + defaultSorted?: SortingRule[]; + selectedAnnotationColumns: string[]; + selectedColumns: { + key: MUTATIONS_TABLE_COLUMN_KEY | TREATMENTS_TABLE_COLUMN_KEY; + label: string; + prop: string; + }[]; + name: string; + handleColumnsChange: (selectedOptions: ColumnOption[]) => void; +}): JSX.Element => { + return ( + THRESHOLD_TABLE_FIXED_HEIGHT + ? { height: LG_TABLE_FIXED_HEIGHT } + : {} + } + fixedHeight={ + data.length === 0 || selectedAnnotationColumns.length === 0 + ? true + : data.length > THRESHOLD_TABLE_FIXED_HEIGHT + } + defaultSorted={ + defaultSorted || [ + { + id: MUTATIONS_TABLE_COLUMN_KEY.ONCOGENICITY, + desc: true, + }, + ] + } + className={'no-scroll'} + /> + ); +}; diff --git a/src/main/webapp/app/components/annotationVisualization/tables/OncoKBTable.scss b/src/main/webapp/app/components/annotationVisualization/tables/OncoKBTable.scss new file mode 100644 index 000000000..3a0676388 --- /dev/null +++ b/src/main/webapp/app/components/annotationVisualization/tables/OncoKBTable.scss @@ -0,0 +1,174 @@ +@import '../../../variables.scss'; + +.oncoKBTable-container { + .header { + display: flex; + justify-content: space-between; + width: 100%; + margin-bottom: 1rem; + margin-top: 1rem; + + .table-header-left { + color: $oncokb-blue; + font-size: 1.2rem; + display: flex; + align-items: flex-end; + font-weight: bold !important; + flex: 1; + } + + .table-header-right { + display: flex; + align-items: center; + flex: 1; + + .search-container, + .dropdown-container { + flex: 1; + margin-left: 1rem; + } + } + } + + @media (max-width: 768px) { + .header { + flex-direction: column; + align-items: flex-start; + + .table-header-right { + flex-direction: row; + width: 100%; + + .search-container, + .dropdown-container { + width: 100%; + margin-left: 1rem; + margin-top: 1rem; + } + } + } + } + + .text-center { + text-align: center; + } + + .justify-center { + justify-content: center; + } + + .fixedHeight { + max-height: 400px; + overflow-y: scroll; + } +} + +// Overwrite react-table styles +.oncokbReactTable.ReactTable { + .-sort-desc { + box-shadow: none !important; + &:before { + font-family: FontAwesome; + content: '\f0dd'; + float: right; + } + } + + .-sort-asc { + box-shadow: none !important; + &:before { + font-family: FontAwesome; + content: '\f0de'; + float: right; + } + } + + .rt-table { + border: none; + &::-webkit-scrollbar { + height: 0.5em; + } + + &::-webkit-scrollbar-track { + background: #f1f1f1; + } + + &::-webkit-scrollbar-thumb { + background: $light-grey; + } + + .rt-thead { + border: none; + + .rt-resizable-header-content { + border: none; + font-weight: bold; + justify-content: center; + align-items: center; + margin: 15px; + white-space: normal; + word-break: break-word; + } + } + + .rt-tbody { + border: none; + &::-webkit-scrollbar { + width: 0.5rem; + } + + &::-webkit-scrollbar-track { + background: #f1f1f1; + } + + &::-webkit-scrollbar-thumb { + background: $light-grey; + } + + overflow-x: hidden; + overflow-y: hidden; + + &.has-data { + overflow-x: hidden; + overflow-y: auto; + } + + &.no-data { + overflow-x: hidden; + overflow-y: hidden; + } + + .rt-td { + border: none; + text-align: center; + white-space: normal; + word-break: break-word; + min-height: 7vh; + } + } + } +} + +.no-results { + min-height: 15vh; + text-align: center; + align-items: center; + margin-top: 4vh; +} + +.oncokbTable-main { + padding-top: 0.5rem; + padding-bottom: 0.5rem; +} + +.no-results { + min-height: 15vh; + text-align: center; + align-items: center; + margin-top: 4vh; +} + +.oncokbTable-main { + padding-top: 1vh; + padding-bottom: 1vh; +} diff --git a/src/main/webapp/app/components/annotationVisualization/tables/OncoKBTable.tsx b/src/main/webapp/app/components/annotationVisualization/tables/OncoKBTable.tsx new file mode 100644 index 000000000..9dc4665f1 --- /dev/null +++ b/src/main/webapp/app/components/annotationVisualization/tables/OncoKBTable.tsx @@ -0,0 +1,148 @@ +import React from 'react'; +import ReactTable, { Column, TableProps } from 'react-table'; +import { observer } from 'mobx-react'; +import { computed } from 'mobx'; +import classNames from 'classnames'; +import { + ColumnOption, + MUTATIONS_TABLE_COLUMN_KEY, + TREATMENTS_TABLE_COLUMN_KEY, +} from '../config/constants'; +import Dropdown from '../dropdown/Dropdown'; +import './OncoKBTable.scss'; + +export type SearchColumn = Column & { + onFilter?: (data: T, keyword: string) => boolean; +}; + +interface ITableWithSearchBox extends Partial> { + data: T[]; + disableSearch?: boolean; + fixedHeight?: boolean; + showPagination?: boolean; + pageSize?: number; + minRows?: number; + columns: SearchColumn[]; + loading?: boolean; + filters?: React.FunctionComponent; + className?: string; + tableName: string; + selectedColumnsState: string[]; + selectedColumns: { + key: MUTATIONS_TABLE_COLUMN_KEY | TREATMENTS_TABLE_COLUMN_KEY; + label: string; + prop: string; + }[]; + handleColumnsChange: (selectedOptions: ColumnOption[]) => void; +} + +@observer +export default class OncoKBTable extends React.Component< + ITableWithSearchBox, + { searchKeyword: string } +> { + constructor(props: ITableWithSearchBox) { + super(props); + this.state = { + searchKeyword: '', + }; + } + + public static defaultProps = { + disableSearch: false, + showPagination: false, + searchIconClassName: 'fa fa-search', + }; + + @computed + get filteredData(): T[] { + return this.props.data.filter((item: T) => { + const filterableColumns = this.props.columns.filter( + column => column.onFilter + ); + + if (filterableColumns.length > 0) { + return filterableColumns.some( + column => column.onFilter?.(item, this.state.searchKeyword) === true + ); + } else { + return true; + } + }); + } + + componentDidUpdate(): void { + this.toggleOverflowClass(); + } + + componentDidMount(): void { + this.toggleOverflowClass(); + } + + toggleOverflowClass(): void { + const tableBody = document.querySelector( + '.oncoKBTable-container .oncokbTable-main .rt-table .rt-tbody' + ); + if (tableBody) { + if (this.filteredData.length === 0) { + tableBody.classList.add('no-data'); + tableBody.classList.remove('has-data'); + } else { + tableBody.classList.add('has-data'); + tableBody.classList.remove('no-data'); + } + } + } + + render(): JSX.Element { + const NoDataConst = () => ( +
No Results
+ ); + + return ( +
+ {!this.props.disableSearch && ( +
+
{this.props.tableName}
+
+
+ ({ + value: col.key, + label: col.label, + }))} + selectedOptions={this.props.selectedColumnsState} + onChange={this.props.handleColumnsChange} + /> +
+
+ + this.setState({ + searchKeyword: event.target.value.toLowerCase(), + }) + } + className="form-control input-sm search-input" + type="text" + placeholder="Search ..." + /> +
+
+
+ )} +
+ +
+
+ ); + } +} diff --git a/src/main/webapp/app/components/annotationVisualization/tables/ReactTable.scss b/src/main/webapp/app/components/annotationVisualization/tables/ReactTable.scss new file mode 100644 index 000000000..722c34ce2 --- /dev/null +++ b/src/main/webapp/app/components/annotationVisualization/tables/ReactTable.scss @@ -0,0 +1,10922 @@ +/* Overwrite the bootstrap defaults */ +.ReactTable { + position: relative; + display: flex; + flex-direction: column; + border: 1px solid rgba(0, 0, 0, 0.1); +} + +.ReactTable * { + box-sizing: border-box; +} + +.ReactTable .rt-table { + flex: auto 1; + display: flex; + flex-direction: column; + align-items: stretch; + width: 100%; + border-collapse: collapse; + overflow: auto; +} + +.ReactTable .rt-thead { + flex: 1 0 auto; + display: flex; + flex-direction: column; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.ReactTable .rt-thead.-headerGroups { + background: rgba(0, 0, 0, 0.03); + border-bottom: 1px solid rgba(0, 0, 0, 0.05); +} + +.ReactTable .rt-thead.-filters { + border-bottom: 1px solid rgba(0, 0, 0, 0.05); +} + +.ReactTable .rt-thead.-filters input, +.ReactTable .rt-thead.-filters select { + border: 1px solid rgba(0, 0, 0, 0.1); + background: #fff; + padding: 5px 7px; + font-size: inherit; + border-radius: 3px; + font-weight: normal; + outline-width: 0; +} + +.ReactTable .rt-thead.-filters .rt-th { + border-right: 1px solid rgba(0, 0, 0, 0.02); +} + +.ReactTable .rt-thead.-header { + box-shadow: 0 2px 15px 0 rgba(0, 0, 0, 0.15); +} + +.ReactTable .rt-thead .rt-tr { + text-align: center; +} + +.ReactTable .rt-thead .rt-th, +.ReactTable .rt-thead .rt-td { + padding: 5px 5px; + line-height: normal; + position: relative; + border-right: 1px solid rgba(0, 0, 0, 0.05); + transition: box-shadow 0.3s cubic-bezier(0.175, 0.885, 0.32, 1.275); + box-shadow: inset 0 0 0 0 transparent; +} + +.ReactTable .rt-thead .rt-th.-sort-asc, +.ReactTable .rt-thead .rt-td.-sort-asc { + box-shadow: inset 0 3px 0 0 rgba(0, 0, 0, 0.6); +} + +.ReactTable .rt-thead .rt-th.-sort-desc, +.ReactTable .rt-thead .rt-td.-sort-desc { + box-shadow: inset 0 -3px 0 0 rgba(0, 0, 0, 0.6); +} + +.ReactTable .rt-thead .rt-th.-cursor-pointer, +.ReactTable .rt-thead .rt-td.-cursor-pointer { + cursor: pointer; +} + +.ReactTable .rt-thead .rt-th:last-child, +.ReactTable .rt-thead .rt-td:last-child { + border-right: 0; +} + +.ReactTable .rt-thead .rt-th:focus { + outline-width: 0; +} + +.ReactTable .rt-thead .rt-resizable-header { + overflow: visible; +} + +.ReactTable .rt-thead .rt-resizable-header:last-child { + overflow: hidden; +} + +.ReactTable .rt-thead .rt-resizable-header-content { + overflow: hidden; + text-overflow: ellipsis; +} + +.ReactTable .rt-thead .rt-header-pivot { + border-right-color: #f7f7f7; +} + +.ReactTable .rt-thead .rt-header-pivot:after, +.ReactTable .rt-thead .rt-header-pivot:before { + left: 100%; + top: 50%; + border: solid transparent; + content: ' '; + height: 0; + width: 0; + position: absolute; + pointer-events: none; +} + +.ReactTable .rt-thead .rt-header-pivot:after { + border-color: rgba(255, 255, 255, 0); + border-left-color: #fff; + border-width: 8px; + margin-top: -8px; +} + +.ReactTable .rt-thead .rt-header-pivot:before { + border-color: rgba(102, 102, 102, 0); + border-left-color: #f7f7f7; + border-width: 10px; + margin-top: -10px; +} + +.ReactTable .rt-tbody { + flex: 99999 1 auto; + display: flex; + flex-direction: column; + overflow: auto; +} + +.ReactTable .rt-tbody .rt-tr-group { + border-bottom: solid 1px rgba(0, 0, 0, 0.05); +} + +.ReactTable .rt-tbody .rt-tr-group:last-child { + border-bottom: 0; +} + +.ReactTable .rt-tbody .rt-td { + border-right: 1px solid rgba(0, 0, 0, 0.02); +} + +.ReactTable .rt-tbody .rt-td:last-child { + border-right: 0; +} + +.ReactTable .rt-tbody .rt-expandable { + cursor: pointer; + text-overflow: clip; +} + +.ReactTable .rt-tr-group { + flex: 1 0 auto; + display: flex; + flex-direction: column; + align-items: stretch; +} + +.ReactTable .rt-tr { + flex: 1 0 auto; + display: inline-flex; +} + +.ReactTable .rt-th, +.ReactTable .rt-td { + flex: 1 0 0; + white-space: nowrap; + text-overflow: ellipsis; + padding: 7px 5px; + overflow: hidden; + transition: 0.3s ease; + transition-property: width, min-width, padding, opacity; +} + +.ReactTable .rt-th.-hidden, +.ReactTable .rt-td.-hidden { + width: 0 !important; + min-width: 0 !important; + padding: 0 !important; + border: 0 !important; + opacity: 0 !important; +} + +.ReactTable .rt-expander { + display: inline-block; + position: relative; + margin: 0; + color: transparent; + margin: 0 10px; +} + +.ReactTable .rt-expander:after { + content: ''; + position: absolute; + width: 0; + height: 0; + top: 50%; + left: 50%; + transform: translate(-50%, -50%) rotate(-90deg); + border-left: 5.04px solid transparent; + border-right: 5.04px solid transparent; + border-top: 7px solid rgba(0, 0, 0, 0.8); + transition: all 0.3s cubic-bezier(0.175, 0.885, 0.32, 1.275); + cursor: pointer; +} + +.ReactTable .rt-expander.-open:after { + transform: translate(-50%, -50%) rotate(0); +} + +.ReactTable .rt-resizer { + display: inline-block; + position: absolute; + width: 36px; + top: 0; + bottom: 0; + right: -18px; + cursor: col-resize; + z-index: 10; +} + +.ReactTable .rt-tfoot { + flex: 1 0 auto; + display: flex; + flex-direction: column; + box-shadow: 0 0 15px 0 rgba(0, 0, 0, 0.15); +} + +.ReactTable .rt-tfoot .rt-td { + border-right: 1px solid rgba(0, 0, 0, 0.05); +} + +.ReactTable .rt-tfoot .rt-td:last-child { + border-right: 0; +} + +.ReactTable.-striped .rt-tr.-odd { + background: rgba(0, 0, 0, 0.03); +} + +.ReactTable.-highlight .rt-tbody .rt-tr:not(.-padRow):hover { + background: rgba(0, 0, 0, 0.05); +} + +.ReactTable .-pagination { + z-index: 1; + display: flex; + justify-content: space-between; + align-items: stretch; + flex-wrap: wrap; + padding: 3px; + box-shadow: 0 0 15px 0 rgba(0, 0, 0, 0.1); + border-top: 2px solid rgba(0, 0, 0, 0.1); +} + +.ReactTable .-pagination input, +.ReactTable .-pagination select { + border: 1px solid rgba(0, 0, 0, 0.1); + background: #fff; + padding: 5px 7px; + font-size: inherit; + border-radius: 3px; + font-weight: normal; + outline-width: 0; +} + +.ReactTable .-pagination .-btn { + -webkit-appearance: none; + -moz-appearance: none; + appearance: none; + display: block; + width: 100%; + height: 100%; + border: 0; + border-radius: 3px; + padding: 6px; + font-size: 1em; + color: rgba(0, 0, 0, 0.6); + background: rgba(0, 0, 0, 0.1); + transition: all 0.1s ease; + cursor: pointer; + outline-width: 0; +} + +.ReactTable .-pagination .-btn[disabled] { + opacity: 0.5; + cursor: default; +} + +.ReactTable .-pagination .-btn:not([disabled]):hover { + background: rgba(0, 0, 0, 0.3); + color: #fff; +} + +.ReactTable .-pagination .-previous, +.ReactTable .-pagination .-next { + flex: 1; + text-align: center; +} + +.ReactTable .-pagination .-center { + flex: 1.5; + text-align: center; + margin-bottom: 0; + display: flex; + flex-direction: row; + flex-wrap: wrap; + align-items: center; + justify-content: space-around; +} + +.ReactTable .-pagination .-pageInfo { + display: inline-block; + margin: 3px 10px; + white-space: nowrap; +} + +.ReactTable .-pagination .-pageJump { + display: inline-block; +} + +.ReactTable .-pagination .-pageJump input { + width: 70px; + text-align: center; +} + +.ReactTable .-pagination .-pageSizeOptions { + margin: 3px 10px; +} + +.ReactTable .rt-noData { + display: block; + position: absolute; + left: 50%; + top: 50%; + transform: translate(-50%, -50%); + background: rgba(255, 255, 255, 0.8); + transition: all 0.3s ease; + z-index: 1; + pointer-events: none; + padding: 20px; + color: rgba(0, 0, 0, 0.5); +} + +.ReactTable .-loading { + display: block; + position: absolute; + left: 0; + right: 0; + top: 0; + bottom: 0; + background: rgba(255, 255, 255, 0.8); + transition: all 0.3s ease; + z-index: -1; + opacity: 0; + pointer-events: none; +} + +.ReactTable .-loading > div { + position: absolute; + display: block; + text-align: center; + width: 100%; + top: 50%; + left: 0; + font-size: 15px; + color: rgba(0, 0, 0, 0.6); + transform: translateY(-52%); + transition: all 0.3s cubic-bezier(0.25, 0.46, 0.45, 0.94); +} + +.ReactTable .-loading.-active { + opacity: 1; + z-index: 2; + pointer-events: all; +} + +.ReactTable .-loading.-active > div { + transform: translateY(50%); +} + +.ReactTable .rt-resizing .rt-th, +.ReactTable .rt-resizing .rt-td { + transition: none !important; + cursor: col-resize; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +// Overwrite react-table styles +.oncokbReactTable.ReactTable { + .-sort-desc { + box-shadow: none !important; + + &:before { + font-family: FontAwesome; + content: '\f0dd'; + float: right; + } + } + + .-sort-asc { + box-shadow: none !important; + + &:before { + font-family: FontAwesome; + content: '\f0de'; + float: right; + } + } + + .rt-table { + .rt-thead { + .rt-resizable-header-content { + text-align: left; + white-space: normal; + word-break: break-word; + } + } + + .rt-tbody { + .rt-td { + white-space: normal; + word-break: break-word; + } + } + } +} + +.oncokbReactTable.ReactTable.fixedHeight { + .rt-table { + .rt-thead { + .rt-th:last-child { + // We fixed header so the scroll bar on the tbody occupies this width causing the header and body misalignment. + // Adding additional space to the last column of the table to align them. + margin-right: 15px; + } + } + } +} + +.po-tx-table ul { + padding-left: 20px; +} + +.grecaptcha-badge { + z-index: 1; +} + +/* Overwrite the bootstrap defaults */ +/*! + * Bootstrap v4.4.1 (https://getbootstrap.com/) + * Copyright 2011-2019 The Bootstrap Authors + * Copyright 2011-2019 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + */ +:root { + --blue: #0968c3; + --indigo: #6610f2; + --purple: #6f42c1; + --pink: #e83e8c; + --red: #dc3545; + --orange: #fd7e14; + --yellow: #ffc107; + --green: #28a745; + --teal: #20c997; + --cyan: #17a2b8; + --white: #fff; + --gray: #6c757d; + --gray-dark: #343a40; + --primary: #0968c3; + --secondary: #808080; + --success: #28a745; + --info: #17a2b8; + --warning: #ffc107; + --danger: #dc3545; + --light: #f8f9fa; + --dark: #343a40; + --breakpoint-xs: 0; + --breakpoint-sm: 576px; + --breakpoint-md: 768px; + --breakpoint-lg: 1050px; + --breakpoint-xl: 1413px; + --font-family-sans-serif: 'Gotham Book', serif; + --font-family-monospace: SFMono-Regular, Menlo, Monaco, Consolas, + 'Liberation Mono', 'Courier New', monospace; +} + +*, +*::before, +*::after { + box-sizing: border-box; +} + +html { + font-family: sans-serif; + line-height: 1.15; + -webkit-text-size-adjust: 100%; + -webkit-tap-highlight-color: rgba(0, 0, 0, 0); +} + +article, +aside, +figcaption, +figure, +footer, +header, +hgroup, +main, +nav, +section { + display: block; +} + +body { + margin: 0; + font-family: 'Gotham Book', serif; + font-size: 1rem; + font-weight: 400; + line-height: 1.5; + color: #212529; + text-align: left; + background-color: #fff; +} + +[tabindex='-1']:focus:not(:focus-visible) { + outline: 0 !important; +} + +hr { + box-sizing: content-box; + height: 0; + overflow: visible; +} + +h1, +h2, +h3, +h4, +h5, +h6 { + margin-top: 0; + margin-bottom: 0.5rem; +} + +p { + margin-top: 0; + margin-bottom: 1rem; +} + +abbr[title], +abbr[data-original-title] { + text-decoration: underline; + text-decoration: underline dotted; + cursor: help; + border-bottom: 0; + text-decoration-skip-ink: none; +} + +address { + margin-bottom: 1rem; + font-style: normal; + line-height: inherit; +} + +ol, +ul, +dl { + margin-top: 0; + margin-bottom: 1rem; +} + +ol ol, +ul ul, +ol ul, +ul ol { + margin-bottom: 0; +} + +dt { + font-weight: 700; +} + +dd { + margin-bottom: 0.5rem; + margin-left: 0; +} + +blockquote { + margin: 0 0 1rem; +} + +b, +strong { + font-weight: bolder; +} + +small { + font-size: 80%; +} + +sub, +sup { + position: relative; + font-size: 75%; + line-height: 0; + vertical-align: baseline; +} + +sub { + bottom: -0.25em; +} + +sup { + top: -0.5em; +} + +a { + color: #0968c3; + text-decoration: none; + background-color: transparent; +} +a:hover { + color: #0b2569; + text-decoration: underline; +} + +a:not([href]) { + color: inherit; + text-decoration: none; +} +a:not([href]):hover { + color: inherit; + text-decoration: none; +} + +pre, +code, +kbd, +samp { + font-family: SFMono-Regular, Menlo, Monaco, Consolas, 'Liberation Mono', + 'Courier New', monospace; + font-size: 1em; +} + +pre { + margin-top: 0; + margin-bottom: 1rem; + overflow: auto; +} + +figure { + margin: 0 0 1rem; +} + +img { + vertical-align: middle; + border-style: none; +} + +svg { + overflow: hidden; + vertical-align: middle; +} + +table { + border-collapse: collapse; +} + +caption { + padding-top: 0.75rem; + padding-bottom: 0.75rem; + color: #6c757d; + text-align: left; + caption-side: bottom; +} + +th { + text-align: inherit; +} + +label { + display: inline-block; + margin-bottom: 0.5rem; +} + +button { + border-radius: 0; +} + +button:focus { + outline: 1px dotted; + outline: 5px auto -webkit-focus-ring-color; +} + +input, +button, +select, +optgroup, +textarea { + margin: 0; + font-family: inherit; + font-size: inherit; + line-height: inherit; +} + +button, +input { + overflow: visible; +} + +button, +select { + text-transform: none; +} + +select { + word-wrap: normal; +} + +button, +[type='button'], +[type='reset'], +[type='submit'] { + -webkit-appearance: button; +} + +button:not(:disabled), +[type='button']:not(:disabled), +[type='reset']:not(:disabled), +[type='submit']:not(:disabled) { + cursor: pointer; +} + +button::-moz-focus-inner, +[type='button']::-moz-focus-inner, +[type='reset']::-moz-focus-inner, +[type='submit']::-moz-focus-inner { + padding: 0; + border-style: none; +} + +input[type='radio'], +input[type='checkbox'] { + box-sizing: border-box; + padding: 0; +} + +input[type='date'], +input[type='time'], +input[type='datetime-local'], +input[type='month'] { + -webkit-appearance: listbox; +} + +textarea { + overflow: auto; + resize: vertical; +} + +fieldset { + min-width: 0; + padding: 0; + margin: 0; + border: 0; +} + +legend { + display: block; + width: 100%; + max-width: 100%; + padding: 0; + margin-bottom: 0.5rem; + font-size: 1.5rem; + line-height: inherit; + color: inherit; + white-space: normal; +} + +progress { + vertical-align: baseline; +} + +[type='number']::-webkit-inner-spin-button, +[type='number']::-webkit-outer-spin-button { + height: auto; +} + +[type='search'] { + outline-offset: -2px; + -webkit-appearance: none; +} + +[type='search']::-webkit-search-decoration { + -webkit-appearance: none; +} + +::-webkit-file-upload-button { + font: inherit; + -webkit-appearance: button; +} + +output { + display: inline-block; +} + +summary { + display: list-item; + cursor: pointer; +} + +template { + display: none; +} + +[hidden] { + display: none !important; +} + +h1, +h2, +h3, +h4, +h5, +h6, +.index-module__h1__2Zs1c, +.index-module__h2__2tzij, +.index-module__h3__2QXT1, +.index-module__h4__2L2El, +.index-module__h5__ElCx4, +.index-module__h6__1VvV- { + margin-bottom: 0.5rem; + font-weight: 500; + line-height: 1.2; +} + +h1, +.index-module__h1__2Zs1c { + font-size: 2.5rem; +} + +h2, +.index-module__h2__2tzij { + font-size: 2rem; +} + +h3, +.index-module__h3__2QXT1 { + font-size: 1.75rem; +} + +h4, +.index-module__h4__2L2El { + font-size: 1.5rem; +} + +h5, +.index-module__h5__ElCx4 { + font-size: 1.25rem; +} + +h6, +.index-module__h6__1VvV- { + font-size: 1rem; +} + +.index-module__lead__20NIT { + font-size: 1.25rem; + font-weight: 300; +} + +.index-module__display-1__2iZX- { + font-size: 6rem; + font-weight: 300; + line-height: 1.2; +} + +.index-module__display-2__1eRGE { + font-size: 5.5rem; + font-weight: 300; + line-height: 1.2; +} + +.index-module__display-3__3EPgn { + font-size: 4.5rem; + font-weight: 300; + line-height: 1.2; +} + +.index-module__display-4__1e8hN { + font-size: 3.5rem; + font-weight: 300; + line-height: 1.2; +} + +hr { + margin-top: 1rem; + margin-bottom: 1rem; + border: 0; + border-top: 1px solid rgba(0, 0, 0, 0.1); +} + +small, +.index-module__small__1CGb3 { + font-size: 80%; + font-weight: 400; +} + +mark, +.index-module__mark__3c8s9 { + padding: 0.2em; + background-color: #fcf8e3; +} + +.index-module__list-unstyled__1__6D { + padding-left: 0; + list-style: none; +} + +.index-module__list-inline__ZlCfG { + padding-left: 0; + list-style: none; +} + +.index-module__list-inline-item__2ONHP { + display: inline-block; +} +.index-module__list-inline-item__2ONHP:not(:last-child) { + margin-right: 0.5rem; +} + +.index-module__initialism__3Gvp6 { + font-size: 90%; + text-transform: uppercase; +} + +.index-module__blockquote__3xDQX { + margin-bottom: 1rem; + font-size: 1.25rem; +} + +.index-module__blockquote-footer__6lW1r { + display: block; + font-size: 80%; + color: #6c757d; +} +.index-module__blockquote-footer__6lW1r::before { + content: '\2014\00A0'; +} + +.index-module__img-fluid__3UAXz { + max-width: 100%; + height: auto; +} + +.index-module__img-thumbnail__3FAxg { + padding: 0.25rem; + background-color: #fff; + border: 1px solid #dee2e6; + border-radius: 0.25rem; + max-width: 100%; + height: auto; +} + +.index-module__figure__1vy1E { + display: inline-block; +} + +.index-module__figure-img__uTv_m { + margin-bottom: 0.5rem; + line-height: 1; +} + +.index-module__figure-caption__rW8q7 { + font-size: 90%; + color: #6c757d; +} + +code { + font-size: 87.5%; + color: #e83e8c; + word-wrap: break-word; +} +a > code { + color: inherit; +} + +kbd { + padding: 0.2rem 0.4rem; + font-size: 87.5%; + color: #fff; + background-color: #212529; + border-radius: 0.2rem; +} +kbd kbd { + padding: 0; + font-size: 100%; + font-weight: 700; +} + +pre { + display: block; + font-size: 87.5%; + color: #212529; +} +pre code { + font-size: inherit; + color: inherit; + word-break: normal; +} + +.index-module__pre-scrollable__1jAPn { + max-height: 340px; + overflow-y: scroll; +} + +.index-module__container__wQ7Ga { + width: 100%; + padding-right: 15px; + padding-left: 15px; + margin-right: auto; + margin-left: auto; +} +@media (min-width: 1413px) { + .index-module__container__wQ7Ga { + max-width: 1500px; + } +} + +.index-module__container-fluid__3sxsA, +.index-module__container-xl__2xcz3 { + width: 100%; + padding-right: 15px; + padding-left: 15px; + margin-right: auto; + margin-left: auto; +} + +@media (min-width: 1413px) { + .index-module__container__wQ7Ga, + .index-module__container-sm__3Ee-h, + .index-module__container-md__3z7wM, + .index-module__container-lg__dGDu9, + .index-module__container-xl__2xcz3 { + max-width: 1500px; + } +} + +.index-module__row__1pqLN { + display: flex; + flex-wrap: wrap; + margin-right: -15px; + margin-left: -15px; +} + +.index-module__no-gutters__jNVn5 { + margin-right: 0; + margin-left: 0; +} +.index-module__no-gutters__jNVn5 > .index-module__col__M-EJO, +.index-module__no-gutters__jNVn5 > [class*='col-'] { + padding-right: 0; + padding-left: 0; +} + +.index-module__col-1__3EtkG, +.index-module__col-2__1Ji3Q, +.index-module__col-3__2UA1d, +.index-module__col-4__1kTx2, +.index-module__col-5__6HRRD, +.index-module__col-6__2G0my, +.index-module__col-7__1K7hc, +.index-module__col-8__3iQYg, +.index-module__col-9__gh4pM, +.index-module__col-10__2nn8g, +.index-module__col-11__2cmlT, +.index-module__col-12__1oNnb, +.index-module__col__M-EJO, +.index-module__col-auto__yXSBd, +.index-module__col-sm-1__21fLV, +.index-module__col-sm-2__1WMhV, +.index-module__col-sm-3__dnAOF, +.index-module__col-sm-4__yWZeA, +.index-module__col-sm-5__2uvYE, +.index-module__col-sm-6__2K5yk, +.index-module__col-sm-7__6EhtA, +.index-module__col-sm-8__2xVr3, +.index-module__col-sm-9__2RoxH, +.index-module__col-sm-10__1lfeN, +.index-module__col-sm-11__2-M_b, +.index-module__col-sm-12__AeBQW, +.index-module__col-sm__1bHan, +.index-module__col-sm-auto__36eLe, +.index-module__col-md-1__20ZRz, +.index-module__col-md-2__1ZxnM, +.index-module__col-md-3__1RFP1, +.index-module__col-md-4__u0MPK, +.index-module__col-md-5__8GuET, +.index-module__col-md-6__205rr, +.index-module__col-md-7__2EBei, +.index-module__col-md-8__aXRZd, +.index-module__col-md-9__2kIRW, +.index-module__col-md-10__2F-ST, +.index-module__col-md-11__9avAX, +.index-module__col-md-12__cOK1_, +.index-module__col-md__wSRc4, +.index-module__col-md-auto__2XmM6, +.index-module__col-lg-1__1WRTf, +.index-module__col-lg-2__2QXX6, +.index-module__col-lg-3__10Yit, +.index-module__col-lg-4__2URwl, +.index-module__col-lg-5__1rcZ5, +.index-module__col-lg-6__340kS, +.index-module__col-lg-7__3XN2d, +.index-module__col-lg-8__2z5v1, +.index-module__col-lg-9__11qNT, +.index-module__col-lg-10__2c-nH, +.index-module__col-lg-11__2t9Kt, +.index-module__col-lg-12__f7DC3, +.index-module__col-lg__3C8hZ, +.index-module__col-lg-auto__1UHMo, +.index-module__col-xl-1__2Lis_, +.index-module__col-xl-2__JsJ8O, +.index-module__col-xl-3__190_R, +.index-module__col-xl-4__1agfc, +.index-module__col-xl-5__14dbP, +.index-module__col-xl-6__2oN46, +.index-module__col-xl-7__2TaVu, +.index-module__col-xl-8__2nxJe, +.index-module__col-xl-9__2J_oe, +.index-module__col-xl-10__1WIsZ, +.index-module__col-xl-11__8vCtv, +.index-module__col-xl-12__j8Z45, +.index-module__col-xl__3fe9S, +.index-module__col-xl-auto__xiWvz { + position: relative; + width: 100%; + padding-right: 15px; + padding-left: 15px; +} + +.index-module__col__M-EJO { + flex-basis: 0; + flex-grow: 1; + max-width: 100%; +} + +.index-module__row-cols-1__1FNb7 > * { + flex: 0 0 100%; + max-width: 100%; +} + +.index-module__row-cols-2__1dZ3Z > * { + flex: 0 0 50%; + max-width: 50%; +} + +.index-module__row-cols-3__1wzbO > * { + flex: 0 0 33.33333%; + max-width: 33.33333%; +} + +.index-module__row-cols-4__PZjhq > * { + flex: 0 0 25%; + max-width: 25%; +} + +.index-module__row-cols-5__17JUr > * { + flex: 0 0 20%; + max-width: 20%; +} + +.index-module__row-cols-6__2NDhK > * { + flex: 0 0 16.66667%; + max-width: 16.66667%; +} + +.index-module__col-auto__yXSBd { + flex: 0 0 auto; + width: auto; + max-width: 100%; +} + +.index-module__col-1__3EtkG { + flex: 0 0 8.33333%; + max-width: 8.33333%; +} + +.index-module__col-2__1Ji3Q { + flex: 0 0 16.66667%; + max-width: 16.66667%; +} + +.index-module__col-3__2UA1d { + flex: 0 0 25%; + max-width: 25%; +} + +.index-module__col-4__1kTx2 { + flex: 0 0 33.33333%; + max-width: 33.33333%; +} + +.index-module__col-5__6HRRD { + flex: 0 0 41.66667%; + max-width: 41.66667%; +} + +.index-module__col-6__2G0my { + flex: 0 0 50%; + max-width: 50%; +} + +.index-module__col-7__1K7hc { + flex: 0 0 58.33333%; + max-width: 58.33333%; +} + +.index-module__col-8__3iQYg { + flex: 0 0 66.66667%; + max-width: 66.66667%; +} + +.index-module__col-9__gh4pM { + flex: 0 0 75%; + max-width: 75%; +} + +.index-module__col-10__2nn8g { + flex: 0 0 83.33333%; + max-width: 83.33333%; +} + +.index-module__col-11__2cmlT { + flex: 0 0 91.66667%; + max-width: 91.66667%; +} + +.index-module__col-12__1oNnb { + flex: 0 0 100%; + max-width: 100%; +} + +.index-module__order-first__3Hs9V { + order: -1; +} + +.index-module__order-last__r4HE7 { + order: 13; +} + +.index-module__order-0__MtWed { + order: 0; +} + +.index-module__order-1__2pN5P { + order: 1; +} + +.index-module__order-2__p7x5Y { + order: 2; +} + +.index-module__order-3__H2pK4 { + order: 3; +} + +.index-module__order-4__2_k5C { + order: 4; +} + +.index-module__order-5__owHHG { + order: 5; +} + +.index-module__order-6__3joV0 { + order: 6; +} + +.index-module__order-7__1DjJj { + order: 7; +} + +.index-module__order-8__1fb-T { + order: 8; +} + +.index-module__order-9__1iRmq { + order: 9; +} + +.index-module__order-10__1jqSX { + order: 10; +} + +.index-module__order-11__296eF { + order: 11; +} + +.index-module__order-12__33UoU { + order: 12; +} + +.index-module__offset-1__1jBB6 { + margin-left: 8.33333%; +} + +.index-module__offset-2__3KiQn { + margin-left: 16.66667%; +} + +.index-module__offset-3__1devQ { + margin-left: 25%; +} + +.index-module__offset-4__1r0Gx { + margin-left: 33.33333%; +} + +.index-module__offset-5__3TkPh { + margin-left: 41.66667%; +} + +.index-module__offset-6__waww2 { + margin-left: 50%; +} + +.index-module__offset-7__XJZKj { + margin-left: 58.33333%; +} + +.index-module__offset-8__yFcro { + margin-left: 66.66667%; +} + +.index-module__offset-9__2qRCz { + margin-left: 75%; +} + +.index-module__offset-10__3w12u { + margin-left: 83.33333%; +} + +.index-module__offset-11__1feHx { + margin-left: 91.66667%; +} + +@media (min-width: 576px) { + .index-module__col-sm__1bHan { + flex-basis: 0; + flex-grow: 1; + max-width: 100%; + } + .index-module__row-cols-sm-1__EAeZk > * { + flex: 0 0 100%; + max-width: 100%; + } + .index-module__row-cols-sm-2__3qKY4 > * { + flex: 0 0 50%; + max-width: 50%; + } + .index-module__row-cols-sm-3__EkRaa > * { + flex: 0 0 33.33333%; + max-width: 33.33333%; + } + .index-module__row-cols-sm-4__26Eq7 > * { + flex: 0 0 25%; + max-width: 25%; + } + .index-module__row-cols-sm-5__2hyKt > * { + flex: 0 0 20%; + max-width: 20%; + } + .index-module__row-cols-sm-6__28kwq > * { + flex: 0 0 16.66667%; + max-width: 16.66667%; + } + .index-module__col-sm-auto__36eLe { + flex: 0 0 auto; + width: auto; + max-width: 100%; + } + .index-module__col-sm-1__21fLV { + flex: 0 0 8.33333%; + max-width: 8.33333%; + } + .index-module__col-sm-2__1WMhV { + flex: 0 0 16.66667%; + max-width: 16.66667%; + } + .index-module__col-sm-3__dnAOF { + flex: 0 0 25%; + max-width: 25%; + } + .index-module__col-sm-4__yWZeA { + flex: 0 0 33.33333%; + max-width: 33.33333%; + } + .index-module__col-sm-5__2uvYE { + flex: 0 0 41.66667%; + max-width: 41.66667%; + } + .index-module__col-sm-6__2K5yk { + flex: 0 0 50%; + max-width: 50%; + } + .index-module__col-sm-7__6EhtA { + flex: 0 0 58.33333%; + max-width: 58.33333%; + } + .index-module__col-sm-8__2xVr3 { + flex: 0 0 66.66667%; + max-width: 66.66667%; + } + .index-module__col-sm-9__2RoxH { + flex: 0 0 75%; + max-width: 75%; + } + .index-module__col-sm-10__1lfeN { + flex: 0 0 83.33333%; + max-width: 83.33333%; + } + .index-module__col-sm-11__2-M_b { + flex: 0 0 91.66667%; + max-width: 91.66667%; + } + .index-module__col-sm-12__AeBQW { + flex: 0 0 100%; + max-width: 100%; + } + .index-module__order-sm-first__3CRIx { + order: -1; + } + .index-module__order-sm-last__34cnT { + order: 13; + } + .index-module__order-sm-0__3CqE9 { + order: 0; + } + .index-module__order-sm-1__gG3Wl { + order: 1; + } + .index-module__order-sm-2__Jwmp3 { + order: 2; + } + .index-module__order-sm-3__7rddC { + order: 3; + } + .index-module__order-sm-4__2cnRd { + order: 4; + } + .index-module__order-sm-5__3CXUD { + order: 5; + } + .index-module__order-sm-6__qkxzU { + order: 6; + } + .index-module__order-sm-7__1KjcE { + order: 7; + } + .index-module__order-sm-8__8Z5te { + order: 8; + } + .index-module__order-sm-9__20rLk { + order: 9; + } + .index-module__order-sm-10__2XDt6 { + order: 10; + } + .index-module__order-sm-11__maEOj { + order: 11; + } + .index-module__order-sm-12__2wOJ7 { + order: 12; + } + .index-module__offset-sm-0__1mRif { + margin-left: 0; + } + .index-module__offset-sm-1__3eZx2 { + margin-left: 8.33333%; + } + .index-module__offset-sm-2__2G39Y { + margin-left: 16.66667%; + } + .index-module__offset-sm-3__2YZgj { + margin-left: 25%; + } + .index-module__offset-sm-4__2hWHR { + margin-left: 33.33333%; + } + .index-module__offset-sm-5__3XV2_ { + margin-left: 41.66667%; + } + .index-module__offset-sm-6__2xOhx { + margin-left: 50%; + } + .index-module__offset-sm-7__2dC9_ { + margin-left: 58.33333%; + } + .index-module__offset-sm-8__3l86r { + margin-left: 66.66667%; + } + .index-module__offset-sm-9__3YD9L { + margin-left: 75%; + } + .index-module__offset-sm-10__K4DWR { + margin-left: 83.33333%; + } + .index-module__offset-sm-11__p4eoy { + margin-left: 91.66667%; + } +} + +@media (min-width: 768px) { + .index-module__col-md__wSRc4 { + flex-basis: 0; + flex-grow: 1; + max-width: 100%; + } + .index-module__row-cols-md-1__7AtEw > * { + flex: 0 0 100%; + max-width: 100%; + } + .index-module__row-cols-md-2__KRZxm > * { + flex: 0 0 50%; + max-width: 50%; + } + .index-module__row-cols-md-3__2ne1G > * { + flex: 0 0 33.33333%; + max-width: 33.33333%; + } + .index-module__row-cols-md-4__KOA7x > * { + flex: 0 0 25%; + max-width: 25%; + } + .index-module__row-cols-md-5__16MPN > * { + flex: 0 0 20%; + max-width: 20%; + } + .index-module__row-cols-md-6__32ABs > * { + flex: 0 0 16.66667%; + max-width: 16.66667%; + } + .index-module__col-md-auto__2XmM6 { + flex: 0 0 auto; + width: auto; + max-width: 100%; + } + .index-module__col-md-1__20ZRz { + flex: 0 0 8.33333%; + max-width: 8.33333%; + } + .index-module__col-md-2__1ZxnM { + flex: 0 0 16.66667%; + max-width: 16.66667%; + } + .index-module__col-md-3__1RFP1 { + flex: 0 0 25%; + max-width: 25%; + } + .index-module__col-md-4__u0MPK { + flex: 0 0 33.33333%; + max-width: 33.33333%; + } + .index-module__col-md-5__8GuET { + flex: 0 0 41.66667%; + max-width: 41.66667%; + } + .index-module__col-md-6__205rr { + flex: 0 0 50%; + max-width: 50%; + } + .index-module__col-md-7__2EBei { + flex: 0 0 58.33333%; + max-width: 58.33333%; + } + .index-module__col-md-8__aXRZd { + flex: 0 0 66.66667%; + max-width: 66.66667%; + } + .index-module__col-md-9__2kIRW { + flex: 0 0 75%; + max-width: 75%; + } + .index-module__col-md-10__2F-ST { + flex: 0 0 83.33333%; + max-width: 83.33333%; + } + .index-module__col-md-11__9avAX { + flex: 0 0 91.66667%; + max-width: 91.66667%; + } + .index-module__col-md-12__cOK1_ { + flex: 0 0 100%; + max-width: 100%; + } + .index-module__order-md-first__y1RDE { + order: -1; + } + .index-module__order-md-last__309lS { + order: 13; + } + .index-module__order-md-0__4GzqG { + order: 0; + } + .index-module__order-md-1__Ca0bZ { + order: 1; + } + .index-module__order-md-2__2WTS1 { + order: 2; + } + .index-module__order-md-3__1MozB { + order: 3; + } + .index-module__order-md-4__2sPkt { + order: 4; + } + .index-module__order-md-5__26pQx { + order: 5; + } + .index-module__order-md-6__2aJ3K { + order: 6; + } + .index-module__order-md-7__3YjS3 { + order: 7; + } + .index-module__order-md-8__dXyhh { + order: 8; + } + .index-module__order-md-9__YZbiF { + order: 9; + } + .index-module__order-md-10__fJ2MW { + order: 10; + } + .index-module__order-md-11__3ckIW { + order: 11; + } + .index-module__order-md-12__26qoU { + order: 12; + } + .index-module__offset-md-0__ya-Ay { + margin-left: 0; + } + .index-module__offset-md-1__1ONaS { + margin-left: 8.33333%; + } + .index-module__offset-md-2__11nqL { + margin-left: 16.66667%; + } + .index-module__offset-md-3__DfIUA { + margin-left: 25%; + } + .index-module__offset-md-4__rCDkk { + margin-left: 33.33333%; + } + .index-module__offset-md-5__1v40f { + margin-left: 41.66667%; + } + .index-module__offset-md-6__2cqe1 { + margin-left: 50%; + } + .index-module__offset-md-7__3gplN { + margin-left: 58.33333%; + } + .index-module__offset-md-8__1Q-gh { + margin-left: 66.66667%; + } + .index-module__offset-md-9__3gDzw { + margin-left: 75%; + } + .index-module__offset-md-10__3AHhr { + margin-left: 83.33333%; + } + .index-module__offset-md-11__2QhYH { + margin-left: 91.66667%; + } +} + +@media (min-width: 1050px) { + .index-module__col-lg__3C8hZ { + flex-basis: 0; + flex-grow: 1; + max-width: 100%; + } + .index-module__row-cols-lg-1__3p819 > * { + flex: 0 0 100%; + max-width: 100%; + } + .index-module__row-cols-lg-2__2kjN1 > * { + flex: 0 0 50%; + max-width: 50%; + } + .index-module__row-cols-lg-3__3MnS3 > * { + flex: 0 0 33.33333%; + max-width: 33.33333%; + } + .index-module__row-cols-lg-4__2T0BO > * { + flex: 0 0 25%; + max-width: 25%; + } + .index-module__row-cols-lg-5__mtJXe > * { + flex: 0 0 20%; + max-width: 20%; + } + .index-module__row-cols-lg-6__ZDtK3 > * { + flex: 0 0 16.66667%; + max-width: 16.66667%; + } + .index-module__col-lg-auto__1UHMo { + flex: 0 0 auto; + width: auto; + max-width: 100%; + } + .index-module__col-lg-1__1WRTf { + flex: 0 0 8.33333%; + max-width: 8.33333%; + } + .index-module__col-lg-2__2QXX6 { + flex: 0 0 16.66667%; + max-width: 16.66667%; + } + .index-module__col-lg-3__10Yit { + flex: 0 0 25%; + max-width: 25%; + } + .index-module__col-lg-4__2URwl { + flex: 0 0 33.33333%; + max-width: 33.33333%; + } + .index-module__col-lg-5__1rcZ5 { + flex: 0 0 41.66667%; + max-width: 41.66667%; + } + .index-module__col-lg-6__340kS { + flex: 0 0 50%; + max-width: 50%; + } + .index-module__col-lg-7__3XN2d { + flex: 0 0 58.33333%; + max-width: 58.33333%; + } + .index-module__col-lg-8__2z5v1 { + flex: 0 0 66.66667%; + max-width: 66.66667%; + } + .index-module__col-lg-9__11qNT { + flex: 0 0 75%; + max-width: 75%; + } + .index-module__col-lg-10__2c-nH { + flex: 0 0 83.33333%; + max-width: 83.33333%; + } + .index-module__col-lg-11__2t9Kt { + flex: 0 0 91.66667%; + max-width: 91.66667%; + } + .index-module__col-lg-12__f7DC3 { + flex: 0 0 100%; + max-width: 100%; + } + .index-module__order-lg-first__1jFrp { + order: -1; + } + .index-module__order-lg-last__1uwuT { + order: 13; + } + .index-module__order-lg-0__2ptQQ { + order: 0; + } + .index-module__order-lg-1__1J1Vx { + order: 1; + } + .index-module__order-lg-2__1GGE9 { + order: 2; + } + .index-module__order-lg-3__3VR90 { + order: 3; + } + .index-module__order-lg-4__InZ9E { + order: 4; + } + .index-module__order-lg-5__9uOd5 { + order: 5; + } + .index-module__order-lg-6__2xthQ { + order: 6; + } + .index-module__order-lg-7__2fqfz { + order: 7; + } + .index-module__order-lg-8__1QJot { + order: 8; + } + .index-module__order-lg-9__3-6Mo { + order: 9; + } + .index-module__order-lg-10__18GT6 { + order: 10; + } + .index-module__order-lg-11__1x3Qb { + order: 11; + } + .index-module__order-lg-12__tN_vP { + order: 12; + } + .index-module__offset-lg-0__3HQA9 { + margin-left: 0; + } + .index-module__offset-lg-1__3rh22 { + margin-left: 8.33333%; + } + .index-module__offset-lg-2__10oum { + margin-left: 16.66667%; + } + .index-module__offset-lg-3__w5uun { + margin-left: 25%; + } + .index-module__offset-lg-4__2plO1 { + margin-left: 33.33333%; + } + .index-module__offset-lg-5__18dPx { + margin-left: 41.66667%; + } + .index-module__offset-lg-6__pCeUy { + margin-left: 50%; + } + .index-module__offset-lg-7__128QV { + margin-left: 58.33333%; + } + .index-module__offset-lg-8__12ykp { + margin-left: 66.66667%; + } + .index-module__offset-lg-9__e1OGj { + margin-left: 75%; + } + .index-module__offset-lg-10__2AALe { + margin-left: 83.33333%; + } + .index-module__offset-lg-11__34Mvi { + margin-left: 91.66667%; + } +} + +@media (min-width: 1413px) { + .index-module__col-xl__3fe9S { + flex-basis: 0; + flex-grow: 1; + max-width: 100%; + } + .index-module__row-cols-xl-1__2QDRm > * { + flex: 0 0 100%; + max-width: 100%; + } + .index-module__row-cols-xl-2__3keEO > * { + flex: 0 0 50%; + max-width: 50%; + } + .index-module__row-cols-xl-3__2_qUD > * { + flex: 0 0 33.33333%; + max-width: 33.33333%; + } + .index-module__row-cols-xl-4__3lwxK > * { + flex: 0 0 25%; + max-width: 25%; + } + .index-module__row-cols-xl-5__2YSsW > * { + flex: 0 0 20%; + max-width: 20%; + } + .index-module__row-cols-xl-6__34a5f > * { + flex: 0 0 16.66667%; + max-width: 16.66667%; + } + .index-module__col-xl-auto__xiWvz { + flex: 0 0 auto; + width: auto; + max-width: 100%; + } + .index-module__col-xl-1__2Lis_ { + flex: 0 0 8.33333%; + max-width: 8.33333%; + } + .index-module__col-xl-2__JsJ8O { + flex: 0 0 16.66667%; + max-width: 16.66667%; + } + .index-module__col-xl-3__190_R { + flex: 0 0 25%; + max-width: 25%; + } + .index-module__col-xl-4__1agfc { + flex: 0 0 33.33333%; + max-width: 33.33333%; + } + .index-module__col-xl-5__14dbP { + flex: 0 0 41.66667%; + max-width: 41.66667%; + } + .index-module__col-xl-6__2oN46 { + flex: 0 0 50%; + max-width: 50%; + } + .index-module__col-xl-7__2TaVu { + flex: 0 0 58.33333%; + max-width: 58.33333%; + } + .index-module__col-xl-8__2nxJe { + flex: 0 0 66.66667%; + max-width: 66.66667%; + } + .index-module__col-xl-9__2J_oe { + flex: 0 0 75%; + max-width: 75%; + } + .index-module__col-xl-10__1WIsZ { + flex: 0 0 83.33333%; + max-width: 83.33333%; + } + .index-module__col-xl-11__8vCtv { + flex: 0 0 91.66667%; + max-width: 91.66667%; + } + .index-module__col-xl-12__j8Z45 { + flex: 0 0 100%; + max-width: 100%; + } + .index-module__order-xl-first__215F4 { + order: -1; + } + .index-module__order-xl-last__2stDj { + order: 13; + } + .index-module__order-xl-0__3gs9p { + order: 0; + } + .index-module__order-xl-1__2Ae1d { + order: 1; + } + .index-module__order-xl-2__2zf4Q { + order: 2; + } + .index-module__order-xl-3__xvyOF { + order: 3; + } + .index-module__order-xl-4__3luhn { + order: 4; + } + .index-module__order-xl-5__1EFGZ { + order: 5; + } + .index-module__order-xl-6__22kV_ { + order: 6; + } + .index-module__order-xl-7__ejq1Q { + order: 7; + } + .index-module__order-xl-8___ZkX8 { + order: 8; + } + .index-module__order-xl-9__3TRag { + order: 9; + } + .index-module__order-xl-10__3PI3u { + order: 10; + } + .index-module__order-xl-11__2ETxp { + order: 11; + } + .index-module__order-xl-12__2GT-K { + order: 12; + } + .index-module__offset-xl-0__X8R3U { + margin-left: 0; + } + .index-module__offset-xl-1__saoQS { + margin-left: 8.33333%; + } + .index-module__offset-xl-2__3SzfE { + margin-left: 16.66667%; + } + .index-module__offset-xl-3__34j0j { + margin-left: 25%; + } + .index-module__offset-xl-4__3CJMB { + margin-left: 33.33333%; + } + .index-module__offset-xl-5__3X4s5 { + margin-left: 41.66667%; + } + .index-module__offset-xl-6__S9lmE { + margin-left: 50%; + } + .index-module__offset-xl-7__1ZGDM { + margin-left: 58.33333%; + } + .index-module__offset-xl-8__yr2VY { + margin-left: 66.66667%; + } + .index-module__offset-xl-9__2bJkc { + margin-left: 75%; + } + .index-module__offset-xl-10__21jAp { + margin-left: 83.33333%; + } + .index-module__offset-xl-11__2y1te { + margin-left: 91.66667%; + } +} + +.index-module__table__2mYYw { + width: 100%; + margin-bottom: 1rem; + color: #212529; +} +.index-module__table__2mYYw th, +.index-module__table__2mYYw td { + padding: 0.75rem; + vertical-align: top; + border-top: 1px solid #dee2e6; +} +.index-module__table__2mYYw thead th { + vertical-align: bottom; + border-bottom: 2px solid #dee2e6; +} +.index-module__table__2mYYw tbody + tbody { + border-top: 2px solid #dee2e6; +} + +.index-module__table-sm__16Fr0 th, +.index-module__table-sm__16Fr0 td { + padding: 0.3rem; +} + +.index-module__table-bordered__19nzh { + border: 1px solid #dee2e6; +} +.index-module__table-bordered__19nzh th, +.index-module__table-bordered__19nzh td { + border: 1px solid #dee2e6; +} +.index-module__table-bordered__19nzh thead th, +.index-module__table-bordered__19nzh thead td { + border-bottom-width: 2px; +} + +.index-module__table-borderless__2yWHG th, +.index-module__table-borderless__2yWHG td, +.index-module__table-borderless__2yWHG thead th, +.index-module__table-borderless__2yWHG tbody + tbody { + border: 0; +} + +.index-module__table-striped__1PPA- tbody tr:nth-of-type(odd) { + background-color: rgba(0, 0, 0, 0.05); +} + +.index-module__table-hover__3xY4C tbody tr:hover { + color: #212529; + background-color: rgba(0, 0, 0, 0.075); +} + +.index-module__table-primary__2Tj3r, +.index-module__table-primary__2Tj3r > th, +.index-module__table-primary__2Tj3r > td { + background-color: #bad5ee; +} + +.index-module__table-primary__2Tj3r th, +.index-module__table-primary__2Tj3r td, +.index-module__table-primary__2Tj3r thead th, +.index-module__table-primary__2Tj3r tbody + tbody { + border-color: #7fb0e0; +} + +.index-module__table-hover__3xY4C .index-module__table-primary__2Tj3r:hover { + background-color: #a6c9e9; +} +.index-module__table-hover__3xY4C + .index-module__table-primary__2Tj3r:hover + > td, +.index-module__table-hover__3xY4C + .index-module__table-primary__2Tj3r:hover + > th { + background-color: #a6c9e9; +} + +.index-module__table-secondary__3-f2t, +.index-module__table-secondary__3-f2t > th, +.index-module__table-secondary__3-f2t > td { + background-color: #dbdbdb; +} + +.index-module__table-secondary__3-f2t th, +.index-module__table-secondary__3-f2t td, +.index-module__table-secondary__3-f2t thead th, +.index-module__table-secondary__3-f2t tbody + tbody { + border-color: #bdbdbd; +} + +.index-module__table-hover__3xY4C .index-module__table-secondary__3-f2t:hover { + background-color: #cecece; +} +.index-module__table-hover__3xY4C + .index-module__table-secondary__3-f2t:hover + > td, +.index-module__table-hover__3xY4C + .index-module__table-secondary__3-f2t:hover + > th { + background-color: #cecece; +} + +.index-module__table-success__3Lovj, +.index-module__table-success__3Lovj > th, +.index-module__table-success__3Lovj > td { + background-color: #c3e6cb; +} + +.index-module__table-success__3Lovj th, +.index-module__table-success__3Lovj td, +.index-module__table-success__3Lovj thead th, +.index-module__table-success__3Lovj tbody + tbody { + border-color: #8fd19e; +} + +.index-module__table-hover__3xY4C .index-module__table-success__3Lovj:hover { + background-color: #b1dfbb; +} +.index-module__table-hover__3xY4C + .index-module__table-success__3Lovj:hover + > td, +.index-module__table-hover__3xY4C + .index-module__table-success__3Lovj:hover + > th { + background-color: #b1dfbb; +} + +.index-module__table-info__Lr3-l, +.index-module__table-info__Lr3-l > th, +.index-module__table-info__Lr3-l > td { + background-color: #bee5eb; +} + +.index-module__table-info__Lr3-l th, +.index-module__table-info__Lr3-l td, +.index-module__table-info__Lr3-l thead th, +.index-module__table-info__Lr3-l tbody + tbody { + border-color: #86cfda; +} + +.index-module__table-hover__3xY4C .index-module__table-info__Lr3-l:hover { + background-color: #abdde5; +} +.index-module__table-hover__3xY4C .index-module__table-info__Lr3-l:hover > td, +.index-module__table-hover__3xY4C .index-module__table-info__Lr3-l:hover > th { + background-color: #abdde5; +} + +.index-module__table-warning__ZT-n9, +.index-module__table-warning__ZT-n9 > th, +.index-module__table-warning__ZT-n9 > td { + background-color: #ffeeba; +} + +.index-module__table-warning__ZT-n9 th, +.index-module__table-warning__ZT-n9 td, +.index-module__table-warning__ZT-n9 thead th, +.index-module__table-warning__ZT-n9 tbody + tbody { + border-color: #ffdf7e; +} + +.index-module__table-hover__3xY4C .index-module__table-warning__ZT-n9:hover { + background-color: #ffe8a1; +} +.index-module__table-hover__3xY4C + .index-module__table-warning__ZT-n9:hover + > td, +.index-module__table-hover__3xY4C + .index-module__table-warning__ZT-n9:hover + > th { + background-color: #ffe8a1; +} + +.index-module__table-danger__3cxzc, +.index-module__table-danger__3cxzc > th, +.index-module__table-danger__3cxzc > td { + background-color: #f5c6cb; +} + +.index-module__table-danger__3cxzc th, +.index-module__table-danger__3cxzc td, +.index-module__table-danger__3cxzc thead th, +.index-module__table-danger__3cxzc tbody + tbody { + border-color: #ed969e; +} + +.index-module__table-hover__3xY4C .index-module__table-danger__3cxzc:hover { + background-color: #f1b0b7; +} +.index-module__table-hover__3xY4C .index-module__table-danger__3cxzc:hover > td, +.index-module__table-hover__3xY4C + .index-module__table-danger__3cxzc:hover + > th { + background-color: #f1b0b7; +} + +.index-module__table-light__2IkbY, +.index-module__table-light__2IkbY > th, +.index-module__table-light__2IkbY > td { + background-color: #fdfdfe; +} + +.index-module__table-light__2IkbY th, +.index-module__table-light__2IkbY td, +.index-module__table-light__2IkbY thead th, +.index-module__table-light__2IkbY tbody + tbody { + border-color: #fbfcfc; +} + +.index-module__table-hover__3xY4C .index-module__table-light__2IkbY:hover { + background-color: #ececf6; +} +.index-module__table-hover__3xY4C .index-module__table-light__2IkbY:hover > td, +.index-module__table-hover__3xY4C .index-module__table-light__2IkbY:hover > th { + background-color: #ececf6; +} + +.index-module__table-dark__xEdoZ, +.index-module__table-dark__xEdoZ > th, +.index-module__table-dark__xEdoZ > td { + background-color: #c6c8ca; +} + +.index-module__table-dark__xEdoZ th, +.index-module__table-dark__xEdoZ td, +.index-module__table-dark__xEdoZ thead th, +.index-module__table-dark__xEdoZ tbody + tbody { + border-color: #95999c; +} + +.index-module__table-hover__3xY4C .index-module__table-dark__xEdoZ:hover { + background-color: #b9bbbe; +} +.index-module__table-hover__3xY4C .index-module__table-dark__xEdoZ:hover > td, +.index-module__table-hover__3xY4C .index-module__table-dark__xEdoZ:hover > th { + background-color: #b9bbbe; +} + +.index-module__table-active__1blBy, +.index-module__table-active__1blBy > th, +.index-module__table-active__1blBy > td { + background-color: rgba(0, 0, 0, 0.075); +} + +.index-module__table-hover__3xY4C .index-module__table-active__1blBy:hover { + background-color: rgba(0, 0, 0, 0.075); +} +.index-module__table-hover__3xY4C .index-module__table-active__1blBy:hover > td, +.index-module__table-hover__3xY4C + .index-module__table-active__1blBy:hover + > th { + background-color: rgba(0, 0, 0, 0.075); +} + +.index-module__table__2mYYw .index-module__thead-dark__wbYfA th { + color: #fff; + background-color: #343a40; + border-color: #454d55; +} + +.index-module__table__2mYYw .index-module__thead-light__IYVhc th { + color: #495057; + background-color: #e9ecef; + border-color: #dee2e6; +} + +.index-module__table-dark__xEdoZ { + color: #fff; + background-color: #343a40; +} +.index-module__table-dark__xEdoZ th, +.index-module__table-dark__xEdoZ td, +.index-module__table-dark__xEdoZ thead th { + border-color: #454d55; +} +.index-module__table-dark__xEdoZ.index-module__table-bordered__19nzh { + border: 0; +} +.index-module__table-dark__xEdoZ.index-module__table-striped__1PPA- + tbody + tr:nth-of-type(odd) { + background-color: rgba(255, 255, 255, 0.05); +} +.index-module__table-dark__xEdoZ.index-module__table-hover__3xY4C + tbody + tr:hover { + color: #fff; + background-color: rgba(255, 255, 255, 0.075); +} + +@media (max-width: 575.98px) { + .index-module__table-responsive-sm__2eJfs { + display: block; + width: 100%; + overflow-x: auto; + -webkit-overflow-scrolling: touch; + } + .index-module__table-responsive-sm__2eJfs + > .index-module__table-bordered__19nzh { + border: 0; + } +} + +@media (max-width: 767.98px) { + .index-module__table-responsive-md__1SaFY { + display: block; + width: 100%; + overflow-x: auto; + -webkit-overflow-scrolling: touch; + } + .index-module__table-responsive-md__1SaFY + > .index-module__table-bordered__19nzh { + border: 0; + } +} + +@media (max-width: 1049.98px) { + .index-module__table-responsive-lg__2Uoev { + display: block; + width: 100%; + overflow-x: auto; + -webkit-overflow-scrolling: touch; + } + .index-module__table-responsive-lg__2Uoev + > .index-module__table-bordered__19nzh { + border: 0; + } +} + +@media (max-width: 1412.98px) { + .index-module__table-responsive-xl__1H_WR { + display: block; + width: 100%; + overflow-x: auto; + -webkit-overflow-scrolling: touch; + } + .index-module__table-responsive-xl__1H_WR + > .index-module__table-bordered__19nzh { + border: 0; + } +} + +.index-module__table-responsive__2d-QH { + display: block; + width: 100%; + overflow-x: auto; + -webkit-overflow-scrolling: touch; +} +.index-module__table-responsive__2d-QH > .index-module__table-bordered__19nzh { + border: 0; +} + +.index-module__form-control__33tSj { + display: block; + width: 100%; + height: calc(1.5em + 0.75rem + 2px); + padding: 0.375rem 0.75rem; + font-size: 1rem; + font-weight: 400; + line-height: 1.5; + color: #495057; + background-color: #fff; + background-clip: padding-box; + border: 1px solid #ced4da; + border-radius: 0.25rem; + transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; +} +@media (prefers-reduced-motion: reduce) { + .index-module__form-control__33tSj { + transition: none; + } +} +.index-module__form-control__33tSj::-ms-expand { + background-color: transparent; + border: 0; +} +.index-module__form-control__33tSj:-moz-focusring { + color: transparent; + text-shadow: 0 0 0 #495057; +} +.index-module__form-control__33tSj:focus { + color: #495057; + background-color: #fff; + border-color: #54a8f7; + outline: 0; + box-shadow: 0 0 0 0.2rem rgba(9, 104, 195, 0.25); +} +.index-module__form-control__33tSj::placeholder { + color: #6c757d; + opacity: 1; +} +.index-module__form-control__33tSj:disabled, +.index-module__form-control__33tSj[readonly] { + background-color: #e9ecef; + opacity: 1; +} + +select.index-module__form-control__33tSj:focus::-ms-value { + color: #495057; + background-color: #fff; +} + +.index-module__form-control-file__-_pwY, +.index-module__form-control-range__LLbKa { + display: block; + width: 100%; +} + +.index-module__col-form-label__nBcIH { + padding-top: calc(0.375rem + 1px); + padding-bottom: calc(0.375rem + 1px); + margin-bottom: 0; + font-size: inherit; + line-height: 1.5; +} + +.index-module__col-form-label-lg__ZVtl2 { + padding-top: calc(0.5rem + 1px); + padding-bottom: calc(0.5rem + 1px); + font-size: 1.25rem; + line-height: 1.5; +} + +.index-module__col-form-label-sm__1gHvU { + padding-top: calc(0.25rem + 1px); + padding-bottom: calc(0.25rem + 1px); + font-size: 0.875rem; + line-height: 1.5; +} + +.index-module__form-control-plaintext__1Qr5_ { + display: block; + width: 100%; + padding: 0.375rem 0; + margin-bottom: 0; + font-size: 1rem; + line-height: 1.5; + color: #212529; + background-color: transparent; + border: solid transparent; + border-width: 1px 0; +} +.index-module__form-control-plaintext__1Qr5_.index-module__form-control-sm__2Mi-0, +.index-module__form-control-plaintext__1Qr5_.index-module__form-control-lg__1FX9v { + padding-right: 0; + padding-left: 0; +} + +.index-module__form-control-sm__2Mi-0 { + height: calc(1.5em + 0.5rem + 2px); + padding: 0.25rem 0.5rem; + font-size: 0.875rem; + line-height: 1.5; + border-radius: 0.2rem; +} + +.index-module__form-control-lg__1FX9v { + height: calc(1.5em + 1rem + 2px); + padding: 0.5rem 1rem; + font-size: 1.25rem; + line-height: 1.5; + border-radius: 0.3rem; +} + +select.index-module__form-control__33tSj[size], +select.index-module__form-control__33tSj[multiple] { + height: auto; +} + +textarea.index-module__form-control__33tSj { + height: auto; +} + +.index-module__form-group__20g9m { + margin-bottom: 1rem; +} + +.index-module__form-text__15IaJ { + display: block; + margin-top: 0.25rem; +} + +.index-module__form-row__1q1iq { + display: flex; + flex-wrap: wrap; + margin-right: -5px; + margin-left: -5px; +} +.index-module__form-row__1q1iq > .index-module__col__M-EJO, +.index-module__form-row__1q1iq > [class*='col-'] { + padding-right: 5px; + padding-left: 5px; +} + +.index-module__form-check__2UQrO { + position: relative; + display: block; + padding-left: 1.25rem; +} + +.index-module__form-check-input__XpnZN { + position: absolute; + margin-top: 0.3rem; + margin-left: -1.25rem; +} +.index-module__form-check-input__XpnZN[disabled] + ~ .index-module__form-check-label__2cbqH, +.index-module__form-check-input__XpnZN:disabled + ~ .index-module__form-check-label__2cbqH { + color: #6c757d; +} + +.index-module__form-check-label__2cbqH { + margin-bottom: 0; +} + +.index-module__form-check-inline__212tg { + display: inline-flex; + align-items: center; + padding-left: 0; + margin-right: 0.75rem; +} +.index-module__form-check-inline__212tg .index-module__form-check-input__XpnZN { + position: static; + margin-top: 0; + margin-right: 0.3125rem; + margin-left: 0; +} + +.index-module__valid-feedback__2e8qI { + display: none; + width: 100%; + margin-top: 0.25rem; + font-size: 80%; + color: #28a745; +} + +.index-module__valid-tooltip__3G7sU { + position: absolute; + top: 100%; + z-index: 5; + display: none; + max-width: 100%; + padding: 0.25rem 0.5rem; + margin-top: 0.1rem; + font-size: 0.875rem; + line-height: 1.5; + color: #fff; + background-color: rgba(40, 167, 69, 0.9); + border-radius: 0.25rem; +} + +.index-module__was-validated__LSagy + :valid + ~ .index-module__valid-feedback__2e8qI, +.index-module__was-validated__LSagy + :valid + ~ .index-module__valid-tooltip__3G7sU, +.index-module__is-valid__2NFXf ~ .index-module__valid-feedback__2e8qI, +.index-module__is-valid__2NFXf ~ .index-module__valid-tooltip__3G7sU { + display: block; +} + +.index-module__was-validated__LSagy .index-module__form-control__33tSj:valid, +.index-module__form-control__33tSj.index-module__is-valid__2NFXf { + border-color: #28a745; + padding-right: calc(1.5em + 0.75rem); + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath fill='%2328a745' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e"); + background-repeat: no-repeat; + background-position: right calc(0.375em + 0.1875rem) center; + background-size: calc(0.75em + 0.375rem) calc(0.75em + 0.375rem); +} +.index-module__was-validated__LSagy + .index-module__form-control__33tSj:valid:focus, +.index-module__form-control__33tSj.index-module__is-valid__2NFXf:focus { + border-color: #28a745; + box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.25); +} + +.index-module__was-validated__LSagy + textarea.index-module__form-control__33tSj:valid, +textarea.index-module__form-control__33tSj.index-module__is-valid__2NFXf { + padding-right: calc(1.5em + 0.75rem); + background-position: top calc(0.375em + 0.1875rem) right + calc(0.375em + 0.1875rem); +} + +.index-module__was-validated__LSagy .index-module__custom-select__2Ae5X:valid, +.index-module__custom-select__2Ae5X.index-module__is-valid__2NFXf { + border-color: #28a745; + padding-right: calc(0.75em + 2.3125rem); + background: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='5' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e") + no-repeat right 0.75rem center/8px 10px, + url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath fill='%2328a745' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e") + #fff no-repeat center right 1.75rem / calc(0.75em + 0.375rem) + calc(0.75em + 0.375rem); +} +.index-module__was-validated__LSagy + .index-module__custom-select__2Ae5X:valid:focus, +.index-module__custom-select__2Ae5X.index-module__is-valid__2NFXf:focus { + border-color: #28a745; + box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.25); +} + +.index-module__was-validated__LSagy + .index-module__form-check-input__XpnZN:valid + ~ .index-module__form-check-label__2cbqH, +.index-module__form-check-input__XpnZN.index-module__is-valid__2NFXf + ~ .index-module__form-check-label__2cbqH { + color: #28a745; +} + +.index-module__was-validated__LSagy + .index-module__form-check-input__XpnZN:valid + ~ .index-module__valid-feedback__2e8qI, +.index-module__was-validated__LSagy + .index-module__form-check-input__XpnZN:valid + ~ .index-module__valid-tooltip__3G7sU, +.index-module__form-check-input__XpnZN.index-module__is-valid__2NFXf + ~ .index-module__valid-feedback__2e8qI, +.index-module__form-check-input__XpnZN.index-module__is-valid__2NFXf + ~ .index-module__valid-tooltip__3G7sU { + display: block; +} + +.index-module__was-validated__LSagy + .index-module__custom-control-input__2tloy:valid + ~ .index-module__custom-control-label__17M6G, +.index-module__custom-control-input__2tloy.index-module__is-valid__2NFXf + ~ .index-module__custom-control-label__17M6G { + color: #28a745; +} +.index-module__was-validated__LSagy + .index-module__custom-control-input__2tloy:valid + ~ .index-module__custom-control-label__17M6G::before, +.index-module__custom-control-input__2tloy.index-module__is-valid__2NFXf + ~ .index-module__custom-control-label__17M6G::before { + border-color: #28a745; +} + +.index-module__was-validated__LSagy + .index-module__custom-control-input__2tloy:valid:checked + ~ .index-module__custom-control-label__17M6G::before, +.index-module__custom-control-input__2tloy.index-module__is-valid__2NFXf:checked + ~ .index-module__custom-control-label__17M6G::before { + border-color: #34ce57; + background-color: #34ce57; +} + +.index-module__was-validated__LSagy + .index-module__custom-control-input__2tloy:valid:focus + ~ .index-module__custom-control-label__17M6G::before, +.index-module__custom-control-input__2tloy.index-module__is-valid__2NFXf:focus + ~ .index-module__custom-control-label__17M6G::before { + box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.25); +} + +.index-module__was-validated__LSagy + .index-module__custom-control-input__2tloy:valid:focus:not(:checked) + ~ .index-module__custom-control-label__17M6G::before, +.index-module__custom-control-input__2tloy.index-module__is-valid__2NFXf:focus:not(:checked) + ~ .index-module__custom-control-label__17M6G::before { + border-color: #28a745; +} + +.index-module__was-validated__LSagy + .index-module__custom-file-input__22YHK:valid + ~ .index-module__custom-file-label__1lWwo, +.index-module__custom-file-input__22YHK.index-module__is-valid__2NFXf + ~ .index-module__custom-file-label__1lWwo { + border-color: #28a745; +} + +.index-module__was-validated__LSagy + .index-module__custom-file-input__22YHK:valid:focus + ~ .index-module__custom-file-label__1lWwo, +.index-module__custom-file-input__22YHK.index-module__is-valid__2NFXf:focus + ~ .index-module__custom-file-label__1lWwo { + border-color: #28a745; + box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.25); +} + +.index-module__invalid-feedback__2SYE6 { + display: none; + width: 100%; + margin-top: 0.25rem; + font-size: 80%; + color: #dc3545; +} + +.index-module__invalid-tooltip__2ajud { + position: absolute; + top: 100%; + z-index: 5; + display: none; + max-width: 100%; + padding: 0.25rem 0.5rem; + margin-top: 0.1rem; + font-size: 0.875rem; + line-height: 1.5; + color: #fff; + background-color: rgba(220, 53, 69, 0.9); + border-radius: 0.25rem; +} + +.index-module__was-validated__LSagy + :invalid + ~ .index-module__invalid-feedback__2SYE6, +.index-module__was-validated__LSagy + :invalid + ~ .index-module__invalid-tooltip__2ajud, +.index-module__is-invalid__3_LmP ~ .index-module__invalid-feedback__2SYE6, +.index-module__is-invalid__3_LmP ~ .index-module__invalid-tooltip__2ajud { + display: block; +} + +.index-module__was-validated__LSagy .index-module__form-control__33tSj:invalid, +.index-module__form-control__33tSj.index-module__is-invalid__3_LmP { + border-color: #dc3545; + padding-right: calc(1.5em + 0.75rem); + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' fill='none' stroke='%23dc3545' viewBox='0 0 12 12'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e"); + background-repeat: no-repeat; + background-position: right calc(0.375em + 0.1875rem) center; + background-size: calc(0.75em + 0.375rem) calc(0.75em + 0.375rem); +} +.index-module__was-validated__LSagy + .index-module__form-control__33tSj:invalid:focus, +.index-module__form-control__33tSj.index-module__is-invalid__3_LmP:focus { + border-color: #dc3545; + box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.25); +} + +.index-module__was-validated__LSagy + textarea.index-module__form-control__33tSj:invalid, +textarea.index-module__form-control__33tSj.index-module__is-invalid__3_LmP { + padding-right: calc(1.5em + 0.75rem); + background-position: top calc(0.375em + 0.1875rem) right + calc(0.375em + 0.1875rem); +} + +.index-module__was-validated__LSagy .index-module__custom-select__2Ae5X:invalid, +.index-module__custom-select__2Ae5X.index-module__is-invalid__3_LmP { + border-color: #dc3545; + padding-right: calc(0.75em + 2.3125rem); + background: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='5' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e") + no-repeat right 0.75rem center/8px 10px, + url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' fill='none' stroke='%23dc3545' viewBox='0 0 12 12'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e") + #fff no-repeat center right 1.75rem / calc(0.75em + 0.375rem) + calc(0.75em + 0.375rem); +} +.index-module__was-validated__LSagy + .index-module__custom-select__2Ae5X:invalid:focus, +.index-module__custom-select__2Ae5X.index-module__is-invalid__3_LmP:focus { + border-color: #dc3545; + box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.25); +} + +.index-module__was-validated__LSagy + .index-module__form-check-input__XpnZN:invalid + ~ .index-module__form-check-label__2cbqH, +.index-module__form-check-input__XpnZN.index-module__is-invalid__3_LmP + ~ .index-module__form-check-label__2cbqH { + color: #dc3545; +} + +.index-module__was-validated__LSagy + .index-module__form-check-input__XpnZN:invalid + ~ .index-module__invalid-feedback__2SYE6, +.index-module__was-validated__LSagy + .index-module__form-check-input__XpnZN:invalid + ~ .index-module__invalid-tooltip__2ajud, +.index-module__form-check-input__XpnZN.index-module__is-invalid__3_LmP + ~ .index-module__invalid-feedback__2SYE6, +.index-module__form-check-input__XpnZN.index-module__is-invalid__3_LmP + ~ .index-module__invalid-tooltip__2ajud { + display: block; +} + +.index-module__was-validated__LSagy + .index-module__custom-control-input__2tloy:invalid + ~ .index-module__custom-control-label__17M6G, +.index-module__custom-control-input__2tloy.index-module__is-invalid__3_LmP + ~ .index-module__custom-control-label__17M6G { + color: #dc3545; +} +.index-module__was-validated__LSagy + .index-module__custom-control-input__2tloy:invalid + ~ .index-module__custom-control-label__17M6G::before, +.index-module__custom-control-input__2tloy.index-module__is-invalid__3_LmP + ~ .index-module__custom-control-label__17M6G::before { + border-color: #dc3545; +} + +.index-module__was-validated__LSagy + .index-module__custom-control-input__2tloy:invalid:checked + ~ .index-module__custom-control-label__17M6G::before, +.index-module__custom-control-input__2tloy.index-module__is-invalid__3_LmP:checked + ~ .index-module__custom-control-label__17M6G::before { + border-color: #e4606d; + background-color: #e4606d; +} + +.index-module__was-validated__LSagy + .index-module__custom-control-input__2tloy:invalid:focus + ~ .index-module__custom-control-label__17M6G::before, +.index-module__custom-control-input__2tloy.index-module__is-invalid__3_LmP:focus + ~ .index-module__custom-control-label__17M6G::before { + box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.25); +} + +.index-module__was-validated__LSagy + .index-module__custom-control-input__2tloy:invalid:focus:not(:checked) + ~ .index-module__custom-control-label__17M6G::before, +.index-module__custom-control-input__2tloy.index-module__is-invalid__3_LmP:focus:not(:checked) + ~ .index-module__custom-control-label__17M6G::before { + border-color: #dc3545; +} + +.index-module__was-validated__LSagy + .index-module__custom-file-input__22YHK:invalid + ~ .index-module__custom-file-label__1lWwo, +.index-module__custom-file-input__22YHK.index-module__is-invalid__3_LmP + ~ .index-module__custom-file-label__1lWwo { + border-color: #dc3545; +} + +.index-module__was-validated__LSagy + .index-module__custom-file-input__22YHK:invalid:focus + ~ .index-module__custom-file-label__1lWwo, +.index-module__custom-file-input__22YHK.index-module__is-invalid__3_LmP:focus + ~ .index-module__custom-file-label__1lWwo { + border-color: #dc3545; + box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.25); +} + +.index-module__form-inline__1XHn0 { + display: flex; + flex-flow: row wrap; + align-items: center; +} +.index-module__form-inline__1XHn0 .index-module__form-check__2UQrO { + width: 100%; +} +@media (min-width: 576px) { + .index-module__form-inline__1XHn0 label { + display: flex; + align-items: center; + justify-content: center; + margin-bottom: 0; + } + .index-module__form-inline__1XHn0 .index-module__form-group__20g9m { + display: flex; + flex: 0 0 auto; + flex-flow: row wrap; + align-items: center; + margin-bottom: 0; + } + .index-module__form-inline__1XHn0 .index-module__form-control__33tSj { + display: inline-block; + width: auto; + vertical-align: middle; + } + .index-module__form-inline__1XHn0 + .index-module__form-control-plaintext__1Qr5_ { + display: inline-block; + } + .index-module__form-inline__1XHn0 .index-module__input-group__2KI-F, + .index-module__form-inline__1XHn0 .index-module__custom-select__2Ae5X { + width: auto; + } + .index-module__form-inline__1XHn0 .index-module__form-check__2UQrO { + display: flex; + align-items: center; + justify-content: center; + width: auto; + padding-left: 0; + } + .index-module__form-inline__1XHn0 .index-module__form-check-input__XpnZN { + position: relative; + flex-shrink: 0; + margin-top: 0; + margin-right: 0.25rem; + margin-left: 0; + } + .index-module__form-inline__1XHn0 .index-module__custom-control__2LzXs { + align-items: center; + justify-content: center; + } + .index-module__form-inline__1XHn0 .index-module__custom-control-label__17M6G { + margin-bottom: 0; + } +} + +.index-module__btn__1Pcdf { + display: inline-block; + font-weight: 400; + color: #212529; + text-align: center; + vertical-align: middle; + cursor: pointer; + user-select: none; + background-color: transparent; + border: 1px solid transparent; + padding: 0.375rem 0.75rem; + font-size: 1rem; + line-height: 1.5; + border-radius: 0.25rem; + transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, + border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; +} +@media (prefers-reduced-motion: reduce) { + .index-module__btn__1Pcdf { + transition: none; + } +} +.index-module__btn__1Pcdf:hover { + color: #212529; + text-decoration: none; +} +.index-module__btn__1Pcdf:focus, +.index-module__btn__1Pcdf.index-module__focus__37XLI { + outline: 0; + box-shadow: 0 0 0 0.2rem rgba(9, 104, 195, 0.25); +} +.index-module__btn__1Pcdf.index-module__disabled__2BtOk, +.index-module__btn__1Pcdf:disabled { + opacity: 0.65; +} + +a.index-module__btn__1Pcdf.index-module__disabled__2BtOk, +fieldset:disabled a.index-module__btn__1Pcdf { + pointer-events: none; +} + +.index-module__btn-primary__tn4qX { + color: #fff; + background-color: #0968c3; + border-color: #0968c3; +} +.index-module__btn-primary__tn4qX:hover { + color: #fff; + background-color: #07559e; + border-color: #074e92; +} +.index-module__btn-primary__tn4qX:focus, +.index-module__btn-primary__tn4qX.index-module__focus__37XLI { + color: #fff; + background-color: #07559e; + border-color: #074e92; + box-shadow: 0 0 0 0.2rem rgba(46, 127, 204, 0.5); +} +.index-module__btn-primary__tn4qX.index-module__disabled__2BtOk, +.index-module__btn-primary__tn4qX:disabled { + color: #fff; + background-color: #0968c3; + border-color: #0968c3; +} +.index-module__btn-primary__tn4qX:not(:disabled):not(.index-module__disabled__2BtOk):active, +.index-module__btn-primary__tn4qX:not(:disabled):not(.index-module__disabled__2BtOk).index-module__active__2-CxA, +.index-module__show__6Epil + > .index-module__btn-primary__tn4qX.index-module__dropdown-toggle__126GD { + color: #fff; + background-color: #074e92; + border-color: #064886; +} +.index-module__btn-primary__tn4qX:not(:disabled):not(.index-module__disabled__2BtOk):active:focus, +.index-module__btn-primary__tn4qX:not(:disabled):not(.index-module__disabled__2BtOk).index-module__active__2-CxA:focus, +.index-module__show__6Epil + > .index-module__btn-primary__tn4qX.index-module__dropdown-toggle__126GD:focus { + box-shadow: 0 0 0 0.2rem rgba(46, 127, 204, 0.5); +} + +.index-module__btn-secondary__1R5pU { + color: #fff; + background-color: #808080; + border-color: #808080; +} +.index-module__btn-secondary__1R5pU:hover { + color: #fff; + background-color: #6d6d6d; + border-color: #676767; +} +.index-module__btn-secondary__1R5pU:focus, +.index-module__btn-secondary__1R5pU.index-module__focus__37XLI { + color: #fff; + background-color: #6d6d6d; + border-color: #676767; + box-shadow: 0 0 0 0.2rem rgba(147, 147, 147, 0.5); +} +.index-module__btn-secondary__1R5pU.index-module__disabled__2BtOk, +.index-module__btn-secondary__1R5pU:disabled { + color: #fff; + background-color: #808080; + border-color: #808080; +} +.index-module__btn-secondary__1R5pU:not(:disabled):not(.index-module__disabled__2BtOk):active, +.index-module__btn-secondary__1R5pU:not(:disabled):not(.index-module__disabled__2BtOk).index-module__active__2-CxA, +.index-module__show__6Epil + > .index-module__btn-secondary__1R5pU.index-module__dropdown-toggle__126GD { + color: #fff; + background-color: #676767; + border-color: #606060; +} +.index-module__btn-secondary__1R5pU:not(:disabled):not(.index-module__disabled__2BtOk):active:focus, +.index-module__btn-secondary__1R5pU:not(:disabled):not(.index-module__disabled__2BtOk).index-module__active__2-CxA:focus, +.index-module__show__6Epil + > .index-module__btn-secondary__1R5pU.index-module__dropdown-toggle__126GD:focus { + box-shadow: 0 0 0 0.2rem rgba(147, 147, 147, 0.5); +} + +.index-module__btn-success__1EMgR { + color: #fff; + background-color: #28a745; + border-color: #28a745; +} +.index-module__btn-success__1EMgR:hover { + color: #fff; + background-color: #218838; + border-color: #1e7e34; +} +.index-module__btn-success__1EMgR:focus, +.index-module__btn-success__1EMgR.index-module__focus__37XLI { + color: #fff; + background-color: #218838; + border-color: #1e7e34; + box-shadow: 0 0 0 0.2rem rgba(72, 180, 97, 0.5); +} +.index-module__btn-success__1EMgR.index-module__disabled__2BtOk, +.index-module__btn-success__1EMgR:disabled { + color: #fff; + background-color: #28a745; + border-color: #28a745; +} +.index-module__btn-success__1EMgR:not(:disabled):not(.index-module__disabled__2BtOk):active, +.index-module__btn-success__1EMgR:not(:disabled):not(.index-module__disabled__2BtOk).index-module__active__2-CxA, +.index-module__show__6Epil + > .index-module__btn-success__1EMgR.index-module__dropdown-toggle__126GD { + color: #fff; + background-color: #1e7e34; + border-color: #1c7430; +} +.index-module__btn-success__1EMgR:not(:disabled):not(.index-module__disabled__2BtOk):active:focus, +.index-module__btn-success__1EMgR:not(:disabled):not(.index-module__disabled__2BtOk).index-module__active__2-CxA:focus, +.index-module__show__6Epil + > .index-module__btn-success__1EMgR.index-module__dropdown-toggle__126GD:focus { + box-shadow: 0 0 0 0.2rem rgba(72, 180, 97, 0.5); +} + +.index-module__btn-info__qrgmt { + color: #fff; + background-color: #17a2b8; + border-color: #17a2b8; +} +.index-module__btn-info__qrgmt:hover { + color: #fff; + background-color: #138496; + border-color: #117a8b; +} +.index-module__btn-info__qrgmt:focus, +.index-module__btn-info__qrgmt.index-module__focus__37XLI { + color: #fff; + background-color: #138496; + border-color: #117a8b; + box-shadow: 0 0 0 0.2rem rgba(58, 176, 195, 0.5); +} +.index-module__btn-info__qrgmt.index-module__disabled__2BtOk, +.index-module__btn-info__qrgmt:disabled { + color: #fff; + background-color: #17a2b8; + border-color: #17a2b8; +} +.index-module__btn-info__qrgmt:not(:disabled):not(.index-module__disabled__2BtOk):active, +.index-module__btn-info__qrgmt:not(:disabled):not(.index-module__disabled__2BtOk).index-module__active__2-CxA, +.index-module__show__6Epil + > .index-module__btn-info__qrgmt.index-module__dropdown-toggle__126GD { + color: #fff; + background-color: #117a8b; + border-color: #10707f; +} +.index-module__btn-info__qrgmt:not(:disabled):not(.index-module__disabled__2BtOk):active:focus, +.index-module__btn-info__qrgmt:not(:disabled):not(.index-module__disabled__2BtOk).index-module__active__2-CxA:focus, +.index-module__show__6Epil + > .index-module__btn-info__qrgmt.index-module__dropdown-toggle__126GD:focus { + box-shadow: 0 0 0 0.2rem rgba(58, 176, 195, 0.5); +} + +.index-module__btn-warning__1E7if { + color: #212529; + background-color: #ffc107; + border-color: #ffc107; +} +.index-module__btn-warning__1E7if:hover { + color: #212529; + background-color: #e0a800; + border-color: #d39e00; +} +.index-module__btn-warning__1E7if:focus, +.index-module__btn-warning__1E7if.index-module__focus__37XLI { + color: #212529; + background-color: #e0a800; + border-color: #d39e00; + box-shadow: 0 0 0 0.2rem rgba(222, 170, 12, 0.5); +} +.index-module__btn-warning__1E7if.index-module__disabled__2BtOk, +.index-module__btn-warning__1E7if:disabled { + color: #212529; + background-color: #ffc107; + border-color: #ffc107; +} +.index-module__btn-warning__1E7if:not(:disabled):not(.index-module__disabled__2BtOk):active, +.index-module__btn-warning__1E7if:not(:disabled):not(.index-module__disabled__2BtOk).index-module__active__2-CxA, +.index-module__show__6Epil + > .index-module__btn-warning__1E7if.index-module__dropdown-toggle__126GD { + color: #212529; + background-color: #d39e00; + border-color: #c69500; +} +.index-module__btn-warning__1E7if:not(:disabled):not(.index-module__disabled__2BtOk):active:focus, +.index-module__btn-warning__1E7if:not(:disabled):not(.index-module__disabled__2BtOk).index-module__active__2-CxA:focus, +.index-module__show__6Epil + > .index-module__btn-warning__1E7if.index-module__dropdown-toggle__126GD:focus { + box-shadow: 0 0 0 0.2rem rgba(222, 170, 12, 0.5); +} + +.index-module__btn-danger__3Wxrs { + color: #fff; + background-color: #dc3545; + border-color: #dc3545; +} +.index-module__btn-danger__3Wxrs:hover { + color: #fff; + background-color: #c82333; + border-color: #bd2130; +} +.index-module__btn-danger__3Wxrs:focus, +.index-module__btn-danger__3Wxrs.index-module__focus__37XLI { + color: #fff; + background-color: #c82333; + border-color: #bd2130; + box-shadow: 0 0 0 0.2rem rgba(225, 83, 97, 0.5); +} +.index-module__btn-danger__3Wxrs.index-module__disabled__2BtOk, +.index-module__btn-danger__3Wxrs:disabled { + color: #fff; + background-color: #dc3545; + border-color: #dc3545; +} +.index-module__btn-danger__3Wxrs:not(:disabled):not(.index-module__disabled__2BtOk):active, +.index-module__btn-danger__3Wxrs:not(:disabled):not(.index-module__disabled__2BtOk).index-module__active__2-CxA, +.index-module__show__6Epil + > .index-module__btn-danger__3Wxrs.index-module__dropdown-toggle__126GD { + color: #fff; + background-color: #bd2130; + border-color: #b21f2d; +} +.index-module__btn-danger__3Wxrs:not(:disabled):not(.index-module__disabled__2BtOk):active:focus, +.index-module__btn-danger__3Wxrs:not(:disabled):not(.index-module__disabled__2BtOk).index-module__active__2-CxA:focus, +.index-module__show__6Epil + > .index-module__btn-danger__3Wxrs.index-module__dropdown-toggle__126GD:focus { + box-shadow: 0 0 0 0.2rem rgba(225, 83, 97, 0.5); +} + +.index-module__btn-light__3I-9B { + color: #212529; + background-color: #f8f9fa; + border-color: #f8f9fa; +} +.index-module__btn-light__3I-9B:hover { + color: #212529; + background-color: #e2e6ea; + border-color: #dae0e5; +} +.index-module__btn-light__3I-9B:focus, +.index-module__btn-light__3I-9B.index-module__focus__37XLI { + color: #212529; + background-color: #e2e6ea; + border-color: #dae0e5; + box-shadow: 0 0 0 0.2rem rgba(216, 217, 219, 0.5); +} +.index-module__btn-light__3I-9B.index-module__disabled__2BtOk, +.index-module__btn-light__3I-9B:disabled { + color: #212529; + background-color: #f8f9fa; + border-color: #f8f9fa; +} +.index-module__btn-light__3I-9B:not(:disabled):not(.index-module__disabled__2BtOk):active, +.index-module__btn-light__3I-9B:not(:disabled):not(.index-module__disabled__2BtOk).index-module__active__2-CxA, +.index-module__show__6Epil + > .index-module__btn-light__3I-9B.index-module__dropdown-toggle__126GD { + color: #212529; + background-color: #dae0e5; + border-color: #d3d9df; +} +.index-module__btn-light__3I-9B:not(:disabled):not(.index-module__disabled__2BtOk):active:focus, +.index-module__btn-light__3I-9B:not(:disabled):not(.index-module__disabled__2BtOk).index-module__active__2-CxA:focus, +.index-module__show__6Epil + > .index-module__btn-light__3I-9B.index-module__dropdown-toggle__126GD:focus { + box-shadow: 0 0 0 0.2rem rgba(216, 217, 219, 0.5); +} + +.index-module__btn-dark__1JkqV { + color: #fff; + background-color: #343a40; + border-color: #343a40; +} +.index-module__btn-dark__1JkqV:hover { + color: #fff; + background-color: #23272b; + border-color: #1d2124; +} +.index-module__btn-dark__1JkqV:focus, +.index-module__btn-dark__1JkqV.index-module__focus__37XLI { + color: #fff; + background-color: #23272b; + border-color: #1d2124; + box-shadow: 0 0 0 0.2rem rgba(82, 88, 93, 0.5); +} +.index-module__btn-dark__1JkqV.index-module__disabled__2BtOk, +.index-module__btn-dark__1JkqV:disabled { + color: #fff; + background-color: #343a40; + border-color: #343a40; +} +.index-module__btn-dark__1JkqV:not(:disabled):not(.index-module__disabled__2BtOk):active, +.index-module__btn-dark__1JkqV:not(:disabled):not(.index-module__disabled__2BtOk).index-module__active__2-CxA, +.index-module__show__6Epil + > .index-module__btn-dark__1JkqV.index-module__dropdown-toggle__126GD { + color: #fff; + background-color: #1d2124; + border-color: #171a1d; +} +.index-module__btn-dark__1JkqV:not(:disabled):not(.index-module__disabled__2BtOk):active:focus, +.index-module__btn-dark__1JkqV:not(:disabled):not(.index-module__disabled__2BtOk).index-module__active__2-CxA:focus, +.index-module__show__6Epil + > .index-module__btn-dark__1JkqV.index-module__dropdown-toggle__126GD:focus { + box-shadow: 0 0 0 0.2rem rgba(82, 88, 93, 0.5); +} + +.index-module__btn-outline-primary__3lAZR { + color: #0968c3; + border-color: #0968c3; +} +.index-module__btn-outline-primary__3lAZR:hover { + color: #fff; + background-color: #0968c3; + border-color: #0968c3; +} +.index-module__btn-outline-primary__3lAZR:focus, +.index-module__btn-outline-primary__3lAZR.index-module__focus__37XLI { + box-shadow: 0 0 0 0.2rem rgba(9, 104, 195, 0.5); +} +.index-module__btn-outline-primary__3lAZR.index-module__disabled__2BtOk, +.index-module__btn-outline-primary__3lAZR:disabled { + color: #0968c3; + background-color: transparent; +} +.index-module__btn-outline-primary__3lAZR:not(:disabled):not(.index-module__disabled__2BtOk):active, +.index-module__btn-outline-primary__3lAZR:not(:disabled):not(.index-module__disabled__2BtOk).index-module__active__2-CxA, +.index-module__show__6Epil + > .index-module__btn-outline-primary__3lAZR.index-module__dropdown-toggle__126GD { + color: #fff; + background-color: #0968c3; + border-color: #0968c3; +} +.index-module__btn-outline-primary__3lAZR:not(:disabled):not(.index-module__disabled__2BtOk):active:focus, +.index-module__btn-outline-primary__3lAZR:not(:disabled):not(.index-module__disabled__2BtOk).index-module__active__2-CxA:focus, +.index-module__show__6Epil + > .index-module__btn-outline-primary__3lAZR.index-module__dropdown-toggle__126GD:focus { + box-shadow: 0 0 0 0.2rem rgba(9, 104, 195, 0.5); +} + +.index-module__btn-outline-secondary__2qj9A { + color: #808080; + border-color: #808080; +} +.index-module__btn-outline-secondary__2qj9A:hover { + color: #fff; + background-color: #808080; + border-color: #808080; +} +.index-module__btn-outline-secondary__2qj9A:focus, +.index-module__btn-outline-secondary__2qj9A.index-module__focus__37XLI { + box-shadow: 0 0 0 0.2rem rgba(128, 128, 128, 0.5); +} +.index-module__btn-outline-secondary__2qj9A.index-module__disabled__2BtOk, +.index-module__btn-outline-secondary__2qj9A:disabled { + color: #808080; + background-color: transparent; +} +.index-module__btn-outline-secondary__2qj9A:not(:disabled):not(.index-module__disabled__2BtOk):active, +.index-module__btn-outline-secondary__2qj9A:not(:disabled):not(.index-module__disabled__2BtOk).index-module__active__2-CxA, +.index-module__show__6Epil + > .index-module__btn-outline-secondary__2qj9A.index-module__dropdown-toggle__126GD { + color: #fff; + background-color: #808080; + border-color: #808080; +} +.index-module__btn-outline-secondary__2qj9A:not(:disabled):not(.index-module__disabled__2BtOk):active:focus, +.index-module__btn-outline-secondary__2qj9A:not(:disabled):not(.index-module__disabled__2BtOk).index-module__active__2-CxA:focus, +.index-module__show__6Epil + > .index-module__btn-outline-secondary__2qj9A.index-module__dropdown-toggle__126GD:focus { + box-shadow: 0 0 0 0.2rem rgba(128, 128, 128, 0.5); +} + +.index-module__btn-outline-success__3gxh5 { + color: #28a745; + border-color: #28a745; +} +.index-module__btn-outline-success__3gxh5:hover { + color: #fff; + background-color: #28a745; + border-color: #28a745; +} +.index-module__btn-outline-success__3gxh5:focus, +.index-module__btn-outline-success__3gxh5.index-module__focus__37XLI { + box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.5); +} +.index-module__btn-outline-success__3gxh5.index-module__disabled__2BtOk, +.index-module__btn-outline-success__3gxh5:disabled { + color: #28a745; + background-color: transparent; +} +.index-module__btn-outline-success__3gxh5:not(:disabled):not(.index-module__disabled__2BtOk):active, +.index-module__btn-outline-success__3gxh5:not(:disabled):not(.index-module__disabled__2BtOk).index-module__active__2-CxA, +.index-module__show__6Epil + > .index-module__btn-outline-success__3gxh5.index-module__dropdown-toggle__126GD { + color: #fff; + background-color: #28a745; + border-color: #28a745; +} +.index-module__btn-outline-success__3gxh5:not(:disabled):not(.index-module__disabled__2BtOk):active:focus, +.index-module__btn-outline-success__3gxh5:not(:disabled):not(.index-module__disabled__2BtOk).index-module__active__2-CxA:focus, +.index-module__show__6Epil + > .index-module__btn-outline-success__3gxh5.index-module__dropdown-toggle__126GD:focus { + box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.5); +} + +.index-module__btn-outline-info__1XYaK { + color: #17a2b8; + border-color: #17a2b8; +} +.index-module__btn-outline-info__1XYaK:hover { + color: #fff; + background-color: #17a2b8; + border-color: #17a2b8; +} +.index-module__btn-outline-info__1XYaK:focus, +.index-module__btn-outline-info__1XYaK.index-module__focus__37XLI { + box-shadow: 0 0 0 0.2rem rgba(23, 162, 184, 0.5); +} +.index-module__btn-outline-info__1XYaK.index-module__disabled__2BtOk, +.index-module__btn-outline-info__1XYaK:disabled { + color: #17a2b8; + background-color: transparent; +} +.index-module__btn-outline-info__1XYaK:not(:disabled):not(.index-module__disabled__2BtOk):active, +.index-module__btn-outline-info__1XYaK:not(:disabled):not(.index-module__disabled__2BtOk).index-module__active__2-CxA, +.index-module__show__6Epil + > .index-module__btn-outline-info__1XYaK.index-module__dropdown-toggle__126GD { + color: #fff; + background-color: #17a2b8; + border-color: #17a2b8; +} +.index-module__btn-outline-info__1XYaK:not(:disabled):not(.index-module__disabled__2BtOk):active:focus, +.index-module__btn-outline-info__1XYaK:not(:disabled):not(.index-module__disabled__2BtOk).index-module__active__2-CxA:focus, +.index-module__show__6Epil + > .index-module__btn-outline-info__1XYaK.index-module__dropdown-toggle__126GD:focus { + box-shadow: 0 0 0 0.2rem rgba(23, 162, 184, 0.5); +} + +.index-module__btn-outline-warning__1VRWd { + color: #ffc107; + border-color: #ffc107; +} +.index-module__btn-outline-warning__1VRWd:hover { + color: #212529; + background-color: #ffc107; + border-color: #ffc107; +} +.index-module__btn-outline-warning__1VRWd:focus, +.index-module__btn-outline-warning__1VRWd.index-module__focus__37XLI { + box-shadow: 0 0 0 0.2rem rgba(255, 193, 7, 0.5); +} +.index-module__btn-outline-warning__1VRWd.index-module__disabled__2BtOk, +.index-module__btn-outline-warning__1VRWd:disabled { + color: #ffc107; + background-color: transparent; +} +.index-module__btn-outline-warning__1VRWd:not(:disabled):not(.index-module__disabled__2BtOk):active, +.index-module__btn-outline-warning__1VRWd:not(:disabled):not(.index-module__disabled__2BtOk).index-module__active__2-CxA, +.index-module__show__6Epil + > .index-module__btn-outline-warning__1VRWd.index-module__dropdown-toggle__126GD { + color: #212529; + background-color: #ffc107; + border-color: #ffc107; +} +.index-module__btn-outline-warning__1VRWd:not(:disabled):not(.index-module__disabled__2BtOk):active:focus, +.index-module__btn-outline-warning__1VRWd:not(:disabled):not(.index-module__disabled__2BtOk).index-module__active__2-CxA:focus, +.index-module__show__6Epil + > .index-module__btn-outline-warning__1VRWd.index-module__dropdown-toggle__126GD:focus { + box-shadow: 0 0 0 0.2rem rgba(255, 193, 7, 0.5); +} + +.index-module__btn-outline-danger__1hm77 { + color: #dc3545; + border-color: #dc3545; +} +.index-module__btn-outline-danger__1hm77:hover { + color: #fff; + background-color: #dc3545; + border-color: #dc3545; +} +.index-module__btn-outline-danger__1hm77:focus, +.index-module__btn-outline-danger__1hm77.index-module__focus__37XLI { + box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.5); +} +.index-module__btn-outline-danger__1hm77.index-module__disabled__2BtOk, +.index-module__btn-outline-danger__1hm77:disabled { + color: #dc3545; + background-color: transparent; +} +.index-module__btn-outline-danger__1hm77:not(:disabled):not(.index-module__disabled__2BtOk):active, +.index-module__btn-outline-danger__1hm77:not(:disabled):not(.index-module__disabled__2BtOk).index-module__active__2-CxA, +.index-module__show__6Epil + > .index-module__btn-outline-danger__1hm77.index-module__dropdown-toggle__126GD { + color: #fff; + background-color: #dc3545; + border-color: #dc3545; +} +.index-module__btn-outline-danger__1hm77:not(:disabled):not(.index-module__disabled__2BtOk):active:focus, +.index-module__btn-outline-danger__1hm77:not(:disabled):not(.index-module__disabled__2BtOk).index-module__active__2-CxA:focus, +.index-module__show__6Epil + > .index-module__btn-outline-danger__1hm77.index-module__dropdown-toggle__126GD:focus { + box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.5); +} + +.index-module__btn-outline-light__2kClq { + color: #f8f9fa; + border-color: #f8f9fa; +} +.index-module__btn-outline-light__2kClq:hover { + color: #212529; + background-color: #f8f9fa; + border-color: #f8f9fa; +} +.index-module__btn-outline-light__2kClq:focus, +.index-module__btn-outline-light__2kClq.index-module__focus__37XLI { + box-shadow: 0 0 0 0.2rem rgba(248, 249, 250, 0.5); +} +.index-module__btn-outline-light__2kClq.index-module__disabled__2BtOk, +.index-module__btn-outline-light__2kClq:disabled { + color: #f8f9fa; + background-color: transparent; +} +.index-module__btn-outline-light__2kClq:not(:disabled):not(.index-module__disabled__2BtOk):active, +.index-module__btn-outline-light__2kClq:not(:disabled):not(.index-module__disabled__2BtOk).index-module__active__2-CxA, +.index-module__show__6Epil + > .index-module__btn-outline-light__2kClq.index-module__dropdown-toggle__126GD { + color: #212529; + background-color: #f8f9fa; + border-color: #f8f9fa; +} +.index-module__btn-outline-light__2kClq:not(:disabled):not(.index-module__disabled__2BtOk):active:focus, +.index-module__btn-outline-light__2kClq:not(:disabled):not(.index-module__disabled__2BtOk).index-module__active__2-CxA:focus, +.index-module__show__6Epil + > .index-module__btn-outline-light__2kClq.index-module__dropdown-toggle__126GD:focus { + box-shadow: 0 0 0 0.2rem rgba(248, 249, 250, 0.5); +} + +.index-module__btn-outline-dark__2uuwK { + color: #343a40; + border-color: #343a40; +} +.index-module__btn-outline-dark__2uuwK:hover { + color: #fff; + background-color: #343a40; + border-color: #343a40; +} +.index-module__btn-outline-dark__2uuwK:focus, +.index-module__btn-outline-dark__2uuwK.index-module__focus__37XLI { + box-shadow: 0 0 0 0.2rem rgba(52, 58, 64, 0.5); +} +.index-module__btn-outline-dark__2uuwK.index-module__disabled__2BtOk, +.index-module__btn-outline-dark__2uuwK:disabled { + color: #343a40; + background-color: transparent; +} +.index-module__btn-outline-dark__2uuwK:not(:disabled):not(.index-module__disabled__2BtOk):active, +.index-module__btn-outline-dark__2uuwK:not(:disabled):not(.index-module__disabled__2BtOk).index-module__active__2-CxA, +.index-module__show__6Epil + > .index-module__btn-outline-dark__2uuwK.index-module__dropdown-toggle__126GD { + color: #fff; + background-color: #343a40; + border-color: #343a40; +} +.index-module__btn-outline-dark__2uuwK:not(:disabled):not(.index-module__disabled__2BtOk):active:focus, +.index-module__btn-outline-dark__2uuwK:not(:disabled):not(.index-module__disabled__2BtOk).index-module__active__2-CxA:focus, +.index-module__show__6Epil + > .index-module__btn-outline-dark__2uuwK.index-module__dropdown-toggle__126GD:focus { + box-shadow: 0 0 0 0.2rem rgba(52, 58, 64, 0.5); +} + +.index-module__btn-link__Ryrl9, +.index-module__btnLinkText__3tE8k { + font-weight: 400; + color: #0968c3; + text-decoration: none; +} +.index-module__btn-link__Ryrl9:hover, +.index-module__btnLinkText__3tE8k:hover { + color: #0b2569; + text-decoration: underline; +} +.index-module__btn-link__Ryrl9:focus, +.index-module__btnLinkText__3tE8k:focus, +.index-module__btn-link__Ryrl9.index-module__focus__37XLI, +.index-module__focus__37XLI.index-module__btnLinkText__3tE8k { + text-decoration: underline; + box-shadow: none; +} +.index-module__btn-link__Ryrl9:disabled, +.index-module__btnLinkText__3tE8k:disabled, +.index-module__btn-link__Ryrl9.index-module__disabled__2BtOk, +.index-module__disabled__2BtOk.index-module__btnLinkText__3tE8k { + color: #6c757d; + pointer-events: none; +} + +.index-module__btn-lg__2dm__, +.index-module__btn-group-lg__3vO5c > .index-module__btn__1Pcdf { + padding: 0.5rem 1rem; + font-size: 1.25rem; + line-height: 1.5; + border-radius: 0.3rem; +} + +.index-module__btn-sm__uACm9, +.index-module__btn-group-sm__2qGvo > .index-module__btn__1Pcdf { + padding: 0.25rem 0.5rem; + font-size: 0.875rem; + line-height: 1.5; + border-radius: 0.2rem; +} + +.index-module__btn-block__2B8z7 { + display: block; + width: 100%; +} +.index-module__btn-block__2B8z7 + .index-module__btn-block__2B8z7 { + margin-top: 0.5rem; +} + +input[type='submit'].index-module__btn-block__2B8z7, +input[type='reset'].index-module__btn-block__2B8z7, +input[type='button'].index-module__btn-block__2B8z7 { + width: 100%; +} + +.index-module__fade__23Syb { + transition: opacity 0.15s linear; +} +@media (prefers-reduced-motion: reduce) { + .index-module__fade__23Syb { + transition: none; + } +} +.index-module__fade__23Syb:not(.index-module__show__6Epil) { + opacity: 0; +} + +.index-module__collapse__12Qls:not(.index-module__show__6Epil) { + display: none; +} + +.index-module__collapsing__1R9Ig { + position: relative; + height: 0; + overflow: hidden; + transition: height 0.35s ease; +} +@media (prefers-reduced-motion: reduce) { + .index-module__collapsing__1R9Ig { + transition: none; + } +} + +.index-module__dropup__1uJXa, +.index-module__dropright__2YE8b, +.index-module__dropdown__3F8O8, +.index-module__dropleft__2pr3E { + position: relative; +} + +.index-module__dropdown-toggle__126GD { + white-space: nowrap; +} +.index-module__dropdown-toggle__126GD::after { + display: inline-block; + margin-left: 0.255em; + vertical-align: 0.255em; + content: ''; + border-top: 0.3em solid; + border-right: 0.3em solid transparent; + border-bottom: 0; + border-left: 0.3em solid transparent; +} +.index-module__dropdown-toggle__126GD:empty::after { + margin-left: 0; +} + +.index-module__dropdown-menu__1pzMl { + position: absolute; + top: 100%; + left: 0; + z-index: 1000; + display: none; + float: left; + min-width: 10rem; + padding: 0.5rem 0; + margin: 0.125rem 0 0; + font-size: 1rem; + color: #212529; + text-align: left; + list-style: none; + background-color: #fff; + background-clip: padding-box; + border: 1px solid rgba(0, 0, 0, 0.15); + border-radius: 0.25rem; +} + +.index-module__dropdown-menu-left__3FpwF { + right: auto; + left: 0; +} + +.index-module__dropdown-menu-right__1UJne { + right: 0; + left: auto; +} + +@media (min-width: 576px) { + .index-module__dropdown-menu-sm-left__3m9sl { + right: auto; + left: 0; + } + .index-module__dropdown-menu-sm-right__eaU72 { + right: 0; + left: auto; + } +} + +@media (min-width: 768px) { + .index-module__dropdown-menu-md-left__2v8Zw { + right: auto; + left: 0; + } + .index-module__dropdown-menu-md-right__29eeO { + right: 0; + left: auto; + } +} + +@media (min-width: 1050px) { + .index-module__dropdown-menu-lg-left__1Mo8l { + right: auto; + left: 0; + } + .index-module__dropdown-menu-lg-right__2GKQl { + right: 0; + left: auto; + } +} + +@media (min-width: 1413px) { + .index-module__dropdown-menu-xl-left__qwf9Z { + right: auto; + left: 0; + } + .index-module__dropdown-menu-xl-right__gVhbV { + right: 0; + left: auto; + } +} + +.index-module__dropup__1uJXa .index-module__dropdown-menu__1pzMl { + top: auto; + bottom: 100%; + margin-top: 0; + margin-bottom: 0.125rem; +} + +.index-module__dropup__1uJXa .index-module__dropdown-toggle__126GD::after { + display: inline-block; + margin-left: 0.255em; + vertical-align: 0.255em; + content: ''; + border-top: 0; + border-right: 0.3em solid transparent; + border-bottom: 0.3em solid; + border-left: 0.3em solid transparent; +} + +.index-module__dropup__1uJXa + .index-module__dropdown-toggle__126GD:empty::after { + margin-left: 0; +} + +.index-module__dropright__2YE8b .index-module__dropdown-menu__1pzMl { + top: 0; + right: auto; + left: 100%; + margin-top: 0; + margin-left: 0.125rem; +} + +.index-module__dropright__2YE8b .index-module__dropdown-toggle__126GD::after { + display: inline-block; + margin-left: 0.255em; + vertical-align: 0.255em; + content: ''; + border-top: 0.3em solid transparent; + border-right: 0; + border-bottom: 0.3em solid transparent; + border-left: 0.3em solid; +} + +.index-module__dropright__2YE8b + .index-module__dropdown-toggle__126GD:empty::after { + margin-left: 0; +} + +.index-module__dropright__2YE8b .index-module__dropdown-toggle__126GD::after { + vertical-align: 0; +} + +.index-module__dropleft__2pr3E .index-module__dropdown-menu__1pzMl { + top: 0; + right: 100%; + left: auto; + margin-top: 0; + margin-right: 0.125rem; +} + +.index-module__dropleft__2pr3E .index-module__dropdown-toggle__126GD::after { + display: inline-block; + margin-left: 0.255em; + vertical-align: 0.255em; + content: ''; +} + +.index-module__dropleft__2pr3E .index-module__dropdown-toggle__126GD::after { + display: none; +} + +.index-module__dropleft__2pr3E .index-module__dropdown-toggle__126GD::before { + display: inline-block; + margin-right: 0.255em; + vertical-align: 0.255em; + content: ''; + border-top: 0.3em solid transparent; + border-right: 0.3em solid; + border-bottom: 0.3em solid transparent; +} + +.index-module__dropleft__2pr3E + .index-module__dropdown-toggle__126GD:empty::after { + margin-left: 0; +} + +.index-module__dropleft__2pr3E .index-module__dropdown-toggle__126GD::before { + vertical-align: 0; +} + +.index-module__dropdown-menu__1pzMl[x-placement^='top'], +.index-module__dropdown-menu__1pzMl[x-placement^='right'], +.index-module__dropdown-menu__1pzMl[x-placement^='bottom'], +.index-module__dropdown-menu__1pzMl[x-placement^='left'] { + right: auto; + bottom: auto; +} + +.index-module__dropdown-divider__G6_n4 { + height: 0; + margin: 0.5rem 0; + overflow: hidden; + border-top: 1px solid #e9ecef; +} + +.index-module__dropdown-item__1wMHJ { + display: block; + width: 100%; + padding: 0.25rem 1.5rem; + clear: both; + font-weight: 400; + color: #212529; + text-align: inherit; + white-space: nowrap; + background-color: transparent; + border: 0; +} +.index-module__dropdown-item__1wMHJ:hover, +.index-module__dropdown-item__1wMHJ:focus { + color: #16181b; + text-decoration: none; + background-color: #f8f9fa; +} +.index-module__dropdown-item__1wMHJ.index-module__active__2-CxA, +.index-module__dropdown-item__1wMHJ:active { + color: #fff; + text-decoration: none; + background-color: #0968c3; +} +.index-module__dropdown-item__1wMHJ.index-module__disabled__2BtOk, +.index-module__dropdown-item__1wMHJ:disabled { + color: #6c757d; + pointer-events: none; + background-color: transparent; +} + +.index-module__dropdown-menu__1pzMl.index-module__show__6Epil { + display: block; +} + +.index-module__dropdown-header__2G1LB { + display: block; + padding: 0.5rem 1.5rem; + margin-bottom: 0; + font-size: 0.875rem; + color: #6c757d; + white-space: nowrap; +} + +.index-module__dropdown-item-text__Tc00Q { + display: block; + padding: 0.25rem 1.5rem; + color: #212529; +} + +.index-module__btn-group__dCLg2, +.index-module__btn-group-vertical__1uuqp { + position: relative; + display: inline-flex; + vertical-align: middle; +} +.index-module__btn-group__dCLg2 > .index-module__btn__1Pcdf, +.index-module__btn-group-vertical__1uuqp > .index-module__btn__1Pcdf { + position: relative; + flex: 1 1 auto; +} +.index-module__btn-group__dCLg2 > .index-module__btn__1Pcdf:hover, +.index-module__btn-group-vertical__1uuqp > .index-module__btn__1Pcdf:hover { + z-index: 1; +} +.index-module__btn-group__dCLg2 > .index-module__btn__1Pcdf:focus, +.index-module__btn-group__dCLg2 > .index-module__btn__1Pcdf:active, +.index-module__btn-group__dCLg2 + > .index-module__btn__1Pcdf.index-module__active__2-CxA, +.index-module__btn-group-vertical__1uuqp > .index-module__btn__1Pcdf:focus, +.index-module__btn-group-vertical__1uuqp > .index-module__btn__1Pcdf:active, +.index-module__btn-group-vertical__1uuqp + > .index-module__btn__1Pcdf.index-module__active__2-CxA { + z-index: 1; +} + +.index-module__btn-toolbar__3FwpK { + display: flex; + flex-wrap: wrap; + justify-content: flex-start; +} +.index-module__btn-toolbar__3FwpK .index-module__input-group__2KI-F { + width: auto; +} + +.index-module__btn-group__dCLg2 > .index-module__btn__1Pcdf:not(:first-child), +.index-module__btn-group__dCLg2 + > .index-module__btn-group__dCLg2:not(:first-child) { + margin-left: -1px; +} + +.index-module__btn-group__dCLg2 + > .index-module__btn__1Pcdf:not(:last-child):not(.index-module__dropdown-toggle__126GD), +.index-module__btn-group__dCLg2 + > .index-module__btn-group__dCLg2:not(:last-child) + > .index-module__btn__1Pcdf { + border-top-right-radius: 0; + border-bottom-right-radius: 0; +} + +.index-module__btn-group__dCLg2 > .index-module__btn__1Pcdf:not(:first-child), +.index-module__btn-group__dCLg2 + > .index-module__btn-group__dCLg2:not(:first-child) + > .index-module__btn__1Pcdf { + border-top-left-radius: 0; + border-bottom-left-radius: 0; +} + +.index-module__dropdown-toggle-split__2cUc1 { + padding-right: 0.5625rem; + padding-left: 0.5625rem; +} +.index-module__dropdown-toggle-split__2cUc1::after, +.index-module__dropup__1uJXa .index-module__dropdown-toggle-split__2cUc1::after, +.index-module__dropright__2YE8b + .index-module__dropdown-toggle-split__2cUc1::after { + margin-left: 0; +} +.index-module__dropleft__2pr3E + .index-module__dropdown-toggle-split__2cUc1::before { + margin-right: 0; +} + +.index-module__btn-sm__uACm9 + .index-module__dropdown-toggle-split__2cUc1, +.index-module__btn-group-sm__2qGvo + > .index-module__btn__1Pcdf + + .index-module__dropdown-toggle-split__2cUc1 { + padding-right: 0.375rem; + padding-left: 0.375rem; +} + +.index-module__btn-lg__2dm__ + .index-module__dropdown-toggle-split__2cUc1, +.index-module__btn-group-lg__3vO5c + > .index-module__btn__1Pcdf + + .index-module__dropdown-toggle-split__2cUc1 { + padding-right: 0.75rem; + padding-left: 0.75rem; +} + +.index-module__btn-group-vertical__1uuqp { + flex-direction: column; + align-items: flex-start; + justify-content: center; +} +.index-module__btn-group-vertical__1uuqp > .index-module__btn__1Pcdf, +.index-module__btn-group-vertical__1uuqp > .index-module__btn-group__dCLg2 { + width: 100%; +} +.index-module__btn-group-vertical__1uuqp + > .index-module__btn__1Pcdf:not(:first-child), +.index-module__btn-group-vertical__1uuqp + > .index-module__btn-group__dCLg2:not(:first-child) { + margin-top: -1px; +} +.index-module__btn-group-vertical__1uuqp + > .index-module__btn__1Pcdf:not(:last-child):not(.index-module__dropdown-toggle__126GD), +.index-module__btn-group-vertical__1uuqp + > .index-module__btn-group__dCLg2:not(:last-child) + > .index-module__btn__1Pcdf { + border-bottom-right-radius: 0; + border-bottom-left-radius: 0; +} +.index-module__btn-group-vertical__1uuqp + > .index-module__btn__1Pcdf:not(:first-child), +.index-module__btn-group-vertical__1uuqp + > .index-module__btn-group__dCLg2:not(:first-child) + > .index-module__btn__1Pcdf { + border-top-left-radius: 0; + border-top-right-radius: 0; +} + +.index-module__btn-group-toggle__3n4Fk > .index-module__btn__1Pcdf, +.index-module__btn-group-toggle__3n4Fk + > .index-module__btn-group__dCLg2 + > .index-module__btn__1Pcdf { + margin-bottom: 0; +} +.index-module__btn-group-toggle__3n4Fk + > .index-module__btn__1Pcdf + input[type='radio'], +.index-module__btn-group-toggle__3n4Fk + > .index-module__btn__1Pcdf + input[type='checkbox'], +.index-module__btn-group-toggle__3n4Fk + > .index-module__btn-group__dCLg2 + > .index-module__btn__1Pcdf + input[type='radio'], +.index-module__btn-group-toggle__3n4Fk + > .index-module__btn-group__dCLg2 + > .index-module__btn__1Pcdf + input[type='checkbox'] { + position: absolute; + clip: rect(0, 0, 0, 0); + pointer-events: none; +} + +.index-module__input-group__2KI-F { + position: relative; + display: flex; + flex-wrap: wrap; + align-items: stretch; + width: 100%; +} +.index-module__input-group__2KI-F > .index-module__form-control__33tSj, +.index-module__input-group__2KI-F + > .index-module__form-control-plaintext__1Qr5_, +.index-module__input-group__2KI-F > .index-module__custom-select__2Ae5X, +.index-module__input-group__2KI-F > .index-module__custom-file__3IAmZ { + position: relative; + flex: 1 1 0%; + min-width: 0; + margin-bottom: 0; +} +.index-module__input-group__2KI-F + > .index-module__form-control__33tSj + + .index-module__form-control__33tSj, +.index-module__input-group__2KI-F + > .index-module__form-control__33tSj + + .index-module__custom-select__2Ae5X, +.index-module__input-group__2KI-F + > .index-module__form-control__33tSj + + .index-module__custom-file__3IAmZ, +.index-module__input-group__2KI-F + > .index-module__form-control-plaintext__1Qr5_ + + .index-module__form-control__33tSj, +.index-module__input-group__2KI-F + > .index-module__form-control-plaintext__1Qr5_ + + .index-module__custom-select__2Ae5X, +.index-module__input-group__2KI-F + > .index-module__form-control-plaintext__1Qr5_ + + .index-module__custom-file__3IAmZ, +.index-module__input-group__2KI-F + > .index-module__custom-select__2Ae5X + + .index-module__form-control__33tSj, +.index-module__input-group__2KI-F + > .index-module__custom-select__2Ae5X + + .index-module__custom-select__2Ae5X, +.index-module__input-group__2KI-F + > .index-module__custom-select__2Ae5X + + .index-module__custom-file__3IAmZ, +.index-module__input-group__2KI-F + > .index-module__custom-file__3IAmZ + + .index-module__form-control__33tSj, +.index-module__input-group__2KI-F + > .index-module__custom-file__3IAmZ + + .index-module__custom-select__2Ae5X, +.index-module__input-group__2KI-F + > .index-module__custom-file__3IAmZ + + .index-module__custom-file__3IAmZ { + margin-left: -1px; +} +.index-module__input-group__2KI-F > .index-module__form-control__33tSj:focus, +.index-module__input-group__2KI-F > .index-module__custom-select__2Ae5X:focus, +.index-module__input-group__2KI-F + > .index-module__custom-file__3IAmZ + .index-module__custom-file-input__22YHK:focus + ~ .index-module__custom-file-label__1lWwo { + z-index: 3; +} +.index-module__input-group__2KI-F + > .index-module__custom-file__3IAmZ + .index-module__custom-file-input__22YHK:focus { + z-index: 4; +} +.index-module__input-group__2KI-F + > .index-module__form-control__33tSj:not(:last-child), +.index-module__input-group__2KI-F + > .index-module__custom-select__2Ae5X:not(:last-child) { + border-top-right-radius: 0; + border-bottom-right-radius: 0; +} +.index-module__input-group__2KI-F + > .index-module__form-control__33tSj:not(:first-child), +.index-module__input-group__2KI-F + > .index-module__custom-select__2Ae5X:not(:first-child) { + border-top-left-radius: 0; + border-bottom-left-radius: 0; +} +.index-module__input-group__2KI-F > .index-module__custom-file__3IAmZ { + display: flex; + align-items: center; +} +.index-module__input-group__2KI-F + > .index-module__custom-file__3IAmZ:not(:last-child) + .index-module__custom-file-label__1lWwo, +.index-module__input-group__2KI-F + > .index-module__custom-file__3IAmZ:not(:last-child) + .index-module__custom-file-label__1lWwo::after { + border-top-right-radius: 0; + border-bottom-right-radius: 0; +} +.index-module__input-group__2KI-F + > .index-module__custom-file__3IAmZ:not(:first-child) + .index-module__custom-file-label__1lWwo { + border-top-left-radius: 0; + border-bottom-left-radius: 0; +} + +.index-module__input-group-prepend__1qgDw, +.index-module__input-group-append__2wnvP { + display: flex; +} +.index-module__input-group-prepend__1qgDw .index-module__btn__1Pcdf, +.index-module__input-group-append__2wnvP .index-module__btn__1Pcdf { + position: relative; + z-index: 2; +} +.index-module__input-group-prepend__1qgDw .index-module__btn__1Pcdf:focus, +.index-module__input-group-append__2wnvP .index-module__btn__1Pcdf:focus { + z-index: 3; +} +.index-module__input-group-prepend__1qgDw + .index-module__btn__1Pcdf + + .index-module__btn__1Pcdf, +.index-module__input-group-prepend__1qgDw + .index-module__btn__1Pcdf + + .index-module__input-group-text__3ZCLt, +.index-module__input-group-prepend__1qgDw + .index-module__input-group-text__3ZCLt + + .index-module__input-group-text__3ZCLt, +.index-module__input-group-prepend__1qgDw + .index-module__input-group-text__3ZCLt + + .index-module__btn__1Pcdf, +.index-module__input-group-append__2wnvP + .index-module__btn__1Pcdf + + .index-module__btn__1Pcdf, +.index-module__input-group-append__2wnvP + .index-module__btn__1Pcdf + + .index-module__input-group-text__3ZCLt, +.index-module__input-group-append__2wnvP + .index-module__input-group-text__3ZCLt + + .index-module__input-group-text__3ZCLt, +.index-module__input-group-append__2wnvP + .index-module__input-group-text__3ZCLt + + .index-module__btn__1Pcdf { + margin-left: -1px; +} + +.index-module__input-group-prepend__1qgDw { + margin-right: -1px; +} + +.index-module__input-group-append__2wnvP { + margin-left: -1px; +} + +.index-module__input-group-text__3ZCLt { + display: flex; + align-items: center; + padding: 0.375rem 0.75rem; + margin-bottom: 0; + font-size: 1rem; + font-weight: 400; + line-height: 1.5; + color: #495057; + text-align: center; + white-space: nowrap; + background-color: #e9ecef; + border: 1px solid #ced4da; + border-radius: 0.25rem; +} +.index-module__input-group-text__3ZCLt input[type='radio'], +.index-module__input-group-text__3ZCLt input[type='checkbox'] { + margin-top: 0; +} + +.index-module__input-group-lg__127GP + > .index-module__form-control__33tSj:not(textarea), +.index-module__input-group-lg__127GP > .index-module__custom-select__2Ae5X { + height: calc(1.5em + 1rem + 2px); +} + +.index-module__input-group-lg__127GP > .index-module__form-control__33tSj, +.index-module__input-group-lg__127GP > .index-module__custom-select__2Ae5X, +.index-module__input-group-lg__127GP + > .index-module__input-group-prepend__1qgDw + > .index-module__input-group-text__3ZCLt, +.index-module__input-group-lg__127GP + > .index-module__input-group-append__2wnvP + > .index-module__input-group-text__3ZCLt, +.index-module__input-group-lg__127GP + > .index-module__input-group-prepend__1qgDw + > .index-module__btn__1Pcdf, +.index-module__input-group-lg__127GP + > .index-module__input-group-append__2wnvP + > .index-module__btn__1Pcdf { + padding: 0.5rem 1rem; + font-size: 1.25rem; + line-height: 1.5; + border-radius: 0.3rem; +} + +.index-module__input-group-sm__1YP3y + > .index-module__form-control__33tSj:not(textarea), +.index-module__input-group-sm__1YP3y > .index-module__custom-select__2Ae5X { + height: calc(1.5em + 0.5rem + 2px); +} + +.index-module__input-group-sm__1YP3y > .index-module__form-control__33tSj, +.index-module__input-group-sm__1YP3y > .index-module__custom-select__2Ae5X, +.index-module__input-group-sm__1YP3y + > .index-module__input-group-prepend__1qgDw + > .index-module__input-group-text__3ZCLt, +.index-module__input-group-sm__1YP3y + > .index-module__input-group-append__2wnvP + > .index-module__input-group-text__3ZCLt, +.index-module__input-group-sm__1YP3y + > .index-module__input-group-prepend__1qgDw + > .index-module__btn__1Pcdf, +.index-module__input-group-sm__1YP3y + > .index-module__input-group-append__2wnvP + > .index-module__btn__1Pcdf { + padding: 0.25rem 0.5rem; + font-size: 0.875rem; + line-height: 1.5; + border-radius: 0.2rem; +} + +.index-module__input-group-lg__127GP > .index-module__custom-select__2Ae5X, +.index-module__input-group-sm__1YP3y > .index-module__custom-select__2Ae5X { + padding-right: 1.75rem; +} + +.index-module__input-group__2KI-F + > .index-module__input-group-prepend__1qgDw + > .index-module__btn__1Pcdf, +.index-module__input-group__2KI-F + > .index-module__input-group-prepend__1qgDw + > .index-module__input-group-text__3ZCLt, +.index-module__input-group__2KI-F + > .index-module__input-group-append__2wnvP:not(:last-child) + > .index-module__btn__1Pcdf, +.index-module__input-group__2KI-F + > .index-module__input-group-append__2wnvP:not(:last-child) + > .index-module__input-group-text__3ZCLt, +.index-module__input-group__2KI-F + > .index-module__input-group-append__2wnvP:last-child + > .index-module__btn__1Pcdf:not(:last-child):not(.index-module__dropdown-toggle__126GD), +.index-module__input-group__2KI-F + > .index-module__input-group-append__2wnvP:last-child + > .index-module__input-group-text__3ZCLt:not(:last-child) { + border-top-right-radius: 0; + border-bottom-right-radius: 0; +} + +.index-module__input-group__2KI-F + > .index-module__input-group-append__2wnvP + > .index-module__btn__1Pcdf, +.index-module__input-group__2KI-F + > .index-module__input-group-append__2wnvP + > .index-module__input-group-text__3ZCLt, +.index-module__input-group__2KI-F + > .index-module__input-group-prepend__1qgDw:not(:first-child) + > .index-module__btn__1Pcdf, +.index-module__input-group__2KI-F + > .index-module__input-group-prepend__1qgDw:not(:first-child) + > .index-module__input-group-text__3ZCLt, +.index-module__input-group__2KI-F + > .index-module__input-group-prepend__1qgDw:first-child + > .index-module__btn__1Pcdf:not(:first-child), +.index-module__input-group__2KI-F + > .index-module__input-group-prepend__1qgDw:first-child + > .index-module__input-group-text__3ZCLt:not(:first-child) { + border-top-left-radius: 0; + border-bottom-left-radius: 0; +} + +.index-module__custom-control__2LzXs { + position: relative; + display: block; + min-height: 1.5rem; + padding-left: 1.5rem; +} + +.index-module__custom-control-inline__2i4MT { + display: inline-flex; + margin-right: 1rem; +} + +.index-module__custom-control-input__2tloy { + position: absolute; + left: 0; + z-index: -1; + width: 1rem; + height: 1.25rem; + opacity: 0; +} +.index-module__custom-control-input__2tloy:checked + ~ .index-module__custom-control-label__17M6G::before { + color: #fff; + border-color: #0968c3; + background-color: #0968c3; +} +.index-module__custom-control-input__2tloy:focus + ~ .index-module__custom-control-label__17M6G::before { + box-shadow: 0 0 0 0.2rem rgba(9, 104, 195, 0.25); +} +.index-module__custom-control-input__2tloy:focus:not(:checked) + ~ .index-module__custom-control-label__17M6G::before { + border-color: #54a8f7; +} +.index-module__custom-control-input__2tloy:not(:disabled):active + ~ .index-module__custom-control-label__17M6G::before { + color: #fff; + background-color: #85c1f9; + border-color: #85c1f9; +} +.index-module__custom-control-input__2tloy[disabled] + ~ .index-module__custom-control-label__17M6G, +.index-module__custom-control-input__2tloy:disabled + ~ .index-module__custom-control-label__17M6G { + color: #6c757d; +} +.index-module__custom-control-input__2tloy[disabled] + ~ .index-module__custom-control-label__17M6G::before, +.index-module__custom-control-input__2tloy:disabled + ~ .index-module__custom-control-label__17M6G::before { + background-color: #e9ecef; +} + +.index-module__custom-control-label__17M6G { + position: relative; + margin-bottom: 0; + vertical-align: top; +} +.index-module__custom-control-label__17M6G::before { + position: absolute; + top: 0.25rem; + left: -1.5rem; + display: block; + width: 1rem; + height: 1rem; + pointer-events: none; + content: ''; + background-color: #fff; + border: #adb5bd solid 1px; +} +.index-module__custom-control-label__17M6G::after { + position: absolute; + top: 0.25rem; + left: -1.5rem; + display: block; + width: 1rem; + height: 1rem; + content: ''; + background: no-repeat 50% / 50% 50%; +} + +.index-module__custom-checkbox__nqODx + .index-module__custom-control-label__17M6G::before { + border-radius: 0.25rem; +} + +.index-module__custom-checkbox__nqODx + .index-module__custom-control-input__2tloy:checked + ~ .index-module__custom-control-label__17M6G::after { + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath fill='%23fff' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26l2.974 2.99L8 2.193z'/%3e%3c/svg%3e"); +} + +.index-module__custom-checkbox__nqODx + .index-module__custom-control-input__2tloy:indeterminate + ~ .index-module__custom-control-label__17M6G::before { + border-color: #0968c3; + background-color: #0968c3; +} + +.index-module__custom-checkbox__nqODx + .index-module__custom-control-input__2tloy:indeterminate + ~ .index-module__custom-control-label__17M6G::after { + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='4' viewBox='0 0 4 4'%3e%3cpath stroke='%23fff' d='M0 2h4'/%3e%3c/svg%3e"); +} + +.index-module__custom-checkbox__nqODx + .index-module__custom-control-input__2tloy:disabled:checked + ~ .index-module__custom-control-label__17M6G::before { + background-color: rgba(9, 104, 195, 0.5); +} + +.index-module__custom-checkbox__nqODx + .index-module__custom-control-input__2tloy:disabled:indeterminate + ~ .index-module__custom-control-label__17M6G::before { + background-color: rgba(9, 104, 195, 0.5); +} + +.index-module__custom-radio__3kbvO + .index-module__custom-control-label__17M6G::before { + border-radius: 50%; +} + +.index-module__custom-radio__3kbvO + .index-module__custom-control-input__2tloy:checked + ~ .index-module__custom-control-label__17M6G::after { + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%23fff'/%3e%3c/svg%3e"); +} + +.index-module__custom-radio__3kbvO + .index-module__custom-control-input__2tloy:disabled:checked + ~ .index-module__custom-control-label__17M6G::before { + background-color: rgba(9, 104, 195, 0.5); +} + +.index-module__custom-switch__2ak_l { + padding-left: 2.25rem; +} +.index-module__custom-switch__2ak_l + .index-module__custom-control-label__17M6G::before { + left: -2.25rem; + width: 1.75rem; + pointer-events: all; + border-radius: 0.5rem; +} +.index-module__custom-switch__2ak_l + .index-module__custom-control-label__17M6G::after { + top: calc(0.25rem + 2px); + left: calc(-2.25rem + 2px); + width: calc(1rem - 4px); + height: calc(1rem - 4px); + background-color: #adb5bd; + border-radius: 0.5rem; + transition: transform 0.15s ease-in-out, background-color 0.15s ease-in-out, + border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; +} +@media (prefers-reduced-motion: reduce) { + .index-module__custom-switch__2ak_l + .index-module__custom-control-label__17M6G::after { + transition: none; + } +} +.index-module__custom-switch__2ak_l + .index-module__custom-control-input__2tloy:checked + ~ .index-module__custom-control-label__17M6G::after { + background-color: #fff; + transform: translateX(0.75rem); +} +.index-module__custom-switch__2ak_l + .index-module__custom-control-input__2tloy:disabled:checked + ~ .index-module__custom-control-label__17M6G::before { + background-color: rgba(9, 104, 195, 0.5); +} + +.index-module__custom-select__2Ae5X { + display: inline-block; + width: 100%; + height: calc(1.5em + 0.75rem + 2px); + padding: 0.375rem 1.75rem 0.375rem 0.75rem; + font-size: 1rem; + font-weight: 400; + line-height: 1.5; + color: #495057; + vertical-align: middle; + background: #fff + url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='5' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e") + no-repeat right 0.75rem center/8px 10px; + border: 1px solid #ced4da; + border-radius: 0.25rem; + appearance: none; +} +.index-module__custom-select__2Ae5X:focus { + border-color: #54a8f7; + outline: 0; + box-shadow: 0 0 0 0.2rem rgba(9, 104, 195, 0.25); +} +.index-module__custom-select__2Ae5X:focus::-ms-value { + color: #495057; + background-color: #fff; +} +.index-module__custom-select__2Ae5X[multiple], +.index-module__custom-select__2Ae5X[size]:not([size='1']) { + height: auto; + padding-right: 0.75rem; + background-image: none; +} +.index-module__custom-select__2Ae5X:disabled { + color: #6c757d; + background-color: #e9ecef; +} +.index-module__custom-select__2Ae5X::-ms-expand { + display: none; +} +.index-module__custom-select__2Ae5X:-moz-focusring { + color: transparent; + text-shadow: 0 0 0 #495057; +} + +.index-module__custom-select-sm__2XmWm { + height: calc(1.5em + 0.5rem + 2px); + padding-top: 0.25rem; + padding-bottom: 0.25rem; + padding-left: 0.5rem; + font-size: 0.875rem; +} + +.index-module__custom-select-lg__6Vz-r { + height: calc(1.5em + 1rem + 2px); + padding-top: 0.5rem; + padding-bottom: 0.5rem; + padding-left: 1rem; + font-size: 1.25rem; +} + +.index-module__custom-file__3IAmZ { + position: relative; + display: inline-block; + width: 100%; + height: calc(1.5em + 0.75rem + 2px); + margin-bottom: 0; +} + +.index-module__custom-file-input__22YHK { + position: relative; + z-index: 2; + width: 100%; + height: calc(1.5em + 0.75rem + 2px); + margin: 0; + opacity: 0; +} +.index-module__custom-file-input__22YHK:focus + ~ .index-module__custom-file-label__1lWwo { + border-color: #54a8f7; + box-shadow: 0 0 0 0.2rem rgba(9, 104, 195, 0.25); +} +.index-module__custom-file-input__22YHK[disabled] + ~ .index-module__custom-file-label__1lWwo, +.index-module__custom-file-input__22YHK:disabled + ~ .index-module__custom-file-label__1lWwo { + background-color: #e9ecef; +} +.index-module__custom-file-input__22YHK:lang(en) + ~ .index-module__custom-file-label__1lWwo::after { + content: 'Browse'; +} +.index-module__custom-file-input__22YHK + ~ .index-module__custom-file-label__1lWwo[data-browse]::after { + content: attr(data-browse); +} + +.index-module__custom-file-label__1lWwo { + position: absolute; + top: 0; + right: 0; + left: 0; + z-index: 1; + height: calc(1.5em + 0.75rem + 2px); + padding: 0.375rem 0.75rem; + font-weight: 400; + line-height: 1.5; + color: #495057; + background-color: #fff; + border: 1px solid #ced4da; + border-radius: 0.25rem; +} +.index-module__custom-file-label__1lWwo::after { + position: absolute; + top: 0; + right: 0; + bottom: 0; + z-index: 3; + display: block; + height: calc(1.5em + 0.75rem); + padding: 0.375rem 0.75rem; + line-height: 1.5; + color: #495057; + content: 'Browse'; + background-color: #e9ecef; + border-left: inherit; + border-radius: 0 0.25rem 0.25rem 0; +} + +.index-module__custom-range__2zVif { + width: 100%; + height: 1.4rem; + padding: 0; + background-color: transparent; + appearance: none; +} +.index-module__custom-range__2zVif:focus { + outline: none; +} +.index-module__custom-range__2zVif:focus::-webkit-slider-thumb { + box-shadow: 0 0 0 1px #fff, 0 0 0 0.2rem rgba(9, 104, 195, 0.25); +} +.index-module__custom-range__2zVif:focus::-moz-range-thumb { + box-shadow: 0 0 0 1px #fff, 0 0 0 0.2rem rgba(9, 104, 195, 0.25); +} +.index-module__custom-range__2zVif:focus::-ms-thumb { + box-shadow: 0 0 0 1px #fff, 0 0 0 0.2rem rgba(9, 104, 195, 0.25); +} +.index-module__custom-range__2zVif::-moz-focus-outer { + border: 0; +} +.index-module__custom-range__2zVif::-webkit-slider-thumb { + width: 1rem; + height: 1rem; + margin-top: -0.25rem; + background-color: #0968c3; + border: 0; + border-radius: 1rem; + transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, + box-shadow 0.15s ease-in-out; + appearance: none; +} +@media (prefers-reduced-motion: reduce) { + .index-module__custom-range__2zVif::-webkit-slider-thumb { + transition: none; + } +} +.index-module__custom-range__2zVif::-webkit-slider-thumb:active { + background-color: #85c1f9; +} +.index-module__custom-range__2zVif::-webkit-slider-runnable-track { + width: 100%; + height: 0.5rem; + color: transparent; + cursor: pointer; + background-color: #dee2e6; + border-color: transparent; + border-radius: 1rem; +} +.index-module__custom-range__2zVif::-moz-range-thumb { + width: 1rem; + height: 1rem; + background-color: #0968c3; + border: 0; + border-radius: 1rem; + transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, + box-shadow 0.15s ease-in-out; + appearance: none; +} +@media (prefers-reduced-motion: reduce) { + .index-module__custom-range__2zVif::-moz-range-thumb { + transition: none; + } +} +.index-module__custom-range__2zVif::-moz-range-thumb:active { + background-color: #85c1f9; +} +.index-module__custom-range__2zVif::-moz-range-track { + width: 100%; + height: 0.5rem; + color: transparent; + cursor: pointer; + background-color: #dee2e6; + border-color: transparent; + border-radius: 1rem; +} +.index-module__custom-range__2zVif::-ms-thumb { + width: 1rem; + height: 1rem; + margin-top: 0; + margin-right: 0.2rem; + margin-left: 0.2rem; + background-color: #0968c3; + border: 0; + border-radius: 1rem; + transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, + box-shadow 0.15s ease-in-out; + appearance: none; +} +@media (prefers-reduced-motion: reduce) { + .index-module__custom-range__2zVif::-ms-thumb { + transition: none; + } +} +.index-module__custom-range__2zVif::-ms-thumb:active { + background-color: #85c1f9; +} +.index-module__custom-range__2zVif::-ms-track { + width: 100%; + height: 0.5rem; + color: transparent; + cursor: pointer; + background-color: transparent; + border-color: transparent; + border-width: 0.5rem; +} +.index-module__custom-range__2zVif::-ms-fill-lower { + background-color: #dee2e6; + border-radius: 1rem; +} +.index-module__custom-range__2zVif::-ms-fill-upper { + margin-right: 15px; + background-color: #dee2e6; + border-radius: 1rem; +} +.index-module__custom-range__2zVif:disabled::-webkit-slider-thumb { + background-color: #adb5bd; +} +.index-module__custom-range__2zVif:disabled::-webkit-slider-runnable-track { + cursor: default; +} +.index-module__custom-range__2zVif:disabled::-moz-range-thumb { + background-color: #adb5bd; +} +.index-module__custom-range__2zVif:disabled::-moz-range-track { + cursor: default; +} +.index-module__custom-range__2zVif:disabled::-ms-thumb { + background-color: #adb5bd; +} + +.index-module__custom-control-label__17M6G::before, +.index-module__custom-file-label__1lWwo, +.index-module__custom-select__2Ae5X { + transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, + box-shadow 0.15s ease-in-out; +} +@media (prefers-reduced-motion: reduce) { + .index-module__custom-control-label__17M6G::before, + .index-module__custom-file-label__1lWwo, + .index-module__custom-select__2Ae5X { + transition: none; + } +} + +.index-module__nav__grBJx { + display: flex; + flex-wrap: wrap; + padding-left: 0; + margin-bottom: 0; + list-style: none; +} + +.index-module__nav-link__1g202 { + display: block; + padding: 0.5rem 1rem; +} +.index-module__nav-link__1g202:hover, +.index-module__nav-link__1g202:focus { + text-decoration: none; +} +.index-module__nav-link__1g202.index-module__disabled__2BtOk { + color: #6c757d; + pointer-events: none; + cursor: default; +} + +.index-module__nav-tabs__2chpV { + border-bottom: 1px solid #dee2e6; +} +.index-module__nav-tabs__2chpV .index-module__nav-item__zM8hg { + margin-bottom: -1px; +} +.index-module__nav-tabs__2chpV .index-module__nav-link__1g202 { + border: 1px solid transparent; + border-top-left-radius: 0.25rem; + border-top-right-radius: 0.25rem; +} +.index-module__nav-tabs__2chpV .index-module__nav-link__1g202:hover, +.index-module__nav-tabs__2chpV .index-module__nav-link__1g202:focus { + border-color: #e9ecef #e9ecef #dee2e6; +} +.index-module__nav-tabs__2chpV + .index-module__nav-link__1g202.index-module__disabled__2BtOk { + color: #6c757d; + background-color: transparent; + border-color: transparent; +} +.index-module__nav-tabs__2chpV + .index-module__nav-link__1g202.index-module__active__2-CxA, +.index-module__nav-tabs__2chpV + .index-module__nav-item__zM8hg.index-module__show__6Epil + .index-module__nav-link__1g202 { + color: #495057; + background-color: #fff; + border-color: #dee2e6 #dee2e6 #fff; +} +.index-module__nav-tabs__2chpV .index-module__dropdown-menu__1pzMl { + margin-top: -1px; + border-top-left-radius: 0; + border-top-right-radius: 0; +} + +.index-module__nav-pills__181h9 .index-module__nav-link__1g202 { + border-radius: 0.25rem; +} + +.index-module__nav-pills__181h9 + .index-module__nav-link__1g202.index-module__active__2-CxA, +.index-module__nav-pills__181h9 + .index-module__show__6Epil + > .index-module__nav-link__1g202 { + color: #fff; + background-color: #0968c3; +} + +.index-module__nav-fill__1Fo-l .index-module__nav-item__zM8hg { + flex: 1 1 auto; + text-align: center; +} + +.index-module__nav-justified__52yxZ .index-module__nav-item__zM8hg { + flex-basis: 0; + flex-grow: 1; + text-align: center; +} + +.index-module__tab-content__hn4Jn > .index-module__tab-pane__1e72a { + display: none; +} + +.index-module__tab-content__hn4Jn > .index-module__active__2-CxA { + display: block; +} + +.index-module__navbar__38ZzD { + position: relative; + display: flex; + flex-wrap: wrap; + align-items: center; + justify-content: space-between; + padding: 0.5rem 0; +} +.index-module__navbar__38ZzD .index-module__container__wQ7Ga, +.index-module__navbar__38ZzD .index-module__container-fluid__3sxsA, +.index-module__navbar__38ZzD .index-module__container-xl__2xcz3 { + display: flex; + flex-wrap: wrap; + align-items: center; + justify-content: space-between; +} + +.index-module__navbar-brand__1-wxk { + display: inline-block; + padding-top: 0.3125rem; + padding-bottom: 0.3125rem; + margin-right: 0; + font-size: 1.25rem; + line-height: inherit; + white-space: nowrap; +} +.index-module__navbar-brand__1-wxk:hover, +.index-module__navbar-brand__1-wxk:focus { + text-decoration: none; +} + +.index-module__navbar-nav__2Pd71 { + display: flex; + flex-direction: column; + padding-left: 0; + margin-bottom: 0; + list-style: none; +} +.index-module__navbar-nav__2Pd71 .index-module__nav-link__1g202 { + padding-right: 0; + padding-left: 0; +} +.index-module__navbar-nav__2Pd71 .index-module__dropdown-menu__1pzMl { + position: static; + float: none; +} + +.index-module__navbar-text__1-cNr { + display: inline-block; + padding-top: 0.5rem; + padding-bottom: 0.5rem; +} + +.index-module__navbar-collapse__1VNc8 { + flex-basis: 100%; + flex-grow: 1; + align-items: center; +} + +.index-module__navbar-toggler__2R5Cp { + padding: 0.25rem 0.75rem; + font-size: 1.25rem; + line-height: 1; + background-color: transparent; + border: 1px solid transparent; + border-radius: 0.25rem; +} +.index-module__navbar-toggler__2R5Cp:hover, +.index-module__navbar-toggler__2R5Cp:focus { + text-decoration: none; +} + +.index-module__navbar-toggler-icon__2FJv8 { + display: inline-block; + width: 1.5em; + height: 1.5em; + vertical-align: middle; + content: ''; + background: no-repeat center center; + background-size: 100% 100%; +} + +@media (max-width: 575.98px) { + .index-module__navbar-expand-sm__12Ctm > .index-module__container__wQ7Ga, + .index-module__navbar-expand-sm__12Ctm + > .index-module__container-fluid__3sxsA, + .index-module__navbar-expand-sm__12Ctm > .index-module__container-xl__2xcz3 { + padding-right: 0; + padding-left: 0; + } +} + +@media (min-width: 576px) { + .index-module__navbar-expand-sm__12Ctm { + flex-flow: row nowrap; + justify-content: flex-start; + } + .index-module__navbar-expand-sm__12Ctm .index-module__navbar-nav__2Pd71 { + flex-direction: row; + } + .index-module__navbar-expand-sm__12Ctm + .index-module__navbar-nav__2Pd71 + .index-module__dropdown-menu__1pzMl { + position: absolute; + } + .index-module__navbar-expand-sm__12Ctm + .index-module__navbar-nav__2Pd71 + .index-module__nav-link__1g202 { + padding-right: 0.5rem; + padding-left: 0.5rem; + } + .index-module__navbar-expand-sm__12Ctm > .index-module__container__wQ7Ga, + .index-module__navbar-expand-sm__12Ctm + > .index-module__container-fluid__3sxsA, + .index-module__navbar-expand-sm__12Ctm > .index-module__container-xl__2xcz3 { + flex-wrap: nowrap; + } + .index-module__navbar-expand-sm__12Ctm .index-module__navbar-collapse__1VNc8 { + display: flex !important; + flex-basis: auto; + } + .index-module__navbar-expand-sm__12Ctm .index-module__navbar-toggler__2R5Cp { + display: none; + } +} + +@media (max-width: 767.98px) { + .index-module__navbar-expand-md__GpUQ5 > .index-module__container__wQ7Ga, + .index-module__navbar-expand-md__GpUQ5 + > .index-module__container-fluid__3sxsA, + .index-module__navbar-expand-md__GpUQ5 > .index-module__container-xl__2xcz3 { + padding-right: 0; + padding-left: 0; + } +} + +@media (min-width: 768px) { + .index-module__navbar-expand-md__GpUQ5 { + flex-flow: row nowrap; + justify-content: flex-start; + } + .index-module__navbar-expand-md__GpUQ5 .index-module__navbar-nav__2Pd71 { + flex-direction: row; + } + .index-module__navbar-expand-md__GpUQ5 + .index-module__navbar-nav__2Pd71 + .index-module__dropdown-menu__1pzMl { + position: absolute; + } + .index-module__navbar-expand-md__GpUQ5 + .index-module__navbar-nav__2Pd71 + .index-module__nav-link__1g202 { + padding-right: 0.5rem; + padding-left: 0.5rem; + } + .index-module__navbar-expand-md__GpUQ5 > .index-module__container__wQ7Ga, + .index-module__navbar-expand-md__GpUQ5 + > .index-module__container-fluid__3sxsA, + .index-module__navbar-expand-md__GpUQ5 > .index-module__container-xl__2xcz3 { + flex-wrap: nowrap; + } + .index-module__navbar-expand-md__GpUQ5 .index-module__navbar-collapse__1VNc8 { + display: flex !important; + flex-basis: auto; + } + .index-module__navbar-expand-md__GpUQ5 .index-module__navbar-toggler__2R5Cp { + display: none; + } +} + +@media (max-width: 1049.98px) { + .index-module__navbar-expand-lg__3j_tA > .index-module__container__wQ7Ga, + .index-module__navbar-expand-lg__3j_tA + > .index-module__container-fluid__3sxsA, + .index-module__navbar-expand-lg__3j_tA > .index-module__container-xl__2xcz3 { + padding-right: 0; + padding-left: 0; + } +} + +@media (min-width: 1050px) { + .index-module__navbar-expand-lg__3j_tA { + flex-flow: row nowrap; + justify-content: flex-start; + } + .index-module__navbar-expand-lg__3j_tA .index-module__navbar-nav__2Pd71 { + flex-direction: row; + } + .index-module__navbar-expand-lg__3j_tA + .index-module__navbar-nav__2Pd71 + .index-module__dropdown-menu__1pzMl { + position: absolute; + } + .index-module__navbar-expand-lg__3j_tA + .index-module__navbar-nav__2Pd71 + .index-module__nav-link__1g202 { + padding-right: 0.5rem; + padding-left: 0.5rem; + } + .index-module__navbar-expand-lg__3j_tA > .index-module__container__wQ7Ga, + .index-module__navbar-expand-lg__3j_tA + > .index-module__container-fluid__3sxsA, + .index-module__navbar-expand-lg__3j_tA > .index-module__container-xl__2xcz3 { + flex-wrap: nowrap; + } + .index-module__navbar-expand-lg__3j_tA .index-module__navbar-collapse__1VNc8 { + display: flex !important; + flex-basis: auto; + } + .index-module__navbar-expand-lg__3j_tA .index-module__navbar-toggler__2R5Cp { + display: none; + } +} + +@media (max-width: 1412.98px) { + .index-module__navbar-expand-xl__1XIWi > .index-module__container__wQ7Ga, + .index-module__navbar-expand-xl__1XIWi + > .index-module__container-fluid__3sxsA, + .index-module__navbar-expand-xl__1XIWi > .index-module__container-xl__2xcz3 { + padding-right: 0; + padding-left: 0; + } +} + +@media (min-width: 1413px) { + .index-module__navbar-expand-xl__1XIWi { + flex-flow: row nowrap; + justify-content: flex-start; + } + .index-module__navbar-expand-xl__1XIWi .index-module__navbar-nav__2Pd71 { + flex-direction: row; + } + .index-module__navbar-expand-xl__1XIWi + .index-module__navbar-nav__2Pd71 + .index-module__dropdown-menu__1pzMl { + position: absolute; + } + .index-module__navbar-expand-xl__1XIWi + .index-module__navbar-nav__2Pd71 + .index-module__nav-link__1g202 { + padding-right: 0.5rem; + padding-left: 0.5rem; + } + .index-module__navbar-expand-xl__1XIWi > .index-module__container__wQ7Ga, + .index-module__navbar-expand-xl__1XIWi + > .index-module__container-fluid__3sxsA, + .index-module__navbar-expand-xl__1XIWi > .index-module__container-xl__2xcz3 { + flex-wrap: nowrap; + } + .index-module__navbar-expand-xl__1XIWi .index-module__navbar-collapse__1VNc8 { + display: flex !important; + flex-basis: auto; + } + .index-module__navbar-expand-xl__1XIWi .index-module__navbar-toggler__2R5Cp { + display: none; + } +} + +.index-module__navbar-expand__4s4sc { + flex-flow: row nowrap; + justify-content: flex-start; +} +.index-module__navbar-expand__4s4sc > .index-module__container__wQ7Ga, +.index-module__navbar-expand__4s4sc > .index-module__container-fluid__3sxsA, +.index-module__navbar-expand__4s4sc > .index-module__container-xl__2xcz3 { + padding-right: 0; + padding-left: 0; +} +.index-module__navbar-expand__4s4sc .index-module__navbar-nav__2Pd71 { + flex-direction: row; +} +.index-module__navbar-expand__4s4sc + .index-module__navbar-nav__2Pd71 + .index-module__dropdown-menu__1pzMl { + position: absolute; +} +.index-module__navbar-expand__4s4sc + .index-module__navbar-nav__2Pd71 + .index-module__nav-link__1g202 { + padding-right: 0.5rem; + padding-left: 0.5rem; +} +.index-module__navbar-expand__4s4sc > .index-module__container__wQ7Ga, +.index-module__navbar-expand__4s4sc > .index-module__container-fluid__3sxsA, +.index-module__navbar-expand__4s4sc > .index-module__container-xl__2xcz3 { + flex-wrap: nowrap; +} +.index-module__navbar-expand__4s4sc .index-module__navbar-collapse__1VNc8 { + display: flex !important; + flex-basis: auto; +} +.index-module__navbar-expand__4s4sc .index-module__navbar-toggler__2R5Cp { + display: none; +} + +.index-module__navbar-light__2YBmS .index-module__navbar-brand__1-wxk { + color: rgba(0, 0, 0, 0.9); +} +.index-module__navbar-light__2YBmS .index-module__navbar-brand__1-wxk:hover, +.index-module__navbar-light__2YBmS .index-module__navbar-brand__1-wxk:focus { + color: rgba(0, 0, 0, 0.9); +} + +.index-module__navbar-light__2YBmS + .index-module__navbar-nav__2Pd71 + .index-module__nav-link__1g202 { + color: rgba(0, 0, 0, 0.5); +} +.index-module__navbar-light__2YBmS + .index-module__navbar-nav__2Pd71 + .index-module__nav-link__1g202:hover, +.index-module__navbar-light__2YBmS + .index-module__navbar-nav__2Pd71 + .index-module__nav-link__1g202:focus { + color: rgba(0, 0, 0, 0.7); +} +.index-module__navbar-light__2YBmS + .index-module__navbar-nav__2Pd71 + .index-module__nav-link__1g202.index-module__disabled__2BtOk { + color: rgba(0, 0, 0, 0.3); +} + +.index-module__navbar-light__2YBmS + .index-module__navbar-nav__2Pd71 + .index-module__show__6Epil + > .index-module__nav-link__1g202, +.index-module__navbar-light__2YBmS + .index-module__navbar-nav__2Pd71 + .index-module__active__2-CxA + > .index-module__nav-link__1g202, +.index-module__navbar-light__2YBmS + .index-module__navbar-nav__2Pd71 + .index-module__nav-link__1g202.index-module__show__6Epil, +.index-module__navbar-light__2YBmS + .index-module__navbar-nav__2Pd71 + .index-module__nav-link__1g202.index-module__active__2-CxA { + color: rgba(0, 0, 0, 0.9); +} + +.index-module__navbar-light__2YBmS .index-module__navbar-toggler__2R5Cp { + color: rgba(0, 0, 0, 0.5); + border-color: rgba(0, 0, 0, 0.1); +} + +.index-module__navbar-light__2YBmS .index-module__navbar-toggler-icon__2FJv8 { + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='30' height='30' viewBox='0 0 30 30'%3e%3cpath stroke='rgba(0, 0, 0, 0.5)' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e"); +} + +.index-module__navbar-light__2YBmS .index-module__navbar-text__1-cNr { + color: rgba(0, 0, 0, 0.5); +} +.index-module__navbar-light__2YBmS .index-module__navbar-text__1-cNr a { + color: rgba(0, 0, 0, 0.9); +} +.index-module__navbar-light__2YBmS .index-module__navbar-text__1-cNr a:hover, +.index-module__navbar-light__2YBmS .index-module__navbar-text__1-cNr a:focus { + color: rgba(0, 0, 0, 0.9); +} + +.index-module__navbar-dark__2zWgs .index-module__navbar-brand__1-wxk { + color: #fff; +} +.index-module__navbar-dark__2zWgs .index-module__navbar-brand__1-wxk:hover, +.index-module__navbar-dark__2zWgs .index-module__navbar-brand__1-wxk:focus { + color: #fff; +} + +.index-module__navbar-dark__2zWgs + .index-module__navbar-nav__2Pd71 + .index-module__nav-link__1g202 { + color: rgba(255, 255, 255, 0.5); +} +.index-module__navbar-dark__2zWgs + .index-module__navbar-nav__2Pd71 + .index-module__nav-link__1g202:hover, +.index-module__navbar-dark__2zWgs + .index-module__navbar-nav__2Pd71 + .index-module__nav-link__1g202:focus { + color: rgba(255, 255, 255, 0.75); +} +.index-module__navbar-dark__2zWgs + .index-module__navbar-nav__2Pd71 + .index-module__nav-link__1g202.index-module__disabled__2BtOk { + color: rgba(255, 255, 255, 0.25); +} + +.index-module__navbar-dark__2zWgs + .index-module__navbar-nav__2Pd71 + .index-module__show__6Epil + > .index-module__nav-link__1g202, +.index-module__navbar-dark__2zWgs + .index-module__navbar-nav__2Pd71 + .index-module__active__2-CxA + > .index-module__nav-link__1g202, +.index-module__navbar-dark__2zWgs + .index-module__navbar-nav__2Pd71 + .index-module__nav-link__1g202.index-module__show__6Epil, +.index-module__navbar-dark__2zWgs + .index-module__navbar-nav__2Pd71 + .index-module__nav-link__1g202.index-module__active__2-CxA { + color: #fff; +} + +.index-module__navbar-dark__2zWgs .index-module__navbar-toggler__2R5Cp { + color: rgba(255, 255, 255, 0.5); + border-color: rgba(255, 255, 255, 0.1); +} + +.index-module__navbar-dark__2zWgs .index-module__navbar-toggler-icon__2FJv8 { + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='30' height='30' viewBox='0 0 30 30'%3e%3cpath stroke='rgba(255, 255, 255, 0.5)' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e"); +} + +.index-module__navbar-dark__2zWgs .index-module__navbar-text__1-cNr { + color: rgba(255, 255, 255, 0.5); +} +.index-module__navbar-dark__2zWgs .index-module__navbar-text__1-cNr a { + color: #fff; +} +.index-module__navbar-dark__2zWgs .index-module__navbar-text__1-cNr a:hover, +.index-module__navbar-dark__2zWgs .index-module__navbar-text__1-cNr a:focus { + color: #fff; +} + +.index-module__card__3t4oV { + position: relative; + display: flex; + flex-direction: column; + min-width: 0; + word-wrap: break-word; + background-color: #fff; + background-clip: border-box; + border: 1px solid rgba(0, 0, 0, 0.125); + border-radius: 0.25rem; +} +.index-module__card__3t4oV > hr { + margin-right: 0; + margin-left: 0; +} +.index-module__card__3t4oV + > .index-module__list-group__3IKFg:first-child + .index-module__list-group-item__tsEJn:first-child { + border-top-left-radius: 0.25rem; + border-top-right-radius: 0.25rem; +} +.index-module__card__3t4oV + > .index-module__list-group__3IKFg:last-child + .index-module__list-group-item__tsEJn:last-child { + border-bottom-right-radius: 0.25rem; + border-bottom-left-radius: 0.25rem; +} + +.index-module__card-body__gNdRz { + flex: 1 1 auto; + min-height: 1px; + padding: 1.25rem; +} + +.index-module__card-title__33NYI { + margin-bottom: 0.75rem; +} + +.index-module__card-subtitle__-A253 { + margin-top: -0.375rem; + margin-bottom: 0; +} + +.index-module__card-text__3FW8A:last-child { + margin-bottom: 0; +} + +.index-module__card-link__2-IZq:hover { + text-decoration: none; +} + +.index-module__card-link__2-IZq + .index-module__card-link__2-IZq { + margin-left: 1.25rem; +} + +.index-module__card-header__3oeJg { + padding: 0.75rem 1.25rem; + margin-bottom: 0; + background-color: rgba(0, 0, 0, 0.03); + border-bottom: 1px solid rgba(0, 0, 0, 0.125); +} +.index-module__card-header__3oeJg:first-child { + border-radius: calc(0.25rem - 1px) calc(0.25rem - 1px) 0 0; +} +.index-module__card-header__3oeJg + + .index-module__list-group__3IKFg + .index-module__list-group-item__tsEJn:first-child { + border-top: 0; +} + +.index-module__card-footer__2oex3 { + padding: 0.75rem 1.25rem; + background-color: rgba(0, 0, 0, 0.03); + border-top: 1px solid rgba(0, 0, 0, 0.125); +} +.index-module__card-footer__2oex3:last-child { + border-radius: 0 0 calc(0.25rem - 1px) calc(0.25rem - 1px); +} + +.index-module__card-header-tabs__icvJz { + margin-right: -0.625rem; + margin-bottom: -0.75rem; + margin-left: -0.625rem; + border-bottom: 0; +} + +.index-module__card-header-pills__2xH21 { + margin-right: -0.625rem; + margin-left: -0.625rem; +} + +.index-module__card-img-overlay__1Bace { + position: absolute; + top: 0; + right: 0; + bottom: 0; + left: 0; + padding: 1.25rem; +} + +.index-module__card-img__1ZQ7a, +.index-module__card-img-top__1HK8Y, +.index-module__card-img-bottom__1hj8U { + flex-shrink: 0; + width: 100%; +} + +.index-module__card-img__1ZQ7a, +.index-module__card-img-top__1HK8Y { + border-top-left-radius: calc(0.25rem - 1px); + border-top-right-radius: calc(0.25rem - 1px); +} + +.index-module__card-img__1ZQ7a, +.index-module__card-img-bottom__1hj8U { + border-bottom-right-radius: calc(0.25rem - 1px); + border-bottom-left-radius: calc(0.25rem - 1px); +} + +.index-module__card-deck__rogx_ .index-module__card__3t4oV { + margin-bottom: 15px; +} + +@media (min-width: 576px) { + .index-module__card-deck__rogx_ { + display: flex; + flex-flow: row wrap; + margin-right: -15px; + margin-left: -15px; + } + .index-module__card-deck__rogx_ .index-module__card__3t4oV { + flex: 1 0 0%; + margin-right: 15px; + margin-bottom: 0; + margin-left: 15px; + } +} + +.index-module__card-group__3wOGH > .index-module__card__3t4oV { + margin-bottom: 15px; +} + +@media (min-width: 576px) { + .index-module__card-group__3wOGH { + display: flex; + flex-flow: row wrap; + } + .index-module__card-group__3wOGH > .index-module__card__3t4oV { + flex: 1 0 0%; + margin-bottom: 0; + } + .index-module__card-group__3wOGH + > .index-module__card__3t4oV + + .index-module__card__3t4oV { + margin-left: 0; + border-left: 0; + } + .index-module__card-group__3wOGH + > .index-module__card__3t4oV:not(:last-child) { + border-top-right-radius: 0; + border-bottom-right-radius: 0; + } + .index-module__card-group__3wOGH + > .index-module__card__3t4oV:not(:last-child) + .index-module__card-img-top__1HK8Y, + .index-module__card-group__3wOGH + > .index-module__card__3t4oV:not(:last-child) + .index-module__card-header__3oeJg { + border-top-right-radius: 0; + } + .index-module__card-group__3wOGH + > .index-module__card__3t4oV:not(:last-child) + .index-module__card-img-bottom__1hj8U, + .index-module__card-group__3wOGH + > .index-module__card__3t4oV:not(:last-child) + .index-module__card-footer__2oex3 { + border-bottom-right-radius: 0; + } + .index-module__card-group__3wOGH + > .index-module__card__3t4oV:not(:first-child) { + border-top-left-radius: 0; + border-bottom-left-radius: 0; + } + .index-module__card-group__3wOGH + > .index-module__card__3t4oV:not(:first-child) + .index-module__card-img-top__1HK8Y, + .index-module__card-group__3wOGH + > .index-module__card__3t4oV:not(:first-child) + .index-module__card-header__3oeJg { + border-top-left-radius: 0; + } + .index-module__card-group__3wOGH + > .index-module__card__3t4oV:not(:first-child) + .index-module__card-img-bottom__1hj8U, + .index-module__card-group__3wOGH + > .index-module__card__3t4oV:not(:first-child) + .index-module__card-footer__2oex3 { + border-bottom-left-radius: 0; + } +} + +.index-module__card-columns__2u9rC .index-module__card__3t4oV { + margin-bottom: 0.75rem; +} + +@media (min-width: 576px) { + .index-module__card-columns__2u9rC { + column-count: 3; + column-gap: 1.25rem; + orphans: 1; + widows: 1; + } + .index-module__card-columns__2u9rC .index-module__card__3t4oV { + display: inline-block; + width: 100%; + } +} + +.index-module__accordion__1NO1- > .index-module__card__3t4oV { + overflow: hidden; +} +.index-module__accordion__1NO1- + > .index-module__card__3t4oV:not(:last-of-type) { + border-bottom: 0; + border-bottom-right-radius: 0; + border-bottom-left-radius: 0; +} +.index-module__accordion__1NO1- + > .index-module__card__3t4oV:not(:first-of-type) { + border-top-left-radius: 0; + border-top-right-radius: 0; +} +.index-module__accordion__1NO1- + > .index-module__card__3t4oV + > .index-module__card-header__3oeJg { + border-radius: 0; + margin-bottom: -1px; +} + +.index-module__breadcrumb__1riuu { + display: flex; + flex-wrap: wrap; + padding: 0 0; + margin-bottom: 0.5rem; + list-style: none; + background-color: transparent; + border-radius: 0.25rem; +} + +.index-module__breadcrumb-item__1U6IH + .index-module__breadcrumb-item__1U6IH { + padding-left: 0.5rem; +} +.index-module__breadcrumb-item__1U6IH + + .index-module__breadcrumb-item__1U6IH::before { + display: inline-block; + padding-right: 0.5rem; + color: #6c757d; + content: '/'; +} + +.index-module__breadcrumb-item__1U6IH + + .index-module__breadcrumb-item__1U6IH:hover::before { + text-decoration: underline; +} + +.index-module__breadcrumb-item__1U6IH + + .index-module__breadcrumb-item__1U6IH:hover::before { + text-decoration: none; +} + +.index-module__breadcrumb-item__1U6IH.index-module__active__2-CxA { + color: #6c757d; +} + +.index-module__pagination__2pJWs { + display: flex; + padding-left: 0; + list-style: none; + border-radius: 0.25rem; +} + +.index-module__page-link__xNY6Q { + position: relative; + display: block; + padding: 0.5rem 0.75rem; + margin-left: -1px; + line-height: 1.25; + color: #0968c3; + background-color: #fff; + border: 1px solid #dee2e6; +} +.index-module__page-link__xNY6Q:hover { + z-index: 2; + color: #0b2569; + text-decoration: none; + background-color: #e9ecef; + border-color: #dee2e6; +} +.index-module__page-link__xNY6Q:focus { + z-index: 3; + outline: 0; + box-shadow: 0 0 0 0.2rem rgba(9, 104, 195, 0.25); +} + +.index-module__page-item__16OYx:first-child .index-module__page-link__xNY6Q { + margin-left: 0; + border-top-left-radius: 0.25rem; + border-bottom-left-radius: 0.25rem; +} + +.index-module__page-item__16OYx:last-child .index-module__page-link__xNY6Q { + border-top-right-radius: 0.25rem; + border-bottom-right-radius: 0.25rem; +} + +.index-module__page-item__16OYx.index-module__active__2-CxA + .index-module__page-link__xNY6Q { + z-index: 3; + color: #fff; + background-color: #0968c3; + border-color: #0968c3; +} + +.index-module__page-item__16OYx.index-module__disabled__2BtOk + .index-module__page-link__xNY6Q { + color: #6c757d; + pointer-events: none; + cursor: auto; + background-color: #fff; + border-color: #dee2e6; +} + +.index-module__pagination-lg__2mTGn .index-module__page-link__xNY6Q { + padding: 0.75rem 1.5rem; + font-size: 1.25rem; + line-height: 1.5; +} + +.index-module__pagination-lg__2mTGn + .index-module__page-item__16OYx:first-child + .index-module__page-link__xNY6Q { + border-top-left-radius: 0.3rem; + border-bottom-left-radius: 0.3rem; +} + +.index-module__pagination-lg__2mTGn + .index-module__page-item__16OYx:last-child + .index-module__page-link__xNY6Q { + border-top-right-radius: 0.3rem; + border-bottom-right-radius: 0.3rem; +} + +.index-module__pagination-sm__3mLnZ .index-module__page-link__xNY6Q { + padding: 0.25rem 0.5rem; + font-size: 0.875rem; + line-height: 1.5; +} + +.index-module__pagination-sm__3mLnZ + .index-module__page-item__16OYx:first-child + .index-module__page-link__xNY6Q { + border-top-left-radius: 0.2rem; + border-bottom-left-radius: 0.2rem; +} + +.index-module__pagination-sm__3mLnZ + .index-module__page-item__16OYx:last-child + .index-module__page-link__xNY6Q { + border-top-right-radius: 0.2rem; + border-bottom-right-radius: 0.2rem; +} + +.index-module__badge__3XyDs { + display: inline-block; + padding: 0.25em 0.4em; + font-size: 75%; + font-weight: 700; + line-height: 1; + text-align: center; + white-space: nowrap; + vertical-align: baseline; + border-radius: 0.25rem; + transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, + border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; +} +@media (prefers-reduced-motion: reduce) { + .index-module__badge__3XyDs { + transition: none; + } +} +a.index-module__badge__3XyDs:hover, +a.index-module__badge__3XyDs:focus { + text-decoration: none; +} +.index-module__badge__3XyDs:empty { + display: none; +} + +.index-module__btn__1Pcdf .index-module__badge__3XyDs { + position: relative; + top: -1px; +} + +.index-module__badge-pill__vtpQL { + padding-right: 0.6em; + padding-left: 0.6em; + border-radius: 10rem; +} + +.index-module__badge-primary__3ZDgH { + color: #fff; + background-color: #0968c3; +} +a.index-module__badge-primary__3ZDgH:hover, +a.index-module__badge-primary__3ZDgH:focus { + color: #fff; + background-color: #074e92; +} +a.index-module__badge-primary__3ZDgH:focus, +a.index-module__badge-primary__3ZDgH.index-module__focus__37XLI { + outline: 0; + box-shadow: 0 0 0 0.2rem rgba(9, 104, 195, 0.5); +} + +.index-module__badge-secondary__34ML3 { + color: #fff; + background-color: #808080; +} +a.index-module__badge-secondary__34ML3:hover, +a.index-module__badge-secondary__34ML3:focus { + color: #fff; + background-color: #676767; +} +a.index-module__badge-secondary__34ML3:focus, +a.index-module__badge-secondary__34ML3.index-module__focus__37XLI { + outline: 0; + box-shadow: 0 0 0 0.2rem rgba(128, 128, 128, 0.5); +} + +.index-module__badge-success__XyqRD { + color: #fff; + background-color: #28a745; +} +a.index-module__badge-success__XyqRD:hover, +a.index-module__badge-success__XyqRD:focus { + color: #fff; + background-color: #1e7e34; +} +a.index-module__badge-success__XyqRD:focus, +a.index-module__badge-success__XyqRD.index-module__focus__37XLI { + outline: 0; + box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.5); +} + +.index-module__badge-info__2eMvu { + color: #fff; + background-color: #17a2b8; +} +a.index-module__badge-info__2eMvu:hover, +a.index-module__badge-info__2eMvu:focus { + color: #fff; + background-color: #117a8b; +} +a.index-module__badge-info__2eMvu:focus, +a.index-module__badge-info__2eMvu.index-module__focus__37XLI { + outline: 0; + box-shadow: 0 0 0 0.2rem rgba(23, 162, 184, 0.5); +} + +.index-module__badge-warning__2JO5V { + color: #212529; + background-color: #ffc107; +} +a.index-module__badge-warning__2JO5V:hover, +a.index-module__badge-warning__2JO5V:focus { + color: #212529; + background-color: #d39e00; +} +a.index-module__badge-warning__2JO5V:focus, +a.index-module__badge-warning__2JO5V.index-module__focus__37XLI { + outline: 0; + box-shadow: 0 0 0 0.2rem rgba(255, 193, 7, 0.5); +} + +.index-module__badge-danger__3VOpV { + color: #fff; + background-color: #dc3545; +} +a.index-module__badge-danger__3VOpV:hover, +a.index-module__badge-danger__3VOpV:focus { + color: #fff; + background-color: #bd2130; +} +a.index-module__badge-danger__3VOpV:focus, +a.index-module__badge-danger__3VOpV.index-module__focus__37XLI { + outline: 0; + box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.5); +} + +.index-module__badge-light__2n5iP { + color: #212529; + background-color: #f8f9fa; +} +a.index-module__badge-light__2n5iP:hover, +a.index-module__badge-light__2n5iP:focus { + color: #212529; + background-color: #dae0e5; +} +a.index-module__badge-light__2n5iP:focus, +a.index-module__badge-light__2n5iP.index-module__focus__37XLI { + outline: 0; + box-shadow: 0 0 0 0.2rem rgba(248, 249, 250, 0.5); +} + +.index-module__badge-dark__24am4 { + color: #fff; + background-color: #343a40; +} +a.index-module__badge-dark__24am4:hover, +a.index-module__badge-dark__24am4:focus { + color: #fff; + background-color: #1d2124; +} +a.index-module__badge-dark__24am4:focus, +a.index-module__badge-dark__24am4.index-module__focus__37XLI { + outline: 0; + box-shadow: 0 0 0 0.2rem rgba(52, 58, 64, 0.5); +} + +.index-module__jumbotron__1NqXn { + padding: 2rem 1rem; + margin-bottom: 2rem; + background-color: #e9ecef; + border-radius: 0.3rem; +} +@media (min-width: 576px) { + .index-module__jumbotron__1NqXn { + padding: 4rem 2rem; + } +} + +.index-module__jumbotron-fluid__xlJLH { + padding-right: 0; + padding-left: 0; + border-radius: 0; +} + +.index-module__alert__3rOIn { + position: relative; + padding: 0.75rem 1.25rem; + margin-bottom: 1rem; + border: 1px solid transparent; + border-radius: 0.25rem; +} + +.index-module__alert-heading__1a7ZA { + color: inherit; +} + +.index-module__alert-link__2eQzr { + font-weight: 700; +} + +.index-module__alert-dismissible__AOgXM { + padding-right: 4rem; +} +.index-module__alert-dismissible__AOgXM .index-module__close__1wRFd { + position: absolute; + top: 0; + right: 0; + padding: 0.75rem 1.25rem; + color: inherit; +} + +.index-module__alert-primary__2OecW { + color: #053665; + background-color: #cee1f3; + border-color: #bad5ee; +} +.index-module__alert-primary__2OecW hr { + border-top-color: #a6c9e9; +} +.index-module__alert-primary__2OecW .index-module__alert-link__2eQzr { + color: #031c34; +} + +.index-module__alert-secondary__3QWKW { + color: #434343; + background-color: #e6e6e6; + border-color: #dbdbdb; +} +.index-module__alert-secondary__3QWKW hr { + border-top-color: #cecece; +} +.index-module__alert-secondary__3QWKW .index-module__alert-link__2eQzr { + color: #2a2a2a; +} + +.index-module__alert-success__92kfn { + color: #155724; + background-color: #d4edda; + border-color: #c3e6cb; +} +.index-module__alert-success__92kfn hr { + border-top-color: #b1dfbb; +} +.index-module__alert-success__92kfn .index-module__alert-link__2eQzr { + color: #0b2e13; +} + +.index-module__alert-info__271H0 { + color: #0c5460; + background-color: #d1ecf1; + border-color: #bee5eb; +} +.index-module__alert-info__271H0 hr { + border-top-color: #abdde5; +} +.index-module__alert-info__271H0 .index-module__alert-link__2eQzr { + color: #062c33; +} + +.index-module__alert-warning__3c5Fc { + color: #856404; + background-color: #fff3cd; + border-color: #ffeeba; +} +.index-module__alert-warning__3c5Fc hr { + border-top-color: #ffe8a1; +} +.index-module__alert-warning__3c5Fc .index-module__alert-link__2eQzr { + color: #533f03; +} + +.index-module__alert-danger__1jubp { + color: #721c24; + background-color: #f8d7da; + border-color: #f5c6cb; +} +.index-module__alert-danger__1jubp hr { + border-top-color: #f1b0b7; +} +.index-module__alert-danger__1jubp .index-module__alert-link__2eQzr { + color: #491217; +} + +.index-module__alert-light__hPVLg { + color: #818182; + background-color: #fefefe; + border-color: #fdfdfe; +} +.index-module__alert-light__hPVLg hr { + border-top-color: #ececf6; +} +.index-module__alert-light__hPVLg .index-module__alert-link__2eQzr { + color: #686868; +} + +.index-module__alert-dark__ZFBLX { + color: #1b1e21; + background-color: #d6d8d9; + border-color: #c6c8ca; +} +.index-module__alert-dark__ZFBLX hr { + border-top-color: #b9bbbe; +} +.index-module__alert-dark__ZFBLX .index-module__alert-link__2eQzr { + color: #040505; +} + +@keyframes index-module__progress-bar-stripes__1n6hj { + from { + background-position: 1rem 0; + } + to { + background-position: 0 0; + } +} + +.index-module__progress__1h-rT { + display: flex; + height: 1rem; + overflow: hidden; + font-size: 0.75rem; + background-color: #e9ecef; + border-radius: 0.25rem; +} + +.index-module__progress-bar__18OLp { + display: flex; + flex-direction: column; + justify-content: center; + overflow: hidden; + color: #fff; + text-align: center; + white-space: nowrap; + background-color: #0968c3; + transition: width 0.6s ease; +} +@media (prefers-reduced-motion: reduce) { + .index-module__progress-bar__18OLp { + transition: none; + } +} + +.index-module__progress-bar-striped__3B_Cl { + background-image: linear-gradient( + 45deg, + rgba(255, 255, 255, 0.15) 25%, + transparent 25%, + transparent 50%, + rgba(255, 255, 255, 0.15) 50%, + rgba(255, 255, 255, 0.15) 75%, + transparent 75%, + transparent + ); + background-size: 1rem 1rem; +} + +.index-module__progress-bar-animated__c8pmU { + animation: index-module__progress-bar-stripes__1n6hj 1s linear infinite; +} +@media (prefers-reduced-motion: reduce) { + .index-module__progress-bar-animated__c8pmU { + animation: none; + } +} + +.index-module__media__4_ndS { + display: flex; + align-items: flex-start; +} + +.index-module__media-body__cY3XF { + flex: 1; +} + +.index-module__list-group__3IKFg { + display: flex; + flex-direction: column; + padding-left: 0; + margin-bottom: 0; +} + +.index-module__list-group-item-action__NDrlj { + width: 100%; + color: #495057; + text-align: inherit; +} +.index-module__list-group-item-action__NDrlj:hover, +.index-module__list-group-item-action__NDrlj:focus { + z-index: 1; + color: #495057; + text-decoration: none; + background-color: #f8f9fa; +} +.index-module__list-group-item-action__NDrlj:active { + color: #212529; + background-color: #e9ecef; +} + +.index-module__list-group-item__tsEJn { + position: relative; + display: block; + padding: 0.75rem 1.25rem; + background-color: #fff; + border: 1px solid rgba(0, 0, 0, 0.125); +} +.index-module__list-group-item__tsEJn:first-child { + border-top-left-radius: 0.25rem; + border-top-right-radius: 0.25rem; +} +.index-module__list-group-item__tsEJn:last-child { + border-bottom-right-radius: 0.25rem; + border-bottom-left-radius: 0.25rem; +} +.index-module__list-group-item__tsEJn.index-module__disabled__2BtOk, +.index-module__list-group-item__tsEJn:disabled { + color: #6c757d; + pointer-events: none; + background-color: #fff; +} +.index-module__list-group-item__tsEJn.index-module__active__2-CxA { + z-index: 2; + color: #fff; + background-color: #0968c3; + border-color: #0968c3; +} +.index-module__list-group-item__tsEJn + .index-module__list-group-item__tsEJn { + border-top-width: 0; +} +.index-module__list-group-item__tsEJn + + .index-module__list-group-item__tsEJn.index-module__active__2-CxA { + margin-top: -1px; + border-top-width: 1px; +} + +.index-module__list-group-horizontal__1PrM2 { + flex-direction: row; +} +.index-module__list-group-horizontal__1PrM2 + .index-module__list-group-item__tsEJn:first-child { + border-bottom-left-radius: 0.25rem; + border-top-right-radius: 0; +} +.index-module__list-group-horizontal__1PrM2 + .index-module__list-group-item__tsEJn:last-child { + border-top-right-radius: 0.25rem; + border-bottom-left-radius: 0; +} +.index-module__list-group-horizontal__1PrM2 + .index-module__list-group-item__tsEJn.index-module__active__2-CxA { + margin-top: 0; +} +.index-module__list-group-horizontal__1PrM2 + .index-module__list-group-item__tsEJn + + .index-module__list-group-item__tsEJn { + border-top-width: 1px; + border-left-width: 0; +} +.index-module__list-group-horizontal__1PrM2 + .index-module__list-group-item__tsEJn + + .index-module__list-group-item__tsEJn.index-module__active__2-CxA { + margin-left: -1px; + border-left-width: 1px; +} + +@media (min-width: 576px) { + .index-module__list-group-horizontal-sm__2eMJE { + flex-direction: row; + } + .index-module__list-group-horizontal-sm__2eMJE + .index-module__list-group-item__tsEJn:first-child { + border-bottom-left-radius: 0.25rem; + border-top-right-radius: 0; + } + .index-module__list-group-horizontal-sm__2eMJE + .index-module__list-group-item__tsEJn:last-child { + border-top-right-radius: 0.25rem; + border-bottom-left-radius: 0; + } + .index-module__list-group-horizontal-sm__2eMJE + .index-module__list-group-item__tsEJn.index-module__active__2-CxA { + margin-top: 0; + } + .index-module__list-group-horizontal-sm__2eMJE + .index-module__list-group-item__tsEJn + + .index-module__list-group-item__tsEJn { + border-top-width: 1px; + border-left-width: 0; + } + .index-module__list-group-horizontal-sm__2eMJE + .index-module__list-group-item__tsEJn + + .index-module__list-group-item__tsEJn.index-module__active__2-CxA { + margin-left: -1px; + border-left-width: 1px; + } +} + +@media (min-width: 768px) { + .index-module__list-group-horizontal-md__2_xpm { + flex-direction: row; + } + .index-module__list-group-horizontal-md__2_xpm + .index-module__list-group-item__tsEJn:first-child { + border-bottom-left-radius: 0.25rem; + border-top-right-radius: 0; + } + .index-module__list-group-horizontal-md__2_xpm + .index-module__list-group-item__tsEJn:last-child { + border-top-right-radius: 0.25rem; + border-bottom-left-radius: 0; + } + .index-module__list-group-horizontal-md__2_xpm + .index-module__list-group-item__tsEJn.index-module__active__2-CxA { + margin-top: 0; + } + .index-module__list-group-horizontal-md__2_xpm + .index-module__list-group-item__tsEJn + + .index-module__list-group-item__tsEJn { + border-top-width: 1px; + border-left-width: 0; + } + .index-module__list-group-horizontal-md__2_xpm + .index-module__list-group-item__tsEJn + + .index-module__list-group-item__tsEJn.index-module__active__2-CxA { + margin-left: -1px; + border-left-width: 1px; + } +} + +@media (min-width: 1050px) { + .index-module__list-group-horizontal-lg__Nr559 { + flex-direction: row; + } + .index-module__list-group-horizontal-lg__Nr559 + .index-module__list-group-item__tsEJn:first-child { + border-bottom-left-radius: 0.25rem; + border-top-right-radius: 0; + } + .index-module__list-group-horizontal-lg__Nr559 + .index-module__list-group-item__tsEJn:last-child { + border-top-right-radius: 0.25rem; + border-bottom-left-radius: 0; + } + .index-module__list-group-horizontal-lg__Nr559 + .index-module__list-group-item__tsEJn.index-module__active__2-CxA { + margin-top: 0; + } + .index-module__list-group-horizontal-lg__Nr559 + .index-module__list-group-item__tsEJn + + .index-module__list-group-item__tsEJn { + border-top-width: 1px; + border-left-width: 0; + } + .index-module__list-group-horizontal-lg__Nr559 + .index-module__list-group-item__tsEJn + + .index-module__list-group-item__tsEJn.index-module__active__2-CxA { + margin-left: -1px; + border-left-width: 1px; + } +} + +@media (min-width: 1413px) { + .index-module__list-group-horizontal-xl__1F2ib { + flex-direction: row; + } + .index-module__list-group-horizontal-xl__1F2ib + .index-module__list-group-item__tsEJn:first-child { + border-bottom-left-radius: 0.25rem; + border-top-right-radius: 0; + } + .index-module__list-group-horizontal-xl__1F2ib + .index-module__list-group-item__tsEJn:last-child { + border-top-right-radius: 0.25rem; + border-bottom-left-radius: 0; + } + .index-module__list-group-horizontal-xl__1F2ib + .index-module__list-group-item__tsEJn.index-module__active__2-CxA { + margin-top: 0; + } + .index-module__list-group-horizontal-xl__1F2ib + .index-module__list-group-item__tsEJn + + .index-module__list-group-item__tsEJn { + border-top-width: 1px; + border-left-width: 0; + } + .index-module__list-group-horizontal-xl__1F2ib + .index-module__list-group-item__tsEJn + + .index-module__list-group-item__tsEJn.index-module__active__2-CxA { + margin-left: -1px; + border-left-width: 1px; + } +} + +.index-module__list-group-flush__bAJYq .index-module__list-group-item__tsEJn { + border-right-width: 0; + border-left-width: 0; + border-radius: 0; +} +.index-module__list-group-flush__bAJYq + .index-module__list-group-item__tsEJn:first-child { + border-top-width: 0; +} + +.index-module__list-group-flush__bAJYq:last-child + .index-module__list-group-item__tsEJn:last-child { + border-bottom-width: 0; +} + +.index-module__list-group-item-primary__3dYur { + color: #053665; + background-color: #bad5ee; +} +.index-module__list-group-item-primary__3dYur.index-module__list-group-item-action__NDrlj:hover, +.index-module__list-group-item-primary__3dYur.index-module__list-group-item-action__NDrlj:focus { + color: #053665; + background-color: #a6c9e9; +} +.index-module__list-group-item-primary__3dYur.index-module__list-group-item-action__NDrlj.index-module__active__2-CxA { + color: #fff; + background-color: #053665; + border-color: #053665; +} + +.index-module__list-group-item-secondary__28l_L { + color: #434343; + background-color: #dbdbdb; +} +.index-module__list-group-item-secondary__28l_L.index-module__list-group-item-action__NDrlj:hover, +.index-module__list-group-item-secondary__28l_L.index-module__list-group-item-action__NDrlj:focus { + color: #434343; + background-color: #cecece; +} +.index-module__list-group-item-secondary__28l_L.index-module__list-group-item-action__NDrlj.index-module__active__2-CxA { + color: #fff; + background-color: #434343; + border-color: #434343; +} + +.index-module__list-group-item-success__3oakj { + color: #155724; + background-color: #c3e6cb; +} +.index-module__list-group-item-success__3oakj.index-module__list-group-item-action__NDrlj:hover, +.index-module__list-group-item-success__3oakj.index-module__list-group-item-action__NDrlj:focus { + color: #155724; + background-color: #b1dfbb; +} +.index-module__list-group-item-success__3oakj.index-module__list-group-item-action__NDrlj.index-module__active__2-CxA { + color: #fff; + background-color: #155724; + border-color: #155724; +} + +.index-module__list-group-item-info__1Uniy { + color: #0c5460; + background-color: #bee5eb; +} +.index-module__list-group-item-info__1Uniy.index-module__list-group-item-action__NDrlj:hover, +.index-module__list-group-item-info__1Uniy.index-module__list-group-item-action__NDrlj:focus { + color: #0c5460; + background-color: #abdde5; +} +.index-module__list-group-item-info__1Uniy.index-module__list-group-item-action__NDrlj.index-module__active__2-CxA { + color: #fff; + background-color: #0c5460; + border-color: #0c5460; +} + +.index-module__list-group-item-warning__KVL0w { + color: #856404; + background-color: #ffeeba; +} +.index-module__list-group-item-warning__KVL0w.index-module__list-group-item-action__NDrlj:hover, +.index-module__list-group-item-warning__KVL0w.index-module__list-group-item-action__NDrlj:focus { + color: #856404; + background-color: #ffe8a1; +} +.index-module__list-group-item-warning__KVL0w.index-module__list-group-item-action__NDrlj.index-module__active__2-CxA { + color: #fff; + background-color: #856404; + border-color: #856404; +} + +.index-module__list-group-item-danger__ckwbt { + color: #721c24; + background-color: #f5c6cb; +} +.index-module__list-group-item-danger__ckwbt.index-module__list-group-item-action__NDrlj:hover, +.index-module__list-group-item-danger__ckwbt.index-module__list-group-item-action__NDrlj:focus { + color: #721c24; + background-color: #f1b0b7; +} +.index-module__list-group-item-danger__ckwbt.index-module__list-group-item-action__NDrlj.index-module__active__2-CxA { + color: #fff; + background-color: #721c24; + border-color: #721c24; +} + +.index-module__list-group-item-light__3D-0P { + color: #818182; + background-color: #fdfdfe; +} +.index-module__list-group-item-light__3D-0P.index-module__list-group-item-action__NDrlj:hover, +.index-module__list-group-item-light__3D-0P.index-module__list-group-item-action__NDrlj:focus { + color: #818182; + background-color: #ececf6; +} +.index-module__list-group-item-light__3D-0P.index-module__list-group-item-action__NDrlj.index-module__active__2-CxA { + color: #fff; + background-color: #818182; + border-color: #818182; +} + +.index-module__list-group-item-dark__1UzNj { + color: #1b1e21; + background-color: #c6c8ca; +} +.index-module__list-group-item-dark__1UzNj.index-module__list-group-item-action__NDrlj:hover, +.index-module__list-group-item-dark__1UzNj.index-module__list-group-item-action__NDrlj:focus { + color: #1b1e21; + background-color: #b9bbbe; +} +.index-module__list-group-item-dark__1UzNj.index-module__list-group-item-action__NDrlj.index-module__active__2-CxA { + color: #fff; + background-color: #1b1e21; + border-color: #1b1e21; +} + +.index-module__close__1wRFd { + float: right; + font-size: 1.5rem; + font-weight: 700; + line-height: 1; + color: #000; + text-shadow: 0 1px 0 #fff; + opacity: 0.5; +} +.index-module__close__1wRFd:hover { + color: #000; + text-decoration: none; +} +.index-module__close__1wRFd:not(:disabled):not(.index-module__disabled__2BtOk):hover, +.index-module__close__1wRFd:not(:disabled):not(.index-module__disabled__2BtOk):focus { + opacity: 0.75; +} + +button.index-module__close__1wRFd { + padding: 0; + background-color: transparent; + border: 0; + appearance: none; +} + +a.index-module__close__1wRFd.index-module__disabled__2BtOk { + pointer-events: none; +} + +.index-module__toast__1IzFA { + max-width: 350px; + overflow: hidden; + font-size: 0.875rem; + background-color: rgba(255, 255, 255, 0.85); + background-clip: padding-box; + border: 1px solid rgba(0, 0, 0, 0.1); + box-shadow: 0 0.25rem 0.75rem rgba(0, 0, 0, 0.1); + backdrop-filter: blur(10px); + opacity: 0; + border-radius: 0.25rem; +} +.index-module__toast__1IzFA:not(:last-child) { + margin-bottom: 0.75rem; +} +.index-module__toast__1IzFA.index-module__showing__rfjiQ { + opacity: 1; +} +.index-module__toast__1IzFA.index-module__show__6Epil { + display: block; + opacity: 1; +} +.index-module__toast__1IzFA.index-module__hide__1efFV { + display: none; +} + +.index-module__toast-header__rCzMs { + display: flex; + align-items: center; + padding: 0.25rem 0.75rem; + color: #6c757d; + background-color: rgba(255, 255, 255, 0.85); + background-clip: padding-box; + border-bottom: 1px solid rgba(0, 0, 0, 0.05); +} + +.index-module__toast-body__1ADiS { + padding: 0.75rem; +} + +.index-module__modal-open__3gsI2 { + overflow: hidden; +} +.index-module__modal-open__3gsI2 .index-module__modal__1klTB { + overflow-x: hidden; + overflow-y: auto; +} + +.index-module__modal__1klTB { + position: fixed; + top: 0; + left: 0; + z-index: 1050; + display: none; + width: 100%; + height: 100%; + overflow: hidden; + outline: 0; +} + +.index-module__modal-dialog__2D-RY { + position: relative; + width: auto; + margin: 0.5rem; + pointer-events: none; +} +.index-module__modal__1klTB.index-module__fade__23Syb + .index-module__modal-dialog__2D-RY { + transition: transform 0.3s ease-out; + transform: translate(0, -50px); +} +@media (prefers-reduced-motion: reduce) { + .index-module__modal__1klTB.index-module__fade__23Syb + .index-module__modal-dialog__2D-RY { + transition: none; + } +} +.index-module__modal__1klTB.index-module__show__6Epil + .index-module__modal-dialog__2D-RY { + transform: none; +} +.index-module__modal__1klTB.index-module__modal-static__2CUMP + .index-module__modal-dialog__2D-RY { + transform: scale(1.02); +} + +.index-module__modal-dialog-scrollable__2OLKI { + display: flex; + max-height: calc(100% - 1rem); +} +.index-module__modal-dialog-scrollable__2OLKI + .index-module__modal-content__2xTWw { + max-height: calc(100vh - 1rem); + overflow: hidden; +} +.index-module__modal-dialog-scrollable__2OLKI + .index-module__modal-header__2kgoY, +.index-module__modal-dialog-scrollable__2OLKI + .index-module__modal-footer__O3U1v { + flex-shrink: 0; +} +.index-module__modal-dialog-scrollable__2OLKI .index-module__modal-body__3-1HX { + overflow-y: auto; +} + +.index-module__modal-dialog-centered__2Kk9k { + display: flex; + align-items: center; + min-height: calc(100% - 1rem); +} +.index-module__modal-dialog-centered__2Kk9k::before { + display: block; + height: calc(100vh - 1rem); + content: ''; +} +.index-module__modal-dialog-centered__2Kk9k.index-module__modal-dialog-scrollable__2OLKI { + flex-direction: column; + justify-content: center; + height: 100%; +} +.index-module__modal-dialog-centered__2Kk9k.index-module__modal-dialog-scrollable__2OLKI + .index-module__modal-content__2xTWw { + max-height: none; +} +.index-module__modal-dialog-centered__2Kk9k.index-module__modal-dialog-scrollable__2OLKI::before { + content: none; +} + +.index-module__modal-content__2xTWw { + position: relative; + display: flex; + flex-direction: column; + width: 100%; + pointer-events: auto; + background-color: #fff; + background-clip: padding-box; + border: 1px solid rgba(0, 0, 0, 0.2); + border-radius: 0.3rem; + outline: 0; +} + +.index-module__modal-backdrop__2kxkF { + position: fixed; + top: 0; + left: 0; + z-index: 1040; + width: 100vw; + height: 100vh; + background-color: #000; +} +.index-module__modal-backdrop__2kxkF.index-module__fade__23Syb { + opacity: 0; +} +.index-module__modal-backdrop__2kxkF.index-module__show__6Epil { + opacity: 0.5; +} + +.index-module__modal-header__2kgoY { + display: flex; + align-items: flex-start; + justify-content: space-between; + padding: 1rem 1rem; + border-bottom: 1px solid #dee2e6; + border-top-left-radius: calc(0.3rem - 1px); + border-top-right-radius: calc(0.3rem - 1px); +} +.index-module__modal-header__2kgoY .index-module__close__1wRFd { + padding: 1rem 1rem; + margin: -1rem -1rem -1rem auto; +} + +.index-module__modal-title__3Nvyk { + margin-bottom: 0; + line-height: 1.5; +} + +.index-module__modal-body__3-1HX { + position: relative; + flex: 1 1 auto; + padding: 1rem; +} + +.index-module__modal-footer__O3U1v { + display: flex; + flex-wrap: wrap; + align-items: center; + justify-content: flex-end; + padding: 0.75rem; + border-top: 1px solid #dee2e6; + border-bottom-right-radius: calc(0.3rem - 1px); + border-bottom-left-radius: calc(0.3rem - 1px); +} +.index-module__modal-footer__O3U1v > * { + margin: 0.25rem; +} + +.index-module__modal-scrollbar-measure__1Xc9r { + position: absolute; + top: -9999px; + width: 50px; + height: 50px; + overflow: scroll; +} + +@media (min-width: 576px) { + .index-module__modal-dialog__2D-RY { + max-width: 500px; + margin: 1.75rem auto; + } + .index-module__modal-dialog-scrollable__2OLKI { + max-height: calc(100% - 3.5rem); + } + .index-module__modal-dialog-scrollable__2OLKI + .index-module__modal-content__2xTWw { + max-height: calc(100vh - 3.5rem); + } + .index-module__modal-dialog-centered__2Kk9k { + min-height: calc(100% - 3.5rem); + } + .index-module__modal-dialog-centered__2Kk9k::before { + height: calc(100vh - 3.5rem); + } + .index-module__modal-sm__10Rkr { + max-width: 300px; + } +} + +@media (min-width: 1050px) { + .index-module__modal-lg__12tAk, + .index-module__modal-xl__2Ot7e { + max-width: 800px; + } +} + +@media (min-width: 1413px) { + .index-module__modal-xl__2Ot7e { + max-width: 1140px; + } +} + +.index-module__tooltip__qBnHg { + position: absolute; + z-index: 1070; + display: block; + margin: 0; + font-family: 'Gotham Book', serif; + font-style: normal; + font-weight: 400; + line-height: 1.5; + text-align: left; + text-align: start; + text-decoration: none; + text-shadow: none; + text-transform: none; + letter-spacing: normal; + word-break: normal; + word-spacing: normal; + white-space: normal; + line-break: auto; + font-size: 0.875rem; + word-wrap: break-word; + opacity: 0; +} +.index-module__tooltip__qBnHg.index-module__show__6Epil { + opacity: 0.9; +} +.index-module__tooltip__qBnHg .index-module__arrow__2rswH { + position: absolute; + display: block; + width: 0.8rem; + height: 0.4rem; +} +.index-module__tooltip__qBnHg .index-module__arrow__2rswH::before { + position: absolute; + content: ''; + border-color: transparent; + border-style: solid; +} + +.index-module__bs-tooltip-top__1BhwH, +.index-module__bs-tooltip-auto__xkBn_[x-placement^='top'] { + padding: 0.4rem 0; +} +.index-module__bs-tooltip-top__1BhwH .index-module__arrow__2rswH, +.index-module__bs-tooltip-auto__xkBn_[x-placement^='top'] + .index-module__arrow__2rswH { + bottom: 0; +} +.index-module__bs-tooltip-top__1BhwH .index-module__arrow__2rswH::before, +.index-module__bs-tooltip-auto__xkBn_[x-placement^='top'] + .index-module__arrow__2rswH::before { + top: 0; + border-width: 0.4rem 0.4rem 0; + border-top-color: #000; +} + +.index-module__bs-tooltip-right__398mf, +.index-module__bs-tooltip-auto__xkBn_[x-placement^='right'] { + padding: 0 0.4rem; +} +.index-module__bs-tooltip-right__398mf .index-module__arrow__2rswH, +.index-module__bs-tooltip-auto__xkBn_[x-placement^='right'] + .index-module__arrow__2rswH { + left: 0; + width: 0.4rem; + height: 0.8rem; +} +.index-module__bs-tooltip-right__398mf .index-module__arrow__2rswH::before, +.index-module__bs-tooltip-auto__xkBn_[x-placement^='right'] + .index-module__arrow__2rswH::before { + right: 0; + border-width: 0.4rem 0.4rem 0.4rem 0; + border-right-color: #000; +} + +.index-module__bs-tooltip-bottom__3mc1t, +.index-module__bs-tooltip-auto__xkBn_[x-placement^='bottom'] { + padding: 0.4rem 0; +} +.index-module__bs-tooltip-bottom__3mc1t .index-module__arrow__2rswH, +.index-module__bs-tooltip-auto__xkBn_[x-placement^='bottom'] + .index-module__arrow__2rswH { + top: 0; +} +.index-module__bs-tooltip-bottom__3mc1t .index-module__arrow__2rswH::before, +.index-module__bs-tooltip-auto__xkBn_[x-placement^='bottom'] + .index-module__arrow__2rswH::before { + bottom: 0; + border-width: 0 0.4rem 0.4rem; + border-bottom-color: #000; +} + +.index-module__bs-tooltip-left__3gj7E, +.index-module__bs-tooltip-auto__xkBn_[x-placement^='left'] { + padding: 0 0.4rem; +} +.index-module__bs-tooltip-left__3gj7E .index-module__arrow__2rswH, +.index-module__bs-tooltip-auto__xkBn_[x-placement^='left'] + .index-module__arrow__2rswH { + right: 0; + width: 0.4rem; + height: 0.8rem; +} +.index-module__bs-tooltip-left__3gj7E .index-module__arrow__2rswH::before, +.index-module__bs-tooltip-auto__xkBn_[x-placement^='left'] + .index-module__arrow__2rswH::before { + left: 0; + border-width: 0.4rem 0 0.4rem 0.4rem; + border-left-color: #000; +} + +.index-module__tooltip-inner__2Y2jl { + max-width: 200px; + padding: 0.25rem 0.5rem; + color: #fff; + text-align: center; + background-color: #000; + border-radius: 0.25rem; +} + +.index-module__popover__2SGlP { + position: absolute; + top: 0; + left: 0; + z-index: 1060; + display: block; + max-width: 276px; + font-family: 'Gotham Book', serif; + font-style: normal; + font-weight: 400; + line-height: 1.5; + text-align: left; + text-align: start; + text-decoration: none; + text-shadow: none; + text-transform: none; + letter-spacing: normal; + word-break: normal; + word-spacing: normal; + white-space: normal; + line-break: auto; + font-size: 0.875rem; + word-wrap: break-word; + background-color: #fff; + background-clip: padding-box; + border: 1px solid rgba(0, 0, 0, 0.2); + border-radius: 0.3rem; +} +.index-module__popover__2SGlP .index-module__arrow__2rswH { + position: absolute; + display: block; + width: 1rem; + height: 0.5rem; + margin: 0 0.3rem; +} +.index-module__popover__2SGlP .index-module__arrow__2rswH::before, +.index-module__popover__2SGlP .index-module__arrow__2rswH::after { + position: absolute; + display: block; + content: ''; + border-color: transparent; + border-style: solid; +} + +.index-module__bs-popover-top__PjDeA, +.index-module__bs-popover-auto__2bb6x[x-placement^='top'] { + margin-bottom: 0.5rem; +} +.index-module__bs-popover-top__PjDeA > .index-module__arrow__2rswH, +.index-module__bs-popover-auto__2bb6x[x-placement^='top'] + > .index-module__arrow__2rswH { + bottom: calc(-0.5rem - 1px); +} +.index-module__bs-popover-top__PjDeA > .index-module__arrow__2rswH::before, +.index-module__bs-popover-auto__2bb6x[x-placement^='top'] + > .index-module__arrow__2rswH::before { + bottom: 0; + border-width: 0.5rem 0.5rem 0; + border-top-color: rgba(0, 0, 0, 0.25); +} +.index-module__bs-popover-top__PjDeA > .index-module__arrow__2rswH::after, +.index-module__bs-popover-auto__2bb6x[x-placement^='top'] + > .index-module__arrow__2rswH::after { + bottom: 1px; + border-width: 0.5rem 0.5rem 0; + border-top-color: #fff; +} + +.index-module__bs-popover-right__2e2y6, +.index-module__bs-popover-auto__2bb6x[x-placement^='right'] { + margin-left: 0.5rem; +} +.index-module__bs-popover-right__2e2y6 > .index-module__arrow__2rswH, +.index-module__bs-popover-auto__2bb6x[x-placement^='right'] + > .index-module__arrow__2rswH { + left: calc(-0.5rem - 1px); + width: 0.5rem; + height: 1rem; + margin: 0.3rem 0; +} +.index-module__bs-popover-right__2e2y6 > .index-module__arrow__2rswH::before, +.index-module__bs-popover-auto__2bb6x[x-placement^='right'] + > .index-module__arrow__2rswH::before { + left: 0; + border-width: 0.5rem 0.5rem 0.5rem 0; + border-right-color: rgba(0, 0, 0, 0.25); +} +.index-module__bs-popover-right__2e2y6 > .index-module__arrow__2rswH::after, +.index-module__bs-popover-auto__2bb6x[x-placement^='right'] + > .index-module__arrow__2rswH::after { + left: 1px; + border-width: 0.5rem 0.5rem 0.5rem 0; + border-right-color: #fff; +} + +.index-module__bs-popover-bottom__3kUoW, +.index-module__bs-popover-auto__2bb6x[x-placement^='bottom'] { + margin-top: 0.5rem; +} +.index-module__bs-popover-bottom__3kUoW > .index-module__arrow__2rswH, +.index-module__bs-popover-auto__2bb6x[x-placement^='bottom'] + > .index-module__arrow__2rswH { + top: calc(-0.5rem - 1px); +} +.index-module__bs-popover-bottom__3kUoW > .index-module__arrow__2rswH::before, +.index-module__bs-popover-auto__2bb6x[x-placement^='bottom'] + > .index-module__arrow__2rswH::before { + top: 0; + border-width: 0 0.5rem 0.5rem 0.5rem; + border-bottom-color: rgba(0, 0, 0, 0.25); +} +.index-module__bs-popover-bottom__3kUoW > .index-module__arrow__2rswH::after, +.index-module__bs-popover-auto__2bb6x[x-placement^='bottom'] + > .index-module__arrow__2rswH::after { + top: 1px; + border-width: 0 0.5rem 0.5rem 0.5rem; + border-bottom-color: #fff; +} +.index-module__bs-popover-bottom__3kUoW + .index-module__popover-header__2EU4L::before, +.index-module__bs-popover-auto__2bb6x[x-placement^='bottom'] + .index-module__popover-header__2EU4L::before { + position: absolute; + top: 0; + left: 50%; + display: block; + width: 1rem; + margin-left: -0.5rem; + content: ''; + border-bottom: 1px solid #f7f7f7; +} + +.index-module__bs-popover-left__35_5h, +.index-module__bs-popover-auto__2bb6x[x-placement^='left'] { + margin-right: 0.5rem; +} +.index-module__bs-popover-left__35_5h > .index-module__arrow__2rswH, +.index-module__bs-popover-auto__2bb6x[x-placement^='left'] + > .index-module__arrow__2rswH { + right: calc(-0.5rem - 1px); + width: 0.5rem; + height: 1rem; + margin: 0.3rem 0; +} +.index-module__bs-popover-left__35_5h > .index-module__arrow__2rswH::before, +.index-module__bs-popover-auto__2bb6x[x-placement^='left'] + > .index-module__arrow__2rswH::before { + right: 0; + border-width: 0.5rem 0 0.5rem 0.5rem; + border-left-color: rgba(0, 0, 0, 0.25); +} +.index-module__bs-popover-left__35_5h > .index-module__arrow__2rswH::after, +.index-module__bs-popover-auto__2bb6x[x-placement^='left'] + > .index-module__arrow__2rswH::after { + right: 1px; + border-width: 0.5rem 0 0.5rem 0.5rem; + border-left-color: #fff; +} + +.index-module__popover-header__2EU4L { + padding: 0.5rem 0.75rem; + margin-bottom: 0; + font-size: 1rem; + background-color: #f7f7f7; + border-bottom: 1px solid #ebebeb; + border-top-left-radius: calc(0.3rem - 1px); + border-top-right-radius: calc(0.3rem - 1px); +} +.index-module__popover-header__2EU4L:empty { + display: none; +} + +.index-module__popover-body__Mf9Hm { + padding: 0.5rem 0.75rem; + color: #212529; +} + +.index-module__carousel__23XUu { + position: relative; +} + +.index-module__carousel__23XUu.index-module__pointer-event__Q7Iut { + touch-action: pan-y; +} + +.index-module__carousel-inner__3Wj3- { + position: relative; + width: 100%; + overflow: hidden; +} +.index-module__carousel-inner__3Wj3-::after { + display: block; + clear: both; + content: ''; +} + +.index-module__carousel-item__19qZ3 { + position: relative; + display: none; + float: left; + width: 100%; + margin-right: -100%; + backface-visibility: hidden; + transition: transform 0.6s ease-in-out; +} +@media (prefers-reduced-motion: reduce) { + .index-module__carousel-item__19qZ3 { + transition: none; + } +} + +.index-module__carousel-item__19qZ3.index-module__active__2-CxA, +.index-module__carousel-item-next__1l_ur, +.index-module__carousel-item-prev__Vjq-I { + display: block; +} + +.index-module__carousel-item-next__1l_ur:not(.index-module__carousel-item-left__1BDm2), +.index-module__active__2-CxA.index-module__carousel-item-right__O3R4g { + transform: translateX(100%); +} + +.index-module__carousel-item-prev__Vjq-I:not(.index-module__carousel-item-right__O3R4g), +.index-module__active__2-CxA.index-module__carousel-item-left__1BDm2 { + transform: translateX(-100%); +} + +.index-module__carousel-fade__2KFRm .index-module__carousel-item__19qZ3 { + opacity: 0; + transition-property: opacity; + transform: none; +} + +.index-module__carousel-fade__2KFRm + .index-module__carousel-item__19qZ3.index-module__active__2-CxA, +.index-module__carousel-fade__2KFRm + .index-module__carousel-item-next__1l_ur.index-module__carousel-item-left__1BDm2, +.index-module__carousel-fade__2KFRm + .index-module__carousel-item-prev__Vjq-I.index-module__carousel-item-right__O3R4g { + z-index: 1; + opacity: 1; +} + +.index-module__carousel-fade__2KFRm + .index-module__active__2-CxA.index-module__carousel-item-left__1BDm2, +.index-module__carousel-fade__2KFRm + .index-module__active__2-CxA.index-module__carousel-item-right__O3R4g { + z-index: 0; + opacity: 0; + transition: opacity 0s 0.6s; +} +@media (prefers-reduced-motion: reduce) { + .index-module__carousel-fade__2KFRm + .index-module__active__2-CxA.index-module__carousel-item-left__1BDm2, + .index-module__carousel-fade__2KFRm + .index-module__active__2-CxA.index-module__carousel-item-right__O3R4g { + transition: none; + } +} + +.index-module__carousel-control-prev__AIH7r, +.index-module__carousel-control-next__1Ltqh { + position: absolute; + top: 0; + bottom: 0; + z-index: 1; + display: flex; + align-items: center; + justify-content: center; + width: 15%; + color: #fff; + text-align: center; + opacity: 0.5; + transition: opacity 0.15s ease; +} +@media (prefers-reduced-motion: reduce) { + .index-module__carousel-control-prev__AIH7r, + .index-module__carousel-control-next__1Ltqh { + transition: none; + } +} +.index-module__carousel-control-prev__AIH7r:hover, +.index-module__carousel-control-prev__AIH7r:focus, +.index-module__carousel-control-next__1Ltqh:hover, +.index-module__carousel-control-next__1Ltqh:focus { + color: #fff; + text-decoration: none; + outline: 0; + opacity: 0.9; +} + +.index-module__carousel-control-prev__AIH7r { + left: 0; +} + +.index-module__carousel-control-next__1Ltqh { + right: 0; +} + +.index-module__carousel-control-prev-icon__j7Rif, +.index-module__carousel-control-next-icon__iOkN6 { + display: inline-block; + width: 20px; + height: 20px; + background: no-repeat 50% / 100% 100%; +} + +.index-module__carousel-control-prev-icon__j7Rif { + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath d='M5.25 0l-4 4 4 4 1.5-1.5L4.25 4l2.5-2.5L5.25 0z'/%3e%3c/svg%3e"); +} + +.index-module__carousel-control-next-icon__iOkN6 { + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath d='M2.75 0l-1.5 1.5L3.75 4l-2.5 2.5L2.75 8l4-4-4-4z'/%3e%3c/svg%3e"); +} + +.index-module__carousel-indicators__1N_Ir { + position: absolute; + right: 0; + bottom: 0; + left: 0; + z-index: 15; + display: flex; + justify-content: center; + padding-left: 0; + margin-right: 15%; + margin-left: 15%; + list-style: none; +} +.index-module__carousel-indicators__1N_Ir li { + box-sizing: content-box; + flex: 0 1 auto; + width: 30px; + height: 3px; + margin-right: 3px; + margin-left: 3px; + text-indent: -999px; + cursor: pointer; + background-color: #fff; + background-clip: padding-box; + border-top: 10px solid transparent; + border-bottom: 10px solid transparent; + opacity: 0.5; + transition: opacity 0.6s ease; +} +@media (prefers-reduced-motion: reduce) { + .index-module__carousel-indicators__1N_Ir li { + transition: none; + } +} +.index-module__carousel-indicators__1N_Ir .index-module__active__2-CxA { + opacity: 1; +} + +.index-module__carousel-caption__2ICBR { + position: absolute; + right: 15%; + bottom: 20px; + left: 15%; + z-index: 10; + padding-top: 20px; + padding-bottom: 20px; + color: #fff; + text-align: center; +} + +@keyframes index-module__spinner-border__32qWc { + to { + transform: rotate(360deg); + } +} + +.index-module__spinner-border__32qWc { + display: inline-block; + width: 2rem; + height: 2rem; + vertical-align: text-bottom; + border: 0.25em solid currentColor; + border-right-color: transparent; + border-radius: 50%; + animation: index-module__spinner-border__32qWc 0.75s linear infinite; +} + +.index-module__spinner-border-sm__2wo5d { + width: 1rem; + height: 1rem; + border-width: 0.2em; +} + +@keyframes index-module__spinner-grow__2z4qf { + 0% { + transform: scale(0); + } + 50% { + opacity: 1; + } +} + +.index-module__spinner-grow__2z4qf { + display: inline-block; + width: 2rem; + height: 2rem; + vertical-align: text-bottom; + background-color: currentColor; + border-radius: 50%; + opacity: 0; + animation: index-module__spinner-grow__2z4qf 0.75s linear infinite; +} + +.index-module__spinner-grow-sm__2J_8F { + width: 1rem; + height: 1rem; +} + +.index-module__align-baseline__22Ief { + vertical-align: baseline !important; +} + +.index-module__align-top__2LAh3 { + vertical-align: top !important; +} + +.index-module__align-middle__lRkJM { + vertical-align: middle !important; +} + +.index-module__align-bottom__2fuRH { + vertical-align: bottom !important; +} + +.index-module__align-text-bottom__uGF0N { + vertical-align: text-bottom !important; +} + +.index-module__align-text-top__1QpKK { + vertical-align: text-top !important; +} + +.index-module__bg-primary__15bc4 { + background-color: #0968c3 !important; +} + +a.index-module__bg-primary__15bc4:hover, +a.index-module__bg-primary__15bc4:focus, +button.index-module__bg-primary__15bc4:hover, +button.index-module__bg-primary__15bc4:focus { + background-color: #074e92 !important; +} + +.index-module__bg-secondary__3kg7Z { + background-color: #808080 !important; +} + +a.index-module__bg-secondary__3kg7Z:hover, +a.index-module__bg-secondary__3kg7Z:focus, +button.index-module__bg-secondary__3kg7Z:hover, +button.index-module__bg-secondary__3kg7Z:focus { + background-color: #676767 !important; +} + +.index-module__bg-success__2JnfU { + background-color: #28a745 !important; +} + +a.index-module__bg-success__2JnfU:hover, +a.index-module__bg-success__2JnfU:focus, +button.index-module__bg-success__2JnfU:hover, +button.index-module__bg-success__2JnfU:focus { + background-color: #1e7e34 !important; +} + +.index-module__bg-info__3c20Z { + background-color: #17a2b8 !important; +} + +a.index-module__bg-info__3c20Z:hover, +a.index-module__bg-info__3c20Z:focus, +button.index-module__bg-info__3c20Z:hover, +button.index-module__bg-info__3c20Z:focus { + background-color: #117a8b !important; +} + +.index-module__bg-warning__3Zb3D { + background-color: #ffc107 !important; +} + +a.index-module__bg-warning__3Zb3D:hover, +a.index-module__bg-warning__3Zb3D:focus, +button.index-module__bg-warning__3Zb3D:hover, +button.index-module__bg-warning__3Zb3D:focus { + background-color: #d39e00 !important; +} + +.index-module__bg-danger__2sSv0 { + background-color: #dc3545 !important; +} + +a.index-module__bg-danger__2sSv0:hover, +a.index-module__bg-danger__2sSv0:focus, +button.index-module__bg-danger__2sSv0:hover, +button.index-module__bg-danger__2sSv0:focus { + background-color: #bd2130 !important; +} + +.index-module__bg-light__3u2Ac { + background-color: #f8f9fa !important; +} + +a.index-module__bg-light__3u2Ac:hover, +a.index-module__bg-light__3u2Ac:focus, +button.index-module__bg-light__3u2Ac:hover, +button.index-module__bg-light__3u2Ac:focus { + background-color: #dae0e5 !important; +} + +.index-module__bg-dark__3HV6- { + background-color: #343a40 !important; +} + +a.index-module__bg-dark__3HV6-:hover, +a.index-module__bg-dark__3HV6-:focus, +button.index-module__bg-dark__3HV6-:hover, +button.index-module__bg-dark__3HV6-:focus { + background-color: #1d2124 !important; +} + +.index-module__bg-white__2snQi { + background-color: #fff !important; +} + +.index-module__bg-transparent__1tysZ { + background-color: transparent !important; +} + +.index-module__border__11qPG { + border: 1px solid #dee2e6 !important; +} + +.index-module__border-top__Yy2_J { + border-top: 1px solid #dee2e6 !important; +} + +.index-module__border-right__3ToJc { + border-right: 1px solid #dee2e6 !important; +} + +.index-module__border-bottom__2ixth { + border-bottom: 1px solid #dee2e6 !important; +} + +.index-module__border-left__2pfJ8 { + border-left: 1px solid #dee2e6 !important; +} + +.index-module__border-0__1797k { + border: 0 !important; +} + +.index-module__border-top-0__3Fg04 { + border-top: 0 !important; +} + +.index-module__border-right-0__TIwct { + border-right: 0 !important; +} + +.index-module__border-bottom-0__2ac8a { + border-bottom: 0 !important; +} + +.index-module__border-left-0__xW4be { + border-left: 0 !important; +} + +.index-module__border-primary__31kWz { + border-color: #0968c3 !important; +} + +.index-module__border-secondary__2BBub { + border-color: #808080 !important; +} + +.index-module__border-success__1ojwX { + border-color: #28a745 !important; +} + +.index-module__border-info__I4TLB { + border-color: #17a2b8 !important; +} + +.index-module__border-warning__2gX2z { + border-color: #ffc107 !important; +} + +.index-module__border-danger__2mjDE { + border-color: #dc3545 !important; +} + +.index-module__border-light__2X8Tg { + border-color: #f8f9fa !important; +} + +.index-module__border-dark__2jE9k { + border-color: #343a40 !important; +} + +.index-module__border-white__3oFZD { + border-color: #fff !important; +} + +.index-module__rounded-sm__sgDxH { + border-radius: 0.2rem !important; +} + +.index-module__rounded__3b7gS { + border-radius: 0.25rem !important; +} + +.index-module__rounded-top__1VBjR { + border-top-left-radius: 0.25rem !important; + border-top-right-radius: 0.25rem !important; +} + +.index-module__rounded-right__2XyLx { + border-top-right-radius: 0.25rem !important; + border-bottom-right-radius: 0.25rem !important; +} + +.index-module__rounded-bottom__Rv8nC { + border-bottom-right-radius: 0.25rem !important; + border-bottom-left-radius: 0.25rem !important; +} + +.index-module__rounded-left__3mXIm { + border-top-left-radius: 0.25rem !important; + border-bottom-left-radius: 0.25rem !important; +} + +.index-module__rounded-lg__3JUTg { + border-radius: 0.3rem !important; +} + +.index-module__rounded-circle__1Ug3f { + border-radius: 50% !important; +} + +.index-module__rounded-pill__25bLX { + border-radius: 50rem !important; +} + +.index-module__rounded-0__2M6hd { + border-radius: 0 !important; +} + +.index-module__clearfix__1jDy6::after { + display: block; + clear: both; + content: ''; +} + +.index-module__d-none__1UFzy { + display: none !important; +} + +.index-module__d-inline__1eSrQ { + display: inline !important; +} + +.index-module__d-inline-block__17YVa { + display: inline-block !important; +} + +.index-module__d-block__2YlS_ { + display: block !important; +} + +.index-module__d-table__MEAF8 { + display: table !important; +} + +.index-module__d-table-row__1q4SV { + display: table-row !important; +} + +.index-module__d-table-cell__W8QY2 { + display: table-cell !important; +} + +.index-module__d-flex__1qvFp { + display: flex !important; +} + +.index-module__d-inline-flex__1DK7F { + display: inline-flex !important; +} + +@media (min-width: 576px) { + .index-module__d-sm-none__D-Ixz { + display: none !important; + } + .index-module__d-sm-inline__1hnTb { + display: inline !important; + } + .index-module__d-sm-inline-block__1plB9 { + display: inline-block !important; + } + .index-module__d-sm-block__28HbD { + display: block !important; + } + .index-module__d-sm-table__3WY7a { + display: table !important; + } + .index-module__d-sm-table-row__S7LDT { + display: table-row !important; + } + .index-module__d-sm-table-cell___SH4G { + display: table-cell !important; + } + .index-module__d-sm-flex__2MqUn { + display: flex !important; + } + .index-module__d-sm-inline-flex__3dbe7 { + display: inline-flex !important; + } +} + +@media (min-width: 768px) { + .index-module__d-md-none__2FNrA { + display: none !important; + } + .index-module__d-md-inline__1lcRW { + display: inline !important; + } + .index-module__d-md-inline-block__2-kHh { + display: inline-block !important; + } + .index-module__d-md-block__32CZ2 { + display: block !important; + } + .index-module__d-md-table__2Ef9h { + display: table !important; + } + .index-module__d-md-table-row__U07gX { + display: table-row !important; + } + .index-module__d-md-table-cell__3LnKv { + display: table-cell !important; + } + .index-module__d-md-flex__1a9hJ { + display: flex !important; + } + .index-module__d-md-inline-flex__1h4jp { + display: inline-flex !important; + } +} + +@media (min-width: 1050px) { + .index-module__d-lg-none__2MP9w { + display: none !important; + } + .index-module__d-lg-inline__1z4Cd { + display: inline !important; + } + .index-module__d-lg-inline-block__2pczW { + display: inline-block !important; + } + .index-module__d-lg-block__acbC3 { + display: block !important; + } + .index-module__d-lg-table__3OSxx { + display: table !important; + } + .index-module__d-lg-table-row__X9lhz { + display: table-row !important; + } + .index-module__d-lg-table-cell__B15gg { + display: table-cell !important; + } + .index-module__d-lg-flex__3uRhp { + display: flex !important; + } + .index-module__d-lg-inline-flex__2wY0b { + display: inline-flex !important; + } +} + +@media (min-width: 1413px) { + .index-module__d-xl-none__5cs9L { + display: none !important; + } + .index-module__d-xl-inline__11qkx { + display: inline !important; + } + .index-module__d-xl-inline-block__56yqa { + display: inline-block !important; + } + .index-module__d-xl-block__3I3yt { + display: block !important; + } + .index-module__d-xl-table__1x9-d { + display: table !important; + } + .index-module__d-xl-table-row__gQeSj { + display: table-row !important; + } + .index-module__d-xl-table-cell__1EUMM { + display: table-cell !important; + } + .index-module__d-xl-flex__FUdMO { + display: flex !important; + } + .index-module__d-xl-inline-flex__CeC7K { + display: inline-flex !important; + } +} + +@media print { + .index-module__d-print-none__eG0Fa { + display: none !important; + } + .index-module__d-print-inline__1amkG { + display: inline !important; + } + .index-module__d-print-inline-block__1wWGM { + display: inline-block !important; + } + .index-module__d-print-block__3TyG4 { + display: block !important; + } + .index-module__d-print-table__BOEMC { + display: table !important; + } + .index-module__d-print-table-row__oywhQ { + display: table-row !important; + } + .index-module__d-print-table-cell__OEW4w { + display: table-cell !important; + } + .index-module__d-print-flex__S0pKW { + display: flex !important; + } + .index-module__d-print-inline-flex__29VnD { + display: inline-flex !important; + } +} + +.index-module__embed-responsive__1yscp { + position: relative; + display: block; + width: 100%; + padding: 0; + overflow: hidden; +} +.index-module__embed-responsive__1yscp::before { + display: block; + content: ''; +} +.index-module__embed-responsive__1yscp + .index-module__embed-responsive-item__1jl2s, +.index-module__embed-responsive__1yscp iframe, +.index-module__embed-responsive__1yscp embed, +.index-module__embed-responsive__1yscp object, +.index-module__embed-responsive__1yscp video { + position: absolute; + top: 0; + bottom: 0; + left: 0; + width: 100%; + height: 100%; + border: 0; +} + +.index-module__embed-responsive-21by9__28XiT::before { + padding-top: 42.85714%; +} + +.index-module__embed-responsive-16by9__22ItI::before { + padding-top: 56.25%; +} + +.index-module__embed-responsive-4by3__2MUFC::before { + padding-top: 75%; +} + +.index-module__embed-responsive-1by1__2ZJnY::before { + padding-top: 100%; +} + +.index-module__flex-row__3ylbW { + flex-direction: row !important; +} + +.index-module__flex-column__sIl7l { + flex-direction: column !important; +} + +.index-module__flex-row-reverse__BcGRz { + flex-direction: row-reverse !important; +} + +.index-module__flex-column-reverse__3Go3V { + flex-direction: column-reverse !important; +} + +.index-module__flex-wrap__1ovaQ { + flex-wrap: wrap !important; +} + +.index-module__flex-nowrap__2lmSF { + flex-wrap: nowrap !important; +} + +.index-module__flex-wrap-reverse__2f8MK { + flex-wrap: wrap-reverse !important; +} + +.index-module__flex-fill__35sP0 { + flex: 1 1 auto !important; +} + +.index-module__flex-grow-0__Kysyq { + flex-grow: 0 !important; +} + +.index-module__flex-grow-1__2kwOp { + flex-grow: 1 !important; +} + +.index-module__flex-shrink-0__2OK2B { + flex-shrink: 0 !important; +} + +.index-module__flex-shrink-1__3O3pH { + flex-shrink: 1 !important; +} + +.index-module__justify-content-start__2gV9a { + justify-content: flex-start !important; +} + +.index-module__justify-content-end__37y2T { + justify-content: flex-end !important; +} + +.index-module__justify-content-center__2qQe5 { + justify-content: center !important; +} + +.index-module__justify-content-between__2xAct { + justify-content: space-between !important; +} + +.index-module__justify-content-around__3PGZy { + justify-content: space-around !important; +} + +.index-module__align-items-start__2a328 { + align-items: flex-start !important; +} + +.index-module__align-items-end__pxmDe { + align-items: flex-end !important; +} + +.index-module__align-items-center__2B3iW { + align-items: center !important; +} + +.index-module__align-items-baseline__TgH6a { + align-items: baseline !important; +} + +.index-module__align-items-stretch__3KWud { + align-items: stretch !important; +} + +.index-module__align-content-start__3b3Hg { + align-content: flex-start !important; +} + +.index-module__align-content-end__wksf2 { + align-content: flex-end !important; +} + +.index-module__align-content-center__23Dyy { + align-content: center !important; +} + +.index-module__align-content-between__2FLKa { + align-content: space-between !important; +} + +.index-module__align-content-around__1Da4N { + align-content: space-around !important; +} + +.index-module__align-content-stretch__3h4Bi { + align-content: stretch !important; +} + +.index-module__align-self-auto__1dgAE { + align-self: auto !important; +} + +.index-module__align-self-start__t8nl- { + align-self: flex-start !important; +} + +.index-module__align-self-end__2Qm5m { + align-self: flex-end !important; +} + +.index-module__align-self-center__Dd-Gs { + align-self: center !important; +} + +.index-module__align-self-baseline__2Z5zE { + align-self: baseline !important; +} + +.index-module__align-self-stretch__2n0um { + align-self: stretch !important; +} + +@media (min-width: 576px) { + .index-module__flex-sm-row__3I57n { + flex-direction: row !important; + } + .index-module__flex-sm-column__2g-Z0 { + flex-direction: column !important; + } + .index-module__flex-sm-row-reverse__3p0k4 { + flex-direction: row-reverse !important; + } + .index-module__flex-sm-column-reverse__3ig6z { + flex-direction: column-reverse !important; + } + .index-module__flex-sm-wrap__VabSO { + flex-wrap: wrap !important; + } + .index-module__flex-sm-nowrap__2HWVy { + flex-wrap: nowrap !important; + } + .index-module__flex-sm-wrap-reverse__3Ratx { + flex-wrap: wrap-reverse !important; + } + .index-module__flex-sm-fill__391be { + flex: 1 1 auto !important; + } + .index-module__flex-sm-grow-0__8xMOK { + flex-grow: 0 !important; + } + .index-module__flex-sm-grow-1__1t3iD { + flex-grow: 1 !important; + } + .index-module__flex-sm-shrink-0__n3hK2 { + flex-shrink: 0 !important; + } + .index-module__flex-sm-shrink-1__1xswC { + flex-shrink: 1 !important; + } + .index-module__justify-content-sm-start__2ZsPP { + justify-content: flex-start !important; + } + .index-module__justify-content-sm-end__vGSVX { + justify-content: flex-end !important; + } + .index-module__justify-content-sm-center__2UFVe { + justify-content: center !important; + } + .index-module__justify-content-sm-between__3LXES { + justify-content: space-between !important; + } + .index-module__justify-content-sm-around__3WUhc { + justify-content: space-around !important; + } + .index-module__align-items-sm-start__2V-Us { + align-items: flex-start !important; + } + .index-module__align-items-sm-end__1lPXR { + align-items: flex-end !important; + } + .index-module__align-items-sm-center__3EkLM { + align-items: center !important; + } + .index-module__align-items-sm-baseline__3OQKT { + align-items: baseline !important; + } + .index-module__align-items-sm-stretch__252IZ { + align-items: stretch !important; + } + .index-module__align-content-sm-start__2HOv7 { + align-content: flex-start !important; + } + .index-module__align-content-sm-end__1gRgm { + align-content: flex-end !important; + } + .index-module__align-content-sm-center__xi-TT { + align-content: center !important; + } + .index-module__align-content-sm-between__36LSv { + align-content: space-between !important; + } + .index-module__align-content-sm-around__2K9Ol { + align-content: space-around !important; + } + .index-module__align-content-sm-stretch__2mMHr { + align-content: stretch !important; + } + .index-module__align-self-sm-auto__2LRHD { + align-self: auto !important; + } + .index-module__align-self-sm-start__2EPH9 { + align-self: flex-start !important; + } + .index-module__align-self-sm-end__3ClY5 { + align-self: flex-end !important; + } + .index-module__align-self-sm-center__2kaQb { + align-self: center !important; + } + .index-module__align-self-sm-baseline__5WHZz { + align-self: baseline !important; + } + .index-module__align-self-sm-stretch__2yy6Y { + align-self: stretch !important; + } +} + +@media (min-width: 768px) { + .index-module__flex-md-row__3LS07 { + flex-direction: row !important; + } + .index-module__flex-md-column__21yB1 { + flex-direction: column !important; + } + .index-module__flex-md-row-reverse__b4lh6 { + flex-direction: row-reverse !important; + } + .index-module__flex-md-column-reverse__162vZ { + flex-direction: column-reverse !important; + } + .index-module__flex-md-wrap__2-Ub4 { + flex-wrap: wrap !important; + } + .index-module__flex-md-nowrap__KXFMp { + flex-wrap: nowrap !important; + } + .index-module__flex-md-wrap-reverse__3eW60 { + flex-wrap: wrap-reverse !important; + } + .index-module__flex-md-fill__2VA1R { + flex: 1 1 auto !important; + } + .index-module__flex-md-grow-0__DoL0L { + flex-grow: 0 !important; + } + .index-module__flex-md-grow-1__CLD-r { + flex-grow: 1 !important; + } + .index-module__flex-md-shrink-0__UEK9v { + flex-shrink: 0 !important; + } + .index-module__flex-md-shrink-1__1A6r9 { + flex-shrink: 1 !important; + } + .index-module__justify-content-md-start__3AgZj { + justify-content: flex-start !important; + } + .index-module__justify-content-md-end__3Fmkm { + justify-content: flex-end !important; + } + .index-module__justify-content-md-center__3Bf-A { + justify-content: center !important; + } + .index-module__justify-content-md-between__31BQP { + justify-content: space-between !important; + } + .index-module__justify-content-md-around__2ajuf { + justify-content: space-around !important; + } + .index-module__align-items-md-start__21Px_ { + align-items: flex-start !important; + } + .index-module__align-items-md-end__1RCoB { + align-items: flex-end !important; + } + .index-module__align-items-md-center__22zo2 { + align-items: center !important; + } + .index-module__align-items-md-baseline__u6hUc { + align-items: baseline !important; + } + .index-module__align-items-md-stretch__34Yzf { + align-items: stretch !important; + } + .index-module__align-content-md-start__2ROQC { + align-content: flex-start !important; + } + .index-module__align-content-md-end__2gh2a { + align-content: flex-end !important; + } + .index-module__align-content-md-center__3C9R9 { + align-content: center !important; + } + .index-module__align-content-md-between__1iBKE { + align-content: space-between !important; + } + .index-module__align-content-md-around__N4dF0 { + align-content: space-around !important; + } + .index-module__align-content-md-stretch__2XrTJ { + align-content: stretch !important; + } + .index-module__align-self-md-auto__1H5uO { + align-self: auto !important; + } + .index-module__align-self-md-start__1GOy0 { + align-self: flex-start !important; + } + .index-module__align-self-md-end__3QFHN { + align-self: flex-end !important; + } + .index-module__align-self-md-center__3cknV { + align-self: center !important; + } + .index-module__align-self-md-baseline__3xUAb { + align-self: baseline !important; + } + .index-module__align-self-md-stretch__1k63x { + align-self: stretch !important; + } +} + +@media (min-width: 1050px) { + .index-module__flex-lg-row__2QnDI { + flex-direction: row !important; + } + .index-module__flex-lg-column__Ztry7 { + flex-direction: column !important; + } + .index-module__flex-lg-row-reverse__hk1Bj { + flex-direction: row-reverse !important; + } + .index-module__flex-lg-column-reverse__1egF5 { + flex-direction: column-reverse !important; + } + .index-module__flex-lg-wrap__1EhhV { + flex-wrap: wrap !important; + } + .index-module__flex-lg-nowrap__2dKGN { + flex-wrap: nowrap !important; + } + .index-module__flex-lg-wrap-reverse__R8cys { + flex-wrap: wrap-reverse !important; + } + .index-module__flex-lg-fill__2ILqZ { + flex: 1 1 auto !important; + } + .index-module__flex-lg-grow-0__3nGok { + flex-grow: 0 !important; + } + .index-module__flex-lg-grow-1__2KOwB { + flex-grow: 1 !important; + } + .index-module__flex-lg-shrink-0__3xNsV { + flex-shrink: 0 !important; + } + .index-module__flex-lg-shrink-1__3KEEK { + flex-shrink: 1 !important; + } + .index-module__justify-content-lg-start__2uQ3g { + justify-content: flex-start !important; + } + .index-module__justify-content-lg-end__-gGfk { + justify-content: flex-end !important; + } + .index-module__justify-content-lg-center__1fDc0 { + justify-content: center !important; + } + .index-module__justify-content-lg-between__2JShF { + justify-content: space-between !important; + } + .index-module__justify-content-lg-around__3ERPN { + justify-content: space-around !important; + } + .index-module__align-items-lg-start__3d3XW { + align-items: flex-start !important; + } + .index-module__align-items-lg-end__1ztQH { + align-items: flex-end !important; + } + .index-module__align-items-lg-center__1FfdS { + align-items: center !important; + } + .index-module__align-items-lg-baseline__otn8F { + align-items: baseline !important; + } + .index-module__align-items-lg-stretch__1yjRg { + align-items: stretch !important; + } + .index-module__align-content-lg-start__3_Gwy { + align-content: flex-start !important; + } + .index-module__align-content-lg-end__3jEIR { + align-content: flex-end !important; + } + .index-module__align-content-lg-center__3JMp3 { + align-content: center !important; + } + .index-module__align-content-lg-between__3vKJx { + align-content: space-between !important; + } + .index-module__align-content-lg-around__XgvDj { + align-content: space-around !important; + } + .index-module__align-content-lg-stretch__v7qMh { + align-content: stretch !important; + } + .index-module__align-self-lg-auto__11h14 { + align-self: auto !important; + } + .index-module__align-self-lg-start__2lekD { + align-self: flex-start !important; + } + .index-module__align-self-lg-end__Y-ezZ { + align-self: flex-end !important; + } + .index-module__align-self-lg-center__20ASJ { + align-self: center !important; + } + .index-module__align-self-lg-baseline__3e5c6 { + align-self: baseline !important; + } + .index-module__align-self-lg-stretch__3rDPl { + align-self: stretch !important; + } +} + +@media (min-width: 1413px) { + .index-module__flex-xl-row__1pb92 { + flex-direction: row !important; + } + .index-module__flex-xl-column__1gAon { + flex-direction: column !important; + } + .index-module__flex-xl-row-reverse__O8p-w { + flex-direction: row-reverse !important; + } + .index-module__flex-xl-column-reverse__ajrCo { + flex-direction: column-reverse !important; + } + .index-module__flex-xl-wrap__34zm7 { + flex-wrap: wrap !important; + } + .index-module__flex-xl-nowrap__2IA-h { + flex-wrap: nowrap !important; + } + .index-module__flex-xl-wrap-reverse__a6aWr { + flex-wrap: wrap-reverse !important; + } + .index-module__flex-xl-fill__3rzig { + flex: 1 1 auto !important; + } + .index-module__flex-xl-grow-0__3MUTQ { + flex-grow: 0 !important; + } + .index-module__flex-xl-grow-1__2fkua { + flex-grow: 1 !important; + } + .index-module__flex-xl-shrink-0__1GTOW { + flex-shrink: 0 !important; + } + .index-module__flex-xl-shrink-1__3fvXj { + flex-shrink: 1 !important; + } + .index-module__justify-content-xl-start__2m5Kf { + justify-content: flex-start !important; + } + .index-module__justify-content-xl-end__3jKqh { + justify-content: flex-end !important; + } + .index-module__justify-content-xl-center__f_V4w { + justify-content: center !important; + } + .index-module__justify-content-xl-between__3Z3Qx { + justify-content: space-between !important; + } + .index-module__justify-content-xl-around__1ak2X { + justify-content: space-around !important; + } + .index-module__align-items-xl-start__RX8_l { + align-items: flex-start !important; + } + .index-module__align-items-xl-end__l9w9U { + align-items: flex-end !important; + } + .index-module__align-items-xl-center__2Wxqa { + align-items: center !important; + } + .index-module__align-items-xl-baseline__3pCGZ { + align-items: baseline !important; + } + .index-module__align-items-xl-stretch__3HJ0Y { + align-items: stretch !important; + } + .index-module__align-content-xl-start__3Q5-a { + align-content: flex-start !important; + } + .index-module__align-content-xl-end__1GJCc { + align-content: flex-end !important; + } + .index-module__align-content-xl-center__2E0uB { + align-content: center !important; + } + .index-module__align-content-xl-between__OX8EN { + align-content: space-between !important; + } + .index-module__align-content-xl-around__3US3D { + align-content: space-around !important; + } + .index-module__align-content-xl-stretch__y0bVZ { + align-content: stretch !important; + } + .index-module__align-self-xl-auto__HEXjT { + align-self: auto !important; + } + .index-module__align-self-xl-start__1pgdI { + align-self: flex-start !important; + } + .index-module__align-self-xl-end__38P43 { + align-self: flex-end !important; + } + .index-module__align-self-xl-center__10iLa { + align-self: center !important; + } + .index-module__align-self-xl-baseline__3usxa { + align-self: baseline !important; + } + .index-module__align-self-xl-stretch__wGjfY { + align-self: stretch !important; + } +} + +.index-module__float-left__2ItlT { + float: left !important; +} + +.index-module__float-right__13qtj { + float: right !important; +} + +.index-module__float-none__1WMWR { + float: none !important; +} + +@media (min-width: 576px) { + .index-module__float-sm-left__1_6W8 { + float: left !important; + } + .index-module__float-sm-right__2TmyR { + float: right !important; + } + .index-module__float-sm-none__mby_i { + float: none !important; + } +} + +@media (min-width: 768px) { + .index-module__float-md-left__21sb4 { + float: left !important; + } + .index-module__float-md-right__2rZhy { + float: right !important; + } + .index-module__float-md-none__LVtgq { + float: none !important; + } +} + +@media (min-width: 1050px) { + .index-module__float-lg-left__1hDZR { + float: left !important; + } + .index-module__float-lg-right__1Q1Vg { + float: right !important; + } + .index-module__float-lg-none__2kloU { + float: none !important; + } +} + +@media (min-width: 1413px) { + .index-module__float-xl-left__1Ipg5 { + float: left !important; + } + .index-module__float-xl-right__3z1P5 { + float: right !important; + } + .index-module__float-xl-none__3CgDx { + float: none !important; + } +} + +.index-module__overflow-auto__1_LnW { + overflow: auto !important; +} + +.index-module__overflow-hidden__1N-pd { + overflow: hidden !important; +} + +.index-module__position-static__1Cih- { + position: static !important; +} + +.index-module__position-relative__yYqey { + position: relative !important; +} + +.index-module__position-absolute__Q5jhn { + position: absolute !important; +} + +.index-module__position-fixed__3_uIf { + position: fixed !important; +} + +.index-module__position-sticky__3BADn { + position: sticky !important; +} + +.index-module__fixed-top__SAxfM { + position: fixed; + top: 0; + right: 0; + left: 0; + z-index: 1030; +} + +.index-module__fixed-bottom__1ReKY { + position: fixed; + right: 0; + bottom: 0; + left: 0; + z-index: 1030; +} + +@supports (position: sticky) { + .index-module__sticky-top__1KjAB { + position: sticky; + top: 0; + z-index: 1020; + } +} + +.index-module__sr-only__1dHXJ { + position: absolute; + width: 1px; + height: 1px; + padding: 0; + margin: -1px; + overflow: hidden; + clip: rect(0, 0, 0, 0); + white-space: nowrap; + border: 0; +} + +.index-module__sr-only-focusable__3MxNf:active, +.index-module__sr-only-focusable__3MxNf:focus { + position: static; + width: auto; + height: auto; + overflow: visible; + clip: auto; + white-space: normal; +} + +.index-module__shadow-sm__xdpcj { + box-shadow: 0 0.125rem 0.25rem rgba(0, 0, 0, 0.075) !important; +} + +.index-module__shadow__zNlgF { + box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15) !important; +} + +.index-module__shadow-lg__3tMpx { + box-shadow: 0 1rem 3rem rgba(0, 0, 0, 0.175) !important; +} + +.index-module__shadow-none__3XTEz { + box-shadow: none !important; +} + +.index-module__w-25__3Ky3f { + width: 25% !important; +} + +.index-module__w-50___jH8R { + width: 50% !important; +} + +.index-module__w-75__1gEeF { + width: 75% !important; +} + +.index-module__w-100__1CQ4t { + width: 100% !important; +} + +.index-module__w-auto__1Nmo7 { + width: auto !important; +} + +.index-module__h-25__1AqXI { + height: 25% !important; +} + +.index-module__h-50__36dGq { + height: 50% !important; +} + +.index-module__h-75__dmFFp { + height: 75% !important; +} + +.index-module__h-100__1vS0I { + height: 100% !important; +} + +.index-module__h-auto__2l9Zr { + height: auto !important; +} + +.index-module__mw-100__2WQ1C { + max-width: 100% !important; +} + +.index-module__mh-100__Szyu- { + max-height: 100% !important; +} + +.index-module__min-vw-100__1rHjv { + min-width: 100vw !important; +} + +.index-module__min-vh-100__fNIrY { + min-height: 100vh !important; +} + +.index-module__vw-100__dhfVX { + width: 100vw !important; +} + +.index-module__vh-100__1l6Oa { + height: 100vh !important; +} + +.index-module__stretched-link__YNqTs::after { + position: absolute; + top: 0; + right: 0; + bottom: 0; + left: 0; + z-index: 1; + pointer-events: auto; + content: ''; + background-color: rgba(0, 0, 0, 0); +} + +.index-module__m-0__3Bg6F { + margin: 0 !important; +} + +.index-module__mt-0__27bpg, +.index-module__my-0__2wjB_ { + margin-top: 0 !important; +} + +.index-module__mr-0__-mY-V, +.index-module__mx-0__nf3Oa { + margin-right: 0 !important; +} + +.index-module__mb-0__1Xfp4, +.index-module__my-0__2wjB_ { + margin-bottom: 0 !important; +} + +.index-module__ml-0__1vuq_, +.index-module__mx-0__nf3Oa { + margin-left: 0 !important; +} + +.index-module__m-1__3N_AO { + margin: 0.25rem !important; +} + +.index-module__mt-1__UOfnZ, +.index-module__my-1__2vIKj { + margin-top: 0.25rem !important; +} + +.index-module__mr-1__ScRhc, +.index-module__mx-1__2ahHv { + margin-right: 0.25rem !important; +} + +.index-module__mb-1__mJEqk, +.index-module__my-1__2vIKj { + margin-bottom: 0.25rem !important; +} + +.index-module__ml-1__1nlqW, +.index-module__mx-1__2ahHv { + margin-left: 0.25rem !important; +} + +.index-module__m-2__2SBpn { + margin: 0.5rem !important; +} + +.index-module__mt-2__xxQYp, +.index-module__my-2__CMVC9 { + margin-top: 0.5rem !important; +} + +.index-module__mr-2__16QXx, +.index-module__mx-2__2K4C7 { + margin-right: 0.5rem !important; +} + +.index-module__mb-2__30dJ-, +.index-module__my-2__CMVC9 { + margin-bottom: 0.5rem !important; +} + +.index-module__ml-2__GCQY5, +.index-module__mx-2__2K4C7 { + margin-left: 0.5rem !important; +} + +.index-module__m-3__73S80 { + margin: 1rem !important; +} + +.index-module__mt-3__3oY2q, +.index-module__my-3__1HVMW { + margin-top: 1rem !important; +} + +.index-module__mr-3__1-dNe, +.index-module__mx-3__wfPc3 { + margin-right: 1rem !important; +} + +.index-module__mb-3__27Icc, +.index-module__my-3__1HVMW { + margin-bottom: 1rem !important; +} + +.index-module__ml-3__F4qVT, +.index-module__mx-3__wfPc3 { + margin-left: 1rem !important; +} + +.index-module__m-4__1sF0p { + margin: 1.5rem !important; +} + +.index-module__mt-4__3boPd, +.index-module__my-4__2Z3iO { + margin-top: 1.5rem !important; +} + +.index-module__mr-4__2wQ8M, +.index-module__mx-4__10rTx { + margin-right: 1.5rem !important; +} + +.index-module__mb-4__3GkHJ, +.index-module__my-4__2Z3iO { + margin-bottom: 1.5rem !important; +} + +.index-module__ml-4__gQwnv, +.index-module__mx-4__10rTx { + margin-left: 1.5rem !important; +} + +.index-module__m-5__o9vyd { + margin: 3rem !important; +} + +.index-module__mt-5__FgDSC, +.index-module__my-5__1GaRc { + margin-top: 3rem !important; +} + +.index-module__mr-5__22MnS, +.index-module__mx-5__21F_v { + margin-right: 3rem !important; +} + +.index-module__mb-5__28_jw, +.index-module__my-5__1GaRc { + margin-bottom: 3rem !important; +} + +.index-module__ml-5__L28BX, +.index-module__mx-5__21F_v { + margin-left: 3rem !important; +} + +.index-module__p-0__3Q0fl { + padding: 0 !important; +} + +.index-module__pt-0__1YRFC, +.index-module__py-0__28r0a { + padding-top: 0 !important; +} + +.index-module__pr-0__1mw5I, +.index-module__px-0__2jMKp { + padding-right: 0 !important; +} + +.index-module__pb-0__SMGwc, +.index-module__py-0__28r0a { + padding-bottom: 0 !important; +} + +.index-module__pl-0__ttynt, +.index-module__px-0__2jMKp { + padding-left: 0 !important; +} + +.index-module__p-1__16jwj { + padding: 0.25rem !important; +} + +.index-module__pt-1__33TEj, +.index-module__py-1__1sGR7 { + padding-top: 0.25rem !important; +} + +.index-module__pr-1__2Pujk, +.index-module__px-1__bBl_O { + padding-right: 0.25rem !important; +} + +.index-module__pb-1__3StZv, +.index-module__py-1__1sGR7 { + padding-bottom: 0.25rem !important; +} + +.index-module__pl-1__pTKa8, +.index-module__px-1__bBl_O { + padding-left: 0.25rem !important; +} + +.index-module__p-2__cN3ho { + padding: 0.5rem !important; +} + +.index-module__pt-2__EVSE3, +.index-module__py-2__2Yebw { + padding-top: 0.5rem !important; +} + +.index-module__pr-2__gtAKV, +.index-module__px-2__2_M5u { + padding-right: 0.5rem !important; +} + +.index-module__pb-2__2Bj9S, +.index-module__py-2__2Yebw { + padding-bottom: 0.5rem !important; +} + +.index-module__pl-2__2OxRa, +.index-module__px-2__2_M5u { + padding-left: 0.5rem !important; +} + +.index-module__p-3__3WCcC { + padding: 1rem !important; +} + +.index-module__pt-3__3YKqE, +.index-module__py-3__IzPwi { + padding-top: 1rem !important; +} + +.index-module__pr-3__32OrT, +.index-module__px-3__1VWr6 { + padding-right: 1rem !important; +} + +.index-module__pb-3__2K-7M, +.index-module__py-3__IzPwi { + padding-bottom: 1rem !important; +} + +.index-module__pl-3__29nIA, +.index-module__px-3__1VWr6 { + padding-left: 1rem !important; +} + +.index-module__p-4__1iy78 { + padding: 1.5rem !important; +} + +.index-module__pt-4__3ps9a, +.index-module__py-4__ceYxD { + padding-top: 1.5rem !important; +} + +.index-module__pr-4__3pIXG, +.index-module__px-4__jBFWx { + padding-right: 1.5rem !important; +} + +.index-module__pb-4__3Xf0V, +.index-module__py-4__ceYxD { + padding-bottom: 1.5rem !important; +} + +.index-module__pl-4__iCMoO, +.index-module__px-4__jBFWx { + padding-left: 1.5rem !important; +} + +.index-module__p-5__2R6jq { + padding: 3rem !important; +} + +.index-module__pt-5__J3MKH, +.index-module__py-5__2wGce { + padding-top: 3rem !important; +} + +.index-module__pr-5__29xN7, +.index-module__px-5__2j1jE { + padding-right: 3rem !important; +} + +.index-module__pb-5__3FtU_, +.index-module__py-5__2wGce { + padding-bottom: 3rem !important; +} + +.index-module__pl-5__MkEO2, +.index-module__px-5__2j1jE { + padding-left: 3rem !important; +} + +.index-module__m-n1__3cNmb { + margin: -0.25rem !important; +} + +.index-module__mt-n1__bzEMB, +.index-module__my-n1__kz_uY { + margin-top: -0.25rem !important; +} + +.index-module__mr-n1__1NHNL, +.index-module__mx-n1__14Riz { + margin-right: -0.25rem !important; +} + +.index-module__mb-n1__2COD5, +.index-module__my-n1__kz_uY { + margin-bottom: -0.25rem !important; +} + +.index-module__ml-n1__2wM_8, +.index-module__mx-n1__14Riz { + margin-left: -0.25rem !important; +} + +.index-module__m-n2__1VzlW { + margin: -0.5rem !important; +} + +.index-module__mt-n2___XoWx, +.index-module__my-n2__29vLf { + margin-top: -0.5rem !important; +} + +.index-module__mr-n2__w_PMi, +.index-module__mx-n2__bNnbe { + margin-right: -0.5rem !important; +} + +.index-module__mb-n2__1WNYR, +.index-module__my-n2__29vLf { + margin-bottom: -0.5rem !important; +} + +.index-module__ml-n2__3xsEF, +.index-module__mx-n2__bNnbe { + margin-left: -0.5rem !important; +} + +.index-module__m-n3__uO8Ib { + margin: -1rem !important; +} + +.index-module__mt-n3__1_4sQ, +.index-module__my-n3__3U460 { + margin-top: -1rem !important; +} + +.index-module__mr-n3__2VgEm, +.index-module__mx-n3__1UFaP { + margin-right: -1rem !important; +} + +.index-module__mb-n3__19RHK, +.index-module__my-n3__3U460 { + margin-bottom: -1rem !important; +} + +.index-module__ml-n3__1sXdk, +.index-module__mx-n3__1UFaP { + margin-left: -1rem !important; +} + +.index-module__m-n4__2YT-u { + margin: -1.5rem !important; +} + +.index-module__mt-n4__2ipXo, +.index-module__my-n4__2L3wJ { + margin-top: -1.5rem !important; +} + +.index-module__mr-n4__3SiU_, +.index-module__mx-n4__a3ZmA { + margin-right: -1.5rem !important; +} + +.index-module__mb-n4__36HfO, +.index-module__my-n4__2L3wJ { + margin-bottom: -1.5rem !important; +} + +.index-module__ml-n4__s3pL9, +.index-module__mx-n4__a3ZmA { + margin-left: -1.5rem !important; +} + +.index-module__m-n5__1zXc2 { + margin: -3rem !important; +} + +.index-module__mt-n5__quEl_, +.index-module__my-n5__3fVUd { + margin-top: -3rem !important; +} + +.index-module__mr-n5__2oiUc, +.index-module__mx-n5__qePd- { + margin-right: -3rem !important; +} + +.index-module__mb-n5__L4Uae, +.index-module__my-n5__3fVUd { + margin-bottom: -3rem !important; +} + +.index-module__ml-n5__2DqqR, +.index-module__mx-n5__qePd- { + margin-left: -3rem !important; +} + +.index-module__m-auto__dI9nI { + margin: auto !important; +} + +.index-module__mt-auto__3XA8C, +.index-module__my-auto__187En { + margin-top: auto !important; +} + +.index-module__mr-auto__27KoY, +.index-module__mx-auto__17mnR { + margin-right: auto !important; +} + +.index-module__mb-auto__2H255, +.index-module__my-auto__187En { + margin-bottom: auto !important; +} + +.index-module__ml-auto__1REk7, +.index-module__mx-auto__17mnR { + margin-left: auto !important; +} + +@media (min-width: 576px) { + .index-module__m-sm-0__UOxaM { + margin: 0 !important; + } + .index-module__mt-sm-0__2gQ0K, + .index-module__my-sm-0__2SUDn { + margin-top: 0 !important; + } + .index-module__mr-sm-0__Q12to, + .index-module__mx-sm-0__20vT3 { + margin-right: 0 !important; + } + .index-module__mb-sm-0__OOHPy, + .index-module__my-sm-0__2SUDn { + margin-bottom: 0 !important; + } + .index-module__ml-sm-0__AUKWP, + .index-module__mx-sm-0__20vT3 { + margin-left: 0 !important; + } + .index-module__m-sm-1__1MxFe { + margin: 0.25rem !important; + } + .index-module__mt-sm-1__yWOGf, + .index-module__my-sm-1__2N-jx { + margin-top: 0.25rem !important; + } + .index-module__mr-sm-1__3tnYj, + .index-module__mx-sm-1__36U93 { + margin-right: 0.25rem !important; + } + .index-module__mb-sm-1__102ZE, + .index-module__my-sm-1__2N-jx { + margin-bottom: 0.25rem !important; + } + .index-module__ml-sm-1__p0t6e, + .index-module__mx-sm-1__36U93 { + margin-left: 0.25rem !important; + } + .index-module__m-sm-2__3pD_1 { + margin: 0.5rem !important; + } + .index-module__mt-sm-2__2zgHD, + .index-module__my-sm-2__xuzYd { + margin-top: 0.5rem !important; + } + .index-module__mr-sm-2__2da9W, + .index-module__mx-sm-2__2NmZs { + margin-right: 0.5rem !important; + } + .index-module__mb-sm-2__3a934, + .index-module__my-sm-2__xuzYd { + margin-bottom: 0.5rem !important; + } + .index-module__ml-sm-2__39sBO, + .index-module__mx-sm-2__2NmZs { + margin-left: 0.5rem !important; + } + .index-module__m-sm-3__1Jrdt { + margin: 1rem !important; + } + .index-module__mt-sm-3__295No, + .index-module__my-sm-3__W0MlH { + margin-top: 1rem !important; + } + .index-module__mr-sm-3__3Jts6, + .index-module__mx-sm-3__17DH5 { + margin-right: 1rem !important; + } + .index-module__mb-sm-3__3ghuC, + .index-module__my-sm-3__W0MlH { + margin-bottom: 1rem !important; + } + .index-module__ml-sm-3__1tCRJ, + .index-module__mx-sm-3__17DH5 { + margin-left: 1rem !important; + } + .index-module__m-sm-4__3B-ju { + margin: 1.5rem !important; + } + .index-module__mt-sm-4__1XjzN, + .index-module__my-sm-4__gbDxr { + margin-top: 1.5rem !important; + } + .index-module__mr-sm-4__2431H, + .index-module__mx-sm-4__1Ge7E { + margin-right: 1.5rem !important; + } + .index-module__mb-sm-4__2IiqN, + .index-module__my-sm-4__gbDxr { + margin-bottom: 1.5rem !important; + } + .index-module__ml-sm-4__1Z5su, + .index-module__mx-sm-4__1Ge7E { + margin-left: 1.5rem !important; + } + .index-module__m-sm-5__10iDU { + margin: 3rem !important; + } + .index-module__mt-sm-5__1x0ic, + .index-module__my-sm-5__xKhQ3 { + margin-top: 3rem !important; + } + .index-module__mr-sm-5__OeP5h, + .index-module__mx-sm-5__1tR-u { + margin-right: 3rem !important; + } + .index-module__mb-sm-5__21BXm, + .index-module__my-sm-5__xKhQ3 { + margin-bottom: 3rem !important; + } + .index-module__ml-sm-5__14mlm, + .index-module__mx-sm-5__1tR-u { + margin-left: 3rem !important; + } + .index-module__p-sm-0___dVPi { + padding: 0 !important; + } + .index-module__pt-sm-0__3GUOK, + .index-module__py-sm-0__14r0T { + padding-top: 0 !important; + } + .index-module__pr-sm-0__2AHr-, + .index-module__px-sm-0__2JGxn { + padding-right: 0 !important; + } + .index-module__pb-sm-0__2mgJa, + .index-module__py-sm-0__14r0T { + padding-bottom: 0 !important; + } + .index-module__pl-sm-0__3jbjV, + .index-module__px-sm-0__2JGxn { + padding-left: 0 !important; + } + .index-module__p-sm-1__2EZMF { + padding: 0.25rem !important; + } + .index-module__pt-sm-1__2plGi, + .index-module__py-sm-1__3pnWv { + padding-top: 0.25rem !important; + } + .index-module__pr-sm-1__2L3Ge, + .index-module__px-sm-1__3C-dc { + padding-right: 0.25rem !important; + } + .index-module__pb-sm-1__oigIb, + .index-module__py-sm-1__3pnWv { + padding-bottom: 0.25rem !important; + } + .index-module__pl-sm-1__RVNGg, + .index-module__px-sm-1__3C-dc { + padding-left: 0.25rem !important; + } + .index-module__p-sm-2__1aK5L { + padding: 0.5rem !important; + } + .index-module__pt-sm-2__2GK6S, + .index-module__py-sm-2__tE2NK { + padding-top: 0.5rem !important; + } + .index-module__pr-sm-2__1-AjD, + .index-module__px-sm-2__1KlDf { + padding-right: 0.5rem !important; + } + .index-module__pb-sm-2__aurHt, + .index-module__py-sm-2__tE2NK { + padding-bottom: 0.5rem !important; + } + .index-module__pl-sm-2__1CoNX, + .index-module__px-sm-2__1KlDf { + padding-left: 0.5rem !important; + } + .index-module__p-sm-3__1nWcE { + padding: 1rem !important; + } + .index-module__pt-sm-3__1TSL5, + .index-module__py-sm-3__3cVeT { + padding-top: 1rem !important; + } + .index-module__pr-sm-3__1dCOd, + .index-module__px-sm-3__2g26l { + padding-right: 1rem !important; + } + .index-module__pb-sm-3__PwaR-, + .index-module__py-sm-3__3cVeT { + padding-bottom: 1rem !important; + } + .index-module__pl-sm-3__1aTAU, + .index-module__px-sm-3__2g26l { + padding-left: 1rem !important; + } + .index-module__p-sm-4__3YDMm { + padding: 1.5rem !important; + } + .index-module__pt-sm-4__3iG51, + .index-module__py-sm-4__IsMNy { + padding-top: 1.5rem !important; + } + .index-module__pr-sm-4__QJPK6, + .index-module__px-sm-4__2dKrX { + padding-right: 1.5rem !important; + } + .index-module__pb-sm-4__i-pVm, + .index-module__py-sm-4__IsMNy { + padding-bottom: 1.5rem !important; + } + .index-module__pl-sm-4__2ttje, + .index-module__px-sm-4__2dKrX { + padding-left: 1.5rem !important; + } + .index-module__p-sm-5__1mMmk { + padding: 3rem !important; + } + .index-module__pt-sm-5__GByCK, + .index-module__py-sm-5__1-UnJ { + padding-top: 3rem !important; + } + .index-module__pr-sm-5__2rXQa, + .index-module__px-sm-5__2fC4g { + padding-right: 3rem !important; + } + .index-module__pb-sm-5__2mx_C, + .index-module__py-sm-5__1-UnJ { + padding-bottom: 3rem !important; + } + .index-module__pl-sm-5__e7rD8, + .index-module__px-sm-5__2fC4g { + padding-left: 3rem !important; + } + .index-module__m-sm-n1__3Gp2a { + margin: -0.25rem !important; + } + .index-module__mt-sm-n1__32B7m, + .index-module__my-sm-n1__37rh6 { + margin-top: -0.25rem !important; + } + .index-module__mr-sm-n1__3wbn0, + .index-module__mx-sm-n1__1Z_8O { + margin-right: -0.25rem !important; + } + .index-module__mb-sm-n1__3BhoV, + .index-module__my-sm-n1__37rh6 { + margin-bottom: -0.25rem !important; + } + .index-module__ml-sm-n1__3SjVT, + .index-module__mx-sm-n1__1Z_8O { + margin-left: -0.25rem !important; + } + .index-module__m-sm-n2__1bK2c { + margin: -0.5rem !important; + } + .index-module__mt-sm-n2__3ybVY, + .index-module__my-sm-n2__3HT7k { + margin-top: -0.5rem !important; + } + .index-module__mr-sm-n2__CM7aG, + .index-module__mx-sm-n2__2X9c_ { + margin-right: -0.5rem !important; + } + .index-module__mb-sm-n2__1a1bZ, + .index-module__my-sm-n2__3HT7k { + margin-bottom: -0.5rem !important; + } + .index-module__ml-sm-n2__1zsa8, + .index-module__mx-sm-n2__2X9c_ { + margin-left: -0.5rem !important; + } + .index-module__m-sm-n3__21sAz { + margin: -1rem !important; + } + .index-module__mt-sm-n3__36X8y, + .index-module__my-sm-n3__3-A9I { + margin-top: -1rem !important; + } + .index-module__mr-sm-n3__uuKtu, + .index-module__mx-sm-n3__11Xqy { + margin-right: -1rem !important; + } + .index-module__mb-sm-n3__rPKJx, + .index-module__my-sm-n3__3-A9I { + margin-bottom: -1rem !important; + } + .index-module__ml-sm-n3__5i0H_, + .index-module__mx-sm-n3__11Xqy { + margin-left: -1rem !important; + } + .index-module__m-sm-n4__3i1_p { + margin: -1.5rem !important; + } + .index-module__mt-sm-n4__ebkWf, + .index-module__my-sm-n4__AK50h { + margin-top: -1.5rem !important; + } + .index-module__mr-sm-n4__2k9cY, + .index-module__mx-sm-n4__oiX2h { + margin-right: -1.5rem !important; + } + .index-module__mb-sm-n4__1bf-0, + .index-module__my-sm-n4__AK50h { + margin-bottom: -1.5rem !important; + } + .index-module__ml-sm-n4__2QfZ7, + .index-module__mx-sm-n4__oiX2h { + margin-left: -1.5rem !important; + } + .index-module__m-sm-n5__2dnGS { + margin: -3rem !important; + } + .index-module__mt-sm-n5__rp2Sx, + .index-module__my-sm-n5__As_bH { + margin-top: -3rem !important; + } + .index-module__mr-sm-n5__1TLjR, + .index-module__mx-sm-n5__28a4H { + margin-right: -3rem !important; + } + .index-module__mb-sm-n5__SGM_V, + .index-module__my-sm-n5__As_bH { + margin-bottom: -3rem !important; + } + .index-module__ml-sm-n5__2B5Nx, + .index-module__mx-sm-n5__28a4H { + margin-left: -3rem !important; + } + .index-module__m-sm-auto__285Ue { + margin: auto !important; + } + .index-module__mt-sm-auto__3SY_B, + .index-module__my-sm-auto__3zVYa { + margin-top: auto !important; + } + .index-module__mr-sm-auto__3m1uH, + .index-module__mx-sm-auto__1CsDx { + margin-right: auto !important; + } + .index-module__mb-sm-auto__2H81k, + .index-module__my-sm-auto__3zVYa { + margin-bottom: auto !important; + } + .index-module__ml-sm-auto__3PlBs, + .index-module__mx-sm-auto__1CsDx { + margin-left: auto !important; + } +} + +@media (min-width: 768px) { + .index-module__m-md-0__k6-mR { + margin: 0 !important; + } + .index-module__mt-md-0__1oMw1, + .index-module__my-md-0__2A5vs { + margin-top: 0 !important; + } + .index-module__mr-md-0__2M0kU, + .index-module__mx-md-0__ywKd9 { + margin-right: 0 !important; + } + .index-module__mb-md-0__2u8YT, + .index-module__my-md-0__2A5vs { + margin-bottom: 0 !important; + } + .index-module__ml-md-0__2L6Yu, + .index-module__mx-md-0__ywKd9 { + margin-left: 0 !important; + } + .index-module__m-md-1__1uqMa { + margin: 0.25rem !important; + } + .index-module__mt-md-1__129F4, + .index-module__my-md-1__3rwif { + margin-top: 0.25rem !important; + } + .index-module__mr-md-1__3u0mT, + .index-module__mx-md-1__1M8C6 { + margin-right: 0.25rem !important; + } + .index-module__mb-md-1__1sN4X, + .index-module__my-md-1__3rwif { + margin-bottom: 0.25rem !important; + } + .index-module__ml-md-1__2fkpR, + .index-module__mx-md-1__1M8C6 { + margin-left: 0.25rem !important; + } + .index-module__m-md-2__I8wp7 { + margin: 0.5rem !important; + } + .index-module__mt-md-2__2z8zU, + .index-module__my-md-2__2SI64 { + margin-top: 0.5rem !important; + } + .index-module__mr-md-2__2klLR, + .index-module__mx-md-2__1K3bx { + margin-right: 0.5rem !important; + } + .index-module__mb-md-2__2nkny, + .index-module__my-md-2__2SI64 { + margin-bottom: 0.5rem !important; + } + .index-module__ml-md-2__1oJFk, + .index-module__mx-md-2__1K3bx { + margin-left: 0.5rem !important; + } + .index-module__m-md-3__qO5xs { + margin: 1rem !important; + } + .index-module__mt-md-3__3vyZP, + .index-module__my-md-3__1u3mC { + margin-top: 1rem !important; + } + .index-module__mr-md-3__3UrxW, + .index-module__mx-md-3__4c7OH { + margin-right: 1rem !important; + } + .index-module__mb-md-3__2xpy7, + .index-module__my-md-3__1u3mC { + margin-bottom: 1rem !important; + } + .index-module__ml-md-3__3T_U-, + .index-module__mx-md-3__4c7OH { + margin-left: 1rem !important; + } + .index-module__m-md-4__2thHI { + margin: 1.5rem !important; + } + .index-module__mt-md-4__1kbZo, + .index-module__my-md-4__eNl4L { + margin-top: 1.5rem !important; + } + .index-module__mr-md-4__1GpR2, + .index-module__mx-md-4__eo4A4 { + margin-right: 1.5rem !important; + } + .index-module__mb-md-4__3x-09, + .index-module__my-md-4__eNl4L { + margin-bottom: 1.5rem !important; + } + .index-module__ml-md-4__O02OL, + .index-module__mx-md-4__eo4A4 { + margin-left: 1.5rem !important; + } + .index-module__m-md-5__2KnM2 { + margin: 3rem !important; + } + .index-module__mt-md-5__1Yxze, + .index-module__my-md-5__xamyy { + margin-top: 3rem !important; + } + .index-module__mr-md-5__1t5Mt, + .index-module__mx-md-5__2f8-l { + margin-right: 3rem !important; + } + .index-module__mb-md-5__-AzcE, + .index-module__my-md-5__xamyy { + margin-bottom: 3rem !important; + } + .index-module__ml-md-5__2b3D5, + .index-module__mx-md-5__2f8-l { + margin-left: 3rem !important; + } + .index-module__p-md-0__2891w { + padding: 0 !important; + } + .index-module__pt-md-0__1GMZ7, + .index-module__py-md-0__3tUXv { + padding-top: 0 !important; + } + .index-module__pr-md-0__3rc_C, + .index-module__px-md-0__Q6C4n { + padding-right: 0 !important; + } + .index-module__pb-md-0__3VtR1, + .index-module__py-md-0__3tUXv { + padding-bottom: 0 !important; + } + .index-module__pl-md-0__laFsD, + .index-module__px-md-0__Q6C4n { + padding-left: 0 !important; + } + .index-module__p-md-1__29Rpd { + padding: 0.25rem !important; + } + .index-module__pt-md-1__1JtaW, + .index-module__py-md-1__26upk { + padding-top: 0.25rem !important; + } + .index-module__pr-md-1__3qIBb, + .index-module__px-md-1__1RUQF { + padding-right: 0.25rem !important; + } + .index-module__pb-md-1__1D6nW, + .index-module__py-md-1__26upk { + padding-bottom: 0.25rem !important; + } + .index-module__pl-md-1__2vAf3, + .index-module__px-md-1__1RUQF { + padding-left: 0.25rem !important; + } + .index-module__p-md-2__3S59W { + padding: 0.5rem !important; + } + .index-module__pt-md-2__-QjXC, + .index-module__py-md-2__3p7-Z { + padding-top: 0.5rem !important; + } + .index-module__pr-md-2__2R91o, + .index-module__px-md-2__dt1D- { + padding-right: 0.5rem !important; + } + .index-module__pb-md-2__3dIsl, + .index-module__py-md-2__3p7-Z { + padding-bottom: 0.5rem !important; + } + .index-module__pl-md-2__LYgpO, + .index-module__px-md-2__dt1D- { + padding-left: 0.5rem !important; + } + .index-module__p-md-3__3HJKc { + padding: 1rem !important; + } + .index-module__pt-md-3__W5pI4, + .index-module__py-md-3__2BqnX { + padding-top: 1rem !important; + } + .index-module__pr-md-3__2jRCO, + .index-module__px-md-3__1O5BH { + padding-right: 1rem !important; + } + .index-module__pb-md-3__2O0vh, + .index-module__py-md-3__2BqnX { + padding-bottom: 1rem !important; + } + .index-module__pl-md-3__2CSFh, + .index-module__px-md-3__1O5BH { + padding-left: 1rem !important; + } + .index-module__p-md-4__c7dhP { + padding: 1.5rem !important; + } + .index-module__pt-md-4__27EVY, + .index-module__py-md-4__1BntI { + padding-top: 1.5rem !important; + } + .index-module__pr-md-4__3H38H, + .index-module__px-md-4__o4cnu { + padding-right: 1.5rem !important; + } + .index-module__pb-md-4__26vru, + .index-module__py-md-4__1BntI { + padding-bottom: 1.5rem !important; + } + .index-module__pl-md-4__2s7e8, + .index-module__px-md-4__o4cnu { + padding-left: 1.5rem !important; + } + .index-module__p-md-5__ZrOzJ { + padding: 3rem !important; + } + .index-module__pt-md-5__1TXdP, + .index-module__py-md-5__3zbsn { + padding-top: 3rem !important; + } + .index-module__pr-md-5__1raWv, + .index-module__px-md-5__2biS5 { + padding-right: 3rem !important; + } + .index-module__pb-md-5__qwDUp, + .index-module__py-md-5__3zbsn { + padding-bottom: 3rem !important; + } + .index-module__pl-md-5__3jLp6, + .index-module__px-md-5__2biS5 { + padding-left: 3rem !important; + } + .index-module__m-md-n1__nkxoD { + margin: -0.25rem !important; + } + .index-module__mt-md-n1__DwjNx, + .index-module__my-md-n1__wZZBt { + margin-top: -0.25rem !important; + } + .index-module__mr-md-n1__zON98, + .index-module__mx-md-n1__3UEWe { + margin-right: -0.25rem !important; + } + .index-module__mb-md-n1__1rQzo, + .index-module__my-md-n1__wZZBt { + margin-bottom: -0.25rem !important; + } + .index-module__ml-md-n1__PHLiP, + .index-module__mx-md-n1__3UEWe { + margin-left: -0.25rem !important; + } + .index-module__m-md-n2__3AcDB { + margin: -0.5rem !important; + } + .index-module__mt-md-n2__3TeF-, + .index-module__my-md-n2__dvNVp { + margin-top: -0.5rem !important; + } + .index-module__mr-md-n2__9Qsg5, + .index-module__mx-md-n2__f6FTY { + margin-right: -0.5rem !important; + } + .index-module__mb-md-n2__3Armk, + .index-module__my-md-n2__dvNVp { + margin-bottom: -0.5rem !important; + } + .index-module__ml-md-n2__HEAx8, + .index-module__mx-md-n2__f6FTY { + margin-left: -0.5rem !important; + } + .index-module__m-md-n3__qusyy { + margin: -1rem !important; + } + .index-module__mt-md-n3__3A9X1, + .index-module__my-md-n3__2IL19 { + margin-top: -1rem !important; + } + .index-module__mr-md-n3__3r8Dm, + .index-module__mx-md-n3__t4ZYA { + margin-right: -1rem !important; + } + .index-module__mb-md-n3__3M8Tk, + .index-module__my-md-n3__2IL19 { + margin-bottom: -1rem !important; + } + .index-module__ml-md-n3__1aZyg, + .index-module__mx-md-n3__t4ZYA { + margin-left: -1rem !important; + } + .index-module__m-md-n4__2tW0B { + margin: -1.5rem !important; + } + .index-module__mt-md-n4__3voqs, + .index-module__my-md-n4__Epsfz { + margin-top: -1.5rem !important; + } + .index-module__mr-md-n4__2ZCPw, + .index-module__mx-md-n4__1ni40 { + margin-right: -1.5rem !important; + } + .index-module__mb-md-n4__22vW2, + .index-module__my-md-n4__Epsfz { + margin-bottom: -1.5rem !important; + } + .index-module__ml-md-n4__1SNAt, + .index-module__mx-md-n4__1ni40 { + margin-left: -1.5rem !important; + } + .index-module__m-md-n5__1SQ2K { + margin: -3rem !important; + } + .index-module__mt-md-n5__gpKRF, + .index-module__my-md-n5__3prNT { + margin-top: -3rem !important; + } + .index-module__mr-md-n5__2jncD, + .index-module__mx-md-n5__wgakg { + margin-right: -3rem !important; + } + .index-module__mb-md-n5__3QTky, + .index-module__my-md-n5__3prNT { + margin-bottom: -3rem !important; + } + .index-module__ml-md-n5__bKY0j, + .index-module__mx-md-n5__wgakg { + margin-left: -3rem !important; + } + .index-module__m-md-auto__Fx8Tj { + margin: auto !important; + } + .index-module__mt-md-auto__3UILE, + .index-module__my-md-auto__37_se { + margin-top: auto !important; + } + .index-module__mr-md-auto__3a3Id, + .index-module__mx-md-auto__3eZSL { + margin-right: auto !important; + } + .index-module__mb-md-auto__IQQqh, + .index-module__my-md-auto__37_se { + margin-bottom: auto !important; + } + .index-module__ml-md-auto__2OswT, + .index-module__mx-md-auto__3eZSL { + margin-left: auto !important; + } +} + +@media (min-width: 1050px) { + .index-module__m-lg-0__3T7J6 { + margin: 0 !important; + } + .index-module__mt-lg-0__25ZBB, + .index-module__my-lg-0__1b5Sv { + margin-top: 0 !important; + } + .index-module__mr-lg-0__1riDY, + .index-module__mx-lg-0__2brbT { + margin-right: 0 !important; + } + .index-module__mb-lg-0__1EttO, + .index-module__my-lg-0__1b5Sv { + margin-bottom: 0 !important; + } + .index-module__ml-lg-0__1hR8s, + .index-module__mx-lg-0__2brbT { + margin-left: 0 !important; + } + .index-module__m-lg-1__2LeSK { + margin: 0.25rem !important; + } + .index-module__mt-lg-1__1R9N4, + .index-module__my-lg-1__kCESn { + margin-top: 0.25rem !important; + } + .index-module__mr-lg-1__2sgvZ, + .index-module__mx-lg-1__3VpjD { + margin-right: 0.25rem !important; + } + .index-module__mb-lg-1__37PHX, + .index-module__my-lg-1__kCESn { + margin-bottom: 0.25rem !important; + } + .index-module__ml-lg-1__1larX, + .index-module__mx-lg-1__3VpjD { + margin-left: 0.25rem !important; + } + .index-module__m-lg-2__28Sbd { + margin: 0.5rem !important; + } + .index-module__mt-lg-2__1V-hP, + .index-module__my-lg-2__EL4e_ { + margin-top: 0.5rem !important; + } + .index-module__mr-lg-2__2Yc29, + .index-module__mx-lg-2__38i2l { + margin-right: 0.5rem !important; + } + .index-module__mb-lg-2__2aGYE, + .index-module__my-lg-2__EL4e_ { + margin-bottom: 0.5rem !important; + } + .index-module__ml-lg-2__2LkeK, + .index-module__mx-lg-2__38i2l { + margin-left: 0.5rem !important; + } + .index-module__m-lg-3__1PYJs { + margin: 1rem !important; + } + .index-module__mt-lg-3__1SfOd, + .index-module__my-lg-3__3rwD- { + margin-top: 1rem !important; + } + .index-module__mr-lg-3__15EP3, + .index-module__mx-lg-3__3tlXi { + margin-right: 1rem !important; + } + .index-module__mb-lg-3__3XQYc, + .index-module__my-lg-3__3rwD- { + margin-bottom: 1rem !important; + } + .index-module__ml-lg-3__3iImM, + .index-module__mx-lg-3__3tlXi { + margin-left: 1rem !important; + } + .index-module__m-lg-4__180zk { + margin: 1.5rem !important; + } + .index-module__mt-lg-4__Z0tDD, + .index-module__my-lg-4__1Ox3I { + margin-top: 1.5rem !important; + } + .index-module__mr-lg-4__3GsdM, + .index-module__mx-lg-4__2K7JE { + margin-right: 1.5rem !important; + } + .index-module__mb-lg-4__3dFoL, + .index-module__my-lg-4__1Ox3I { + margin-bottom: 1.5rem !important; + } + .index-module__ml-lg-4__2B7S8, + .index-module__mx-lg-4__2K7JE { + margin-left: 1.5rem !important; + } + .index-module__m-lg-5__35MbW { + margin: 3rem !important; + } + .index-module__mt-lg-5__3xcMv, + .index-module__my-lg-5__oBFUN { + margin-top: 3rem !important; + } + .index-module__mr-lg-5__1Uc5T, + .index-module__mx-lg-5__2dtA0 { + margin-right: 3rem !important; + } + .index-module__mb-lg-5__3z6xv, + .index-module__my-lg-5__oBFUN { + margin-bottom: 3rem !important; + } + .index-module__ml-lg-5__GIRMN, + .index-module__mx-lg-5__2dtA0 { + margin-left: 3rem !important; + } + .index-module__p-lg-0__2x7cr { + padding: 0 !important; + } + .index-module__pt-lg-0__26i0L, + .index-module__py-lg-0__3SXD9 { + padding-top: 0 !important; + } + .index-module__pr-lg-0__MYptK, + .index-module__px-lg-0__2R_EL { + padding-right: 0 !important; + } + .index-module__pb-lg-0__2V-eh, + .index-module__py-lg-0__3SXD9 { + padding-bottom: 0 !important; + } + .index-module__pl-lg-0__3myPS, + .index-module__px-lg-0__2R_EL { + padding-left: 0 !important; + } + .index-module__p-lg-1__1UwKW { + padding: 0.25rem !important; + } + .index-module__pt-lg-1__3U9Xq, + .index-module__py-lg-1__wCoR4 { + padding-top: 0.25rem !important; + } + .index-module__pr-lg-1__1PRZ8, + .index-module__px-lg-1__3eEMr { + padding-right: 0.25rem !important; + } + .index-module__pb-lg-1__uOTWQ, + .index-module__py-lg-1__wCoR4 { + padding-bottom: 0.25rem !important; + } + .index-module__pl-lg-1__gvWko, + .index-module__px-lg-1__3eEMr { + padding-left: 0.25rem !important; + } + .index-module__p-lg-2__yW4Au { + padding: 0.5rem !important; + } + .index-module__pt-lg-2__3OiEl, + .index-module__py-lg-2__2gSIv { + padding-top: 0.5rem !important; + } + .index-module__pr-lg-2__2FpTd, + .index-module__px-lg-2__2g_pD { + padding-right: 0.5rem !important; + } + .index-module__pb-lg-2__1fuq-, + .index-module__py-lg-2__2gSIv { + padding-bottom: 0.5rem !important; + } + .index-module__pl-lg-2__19-hq, + .index-module__px-lg-2__2g_pD { + padding-left: 0.5rem !important; + } + .index-module__p-lg-3__2iNOi { + padding: 1rem !important; + } + .index-module__pt-lg-3__1IrlQ, + .index-module__py-lg-3__3FX7- { + padding-top: 1rem !important; + } + .index-module__pr-lg-3__yWkw4, + .index-module__px-lg-3__3vPvZ { + padding-right: 1rem !important; + } + .index-module__pb-lg-3__X2AZw, + .index-module__py-lg-3__3FX7- { + padding-bottom: 1rem !important; + } + .index-module__pl-lg-3__1Lhro, + .index-module__px-lg-3__3vPvZ { + padding-left: 1rem !important; + } + .index-module__p-lg-4__1VZO7 { + padding: 1.5rem !important; + } + .index-module__pt-lg-4__37k36, + .index-module__py-lg-4__23l1J { + padding-top: 1.5rem !important; + } + .index-module__pr-lg-4__3BCp-, + .index-module__px-lg-4__3ir8a { + padding-right: 1.5rem !important; + } + .index-module__pb-lg-4__2CCGg, + .index-module__py-lg-4__23l1J { + padding-bottom: 1.5rem !important; + } + .index-module__pl-lg-4__3taiG, + .index-module__px-lg-4__3ir8a { + padding-left: 1.5rem !important; + } + .index-module__p-lg-5__JG0e2 { + padding: 3rem !important; + } + .index-module__pt-lg-5__3io5d, + .index-module__py-lg-5__3ULTT { + padding-top: 3rem !important; + } + .index-module__pr-lg-5__3H1Pj, + .index-module__px-lg-5__17GV_ { + padding-right: 3rem !important; + } + .index-module__pb-lg-5__1CtGg, + .index-module__py-lg-5__3ULTT { + padding-bottom: 3rem !important; + } + .index-module__pl-lg-5__3qovR, + .index-module__px-lg-5__17GV_ { + padding-left: 3rem !important; + } + .index-module__m-lg-n1__17lt1 { + margin: -0.25rem !important; + } + .index-module__mt-lg-n1__2Wv8X, + .index-module__my-lg-n1__HqUsr { + margin-top: -0.25rem !important; + } + .index-module__mr-lg-n1__2ykNm, + .index-module__mx-lg-n1__Yc0OX { + margin-right: -0.25rem !important; + } + .index-module__mb-lg-n1__VmbN8, + .index-module__my-lg-n1__HqUsr { + margin-bottom: -0.25rem !important; + } + .index-module__ml-lg-n1__2Aj2M, + .index-module__mx-lg-n1__Yc0OX { + margin-left: -0.25rem !important; + } + .index-module__m-lg-n2__1HU-z { + margin: -0.5rem !important; + } + .index-module__mt-lg-n2__1MCYW, + .index-module__my-lg-n2__18OK2 { + margin-top: -0.5rem !important; + } + .index-module__mr-lg-n2__1Rw-_, + .index-module__mx-lg-n2__SvmZo { + margin-right: -0.5rem !important; + } + .index-module__mb-lg-n2__W7lfv, + .index-module__my-lg-n2__18OK2 { + margin-bottom: -0.5rem !important; + } + .index-module__ml-lg-n2__231O_, + .index-module__mx-lg-n2__SvmZo { + margin-left: -0.5rem !important; + } + .index-module__m-lg-n3__qmMJ6 { + margin: -1rem !important; + } + .index-module__mt-lg-n3__3PtWE, + .index-module__my-lg-n3__3qKZd { + margin-top: -1rem !important; + } + .index-module__mr-lg-n3__2ozPT, + .index-module__mx-lg-n3__3MPI4 { + margin-right: -1rem !important; + } + .index-module__mb-lg-n3__1r3HE, + .index-module__my-lg-n3__3qKZd { + margin-bottom: -1rem !important; + } + .index-module__ml-lg-n3__2RALR, + .index-module__mx-lg-n3__3MPI4 { + margin-left: -1rem !important; + } + .index-module__m-lg-n4__2aDSY { + margin: -1.5rem !important; + } + .index-module__mt-lg-n4__39eZ2, + .index-module__my-lg-n4__CMs-5 { + margin-top: -1.5rem !important; + } + .index-module__mr-lg-n4__1Ggmm, + .index-module__mx-lg-n4__34JLH { + margin-right: -1.5rem !important; + } + .index-module__mb-lg-n4__1ouBW, + .index-module__my-lg-n4__CMs-5 { + margin-bottom: -1.5rem !important; + } + .index-module__ml-lg-n4__r0YL9, + .index-module__mx-lg-n4__34JLH { + margin-left: -1.5rem !important; + } + .index-module__m-lg-n5__Pw0Hb { + margin: -3rem !important; + } + .index-module__mt-lg-n5__3PiR6, + .index-module__my-lg-n5__2NYNI { + margin-top: -3rem !important; + } + .index-module__mr-lg-n5__1RLgJ, + .index-module__mx-lg-n5__etUHt { + margin-right: -3rem !important; + } + .index-module__mb-lg-n5__3VW2-, + .index-module__my-lg-n5__2NYNI { + margin-bottom: -3rem !important; + } + .index-module__ml-lg-n5__FbleI, + .index-module__mx-lg-n5__etUHt { + margin-left: -3rem !important; + } + .index-module__m-lg-auto__2NxP5 { + margin: auto !important; + } + .index-module__mt-lg-auto__1V8a9, + .index-module__my-lg-auto__11YSe { + margin-top: auto !important; + } + .index-module__mr-lg-auto__3niDw, + .index-module__mx-lg-auto__2_6oa { + margin-right: auto !important; + } + .index-module__mb-lg-auto__1vkK1, + .index-module__my-lg-auto__11YSe { + margin-bottom: auto !important; + } + .index-module__ml-lg-auto__pXOTq, + .index-module__mx-lg-auto__2_6oa { + margin-left: auto !important; + } +} + +@media (min-width: 1413px) { + .index-module__m-xl-0__3Gqrr { + margin: 0 !important; + } + .index-module__mt-xl-0__1iy-Y, + .index-module__my-xl-0__2PC1S { + margin-top: 0 !important; + } + .index-module__mr-xl-0__1ZH9J, + .index-module__mx-xl-0__3qTGn { + margin-right: 0 !important; + } + .index-module__mb-xl-0__3DTHu, + .index-module__my-xl-0__2PC1S { + margin-bottom: 0 !important; + } + .index-module__ml-xl-0__3f_2o, + .index-module__mx-xl-0__3qTGn { + margin-left: 0 !important; + } + .index-module__m-xl-1__191yL { + margin: 0.25rem !important; + } + .index-module__mt-xl-1__1diZ-, + .index-module__my-xl-1__1nasP { + margin-top: 0.25rem !important; + } + .index-module__mr-xl-1__1Hdkz, + .index-module__mx-xl-1__j9ocB { + margin-right: 0.25rem !important; + } + .index-module__mb-xl-1__qDH_Q, + .index-module__my-xl-1__1nasP { + margin-bottom: 0.25rem !important; + } + .index-module__ml-xl-1__NMfWb, + .index-module__mx-xl-1__j9ocB { + margin-left: 0.25rem !important; + } + .index-module__m-xl-2__1-64O { + margin: 0.5rem !important; + } + .index-module__mt-xl-2__2rTIS, + .index-module__my-xl-2___baH5 { + margin-top: 0.5rem !important; + } + .index-module__mr-xl-2__3rtZG, + .index-module__mx-xl-2__5bcfp { + margin-right: 0.5rem !important; + } + .index-module__mb-xl-2__3C-4S, + .index-module__my-xl-2___baH5 { + margin-bottom: 0.5rem !important; + } + .index-module__ml-xl-2__amJlf, + .index-module__mx-xl-2__5bcfp { + margin-left: 0.5rem !important; + } + .index-module__m-xl-3__3M9e7 { + margin: 1rem !important; + } + .index-module__mt-xl-3__3_gKw, + .index-module__my-xl-3__ZqHO- { + margin-top: 1rem !important; + } + .index-module__mr-xl-3__3RDKf, + .index-module__mx-xl-3__2YlLZ { + margin-right: 1rem !important; + } + .index-module__mb-xl-3__3UM0-, + .index-module__my-xl-3__ZqHO- { + margin-bottom: 1rem !important; + } + .index-module__ml-xl-3__1mlcO, + .index-module__mx-xl-3__2YlLZ { + margin-left: 1rem !important; + } + .index-module__m-xl-4__3Jgrm { + margin: 1.5rem !important; + } + .index-module__mt-xl-4__3Xkpk, + .index-module__my-xl-4__3BWId { + margin-top: 1.5rem !important; + } + .index-module__mr-xl-4__3sovC, + .index-module__mx-xl-4__2FXVK { + margin-right: 1.5rem !important; + } + .index-module__mb-xl-4__3Qgr7, + .index-module__my-xl-4__3BWId { + margin-bottom: 1.5rem !important; + } + .index-module__ml-xl-4__383Jl, + .index-module__mx-xl-4__2FXVK { + margin-left: 1.5rem !important; + } + .index-module__m-xl-5__yPj32 { + margin: 3rem !important; + } + .index-module__mt-xl-5__1k9NI, + .index-module__my-xl-5__WKMgM { + margin-top: 3rem !important; + } + .index-module__mr-xl-5__3PfiN, + .index-module__mx-xl-5__3IAef { + margin-right: 3rem !important; + } + .index-module__mb-xl-5__2odD5, + .index-module__my-xl-5__WKMgM { + margin-bottom: 3rem !important; + } + .index-module__ml-xl-5__2teD9, + .index-module__mx-xl-5__3IAef { + margin-left: 3rem !important; + } + .index-module__p-xl-0__1d4FO { + padding: 0 !important; + } + .index-module__pt-xl-0__32AIP, + .index-module__py-xl-0__FWpmt { + padding-top: 0 !important; + } + .index-module__pr-xl-0__2SBXj, + .index-module__px-xl-0__2SfmW { + padding-right: 0 !important; + } + .index-module__pb-xl-0__20KgZ, + .index-module__py-xl-0__FWpmt { + padding-bottom: 0 !important; + } + .index-module__pl-xl-0__2Gif4, + .index-module__px-xl-0__2SfmW { + padding-left: 0 !important; + } + .index-module__p-xl-1__1qH2j { + padding: 0.25rem !important; + } + .index-module__pt-xl-1__3bMZl, + .index-module__py-xl-1__qL0Gg { + padding-top: 0.25rem !important; + } + .index-module__pr-xl-1__3eNOZ, + .index-module__px-xl-1__3KSs_ { + padding-right: 0.25rem !important; + } + .index-module__pb-xl-1__2_2Vg, + .index-module__py-xl-1__qL0Gg { + padding-bottom: 0.25rem !important; + } + .index-module__pl-xl-1__3ive0, + .index-module__px-xl-1__3KSs_ { + padding-left: 0.25rem !important; + } + .index-module__p-xl-2__SNtxJ { + padding: 0.5rem !important; + } + .index-module__pt-xl-2__2QVyR, + .index-module__py-xl-2__RvZnJ { + padding-top: 0.5rem !important; + } + .index-module__pr-xl-2__1cCS4, + .index-module__px-xl-2__15Zoi { + padding-right: 0.5rem !important; + } + .index-module__pb-xl-2__1ym5V, + .index-module__py-xl-2__RvZnJ { + padding-bottom: 0.5rem !important; + } + .index-module__pl-xl-2__2S143, + .index-module__px-xl-2__15Zoi { + padding-left: 0.5rem !important; + } + .index-module__p-xl-3__LWU29 { + padding: 1rem !important; + } + .index-module__pt-xl-3__vY-Uh, + .index-module__py-xl-3__gO_A6 { + padding-top: 1rem !important; + } + .index-module__pr-xl-3__5zqXh, + .index-module__px-xl-3__13xDt { + padding-right: 1rem !important; + } + .index-module__pb-xl-3__UBCtI, + .index-module__py-xl-3__gO_A6 { + padding-bottom: 1rem !important; + } + .index-module__pl-xl-3__2aqpE, + .index-module__px-xl-3__13xDt { + padding-left: 1rem !important; + } + .index-module__p-xl-4__p-Hh9 { + padding: 1.5rem !important; + } + .index-module__pt-xl-4__1QNaH, + .index-module__py-xl-4__3tt-J { + padding-top: 1.5rem !important; + } + .index-module__pr-xl-4__eVSHY, + .index-module__px-xl-4__1d0vx { + padding-right: 1.5rem !important; + } + .index-module__pb-xl-4__ZhcQ-, + .index-module__py-xl-4__3tt-J { + padding-bottom: 1.5rem !important; + } + .index-module__pl-xl-4__1shLR, + .index-module__px-xl-4__1d0vx { + padding-left: 1.5rem !important; + } + .index-module__p-xl-5__tIsj4 { + padding: 3rem !important; + } + .index-module__pt-xl-5__ySliu, + .index-module__py-xl-5__3D1lu { + padding-top: 3rem !important; + } + .index-module__pr-xl-5__2Pn8o, + .index-module__px-xl-5__3zY2B { + padding-right: 3rem !important; + } + .index-module__pb-xl-5__36F0Y, + .index-module__py-xl-5__3D1lu { + padding-bottom: 3rem !important; + } + .index-module__pl-xl-5__1xQXN, + .index-module__px-xl-5__3zY2B { + padding-left: 3rem !important; + } + .index-module__m-xl-n1__1bBxe { + margin: -0.25rem !important; + } + .index-module__mt-xl-n1__q2fF_, + .index-module__my-xl-n1__3awq7 { + margin-top: -0.25rem !important; + } + .index-module__mr-xl-n1__OPVGr, + .index-module__mx-xl-n1__1KRsq { + margin-right: -0.25rem !important; + } + .index-module__mb-xl-n1__2hrRo, + .index-module__my-xl-n1__3awq7 { + margin-bottom: -0.25rem !important; + } + .index-module__ml-xl-n1__e960N, + .index-module__mx-xl-n1__1KRsq { + margin-left: -0.25rem !important; + } + .index-module__m-xl-n2__2WByY { + margin: -0.5rem !important; + } + .index-module__mt-xl-n2__1jaUu, + .index-module__my-xl-n2__XEBif { + margin-top: -0.5rem !important; + } + .index-module__mr-xl-n2__2XyrX, + .index-module__mx-xl-n2__3Pd9U { + margin-right: -0.5rem !important; + } + .index-module__mb-xl-n2__1nwzO, + .index-module__my-xl-n2__XEBif { + margin-bottom: -0.5rem !important; + } + .index-module__ml-xl-n2__1ZqbO, + .index-module__mx-xl-n2__3Pd9U { + margin-left: -0.5rem !important; + } + .index-module__m-xl-n3__mx9AY { + margin: -1rem !important; + } + .index-module__mt-xl-n3__2Z8VV, + .index-module__my-xl-n3__2iVzY { + margin-top: -1rem !important; + } + .index-module__mr-xl-n3__1kSTw, + .index-module__mx-xl-n3__1S3cN { + margin-right: -1rem !important; + } + .index-module__mb-xl-n3__xPqFI, + .index-module__my-xl-n3__2iVzY { + margin-bottom: -1rem !important; + } + .index-module__ml-xl-n3__4Mbxg, + .index-module__mx-xl-n3__1S3cN { + margin-left: -1rem !important; + } + .index-module__m-xl-n4__1BPVM { + margin: -1.5rem !important; + } + .index-module__mt-xl-n4__HvJrp, + .index-module__my-xl-n4__2Io7J { + margin-top: -1.5rem !important; + } + .index-module__mr-xl-n4__1PDbI, + .index-module__mx-xl-n4__whjCM { + margin-right: -1.5rem !important; + } + .index-module__mb-xl-n4__emYZx, + .index-module__my-xl-n4__2Io7J { + margin-bottom: -1.5rem !important; + } + .index-module__ml-xl-n4__1rjF_, + .index-module__mx-xl-n4__whjCM { + margin-left: -1.5rem !important; + } + .index-module__m-xl-n5__2QTsr { + margin: -3rem !important; + } + .index-module__mt-xl-n5__3p-mS, + .index-module__my-xl-n5__rPHSb { + margin-top: -3rem !important; + } + .index-module__mr-xl-n5__Q_XT6, + .index-module__mx-xl-n5__39imV { + margin-right: -3rem !important; + } + .index-module__mb-xl-n5__UNne0, + .index-module__my-xl-n5__rPHSb { + margin-bottom: -3rem !important; + } + .index-module__ml-xl-n5__kOh2L, + .index-module__mx-xl-n5__39imV { + margin-left: -3rem !important; + } + .index-module__m-xl-auto__1bgul { + margin: auto !important; + } + .index-module__mt-xl-auto__3ceJb, + .index-module__my-xl-auto__1RaL5 { + margin-top: auto !important; + } + .index-module__mr-xl-auto__hSkNd, + .index-module__mx-xl-auto__OfxLc { + margin-right: auto !important; + } + .index-module__mb-xl-auto__2sj2U, + .index-module__my-xl-auto__1RaL5 { + margin-bottom: auto !important; + } + .index-module__ml-xl-auto__3R4ut, + .index-module__mx-xl-auto__OfxLc { + margin-left: auto !important; + } +} + +.index-module__text-monospace__3ZXs- { + font-family: SFMono-Regular, Menlo, Monaco, Consolas, 'Liberation Mono', + 'Courier New', monospace !important; +} + +.index-module__text-justify__2spY7 { + text-align: justify !important; +} + +.index-module__text-wrap__3Wa1N { + white-space: normal !important; +} + +.index-module__text-nowrap__3xkV3 { + white-space: nowrap !important; +} + +.index-module__text-truncate__22MRW { + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} + +.index-module__text-left__11_ZM { + text-align: left !important; +} + +.index-module__text-right__FqdFY { + text-align: right !important; +} + +.index-module__text-center__3iiMv { + text-align: center !important; +} + +@media (min-width: 576px) { + .index-module__text-sm-left__1pkTf { + text-align: left !important; + } + .index-module__text-sm-right__30jGp { + text-align: right !important; + } + .index-module__text-sm-center__53AB2 { + text-align: center !important; + } +} + +@media (min-width: 768px) { + .index-module__text-md-left__3yZXO { + text-align: left !important; + } + .index-module__text-md-right__3yuQO { + text-align: right !important; + } + .index-module__text-md-center__cEURs { + text-align: center !important; + } +} + +@media (min-width: 1050px) { + .index-module__text-lg-left__2Vfpj { + text-align: left !important; + } + .index-module__text-lg-right__bujyR { + text-align: right !important; + } + .index-module__text-lg-center__1eVzC { + text-align: center !important; + } +} + +@media (min-width: 1413px) { + .index-module__text-xl-left__LKIeb { + text-align: left !important; + } + .index-module__text-xl-right__1fk69 { + text-align: right !important; + } + .index-module__text-xl-center__2kKVr { + text-align: center !important; + } +} + +.index-module__text-lowercase__M6z0E { + text-transform: lowercase !important; +} + +.index-module__text-uppercase__1D_mE { + text-transform: uppercase !important; +} + +.index-module__text-capitalize__3ToM5 { + text-transform: capitalize !important; +} + +.index-module__font-weight-light__19Y8d { + font-weight: 300 !important; +} + +.index-module__font-weight-lighter__295eW { + font-weight: lighter !important; +} + +.index-module__font-weight-normal__30d4r { + font-weight: 400 !important; +} + +.index-module__font-weight-bold__gRJLY { + font-weight: 700 !important; +} + +.index-module__font-weight-bolder__1aEyc { + font-weight: bolder !important; +} + +.index-module__font-italic__3-ciA { + font-style: italic !important; +} + +.index-module__text-white__oWH4J { + color: #fff !important; +} + +.index-module__text-primary__2S_iJ { + color: #0968c3 !important; +} + +a.index-module__text-primary__2S_iJ:hover, +a.index-module__text-primary__2S_iJ:focus { + color: #06417a !important; +} + +.index-module__text-secondary__1pubE { + color: #808080 !important; +} + +a.index-module__text-secondary__1pubE:hover, +a.index-module__text-secondary__1pubE:focus { + color: #5a5a5a !important; +} + +.index-module__text-success__3wGJG { + color: #28a745 !important; +} + +a.index-module__text-success__3wGJG:hover, +a.index-module__text-success__3wGJG:focus { + color: #19692c !important; +} + +.index-module__text-info__2prMR { + color: #17a2b8 !important; +} + +a.index-module__text-info__2prMR:hover, +a.index-module__text-info__2prMR:focus { + color: #0f6674 !important; +} + +.index-module__text-warning__2y3LD { + color: #ffc107 !important; +} + +a.index-module__text-warning__2y3LD:hover, +a.index-module__text-warning__2y3LD:focus { + color: #ba8b00 !important; +} + +.index-module__text-danger__3rX-z { + color: #dc3545 !important; +} + +a.index-module__text-danger__3rX-z:hover, +a.index-module__text-danger__3rX-z:focus { + color: #a71d2a !important; +} + +.index-module__text-light__1oIH9 { + color: #f8f9fa !important; +} + +a.index-module__text-light__1oIH9:hover, +a.index-module__text-light__1oIH9:focus { + color: #cbd3da !important; +} + +.index-module__text-dark__12Db9 { + color: #343a40 !important; +} + +a.index-module__text-dark__12Db9:hover, +a.index-module__text-dark__12Db9:focus { + color: #121416 !important; +} + +.index-module__text-body__12vhI { + color: #212529 !important; +} + +.index-module__text-muted__1fgqt { + color: #6c757d !important; +} + +.index-module__text-black-50__1a8Py { + color: rgba(0, 0, 0, 0.5) !important; +} + +.index-module__text-white-50__2Fg8k { + color: rgba(255, 255, 255, 0.5) !important; +} + +.index-module__text-hide__1wLlz { + font: 0/0 a; + color: transparent; + text-shadow: none; + background-color: transparent; + border: 0; +} + +.index-module__text-decoration-none__PrbYu { + text-decoration: none !important; +} + +.index-module__text-break__1BJUB { + word-break: break-word !important; + overflow-wrap: break-word !important; +} + +.index-module__text-reset__2ZOg1 { + color: inherit !important; +} + +.index-module__visible__26FEw { + visibility: visible !important; +} + +.index-module__invisible__7u005 { + visibility: hidden !important; +} + +@media print { + *, + *::before, + *::after { + text-shadow: none !important; + box-shadow: none !important; + } + a:not(.index-module__btn__1Pcdf) { + text-decoration: underline; + } + abbr[title]::after { + content: ' (' attr(title) ')'; + } + pre { + white-space: pre-wrap !important; + } + pre, + blockquote { + border: 1px solid #adb5bd; + page-break-inside: avoid; + } + thead { + display: table-header-group; + } + tr, + img { + page-break-inside: avoid; + } + p, + h2, + h3 { + orphans: 3; + widows: 3; + } + h2, + h3 { + page-break-after: avoid; + } + @page { + size: a3; + } + body { + min-width: 1050px !important; + } + .index-module__container__wQ7Ga { + min-width: 1050px !important; + } + .index-module__navbar__38ZzD { + display: none; + } + .index-module__badge__3XyDs { + border: 1px solid #000; + } + .index-module__table__2mYYw { + border-collapse: collapse !important; + } + .index-module__table__2mYYw td, + .index-module__table__2mYYw th { + background-color: #fff !important; + } + .index-module__table-bordered__19nzh th, + .index-module__table-bordered__19nzh td { + border: 1px solid #dee2e6 !important; + } + .index-module__table-dark__xEdoZ { + color: inherit; + } + .index-module__table-dark__xEdoZ th, + .index-module__table-dark__xEdoZ td, + .index-module__table-dark__xEdoZ thead th, + .index-module__table-dark__xEdoZ tbody + tbody { + border-color: #dee2e6; + } + .index-module__table__2mYYw .index-module__thead-dark__wbYfA th { + color: inherit; + border-color: #dee2e6; + } +} + +/* Overwrite the bootstrap defaults */ +.index-module__btnLinkText__3tE8k:hover { + cursor: pointer; +} + +.index-module__linkOutText__2nCIa { + color: #0968c3; + cursor: pointer; +} +.index-module__linkOutText__2nCIa:hover { + text-decoration: underline; +} + +.index-module__biggerText__3874w { + font-size: 1.2rem; +} + +.btn.index-module__actionButton__AF_0N { + border: 1px solid #d3d3d3; + background-color: white; + border-radius: 0.5rem; + width: 100%; + font-size: 1.2rem; +} + +.RRT__tab { + z-index: 0 !important; +} + +.rc-tooltip-inner { + max-width: 300px; +} +.rc-tooltip { + opacity: 1 !important; +} +.oncokb-search-overlay { + .rc-tooltip-inner { + max-width: 320px !important; + } +} + +.rc-tooltip.rc-tooltip-zoom-enter, +.rc-tooltip.rc-tooltip-zoom-leave { + display: block; +} +.rc-tooltip-zoom-enter, +.rc-tooltip-zoom-appear { + opacity: 0; + animation-duration: 0.3s; + animation-fill-mode: both; + animation-timing-function: cubic-bezier(0.18, 0.89, 0.32, 1.28); + animation-play-state: paused; +} +.rc-tooltip-zoom-leave { + animation-duration: 0.3s; + animation-fill-mode: both; + animation-timing-function: cubic-bezier(0.6, -0.3, 0.74, 0.05); + animation-play-state: paused; +} +.rc-tooltip-zoom-enter.rc-tooltip-zoom-enter-active, +.rc-tooltip-zoom-appear.rc-tooltip-zoom-appear-active { + animation-name: rcToolTipZoomIn; + animation-play-state: running; +} +.rc-tooltip-zoom-leave.rc-tooltip-zoom-leave-active { + animation-name: rcToolTipZoomOut; + animation-play-state: running; +} +@keyframes rcToolTipZoomIn { + 0% { + opacity: 0; + transform-origin: 50% 50%; + transform: scale(0, 0); + } + 100% { + opacity: 1; + transform-origin: 50% 50%; + transform: scale(1, 1); + } +} +@keyframes rcToolTipZoomOut { + 0% { + opacity: 1; + transform-origin: 50% 50%; + transform: scale(1, 1); + } + 100% { + opacity: 0; + transform-origin: 50% 50%; + transform: scale(0, 0); + } +} +.rc-tooltip { + position: absolute; + z-index: 1070; + display: block; + visibility: visible; + font-size: 12px; + line-height: 1.5; + opacity: 0.9; +} +.rc-tooltip-hidden { + display: none; +} +.rc-tooltip-placement-top, +.rc-tooltip-placement-topLeft, +.rc-tooltip-placement-topRight { + padding: 5px 0 9px 0; +} +.rc-tooltip-placement-right, +.rc-tooltip-placement-rightTop, +.rc-tooltip-placement-rightBottom { + padding: 0 5px 0 9px; +} +.rc-tooltip-placement-bottom, +.rc-tooltip-placement-bottomLeft, +.rc-tooltip-placement-bottomRight { + padding: 9px 0 5px 0; +} +.rc-tooltip-placement-left, +.rc-tooltip-placement-leftTop, +.rc-tooltip-placement-leftBottom { + padding: 0 9px 0 5px; +} +.rc-tooltip-inner { + padding: 8px 10px; + color: #fff; + text-align: left; + text-decoration: none; + background-color: #373737; + border-radius: 6px; + box-shadow: 0 0 4px rgba(0, 0, 0, 0.17); + min-height: 34px; +} +.rc-tooltip-arrow { + position: absolute; + width: 0; + height: 0; + border-color: transparent; + border-style: solid; +} +.rc-tooltip-placement-top .rc-tooltip-arrow, +.rc-tooltip-placement-topLeft .rc-tooltip-arrow, +.rc-tooltip-placement-topRight .rc-tooltip-arrow { + bottom: 4px; + margin-left: -5px; + border-width: 5px 5px 0; + border-top-color: #373737; +} +.rc-tooltip-placement-top .rc-tooltip-arrow { + left: 50%; +} +.rc-tooltip-placement-topLeft .rc-tooltip-arrow { + left: 15%; +} +.rc-tooltip-placement-topRight .rc-tooltip-arrow { + right: 15%; +} +.rc-tooltip-placement-right .rc-tooltip-arrow, +.rc-tooltip-placement-rightTop .rc-tooltip-arrow, +.rc-tooltip-placement-rightBottom .rc-tooltip-arrow { + left: 4px; + margin-top: -5px; + border-width: 5px 5px 5px 0; + border-right-color: #373737; +} +.rc-tooltip-placement-right .rc-tooltip-arrow { + top: 50%; +} +.rc-tooltip-placement-rightTop .rc-tooltip-arrow { + top: 15%; + margin-top: 0; +} +.rc-tooltip-placement-rightBottom .rc-tooltip-arrow { + bottom: 15%; +} +.rc-tooltip-placement-left .rc-tooltip-arrow, +.rc-tooltip-placement-leftTop .rc-tooltip-arrow, +.rc-tooltip-placement-leftBottom .rc-tooltip-arrow { + right: 4px; + margin-top: -5px; + border-width: 5px 0 5px 5px; + border-left-color: #373737; +} +.rc-tooltip-placement-left .rc-tooltip-arrow { + top: 50%; +} +.rc-tooltip-placement-leftTop .rc-tooltip-arrow { + top: 15%; + margin-top: 0; +} +.rc-tooltip-placement-leftBottom .rc-tooltip-arrow { + bottom: 15%; +} +.rc-tooltip-placement-bottom .rc-tooltip-arrow, +.rc-tooltip-placement-bottomLeft .rc-tooltip-arrow, +.rc-tooltip-placement-bottomRight .rc-tooltip-arrow { + top: 4px; + margin-left: -5px; + border-width: 0 5px 5px; + border-bottom-color: #373737; +} +.rc-tooltip-placement-bottom .rc-tooltip-arrow { + left: 50%; +} +.rc-tooltip-placement-bottomLeft .rc-tooltip-arrow { + left: 15%; +} +.rc-tooltip-placement-bottomRight .rc-tooltip-arrow { + right: 15%; +} + +.rc-tooltip.rc-tooltip-zoom-enter, +.rc-tooltip.rc-tooltip-zoom-leave { + display: block; +} +.rc-tooltip-zoom-enter, +.rc-tooltip-zoom-appear { + opacity: 0; + animation-duration: 0.3s; + animation-fill-mode: both; + animation-timing-function: cubic-bezier(0.18, 0.89, 0.32, 1.28); + animation-play-state: paused; +} +.rc-tooltip-zoom-leave { + animation-duration: 0.3s; + animation-fill-mode: both; + animation-timing-function: cubic-bezier(0.6, -0.3, 0.74, 0.05); + animation-play-state: paused; +} +.rc-tooltip-zoom-enter.rc-tooltip-zoom-enter-active, +.rc-tooltip-zoom-appear.rc-tooltip-zoom-appear-active { + animation-name: rcToolTipZoomIn; + animation-play-state: running; +} +.rc-tooltip-zoom-leave.rc-tooltip-zoom-leave-active { + animation-name: rcToolTipZoomOut; + animation-play-state: running; +} +@keyframes rcToolTipZoomIn { + 0% { + opacity: 0; + transform-origin: 50% 50%; + transform: scale(0, 0); + } + 100% { + opacity: 1; + transform-origin: 50% 50%; + transform: scale(1, 1); + } +} +@keyframes rcToolTipZoomOut { + 0% { + opacity: 1; + transform-origin: 50% 50%; + transform: scale(1, 1); + } + 100% { + opacity: 0; + transform-origin: 50% 50%; + transform: scale(0, 0); + } +} +.rc-tooltip { + position: absolute; + z-index: 1070; + display: block; + visibility: visible; + line-height: 1.5; + font-size: 12px; + background-color: rgba(0, 0, 0, 0.05); + padding: 1px; + opacity: 0.9; +} +.rc-tooltip-hidden { + display: none; +} +.rc-tooltip-inner { + padding: 8px 10px; + color: #333333; + text-align: left; + text-decoration: none; + background-color: #ffffff; + border-radius: 3px; + min-height: 34px; + border: 1px solid #b1b1b1; +} +.rc-tooltip-arrow, +.rc-tooltip-arrow-inner { + position: absolute; + width: 0; + height: 0; + border-color: transparent; + border-style: solid; +} +.rc-tooltip-placement-top .rc-tooltip-arrow, +.rc-tooltip-placement-topLeft .rc-tooltip-arrow, +.rc-tooltip-placement-topRight .rc-tooltip-arrow { + bottom: -5px; + margin-left: -6px; + border-width: 6px 6px 0; + border-top-color: #b1b1b1; +} +.rc-tooltip-placement-top .rc-tooltip-arrow-inner, +.rc-tooltip-placement-topLeft .rc-tooltip-arrow-inner, +.rc-tooltip-placement-topRight .rc-tooltip-arrow-inner { + bottom: 1px; + margin-left: -6px; + border-width: 6px 6px 0; + border-top-color: #ffffff; +} +.rc-tooltip-placement-top .rc-tooltip-arrow { + left: 50%; +} +.rc-tooltip-placement-topLeft .rc-tooltip-arrow { + left: 15%; +} +.rc-tooltip-placement-topRight .rc-tooltip-arrow { + right: 15%; +} +.rc-tooltip-placement-right .rc-tooltip-arrow, +.rc-tooltip-placement-rightTop .rc-tooltip-arrow, +.rc-tooltip-placement-rightBottom .rc-tooltip-arrow { + left: -5px; + margin-top: -6px; + border-width: 6px 6px 6px 0; + border-right-color: #b1b1b1; +} +.rc-tooltip-placement-right .rc-tooltip-arrow-inner, +.rc-tooltip-placement-rightTop .rc-tooltip-arrow-inner, +.rc-tooltip-placement-rightBottom .rc-tooltip-arrow-inner { + left: 1px; + margin-top: -6px; + border-width: 6px 6px 6px 0; + border-right-color: #ffffff; +} +.rc-tooltip-placement-right .rc-tooltip-arrow { + top: 50%; +} +.rc-tooltip-placement-rightTop .rc-tooltip-arrow { + top: 15%; + margin-top: 0; +} +.rc-tooltip-placement-rightBottom .rc-tooltip-arrow { + bottom: 15%; +} +.rc-tooltip-placement-left .rc-tooltip-arrow, +.rc-tooltip-placement-leftTop .rc-tooltip-arrow, +.rc-tooltip-placement-leftBottom .rc-tooltip-arrow { + right: -5px; + margin-top: -6px; + border-width: 6px 0 6px 6px; + border-left-color: #b1b1b1; +} +.rc-tooltip-placement-left .rc-tooltip-arrow-inner, +.rc-tooltip-placement-leftTop .rc-tooltip-arrow-inner, +.rc-tooltip-placement-leftBottom .rc-tooltip-arrow-inner { + right: 1px; + margin-top: -6px; + border-width: 6px 0 6px 6px; + border-left-color: #ffffff; +} +.rc-tooltip-placement-left .rc-tooltip-arrow { + top: 50%; +} +.rc-tooltip-placement-leftTop .rc-tooltip-arrow { + top: 15%; + margin-top: 0; +} +.rc-tooltip-placement-leftBottom .rc-tooltip-arrow { + bottom: 15%; +} +.rc-tooltip-placement-bottom .rc-tooltip-arrow, +.rc-tooltip-placement-bottomLeft .rc-tooltip-arrow, +.rc-tooltip-placement-bottomRight .rc-tooltip-arrow { + top: -5px; + margin-left: -6px; + border-width: 0 6px 6px; + border-bottom-color: #b1b1b1; +} +.rc-tooltip-placement-bottom .rc-tooltip-arrow-inner, +.rc-tooltip-placement-bottomLeft .rc-tooltip-arrow-inner, +.rc-tooltip-placement-bottomRight .rc-tooltip-arrow-inner { + top: 1px; + margin-left: -6px; + border-width: 0 6px 6px; + border-bottom-color: #ffffff; +} +.rc-tooltip-placement-bottom .rc-tooltip-arrow { + left: 50%; +} +.rc-tooltip-placement-bottomLeft .rc-tooltip-arrow { + left: 15%; +} +.rc-tooltip-placement-bottomRight .rc-tooltip-arrow { + right: 15%; +} diff --git a/src/main/webapp/app/components/annotationVisualization/tabs/Tab.tsx b/src/main/webapp/app/components/annotationVisualization/tabs/Tab.tsx new file mode 100644 index 000000000..38efb9870 --- /dev/null +++ b/src/main/webapp/app/components/annotationVisualization/tabs/Tab.tsx @@ -0,0 +1,13 @@ +import React from 'react'; + +export interface TabProps { + eventKey: string; + title: React.ReactNode; + children: React.ReactNode; +} + +const Tab: React.FC = ({ children }) => { + return
{children}
; +}; + +export default Tab; diff --git a/src/main/webapp/app/components/annotationVisualization/tabs/TabNumbers.tsx b/src/main/webapp/app/components/annotationVisualization/tabs/TabNumbers.tsx new file mode 100644 index 000000000..8b68b7ecf --- /dev/null +++ b/src/main/webapp/app/components/annotationVisualization/tabs/TabNumbers.tsx @@ -0,0 +1,37 @@ +import React from 'react'; +import './styles.scss'; + +export interface TabNumbersProps { + number: number; + title: string; +} + +class TabNumbers extends React.Component { + getWidth(num: number): string { + if (num < 100) { + return '1.4rem'; + } else if (num >= 100 && num < 1000) { + return '1.6rem'; + } else { + return '2rem'; + } + } + + render(): JSX.Element { + const { number, title } = this.props; + const alterationCountStyle = { + width: this.getWidth(number), + }; + + return ( +
+
{title}
+
+ {number > 1000 ? '1000+' : number} +
+
+ ); + } +} + +export default TabNumbers; diff --git a/src/main/webapp/app/components/annotationVisualization/tabs/Tabs.tsx b/src/main/webapp/app/components/annotationVisualization/tabs/Tabs.tsx new file mode 100644 index 000000000..20fdd7e05 --- /dev/null +++ b/src/main/webapp/app/components/annotationVisualization/tabs/Tabs.tsx @@ -0,0 +1,175 @@ +import React, { useState, ReactElement } from 'react'; +import { TabProps } from './Tab'; +import './styles.scss'; +import Notifications from './../notifications/notifications'; +import { + APIResponse, + NotificationImplication, + PatientInfo, +} from '../config/constants'; +import { COLOR_BLUE } from 'app/config/theme'; +import { generatePDF } from '../config/utils'; +import { Drug } from 'app/shared/api/generated/OncoKbAPI'; +// import { responses } from './../../config/APIResponse'; + +interface TabsProps { + children: ReactElement[]; + defaultActiveKey: string; + id?: string; + className?: string; + lastUpdate?: string; + dataVersion?: string; + notifications?: NotificationImplication[]; + bgColor?: string; + patientInfo: PatientInfo; + responseList: APIResponse[]; +} + +const Tabs: React.FC = ({ + children, + defaultActiveKey, + id, + className, + lastUpdate, + dataVersion, + notifications, + bgColor, + patientInfo, + responseList, +}) => { + const [activeKey, setActiveKey] = useState(defaultActiveKey); + + const handleTabClick = (key: string) => { + setActiveKey(key); + }; + + const handleDownloadClick = () => { + try { + const data = [ + { + col1: 'Sample ID', + col2: patientInfo.patientId || 'NA', + col3: 'Gender', + col4: 'Male', + }, + { + col1: 'Age', + col2: '48', + col3: 'Date of Report', + col4: lastUpdate || 'NA', + }, + ]; + + const processedData = responseList.map(response => ({ + gene: response.query.hugoSymbol || 'NA', + mutation: response.query.alteration || 'NA', + oncogenicity: response.oncogenic || 'NA', + level: response.highestSensitiveLevel || 'NA', + biologicalEffect: response.mutationEffect.knownEffect || 'NA', + tumorType: response.query.tumorType || 'NA', + alterationType: response.query.alterationType || 'NA', + })); + const processedTreatmentData = responseList.map(response => ({ + biomarker: + response['query']['hugoSymbol'] && response['query']['alteration'] + ? `${response['query']['hugoSymbol']} ${response['query']['alteration']}` + : 'NA', + drugNames: response['treatments'] + ? (response['treatments'][0]?.drugs || []) + .map( + (drug: Drug) => + ` ${drug['drugName']} (${ + response['treatments'][0]['level'].length > 6 + ? response['treatments'][0]['level'].slice(6) + : 'NA' + })` + ) + .filter(Boolean) + : ['NA'], + annotation: + response['geneSummary'] || + response['variantSummary'] || + response['tumorTypeSummary'] + ? `${response['geneSummary'] || ''} ${ + response['variantSummary'] || '' + } ${response['tumorTypeSummary'] || ''}` + : 'NA', + alterationType: response.query.alterationType || 'NA', + level: response['treatments'] ? response['treatments'][0]?.level : 'NA', + })); + + const treatmentsMap = new Map(); + + processedTreatmentData.forEach(response => { + const biomarkerKey = `${response.biomarker}-${response.level}`; + + if (treatmentsMap.has(biomarkerKey)) { + const existingEntry = treatmentsMap.get(biomarkerKey); + if (existingEntry) { + const existingDrugs = new Set(existingEntry.drugNames.split(', ')); + response.drugNames.forEach(drug => existingDrugs.add(drug)); + existingEntry.drugNames = Array.from(existingDrugs).join(', '); + } + } else { + treatmentsMap.set(biomarkerKey, { + biomarker: response.biomarker, + drugNames: Array.from(new Set(response.drugNames)).join(', '), + annotation: response.annotation, + alterationType: response.alterationType, + level: response.level, + }); + } + }); + generatePDF(data, processedData, processedTreatmentData); + } catch (error) { + console.error('Error downloading PDF:', error); + } + }; + + return ( +
+
+
+ {React.Children.map(children, child => ( +
handleTabClick(child.props.eventKey)} + style={{ backgroundColor: bgColor, color: 'black' }} + > + {child.props.title} +
+ ))} +
+
+
+
Annotation based on {dataVersion}
+
Updated on {lastUpdate}
+
+
+ +
+
+ +
+
+
+
+ {React.Children.map(children, child => + child.props.eventKey === activeKey ? child.props.children : null + )} +
+
+ ); +}; + +export default Tabs; diff --git a/src/main/webapp/app/components/annotationVisualization/tabs/styles.scss b/src/main/webapp/app/components/annotationVisualization/tabs/styles.scss new file mode 100644 index 000000000..6f334e59b --- /dev/null +++ b/src/main/webapp/app/components/annotationVisualization/tabs/styles.scss @@ -0,0 +1,100 @@ +@import '../../../variables.scss'; + +.oncokb-tab-headers { + display: flex; + justify-content: space-between; + align-items: center; + position: relative; + border-bottom: 2px solid $light-grey; + width: 100%; + .oncokb-tab-header-left { + display: flex; + justify-content: flex-start; + align-items: center; + flex-direction: row; + background-color: #f4f5f5; + color: $light-grey !important; + .header-left-child { + display: flex; + padding: 1rem; + cursor: pointer; + flex-direction: row; + + &.active { + z-index: 1; + font-weight: bold; + border-bottom: 2px solid $oncokb-blue; + color: black !important; + } + + &:not(.active) { + border-bottom: 2px solid transparent; + } + } + } + + .oncokb-tab-header-right { + display: flex; + justify-content: flex-end; + align-items: center; + flex-direction: row; + + & > * { + margin-right: 1rem; + + &:last-child { + margin-right: 0; + } + } + } +} + +.oncokb-tab-content { + padding: 0 0.5rem; +} + +.oncokb-tab-numbers { + display: flex; + flex-direction: row; + align-items: center; + + h6 { + margin: 0; + } + + .oncokb-alteration-count { + width: 1.4rem; + line-height: 1rem; + border-radius: 50%; + text-align: center; + background-color: $light-grey; + color: #000; + display: flex; + justify-content: center; + margin-left: 10px; + overflow: hidden; + font-size: 0.6rem; + white-space: nowrap; + font-weight: bold; + + &.width-16 { + width: 1.6rem; + } + + &.width-20 { + width: 2rem; + } + } +} + +.data-info { + display: flex; + flex-direction: column; + font-weight: bold; + font-size: 0.7rem; +} + +.fa-download-color { + color: $oncokb-blue; + cursor: pointer; +} diff --git a/src/main/webapp/app/components/public/logo.png b/src/main/webapp/app/components/public/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..81b76c79655a4cfb162a422157251e1655f3cd6b GIT binary patch literal 3815 zcmeHJ=QrG4*ZyHJMmIz^LPU$+#UyGBMxW@xjNV1`a_b4f5Q!3H5Cl;}BwB*e%OHrB zXhC$*BD%-@@%`}r1J8Qa+Gk&D?{%(q?Q`~*E8aj)lN!PX0RVtn3!!dwjre~LnB+R& zxxf7{fSgoxRRG|9GUYj%^t$G@Lm24-K=5q7z)9Y5m8UXl-1HgtY04Qbx0JC>a zlc5p-5X~4MQ5siQR~&wX|HXgV4_vQxYCC29di^=RMta5o5jVm!HZ{MhrGM(z0Yt() zvUKE#S|@4vf1gO@;S>6!{=2C8eZ)f+^+H1O)sgh+n`r-w>;Ka z&G2-C@5SE03KKbp6m06hH3y$Iy3%TpaZ&y;k(0dNx2#p&#S08w&q;*Q(NqWGNI4PL z1%)@l{0RUUUq8Tjok-weK-_hc+*eCigM5LMg_#VBG+;;u07#dXx(X_AX7klJ zJV=!S1QwyVrL4ME5Y3`qoKR|}V!-${Vv3G&EBMCNBc<=#u#jc>A-U|Zy1HrVlOG|i zL)rVYxj}xC57vU9$d)*+S_PugB8!Mi-&ILSUh2LptJ0o0cH7)YN)CUyvFZ8}$Zuzoq*Q*T zTJ_X}%+^Et1Mzt8yz}e>K$oD%SITmdmHm-IS*JXoY)l_Fk?sMEOyE-P@6P8rd+A6= zVTaU-h`<;SYyII#{GUUipj@W#zxo1#o{QIX1uzh3oCy9#w)glO&%|RTD#)g_e68Ac-?`vPAxcGS1*@=>H$bk zS9inZWI4vHSqQw}6`}yIH1?;`%e&zPzi&;2zp`CMDz)b;udt#GA4}c?z1eJg?0LBZ2CTqJiL0k{&X99sKG9Mv22KBwxJbs(SKIF>sJ(Piz?r- zF340)HmSe_A?xRo7PIl~{X^Luawv9I%ZbuPOM3<9X(r+Fcd*?FkFR@PquZA6T7CR9 z3ULv|Un>jJGImN)wLg-0M?Y;=%~(g=Wi$R-$h!KyOd>tx??a)qdn2^m+O*ma*_y-k zNg7RB9@??NQDs-X$_>q%FZxYGd#ej2()@SrCc`^L-}dNJby>jmxq76h56C|~&x19u zhL1dx0Q=zBu#;zb-BZuu=T{?LY9sBH!D5a#;FeMlZf&<=%rAy;xc9!YhgJI*#=6wJ zY{pgg;41f%d#0j(KTjI`tv{!+xSZlY6eVB9)^6Xmx){OUbY5JM%t&MNh@vzTs~4u8 zeu%>z)pOHX1ceDyK5xu$M=Fr^VcUNdw%9S#IDmVOwSQq!4)}a-sX!iUw%j0r^FpHSlVUdCwBv}d3eoi{kHpY zqqP{(M~l0%-8{~_ly$?eztDVi_R%}8JGIM&F%N}BdIaL_%|YvY!j`M@kEt^lR6M{= zChC^RZ{*rW0+rw)R->KR@{XY4x*Rcvc;$4a;4CO_xv_Fv00djZbKFQ%j^FD)Q{-K$ z|C@$QEX=FV$l5h?fG6Zbyy`O0p|_o<|4h&OMlV=~|7CBsJq?Siw^Wc2@%M6;nd7k| ztb)xaz2-lg#&aIEhW|AwI%50Idr5eA(*~HAxI09(RMti(d2kN_4(lCYbY2iNcH&qm zkG!qM*YA(*gDFi|gWX_!qG98g$(KDfs`NOuGLXB1O0tclu2)Vfv)qlK5pwos$c));OM&A~BVJERl)sWZ$TnEbs8GDJga! zf0DQ8o#ixP+01jSWcDIlwy3&)%_}~O3V+nFT-@ApZ?biRh_1MLv*l<<)x^ry^FoBZ z+nWtC2Z+ryU6xpbQV;oQJ4D~Q`Bq17+t7%0i&KZRbgkFWo{>YP=D!eZ%|BMRH2PBd z=-FA#5%zh;6JpFq*;~#djU6K3^P1u3=Or%l!?42nZ$|8TdM`hrX&mU5_B~wZFcqN; z{&IusqAbm+;WENGV=KRGB#<|7Rv5{Z(mb-YRN9TsyKeM+eEpSPNwibzQun2!sJ7t%&&3_X?k~CTepQv5~`^J zjEvCmdw7gy{sVl;oy|qC$5Xq5Fqq-JhThvX7nLXMv80G;!zo(V0moWl^WLuCc9YT@ z2`0)_g<#|M?&Qv)I2g$vCqq&kd9(S7g=ecv?u*Jb%%Mv7CJP?r-0pPp_=U{h^u0rw zoQQeGnEHG9kEsO&v35ukK~mu;>mK6nLmF%>G|`Bmuw))>MHxZy2W(V?s#pV+Ccmwj z>nK>0FOvW^Kle1)DsF(fUp-f(yeV*6#e)nJ|M^FUBl3<~b~Ox2Y)bT!FGhU2NV=$# znvd<*>zT!#Wxgg%oR&12Rq+0+%}l|J+r_+m-dzMck|2`IVBg|@(hIJ3$(EwbVMvoA z9aco&KL%$!6QoFN*krVFdTaE%S(Y)4whyqyK4m7#!O=I8OroTOFu%aF3l?Mb{0pQn zm#Pf|Wtzf5%w+*Bp4N;xVKR+`YcRb|#~jf|WWX*3wP{D6kCQL*SDZo6QQiAQG5k9H z5435bW-=WQRLhG0sxk?9w1A=G9^~{m_d^&LaeWCrZZg8@0gTxE>HDEcFl{0+r)nSv z!vx6>Ss#kUK0s;yQ1zHh$PTl|u%PlO%^*VAmdAmY@2YSGsa(on-~pndB6j2=vdfMb zP;1+}wQvaq+L1Vy}{L!jsp%nXPb21Ks$RGYFbJ4GZx3G@+VI5qXa zHsofcE)Mi@#%O96Y5QFvl5oX{wWX5>t1ZYg#Hyh|*k6Y7+*%8nLXjPKMyxwjUS5Ck zl$baJVbIVY-4-jvSXF=1yOAzd7zeicpt0B_1<4qqZ#YfHlO}?y+Kaqd1!INL6jp;e zi^2Ag43u$$P)=LyHe(f`WH*o~mj9N3(z42;0uv;8#vsrlu8l;WA=2sNEl6^%VW1Bd z-x1D;vnkpI-;OOo@DbDEwHa|M#k=yg>I?C%@p!dGhRD^K!tt9NzKI!%cN3FS^*y#J z`p&&xRDUKMv&fVc%b;uf#%5}%fj8shIhk-4!dud}pxznhChvVYi=<>7W|;<6M`Caz z(zKfxWohaax|WTyF?9=7+B1CUm$bJxi85t{#S>jyHR?)8xHyjP)ilb)nw}pLt`YQl z?~+iEYLspIJ66cr(j|Tmr(666lVNGFdhG!*9rSx3Lp@KNRBJvREEKKsMM`Y)RfW20 zA4XTJzPQ-Qex|OLvv#X@sMg7`sASs6xS|PrhhlWzs8P3^r>+Kh?Q!{hHOzeN(Y_9f zc0LZ*07!~U$cl)|h)7DKB&8I^Wfdh9gvBKl#l>G?iA?_w!Nbem#WCprC#;M$Ze9~u z|5Y&da`X*A`#1mr0Rf^eo^DU<(B2NBUOrCQJ4$TVmrR3EX1+$~0B&y|FGm-52X5aW zZwGD{Z(lnA2+Ud9rvg7V5fJFt9~jhHF#`9K6BUt1K|V5axoSCvV-mH@Og^wg_VZKM7JaV+D} literal 0 HcmV?d00001 diff --git a/src/main/webapp/app/config/constants.tsx b/src/main/webapp/app/config/constants.tsx index 0248a0a54..f1813344f 100644 --- a/src/main/webapp/app/config/constants.tsx +++ b/src/main/webapp/app/config/constants.tsx @@ -214,6 +214,7 @@ export enum LEVELS { Fda1 = 'Fda1', Fda2 = 'Fda2', Fda3 = 'Fda3', + NA = 'NA', } export const FDA_LEVELS = [LEVELS.Fda1, LEVELS.Fda2, LEVELS.Fda3]; @@ -290,6 +291,7 @@ export const LEVEL_BUTTON_DESCRIPTION: { [key in LEVELS]: string } = { [LEVELS.Fda1]: 'With CDx', [LEVELS.Fda2]: 'Clinical Significance', [LEVELS.Fda3]: 'Potential Clinical Significance', + [LEVELS.NA]: 'NA', }; export const LEVEL_CLASSIFICATION: { [key in LEVELS]: LEVEL_TYPES } = { @@ -311,6 +313,7 @@ export const LEVEL_CLASSIFICATION: { [key in LEVELS]: LEVEL_TYPES } = { [LEVELS.Fda1]: LEVEL_TYPES.FDA, [LEVELS.Fda2]: LEVEL_TYPES.FDA, [LEVELS.Fda3]: LEVEL_TYPES.FDA, + [LEVELS.NA]: LEVEL_TYPES.TX, }; export const ONCOGENICITY_CLASS_NAMES: { [key in ONCOGENICITY]: string } = { diff --git a/src/main/webapp/app/pages/epic/EpicAnnotate.tsx b/src/main/webapp/app/pages/epic/EpicAnnotate.tsx index 89b86067f..ec9ebbe41 100644 --- a/src/main/webapp/app/pages/epic/EpicAnnotate.tsx +++ b/src/main/webapp/app/pages/epic/EpicAnnotate.tsx @@ -7,6 +7,7 @@ import { PAGE_ROUTE } from 'app/config/constants'; import { useLocation } from 'react-router-dom'; import axios from 'axios'; import client from 'app/shared/api/oncokbClientInstance'; +import { AnnotationVisualisation } from 'app/components/annotationVisualization/AnnotationVisualisation'; interface IEpicAnnotateProps { windowStore: WindowStore; @@ -14,7 +15,9 @@ interface IEpicAnnotateProps { const EpicAnnotate = ({ windowStore }: IEpicAnnotateProps) => { const url = useLocation(); - const [samples, setSamples] = useState(); + const [mutations, setMutations] = useState([]); + const [copyNumberAlterations, setCopyNumberAlterations] = useState([]); + const [structuralVariants, setStructuralVariants] = useState([]); useEffect(() => { const tokenUrl = localStorage.getItem('tokenUrl'); @@ -46,17 +49,55 @@ const EpicAnnotate = ({ windowStore }: IEpicAnnotateProps) => { const token = epicResponse.data; - client.annotateEpicGetUsingGET({ + const response = await client.annotateEpicGetUsingGET({ accessToken: token.access_token, iss, patientId: token.patient, }); + + let newMutations: any[] = []; + let newCopyNumberAlterations: any[] = []; + let newStructuralVariants: any[] = []; + for (const sample of response || []) { + newMutations = newMutations.concat(sample.mutations); + newCopyNumberAlterations = newCopyNumberAlterations.concat( + sample.copyNumberAlterations + ); + newStructuralVariants = newStructuralVariants.concat( + sample.structuralVariants + ); + } + + /* eslint-disable no-console */ + console.log({ + newMutations, + newCopyNumberAlterations, + newStructuralVariants, + }); + + setMutations(newMutations); + setCopyNumberAlterations(newCopyNumberAlterations); + setStructuralVariants(newStructuralVariants); } fetchAccessToken().catch(console.error); }, [url]); - return <>; + return ( + + ); }; export default inject('windowStore')(EpicAnnotate); diff --git a/yarn.lock b/yarn.lock index 0a24eda51..e48a5ca93 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1444,6 +1444,13 @@ dependencies: regenerator-runtime "^0.13.2" +"@babel/runtime@^7.12.5", "@babel/runtime@^7.14.0": + version "7.25.6" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.25.6.tgz#9afc3289f7184d8d7f98b099884c26317b9264d2" + integrity sha512-VBj9MYyDb9tuLq7yzqjgzt6Q+IBQLrGZfdjOekyEirZPHxXWoTSGUTMrpsfi58Up73d13NfYLv8HT9vmznjzhQ== + dependencies: + regenerator-runtime "^0.14.0" + "@babel/runtime@^7.8.4": version "7.11.2" resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.11.2.tgz#f549c13c754cc40b87644b9fa9f09a6a95fe0736" @@ -2403,6 +2410,11 @@ resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.9.0.tgz#2a5fa918786d07d3725726f7f650527e1cfeaffd" integrity sha512-c4zji5CjWv1tJxIZkz1oUtGcdOlsH3aza28Nqmm+uNDWBRHoMsjooBEN4czZp1V3iXPihE/VRUOBqg+4Xq0W4g== +"@types/raf@^3.4.0": + version "3.4.3" + resolved "https://registry.yarnpkg.com/@types/raf/-/raf-3.4.3.tgz#85f1d1d17569b28b8db45e16e996407a56b0ab04" + integrity sha512-c4YAvMedbPZ5tEyxzQdMoOhhJ4RD3rngZIdwC2/qDN3d7JpEhB6fiBRKVY1lg5B7Wk+uPBjn5f39j1/2MY1oOw== + "@types/rc-tooltip@^3.7.1": version "3.7.2" resolved "https://registry.yarnpkg.com/@types/rc-tooltip/-/rc-tooltip-3.7.2.tgz#bbf35284cc1adf6fb61cc49262fd4199ebcc7bff" @@ -4429,6 +4441,11 @@ base64-arraybuffer@^0.2.0: resolved "https://registry.yarnpkg.com/base64-arraybuffer/-/base64-arraybuffer-0.2.0.tgz#4b944fac0191aa5907afe2d8c999ccc57ce80f45" integrity sha512-7emyCsu1/xiBXgQZrscw/8KPRT44I4Yq9Pe6EGs3aPRTsWuggML1/1DTuZUuIaJPIm1FTDUVXl4x/yW8s0kQDQ== +base64-arraybuffer@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/base64-arraybuffer/-/base64-arraybuffer-1.0.2.tgz#1c37589a7c4b0746e34bd1feb951da2df01c1bdc" + integrity sha512-I3yl4r9QB5ZRY3XuJVEPfc2XhZO6YweFPI+UovAzn+8/hb3oJ6lnysaFcjVpkCPfVWFUDvoZ8kmVDP7WyRtYtQ== + base64-js@^1.0.2: version "1.3.1" resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.3.1.tgz#58ece8cb75dd07e71ed08c736abc5fac4dbf8df1" @@ -5086,6 +5103,20 @@ canvg@1.5.3: stackblur-canvas "^1.4.1" xmldom "^0.1.22" +canvg@^3.0.6: + version "3.0.10" + resolved "https://registry.yarnpkg.com/canvg/-/canvg-3.0.10.tgz#8e52a2d088b6ffa23ac78970b2a9eebfae0ef4b3" + integrity sha512-qwR2FRNO9NlzTeKIPIKpnTY6fqwuYSequ8Ru8c0YkYU7U0oW+hLUvWadLvAu1Rl72OMNiFhoLu4f8eUjQ7l/+Q== + dependencies: + "@babel/runtime" "^7.12.5" + "@types/raf" "^3.4.0" + core-js "^3.8.3" + raf "^3.4.1" + regenerator-runtime "^0.13.7" + rgbcolor "^1.0.1" + stackblur-canvas "^2.0.0" + svg-pathdata "^6.0.3" + capture-exit@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/capture-exit/-/capture-exit-2.0.0.tgz#fb953bfaebeb781f62898239dabb426d08a509a4" @@ -5946,6 +5977,11 @@ core-js@^2.4.0, core-js@^2.5.0, core-js@^2.6.5: resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.6.11.tgz#38831469f9922bded8ee21c9dc46985e0399308c" integrity sha512-5wjnpaT/3dV+XB4borEsnAYQchn00XSgTAWKDkEqv+K8KevjbzmofK6hfJ9TZIlpj2N0xQpazy7PiRQiWHqzWg== +core-js@^3.6.0, core-js@^3.8.3: + version "3.38.1" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.38.1.tgz#aa375b79a286a670388a1a363363d53677c0383e" + integrity sha512-OP35aUorbU3Zvlx7pjsFdu1rGNnD4pgw/CWoYzRY3t2EzoVT7shKHY1dlAy3f41cGIO7ZDPQimhGFTlEYkG/Hw== + core-util-is@1.0.2, core-util-is@~1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" @@ -6112,6 +6148,13 @@ css-line-break@1.1.1: dependencies: base64-arraybuffer "^0.2.0" +css-line-break@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/css-line-break/-/css-line-break-2.1.0.tgz#bfef660dfa6f5397ea54116bb3cb4873edbc4fa0" + integrity sha512-FHcKFCZcAha3LwfVBhCQbW2nCNbkZXn7KVUJcsT5/P8YmfsVja0FMPJr0B903j/E69HUphKiV9iQArX8SDYA4w== + dependencies: + utrie "^1.0.2" + css-loader@3.5.3: version "3.5.3" resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-3.5.3.tgz#95ac16468e1adcd95c844729e0bb167639eb0bcf" @@ -6918,6 +6961,11 @@ domhandler@^2.3.0: dependencies: domelementtype "1" +dompurify@^2.2.0: + version "2.5.6" + resolved "https://registry.yarnpkg.com/dompurify/-/dompurify-2.5.6.tgz#8402b501611eaa7fb3786072297fcbe2787f8592" + integrity sha512-zUTaUBO8pY4+iJMPE1B9XlO2tXVYIcEA4SNGtvDELzTSCQO7RzH+j7S180BmhmJId78lqGU2z19vgVx2Sxs/PQ== + domutils@1.5, domutils@1.5.1: version "1.5.1" resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.5.1.tgz#dcd8488a26f563d61079e48c9f7b7e32373682cf" @@ -7402,7 +7450,7 @@ es-to-primitive@^1.2.1: is-date-object "^1.0.1" is-symbol "^1.0.2" -es6-promise@^4.0.3, es6-promise@^4.2.6: +es6-promise@^4.0.3, es6-promise@^4.2.5, es6-promise@^4.2.6: version "4.2.8" resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-4.2.8.tgz#4eb21594c972bc40553d276e510539143db53e0a" integrity sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w== @@ -8025,6 +8073,11 @@ fecha@^2.3.3: resolved "https://registry.yarnpkg.com/fecha/-/fecha-2.3.3.tgz#948e74157df1a32fd1b12c3a3c3cdcb6ec9d96cd" integrity sha512-lUGBnIamTAwk4znq5BcqsDaxSmZ9nDVJaij6NvRt/Tg4R69gERA+otPKbS86ROw9nxVMw2/mp1fnaiWqbs6Sdg== +fflate@^0.4.8: + version "0.4.8" + resolved "https://registry.yarnpkg.com/fflate/-/fflate-0.4.8.tgz#f90b82aefbd8ac174213abb338bd7ef848f0f5ae" + integrity sha512-FJqqoDBR00Mdj9ppamLa/Y7vxm+PRmNWA67N846RvsoYVMKB4q3y/de5PA7gUmRMYK/8CMz2GDZQmCRN1wBcWA== + figgy-pudding@^3.5.1: version "3.5.2" resolved "https://registry.yarnpkg.com/figgy-pudding/-/figgy-pudding-3.5.2.tgz#b4eee8148abb01dcf1d1ac34367d59e12fa61d6e" @@ -9300,6 +9353,14 @@ html-webpack-plugin@4.3.0: tapable "^1.1.3" util.promisify "1.0.0" +html2canvas@^1.0.0, html2canvas@^1.0.0-rc.5: + version "1.4.1" + resolved "https://registry.yarnpkg.com/html2canvas/-/html2canvas-1.4.1.tgz#7cef1888311b5011d507794a066041b14669a543" + integrity sha512-fPU6BHNpsyIhr8yyMpTLLxAbkaK8ArIBcmZIRiBLiDhjeqvXolaEmDGmELFuX9I4xDcaKKcJl+TKZLqruBbmWA== + dependencies: + css-line-break "^2.1.0" + text-segmentation "^1.0.3" + html2canvas@^1.0.0-rc.1: version "1.0.0-rc.5" resolved "https://registry.yarnpkg.com/html2canvas/-/html2canvas-1.0.0-rc.5.tgz#4ee3cac9f6e20a0fa0c2f35a6f99c960ae7ec4c1" @@ -9307,6 +9368,15 @@ html2canvas@^1.0.0-rc.1: dependencies: css-line-break "1.1.1" +html2pdf.js@^0.10.2: + version "0.10.2" + resolved "https://registry.yarnpkg.com/html2pdf.js/-/html2pdf.js-0.10.2.tgz#29c0e4cebf2cbde4ed0c2e8abb98eecac22ff66f" + integrity sha512-WyHVeMb18Bp7vYTmBv1GVsThH//K7SRfHdSdhHPkl4JvyQarNQXnailkYn0QUbRRmnN5rdbbmSIGEsPZtzPy2Q== + dependencies: + es6-promise "^4.2.5" + html2canvas "^1.0.0" + jspdf "^2.3.1" + htmlparser2@3.8.x: version "3.8.3" resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-3.8.3.tgz#996c28b191516a8be86501a7d79757e5c70c1068" @@ -11151,6 +11221,21 @@ jspdf-yworks@^2.1.1: omggif "1.0.9" stackblur-canvas "2.2.0" +jspdf@^2.3.1: + version "2.5.1" + resolved "https://registry.yarnpkg.com/jspdf/-/jspdf-2.5.1.tgz#00c85250abf5447a05f3b32ab9935ab4a56592cc" + integrity sha512-hXObxz7ZqoyhxET78+XR34Xu2qFGrJJ2I2bE5w4SM8eFaFEkW2xcGRVUss360fYelwRSid/jT078kbNvmoW0QA== + dependencies: + "@babel/runtime" "^7.14.0" + atob "^2.1.2" + btoa "^1.2.1" + fflate "^0.4.8" + optionalDependencies: + canvg "^3.0.6" + core-js "^3.6.0" + dompurify "^2.2.0" + html2canvas "^1.0.0-rc.5" + jsprim@^1.2.2: version "1.4.1" resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2" @@ -15481,6 +15566,16 @@ regenerator-runtime@^0.13.4: resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz#cac2dacc8a1ea675feaabaeb8ae833898ae46f55" integrity sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew== +regenerator-runtime@^0.13.7: + version "0.13.11" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz#f6dca3e7ceec20590d07ada785636a90cdca17f9" + integrity sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg== + +regenerator-runtime@^0.14.0: + version "0.14.1" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz#356ade10263f685dda125100cd862c1db895327f" + integrity sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw== + regenerator-transform@^0.10.0: version "0.10.1" resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.10.1.tgz#1e4996837231da8b7f3cf4114d71b5691a0680dd" @@ -16956,6 +17051,11 @@ stackblur-canvas@^1.4.1: resolved "https://registry.yarnpkg.com/stackblur-canvas/-/stackblur-canvas-1.4.1.tgz#849aa6f94b272ff26f6471fa4130ed1f7e47955b" integrity sha1-hJqm+UsnL/JvZHH6QTDtH35HlVs= +stackblur-canvas@^2.0.0: + version "2.7.0" + resolved "https://registry.yarnpkg.com/stackblur-canvas/-/stackblur-canvas-2.7.0.tgz#af931277d0b5096df55e1f91c530043e066989b6" + integrity sha512-yf7OENo23AGJhBriGx0QivY5JP6Y1HbrrDI6WLt6C5auYZXlQrheoY8hD4ibekFKz1HOfE48Ww8kMWMnJD/zcQ== + stackframe@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/stackframe/-/stackframe-1.1.0.tgz#e3fc2eb912259479c9822f7d1f1ff365bd5cbc83" @@ -17411,6 +17511,11 @@ supports-hyperlinks@^2.0.0: has-flag "^4.0.0" supports-color "^7.0.0" +svg-pathdata@^6.0.3: + version "6.0.3" + resolved "https://registry.yarnpkg.com/svg-pathdata/-/svg-pathdata-6.0.3.tgz#80b0e0283b652ccbafb69ad4f8f73e8d3fbf2cac" + integrity sha512-qsjeeq5YjBZ5eMdFuUa4ZosMLxgr5RZ+F+Y1OrDhuOCEInRMA3x74XdBtggJcj9kOeInz0WE+LgCPDkZFlBYJw== + svg2pdf.js@^1.3.3: version "1.5.0" resolved "https://registry.yarnpkg.com/svg2pdf.js/-/svg2pdf.js-1.5.0.tgz#1185adc14568e9b9e0fd7047b2eb6e0a9cfd2c44" @@ -17625,6 +17730,13 @@ text-hex@1.0.x: resolved "https://registry.yarnpkg.com/text-hex/-/text-hex-1.0.0.tgz#69dc9c1b17446ee79a92bf5b884bb4b9127506f5" integrity sha512-uuVGNWzgJ4yhRaNSiubPY7OjISw4sw4E5Uv0wbjp+OzcbmVU/rsT8ujgcXJhn9ypzsgr5vlzpPqP+MBBKcGvbg== +text-segmentation@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/text-segmentation/-/text-segmentation-1.0.3.tgz#52a388159efffe746b24a63ba311b6ac9f2d7943" + integrity sha512-iOiPUo/BGnZ6+54OsWxZidGCsdU8YbE4PSpdPinp7DeMtUJNJBoJ/ouUSTJjHkh1KntHaltHl/gDs2FC4i5+Nw== + dependencies: + utrie "^1.0.2" + text-table@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" @@ -18309,6 +18421,13 @@ utils-merge@1.0.1: resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" integrity sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA== +utrie@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/utrie/-/utrie-1.0.2.tgz#d42fe44de9bc0119c25de7f564a6ed1b2c87a645" + integrity sha512-1MLa5ouZiOmQzUbjbu9VmjLzn1QLXBhwpUa7kdLUQK+KQ5KA9I1vk5U4YHe/X2Ch7PYnJfWuWT+VbuxbGwljhw== + dependencies: + base64-arraybuffer "^1.0.2" + uuid@3.3.2: version "3.3.2" resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.3.2.tgz#1b4af4955eb3077c501c23872fc6513811587131"