@teselagen/ui 0.0.11 → 0.0.12
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.
- package/README.md +7 -0
- package/cypress.config.ts +6 -0
- package/index.html +12 -0
- package/package.json +2 -2
- package/project.json +74 -0
- package/src/AdvancedOptions.js +33 -0
- package/src/AdvancedOptions.spec.js +24 -0
- package/src/AssignDefaultsModeContext.js +21 -0
- package/src/AsyncValidateFieldSpinner/index.js +12 -0
- package/src/BlueprintError/index.js +14 -0
- package/src/BounceLoader/index.js +16 -0
- package/src/BounceLoader/style.css +45 -0
- package/src/CollapsibleCard/index.js +92 -0
- package/src/CollapsibleCard/style.css +21 -0
- package/src/DNALoader/index.js +20 -0
- package/src/DNALoader/style.css +251 -0
- package/src/DataTable/CellDragHandle.js +130 -0
- package/src/DataTable/DisabledLoadingComponent.js +15 -0
- package/src/DataTable/DisplayOptions.js +218 -0
- package/src/DataTable/FilterAndSortMenu.js +397 -0
- package/src/DataTable/PagingTool.js +232 -0
- package/src/DataTable/SearchBar.js +57 -0
- package/src/DataTable/SortableColumns.js +53 -0
- package/src/DataTable/TableFormTrackerContext.js +10 -0
- package/src/DataTable/dataTableEnhancer.js +291 -0
- package/src/DataTable/defaultFormatters.js +32 -0
- package/src/DataTable/defaultProps.js +45 -0
- package/src/DataTable/defaultValidators.js +40 -0
- package/src/DataTable/editCellHelper.js +44 -0
- package/src/DataTable/getCellVal.js +20 -0
- package/src/DataTable/getVals.js +8 -0
- package/src/DataTable/index.js +3537 -0
- package/src/DataTable/isTruthy.js +12 -0
- package/src/DataTable/isValueEmpty.js +3 -0
- package/src/DataTable/style.css +600 -0
- package/src/DataTable/utils/computePresets.js +42 -0
- package/src/DataTable/utils/convertSchema.js +69 -0
- package/src/DataTable/utils/getIdOrCodeOrIndex.js +9 -0
- package/src/DataTable/utils/getTableConfigFromStorage.js +5 -0
- package/src/DataTable/utils/queryParams.js +1032 -0
- package/src/DataTable/utils/rowClick.js +156 -0
- package/src/DataTable/utils/selection.js +8 -0
- package/src/DataTable/utils/withSelectedEntities.js +65 -0
- package/src/DataTable/utils/withTableParams.js +328 -0
- package/src/DataTable/validateTableWideErrors.js +135 -0
- package/src/DataTable/viewColumn.js +37 -0
- package/src/DialogFooter/index.js +79 -0
- package/src/DialogFooter/style.css +9 -0
- package/src/DropdownButton.js +36 -0
- package/src/FillWindow.css +6 -0
- package/src/FillWindow.js +69 -0
- package/src/FormComponents/Uploader.js +1197 -0
- package/src/FormComponents/getNewName.js +31 -0
- package/src/FormComponents/index.js +1384 -0
- package/src/FormComponents/itemUpload.js +84 -0
- package/src/FormComponents/sortify.js +73 -0
- package/src/FormComponents/style.css +247 -0
- package/src/FormComponents/tryToMatchSchemas.js +222 -0
- package/src/FormComponents/utils.js +6 -0
- package/src/HotkeysDialog/index.js +79 -0
- package/src/HotkeysDialog/style.css +54 -0
- package/src/InfoHelper/index.js +83 -0
- package/src/InfoHelper/style.css +7 -0
- package/src/IntentText/index.js +18 -0
- package/src/Loading/index.js +74 -0
- package/src/Loading/style.css +4 -0
- package/src/MatchHeaders.js +223 -0
- package/src/MenuBar/index.js +416 -0
- package/src/MenuBar/style.css +45 -0
- package/src/PromptUnsavedChanges/index.js +40 -0
- package/src/ResizableDraggableDialog/index.js +138 -0
- package/src/ResizableDraggableDialog/style.css +42 -0
- package/src/ScrollToTop/index.js +72 -0
- package/src/SimpleStepViz.js +26 -0
- package/src/TgSelect/index.js +465 -0
- package/src/TgSelect/style.css +34 -0
- package/src/TgSuggest/index.js +121 -0
- package/src/Timeline/TimelineEvent.js +31 -0
- package/src/Timeline/index.js +22 -0
- package/src/Timeline/style.css +29 -0
- package/src/UploadCsvWizard.css +4 -0
- package/src/UploadCsvWizard.js +731 -0
- package/src/autoTooltip.js +89 -0
- package/src/constants.js +1 -0
- package/src/customIcons.js +361 -0
- package/src/enhancers/withDialog/index.js +196 -0
- package/src/enhancers/withDialog/tg_modalState.js +46 -0
- package/src/enhancers/withField.js +20 -0
- package/src/enhancers/withFields.js +11 -0
- package/src/enhancers/withLocalStorage.js +11 -0
- package/src/index.js +76 -0
- package/src/rerenderOnWindowResize.js +27 -0
- package/src/showAppSpinner.js +12 -0
- package/src/showConfirmationDialog/index.js +116 -0
- package/src/showDialogOnDocBody.js +37 -0
- package/src/style.css +214 -0
- package/src/toastr.js +92 -0
- package/src/typeToCommonType.js +6 -0
- package/src/useDialog.js +64 -0
- package/src/utils/S3Download.js +14 -0
- package/src/utils/adHoc.js +10 -0
- package/src/utils/basicHandleActionsWithFullState.js +14 -0
- package/src/utils/combineReducersWithFullState.js +14 -0
- package/src/utils/commandControls.js +83 -0
- package/src/utils/commandUtils.js +112 -0
- package/src/utils/determineBlackOrWhiteTextColor.js +4 -0
- package/src/utils/getDayjsFormatter.js +35 -0
- package/src/utils/getTextFromEl.js +28 -0
- package/src/utils/handlerHelpers.js +30 -0
- package/src/utils/hotkeyUtils.js +129 -0
- package/src/utils/menuUtils.js +402 -0
- package/src/utils/popoverOverflowModifiers.js +11 -0
- package/src/utils/pureNoFunc.js +31 -0
- package/src/utils/renderOnDoc.js +29 -0
- package/src/utils/showProgressToast.js +22 -0
- package/src/utils/tagUtils.js +45 -0
- package/src/utils/tgFormValues.js +32 -0
- package/src/utils/withSelectTableRecords.js +38 -0
- package/src/utils/withStore.js +10 -0
- package/src/wrapDialog.js +112 -0
- package/tsconfig.json +4 -0
- package/vite.config.ts +7 -0
- package/index.mjs +0 -109378
- package/index.umd.js +0 -109381
- package/style.css +0 -10421
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
import { Suggest } from "@blueprintjs/select";
|
|
2
|
+
import { Keys } from "@blueprintjs/core";
|
|
3
|
+
import React from "react";
|
|
4
|
+
import classNames from "classnames";
|
|
5
|
+
import { itemListPredicate } from "../TgSelect";
|
|
6
|
+
|
|
7
|
+
class TgSuggest extends React.Component {
|
|
8
|
+
static defaultProps = {
|
|
9
|
+
// eslint-disable-next-line @typescript-eslint/no-empty-function
|
|
10
|
+
onChange: () => {},
|
|
11
|
+
options: [],
|
|
12
|
+
value: undefined
|
|
13
|
+
};
|
|
14
|
+
itemRenderer = (i = "", { index, handleClick, modifiers }) => {
|
|
15
|
+
return (
|
|
16
|
+
<div //we specifically don't use a BP MenuItem component here because the menu item is too slow when 100s are loaded and will cause the component to lag
|
|
17
|
+
onClick={handleClick}
|
|
18
|
+
key={index}
|
|
19
|
+
className={classNames(
|
|
20
|
+
"tg-select-option bp3-menu-item bp3-fill bp3-text-overflow-ellipsis",
|
|
21
|
+
{
|
|
22
|
+
"bp3-active": modifiers.active
|
|
23
|
+
}
|
|
24
|
+
)}
|
|
25
|
+
>
|
|
26
|
+
{i}
|
|
27
|
+
</div>
|
|
28
|
+
);
|
|
29
|
+
};
|
|
30
|
+
|
|
31
|
+
handleItemSelect = item => {
|
|
32
|
+
const { onChange } = this.props;
|
|
33
|
+
this.input && this.input.blur();
|
|
34
|
+
return onChange(item);
|
|
35
|
+
};
|
|
36
|
+
|
|
37
|
+
itemListPredicate = (queryString, item) => {
|
|
38
|
+
const { isSimpleSearch } = this.props;
|
|
39
|
+
return itemListPredicate(queryString, item, isSimpleSearch);
|
|
40
|
+
};
|
|
41
|
+
|
|
42
|
+
onQueryChange = query => {
|
|
43
|
+
const { onChange } = this.props;
|
|
44
|
+
onChange(query);
|
|
45
|
+
};
|
|
46
|
+
|
|
47
|
+
renderInputValue = item => item;
|
|
48
|
+
|
|
49
|
+
render() {
|
|
50
|
+
const {
|
|
51
|
+
multi,
|
|
52
|
+
options,
|
|
53
|
+
notCreateable,
|
|
54
|
+
value,
|
|
55
|
+
optionRenderer, //pull this one out here so it doesn't get passsed along
|
|
56
|
+
noResultsText,
|
|
57
|
+
inputProps,
|
|
58
|
+
placeholder,
|
|
59
|
+
isLoading,
|
|
60
|
+
onBlur,
|
|
61
|
+
disabled,
|
|
62
|
+
popoverProps,
|
|
63
|
+
...rest
|
|
64
|
+
} = this.props;
|
|
65
|
+
|
|
66
|
+
return (
|
|
67
|
+
<Suggest
|
|
68
|
+
closeOnSelect
|
|
69
|
+
items={options || []}
|
|
70
|
+
query={value}
|
|
71
|
+
popoverProps={{
|
|
72
|
+
minimal: true,
|
|
73
|
+
className: classNames("tg-select", {
|
|
74
|
+
"tg-single-select": !multi
|
|
75
|
+
}),
|
|
76
|
+
wrapperTagName: "div",
|
|
77
|
+
usePortal: false,
|
|
78
|
+
canEscapeKeyClose: true,
|
|
79
|
+
...popoverProps
|
|
80
|
+
}}
|
|
81
|
+
onKeyDown={e => {
|
|
82
|
+
const { which } = e;
|
|
83
|
+
if (which === Keys.ENTER) {
|
|
84
|
+
e.preventDefault();
|
|
85
|
+
e.stopPropagation(); //this prevents the dialog it is in from closing
|
|
86
|
+
}
|
|
87
|
+
if (which === Keys.ESCAPE || which === Keys.TAB) {
|
|
88
|
+
// By default the escape key will not trigger a blur on the
|
|
89
|
+
// input element. It must be done explicitly.
|
|
90
|
+
if (this.input != null) {
|
|
91
|
+
this.input.blur();
|
|
92
|
+
}
|
|
93
|
+
e.preventDefault();
|
|
94
|
+
e.stopPropagation(); //this prevents dialog's it is in from closing
|
|
95
|
+
}
|
|
96
|
+
}}
|
|
97
|
+
{...{
|
|
98
|
+
onItemSelect: this.handleItemSelect,
|
|
99
|
+
noResults: null,
|
|
100
|
+
resetOnSelect: false,
|
|
101
|
+
onQueryChange: this.onQueryChange,
|
|
102
|
+
itemRenderer: this.itemRenderer,
|
|
103
|
+
itemListPredicate: this.itemListPredicate,
|
|
104
|
+
selectedItem: value,
|
|
105
|
+
inputValueRenderer: this.renderInputValue,
|
|
106
|
+
inputProps: {
|
|
107
|
+
inputRef: n => {
|
|
108
|
+
if (n) this.input = n;
|
|
109
|
+
},
|
|
110
|
+
placeholder: placeholder || "Type here...",
|
|
111
|
+
disabled: disabled, // tg: adding isLoading will cause the input to be blurred when using generic select asReactSelect (don't do it),
|
|
112
|
+
intent: this.props.intent,
|
|
113
|
+
...inputProps
|
|
114
|
+
},
|
|
115
|
+
...rest
|
|
116
|
+
}}
|
|
117
|
+
/>
|
|
118
|
+
);
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
export default TgSuggest;
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import dayjs from "dayjs";
|
|
3
|
+
import { Classes } from "@blueprintjs/core";
|
|
4
|
+
import classNames from "classnames";
|
|
5
|
+
import relativeTime from "dayjs/plugin/relativeTime";
|
|
6
|
+
|
|
7
|
+
dayjs.extend(relativeTime);
|
|
8
|
+
|
|
9
|
+
function TimelineEvent({ date, children }) {
|
|
10
|
+
return (
|
|
11
|
+
<div className="tg-timeline-event">
|
|
12
|
+
<div
|
|
13
|
+
style={{
|
|
14
|
+
display: "flex",
|
|
15
|
+
alignItems: "center"
|
|
16
|
+
}}
|
|
17
|
+
>
|
|
18
|
+
<div className="tg-timeline-circle" />
|
|
19
|
+
{children}
|
|
20
|
+
<div
|
|
21
|
+
style={{ marginLeft: 5 }}
|
|
22
|
+
className={classNames(Classes.TEXT_SMALL, Classes.TEXT_MUTED)}
|
|
23
|
+
>
|
|
24
|
+
({dayjs(date).fromNow()})
|
|
25
|
+
</div>
|
|
26
|
+
</div>
|
|
27
|
+
</div>
|
|
28
|
+
);
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
export default TimelineEvent;
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import React, { Component } from "react";
|
|
2
|
+
import PropTypes from "prop-types";
|
|
3
|
+
import "./style.css";
|
|
4
|
+
|
|
5
|
+
class Timeline extends Component {
|
|
6
|
+
static propTypes = {
|
|
7
|
+
children: PropTypes.arrayOf(PropTypes.element)
|
|
8
|
+
};
|
|
9
|
+
|
|
10
|
+
render() {
|
|
11
|
+
return (
|
|
12
|
+
<div className="tg-timeline">
|
|
13
|
+
{this.props.children.length > 1 && <div className="tg-timeline-line" />}
|
|
14
|
+
{this.props.children}
|
|
15
|
+
</div>
|
|
16
|
+
);
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
export { default as TimelineEvent } from "./TimelineEvent";
|
|
21
|
+
|
|
22
|
+
export default Timeline;
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/* Copyright (C) 2018 TeselaGen Biotechnology, Inc. */
|
|
2
|
+
.tg-timeline {
|
|
3
|
+
position: relative;
|
|
4
|
+
white-space: nowrap;
|
|
5
|
+
}
|
|
6
|
+
|
|
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;
|
|
29
|
+
}
|