lido-player 0.0.2-alpha-51-dev → 0.0.2-alpha-53-dev

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 (143) hide show
  1. package/dist/cjs/index.cjs.js +1 -1
  2. package/dist/cjs/lido-avatar_22.cjs.entry.js +199 -73
  3. package/dist/cjs/lido-player.cjs.js +1 -1
  4. package/dist/cjs/loader.cjs.js +1 -1
  5. package/dist/cjs/{utils-dc02d753.js → utils-3c1ce74e.js} +236 -101
  6. package/dist/collection/components/avatar/lido-avatar.js +1 -1
  7. package/dist/collection/components/canvas/lido-canvas.css +5 -8
  8. package/dist/collection/components/canvas/lido-canvas.js +2 -2
  9. package/dist/collection/components/cell/lido-cell.js +1 -1
  10. package/dist/collection/components/column/lido-col.js +1 -1
  11. package/dist/collection/components/container/lido-container.js +24 -2
  12. package/dist/collection/components/flashCard/lido-flash-card.js +1 -1
  13. package/dist/collection/components/home/lido-home.css +4 -0
  14. package/dist/collection/components/home/lido-home.js +27 -3
  15. package/dist/collection/components/mathMatrix/lido-math-matrix.js +14 -14
  16. package/dist/collection/components/position/lido-pos.js +1 -1
  17. package/dist/collection/components/random/lido-random.js +1 -1
  18. package/dist/collection/components/row/lido-row.js +1 -1
  19. package/dist/collection/components/shape/lido-shape.js +1 -1
  20. package/dist/collection/components/trace/lido-trace.js +122 -47
  21. package/dist/collection/components/wrap/lido-wrap.js +1 -1
  22. package/dist/collection/stories/Templates/Fill-Up/fill-up.stories.js +26 -25
  23. package/dist/collection/stories/Templates/LetterPairing/LetterPairing.stories.js +3 -1
  24. package/dist/collection/stories/Templates/RocketGame/rocketGame.stories.js +1 -1
  25. package/dist/collection/stories/Templates/arrangeLetters/arrangeLetters.stories.js +1 -1
  26. package/dist/collection/stories/Templates/balancing/balancing.stories.js +1 -1
  27. package/dist/collection/stories/Templates/blender/blender.stories.js +100 -0
  28. package/dist/collection/stories/Templates/bubbleType/bubbleType.stories.js +1 -1
  29. package/dist/collection/stories/Templates/calculator/calculator.stories.js +6 -2
  30. package/dist/collection/stories/Templates/checker-block/checkerBlock.stories.js +1 -1
  31. package/dist/collection/stories/Templates/checkerBlock/checkerBlock.stories.js +1 -1
  32. package/dist/collection/stories/Templates/create-sentence/createSentence.stories.js +1 -1
  33. package/dist/collection/stories/Templates/fillAnswer/fill-answer.stories.js +3 -2
  34. package/dist/collection/stories/Templates/fillBlank/fill-blank.stories.js +1 -1
  35. package/dist/collection/stories/Templates/foodJar/food-jar.stories.js +3 -1
  36. package/dist/collection/stories/Templates/grid/grid.stories.js +5 -1
  37. package/dist/collection/stories/Templates/gridGame/grid-game.stories.js +1 -1
  38. package/dist/collection/stories/Templates/jumpSentence/jumpSentence.stories.js +4 -2
  39. package/dist/collection/stories/Templates/letterboard/letterboard.stories.js +1 -1
  40. package/dist/collection/stories/Templates/matchingCard/matching-card.stories.js +3 -1
  41. package/dist/collection/stories/Templates/multipleOption/mcqWithQuestionImage.stories.js +4 -2
  42. package/dist/collection/stories/Templates/multipleOption/multiple-option.stories.js +1 -1
  43. package/dist/collection/stories/Templates/multiplyBeeds/multiplyBeeds.stories.js +1 -1
  44. package/dist/collection/stories/Templates/nimbleTable/nimbleTable.stories.js +1 -1
  45. package/dist/collection/stories/Templates/numberBoard/numberBoard.stories.js +1 -1
  46. package/dist/collection/stories/Templates/numberBoardTwo/numberBoardTwo.stories.js +6 -4
  47. package/dist/collection/stories/Templates/numberPair/numberPair.stories.js +1 -1
  48. package/dist/collection/stories/Templates/openwindow/openwindow.stories.js +2 -2
  49. package/dist/collection/stories/Templates/openwindow/openwindow2.stories.js +2 -2
  50. package/dist/collection/stories/Templates/order-tractor/order-tractor-ascending-order.stories.js +14 -13
  51. package/dist/collection/stories/Templates/order-tractor/order-tractor.stories.js +14 -13
  52. package/dist/collection/stories/Templates/phonic-tractor/phonic-tractor.stories.js +1 -1
  53. package/dist/collection/stories/Templates/picturemeaning/pictureMeaningCocos.stories.js +5 -1
  54. package/dist/collection/stories/Templates/questionBoard/questionBoard.stories.js +1 -1
  55. package/dist/collection/stories/Templates/quizLiteracy/quizLiteracy.stories.js +1 -1
  56. package/dist/collection/stories/Templates/quizLiteracy/quizLiteracyImageWithText.stories.js +1 -1
  57. package/dist/collection/stories/Templates/quizLiteracy/quizLiteracyImageWord.stories.js +1 -1
  58. package/dist/collection/stories/Templates/reorder/reorder.stories.js +3 -1
  59. package/dist/collection/stories/Templates/rowBlocks/rowBlocks.stories.js +2 -2
  60. package/dist/collection/stories/Templates/sequenceBox/sequenceBox1.stories.js +6 -6
  61. package/dist/collection/stories/Templates/sequenceBox/sequenceBox2.stories.js +7 -6
  62. package/dist/collection/stories/Templates/shapePair/shape-pair.stories.js +1 -1
  63. package/dist/collection/stories/Templates/shapeTractor/shape-tractor.stories.js +25 -21
  64. package/dist/collection/stories/Templates/spellDoor/spellDoor.stories.js +1 -1
  65. package/dist/collection/stories/Templates/sumTogether/sumTogether.stories.js +8 -6
  66. package/dist/collection/stories/Templates/total/total.stories.js +1 -1
  67. package/dist/collection/stories/Templates/writeCard/writeCard.stories.js +1 -1
  68. package/dist/collection/stories/Templates/writeLetter/writeLetter.stories.js +2 -2
  69. package/dist/collection/stories/Templates/writeNumber/writeNumber.stories.js +6 -6
  70. package/dist/collection/stories/Templates/writeSet/writeSet.stories.js +1 -1
  71. package/dist/collection/stories/Templates/writeWord/writeWord.stories.js +7 -6
  72. package/dist/collection/utils/utils.js +155 -27
  73. package/dist/collection/utils/utilsHandlers/animationHandler.js +38 -0
  74. package/dist/collection/utils/utilsHandlers/clickHandler.js +5 -1
  75. package/dist/collection/utils/utilsHandlers/dragDropHandler.js +29 -64
  76. package/dist/collection/utils/utilsHandlers/slideHandler.js +7 -6
  77. package/dist/collection/utils/utilsHandlers/sortHandler.js +3 -5
  78. package/dist/components/index.js +1 -1
  79. package/dist/components/lido-avatar.js +1 -1
  80. package/dist/components/lido-balance.js +1 -1
  81. package/dist/components/lido-calculator.js +1 -1
  82. package/dist/components/lido-canvas.js +2 -2
  83. package/dist/components/lido-cell.js +1 -1
  84. package/dist/components/lido-col.js +1 -1
  85. package/dist/components/lido-container.js +1 -1
  86. package/dist/components/lido-flash-card.js +1 -1
  87. package/dist/components/lido-float.js +1 -1
  88. package/dist/components/lido-home.js +1 -1
  89. package/dist/components/lido-image.js +1 -1
  90. package/dist/components/lido-keyboard.js +1 -1
  91. package/dist/components/lido-math-matrix.js +1 -1
  92. package/dist/components/lido-pos.js +1 -1
  93. package/dist/components/lido-random.js +1 -1
  94. package/dist/components/lido-root.js +23 -23
  95. package/dist/components/lido-row.js +1 -1
  96. package/dist/components/lido-shape.js +1 -1
  97. package/dist/components/lido-slide-fill.js +1 -1
  98. package/dist/components/lido-text.js +1 -1
  99. package/dist/components/lido-trace.js +1 -1
  100. package/dist/components/lido-wrap.js +1 -1
  101. package/dist/components/{p-56c8f3da.js → p-004adc43.js} +3 -3
  102. package/dist/components/{p-c8815e84.js → p-057fb7b8.js} +48 -24
  103. package/dist/components/{p-bb907e43.js → p-0733b277.js} +2 -2
  104. package/dist/components/{p-6ba0f1af.js → p-09b3b152.js} +1 -1
  105. package/dist/components/{p-74b90a9c.js → p-23549651.js} +8 -8
  106. package/dist/components/{p-d7693f47.js → p-3e8ae1c5.js} +123 -48
  107. package/dist/components/{p-6be6c5eb.js → p-3f0e4436.js} +2 -2
  108. package/dist/components/{p-d0131159.js → p-511377d2.js} +236 -102
  109. package/dist/components/{p-a8724f06.js → p-561908ec.js} +2 -2
  110. package/dist/components/{p-1c84cf65.js → p-567983a9.js} +13 -7
  111. package/dist/components/{p-b89371ac.js → p-6beee44b.js} +1 -1
  112. package/dist/components/{p-1f3c2783.js → p-71ded596.js} +2 -2
  113. package/dist/components/{p-0fbeb3a1.js → p-73e3f0f4.js} +12 -6
  114. package/dist/components/{p-b7efadad.js → p-875c1411.js} +2 -2
  115. package/dist/components/{p-4fd6b588.js → p-8774f517.js} +2 -2
  116. package/dist/components/{p-04e904b5.js → p-90f7dd48.js} +1 -1
  117. package/dist/components/{p-caa05d1e.js → p-92b9ae9e.js} +2 -2
  118. package/dist/components/{p-e9548986.js → p-9ea1a67d.js} +26 -4
  119. package/dist/components/{p-bef96764.js → p-b3e67e7f.js} +2 -2
  120. package/dist/components/{p-988477ad.js → p-cca545f9.js} +2 -2
  121. package/dist/components/{p-d3f7d561.js → p-d2fe2bb6.js} +2 -2
  122. package/dist/components/{p-12432f23.js → p-d568d595.js} +1 -1
  123. package/dist/components/{p-62d2a5b3.js → p-df1af62c.js} +2 -2
  124. package/dist/esm/index.js +1 -1
  125. package/dist/esm/lido-avatar_22.entry.js +199 -73
  126. package/dist/esm/lido-player.js +1 -1
  127. package/dist/esm/loader.js +1 -1
  128. package/dist/esm/{utils-b5eb2360.js → utils-eefe4a1c.js} +236 -102
  129. package/dist/lido-player/index.esm.js +1 -1
  130. package/dist/lido-player/lido-player.esm.js +1 -1
  131. package/dist/lido-player/p-4d9ad047.entry.js +1 -0
  132. package/dist/lido-player/{p-9fd87d44.js → p-589fc3b8.js} +2 -2
  133. package/dist/types/components/canvas/lido-canvas.d.ts +1 -1
  134. package/dist/types/components/container/lido-container.d.ts +1 -0
  135. package/dist/types/components/home/lido-home.d.ts +1 -0
  136. package/dist/types/components/mathMatrix/lido-math-matrix.d.ts +0 -1
  137. package/dist/types/components/trace/lido-trace.d.ts +1 -0
  138. package/dist/types/components.d.ts +0 -6
  139. package/dist/types/stories/Templates/blender/blender.stories.d.ts +4 -0
  140. package/dist/types/utils/utils.d.ts +1 -1
  141. package/dist/types/utils/utilsHandlers/animationHandler.d.ts +1 -0
  142. package/package.json +1 -1
  143. package/dist/lido-player/p-e1a9c26f.entry.js +0 -1
@@ -131,7 +131,7 @@ export class LidoCell {
131
131
  this.el.className = `lido-${parseProp(this.layout, orientation)}`;
132
132
  }
133
133
  render() {
134
- return (h(Host, { key: 'eaf89c6fa3df6df4438063d4e2c2ca59cbf8aa25', id: this.id, class: "lido-cell", value: this.value, type: this.type, "tab-index": this.tabIndex, style: this.style, minDrops: this.minDrops, maxDrops: this.maxDrops, "aria-label": this.ariaLabel, "aria-hidden": this.ariaHidden, audio: this.audio, onTouch: this.onTouch, onCorrect: this.onCorrect, onInCorrect: this.onInCorrect, onEntry: this.onEntry, "flex-direction": this.flexDirection, "disable-speak": this.disableSpeak }, h("slot", { key: '9efb1d5e7de65783cab4de3e5479260c85ffc3b1' })));
134
+ return (h(Host, { key: '0f7d35324da319917dec546cbb1f25065897bb02', id: this.id, class: "lido-cell", value: this.value, type: this.type, "tab-index": this.tabIndex, style: this.style, minDrops: this.minDrops, maxDrops: this.maxDrops, "aria-label": this.ariaLabel, "aria-hidden": this.ariaHidden, audio: this.audio, onTouch: this.onTouch, onCorrect: this.onCorrect, onInCorrect: this.onInCorrect, onEntry: this.onEntry, "flex-direction": this.flexDirection, "disable-speak": this.disableSpeak }, h("slot", { key: '2a337b5fae7641bbe78c5f1aa1c96e12c1281f4a' })));
135
135
  }
136
136
  static get is() { return "lido-cell"; }
137
137
  static get originalStyleUrls() {
@@ -84,7 +84,7 @@ export class LidoCol {
84
84
  };
85
85
  }
86
86
  render() {
87
- return (h(Host, { key: 'fe37cc1654101a3d347e2cef52872467ae078139', id: this.id, class: "lido-col", type: this.type, "tab-index": this.tabIndex, value: this.value, style: this.style, minDrops: this.minDrops, maxDrops: this.maxDrops, "aria-label": this.ariaLabel, "aria-hidden": this.ariaHidden, audio: this.audio, onTouch: this.onTouch, onCorrect: this.onCorrect, onInCorrect: this.onInCorrect, onEntry: this.onEntry }, h("slot", { key: 'b27f20f62c30398c343d7aa472a0a211af5eed0e' })));
87
+ return (h(Host, { key: '7845d3364dd13cb42959f67610254ee892119c39', id: this.id, class: "lido-col", type: this.type, "tab-index": this.tabIndex, value: this.value, style: this.style, minDrops: this.minDrops, maxDrops: this.maxDrops, "aria-label": this.ariaLabel, "aria-hidden": this.ariaHidden, audio: this.audio, onTouch: this.onTouch, onCorrect: this.onCorrect, onInCorrect: this.onInCorrect, onEntry: this.onEntry }, h("slot", { key: '09a68a30534c5ea83d7166acd720b4b8f23f494e' })));
88
88
  }
89
89
  static get is() { return "lido-col"; }
90
90
  static get originalStyleUrls() {
@@ -98,13 +98,34 @@ export class LidoContainer {
98
98
  * @param container The container element to be scaled.
99
99
  */
100
100
  scaleContainer(container) {
101
+ // Calculate the scale factor based on the closest parent element's width and height (1600x900 reference)
102
+ const parentElement = this.getClosestParentWithWidth();
103
+ let scaleFactor = 0;
104
+ if (parentElement) {
105
+ const parentWidth = parentElement.clientWidth;
106
+ const parentHeight = parentElement.clientHeight;
107
+ const scaleX = parentWidth / 1600;
108
+ const scaleY = parentHeight / 900;
109
+ scaleFactor = Math.min(scaleX, scaleY);
110
+ }
101
111
  // Center the container and apply scaling
102
- container.style.transform = `translate(-50%, -50%) scale(${calculateScale()})`;
112
+ container.style.transform = `translate(-50%, -50%) scale(${scaleFactor != 0 ? scaleFactor : calculateScale()})`;
103
113
  container.style.left = '50%';
104
114
  container.style.top = '50%';
105
115
  container.style.position = 'absolute'; // Ensure proper positioning
106
116
  this.screenOrientation();
107
117
  }
118
+ // Find and return the nearest parent element that has a measurable (non-zero) width
119
+ getClosestParentWithWidth() {
120
+ let parent = this.el.parentElement;
121
+ while (parent) {
122
+ if (parent.offsetWidth > 0) {
123
+ return parent;
124
+ }
125
+ parent = parent.parentElement;
126
+ }
127
+ return null;
128
+ }
108
129
  screenOrientation() {
109
130
  if (window.innerHeight > window.innerWidth) {
110
131
  this.el.style.height = '1600px';
@@ -133,6 +154,7 @@ export class LidoContainer {
133
154
  componentDidLoad() {
134
155
  this.scaleContainer(this.el);
135
156
  const backGroundImage = this.bgImage ? convertUrlToRelative(this.bgImage) : '';
157
+ document.body.style.pointerEvents = 'auto';
136
158
  document.body.style.backgroundColor = this.bgColor;
137
159
  document.body.style.backgroundImage = backGroundImage ? `url(${backGroundImage})` : 'none';
138
160
  document.body.style.backgroundPosition = backGroundImage ? `bottom` : 'none';
@@ -166,7 +188,7 @@ export class LidoContainer {
166
188
  userSelect: 'none', // Prevent any field selection
167
189
  };
168
190
  console.log('🚀 ~ LidoContainer ~ canplay:', this.canplay);
169
- return (h(Host, { key: '5d7f2f02c5a231a18897942ea0d2f3a200efa502', id: "lido-container", locale: this.locale, "tab-index": 0, class: "lido-container", objective: this.objective, baseUrl: this.baseUrl, style: style, "aria-label": this.ariaLabel, "aria-hidden": this.ariaHidden, onTouch: this.onTouch, onInCorrect: this.onInCorrect, onCorrect: this.onCorrect, onEntry: this.onEntry, "show-check": `${this.showCheck}`, "is-continue-on-correct": `${this.isContinueOnCorrect}`, "is-allow-only-correct": `${this.isAllowOnlyCorrect}`, canplay: `${this.canplay}`, appendToDropOnCompletion: `${this.appendToDropOnCompletion}`, "show-prev-button": `${this.showPrevButton}`, "show-next-button": `${this.showNextButton}`, "show-drop-border": `${this.showDropBorder}`, "bg-image": this.bgImage, "exit-button-url": this.exitButtonUrl, "prev-button-url": this.prevButtonUrl, "next-button-url": this.nextButtonUrl, "speaker-button-url": this.speakerButtonUrl, "disable-speak": this.disableSpeak }, h("slot", { key: 'b82aff47d621fc4f9d6abe5b7add974853f69219' })));
191
+ return (h(Host, { key: '338ef0be8cc9d052764785ce9314254be7c8a7f8', id: "lido-container", locale: this.locale, "tab-index": 0, class: "lido-container", objective: this.objective, baseUrl: this.baseUrl, style: style, "aria-label": this.ariaLabel, "aria-hidden": this.ariaHidden, onTouch: this.onTouch, onInCorrect: this.onInCorrect, onCorrect: this.onCorrect, onEntry: this.onEntry, "show-check": `${this.showCheck}`, "is-continue-on-correct": `${this.isContinueOnCorrect}`, "is-allow-only-correct": `${this.isAllowOnlyCorrect}`, canplay: `${this.canplay}`, appendToDropOnCompletion: `${this.appendToDropOnCompletion}`, "show-prev-button": `${this.showPrevButton}`, "show-next-button": `${this.showNextButton}`, "show-drop-border": `${this.showDropBorder}`, "bg-image": this.bgImage, "exit-button-url": this.exitButtonUrl, "prev-button-url": this.prevButtonUrl, "next-button-url": this.nextButtonUrl, "speaker-button-url": this.speakerButtonUrl, "disable-speak": this.disableSpeak }, h("slot", { key: '59d66b47f4749a99ece4da48dbaebaf720cb0b2b' })));
170
192
  }
171
193
  static get is() { return "lido-container"; }
172
194
  static get originalStyleUrls() {
@@ -76,7 +76,7 @@ export class LidoFlash {
76
76
  }
77
77
  /* ---------- Render ---------- */
78
78
  render() {
79
- return (h(Host, { key: '0db825b0f188f46db6699e3d470296d7302a72fc', value: this.value, "tab-index": this.tabIndex, style: this.style, "aria-label": this.ariaLabel, "aria-hidden": this.ariaHidden, audio: this.audio, onTouch: this.onTouch, onCorrect: this.onCorrect, onInCorrect: this.onInCorrect, onEntry: this.onEntry, type: this.type, onClick: this.handleFlip, "disable-speak": this.disableSpeak }, h("div", { key: '78432618dca6729d9a5fa75f9ee162178ec6b8e2', class: `card ${this.flipped ? 'flipped' : ''}` }, h("div", { key: 'c06cab1f3d256a2fcfd44fbeb9e04c47bbe6ba63', class: "card-face card-front" }, this.front != null ? this.front : h("slot", { name: "front" })), h("div", { key: '804ffc2d68292dc9dcb800bcc49a0698092cea43', class: "card-face card-back" }, this.back != null ? this.back : h("slot", { name: "back" })))));
79
+ return (h(Host, { key: 'b8f000d4e9d04d9954f81dc7e05b109dc16cb223', value: this.value, "tab-index": this.tabIndex, style: this.style, "aria-label": this.ariaLabel, "aria-hidden": this.ariaHidden, audio: this.audio, onTouch: this.onTouch, onCorrect: this.onCorrect, onInCorrect: this.onInCorrect, onEntry: this.onEntry, type: this.type, onClick: this.handleFlip, "disable-speak": this.disableSpeak }, h("div", { key: 'cea63b67d1b6a925ab0520eaa7c5166288bcd71e', class: `card ${this.flipped ? 'flipped' : ''}` }, h("div", { key: '3517e09bb91ac4c6fb2c066539f2d4f51436938f', class: "card-face card-front" }, this.front != null ? this.front : h("slot", { name: "front" })), h("div", { key: '5a14a4ab70898852046f1128c99e5a285c1c37f7', class: "card-face card-back" }, this.back != null ? this.back : h("slot", { name: "back" })))));
80
80
  }
81
81
  static get is() { return "lido-flash-card"; }
82
82
  static get originalStyleUrls() {
@@ -276,4 +276,8 @@
276
276
  width: 100%;
277
277
  height: auto;
278
278
  visibility: visible;
279
+ }
280
+
281
+ .parent_dots{
282
+ pointer-events: none;
279
283
  }
@@ -1,7 +1,7 @@
1
1
  import { h, Host } from "@stencil/core";
2
- import { NextContainerKey, PrevContainerKey, LidoContainer, exitUrl, prevUrl, nextUrl, speakUrl, ActivityScoreKey, } from "../../utils/constants";
2
+ import { SelectedValuesKey, NextContainerKey, PrevContainerKey, LidoContainer, exitUrl, prevUrl, nextUrl, speakUrl, ActivityScoreKey, } from "../../utils/constants";
3
3
  import { dispatchActivityChangeEvent, dispatchGameCompletedEvent, dispatchGameExitEvent } from "../../utils/customEvents";
4
- import { calculateScale, getCancelBtnPopup, setCancelBtnPopup, executeActions, triggerPrevcontainer, convertUrlToRelative } from "../../utils/utils";
4
+ import { calculateScale, getCancelBtnPopup, setCancelBtnPopup, executeActions, triggerPrevcontainer, convertUrlToRelative, triggerNextContainer, matchStringPattern } from "../../utils/utils";
5
5
  import { AudioPlayer } from "../../utils/audioPlayer";
6
6
  import { generateUUIDFallback } from "../../utils/utils";
7
7
  import i18next from "../../utils/i18n";
@@ -88,7 +88,6 @@ export class LidoHome {
88
88
  rightbtn.style.visibility = 'hidden';
89
89
  }
90
90
  else {
91
- rightbtn.style.pointerEvents = 'auto';
92
91
  rightbtn.style.visibility = 'visible';
93
92
  }
94
93
  }, 100);
@@ -299,6 +298,9 @@ export class LidoHome {
299
298
  if (tagName === 'lido-text' && props.string) {
300
299
  props.string = i18next.t(props.string);
301
300
  }
301
+ if (tagName === 'lido-text' && props.string) {
302
+ props.string = i18next.t(props.string);
303
+ }
302
304
  // Map XML tags to Stencil components
303
305
  const componentMapping = {
304
306
  'lido-container': (h("lido-container", Object.assign({}, props, { canplay: this.canplay, baseUrl: this.baseUrl, height: this.height }), children)),
@@ -348,6 +350,16 @@ export class LidoHome {
348
350
  this.containers = containers;
349
351
  console.log("container :::", containers);
350
352
  }
353
+ areAllDropsFilled() {
354
+ const drops = Array.from(document.querySelectorAll('[type="drop"]'));
355
+ const drags = Array.from(document.querySelectorAll('[type="drag"]')).filter(drag => drag.getAttribute('drop-to'));
356
+ console.log('drops', drops);
357
+ console.log('drags', drags);
358
+ return drops.every(drop => {
359
+ const dropId = drop.id;
360
+ return drags.some(drag => drag.getAttribute('drop-to') === dropId);
361
+ });
362
+ }
351
363
  async btnpopup() {
352
364
  setCancelBtnPopup(false);
353
365
  await AudioPlayer.getI().stop();
@@ -367,6 +379,18 @@ export class LidoHome {
367
379
  await new Promise(resolve => setTimeout(resolve, 300));
368
380
  }
369
381
  }
382
+ if (this.areAllDropsFilled()) {
383
+ const objectiveString = container['objective'];
384
+ const objectiveArray = JSON.parse(localStorage.getItem(SelectedValuesKey) || '[]');
385
+ const res = matchStringPattern(objectiveString, objectiveArray);
386
+ console.log('Resultt', res);
387
+ if (res) {
388
+ triggerNextContainer();
389
+ }
390
+ }
391
+ else {
392
+ console.log('Not yet filled ');
393
+ }
370
394
  }
371
395
  scaleNavbarContainer() {
372
396
  setTimeout(() => {
@@ -185,7 +185,7 @@ export class LidoMathMatrix {
185
185
  render() {
186
186
  let slotNumber = 1;
187
187
  const slotData = this.getSlotData();
188
- return (h(Host, { key: '23ae408830e71329f11ee18e3aa3700e7a86e969', class: "math-matrix", style: {
188
+ return (h(Host, { key: '8232965fc3fb0b298233d21d7f50412508dc2256', class: "math-matrix", style: {
189
189
  height: this.style.height,
190
190
  width: this.style.width,
191
191
  z: this.style.z,
@@ -252,7 +252,7 @@ export class LidoMathMatrix {
252
252
  },
253
253
  "defualtFill": {
254
254
  "type": "number",
255
- "mutable": false,
255
+ "mutable": true,
256
256
  "complexType": {
257
257
  "original": "number",
258
258
  "resolved": "number",
@@ -265,7 +265,7 @@ export class LidoMathMatrix {
265
265
  "text": "Number of slots to pre-fill as active by default"
266
266
  },
267
267
  "attribute": "defualt-fill",
268
- "reflect": false,
268
+ "reflect": true,
269
269
  "defaultValue": "0"
270
270
  },
271
271
  "leftIndex": {
@@ -377,7 +377,7 @@ export class LidoMathMatrix {
377
377
  },
378
378
  "activeBgColor": {
379
379
  "type": "string",
380
- "mutable": false,
380
+ "mutable": true,
381
381
  "complexType": {
382
382
  "original": "string",
383
383
  "resolved": "string",
@@ -390,12 +390,12 @@ export class LidoMathMatrix {
390
390
  "text": "Background color for active slots"
391
391
  },
392
392
  "attribute": "active-bg-color",
393
- "reflect": false,
393
+ "reflect": true,
394
394
  "defaultValue": "'transparent'"
395
395
  },
396
396
  "deactiveBgColor": {
397
397
  "type": "string",
398
- "mutable": false,
398
+ "mutable": true,
399
399
  "complexType": {
400
400
  "original": "string",
401
401
  "resolved": "string",
@@ -405,15 +405,15 @@ export class LidoMathMatrix {
405
405
  "optional": false,
406
406
  "docs": {
407
407
  "tags": [],
408
- "text": "Background color for inactive slots"
408
+ "text": ""
409
409
  },
410
410
  "attribute": "deactive-bg-color",
411
- "reflect": false,
411
+ "reflect": true,
412
412
  "defaultValue": "'transparent'"
413
413
  },
414
414
  "border": {
415
415
  "type": "string",
416
- "mutable": false,
416
+ "mutable": true,
417
417
  "complexType": {
418
418
  "original": "string",
419
419
  "resolved": "string",
@@ -426,12 +426,12 @@ export class LidoMathMatrix {
426
426
  "text": "Border style applied to each slot"
427
427
  },
428
428
  "attribute": "border",
429
- "reflect": false,
429
+ "reflect": true,
430
430
  "defaultValue": "'2px solid green'"
431
431
  },
432
432
  "height": {
433
433
  "type": "string",
434
- "mutable": false,
434
+ "mutable": true,
435
435
  "complexType": {
436
436
  "original": "string",
437
437
  "resolved": "string",
@@ -444,12 +444,12 @@ export class LidoMathMatrix {
444
444
  "text": "Height of the slot container"
445
445
  },
446
446
  "attribute": "height",
447
- "reflect": false,
447
+ "reflect": true,
448
448
  "defaultValue": "'100%'"
449
449
  },
450
450
  "width": {
451
451
  "type": "string",
452
- "mutable": false,
452
+ "mutable": true,
453
453
  "complexType": {
454
454
  "original": "string",
455
455
  "resolved": "string",
@@ -462,7 +462,7 @@ export class LidoMathMatrix {
462
462
  "text": "Width of the slot container"
463
463
  },
464
464
  "attribute": "width",
465
- "reflect": false,
465
+ "reflect": true,
466
466
  "defaultValue": "'100%'"
467
467
  },
468
468
  "borderRadius": {
@@ -66,7 +66,7 @@ export class LidoPos {
66
66
  };
67
67
  }
68
68
  render() {
69
- return (h(Host, { key: 'd456c09ab61fd1674f001f939f2b27a089806f44', id: this.id, class: "lido-pos", type: this.type, "tab-index": this.tabIndex, style: this.style, "aria-label": this.ariaLabel, "aria-hidden": this.ariaHidden, minDrops: this.minDrops, maxDrops: this.maxDrops, value: this.value, audio: this.audio, onTouch: this.onTouch, onCorrect: this.onCorrect, onInCorrect: this.onInCorrect, onEntry: this.onEntry }, h("slot", { key: 'ca5a14fcc51d2b6a1756772b358e4654d8aee761' })));
69
+ return (h(Host, { key: '0eea8147ee3845668e83bed01164dce740aae785', id: this.id, class: "lido-pos", type: this.type, "tab-index": this.tabIndex, style: this.style, "aria-label": this.ariaLabel, "aria-hidden": this.ariaHidden, minDrops: this.minDrops, maxDrops: this.maxDrops, value: this.value, audio: this.audio, onTouch: this.onTouch, onCorrect: this.onCorrect, onInCorrect: this.onInCorrect, onEntry: this.onEntry }, h("slot", { key: 'ca9378dc185eeb4d495ab3045d6b17424de908dc' })));
70
70
  }
71
71
  static get is() { return "lido-pos"; }
72
72
  static get originalStyleUrls() {
@@ -78,7 +78,7 @@ export class LidoRandom {
78
78
  backgroundColor: this.bgColor,
79
79
  margin: this.margin,
80
80
  };
81
- return (h(Host, { key: 'a85f168b0399fe5745439ad9d16d77965d1f7a39', class: "lido-random", type: this.type, "tab-index": this.tabIndex, value: this.value, style: style, "aria-label": this.ariaLabel, "aria-hidden": this.ariaHidden, audio: this.audio, onTouch: this.onTouch, onCorrect: this.onCorrect, minDrops: this.minDrops, maxDrops: this.maxDrops, onInCorrect: this.onInCorrect, onEntry: this.onEntry }, h("slot", { key: '69dd6da05d9855b18ba475cee27e523c4c2e6291' })));
81
+ return (h(Host, { key: 'cc8bb9d31ff6c36201d266f5579288c92c05bf82', class: "lido-random", type: this.type, "tab-index": this.tabIndex, value: this.value, style: style, "aria-label": this.ariaLabel, "aria-hidden": this.ariaHidden, audio: this.audio, onTouch: this.onTouch, onCorrect: this.onCorrect, minDrops: this.minDrops, maxDrops: this.maxDrops, onInCorrect: this.onInCorrect, onEntry: this.onEntry }, h("slot", { key: 'd91a2403fa78320cbae40456dc0c86b44493bb5a' })));
82
82
  }
83
83
  static get is() { return "lido-random"; }
84
84
  static get originalStyleUrls() {
@@ -78,7 +78,7 @@ export class LidoRow {
78
78
  };
79
79
  }
80
80
  render() {
81
- return (h(Host, { key: '0c2548741cde2b82c2add3e1a60cbd68905ffede', class: "lido-row", type: this.type, "tab-index": this.tabIndex, value: this.value, style: this.style, "aria-label": this.ariaLabel, "aria-hidden": this.ariaHidden, minDrops: this.minDrops, maxDrops: this.maxDrops, audio: this.audio, onTouch: this.onTouch, onCorrect: this.onCorrect, onInCorrect: this.onInCorrect, onEntry: this.onEntry, "disable-speak": this.disableSpeak }, h("slot", { key: 'bc2c6f95f984e82bdb905f850d4ad23c11183697' })));
81
+ return (h(Host, { key: '2d2f701dda922276d2485e91f15c8912c90d7b8d', class: "lido-row", type: this.type, "tab-index": this.tabIndex, value: this.value, style: this.style, "aria-label": this.ariaLabel, "aria-hidden": this.ariaHidden, minDrops: this.minDrops, maxDrops: this.maxDrops, audio: this.audio, onTouch: this.onTouch, onCorrect: this.onCorrect, onInCorrect: this.onInCorrect, onEntry: this.onEntry, "disable-speak": this.disableSpeak }, h("slot", { key: 'b00002ecc9d5de422094beffc33ae5137b958fa3' })));
82
82
  }
83
83
  static get is() { return "lido-row"; }
84
84
  static get originalStyleUrls() {
@@ -54,7 +54,7 @@ export class LidoShape {
54
54
  backgroundColor: this.shapeType !== 'polygon' ? this.bgColor : 'transparent', // Apply background only if not a polygon
55
55
  margin: this.margin,
56
56
  };
57
- return (h(Host, { key: 'de698fc2f34f63c9bbdf1e308772cf47ebc80d9c', class: `lido-shape ${this.shapeType}`, value: this.value, type: this.type, "tab-index": this.tabIndex, style: style, "aria-label": this.ariaLabel, "aria-hidden": this.ariaHidden, audio: this.audio, minDrops: this.minDrops, maxDrops: this.maxDrops, onTouch: this.onTouch, onCorrect: this.onCorrect, onInCorrect: this.onInCorrect, onEntry: this.onEntry, "disable-speak": this.disableSpeak }));
57
+ return (h(Host, { key: '7a626d9f00854cf190c08524153086d0e9f139af', class: `lido-shape ${this.shapeType}`, value: this.value, type: this.type, "tab-index": this.tabIndex, style: style, "aria-label": this.ariaLabel, "aria-hidden": this.ariaHidden, audio: this.audio, minDrops: this.minDrops, maxDrops: this.maxDrops, onTouch: this.onTouch, onCorrect: this.onCorrect, onInCorrect: this.onInCorrect, onEntry: this.onEntry, "disable-speak": this.disableSpeak }));
58
58
  }
59
59
  static get is() { return "lido-shape"; }
60
60
  static get originalStyleUrls() {
@@ -33,6 +33,7 @@ export class LidoTrace {
33
33
  this.fileIndex = -1;
34
34
  this.isDragging = false;
35
35
  this.activePointerId = null;
36
+ this.freeTraceUpdateCounter = 0;
36
37
  this.idleTimer = null;
37
38
  this.fingerImg = null;
38
39
  }
@@ -49,8 +50,8 @@ export class LidoTrace {
49
50
  circle: null,
50
51
  paths: [],
51
52
  svg: null,
52
- proximityThreshold: 100, // General proximity threshold
53
- freeTraceProximityThreshold: 50, // Reduced proximity threshold for free trace
53
+ proximityThreshold: 375, // Increased general proximity threshold (was 100)
54
+ freeTraceProximityThreshold: 350, // Increased proximity for free trace (was 50)
54
55
  rafId: null,
55
56
  pointerMoveEvent: null,
56
57
  activePointerId: null,
@@ -386,7 +387,7 @@ export class LidoTrace {
386
387
  }
387
388
  // Modified handlePointerMove function
388
389
  handlePointerMove(state) {
389
- var _a, _b, _c, _d;
390
+ var _a, _b, _c, _d, _e, _f;
390
391
  if (!state.isDragging)
391
392
  return;
392
393
  if (!state.circle || !state.paths || state.paths.length === 0)
@@ -398,6 +399,15 @@ export class LidoTrace {
398
399
  x: parseFloat(state.circle.getAttribute('cx')),
399
400
  y: parseFloat(state.circle.getAttribute('cy')),
400
401
  };
402
+ // Only update if pointer moved a minimum distance (to reduce unnecessary updates)
403
+ const MOVE_THRESHOLD = 1; // px
404
+ if (state.lastPointerPos) {
405
+ const dx = pointerPos.x - state.lastPointerPos.x;
406
+ const dy = pointerPos.y - state.lastPointerPos.y;
407
+ if (dx * dx + dy * dy < MOVE_THRESHOLD * MOVE_THRESHOLD) {
408
+ return;
409
+ }
410
+ }
401
411
  const currentPath = state.paths[state.currentPathIndex];
402
412
  if (!currentPath) {
403
413
  console.error('No valid path found at the current index');
@@ -425,48 +435,76 @@ export class LidoTrace {
425
435
  }
426
436
  // For free trace mode and blind free trace mode, allow free drawing only if within the reduced proximity threshold
427
437
  if (state.mode === TraceMode.FreeTrace || state.mode === TraceMode.BlindFreeTrace) {
438
+ // Throttle: Only update every 2nd event (for reducing excessive dom updates)
439
+ this.freeTraceUpdateCounter = (this.freeTraceUpdateCounter || 0) + 1;
440
+ if (this.freeTraceUpdateCounter % 2 !== 0) {
441
+ return;
442
+ }
428
443
  // Initialize the currentFreePath array if it's not created
429
444
  if (!state.currentFreePath) {
430
445
  state.currentFreePath = [];
431
446
  }
432
- // Create a new path element if it's the first trace for the current path index
447
+ // Create a new polyline element if it's the first trace for the current path index
433
448
  if (!state.currentFreePath[state.currentPathIndex]) {
434
- const newPath = document.createElementNS('http://www.w3.org/2000/svg', 'path');
435
- // newPath.setAttribute('stroke', 'green');
449
+ const newPolyline = document.createElementNS('http://www.w3.org/2000/svg', 'polyline');
436
450
  const strokeWidth = state.paths[state.currentPathIndex].style['stroke-width'] || state.paths[state.currentPathIndex].getAttribute('stroke-width');
437
- newPath.setAttribute('stroke-width', strokeWidth);
438
- newPath.setAttribute('fill', 'none');
439
- newPath.setAttribute('stroke-linecap', 'round');
440
- newPath.setAttribute('stroke', 'lightgreen');
441
- // Start the new path at the current pointer position
442
- newPath.setAttribute('d', `M${pointerPos.x},${pointerPos.y}`);
443
- (_a = state.svg) === null || _a === void 0 ? void 0 : _a.appendChild(newPath);
444
- state.currentFreePath[state.currentPathIndex] = newPath;
451
+ newPolyline.setAttribute('stroke-width', strokeWidth);
452
+ newPolyline.setAttribute('fill', 'none');
453
+ newPolyline.setAttribute('stroke-linecap', 'round');
454
+ newPolyline.setAttribute('stroke', 'lightgreen');
455
+ newPolyline.setAttribute('points', `${pointerPos.x},${pointerPos.y}`);
456
+ (_a = state.svg) === null || _a === void 0 ? void 0 : _a.appendChild(newPolyline);
457
+ state.currentFreePath[state.currentPathIndex] = newPolyline;
458
+ // Store points array for this polyline
459
+ state.currentFreePolylinePoints = state.currentFreePolylinePoints || [];
460
+ state.currentFreePolylinePoints[state.currentPathIndex] = [
461
+ { x: pointerPos.x, y: pointerPos.y }
462
+ ];
445
463
  // Reset lastPointerPos for the new path
446
464
  state.lastPointerPos = pointerPos;
465
+ // Add a points counter to limit path growth
466
+ state.freeTracePointsCount = 1;
447
467
  }
448
- // Get the previous position to draw a smooth curve
449
- const previousPos = state.lastPointerPos || pointerPos;
450
- // Create a quadratic curve from the previous point to the current point
451
- const newPathData = state.currentFreePath[state.currentPathIndex].getAttribute('d');
452
- const midPointX = (previousPos.x + pointerPos.x) / 2;
453
- const midPointY = (previousPos.y + pointerPos.y) / 2;
454
- const updatedPathData = `${newPathData} Q ${previousPos.x},${previousPos.y} ${midPointX},${midPointY}`;
455
- // Update the path's 'd' attribute with the new curve
456
- state.currentFreePath[state.currentPathIndex].setAttribute('d', updatedPathData);
468
+ // Limit the number of points in the free trace path for performance
469
+ const MAX_FREE_TRACE_POINTS = 10;
470
+ state.freeTracePointsCount = (state.freeTracePointsCount || 1) + 1;
471
+ if (state.freeTracePointsCount > MAX_FREE_TRACE_POINTS) {
472
+ // If limit reached, skip adding more points
473
+ return;
474
+ }
475
+ // Add the new point to the polyline's points array
476
+ state.currentFreePolylinePoints = state.currentFreePolylinePoints || [];
477
+ let pointsArr = state.currentFreePolylinePoints[state.currentPathIndex] || [];
478
+ pointsArr.push({ x: pointerPos.x, y: pointerPos.y });
479
+ state.currentFreePolylinePoints[state.currentPathIndex] = pointsArr;
480
+ // Update the polyline's points attribute
481
+ const pointsStr = pointsArr.map(pt => `${pt.x},${pt.y}`).join(' ');
482
+ state.currentFreePath[state.currentPathIndex].setAttribute('points', pointsStr);
457
483
  // Move the draggable circle with the freehand trace
458
484
  state.circle.setAttribute('cx', pointerPos.x.toString());
459
485
  state.circle.setAttribute('cy', pointerPos.y.toString());
460
- // Make sure the red dot (circle) is always on top
461
- (_b = state.svg) === null || _b === void 0 ? void 0 : _b.appendChild(state.circle); // This moves the circle to the last child, making it the topmost
486
+ // Only re-append if not already children list
487
+ const childNodes = (_b = state.svg) === null || _b === void 0 ? void 0 : _b.childNodes;
488
+ let circleFound = false;
489
+ for (let i = 0; i < ((childNodes === null || childNodes === void 0 ? void 0 : childNodes.length) || 0); i++) {
490
+ const child = childNodes === null || childNodes === void 0 ? void 0 : childNodes.item(i);
491
+ if (child && child.tagName === 'circle') {
492
+ circleFound = true;
493
+ break; // No need to continue once found
494
+ }
495
+ }
496
+ // If not found, append the circle
497
+ if (!circleFound && state.circle) {
498
+ (_c = state.svg) === null || _c === void 0 ? void 0 : _c.appendChild(state.circle);
499
+ }
462
500
  // Update the last pointer position
463
501
  state.lastPointerPos = pointerPos;
464
- const currentPathLength = currentPath.getTotalLength();
465
- const distanceToEnd = currentPathLength - closestPoint.length;
466
- // If close to the end of the path, move to the next path
467
- if (distanceToEnd < 5) {
502
+ // For polyline, estimate the end by number of points (not path length)
503
+ if (pointsArr.length >= MAX_FREE_TRACE_POINTS) {
468
504
  this.moveToNextPath(state);
469
505
  state.currentFreePath[state.currentPathIndex] = null; // Reset free path for next path
506
+ state.currentFreePolylinePoints[state.currentPathIndex] = [];
507
+ state.freeTracePointsCount = 0;
470
508
  }
471
509
  // this.resetIdleTimer(state); // ← keep timer alive
472
510
  return; // Exit early since we're in free trace or blind free trace mode
@@ -474,24 +512,57 @@ export class LidoTrace {
474
512
  // In normal modes, allow movement and drawing only within the general proximity threshold
475
513
  if (state.isDragging && closestPoint.length >= state.lastLength) {
476
514
  state.lastLength = closestPoint.length;
477
- state.circle.setAttribute('cx', closestPoint.x.toString());
478
- state.circle.setAttribute('cy', closestPoint.y.toString());
479
- // Make sure the red dot (circle) is always on top
480
- (_c = state.svg) === null || _c === void 0 ? void 0 : _c.appendChild(state.circle); // This moves the circle to the last child, making it the topmost
481
- (_d = currentPath.greenPath) === null || _d === void 0 ? void 0 : _d.setAttribute('stroke-dashoffset', (state.totalPathLength - state.lastLength).toString());
482
- }
483
- // Check if the current path is completed
484
- if (state.totalPathLength - 1 - state.lastLength < 5 && state.currentPathIndex < state.paths.length - 1) {
485
- this.moveToNextPath(state);
486
- }
487
- else if (state.totalPathLength - 1 - state.lastLength < 5 && state.currentPathIndex === state.paths.length - 1) {
488
- // this.loadAnotherSVG(state, true);
489
- this.moveToNextContainer();
515
+ // Only update the circle if it moved enough
516
+ if (Math.abs(closestPoint.x - circlePos.x) > MOVE_THRESHOLD || Math.abs(closestPoint.y - circlePos.y) > MOVE_THRESHOLD) {
517
+ state.circle.setAttribute('cx', closestPoint.x.toString());
518
+ state.circle.setAttribute('cy', closestPoint.y.toString());
519
+ }
520
+ // Only re-append if not already children list
521
+ const childNodes = (_d = state.svg) === null || _d === void 0 ? void 0 : _d.childNodes;
522
+ let circleFound = false;
523
+ for (let i = 0; i < ((childNodes === null || childNodes === void 0 ? void 0 : childNodes.length) || 0); i++) {
524
+ const child = childNodes === null || childNodes === void 0 ? void 0 : childNodes.item(i);
525
+ if (child && child.tagName === 'circle') {
526
+ circleFound = true;
527
+ break; // No need to continue once found
528
+ }
529
+ }
530
+ // If not found, append the circle
531
+ if (!circleFound && state.circle) {
532
+ (_e = state.svg) === null || _e === void 0 ? void 0 : _e.appendChild(state.circle);
533
+ }
534
+ (_f = currentPath.greenPath) === null || _f === void 0 ? void 0 : _f.setAttribute('stroke-dashoffset', (state.totalPathLength - state.lastLength).toString());
535
+ // Completion logic for closed paths: only allow completion if almost all points are traced
536
+ const COMPLETION_THRESHOLD = 0.90; // 90% of the path must be traced
537
+ let percentComplete = state.lastLength / state.totalPathLength;
538
+ let startPoint = currentPath.getPointAtLength(0);
539
+ let endPoint = currentPath.getPointAtLength(currentPath.getTotalLength());
540
+ let pathIsClosed = this.getDistanceSquared(startPoint, endPoint) < 200; // threshold for overlap
541
+ if (pathIsClosed && state.totalPathLength > 50) {
542
+ if (percentComplete >= COMPLETION_THRESHOLD) {
543
+ if (state.currentPathIndex < state.paths.length - 1) {
544
+ this.moveToNextPath(state);
545
+ }
546
+ else if (state.currentPathIndex === state.paths.length - 1) {
547
+ this.moveToNextContainer();
548
+ }
549
+ }
550
+ }
551
+ else {
552
+ // For open paths, allow completion if near the end
553
+ if (state.totalPathLength - 1 - state.lastLength < 5 && state.currentPathIndex < state.paths.length - 1) {
554
+ this.moveToNextPath(state);
555
+ }
556
+ else if (state.totalPathLength - 1 - state.lastLength < 5 && state.currentPathIndex === state.paths.length - 1) {
557
+ this.moveToNextContainer();
558
+ }
559
+ }
490
560
  }
491
561
  // this.resetIdleTimer(state); // ← keep timer alive
492
562
  }
493
563
  // Move to the next container after completing the current SVG
494
564
  async moveToNextContainer() {
565
+ this.isDragging = false;
495
566
  if (this.moving)
496
567
  return; // Prevent multiple calls
497
568
  this.moving = true; // Set moving to true to prevent re-entrance
@@ -510,9 +581,12 @@ export class LidoTrace {
510
581
  this.moving = false;
511
582
  return;
512
583
  }
584
+ console.log('onCorrect:', this.onCorrect);
585
+ console.log('el :', this.el);
513
586
  if (this.el && this.onCorrect) {
514
587
  await executeActions(this.onCorrect, this.el);
515
588
  }
589
+ console.log('All SVGs completed, hiding component.');
516
590
  triggerNextContainer();
517
591
  }
518
592
  // Get the pointer position relative to the SVG
@@ -530,13 +604,13 @@ export class LidoTrace {
530
604
  const dy = p1.y - p2.y;
531
605
  return dx * dx + dy * dy;
532
606
  }
533
- // Find the closest point on the given path to the specified point using two-pass sampling
607
+ // Find the closest point on the given path to the specified point using two-pass sampling (optimized)
534
608
  getClosestPointOnPath(pathNode, point) {
535
609
  const pathLength = pathNode.getTotalLength();
536
610
  let closestPoint = { x: 0, y: 0, length: 0 };
537
611
  let minDistanceSquared = Infinity;
538
- // First pass: coarse sampling
539
- const coarseStep = 20; // Increased step for better performance
612
+ // Optimized: Increase coarse steps for better performance
613
+ const coarseStep = 40; // was 20
540
614
  let coarseClosestPoint = { x: 0, y: 0, length: 0 };
541
615
  let coarseMinDistanceSquared = Infinity;
542
616
  for (let i = 0; i <= pathLength; i += coarseStep) {
@@ -552,7 +626,7 @@ export class LidoTrace {
552
626
  }
553
627
  }
554
628
  // Second pass: fine sampling around coarseClosestPoint
555
- const fineStep = 2; // Increased step to reduce computations
629
+ const fineStep = 6; // was 2
556
630
  const searchStart = Math.max(coarseClosestPoint.length - coarseStep, 0);
557
631
  const searchEnd = Math.min(coarseClosestPoint.length + coarseStep, pathLength);
558
632
  for (let i = searchStart; i <= searchEnd; i += fineStep) {
@@ -712,7 +786,7 @@ export class LidoTrace {
712
786
  };
713
787
  }
714
788
  render() {
715
- return (h(Host, { key: 'b562e07d98a06f422ce5b8ca1d08f9c4307a313c', class: "lido-trace", id: this.id, audio: this.audio, onCorrect: this.onCorrect, onInCorrect: this.onInCorrect, style: this.style, "aria-label": this.ariaLabel, "aria-hidden": this.ariaHidden, tabindex: this.tabIndex, "disable-speak": this.disableSpeak }, h("div", { key: 'fc2cb8355a26e5b483c24c59641bd20fa37e853b', style: this.style, id: "lido-svgContainer" })));
789
+ return (h(Host, { key: '3f12119394502b6750874aaa50f43bf42e9f63cc', class: "lido-trace", id: this.id, audio: this.audio, onCorrect: this.onCorrect, onInCorrect: this.onInCorrect, style: this.style, "aria-label": this.ariaLabel, "aria-hidden": this.ariaHidden, tabindex: this.tabIndex, "disable-speak": this.disableSpeak }, h("div", { key: '4fddd90d12251c4020006690f8c769ab452c8f6a', style: this.style, id: "lido-svgContainer" })));
716
790
  }
717
791
  static get is() { return "lido-trace"; }
718
792
  static get originalStyleUrls() {
@@ -1116,6 +1190,7 @@ export class LidoTrace {
1116
1190
  "fileIndex": {},
1117
1191
  "isDragging": {},
1118
1192
  "activePointerId": {},
1193
+ "freeTraceUpdateCounter": {},
1119
1194
  "idleTimer": {},
1120
1195
  "fingerImg": {}
1121
1196
  };
@@ -80,7 +80,7 @@ export class LidoWrap {
80
80
  };
81
81
  }
82
82
  render() {
83
- return (h(Host, { key: '12959a9a9c3b2df63ab977c39dceca4f1c771bf6', class: "lido-wrap", value: this.value, type: this.type, "tab-index": this.tabIndex, style: this.style, "aria-label": this.ariaLabel, "aria-hidden": this.ariaHidden, audio: this.audio, minDrops: this.minDrops, maxDrops: this.maxDrops, onTouch: this.onTouch, onCorrect: this.onCorrect, onInCorrect: this.onInCorrect, onEntry: this.onEntry, disableSpeak: this.disableSpeak }, h("slot", { key: 'f19b29798a33592a1e5e15851f7f18266dbe35aa' })));
83
+ return (h(Host, { key: '50bc5770105477d0ef7cb080957c8d00198c8b09', class: "lido-wrap", value: this.value, type: this.type, "tab-index": this.tabIndex, style: this.style, "aria-label": this.ariaLabel, "aria-hidden": this.ariaHidden, audio: this.audio, minDrops: this.minDrops, maxDrops: this.maxDrops, onTouch: this.onTouch, onCorrect: this.onCorrect, onInCorrect: this.onInCorrect, onEntry: this.onEntry, disableSpeak: this.disableSpeak }, h("slot", { key: 'fcd1f5801e34171d1925e39f6c543f229a5d42bd' })));
84
84
  }
85
85
  static get is() { return "lido-wrap"; }
86
86
  static get originalStyleUrls() {