From 69871ed65330249d0248204c0bc8082280f2024d Mon Sep 17 00:00:00 2001 From: Mokanarangan Thayaparan Date: Fri, 4 Jun 2021 11:26:56 +0000 Subject: [PATCH 01/25] added graph visualization from file --- probe_ably/service/src/charts/LineChartWidget.js | 12 +++++++----- probe_ably/service/src/stories/Dahsboard.stories.js | 8 ++++++++ probe_ably/service/src/stories/sample.json | 1 + 3 files changed, 16 insertions(+), 5 deletions(-) create mode 100644 probe_ably/service/src/stories/sample.json diff --git a/probe_ably/service/src/charts/LineChartWidget.js b/probe_ably/service/src/charts/LineChartWidget.js index a83ae24..3d5d47d 100644 --- a/probe_ably/service/src/charts/LineChartWidget.js +++ b/probe_ably/service/src/charts/LineChartWidget.js @@ -1,16 +1,17 @@ -import { ResponsiveScatterPlot } from "@nivo/scatterplot"; +import { ResponsiveLine } from '@nivo/line'; import { Button, ButtonGroup, Card, Col, - Row, + Row } from "@themesberg/react-bootstrap"; import { jsPDF } from "jspdf"; import React, { useEffect, useRef } from "react"; import ReactDOM from "react-dom"; import "svg2pdf.js"; + export default (props) => { const { title, probing_data, task_name } = props; const linechartRefs = useRef([]); @@ -61,8 +62,8 @@ export default (props) => { style={{ height: 400 }} className="ct-series-g ct-major-tent" > - { tickRotation: 90, legend: p_data.x_axis, legendPosition: "middle", - format: (value) => value.toExponential(2), + // format: (value) => value, + format: (value) => value < 0.001 || value > 10000 ? value.toExponential(2) : value, legendOffset: 60, }} axisLeft={{ diff --git a/probe_ably/service/src/stories/Dahsboard.stories.js b/probe_ably/service/src/stories/Dahsboard.stories.js index 8c0b109..9bfad2f 100644 --- a/probe_ably/service/src/stories/Dahsboard.stories.js +++ b/probe_ably/service/src/stories/Dahsboard.stories.js @@ -4,6 +4,7 @@ import React from "react"; import "react-datetime/css/react-datetime.css"; import Dashboard from "../pages/dashboard/DashboardOverview"; import "../scss/volt.scss"; +import sampledata from './sample.json'; export default { title: "Dashboard", @@ -306,3 +307,10 @@ MultipleTask.args = { }, ], }; + + + +export const TaskFromJSON = Template.bind({}); + + +TaskFromJSON.args = sampledata diff --git a/probe_ably/service/src/stories/sample.json b/probe_ably/service/src/stories/sample.json new file mode 100644 index 0000000..6ee7a5c --- /dev/null +++ b/probe_ably/service/src/stories/sample.json @@ -0,0 +1 @@ +{"aux_tasks":[{"id":0,"name":"POS Tagging with BERT-base (layers 1, 6 and 12)","probings":[{"model_name":"probe_ably.core.models.linear.LinearModel","probing_results":[{"chart_data":[{"color":"hsl(44, 40%, 70%)","data":[{"x":1.54,"y":0.13},{"x":1.54,"y":0.05},{"x":1.55,"y":0.03},{"x":1.55,"y":0.04},{"x":1.55,"y":0.08},{"x":1.55,"y":0.1},{"x":1.56,"y":0.11},{"x":1.56,"y":0.14},{"x":1.56,"y":0.02},{"x":1.56,"y":0.09},{"x":1.56,"y":0.15},{"x":1.57,"y":0.12},{"x":1.58,"y":0.11},{"x":1.59,"y":0.1},{"x":1.6,"y":0.11},{"x":1.63,"y":0.11},{"x":1.64,"y":0.12},{"x":1.67,"y":0.1},{"x":1.67,"y":0.11},{"x":1.74,"y":0.06},{"x":1.75,"y":0.06},{"x":1.81,"y":0.06},{"x":1.86,"y":0.08},{"x":1.92,"y":0.1},{"x":1.99,"y":0.1},{"x":2.11,"y":0.18},{"x":2.26,"y":0.1},{"x":2.59,"y":0.33},{"x":3.09,"y":0.26},{"x":3.69,"y":0.26},{"x":4.28,"y":0.21},{"x":5.28,"y":0.28},{"x":6.01,"y":0.39},{"x":7.51,"y":0.38},{"x":8.74,"y":0.36},{"x":10.37,"y":0.37},{"x":12.23,"y":0.41},{"x":14.26,"y":0.44},{"x":16.46,"y":0.45},{"x":18.89,"y":0.49},{"x":21.28,"y":0.47},{"x":23.12,"y":0.48},{"x":24.5,"y":0.46},{"x":26.01,"y":0.5},{"x":27.72,"y":0.47},{"x":27.85,"y":0.45},{"x":29.14,"y":0.43},{"x":30.29,"y":0.46},{"x":30.34,"y":0.46},{"x":34.46,"y":0.52}],"id":"BERT-base6"},{"color":"hsl(251, 90%, 40%)","data":[{"x":1.54,"y":0.03},{"x":1.55,"y":0.13},{"x":1.55,"y":0.04},{"x":1.55,"y":0.05},{"x":1.55,"y":0.05},{"x":1.55,"y":0.04},{"x":1.56,"y":0.1},{"x":1.56,"y":0.08},{"x":1.56,"y":0.13},{"x":1.56,"y":0.11},{"x":1.56,"y":0.13},{"x":1.56,"y":0.02},{"x":1.57,"y":0.13},{"x":1.58,"y":0.13},{"x":1.59,"y":0.13},{"x":1.61,"y":0.14},{"x":1.64,"y":0.13},{"x":1.67,"y":0.17},{"x":1.67,"y":0.1},{"x":1.71,"y":0.13},{"x":1.74,"y":0.13},{"x":1.81,"y":0.16},{"x":1.84,"y":0.14},{"x":1.92,"y":0.17},{"x":2.14,"y":0.1},{"x":2.33,"y":0.27},{"x":2.63,"y":0.27},{"x":3.13,"y":0.26},{"x":3.77,"y":0.36},{"x":4.57,"y":0.37},{"x":5.49,"y":0.39},{"x":6.77,"y":0.46},{"x":7.88,"y":0.45},{"x":9.4,"y":0.53},{"x":10.94,"y":0.5},{"x":12.75,"y":0.52},{"x":14.43,"y":0.53},{"x":16.64,"y":0.49},{"x":18.54,"y":0.52},{"x":21.25,"y":0.55},{"x":22.87,"y":0.52},{"x":24.42,"y":0.55},{"x":25.84,"y":0.52},{"x":28.04,"y":0.56},{"x":29.15,"y":0.54},{"x":30.2,"y":0.55},{"x":30.3,"y":0.54},{"x":30.42,"y":0.53},{"x":30.43,"y":0.54},{"x":34.33,"y":0.55}],"id":"BERT-base1"},{"color":"hsl(354, 80%, 80%)","data":[{"x":1.55,"y":0.01},{"x":1.55,"y":0.03},{"x":1.55,"y":0.03},{"x":1.55,"y":0.07},{"x":1.56,"y":0.03},{"x":1.56,"y":0.1},{"x":1.56,"y":0.1},{"x":1.56,"y":0.04},{"x":1.56,"y":0.04},{"x":1.56,"y":0.07},{"x":1.57,"y":0.11},{"x":1.57,"y":0.05},{"x":1.58,"y":0.11},{"x":1.58,"y":0.13},{"x":1.59,"y":0.11},{"x":1.63,"y":0.13},{"x":1.64,"y":0.1},{"x":1.65,"y":0.13},{"x":1.67,"y":0.11},{"x":1.73,"y":0.1},{"x":1.76,"y":0.13},{"x":1.84,"y":0.1},{"x":1.88,"y":0.06},{"x":1.99,"y":0.1},{"x":2.08,"y":0.13},{"x":2.24,"y":0.11},{"x":2.51,"y":0.13},{"x":2.82,"y":0.2},{"x":3.31,"y":0.29},{"x":3.88,"y":0.25},{"x":4.61,"y":0.3},{"x":5.34,"y":0.3},{"x":6.59,"y":0.27},{"x":7.65,"y":0.28},{"x":9.36,"y":0.33},{"x":11.55,"y":0.29},{"x":13.74,"y":0.34},{"x":16.28,"y":0.39},{"x":18.75,"y":0.33},{"x":20.98,"y":0.32},{"x":23.1,"y":0.38},{"x":24.83,"y":0.32},{"x":25.83,"y":0.34},{"x":27.43,"y":0.31},{"x":28.87,"y":0.24},{"x":28.95,"y":0.37},{"x":29.07,"y":0.35},{"x":30.79,"y":0.3},{"x":31.55,"y":0.35},{"x":33.29,"y":0.37}],"id":"BERT-base12"}],"x_axis":"norm","y_axis":"Accuracy"},{"chart_data":[{"color":"hsl(230, 10%, 20%)","data":[{"x":1.54,"y":0.07},{"x":1.54,"y":-0.04},{"x":1.55,"y":0.02},{"x":1.55,"y":0.02},{"x":1.55,"y":0.03},{"x":1.55,"y":-0.01},{"x":1.56,"y":-0.02},{"x":1.56,"y":0.01},{"x":1.56,"y":-0.01},{"x":1.56,"y":0.08},{"x":1.56,"y":0.08},{"x":1.57,"y":0.0},{"x":1.58,"y":-0.02},{"x":1.59,"y":-0.01},{"x":1.6,"y":0.02},{"x":1.63,"y":-0.02},{"x":1.64,"y":0.01},{"x":1.67,"y":-0.03},{"x":1.67,"y":0.02},{"x":1.74,"y":-0.02},{"x":1.75,"y":-0.06},{"x":1.81,"y":-0.01},{"x":1.86,"y":0.02},{"x":1.92,"y":0.03},{"x":1.99,"y":-0.02},{"x":2.11,"y":0.07},{"x":2.26,"y":0.01},{"x":2.59,"y":0.22},{"x":3.09,"y":0.13},{"x":3.69,"y":0.06},{"x":4.28,"y":0.03},{"x":5.28,"y":0.06},{"x":6.01,"y":0.15},{"x":7.51,"y":0.18},{"x":8.74,"y":0.14},{"x":10.37,"y":0.11},{"x":12.23,"y":0.13},{"x":14.26,"y":0.2},{"x":16.46,"y":0.13},{"x":18.89,"y":0.21},{"x":21.28,"y":0.17},{"x":23.12,"y":0.21},{"x":24.5,"y":0.17},{"x":26.01,"y":0.21},{"x":27.72,"y":0.22},{"x":27.85,"y":0.19},{"x":29.14,"y":0.14},{"x":30.29,"y":0.21},{"x":30.34,"y":0.15},{"x":34.46,"y":0.24}],"id":"BERT-base6"},{"color":"hsl(151, 40%, 70%)","data":[{"x":1.54,"y":-0.0},{"x":1.55,"y":0.0},{"x":1.55,"y":-0.05},{"x":1.55,"y":-0.03},{"x":1.55,"y":-0.04},{"x":1.55,"y":-0.03},{"x":1.56,"y":0.04},{"x":1.56,"y":0.02},{"x":1.56,"y":0.01},{"x":1.56,"y":-0.01},{"x":1.56,"y":0.0},{"x":1.56,"y":-0.01},{"x":1.57,"y":0.02},{"x":1.58,"y":0.04},{"x":1.59,"y":0.01},{"x":1.61,"y":0.03},{"x":1.64,"y":0.01},{"x":1.67,"y":0.03},{"x":1.67,"y":-0.03},{"x":1.71,"y":0.07},{"x":1.74,"y":0.01},{"x":1.81,"y":0.05},{"x":1.84,"y":0.04},{"x":1.92,"y":0.05},{"x":2.14,"y":-0.04},{"x":2.33,"y":0.14},{"x":2.63,"y":0.14},{"x":3.13,"y":0.15},{"x":3.77,"y":0.12},{"x":4.57,"y":0.18},{"x":5.49,"y":0.09},{"x":6.77,"y":0.19},{"x":7.88,"y":0.14},{"x":9.4,"y":0.21},{"x":10.94,"y":0.2},{"x":12.75,"y":0.2},{"x":14.43,"y":0.23},{"x":16.64,"y":0.2},{"x":18.54,"y":0.2},{"x":21.25,"y":0.23},{"x":22.87,"y":0.23},{"x":24.42,"y":0.23},{"x":25.84,"y":0.2},{"x":28.04,"y":0.26},{"x":29.15,"y":0.23},{"x":30.2,"y":0.25},{"x":30.3,"y":0.21},{"x":30.42,"y":0.21},{"x":30.43,"y":0.21},{"x":34.33,"y":0.23}],"id":"BERT-base1"},{"color":"hsl(355, 40%, 50%)","data":[{"x":1.55,"y":-0.03},{"x":1.55,"y":-0.02},{"x":1.55,"y":-0.08},{"x":1.55,"y":-0.03},{"x":1.56,"y":0.02},{"x":1.56,"y":-0.02},{"x":1.56,"y":-0.03},{"x":1.56,"y":-0.03},{"x":1.56,"y":-0.02},{"x":1.56,"y":-0.05},{"x":1.57,"y":0.01},{"x":1.57,"y":0.03},{"x":1.58,"y":-0.01},{"x":1.58,"y":0.01},{"x":1.59,"y":-0.01},{"x":1.63,"y":0.02},{"x":1.64,"y":-0.02},{"x":1.65,"y":0.0},{"x":1.67,"y":-0.01},{"x":1.73,"y":0.01},{"x":1.76,"y":-0.01},{"x":1.84,"y":-0.02},{"x":1.88,"y":-0.06},{"x":1.99,"y":-0.02},{"x":2.08,"y":0.01},{"x":2.24,"y":-0.01},{"x":2.51,"y":0.02},{"x":2.82,"y":0.04},{"x":3.31,"y":0.15},{"x":3.88,"y":0.09},{"x":4.61,"y":0.15},{"x":5.34,"y":0.13},{"x":6.59,"y":0.05},{"x":7.65,"y":0.13},{"x":9.36,"y":0.09},{"x":11.55,"y":0.09},{"x":13.74,"y":0.13},{"x":16.28,"y":0.15},{"x":18.75,"y":0.09},{"x":20.98,"y":0.11},{"x":23.1,"y":0.12},{"x":24.83,"y":0.05},{"x":25.83,"y":0.13},{"x":27.43,"y":0.05},{"x":28.87,"y":0.01},{"x":28.95,"y":0.19},{"x":29.07,"y":0.13},{"x":30.79,"y":0.06},{"x":31.55,"y":0.11},{"x":33.29,"y":0.14}],"id":"BERT-base12"}],"x_axis":"norm","y_axis":"Selectivity"}]},{"model_name":"probe_ably.core.models.mlp.MLPModel","probing_results":[{"chart_data":[{"color":"hsl(340, 60%, 80%)","data":[{"x":4.0,"y":0.01},{"x":4.0,"y":0.01},{"x":4.0,"y":0.0},{"x":5.0,"y":0.07},{"x":5.0,"y":0.1},{"x":6.0,"y":0.0},{"x":7.0,"y":0.03},{"x":7.0,"y":0.04},{"x":8.0,"y":0.11},{"x":9.0,"y":0.13},{"x":9.0,"y":0.06},{"x":9.0,"y":0.06},{"x":11.0,"y":0.0},{"x":11.0,"y":0.06},{"x":11.0,"y":0.16},{"x":12.0,"y":0.26},{"x":12.0,"y":0.16},{"x":12.0,"y":0.17},{"x":13.0,"y":0.13},{"x":15.0,"y":0.04},{"x":16.0,"y":0.18},{"x":16.0,"y":0.12},{"x":17.0,"y":0.11},{"x":17.0,"y":0.16},{"x":18.0,"y":0.09},{"x":18.0,"y":0.28},{"x":19.0,"y":0.18},{"x":19.0,"y":0.2},{"x":19.0,"y":0.18},{"x":19.0,"y":0.19},{"x":21.0,"y":0.16},{"x":21.0,"y":0.2},{"x":21.0,"y":0.16},{"x":23.0,"y":0.35},{"x":24.0,"y":0.15},{"x":24.0,"y":0.28},{"x":25.0,"y":0.12},{"x":25.0,"y":0.18},{"x":25.0,"y":0.09},{"x":25.0,"y":0.19},{"x":27.0,"y":0.32},{"x":28.0,"y":0.18},{"x":28.0,"y":0.22},{"x":28.0,"y":0.3},{"x":28.0,"y":0.2},{"x":28.0,"y":0.13},{"x":29.0,"y":0.2},{"x":30.0,"y":0.26},{"x":30.0,"y":0.22},{"x":30.0,"y":0.29}],"id":"BERT-base6"},{"color":"hsl(284, 90%, 60%)","data":[{"x":4.0,"y":0.09},{"x":4.0,"y":0.11},{"x":4.0,"y":0.09},{"x":4.0,"y":0.0},{"x":5.0,"y":0.03},{"x":6.0,"y":0.11},{"x":6.0,"y":0.03},{"x":6.0,"y":0.02},{"x":6.0,"y":0.07},{"x":6.0,"y":0.02},{"x":8.0,"y":0.01},{"x":9.0,"y":0.05},{"x":10.0,"y":0.14},{"x":10.0,"y":0.15},{"x":10.0,"y":0.18},{"x":10.0,"y":0.11},{"x":10.0,"y":0.11},{"x":11.0,"y":0.07},{"x":11.0,"y":0.02},{"x":12.0,"y":0.1},{"x":13.0,"y":0.14},{"x":13.0,"y":0.24},{"x":14.0,"y":0.1},{"x":14.0,"y":0.14},{"x":15.0,"y":0.21},{"x":18.0,"y":0.12},{"x":19.0,"y":0.27},{"x":19.0,"y":0.26},{"x":19.0,"y":0.17},{"x":20.0,"y":0.19},{"x":20.0,"y":0.31},{"x":20.0,"y":0.1},{"x":21.0,"y":0.15},{"x":21.0,"y":0.25},{"x":21.0,"y":0.3},{"x":22.0,"y":0.24},{"x":22.0,"y":0.12},{"x":23.0,"y":0.28},{"x":23.0,"y":0.2},{"x":24.0,"y":0.32},{"x":24.0,"y":0.2},{"x":26.0,"y":0.21},{"x":26.0,"y":0.14},{"x":26.0,"y":0.36},{"x":27.0,"y":0.33},{"x":27.0,"y":0.28},{"x":28.0,"y":0.17},{"x":28.0,"y":0.32},{"x":30.0,"y":0.24},{"x":31.0,"y":0.36}],"id":"BERT-base1"},{"color":"hsl(218, 90%, 60%)","data":[{"x":5.0,"y":0.02},{"x":5.0,"y":0.01},{"x":6.0,"y":0.01},{"x":7.0,"y":0.13},{"x":8.0,"y":0.01},{"x":8.0,"y":0.03},{"x":8.0,"y":0.12},{"x":9.0,"y":0.1},{"x":9.0,"y":0.12},{"x":9.0,"y":0.11},{"x":10.0,"y":0.11},{"x":10.0,"y":0.07},{"x":10.0,"y":0.1},{"x":11.0,"y":0.13},{"x":12.0,"y":0.04},{"x":12.0,"y":0.05},{"x":14.0,"y":0.16},{"x":15.0,"y":0.18},{"x":15.0,"y":0.12},{"x":15.0,"y":0.07},{"x":15.0,"y":0.18},{"x":16.0,"y":0.15},{"x":17.0,"y":0.05},{"x":18.0,"y":0.03},{"x":18.0,"y":0.18},{"x":19.0,"y":0.17},{"x":19.0,"y":0.06},{"x":20.0,"y":0.19},{"x":20.0,"y":0.15},{"x":20.0,"y":0.1},{"x":20.0,"y":0.06},{"x":20.0,"y":0.1},{"x":21.0,"y":0.08},{"x":22.0,"y":0.33},{"x":22.0,"y":0.13},{"x":24.0,"y":0.11},{"x":24.0,"y":0.15},{"x":24.0,"y":0.07},{"x":25.0,"y":0.04},{"x":27.0,"y":0.22},{"x":27.0,"y":0.16},{"x":28.0,"y":0.13},{"x":29.0,"y":0.24},{"x":30.0,"y":0.16},{"x":30.0,"y":0.09},{"x":30.0,"y":0.16},{"x":31.0,"y":0.17},{"x":31.0,"y":0.2},{"x":31.0,"y":0.21},{"x":31.0,"y":0.2}],"id":"BERT-base12"}],"x_axis":"hidden_size","y_axis":"Accuracy"},{"chart_data":[{"color":"hsl(181, 80%, 50%)","data":[{"x":4.0,"y":-0.01},{"x":4.0,"y":-0.01},{"x":4.0,"y":-0.15},{"x":5.0,"y":0.03},{"x":5.0,"y":0.02},{"x":6.0,"y":-0.12},{"x":7.0,"y":-0.05},{"x":7.0,"y":-0.04},{"x":8.0,"y":0.04},{"x":9.0,"y":0.12},{"x":9.0,"y":-0.02},{"x":9.0,"y":-0.06},{"x":11.0,"y":-0.11},{"x":11.0,"y":0.03},{"x":11.0,"y":0.04},{"x":12.0,"y":0.15},{"x":12.0,"y":0.05},{"x":12.0,"y":0.02},{"x":13.0,"y":-0.01},{"x":15.0,"y":-0.04},{"x":16.0,"y":0.09},{"x":16.0,"y":0.06},{"x":17.0,"y":-0.06},{"x":17.0,"y":0.06},{"x":18.0,"y":-0.03},{"x":18.0,"y":0.11},{"x":19.0,"y":0.03},{"x":19.0,"y":0.08},{"x":19.0,"y":0.12},{"x":19.0,"y":0.1},{"x":21.0,"y":-0.01},{"x":21.0,"y":0.03},{"x":21.0,"y":-0.01},{"x":23.0,"y":0.19},{"x":24.0,"y":0.03},{"x":24.0,"y":0.13},{"x":25.0,"y":0.04},{"x":25.0,"y":0.06},{"x":25.0,"y":-0.04},{"x":25.0,"y":0.08},{"x":27.0,"y":0.16},{"x":28.0,"y":0.06},{"x":28.0,"y":0.13},{"x":28.0,"y":0.16},{"x":28.0,"y":0.08},{"x":28.0,"y":0.07},{"x":29.0,"y":0.12},{"x":30.0,"y":0.09},{"x":30.0,"y":0.08},{"x":30.0,"y":0.1}],"id":"BERT-base6"},{"color":"hsl(157, 50%, 40%)","data":[{"x":4.0,"y":0.02},{"x":4.0,"y":0.1},{"x":4.0,"y":-0.01},{"x":4.0,"y":-0.03},{"x":5.0,"y":-0.05},{"x":6.0,"y":0.07},{"x":6.0,"y":-0.12},{"x":6.0,"y":-0.04},{"x":6.0,"y":-0.03},{"x":6.0,"y":-0.03},{"x":8.0,"y":-0.08},{"x":9.0,"y":0.03},{"x":10.0,"y":0.05},{"x":10.0,"y":0.05},{"x":10.0,"y":0.04},{"x":10.0,"y":0.06},{"x":10.0,"y":-0.04},{"x":11.0,"y":0.04},{"x":11.0,"y":-0.03},{"x":12.0,"y":-0.04},{"x":13.0,"y":0.05},{"x":13.0,"y":0.15},{"x":14.0,"y":0.05},{"x":14.0,"y":0.07},{"x":15.0,"y":0.1},{"x":18.0,"y":0.04},{"x":19.0,"y":0.1},{"x":19.0,"y":0.1},{"x":19.0,"y":-0.07},{"x":20.0,"y":0.03},{"x":20.0,"y":0.18},{"x":20.0,"y":-0.05},{"x":21.0,"y":-0.02},{"x":21.0,"y":0.12},{"x":21.0,"y":0.23},{"x":22.0,"y":0.1},{"x":22.0,"y":0.02},{"x":23.0,"y":0.13},{"x":23.0,"y":0.14},{"x":24.0,"y":0.16},{"x":24.0,"y":0.06},{"x":26.0,"y":0.08},{"x":26.0,"y":0.02},{"x":26.0,"y":0.15},{"x":27.0,"y":0.19},{"x":27.0,"y":0.08},{"x":28.0,"y":0.02},{"x":28.0,"y":0.16},{"x":30.0,"y":0.09},{"x":31.0,"y":0.14}],"id":"BERT-base1"},{"color":"hsl(62, 40%, 60%)","data":[{"x":5.0,"y":0.02},{"x":5.0,"y":-0.11},{"x":6.0,"y":-0.06},{"x":7.0,"y":0.11},{"x":8.0,"y":-0.02},{"x":8.0,"y":0.03},{"x":8.0,"y":0.03},{"x":9.0,"y":0.03},{"x":9.0,"y":0.04},{"x":9.0,"y":0.0},{"x":10.0,"y":-0.0},{"x":10.0,"y":0.05},{"x":10.0,"y":-0.01},{"x":11.0,"y":0.04},{"x":12.0,"y":-0.01},{"x":12.0,"y":-0.02},{"x":14.0,"y":0.06},{"x":15.0,"y":0.06},{"x":15.0,"y":0.01},{"x":15.0,"y":-0.05},{"x":15.0,"y":0.11},{"x":16.0,"y":0.0},{"x":17.0,"y":-0.0},{"x":18.0,"y":-0.01},{"x":18.0,"y":0.12},{"x":19.0,"y":0.06},{"x":19.0,"y":-0.0},{"x":20.0,"y":0.07},{"x":20.0,"y":-0.0},{"x":20.0,"y":-0.04},{"x":20.0,"y":0.0},{"x":20.0,"y":-0.02},{"x":21.0,"y":-0.04},{"x":22.0,"y":0.22},{"x":22.0,"y":0.02},{"x":24.0,"y":0.01},{"x":24.0,"y":0.1},{"x":24.0,"y":-0.04},{"x":25.0,"y":-0.02},{"x":27.0,"y":0.07},{"x":27.0,"y":0.08},{"x":28.0,"y":-0.02},{"x":29.0,"y":0.1},{"x":30.0,"y":0.06},{"x":30.0,"y":-0.02},{"x":30.0,"y":0.06},{"x":31.0,"y":0.03},{"x":31.0,"y":0.17},{"x":31.0,"y":0.05},{"x":31.0,"y":0.04}],"id":"BERT-base12"}],"x_axis":"hidden_size","y_axis":"Selectivity"},{"chart_data":[{"color":"hsl(62, 90%, 30%)","data":[{"x":3221,"y":0.01},{"x":3221,"y":0.01},{"x":3221,"y":0.0},{"x":3992,"y":0.07},{"x":3992,"y":0.1},{"x":4815,"y":0.0},{"x":5587,"y":0.03},{"x":5587,"y":0.04},{"x":6413,"y":0.11},{"x":7186,"y":0.13},{"x":7186,"y":0.06},{"x":7186,"y":0.06},{"x":8789,"y":0.0},{"x":8789,"y":0.06},{"x":8789,"y":0.16},{"x":9621,"y":0.26},{"x":9621,"y":0.16},{"x":9621,"y":0.17},{"x":10396,"y":0.13},{"x":12007,"y":0.04},{"x":12845,"y":0.18},{"x":12845,"y":0.12},{"x":13622,"y":0.11},{"x":13622,"y":0.16},{"x":14463,"y":0.09},{"x":14463,"y":0.28},{"x":15241,"y":0.18},{"x":15241,"y":0.2},{"x":15241,"y":0.18},{"x":15241,"y":0.19},{"x":16864,"y":0.16},{"x":16864,"y":0.2},{"x":16864,"y":0.16},{"x":18491,"y":0.35},{"x":19341,"y":0.15},{"x":19341,"y":0.28},{"x":20122,"y":0.12},{"x":20122,"y":0.18},{"x":20122,"y":0.09},{"x":20122,"y":0.19},{"x":21757,"y":0.32},{"x":22613,"y":0.18},{"x":22613,"y":0.22},{"x":22613,"y":0.3},{"x":22613,"y":0.2},{"x":22613,"y":0.13},{"x":23396,"y":0.2},{"x":24255,"y":0.26},{"x":24255,"y":0.22},{"x":24255,"y":0.29}],"id":"BERT-base6"},{"color":"hsl(99, 40%, 80%)","data":[{"x":3221,"y":0.09},{"x":3221,"y":0.11},{"x":3221,"y":0.09},{"x":3221,"y":0.0},{"x":3992,"y":0.03},{"x":4815,"y":0.11},{"x":4815,"y":0.03},{"x":4815,"y":0.02},{"x":4815,"y":0.07},{"x":4815,"y":0.02},{"x":6413,"y":0.01},{"x":7186,"y":0.05},{"x":8015,"y":0.14},{"x":8015,"y":0.15},{"x":8015,"y":0.18},{"x":8015,"y":0.11},{"x":8015,"y":0.11},{"x":8789,"y":0.07},{"x":8789,"y":0.02},{"x":9621,"y":0.1},{"x":10396,"y":0.14},{"x":10396,"y":0.24},{"x":11231,"y":0.1},{"x":11231,"y":0.14},{"x":12007,"y":0.21},{"x":14463,"y":0.12},{"x":15241,"y":0.27},{"x":15241,"y":0.26},{"x":15241,"y":0.17},{"x":16085,"y":0.19},{"x":16085,"y":0.31},{"x":16085,"y":0.1},{"x":16864,"y":0.15},{"x":16864,"y":0.25},{"x":16864,"y":0.3},{"x":17711,"y":0.24},{"x":17711,"y":0.12},{"x":18491,"y":0.28},{"x":18491,"y":0.2},{"x":19341,"y":0.32},{"x":19341,"y":0.2},{"x":20975,"y":0.21},{"x":20975,"y":0.14},{"x":20975,"y":0.36},{"x":21757,"y":0.33},{"x":21757,"y":0.28},{"x":22613,"y":0.17},{"x":22613,"y":0.32},{"x":24255,"y":0.24},{"x":25039,"y":0.36}],"id":"BERT-base1"},{"color":"hsl(142, 90%, 50%)","data":[{"x":3992,"y":0.02},{"x":3992,"y":0.01},{"x":4815,"y":0.01},{"x":5587,"y":0.13},{"x":6413,"y":0.01},{"x":6413,"y":0.03},{"x":6413,"y":0.12},{"x":7186,"y":0.1},{"x":7186,"y":0.12},{"x":7186,"y":0.11},{"x":8015,"y":0.11},{"x":8015,"y":0.07},{"x":8015,"y":0.1},{"x":8789,"y":0.13},{"x":9621,"y":0.04},{"x":9621,"y":0.05},{"x":11231,"y":0.16},{"x":12007,"y":0.18},{"x":12007,"y":0.12},{"x":12007,"y":0.07},{"x":12007,"y":0.18},{"x":12845,"y":0.15},{"x":13622,"y":0.05},{"x":14463,"y":0.03},{"x":14463,"y":0.18},{"x":15241,"y":0.17},{"x":15241,"y":0.06},{"x":16085,"y":0.19},{"x":16085,"y":0.15},{"x":16085,"y":0.1},{"x":16085,"y":0.06},{"x":16085,"y":0.1},{"x":16864,"y":0.08},{"x":17711,"y":0.33},{"x":17711,"y":0.13},{"x":19341,"y":0.11},{"x":19341,"y":0.15},{"x":19341,"y":0.07},{"x":20122,"y":0.04},{"x":21757,"y":0.22},{"x":21757,"y":0.16},{"x":22613,"y":0.13},{"x":23396,"y":0.24},{"x":24255,"y":0.16},{"x":24255,"y":0.09},{"x":24255,"y":0.16},{"x":25039,"y":0.17},{"x":25039,"y":0.2},{"x":25039,"y":0.21},{"x":25039,"y":0.2}],"id":"BERT-base12"}],"x_axis":"nparams","y_axis":"Accuracy"},{"chart_data":[{"color":"hsl(52, 40%, 50%)","data":[{"x":3221,"y":-0.01},{"x":3221,"y":-0.01},{"x":3221,"y":-0.15},{"x":3992,"y":0.03},{"x":3992,"y":0.02},{"x":4815,"y":-0.12},{"x":5587,"y":-0.05},{"x":5587,"y":-0.04},{"x":6413,"y":0.04},{"x":7186,"y":0.12},{"x":7186,"y":-0.02},{"x":7186,"y":-0.06},{"x":8789,"y":-0.11},{"x":8789,"y":0.03},{"x":8789,"y":0.04},{"x":9621,"y":0.15},{"x":9621,"y":0.05},{"x":9621,"y":0.02},{"x":10396,"y":-0.01},{"x":12007,"y":-0.04},{"x":12845,"y":0.09},{"x":12845,"y":0.06},{"x":13622,"y":-0.06},{"x":13622,"y":0.06},{"x":14463,"y":-0.03},{"x":14463,"y":0.11},{"x":15241,"y":0.03},{"x":15241,"y":0.08},{"x":15241,"y":0.12},{"x":15241,"y":0.1},{"x":16864,"y":-0.01},{"x":16864,"y":0.03},{"x":16864,"y":-0.01},{"x":18491,"y":0.19},{"x":19341,"y":0.03},{"x":19341,"y":0.13},{"x":20122,"y":0.04},{"x":20122,"y":0.06},{"x":20122,"y":-0.04},{"x":20122,"y":0.08},{"x":21757,"y":0.16},{"x":22613,"y":0.06},{"x":22613,"y":0.13},{"x":22613,"y":0.16},{"x":22613,"y":0.08},{"x":22613,"y":0.07},{"x":23396,"y":0.12},{"x":24255,"y":0.09},{"x":24255,"y":0.08},{"x":24255,"y":0.1}],"id":"BERT-base6"},{"color":"hsl(117, 60%, 30%)","data":[{"x":3221,"y":0.02},{"x":3221,"y":0.1},{"x":3221,"y":-0.01},{"x":3221,"y":-0.03},{"x":3992,"y":-0.05},{"x":4815,"y":0.07},{"x":4815,"y":-0.12},{"x":4815,"y":-0.04},{"x":4815,"y":-0.03},{"x":4815,"y":-0.03},{"x":6413,"y":-0.08},{"x":7186,"y":0.03},{"x":8015,"y":0.05},{"x":8015,"y":0.05},{"x":8015,"y":0.04},{"x":8015,"y":0.06},{"x":8015,"y":-0.04},{"x":8789,"y":0.04},{"x":8789,"y":-0.03},{"x":9621,"y":-0.04},{"x":10396,"y":0.05},{"x":10396,"y":0.15},{"x":11231,"y":0.05},{"x":11231,"y":0.07},{"x":12007,"y":0.1},{"x":14463,"y":0.04},{"x":15241,"y":0.1},{"x":15241,"y":0.1},{"x":15241,"y":-0.07},{"x":16085,"y":0.03},{"x":16085,"y":0.18},{"x":16085,"y":-0.05},{"x":16864,"y":-0.02},{"x":16864,"y":0.12},{"x":16864,"y":0.23},{"x":17711,"y":0.1},{"x":17711,"y":0.02},{"x":18491,"y":0.13},{"x":18491,"y":0.14},{"x":19341,"y":0.16},{"x":19341,"y":0.06},{"x":20975,"y":0.08},{"x":20975,"y":0.02},{"x":20975,"y":0.15},{"x":21757,"y":0.19},{"x":21757,"y":0.08},{"x":22613,"y":0.02},{"x":22613,"y":0.16},{"x":24255,"y":0.09},{"x":25039,"y":0.14}],"id":"BERT-base1"},{"color":"hsl(155, 10%, 90%)","data":[{"x":3992,"y":0.02},{"x":3992,"y":-0.11},{"x":4815,"y":-0.06},{"x":5587,"y":0.11},{"x":6413,"y":-0.02},{"x":6413,"y":0.03},{"x":6413,"y":0.03},{"x":7186,"y":0.03},{"x":7186,"y":0.04},{"x":7186,"y":0.0},{"x":8015,"y":-0.0},{"x":8015,"y":0.05},{"x":8015,"y":-0.01},{"x":8789,"y":0.04},{"x":9621,"y":-0.01},{"x":9621,"y":-0.02},{"x":11231,"y":0.06},{"x":12007,"y":0.06},{"x":12007,"y":0.01},{"x":12007,"y":-0.05},{"x":12007,"y":0.11},{"x":12845,"y":0.0},{"x":13622,"y":-0.0},{"x":14463,"y":-0.01},{"x":14463,"y":0.12},{"x":15241,"y":0.06},{"x":15241,"y":-0.0},{"x":16085,"y":0.07},{"x":16085,"y":-0.0},{"x":16085,"y":-0.04},{"x":16085,"y":0.0},{"x":16085,"y":-0.02},{"x":16864,"y":-0.04},{"x":17711,"y":0.22},{"x":17711,"y":0.02},{"x":19341,"y":0.01},{"x":19341,"y":0.1},{"x":19341,"y":-0.04},{"x":20122,"y":-0.02},{"x":21757,"y":0.07},{"x":21757,"y":0.08},{"x":22613,"y":-0.02},{"x":23396,"y":0.1},{"x":24255,"y":0.06},{"x":24255,"y":-0.02},{"x":24255,"y":0.06},{"x":25039,"y":0.03},{"x":25039,"y":0.17},{"x":25039,"y":0.05},{"x":25039,"y":0.04}],"id":"BERT-base12"}],"x_axis":"nparams","y_axis":"Selectivity"}]}]},{"id":1,"name":"POS Tagging with Roberta-base (layers 1, 6 and 12)","probings":[{"model_name":"probe_ably.core.models.linear.LinearModel","probing_results":[{"chart_data":[{"color":"hsl(65, 50%, 10%)","data":[{"x":1.53,"y":0.05},{"x":1.54,"y":0.05},{"x":1.54,"y":0.01},{"x":1.55,"y":0.11},{"x":1.55,"y":0.02},{"x":1.55,"y":0.07},{"x":1.55,"y":0.1},{"x":1.56,"y":0.1},{"x":1.56,"y":0.12},{"x":1.56,"y":0.1},{"x":1.56,"y":0.13},{"x":1.56,"y":0.11},{"x":1.58,"y":0.1},{"x":1.59,"y":0.13},{"x":1.6,"y":0.09},{"x":1.62,"y":0.13},{"x":1.66,"y":0.1},{"x":1.69,"y":0.11},{"x":1.7,"y":0.11},{"x":1.74,"y":0.11},{"x":1.77,"y":0.1},{"x":1.8,"y":0.13},{"x":1.87,"y":0.05},{"x":1.91,"y":0.11},{"x":2.02,"y":0.1},{"x":2.08,"y":0.1},{"x":2.17,"y":0.11},{"x":2.36,"y":0.14},{"x":2.61,"y":0.13},{"x":2.99,"y":0.12},{"x":3.4,"y":0.13},{"x":3.97,"y":0.14},{"x":4.66,"y":0.21},{"x":5.76,"y":0.19},{"x":7.06,"y":0.17},{"x":8.53,"y":0.21},{"x":10.14,"y":0.18},{"x":11.23,"y":0.2},{"x":13.36,"y":0.21},{"x":15.87,"y":0.21},{"x":18.1,"y":0.23},{"x":19.85,"y":0.21},{"x":21.89,"y":0.21},{"x":23.53,"y":0.23},{"x":24.57,"y":0.22},{"x":25.68,"y":0.23},{"x":26.94,"y":0.2},{"x":27.95,"y":0.24},{"x":28.58,"y":0.22},{"x":32.96,"y":0.27}],"id":"Roberta-base1"},{"color":"hsl(28, 90%, 50%)","data":[{"x":1.54,"y":0.04},{"x":1.55,"y":0.05},{"x":1.55,"y":0.08},{"x":1.55,"y":0.08},{"x":1.55,"y":0.02},{"x":1.55,"y":0.1},{"x":1.56,"y":0.02},{"x":1.56,"y":0.09},{"x":1.56,"y":0.13},{"x":1.57,"y":0.13},{"x":1.57,"y":0.1},{"x":1.57,"y":0.11},{"x":1.58,"y":0.13},{"x":1.59,"y":0.11},{"x":1.61,"y":0.13},{"x":1.63,"y":0.13},{"x":1.66,"y":0.11},{"x":1.67,"y":0.12},{"x":1.71,"y":0.13},{"x":1.77,"y":0.09},{"x":1.79,"y":0.1},{"x":1.8,"y":0.14},{"x":1.86,"y":0.1},{"x":1.95,"y":0.1},{"x":2.01,"y":0.1},{"x":2.1,"y":0.1},{"x":2.17,"y":0.1},{"x":2.26,"y":0.16},{"x":2.44,"y":0.13},{"x":2.57,"y":0.13},{"x":2.79,"y":0.15},{"x":3.19,"y":0.13},{"x":3.48,"y":0.13},{"x":4.16,"y":0.12},{"x":4.95,"y":0.13},{"x":6.0,"y":0.15},{"x":6.94,"y":0.17},{"x":8.51,"y":0.16},{"x":10.1,"y":0.17},{"x":11.19,"y":0.19},{"x":13.07,"y":0.18},{"x":15.62,"y":0.21},{"x":17.21,"y":0.17},{"x":19.4,"y":0.13},{"x":21.13,"y":0.14},{"x":22.98,"y":0.14},{"x":24.14,"y":0.13},{"x":25.6,"y":0.18},{"x":26.29,"y":0.16},{"x":32.59,"y":0.24}],"id":"Roberta-base6"},{"color":"hsl(358, 30%, 80%)","data":[{"x":1.54,"y":0.03},{"x":1.55,"y":0.01},{"x":1.56,"y":0.1},{"x":1.56,"y":0.05},{"x":1.56,"y":0.02},{"x":1.56,"y":0.05},{"x":1.56,"y":0.11},{"x":1.56,"y":0.06},{"x":1.57,"y":0.1},{"x":1.57,"y":0.11},{"x":1.57,"y":0.03},{"x":1.58,"y":0.1},{"x":1.58,"y":0.13},{"x":1.59,"y":0.11},{"x":1.6,"y":0.1},{"x":1.63,"y":0.11},{"x":1.65,"y":0.11},{"x":1.69,"y":0.11},{"x":1.7,"y":0.13},{"x":1.75,"y":0.13},{"x":1.79,"y":0.11},{"x":1.86,"y":0.13},{"x":1.86,"y":0.11},{"x":1.95,"y":0.11},{"x":2.0,"y":0.1},{"x":2.12,"y":0.11},{"x":2.18,"y":0.12},{"x":2.22,"y":0.11},{"x":2.32,"y":0.11},{"x":2.43,"y":0.13},{"x":2.62,"y":0.13},{"x":3.03,"y":0.13},{"x":3.35,"y":0.15},{"x":3.73,"y":0.15},{"x":4.33,"y":0.11},{"x":4.98,"y":0.17},{"x":6.33,"y":0.13},{"x":7.41,"y":0.19},{"x":8.2,"y":0.16},{"x":10.07,"y":0.17},{"x":11.54,"y":0.16},{"x":13.66,"y":0.16},{"x":15.64,"y":0.19},{"x":17.7,"y":0.14},{"x":19.65,"y":0.16},{"x":21.4,"y":0.18},{"x":23.04,"y":0.18},{"x":24.6,"y":0.19},{"x":25.49,"y":0.14},{"x":31.97,"y":0.19}],"id":"Roberta-base12"}],"x_axis":"norm","y_axis":"Accuracy"},{"chart_data":[{"color":"hsl(53, 10%, 50%)","data":[{"x":1.53,"y":0.03},{"x":1.54,"y":0.02},{"x":1.54,"y":-0.08},{"x":1.55,"y":-0.01},{"x":1.55,"y":-0.0},{"x":1.55,"y":0.01},{"x":1.55,"y":0.02},{"x":1.56,"y":0.07},{"x":1.56,"y":0.07},{"x":1.56,"y":0.04},{"x":1.56,"y":0.0},{"x":1.56,"y":0.0},{"x":1.58,"y":-0.01},{"x":1.59,"y":0.02},{"x":1.6,"y":-0.03},{"x":1.62,"y":0.0},{"x":1.66,"y":0.02},{"x":1.69,"y":-0.01},{"x":1.7,"y":-0.01},{"x":1.74,"y":-0.01},{"x":1.77,"y":-0.01},{"x":1.8,"y":0.02},{"x":1.87,"y":-0.06},{"x":1.91,"y":0.05},{"x":2.02,"y":0.03},{"x":2.08,"y":-0.03},{"x":2.17,"y":0.05},{"x":2.36,"y":0.08},{"x":2.61,"y":0.0},{"x":2.99,"y":-0.01},{"x":3.4,"y":-0.03},{"x":3.97,"y":0.02},{"x":4.66,"y":0.03},{"x":5.76,"y":0.03},{"x":7.06,"y":-0.0},{"x":8.53,"y":0.06},{"x":10.14,"y":0.01},{"x":11.23,"y":0.06},{"x":13.36,"y":0.07},{"x":15.87,"y":0.05},{"x":18.1,"y":0.07},{"x":19.85,"y":0.03},{"x":21.89,"y":0.03},{"x":23.53,"y":0.06},{"x":24.57,"y":0.07},{"x":25.68,"y":0.07},{"x":26.94,"y":0.05},{"x":27.95,"y":0.05},{"x":28.58,"y":0.03},{"x":32.96,"y":0.11}],"id":"Roberta-base1"},{"color":"hsl(241, 80%, 80%)","data":[{"x":1.54,"y":-0.01},{"x":1.55,"y":-0.06},{"x":1.55,"y":0.02},{"x":1.55,"y":0.05},{"x":1.55,"y":0.01},{"x":1.55,"y":0.02},{"x":1.56,"y":-0.03},{"x":1.56,"y":0.01},{"x":1.56,"y":0.01},{"x":1.57,"y":0.01},{"x":1.57,"y":-0.02},{"x":1.57,"y":-0.02},{"x":1.58,"y":0.0},{"x":1.59,"y":0.0},{"x":1.61,"y":0.01},{"x":1.63,"y":0.0},{"x":1.66,"y":0.05},{"x":1.67,"y":0.01},{"x":1.71,"y":0.02},{"x":1.77,"y":-0.02},{"x":1.79,"y":0.03},{"x":1.8,"y":0.03},{"x":1.86,"y":-0.02},{"x":1.95,"y":0.01},{"x":2.01,"y":0.01},{"x":2.1,"y":-0.01},{"x":2.17,"y":-0.03},{"x":2.26,"y":0.04},{"x":2.44,"y":0.05},{"x":2.57,"y":0.04},{"x":2.79,"y":0.04},{"x":3.19,"y":0.07},{"x":3.48,"y":0.02},{"x":4.16,"y":0.05},{"x":4.95,"y":0.01},{"x":6.0,"y":0.04},{"x":6.94,"y":0.06},{"x":8.51,"y":0.01},{"x":10.1,"y":0.04},{"x":11.19,"y":0.06},{"x":13.07,"y":0.03},{"x":15.62,"y":0.08},{"x":17.21,"y":0.03},{"x":19.4,"y":-0.02},{"x":21.13,"y":0.02},{"x":22.98,"y":0.02},{"x":24.14,"y":-0.01},{"x":25.6,"y":0.06},{"x":26.29,"y":0.04},{"x":32.59,"y":0.1}],"id":"Roberta-base6"},{"color":"hsl(175, 30%, 10%)","data":[{"x":1.54,"y":-0.08},{"x":1.55,"y":0.0},{"x":1.56,"y":-0.03},{"x":1.56,"y":-0.03},{"x":1.56,"y":0.02},{"x":1.56,"y":-0.06},{"x":1.56,"y":0.05},{"x":1.56,"y":0.02},{"x":1.57,"y":-0.02},{"x":1.57,"y":-0.02},{"x":1.57,"y":0.01},{"x":1.58,"y":-0.02},{"x":1.58,"y":0.01},{"x":1.59,"y":-0.01},{"x":1.6,"y":-0.02},{"x":1.63,"y":-0.02},{"x":1.65,"y":0.0},{"x":1.69,"y":0.02},{"x":1.7,"y":0.02},{"x":1.75,"y":0.04},{"x":1.79,"y":0.0},{"x":1.86,"y":0.0},{"x":1.86,"y":0.03},{"x":1.95,"y":0.0},{"x":2.0,"y":-0.03},{"x":2.12,"y":-0.02},{"x":2.18,"y":-0.0},{"x":2.22,"y":0.05},{"x":2.32,"y":-0.01},{"x":2.43,"y":0.03},{"x":2.62,"y":0.02},{"x":3.03,"y":0.0},{"x":3.35,"y":0.03},{"x":3.73,"y":0.04},{"x":4.33,"y":-0.01},{"x":4.98,"y":0.05},{"x":6.33,"y":0.02},{"x":7.41,"y":0.07},{"x":8.2,"y":0.03},{"x":10.07,"y":0.05},{"x":11.54,"y":0.02},{"x":13.66,"y":0.02},{"x":15.64,"y":0.05},{"x":17.7,"y":-0.0},{"x":19.65,"y":0.02},{"x":21.4,"y":0.07},{"x":23.04,"y":0.04},{"x":24.6,"y":0.11},{"x":25.49,"y":0.02},{"x":31.97,"y":0.03}],"id":"Roberta-base12"}],"x_axis":"norm","y_axis":"Selectivity"}]},{"model_name":"probe_ably.core.models.mlp.MLPModel","probing_results":[{"chart_data":[{"color":"hsl(130, 80%, 20%)","data":[{"x":4.0,"y":0.0},{"x":4.0,"y":0.01},{"x":6.0,"y":0.05},{"x":7.0,"y":0.02},{"x":7.0,"y":0.09},{"x":8.0,"y":0.03},{"x":8.0,"y":0.03},{"x":9.0,"y":0.01},{"x":9.0,"y":0.05},{"x":10.0,"y":0.03},{"x":10.0,"y":0.17},{"x":10.0,"y":0.0},{"x":11.0,"y":0.08},{"x":11.0,"y":0.06},{"x":12.0,"y":0.05},{"x":12.0,"y":0.02},{"x":13.0,"y":0.05},{"x":13.0,"y":0.09},{"x":15.0,"y":0.04},{"x":15.0,"y":0.02},{"x":16.0,"y":0.15},{"x":19.0,"y":0.11},{"x":20.0,"y":0.03},{"x":21.0,"y":0.11},{"x":21.0,"y":0.1},{"x":24.0,"y":0.11},{"x":25.0,"y":0.11},{"x":26.0,"y":0.08},{"x":26.0,"y":0.11},{"x":26.0,"y":0.09},{"x":26.0,"y":0.13},{"x":26.0,"y":0.02},{"x":26.0,"y":0.11},{"x":26.0,"y":0.01},{"x":27.0,"y":0.11},{"x":28.0,"y":0.13},{"x":28.0,"y":0.14},{"x":28.0,"y":0.15},{"x":28.0,"y":0.13},{"x":28.0,"y":0.14},{"x":28.0,"y":0.09},{"x":28.0,"y":0.1},{"x":28.0,"y":0.07},{"x":29.0,"y":0.16},{"x":29.0,"y":0.1},{"x":29.0,"y":0.11},{"x":30.0,"y":0.11},{"x":30.0,"y":0.1},{"x":31.0,"y":0.11},{"x":31.0,"y":0.15}],"id":"Roberta-base1"},{"color":"hsl(34, 70%, 80%)","data":[{"x":4.0,"y":0.01},{"x":4.0,"y":0.01},{"x":5.0,"y":0.01},{"x":6.0,"y":0.1},{"x":6.0,"y":0.05},{"x":6.0,"y":0.06},{"x":8.0,"y":0.1},{"x":8.0,"y":0.03},{"x":9.0,"y":0.11},{"x":9.0,"y":0.02},{"x":9.0,"y":0.03},{"x":10.0,"y":0.01},{"x":10.0,"y":0.03},{"x":10.0,"y":0.07},{"x":10.0,"y":0.12},{"x":13.0,"y":0.11},{"x":15.0,"y":0.1},{"x":15.0,"y":0.04},{"x":16.0,"y":0.13},{"x":16.0,"y":0.1},{"x":17.0,"y":0.05},{"x":17.0,"y":0.1},{"x":17.0,"y":0.11},{"x":18.0,"y":0.06},{"x":18.0,"y":0.09},{"x":18.0,"y":0.13},{"x":19.0,"y":0.03},{"x":20.0,"y":0.13},{"x":21.0,"y":0.14},{"x":21.0,"y":0.02},{"x":21.0,"y":0.11},{"x":22.0,"y":0.05},{"x":22.0,"y":0.06},{"x":22.0,"y":0.08},{"x":23.0,"y":0.06},{"x":24.0,"y":0.05},{"x":25.0,"y":0.12},{"x":25.0,"y":0.08},{"x":25.0,"y":0.1},{"x":26.0,"y":0.12},{"x":26.0,"y":0.15},{"x":26.0,"y":0.11},{"x":27.0,"y":0.1},{"x":27.0,"y":0.12},{"x":27.0,"y":0.06},{"x":28.0,"y":0.04},{"x":29.0,"y":0.12},{"x":30.0,"y":0.12},{"x":30.0,"y":0.08},{"x":31.0,"y":0.11}],"id":"Roberta-base6"},{"color":"hsl(38, 10%, 30%)","data":[{"x":4.0,"y":0.1},{"x":4.0,"y":0.05},{"x":4.0,"y":0.05},{"x":4.0,"y":0.0},{"x":4.0,"y":0.13},{"x":5.0,"y":0.1},{"x":6.0,"y":0.04},{"x":6.0,"y":0.03},{"x":7.0,"y":0.04},{"x":7.0,"y":0.0},{"x":7.0,"y":0.01},{"x":7.0,"y":0.02},{"x":8.0,"y":0.04},{"x":8.0,"y":0.07},{"x":9.0,"y":0.09},{"x":9.0,"y":0.04},{"x":10.0,"y":0.02},{"x":11.0,"y":0.08},{"x":12.0,"y":0.04},{"x":13.0,"y":0.0},{"x":13.0,"y":0.11},{"x":14.0,"y":0.15},{"x":14.0,"y":0.13},{"x":15.0,"y":0.05},{"x":15.0,"y":0.1},{"x":16.0,"y":0.05},{"x":19.0,"y":0.11},{"x":19.0,"y":0.06},{"x":19.0,"y":0.04},{"x":21.0,"y":0.03},{"x":21.0,"y":0.02},{"x":21.0,"y":0.14},{"x":22.0,"y":0.09},{"x":22.0,"y":0.11},{"x":22.0,"y":0.08},{"x":22.0,"y":0.03},{"x":23.0,"y":0.07},{"x":24.0,"y":0.1},{"x":24.0,"y":0.08},{"x":25.0,"y":0.11},{"x":25.0,"y":0.07},{"x":25.0,"y":0.16},{"x":25.0,"y":0.1},{"x":25.0,"y":0.06},{"x":26.0,"y":0.03},{"x":27.0,"y":0.13},{"x":30.0,"y":0.13},{"x":30.0,"y":0.07},{"x":31.0,"y":0.07},{"x":31.0,"y":0.05}],"id":"Roberta-base12"}],"x_axis":"hidden_size","y_axis":"Accuracy"},{"chart_data":[{"color":"hsl(77, 50%, 20%)","data":[{"x":4.0,"y":-0.06},{"x":4.0,"y":-0.07},{"x":6.0,"y":-0.0},{"x":7.0,"y":-0.04},{"x":7.0,"y":0.03},{"x":8.0,"y":0.01},{"x":8.0,"y":-0.05},{"x":9.0,"y":0.01},{"x":9.0,"y":0.01},{"x":10.0,"y":-0.03},{"x":10.0,"y":0.15},{"x":10.0,"y":-0.13},{"x":11.0,"y":0.02},{"x":11.0,"y":-0.03},{"x":12.0,"y":-0.03},{"x":12.0,"y":-0.08},{"x":13.0,"y":0.02},{"x":13.0,"y":0.05},{"x":15.0,"y":-0.03},{"x":15.0,"y":-0.11},{"x":16.0,"y":0.02},{"x":19.0,"y":0.08},{"x":20.0,"y":0.01},{"x":21.0,"y":0.05},{"x":21.0,"y":-0.03},{"x":24.0,"y":0.02},{"x":25.0,"y":0.05},{"x":26.0,"y":-0.02},{"x":26.0,"y":0.07},{"x":26.0,"y":-0.04},{"x":26.0,"y":0.06},{"x":26.0,"y":-0.09},{"x":26.0,"y":-0.01},{"x":26.0,"y":-0.12},{"x":27.0,"y":-0.0},{"x":28.0,"y":0.07},{"x":28.0,"y":0.05},{"x":28.0,"y":0.08},{"x":28.0,"y":0.06},{"x":28.0,"y":-0.01},{"x":28.0,"y":-0.01},{"x":28.0,"y":-0.03},{"x":28.0,"y":-0.03},{"x":29.0,"y":0.05},{"x":29.0,"y":0.01},{"x":29.0,"y":-0.0},{"x":30.0,"y":0.01},{"x":30.0,"y":-0.04},{"x":31.0,"y":-0.0},{"x":31.0,"y":0.08}],"id":"Roberta-base1"},{"color":"hsl(128, 20%, 90%)","data":[{"x":4.0,"y":0.01},{"x":4.0,"y":-0.01},{"x":5.0,"y":-0.01},{"x":6.0,"y":0.09},{"x":6.0,"y":-0.02},{"x":6.0,"y":0.06},{"x":8.0,"y":0.09},{"x":8.0,"y":-0.03},{"x":9.0,"y":0.05},{"x":9.0,"y":-0.04},{"x":9.0,"y":-0.02},{"x":10.0,"y":-0.03},{"x":10.0,"y":0.01},{"x":10.0,"y":-0.06},{"x":10.0,"y":0.06},{"x":13.0,"y":0.06},{"x":15.0,"y":-0.01},{"x":15.0,"y":-0.06},{"x":16.0,"y":0.08},{"x":16.0,"y":0.01},{"x":17.0,"y":-0.04},{"x":17.0,"y":0.04},{"x":17.0,"y":0.04},{"x":18.0,"y":-0.04},{"x":18.0,"y":0.07},{"x":18.0,"y":0.01},{"x":19.0,"y":-0.09},{"x":20.0,"y":0.04},{"x":21.0,"y":0.08},{"x":21.0,"y":-0.1},{"x":21.0,"y":-0.0},{"x":22.0,"y":-0.03},{"x":22.0,"y":-0.03},{"x":22.0,"y":0.0},{"x":23.0,"y":-0.0},{"x":24.0,"y":-0.02},{"x":25.0,"y":0.01},{"x":25.0,"y":-0.04},{"x":25.0,"y":0.08},{"x":26.0,"y":0.01},{"x":26.0,"y":0.08},{"x":26.0,"y":0.01},{"x":27.0,"y":0.06},{"x":27.0,"y":0.01},{"x":27.0,"y":-0.05},{"x":28.0,"y":-0.08},{"x":29.0,"y":0.08},{"x":30.0,"y":0.04},{"x":30.0,"y":0.0},{"x":31.0,"y":-0.02}],"id":"Roberta-base6"},{"color":"hsl(214, 40%, 90%)","data":[{"x":4.0,"y":-0.03},{"x":4.0,"y":0.04},{"x":4.0,"y":-0.03},{"x":4.0,"y":0.0},{"x":4.0,"y":0.11},{"x":5.0,"y":0.08},{"x":6.0,"y":-0.02},{"x":6.0,"y":-0.02},{"x":7.0,"y":-0.01},{"x":7.0,"y":-0.02},{"x":7.0,"y":-0.1},{"x":7.0,"y":-0.03},{"x":8.0,"y":0.04},{"x":8.0,"y":-0.05},{"x":9.0,"y":0.03},{"x":9.0,"y":-0.07},{"x":10.0,"y":0.0},{"x":11.0,"y":0.07},{"x":12.0,"y":-0.02},{"x":13.0,"y":-0.07},{"x":13.0,"y":0.04},{"x":14.0,"y":0.04},{"x":14.0,"y":0.02},{"x":15.0,"y":0.05},{"x":15.0,"y":0.09},{"x":16.0,"y":-0.05},{"x":19.0,"y":0.1},{"x":19.0,"y":-0.05},{"x":19.0,"y":0.03},{"x":21.0,"y":-0.07},{"x":21.0,"y":-0.08},{"x":21.0,"y":0.08},{"x":22.0,"y":-0.03},{"x":22.0,"y":-0.01},{"x":22.0,"y":-0.01},{"x":22.0,"y":-0.09},{"x":23.0,"y":0.04},{"x":24.0,"y":0.08},{"x":24.0,"y":0.02},{"x":25.0,"y":0.1},{"x":25.0,"y":-0.01},{"x":25.0,"y":0.06},{"x":25.0,"y":0.04},{"x":25.0,"y":-0.0},{"x":26.0,"y":-0.07},{"x":27.0,"y":0.01},{"x":30.0,"y":0.02},{"x":30.0,"y":0.01},{"x":31.0,"y":0.01},{"x":31.0,"y":-0.07}],"id":"Roberta-base12"}],"x_axis":"hidden_size","y_axis":"Selectivity"},{"chart_data":[{"color":"hsl(195, 80%, 80%)","data":[{"x":3221,"y":0.0},{"x":3221,"y":0.01},{"x":4815,"y":0.05},{"x":5587,"y":0.02},{"x":5587,"y":0.09},{"x":6413,"y":0.03},{"x":6413,"y":0.03},{"x":7186,"y":0.01},{"x":7186,"y":0.05},{"x":8015,"y":0.03},{"x":8015,"y":0.17},{"x":8015,"y":0.0},{"x":8789,"y":0.08},{"x":8789,"y":0.06},{"x":9621,"y":0.05},{"x":9621,"y":0.02},{"x":10396,"y":0.05},{"x":10396,"y":0.09},{"x":12007,"y":0.04},{"x":12007,"y":0.02},{"x":12845,"y":0.15},{"x":15241,"y":0.11},{"x":16085,"y":0.03},{"x":16864,"y":0.11},{"x":16864,"y":0.1},{"x":19341,"y":0.11},{"x":20122,"y":0.11},{"x":20975,"y":0.08},{"x":20975,"y":0.11},{"x":20975,"y":0.09},{"x":20975,"y":0.13},{"x":20975,"y":0.02},{"x":20975,"y":0.11},{"x":20975,"y":0.01},{"x":21757,"y":0.11},{"x":22613,"y":0.13},{"x":22613,"y":0.14},{"x":22613,"y":0.15},{"x":22613,"y":0.13},{"x":22613,"y":0.14},{"x":22613,"y":0.09},{"x":22613,"y":0.1},{"x":22613,"y":0.07},{"x":23396,"y":0.16},{"x":23396,"y":0.1},{"x":23396,"y":0.11},{"x":24255,"y":0.11},{"x":24255,"y":0.1},{"x":25039,"y":0.11},{"x":25039,"y":0.15}],"id":"Roberta-base1"},{"color":"hsl(153, 70%, 50%)","data":[{"x":3221,"y":0.01},{"x":3221,"y":0.01},{"x":3992,"y":0.01},{"x":4815,"y":0.1},{"x":4815,"y":0.05},{"x":4815,"y":0.06},{"x":6413,"y":0.1},{"x":6413,"y":0.03},{"x":7186,"y":0.11},{"x":7186,"y":0.02},{"x":7186,"y":0.03},{"x":8015,"y":0.01},{"x":8015,"y":0.03},{"x":8015,"y":0.07},{"x":8015,"y":0.12},{"x":10396,"y":0.11},{"x":12007,"y":0.1},{"x":12007,"y":0.04},{"x":12845,"y":0.13},{"x":12845,"y":0.1},{"x":13622,"y":0.05},{"x":13622,"y":0.1},{"x":13622,"y":0.11},{"x":14463,"y":0.06},{"x":14463,"y":0.09},{"x":14463,"y":0.13},{"x":15241,"y":0.03},{"x":16085,"y":0.13},{"x":16864,"y":0.14},{"x":16864,"y":0.02},{"x":16864,"y":0.11},{"x":17711,"y":0.05},{"x":17711,"y":0.06},{"x":17711,"y":0.08},{"x":18491,"y":0.06},{"x":19341,"y":0.05},{"x":20122,"y":0.12},{"x":20122,"y":0.08},{"x":20122,"y":0.1},{"x":20975,"y":0.12},{"x":20975,"y":0.15},{"x":20975,"y":0.11},{"x":21757,"y":0.1},{"x":21757,"y":0.12},{"x":21757,"y":0.06},{"x":22613,"y":0.04},{"x":23396,"y":0.12},{"x":24255,"y":0.12},{"x":24255,"y":0.08},{"x":25039,"y":0.11}],"id":"Roberta-base6"},{"color":"hsl(292, 10%, 20%)","data":[{"x":3221,"y":0.1},{"x":3221,"y":0.05},{"x":3221,"y":0.05},{"x":3221,"y":0.0},{"x":3221,"y":0.13},{"x":3992,"y":0.1},{"x":4815,"y":0.04},{"x":4815,"y":0.03},{"x":5587,"y":0.04},{"x":5587,"y":0.0},{"x":5587,"y":0.01},{"x":5587,"y":0.02},{"x":6413,"y":0.04},{"x":6413,"y":0.07},{"x":7186,"y":0.09},{"x":7186,"y":0.04},{"x":8015,"y":0.02},{"x":8789,"y":0.08},{"x":9621,"y":0.04},{"x":10396,"y":0.0},{"x":10396,"y":0.11},{"x":11231,"y":0.15},{"x":11231,"y":0.13},{"x":12007,"y":0.05},{"x":12007,"y":0.1},{"x":12845,"y":0.05},{"x":15241,"y":0.11},{"x":15241,"y":0.06},{"x":15241,"y":0.04},{"x":16864,"y":0.03},{"x":16864,"y":0.02},{"x":16864,"y":0.14},{"x":17711,"y":0.09},{"x":17711,"y":0.11},{"x":17711,"y":0.08},{"x":17711,"y":0.03},{"x":18491,"y":0.07},{"x":19341,"y":0.1},{"x":19341,"y":0.08},{"x":20122,"y":0.11},{"x":20122,"y":0.07},{"x":20122,"y":0.16},{"x":20122,"y":0.1},{"x":20122,"y":0.06},{"x":20975,"y":0.03},{"x":21757,"y":0.13},{"x":24255,"y":0.13},{"x":24255,"y":0.07},{"x":25039,"y":0.07},{"x":25039,"y":0.05}],"id":"Roberta-base12"}],"x_axis":"nparams","y_axis":"Accuracy"},{"chart_data":[{"color":"hsl(107, 40%, 50%)","data":[{"x":3221,"y":-0.06},{"x":3221,"y":-0.07},{"x":4815,"y":-0.0},{"x":5587,"y":-0.04},{"x":5587,"y":0.03},{"x":6413,"y":0.01},{"x":6413,"y":-0.05},{"x":7186,"y":0.01},{"x":7186,"y":0.01},{"x":8015,"y":-0.03},{"x":8015,"y":0.15},{"x":8015,"y":-0.13},{"x":8789,"y":0.02},{"x":8789,"y":-0.03},{"x":9621,"y":-0.03},{"x":9621,"y":-0.08},{"x":10396,"y":0.02},{"x":10396,"y":0.05},{"x":12007,"y":-0.03},{"x":12007,"y":-0.11},{"x":12845,"y":0.02},{"x":15241,"y":0.08},{"x":16085,"y":0.01},{"x":16864,"y":0.05},{"x":16864,"y":-0.03},{"x":19341,"y":0.02},{"x":20122,"y":0.05},{"x":20975,"y":-0.02},{"x":20975,"y":0.07},{"x":20975,"y":-0.04},{"x":20975,"y":0.06},{"x":20975,"y":-0.09},{"x":20975,"y":-0.01},{"x":20975,"y":-0.12},{"x":21757,"y":-0.0},{"x":22613,"y":0.07},{"x":22613,"y":0.05},{"x":22613,"y":0.08},{"x":22613,"y":0.06},{"x":22613,"y":-0.01},{"x":22613,"y":-0.01},{"x":22613,"y":-0.03},{"x":22613,"y":-0.03},{"x":23396,"y":0.05},{"x":23396,"y":0.01},{"x":23396,"y":-0.0},{"x":24255,"y":0.01},{"x":24255,"y":-0.04},{"x":25039,"y":-0.0},{"x":25039,"y":0.08}],"id":"Roberta-base1"},{"color":"hsl(339, 20%, 30%)","data":[{"x":3221,"y":0.01},{"x":3221,"y":-0.01},{"x":3992,"y":-0.01},{"x":4815,"y":0.09},{"x":4815,"y":-0.02},{"x":4815,"y":0.06},{"x":6413,"y":0.09},{"x":6413,"y":-0.03},{"x":7186,"y":0.05},{"x":7186,"y":-0.04},{"x":7186,"y":-0.02},{"x":8015,"y":-0.03},{"x":8015,"y":0.01},{"x":8015,"y":-0.06},{"x":8015,"y":0.06},{"x":10396,"y":0.06},{"x":12007,"y":-0.01},{"x":12007,"y":-0.06},{"x":12845,"y":0.08},{"x":12845,"y":0.01},{"x":13622,"y":-0.04},{"x":13622,"y":0.04},{"x":13622,"y":0.04},{"x":14463,"y":-0.04},{"x":14463,"y":0.07},{"x":14463,"y":0.01},{"x":15241,"y":-0.09},{"x":16085,"y":0.04},{"x":16864,"y":0.08},{"x":16864,"y":-0.1},{"x":16864,"y":-0.0},{"x":17711,"y":-0.03},{"x":17711,"y":-0.03},{"x":17711,"y":0.0},{"x":18491,"y":-0.0},{"x":19341,"y":-0.02},{"x":20122,"y":0.01},{"x":20122,"y":-0.04},{"x":20122,"y":0.08},{"x":20975,"y":0.01},{"x":20975,"y":0.08},{"x":20975,"y":0.01},{"x":21757,"y":0.06},{"x":21757,"y":0.01},{"x":21757,"y":-0.05},{"x":22613,"y":-0.08},{"x":23396,"y":0.08},{"x":24255,"y":0.04},{"x":24255,"y":0.0},{"x":25039,"y":-0.02}],"id":"Roberta-base6"},{"color":"hsl(123, 30%, 90%)","data":[{"x":3221,"y":-0.03},{"x":3221,"y":0.04},{"x":3221,"y":-0.03},{"x":3221,"y":0.0},{"x":3221,"y":0.11},{"x":3992,"y":0.08},{"x":4815,"y":-0.02},{"x":4815,"y":-0.02},{"x":5587,"y":-0.01},{"x":5587,"y":-0.02},{"x":5587,"y":-0.1},{"x":5587,"y":-0.03},{"x":6413,"y":0.04},{"x":6413,"y":-0.05},{"x":7186,"y":0.03},{"x":7186,"y":-0.07},{"x":8015,"y":0.0},{"x":8789,"y":0.07},{"x":9621,"y":-0.02},{"x":10396,"y":-0.07},{"x":10396,"y":0.04},{"x":11231,"y":0.04},{"x":11231,"y":0.02},{"x":12007,"y":0.05},{"x":12007,"y":0.09},{"x":12845,"y":-0.05},{"x":15241,"y":0.1},{"x":15241,"y":-0.05},{"x":15241,"y":0.03},{"x":16864,"y":-0.07},{"x":16864,"y":-0.08},{"x":16864,"y":0.08},{"x":17711,"y":-0.03},{"x":17711,"y":-0.01},{"x":17711,"y":-0.01},{"x":17711,"y":-0.09},{"x":18491,"y":0.04},{"x":19341,"y":0.08},{"x":19341,"y":0.02},{"x":20122,"y":0.1},{"x":20122,"y":-0.01},{"x":20122,"y":0.06},{"x":20122,"y":0.04},{"x":20122,"y":-0.0},{"x":20975,"y":-0.07},{"x":21757,"y":0.01},{"x":24255,"y":0.02},{"x":24255,"y":0.01},{"x":25039,"y":0.01},{"x":25039,"y":-0.07}],"id":"Roberta-base12"}],"x_axis":"nparams","y_axis":"Selectivity"}]}]}]} From 0c7c9174528f3a2d1bd5c25fa888bb19337b3e2f Mon Sep 17 00:00:00 2001 From: Julia Rozanova Date: Tue, 24 Aug 2021 17:06:03 +0100 Subject: [PATCH 02/25] Upload config file --- model3_test_control.tsv | 10 - probe_ably/app/.gitignore | 23 + probe_ably/app/.prettierrc.js | 4 + probe_ably/app/__init__.py | 0 probe_ably/app/__main__.py | 127 ++ probe_ably/app/package.json | 67 + .../app/public/android-chrome-192x192.png | Bin 0 -> 11832 bytes .../app/public/android-chrome-512x512.png | Bin 0 -> 32392 bytes probe_ably/app/public/apple-touch-icon.png | Bin 0 -> 5617 bytes probe_ably/app/public/browserconfig.xml | 9 + probe_ably/app/public/favicon-16x16.png | Bin 0 -> 1102 bytes probe_ably/app/public/favicon-32x32.png | Bin 0 -> 1775 bytes probe_ably/app/public/favicon.ico | Bin 0 -> 15086 bytes probe_ably/app/public/index.html | 132 ++ probe_ably/app/public/logo192.png | Bin 0 -> 5347 bytes probe_ably/app/public/logo512.png | Bin 0 -> 9664 bytes probe_ably/app/public/manifest.json | 20 + probe_ably/app/public/mstile-150x150.png | Bin 0 -> 5015 bytes probe_ably/app/public/robots.txt | 3 + probe_ably/app/public/safari-pinned-tab.svg | 39 + probe_ably/app/public/site.webmanifest | 19 + probe_ably/app/src/assets/fireparrot.gif | Bin 0 -> 20040 bytes probe_ably/app/src/charts/LineChartWidget.js | 211 +++ probe_ably/app/src/index.css | 13 + probe_ably/{service => app}/src/index.js | 0 probe_ably/app/src/logo.svg | 1 + probe_ably/app/src/pages/HomePage.js | 83 + .../src/pages/dashboard/DashboardOverview.js | 54 + .../app/src/pages/dashboard/ProgressBar.js | 76 + probe_ably/app/src/pages/dashboard/Report.js | 44 + probe_ably/app/src/pages/forms/Button.js | 11 + .../app/src/pages/forms/ConfigurationForm.js | 90 + .../app/src/pages/forms/ProbeControl.js | 30 + probe_ably/app/src/react-app-env.d.ts | 1 + probe_ably/app/src/reportWebVitals.js | 13 + probe_ably/app/src/scss/volt.scss | 45 + probe_ably/app/src/scss/volt/_components.scss | 33 + probe_ably/app/src/scss/volt/_functions.scss | 23 + probe_ably/app/src/scss/volt/_layout.scss | 5 + probe_ably/app/src/scss/volt/_mixins.scss | 7 + probe_ably/app/src/scss/volt/_reboot.scss | 30 + probe_ably/app/src/scss/volt/_utilities.scss | 8 + probe_ably/app/src/scss/volt/_variables.scss | 1681 +++++++++++++++++ probe_ably/app/src/scss/volt/_vendor.scss | 9 + .../src/scss/volt/components/_accordions.scss | 38 + .../app/src/scss/volt/components/_alerts.scss | 10 + .../src/scss/volt/components/_avatars.scss | 99 + .../app/src/scss/volt/components/_badge.scss | 102 + .../src/scss/volt/components/_blog-cards.scss | 12 + .../src/scss/volt/components/_breadcrumb.scss | 65 + .../src/scss/volt/components/_buttons.scss | 75 + .../app/src/scss/volt/components/_card.scss | 263 +++ .../src/scss/volt/components/_carousel.scss | 52 + .../app/src/scss/volt/components/_charts.scss | 52 + .../app/src/scss/volt/components/_close.scss | 33 + .../src/scss/volt/components/_counters.scss | 14 + .../scss/volt/components/_custom-forms.scss | 103 + .../src/scss/volt/components/_datepicker.scss | 27 + .../src/scss/volt/components/_dropdown.scss | 100 + .../src/scss/volt/components/_dropzone.scss | 52 + .../app/src/scss/volt/components/_forms.scss | 83 + .../src/scss/volt/components/_icon-box.scss | 206 ++ .../app/src/scss/volt/components/_images.scss | 95 + .../scss/volt/components/_input-group.scss | 51 + .../src/scss/volt/components/_list-group.scss | 96 + .../app/src/scss/volt/components/_modal.scss | 31 + .../app/src/scss/volt/components/_nav.scss | 226 +++ .../src/scss/volt/components/_pagination.scss | 16 + .../src/scss/volt/components/_popover.scss | 19 + .../src/scss/volt/components/_preloader.scss | 31 + .../scss/volt/components/_pricing-cards.scss | 42 + .../src/scss/volt/components/_progress.scss | 117 ++ .../src/scss/volt/components/_scrollbar.scss | 227 +++ .../app/src/scss/volt/components/_shapes.scss | 18 + .../app/src/scss/volt/components/_tables.scss | 434 +++++ .../src/scss/volt/components/_timelines.scss | 23 + .../src/scss/volt/components/_tooltip.scss | 46 + .../app/src/scss/volt/components/_type.scss | 184 ++ .../app/src/scss/volt/layout/_footer.scss | 105 + .../app/src/scss/volt/layout/_navbar.scss | 487 +++++ .../app/src/scss/volt/layout/_section.scss | 469 +++++ .../app/src/scss/volt/layout/_sidebar.scss | 34 + .../app/src/scss/volt/layout/_sidenav.scss | 258 +++ .../app/src/scss/volt/mixins/_animations.scss | 45 + .../scss/volt/mixins/_background-variant.scss | 25 + .../app/src/scss/volt/mixins/_icon.scss | 17 + .../app/src/scss/volt/mixins/_modals.scss | 23 + .../app/src/scss/volt/mixins/_popover.scss | 36 + .../app/src/scss/volt/mixins/_transform.scss | 19 + .../app/src/scss/volt/mixins/_utilities.scss | 123 ++ .../src/scss/volt/themes/_variables-dark.scss | 0 .../scss/volt/themes/_variables-light.scss | 0 .../scss/volt/themes/_variables-sunset.scss | 0 .../src/scss/volt/utilities/_animations.scss | 230 +++ .../src/scss/volt/utilities/_backgrounds.scss | 41 + .../app/src/scss/volt/utilities/_helper.scss | 65 + .../src/scss/volt/utilities/_position.scss | 33 + .../app/src/scss/volt/utilities/_shadows.scss | 17 + .../app/src/scss/volt/utilities/_sizing.scss | 51 + .../app/src/scss/volt/utilities/_text.scss | 52 + .../src/scss/volt/utilities/_transform.scss | 16 + .../app/src/scss/volt/vendor/_datepicker.scss | 33 + .../app/src/scss/volt/vendor/_headroom.scss | 52 + .../app/src/scss/volt/vendor/_prism.scss | 145 ++ .../scss/volt/vendor/chartist/_chartist.scss | 252 +++ .../chartist/settings/_chartist-settings.scss | 89 + .../src/scss/volt/vendor/wizard/_form.scss | 279 +++ .../src/scss/volt/vendor/wizard/_mixins.scss | 11 + .../scss/volt/vendor/wizard/_variables.scss | 32 + probe_ably/app/tsconfig.json | 26 + .../core/tasks/utils/read_input_task.py | 113 +- probe_ably/service/.storybook/main.js | 11 - probe_ably/service/.storybook/preview.js | 4 - .../src/stories/ConfigurationForm.stories.js | 17 - .../service/src/stories/Dahsboard.stories.js | 316 ---- probe_ably/service/src/stories/sample.json | 1 - requirements.txt | 3 + 117 files changed, 9083 insertions(+), 410 deletions(-) delete mode 100644 model3_test_control.tsv create mode 100644 probe_ably/app/.gitignore create mode 100644 probe_ably/app/.prettierrc.js create mode 100644 probe_ably/app/__init__.py create mode 100644 probe_ably/app/__main__.py create mode 100644 probe_ably/app/package.json create mode 100644 probe_ably/app/public/android-chrome-192x192.png create mode 100644 probe_ably/app/public/android-chrome-512x512.png create mode 100644 probe_ably/app/public/apple-touch-icon.png create mode 100644 probe_ably/app/public/browserconfig.xml create mode 100644 probe_ably/app/public/favicon-16x16.png create mode 100644 probe_ably/app/public/favicon-32x32.png create mode 100644 probe_ably/app/public/favicon.ico create mode 100644 probe_ably/app/public/index.html create mode 100644 probe_ably/app/public/logo192.png create mode 100644 probe_ably/app/public/logo512.png create mode 100644 probe_ably/app/public/manifest.json create mode 100644 probe_ably/app/public/mstile-150x150.png create mode 100644 probe_ably/app/public/robots.txt create mode 100644 probe_ably/app/public/safari-pinned-tab.svg create mode 100644 probe_ably/app/public/site.webmanifest create mode 100644 probe_ably/app/src/assets/fireparrot.gif create mode 100644 probe_ably/app/src/charts/LineChartWidget.js create mode 100644 probe_ably/app/src/index.css rename probe_ably/{service => app}/src/index.js (100%) create mode 100644 probe_ably/app/src/logo.svg create mode 100644 probe_ably/app/src/pages/HomePage.js create mode 100644 probe_ably/app/src/pages/dashboard/DashboardOverview.js create mode 100644 probe_ably/app/src/pages/dashboard/ProgressBar.js create mode 100644 probe_ably/app/src/pages/dashboard/Report.js create mode 100644 probe_ably/app/src/pages/forms/Button.js create mode 100644 probe_ably/app/src/pages/forms/ConfigurationForm.js create mode 100644 probe_ably/app/src/pages/forms/ProbeControl.js create mode 100644 probe_ably/app/src/react-app-env.d.ts create mode 100644 probe_ably/app/src/reportWebVitals.js create mode 100644 probe_ably/app/src/scss/volt.scss create mode 100644 probe_ably/app/src/scss/volt/_components.scss create mode 100644 probe_ably/app/src/scss/volt/_functions.scss create mode 100644 probe_ably/app/src/scss/volt/_layout.scss create mode 100644 probe_ably/app/src/scss/volt/_mixins.scss create mode 100644 probe_ably/app/src/scss/volt/_reboot.scss create mode 100644 probe_ably/app/src/scss/volt/_utilities.scss create mode 100644 probe_ably/app/src/scss/volt/_variables.scss create mode 100644 probe_ably/app/src/scss/volt/_vendor.scss create mode 100644 probe_ably/app/src/scss/volt/components/_accordions.scss create mode 100644 probe_ably/app/src/scss/volt/components/_alerts.scss create mode 100644 probe_ably/app/src/scss/volt/components/_avatars.scss create mode 100644 probe_ably/app/src/scss/volt/components/_badge.scss create mode 100644 probe_ably/app/src/scss/volt/components/_blog-cards.scss create mode 100644 probe_ably/app/src/scss/volt/components/_breadcrumb.scss create mode 100644 probe_ably/app/src/scss/volt/components/_buttons.scss create mode 100644 probe_ably/app/src/scss/volt/components/_card.scss create mode 100644 probe_ably/app/src/scss/volt/components/_carousel.scss create mode 100644 probe_ably/app/src/scss/volt/components/_charts.scss create mode 100644 probe_ably/app/src/scss/volt/components/_close.scss create mode 100644 probe_ably/app/src/scss/volt/components/_counters.scss create mode 100644 probe_ably/app/src/scss/volt/components/_custom-forms.scss create mode 100644 probe_ably/app/src/scss/volt/components/_datepicker.scss create mode 100644 probe_ably/app/src/scss/volt/components/_dropdown.scss create mode 100644 probe_ably/app/src/scss/volt/components/_dropzone.scss create mode 100644 probe_ably/app/src/scss/volt/components/_forms.scss create mode 100644 probe_ably/app/src/scss/volt/components/_icon-box.scss create mode 100644 probe_ably/app/src/scss/volt/components/_images.scss create mode 100644 probe_ably/app/src/scss/volt/components/_input-group.scss create mode 100644 probe_ably/app/src/scss/volt/components/_list-group.scss create mode 100644 probe_ably/app/src/scss/volt/components/_modal.scss create mode 100644 probe_ably/app/src/scss/volt/components/_nav.scss create mode 100644 probe_ably/app/src/scss/volt/components/_pagination.scss create mode 100644 probe_ably/app/src/scss/volt/components/_popover.scss create mode 100644 probe_ably/app/src/scss/volt/components/_preloader.scss create mode 100644 probe_ably/app/src/scss/volt/components/_pricing-cards.scss create mode 100644 probe_ably/app/src/scss/volt/components/_progress.scss create mode 100644 probe_ably/app/src/scss/volt/components/_scrollbar.scss create mode 100644 probe_ably/app/src/scss/volt/components/_shapes.scss create mode 100644 probe_ably/app/src/scss/volt/components/_tables.scss create mode 100644 probe_ably/app/src/scss/volt/components/_timelines.scss create mode 100644 probe_ably/app/src/scss/volt/components/_tooltip.scss create mode 100644 probe_ably/app/src/scss/volt/components/_type.scss create mode 100644 probe_ably/app/src/scss/volt/layout/_footer.scss create mode 100644 probe_ably/app/src/scss/volt/layout/_navbar.scss create mode 100644 probe_ably/app/src/scss/volt/layout/_section.scss create mode 100644 probe_ably/app/src/scss/volt/layout/_sidebar.scss create mode 100644 probe_ably/app/src/scss/volt/layout/_sidenav.scss create mode 100644 probe_ably/app/src/scss/volt/mixins/_animations.scss create mode 100644 probe_ably/app/src/scss/volt/mixins/_background-variant.scss create mode 100644 probe_ably/app/src/scss/volt/mixins/_icon.scss create mode 100644 probe_ably/app/src/scss/volt/mixins/_modals.scss create mode 100644 probe_ably/app/src/scss/volt/mixins/_popover.scss create mode 100644 probe_ably/app/src/scss/volt/mixins/_transform.scss create mode 100644 probe_ably/app/src/scss/volt/mixins/_utilities.scss create mode 100644 probe_ably/app/src/scss/volt/themes/_variables-dark.scss create mode 100644 probe_ably/app/src/scss/volt/themes/_variables-light.scss create mode 100644 probe_ably/app/src/scss/volt/themes/_variables-sunset.scss create mode 100644 probe_ably/app/src/scss/volt/utilities/_animations.scss create mode 100644 probe_ably/app/src/scss/volt/utilities/_backgrounds.scss create mode 100644 probe_ably/app/src/scss/volt/utilities/_helper.scss create mode 100644 probe_ably/app/src/scss/volt/utilities/_position.scss create mode 100644 probe_ably/app/src/scss/volt/utilities/_shadows.scss create mode 100644 probe_ably/app/src/scss/volt/utilities/_sizing.scss create mode 100644 probe_ably/app/src/scss/volt/utilities/_text.scss create mode 100644 probe_ably/app/src/scss/volt/utilities/_transform.scss create mode 100644 probe_ably/app/src/scss/volt/vendor/_datepicker.scss create mode 100644 probe_ably/app/src/scss/volt/vendor/_headroom.scss create mode 100644 probe_ably/app/src/scss/volt/vendor/_prism.scss create mode 100644 probe_ably/app/src/scss/volt/vendor/chartist/_chartist.scss create mode 100644 probe_ably/app/src/scss/volt/vendor/chartist/settings/_chartist-settings.scss create mode 100644 probe_ably/app/src/scss/volt/vendor/wizard/_form.scss create mode 100644 probe_ably/app/src/scss/volt/vendor/wizard/_mixins.scss create mode 100644 probe_ably/app/src/scss/volt/vendor/wizard/_variables.scss create mode 100644 probe_ably/app/tsconfig.json delete mode 100644 probe_ably/service/.storybook/main.js delete mode 100644 probe_ably/service/.storybook/preview.js delete mode 100644 probe_ably/service/src/stories/ConfigurationForm.stories.js delete mode 100644 probe_ably/service/src/stories/Dahsboard.stories.js delete mode 100644 probe_ably/service/src/stories/sample.json diff --git a/model3_test_control.tsv b/model3_test_control.tsv deleted file mode 100644 index fff2b22..0000000 --- a/model3_test_control.tsv +++ /dev/null @@ -1,10 +0,0 @@ -1 -0 -1 -1 -1 -1 -0 -1 -1 -1 diff --git a/probe_ably/app/.gitignore b/probe_ably/app/.gitignore new file mode 100644 index 0000000..4d29575 --- /dev/null +++ b/probe_ably/app/.gitignore @@ -0,0 +1,23 @@ +# See https://help.github.com/articles/ignoring-files/ for more about ignoring files. + +# dependencies +/node_modules +/.pnp +.pnp.js + +# testing +/coverage + +# production +/build + +# misc +.DS_Store +.env.local +.env.development.local +.env.test.local +.env.production.local + +npm-debug.log* +yarn-debug.log* +yarn-error.log* diff --git a/probe_ably/app/.prettierrc.js b/probe_ably/app/.prettierrc.js new file mode 100644 index 0000000..10c4b8c --- /dev/null +++ b/probe_ably/app/.prettierrc.js @@ -0,0 +1,4 @@ +module.exports = { + semi: true, + trailingComma: "all", +}; diff --git a/probe_ably/app/__init__.py b/probe_ably/app/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/probe_ably/app/__main__.py b/probe_ably/app/__main__.py new file mode 100644 index 0000000..84883e8 --- /dev/null +++ b/probe_ably/app/__main__.py @@ -0,0 +1,127 @@ +from probe_ably.core.tasks.probing import TrainProbingTask +from probe_ably.core.tasks.metric_task import ProcessMetricTask +from probe_ably.core.tasks.probing import PrepareDataForProbingTask, TrainProbingTask +from probe_ably.core.tasks.utils import ReadInputTask, VisualiaztionTask + +from pathlib import Path +import threading +import os + +from fastapi import FastAPI, UploadFile, File, Request, BackgroundTasks +from fastapi.staticfiles import StaticFiles +import uvicorn + +app_dir = Path(os.path.abspath(__file__)).parent +build_dir = app_dir.joinpath('build') +print(build_dir) + +INPUT_FILE = "./tests/sample_files/test_input/multi_task_multi_model_with_control.json" +probing_task = TrainProbingTask() +read_input_task = ReadInputTask() +prepare_data_probing = PrepareDataForProbingTask() +process_metric_task = ProcessMetricTask() +visualization_task = VisualiaztionTask() + +app = FastAPI() + +@app.get("/user_config") +def user_config(): + return {'thing': 'other'} + +@app.post("/start_probing") +async def start_probing(config_file: UploadFile = File(...)): + results = await probing_flow(config_file) + return {"status": "probing!"} + +async def probing_flow(config): + parsed_input = await read_input_task.run(config) + prepared_data = prepare_data_probing.run( + parsed_input["tasks"], parsed_input["probing_setup"] + ) + train_results = probing_task.run(prepared_data, + parsed_input["probing_setup"]) + processed_results = process_metric_task.run(train_results, + parsed_input["probing_setup"] + ) + return processed_results + + +class ProbingThread(threading.Thread): + def __init__(self): + super().__init__() + +# class ProbingThread(threading.Thread): +# def __init__(self): +# super().__init__() +# self.results = None +# self.task_loop_bar = None +# self.model_loop_bar = None +# self.probes_loop_bar = None + +# def run(self,config_file=INPUT_FILE): +# # probing flow +# parsed_input = read_input_task.run(config_file) +# prepared_data = prepare_data_probing.run( +# parsed_input["tasks"], parsed_input["probing_setup"] +# ) +# train_results = probing_task.run(prepared_data, +# parsed_input["probing_setup"], +# thread=self) +# processed_results = process_metric_task.run(train_results, +# parsed_input["probing_setup"] +# ) +# self.finished = 1 +# self.results = processed_results + +# threads = {} + +# @app.route('/') +# def serve(): +# print(static_folder) +# return send_from_directory(app.static_folder, 'index.html') + +# @app.route('/time') +# def get_current_time(): +# return {'time': time.time()} + + +# @app.route('/process') +# def process(): +# global threads + +# thread_id = 1 +# threads[thread_id] = ProbingThread() +# threads[thread_id].start() +# return 'task id: #%s' % thread_id + +# @app.route('/model_progress') +# def model_progress(thread_id=1): +# global threads + +# return jsonify(threads[thread_id].model_loop_bar.format_dict) + +# @app.route('/task_progress') +# def task_progress(thread_id=1): +# global threads + +# return jsonify(threads[thread_id].task_loop_bar.format_dict) + +# @app.route('/probes_progress') +# def probes_progress(thread_id=1): +# global threads + +# return jsonify(threads[thread_id].probes_loop_bar.format_dict) + + +# @app.route('/results') +# def results(thread_id=1): +# global threads + +# return jsonify({"aux_tasks": threads[thread_id].results}) + +# app.run(port=8031, host="0.0.0.0") + +app.mount("/", StaticFiles(directory=build_dir, html = True), name="static") + +if __name__ == "__main__": + uvicorn.run(app, host="0.0.0.0", port=8000) \ No newline at end of file diff --git a/probe_ably/app/package.json b/probe_ably/app/package.json new file mode 100644 index 0000000..58211ea --- /dev/null +++ b/probe_ably/app/package.json @@ -0,0 +1,67 @@ +{ + "name": "frontend", + "version": "0.1.0", + "private": true, + "dependencies": { + "@fortawesome/fontawesome-free": "^5.15.3", + "@fortawesome/fontawesome-svg-core": "^1.2.36", + "@fortawesome/free-brands-svg-icons": "^5.15.4", + "@fortawesome/free-regular-svg-icons": "^5.15.4", + "@fortawesome/free-solid-svg-icons": "^5.15.4", + "@fortawesome/react-fontawesome": "^0.1.15", + "@nivo/bar": "^0.73.1", + "@nivo/core": "^0.73.0", + "@nivo/line": "^0.73.0", + "@nivo/scatterplot": "^0.73.0", + "@testing-library/jest-dom": "^5.14.1", + "@testing-library/react": "^12.0.0", + "@testing-library/user-event": "^13.2.1", + "@themesberg/react-bootstrap": "^1.4.1", + "bootstrap": "5.1.0", + "chartist": "^0.11.4", + "chartist-plugin-tooltips-updated": "^0.1.4", + "jspdf": "^2.3.1", + "moment-timezone": "^0.5.33", + "node-sass": "^6.0.1", + "react": "^17.0.2", + "react-chartist": "^0.14.4", + "react-copy-to-clipboard": "^5.0.4", + "react-datetime": "^3.0.4", + "react-dom": "^17.0.2", + "react-download-svg": "^0.0.4", + "react-github-btn": "^1.2.1", + "react-live": "^2.3.0", + "react-router-dom": "^5.2.0", + "react-router-hash-link": "^2.4.3", + "react-scripts": "4.0.3", + "react-transition-group": "^4.4.2", + "simplebar-react": "^2.3.5", + "svg2pdf.js": "^2.1.0", + "typescript": "^4.3.5" + }, + "scripts": { + "start": "react-scripts start", + "build": "react-scripts build", + "test": "react-scripts test", + "eject": "react-scripts eject" + }, + "eslintConfig": { + "extends": [ + "react-app", + "react-app/jest" + ] + }, + "browserslist": { + "production": [ + ">0.2%", + "not dead", + "not op_mini all" + ], + "development": [ + "last 1 chrome version", + "last 1 firefox version", + "last 1 safari version" + ] + }, + "devDependencies": {} +} diff --git a/probe_ably/app/public/android-chrome-192x192.png b/probe_ably/app/public/android-chrome-192x192.png new file mode 100644 index 0000000000000000000000000000000000000000..49ba83b385f508ac5ad370b69ff1575705530a7c GIT binary patch literal 11832 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 kzxUGjVh literal 0 HcmV?d00001 diff --git a/probe_ably/app/public/android-chrome-512x512.png b/probe_ably/app/public/android-chrome-512x512.png new file mode 100644 index 0000000000000000000000000000000000000000..c4d0ca3c08332d33e4054c014d60be91ce7b279d GIT binary patch literal 32392 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 HA?E)8W~*-- literal 0 HcmV?d00001 diff --git a/probe_ably/app/public/apple-touch-icon.png b/probe_ably/app/public/apple-touch-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..0a90cff347e2f3eb9cab7f73620c1f0255b7365d GIT binary patch literal 5617 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 literal 0 HcmV?d00001 diff --git a/probe_ably/app/public/browserconfig.xml b/probe_ably/app/public/browserconfig.xml new file mode 100644 index 0000000..d416bc5 --- /dev/null +++ b/probe_ably/app/public/browserconfig.xml @@ -0,0 +1,9 @@ + + + + + + #ffffff + + + diff --git a/probe_ably/app/public/favicon-16x16.png b/probe_ably/app/public/favicon-16x16.png new file mode 100644 index 0000000000000000000000000000000000000000..28549014e630678ccf38e0c39866ef767b2a79e3 GIT binary patch literal 1102 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJOS+@4BLl<6e(pbstU$g(vPY0F z14ES>14Ba#1H&(%P{RubhEf9thF1v;3|2E37{m+a>i@T-ZAgyWm=d?XIQd_F+Rxh5KXqw9WpD)KJ}pazsD}$;GJvMtFG>21 zsu!XRXu{*tWT1j?HK~{y?}J@(t0)Om3L^5TBK;7a`%fx>DdR79ooH5DU-KACZde(CwhrPtp z*OmP-I}5+8RE9{@1fbA4PZ!4!iOb0e51u|27Z4E=OH2_G6`npJWx}Ls6W6X>J9%<= zKuAznU}$nc@Yl&DZ7@ArcSy~yHX&V?>85lg>@gNaJLvDUbW?Cg~4O5;*+y!a~uL_AM2}&$i zC@9KL%gjktD5)$+RmdzTNoHWEnDh7(4@Y5`hQ=xX(`P)N1~D)zbL%B@3o8qIPZnVo zR&Z%BIh?|*yg5YS^o=Vgj+{9nbA!lvVtU&J%W50 z7^>757#dm_7=8hT8eT9klo~KFyh>nTu$sZZAYL$MSD+081Jm&UpAc7|g8%ht_llGL zH>ABNPrg$GWTf9MPI_39^q?f^Zc)-qfVNs!CaxoA|#zbzf#YP!}Bi ztxJ1WmJHMdG6zWPU!QiXC<*8upviCtz!gIna4tm6o{abhCCNa) z1A_>n5h$`ZGal#$pvgeRz-R)dE1-42H1oA4^=47h>xz^cg^Bk|l7U(-7bO0xPkUCL z4D=3AJ5bB5;-vHWiAS>&e$=MkC<6KMY+mA#?1b+%sqZRN{{R1fWMfSaFezUw3GxdD z(&&IqHGaj*tG+BuqQbmJ*{kpVeBCN(mNw^np;p`BxBvbg_hJ^a%2{;bLw)W0DMib! zeER!x@5w(uZZ1jD;S{NP@$1Px-_OUpeWaPJcl>_1qs3o^Q_q55u;lTNds`a36*(C7 z-Q?Lg110#5x-g%5+b+qirqA=wPcN$f;L~?s-uy}CIap!0&#lj9=kLF7&&&-KDwq^+ zD9EI+xkc=dD+_z46q~$z)!Losx8M8jb+U@NG}b|)`q{rPx8`V^`+TU)M}bwX;4{cm zj7i?^E^icfZk7ge*h@TpUD+SAv+&DG%L`|*0i~aMx;TbdoK8+)V03d!6bv*hlhc0nxr16F&6bo`SaIK5kxOH=RL5WdAhl5DOVvQX|UvIfuI0Qa;^XSzx zzL0{yY-X%-^WyH=?W_C87{2b#9@eS6JY0N@8XUab{T(KWDJcnEU45N8ea{U zR`04+*%lu)SL_W6zklH9*%LQzT)ETql5awj_FA{xx3Y6%@7l&0-4Ko0dFl4`dVY}& z!UjDFvn)85Jowk#-tWL@DH+Uoe#**s39SA4v3n$}c#U-`W;je_4EgZnrR&p|tT&jt zHM5SLiR4c^KhrwDPWjt`l%%K)1s5NwdQX4ImmL>pR~N&mx>d$9Fq!+LsCKxa;ltp7 z>eR1N6BL=wWM5D0EG+Q2w)Xyp!pqNeqqkRbKjz3f{MNecUDb~_i!SH6Ir6YpD>(lB z^YgIybiH>+d0y524o%>S+gD`Qpt|q7EQ=eP$HC9+>v!`da%v}}$k;K36nweyQCNMW zdd#vFuY#AKpJQA8uSp<8j^X)(zu9hIH(ds%0o4-Mh?11Vl2ohYqEsNoU}RuuscT@a zYhV&$Xli9-X=P-tZD3?&VBmcI^;HxNx%nxXX_dG&7)=V!1ZoJc3W+EQN-S3>D9TUE z%t=)!sVqoU$Sf#HW?-n8^Y{}FM`4(T#wq{PXFQ(m_pwD+_y17GV}vaA`0( xoWiWUIYi;~jVmXPoH-(Mg#C1b#{w@shF9W(C7+y3rvj~D@O1TaS?83{1ON>oL@NLQ literal 0 HcmV?d00001 diff --git a/probe_ably/app/public/favicon.ico b/probe_ably/app/public/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..266009f6f8f9880b9a7e1ef40aba5957cfaa9e07 GIT binary patch literal 15086 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 literal 0 HcmV?d00001 diff --git a/probe_ably/app/public/index.html b/probe_ably/app/public/index.html new file mode 100644 index 0000000..c2ab5e2 --- /dev/null +++ b/probe_ably/app/public/index.html @@ -0,0 +1,132 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Probe-Ably + + + + + + + +

+ + + diff --git a/probe_ably/app/public/logo192.png b/probe_ably/app/public/logo192.png new file mode 100644 index 0000000000000000000000000000000000000000..fc44b0a3796c0e0a64c3d858ca038bd4570465d9 GIT binary patch literal 5347 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 b{|{}U^kRn2wo}j7|0ATu<;8xA7zX}7|B6mN literal 0 HcmV?d00001 diff --git a/probe_ably/app/public/manifest.json b/probe_ably/app/public/manifest.json new file mode 100644 index 0000000..06327a2 --- /dev/null +++ b/probe_ably/app/public/manifest.json @@ -0,0 +1,20 @@ +{ + "name": "Probe-Ably", + "short_name": "Probe-Ably", + "icons": [ + { + "src": "/docs/4.3/assets/img/favicons/android-chrome-192x192.png", + "sizes": "192x192", + "type": "image/png" + }, + { + "src": "/docs/4.3/assets/img/favicons/android-chrome-512x512.png", + "sizes": "512x512", + "type": "image/png" + } + ], + "start_url": "/?utm_source=a2hs", + "theme_color": "#563d7c", + "background_color": "#563d7c", + "display": "standalone" +} diff --git a/probe_ably/app/public/mstile-150x150.png b/probe_ably/app/public/mstile-150x150.png new file mode 100644 index 0000000000000000000000000000000000000000..b22dd79932dd485c8fc8fec08107322625d3e188 GIT binary patch literal 5015 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 + + + +Created by potrace 1.11, written by Peter Selinger 2001-2013 + + + + + + + diff --git a/probe_ably/app/public/site.webmanifest b/probe_ably/app/public/site.webmanifest new file mode 100644 index 0000000..6cd5baa --- /dev/null +++ b/probe_ably/app/public/site.webmanifest @@ -0,0 +1,19 @@ +{ + "name": "Probe-Ably", + "short_name": "Probe-Ably", + "icons": [ + { + "src": "/android-chrome-192x192.png", + "sizes": "192x192", + "type": "image/png" + }, + { + "src": "/android-chrome-512x512.png", + "sizes": "512x512", + "type": "image/png" + } + ], + "theme_color": "#ffffff", + "background_color": "#ffffff", + "display": "standalone" +} diff --git a/probe_ably/app/src/assets/fireparrot.gif b/probe_ably/app/src/assets/fireparrot.gif new file mode 100644 index 0000000000000000000000000000000000000000..e25bd7166da02286986aab37511e235e0d46981d GIT binary patch literal 20040 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 { + const { title, probing_data, task_name } = props; + const linechartRefs = useRef([]); + + useEffect(() => { + linechartRefs.current = linechartRefs.current.slice(0, probing_data.length); + }, [probing_data]); + + return ( + + +
+
{title}
+
+ {/*
+ {probing_types.map((p_type, i) => ( + + ))} +
*/} +
+ + + {probing_data.map((p_data, i) => ( + + + +
{p_data.y_axis}
+
+
(linechartRefs.current[i] = el)} + style={{ height: 400 }} + className="ct-series-g ct-major-tent" + > + value.toExponential(2), + legendOffset: 60, + }} + axisLeft={{ + orient: "left", + tickSize: 5, + tickPadding: 5, + tickRotation: 0, + legend: p_data.y_axis, + legendPosition: "middle", + legendOffset: -60, + }} + legends={[ + { + anchor: "bottom-right", + direction: "column", + justify: false, + translateX: 130, + translateY: 0, + itemWidth: 100, + itemHeight: 12, + itemsSpacing: 5, + itemDirection: "left-to-right", + symbolSize: 12, + symbolShape: "circle", + effects: [ + { + on: "hover", + style: { + itemOpacity: 1, + }, + }, + ], + }, + ]} + /> +
+
+ + + +
+
+ + ))} +
+
+
+ ); +}; diff --git a/probe_ably/app/src/index.css b/probe_ably/app/src/index.css new file mode 100644 index 0000000..ec2585e --- /dev/null +++ b/probe_ably/app/src/index.css @@ -0,0 +1,13 @@ +body { + margin: 0; + font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen', + 'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue', + sans-serif; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +code { + font-family: source-code-pro, Menlo, Monaco, Consolas, 'Courier New', + monospace; +} diff --git a/probe_ably/service/src/index.js b/probe_ably/app/src/index.js similarity index 100% rename from probe_ably/service/src/index.js rename to probe_ably/app/src/index.js diff --git a/probe_ably/app/src/logo.svg b/probe_ably/app/src/logo.svg new file mode 100644 index 0000000..9dfc1c0 --- /dev/null +++ b/probe_ably/app/src/logo.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/probe_ably/app/src/pages/HomePage.js b/probe_ably/app/src/pages/HomePage.js new file mode 100644 index 0000000..ac302ea --- /dev/null +++ b/probe_ably/app/src/pages/HomePage.js @@ -0,0 +1,83 @@ +import { + Col, + Container, + Navbar, + Row, + Spinner, + Card, +} from "@themesberg/react-bootstrap"; +import React, { useEffect, useState } from "react"; +import Dashboard from "./dashboard/DashboardOverview"; +import ProbeControl from "./forms/ProbeControl"; +import Report from "./dashboard/Report.js" + +export default () => { + const [config, setConfig] = useState(null); + const [isProbing, setIsProbing] = useState(false); + const [results, setResults] = useState(null) + + const startProbing = () => { + var files = document.getElementById("config_file").files + var formData = new FormData(); + formData.append('config_file', files[0]) + fetch("/start_probing", {method: "POST", body: formData}) + .then(setIsProbing(true)) + } + + useEffect(() => { + const interval = setInterval(() => { + fetch("/results") + .then((res) => res.json()) + .then((data)=> {setResults(data.aux_tasks)}) + }, 1000); + return () => clearInterval(interval); + }, [results]); + + return ( +
+ + + ProBe-Ably + + + +
+ +
+ + {isProbing == false ? (<>) : ( + + +
+
Probing Results
+
+
+ + {results == null ? ( + + + + + Loading... + + + + + ) : ( + + )} +
)} +
+
+ ); + }; + \ No newline at end of file diff --git a/probe_ably/app/src/pages/dashboard/DashboardOverview.js b/probe_ably/app/src/pages/dashboard/DashboardOverview.js new file mode 100644 index 0000000..7be5ef0 --- /dev/null +++ b/probe_ably/app/src/pages/dashboard/DashboardOverview.js @@ -0,0 +1,54 @@ +import { Col, Nav, Row } from "@themesberg/react-bootstrap"; +import React, { useState } from "react"; +import LineChartWidget from "../../charts/LineChartWidget"; + +export default ({ aux_tasks }) => { + const [selectedTask, setSelectedTask] = useState(0); + return ( +
+
+ + + + + +
+ + {aux_tasks[selectedTask].probings.map((probe, i) => ( + + + + + + ))} +
+ ); +}; diff --git a/probe_ably/app/src/pages/dashboard/ProgressBar.js b/probe_ably/app/src/pages/dashboard/ProgressBar.js new file mode 100644 index 0000000..3b39970 --- /dev/null +++ b/probe_ably/app/src/pages/dashboard/ProgressBar.js @@ -0,0 +1,76 @@ +import React from "react"; +import fireparrot from "../../assets/fireparrot.gif" + +const ProgressBar = ({ taskProgress, modelProgress, probesProgress }) => { + + const containerStyles = { + height: 20, + width: '400px', + backgroundColor: "#e0e0de", + borderRadius: 50, + margin: 50 + } + + const taskFillerStyles = { + height: '100%', + width: `${(taskProgress.n * 100) / taskProgress.total}%`, + backgroundColor: 'green', + borderRadius: 'inherit', + textAlign: 'right', + transition: 'width 1s ease-in-out', + } + const modelFillerStyles = { + height: '100%', + width: `${(modelProgress.n * 100) / modelProgress.total}%`, + backgroundColor: 'red', + borderRadius: 'inherit', + textAlign: 'right', + transition: 'width 1s ease-in-out', + } + const probesFillerStyles = { + height: '100%', + width: `${(probesProgress.n * 100) / probesProgress.total}%`, + backgroundColor: 'red', + borderRadius: 'inherit', + textAlign: 'right', + transition: 'width 1s ease-in-out', + } + + const labelStyles = { + color: 'white', + fontWeight: 'bold', + height: '90%', + paddingRight: '3px', + } + const imgStyle = { + paddingRight: '3px', + height: '90%', + } + + + return ( + + <> +
"Tasks:"
+
+
+ {`${taskProgress.n}/${taskProgress.total}`} +
+
+
"Representations:"
+
+
+ {`${modelProgress.n}/${modelProgress.total}`} +
+
+
"Training Probes:"
+
+
+ {`${probesProgress.n}/${probesProgress.total}`} +
+
+ + ); +}; + +export default ProgressBar; diff --git a/probe_ably/app/src/pages/dashboard/Report.js b/probe_ably/app/src/pages/dashboard/Report.js new file mode 100644 index 0000000..ff0461e --- /dev/null +++ b/probe_ably/app/src/pages/dashboard/Report.js @@ -0,0 +1,44 @@ +import React, { useEffect, useState } from "react"; +import ProgressBar from "./ProgressBar" + +const Report = () => { + + const [taskProgress, setTaskProgress] = useState(0) + const [modelProgress, setModelProgress] = useState(0) + const [probesProgress, setProbesProgress] = useState(0) + + useEffect(() => { + const interval = setInterval(() => { + fetch("/task_progress") + .then((prog_data)=> prog_data.json()) + .then((prog)=>{setTaskProgress(prog)}); + }, 500); + + return () => clearInterval(interval); + }, []); + + useEffect(() => { + const interval = setInterval(() => { + fetch("/model_progress") + .then((prog_data)=> prog_data.json()) + .then((prog)=>{setModelProgress(prog)}); + }, 500); + return () => clearInterval(interval); + }, []); + + useEffect(() => { + const interval = setInterval(() => { + fetch("/probes_progress") + .then((prog_data)=> prog_data.json()) + .then((prog)=>{setProbesProgress(prog)}); + }, 500); + return () => clearInterval(interval); + }, []); + + + return ( + + ) + } + +export default Report diff --git a/probe_ably/app/src/pages/forms/Button.js b/probe_ably/app/src/pages/forms/Button.js new file mode 100644 index 0000000..930cf05 --- /dev/null +++ b/probe_ably/app/src/pages/forms/Button.js @@ -0,0 +1,11 @@ +import React from 'react'; + +const Button = ({ text, onClick }) => { + + +return ( + +) +} + +export default Button diff --git a/probe_ably/app/src/pages/forms/ConfigurationForm.js b/probe_ably/app/src/pages/forms/ConfigurationForm.js new file mode 100644 index 0000000..ead0f18 --- /dev/null +++ b/probe_ably/app/src/pages/forms/ConfigurationForm.js @@ -0,0 +1,90 @@ +import { Button, Card, Col, Form, Row } from "@themesberg/react-bootstrap"; +import React, { useState } from "react"; + +export default () => { + const [tasks, setTasks] = useState([{ task_name: "task_name" }]); + + return ( +
+ + +
+ + Task Name + + + +
+ +
+ + {tasks.map((task_data, i) => ( + + + +
+
{task_data.task_name}
+
+ + + +
+ +
+ + Model Name + + + + + Representations + + + + + Representations Labels + + + + Control Task Class + + + +
+
+
+
+ ))} + + + + + + + +
+ ); +}; diff --git a/probe_ably/app/src/pages/forms/ProbeControl.js b/probe_ably/app/src/pages/forms/ProbeControl.js new file mode 100644 index 0000000..181be7b --- /dev/null +++ b/probe_ably/app/src/pages/forms/ProbeControl.js @@ -0,0 +1,30 @@ +import React from "react"; +import { + Button, + ButtonGroup, + Card, + Col, + Row, + Form, +} from "@themesberg/react-bootstrap"; + +const ProbeControl = ({ control }) => { + return( + + +
+ Choose Config File (JSON): + +
+ +
+
+ ) +} + +export default ProbeControl diff --git a/probe_ably/app/src/react-app-env.d.ts b/probe_ably/app/src/react-app-env.d.ts new file mode 100644 index 0000000..6431bc5 --- /dev/null +++ b/probe_ably/app/src/react-app-env.d.ts @@ -0,0 +1 @@ +/// diff --git a/probe_ably/app/src/reportWebVitals.js b/probe_ably/app/src/reportWebVitals.js new file mode 100644 index 0000000..5253d3a --- /dev/null +++ b/probe_ably/app/src/reportWebVitals.js @@ -0,0 +1,13 @@ +const reportWebVitals = onPerfEntry => { + if (onPerfEntry && onPerfEntry instanceof Function) { + import('web-vitals').then(({ getCLS, getFID, getFCP, getLCP, getTTFB }) => { + getCLS(onPerfEntry); + getFID(onPerfEntry); + getFCP(onPerfEntry); + getLCP(onPerfEntry); + getTTFB(onPerfEntry); + }); + } +}; + +export default reportWebVitals; diff --git a/probe_ably/app/src/scss/volt.scss b/probe_ably/app/src/scss/volt.scss new file mode 100644 index 0000000..71523b9 --- /dev/null +++ b/probe_ably/app/src/scss/volt.scss @@ -0,0 +1,45 @@ +// ========================================================= +// * Volt React Dashboard +// ========================================================= + +// * Product Page: https://themesberg.com/product/dashboard/volt-react +// * Copyright 2021 Themesberg (https://www.themesberg.com) +// * Official Repository: https://github.com/themesberg/volt-react-dashboard +// * License: MIT License (https://themesberg.com/licensing) + +// * Designed and coded by https://themesberg.com + +// ========================================================= + +// * The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. Please contact us to request a removal. + +@import url('https://fonts.googleapis.com/css?family=Nunito+Sans:300,400,600,700,800&display=swap'); + +// Bootstrap mixins and functions +@import "../../node_modules/bootstrap/scss/mixins"; +@import "../../node_modules/bootstrap/scss/functions"; + +// Change variables here +@import "volt/variables"; + +// Bootstrap +@import "../../node_modules/bootstrap/scss/bootstrap"; + +// Vendor +@import "volt/vendor"; + +// volt mixins & functions +@import "volt/mixins"; +@import "volt/functions"; + +// Utilities +@import "volt/reboot"; +@import "volt/utilities"; + +// Layout +@import "volt/layout"; + +// Components +@import "volt/components"; + +// write your custom styles here! \ No newline at end of file diff --git a/probe_ably/app/src/scss/volt/_components.scss b/probe_ably/app/src/scss/volt/_components.scss new file mode 100644 index 0000000..0256cbd --- /dev/null +++ b/probe_ably/app/src/scss/volt/_components.scss @@ -0,0 +1,33 @@ +@import "components/accordions"; +@import "components/alerts"; +@import "components/avatars"; +@import "components/badge"; +@import "components/buttons"; +@import "components/breadcrumb"; +@import "components/blog-cards"; +@import "components/card"; +@import "components/carousel"; +@import "components/close"; +@import "components/counters"; +@import "components/custom-forms"; +@import "components/charts"; +@import "components/dropdown"; +@import "components/dropzone"; +@import "components/forms"; +@import "components/icon-box"; +@import "components/images"; +@import "components/input-group"; +@import "components/list-group"; +@import "components/modal"; +@import "components/nav"; +@import "components/pagination"; +@import "components/pricing-cards"; +@import "components/popover"; +@import "components/progress"; +@import "components/shapes"; +@import "components/tables"; +@import "components/type"; +@import "components/timelines"; +@import "components/tooltip"; +@import "components/preloader"; +@import "components/scrollbar"; diff --git a/probe_ably/app/src/scss/volt/_functions.scss b/probe_ably/app/src/scss/volt/_functions.scss new file mode 100644 index 0000000..91971a5 --- /dev/null +++ b/probe_ably/app/src/scss/volt/_functions.scss @@ -0,0 +1,23 @@ +// Retrieve color Sass maps + +@function section-color($key: "primary") { + @return map-get($section-colors, $key); +} + +// Lines colors + +@function shapes-primary-color($key: "step-1-gradient-bg") { + @return map-get($shapes-primary-colors, $key); +} + +@function shapes-default-color($key: "step-1-gradient-bg") { + @return map-get($shapes-default-colors, $key); +} + +@function lines-light-color($key: "step-1-gradient-bg") { + @return map-get($shapes-light-colors, $key); +} + +@function shapes-dark-color($key: "step-1-gradient-bg") { + @return map-get($shapes-dark-colors, $key); +} \ No newline at end of file diff --git a/probe_ably/app/src/scss/volt/_layout.scss b/probe_ably/app/src/scss/volt/_layout.scss new file mode 100644 index 0000000..f687e04 --- /dev/null +++ b/probe_ably/app/src/scss/volt/_layout.scss @@ -0,0 +1,5 @@ +@import "layout/navbar"; +@import "layout/section"; +@import "layout/footer"; +@import "layout/sidebar"; +@import "layout/sidenav"; diff --git a/probe_ably/app/src/scss/volt/_mixins.scss b/probe_ably/app/src/scss/volt/_mixins.scss new file mode 100644 index 0000000..f1cec7e --- /dev/null +++ b/probe_ably/app/src/scss/volt/_mixins.scss @@ -0,0 +1,7 @@ +@import "mixins/animations"; +@import "mixins/background-variant"; +@import "mixins/icon"; +@import "mixins/modals"; +@import "mixins/popover"; +@import "mixins/transform"; +@import "mixins/utilities"; diff --git a/probe_ably/app/src/scss/volt/_reboot.scss b/probe_ably/app/src/scss/volt/_reboot.scss new file mode 100644 index 0000000..a61af84 --- /dev/null +++ b/probe_ably/app/src/scss/volt/_reboot.scss @@ -0,0 +1,30 @@ +iframe { + border: 0; +} + +figcaption, +figure, +main { + display: block; + margin: 0; +} + +main { + overflow: hidden; +} + +img { + max-width: 100%; +} + +strong{ + font-weight: $font-weight-bold; +} + +button:focus { + outline: 0; +} + +label{ + font-weight: $font-weight-bold; +} \ No newline at end of file diff --git a/probe_ably/app/src/scss/volt/_utilities.scss b/probe_ably/app/src/scss/volt/_utilities.scss new file mode 100644 index 0000000..ab64de1 --- /dev/null +++ b/probe_ably/app/src/scss/volt/_utilities.scss @@ -0,0 +1,8 @@ +@import "utilities/backgrounds"; +@import "utilities/helper"; +@import "utilities/position"; +@import "utilities/sizing"; +@import "utilities/shadows"; +@import "utilities/text"; +@import "utilities/transform"; +@import "utilities/animations"; diff --git a/probe_ably/app/src/scss/volt/_variables.scss b/probe_ably/app/src/scss/volt/_variables.scss new file mode 100644 index 0000000..2abacec --- /dev/null +++ b/probe_ably/app/src/scss/volt/_variables.scss @@ -0,0 +1,1681 @@ +// Variables +// +// Variables should follow the `$component-state-property-size` formula for +// consistent naming. Ex: $nav-link-disabled-color and $modal-content-box-shadow-xs. + +// Color system + +// Shades of grey +$white: #ffffff; +$gray-100: #f3f7fa; +$gray-200: #f5f8fb; +$gray-300: #F0F3F6; +$gray-400: #eaedf2; +$gray-500: #d1d7e0; +$gray-600: #93a5be; +$gray-700: #66799e; +$gray-800: #506690; +$gray-900: #4A5073; +$dark : #262B40; +$black : #2e3650; + +// fusv-disable +$grays: ( + "100": $gray-100, + "200": $gray-200, + "300": $gray-300, + "400": $gray-400, + "500": $gray-500, + "600": $gray-600, + "700": $gray-700, + "800": $gray-800, + "900": $gray-900 +); +// fusv-enable + +// Generic colors +$blue: #0948B3; +$indigo: #4c5680; +$purple: #8965e0; +$pink: #C96480; +$red: #FA5252; +$orange: #FF9F89; +$brown: #b9a084; +$yellow: #f5b759; +$yellow-alt:#fde9ca; +$green: #05A677; +$teal: #1E90FF; +$cyan: #63b1bd; +$soft-indigo:#f5e8ff; +$soft-green: #2CA58D; + +// scss-docs-start colors-map +$colors: ( + "blue": $blue, + "indigo": $indigo, + "purple": $purple, + "pink": $pink, + "red": $red, + "orange": $orange, + "yellow": $yellow, + "green": $green, + "teal": $teal, + "cyan": $cyan, + "white": $white, + "gray": $gray-600, + "gray-dark": $gray-800 +); +// scss-docs-end colors-map + +// Color scheme +$default: #262B40; +$primary: #262B40; +$secondary: #61DAFB; +$tertiary: #1B998B; +$quaternary: #C96480; + +// Series names and colors. This can be extended or customized as desired. Just add more series and colors. +$ct-series-names: (a, b, c, d, e, f, g) !default; +$ct-series-colors: ( + #1B998B, + #17a5ce, + #262B40, + #f5b759, + #C96480, + #ffffff, + #17a5ce, + +); + +// Mobile landing color scheme +$primary-app: #EBF4F6; +$secondary-app: #424AA0; + +$success: $green; +$info: $blue; +$warning: $yellow; +$danger: $red; +$gray: $gray-900; +$light: $gray-400; +$lighten: $gray-300; +$soft: $gray-200; +$dark: $dark; + +// Brands colors +$facebook: #3b5999; +$twitter: #1da1f2; +$google: #DB4337; +$instagram: #e4405f; +$pinterest: #bd081c; +$youtube: #cd201f; +$slack: #3aaf85; +$dribbble: #ea4c89; +$github: #222222; +$dropbox: #1E90FF; +$twitch: #4B367C; +$paypal: #ecb32c; +$behance: #0057ff; +$reddit: #E84422; + +// Brand colors +$brand-colors: (); +$brand-colors: map-merge(( + "facebook": $facebook, + "twitter": $twitter, + "google": $google, + "instagram": $instagram, + "pinterest": $pinterest, + "youtube": $youtube, + "slack": $slack, + "dribbble": $dribbble, + "dropbox": $dropbox, + "twitch": $twitch, + "paypal": $paypal, + "behance": $behance, + "reddit" : $reddit, + "github": $github +), $brand-colors); + +// Theme colors +$theme-colors: (); +$theme-colors: map-merge(( + "primary": $primary, + "secondary": $secondary, + "tertiary": $tertiary, + "quaternary": $quaternary, + "primary-app": $primary-app, + "secondary-app": $secondary-app, + "light": $light, + "lighten": $lighten, + "success": $success, + "info": $info, + "warning": $warning, + "danger": $danger, + "white": $white, + "gray": $gray, + "indigo": $indigo, + "dark": $dark, + "soft": $soft, + "black": $black, + "blue": $blue, + "pink": $pink, + "cyan": $cyan, + "purple": $purple, + "soft-indigo": $soft-indigo, + "soft-green": $soft-green, + "gray-100": $gray-100, + "gray-200": $gray-200, + "gray-300": $gray-300, + "gray-400": $gray-400, + "gray-500": $gray-500, + "gray-600": $gray-600, + "gray-700": $gray-700, + "gray-800": $gray-800, + "facebook": $facebook, + "twitter": $twitter, + "google": $google, + "instagram": $instagram, + "pinterest": $pinterest, + "youtube": $youtube, + "slack": $slack, + "dribbble": $dribbble, + "dropbox": $dropbox, + "twitch": $twitch, + "paypal": $paypal, + "behance": $behance, + "reddit" : $reddit, + "github": $github +), $theme-colors); + + +// Set a specific jump point for requesting color jumps +$theme-color-interval: 8%; + +// The contrast ratio to reach against white, to determine if color changes from "light" to "dark". Acceptable values for WCAG 2.0 are 3, 4.5 and 7. +// See https://www.w3.org/TR/WCAG20/#visual-audio-contrast-contrast +$min-contrast-ratio: 3; + +// Customize the light and dark text colors for use in our color contrast function. +$color-contrast-dark: $dark; +$color-contrast-light: $white; + +// fusv-disable +$blue-100: tint-color($blue, 8); +$blue-200: tint-color($blue, 6); +$blue-300: tint-color($blue, 4); +$blue-400: tint-color($blue, 2); +$blue-500: $blue; +$blue-600: shade-color($blue, 2); +$blue-700: shade-color($blue, 4); +$blue-800: shade-color($blue, 6); +$blue-900: shade-color($blue, 8); + +$indigo-100: tint-color($indigo, 8); +$indigo-200: tint-color($indigo, 6); +$indigo-300: tint-color($indigo, 4); +$indigo-400: tint-color($indigo, 2); +$indigo-500: $indigo; +$indigo-600: shade-color($indigo, 2); +$indigo-700: shade-color($indigo, 4); +$indigo-800: shade-color($indigo, 6); +$indigo-900: shade-color($indigo, 8); + +$purple-100: tint-color($purple, 8); +$purple-200: tint-color($purple, 6); +$purple-300: tint-color($purple, 4); +$purple-400: tint-color($purple, 2); +$purple-500: $purple; +$purple-600: shade-color($purple, 2); +$purple-700: shade-color($purple, 4); +$purple-800: shade-color($purple, 6); +$purple-900: shade-color($purple, 8); + +$pink-100: tint-color($pink, 8); +$pink-200: tint-color($pink, 6); +$pink-300: tint-color($pink, 4); +$pink-400: tint-color($pink, 2); +$pink-500: $pink; +$pink-600: shade-color($pink, 2); +$pink-700: shade-color($pink, 4); +$pink-800: shade-color($pink, 6); +$pink-900: shade-color($pink, 8); + +$red-100: tint-color($red, 8); +$red-200: tint-color($red, 6); +$red-300: tint-color($red, 4); +$red-400: tint-color($red, 2); +$red-500: $red; +$red-600: shade-color($red, 2); +$red-700: shade-color($red, 4); +$red-800: shade-color($red, 6); +$red-900: shade-color($red, 8); + +$orange-100: tint-color($orange, 8); +$orange-200: tint-color($orange, 6); +$orange-300: tint-color($orange, 4); +$orange-400: tint-color($orange, 2); +$orange-500: $orange; +$orange-600: shade-color($orange, 2); +$orange-700: shade-color($orange, 4); +$orange-800: shade-color($orange, 6); +$orange-900: shade-color($orange, 8); + +$yellow-100: tint-color($yellow, 8); +$yellow-200: tint-color($yellow, 6); +$yellow-300: tint-color($yellow, 4); +$yellow-400: tint-color($yellow, 2); +$yellow-500: $yellow; +$yellow-600: shade-color($yellow, 2); +$yellow-700: shade-color($yellow, 4); +$yellow-800: shade-color($yellow, 6); +$yellow-900: shade-color($yellow, 8); + +$green-100: tint-color($green, 8); +$green-200: tint-color($green, 6); +$green-300: tint-color($green, 4); +$green-400: tint-color($green, 2); +$green-500: $green; +$green-600: shade-color($green, 2); +$green-700: shade-color($green, 4); +$green-800: shade-color($green, 6); +$green-900: shade-color($green, 8); + +$teal-100: tint-color($teal, 8); +$teal-200: tint-color($teal, 6); +$teal-300: tint-color($teal, 4); +$teal-400: tint-color($teal, 2); +$teal-500: $teal; +$teal-600: shade-color($teal, 2); +$teal-700: shade-color($teal, 4); +$teal-800: shade-color($teal, 6); +$teal-900: shade-color($teal, 8); + +$cyan-100: tint-color($cyan, 8); +$cyan-200: tint-color($cyan, 6); +$cyan-300: tint-color($cyan, 4); +$cyan-400: tint-color($cyan, 2); +$cyan-500: $cyan; +$cyan-600: shade-color($cyan, 2); +$cyan-700: shade-color($cyan, 4); +$cyan-800: shade-color($cyan, 6); +$cyan-900: shade-color($cyan, 8); +// fusv-enable + +// Characters which are escaped by the escape-svg function +$escaped-characters: ( + ("<","%3c"), + (">","%3e"), + ("#","%23"), + ("(","%28"), + (")","%29"), +); + +// Options +// +// Quickly modify global styling by enabling or disabling optional features. + +$enable-caret: true; +$enable-rounded: true; +$enable-shadows: true; +$enable-gradients: false; +$enable-transitions: true; +$enable-reduced-motion: true; +$enable-grid-classes: true; +$enable-button-pointers: true; +$enable-rfs: true; +$enable-validation-icons: true; +$enable-negative-margins: true; +$enable-deprecation-messages: true; +$enable-important-utilities: true; +$enable-smooth-scroll: false; + +// Gradient +// +// The gradient which is added to components if `$enable-gradients` is `true` +// This gradient is also added to elements with `.bg-gradient` +$gradient: linear-gradient(180deg, rgba($white, .15), rgba($white, 0)); + +// Spacing +// +// Control the default styling of most Bootstrap elements by modifying these +// variables. Mostly focused on spacing. +// You can add more entries to the $spacers map, should you need more variation. + +$spacer: 1rem; +$spacers: ( + 0: 0, +1: $spacer / 4, + 2: $spacer / 2, + 3: $spacer, + 4: $spacer * 1.5, + 5: $spacer * 3, + 6: ($spacer * 5), + 7: ($spacer * 8), + 8: ($spacer * 10), + 9: ($spacer * 11), + 10: ($spacer * 14), + 11: ($spacer * 16), + 12: ($spacer * 20), + 'sm': ($spacer * 1), + 'md': ($spacer * 2), + 'lg': ($spacer * 4), + 'xl': ($spacer * 8) +); + +$negative-spacers: if($enable-negative-margins, negativify-map($spacers), null); + +// Body +// +// Settings for the `` element. + +$body-bg: $soft; +$body-color: $gray-900; +$body-text-align: null; + + +// Links +// +// Style anchor elements. + +$link-color: $primary; +$link-decoration: none; +$link-hover-color: darken($link-color, 15%); +$link-hover-decoration: null; +// Darken percentage for links with `.text-*` class (e.g. `.text-success`) +$emphasized-link-hover-darken-percentage: 15%; + +$stretched-link-pseudo-element: after; +$stretched-link-z-index: 1; + +// Paragraphs +// +// Style p element. + +$paragraph-margin-bottom: 1rem; + + +// Grid breakpoints +// +// Define the minimum dimensions at which your layout will change, +// adapting to different screen sizes, for use in media queries. + +// scss-docs-start grid-breakpoints +$grid-breakpoints: ( + xs: 0, + sm: 576px, + md: 768px, + lg: 992px, + xl: 1200px, + xxl: 1400px +); +// scss-docs-end grid-breakpoints + +@include _assert-ascending($grid-breakpoints, "$grid-breakpoints"); +@include _assert-starts-at-zero($grid-breakpoints, "$grid-breakpoints"); + + +// Grid containers +// +// Define the maximum width of `.container` for different screen sizes. + +// scss-docs-start container-max-widths +$container-max-widths: ( + sm: 540px, + md: 720px, + lg: 960px, + xl: 1200px +); +// scss-docs-end container-max-widths + +@include _assert-ascending($container-max-widths, "$container-max-widths"); + + +// Grid columns +// +// Set the number of columns and specify the width of the gutters. + +$grid-columns: 12; +$grid-gutter-width: 1.5rem; +$grid-row-columns: 6; + +$gutters: $spacers; + +// Container padding + +$container-padding-x: 2rem; + + +// Components +// +// Define common padding and border radius sizes and more. + +$border-width: .0625rem; +$border-width-md: 0.125rem; +$border-width-lg: 0.25rem; +$border-width-xl: 0.375rem; +$border-color-white: $white; +$border-color: $light; + +$border-radius: .5rem; +$border-radius-xl: .875rem; +$border-radius-lg: .3rem; +$border-radius-md: .2rem; +$border-radius-sm: .1rem; +$border-radius-pill: 2rem; +$circle-radius: 50%; +$organic-radius: 63% 37% 30% 70% / 50% 45% 55% 50%; + +$component-active-color: $white; +$component-active-bg: $primary; +$component-active-border-color: $primary; + +$component-hover-color: $gray-300; +$component-hover-bg: $gray-300; +$component-hover-border-color: $gray-300; + +$rounded-pill: 50rem; + +$box-shadow: 0 .5rem 1rem rgba($black, .15); +$box-shadow-sm: 0 2px 18px rgba(0, 0, 0, 0.02); +$box-shadow-lg: 0 1rem 3rem rgba($black, .175); +$box-shadow-inset: inset 0 1px 2px rgba($black, .075); + +$component-active-color: $white; +$component-active-bg: $primary; + +$caret-width: .3em; +$caret-vertical-align: $caret-width * .85; +$caret-spacing: $caret-width * .85; + +$transition-base: all .2s ease; +$transition-transform: transform .2s ease; +$transition-fade: opacity .15s linear; +$transition-collapse: height .35s ease; +$transition-tabs: all 0.2s; + +// scss-docs-start embed-responsive-aspect-ratios +$embed-responsive-aspect-ratios: ( + "21by9": ( + x: 21, + y: 9 + ), + "16by9": ( + x: 16, + y: 9 + ), + "4by3": ( + x: 4, + y: 3 + ), + "1by1": ( + x: 1, + y: 1 + ) +); +// scss-docs-end embed-responsive-aspect-ratios + +// Typography +// +// Font, line-height, and color for body text, headings, and more. + +// font awesome +$fontawesome-webfonts-path: '../vendor/font-awesome/webfonts'; +$font-awesome-5: 'Font Awesome 5 Free'; + +// stylelint-disable value-keyword-case +$font-family-sans-serif: 'Nunito Sans', sans-serif; +// stylelint-enable value-keyword-case +$font-family-base: var(--bs-font-sans-serif); +$font-family-code: var(--bs-font-monospace); + +// $font-size-root effects the value of `rem`, which is used for as well font sizes, paddings and margins +// $font-size-base effects the font size of the body text +$font-size-root: null; +$font-size-base: 1rem; // Assumes the browser default, typically `16px` +$font-size-xs: ($font-size-base * .75); +$font-size-sm: ($font-size-base * .875); +$font-size-md: ($font-size-base * 1); +$font-size-lg: ($font-size-base * 1.25); +$font-size-xl: ($font-size-base * 1.5); +$font-size-xxl: ($font-size-base * 2); + +$font-weight-light: 300; +$font-weight-normal: 400; +$font-weight-bold: 600; +$font-weight-bolder: 700; +$font-weight-extreme: 800; + +$font-weight-base: $font-weight-normal; + +$line-height-base: 1.5; +$line-height-sm: 1.25; +$line-height-lg: 2; + +$h1-font-size: $font-size-base * 2.5; +$h2-font-size: $font-size-base * 2; +$h3-font-size: $font-size-base * 1.75; +$h4-font-size: $font-size-base * 1.5; +$h5-font-size: $font-size-base * 1.25; +$h6-font-size: $font-size-base; + +$headings-margin-bottom: $spacer / 2; +$headings-font-family: null; +$headings-font-style: null; +$headings-font-weight: $font-weight-bold; +$headings-line-height: 1.3; +$headings-color: $dark; + +// Display headings +$display1-size: 5rem; +$display2-size: 3.5rem; +$display3-size: 2.5rem; +$display4-size: 1.875rem; + +// scss-docs-start display-headings +$display-font-sizes: ( + 1: 5rem, + 2: 3.5rem, + 3: 2.5rem, + 4: 1.875rem, + 5: 1.2rem, + 6: 1rem +); + +$font-sizes: ( + 1: $h1-font-size, + 2: $h2-font-size, + 3: $h3-font-size, + 4: $h4-font-size, + 5: $h5-font-size, + 6: $h6-font-size, + 7: .9rem +); + +$display-font-weight: $font-weight-bold; +$display-line-height: $headings-line-height; +// scss-docs-end display-headings + +$paragraph-font-size: 1rem; +$paragraph-font-weight: 300; +$paragraph-line-height: 1.6; + +$lead-font-size: $font-size-base * 1.25; +$lead-font-weight: 300; + +$small-font-size: .875em; + +$sub-sup-font-size: .75em; + +$text-muted: #58677d; + +$initialism-font-size: $small-font-size; + +$blockquote-margin-y: $spacer; +$blockquote-font-size: $font-size-base * 1.25; +$blockquote-footer-color: $gray-600; +$blockquote-footer-font-size: $small-font-size; + +$hr-margin-y: $spacer; +$hr-color: inherit; +$hr-height: $border-width; +$hr-opacity: .25; + +$legend-margin-bottom: .5rem; +$legend-font-size: 1.5rem; +$legend-font-weight: null; + +$mark-padding: .2em; + +$dt-font-weight: $font-weight-bold; + +$nested-kbd-font-weight: $font-weight-bold; + +$list-inline-padding: .5rem; + +$mark-bg: #fcf8e3; + + +// Tables +// +// Customizes the `.table` component with basic values, each used across all table variations. + +// scss-docs-start table-variables +$table-cell-padding-y: .75rem; +$table-cell-padding-x: .5rem; +$table-cell-padding-y-sm: .25rem; +$table-cell-padding-x-sm: .25rem; + +$table-cell-vertical-align: top; + +$table-color: $body-color; +$table-bg: transparent; + +$table-striped-color: $table-color; +$table-striped-bg-factor: .05; +$table-striped-bg: rgba($black, $table-striped-bg-factor); + +$table-active-color: $table-color; +$table-active-bg-factor: .1; +$table-active-bg: rgba($black, $table-active-bg-factor); + +$table-hover-color: $table-color; +$table-hover-bg-factor: .075; +$table-hover-bg: rgba($black, $table-hover-bg-factor); + +$table-border-factor: .1; +$table-border-width: $border-width; +$table-border-color: $border-color; + +$table-striped-order: odd; + +$table-group-seperator-color: $light; + +$table-caption-color: $text-muted; + +$table-bg-level: -9; + +$table-head-spacer-y: .75rem; +$table-head-spacer-x: 1rem; +$table-head-font-size: .75rem; +$table-head-text-transform: uppercase; +$table-body-font-size: $font-size-sm; + +$table-variants: ( + "primary": $primary, + "secondary": $secondary, + "success": $success, + "info": $info, + "warning": $warning, + "danger": $danger, + "light": $light, + "dark": $dark, +); +// scss-docs-end table-variables + + +// Buttons + Forms +// +// Shared variables that are reassigned to `$input-` and `$btn-` specific variables. + +$input-btn-padding-y: .55rem; +$input-btn-padding-x: .75rem; +$input-btn-font-family: null; +$input-btn-font-size: $font-size-base; +$input-btn-line-height: $line-height-base; + +$input-btn-focus-width: .2rem; +$input-btn-focus-color-opacity: .25; +$input-btn-focus-color: rgba($component-active-bg, $input-btn-focus-color-opacity); +$input-btn-focus-box-shadow: 0 0 0 $input-btn-focus-width $input-btn-focus-color; + +$input-btn-padding-y-sm: .25rem; +$input-btn-padding-x-sm: .5rem; +$input-btn-font-size-sm: $font-size-sm; + +$input-btn-padding-y-lg: .5rem; +$input-btn-padding-x-lg: 1rem; +$input-btn-font-size-lg: $font-size-lg; + +$input-btn-border-width: $border-width; + +$shadow-input: $box-shadow; +$shadow-input-focus: .1rem .1rem 0 rgba($gray-200,.5); + + +// Buttons +// +// For each of Bootstrap's buttons, define text, background, and border color. + +$btn-padding-y: $input-btn-padding-y; +$btn-padding-x: $input-btn-padding-x; +$btn-font-family: $input-btn-font-family; +$btn-font-size: $input-btn-font-size; +$btn-line-height: $input-btn-line-height; +$btn-white-space: null; // Set to `nowrap` to prevent text wrapping + +$btn-padding-y-sm: $input-btn-padding-y-sm; +$btn-padding-x-sm: $input-btn-padding-x-sm; +$btn-font-size-sm: $input-btn-font-size-sm; + +$btn-padding-y-lg: $input-btn-padding-y-lg; +$btn-padding-x-lg: $input-btn-padding-x-lg; +$btn-font-size-lg: $input-btn-font-size-lg; + +$btn-border-width: $input-btn-border-width; + +$btn-font-weight: $font-weight-bold; +$btn-box-shadow: inset 0 1px 0 rgba($white, .15), 0 1px 1px rgba($black, .075); +$btn-focus-width: $input-btn-focus-width; +$btn-focus-box-shadow: $input-btn-focus-box-shadow; +$btn-disabled-opacity: .65; +$btn-active-box-shadow: inset 0 3px 5px rgba($black, .125); + +$btn-link-color: $link-color; +$btn-link-hover-color: $link-hover-color; +$btn-link-disabled-color: $gray-600; + +$btn-block-spacing-y: .5rem; + +// Allows for customizing button radius independently from global border radius +$btn-border-radius: $border-radius; +$btn-border-radius-sm: $border-radius; +$btn-border-radius-lg: $border-radius-lg; + +$btn-transition: color .15s ease-in-out, background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out; + + +// Forms + +$form-text-margin-top: .25rem; +$form-text-font-size: $small-font-size; +$form-text-font-style: null; +$form-text-font-weight: null; +$form-text-color: $text-muted; + +$form-label-margin-bottom: .5rem; +$form-label-font-size: null; +$form-label-font-style: null; +$form-label-font-weight: null; +$form-label-color: null; + +$input-padding-y: $input-btn-padding-y; +$input-padding-x: $input-btn-padding-x; +$inpu-lg-padding-y: 1rem; +$input-font-family: $input-btn-font-family; +$input-font-size: $input-btn-font-size; +$input-font-weight: $font-weight-base; +$input-line-height: $input-btn-line-height; + +$input-padding-y-sm: $input-btn-padding-y-sm; +$input-padding-x-sm: $input-btn-padding-x-sm; +$input-font-size-sm: $input-btn-font-size-sm; + +$input-padding-y-lg: $input-btn-padding-y-lg; +$input-padding-x-lg: $input-btn-padding-x-lg; +$input-font-size-lg: $input-btn-font-size-lg; + +$input-bg: $white; +$input-disabled-bg: $gray-200; +$input-disabled-border-color: null; + +$input-color: $gray-700; +$input-border-color: $gray-500; +$input-border-width: $input-btn-border-width; +$input-box-shadow: $box-shadow-inset; + +$input-border-radius: $border-radius; +$input-border-radius-sm: $border-radius-sm; +$input-border-radius-lg: $border-radius-lg; + +$input-focus-bg: $input-bg; +$input-focus-border-color: lighten($component-active-bg, 25%); +$input-focus-color: $input-color; +$input-focus-width: $input-btn-focus-width; +$input-focus-box-shadow: $input-btn-focus-box-shadow; + +$input-placeholder-color: $gray-600; +$input-plaintext-color: $body-color; + +$input-height-border: $input-border-width * 2; + +$input-height-inner: add($input-line-height * 1em, $input-padding-y * 2); +$input-height-inner-half: add($input-line-height * .5em, $input-padding-y); +$input-height-inner-quarter: add($input-line-height * .25em, $input-padding-y / 2); + +$input-height: add($input-line-height * 1em, add($input-padding-y * 2, $input-height-border, false)); +$input-height-sm: add($input-line-height * 1em, add($input-padding-y-sm * 2, $input-height-border, false)); +$input-height-lg: add($input-line-height * 1em, add($input-padding-y-lg * 2, $input-height-border, false)); +$input-height-xl: calc(#{$input-line-height * 1.5em} + #{$input-btn-padding-y-lg * 2} + #{$input-height-border}); + +$input-transition: border-color .15s ease-in-out, box-shadow .15s ease-in-out; + +// Custom forms + +$custom-control-gutter: 1.75rem; +$custom-control-spacer-x: 1rem; +$custom-control-line-height: 1; +$custom-control-indicator-size: 1.25rem; + +$custom-control-bg: $gray-400; +$custom-control-indicator-bg: $white; +$custom-control-border-width: $border-width; +$custom-control-border-color: $input-border-color; +$custom-control-box-shadow: none; + + + +$custom-control-indicator-hover-color: $component-hover-color; +$custom-control-indicator-hover-bg: $primary; +$custom-control-indicator-hover-border-color: $component-hover-border-color; + +$custom-control-indicator-active-color: $component-active-color; +$custom-control-indicator-active-border-color: $component-active-border-color; + + +$custom-control-indicator-checked-color: $component-active-color; +$custom-control-indicator-checked-bg: $primary; +$custom-control-indicator-checked-border-color: $primary; +$custom-control-indicator-checked-disabled-bg: rgba($primary, .7); +$custom-control-indicator-border-width: 1px; + +$custom-control-indicator-disabled-bg: $gray-200; +$custom-control-label-disabled-color: $gray-800; + +$custom-checkbox-bg: $gray-400; +$custom-checkbox-checked-bg: $primary; +$custom-checkbox-disabled-checked-bg: rgba($primary, .7); +$custom-checkbox-indicator-border-radius: $border-radius-xl; +$custom-checkbox-indicator-border-width: $border-width-md; +$custom-checkbox-indicator-icon-checked: $font-awesome-5; +$square-checkbox-indicator-border-radius: 3px; + +$custom-toggle-slider-bg: $gray-400; +$custom-toggle-slider-indicator-bg: $white; +$custom-toggle-checked-bg: $primary; +$custom-toggle-disabled-bg: $gray-200; +$custom-toggle-disabled-checked-bg: rgba($primary, .7); +$custom-toggle-border-radius: .8rem; + +$custom-switch-indicator-size: calc(#{$custom-control-indicator-size} - #{$custom-control-indicator-border-width * 4}); + +$custom-checkbox-disabled-checked-color: $gray-800; + + +$form-check-input-width: 1.125em; +$form-check-min-height: $font-size-base * $line-height-base; +$form-check-padding-start: $form-check-input-width + .5em; +$form-check-margin-bottom: .125rem; +$form-check-label-color: null; +$form-check-label-cursor: null; +$form-check-transition: background-color .2s ease-in-out, background-position .2s ease-in-out, border-color .2s ease-in-out, box-shadow .2s ease-in-out; + +$form-check-input-active-filter: brightness(90%); + +$form-check-input-bg: $body-bg; +$form-check-input-border: 1px solid $input-border-color; +$form-check-input-border-radius: .25em; +$form-check-radio-border-radius: 50%; +$form-check-input-focus-border: $input-focus-border-color; +$form-check-input-focus-box-shadow: $input-btn-focus-box-shadow; + +$form-check-input-checked-color: $component-active-color; +$form-check-input-checked-bg-color: $component-active-bg; +$form-check-input-checked-border-color: $form-check-input-checked-bg-color; +$form-check-input-checked-bg-image: url("data:image/svg+xml,"); +$form-check-radio-checked-bg-image: url("data:image/svg+xml,"); + +$form-check-input-indeterminate-color: $component-active-color; +$form-check-input-indeterminate-bg-color: $component-active-bg; +$form-check-input-indeterminate-border-color: $form-check-input-indeterminate-bg-color; +$form-check-input-indeterminate-bg-image: url("data:image/svg+xml,"); + +$form-switch-color: $gray-600; +$form-switch-width: 2.25em; +$form-switch-padding-start: $form-switch-width + .5em; +$form-switch-bg-image: url("data:image/svg+xml,"); +$form-switch-border-radius: $form-switch-width; + +$form-switch-focus-color: $input-focus-border-color; +$form-switch-focus-bg-image: url("data:image/svg+xml,"); + +$form-switch-checked-color: $component-active-color; +$form-switch-checked-bg-image: url("data:image/svg+xml,"); +$form-switch-checked-bg-position: right center; + +$form-check-inline-margin-end: 1rem; + +$input-group-addon-color: $input-color; +$input-group-addon-bg: $white; +$input-group-addon-border-color: $input-border-color; + +// Input groups + +$input-group-addon-color: $input-placeholder-color; +$input-group-addon-bg: $input-bg; +$input-group-addon-border-color: $input-border-color; + +$input-group-addon-focus-color: $input-focus-color; +$input-group-addon-focus-bg: $input-focus-bg; +$input-group-addon-focus-border-color: $input-border-color; + +$form-select-padding-y: $input-padding-y; +$form-select-padding-x: $input-padding-x; +$form-select-font-family: $input-font-family; +$form-select-font-size: $input-font-size; +$form-select-height: $input-height; +$form-select-indicator-padding: 1rem; // Extra padding to account for the presence of the background-image based indicator +$form-select-font-weight: $input-font-weight; +$form-select-line-height: $input-line-height; +$form-select-color: $input-color; +$form-select-disabled-color: $gray-600; +$form-select-bg: $input-bg; +$form-select-disabled-bg: $gray-200; +$form-select-disabled-border-color: $input-disabled-border-color; +$form-select-bg-position: right $form-select-padding-x center; +$form-select-bg-size: 16px 12px; // In pixels because image dimensions +$form-select-indicator-color: $gray-800; +$form-select-indicator: url("data:image/svg+xml,"); + +$form-select-feedback-icon-padding-end: add(1em * .75, (2 * $form-select-padding-y * .75) + $form-select-padding-x + $form-select-indicator-padding); +$form-select-feedback-icon-position: center right ($form-select-padding-x + $form-select-indicator-padding); +$form-select-feedback-icon-size: $input-height-inner-half $input-height-inner-half; + +$form-select-border-width: $input-border-width; +$form-select-border-color: $input-border-color; +$form-select-border-radius: $border-radius; +$form-select-box-shadow: $box-shadow-inset; + +$form-select-focus-border-color: $input-focus-border-color; +$form-select-focus-width: $input-focus-width; +$form-select-focus-box-shadow: 0 0 0 $form-select-focus-width $input-btn-focus-color; + +$form-select-padding-y-sm: $input-padding-y-sm; +$form-select-padding-x-sm: $input-padding-x-sm; +$form-select-font-size-sm: $input-font-size-sm; +$form-select-height-sm: $input-height-sm; + +$form-select-padding-y-lg: $input-padding-y-lg; +$form-select-padding-x-lg: $input-padding-x-lg; +$form-select-font-size-lg: $input-font-size-lg; +$form-select-height-lg: $input-height-lg; + +$form-range-track-width: 100%; +$form-range-track-height: .5rem; +$form-range-track-cursor: pointer; +$form-range-track-bg: $gray-300; +$form-range-track-border-radius: 1rem; +$form-range-track-box-shadow: $box-shadow-inset; + +$form-range-thumb-width: 1rem; +$form-range-thumb-height: $form-range-thumb-width; +$form-range-thumb-bg: $component-active-bg; +$form-range-thumb-border: 0; +$form-range-thumb-border-radius: 1rem; +$form-range-thumb-box-shadow: 0 .1rem .25rem rgba($black, .1); +$form-range-thumb-focus-box-shadow: 0 0 0 1px $body-bg, $input-focus-box-shadow; +$form-range-thumb-focus-box-shadow-width: $input-focus-width; // For focus box shadow issue in Edge +$form-range-thumb-active-bg: lighten($component-active-bg, 35%); +$form-range-thumb-disabled-bg: $gray-500; +$form-range-thumb-transition: background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out; + +$form-file-height: $input-height; +$form-file-focus-border-color: $input-focus-border-color; +$form-file-focus-box-shadow: $input-focus-box-shadow; +$form-file-disabled-bg: $input-disabled-bg; +$form-file-disabled-border-color: $input-disabled-border-color; + +$form-file-padding-y: $input-padding-y; +$form-file-padding-x: $input-padding-x; +$form-file-line-height: $input-line-height; +$form-file-font-family: $input-font-family; +$form-file-font-weight: $input-font-weight; +$form-file-color: $input-color; +$form-file-bg: $input-bg; +$form-file-border-width: $input-border-width; +$form-file-border-color: $input-border-color; +$form-file-border-radius: $input-border-radius; +$form-file-box-shadow: $input-box-shadow; +$form-file-button-color: $form-file-color; +$form-file-button-bg: $input-group-addon-bg; + +$form-file-padding-y-sm: $input-padding-y-sm; +$form-file-padding-x-sm: $input-padding-x-sm; +$form-file-font-size-sm: $input-font-size-sm; +$form-file-height-sm: $input-height-sm; + +$form-file-padding-y-lg: $input-padding-y-lg; +$form-file-padding-x-lg: $input-padding-x-lg; +$form-file-font-size-lg: $input-font-size-lg; +$form-file-height-lg: $input-height-lg; + +$input-muted-bg: $gray-100; +$input-placeholder-color: $gray-800; +$input-focus-placeholder-color: $gray-800; + +// Form validation + +$form-feedback-margin-top: $form-text-margin-top; +$form-feedback-font-size: $form-text-font-size; +$form-feedback-font-style: $form-text-font-style; +$form-feedback-valid-color: $success; +$form-feedback-invalid-color: $danger; + +$form-feedback-icon-valid-color: $form-feedback-valid-color; +$form-feedback-icon-valid: url("data:image/svg+xml,"); +$form-feedback-icon-invalid-color: $form-feedback-invalid-color; +$form-feedback-icon-invalid: url("data:image/svg+xml,"); + +// scss-docs-start form-validation-states +$form-validation-states: ( + "valid": ( + "color": $form-feedback-valid-color, + "icon": $form-feedback-icon-valid + ), + "invalid": ( + "color": $form-feedback-invalid-color, + "icon": $form-feedback-icon-invalid + ) +); +// scss-docs-end form-validation-states + +// Z-index master list +// +// Warning: Avoid customizing these values. They're used for a bird's eye view +// of components dependent on the z-axis and are designed to all work together. + +// scss-docs-start zindex-stack +$zindex-dropdown: 1000; +$zindex-sticky: 1020; +$zindex-fixed: 1030; +$zindex-modal-backdrop: 1040; +$zindex-modal: 1050; +$zindex-popover: 1060; +$zindex-tooltip: 1070; +// scss-docs-end zindex-stack + +// No UI Slider +$noui-handle-width: 15px; +$noui-slider-height: 10px; +$noui-connect-bg: $secondary; +$noui-handle-bg: $light; +$noui-border-color: $gray-500; +$noui-focus-shadow: $input-btn-focus-box-shadow; +$noui-handle-border: 0; +$noui-handle-border-radius: $border-radius; +$noui-origin-border-radius: $circle-radius; + + +// Navs + +$nav-link-padding-y: .5rem; +$nav-link-padding-x: 1rem; +$nav-link-color: $gray-800; +$nav-link-hover-color: $primary; +$nav-link-active-color: $gray-800; +$nav-link-shadow: none; +$nav-link-transition: color .15s ease-in-out, background-color .15s ease-in-out, border-color .15s ease-in-out; +$nav-link-disabled-color: $gray-600; + +$nav-tabs-border-color: $light; +$nav-tabs-border-width: $border-width; +$nav-tabs-border-radius: $border-radius; +$nav-tabs-link-hover-border-color: $gray-200 $gray-200 $nav-tabs-border-color; +$nav-tabs-link-active-color: $gray-700; +$nav-tabs-link-active-bg: $light; +$nav-tabs-link-active-border-color: $light; + +$nav-pills-padding-y: .75rem; +$nav-pills-padding-x: .85rem; + +$nav-pills-space-x: 1rem; +$nav-pills-border-circle: 50%; + +$nav-pills-bg: $white; +$nav-pills-border-width: 1px; +$nav-pills-border-color: $light; +$nav-pills-border-radius: $border-radius; + +$nav-pills-link-hover-color: $primary; +$nav-pills-link-active-color: $primary; +$nav-pills-active-border-color: lighten( $dark, 20% ); +$nav-pills-link-active-bg: #f8f8f8; + +// Owl navs + +$owl-nav-color: $gray-600; +$owl-nav-color-hover: $gray-900; +$owl-nav-font-size: $font-size-xxl; +$owl-nav-rounded: 3px; +$owl-nav-margin: 5px; +$owl-nav-padding: 4px 7px; +$owl-nav-background: $gray-400; +$owl-nav-background-hover: $gray-800; +$owl-nav-disabled-opacity: 0.5; + +// Owl dots + +$owl-dot-width: 10px; +$owl-dot-height: 10px; +$owl-dot-rounded: $circle-radius; +$owl-dot-margin: 5px 5px; +$owl-dot-border-width: 2px; +$owl-dot-background: $gray-400; +$owl-dot-background-active: $gray-800; + + +// Navbar + +$navbar-padding-y: 1rem; +$navbar-padding-x: null; + +$navbar-nav-link-padding-x: .8rem; + +$navbar-brand-font-size: $font-size-lg; +// Compute the navbar-brand padding-y so the navbar-brand will have the same height as navbar-text and nav-link +$nav-link-height: $font-size-base * $line-height-base + $nav-link-padding-y * 4; +$navbar-brand-height: $navbar-brand-font-size * $line-height-base; +$navbar-brand-padding-y: 0; +$navbar-brand-margin-end: 1rem; + +$navbar-toggler-padding-y: .4rem; +$navbar-toggler-padding-x: .6rem; +$navbar-toggler-font-size: $font-size-lg; +$navbar-toggler-border-radius: $btn-border-radius; +$navbar-toggler-focus-width: $btn-focus-width; +$navbar-toggler-transition: box-shadow .15s ease-in-out; + +$navbar-dark-color: rgba($white, 0.9); +$navbar-dark-hover-color: rgba($white, 1); +$navbar-dark-active-color: $white; +$navbar-dark-disabled-color: rgba($white, .9); +$navbar-dark-toggler-icon-bg: url("data:image/svg+xml,"); +$navbar-dark-toggler-border-color: rgba($white, .1); + +$navbar-light-color: rgba($black, .9); +$navbar-light-hover-color: rgba($black, 1); +$navbar-light-active-color: rgba($black, 1); +$navbar-light-disabled-color: rgba($black, .9); +$navbar-light-toggler-icon-bg: url("data:image/svg+xml,"); +$navbar-light-toggler-border-color: rgba($black, .1); + +$navbar-light-brand-color: $navbar-light-active-color; +$navbar-light-brand-hover-color: $navbar-light-active-color; +$navbar-dark-brand-color: $navbar-dark-active-color; +$navbar-dark-brand-hover-color: $navbar-dark-active-color; + + +// Dropdowns +// +// Dropdown menu container and contents. + +$dropdown-min-width: 10rem; +$dropdown-padding-y: .5rem; +$dropdown-spacer: .125rem; +$dropdown-font-size: 1rem; +$dropdown-item-font-weight: $font-weight-light; +$dropdown-item-hover-color: $gray-900; + +$dropdown-color: $body-color; +$dropdown-bg: $white; +$dropdown-border-color: $light; +$dropdown-border-radius: $border-radius; +$dropdown-border-width: $border-width; +$dropdown-inner-border-radius: subtract($dropdown-border-radius, $dropdown-border-width); +$dropdown-divider-bg: $gray-200; +$dropdown-divider-margin-y: $spacer / 2; +$dropdown-box-shadow: $box-shadow; + +$dropdown-link-color: $gray-900; +$dropdown-link-hover-color: darken($gray-900, 5%); +$dropdown-link-hover-bg: $gray-200; + +$dropdown-link-active-color: $gray-900; +$dropdown-link-active-bg: $gray-400; + +$dropdown-link-disabled-color: $gray-600; + +$dropdown-item-padding-y: $spacer / 4; +$dropdown-item-padding-x: $spacer; + +$dropdown-header-color: $gray-900; +$dropdown-header-font-weight: $font-weight-bold; +$dropdown-header-padding: $dropdown-padding-y $dropdown-item-padding-x; + + +// Pagination + +$pagination-padding-y: .375rem; +$pagination-padding-x: .75rem; +$pagination-padding-y-sm: .25rem; +$pagination-padding-x-sm: .5rem; +$pagination-padding-y-lg: .75rem; +$pagination-padding-x-lg: 1.5rem; + +$pagination-color: $link-color; +$pagination-bg: $white; +$pagination-border-width: $border-width; +$pagination-border-radius: $border-radius; +$pagination-margin-start: -$pagination-border-width; +$pagination-border-color: $light; + +$pagination-focus-box-shadow: $input-btn-focus-box-shadow; +$pagination-focus-outline: 0; + +$pagination-hover-color: $link-hover-color; +$pagination-hover-bg: $gray-200; +$pagination-hover-border-color: $gray-300; + +$pagination-active-color: $component-active-color; +$pagination-active-bg: $component-active-bg; +$pagination-active-border-color: $pagination-active-bg; + +$pagination-disabled-color: $gray-600; +$pagination-disabled-bg: $white; +$pagination-disabled-border-color: $gray-300; + + +// Cards + +$card-spacer-y: 1.25rem; +$card-spacer-x: 1.5rem; +$card-social-padding: .25rem .375rem; +$card-title-spacer-y: .875rem; +$card-border-width: $border-width; +$card-border-radius: $border-radius; +$card-border-color: rgba($black, .125); +$card-inner-border-radius: subtract($card-border-radius, $card-border-width); +$card-cap-padding-y: 1.25rem; +$card-cap-padding-x: $card-spacer-x; +$card-cap-bg: rgba($black, .03); +$card-cap-color: null; +$card-height: null; +$card-color: null; +$card-bg: $white; + +$card-img-overlay-padding: $spacer; + +$card-group-margin: $grid-gutter-width / 2; +$transition-bezier-card: cubic-bezier(0.34, 1.45, 0.7, 1); + +//Timelines +$timeline-font-size: $font-size-xxl; +$timeline-font-color: $body-color; +$timeline-border-color: $light; +$timeline-border-color-dark: $gray-500; +$timeline-background-color: $white; +$timeline-line-height: 3; +$timeline-border-width: $border-width; +$timeline-circle-radius: 50%; +$timeline-spacer-y: 1.25rem; +$timeline-spacer-x: 2.75rem; + +// Icon +$icon-box-padding: 1rem; +$icon-shape: 4.5rem; +$icon-shape-xs: 2rem; +$icon-shape-sm: 3rem; +$icon-shape-lg: 5.5rem; +$icon-shape-img: 5.5rem; +$icon-shape-bordered: 5rem; +$icon-size: 2rem; +$icon-size-xs: .875rem; +$icon-size-sm: 1.25rem; +$icon-size-md: 1.875rem; +$icon-size-lg: 2.75rem; +$icon-size-xl: 4.5rem; + + +// Steps +$step-number-size: 12rem; +$step-shape-size: 7rem; +$step-border-width: $border-width-md; +$step-icon-size: $icon-size-xl; + +// Tooltips + +$tooltip-font-size: $font-size-sm; +$tooltip-max-width: 200px; +$tooltip-color: $white; +$tooltip-bg: $dark; +$tooltip-border-radius: $border-radius; +$tooltip-opacity: .99; +$tooltip-padding-y: .75rem; +$tooltip-padding-x: .55rem; +$tooltip-margin: 0; + +$tooltip-arrow-width: .8rem; +$tooltip-arrow-height: .4rem; +$tooltip-arrow-color: $tooltip-bg; + +// Form tooltips must come after regular tooltips +$form-feedback-tooltip-padding-y: $tooltip-padding-y; +$form-feedback-tooltip-padding-x: $tooltip-padding-x; +$form-feedback-tooltip-font-size: $tooltip-font-size; +$form-feedback-tooltip-line-height: null; +$form-feedback-tooltip-opacity: $tooltip-opacity; +$form-feedback-tooltip-border-radius: $tooltip-border-radius; + + +// Popovers + +$popover-font-size: $font-size-sm; +$popover-bg: $white; +$popover-max-width: 276px; +$popover-border-width: $border-width; +$popover-border-color: rgba($black, .2); +$popover-border-radius: $border-radius-lg; +$popover-inner-border-radius: subtract($popover-border-radius, $popover-border-width); +$popover-box-shadow: $box-shadow; + +$popover-header-bg: darken($popover-bg, 3%); +$popover-header-color: $headings-color; +$popover-header-padding-y: .5rem; +$popover-header-padding-x: $spacer; + +$popover-body-color: $body-color; +$popover-body-padding-y: $spacer; +$popover-body-padding-x: $spacer; + +$popover-arrow-width: 1rem; +$popover-arrow-height: .5rem; +$popover-arrow-color: $popover-bg; + +$popover-arrow-outer-color: fade-in($popover-border-color, .05); + + +// Toasts + +$toast-max-width: 350px; +$toast-padding-x: .75rem; +$toast-padding-y: .25rem; +$toast-font-size: .875rem; +$toast-color: null; +$toast-background-color: rgba($white, .85); +$toast-border-width: 1px; +$toast-border-color: rgba(0, 0, 0, .1); +$toast-border-radius: $border-radius; +$toast-box-shadow: $box-shadow; + +$toast-header-color: $gray-600; +$toast-header-background-color: rgba($white, .85); +$toast-header-border-color: rgba(0, 0, 0, .05); + + +// Badges + +$badge-font-size: .75em; +$badge-font-weight: $font-weight-bolder; +$badge-padding-y: .1rem; +$badge-padding-x: .4rem; +$badge-color: $white; +$badge-border-radius: $border-radius; + +$badge-pill-padding-x: .875em; +$badge-pill-border-radius: 10rem; + +$badge-circle-size: 2rem; + + +// Modals + +// Padding applied to the modal body +$modal-inner-padding: $spacer; + +// Margin between elements in footer, must be lower than or equal to 2 * $modal-inner-padding +$modal-footer-margin-between: .5rem; + +$modal-dialog-margin: .5rem; +$modal-dialog-margin-y-sm-up: 1.75rem; + +$modal-title-line-height: $line-height-base; + +$modal-content-color: null; +$modal-content-bg: $white; +$modal-content-border-color: rgba($black, .2); +$modal-content-border-width: $border-width; +$modal-content-border-radius: $border-radius-lg; +$modal-content-inner-border-radius: subtract($modal-content-border-radius, $modal-content-border-width); +$modal-content-box-shadow-xs: $box-shadow-sm; +$modal-content-box-shadow-sm-up: $box-shadow; + +$modal-backdrop-bg: $black; +$modal-backdrop-opacity: .5; +$modal-header-border-color: $border-color; +$modal-footer-border-color: $modal-header-border-color; +$modal-header-border-width: $modal-content-border-width; +$modal-footer-border-width: $modal-header-border-width; +$modal-header-padding-y: $modal-inner-padding; +$modal-header-padding-x: $modal-inner-padding; +$modal-header-padding: $modal-header-padding-y $modal-header-padding-x; // Keep this for backwards compatibility + +$modal-sm: 300px; +$modal-md: 500px; +$modal-lg: 800px; +$modal-xl: 1140px; + +$modal-fade-transform: translate(0, -50px); +$modal-show-transform: none; +$modal-transition: transform .3s ease-out; +$modal-scale-transform: scale(1.02); + + +// Alerts +// +// Define alert colors, border radius, and padding. + +$alert-padding-y: $spacer; +$alert-padding-x: $spacer; +$alert-margin-bottom: 1rem; +$alert-border-radius: $border-radius; +$alert-link-font-weight: $font-weight-bold; +$alert-border-width: $border-width; +$alert-icon-font-size: 2rem; +$alert-link-color: $white; + +$alert-bg-level: -10 !default; +$alert-border-level: -9 !default; +$alert-color-level: 10 !default; + + +// Progress bars + +$progress-height: 1rem; +$progress-font-size: $font-size-base * .75; +$progress-bg: $gray-200; +$progress-border-radius: $border-radius; +$progress-box-shadow: $box-shadow-inset; +$progress-bar-color: $white; +$progress-bar-bg: $primary; +$progress-bar-animation-timing: 1s linear infinite; +$progress-bar-transition: width .6s ease; + +$progress-xl-size: .8rem; +$progress-lg-size: .6rem; +$progress-sm-size: .2rem; + + +// List group + +$list-group-color: null; +$list-group-bg: $white; +$list-group-border-color: rgba($black, .125); +$list-group-border-width: $border-width; +$list-group-border-radius: $border-radius; + +$list-group-sm-item-padding-y: .625rem; +$list-group-sm-item-padding-x: .875rem; + +$list-group-item-padding-y: $spacer / 2; +$list-group-item-padding-x: $spacer; +$list-group-item-bg-level: -9; +$list-group-item-color-level: 6; +$list-group-item-border-radius: $border-radius; + +$list-group-hover-bg: $gray-100; +$list-group-active-color: $component-active-color; +$list-group-active-bg: $component-active-bg; +$list-group-active-border-color: $list-group-active-bg; + +$list-group-disabled-color: $gray-600; +$list-group-disabled-bg: $list-group-bg; + +$list-group-action-color: $gray-700; +$list-group-action-hover-color: $list-group-action-color; + +$list-group-action-active-color: $body-color; +$list-group-action-active-bg: $gray-200; + +// Image thumbnails + +$thumbnail-padding: .25rem; +$thumbnail-bg: $body-bg; +$thumbnail-border-width: $border-width; +$thumbnail-border-color: $gray-300; +$thumbnail-border-radius: $border-radius; +$thumbnail-box-shadow: $box-shadow-sm; + + +// Figures + +$figure-caption-font-size: $small-font-size; +$figure-caption-color: $gray-600; + + +// Breadcrumbs + +$breadcrumb-font-size: null; +$breadcrumb-padding-y: $spacer / 2; +$breadcrumb-padding-x: $spacer; +$breadcrumb-item-padding-x: .5rem; +$breadcrumb-margin-bottom: 1rem; +$breadcrumb-bg: $gray-200; +$breadcrumb-divider-color: $gray-600; +$breadcrumb-active-color: $gray-600; +$breadcrumb-divider: quote("/"); +$breadcrumb-border-radius: $border-radius; + +$breadcrumb-active-color: $white; +$breadcrumb-divider-color: $gray-700; +$breadcrumb-item-color: $gray-700; +$breadcrumb-font-weight: $font-weight-normal; +$breadcrumb-active-font-weight: $font-weight-normal; +$breadcrumb-item-light-color: $white; +$breadcrumb-divider-light-color: $white; + +// Carousel + +$carousel-control-color: $white; +$carousel-control-width: 15%; +$carousel-control-opacity: .5; +$carousel-control-hover-opacity: .9; +$carousel-control-transition: opacity .15s ease; + +$carousel-indicator-width: 30px; +$carousel-indicator-height: 3px; +$carousel-indicator-hit-area-height: 10px; +$carousel-indicator-spacer: 3px; +$carousel-indicator-opacity: .5; +$carousel-indicator-active-bg: $white; +$carousel-indicator-active-opacity: 1; +$carousel-indicator-transition: opacity .6s ease; + +$carousel-caption-width: 70%; +$carousel-caption-color: $white; +$carousel-caption-padding-y: 1.25rem; +$carousel-caption-spacer: 1.25rem; + +$carousel-control-icon-width: 20px; + +$carousel-control-prev-icon-bg: url("data:image/svg+xml,"); +$carousel-control-next-icon-bg: url("data:image/svg+xml,"); + +$carousel-transition-duration: .6s; +$carousel-transition: transform $carousel-transition-duration ease-in-out; // Define transform transition first if using multiple transitions (e.g., `transform 2s ease, opacity .5s ease-out`) + + +// Spinners + +$spinner-width: 2rem; +$spinner-height: $spinner-width; +$spinner-border-width: .25em; +$spinner-animation-speed: .75s; + +$spinner-width-sm: 1.2rem; +$spinner-height-sm: $spinner-width-sm; +$spinner-border-width-sm: .2em; + +// Datepicker + +$datepicker-border-radius: $border-radius-sm; +$datepicker-dropdown-padding: 20px 22px; + +$datepicker-cell-transition: $transition-base; +$datepicker-cell-hover-background: lighten($gray-400, 55%); +$datepicker-cell-border-radius: 50%; +$datepicker-cell-width: 36px; +$datepicker-cell-height: 36px; + +$datepicker-disabled-cell-color: $gray-300; +$datepicker-disabled-old-new-color: $gray-500; + +$datepicker-header-cell-border-radius: $border-radius-sm; + +$datepicker-active-color: $white; +$datepicker-active-background: $secondary; +$datepicker-active-box-shadow: none; + +$datepicker-range-background: $secondary; +$datepicker-range-cell-focused-background: darken($datepicker-range-background, 5%); +$datepicker-range-color: $white; +$datepicker-range-highlighted-bg: $gray-200; + +$datepicker-dropdown-border: lighten($gray-400, 40%); +$datepicker-dropdown-bg: $white; +$datepicker-highlighted-bg: $datepicker-active-background; + + +// Close + +$close-bg: transparent; +$close-hover-bg: transparent; +$close-color: rgba(0, 0, 0, .6); +$close-hover-color: rgba(0, 0, 0, .9); +$close-font-size: $font-size-base * 1.5; +$close-font-weight: $font-weight-bold; +$close-color: $black; +$close-text-shadow: 0 1px 0 $white; + + + +// Code + +$code-font-size: $small-font-size; +$code-color: $blue; + +$kbd-padding-y: .2rem; +$kbd-padding-x: .4rem; +$kbd-font-size: $code-font-size; +$kbd-color: $white; +$kbd-bg: $gray-900; + +$pre-color: null; + +// Avatars +$avatar-sm-y: 1.5rem; +$avatar-sm-x: 1.5rem; + +$avatar-md-y: 2rem; +$avatar-md-x: 2rem; + +$avatar-lg-y: 3rem; +$avatar-lg-x: 3rem; + +$user-avatar-height:2.5rem; +$user-avatar-width: 2.5rem; + +$user-avatar-height-xs:1.5rem; +$user-avatar-width-xs: 1.5rem; + +$user-avatar-height-lg:3.5rem; +$user-avatar-width-lg:3.5rem; + +$user-avatar-height-xl:4.5rem; +$user-avatar-width-xl:4.5rem; + +$user-avatar-height-xxl:10rem; +$user-avatar-width-xxl:10rem; + +// Footer + +$footer-link-font-size: .85rem; +$footer-bg: theme-color("secondary"); +$footer-color: $gray-600; +$footer-link-color: $gray-600; +$footer-link-hover-color: $gray-700; +$footer-heading-color: $gray-600; +$footer-heading-font-size: $font-size-sm; +$padding-footer-sm: .125rem ; +$padding-footer: .375rem ; +$padding-footer-md: .625rem ; +$padding-footer-general: .9375rem; +$padding-footer-big: 1.5rem; diff --git a/probe_ably/app/src/scss/volt/_vendor.scss b/probe_ably/app/src/scss/volt/_vendor.scss new file mode 100644 index 0000000..ae7d5f2 --- /dev/null +++ b/probe_ably/app/src/scss/volt/_vendor.scss @@ -0,0 +1,9 @@ +// Vendor +@import "vendor/headroom"; +@import "vendor/prism"; +@import "vendor/chartist/chartist"; +@import "vendor/datepicker"; + +// choices js +// @import "node_modules/choices.js/src/styles/base.scss"; +// @import "node_modules/choices.js/src/styles/choices.scss"; \ No newline at end of file diff --git a/probe_ably/app/src/scss/volt/components/_accordions.scss b/probe_ably/app/src/scss/volt/components/_accordions.scss new file mode 100644 index 0000000..b71e7c5 --- /dev/null +++ b/probe_ably/app/src/scss/volt/components/_accordions.scss @@ -0,0 +1,38 @@ +/** + * = Accordions + */ + + .accordion-button { + text-align: left; + + .btn-check:focus + .btn, .btn:focus { + outline: 0; + box-shadow: none; + } + + &:hover{ + background-color: $gray-200; + } +} + +// Flush accordion items +// +// Remove borders and border-radius to keep accordion items edge-to-edge. + +.accordion-flush { + .accordion-button { + background-color: transparent; + &:not(.collapsed) { + color: $secondary; + } + &:focus { + border-color: $gray-300; + box-shadow: none; + } + } + .accordion-collapse { + border: 0; + } +} + + diff --git a/probe_ably/app/src/scss/volt/components/_alerts.scss b/probe_ably/app/src/scss/volt/components/_alerts.scss new file mode 100644 index 0000000..6fd954d --- /dev/null +++ b/probe_ably/app/src/scss/volt/components/_alerts.scss @@ -0,0 +1,10 @@ +.alert-heading{ + font-weight: $font-weight-bold; +} + +.alert-icon{ + margin-bottom: .5rem; + span{ + font-size: $alert-icon-font-size; + } +} \ No newline at end of file diff --git a/probe_ably/app/src/scss/volt/components/_avatars.scss b/probe_ably/app/src/scss/volt/components/_avatars.scss new file mode 100644 index 0000000..3846466 --- /dev/null +++ b/probe_ably/app/src/scss/volt/components/_avatars.scss @@ -0,0 +1,99 @@ +/** + * = Avatars + */ + +.avatar + .avatar-content { + display: inline-block; + margin-left: .75rem; +} + +.avatar-link { + img{ + width: 4rem; + height: 4rem; + } +} + +.author-image{ + img{ + width: 3rem; + height: 3rem; + } +} + +.user-avatar { + height: $user-avatar-height; + width: $user-avatar-width; + min-height: $user-avatar-height; + min-width: $user-avatar-width; + color: $white; + display: flex; + justify-content: center; + align-items: center; + font-weight: $font-weight-bold; + @include border-radius($circle-radius); + &.xs-avatar{ + height: $user-avatar-height-xs; + width: $user-avatar-width-xs; + img{ + height: $user-avatar-height-xs; + width: $user-avatar-width-xs; + } + } + + .md-avatar{ + height: 2rem; + width: 2rem; + min-height: 2rem; + min-width: 2rem; + } + + &.lg-avatar{ + height: $user-avatar-height-lg; + width: $user-avatar-width-lg; + min-height: $user-avatar-height-lg; + min-width: $user-avatar-width-lg; + font-size: $font-size-xs; + + @include media-breakpoint-down(lg) { + height: 2rem; + width: 2rem; + min-height: 2rem; + min-width: 2rem; + } + } + + &.xl-avatar{ + height: $user-avatar-height-xl; + width: $user-avatar-width-xl; + min-height: $user-avatar-height-xl; + min-width: $user-avatar-width-xl; + } + + &.large-avatar{ + border: 2px solid $white; + height: $user-avatar-height-xxl; + width: $user-avatar-width-xxl; + min-height: $user-avatar-height-xxl; + min-width: $user-avatar-width-xxl; + } +} + +// Overlapped avatars + +.avatar-group { + .avatar { + position: relative; + z-index: 2; + border: 2px solid $card-bg; + + &:hover { + z-index: 3; + } + } + + .avatar + .avatar { + margin-left: -1rem; + + } +} diff --git a/probe_ably/app/src/scss/volt/components/_badge.scss b/probe_ably/app/src/scss/volt/components/_badge.scss new file mode 100644 index 0000000..4db3c97 --- /dev/null +++ b/probe_ably/app/src/scss/volt/components/_badge.scss @@ -0,0 +1,102 @@ +/** + * = Badges + */ + +.badge { + font-size:$badge-font-size; + font-weight: $badge-font-weight; + + a { + color: $white; + } + + &.super-badge{ + vertical-align: super; + } +} + +// Variations +.badge-pill { + padding-right: $badge-pill-padding-x; + padding-left: $badge-pill-padding-x; +} + +// Multiple inline badges +.badge-inline { + margin-right: .625rem; + + & + span { + top: 2px; + position: relative; + + & > a { + text-decoration: underline; + } + } +} + +// Sizes +.badge-md { + padding: .25rem .4rem; +} + +.badge-lg { + padding: .35rem .85rem; +} + +.badge-xl { + font-size: $font-size-lg; + padding: .35rem .85rem; +} + +//button badges + +.btn{ + .badge-corner{ + position: absolute; + top: -50%; + right: .5rem; + transform: translate(50%,50%); + margin: 0; + border: 3px solid; + padding-left: .5rem; + padding-right: .5rem; + } +} +//Tags +.wi-tags{ + a { + display: inline-block; + padding: 0.125rem 0.875rem; + margin: 0.25rem; + line-height: 2; + font-size: $font-size-sm; + box-shadow: $box-shadow-sm; + background-color: $white; + } +} + +.pixel-pro-badge{ + position: relative; + font-size: 1.25rem; + text-transform: uppercase; + font-weight: $font-weight-bold; + right: -20px; + padding: 5px 14px; + top: -46px; + background: $white; + border-radius: $border-radius; + box-shadow: $box-shadow-sm; + @include media-breakpoint-down(sm){ + font-size: $font-size-base; + right: -13px; + padding: 5px 10px; + top: -23px; + } +} + +.subscription-badge { + top: -19px; + right: -12px; + font-size: .75rem; +} diff --git a/probe_ably/app/src/scss/volt/components/_blog-cards.scss b/probe_ably/app/src/scss/volt/components/_blog-cards.scss new file mode 100644 index 0000000..5220e99 --- /dev/null +++ b/probe_ably/app/src/scss/volt/components/_blog-cards.scss @@ -0,0 +1,12 @@ +/** + * = Blog cards + */ + +.card-img-overlay{ + padding: 0; + .card-footer, + .card-header{ + background: transparent; + border-color:$gray-700; + } +} \ No newline at end of file diff --git a/probe_ably/app/src/scss/volt/components/_breadcrumb.scss b/probe_ably/app/src/scss/volt/components/_breadcrumb.scss new file mode 100644 index 0000000..e793960 --- /dev/null +++ b/probe_ably/app/src/scss/volt/components/_breadcrumb.scss @@ -0,0 +1,65 @@ +/** + * = Breadcrumbs + */ + +.breadcrumb-item { + font-size: $font-size-xs; + &, a { + color: $breadcrumb-item-color; + font-weight: $breadcrumb-font-weight; + font-size: $font-size-xs; + @include media-breakpoint-up(sm){ + font-size: $font-size-sm; + } + } + + &.active { + font-weight: $breadcrumb-active-font-weight; + } + + + .breadcrumb-item { + &:before{ + content: "\f101"; + font-family: $font-awesome-5; + font-weight: 900; + color: $breadcrumb-divider-color; + } + } + +} + +.breadcrumb-transparent { + background: transparent; + padding: 0; +} + +@each $color, $value in $theme-colors { + .breadcrumb-#{$color} { + background: $value; + .breadcrumb-item{ + &.active { + color: $white; + } + } + &.breadcrumb-transparent { + background: transparent; + .breadcrumb-item { + &.active { + color: $value; + } + } + } + } +} + +.breadcrumb-text-light { + .breadcrumb-item { + &, a { + color: $breadcrumb-item-light-color; + } + + &:before { + color: $breadcrumb-divider-light-color; + } + } +} diff --git a/probe_ably/app/src/scss/volt/components/_buttons.scss b/probe_ably/app/src/scss/volt/components/_buttons.scss new file mode 100644 index 0000000..a6dfe0f --- /dev/null +++ b/probe_ably/app/src/scss/volt/components/_buttons.scss @@ -0,0 +1,75 @@ +/* +* = Buttons +*/ + +.btn { + &.btn-circle { + border-radius: $circle-radius; + } + + &.btn-md { + padding: 0.65rem 1.25rem; + } + + &.btn-xs { + padding : 0.175rem 0.45rem; + font-size: 0.7rem; + } +} + +.btn-icon-only { + width : 2.575rem; + height : 2.575rem; + padding: 0; + @include display-flex(); + @include justify-content(center); + @include align-items(center); + + &.btn-xs { + width : 1.7rem; + height: 1.7rem; + } + + &.btn-sm { + width : 2rem; + height: 2rem; + } +} + + +// +// Block button +// + +.btn-block { + display: block; + width : 100%; + + // Vertically space out multiple block buttons + +.btn-block { + margin-top: $btn-block-spacing-y; + } +} + +.copy-code-button { + position: absolute; + top: 22px; + right: 20px; + background-color: transparent; + color: $gray-600; + border: 0; + box-shadow: none; + + &:hover { + background-color: $primary; + color: $white; + border: 0; + box-shadow: none; + } +} + +.copy-code-text { + position: absolute; + top: 24px; + right: 90px; +} \ No newline at end of file diff --git a/probe_ably/app/src/scss/volt/components/_card.scss b/probe_ably/app/src/scss/volt/components/_card.scss new file mode 100644 index 0000000..87bc3e4 --- /dev/null +++ b/probe_ably/app/src/scss/volt/components/_card.scss @@ -0,0 +1,263 @@ +/** + * = Cards + */ + +.card { + position: relative; + .card-header{ + background: transparent; + } + + &.hover-state{ + &:hover { + background-color: $soft; + } + } + + .profile-cover{ + @include background-image(no-repeat, cover); + height: 200px; + } + + @include media-breakpoint-up(lg) { + &.timeline-card{ + &:before { + content: ""; + position: absolute; + top: 50%; + left: 0; + margin-left: .75rem; + border: 8px solid $black; + border-color: transparent #e0e6ec #e0e6ec transparent; + -webkit-box-sizing: border-box; + box-sizing: border-box; + -webkit-transform-origin: 0 0; + transform-origin: 0 0; + @include transform(rotate(135deg)); + @include box-shadow($box-shadow); + } + } + + &.left-timeline-card { + &:after{ + content: ""; + position: absolute; + top: 50%; + right: 0; + margin-right: -5px;; + border: 8px solid $black; + border-color: transparent #e0e6ec #e0e6ec transparent; + -webkit-box-sizing: border-box; + box-sizing: border-box; + -webkit-transform-origin: 0 0; + transform-origin: 0 0; + @include transform(rotate(-45deg)); + @include box-shadow($box-shadow); + } + } + } +} + +.message-wrapper, +.task-wrapper{ + .card{ + border:0; + } +} + +.customer-testimonial { + .content-wrapper{ + &:before { + content: ""; + position: absolute; + top: 25px; + left: -1px; + margin-left: .75rem; + border: 8px solid $black; + border-color: transparent #e0e6ec #e0e6ec transparent; + -webkit-box-sizing: border-box; + box-sizing: border-box; + -webkit-transform-origin: 0 0; + transform-origin: 0 0; + @include transform(rotate(135deg)); + @include box-shadow($box-shadow); + } + } +} + +.profile-page { + .card-profile { + margin-top: -150px; + + .card-profile-image { + position: relative; + + img { + max-width: 180px; + @include border-radius($border-radius); + transform: translate(-50%,-30%); + position: absolute; + left: 50%; + transition: $transition-base; + + &:hover { + transform: translate(-50%, -33%); + } + } + } + + .card-profile-stats { + padding: 1rem 0; + + > div { + text-align: center; + margin-right: 1rem; + padding: .875rem; + + &:last-child { + margin-right: 0; + } + + .heading { + display: block; + font-size: 1.1rem; + font-weight: bold; + } + .description { + font-size: .875rem; + color: $gray-500; + } + } + } + + .card-profile-actions { + padding: .875rem; + } + + @include media-breakpoint-down(xs) { + .card-profile-actions { + margin-top: 110px; + } + } + + @include media-breakpoint-between(sm, md) { + .card-profile-stats { + margin-top: 30px; + } + } + } +} + +.card-footer{ + background-color:transparent; +} + +.card-stats{ + padding-left:1.9rem; +} + + +// Card with blockquotes + +.card { + .card-blockquote { + position: relative; + padding: 2rem; + + .svg-bg { + display: block; + position: absolute; + width: 100%; + height: 95px; + top: -94px; + left: 0; + } + } +} + +// Animated cards + +.card-lift-hover { + &:hover { + transform: translateY(-20px); + @include transition($transition-base); + } +} + +.page-preview { + + display: block; + position: relative; + + .show-on-hover { + position: absolute; + bottom: -25px; + background: rgba($dark, .85); + padding: 10px 0; + border-bottom-left-radius: $border-radius; + border-bottom-right-radius: $border-radius; + width: calc(100% + 28px); + left: -14px; + opacity: 0; + @include transition(.2s); + } + + &.page-preview-lg { + .show-on-hover { + left: -30px; + width: calc(100% + 60px); + bottom: -20px; + } + } + + &:hover { + .show-on-hover { + z-index: 99; + opacity: 1; + } + } +} + +.live-editor { + textarea, pre { + font-size: 1.2em !important; + padding: 0 !important; + } + + textarea:focus { + outline: none !important; + } +} + +.prism-code { + padding: 0 !important; +} + +.theme-settings { + z-index: 99; + position: fixed; + right: 15px; + bottom: 0; + + &, .card-body { + border-bottom-right-radius: 0; + border-bottom-left-radius: 0; + } +} + +.theme-settings-close { + position: absolute; + top: 5px; + right: 5px; + font-size: .65rem; +} + +.theme-settings-expand { + right: 15px; + bottom: 0; + + &:hover { + background: $gray-200; + cursor: pointer; + } +} \ No newline at end of file diff --git a/probe_ably/app/src/scss/volt/components/_carousel.scss b/probe_ably/app/src/scss/volt/components/_carousel.scss new file mode 100644 index 0000000..527c016 --- /dev/null +++ b/probe_ably/app/src/scss/volt/components/_carousel.scss @@ -0,0 +1,52 @@ +/** + * = Bootstrap carousels + */ + +.carousel-caption { + &, h5 { + color: $white; + } +} + +//Indicators + +.carousel-indicators { + li { + height: 10px; + width:10px; + border-radius:$circle-radius; + background:transparent; + border:2px solid $white; + } + .active { + opacity: 1; + background: $white; + } +} + +//Carousel Controls + +.carousel-control-prev-icon, +.carousel-control-next-icon { + width: auto; + height: auto; + font-weight: 900; +} + +.carousel-control-prev-icon { + background-image: none; + &::before{ + content: '\f060'; + font-family: $font-awesome-5; + font-size: $font-size-xxl; + } +} + +.carousel-control-next-icon { + background-image: none; + &:before{ + font-family: $font-awesome-5; + content: "\f061"; + font-size: $font-size-xxl; + } +} \ No newline at end of file diff --git a/probe_ably/app/src/scss/volt/components/_charts.scss b/probe_ably/app/src/scss/volt/components/_charts.scss new file mode 100644 index 0000000..d444d8c --- /dev/null +++ b/probe_ably/app/src/scss/volt/components/_charts.scss @@ -0,0 +1,52 @@ +.ct-bar { + stroke-linecap: round; + stroke-width: 10px; +} +.ct-label { + fill: $body-color; + color: $body-color; + font-size: 0.75rem; + margin-top: 6px; + font-weight: $font-weight-bold; +} + +.ct-slice-pie { + stroke: $white; + stroke-width: 3px; +} + +.ct-chart-donut .ct-series { + stroke: $white; + stroke-width: 3px; +} + +.ct-chart-pie .ct-label, .ct-chart-donut .ct-label { + font-size: 0.75rem; + font-weight: $font-weight-bold; +} + +.small-chart{ + margin-left:-1rem; +} + +//Label color Fix for pie chart + +.ct-chart-pie .ct-label, .ct-chart-donut .ct-label { + color: #ffffff; + fill: #ffffff; + font-size: $font-size-base; + font-weight: $font-weight-bold; +} + +.ct-series-g{ + .ct-grid { + stroke: $secondary; + stroke-width: 2px; + stroke-dasharray: 2px; + } + .ct-label.ct-horizontal.ct-end { + margin-left:-9px; + margin-top:10px; + color: $primary; + } +} diff --git a/probe_ably/app/src/scss/volt/components/_close.scss b/probe_ably/app/src/scss/volt/components/_close.scss new file mode 100644 index 0000000..ce2c116 --- /dev/null +++ b/probe_ably/app/src/scss/volt/components/_close.scss @@ -0,0 +1,33 @@ +/** + * = Close + */ + +.close { + @if $enable-transitions { + transition: $transition-base; + } + &>span:not(.sr-only) { + display: block; + height: 1.25rem; + width: 1.25rem; + background-color: $close-bg; + color: $close-color; + line-height: 17px; + border-radius: 50%; + font-size: 1.25rem; + @if $enable-transitions { + transition: $transition-base; + } + } + + &:hover, + &:focus { + background-color: $close-hover-bg; + color: $close-hover-color; + outline: none; + + span:not(.sr-only) { + background-color: $close-hover-bg; + } + } +} diff --git a/probe_ably/app/src/scss/volt/components/_counters.scss b/probe_ably/app/src/scss/volt/components/_counters.scss new file mode 100644 index 0000000..af845c0 --- /dev/null +++ b/probe_ably/app/src/scss/volt/components/_counters.scss @@ -0,0 +1,14 @@ +/** + * = Counters + */ + +.counter-alternate{ + &::after{ + content: '\f067'; + font-family: $font-awesome-5; + position: absolute; + font-size: 2.25rem; + color:$dark; + font-weight: 900; + } +} diff --git a/probe_ably/app/src/scss/volt/components/_custom-forms.scss b/probe_ably/app/src/scss/volt/components/_custom-forms.scss new file mode 100644 index 0000000..1148b96 --- /dev/null +++ b/probe_ably/app/src/scss/volt/components/_custom-forms.scss @@ -0,0 +1,103 @@ +/** + * = Custom forms + */ + + .custom-control-label { + // Background-color and (when enabled) gradient + &:before { + box-shadow: $custom-control-box-shadow; + @if $enable-transitions { + transition: $input-transition; + } + } + + span { + position: relative; + top: 2px; + } +} + +.custom-control-label { + margin-bottom: 0; +} + +.custom-control-input { + &:active~.custom-control-label::before { + border-color: $custom-control-indicator-active-border-color; + } +} + +// Custom File Input + +.custom-file-label { + background-color: #f3f3f5; + + &::after { + + background-color: #f3f3f5; + } +} + + +//Select +.custom-select{ + font-size: $input-btn-font-size; + box-shadow:none; + + &.custom-select-shadow { + box-shadow: $input-box-shadow; + transition: box-shadow .15s ease; + + &:focus { + box-shadow: $shadow-input-focus; + } + } + + &:hover { + cursor: pointer; + } +} + +// Inbox star +.rating-star { + &.star-lg{ + label{ + margin-bottom: .5rem; + &::before{ + font-size: $font-size-xl; + } + } + } + label { + position: relative; + margin-bottom: 0; + cursor: pointer; + color: $light; + &:before { + content: "\f005"; + font-family: "Font Awesome 5 Free"; + font-weight: 900; + transition: all .2s ease; + font-size: 1.0625rem; + } + } + input { + position: absolute; + z-index: -1; + opacity: 0; + } + + >input:checked~label { + color: $warning; + } + + >label { + &:hover { + color: $warning; + } + &:hover~label { + color: $warning; + } + } +} + diff --git a/probe_ably/app/src/scss/volt/components/_datepicker.scss b/probe_ably/app/src/scss/volt/components/_datepicker.scss new file mode 100644 index 0000000..36126ce --- /dev/null +++ b/probe_ably/app/src/scss/volt/components/_datepicker.scss @@ -0,0 +1,27 @@ +/** + * = Datepickers + */ + +.datepicker{ + table { + margin: 0; + -webkit-touch-callout: none; + user-select: none; + + td { + border-radius: 0 !important; + } + + th { + border-radius: 0; + font-weight: 500; + } + + td, th { + width: 36px !important; + height: 36px !important; + border: none; + text-align: center; + } + } +} \ No newline at end of file diff --git a/probe_ably/app/src/scss/volt/components/_dropdown.scss b/probe_ably/app/src/scss/volt/components/_dropdown.scss new file mode 100644 index 0000000..bf02f65 --- /dev/null +++ b/probe_ably/app/src/scss/volt/components/_dropdown.scss @@ -0,0 +1,100 @@ +/** + * = Dropdowns + */ + +.dropdown-menu { + min-width: 12rem; + + .dropdown-header, + .dropdown-item { + padding: .5rem 1rem; + font-size: $dropdown-font-size; + } + + .dropdown-header { + color: $dropdown-header-color; + font-weight: $dropdown-header-font-weight; + } + + .dropdown-item { + color: $gray-700; + transition: $transition-base; + font-weight: $dropdown-item-font-weight; + + &a:hover{ + color: $dropdown-item-hover-color; + } + } + + .show & { + animation: show-dropdown .2s ease forwards; + } + + &.dropdown-menu-xs { + min-width: 120px; + max-width: 120px; + border: $border-width solid $light; + @include box-shadow($box-shadow-sm); + } + +} + +.dropdown-divider { + margin: 0.375rem 0; + border-color:$light; +} + +// this helps when not only the button should toggle a dropdown +[data-toggle]:hover { + cursor: pointer; +} + +// remove the caret from Bootstrap by default +.dropdown-toggle { + &:after, .dropright &:after, .dropleft &:before, .dropup &:after { + display: none; + } +} + +// Dropown sizes +.dropdown-menu-sm { + min-width: 100px; + border: $border-radius-lg; +} + +.dropdown-menu-md { + min-width: 180px; + border: $border-radius-lg; +} + +.dropdown-menu-lg { + min-width: 350px; + border-radius: $border-radius-lg; + + @include media-breakpoint-down(lg) { + min-width: 285px; + transform: translateX(15%); + } +} + +.dropdown-menu-xl { + min-width: 450px; + border-radius: $border-radius-lg; + + @include media-breakpoint-down(xl) { + min-width: 285px; + transform: translateX(15%); + } +} + +.user-dropdown.dropdown-menu.show { + right: 0 !important; + left: auto !important; +} + +@include media-breakpoint-down(lg) { + .notifications-dropdown[style] { + left: auto !important; + right: 0 !important; + } +} \ No newline at end of file diff --git a/probe_ably/app/src/scss/volt/components/_dropzone.scss b/probe_ably/app/src/scss/volt/components/_dropzone.scss new file mode 100644 index 0000000..aa6723f --- /dev/null +++ b/probe_ably/app/src/scss/volt/components/_dropzone.scss @@ -0,0 +1,52 @@ +.dropzone { + min-height: 150px; + border: 2px dashed $gray-600; + background: $white; + cursor: pointer; + &:hover{ + background-color: $soft; + } + .dz-message{ + .dz-button{ + font-size:$font-size-lg; + font-weight:$font-weight-bold; + } + } +} + +.dropzone-files { + display: flex; + flex-direction: row; + flex-wrap: wrap; + margin: 1.5rem 0 1.5rem 0; +} + +.dropzone-preview { + position: relative; + display: inline-block; + vertical-align: top; + min-height: 100px; +} + +.dropzone-image { + border-radius: 20px; + overflow: hidden; + width: 120px; + height: 120px; + position: relative; + display: block; + z-index: 10; +} + +.dropzone-filename { + white-space: normal; + padding: 0 0.4em; + margin: 5px 0 5px 0; + border-radius: 3px; +} + +.dropzone-filename:not(:hover) { + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; +} \ No newline at end of file diff --git a/probe_ably/app/src/scss/volt/components/_forms.scss b/probe_ably/app/src/scss/volt/components/_forms.scss new file mode 100644 index 0000000..de8cd94 --- /dev/null +++ b/probe_ably/app/src/scss/volt/components/_forms.scss @@ -0,0 +1,83 @@ +.form-control{ + box-shadow:none; + + @include media-breakpoint-up(lg) { + &.form-control-lg{ + padding: $inpu-lg-padding-y $input-padding-x; + } + } + +} + +.form-check-input { + &.round-check{ + &[type="checkbox"] { + @include border-radius($form-check-radio-border-radius); + } + } +} + +.search-bar { + .form-control { + width: 280px; + transition: width .2s ease-in-out; + + @include media-breakpoint-down(sm) { + width: 120px; + + &:focus { + width: 150px; + } + } + } +} + +.input-group { + .form-control:focus { + border-color: $input-border-color; + + & + .input-group-text { + border-color: $input-border-color; + } + } +} + +.focused { + + .form-control { + border-color: $input-focus-border-color; + background-color: $input-focus-bg; + } +} + +.form-switch { + padding-left: $form-switch-padding-start; + + .form-check-input { + height: 1.275em; + } +} + +.form-select { + .form-select-lg{ + padding: $form-select-padding-y ($form-select-padding-x + $form-select-indicator-padding) $form-select-padding-y $form-select-padding-x; + } +} + +//Add File Alternative Style + +.file-field input[type="file"] { + max-width: 230px; + position: absolute; + cursor: pointer; + filter: alpha(opacity=0); + opacity: 0; + padding-bottom: 30px; +} +.file-field span { + cursor: pointer; +} + +.datepicker-dropdown { + z-index: 9999; +} \ No newline at end of file diff --git a/probe_ably/app/src/scss/volt/components/_icon-box.scss b/probe_ably/app/src/scss/volt/components/_icon-box.scss new file mode 100644 index 0000000..8520326 --- /dev/null +++ b/probe_ably/app/src/scss/volt/components/_icon-box.scss @@ -0,0 +1,206 @@ +/** + * = Icon boxes + */ + +.icon-box { + padding : $icon-box-padding; + position: relative; + + .icon-box-body { + position: relative; + } + +} + +.icon { + text-align: center; + display : inline-flex; + @include align-items(center); + @include justify-content(center); + + span, + svg { + font-size: $icon-size; + } + + &.icon-small { + + span, + svg { + font-size: 0.675rem; + } + } + + &.icon-xs { + + span, + svg { + font-size: $icon-size-xs; + } + } + + &.icon-sm { + + span, + svg { + font-size: $icon-size-sm; + } + } + + &.icon-lg { + + span, + svg { + font-size: $icon-size-lg; + } + + svg { + height: 2rem; + } + } + + &.icon-xl { + span { + font-size: $icon-size-xl; + } + + svg { + height: 3.5rem; + } + } + + &.w-20 { + width: 20px; + } + + &.w-30 { + width: 30px; + } + + &.rounded-circle { + .icon-bordered { + border-radius: $circle-radius; + } + } + +} + +// Icons included in shapes +.icon-shape { + width : $icon-shape; + height : $icon-shape; + text-align : center; + display : inline-flex; + align-items : center; + justify-content: center; + + span, + svg { + font-size: $icon-size; + } + + &.icon-xs { + width : $icon-shape-xs; + height: $icon-shape-xs; + + span, + svg { + font-size: $icon-size-xs; + } + } + + &.icon-sm { + width : $icon-shape-sm; + height: $icon-shape-sm; + + span, + svg { + font-size: $icon-size-sm; + } + } + + &.icon-lg { + width : $icon-shape-lg; + height: $icon-shape-lg; + + span, + svg { + font-size: $icon-size-md; + } + } +} + +//Icon Parallax +.image-shape { + width : $icon-shape-img; + height : $icon-shape-img; + position: relative; + @include icon-image-background(center, cover, no-repeat); + + span { + font-size: $icon-size; + z-index : 1; + } + + &.icon-parallax { + @include icon-parallax-background(center, cover, fixed, no-repeat); + overflow : hidden; + background-repeat: no-repeat; + } +} + +.list-icon { + width: 45px; +} + + +.shape-xs { + width : 10px; + height: 10px; +} + +//Calendar Icon + +.icon-badge { + display : inline-block; + position : absolute; + top : -11px; + right : 6px; + height : 7px; + width : 7px; + background-color: $danger; +} + +.github-big-icon { + position: absolute; + right : 200px; + top : 165px; + + span { + font-size: 800px; + opacity : .1; + } + + svg { + font-size: 800px; + opacity : .1; + } +} + +.react-big-icon { + position: absolute; + opacity: .05; + + @include media-breakpoint-up(lg) { + right: -35%; + bottom: -30%; + font-size: 800px; + } + + @include media-breakpoint-up(xl) { + right: -15%; + bottom : -35%; + font-size: 800px; + } + +} \ No newline at end of file diff --git a/probe_ably/app/src/scss/volt/components/_images.scss b/probe_ably/app/src/scss/volt/components/_images.scss new file mode 100644 index 0000000..a821471 --- /dev/null +++ b/probe_ably/app/src/scss/volt/components/_images.scss @@ -0,0 +1,95 @@ +/** + * = Images + */ +.image-xl { + height: 20rem; + img{ + height: 20rem; + } +} + +.image-lg { + height: 12rem; + img{ + height: 12rem; + } +} + +.image-md{ + height: 5.5rem; + img{ + height: 5.5rem; + } +} + +.image-sm { + height: 3rem; + img{ + height: 3rem; + } +} + +.image-xs { + height: 1.5rem; + img{ + height: 1.5rem; + } +} + +.image-small { + height: 1rem; + img{ + height: 1rem; + } +} + + + +.img-thumbnail { + border-width: $border-width-md; + box-shadow: none; +} + +.full-image{ + height:100%; +} + +.gallery-feed{ + img{ + width: 20%; + margin-right: .5rem; + margin-bottom: .5rem; + float: left; + } +} + +.language-flag{ + width: auto; + height: 1rem; + margin-right: 0.4rem; + position: relative; + top: -2px; +} + +@include media-breakpoint-up(sm){ + .effect-img-2 { + position: absolute; + right: 5rem; + top: 19%; + z-index: 2; + margin: 0; + } + + .effect-img-1, .effect-img-2 { + margin: 0 0 3rem; + width: 350px; + height: auto; + } +} + +@include media-breakpoint-down(md){ + .effect-img-2{ + right:.425rem; + top:0; + } +} diff --git a/probe_ably/app/src/scss/volt/components/_input-group.scss b/probe_ably/app/src/scss/volt/components/_input-group.scss new file mode 100644 index 0000000..a1d9338 --- /dev/null +++ b/probe_ably/app/src/scss/volt/components/_input-group.scss @@ -0,0 +1,51 @@ +/** + * = Input groups + */ + +.input-group { + border-radius: $input-border-radius; + transition: $transition-base; + + .form-control { + box-shadow: none; + + &:not(:first-child) { + border-left: 0; + padding-left: 0; + } + &:not(:last-child) { + border-right: 0; + padding-right: 0; + } + &:focus { + box-shadow: none; + } + } +} + +.input-group-text { + font-size: $font-size-sm; + transition: $input-transition; + border-right:0; +} + + + +.input-group-prepend { + margin-right: -2px; +} + +// .focus class is applied dinamycally from theme.js + +.focused { + + .input-group-text { + color: $input-group-addon-focus-color; + background-color: $input-group-addon-focus-bg; + } + + .input-group-shadow{ + box-shadow:$shadow-input-focus; + } +} + diff --git a/probe_ably/app/src/scss/volt/components/_list-group.scss b/probe_ably/app/src/scss/volt/components/_list-group.scss new file mode 100644 index 0000000..6fff0c8 --- /dev/null +++ b/probe_ably/app/src/scss/volt/components/_list-group.scss @@ -0,0 +1,96 @@ +/** + * = List groups + */ + +// Space list items +.list-group-space { + .list-group-item { + margin-bottom: 1.5rem; + @include border-radius($list-group-border-radius); + } +} + + +// List group components +.list-group-item{ + border:0; + &.active { + z-index: 2; // Place active items above their siblings for proper border styling + color: $list-group-active-color; + background-color: $list-group-active-bg; + border-color: $list-group-active-border-color; + } + + i{ + width: 1rem; + } +} + +.list-group-img { + width: 3rem; + height: 3rem; + border-radius: 50%; + vertical-align: top; + margin: -.1rem 1.2rem 0 -.2rem; +} +.list-group-content { + -webkit-box-flex: 1; + -ms-flex: 1; + flex: 1; + min-width: 0; + + > p { + color: $gray-500; + line-height: 1.5; + margin: .2rem 0 0; + } +} +.list-group-heading { + font-size: $font-size-base; + color: $gray-800; + + > small { + float: right; + color: $gray-500; + font-weight: 500; + } +} + + +.list-group{ + &.simple-list{ + .list-group-item{ + background: transparent; + border: none; + padding: 0.375rem 0.125rem; + i{ + vertical-align: middle; + width: 35px; + display: inline-block; + } + } + } + +} + + +//News list for widgets + +.news-list{ + .row{ + > [class*='col']{ + padding: 0 $spacer/4; + } + } + + > li{ + &:not(:last-child){ + margin-bottom: .75rem; + } + } + + img{ + min-height: 100%; + object-fit: cover; + } +} diff --git a/probe_ably/app/src/scss/volt/components/_modal.scss b/probe_ably/app/src/scss/volt/components/_modal.scss new file mode 100644 index 0000000..49abbe2 --- /dev/null +++ b/probe_ably/app/src/scss/volt/components/_modal.scss @@ -0,0 +1,31 @@ +/** + * = Modals + */ + +.modal{ + &.static-example{ + position: relative; + display: block; + } +} + +.modal-content { + border: 0; + @if $enable-rounded { + border-radius: $modal-content-border-radius; + } @else { + border-radius: 0; + } +} + +.modal-fluid { + .modal-dialog { + margin-top: 0; + margin-bottom: 0; + } + .modal-content { + border-radius: 0; + } +} + + diff --git a/probe_ably/app/src/scss/volt/components/_nav.scss b/probe_ably/app/src/scss/volt/components/_nav.scss new file mode 100644 index 0000000..b6476cd --- /dev/null +++ b/probe_ably/app/src/scss/volt/components/_nav.scss @@ -0,0 +1,226 @@ +/** + * = Navs + */ + +.nav-link { + color: $nav-link-color; + + &:hover, + &.active { + color: $nav-link-hover-color; + img{ + opacity: inherit; + transition: $transition-base; + } + } + + span{ + position: relative; + } +} + +//Tabs + +.nav-tabs { + .nav-item { + margin-bottom:0; + } + + .nav-link { + border: 0; + padding:1rem 1rem; + + &.active{ + color: $white; + background-color: $primary; + } + } + + &.nav-dark{ + .nav-link{ + &.active{ + color: $white; + background-color: #12358a; + } + } + } + + &.nav-light{ + .nav-link{ + &.active{ + color: $black; + background-color: $light; + } + &:hover{ + color:$black; + } + } + } +} + +// Pills + +.nav-pills { + .nav-item:not(:last-child) { + padding-right: $nav-pills-space-x; + } + + .nav-link { + padding: $nav-pills-padding-y $nav-pills-padding-x; + transition: $transition-base; + box-shadow:$nav-link-shadow; + border:$nav-pills-border-width solid $nav-pills-border-color; + + &.avatar-link{ + border:0; + } + + &:hover { + color: $nav-pills-link-hover-color; + } + } + + .nav-link.active, + .show > .nav-link { + color: $nav-pills-link-active-color; + background-color: $nav-pills-link-active-bg; + border-color:$nav-pills-link-active-color; + } + + &.rounded{ + .nav-link{ + border-radius:30px; + } + } + + &.bordered-pill-md{ + .nav-link{ + border: $border-width-md solid $gray-200; + font-weight:$font-weight-bold; + } + } + + &.vertical-tab { + .nav-link{ + margin-bottom: .625rem; + } + .nav-item:not(:last-child) { + padding-right:0; + } + } + + @include media-breakpoint-down(xs) { + .nav-item { + margin-bottom: $spacer; + } + } +} + +@include media-breakpoint-down(sm) { + .nav-pills:not(.nav-pills-circle) { + .nav-item { + padding-right: 0; + } + } +} + + +// Navs circle + +.nav-pill-circle { + .nav-link { + @include display-flex(); + text-align: center; + height: 80px; + width: 80px; + padding: 0; + box-shadow: $nav-link-shadow; + border-radius: $nav-pills-border-circle; + align-items: center; + justify-content: center; + + &.avatar-link{ + box-shadow: none; + } + } + + &.vertical-tab { + .nav-link-icon { + i, svg { + font-size: 1.5rem; + } + } + .nav-item:not(:last-child) { + padding-right:0; + } + } + + .nav-link-icon { + i, svg { + font-size: 1.25rem; + margin:0; + display: block; + } + } +} + +// Navs square + +.nav-pill-square { + .nav-link { + text-align: center; + min-width: 80px; + box-shadow: $nav-link-shadow; + @include display-flex(); + align-items: center; + justify-content: center; + } + + &.vertical-tab{ + .nav-link{ + margin-bottom: .625rem; + min-width: 100px; + } + .nav-item:not(:last-child) { + padding-right:0; + } + } + + .nav-link-icon { + i, svg { + font-size: 1.25rem; + margin:0; + display: block; + line-height: 50px; + } + } +} + +// Nav wrapper +.nav-wrapper { + padding: 1rem 0; + @include border-top-radius($card-border-radius); + + + .card { + @include border-top-radius(0); + @include border-bottom-radius($card-border-radius); + } +} + +// Tabbable tabs +// +// Hide tabbable panes to start, show them when `.active` + +.tab-content { + > .tab-pane { + display: none; + pre{ + padding:0; + margin:0; + } + } + + > .active { + display: block; + } +} diff --git a/probe_ably/app/src/scss/volt/components/_pagination.scss b/probe_ably/app/src/scss/volt/components/_pagination.scss new file mode 100644 index 0000000..d5b4440 --- /dev/null +++ b/probe_ably/app/src/scss/volt/components/_pagination.scss @@ -0,0 +1,16 @@ +/** + * = Paginations + */ + .circle-pagination{ + .page-link, + span{ + @include display-flex(); + align-items: center; + justify-content: center; + width: 34px; + height: 34px; + padding: 0; + @include border-radius($circle-radius); + } +} + diff --git a/probe_ably/app/src/scss/volt/components/_popover.scss b/probe_ably/app/src/scss/volt/components/_popover.scss new file mode 100644 index 0000000..2cc316d --- /dev/null +++ b/probe_ably/app/src/scss/volt/components/_popover.scss @@ -0,0 +1,19 @@ +/** + * = Popovers + */ + +.popover { + border: 0; +} + + +.popover-header { + font-weight: $font-weight-bold; +} + +// Alternative colors +@each $color, $value in $theme-colors { + .popover-#{$color} { + @include popover-variant($value); + } +} \ No newline at end of file diff --git a/probe_ably/app/src/scss/volt/components/_preloader.scss b/probe_ably/app/src/scss/volt/components/_preloader.scss new file mode 100644 index 0000000..00dff2d --- /dev/null +++ b/probe_ably/app/src/scss/volt/components/_preloader.scss @@ -0,0 +1,31 @@ +.preloader { + display: flex; + align-items: center; + height: 100vh; + left: 0; + position: fixed; + top: 0; + width: 100%; + z-index: 9999; + @include transition(height .3s); + + .loader-element { + + @include transition(spin .3s linear infinite); + -webkit-animation:spin 3s linear infinite; + -moz-animation:spin 3s linear infinite; + animation:spin 3s linear infinite; + } + + &.show { + height: 0; + + .loader-element { + display: none !important; + } + } +} + +@-moz-keyframes spin { 100% { -moz-transform: rotate(360deg); } } +@-webkit-keyframes spin { 100% { -webkit-transform: rotate(360deg); } } +@keyframes spin { 100% { -webkit-transform: rotate(360deg); transform:rotate(360deg); } } diff --git a/probe_ably/app/src/scss/volt/components/_pricing-cards.scss b/probe_ably/app/src/scss/volt/components/_pricing-cards.scss new file mode 100644 index 0000000..5883bad --- /dev/null +++ b/probe_ably/app/src/scss/volt/components/_pricing-cards.scss @@ -0,0 +1,42 @@ +/** + * = Pricing cards + */ + +.pricing-card{ + + .card-header { + background: transparent; + z-index: 2; + } + + .card-body{ + z-index: 2; + } + + .pricing-value{ + width: 150px; + height: 150px; + border-radius: 50%; + border-width: $border-width-xl; + border-style: double; + margin: 0 auto; + + span { + line-height: 140px; + } + } + + .list-group-item{ + background: transparent; + border: none; + padding: 0.375rem 0.125rem; + i{ + display: inline-block; + vertical-align: middle; + width: 35px; + } + } + @include media-breakpoint-down(md){ + margin-top: 1rem; + } +} \ No newline at end of file diff --git a/probe_ably/app/src/scss/volt/components/_progress.scss b/probe_ably/app/src/scss/volt/components/_progress.scss new file mode 100644 index 0000000..f51661e --- /dev/null +++ b/probe_ably/app/src/scss/volt/components/_progress.scss @@ -0,0 +1,117 @@ +/** + * = Progress bars + */ + +.progress-wrapper { + position: relative; +} + +.progress-bar { + box-shadow: none; + border-radius: 0; + height: auto; +} + +.progress { + height: 4px; + margin-bottom: $spacer; + overflow: hidden; + border-radius: $border-radius-sm; + background-color: $progress-bg; + font-size: $font-size-xs; + font-weight: $font-weight-bold; + @include box-shadow(inset 0 1px 2px rgba(0, 0, 0, .1)) +} + +.progress-xl { + height: $progress-xl-size; +} +.progress-lg { + height: $progress-lg-size; +} +.progress-sm { + height: $progress-sm-size; +} + +.progress-info{ + @include display-flex(); + @include align-items(center); + @include justify-content(space-between); + margin-bottom: .5rem; + + .progress-label { + span { + display: inline-block; + color: $primary; + font-size: $font-size-sm; + font-weight: $font-weight-bold; + } + } + + .progress-percentage { + text-align: right; + span { + display: inline-block; + color: $gray-700; + font-size: $font-size-xs; + font-weight: $font-weight-bold; + } + } +} + +.info-xl{ + .progress-label, + .progress-percentage { + span { + font-size: $font-size-sm; + } + } + + .progress-percentage { + text-align: right; + } + +} + +.progress-tooltip { + background: $primary; + color: $white; + font-weight: $font-weight-bold; + padding: .25rem .375rem; + line-height: 1; + font-size: $font-size-xs; + position: relative; + border-radius: $border-radius-sm; + + &:after { + content: " "; + position: absolute; + top: 100%; + left: 10px; + border: solid transparent; + height: 0; + width: 0; + pointer-events: none; + border-top-color: $gray; + border-width: 6px; + } +} + +@-webkit-keyframes animate-positive{ + 0% { width: 0%; } +} +@keyframes animate-positive{ + 0% { width: 0%; } +} + +//Tooltip arrow color +@each $color, +$value in $theme-colors { + .progress-info{ + .bg-#{$color} { + &::after{ + border-top-color: $value; + } + } + } +} diff --git a/probe_ably/app/src/scss/volt/components/_scrollbar.scss b/probe_ably/app/src/scss/volt/components/_scrollbar.scss new file mode 100644 index 0000000..7d2ec71 --- /dev/null +++ b/probe_ably/app/src/scss/volt/components/_scrollbar.scss @@ -0,0 +1,227 @@ +[data-simplebar] { + position: fixed; + flex-direction: column; + flex-wrap: wrap; + justify-content: flex-start; + align-content: flex-start; + align-items: flex-start; +} + +.simplebar-wrapper { + overflow: hidden; + width: inherit; + height: inherit; + max-width: inherit; + max-height: inherit; +} + +.simplebar-mask { + direction: inherit; + position: absolute; + overflow: hidden; + padding: 0; + margin: 0; + left: 0; + top: 0; + bottom: 0; + right: 0; + width: auto !important; + height: auto !important; + z-index: 0; +} + +.simplebar-offset { + direction: inherit !important; + box-sizing: inherit !important; + resize: none !important; + position: absolute; + top: 0; + left: 0; + bottom: 0; + right: 0; + padding: 0; + margin: 0; + -webkit-overflow-scrolling: touch; +} + +.simplebar-content-wrapper { + direction: inherit; + box-sizing: border-box !important; + position: relative; + display: block; + height: 100%; /* Required for horizontal native scrollbar to not appear if parent is taller than natural height */ + width: auto; + max-width: 100%; /* Not required for horizontal scroll to trigger */ + max-height: 100%; /* Needed for vertical scroll to trigger */ + scrollbar-width: none; + -ms-overflow-style: none; +} + +.simplebar-content-wrapper::-webkit-scrollbar, +.simplebar-hide-scrollbar::-webkit-scrollbar { + width: 0; + height: 0; +} + +.simplebar-content:before, +.simplebar-content:after { + content: ' '; + display: table; +} + +.simplebar-placeholder { + max-height: 100%; + max-width: 100%; + width: 100%; + pointer-events: none; +} + +.simplebar-height-auto-observer-wrapper { + box-sizing: inherit !important; + height: 100%; + width: 100%; + max-width: 1px; + position: relative; + float: left; + max-height: 1px; + overflow: hidden; + z-index: -1; + padding: 0; + margin: 0; + pointer-events: none; + flex-grow: inherit; + flex-shrink: 0; + flex-basis: 0; +} + +.simplebar-height-auto-observer { + box-sizing: inherit; + display: block; + opacity: 0; + position: absolute; + top: 0; + left: 0; + height: 1000%; + width: 1000%; + min-height: 1px; + min-width: 1px; + overflow: hidden; + pointer-events: none; + z-index: -1; +} + +.simplebar-track { + z-index: 1; + position: absolute; + right: 0; + bottom: 0; + pointer-events: none; + overflow: hidden; +} + +[data-simplebar].simplebar-dragging .simplebar-content { + pointer-events: none; + user-select: none; + -webkit-user-select: none; +} + +[data-simplebar].simplebar-dragging .simplebar-track { + pointer-events: all; +} + +.simplebar-scrollbar { + position: absolute; + left: 0; + right: 0; + min-height: 10px; +} + +.simplebar-scrollbar:before { + position: absolute; + content: ''; + background: black; + border-radius: 7px; + left: 2px; + right: 2px; + opacity: 0; + transition: opacity 0.2s 0.5s linear; +} + +.simplebar-scrolling .simplebar-scrollbar:before, +.simplebar-hover .simplebar-scrollbar:before, +.simplebar-mouse-entered .simplebar-scrollbar:before { + opacity: 0.5; + transition-delay: 0s; + transition-duration: 0s; +} + +.simplebar-scrollbar.simplebar-visible:before { + /* When hovered, remove all transitions from drag handle */ + opacity: 0.5; + transition-delay: 0s; + transition-duration: 0s; +} + +.simplebar-track.simplebar-vertical { + top: 0; + width: 11px; +} + +.simplebar-scrollbar:before { + top: 2px; + bottom: 2px; + left: 2px; + right: 2px; +} + +.simplebar-track.simplebar-horizontal { + left: 0; + height: 11px; +} + +.simplebar-track.simplebar-horizontal .simplebar-scrollbar { + right: auto; + left: 0; + top: 0; + bottom: 0; + min-height: 0; + min-width: 10px; + width: auto; +} + +/* Rtl support */ +[data-simplebar-direction='rtl'] .simplebar-track.simplebar-vertical { + right: auto; + left: 0; +} + +.simplebar-dummy-scrollbar-size { + direction: rtl; + position: fixed; + opacity: 0; + visibility: hidden; + height: 500px; + width: 500px; + overflow-y: hidden; + overflow-x: scroll; + -ms-overflow-style: scrollbar !important; +} + +.simplebar-dummy-scrollbar-size > div { + width: 200%; + height: 200%; + margin: 10px 0; +} + +.simplebar-hide-scrollbar { + position: fixed; + left: 0; + visibility: hidden; + overflow-y: scroll; + scrollbar-width: none; + -ms-overflow-style: none; +} + +.simplebar-scrollbar::before { + background-color: darken($dark, 10%); +} diff --git a/probe_ably/app/src/scss/volt/components/_shapes.scss b/probe_ably/app/src/scss/volt/components/_shapes.scss new file mode 100644 index 0000000..64e46d6 --- /dev/null +++ b/probe_ably/app/src/scss/volt/components/_shapes.scss @@ -0,0 +1,18 @@ +/** + * = Shapes + */ + +.avatar-sm { + width: $avatar-sm-y; + height: $avatar-sm-x; +} + +.avatar-md { + width: $avatar-md-y; + height: $avatar-md-x; +} + +.avatar-lg { + width: $avatar-lg-y; + height: $avatar-lg-x; +} diff --git a/probe_ably/app/src/scss/volt/components/_tables.scss b/probe_ably/app/src/scss/volt/components/_tables.scss new file mode 100644 index 0000000..226f778 --- /dev/null +++ b/probe_ably/app/src/scss/volt/components/_tables.scss @@ -0,0 +1,434 @@ +// General styles + +.table { + + thead th { + padding-top : $table-head-spacer-y; + padding-bottom: $table-head-spacer-y; + font-size : $table-head-font-size; + text-transform: $table-head-text-transform; + font-weight : $font-weight-bolder; + border-top : 0; + } + + &.comparison-table { + + thead th { + font-size: 1.25rem; + color : $dark; + } + + td { + font-size: $font-size-base; + } + + } + + th { + font-weight: $font-weight-bold; + padding : 1rem; + } + + td { + .progress { + height: 3px; + width : 120px; + margin: 0; + } + } + + td, + th { + font-size : $table-body-font-size; + white-space: nowrap; + } + + // User Table + + &.user-table { + thead th { + border-top: 0; + } + } + + // Vetical align table content + + &.align-items-center { + + td, + th { + vertical-align: middle; + } + } + + + // Styles for dark table + + .thead-dark { + th { + background-color: $dark; + color : $white; + + a { + color: $dark; + } + } + } + + + // Styles for light table + + .thead-light { + th { + background-color: $soft; + color : $dark; + + a { + color: $dark; + } + } + } +} + + +// Add transition for hover state + +.table-hover { + tr { + @include transition($transition-base); + } +} + + +// Flush tables + +.table-flush { + + td, + th { + border-left : 0; + border-right: 0; + } + + tbody { + tr { + &:first-child { + + td, + th { + border-top: 0; + } + } + + &:last-child { + + td, + th { + border-bottom: 0; + } + } + } + } +} + + +// Tables inside cards + +.card { + .table { + margin-bottom: 0; + + td, + th { + padding-left : $card-spacer-x; + padding-right: $card-spacer-x; + } + } +} + +.table { + [data-sort] { + cursor: pointer; + } + + .custom-toggle { + display: block; + } + + .thead-dark { + [data-sort] { + &::after { + content : str-replace(url("data:image/svg+xml;utf8,"), "#", "%23"); + margin-left: .25rem; + } + } + } + + .thead-light { + [data-sort] { + &::after { + content : str-replace(url("data:image/svg+xml;utf8,"), "#", "%23"); + margin-left: .25rem; + } + } + } +} + +.dataTables_wrapper { + + .dataTables_info { + padding-left: 1.5rem; + } + + .dataTables_paginate { + padding-right: 1.5rem; + } + + .dataTables_length { + label { + padding-left: 1.5rem; + } + } + + .dataTables_filter { + padding-right: 1.5rem; + } +} + +.dataTable-top, +.dataTable-bottom { + display : flex; + width : 100%; + justify-content: space-between; + + @include media-breakpoint-down(md) { + flex-direction: column; + + .dataTable-info { + margin-bottom: 1rem; + } + } +} + +.dataTable-top { + padding: 0 1.5rem 1rem 1.5rem; +} + +.dataTable-bottom { + padding: 1.5rem 1.5rem 0 1.5rem; +} + +.dataTable-pagination { + display: flex; + @include list-unstyled(); + + a { + padding: $pagination-padding-y $pagination-padding-x; + @include font-size(null); + } + + li { + @if $pagination-margin-start==(-$pagination-border-width) { + &:first-child { + a { + @include border-start-radius($pagination-border-radius); + } + } + + &:last-child { + a { + @include border-end-radius($pagination-border-radius); + } + } + } + + @else { + + //Add border-radius to all pageLinks in case they have left margin + a { + @include border-radius($pagination-border-radius); + } + } + } + + >li { + &:not(:first-child) a { + margin-left: $pagination-margin-start; + } + + &.active a { + z-index: 3; + color : $pagination-active-color; + @include gradient-bg($pagination-active-bg); + border-color: $pagination-active-border-color; + } + + &.disabled a { + color : $pagination-disabled-color; + pointer-events : none; + background-color: $pagination-disabled-bg; + border-color : $pagination-disabled-border-color; + } + + a { + position : relative; + display : block; + color : $pagination-color; + text-decoration : if($link-decoration==none, null, none); + background-color: $pagination-bg; + border : $pagination-border-width solid $pagination-border-color; + + &:hover { + z-index : 2; + color : $pagination-hover-color; + text-decoration : if($link-hover-decoration==underline, none, null); + background-color: $pagination-hover-bg; + border-color : $pagination-hover-border-color; + } + + &:focus { + z-index : 3; + outline : $pagination-focus-outline; + box-shadow: $pagination-focus-box-shadow; + } + } + } +} + +.dataTable-selector { + display : inline-block; + width : auto; + height : $form-select-height; + padding : $form-select-padding-y ($form-select-padding-x + $form-select-indicator-padding) $form-select-padding-y $form-select-padding-x; + font-family: $form-select-font-family; + @include font-size($form-select-font-size); + font-weight : $form-select-font-weight; + line-height : $form-select-line-height; + color : $form-select-color; + vertical-align : middle; + background-color : $form-select-bg; + background-image : escape-svg($form-select-indicator); + background-repeat : no-repeat; + background-position: $form-select-bg-position; + background-size : $form-select-bg-size; + border : $form-select-border-width solid $form-select-border-color; + @include border-radius($form-select-border-radius, 0); + @include box-shadow($form-select-box-shadow); + appearance: none; + + &:focus { + border-color: $form-select-focus-border-color; + outline : 0; + + @if $enable-shadows { + @include box-shadow($form-select-box-shadow, $form-select-focus-box-shadow); + } + + @else { + // Avoid using mixin so we can pass custom focus shadow properly + box-shadow: $form-select-focus-box-shadow; + } + + &::-ms-value { + // For visual consistency with other platforms/browsers, + // suppress the default white text on blue background highlight given to + // the selected option text when the (still closed) s in some browsers, due to the limited stylability of ` + + + ) diff --git a/probe_ably/core/tasks/probing/train_probing_task.py b/probe_ably/core/tasks/probing/train_probing_task.py index d9e6a54..261011e 100644 --- a/probe_ably/core/tasks/probing/train_probing_task.py +++ b/probe_ably/core/tasks/probing/train_probing_task.py @@ -81,7 +81,7 @@ def start_training_process( return preds_test - def run(self, tasks: Dict, probing_setup: Dict) -> Dict: + def run(self, tasks: Dict, probing_setup: Dict, thread=None) -> Dict: """Runs the Probing models :param tasks: Data content of the models for probing. @@ -135,6 +135,8 @@ def run(self, tasks: Dict, probing_setup: Dict) -> Dict: desc=f"Task progress", bar_format="{l_bar}%s{bar}%s{r_bar}" % (Fore.GREEN, Fore.RESET), ) + if thread: + thread.task_loop_bar = task_loop_bar for id_task, content_tasks in task_loop_bar: task_loop_bar.set_description( @@ -149,6 +151,8 @@ def run(self, tasks: Dict, probing_setup: Dict) -> Dict: bar_format="{l_bar}%s{bar}%s{r_bar}" % (Fore.BLUE, Fore.RESET), leave=False, ) + if thread: + thread.model_loop_bar = model_loop_bar for id_model, model_content in model_loop_bar: model_loop_bar.set_description( f"Model: {model_content['model_name']} progress" @@ -188,6 +192,8 @@ def run(self, tasks: Dict, probing_setup: Dict) -> Dict: bar_format="{l_bar}%s{bar}%s{r_bar}" % (Fore.YELLOW, Fore.RESET), ) + if thread: + thread.probes_loop_bar = probes_loop_bar for probe in probes_loop_bar: probes_loop_bar.set_description( f"Probe: {probe_model_name} progress" From 9a233361b37d0ccf992ae0fa0f70d37f354fa8b5 Mon Sep 17 00:00:00 2001 From: Julia Rozanova Date: Mon, 8 Nov 2021 19:10:14 +0000 Subject: [PATCH 04/25] pivot to fastapi skeleton and include config loader --- .../probing/prepare_data_for_probing_task.py | 2 +- .../core/tasks/probing/train_probing_task.py | 31 ++++++++++++++++--- 2 files changed, 27 insertions(+), 6 deletions(-) diff --git a/probe_ably/core/tasks/probing/prepare_data_for_probing_task.py b/probe_ably/core/tasks/probing/prepare_data_for_probing_task.py index e43109f..213b17a 100644 --- a/probe_ably/core/tasks/probing/prepare_data_for_probing_task.py +++ b/probe_ably/core/tasks/probing/prepare_data_for_probing_task.py @@ -33,7 +33,7 @@ def train_val_test_split(X, y, train_size, val_size, test_size, seed=42): return X_train, X_val, X_test, y_train, y_val, y_test - def run(self, tasks_data: Dict, experiment_setup: Dict) -> Dict: + def run(self, tasks_data: Dict, experiment_setup: Dict, return_trained_model: bool = False) -> Dict: """Reads the task_data and experiment_setup, splits into train/dev/test and creates a TorchDataset for each. diff --git a/probe_ably/core/tasks/probing/train_probing_task.py b/probe_ably/core/tasks/probing/train_probing_task.py index 261011e..9d23f5f 100644 --- a/probe_ably/core/tasks/probing/train_probing_task.py +++ b/probe_ably/core/tasks/probing/train_probing_task.py @@ -39,6 +39,7 @@ def start_training_process( n_gpu, num_epochs, eval_fn, + return_trained_model=False ): outputs = {} # logger.info("Running train mode") @@ -79,9 +80,18 @@ def start_training_process( eval_fn, ) - return preds_test + if return_trained_model: + return { + "preds_test": preds_test, + "trained_model": best_model + } + + else: + return { + "preds_test": preds_test + } - def run(self, tasks: Dict, probing_setup: Dict, thread=None) -> Dict: + def run(self, tasks: Dict, probing_setup: Dict, thread=None, return_trained_model=False) -> Dict: """Runs the Probing models :param tasks: Data content of the models for probing. @@ -91,7 +101,7 @@ def run(self, tasks: Dict, probing_setup: Dict, thread=None) -> Dict: :return: Dictionary containing the following values: {int(task id) : "models": { - int(model id) : { + int (model id) : { str (name of probing model) : { int (run number) : { "complexity": { @@ -200,7 +210,7 @@ def run(self, tasks: Dict, probing_setup: Dict, thread=None) -> Dict: ) probe_for_model = deepcopy(probe) probe_for_control = deepcopy(probe) - preds_model = self.start_training_process( + train_output = self.start_training_process( train=model_content["model"]["train"], test=model_content["model"]["test"], dev=model_content["model"]["dev"], @@ -210,8 +220,13 @@ def run(self, tasks: Dict, probing_setup: Dict, thread=None) -> Dict: num_epochs=probe_content["epochs"], n_gpu=n_gpu, eval_fn=intra_metric_object.calculate_metrics, + return_trained_model=return_trained_model ) + preds_model = train_output["preds_test"] + if return_trained_model: + trained_probe_model = train_output["trained_model"] + if model_content["default_control"]: test_control_set = model_content["control"]["train"] else: @@ -226,7 +241,9 @@ def run(self, tasks: Dict, probing_setup: Dict, thread=None) -> Dict: num_epochs=probe_content["epochs"], n_gpu=n_gpu, eval_fn=intra_metric_object.calculate_metrics, - ) + return_trained_model=False + )["preds_test"] + output_results[id_task]["models"][id_model][probe_model_name][ run_number ] = { @@ -240,6 +257,10 @@ def run(self, tasks: Dict, probing_setup: Dict, thread=None) -> Dict: "preds": preds_control, }, } + if return_trained_model: + output_results[id_task]["models"][id_model][probe_model_name][ + run_number + ][model]["trained_model"] = trained_probe_model run_number += 1 return output_results From e8f9766f9541091c47ba159cdd048037da7f54d2 Mon Sep 17 00:00:00 2001 From: Julia Rozanova Date: Mon, 8 Nov 2021 20:55:13 +0000 Subject: [PATCH 05/25] update tests for async functions --- .../core/tasks/utils/read_input_task.py | 17 +++-- .../test_prepare_data_for_probing_task.py | 11 +-- .../core/tasks/probing/test_train_probing.py | 8 +-- .../core/tasks/utils/test_read_input_task.py | 69 +++++++++++-------- 4 files changed, 62 insertions(+), 43 deletions(-) diff --git a/probe_ably/core/tasks/utils/read_input_task.py b/probe_ably/core/tasks/utils/read_input_task.py index fed6a9d..0e83190 100644 --- a/probe_ably/core/tasks/utils/read_input_task.py +++ b/probe_ably/core/tasks/utils/read_input_task.py @@ -16,6 +16,7 @@ SCHEMA_TEMPLATE_FILE = settings["input_json_schema"] + class ModelRepresentationFileNotFound(Exception): def __init__(self, model_location): self.model_location = model_location @@ -97,6 +98,15 @@ async def run(self, input_file) -> Dict: input_data = await input_file.read() input_data = json.loads(input_data) + except FileNotFoundError: + print('GOT HERE??') + sys.exit(f"Input file not found: {input_file}") + + except json.JSONDecodeError as e: + sys.exit( + f"Input file is not a properly foramtted json file: {input_file}" + ) + try: with open(SCHEMA_TEMPLATE_FILE, "r") as f: input_template = json.load(f) @@ -131,12 +141,7 @@ async def run(self, input_file) -> Dict: ## Getting probe info probing_setup = self.parse_probing_setup(input_data) - except FileNotFoundError: - sys.exit(f"Input file not found: {input_file}") - except json.JSONDecodeError as e: - sys.exit( - f"Input file is not a properly foramtted json file: {input_file}" - ) + except jsonschema.ValidationError as e: logger.error(e) sys.exit( diff --git a/tests/core/tasks/probing/test_prepare_data_for_probing_task.py b/tests/core/tasks/probing/test_prepare_data_for_probing_task.py index 5bba430..1959585 100644 --- a/tests/core/tasks/probing/test_prepare_data_for_probing_task.py +++ b/tests/core/tasks/probing/test_prepare_data_for_probing_task.py @@ -1,17 +1,18 @@ import unittest +from unittest import IsolatedAsyncioTestCase from loguru import logger from probe_ably.core.tasks.utils import ReadInputTask from probe_ably.core.tasks.probing import PrepareDataForProbingTask -class PrepareProbingDataTest(unittest.TestCase): - def test_prepare_data_probing(self): +class PrepareProbingDataTest(IsolatedAsyncioTestCase): + async def test_prepare_data_probing(self): TEST_INPUT = ( "./tests/sample_files/test_input/multi_task_multi_model_with_control.json" ) read_input_task = ReadInputTask() - output = read_input_task.run(TEST_INPUT) + output = await read_input_task.run(TEST_INPUT) prepare_data_probing_task = PrepareDataForProbingTask() @@ -32,5 +33,5 @@ def test_prepare_data_probing(self): 0 ] - self.assertEquals(model_element, control_element) - self.assertEquals(total_size, original_size) + self.assertEqual(model_element, control_element) + self.assertEqual(total_size, original_size) diff --git a/tests/core/tasks/probing/test_train_probing.py b/tests/core/tasks/probing/test_train_probing.py index baeaa5f..c7c3a74 100644 --- a/tests/core/tasks/probing/test_train_probing.py +++ b/tests/core/tasks/probing/test_train_probing.py @@ -1,17 +1,17 @@ -import unittest +from unittest import IsolatedAsyncioTestCase from loguru import logger from probe_ably.core.tasks.utils import ReadInputTask from probe_ably.core.tasks.probing import PrepareDataForProbingTask, TrainProbingTask -class TrainProbingTest(unittest.TestCase): - def test_train_probing(self): +class TrainProbingTest(IsolatedAsyncioTestCase): + async def test_train_probing(self): TEST_INPUT = ( "./tests/sample_files/test_input/multi_task_multi_model_with_control.json" ) read_input_task = ReadInputTask() - output = read_input_task.run(TEST_INPUT) + output = await read_input_task.run(TEST_INPUT) prepare_data_probing_task = PrepareDataForProbingTask() diff --git a/tests/core/tasks/utils/test_read_input_task.py b/tests/core/tasks/utils/test_read_input_task.py index 100124b..949ae44 100644 --- a/tests/core/tasks/utils/test_read_input_task.py +++ b/tests/core/tasks/utils/test_read_input_task.py @@ -1,87 +1,100 @@ -import unittest +from unittest import IsolatedAsyncioTestCase from loguru import logger from probe_ably.core.tasks.utils import ReadInputTask -class PrepareRicoScaTest(unittest.TestCase): - def test_wrong_split_size(self): +class PrepareRicoScaTest(IsolatedAsyncioTestCase): + async def test_wrong_split_size(self): TEST_INPUT = "./tests/sample_files/test_input/wrong_split_size.json" read_input_task = ReadInputTask() - self.assertRaises(SystemExit, read_input_task.run, TEST_INPUT) + with self.assertRaises(SystemExit): + await read_input_task.run(TEST_INPUT) + # self.assertRaises(SystemExit, read_input_task.run, TEST_INPUT) - def test_multi_task_multi_model_with_control_with_setup(self): + async def test_multi_task_multi_model_with_control_with_setup(self): TEST_INPUT = ( "./tests/sample_files/test_input/multi_task_multi_model_with_control.json" ) read_input_task = ReadInputTask() - output = read_input_task.run(TEST_INPUT) + output = await read_input_task.run(TEST_INPUT) - self.assertEquals(len(output["tasks"][0]["models"][0]["model_labels"]), 10) + self.assertEqual(len(output["tasks"][0]["models"][0]["model_labels"]), 10) - def test_multi_task_multi_model_with_control_with_no_setup(self): + async def test_multi_task_multi_model_with_control_with_no_setup(self): TEST_INPUT = "./tests/sample_files/test_input/multi_task_multi_model_with_control_no_setup.json" read_input_task = ReadInputTask() - output = read_input_task.run(TEST_INPUT) + output = await read_input_task.run(TEST_INPUT) - self.assertEquals(output["probing_setup"]["train_size"], 0.60) + self.assertEqual(output["probing_setup"]["train_size"], 0.60) - def test_wrong_setup(self): + async def test_wrong_setup(self): TEST_INPUT = "./tests/sample_files/test_input/wrong_setup.json" read_input_task = ReadInputTask() - self.assertRaises(SystemExit, read_input_task.run, TEST_INPUT) + with self.assertRaises(SystemExit): + await read_input_task.run(TEST_INPUT) - def test_multi_task_wrong_probing_model(self): + async def test_multi_task_wrong_probing_model(self): TEST_INPUT = "./tests/sample_files/test_input/wrong_probing_model.json" read_input_task = ReadInputTask() # output = read_input_task.run(TEST_INPUT) - self.assertRaises(SystemExit, read_input_task.run, TEST_INPUT) + with self.assertRaises(SystemExit): + await read_input_task.run(TEST_INPUT) - def test_multi_task_wrong_inter_metric(self): + async def test_multi_task_wrong_inter_metric(self): TEST_INPUT = "./tests/sample_files/test_input/wrong_inter.json" read_input_task = ReadInputTask() - self.assertRaises(SystemExit, read_input_task.run, TEST_INPUT) + with self.assertRaises(SystemExit): + await read_input_task.run(TEST_INPUT) - def test_multi_task_wrong_intra_metric(self): + async def test_multi_task_wrong_intra_metric(self): TEST_INPUT = "./tests/sample_files/test_input/wrong_intra.json" read_input_task = ReadInputTask() # output = read_input_task.run(TEST_INPUT) - self.assertRaises(SystemExit, read_input_task.run, TEST_INPUT) + with self.assertRaises(SystemExit): + await read_input_task.run(TEST_INPUT) - def test_wrong_control_size(self): + async def test_wrong_control_size(self): TEST_INPUT = "./tests/sample_files/test_input/wrong_control_size.json" read_input_task = ReadInputTask() - self.assertRaises(SystemExit, read_input_task.run, TEST_INPUT) + with self.assertRaises(SystemExit): + await read_input_task.run(TEST_INPUT) - def test_missing_key(self): + async def test_missing_key(self): TEST_INPUT_1 = "./tests/sample_files/test_input/missing_tasks_key.json" read_input_task = ReadInputTask() - self.assertRaises(SystemExit, read_input_task.run, TEST_INPUT_1) + with self.assertRaises(SystemExit): + await read_input_task.run(TEST_INPUT_1) - def test_wrong_key_name(self): + async def test_wrong_key_name(self): TEST_INPUT_2 = "./tests/sample_files/test_input/wrong_template_format.json" read_input_task = ReadInputTask() - self.assertRaises(SystemExit, read_input_task.run, TEST_INPUT_2) + with self.assertRaises(SystemExit): + await read_input_task.run(TEST_INPUT_2) - def test_file_does_not_exist(self): + async def test_file_does_not_exist(self): TEST_INPUT = "./this/does/not/exist" read_input_task = ReadInputTask() - self.assertRaises(SystemExit, read_input_task.run, TEST_INPUT) - def test_wrong_json_format(self): + with self.assertRaises(SystemExit): + await read_input_task.run(TEST_INPUT) + + async def test_wrong_json_format(self): TEST_INPUT = "./tests/sample_files/test_input/problematic_json_file.json" read_input_task = ReadInputTask() - self.assertRaises(SystemExit, read_input_task.run, TEST_INPUT) + + with self.assertRaises(SystemExit): + await read_input_task.run(TEST_INPUT) \ No newline at end of file From 56f9c6b238ea61b7354ecf11dcbb665db558c990 Mon Sep 17 00:00:00 2001 From: Julia Rozanova Date: Tue, 9 Nov 2021 00:03:51 +0000 Subject: [PATCH 06/25] refactor folder structure and update calls and tests --- config/params/linear.json | 4 +- config/params/mlp.json | 4 +- .../probing_setup/default_probing_setup.json | 8 +- probe_ably/__main__.py | 18 + probe_ably/app/__main__.py | 83 +- probe_ably/core/flows/__init__.py | 1 - .../core/flows/probe_from_dataloaders.py | 20 - probe_ably/core/flows/run_probing.py | 36 - .../core/tasks/control_task/__init__.py | 1 - probe_ably/core/tasks/metric_task/__init__.py | 1 - probe_ably/core/tasks/probing/__init__.py | 2 - probe_ably/core/tasks/utils/__init__.py | 2 - .../core/tasks/utils/visualization_task.py | 26 - probe_ably/core/utils/__init__.py | 1 - probe_ably/core/utils/util_functions.py | 0 probe_ably/{core => }/metrics/__init__.py | 3 +- .../metrics/abstract_inter_model_metric.py | 0 .../metrics/abstract_intra_model_metric.py | 0 probe_ably/{core => }/metrics/accuracy.py | 2 +- .../process_metric_task.py | 4 +- probe_ably/{core => }/metrics/selectivity.py | 2 +- probe_ably/{core => }/models/__init__.py | 0 .../{core => }/models/abstract_model.py | 0 probe_ably/{core => }/models/linear.py | 2 +- probe_ably/{core => }/models/mlp.py | 3 +- probe_ably/{core => }/models/model_params.py | 8 +- probe_ably/probing/__init__.py | 4 + .../probing/calculate_metric_task.py | 0 .../{core/tasks => }/probing/deprobe_task.py | 0 probe_ably/probing/experiment_setup.py | 44 + .../generate_control_task.py | 1 - .../probing/prepare_data_for_probing_task.py | 0 .../tasks => }/probing/train_probing_task.py | 18 +- probe_ably/service/.gitignore | 23 - probe_ably/service/.prettierrc.js | 4 - probe_ably/service/package.json | 68 - .../service/public/android-chrome-192x192.png | Bin 11832 -> 0 bytes .../service/public/android-chrome-512x512.png | Bin 32392 -> 0 bytes .../service/public/apple-touch-icon.png | Bin 5617 -> 0 bytes probe_ably/service/public/browserconfig.xml | 9 - probe_ably/service/public/favicon-16x16.png | Bin 1102 -> 0 bytes probe_ably/service/public/favicon-32x32.png | Bin 1775 -> 0 bytes probe_ably/service/public/favicon.ico | Bin 15086 -> 0 bytes probe_ably/service/public/index.html | 132 -- probe_ably/service/public/logo192.png | Bin 5347 -> 0 bytes probe_ably/service/public/logo512.png | Bin 9664 -> 0 bytes probe_ably/service/public/manifest.json | 20 - probe_ably/service/public/mstile-150x150.png | Bin 5015 -> 0 bytes probe_ably/service/public/robots.txt | 3 - .../service/public/safari-pinned-tab.svg | 39 - probe_ably/service/public/site.webmanifest | 19 - probe_ably/service/server/__init__.py | 0 probe_ably/service/server/web_server.py | 39 - .../service/src/charts/LineChartWidget.js | 213 --- probe_ably/service/src/index.css | 13 - probe_ably/service/src/logo.svg | 1 - probe_ably/service/src/pages/HomePage.js | 55 - .../src/pages/dashboard/DashboardOverview.js | 54 - .../src/pages/forms/ConfigurationForm.js | 90 - probe_ably/service/src/react-app-env.d.ts | 1 - probe_ably/service/src/reportWebVitals.js | 13 - probe_ably/service/src/scss/volt.scss | 45 - .../service/src/scss/volt/_components.scss | 33 - .../service/src/scss/volt/_functions.scss | 23 - probe_ably/service/src/scss/volt/_layout.scss | 5 - probe_ably/service/src/scss/volt/_mixins.scss | 7 - probe_ably/service/src/scss/volt/_reboot.scss | 30 - .../service/src/scss/volt/_utilities.scss | 8 - .../service/src/scss/volt/_variables.scss | 1681 ----------------- probe_ably/service/src/scss/volt/_vendor.scss | 9 - .../src/scss/volt/components/_accordions.scss | 38 - .../src/scss/volt/components/_alerts.scss | 10 - .../src/scss/volt/components/_avatars.scss | 99 - .../src/scss/volt/components/_badge.scss | 102 - .../src/scss/volt/components/_blog-cards.scss | 12 - .../src/scss/volt/components/_breadcrumb.scss | 65 - .../src/scss/volt/components/_buttons.scss | 75 - .../src/scss/volt/components/_card.scss | 263 --- .../src/scss/volt/components/_carousel.scss | 52 - .../src/scss/volt/components/_charts.scss | 52 - .../src/scss/volt/components/_close.scss | 33 - .../src/scss/volt/components/_counters.scss | 14 - .../scss/volt/components/_custom-forms.scss | 103 - .../src/scss/volt/components/_datepicker.scss | 27 - .../src/scss/volt/components/_dropdown.scss | 100 - .../src/scss/volt/components/_dropzone.scss | 52 - .../src/scss/volt/components/_forms.scss | 83 - .../src/scss/volt/components/_icon-box.scss | 206 -- .../src/scss/volt/components/_images.scss | 95 - .../scss/volt/components/_input-group.scss | 51 - .../src/scss/volt/components/_list-group.scss | 96 - .../src/scss/volt/components/_modal.scss | 31 - .../src/scss/volt/components/_nav.scss | 226 --- .../src/scss/volt/components/_pagination.scss | 16 - .../src/scss/volt/components/_popover.scss | 19 - .../src/scss/volt/components/_preloader.scss | 31 - .../scss/volt/components/_pricing-cards.scss | 42 - .../src/scss/volt/components/_progress.scss | 117 -- .../src/scss/volt/components/_scrollbar.scss | 227 --- .../src/scss/volt/components/_shapes.scss | 18 - .../src/scss/volt/components/_tables.scss | 434 ----- .../src/scss/volt/components/_timelines.scss | 23 - .../src/scss/volt/components/_tooltip.scss | 46 - .../src/scss/volt/components/_type.scss | 184 -- .../service/src/scss/volt/layout/_footer.scss | 105 - .../service/src/scss/volt/layout/_navbar.scss | 487 ----- .../src/scss/volt/layout/_section.scss | 469 ----- .../src/scss/volt/layout/_sidebar.scss | 34 - .../src/scss/volt/layout/_sidenav.scss | 258 --- .../src/scss/volt/mixins/_animations.scss | 45 - .../scss/volt/mixins/_background-variant.scss | 25 - .../service/src/scss/volt/mixins/_icon.scss | 17 - .../service/src/scss/volt/mixins/_modals.scss | 23 - .../src/scss/volt/mixins/_popover.scss | 36 - .../src/scss/volt/mixins/_transform.scss | 19 - .../src/scss/volt/mixins/_utilities.scss | 123 -- .../src/scss/volt/themes/_variables-dark.scss | 0 .../scss/volt/themes/_variables-light.scss | 0 .../scss/volt/themes/_variables-sunset.scss | 0 .../src/scss/volt/utilities/_animations.scss | 230 --- .../src/scss/volt/utilities/_backgrounds.scss | 41 - .../src/scss/volt/utilities/_helper.scss | 65 - .../src/scss/volt/utilities/_position.scss | 33 - .../src/scss/volt/utilities/_shadows.scss | 17 - .../src/scss/volt/utilities/_sizing.scss | 51 - .../src/scss/volt/utilities/_text.scss | 52 - .../src/scss/volt/utilities/_transform.scss | 16 - .../src/scss/volt/vendor/_datepicker.scss | 33 - .../src/scss/volt/vendor/_headroom.scss | 52 - .../service/src/scss/volt/vendor/_prism.scss | 145 -- .../scss/volt/vendor/chartist/_chartist.scss | 252 --- .../chartist/settings/_chartist-settings.scss | 89 - .../src/scss/volt/vendor/wizard/_form.scss | 279 --- .../src/scss/volt/vendor/wizard/_mixins.scss | 11 - .../scss/volt/vendor/wizard/_variables.scss | 32 - probe_ably/service/tsconfig.json | 26 - probe_ably/utils/__init__.py | 3 + .../{core => }/utils/grid_model_factory.py | 4 +- .../{core => }/utils/param_functions.py | 0 .../{core/tasks => }/utils/read_input_task.py | 10 +- probe_ably/utils/visualization_task.py | 26 + tests/core/__init__.py | 0 tests/core/tasks/__init__.py | 0 tests/core/tasks/metric/__init__.py | 0 tests/core/tasks/probing/__init__.py | 0 tests/core/tasks/utils/__init__.py | 0 tests/core/utils/__init__.py | 0 tests/core/utils/test_factory.py | 10 - .../core => tests/metrics}/__init__.py | 0 .../test_process_metric_task.py} | 26 +- .../core/tasks => tests/probing}/__init__.py | 0 .../test_prepare_data_for_probing_task.py | 5 +- .../test_train_probing_task.py} | 4 +- .../test_input/bp_test_input.json | 8 +- .../multi_task_multi_model_with_control.json | 8 +- .../test_input/sample_config3.json | 0 .../test_input/sample_config4.json | 0 .../sample_files/test_input/wrong_inter.json | 4 +- .../sample_files/test_input/wrong_intra.json | 4 +- .../test_input/wrong_probing_model.json | 8 +- .../sample_files/test_input/wrong_setup.json | 6 +- .../test_input/wrong_split_size.json | 8 +- .../metrics => tests/utils}/__init__.py | 0 .../tasks => }/utils/test_read_input_task.py | 2 +- 164 files changed, 174 insertions(+), 9004 deletions(-) create mode 100644 probe_ably/__main__.py delete mode 100644 probe_ably/core/flows/__init__.py delete mode 100644 probe_ably/core/flows/probe_from_dataloaders.py delete mode 100644 probe_ably/core/flows/run_probing.py delete mode 100644 probe_ably/core/tasks/control_task/__init__.py delete mode 100644 probe_ably/core/tasks/metric_task/__init__.py delete mode 100644 probe_ably/core/tasks/probing/__init__.py delete mode 100644 probe_ably/core/tasks/utils/__init__.py delete mode 100644 probe_ably/core/tasks/utils/visualization_task.py delete mode 100644 probe_ably/core/utils/__init__.py delete mode 100644 probe_ably/core/utils/util_functions.py rename probe_ably/{core => }/metrics/__init__.py (63%) rename probe_ably/{core => }/metrics/abstract_inter_model_metric.py (100%) rename probe_ably/{core => }/metrics/abstract_intra_model_metric.py (100%) rename probe_ably/{core => }/metrics/accuracy.py (91%) rename probe_ably/{core/tasks/metric_task => metrics}/process_metric_task.py (97%) rename probe_ably/{core => }/metrics/selectivity.py (94%) rename probe_ably/{core => }/models/__init__.py (100%) rename probe_ably/{core => }/models/abstract_model.py (100%) rename probe_ably/{core => }/models/linear.py (98%) rename probe_ably/{core => }/models/mlp.py (98%) rename probe_ably/{core => }/models/model_params.py (80%) create mode 100644 probe_ably/probing/__init__.py rename probe_ably/{core/tasks => }/probing/calculate_metric_task.py (100%) rename probe_ably/{core/tasks => }/probing/deprobe_task.py (100%) create mode 100644 probe_ably/probing/experiment_setup.py rename probe_ably/{core/tasks/control_task => probing}/generate_control_task.py (95%) rename probe_ably/{core/tasks => }/probing/prepare_data_for_probing_task.py (100%) rename probe_ably/{core/tasks => }/probing/train_probing_task.py (96%) delete mode 100644 probe_ably/service/.gitignore delete mode 100644 probe_ably/service/.prettierrc.js delete mode 100644 probe_ably/service/package.json delete mode 100644 probe_ably/service/public/android-chrome-192x192.png delete mode 100644 probe_ably/service/public/android-chrome-512x512.png delete mode 100644 probe_ably/service/public/apple-touch-icon.png delete mode 100644 probe_ably/service/public/browserconfig.xml delete mode 100644 probe_ably/service/public/favicon-16x16.png delete mode 100644 probe_ably/service/public/favicon-32x32.png delete mode 100644 probe_ably/service/public/favicon.ico delete mode 100644 probe_ably/service/public/index.html delete mode 100644 probe_ably/service/public/logo192.png delete mode 100644 probe_ably/service/public/logo512.png delete mode 100644 probe_ably/service/public/manifest.json delete mode 100644 probe_ably/service/public/mstile-150x150.png delete mode 100644 probe_ably/service/public/robots.txt delete mode 100644 probe_ably/service/public/safari-pinned-tab.svg delete mode 100644 probe_ably/service/public/site.webmanifest delete mode 100644 probe_ably/service/server/__init__.py delete mode 100644 probe_ably/service/server/web_server.py delete mode 100644 probe_ably/service/src/charts/LineChartWidget.js delete mode 100644 probe_ably/service/src/index.css delete mode 100644 probe_ably/service/src/logo.svg delete mode 100644 probe_ably/service/src/pages/HomePage.js delete mode 100644 probe_ably/service/src/pages/dashboard/DashboardOverview.js delete mode 100644 probe_ably/service/src/pages/forms/ConfigurationForm.js delete mode 100644 probe_ably/service/src/react-app-env.d.ts delete mode 100644 probe_ably/service/src/reportWebVitals.js delete mode 100755 probe_ably/service/src/scss/volt.scss delete mode 100644 probe_ably/service/src/scss/volt/_components.scss delete mode 100755 probe_ably/service/src/scss/volt/_functions.scss delete mode 100644 probe_ably/service/src/scss/volt/_layout.scss delete mode 100755 probe_ably/service/src/scss/volt/_mixins.scss delete mode 100755 probe_ably/service/src/scss/volt/_reboot.scss delete mode 100755 probe_ably/service/src/scss/volt/_utilities.scss delete mode 100644 probe_ably/service/src/scss/volt/_variables.scss delete mode 100644 probe_ably/service/src/scss/volt/_vendor.scss delete mode 100755 probe_ably/service/src/scss/volt/components/_accordions.scss delete mode 100644 probe_ably/service/src/scss/volt/components/_alerts.scss delete mode 100755 probe_ably/service/src/scss/volt/components/_avatars.scss delete mode 100755 probe_ably/service/src/scss/volt/components/_badge.scss delete mode 100755 probe_ably/service/src/scss/volt/components/_blog-cards.scss delete mode 100755 probe_ably/service/src/scss/volt/components/_breadcrumb.scss delete mode 100755 probe_ably/service/src/scss/volt/components/_buttons.scss delete mode 100755 probe_ably/service/src/scss/volt/components/_card.scss delete mode 100755 probe_ably/service/src/scss/volt/components/_carousel.scss delete mode 100644 probe_ably/service/src/scss/volt/components/_charts.scss delete mode 100755 probe_ably/service/src/scss/volt/components/_close.scss delete mode 100644 probe_ably/service/src/scss/volt/components/_counters.scss delete mode 100755 probe_ably/service/src/scss/volt/components/_custom-forms.scss delete mode 100755 probe_ably/service/src/scss/volt/components/_datepicker.scss delete mode 100755 probe_ably/service/src/scss/volt/components/_dropdown.scss delete mode 100644 probe_ably/service/src/scss/volt/components/_dropzone.scss delete mode 100755 probe_ably/service/src/scss/volt/components/_forms.scss delete mode 100755 probe_ably/service/src/scss/volt/components/_icon-box.scss delete mode 100644 probe_ably/service/src/scss/volt/components/_images.scss delete mode 100755 probe_ably/service/src/scss/volt/components/_input-group.scss delete mode 100755 probe_ably/service/src/scss/volt/components/_list-group.scss delete mode 100755 probe_ably/service/src/scss/volt/components/_modal.scss delete mode 100755 probe_ably/service/src/scss/volt/components/_nav.scss delete mode 100755 probe_ably/service/src/scss/volt/components/_pagination.scss delete mode 100755 probe_ably/service/src/scss/volt/components/_popover.scss delete mode 100644 probe_ably/service/src/scss/volt/components/_preloader.scss delete mode 100755 probe_ably/service/src/scss/volt/components/_pricing-cards.scss delete mode 100755 probe_ably/service/src/scss/volt/components/_progress.scss delete mode 100644 probe_ably/service/src/scss/volt/components/_scrollbar.scss delete mode 100755 probe_ably/service/src/scss/volt/components/_shapes.scss delete mode 100644 probe_ably/service/src/scss/volt/components/_tables.scss delete mode 100755 probe_ably/service/src/scss/volt/components/_timelines.scss delete mode 100755 probe_ably/service/src/scss/volt/components/_tooltip.scss delete mode 100755 probe_ably/service/src/scss/volt/components/_type.scss delete mode 100755 probe_ably/service/src/scss/volt/layout/_footer.scss delete mode 100755 probe_ably/service/src/scss/volt/layout/_navbar.scss delete mode 100644 probe_ably/service/src/scss/volt/layout/_section.scss delete mode 100644 probe_ably/service/src/scss/volt/layout/_sidebar.scss delete mode 100644 probe_ably/service/src/scss/volt/layout/_sidenav.scss delete mode 100755 probe_ably/service/src/scss/volt/mixins/_animations.scss delete mode 100755 probe_ably/service/src/scss/volt/mixins/_background-variant.scss delete mode 100755 probe_ably/service/src/scss/volt/mixins/_icon.scss delete mode 100755 probe_ably/service/src/scss/volt/mixins/_modals.scss delete mode 100755 probe_ably/service/src/scss/volt/mixins/_popover.scss delete mode 100755 probe_ably/service/src/scss/volt/mixins/_transform.scss delete mode 100644 probe_ably/service/src/scss/volt/mixins/_utilities.scss delete mode 100644 probe_ably/service/src/scss/volt/themes/_variables-dark.scss delete mode 100644 probe_ably/service/src/scss/volt/themes/_variables-light.scss delete mode 100644 probe_ably/service/src/scss/volt/themes/_variables-sunset.scss delete mode 100644 probe_ably/service/src/scss/volt/utilities/_animations.scss delete mode 100755 probe_ably/service/src/scss/volt/utilities/_backgrounds.scss delete mode 100755 probe_ably/service/src/scss/volt/utilities/_helper.scss delete mode 100755 probe_ably/service/src/scss/volt/utilities/_position.scss delete mode 100755 probe_ably/service/src/scss/volt/utilities/_shadows.scss delete mode 100755 probe_ably/service/src/scss/volt/utilities/_sizing.scss delete mode 100755 probe_ably/service/src/scss/volt/utilities/_text.scss delete mode 100755 probe_ably/service/src/scss/volt/utilities/_transform.scss delete mode 100644 probe_ably/service/src/scss/volt/vendor/_datepicker.scss delete mode 100755 probe_ably/service/src/scss/volt/vendor/_headroom.scss delete mode 100644 probe_ably/service/src/scss/volt/vendor/_prism.scss delete mode 100755 probe_ably/service/src/scss/volt/vendor/chartist/_chartist.scss delete mode 100755 probe_ably/service/src/scss/volt/vendor/chartist/settings/_chartist-settings.scss delete mode 100755 probe_ably/service/src/scss/volt/vendor/wizard/_form.scss delete mode 100755 probe_ably/service/src/scss/volt/vendor/wizard/_mixins.scss delete mode 100755 probe_ably/service/src/scss/volt/vendor/wizard/_variables.scss delete mode 100644 probe_ably/service/tsconfig.json create mode 100644 probe_ably/utils/__init__.py rename probe_ably/{core => }/utils/grid_model_factory.py (97%) rename probe_ably/{core => }/utils/param_functions.py (100%) rename probe_ably/{core/tasks => }/utils/read_input_task.py (97%) create mode 100644 probe_ably/utils/visualization_task.py delete mode 100644 tests/core/__init__.py delete mode 100644 tests/core/tasks/__init__.py delete mode 100644 tests/core/tasks/metric/__init__.py delete mode 100644 tests/core/tasks/probing/__init__.py delete mode 100644 tests/core/tasks/utils/__init__.py delete mode 100644 tests/core/utils/__init__.py delete mode 100644 tests/core/utils/test_factory.py rename {probe_ably/core => tests/metrics}/__init__.py (100%) rename tests/{core/tasks/metric/process_metric_task_test.py => metrics/test_process_metric_task.py} (93%) rename {probe_ably/core/tasks => tests/probing}/__init__.py (100%) rename tests/{core/tasks => }/probing/test_prepare_data_for_probing_task.py (89%) rename tests/{core/tasks/probing/test_train_probing.py => probing/test_train_probing_task.py} (83%) delete mode 100644 tests/sample_files/test_input/sample_config3.json delete mode 100644 tests/sample_files/test_input/sample_config4.json rename {probe_ably/core/tasks/probing/metrics => tests/utils}/__init__.py (100%) rename tests/{core/tasks => }/utils/test_read_input_task.py (98%) diff --git a/config/params/linear.json b/config/params/linear.json index 7713709..3682250 100644 --- a/config/params/linear.json +++ b/config/params/linear.json @@ -1,5 +1,5 @@ { - "probe_ably.core.models.linear.LinearModel": { + "probe_ably.models.linear.LinearModel": { "params": [ { "name": "dropout", @@ -9,7 +9,7 @@ { "name": "alpha", "type": "function", - "function_location": "probe_ably.core.utils.param_functions.nuclear_norm_alpha_generation", + "function_location": "probe_ably.utils.param_functions.nuclear_norm_alpha_generation", "options": [-10.0, 3] }] } diff --git a/config/params/mlp.json b/config/params/mlp.json index c3ba2b1..ef0431f 100644 --- a/config/params/mlp.json +++ b/config/params/mlp.json @@ -1,11 +1,11 @@ { - "probe_ably.core.models.mlp.MLPModel": { + "probe_ably.models.mlp.MLPModel": { "params": [ { "name": "hidden_size", "type": "function", "step": 0.01, - "function_location": "probe_ably.core.utils.param_functions.hidden_size_generation", + "function_location": "probe_ably.utils.param_functions.hidden_size_generation", "options": [ 2, 5 diff --git a/config/probing_setup/default_probing_setup.json b/config/probing_setup/default_probing_setup.json index a60f636..dc32b8e 100644 --- a/config/probing_setup/default_probing_setup.json +++ b/config/probing_setup/default_probing_setup.json @@ -2,17 +2,17 @@ "train_size":0.6, "dev_size":0.2, "test_size":0.2, - "intra_metric":"probe_ably.core.metrics.accuracy.AccuracyMetric", - "inter_metric":"probe_ably.core.metrics.selectivity.SelectivityMetric", + "intra_metric":"probe_ably.metrics.accuracy.AccuracyMetric", + "inter_metric":"probe_ably.metrics.selectivity.SelectivityMetric", "probing_models":{ "0":{ - "probing_model_name":"probe_ably.core.models.linear.LinearModel", + "probing_model_name":"probe_ably.models.linear.LinearModel", "batch_size":32, "epochs":25, "number_of_models":50 }, "1":{ - "probing_model_name":"probe_ably.core.models.mlp.MLPModel", + "probing_model_name":"probe_ably.models.mlp.MLPModel", "batch_size":32, "epochs":25, "number_of_models":50 diff --git a/probe_ably/__main__.py b/probe_ably/__main__.py new file mode 100644 index 0000000..f4bf529 --- /dev/null +++ b/probe_ably/__main__.py @@ -0,0 +1,18 @@ +import click +from probe_ably.probing import ProbingExperiment + +### +# Basic Functionality as a Command Line Interface +### + +@click.command() +@click.option("--config_file", + help="Probing Configuration File", + default="./tests/sample_files/test_input/multi_task_multi_model_with_control.json") +def main(config_file): + experiment = ProbingExperiment() + experiment.from_files(config_file) + experiment.run() + +if __name__ == "__main__": + main() \ No newline at end of file diff --git a/probe_ably/app/__main__.py b/probe_ably/app/__main__.py index 2dbd49a..bed9a36 100644 --- a/probe_ably/app/__main__.py +++ b/probe_ably/app/__main__.py @@ -1,7 +1,6 @@ -from probe_ably.core.tasks.probing import TrainProbingTask -from probe_ably.core.tasks.metric_task import ProcessMetricTask -from probe_ably.core.tasks.probing import PrepareDataForProbingTask, TrainProbingTask -from probe_ably.core.tasks.utils import ReadInputTask, VisualiaztionTask +from probe_ably.metrics import ProcessMetricTask +from probe_ably.utils import ReadInputTask +from probe_ably.probing import TrainProbingTask, PrepareDataForProbingTask from pathlib import Path import threading @@ -15,6 +14,7 @@ from pydantic import BaseModel + app_dir = Path(os.path.abspath(__file__)).parent build_dir = app_dir.joinpath('build') print(build_dir) @@ -24,11 +24,7 @@ read_input_task = ReadInputTask() prepare_data_probing = PrepareDataForProbingTask() process_metric_task = ProcessMetricTask() -visualization_task = VisualiaztionTask() -# class Progress(BaseModel): -# n: int -# total: int class ProbingThread(threading.Thread): def __init__(self): @@ -83,77 +79,6 @@ def probes_progress(): return prog -# class ProbingThread(threading.Thread): -# def __init__(self): -# super().__init__() -# self.results = None -# self.task_loop_bar = None -# self.model_loop_bar = None -# self.probes_loop_bar = None - -# def run(self,config_file=INPUT_FILE): -# # probing flow -# parsed_input = read_input_task.run(config_file) -# prepared_data = prepare_data_probing.run( -# parsed_input["tasks"], parsed_input["probing_setup"] -# ) -# train_results = probing_task.run(prepared_data, -# parsed_input["probing_setup"], -# thread=self) -# processed_results = process_metric_task.run(train_results, -# parsed_input["probing_setup"] -# ) -# self.finished = 1 -# self.results = processed_results - -# threads = {} - -# @app.route('/') -# def serve(): -# print(static_folder) -# return send_from_directory(app.static_folder, 'index.html') - -# @app.route('/time') -# def get_current_time(): -# return {'time': time.time()} - - -# @app.route('/process') -# def process(): -# global threads - -# thread_id = 1 -# threads[thread_id] = ProbingThread() -# threads[thread_id].start() -# return 'task id: #%s' % thread_id - -# @app.route('/model_progress') -# def model_progress(thread_id=1): -# global threads - -# return jsonify(threads[thread_id].model_loop_bar.format_dict) - -# @app.route('/task_progress') -# def task_progress(thread_id=1): -# global threads - -# return jsonify(threads[thread_id].task_loop_bar.format_dict) - -# @app.route('/probes_progress') -# def probes_progress(thread_id=1): -# global threads - -# return jsonify(threads[thread_id].probes_loop_bar.format_dict) - - -# @app.route('/results') -# def results(thread_id=1): -# global threads - -# return jsonify({"aux_tasks": threads[thread_id].results}) - -# app.run(port=8031, host="0.0.0.0") - app.mount("/", StaticFiles(directory=build_dir, html = True), name="static") if __name__ == "__main__": diff --git a/probe_ably/core/flows/__init__.py b/probe_ably/core/flows/__init__.py deleted file mode 100644 index 6e05287..0000000 --- a/probe_ably/core/flows/__init__.py +++ /dev/null @@ -1 +0,0 @@ -from .probe_from_dataloaders import probe_from_dataloaders \ No newline at end of file diff --git a/probe_ably/core/flows/probe_from_dataloaders.py b/probe_ably/core/flows/probe_from_dataloaders.py deleted file mode 100644 index 93b4f51..0000000 --- a/probe_ably/core/flows/probe_from_dataloaders.py +++ /dev/null @@ -1,20 +0,0 @@ -import click -import prefect -from dynaconf import settings -from loguru import logger -from prefect import Flow -from prefect.engine.flow_runner import FlowRunner -from probe_ably.core.tasks.probing import TrainProbingTask -from probe_ably.core.tasks.metric_task import ProcessMetricTask - -INPUT_FILE = "./tests/sample_files/test_input/multi_task_multi_model_with_control.json" -train_probing_task = TrainProbingTask() -process_metric_task = ProcessMetricTask() - -def probe_from_dataloaders(config_dict, prepared_data): - with Flow("Running Probe") as flow1: - train_results = train_probing_task(prepared_data, config_dict["probing_setup"]) - processed_results = process_metric_task( - train_results, config_dict["probing_setup"] - ) - FlowRunner(flow=flow1).run \ No newline at end of file diff --git a/probe_ably/core/flows/run_probing.py b/probe_ably/core/flows/run_probing.py deleted file mode 100644 index d84fcf7..0000000 --- a/probe_ably/core/flows/run_probing.py +++ /dev/null @@ -1,36 +0,0 @@ -import click -import prefect -from dynaconf import settings -from loguru import logger -from prefect import Flow, task -from prefect.engine.flow_runner import FlowRunner -from probe_ably.core.tasks.metric_task import ProcessMetricTask -from probe_ably.core.tasks.probing import PrepareDataForProbingTask, TrainProbingTask -from probe_ably.core.tasks.utils import ReadInputTask, VisualiaztionTask - -INPUT_FILE = "./tests/sample_files/test_input/multi_task_multi_model_with_control.json" -read_input_task = ReadInputTask() -prepare_data_probing = PrepareDataForProbingTask() -train_probing_task = TrainProbingTask() -process_metric_task = ProcessMetricTask() -visualization_task = VisualiaztionTask() - - -@click.command() -@click.option("--config_file", help="Probing Configuration File") -def run_probing(config_file): - with Flow("Running Probe") as flow1: - parsed_input = read_input_task(config_file) - prepared_data = prepare_data_probing( - parsed_input["tasks"], parsed_input["probing_setup"] - ) - train_results = train_probing_task(prepared_data, parsed_input["probing_setup"]) - processed_results = process_metric_task( - train_results, parsed_input["probing_setup"] - ) - visualization_task(processed_results) - FlowRunner(flow=flow1).run() - - -if __name__ == "__main__": - run_probing() diff --git a/probe_ably/core/tasks/control_task/__init__.py b/probe_ably/core/tasks/control_task/__init__.py deleted file mode 100644 index 4d90a48..0000000 --- a/probe_ably/core/tasks/control_task/__init__.py +++ /dev/null @@ -1 +0,0 @@ -from .generate_control_task import GenerateControlTask \ No newline at end of file diff --git a/probe_ably/core/tasks/metric_task/__init__.py b/probe_ably/core/tasks/metric_task/__init__.py deleted file mode 100644 index e7876ef..0000000 --- a/probe_ably/core/tasks/metric_task/__init__.py +++ /dev/null @@ -1 +0,0 @@ -from .process_metric_task import ProcessMetricTask \ No newline at end of file diff --git a/probe_ably/core/tasks/probing/__init__.py b/probe_ably/core/tasks/probing/__init__.py deleted file mode 100644 index b26d98b..0000000 --- a/probe_ably/core/tasks/probing/__init__.py +++ /dev/null @@ -1,2 +0,0 @@ -from .prepare_data_for_probing_task import PrepareDataForProbingTask -from .train_probing_task import TrainProbingTask \ No newline at end of file diff --git a/probe_ably/core/tasks/utils/__init__.py b/probe_ably/core/tasks/utils/__init__.py deleted file mode 100644 index 45bc50b..0000000 --- a/probe_ably/core/tasks/utils/__init__.py +++ /dev/null @@ -1,2 +0,0 @@ -from .read_input_task import ReadInputTask -from .visualization_task import VisualiaztionTask diff --git a/probe_ably/core/tasks/utils/visualization_task.py b/probe_ably/core/tasks/utils/visualization_task.py deleted file mode 100644 index 55f69d4..0000000 --- a/probe_ably/core/tasks/utils/visualization_task.py +++ /dev/null @@ -1,26 +0,0 @@ -import json -import webbrowser -from typing import Dict - -from loguru import logger -from overrides import overrides -from prefect import Task -from probe_ably.service.server.web_server import WebServer - - -class VisualiaztionTask(Task): - def run(self, processed_data: Dict): - logger.info("Launching server for visualization") - web_server = WebServer(processed_data) - # with open(f"{web_server.get_path()}/data.json", "w") as f: - # json.dump(processed_data, f) - web_server.start() - - ip_address = "http://127.0.0.1:8031/" - - try: - webbrowser.get("google-chrome").open(ip_address) - except: - logger.info( - f"Tried to launch Google Chrom and Failed. Visit: {ip_address} to view the visualization" - ) diff --git a/probe_ably/core/utils/__init__.py b/probe_ably/core/utils/__init__.py deleted file mode 100644 index 9214628..0000000 --- a/probe_ably/core/utils/__init__.py +++ /dev/null @@ -1 +0,0 @@ -from .grid_model_factory import GridModelFactory \ No newline at end of file diff --git a/probe_ably/core/utils/util_functions.py b/probe_ably/core/utils/util_functions.py deleted file mode 100644 index e69de29..0000000 diff --git a/probe_ably/core/metrics/__init__.py b/probe_ably/metrics/__init__.py similarity index 63% rename from probe_ably/core/metrics/__init__.py rename to probe_ably/metrics/__init__.py index d6b3150..2ee4605 100644 --- a/probe_ably/core/metrics/__init__.py +++ b/probe_ably/metrics/__init__.py @@ -1,4 +1,5 @@ from .abstract_inter_model_metric import AbstractInterModelMetric from .abstract_intra_model_metric import AbstractIntraModelMetric from .accuracy import AccuracyMetric -from .selectivity import SelectivityMetric \ No newline at end of file +from .selectivity import SelectivityMetric +from .process_metric_task import ProcessMetricTask \ No newline at end of file diff --git a/probe_ably/core/metrics/abstract_inter_model_metric.py b/probe_ably/metrics/abstract_inter_model_metric.py similarity index 100% rename from probe_ably/core/metrics/abstract_inter_model_metric.py rename to probe_ably/metrics/abstract_inter_model_metric.py diff --git a/probe_ably/core/metrics/abstract_intra_model_metric.py b/probe_ably/metrics/abstract_intra_model_metric.py similarity index 100% rename from probe_ably/core/metrics/abstract_intra_model_metric.py rename to probe_ably/metrics/abstract_intra_model_metric.py diff --git a/probe_ably/core/metrics/accuracy.py b/probe_ably/metrics/accuracy.py similarity index 91% rename from probe_ably/core/metrics/accuracy.py rename to probe_ably/metrics/accuracy.py index 2bdcdde..7840534 100644 --- a/probe_ably/core/metrics/accuracy.py +++ b/probe_ably/metrics/accuracy.py @@ -1,5 +1,5 @@ import numpy as np -from probe_ably.core.metrics import AbstractIntraModelMetric +from probe_ably.metrics import AbstractIntraModelMetric from sklearn.metrics import accuracy_score diff --git a/probe_ably/core/tasks/metric_task/process_metric_task.py b/probe_ably/metrics/process_metric_task.py similarity index 97% rename from probe_ably/core/tasks/metric_task/process_metric_task.py rename to probe_ably/metrics/process_metric_task.py index cd04bbc..9aa9a38 100644 --- a/probe_ably/core/tasks/metric_task/process_metric_task.py +++ b/probe_ably/metrics/process_metric_task.py @@ -6,8 +6,8 @@ from loguru import logger from overrides import overrides from prefect import Task -from probe_ably.core.metrics.abstract_inter_model_metric import AbstractInterModelMetric -from probe_ably.core.metrics.abstract_intra_model_metric import AbstractIntraModelMetric +from probe_ably.metrics.abstract_inter_model_metric import AbstractInterModelMetric +from probe_ably.metrics.abstract_intra_model_metric import AbstractIntraModelMetric from tqdm import tqdm diff --git a/probe_ably/core/metrics/selectivity.py b/probe_ably/metrics/selectivity.py similarity index 94% rename from probe_ably/core/metrics/selectivity.py rename to probe_ably/metrics/selectivity.py index be373c6..0fe5074 100644 --- a/probe_ably/core/metrics/selectivity.py +++ b/probe_ably/metrics/selectivity.py @@ -1,5 +1,5 @@ import numpy as np -from probe_ably.core.metrics import AbstractInterModelMetric +from probe_ably.metrics import AbstractInterModelMetric from sklearn.metrics import accuracy_score diff --git a/probe_ably/core/models/__init__.py b/probe_ably/models/__init__.py similarity index 100% rename from probe_ably/core/models/__init__.py rename to probe_ably/models/__init__.py diff --git a/probe_ably/core/models/abstract_model.py b/probe_ably/models/abstract_model.py similarity index 100% rename from probe_ably/core/models/abstract_model.py rename to probe_ably/models/abstract_model.py diff --git a/probe_ably/core/models/linear.py b/probe_ably/models/linear.py similarity index 98% rename from probe_ably/core/models/linear.py rename to probe_ably/models/linear.py index b300a2f..12d165d 100644 --- a/probe_ably/core/models/linear.py +++ b/probe_ably/models/linear.py @@ -3,7 +3,7 @@ import math import numpy as np import torch -from probe_ably.core.models import AbstractModel +from probe_ably.models import AbstractModel from torch import Tensor, nn diff --git a/probe_ably/core/models/mlp.py b/probe_ably/models/mlp.py similarity index 98% rename from probe_ably/core/models/mlp.py rename to probe_ably/models/mlp.py index 184d04a..18b9e1a 100644 --- a/probe_ably/core/models/mlp.py +++ b/probe_ably/models/mlp.py @@ -1,10 +1,9 @@ ## ADAPTED FROM https://github.com/rycolab/pareto-probing/blob/master/src/h02_learn/model/mlp.py - from typing import Dict import numpy as np import torch -from probe_ably.core.models import AbstractModel +from probe_ably.models import AbstractModel from torch import Tensor, nn diff --git a/probe_ably/core/models/model_params.py b/probe_ably/models/model_params.py similarity index 80% rename from probe_ably/core/models/model_params.py rename to probe_ably/models/model_params.py index b579553..53416a9 100644 --- a/probe_ably/core/models/model_params.py +++ b/probe_ably/models/model_params.py @@ -3,7 +3,7 @@ class ModelParams(): def __init__(self)->Dict: self.default_params = { - "probe_ably.core.models.linear.LinearModel": { + "probe_ably.models.linear.LinearModel": { "params": [ { "name": "dropout", @@ -13,17 +13,17 @@ def __init__(self)->Dict: { "name": "alpha", "type": "function", - "function_location": "probe_ably.core.utils.param_functions.nuclear_norm_alpha_generation", + "function_location": "probe_ably.utils.param_functions.nuclear_norm_alpha_generation", "options": [-10.0, 3] }] }, - "probe_ably.core.models.mlp.MLPModel": { + "probe_ably.models.mlp.MLPModel": { "params": [ { "name": "hidden_size", "type": "function", "step": 0.01, - "function_location": "probe_ably.core.utils.param_functions.hidden_size_generation", + "function_location": "probe_ably.utils.param_functions.hidden_size_generation", "options": [ 2, 5 diff --git a/probe_ably/probing/__init__.py b/probe_ably/probing/__init__.py new file mode 100644 index 0000000..eda9195 --- /dev/null +++ b/probe_ably/probing/__init__.py @@ -0,0 +1,4 @@ +from .generate_control_task import GenerateControlTask +from .prepare_data_for_probing_task import PrepareDataForProbingTask +from .train_probing_task import TrainProbingTask +from .experiment_setup import ProbingExperiment \ No newline at end of file diff --git a/probe_ably/core/tasks/probing/calculate_metric_task.py b/probe_ably/probing/calculate_metric_task.py similarity index 100% rename from probe_ably/core/tasks/probing/calculate_metric_task.py rename to probe_ably/probing/calculate_metric_task.py diff --git a/probe_ably/core/tasks/probing/deprobe_task.py b/probe_ably/probing/deprobe_task.py similarity index 100% rename from probe_ably/core/tasks/probing/deprobe_task.py rename to probe_ably/probing/deprobe_task.py diff --git a/probe_ably/probing/experiment_setup.py b/probe_ably/probing/experiment_setup.py new file mode 100644 index 0000000..f920e65 --- /dev/null +++ b/probe_ably/probing/experiment_setup.py @@ -0,0 +1,44 @@ +import asyncio +from uvicorn import config +from probe_ably.probing import PrepareDataForProbingTask, TrainProbingTask +# from probe_ably.probing import PrepareDataForProbingTask, TrainProbingTask +from probe_ably.metrics import ProcessMetricTask +# from probe_ably.metric_task import ProcessMetricTask +from probe_ably.utils import ReadInputTask +# from probe_ably.utils import ReadInputTask, VisualizationTask +from prefect.engine.flow_runner import FlowRunner +from prefect import Flow + +read_input_task = ReadInputTask() +prepare_data_probing = PrepareDataForProbingTask() +train_probing_task = TrainProbingTask() +process_metric_task = ProcessMetricTask() + +class ProbingExperiment(): + def __init__(self) -> None: + self.prepared_data = None + self.probing_setup = None + + def from_files(self, config_filepath): + with open(config_filepath) as config_file: + parsed_input = asyncio.run(read_input_task.run(config_file)) + self.prepared_data = prepare_data_probing.run( + parsed_input["tasks"], parsed_input["probing_setup"] + ) + self.probing_setup = parsed_input["probing_setup"] + + def from_split_files(self): + pass + + def from_split_dataloaders(self): + pass + + def from_dataloader(self): + pass + + def run(self): + train_results = train_probing_task.run(self.prepared_data, self.probing_setup) + processed_results = process_metric_task.run( + train_results, self.probing_setup + ) + # visualization_task.run(processed_results) \ No newline at end of file diff --git a/probe_ably/core/tasks/control_task/generate_control_task.py b/probe_ably/probing/generate_control_task.py similarity index 95% rename from probe_ably/core/tasks/control_task/generate_control_task.py rename to probe_ably/probing/generate_control_task.py index 7618ba3..56b1c84 100644 --- a/probe_ably/core/tasks/control_task/generate_control_task.py +++ b/probe_ably/probing/generate_control_task.py @@ -1,4 +1,3 @@ -from overrides import overrides from prefect import Task import numpy as np import pandas as pd diff --git a/probe_ably/core/tasks/probing/prepare_data_for_probing_task.py b/probe_ably/probing/prepare_data_for_probing_task.py similarity index 100% rename from probe_ably/core/tasks/probing/prepare_data_for_probing_task.py rename to probe_ably/probing/prepare_data_for_probing_task.py diff --git a/probe_ably/core/tasks/probing/train_probing_task.py b/probe_ably/probing/train_probing_task.py similarity index 96% rename from probe_ably/core/tasks/probing/train_probing_task.py rename to probe_ably/probing/train_probing_task.py index 9d23f5f..03a78e9 100644 --- a/probe_ably/core/tasks/probing/train_probing_task.py +++ b/probe_ably/probing/train_probing_task.py @@ -4,14 +4,11 @@ import numpy as np import torch from loguru import logger -from overrides import overrides from prefect import Task -from probe_ably.core.metrics import AbstractIntraModelMetric -from probe_ably.core.models import LinearModel -from probe_ably.core.utils import GridModelFactory -from sklearn.metrics import accuracy_score +from probe_ably.metrics import AbstractIntraModelMetric +from probe_ably.utils import GridModelFactory from torch.utils.data import DataLoader -from tqdm import tqdm, trange +from tqdm import tqdm from colorama import Fore @@ -257,10 +254,11 @@ def run(self, tasks: Dict, probing_setup: Dict, thread=None, return_trained_mode "preds": preds_control, }, } - if return_trained_model: - output_results[id_task]["models"][id_model][probe_model_name][ - run_number - ][model]["trained_model"] = trained_probe_model + #TODO: adjust this for returned model + # if return_trained_model: + # output_results[id_task]["models"][id_model][probe_model_name][ + # run_number + # ][model]["trained_model"] = trained_probe_model run_number += 1 return output_results diff --git a/probe_ably/service/.gitignore b/probe_ably/service/.gitignore deleted file mode 100644 index 4d29575..0000000 --- a/probe_ably/service/.gitignore +++ /dev/null @@ -1,23 +0,0 @@ -# See https://help.github.com/articles/ignoring-files/ for more about ignoring files. - -# dependencies -/node_modules -/.pnp -.pnp.js - -# testing -/coverage - -# production -/build - -# misc -.DS_Store -.env.local -.env.development.local -.env.test.local -.env.production.local - -npm-debug.log* -yarn-debug.log* -yarn-error.log* diff --git a/probe_ably/service/.prettierrc.js b/probe_ably/service/.prettierrc.js deleted file mode 100644 index 10c4b8c..0000000 --- a/probe_ably/service/.prettierrc.js +++ /dev/null @@ -1,4 +0,0 @@ -module.exports = { - semi: true, - trailingComma: "all", -}; diff --git a/probe_ably/service/package.json b/probe_ably/service/package.json deleted file mode 100644 index 70ab509..0000000 --- a/probe_ably/service/package.json +++ /dev/null @@ -1,68 +0,0 @@ -{ - "name": "frontend", - "version": "0.1.0", - "private": true, - "dependencies": { - "@fortawesome/fontawesome-free": "^5.15.3", - "@fortawesome/fontawesome-svg-core": "^1.2.35", - "@fortawesome/free-brands-svg-icons": "^5.15.3", - "@fortawesome/free-regular-svg-icons": "^5.15.3", - "@fortawesome/free-solid-svg-icons": "^5.15.3", - "@fortawesome/react-fontawesome": "^0.1.14", - "@nivo/bar": "^0.73.1", - "@nivo/core": "^0.73.0", - "@nivo/line": "^0.73.0", - "@nivo/scatterplot": "^0.73.0", - "@testing-library/jest-dom": "^5.14.1", - "@testing-library/react": "^12.0.0", - "@testing-library/user-event": "^13.2.1", - "@themesberg/react-bootstrap": "^1.4.1", - "bootstrap": "5.0.2", - "chartist": "^0.11.4", - "chartist-plugin-tooltips-updated": "^0.1.4", - "jspdf": "^2.3.1", - "moment-timezone": "^0.5.33", - "node-sass": "^6.0.1", - "react": "^17.0.2", - "react-chartist": "^0.14.4", - "react-copy-to-clipboard": "^5.0.3", - "react-datetime": "^3.0.4", - "react-dom": "^17.0.2", - "react-download-svg": "^0.0.4", - "react-github-btn": "^1.2.0", - "react-live": "^2.2.3", - "react-router-dom": "^5.2.0", - "react-router-hash-link": "^2.4.3", - "react-scripts": "4.0.3", - "react-transition-group": "^4.4.2", - "simplebar-react": "^2.3.5", - "svg2pdf.js": "^2.1.0", - "typescript": "^4.3.5" - }, - "scripts": { - "start": "react-scripts start", - "build": "react-scripts build", - "test": "react-scripts test", - "eject": "react-scripts eject" - }, - "eslintConfig": { - "extends": [ - "react-app", - "react-app/jest" - ] - }, - "browserslist": { - "production": [ - ">0.2%", - "not dead", - "not op_mini all" - ], - "development": [ - "last 1 chrome version", - "last 1 firefox version", - "last 1 safari version" - ] - }, - "devDependencies": { - } -} diff --git a/probe_ably/service/public/android-chrome-192x192.png b/probe_ably/service/public/android-chrome-192x192.png deleted file mode 100644 index 49ba83b385f508ac5ad370b69ff1575705530a7c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11832 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 kzxUGjVh diff --git a/probe_ably/service/public/android-chrome-512x512.png b/probe_ably/service/public/android-chrome-512x512.png deleted file mode 100644 index c4d0ca3c08332d33e4054c014d60be91ce7b279d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 32392 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 HA?E)8W~*-- diff --git a/probe_ably/service/public/apple-touch-icon.png b/probe_ably/service/public/apple-touch-icon.png deleted file mode 100644 index 0a90cff347e2f3eb9cab7f73620c1f0255b7365d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5617 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 diff --git a/probe_ably/service/public/browserconfig.xml b/probe_ably/service/public/browserconfig.xml deleted file mode 100644 index d416bc5..0000000 --- a/probe_ably/service/public/browserconfig.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - #ffffff - - - diff --git a/probe_ably/service/public/favicon-16x16.png b/probe_ably/service/public/favicon-16x16.png deleted file mode 100644 index 28549014e630678ccf38e0c39866ef767b2a79e3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1102 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJOS+@4BLl<6e(pbstU$g(vPY0F z14ES>14Ba#1H&(%P{RubhEf9thF1v;3|2E37{m+a>i@T-ZAgyWm=d?XIQd_F+Rxh5KXqw9WpD)KJ}pazsD}$;GJvMtFG>21 zsu!XRXu{*tWT1j?HK~{y?}J@(t0)Om3L^5TBK;7a`%fx>DdR79ooH5DU-KACZde(CwhrPtp z*OmP-I}5+8RE9{@1fbA4PZ!4!iOb0e51u|27Z4E=OH2_G6`npJWx}Ls6W6X>J9%<= zKuAznU}$nc@Yl&DZ7@ArcSy~yHX&V?>85lg>@gNaJLvDUbW?Cg~4O5;*+y!a~uL_AM2}&$i zC@9KL%gjktD5)$+RmdzTNoHWEnDh7(4@Y5`hQ=xX(`P)N1~D)zbL%B@3o8qIPZnVo zR&Z%BIh?|*yg5YS^o=Vgj+{9nbA!lvVtU&J%W50 z7^>757#dm_7=8hT8eT9klo~KFyh>nTu$sZZAYL$MSD+081Jm&UpAc7|g8%ht_llGL zH>ABNPrg$GWTf9MPI_39^q?f^Zc)-qfVNs!CaxoA|#zbzf#YP!}Bi ztxJ1WmJHMdG6zWPU!QiXC<*8upviCtz!gIna4tm6o{abhCCNa) z1A_>n5h$`ZGal#$pvgeRz-R)dE1-42H1oA4^=47h>xz^cg^Bk|l7U(-7bO0xPkUCL z4D=3AJ5bB5;-vHWiAS>&e$=MkC<6KMY+mA#?1b+%sqZRN{{R1fWMfSaFezUw3GxdD z(&&IqHGaj*tG+BuqQbmJ*{kpVeBCN(mNw^np;p`BxBvbg_hJ^a%2{;bLw)W0DMib! zeER!x@5w(uZZ1jD;S{NP@$1Px-_OUpeWaPJcl>_1qs3o^Q_q55u;lTNds`a36*(C7 z-Q?Lg110#5x-g%5+b+qirqA=wPcN$f;L~?s-uy}CIap!0&#lj9=kLF7&&&-KDwq^+ zD9EI+xkc=dD+_z46q~$z)!Losx8M8jb+U@NG}b|)`q{rPx8`V^`+TU)M}bwX;4{cm zj7i?^E^icfZk7ge*h@TpUD+SAv+&DG%L`|*0i~aMx;TbdoK8+)V03d!6bv*hlhc0nxr16F&6bo`SaIK5kxOH=RL5WdAhl5DOVvQX|UvIfuI0Qa;^XSzx zzL0{yY-X%-^WyH=?W_C87{2b#9@eS6JY0N@8XUab{T(KWDJcnEU45N8ea{U zR`04+*%lu)SL_W6zklH9*%LQzT)ETql5awj_FA{xx3Y6%@7l&0-4Ko0dFl4`dVY}& z!UjDFvn)85Jowk#-tWL@DH+Uoe#**s39SA4v3n$}c#U-`W;je_4EgZnrR&p|tT&jt zHM5SLiR4c^KhrwDPWjt`l%%K)1s5NwdQX4ImmL>pR~N&mx>d$9Fq!+LsCKxa;ltp7 z>eR1N6BL=wWM5D0EG+Q2w)Xyp!pqNeqqkRbKjz3f{MNecUDb~_i!SH6Ir6YpD>(lB z^YgIybiH>+d0y524o%>S+gD`Qpt|q7EQ=eP$HC9+>v!`da%v}}$k;K36nweyQCNMW zdd#vFuY#AKpJQA8uSp<8j^X)(zu9hIH(ds%0o4-Mh?11Vl2ohYqEsNoU}RuuscT@a zYhV&$Xli9-X=P-tZD3?&VBmcI^;HxNx%nxXX_dG&7)=V!1ZoJc3W+EQN-S3>D9TUE z%t=)!sVqoU$Sf#HW?-n8^Y{}FM`4(T#wq{PXFQ(m_pwD+_y17GV}vaA`0( xoWiWUIYi;~jVmXPoH-(Mg#C1b#{w@shF9W(C7+y3rvj~D@O1TaS?83{1ON>oL@NLQ diff --git a/probe_ably/service/public/favicon.ico b/probe_ably/service/public/favicon.ico deleted file mode 100644 index 266009f6f8f9880b9a7e1ef40aba5957cfaa9e07..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15086 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 diff --git a/probe_ably/service/public/index.html b/probe_ably/service/public/index.html deleted file mode 100644 index c2ab5e2..0000000 --- a/probe_ably/service/public/index.html +++ /dev/null @@ -1,132 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Probe-Ably - - - - - - - -

- - - diff --git a/probe_ably/service/public/logo192.png b/probe_ably/service/public/logo192.png deleted file mode 100644 index fc44b0a3796c0e0a64c3d858ca038bd4570465d9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5347 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 b{|{}U^kRn2wo}j7|0ATu<;8xA7zX}7|B6mN diff --git a/probe_ably/service/public/manifest.json b/probe_ably/service/public/manifest.json deleted file mode 100644 index 06327a2..0000000 --- a/probe_ably/service/public/manifest.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "name": "Probe-Ably", - "short_name": "Probe-Ably", - "icons": [ - { - "src": "/docs/4.3/assets/img/favicons/android-chrome-192x192.png", - "sizes": "192x192", - "type": "image/png" - }, - { - "src": "/docs/4.3/assets/img/favicons/android-chrome-512x512.png", - "sizes": "512x512", - "type": "image/png" - } - ], - "start_url": "/?utm_source=a2hs", - "theme_color": "#563d7c", - "background_color": "#563d7c", - "display": "standalone" -} diff --git a/probe_ably/service/public/mstile-150x150.png b/probe_ably/service/public/mstile-150x150.png deleted file mode 100644 index b22dd79932dd485c8fc8fec08107322625d3e188..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5015 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 - - - -Created by potrace 1.11, written by Peter Selinger 2001-2013 - - - - - - - diff --git a/probe_ably/service/public/site.webmanifest b/probe_ably/service/public/site.webmanifest deleted file mode 100644 index 6cd5baa..0000000 --- a/probe_ably/service/public/site.webmanifest +++ /dev/null @@ -1,19 +0,0 @@ -{ - "name": "Probe-Ably", - "short_name": "Probe-Ably", - "icons": [ - { - "src": "/android-chrome-192x192.png", - "sizes": "192x192", - "type": "image/png" - }, - { - "src": "/android-chrome-512x512.png", - "sizes": "512x512", - "type": "image/png" - } - ], - "theme_color": "#ffffff", - "background_color": "#ffffff", - "display": "standalone" -} diff --git a/probe_ably/service/server/__init__.py b/probe_ably/service/server/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/probe_ably/service/server/web_server.py b/probe_ably/service/server/web_server.py deleted file mode 100644 index 7dbbddb..0000000 --- a/probe_ably/service/server/web_server.py +++ /dev/null @@ -1,39 +0,0 @@ -import os -from pathlib import Path - -from flask import Flask, jsonify, render_template, send_from_directory -from flask_cors import CORS, cross_origin - -this_filepath = Path(os.path.abspath(__file__)) -this_dirpath = this_filepath.parent.parent -import json - - -class WebServer: - def __init__(self, processed_data): - self.app = Flask( - __name__, - static_folder=str(this_dirpath.joinpath("build")), - static_url_path="", - ) - self.cors = CORS(self.app) - self.app.config["CORS_HEADERS"] = "Content-Type" - self.processed_data = processed_data - - self.app.add_url_rule("/", view_func=self.serve) - self.app.add_url_rule("/sample", view_func=self.serve_data) - - def get_path(self): - return this_dirpath - - def serve(self): - print(this_dirpath) - return send_from_directory(self.app.static_folder, "index.html") - - def serve_data(self): - # with open(f"{self.get_path()}/data.json", "r") as f: - # data = json.load(f) - return jsonify({"aux_tasks": self.processed_data}) - - def start(self, port: int = 8031): - self.app.run(port=port, host="0.0.0.0") diff --git a/probe_ably/service/src/charts/LineChartWidget.js b/probe_ably/service/src/charts/LineChartWidget.js deleted file mode 100644 index 3d5d47d..0000000 --- a/probe_ably/service/src/charts/LineChartWidget.js +++ /dev/null @@ -1,213 +0,0 @@ -import { ResponsiveLine } from '@nivo/line'; -import { - Button, - ButtonGroup, - Card, - Col, - Row -} from "@themesberg/react-bootstrap"; -import { jsPDF } from "jspdf"; -import React, { useEffect, useRef } from "react"; -import ReactDOM from "react-dom"; -import "svg2pdf.js"; - - -export default (props) => { - const { title, probing_data, task_name } = props; - const linechartRefs = useRef([]); - - useEffect(() => { - linechartRefs.current = linechartRefs.current.slice(0, probing_data.length); - }, [probing_data]); - - return ( - - -
-
{title}
-
- {/*
- {probing_types.map((p_type, i) => ( - - ))} -
*/} -
- - - {probing_data.map((p_data, i) => ( - - - -
{p_data.y_axis}
-
-
(linechartRefs.current[i] = el)} - style={{ height: 400 }} - className="ct-series-g ct-major-tent" - > - value, - format: (value) => value < 0.001 || value > 10000 ? value.toExponential(2) : value, - legendOffset: 60, - }} - axisLeft={{ - orient: "left", - tickSize: 5, - tickPadding: 5, - tickRotation: 0, - legend: p_data.y_axis, - legendPosition: "middle", - legendOffset: -60, - }} - legends={[ - { - anchor: "bottom-right", - direction: "column", - justify: false, - translateX: 130, - translateY: 0, - itemWidth: 100, - itemHeight: 12, - itemsSpacing: 5, - itemDirection: "left-to-right", - symbolSize: 12, - symbolShape: "circle", - effects: [ - { - on: "hover", - style: { - itemOpacity: 1, - }, - }, - ], - }, - ]} - /> -
-
- - - -
-
- - ))} -
-
-
- ); -}; diff --git a/probe_ably/service/src/index.css b/probe_ably/service/src/index.css deleted file mode 100644 index ec2585e..0000000 --- a/probe_ably/service/src/index.css +++ /dev/null @@ -1,13 +0,0 @@ -body { - margin: 0; - font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen', - 'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue', - sans-serif; - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; -} - -code { - font-family: source-code-pro, Menlo, Monaco, Consolas, 'Courier New', - monospace; -} diff --git a/probe_ably/service/src/logo.svg b/probe_ably/service/src/logo.svg deleted file mode 100644 index 9dfc1c0..0000000 --- a/probe_ably/service/src/logo.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/probe_ably/service/src/pages/HomePage.js b/probe_ably/service/src/pages/HomePage.js deleted file mode 100644 index 6be7a93..0000000 --- a/probe_ably/service/src/pages/HomePage.js +++ /dev/null @@ -1,55 +0,0 @@ -import { - Col, - Container, - Navbar, - Row, - Spinner, -} from "@themesberg/react-bootstrap"; -import React, { useEffect, useState } from "react"; -import Dashboard from "./dashboard/DashboardOverview"; - -export default () => { - const [auxTasks, setAuxTasks] = useState(null); - - useEffect(() => { - fetch("/sample") - .then((res) => res.json()) - .then((data) => { - setAuxTasks(data.aux_tasks); - }); - }, []); - - return ( -
- - - ProBe-Ably - - -
- {auxTasks == null ? ( - - - - - Loading... - - - - - ) : ( - - )} -
-
- ); -}; diff --git a/probe_ably/service/src/pages/dashboard/DashboardOverview.js b/probe_ably/service/src/pages/dashboard/DashboardOverview.js deleted file mode 100644 index 7be5ef0..0000000 --- a/probe_ably/service/src/pages/dashboard/DashboardOverview.js +++ /dev/null @@ -1,54 +0,0 @@ -import { Col, Nav, Row } from "@themesberg/react-bootstrap"; -import React, { useState } from "react"; -import LineChartWidget from "../../charts/LineChartWidget"; - -export default ({ aux_tasks }) => { - const [selectedTask, setSelectedTask] = useState(0); - return ( -
-
- - - - - -
- - {aux_tasks[selectedTask].probings.map((probe, i) => ( - - - - - - ))} -
- ); -}; diff --git a/probe_ably/service/src/pages/forms/ConfigurationForm.js b/probe_ably/service/src/pages/forms/ConfigurationForm.js deleted file mode 100644 index ead0f18..0000000 --- a/probe_ably/service/src/pages/forms/ConfigurationForm.js +++ /dev/null @@ -1,90 +0,0 @@ -import { Button, Card, Col, Form, Row } from "@themesberg/react-bootstrap"; -import React, { useState } from "react"; - -export default () => { - const [tasks, setTasks] = useState([{ task_name: "task_name" }]); - - return ( -
- - -
- - Task Name - - - -
- -
- - {tasks.map((task_data, i) => ( - - - -
-
{task_data.task_name}
-
- - - -
- -
- - Model Name - - - - - Representations - - - - - Representations Labels - - - - Control Task Class - - - -
-
-
-
- ))} - - - - - - - -
- ); -}; diff --git a/probe_ably/service/src/react-app-env.d.ts b/probe_ably/service/src/react-app-env.d.ts deleted file mode 100644 index 6431bc5..0000000 --- a/probe_ably/service/src/react-app-env.d.ts +++ /dev/null @@ -1 +0,0 @@ -/// diff --git a/probe_ably/service/src/reportWebVitals.js b/probe_ably/service/src/reportWebVitals.js deleted file mode 100644 index 5253d3a..0000000 --- a/probe_ably/service/src/reportWebVitals.js +++ /dev/null @@ -1,13 +0,0 @@ -const reportWebVitals = onPerfEntry => { - if (onPerfEntry && onPerfEntry instanceof Function) { - import('web-vitals').then(({ getCLS, getFID, getFCP, getLCP, getTTFB }) => { - getCLS(onPerfEntry); - getFID(onPerfEntry); - getFCP(onPerfEntry); - getLCP(onPerfEntry); - getTTFB(onPerfEntry); - }); - } -}; - -export default reportWebVitals; diff --git a/probe_ably/service/src/scss/volt.scss b/probe_ably/service/src/scss/volt.scss deleted file mode 100755 index 71523b9..0000000 --- a/probe_ably/service/src/scss/volt.scss +++ /dev/null @@ -1,45 +0,0 @@ -// ========================================================= -// * Volt React Dashboard -// ========================================================= - -// * Product Page: https://themesberg.com/product/dashboard/volt-react -// * Copyright 2021 Themesberg (https://www.themesberg.com) -// * Official Repository: https://github.com/themesberg/volt-react-dashboard -// * License: MIT License (https://themesberg.com/licensing) - -// * Designed and coded by https://themesberg.com - -// ========================================================= - -// * The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. Please contact us to request a removal. - -@import url('https://fonts.googleapis.com/css?family=Nunito+Sans:300,400,600,700,800&display=swap'); - -// Bootstrap mixins and functions -@import "../../node_modules/bootstrap/scss/mixins"; -@import "../../node_modules/bootstrap/scss/functions"; - -// Change variables here -@import "volt/variables"; - -// Bootstrap -@import "../../node_modules/bootstrap/scss/bootstrap"; - -// Vendor -@import "volt/vendor"; - -// volt mixins & functions -@import "volt/mixins"; -@import "volt/functions"; - -// Utilities -@import "volt/reboot"; -@import "volt/utilities"; - -// Layout -@import "volt/layout"; - -// Components -@import "volt/components"; - -// write your custom styles here! \ No newline at end of file diff --git a/probe_ably/service/src/scss/volt/_components.scss b/probe_ably/service/src/scss/volt/_components.scss deleted file mode 100644 index 0256cbd..0000000 --- a/probe_ably/service/src/scss/volt/_components.scss +++ /dev/null @@ -1,33 +0,0 @@ -@import "components/accordions"; -@import "components/alerts"; -@import "components/avatars"; -@import "components/badge"; -@import "components/buttons"; -@import "components/breadcrumb"; -@import "components/blog-cards"; -@import "components/card"; -@import "components/carousel"; -@import "components/close"; -@import "components/counters"; -@import "components/custom-forms"; -@import "components/charts"; -@import "components/dropdown"; -@import "components/dropzone"; -@import "components/forms"; -@import "components/icon-box"; -@import "components/images"; -@import "components/input-group"; -@import "components/list-group"; -@import "components/modal"; -@import "components/nav"; -@import "components/pagination"; -@import "components/pricing-cards"; -@import "components/popover"; -@import "components/progress"; -@import "components/shapes"; -@import "components/tables"; -@import "components/type"; -@import "components/timelines"; -@import "components/tooltip"; -@import "components/preloader"; -@import "components/scrollbar"; diff --git a/probe_ably/service/src/scss/volt/_functions.scss b/probe_ably/service/src/scss/volt/_functions.scss deleted file mode 100755 index 91971a5..0000000 --- a/probe_ably/service/src/scss/volt/_functions.scss +++ /dev/null @@ -1,23 +0,0 @@ -// Retrieve color Sass maps - -@function section-color($key: "primary") { - @return map-get($section-colors, $key); -} - -// Lines colors - -@function shapes-primary-color($key: "step-1-gradient-bg") { - @return map-get($shapes-primary-colors, $key); -} - -@function shapes-default-color($key: "step-1-gradient-bg") { - @return map-get($shapes-default-colors, $key); -} - -@function lines-light-color($key: "step-1-gradient-bg") { - @return map-get($shapes-light-colors, $key); -} - -@function shapes-dark-color($key: "step-1-gradient-bg") { - @return map-get($shapes-dark-colors, $key); -} \ No newline at end of file diff --git a/probe_ably/service/src/scss/volt/_layout.scss b/probe_ably/service/src/scss/volt/_layout.scss deleted file mode 100644 index f687e04..0000000 --- a/probe_ably/service/src/scss/volt/_layout.scss +++ /dev/null @@ -1,5 +0,0 @@ -@import "layout/navbar"; -@import "layout/section"; -@import "layout/footer"; -@import "layout/sidebar"; -@import "layout/sidenav"; diff --git a/probe_ably/service/src/scss/volt/_mixins.scss b/probe_ably/service/src/scss/volt/_mixins.scss deleted file mode 100755 index f1cec7e..0000000 --- a/probe_ably/service/src/scss/volt/_mixins.scss +++ /dev/null @@ -1,7 +0,0 @@ -@import "mixins/animations"; -@import "mixins/background-variant"; -@import "mixins/icon"; -@import "mixins/modals"; -@import "mixins/popover"; -@import "mixins/transform"; -@import "mixins/utilities"; diff --git a/probe_ably/service/src/scss/volt/_reboot.scss b/probe_ably/service/src/scss/volt/_reboot.scss deleted file mode 100755 index a61af84..0000000 --- a/probe_ably/service/src/scss/volt/_reboot.scss +++ /dev/null @@ -1,30 +0,0 @@ -iframe { - border: 0; -} - -figcaption, -figure, -main { - display: block; - margin: 0; -} - -main { - overflow: hidden; -} - -img { - max-width: 100%; -} - -strong{ - font-weight: $font-weight-bold; -} - -button:focus { - outline: 0; -} - -label{ - font-weight: $font-weight-bold; -} \ No newline at end of file diff --git a/probe_ably/service/src/scss/volt/_utilities.scss b/probe_ably/service/src/scss/volt/_utilities.scss deleted file mode 100755 index ab64de1..0000000 --- a/probe_ably/service/src/scss/volt/_utilities.scss +++ /dev/null @@ -1,8 +0,0 @@ -@import "utilities/backgrounds"; -@import "utilities/helper"; -@import "utilities/position"; -@import "utilities/sizing"; -@import "utilities/shadows"; -@import "utilities/text"; -@import "utilities/transform"; -@import "utilities/animations"; diff --git a/probe_ably/service/src/scss/volt/_variables.scss b/probe_ably/service/src/scss/volt/_variables.scss deleted file mode 100644 index 2abacec..0000000 --- a/probe_ably/service/src/scss/volt/_variables.scss +++ /dev/null @@ -1,1681 +0,0 @@ -// Variables -// -// Variables should follow the `$component-state-property-size` formula for -// consistent naming. Ex: $nav-link-disabled-color and $modal-content-box-shadow-xs. - -// Color system - -// Shades of grey -$white: #ffffff; -$gray-100: #f3f7fa; -$gray-200: #f5f8fb; -$gray-300: #F0F3F6; -$gray-400: #eaedf2; -$gray-500: #d1d7e0; -$gray-600: #93a5be; -$gray-700: #66799e; -$gray-800: #506690; -$gray-900: #4A5073; -$dark : #262B40; -$black : #2e3650; - -// fusv-disable -$grays: ( - "100": $gray-100, - "200": $gray-200, - "300": $gray-300, - "400": $gray-400, - "500": $gray-500, - "600": $gray-600, - "700": $gray-700, - "800": $gray-800, - "900": $gray-900 -); -// fusv-enable - -// Generic colors -$blue: #0948B3; -$indigo: #4c5680; -$purple: #8965e0; -$pink: #C96480; -$red: #FA5252; -$orange: #FF9F89; -$brown: #b9a084; -$yellow: #f5b759; -$yellow-alt:#fde9ca; -$green: #05A677; -$teal: #1E90FF; -$cyan: #63b1bd; -$soft-indigo:#f5e8ff; -$soft-green: #2CA58D; - -// scss-docs-start colors-map -$colors: ( - "blue": $blue, - "indigo": $indigo, - "purple": $purple, - "pink": $pink, - "red": $red, - "orange": $orange, - "yellow": $yellow, - "green": $green, - "teal": $teal, - "cyan": $cyan, - "white": $white, - "gray": $gray-600, - "gray-dark": $gray-800 -); -// scss-docs-end colors-map - -// Color scheme -$default: #262B40; -$primary: #262B40; -$secondary: #61DAFB; -$tertiary: #1B998B; -$quaternary: #C96480; - -// Series names and colors. This can be extended or customized as desired. Just add more series and colors. -$ct-series-names: (a, b, c, d, e, f, g) !default; -$ct-series-colors: ( - #1B998B, - #17a5ce, - #262B40, - #f5b759, - #C96480, - #ffffff, - #17a5ce, - -); - -// Mobile landing color scheme -$primary-app: #EBF4F6; -$secondary-app: #424AA0; - -$success: $green; -$info: $blue; -$warning: $yellow; -$danger: $red; -$gray: $gray-900; -$light: $gray-400; -$lighten: $gray-300; -$soft: $gray-200; -$dark: $dark; - -// Brands colors -$facebook: #3b5999; -$twitter: #1da1f2; -$google: #DB4337; -$instagram: #e4405f; -$pinterest: #bd081c; -$youtube: #cd201f; -$slack: #3aaf85; -$dribbble: #ea4c89; -$github: #222222; -$dropbox: #1E90FF; -$twitch: #4B367C; -$paypal: #ecb32c; -$behance: #0057ff; -$reddit: #E84422; - -// Brand colors -$brand-colors: (); -$brand-colors: map-merge(( - "facebook": $facebook, - "twitter": $twitter, - "google": $google, - "instagram": $instagram, - "pinterest": $pinterest, - "youtube": $youtube, - "slack": $slack, - "dribbble": $dribbble, - "dropbox": $dropbox, - "twitch": $twitch, - "paypal": $paypal, - "behance": $behance, - "reddit" : $reddit, - "github": $github -), $brand-colors); - -// Theme colors -$theme-colors: (); -$theme-colors: map-merge(( - "primary": $primary, - "secondary": $secondary, - "tertiary": $tertiary, - "quaternary": $quaternary, - "primary-app": $primary-app, - "secondary-app": $secondary-app, - "light": $light, - "lighten": $lighten, - "success": $success, - "info": $info, - "warning": $warning, - "danger": $danger, - "white": $white, - "gray": $gray, - "indigo": $indigo, - "dark": $dark, - "soft": $soft, - "black": $black, - "blue": $blue, - "pink": $pink, - "cyan": $cyan, - "purple": $purple, - "soft-indigo": $soft-indigo, - "soft-green": $soft-green, - "gray-100": $gray-100, - "gray-200": $gray-200, - "gray-300": $gray-300, - "gray-400": $gray-400, - "gray-500": $gray-500, - "gray-600": $gray-600, - "gray-700": $gray-700, - "gray-800": $gray-800, - "facebook": $facebook, - "twitter": $twitter, - "google": $google, - "instagram": $instagram, - "pinterest": $pinterest, - "youtube": $youtube, - "slack": $slack, - "dribbble": $dribbble, - "dropbox": $dropbox, - "twitch": $twitch, - "paypal": $paypal, - "behance": $behance, - "reddit" : $reddit, - "github": $github -), $theme-colors); - - -// Set a specific jump point for requesting color jumps -$theme-color-interval: 8%; - -// The contrast ratio to reach against white, to determine if color changes from "light" to "dark". Acceptable values for WCAG 2.0 are 3, 4.5 and 7. -// See https://www.w3.org/TR/WCAG20/#visual-audio-contrast-contrast -$min-contrast-ratio: 3; - -// Customize the light and dark text colors for use in our color contrast function. -$color-contrast-dark: $dark; -$color-contrast-light: $white; - -// fusv-disable -$blue-100: tint-color($blue, 8); -$blue-200: tint-color($blue, 6); -$blue-300: tint-color($blue, 4); -$blue-400: tint-color($blue, 2); -$blue-500: $blue; -$blue-600: shade-color($blue, 2); -$blue-700: shade-color($blue, 4); -$blue-800: shade-color($blue, 6); -$blue-900: shade-color($blue, 8); - -$indigo-100: tint-color($indigo, 8); -$indigo-200: tint-color($indigo, 6); -$indigo-300: tint-color($indigo, 4); -$indigo-400: tint-color($indigo, 2); -$indigo-500: $indigo; -$indigo-600: shade-color($indigo, 2); -$indigo-700: shade-color($indigo, 4); -$indigo-800: shade-color($indigo, 6); -$indigo-900: shade-color($indigo, 8); - -$purple-100: tint-color($purple, 8); -$purple-200: tint-color($purple, 6); -$purple-300: tint-color($purple, 4); -$purple-400: tint-color($purple, 2); -$purple-500: $purple; -$purple-600: shade-color($purple, 2); -$purple-700: shade-color($purple, 4); -$purple-800: shade-color($purple, 6); -$purple-900: shade-color($purple, 8); - -$pink-100: tint-color($pink, 8); -$pink-200: tint-color($pink, 6); -$pink-300: tint-color($pink, 4); -$pink-400: tint-color($pink, 2); -$pink-500: $pink; -$pink-600: shade-color($pink, 2); -$pink-700: shade-color($pink, 4); -$pink-800: shade-color($pink, 6); -$pink-900: shade-color($pink, 8); - -$red-100: tint-color($red, 8); -$red-200: tint-color($red, 6); -$red-300: tint-color($red, 4); -$red-400: tint-color($red, 2); -$red-500: $red; -$red-600: shade-color($red, 2); -$red-700: shade-color($red, 4); -$red-800: shade-color($red, 6); -$red-900: shade-color($red, 8); - -$orange-100: tint-color($orange, 8); -$orange-200: tint-color($orange, 6); -$orange-300: tint-color($orange, 4); -$orange-400: tint-color($orange, 2); -$orange-500: $orange; -$orange-600: shade-color($orange, 2); -$orange-700: shade-color($orange, 4); -$orange-800: shade-color($orange, 6); -$orange-900: shade-color($orange, 8); - -$yellow-100: tint-color($yellow, 8); -$yellow-200: tint-color($yellow, 6); -$yellow-300: tint-color($yellow, 4); -$yellow-400: tint-color($yellow, 2); -$yellow-500: $yellow; -$yellow-600: shade-color($yellow, 2); -$yellow-700: shade-color($yellow, 4); -$yellow-800: shade-color($yellow, 6); -$yellow-900: shade-color($yellow, 8); - -$green-100: tint-color($green, 8); -$green-200: tint-color($green, 6); -$green-300: tint-color($green, 4); -$green-400: tint-color($green, 2); -$green-500: $green; -$green-600: shade-color($green, 2); -$green-700: shade-color($green, 4); -$green-800: shade-color($green, 6); -$green-900: shade-color($green, 8); - -$teal-100: tint-color($teal, 8); -$teal-200: tint-color($teal, 6); -$teal-300: tint-color($teal, 4); -$teal-400: tint-color($teal, 2); -$teal-500: $teal; -$teal-600: shade-color($teal, 2); -$teal-700: shade-color($teal, 4); -$teal-800: shade-color($teal, 6); -$teal-900: shade-color($teal, 8); - -$cyan-100: tint-color($cyan, 8); -$cyan-200: tint-color($cyan, 6); -$cyan-300: tint-color($cyan, 4); -$cyan-400: tint-color($cyan, 2); -$cyan-500: $cyan; -$cyan-600: shade-color($cyan, 2); -$cyan-700: shade-color($cyan, 4); -$cyan-800: shade-color($cyan, 6); -$cyan-900: shade-color($cyan, 8); -// fusv-enable - -// Characters which are escaped by the escape-svg function -$escaped-characters: ( - ("<","%3c"), - (">","%3e"), - ("#","%23"), - ("(","%28"), - (")","%29"), -); - -// Options -// -// Quickly modify global styling by enabling or disabling optional features. - -$enable-caret: true; -$enable-rounded: true; -$enable-shadows: true; -$enable-gradients: false; -$enable-transitions: true; -$enable-reduced-motion: true; -$enable-grid-classes: true; -$enable-button-pointers: true; -$enable-rfs: true; -$enable-validation-icons: true; -$enable-negative-margins: true; -$enable-deprecation-messages: true; -$enable-important-utilities: true; -$enable-smooth-scroll: false; - -// Gradient -// -// The gradient which is added to components if `$enable-gradients` is `true` -// This gradient is also added to elements with `.bg-gradient` -$gradient: linear-gradient(180deg, rgba($white, .15), rgba($white, 0)); - -// Spacing -// -// Control the default styling of most Bootstrap elements by modifying these -// variables. Mostly focused on spacing. -// You can add more entries to the $spacers map, should you need more variation. - -$spacer: 1rem; -$spacers: ( - 0: 0, -1: $spacer / 4, - 2: $spacer / 2, - 3: $spacer, - 4: $spacer * 1.5, - 5: $spacer * 3, - 6: ($spacer * 5), - 7: ($spacer * 8), - 8: ($spacer * 10), - 9: ($spacer * 11), - 10: ($spacer * 14), - 11: ($spacer * 16), - 12: ($spacer * 20), - 'sm': ($spacer * 1), - 'md': ($spacer * 2), - 'lg': ($spacer * 4), - 'xl': ($spacer * 8) -); - -$negative-spacers: if($enable-negative-margins, negativify-map($spacers), null); - -// Body -// -// Settings for the `` element. - -$body-bg: $soft; -$body-color: $gray-900; -$body-text-align: null; - - -// Links -// -// Style anchor elements. - -$link-color: $primary; -$link-decoration: none; -$link-hover-color: darken($link-color, 15%); -$link-hover-decoration: null; -// Darken percentage for links with `.text-*` class (e.g. `.text-success`) -$emphasized-link-hover-darken-percentage: 15%; - -$stretched-link-pseudo-element: after; -$stretched-link-z-index: 1; - -// Paragraphs -// -// Style p element. - -$paragraph-margin-bottom: 1rem; - - -// Grid breakpoints -// -// Define the minimum dimensions at which your layout will change, -// adapting to different screen sizes, for use in media queries. - -// scss-docs-start grid-breakpoints -$grid-breakpoints: ( - xs: 0, - sm: 576px, - md: 768px, - lg: 992px, - xl: 1200px, - xxl: 1400px -); -// scss-docs-end grid-breakpoints - -@include _assert-ascending($grid-breakpoints, "$grid-breakpoints"); -@include _assert-starts-at-zero($grid-breakpoints, "$grid-breakpoints"); - - -// Grid containers -// -// Define the maximum width of `.container` for different screen sizes. - -// scss-docs-start container-max-widths -$container-max-widths: ( - sm: 540px, - md: 720px, - lg: 960px, - xl: 1200px -); -// scss-docs-end container-max-widths - -@include _assert-ascending($container-max-widths, "$container-max-widths"); - - -// Grid columns -// -// Set the number of columns and specify the width of the gutters. - -$grid-columns: 12; -$grid-gutter-width: 1.5rem; -$grid-row-columns: 6; - -$gutters: $spacers; - -// Container padding - -$container-padding-x: 2rem; - - -// Components -// -// Define common padding and border radius sizes and more. - -$border-width: .0625rem; -$border-width-md: 0.125rem; -$border-width-lg: 0.25rem; -$border-width-xl: 0.375rem; -$border-color-white: $white; -$border-color: $light; - -$border-radius: .5rem; -$border-radius-xl: .875rem; -$border-radius-lg: .3rem; -$border-radius-md: .2rem; -$border-radius-sm: .1rem; -$border-radius-pill: 2rem; -$circle-radius: 50%; -$organic-radius: 63% 37% 30% 70% / 50% 45% 55% 50%; - -$component-active-color: $white; -$component-active-bg: $primary; -$component-active-border-color: $primary; - -$component-hover-color: $gray-300; -$component-hover-bg: $gray-300; -$component-hover-border-color: $gray-300; - -$rounded-pill: 50rem; - -$box-shadow: 0 .5rem 1rem rgba($black, .15); -$box-shadow-sm: 0 2px 18px rgba(0, 0, 0, 0.02); -$box-shadow-lg: 0 1rem 3rem rgba($black, .175); -$box-shadow-inset: inset 0 1px 2px rgba($black, .075); - -$component-active-color: $white; -$component-active-bg: $primary; - -$caret-width: .3em; -$caret-vertical-align: $caret-width * .85; -$caret-spacing: $caret-width * .85; - -$transition-base: all .2s ease; -$transition-transform: transform .2s ease; -$transition-fade: opacity .15s linear; -$transition-collapse: height .35s ease; -$transition-tabs: all 0.2s; - -// scss-docs-start embed-responsive-aspect-ratios -$embed-responsive-aspect-ratios: ( - "21by9": ( - x: 21, - y: 9 - ), - "16by9": ( - x: 16, - y: 9 - ), - "4by3": ( - x: 4, - y: 3 - ), - "1by1": ( - x: 1, - y: 1 - ) -); -// scss-docs-end embed-responsive-aspect-ratios - -// Typography -// -// Font, line-height, and color for body text, headings, and more. - -// font awesome -$fontawesome-webfonts-path: '../vendor/font-awesome/webfonts'; -$font-awesome-5: 'Font Awesome 5 Free'; - -// stylelint-disable value-keyword-case -$font-family-sans-serif: 'Nunito Sans', sans-serif; -// stylelint-enable value-keyword-case -$font-family-base: var(--bs-font-sans-serif); -$font-family-code: var(--bs-font-monospace); - -// $font-size-root effects the value of `rem`, which is used for as well font sizes, paddings and margins -// $font-size-base effects the font size of the body text -$font-size-root: null; -$font-size-base: 1rem; // Assumes the browser default, typically `16px` -$font-size-xs: ($font-size-base * .75); -$font-size-sm: ($font-size-base * .875); -$font-size-md: ($font-size-base * 1); -$font-size-lg: ($font-size-base * 1.25); -$font-size-xl: ($font-size-base * 1.5); -$font-size-xxl: ($font-size-base * 2); - -$font-weight-light: 300; -$font-weight-normal: 400; -$font-weight-bold: 600; -$font-weight-bolder: 700; -$font-weight-extreme: 800; - -$font-weight-base: $font-weight-normal; - -$line-height-base: 1.5; -$line-height-sm: 1.25; -$line-height-lg: 2; - -$h1-font-size: $font-size-base * 2.5; -$h2-font-size: $font-size-base * 2; -$h3-font-size: $font-size-base * 1.75; -$h4-font-size: $font-size-base * 1.5; -$h5-font-size: $font-size-base * 1.25; -$h6-font-size: $font-size-base; - -$headings-margin-bottom: $spacer / 2; -$headings-font-family: null; -$headings-font-style: null; -$headings-font-weight: $font-weight-bold; -$headings-line-height: 1.3; -$headings-color: $dark; - -// Display headings -$display1-size: 5rem; -$display2-size: 3.5rem; -$display3-size: 2.5rem; -$display4-size: 1.875rem; - -// scss-docs-start display-headings -$display-font-sizes: ( - 1: 5rem, - 2: 3.5rem, - 3: 2.5rem, - 4: 1.875rem, - 5: 1.2rem, - 6: 1rem -); - -$font-sizes: ( - 1: $h1-font-size, - 2: $h2-font-size, - 3: $h3-font-size, - 4: $h4-font-size, - 5: $h5-font-size, - 6: $h6-font-size, - 7: .9rem -); - -$display-font-weight: $font-weight-bold; -$display-line-height: $headings-line-height; -// scss-docs-end display-headings - -$paragraph-font-size: 1rem; -$paragraph-font-weight: 300; -$paragraph-line-height: 1.6; - -$lead-font-size: $font-size-base * 1.25; -$lead-font-weight: 300; - -$small-font-size: .875em; - -$sub-sup-font-size: .75em; - -$text-muted: #58677d; - -$initialism-font-size: $small-font-size; - -$blockquote-margin-y: $spacer; -$blockquote-font-size: $font-size-base * 1.25; -$blockquote-footer-color: $gray-600; -$blockquote-footer-font-size: $small-font-size; - -$hr-margin-y: $spacer; -$hr-color: inherit; -$hr-height: $border-width; -$hr-opacity: .25; - -$legend-margin-bottom: .5rem; -$legend-font-size: 1.5rem; -$legend-font-weight: null; - -$mark-padding: .2em; - -$dt-font-weight: $font-weight-bold; - -$nested-kbd-font-weight: $font-weight-bold; - -$list-inline-padding: .5rem; - -$mark-bg: #fcf8e3; - - -// Tables -// -// Customizes the `.table` component with basic values, each used across all table variations. - -// scss-docs-start table-variables -$table-cell-padding-y: .75rem; -$table-cell-padding-x: .5rem; -$table-cell-padding-y-sm: .25rem; -$table-cell-padding-x-sm: .25rem; - -$table-cell-vertical-align: top; - -$table-color: $body-color; -$table-bg: transparent; - -$table-striped-color: $table-color; -$table-striped-bg-factor: .05; -$table-striped-bg: rgba($black, $table-striped-bg-factor); - -$table-active-color: $table-color; -$table-active-bg-factor: .1; -$table-active-bg: rgba($black, $table-active-bg-factor); - -$table-hover-color: $table-color; -$table-hover-bg-factor: .075; -$table-hover-bg: rgba($black, $table-hover-bg-factor); - -$table-border-factor: .1; -$table-border-width: $border-width; -$table-border-color: $border-color; - -$table-striped-order: odd; - -$table-group-seperator-color: $light; - -$table-caption-color: $text-muted; - -$table-bg-level: -9; - -$table-head-spacer-y: .75rem; -$table-head-spacer-x: 1rem; -$table-head-font-size: .75rem; -$table-head-text-transform: uppercase; -$table-body-font-size: $font-size-sm; - -$table-variants: ( - "primary": $primary, - "secondary": $secondary, - "success": $success, - "info": $info, - "warning": $warning, - "danger": $danger, - "light": $light, - "dark": $dark, -); -// scss-docs-end table-variables - - -// Buttons + Forms -// -// Shared variables that are reassigned to `$input-` and `$btn-` specific variables. - -$input-btn-padding-y: .55rem; -$input-btn-padding-x: .75rem; -$input-btn-font-family: null; -$input-btn-font-size: $font-size-base; -$input-btn-line-height: $line-height-base; - -$input-btn-focus-width: .2rem; -$input-btn-focus-color-opacity: .25; -$input-btn-focus-color: rgba($component-active-bg, $input-btn-focus-color-opacity); -$input-btn-focus-box-shadow: 0 0 0 $input-btn-focus-width $input-btn-focus-color; - -$input-btn-padding-y-sm: .25rem; -$input-btn-padding-x-sm: .5rem; -$input-btn-font-size-sm: $font-size-sm; - -$input-btn-padding-y-lg: .5rem; -$input-btn-padding-x-lg: 1rem; -$input-btn-font-size-lg: $font-size-lg; - -$input-btn-border-width: $border-width; - -$shadow-input: $box-shadow; -$shadow-input-focus: .1rem .1rem 0 rgba($gray-200,.5); - - -// Buttons -// -// For each of Bootstrap's buttons, define text, background, and border color. - -$btn-padding-y: $input-btn-padding-y; -$btn-padding-x: $input-btn-padding-x; -$btn-font-family: $input-btn-font-family; -$btn-font-size: $input-btn-font-size; -$btn-line-height: $input-btn-line-height; -$btn-white-space: null; // Set to `nowrap` to prevent text wrapping - -$btn-padding-y-sm: $input-btn-padding-y-sm; -$btn-padding-x-sm: $input-btn-padding-x-sm; -$btn-font-size-sm: $input-btn-font-size-sm; - -$btn-padding-y-lg: $input-btn-padding-y-lg; -$btn-padding-x-lg: $input-btn-padding-x-lg; -$btn-font-size-lg: $input-btn-font-size-lg; - -$btn-border-width: $input-btn-border-width; - -$btn-font-weight: $font-weight-bold; -$btn-box-shadow: inset 0 1px 0 rgba($white, .15), 0 1px 1px rgba($black, .075); -$btn-focus-width: $input-btn-focus-width; -$btn-focus-box-shadow: $input-btn-focus-box-shadow; -$btn-disabled-opacity: .65; -$btn-active-box-shadow: inset 0 3px 5px rgba($black, .125); - -$btn-link-color: $link-color; -$btn-link-hover-color: $link-hover-color; -$btn-link-disabled-color: $gray-600; - -$btn-block-spacing-y: .5rem; - -// Allows for customizing button radius independently from global border radius -$btn-border-radius: $border-radius; -$btn-border-radius-sm: $border-radius; -$btn-border-radius-lg: $border-radius-lg; - -$btn-transition: color .15s ease-in-out, background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out; - - -// Forms - -$form-text-margin-top: .25rem; -$form-text-font-size: $small-font-size; -$form-text-font-style: null; -$form-text-font-weight: null; -$form-text-color: $text-muted; - -$form-label-margin-bottom: .5rem; -$form-label-font-size: null; -$form-label-font-style: null; -$form-label-font-weight: null; -$form-label-color: null; - -$input-padding-y: $input-btn-padding-y; -$input-padding-x: $input-btn-padding-x; -$inpu-lg-padding-y: 1rem; -$input-font-family: $input-btn-font-family; -$input-font-size: $input-btn-font-size; -$input-font-weight: $font-weight-base; -$input-line-height: $input-btn-line-height; - -$input-padding-y-sm: $input-btn-padding-y-sm; -$input-padding-x-sm: $input-btn-padding-x-sm; -$input-font-size-sm: $input-btn-font-size-sm; - -$input-padding-y-lg: $input-btn-padding-y-lg; -$input-padding-x-lg: $input-btn-padding-x-lg; -$input-font-size-lg: $input-btn-font-size-lg; - -$input-bg: $white; -$input-disabled-bg: $gray-200; -$input-disabled-border-color: null; - -$input-color: $gray-700; -$input-border-color: $gray-500; -$input-border-width: $input-btn-border-width; -$input-box-shadow: $box-shadow-inset; - -$input-border-radius: $border-radius; -$input-border-radius-sm: $border-radius-sm; -$input-border-radius-lg: $border-radius-lg; - -$input-focus-bg: $input-bg; -$input-focus-border-color: lighten($component-active-bg, 25%); -$input-focus-color: $input-color; -$input-focus-width: $input-btn-focus-width; -$input-focus-box-shadow: $input-btn-focus-box-shadow; - -$input-placeholder-color: $gray-600; -$input-plaintext-color: $body-color; - -$input-height-border: $input-border-width * 2; - -$input-height-inner: add($input-line-height * 1em, $input-padding-y * 2); -$input-height-inner-half: add($input-line-height * .5em, $input-padding-y); -$input-height-inner-quarter: add($input-line-height * .25em, $input-padding-y / 2); - -$input-height: add($input-line-height * 1em, add($input-padding-y * 2, $input-height-border, false)); -$input-height-sm: add($input-line-height * 1em, add($input-padding-y-sm * 2, $input-height-border, false)); -$input-height-lg: add($input-line-height * 1em, add($input-padding-y-lg * 2, $input-height-border, false)); -$input-height-xl: calc(#{$input-line-height * 1.5em} + #{$input-btn-padding-y-lg * 2} + #{$input-height-border}); - -$input-transition: border-color .15s ease-in-out, box-shadow .15s ease-in-out; - -// Custom forms - -$custom-control-gutter: 1.75rem; -$custom-control-spacer-x: 1rem; -$custom-control-line-height: 1; -$custom-control-indicator-size: 1.25rem; - -$custom-control-bg: $gray-400; -$custom-control-indicator-bg: $white; -$custom-control-border-width: $border-width; -$custom-control-border-color: $input-border-color; -$custom-control-box-shadow: none; - - - -$custom-control-indicator-hover-color: $component-hover-color; -$custom-control-indicator-hover-bg: $primary; -$custom-control-indicator-hover-border-color: $component-hover-border-color; - -$custom-control-indicator-active-color: $component-active-color; -$custom-control-indicator-active-border-color: $component-active-border-color; - - -$custom-control-indicator-checked-color: $component-active-color; -$custom-control-indicator-checked-bg: $primary; -$custom-control-indicator-checked-border-color: $primary; -$custom-control-indicator-checked-disabled-bg: rgba($primary, .7); -$custom-control-indicator-border-width: 1px; - -$custom-control-indicator-disabled-bg: $gray-200; -$custom-control-label-disabled-color: $gray-800; - -$custom-checkbox-bg: $gray-400; -$custom-checkbox-checked-bg: $primary; -$custom-checkbox-disabled-checked-bg: rgba($primary, .7); -$custom-checkbox-indicator-border-radius: $border-radius-xl; -$custom-checkbox-indicator-border-width: $border-width-md; -$custom-checkbox-indicator-icon-checked: $font-awesome-5; -$square-checkbox-indicator-border-radius: 3px; - -$custom-toggle-slider-bg: $gray-400; -$custom-toggle-slider-indicator-bg: $white; -$custom-toggle-checked-bg: $primary; -$custom-toggle-disabled-bg: $gray-200; -$custom-toggle-disabled-checked-bg: rgba($primary, .7); -$custom-toggle-border-radius: .8rem; - -$custom-switch-indicator-size: calc(#{$custom-control-indicator-size} - #{$custom-control-indicator-border-width * 4}); - -$custom-checkbox-disabled-checked-color: $gray-800; - - -$form-check-input-width: 1.125em; -$form-check-min-height: $font-size-base * $line-height-base; -$form-check-padding-start: $form-check-input-width + .5em; -$form-check-margin-bottom: .125rem; -$form-check-label-color: null; -$form-check-label-cursor: null; -$form-check-transition: background-color .2s ease-in-out, background-position .2s ease-in-out, border-color .2s ease-in-out, box-shadow .2s ease-in-out; - -$form-check-input-active-filter: brightness(90%); - -$form-check-input-bg: $body-bg; -$form-check-input-border: 1px solid $input-border-color; -$form-check-input-border-radius: .25em; -$form-check-radio-border-radius: 50%; -$form-check-input-focus-border: $input-focus-border-color; -$form-check-input-focus-box-shadow: $input-btn-focus-box-shadow; - -$form-check-input-checked-color: $component-active-color; -$form-check-input-checked-bg-color: $component-active-bg; -$form-check-input-checked-border-color: $form-check-input-checked-bg-color; -$form-check-input-checked-bg-image: url("data:image/svg+xml,"); -$form-check-radio-checked-bg-image: url("data:image/svg+xml,"); - -$form-check-input-indeterminate-color: $component-active-color; -$form-check-input-indeterminate-bg-color: $component-active-bg; -$form-check-input-indeterminate-border-color: $form-check-input-indeterminate-bg-color; -$form-check-input-indeterminate-bg-image: url("data:image/svg+xml,"); - -$form-switch-color: $gray-600; -$form-switch-width: 2.25em; -$form-switch-padding-start: $form-switch-width + .5em; -$form-switch-bg-image: url("data:image/svg+xml,"); -$form-switch-border-radius: $form-switch-width; - -$form-switch-focus-color: $input-focus-border-color; -$form-switch-focus-bg-image: url("data:image/svg+xml,"); - -$form-switch-checked-color: $component-active-color; -$form-switch-checked-bg-image: url("data:image/svg+xml,"); -$form-switch-checked-bg-position: right center; - -$form-check-inline-margin-end: 1rem; - -$input-group-addon-color: $input-color; -$input-group-addon-bg: $white; -$input-group-addon-border-color: $input-border-color; - -// Input groups - -$input-group-addon-color: $input-placeholder-color; -$input-group-addon-bg: $input-bg; -$input-group-addon-border-color: $input-border-color; - -$input-group-addon-focus-color: $input-focus-color; -$input-group-addon-focus-bg: $input-focus-bg; -$input-group-addon-focus-border-color: $input-border-color; - -$form-select-padding-y: $input-padding-y; -$form-select-padding-x: $input-padding-x; -$form-select-font-family: $input-font-family; -$form-select-font-size: $input-font-size; -$form-select-height: $input-height; -$form-select-indicator-padding: 1rem; // Extra padding to account for the presence of the background-image based indicator -$form-select-font-weight: $input-font-weight; -$form-select-line-height: $input-line-height; -$form-select-color: $input-color; -$form-select-disabled-color: $gray-600; -$form-select-bg: $input-bg; -$form-select-disabled-bg: $gray-200; -$form-select-disabled-border-color: $input-disabled-border-color; -$form-select-bg-position: right $form-select-padding-x center; -$form-select-bg-size: 16px 12px; // In pixels because image dimensions -$form-select-indicator-color: $gray-800; -$form-select-indicator: url("data:image/svg+xml,"); - -$form-select-feedback-icon-padding-end: add(1em * .75, (2 * $form-select-padding-y * .75) + $form-select-padding-x + $form-select-indicator-padding); -$form-select-feedback-icon-position: center right ($form-select-padding-x + $form-select-indicator-padding); -$form-select-feedback-icon-size: $input-height-inner-half $input-height-inner-half; - -$form-select-border-width: $input-border-width; -$form-select-border-color: $input-border-color; -$form-select-border-radius: $border-radius; -$form-select-box-shadow: $box-shadow-inset; - -$form-select-focus-border-color: $input-focus-border-color; -$form-select-focus-width: $input-focus-width; -$form-select-focus-box-shadow: 0 0 0 $form-select-focus-width $input-btn-focus-color; - -$form-select-padding-y-sm: $input-padding-y-sm; -$form-select-padding-x-sm: $input-padding-x-sm; -$form-select-font-size-sm: $input-font-size-sm; -$form-select-height-sm: $input-height-sm; - -$form-select-padding-y-lg: $input-padding-y-lg; -$form-select-padding-x-lg: $input-padding-x-lg; -$form-select-font-size-lg: $input-font-size-lg; -$form-select-height-lg: $input-height-lg; - -$form-range-track-width: 100%; -$form-range-track-height: .5rem; -$form-range-track-cursor: pointer; -$form-range-track-bg: $gray-300; -$form-range-track-border-radius: 1rem; -$form-range-track-box-shadow: $box-shadow-inset; - -$form-range-thumb-width: 1rem; -$form-range-thumb-height: $form-range-thumb-width; -$form-range-thumb-bg: $component-active-bg; -$form-range-thumb-border: 0; -$form-range-thumb-border-radius: 1rem; -$form-range-thumb-box-shadow: 0 .1rem .25rem rgba($black, .1); -$form-range-thumb-focus-box-shadow: 0 0 0 1px $body-bg, $input-focus-box-shadow; -$form-range-thumb-focus-box-shadow-width: $input-focus-width; // For focus box shadow issue in Edge -$form-range-thumb-active-bg: lighten($component-active-bg, 35%); -$form-range-thumb-disabled-bg: $gray-500; -$form-range-thumb-transition: background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out; - -$form-file-height: $input-height; -$form-file-focus-border-color: $input-focus-border-color; -$form-file-focus-box-shadow: $input-focus-box-shadow; -$form-file-disabled-bg: $input-disabled-bg; -$form-file-disabled-border-color: $input-disabled-border-color; - -$form-file-padding-y: $input-padding-y; -$form-file-padding-x: $input-padding-x; -$form-file-line-height: $input-line-height; -$form-file-font-family: $input-font-family; -$form-file-font-weight: $input-font-weight; -$form-file-color: $input-color; -$form-file-bg: $input-bg; -$form-file-border-width: $input-border-width; -$form-file-border-color: $input-border-color; -$form-file-border-radius: $input-border-radius; -$form-file-box-shadow: $input-box-shadow; -$form-file-button-color: $form-file-color; -$form-file-button-bg: $input-group-addon-bg; - -$form-file-padding-y-sm: $input-padding-y-sm; -$form-file-padding-x-sm: $input-padding-x-sm; -$form-file-font-size-sm: $input-font-size-sm; -$form-file-height-sm: $input-height-sm; - -$form-file-padding-y-lg: $input-padding-y-lg; -$form-file-padding-x-lg: $input-padding-x-lg; -$form-file-font-size-lg: $input-font-size-lg; -$form-file-height-lg: $input-height-lg; - -$input-muted-bg: $gray-100; -$input-placeholder-color: $gray-800; -$input-focus-placeholder-color: $gray-800; - -// Form validation - -$form-feedback-margin-top: $form-text-margin-top; -$form-feedback-font-size: $form-text-font-size; -$form-feedback-font-style: $form-text-font-style; -$form-feedback-valid-color: $success; -$form-feedback-invalid-color: $danger; - -$form-feedback-icon-valid-color: $form-feedback-valid-color; -$form-feedback-icon-valid: url("data:image/svg+xml,"); -$form-feedback-icon-invalid-color: $form-feedback-invalid-color; -$form-feedback-icon-invalid: url("data:image/svg+xml,"); - -// scss-docs-start form-validation-states -$form-validation-states: ( - "valid": ( - "color": $form-feedback-valid-color, - "icon": $form-feedback-icon-valid - ), - "invalid": ( - "color": $form-feedback-invalid-color, - "icon": $form-feedback-icon-invalid - ) -); -// scss-docs-end form-validation-states - -// Z-index master list -// -// Warning: Avoid customizing these values. They're used for a bird's eye view -// of components dependent on the z-axis and are designed to all work together. - -// scss-docs-start zindex-stack -$zindex-dropdown: 1000; -$zindex-sticky: 1020; -$zindex-fixed: 1030; -$zindex-modal-backdrop: 1040; -$zindex-modal: 1050; -$zindex-popover: 1060; -$zindex-tooltip: 1070; -// scss-docs-end zindex-stack - -// No UI Slider -$noui-handle-width: 15px; -$noui-slider-height: 10px; -$noui-connect-bg: $secondary; -$noui-handle-bg: $light; -$noui-border-color: $gray-500; -$noui-focus-shadow: $input-btn-focus-box-shadow; -$noui-handle-border: 0; -$noui-handle-border-radius: $border-radius; -$noui-origin-border-radius: $circle-radius; - - -// Navs - -$nav-link-padding-y: .5rem; -$nav-link-padding-x: 1rem; -$nav-link-color: $gray-800; -$nav-link-hover-color: $primary; -$nav-link-active-color: $gray-800; -$nav-link-shadow: none; -$nav-link-transition: color .15s ease-in-out, background-color .15s ease-in-out, border-color .15s ease-in-out; -$nav-link-disabled-color: $gray-600; - -$nav-tabs-border-color: $light; -$nav-tabs-border-width: $border-width; -$nav-tabs-border-radius: $border-radius; -$nav-tabs-link-hover-border-color: $gray-200 $gray-200 $nav-tabs-border-color; -$nav-tabs-link-active-color: $gray-700; -$nav-tabs-link-active-bg: $light; -$nav-tabs-link-active-border-color: $light; - -$nav-pills-padding-y: .75rem; -$nav-pills-padding-x: .85rem; - -$nav-pills-space-x: 1rem; -$nav-pills-border-circle: 50%; - -$nav-pills-bg: $white; -$nav-pills-border-width: 1px; -$nav-pills-border-color: $light; -$nav-pills-border-radius: $border-radius; - -$nav-pills-link-hover-color: $primary; -$nav-pills-link-active-color: $primary; -$nav-pills-active-border-color: lighten( $dark, 20% ); -$nav-pills-link-active-bg: #f8f8f8; - -// Owl navs - -$owl-nav-color: $gray-600; -$owl-nav-color-hover: $gray-900; -$owl-nav-font-size: $font-size-xxl; -$owl-nav-rounded: 3px; -$owl-nav-margin: 5px; -$owl-nav-padding: 4px 7px; -$owl-nav-background: $gray-400; -$owl-nav-background-hover: $gray-800; -$owl-nav-disabled-opacity: 0.5; - -// Owl dots - -$owl-dot-width: 10px; -$owl-dot-height: 10px; -$owl-dot-rounded: $circle-radius; -$owl-dot-margin: 5px 5px; -$owl-dot-border-width: 2px; -$owl-dot-background: $gray-400; -$owl-dot-background-active: $gray-800; - - -// Navbar - -$navbar-padding-y: 1rem; -$navbar-padding-x: null; - -$navbar-nav-link-padding-x: .8rem; - -$navbar-brand-font-size: $font-size-lg; -// Compute the navbar-brand padding-y so the navbar-brand will have the same height as navbar-text and nav-link -$nav-link-height: $font-size-base * $line-height-base + $nav-link-padding-y * 4; -$navbar-brand-height: $navbar-brand-font-size * $line-height-base; -$navbar-brand-padding-y: 0; -$navbar-brand-margin-end: 1rem; - -$navbar-toggler-padding-y: .4rem; -$navbar-toggler-padding-x: .6rem; -$navbar-toggler-font-size: $font-size-lg; -$navbar-toggler-border-radius: $btn-border-radius; -$navbar-toggler-focus-width: $btn-focus-width; -$navbar-toggler-transition: box-shadow .15s ease-in-out; - -$navbar-dark-color: rgba($white, 0.9); -$navbar-dark-hover-color: rgba($white, 1); -$navbar-dark-active-color: $white; -$navbar-dark-disabled-color: rgba($white, .9); -$navbar-dark-toggler-icon-bg: url("data:image/svg+xml,"); -$navbar-dark-toggler-border-color: rgba($white, .1); - -$navbar-light-color: rgba($black, .9); -$navbar-light-hover-color: rgba($black, 1); -$navbar-light-active-color: rgba($black, 1); -$navbar-light-disabled-color: rgba($black, .9); -$navbar-light-toggler-icon-bg: url("data:image/svg+xml,"); -$navbar-light-toggler-border-color: rgba($black, .1); - -$navbar-light-brand-color: $navbar-light-active-color; -$navbar-light-brand-hover-color: $navbar-light-active-color; -$navbar-dark-brand-color: $navbar-dark-active-color; -$navbar-dark-brand-hover-color: $navbar-dark-active-color; - - -// Dropdowns -// -// Dropdown menu container and contents. - -$dropdown-min-width: 10rem; -$dropdown-padding-y: .5rem; -$dropdown-spacer: .125rem; -$dropdown-font-size: 1rem; -$dropdown-item-font-weight: $font-weight-light; -$dropdown-item-hover-color: $gray-900; - -$dropdown-color: $body-color; -$dropdown-bg: $white; -$dropdown-border-color: $light; -$dropdown-border-radius: $border-radius; -$dropdown-border-width: $border-width; -$dropdown-inner-border-radius: subtract($dropdown-border-radius, $dropdown-border-width); -$dropdown-divider-bg: $gray-200; -$dropdown-divider-margin-y: $spacer / 2; -$dropdown-box-shadow: $box-shadow; - -$dropdown-link-color: $gray-900; -$dropdown-link-hover-color: darken($gray-900, 5%); -$dropdown-link-hover-bg: $gray-200; - -$dropdown-link-active-color: $gray-900; -$dropdown-link-active-bg: $gray-400; - -$dropdown-link-disabled-color: $gray-600; - -$dropdown-item-padding-y: $spacer / 4; -$dropdown-item-padding-x: $spacer; - -$dropdown-header-color: $gray-900; -$dropdown-header-font-weight: $font-weight-bold; -$dropdown-header-padding: $dropdown-padding-y $dropdown-item-padding-x; - - -// Pagination - -$pagination-padding-y: .375rem; -$pagination-padding-x: .75rem; -$pagination-padding-y-sm: .25rem; -$pagination-padding-x-sm: .5rem; -$pagination-padding-y-lg: .75rem; -$pagination-padding-x-lg: 1.5rem; - -$pagination-color: $link-color; -$pagination-bg: $white; -$pagination-border-width: $border-width; -$pagination-border-radius: $border-radius; -$pagination-margin-start: -$pagination-border-width; -$pagination-border-color: $light; - -$pagination-focus-box-shadow: $input-btn-focus-box-shadow; -$pagination-focus-outline: 0; - -$pagination-hover-color: $link-hover-color; -$pagination-hover-bg: $gray-200; -$pagination-hover-border-color: $gray-300; - -$pagination-active-color: $component-active-color; -$pagination-active-bg: $component-active-bg; -$pagination-active-border-color: $pagination-active-bg; - -$pagination-disabled-color: $gray-600; -$pagination-disabled-bg: $white; -$pagination-disabled-border-color: $gray-300; - - -// Cards - -$card-spacer-y: 1.25rem; -$card-spacer-x: 1.5rem; -$card-social-padding: .25rem .375rem; -$card-title-spacer-y: .875rem; -$card-border-width: $border-width; -$card-border-radius: $border-radius; -$card-border-color: rgba($black, .125); -$card-inner-border-radius: subtract($card-border-radius, $card-border-width); -$card-cap-padding-y: 1.25rem; -$card-cap-padding-x: $card-spacer-x; -$card-cap-bg: rgba($black, .03); -$card-cap-color: null; -$card-height: null; -$card-color: null; -$card-bg: $white; - -$card-img-overlay-padding: $spacer; - -$card-group-margin: $grid-gutter-width / 2; -$transition-bezier-card: cubic-bezier(0.34, 1.45, 0.7, 1); - -//Timelines -$timeline-font-size: $font-size-xxl; -$timeline-font-color: $body-color; -$timeline-border-color: $light; -$timeline-border-color-dark: $gray-500; -$timeline-background-color: $white; -$timeline-line-height: 3; -$timeline-border-width: $border-width; -$timeline-circle-radius: 50%; -$timeline-spacer-y: 1.25rem; -$timeline-spacer-x: 2.75rem; - -// Icon -$icon-box-padding: 1rem; -$icon-shape: 4.5rem; -$icon-shape-xs: 2rem; -$icon-shape-sm: 3rem; -$icon-shape-lg: 5.5rem; -$icon-shape-img: 5.5rem; -$icon-shape-bordered: 5rem; -$icon-size: 2rem; -$icon-size-xs: .875rem; -$icon-size-sm: 1.25rem; -$icon-size-md: 1.875rem; -$icon-size-lg: 2.75rem; -$icon-size-xl: 4.5rem; - - -// Steps -$step-number-size: 12rem; -$step-shape-size: 7rem; -$step-border-width: $border-width-md; -$step-icon-size: $icon-size-xl; - -// Tooltips - -$tooltip-font-size: $font-size-sm; -$tooltip-max-width: 200px; -$tooltip-color: $white; -$tooltip-bg: $dark; -$tooltip-border-radius: $border-radius; -$tooltip-opacity: .99; -$tooltip-padding-y: .75rem; -$tooltip-padding-x: .55rem; -$tooltip-margin: 0; - -$tooltip-arrow-width: .8rem; -$tooltip-arrow-height: .4rem; -$tooltip-arrow-color: $tooltip-bg; - -// Form tooltips must come after regular tooltips -$form-feedback-tooltip-padding-y: $tooltip-padding-y; -$form-feedback-tooltip-padding-x: $tooltip-padding-x; -$form-feedback-tooltip-font-size: $tooltip-font-size; -$form-feedback-tooltip-line-height: null; -$form-feedback-tooltip-opacity: $tooltip-opacity; -$form-feedback-tooltip-border-radius: $tooltip-border-radius; - - -// Popovers - -$popover-font-size: $font-size-sm; -$popover-bg: $white; -$popover-max-width: 276px; -$popover-border-width: $border-width; -$popover-border-color: rgba($black, .2); -$popover-border-radius: $border-radius-lg; -$popover-inner-border-radius: subtract($popover-border-radius, $popover-border-width); -$popover-box-shadow: $box-shadow; - -$popover-header-bg: darken($popover-bg, 3%); -$popover-header-color: $headings-color; -$popover-header-padding-y: .5rem; -$popover-header-padding-x: $spacer; - -$popover-body-color: $body-color; -$popover-body-padding-y: $spacer; -$popover-body-padding-x: $spacer; - -$popover-arrow-width: 1rem; -$popover-arrow-height: .5rem; -$popover-arrow-color: $popover-bg; - -$popover-arrow-outer-color: fade-in($popover-border-color, .05); - - -// Toasts - -$toast-max-width: 350px; -$toast-padding-x: .75rem; -$toast-padding-y: .25rem; -$toast-font-size: .875rem; -$toast-color: null; -$toast-background-color: rgba($white, .85); -$toast-border-width: 1px; -$toast-border-color: rgba(0, 0, 0, .1); -$toast-border-radius: $border-radius; -$toast-box-shadow: $box-shadow; - -$toast-header-color: $gray-600; -$toast-header-background-color: rgba($white, .85); -$toast-header-border-color: rgba(0, 0, 0, .05); - - -// Badges - -$badge-font-size: .75em; -$badge-font-weight: $font-weight-bolder; -$badge-padding-y: .1rem; -$badge-padding-x: .4rem; -$badge-color: $white; -$badge-border-radius: $border-radius; - -$badge-pill-padding-x: .875em; -$badge-pill-border-radius: 10rem; - -$badge-circle-size: 2rem; - - -// Modals - -// Padding applied to the modal body -$modal-inner-padding: $spacer; - -// Margin between elements in footer, must be lower than or equal to 2 * $modal-inner-padding -$modal-footer-margin-between: .5rem; - -$modal-dialog-margin: .5rem; -$modal-dialog-margin-y-sm-up: 1.75rem; - -$modal-title-line-height: $line-height-base; - -$modal-content-color: null; -$modal-content-bg: $white; -$modal-content-border-color: rgba($black, .2); -$modal-content-border-width: $border-width; -$modal-content-border-radius: $border-radius-lg; -$modal-content-inner-border-radius: subtract($modal-content-border-radius, $modal-content-border-width); -$modal-content-box-shadow-xs: $box-shadow-sm; -$modal-content-box-shadow-sm-up: $box-shadow; - -$modal-backdrop-bg: $black; -$modal-backdrop-opacity: .5; -$modal-header-border-color: $border-color; -$modal-footer-border-color: $modal-header-border-color; -$modal-header-border-width: $modal-content-border-width; -$modal-footer-border-width: $modal-header-border-width; -$modal-header-padding-y: $modal-inner-padding; -$modal-header-padding-x: $modal-inner-padding; -$modal-header-padding: $modal-header-padding-y $modal-header-padding-x; // Keep this for backwards compatibility - -$modal-sm: 300px; -$modal-md: 500px; -$modal-lg: 800px; -$modal-xl: 1140px; - -$modal-fade-transform: translate(0, -50px); -$modal-show-transform: none; -$modal-transition: transform .3s ease-out; -$modal-scale-transform: scale(1.02); - - -// Alerts -// -// Define alert colors, border radius, and padding. - -$alert-padding-y: $spacer; -$alert-padding-x: $spacer; -$alert-margin-bottom: 1rem; -$alert-border-radius: $border-radius; -$alert-link-font-weight: $font-weight-bold; -$alert-border-width: $border-width; -$alert-icon-font-size: 2rem; -$alert-link-color: $white; - -$alert-bg-level: -10 !default; -$alert-border-level: -9 !default; -$alert-color-level: 10 !default; - - -// Progress bars - -$progress-height: 1rem; -$progress-font-size: $font-size-base * .75; -$progress-bg: $gray-200; -$progress-border-radius: $border-radius; -$progress-box-shadow: $box-shadow-inset; -$progress-bar-color: $white; -$progress-bar-bg: $primary; -$progress-bar-animation-timing: 1s linear infinite; -$progress-bar-transition: width .6s ease; - -$progress-xl-size: .8rem; -$progress-lg-size: .6rem; -$progress-sm-size: .2rem; - - -// List group - -$list-group-color: null; -$list-group-bg: $white; -$list-group-border-color: rgba($black, .125); -$list-group-border-width: $border-width; -$list-group-border-radius: $border-radius; - -$list-group-sm-item-padding-y: .625rem; -$list-group-sm-item-padding-x: .875rem; - -$list-group-item-padding-y: $spacer / 2; -$list-group-item-padding-x: $spacer; -$list-group-item-bg-level: -9; -$list-group-item-color-level: 6; -$list-group-item-border-radius: $border-radius; - -$list-group-hover-bg: $gray-100; -$list-group-active-color: $component-active-color; -$list-group-active-bg: $component-active-bg; -$list-group-active-border-color: $list-group-active-bg; - -$list-group-disabled-color: $gray-600; -$list-group-disabled-bg: $list-group-bg; - -$list-group-action-color: $gray-700; -$list-group-action-hover-color: $list-group-action-color; - -$list-group-action-active-color: $body-color; -$list-group-action-active-bg: $gray-200; - -// Image thumbnails - -$thumbnail-padding: .25rem; -$thumbnail-bg: $body-bg; -$thumbnail-border-width: $border-width; -$thumbnail-border-color: $gray-300; -$thumbnail-border-radius: $border-radius; -$thumbnail-box-shadow: $box-shadow-sm; - - -// Figures - -$figure-caption-font-size: $small-font-size; -$figure-caption-color: $gray-600; - - -// Breadcrumbs - -$breadcrumb-font-size: null; -$breadcrumb-padding-y: $spacer / 2; -$breadcrumb-padding-x: $spacer; -$breadcrumb-item-padding-x: .5rem; -$breadcrumb-margin-bottom: 1rem; -$breadcrumb-bg: $gray-200; -$breadcrumb-divider-color: $gray-600; -$breadcrumb-active-color: $gray-600; -$breadcrumb-divider: quote("/"); -$breadcrumb-border-radius: $border-radius; - -$breadcrumb-active-color: $white; -$breadcrumb-divider-color: $gray-700; -$breadcrumb-item-color: $gray-700; -$breadcrumb-font-weight: $font-weight-normal; -$breadcrumb-active-font-weight: $font-weight-normal; -$breadcrumb-item-light-color: $white; -$breadcrumb-divider-light-color: $white; - -// Carousel - -$carousel-control-color: $white; -$carousel-control-width: 15%; -$carousel-control-opacity: .5; -$carousel-control-hover-opacity: .9; -$carousel-control-transition: opacity .15s ease; - -$carousel-indicator-width: 30px; -$carousel-indicator-height: 3px; -$carousel-indicator-hit-area-height: 10px; -$carousel-indicator-spacer: 3px; -$carousel-indicator-opacity: .5; -$carousel-indicator-active-bg: $white; -$carousel-indicator-active-opacity: 1; -$carousel-indicator-transition: opacity .6s ease; - -$carousel-caption-width: 70%; -$carousel-caption-color: $white; -$carousel-caption-padding-y: 1.25rem; -$carousel-caption-spacer: 1.25rem; - -$carousel-control-icon-width: 20px; - -$carousel-control-prev-icon-bg: url("data:image/svg+xml,"); -$carousel-control-next-icon-bg: url("data:image/svg+xml,"); - -$carousel-transition-duration: .6s; -$carousel-transition: transform $carousel-transition-duration ease-in-out; // Define transform transition first if using multiple transitions (e.g., `transform 2s ease, opacity .5s ease-out`) - - -// Spinners - -$spinner-width: 2rem; -$spinner-height: $spinner-width; -$spinner-border-width: .25em; -$spinner-animation-speed: .75s; - -$spinner-width-sm: 1.2rem; -$spinner-height-sm: $spinner-width-sm; -$spinner-border-width-sm: .2em; - -// Datepicker - -$datepicker-border-radius: $border-radius-sm; -$datepicker-dropdown-padding: 20px 22px; - -$datepicker-cell-transition: $transition-base; -$datepicker-cell-hover-background: lighten($gray-400, 55%); -$datepicker-cell-border-radius: 50%; -$datepicker-cell-width: 36px; -$datepicker-cell-height: 36px; - -$datepicker-disabled-cell-color: $gray-300; -$datepicker-disabled-old-new-color: $gray-500; - -$datepicker-header-cell-border-radius: $border-radius-sm; - -$datepicker-active-color: $white; -$datepicker-active-background: $secondary; -$datepicker-active-box-shadow: none; - -$datepicker-range-background: $secondary; -$datepicker-range-cell-focused-background: darken($datepicker-range-background, 5%); -$datepicker-range-color: $white; -$datepicker-range-highlighted-bg: $gray-200; - -$datepicker-dropdown-border: lighten($gray-400, 40%); -$datepicker-dropdown-bg: $white; -$datepicker-highlighted-bg: $datepicker-active-background; - - -// Close - -$close-bg: transparent; -$close-hover-bg: transparent; -$close-color: rgba(0, 0, 0, .6); -$close-hover-color: rgba(0, 0, 0, .9); -$close-font-size: $font-size-base * 1.5; -$close-font-weight: $font-weight-bold; -$close-color: $black; -$close-text-shadow: 0 1px 0 $white; - - - -// Code - -$code-font-size: $small-font-size; -$code-color: $blue; - -$kbd-padding-y: .2rem; -$kbd-padding-x: .4rem; -$kbd-font-size: $code-font-size; -$kbd-color: $white; -$kbd-bg: $gray-900; - -$pre-color: null; - -// Avatars -$avatar-sm-y: 1.5rem; -$avatar-sm-x: 1.5rem; - -$avatar-md-y: 2rem; -$avatar-md-x: 2rem; - -$avatar-lg-y: 3rem; -$avatar-lg-x: 3rem; - -$user-avatar-height:2.5rem; -$user-avatar-width: 2.5rem; - -$user-avatar-height-xs:1.5rem; -$user-avatar-width-xs: 1.5rem; - -$user-avatar-height-lg:3.5rem; -$user-avatar-width-lg:3.5rem; - -$user-avatar-height-xl:4.5rem; -$user-avatar-width-xl:4.5rem; - -$user-avatar-height-xxl:10rem; -$user-avatar-width-xxl:10rem; - -// Footer - -$footer-link-font-size: .85rem; -$footer-bg: theme-color("secondary"); -$footer-color: $gray-600; -$footer-link-color: $gray-600; -$footer-link-hover-color: $gray-700; -$footer-heading-color: $gray-600; -$footer-heading-font-size: $font-size-sm; -$padding-footer-sm: .125rem ; -$padding-footer: .375rem ; -$padding-footer-md: .625rem ; -$padding-footer-general: .9375rem; -$padding-footer-big: 1.5rem; diff --git a/probe_ably/service/src/scss/volt/_vendor.scss b/probe_ably/service/src/scss/volt/_vendor.scss deleted file mode 100644 index ae7d5f2..0000000 --- a/probe_ably/service/src/scss/volt/_vendor.scss +++ /dev/null @@ -1,9 +0,0 @@ -// Vendor -@import "vendor/headroom"; -@import "vendor/prism"; -@import "vendor/chartist/chartist"; -@import "vendor/datepicker"; - -// choices js -// @import "node_modules/choices.js/src/styles/base.scss"; -// @import "node_modules/choices.js/src/styles/choices.scss"; \ No newline at end of file diff --git a/probe_ably/service/src/scss/volt/components/_accordions.scss b/probe_ably/service/src/scss/volt/components/_accordions.scss deleted file mode 100755 index b71e7c5..0000000 --- a/probe_ably/service/src/scss/volt/components/_accordions.scss +++ /dev/null @@ -1,38 +0,0 @@ -/** - * = Accordions - */ - - .accordion-button { - text-align: left; - - .btn-check:focus + .btn, .btn:focus { - outline: 0; - box-shadow: none; - } - - &:hover{ - background-color: $gray-200; - } -} - -// Flush accordion items -// -// Remove borders and border-radius to keep accordion items edge-to-edge. - -.accordion-flush { - .accordion-button { - background-color: transparent; - &:not(.collapsed) { - color: $secondary; - } - &:focus { - border-color: $gray-300; - box-shadow: none; - } - } - .accordion-collapse { - border: 0; - } -} - - diff --git a/probe_ably/service/src/scss/volt/components/_alerts.scss b/probe_ably/service/src/scss/volt/components/_alerts.scss deleted file mode 100644 index 6fd954d..0000000 --- a/probe_ably/service/src/scss/volt/components/_alerts.scss +++ /dev/null @@ -1,10 +0,0 @@ -.alert-heading{ - font-weight: $font-weight-bold; -} - -.alert-icon{ - margin-bottom: .5rem; - span{ - font-size: $alert-icon-font-size; - } -} \ No newline at end of file diff --git a/probe_ably/service/src/scss/volt/components/_avatars.scss b/probe_ably/service/src/scss/volt/components/_avatars.scss deleted file mode 100755 index 3846466..0000000 --- a/probe_ably/service/src/scss/volt/components/_avatars.scss +++ /dev/null @@ -1,99 +0,0 @@ -/** - * = Avatars - */ - -.avatar + .avatar-content { - display: inline-block; - margin-left: .75rem; -} - -.avatar-link { - img{ - width: 4rem; - height: 4rem; - } -} - -.author-image{ - img{ - width: 3rem; - height: 3rem; - } -} - -.user-avatar { - height: $user-avatar-height; - width: $user-avatar-width; - min-height: $user-avatar-height; - min-width: $user-avatar-width; - color: $white; - display: flex; - justify-content: center; - align-items: center; - font-weight: $font-weight-bold; - @include border-radius($circle-radius); - &.xs-avatar{ - height: $user-avatar-height-xs; - width: $user-avatar-width-xs; - img{ - height: $user-avatar-height-xs; - width: $user-avatar-width-xs; - } - } - - .md-avatar{ - height: 2rem; - width: 2rem; - min-height: 2rem; - min-width: 2rem; - } - - &.lg-avatar{ - height: $user-avatar-height-lg; - width: $user-avatar-width-lg; - min-height: $user-avatar-height-lg; - min-width: $user-avatar-width-lg; - font-size: $font-size-xs; - - @include media-breakpoint-down(lg) { - height: 2rem; - width: 2rem; - min-height: 2rem; - min-width: 2rem; - } - } - - &.xl-avatar{ - height: $user-avatar-height-xl; - width: $user-avatar-width-xl; - min-height: $user-avatar-height-xl; - min-width: $user-avatar-width-xl; - } - - &.large-avatar{ - border: 2px solid $white; - height: $user-avatar-height-xxl; - width: $user-avatar-width-xxl; - min-height: $user-avatar-height-xxl; - min-width: $user-avatar-width-xxl; - } -} - -// Overlapped avatars - -.avatar-group { - .avatar { - position: relative; - z-index: 2; - border: 2px solid $card-bg; - - &:hover { - z-index: 3; - } - } - - .avatar + .avatar { - margin-left: -1rem; - - } -} diff --git a/probe_ably/service/src/scss/volt/components/_badge.scss b/probe_ably/service/src/scss/volt/components/_badge.scss deleted file mode 100755 index 4db3c97..0000000 --- a/probe_ably/service/src/scss/volt/components/_badge.scss +++ /dev/null @@ -1,102 +0,0 @@ -/** - * = Badges - */ - -.badge { - font-size:$badge-font-size; - font-weight: $badge-font-weight; - - a { - color: $white; - } - - &.super-badge{ - vertical-align: super; - } -} - -// Variations -.badge-pill { - padding-right: $badge-pill-padding-x; - padding-left: $badge-pill-padding-x; -} - -// Multiple inline badges -.badge-inline { - margin-right: .625rem; - - & + span { - top: 2px; - position: relative; - - & > a { - text-decoration: underline; - } - } -} - -// Sizes -.badge-md { - padding: .25rem .4rem; -} - -.badge-lg { - padding: .35rem .85rem; -} - -.badge-xl { - font-size: $font-size-lg; - padding: .35rem .85rem; -} - -//button badges - -.btn{ - .badge-corner{ - position: absolute; - top: -50%; - right: .5rem; - transform: translate(50%,50%); - margin: 0; - border: 3px solid; - padding-left: .5rem; - padding-right: .5rem; - } -} -//Tags -.wi-tags{ - a { - display: inline-block; - padding: 0.125rem 0.875rem; - margin: 0.25rem; - line-height: 2; - font-size: $font-size-sm; - box-shadow: $box-shadow-sm; - background-color: $white; - } -} - -.pixel-pro-badge{ - position: relative; - font-size: 1.25rem; - text-transform: uppercase; - font-weight: $font-weight-bold; - right: -20px; - padding: 5px 14px; - top: -46px; - background: $white; - border-radius: $border-radius; - box-shadow: $box-shadow-sm; - @include media-breakpoint-down(sm){ - font-size: $font-size-base; - right: -13px; - padding: 5px 10px; - top: -23px; - } -} - -.subscription-badge { - top: -19px; - right: -12px; - font-size: .75rem; -} diff --git a/probe_ably/service/src/scss/volt/components/_blog-cards.scss b/probe_ably/service/src/scss/volt/components/_blog-cards.scss deleted file mode 100755 index 5220e99..0000000 --- a/probe_ably/service/src/scss/volt/components/_blog-cards.scss +++ /dev/null @@ -1,12 +0,0 @@ -/** - * = Blog cards - */ - -.card-img-overlay{ - padding: 0; - .card-footer, - .card-header{ - background: transparent; - border-color:$gray-700; - } -} \ No newline at end of file diff --git a/probe_ably/service/src/scss/volt/components/_breadcrumb.scss b/probe_ably/service/src/scss/volt/components/_breadcrumb.scss deleted file mode 100755 index e793960..0000000 --- a/probe_ably/service/src/scss/volt/components/_breadcrumb.scss +++ /dev/null @@ -1,65 +0,0 @@ -/** - * = Breadcrumbs - */ - -.breadcrumb-item { - font-size: $font-size-xs; - &, a { - color: $breadcrumb-item-color; - font-weight: $breadcrumb-font-weight; - font-size: $font-size-xs; - @include media-breakpoint-up(sm){ - font-size: $font-size-sm; - } - } - - &.active { - font-weight: $breadcrumb-active-font-weight; - } - - + .breadcrumb-item { - &:before{ - content: "\f101"; - font-family: $font-awesome-5; - font-weight: 900; - color: $breadcrumb-divider-color; - } - } - -} - -.breadcrumb-transparent { - background: transparent; - padding: 0; -} - -@each $color, $value in $theme-colors { - .breadcrumb-#{$color} { - background: $value; - .breadcrumb-item{ - &.active { - color: $white; - } - } - &.breadcrumb-transparent { - background: transparent; - .breadcrumb-item { - &.active { - color: $value; - } - } - } - } -} - -.breadcrumb-text-light { - .breadcrumb-item { - &, a { - color: $breadcrumb-item-light-color; - } - - &:before { - color: $breadcrumb-divider-light-color; - } - } -} diff --git a/probe_ably/service/src/scss/volt/components/_buttons.scss b/probe_ably/service/src/scss/volt/components/_buttons.scss deleted file mode 100755 index a6dfe0f..0000000 --- a/probe_ably/service/src/scss/volt/components/_buttons.scss +++ /dev/null @@ -1,75 +0,0 @@ -/* -* = Buttons -*/ - -.btn { - &.btn-circle { - border-radius: $circle-radius; - } - - &.btn-md { - padding: 0.65rem 1.25rem; - } - - &.btn-xs { - padding : 0.175rem 0.45rem; - font-size: 0.7rem; - } -} - -.btn-icon-only { - width : 2.575rem; - height : 2.575rem; - padding: 0; - @include display-flex(); - @include justify-content(center); - @include align-items(center); - - &.btn-xs { - width : 1.7rem; - height: 1.7rem; - } - - &.btn-sm { - width : 2rem; - height: 2rem; - } -} - - -// -// Block button -// - -.btn-block { - display: block; - width : 100%; - - // Vertically space out multiple block buttons - +.btn-block { - margin-top: $btn-block-spacing-y; - } -} - -.copy-code-button { - position: absolute; - top: 22px; - right: 20px; - background-color: transparent; - color: $gray-600; - border: 0; - box-shadow: none; - - &:hover { - background-color: $primary; - color: $white; - border: 0; - box-shadow: none; - } -} - -.copy-code-text { - position: absolute; - top: 24px; - right: 90px; -} \ No newline at end of file diff --git a/probe_ably/service/src/scss/volt/components/_card.scss b/probe_ably/service/src/scss/volt/components/_card.scss deleted file mode 100755 index 87bc3e4..0000000 --- a/probe_ably/service/src/scss/volt/components/_card.scss +++ /dev/null @@ -1,263 +0,0 @@ -/** - * = Cards - */ - -.card { - position: relative; - .card-header{ - background: transparent; - } - - &.hover-state{ - &:hover { - background-color: $soft; - } - } - - .profile-cover{ - @include background-image(no-repeat, cover); - height: 200px; - } - - @include media-breakpoint-up(lg) { - &.timeline-card{ - &:before { - content: ""; - position: absolute; - top: 50%; - left: 0; - margin-left: .75rem; - border: 8px solid $black; - border-color: transparent #e0e6ec #e0e6ec transparent; - -webkit-box-sizing: border-box; - box-sizing: border-box; - -webkit-transform-origin: 0 0; - transform-origin: 0 0; - @include transform(rotate(135deg)); - @include box-shadow($box-shadow); - } - } - - &.left-timeline-card { - &:after{ - content: ""; - position: absolute; - top: 50%; - right: 0; - margin-right: -5px;; - border: 8px solid $black; - border-color: transparent #e0e6ec #e0e6ec transparent; - -webkit-box-sizing: border-box; - box-sizing: border-box; - -webkit-transform-origin: 0 0; - transform-origin: 0 0; - @include transform(rotate(-45deg)); - @include box-shadow($box-shadow); - } - } - } -} - -.message-wrapper, -.task-wrapper{ - .card{ - border:0; - } -} - -.customer-testimonial { - .content-wrapper{ - &:before { - content: ""; - position: absolute; - top: 25px; - left: -1px; - margin-left: .75rem; - border: 8px solid $black; - border-color: transparent #e0e6ec #e0e6ec transparent; - -webkit-box-sizing: border-box; - box-sizing: border-box; - -webkit-transform-origin: 0 0; - transform-origin: 0 0; - @include transform(rotate(135deg)); - @include box-shadow($box-shadow); - } - } -} - -.profile-page { - .card-profile { - margin-top: -150px; - - .card-profile-image { - position: relative; - - img { - max-width: 180px; - @include border-radius($border-radius); - transform: translate(-50%,-30%); - position: absolute; - left: 50%; - transition: $transition-base; - - &:hover { - transform: translate(-50%, -33%); - } - } - } - - .card-profile-stats { - padding: 1rem 0; - - > div { - text-align: center; - margin-right: 1rem; - padding: .875rem; - - &:last-child { - margin-right: 0; - } - - .heading { - display: block; - font-size: 1.1rem; - font-weight: bold; - } - .description { - font-size: .875rem; - color: $gray-500; - } - } - } - - .card-profile-actions { - padding: .875rem; - } - - @include media-breakpoint-down(xs) { - .card-profile-actions { - margin-top: 110px; - } - } - - @include media-breakpoint-between(sm, md) { - .card-profile-stats { - margin-top: 30px; - } - } - } -} - -.card-footer{ - background-color:transparent; -} - -.card-stats{ - padding-left:1.9rem; -} - - -// Card with blockquotes - -.card { - .card-blockquote { - position: relative; - padding: 2rem; - - .svg-bg { - display: block; - position: absolute; - width: 100%; - height: 95px; - top: -94px; - left: 0; - } - } -} - -// Animated cards - -.card-lift-hover { - &:hover { - transform: translateY(-20px); - @include transition($transition-base); - } -} - -.page-preview { - - display: block; - position: relative; - - .show-on-hover { - position: absolute; - bottom: -25px; - background: rgba($dark, .85); - padding: 10px 0; - border-bottom-left-radius: $border-radius; - border-bottom-right-radius: $border-radius; - width: calc(100% + 28px); - left: -14px; - opacity: 0; - @include transition(.2s); - } - - &.page-preview-lg { - .show-on-hover { - left: -30px; - width: calc(100% + 60px); - bottom: -20px; - } - } - - &:hover { - .show-on-hover { - z-index: 99; - opacity: 1; - } - } -} - -.live-editor { - textarea, pre { - font-size: 1.2em !important; - padding: 0 !important; - } - - textarea:focus { - outline: none !important; - } -} - -.prism-code { - padding: 0 !important; -} - -.theme-settings { - z-index: 99; - position: fixed; - right: 15px; - bottom: 0; - - &, .card-body { - border-bottom-right-radius: 0; - border-bottom-left-radius: 0; - } -} - -.theme-settings-close { - position: absolute; - top: 5px; - right: 5px; - font-size: .65rem; -} - -.theme-settings-expand { - right: 15px; - bottom: 0; - - &:hover { - background: $gray-200; - cursor: pointer; - } -} \ No newline at end of file diff --git a/probe_ably/service/src/scss/volt/components/_carousel.scss b/probe_ably/service/src/scss/volt/components/_carousel.scss deleted file mode 100755 index 527c016..0000000 --- a/probe_ably/service/src/scss/volt/components/_carousel.scss +++ /dev/null @@ -1,52 +0,0 @@ -/** - * = Bootstrap carousels - */ - -.carousel-caption { - &, h5 { - color: $white; - } -} - -//Indicators - -.carousel-indicators { - li { - height: 10px; - width:10px; - border-radius:$circle-radius; - background:transparent; - border:2px solid $white; - } - .active { - opacity: 1; - background: $white; - } -} - -//Carousel Controls - -.carousel-control-prev-icon, -.carousel-control-next-icon { - width: auto; - height: auto; - font-weight: 900; -} - -.carousel-control-prev-icon { - background-image: none; - &::before{ - content: '\f060'; - font-family: $font-awesome-5; - font-size: $font-size-xxl; - } -} - -.carousel-control-next-icon { - background-image: none; - &:before{ - font-family: $font-awesome-5; - content: "\f061"; - font-size: $font-size-xxl; - } -} \ No newline at end of file diff --git a/probe_ably/service/src/scss/volt/components/_charts.scss b/probe_ably/service/src/scss/volt/components/_charts.scss deleted file mode 100644 index d444d8c..0000000 --- a/probe_ably/service/src/scss/volt/components/_charts.scss +++ /dev/null @@ -1,52 +0,0 @@ -.ct-bar { - stroke-linecap: round; - stroke-width: 10px; -} -.ct-label { - fill: $body-color; - color: $body-color; - font-size: 0.75rem; - margin-top: 6px; - font-weight: $font-weight-bold; -} - -.ct-slice-pie { - stroke: $white; - stroke-width: 3px; -} - -.ct-chart-donut .ct-series { - stroke: $white; - stroke-width: 3px; -} - -.ct-chart-pie .ct-label, .ct-chart-donut .ct-label { - font-size: 0.75rem; - font-weight: $font-weight-bold; -} - -.small-chart{ - margin-left:-1rem; -} - -//Label color Fix for pie chart - -.ct-chart-pie .ct-label, .ct-chart-donut .ct-label { - color: #ffffff; - fill: #ffffff; - font-size: $font-size-base; - font-weight: $font-weight-bold; -} - -.ct-series-g{ - .ct-grid { - stroke: $secondary; - stroke-width: 2px; - stroke-dasharray: 2px; - } - .ct-label.ct-horizontal.ct-end { - margin-left:-9px; - margin-top:10px; - color: $primary; - } -} diff --git a/probe_ably/service/src/scss/volt/components/_close.scss b/probe_ably/service/src/scss/volt/components/_close.scss deleted file mode 100755 index ce2c116..0000000 --- a/probe_ably/service/src/scss/volt/components/_close.scss +++ /dev/null @@ -1,33 +0,0 @@ -/** - * = Close - */ - -.close { - @if $enable-transitions { - transition: $transition-base; - } - &>span:not(.sr-only) { - display: block; - height: 1.25rem; - width: 1.25rem; - background-color: $close-bg; - color: $close-color; - line-height: 17px; - border-radius: 50%; - font-size: 1.25rem; - @if $enable-transitions { - transition: $transition-base; - } - } - - &:hover, - &:focus { - background-color: $close-hover-bg; - color: $close-hover-color; - outline: none; - - span:not(.sr-only) { - background-color: $close-hover-bg; - } - } -} diff --git a/probe_ably/service/src/scss/volt/components/_counters.scss b/probe_ably/service/src/scss/volt/components/_counters.scss deleted file mode 100644 index af845c0..0000000 --- a/probe_ably/service/src/scss/volt/components/_counters.scss +++ /dev/null @@ -1,14 +0,0 @@ -/** - * = Counters - */ - -.counter-alternate{ - &::after{ - content: '\f067'; - font-family: $font-awesome-5; - position: absolute; - font-size: 2.25rem; - color:$dark; - font-weight: 900; - } -} diff --git a/probe_ably/service/src/scss/volt/components/_custom-forms.scss b/probe_ably/service/src/scss/volt/components/_custom-forms.scss deleted file mode 100755 index 1148b96..0000000 --- a/probe_ably/service/src/scss/volt/components/_custom-forms.scss +++ /dev/null @@ -1,103 +0,0 @@ -/** - * = Custom forms - */ - - .custom-control-label { - // Background-color and (when enabled) gradient - &:before { - box-shadow: $custom-control-box-shadow; - @if $enable-transitions { - transition: $input-transition; - } - } - - span { - position: relative; - top: 2px; - } -} - -.custom-control-label { - margin-bottom: 0; -} - -.custom-control-input { - &:active~.custom-control-label::before { - border-color: $custom-control-indicator-active-border-color; - } -} - -// Custom File Input - -.custom-file-label { - background-color: #f3f3f5; - - &::after { - - background-color: #f3f3f5; - } -} - - -//Select -.custom-select{ - font-size: $input-btn-font-size; - box-shadow:none; - - &.custom-select-shadow { - box-shadow: $input-box-shadow; - transition: box-shadow .15s ease; - - &:focus { - box-shadow: $shadow-input-focus; - } - } - - &:hover { - cursor: pointer; - } -} - -// Inbox star -.rating-star { - &.star-lg{ - label{ - margin-bottom: .5rem; - &::before{ - font-size: $font-size-xl; - } - } - } - label { - position: relative; - margin-bottom: 0; - cursor: pointer; - color: $light; - &:before { - content: "\f005"; - font-family: "Font Awesome 5 Free"; - font-weight: 900; - transition: all .2s ease; - font-size: 1.0625rem; - } - } - input { - position: absolute; - z-index: -1; - opacity: 0; - } - - >input:checked~label { - color: $warning; - } - - >label { - &:hover { - color: $warning; - } - &:hover~label { - color: $warning; - } - } -} - diff --git a/probe_ably/service/src/scss/volt/components/_datepicker.scss b/probe_ably/service/src/scss/volt/components/_datepicker.scss deleted file mode 100755 index 36126ce..0000000 --- a/probe_ably/service/src/scss/volt/components/_datepicker.scss +++ /dev/null @@ -1,27 +0,0 @@ -/** - * = Datepickers - */ - -.datepicker{ - table { - margin: 0; - -webkit-touch-callout: none; - user-select: none; - - td { - border-radius: 0 !important; - } - - th { - border-radius: 0; - font-weight: 500; - } - - td, th { - width: 36px !important; - height: 36px !important; - border: none; - text-align: center; - } - } -} \ No newline at end of file diff --git a/probe_ably/service/src/scss/volt/components/_dropdown.scss b/probe_ably/service/src/scss/volt/components/_dropdown.scss deleted file mode 100755 index bf02f65..0000000 --- a/probe_ably/service/src/scss/volt/components/_dropdown.scss +++ /dev/null @@ -1,100 +0,0 @@ -/** - * = Dropdowns - */ - -.dropdown-menu { - min-width: 12rem; - - .dropdown-header, - .dropdown-item { - padding: .5rem 1rem; - font-size: $dropdown-font-size; - } - - .dropdown-header { - color: $dropdown-header-color; - font-weight: $dropdown-header-font-weight; - } - - .dropdown-item { - color: $gray-700; - transition: $transition-base; - font-weight: $dropdown-item-font-weight; - - &a:hover{ - color: $dropdown-item-hover-color; - } - } - - .show & { - animation: show-dropdown .2s ease forwards; - } - - &.dropdown-menu-xs { - min-width: 120px; - max-width: 120px; - border: $border-width solid $light; - @include box-shadow($box-shadow-sm); - } - -} - -.dropdown-divider { - margin: 0.375rem 0; - border-color:$light; -} - -// this helps when not only the button should toggle a dropdown -[data-toggle]:hover { - cursor: pointer; -} - -// remove the caret from Bootstrap by default -.dropdown-toggle { - &:after, .dropright &:after, .dropleft &:before, .dropup &:after { - display: none; - } -} - -// Dropown sizes -.dropdown-menu-sm { - min-width: 100px; - border: $border-radius-lg; -} - -.dropdown-menu-md { - min-width: 180px; - border: $border-radius-lg; -} - -.dropdown-menu-lg { - min-width: 350px; - border-radius: $border-radius-lg; - - @include media-breakpoint-down(lg) { - min-width: 285px; - transform: translateX(15%); - } -} - -.dropdown-menu-xl { - min-width: 450px; - border-radius: $border-radius-lg; - - @include media-breakpoint-down(xl) { - min-width: 285px; - transform: translateX(15%); - } -} - -.user-dropdown.dropdown-menu.show { - right: 0 !important; - left: auto !important; -} - -@include media-breakpoint-down(lg) { - .notifications-dropdown[style] { - left: auto !important; - right: 0 !important; - } -} \ No newline at end of file diff --git a/probe_ably/service/src/scss/volt/components/_dropzone.scss b/probe_ably/service/src/scss/volt/components/_dropzone.scss deleted file mode 100644 index aa6723f..0000000 --- a/probe_ably/service/src/scss/volt/components/_dropzone.scss +++ /dev/null @@ -1,52 +0,0 @@ -.dropzone { - min-height: 150px; - border: 2px dashed $gray-600; - background: $white; - cursor: pointer; - &:hover{ - background-color: $soft; - } - .dz-message{ - .dz-button{ - font-size:$font-size-lg; - font-weight:$font-weight-bold; - } - } -} - -.dropzone-files { - display: flex; - flex-direction: row; - flex-wrap: wrap; - margin: 1.5rem 0 1.5rem 0; -} - -.dropzone-preview { - position: relative; - display: inline-block; - vertical-align: top; - min-height: 100px; -} - -.dropzone-image { - border-radius: 20px; - overflow: hidden; - width: 120px; - height: 120px; - position: relative; - display: block; - z-index: 10; -} - -.dropzone-filename { - white-space: normal; - padding: 0 0.4em; - margin: 5px 0 5px 0; - border-radius: 3px; -} - -.dropzone-filename:not(:hover) { - overflow: hidden; - white-space: nowrap; - text-overflow: ellipsis; -} \ No newline at end of file diff --git a/probe_ably/service/src/scss/volt/components/_forms.scss b/probe_ably/service/src/scss/volt/components/_forms.scss deleted file mode 100755 index de8cd94..0000000 --- a/probe_ably/service/src/scss/volt/components/_forms.scss +++ /dev/null @@ -1,83 +0,0 @@ -.form-control{ - box-shadow:none; - - @include media-breakpoint-up(lg) { - &.form-control-lg{ - padding: $inpu-lg-padding-y $input-padding-x; - } - } - -} - -.form-check-input { - &.round-check{ - &[type="checkbox"] { - @include border-radius($form-check-radio-border-radius); - } - } -} - -.search-bar { - .form-control { - width: 280px; - transition: width .2s ease-in-out; - - @include media-breakpoint-down(sm) { - width: 120px; - - &:focus { - width: 150px; - } - } - } -} - -.input-group { - .form-control:focus { - border-color: $input-border-color; - - & + .input-group-text { - border-color: $input-border-color; - } - } -} - -.focused { - - .form-control { - border-color: $input-focus-border-color; - background-color: $input-focus-bg; - } -} - -.form-switch { - padding-left: $form-switch-padding-start; - - .form-check-input { - height: 1.275em; - } -} - -.form-select { - .form-select-lg{ - padding: $form-select-padding-y ($form-select-padding-x + $form-select-indicator-padding) $form-select-padding-y $form-select-padding-x; - } -} - -//Add File Alternative Style - -.file-field input[type="file"] { - max-width: 230px; - position: absolute; - cursor: pointer; - filter: alpha(opacity=0); - opacity: 0; - padding-bottom: 30px; -} -.file-field span { - cursor: pointer; -} - -.datepicker-dropdown { - z-index: 9999; -} \ No newline at end of file diff --git a/probe_ably/service/src/scss/volt/components/_icon-box.scss b/probe_ably/service/src/scss/volt/components/_icon-box.scss deleted file mode 100755 index 8520326..0000000 --- a/probe_ably/service/src/scss/volt/components/_icon-box.scss +++ /dev/null @@ -1,206 +0,0 @@ -/** - * = Icon boxes - */ - -.icon-box { - padding : $icon-box-padding; - position: relative; - - .icon-box-body { - position: relative; - } - -} - -.icon { - text-align: center; - display : inline-flex; - @include align-items(center); - @include justify-content(center); - - span, - svg { - font-size: $icon-size; - } - - &.icon-small { - - span, - svg { - font-size: 0.675rem; - } - } - - &.icon-xs { - - span, - svg { - font-size: $icon-size-xs; - } - } - - &.icon-sm { - - span, - svg { - font-size: $icon-size-sm; - } - } - - &.icon-lg { - - span, - svg { - font-size: $icon-size-lg; - } - - svg { - height: 2rem; - } - } - - &.icon-xl { - span { - font-size: $icon-size-xl; - } - - svg { - height: 3.5rem; - } - } - - &.w-20 { - width: 20px; - } - - &.w-30 { - width: 30px; - } - - &.rounded-circle { - .icon-bordered { - border-radius: $circle-radius; - } - } - -} - -// Icons included in shapes -.icon-shape { - width : $icon-shape; - height : $icon-shape; - text-align : center; - display : inline-flex; - align-items : center; - justify-content: center; - - span, - svg { - font-size: $icon-size; - } - - &.icon-xs { - width : $icon-shape-xs; - height: $icon-shape-xs; - - span, - svg { - font-size: $icon-size-xs; - } - } - - &.icon-sm { - width : $icon-shape-sm; - height: $icon-shape-sm; - - span, - svg { - font-size: $icon-size-sm; - } - } - - &.icon-lg { - width : $icon-shape-lg; - height: $icon-shape-lg; - - span, - svg { - font-size: $icon-size-md; - } - } -} - -//Icon Parallax -.image-shape { - width : $icon-shape-img; - height : $icon-shape-img; - position: relative; - @include icon-image-background(center, cover, no-repeat); - - span { - font-size: $icon-size; - z-index : 1; - } - - &.icon-parallax { - @include icon-parallax-background(center, cover, fixed, no-repeat); - overflow : hidden; - background-repeat: no-repeat; - } -} - -.list-icon { - width: 45px; -} - - -.shape-xs { - width : 10px; - height: 10px; -} - -//Calendar Icon - -.icon-badge { - display : inline-block; - position : absolute; - top : -11px; - right : 6px; - height : 7px; - width : 7px; - background-color: $danger; -} - -.github-big-icon { - position: absolute; - right : 200px; - top : 165px; - - span { - font-size: 800px; - opacity : .1; - } - - svg { - font-size: 800px; - opacity : .1; - } -} - -.react-big-icon { - position: absolute; - opacity: .05; - - @include media-breakpoint-up(lg) { - right: -35%; - bottom: -30%; - font-size: 800px; - } - - @include media-breakpoint-up(xl) { - right: -15%; - bottom : -35%; - font-size: 800px; - } - -} \ No newline at end of file diff --git a/probe_ably/service/src/scss/volt/components/_images.scss b/probe_ably/service/src/scss/volt/components/_images.scss deleted file mode 100644 index a821471..0000000 --- a/probe_ably/service/src/scss/volt/components/_images.scss +++ /dev/null @@ -1,95 +0,0 @@ -/** - * = Images - */ -.image-xl { - height: 20rem; - img{ - height: 20rem; - } -} - -.image-lg { - height: 12rem; - img{ - height: 12rem; - } -} - -.image-md{ - height: 5.5rem; - img{ - height: 5.5rem; - } -} - -.image-sm { - height: 3rem; - img{ - height: 3rem; - } -} - -.image-xs { - height: 1.5rem; - img{ - height: 1.5rem; - } -} - -.image-small { - height: 1rem; - img{ - height: 1rem; - } -} - - - -.img-thumbnail { - border-width: $border-width-md; - box-shadow: none; -} - -.full-image{ - height:100%; -} - -.gallery-feed{ - img{ - width: 20%; - margin-right: .5rem; - margin-bottom: .5rem; - float: left; - } -} - -.language-flag{ - width: auto; - height: 1rem; - margin-right: 0.4rem; - position: relative; - top: -2px; -} - -@include media-breakpoint-up(sm){ - .effect-img-2 { - position: absolute; - right: 5rem; - top: 19%; - z-index: 2; - margin: 0; - } - - .effect-img-1, .effect-img-2 { - margin: 0 0 3rem; - width: 350px; - height: auto; - } -} - -@include media-breakpoint-down(md){ - .effect-img-2{ - right:.425rem; - top:0; - } -} diff --git a/probe_ably/service/src/scss/volt/components/_input-group.scss b/probe_ably/service/src/scss/volt/components/_input-group.scss deleted file mode 100755 index a1d9338..0000000 --- a/probe_ably/service/src/scss/volt/components/_input-group.scss +++ /dev/null @@ -1,51 +0,0 @@ -/** - * = Input groups - */ - -.input-group { - border-radius: $input-border-radius; - transition: $transition-base; - - .form-control { - box-shadow: none; - - &:not(:first-child) { - border-left: 0; - padding-left: 0; - } - &:not(:last-child) { - border-right: 0; - padding-right: 0; - } - &:focus { - box-shadow: none; - } - } -} - -.input-group-text { - font-size: $font-size-sm; - transition: $input-transition; - border-right:0; -} - - - -.input-group-prepend { - margin-right: -2px; -} - -// .focus class is applied dinamycally from theme.js - -.focused { - - .input-group-text { - color: $input-group-addon-focus-color; - background-color: $input-group-addon-focus-bg; - } - - .input-group-shadow{ - box-shadow:$shadow-input-focus; - } -} - diff --git a/probe_ably/service/src/scss/volt/components/_list-group.scss b/probe_ably/service/src/scss/volt/components/_list-group.scss deleted file mode 100755 index 6fff0c8..0000000 --- a/probe_ably/service/src/scss/volt/components/_list-group.scss +++ /dev/null @@ -1,96 +0,0 @@ -/** - * = List groups - */ - -// Space list items -.list-group-space { - .list-group-item { - margin-bottom: 1.5rem; - @include border-radius($list-group-border-radius); - } -} - - -// List group components -.list-group-item{ - border:0; - &.active { - z-index: 2; // Place active items above their siblings for proper border styling - color: $list-group-active-color; - background-color: $list-group-active-bg; - border-color: $list-group-active-border-color; - } - - i{ - width: 1rem; - } -} - -.list-group-img { - width: 3rem; - height: 3rem; - border-radius: 50%; - vertical-align: top; - margin: -.1rem 1.2rem 0 -.2rem; -} -.list-group-content { - -webkit-box-flex: 1; - -ms-flex: 1; - flex: 1; - min-width: 0; - - > p { - color: $gray-500; - line-height: 1.5; - margin: .2rem 0 0; - } -} -.list-group-heading { - font-size: $font-size-base; - color: $gray-800; - - > small { - float: right; - color: $gray-500; - font-weight: 500; - } -} - - -.list-group{ - &.simple-list{ - .list-group-item{ - background: transparent; - border: none; - padding: 0.375rem 0.125rem; - i{ - vertical-align: middle; - width: 35px; - display: inline-block; - } - } - } - -} - - -//News list for widgets - -.news-list{ - .row{ - > [class*='col']{ - padding: 0 $spacer/4; - } - } - - > li{ - &:not(:last-child){ - margin-bottom: .75rem; - } - } - - img{ - min-height: 100%; - object-fit: cover; - } -} diff --git a/probe_ably/service/src/scss/volt/components/_modal.scss b/probe_ably/service/src/scss/volt/components/_modal.scss deleted file mode 100755 index 49abbe2..0000000 --- a/probe_ably/service/src/scss/volt/components/_modal.scss +++ /dev/null @@ -1,31 +0,0 @@ -/** - * = Modals - */ - -.modal{ - &.static-example{ - position: relative; - display: block; - } -} - -.modal-content { - border: 0; - @if $enable-rounded { - border-radius: $modal-content-border-radius; - } @else { - border-radius: 0; - } -} - -.modal-fluid { - .modal-dialog { - margin-top: 0; - margin-bottom: 0; - } - .modal-content { - border-radius: 0; - } -} - - diff --git a/probe_ably/service/src/scss/volt/components/_nav.scss b/probe_ably/service/src/scss/volt/components/_nav.scss deleted file mode 100755 index b6476cd..0000000 --- a/probe_ably/service/src/scss/volt/components/_nav.scss +++ /dev/null @@ -1,226 +0,0 @@ -/** - * = Navs - */ - -.nav-link { - color: $nav-link-color; - - &:hover, - &.active { - color: $nav-link-hover-color; - img{ - opacity: inherit; - transition: $transition-base; - } - } - - span{ - position: relative; - } -} - -//Tabs - -.nav-tabs { - .nav-item { - margin-bottom:0; - } - - .nav-link { - border: 0; - padding:1rem 1rem; - - &.active{ - color: $white; - background-color: $primary; - } - } - - &.nav-dark{ - .nav-link{ - &.active{ - color: $white; - background-color: #12358a; - } - } - } - - &.nav-light{ - .nav-link{ - &.active{ - color: $black; - background-color: $light; - } - &:hover{ - color:$black; - } - } - } -} - -// Pills - -.nav-pills { - .nav-item:not(:last-child) { - padding-right: $nav-pills-space-x; - } - - .nav-link { - padding: $nav-pills-padding-y $nav-pills-padding-x; - transition: $transition-base; - box-shadow:$nav-link-shadow; - border:$nav-pills-border-width solid $nav-pills-border-color; - - &.avatar-link{ - border:0; - } - - &:hover { - color: $nav-pills-link-hover-color; - } - } - - .nav-link.active, - .show > .nav-link { - color: $nav-pills-link-active-color; - background-color: $nav-pills-link-active-bg; - border-color:$nav-pills-link-active-color; - } - - &.rounded{ - .nav-link{ - border-radius:30px; - } - } - - &.bordered-pill-md{ - .nav-link{ - border: $border-width-md solid $gray-200; - font-weight:$font-weight-bold; - } - } - - &.vertical-tab { - .nav-link{ - margin-bottom: .625rem; - } - .nav-item:not(:last-child) { - padding-right:0; - } - } - - @include media-breakpoint-down(xs) { - .nav-item { - margin-bottom: $spacer; - } - } -} - -@include media-breakpoint-down(sm) { - .nav-pills:not(.nav-pills-circle) { - .nav-item { - padding-right: 0; - } - } -} - - -// Navs circle - -.nav-pill-circle { - .nav-link { - @include display-flex(); - text-align: center; - height: 80px; - width: 80px; - padding: 0; - box-shadow: $nav-link-shadow; - border-radius: $nav-pills-border-circle; - align-items: center; - justify-content: center; - - &.avatar-link{ - box-shadow: none; - } - } - - &.vertical-tab { - .nav-link-icon { - i, svg { - font-size: 1.5rem; - } - } - .nav-item:not(:last-child) { - padding-right:0; - } - } - - .nav-link-icon { - i, svg { - font-size: 1.25rem; - margin:0; - display: block; - } - } -} - -// Navs square - -.nav-pill-square { - .nav-link { - text-align: center; - min-width: 80px; - box-shadow: $nav-link-shadow; - @include display-flex(); - align-items: center; - justify-content: center; - } - - &.vertical-tab{ - .nav-link{ - margin-bottom: .625rem; - min-width: 100px; - } - .nav-item:not(:last-child) { - padding-right:0; - } - } - - .nav-link-icon { - i, svg { - font-size: 1.25rem; - margin:0; - display: block; - line-height: 50px; - } - } -} - -// Nav wrapper -.nav-wrapper { - padding: 1rem 0; - @include border-top-radius($card-border-radius); - - + .card { - @include border-top-radius(0); - @include border-bottom-radius($card-border-radius); - } -} - -// Tabbable tabs -// -// Hide tabbable panes to start, show them when `.active` - -.tab-content { - > .tab-pane { - display: none; - pre{ - padding:0; - margin:0; - } - } - - > .active { - display: block; - } -} diff --git a/probe_ably/service/src/scss/volt/components/_pagination.scss b/probe_ably/service/src/scss/volt/components/_pagination.scss deleted file mode 100755 index d5b4440..0000000 --- a/probe_ably/service/src/scss/volt/components/_pagination.scss +++ /dev/null @@ -1,16 +0,0 @@ -/** - * = Paginations - */ - .circle-pagination{ - .page-link, - span{ - @include display-flex(); - align-items: center; - justify-content: center; - width: 34px; - height: 34px; - padding: 0; - @include border-radius($circle-radius); - } -} - diff --git a/probe_ably/service/src/scss/volt/components/_popover.scss b/probe_ably/service/src/scss/volt/components/_popover.scss deleted file mode 100755 index 2cc316d..0000000 --- a/probe_ably/service/src/scss/volt/components/_popover.scss +++ /dev/null @@ -1,19 +0,0 @@ -/** - * = Popovers - */ - -.popover { - border: 0; -} - - -.popover-header { - font-weight: $font-weight-bold; -} - -// Alternative colors -@each $color, $value in $theme-colors { - .popover-#{$color} { - @include popover-variant($value); - } -} \ No newline at end of file diff --git a/probe_ably/service/src/scss/volt/components/_preloader.scss b/probe_ably/service/src/scss/volt/components/_preloader.scss deleted file mode 100644 index 00dff2d..0000000 --- a/probe_ably/service/src/scss/volt/components/_preloader.scss +++ /dev/null @@ -1,31 +0,0 @@ -.preloader { - display: flex; - align-items: center; - height: 100vh; - left: 0; - position: fixed; - top: 0; - width: 100%; - z-index: 9999; - @include transition(height .3s); - - .loader-element { - - @include transition(spin .3s linear infinite); - -webkit-animation:spin 3s linear infinite; - -moz-animation:spin 3s linear infinite; - animation:spin 3s linear infinite; - } - - &.show { - height: 0; - - .loader-element { - display: none !important; - } - } -} - -@-moz-keyframes spin { 100% { -moz-transform: rotate(360deg); } } -@-webkit-keyframes spin { 100% { -webkit-transform: rotate(360deg); } } -@keyframes spin { 100% { -webkit-transform: rotate(360deg); transform:rotate(360deg); } } diff --git a/probe_ably/service/src/scss/volt/components/_pricing-cards.scss b/probe_ably/service/src/scss/volt/components/_pricing-cards.scss deleted file mode 100755 index 5883bad..0000000 --- a/probe_ably/service/src/scss/volt/components/_pricing-cards.scss +++ /dev/null @@ -1,42 +0,0 @@ -/** - * = Pricing cards - */ - -.pricing-card{ - - .card-header { - background: transparent; - z-index: 2; - } - - .card-body{ - z-index: 2; - } - - .pricing-value{ - width: 150px; - height: 150px; - border-radius: 50%; - border-width: $border-width-xl; - border-style: double; - margin: 0 auto; - - span { - line-height: 140px; - } - } - - .list-group-item{ - background: transparent; - border: none; - padding: 0.375rem 0.125rem; - i{ - display: inline-block; - vertical-align: middle; - width: 35px; - } - } - @include media-breakpoint-down(md){ - margin-top: 1rem; - } -} \ No newline at end of file diff --git a/probe_ably/service/src/scss/volt/components/_progress.scss b/probe_ably/service/src/scss/volt/components/_progress.scss deleted file mode 100755 index f51661e..0000000 --- a/probe_ably/service/src/scss/volt/components/_progress.scss +++ /dev/null @@ -1,117 +0,0 @@ -/** - * = Progress bars - */ - -.progress-wrapper { - position: relative; -} - -.progress-bar { - box-shadow: none; - border-radius: 0; - height: auto; -} - -.progress { - height: 4px; - margin-bottom: $spacer; - overflow: hidden; - border-radius: $border-radius-sm; - background-color: $progress-bg; - font-size: $font-size-xs; - font-weight: $font-weight-bold; - @include box-shadow(inset 0 1px 2px rgba(0, 0, 0, .1)) -} - -.progress-xl { - height: $progress-xl-size; -} -.progress-lg { - height: $progress-lg-size; -} -.progress-sm { - height: $progress-sm-size; -} - -.progress-info{ - @include display-flex(); - @include align-items(center); - @include justify-content(space-between); - margin-bottom: .5rem; - - .progress-label { - span { - display: inline-block; - color: $primary; - font-size: $font-size-sm; - font-weight: $font-weight-bold; - } - } - - .progress-percentage { - text-align: right; - span { - display: inline-block; - color: $gray-700; - font-size: $font-size-xs; - font-weight: $font-weight-bold; - } - } -} - -.info-xl{ - .progress-label, - .progress-percentage { - span { - font-size: $font-size-sm; - } - } - - .progress-percentage { - text-align: right; - } - -} - -.progress-tooltip { - background: $primary; - color: $white; - font-weight: $font-weight-bold; - padding: .25rem .375rem; - line-height: 1; - font-size: $font-size-xs; - position: relative; - border-radius: $border-radius-sm; - - &:after { - content: " "; - position: absolute; - top: 100%; - left: 10px; - border: solid transparent; - height: 0; - width: 0; - pointer-events: none; - border-top-color: $gray; - border-width: 6px; - } -} - -@-webkit-keyframes animate-positive{ - 0% { width: 0%; } -} -@keyframes animate-positive{ - 0% { width: 0%; } -} - -//Tooltip arrow color -@each $color, -$value in $theme-colors { - .progress-info{ - .bg-#{$color} { - &::after{ - border-top-color: $value; - } - } - } -} diff --git a/probe_ably/service/src/scss/volt/components/_scrollbar.scss b/probe_ably/service/src/scss/volt/components/_scrollbar.scss deleted file mode 100644 index 7d2ec71..0000000 --- a/probe_ably/service/src/scss/volt/components/_scrollbar.scss +++ /dev/null @@ -1,227 +0,0 @@ -[data-simplebar] { - position: fixed; - flex-direction: column; - flex-wrap: wrap; - justify-content: flex-start; - align-content: flex-start; - align-items: flex-start; -} - -.simplebar-wrapper { - overflow: hidden; - width: inherit; - height: inherit; - max-width: inherit; - max-height: inherit; -} - -.simplebar-mask { - direction: inherit; - position: absolute; - overflow: hidden; - padding: 0; - margin: 0; - left: 0; - top: 0; - bottom: 0; - right: 0; - width: auto !important; - height: auto !important; - z-index: 0; -} - -.simplebar-offset { - direction: inherit !important; - box-sizing: inherit !important; - resize: none !important; - position: absolute; - top: 0; - left: 0; - bottom: 0; - right: 0; - padding: 0; - margin: 0; - -webkit-overflow-scrolling: touch; -} - -.simplebar-content-wrapper { - direction: inherit; - box-sizing: border-box !important; - position: relative; - display: block; - height: 100%; /* Required for horizontal native scrollbar to not appear if parent is taller than natural height */ - width: auto; - max-width: 100%; /* Not required for horizontal scroll to trigger */ - max-height: 100%; /* Needed for vertical scroll to trigger */ - scrollbar-width: none; - -ms-overflow-style: none; -} - -.simplebar-content-wrapper::-webkit-scrollbar, -.simplebar-hide-scrollbar::-webkit-scrollbar { - width: 0; - height: 0; -} - -.simplebar-content:before, -.simplebar-content:after { - content: ' '; - display: table; -} - -.simplebar-placeholder { - max-height: 100%; - max-width: 100%; - width: 100%; - pointer-events: none; -} - -.simplebar-height-auto-observer-wrapper { - box-sizing: inherit !important; - height: 100%; - width: 100%; - max-width: 1px; - position: relative; - float: left; - max-height: 1px; - overflow: hidden; - z-index: -1; - padding: 0; - margin: 0; - pointer-events: none; - flex-grow: inherit; - flex-shrink: 0; - flex-basis: 0; -} - -.simplebar-height-auto-observer { - box-sizing: inherit; - display: block; - opacity: 0; - position: absolute; - top: 0; - left: 0; - height: 1000%; - width: 1000%; - min-height: 1px; - min-width: 1px; - overflow: hidden; - pointer-events: none; - z-index: -1; -} - -.simplebar-track { - z-index: 1; - position: absolute; - right: 0; - bottom: 0; - pointer-events: none; - overflow: hidden; -} - -[data-simplebar].simplebar-dragging .simplebar-content { - pointer-events: none; - user-select: none; - -webkit-user-select: none; -} - -[data-simplebar].simplebar-dragging .simplebar-track { - pointer-events: all; -} - -.simplebar-scrollbar { - position: absolute; - left: 0; - right: 0; - min-height: 10px; -} - -.simplebar-scrollbar:before { - position: absolute; - content: ''; - background: black; - border-radius: 7px; - left: 2px; - right: 2px; - opacity: 0; - transition: opacity 0.2s 0.5s linear; -} - -.simplebar-scrolling .simplebar-scrollbar:before, -.simplebar-hover .simplebar-scrollbar:before, -.simplebar-mouse-entered .simplebar-scrollbar:before { - opacity: 0.5; - transition-delay: 0s; - transition-duration: 0s; -} - -.simplebar-scrollbar.simplebar-visible:before { - /* When hovered, remove all transitions from drag handle */ - opacity: 0.5; - transition-delay: 0s; - transition-duration: 0s; -} - -.simplebar-track.simplebar-vertical { - top: 0; - width: 11px; -} - -.simplebar-scrollbar:before { - top: 2px; - bottom: 2px; - left: 2px; - right: 2px; -} - -.simplebar-track.simplebar-horizontal { - left: 0; - height: 11px; -} - -.simplebar-track.simplebar-horizontal .simplebar-scrollbar { - right: auto; - left: 0; - top: 0; - bottom: 0; - min-height: 0; - min-width: 10px; - width: auto; -} - -/* Rtl support */ -[data-simplebar-direction='rtl'] .simplebar-track.simplebar-vertical { - right: auto; - left: 0; -} - -.simplebar-dummy-scrollbar-size { - direction: rtl; - position: fixed; - opacity: 0; - visibility: hidden; - height: 500px; - width: 500px; - overflow-y: hidden; - overflow-x: scroll; - -ms-overflow-style: scrollbar !important; -} - -.simplebar-dummy-scrollbar-size > div { - width: 200%; - height: 200%; - margin: 10px 0; -} - -.simplebar-hide-scrollbar { - position: fixed; - left: 0; - visibility: hidden; - overflow-y: scroll; - scrollbar-width: none; - -ms-overflow-style: none; -} - -.simplebar-scrollbar::before { - background-color: darken($dark, 10%); -} diff --git a/probe_ably/service/src/scss/volt/components/_shapes.scss b/probe_ably/service/src/scss/volt/components/_shapes.scss deleted file mode 100755 index 64e46d6..0000000 --- a/probe_ably/service/src/scss/volt/components/_shapes.scss +++ /dev/null @@ -1,18 +0,0 @@ -/** - * = Shapes - */ - -.avatar-sm { - width: $avatar-sm-y; - height: $avatar-sm-x; -} - -.avatar-md { - width: $avatar-md-y; - height: $avatar-md-x; -} - -.avatar-lg { - width: $avatar-lg-y; - height: $avatar-lg-x; -} diff --git a/probe_ably/service/src/scss/volt/components/_tables.scss b/probe_ably/service/src/scss/volt/components/_tables.scss deleted file mode 100644 index 226f778..0000000 --- a/probe_ably/service/src/scss/volt/components/_tables.scss +++ /dev/null @@ -1,434 +0,0 @@ -// General styles - -.table { - - thead th { - padding-top : $table-head-spacer-y; - padding-bottom: $table-head-spacer-y; - font-size : $table-head-font-size; - text-transform: $table-head-text-transform; - font-weight : $font-weight-bolder; - border-top : 0; - } - - &.comparison-table { - - thead th { - font-size: 1.25rem; - color : $dark; - } - - td { - font-size: $font-size-base; - } - - } - - th { - font-weight: $font-weight-bold; - padding : 1rem; - } - - td { - .progress { - height: 3px; - width : 120px; - margin: 0; - } - } - - td, - th { - font-size : $table-body-font-size; - white-space: nowrap; - } - - // User Table - - &.user-table { - thead th { - border-top: 0; - } - } - - // Vetical align table content - - &.align-items-center { - - td, - th { - vertical-align: middle; - } - } - - - // Styles for dark table - - .thead-dark { - th { - background-color: $dark; - color : $white; - - a { - color: $dark; - } - } - } - - - // Styles for light table - - .thead-light { - th { - background-color: $soft; - color : $dark; - - a { - color: $dark; - } - } - } -} - - -// Add transition for hover state - -.table-hover { - tr { - @include transition($transition-base); - } -} - - -// Flush tables - -.table-flush { - - td, - th { - border-left : 0; - border-right: 0; - } - - tbody { - tr { - &:first-child { - - td, - th { - border-top: 0; - } - } - - &:last-child { - - td, - th { - border-bottom: 0; - } - } - } - } -} - - -// Tables inside cards - -.card { - .table { - margin-bottom: 0; - - td, - th { - padding-left : $card-spacer-x; - padding-right: $card-spacer-x; - } - } -} - -.table { - [data-sort] { - cursor: pointer; - } - - .custom-toggle { - display: block; - } - - .thead-dark { - [data-sort] { - &::after { - content : str-replace(url("data:image/svg+xml;utf8,"), "#", "%23"); - margin-left: .25rem; - } - } - } - - .thead-light { - [data-sort] { - &::after { - content : str-replace(url("data:image/svg+xml;utf8,"), "#", "%23"); - margin-left: .25rem; - } - } - } -} - -.dataTables_wrapper { - - .dataTables_info { - padding-left: 1.5rem; - } - - .dataTables_paginate { - padding-right: 1.5rem; - } - - .dataTables_length { - label { - padding-left: 1.5rem; - } - } - - .dataTables_filter { - padding-right: 1.5rem; - } -} - -.dataTable-top, -.dataTable-bottom { - display : flex; - width : 100%; - justify-content: space-between; - - @include media-breakpoint-down(md) { - flex-direction: column; - - .dataTable-info { - margin-bottom: 1rem; - } - } -} - -.dataTable-top { - padding: 0 1.5rem 1rem 1.5rem; -} - -.dataTable-bottom { - padding: 1.5rem 1.5rem 0 1.5rem; -} - -.dataTable-pagination { - display: flex; - @include list-unstyled(); - - a { - padding: $pagination-padding-y $pagination-padding-x; - @include font-size(null); - } - - li { - @if $pagination-margin-start==(-$pagination-border-width) { - &:first-child { - a { - @include border-start-radius($pagination-border-radius); - } - } - - &:last-child { - a { - @include border-end-radius($pagination-border-radius); - } - } - } - - @else { - - //Add border-radius to all pageLinks in case they have left margin - a { - @include border-radius($pagination-border-radius); - } - } - } - - >li { - &:not(:first-child) a { - margin-left: $pagination-margin-start; - } - - &.active a { - z-index: 3; - color : $pagination-active-color; - @include gradient-bg($pagination-active-bg); - border-color: $pagination-active-border-color; - } - - &.disabled a { - color : $pagination-disabled-color; - pointer-events : none; - background-color: $pagination-disabled-bg; - border-color : $pagination-disabled-border-color; - } - - a { - position : relative; - display : block; - color : $pagination-color; - text-decoration : if($link-decoration==none, null, none); - background-color: $pagination-bg; - border : $pagination-border-width solid $pagination-border-color; - - &:hover { - z-index : 2; - color : $pagination-hover-color; - text-decoration : if($link-hover-decoration==underline, none, null); - background-color: $pagination-hover-bg; - border-color : $pagination-hover-border-color; - } - - &:focus { - z-index : 3; - outline : $pagination-focus-outline; - box-shadow: $pagination-focus-box-shadow; - } - } - } -} - -.dataTable-selector { - display : inline-block; - width : auto; - height : $form-select-height; - padding : $form-select-padding-y ($form-select-padding-x + $form-select-indicator-padding) $form-select-padding-y $form-select-padding-x; - font-family: $form-select-font-family; - @include font-size($form-select-font-size); - font-weight : $form-select-font-weight; - line-height : $form-select-line-height; - color : $form-select-color; - vertical-align : middle; - background-color : $form-select-bg; - background-image : escape-svg($form-select-indicator); - background-repeat : no-repeat; - background-position: $form-select-bg-position; - background-size : $form-select-bg-size; - border : $form-select-border-width solid $form-select-border-color; - @include border-radius($form-select-border-radius, 0); - @include box-shadow($form-select-box-shadow); - appearance: none; - - &:focus { - border-color: $form-select-focus-border-color; - outline : 0; - - @if $enable-shadows { - @include box-shadow($form-select-box-shadow, $form-select-focus-box-shadow); - } - - @else { - // Avoid using mixin so we can pass custom focus shadow properly - box-shadow: $form-select-focus-box-shadow; - } - - &::-ms-value { - // For visual consistency with other platforms/browsers, - // suppress the default white text on blue background highlight given to - // the selected option text when the (still closed) s in some browsers, due to the limited stylability of `