dotdata_widgets 0.1.10 → 0.2.0

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 (203) hide show
  1. package/README.md +71 -104
  2. package/css/widget.css +1 -1
  3. package/dist/index.js +5 -5
  4. package/dist/index.js.map +1 -1
  5. package/lib/components/ActionFooter.js +21 -0
  6. package/lib/components/WithLabel.js +20 -0
  7. package/lib/components/column-analytic-type-icons/analytic-type-category.js +13 -0
  8. package/lib/components/column-analytic-type-icons/analytic-type-datatime.js +13 -0
  9. package/lib/components/column-analytic-type-icons/analytic-type-geo-latitude.js +13 -0
  10. package/lib/components/column-analytic-type-icons/analytic-type-geo-longitude.js +13 -0
  11. package/lib/components/column-analytic-type-icons/analytic-type-numeric.js +13 -0
  12. package/lib/components/column-analytic-type-icons/index.js +22 -0
  13. package/lib/components/{input → column-source-type-icons}/index.js +1 -1
  14. package/lib/components/column-source-type-icons/source-type-int.js +16 -0
  15. package/lib/feature/feature-details/FeatureCorrelatedFeaturesTable.js +1 -1
  16. package/lib/feature/feature-likes/{feature-likes.js → FeatureLikes.js} +3 -6
  17. package/lib/feature/feature-likes/index.js +1 -1
  18. package/lib/feature/feature-user-explanation/FeatureUserExplanation.js +14 -0
  19. package/lib/feature/feature-user-explanation/FeatureUserExplanationDisplay.js +23 -0
  20. package/lib/feature/feature-user-explanation/explanation-to-user-explanation.js +58 -0
  21. package/lib/{feature-descriptor/domains-descriptors-tree/context → feature/feature-user-explanation}/index.js +3 -2
  22. package/lib/feature-descriptor/domains-descriptions-tree/index.js +1 -0
  23. package/lib/feature-descriptor/domains-descriptions-tree/models/domains-descriptions-tree.model.js +2 -2
  24. package/lib/feature-descriptor/feature-descriptor-editor/AggregationEditor.js +206 -109
  25. package/lib/feature-descriptor/feature-descriptor-editor/FeatureDescriptorEditor.js +32 -21
  26. package/lib/feature-descriptor/feature-descriptor-editor/FilterEditor.js +69 -61
  27. package/lib/feature-descriptor/feature-descriptor-editor/JoinEditor.js +50 -0
  28. package/lib/feature-descriptor/feature-descriptor-editor/components/EditorTemplateRenderer.js +14 -0
  29. package/lib/feature-descriptor/feature-descriptor-editor/components/aggregations/AggregationTypeSelection.js +11 -11
  30. package/lib/feature-descriptor/feature-descriptor-editor/components/aggregations/ColumnEditor.js +15 -0
  31. package/lib/feature-descriptor/feature-descriptor-editor/components/aggregations/DistanceEditor.js +30 -13
  32. package/lib/feature-descriptor/feature-descriptor-editor/components/aggregations/LastKEditor.js +17 -0
  33. package/lib/feature-descriptor/feature-descriptor-editor/components/aggregations/TemporalChangeEditor.js +19 -16
  34. package/lib/feature-descriptor/feature-descriptor-editor/components/aggregations/TopicEditor.js +16 -0
  35. package/lib/feature-descriptor/feature-descriptor-editor/components/aggregations/index.js +8 -7
  36. package/lib/feature-descriptor/feature-descriptor-editor/components/field-widgets/BooleanField.js +31 -0
  37. package/lib/feature-descriptor/feature-descriptor-editor/components/field-widgets/ChipField.js +27 -0
  38. package/lib/feature-descriptor/feature-descriptor-editor/components/field-widgets/ColumnField.js +47 -0
  39. package/lib/feature-descriptor/feature-descriptor-editor/components/field-widgets/NumberField.js +12 -20
  40. package/lib/feature-descriptor/feature-descriptor-editor/components/field-widgets/StringField.js +12 -20
  41. package/lib/feature-descriptor/feature-descriptor-editor/components/field-widgets/TableColumnField.js +30 -0
  42. package/lib/feature-descriptor/feature-descriptor-editor/components/field-widgets/TableField.js +17 -0
  43. package/lib/feature-descriptor/feature-descriptor-editor/components/field-widgets/_InlineEditorField.js +48 -0
  44. package/lib/feature-descriptor/feature-descriptor-editor/components/field-widgets/index.js +10 -7
  45. package/lib/feature-descriptor/feature-descriptor-editor/components/filter/FilterTypeSelection.js +14 -11
  46. package/lib/feature-descriptor/feature-descriptor-editor/components/filter/index.js +3 -5
  47. package/lib/feature-descriptor/feature-descriptor-editor/components/index.js +7 -8
  48. package/lib/feature-descriptor/feature-descriptor-editor/components/join/JoinConditionEditor.js +96 -0
  49. package/lib/feature-descriptor/feature-descriptor-editor/components/join/JoinConditionTypeSelection.js +15 -0
  50. package/lib/feature-descriptor/feature-descriptor-editor/components/join/JoinTableColumnSelector.js +15 -0
  51. package/lib/feature-descriptor/{domains-descriptors-tree/components → feature-descriptor-editor/components/join}/index.js +2 -1
  52. package/lib/feature-descriptor/feature-descriptor-editor/context/feature-descriptor-editor-context.js +38 -0
  53. package/lib/feature-descriptor/feature-descriptor-editor/context/feature-descriptor-editor.js +46 -0
  54. package/lib/feature-descriptor/{domains-descriptors-tree/models → feature-descriptor-editor/context}/index.js +2 -1
  55. package/lib/feature-descriptor/feature-descriptor-editor/index.js +5 -5
  56. package/lib/feature-descriptor/feature-descriptor-editor/models/aggregation-draft.js +351 -0
  57. package/lib/feature-descriptor/feature-descriptor-editor/models/common-field-draft.js +13 -0
  58. package/lib/feature-descriptor/feature-descriptor-editor/models/feature-descriptor-editor.js +29 -0
  59. package/lib/feature-descriptor/feature-descriptor-editor/models/filter-draft.js +79 -0
  60. package/lib/feature-descriptor/{context → feature-descriptor-editor/models}/index.js +4 -1
  61. package/lib/feature-descriptor/feature-descriptor-editor/models/join-draft.js +78 -0
  62. package/lib/models/column/column.js +59 -0
  63. package/lib/models/column/field.js +2 -4
  64. package/lib/models/column/index.js +3 -0
  65. package/lib/models/column/table-columns.js +27 -0
  66. package/lib/models/column/table.js +2 -4
  67. package/lib/models/feature/feature.js +13 -0
  68. package/lib/models/feature-descriptor/fd_data/aggregation.js +86 -46
  69. package/lib/models/feature-descriptor/fd_data/filter.js +32 -20
  70. package/lib/models/feature-descriptor/fd_data/index.js +5 -7
  71. package/lib/models/feature-descriptor/fd_data/join.js +20 -4
  72. package/lib/models/feature-descriptor/fd_data/utils.js +25 -0
  73. package/lib/models/feature-descriptor/feature-descriptor.js +2 -4
  74. package/lib/models/feature-descriptor/index.js +4 -6
  75. package/lib/utils/crypto.js +28 -0
  76. package/lib/utils/index.js +2 -0
  77. package/lib/utils/redux/action.js +35 -0
  78. package/lib/utils/redux/index.js +10 -0
  79. package/lib/{feature-descriptor/feature-descriptor-editor/components/field-widgets/widget-interface.js → utils/redux/models.js} +1 -1
  80. package/lib/utils/redux/reducer.js +30 -0
  81. package/lib/{feature-descriptor/feature-descriptor-editor/components/widgets/widget-interface.js → utils/types.js} +1 -1
  82. package/lib/utils/widget-api.js +47 -0
  83. package/lib/widgets/FeatureLeaderboardWidget.js +12 -2
  84. package/lib/widgets/FeatureSpaceWidget.js +1 -0
  85. package/lib/widgets/feature-leaderboard/FeatureLeaderboardView.js +40 -8
  86. package/lib/widgets/feature-leaderboard/components/{leaderboard-feature-likes.js → LeaderboardFeatureLikes.js} +4 -4
  87. package/lib/widgets/feature-leaderboard/leaderboard-entry/FeatureLeaderboardEntryDrawer.js +88 -0
  88. package/lib/widgets/feature-leaderboard/leaderboard-entry/FeatureLeaderboardEntryFeatureEditor.js +31 -0
  89. package/lib/widgets/feature-leaderboard/leaderboard-entry/FeatureLeaderboardEntryHeader.js +15 -0
  90. package/lib/widgets/feature-leaderboard/leaderboard-entry/FeatureLeaderboardUserExplanation.js +28 -0
  91. package/lib/widgets/feature-space/FeatureSpaceView.js +6 -6
  92. package/package.json +8 -10
  93. package/lib/components/input/input.js +0 -14
  94. package/lib/feature-descriptor/context/fd-domains-descriptions-selection.context.js +0 -37
  95. package/lib/feature-descriptor/domains-descriptors-tree/components/column-tree-item.js +0 -16
  96. package/lib/feature-descriptor/domains-descriptors-tree/components/descriptions-tree-item.js +0 -50
  97. package/lib/feature-descriptor/domains-descriptors-tree/components/tree-item-label.js +0 -56
  98. package/lib/feature-descriptor/domains-descriptors-tree/components/type-tree-item.js +0 -19
  99. package/lib/feature-descriptor/domains-descriptors-tree/config/index.js +0 -2
  100. package/lib/feature-descriptor/domains-descriptors-tree/context/domains-descriptions-tree-config-context.js +0 -43
  101. package/lib/feature-descriptor/domains-descriptors-tree/context/domains-descriptions-tree-context-provider.js +0 -53
  102. package/lib/feature-descriptor/domains-descriptors-tree/context/domains-descriptions-tree-item-selection-context.js +0 -56
  103. package/lib/feature-descriptor/domains-descriptors-tree/domains-descriptions-tree.js +0 -44
  104. package/lib/feature-descriptor/domains-descriptors-tree/index.js +0 -21
  105. package/lib/feature-descriptor/domains-descriptors-tree/models/domains-descriptions-tree.model.js +0 -37
  106. package/lib/feature-descriptor/domains-descriptors-tree/utils/create-domain-predicate.js +0 -16
  107. package/lib/feature-descriptor/domains-descriptors-tree/utils/filter-domains-descriptions-tree.js +0 -23
  108. package/lib/feature-descriptor/domains-descriptors-tree/utils/index.js +0 -19
  109. package/lib/feature-descriptor/feature-descriptor-editor/components/ItemSelection.js +0 -14
  110. package/lib/feature-descriptor/feature-descriptor-editor/components/StringAutocomplete.js +0 -13
  111. package/lib/feature-descriptor/feature-descriptor-editor/components/ValueInput.js +0 -2
  112. package/lib/feature-descriptor/feature-descriptor-editor/components/aggregations/AggregationSelection.js +0 -15
  113. package/lib/feature-descriptor/feature-descriptor-editor/components/aggregations/aggregation-context.js +0 -37
  114. package/lib/feature-descriptor/feature-descriptor-editor/components/explainer.js +0 -15
  115. package/lib/feature-descriptor/feature-descriptor-editor/components/fd-operation-context.js +0 -19
  116. package/lib/feature-descriptor/feature-descriptor-editor/components/field-widgets/FieldLabel.js +0 -17
  117. package/lib/feature-descriptor/feature-descriptor-editor/components/field-widgets/ItemSelection.js +0 -20
  118. package/lib/feature-descriptor/feature-descriptor-editor/components/field-widgets/StringSelectionField.js +0 -24
  119. package/lib/feature-descriptor/feature-descriptor-editor/components/field-widgets/ValueInput.js +0 -19
  120. package/lib/feature-descriptor/feature-descriptor-editor/components/widgets/ItemSelection.js +0 -20
  121. package/lib/feature-descriptor/feature-descriptor-editor/components/widgets/Label.js +0 -2
  122. package/lib/feature-descriptor/feature-descriptor-editor/components/widgets/ValueInput.js +0 -19
  123. package/lib/feature-descriptor/feature-descriptor-editor/components/widgets/index.js +0 -19
  124. package/lib/feature-descriptor/feature-details/FeatureCorrelatedFeaturesTable.js +0 -22
  125. package/lib/feature-descriptor/feature-details/FeatureDistributionChart.js +0 -218
  126. package/lib/feature-descriptor/feature-details/FeatureStatisticsTable.js +0 -44
  127. package/lib/feature-descriptor/feature-details/index.js +0 -20
  128. package/lib/feature-descriptor/feature-explanation/FeatureExplanation.js +0 -48
  129. package/lib/feature-descriptor/feature-explanation/components/ColoredExplanationBlock.js +0 -36
  130. package/lib/feature-descriptor/feature-explanation/components/ColumnExplanationBlock.js +0 -12
  131. package/lib/feature-descriptor/feature-explanation/components/DataSlotExplanationBlock.js +0 -12
  132. package/lib/feature-descriptor/feature-explanation/components/PetExplanationBlock.js +0 -11
  133. package/lib/feature-descriptor/feature-explanation/components/TextExplanationBlock.js +0 -10
  134. package/lib/feature-descriptor/feature-explanation/components/TextWithDataSlotContextExplanationBlock.js +0 -10
  135. package/lib/feature-descriptor/feature-explanation/components/TopicExplanationBlock.js +0 -10
  136. package/lib/feature-descriptor/feature-explanation/components/UnknownExplanationBlock.js +0 -10
  137. package/lib/feature-descriptors-domain/context/feature-domain-descriptions-selection.context.js +0 -37
  138. package/lib/feature-descriptors-domain/context/feature-domain-selection.context.js +0 -37
  139. package/lib/feature-descriptors-domain/context/index.js +0 -19
  140. package/lib/feature-descriptors-domain/exploration-path/exploration-path-header.js +0 -21
  141. package/lib/feature-descriptors-domain/exploration-path/exploration-path-join-list.js +0 -16
  142. package/lib/feature-descriptors-domain/exploration-path/index.js +0 -19
  143. package/lib/feature-descriptors-domain/fd-grouped-domain-tree.js +0 -81
  144. package/lib/feature-descriptors-domain/feature-descriptor-domain-descriptions/components/column-tree-item.js +0 -17
  145. package/lib/feature-descriptors-domain/feature-descriptor-domain-descriptions/components/descriptions-tree-item.js +0 -49
  146. package/lib/feature-descriptors-domain/feature-descriptor-domain-descriptions/components/index.js +0 -18
  147. package/lib/feature-descriptors-domain/feature-descriptor-domain-descriptions/components/selection-indicator-with-label.js +0 -40
  148. package/lib/feature-descriptors-domain/feature-descriptor-domain-descriptions/components/type-tree-item.js +0 -16
  149. package/lib/feature-descriptors-domain/feature-descriptor-domain-descriptions/feature-descriptor-domain-descriptions-context.js +0 -43
  150. package/lib/feature-descriptors-domain/feature-descriptor-domain-descriptions/feature-descriptor-domain-descriptions-tree.js +0 -57
  151. package/lib/feature-descriptors-domain/feature-descriptor-domain-descriptions/index.js +0 -18
  152. package/lib/feature-descriptors-domain/feature-descriptor-domain-descriptions-tree/components/column-tree-item.js +0 -17
  153. package/lib/feature-descriptors-domain/feature-descriptor-domain-descriptions-tree/components/description-tree-item.js +0 -2
  154. package/lib/feature-descriptors-domain/feature-descriptor-domain-descriptions-tree/components/descriptions-tree-item.js +0 -49
  155. package/lib/feature-descriptors-domain/feature-descriptor-domain-descriptions-tree/components/index.js +0 -18
  156. package/lib/feature-descriptors-domain/feature-descriptor-domain-descriptions-tree/components/selection-indicator-with-label.js +0 -19
  157. package/lib/feature-descriptors-domain/feature-descriptor-domain-descriptions-tree/components/tree-item-label.js +0 -15
  158. package/lib/feature-descriptors-domain/feature-descriptor-domain-descriptions-tree/components/tree-level-item.js +0 -54
  159. package/lib/feature-descriptors-domain/feature-descriptor-domain-descriptions-tree/components/type-tree-item.js +0 -16
  160. package/lib/feature-descriptors-domain/feature-descriptor-domain-descriptions-tree/feature-descriptor-domain-descriptions-tree.js +0 -55
  161. package/lib/feature-descriptors-domain/feature-descriptor-domain-descriptions-tree/feature-descriptor-domain-descriptions-tree.model.js +0 -2
  162. package/lib/feature-descriptors-domain/feature-descriptor-domain-descriptions-tree/index.js +0 -18
  163. package/lib/feature-descriptors-domain/feature-descriptor-domain-descriptions-tree/utils/filter-domain-descriptions.js +0 -21
  164. package/lib/feature-descriptors-domain/feature-descriptor-domain-descriptions-tree/utils/index.js +0 -18
  165. package/lib/feature-descriptors-domain/feature-descriptor-grouped-domain-tree.js +0 -87
  166. package/lib/feature-descriptors-domain/feature-domain-descriptions/components/column-tree-item.js +0 -16
  167. package/lib/feature-descriptors-domain/feature-domain-descriptions/components/descriptions-tree-item.js +0 -50
  168. package/lib/feature-descriptors-domain/feature-domain-descriptions/components/index.js +0 -18
  169. package/lib/feature-descriptors-domain/feature-domain-descriptions/components/selection-indicator-with-label.js +0 -67
  170. package/lib/feature-descriptors-domain/feature-domain-descriptions/components/type-tree-item.js +0 -19
  171. package/lib/feature-descriptors-domain/feature-domain-descriptions/feature-domain-descriptions-context.js +0 -37
  172. package/lib/feature-descriptors-domain/feature-domain-descriptions/feature-domain-descriptions-tree.js +0 -51
  173. package/lib/feature-descriptors-domain/feature-domain-descriptions/index.js +0 -18
  174. package/lib/feature-descriptors-domain/feature-exploration-path/exploration-path-header.js +0 -38
  175. package/lib/feature-descriptors-domain/feature-exploration-path/exploration-path-join-list.js +0 -36
  176. package/lib/feature-descriptors-domain/feature-exploration-path/index.js +0 -19
  177. package/lib/feature-descriptors-domain/grouped-domains-descriptions-list.js +0 -58
  178. package/lib/feature-descriptors-domain/selected-feature-domain-context.js +0 -2
  179. package/lib/feature-descriptors-domain/utils/filter-domain-descriptions.js +0 -23
  180. package/lib/feature-descriptors-domain/utils/filter-grouped-domain-descriptions.js +0 -23
  181. package/lib/feature-descriptors-domain/utils/index.js +0 -18
  182. package/lib/models/feature/feature-leaderboard.js +0 -3
  183. package/lib/models/feature-descriptor/feature-descriptors-domain.js +0 -3
  184. package/lib/models/feature-descriptors-domain/fd-domain-description.js +0 -9
  185. package/lib/models/feature-descriptors-domain/fd-grouped-domain-descriptions.js +0 -3
  186. package/lib/models/feature-descriptors-domain/index.js +0 -19
  187. package/lib/models/feature-space/feature-space-description.js +0 -3
  188. package/lib/models/index.js +0 -2
  189. package/lib/utils/model-transform-hook.js +0 -21
  190. package/lib/utils/set.js +0 -14
  191. package/lib/utils/widget/index.js +0 -19
  192. package/lib/utils/widget/widget-model-context.js +0 -38
  193. package/lib/utils/widget/widget-model.js +0 -30
  194. package/lib/widgets/feature-leaderboard/FeatureLeaderboardEntries.js +0 -18
  195. package/lib/widgets/feature-leaderboard/entry-item/FeatureLeaderboardEntryDetails.js +0 -23
  196. package/lib/widgets/feature-leaderboard/entry-item/FeatureLeaderboardEntryHeader.js +0 -35
  197. package/lib/widgets/feature-leaderboard/entry-item/FeatureLeaderboardEntryItem.js +0 -22
  198. package/lib/widgets/feature-leaderboard/leaderboard-entry/FeatureLeaderboardEntry.js +0 -19
  199. package/lib/widgets/feature-leaderboard/leaderboard-entry/FeatureLeaderboardEntryRow.js +0 -23
  200. package/lib/widgets/feature-leaderboard/leaderboard-overview/overview-metric-slider.js +0 -2
  201. package/lib/widgets/feature-space/FeatureSpaceDomain.js +0 -75
  202. package/lib/widgets/feature-space/FeatureSpaceDomainDescriptions.js +0 -80
  203. package/lib/widgets/feature-space/FeatureSpaceDomainsDescriptions.js +0 -88
@@ -0,0 +1,28 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.sha256 = exports.uuid4 = void 0;
13
+ const object_1 = require("./object");
14
+ function uuid4() {
15
+ return crypto.randomUUID();
16
+ }
17
+ exports.uuid4 = uuid4;
18
+ function sha256(message, length) {
19
+ return __awaiter(this, void 0, void 0, function* () {
20
+ const msgUint8 = new TextEncoder().encode(message);
21
+ const hashBuffer = yield crypto.subtle.digest('SHA-256', msgUint8);
22
+ const hashArray = Array.from(new Uint8Array(hashBuffer));
23
+ const hashArray3 = (0, object_1.isSet)(length) ? hashArray.slice(0, length) : hashArray;
24
+ return hashArray3.map(b => b.toString(16).padStart(2, '0')).join('');
25
+ });
26
+ }
27
+ exports.sha256 = sha256;
28
+ //# sourceMappingURL=crypto.js.map
@@ -17,4 +17,6 @@ Object.defineProperty(exports, "__esModule", { value: true });
17
17
  __exportStar(require("./asserations"), exports);
18
18
  __exportStar(require("./object"), exports);
19
19
  __exportStar(require("./localize"), exports);
20
+ __exportStar(require("./transducer"), exports);
21
+ __exportStar(require("./crypto"), exports);
20
22
  //# sourceMappingURL=index.js.map
@@ -0,0 +1,35 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.union = exports.props = exports.createAction = void 0;
4
+ function createAction(type, config) {
5
+ if (typeof config === 'function') {
6
+ return defineType(type, (...args) => (Object.assign(Object.assign({}, config(...args)), { type })));
7
+ }
8
+ const as = config ? config._as : 'empty';
9
+ switch (as) {
10
+ case 'empty':
11
+ return defineType(type, () => ({ type }));
12
+ case 'props':
13
+ return defineType(type, (props) => (Object.assign(Object.assign({}, props), { type })));
14
+ default:
15
+ throw new Error('Unexpected config.');
16
+ }
17
+ }
18
+ exports.createAction = createAction;
19
+ function props() {
20
+ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
21
+ return { _as: 'props', _p: undefined };
22
+ }
23
+ exports.props = props;
24
+ function union(creators) {
25
+ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
26
+ return undefined;
27
+ }
28
+ exports.union = union;
29
+ function defineType(type, creator) {
30
+ return Object.defineProperty(creator, 'type', {
31
+ value: type,
32
+ writable: false,
33
+ });
34
+ }
35
+ //# sourceMappingURL=action.js.map
@@ -0,0 +1,10 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.on = exports.createReducer = exports.props = exports.createAction = void 0;
4
+ var action_1 = require("./action");
5
+ Object.defineProperty(exports, "createAction", { enumerable: true, get: function () { return action_1.createAction; } });
6
+ Object.defineProperty(exports, "props", { enumerable: true, get: function () { return action_1.props; } });
7
+ var reducer_1 = require("./reducer");
8
+ Object.defineProperty(exports, "createReducer", { enumerable: true, get: function () { return reducer_1.createReducer; } });
9
+ Object.defineProperty(exports, "on", { enumerable: true, get: function () { return reducer_1.on; } });
10
+ //# sourceMappingURL=index.js.map
@@ -1,3 +1,3 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- //# sourceMappingURL=widget-interface.js.map
3
+ //# sourceMappingURL=models.js.map
@@ -0,0 +1,30 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createReducer = exports.on = void 0;
4
+ function on(...args) {
5
+ const reducer = args.pop();
6
+ const types = args.map(creator => creator.type);
7
+ return { reducer, types };
8
+ }
9
+ exports.on = on;
10
+ function createReducer(...ons) {
11
+ const map = new Map();
12
+ for (const on of ons) {
13
+ for (const type of on.types) {
14
+ const existingReducer = map.get(type);
15
+ if (existingReducer) {
16
+ const newReducer = (state, action) => on.reducer(existingReducer(state, action), action);
17
+ map.set(type, newReducer);
18
+ }
19
+ else {
20
+ map.set(type, on.reducer);
21
+ }
22
+ }
23
+ }
24
+ return function (state, action) {
25
+ const reducer = map.get(action.type);
26
+ return reducer ? reducer(state, action) : state;
27
+ };
28
+ }
29
+ exports.createReducer = createReducer;
30
+ //# sourceMappingURL=reducer.js.map
@@ -1,3 +1,3 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- //# sourceMappingURL=widget-interface.js.map
3
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1,47 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.WidgetApi = void 0;
13
+ const crypto_1 = require("./crypto");
14
+ var WidgetApi;
15
+ (function (WidgetApi) {
16
+ const events = new Map();
17
+ function init(modelContext) {
18
+ return {
19
+ callMethod: function callApiMethod(method, params) {
20
+ return __awaiter(this, void 0, void 0, function* () {
21
+ const id = (0, crypto_1.uuid4)();
22
+ const promise = new Promise((resolve, reject) => {
23
+ events.set(id, { resolve, reject });
24
+ });
25
+ modelContext.send({ id, method, params }, {});
26
+ return promise;
27
+ });
28
+ },
29
+ };
30
+ }
31
+ WidgetApi.init = init;
32
+ function handleEvent(event) {
33
+ const handler = events.get(event.id);
34
+ if (!handler) {
35
+ return;
36
+ }
37
+ if ('error' in event) {
38
+ handler.reject(event.error);
39
+ }
40
+ else {
41
+ handler.resolve(event.response);
42
+ }
43
+ events.delete(event.id);
44
+ }
45
+ WidgetApi.handleEvent = handleEvent;
46
+ })(WidgetApi = exports.WidgetApi || (exports.WidgetApi = {}));
47
+ //# sourceMappingURL=widget-api.js.map
@@ -9,11 +9,12 @@ exports.FeatureLeaderboardWidgetView = exports.FeatureLeaderboardWidgetModel = v
9
9
  const react_1 = __importDefault(require("react"));
10
10
  const react_dom_1 = __importDefault(require("react-dom"));
11
11
  const base_1 = require("@jupyter-widgets/base");
12
+ const widget_model_1 = require("../utils/widget-model");
13
+ const widget_api_1 = require("../utils/widget-api");
12
14
  const version_1 = require("../version");
13
15
  const FeatureLeaderboardView_1 = require("./feature-leaderboard/FeatureLeaderboardView");
14
- const widget_model_1 = require("../utils/widget-model");
15
16
  const defaultState = {
16
- value: { allEntries: [] },
17
+ value: { allEntries: [], tableColumns: {} },
17
18
  confidence: 0.95,
18
19
  max_collinearity: 0.95,
19
20
  liked_features: [],
@@ -40,6 +41,15 @@ class FeatureLeaderboardWidgetView extends base_1.DOMWidgetView {
40
41
  console.error('FeatureSpaceWidgetView', err);
41
42
  }
42
43
  }
44
+ events() {
45
+ return {
46
+ create_feature: 'create_feature',
47
+ set_user_explanation: 'set_user_explanation',
48
+ };
49
+ }
50
+ handle_message(event) {
51
+ widget_api_1.WidgetApi.handleEvent(event);
52
+ }
43
53
  }
44
54
  exports.FeatureLeaderboardWidgetView = FeatureLeaderboardWidgetView;
45
55
  //# sourceMappingURL=FeatureLeaderboardWidget.js.map
@@ -18,6 +18,7 @@ const defaultState = {
18
18
  filters: { types: [] },
19
19
  aggregations: { types: [] },
20
20
  },
21
+ _selected_joins: [],
21
22
  _selected_filters: [],
22
23
  _selected_aggregations: [],
23
24
  configuration: { selectable: true, disabled: false },
@@ -6,13 +6,14 @@ Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.FeatureLeaderboardView = void 0;
7
7
  const react_1 = __importDefault(require("react"));
8
8
  const material_1 = require("@mui/material");
9
+ const column_1 = require("../../models/column");
10
+ const feature_1 = require("../../models/feature");
9
11
  const _utils_1 = require("../../utils");
10
12
  const widget_theme_1 = require("../../utils/widget-theme");
11
13
  const widget_model_1 = require("../../utils/widget-model");
12
14
  const transducer_1 = require("../../utils/transducer");
15
+ const FeatureLeaderboardEntryDrawer_1 = require("./leaderboard-entry/FeatureLeaderboardEntryDrawer");
13
16
  const FeatureLeaderboardOverview_1 = require("./FeatureLeaderboardOverview");
14
- const FeatureLeaderboardEntry_1 = require("./leaderboard-entry/FeatureLeaderboardEntry");
15
- const FeatureLeaderboardEntryRow_1 = require("./leaderboard-entry/FeatureLeaderboardEntryRow");
16
17
  const FeatureLeaderboardView = ({ model }) => {
17
18
  const [featureLeaderboard] = (0, widget_model_1.useModelState)('value');
18
19
  const isAssessed = (0, _utils_1.isNotSet)(featureLeaderboard.isAssessed) || featureLeaderboard.isAssessed;
@@ -20,23 +21,54 @@ const FeatureLeaderboardView = ({ model }) => {
20
21
  const [maxCollinearity, setMaxCollinearity] = (0, widget_model_1.useModelState)('max_collinearity');
21
22
  const [explanationSearch, setExplanationSearch] = react_1.default.useState(() => '');
22
23
  const featureEntries = react_1.default.useMemo(() => filterFeatures(featureLeaderboard, maxCollinearity, confidence, explanationSearch, isAssessed), [maxCollinearity, confidence, explanationSearch, featureLeaderboard]);
24
+ const tableColumns = react_1.default.useMemo(() => featureLeaderboard.tableColumns
25
+ ? column_1.TableColumns.fromSimplified(featureLeaderboard.tableColumns)
26
+ : {}, [featureLeaderboard.tableColumns]);
27
+ const [copiedFeature, setCopiedFeature] = react_1.default.useState(() => undefined);
23
28
  return (react_1.default.createElement(material_1.ThemeProvider, { theme: widget_theme_1.theme },
24
29
  react_1.default.createElement(FeatureLeaderboardOverview_1.FeatureLeaderboardOverview, { isAssessed: isAssessed, confidence: confidence, setConfidence: setConfidence, maxCollinearity: maxCollinearity, setMaxCollinearity: setMaxCollinearity, setSearch: setExplanationSearch }),
25
30
  react_1.default.createElement("br", null),
26
- react_1.default.createElement("div", { style: { display: 'inline-block', minWidth: '100%' } }, isAssessed
27
- ? featureEntries.map(featureEntry => (react_1.default.createElement(FeatureLeaderboardEntry_1.FeatureLeaderboardEntry, { key: featureEntry.feature.id, featureEntry: featureEntry })))
28
- : featureEntries.map(featureEntry => (react_1.default.createElement("div", { className: "feature-leaderboard-entry-row-wrapper", key: featureEntry.feature.id },
29
- react_1.default.createElement(FeatureLeaderboardEntryRow_1.FeatureLeaderboardEntryRow, { feature: featureEntry.feature })))))));
31
+ react_1.default.createElement("div", { className: "feature-entries-header", style: { display: 'flex' } },
32
+ react_1.default.createElement("span", { className: "feature-id", style: { marginLeft: isAssessed ? '30px' : 0 } }, "Feature ID"),
33
+ isAssessed ? react_1.default.createElement("span", { className: "confidence" }, "Confidence") : null,
34
+ react_1.default.createElement("span", { className: "explanation" }, "Explanation")),
35
+ react_1.default.createElement("div", { style: { display: 'inline-block', minWidth: '100%' } }, featureEntries.map(featureEntry => (react_1.default.createElement(react_1.default.Fragment, null,
36
+ react_1.default.createElement(FeatureLeaderboardEntryDrawer_1.FeatureLeaderboardEntryDrawer, { key: featureEntry.feature.id, featureEntry: featureEntry, tableColumn: tableColumns, isAssessed: isAssessed, config: {
37
+ onSetModel: mode => {
38
+ if (mode === FeatureLeaderboardEntryDrawer_1.DrawerMode.Copy) {
39
+ const originId = feature_1.FeatureId.getOriginId(featureEntry.feature.id);
40
+ (0, _utils_1.sha256)(`${new Date()}_${featureEntry.feature.id}`, 8).then(id => {
41
+ const feature = Object.assign(Object.assign({}, featureEntry), { isAssessed: false, feature: Object.assign(Object.assign({}, featureEntry.feature), { id: `${originId}_${id}` }) });
42
+ setCopiedFeature({
43
+ feature,
44
+ parentId: featureEntry.feature.id,
45
+ });
46
+ });
47
+ }
48
+ return mode !== FeatureLeaderboardEntryDrawer_1.DrawerMode.Copy;
49
+ },
50
+ } }),
51
+ (copiedFeature === null || copiedFeature === void 0 ? void 0 : copiedFeature.parentId) === featureEntry.feature.id ? (react_1.default.createElement("div", { style: { marginLeft: '30px' } },
52
+ react_1.default.createElement(FeatureLeaderboardEntryDrawer_1.FeatureLeaderboardEntryDrawer, { featureEntry: copiedFeature.feature, tableColumn: tableColumns, isAssessed: false, config: {
53
+ initMode: FeatureLeaderboardEntryDrawer_1.DrawerMode.Copy,
54
+ isWithLikes: false,
55
+ isWithActions: false,
56
+ onCancel: () => setCopiedFeature(undefined),
57
+ } }),
58
+ react_1.default.createElement("br", null))) : null))))));
30
59
  };
31
60
  exports.FeatureLeaderboardView = FeatureLeaderboardView;
32
61
  function filterFeatures(featureLeaderboard, maxCollinearity, confidence, explanationSearchPhrase, isAssessed) {
62
+ const shouldCheckIsAssessed = (entry) => (0, _utils_1.isSet)(entry.isAssessed) ? entry.isAssessed : true;
33
63
  const explanationSearchFilter = (entry) => {
34
64
  var _a;
35
65
  return !explanationSearchPhrase ||
36
66
  ((_a = entry.feature.explanation_str) === null || _a === void 0 ? void 0 : _a.includes(explanationSearchPhrase));
37
67
  };
38
- const correlationFilter = (entry) => entry.maxAbsCorrelationOfSimplerFeature <= maxCollinearity;
39
- const confidenceFilter = (entry) => entry.signalConfidence >= confidence;
68
+ const correlationFilter = (entry) => shouldCheckIsAssessed(entry)
69
+ ? entry.maxAbsCorrelationOfSimplerFeature <= maxCollinearity
70
+ : true;
71
+ const confidenceFilter = (entry) => shouldCheckIsAssessed(entry) ? entry.signalConfidence >= confidence : true;
40
72
  const reduces = isAssessed
41
73
  ? (0, transducer_1.compose)((0, transducer_1.filter)(explanationSearchFilter), (0, transducer_1.filter)(correlationFilter), (0, transducer_1.filter)(confidenceFilter))
42
74
  : (0, transducer_1.compose)((0, transducer_1.filter)(explanationSearchFilter));
@@ -3,12 +3,12 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.LeaderBoardFeatureLikes = void 0;
6
+ exports.LeaderboardFeatureLikes = void 0;
7
7
  const react_1 = __importDefault(require("react"));
8
8
  const lodash_1 = require("lodash");
9
9
  const widget_model_1 = require("../../../utils/widget-model");
10
10
  const feature_likes_1 = require("../../../feature/feature-likes");
11
- const LeaderBoardFeatureLikes = ({ featureId, }) => {
11
+ const LeaderboardFeatureLikes = ({ featureId, }) => {
12
12
  const [likedFeatures, setLikedFeatures] = (0, widget_model_1.useModelState)('liked_features');
13
13
  const [dislikedFeatures, setDislikedFeatures] = (0, widget_model_1.useModelState)('disliked_features');
14
14
  const [liked, setLiked] = react_1.default.useState(() => feature_likes_1.FeatureLike.Neutral);
@@ -46,5 +46,5 @@ const LeaderBoardFeatureLikes = ({ featureId, }) => {
46
46
  }
47
47
  return (react_1.default.createElement(feature_likes_1.FeatureLikes, { liked: liked, toggleIsLiked: toggleIsLiked, toggleIsDisliked: toggleIsDisliked }));
48
48
  };
49
- exports.LeaderBoardFeatureLikes = LeaderBoardFeatureLikes;
50
- //# sourceMappingURL=leaderboard-feature-likes.js.map
49
+ exports.LeaderboardFeatureLikes = LeaderboardFeatureLikes;
50
+ //# sourceMappingURL=LeaderboardFeatureLikes.js.map
@@ -0,0 +1,88 @@
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.FeatureLeaderboardEntryDrawer = exports.DrawerMode = void 0;
7
+ const react_1 = __importDefault(require("react"));
8
+ const material_1 = require("@mui/material");
9
+ const Code_1 = __importDefault(require("@mui/icons-material/Code"));
10
+ const ModeEdit_1 = __importDefault(require("@mui/icons-material/ModeEdit"));
11
+ const CopyAll_1 = __importDefault(require("@mui/icons-material/CopyAll"));
12
+ const _utils_1 = require("../../../utils");
13
+ const LeaderboardFeatureLikes_1 = require("../components/LeaderboardFeatureLikes");
14
+ const FeatureLeaderboardEntryDetails_1 = require("./FeatureLeaderboardEntryDetails");
15
+ const FeatureLeaderboardEntryFeatureEditor_1 = require("./FeatureLeaderboardEntryFeatureEditor");
16
+ const FeatureLeaderboardEntryHeader_1 = require("./FeatureLeaderboardEntryHeader");
17
+ const DetailsToggle = (props) => (react_1.default.createElement("span", { className: "details-toggle", onClick: props.onClick },
18
+ react_1.default.createElement("span", null, "\u25B6")));
19
+ const FeatureLabel = (props) => (react_1.default.createElement("span", { className: "feature-name-label label-bold" },
20
+ react_1.default.createElement(material_1.Tooltip, { title: props.featureEntry.feature.id, placement: "bottom" },
21
+ react_1.default.createElement("span", null, props.featureEntry.feature.id))));
22
+ const FeatureActions = (props) => {
23
+ var _a, _b;
24
+ const isWithActions = (_a = props.isWithActions) !== null && _a !== void 0 ? _a : true;
25
+ const isWithLikes = (_b = props.isWithLikes) !== null && _b !== void 0 ? _b : true;
26
+ return (react_1.default.createElement("div", { style: { marginLeft: 'auto', display: 'flex', gap: '5px' } },
27
+ isWithActions ? (react_1.default.createElement("div", { className: "fl-entry-row-actions" },
28
+ react_1.default.createElement("div", { className: "fl-entry-row-hidden-actions" },
29
+ react_1.default.createElement(material_1.IconButton, { color: "primary", size: "small", onClick: () => props.setMode(DrawerMode.Edit) },
30
+ react_1.default.createElement(ModeEdit_1.default, { className: "action-btn" })),
31
+ react_1.default.createElement(material_1.IconButton, { color: "primary", size: "small", onClick: () => props.setMode(DrawerMode.Copy) },
32
+ react_1.default.createElement(CopyAll_1.default, { className: "action-btn" })),
33
+ react_1.default.createElement(material_1.IconButton, { color: "primary", size: "small", onClick: () => props.setMode(DrawerMode.Code) },
34
+ react_1.default.createElement(Code_1.default, { className: "action-btn" }))))) : null,
35
+ isWithLikes ? (react_1.default.createElement(LeaderboardFeatureLikes_1.LeaderboardFeatureLikes, { featureId: props.featureEntry.feature.id })) : null));
36
+ };
37
+ var DrawerMode;
38
+ (function (DrawerMode) {
39
+ DrawerMode["None"] = "none";
40
+ DrawerMode["Edit"] = "edit";
41
+ DrawerMode["Copy"] = "copy";
42
+ DrawerMode["Code"] = "code";
43
+ DrawerMode["Details"] = "details";
44
+ })(DrawerMode = exports.DrawerMode || (exports.DrawerMode = {}));
45
+ const FeatureLeaderboardEntryDrawer = props => {
46
+ var _a;
47
+ const [mode, setMode] = react_1.default.useState(() => { var _a, _b; return (_b = (_a = props.config) === null || _a === void 0 ? void 0 : _a.initMode) !== null && _b !== void 0 ? _b : DrawerMode.None; });
48
+ const isExpanded = mode === DrawerMode.Code || mode === DrawerMode.Details;
49
+ const isWithAssessment = props.isAssessed;
50
+ const isAssessed = (_a = props.featureEntry.isAssessed) !== null && _a !== void 0 ? _a : props.isAssessed;
51
+ const toggleModel = (toggledMode) => {
52
+ return () => onSetModel(mode === toggledMode ? DrawerMode.None : toggledMode);
53
+ };
54
+ const onSetModel = (mode) => {
55
+ var _a, _b;
56
+ if ((_a = props.config) === null || _a === void 0 ? void 0 : _a.onSetModel) {
57
+ const setInlineMode = (_b = props.config.onSetModel(mode)) !== null && _b !== void 0 ? _b : true;
58
+ if (setInlineMode) {
59
+ setMode(mode);
60
+ }
61
+ }
62
+ else {
63
+ setMode(mode);
64
+ }
65
+ };
66
+ const onCancel = () => {
67
+ var _a, _b;
68
+ setMode(DrawerMode.None);
69
+ (_b = (_a = props.config) === null || _a === void 0 ? void 0 : _a.onCancel) === null || _b === void 0 ? void 0 : _b.call(_a);
70
+ };
71
+ return (react_1.default.createElement("div", { className: `feature-leaderboard-entry-drawer ${isExpanded ? 'expanded' : ''}` },
72
+ react_1.default.createElement("div", { className: "feature-leaderboard-entry-drawer-header", style: { display: 'flex' } },
73
+ isAssessed && isWithAssessment ? (react_1.default.createElement(DetailsToggle, { onClick: toggleModel(DrawerMode.Details) })) : isWithAssessment ? (react_1.default.createElement("span", { style: { width: '30px', display: 'inline-block' } })) : null,
74
+ react_1.default.createElement(FeatureLabel, { featureEntry: props.featureEntry }),
75
+ isWithAssessment ? (react_1.default.createElement("span", { className: "confidence-label", style: {
76
+ '--fill': `${props.featureEntry.signalConfidence * 100}%`,
77
+ } }, _utils_1.Localize.formatNumber(props.featureEntry.signalConfidence))) : null,
78
+ react_1.default.createElement(FeatureLeaderboardEntryHeader_1.FeatureLeaderboardEntryHeader, { feature: props.featureEntry.feature, isEdited: mode === DrawerMode.Edit, onClose: onCancel }),
79
+ react_1.default.createElement(FeatureActions, Object.assign({ mode: mode, setMode: onSetModel, featureEntry: props.featureEntry }, props === null || props === void 0 ? void 0 : props.config))),
80
+ react_1.default.createElement("div", { className: "feature-leaderboard-entry-drawer-details" },
81
+ react_1.default.createElement(material_1.Collapse, { in: mode === DrawerMode.Code || mode === DrawerMode.Copy, unmountOnExit: true },
82
+ react_1.default.createElement("br", null),
83
+ react_1.default.createElement(FeatureLeaderboardEntryFeatureEditor_1.FeatureLeaderboardEntryFeatureEditor, { featureId: props.featureEntry.feature.id, featureDescriptor: props.featureEntry.featureDescriptor, tableColumns: props.tableColumn, onClose: onCancel })),
84
+ react_1.default.createElement(material_1.Collapse, { in: mode === DrawerMode.Details, unmountOnExit: true },
85
+ react_1.default.createElement(FeatureLeaderboardEntryDetails_1.FeatureLeaderboardEntryDetails, { entry: props.featureEntry })))));
86
+ };
87
+ exports.FeatureLeaderboardEntryDrawer = FeatureLeaderboardEntryDrawer;
88
+ //# sourceMappingURL=FeatureLeaderboardEntryDrawer.js.map
@@ -0,0 +1,31 @@
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.FeatureLeaderboardEntryFeatureEditor = void 0;
7
+ const react_1 = __importDefault(require("react"));
8
+ const widget_model_1 = require("../../../utils/widget-model");
9
+ const widget_api_1 = require("../../../utils/widget-api");
10
+ const ActionFooter_1 = require("../../../components/ActionFooter");
11
+ const feature_descriptor_editor_1 = require("../../../feature-descriptor/feature-descriptor-editor");
12
+ const Footer = (props) => {
13
+ const Widget = widget_api_1.WidgetApi.init((0, widget_model_1.useWidgetModelContext)());
14
+ const [editor] = (0, feature_descriptor_editor_1.useFeatureDescriptorEditorContext)();
15
+ const validatedDraft = react_1.default.useMemo(() => feature_descriptor_editor_1.FeatureDescriptorDraft.validate(editor), [editor]);
16
+ return (react_1.default.createElement(ActionFooter_1.ActionFooter, { primaryButton: { label: 'Save', isDisabled: !validatedDraft.success }, tertiaryButton: { label: 'Cancel' }, onTertiaryButtonClick: props.onClose, onPrimaryButtonClick: () => {
17
+ Widget.callMethod('save_feature', {
18
+ id: props.featureId,
19
+ descriptor: validatedDraft.data,
20
+ })
21
+ .then(() => props.onClose())
22
+ .catch(e => console.error(e));
23
+ } }));
24
+ };
25
+ const FeatureLeaderboardEntryFeatureEditor = (props) => {
26
+ return (react_1.default.createElement(feature_descriptor_editor_1.FeatureDescriptorEditorContextProvider, { initFeatureDescriptor: props.featureDescriptor, tableColumns: props.tableColumns },
27
+ react_1.default.createElement(feature_descriptor_editor_1.FeatureDescriptorEditor, { featureDescriptor: props.featureDescriptor, tableColumns: props.tableColumns }),
28
+ react_1.default.createElement(Footer, { featureId: props.featureId, onClose: props.onClose })));
29
+ };
30
+ exports.FeatureLeaderboardEntryFeatureEditor = FeatureLeaderboardEntryFeatureEditor;
31
+ //# sourceMappingURL=FeatureLeaderboardEntryFeatureEditor.js.map
@@ -0,0 +1,15 @@
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 feature_user_explanation_1 = require("../../../feature/feature-user-explanation");
9
+ const FeatureExplanation_1 = require("../../../feature/feature-explanation/FeatureExplanation");
10
+ const FeatureLeaderboardUserExplanation_1 = require("./FeatureLeaderboardUserExplanation");
11
+ const FeatureLeaderboardEntryHeader = (props) => {
12
+ return (react_1.default.createElement("div", { style: { flex: '1 0 auto' } }, props.isEdited ? (react_1.default.createElement(FeatureLeaderboardUserExplanation_1.FeatureLeaderboardUserExplanation, { feature: props.feature, onClose: props.onClose })) : props.feature.user_explanation ? (react_1.default.createElement(feature_user_explanation_1.FeatureUserExplanationDisplay, { userExplanation: props.feature.user_explanation })) : (react_1.default.createElement(FeatureExplanation_1.FeatureExplanation, { explanationBlocks: props.feature.explanation.tokens }))));
13
+ };
14
+ exports.FeatureLeaderboardEntryHeader = FeatureLeaderboardEntryHeader;
15
+ //# sourceMappingURL=FeatureLeaderboardEntryHeader.js.map
@@ -0,0 +1,28 @@
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.FeatureLeaderboardUserExplanation = void 0;
7
+ const react_1 = __importDefault(require("react"));
8
+ const widget_api_1 = require("../../../utils/widget-api");
9
+ const widget_model_1 = require("../../../utils/widget-model");
10
+ const ActionFooter_1 = require("../../../components/ActionFooter");
11
+ const feature_user_explanation_1 = require("../../../feature/feature-user-explanation");
12
+ const FeatureLeaderboardUserExplanation = (props) => {
13
+ const Widget = widget_api_1.WidgetApi.init((0, widget_model_1.useWidgetModelContext)());
14
+ const [userExplanation, setUserExplanation] = react_1.default.useState(props.feature.user_explanation ||
15
+ (0, feature_user_explanation_1.explanationToUserExplanation)(props.feature.explanation.tokens));
16
+ return (react_1.default.createElement("div", { style: { display: 'flex' } },
17
+ react_1.default.createElement(feature_user_explanation_1.FeatureUserExplanation, { userExplanation: userExplanation, onUserExplanationChange: setUserExplanation }),
18
+ react_1.default.createElement(ActionFooter_1.ActionFooter, { primaryButton: { label: 'Save' }, tertiaryButton: { label: 'Cancel' }, onTertiaryButtonClick: props.onClose, onPrimaryButtonClick: () => {
19
+ Widget.callMethod('set_user_explanation', {
20
+ id: props.feature.id,
21
+ user_explanation: userExplanation,
22
+ })
23
+ .then(() => props.onClose())
24
+ .catch(e => console.error(e));
25
+ } })));
26
+ };
27
+ exports.FeatureLeaderboardUserExplanation = FeatureLeaderboardUserExplanation;
28
+ //# sourceMappingURL=FeatureLeaderboardUserExplanation.js.map
@@ -20,16 +20,16 @@ const Divider = () => (react_1.default.createElement("div", { style: {
20
20
  const FeatureSpaceView = props => {
21
21
  const [featureSpace] = (0, widget_model_1.useModelState)('value');
22
22
  const [configuration] = (0, widget_model_1.useModelState)('configuration');
23
+ const selectedJoinsModel = (0, widget_model_1.useModelState)('_selected_joins');
23
24
  const selectedFiltersModel = (0, widget_model_1.useModelState)('_selected_filters');
24
25
  const selectedAggregationsModel = (0, widget_model_1.useModelState)('_selected_aggregations');
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_descriptions_tree_1.DescriptionsTree.appendGroupId(featureSpace.filters, 'f'));
29
+ setFilterDescriptionsTree(domains_descriptions_tree_1.DescriptionsTree.appendNodeId(featureSpace.filters, 'f'));
30
30
  }, [featureSpace.filters]);
31
31
  react_1.default.useEffect(() => {
32
- setAggregationDescriptionsTree(domains_descriptions_tree_1.DescriptionsTree.appendGroupId(featureSpace.aggregations, 'a'));
32
+ setAggregationDescriptionsTree(domains_descriptions_tree_1.DescriptionsTree.appendNodeId(featureSpace.aggregations, 'a'));
33
33
  }, [featureSpace.aggregations]);
34
34
  const descriptionTreeConfig = react_1.default.useMemo(() => ({
35
35
  isWithCheckboxes: configuration.selectable,
@@ -38,15 +38,15 @@ const FeatureSpaceView = props => {
38
38
  return (react_1.default.createElement(styles_1.ThemeProvider, { theme: widget_theme_1.theme },
39
39
  react_1.default.createElement(domains_descriptions_tree_1.DomainsDescriptionsTreeConfigContextProvider, { configuration: descriptionTreeConfig },
40
40
  react_1.default.createElement(domains_descriptions_tree_1.DomainsDescriptionsTreeItemSelectionContextProvider, null,
41
- react_1.default.createElement(FeatureExplorationPaths_1.FeatureExplorationPaths, { explorationPaths: featureSpace.explorationPaths, selectedJoinIds: selectedJoinIds, setSelectedJoinIds: setSelectedJoinIds }),
41
+ react_1.default.createElement(FeatureExplorationPaths_1.FeatureExplorationPaths, { explorationPaths: featureSpace.explorationPaths, selectedJoinIds: selectedJoinsModel[0], setSelectedJoinIds: selectedJoinsModel[1] }),
42
42
  react_1.default.createElement(Divider, null),
43
43
  react_1.default.createElement(material_1.Grid, { container: true, spacing: 6 },
44
44
  react_1.default.createElement(material_1.Grid, { item: true, xs: 6 },
45
45
  react_1.default.createElement(domains_descriptions_tree_1.DomainsDescriptionsSelectionContextProvider, { selectedDomainDescriptionIds: selectedFiltersModel[0], setSelectedDomainDescriptionIds: selectedFiltersModel[1] },
46
- react_1.default.createElement(FeatureDomainsDescriptions_1.FeatureDomainsDescriptions, { domainName: "Filters", descriptionsTree: filterDescriptionsTree, selectedJoinIds: selectedJoinIds }))),
46
+ react_1.default.createElement(FeatureDomainsDescriptions_1.FeatureDomainsDescriptions, { domainName: "Filters", descriptionsTree: filterDescriptionsTree, selectedJoinIds: selectedJoinsModel[0] }))),
47
47
  react_1.default.createElement(material_1.Grid, { item: true, xs: 6, sx: { overflow: 'hidden' } },
48
48
  react_1.default.createElement(domains_descriptions_tree_1.DomainsDescriptionsSelectionContextProvider, { selectedDomainDescriptionIds: selectedAggregationsModel[0], setSelectedDomainDescriptionIds: selectedAggregationsModel[1] },
49
- react_1.default.createElement(FeatureDomainsDescriptions_1.FeatureDomainsDescriptions, { domainName: "Aggregations", descriptionsTree: aggregationDescriptionsTree, selectedJoinIds: selectedJoinIds }))))))));
49
+ react_1.default.createElement(FeatureDomainsDescriptions_1.FeatureDomainsDescriptions, { domainName: "Aggregations", descriptionsTree: aggregationDescriptionsTree, selectedJoinIds: selectedJoinsModel[0] }))))))));
50
50
  };
51
51
  exports.FeatureSpaceView = FeatureSpaceView;
52
52
  //# sourceMappingURL=FeatureSpaceView.js.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "dotdata_widgets",
3
- "version": "0.1.10",
3
+ "version": "0.2.0",
4
4
  "description": "A dotdata widget",
5
5
  "keywords": [
6
6
  "dotdata",
@@ -33,7 +33,7 @@
33
33
  "scripts": {
34
34
  "build": "yarn run build:lib && yarn run build:nbextension && yarn run build:labextension:dev",
35
35
  "build:prod": "yarn run build:lib && yarn run build:nbextension && yarn run build:labextension",
36
- "build:labextension": "jupyter labextension build .",
36
+ "build:labextension": "jupyter labextension build . && touch dotdata_widgets/labextension/static/__init__.py && touch dotdata_widgets/labextension/__init__.py",
37
37
  "build:labextension:dev": "jupyter labextension build --development True .",
38
38
  "build:lib": "tsc && tsc-alias",
39
39
  "build:nbextension": "webpack",
@@ -58,10 +58,13 @@
58
58
  "@mui/lab": "^5.0.0-alpha.120",
59
59
  "@mui/material": "^5.11.9",
60
60
  "@tanstack/react-virtual": "^3.0.0-beta.48",
61
+ "dompurify": "^3.0.1",
61
62
  "lodash": "^4.17.21",
62
63
  "react": "17.0.2",
63
64
  "react-dom": "17.0.2",
64
- "vega": "^5.22.1"
65
+ "ts-pattern": "^4.2.2",
66
+ "vega": "^5.22.1",
67
+ "zod": "^3.21.4"
65
68
  },
66
69
  "devDependencies": {
67
70
  "@babel/core": "^7.20.12",
@@ -69,6 +72,7 @@
69
72
  "@babel/preset-react": "^7.18.6",
70
73
  "@babel/preset-typescript": "^7.18.6",
71
74
  "@jupyterlab/builder": "^3.6.1",
75
+ "@types/dompurify": "^3.0.0",
72
76
  "@types/jest": "^29.4.0",
73
77
  "@types/react": "17.0.53",
74
78
  "@types/react-dom": "17.0.18",
@@ -109,12 +113,6 @@
109
113
  },
110
114
  "jupyterlab": {
111
115
  "extension": "lib/plugin",
112
- "outputDir": "dotdata_widgets/labextension/",
113
- "sharedPackages": {
114
- "@jupyter-widgets/base": {
115
- "bundled": false,
116
- "singleton": true
117
- }
118
- }
116
+ "outputDir": "dotdata_widgets/labextension/"
119
117
  }
120
118
  }
@@ -1,14 +0,0 @@
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.Input = void 0;
7
- const react_1 = __importDefault(require("react"));
8
- function Input(props) {
9
- const { onValueChange, inputSize, ...restProps } = props;
10
- const isSmall = inputSize === 'small';
11
- return (react_1.default.createElement("input", { type: "text", ...restProps, className: `dd-input ${restProps.className ?? ''} ${isSmall ? 'small' : ''}`, onChange: event => onValueChange(event.target.value) }));
12
- }
13
- exports.Input = Input;
14
- //# sourceMappingURL=input.js.map