@miso.ai/client-sdk-ui 1.10.3 → 1.10.4-beta.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 (99) hide show
  1. package/dist/cjs/actor/autocomplete.js +4 -1
  2. package/dist/cjs/actor/data.js +15 -6
  3. package/dist/cjs/actor/fields.js +10 -10
  4. package/dist/cjs/actor/filters.js +114 -0
  5. package/dist/cjs/actor/hub.js +2 -1
  6. package/dist/cjs/actor/sessions.js +3 -5
  7. package/dist/cjs/actor/view.js +19 -6
  8. package/dist/cjs/actor/views.js +32 -19
  9. package/dist/cjs/constants.js +9 -2
  10. package/dist/cjs/defaults/ask/constants.js +3 -2
  11. package/dist/cjs/defaults/ask/templates.js +112 -219
  12. package/dist/cjs/defaults/common/templates.js +234 -0
  13. package/dist/cjs/defaults/hybrid-search/answer-box.js +115 -0
  14. package/dist/cjs/defaults/hybrid-search/constants.js +8 -0
  15. package/dist/cjs/defaults/hybrid-search/controls.js +17 -0
  16. package/dist/cjs/defaults/hybrid-search/index.js +31 -0
  17. package/dist/cjs/defaults/hybrid-search/phrases.js +27 -0
  18. package/dist/cjs/defaults/hybrid-search/templates.js +127 -0
  19. package/dist/cjs/defaults/index.js +4 -2
  20. package/dist/cjs/element/container/index.js +7 -0
  21. package/dist/cjs/element/container/miso-hybrid-search.js +21 -0
  22. package/dist/cjs/element/role/index.js +21 -0
  23. package/dist/cjs/element/role/miso-facets.js +20 -0
  24. package/dist/cjs/element/role/miso-hits.js +20 -0
  25. package/dist/cjs/element/role/miso-keywords.js +20 -0
  26. package/dist/cjs/layout/index.js +7 -0
  27. package/dist/cjs/layout/input/facets.js +294 -0
  28. package/dist/cjs/layout/input/option-list.js +4 -4
  29. package/dist/cjs/layout/input/search-box.js +6 -8
  30. package/dist/cjs/layout/list/collection.js +1 -2
  31. package/dist/cjs/layout/raf.js +1 -0
  32. package/dist/cjs/layout/template.js +3 -1
  33. package/dist/cjs/layout/templates.js +15 -0
  34. package/dist/cjs/layout/text/text.js +38 -5
  35. package/dist/cjs/layout/trackable.js +2 -16
  36. package/dist/cjs/plugin.js +4 -1
  37. package/dist/cjs/{source/index.js → source.js} +7 -4
  38. package/dist/cjs/util/bindings.js +3 -0
  39. package/dist/cjs/version.js +1 -1
  40. package/dist/cjs/workflow/answer-based.js +335 -0
  41. package/dist/cjs/workflow/ask.js +98 -271
  42. package/dist/cjs/workflow/base.js +69 -35
  43. package/dist/cjs/workflow/explore.js +10 -0
  44. package/dist/cjs/workflow/hybrid-search.js +140 -0
  45. package/dist/cjs/workflow/index.js +7 -0
  46. package/dist/cjs/workflow/processors.js +113 -0
  47. package/dist/cjs/workflow/recommendation.js +12 -3
  48. package/dist/cjs/workflow/search.js +34 -12
  49. package/package.json +2 -2
  50. package/src/actor/autocomplete.js +4 -2
  51. package/src/actor/data.js +8 -2
  52. package/src/actor/fields.js +10 -10
  53. package/src/actor/filters.js +103 -0
  54. package/src/actor/hub.js +2 -1
  55. package/src/actor/sessions.js +3 -4
  56. package/src/actor/view.js +19 -2
  57. package/src/actor/views.js +30 -16
  58. package/src/constants.js +10 -0
  59. package/src/defaults/ask/constants.js +1 -0
  60. package/src/defaults/ask/templates.js +70 -179
  61. package/src/defaults/common/templates.js +173 -0
  62. package/src/defaults/hybrid-search/answer-box.js +118 -0
  63. package/src/defaults/hybrid-search/constants.js +2 -0
  64. package/src/defaults/hybrid-search/controls.js +11 -0
  65. package/src/defaults/hybrid-search/index.js +9 -0
  66. package/src/defaults/hybrid-search/phrases.js +22 -0
  67. package/src/defaults/hybrid-search/templates.js +83 -0
  68. package/src/defaults/index.js +2 -0
  69. package/src/element/container/index.js +1 -0
  70. package/src/element/container/miso-hybrid-search.js +19 -0
  71. package/src/element/role/index.js +3 -0
  72. package/src/element/role/miso-facets.js +16 -0
  73. package/src/element/role/miso-hits.js +16 -0
  74. package/src/element/role/miso-keywords.js +16 -0
  75. package/src/layout/index.js +1 -0
  76. package/src/layout/input/facets.js +242 -0
  77. package/src/layout/input/option-list.js +3 -4
  78. package/src/layout/input/search-box.js +6 -7
  79. package/src/layout/list/collection.js +1 -2
  80. package/src/layout/raf.js +1 -0
  81. package/src/layout/template.js +2 -1
  82. package/src/layout/templates.js +15 -0
  83. package/src/layout/text/text.js +28 -3
  84. package/src/layout/trackable.js +2 -15
  85. package/src/plugin.js +6 -2
  86. package/src/{source/index.js → source.js} +7 -4
  87. package/src/util/bindings.js +4 -0
  88. package/src/version.js +1 -1
  89. package/src/workflow/answer-based.js +280 -0
  90. package/src/workflow/ask.js +82 -204
  91. package/src/workflow/base.js +64 -27
  92. package/src/workflow/explore.js +10 -1
  93. package/src/workflow/hybrid-search.js +125 -0
  94. package/src/workflow/index.js +1 -0
  95. package/src/workflow/processors.js +95 -0
  96. package/src/workflow/recommendation.js +9 -2
  97. package/src/workflow/search.js +35 -7
  98. package/dist/cjs/source/api.js +0 -23
  99. package/src/source/api.js +0 -12
@@ -18,6 +18,8 @@ class AutocompleteActor {
18
18
  this._source = source;
19
19
  this._options = options;
20
20
  this._index = -1;
21
+
22
+ // TODO: listen to request:input instead
21
23
  this._unsubscribes = [hub.on(fields.input(), () => this._sync()), options.on('autocomplete', () => this._syncOptions())];
22
24
 
23
25
  // sync right away
@@ -133,7 +135,8 @@ class AutocompleteActor {
133
135
  }
134
136
  _emitCompletions(event) {
135
137
  event.source = 'actor';
136
- this._hub.update(fields.completions(), event);
138
+ // TDOO: update response:autocomplete instead
139
+ this._hub.update(fields.data(_constants.DATA_ASPECT.AUTOCOMPLETE), event);
137
140
  }
138
141
  _error(error) {
139
142
  // TODO
@@ -58,12 +58,13 @@ class DataActor {
58
58
  session
59
59
  } = this._hub.states;
60
60
  const request = _objectWithoutPropertiesLoose(event, _excluded);
61
-
62
- // emit response to update request
63
- this._emitResponse({
64
- session,
65
- request
66
- });
61
+ if (!event._skipLoading) {
62
+ // emit response to update request
63
+ this._emitResponse({
64
+ session,
65
+ request
66
+ });
67
+ }
67
68
  try {
68
69
  const {
69
70
  signal
@@ -78,6 +79,14 @@ class DataActor {
78
79
  }));
79
80
  // takes an iterable, either sync or async
80
81
  if (response && response[Symbol.asyncIterator]) {
82
+ // also emit reponse of the head request, if available
83
+ if (response._response) {
84
+ this._emitResponseWithSessionCheck({
85
+ session,
86
+ request,
87
+ value: response._response
88
+ });
89
+ }
81
90
  let value;
82
91
  for await (value of response) {
83
92
  // A new session invalidates ongoing data fetch for the old session, terminating the loop
@@ -3,10 +3,10 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.completions = completions;
7
6
  exports.data = data;
8
7
  exports.event = event;
9
8
  exports.feedback = feedback;
9
+ exports.filters = filters;
10
10
  exports.input = input;
11
11
  exports.interaction = interaction;
12
12
  exports.query = query;
@@ -22,17 +22,20 @@ function session() {
22
22
  function suggestions() {
23
23
  return 'suggestions';
24
24
  }
25
+ function filters() {
26
+ return 'filters';
27
+ }
25
28
  function query() {
26
29
  return 'query';
27
30
  }
28
- function request() {
29
- return 'request';
31
+ function request(aspect) {
32
+ return aspect ? `request:${aspect}` : 'request';
30
33
  }
31
- function response() {
32
- return 'response';
34
+ function response(aspect) {
35
+ return aspect ? `response:${aspect}` : 'response';
33
36
  }
34
- function data() {
35
- return 'data';
37
+ function data(aspect) {
38
+ return aspect ? `data:${aspect}` : 'data';
36
39
  }
37
40
  function view(role) {
38
41
  return role ? `view:${role}` : 'view';
@@ -51,7 +54,4 @@ function feedback() {
51
54
  }
52
55
  function input() {
53
56
  return 'input';
54
- }
55
- function completions() {
56
- return 'completions';
57
57
  }
@@ -0,0 +1,114 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+ var _commons = require("@miso.ai/commons");
8
+ var fields = _interopRequireWildcard(require("./fields.js"));
9
+ function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
10
+ function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
11
+ function mergeState() {
12
+ let state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
13
+ let update = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
14
+ return Object.freeze((0, _commons.trimObj)(Object.assign({}, state, update, {
15
+ facets: Object.freeze((0, _commons.trimObj)(Object.assign({}, state.facets, update.facets)))
16
+ })));
17
+ }
18
+ class Filters {
19
+ constructor(views) {
20
+ let {
21
+ facets: facetsOptions
22
+ } = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
23
+ this._views = views;
24
+ this._hub = views._hub;
25
+ this._states = this._initialStates = mergeState({}); // TODO: support custom initial states
26
+ const error = this._error = this._error.bind(this);
27
+ this._events = new _commons.EventEmitter({
28
+ target: this,
29
+ error
30
+ });
31
+ (0, _commons.defineValues)(this, {
32
+ facets: new Facets(this, facetsOptions)
33
+ });
34
+ }
35
+ get states() {
36
+ return this._states;
37
+ }
38
+ update(updates) {
39
+ const oldStates = this._states;
40
+ const states = this._states = mergeState(Object.assign({}, this._states, updates));
41
+ this._events.emit('update', {
42
+ updates,
43
+ states,
44
+ oldStates
45
+ });
46
+ }
47
+ reset() {
48
+ const oldStates = this._states;
49
+ const states = this._states = this._initialStates;
50
+ this._events.emit('reset', {
51
+ states,
52
+ oldStates
53
+ });
54
+ }
55
+ apply() {
56
+ this._hub.update(fields.filters(), this._states);
57
+ this._events.emit('apply');
58
+ }
59
+ _error(error) {
60
+ this._views._error(error);
61
+ }
62
+ _destroy() {}
63
+ }
64
+ exports.default = Filters;
65
+ class Facets {
66
+ constructor(filters) {
67
+ let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
68
+ this._filters = filters;
69
+ this._options = options;
70
+ }
71
+ isSelected(field, value) {
72
+ const state = this._filters._states.facets[field];
73
+ return state && state.includes(value);
74
+ }
75
+ select(field, value) {
76
+ if (this.isSelected(field, value)) {
77
+ return;
78
+ }
79
+ this._select(field, value);
80
+ }
81
+ unselect(field, value) {
82
+ if (!this.isSelected(field, value)) {
83
+ return;
84
+ }
85
+ this._unselect(field, value);
86
+ }
87
+ toggle(field, value) {
88
+ if (this.isSelected(field, value)) {
89
+ this._unselect(field, value);
90
+ } else {
91
+ this._select(field, value);
92
+ }
93
+ }
94
+ _select(field, value) {
95
+ const values = this._options.multiple ? [...(this._filters._states.facets[field] || []), value] : [value];
96
+ values.sort();
97
+ this._filters.update({
98
+ facets: {
99
+ [field]: values
100
+ }
101
+ });
102
+ }
103
+ _unselect(field, value) {
104
+ let values = this._filters._states.facets[field].filter(v => v !== value);
105
+ if (values.length === 0) {
106
+ values = undefined;
107
+ }
108
+ this._filters.update({
109
+ facets: {
110
+ [field]: values
111
+ }
112
+ });
113
+ }
114
+ }
@@ -5,6 +5,7 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.default = void 0;
7
7
  var _commons = require("@miso.ai/commons");
8
+ var _processors = require("../workflow/processors.js");
8
9
  class Hub {
9
10
  constructor() {
10
11
  (this._events = new _commons.EventEmitter())._injectSubscribeInterface(this);
@@ -19,7 +20,7 @@ class Hub {
19
20
  let {
20
21
  silent = false
21
22
  } = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
22
- this._states[name] = Object.freeze(state);
23
+ this._states[name] = Object.freeze((0, _processors.removeDataInstructions)(state));
23
24
  if (!silent) {
24
25
  this._events.emit(name, state);
25
26
  }
@@ -41,14 +41,12 @@ class SessionMaker {
41
41
  }));
42
42
  }
43
43
  restart() {
44
- this.new({
45
- force: true
46
- });
47
- this.start();
44
+ this._hub.update(fields.session(), this._create(true));
48
45
  }
49
46
  _create() {
47
+ let active = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
50
48
  return Object.freeze({
51
- active: false,
49
+ active,
52
50
  uuid: (0, _commons.uuidv4)(),
53
51
  index: this._sessionIndex++,
54
52
  meta: {}
@@ -28,6 +28,7 @@ class ViewActor {
28
28
  target: this
29
29
  });
30
30
  this._views = views;
31
+ this._config = views._rolesConfig[role] || {};
31
32
  (0, _commons.defineValues)(this, {
32
33
  role,
33
34
  interface: new View(this)
@@ -111,6 +112,9 @@ class ViewActor {
111
112
  }
112
113
  return this._tracker;
113
114
  }
115
+ get filters() {
116
+ return this._views.filters;
117
+ }
114
118
  async refresh() {
115
119
  var _this = this;
116
120
  let {
@@ -209,16 +213,15 @@ class ViewActor {
209
213
  // used by tracker to expose tracker options to layout
210
214
  return this._views._getTrackerOptions(this.role);
211
215
  }
212
- _sliceData(_ref2) {
213
- let {
216
+ _sliceData(data) {
217
+ const {
214
218
  value,
215
- error,
216
219
  status,
217
220
  meta
218
- } = _ref2,
219
- rest = _objectWithoutPropertiesLoose(_ref2, _excluded);
221
+ } = data,
222
+ rest = _objectWithoutPropertiesLoose(data, _excluded);
220
223
  const sliced = Object.assign({
221
- value: this.role === _constants.ROLE.ERROR ? error : value && value[this.role],
224
+ value: asMappingFunction(this._config.mapping || this.role)(data),
222
225
  status,
223
226
  data: value,
224
227
  meta
@@ -287,4 +290,14 @@ class View {
287
290
  constructor(actor) {
288
291
  (0, _commons.delegateGetters)(this, actor, ['role', 'layout', 'element', 'proxyElement', 'refresh', 'on', 'tracker']);
289
292
  }
293
+ }
294
+ function asMappingFunction(fn) {
295
+ switch (typeof fn) {
296
+ case 'function':
297
+ return fn;
298
+ case 'string':
299
+ return data => data.value && data.value[fn];
300
+ default:
301
+ throw new Error(`Invalid mapping function: ${fn}`);
302
+ }
290
303
  }
@@ -8,6 +8,7 @@ var _commons = require("@miso.ai/commons");
8
8
  var _constants = require("../constants.js");
9
9
  var fields = _interopRequireWildcard(require("./fields.js"));
10
10
  var _view = _interopRequireDefault(require("./view.js"));
11
+ var _filters = _interopRequireDefault(require("./filters.js"));
11
12
  var _tracker = _interopRequireDefault(require("./tracker.js"));
12
13
  var _trackers = require("../util/trackers.js");
13
14
  function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
@@ -20,6 +21,7 @@ class ViewsActor {
20
21
  extensions,
21
22
  layouts,
22
23
  roles = [],
24
+ rolesConfig = {},
23
25
  options
24
26
  } = _ref;
25
27
  this._hub = hub;
@@ -27,10 +29,12 @@ class ViewsActor {
27
29
  this._extensions = extensions;
28
30
  this._layoutFactory = layouts;
29
31
  this._options = options;
32
+ this._rolesConfig = rolesConfig;
30
33
  this._containers = new Map();
31
34
  this._containerTracker = undefined;
32
35
  this._views = {};
33
36
  this._trackers = new Trackers(this, roles);
37
+ this._filters = new _filters.default(this);
34
38
  for (const role of roles) {
35
39
  this._views[role] = new _view.default(this, role);
36
40
  }
@@ -39,13 +43,18 @@ class ViewsActor {
39
43
  });
40
44
  const syncSize = () => this.syncSize();
41
45
  window.addEventListener('resize', syncSize);
42
- this._unsubscribes = [() => window.removeEventListener('resize', syncSize), hub.on(fields.data(), () => this.refresh()), options.on('trackers', () => this._syncTrackers()), options.on('layouts', () => this._syncLayouts())];
46
+ this._unsubscribes = [() => window.removeEventListener('resize', syncSize), hub.on(fields.data(), data => this.refresh({
47
+ data
48
+ })), options.on('trackers', () => this._syncTrackers()), options.on('layouts', () => this._syncLayouts())];
43
49
  this._syncTrackers();
44
50
  this._syncLayouts();
45
51
  }
46
52
  get trackers() {
47
53
  return this._trackers;
48
54
  }
55
+ get filters() {
56
+ return this._filters;
57
+ }
49
58
 
50
59
  // elements //
51
60
  addContainer(element) {
@@ -174,29 +183,32 @@ class ViewsActor {
174
183
  }
175
184
  async refresh() {
176
185
  let {
177
- force
186
+ force,
187
+ data
178
188
  } = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
179
- const data = this._getData();
189
+ data = this._getData(data);
180
190
  // container first
181
- await Promise.all(this._getViews(true).map(view => view.refresh({
191
+ let views = this._getViews(true);
192
+ if (!force && data._inst) {
193
+ const {
194
+ includes,
195
+ excludes
196
+ } = data._inst;
197
+ if (includes) {
198
+ // always include containers
199
+ views = views.filter(view => view.role === _constants.ROLE.CONTAINER || includes.includes(view.role));
200
+ }
201
+ if (excludes) {
202
+ views = views.filter(view => !excludes.includes(view.role));
203
+ }
204
+ }
205
+ await Promise.all(views.map(view => view.refresh({
182
206
  force,
183
207
  data
184
208
  })));
185
209
  }
186
- _getData() {
187
- const {
188
- [fields.data()]: data
189
- } = this._hub.states;
190
- // compare to cached
191
- if (!this._data || this._data.data !== data) {
192
- const status = !data || !data.session || !data.session.active ? _constants.STATUS.INITIAL : data.error ? _constants.STATUS.ERRONEOUS : data.value ? _constants.STATUS.READY : _constants.STATUS.LOADING;
193
- const ongoing = status === _constants.STATUS.READY ? !!data.ongoing : undefined;
194
- this._data = Object.freeze(Object.assign({}, data, {
195
- status,
196
- ongoing
197
- }));
198
- }
199
- return this._data;
210
+ _getData(data) {
211
+ return data || this._hub.states[fields.data()];
200
212
  }
201
213
  _syncTrackers() {
202
214
  this._trackerOptions = this._options.resolved.trackers;
@@ -234,13 +246,14 @@ class ViewsActor {
234
246
  unsubscribe();
235
247
  }
236
248
  this._unsubscribes = [];
249
+ this._filters._destroy();
237
250
  }
238
251
  }
239
252
  exports.default = ViewsActor;
240
253
  class Views {
241
254
  constructor(actor) {
242
255
  this._actor = actor;
243
- (0, _commons.delegateGetters)(this, actor, ['syncSize', 'refresh', 'trackers']);
256
+ (0, _commons.delegateGetters)(this, actor, ['syncSize', 'refresh', 'trackers', 'filters']);
244
257
  }
245
258
  get(role) {
246
259
  return this._actor.get(role).interface;
@@ -3,7 +3,7 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.TRACKING_STATUS = exports.TRACKING_EVENT_TYPES = exports.STATUS = exports.ROLE = exports.ORGANIC_QUESTION_SOURCE = exports.LAYOUT_CATEGORY = exports.EVENT_TYPE = exports.DEFAULT_UNIT_ID = exports.ATTR_DATA_MISO_UNIT_ID = exports.ATTR_DATA_MISO_PRODUCT_ID = void 0;
6
+ exports.TRACKING_STATUS = exports.TRACKING_EVENT_TYPES = exports.STATUS = exports.ROLE = exports.ORGANIC_QUESTION_SOURCE = exports.LAYOUT_CATEGORY = exports.EVENT_TYPE = exports.DEFAULT_UNIT_ID = exports.DATA_ASPECT = exports.ATTR_DATA_MISO_UNIT_ID = exports.ATTR_DATA_MISO_PRODUCT_ID = void 0;
7
7
  exports.isDataRole = isDataRole;
8
8
  exports.validateEventType = validateEventType;
9
9
  exports.validateTrackingStatus = validateTrackingStatus;
@@ -28,18 +28,25 @@ const ROLE = exports.ROLE = Object.freeze({
28
28
  QUERY_SUGGESTIONS: 'query_suggestions',
29
29
  RELATED_QUESTIONS: 'related_questions',
30
30
  AFFILIATION: 'affiliation',
31
+ KEYWORDS: 'keywords',
32
+ FACETS: 'facets',
33
+ HITS: 'hits',
31
34
  ERROR: 'error'
32
35
  });
33
- const DATA_ROLE_SET = new Set([ROLE.PRODUCTS, ROLE.CATEGORIES, ROLE.ATTRIBUTES, ROLE.RESULTS, ROLE.ITEMS, ROLE.QUESTION, ROLE.ANSWER, ROLE.SOURCES, ROLE.RELATED_RESOURCES, ROLE.QUERY_SUGGESTIONS, ROLE.RELATED_QUESTIONS, ROLE.AFFILIATION]);
36
+ const DATA_ROLE_SET = new Set([ROLE.PRODUCTS, ROLE.CATEGORIES, ROLE.ATTRIBUTES, ROLE.RESULTS, ROLE.ITEMS, ROLE.QUESTION, ROLE.ANSWER, ROLE.SOURCES, ROLE.RELATED_RESOURCES, ROLE.QUERY_SUGGESTIONS, ROLE.RELATED_QUESTIONS, ROLE.AFFILIATION, ROLE.FACETS, ROLE.HITS]);
34
37
  function isDataRole(role) {
35
38
  return DATA_ROLE_SET.has(role);
36
39
  }
40
+ const DATA_ASPECT = exports.DATA_ASPECT = Object.freeze({
41
+ AUTOCOMPLETE: 'autocomplete'
42
+ });
37
43
  const LAYOUT_CATEGORY = exports.LAYOUT_CATEGORY = Object.freeze({
38
44
  CONTAINER: 'container',
39
45
  BANNER: 'banner',
40
46
  LIST: 'list',
41
47
  QUERY: 'query',
42
48
  RADIO: 'radio',
49
+ FILTERS: 'filters',
43
50
  TEXT: 'text',
44
51
  AFFILIATION: 'affiliation',
45
52
  ERROR: 'error'
@@ -3,5 +3,6 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.CLASS_PREFIX = void 0;
7
- const CLASS_PREFIX = exports.CLASS_PREFIX = 'miso-ask-combo';
6
+ exports.CONAINER_TAG = exports.CLASS_PREFIX = void 0;
7
+ const CLASS_PREFIX = exports.CLASS_PREFIX = 'miso-ask-combo';
8
+ const CONAINER_TAG = exports.CONAINER_TAG = 'miso-ask';