squirrels 0.3.3__py3-none-any.whl → 0.4.1__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of squirrels might be problematic. Click here for more details.
- squirrels/__init__.py +7 -3
- squirrels/_api_response_models.py +96 -72
- squirrels/_api_server.py +375 -201
- squirrels/_authenticator.py +23 -22
- squirrels/_command_line.py +70 -46
- squirrels/_connection_set.py +23 -25
- squirrels/_constants.py +29 -78
- squirrels/_dashboards_io.py +61 -0
- squirrels/_environcfg.py +53 -50
- squirrels/_initializer.py +184 -141
- squirrels/_manifest.py +168 -195
- squirrels/_models.py +159 -292
- squirrels/_package_loader.py +7 -8
- squirrels/_parameter_configs.py +173 -141
- squirrels/_parameter_sets.py +49 -38
- squirrels/_py_module.py +7 -7
- squirrels/_seeds.py +13 -12
- squirrels/_utils.py +114 -54
- squirrels/_version.py +1 -1
- squirrels/arguments/init_time_args.py +16 -10
- squirrels/arguments/run_time_args.py +89 -24
- squirrels/dashboards.py +82 -0
- squirrels/data_sources.py +212 -232
- squirrels/dateutils.py +29 -26
- squirrels/package_data/assets/index.css +1 -1
- squirrels/package_data/assets/index.js +27 -18
- squirrels/package_data/base_project/.gitignore +2 -2
- squirrels/package_data/base_project/connections.yml +1 -1
- squirrels/package_data/base_project/dashboards/dashboard_example.py +32 -0
- squirrels/package_data/base_project/dashboards.yml +10 -0
- squirrels/package_data/base_project/docker/.dockerignore +9 -4
- squirrels/package_data/base_project/docker/Dockerfile +7 -6
- squirrels/package_data/base_project/docker/compose.yml +1 -1
- squirrels/package_data/base_project/env.yml +2 -2
- squirrels/package_data/base_project/models/dbviews/{database_view1.py → dbview_example.py} +2 -1
- squirrels/package_data/base_project/models/dbviews/{database_view1.sql → dbview_example.sql} +3 -2
- squirrels/package_data/base_project/models/federates/{dataset_example.py → federate_example.py} +6 -6
- squirrels/package_data/base_project/models/federates/{dataset_example.sql → federate_example.sql} +1 -1
- squirrels/package_data/base_project/parameters.yml +6 -4
- squirrels/package_data/base_project/pyconfigs/auth.py +1 -1
- squirrels/package_data/base_project/pyconfigs/connections.py +1 -1
- squirrels/package_data/base_project/pyconfigs/context.py +38 -10
- squirrels/package_data/base_project/pyconfigs/parameters.py +15 -7
- squirrels/package_data/base_project/squirrels.yml.j2 +14 -7
- squirrels/package_data/templates/index.html +3 -3
- squirrels/parameter_options.py +103 -106
- squirrels/parameters.py +347 -195
- squirrels/project.py +378 -0
- squirrels/user_base.py +14 -6
- {squirrels-0.3.3.dist-info → squirrels-0.4.1.dist-info}/METADATA +9 -21
- squirrels-0.4.1.dist-info/RECORD +60 -0
- squirrels/_timer.py +0 -23
- squirrels-0.3.3.dist-info/RECORD +0 -56
- {squirrels-0.3.3.dist-info → squirrels-0.4.1.dist-info}/LICENSE +0 -0
- {squirrels-0.3.3.dist-info → squirrels-0.4.1.dist-info}/WHEEL +0 -0
- {squirrels-0.3.3.dist-info → squirrels-0.4.1.dist-info}/entry_points.txt +0 -0
squirrels/dateutils.py
CHANGED
|
@@ -5,7 +5,7 @@ from dateutil.relativedelta import relativedelta
|
|
|
5
5
|
from abc import ABCMeta, abstractmethod
|
|
6
6
|
from enum import Enum
|
|
7
7
|
|
|
8
|
-
from . import _utils as
|
|
8
|
+
from . import _utils as _u
|
|
9
9
|
|
|
10
10
|
|
|
11
11
|
class DayOfWeek(Enum):
|
|
@@ -42,7 +42,7 @@ class DateModifier(metaclass=ABCMeta):
|
|
|
42
42
|
"""
|
|
43
43
|
Method to be overwritten, modifies the input date
|
|
44
44
|
|
|
45
|
-
|
|
45
|
+
Arguments:
|
|
46
46
|
date: The input date to modify.
|
|
47
47
|
|
|
48
48
|
Returns:
|
|
@@ -62,7 +62,7 @@ class _DayIdxOfCalendarUnit(DateModifier):
|
|
|
62
62
|
super().__init__()
|
|
63
63
|
self.idx = idx
|
|
64
64
|
if self.idx == 0:
|
|
65
|
-
raise
|
|
65
|
+
raise _u.ConfigurationError(f"For constructors of class names that start with DayIdxOf_, idx cannot be zero")
|
|
66
66
|
self.incr = self.idx - 1 if self.idx > 0 else self.idx
|
|
67
67
|
|
|
68
68
|
|
|
@@ -84,7 +84,7 @@ class DayIdxOfMonthsCycle(_DayIdxOfCalendarUnit):
|
|
|
84
84
|
self._num_months_in_cycle = num_months_in_cycle
|
|
85
85
|
self._first_month_of_cycle = first_month_of_cycle
|
|
86
86
|
if 12 % self._num_months_in_cycle != 0:
|
|
87
|
-
raise
|
|
87
|
+
raise _u.ConfigurationError(f"Value X must fit evenly in 12")
|
|
88
88
|
self.first_month_of_first_cycle = (self._first_month_of_cycle.value - 1) % self._num_months_in_cycle + 1
|
|
89
89
|
|
|
90
90
|
def modify(self, date: Date) -> Date:
|
|
@@ -261,20 +261,20 @@ class DateModPipeline(DateModifier):
|
|
|
261
261
|
Create a new sequence of DateModifier by joining the date modifiers in this class
|
|
262
262
|
with the input date_modifiers
|
|
263
263
|
|
|
264
|
-
|
|
264
|
+
Arguments:
|
|
265
265
|
date_modifiers: The new date modifier sequence to join
|
|
266
266
|
|
|
267
267
|
Returns:
|
|
268
268
|
A new sequence of DateModifier
|
|
269
269
|
"""
|
|
270
|
-
joined_modifiers = self._date_modifiers + tuple(date_modifiers)
|
|
270
|
+
joined_modifiers = tuple(self._date_modifiers) + tuple(date_modifiers)
|
|
271
271
|
return joined_modifiers
|
|
272
272
|
|
|
273
273
|
def with_more_modifiers(self, date_modifiers: Sequence[DateModifier]):
|
|
274
274
|
"""
|
|
275
275
|
Create a new DateModPipeline with more date modifiers
|
|
276
276
|
|
|
277
|
-
|
|
277
|
+
Arguments:
|
|
278
278
|
date_modifiers: The additional date modifiers to add
|
|
279
279
|
|
|
280
280
|
Returns:
|
|
@@ -283,7 +283,7 @@ class DateModPipeline(DateModifier):
|
|
|
283
283
|
joined_modifiers = self.get_joined_modifiers(date_modifiers)
|
|
284
284
|
return DateModPipeline(joined_modifiers)
|
|
285
285
|
|
|
286
|
-
def get_date_list(self, start_date: Date, step:
|
|
286
|
+
def get_date_list(self, start_date: Date, step: DateModifier) -> Sequence[Date]:
|
|
287
287
|
"""
|
|
288
288
|
This method modifies the input date, and returns all dates from the input date to the modified date,
|
|
289
289
|
incremented by a DateModifier step.
|
|
@@ -293,17 +293,18 @@ class DateModPipeline(DateModifier):
|
|
|
293
293
|
then it'll return a decreasing list of dates starting from the start date. Otherwise, an empty list
|
|
294
294
|
is returned.
|
|
295
295
|
|
|
296
|
-
|
|
296
|
+
Arguments:
|
|
297
297
|
start_date: The input date (it's the first date in the output list if step moves towards end date)
|
|
298
298
|
step: The increment to take (specified as an offset DateModifier). Offset cannot be zero
|
|
299
299
|
|
|
300
300
|
Returns:
|
|
301
301
|
A list of datetime objects
|
|
302
302
|
"""
|
|
303
|
+
assert isinstance(step, _OffsetUnits)
|
|
303
304
|
if step.offset == 0:
|
|
304
|
-
raise
|
|
305
|
+
raise _u.ConfigurationError(f"The length of 'step' must not be zero")
|
|
305
306
|
|
|
306
|
-
output = []
|
|
307
|
+
output: Sequence[Date] = []
|
|
307
308
|
end_date = self.modify(start_date)
|
|
308
309
|
curr_date = start_date
|
|
309
310
|
is_not_done_positive_step = lambda: curr_date <= end_date and step.offset > 0
|
|
@@ -346,7 +347,7 @@ class DateStringModifier(_DateRepresentationModifier):
|
|
|
346
347
|
"""
|
|
347
348
|
Create a new DateStringModifier with more date modifiers
|
|
348
349
|
|
|
349
|
-
|
|
350
|
+
Arguments:
|
|
350
351
|
date_modifiers: The additional date modifiers to add
|
|
351
352
|
|
|
352
353
|
Returns:
|
|
@@ -355,15 +356,15 @@ class DateStringModifier(_DateRepresentationModifier):
|
|
|
355
356
|
joined_modifiers = self.date_modifier.get_joined_modifiers(date_modifiers)
|
|
356
357
|
return DateStringModifier(joined_modifiers, self._date_format)
|
|
357
358
|
|
|
358
|
-
def _get_input_date_obj(self, date_str: str, input_format: str = None) -> Date:
|
|
359
|
+
def _get_input_date_obj(self, date_str: str, input_format: str | None = None) -> Date:
|
|
359
360
|
input_format = self._date_format if input_format is None else input_format
|
|
360
361
|
return datetime.strptime(date_str, input_format).date()
|
|
361
362
|
|
|
362
|
-
def modify(self, date_str: str, input_format: str = None) -> str:
|
|
363
|
+
def modify(self, date_str: str, input_format: str | None = None) -> str:
|
|
363
364
|
"""
|
|
364
365
|
Modifies the input date string with the date modifiers
|
|
365
366
|
|
|
366
|
-
|
|
367
|
+
Arguments:
|
|
367
368
|
date_str: The input date string
|
|
368
369
|
input_format: The input date format. Defaults to the same as output date format
|
|
369
370
|
|
|
@@ -373,7 +374,7 @@ class DateStringModifier(_DateRepresentationModifier):
|
|
|
373
374
|
date_obj = self._get_input_date_obj(date_str, input_format)
|
|
374
375
|
return self.date_modifier.modify(date_obj).strftime(self._date_format)
|
|
375
376
|
|
|
376
|
-
def get_date_list(self, start_date_str: str, step: DateModifier, input_format: str = None) -> Sequence[str]:
|
|
377
|
+
def get_date_list(self, start_date_str: str, step: DateModifier, input_format: str | None = None) -> Sequence[str]:
|
|
377
378
|
"""
|
|
378
379
|
This method modifies the input date string, and returns all dates as strings from the input date
|
|
379
380
|
to the modified date, incremented by a DateModifier step.
|
|
@@ -383,7 +384,7 @@ class DateStringModifier(_DateRepresentationModifier):
|
|
|
383
384
|
then it'll return a decreasing list of dates starting from the start date. Otherwise, an empty list
|
|
384
385
|
is returned.
|
|
385
386
|
|
|
386
|
-
|
|
387
|
+
Arguments:
|
|
387
388
|
start_date_str: The input date string (it's the first date in the output list if step moves towards end date)
|
|
388
389
|
step: The increment to take (specified as an offset DateModifier). Offset cannot be zero
|
|
389
390
|
input_format: The input date format. Defaults to the same as output date format
|
|
@@ -391,6 +392,7 @@ class DateStringModifier(_DateRepresentationModifier):
|
|
|
391
392
|
Returns:
|
|
392
393
|
A list of date strings
|
|
393
394
|
"""
|
|
395
|
+
assert isinstance(step, _OffsetUnits)
|
|
394
396
|
curr_date = self._get_input_date_obj(start_date_str, input_format)
|
|
395
397
|
output = self.date_modifier.get_date_list(curr_date, step)
|
|
396
398
|
return [x.strftime(self._date_format) for x in output]
|
|
@@ -414,7 +416,7 @@ class TimestampModifier(_DateRepresentationModifier):
|
|
|
414
416
|
"""
|
|
415
417
|
Create a new TimestampModifier with more date modifiers
|
|
416
418
|
|
|
417
|
-
|
|
419
|
+
Arguments:
|
|
418
420
|
date_modifiers: The additional date modifiers to add
|
|
419
421
|
|
|
420
422
|
Returns:
|
|
@@ -427,15 +429,16 @@ class TimestampModifier(_DateRepresentationModifier):
|
|
|
427
429
|
"""
|
|
428
430
|
Modifies the input timestamp with the date modifiers
|
|
429
431
|
|
|
430
|
-
|
|
432
|
+
Arguments:
|
|
431
433
|
timestamp: The input timestamp as float
|
|
432
434
|
|
|
433
435
|
Returns:
|
|
434
436
|
The resulting timestamp
|
|
435
437
|
"""
|
|
436
|
-
date_obj = datetime.fromtimestamp(timestamp)
|
|
437
|
-
modified_date
|
|
438
|
-
|
|
438
|
+
date_obj = datetime.fromtimestamp(timestamp).date()
|
|
439
|
+
modified_date = self.date_modifier.modify(date_obj)
|
|
440
|
+
modified_datetime = datetime.combine(modified_date, datetime.min.time())
|
|
441
|
+
return modified_datetime.timestamp()
|
|
439
442
|
|
|
440
443
|
def get_date_list(self, start_timestamp: float, step: DateModifier) -> Sequence[float]:
|
|
441
444
|
"""
|
|
@@ -447,13 +450,13 @@ class TimestampModifier(_DateRepresentationModifier):
|
|
|
447
450
|
then it'll return a decreasing list of dates starting from the start date. Otherwise, an empty list
|
|
448
451
|
is returned.
|
|
449
452
|
|
|
450
|
-
|
|
453
|
+
Arguments:
|
|
451
454
|
start_timestamp: The input timestamp as float (it's the first date in the output list if step moves towards end date)
|
|
452
455
|
step: The increment to take (specified as an offset DateModifier). Offset cannot be zero
|
|
453
456
|
|
|
454
457
|
Returns:
|
|
455
458
|
A list of timestamp as floats
|
|
456
459
|
"""
|
|
457
|
-
curr_date = datetime.fromtimestamp(start_timestamp)
|
|
458
|
-
output
|
|
459
|
-
return [x.timestamp() for x in output]
|
|
460
|
+
curr_date = datetime.fromtimestamp(start_timestamp).date()
|
|
461
|
+
output = self.date_modifier.get_date_list(curr_date, step)
|
|
462
|
+
return [datetime.combine(x, datetime.min.time()).timestamp() for x in output]
|
|
@@ -1 +1 @@
|
|
|
1
|
-
.padded{padding:8px 20px}.widget{width:100%;box-sizing:border-box;border:1px solid #ccc;border-radius:4px}.widget-label{position:relative;padding-bottom:10px}.widget-container{display:flex;flex-direction:column;gap:20px}input[type=submit]{padding:12px 20px;cursor:pointer}button{cursor:pointer;border-radius:5px;padding:10px}.white-button{background-color:#fff;color:#00f}.white-button:hover{background-color:#d4dae1}.blue-button{background-color:#4285f4;color:#fff;border:none}.blue-button:hover{background-color:#3076c5}.horizontal-container{display:flex}.auth-container{display:flex;align-items:center;gap:10px}#main-container{height:97vh;width:99vw}#left-container{width:250px;min-width:250px;margin-right:20px;padding:10px;overflow-y:auto}#right-container{height:97vh;width:calc(99vw - 300px)}#header-container{background-color:#d4dae1;color:#000;display:flex;align-items:center;justify-content:space-between;padding:10px}#table-container{padding:10px 20px;height:calc(97vh - 70px);overflow-x:auto;overflow-y:auto}.modal-background{position:fixed;z-index:1;left:0;top:0;width:100%;height:100%;overflow:auto;background-color:#0006;padding-top:60px}.modal-content{background-color:#fefefe;padding:30px;margin:5px auto auto;border:2px solid black}#loading-indicator{justify-content:center;align-items:center;text-align:center;font-weight:700;position:absolute;top:0;left:0;width:100%;height:100%;background-color:#ffffff80}.spinner{margin:20px auto;width:40px;height:40px;position:relative;border-radius:50%;border:3px solid transparent;border-top-color:#3498db;animation:spin 1s linear infinite}@keyframes spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}table{border-collapse:collapse;width:100%}th,td{text-align:left;padding:8px;min-width:50px}th{background-color:#4285f4;color:#fff}tr:nth-child(2n){background-color:#f2f2f2}#result-table{margin:5px 0}.react-daterange-picker{display:inline-flex;position:relative}.react-daterange-picker,.react-daterange-picker *,.react-daterange-picker *:before,.react-daterange-picker *:after{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.react-daterange-picker--disabled{background-color:#f0f0f0;color:#6d6d6d}.react-daterange-picker__wrapper{display:flex;flex-grow:1;flex-shrink:0;align-items:center;border:thin solid gray}.react-daterange-picker__inputGroup{min-width:calc((4px * 3) + .54em * 8 + .217em * 2);height:100%;flex-grow:1;padding:0 2px;box-sizing:content-box}.react-daterange-picker__inputGroup__divider{padding:1px 0;white-space:pre}.react-daterange-picker__inputGroup__divider,.react-daterange-picker__inputGroup__leadingZero{display:inline-block}.react-daterange-picker__inputGroup__input{min-width:.54em;height:100%;position:relative;padding:0 1px;border:0;background:none;color:currentColor;font:inherit;box-sizing:content-box;-webkit-appearance:textfield;-moz-appearance:textfield;appearance:textfield}.react-daterange-picker__inputGroup__input::-webkit-outer-spin-button,.react-daterange-picker__inputGroup__input::-webkit-inner-spin-button{-webkit-appearance:none;-moz-appearance:none;appearance:none;margin:0}.react-daterange-picker__inputGroup__input:invalid{background:#ff00001a}.react-daterange-picker__inputGroup__input--hasLeadingZero{margin-left:-.54em;padding-left:calc(1px + .54em)}.react-daterange-picker__button{border:0;background:transparent;padding:4px 6px}.react-daterange-picker__button:enabled{cursor:pointer}.react-daterange-picker__button:enabled:hover .react-daterange-picker__button__icon,.react-daterange-picker__button:enabled:focus .react-daterange-picker__button__icon{stroke:#0078d7}.react-daterange-picker__button:disabled .react-daterange-picker__button__icon{stroke:#6d6d6d}.react-daterange-picker__button svg{display:inherit}.react-daterange-picker__calendar{width:350px;max-width:100vw;z-index:1}.react-daterange-picker__calendar--closed{display:none}.react-daterange-picker__calendar .react-calendar{border-width:thin}.react-calendar{width:350px;max-width:100%;background:#fff;border:1px solid #a0a096;font-family:Arial,Helvetica,sans-serif;line-height:1.125em}.react-calendar--doubleView{width:700px}.react-calendar--doubleView .react-calendar__viewContainer{display:flex;margin:-.5em}.react-calendar--doubleView .react-calendar__viewContainer>*{width:50%;margin:.5em}.react-calendar,.react-calendar *,.react-calendar *:before,.react-calendar *:after{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.react-calendar button{margin:0;border:0;outline:none}.react-calendar button:enabled:hover{cursor:pointer}.react-calendar__navigation{display:flex;height:44px;margin-bottom:1em}.react-calendar__navigation button{min-width:44px;background:none}.react-calendar__navigation button:disabled{background-color:#f0f0f0}.react-calendar__navigation button:enabled:hover,.react-calendar__navigation button:enabled:focus{background-color:#e6e6e6}.react-calendar__month-view__weekdays{text-align:center;text-transform:uppercase;font:inherit;font-size:.75em;font-weight:700}.react-calendar__month-view__weekdays__weekday{padding:.5em}.react-calendar__month-view__weekNumbers .react-calendar__tile{display:flex;align-items:center;justify-content:center;font:inherit;font-size:.75em;font-weight:700}.react-calendar__month-view__days__day--weekend{color:#d10000}.react-calendar__month-view__days__day--neighboringMonth{color:#757575}.react-calendar__year-view .react-calendar__tile,.react-calendar__decade-view .react-calendar__tile,.react-calendar__century-view .react-calendar__tile{padding:2em .5em}.react-calendar__tile{max-width:100%;padding:10px 6.6667px;background:none;text-align:center;line-height:16px;font:inherit;font-size:.833em}.react-calendar__tile:disabled{background-color:#f0f0f0}.react-calendar__tile:enabled:hover,.react-calendar__tile:enabled:focus{background-color:#e6e6e6}.react-calendar__tile--now{background:#ffff76}.react-calendar__tile--now:enabled:hover,.react-calendar__tile--now:enabled:focus{background:#ffffa9}.react-calendar__tile--hasActive{background:#76baff}.react-calendar__tile--hasActive:enabled:hover,.react-calendar__tile--hasActive:enabled:focus{background:#a9d4ff}.react-calendar__tile--active{background:#006edc;color:#fff}.react-calendar__tile--active:enabled:hover,.react-calendar__tile--active:enabled:focus{background:#1087ff}.react-calendar--selectRange .react-calendar__tile--hover{background-color:#e6e6e6}.rc-slider{position:relative;width:100%;height:14px;padding:5px 0;border-radius:6px;touch-action:none;box-sizing:border-box;-webkit-tap-highlight-color:rgba(0,0,0,0)}.rc-slider *{box-sizing:border-box;-webkit-tap-highlight-color:rgba(0,0,0,0)}.rc-slider-rail{position:absolute;width:100%;height:4px;background-color:#e9e9e9;border-radius:6px}.rc-slider-track,.rc-slider-tracks{position:absolute;height:4px;background-color:#abe2fb;border-radius:6px}.rc-slider-track-draggable{z-index:1;box-sizing:content-box;background-clip:content-box;border-top:5px solid rgba(0,0,0,0);border-bottom:5px solid rgba(0,0,0,0);transform:translateY(-5px)}.rc-slider-handle{position:absolute;z-index:1;width:14px;height:14px;margin-top:-5px;background-color:#fff;border:solid 2px #96dbfa;border-radius:50%;cursor:pointer;cursor:-webkit-grab;cursor:grab;opacity:.8;touch-action:pan-x}.rc-slider-handle-dragging.rc-slider-handle-dragging.rc-slider-handle-dragging{border-color:#57c5f7;box-shadow:0 0 0 5px #96dbfa}.rc-slider-handle:focus{outline:none;box-shadow:none}.rc-slider-handle:focus-visible{border-color:#2db7f5;box-shadow:0 0 0 3px #96dbfa}.rc-slider-handle-click-focused:focus{border-color:#96dbfa;box-shadow:unset}.rc-slider-handle:hover{border-color:#57c5f7}.rc-slider-handle:active{border-color:#57c5f7;box-shadow:0 0 5px #57c5f7;cursor:-webkit-grabbing;cursor:grabbing}.rc-slider-mark{position:absolute;top:18px;left:0;width:100%;font-size:12px}.rc-slider-mark-text{position:absolute;display:inline-block;color:#999;text-align:center;vertical-align:middle;cursor:pointer}.rc-slider-mark-text-active{color:#666}.rc-slider-step{position:absolute;width:100%;height:4px;background:transparent}.rc-slider-dot{position:absolute;bottom:-2px;width:8px;height:8px;vertical-align:middle;background-color:#fff;border:2px solid #e9e9e9;border-radius:50%;cursor:pointer}.rc-slider-dot-active{border-color:#96dbfa}.rc-slider-dot-reverse{margin-right:-4px}.rc-slider-disabled{background-color:#e9e9e9}.rc-slider-disabled .rc-slider-track{background-color:#ccc}.rc-slider-disabled .rc-slider-handle,.rc-slider-disabled .rc-slider-dot{background-color:#fff;border-color:#ccc;box-shadow:none;cursor:not-allowed}.rc-slider-disabled .rc-slider-mark-text,.rc-slider-disabled .rc-slider-dot{cursor:not-allowed!important}.rc-slider-vertical{width:14px;height:100%;padding:0 5px}.rc-slider-vertical .rc-slider-rail{width:4px;height:100%}.rc-slider-vertical .rc-slider-track{bottom:0;left:5px;width:4px}.rc-slider-vertical .rc-slider-track-draggable{border-top:0;border-bottom:0;border-right:5px solid rgba(0,0,0,0);border-left:5px solid rgba(0,0,0,0);transform:translate(-5px)}.rc-slider-vertical .rc-slider-handle{position:absolute;z-index:1;margin-top:0;margin-left:-5px;touch-action:pan-y}.rc-slider-vertical .rc-slider-mark{top:0;left:18px;height:100%}.rc-slider-vertical .rc-slider-step{width:4px;height:100%}.rc-slider-vertical .rc-slider-dot{margin-left:-2px}.rc-slider-tooltip-zoom-down-enter,.rc-slider-tooltip-zoom-down-appear,.rc-slider-tooltip-zoom-down-leave{display:block!important;animation-duration:.3s;animation-fill-mode:both;animation-play-state:paused}.rc-slider-tooltip-zoom-down-enter.rc-slider-tooltip-zoom-down-enter-active,.rc-slider-tooltip-zoom-down-appear.rc-slider-tooltip-zoom-down-appear-active{animation-name:rcSliderTooltipZoomDownIn;animation-play-state:running}.rc-slider-tooltip-zoom-down-leave.rc-slider-tooltip-zoom-down-leave-active{animation-name:rcSliderTooltipZoomDownOut;animation-play-state:running}.rc-slider-tooltip-zoom-down-enter,.rc-slider-tooltip-zoom-down-appear{transform:scale(0);animation-timing-function:cubic-bezier(.23,1,.32,1)}.rc-slider-tooltip-zoom-down-leave{animation-timing-function:cubic-bezier(.755,.05,.855,.06)}@keyframes rcSliderTooltipZoomDownIn{0%{transform:scale(0);transform-origin:50% 100%;opacity:0}to{transform:scale(1);transform-origin:50% 100%}}@keyframes rcSliderTooltipZoomDownOut{0%{transform:scale(1);transform-origin:50% 100%}to{transform:scale(0);transform-origin:50% 100%;opacity:0}}.rc-slider-tooltip{position:absolute;top:-9999px;left:-9999px;visibility:visible;box-sizing:border-box;-webkit-tap-highlight-color:rgba(0,0,0,0)}.rc-slider-tooltip *{box-sizing:border-box;-webkit-tap-highlight-color:rgba(0,0,0,0)}.rc-slider-tooltip-hidden{display:none}.rc-slider-tooltip-placement-top{padding:4px 0 8px}.rc-slider-tooltip-inner{min-width:24px;height:24px;padding:6px 2px;color:#fff;font-size:12px;line-height:1;text-align:center;text-decoration:none;background-color:#6c6c6c;border-radius:6px;box-shadow:0 0 4px #d9d9d9}.rc-slider-tooltip-arrow{position:absolute;width:0;height:0;border-color:transparent;border-style:solid}.rc-slider-tooltip-placement-top .rc-slider-tooltip-arrow{bottom:4px;left:50%;margin-left:-4px;border-width:4px 4px 0;border-top-color:#6c6c6c}.hover-text{position:absolute;z-index:1;background-color:#f9f9f9;border:1px solid #ccc;border-radius:4px}input[type=range]{width:80%;padding:12px 0;border:0px}.slider-info{display:flex;font-size:13px;justify-content:space-between}.react-daterange-picker{margin-bottom:15px;height:40px;font-size:14px}.react-daterange-picker__wrapper{width:200px;border:0}.react-daterange-picker__inputGroup{min-width:0px;text-align:center}.slider-wrapper{display:flex;flex-direction:column;align-items:center}.rc-slider{width:95%;margin:10px 0}.rc-slider-handle{z-index:0;opacity:1;width:20px;height:20px;margin:-7px 0}
|
|
1
|
+
.padded{padding:8px 20px}.widget{width:100%;box-sizing:border-box;border:1px solid #ccc;border-radius:4px}.widget-label{position:relative;padding-bottom:10px}.widget-container{display:flex;flex-direction:column;gap:20px}input[type=submit]{padding:12px 20px;cursor:pointer}button{cursor:pointer;border-radius:5px;padding:10px}.white-button{background-color:#fff;color:#00f}.white-button:hover{background-color:#d4dae1}.blue-button{background-color:#4285f4;color:#fff;border:none}.blue-button:hover{background-color:#3076c5}.horizontal-container{display:flex}.auth-container{display:flex;align-items:center;gap:10px}#main-container{height:97vh;width:99vw}#left-container{width:250px;min-width:250px;margin-right:20px;padding:10px;overflow-y:auto}#right-container{height:97vh;width:calc(99vw - 300px)}#header-container{background-color:#d4dae1;color:#000;display:flex;align-items:center;justify-content:space-between;padding:10px}#table-container{padding:10px 20px;height:calc(97vh - 70px);overflow-x:auto;overflow-y:auto}.modal-background{position:fixed;z-index:1;left:0;top:0;width:100%;height:100%;overflow:auto;background-color:#0006;padding-top:60px}.modal-content{background-color:#fefefe;padding:30px;margin:5px auto auto;border:2px solid black}#loading-indicator{justify-content:center;align-items:center;text-align:center;font-weight:700;position:absolute;top:0;left:0;width:100%;height:100%;background-color:#ffffff80}.spinner{margin:20px auto;width:40px;height:40px;position:relative;border-radius:50%;border:3px solid transparent;border-top-color:#3498db;animation:spin 1s linear infinite}@keyframes spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}table{border-collapse:collapse;width:100%}th,td{text-align:left;padding:8px;min-width:50px}th{background-color:#4285f4;color:#fff}tr:nth-child(2n){background-color:#f2f2f2}#result-table{margin:5px 0}.react-daterange-picker{display:inline-flex;position:relative}.react-daterange-picker,.react-daterange-picker *,.react-daterange-picker *:before,.react-daterange-picker *:after{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.react-daterange-picker--disabled{background-color:#f0f0f0;color:#6d6d6d}.react-daterange-picker__wrapper{display:flex;flex-grow:1;flex-shrink:0;align-items:center;border:thin solid gray}.react-daterange-picker__inputGroup{min-width:calc((4px * 3) + .54em * 8 + .217em * 2);height:100%;flex-grow:1;padding:0 2px;box-sizing:content-box}.react-daterange-picker__inputGroup__divider{padding:1px 0;white-space:pre}.react-daterange-picker__inputGroup__divider,.react-daterange-picker__inputGroup__leadingZero{display:inline-block}.react-daterange-picker__inputGroup__input{min-width:.54em;height:100%;position:relative;padding:0 1px;border:0;background:none;color:currentColor;font:inherit;box-sizing:content-box;-webkit-appearance:textfield;-moz-appearance:textfield;appearance:textfield}.react-daterange-picker__inputGroup__input::-webkit-outer-spin-button,.react-daterange-picker__inputGroup__input::-webkit-inner-spin-button{-webkit-appearance:none;-moz-appearance:none;appearance:none;margin:0}.react-daterange-picker__inputGroup__input:invalid{background:#ff00001a}.react-daterange-picker__inputGroup__input--hasLeadingZero{margin-left:-.54em;padding-left:calc(1px + .54em)}.react-daterange-picker__button{border:0;background:transparent;padding:4px 6px}.react-daterange-picker__button:enabled{cursor:pointer}.react-daterange-picker__button:enabled:hover .react-daterange-picker__button__icon,.react-daterange-picker__button:enabled:focus .react-daterange-picker__button__icon{stroke:#0078d7}.react-daterange-picker__button:disabled .react-daterange-picker__button__icon{stroke:#6d6d6d}.react-daterange-picker__button svg{display:inherit}.react-daterange-picker__calendar{width:350px;max-width:100vw;z-index:1}.react-daterange-picker__calendar--closed{display:none}.react-daterange-picker__calendar .react-calendar{border-width:thin}.react-calendar{width:350px;max-width:100%;background:#fff;border:1px solid #a0a096;font-family:Arial,Helvetica,sans-serif;line-height:1.125em}.react-calendar--doubleView{width:700px}.react-calendar--doubleView .react-calendar__viewContainer{display:flex;margin:-.5em}.react-calendar--doubleView .react-calendar__viewContainer>*{width:50%;margin:.5em}.react-calendar,.react-calendar *,.react-calendar *:before,.react-calendar *:after{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.react-calendar button{margin:0;border:0;outline:none}.react-calendar button:enabled:hover{cursor:pointer}.react-calendar__navigation{display:flex;height:44px;margin-bottom:1em}.react-calendar__navigation button{min-width:44px;background:none}.react-calendar__navigation button:disabled{background-color:#f0f0f0}.react-calendar__navigation button:enabled:hover,.react-calendar__navigation button:enabled:focus{background-color:#e6e6e6}.react-calendar__month-view__weekdays{text-align:center;text-transform:uppercase;font:inherit;font-size:.75em;font-weight:700}.react-calendar__month-view__weekdays__weekday{padding:.5em}.react-calendar__month-view__weekNumbers .react-calendar__tile{display:flex;align-items:center;justify-content:center;font:inherit;font-size:.75em;font-weight:700}.react-calendar__month-view__days__day--weekend{color:#d10000}.react-calendar__month-view__days__day--neighboringMonth,.react-calendar__decade-view__years__year--neighboringDecade,.react-calendar__century-view__decades__decade--neighboringCentury{color:#757575}.react-calendar__year-view .react-calendar__tile,.react-calendar__decade-view .react-calendar__tile,.react-calendar__century-view .react-calendar__tile{padding:2em .5em}.react-calendar__tile{max-width:100%;padding:10px 6.6667px;background:none;text-align:center;line-height:16px;font:inherit;font-size:.833em}.react-calendar__tile:disabled{background-color:#f0f0f0;color:#ababab}.react-calendar__month-view__days__day--neighboringMonth:disabled,.react-calendar__decade-view__years__year--neighboringDecade:disabled,.react-calendar__century-view__decades__decade--neighboringCentury:disabled{color:#cdcdcd}.react-calendar__tile:enabled:hover,.react-calendar__tile:enabled:focus{background-color:#e6e6e6}.react-calendar__tile--now{background:#ffff76}.react-calendar__tile--now:enabled:hover,.react-calendar__tile--now:enabled:focus{background:#ffffa9}.react-calendar__tile--hasActive{background:#76baff}.react-calendar__tile--hasActive:enabled:hover,.react-calendar__tile--hasActive:enabled:focus{background:#a9d4ff}.react-calendar__tile--active{background:#006edc;color:#fff}.react-calendar__tile--active:enabled:hover,.react-calendar__tile--active:enabled:focus{background:#1087ff}.react-calendar--selectRange .react-calendar__tile--hover{background-color:#e6e6e6}.rc-slider{position:relative;width:100%;height:14px;padding:5px 0;border-radius:6px;touch-action:none;box-sizing:border-box;-webkit-tap-highlight-color:rgba(0,0,0,0)}.rc-slider *{box-sizing:border-box;-webkit-tap-highlight-color:rgba(0,0,0,0)}.rc-slider-rail{position:absolute;width:100%;height:4px;background-color:#e9e9e9;border-radius:6px}.rc-slider-track,.rc-slider-tracks{position:absolute;height:4px;background-color:#abe2fb;border-radius:6px}.rc-slider-track-draggable{z-index:1;box-sizing:content-box;background-clip:content-box;border-top:5px solid rgba(0,0,0,0);border-bottom:5px solid rgba(0,0,0,0);transform:translateY(-5px)}.rc-slider-handle{position:absolute;z-index:1;width:14px;height:14px;margin-top:-5px;background-color:#fff;border:solid 2px #96dbfa;border-radius:50%;cursor:pointer;cursor:-webkit-grab;cursor:grab;opacity:.8;touch-action:pan-x}.rc-slider-handle-dragging.rc-slider-handle-dragging.rc-slider-handle-dragging{border-color:#57c5f7;box-shadow:0 0 0 5px #96dbfa}.rc-slider-handle:focus{outline:none;box-shadow:none}.rc-slider-handle:focus-visible{border-color:#2db7f5;box-shadow:0 0 0 3px #96dbfa}.rc-slider-handle-click-focused:focus{border-color:#96dbfa;box-shadow:unset}.rc-slider-handle:hover{border-color:#57c5f7}.rc-slider-handle:active{border-color:#57c5f7;box-shadow:0 0 5px #57c5f7;cursor:-webkit-grabbing;cursor:grabbing}.rc-slider-mark{position:absolute;top:18px;left:0;width:100%;font-size:12px}.rc-slider-mark-text{position:absolute;display:inline-block;color:#999;text-align:center;vertical-align:middle;cursor:pointer}.rc-slider-mark-text-active{color:#666}.rc-slider-step{position:absolute;width:100%;height:4px;background:transparent}.rc-slider-dot{position:absolute;bottom:-2px;width:8px;height:8px;vertical-align:middle;background-color:#fff;border:2px solid #e9e9e9;border-radius:50%;cursor:pointer}.rc-slider-dot-active{border-color:#96dbfa}.rc-slider-dot-reverse{margin-right:-4px}.rc-slider-disabled{background-color:#e9e9e9}.rc-slider-disabled .rc-slider-track{background-color:#ccc}.rc-slider-disabled .rc-slider-handle,.rc-slider-disabled .rc-slider-dot{background-color:#fff;border-color:#ccc;box-shadow:none;cursor:not-allowed}.rc-slider-disabled .rc-slider-mark-text,.rc-slider-disabled .rc-slider-dot{cursor:not-allowed!important}.rc-slider-vertical{width:14px;height:100%;padding:0 5px}.rc-slider-vertical .rc-slider-rail{width:4px;height:100%}.rc-slider-vertical .rc-slider-track{bottom:0;left:5px;width:4px}.rc-slider-vertical .rc-slider-track-draggable{border-top:0;border-bottom:0;border-right:5px solid rgba(0,0,0,0);border-left:5px solid rgba(0,0,0,0);transform:translate(-5px)}.rc-slider-vertical .rc-slider-handle{position:absolute;z-index:1;margin-top:0;margin-left:-5px;touch-action:pan-y}.rc-slider-vertical .rc-slider-mark{top:0;left:18px;height:100%}.rc-slider-vertical .rc-slider-step{width:4px;height:100%}.rc-slider-vertical .rc-slider-dot{margin-left:-2px}.rc-slider-tooltip-zoom-down-enter,.rc-slider-tooltip-zoom-down-appear,.rc-slider-tooltip-zoom-down-leave{display:block!important;animation-duration:.3s;animation-fill-mode:both;animation-play-state:paused}.rc-slider-tooltip-zoom-down-enter.rc-slider-tooltip-zoom-down-enter-active,.rc-slider-tooltip-zoom-down-appear.rc-slider-tooltip-zoom-down-appear-active{animation-name:rcSliderTooltipZoomDownIn;animation-play-state:running}.rc-slider-tooltip-zoom-down-leave.rc-slider-tooltip-zoom-down-leave-active{animation-name:rcSliderTooltipZoomDownOut;animation-play-state:running}.rc-slider-tooltip-zoom-down-enter,.rc-slider-tooltip-zoom-down-appear{transform:scale(0);animation-timing-function:cubic-bezier(.23,1,.32,1)}.rc-slider-tooltip-zoom-down-leave{animation-timing-function:cubic-bezier(.755,.05,.855,.06)}@keyframes rcSliderTooltipZoomDownIn{0%{transform:scale(0);transform-origin:50% 100%;opacity:0}to{transform:scale(1);transform-origin:50% 100%}}@keyframes rcSliderTooltipZoomDownOut{0%{transform:scale(1);transform-origin:50% 100%}to{transform:scale(0);transform-origin:50% 100%;opacity:0}}.rc-slider-tooltip{position:absolute;top:-9999px;left:-9999px;visibility:visible;box-sizing:border-box;-webkit-tap-highlight-color:rgba(0,0,0,0)}.rc-slider-tooltip *{box-sizing:border-box;-webkit-tap-highlight-color:rgba(0,0,0,0)}.rc-slider-tooltip-hidden{display:none}.rc-slider-tooltip-placement-top{padding:4px 0 8px}.rc-slider-tooltip-inner{min-width:24px;height:24px;padding:6px 2px;color:#fff;font-size:12px;line-height:1;text-align:center;text-decoration:none;background-color:#6c6c6c;border-radius:6px;box-shadow:0 0 4px #d9d9d9}.rc-slider-tooltip-arrow{position:absolute;width:0;height:0;border-color:transparent;border-style:solid}.rc-slider-tooltip-placement-top .rc-slider-tooltip-arrow{bottom:4px;left:50%;margin-left:-4px;border-width:4px 4px 0;border-top-color:#6c6c6c}.hover-text{position:absolute;z-index:1;background-color:#f9f9f9;border:1px solid #ccc;border-radius:4px}input[type=range]{width:80%;padding:12px 0;border:0px}.slider-info{display:flex;font-size:13px;justify-content:space-between}.react-daterange-picker{height:40px;font-size:14px}.react-daterange-picker__wrapper{width:200px;border:0}.react-daterange-picker__inputGroup{min-width:0px;text-align:center}.slider-wrapper{display:flex;flex-direction:column;align-items:center}.rc-slider{width:95%;margin:10px 0}.rc-slider-handle{z-index:0;opacity:1;width:20px;height:20px;margin:-7px 0}
|