@teselagen/ui 0.7.35 → 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 (160) hide show
  1. package/isBeingCalledExcessively.js +1 -0
  2. package/package.json +1 -1
  3. package/DataTable/utils/filterLocalEntitiesToHasura.d.ts +0 -5
  4. package/DataTable/utils/initializeHasuraWhereAndFilter.d.ts +0 -2
  5. package/DataTable/utils/tableQueryParamsToHasuraClauses.d.ts +0 -26
  6. package/src/AdvancedOptions.js +0 -33
  7. package/src/AdvancedOptions.spec.js +0 -26
  8. package/src/AssignDefaultsModeContext.js +0 -22
  9. package/src/AsyncValidateFieldSpinner/index.js +0 -12
  10. package/src/BlueprintError/index.js +0 -14
  11. package/src/BounceLoader/index.js +0 -16
  12. package/src/BounceLoader/style.css +0 -45
  13. package/src/CollapsibleCard/index.js +0 -68
  14. package/src/CollapsibleCard/style.css +0 -23
  15. package/src/DNALoader/index.js +0 -20
  16. package/src/DNALoader/style.css +0 -251
  17. package/src/DataTable/CellDragHandle.js +0 -132
  18. package/src/DataTable/ColumnFilterMenu.js +0 -62
  19. package/src/DataTable/Columns.js +0 -979
  20. package/src/DataTable/DisabledLoadingComponent.js +0 -15
  21. package/src/DataTable/DisplayOptions.js +0 -199
  22. package/src/DataTable/DropdownCell.js +0 -61
  23. package/src/DataTable/EditableCell.js +0 -44
  24. package/src/DataTable/FilterAndSortMenu.js +0 -388
  25. package/src/DataTable/PagingTool.js +0 -225
  26. package/src/DataTable/RenderCell.js +0 -191
  27. package/src/DataTable/SearchBar.js +0 -69
  28. package/src/DataTable/SortableColumns.js +0 -100
  29. package/src/DataTable/TableFormTrackerContext.js +0 -10
  30. package/src/DataTable/ThComponent.js +0 -44
  31. package/src/DataTable/dataTableEnhancer.js +0 -41
  32. package/src/DataTable/defaultFormatters.js +0 -32
  33. package/src/DataTable/defaultValidators.js +0 -40
  34. package/src/DataTable/editCellHelper.js +0 -44
  35. package/src/DataTable/getCellVal.js +0 -20
  36. package/src/DataTable/getVals.js +0 -8
  37. package/src/DataTable/index.js +0 -3209
  38. package/src/DataTable/isTruthy.js +0 -12
  39. package/src/DataTable/isValueEmpty.js +0 -3
  40. package/src/DataTable/style.css +0 -608
  41. package/src/DataTable/utils/convertSchema.js +0 -69
  42. package/src/DataTable/utils/filterLocalEntitiesToHasura.js +0 -236
  43. package/src/DataTable/utils/filterLocalEntitiesToHasura.test.js +0 -587
  44. package/src/DataTable/utils/formatPasteData.js +0 -16
  45. package/src/DataTable/utils/getAllRows.js +0 -11
  46. package/src/DataTable/utils/getCellCopyText.js +0 -7
  47. package/src/DataTable/utils/getCellInfo.js +0 -36
  48. package/src/DataTable/utils/getFieldPathToField.js +0 -7
  49. package/src/DataTable/utils/getIdOrCodeOrIndex.js +0 -9
  50. package/src/DataTable/utils/getLastSelectedEntity.js +0 -11
  51. package/src/DataTable/utils/getNewEntToSelect.js +0 -25
  52. package/src/DataTable/utils/getRowCopyText.js +0 -28
  53. package/src/DataTable/utils/getTableConfigFromStorage.js +0 -5
  54. package/src/DataTable/utils/handleCopyColumn.js +0 -21
  55. package/src/DataTable/utils/handleCopyHelper.js +0 -15
  56. package/src/DataTable/utils/handleCopyRows.js +0 -23
  57. package/src/DataTable/utils/handleCopyTable.js +0 -16
  58. package/src/DataTable/utils/index.js +0 -55
  59. package/src/DataTable/utils/initializeHasuraWhereAndFilter.js +0 -26
  60. package/src/DataTable/utils/isBottomRightCornerOfRectangle.js +0 -20
  61. package/src/DataTable/utils/isEntityClean.js +0 -15
  62. package/src/DataTable/utils/primarySelectedValue.js +0 -1
  63. package/src/DataTable/utils/queryParams.js +0 -350
  64. package/src/DataTable/utils/removeCleanRows.js +0 -22
  65. package/src/DataTable/utils/rowClick.js +0 -181
  66. package/src/DataTable/utils/selection.js +0 -8
  67. package/src/DataTable/utils/tableQueryParamsToHasuraClauses.js +0 -253
  68. package/src/DataTable/utils/tableQueryParamsToHasuraClauses.test.js +0 -206
  69. package/src/DataTable/utils/useTableEntities.js +0 -38
  70. package/src/DataTable/utils/utils.js +0 -37
  71. package/src/DataTable/utils/withSelectedEntities.js +0 -65
  72. package/src/DataTable/utils/withTableParams.js +0 -288
  73. package/src/DataTable/validateTableWideErrors.js +0 -160
  74. package/src/DataTable/viewColumn.js +0 -97
  75. package/src/DialogFooter/index.js +0 -86
  76. package/src/DialogFooter/style.css +0 -9
  77. package/src/DropdownButton.js +0 -36
  78. package/src/FillWindow.css +0 -6
  79. package/src/FillWindow.js +0 -69
  80. package/src/FormComponents/FormSeparator.js +0 -9
  81. package/src/FormComponents/LoadingDots.js +0 -14
  82. package/src/FormComponents/Uploader.js +0 -1278
  83. package/src/FormComponents/getNewName.js +0 -31
  84. package/src/FormComponents/index.js +0 -1266
  85. package/src/FormComponents/itemUpload.js +0 -84
  86. package/src/FormComponents/sortify.js +0 -73
  87. package/src/FormComponents/style.css +0 -275
  88. package/src/FormComponents/tryToMatchSchemas.js +0 -264
  89. package/src/FormComponents/utils.js +0 -6
  90. package/src/HotkeysDialog/index.js +0 -79
  91. package/src/HotkeysDialog/style.css +0 -54
  92. package/src/InfoHelper/index.js +0 -78
  93. package/src/InfoHelper/style.css +0 -7
  94. package/src/IntentText/index.js +0 -18
  95. package/src/Loading/index.js +0 -70
  96. package/src/Loading/style.css +0 -4
  97. package/src/MatchHeaders.js +0 -234
  98. package/src/MenuBar/index.js +0 -423
  99. package/src/MenuBar/style.css +0 -45
  100. package/src/PromptUnsavedChanges/index.js +0 -38
  101. package/src/ResizableDraggableDialog/index.js +0 -141
  102. package/src/ResizableDraggableDialog/style.css +0 -42
  103. package/src/ScrollToTop/index.js +0 -72
  104. package/src/SimpleStepViz.js +0 -22
  105. package/src/Tag.js +0 -112
  106. package/src/TagSelect/index.js +0 -69
  107. package/src/TagSelect/style.css +0 -13
  108. package/src/TgHtmlSelect/index.js +0 -20
  109. package/src/TgSelect/index.js +0 -537
  110. package/src/TgSelect/style.css +0 -61
  111. package/src/TgSuggest/index.js +0 -124
  112. package/src/Timeline/TimelineEvent.js +0 -31
  113. package/src/Timeline/index.js +0 -15
  114. package/src/Timeline/style.css +0 -29
  115. package/src/UploadCsvWizard.css +0 -4
  116. package/src/UploadCsvWizard.js +0 -719
  117. package/src/autoTooltip.js +0 -201
  118. package/src/constants.js +0 -1
  119. package/src/customIcons.js +0 -361
  120. package/src/enhancers/withDialog/index.js +0 -196
  121. package/src/enhancers/withDialog/tg_modalState.js +0 -47
  122. package/src/enhancers/withField.js +0 -20
  123. package/src/enhancers/withFields.js +0 -11
  124. package/src/enhancers/withLocalStorage.js +0 -11
  125. package/src/index.js +0 -88
  126. package/src/rerenderOnWindowResize.js +0 -26
  127. package/src/showAppSpinner.js +0 -12
  128. package/src/showConfirmationDialog/index.js +0 -148
  129. package/src/showDialogOnDocBody.js +0 -33
  130. package/src/style.css +0 -265
  131. package/src/throwFormError.js +0 -16
  132. package/src/toastr.js +0 -148
  133. package/src/typeToCommonType.js +0 -6
  134. package/src/useDialog.js +0 -63
  135. package/src/utils/adHoc.js +0 -10
  136. package/src/utils/basicHandleActionsWithFullState.js +0 -14
  137. package/src/utils/browserUtils.js +0 -3
  138. package/src/utils/combineReducersWithFullState.js +0 -14
  139. package/src/utils/commandControls.js +0 -82
  140. package/src/utils/commandUtils.js +0 -112
  141. package/src/utils/determineBlackOrWhiteTextColor.js +0 -4
  142. package/src/utils/getDayjsFormatter.js +0 -35
  143. package/src/utils/getTextFromEl.js +0 -28
  144. package/src/utils/handlerHelpers.js +0 -24
  145. package/src/utils/hooks/index.js +0 -1
  146. package/src/utils/hooks/useDeepEqualMemo.js +0 -15
  147. package/src/utils/hooks/useStableReference.js +0 -9
  148. package/src/utils/hotkeyUtils.js +0 -131
  149. package/src/utils/isBeingCalledExcessively.js +0 -24
  150. package/src/utils/menuUtils.js +0 -433
  151. package/src/utils/popoverOverflowModifiers.js +0 -11
  152. package/src/utils/pureNoFunc.js +0 -31
  153. package/src/utils/renderOnDoc.js +0 -32
  154. package/src/utils/showProgressToast.js +0 -22
  155. package/src/utils/tagUtils.js +0 -45
  156. package/src/utils/tgFormValues.js +0 -35
  157. package/src/utils/useTraceUpdate.js +0 -19
  158. package/src/utils/withSelectTableRecords.js +0 -43
  159. package/src/utils/withStore.js +0 -10
  160. 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") {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@teselagen/ui",
3
- "version": "0.7.35",
3
+ "version": "0.7.36",
4
4
  "main": "./src/index.js",
5
5
  "type": "module",
6
6
  "exports": {
@@ -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
- }