@teselagen/ui 0.7.34 → 0.7.36

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.
Files changed (161) hide show
  1. package/isBeingCalledExcessively.js +2 -0
  2. package/package.json +1 -1
  3. package/style.css +26 -10
  4. package/DataTable/utils/filterLocalEntitiesToHasura.d.ts +0 -5
  5. package/DataTable/utils/initializeHasuraWhereAndFilter.d.ts +0 -2
  6. package/DataTable/utils/tableQueryParamsToHasuraClauses.d.ts +0 -26
  7. package/src/AdvancedOptions.js +0 -33
  8. package/src/AdvancedOptions.spec.js +0 -26
  9. package/src/AssignDefaultsModeContext.js +0 -22
  10. package/src/AsyncValidateFieldSpinner/index.js +0 -12
  11. package/src/BlueprintError/index.js +0 -14
  12. package/src/BounceLoader/index.js +0 -16
  13. package/src/BounceLoader/style.css +0 -45
  14. package/src/CollapsibleCard/index.js +0 -68
  15. package/src/CollapsibleCard/style.css +0 -23
  16. package/src/DNALoader/index.js +0 -20
  17. package/src/DNALoader/style.css +0 -251
  18. package/src/DataTable/CellDragHandle.js +0 -132
  19. package/src/DataTable/ColumnFilterMenu.js +0 -62
  20. package/src/DataTable/Columns.js +0 -979
  21. package/src/DataTable/DisabledLoadingComponent.js +0 -15
  22. package/src/DataTable/DisplayOptions.js +0 -199
  23. package/src/DataTable/DropdownCell.js +0 -61
  24. package/src/DataTable/EditableCell.js +0 -44
  25. package/src/DataTable/FilterAndSortMenu.js +0 -388
  26. package/src/DataTable/PagingTool.js +0 -225
  27. package/src/DataTable/RenderCell.js +0 -191
  28. package/src/DataTable/SearchBar.js +0 -69
  29. package/src/DataTable/SortableColumns.js +0 -100
  30. package/src/DataTable/TableFormTrackerContext.js +0 -10
  31. package/src/DataTable/ThComponent.js +0 -44
  32. package/src/DataTable/dataTableEnhancer.js +0 -41
  33. package/src/DataTable/defaultFormatters.js +0 -32
  34. package/src/DataTable/defaultValidators.js +0 -40
  35. package/src/DataTable/editCellHelper.js +0 -44
  36. package/src/DataTable/getCellVal.js +0 -20
  37. package/src/DataTable/getVals.js +0 -8
  38. package/src/DataTable/index.js +0 -3209
  39. package/src/DataTable/isTruthy.js +0 -12
  40. package/src/DataTable/isValueEmpty.js +0 -3
  41. package/src/DataTable/style.css +0 -608
  42. package/src/DataTable/utils/convertSchema.js +0 -69
  43. package/src/DataTable/utils/filterLocalEntitiesToHasura.js +0 -236
  44. package/src/DataTable/utils/filterLocalEntitiesToHasura.test.js +0 -587
  45. package/src/DataTable/utils/formatPasteData.js +0 -16
  46. package/src/DataTable/utils/getAllRows.js +0 -11
  47. package/src/DataTable/utils/getCellCopyText.js +0 -7
  48. package/src/DataTable/utils/getCellInfo.js +0 -36
  49. package/src/DataTable/utils/getFieldPathToField.js +0 -7
  50. package/src/DataTable/utils/getIdOrCodeOrIndex.js +0 -9
  51. package/src/DataTable/utils/getLastSelectedEntity.js +0 -11
  52. package/src/DataTable/utils/getNewEntToSelect.js +0 -25
  53. package/src/DataTable/utils/getRowCopyText.js +0 -28
  54. package/src/DataTable/utils/getTableConfigFromStorage.js +0 -5
  55. package/src/DataTable/utils/handleCopyColumn.js +0 -21
  56. package/src/DataTable/utils/handleCopyHelper.js +0 -15
  57. package/src/DataTable/utils/handleCopyRows.js +0 -23
  58. package/src/DataTable/utils/handleCopyTable.js +0 -16
  59. package/src/DataTable/utils/index.js +0 -55
  60. package/src/DataTable/utils/initializeHasuraWhereAndFilter.js +0 -26
  61. package/src/DataTable/utils/isBottomRightCornerOfRectangle.js +0 -20
  62. package/src/DataTable/utils/isEntityClean.js +0 -15
  63. package/src/DataTable/utils/primarySelectedValue.js +0 -1
  64. package/src/DataTable/utils/queryParams.js +0 -350
  65. package/src/DataTable/utils/removeCleanRows.js +0 -22
  66. package/src/DataTable/utils/rowClick.js +0 -181
  67. package/src/DataTable/utils/selection.js +0 -8
  68. package/src/DataTable/utils/tableQueryParamsToHasuraClauses.js +0 -253
  69. package/src/DataTable/utils/tableQueryParamsToHasuraClauses.test.js +0 -206
  70. package/src/DataTable/utils/useTableEntities.js +0 -38
  71. package/src/DataTable/utils/utils.js +0 -37
  72. package/src/DataTable/utils/withSelectedEntities.js +0 -65
  73. package/src/DataTable/utils/withTableParams.js +0 -288
  74. package/src/DataTable/validateTableWideErrors.js +0 -160
  75. package/src/DataTable/viewColumn.js +0 -97
  76. package/src/DialogFooter/index.js +0 -86
  77. package/src/DialogFooter/style.css +0 -9
  78. package/src/DropdownButton.js +0 -36
  79. package/src/FillWindow.css +0 -6
  80. package/src/FillWindow.js +0 -69
  81. package/src/FormComponents/FormSeparator.js +0 -9
  82. package/src/FormComponents/LoadingDots.js +0 -14
  83. package/src/FormComponents/Uploader.js +0 -1278
  84. package/src/FormComponents/getNewName.js +0 -31
  85. package/src/FormComponents/index.js +0 -1266
  86. package/src/FormComponents/itemUpload.js +0 -84
  87. package/src/FormComponents/sortify.js +0 -73
  88. package/src/FormComponents/style.css +0 -275
  89. package/src/FormComponents/tryToMatchSchemas.js +0 -264
  90. package/src/FormComponents/utils.js +0 -6
  91. package/src/HotkeysDialog/index.js +0 -79
  92. package/src/HotkeysDialog/style.css +0 -54
  93. package/src/InfoHelper/index.js +0 -78
  94. package/src/InfoHelper/style.css +0 -7
  95. package/src/IntentText/index.js +0 -18
  96. package/src/Loading/index.js +0 -70
  97. package/src/Loading/style.css +0 -4
  98. package/src/MatchHeaders.js +0 -234
  99. package/src/MenuBar/index.js +0 -423
  100. package/src/MenuBar/style.css +0 -45
  101. package/src/PromptUnsavedChanges/index.js +0 -38
  102. package/src/ResizableDraggableDialog/index.js +0 -141
  103. package/src/ResizableDraggableDialog/style.css +0 -42
  104. package/src/ScrollToTop/index.js +0 -72
  105. package/src/SimpleStepViz.js +0 -22
  106. package/src/Tag.js +0 -112
  107. package/src/TagSelect/index.js +0 -69
  108. package/src/TagSelect/style.css +0 -13
  109. package/src/TgHtmlSelect/index.js +0 -20
  110. package/src/TgSelect/index.js +0 -537
  111. package/src/TgSelect/style.css +0 -61
  112. package/src/TgSuggest/index.js +0 -124
  113. package/src/Timeline/TimelineEvent.js +0 -31
  114. package/src/Timeline/index.js +0 -15
  115. package/src/Timeline/style.css +0 -29
  116. package/src/UploadCsvWizard.css +0 -4
  117. package/src/UploadCsvWizard.js +0 -719
  118. package/src/autoTooltip.js +0 -201
  119. package/src/constants.js +0 -1
  120. package/src/customIcons.js +0 -361
  121. package/src/enhancers/withDialog/index.js +0 -196
  122. package/src/enhancers/withDialog/tg_modalState.js +0 -47
  123. package/src/enhancers/withField.js +0 -20
  124. package/src/enhancers/withFields.js +0 -11
  125. package/src/enhancers/withLocalStorage.js +0 -11
  126. package/src/index.js +0 -88
  127. package/src/rerenderOnWindowResize.js +0 -26
  128. package/src/showAppSpinner.js +0 -12
  129. package/src/showConfirmationDialog/index.js +0 -148
  130. package/src/showDialogOnDocBody.js +0 -33
  131. package/src/style.css +0 -265
  132. package/src/throwFormError.js +0 -16
  133. package/src/toastr.js +0 -148
  134. package/src/typeToCommonType.js +0 -6
  135. package/src/useDialog.js +0 -63
  136. package/src/utils/adHoc.js +0 -10
  137. package/src/utils/basicHandleActionsWithFullState.js +0 -14
  138. package/src/utils/browserUtils.js +0 -3
  139. package/src/utils/combineReducersWithFullState.js +0 -14
  140. package/src/utils/commandControls.js +0 -82
  141. package/src/utils/commandUtils.js +0 -112
  142. package/src/utils/determineBlackOrWhiteTextColor.js +0 -4
  143. package/src/utils/getDayjsFormatter.js +0 -35
  144. package/src/utils/getTextFromEl.js +0 -28
  145. package/src/utils/handlerHelpers.js +0 -24
  146. package/src/utils/hooks/index.js +0 -1
  147. package/src/utils/hooks/useDeepEqualMemo.js +0 -15
  148. package/src/utils/hooks/useStableReference.js +0 -9
  149. package/src/utils/hotkeyUtils.js +0 -131
  150. package/src/utils/isBeingCalledExcessively.js +0 -24
  151. package/src/utils/menuUtils.js +0 -433
  152. package/src/utils/popoverOverflowModifiers.js +0 -11
  153. package/src/utils/pureNoFunc.js +0 -31
  154. package/src/utils/renderOnDoc.js +0 -32
  155. package/src/utils/showProgressToast.js +0 -22
  156. package/src/utils/tagUtils.js +0 -45
  157. package/src/utils/tgFormValues.js +0 -35
  158. package/src/utils/useTraceUpdate.js +0 -19
  159. package/src/utils/withSelectTableRecords.js +0 -43
  160. package/src/utils/withStore.js +0 -10
  161. package/src/wrapDialog.js +0 -116
@@ -1,4 +1,5 @@
1
1
  const keyCount = {};
2
+
2
3
  // if this function is hit more than 20 times in a row in 2 seconds with the same uniqName then throw an error
3
4
  export const isBeingCalledExcessively = ({ uniqName }) => {
4
5
  if (process.env.NODE_ENV !== "development") {
@@ -29,3 +30,4 @@ export const isBeingCalledExcessively = ({ uniqName }) => {
29
30
  throw new Error(`isBeingCalledExcessively: ${uniqName}`);
30
31
  }
31
32
  };
33
+
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@teselagen/ui",
3
- "version": "0.7.34",
3
+ "version": "0.7.36",
4
4
  "main": "./src/index.js",
5
5
  "type": "module",
6
6
  "exports": {
package/style.css CHANGED
@@ -1,13 +1,29 @@
1
- .tag-select-popover {
2
- padding: 10px;
1
+ /* Copyright (C) 2018 TeselaGen Biotechnology, Inc. */
2
+ .tg-timeline {
3
+ position: relative;
4
+ white-space: nowrap;
3
5
  }
4
6
 
5
- .tag-select-popover-inner {
6
- max-height: 150px;
7
- overflow: auto;
8
- display: grid;
9
- padding-top: 10px;
10
- grid-column-gap: 5px;
11
- row-gap: 8px;
12
- grid-template-columns: max-content max-content;
7
+ .tg-timeline-line {
8
+ position: absolute;
9
+ height: 90%;
10
+ border-left: 2px solid #bfccd6;
11
+ top: 3px;
12
+ left: 5px;
13
+ }
14
+
15
+ .tg-timeline-event {
16
+ margin-bottom: 15px;
17
+ }
18
+
19
+ .tg-timeline-circle {
20
+ width: 12px;
21
+ min-width: 12px;
22
+ height: 12px;
23
+ min-height: 12px;
24
+ z-index: 1;
25
+ margin-right: 10px;
26
+ border-radius: 100px;
27
+ background: #e1e8ed;
28
+ border: 2px solid #137cbd;
13
29
  }
@@ -1,5 +0,0 @@
1
- export function filterLocalEntitiesToHasura(records: any, { where, order_by, limit, offset, isInfinite }?: {}): {
2
- entities: any[];
3
- entitiesAcrossPages: any[];
4
- entityCount: number;
5
- };
@@ -1,2 +0,0 @@
1
- export function initializeHasuraWhereAndFilter(additionalFilter: any, where: {} | undefined, currentParams: any): void;
2
- export function addCustomColumnFilters(where: any, fields: any, currentParams: any): void;
@@ -1,26 +0,0 @@
1
- export function tableQueryParamsToHasuraClauses({ page, pageSize, searchTerm, filters, order, schema, additionalFilter }: {
2
- page: any;
3
- pageSize: any;
4
- searchTerm: any;
5
- filters: any;
6
- order: any;
7
- schema: any;
8
- additionalFilter: any;
9
- }): {
10
- where: {};
11
- order_by: {};
12
- limit: any;
13
- offset: number;
14
- };
15
- /**
16
- * Takes a schema and returns an object with the fields mapped by their camelCased display name.
17
- * If the displayName is not set or is a jsx element, the path is used instead.
18
- * The same conversion must be done when using the result of this method
19
- */
20
- export function getFieldsMappedByCCDisplayName(schema: any): any;
21
- /**
22
- *
23
- * @param {object} field
24
- * @returns the camelCase display name of the field, to be used for filters, sorting, etc
25
- */
26
- export function getCCDisplayName(field: object): string;
@@ -1,33 +0,0 @@
1
- import React, { useState } from "react";
2
- import { Icon } from "@blueprintjs/core";
3
-
4
- export default function AdvancedOptions({
5
- children,
6
- content,
7
- label,
8
- style,
9
- isOpenByDefault
10
- }) {
11
- const [isOpen, setOpen] = useState(isOpenByDefault);
12
- if (!(content || children)) {
13
- return null;
14
- }
15
- return (
16
- <div style={{ marginTop: 5, ...style }}>
17
- <div
18
- onClick={() => {
19
- setOpen(!isOpen);
20
- }}
21
- style={{ cursor: "pointer", display: "flex", alignItems: "flex-end" }}
22
- className="tg-toggle-advanced-options"
23
- >
24
- {label || "Advanced"}{" "}
25
- <Icon
26
- icon={isOpen ? "caret-down" : "caret-right"}
27
- style={{ marginLeft: 5 }}
28
- ></Icon>
29
- </div>
30
- {isOpen && <div style={{ marginTop: 10 }}>{content || children}</div>}
31
- </div>
32
- );
33
- }
@@ -1,26 +0,0 @@
1
- import React from "react";
2
- import { render, fireEvent } from "@testing-library/react";
3
- import AdvancedOptions from "./AdvancedOptions";
4
-
5
- describe("AdvancedOptions", () => {
6
- test("renders correctly with given props and default state", () => {
7
- const { queryByText, container } = render(
8
- <AdvancedOptions label="Test Label" content="Test Content" />
9
- );
10
- expect(queryByText("Test Label")).toBeInTheDocument();
11
- expect(queryByText("Test Content")).not.toBeInTheDocument();
12
-
13
- expect(
14
- container.querySelector(".bp3-icon-caret-right")
15
- ).toBeInTheDocument();
16
- });
17
-
18
- test("toggles content when clicked", () => {
19
- const { getByText, queryByText, container } = render(
20
- <AdvancedOptions label="Test Label" content="Test Content" />
21
- );
22
- fireEvent.click(getByText("Test Label"));
23
- expect(queryByText("Test Content")).toBeInTheDocument();
24
- expect(container.querySelector(".bp3-icon-caret-down")).toBeInTheDocument();
25
- });
26
- });
@@ -1,22 +0,0 @@
1
- import React from "react";
2
-
3
- export const AssignDefaultsModeContext = React.createContext({
4
- inAssignDefaultsMode: false,
5
- // eslint-disable-next-line @typescript-eslint/no-empty-function
6
- setAssignDefaultsMode: () => {}
7
- });
8
-
9
- export const workflowDefaultParamsObj = {
10
- taskNumber: undefined,
11
- workflowDefinitionName: undefined,
12
- workflowDefinitionId: undefined,
13
- workflowRunName: undefined,
14
- workflowRunId: undefined,
15
- toolName: undefined,
16
- workflowToolTitle: undefined,
17
- workflowToolDefinitionId: undefined,
18
- workflowTaskCode: undefined
19
- };
20
- export const WorkflowDefaultParamsContext = React.createContext(
21
- workflowDefaultParamsObj
22
- );
@@ -1,12 +0,0 @@
1
- /* Copyright (C) 2018 TeselaGen Biotechnology, Inc. */
2
-
3
- import React from "react";
4
- import { Spinner } from "@blueprintjs/core";
5
-
6
- export default function AsyncValidateFieldSpinner({ validating }) {
7
- if (validating) {
8
- return <Spinner size="18" />;
9
- } else {
10
- return null;
11
- }
12
- }
@@ -1,14 +0,0 @@
1
- import React from "react";
2
- import { Classes } from "@blueprintjs/core";
3
- import classNames from "classnames";
4
-
5
- export default function BlueprintError({ error }) {
6
- if (!error) return null;
7
- return (
8
- <div className={classNames(Classes.FORM_GROUP, Classes.INTENT_DANGER)}>
9
- <div className={classNames(Classes.FORM_HELPER_TEXT, "preserve-newline")}>
10
- {error}
11
- </div>
12
- </div>
13
- );
14
- }
@@ -1,16 +0,0 @@
1
- /* taken from http://tobiasahlin.com/spinkit/ */
2
- import React from "react";
3
- import classNames from "classnames";
4
- import "./style.css";
5
-
6
- export function BounceLoader({ style, className }) {
7
- return (
8
- <div className={classNames("tg-bounce-loader", className)} style={style}>
9
- <div className="rect1" />
10
- <div className="rect2" />
11
- <div className="rect3" />
12
- <div className="rect4" />
13
- <div className="rect5" />
14
- </div>
15
- );
16
- }
@@ -1,45 +0,0 @@
1
- .tg-bounce-loader {
2
- width: 50px;
3
- height: 40px;
4
- text-align: center;
5
- font-size: 10px;
6
- display: flex;
7
- align-items: center;
8
- }
9
-
10
- .tg-bounce-loader > div {
11
- background-color: #006cab;
12
- height: 100%;
13
- max-height: 30px;
14
- width: 6px;
15
- display: inline-block;
16
- margin-right: 3px;
17
- animation: sk-stretchdelay 1.2s infinite ease-in-out;
18
- }
19
-
20
- .tg-bounce-loader .rect2 {
21
- animation-delay: -1.1s;
22
- }
23
-
24
- .tg-bounce-loader .rect3 {
25
- animation-delay: -1s;
26
- }
27
-
28
- .tg-bounce-loader .rect4 {
29
- animation-delay: -0.9s;
30
- }
31
-
32
- .tg-bounce-loader .rect5 {
33
- animation-delay: -0.8s;
34
- }
35
-
36
- @keyframes sk-stretchdelay {
37
- 0%,
38
- 40%,
39
- 100% {
40
- transform: scaleY(0.4);
41
- }
42
- 20% {
43
- transform: scaleY(1);
44
- }
45
- }
@@ -1,68 +0,0 @@
1
- import React, { useState } from "react";
2
- import { Button, Classes, Icon } from "@blueprintjs/core";
3
- import classNames from "classnames";
4
- import "./style.css";
5
-
6
- export default function CollapsibleCard({
7
- title,
8
- icon,
9
- openTitleElements,
10
- noCard = false,
11
- className,
12
- style,
13
- children,
14
- initialClosed = false,
15
- toggle,
16
- isOpen
17
- }) {
18
- let [open, setOpen] = useState(!initialClosed);
19
- if (isOpen !== undefined) open = isOpen;
20
-
21
- const toggleCardInfo = () => {
22
- if (toggle) toggle();
23
- else {
24
- setOpen(!open);
25
- }
26
- };
27
-
28
- return (
29
- <div
30
- className={classNames({ "tg-card": !noCard, open }, className)}
31
- style={{
32
- paddingTop: 10,
33
- paddingBottom: 10,
34
- paddingLeft: 15,
35
- paddingRight: 15,
36
- ...style
37
- }}
38
- >
39
- <div className="tg-card-header" style={{ marginBottom: 8 }}>
40
- <div className="tg-card-header-title">
41
- {icon && <Icon icon={icon} />}
42
- <h6
43
- style={{
44
- marginBottom: 0,
45
- marginRight: 10,
46
- marginLeft: 10
47
- }}
48
- >
49
- {title}
50
- </h6>
51
- <div>{open && openTitleElements}</div>
52
- </div>
53
- <div>
54
- <Button
55
- icon={open ? "minimize" : "maximize"}
56
- className={classNames(
57
- Classes.MINIMAL,
58
- "info-btn",
59
- "tg-collapse-toggle"
60
- )}
61
- onClick={toggleCardInfo}
62
- />
63
- </div>
64
- </div>
65
- {open && children}
66
- </div>
67
- );
68
- }
@@ -1,23 +0,0 @@
1
- /* Use in the place of .bp3-card */
2
- .tg-card {
3
- padding: 20px;
4
- margin-bottom: 20px;
5
- border-radius: 5px;
6
- background: white;
7
- box-shadow:
8
- 0 1px 3px rgba(0, 0, 0, 0.12),
9
- 0 1px 2px rgba(0, 0, 0, 0.18);
10
- }
11
-
12
- .tg-card-header {
13
- display: flex;
14
- flex-direction: row;
15
- justify-content: space-between;
16
- align-items: center;
17
- }
18
-
19
- .tg-card-header-title {
20
- display: flex;
21
- flex-direction: row;
22
- align-items: center;
23
- }
@@ -1,20 +0,0 @@
1
- import React from "react";
2
- import classNames from "classnames";
3
- import "./style.css";
4
-
5
- export default function DNALoader({ style, className }) {
6
- return (
7
- <div className={classNames("dna-loader", className)} style={style}>
8
- <div className="nucleobase" />
9
- <div className="nucleobase" />
10
- <div className="nucleobase" />
11
- <div className="nucleobase" />
12
- <div className="nucleobase" />
13
- <div className="nucleobase" />
14
- <div className="nucleobase" />
15
- <div className="nucleobase" />
16
- <div className="nucleobase" />
17
- <div className="nucleobase" />
18
- </div>
19
- );
20
- }
@@ -1,251 +0,0 @@
1
- .dna-loader {
2
- display: inline-block;
3
- position: relative;
4
- transform: scale(0.45);
5
- }
6
-
7
- .nucleobase {
8
- display: inline-block;
9
- position: relative;
10
- vertical-align: middle;
11
- }
12
-
13
- .nucleobase:not(:last-child) {
14
- margin-right: 4.86vh;
15
- }
16
-
17
- .nucleobase:before,
18
- .nucleobase:after {
19
- content: "";
20
- display: inline-block;
21
- width: 3vh;
22
- height: 3vh;
23
- border-radius: 50%;
24
- position: absolute;
25
- }
26
-
27
- .nucleobase:nth-child(10) {
28
- animation-delay: -1.869s;
29
- }
30
-
31
- .nucleobase:nth-child(10):before {
32
- animation: animBefore 2.1s cubic-bezier(0.42, 0, 0.58, 1) infinite;
33
- animation-delay: -1.869s;
34
- background-color: #339bb9;
35
- }
36
-
37
- .nucleobase:nth-child(10):after {
38
- animation: animAfter 2.1s cubic-bezier(0.42, 0, 0.58, 1) infinite;
39
- animation-delay: -1.869s;
40
- background-color: #006cab;
41
- }
42
-
43
- .nucleobase:nth-child(9) {
44
- animation-delay: -3.738s;
45
- }
46
-
47
- .nucleobase:nth-child(9):before {
48
- animation: animBefore 2.1s cubic-bezier(0.42, 0, 0.58, 1) infinite;
49
- animation-delay: -3.738s;
50
- background-color: #339bb9;
51
- }
52
-
53
- .nucleobase:nth-child(9):after {
54
- animation: animAfter 2.1s cubic-bezier(0.42, 0, 0.58, 1) infinite;
55
- animation-delay: -3.738s;
56
- background-color: #006cab;
57
- }
58
-
59
- .nucleobase:nth-child(8) {
60
- animation-delay: -5.607s;
61
- }
62
-
63
- .nucleobase:nth-child(8):before {
64
- animation: animBefore 2.1s cubic-bezier(0.42, 0, 0.58, 1) infinite;
65
- animation-delay: -5.607s;
66
- background-color: #339bb9;
67
- }
68
-
69
- .nucleobase:nth-child(8):after {
70
- animation: animAfter 2.1s cubic-bezier(0.42, 0, 0.58, 1) infinite;
71
- animation-delay: -5.607s;
72
- background-color: #006cab;
73
- }
74
-
75
- .nucleobase:nth-child(7) {
76
- animation-delay: -7.476s;
77
- }
78
-
79
- .nucleobase:nth-child(7):before {
80
- animation: animBefore 2.1s cubic-bezier(0.42, 0, 0.58, 1) infinite;
81
- animation-delay: -7.476s;
82
- background-color: #339bb9;
83
- }
84
-
85
- .nucleobase:nth-child(7):after {
86
- animation: animAfter 2.1s cubic-bezier(0.42, 0, 0.58, 1) infinite;
87
- animation-delay: -7.476s;
88
- background-color: #006cab;
89
- }
90
-
91
- .nucleobase:nth-child(6) {
92
- animation-delay: -9.345s;
93
- }
94
-
95
- .nucleobase:nth-child(6):before {
96
- animation: animBefore 2.1s cubic-bezier(0.42, 0, 0.58, 1) infinite;
97
- animation-delay: -9.345s;
98
- background-color: #339bb9;
99
- }
100
-
101
- .nucleobase:nth-child(6):after {
102
- animation: animAfter 2.1s cubic-bezier(0.42, 0, 0.58, 1) infinite;
103
- animation-delay: -9.345s;
104
- background-color: #006cab;
105
- }
106
-
107
- .nucleobase:nth-child(5) {
108
- animation-delay: -11.214s;
109
- }
110
-
111
- .nucleobase:nth-child(5):before {
112
- animation: animBefore 2.1s cubic-bezier(0.42, 0, 0.58, 1) infinite;
113
- animation-delay: -11.214s;
114
- background-color: #339bb9;
115
- }
116
-
117
- .nucleobase:nth-child(5):after {
118
- animation: animAfter 2.1s cubic-bezier(0.42, 0, 0.58, 1) infinite;
119
- animation-delay: -11.214s;
120
- background-color: #006cab;
121
- }
122
-
123
- .nucleobase:nth-child(4) {
124
- animation-delay: -13.083s;
125
- }
126
-
127
- .nucleobase:nth-child(4):before {
128
- animation: animBefore 2.1s cubic-bezier(0.42, 0, 0.58, 1) infinite;
129
- animation-delay: -13.083s;
130
- background-color: #339bb9;
131
- }
132
-
133
- .nucleobase:nth-child(4):after {
134
- animation: animAfter 2.1s cubic-bezier(0.42, 0, 0.58, 1) infinite;
135
- animation-delay: -13.083s;
136
- background-color: #006cab;
137
- }
138
-
139
- .nucleobase:nth-child(3) {
140
- animation-delay: -14.952s;
141
- }
142
-
143
- .nucleobase:nth-child(3):before {
144
- animation: animBefore 2.1s cubic-bezier(0.42, 0, 0.58, 1) infinite;
145
- animation-delay: -14.952s;
146
- background-color: #339bb9;
147
- }
148
-
149
- .nucleobase:nth-child(3):after {
150
- animation: animAfter 2.1s cubic-bezier(0.42, 0, 0.58, 1) infinite;
151
- animation-delay: -14.952s;
152
- background-color: #006cab;
153
- }
154
-
155
- .nucleobase:nth-child(2) {
156
- animation-delay: -16.821s;
157
- }
158
-
159
- .nucleobase:nth-child(2):before {
160
- animation: animBefore 2.1s cubic-bezier(0.42, 0, 0.58, 1) infinite;
161
- animation-delay: -16.821s;
162
- background-color: #339bb9;
163
- }
164
-
165
- .nucleobase:nth-child(2):after {
166
- animation: animAfter 2.1s cubic-bezier(0.42, 0, 0.58, 1) infinite;
167
- animation-delay: -16.821s;
168
- background-color: #006cab;
169
- }
170
-
171
- .nucleobase:nth-child(1) {
172
- animation-delay: -18.69s;
173
- }
174
-
175
- .nucleobase:nth-child(1):before {
176
- animation: animBefore 2.1s cubic-bezier(0.42, 0, 0.58, 1) infinite;
177
- animation-delay: -18.69s;
178
- background-color: #339bb9;
179
- }
180
-
181
- .nucleobase:nth-child(1):after {
182
- animation: animAfter 2.1s cubic-bezier(0.42, 0, 0.58, 1) infinite;
183
- animation-delay: -18.69s;
184
- background-color: #006cab;
185
- }
186
-
187
- @keyframes animBefore {
188
- 0% {
189
- top: -6vh;
190
- z-index: 1;
191
- }
192
- 25% {
193
- transform: scale(1.2);
194
- z-index: 1;
195
- }
196
- 50% {
197
- top: 6vh;
198
- z-index: -1;
199
- }
200
- 75% {
201
- background-color: #5bc0de;
202
- transform: scale(0.8);
203
- z-index: -1;
204
- }
205
- 100% {
206
- top: -6vh;
207
- z-index: -1;
208
- }
209
- }
210
-
211
- @keyframes animAfter {
212
- 0% {
213
- top: 6vh;
214
- z-index: -1;
215
- }
216
- 25% {
217
- background-color: #055e75;
218
- transform: scale(0.8);
219
- z-index: -1;
220
- }
221
- 50% {
222
- top: -6vh;
223
- z-index: 1;
224
- }
225
- 75% {
226
- transform: scale(1.2);
227
- z-index: 1;
228
- }
229
- 100% {
230
- top: 6vh;
231
- z-index: 1;
232
- }
233
- }
234
-
235
- @keyframes animDotBar {
236
- 0% {
237
- height: 8.25vh;
238
- }
239
- 25% {
240
- height: 0;
241
- }
242
- 50% {
243
- height: 8.25vh;
244
- }
245
- 75% {
246
- height: 0;
247
- }
248
- 100% {
249
- height: 8.25vh;
250
- }
251
- }