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.
Files changed (47) hide show
  1. package/css/widget.css +0 -1
  2. package/dist/index.js +4 -4
  3. package/lib/components/accordion/Accordion.js +6 -7
  4. package/lib/feature/feature-explanation/FeatureExplanation.js +7 -3
  5. package/lib/feature/feature-explanation/components/ColoredExplanationBlock.js +1 -7
  6. package/lib/feature/feature-explanation/components/ColumnExplanationBlock.js +1 -2
  7. package/lib/feature/feature-explanation/components/DataSlotExplanationBlock.js +1 -2
  8. package/lib/feature/feature-explanation/components/TextExplanationBlock.js +3 -1
  9. package/lib/feature/feature-likes/feature-likes.js +20 -14
  10. package/lib/feature-descriptor/domains-descriptions-tree/components/column-tree-item.js +16 -0
  11. package/lib/feature-descriptor/domains-descriptions-tree/components/descriptions-tree-item.js +51 -0
  12. package/lib/feature-descriptor/domains-descriptions-tree/components/index.js +18 -0
  13. package/lib/feature-descriptor/domains-descriptions-tree/components/tree-item-label.js +48 -0
  14. package/lib/feature-descriptor/domains-descriptions-tree/components/type-tree-item.js +19 -0
  15. package/lib/feature-descriptor/domains-descriptions-tree/config/index.js +10 -0
  16. package/lib/feature-descriptor/domains-descriptions-tree/context/domains-descriptions-selection-context.js +54 -0
  17. package/lib/feature-descriptor/domains-descriptions-tree/context/domains-descriptions-tree-config-context.js +42 -0
  18. package/lib/feature-descriptor/domains-descriptions-tree/context/domains-descriptions-tree-item-selection-context.js +56 -0
  19. package/lib/feature-descriptor/domains-descriptions-tree/context/index.js +20 -0
  20. package/lib/feature-descriptor/domains-descriptions-tree/domains-descriptions-tree.js +44 -0
  21. package/lib/feature-descriptor/domains-descriptions-tree/index.js +21 -0
  22. package/lib/feature-descriptor/domains-descriptions-tree/models/domains-descriptions-tree.model.js +37 -0
  23. package/lib/feature-descriptor/domains-descriptions-tree/models/index.js +18 -0
  24. package/lib/feature-descriptor/domains-descriptions-tree/utils/create-domain-predicate.js +16 -0
  25. package/lib/feature-descriptor/domains-descriptions-tree/utils/filter-domains-descriptions-tree.js +23 -0
  26. package/lib/feature-descriptor/domains-descriptions-tree/utils/index.js +19 -0
  27. package/lib/feature-descriptor/domains-descriptors-tree/config/index.js +2 -0
  28. package/lib/feature-descriptor/domains-descriptors-tree/context/domains-descriptions-tree-config-context.js +43 -0
  29. package/lib/feature-descriptor/domains-descriptors-tree/context/domains-descriptions-tree-context-provider.js +53 -0
  30. package/lib/feature-descriptor/domains-descriptors-tree/context/index.js +1 -0
  31. package/lib/models/column/field.js +3 -0
  32. package/lib/models/feature-descriptor/fd_data/aggregation.js +42 -0
  33. package/lib/models/feature-descriptor/fd_data/filter.js +7 -0
  34. package/lib/models/feature-descriptor/feature-descriptor.js +9 -1
  35. package/lib/models/feature-descriptor/index.js +2 -0
  36. package/lib/models/feature-descriptor-domain/fd-domains-description.js +12 -0
  37. package/lib/utils/transducer.js +16 -0
  38. package/lib/widgets/FeatureSpaceWidget.js +3 -2
  39. package/lib/widgets/feature-leaderboard/FeatureLeaderboardOverview.js +12 -4
  40. package/lib/widgets/feature-leaderboard/FeatureLeaderboardView.js +18 -9
  41. package/lib/widgets/feature-leaderboard/components/leaderboard-feature-likes.js +3 -3
  42. package/lib/widgets/feature-leaderboard/leaderboard-entry/FeatureLeaderboardEntry.js +1 -4
  43. package/lib/widgets/feature-leaderboard/leaderboard-entry/FeatureLeaderboardEntryRow.js +2 -8
  44. package/lib/widgets/feature-leaderboard/leaderboard-overview/overview-slider.js +2 -2
  45. package/lib/widgets/feature-space/FeatureDomainsDescriptions.js +9 -17
  46. package/lib/widgets/feature-space/FeatureSpaceView.js +17 -16
  47. 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
@@ -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,2 @@
1
+ "use strict";
2
+ //# 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,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=field.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
@@ -0,0 +1,7 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Filter = void 0;
4
+ class Filter {
5
+ }
6
+ exports.Filter = Filter;
7
+ //# sourceMappingURL=filter.js.map
@@ -1,3 +1,11 @@
1
1
  "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
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
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ //# sourceMappingURL=index.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
- selected_filters: [],
22
- selected_aggregations: [],
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
- return (react_1.default.createElement("div", null,
13
- react_1.default.createElement(overview_slider_1.OverviewSlider, { value: maxCollinearity, setValue: setMaxCollinearity, label: "Max collinearity:", labelTooltip: MAX_COLLINEARITY_TOOLTIP }),
14
- react_1.default.createElement(overview_slider_1.OverviewSlider, { value: confidence, setValue: setConfidence, label: "Confidence:", labelTooltip: CONFIDENCE_TOOLTIP })));
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 featureEntries = react_1.default.useMemo(() => filterFeatures(featureLeaderboard, maxCollinearity, confidence), [maxCollinearity, confidence, featureLeaderboard]);
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
- featureLeaderboard.isAssessed
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 fulfillCollinearity = (entry) => entry.maxAbsCorrelationOfSimplerFeature < maxCollinearity;
29
- const fulfillNoise = (entry) => entry.signalConfidence >= confidence;
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
- .filter(fulfillCollinearity)
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)(likedFeatures, featureId));
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)(likedFeatures, featureId));
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([...likedFeatures, featureId]);
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, { expandedDetailsStyle: {
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", { style: {
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 typeof value === 'number' ? value : 0;
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 input_1 = require("../../components/input");
29
- const domains_descriptors_tree_1 = require("../../feature-descriptor/domains-descriptors-tree");
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, domains_descriptors_tree_1.useDomainsDescriptionsTreeItemSelection)();
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, domains_descriptors_tree_1.createDomainPredicate)(selectedDomains, props.selectedJoinIds);
53
- const domains = (0, domains_descriptors_tree_1.filterDomainsDescriptionsTree)(props.descriptionsTree, description => description.description
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(domains_descriptors_tree_1.DomainsDescriptionsTree, { descriptionsTree: searchedDomain },
65
- react_1.default.createElement(domains_descriptors_tree_1.FeatureDomainDescriptionsTreeHeader, null,
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", null,
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("div", { style: searchBorder },
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 context_1 = require("../../feature-descriptor/context");
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 selectedFiltersModel = (0, widget_model_1.useModelState)('selected_filters');
24
- const selectedAggregationsModel = (0, widget_model_1.useModelState)('selected_aggregations');
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(domains_descriptors_tree_1.DescriptionsTree.appendGroupId(featureSpace.filters, 'f'));
29
+ setFilterDescriptionsTree(domains_descriptions_tree_1.DescriptionsTree.appendGroupId(featureSpace.filters, 'f'));
30
30
  }, [featureSpace.filters]);
31
31
  react_1.default.useEffect(() => {
32
- setAggregationDescriptionsTree(domains_descriptors_tree_1.DescriptionsTree.appendGroupId(featureSpace.aggregations, 'a'));
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(domains_descriptors_tree_1.DomainsDescriptionsTreeItemSelectionContextProvider, { selectedJoinIds: selectedJoinIds },
37
- react_1.default.createElement(FeatureExplorationPaths_1.FeatureExplorationPaths, { explorationPaths: featureSpace.explorationPaths, selectedJoinIds: selectedJoinIds, setSelectedJoinIds: setSelectedJoinIds }),
38
- react_1.default.createElement(Divider, null),
39
- react_1.default.createElement(material_1.Grid, { container: true, spacing: 6 },
40
- react_1.default.createElement(material_1.Grid, { item: true, xs: 6 },
41
- react_1.default.createElement(context_1.FdDomainsDescriptionsSelectionContext.Provider, { value: selectedFiltersModel },
42
- react_1.default.createElement(FeatureDomainsDescriptions_1.FeatureDomainsDescriptions, { domainName: "Filters", descriptionsTree: filterDescriptionsTree, selectedJoinIds: selectedJoinIds }))),
43
- react_1.default.createElement(material_1.Grid, { item: true, xs: 6, sx: { overflow: 'hidden' } },
44
- react_1.default.createElement(context_1.FdDomainsDescriptionsSelectionContext.Provider, { value: selectedAggregationsModel },
45
- react_1.default.createElement(FeatureDomainsDescriptions_1.FeatureDomainsDescriptions, { domainName: "Aggregations", descriptionsTree: aggregationDescriptionsTree, selectedJoinIds: selectedJoinIds })))))));
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
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "dotdata_widgets",
3
- "version": "0.1.4",
3
+ "version": "0.1.6",
4
4
  "description": "A dotdata widget",
5
5
  "keywords": [
6
6
  "dotdata",