@teselagen/ui 0.7.33-beta.2 → 0.7.33-beta.4

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 (248) hide show
  1. package/package.json +1 -1
  2. package/src/AdvancedOptions.spec.js +26 -0
  3. package/src/AsyncValidateFieldSpinner/index.js +12 -0
  4. package/src/BlueprintError/index.js +14 -0
  5. package/src/BounceLoader/index.js +16 -0
  6. package/src/BounceLoader/style.css +45 -0
  7. package/src/CollapsibleCard/index.js +68 -0
  8. package/src/CollapsibleCard/style.css +23 -0
  9. package/src/DNALoader/index.js +20 -0
  10. package/src/DNALoader/style.css +251 -0
  11. package/src/DataTable/index.js +3209 -0
  12. package/src/DataTable/style.css +608 -0
  13. package/src/DataTable/utils/filterLocalEntitiesToHasura.test.js +515 -0
  14. package/src/DataTable/utils/index.js +55 -0
  15. package/src/DataTable/utils/simplifyHasuraWhere.test.js +73 -0
  16. package/src/DataTable/utils/tableQueryParamsToHasuraClauses.test.js +219 -0
  17. package/src/DialogFooter/index.js +86 -0
  18. package/src/DialogFooter/style.css +9 -0
  19. package/src/FormComponents/index.js +1266 -0
  20. package/src/FormComponents/style.css +275 -0
  21. package/src/FormComponents/utils.js +6 -0
  22. package/src/HotkeysDialog/index.js +79 -0
  23. package/src/HotkeysDialog/style.css +54 -0
  24. package/src/InfoHelper/index.js +78 -0
  25. package/src/InfoHelper/style.css +7 -0
  26. package/src/IntentText/index.js +18 -0
  27. package/src/Loading/index.js +70 -0
  28. package/src/Loading/style.css +4 -0
  29. package/src/MenuBar/index.js +423 -0
  30. package/src/MenuBar/style.css +45 -0
  31. package/src/PromptUnsavedChanges/index.js +38 -0
  32. package/src/ResizableDraggableDialog/index.js +141 -0
  33. package/src/ResizableDraggableDialog/style.css +42 -0
  34. package/src/ScrollToTop/index.js +72 -0
  35. package/src/TagSelect/index.js +69 -0
  36. package/src/TagSelect/style.css +13 -0
  37. package/src/TgHtmlSelect/index.js +20 -0
  38. package/src/TgSelect/index.js +537 -0
  39. package/src/TgSelect/style.css +61 -0
  40. package/src/TgSuggest/index.js +124 -0
  41. package/src/Timeline/index.js +15 -0
  42. package/src/enhancers/withDialog/index.js +196 -0
  43. package/src/index.js +88 -1
  44. package/src/showConfirmationDialog/index.js +148 -0
  45. package/src/style.css +260 -24
  46. package/AdvancedOptions.js +0 -33
  47. package/AssignDefaultsModeContext.js +0 -22
  48. package/DropdownButton.js +0 -36
  49. package/FillWindow.css +0 -6
  50. package/FillWindow.js +0 -69
  51. package/MatchHeaders.js +0 -234
  52. package/SimpleStepViz.js +0 -22
  53. package/Tag.js +0 -112
  54. package/UploadCsvWizard.css +0 -4
  55. package/UploadCsvWizard.js +0 -719
  56. package/autoTooltip.js +0 -201
  57. package/constants.js +0 -1
  58. package/customIcons.js +0 -361
  59. package/rerenderOnWindowResize.js +0 -26
  60. package/showAppSpinner.js +0 -12
  61. package/showDialogOnDocBody.js +0 -33
  62. package/src/CellDragHandle.js +0 -132
  63. package/src/ColumnFilterMenu.js +0 -62
  64. package/src/Columns.js +0 -979
  65. package/src/DisabledLoadingComponent.js +0 -15
  66. package/src/DisplayOptions.js +0 -199
  67. package/src/DropdownCell.js +0 -61
  68. package/src/EditableCell.js +0 -44
  69. package/src/FilterAndSortMenu.js +0 -388
  70. package/src/FormSeparator.js +0 -9
  71. package/src/LoadingDots.js +0 -14
  72. package/src/PagingTool.js +0 -225
  73. package/src/RenderCell.js +0 -191
  74. package/src/SearchBar.js +0 -69
  75. package/src/SortableColumns.js +0 -100
  76. package/src/TableFormTrackerContext.js +0 -10
  77. package/src/ThComponent.js +0 -44
  78. package/src/TimelineEvent.js +0 -31
  79. package/src/Uploader.js +0 -1278
  80. package/src/adHoc.js +0 -10
  81. package/src/basicHandleActionsWithFullState.js +0 -14
  82. package/src/browserUtils.js +0 -3
  83. package/src/combineReducersWithFullState.js +0 -14
  84. package/src/commandControls.js +0 -82
  85. package/src/commandUtils.js +0 -112
  86. package/src/convertSchema.js +0 -69
  87. package/src/dataTableEnhancer.js +0 -41
  88. package/src/defaultFormatters.js +0 -32
  89. package/src/defaultValidators.js +0 -40
  90. package/src/determineBlackOrWhiteTextColor.js +0 -4
  91. package/src/editCellHelper.js +0 -44
  92. package/src/filterLocalEntitiesToHasura.js +0 -216
  93. package/src/formatPasteData.js +0 -16
  94. package/src/getAllRows.js +0 -11
  95. package/src/getCellCopyText.js +0 -7
  96. package/src/getCellInfo.js +0 -36
  97. package/src/getCellVal.js +0 -20
  98. package/src/getDayjsFormatter.js +0 -35
  99. package/src/getFieldPathToField.js +0 -7
  100. package/src/getIdOrCodeOrIndex.js +0 -9
  101. package/src/getLastSelectedEntity.js +0 -11
  102. package/src/getNewEntToSelect.js +0 -25
  103. package/src/getNewName.js +0 -31
  104. package/src/getRowCopyText.js +0 -28
  105. package/src/getTableConfigFromStorage.js +0 -5
  106. package/src/getTextFromEl.js +0 -28
  107. package/src/getVals.js +0 -8
  108. package/src/handleCopyColumn.js +0 -21
  109. package/src/handleCopyHelper.js +0 -15
  110. package/src/handleCopyRows.js +0 -23
  111. package/src/handleCopyTable.js +0 -16
  112. package/src/handlerHelpers.js +0 -24
  113. package/src/hotkeyUtils.js +0 -131
  114. package/src/initializeHasuraWhereAndFilter.js +0 -27
  115. package/src/isBeingCalledExcessively.js +0 -24
  116. package/src/isBottomRightCornerOfRectangle.js +0 -20
  117. package/src/isEntityClean.js +0 -15
  118. package/src/isTruthy.js +0 -12
  119. package/src/isValueEmpty.js +0 -3
  120. package/src/itemUpload.js +0 -84
  121. package/src/menuUtils.js +0 -433
  122. package/src/popoverOverflowModifiers.js +0 -11
  123. package/src/primarySelectedValue.js +0 -1
  124. package/src/pureNoFunc.js +0 -31
  125. package/src/queryParams.js +0 -336
  126. package/src/removeCleanRows.js +0 -22
  127. package/src/renderOnDoc.js +0 -32
  128. package/src/rowClick.js +0 -181
  129. package/src/selection.js +0 -8
  130. package/src/showProgressToast.js +0 -22
  131. package/src/simplifyHasuraWhere.js +0 -80
  132. package/src/sortify.js +0 -73
  133. package/tableQueryParamsToHasuraClauses.js +0 -113
  134. package/tagUtils.js +0 -45
  135. package/tgFormValues.js +0 -35
  136. package/tg_modalState.js +0 -47
  137. package/throwFormError.js +0 -16
  138. package/toastr.js +0 -148
  139. package/tryToMatchSchemas.js +0 -264
  140. package/typeToCommonType.js +0 -6
  141. package/useDeepEqualMemo.js +0 -15
  142. package/useDialog.js +0 -63
  143. package/useStableReference.js +0 -9
  144. package/useTableEntities.js +0 -38
  145. package/useTraceUpdate.js +0 -19
  146. package/utils.js +0 -37
  147. package/validateTableWideErrors.js +0 -160
  148. package/viewColumn.js +0 -97
  149. package/withField.js +0 -20
  150. package/withFields.js +0 -11
  151. package/withLocalStorage.js +0 -11
  152. package/withSelectTableRecords.js +0 -43
  153. package/withSelectedEntities.js +0 -65
  154. package/withStore.js +0 -10
  155. package/withTableParams.js +0 -288
  156. package/wrapDialog.js +0 -116
  157. /package/{CellDragHandle.js → src/DataTable/CellDragHandle.js} +0 -0
  158. /package/{ColumnFilterMenu.js → src/DataTable/ColumnFilterMenu.js} +0 -0
  159. /package/{Columns.js → src/DataTable/Columns.js} +0 -0
  160. /package/{DisabledLoadingComponent.js → src/DataTable/DisabledLoadingComponent.js} +0 -0
  161. /package/{DisplayOptions.js → src/DataTable/DisplayOptions.js} +0 -0
  162. /package/{DropdownCell.js → src/DataTable/DropdownCell.js} +0 -0
  163. /package/{EditableCell.js → src/DataTable/EditableCell.js} +0 -0
  164. /package/{FilterAndSortMenu.js → src/DataTable/FilterAndSortMenu.js} +0 -0
  165. /package/{PagingTool.js → src/DataTable/PagingTool.js} +0 -0
  166. /package/{RenderCell.js → src/DataTable/RenderCell.js} +0 -0
  167. /package/{SearchBar.js → src/DataTable/SearchBar.js} +0 -0
  168. /package/{SortableColumns.js → src/DataTable/SortableColumns.js} +0 -0
  169. /package/{TableFormTrackerContext.js → src/DataTable/TableFormTrackerContext.js} +0 -0
  170. /package/{ThComponent.js → src/DataTable/ThComponent.js} +0 -0
  171. /package/{dataTableEnhancer.js → src/DataTable/dataTableEnhancer.js} +0 -0
  172. /package/{defaultFormatters.js → src/DataTable/defaultFormatters.js} +0 -0
  173. /package/{defaultValidators.js → src/DataTable/defaultValidators.js} +0 -0
  174. /package/{editCellHelper.js → src/DataTable/editCellHelper.js} +0 -0
  175. /package/{getCellVal.js → src/DataTable/getCellVal.js} +0 -0
  176. /package/{getVals.js → src/DataTable/getVals.js} +0 -0
  177. /package/{isTruthy.js → src/DataTable/isTruthy.js} +0 -0
  178. /package/{isValueEmpty.js → src/DataTable/isValueEmpty.js} +0 -0
  179. /package/{convertSchema.js → src/DataTable/utils/convertSchema.js} +0 -0
  180. /package/{filterLocalEntitiesToHasura.js → src/DataTable/utils/filterLocalEntitiesToHasura.js} +0 -0
  181. /package/{formatPasteData.js → src/DataTable/utils/formatPasteData.js} +0 -0
  182. /package/{getAllRows.js → src/DataTable/utils/getAllRows.js} +0 -0
  183. /package/{getCellCopyText.js → src/DataTable/utils/getCellCopyText.js} +0 -0
  184. /package/{getCellInfo.js → src/DataTable/utils/getCellInfo.js} +0 -0
  185. /package/{getFieldPathToField.js → src/DataTable/utils/getFieldPathToField.js} +0 -0
  186. /package/{getIdOrCodeOrIndex.js → src/DataTable/utils/getIdOrCodeOrIndex.js} +0 -0
  187. /package/{getLastSelectedEntity.js → src/DataTable/utils/getLastSelectedEntity.js} +0 -0
  188. /package/{getNewEntToSelect.js → src/DataTable/utils/getNewEntToSelect.js} +0 -0
  189. /package/{getRowCopyText.js → src/DataTable/utils/getRowCopyText.js} +0 -0
  190. /package/{getTableConfigFromStorage.js → src/DataTable/utils/getTableConfigFromStorage.js} +0 -0
  191. /package/{handleCopyColumn.js → src/DataTable/utils/handleCopyColumn.js} +0 -0
  192. /package/{handleCopyHelper.js → src/DataTable/utils/handleCopyHelper.js} +0 -0
  193. /package/{handleCopyRows.js → src/DataTable/utils/handleCopyRows.js} +0 -0
  194. /package/{handleCopyTable.js → src/DataTable/utils/handleCopyTable.js} +0 -0
  195. /package/{initializeHasuraWhereAndFilter.js → src/DataTable/utils/initializeHasuraWhereAndFilter.js} +0 -0
  196. /package/{isBottomRightCornerOfRectangle.js → src/DataTable/utils/isBottomRightCornerOfRectangle.js} +0 -0
  197. /package/{isEntityClean.js → src/DataTable/utils/isEntityClean.js} +0 -0
  198. /package/{primarySelectedValue.js → src/DataTable/utils/primarySelectedValue.js} +0 -0
  199. /package/{queryParams.js → src/DataTable/utils/queryParams.js} +0 -0
  200. /package/{removeCleanRows.js → src/DataTable/utils/removeCleanRows.js} +0 -0
  201. /package/{rowClick.js → src/DataTable/utils/rowClick.js} +0 -0
  202. /package/{selection.js → src/DataTable/utils/selection.js} +0 -0
  203. /package/{simplifyHasuraWhere.js → src/DataTable/utils/simplifyHasuraWhere.js} +0 -0
  204. /package/src/{tableQueryParamsToHasuraClauses.js → DataTable/utils/tableQueryParamsToHasuraClauses.js} +0 -0
  205. /package/src/{useTableEntities.js → DataTable/utils/useTableEntities.js} +0 -0
  206. /package/src/{utils.js → DataTable/utils/utils.js} +0 -0
  207. /package/src/{withSelectedEntities.js → DataTable/utils/withSelectedEntities.js} +0 -0
  208. /package/src/{withTableParams.js → DataTable/utils/withTableParams.js} +0 -0
  209. /package/src/{validateTableWideErrors.js → DataTable/validateTableWideErrors.js} +0 -0
  210. /package/src/{viewColumn.js → DataTable/viewColumn.js} +0 -0
  211. /package/{FormSeparator.js → src/FormComponents/FormSeparator.js} +0 -0
  212. /package/{LoadingDots.js → src/FormComponents/LoadingDots.js} +0 -0
  213. /package/{Uploader.js → src/FormComponents/Uploader.js} +0 -0
  214. /package/{getNewName.js → src/FormComponents/getNewName.js} +0 -0
  215. /package/{itemUpload.js → src/FormComponents/itemUpload.js} +0 -0
  216. /package/{sortify.js → src/FormComponents/sortify.js} +0 -0
  217. /package/src/{tryToMatchSchemas.js → FormComponents/tryToMatchSchemas.js} +0 -0
  218. /package/{TimelineEvent.js → src/Timeline/TimelineEvent.js} +0 -0
  219. /package/{style.css → src/Timeline/style.css} +0 -0
  220. /package/src/{tg_modalState.js → enhancers/withDialog/tg_modalState.js} +0 -0
  221. /package/src/{withField.js → enhancers/withField.js} +0 -0
  222. /package/src/{withFields.js → enhancers/withFields.js} +0 -0
  223. /package/src/{withLocalStorage.js → enhancers/withLocalStorage.js} +0 -0
  224. /package/{adHoc.js → src/utils/adHoc.js} +0 -0
  225. /package/{basicHandleActionsWithFullState.js → src/utils/basicHandleActionsWithFullState.js} +0 -0
  226. /package/{browserUtils.js → src/utils/browserUtils.js} +0 -0
  227. /package/{combineReducersWithFullState.js → src/utils/combineReducersWithFullState.js} +0 -0
  228. /package/{commandControls.js → src/utils/commandControls.js} +0 -0
  229. /package/{commandUtils.js → src/utils/commandUtils.js} +0 -0
  230. /package/{determineBlackOrWhiteTextColor.js → src/utils/determineBlackOrWhiteTextColor.js} +0 -0
  231. /package/{getDayjsFormatter.js → src/utils/getDayjsFormatter.js} +0 -0
  232. /package/{getTextFromEl.js → src/utils/getTextFromEl.js} +0 -0
  233. /package/{handlerHelpers.js → src/utils/handlerHelpers.js} +0 -0
  234. /package/{index.js → src/utils/hooks/index.js} +0 -0
  235. /package/src/{useDeepEqualMemo.js → utils/hooks/useDeepEqualMemo.js} +0 -0
  236. /package/src/{useStableReference.js → utils/hooks/useStableReference.js} +0 -0
  237. /package/{hotkeyUtils.js → src/utils/hotkeyUtils.js} +0 -0
  238. /package/{isBeingCalledExcessively.js → src/utils/isBeingCalledExcessively.js} +0 -0
  239. /package/{menuUtils.js → src/utils/menuUtils.js} +0 -0
  240. /package/{popoverOverflowModifiers.js → src/utils/popoverOverflowModifiers.js} +0 -0
  241. /package/{pureNoFunc.js → src/utils/pureNoFunc.js} +0 -0
  242. /package/{renderOnDoc.js → src/utils/renderOnDoc.js} +0 -0
  243. /package/{showProgressToast.js → src/utils/showProgressToast.js} +0 -0
  244. /package/src/{tagUtils.js → utils/tagUtils.js} +0 -0
  245. /package/src/{tgFormValues.js → utils/tgFormValues.js} +0 -0
  246. /package/src/{useTraceUpdate.js → utils/useTraceUpdate.js} +0 -0
  247. /package/src/{withSelectTableRecords.js → utils/withSelectTableRecords.js} +0 -0
  248. /package/src/{withStore.js → utils/withStore.js} +0 -0
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@teselagen/ui",
3
- "version": "0.7.33-beta.2",
3
+ "version": "0.7.33-beta.4",
4
4
  "main": "./src/index.js",
5
5
  "type": "module",
6
6
  "exports": {
@@ -0,0 +1,26 @@
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
+ });
@@ -0,0 +1,12 @@
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
+ }
@@ -0,0 +1,14 @@
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
+ }
@@ -0,0 +1,16 @@
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
+ }
@@ -0,0 +1,45 @@
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
+ }
@@ -0,0 +1,68 @@
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
+ }
@@ -0,0 +1,23 @@
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
+ }
@@ -0,0 +1,20 @@
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
+ }
@@ -0,0 +1,251 @@
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
+ }