dotdata_widgets 0.1.4 → 0.1.6
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/css/widget.css +0 -1
- package/dist/index.js +4 -4
- package/lib/components/accordion/Accordion.js +6 -7
- package/lib/feature/feature-explanation/FeatureExplanation.js +7 -3
- package/lib/feature/feature-explanation/components/ColoredExplanationBlock.js +1 -7
- package/lib/feature/feature-explanation/components/ColumnExplanationBlock.js +1 -2
- package/lib/feature/feature-explanation/components/DataSlotExplanationBlock.js +1 -2
- package/lib/feature/feature-explanation/components/TextExplanationBlock.js +3 -1
- package/lib/feature/feature-likes/feature-likes.js +20 -14
- package/lib/feature-descriptor/domains-descriptions-tree/components/column-tree-item.js +16 -0
- package/lib/feature-descriptor/domains-descriptions-tree/components/descriptions-tree-item.js +51 -0
- package/lib/feature-descriptor/domains-descriptions-tree/components/index.js +18 -0
- package/lib/feature-descriptor/domains-descriptions-tree/components/tree-item-label.js +48 -0
- package/lib/feature-descriptor/domains-descriptions-tree/components/type-tree-item.js +19 -0
- package/lib/feature-descriptor/domains-descriptions-tree/config/index.js +10 -0
- package/lib/feature-descriptor/domains-descriptions-tree/context/domains-descriptions-selection-context.js +54 -0
- package/lib/feature-descriptor/domains-descriptions-tree/context/domains-descriptions-tree-config-context.js +42 -0
- package/lib/feature-descriptor/domains-descriptions-tree/context/domains-descriptions-tree-item-selection-context.js +56 -0
- package/lib/feature-descriptor/domains-descriptions-tree/context/index.js +20 -0
- package/lib/feature-descriptor/domains-descriptions-tree/domains-descriptions-tree.js +44 -0
- package/lib/feature-descriptor/domains-descriptions-tree/index.js +21 -0
- package/lib/feature-descriptor/domains-descriptions-tree/models/domains-descriptions-tree.model.js +37 -0
- package/lib/feature-descriptor/domains-descriptions-tree/models/index.js +18 -0
- package/lib/feature-descriptor/domains-descriptions-tree/utils/create-domain-predicate.js +16 -0
- package/lib/feature-descriptor/domains-descriptions-tree/utils/filter-domains-descriptions-tree.js +23 -0
- package/lib/feature-descriptor/domains-descriptions-tree/utils/index.js +19 -0
- package/lib/feature-descriptor/domains-descriptors-tree/config/index.js +2 -0
- package/lib/feature-descriptor/domains-descriptors-tree/context/domains-descriptions-tree-config-context.js +43 -0
- package/lib/feature-descriptor/domains-descriptors-tree/context/domains-descriptions-tree-context-provider.js +53 -0
- package/lib/feature-descriptor/domains-descriptors-tree/context/index.js +1 -0
- package/lib/models/column/field.js +3 -0
- package/lib/models/feature-descriptor/fd_data/aggregation.js +42 -0
- package/lib/models/feature-descriptor/fd_data/filter.js +7 -0
- package/lib/models/feature-descriptor/feature-descriptor.js +9 -1
- package/lib/models/feature-descriptor/index.js +2 -0
- package/lib/models/feature-descriptor-domain/fd-domains-description.js +12 -0
- package/lib/utils/transducer.js +16 -0
- package/lib/widgets/FeatureSpaceWidget.js +3 -2
- package/lib/widgets/feature-leaderboard/FeatureLeaderboardOverview.js +12 -4
- package/lib/widgets/feature-leaderboard/FeatureLeaderboardView.js +18 -9
- package/lib/widgets/feature-leaderboard/components/leaderboard-feature-likes.js +3 -3
- package/lib/widgets/feature-leaderboard/leaderboard-entry/FeatureLeaderboardEntry.js +1 -4
- package/lib/widgets/feature-leaderboard/leaderboard-entry/FeatureLeaderboardEntryRow.js +2 -8
- package/lib/widgets/feature-leaderboard/leaderboard-overview/overview-slider.js +2 -2
- package/lib/widgets/feature-space/FeatureDomainsDescriptions.js +9 -17
- package/lib/widgets/feature-space/FeatureSpaceView.js +17 -16
- package/package.json +1 -1
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
__exportStar(require("./domains-descriptions-tree.model"), exports);
|
|
18
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.createDomainPredicate = void 0;
|
|
4
|
+
function createDomainPredicate(selectedDomains, selectedJoinIds) {
|
|
5
|
+
const joinIds = new Set(selectedJoinIds);
|
|
6
|
+
const domainIds = Object.values(selectedDomains).flatMap(d => d.filter(({ joinId }) => (joinIds.size ? joinIds.has(joinId) : true)));
|
|
7
|
+
return (description) => {
|
|
8
|
+
return domainIds.length
|
|
9
|
+
? description.domains.some(x => domainIds.find(({ domainIdx, joinId }) => x.joinId === joinId && x.domainIdx === domainIdx))
|
|
10
|
+
: joinIds.size
|
|
11
|
+
? description.domains.some(({ joinId }) => joinIds.has(joinId))
|
|
12
|
+
: true;
|
|
13
|
+
};
|
|
14
|
+
}
|
|
15
|
+
exports.createDomainPredicate = createDomainPredicate;
|
|
16
|
+
//# sourceMappingURL=create-domain-predicate.js.map
|
package/lib/feature-descriptor/domains-descriptions-tree/utils/filter-domains-descriptions-tree.js
ADDED
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.filterDomainsDescriptionsTree = void 0;
|
|
4
|
+
const isNotEmpty = (arr) => arr.length > 0;
|
|
5
|
+
function filterDomainsDescriptionsTree(domains, predicateFn) {
|
|
6
|
+
return {
|
|
7
|
+
types: domains.types
|
|
8
|
+
.map(({ summary, columns, nodeId }) => ({
|
|
9
|
+
summary,
|
|
10
|
+
nodeId,
|
|
11
|
+
columns: columns
|
|
12
|
+
.map(column => ({
|
|
13
|
+
summary: column.summary,
|
|
14
|
+
nodeId: column.nodeId,
|
|
15
|
+
descriptions: column.descriptions.filter(predicateFn),
|
|
16
|
+
}))
|
|
17
|
+
.filter(({ descriptions }) => isNotEmpty(descriptions)),
|
|
18
|
+
}))
|
|
19
|
+
.filter(({ columns }) => isNotEmpty(columns)),
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
exports.filterDomainsDescriptionsTree = filterDomainsDescriptionsTree;
|
|
23
|
+
//# sourceMappingURL=filter-domains-descriptions-tree.js.map
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
__exportStar(require("./filter-domains-descriptions-tree"), exports);
|
|
18
|
+
__exportStar(require("./create-domain-predicate"), exports);
|
|
19
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
+
if (mod && mod.__esModule) return mod;
|
|
20
|
+
var result = {};
|
|
21
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
+
__setModuleDefault(result, mod);
|
|
23
|
+
return result;
|
|
24
|
+
};
|
|
25
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
26
|
+
exports.DomainsDescriptionsTreeConfigContextProvider = exports.useDomainsDescriptionsTreeConfig = exports.DomainsDescriptionsTreeConfigContext = void 0;
|
|
27
|
+
const React = __importStar(require("react"));
|
|
28
|
+
exports.DomainsDescriptionsTreeConfigContext = React.createContext({
|
|
29
|
+
isSelectable: true,
|
|
30
|
+
});
|
|
31
|
+
function useDomainsDescriptionsTreeConfig() {
|
|
32
|
+
const context = React.useContext(exports.DomainsDescriptionsTreeConfigContext);
|
|
33
|
+
if (context === undefined) {
|
|
34
|
+
throw new Error('useDomainsDescriptionsTreeConfig must be used within a DomainsDescriptionsTreeConfigContext');
|
|
35
|
+
}
|
|
36
|
+
return context;
|
|
37
|
+
}
|
|
38
|
+
exports.useDomainsDescriptionsTreeConfig = useDomainsDescriptionsTreeConfig;
|
|
39
|
+
function DomainsDescriptionsTreeConfigContextProvider(props) {
|
|
40
|
+
return (React.createElement(exports.DomainsDescriptionsTreeConfigContext.Provider, { value: props.configuration, ...props }));
|
|
41
|
+
}
|
|
42
|
+
exports.DomainsDescriptionsTreeConfigContextProvider = DomainsDescriptionsTreeConfigContextProvider;
|
|
43
|
+
//# sourceMappingURL=domains-descriptions-tree-config-context.js.map
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
+
if (mod && mod.__esModule) return mod;
|
|
20
|
+
var result = {};
|
|
21
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
+
__setModuleDefault(result, mod);
|
|
23
|
+
return result;
|
|
24
|
+
};
|
|
25
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
26
|
+
exports.DomainsDescriptionsTreeItemSelectionContextProvider = void 0;
|
|
27
|
+
const React = __importStar(require("react"));
|
|
28
|
+
const _utils_1 = require("../../../utils");
|
|
29
|
+
const lodash_1 = require("lodash");
|
|
30
|
+
const domains_descriptions_tree_item_selection_context_1 = require("./domains-descriptions-tree-item-selection-context");
|
|
31
|
+
const domains_descriptions_tree_config_context_1 = require("./domains-descriptions-tree-config-context");
|
|
32
|
+
function DomainsDescriptionsTreeItemSelectionContextProvider(
|
|
33
|
+
// props: React.PropsWithChildren<Record<'selectedJoinIds', JoinDescriptionId[]>>
|
|
34
|
+
props) {
|
|
35
|
+
const { configuration, ...restProps } = props;
|
|
36
|
+
const [selectedTreeItems, setSelectedTreeItems] = React.useState(() => ({}));
|
|
37
|
+
function toggleTreeItemSelection(nodeId, domains) {
|
|
38
|
+
if ((0, _utils_1.isSet)(selectedTreeItems[nodeId])) {
|
|
39
|
+
const { [nodeId]: _remove, ...rest } = selectedTreeItems;
|
|
40
|
+
setSelectedTreeItems(rest);
|
|
41
|
+
}
|
|
42
|
+
else {
|
|
43
|
+
setSelectedTreeItems({
|
|
44
|
+
...selectedTreeItems,
|
|
45
|
+
[nodeId]: (0, lodash_1.uniqBy)(domains, JSON.stringify),
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
return (React.createElement(domains_descriptions_tree_config_context_1.DomainsDescriptionsTreeConfigContext.Provider, { value: configuration },
|
|
50
|
+
React.createElement(domains_descriptions_tree_item_selection_context_1.DomainsDescriptionsTreeItemSelectionContext.Provider, { value: [selectedTreeItems, { toggleTreeItemSelection }], ...restProps })));
|
|
51
|
+
}
|
|
52
|
+
exports.DomainsDescriptionsTreeItemSelectionContextProvider = DomainsDescriptionsTreeItemSelectionContextProvider;
|
|
53
|
+
//# sourceMappingURL=domains-descriptions-tree-context-provider.js.map
|
|
@@ -15,4 +15,5 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
15
15
|
};
|
|
16
16
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
17
|
__exportStar(require("./domains-descriptions-tree-item-selection-context"), exports);
|
|
18
|
+
__exportStar(require("./domains-descriptions-tree-config-context"), exports);
|
|
18
19
|
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// import { ColumnName } from '../../column';
|
|
3
|
+
// // export interface AbsoluteTemporalChangeCountRecords {}
|
|
4
|
+
//
|
|
5
|
+
// export type Aggregation = AbsoluteTemporalChangeCountRecords;
|
|
6
|
+
//
|
|
7
|
+
// interface TemporalChange {
|
|
8
|
+
//
|
|
9
|
+
// }
|
|
10
|
+
//
|
|
11
|
+
// export interface AbsoluteTemporalChangeCountRecords {
|
|
12
|
+
// source_time_column: ColumnName;
|
|
13
|
+
// targetTimeColumn: ColumnName;
|
|
14
|
+
// upperBound: string;
|
|
15
|
+
// lowerBound: string;
|
|
16
|
+
// rangeShift: string;
|
|
17
|
+
// }
|
|
18
|
+
//
|
|
19
|
+
// export interface AbsoluteTemporalChangeMax {
|
|
20
|
+
// sourceTimeColumn: ColumnName;
|
|
21
|
+
// targetTimeColumn: ColumnName;
|
|
22
|
+
// upperBound: string;
|
|
23
|
+
// lowerBound: string;
|
|
24
|
+
// sourceColumn: string;
|
|
25
|
+
// rangeShift: string;
|
|
26
|
+
// }
|
|
27
|
+
//
|
|
28
|
+
// export interface AbsoluteTemporalChangeMean extends AbsoluteTemporalChange {
|
|
29
|
+
// source_column: string;
|
|
30
|
+
// range_shift: string;
|
|
31
|
+
// }
|
|
32
|
+
//
|
|
33
|
+
// export interface AbsoluteTemporalChangeMin extends AbsoluteTemporalChange {
|
|
34
|
+
// source_column: string;
|
|
35
|
+
// range_shift: string;
|
|
36
|
+
// }
|
|
37
|
+
//
|
|
38
|
+
// export interface AbsoluteTemporalChangeSum extends AbsoluteTemporalChange {
|
|
39
|
+
// source_column: string;
|
|
40
|
+
// range_shift: string;
|
|
41
|
+
// }
|
|
42
|
+
//# sourceMappingURL=aggregation.js.map
|
|
@@ -1,3 +1,11 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
|
|
2
|
+
// import { Aggregation } from './fd_data/aggregation';
|
|
3
|
+
// import { Filter } from './fd_data/filter';
|
|
4
|
+
//
|
|
5
|
+
// export interface FeatureDescriptor {
|
|
6
|
+
// name: string;
|
|
7
|
+
// join: any;
|
|
8
|
+
// filter: Filter;
|
|
9
|
+
// aggregation: Aggregation;
|
|
10
|
+
// }
|
|
3
11
|
//# sourceMappingURL=feature-descriptor.js.map
|
|
@@ -1,3 +1,15 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.DomainsDescriptionId = void 0;
|
|
4
|
+
var DomainsDescriptionId;
|
|
5
|
+
(function (DomainsDescriptionId) {
|
|
6
|
+
function toString(id) {
|
|
7
|
+
return `${id.joinId}_${id.domainIdx}_${id.opIdx}`;
|
|
8
|
+
}
|
|
9
|
+
DomainsDescriptionId.toString = toString;
|
|
10
|
+
function listToMap(list) {
|
|
11
|
+
return new Map(list.map(el => [DomainsDescriptionId.toString(el), el]));
|
|
12
|
+
}
|
|
13
|
+
DomainsDescriptionId.listToMap = listToMap;
|
|
14
|
+
})(DomainsDescriptionId = exports.DomainsDescriptionId || (exports.DomainsDescriptionId = {}));
|
|
3
15
|
//# sourceMappingURL=fd-domains-description.js.map
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.filter = exports.map = exports.compose = void 0;
|
|
4
|
+
function compose(...fns) {
|
|
5
|
+
return (x) => fns.reduce((y, f) => f(y), x);
|
|
6
|
+
}
|
|
7
|
+
exports.compose = compose;
|
|
8
|
+
function map(transformFn) {
|
|
9
|
+
return (step) => (a, c) => step(a, transformFn(c));
|
|
10
|
+
}
|
|
11
|
+
exports.map = map;
|
|
12
|
+
function filter(predicate) {
|
|
13
|
+
return (step) => (a, c) => predicate(c) ? step(a, c) : a;
|
|
14
|
+
}
|
|
15
|
+
exports.filter = filter;
|
|
16
|
+
//# sourceMappingURL=transducer.js.map
|
|
@@ -18,8 +18,9 @@ const defaultState = {
|
|
|
18
18
|
filters: { types: [] },
|
|
19
19
|
aggregations: { types: [] },
|
|
20
20
|
},
|
|
21
|
-
|
|
22
|
-
|
|
21
|
+
_selected_filters: [],
|
|
22
|
+
_selected_aggregations: [],
|
|
23
|
+
configuration: { selectable: true },
|
|
23
24
|
};
|
|
24
25
|
class FeatureSpaceWidgetModel extends base_1.DOMWidgetModel {
|
|
25
26
|
defaults() {
|
|
@@ -6,12 +6,20 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
6
6
|
exports.FeatureLeaderboardOverview = void 0;
|
|
7
7
|
const react_1 = __importDefault(require("react"));
|
|
8
8
|
const overview_slider_1 = require("./leaderboard-overview/overview-slider");
|
|
9
|
+
const material_1 = require("@mui/material");
|
|
9
10
|
const MAX_COLLINEARITY_TOOLTIP = 'Maximum correlation of any two features on the list';
|
|
10
11
|
const CONFIDENCE_TOOLTIP = 'The probability that a feature is better than a random feature';
|
|
11
|
-
const FeatureLeaderboardOverview = ({ confidence, setConfidence, maxCollinearity, setMaxCollinearity }) => {
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
react_1.default.createElement(
|
|
12
|
+
const FeatureLeaderboardOverview = ({ isAssessed, confidence, setConfidence, maxCollinearity, setMaxCollinearity, setSearch, }) => {
|
|
13
|
+
const [searchPhrase, setSearchPhrase] = react_1.default.useState(() => '');
|
|
14
|
+
return (react_1.default.createElement("div", { style: { display: 'flex' } },
|
|
15
|
+
isAssessed ? (react_1.default.createElement(react_1.default.Fragment, null,
|
|
16
|
+
react_1.default.createElement(overview_slider_1.OverviewSlider, { value: maxCollinearity, setValue: setMaxCollinearity, label: "Max collinearity:", labelTooltip: MAX_COLLINEARITY_TOOLTIP }),
|
|
17
|
+
react_1.default.createElement(overview_slider_1.OverviewSlider, { value: confidence, setValue: setConfidence, label: "Confidence:", labelTooltip: CONFIDENCE_TOOLTIP }))) : null,
|
|
18
|
+
react_1.default.createElement("span", { style: { marginLeft: 'auto' } },
|
|
19
|
+
react_1.default.createElement(material_1.TextField, { sx: { top: '-8px' }, size: "small", label: "Search", type: "search", variant: "standard", margin: "dense", value: searchPhrase, onChange: e => {
|
|
20
|
+
setSearchPhrase(e.target.value);
|
|
21
|
+
setSearch(e.target.value);
|
|
22
|
+
} }))));
|
|
15
23
|
};
|
|
16
24
|
exports.FeatureLeaderboardOverview = FeatureLeaderboardOverview;
|
|
17
25
|
//# sourceMappingURL=FeatureLeaderboardOverview.js.map
|
|
@@ -6,30 +6,39 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
6
6
|
exports.FeatureLeaderboardView = void 0;
|
|
7
7
|
const react_1 = __importDefault(require("react"));
|
|
8
8
|
const widget_model_1 = require("../../utils/widget-model");
|
|
9
|
+
const transducer_1 = require("../../utils/transducer");
|
|
10
|
+
const _utils_1 = require("../../utils");
|
|
9
11
|
const FeatureLeaderboardOverview_1 = require("./FeatureLeaderboardOverview");
|
|
10
12
|
const FeatureLeaderboardEntry_1 = require("./leaderboard-entry/FeatureLeaderboardEntry");
|
|
11
13
|
const FeatureLeaderboardEntryRow_1 = require("./leaderboard-entry/FeatureLeaderboardEntryRow");
|
|
12
14
|
const FeatureLeaderboardView = ({ model }) => {
|
|
13
15
|
const [featureLeaderboard] = (0, widget_model_1.useModelState)('value');
|
|
16
|
+
const isAssessed = (0, _utils_1.isNotSet)(featureLeaderboard.isAssessed) || featureLeaderboard.isAssessed;
|
|
14
17
|
const [confidence, setConfidence] = (0, widget_model_1.useModelState)('confidence');
|
|
15
18
|
const [maxCollinearity, setMaxCollinearity] = (0, widget_model_1.useModelState)('max_collinearity');
|
|
16
|
-
const
|
|
19
|
+
const [explanationSearch, setExplanationSearch] = react_1.default.useState(() => '');
|
|
20
|
+
const featureEntries = react_1.default.useMemo(() => filterFeatures(featureLeaderboard, maxCollinearity, confidence, explanationSearch, isAssessed), [maxCollinearity, confidence, explanationSearch, featureLeaderboard]);
|
|
17
21
|
return (react_1.default.createElement(react_1.default.Fragment, null,
|
|
18
22
|
react_1.default.createElement("h2", { className: "grey-label" }, "Feature Pipeline Overview:"),
|
|
19
|
-
react_1.default.createElement(FeatureLeaderboardOverview_1.FeatureLeaderboardOverview, { confidence: confidence, setConfidence: setConfidence, maxCollinearity: maxCollinearity, setMaxCollinearity: setMaxCollinearity }),
|
|
23
|
+
react_1.default.createElement(FeatureLeaderboardOverview_1.FeatureLeaderboardOverview, { isAssessed: isAssessed, confidence: confidence, setConfidence: setConfidence, maxCollinearity: maxCollinearity, setMaxCollinearity: setMaxCollinearity, setSearch: setExplanationSearch }),
|
|
20
24
|
react_1.default.createElement("br", null),
|
|
21
|
-
|
|
25
|
+
react_1.default.createElement("div", { style: { display: 'inline-block', minWidth: '100%' } }, isAssessed
|
|
22
26
|
? featureEntries.map(featureEntry => (react_1.default.createElement(FeatureLeaderboardEntry_1.FeatureLeaderboardEntry, { key: featureEntry.feature.id, featureEntry: featureEntry })))
|
|
23
27
|
: featureEntries.map(featureEntry => (react_1.default.createElement("div", { className: "feature-leaderboard-entry-row-wrapper", key: featureEntry.feature.id },
|
|
24
|
-
react_1.default.createElement(FeatureLeaderboardEntryRow_1.FeatureLeaderboardEntryRow, { feature: featureEntry.feature }))))));
|
|
28
|
+
react_1.default.createElement(FeatureLeaderboardEntryRow_1.FeatureLeaderboardEntryRow, { feature: featureEntry.feature })))))));
|
|
25
29
|
};
|
|
26
30
|
exports.FeatureLeaderboardView = FeatureLeaderboardView;
|
|
27
|
-
function filterFeatures(featureLeaderboard, maxCollinearity, confidence) {
|
|
28
|
-
const
|
|
29
|
-
|
|
31
|
+
function filterFeatures(featureLeaderboard, maxCollinearity, confidence, explanationSearchPhrase, isAssessed) {
|
|
32
|
+
const explanationSearchFilter = (entry) => !explanationSearchPhrase ||
|
|
33
|
+
entry.feature.explanation_str?.includes(explanationSearchPhrase);
|
|
34
|
+
const correlationFilter = (entry) => entry.maxAbsCorrelationOfSimplerFeature <= maxCollinearity;
|
|
35
|
+
const confidenceFilter = (entry) => entry.signalConfidence >= confidence;
|
|
36
|
+
const reduces = isAssessed
|
|
37
|
+
? (0, transducer_1.compose)((0, transducer_1.filter)(explanationSearchFilter), (0, transducer_1.filter)(correlationFilter), (0, transducer_1.filter)(confidenceFilter))
|
|
38
|
+
: (0, transducer_1.compose)((0, transducer_1.filter)(explanationSearchFilter));
|
|
39
|
+
const aggregation = (a, b) => a.concat([b]);
|
|
30
40
|
return featureLeaderboard.allEntries
|
|
31
41
|
.flat()
|
|
32
|
-
.
|
|
33
|
-
.filter(fulfillNoise);
|
|
42
|
+
.reduce(reduces(aggregation), []);
|
|
34
43
|
}
|
|
35
44
|
//# sourceMappingURL=FeatureLeaderboardView.js.map
|
|
@@ -28,7 +28,7 @@ const LeaderBoardFeatureLikes = ({ featureId, }) => {
|
|
|
28
28
|
setLikedFeatures((0, lodash_1.without)(likedFeatures, featureId));
|
|
29
29
|
}
|
|
30
30
|
if (liked === feature_likes_1.FeatureLike.Disliked) {
|
|
31
|
-
setDislikedFeatures((0, lodash_1.without)(
|
|
31
|
+
setDislikedFeatures((0, lodash_1.without)(dislikedFeatures, featureId));
|
|
32
32
|
setLikedFeatures([...likedFeatures, featureId]);
|
|
33
33
|
}
|
|
34
34
|
}
|
|
@@ -37,11 +37,11 @@ const LeaderBoardFeatureLikes = ({ featureId, }) => {
|
|
|
37
37
|
setDislikedFeatures([...dislikedFeatures, featureId]);
|
|
38
38
|
}
|
|
39
39
|
if (liked === feature_likes_1.FeatureLike.Disliked) {
|
|
40
|
-
setDislikedFeatures((0, lodash_1.without)(
|
|
40
|
+
setDislikedFeatures((0, lodash_1.without)(dislikedFeatures, featureId));
|
|
41
41
|
}
|
|
42
42
|
if (liked === feature_likes_1.FeatureLike.Liked) {
|
|
43
43
|
setLikedFeatures((0, lodash_1.without)(likedFeatures, featureId));
|
|
44
|
-
setDislikedFeatures([...
|
|
44
|
+
setDislikedFeatures([...dislikedFeatures, featureId]);
|
|
45
45
|
}
|
|
46
46
|
}
|
|
47
47
|
return (react_1.default.createElement(feature_likes_1.FeatureLikes, { liked: liked, toggleIsLiked: toggleIsLiked, toggleIsDisliked: toggleIsDisliked }));
|
|
@@ -9,10 +9,7 @@ const accordion_1 = require("../../../components/accordion");
|
|
|
9
9
|
const FeatureLeaderboardEntryDetails_1 = require("./FeatureLeaderboardEntryDetails");
|
|
10
10
|
const FeatureLeaderboardEntryRow_1 = require("./FeatureLeaderboardEntryRow");
|
|
11
11
|
const FeatureLeaderboardEntry = ({ featureEntry }) => {
|
|
12
|
-
return (react_1.default.createElement(accordion_1.Accordion, {
|
|
13
|
-
borderBottom: '1px solid var(--c-grey-500)',
|
|
14
|
-
paddingBlockEnd: '30px',
|
|
15
|
-
} },
|
|
12
|
+
return (react_1.default.createElement(accordion_1.Accordion, { className: "feature-leaderboard-entry" },
|
|
16
13
|
react_1.default.createElement(accordion_1.AccordionHeader, null,
|
|
17
14
|
react_1.default.createElement(FeatureLeaderboardEntryRow_1.FeatureLeaderboardEntryRow, { feature: featureEntry.feature })),
|
|
18
15
|
react_1.default.createElement(accordion_1.AccordionDetails, null,
|
|
@@ -10,19 +10,13 @@ const leaderboard_feature_likes_1 = require("../components/leaderboard-feature-l
|
|
|
10
10
|
const featureNameLabelStyle = {
|
|
11
11
|
color: 'var(--c-grey-600)',
|
|
12
12
|
display: 'inline-block',
|
|
13
|
-
marginLeft: '10px',
|
|
14
13
|
minWidth: '5rem',
|
|
15
14
|
};
|
|
16
15
|
const FeatureLeaderboardEntryRow = ({ feature }) => {
|
|
17
|
-
return (react_1.default.createElement("div", {
|
|
18
|
-
display: 'flex',
|
|
19
|
-
alignItems: 'center',
|
|
20
|
-
position: 'relative',
|
|
21
|
-
width: '100%',
|
|
22
|
-
} },
|
|
16
|
+
return (react_1.default.createElement("div", { className: "feature-leaderboard-entry-row" },
|
|
23
17
|
react_1.default.createElement("span", { className: "label-bold", style: featureNameLabelStyle }, feature.id),
|
|
24
18
|
react_1.default.createElement(FeatureExplanation_1.FeatureExplanation, { key: feature.id, explanationBlocks: feature.explanation.tokens }),
|
|
25
|
-
react_1.default.createElement("div", { style: { marginLeft: 'auto' } },
|
|
19
|
+
react_1.default.createElement("div", { style: { marginLeft: 'auto', display: 'flex', gap: '5px' } },
|
|
26
20
|
react_1.default.createElement(leaderboard_feature_likes_1.LeaderBoardFeatureLikes, { featureId: feature.id }))));
|
|
27
21
|
};
|
|
28
22
|
exports.FeatureLeaderboardEntryRow = FeatureLeaderboardEntryRow;
|
|
@@ -41,7 +41,7 @@ const OverviewSlider = ({ value, setValue, label, labelTooltip, }) => {
|
|
|
41
41
|
} },
|
|
42
42
|
react_1.default.createElement(material_1.Grid, { item: true },
|
|
43
43
|
react_1.default.createElement(material_1.Tooltip, { title: labelTooltip, placement: "bottom" },
|
|
44
|
-
react_1.default.createElement("span", { className: "grey-label label-bold" }, label))),
|
|
44
|
+
react_1.default.createElement("span", { className: "grey-label label-bold", style: { position: 'relative', top: '-3px' } }, label))),
|
|
45
45
|
react_1.default.createElement(material_1.Grid, { item: true, sx: { maxWidth: '200px', width: '100%' } },
|
|
46
46
|
react_1.default.createElement(material_1.Slider, { size: "small", step: STEP, min: MIN, max: MAX, value: sliderValue(localValue), onChange: (e, value) => {
|
|
47
47
|
setLocalValue(value);
|
|
@@ -57,6 +57,6 @@ const OverviewSlider = ({ value, setValue, label, labelTooltip, }) => {
|
|
|
57
57
|
};
|
|
58
58
|
exports.OverviewSlider = OverviewSlider;
|
|
59
59
|
function sliderValue(value) {
|
|
60
|
-
return
|
|
60
|
+
return Number(value);
|
|
61
61
|
}
|
|
62
62
|
//# sourceMappingURL=overview-slider.js.map
|
|
@@ -25,23 +25,16 @@ var __importStar = (this && this.__importStar) || function (mod) {
|
|
|
25
25
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
26
26
|
exports.FeatureDomainsDescriptions = void 0;
|
|
27
27
|
const react_1 = __importStar(require("react"));
|
|
28
|
-
const
|
|
29
|
-
const
|
|
28
|
+
const material_1 = require("@mui/material");
|
|
29
|
+
const domains_descriptions_tree_1 = require("../../feature-descriptor/domains-descriptions-tree");
|
|
30
30
|
const headerWrapperStyle = {
|
|
31
31
|
display: 'flex',
|
|
32
32
|
justifyContent: 'space-between',
|
|
33
33
|
alignItems: 'center',
|
|
34
34
|
width: '100%',
|
|
35
35
|
};
|
|
36
|
-
const searchBorder = {
|
|
37
|
-
borderLeft: '1px solid var(--c-grey-300)',
|
|
38
|
-
paddingLeft: '10px',
|
|
39
|
-
};
|
|
40
|
-
const searchInputStyle = {
|
|
41
|
-
width: '220px',
|
|
42
|
-
};
|
|
43
36
|
const FeatureDomainsDescriptions = props => {
|
|
44
|
-
const [selectedDomains] = (0,
|
|
37
|
+
const [selectedDomains] = (0, domains_descriptions_tree_1.useDomainsDescriptionsTreeItemSelection)();
|
|
45
38
|
const [domainSearchValue, setDomainSearchValue] = (0, react_1.useState)(() => '');
|
|
46
39
|
const [numberOfDescriptions, setNumberOfDescriptions] = (0, react_1.useState)(() => 0);
|
|
47
40
|
const [searchedDomain, setSearchedDomain] = (0, react_1.useState)(() => props.descriptionsTree);
|
|
@@ -49,8 +42,8 @@ const FeatureDomainsDescriptions = props => {
|
|
|
49
42
|
setNumberOfDescriptions(calculateNumberOfDescriptions(props.descriptionsTree));
|
|
50
43
|
}, [props.descriptionsTree]);
|
|
51
44
|
(0, react_1.useEffect)(() => {
|
|
52
|
-
const selectedDomainFilter = (0,
|
|
53
|
-
const domains = (0,
|
|
45
|
+
const selectedDomainFilter = (0, domains_descriptions_tree_1.createDomainPredicate)(selectedDomains, props.selectedJoinIds);
|
|
46
|
+
const domains = (0, domains_descriptions_tree_1.filterDomainsDescriptionsTree)(props.descriptionsTree, description => description.description
|
|
54
47
|
.toLowerCase()
|
|
55
48
|
.includes(domainSearchValue.toLowerCase()) &&
|
|
56
49
|
selectedDomainFilter(description));
|
|
@@ -61,16 +54,15 @@ const FeatureDomainsDescriptions = props => {
|
|
|
61
54
|
props.selectedJoinIds,
|
|
62
55
|
props.descriptionsTree,
|
|
63
56
|
]);
|
|
64
|
-
return (react_1.default.createElement(
|
|
65
|
-
react_1.default.createElement(
|
|
57
|
+
return (react_1.default.createElement(domains_descriptions_tree_1.DomainsDescriptionsTree, { descriptionsTree: searchedDomain },
|
|
58
|
+
react_1.default.createElement(domains_descriptions_tree_1.FeatureDomainDescriptionsTreeHeader, null,
|
|
66
59
|
react_1.default.createElement("div", { style: headerWrapperStyle },
|
|
67
|
-
react_1.default.createElement("h4",
|
|
60
|
+
react_1.default.createElement("h4", { style: { margin: 0 } },
|
|
68
61
|
props.domainName,
|
|
69
62
|
": (",
|
|
70
63
|
numberOfDescriptions,
|
|
71
64
|
")"),
|
|
72
|
-
react_1.default.createElement("
|
|
73
|
-
react_1.default.createElement(input_1.Input, { style: searchInputStyle, value: domainSearchValue, placeholder: `Search for ${props.domainName.toLowerCase()}`, onValueChange: setDomainSearchValue }))))));
|
|
65
|
+
react_1.default.createElement(material_1.TextField, { sx: { top: '-8px' }, size: "small", label: `Search for ${props.domainName.toLowerCase()}`, type: "search", variant: "standard", margin: "dense", value: domainSearchValue, onChange: e => setDomainSearchValue(e.target.value) })))));
|
|
74
66
|
};
|
|
75
67
|
exports.FeatureDomainsDescriptions = FeatureDomainsDescriptions;
|
|
76
68
|
function calculateNumberOfDescriptions(descriptionsTree) {
|
|
@@ -10,8 +10,7 @@ const material_1 = require("@mui/material");
|
|
|
10
10
|
const widget_model_1 = require("../../utils/widget-model");
|
|
11
11
|
const widget_theme_1 = require("../../utils/widget-theme");
|
|
12
12
|
const FeatureExplorationPaths_1 = require("./FeatureExplorationPaths");
|
|
13
|
-
const
|
|
14
|
-
const domains_descriptors_tree_1 = require("../../feature-descriptor/domains-descriptors-tree");
|
|
13
|
+
const domains_descriptions_tree_1 = require("../../feature-descriptor/domains-descriptions-tree");
|
|
15
14
|
const FeatureDomainsDescriptions_1 = require("./FeatureDomainsDescriptions");
|
|
16
15
|
const Divider = () => (react_1.default.createElement("div", { style: {
|
|
17
16
|
height: '1px',
|
|
@@ -20,29 +19,31 @@ const Divider = () => (react_1.default.createElement("div", { style: {
|
|
|
20
19
|
} }));
|
|
21
20
|
const FeatureSpaceView = props => {
|
|
22
21
|
const [featureSpace] = (0, widget_model_1.useModelState)('value');
|
|
23
|
-
const
|
|
24
|
-
const
|
|
22
|
+
const [configuration] = (0, widget_model_1.useModelState)('configuration');
|
|
23
|
+
const selectedFiltersModel = (0, widget_model_1.useModelState)('_selected_filters');
|
|
24
|
+
const selectedAggregationsModel = (0, widget_model_1.useModelState)('_selected_aggregations');
|
|
25
25
|
const [selectedJoinIds, setSelectedJoinIds] = react_1.default.useState(() => []);
|
|
26
26
|
const [filterDescriptionsTree, setFilterDescriptionsTree] = react_1.default.useState(() => ({ types: [] }));
|
|
27
27
|
const [aggregationDescriptionsTree, setAggregationDescriptionsTree] = react_1.default.useState(() => ({ types: [] }));
|
|
28
28
|
react_1.default.useEffect(() => {
|
|
29
|
-
setFilterDescriptionsTree(
|
|
29
|
+
setFilterDescriptionsTree(domains_descriptions_tree_1.DescriptionsTree.appendGroupId(featureSpace.filters, 'f'));
|
|
30
30
|
}, [featureSpace.filters]);
|
|
31
31
|
react_1.default.useEffect(() => {
|
|
32
|
-
setAggregationDescriptionsTree(
|
|
32
|
+
setAggregationDescriptionsTree(domains_descriptions_tree_1.DescriptionsTree.appendGroupId(featureSpace.aggregations, 'a'));
|
|
33
33
|
}, [featureSpace.aggregations]);
|
|
34
34
|
return (react_1.default.createElement(styles_1.ThemeProvider, { theme: widget_theme_1.theme },
|
|
35
35
|
react_1.default.createElement("h2", { className: "grey-label" }, "Feature Space Overview:"),
|
|
36
|
-
react_1.default.createElement(
|
|
37
|
-
react_1.default.createElement(
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
react_1.default.createElement(material_1.Grid, {
|
|
41
|
-
react_1.default.createElement(
|
|
42
|
-
react_1.default.createElement(
|
|
43
|
-
|
|
44
|
-
react_1.default.createElement(
|
|
45
|
-
react_1.default.createElement(
|
|
36
|
+
react_1.default.createElement(domains_descriptions_tree_1.DomainsDescriptionsTreeConfigContextProvider, { configuration: configuration },
|
|
37
|
+
react_1.default.createElement(domains_descriptions_tree_1.DomainsDescriptionsTreeItemSelectionContextProvider, null,
|
|
38
|
+
react_1.default.createElement(FeatureExplorationPaths_1.FeatureExplorationPaths, { explorationPaths: featureSpace.explorationPaths, selectedJoinIds: selectedJoinIds, setSelectedJoinIds: setSelectedJoinIds }),
|
|
39
|
+
react_1.default.createElement(Divider, null),
|
|
40
|
+
react_1.default.createElement(material_1.Grid, { container: true, spacing: 6 },
|
|
41
|
+
react_1.default.createElement(material_1.Grid, { item: true, xs: 6 },
|
|
42
|
+
react_1.default.createElement(domains_descriptions_tree_1.DomainsDescriptionsSelectionContextProvider, { selectedDomainDescriptionIds: selectedFiltersModel[0], setSelectedDomainDescriptionIds: selectedFiltersModel[1] },
|
|
43
|
+
react_1.default.createElement(FeatureDomainsDescriptions_1.FeatureDomainsDescriptions, { domainName: "Filters", descriptionsTree: filterDescriptionsTree, selectedJoinIds: selectedJoinIds }))),
|
|
44
|
+
react_1.default.createElement(material_1.Grid, { item: true, xs: 6, sx: { overflow: 'hidden' } },
|
|
45
|
+
react_1.default.createElement(domains_descriptions_tree_1.DomainsDescriptionsSelectionContextProvider, { selectedDomainDescriptionIds: selectedAggregationsModel[0], setSelectedDomainDescriptionIds: selectedAggregationsModel[1] },
|
|
46
|
+
react_1.default.createElement(FeatureDomainsDescriptions_1.FeatureDomainsDescriptions, { domainName: "Aggregations", descriptionsTree: aggregationDescriptionsTree, selectedJoinIds: selectedJoinIds }))))))));
|
|
46
47
|
};
|
|
47
48
|
exports.FeatureSpaceView = FeatureSpaceView;
|
|
48
49
|
//# sourceMappingURL=FeatureSpaceView.js.map
|