@miso.ai/client-sdk-ui 1.12.7 → 1.13.0-beta.1

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 (45) hide show
  1. package/dist/cjs/actor/index.js +21 -7
  2. package/dist/cjs/actor/trackers.js +19 -4
  3. package/dist/cjs/actor/view.js +7 -19
  4. package/dist/cjs/actor/views.js +38 -100
  5. package/dist/cjs/element/container/miso-container.js +4 -0
  6. package/dist/cjs/layout/affiliation/affiliation.js +1 -1
  7. package/dist/cjs/layout/button/more-button.js +2 -1
  8. package/dist/cjs/layout/container/container.js +10 -5
  9. package/dist/cjs/layout/input/option-list.js +1 -1
  10. package/dist/cjs/layout/input/search-box.js +2 -2
  11. package/dist/cjs/layout/input/select.js +1 -1
  12. package/dist/cjs/layout/list/collection.js +1 -1
  13. package/dist/cjs/layout/mixin/swipeable.js +1 -1
  14. package/dist/cjs/layout/text/typewriter/index.js +3 -3
  15. package/dist/cjs/version.js +1 -1
  16. package/dist/cjs/workflow/answer-based.js +19 -1
  17. package/dist/cjs/workflow/ask.js +8 -10
  18. package/dist/cjs/workflow/base.js +6 -2
  19. package/dist/cjs/workflow/explore.js +1 -1
  20. package/dist/cjs/workflow/hybrid-search-views.js +9 -15
  21. package/dist/cjs/workflow/options/auto-query.js +14 -10
  22. package/dist/cjs/workflow/search-based.js +1 -1
  23. package/package.json +2 -2
  24. package/src/actor/index.js +1 -1
  25. package/src/actor/trackers.js +19 -4
  26. package/src/actor/view.js +10 -14
  27. package/src/actor/views.js +42 -96
  28. package/src/element/container/miso-container.js +5 -0
  29. package/src/layout/affiliation/affiliation.js +1 -1
  30. package/src/layout/button/more-button.js +2 -1
  31. package/src/layout/container/container.js +7 -6
  32. package/src/layout/input/option-list.js +1 -1
  33. package/src/layout/input/search-box.js +2 -2
  34. package/src/layout/input/select.js +1 -1
  35. package/src/layout/list/collection.js +3 -3
  36. package/src/layout/mixin/swipeable.js +2 -2
  37. package/src/layout/text/typewriter/index.js +3 -3
  38. package/src/version.js +1 -1
  39. package/src/workflow/answer-based.js +14 -2
  40. package/src/workflow/ask.js +10 -13
  41. package/src/workflow/base.js +5 -4
  42. package/src/workflow/explore.js +1 -1
  43. package/src/workflow/hybrid-search-views.js +11 -12
  44. package/src/workflow/options/auto-query.js +13 -8
  45. package/src/workflow/search-based.js +1 -1
@@ -3,6 +3,15 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
+ var _exportNames = {
7
+ fields: true,
8
+ Hub: true,
9
+ SessionMaker: true,
10
+ DataActor: true,
11
+ ViewsActor: true,
12
+ FeedbackActor: true,
13
+ InteractionsActor: true
14
+ };
6
15
  Object.defineProperty(exports, "DataActor", {
7
16
  enumerable: true,
8
17
  get: function () {
@@ -33,12 +42,6 @@ Object.defineProperty(exports, "SessionMaker", {
33
42
  return _sessions.default;
34
43
  }
35
44
  });
36
- Object.defineProperty(exports, "TrackersActor", {
37
- enumerable: true,
38
- get: function () {
39
- return _trackers.default;
40
- }
41
- });
42
45
  Object.defineProperty(exports, "ViewsActor", {
43
46
  enumerable: true,
44
47
  get: function () {
@@ -53,7 +56,18 @@ var _sessions = _interopRequireDefault(require("./sessions.js"));
53
56
  var _data = _interopRequireDefault(require("./data.js"));
54
57
  var _views = _interopRequireDefault(require("./views.js"));
55
58
  var _feedback = _interopRequireDefault(require("./feedback.js"));
56
- var _trackers = _interopRequireDefault(require("./trackers.js"));
57
59
  var _interactions = _interopRequireDefault(require("./interactions.js"));
60
+ var _trackers = require("./trackers.js");
61
+ Object.keys(_trackers).forEach(function (key) {
62
+ if (key === "default" || key === "__esModule") return;
63
+ if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;
64
+ if (key in exports && exports[key] === _trackers[key]) return;
65
+ Object.defineProperty(exports, key, {
66
+ enumerable: true,
67
+ get: function () {
68
+ return _trackers[key];
69
+ }
70
+ });
71
+ });
58
72
  function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
59
73
  function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
@@ -3,25 +3,30 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.default = void 0;
6
+ exports.TrackersActor = void 0;
7
+ exports.proxyTrackers = proxyTrackers;
7
8
  var _constants = require("../constants.js");
8
9
  var _tracker = _interopRequireDefault(require("./tracker.js"));
9
10
  function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
10
11
  class TrackersActor {
11
12
  constructor(hub, {
13
+ roles,
12
14
  options
13
15
  }) {
14
16
  this._hub = hub;
17
+ this._roles = roles;
15
18
  this._options = options;
16
19
  this._trackers = {};
17
20
  }
18
21
  get(role) {
22
+ if (!this._roles.members.includes(role)) {
23
+ throw new Error(`Role "${role}" is not a member of this workflow.`);
24
+ }
19
25
  if (!this._trackers[role]) {
20
- const itemless = role === _constants.ROLE.CONTAINER;
21
26
  this._trackers[role] = new _tracker.default({
22
27
  hub: this._hub,
23
28
  role,
24
- itemless,
29
+ itemless: role === _constants.ROLE.CONTAINER,
25
30
  options: () => this._getTrackerOptions(role)
26
31
  });
27
32
  }
@@ -34,4 +39,14 @@ class TrackersActor {
34
39
  };
35
40
  }
36
41
  }
37
- exports.default = TrackersActor;
42
+ exports.TrackersActor = TrackersActor;
43
+ function proxyTrackers(trackers) {
44
+ return new Proxy(trackers, {
45
+ get: (target, prop) => {
46
+ try {
47
+ return target.get(prop);
48
+ } catch (_) {}
49
+ return undefined;
50
+ }
51
+ });
52
+ }
@@ -8,7 +8,6 @@ var _commons = require("@miso.ai/commons");
8
8
  var _constants = require("../constants.js");
9
9
  var fields = _interopRequireWildcard(require("./fields.js"));
10
10
  var _proxy = _interopRequireDefault(require("../util/proxy.js"));
11
- var _tracker = _interopRequireDefault(require("./tracker.js"));
12
11
  const _excluded = ["value", "error", "status", "meta"];
13
12
  function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
14
13
  function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
@@ -99,24 +98,7 @@ class ViewActor {
99
98
  });
100
99
  }
101
100
  get tracker() {
102
- const {
103
- role
104
- } = this;
105
- if (role === _constants.ROLE.CONTAINER) {
106
- return this._views._getContainerTracker();
107
- }
108
- // TODO: we should move this to workflow level, as there could be multiple view of the same role in the future
109
- if (!this._tracker) {
110
- const {
111
- hub
112
- } = this;
113
- this._tracker = new _tracker.default({
114
- hub,
115
- role,
116
- options: () => this.trackerOptions
117
- });
118
- }
119
- return this._tracker;
101
+ return this._views.trackers[this.role];
120
102
  }
121
103
  get workflow() {
122
104
  return this._views._workflow;
@@ -223,6 +205,8 @@ class ViewActor {
223
205
  }
224
206
  return (0, _commons.trimObj)(sliced);
225
207
  }
208
+
209
+ // TODO: move this to workflow
226
210
  _isContainerEmpty(data) {
227
211
  const {
228
212
  element
@@ -260,6 +244,10 @@ class ViewActor {
260
244
  this._error(e);
261
245
  }
262
246
  }
247
+ _emit(name, data) {
248
+ this._events.emit(name, data);
249
+ this._views._events.emit(`${this.role}:${name}`, data);
250
+ }
263
251
  _error(e) {
264
252
  this._views._error(e);
265
253
  }
@@ -9,8 +9,6 @@ var _constants = require("../constants.js");
9
9
  var fields = _interopRequireWildcard(require("./fields.js"));
10
10
  var _view = _interopRequireDefault(require("./view.js"));
11
11
  var _filters = _interopRequireDefault(require("./filters.js"));
12
- var _tracker = _interopRequireDefault(require("./tracker.js"));
13
- var _trackers = require("../util/trackers.js");
14
12
  function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
15
13
  function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
16
14
  class ViewsActor {
@@ -29,18 +27,11 @@ class ViewsActor {
29
27
  this._options = options;
30
28
  this._roles = roles;
31
29
  this._containers = new Map();
32
- this._containerTracker = undefined;
33
- this._views = {};
30
+ this._components = new Map();
34
31
  this._filters = new _filters.default(this);
35
- for (const role of roles.members) {
36
- if (role === _constants.ROLE.CONTAINER) {
37
- continue;
38
- }
39
- this._views[role] = new _view.default(this, role);
40
- }
32
+ this._events = new _commons.EventEmitter();
41
33
  (0, _commons.defineValues)(this, {
42
- interface: new Views(this),
43
- trackers: new Trackers(this, roles.members)
34
+ interface: new Views(this)
44
35
  });
45
36
  const syncSize = () => this.syncSize();
46
37
  window.addEventListener('resize', syncSize);
@@ -52,15 +43,19 @@ class ViewsActor {
52
43
  get filters() {
53
44
  return this._filters;
54
45
  }
46
+ get trackers() {
47
+ return this._workflow.trackers;
48
+ }
49
+ on(role, name, fn) {
50
+ return this._events.on(`${role}:${name}`, fn);
51
+ }
55
52
 
56
53
  // elements //
57
54
  addContainer(element) {
58
55
  if (this._containers.has(element)) {
59
56
  return;
60
57
  }
61
- const view = new _view.default(this, _constants.ROLE.CONTAINER);
62
- view.layout = this._createLayout(_constants.ROLE.CONTAINER);
63
- view.element = element;
58
+ const view = this._createView(element);
64
59
  this._containers.set(element, view);
65
60
  const {
66
61
  components
@@ -84,77 +79,50 @@ class ViewsActor {
84
79
  this._containers.delete(element);
85
80
  }
86
81
  addComponent(element) {
87
- this._getViewByElement(element).element = element;
82
+ if (this._components.has(element)) {
83
+ return;
84
+ }
85
+ const view = this._createView(element);
86
+ this._components.set(element, view);
88
87
  }
89
88
  removeComponent(element) {
90
- this._getViewByElement(element).element = undefined;
89
+ const view = this._components.get(element);
90
+ if (!view) {
91
+ return;
92
+ }
93
+ view._destroy();
94
+ this._components.delete(element);
91
95
  }
92
96
  updateComponentRole(element, oldRole, newRole) {
93
97
  // TODO
94
98
  }
95
99
  containsElement(element) {
96
- return this._containers.has(element) || this._views[element.role];
100
+ return this._containers.has(element) || this._components.has(element);
97
101
  }
98
102
  refreshElement(element) {
99
- const view = element.isContainer ? this._containers.get(element) : this._getViewByElement(element);
103
+ const view = element.isContainer ? this._containers.get(element) : this._components.get(element);
100
104
  view && view.refresh({
101
105
  force: true
102
106
  });
103
107
  }
104
- _getViewByElement(element) {
105
- let {
106
- role
107
- } = element;
108
- if (!role) {
109
- throw new Error('Component must have a role');
110
- }
111
- return this.get(role);
112
- }
113
-
114
- /*
115
- _requestSyncLayouts() {
116
- this._setLayoutRequested = true;
117
- setTimeout(() => {
118
- if (!this._setLayoutRequested) {
119
- return;
120
- }
121
- this._setLayoutRequested = false;
122
- this._syncLayouts();
123
- });
108
+ _createView(element) {
109
+ const view = new _view.default(this, element.role);
110
+ view.layout = this._createLayout(element.role);
111
+ view.element = element;
112
+ return view;
124
113
  }
125
- */
126
-
127
114
  _syncLayouts() {
128
115
  // TODO: put a debug event here
129
116
  const {
130
117
  layouts
131
118
  } = this._options.resolved;
132
119
  if (layouts === false) {
133
- // containers
134
- for (const view of this._containers.values()) {
135
- view.layout = undefined;
136
- }
137
- // components
138
- for (const view of Object.values(this._views)) {
120
+ for (const view of [...this._containers.values(), ...this._components.values()]) {
139
121
  view.layout = undefined;
140
122
  }
141
123
  } else {
142
- for (let [role, [name, options]] of Object.entries(layouts)) {
143
- // TODO: try to omit if unchanged
144
- const fn = () => this._layoutFactory.create(name, Object.assign({}, options, {
145
- role,
146
- workflow: this._workflowName
147
- }));
148
- if (role === _constants.ROLE.CONTAINER) {
149
- for (const view of this._containers.values()) {
150
- view.layout = fn();
151
- }
152
- } else {
153
- const view = this.get(role);
154
- if (view) {
155
- view.layout = fn();
156
- }
157
- }
124
+ for (const view of [...this._containers.values(), ...this._components.values()]) {
125
+ view.layout = this._createLayout(view.role);
158
126
  }
159
127
  }
160
128
  }
@@ -170,16 +138,20 @@ class ViewsActor {
170
138
  }));
171
139
  }
172
140
  get(role) {
173
- return this._views[role];
141
+ return this.getAll(role)[0];
142
+ }
143
+ getAll(role) {
144
+ return role === _constants.ROLE.CONTAINER ? this._containers.values() : this._components.values().filter(view => view.role === role);
174
145
  }
175
146
  get views() {
176
147
  return this._getViews(true);
177
148
  }
178
149
  _getViews(containerFirst = true) {
179
- return containerFirst ? [...this._containers.values(), ...Object.values(this._views)] : [...Object.values(this._views), ...this._containers.values()];
150
+ return containerFirst ? [...this._containers.values(), ...this._components.values()] : [...this._components.values(), ...this._containers.values()];
180
151
  }
181
152
  syncSize() {
182
- for (const view of Object.values(this._views)) {
153
+ // TODO: containers?
154
+ for (const view of this._components.values()) {
183
155
  view._syncSize();
184
156
  }
185
157
  }
@@ -198,24 +170,6 @@ class ViewsActor {
198
170
  _getData(data) {
199
171
  return data || this._hub.states[fields.data()];
200
172
  }
201
- _getTrackerOptions(role) {
202
- const allTrackerOptions = this._options.resolved.trackers;
203
- // TODO: don't need this anymore
204
- return (0, _trackers.normalizeTrackerOptions)(allTrackerOptions && allTrackerOptions[role] || false);
205
- }
206
- _getContainerTracker() {
207
- if (!this._containerTracker) {
208
- const hub = this._hub;
209
- const role = _constants.ROLE.CONTAINER;
210
- this._containerTracker = new _tracker.default({
211
- hub,
212
- role,
213
- itemless: true,
214
- options: () => this._getTrackerOptions(role)
215
- });
216
- }
217
- return this._containerTracker;
218
- }
219
173
  _error(e) {
220
174
  // TODO: hub trigger error event
221
175
  console.error(e);
@@ -247,20 +201,4 @@ class Views {
247
201
  get all() {
248
202
  return this._actor.views.map(view => view.interface);
249
203
  }
250
- }
251
- class Trackers {
252
- constructor(views, roles) {
253
- this._views = views;
254
- for (const role of roles) {
255
- if (role === _constants.ROLE.CONTAINER) {
256
- continue;
257
- }
258
- Object.defineProperty(this, role, {
259
- get: () => views.get(role).tracker
260
- });
261
- }
262
- Object.defineProperty(this, _constants.ROLE.CONTAINER, {
263
- get: () => views._getContainerTracker()
264
- });
265
- }
266
204
  }
@@ -4,6 +4,7 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.default = void 0;
7
+ var _constants = require("../../constants.js");
7
8
  var _misoStub = _interopRequireDefault(require("../util/miso-stub.js"));
8
9
  var _utils = require("../utils.js");
9
10
  function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
@@ -49,6 +50,9 @@ class MisoContainerElement extends _misoStub.default {
49
50
  get isContainer() {
50
51
  return true;
51
52
  }
53
+ get role() {
54
+ return _constants.ROLE.CONTAINER;
55
+ }
52
56
  get workflow() {
53
57
  return this._workflow;
54
58
  }
@@ -306,7 +306,7 @@ class AffiliationLayout extends _collection.default {
306
306
  this._displayedIndex = index;
307
307
  listElement.style.left = `${-index * 100}%`;
308
308
  this._viewable.display(index);
309
- this._view._events.emit('display', {
309
+ this._view._emit('display', {
310
310
  index
311
311
  });
312
312
  }
@@ -7,6 +7,7 @@ exports.default = void 0;
7
7
  var _constants = require("../../constants.js");
8
8
  var _index = require("../../actor/index.js");
9
9
  var _template = _interopRequireDefault(require("../template.js"));
10
+ var _templates = require("../templates.js");
10
11
  const _excluded = ["className", "templates"];
11
12
  function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
12
13
  function _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (-1 !== e.indexOf(n)) continue; t[n] = r[n]; } return t; }
@@ -22,7 +23,7 @@ function root(layout, state) {
22
23
  const disabledAttr = state.status !== _constants.STATUS.READY ? ' disabled' : '';
23
24
  return `
24
25
  <div class="${className}"${roleAttr}${disabledAttr}>
25
- ${templates.text(layout)}
26
+ ${_templates.helpers.asFunction(templates.text)(layout)}
26
27
  </div>
27
28
  `;
28
29
  }
@@ -8,6 +8,7 @@ var _constants = require("../../constants.js");
8
8
  var _raf = _interopRequireDefault(require("../raf.js"));
9
9
  var _misoBanner = _interopRequireDefault(require("../../element/util/miso-banner.js"));
10
10
  var _viewables = _interopRequireDefault(require("../../util/viewables.js"));
11
+ var _dom = require("../../util/dom.js");
11
12
  const _excluded = ["logo"];
12
13
  function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
13
14
  function _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (-1 !== e.indexOf(n)) continue; t[n] = r[n]; } return t; }
@@ -70,8 +71,10 @@ class ContainerLayout extends _raf.default {
70
71
  if (!element) {
71
72
  return;
72
73
  }
74
+ // TODO: ad-hoc for non-general status/attributes
73
75
  const {
74
76
  status,
77
+ data,
75
78
  ongoing,
76
79
  meta: {
77
80
  miso_id,
@@ -79,6 +82,10 @@ class ContainerLayout extends _raf.default {
79
82
  unanswerable = false
80
83
  } = {}
81
84
  } = state;
85
+ const {
86
+ blocked_reason,
87
+ finish_reason
88
+ } = data || {};
82
89
  const statuses = [status, empty ? _constants.STATUS.EMPTY : _constants.STATUS.NONEMPTY];
83
90
  if (status === _constants.STATUS.READY) {
84
91
  statuses.push(ongoing ? _constants.STATUS.ONGOING : _constants.STATUS.DONE);
@@ -87,11 +94,9 @@ class ContainerLayout extends _raf.default {
87
94
  statuses.push(_constants.STATUS.UNANSWERABLE);
88
95
  }
89
96
  element.setAttribute('status', statuses.join(' '));
90
- if (miso_id) {
91
- element.setAttribute('miso-id', miso_id);
92
- } else {
93
- element.removeAttribute('miso-id');
94
- }
97
+ (0, _dom.setOrRemoveAttribute)(element, 'miso-id', miso_id);
98
+ (0, _dom.setOrRemoveAttribute)(element, 'blocked-reason', blocked_reason);
99
+ (0, _dom.setOrRemoveAttribute)(element, 'finish-reason', finish_reason);
95
100
  }
96
101
  _trackInteractions(element, state) {
97
102
  const {
@@ -128,7 +128,7 @@ class OptionListLayout extends _template.default {
128
128
  if (!value) {
129
129
  return;
130
130
  }
131
- this._view._events.emit('select', {
131
+ this._view._emit('select', {
132
132
  value
133
133
  });
134
134
  }
@@ -352,7 +352,7 @@ class SearchBoxLayout extends _template.default {
352
352
  if (inputElement) {
353
353
  inputElement.value = value;
354
354
  }
355
- this._view._events.emit('select', Object.freeze({
355
+ this._view._emit('select', Object.freeze({
356
356
  value: item,
357
357
  index,
358
358
  domEvent: event
@@ -365,7 +365,7 @@ class SearchBoxLayout extends _template.default {
365
365
  return;
366
366
  }
367
367
  if (element.matches('[data-role="product-item"]')) {
368
- this._view._events.emit('select', Object.freeze({
368
+ this._view._emit('select', Object.freeze({
369
369
  value: item,
370
370
  index,
371
371
  domEvent: event
@@ -136,7 +136,7 @@ class SelectLayout extends _template.default {
136
136
  return;
137
137
  }
138
138
  // TODO: reflect selection right away
139
- this._view._events.emit('select', {
139
+ this._view._emit('select', {
140
140
  value
141
141
  });
142
142
  }
@@ -225,7 +225,7 @@ class CollectionLayout extends _template.default {
225
225
  value,
226
226
  element
227
227
  } = binding;
228
- this._view._events.emit('click', {
228
+ this._view._emit('click', {
229
229
  session,
230
230
  value,
231
231
  element,
@@ -140,7 +140,7 @@ class SwipeableMixin {
140
140
  return;
141
141
  }
142
142
  context.displayEventIndex = index;
143
- this._view._events.emit('display', {
143
+ this._view._emit('display', {
144
144
  index
145
145
  });
146
146
  }
@@ -186,7 +186,7 @@ class TypewriterLayout extends _progressive.default {
186
186
  if (citationLinkElement) {
187
187
  const index = parseInt(citationLinkElement.dataset.index);
188
188
  if (!Number.isNaN(index)) {
189
- this._view._events.emit('citation-click', {
189
+ this._view._emit('citation-click', {
190
190
  event,
191
191
  index
192
192
  });
@@ -202,7 +202,7 @@ class TypewriterLayout extends _progressive.default {
202
202
  } = followUpLinkElement.dataset;
203
203
  q = q ? q.trim() : undefined;
204
204
  if (q) {
205
- this._view._events.emit('follow-up-click', {
205
+ this._view._emit('follow-up-click', {
206
206
  event,
207
207
  q
208
208
  });
@@ -221,7 +221,7 @@ class TypewriterLayout extends _progressive.default {
221
221
  className
222
222
  } = anchorElement;
223
223
  if (href) {
224
- this._view._events.emit('link-click', (0, _commons.trimObj)({
224
+ this._view._emit('link-click', (0, _commons.trimObj)({
225
225
  event,
226
226
  url: href,
227
227
  text: innerText ? innerText.trim() : '',
@@ -4,4 +4,4 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.default = void 0;
7
- var _default = exports.default = '1.12.7';
7
+ var _default = exports.default = '1.13.0-beta.1';
@@ -100,7 +100,7 @@ class AnswerBasedWorkflow extends _base.default {
100
100
  }
101
101
  _initSubscriptions(args) {
102
102
  super._initSubscriptions(args);
103
- this._unsubscribes = [...this._unsubscribes, this._hub.on(_index.fields.query(), args => this._query(args)), this._views.get(_constants.ROLE.ANSWER).on('citation-click', event => this._onCitationClick(event)), this._views.get(_constants.ROLE.ANSWER).on('link-click', event => this._onAnswerLinkClick(event))];
103
+ this._unsubscribes = [...this._unsubscribes, this._hub.on(_index.fields.query(), args => this._query(args)), this._views.on(_constants.ROLE.ANSWER, 'citation-click', event => this._onCitationClick(event)), this._views.on(_constants.ROLE.ANSWER, 'link-click', event => this._onAnswerLinkClick(event))];
104
104
  }
105
105
 
106
106
  // lifecycle //
@@ -131,6 +131,7 @@ class AnswerBasedWorkflow extends _base.default {
131
131
  const done = status === _constants.STATUS.READY && !state.ongoing;
132
132
  const erroneous = status === _constants.STATUS.ERRONEOUS;
133
133
  const eventName = done ? 'done' : erroneous ? 'error' : status;
134
+
134
135
  // answer-stage
135
136
  const context = this._getSessionContext(session);
136
137
  const oldAnswerStage = context.answerStage;
@@ -141,6 +142,23 @@ class AnswerBasedWorkflow extends _base.default {
141
142
  })));
142
143
  context.answerStage = newAnswerStage;
143
144
  }
145
+
146
+ // blocked reason
147
+ const data = this._hub.states[_index.fields.data()] || {};
148
+ const {
149
+ value
150
+ } = data;
151
+ if (value) {
152
+ const {
153
+ blocked_reason
154
+ } = value;
155
+ if (blocked_reason) {
156
+ this._emitLifecycleEvent('blocked', Object.assign({}, state, {
157
+ blockedReason: blocked_reason
158
+ }));
159
+ }
160
+ }
161
+
144
162
  // ready, done, or error
145
163
  this._emitLifecycleEvent(eventName, state);
146
164
  if (done || erroneous) {
@@ -80,7 +80,7 @@ class Ask extends _answerBased.default {
80
80
  }
81
81
  _initSubscriptions(args) {
82
82
  super._initSubscriptions(args);
83
- this._unsubscribes = [...this._unsubscribes, this._hub.on(_index.fields.view(_constants.ROLE.REASONING), state => this._onReasoningViewUpdate(state)), this._views.get(_constants.ROLE.ANSWER).on('follow-up-click', event => this._onFollowUpClick(event)), this._views.get(_constants.ROLE.FOLLOW_UP_QUESTIONS).on('select', event => this._onFollowUpQuestionSelect(event)), this._views.get(_constants.ROLE.QUERY_SUGGESTIONS).on('select', event => this._onQuerySuggestionSelect(event))];
83
+ this._unsubscribes = [...this._unsubscribes, this._hub.on(_index.fields.view(_constants.ROLE.REASONING), state => this._onReasoningViewUpdate(state)), this._views.on(_constants.ROLE.ANSWER, 'follow-up-click', event => this._onFollowUpClick(event)), this._views.on(_constants.ROLE.FOLLOW_UP_QUESTIONS, 'select', event => this._onFollowUpQuestionSelect(event)), this._views.on(_constants.ROLE.QUERY_SUGGESTIONS, 'select', event => this._onQuerySuggestionSelect(event))];
84
84
  }
85
85
  _initSession(args) {
86
86
  // register at context
@@ -167,8 +167,9 @@ class Ask extends _answerBased.default {
167
167
  if (!next) {
168
168
  return;
169
169
  }
170
- const view = next._views.get(_constants.ROLE.QUERY_SUGGESTIONS);
171
- view && view.refresh();
170
+ for (const view of next._views.getAll(_constants.ROLE.QUERY_SUGGESTIONS)) {
171
+ view.refresh();
172
+ }
172
173
  }
173
174
 
174
175
  // view //
@@ -179,8 +180,10 @@ class Ask extends _answerBased.default {
179
180
  if (status !== _constants.STATUS.READY || ongoing) {
180
181
  return;
181
182
  }
182
- const element = this._getReasoningBoxElement();
183
- element && element.classList.add('done');
183
+ for (const view of this._views.getAll(_constants.ROLE.REASONING)) {
184
+ const element = view.element && view.element.closest('[data-role="reasoning-box"]');
185
+ element && element.classList.add('done');
186
+ }
184
187
  }
185
188
 
186
189
  // interactions //
@@ -283,11 +286,6 @@ class Ask extends _answerBased.default {
283
286
  this._questionId = undefined;
284
287
  }
285
288
  }
286
- _getReasoningBoxElement() {
287
- const view = this._views.get(_constants.ROLE.REASONING);
288
- const element = view && view.element;
289
- return element && element.closest('[data-role="reasoning-box"]');
290
- }
291
289
 
292
290
  // destroy //
293
291
  _destroy(options) {
@@ -73,6 +73,11 @@ class Workflow extends _commons.Component {
73
73
  const extensions = this._extensions;
74
74
  const layouts = this._plugin.layouts;
75
75
  this._sessions = new _index.SessionMaker(hub);
76
+ this._trackers = new _index.TrackersActor(hub, {
77
+ roles,
78
+ options
79
+ });
80
+ this._proxyTrackers = (0, _index.proxyTrackers)(this._trackers);
76
81
  this._data = new _index.DataActor(hub, Object.assign({
77
82
  source: sources.api(client),
78
83
  options
@@ -84,7 +89,6 @@ class Workflow extends _commons.Component {
84
89
  options,
85
90
  workflow: this
86
91
  });
87
- //this._trackers = new TrackersActor(hub, { options });
88
92
  this._interactions = new _index.InteractionsActor(hub, {
89
93
  client,
90
94
  options
@@ -280,7 +284,7 @@ class Workflow extends _commons.Component {
280
284
 
281
285
  // trackers //
282
286
  get trackers() {
283
- return this._views.trackers;
287
+ return this._proxyTrackers;
284
288
  }
285
289
  _onTracker(args) {
286
290
  const workflow = this;