@xplor-education/core-stencil-components 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (724) hide show
  1. package/LICENSE +21 -0
  2. package/components/index.d.ts +33 -0
  3. package/components/index.js +2324 -0
  4. package/components/index.js.map +1 -0
  5. package/components/p-B1W2qj2l.js +50 -0
  6. package/components/p-B1W2qj2l.js.map +1 -0
  7. package/components/p-BK_ATKuB.js +37 -0
  8. package/components/p-BK_ATKuB.js.map +1 -0
  9. package/components/p-CBSi5kQB.js +56 -0
  10. package/components/p-CBSi5kQB.js.map +1 -0
  11. package/components/p-CTD6SyTD.js +181 -0
  12. package/components/p-CTD6SyTD.js.map +1 -0
  13. package/components/p-Ddr35stE.js +117 -0
  14. package/components/p-Ddr35stE.js.map +1 -0
  15. package/components/p-x30CgLRv.js +184 -0
  16. package/components/p-x30CgLRv.js.map +1 -0
  17. package/components/xplor-alert-dialog.d.ts +11 -0
  18. package/components/xplor-alert-dialog.js +85 -0
  19. package/components/xplor-alert-dialog.js.map +1 -0
  20. package/components/xplor-alert-message.d.ts +11 -0
  21. package/components/xplor-alert-message.js +48 -0
  22. package/components/xplor-alert-message.js.map +1 -0
  23. package/components/xplor-assistant.d.ts +11 -0
  24. package/components/xplor-assistant.js +763 -0
  25. package/components/xplor-assistant.js.map +1 -0
  26. package/components/xplor-autocomplete.d.ts +11 -0
  27. package/components/xplor-autocomplete.js +268 -0
  28. package/components/xplor-autocomplete.js.map +1 -0
  29. package/components/xplor-avatar-and-name.d.ts +11 -0
  30. package/components/xplor-avatar-and-name.js +48 -0
  31. package/components/xplor-avatar-and-name.js.map +1 -0
  32. package/components/xplor-avatar.d.ts +11 -0
  33. package/components/xplor-avatar.js +9 -0
  34. package/components/xplor-avatar.js.map +1 -0
  35. package/components/xplor-badge-active.d.ts +11 -0
  36. package/components/xplor-badge-active.js +35 -0
  37. package/components/xplor-badge-active.js.map +1 -0
  38. package/components/xplor-badge-archived.d.ts +11 -0
  39. package/components/xplor-badge-archived.js +35 -0
  40. package/components/xplor-badge-archived.js.map +1 -0
  41. package/components/xplor-badge-deleted.d.ts +11 -0
  42. package/components/xplor-badge-deleted.js +35 -0
  43. package/components/xplor-badge-deleted.js.map +1 -0
  44. package/components/xplor-badge-expired.d.ts +11 -0
  45. package/components/xplor-badge-expired.js +35 -0
  46. package/components/xplor-badge-expired.js.map +1 -0
  47. package/components/xplor-badge-inactive.d.ts +11 -0
  48. package/components/xplor-badge-inactive.js +35 -0
  49. package/components/xplor-badge-inactive.js.map +1 -0
  50. package/components/xplor-badge-recalled.d.ts +11 -0
  51. package/components/xplor-badge-recalled.js +35 -0
  52. package/components/xplor-badge-recalled.js.map +1 -0
  53. package/components/xplor-badge-session-booking.d.ts +11 -0
  54. package/components/xplor-badge-session-booking.js +60 -0
  55. package/components/xplor-badge-session-booking.js.map +1 -0
  56. package/components/xplor-badge-upcoming.d.ts +11 -0
  57. package/components/xplor-badge-upcoming.js +35 -0
  58. package/components/xplor-badge-upcoming.js.map +1 -0
  59. package/components/xplor-badge-waitlist.d.ts +11 -0
  60. package/components/xplor-badge-waitlist.js +35 -0
  61. package/components/xplor-badge-waitlist.js.map +1 -0
  62. package/components/xplor-badge.d.ts +11 -0
  63. package/components/xplor-badge.js +151 -0
  64. package/components/xplor-badge.js.map +1 -0
  65. package/components/xplor-btn-back-to-parent.d.ts +11 -0
  66. package/components/xplor-btn-back-to-parent.js +72 -0
  67. package/components/xplor-btn-back-to-parent.js.map +1 -0
  68. package/components/xplor-btn-back.d.ts +11 -0
  69. package/components/xplor-btn-back.js +76 -0
  70. package/components/xplor-btn-back.js.map +1 -0
  71. package/components/xplor-btn-icon.d.ts +11 -0
  72. package/components/xplor-btn-icon.js +77 -0
  73. package/components/xplor-btn-icon.js.map +1 -0
  74. package/components/xplor-btn-menu.d.ts +11 -0
  75. package/components/xplor-btn-menu.js +105 -0
  76. package/components/xplor-btn-menu.js.map +1 -0
  77. package/components/xplor-btn-toggle-group.d.ts +11 -0
  78. package/components/xplor-btn-toggle-group.js +46 -0
  79. package/components/xplor-btn-toggle-group.js.map +1 -0
  80. package/components/xplor-btn-toggle-secondary.d.ts +11 -0
  81. package/components/xplor-btn-toggle-secondary.js +64 -0
  82. package/components/xplor-btn-toggle-secondary.js.map +1 -0
  83. package/components/xplor-btn-toggle.d.ts +11 -0
  84. package/components/xplor-btn-toggle.js +69 -0
  85. package/components/xplor-btn-toggle.js.map +1 -0
  86. package/components/xplor-btn-tooltip.d.ts +11 -0
  87. package/components/xplor-btn-tooltip.js +58 -0
  88. package/components/xplor-btn-tooltip.js.map +1 -0
  89. package/components/xplor-button.d.ts +11 -0
  90. package/components/xplor-button.js +9 -0
  91. package/components/xplor-button.js.map +1 -0
  92. package/components/xplor-chat-widget.d.ts +11 -0
  93. package/components/xplor-chat-widget.js +104 -0
  94. package/components/xplor-chat-widget.js.map +1 -0
  95. package/components/xplor-checkbox.d.ts +11 -0
  96. package/components/xplor-checkbox.js +124 -0
  97. package/components/xplor-checkbox.js.map +1 -0
  98. package/components/xplor-combobox.d.ts +11 -0
  99. package/components/xplor-combobox.js +278 -0
  100. package/components/xplor-combobox.js.map +1 -0
  101. package/components/xplor-datatable.d.ts +11 -0
  102. package/components/xplor-datatable.js +243 -0
  103. package/components/xplor-datatable.js.map +1 -0
  104. package/components/xplor-date-picker.d.ts +11 -0
  105. package/components/xplor-date-picker.js +268 -0
  106. package/components/xplor-date-picker.js.map +1 -0
  107. package/components/xplor-drag-and-drop-input.d.ts +11 -0
  108. package/components/xplor-drag-and-drop-input.js +137 -0
  109. package/components/xplor-drag-and-drop-input.js.map +1 -0
  110. package/components/xplor-dropdown.d.ts +11 -0
  111. package/components/xplor-dropdown.js +9 -0
  112. package/components/xplor-dropdown.js.map +1 -0
  113. package/components/xplor-expansion-panel.d.ts +11 -0
  114. package/components/xplor-expansion-panel.js +74 -0
  115. package/components/xplor-expansion-panel.js.map +1 -0
  116. package/components/xplor-expansion-panels.d.ts +11 -0
  117. package/components/xplor-expansion-panels.js +70 -0
  118. package/components/xplor-expansion-panels.js.map +1 -0
  119. package/components/xplor-file-upload.d.ts +11 -0
  120. package/components/xplor-file-upload.js +183 -0
  121. package/components/xplor-file-upload.js.map +1 -0
  122. package/components/xplor-inline-checkbox.d.ts +11 -0
  123. package/components/xplor-inline-checkbox.js +75 -0
  124. package/components/xplor-inline-checkbox.js.map +1 -0
  125. package/components/xplor-inline-date-picker.d.ts +11 -0
  126. package/components/xplor-inline-date-picker.js +9 -0
  127. package/components/xplor-inline-date-picker.js.map +1 -0
  128. package/components/xplor-inline-switch.d.ts +11 -0
  129. package/components/xplor-inline-switch.js +68 -0
  130. package/components/xplor-inline-switch.js.map +1 -0
  131. package/components/xplor-input-file.d.ts +11 -0
  132. package/components/xplor-input-file.js +121 -0
  133. package/components/xplor-input-file.js.map +1 -0
  134. package/components/xplor-input-search.d.ts +11 -0
  135. package/components/xplor-input-search.js +89 -0
  136. package/components/xplor-input-search.js.map +1 -0
  137. package/components/xplor-input-select.d.ts +11 -0
  138. package/components/xplor-input-select.js +168 -0
  139. package/components/xplor-input-select.js.map +1 -0
  140. package/components/xplor-input-send.d.ts +11 -0
  141. package/components/xplor-input-send.js +87 -0
  142. package/components/xplor-input-send.js.map +1 -0
  143. package/components/xplor-input-text-area.d.ts +11 -0
  144. package/components/xplor-input-text-area.js +131 -0
  145. package/components/xplor-input-text-area.js.map +1 -0
  146. package/components/xplor-input-text-secondary.d.ts +11 -0
  147. package/components/xplor-input-text-secondary.js +94 -0
  148. package/components/xplor-input-text-secondary.js.map +1 -0
  149. package/components/xplor-input-text.d.ts +11 -0
  150. package/components/xplor-input-text.js +129 -0
  151. package/components/xplor-input-text.js.map +1 -0
  152. package/components/xplor-input-title.d.ts +11 -0
  153. package/components/xplor-input-title.js +68 -0
  154. package/components/xplor-input-title.js.map +1 -0
  155. package/components/xplor-links.d.ts +11 -0
  156. package/components/xplor-links.js +38 -0
  157. package/components/xplor-links.js.map +1 -0
  158. package/components/xplor-modal-persistent.d.ts +11 -0
  159. package/components/xplor-modal-persistent.js +65 -0
  160. package/components/xplor-modal-persistent.js.map +1 -0
  161. package/components/xplor-modal.d.ts +11 -0
  162. package/components/xplor-modal.js +9 -0
  163. package/components/xplor-modal.js.map +1 -0
  164. package/components/xplor-nav-tabs.d.ts +11 -0
  165. package/components/xplor-nav-tabs.js +58 -0
  166. package/components/xplor-nav-tabs.js.map +1 -0
  167. package/components/xplor-section-card.d.ts +11 -0
  168. package/components/xplor-section-card.js +46 -0
  169. package/components/xplor-section-card.js.map +1 -0
  170. package/components/xplor-section-heading.d.ts +11 -0
  171. package/components/xplor-section-heading.js +43 -0
  172. package/components/xplor-section-heading.js.map +1 -0
  173. package/components/xplor-table.d.ts +11 -0
  174. package/components/xplor-table.js +275 -0
  175. package/components/xplor-table.js.map +1 -0
  176. package/components/xplor-text-bubble.d.ts +11 -0
  177. package/components/xplor-text-bubble.js +42 -0
  178. package/components/xplor-text-bubble.js.map +1 -0
  179. package/components/xplor-text-field.d.ts +11 -0
  180. package/components/xplor-text-field.js +190 -0
  181. package/components/xplor-text-field.js.map +1 -0
  182. package/components/xplor-time-picker.d.ts +11 -0
  183. package/components/xplor-time-picker.js +348 -0
  184. package/components/xplor-time-picker.js.map +1 -0
  185. package/components/xplor-tooltip.d.ts +11 -0
  186. package/components/xplor-tooltip.js +9 -0
  187. package/components/xplor-tooltip.js.map +1 -0
  188. package/dist/cjs/index-Bc5o_4vY.js +2594 -0
  189. package/dist/cjs/index-Bc5o_4vY.js.map +1 -0
  190. package/dist/cjs/index.cjs.js +5 -0
  191. package/dist/cjs/index.cjs.js.map +1 -0
  192. package/dist/cjs/loader.cjs.js +15 -0
  193. package/dist/cjs/loader.cjs.js.map +1 -0
  194. package/dist/cjs/xplor-alert-dialog_57.cjs.entry.js +4750 -0
  195. package/dist/cjs/xplor-alert-dialog_57.cjs.entry.js.map +1 -0
  196. package/dist/cjs/xplor-component-library.cjs.js +27 -0
  197. package/dist/cjs/xplor-component-library.cjs.js.map +1 -0
  198. package/dist/collection/collection-manifest.json +69 -0
  199. package/dist/collection/components/element-interface.js +2 -0
  200. package/dist/collection/components/element-interface.js.map +1 -0
  201. package/dist/collection/components/helpers.js +129 -0
  202. package/dist/collection/components/helpers.js.map +1 -0
  203. package/dist/collection/components/xplor-alert-dialog/xplor-alert-dialog.css +348 -0
  204. package/dist/collection/components/xplor-alert-dialog/xplor-alert-dialog.js +163 -0
  205. package/dist/collection/components/xplor-alert-dialog/xplor-alert-dialog.js.map +1 -0
  206. package/dist/collection/components/xplor-alert-message/xplor-alert-message.css +352 -0
  207. package/dist/collection/components/xplor-alert-message/xplor-alert-message.js +110 -0
  208. package/dist/collection/components/xplor-alert-message/xplor-alert-message.js.map +1 -0
  209. package/dist/collection/components/xplor-assistant/internal/AssistantInput.js +39 -0
  210. package/dist/collection/components/xplor-assistant/internal/AssistantInput.js.map +1 -0
  211. package/dist/collection/components/xplor-assistant/internal/AssistantMessage.js +35 -0
  212. package/dist/collection/components/xplor-assistant/internal/AssistantMessage.js.map +1 -0
  213. package/dist/collection/components/xplor-assistant/internal/QuickReplies.js +13 -0
  214. package/dist/collection/components/xplor-assistant/internal/QuickReplies.js.map +1 -0
  215. package/dist/collection/components/xplor-assistant/internal/TypingIndicator.js +9 -0
  216. package/dist/collection/components/xplor-assistant/internal/TypingIndicator.js.map +1 -0
  217. package/dist/collection/components/xplor-assistant/internal/types.js +2 -0
  218. package/dist/collection/components/xplor-assistant/internal/types.js.map +1 -0
  219. package/dist/collection/components/xplor-assistant/utils/api.js +138 -0
  220. package/dist/collection/components/xplor-assistant/utils/api.js.map +1 -0
  221. package/dist/collection/components/xplor-assistant/utils/icons.js +53 -0
  222. package/dist/collection/components/xplor-assistant/utils/icons.js.map +1 -0
  223. package/dist/collection/components/xplor-assistant/utils/speech.js +230 -0
  224. package/dist/collection/components/xplor-assistant/utils/speech.js.map +1 -0
  225. package/dist/collection/components/xplor-assistant/xplor-assistant.css +1384 -0
  226. package/dist/collection/components/xplor-assistant/xplor-assistant.js +675 -0
  227. package/dist/collection/components/xplor-assistant/xplor-assistant.js.map +1 -0
  228. package/dist/collection/components/xplor-autocomplete/xplor-autocomplete.css +458 -0
  229. package/dist/collection/components/xplor-autocomplete/xplor-autocomplete.js +613 -0
  230. package/dist/collection/components/xplor-autocomplete/xplor-autocomplete.js.map +1 -0
  231. package/dist/collection/components/xplor-avatar/avatar.stories.js +175 -0
  232. package/dist/collection/components/xplor-avatar/avatar.stories.js.map +1 -0
  233. package/dist/collection/components/xplor-avatar/xplor-avatar.css +271 -0
  234. package/dist/collection/components/xplor-avatar/xplor-avatar.js +186 -0
  235. package/dist/collection/components/xplor-avatar/xplor-avatar.js.map +1 -0
  236. package/dist/collection/components/xplor-avatar-and-name/xplor-avatar-and-name.css +284 -0
  237. package/dist/collection/components/xplor-avatar-and-name/xplor-avatar-and-name.js +122 -0
  238. package/dist/collection/components/xplor-avatar-and-name/xplor-avatar-and-name.js.map +1 -0
  239. package/dist/collection/components/xplor-badge/xplor-badge.css +1100 -0
  240. package/dist/collection/components/xplor-badge/xplor-badge.js +273 -0
  241. package/dist/collection/components/xplor-badge/xplor-badge.js.map +1 -0
  242. package/dist/collection/components/xplor-badge-active/xplor-badge-active.css +280 -0
  243. package/dist/collection/components/xplor-badge-active/xplor-badge-active.js +19 -0
  244. package/dist/collection/components/xplor-badge-active/xplor-badge-active.js.map +1 -0
  245. package/dist/collection/components/xplor-badge-archived/xplor-badge-archived.css +280 -0
  246. package/dist/collection/components/xplor-badge-archived/xplor-badge-archived.js +19 -0
  247. package/dist/collection/components/xplor-badge-archived/xplor-badge-archived.js.map +1 -0
  248. package/dist/collection/components/xplor-badge-deleted/xplor-badge-deleted.css +280 -0
  249. package/dist/collection/components/xplor-badge-deleted/xplor-badge-deleted.js +19 -0
  250. package/dist/collection/components/xplor-badge-deleted/xplor-badge-deleted.js.map +1 -0
  251. package/dist/collection/components/xplor-badge-expired/xplor-badge-expired.css +280 -0
  252. package/dist/collection/components/xplor-badge-expired/xplor-badge-expired.js +19 -0
  253. package/dist/collection/components/xplor-badge-expired/xplor-badge-expired.js.map +1 -0
  254. package/dist/collection/components/xplor-badge-inactive/xplor-badge-inactive.css +280 -0
  255. package/dist/collection/components/xplor-badge-inactive/xplor-badge-inactive.js +19 -0
  256. package/dist/collection/components/xplor-badge-inactive/xplor-badge-inactive.js.map +1 -0
  257. package/dist/collection/components/xplor-badge-recalled/xplor-badge-recalled.css +280 -0
  258. package/dist/collection/components/xplor-badge-recalled/xplor-badge-recalled.js +19 -0
  259. package/dist/collection/components/xplor-badge-recalled/xplor-badge-recalled.js.map +1 -0
  260. package/dist/collection/components/xplor-badge-session-booking/xplor-badge-session-booking.css +300 -0
  261. package/dist/collection/components/xplor-badge-session-booking/xplor-badge-session-booking.js +93 -0
  262. package/dist/collection/components/xplor-badge-session-booking/xplor-badge-session-booking.js.map +1 -0
  263. package/dist/collection/components/xplor-badge-upcoming/xplor-badge-upcoming.css +280 -0
  264. package/dist/collection/components/xplor-badge-upcoming/xplor-badge-upcoming.js +19 -0
  265. package/dist/collection/components/xplor-badge-upcoming/xplor-badge-upcoming.js.map +1 -0
  266. package/dist/collection/components/xplor-badge-waitlist/xplor-badge-waitlist.css +280 -0
  267. package/dist/collection/components/xplor-badge-waitlist/xplor-badge-waitlist.js +19 -0
  268. package/dist/collection/components/xplor-badge-waitlist/xplor-badge-waitlist.js.map +1 -0
  269. package/dist/collection/components/xplor-btn-back/xplor-btn-back.css +306 -0
  270. package/dist/collection/components/xplor-btn-back/xplor-btn-back.js +182 -0
  271. package/dist/collection/components/xplor-btn-back/xplor-btn-back.js.map +1 -0
  272. package/dist/collection/components/xplor-btn-back-to-parent/xplor-btn-back-to-parent.css +306 -0
  273. package/dist/collection/components/xplor-btn-back-to-parent/xplor-btn-back-to-parent.js +173 -0
  274. package/dist/collection/components/xplor-btn-back-to-parent/xplor-btn-back-to-parent.js.map +1 -0
  275. package/dist/collection/components/xplor-btn-icon/xplor-btn-icon.css +370 -0
  276. package/dist/collection/components/xplor-btn-icon/xplor-btn-icon.js +183 -0
  277. package/dist/collection/components/xplor-btn-icon/xplor-btn-icon.js.map +1 -0
  278. package/dist/collection/components/xplor-btn-menu/xplor-btn-menu.css +327 -0
  279. package/dist/collection/components/xplor-btn-menu/xplor-btn-menu.js +238 -0
  280. package/dist/collection/components/xplor-btn-menu/xplor-btn-menu.js.map +1 -0
  281. package/dist/collection/components/xplor-btn-toggle/xplor-btn-toggle.css +312 -0
  282. package/dist/collection/components/xplor-btn-toggle/xplor-btn-toggle.js +151 -0
  283. package/dist/collection/components/xplor-btn-toggle/xplor-btn-toggle.js.map +1 -0
  284. package/dist/collection/components/xplor-btn-toggle-group/xplor-btn-toggle-group.css +278 -0
  285. package/dist/collection/components/xplor-btn-toggle-group/xplor-btn-toggle-group.js +73 -0
  286. package/dist/collection/components/xplor-btn-toggle-group/xplor-btn-toggle-group.js.map +1 -0
  287. package/dist/collection/components/xplor-btn-toggle-secondary/xplor-btn-toggle-secondary.css +314 -0
  288. package/dist/collection/components/xplor-btn-toggle-secondary/xplor-btn-toggle-secondary.js +127 -0
  289. package/dist/collection/components/xplor-btn-toggle-secondary/xplor-btn-toggle-secondary.js.map +1 -0
  290. package/dist/collection/components/xplor-btn-tooltip/xplor-btn-tooltip.css +271 -0
  291. package/dist/collection/components/xplor-btn-tooltip/xplor-btn-tooltip.js +164 -0
  292. package/dist/collection/components/xplor-btn-tooltip/xplor-btn-tooltip.js.map +1 -0
  293. package/dist/collection/components/xplor-button/xplor-button.css +1253 -0
  294. package/dist/collection/components/xplor-button/xplor-button.js +212 -0
  295. package/dist/collection/components/xplor-button/xplor-button.js.map +1 -0
  296. package/dist/collection/components/xplor-button/xplor-buttons.stories.js +49 -0
  297. package/dist/collection/components/xplor-button/xplor-buttons.stories.js.map +1 -0
  298. package/dist/collection/components/xplor-chat-widget/xplor-chat-widget.css +276 -0
  299. package/dist/collection/components/xplor-chat-widget/xplor-chat-widget.js +139 -0
  300. package/dist/collection/components/xplor-chat-widget/xplor-chat-widget.js.map +1 -0
  301. package/dist/collection/components/xplor-chat-widget/xplor-chat.stories.js +31 -0
  302. package/dist/collection/components/xplor-chat-widget/xplor-chat.stories.js.map +1 -0
  303. package/dist/collection/components/xplor-checkbox/xplor-checkbox.css +453 -0
  304. package/dist/collection/components/xplor-checkbox/xplor-checkbox.js +230 -0
  305. package/dist/collection/components/xplor-checkbox/xplor-checkbox.js.map +1 -0
  306. package/dist/collection/components/xplor-combobox/xplor-combobox.css +473 -0
  307. package/dist/collection/components/xplor-combobox/xplor-combobox.js +553 -0
  308. package/dist/collection/components/xplor-combobox/xplor-combobox.js.map +1 -0
  309. package/dist/collection/components/xplor-datatable/xplor-datatable.css +580 -0
  310. package/dist/collection/components/xplor-datatable/xplor-datatable.js +536 -0
  311. package/dist/collection/components/xplor-datatable/xplor-datatable.js.map +1 -0
  312. package/dist/collection/components/xplor-datatable/xplor-datatable.stories.js +137 -0
  313. package/dist/collection/components/xplor-datatable/xplor-datatable.stories.js.map +1 -0
  314. package/dist/collection/components/xplor-date-picker/xplor-date-picker.css +415 -0
  315. package/dist/collection/components/xplor-date-picker/xplor-date-picker.js +694 -0
  316. package/dist/collection/components/xplor-date-picker/xplor-date-picker.js.map +1 -0
  317. package/dist/collection/components/xplor-drag-and-drop-input/xplor-drag-and-drop-input.css +1149 -0
  318. package/dist/collection/components/xplor-drag-and-drop-input/xplor-drag-and-drop-input.js +256 -0
  319. package/dist/collection/components/xplor-drag-and-drop-input/xplor-drag-and-drop-input.js.map +1 -0
  320. package/dist/collection/components/xplor-dropdown/xplor-dropdown.css +286 -0
  321. package/dist/collection/components/xplor-dropdown/xplor-dropdown.js +83 -0
  322. package/dist/collection/components/xplor-dropdown/xplor-dropdown.js.map +1 -0
  323. package/dist/collection/components/xplor-expansion-panel/xplor-expansion-panel.css +334 -0
  324. package/dist/collection/components/xplor-expansion-panel/xplor-expansion-panel.js +122 -0
  325. package/dist/collection/components/xplor-expansion-panel/xplor-expansion-panel.js.map +1 -0
  326. package/dist/collection/components/xplor-expansion-panels/xplor-expansion-panels.css +277 -0
  327. package/dist/collection/components/xplor-expansion-panels/xplor-expansion-panels.js +129 -0
  328. package/dist/collection/components/xplor-expansion-panels/xplor-expansion-panels.js.map +1 -0
  329. package/dist/collection/components/xplor-file-upload/xplor-file-upload.css +433 -0
  330. package/dist/collection/components/xplor-file-upload/xplor-file-upload.js +347 -0
  331. package/dist/collection/components/xplor-file-upload/xplor-file-upload.js.map +1 -0
  332. package/dist/collection/components/xplor-inline-checkbox/xplor-inline-checkbox.css +300 -0
  333. package/dist/collection/components/xplor-inline-checkbox/xplor-inline-checkbox.js +194 -0
  334. package/dist/collection/components/xplor-inline-checkbox/xplor-inline-checkbox.js.map +1 -0
  335. package/dist/collection/components/xplor-inline-date-picker/xplor-inline-date-picker.css +410 -0
  336. package/dist/collection/components/xplor-inline-date-picker/xplor-inline-date-picker.js +325 -0
  337. package/dist/collection/components/xplor-inline-date-picker/xplor-inline-date-picker.js.map +1 -0
  338. package/dist/collection/components/xplor-inline-switch/xplor-inline-switch.css +343 -0
  339. package/dist/collection/components/xplor-inline-switch/xplor-inline-switch.js +168 -0
  340. package/dist/collection/components/xplor-inline-switch/xplor-inline-switch.js.map +1 -0
  341. package/dist/collection/components/xplor-input-file/xplor-input-file.css +392 -0
  342. package/dist/collection/components/xplor-input-file/xplor-input-file.js +340 -0
  343. package/dist/collection/components/xplor-input-file/xplor-input-file.js.map +1 -0
  344. package/dist/collection/components/xplor-input-search/xplor-input-search.css +371 -0
  345. package/dist/collection/components/xplor-input-search/xplor-input-search.js +213 -0
  346. package/dist/collection/components/xplor-input-search/xplor-input-search.js.map +1 -0
  347. package/dist/collection/components/xplor-input-select/xplor-input-select.css +397 -0
  348. package/dist/collection/components/xplor-input-select/xplor-input-select.js +430 -0
  349. package/dist/collection/components/xplor-input-select/xplor-input-select.js.map +1 -0
  350. package/dist/collection/components/xplor-input-send/xplor-input-send.css +312 -0
  351. package/dist/collection/components/xplor-input-send/xplor-input-send.js +218 -0
  352. package/dist/collection/components/xplor-input-send/xplor-input-send.js.map +1 -0
  353. package/dist/collection/components/xplor-input-text/xplor-input-text.css +334 -0
  354. package/dist/collection/components/xplor-input-text/xplor-input-text.js +419 -0
  355. package/dist/collection/components/xplor-input-text/xplor-input-text.js.map +1 -0
  356. package/dist/collection/components/xplor-input-text-area/xplor-input-text-area.css +359 -0
  357. package/dist/collection/components/xplor-input-text-area/xplor-input-text-area.js +416 -0
  358. package/dist/collection/components/xplor-input-text-area/xplor-input-text-area.js.map +1 -0
  359. package/dist/collection/components/xplor-input-text-secondary/xplor-input-text-secondary.css +339 -0
  360. package/dist/collection/components/xplor-input-text-secondary/xplor-input-text-secondary.js +384 -0
  361. package/dist/collection/components/xplor-input-text-secondary/xplor-input-text-secondary.js.map +1 -0
  362. package/dist/collection/components/xplor-input-title/xplor-input-title.css +304 -0
  363. package/dist/collection/components/xplor-input-title/xplor-input-title.js +164 -0
  364. package/dist/collection/components/xplor-input-title/xplor-input-title.js.map +1 -0
  365. package/dist/collection/components/xplor-links/xplor-links.css +9 -0
  366. package/dist/collection/components/xplor-links/xplor-links.js +42 -0
  367. package/dist/collection/components/xplor-links/xplor-links.js.map +1 -0
  368. package/dist/collection/components/xplor-links/xplor-links.stories.js +18 -0
  369. package/dist/collection/components/xplor-links/xplor-links.stories.js.map +1 -0
  370. package/dist/collection/components/xplor-modal/xplor-modal.css +385 -0
  371. package/dist/collection/components/xplor-modal/xplor-modal.js +279 -0
  372. package/dist/collection/components/xplor-modal/xplor-modal.js.map +1 -0
  373. package/dist/collection/components/xplor-modal-persistent/xplor-modal-persistent.js +152 -0
  374. package/dist/collection/components/xplor-modal-persistent/xplor-modal-persistent.js.map +1 -0
  375. package/dist/collection/components/xplor-nav-tabs/xplor-nav-tabs.css +333 -0
  376. package/dist/collection/components/xplor-nav-tabs/xplor-nav-tabs.js +144 -0
  377. package/dist/collection/components/xplor-nav-tabs/xplor-nav-tabs.js.map +1 -0
  378. package/dist/collection/components/xplor-section-card/xplor-section-card.css +1076 -0
  379. package/dist/collection/components/xplor-section-card/xplor-section-card.js +92 -0
  380. package/dist/collection/components/xplor-section-card/xplor-section-card.js.map +1 -0
  381. package/dist/collection/components/xplor-section-heading/xplor-section-heading.css +285 -0
  382. package/dist/collection/components/xplor-section-heading/xplor-section-heading.js +69 -0
  383. package/dist/collection/components/xplor-section-heading/xplor-section-heading.js.map +1 -0
  384. package/dist/collection/components/xplor-table/xplor-table.js +695 -0
  385. package/dist/collection/components/xplor-table/xplor-table.js.map +1 -0
  386. package/dist/collection/components/xplor-table/xplor-table.stories.js +159 -0
  387. package/dist/collection/components/xplor-table/xplor-table.stories.js.map +1 -0
  388. package/dist/collection/components/xplor-text-bubble/xplor-text-bubble.css +285 -0
  389. package/dist/collection/components/xplor-text-bubble/xplor-text-bubble.js +50 -0
  390. package/dist/collection/components/xplor-text-bubble/xplor-text-bubble.js.map +1 -0
  391. package/dist/collection/components/xplor-text-field/xplor-text-field.css +1280 -0
  392. package/dist/collection/components/xplor-text-field/xplor-text-field.js +591 -0
  393. package/dist/collection/components/xplor-text-field/xplor-text-field.js.map +1 -0
  394. package/dist/collection/components/xplor-time-picker/xplor-time-picker.css +448 -0
  395. package/dist/collection/components/xplor-time-picker/xplor-time-picker.js +647 -0
  396. package/dist/collection/components/xplor-time-picker/xplor-time-picker.js.map +1 -0
  397. package/dist/collection/components/xplor-tooltip/xplor-tooltip.css +336 -0
  398. package/dist/collection/components/xplor-tooltip/xplor-tooltip.js +311 -0
  399. package/dist/collection/components/xplor-tooltip/xplor-tooltip.js.map +1 -0
  400. package/dist/collection/globals/globals.js +32 -0
  401. package/dist/collection/globals/globals.js.map +1 -0
  402. package/dist/collection/index.js +2 -0
  403. package/dist/collection/index.js.map +1 -0
  404. package/dist/collection/stories/Button.js +17 -0
  405. package/dist/collection/stories/Button.js.map +1 -0
  406. package/dist/collection/stories/Button.stories.js +50 -0
  407. package/dist/collection/stories/Button.stories.js.map +1 -0
  408. package/dist/collection/stories/Header.js +41 -0
  409. package/dist/collection/stories/Header.js.map +1 -0
  410. package/dist/collection/stories/Header.stories.js +28 -0
  411. package/dist/collection/stories/Header.stories.js.map +1 -0
  412. package/dist/collection/stories/Page.js +85 -0
  413. package/dist/collection/stories/Page.js.map +1 -0
  414. package/dist/collection/stories/Page.stories.js +25 -0
  415. package/dist/collection/stories/Page.stories.js.map +1 -0
  416. package/dist/collection/stories/assets/accessibility.svg +1 -0
  417. package/dist/collection/stories/assets/discord.svg +1 -0
  418. package/dist/collection/stories/assets/github.svg +1 -0
  419. package/dist/collection/stories/assets/tutorials.svg +1 -0
  420. package/dist/collection/stories/assets/youtube.svg +1 -0
  421. package/dist/collection/utils/helpers.js +25 -0
  422. package/dist/collection/utils/helpers.js.map +1 -0
  423. package/dist/components/index.d.ts +33 -0
  424. package/dist/components/index.js +2324 -0
  425. package/dist/components/index.js.map +1 -0
  426. package/dist/components/p-4l9DAhAo.js +182 -0
  427. package/dist/components/p-4l9DAhAo.js.map +1 -0
  428. package/dist/components/p-BHdeGt6k.js +51 -0
  429. package/dist/components/p-BHdeGt6k.js.map +1 -0
  430. package/dist/components/p-BIFlTsO8.js +185 -0
  431. package/dist/components/p-BIFlTsO8.js.map +1 -0
  432. package/dist/components/p-CJGP2_5k.js +38 -0
  433. package/dist/components/p-CJGP2_5k.js.map +1 -0
  434. package/dist/components/p-DIv_A5Gj.js +57 -0
  435. package/dist/components/p-DIv_A5Gj.js.map +1 -0
  436. package/dist/components/p-DKh6y3GY.js +118 -0
  437. package/dist/components/p-DKh6y3GY.js.map +1 -0
  438. package/dist/components/xplor-alert-dialog.d.ts +11 -0
  439. package/dist/components/xplor-alert-dialog.js +86 -0
  440. package/dist/components/xplor-alert-dialog.js.map +1 -0
  441. package/dist/components/xplor-alert-message.d.ts +11 -0
  442. package/dist/components/xplor-alert-message.js +49 -0
  443. package/dist/components/xplor-alert-message.js.map +1 -0
  444. package/dist/components/xplor-assistant.d.ts +11 -0
  445. package/dist/components/xplor-assistant.js +764 -0
  446. package/dist/components/xplor-assistant.js.map +1 -0
  447. package/dist/components/xplor-autocomplete.d.ts +11 -0
  448. package/dist/components/xplor-autocomplete.js +269 -0
  449. package/dist/components/xplor-autocomplete.js.map +1 -0
  450. package/dist/components/xplor-avatar-and-name.d.ts +11 -0
  451. package/dist/components/xplor-avatar-and-name.js +49 -0
  452. package/dist/components/xplor-avatar-and-name.js.map +1 -0
  453. package/dist/components/xplor-avatar.d.ts +11 -0
  454. package/dist/components/xplor-avatar.js +9 -0
  455. package/dist/components/xplor-avatar.js.map +1 -0
  456. package/dist/components/xplor-badge-active.d.ts +11 -0
  457. package/dist/components/xplor-badge-active.js +36 -0
  458. package/dist/components/xplor-badge-active.js.map +1 -0
  459. package/dist/components/xplor-badge-archived.d.ts +11 -0
  460. package/dist/components/xplor-badge-archived.js +36 -0
  461. package/dist/components/xplor-badge-archived.js.map +1 -0
  462. package/dist/components/xplor-badge-deleted.d.ts +11 -0
  463. package/dist/components/xplor-badge-deleted.js +36 -0
  464. package/dist/components/xplor-badge-deleted.js.map +1 -0
  465. package/dist/components/xplor-badge-expired.d.ts +11 -0
  466. package/dist/components/xplor-badge-expired.js +36 -0
  467. package/dist/components/xplor-badge-expired.js.map +1 -0
  468. package/dist/components/xplor-badge-inactive.d.ts +11 -0
  469. package/dist/components/xplor-badge-inactive.js +36 -0
  470. package/dist/components/xplor-badge-inactive.js.map +1 -0
  471. package/dist/components/xplor-badge-recalled.d.ts +11 -0
  472. package/dist/components/xplor-badge-recalled.js +36 -0
  473. package/dist/components/xplor-badge-recalled.js.map +1 -0
  474. package/dist/components/xplor-badge-session-booking.d.ts +11 -0
  475. package/dist/components/xplor-badge-session-booking.js +61 -0
  476. package/dist/components/xplor-badge-session-booking.js.map +1 -0
  477. package/dist/components/xplor-badge-upcoming.d.ts +11 -0
  478. package/dist/components/xplor-badge-upcoming.js +36 -0
  479. package/dist/components/xplor-badge-upcoming.js.map +1 -0
  480. package/dist/components/xplor-badge-waitlist.d.ts +11 -0
  481. package/dist/components/xplor-badge-waitlist.js +36 -0
  482. package/dist/components/xplor-badge-waitlist.js.map +1 -0
  483. package/dist/components/xplor-badge.d.ts +11 -0
  484. package/dist/components/xplor-badge.js +152 -0
  485. package/dist/components/xplor-badge.js.map +1 -0
  486. package/dist/components/xplor-btn-back-to-parent.d.ts +11 -0
  487. package/dist/components/xplor-btn-back-to-parent.js +73 -0
  488. package/dist/components/xplor-btn-back-to-parent.js.map +1 -0
  489. package/dist/components/xplor-btn-back.d.ts +11 -0
  490. package/dist/components/xplor-btn-back.js +77 -0
  491. package/dist/components/xplor-btn-back.js.map +1 -0
  492. package/dist/components/xplor-btn-icon.d.ts +11 -0
  493. package/dist/components/xplor-btn-icon.js +78 -0
  494. package/dist/components/xplor-btn-icon.js.map +1 -0
  495. package/dist/components/xplor-btn-menu.d.ts +11 -0
  496. package/dist/components/xplor-btn-menu.js +106 -0
  497. package/dist/components/xplor-btn-menu.js.map +1 -0
  498. package/dist/components/xplor-btn-toggle-group.d.ts +11 -0
  499. package/dist/components/xplor-btn-toggle-group.js +47 -0
  500. package/dist/components/xplor-btn-toggle-group.js.map +1 -0
  501. package/dist/components/xplor-btn-toggle-secondary.d.ts +11 -0
  502. package/dist/components/xplor-btn-toggle-secondary.js +65 -0
  503. package/dist/components/xplor-btn-toggle-secondary.js.map +1 -0
  504. package/dist/components/xplor-btn-toggle.d.ts +11 -0
  505. package/dist/components/xplor-btn-toggle.js +70 -0
  506. package/dist/components/xplor-btn-toggle.js.map +1 -0
  507. package/dist/components/xplor-btn-tooltip.d.ts +11 -0
  508. package/dist/components/xplor-btn-tooltip.js +59 -0
  509. package/dist/components/xplor-btn-tooltip.js.map +1 -0
  510. package/dist/components/xplor-button.d.ts +11 -0
  511. package/dist/components/xplor-button.js +9 -0
  512. package/dist/components/xplor-button.js.map +1 -0
  513. package/dist/components/xplor-chat-widget.d.ts +11 -0
  514. package/dist/components/xplor-chat-widget.js +105 -0
  515. package/dist/components/xplor-chat-widget.js.map +1 -0
  516. package/dist/components/xplor-checkbox.d.ts +11 -0
  517. package/dist/components/xplor-checkbox.js +125 -0
  518. package/dist/components/xplor-checkbox.js.map +1 -0
  519. package/dist/components/xplor-combobox.d.ts +11 -0
  520. package/dist/components/xplor-combobox.js +279 -0
  521. package/dist/components/xplor-combobox.js.map +1 -0
  522. package/dist/components/xplor-datatable.d.ts +11 -0
  523. package/dist/components/xplor-datatable.js +244 -0
  524. package/dist/components/xplor-datatable.js.map +1 -0
  525. package/dist/components/xplor-date-picker.d.ts +11 -0
  526. package/dist/components/xplor-date-picker.js +269 -0
  527. package/dist/components/xplor-date-picker.js.map +1 -0
  528. package/dist/components/xplor-drag-and-drop-input.d.ts +11 -0
  529. package/dist/components/xplor-drag-and-drop-input.js +138 -0
  530. package/dist/components/xplor-drag-and-drop-input.js.map +1 -0
  531. package/dist/components/xplor-dropdown.d.ts +11 -0
  532. package/dist/components/xplor-dropdown.js +9 -0
  533. package/dist/components/xplor-dropdown.js.map +1 -0
  534. package/dist/components/xplor-expansion-panel.d.ts +11 -0
  535. package/dist/components/xplor-expansion-panel.js +75 -0
  536. package/dist/components/xplor-expansion-panel.js.map +1 -0
  537. package/dist/components/xplor-expansion-panels.d.ts +11 -0
  538. package/dist/components/xplor-expansion-panels.js +71 -0
  539. package/dist/components/xplor-expansion-panels.js.map +1 -0
  540. package/dist/components/xplor-file-upload.d.ts +11 -0
  541. package/dist/components/xplor-file-upload.js +184 -0
  542. package/dist/components/xplor-file-upload.js.map +1 -0
  543. package/dist/components/xplor-inline-checkbox.d.ts +11 -0
  544. package/dist/components/xplor-inline-checkbox.js +76 -0
  545. package/dist/components/xplor-inline-checkbox.js.map +1 -0
  546. package/dist/components/xplor-inline-date-picker.d.ts +11 -0
  547. package/dist/components/xplor-inline-date-picker.js +9 -0
  548. package/dist/components/xplor-inline-date-picker.js.map +1 -0
  549. package/dist/components/xplor-inline-switch.d.ts +11 -0
  550. package/dist/components/xplor-inline-switch.js +69 -0
  551. package/dist/components/xplor-inline-switch.js.map +1 -0
  552. package/dist/components/xplor-input-file.d.ts +11 -0
  553. package/dist/components/xplor-input-file.js +122 -0
  554. package/dist/components/xplor-input-file.js.map +1 -0
  555. package/dist/components/xplor-input-search.d.ts +11 -0
  556. package/dist/components/xplor-input-search.js +90 -0
  557. package/dist/components/xplor-input-search.js.map +1 -0
  558. package/dist/components/xplor-input-select.d.ts +11 -0
  559. package/dist/components/xplor-input-select.js +169 -0
  560. package/dist/components/xplor-input-select.js.map +1 -0
  561. package/dist/components/xplor-input-send.d.ts +11 -0
  562. package/dist/components/xplor-input-send.js +88 -0
  563. package/dist/components/xplor-input-send.js.map +1 -0
  564. package/dist/components/xplor-input-text-area.d.ts +11 -0
  565. package/dist/components/xplor-input-text-area.js +132 -0
  566. package/dist/components/xplor-input-text-area.js.map +1 -0
  567. package/dist/components/xplor-input-text-secondary.d.ts +11 -0
  568. package/dist/components/xplor-input-text-secondary.js +95 -0
  569. package/dist/components/xplor-input-text-secondary.js.map +1 -0
  570. package/dist/components/xplor-input-text.d.ts +11 -0
  571. package/dist/components/xplor-input-text.js +130 -0
  572. package/dist/components/xplor-input-text.js.map +1 -0
  573. package/dist/components/xplor-input-title.d.ts +11 -0
  574. package/dist/components/xplor-input-title.js +69 -0
  575. package/dist/components/xplor-input-title.js.map +1 -0
  576. package/dist/components/xplor-links.d.ts +11 -0
  577. package/dist/components/xplor-links.js +39 -0
  578. package/dist/components/xplor-links.js.map +1 -0
  579. package/dist/components/xplor-modal-persistent.d.ts +11 -0
  580. package/dist/components/xplor-modal-persistent.js +66 -0
  581. package/dist/components/xplor-modal-persistent.js.map +1 -0
  582. package/dist/components/xplor-modal.d.ts +11 -0
  583. package/dist/components/xplor-modal.js +9 -0
  584. package/dist/components/xplor-modal.js.map +1 -0
  585. package/dist/components/xplor-nav-tabs.d.ts +11 -0
  586. package/dist/components/xplor-nav-tabs.js +59 -0
  587. package/dist/components/xplor-nav-tabs.js.map +1 -0
  588. package/dist/components/xplor-section-card.d.ts +11 -0
  589. package/dist/components/xplor-section-card.js +47 -0
  590. package/dist/components/xplor-section-card.js.map +1 -0
  591. package/dist/components/xplor-section-heading.d.ts +11 -0
  592. package/dist/components/xplor-section-heading.js +44 -0
  593. package/dist/components/xplor-section-heading.js.map +1 -0
  594. package/dist/components/xplor-table.d.ts +11 -0
  595. package/dist/components/xplor-table.js +276 -0
  596. package/dist/components/xplor-table.js.map +1 -0
  597. package/dist/components/xplor-text-bubble.d.ts +11 -0
  598. package/dist/components/xplor-text-bubble.js +43 -0
  599. package/dist/components/xplor-text-bubble.js.map +1 -0
  600. package/dist/components/xplor-text-field.d.ts +11 -0
  601. package/dist/components/xplor-text-field.js +191 -0
  602. package/dist/components/xplor-text-field.js.map +1 -0
  603. package/dist/components/xplor-time-picker.d.ts +11 -0
  604. package/dist/components/xplor-time-picker.js +349 -0
  605. package/dist/components/xplor-time-picker.js.map +1 -0
  606. package/dist/components/xplor-tooltip.d.ts +11 -0
  607. package/dist/components/xplor-tooltip.js +9 -0
  608. package/dist/components/xplor-tooltip.js.map +1 -0
  609. package/dist/esm/index-Zkk2NJif.js +2566 -0
  610. package/dist/esm/index-Zkk2NJif.js.map +1 -0
  611. package/dist/esm/index.js +4 -0
  612. package/dist/esm/index.js.map +1 -0
  613. package/dist/esm/loader.js +13 -0
  614. package/dist/esm/loader.js.map +1 -0
  615. package/dist/esm/xplor-alert-dialog_57.entry.js +4692 -0
  616. package/dist/esm/xplor-alert-dialog_57.entry.js.map +1 -0
  617. package/dist/esm/xplor-component-library.js +23 -0
  618. package/dist/esm/xplor-component-library.js.map +1 -0
  619. package/dist/hydrate/index.d.ts +273 -0
  620. package/dist/hydrate/index.js +25064 -0
  621. package/dist/hydrate/index.mjs +25056 -0
  622. package/dist/hydrate/package.json +12 -0
  623. package/dist/index.cjs.js +1 -0
  624. package/dist/index.js +1 -0
  625. package/dist/types/components/element-interface.d.ts +19 -0
  626. package/dist/types/components/helpers.d.ts +47 -0
  627. package/dist/types/components/xplor-alert-dialog/xplor-alert-dialog.d.ts +29 -0
  628. package/dist/types/components/xplor-alert-message/xplor-alert-message.d.ts +9 -0
  629. package/dist/types/components/xplor-assistant/internal/AssistantInput.d.ts +17 -0
  630. package/dist/types/components/xplor-assistant/internal/AssistantMessage.d.ts +6 -0
  631. package/dist/types/components/xplor-assistant/internal/QuickReplies.d.ts +6 -0
  632. package/dist/types/components/xplor-assistant/internal/TypingIndicator.d.ts +5 -0
  633. package/dist/types/components/xplor-assistant/internal/types.d.ts +106 -0
  634. package/dist/types/components/xplor-assistant/utils/api.d.ts +48 -0
  635. package/dist/types/components/xplor-assistant/utils/icons.d.ts +24 -0
  636. package/dist/types/components/xplor-assistant/utils/speech.d.ts +86 -0
  637. package/dist/types/components/xplor-assistant/xplor-assistant.d.ts +52 -0
  638. package/dist/types/components/xplor-autocomplete/xplor-autocomplete.d.ts +92 -0
  639. package/dist/types/components/xplor-avatar/avatar.stories.d.ts +75 -0
  640. package/dist/types/components/xplor-avatar/xplor-avatar.d.ts +21 -0
  641. package/dist/types/components/xplor-avatar-and-name/xplor-avatar-and-name.d.ts +8 -0
  642. package/dist/types/components/xplor-badge/xplor-badge.d.ts +52 -0
  643. package/dist/types/components/xplor-badge-active/xplor-badge-active.d.ts +3 -0
  644. package/dist/types/components/xplor-badge-archived/xplor-badge-archived.d.ts +3 -0
  645. package/dist/types/components/xplor-badge-deleted/xplor-badge-deleted.d.ts +3 -0
  646. package/dist/types/components/xplor-badge-expired/xplor-badge-expired.d.ts +3 -0
  647. package/dist/types/components/xplor-badge-inactive/xplor-badge-inactive.d.ts +3 -0
  648. package/dist/types/components/xplor-badge-recalled/xplor-badge-recalled.d.ts +3 -0
  649. package/dist/types/components/xplor-badge-session-booking/xplor-badge-session-booking.d.ts +20 -0
  650. package/dist/types/components/xplor-badge-upcoming/xplor-badge-upcoming.d.ts +3 -0
  651. package/dist/types/components/xplor-badge-waitlist/xplor-badge-waitlist.d.ts +3 -0
  652. package/dist/types/components/xplor-btn-back/xplor-btn-back.d.ts +29 -0
  653. package/dist/types/components/xplor-btn-back-to-parent/xplor-btn-back-to-parent.d.ts +29 -0
  654. package/dist/types/components/xplor-btn-icon/xplor-btn-icon.d.ts +29 -0
  655. package/dist/types/components/xplor-btn-menu/xplor-btn-menu.d.ts +49 -0
  656. package/dist/types/components/xplor-btn-toggle/xplor-btn-toggle.d.ts +25 -0
  657. package/dist/types/components/xplor-btn-toggle-group/xplor-btn-toggle-group.d.ts +11 -0
  658. package/dist/types/components/xplor-btn-toggle-secondary/xplor-btn-toggle-secondary.d.ts +21 -0
  659. package/dist/types/components/xplor-btn-tooltip/xplor-btn-tooltip.d.ts +10 -0
  660. package/dist/types/components/xplor-button/xplor-button.d.ts +19 -0
  661. package/dist/types/components/xplor-button/xplor-buttons.stories.d.ts +32 -0
  662. package/dist/types/components/xplor-chat-widget/xplor-chat-widget.d.ts +13 -0
  663. package/dist/types/components/xplor-chat-widget/xplor-chat.stories.d.ts +32 -0
  664. package/dist/types/components/xplor-checkbox/xplor-checkbox.d.ts +25 -0
  665. package/dist/types/components/xplor-combobox/xplor-combobox.d.ts +77 -0
  666. package/dist/types/components/xplor-datatable/xplor-datatable.d.ts +103 -0
  667. package/dist/types/components/xplor-datatable/xplor-datatable.stories.d.ts +18 -0
  668. package/dist/types/components/xplor-date-picker/xplor-date-picker.d.ts +53 -0
  669. package/dist/types/components/xplor-drag-and-drop-input/xplor-drag-and-drop-input.d.ts +42 -0
  670. package/dist/types/components/xplor-dropdown/xplor-dropdown.d.ts +6 -0
  671. package/dist/types/components/xplor-expansion-panel/xplor-expansion-panel.d.ts +18 -0
  672. package/dist/types/components/xplor-expansion-panels/xplor-expansion-panels.d.ts +12 -0
  673. package/dist/types/components/xplor-file-upload/xplor-file-upload.d.ts +51 -0
  674. package/dist/types/components/xplor-inline-checkbox/xplor-inline-checkbox.d.ts +33 -0
  675. package/dist/types/components/xplor-inline-date-picker/xplor-inline-date-picker.d.ts +57 -0
  676. package/dist/types/components/xplor-inline-switch/xplor-inline-switch.d.ts +29 -0
  677. package/dist/types/components/xplor-input-file/xplor-input-file.d.ts +60 -0
  678. package/dist/types/components/xplor-input-search/xplor-input-search.d.ts +36 -0
  679. package/dist/types/components/xplor-input-select/xplor-input-select.d.ts +76 -0
  680. package/dist/types/components/xplor-input-send/xplor-input-send.d.ts +18 -0
  681. package/dist/types/components/xplor-input-text/xplor-input-text.d.ts +73 -0
  682. package/dist/types/components/xplor-input-text-area/xplor-input-text-area.d.ts +72 -0
  683. package/dist/types/components/xplor-input-text-secondary/xplor-input-text-secondary.d.ts +25 -0
  684. package/dist/types/components/xplor-input-title/xplor-input-title.d.ts +30 -0
  685. package/dist/types/components/xplor-links/xplor-links.d.ts +4 -0
  686. package/dist/types/components/xplor-links/xplor-links.stories.d.ts +12 -0
  687. package/dist/types/components/xplor-modal/xplor-modal.d.ts +45 -0
  688. package/dist/types/components/xplor-modal-persistent/xplor-modal-persistent.d.ts +28 -0
  689. package/dist/types/components/xplor-nav-tabs/xplor-nav-tabs.d.ts +15 -0
  690. package/dist/types/components/xplor-section-card/xplor-section-card.d.ts +6 -0
  691. package/dist/types/components/xplor-section-heading/xplor-section-heading.d.ts +5 -0
  692. package/dist/types/components/xplor-table/xplor-table.d.ts +65 -0
  693. package/dist/types/components/xplor-table/xplor-table.stories.d.ts +77 -0
  694. package/dist/types/components/xplor-text-bubble/xplor-text-bubble.d.ts +4 -0
  695. package/dist/types/components/xplor-text-field/xplor-text-field.d.ts +111 -0
  696. package/dist/types/components/xplor-time-picker/xplor-time-picker.d.ts +55 -0
  697. package/dist/types/components/xplor-tooltip/xplor-tooltip.d.ts +28 -0
  698. package/dist/types/components.d.ts +4360 -0
  699. package/dist/types/globals/globals.d.ts +3 -0
  700. package/dist/types/index.d.ts +1 -0
  701. package/dist/types/interfaces.d.ts +104 -0
  702. package/dist/types/stencil-public-runtime.d.ts +1702 -0
  703. package/dist/types/stories/Button.d.ts +15 -0
  704. package/dist/types/stories/Header.d.ts +10 -0
  705. package/dist/types/stories/Page.d.ts +2 -0
  706. package/dist/types/stories/Page.stories.d.ts +11 -0
  707. package/dist/types/utils/helpers.d.ts +3 -0
  708. package/dist/xplor-component-library/index.esm.js +2 -0
  709. package/dist/xplor-component-library/index.esm.js.map +1 -0
  710. package/dist/xplor-component-library/loader.esm.js.map +1 -0
  711. package/dist/xplor-component-library/p-25fa8553.entry.js +2 -0
  712. package/dist/xplor-component-library/p-25fa8553.entry.js.map +1 -0
  713. package/dist/xplor-component-library/p-Zkk2NJif.js +3 -0
  714. package/dist/xplor-component-library/p-Zkk2NJif.js.map +1 -0
  715. package/dist/xplor-component-library/xplor-component-library.css +1 -0
  716. package/dist/xplor-component-library/xplor-component-library.esm.js +2 -0
  717. package/dist/xplor-component-library/xplor-component-library.esm.js.map +1 -0
  718. package/loader/cdn.js +1 -0
  719. package/loader/index.cjs.js +1 -0
  720. package/loader/index.d.ts +24 -0
  721. package/loader/index.es2017.js +1 -0
  722. package/loader/index.js +2 -0
  723. package/package.json +124 -0
  724. package/readme.md +315 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AssistantInput.js","sourceRoot":"","sources":["../../../../src/components/xplor-assistant/internal/AssistantInput.tsx"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,eAAe,CAAC;AAClC,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAe1D,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,KAAkC,EAAE,EAAE;IACnE,MAAM,EACJ,WAAW,EACX,QAAQ,EACR,SAAS,EACT,gBAAgB,EAChB,WAAW,EACX,UAAU,EACV,aAAa,EACb,gBAAgB,EAChB,eAAe,EACf,aAAa,GACd,GAAG,KAAK,CAAC;IAEV,MAAM,YAAY,GAAG,CAAC,CAAQ,EAAE,EAAE;QAChC,CAAC,CAAC,cAAc,EAAE,CAAC;QACnB,OAAO,CAAC,GAAG,CAAC,gDAAgD,EAAE,UAAU,CAAC,CAAC;QAC1E,IAAI,UAAU,CAAC,IAAI,EAAE,IAAI,CAAC,QAAQ,IAAI,CAAC,SAAS,EAAE,CAAC;YACjD,OAAO,CAAC,GAAG,CAAC,8CAA8C,EAAE,UAAU,CAAC,CAAC;YACxE,aAAa,CAAC,UAAU,CAAC,CAAC;YAC1B,aAAa,CAAC,EAAE,CAAC,CAAC;QACpB,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,GAAG,CAAC,6CAA6C,EAAE,QAAQ,EAAE,YAAY,EAAE,SAAS,EAAE,WAAW,EAAE,CAAC,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC,CAAC;QAClI,CAAC;IACH,CAAC,CAAC;IAEF,MAAM,iBAAiB,GAAG,CAAC,CAAQ,EAAE,EAAE;QACrC,MAAM,MAAM,GAAG,CAAC,CAAC,MAA0B,CAAC;QAC5C,aAAa,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAC9B,CAAC,CAAC;IAEF,MAAM,gBAAgB,GAAG,GAAG,EAAE;QAC5B,IAAI,WAAW,EAAE,CAAC;YAChB,eAAe,EAAE,CAAC;QACpB,CAAC;aAAM,CAAC;YACN,gBAAgB,EAAE,CAAC;QACrB,CAAC;IACH,CAAC,CAAC;IAEF,MAAM,cAAc,GAAG,CAAC,UAAU,CAAC,IAAI,EAAE,IAAI,QAAQ,IAAI,SAAS,CAAC;IAEnE,OAAO,CACL,WAAK,KAAK,EAAC,kCAAkC;QAC3C,YAAM,QAAQ,EAAE,YAAY,EAAE,KAAK,EAAC,6BAA6B;YAC9D,gBAAgB,IAAI,CACnB,cACE,IAAI,EAAC,QAAQ,EACb,KAAK,EAAE;oBACL,+BAA+B,EAAE,IAAI;oBACrC,0CAA0C,EAAE,WAAW;iBACxD,EACD,OAAO,EAAE,gBAAgB,EACzB,QAAQ,EAAE,QAAQ,IAAI,SAAS,EAC/B,KAAK,EAAE,WAAW,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,mBAAmB;gBAE3D,YAAM,KAAK,EAAC,6BAA6B,EAAC,SAAS,EAAE,cAAc,GAAS,CACrE,CACV;YAED,aACE,IAAI,EAAC,MAAM,EACX,KAAK,EAAC,wBAAwB,EAC9B,WAAW,EAAE,WAAW,EACxB,KAAK,EAAE,UAAU,EACjB,OAAO,EAAE,iBAAiB,EAC1B,QAAQ,EAAE,QAAQ,IAAI,SAAS,GAC/B;YAEF,cACE,IAAI,EAAC,QAAQ,EACb,KAAK,EAAC,8BAA8B,EACpC,QAAQ,EAAE,cAAc,EACxB,KAAK,EAAC,cAAc;gBAEpB,YAAM,KAAK,EAAC,4BAA4B,EAAC,SAAS,EAAE,QAAQ,GAAS,CAC9D,CACJ,CACH,CACP,CAAC;AACJ,CAAC,CAAC","sourcesContent":["/**\n * AssistantInput - Internal component\n * Renders the input field with voice and send buttons\n */\n\nimport { h } from '@stencil/core';\nimport { microphoneIcon, sendIcon } from '../utils/icons';\n\nexport interface AssistantInputInternalProps {\n placeholder: string;\n disabled: boolean;\n isLoading: boolean;\n enableVoiceInput: boolean;\n isListening: boolean;\n inputValue: string;\n onSendMessage: (message: string) => void;\n onStartListening: () => void;\n onStopListening: () => void;\n setInputValue: (value: string) => void;\n}\n\nexport const AssistantInput = (props: AssistantInputInternalProps) => {\n const {\n placeholder,\n disabled,\n isLoading,\n enableVoiceInput,\n isListening,\n inputValue,\n onSendMessage,\n onStartListening,\n onStopListening,\n setInputValue,\n } = props;\n\n const handleSubmit = (e: Event) => {\n e.preventDefault();\n console.log('[AssistantInput] Submit triggered, inputValue:', inputValue);\n if (inputValue.trim() && !disabled && !isLoading) {\n console.log('[AssistantInput] Calling onSendMessage with:', inputValue);\n onSendMessage(inputValue);\n setInputValue('');\n } else {\n console.log('[AssistantInput] Submit blocked - disabled:', disabled, 'isLoading:', isLoading, 'hasValue:', !!inputValue.trim());\n }\n };\n\n const handleInputChange = (e: Event) => {\n const target = e.target as HTMLInputElement;\n setInputValue(target.value);\n };\n\n const handleVoiceClick = () => {\n if (isListening) {\n onStopListening();\n } else {\n onStartListening();\n }\n };\n\n const isSendDisabled = !inputValue.trim() || disabled || isLoading;\n\n return (\n <div class=\"xplor-assistant__input-container\">\n <form onSubmit={handleSubmit} class=\"xplor-assistant__input-form\">\n {enableVoiceInput && (\n <button\n type=\"button\"\n class={{\n 'xplor-assistant__voice-button': true,\n 'xplor-assistant__voice-button--listening': isListening,\n }}\n onClick={handleVoiceClick}\n disabled={disabled || isLoading}\n title={isListening ? 'Stop listening' : 'Start voice input'}\n >\n <span class=\"xplor-assistant__voice-icon\" innerHTML={microphoneIcon}></span>\n </button>\n )}\n\n <input\n type=\"text\"\n class=\"xplor-assistant__input\"\n placeholder={placeholder}\n value={inputValue}\n onInput={handleInputChange}\n disabled={disabled || isLoading}\n />\n\n <button\n type=\"submit\"\n class=\"xplor-assistant__send-button\"\n disabled={isSendDisabled}\n title=\"Send message\"\n >\n <span class=\"xplor-assistant__send-icon\" innerHTML={sendIcon}></span>\n </button>\n </form>\n </div>\n );\n};\n"]}
@@ -0,0 +1,35 @@
1
+ /**
2
+ * AssistantMessage - Internal component
3
+ * Renders a single message bubble with optional text-to-speech functionality
4
+ */
5
+ import { h } from "@stencil/core";
6
+ import { speakerIcon, stopIcon } from "../utils/icons";
7
+ export const AssistantMessage = (props) => {
8
+ const { message, enableTextToSpeech, isSpeaking, onSpeak, onStopSpeaking } = props;
9
+ const messageClasses = {
10
+ 'xplor-assistant__message': true,
11
+ 'xplor-assistant__message--user': message.role === 'user',
12
+ 'xplor-assistant__message--assistant': message.role === 'assistant',
13
+ };
14
+ const handleSpeakClick = () => {
15
+ if (isSpeaking) {
16
+ onStopSpeaking === null || onStopSpeaking === void 0 ? void 0 : onStopSpeaking();
17
+ }
18
+ else {
19
+ onSpeak === null || onSpeak === void 0 ? void 0 : onSpeak(message.content);
20
+ }
21
+ };
22
+ const formatTime = (timestamp) => {
23
+ const hours = timestamp.getHours();
24
+ const minutes = timestamp.getMinutes();
25
+ const ampm = hours >= 12 ? 'PM' : 'AM';
26
+ const displayHours = hours % 12 || 12;
27
+ const displayMinutes = minutes < 10 ? `0${minutes}` : minutes;
28
+ return `${displayHours}:${displayMinutes} ${ampm}`;
29
+ };
30
+ return (h("div", { class: messageClasses }, h("div", { class: "xplor-assistant__message-content" }, message.content), h("div", { class: "xplor-assistant__message-footer" }, h("span", { class: "xplor-assistant__message-timestamp" }, formatTime(message.timestamp)), message.role === 'assistant' && enableTextToSpeech && (h("button", { class: {
31
+ 'xplor-assistant__speak-button': true,
32
+ 'xplor-assistant__speak-button--active': isSpeaking,
33
+ }, onClick: handleSpeakClick, title: isSpeaking ? 'Stop speaking' : 'Listen to message', type: "button" }, h("span", { class: "xplor-assistant__speak-icon", innerHTML: isSpeaking ? stopIcon : speakerIcon }))))));
34
+ };
35
+ //# sourceMappingURL=AssistantMessage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AssistantMessage.js","sourceRoot":"","sources":["../../../../src/components/xplor-assistant/internal/AssistantMessage.tsx"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,eAAe,CAAC;AAElC,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAEvD,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,KAA4B,EAAE,EAAE;IAC/D,MAAM,EAAE,OAAO,EAAE,kBAAkB,EAAE,UAAU,EAAE,OAAO,EAAE,cAAc,EAAE,GAAG,KAAK,CAAC;IAEnF,MAAM,cAAc,GAAG;QACrB,0BAA0B,EAAE,IAAI;QAChC,gCAAgC,EAAE,OAAO,CAAC,IAAI,KAAK,MAAM;QACzD,qCAAqC,EAAE,OAAO,CAAC,IAAI,KAAK,WAAW;KACpE,CAAC;IAEF,MAAM,gBAAgB,GAAG,GAAG,EAAE;QAC5B,IAAI,UAAU,EAAE,CAAC;YACf,cAAc,aAAd,cAAc,uBAAd,cAAc,EAAI,CAAC;QACrB,CAAC;aAAM,CAAC;YACN,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAG,OAAO,CAAC,OAAO,CAAC,CAAC;QAC7B,CAAC;IACH,CAAC,CAAC;IAEF,MAAM,UAAU,GAAG,CAAC,SAAe,EAAE,EAAE;QACrC,MAAM,KAAK,GAAG,SAAS,CAAC,QAAQ,EAAE,CAAC;QACnC,MAAM,OAAO,GAAG,SAAS,CAAC,UAAU,EAAE,CAAC;QACvC,MAAM,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;QACvC,MAAM,YAAY,GAAG,KAAK,GAAG,EAAE,IAAI,EAAE,CAAC;QACtC,MAAM,cAAc,GAAG,OAAO,GAAG,EAAE,CAAC,CAAC,CAAC,IAAI,OAAO,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC;QAC9D,OAAO,GAAG,YAAY,IAAI,cAAc,IAAI,IAAI,EAAE,CAAC;IACrD,CAAC,CAAC;IAEF,OAAO,CACL,WAAK,KAAK,EAAE,cAAc;QACxB,WAAK,KAAK,EAAC,kCAAkC,IAC1C,OAAO,CAAC,OAAO,CACZ;QACN,WAAK,KAAK,EAAC,iCAAiC;YAC1C,YAAM,KAAK,EAAC,oCAAoC,IAC7C,UAAU,CAAC,OAAO,CAAC,SAAS,CAAC,CACzB;YACN,OAAO,CAAC,IAAI,KAAK,WAAW,IAAI,kBAAkB,IAAI,CACrD,cACE,KAAK,EAAE;oBACL,+BAA+B,EAAE,IAAI;oBACrC,uCAAuC,EAAE,UAAU;iBACpD,EACD,OAAO,EAAE,gBAAgB,EACzB,KAAK,EAAE,UAAU,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,mBAAmB,EACzD,IAAI,EAAC,QAAQ;gBAEb,YACE,KAAK,EAAC,6BAA6B,EACnC,SAAS,EAAE,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,WAAW,GACxC,CACD,CACV,CACG,CACF,CACP,CAAC;AACJ,CAAC,CAAC","sourcesContent":["/**\n * AssistantMessage - Internal component\n * Renders a single message bubble with optional text-to-speech functionality\n */\n\nimport { h } from '@stencil/core';\nimport { AssistantMessageProps } from './types';\nimport { speakerIcon, stopIcon } from '../utils/icons';\n\nexport const AssistantMessage = (props: AssistantMessageProps) => {\n const { message, enableTextToSpeech, isSpeaking, onSpeak, onStopSpeaking } = props;\n\n const messageClasses = {\n 'xplor-assistant__message': true,\n 'xplor-assistant__message--user': message.role === 'user',\n 'xplor-assistant__message--assistant': message.role === 'assistant',\n };\n\n const handleSpeakClick = () => {\n if (isSpeaking) {\n onStopSpeaking?.();\n } else {\n onSpeak?.(message.content);\n }\n };\n\n const formatTime = (timestamp: Date) => {\n const hours = timestamp.getHours();\n const minutes = timestamp.getMinutes();\n const ampm = hours >= 12 ? 'PM' : 'AM';\n const displayHours = hours % 12 || 12;\n const displayMinutes = minutes < 10 ? `0${minutes}` : minutes;\n return `${displayHours}:${displayMinutes} ${ampm}`;\n };\n\n return (\n <div class={messageClasses}>\n <div class=\"xplor-assistant__message-content\">\n {message.content}\n </div>\n <div class=\"xplor-assistant__message-footer\">\n <span class=\"xplor-assistant__message-timestamp\">\n {formatTime(message.timestamp)}\n </span>\n {message.role === 'assistant' && enableTextToSpeech && (\n <button\n class={{\n 'xplor-assistant__speak-button': true,\n 'xplor-assistant__speak-button--active': isSpeaking,\n }}\n onClick={handleSpeakClick}\n title={isSpeaking ? 'Stop speaking' : 'Listen to message'}\n type=\"button\"\n >\n <span\n class=\"xplor-assistant__speak-icon\"\n innerHTML={isSpeaking ? stopIcon : speakerIcon}\n ></span>\n </button>\n )}\n </div>\n </div>\n );\n};\n"]}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * QuickReplies - Internal component
3
+ * Renders quick reply suggestion buttons
4
+ */
5
+ import { h } from "@stencil/core";
6
+ export const QuickReplies = (props) => {
7
+ const { replies, disabled, onReplyClick } = props;
8
+ if (!replies || replies.length === 0) {
9
+ return null;
10
+ }
11
+ return (h("div", { class: "xplor-assistant__quick-replies" }, replies.map((reply) => (h("button", { class: "xplor-assistant__quick-reply", onClick: () => onReplyClick(reply), disabled: disabled, type: "button" }, reply)))));
12
+ };
13
+ //# sourceMappingURL=QuickReplies.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"QuickReplies.js","sourceRoot":"","sources":["../../../../src/components/xplor-assistant/internal/QuickReplies.tsx"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,eAAe,CAAC;AAGlC,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,KAAwB,EAAE,EAAE;IACvD,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,GAAG,KAAK,CAAC;IAElD,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACrC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,CACL,WAAK,KAAK,EAAC,gCAAgC,IACxC,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CACtB,cACE,KAAK,EAAC,8BAA8B,EACpC,OAAO,EAAE,GAAG,EAAE,CAAC,YAAY,CAAC,KAAK,CAAC,EAClC,QAAQ,EAAE,QAAQ,EAClB,IAAI,EAAC,QAAQ,IAEZ,KAAK,CACC,CACV,CAAC,CACE,CACP,CAAC;AACJ,CAAC,CAAC","sourcesContent":["/**\n * QuickReplies - Internal component\n * Renders quick reply suggestion buttons\n */\n\nimport { h } from '@stencil/core';\nimport { QuickRepliesProps } from './types';\n\nexport const QuickReplies = (props: QuickRepliesProps) => {\n const { replies, disabled, onReplyClick } = props;\n\n if (!replies || replies.length === 0) {\n return null;\n }\n\n return (\n <div class=\"xplor-assistant__quick-replies\">\n {replies.map((reply) => (\n <button\n class=\"xplor-assistant__quick-reply\"\n onClick={() => onReplyClick(reply)}\n disabled={disabled}\n type=\"button\"\n >\n {reply}\n </button>\n ))}\n </div>\n );\n};\n"]}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * TypingIndicator - Internal component
3
+ * Displays animated dots to indicate the assistant is processing/typing
4
+ */
5
+ import { h } from "@stencil/core";
6
+ export const TypingIndicator = () => {
7
+ return (h("div", { class: "xplor-assistant__typing-indicator" }, h("span", { class: "xplor-assistant__typing-dot" }), h("span", { class: "xplor-assistant__typing-dot" }), h("span", { class: "xplor-assistant__typing-dot" })));
8
+ };
9
+ //# sourceMappingURL=TypingIndicator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TypingIndicator.js","sourceRoot":"","sources":["../../../../src/components/xplor-assistant/internal/TypingIndicator.tsx"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,eAAe,CAAC;AAElC,MAAM,CAAC,MAAM,eAAe,GAAG,GAAG,EAAE;IAClC,OAAO,CACL,WAAK,KAAK,EAAC,mCAAmC;QAC5C,YAAM,KAAK,EAAC,6BAA6B,GAAQ;QACjD,YAAM,KAAK,EAAC,6BAA6B,GAAQ;QACjD,YAAM,KAAK,EAAC,6BAA6B,GAAQ,CAC7C,CACP,CAAC;AACJ,CAAC,CAAC","sourcesContent":["/**\n * TypingIndicator - Internal component\n * Displays animated dots to indicate the assistant is processing/typing\n */\n\nimport { h } from '@stencil/core';\n\nexport const TypingIndicator = () => {\n return (\n <div class=\"xplor-assistant__typing-indicator\">\n <span class=\"xplor-assistant__typing-dot\"></span>\n <span class=\"xplor-assistant__typing-dot\"></span>\n <span class=\"xplor-assistant__typing-dot\"></span>\n </div>\n );\n};\n"]}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../src/components/xplor-assistant/internal/types.ts"],"names":[],"mappings":"AAAA;;GAEG","sourcesContent":["/**\n * Type definitions for the xplor-assistant component\n */\n\n/**\n * Represents a single message in the conversation\n */\nexport interface AssistantMessage {\n id: string;\n role: 'user' | 'assistant';\n content: string;\n timestamp: Date;\n}\n\n/**\n * API Request payload sent to the backend\n */\nexport interface AssistantAPIRequest {\n message: string;\n sessionId: string;\n userId: string;\n userEmail: string;\n userName: string;\n currentDate: string; // Format: YYYY-MM-DD\n currentTime: string; // Format: HH:MM:SS\n}\n\n/**\n * API Response received from the backend\n */\nexport interface AssistantAPIResponse {\n message: string;\n sessionId: string;\n}\n\n/**\n * Event emitted when a message is sent\n */\nexport interface AssistantMessageSentEvent {\n message: string;\n sessionId: string;\n timestamp: Date;\n}\n\n/**\n * Event emitted when a message is received from the API\n */\nexport interface AssistantMessageReceivedEvent {\n message: string;\n sessionId: string;\n timestamp: Date;\n}\n\n/**\n * Event emitted when an error occurs\n */\nexport interface AssistantErrorEvent {\n error: string;\n type: 'api' | 'voice' | 'tts' | 'network' | 'validation';\n timestamp: Date;\n}\n\n/**\n * Event emitted when a session is created or updated\n */\nexport interface AssistantSessionEvent {\n sessionId: string;\n timestamp: Date;\n}\n\n/**\n * Props for internal AssistantMessage component\n */\nexport interface AssistantMessageProps {\n message: AssistantMessage;\n enableTextToSpeech: boolean;\n autoSpeak: boolean;\n onSpeak?: (text: string) => void;\n onStopSpeaking?: () => void;\n isSpeaking?: boolean;\n}\n\n/**\n * Props for internal AssistantInput component\n */\nexport interface AssistantInputProps {\n placeholder: string;\n disabled: boolean;\n isLoading: boolean;\n enableVoiceInput: boolean;\n isListening: boolean;\n onSendMessage: (message: string) => void;\n onStartListening: () => void;\n onStopListening: () => void;\n}\n\n/**\n * Props for internal QuickReplies component\n */\nexport interface QuickRepliesProps {\n replies: string[];\n disabled: boolean;\n onReplyClick: (reply: string) => void;\n}\n\n/**\n * Props for internal TypingIndicator component\n */\nexport interface TypingIndicatorProps {\n // No props needed - just animated dots\n}\n\n/**\n * Browser capabilities detection result\n */\nexport interface BrowserCapabilities {\n voiceInput: boolean;\n textToSpeech: boolean;\n}\n"]}
@@ -0,0 +1,138 @@
1
+ /**
2
+ * API integration utilities for the xplor-assistant component
3
+ */
4
+ /**
5
+ * Generates a unique session ID
6
+ * Format: session_${timestamp}_${random}
7
+ */
8
+ export function generateSessionId() {
9
+ const timestamp = Date.now();
10
+ const random = Math.random().toString(36).substring(2, 11);
11
+ return `session_${timestamp}_${random}`;
12
+ }
13
+ /**
14
+ * Formats the current date as YYYY-MM-DD
15
+ */
16
+ export function getCurrentDate() {
17
+ const now = new Date();
18
+ const year = now.getFullYear();
19
+ const month = String(now.getMonth() + 1).padStart(2, '0');
20
+ const day = String(now.getDate()).padStart(2, '0');
21
+ return `${year}-${month}-${day}`;
22
+ }
23
+ /**
24
+ * Formats the current time as HH:MM:SS
25
+ */
26
+ export function getCurrentTime() {
27
+ const now = new Date();
28
+ const hours = String(now.getHours()).padStart(2, '0');
29
+ const minutes = String(now.getMinutes()).padStart(2, '0');
30
+ const seconds = String(now.getSeconds()).padStart(2, '0');
31
+ return `${hours}:${minutes}:${seconds}`;
32
+ }
33
+ /**
34
+ * Sends a message to the assistant API
35
+ *
36
+ * @param endpoint - The API endpoint URL
37
+ * @param message - The user's message
38
+ * @param sessionId - The current session ID
39
+ * @param userId - The user's ID
40
+ * @param userEmail - The user's email
41
+ * @param userName - The user's name
42
+ * @returns Promise with the API response
43
+ * @throws Error if the API call fails
44
+ */
45
+ export async function sendMessageToAPI(endpoint, message, sessionId, userId, userEmail, userName) {
46
+ if (!endpoint) {
47
+ throw new Error('API endpoint is required');
48
+ }
49
+ if (!message || !message.trim()) {
50
+ throw new Error('Message cannot be empty');
51
+ }
52
+ const payload = {
53
+ message: message.trim(),
54
+ sessionId,
55
+ userId,
56
+ userEmail,
57
+ userName,
58
+ currentDate: getCurrentDate(),
59
+ currentTime: getCurrentTime(),
60
+ };
61
+ try {
62
+ const response = await fetch(endpoint, {
63
+ method: 'POST',
64
+ headers: {
65
+ 'Content-Type': 'application/json',
66
+ },
67
+ body: JSON.stringify(payload),
68
+ });
69
+ if (!response.ok) {
70
+ const errorText = await response.text().catch(() => response.statusText);
71
+ throw new Error(`API error: ${response.status} - ${errorText}`);
72
+ }
73
+ const data = await response.json();
74
+ // Validate response structure
75
+ if (!data.message || !data.sessionId) {
76
+ throw new Error('Invalid API response: missing required fields');
77
+ }
78
+ return data;
79
+ }
80
+ catch (error) {
81
+ if (error instanceof Error) {
82
+ // Re-throw with more context if it's a fetch error
83
+ if (error.name === 'TypeError' && error.message.includes('fetch')) {
84
+ throw new Error('Network error: Unable to reach the API. Please check your connection.');
85
+ }
86
+ throw error;
87
+ }
88
+ throw new Error('Unknown error occurred while calling the API');
89
+ }
90
+ }
91
+ /**
92
+ * Creates an AbortController for cancelling requests
93
+ * Useful for cleanup when component unmounts
94
+ */
95
+ export function createRequestController() {
96
+ return new AbortController();
97
+ }
98
+ /**
99
+ * Sends a message to the API with abort support
100
+ *
101
+ * @param endpoint - The API endpoint URL
102
+ * @param message - The user's message
103
+ * @param sessionId - The current session ID
104
+ * @param userId - The user's ID
105
+ * @param userEmail - The user's email
106
+ * @param userName - The user's name
107
+ * @param signal - AbortSignal for cancelling the request
108
+ * @returns Promise with the API response
109
+ */
110
+ export async function sendMessageWithAbort(endpoint, message, sessionId, userId, userEmail, userName, signal) {
111
+ const payload = {
112
+ message: message.trim(),
113
+ sessionId,
114
+ userId,
115
+ userEmail,
116
+ userName,
117
+ currentDate: getCurrentDate(),
118
+ currentTime: getCurrentTime(),
119
+ };
120
+ const response = await fetch(endpoint, {
121
+ method: 'POST',
122
+ headers: {
123
+ 'Content-Type': 'application/json',
124
+ },
125
+ body: JSON.stringify(payload),
126
+ signal,
127
+ });
128
+ if (!response.ok) {
129
+ const errorText = await response.text().catch(() => response.statusText);
130
+ throw new Error(`API error: ${response.status} - ${errorText}`);
131
+ }
132
+ const data = await response.json();
133
+ if (!data.message || !data.sessionId) {
134
+ throw new Error('Invalid API response: missing required fields');
135
+ }
136
+ return data;
137
+ }
138
+ //# sourceMappingURL=api.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api.js","sourceRoot":"","sources":["../../../../src/components/xplor-assistant/utils/api.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * API integration utilities for the xplor-assistant component\n */\n\nimport { AssistantAPIRequest, AssistantAPIResponse } from '../internal/types';\n\n/**\n * Generates a unique session ID\n * Format: session_${timestamp}_${random}\n */\nexport function generateSessionId(): string {\n const timestamp = Date.now();\n const random = Math.random().toString(36).substring(2, 11);\n return `session_${timestamp}_${random}`;\n}\n\n/**\n * Formats the current date as YYYY-MM-DD\n */\nexport function getCurrentDate(): string {\n const now = new Date();\n const year = now.getFullYear();\n const month = String(now.getMonth() + 1).padStart(2, '0');\n const day = String(now.getDate()).padStart(2, '0');\n return `${year}-${month}-${day}`;\n}\n\n/**\n * Formats the current time as HH:MM:SS\n */\nexport function getCurrentTime(): string {\n const now = new Date();\n const hours = String(now.getHours()).padStart(2, '0');\n const minutes = String(now.getMinutes()).padStart(2, '0');\n const seconds = String(now.getSeconds()).padStart(2, '0');\n return `${hours}:${minutes}:${seconds}`;\n}\n\n/**\n * Sends a message to the assistant API\n *\n * @param endpoint - The API endpoint URL\n * @param message - The user's message\n * @param sessionId - The current session ID\n * @param userId - The user's ID\n * @param userEmail - The user's email\n * @param userName - The user's name\n * @returns Promise with the API response\n * @throws Error if the API call fails\n */\nexport async function sendMessageToAPI(\n endpoint: string,\n message: string,\n sessionId: string,\n userId: string,\n userEmail: string,\n userName: string\n): Promise<AssistantAPIResponse> {\n if (!endpoint) {\n throw new Error('API endpoint is required');\n }\n\n if (!message || !message.trim()) {\n throw new Error('Message cannot be empty');\n }\n\n const payload: AssistantAPIRequest = {\n message: message.trim(),\n sessionId,\n userId,\n userEmail,\n userName,\n currentDate: getCurrentDate(),\n currentTime: getCurrentTime(),\n };\n\n try {\n const response = await fetch(endpoint, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify(payload),\n });\n\n if (!response.ok) {\n const errorText = await response.text().catch(() => response.statusText);\n throw new Error(`API error: ${response.status} - ${errorText}`);\n }\n\n const data: AssistantAPIResponse = await response.json();\n\n // Validate response structure\n if (!data.message || !data.sessionId) {\n throw new Error('Invalid API response: missing required fields');\n }\n\n return data;\n } catch (error) {\n if (error instanceof Error) {\n // Re-throw with more context if it's a fetch error\n if (error.name === 'TypeError' && error.message.includes('fetch')) {\n throw new Error('Network error: Unable to reach the API. Please check your connection.');\n }\n throw error;\n }\n throw new Error('Unknown error occurred while calling the API');\n }\n}\n\n/**\n * Creates an AbortController for cancelling requests\n * Useful for cleanup when component unmounts\n */\nexport function createRequestController(): AbortController {\n return new AbortController();\n}\n\n/**\n * Sends a message to the API with abort support\n *\n * @param endpoint - The API endpoint URL\n * @param message - The user's message\n * @param sessionId - The current session ID\n * @param userId - The user's ID\n * @param userEmail - The user's email\n * @param userName - The user's name\n * @param signal - AbortSignal for cancelling the request\n * @returns Promise with the API response\n */\nexport async function sendMessageWithAbort(\n endpoint: string,\n message: string,\n sessionId: string,\n userId: string,\n userEmail: string,\n userName: string,\n signal?: AbortSignal\n): Promise<AssistantAPIResponse> {\n const payload: AssistantAPIRequest = {\n message: message.trim(),\n sessionId,\n userId,\n userEmail,\n userName,\n currentDate: getCurrentDate(),\n currentTime: getCurrentTime(),\n };\n\n const response = await fetch(endpoint, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify(payload),\n signal,\n });\n\n if (!response.ok) {\n const errorText = await response.text().catch(() => response.statusText);\n throw new Error(`API error: ${response.status} - ${errorText}`);\n }\n\n const data: AssistantAPIResponse = await response.json();\n\n if (!data.message || !data.sessionId) {\n throw new Error('Invalid API response: missing required fields');\n }\n\n return data;\n}\n"]}
@@ -0,0 +1,53 @@
1
+ /**
2
+ * SVG icon definitions for the xplor-assistant component
3
+ * Following the pattern used in xplor-button component
4
+ */
5
+ /**
6
+ * Microphone icon for voice input button
7
+ */
8
+ export const microphoneIcon = `
9
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
10
+ <path d="M12 1a3 3 0 0 0-3 3v8a3 3 0 0 0 6 0V4a3 3 0 0 0-3-3z"></path>
11
+ <path d="M19 10v2a7 7 0 0 1-14 0v-2"></path>
12
+ <line x1="12" y1="19" x2="12" y2="23"></line>
13
+ <line x1="8" y1="23" x2="16" y2="23"></line>
14
+ </svg>
15
+ `;
16
+ /**
17
+ * Send arrow icon for send message button
18
+ */
19
+ export const sendIcon = `
20
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
21
+ <line x1="22" y1="2" x2="11" y2="13"></line>
22
+ <polygon points="22 2 15 22 11 13 2 9 22 2"></polygon>
23
+ </svg>
24
+ `;
25
+ /**
26
+ * Speaker icon for text-to-speech button
27
+ */
28
+ export const speakerIcon = `
29
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
30
+ <polygon points="11 5 6 9 2 9 2 15 6 15 11 19 11 5"></polygon>
31
+ <path d="M15.54 8.46a5 5 0 0 1 0 7.07"></path>
32
+ <path d="M19.07 4.93a10 10 0 0 1 0 14.14"></path>
33
+ </svg>
34
+ `;
35
+ /**
36
+ * Stop square icon for stopping speech
37
+ */
38
+ export const stopIcon = `
39
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor" stroke="none">
40
+ <rect x="6" y="6" width="12" height="12" rx="2"></rect>
41
+ </svg>
42
+ `;
43
+ /**
44
+ * Muted speaker icon for when TTS is disabled
45
+ */
46
+ export const speakerMutedIcon = `
47
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
48
+ <polygon points="11 5 6 9 2 9 2 15 6 15 11 19 11 5"></polygon>
49
+ <line x1="23" y1="9" x2="17" y2="15"></line>
50
+ <line x1="17" y1="9" x2="23" y2="15"></line>
51
+ </svg>
52
+ `;
53
+ //# sourceMappingURL=icons.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"icons.js","sourceRoot":"","sources":["../../../../src/components/xplor-assistant/utils/icons.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;GAEG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG;;;;;;;CAO7B,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,QAAQ,GAAG;;;;;CAKvB,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG;;;;;;CAM1B,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,QAAQ,GAAG;;;;CAIvB,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG;;;;;;CAM/B,CAAC","sourcesContent":["/**\n * SVG icon definitions for the xplor-assistant component\n * Following the pattern used in xplor-button component\n */\n\n/**\n * Microphone icon for voice input button\n */\nexport const microphoneIcon = `\n<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <path d=\"M12 1a3 3 0 0 0-3 3v8a3 3 0 0 0 6 0V4a3 3 0 0 0-3-3z\"></path>\n <path d=\"M19 10v2a7 7 0 0 1-14 0v-2\"></path>\n <line x1=\"12\" y1=\"19\" x2=\"12\" y2=\"23\"></line>\n <line x1=\"8\" y1=\"23\" x2=\"16\" y2=\"23\"></line>\n</svg>\n`;\n\n/**\n * Send arrow icon for send message button\n */\nexport const sendIcon = `\n<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <line x1=\"22\" y1=\"2\" x2=\"11\" y2=\"13\"></line>\n <polygon points=\"22 2 15 22 11 13 2 9 22 2\"></polygon>\n</svg>\n`;\n\n/**\n * Speaker icon for text-to-speech button\n */\nexport const speakerIcon = `\n<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <polygon points=\"11 5 6 9 2 9 2 15 6 15 11 19 11 5\"></polygon>\n <path d=\"M15.54 8.46a5 5 0 0 1 0 7.07\"></path>\n <path d=\"M19.07 4.93a10 10 0 0 1 0 14.14\"></path>\n</svg>\n`;\n\n/**\n * Stop square icon for stopping speech\n */\nexport const stopIcon = `\n<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"currentColor\" stroke=\"none\">\n <rect x=\"6\" y=\"6\" width=\"12\" height=\"12\" rx=\"2\"></rect>\n</svg>\n`;\n\n/**\n * Muted speaker icon for when TTS is disabled\n */\nexport const speakerMutedIcon = `\n<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <polygon points=\"11 5 6 9 2 9 2 15 6 15 11 19 11 5\"></polygon>\n <line x1=\"23\" y1=\"9\" x2=\"17\" y2=\"15\"></line>\n <line x1=\"17\" y1=\"9\" x2=\"23\" y2=\"15\"></line>\n</svg>\n`;\n"]}
@@ -0,0 +1,230 @@
1
+ /**
2
+ * Web Speech API helpers for the xplor-assistant component
3
+ * Handles both Speech Recognition (voice input) and Speech Synthesis (text-to-speech)
4
+ */
5
+ /**
6
+ * Detects browser capabilities for speech features
7
+ */
8
+ export function detectBrowserCapabilities() {
9
+ if (typeof window === 'undefined') {
10
+ return {
11
+ voiceInput: false,
12
+ textToSpeech: false,
13
+ };
14
+ }
15
+ const hasVoiceInput = 'SpeechRecognition' in window ||
16
+ 'webkitSpeechRecognition' in window;
17
+ const hasTTS = 'speechSynthesis' in window;
18
+ return {
19
+ voiceInput: hasVoiceInput,
20
+ textToSpeech: hasTTS,
21
+ };
22
+ }
23
+ /**
24
+ * Speech Recognition Manager
25
+ * Handles voice-to-text functionality
26
+ */
27
+ export class SpeechRecognitionManager {
28
+ constructor() {
29
+ this.recognition = null;
30
+ this.onResultCallback = null;
31
+ this.onErrorCallback = null;
32
+ this.onStartCallback = null;
33
+ this.onEndCallback = null;
34
+ if (typeof window === 'undefined')
35
+ return;
36
+ const SpeechRecognition = window.SpeechRecognition ||
37
+ window.webkitSpeechRecognition;
38
+ if (SpeechRecognition) {
39
+ this.recognition = new SpeechRecognition();
40
+ this.recognition.continuous = false;
41
+ this.recognition.interimResults = false;
42
+ this.recognition.lang = 'en-US';
43
+ this.recognition.maxAlternatives = 1;
44
+ this.recognition.onstart = () => {
45
+ if (this.onStartCallback) {
46
+ this.onStartCallback();
47
+ }
48
+ };
49
+ this.recognition.onresult = (event) => {
50
+ const transcript = event.results[0][0].transcript;
51
+ if (this.onResultCallback) {
52
+ this.onResultCallback(transcript);
53
+ }
54
+ };
55
+ this.recognition.onerror = (event) => {
56
+ const errorMessage = this.getErrorMessage(event.error);
57
+ if (this.onErrorCallback) {
58
+ this.onErrorCallback(errorMessage);
59
+ }
60
+ };
61
+ this.recognition.onend = () => {
62
+ if (this.onEndCallback) {
63
+ this.onEndCallback();
64
+ }
65
+ };
66
+ }
67
+ }
68
+ /**
69
+ * Converts speech recognition error codes to user-friendly messages
70
+ */
71
+ getErrorMessage(error) {
72
+ switch (error) {
73
+ case 'no-speech':
74
+ return 'No speech detected. Please try again.';
75
+ case 'audio-capture':
76
+ return 'No microphone found. Please ensure a microphone is connected.';
77
+ case 'not-allowed':
78
+ return 'Microphone permission denied. Please allow microphone access.';
79
+ case 'network':
80
+ return 'Network error. Please check your connection.';
81
+ default:
82
+ return `Speech recognition error: ${error}`;
83
+ }
84
+ }
85
+ /**
86
+ * Starts listening for voice input
87
+ */
88
+ start() {
89
+ if (!this.recognition) {
90
+ console.error('Speech recognition not supported');
91
+ return;
92
+ }
93
+ try {
94
+ this.recognition.start();
95
+ }
96
+ catch (error) {
97
+ console.error('Failed to start speech recognition:', error);
98
+ if (this.onErrorCallback) {
99
+ this.onErrorCallback('Failed to start voice recognition');
100
+ }
101
+ }
102
+ }
103
+ /**
104
+ * Stops listening for voice input
105
+ */
106
+ stop() {
107
+ if (this.recognition) {
108
+ this.recognition.stop();
109
+ }
110
+ }
111
+ /**
112
+ * Sets the callback for when a result is received
113
+ */
114
+ onResult(callback) {
115
+ this.onResultCallback = callback;
116
+ }
117
+ /**
118
+ * Sets the callback for when an error occurs
119
+ */
120
+ onError(callback) {
121
+ this.onErrorCallback = callback;
122
+ }
123
+ /**
124
+ * Sets the callback for when recognition starts
125
+ */
126
+ onStart(callback) {
127
+ this.onStartCallback = callback;
128
+ }
129
+ /**
130
+ * Sets the callback for when recognition ends
131
+ */
132
+ onEnd(callback) {
133
+ this.onEndCallback = callback;
134
+ }
135
+ /**
136
+ * Checks if speech recognition is available
137
+ */
138
+ isAvailable() {
139
+ return this.recognition !== null;
140
+ }
141
+ }
142
+ /**
143
+ * Speech Synthesis Manager
144
+ * Handles text-to-speech functionality
145
+ */
146
+ export class SpeechSynthesisManager {
147
+ constructor() {
148
+ this.currentUtterance = null;
149
+ this.onStartCallback = null;
150
+ this.onEndCallback = null;
151
+ }
152
+ /**
153
+ * Speaks the given text
154
+ */
155
+ speak(text) {
156
+ if (typeof window === 'undefined' || !('speechSynthesis' in window)) {
157
+ console.error('Speech synthesis not supported');
158
+ return;
159
+ }
160
+ // Stop any ongoing speech first
161
+ this.stop();
162
+ this.currentUtterance = new SpeechSynthesisUtterance(text);
163
+ this.currentUtterance.lang = 'en-US';
164
+ this.currentUtterance.rate = 1.0;
165
+ this.currentUtterance.pitch = 1.0;
166
+ this.currentUtterance.volume = 1.0;
167
+ this.currentUtterance.onstart = () => {
168
+ if (this.onStartCallback) {
169
+ this.onStartCallback();
170
+ }
171
+ };
172
+ this.currentUtterance.onend = () => {
173
+ if (this.onEndCallback) {
174
+ this.onEndCallback();
175
+ }
176
+ this.currentUtterance = null;
177
+ };
178
+ this.currentUtterance.onerror = (event) => {
179
+ console.error('Speech synthesis error:', event);
180
+ if (this.onEndCallback) {
181
+ this.onEndCallback();
182
+ }
183
+ this.currentUtterance = null;
184
+ };
185
+ window.speechSynthesis.speak(this.currentUtterance);
186
+ }
187
+ /**
188
+ * Stops any ongoing speech
189
+ */
190
+ stop() {
191
+ if (typeof window === 'undefined' || !('speechSynthesis' in window)) {
192
+ return;
193
+ }
194
+ if (window.speechSynthesis.speaking) {
195
+ window.speechSynthesis.cancel();
196
+ if (this.onEndCallback) {
197
+ this.onEndCallback();
198
+ }
199
+ }
200
+ this.currentUtterance = null;
201
+ }
202
+ /**
203
+ * Checks if currently speaking
204
+ */
205
+ isSpeaking() {
206
+ if (typeof window === 'undefined' || !('speechSynthesis' in window)) {
207
+ return false;
208
+ }
209
+ return window.speechSynthesis.speaking;
210
+ }
211
+ /**
212
+ * Sets the callback for when speech starts
213
+ */
214
+ onStart(callback) {
215
+ this.onStartCallback = callback;
216
+ }
217
+ /**
218
+ * Sets the callback for when speech ends
219
+ */
220
+ onEnd(callback) {
221
+ this.onEndCallback = callback;
222
+ }
223
+ /**
224
+ * Checks if speech synthesis is available
225
+ */
226
+ isAvailable() {
227
+ return typeof window !== 'undefined' && 'speechSynthesis' in window;
228
+ }
229
+ }
230
+ //# sourceMappingURL=speech.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"speech.js","sourceRoot":"","sources":["../../../../src/components/xplor-assistant/utils/speech.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Web Speech API helpers for the xplor-assistant component\n * Handles both Speech Recognition (voice input) and Speech Synthesis (text-to-speech)\n */\n\nimport { BrowserCapabilities } from '../internal/types';\n\n/**\n * Detects browser capabilities for speech features\n */\nexport function detectBrowserCapabilities(): BrowserCapabilities {\n if (typeof window === 'undefined') {\n return {\n voiceInput: false,\n textToSpeech: false,\n };\n }\n\n const hasVoiceInput =\n 'SpeechRecognition' in window ||\n 'webkitSpeechRecognition' in window;\n\n const hasTTS = 'speechSynthesis' in window;\n\n return {\n voiceInput: hasVoiceInput,\n textToSpeech: hasTTS,\n };\n}\n\n/**\n * Speech Recognition Manager\n * Handles voice-to-text functionality\n */\nexport class SpeechRecognitionManager {\n private recognition: any = null;\n private onResultCallback: ((transcript: string) => void) | null = null;\n private onErrorCallback: ((error: string) => void) | null = null;\n private onStartCallback: (() => void) | null = null;\n private onEndCallback: (() => void) | null = null;\n\n constructor() {\n if (typeof window === 'undefined') return;\n\n const SpeechRecognition =\n (window as any).SpeechRecognition ||\n (window as any).webkitSpeechRecognition;\n\n if (SpeechRecognition) {\n this.recognition = new SpeechRecognition();\n this.recognition.continuous = false;\n this.recognition.interimResults = false;\n this.recognition.lang = 'en-US';\n this.recognition.maxAlternatives = 1;\n\n this.recognition.onstart = () => {\n if (this.onStartCallback) {\n this.onStartCallback();\n }\n };\n\n this.recognition.onresult = (event: any) => {\n const transcript = event.results[0][0].transcript;\n if (this.onResultCallback) {\n this.onResultCallback(transcript);\n }\n };\n\n this.recognition.onerror = (event: any) => {\n const errorMessage = this.getErrorMessage(event.error);\n if (this.onErrorCallback) {\n this.onErrorCallback(errorMessage);\n }\n };\n\n this.recognition.onend = () => {\n if (this.onEndCallback) {\n this.onEndCallback();\n }\n };\n }\n }\n\n /**\n * Converts speech recognition error codes to user-friendly messages\n */\n private getErrorMessage(error: string): string {\n switch (error) {\n case 'no-speech':\n return 'No speech detected. Please try again.';\n case 'audio-capture':\n return 'No microphone found. Please ensure a microphone is connected.';\n case 'not-allowed':\n return 'Microphone permission denied. Please allow microphone access.';\n case 'network':\n return 'Network error. Please check your connection.';\n default:\n return `Speech recognition error: ${error}`;\n }\n }\n\n /**\n * Starts listening for voice input\n */\n start(): void {\n if (!this.recognition) {\n console.error('Speech recognition not supported');\n return;\n }\n\n try {\n this.recognition.start();\n } catch (error) {\n console.error('Failed to start speech recognition:', error);\n if (this.onErrorCallback) {\n this.onErrorCallback('Failed to start voice recognition');\n }\n }\n }\n\n /**\n * Stops listening for voice input\n */\n stop(): void {\n if (this.recognition) {\n this.recognition.stop();\n }\n }\n\n /**\n * Sets the callback for when a result is received\n */\n onResult(callback: (transcript: string) => void): void {\n this.onResultCallback = callback;\n }\n\n /**\n * Sets the callback for when an error occurs\n */\n onError(callback: (error: string) => void): void {\n this.onErrorCallback = callback;\n }\n\n /**\n * Sets the callback for when recognition starts\n */\n onStart(callback: () => void): void {\n this.onStartCallback = callback;\n }\n\n /**\n * Sets the callback for when recognition ends\n */\n onEnd(callback: () => void): void {\n this.onEndCallback = callback;\n }\n\n /**\n * Checks if speech recognition is available\n */\n isAvailable(): boolean {\n return this.recognition !== null;\n }\n}\n\n/**\n * Speech Synthesis Manager\n * Handles text-to-speech functionality\n */\nexport class SpeechSynthesisManager {\n private currentUtterance: SpeechSynthesisUtterance | null = null;\n private onStartCallback: (() => void) | null = null;\n private onEndCallback: (() => void) | null = null;\n\n /**\n * Speaks the given text\n */\n speak(text: string): void {\n if (typeof window === 'undefined' || !('speechSynthesis' in window)) {\n console.error('Speech synthesis not supported');\n return;\n }\n\n // Stop any ongoing speech first\n this.stop();\n\n this.currentUtterance = new SpeechSynthesisUtterance(text);\n this.currentUtterance.lang = 'en-US';\n this.currentUtterance.rate = 1.0;\n this.currentUtterance.pitch = 1.0;\n this.currentUtterance.volume = 1.0;\n\n this.currentUtterance.onstart = () => {\n if (this.onStartCallback) {\n this.onStartCallback();\n }\n };\n\n this.currentUtterance.onend = () => {\n if (this.onEndCallback) {\n this.onEndCallback();\n }\n this.currentUtterance = null;\n };\n\n this.currentUtterance.onerror = (event) => {\n console.error('Speech synthesis error:', event);\n if (this.onEndCallback) {\n this.onEndCallback();\n }\n this.currentUtterance = null;\n };\n\n window.speechSynthesis.speak(this.currentUtterance);\n }\n\n /**\n * Stops any ongoing speech\n */\n stop(): void {\n if (typeof window === 'undefined' || !('speechSynthesis' in window)) {\n return;\n }\n\n if (window.speechSynthesis.speaking) {\n window.speechSynthesis.cancel();\n if (this.onEndCallback) {\n this.onEndCallback();\n }\n }\n this.currentUtterance = null;\n }\n\n /**\n * Checks if currently speaking\n */\n isSpeaking(): boolean {\n if (typeof window === 'undefined' || !('speechSynthesis' in window)) {\n return false;\n }\n return window.speechSynthesis.speaking;\n }\n\n /**\n * Sets the callback for when speech starts\n */\n onStart(callback: () => void): void {\n this.onStartCallback = callback;\n }\n\n /**\n * Sets the callback for when speech ends\n */\n onEnd(callback: () => void): void {\n this.onEndCallback = callback;\n }\n\n /**\n * Checks if speech synthesis is available\n */\n isAvailable(): boolean {\n return typeof window !== 'undefined' && 'speechSynthesis' in window;\n }\n}\n"]}