@yoobic/yobi 8.6.35 → 8.6.36

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 (43) hide show
  1. package/dist/cjs/{grid-renderers-bdf3d9df.js → grid-renderers-48827440.js} +4 -3
  2. package/dist/cjs/yoo-ag-grid.cjs.entry.js +1 -1
  3. package/dist/cjs/yoo-chat.cjs.entry.js +3 -2
  4. package/dist/cjs/yoo-form-catalog.cjs.entry.js +11 -2
  5. package/dist/cjs/yoo-form-connect.cjs.entry.js +47 -48
  6. package/dist/cjs/yoo-form-input.cjs.entry.js +1 -1
  7. package/dist/cjs/yoo-form-multi-input.cjs.entry.js +2 -2
  8. package/dist/cjs/yoo-form-scorm.cjs.entry.js +1 -1
  9. package/dist/cjs/yoo-grid.cjs.entry.js +2 -1
  10. package/dist/cjs/yoo-pivot-table.cjs.entry.js +1 -1
  11. package/dist/collection/components/form/form-catalog/form-catalog.js +11 -2
  12. package/dist/collection/components/form/form-connect/form-connect.css +15 -14
  13. package/dist/collection/components/form/form-connect/form-connect.js +46 -47
  14. package/dist/collection/components/form/form-multi-input/form-multi-input.js +2 -2
  15. package/dist/collection/components/form/form-scorm/form-scorm.js +2 -2
  16. package/dist/collection/components/grid/ag-grid/grid-renderers.js +4 -3
  17. package/dist/collection/components/grid/grid/grid.js +1 -0
  18. package/dist/collection/feature-communicate/chat/chat/chat.js +3 -2
  19. package/dist/design-system/{grid-renderers-649f8b12.js → grid-renderers-4dd1c6d7.js} +4 -3
  20. package/dist/design-system/yoo-ag-grid.entry.js +1 -1
  21. package/dist/design-system/yoo-chat.entry.js +3 -2
  22. package/dist/design-system/yoo-form-catalog.entry.js +11 -2
  23. package/dist/design-system/yoo-form-connect.entry.js +47 -48
  24. package/dist/design-system/yoo-form-input.entry.js +1 -1
  25. package/dist/design-system/yoo-form-multi-input.entry.js +2 -2
  26. package/dist/design-system/yoo-form-scorm.entry.js +2 -2
  27. package/dist/design-system/yoo-grid.entry.js +2 -1
  28. package/dist/design-system/yoo-pivot-table.entry.js +1 -1
  29. package/dist/esm/{grid-renderers-649f8b12.js → grid-renderers-4dd1c6d7.js} +4 -3
  30. package/dist/esm/yoo-ag-grid.entry.js +1 -1
  31. package/dist/esm/yoo-chat.entry.js +3 -2
  32. package/dist/esm/yoo-form-catalog.entry.js +11 -2
  33. package/dist/esm/yoo-form-connect.entry.js +47 -48
  34. package/dist/esm/yoo-form-input.entry.js +1 -1
  35. package/dist/esm/yoo-form-multi-input.entry.js +2 -2
  36. package/dist/esm/yoo-form-scorm.entry.js +2 -2
  37. package/dist/esm/yoo-grid.entry.js +2 -1
  38. package/dist/esm/yoo-pivot-table.entry.js +1 -1
  39. package/dist/types/components/form/form-connect/form-connect.d.ts +1 -2
  40. package/dist/types/components/form/form-connect/form-connect.interfaces.d.ts +1 -4
  41. package/dist/types/home/runner/work/yoobic-ng-6/yoobic-ng-6/design-system/stencil/.stencil/shared/interfaces/src/entities/communicate/broadcast/broadcast.interface.d.ts +1 -0
  42. package/dist/types/home/runner/work/yoobic-ng-6/yoobic-ng-6/design-system/stencil/.stencil/shared/interfaces/src/ui/chat/chat.interface.d.ts +1 -0
  43. package/package.json +1 -1
@@ -1,5 +1,6 @@
1
1
  import { Draggable, getContrastColor, getCssColor, getUUID, gsapTo, isImageUrl, translateMulti } from '@shared/utils';
2
2
  import { h, Host } from '@stencil/core';
3
+ import { updateBounds } from '@yobi/utils/draggables';
3
4
  import { showWarningBanner } from '@yobi/utils/helpers/draggable-tags-helpers';
4
5
  import { setValueAndValidateInput } from '@yobi/utils/helpers/form-input-helpers';
5
6
  import { difference, isEqual, shuffle } from 'lodash-es';
@@ -45,10 +46,6 @@ export class YooFormConnectComponent {
45
46
  var _a, _b, _c, _d, _e, _f;
46
47
  return ((_a = this.values) === null || _a === void 0 ? void 0 : _a.length) && ((_c = (_b = this.values[0]) === null || _b === void 0 ? void 0 : _b.filter(v => v)) === null || _c === void 0 ? void 0 : _c.length) === ((_f = (_e = (_d = this.values) === null || _d === void 0 ? void 0 : _d[1]) === null || _e === void 0 ? void 0 : _e.filter(v => v)) === null || _f === void 0 ? void 0 : _f.length);
47
48
  }
48
- get columnElements() {
49
- var _a;
50
- return Array.from(((_a = this.mainElement) === null || _a === void 0 ? void 0 : _a.querySelectorAll('section')) || []);
51
- }
52
49
  get draggableElements() {
53
50
  var _a;
54
51
  return Array.from(((_a = this.mainElement) === null || _a === void 0 ? void 0 : _a.querySelectorAll('.draggable')) || []);
@@ -118,14 +115,6 @@ export class YooFormConnectComponent {
118
115
  }
119
116
  });
120
117
  this.getUserAnswers();
121
- this.validate();
122
- }
123
- if (key === 'hit') {
124
- this.draggables.map(dr => {
125
- if ((dr.id !== draggable.id)) {
126
- delete dr.hit;
127
- }
128
- });
129
118
  }
130
119
  return true;
131
120
  }
@@ -166,11 +155,26 @@ export class YooFormConnectComponent {
166
155
  const currentDraggable = draggableElement && ((_a = this.draggables) === null || _a === void 0 ? void 0 : _a.find(({ id }) => id === draggableElement.id));
167
156
  if (currentDraggable) {
168
157
  let tempConnectableElement;
169
- const onPressTile = () => {
170
- if (!draggableElement.style.width) {
171
- this.columnElements.forEach(e => (e === null || e === void 0 ? void 0 : e.clientWidth) && (e.style.width = `${e.clientWidth}px`));
172
- draggableElement.style.width = `${draggableElement.clientWidth}px`;
173
- }
158
+ const onClickTile = () => {
159
+ this.draggables.forEach(draggable => {
160
+ const selectedDraggable = draggable.id === currentDraggable.id && draggable;
161
+ draggable.selected = selectedDraggable && !currentDraggable.selected;
162
+ if (selectedDraggable.connectableId) {
163
+ draggable.selected = false;
164
+ delete draggable.connectableId;
165
+ }
166
+ else {
167
+ this.getUserAnswers();
168
+ }
169
+ });
170
+ };
171
+ const onPressTile = (scope) => {
172
+ updateBounds({
173
+ dragHandler: draggableElement,
174
+ dragHandlerZone: draggableElement.parentElement,
175
+ draggable: scope,
176
+ host: this.host
177
+ });
174
178
  };
175
179
  const onDragStartTile = () => {
176
180
  draggableElement.removeAttribute('hit');
@@ -178,17 +182,20 @@ export class YooFormConnectComponent {
178
182
  };
179
183
  const onDragTile = () => {
180
184
  var _a, _b;
181
- const overlapThreshold = '65%';
185
+ const overlapThreshold = '45%';
182
186
  const { x, width } = draggableElement.getBoundingClientRect();
183
187
  const connectableThreshold = this.mainElement.querySelector('#connectables').getBoundingClientRect().x;
184
188
  const isInConnectableArea = x + width >= connectableThreshold;
185
189
  if (isInConnectableArea) {
186
- this.connectableElements.forEach(e => {
190
+ this.connectableElements.forEach(element => {
187
191
  var _a, _b;
188
- if (((_b = (_a = currentDraggable === null || currentDraggable === void 0 ? void 0 : currentDraggable.draggableInstance) === null || _a === void 0 ? void 0 : _a.hitTest) === null || _b === void 0 ? void 0 : _b.call(_a, e, overlapThreshold)) && e.id !== currentDraggable.connectableId) {
189
- tempConnectableElement = e;
192
+ if (((_b = (_a = currentDraggable === null || currentDraggable === void 0 ? void 0 : currentDraggable.draggableInstance) === null || _a === void 0 ? void 0 : _a.hitTest) === null || _b === void 0 ? void 0 : _b.call(_a, element, overlapThreshold)) && element.id !== currentDraggable.connectableId) {
193
+ tempConnectableElement = element;
190
194
  tempConnectableElement.setAttribute('hit', 'true');
191
195
  }
196
+ else {
197
+ element.removeAttribute('hit');
198
+ }
192
199
  });
193
200
  }
194
201
  if (tempConnectableElement && !currentDraggable.draggableInstance.hitTest(tempConnectableElement, overlapThreshold)) {
@@ -200,7 +207,6 @@ export class YooFormConnectComponent {
200
207
  color: getContrastColor(connectableColor)
201
208
  });
202
209
  }
203
- tempConnectableElement.removeAttribute('hit');
204
210
  tempConnectableElement = null;
205
211
  }
206
212
  };
@@ -208,9 +214,10 @@ export class YooFormConnectComponent {
208
214
  await gsapTo(draggableElement, this.animated ? 0.25 : 0, { x: 0, y: 0 });
209
215
  draggableElement.style.removeProperty('z-index');
210
216
  if (tempConnectableElement) {
217
+ currentDraggable.selected = false;
211
218
  currentDraggable.connectableId = tempConnectableElement.id;
212
- [...this.connectableElements, ...this.draggableElements].forEach(e => e.removeAttribute('hit'));
213
219
  this.autoCompleteLastConnection();
220
+ tempConnectableElement.removeAttribute('hit');
214
221
  }
215
222
  tempConnectableElement = null;
216
223
  };
@@ -218,8 +225,8 @@ export class YooFormConnectComponent {
218
225
  currentDraggable.draggableInstance = new Draggable(draggableElement, {
219
226
  zIndexBoost: false,
220
227
  autoScroll: 1,
221
- bound: this.mainElement,
222
- onPress: () => onPressTile,
228
+ onClick: onClickTile,
229
+ onPress() { onPressTile(this); },
223
230
  onDragStart: onDragStartTile,
224
231
  onDrag: onDragTile,
225
232
  onRelease: onReleaseTile
@@ -236,7 +243,7 @@ export class YooFormConnectComponent {
236
243
  var _a, _b;
237
244
  const freeDraggables = this.draggables.filter(d => !d.connectableId);
238
245
  if ((freeDraggables === null || freeDraggables === void 0 ? void 0 : freeDraggables.length) === 1 && ((_a = this.draggables) === null || _a === void 0 ? void 0 : _a.length) > 1) {
239
- const lastDraggable = freeDraggables[0];
246
+ const [lastDraggable] = freeDraggables;
240
247
  const lastConectableId = (_b = difference(this.connectables.map(({ id }) => id), this.draggables.map(({ connectableId }) => connectableId))) === null || _b === void 0 ? void 0 : _b[0];
241
248
  lastDraggable.connectableId = lastConectableId;
242
249
  }
@@ -250,33 +257,25 @@ export class YooFormConnectComponent {
250
257
  var _a;
251
258
  const tileType = `${name}s`;
252
259
  const onConnectableClick = (connectable) => {
253
- const hitDraggable = this.draggables.find(d => { var _a; return (_a = d.hit) === null || _a === void 0 ? void 0 : _a.value; });
254
- if (hitDraggable && connectable) {
255
- hitDraggable.connectableId = connectable.id;
256
- this.autoCompleteLastConnection();
257
- }
258
- };
259
- const onDraggableClick = (draggable) => {
260
- var _a, _b;
261
- const currentDraggable = (_a = this.draggables) === null || _a === void 0 ? void 0 : _a.find(({ id }) => id === draggable.id);
262
- currentDraggable.hit = { value: !((_b = currentDraggable.hit) === null || _b === void 0 ? void 0 : _b.value) && !currentDraggable.connectableId };
263
- delete currentDraggable.connectableId;
264
- this.getUserAnswers();
265
- this.validate();
260
+ this.draggables.forEach(draggable => {
261
+ const selectedDraggable = draggable.selected && draggable;
262
+ if (selectedDraggable && connectable) {
263
+ draggable.selected = false;
264
+ draggable.connectableId = connectable.id;
265
+ this.autoCompleteLastConnection();
266
+ }
267
+ });
266
268
  };
267
269
  return (h("section", { id: tileType }, (_a = this[tileType]) === null || _a === void 0 ? void 0 : _a.map((item) => {
268
270
  const isDraggable = name === 'draggable';
269
- const { id, value, connectableId, color, hit } = item || {};
271
+ const { id, value, connectableId, selected } = item || {};
270
272
  const isImage = value && isImageUrl(value);
271
273
  const connectable = this.draggables.find(({ connectableId }) => connectableId === id);
272
274
  const isConnected = !!(connectableId || connectable);
273
- const tileColor = color || (connectable === null || connectable === void 0 ? void 0 : connectable.color);
274
- const connectedAttributes = { style: { backgroundColor: tileColor, color: getContrastColor(tileColor) }, connected: true };
275
- const tileAttr = {
276
- ...(isConnected && connectedAttributes), hit: !!(hit === null || hit === void 0 ? void 0 : hit.value) && isDraggable, type: isImage ? 'image' : 'text'
277
- };
278
- const tileClick = () => isDraggable ? onDraggableClick(item) : onConnectableClick(item);
279
- return !!value && h("div", { ...tileAttr, id: id, key: id, class: name, onTouchStart: () => tileClick(), onClick: () => tileClick() }, !isImage ? h("p", null, translateMulti(value)) : [h("yoo-img", { type: "background", src: value }), h("div", { id: "overlay" })], this.readonly && this.renderCorrectionIcon(value));
275
+ const tileColor = item.color || (connectable === null || connectable === void 0 ? void 0 : connectable.color);
276
+ const { backgroundColor, color } = { backgroundColor: getCssColor(tileColor), color: getContrastColor(tileColor) };
277
+ const tileAttr = { type: isImage ? 'image' : 'text', connected: isConnected, hit: isDraggable && !isConnected && selected };
278
+ return (!!value && (h("div", { ...tileAttr, style: isConnected && !isImage && { backgroundColor, color }, id: id, key: id, class: name, ...(!isDraggable && { onTouchStart: () => onConnectableClick(item), onClick: () => onConnectableClick(item) }) }, !isImage ? h("p", null, translateMulti(value)) : [h("yoo-img", { type: "background", src: value }), h("div", { class: "overlay", style: isConnected && { backgroundColor, color } })], this.readonly && this.renderCorrectionIcon(value))));
280
279
  })));
281
280
  }
282
281
  renderBanner() {
@@ -211,7 +211,7 @@ export class YooFormMultiInputComponent {
211
211
  const rowsCount = Math.max(...[this.getMaxRowsOf('init'), this.getMaxRowsOf('min'), values.length]) || 1;
212
212
  this.rows = Array.from({ length: rowsCount }).map((_, rowIndex) => {
213
213
  return this.columnsDefinition.map((column, colIndex) => {
214
- const { hasImage, maxRows, hasText } = column;
214
+ const { hasImage, maxRows, hasText, forceObjectValue } = column;
215
215
  const rowValue = values === null || values === void 0 ? void 0 : values[rowIndex];
216
216
  const value = Array.isArray(rowValue) ? rowValue === null || rowValue === void 0 ? void 0 : rowValue[colIndex] : rowValue;
217
217
  const [text, file, selection] = ['text', 'file', 'selection'].map((type) => (Array.isArray(value) ? value[colIndex] : typeof value === 'object' ? value === null || value === void 0 ? void 0 : value[type] : value));
@@ -220,7 +220,7 @@ export class YooFormMultiInputComponent {
220
220
  rowIndex,
221
221
  column,
222
222
  hidden: rowIndex + 1 > maxRows || (!value && rowIndex + 1 > column.initRows),
223
- value: {
223
+ value: forceObjectValue ? { text: value } : {
224
224
  ...(hasText && { text }),
225
225
  ...(hasImage && { file: isImageUrl(file) ? file : '' }),
226
226
  ...(selection && { selection })
@@ -1,5 +1,5 @@
1
1
  import { IRoute } from '@shared/interfaces';
2
- import { getAsyncExtraData, getCssColor, getCurrentLanguage, getLocaleVariantScormCloudId, getSession, isAndroid, isNativeMobile, isSafari, isWeb, screenOrientationLock, screenOrientationUnlock, showAlert, showModal, translate, translateMulti } from '@shared/utils';
2
+ import { getAsyncExtraData, getCurrentLanguage, getLocaleVariantScormCloudId, getSession, isAndroid, isNativeMobile, isSafari, isWeb, screenOrientationLock, screenOrientationUnlock, showAlert, showModal, translate, translateMulti } from '@shared/utils';
3
3
  import { forceUpdate, h } from '@stencil/core';
4
4
  import { setValidator, setValueAndValidateInput } from '@yobi/utils/helpers/form-input-helpers';
5
5
  import { get, isNumber } from 'lodash-es';
@@ -75,7 +75,7 @@ export class YooFormScormComponent {
75
75
  }
76
76
  if (ret === null || ret === void 0 ? void 0 : ret.launchLink) {
77
77
  if (isNativeMobile()) {
78
- const iab = window.open(ret.launchLink, isNativeMobile() ? '_blank' : '_system', `location=${isAndroid() ? 'yes,hideurlbar=yes' : 'no'},toolbar=yes,hidenavigationbuttons=${isAndroid() ? 'yes' : 'no'},closebuttoncaption=${translate('CLOSE')},beforeload=yes,allowInlineMediaPlayback=yes,closebuttoncolor=${getCssColor('app-color')}`);
78
+ const iab = window.open(ret.launchLink, isNativeMobile() ? '_blank' : '_system', `location=${isAndroid() ? 'yes,hideurlbar=yes' : 'no'},toolbar=yes,hidenavigationbuttons=${isAndroid() ? 'yes' : 'no'},closebuttoncaption=${translate('CLOSE')},beforeload=yes,allowInlineMediaPlayback=yes`);
79
79
  iab.addEventListener('exit', () => {
80
80
  if (!this.isPreview) {
81
81
  this.onCloseScormPlayer();
@@ -1083,6 +1083,7 @@ function incentiveRankingRenderer(params) {
1083
1083
  function courseStatusRenderer(params) {
1084
1084
  var _a, _b;
1085
1085
  const status = isString(params.value) ? params.value : (_a = params.value) === null || _a === void 0 ? void 0 : _a.tag;
1086
+ const finishedDate = (_b = params === null || params === void 0 ? void 0 : params.data) === null || _b === void 0 ? void 0 : _b.finishedDate;
1086
1087
  const _STATUS = {
1087
1088
  '-': {
1088
1089
  color: 'stable',
@@ -1094,7 +1095,7 @@ function courseStatusRenderer(params) {
1094
1095
  },
1095
1096
  completed: {
1096
1097
  color: 'success-20',
1097
- content: `<yoo-icon size="small" slot="start" name="check"></yoo-icon>${translate('COMPLETEDON')} ${dateFormat((_b = params === null || params === void 0 ? void 0 : params.data) === null || _b === void 0 ? void 0 : _b.finishedDate, translate('FORMATDATE'))}`
1098
+ content: `<yoo-icon size="small" slot="start" name="check"></yoo-icon>${translate(finishedDate ? 'COMPLETEDON' : 'COMPLETED')} ${finishedDate ? dateFormat(finishedDate, translate('FORMATDATE')) : ''}`
1098
1099
  },
1099
1100
  notstarted: {
1100
1101
  color: 'danger-20',
@@ -1556,8 +1557,8 @@ export class CustomLoadingCellRenderer {
1556
1557
  init(params) {
1557
1558
  this.eGui = document.createElement('div');
1558
1559
  this.eGui.innerHTML = `
1559
- <div class="ag-custom-loading-cell" style="padding-left: 10px; line-height: 25px;">
1560
- <i class="fas fa-spinner fa-pulse"></i>
1560
+ <div class="ag-custom-loading-cell" style="padding-left: 10px; line-height: 25px;">
1561
+ <i class="fas fa-spinner fa-pulse"></i>
1561
1562
  <span>${params.loadingMessage} </span>
1562
1563
  </div>
1563
1564
  `;
@@ -916,6 +916,7 @@ export class YooGridComponent {
916
916
  this.finalGridConfig = {
917
917
  ...this.gridConfig,
918
918
  treeData: this.isTree(),
919
+ onSortChanged: () => this.onGridStateUpdate(),
919
920
  onColumnResized: () => this.onGridStateUpdate(),
920
921
  onColumnMoved: () => this.onGridStateUpdate(),
921
922
  onColumnVisible: () => this.onGridStateUpdate(),
@@ -554,7 +554,7 @@ export class YooChatComponent {
554
554
  ], this.broadcastParams.finished && this.broadcastParams.shareOptions && this.renderShareOptions(this.broadcastParams.shareOptions), !this.broadcastParams.isLive && !this.broadcastParams.finished && this.broadcastParams.footerAction && getButton(this.broadcastParams.footerAction)));
555
555
  }
556
556
  renderVideo() {
557
- var _a;
557
+ var _a, _b;
558
558
  const notCordova = !isNativeMobile() && this.broadcastParams.isLive;
559
559
  if (!((_a = this.broadcastParams) === null || _a === void 0 ? void 0 : _a.videoSrc) && !notCordova) {
560
560
  return;
@@ -570,7 +570,8 @@ export class YooChatComponent {
570
570
  extraClass: 'fullscreen'
571
571
  },
572
572
  preventVcAuto: true,
573
- preventAutoPauseOnBlur: true
573
+ preventAutoPauseOnBlur: true,
574
+ type: (((_b = this.broadcastParams) === null || _b === void 0 ? void 0 : _b.useHTML5) ? 'html5' : 'videojs')
574
575
  };
575
576
  return (h("div", { ref: (el) => (this.videoElWrapper = el), class: {
576
577
  'video-outer-container': true,
@@ -1341,6 +1341,7 @@ function incentiveRankingRenderer(params) {
1341
1341
  function courseStatusRenderer(params) {
1342
1342
  var _a, _b;
1343
1343
  const status = isString(params.value) ? params.value : (_a = params.value) === null || _a === void 0 ? void 0 : _a.tag;
1344
+ const finishedDate = (_b = params === null || params === void 0 ? void 0 : params.data) === null || _b === void 0 ? void 0 : _b.finishedDate;
1344
1345
  const _STATUS = {
1345
1346
  '-': {
1346
1347
  color: 'stable',
@@ -1352,7 +1353,7 @@ function courseStatusRenderer(params) {
1352
1353
  },
1353
1354
  completed: {
1354
1355
  color: 'success-20',
1355
- content: `<yoo-icon size="small" slot="start" name="check"></yoo-icon>${translate('COMPLETEDON')} ${dateFormat((_b = params === null || params === void 0 ? void 0 : params.data) === null || _b === void 0 ? void 0 : _b.finishedDate, translate('FORMATDATE'))}`
1356
+ content: `<yoo-icon size="small" slot="start" name="check"></yoo-icon>${translate(finishedDate ? 'COMPLETEDON' : 'COMPLETED')} ${finishedDate ? dateFormat(finishedDate, translate('FORMATDATE')) : ''}`
1356
1357
  },
1357
1358
  notstarted: {
1358
1359
  color: 'danger-20',
@@ -1814,8 +1815,8 @@ class CustomLoadingCellRenderer {
1814
1815
  init(params) {
1815
1816
  this.eGui = document.createElement('div');
1816
1817
  this.eGui.innerHTML = `
1817
- <div class="ag-custom-loading-cell" style="padding-left: 10px; line-height: 25px;">
1818
- <i class="fas fa-spinner fa-pulse"></i>
1818
+ <div class="ag-custom-loading-cell" style="padding-left: 10px; line-height: 25px;">
1819
+ <i class="fas fa-spinner fa-pulse"></i>
1819
1820
  <span>${params.loadingMessage} </span>
1820
1821
  </div>
1821
1822
  `;
@@ -1,7 +1,7 @@
1
1
  import { r as registerInstance, h, e as Host, g as getElement } from './index-2cf5b950.js';
2
2
  import { g as global, n as compact, x as isObject, ad as min, O as max, o as isNumber, a7 as sum$1, k as keys$1, C as sortBy, M as reduce, i as isNil, D as cloneDeep, E as get$1, J as omit, p as isString } from './lodash-cd4a9ba3.js';
3
3
  import { g as getAppContext } from './common-helpers-f4f92196.js';
4
- import { a as getKeyTemplate, p as progressValue, v as validationProgressValue, c as conformityProgressValue, b as conformityRelativeProgressValue, g as getRenderer } from './grid-renderers-649f8b12.js';
4
+ import { a as getKeyTemplate, p as progressValue, v as validationProgressValue, c as conformityProgressValue, b as conformityRelativeProgressValue, g as getRenderer } from './grid-renderers-4dd1c6d7.js';
5
5
  import { bW as dateParse, M as getAsyncExtraData, t as translate } from './index-0a31764b.js';
6
6
  import './index-ee2b347f.js';
7
7
  import './incentive-helpers-94537d6e.js';
@@ -572,7 +572,7 @@ const YooChatComponent = class {
572
572
  ], this.broadcastParams.finished && this.broadcastParams.shareOptions && this.renderShareOptions(this.broadcastParams.shareOptions), !this.broadcastParams.isLive && !this.broadcastParams.finished && this.broadcastParams.footerAction && getButton(this.broadcastParams.footerAction)));
573
573
  }
574
574
  renderVideo() {
575
- var _a;
575
+ var _a, _b;
576
576
  const notCordova = !isNativeMobile() && this.broadcastParams.isLive;
577
577
  if (!((_a = this.broadcastParams) === null || _a === void 0 ? void 0 : _a.videoSrc) && !notCordova) {
578
578
  return;
@@ -588,7 +588,8 @@ const YooChatComponent = class {
588
588
  extraClass: 'fullscreen'
589
589
  },
590
590
  preventVcAuto: true,
591
- preventAutoPauseOnBlur: true
591
+ preventAutoPauseOnBlur: true,
592
+ type: (((_b = this.broadcastParams) === null || _b === void 0 ? void 0 : _b.useHTML5) ? 'html5' : 'videojs')
592
593
  };
593
594
  return (h("div", { ref: (el) => (this.videoElWrapper = el), class: {
594
595
  'video-outer-container': true,
@@ -194,9 +194,14 @@ const YooFormCatalogComponent = class {
194
194
  else {
195
195
  value[product._id] = quantity > 0 ? quantity : 0;
196
196
  }
197
- if (this.products && !this.products.find((p) => p._id === product._id)) {
197
+ this.products = this.products || [];
198
+ const index = this.products.findIndex((p) => p._id === product._id);
199
+ if (index < 0) {
198
200
  this.products.push(product);
199
201
  }
202
+ else {
203
+ this.products[index] = product;
204
+ }
200
205
  this.setValue(value);
201
206
  }
202
207
  addProduct(product) {
@@ -214,9 +219,13 @@ const YooFormCatalogComponent = class {
214
219
  value[product._id] = product.step || 1;
215
220
  }
216
221
  this.products = this.products || [];
217
- if (this.products && !this.products.find((p) => p._id === product._id)) {
222
+ const index = this.products.findIndex((p) => p._id === product._id);
223
+ if (index < 0) {
218
224
  this.products.push(product);
219
225
  }
226
+ else {
227
+ this.products[index] = product;
228
+ }
220
229
  this.setValue(value);
221
230
  }
222
231
  clearProduct(product) {
@@ -1,5 +1,6 @@
1
1
  import { r as registerInstance, i as createEvent, h, e as Host, g as getElement } from './index-2cf5b950.js';
2
2
  import { b6 as getUUID, H as getCssColor, b9 as getContrastColor, b5 as gsapTo, b7 as Draggable, ba as isImageUrl, a0 as translateMulti } from './index-0a31764b.js';
3
+ import { u as updateBounds } from './index-0ef5b513.js';
3
4
  import { s as showWarningBanner } from './draggable-tags-helpers-f7c49cf1.js';
4
5
  import { s as setValueAndValidateInput } from './form-input-helpers-c4bbb638.js';
5
6
  import { B as isEqual, T as shuffle, U as difference } from './lodash-cd4a9ba3.js';
@@ -9,7 +10,7 @@ import './common-helpers-f4f92196.js';
9
10
 
10
11
  const CONNECT_TYPES = ['draggable', 'connectable'];
11
12
 
12
- const formConnectCss = "svg:not(:root){overflow:hidden}.bg-accent{background-color:var(--accent, #276ef1) !important}.accent{color:var(--accent, #276ef1);fill:var(--accent, #276ef1)}.border-accent{border:var(--border-width-02, 0.125rem) solid var(--accent, #276ef1)}.bg-app-color{background-color:var(--app-color, #5a30f4) !important}.app-color{color:var(--app-color, #5a30f4);fill:var(--app-color, #5a30f4)}.border-app-color{border:var(--border-width-02, 0.125rem) solid var(--app-color, #5a30f4)}.bg-danger{background-color:var(--danger, #d44333) !important}.danger{color:var(--danger, #d44333);fill:var(--danger, #d44333)}.border-danger{border:var(--border-width-02, 0.125rem) solid var(--danger, #d44333)}.bg-dark{background-color:var(--dark, #000000) !important}.dark{color:var(--dark, #000000);fill:var(--dark, #000000)}.border-dark{border:var(--border-width-02, 0.125rem) solid var(--dark, #000000)}.bg-energized{background-color:var(--energized, #ffc043) !important}.energized{color:var(--energized, #ffc043);fill:var(--energized, #ffc043)}.border-energized{border:var(--border-width-02, 0.125rem) solid var(--energized, #ffc043)}.bg-info{background-color:var(--info, #d84c96) !important}.info{color:var(--info, #d84c96);fill:var(--info, #d84c96)}.border-info{border:var(--border-width-02, 0.125rem) solid var(--info, #d84c96)}.bg-light{background-color:var(--light, #ffffff) !important}.light{color:var(--light, #ffffff);fill:var(--light, #ffffff)}.border-light{border:var(--border-width-02, 0.125rem) solid var(--light, #ffffff)}.bg-stable{background-color:var(--stable, #adadad) !important}.stable{color:var(--stable, #adadad);fill:var(--stable, #adadad)}.border-stable{border:var(--border-width-02, 0.125rem) solid var(--stable, #adadad)}.bg-stable-alt{background-color:var(--stable-alt, #d0d0d0) !important}.stable-alt{color:var(--stable-alt, #d0d0d0);fill:var(--stable-alt, #d0d0d0)}.border-stable-alt{border:var(--border-width-02, 0.125rem) solid var(--stable-alt, #d0d0d0)}.bg-stable-light{background-color:var(--stable-light, #f1f1f1) !important}.stable-light{color:var(--stable-light, #f1f1f1);fill:var(--stable-light, #f1f1f1)}.border-stable-light{border:var(--border-width-02, 0.125rem) solid var(--stable-light, #f1f1f1)}.bg-stable-ultralight{background-color:var(--stable-ultralight, #fafafa) !important}.stable-ultralight{color:var(--stable-ultralight, #fafafa);fill:var(--stable-ultralight, #fafafa)}.border-stable-ultralight{border:var(--border-width-02, 0.125rem) solid var(--stable-ultralight, #fafafa)}.bg-success{background-color:var(--success, #3aa76d) !important}.success{color:var(--success, #3aa76d);fill:var(--success, #3aa76d)}.border-success{border:var(--border-width-02, 0.125rem) solid var(--success, #3aa76d)}.bg-text-color{background-color:var(--text-color, #807f83) !important}.text-color{color:var(--text-color, #807f83);fill:var(--text-color, #807f83)}.border-text-color{border:var(--border-width-02, 0.125rem) solid var(--text-color, #807f83)}.bg-warning{background-color:var(--warning, #ed6e33) !important}.warning{color:var(--warning, #ed6e33);fill:var(--warning, #ed6e33)}.border-warning{border:var(--border-width-02, 0.125rem) solid var(--warning, #ed6e33)}.bg-wood{background-color:var(--wood, #99644c) !important}.wood{color:var(--wood, #99644c);fill:var(--wood, #99644c)}.border-wood{border:var(--border-width-02, 0.125rem) solid var(--wood, #99644c)}:host{display:block;width:100%;max-width:30rem}:host yoo-banner{height:0}:host yoo-banner p{padding:0}:host yoo-icon{position:absolute;top:var(--spacing-08, 0.5rem);right:var(--spacing-08, 0.5rem);background:var(--light, #ffffff);border-radius:50%}:host yoo-img{border-radius:inherit}:host main,:host #draggables,:host #connectables{display:grid;grid-gap:var(--spacing-08, 0.5rem)}:host #draggables,:host #connectables{position:relative;height:-webkit-max-content;height:-moz-max-content;height:max-content;padding:var(--spacing-08, 0.5rem) 0}:host main{grid-template-rows:repeat(auto-fit, 75%);grid-template-columns:1fr 1fr;padding:0 var(--spacing-08, 0.5rem);word-break:break-word;background-color:var(--stable-alt-20, rgba(208, 208, 208, 0.2));border-radius:var(--border-radius-04, 0.25rem);-webkit-transition:height 750ms ease-in-out;transition:height 750ms ease-in-out}:host main[style*=height]{overflow:hidden auto}:host main.overflowing{overflow:hidden auto}:host main.overflowing::-webkit-scrollbar{width:var(--spacing-08, 0.5rem)}:host main.overflowing::-webkit-scrollbar-track{border-radius:var(--border-radius-04, 0.25rem);-webkit-box-shadow:inset 0 0 5px var(--stable, #adadad);box-shadow:inset 0 0 5px var(--stable, #adadad)}:host main.overflowing::-webkit-scrollbar-thumb{background:var(--app-color, #5a30f4);border-radius:var(--border-radius-04, 0.25rem)}:host .connectable,:host .draggable{position:relative;width:100%;max-width:15rem;height:100%;background-color:var(--light, #ffffff);border-radius:var(--border-radius-08, 0.5rem);-webkit-box-shadow:var(--shadow-02, 0 0.25rem 0.5rem 0 rgba(0, 0, 0, 0.1));box-shadow:var(--shadow-02, 0 0.25rem 0.5rem 0 rgba(0, 0, 0, 0.1));cursor:pointer;-webkit-transition:background-color 0.25s ease-in-out, color 0.25s ease-in-out;transition:background-color 0.25s ease-in-out, color 0.25s ease-in-out}:host .connectable:before,:host .draggable:before{display:block;width:0;height:0;padding-bottom:75%;content:\"\"}:host .connectable[type=image],:host .draggable[type=image]{padding:0}:host .connectable[type=image]:not([hit]),:host .draggable[type=image]:not([hit]){background-color:transparent}:host .connectable[type=image][hit] yoo-img,:host .draggable[type=image][hit] yoo-img{opacity:0.6;-webkit-transition:opacity 0.25s ease-in-out;transition:opacity 0.25s ease-in-out}:host .connectable[type=image]>*:not(yoo-icon),:host .draggable[type=image]>*:not(yoo-icon){top:0;left:0;width:100%;height:100%}:host .connectable[type=text][hit],:host .draggable[type=text][hit]{background-color:var(--stable-light, #f1f1f1)}:host .connectable[type=text] p,:host .draggable[type=text] p{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;-webkit-box-sizing:border-box;box-sizing:border-box;max-height:calc(100% - var(--spacing-16, 1rem));margin:0;padding:var(--spacing-16, 1rem);overflow:hidden;font-size:var(--font-size-14, 0.875rem);text-align:center}:host .connectable[type=text]>*:not(yoo-icon),:host .draggable[type=text]>*:not(yoo-icon){position:absolute;top:50%;right:0;left:0;-webkit-transform:translateY(-50%);transform:translateY(-50%)}:host .connectable>*:not(yoo-icon),:host .draggable>*:not(yoo-icon){position:absolute}:host #overlay{background-color:inherit;border-radius:inherit;opacity:0.6}";
13
+ const formConnectCss = "svg:not(:root){overflow:hidden}.bg-accent{background-color:var(--accent, #276ef1) !important}.accent{color:var(--accent, #276ef1);fill:var(--accent, #276ef1)}.border-accent{border:var(--border-width-02, 0.125rem) solid var(--accent, #276ef1)}.bg-app-color{background-color:var(--app-color, #5a30f4) !important}.app-color{color:var(--app-color, #5a30f4);fill:var(--app-color, #5a30f4)}.border-app-color{border:var(--border-width-02, 0.125rem) solid var(--app-color, #5a30f4)}.bg-danger{background-color:var(--danger, #d44333) !important}.danger{color:var(--danger, #d44333);fill:var(--danger, #d44333)}.border-danger{border:var(--border-width-02, 0.125rem) solid var(--danger, #d44333)}.bg-dark{background-color:var(--dark, #000000) !important}.dark{color:var(--dark, #000000);fill:var(--dark, #000000)}.border-dark{border:var(--border-width-02, 0.125rem) solid var(--dark, #000000)}.bg-energized{background-color:var(--energized, #ffc043) !important}.energized{color:var(--energized, #ffc043);fill:var(--energized, #ffc043)}.border-energized{border:var(--border-width-02, 0.125rem) solid var(--energized, #ffc043)}.bg-info{background-color:var(--info, #d84c96) !important}.info{color:var(--info, #d84c96);fill:var(--info, #d84c96)}.border-info{border:var(--border-width-02, 0.125rem) solid var(--info, #d84c96)}.bg-light{background-color:var(--light, #ffffff) !important}.light{color:var(--light, #ffffff);fill:var(--light, #ffffff)}.border-light{border:var(--border-width-02, 0.125rem) solid var(--light, #ffffff)}.bg-stable{background-color:var(--stable, #adadad) !important}.stable{color:var(--stable, #adadad);fill:var(--stable, #adadad)}.border-stable{border:var(--border-width-02, 0.125rem) solid var(--stable, #adadad)}.bg-stable-alt{background-color:var(--stable-alt, #d0d0d0) !important}.stable-alt{color:var(--stable-alt, #d0d0d0);fill:var(--stable-alt, #d0d0d0)}.border-stable-alt{border:var(--border-width-02, 0.125rem) solid var(--stable-alt, #d0d0d0)}.bg-stable-light{background-color:var(--stable-light, #f1f1f1) !important}.stable-light{color:var(--stable-light, #f1f1f1);fill:var(--stable-light, #f1f1f1)}.border-stable-light{border:var(--border-width-02, 0.125rem) solid var(--stable-light, #f1f1f1)}.bg-stable-ultralight{background-color:var(--stable-ultralight, #fafafa) !important}.stable-ultralight{color:var(--stable-ultralight, #fafafa);fill:var(--stable-ultralight, #fafafa)}.border-stable-ultralight{border:var(--border-width-02, 0.125rem) solid var(--stable-ultralight, #fafafa)}.bg-success{background-color:var(--success, #3aa76d) !important}.success{color:var(--success, #3aa76d);fill:var(--success, #3aa76d)}.border-success{border:var(--border-width-02, 0.125rem) solid var(--success, #3aa76d)}.bg-text-color{background-color:var(--text-color, #807f83) !important}.text-color{color:var(--text-color, #807f83);fill:var(--text-color, #807f83)}.border-text-color{border:var(--border-width-02, 0.125rem) solid var(--text-color, #807f83)}.bg-warning{background-color:var(--warning, #ed6e33) !important}.warning{color:var(--warning, #ed6e33);fill:var(--warning, #ed6e33)}.border-warning{border:var(--border-width-02, 0.125rem) solid var(--warning, #ed6e33)}.bg-wood{background-color:var(--wood, #99644c) !important}.wood{color:var(--wood, #99644c);fill:var(--wood, #99644c)}.border-wood{border:var(--border-width-02, 0.125rem) solid var(--wood, #99644c)}:host{display:block;width:100%;max-width:30rem}:host yoo-banner{height:0}:host yoo-banner p{padding:0}:host yoo-icon{position:absolute;top:var(--spacing-08, 0.5rem);right:var(--spacing-08, 0.5rem);background:var(--light, #ffffff);border-radius:50%}:host yoo-img{border-radius:inherit}:host #draggables,:host #connectables{position:relative;width:calc(50% - var(--spacing-08, 0.5rem));height:-webkit-max-content;height:-moz-max-content;height:max-content}:host main{display:-ms-flexbox;display:flex;-ms-flex-pack:distribute;justify-content:space-around;padding-top:var(--spacing-08, 0.5rem);word-break:break-word;background-color:var(--stable-alt-20, rgba(208, 208, 208, 0.2));border-radius:var(--border-radius-04, 0.25rem);-webkit-transition:height 750ms ease-in-out;transition:height 750ms ease-in-out}:host main:first-of-type{padding-left:var(--spacing-08, 0.5rem)}:host main:last-of-type{padding-right:var(--spacing-08, 0.5rem)}:host main[style*=height]{overflow:hidden auto}:host main.overflowing{overflow:hidden auto}:host main.overflowing::-webkit-scrollbar{width:var(--spacing-08, 0.5rem)}:host main.overflowing::-webkit-scrollbar-track{border-radius:var(--border-radius-04, 0.25rem);-webkit-box-shadow:inset 0 0 5px var(--stable, #adadad);box-shadow:inset 0 0 5px var(--stable, #adadad)}:host main.overflowing::-webkit-scrollbar-thumb{background:var(--app-color, #5a30f4);border-radius:var(--border-radius-04, 0.25rem)}:host [type],:host .overlay{-webkit-transition:background-color 0.25s ease-in-out, color 0.25s ease-in-out;transition:background-color 0.25s ease-in-out, color 0.25s ease-in-out}:host .connectable,:host .draggable{position:relative;max-width:15rem;margin-bottom:var(--spacing-08, 0.5rem);background-color:var(--light, #ffffff);border-radius:var(--border-radius-08, 0.5rem);-webkit-box-shadow:var(--shadow-02, 0 0.25rem 0.5rem 0 rgba(0, 0, 0, 0.1));box-shadow:var(--shadow-02, 0 0.25rem 0.5rem 0 rgba(0, 0, 0, 0.1));cursor:pointer}:host .connectable:before,:host .draggable:before{display:block;width:0;height:0;padding-bottom:75%;content:\"\"}:host .connectable[type=image],:host .draggable[type=image]{padding:0}:host .connectable[type=image]:not([hit]),:host .draggable[type=image]:not([hit]){background-color:transparent}:host .connectable[type=image][hit] yoo-img,:host .draggable[type=image][hit] yoo-img{opacity:0.6;-webkit-transition:opacity 0.25s ease-in-out;transition:opacity 0.25s ease-in-out}:host .connectable[type=image]>*:not(yoo-icon),:host .draggable[type=image]>*:not(yoo-icon){top:0;left:0;width:100%;height:100%}:host .connectable[type=text][hit],:host .draggable[type=text][hit]{background-color:var(--stable-light, #f1f1f1)}:host .connectable[type=text] p,:host .draggable[type=text] p{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;-webkit-box-sizing:border-box;box-sizing:border-box;max-height:calc(100% - var(--spacing-16, 1rem));margin:0;padding:var(--spacing-16, 1rem);overflow:hidden;font-size:var(--font-size-14, 0.875rem);text-align:center}:host .connectable[type=text]>*:not(yoo-icon),:host .draggable[type=text]>*:not(yoo-icon){position:absolute;top:50%;right:0;left:0;-webkit-transform:translateY(-50%);transform:translateY(-50%)}:host .connectable>*:not(yoo-icon),:host .draggable>*:not(yoo-icon){position:absolute}:host .overlay{background-color:inherit;border-radius:inherit;opacity:0.6}";
13
14
 
14
15
  const DEFAULT_TILES_COLORS = ['warning', 'accent', 'app-color', 'info', 'energized'];
15
16
  const YooFormConnectComponent = class {
@@ -55,10 +56,6 @@ const YooFormConnectComponent = class {
55
56
  var _a, _b, _c, _d, _e, _f;
56
57
  return ((_a = this.values) === null || _a === void 0 ? void 0 : _a.length) && ((_c = (_b = this.values[0]) === null || _b === void 0 ? void 0 : _b.filter(v => v)) === null || _c === void 0 ? void 0 : _c.length) === ((_f = (_e = (_d = this.values) === null || _d === void 0 ? void 0 : _d[1]) === null || _e === void 0 ? void 0 : _e.filter(v => v)) === null || _f === void 0 ? void 0 : _f.length);
57
58
  }
58
- get columnElements() {
59
- var _a;
60
- return Array.from(((_a = this.mainElement) === null || _a === void 0 ? void 0 : _a.querySelectorAll('section')) || []);
61
- }
62
59
  get draggableElements() {
63
60
  var _a;
64
61
  return Array.from(((_a = this.mainElement) === null || _a === void 0 ? void 0 : _a.querySelectorAll('.draggable')) || []);
@@ -128,14 +125,6 @@ const YooFormConnectComponent = class {
128
125
  }
129
126
  });
130
127
  this.getUserAnswers();
131
- this.validate();
132
- }
133
- if (key === 'hit') {
134
- this.draggables.map(dr => {
135
- if ((dr.id !== draggable.id)) {
136
- delete dr.hit;
137
- }
138
- });
139
128
  }
140
129
  return true;
141
130
  }
@@ -176,11 +165,26 @@ const YooFormConnectComponent = class {
176
165
  const currentDraggable = draggableElement && ((_a = this.draggables) === null || _a === void 0 ? void 0 : _a.find(({ id }) => id === draggableElement.id));
177
166
  if (currentDraggable) {
178
167
  let tempConnectableElement;
179
- const onPressTile = () => {
180
- if (!draggableElement.style.width) {
181
- this.columnElements.forEach(e => (e === null || e === void 0 ? void 0 : e.clientWidth) && (e.style.width = `${e.clientWidth}px`));
182
- draggableElement.style.width = `${draggableElement.clientWidth}px`;
183
- }
168
+ const onClickTile = () => {
169
+ this.draggables.forEach(draggable => {
170
+ const selectedDraggable = draggable.id === currentDraggable.id && draggable;
171
+ draggable.selected = selectedDraggable && !currentDraggable.selected;
172
+ if (selectedDraggable.connectableId) {
173
+ draggable.selected = false;
174
+ delete draggable.connectableId;
175
+ }
176
+ else {
177
+ this.getUserAnswers();
178
+ }
179
+ });
180
+ };
181
+ const onPressTile = (scope) => {
182
+ updateBounds({
183
+ dragHandler: draggableElement,
184
+ dragHandlerZone: draggableElement.parentElement,
185
+ draggable: scope,
186
+ host: this.host
187
+ });
184
188
  };
185
189
  const onDragStartTile = () => {
186
190
  draggableElement.removeAttribute('hit');
@@ -188,17 +192,20 @@ const YooFormConnectComponent = class {
188
192
  };
189
193
  const onDragTile = () => {
190
194
  var _a, _b;
191
- const overlapThreshold = '65%';
195
+ const overlapThreshold = '45%';
192
196
  const { x, width } = draggableElement.getBoundingClientRect();
193
197
  const connectableThreshold = this.mainElement.querySelector('#connectables').getBoundingClientRect().x;
194
198
  const isInConnectableArea = x + width >= connectableThreshold;
195
199
  if (isInConnectableArea) {
196
- this.connectableElements.forEach(e => {
200
+ this.connectableElements.forEach(element => {
197
201
  var _a, _b;
198
- if (((_b = (_a = currentDraggable === null || currentDraggable === void 0 ? void 0 : currentDraggable.draggableInstance) === null || _a === void 0 ? void 0 : _a.hitTest) === null || _b === void 0 ? void 0 : _b.call(_a, e, overlapThreshold)) && e.id !== currentDraggable.connectableId) {
199
- tempConnectableElement = e;
202
+ if (((_b = (_a = currentDraggable === null || currentDraggable === void 0 ? void 0 : currentDraggable.draggableInstance) === null || _a === void 0 ? void 0 : _a.hitTest) === null || _b === void 0 ? void 0 : _b.call(_a, element, overlapThreshold)) && element.id !== currentDraggable.connectableId) {
203
+ tempConnectableElement = element;
200
204
  tempConnectableElement.setAttribute('hit', 'true');
201
205
  }
206
+ else {
207
+ element.removeAttribute('hit');
208
+ }
202
209
  });
203
210
  }
204
211
  if (tempConnectableElement && !currentDraggable.draggableInstance.hitTest(tempConnectableElement, overlapThreshold)) {
@@ -210,7 +217,6 @@ const YooFormConnectComponent = class {
210
217
  color: getContrastColor(connectableColor)
211
218
  });
212
219
  }
213
- tempConnectableElement.removeAttribute('hit');
214
220
  tempConnectableElement = null;
215
221
  }
216
222
  };
@@ -218,9 +224,10 @@ const YooFormConnectComponent = class {
218
224
  await gsapTo(draggableElement, this.animated ? 0.25 : 0, { x: 0, y: 0 });
219
225
  draggableElement.style.removeProperty('z-index');
220
226
  if (tempConnectableElement) {
227
+ currentDraggable.selected = false;
221
228
  currentDraggable.connectableId = tempConnectableElement.id;
222
- [...this.connectableElements, ...this.draggableElements].forEach(e => e.removeAttribute('hit'));
223
229
  this.autoCompleteLastConnection();
230
+ tempConnectableElement.removeAttribute('hit');
224
231
  }
225
232
  tempConnectableElement = null;
226
233
  };
@@ -228,8 +235,8 @@ const YooFormConnectComponent = class {
228
235
  currentDraggable.draggableInstance = new Draggable(draggableElement, {
229
236
  zIndexBoost: false,
230
237
  autoScroll: 1,
231
- bound: this.mainElement,
232
- onPress: () => onPressTile,
238
+ onClick: onClickTile,
239
+ onPress() { onPressTile(this); },
233
240
  onDragStart: onDragStartTile,
234
241
  onDrag: onDragTile,
235
242
  onRelease: onReleaseTile
@@ -246,7 +253,7 @@ const YooFormConnectComponent = class {
246
253
  var _a, _b;
247
254
  const freeDraggables = this.draggables.filter(d => !d.connectableId);
248
255
  if ((freeDraggables === null || freeDraggables === void 0 ? void 0 : freeDraggables.length) === 1 && ((_a = this.draggables) === null || _a === void 0 ? void 0 : _a.length) > 1) {
249
- const lastDraggable = freeDraggables[0];
256
+ const [lastDraggable] = freeDraggables;
250
257
  const lastConectableId = (_b = difference(this.connectables.map(({ id }) => id), this.draggables.map(({ connectableId }) => connectableId))) === null || _b === void 0 ? void 0 : _b[0];
251
258
  lastDraggable.connectableId = lastConectableId;
252
259
  }
@@ -260,33 +267,25 @@ const YooFormConnectComponent = class {
260
267
  var _a;
261
268
  const tileType = `${name}s`;
262
269
  const onConnectableClick = (connectable) => {
263
- const hitDraggable = this.draggables.find(d => { var _a; return (_a = d.hit) === null || _a === void 0 ? void 0 : _a.value; });
264
- if (hitDraggable && connectable) {
265
- hitDraggable.connectableId = connectable.id;
266
- this.autoCompleteLastConnection();
267
- }
268
- };
269
- const onDraggableClick = (draggable) => {
270
- var _a, _b;
271
- const currentDraggable = (_a = this.draggables) === null || _a === void 0 ? void 0 : _a.find(({ id }) => id === draggable.id);
272
- currentDraggable.hit = { value: !((_b = currentDraggable.hit) === null || _b === void 0 ? void 0 : _b.value) && !currentDraggable.connectableId };
273
- delete currentDraggable.connectableId;
274
- this.getUserAnswers();
275
- this.validate();
270
+ this.draggables.forEach(draggable => {
271
+ const selectedDraggable = draggable.selected && draggable;
272
+ if (selectedDraggable && connectable) {
273
+ draggable.selected = false;
274
+ draggable.connectableId = connectable.id;
275
+ this.autoCompleteLastConnection();
276
+ }
277
+ });
276
278
  };
277
279
  return (h("section", { id: tileType }, (_a = this[tileType]) === null || _a === void 0 ? void 0 : _a.map((item) => {
278
280
  const isDraggable = name === 'draggable';
279
- const { id, value, connectableId, color, hit } = item || {};
281
+ const { id, value, connectableId, selected } = item || {};
280
282
  const isImage = value && isImageUrl(value);
281
283
  const connectable = this.draggables.find(({ connectableId }) => connectableId === id);
282
284
  const isConnected = !!(connectableId || connectable);
283
- const tileColor = color || (connectable === null || connectable === void 0 ? void 0 : connectable.color);
284
- const connectedAttributes = { style: { backgroundColor: tileColor, color: getContrastColor(tileColor) }, connected: true };
285
- const tileAttr = {
286
- ...(isConnected && connectedAttributes), hit: !!(hit === null || hit === void 0 ? void 0 : hit.value) && isDraggable, type: isImage ? 'image' : 'text'
287
- };
288
- const tileClick = () => isDraggable ? onDraggableClick(item) : onConnectableClick(item);
289
- return !!value && h("div", { ...tileAttr, id: id, key: id, class: name, onTouchStart: () => tileClick(), onClick: () => tileClick() }, !isImage ? h("p", null, translateMulti(value)) : [h("yoo-img", { type: "background", src: value }), h("div", { id: "overlay" })], this.readonly && this.renderCorrectionIcon(value));
285
+ const tileColor = item.color || (connectable === null || connectable === void 0 ? void 0 : connectable.color);
286
+ const { backgroundColor, color } = { backgroundColor: getCssColor(tileColor), color: getContrastColor(tileColor) };
287
+ const tileAttr = { type: isImage ? 'image' : 'text', connected: isConnected, hit: isDraggable && !isConnected && selected };
288
+ return (!!value && (h("div", { ...tileAttr, style: isConnected && !isImage && { backgroundColor, color }, id: id, key: id, class: name, ...(!isDraggable && { onTouchStart: () => onConnectableClick(item), onClick: () => onConnectableClick(item) }) }, !isImage ? h("p", null, translateMulti(value)) : [h("yoo-img", { type: "background", src: value }), h("div", { class: "overlay", style: isConnected && { backgroundColor, color } })], this.readonly && this.renderCorrectionIcon(value))));
290
289
  })));
291
290
  }
292
291
  renderBanner() {
@@ -3,7 +3,7 @@ import { y as isWeb, z as debounce, b as isNativeMobile, E as isIOS, dB as isKey
3
3
  import { g as getAppContext } from './common-helpers-f4f92196.js';
4
4
  import { v as validate, i as initNumber, s as setValueAndValidateInput, a as setValidator, c as convertValueForInputType, f as onIconClicked, o as onInputClear, e as onInputBlurred, d as onInputFocused, h as setContentEditableValidity, j as clearFocused } from './form-input-helpers-c4bbb638.js';
5
5
  import { i as isNil, p as isString, b as isFunction, o as isNumber } from './lodash-cd4a9ba3.js';
6
- import { g as getRenderer } from './grid-renderers-649f8b12.js';
6
+ import { g as getRenderer } from './grid-renderers-4dd1c6d7.js';
7
7
  import './_commonjsHelpers-f4d11124.js';
8
8
  import './index-ee2b347f.js';
9
9
  import './incentive-helpers-94537d6e.js';
@@ -224,7 +224,7 @@ const YooFormMultiInputComponent = class {
224
224
  const rowsCount = Math.max(...[this.getMaxRowsOf('init'), this.getMaxRowsOf('min'), values.length]) || 1;
225
225
  this.rows = Array.from({ length: rowsCount }).map((_, rowIndex) => {
226
226
  return this.columnsDefinition.map((column, colIndex) => {
227
- const { hasImage, maxRows, hasText } = column;
227
+ const { hasImage, maxRows, hasText, forceObjectValue } = column;
228
228
  const rowValue = values === null || values === void 0 ? void 0 : values[rowIndex];
229
229
  const value = Array.isArray(rowValue) ? rowValue === null || rowValue === void 0 ? void 0 : rowValue[colIndex] : rowValue;
230
230
  const [text, file, selection] = ['text', 'file', 'selection'].map((type) => (Array.isArray(value) ? value[colIndex] : typeof value === 'object' ? value === null || value === void 0 ? void 0 : value[type] : value));
@@ -233,7 +233,7 @@ const YooFormMultiInputComponent = class {
233
233
  rowIndex,
234
234
  column,
235
235
  hidden: rowIndex + 1 > maxRows || (!value && rowIndex + 1 > column.initRows),
236
- value: {
236
+ value: forceObjectValue ? { text: value } : {
237
237
  ...(hasText && { text }),
238
238
  ...(hasImage && { file: isImageUrl(file) ? file : '' }),
239
239
  ...(selection && { selection })
@@ -1,6 +1,6 @@
1
1
  import { r as registerInstance, i as createEvent, f as forceUpdate, h, g as getElement } from './index-2cf5b950.js';
2
2
  import { P as IRoute } from './index-ee2b347f.js';
3
- import { a6 as getSession, b as isNativeMobile, bR as screenOrientationUnlock, M as getAsyncExtraData, c as isAndroid, t as translate, H as getCssColor, a0 as translateMulti, x as showModal, y as isWeb, aj as showAlert, bS as screenOrientationLock, bT as getLocaleVariantScormCloudId, ax as getCurrentLanguage, m as isSafari } from './index-0a31764b.js';
3
+ import { a6 as getSession, b as isNativeMobile, bR as screenOrientationUnlock, M as getAsyncExtraData, c as isAndroid, t as translate, a0 as translateMulti, x as showModal, y as isWeb, aj as showAlert, bS as screenOrientationLock, bT as getLocaleVariantScormCloudId, ax as getCurrentLanguage, m as isSafari } from './index-0a31764b.js';
4
4
  import { a as setValidator, s as setValueAndValidateInput } from './form-input-helpers-c4bbb638.js';
5
5
  import { o as isNumber, E as get } from './lodash-cd4a9ba3.js';
6
6
  import './_commonjsHelpers-f4d11124.js';
@@ -88,7 +88,7 @@ const YooFormScormComponent = class {
88
88
  }
89
89
  if (ret === null || ret === void 0 ? void 0 : ret.launchLink) {
90
90
  if (isNativeMobile()) {
91
- const iab = window.open(ret.launchLink, isNativeMobile() ? '_blank' : '_system', `location=${isAndroid() ? 'yes,hideurlbar=yes' : 'no'},toolbar=yes,hidenavigationbuttons=${isAndroid() ? 'yes' : 'no'},closebuttoncaption=${translate('CLOSE')},beforeload=yes,allowInlineMediaPlayback=yes,closebuttoncolor=${getCssColor('app-color')}`);
91
+ const iab = window.open(ret.launchLink, isNativeMobile() ? '_blank' : '_system', `location=${isAndroid() ? 'yes,hideurlbar=yes' : 'no'},toolbar=yes,hidenavigationbuttons=${isAndroid() ? 'yes' : 'no'},closebuttoncaption=${translate('CLOSE')},beforeload=yes,allowInlineMediaPlayback=yes`);
92
92
  iab.addEventListener('exit', () => {
93
93
  if (!this.isPreview) {
94
94
  this.onCloseScormPlayer();