@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.
- package/LICENSE +21 -0
- package/components/index.d.ts +33 -0
- package/components/index.js +2324 -0
- package/components/index.js.map +1 -0
- package/components/p-B1W2qj2l.js +50 -0
- package/components/p-B1W2qj2l.js.map +1 -0
- package/components/p-BK_ATKuB.js +37 -0
- package/components/p-BK_ATKuB.js.map +1 -0
- package/components/p-CBSi5kQB.js +56 -0
- package/components/p-CBSi5kQB.js.map +1 -0
- package/components/p-CTD6SyTD.js +181 -0
- package/components/p-CTD6SyTD.js.map +1 -0
- package/components/p-Ddr35stE.js +117 -0
- package/components/p-Ddr35stE.js.map +1 -0
- package/components/p-x30CgLRv.js +184 -0
- package/components/p-x30CgLRv.js.map +1 -0
- package/components/xplor-alert-dialog.d.ts +11 -0
- package/components/xplor-alert-dialog.js +85 -0
- package/components/xplor-alert-dialog.js.map +1 -0
- package/components/xplor-alert-message.d.ts +11 -0
- package/components/xplor-alert-message.js +48 -0
- package/components/xplor-alert-message.js.map +1 -0
- package/components/xplor-assistant.d.ts +11 -0
- package/components/xplor-assistant.js +763 -0
- package/components/xplor-assistant.js.map +1 -0
- package/components/xplor-autocomplete.d.ts +11 -0
- package/components/xplor-autocomplete.js +268 -0
- package/components/xplor-autocomplete.js.map +1 -0
- package/components/xplor-avatar-and-name.d.ts +11 -0
- package/components/xplor-avatar-and-name.js +48 -0
- package/components/xplor-avatar-and-name.js.map +1 -0
- package/components/xplor-avatar.d.ts +11 -0
- package/components/xplor-avatar.js +9 -0
- package/components/xplor-avatar.js.map +1 -0
- package/components/xplor-badge-active.d.ts +11 -0
- package/components/xplor-badge-active.js +35 -0
- package/components/xplor-badge-active.js.map +1 -0
- package/components/xplor-badge-archived.d.ts +11 -0
- package/components/xplor-badge-archived.js +35 -0
- package/components/xplor-badge-archived.js.map +1 -0
- package/components/xplor-badge-deleted.d.ts +11 -0
- package/components/xplor-badge-deleted.js +35 -0
- package/components/xplor-badge-deleted.js.map +1 -0
- package/components/xplor-badge-expired.d.ts +11 -0
- package/components/xplor-badge-expired.js +35 -0
- package/components/xplor-badge-expired.js.map +1 -0
- package/components/xplor-badge-inactive.d.ts +11 -0
- package/components/xplor-badge-inactive.js +35 -0
- package/components/xplor-badge-inactive.js.map +1 -0
- package/components/xplor-badge-recalled.d.ts +11 -0
- package/components/xplor-badge-recalled.js +35 -0
- package/components/xplor-badge-recalled.js.map +1 -0
- package/components/xplor-badge-session-booking.d.ts +11 -0
- package/components/xplor-badge-session-booking.js +60 -0
- package/components/xplor-badge-session-booking.js.map +1 -0
- package/components/xplor-badge-upcoming.d.ts +11 -0
- package/components/xplor-badge-upcoming.js +35 -0
- package/components/xplor-badge-upcoming.js.map +1 -0
- package/components/xplor-badge-waitlist.d.ts +11 -0
- package/components/xplor-badge-waitlist.js +35 -0
- package/components/xplor-badge-waitlist.js.map +1 -0
- package/components/xplor-badge.d.ts +11 -0
- package/components/xplor-badge.js +151 -0
- package/components/xplor-badge.js.map +1 -0
- package/components/xplor-btn-back-to-parent.d.ts +11 -0
- package/components/xplor-btn-back-to-parent.js +72 -0
- package/components/xplor-btn-back-to-parent.js.map +1 -0
- package/components/xplor-btn-back.d.ts +11 -0
- package/components/xplor-btn-back.js +76 -0
- package/components/xplor-btn-back.js.map +1 -0
- package/components/xplor-btn-icon.d.ts +11 -0
- package/components/xplor-btn-icon.js +77 -0
- package/components/xplor-btn-icon.js.map +1 -0
- package/components/xplor-btn-menu.d.ts +11 -0
- package/components/xplor-btn-menu.js +105 -0
- package/components/xplor-btn-menu.js.map +1 -0
- package/components/xplor-btn-toggle-group.d.ts +11 -0
- package/components/xplor-btn-toggle-group.js +46 -0
- package/components/xplor-btn-toggle-group.js.map +1 -0
- package/components/xplor-btn-toggle-secondary.d.ts +11 -0
- package/components/xplor-btn-toggle-secondary.js +64 -0
- package/components/xplor-btn-toggle-secondary.js.map +1 -0
- package/components/xplor-btn-toggle.d.ts +11 -0
- package/components/xplor-btn-toggle.js +69 -0
- package/components/xplor-btn-toggle.js.map +1 -0
- package/components/xplor-btn-tooltip.d.ts +11 -0
- package/components/xplor-btn-tooltip.js +58 -0
- package/components/xplor-btn-tooltip.js.map +1 -0
- package/components/xplor-button.d.ts +11 -0
- package/components/xplor-button.js +9 -0
- package/components/xplor-button.js.map +1 -0
- package/components/xplor-chat-widget.d.ts +11 -0
- package/components/xplor-chat-widget.js +104 -0
- package/components/xplor-chat-widget.js.map +1 -0
- package/components/xplor-checkbox.d.ts +11 -0
- package/components/xplor-checkbox.js +124 -0
- package/components/xplor-checkbox.js.map +1 -0
- package/components/xplor-combobox.d.ts +11 -0
- package/components/xplor-combobox.js +278 -0
- package/components/xplor-combobox.js.map +1 -0
- package/components/xplor-datatable.d.ts +11 -0
- package/components/xplor-datatable.js +243 -0
- package/components/xplor-datatable.js.map +1 -0
- package/components/xplor-date-picker.d.ts +11 -0
- package/components/xplor-date-picker.js +268 -0
- package/components/xplor-date-picker.js.map +1 -0
- package/components/xplor-drag-and-drop-input.d.ts +11 -0
- package/components/xplor-drag-and-drop-input.js +137 -0
- package/components/xplor-drag-and-drop-input.js.map +1 -0
- package/components/xplor-dropdown.d.ts +11 -0
- package/components/xplor-dropdown.js +9 -0
- package/components/xplor-dropdown.js.map +1 -0
- package/components/xplor-expansion-panel.d.ts +11 -0
- package/components/xplor-expansion-panel.js +74 -0
- package/components/xplor-expansion-panel.js.map +1 -0
- package/components/xplor-expansion-panels.d.ts +11 -0
- package/components/xplor-expansion-panels.js +70 -0
- package/components/xplor-expansion-panels.js.map +1 -0
- package/components/xplor-file-upload.d.ts +11 -0
- package/components/xplor-file-upload.js +183 -0
- package/components/xplor-file-upload.js.map +1 -0
- package/components/xplor-inline-checkbox.d.ts +11 -0
- package/components/xplor-inline-checkbox.js +75 -0
- package/components/xplor-inline-checkbox.js.map +1 -0
- package/components/xplor-inline-date-picker.d.ts +11 -0
- package/components/xplor-inline-date-picker.js +9 -0
- package/components/xplor-inline-date-picker.js.map +1 -0
- package/components/xplor-inline-switch.d.ts +11 -0
- package/components/xplor-inline-switch.js +68 -0
- package/components/xplor-inline-switch.js.map +1 -0
- package/components/xplor-input-file.d.ts +11 -0
- package/components/xplor-input-file.js +121 -0
- package/components/xplor-input-file.js.map +1 -0
- package/components/xplor-input-search.d.ts +11 -0
- package/components/xplor-input-search.js +89 -0
- package/components/xplor-input-search.js.map +1 -0
- package/components/xplor-input-select.d.ts +11 -0
- package/components/xplor-input-select.js +168 -0
- package/components/xplor-input-select.js.map +1 -0
- package/components/xplor-input-send.d.ts +11 -0
- package/components/xplor-input-send.js +87 -0
- package/components/xplor-input-send.js.map +1 -0
- package/components/xplor-input-text-area.d.ts +11 -0
- package/components/xplor-input-text-area.js +131 -0
- package/components/xplor-input-text-area.js.map +1 -0
- package/components/xplor-input-text-secondary.d.ts +11 -0
- package/components/xplor-input-text-secondary.js +94 -0
- package/components/xplor-input-text-secondary.js.map +1 -0
- package/components/xplor-input-text.d.ts +11 -0
- package/components/xplor-input-text.js +129 -0
- package/components/xplor-input-text.js.map +1 -0
- package/components/xplor-input-title.d.ts +11 -0
- package/components/xplor-input-title.js +68 -0
- package/components/xplor-input-title.js.map +1 -0
- package/components/xplor-links.d.ts +11 -0
- package/components/xplor-links.js +38 -0
- package/components/xplor-links.js.map +1 -0
- package/components/xplor-modal-persistent.d.ts +11 -0
- package/components/xplor-modal-persistent.js +65 -0
- package/components/xplor-modal-persistent.js.map +1 -0
- package/components/xplor-modal.d.ts +11 -0
- package/components/xplor-modal.js +9 -0
- package/components/xplor-modal.js.map +1 -0
- package/components/xplor-nav-tabs.d.ts +11 -0
- package/components/xplor-nav-tabs.js +58 -0
- package/components/xplor-nav-tabs.js.map +1 -0
- package/components/xplor-section-card.d.ts +11 -0
- package/components/xplor-section-card.js +46 -0
- package/components/xplor-section-card.js.map +1 -0
- package/components/xplor-section-heading.d.ts +11 -0
- package/components/xplor-section-heading.js +43 -0
- package/components/xplor-section-heading.js.map +1 -0
- package/components/xplor-table.d.ts +11 -0
- package/components/xplor-table.js +275 -0
- package/components/xplor-table.js.map +1 -0
- package/components/xplor-text-bubble.d.ts +11 -0
- package/components/xplor-text-bubble.js +42 -0
- package/components/xplor-text-bubble.js.map +1 -0
- package/components/xplor-text-field.d.ts +11 -0
- package/components/xplor-text-field.js +190 -0
- package/components/xplor-text-field.js.map +1 -0
- package/components/xplor-time-picker.d.ts +11 -0
- package/components/xplor-time-picker.js +348 -0
- package/components/xplor-time-picker.js.map +1 -0
- package/components/xplor-tooltip.d.ts +11 -0
- package/components/xplor-tooltip.js +9 -0
- package/components/xplor-tooltip.js.map +1 -0
- package/dist/cjs/index-Bc5o_4vY.js +2594 -0
- package/dist/cjs/index-Bc5o_4vY.js.map +1 -0
- package/dist/cjs/index.cjs.js +5 -0
- package/dist/cjs/index.cjs.js.map +1 -0
- package/dist/cjs/loader.cjs.js +15 -0
- package/dist/cjs/loader.cjs.js.map +1 -0
- package/dist/cjs/xplor-alert-dialog_57.cjs.entry.js +4750 -0
- package/dist/cjs/xplor-alert-dialog_57.cjs.entry.js.map +1 -0
- package/dist/cjs/xplor-component-library.cjs.js +27 -0
- package/dist/cjs/xplor-component-library.cjs.js.map +1 -0
- package/dist/collection/collection-manifest.json +69 -0
- package/dist/collection/components/element-interface.js +2 -0
- package/dist/collection/components/element-interface.js.map +1 -0
- package/dist/collection/components/helpers.js +129 -0
- package/dist/collection/components/helpers.js.map +1 -0
- package/dist/collection/components/xplor-alert-dialog/xplor-alert-dialog.css +348 -0
- package/dist/collection/components/xplor-alert-dialog/xplor-alert-dialog.js +163 -0
- package/dist/collection/components/xplor-alert-dialog/xplor-alert-dialog.js.map +1 -0
- package/dist/collection/components/xplor-alert-message/xplor-alert-message.css +352 -0
- package/dist/collection/components/xplor-alert-message/xplor-alert-message.js +110 -0
- package/dist/collection/components/xplor-alert-message/xplor-alert-message.js.map +1 -0
- package/dist/collection/components/xplor-assistant/internal/AssistantInput.js +39 -0
- package/dist/collection/components/xplor-assistant/internal/AssistantInput.js.map +1 -0
- package/dist/collection/components/xplor-assistant/internal/AssistantMessage.js +35 -0
- package/dist/collection/components/xplor-assistant/internal/AssistantMessage.js.map +1 -0
- package/dist/collection/components/xplor-assistant/internal/QuickReplies.js +13 -0
- package/dist/collection/components/xplor-assistant/internal/QuickReplies.js.map +1 -0
- package/dist/collection/components/xplor-assistant/internal/TypingIndicator.js +9 -0
- package/dist/collection/components/xplor-assistant/internal/TypingIndicator.js.map +1 -0
- package/dist/collection/components/xplor-assistant/internal/types.js +2 -0
- package/dist/collection/components/xplor-assistant/internal/types.js.map +1 -0
- package/dist/collection/components/xplor-assistant/utils/api.js +138 -0
- package/dist/collection/components/xplor-assistant/utils/api.js.map +1 -0
- package/dist/collection/components/xplor-assistant/utils/icons.js +53 -0
- package/dist/collection/components/xplor-assistant/utils/icons.js.map +1 -0
- package/dist/collection/components/xplor-assistant/utils/speech.js +230 -0
- package/dist/collection/components/xplor-assistant/utils/speech.js.map +1 -0
- package/dist/collection/components/xplor-assistant/xplor-assistant.css +1384 -0
- package/dist/collection/components/xplor-assistant/xplor-assistant.js +675 -0
- package/dist/collection/components/xplor-assistant/xplor-assistant.js.map +1 -0
- package/dist/collection/components/xplor-autocomplete/xplor-autocomplete.css +458 -0
- package/dist/collection/components/xplor-autocomplete/xplor-autocomplete.js +613 -0
- package/dist/collection/components/xplor-autocomplete/xplor-autocomplete.js.map +1 -0
- package/dist/collection/components/xplor-avatar/avatar.stories.js +175 -0
- package/dist/collection/components/xplor-avatar/avatar.stories.js.map +1 -0
- package/dist/collection/components/xplor-avatar/xplor-avatar.css +271 -0
- package/dist/collection/components/xplor-avatar/xplor-avatar.js +186 -0
- package/dist/collection/components/xplor-avatar/xplor-avatar.js.map +1 -0
- package/dist/collection/components/xplor-avatar-and-name/xplor-avatar-and-name.css +284 -0
- package/dist/collection/components/xplor-avatar-and-name/xplor-avatar-and-name.js +122 -0
- package/dist/collection/components/xplor-avatar-and-name/xplor-avatar-and-name.js.map +1 -0
- package/dist/collection/components/xplor-badge/xplor-badge.css +1100 -0
- package/dist/collection/components/xplor-badge/xplor-badge.js +273 -0
- package/dist/collection/components/xplor-badge/xplor-badge.js.map +1 -0
- package/dist/collection/components/xplor-badge-active/xplor-badge-active.css +280 -0
- package/dist/collection/components/xplor-badge-active/xplor-badge-active.js +19 -0
- package/dist/collection/components/xplor-badge-active/xplor-badge-active.js.map +1 -0
- package/dist/collection/components/xplor-badge-archived/xplor-badge-archived.css +280 -0
- package/dist/collection/components/xplor-badge-archived/xplor-badge-archived.js +19 -0
- package/dist/collection/components/xplor-badge-archived/xplor-badge-archived.js.map +1 -0
- package/dist/collection/components/xplor-badge-deleted/xplor-badge-deleted.css +280 -0
- package/dist/collection/components/xplor-badge-deleted/xplor-badge-deleted.js +19 -0
- package/dist/collection/components/xplor-badge-deleted/xplor-badge-deleted.js.map +1 -0
- package/dist/collection/components/xplor-badge-expired/xplor-badge-expired.css +280 -0
- package/dist/collection/components/xplor-badge-expired/xplor-badge-expired.js +19 -0
- package/dist/collection/components/xplor-badge-expired/xplor-badge-expired.js.map +1 -0
- package/dist/collection/components/xplor-badge-inactive/xplor-badge-inactive.css +280 -0
- package/dist/collection/components/xplor-badge-inactive/xplor-badge-inactive.js +19 -0
- package/dist/collection/components/xplor-badge-inactive/xplor-badge-inactive.js.map +1 -0
- package/dist/collection/components/xplor-badge-recalled/xplor-badge-recalled.css +280 -0
- package/dist/collection/components/xplor-badge-recalled/xplor-badge-recalled.js +19 -0
- package/dist/collection/components/xplor-badge-recalled/xplor-badge-recalled.js.map +1 -0
- package/dist/collection/components/xplor-badge-session-booking/xplor-badge-session-booking.css +300 -0
- package/dist/collection/components/xplor-badge-session-booking/xplor-badge-session-booking.js +93 -0
- package/dist/collection/components/xplor-badge-session-booking/xplor-badge-session-booking.js.map +1 -0
- package/dist/collection/components/xplor-badge-upcoming/xplor-badge-upcoming.css +280 -0
- package/dist/collection/components/xplor-badge-upcoming/xplor-badge-upcoming.js +19 -0
- package/dist/collection/components/xplor-badge-upcoming/xplor-badge-upcoming.js.map +1 -0
- package/dist/collection/components/xplor-badge-waitlist/xplor-badge-waitlist.css +280 -0
- package/dist/collection/components/xplor-badge-waitlist/xplor-badge-waitlist.js +19 -0
- package/dist/collection/components/xplor-badge-waitlist/xplor-badge-waitlist.js.map +1 -0
- package/dist/collection/components/xplor-btn-back/xplor-btn-back.css +306 -0
- package/dist/collection/components/xplor-btn-back/xplor-btn-back.js +182 -0
- package/dist/collection/components/xplor-btn-back/xplor-btn-back.js.map +1 -0
- package/dist/collection/components/xplor-btn-back-to-parent/xplor-btn-back-to-parent.css +306 -0
- package/dist/collection/components/xplor-btn-back-to-parent/xplor-btn-back-to-parent.js +173 -0
- package/dist/collection/components/xplor-btn-back-to-parent/xplor-btn-back-to-parent.js.map +1 -0
- package/dist/collection/components/xplor-btn-icon/xplor-btn-icon.css +370 -0
- package/dist/collection/components/xplor-btn-icon/xplor-btn-icon.js +183 -0
- package/dist/collection/components/xplor-btn-icon/xplor-btn-icon.js.map +1 -0
- package/dist/collection/components/xplor-btn-menu/xplor-btn-menu.css +327 -0
- package/dist/collection/components/xplor-btn-menu/xplor-btn-menu.js +238 -0
- package/dist/collection/components/xplor-btn-menu/xplor-btn-menu.js.map +1 -0
- package/dist/collection/components/xplor-btn-toggle/xplor-btn-toggle.css +312 -0
- package/dist/collection/components/xplor-btn-toggle/xplor-btn-toggle.js +151 -0
- package/dist/collection/components/xplor-btn-toggle/xplor-btn-toggle.js.map +1 -0
- package/dist/collection/components/xplor-btn-toggle-group/xplor-btn-toggle-group.css +278 -0
- package/dist/collection/components/xplor-btn-toggle-group/xplor-btn-toggle-group.js +73 -0
- package/dist/collection/components/xplor-btn-toggle-group/xplor-btn-toggle-group.js.map +1 -0
- package/dist/collection/components/xplor-btn-toggle-secondary/xplor-btn-toggle-secondary.css +314 -0
- package/dist/collection/components/xplor-btn-toggle-secondary/xplor-btn-toggle-secondary.js +127 -0
- package/dist/collection/components/xplor-btn-toggle-secondary/xplor-btn-toggle-secondary.js.map +1 -0
- package/dist/collection/components/xplor-btn-tooltip/xplor-btn-tooltip.css +271 -0
- package/dist/collection/components/xplor-btn-tooltip/xplor-btn-tooltip.js +164 -0
- package/dist/collection/components/xplor-btn-tooltip/xplor-btn-tooltip.js.map +1 -0
- package/dist/collection/components/xplor-button/xplor-button.css +1253 -0
- package/dist/collection/components/xplor-button/xplor-button.js +212 -0
- package/dist/collection/components/xplor-button/xplor-button.js.map +1 -0
- package/dist/collection/components/xplor-button/xplor-buttons.stories.js +49 -0
- package/dist/collection/components/xplor-button/xplor-buttons.stories.js.map +1 -0
- package/dist/collection/components/xplor-chat-widget/xplor-chat-widget.css +276 -0
- package/dist/collection/components/xplor-chat-widget/xplor-chat-widget.js +139 -0
- package/dist/collection/components/xplor-chat-widget/xplor-chat-widget.js.map +1 -0
- package/dist/collection/components/xplor-chat-widget/xplor-chat.stories.js +31 -0
- package/dist/collection/components/xplor-chat-widget/xplor-chat.stories.js.map +1 -0
- package/dist/collection/components/xplor-checkbox/xplor-checkbox.css +453 -0
- package/dist/collection/components/xplor-checkbox/xplor-checkbox.js +230 -0
- package/dist/collection/components/xplor-checkbox/xplor-checkbox.js.map +1 -0
- package/dist/collection/components/xplor-combobox/xplor-combobox.css +473 -0
- package/dist/collection/components/xplor-combobox/xplor-combobox.js +553 -0
- package/dist/collection/components/xplor-combobox/xplor-combobox.js.map +1 -0
- package/dist/collection/components/xplor-datatable/xplor-datatable.css +580 -0
- package/dist/collection/components/xplor-datatable/xplor-datatable.js +536 -0
- package/dist/collection/components/xplor-datatable/xplor-datatable.js.map +1 -0
- package/dist/collection/components/xplor-datatable/xplor-datatable.stories.js +137 -0
- package/dist/collection/components/xplor-datatable/xplor-datatable.stories.js.map +1 -0
- package/dist/collection/components/xplor-date-picker/xplor-date-picker.css +415 -0
- package/dist/collection/components/xplor-date-picker/xplor-date-picker.js +694 -0
- package/dist/collection/components/xplor-date-picker/xplor-date-picker.js.map +1 -0
- package/dist/collection/components/xplor-drag-and-drop-input/xplor-drag-and-drop-input.css +1149 -0
- package/dist/collection/components/xplor-drag-and-drop-input/xplor-drag-and-drop-input.js +256 -0
- package/dist/collection/components/xplor-drag-and-drop-input/xplor-drag-and-drop-input.js.map +1 -0
- package/dist/collection/components/xplor-dropdown/xplor-dropdown.css +286 -0
- package/dist/collection/components/xplor-dropdown/xplor-dropdown.js +83 -0
- package/dist/collection/components/xplor-dropdown/xplor-dropdown.js.map +1 -0
- package/dist/collection/components/xplor-expansion-panel/xplor-expansion-panel.css +334 -0
- package/dist/collection/components/xplor-expansion-panel/xplor-expansion-panel.js +122 -0
- package/dist/collection/components/xplor-expansion-panel/xplor-expansion-panel.js.map +1 -0
- package/dist/collection/components/xplor-expansion-panels/xplor-expansion-panels.css +277 -0
- package/dist/collection/components/xplor-expansion-panels/xplor-expansion-panels.js +129 -0
- package/dist/collection/components/xplor-expansion-panels/xplor-expansion-panels.js.map +1 -0
- package/dist/collection/components/xplor-file-upload/xplor-file-upload.css +433 -0
- package/dist/collection/components/xplor-file-upload/xplor-file-upload.js +347 -0
- package/dist/collection/components/xplor-file-upload/xplor-file-upload.js.map +1 -0
- package/dist/collection/components/xplor-inline-checkbox/xplor-inline-checkbox.css +300 -0
- package/dist/collection/components/xplor-inline-checkbox/xplor-inline-checkbox.js +194 -0
- package/dist/collection/components/xplor-inline-checkbox/xplor-inline-checkbox.js.map +1 -0
- package/dist/collection/components/xplor-inline-date-picker/xplor-inline-date-picker.css +410 -0
- package/dist/collection/components/xplor-inline-date-picker/xplor-inline-date-picker.js +325 -0
- package/dist/collection/components/xplor-inline-date-picker/xplor-inline-date-picker.js.map +1 -0
- package/dist/collection/components/xplor-inline-switch/xplor-inline-switch.css +343 -0
- package/dist/collection/components/xplor-inline-switch/xplor-inline-switch.js +168 -0
- package/dist/collection/components/xplor-inline-switch/xplor-inline-switch.js.map +1 -0
- package/dist/collection/components/xplor-input-file/xplor-input-file.css +392 -0
- package/dist/collection/components/xplor-input-file/xplor-input-file.js +340 -0
- package/dist/collection/components/xplor-input-file/xplor-input-file.js.map +1 -0
- package/dist/collection/components/xplor-input-search/xplor-input-search.css +371 -0
- package/dist/collection/components/xplor-input-search/xplor-input-search.js +213 -0
- package/dist/collection/components/xplor-input-search/xplor-input-search.js.map +1 -0
- package/dist/collection/components/xplor-input-select/xplor-input-select.css +397 -0
- package/dist/collection/components/xplor-input-select/xplor-input-select.js +430 -0
- package/dist/collection/components/xplor-input-select/xplor-input-select.js.map +1 -0
- package/dist/collection/components/xplor-input-send/xplor-input-send.css +312 -0
- package/dist/collection/components/xplor-input-send/xplor-input-send.js +218 -0
- package/dist/collection/components/xplor-input-send/xplor-input-send.js.map +1 -0
- package/dist/collection/components/xplor-input-text/xplor-input-text.css +334 -0
- package/dist/collection/components/xplor-input-text/xplor-input-text.js +419 -0
- package/dist/collection/components/xplor-input-text/xplor-input-text.js.map +1 -0
- package/dist/collection/components/xplor-input-text-area/xplor-input-text-area.css +359 -0
- package/dist/collection/components/xplor-input-text-area/xplor-input-text-area.js +416 -0
- package/dist/collection/components/xplor-input-text-area/xplor-input-text-area.js.map +1 -0
- package/dist/collection/components/xplor-input-text-secondary/xplor-input-text-secondary.css +339 -0
- package/dist/collection/components/xplor-input-text-secondary/xplor-input-text-secondary.js +384 -0
- package/dist/collection/components/xplor-input-text-secondary/xplor-input-text-secondary.js.map +1 -0
- package/dist/collection/components/xplor-input-title/xplor-input-title.css +304 -0
- package/dist/collection/components/xplor-input-title/xplor-input-title.js +164 -0
- package/dist/collection/components/xplor-input-title/xplor-input-title.js.map +1 -0
- package/dist/collection/components/xplor-links/xplor-links.css +9 -0
- package/dist/collection/components/xplor-links/xplor-links.js +42 -0
- package/dist/collection/components/xplor-links/xplor-links.js.map +1 -0
- package/dist/collection/components/xplor-links/xplor-links.stories.js +18 -0
- package/dist/collection/components/xplor-links/xplor-links.stories.js.map +1 -0
- package/dist/collection/components/xplor-modal/xplor-modal.css +385 -0
- package/dist/collection/components/xplor-modal/xplor-modal.js +279 -0
- package/dist/collection/components/xplor-modal/xplor-modal.js.map +1 -0
- package/dist/collection/components/xplor-modal-persistent/xplor-modal-persistent.js +152 -0
- package/dist/collection/components/xplor-modal-persistent/xplor-modal-persistent.js.map +1 -0
- package/dist/collection/components/xplor-nav-tabs/xplor-nav-tabs.css +333 -0
- package/dist/collection/components/xplor-nav-tabs/xplor-nav-tabs.js +144 -0
- package/dist/collection/components/xplor-nav-tabs/xplor-nav-tabs.js.map +1 -0
- package/dist/collection/components/xplor-section-card/xplor-section-card.css +1076 -0
- package/dist/collection/components/xplor-section-card/xplor-section-card.js +92 -0
- package/dist/collection/components/xplor-section-card/xplor-section-card.js.map +1 -0
- package/dist/collection/components/xplor-section-heading/xplor-section-heading.css +285 -0
- package/dist/collection/components/xplor-section-heading/xplor-section-heading.js +69 -0
- package/dist/collection/components/xplor-section-heading/xplor-section-heading.js.map +1 -0
- package/dist/collection/components/xplor-table/xplor-table.js +695 -0
- package/dist/collection/components/xplor-table/xplor-table.js.map +1 -0
- package/dist/collection/components/xplor-table/xplor-table.stories.js +159 -0
- package/dist/collection/components/xplor-table/xplor-table.stories.js.map +1 -0
- package/dist/collection/components/xplor-text-bubble/xplor-text-bubble.css +285 -0
- package/dist/collection/components/xplor-text-bubble/xplor-text-bubble.js +50 -0
- package/dist/collection/components/xplor-text-bubble/xplor-text-bubble.js.map +1 -0
- package/dist/collection/components/xplor-text-field/xplor-text-field.css +1280 -0
- package/dist/collection/components/xplor-text-field/xplor-text-field.js +591 -0
- package/dist/collection/components/xplor-text-field/xplor-text-field.js.map +1 -0
- package/dist/collection/components/xplor-time-picker/xplor-time-picker.css +448 -0
- package/dist/collection/components/xplor-time-picker/xplor-time-picker.js +647 -0
- package/dist/collection/components/xplor-time-picker/xplor-time-picker.js.map +1 -0
- package/dist/collection/components/xplor-tooltip/xplor-tooltip.css +336 -0
- package/dist/collection/components/xplor-tooltip/xplor-tooltip.js +311 -0
- package/dist/collection/components/xplor-tooltip/xplor-tooltip.js.map +1 -0
- package/dist/collection/globals/globals.js +32 -0
- package/dist/collection/globals/globals.js.map +1 -0
- package/dist/collection/index.js +2 -0
- package/dist/collection/index.js.map +1 -0
- package/dist/collection/stories/Button.js +17 -0
- package/dist/collection/stories/Button.js.map +1 -0
- package/dist/collection/stories/Button.stories.js +50 -0
- package/dist/collection/stories/Button.stories.js.map +1 -0
- package/dist/collection/stories/Header.js +41 -0
- package/dist/collection/stories/Header.js.map +1 -0
- package/dist/collection/stories/Header.stories.js +28 -0
- package/dist/collection/stories/Header.stories.js.map +1 -0
- package/dist/collection/stories/Page.js +85 -0
- package/dist/collection/stories/Page.js.map +1 -0
- package/dist/collection/stories/Page.stories.js +25 -0
- package/dist/collection/stories/Page.stories.js.map +1 -0
- package/dist/collection/stories/assets/accessibility.svg +1 -0
- package/dist/collection/stories/assets/discord.svg +1 -0
- package/dist/collection/stories/assets/github.svg +1 -0
- package/dist/collection/stories/assets/tutorials.svg +1 -0
- package/dist/collection/stories/assets/youtube.svg +1 -0
- package/dist/collection/utils/helpers.js +25 -0
- package/dist/collection/utils/helpers.js.map +1 -0
- package/dist/components/index.d.ts +33 -0
- package/dist/components/index.js +2324 -0
- package/dist/components/index.js.map +1 -0
- package/dist/components/p-4l9DAhAo.js +182 -0
- package/dist/components/p-4l9DAhAo.js.map +1 -0
- package/dist/components/p-BHdeGt6k.js +51 -0
- package/dist/components/p-BHdeGt6k.js.map +1 -0
- package/dist/components/p-BIFlTsO8.js +185 -0
- package/dist/components/p-BIFlTsO8.js.map +1 -0
- package/dist/components/p-CJGP2_5k.js +38 -0
- package/dist/components/p-CJGP2_5k.js.map +1 -0
- package/dist/components/p-DIv_A5Gj.js +57 -0
- package/dist/components/p-DIv_A5Gj.js.map +1 -0
- package/dist/components/p-DKh6y3GY.js +118 -0
- package/dist/components/p-DKh6y3GY.js.map +1 -0
- package/dist/components/xplor-alert-dialog.d.ts +11 -0
- package/dist/components/xplor-alert-dialog.js +86 -0
- package/dist/components/xplor-alert-dialog.js.map +1 -0
- package/dist/components/xplor-alert-message.d.ts +11 -0
- package/dist/components/xplor-alert-message.js +49 -0
- package/dist/components/xplor-alert-message.js.map +1 -0
- package/dist/components/xplor-assistant.d.ts +11 -0
- package/dist/components/xplor-assistant.js +764 -0
- package/dist/components/xplor-assistant.js.map +1 -0
- package/dist/components/xplor-autocomplete.d.ts +11 -0
- package/dist/components/xplor-autocomplete.js +269 -0
- package/dist/components/xplor-autocomplete.js.map +1 -0
- package/dist/components/xplor-avatar-and-name.d.ts +11 -0
- package/dist/components/xplor-avatar-and-name.js +49 -0
- package/dist/components/xplor-avatar-and-name.js.map +1 -0
- package/dist/components/xplor-avatar.d.ts +11 -0
- package/dist/components/xplor-avatar.js +9 -0
- package/dist/components/xplor-avatar.js.map +1 -0
- package/dist/components/xplor-badge-active.d.ts +11 -0
- package/dist/components/xplor-badge-active.js +36 -0
- package/dist/components/xplor-badge-active.js.map +1 -0
- package/dist/components/xplor-badge-archived.d.ts +11 -0
- package/dist/components/xplor-badge-archived.js +36 -0
- package/dist/components/xplor-badge-archived.js.map +1 -0
- package/dist/components/xplor-badge-deleted.d.ts +11 -0
- package/dist/components/xplor-badge-deleted.js +36 -0
- package/dist/components/xplor-badge-deleted.js.map +1 -0
- package/dist/components/xplor-badge-expired.d.ts +11 -0
- package/dist/components/xplor-badge-expired.js +36 -0
- package/dist/components/xplor-badge-expired.js.map +1 -0
- package/dist/components/xplor-badge-inactive.d.ts +11 -0
- package/dist/components/xplor-badge-inactive.js +36 -0
- package/dist/components/xplor-badge-inactive.js.map +1 -0
- package/dist/components/xplor-badge-recalled.d.ts +11 -0
- package/dist/components/xplor-badge-recalled.js +36 -0
- package/dist/components/xplor-badge-recalled.js.map +1 -0
- package/dist/components/xplor-badge-session-booking.d.ts +11 -0
- package/dist/components/xplor-badge-session-booking.js +61 -0
- package/dist/components/xplor-badge-session-booking.js.map +1 -0
- package/dist/components/xplor-badge-upcoming.d.ts +11 -0
- package/dist/components/xplor-badge-upcoming.js +36 -0
- package/dist/components/xplor-badge-upcoming.js.map +1 -0
- package/dist/components/xplor-badge-waitlist.d.ts +11 -0
- package/dist/components/xplor-badge-waitlist.js +36 -0
- package/dist/components/xplor-badge-waitlist.js.map +1 -0
- package/dist/components/xplor-badge.d.ts +11 -0
- package/dist/components/xplor-badge.js +152 -0
- package/dist/components/xplor-badge.js.map +1 -0
- package/dist/components/xplor-btn-back-to-parent.d.ts +11 -0
- package/dist/components/xplor-btn-back-to-parent.js +73 -0
- package/dist/components/xplor-btn-back-to-parent.js.map +1 -0
- package/dist/components/xplor-btn-back.d.ts +11 -0
- package/dist/components/xplor-btn-back.js +77 -0
- package/dist/components/xplor-btn-back.js.map +1 -0
- package/dist/components/xplor-btn-icon.d.ts +11 -0
- package/dist/components/xplor-btn-icon.js +78 -0
- package/dist/components/xplor-btn-icon.js.map +1 -0
- package/dist/components/xplor-btn-menu.d.ts +11 -0
- package/dist/components/xplor-btn-menu.js +106 -0
- package/dist/components/xplor-btn-menu.js.map +1 -0
- package/dist/components/xplor-btn-toggle-group.d.ts +11 -0
- package/dist/components/xplor-btn-toggle-group.js +47 -0
- package/dist/components/xplor-btn-toggle-group.js.map +1 -0
- package/dist/components/xplor-btn-toggle-secondary.d.ts +11 -0
- package/dist/components/xplor-btn-toggle-secondary.js +65 -0
- package/dist/components/xplor-btn-toggle-secondary.js.map +1 -0
- package/dist/components/xplor-btn-toggle.d.ts +11 -0
- package/dist/components/xplor-btn-toggle.js +70 -0
- package/dist/components/xplor-btn-toggle.js.map +1 -0
- package/dist/components/xplor-btn-tooltip.d.ts +11 -0
- package/dist/components/xplor-btn-tooltip.js +59 -0
- package/dist/components/xplor-btn-tooltip.js.map +1 -0
- package/dist/components/xplor-button.d.ts +11 -0
- package/dist/components/xplor-button.js +9 -0
- package/dist/components/xplor-button.js.map +1 -0
- package/dist/components/xplor-chat-widget.d.ts +11 -0
- package/dist/components/xplor-chat-widget.js +105 -0
- package/dist/components/xplor-chat-widget.js.map +1 -0
- package/dist/components/xplor-checkbox.d.ts +11 -0
- package/dist/components/xplor-checkbox.js +125 -0
- package/dist/components/xplor-checkbox.js.map +1 -0
- package/dist/components/xplor-combobox.d.ts +11 -0
- package/dist/components/xplor-combobox.js +279 -0
- package/dist/components/xplor-combobox.js.map +1 -0
- package/dist/components/xplor-datatable.d.ts +11 -0
- package/dist/components/xplor-datatable.js +244 -0
- package/dist/components/xplor-datatable.js.map +1 -0
- package/dist/components/xplor-date-picker.d.ts +11 -0
- package/dist/components/xplor-date-picker.js +269 -0
- package/dist/components/xplor-date-picker.js.map +1 -0
- package/dist/components/xplor-drag-and-drop-input.d.ts +11 -0
- package/dist/components/xplor-drag-and-drop-input.js +138 -0
- package/dist/components/xplor-drag-and-drop-input.js.map +1 -0
- package/dist/components/xplor-dropdown.d.ts +11 -0
- package/dist/components/xplor-dropdown.js +9 -0
- package/dist/components/xplor-dropdown.js.map +1 -0
- package/dist/components/xplor-expansion-panel.d.ts +11 -0
- package/dist/components/xplor-expansion-panel.js +75 -0
- package/dist/components/xplor-expansion-panel.js.map +1 -0
- package/dist/components/xplor-expansion-panels.d.ts +11 -0
- package/dist/components/xplor-expansion-panels.js +71 -0
- package/dist/components/xplor-expansion-panels.js.map +1 -0
- package/dist/components/xplor-file-upload.d.ts +11 -0
- package/dist/components/xplor-file-upload.js +184 -0
- package/dist/components/xplor-file-upload.js.map +1 -0
- package/dist/components/xplor-inline-checkbox.d.ts +11 -0
- package/dist/components/xplor-inline-checkbox.js +76 -0
- package/dist/components/xplor-inline-checkbox.js.map +1 -0
- package/dist/components/xplor-inline-date-picker.d.ts +11 -0
- package/dist/components/xplor-inline-date-picker.js +9 -0
- package/dist/components/xplor-inline-date-picker.js.map +1 -0
- package/dist/components/xplor-inline-switch.d.ts +11 -0
- package/dist/components/xplor-inline-switch.js +69 -0
- package/dist/components/xplor-inline-switch.js.map +1 -0
- package/dist/components/xplor-input-file.d.ts +11 -0
- package/dist/components/xplor-input-file.js +122 -0
- package/dist/components/xplor-input-file.js.map +1 -0
- package/dist/components/xplor-input-search.d.ts +11 -0
- package/dist/components/xplor-input-search.js +90 -0
- package/dist/components/xplor-input-search.js.map +1 -0
- package/dist/components/xplor-input-select.d.ts +11 -0
- package/dist/components/xplor-input-select.js +169 -0
- package/dist/components/xplor-input-select.js.map +1 -0
- package/dist/components/xplor-input-send.d.ts +11 -0
- package/dist/components/xplor-input-send.js +88 -0
- package/dist/components/xplor-input-send.js.map +1 -0
- package/dist/components/xplor-input-text-area.d.ts +11 -0
- package/dist/components/xplor-input-text-area.js +132 -0
- package/dist/components/xplor-input-text-area.js.map +1 -0
- package/dist/components/xplor-input-text-secondary.d.ts +11 -0
- package/dist/components/xplor-input-text-secondary.js +95 -0
- package/dist/components/xplor-input-text-secondary.js.map +1 -0
- package/dist/components/xplor-input-text.d.ts +11 -0
- package/dist/components/xplor-input-text.js +130 -0
- package/dist/components/xplor-input-text.js.map +1 -0
- package/dist/components/xplor-input-title.d.ts +11 -0
- package/dist/components/xplor-input-title.js +69 -0
- package/dist/components/xplor-input-title.js.map +1 -0
- package/dist/components/xplor-links.d.ts +11 -0
- package/dist/components/xplor-links.js +39 -0
- package/dist/components/xplor-links.js.map +1 -0
- package/dist/components/xplor-modal-persistent.d.ts +11 -0
- package/dist/components/xplor-modal-persistent.js +66 -0
- package/dist/components/xplor-modal-persistent.js.map +1 -0
- package/dist/components/xplor-modal.d.ts +11 -0
- package/dist/components/xplor-modal.js +9 -0
- package/dist/components/xplor-modal.js.map +1 -0
- package/dist/components/xplor-nav-tabs.d.ts +11 -0
- package/dist/components/xplor-nav-tabs.js +59 -0
- package/dist/components/xplor-nav-tabs.js.map +1 -0
- package/dist/components/xplor-section-card.d.ts +11 -0
- package/dist/components/xplor-section-card.js +47 -0
- package/dist/components/xplor-section-card.js.map +1 -0
- package/dist/components/xplor-section-heading.d.ts +11 -0
- package/dist/components/xplor-section-heading.js +44 -0
- package/dist/components/xplor-section-heading.js.map +1 -0
- package/dist/components/xplor-table.d.ts +11 -0
- package/dist/components/xplor-table.js +276 -0
- package/dist/components/xplor-table.js.map +1 -0
- package/dist/components/xplor-text-bubble.d.ts +11 -0
- package/dist/components/xplor-text-bubble.js +43 -0
- package/dist/components/xplor-text-bubble.js.map +1 -0
- package/dist/components/xplor-text-field.d.ts +11 -0
- package/dist/components/xplor-text-field.js +191 -0
- package/dist/components/xplor-text-field.js.map +1 -0
- package/dist/components/xplor-time-picker.d.ts +11 -0
- package/dist/components/xplor-time-picker.js +349 -0
- package/dist/components/xplor-time-picker.js.map +1 -0
- package/dist/components/xplor-tooltip.d.ts +11 -0
- package/dist/components/xplor-tooltip.js +9 -0
- package/dist/components/xplor-tooltip.js.map +1 -0
- package/dist/esm/index-Zkk2NJif.js +2566 -0
- package/dist/esm/index-Zkk2NJif.js.map +1 -0
- package/dist/esm/index.js +4 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/loader.js +13 -0
- package/dist/esm/loader.js.map +1 -0
- package/dist/esm/xplor-alert-dialog_57.entry.js +4692 -0
- package/dist/esm/xplor-alert-dialog_57.entry.js.map +1 -0
- package/dist/esm/xplor-component-library.js +23 -0
- package/dist/esm/xplor-component-library.js.map +1 -0
- package/dist/hydrate/index.d.ts +273 -0
- package/dist/hydrate/index.js +25064 -0
- package/dist/hydrate/index.mjs +25056 -0
- package/dist/hydrate/package.json +12 -0
- package/dist/index.cjs.js +1 -0
- package/dist/index.js +1 -0
- package/dist/types/components/element-interface.d.ts +19 -0
- package/dist/types/components/helpers.d.ts +47 -0
- package/dist/types/components/xplor-alert-dialog/xplor-alert-dialog.d.ts +29 -0
- package/dist/types/components/xplor-alert-message/xplor-alert-message.d.ts +9 -0
- package/dist/types/components/xplor-assistant/internal/AssistantInput.d.ts +17 -0
- package/dist/types/components/xplor-assistant/internal/AssistantMessage.d.ts +6 -0
- package/dist/types/components/xplor-assistant/internal/QuickReplies.d.ts +6 -0
- package/dist/types/components/xplor-assistant/internal/TypingIndicator.d.ts +5 -0
- package/dist/types/components/xplor-assistant/internal/types.d.ts +106 -0
- package/dist/types/components/xplor-assistant/utils/api.d.ts +48 -0
- package/dist/types/components/xplor-assistant/utils/icons.d.ts +24 -0
- package/dist/types/components/xplor-assistant/utils/speech.d.ts +86 -0
- package/dist/types/components/xplor-assistant/xplor-assistant.d.ts +52 -0
- package/dist/types/components/xplor-autocomplete/xplor-autocomplete.d.ts +92 -0
- package/dist/types/components/xplor-avatar/avatar.stories.d.ts +75 -0
- package/dist/types/components/xplor-avatar/xplor-avatar.d.ts +21 -0
- package/dist/types/components/xplor-avatar-and-name/xplor-avatar-and-name.d.ts +8 -0
- package/dist/types/components/xplor-badge/xplor-badge.d.ts +52 -0
- package/dist/types/components/xplor-badge-active/xplor-badge-active.d.ts +3 -0
- package/dist/types/components/xplor-badge-archived/xplor-badge-archived.d.ts +3 -0
- package/dist/types/components/xplor-badge-deleted/xplor-badge-deleted.d.ts +3 -0
- package/dist/types/components/xplor-badge-expired/xplor-badge-expired.d.ts +3 -0
- package/dist/types/components/xplor-badge-inactive/xplor-badge-inactive.d.ts +3 -0
- package/dist/types/components/xplor-badge-recalled/xplor-badge-recalled.d.ts +3 -0
- package/dist/types/components/xplor-badge-session-booking/xplor-badge-session-booking.d.ts +20 -0
- package/dist/types/components/xplor-badge-upcoming/xplor-badge-upcoming.d.ts +3 -0
- package/dist/types/components/xplor-badge-waitlist/xplor-badge-waitlist.d.ts +3 -0
- package/dist/types/components/xplor-btn-back/xplor-btn-back.d.ts +29 -0
- package/dist/types/components/xplor-btn-back-to-parent/xplor-btn-back-to-parent.d.ts +29 -0
- package/dist/types/components/xplor-btn-icon/xplor-btn-icon.d.ts +29 -0
- package/dist/types/components/xplor-btn-menu/xplor-btn-menu.d.ts +49 -0
- package/dist/types/components/xplor-btn-toggle/xplor-btn-toggle.d.ts +25 -0
- package/dist/types/components/xplor-btn-toggle-group/xplor-btn-toggle-group.d.ts +11 -0
- package/dist/types/components/xplor-btn-toggle-secondary/xplor-btn-toggle-secondary.d.ts +21 -0
- package/dist/types/components/xplor-btn-tooltip/xplor-btn-tooltip.d.ts +10 -0
- package/dist/types/components/xplor-button/xplor-button.d.ts +19 -0
- package/dist/types/components/xplor-button/xplor-buttons.stories.d.ts +32 -0
- package/dist/types/components/xplor-chat-widget/xplor-chat-widget.d.ts +13 -0
- package/dist/types/components/xplor-chat-widget/xplor-chat.stories.d.ts +32 -0
- package/dist/types/components/xplor-checkbox/xplor-checkbox.d.ts +25 -0
- package/dist/types/components/xplor-combobox/xplor-combobox.d.ts +77 -0
- package/dist/types/components/xplor-datatable/xplor-datatable.d.ts +103 -0
- package/dist/types/components/xplor-datatable/xplor-datatable.stories.d.ts +18 -0
- package/dist/types/components/xplor-date-picker/xplor-date-picker.d.ts +53 -0
- package/dist/types/components/xplor-drag-and-drop-input/xplor-drag-and-drop-input.d.ts +42 -0
- package/dist/types/components/xplor-dropdown/xplor-dropdown.d.ts +6 -0
- package/dist/types/components/xplor-expansion-panel/xplor-expansion-panel.d.ts +18 -0
- package/dist/types/components/xplor-expansion-panels/xplor-expansion-panels.d.ts +12 -0
- package/dist/types/components/xplor-file-upload/xplor-file-upload.d.ts +51 -0
- package/dist/types/components/xplor-inline-checkbox/xplor-inline-checkbox.d.ts +33 -0
- package/dist/types/components/xplor-inline-date-picker/xplor-inline-date-picker.d.ts +57 -0
- package/dist/types/components/xplor-inline-switch/xplor-inline-switch.d.ts +29 -0
- package/dist/types/components/xplor-input-file/xplor-input-file.d.ts +60 -0
- package/dist/types/components/xplor-input-search/xplor-input-search.d.ts +36 -0
- package/dist/types/components/xplor-input-select/xplor-input-select.d.ts +76 -0
- package/dist/types/components/xplor-input-send/xplor-input-send.d.ts +18 -0
- package/dist/types/components/xplor-input-text/xplor-input-text.d.ts +73 -0
- package/dist/types/components/xplor-input-text-area/xplor-input-text-area.d.ts +72 -0
- package/dist/types/components/xplor-input-text-secondary/xplor-input-text-secondary.d.ts +25 -0
- package/dist/types/components/xplor-input-title/xplor-input-title.d.ts +30 -0
- package/dist/types/components/xplor-links/xplor-links.d.ts +4 -0
- package/dist/types/components/xplor-links/xplor-links.stories.d.ts +12 -0
- package/dist/types/components/xplor-modal/xplor-modal.d.ts +45 -0
- package/dist/types/components/xplor-modal-persistent/xplor-modal-persistent.d.ts +28 -0
- package/dist/types/components/xplor-nav-tabs/xplor-nav-tabs.d.ts +15 -0
- package/dist/types/components/xplor-section-card/xplor-section-card.d.ts +6 -0
- package/dist/types/components/xplor-section-heading/xplor-section-heading.d.ts +5 -0
- package/dist/types/components/xplor-table/xplor-table.d.ts +65 -0
- package/dist/types/components/xplor-table/xplor-table.stories.d.ts +77 -0
- package/dist/types/components/xplor-text-bubble/xplor-text-bubble.d.ts +4 -0
- package/dist/types/components/xplor-text-field/xplor-text-field.d.ts +111 -0
- package/dist/types/components/xplor-time-picker/xplor-time-picker.d.ts +55 -0
- package/dist/types/components/xplor-tooltip/xplor-tooltip.d.ts +28 -0
- package/dist/types/components.d.ts +4360 -0
- package/dist/types/globals/globals.d.ts +3 -0
- package/dist/types/index.d.ts +1 -0
- package/dist/types/interfaces.d.ts +104 -0
- package/dist/types/stencil-public-runtime.d.ts +1702 -0
- package/dist/types/stories/Button.d.ts +15 -0
- package/dist/types/stories/Header.d.ts +10 -0
- package/dist/types/stories/Page.d.ts +2 -0
- package/dist/types/stories/Page.stories.d.ts +11 -0
- package/dist/types/utils/helpers.d.ts +3 -0
- package/dist/xplor-component-library/index.esm.js +2 -0
- package/dist/xplor-component-library/index.esm.js.map +1 -0
- package/dist/xplor-component-library/loader.esm.js.map +1 -0
- package/dist/xplor-component-library/p-25fa8553.entry.js +2 -0
- package/dist/xplor-component-library/p-25fa8553.entry.js.map +1 -0
- package/dist/xplor-component-library/p-Zkk2NJif.js +3 -0
- package/dist/xplor-component-library/p-Zkk2NJif.js.map +1 -0
- package/dist/xplor-component-library/xplor-component-library.css +1 -0
- package/dist/xplor-component-library/xplor-component-library.esm.js +2 -0
- package/dist/xplor-component-library/xplor-component-library.esm.js.map +1 -0
- package/loader/cdn.js +1 -0
- package/loader/index.cjs.js +1 -0
- package/loader/index.d.ts +24 -0
- package/loader/index.es2017.js +1 -0
- package/loader/index.js +2 -0
- package/package.json +124 -0
- package/readme.md +315 -0
|
@@ -0,0 +1,763 @@
|
|
|
1
|
+
import { h, p as proxyCustomElement, H, c as createEvent, a as Host } from './index.js';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* API integration utilities for the xplor-assistant component
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* Generates a unique session ID
|
|
8
|
+
* Format: session_${timestamp}_${random}
|
|
9
|
+
*/
|
|
10
|
+
function generateSessionId() {
|
|
11
|
+
const timestamp = Date.now();
|
|
12
|
+
const random = Math.random().toString(36).substring(2, 11);
|
|
13
|
+
return `session_${timestamp}_${random}`;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Formats the current date as YYYY-MM-DD
|
|
17
|
+
*/
|
|
18
|
+
function getCurrentDate() {
|
|
19
|
+
const now = new Date();
|
|
20
|
+
const year = now.getFullYear();
|
|
21
|
+
const month = String(now.getMonth() + 1).padStart(2, '0');
|
|
22
|
+
const day = String(now.getDate()).padStart(2, '0');
|
|
23
|
+
return `${year}-${month}-${day}`;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Formats the current time as HH:MM:SS
|
|
27
|
+
*/
|
|
28
|
+
function getCurrentTime() {
|
|
29
|
+
const now = new Date();
|
|
30
|
+
const hours = String(now.getHours()).padStart(2, '0');
|
|
31
|
+
const minutes = String(now.getMinutes()).padStart(2, '0');
|
|
32
|
+
const seconds = String(now.getSeconds()).padStart(2, '0');
|
|
33
|
+
return `${hours}:${minutes}:${seconds}`;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Sends a message to the assistant API
|
|
37
|
+
*
|
|
38
|
+
* @param endpoint - The API endpoint URL
|
|
39
|
+
* @param message - The user's message
|
|
40
|
+
* @param sessionId - The current session ID
|
|
41
|
+
* @param userId - The user's ID
|
|
42
|
+
* @param userEmail - The user's email
|
|
43
|
+
* @param userName - The user's name
|
|
44
|
+
* @returns Promise with the API response
|
|
45
|
+
* @throws Error if the API call fails
|
|
46
|
+
*/
|
|
47
|
+
async function sendMessageToAPI(endpoint, message, sessionId, userId, userEmail, userName) {
|
|
48
|
+
if (!endpoint) {
|
|
49
|
+
throw new Error('API endpoint is required');
|
|
50
|
+
}
|
|
51
|
+
if (!message || !message.trim()) {
|
|
52
|
+
throw new Error('Message cannot be empty');
|
|
53
|
+
}
|
|
54
|
+
const payload = {
|
|
55
|
+
message: message.trim(),
|
|
56
|
+
sessionId,
|
|
57
|
+
userId,
|
|
58
|
+
userEmail,
|
|
59
|
+
userName,
|
|
60
|
+
currentDate: getCurrentDate(),
|
|
61
|
+
currentTime: getCurrentTime(),
|
|
62
|
+
};
|
|
63
|
+
try {
|
|
64
|
+
const response = await fetch(endpoint, {
|
|
65
|
+
method: 'POST',
|
|
66
|
+
headers: {
|
|
67
|
+
'Content-Type': 'application/json',
|
|
68
|
+
},
|
|
69
|
+
body: JSON.stringify(payload),
|
|
70
|
+
});
|
|
71
|
+
if (!response.ok) {
|
|
72
|
+
const errorText = await response.text().catch(() => response.statusText);
|
|
73
|
+
throw new Error(`API error: ${response.status} - ${errorText}`);
|
|
74
|
+
}
|
|
75
|
+
const data = await response.json();
|
|
76
|
+
// Validate response structure
|
|
77
|
+
if (!data.message || !data.sessionId) {
|
|
78
|
+
throw new Error('Invalid API response: missing required fields');
|
|
79
|
+
}
|
|
80
|
+
return data;
|
|
81
|
+
}
|
|
82
|
+
catch (error) {
|
|
83
|
+
if (error instanceof Error) {
|
|
84
|
+
// Re-throw with more context if it's a fetch error
|
|
85
|
+
if (error.name === 'TypeError' && error.message.includes('fetch')) {
|
|
86
|
+
throw new Error('Network error: Unable to reach the API. Please check your connection.');
|
|
87
|
+
}
|
|
88
|
+
throw error;
|
|
89
|
+
}
|
|
90
|
+
throw new Error('Unknown error occurred while calling the API');
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
/**
|
|
95
|
+
* Web Speech API helpers for the xplor-assistant component
|
|
96
|
+
* Handles both Speech Recognition (voice input) and Speech Synthesis (text-to-speech)
|
|
97
|
+
*/
|
|
98
|
+
/**
|
|
99
|
+
* Detects browser capabilities for speech features
|
|
100
|
+
*/
|
|
101
|
+
function detectBrowserCapabilities() {
|
|
102
|
+
if (typeof window === 'undefined') {
|
|
103
|
+
return {
|
|
104
|
+
voiceInput: false,
|
|
105
|
+
textToSpeech: false,
|
|
106
|
+
};
|
|
107
|
+
}
|
|
108
|
+
const hasVoiceInput = 'SpeechRecognition' in window ||
|
|
109
|
+
'webkitSpeechRecognition' in window;
|
|
110
|
+
const hasTTS = 'speechSynthesis' in window;
|
|
111
|
+
return {
|
|
112
|
+
voiceInput: hasVoiceInput,
|
|
113
|
+
textToSpeech: hasTTS,
|
|
114
|
+
};
|
|
115
|
+
}
|
|
116
|
+
/**
|
|
117
|
+
* Speech Recognition Manager
|
|
118
|
+
* Handles voice-to-text functionality
|
|
119
|
+
*/
|
|
120
|
+
class SpeechRecognitionManager {
|
|
121
|
+
constructor() {
|
|
122
|
+
this.recognition = null;
|
|
123
|
+
this.onResultCallback = null;
|
|
124
|
+
this.onErrorCallback = null;
|
|
125
|
+
this.onStartCallback = null;
|
|
126
|
+
this.onEndCallback = null;
|
|
127
|
+
if (typeof window === 'undefined')
|
|
128
|
+
return;
|
|
129
|
+
const SpeechRecognition = window.SpeechRecognition ||
|
|
130
|
+
window.webkitSpeechRecognition;
|
|
131
|
+
if (SpeechRecognition) {
|
|
132
|
+
this.recognition = new SpeechRecognition();
|
|
133
|
+
this.recognition.continuous = false;
|
|
134
|
+
this.recognition.interimResults = false;
|
|
135
|
+
this.recognition.lang = 'en-US';
|
|
136
|
+
this.recognition.maxAlternatives = 1;
|
|
137
|
+
this.recognition.onstart = () => {
|
|
138
|
+
if (this.onStartCallback) {
|
|
139
|
+
this.onStartCallback();
|
|
140
|
+
}
|
|
141
|
+
};
|
|
142
|
+
this.recognition.onresult = (event) => {
|
|
143
|
+
const transcript = event.results[0][0].transcript;
|
|
144
|
+
if (this.onResultCallback) {
|
|
145
|
+
this.onResultCallback(transcript);
|
|
146
|
+
}
|
|
147
|
+
};
|
|
148
|
+
this.recognition.onerror = (event) => {
|
|
149
|
+
const errorMessage = this.getErrorMessage(event.error);
|
|
150
|
+
if (this.onErrorCallback) {
|
|
151
|
+
this.onErrorCallback(errorMessage);
|
|
152
|
+
}
|
|
153
|
+
};
|
|
154
|
+
this.recognition.onend = () => {
|
|
155
|
+
if (this.onEndCallback) {
|
|
156
|
+
this.onEndCallback();
|
|
157
|
+
}
|
|
158
|
+
};
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
/**
|
|
162
|
+
* Converts speech recognition error codes to user-friendly messages
|
|
163
|
+
*/
|
|
164
|
+
getErrorMessage(error) {
|
|
165
|
+
switch (error) {
|
|
166
|
+
case 'no-speech':
|
|
167
|
+
return 'No speech detected. Please try again.';
|
|
168
|
+
case 'audio-capture':
|
|
169
|
+
return 'No microphone found. Please ensure a microphone is connected.';
|
|
170
|
+
case 'not-allowed':
|
|
171
|
+
return 'Microphone permission denied. Please allow microphone access.';
|
|
172
|
+
case 'network':
|
|
173
|
+
return 'Network error. Please check your connection.';
|
|
174
|
+
default:
|
|
175
|
+
return `Speech recognition error: ${error}`;
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
/**
|
|
179
|
+
* Starts listening for voice input
|
|
180
|
+
*/
|
|
181
|
+
start() {
|
|
182
|
+
if (!this.recognition) {
|
|
183
|
+
console.error('Speech recognition not supported');
|
|
184
|
+
return;
|
|
185
|
+
}
|
|
186
|
+
try {
|
|
187
|
+
this.recognition.start();
|
|
188
|
+
}
|
|
189
|
+
catch (error) {
|
|
190
|
+
console.error('Failed to start speech recognition:', error);
|
|
191
|
+
if (this.onErrorCallback) {
|
|
192
|
+
this.onErrorCallback('Failed to start voice recognition');
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
/**
|
|
197
|
+
* Stops listening for voice input
|
|
198
|
+
*/
|
|
199
|
+
stop() {
|
|
200
|
+
if (this.recognition) {
|
|
201
|
+
this.recognition.stop();
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
/**
|
|
205
|
+
* Sets the callback for when a result is received
|
|
206
|
+
*/
|
|
207
|
+
onResult(callback) {
|
|
208
|
+
this.onResultCallback = callback;
|
|
209
|
+
}
|
|
210
|
+
/**
|
|
211
|
+
* Sets the callback for when an error occurs
|
|
212
|
+
*/
|
|
213
|
+
onError(callback) {
|
|
214
|
+
this.onErrorCallback = callback;
|
|
215
|
+
}
|
|
216
|
+
/**
|
|
217
|
+
* Sets the callback for when recognition starts
|
|
218
|
+
*/
|
|
219
|
+
onStart(callback) {
|
|
220
|
+
this.onStartCallback = callback;
|
|
221
|
+
}
|
|
222
|
+
/**
|
|
223
|
+
* Sets the callback for when recognition ends
|
|
224
|
+
*/
|
|
225
|
+
onEnd(callback) {
|
|
226
|
+
this.onEndCallback = callback;
|
|
227
|
+
}
|
|
228
|
+
/**
|
|
229
|
+
* Checks if speech recognition is available
|
|
230
|
+
*/
|
|
231
|
+
isAvailable() {
|
|
232
|
+
return this.recognition !== null;
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
/**
|
|
236
|
+
* Speech Synthesis Manager
|
|
237
|
+
* Handles text-to-speech functionality
|
|
238
|
+
*/
|
|
239
|
+
class SpeechSynthesisManager {
|
|
240
|
+
constructor() {
|
|
241
|
+
this.currentUtterance = null;
|
|
242
|
+
this.onStartCallback = null;
|
|
243
|
+
this.onEndCallback = null;
|
|
244
|
+
}
|
|
245
|
+
/**
|
|
246
|
+
* Speaks the given text
|
|
247
|
+
*/
|
|
248
|
+
speak(text) {
|
|
249
|
+
if (typeof window === 'undefined' || !('speechSynthesis' in window)) {
|
|
250
|
+
console.error('Speech synthesis not supported');
|
|
251
|
+
return;
|
|
252
|
+
}
|
|
253
|
+
// Stop any ongoing speech first
|
|
254
|
+
this.stop();
|
|
255
|
+
this.currentUtterance = new SpeechSynthesisUtterance(text);
|
|
256
|
+
this.currentUtterance.lang = 'en-US';
|
|
257
|
+
this.currentUtterance.rate = 1.0;
|
|
258
|
+
this.currentUtterance.pitch = 1.0;
|
|
259
|
+
this.currentUtterance.volume = 1.0;
|
|
260
|
+
this.currentUtterance.onstart = () => {
|
|
261
|
+
if (this.onStartCallback) {
|
|
262
|
+
this.onStartCallback();
|
|
263
|
+
}
|
|
264
|
+
};
|
|
265
|
+
this.currentUtterance.onend = () => {
|
|
266
|
+
if (this.onEndCallback) {
|
|
267
|
+
this.onEndCallback();
|
|
268
|
+
}
|
|
269
|
+
this.currentUtterance = null;
|
|
270
|
+
};
|
|
271
|
+
this.currentUtterance.onerror = (event) => {
|
|
272
|
+
console.error('Speech synthesis error:', event);
|
|
273
|
+
if (this.onEndCallback) {
|
|
274
|
+
this.onEndCallback();
|
|
275
|
+
}
|
|
276
|
+
this.currentUtterance = null;
|
|
277
|
+
};
|
|
278
|
+
window.speechSynthesis.speak(this.currentUtterance);
|
|
279
|
+
}
|
|
280
|
+
/**
|
|
281
|
+
* Stops any ongoing speech
|
|
282
|
+
*/
|
|
283
|
+
stop() {
|
|
284
|
+
if (typeof window === 'undefined' || !('speechSynthesis' in window)) {
|
|
285
|
+
return;
|
|
286
|
+
}
|
|
287
|
+
if (window.speechSynthesis.speaking) {
|
|
288
|
+
window.speechSynthesis.cancel();
|
|
289
|
+
if (this.onEndCallback) {
|
|
290
|
+
this.onEndCallback();
|
|
291
|
+
}
|
|
292
|
+
}
|
|
293
|
+
this.currentUtterance = null;
|
|
294
|
+
}
|
|
295
|
+
/**
|
|
296
|
+
* Checks if currently speaking
|
|
297
|
+
*/
|
|
298
|
+
isSpeaking() {
|
|
299
|
+
if (typeof window === 'undefined' || !('speechSynthesis' in window)) {
|
|
300
|
+
return false;
|
|
301
|
+
}
|
|
302
|
+
return window.speechSynthesis.speaking;
|
|
303
|
+
}
|
|
304
|
+
/**
|
|
305
|
+
* Sets the callback for when speech starts
|
|
306
|
+
*/
|
|
307
|
+
onStart(callback) {
|
|
308
|
+
this.onStartCallback = callback;
|
|
309
|
+
}
|
|
310
|
+
/**
|
|
311
|
+
* Sets the callback for when speech ends
|
|
312
|
+
*/
|
|
313
|
+
onEnd(callback) {
|
|
314
|
+
this.onEndCallback = callback;
|
|
315
|
+
}
|
|
316
|
+
/**
|
|
317
|
+
* Checks if speech synthesis is available
|
|
318
|
+
*/
|
|
319
|
+
isAvailable() {
|
|
320
|
+
return typeof window !== 'undefined' && 'speechSynthesis' in window;
|
|
321
|
+
}
|
|
322
|
+
}
|
|
323
|
+
|
|
324
|
+
/**
|
|
325
|
+
* SVG icon definitions for the xplor-assistant component
|
|
326
|
+
* Following the pattern used in xplor-button component
|
|
327
|
+
*/
|
|
328
|
+
/**
|
|
329
|
+
* Microphone icon for voice input button
|
|
330
|
+
*/
|
|
331
|
+
const microphoneIcon = `
|
|
332
|
+
<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">
|
|
333
|
+
<path d="M12 1a3 3 0 0 0-3 3v8a3 3 0 0 0 6 0V4a3 3 0 0 0-3-3z"></path>
|
|
334
|
+
<path d="M19 10v2a7 7 0 0 1-14 0v-2"></path>
|
|
335
|
+
<line x1="12" y1="19" x2="12" y2="23"></line>
|
|
336
|
+
<line x1="8" y1="23" x2="16" y2="23"></line>
|
|
337
|
+
</svg>
|
|
338
|
+
`;
|
|
339
|
+
/**
|
|
340
|
+
* Send arrow icon for send message button
|
|
341
|
+
*/
|
|
342
|
+
const sendIcon = `
|
|
343
|
+
<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">
|
|
344
|
+
<line x1="22" y1="2" x2="11" y2="13"></line>
|
|
345
|
+
<polygon points="22 2 15 22 11 13 2 9 22 2"></polygon>
|
|
346
|
+
</svg>
|
|
347
|
+
`;
|
|
348
|
+
/**
|
|
349
|
+
* Speaker icon for text-to-speech button
|
|
350
|
+
*/
|
|
351
|
+
const speakerIcon = `
|
|
352
|
+
<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">
|
|
353
|
+
<polygon points="11 5 6 9 2 9 2 15 6 15 11 19 11 5"></polygon>
|
|
354
|
+
<path d="M15.54 8.46a5 5 0 0 1 0 7.07"></path>
|
|
355
|
+
<path d="M19.07 4.93a10 10 0 0 1 0 14.14"></path>
|
|
356
|
+
</svg>
|
|
357
|
+
`;
|
|
358
|
+
/**
|
|
359
|
+
* Stop square icon for stopping speech
|
|
360
|
+
*/
|
|
361
|
+
const stopIcon = `
|
|
362
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor" stroke="none">
|
|
363
|
+
<rect x="6" y="6" width="12" height="12" rx="2"></rect>
|
|
364
|
+
</svg>
|
|
365
|
+
`;
|
|
366
|
+
|
|
367
|
+
/**
|
|
368
|
+
* AssistantMessage - Internal component
|
|
369
|
+
* Renders a single message bubble with optional text-to-speech functionality
|
|
370
|
+
*/
|
|
371
|
+
const AssistantMessage = (props) => {
|
|
372
|
+
const { message, enableTextToSpeech, isSpeaking, onSpeak, onStopSpeaking } = props;
|
|
373
|
+
const messageClasses = {
|
|
374
|
+
'xplor-assistant__message': true,
|
|
375
|
+
'xplor-assistant__message--user': message.role === 'user',
|
|
376
|
+
'xplor-assistant__message--assistant': message.role === 'assistant',
|
|
377
|
+
};
|
|
378
|
+
const handleSpeakClick = () => {
|
|
379
|
+
if (isSpeaking) {
|
|
380
|
+
onStopSpeaking === null || onStopSpeaking === void 0 ? void 0 : onStopSpeaking();
|
|
381
|
+
}
|
|
382
|
+
else {
|
|
383
|
+
onSpeak === null || onSpeak === void 0 ? void 0 : onSpeak(message.content);
|
|
384
|
+
}
|
|
385
|
+
};
|
|
386
|
+
const formatTime = (timestamp) => {
|
|
387
|
+
const hours = timestamp.getHours();
|
|
388
|
+
const minutes = timestamp.getMinutes();
|
|
389
|
+
const ampm = hours >= 12 ? 'PM' : 'AM';
|
|
390
|
+
const displayHours = hours % 12 || 12;
|
|
391
|
+
const displayMinutes = minutes < 10 ? `0${minutes}` : minutes;
|
|
392
|
+
return `${displayHours}:${displayMinutes} ${ampm}`;
|
|
393
|
+
};
|
|
394
|
+
return (h("div", { class: messageClasses },
|
|
395
|
+
h("div", { class: "xplor-assistant__message-content" }, message.content),
|
|
396
|
+
h("div", { class: "xplor-assistant__message-footer" },
|
|
397
|
+
h("span", { class: "xplor-assistant__message-timestamp" }, formatTime(message.timestamp)),
|
|
398
|
+
message.role === 'assistant' && enableTextToSpeech && (h("button", { class: {
|
|
399
|
+
'xplor-assistant__speak-button': true,
|
|
400
|
+
'xplor-assistant__speak-button--active': isSpeaking,
|
|
401
|
+
}, onClick: handleSpeakClick, title: isSpeaking ? 'Stop speaking' : 'Listen to message', type: "button" },
|
|
402
|
+
h("span", { class: "xplor-assistant__speak-icon", innerHTML: isSpeaking ? stopIcon : speakerIcon }))))));
|
|
403
|
+
};
|
|
404
|
+
|
|
405
|
+
/**
|
|
406
|
+
* AssistantInput - Internal component
|
|
407
|
+
* Renders the input field with voice and send buttons
|
|
408
|
+
*/
|
|
409
|
+
const AssistantInput = (props) => {
|
|
410
|
+
const { placeholder, disabled, isLoading, enableVoiceInput, isListening, inputValue, onSendMessage, onStartListening, onStopListening, setInputValue, } = props;
|
|
411
|
+
const handleSubmit = (e) => {
|
|
412
|
+
e.preventDefault();
|
|
413
|
+
console.log('[AssistantInput] Submit triggered, inputValue:', inputValue);
|
|
414
|
+
if (inputValue.trim() && !disabled && !isLoading) {
|
|
415
|
+
console.log('[AssistantInput] Calling onSendMessage with:', inputValue);
|
|
416
|
+
onSendMessage(inputValue);
|
|
417
|
+
setInputValue('');
|
|
418
|
+
}
|
|
419
|
+
else {
|
|
420
|
+
console.log('[AssistantInput] Submit blocked - disabled:', disabled, 'isLoading:', isLoading, 'hasValue:', !!inputValue.trim());
|
|
421
|
+
}
|
|
422
|
+
};
|
|
423
|
+
const handleInputChange = (e) => {
|
|
424
|
+
const target = e.target;
|
|
425
|
+
setInputValue(target.value);
|
|
426
|
+
};
|
|
427
|
+
const handleVoiceClick = () => {
|
|
428
|
+
if (isListening) {
|
|
429
|
+
onStopListening();
|
|
430
|
+
}
|
|
431
|
+
else {
|
|
432
|
+
onStartListening();
|
|
433
|
+
}
|
|
434
|
+
};
|
|
435
|
+
const isSendDisabled = !inputValue.trim() || disabled || isLoading;
|
|
436
|
+
return (h("div", { class: "xplor-assistant__input-container" },
|
|
437
|
+
h("form", { onSubmit: handleSubmit, class: "xplor-assistant__input-form" },
|
|
438
|
+
enableVoiceInput && (h("button", { type: "button", class: {
|
|
439
|
+
'xplor-assistant__voice-button': true,
|
|
440
|
+
'xplor-assistant__voice-button--listening': isListening,
|
|
441
|
+
}, onClick: handleVoiceClick, disabled: disabled || isLoading, title: isListening ? 'Stop listening' : 'Start voice input' },
|
|
442
|
+
h("span", { class: "xplor-assistant__voice-icon", innerHTML: microphoneIcon }))),
|
|
443
|
+
h("input", { type: "text", class: "xplor-assistant__input", placeholder: placeholder, value: inputValue, onInput: handleInputChange, disabled: disabled || isLoading }),
|
|
444
|
+
h("button", { type: "submit", class: "xplor-assistant__send-button", disabled: isSendDisabled, title: "Send message" },
|
|
445
|
+
h("span", { class: "xplor-assistant__send-icon", innerHTML: sendIcon })))));
|
|
446
|
+
};
|
|
447
|
+
|
|
448
|
+
/**
|
|
449
|
+
* QuickReplies - Internal component
|
|
450
|
+
* Renders quick reply suggestion buttons
|
|
451
|
+
*/
|
|
452
|
+
const QuickReplies = (props) => {
|
|
453
|
+
const { replies, disabled, onReplyClick } = props;
|
|
454
|
+
if (!replies || replies.length === 0) {
|
|
455
|
+
return null;
|
|
456
|
+
}
|
|
457
|
+
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)))));
|
|
458
|
+
};
|
|
459
|
+
|
|
460
|
+
/**
|
|
461
|
+
* TypingIndicator - Internal component
|
|
462
|
+
* Displays animated dots to indicate the assistant is processing/typing
|
|
463
|
+
*/
|
|
464
|
+
const TypingIndicator = () => {
|
|
465
|
+
return (h("div", { class: "xplor-assistant__typing-indicator" },
|
|
466
|
+
h("span", { class: "xplor-assistant__typing-dot" }),
|
|
467
|
+
h("span", { class: "xplor-assistant__typing-dot" }),
|
|
468
|
+
h("span", { class: "xplor-assistant__typing-dot" })));
|
|
469
|
+
};
|
|
470
|
+
|
|
471
|
+
const xplorAssistantCss = "@tailwind base;\n@tailwind components;\n@tailwind utilities;\n@layer base {\n \n :root {\n --color-primary: #db3b03;\n --color-primary-50: rgba(255, 152, 0, 1);\n --color-secondary: rgb(0, 119, 107);\n --color-secondary-50: rgba(1, 163, 157, 1);\n --color-tertiary: rgb(128, 104, 186);\n --color-tertiary: rgb(223, 242, 241);\n --color-white: white;\n --color-emphasis: rgb(8, 8, 9);\n --color-supergiant: rgb(213, 66, 99);\n --color-orange: rgb(250, 200, 127);\n --color-buttons: #fbbc05;\n --color-typography: #ea4335;\n --background: 20 66% 99%;\n --foreground: 20 51% 4%;\n --muted: 20 25% 86%;\n --muted-foreground: 20 7% 25%;\n --popover: 20 66% 98%;\n --popover-foreground: 20 51% 3%;\n --card: 20 66% 98%;\n --card-foreground: 20 51% 3%;\n --border: 20 15% 94%;\n --input: 20 15% 94%;\n --primary: 20 48% 72%;\n --primary-foreground: 20 48% 12%;\n --secondary: 20 12% 92%;\n --secondary-foreground: 20 12% 32%;\n --accent: 20 12% 92%;\n --accent-foreground: 20 12% 32%;\n --destructive: 11 80% 22%;\n --destructive-foreground: 11 80% 82%;\n --ring: 20 48% 72%;\n --radius: 0.5rem;\n --chart-1: 12 76% 61%;\n --chart-2: 173 58% 39%;\n --chart-3: 197 37% 24%;\n --chart-4: 43 74% 66%;\n --chart-5: 27 87% 67%;\n }\n .dark {\n --background: 253 43% 3%;\n --foreground: 253 31% 98%;\n --muted: 253 7% 13%;\n --muted-foreground: 253 13% 63%;\n --popover: 253 43% 3%;\n --popover-foreground: 253 31% 98%;\n --card: 253 43% 4%;\n --card-foreground: 253 31% 99%;\n --border: 215 27.9% 16.9%;\n --input: 215 27.9% 16.9%;\n --primary: 253 91% 58%;\n --primary-foreground: 253 91% 98%;\n --secondary: 253 7% 9%;\n --secondary-foreground: 253 7% 69%;\n --accent: 253 13% 14%;\n --accent-foreground: 253 13% 74%;\n --destructive: 339.2 90.36% 51.18%;\n --destructive-foreground: 0 0% 100%;\n --ring: 253 91% 58%;\n --chart-1: 220 70% 50%;\n --chart-2: 160 60% 45%;\n --chart-3: 30 80% 55%;\n --chart-4: 280 65% 60%;\n --chart-5: 340 75% 55%;\n }\n}\n@layer base {\n * {\n @apply border-border;\n }\n body {\n @apply box-border bg-background text-foreground;\n }\n}\n@layer utilities {\n .min-h-screen {\n min-height: 100vh;\n \n min-height: 100dvh;\n }\n .h-screen {\n height: 100vh;\n \n height: 100dvh;\n }\n}\n@tailwind base;\n@tailwind components;\n@tailwind utilities;\n@layer components {\n .glass {\n border: none;\n backdrop-filter: blur(var(--glass-blur, 40px));\n background-color: transparent;\n background-image: linear-gradient(135deg, rgb(255, 255, 255, var(--glass-opacity, 30%)), transparent), linear-gradient(var(--glass-reflex-degree, 100deg), rgb(255, 255, 255, var(--glass-reflex-opacity, 10%)) 25%, transparent 0);\n box-shadow: 0 0 0 1px rgb(255, 255, 255, var(--glass-border-opacity, 10%)) inset, 0 0 0 2px rgba(0, 0, 0, 0.05);\n text-shadow: 0 1px rgb(0, 0, 0, var(--glass-text-shadow-opacity, 5%));\n }\n}\n.tox.tox-tinymce.sc-xplor-assistant {\n width: 50% !important;\n height: 400px !important;\n display: inline-flex;\n}\n\n\n@media only screen and (min-width: 600px) {\n .tox.tox-tinymce.sc-xplor-assistant {\n width: 600px !important;\n }\n}\nh1.sc-xplor-assistant {\n color: var(--color-primary);\n \n font-family: Inter;\n font-size: 48px;\n font-style: normal;\n font-weight: 400;\n line-height: 56px; \n}\n\nh2.sc-xplor-assistant {\n color: var(--grey-1100252525, #252525);\n \n font-family: Inter;\n font-size: 32px;\n font-style: normal;\n font-weight: 600;\n line-height: 38px; \n letter-spacing: 0.25px;\n}\n\nh3.sc-xplor-assistant {\n color: var(--grey-1100252525, #252525);\n \n font-family: Inter;\n font-size: 24px;\n font-style: normal;\n font-weight: 400;\n line-height: 32px; \n}\n\n.overline.sc-xplor-assistant {\n color: var(--grey-1100252525, #252525);\n \n font-family: Inter;\n font-size: 12px;\n font-style: normal;\n font-weight: 500;\n line-height: 16px; \n letter-spacing: 3.2px;\n text-transform: uppercase;\n}\n\nol.sc-xplor-assistant, ul.sc-xplor-assistant {\n list-style: none;\n margin: 1rem;\n padding: 0;\n}\nol.sc-xplor-assistant li.sc-xplor-assistant, ul.sc-xplor-assistant li.sc-xplor-assistant {\n margin: 1rem;\n padding: 0;\n}\nol.mdc-list.sc-xplor-assistant, ul.mdc-list.sc-xplor-assistant {\n list-style-type: none;\n list-style: none;\n}\nol.mdc-list.sc-xplor-assistant li.mdc-list-item.sc-xplor-assistant, ul.mdc-list.sc-xplor-assistant li.mdc-list-item.sc-xplor-assistant {\n list-style-type: none;\n list-style: none !important;\n}\n\n.orange-label.sc-xplor-assistant {\n color: var(--Orange-900-Primary, #db3b03);\n \n font-family: Inter;\n font-size: 12px;\n font-style: normal;\n font-weight: 400;\n line-height: 16px; \n letter-spacing: 0.4px;\n margin: 0px 0 -9px 16px;\n z-index: 1 !important;\n position: relative;\n width: fit-content;\n}\n.orange-label.grey-bg.sc-xplor-assistant {\n background-color: #fefcfb;\n}\n\n#spinnerLoader.sc-xplor-assistant {\n position: fixed;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n background-color: #fff;\n padding: 20px;\n border-radius: 5px;\n box-shadow: 0px 0px 10px rgba(0, 0, 0, 0.2);\n display: flex;\n align-items: center;\n justify-content: center;\n z-index: 100;\n pointer-events: none;\n}\n\n#textfield-Title-label.sc-xplor-assistant {\n background-color: white;\n}\n\n.mdc-ripple-upgraded.sc-xplor-assistant .mdc-text-field--outlined.sc-xplor-assistant .mdc-notched-outline__notch.sc-xplor-assistant {\n border: 0px solid transparent !important;\n border-bottom: 1px solid #db3b03 !important;\n padding: 0;\n height: 0;\n}\n\n.mdc-text-field--focused.sc-xplor-assistant .mdc-notched-outline__notch.sc-xplor-assistant {\n border: 0px solid transparent !important;\n border-bottom: 2px solid #db3b03 !important;\n}\n\n.mdc-text-field--outlined.sc-xplor-assistant .mdc-notched-outline.sc-xplor-assistant .mdc-notched-outline__notch.sc-xplor-assistant {\n max-width: calc(100% - max(12px, var(--mdc-shape-small, 4px)) * 2);\n border-top: transparent;\n}\n\n.generate-btn.sc-xplor-assistant {\n display: flex;\n height: 48px;\n padding: 12px 24px;\n justify-content: center;\n align-items: center;\n gap: 10px;\n border-radius: 16px;\n}\n.generate-btn.link.sc-xplor-assistant:hover {\n background-color: var(--Cyan-700-Secondary, #e27046);\n color: var(--Cyan-700-Secondary-Text, #fff);\n}\n\n.bg-green.sc-xplor-assistant {\n background: var(--Cyan-700-Secondary, #00776b);\n}\n\n.margin-128.sc-xplor-assistant {\n margin: 8rem;\n}\n\n.margin-t-128.sc-xplor-assistant {\n margin-top: 8rem;\n}\n\n.margin-r-128.sc-xplor-assistant {\n margin-right: 8rem;\n}\n\n.margin-b-128.sc-xplor-assistant {\n margin-bottom: 8rem;\n}\n\n.margin-l-128.sc-xplor-assistant {\n margin-left: 8rem;\n}\n\n.margin-x-128.sc-xplor-assistant {\n margin-left: 8rem;\n margin-right: 8rem;\n}\n\n.margin-y-128.sc-xplor-assistant {\n margin-top: 8rem;\n margin-bottom: 8rem;\n}\n\n.margin-80.sc-xplor-assistant {\n margin: 5rem;\n}\n\n.margin-t-80.sc-xplor-assistant {\n margin-top: 5rem;\n}\n\n.margin-r-80.sc-xplor-assistant {\n margin-right: 5rem;\n}\n\n.margin-b-80.sc-xplor-assistant {\n margin-bottom: 5rem;\n}\n\n.margin-l-80.sc-xplor-assistant {\n margin-left: 5rem;\n}\n\n.margin-x-80.sc-xplor-assistant {\n margin-left: 5rem;\n margin-right: 5rem;\n}\n\n.margin-y-80.sc-xplor-assistant {\n margin-top: 5rem;\n margin-bottom: 5rem;\n}\n\n.margin-64.sc-xplor-assistant {\n margin: 4rem;\n}\n\n.margin-t-64.sc-xplor-assistant {\n margin-top: 4rem;\n}\n\n.margin-r-64.sc-xplor-assistant {\n margin-right: 4rem;\n}\n\n.margin-b-64.sc-xplor-assistant {\n margin-bottom: 4rem;\n}\n\n.margin-l-64.sc-xplor-assistant {\n margin-left: 4rem;\n}\n\n.margin-x-64.sc-xplor-assistant {\n margin-left: 4rem;\n margin-right: 4rem;\n}\n\n.margin-y-64.sc-xplor-assistant {\n margin-top: 4rem;\n margin-bottom: 4rem;\n}\n\n.margin-56.sc-xplor-assistant {\n margin: 3.5rem;\n}\n\n.margin-t-56.sc-xplor-assistant {\n margin-top: 3.5rem;\n}\n\n.margin-r-56.sc-xplor-assistant {\n margin-right: 3.5rem;\n}\n\n.margin-b-56.sc-xplor-assistant {\n margin-bottom: 3.5rem;\n}\n\n.margin-l-56.sc-xplor-assistant {\n margin-left: 3.5rem;\n}\n\n.margin-x-56.sc-xplor-assistant {\n margin-left: 3.5rem;\n margin-right: 3.5rem;\n}\n\n.margin-y-56.sc-xplor-assistant {\n margin-top: 3.5rem;\n margin-bottom: 3.5rem;\n}\n\n.margin-48.sc-xplor-assistant {\n margin: 3rem;\n}\n\n.margin-t-48.sc-xplor-assistant {\n margin-top: 3rem;\n}\n\n.margin-r-48.sc-xplor-assistant {\n margin-right: 3rem;\n}\n\n.margin-b-48.sc-xplor-assistant {\n margin-bottom: 3rem;\n}\n\n.margin-l-48.sc-xplor-assistant {\n margin-left: 3rem;\n}\n\n.margin-x-48.sc-xplor-assistant {\n margin-left: 3rem;\n margin-right: 3rem;\n}\n\n.margin-y-48.sc-xplor-assistant {\n margin-top: 3rem;\n margin-bottom: 3rem;\n}\n\n.margin-40.sc-xplor-assistant {\n margin: 2.5rem;\n}\n\n.margin-t-40.sc-xplor-assistant {\n margin-top: 2.5rem;\n}\n\n.margin-r-40.sc-xplor-assistant {\n margin-right: 2.5rem;\n}\n\n.margin-b-40.sc-xplor-assistant {\n margin-bottom: 2.5rem;\n}\n\n.margin-l-40.sc-xplor-assistant {\n margin-left: 2.5rem;\n}\n\n.margin-x-40.sc-xplor-assistant {\n margin-left: 2.5rem;\n margin-right: 2.5rem;\n}\n\n.margin-y-40.sc-xplor-assistant {\n margin-top: 2.5rem;\n margin-bottom: 2.5rem;\n}\n\n.margin-32.sc-xplor-assistant {\n margin: 2rem;\n}\n\n.margin-t-32.sc-xplor-assistant {\n margin-top: 2rem;\n}\n\n.margin-r-32.sc-xplor-assistant {\n margin-right: 2rem;\n}\n\n.margin-b-32.sc-xplor-assistant {\n margin-bottom: 2rem;\n}\n\n.margin-l-32.sc-xplor-assistant {\n margin-left: 2rem;\n}\n\n.margin-x-32.sc-xplor-assistant {\n margin-left: 2rem;\n margin-right: 2rem;\n}\n\n.margin-y-32.sc-xplor-assistant {\n margin-top: 2rem;\n margin-bottom: 2rem;\n}\n\n.margin-24.sc-xplor-assistant {\n margin: 1.5rem;\n}\n\n.margin-t-24.sc-xplor-assistant {\n margin-top: 1.5rem;\n}\n\n.margin-r-24.sc-xplor-assistant {\n margin-right: 1.5rem;\n}\n\n.margin-b-24.sc-xplor-assistant {\n margin-bottom: 1.5rem;\n}\n\n.margin-l-24.sc-xplor-assistant {\n margin-left: 1.5rem;\n}\n\n.margin-x-24.sc-xplor-assistant {\n margin-left: 1.5rem;\n margin-right: 1.5rem;\n}\n\n.margin-y-24.sc-xplor-assistant {\n margin-top: 1.5rem;\n margin-bottom: 1.5rem;\n}\n\n.margin-20.sc-xplor-assistant {\n margin: 1.25rem;\n}\n\n.margin-t-20.sc-xplor-assistant {\n margin-top: 1.25rem;\n}\n\n.margin-r-20.sc-xplor-assistant {\n margin-right: 1.25rem;\n}\n\n.margin-b-20.sc-xplor-assistant {\n margin-bottom: 1.25rem;\n}\n\n.margin-l-20.sc-xplor-assistant {\n margin-left: 1.25rem;\n}\n\n.margin-x-20.sc-xplor-assistant {\n margin-left: 1.25rem;\n margin-right: 1.25rem;\n}\n\n.margin-y-20.sc-xplor-assistant {\n margin-top: 1.25rem;\n margin-bottom: 1.25rem;\n}\n\n.margin-16.sc-xplor-assistant {\n margin: 1rem;\n}\n\n.margin-t-16.sc-xplor-assistant {\n margin-top: 1rem;\n}\n\n.margin-r-16.sc-xplor-assistant {\n margin-right: 1rem;\n}\n\n.margin-b-16.sc-xplor-assistant {\n margin-bottom: 1rem;\n}\n\n.margin-l-16.sc-xplor-assistant {\n margin-left: 1rem;\n}\n\n.margin-x-16.sc-xplor-assistant {\n margin-left: 1rem;\n margin-right: 1rem;\n}\n\n.margin-y-16.sc-xplor-assistant {\n margin-top: 1rem;\n margin-bottom: 1rem;\n}\n\n.margin-12.sc-xplor-assistant {\n margin: 0.75rem;\n}\n\n.margin-t-12.sc-xplor-assistant {\n margin-top: 0.75rem;\n}\n\n.margin-r-12.sc-xplor-assistant {\n margin-right: 0.75rem;\n}\n\n.margin-b-12.sc-xplor-assistant {\n margin-bottom: 0.75rem;\n}\n\n.margin-l-12.sc-xplor-assistant {\n margin-left: 0.75rem;\n}\n\n.margin-x-12.sc-xplor-assistant {\n margin-left: 0.75rem;\n margin-right: 0.75rem;\n}\n\n.margin-y-12.sc-xplor-assistant {\n margin-top: 0.75rem;\n margin-bottom: 0.75rem;\n}\n\n.margin-8.sc-xplor-assistant {\n margin: 0.5rem;\n}\n\n.margin-t-8.sc-xplor-assistant {\n margin-top: 0.5rem;\n}\n\n.margin-r-8.sc-xplor-assistant {\n margin-right: 0.5rem;\n}\n\n.margin-b-8.sc-xplor-assistant {\n margin-bottom: 0.5rem;\n}\n\n.margin-l-8.sc-xplor-assistant {\n margin-left: 0.5rem;\n}\n\n.margin-x-8.sc-xplor-assistant {\n margin-left: 0.5rem;\n margin-right: 0.5rem;\n}\n\n.margin-y-8.sc-xplor-assistant {\n margin-top: 0.5rem;\n margin-bottom: 0.5rem;\n}\n\n.margin-4.sc-xplor-assistant {\n margin: 0.25rem;\n}\n\n.margin-t-4.sc-xplor-assistant {\n margin-top: 0.25rem;\n}\n\n.margin-r-4.sc-xplor-assistant {\n margin-right: 0.25rem;\n}\n\n.margin-b-4.sc-xplor-assistant {\n margin-bottom: 0.25rem;\n}\n\n.margin-l-4.sc-xplor-assistant {\n margin-left: 0.25rem;\n}\n\n.margin-x-4.sc-xplor-assistant {\n margin-left: 0.25rem;\n margin-right: 0.25rem;\n}\n\n.margin-y-4.sc-xplor-assistant {\n margin-top: 0.25rem;\n margin-bottom: 0.25rem;\n}\n\n.padding-128.sc-xplor-assistant {\n padding: 8rem;\n}\n\n.padding-t-128.sc-xplor-assistant {\n padding-top: 8rem;\n}\n\n.padding-r-128.sc-xplor-assistant {\n padding-right: 8rem;\n}\n\n.padding-b-128.sc-xplor-assistant {\n padding-bottom: 8rem;\n}\n\n.padding-l-128.sc-xplor-assistant {\n padding-left: 8rem;\n}\n\n.padding-x-128.sc-xplor-assistant {\n padding-left: 8rem;\n padding-right: 8rem;\n}\n\n.padding-y-128.sc-xplor-assistant {\n padding-top: 8rem;\n padding-bottom: 8rem;\n}\n\n.padding-80.sc-xplor-assistant {\n padding: 5rem;\n}\n\n.padding-t-80.sc-xplor-assistant {\n padding-top: 5rem;\n}\n\n.padding-r-80.sc-xplor-assistant {\n padding-right: 5rem;\n}\n\n.padding-b-80.sc-xplor-assistant {\n padding-bottom: 5rem;\n}\n\n.padding-l-80.sc-xplor-assistant {\n padding-left: 5rem;\n}\n\n.padding-x-80.sc-xplor-assistant {\n padding-left: 5rem;\n padding-right: 5rem;\n}\n\n.padding-y-80.sc-xplor-assistant {\n padding-top: 5rem;\n padding-bottom: 5rem;\n}\n\n.padding-64.sc-xplor-assistant {\n padding: 4rem;\n}\n\n.padding-t-64.sc-xplor-assistant {\n padding-top: 4rem;\n}\n\n.padding-r-64.sc-xplor-assistant {\n padding-right: 4rem;\n}\n\n.padding-b-64.sc-xplor-assistant {\n padding-bottom: 4rem;\n}\n\n.padding-l-64.sc-xplor-assistant {\n padding-left: 4rem;\n}\n\n.padding-x-64.sc-xplor-assistant {\n padding-left: 4rem;\n padding-right: 4rem;\n}\n\n.padding-y-64.sc-xplor-assistant {\n padding-top: 4rem;\n padding-bottom: 4rem;\n}\n\n.padding-56.sc-xplor-assistant {\n padding: 3.5rem;\n}\n\n.padding-t-56.sc-xplor-assistant {\n padding-top: 3.5rem;\n}\n\n.padding-r-56.sc-xplor-assistant {\n padding-right: 3.5rem;\n}\n\n.padding-b-56.sc-xplor-assistant {\n padding-bottom: 3.5rem;\n}\n\n.padding-l-56.sc-xplor-assistant {\n padding-left: 3.5rem;\n}\n\n.padding-x-56.sc-xplor-assistant {\n padding-left: 3.5rem;\n padding-right: 3.5rem;\n}\n\n.padding-y-56.sc-xplor-assistant {\n padding-top: 3.5rem;\n padding-bottom: 3.5rem;\n}\n\n.padding-48.sc-xplor-assistant {\n padding: 3rem;\n}\n\n.padding-t-48.sc-xplor-assistant {\n padding-top: 3rem;\n}\n\n.padding-r-48.sc-xplor-assistant {\n padding-right: 3rem;\n}\n\n.padding-b-48.sc-xplor-assistant {\n padding-bottom: 3rem;\n}\n\n.padding-l-48.sc-xplor-assistant {\n padding-left: 3rem;\n}\n\n.padding-x-48.sc-xplor-assistant {\n padding-left: 3rem;\n padding-right: 3rem;\n}\n\n.padding-y-48.sc-xplor-assistant {\n padding-top: 3rem;\n padding-bottom: 3rem;\n}\n\n.padding-40.sc-xplor-assistant {\n padding: 2.5rem;\n}\n\n.padding-t-40.sc-xplor-assistant {\n padding-top: 2.5rem;\n}\n\n.padding-r-40.sc-xplor-assistant {\n padding-right: 2.5rem;\n}\n\n.padding-b-40.sc-xplor-assistant {\n padding-bottom: 2.5rem;\n}\n\n.padding-l-40.sc-xplor-assistant {\n padding-left: 2.5rem;\n}\n\n.padding-x-40.sc-xplor-assistant {\n padding-left: 2.5rem;\n padding-right: 2.5rem;\n}\n\n.padding-y-40.sc-xplor-assistant {\n padding-top: 2.5rem;\n padding-bottom: 2.5rem;\n}\n\n.padding-32.sc-xplor-assistant {\n padding: 2rem;\n}\n\n.padding-t-32.sc-xplor-assistant {\n padding-top: 2rem;\n}\n\n.padding-r-32.sc-xplor-assistant {\n padding-right: 2rem;\n}\n\n.padding-b-32.sc-xplor-assistant {\n padding-bottom: 2rem;\n}\n\n.padding-l-32.sc-xplor-assistant {\n padding-left: 2rem;\n}\n\n.padding-x-32.sc-xplor-assistant {\n padding-left: 2rem;\n padding-right: 2rem;\n}\n\n.padding-y-32.sc-xplor-assistant {\n padding-top: 2rem;\n padding-bottom: 2rem;\n}\n\n.padding-24.sc-xplor-assistant {\n padding: 1.5rem;\n}\n\n.padding-t-24.sc-xplor-assistant {\n padding-top: 1.5rem;\n}\n\n.padding-r-24.sc-xplor-assistant {\n padding-right: 1.5rem;\n}\n\n.padding-b-24.sc-xplor-assistant {\n padding-bottom: 1.5rem;\n}\n\n.padding-l-24.sc-xplor-assistant {\n padding-left: 1.5rem;\n}\n\n.padding-x-24.sc-xplor-assistant {\n padding-left: 1.5rem;\n padding-right: 1.5rem;\n}\n\n.padding-y-24.sc-xplor-assistant {\n padding-top: 1.5rem;\n padding-bottom: 1.5rem;\n}\n\n.padding-20.sc-xplor-assistant {\n padding: 1.25rem;\n}\n\n.padding-t-20.sc-xplor-assistant {\n padding-top: 1.25rem;\n}\n\n.padding-r-20.sc-xplor-assistant {\n padding-right: 1.25rem;\n}\n\n.padding-b-20.sc-xplor-assistant {\n padding-bottom: 1.25rem;\n}\n\n.padding-l-20.sc-xplor-assistant {\n padding-left: 1.25rem;\n}\n\n.padding-x-20.sc-xplor-assistant {\n padding-left: 1.25rem;\n padding-right: 1.25rem;\n}\n\n.padding-y-20.sc-xplor-assistant {\n padding-top: 1.25rem;\n padding-bottom: 1.25rem;\n}\n\n.padding-16.sc-xplor-assistant {\n padding: 1rem;\n}\n\n.padding-t-16.sc-xplor-assistant {\n padding-top: 1rem;\n}\n\n.padding-r-16.sc-xplor-assistant {\n padding-right: 1rem;\n}\n\n.padding-b-16.sc-xplor-assistant {\n padding-bottom: 1rem;\n}\n\n.padding-l-16.sc-xplor-assistant {\n padding-left: 1rem;\n}\n\n.padding-x-16.sc-xplor-assistant {\n padding-left: 1rem;\n padding-right: 1rem;\n}\n\n.padding-y-16.sc-xplor-assistant {\n padding-top: 1rem;\n padding-bottom: 1rem;\n}\n\n.padding-12.sc-xplor-assistant {\n padding: 0.75rem;\n}\n\n.padding-t-12.sc-xplor-assistant {\n padding-top: 0.75rem;\n}\n\n.padding-r-12.sc-xplor-assistant {\n padding-right: 0.75rem;\n}\n\n.padding-b-12.sc-xplor-assistant {\n padding-bottom: 0.75rem;\n}\n\n.padding-l-12.sc-xplor-assistant {\n padding-left: 0.75rem;\n}\n\n.padding-x-12.sc-xplor-assistant {\n padding-left: 0.75rem;\n padding-right: 0.75rem;\n}\n\n.padding-y-12.sc-xplor-assistant {\n padding-top: 0.75rem;\n padding-bottom: 0.75rem;\n}\n\n.padding-8.sc-xplor-assistant {\n padding: 0.5rem;\n}\n\n.padding-t-8.sc-xplor-assistant {\n padding-top: 0.5rem;\n}\n\n.padding-r-8.sc-xplor-assistant {\n padding-right: 0.5rem;\n}\n\n.padding-b-8.sc-xplor-assistant {\n padding-bottom: 0.5rem;\n}\n\n.padding-l-8.sc-xplor-assistant {\n padding-left: 0.5rem;\n}\n\n.padding-x-8.sc-xplor-assistant {\n padding-left: 0.5rem;\n padding-right: 0.5rem;\n}\n\n.padding-y-8.sc-xplor-assistant {\n padding-top: 0.5rem;\n padding-bottom: 0.5rem;\n}\n\n.padding-4.sc-xplor-assistant {\n padding: 0.25rem;\n}\n\n.padding-t-4.sc-xplor-assistant {\n padding-top: 0.25rem;\n}\n\n.padding-r-4.sc-xplor-assistant {\n padding-right: 0.25rem;\n}\n\n.padding-b-4.sc-xplor-assistant {\n padding-bottom: 0.25rem;\n}\n\n.padding-l-4.sc-xplor-assistant {\n padding-left: 0.25rem;\n}\n\n.padding-x-4.sc-xplor-assistant {\n padding-left: 0.25rem;\n padding-right: 0.25rem;\n}\n\n.padding-y-4.sc-xplor-assistant {\n padding-top: 0.25rem;\n padding-bottom: 0.25rem;\n}\n\n.sc-xplor-assistant-h {\n display: block;\n --assistant-bot-bg: var(--color-secondary);\n --assistant-user-bg: #eeeeee;\n --assistant-accent: var(--color-warning, #ff9800);\n --assistant-border: #e0e0e0;\n --assistant-text: #212121;\n --assistant-text-light: #757575;\n}\n\n.xplor-assistant.sc-xplor-assistant {\n display: flex;\n flex-direction: column;\n width: 100%;\n height: 100%;\n background-color: #ffffff;\n border-radius: 0.75rem;\n border: 1px solid var(--assistant-border);\n overflow: hidden;\n}\n.xplor-assistant--disabled.sc-xplor-assistant {\n opacity: 0.6;\n pointer-events: none;\n}\n.xplor-assistant--error.sc-xplor-assistant {\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 1.5rem;\n}\n\n.xplor-assistant__messages.sc-xplor-assistant {\n flex: 1;\n overflow-y: auto;\n padding: 1rem;\n display: flex;\n flex-direction: column;\n gap: 0.75rem;\n scroll-behavior: smooth;\n}\n.xplor-assistant__messages.sc-xplor-assistant::-webkit-scrollbar {\n width: 6px;\n}\n.xplor-assistant__messages.sc-xplor-assistant::-webkit-scrollbar-track {\n background: #f5f5f5;\n border-radius: 3px;\n}\n.xplor-assistant__messages.sc-xplor-assistant::-webkit-scrollbar-thumb {\n background: #bdbdbd;\n border-radius: 3px;\n}\n.xplor-assistant__messages.sc-xplor-assistant::-webkit-scrollbar-thumb:hover {\n background: #9e9e9e;\n}\n\n.xplor-assistant__message.sc-xplor-assistant {\n display: flex;\n flex-direction: column;\n max-width: 80%;\n animation: slideIn 0.3s ease-out;\n}\n.xplor-assistant__message--bot.sc-xplor-assistant {\n align-self: flex-start;\n}\n.xplor-assistant__message--bot.sc-xplor-assistant .xplor-assistant__message-content.sc-xplor-assistant {\n background-color: var(--assistant-bot-bg);\n color: #ffffff;\n border-radius: 1rem 1rem 1rem 0.25rem;\n}\n.xplor-assistant__message--user.sc-xplor-assistant {\n align-self: flex-end;\n}\n.xplor-assistant__message--user.sc-xplor-assistant .xplor-assistant__message-content.sc-xplor-assistant {\n background-color: var(--assistant-user-bg);\n color: var(--assistant-text);\n border-radius: 1rem 1rem 0.25rem 1rem;\n}\n\n.xplor-assistant__message-content.sc-xplor-assistant {\n padding: 0.75rem 1rem;\n font-size: 0.9375rem;\n line-height: 1.5;\n word-wrap: break-word;\n overflow-wrap: break-word;\n}\n\n.xplor-assistant__message-footer.sc-xplor-assistant {\n display: flex;\n align-items: center;\n justify-content: space-between;\n margin-top: 0.25rem;\n padding: 0 0.5rem;\n}\n\n.xplor-assistant__message-timestamp.sc-xplor-assistant {\n font-size: 0.75rem;\n color: var(--assistant-text-light);\n}\n\n.xplor-assistant__speak-button.sc-xplor-assistant {\n background: transparent;\n border: none;\n cursor: pointer;\n padding: 0.25rem;\n display: flex;\n align-items: center;\n justify-content: center;\n border-radius: 50%;\n transition: background-color 0.2s;\n}\n.xplor-assistant__speak-button.sc-xplor-assistant:hover {\n background-color: #eeeeee;\n}\n.xplor-assistant__speak-button--active.sc-xplor-assistant {\n background-color: #e0e0e0;\n}\n\n.xplor-assistant__speak-icon.sc-xplor-assistant {\n width: 16px;\n height: 16px;\n display: flex;\n align-items: center;\n justify-content: center;\n}\n.xplor-assistant__speak-icon.sc-xplor-assistant svg.sc-xplor-assistant {\n width: 16px;\n height: 16px;\n stroke: var(--assistant-text-light);\n}\n\n.xplor-assistant__typing-indicator.sc-xplor-assistant {\n display: flex;\n gap: 0.25rem;\n padding: 0.75rem 1rem;\n}\n\n.xplor-assistant__typing-dot.sc-xplor-assistant {\n width: 8px;\n height: 8px;\n border-radius: 50%;\n background-color: #bdbdbd;\n animation: typingBounce 1.4s infinite ease-in-out;\n}\n.xplor-assistant__typing-dot.sc-xplor-assistant:nth-child(1) {\n animation-delay: 0s;\n}\n.xplor-assistant__typing-dot.sc-xplor-assistant:nth-child(2) {\n animation-delay: 0.2s;\n}\n.xplor-assistant__typing-dot.sc-xplor-assistant:nth-child(3) {\n animation-delay: 0.4s;\n}\n\n.xplor-assistant__error-banner.sc-xplor-assistant {\n background-color: var(--color-error-50, #ffebee);\n color: var(--color-error-700, #d32f2f);\n padding: 0.75rem 1rem;\n border-radius: 0.5rem;\n font-size: 0.875rem;\n margin: 0.5rem 0;\n}\n\n.xplor-assistant__error-message.sc-xplor-assistant {\n color: var(--color-error-700, #d32f2f);\n font-size: 0.9375rem;\n text-align: center;\n}\n\n.xplor-assistant__quick-replies.sc-xplor-assistant {\n display: flex;\n flex-wrap: wrap;\n gap: 0.5rem;\n padding: 0.75rem 1rem;\n border-top: 1px solid var(--assistant-border);\n background-color: #fafafa;\n}\n\n.xplor-assistant__quick-reply.sc-xplor-assistant {\n padding: 0.5rem 1rem;\n background-color: #ffffff;\n border: 2px solid var(--assistant-accent);\n color: var(--assistant-accent);\n border-radius: 1rem;\n font-size: 0.875rem;\n font-weight: 500;\n cursor: pointer;\n transition: all 0.2s;\n white-space: nowrap;\n}\n.xplor-assistant__quick-reply.sc-xplor-assistant:hover:not(:disabled) {\n background-color: var(--assistant-accent);\n color: #ffffff;\n transform: translateY(-1px);\n}\n.xplor-assistant__quick-reply.sc-xplor-assistant:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n}\n\n.xplor-assistant__input-container.sc-xplor-assistant {\n border-top: 1px solid var(--assistant-border);\n padding: 0.75rem;\n background-color: #ffffff;\n}\n\n.xplor-assistant__input-form.sc-xplor-assistant {\n display: flex;\n gap: 0.5rem;\n align-items: center;\n}\n\n.xplor-assistant__input.sc-xplor-assistant {\n flex: 1;\n padding: 0.75rem 1rem;\n border: 1px solid var(--assistant-border);\n border-radius: 1.5rem;\n font-size: 0.9375rem;\n outline: none;\n transition: border-color 0.2s;\n}\n.xplor-assistant__input.sc-xplor-assistant:focus {\n border-color: var(--assistant-bot-bg);\n}\n.xplor-assistant__input.sc-xplor-assistant:disabled {\n background-color: #f5f5f5;\n cursor: not-allowed;\n}\n.xplor-assistant__input.sc-xplor-assistant::placeholder {\n color: #9e9e9e;\n}\n\n.xplor-assistant__voice-button.sc-xplor-assistant {\n width: 40px;\n height: 40px;\n border-radius: 50%;\n border: none;\n background-color: #eeeeee;\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n transition: all 0.2s;\n flex-shrink: 0;\n}\n.xplor-assistant__voice-button.sc-xplor-assistant:hover:not(:disabled) {\n background-color: #e0e0e0;\n transform: scale(1.05);\n}\n.xplor-assistant__voice-button--listening.sc-xplor-assistant {\n background-color: var(--color-error, #f44336);\n animation: pulse 1.5s ease-in-out infinite;\n}\n.xplor-assistant__voice-button--listening.sc-xplor-assistant .xplor-assistant__voice-icon.sc-xplor-assistant svg.sc-xplor-assistant {\n stroke: #ffffff;\n}\n.xplor-assistant__voice-button.sc-xplor-assistant:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n}\n\n.xplor-assistant__voice-icon.sc-xplor-assistant {\n width: 20px;\n height: 20px;\n display: flex;\n align-items: center;\n justify-content: center;\n}\n.xplor-assistant__voice-icon.sc-xplor-assistant svg.sc-xplor-assistant {\n width: 20px;\n height: 20px;\n stroke: var(--assistant-text);\n}\n\n.xplor-assistant__send-button.sc-xplor-assistant {\n width: 40px;\n height: 40px;\n border-radius: 50%;\n border: none;\n background-color: var(--assistant-bot-bg);\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n transition: all 0.2s;\n flex-shrink: 0;\n}\n.xplor-assistant__send-button.sc-xplor-assistant:hover:not(:disabled) {\n background-color: var(--color-secondary-700, #7b1fa2);\n transform: scale(1.05);\n}\n.xplor-assistant__send-button.sc-xplor-assistant:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n}\n\n.xplor-assistant__send-icon.sc-xplor-assistant {\n width: 20px;\n height: 20px;\n display: flex;\n align-items: center;\n justify-content: center;\n}\n.xplor-assistant__send-icon.sc-xplor-assistant svg.sc-xplor-assistant {\n width: 20px;\n height: 20px;\n stroke: #ffffff;\n}\n\n@keyframes slideIn {\n from {\n opacity: 0;\n transform: translateY(10px);\n }\n to {\n opacity: 1;\n transform: translateY(0);\n }\n}\n@keyframes typingBounce {\n 0%, 60%, 100% {\n transform: translateY(0);\n }\n 30% {\n transform: translateY(-8px);\n }\n}\n@keyframes pulse {\n 0%, 100% {\n transform: scale(1);\n opacity: 1;\n }\n 50% {\n transform: scale(1.05);\n opacity: 0.9;\n }\n}";
|
|
472
|
+
|
|
473
|
+
const XplorAssistant$1 = /*@__PURE__*/ proxyCustomElement(class XplorAssistant extends H {
|
|
474
|
+
constructor() {
|
|
475
|
+
super();
|
|
476
|
+
this.__registerHost();
|
|
477
|
+
this.assistantMessageSent = createEvent(this, "assistantMessageSent");
|
|
478
|
+
this.assistantMessageReceived = createEvent(this, "assistantMessageReceived");
|
|
479
|
+
this.assistantError = createEvent(this, "assistantError");
|
|
480
|
+
this.assistantSessionCreated = createEvent(this, "assistantSessionCreated");
|
|
481
|
+
this.placeholder = 'Type your message...';
|
|
482
|
+
this.enableVoiceInput = true;
|
|
483
|
+
this.enableTextToSpeech = true;
|
|
484
|
+
this.autoSpeak = false;
|
|
485
|
+
this.maxHeight = '600px';
|
|
486
|
+
this.disabled = false;
|
|
487
|
+
// State
|
|
488
|
+
this.messages = [];
|
|
489
|
+
this.internalSessionId = '';
|
|
490
|
+
this.isLoading = false;
|
|
491
|
+
this.isListening = false;
|
|
492
|
+
this.isSpeaking = false;
|
|
493
|
+
this.error = '';
|
|
494
|
+
this.inputValue = '';
|
|
495
|
+
this.hasVoiceSupport = false;
|
|
496
|
+
this.hasTTSSupport = false;
|
|
497
|
+
this.handleSendMessage = async (messageText) => {
|
|
498
|
+
console.log('[XplorAssistant] handleSendMessage called with:', messageText);
|
|
499
|
+
if (this.disabled || this.isLoading || !messageText.trim()) {
|
|
500
|
+
console.log('[XplorAssistant] Message blocked - disabled:', this.disabled, 'isLoading:', this.isLoading, 'hasValue:', !!messageText.trim());
|
|
501
|
+
return;
|
|
502
|
+
}
|
|
503
|
+
// Clear the input immediately
|
|
504
|
+
this.inputValue = '';
|
|
505
|
+
console.log('[XplorAssistant] Input cleared, proceeding with message');
|
|
506
|
+
const userMessage = {
|
|
507
|
+
id: `user-${Date.now()}`,
|
|
508
|
+
role: 'user',
|
|
509
|
+
content: messageText.trim(),
|
|
510
|
+
timestamp: new Date(),
|
|
511
|
+
};
|
|
512
|
+
// Add user message to the conversation
|
|
513
|
+
this.messages = [...this.messages, userMessage];
|
|
514
|
+
this.error = '';
|
|
515
|
+
this.isLoading = true;
|
|
516
|
+
// Emit message sent event
|
|
517
|
+
this.assistantMessageSent.emit({
|
|
518
|
+
message: userMessage.content,
|
|
519
|
+
sessionId: this.internalSessionId,
|
|
520
|
+
timestamp: userMessage.timestamp,
|
|
521
|
+
});
|
|
522
|
+
try {
|
|
523
|
+
// Call the API
|
|
524
|
+
const response = await sendMessageToAPI(this.apiEndpoint, userMessage.content, this.internalSessionId, this.userId, this.userEmail, this.userName);
|
|
525
|
+
// Update session ID if changed
|
|
526
|
+
if (response.sessionId && response.sessionId !== this.internalSessionId) {
|
|
527
|
+
this.internalSessionId = response.sessionId;
|
|
528
|
+
}
|
|
529
|
+
// Add assistant response to conversation
|
|
530
|
+
const assistantMessage = {
|
|
531
|
+
id: `assistant-${Date.now()}`,
|
|
532
|
+
role: 'assistant',
|
|
533
|
+
content: response.message,
|
|
534
|
+
timestamp: new Date(),
|
|
535
|
+
};
|
|
536
|
+
this.messages = [...this.messages, assistantMessage];
|
|
537
|
+
// Emit message received event
|
|
538
|
+
this.assistantMessageReceived.emit({
|
|
539
|
+
message: assistantMessage.content,
|
|
540
|
+
sessionId: this.internalSessionId,
|
|
541
|
+
timestamp: assistantMessage.timestamp,
|
|
542
|
+
});
|
|
543
|
+
// Auto-speak if enabled
|
|
544
|
+
if (this.autoSpeak && this.enableTextToSpeech) {
|
|
545
|
+
this.speechSynthesis.speak(assistantMessage.content);
|
|
546
|
+
}
|
|
547
|
+
}
|
|
548
|
+
catch (error) {
|
|
549
|
+
const errorMessage = error instanceof Error ? error.message : 'Failed to send message';
|
|
550
|
+
this.handleError(errorMessage, 'api');
|
|
551
|
+
}
|
|
552
|
+
finally {
|
|
553
|
+
this.isLoading = false;
|
|
554
|
+
}
|
|
555
|
+
};
|
|
556
|
+
this.handleVoiceInput = (transcript) => {
|
|
557
|
+
if (transcript && transcript.trim()) {
|
|
558
|
+
this.handleSendMessage(transcript);
|
|
559
|
+
}
|
|
560
|
+
};
|
|
561
|
+
this.handleError = (error, type) => {
|
|
562
|
+
this.error = error;
|
|
563
|
+
this.assistantError.emit({
|
|
564
|
+
error,
|
|
565
|
+
type,
|
|
566
|
+
timestamp: new Date(),
|
|
567
|
+
});
|
|
568
|
+
};
|
|
569
|
+
this.handleStartListening = () => {
|
|
570
|
+
if (this.speechRecognition && this.enableVoiceInput && !this.disabled && !this.isLoading) {
|
|
571
|
+
this.speechRecognition.start();
|
|
572
|
+
}
|
|
573
|
+
};
|
|
574
|
+
this.handleStopListening = () => {
|
|
575
|
+
if (this.speechRecognition) {
|
|
576
|
+
this.speechRecognition.stop();
|
|
577
|
+
}
|
|
578
|
+
};
|
|
579
|
+
this.handleSpeak = (text) => {
|
|
580
|
+
if (this.speechSynthesis && this.enableTextToSpeech) {
|
|
581
|
+
this.speechSynthesis.speak(text);
|
|
582
|
+
}
|
|
583
|
+
};
|
|
584
|
+
this.handleStopSpeaking = () => {
|
|
585
|
+
if (this.speechSynthesis) {
|
|
586
|
+
this.speechSynthesis.stop();
|
|
587
|
+
}
|
|
588
|
+
};
|
|
589
|
+
this.handleQuickReply = (reply) => {
|
|
590
|
+
this.handleSendMessage(reply);
|
|
591
|
+
};
|
|
592
|
+
this.setInputValue = (value) => {
|
|
593
|
+
this.inputValue = value;
|
|
594
|
+
};
|
|
595
|
+
}
|
|
596
|
+
componentWillLoad() {
|
|
597
|
+
// Validate required props
|
|
598
|
+
if (!this.apiEndpoint) {
|
|
599
|
+
console.error('xplor-assistant: apiEndpoint prop is required');
|
|
600
|
+
this.error = 'Configuration error: API endpoint not provided';
|
|
601
|
+
return;
|
|
602
|
+
}
|
|
603
|
+
if (!this.userId || !this.userEmail || !this.userName) {
|
|
604
|
+
console.error('xplor-assistant: userId, userEmail, and userName props are required');
|
|
605
|
+
this.error = 'Configuration error: User information not provided';
|
|
606
|
+
return;
|
|
607
|
+
}
|
|
608
|
+
// Initialize session
|
|
609
|
+
if (this.sessionId) {
|
|
610
|
+
this.internalSessionId = this.sessionId;
|
|
611
|
+
}
|
|
612
|
+
else {
|
|
613
|
+
this.internalSessionId = generateSessionId();
|
|
614
|
+
this.assistantSessionCreated.emit({
|
|
615
|
+
sessionId: this.internalSessionId,
|
|
616
|
+
timestamp: new Date(),
|
|
617
|
+
});
|
|
618
|
+
}
|
|
619
|
+
// Detect browser capabilities
|
|
620
|
+
const capabilities = detectBrowserCapabilities();
|
|
621
|
+
this.hasVoiceSupport = capabilities.voiceInput;
|
|
622
|
+
this.hasTTSSupport = capabilities.textToSpeech;
|
|
623
|
+
// Disable features if not supported
|
|
624
|
+
if (!this.hasVoiceSupport) {
|
|
625
|
+
this.enableVoiceInput = false;
|
|
626
|
+
}
|
|
627
|
+
if (!this.hasTTSSupport) {
|
|
628
|
+
this.enableTextToSpeech = false;
|
|
629
|
+
}
|
|
630
|
+
// Initialize speech managers
|
|
631
|
+
this.speechRecognition = new SpeechRecognitionManager();
|
|
632
|
+
this.speechSynthesis = new SpeechSynthesisManager();
|
|
633
|
+
// Setup speech recognition callbacks
|
|
634
|
+
this.speechRecognition.onStart(() => {
|
|
635
|
+
this.isListening = true;
|
|
636
|
+
});
|
|
637
|
+
this.speechRecognition.onEnd(() => {
|
|
638
|
+
this.isListening = false;
|
|
639
|
+
});
|
|
640
|
+
this.speechRecognition.onResult((transcript) => {
|
|
641
|
+
this.handleVoiceInput(transcript);
|
|
642
|
+
});
|
|
643
|
+
this.speechRecognition.onError((error) => {
|
|
644
|
+
this.isListening = false;
|
|
645
|
+
this.handleError(error, 'voice');
|
|
646
|
+
});
|
|
647
|
+
// Setup speech synthesis callbacks
|
|
648
|
+
this.speechSynthesis.onStart(() => {
|
|
649
|
+
this.isSpeaking = true;
|
|
650
|
+
});
|
|
651
|
+
this.speechSynthesis.onEnd(() => {
|
|
652
|
+
this.isSpeaking = false;
|
|
653
|
+
});
|
|
654
|
+
}
|
|
655
|
+
handleSessionIdChange(newSessionId) {
|
|
656
|
+
if (newSessionId && newSessionId !== this.internalSessionId) {
|
|
657
|
+
this.internalSessionId = newSessionId;
|
|
658
|
+
}
|
|
659
|
+
}
|
|
660
|
+
componentDidUpdate() {
|
|
661
|
+
// Auto-scroll to bottom when new messages arrive
|
|
662
|
+
this.scrollToBottom();
|
|
663
|
+
}
|
|
664
|
+
disconnectedCallback() {
|
|
665
|
+
// Cleanup speech synthesis
|
|
666
|
+
if (this.speechSynthesis) {
|
|
667
|
+
this.speechSynthesis.stop();
|
|
668
|
+
}
|
|
669
|
+
}
|
|
670
|
+
// Public Methods
|
|
671
|
+
async sendMessage(message) {
|
|
672
|
+
if (!message || !message.trim()) {
|
|
673
|
+
return;
|
|
674
|
+
}
|
|
675
|
+
await this.handleSendMessage(message);
|
|
676
|
+
}
|
|
677
|
+
async clearHistory() {
|
|
678
|
+
this.messages = [];
|
|
679
|
+
this.error = '';
|
|
680
|
+
}
|
|
681
|
+
async speak(text) {
|
|
682
|
+
if (this.enableTextToSpeech && this.speechSynthesis) {
|
|
683
|
+
this.speechSynthesis.speak(text);
|
|
684
|
+
}
|
|
685
|
+
}
|
|
686
|
+
async stopSpeaking() {
|
|
687
|
+
if (this.speechSynthesis) {
|
|
688
|
+
this.speechSynthesis.stop();
|
|
689
|
+
}
|
|
690
|
+
}
|
|
691
|
+
// Private Methods
|
|
692
|
+
scrollToBottom() {
|
|
693
|
+
if (this.messagesContainerRef) {
|
|
694
|
+
setTimeout(() => {
|
|
695
|
+
this.messagesContainerRef.scrollTop = this.messagesContainerRef.scrollHeight;
|
|
696
|
+
}, 100);
|
|
697
|
+
}
|
|
698
|
+
}
|
|
699
|
+
render() {
|
|
700
|
+
// Show error state if critical error
|
|
701
|
+
if (this.error && !this.apiEndpoint) {
|
|
702
|
+
return (h(Host, null, h("div", { class: "xplor-assistant xplor-assistant--error" }, h("div", { class: "xplor-assistant__error-message" }, this.error))));
|
|
703
|
+
}
|
|
704
|
+
return (h(Host, null, h("div", { class: {
|
|
705
|
+
'xplor-assistant': true,
|
|
706
|
+
'xplor-assistant--disabled': this.disabled,
|
|
707
|
+
}, style: { maxHeight: this.maxHeight } }, h("div", { class: "xplor-assistant__messages", ref: (el) => (this.messagesContainerRef = el) }, this.messages.map((message) => (h(AssistantMessage, { message: message, enableTextToSpeech: this.enableTextToSpeech, autoSpeak: false, isSpeaking: this.isSpeaking, onSpeak: this.handleSpeak, onStopSpeaking: this.handleStopSpeaking }))), this.isLoading && (h("div", { class: "xplor-assistant__message xplor-assistant__message--assistant" }, h(TypingIndicator, null))), this.error && this.apiEndpoint && (h("div", { class: "xplor-assistant__error-banner" }, this.error))), this.quickReplies && this.quickReplies.length > 0 && (h(QuickReplies, { replies: this.quickReplies, disabled: this.disabled || this.isLoading, onReplyClick: this.handleQuickReply })), h(AssistantInput, { placeholder: this.placeholder, disabled: this.disabled, isLoading: this.isLoading, enableVoiceInput: this.enableVoiceInput && this.hasVoiceSupport, isListening: this.isListening, onSendMessage: this.handleSendMessage, onStartListening: this.handleStartListening, onStopListening: this.handleStopListening, inputValue: this.inputValue, setInputValue: this.setInputValue }))));
|
|
708
|
+
}
|
|
709
|
+
get el() { return this; }
|
|
710
|
+
static get watchers() { return {
|
|
711
|
+
"sessionId": ["handleSessionIdChange"]
|
|
712
|
+
}; }
|
|
713
|
+
static get style() { return xplorAssistantCss; }
|
|
714
|
+
}, [2, "xplor-assistant", {
|
|
715
|
+
"apiEndpoint": [1, "api-endpoint"],
|
|
716
|
+
"userId": [1, "user-id"],
|
|
717
|
+
"userEmail": [1, "user-email"],
|
|
718
|
+
"userName": [1, "user-name"],
|
|
719
|
+
"sessionId": [1, "session-id"],
|
|
720
|
+
"quickReplies": [16, "quick-replies"],
|
|
721
|
+
"placeholder": [1],
|
|
722
|
+
"enableVoiceInput": [4, "enable-voice-input"],
|
|
723
|
+
"enableTextToSpeech": [4, "enable-text-to-speech"],
|
|
724
|
+
"autoSpeak": [4, "auto-speak"],
|
|
725
|
+
"maxHeight": [1, "max-height"],
|
|
726
|
+
"disabled": [4],
|
|
727
|
+
"messages": [32],
|
|
728
|
+
"internalSessionId": [32],
|
|
729
|
+
"isLoading": [32],
|
|
730
|
+
"isListening": [32],
|
|
731
|
+
"isSpeaking": [32],
|
|
732
|
+
"error": [32],
|
|
733
|
+
"inputValue": [32],
|
|
734
|
+
"hasVoiceSupport": [32],
|
|
735
|
+
"hasTTSSupport": [32],
|
|
736
|
+
"sendMessage": [64],
|
|
737
|
+
"clearHistory": [64],
|
|
738
|
+
"speak": [64],
|
|
739
|
+
"stopSpeaking": [64]
|
|
740
|
+
}, undefined, {
|
|
741
|
+
"sessionId": ["handleSessionIdChange"]
|
|
742
|
+
}]);
|
|
743
|
+
function defineCustomElement$1() {
|
|
744
|
+
if (typeof customElements === "undefined") {
|
|
745
|
+
return;
|
|
746
|
+
}
|
|
747
|
+
const components = ["xplor-assistant"];
|
|
748
|
+
components.forEach(tagName => { switch (tagName) {
|
|
749
|
+
case "xplor-assistant":
|
|
750
|
+
if (!customElements.get(tagName)) {
|
|
751
|
+
customElements.define(tagName, XplorAssistant$1);
|
|
752
|
+
}
|
|
753
|
+
break;
|
|
754
|
+
} });
|
|
755
|
+
}
|
|
756
|
+
|
|
757
|
+
const XplorAssistant = XplorAssistant$1;
|
|
758
|
+
const defineCustomElement = defineCustomElement$1;
|
|
759
|
+
|
|
760
|
+
export { XplorAssistant, defineCustomElement };
|
|
761
|
+
//# sourceMappingURL=xplor-assistant.js.map
|
|
762
|
+
|
|
763
|
+
//# sourceMappingURL=xplor-assistant.js.map
|