dotdata_widgets 0.1.3 → 0.1.5

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 (49) hide show
  1. package/css/widget.css +13 -1
  2. package/dist/index.js +4 -4
  3. package/lib/components/accordion/Accordion.js +8 -9
  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 +41 -0
  10. package/lib/feature/feature-likes/index.js +18 -0
  11. package/lib/feature-descriptor/domains-descriptions-tree/components/column-tree-item.js +16 -0
  12. package/lib/feature-descriptor/domains-descriptions-tree/components/descriptions-tree-item.js +51 -0
  13. package/lib/feature-descriptor/domains-descriptions-tree/components/index.js +18 -0
  14. package/lib/feature-descriptor/domains-descriptions-tree/components/tree-item-label.js +48 -0
  15. package/lib/feature-descriptor/domains-descriptions-tree/components/type-tree-item.js +19 -0
  16. package/lib/feature-descriptor/domains-descriptions-tree/config/index.js +10 -0
  17. package/lib/feature-descriptor/domains-descriptions-tree/context/domains-descriptions-selection-context.js +54 -0
  18. package/lib/feature-descriptor/domains-descriptions-tree/context/domains-descriptions-tree-config-context.js +42 -0
  19. package/lib/feature-descriptor/domains-descriptions-tree/context/domains-descriptions-tree-item-selection-context.js +56 -0
  20. package/lib/feature-descriptor/domains-descriptions-tree/context/index.js +20 -0
  21. package/lib/feature-descriptor/domains-descriptions-tree/domains-descriptions-tree.js +44 -0
  22. package/lib/feature-descriptor/domains-descriptions-tree/index.js +21 -0
  23. package/lib/feature-descriptor/domains-descriptions-tree/models/domains-descriptions-tree.model.js +37 -0
  24. package/lib/feature-descriptor/domains-descriptions-tree/models/index.js +18 -0
  25. package/lib/feature-descriptor/domains-descriptions-tree/utils/create-domain-predicate.js +16 -0
  26. package/lib/feature-descriptor/domains-descriptions-tree/utils/filter-domains-descriptions-tree.js +23 -0
  27. package/lib/feature-descriptor/domains-descriptions-tree/utils/index.js +19 -0
  28. package/lib/feature-descriptor/domains-descriptors-tree/config/index.js +2 -0
  29. package/lib/feature-descriptor/domains-descriptors-tree/context/domains-descriptions-tree-config-context.js +43 -0
  30. package/lib/feature-descriptor/domains-descriptors-tree/context/domains-descriptions-tree-context-provider.js +53 -0
  31. package/lib/feature-descriptor/domains-descriptors-tree/context/index.js +1 -0
  32. package/lib/models/feature-descriptor-domain/fd-domains-description.js +12 -0
  33. package/lib/utils/model-transform-hook.js +21 -0
  34. package/lib/utils/set.js +14 -0
  35. package/lib/utils/transducer.js +16 -0
  36. package/lib/widgets/FeatureLeaderboardWidget.js +2 -0
  37. package/lib/widgets/FeatureSpaceWidget.js +3 -2
  38. package/lib/widgets/feature-leaderboard/FeatureLeaderboardOverview.js +12 -4
  39. package/lib/widgets/feature-leaderboard/FeatureLeaderboardView.js +22 -9
  40. package/lib/widgets/feature-leaderboard/components/leaderboard-feature-likes.js +50 -0
  41. package/lib/widgets/feature-leaderboard/entry-item/FeatureLeaderboardEntryHeader.js +35 -0
  42. package/lib/widgets/feature-leaderboard/entry-item/FeatureLeaderboardEntryItem.js +2 -8
  43. package/lib/widgets/feature-leaderboard/leaderboard-entry/FeatureLeaderboardEntry.js +19 -0
  44. package/lib/widgets/feature-leaderboard/leaderboard-entry/FeatureLeaderboardEntryDetails.js +23 -0
  45. package/lib/widgets/feature-leaderboard/leaderboard-entry/FeatureLeaderboardEntryRow.js +23 -0
  46. package/lib/widgets/feature-leaderboard/leaderboard-overview/overview-slider.js +1 -1
  47. package/lib/widgets/feature-space/FeatureDomainsDescriptions.js +9 -17
  48. package/lib/widgets/feature-space/FeatureSpaceView.js +17 -16
  49. 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
@@ -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,21 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.useModelTransform = void 0;
7
+ const react_1 = __importDefault(require("react"));
8
+ function useModelTransform(model, setModel, transform, revTransform, defaultState) {
9
+ const [transformedModel, setTransformedModel] = react_1.default.useState(() => defaultState);
10
+ react_1.default.useEffect(() => {
11
+ setTransformedModel(transform(model));
12
+ }, [model]);
13
+ return [
14
+ transformedModel,
15
+ (s) => {
16
+ setModel(revTransform(s));
17
+ },
18
+ ];
19
+ }
20
+ exports.useModelTransform = useModelTransform;
21
+ //# sourceMappingURL=model-transform-hook.js.map
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.toggleSetItem = void 0;
4
+ function toggleSetItem(collection, item) {
5
+ if (collection.has(item)) {
6
+ collection.delete(item);
7
+ }
8
+ else {
9
+ collection.add(item);
10
+ }
11
+ return new Set(collection);
12
+ }
13
+ exports.toggleSetItem = toggleSetItem;
14
+ //# sourceMappingURL=set.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
@@ -16,6 +16,8 @@ const defaultState = {
16
16
  value: { allEntries: [] },
17
17
  confidence: 0.95,
18
18
  max_collinearity: 0.95,
19
+ liked_features: [],
20
+ disliked_features: [],
19
21
  };
20
22
  class FeatureLeaderboardWidgetModel extends base_1.DOMWidgetModel {
21
23
  defaults() {
@@ -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,26 +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
- const FeatureLeaderboardEntryItem_1 = require("./entry-item/FeatureLeaderboardEntryItem");
12
+ const FeatureLeaderboardEntry_1 = require("./leaderboard-entry/FeatureLeaderboardEntry");
13
+ const FeatureLeaderboardEntryRow_1 = require("./leaderboard-entry/FeatureLeaderboardEntryRow");
11
14
  const FeatureLeaderboardView = ({ model }) => {
12
15
  const [featureLeaderboard] = (0, widget_model_1.useModelState)('value');
16
+ const isAssessed = (0, _utils_1.isNotSet)(featureLeaderboard.isAssessed) || featureLeaderboard.isAssessed;
13
17
  const [confidence, setConfidence] = (0, widget_model_1.useModelState)('confidence');
14
18
  const [maxCollinearity, setMaxCollinearity] = (0, widget_model_1.useModelState)('max_collinearity');
15
- 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]);
16
21
  return (react_1.default.createElement(react_1.default.Fragment, null,
17
22
  react_1.default.createElement("h2", { className: "grey-label" }, "Feature Pipeline Overview:"),
18
- 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 }),
19
24
  react_1.default.createElement("br", null),
20
- featureEntries.map(featureEntry => (react_1.default.createElement(FeatureLeaderboardEntryItem_1.FeatureLeaderboardEntryItem, { key: featureEntry.feature.id, featureEntry: featureEntry })))));
25
+ react_1.default.createElement("div", { style: { display: 'inline-block', minWidth: '100%' } }, isAssessed
26
+ ? featureEntries.map(featureEntry => (react_1.default.createElement(FeatureLeaderboardEntry_1.FeatureLeaderboardEntry, { key: featureEntry.feature.id, featureEntry: featureEntry })))
27
+ : featureEntries.map(featureEntry => (react_1.default.createElement("div", { className: "feature-leaderboard-entry-row-wrapper", key: featureEntry.feature.id },
28
+ react_1.default.createElement(FeatureLeaderboardEntryRow_1.FeatureLeaderboardEntryRow, { feature: featureEntry.feature })))))));
21
29
  };
22
30
  exports.FeatureLeaderboardView = FeatureLeaderboardView;
23
- function filterFeatures(featureLeaderboard, maxCollinearity, confidence) {
24
- const fulfillCollinearity = (entry) => entry.maxAbsCorrelationOfSimplerFeature < maxCollinearity;
25
- 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]);
26
40
  return featureLeaderboard.allEntries
27
41
  .flat()
28
- .filter(fulfillCollinearity)
29
- .filter(fulfillNoise);
42
+ .reduce(reduces(aggregation), []);
30
43
  }
31
44
  //# sourceMappingURL=FeatureLeaderboardView.js.map
@@ -0,0 +1,50 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.LeaderBoardFeatureLikes = void 0;
7
+ const react_1 = __importDefault(require("react"));
8
+ const lodash_1 = require("lodash");
9
+ const widget_model_1 = require("../../../utils/widget-model");
10
+ const feature_likes_1 = require("../../../feature/feature-likes");
11
+ const LeaderBoardFeatureLikes = ({ featureId, }) => {
12
+ const [likedFeatures, setLikedFeatures] = (0, widget_model_1.useModelState)('liked_features');
13
+ const [dislikedFeatures, setDislikedFeatures] = (0, widget_model_1.useModelState)('disliked_features');
14
+ const [liked, setLiked] = react_1.default.useState(() => feature_likes_1.FeatureLike.Neutral);
15
+ react_1.default.useEffect(() => {
16
+ const newState = likedFeatures.includes(featureId)
17
+ ? feature_likes_1.FeatureLike.Liked
18
+ : dislikedFeatures.includes(featureId)
19
+ ? feature_likes_1.FeatureLike.Disliked
20
+ : feature_likes_1.FeatureLike.Neutral;
21
+ setLiked(newState);
22
+ }, [likedFeatures, dislikedFeatures]);
23
+ function toggleIsLiked() {
24
+ if (liked === feature_likes_1.FeatureLike.Neutral) {
25
+ setLikedFeatures([...likedFeatures, featureId]);
26
+ }
27
+ if (liked === feature_likes_1.FeatureLike.Liked) {
28
+ setLikedFeatures((0, lodash_1.without)(likedFeatures, featureId));
29
+ }
30
+ if (liked === feature_likes_1.FeatureLike.Disliked) {
31
+ setDislikedFeatures((0, lodash_1.without)(likedFeatures, featureId));
32
+ setLikedFeatures([...likedFeatures, featureId]);
33
+ }
34
+ }
35
+ function toggleIsDisliked() {
36
+ if (liked === feature_likes_1.FeatureLike.Neutral) {
37
+ setDislikedFeatures([...dislikedFeatures, featureId]);
38
+ }
39
+ if (liked === feature_likes_1.FeatureLike.Disliked) {
40
+ setDislikedFeatures((0, lodash_1.without)(likedFeatures, featureId));
41
+ }
42
+ if (liked === feature_likes_1.FeatureLike.Liked) {
43
+ setLikedFeatures((0, lodash_1.without)(likedFeatures, featureId));
44
+ setDislikedFeatures([...likedFeatures, featureId]);
45
+ }
46
+ }
47
+ return (react_1.default.createElement(feature_likes_1.FeatureLikes, { liked: liked, toggleIsLiked: toggleIsLiked, toggleIsDisliked: toggleIsDisliked }));
48
+ };
49
+ exports.LeaderBoardFeatureLikes = LeaderBoardFeatureLikes;
50
+ //# sourceMappingURL=leaderboard-feature-likes.js.map
@@ -0,0 +1,35 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.FeatureLeaderboardEntryHeader = void 0;
7
+ const react_1 = __importDefault(require("react"));
8
+ const lodash_1 = require("lodash");
9
+ const widget_model_1 = require("../../../utils/widget-model");
10
+ const FeatureExplanation_1 = require("../../../feature/feature-explanation/FeatureExplanation");
11
+ const feature_likes_1 = require("../../../feature/feature-likes");
12
+ const featureNameLabelStyle = {
13
+ color: 'var(--c-grey-600)',
14
+ display: 'inline-block',
15
+ marginLeft: '10px',
16
+ minWidth: '5rem',
17
+ };
18
+ const FeatureLeaderboardEntryHeader = ({ feature }) => {
19
+ const [likedFeatures, setLikedFeatures] = (0, widget_model_1.useModelState)('liked_features');
20
+ const [isLiked, setIsLiked] = react_1.default.useState(() => false);
21
+ react_1.default.useEffect(() => {
22
+ setIsLiked(likedFeatures.includes(feature.id));
23
+ }, [likedFeatures]);
24
+ function toggleIsLiked() {
25
+ setLikedFeatures(isLiked
26
+ ? (0, lodash_1.without)(likedFeatures, feature.id)
27
+ : [...likedFeatures, feature.id]);
28
+ }
29
+ return (react_1.default.createElement("div", { style: { display: 'flex', alignItems: 'center' } },
30
+ react_1.default.createElement(feature_likes_1.FeatureLikes, { isLiked: isLiked, toggleIsLiked: toggleIsLiked }),
31
+ react_1.default.createElement("span", { className: "label-bold", style: featureNameLabelStyle }, feature.id),
32
+ react_1.default.createElement(FeatureExplanation_1.FeatureExplanation, { key: feature.id, explanationBlocks: feature.explanation.tokens })));
33
+ };
34
+ exports.FeatureLeaderboardEntryHeader = FeatureLeaderboardEntryHeader;
35
+ //# sourceMappingURL=FeatureLeaderboardEntryHeader.js.map
@@ -6,21 +6,15 @@ Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.FeatureLeaderboardEntryItem = void 0;
7
7
  const react_1 = __importDefault(require("react"));
8
8
  const accordion_1 = require("../../../components/accordion");
9
- const FeatureExplanation_1 = require("../../../feature/feature-explanation/FeatureExplanation");
10
9
  const FeatureLeaderboardEntryDetails_1 = require("./FeatureLeaderboardEntryDetails");
11
- const featureNameLabelStyle = {
12
- color: 'var(--c-grey-600)',
13
- display: 'inline-block',
14
- minWidth: '5rem',
15
- };
10
+ const FeatureLeaderboardEntryHeader_1 = require("./FeatureLeaderboardEntryHeader");
16
11
  const FeatureLeaderboardEntryItem = ({ featureEntry }) => {
17
12
  return (react_1.default.createElement(accordion_1.Accordion, { expandedDetailsStyle: {
18
13
  borderBottom: '1px solid var(--c-grey-500)',
19
14
  paddingBlockEnd: '30px',
20
15
  } },
21
16
  react_1.default.createElement(accordion_1.AccordionHeader, null,
22
- react_1.default.createElement("span", { className: "label-bold", style: featureNameLabelStyle }, featureEntry.feature.id),
23
- react_1.default.createElement(FeatureExplanation_1.FeatureExplanation, { key: featureEntry.feature.id, explanationBlocks: featureEntry.feature.explanation.tokens })),
17
+ react_1.default.createElement(FeatureLeaderboardEntryHeader_1.FeatureLeaderboardEntryHeader, { feature: featureEntry.feature })),
24
18
  react_1.default.createElement(accordion_1.AccordionDetails, null,
25
19
  react_1.default.createElement(FeatureLeaderboardEntryDetails_1.FeatureLeaderboardEntryDetails, { entry: featureEntry }))));
26
20
  };
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.FeatureLeaderboardEntry = void 0;
7
+ const react_1 = __importDefault(require("react"));
8
+ const accordion_1 = require("../../../components/accordion");
9
+ const FeatureLeaderboardEntryDetails_1 = require("./FeatureLeaderboardEntryDetails");
10
+ const FeatureLeaderboardEntryRow_1 = require("./FeatureLeaderboardEntryRow");
11
+ const FeatureLeaderboardEntry = ({ featureEntry }) => {
12
+ return (react_1.default.createElement(accordion_1.Accordion, { className: "feature-leaderboard-entry" },
13
+ react_1.default.createElement(accordion_1.AccordionHeader, null,
14
+ react_1.default.createElement(FeatureLeaderboardEntryRow_1.FeatureLeaderboardEntryRow, { feature: featureEntry.feature })),
15
+ react_1.default.createElement(accordion_1.AccordionDetails, null,
16
+ react_1.default.createElement(FeatureLeaderboardEntryDetails_1.FeatureLeaderboardEntryDetails, { entry: featureEntry }))));
17
+ };
18
+ exports.FeatureLeaderboardEntry = FeatureLeaderboardEntry;
19
+ //# sourceMappingURL=FeatureLeaderboardEntry.js.map
@@ -0,0 +1,23 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.FeatureLeaderboardEntryDetails = void 0;
7
+ const react_1 = __importDefault(require("react"));
8
+ const feature_details_1 = require("../../../feature/feature-details");
9
+ const FeatureLeaderboardEntryDetails = ({ entry }) => {
10
+ return (react_1.default.createElement("div", null,
11
+ react_1.default.createElement("div", { style: { display: 'flex', gap: '50px' } },
12
+ react_1.default.createElement("div", { className: "feature-metrics", style: { flex: 3 } },
13
+ react_1.default.createElement("h3", { className: "grey-label" }, "Feature Statistics:"),
14
+ react_1.default.createElement(feature_details_1.FeatureStatisticsTable, { statistics: entry.stats })),
15
+ react_1.default.createElement("div", { className: "feature-histogram", style: { flex: 1 } },
16
+ react_1.default.createElement("h3", { className: "grey-label" }, "Feature Distribution:"),
17
+ react_1.default.createElement(feature_details_1.FeatureDistributionChart, { histogram: entry.histogram }))),
18
+ react_1.default.createElement("div", { className: "correlated-features" },
19
+ react_1.default.createElement("h3", { className: "grey-label" }, "Correlated Features:"),
20
+ react_1.default.createElement(feature_details_1.FeatureCorrelatedFeaturesTable, { correlatedFeatures: entry.topCorrelatedFeatures }))));
21
+ };
22
+ exports.FeatureLeaderboardEntryDetails = FeatureLeaderboardEntryDetails;
23
+ //# sourceMappingURL=FeatureLeaderboardEntryDetails.js.map
@@ -0,0 +1,23 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.FeatureLeaderboardEntryRow = void 0;
7
+ const react_1 = __importDefault(require("react"));
8
+ const FeatureExplanation_1 = require("../../../feature/feature-explanation/FeatureExplanation");
9
+ const leaderboard_feature_likes_1 = require("../components/leaderboard-feature-likes");
10
+ const featureNameLabelStyle = {
11
+ color: 'var(--c-grey-600)',
12
+ display: 'inline-block',
13
+ minWidth: '5rem',
14
+ };
15
+ const FeatureLeaderboardEntryRow = ({ feature }) => {
16
+ return (react_1.default.createElement("div", { className: "feature-leaderboard-entry-row" },
17
+ react_1.default.createElement("span", { className: "label-bold", style: featureNameLabelStyle }, feature.id),
18
+ react_1.default.createElement(FeatureExplanation_1.FeatureExplanation, { key: feature.id, explanationBlocks: feature.explanation.tokens }),
19
+ react_1.default.createElement("div", { style: { marginLeft: 'auto', display: 'flex', gap: '5px' } },
20
+ react_1.default.createElement(leaderboard_feature_likes_1.LeaderBoardFeatureLikes, { featureId: feature.id }))));
21
+ };
22
+ exports.FeatureLeaderboardEntryRow = FeatureLeaderboardEntryRow;
23
+ //# sourceMappingURL=FeatureLeaderboardEntryRow.js.map
@@ -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) {