@mediquo/elements 0.5.0 → 0.5.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (87) hide show
  1. package/README.md +3 -1
  2. package/dist/chunks/api-chat-client-1Vz6ZOwp.js +1 -0
  3. package/dist/chunks/{apple-pay-outcomes-CjCnBYOD.js → apple-pay-outcomes-0ozxSHyb.js} +1 -1
  4. package/dist/chunks/appointment-card-skeleton-1c7552Ln.d.ts +398 -0
  5. package/dist/chunks/appointment-card-skeleton-hglMW7x6.js +1 -0
  6. package/dist/chunks/{documentation-view-fFbvjJqx.js → documentation-view-geQU8ttU.js} +1 -1
  7. package/dist/chunks/get-patient-documents-query-DIQH-TMM.js +1 -0
  8. package/dist/chunks/{index-CLdWVaEs.js → index-BBUiLb3Y.js} +1 -1
  9. package/dist/chunks/index-BJYWtEmT.js +1 -0
  10. package/dist/chunks/{index-Xcn-xs13.js → index-Bx8TWBsk.js} +1 -1
  11. package/dist/chunks/{price-BmA2Dl9f.js → price-DIhNpS8n.js} +1 -1
  12. package/dist/chunks/{refund-cancel-policy-D_tUYPyv.js → refund-cancel-policy-BQDnePq9.js} +1 -1
  13. package/dist/chunks/{schemas.d-BEA8Pl6w.d.ts → schemas.d-5CaMrfOq.d.ts} +6 -0
  14. package/dist/chunks/telemetry-client-BLJVs9me.js +1 -0
  15. package/dist/env.js +1 -1
  16. package/dist/events.d.ts +56 -1
  17. package/dist/events.js +1 -1
  18. package/dist/index.d.ts +1 -1
  19. package/dist/index.js +1 -1
  20. package/dist/mq-apple-pay-checkout.js +1 -1
  21. package/dist/mq-appointment-checkout.d.ts +1 -1
  22. package/dist/mq-appointment-checkout.js +1 -1
  23. package/dist/mq-appointment-documentation.js +1 -1
  24. package/dist/mq-chat-room.js +1 -1
  25. package/dist/mq-checkout.js +1 -1
  26. package/dist/mq-dashboard.d.ts +224 -0
  27. package/dist/mq-dashboard.js +1 -0
  28. package/dist/mq-documents.js +1 -1
  29. package/dist/mq-google-pay-checkout.js +1 -1
  30. package/dist/mq-immediate-videocall-checkout.js +1 -1
  31. package/dist/mq-my-appointments.d.ts +9 -391
  32. package/dist/mq-my-appointments.js +1 -1
  33. package/dist/mq-payment-poller.d.ts +61 -0
  34. package/dist/mq-payment-poller.js +1 -0
  35. package/dist/mq-professional-presence-sync.js +1 -1
  36. package/dist/mq-schedule-success.js +2 -2
  37. package/dist/mq-schedule.d.ts +8 -2
  38. package/dist/mq-schedule.js +1 -1
  39. package/dist/mq-support-chat.d.ts +1 -1
  40. package/dist/mq-support-chat.js +1 -1
  41. package/dist/mq-terms-and-conditions.js +1 -1
  42. package/dist/mq-unread-count-sync.js +1 -1
  43. package/dist/mq-videocall.js +1 -1
  44. package/dist/react/mq-apple-pay-checkout.d.ts +24 -7
  45. package/dist/react/mq-apple-pay-checkout.js +1 -1
  46. package/dist/react/mq-appointment-checkout.d.ts +21 -6
  47. package/dist/react/mq-appointment-checkout.js +1 -1
  48. package/dist/react/mq-appointment-documentation.d.ts +17 -6
  49. package/dist/react/mq-appointment-documentation.js +1 -1
  50. package/dist/react/mq-chat-room.d.ts +30 -7
  51. package/dist/react/mq-chat-room.js +1 -1
  52. package/dist/react/mq-checkout.d.ts +22 -8
  53. package/dist/react/mq-checkout.js +1 -1
  54. package/dist/react/mq-dashboard.d.ts +57 -0
  55. package/dist/react/mq-dashboard.js +2 -0
  56. package/dist/react/mq-documents.d.ts +16 -2
  57. package/dist/react/mq-documents.js +1 -1
  58. package/dist/react/mq-google-pay-checkout.d.ts +29 -7
  59. package/dist/react/mq-google-pay-checkout.js +1 -1
  60. package/dist/react/mq-immediate-videocall-checkout.d.ts +15 -5
  61. package/dist/react/mq-immediate-videocall-checkout.js +1 -1
  62. package/dist/react/mq-my-appointments.d.ts +26 -6
  63. package/dist/react/mq-my-appointments.js +1 -1
  64. package/dist/react/mq-payment-poller.d.ts +33 -0
  65. package/dist/react/mq-payment-poller.js +2 -0
  66. package/dist/react/mq-professional-presence-sync.d.ts +8 -2
  67. package/dist/react/mq-professional-presence-sync.js +1 -1
  68. package/dist/react/mq-query-client-provider.d.ts +9 -2
  69. package/dist/react/mq-schedule-success.d.ts +30 -7
  70. package/dist/react/mq-schedule-success.js +1 -1
  71. package/dist/react/mq-schedule.d.ts +47 -8
  72. package/dist/react/mq-schedule.js +1 -1
  73. package/dist/react/mq-session-provider.d.ts +11 -2
  74. package/dist/react/mq-socket-provider.d.ts +13 -2
  75. package/dist/react/mq-support-chat.d.ts +31 -2
  76. package/dist/react/mq-support-chat.js +1 -1
  77. package/dist/react/mq-terms-and-conditions.d.ts +21 -5
  78. package/dist/react/mq-terms-and-conditions.js +1 -1
  79. package/dist/react/mq-theme-provider.d.ts +13 -2
  80. package/dist/react/mq-toast-container.d.ts +10 -2
  81. package/dist/react/mq-unread-count-sync.d.ts +8 -2
  82. package/dist/react/mq-unread-count-sync.js +1 -1
  83. package/dist/react/mq-videocall.d.ts +30 -12
  84. package/dist/react/mq-videocall.js +1 -1
  85. package/package.json +9 -1
  86. package/dist/chunks/api-chat-client-CqMn2JEn.js +0 -1
  87. package/dist/chunks/telemetry-client-Ca71sobH.js +0 -1
@@ -75,7 +75,7 @@ declare class MqSupportChat extends LitElement {
75
75
  private _open;
76
76
  private _onKeydown;
77
77
  private _close;
78
- render(): typeof nothing | lit_html.TemplateResult<1>;
78
+ render(): lit_html.TemplateResult<1> | typeof nothing;
79
79
  }
80
80
  declare global {
81
81
  interface HTMLElementTagNameMap {
@@ -1 +1 @@
1
- import{_ as t,t as e}from"./chunks/custom-element-DA9Fxvxd.js";import{m as o}from"./chunks/runtime-Bg1WXVCx.js";import{l as s}from"./chunks/localized-decorator-BlOuLhym.js";import{a as r,k as a}from"./chunks/api-chat-client-CqMn2JEn.js";import{Q as i}from"./chunks/query-controller-BlO1Ax65.js";import{M as n}from"./chunks/mutation-controller-CR2qcqhH.js";import{g as c}from"./chunks/get-organization-setup-query-BMbuRi6v.js";import{g as p}from"./chunks/chunk-YMQSBQHL-De_r7BNk.js";import{g as h}from"./chunks/chunk-GZF3YFSX-DM-GTqxg.js";import{a as u,i as l,E as d,x as m}from"./chunks/lit-element-DiWJYFwC.js";import{n as v}from"./chunks/property-scuRaFcM.js";import{r as g}from"./chunks/state-LQivXIgA.js";import{tokens as f}from"./theme.js";import{annotationQuestionIcon as b}from"./ui/icons/annotation-question-icon.js";import{spinnerIcon as y}from"./ui/icons/spinner-icon.js";import{xIcon as k}from"./ui/icons/x-icon.js";import"./mq-chat-room.js";import"./ui/mq-avatar.js";import{toast as _}from"./ui/mq-toast.js";import"./chunks/external-CJj32K_p.js";import"./chunks/parseISO-Dj3qSTG8.js";import"./chunks/format-CRFiCNHw.js";import"./chunks/isBefore-CPpTogxo.js";import"./env.js";import"./chunks/chunk-RCFIJTXZ-C6Ir0-sM.js";import"./chunks/create-context-DqP79qjF.js";import"./chunks/context-consumer-ESdICVAb.js";import"./chunks/context-request-event-Dfydf1ub.js";import"./chunks/query-Cjvi4_dT.js";import"./ui/icons/types.js";import"./chunks/provide-D2fnEhT2.js";import"./chunks/context-provider--AKuwfs9.js";import"./chunks/consume-CovVqBjI.js";import"./ui/mq-button.js";import"./chunks/class-map-Co76I6aw.js";import"./chunks/directive-2EDmOukv.js";import"./ui/mq-skeleton.js";import"./chunks/style-map-CIdqdn7C.js";import"./chunks/if-defined-BYeVdwgd.js";import"./ui/icons/chevron-left-icon.js";import"./chunks/query-CeeutdfT.js";import"./chunks/chunk-4FFT6DC2-CVWibomC.js";import"./events.js";import"./ui/icons/check-double-icon.js";import"./ui/icons/check-icon.js";import"./i18n.js";import"./chunks/chunk-YTQUGGS3-DmCGIoFy.js";class SupportChatToggleRequestEvent extends Event{static{this.eventName="mq-support-chat-toggle-request"}constructor(){super(SupportChatToggleRequestEvent.eventName,{bubbles:!0,composed:!0})}}class SupportChatUnreadRequestEvent extends Event{static{this.eventName="mq-support-chat-unread-request"}constructor(){super(SupportChatUnreadRequestEvent.eventName,{bubbles:!0,composed:!0})}}class SupportChatUnreadChangeEvent extends Event{static{this.eventName="mq-support-chat-unread-change"}constructor(t){super(SupportChatUnreadChangeEvent.eventName,{bubbles:!0,composed:!0}),this.count=t}}class SupportChatOpenEvent extends Event{static{this.eventName="mq-support-chat-open"}constructor(){super(SupportChatOpenEvent.eventName,{bubbles:!0,composed:!0})}}class SupportChatCloseEvent extends Event{static{this.eventName="mq-support-chat-close"}constructor(){super(SupportChatCloseEvent.eventName,{bubbles:!0,composed:!0})}}let q=class MqSupportChat extends u{constructor(){super(...arguments),this.variant="icon",this.open=!1,this._hasOpened=!1,this._lastEmittedUnread=0,this._orgSetupQuery=new i(this,()=>c(r)),this._professionalQuery=new i(this,()=>p(r,{hash:this._professionalHash??""},{enabled:Boolean(this._professionalHash)})),this._unreadQuery=new i(this,()=>h(r,{roomId:this.roomId??0},{enabled:Boolean(this.roomId)})),this._supportRoomMutation=new n(this,{mutationFn:t=>r.rooms.createSupportRoom(t),onSuccess:t=>{this.roomId=t.room_id,this.open&&this._markSupportRead()},onError:()=>{this.open&&(this.open=!1,_.error(o("No se ha podido abrir el chat con soporte")))}}),this._readAllMutation=new n(this,{mutationFn:()=>r.professionals.readAllMessages({roomId:this.roomId??0}),onSuccess:()=>{const t=this.roomId;t&&this._unreadQuery.queryClient?.invalidateQueries({queryKey:h(r,{roomId:t}).queryKey})}}),this._onUnreadRequest=()=>{this._emitUnreadChange()},this._onToggleRequest=()=>{this._toggle()},this._onKeydown=t=>{t.defaultPrevented||"Escape"===t.key&&this.open&&this._close()}}static{this.styles=[f,l`*{box-sizing:border-box}:host{position:fixed;bottom:calc(var(--mq-safe-bottom,0px) + var(--sp-1));right:calc(var(--sp-4) + var(--mq-safe-right,0px));z-index:1000}@keyframes widget-in{from{opacity:0;transform:scale(.95)}to{opacity:1;transform:scale(1)}}.widget{animation:widget-in .3s ease-out}.launcher{display:inline-flex;align-items:center;padding:0;border:none;background-color:var(--color-primary-light);border-radius:9999px;cursor:pointer;transition:transform .1s ease-out}.launcher:active{transform:scale(.95)}.launcher:focus-visible{outline:0}.icon-circle{position:relative;flex-shrink:0;width:var(--size-13);height:var(--size-13);--avatar-size:var(--size-13);border-radius:var(--border-radius-full);display:grid;place-items:center;background-color:var(--color-primary);color:var(--color-white);transition:background-color .1s ease-out,color .1s ease-out}.launcher.open .icon-circle{background-color:var(--color-primary-light);color:var(--color-primary-dark)}.icon{position:absolute;display:grid;place-items:center;transition:opacity .12s ease-out,transform .12s ease-out}.icon-chat{opacity:1;transform:rotate(0)}.launcher.open .icon-chat{opacity:0;transform:rotate(90deg)}.icon-close{opacity:0;transform:rotate(-90deg)}.launcher.open .icon-close{opacity:1;transform:rotate(0)}.icon-circle.with-avatar{background-color:var(--color-primary-light)}.launcher-avatar{width:var(--size-13);height:var(--size-13)}.icon-circle.with-avatar .icon-close,.launcher.open .icon-circle.with-avatar .icon-chat{transform:none}.icon-circle.with-avatar .online-dot{z-index:1}.online-dot{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%) translate(calc(var(--avatar-size) * .35355),calc(var(--avatar-size) * -.35355));width:var(--size-3);height:var(--size-3);border-radius:var(--border-radius-full);background-color:var(--color-gray-medium);border:2px solid var(--color-background);transition:opacity .2s ease-out}.online-dot[data-presence=online]{background-color:var(--color-text-icons--success)}.online-dot[data-presence=absent]{background-color:#ff014d}.launcher.has-unread .online-dot,.launcher.open .online-dot{opacity:0}@keyframes badge-in{from{transform:scale(0)}to{transform:scale(1)}}.badge{position:absolute;top:calc(-1 * var(--size-1));right:calc(-1 * var(--size-1));min-width:var(--size-5);height:var(--size-5);padding:0 var(--sp-1);display:grid;place-items:center;background-color:var(--color-negative);border:2px solid var(--color-background);border-radius:9999px;color:var(--color-white);font-family:var(--font-body);font-size:var(--text-xs);line-height:1;font-weight:var(--font-weight-bold);animation:badge-in .15s ease-out;z-index:2}.panel{position:fixed;z-index:1;inset:var(--mq-safe-top,0) var(--mq-safe-right,0) var(--mq-safe-bottom,0) var(--mq-safe-left,0);background-color:var(--color-white);overflow:hidden;transform:scale(.95);transform-origin:bottom right;opacity:0;visibility:hidden;pointer-events:none;transition:opacity .15s ease-out,transform .15s ease-out,visibility 0s linear .15s}.panel.open{opacity:1;transform:none;visibility:visible;pointer-events:auto;transition:opacity .15s ease-out,transform .15s ease-out}.panel-loading{width:100%;height:100%;display:grid;place-items:center}mq-chat-room{display:block;width:100%;height:100%}@media (min-width:768px){.panel{inset:auto;bottom:calc(var(--size-20) + var(--mq-safe-bottom,0px));right:calc(var(--sp-4) + var(--mq-safe-right,0px));width:400px;height:calc(100vh - 6rem - var(--mq-safe-top,0px) - var(--mq-safe-bottom,0px));max-height:560px;border-radius:var(--border-radius-lg)}}`]}get _professionalHash(){return this._orgSetupQuery.result?.data?.support_professional?.hash??void 0}get unreadCount(){return this._unreadQuery.result?.data?.unread_count??0}get _presence(){const t=this._professionalQuery.result?.data;return t?a(t):void 0}connectedCallback(){super.connectedCallback(),window.addEventListener("keydown",this._onKeydown),window.addEventListener(SupportChatToggleRequestEvent.eventName,this._onToggleRequest),window.addEventListener(SupportChatUnreadRequestEvent.eventName,this._onUnreadRequest)}disconnectedCallback(){super.disconnectedCallback(),window.removeEventListener("keydown",this._onKeydown),window.removeEventListener(SupportChatToggleRequestEvent.eventName,this._onToggleRequest),window.removeEventListener(SupportChatUnreadRequestEvent.eventName,this._onUnreadRequest)}willUpdate(t){t.has("apiKey")&&this.apiKey&&r.setApiKey(this.apiKey),t.has("token")&&this.token&&r.setAuthToken(this.token)}updated(){this._ensureRoom();const t=this.unreadCount;t!==this._lastEmittedUnread&&(this._lastEmittedUnread=t,this._emitUnreadChange())}_ensureRoom(){const t=this._professionalHash;!t||this.roomId||this._supportRoomMutation.isPending||this._supportRoomMutation.isError||this._supportRoomMutation.run({professional_hash:t})}_emitUnreadChange(){window.dispatchEvent(new SupportChatUnreadChangeEvent(this.unreadCount))}_markSupportRead(){const t=this.roomId,e=this._unreadQuery.queryClient;t&&e&&(e.setQueryData(h(r,{roomId:t}).queryKey,t=>t?{...t,unread_count:0}:t),this._readAllMutation.run(void 0))}_toggle(){this.open?this._close():this._open()}_open(){this.open=!0,this._hasOpened=!0,this.dispatchEvent(new SupportChatOpenEvent),!this.roomId&&this._supportRoomMutation.isError&&this._supportRoomMutation.reset(),this._ensureRoom(),this._markSupportRead()}_close(){this.open=!1,this.dispatchEvent(new SupportChatCloseEvent)}render(){const t=this._professionalHash;if(!t||!this.token)return d;const e=this._professionalQuery.result?.data;if("avatar"===this.variant&&!e)return d;const s=this.unreadCount>0,r="avatar"===this.variant&&Boolean(e);return m`<div class="widget"><div class="panel ${this.open?"open":""}">${this._hasOpened?this.roomId?m`<mq-chat-room api-key="${this.apiKey}" token="${this.token}" professional-hash="${t}" .roomId="${this.roomId}" @mq-chat-room-close="${this._close}"></mq-chat-room>`:m`<div class="panel-loading">${y({color:"var(--color-primary)"})}</div>`:d}</div><button type="button" class="launcher ${this.open?"open":""} ${s?"has-unread":""}" aria-label="${this.label||o("Chat con soporte")}" aria-expanded="${this.open?"true":"false"}" @click="${this._toggle}"><span class="icon-circle ${r?"with-avatar":""}">${this._presence?m`<span class="online-dot" data-presence="${this._presence}"></span>`:d} ${s&&!this.open?m`<span class="badge">${this.unreadCount>99?"99+":this.unreadCount}</span>`:d} <span class="icon icon-chat">${r?m`<mq-avatar class="launcher-avatar" .src="${e?.avatar??void 0}" .fallback="${e?.name}" .alt="${e?.name}"></mq-avatar>`:b({size:24})} </span><span class="icon icon-close">${k({size:24})}</span></span></button></div>`}};t([v({type:String,attribute:"api-key"})],q.prototype,"apiKey",void 0),t([v({type:String,attribute:"token"})],q.prototype,"token",void 0),t([v({type:String,attribute:"label"})],q.prototype,"label",void 0),t([v({type:String,attribute:"variant"})],q.prototype,"variant",void 0),t([g()],q.prototype,"open",void 0),t([g()],q.prototype,"roomId",void 0),t([g()],q.prototype,"_hasOpened",void 0),q=t([s(),e("mq-support-chat")],q);export{q as MqSupportChat};
1
+ import{_ as o,t}from"./chunks/custom-element-DA9Fxvxd.js";import{m as e}from"./chunks/runtime-Bg1WXVCx.js";import{l as r}from"./chunks/localized-decorator-BlOuLhym.js";import{a as s,c as i}from"./chunks/api-chat-client-1Vz6ZOwp.js";import{Q as a}from"./chunks/query-controller-BlO1Ax65.js";import{M as n}from"./chunks/mutation-controller-CR2qcqhH.js";import{g as c}from"./chunks/get-organization-setup-query-BMbuRi6v.js";import{g as p}from"./chunks/chunk-YMQSBQHL-De_r7BNk.js";import{g as h}from"./chunks/chunk-GZF3YFSX-DM-GTqxg.js";import{a as l,i as d,E as u,x as m}from"./chunks/lit-element-DiWJYFwC.js";import{n as v}from"./chunks/property-scuRaFcM.js";import{r as f}from"./chunks/state-LQivXIgA.js";import{tokens as g}from"./theme.js";import{annotationQuestionIcon as y}from"./ui/icons/annotation-question-icon.js";import{spinnerIcon as k}from"./ui/icons/spinner-icon.js";import{xIcon as b}from"./ui/icons/x-icon.js";import"./mq-chat-room.js";import"./ui/mq-avatar.js";import{b as _,a as w,S as j,c as q,d as x}from"./chunks/index-BJYWtEmT.js";import{toast as z}from"./ui/mq-toast.js";import"./chunks/external-CJj32K_p.js";import"./chunks/parseISO-Dj3qSTG8.js";import"./chunks/format-CRFiCNHw.js";import"./chunks/isBefore-CPpTogxo.js";import"./env.js";import"./chunks/chunk-RCFIJTXZ-C6Ir0-sM.js";import"./chunks/create-context-DqP79qjF.js";import"./chunks/context-consumer-ESdICVAb.js";import"./chunks/context-request-event-Dfydf1ub.js";import"./chunks/query-Cjvi4_dT.js";import"./ui/icons/types.js";import"./chunks/provide-D2fnEhT2.js";import"./chunks/context-provider--AKuwfs9.js";import"./chunks/consume-CovVqBjI.js";import"./ui/mq-button.js";import"./chunks/class-map-Co76I6aw.js";import"./chunks/directive-2EDmOukv.js";import"./ui/mq-skeleton.js";import"./chunks/style-map-CIdqdn7C.js";import"./chunks/if-defined-BYeVdwgd.js";import"./ui/icons/chevron-left-icon.js";import"./chunks/query-CeeutdfT.js";import"./chunks/chunk-4FFT6DC2-CVWibomC.js";import"./events.js";import"./ui/icons/check-double-icon.js";import"./ui/icons/check-icon.js";import"./i18n.js";import"./chunks/chunk-YTQUGGS3-DmCGIoFy.js";let $=class MqSupportChat extends l{constructor(){super(...arguments),this.variant="icon",this.open=!1,this._hasOpened=!1,this._lastEmittedUnread=0,this._orgSetupQuery=new a(this,()=>c(s)),this._professionalQuery=new a(this,()=>p(s,{hash:this._professionalHash??""},{enabled:Boolean(this._professionalHash)})),this._unreadQuery=new a(this,()=>h(s,{roomId:this.roomId??0},{enabled:Boolean(this.roomId)})),this._supportRoomMutation=new n(this,{mutationFn:o=>s.rooms.createSupportRoom(o),onSuccess:o=>{this.roomId=o.room_id,this.open&&this._markSupportRead()},onError:()=>{this.open&&(this.open=!1,z.error(e("No se ha podido abrir el chat con soporte")))}}),this._readAllMutation=new n(this,{mutationFn:()=>s.professionals.readAllMessages({roomId:this.roomId??0}),onSuccess:()=>{const o=this.roomId;o&&this._unreadQuery.queryClient?.invalidateQueries({queryKey:h(s,{roomId:o}).queryKey})}}),this._onUnreadRequest=()=>{this._emitUnreadChange()},this._onToggleRequest=()=>{this._toggle()},this._onKeydown=o=>{o.defaultPrevented||"Escape"===o.key&&this.open&&this._close()}}static{this.styles=[g,d`*{box-sizing:border-box}:host{position:fixed;bottom:calc(var(--mq-safe-bottom,0px) + var(--sp-1));right:calc(var(--sp-4) + var(--mq-safe-right,0px));z-index:1000}@keyframes widget-in{from{opacity:0;transform:scale(.95)}to{opacity:1;transform:scale(1)}}.widget{animation:widget-in .3s ease-out}.launcher{display:inline-flex;align-items:center;padding:0;border:none;background-color:var(--color-primary-light);border-radius:9999px;cursor:pointer;transition:transform .1s ease-out}.launcher:active{transform:scale(.95)}.launcher:focus-visible{outline:0}.icon-circle{position:relative;flex-shrink:0;width:var(--size-13);height:var(--size-13);--avatar-size:var(--size-13);border-radius:var(--border-radius-full);display:grid;place-items:center;background-color:var(--color-primary);color:var(--color-white);transition:background-color .1s ease-out,color .1s ease-out}.launcher.open .icon-circle{background-color:var(--color-primary-light);color:var(--color-primary-dark)}.icon{position:absolute;display:grid;place-items:center;transition:opacity .12s ease-out,transform .12s ease-out}.icon-chat{opacity:1;transform:rotate(0)}.launcher.open .icon-chat{opacity:0;transform:rotate(90deg)}.icon-close{opacity:0;transform:rotate(-90deg)}.launcher.open .icon-close{opacity:1;transform:rotate(0)}.icon-circle.with-avatar{background-color:var(--color-primary-light)}.launcher-avatar{width:var(--size-13);height:var(--size-13)}.icon-circle.with-avatar .icon-close,.launcher.open .icon-circle.with-avatar .icon-chat{transform:none}.icon-circle.with-avatar .online-dot{z-index:1}.online-dot{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%) translate(calc(var(--avatar-size) * .35355),calc(var(--avatar-size) * -.35355));width:var(--size-3);height:var(--size-3);border-radius:var(--border-radius-full);background-color:var(--color-gray-medium);border:2px solid var(--color-background);transition:opacity .2s ease-out}.online-dot[data-presence=online]{background-color:var(--color-text-icons--success)}.online-dot[data-presence=absent]{background-color:#ff014d}.launcher.has-unread .online-dot,.launcher.open .online-dot{opacity:0}@keyframes badge-in{from{transform:scale(0)}to{transform:scale(1)}}.badge{position:absolute;top:calc(-1 * var(--size-1));right:calc(-1 * var(--size-1));min-width:var(--size-5);height:var(--size-5);padding:0 var(--sp-1);display:grid;place-items:center;background-color:var(--color-negative);border:2px solid var(--color-background);border-radius:9999px;color:var(--color-white);font-family:var(--font-body);font-size:var(--text-xs);line-height:1;font-weight:var(--font-weight-bold);animation:badge-in .15s ease-out;z-index:2}.panel{position:fixed;z-index:1;inset:var(--mq-safe-top,0) var(--mq-safe-right,0) var(--mq-safe-bottom,0) var(--mq-safe-left,0);background-color:var(--color-white);overflow:hidden;transform:scale(.95);transform-origin:bottom right;opacity:0;visibility:hidden;pointer-events:none;transition:opacity .15s ease-out,transform .15s ease-out,visibility 0s linear .15s}.panel.open{opacity:1;transform:none;visibility:visible;pointer-events:auto;transition:opacity .15s ease-out,transform .15s ease-out}.panel-loading{width:100%;height:100%;display:grid;place-items:center}mq-chat-room{display:block;width:100%;height:100%}@media (min-width:768px){.panel{inset:auto;bottom:calc(var(--size-20) + var(--mq-safe-bottom,0px));right:calc(var(--sp-4) + var(--mq-safe-right,0px));width:400px;height:calc(100vh - 6rem - var(--mq-safe-top,0px) - var(--mq-safe-bottom,0px));max-height:560px;border-radius:var(--border-radius-lg)}}`]}get _professionalHash(){return this._orgSetupQuery.result?.data?.support_professional?.hash??void 0}get unreadCount(){return this._unreadQuery.result?.data?.unread_count??0}get _presence(){const o=this._professionalQuery.result?.data;return o?i(o):void 0}connectedCallback(){super.connectedCallback(),window.addEventListener("keydown",this._onKeydown),window.addEventListener(_.eventName,this._onToggleRequest),window.addEventListener(w.eventName,this._onUnreadRequest)}disconnectedCallback(){super.disconnectedCallback(),window.removeEventListener("keydown",this._onKeydown),window.removeEventListener(_.eventName,this._onToggleRequest),window.removeEventListener(w.eventName,this._onUnreadRequest)}willUpdate(o){o.has("apiKey")&&this.apiKey&&s.setApiKey(this.apiKey),o.has("token")&&this.token&&s.setAuthToken(this.token)}updated(){this._ensureRoom();const o=this.unreadCount;o!==this._lastEmittedUnread&&(this._lastEmittedUnread=o,this._emitUnreadChange())}_ensureRoom(){const o=this._professionalHash;!o||this.roomId||this._supportRoomMutation.isPending||this._supportRoomMutation.isError||this._supportRoomMutation.run({professional_hash:o})}_emitUnreadChange(){window.dispatchEvent(new j(this.unreadCount))}_markSupportRead(){const o=this.roomId,t=this._unreadQuery.queryClient;o&&t&&(t.setQueryData(h(s,{roomId:o}).queryKey,o=>o?{...o,unread_count:0}:o),this._readAllMutation.run(void 0))}_toggle(){this.open?this._close():this._open()}_open(){this.open=!0,this._hasOpened=!0,this.dispatchEvent(new q),!this.roomId&&this._supportRoomMutation.isError&&this._supportRoomMutation.reset(),this._ensureRoom(),this._markSupportRead()}_close(){this.open=!1,this.dispatchEvent(new x)}render(){const o=this._professionalHash;if(!o||!this.token)return u;const t=this._professionalQuery.result?.data;if("avatar"===this.variant&&!t)return u;const r=this.unreadCount>0,s="avatar"===this.variant&&Boolean(t);return m`<div class="widget"><div class="panel ${this.open?"open":""}">${this._hasOpened?this.roomId?m`<mq-chat-room api-key="${this.apiKey}" token="${this.token}" professional-hash="${o}" .roomId="${this.roomId}" @mq-chat-room-close="${this._close}"></mq-chat-room>`:m`<div class="panel-loading">${k({color:"var(--color-primary)"})}</div>`:u}</div><button type="button" class="launcher ${this.open?"open":""} ${r?"has-unread":""}" aria-label="${this.label||e("Chat con soporte")}" aria-expanded="${this.open?"true":"false"}" @click="${this._toggle}"><span class="icon-circle ${s?"with-avatar":""}">${this._presence?m`<span class="online-dot" data-presence="${this._presence}"></span>`:u} ${r&&!this.open?m`<span class="badge">${this.unreadCount>99?"99+":this.unreadCount}</span>`:u} <span class="icon icon-chat">${s?m`<mq-avatar class="launcher-avatar" .src="${t?.avatar??void 0}" .fallback="${t?.name}" .alt="${t?.name}"></mq-avatar>`:y({size:24})} </span><span class="icon icon-close">${b({size:24})}</span></span></button></div>`}};o([v({type:String,attribute:"api-key"})],$.prototype,"apiKey",void 0),o([v({type:String,attribute:"token"})],$.prototype,"token",void 0),o([v({type:String,attribute:"label"})],$.prototype,"label",void 0),o([v({type:String,attribute:"variant"})],$.prototype,"variant",void 0),o([f()],$.prototype,"open",void 0),o([f()],$.prototype,"roomId",void 0),o([f()],$.prototype,"_hasOpened",void 0),$=o([r(),t("mq-support-chat")],$);export{$ as MqSupportChat};
@@ -1 +1 @@
1
- export{M as MqTermsAndConditions}from"./chunks/index-CLdWVaEs.js";import{g as t}from"./chunks/api-chat-client-CqMn2JEn.js";import{i as s}from"./chunks/isBefore-CPpTogxo.js";import"./chunks/custom-element-DA9Fxvxd.js";import"./chunks/lit-element-DiWJYFwC.js";import"./chunks/property-scuRaFcM.js";import"./chunks/state-LQivXIgA.js";import"./ui/mq-checkbox.js";import"./chunks/class-map-Co76I6aw.js";import"./chunks/directive-2EDmOukv.js";import"./ui/mq-button.js";import"./chunks/mutation-controller-CR2qcqhH.js";import"./env.js";import"./chunks/external-CJj32K_p.js";import"./chunks/parseISO-Dj3qSTG8.js";import"./chunks/format-CRFiCNHw.js";var e={accepted:"accepted",outdated:"outdated",not_accepted:"not-accepted"};function o({acceptedAt:o,lastVersionAt:c}){const n=o?t(o):null,r=c?t(c):null;return n&&r?s(n,r)?e.outdated:e.accepted:e.not_accepted}export{e as TERMS_ACCEPTANCE_STATUS,o as hasAcceptedTermsAndConditions};
1
+ export{M as MqTermsAndConditions}from"./chunks/index-BBUiLb3Y.js";import{g as t}from"./chunks/api-chat-client-1Vz6ZOwp.js";import{i as s}from"./chunks/isBefore-CPpTogxo.js";import"./chunks/custom-element-DA9Fxvxd.js";import"./chunks/lit-element-DiWJYFwC.js";import"./chunks/property-scuRaFcM.js";import"./chunks/state-LQivXIgA.js";import"./ui/mq-checkbox.js";import"./chunks/class-map-Co76I6aw.js";import"./chunks/directive-2EDmOukv.js";import"./ui/mq-button.js";import"./chunks/mutation-controller-CR2qcqhH.js";import"./env.js";import"./chunks/external-CJj32K_p.js";import"./chunks/parseISO-Dj3qSTG8.js";import"./chunks/format-CRFiCNHw.js";var e={accepted:"accepted",outdated:"outdated",not_accepted:"not-accepted"};function o({acceptedAt:o,lastVersionAt:c}){const n=o?t(o):null,r=c?t(c):null;return n&&r?s(n,r)?e.outdated:e.accepted:e.not_accepted}export{e as TERMS_ACCEPTANCE_STATUS,o as hasAcceptedTermsAndConditions};
@@ -1 +1 @@
1
- import{_ as e,t as s}from"./chunks/custom-element-DA9Fxvxd.js";import{a as t,E as n}from"./chunks/lit-element-DiWJYFwC.js";import{s as r}from"./chunks/context-consumer-ESdICVAb.js";import{Q as o}from"./chunks/chunk-RCFIJTXZ-C6Ir0-sM.js";import{l as c}from"./chunks/chunk-S5RWG6G2-DPesx3Od.js";import{a as i,S as a}from"./chunks/chunk-YTQUGGS3-DmCGIoFy.js";import{S as u,g as h}from"./chunks/chunk-GZF3YFSX-DM-GTqxg.js";import{a as m}from"./chunks/api-chat-client-CqMn2JEn.js";import"./chunks/context-request-event-Dfydf1ub.js";import"./chunks/create-context-DqP79qjF.js";import"./chunks/external-CJj32K_p.js";import"./chunks/parseISO-Dj3qSTG8.js";import"./chunks/format-CRFiCNHw.js";import"./chunks/isBefore-CPpTogxo.js";import"./env.js";class UnreadCountSyncController{constructor(e){this.host=e,this.onMessageReceived=e=>{if(!this.queryClient)return;if(!function(e){const{eventName:s,fromUserHash:t,senderType:n,excludeFrom:r}=e;return!(s!==i.message||n&&n!==u.ordinary||!t||r&&t===r)}({eventName:i.message,fromUserHash:e.fromUserHash,senderType:e.senderType,excludeFrom:this.loginToken?.patient.hash}))return;const s=Number(e.roomId),t=h(m,{roomId:s}).queryKey;this.queryClient.setQueryData(t,e=>{if(e)return{...e,unread_count:e.unread_count+1}})},new r(this.host,{context:a,subscribe:!0,callback:e=>{e&&(this.socket=e,this.socket.on(i.message,this.onMessageReceived))}}),new r(this.host,{context:o,subscribe:!0,callback:e=>{e&&(this.queryClient=e)}}),new r(this.host,{context:c,subscribe:!0,callback:e=>{e&&(this.loginToken=e)}}),this.host.addController(this)}hostConnected(){}hostDisconnected(){this.socket?.off(i.message,this.onMessageReceived)}}let l=class MqUnreadCountSync extends t{constructor(){super(...arguments),this._controller=new UnreadCountSyncController(this)}createRenderRoot(){return this}render(){return n}};l=e([s("mq-unread-count-sync")],l);export{l as MqUnreadCountSync,UnreadCountSyncController};
1
+ import{_ as e,t as s}from"./chunks/custom-element-DA9Fxvxd.js";import{a as t,E as n}from"./chunks/lit-element-DiWJYFwC.js";import{s as r}from"./chunks/context-consumer-ESdICVAb.js";import{Q as o}from"./chunks/chunk-RCFIJTXZ-C6Ir0-sM.js";import{l as c}from"./chunks/chunk-S5RWG6G2-DPesx3Od.js";import{a as i,S as a}from"./chunks/chunk-YTQUGGS3-DmCGIoFy.js";import{S as u,g as h}from"./chunks/chunk-GZF3YFSX-DM-GTqxg.js";import{a as m}from"./chunks/api-chat-client-1Vz6ZOwp.js";import"./chunks/context-request-event-Dfydf1ub.js";import"./chunks/create-context-DqP79qjF.js";import"./chunks/external-CJj32K_p.js";import"./chunks/parseISO-Dj3qSTG8.js";import"./chunks/format-CRFiCNHw.js";import"./chunks/isBefore-CPpTogxo.js";import"./env.js";class UnreadCountSyncController{constructor(e){this.host=e,this.onMessageReceived=e=>{if(!this.queryClient)return;if(!function(e){const{eventName:s,fromUserHash:t,senderType:n,excludeFrom:r}=e;return!(s!==i.message||n&&n!==u.ordinary||!t||r&&t===r)}({eventName:i.message,fromUserHash:e.fromUserHash,senderType:e.senderType,excludeFrom:this.loginToken?.patient.hash}))return;const s=Number(e.roomId),t=h(m,{roomId:s}).queryKey;this.queryClient.setQueryData(t,e=>{if(e)return{...e,unread_count:e.unread_count+1}})},new r(this.host,{context:a,subscribe:!0,callback:e=>{e&&(this.socket=e,this.socket.on(i.message,this.onMessageReceived))}}),new r(this.host,{context:o,subscribe:!0,callback:e=>{e&&(this.queryClient=e)}}),new r(this.host,{context:c,subscribe:!0,callback:e=>{e&&(this.loginToken=e)}}),this.host.addController(this)}hostConnected(){}hostDisconnected(){this.socket?.off(i.message,this.onMessageReceived)}}let l=class MqUnreadCountSync extends t{constructor(){super(...arguments),this._controller=new UnreadCountSyncController(this)}createRenderRoot(){return this}render(){return n}};l=e([s("mq-unread-count-sync")],l);export{l as MqUnreadCountSync,UnreadCountSyncController};
@@ -1 +1 @@
1
- import{_ as t,t as e}from"./chunks/custom-element-DA9Fxvxd.js";import{a as i,i as o,x as s,E as n}from"./chunks/lit-element-DiWJYFwC.js";import{n as r}from"./chunks/property-scuRaFcM.js";import{spinnerIcon as a}from"./ui/icons/spinner-icon.js";import{e as l}from"./chunks/provide-D2fnEhT2.js";import{h as c}from"./chunks/task-Bj8p7kJX.js";import{j as d,d as h,a as p,b as m,C as u,c as v}from"./chunks/api-chat-client-CqMn2JEn.js";import{r as g}from"./chunks/state-LQivXIgA.js";import{n as b}from"./chunks/create-context-DqP79qjF.js";import{env as f}from"./env.js";import{m as y}from"./chunks/runtime-Bg1WXVCx.js";import{l as w}from"./chunks/localized-decorator-BlOuLhym.js";import{t as x,v as k,a as $,w as z,x as E,y as S}from"./chunks/telemetry-client-Ca71sobH.js";import{getLocale as j}from"./i18n.js";import{calendarIcon as T}from"./ui/icons/calendar-icon.js";import"./ui/back-link.js";import"./chunks/professional-overview-CfjgnTw4.js";import{c as _}from"./chunks/consume-CovVqBjI.js";import{MqViewAppointmentsEvent as C}from"./events.js";import{clockIcon as O}from"./ui/icons/clock-icon.js";import"./chunks/documentation-view-fFbvjJqx.js";import{l as q}from"./chunks/chunk-S5RWG6G2-DPesx3Od.js";import"./mq-chat-room.js";import{chatbubbleIcon as R}from"./ui/icons/chat-bubble-icon.js";import{micIcon as I}from"./ui/icons/mic-icon.js";import{micOffIcon as V}from"./ui/icons/mic-off-icon.js";import{videoIcon as A}from"./ui/icons/video-icon.js";import{videoOffIcon as N}from"./ui/icons/video-off-icon.js";import"./ui/mq-unread-badge.js";import{Q as U}from"./chunks/query-controller-BlO1Ax65.js";import{g as P}from"./chunks/chunk-GZF3YFSX-DM-GTqxg.js";import{g as W}from"./chunks/get-organization-setup-query-BMbuRi6v.js";import{l as D}from"./chunks/chunk-4FFT6DC2-CVWibomC.js";import"./ui/mq-floating-bubble.js";import{e as M}from"./chunks/query-CeeutdfT.js";import{M as F}from"./chunks/mutation-controller-CR2qcqhH.js";import{alertCircleIcon as L}from"./ui/icons/alert-circle-icon.js";import"./ui/mq-rating.js";import{toast as K}from"./ui/mq-toast.js";import{heartBeatIcon as B}from"./ui/icons/heartbeat-icon.js";import{timeLeftIcon as H}from"./ui/icons/time-left-icon.js";import"./chunks/mq-layout-CGcdxGMQ.js";import"./ui/icons/types.js";import"./chunks/context-provider--AKuwfs9.js";import"./chunks/context-request-event-Dfydf1ub.js";import"./chunks/external-CJj32K_p.js";import"./chunks/parseISO-Dj3qSTG8.js";import"./chunks/format-CRFiCNHw.js";import"./chunks/isBefore-CPpTogxo.js";import"./ui/icons/chevron-left-icon.js";import"./chunks/if-defined-BYeVdwgd.js";import"./ui/mq-text-button.js";import"./chunks/class-map-Co76I6aw.js";import"./chunks/directive-2EDmOukv.js";import"./ui/icons/chevron-down-icon.js";import"./ui/mq-avatar.js";import"./chunks/context-consumer-ESdICVAb.js";import"./ui/icons/info-circle-outine-icon.js";import"./ui/mq-button.js";import"./ui/icons/message-bubble-icon.js";import"./ui/mq-card.js";import"./chunks/index-Xcn-xs13.js";import"./ui/icons/download-icon.js";import"./chunks/i18n-formats-DYS91YEa.js";import"./theme.js";import"./ui/icons/x-icon.js";import"./ui/mq-skeleton.js";import"./chunks/style-map-CIdqdn7C.js";import"./chunks/chunk-YMQSBQHL-De_r7BNk.js";import"./ui/icons/check-double-icon.js";import"./ui/icons/check-icon.js";import"./chunks/chunk-YTQUGGS3-DmCGIoFy.js";import"./chunks/chunk-RCFIJTXZ-C6Ir0-sM.js";import"./chunks/query-Cjvi4_dT.js";class PermissionController{constructor(t){this.state="prompt",this.host=t,t.addController(this)}async hostConnected(){await this.requestPermissions()}async requestPermissions(){try{const t=await navigator.mediaDevices.getUserMedia({video:!0,audio:!0});for(const e of t.getTracks())e.stop();this.state="granted"}catch{this.state="denied"}finally{this.host.requestUpdate()}}}class InvalidTokenError extends Error{}function Q(t){let e=t.replace(/-/g,"+").replace(/_/g,"/");switch(e.length%4){case 0:break;case 2:e+="==";break;case 3:e+="=";break;default:throw new Error("base64 string is not of the correct length")}try{return function(t){return decodeURIComponent(atob(t).replace(/(.)/g,(t,e)=>{let i=e.charCodeAt(0).toString(16).toUpperCase();return i.length<2&&(i="0"+i),"%"+i}))}(e)}catch(t){return atob(e)}}InvalidTokenError.prototype.name="InvalidTokenError";const G=b(Symbol("opentok-service")),Y=b(Symbol("params"));class OpenTokService{static{this.URL="https://static.opentok.com/v2/js/opentok.min.js"}_ensureLoaded(){if(!window.OT)throw new Error("OpenTok SDK is not loaded");return window.OT}load(){return new Promise((t,e)=>{if(window.OT)return void t();const i=document.createElement("script");i.src=OpenTokService.URL,i.onload=()=>{t()},i.onerror=e,document.head.appendChild(i)})}initSession(t,e){return this._ensureLoaded().initSession(t,e)}initPublisher(t,e,i){return this._ensureLoaded().initPublisher(t,e,i)}subscribe(t,e,i,o,s){return t.subscribe(e,i,o,s)}}const Z="waiting-room",J="videocall",X="documentation",tt="not-time-yet",et="review";class OpenTokController{constructor(t,e,i,o,s){this.isLoading=!0,this.isSessionReady=!1,this.isReconnecting=!1,this.errorMessage="",this.session=null,this.streams=[],this.destroyedStreamIds=new Set,this.openTokService=new OpenTokService,this.session_token=null,this.hasLeftWaitingRoom=!1,this.host=t,t.addController(this),this.appointment=e,this.token=i,this.onCallStarted=o,this.onCallFinished=s,this._loadOpentok()}async _loadOpentok(){try{await this.openTokService.load(),this._initializeSession()}catch{this.isLoading=!1,this.errorMessage="Failed to load OpenTok script",this.host.requestUpdate()}}async _getSessionAndToken(){const t=await p.flash.joinCall({callId:this.appointment.call_id});return this.session_token=t.session_token,[t.session_id,t.session_token]}async _initializeSession(){try{const[t,e]=await this._getSessionAndToken();this.session=this.openTokService.initSession(f.OPENTOK_API_KEY,t),this.session.on("sessionConnected",()=>{this.isLoading=!1,this.isSessionReady=!0,this.host.requestUpdate()}),this.session.on("sessionDisconnected",()=>{this.isSessionReady=!1,this._leaveWaitingRoom(),setTimeout(()=>{this.onCallFinished(),this.host.requestUpdate()},1e3),this.host.requestUpdate()}),this.session.on("sessionReconnecting",()=>{this.isReconnecting=!0,this.host.requestUpdate()}),this.session.on("sessionReconnected",()=>{this.isReconnecting=!1;const t=this.streams.filter(t=>!this.destroyedStreamIds.has(t.streamId));this.streams=[],this.host.requestUpdate(),requestAnimationFrame(()=>{this.streams=t.filter(t=>!this.destroyedStreamIds.has(t.streamId)),this.host.requestUpdate()})}),this.session.on("streamCreated",t=>{this.streams=[...this.streams,t.stream],this.onCallStarted(),this.host.requestUpdate()}),this.session.on("streamDestroyed",t=>{t.stream?.streamId&&this.destroyedStreamIds.add(t.stream.streamId),setTimeout(()=>{this.streams=this.streams.filter(e=>e.streamId!==t.stream?.streamId),this._leaveWaitingRoom(),this.onCallFinished(),this.host.requestUpdate()},1e3)}),this.session.connect(e,t=>{t&&(this.isLoading=!1,this.errorMessage=`Failed to connect to session: ${t.message}`,this.host.requestUpdate())}),p.flash.setReady({professional_hash:this.appointment.from.hash,consultation_id:this.appointment.id,consultation_type:"appointment"})}catch(t){this.isLoading=!1,this.errorMessage=`Error initializing session: ${t instanceof Error?t.message:"Unknown error"}`,this.host.requestUpdate()}}_leaveWaitingRoom(){this.hasLeftWaitingRoom||(this.hasLeftWaitingRoom=!0,p.flash.leaveWaitingRoom({professional_hash:this.appointment.from.hash,consultation_id:this.appointment.id,consultation_type:"appointment"}))}hostDisconnected(){this._leaveWaitingRoom(),this.session&&(this.session.disconnect(),this.session.off("streamCreated"),this.session.off("streamDestroyed"),this.session.off("sessionConnected"),this.session.off("sessionDisconnected"),this.session.off("sessionReconnecting"),this.session.off("sessionReconnected"))}}let it=class NotTimeYetView extends i{static{this.styles=[o`back-link{display:block;margin-bottom:var(--size-3)}.title{font-family:var(--font-titles);font-size:var(--text-2xl);line-height:var(--text-2xl--line-height);color:var(--color-neutrals-text-default);font-weight:var(--font-weight-bold);margin:0;margin-bottom:var(--size-3)}.description{font-family:var(--font-body);font-size:var(--text-sm);line-height:var(--text-sm--line-height);color:var(--color-neutrals-text-default);font-weight:var(--font-weight-normal);margin:0;margin-bottom:var(--size-3)}.details-card{background-color:var(--color-background);border-radius:var(--border-radius-xl);padding:var(--size-6) var(--size-4);display:flex;min-width:0;flex-direction:column;gap:var(--size-6);margin-bottom:var(--size-6)}.details-card-title{padding:14px 0;font-size:var(--text-base);line-height:100%;font-weight:var(--font-weight-medium);color:var(--color-gray-darker);text-align:left}.details-rows{display:flex;flex-direction:column;gap:var(--size-3)}.details-row{display:flex;align-items:center;gap:var(--size-2);font-family:var(--font-body);font-size:var(--text-base);line-height:var(--text-base--line-height);color:var(--color-neutrals-text-default);font-weight:var(--font-weight-semibold)}.details-row span::first-letter{text-transform:uppercase}@media (min-width:768px){.title{font-size:var(--text-5xl);line-height:var(--text-5xl--line-height)}.description{font-size:var(--text-base);line-height:var(--text-base--line-height);margin-bottom:var(--sp-6)}}`]}firstUpdated(){x.track(k(this.loginToken.patient.hash,this.appointment.id??""))}render(){const t=j()?.replace("_","-")??"es-ES",e=this.loginToken.patient.timezone,i=new Intl.DateTimeFormat(t,{dateStyle:"full",...e?{timeZone:e}:{}}),o=new Intl.DateTimeFormat(t,{timeStyle:"short",...e?{timeZone:e}:{}}),n=new Date(this.appointment.start_date),r=$(n,this.appointment.duration),a=e?m(e,n):"";return s`<back-link @mq-back="${t=>{t.stopPropagation(),this.dispatchEvent(new C({tab:"next"}))}}">${y("Salir")}</back-link><h1 class="title">${y("¡Aún no es la hora!")}</h1><p class="description">${y("Cuando falten 10 minutos para tu consulta, podrás acceder a la videoconsulta")}</p><div class="details-card"><professional-overview .name="${this.appointment.from.name??""}" .specialtyName="${this.appointment.from.speciality??""}" .collegiateNumber="${this.appointment.from.collegiate_number??void 0}" .description="${this.appointment.from.description??""}" .languages="${this.appointment.from.languages}" .avatar="${this.appointment.from.avatar??""}"></professional-overview><div class="details-rows"><div class="details-row">${T({size:24})} <span>${i.format(n)}</span></div><div class="details-row">${O({size:24})} <span>${o.format(n)} - ${o.format(r)}${a?` (${a})`:""}</span></div></div></div><chat-cta .consultationId="${this.appointment.id}" .roomId="${Number(this.appointment.room_id)}" .professionalHash="${this.appointment.from.hash}" .text="${y("Utiliza el chat para enviar el motivo de consulta, documentos o imágenes")}" .onOpenChat="${()=>{x.track(z(this.loginToken.patient.hash,this.appointment.id??""))}}"></chat-cta>`}};t([r({type:Object})],it.prototype,"appointment",void 0),t([_({context:q})],it.prototype,"loginToken",void 0),it=t([w(),e("not-time-yet-view")],it);let ot=class PermissionStatusBanner extends i{static{this.styles=o`:host{display:block;padding:var(--size-5) var(--size-6);background-color:#ebf9ff;border-radius:var(--border-radius-lg);text-align:center}span{color:var(--color-neutrals-text-default);font-size:var(--text-sm);line-height:var(--text-sm--line-height);font-weight:var(--font-weight-normal)}`}render(){return s`<span>${y("Espera a ser atendido sin salir de esta pantalla")}</span>`}};ot=t([w(),e("permission-status-banner")],ot);let st=class WaitingRoomLayout extends i{constructor(){super(...arguments),this.isWaitingRoom=!1}static{this.styles=o`.information-container{padding:var(--size-5) var(--size-4);background-color:var(--color-neutrals-background-disabled)}.content{max-width:560px;margin:0 auto}.information-container h2{font-family:var(--font-titles);font-size:var(--text-2xl);line-height:var(--text-2xl--line-height);font-weight:var(--font-weight-bold);color:var(--color-neutrals-text-default);margin:0;margin-bottom:var(--size-4)}.information-container p{font-size:var(--text-sm);line-height:var(--text-sm--line-height);font-weight:var(--font-weight-normal);color:var(--color-neutrals-text-default);margin:0}.video-container{margin-left:auto;margin-right:auto;margin-bottom:var(--size-6);position:relative;max-height:301px;aspect-ratio:9/16;border-radius:16px;overflow:hidden}@media (min-width:768px){.information-container{background-color:transparent;padding:var(--size-6) 0}.video-container{max-height:454px;aspect-ratio:16/9}.information-container h2{font-size:var(--text-4xl);line-height:var(--text-4xl--line-height)}.information-container p{font-size:var(--text-base);line-height:var(--text-base--line-height)}}`}firstUpdated(){this.isWaitingRoom&&x.track(E(this.loginToken.patient.hash,this.appointment.id??""))}render(){if(!this.isWaitingRoom)return s`<slot></slot>`;const t=j()?.replace("_","-")??"es-ES",e=this.loginToken.patient.timezone,i=e?{timeZone:e}:{},o=new Intl.DateTimeFormat(t,{dateStyle:"short",...i}),n=new Intl.DateTimeFormat(t,{timeStyle:"short",...i}),r=new Date(this.appointment.start_date),a=$(r,this.appointment.duration),l=e?m(e,r):"",c=o.format(r),d=`${n.format(r)} - ${n.format(a)}${l?` (${l})`:""}`;return s`<permission-status-banner></permission-status-banner><div class="content"><div class="information-container"><back-link @mq-back="${t=>{t.stopPropagation(),this.dispatchEvent(new C({tab:"next"}))}}">${y("Salir")}</back-link><h2>${y("Sala de espera")}</h2><div class="doctor-info"><p>${this.appointment.from.name}</p><p>${c}</p><p>${d}</p></div></div><div class="video-container"><slot></slot></div><chat-cta .consultationId="${this.appointment.id}" .roomId="${Number(this.appointment.room_id)}" .professionalHash="${this.appointment.from.hash}" .text="${y("Utiliza el chat para enviar el motivo de consulta, documentos o imágenes")}" .onOpenChat="${()=>{x.track(z(this.loginToken.patient.hash,this.appointment.id??""))}}"></chat-cta></div>`}};t([r({type:Object})],st.prototype,"appointment",void 0),t([r({type:Boolean,attribute:"is-waiting-room"})],st.prototype,"isWaitingRoom",void 0),t([_({context:q})],st.prototype,"loginToken",void 0),st=t([e("waiting-room-layout")],st);class AppointmentCounterController{constructor(t,e){this.startsAtGetter=e,this.formattedTime="--:--",this.interval=null,this.host=t,t.addController(this)}async hostConnected(){this.interval=setInterval(()=>{const t=new Date,e=this.startsAtGetter(),i=t.getTime()-e.getTime(),o=Math.floor(i/1e3),s=Math.floor(o/60),n=o%60;this.formattedTime=`${s.toString().padStart(2,"0")}:${n.toString().padStart(2,"0")}`,this.host.requestUpdate()},1e3)}hostDisconnected(){this.interval&&clearInterval(this.interval)}}class ToggleAudioEvent extends Event{static{this.eventName="toggle-audio"}constructor(t){super(ToggleAudioEvent.eventName,{bubbles:!0,composed:!0}),this.isAudioOn=t}}class ToggleVideoEvent extends Event{static{this.eventName="toggle-video"}constructor(t){super(ToggleVideoEvent.eventName,{bubbles:!0,composed:!0}),this.isVideoOn=t}}class ToggleChatEvent extends Event{static{this.eventName="toggle-chat"}constructor(t){super(ToggleChatEvent.eventName,{bubbles:!0,composed:!0}),this.isChatOpen=t}}class ViewDocumentationEvent extends Event{static{this.eventName="view-documentation"}constructor(){super(ViewDocumentationEvent.eventName,{bubbles:!0,composed:!0})}}class DownloadFileEvent extends Event{static{this.eventName="download-file"}constructor(t,e){super(DownloadFileEvent.eventName,{bubbles:!0,composed:!0}),this.url=t,this.filename=e}}let nt=class PublisherControls extends i{constructor(){super(...arguments),this.isAudioOn=!1,this.isVideoOn=!0,this.isChatOpen=!1,this.chatEnabled=!1,this.isWaitingRoom=!1,this.unreadQuery=new U(this,()=>P(p,{roomId:this.roomId}))}static{this.styles=o`:host{display:flex;justify-content:space-between;gap:var(--size-4)}:host([is-waiting-room]){justify-content:center}.left-controls{display:flex;gap:var(--size-4)}.control-button{border:none;cursor:pointer;display:flex;align-items:center;justify-content:center;width:var(--size-10);height:var(--size-10);padding:var(--size-2);border-radius:12.5px;transition:all .2s ease-in-out}@media (min-width:768px){.control-button{width:var(--size-11);height:var(--size-11);padding:var(--size-2);border-radius:16px}}.control-button:hover{background-color:var(--color-gray-light)}.control-button:focus-visible{outline:0;box-shadow:0 0 0 2px var(--color-primary-light)}.control-button--on{background-color:var(--color-white);color:var(--color-primary)}.control-button--off{background-color:var(--color-white);color:var(--color-negative)}`}toggleAudio(){this.dispatchEvent(new ToggleAudioEvent(!this.isAudioOn))}toggleVideo(){this.dispatchEvent(new ToggleVideoEvent(!this.isVideoOn))}toggleChat(){this.dispatchEvent(new ToggleChatEvent(!this.isChatOpen))}render(){return s`<div class="left-controls">${this.isWaitingRoom||!this.chatEnabled?n:s`<button type="button" class="control-button control-button--on" @click="${this.toggleChat}">${R({size:20})} ${(this.unreadQuery.result?.data?.unread_count??0)>0?s`<mq-unread-badge></mq-unread-badge>`:n}</button>`} <button type="button" class="control-button ${this.isAudioOn?"control-button--on":"control-button--off"}" @click="${this.toggleAudio}">${this.isAudioOn?I({size:20}):V({size:20})}</button> <button type="button" class="control-button ${this.isVideoOn?"control-button--on":"control-button--off"}" @click="${this.toggleVideo}">${this.isVideoOn?A({size:20}):N({size:20})}</button></div>`}};t([r({type:Boolean})],nt.prototype,"isAudioOn",void 0),t([r({type:Boolean})],nt.prototype,"isVideoOn",void 0),t([r({type:Boolean})],nt.prototype,"isChatOpen",void 0),t([r({type:Boolean})],nt.prototype,"chatEnabled",void 0),t([r({type:Boolean,reflect:!0,attribute:"is-waiting-room"})],nt.prototype,"isWaitingRoom",void 0),t([r({type:Number})],nt.prototype,"roomId",void 0),nt=t([e("publisher-controls")],nt);let rt=class VideoPublisher extends i{constructor(){super(...arguments),this.isWaitingRoom=!1,this.appointmentCounterController=new AppointmentCounterController(this,()=>new Date(this.startsAt)),this.getOrganizationSetupQuery=new U(this,()=>W(p)),this.isAudioOn=!0,this.isVideoOn=!0,this.isChatOpen=!1,this._handleVisibilityChange=()=>{"visible"===document.visibilityState&&this.publisher&&(this.publisher.publishAudio(!1),this.publisher.publishVideo(!1),setTimeout(()=>{this.publisher?.publishAudio(this.isAudioOn),this.publisher?.publishVideo(this.isVideoOn)},500))}}static{this.styles=o`:host{width:100%;height:100%;display:block}.OT_video-element{width:100%;height:100%;background:var(--color-black)}.OT_mute{display:none}video{border-radius:var(--border-radius-lg)}#video-publisher{width:100%;height:100%;transition:width .5s ease-in-out,height .5s ease-in-out;border-radius:var(--border-radius-lg)}:host(:not([is-waiting-room])) #video-publisher{width:121px;height:200px;z-index:50;border-radius:12px;overflow:hidden}:host([is-waiting-room]) .top-items{position:absolute;inset:0}:host(:not([is-waiting-room])) .top-items{position:absolute;z-index:50;top:var(--size-4);left:var(--size-4);right:var(--size-4);display:flex;justify-content:space-between;gap:var(--size-1)}.meta-container{display:flex;align-items:flex-start;gap:var(--size-1);min-width:0}.meta-item{background-color:var(--color-neutrals-text-default);padding:var(--size-2) var(--size-3);color:var(--color-white);font-size:var(--text-xs);line-height:var(--text-xs--line-height);flex-shrink:0}.meta-item:first-child{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;flex-shrink:1;min-width:0}publisher-controls{position:absolute;z-index:50;bottom:var(--size-4);left:var(--size-4);right:var(--size-4)}mq-chat-room{height:100%}@media (min-width:768px){:host(:not([is-waiting-room])) #video-publisher{width:250px;height:auto;aspect-ratio:16/9}:host(:not([is-waiting-room])) .top-items{top:var(--size-6);left:var(--size-6);right:var(--size-6)}}`}firstUpdated(t){super.firstUpdated(t),this.publisher=this.openTokService.initPublisher(this.publisherEl,{fitMode:"contain",width:"100%",height:"100%",audioFallbackEnabled:!1,insertMode:"append",mirror:!1,publishAudio:this.isAudioOn,publishVideo:this.isVideoOn},t=>{t&&D.error("error initializing publisher",t),this.session.publish(this.publisher)}),document.addEventListener("visibilitychange",this._handleVisibilityChange)}disconnectedCallback(){document.removeEventListener("visibilitychange",this._handleVisibilityChange),super.disconnectedCallback(),this.publisher?.destroy()}async _handleToggleAudioEvent(t){this.isAudioOn=t.isAudioOn,this.publisher.publishAudio(t.isAudioOn)}async _handleToggleVideoEvent(t){this.isVideoOn=t.isVideoOn,this.publisher.publishVideo(t.isVideoOn)}async _handleToggleChatEvent(t){this.isChatOpen=t.isChatOpen}render(){const t=!0===this.getOrganizationSetupQuery.result?.data?.appointments?.has_chat_in_appointment;return s`<div class="top-items">${this.isWaitingRoom?s`<div></div>`:s`<div class="meta-container"><span class="meta-item">${this.professionalName}</span> <span class="meta-item">${this.appointmentCounterController.formattedTime}</span></div>`}<div id="video-publisher"></div></div><publisher-controls .isAudioOn="${this.isAudioOn}" .isVideoOn="${this.isVideoOn}" .isChatOpen="${this.isChatOpen}" .chatEnabled="${t}" .roomId="${Number.parseInt(this.roomId,10)}" ?is-waiting-room="${this.isWaitingRoom}" @toggle-audio="${this._handleToggleAudioEvent}" @toggle-video="${this._handleToggleVideoEvent}" @toggle-chat="${this._handleToggleChatEvent}"></publisher-controls>${t?s`<mq-floating-bubble ?dismissable="${!1}" .open="${this.isChatOpen}" @mq-close="${()=>{this.isChatOpen=!1}}" hideCloseButton>${this.isChatOpen?s`<mq-chat-room slot="content" .consultationId="${this.consultationId}" .consultationType="${u.appointment}" token="${this.loginToken.access_token}" .roomId="${Number.parseInt(this.roomId,10)}" .professionalHash="${this.professionalHash}" @mq-chat-room-close="${()=>{this.isChatOpen=!1}}"></mq-chat-room>`:n}</mq-floating-bubble>`:n}`}};t([r({type:String})],rt.prototype,"consultationId",void 0),t([r({type:String})],rt.prototype,"apiKey",void 0),t([r({type:String})],rt.prototype,"token",void 0),t([r({type:String})],rt.prototype,"roomId",void 0),t([r({type:String})],rt.prototype,"professionalHash",void 0),t([r({type:Object})],rt.prototype,"session",void 0),t([r({type:String})],rt.prototype,"professionalName",void 0),t([r({type:String})],rt.prototype,"startsAt",void 0),t([r({type:Boolean,reflect:!0,attribute:"is-waiting-room"})],rt.prototype,"isWaitingRoom",void 0),t([_({context:G})],rt.prototype,"openTokService",void 0),t([_({context:q})],rt.prototype,"loginToken",void 0),t([M("#video-publisher")],rt.prototype,"publisherEl",void 0),t([g()],rt.prototype,"isAudioOn",void 0),t([g()],rt.prototype,"isVideoOn",void 0),t([g()],rt.prototype,"isChatOpen",void 0),rt=t([e("video-publisher")],rt);let at=class VideoSubscriber extends i{constructor(){super(...arguments),this.isVideoOn=!0,this._subscriberProperties={fitMode:"contain",insertMode:"append",width:"100%",height:"100%"},this._handleVisibilityChange=()=>{"visible"===document.visibilityState&&this.subscriber&&(this.subscriber.subscribeToAudio(!1),this.subscriber.subscribeToVideo(!1),setTimeout(()=>{this.subscriber?.subscribeToAudio(!0),this.subscriber?.subscribeToVideo(!0)},500),setTimeout(()=>this._resubscribe(),600))}}static{this.styles=o`:host{position:absolute;inset:0}.OT_subscriber{width:100%;height:100%;position:absolute;inset:0;background:var(--color-neutrals-background-default)}video{width:100%;height:100%}.video-disabled{position:absolute;inset:0;background:var(--color-gray-dark)}.hidden{display:none}`}firstUpdated(){this._subscribe(),document.addEventListener("visibilitychange",this._handleVisibilityChange)}_subscribe(){this.subscriber=this.openTokService.subscribe(this.session,this.stream,this.subscriberEl,this._subscriberProperties,t=>{}),this._attachSubscriberEvents()}_attachSubscriberEvents(){this.subscriber.on("connected",t=>{this.isVideoOn=t.target.stream?.hasVideo??!0}),this.subscriber.on("videoDisabled",()=>{this.isVideoOn=!1}),this.subscriber.on("videoEnabled",()=>{this.isVideoOn=!0}),this.subscriber.on("disconnected",()=>{this.isVideoOn=!1})}_resubscribe(){if(this.subscriber&&this.session&&this.subscriberEl){try{this.session.unsubscribe(this.subscriber)}catch{}this.subscriberEl.innerHTML="",this._subscribe()}}disconnectedCallback(){if(document.removeEventListener("visibilitychange",this._handleVisibilityChange),this.subscriber&&this.session)try{this.session.unsubscribe(this.subscriber)}catch{}super.disconnectedCallback()}render(){return s`<div id="video-subscriber" class="${this.isVideoOn?"":"hidden"}"></div>${this.isVideoOn?s``:s`<div class="video-disabled"></div>`}`}};t([r({type:Object})],at.prototype,"session",void 0),t([r({type:Object})],at.prototype,"stream",void 0),t([g()],at.prototype,"isVideoOn",void 0),t([_({context:G})],at.prototype,"openTokService",void 0),t([M("#video-subscriber")],at.prototype,"subscriberEl",void 0),at=t([e("video-subscriber")],at);let lt=class VideocallContent extends i{constructor(){super(...arguments),this.streams=[],this.isWaitingRoom=!1,this.isReconnecting=!1}static{this.styles=o`:host{display:block;position:relative;width:100%;height:100%;background:var(--color-gray-darkest);aspect-ratio:16/9}.reconnecting-overlay{position:absolute;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:var(--size-3);background:rgba(0,0,0,.6);z-index:100}.reconnecting-overlay__text{color:var(--color-white);font-size:var(--text-sm);line-height:var(--text-sm--line-height)}.reconnecting-overlay__subtitle{color:var(--color-white);font-size:var(--text-xs);line-height:var(--text-xs--line-height);opacity:.85}`}firstUpdated(){this.isWaitingRoom||x.track(S(this.loginToken.patient.hash,this.appointment.id??""))}updated(t){t.has("isWaitingRoom")&&!0===t.get("isWaitingRoom")&&!this.isWaitingRoom&&x.track(S(this.loginToken.patient.hash,this.appointment.id??""))}render(){return s`<video-publisher .consultationId="${this.appointment.id}" .session="${this.session}" ?is-waiting-room="${this.isWaitingRoom}" .professionalName="${this.appointment.from.name??""}" .professionalHash="${this.appointment.from.hash}" .startsAt="${this.appointment.started_at??(new Date).toISOString()}" .apiKey="${this.apiKey}" .token="${this.token}" .roomId="${this.appointment.room_id}"></video-publisher>${0===this.streams.length?s``:this.streams.map(t=>s`<video-subscriber .session="${this.session}" .stream="${t}"></video-subscriber>`)} ${this.isReconnecting?s`<div class="reconnecting-overlay">${a({color:"var(--color-white)"})} <span class="reconnecting-overlay__text">${y("Reconectando...")} </span><span class="reconnecting-overlay__subtitle">${y("Espere mientras se restablece la conexión")}</span></div>`:""}`}};t([r({type:Object})],lt.prototype,"session",void 0),t([r({type:Array})],lt.prototype,"streams",void 0),t([r({type:String})],lt.prototype,"apiKey",void 0),t([r({type:String})],lt.prototype,"token",void 0),t([r({type:Object})],lt.prototype,"appointment",void 0),t([r({type:Boolean,reflect:!0,attribute:"is-waiting-room"})],lt.prototype,"isWaitingRoom",void 0),t([r({type:Boolean,reflect:!0,attribute:"is-reconnecting"})],lt.prototype,"isReconnecting",void 0),t([_({context:q})],lt.prototype,"loginToken",void 0),lt=t([w(),e("mq-videocall-content")],lt);class ReviewSubmittedEvent extends Event{static{this.eventName="review-submitted"}constructor(){super(ReviewSubmittedEvent.eventName,{bubbles:!0,composed:!0})}}class ReviewSkippedEvent extends Event{static{this.eventName="review-skipped"}constructor(){super(ReviewSkippedEvent.eventName,{bubbles:!0,composed:!0})}}let ct=class ReviewView extends i{constructor(){super(...arguments),this.rating=0,this.comment="",this._reviewMutation=new F(this,{mutationFn:({rating:t,comment:e})=>p.consultations.postReview({consultation_id:this.appointment.id??"",consultation_type:u.appointment,rating:t,comment:e.trim()?e.trim():null}),onSuccess:()=>{this.dispatchEvent(new ReviewSubmittedEvent)},onError:t=>{!function(t){const e=t,i=e?.response?.status;return 400===i&&/already exists/i.test(e?.response?.data?.message??"")}(t)?K.error(y("No se ha podido enviar el cuestionario")):this.dispatchEvent(new ReviewSubmittedEvent)}}),this._reconnectMutation=new F(this,{mutationFn:t=>p.appointments.reconnectAppointment(t),onSuccess:()=>{this.dispatchEvent(new CustomEvent("review-reconnect",{bubbles:!0,composed:!0}))},onError:()=>{K.error(y("No se ha podido volver a la sala de espera"))}}),this.handleSkip=()=>{this.dispatchEvent(new ReviewSkippedEvent)},this.handleSubmit=()=>{this.rating<1||this.rating>5||this._reviewMutation.isPending||this._reviewMutation.run({rating:this.rating,comment:this.comment})}}static{this.styles=o`:host{display:flex;flex-direction:column;align-items:center;justify-content:center;min-height:100%;background-color:var(--color-background);box-sizing:border-box}.container{width:100%;max-width:500px;padding:var(--sp-6);display:flex;flex-direction:column;gap:var(--sp-5);box-sizing:border-box}.title{margin:0;padding:0 var(--sp-6);font-family:var(--font-titles);font-size:var(--text-2xl);line-height:var(--text-2xl--line-height);font-weight:var(--font-weight-normal);color:var(--color-primary);text-align:center}.rating{display:flex;flex-direction:column;align-items:center;gap:var(--sp-2);padding:var(--sp-1) var(--sp-6)}.subtitle{margin:0;font-family:var(--font-body);font-size:var(--text-sm);line-height:var(--text-sm--line-height);color:var(--color-text-icons--secondary);text-align:center}.comment-card{background-color:var(--color-white);border:var(--action-border-width) solid var(--color-border);border-radius:var(--border-radius-lg);box-shadow:0 4px 4px rgba(0,0,0,.05);padding:var(--sp-5);display:flex;flex-direction:column;gap:var(--sp-5)}.comment-header{display:flex;justify-content:space-between;align-items:flex-start;gap:var(--sp-3)}.comment-label{font-family:var(--font-body);font-size:var(--text-sm);line-height:var(--text-sm);font-weight:var(--font-weight-medium);color:var(--color-neutrals-text-default)}.comment-counter{font-family:var(--font-body);font-size:var(--text-sm);line-height:var(--text-sm--line-height);font-weight:var(--font-weight-normal);color:var(--color-text-icons--secondary);white-space:nowrap}.textarea{width:100%;box-sizing:border-box;height:var(--size-44);padding:var(--sp-3) var(--sp-4);background-color:var(--color-gray-lighter);border:var(--action-border-width) solid var(--color-border);border-radius:var(--border-radius-md);font-family:var(--font-body);font-size:var(--text-sm);line-height:var(--text-sm--line-height);color:var(--color-neutrals-text-default);resize:none}.textarea::placeholder{color:var(--color-text-icons--secondary);opacity:.6}.textarea:focus{outline:0;border-color:var(--color-primary)}.actions{display:flex;gap:var(--sp-4)}.btn{flex:1;height:var(--button-height-md);padding:var(--sp-2) var(--sp-4);border-radius:var(--border-radius-md);font-family:var(--font-body);font-size:var(--text-sm);line-height:var(--text-sm--line-height);font-weight:var(--font-weight-medium);cursor:pointer;transition:opacity .15s ease-in-out}.btn:focus-visible{outline:2px solid var(--color-primary);outline-offset:2px}.btn:disabled{cursor:not-allowed}.btn-skip{background:var(--color-white);border:var(--action-border-width) solid var(--color-primary);color:var(--color-primary)}.btn-skip:hover:not(:disabled){background:var(--color-primary-background-extraWeak)}.btn-submit{background:var(--color-primary);border:var(--action-border-width) solid var(--color-primary);color:var(--color-white)}.btn-submit:hover:not(:disabled){background:var(--color-primary-dark)}.btn-submit:disabled{opacity:.5}.waiting-card{background-color:var(--color-background-primary-light);border-radius:var(--border-radius-lg);padding:var(--sp-4);display:flex;flex-direction:column;gap:var(--sp-2)}.waiting-header{display:flex;align-items:center;gap:var(--sp-2);color:var(--color-neutrals-text-default)}.waiting-title{font-family:var(--font-body);font-size:var(--text-xs);line-height:1;font-weight:var(--font-weight-medium);color:var(--color-neutrals-text-default)}.waiting-body{margin:0;font-family:var(--font-body);font-size:var(--text-xs);line-height:var(--text-xs--line-height);color:var(--color-text-icons--secondary)}.waiting-link{background:0 0;border:0;padding:0;cursor:pointer;color:#3c50ec;font:inherit;text-decoration:none}.waiting-link:hover{text-decoration:none}.waiting-link:disabled{cursor:not-allowed;opacity:.6}`}render(){return s`<div class="container"><h1 class="title">${y("¿Qué tal ha ido tu cita?")}</h1><div class="rating"><mq-rating .value="${this.rating}" .label="${y("Valoración de la consulta")}" @mq-rating-change="${t=>{this.rating=t.value}}"></mq-rating><p class="subtitle">${y("(1 es muy malo, 5 es excelente)")}</p></div><div class="comment-card"><div class="comment-header"><span class="comment-label">${y("¿Tienes comentarios sobre la consulta?")}</span> <span class="comment-counter">${this.comment.length}/${240}</span></div><textarea class="textarea" maxlength="${240}" placeholder="${y("Comparte cómo fue la atención o si tuviste algún problema con la videollamada…")}" .value="${this.comment}" @input="${t=>{this.comment=t.target.value}}"></textarea><div class="actions"><button type="button" class="btn btn-skip" ?disabled="${this._reviewMutation.isPending}" @click="${this.handleSkip}">${y("Omitir")}</button> <button type="button" class="btn btn-submit" ?disabled="${this.rating<1||this._reviewMutation.isPending}" @click="${this.handleSubmit}">${y("Enviar")}</button></div></div><div class="waiting-card"><div class="waiting-header">${L({color:"currentColor",size:18})} <span class="waiting-title">${y("¿Ocurrió algún problema?")}</span></div><p class="waiting-body">${y("Si la cita no se ha podido realizar, puedes")} <button type="button" class="waiting-link" ?disabled="${this._reconnectMutation.isPending}" @click="${()=>this._reconnectMutation.run({appointmentId:this.appointment.id})}">${y("volver a la sala de espera.")}</button></p></div></div>`}};t([r({type:Object})],ct.prototype,"appointment",void 0),t([g()],ct.prototype,"rating",void 0),t([g()],ct.prototype,"comment",void 0),ct=t([w(),e("review-view")],ct);let dt=class ErrorView extends i{static{this.styles=o`.container{display:grid;place-items:center;width:100%;max-width:447px;margin:0 auto}.card>:not(:first-child){margin-top:var(--size-8)}.title{font-family:var(--font-titles);color:var(--color-neutrals-text-default);font-size:var(--text-2xl);line-height:var(--text-2xl--line-height);font-weight:var(--font-weight-bold);margin:0;margin-bottom:var(--size-3)}.description{color:var(--color-neutrals-text-default);font-size:var(--text-sm);line-height:var(--text-sm--line-height);font-weight:400}`}render(){return s`<div class="container"><div class="card"><slot name="icon"></slot><div class="content"><h1 class="title">${this.title}</h1><p class="description">${this.message}</p></div></div></div>`}};t([r({type:String})],dt.prototype,"title",void 0),t([r({type:String})],dt.prototype,"message",void 0),dt=t([e("error-view")],dt);let ht=class UnexpectedErrorView extends i{render(){return s`<error-view .title="${y("Error desconocido")}" .message="${y("Ha ocurrido un error al cargar la página. Por favor, intenta nuevamente o contacta al soporte.")}"><div slot="icon">${B()}</div></error-view>`}};ht=t([w(),e("unexpected-error-view")],ht);let pt=class ExpiredAppointmentErrorView extends i{render(){return s`<error-view .title="${y("Consulta caducada")}" .message="${y("Parece que no te hemos encontrado a la hora de tu cita. Puedes programar otra consulta para resolver tus dudas.")}"><div slot="icon">${H()}</div></error-view>`}};pt=t([w(),e("expired-appointment-error-view")],pt);let mt=class NotFoundErrorView extends i{static{this.styles=o`div{display:flex;flex-direction:column;gap:2px}span{font-size:var(--text-xs);line-height:var(--text-xs--line-height);font-weight:400;color:var(--color-gray-medium)}`}render(){return s`<error-view .title="${y("Página no encontrada")}" .message="${y("La página que estás buscando fue removida, renombrada o puede que no exista.")}"><div slot="icon"><span>404</span> ${B()}</div></error-view>`}};function ut(t){try{return function(t,e){if("string"!=typeof t)throw new InvalidTokenError("Invalid token specified: must be a string");e||(e={});const i=!0===e.header?0:1,o=t.split(".")[i];if("string"!=typeof o)throw new InvalidTokenError(`Invalid token specified: missing part #${i+1}`);let s;try{s=Q(o)}catch(t){throw new InvalidTokenError(`Invalid token specified: invalid base64 for part #${i+1} (${t.message})`)}try{return JSON.parse(s)}catch(t){throw new InvalidTokenError(`Invalid token specified: invalid json for part #${i+1} (${t.message})`)}}(t)}catch{return null}}mt=t([w(),e("not-found-error-view")],mt);let vt=class MqVideocallProvider extends i{static{this.styles=o`*{box-sizing:border-box}:host{display:block;margin:0 auto;width:100%;height:100%}.centered{display:grid;place-items:center;height:100%;min-height:var(--mq-container-min-height)}documentation-view{display:block;padding:var(--sp-4)}`}constructor(){super(),this.opentokService=new OpenTokService,this.params={appointmentId:this.appointmentId,token:this.token,apiKey:this.apiKey},this.appointmentTask=new c(this,{task:async([t,,])=>{const[e,i,o]=await Promise.all([p.flash.getAppointment({appointmentId:t}),p.consultations.getReview(t).then(()=>!0).catch(()=>!1),p.organizations.getOrganizationSetup().catch(()=>{})]);return{appointment:e,hasReview:i,hasNps:!0===o?.appointments?.has_nps}},args:()=>[this.appointmentId,this.apiKey,this.token]})}willUpdate(t){if(this.appointmentTask.value&&!this.opentokController){const{appointment:t,hasReview:e,hasNps:i}=this.appointmentTask.value,o=function(t,e){return d(t)?t.status===h.finished||t.status===h.reporting?e?et:X:Z:tt}(t,i);this.screen=o===et&&e?X:o,this.params={appointmentId:this.appointmentId,token:this.token,apiKey:this.apiKey},this.opentokController=new OpenTokController(this,t,this.token,()=>{this.screen=J},()=>{this.screen=!i||e?X:et})}}render(){const t=s`<div class="centered">${a({color:"var(--color-primary)"})}</div>`,e=s`<mq-layout background="transparent"><not-found-error-view></not-found-error-view></mq-layout>`;return this.appointmentTask.render({pending:()=>t,error:t=>{const i=ut(this.token);return i?.exp&&i.exp<Date.now()/1e3?s`<mq-layout background="transparent"><expired-appointment-error-view></expired-appointment-error-view></mq-layout>`:v(t)&&t.response?.status&&t.response.status<500?e:s`<mq-layout background="transparent"><unexpected-error-view></unexpected-error-view></mq-layout>`},complete:({appointment:i,hasNps:o})=>{if(this.opentokController?.isLoading)return t;if(this.opentokController?.errorMessage||!this.opentokController)return e;if(this.screen===tt)return s`<mq-layout background="transparent"><not-time-yet-view .appointment="${i}"></not-time-yet-view></mq-layout>`;if(this.screen===et)return s`<mq-layout background="transparent"><review-view .appointment="${i}" @review-submitted="${()=>{this.screen=X}}" @review-skipped="${()=>{this.screen=X}}" @review-reconnect="${()=>{this.screen=Z}}"></review-view></mq-layout>`;if(this.screen===X)return s`<mq-layout background="transparent"><documentation-view .appointment="${i}" .token="${this.token}" ?can-reconnect="${!o}" @reconnect="${()=>{this.screen=Z}}"></documentation-view></mq-layout>`;if(this.screen===Z||this.screen===J){const e=this.opentokController.session;return e?s`<waiting-room-layout .appointment="${i}" ?is-waiting-room="${this.screen===Z}"><mq-videocall-content .apiKey="${this.apiKey}" .token="${this.token}" .session="${e}" .streams="${this.opentokController?.streams??[]}" ?is-waiting-room="${this.screen===Z}" ?is-reconnecting="${this.opentokController.isReconnecting}" .appointment="${i}"></mq-videocall-content></waiting-room-layout>`:t}return s`<mq-layout background="transparent"><unexpected-error-view></unexpected-error-view></mq-layout>`}})}};t([r({type:String,attribute:"appointment-id"})],vt.prototype,"appointmentId",void 0),t([r({type:String,attribute:"api-key"})],vt.prototype,"apiKey",void 0),t([r({type:String})],vt.prototype,"token",void 0),t([g()],vt.prototype,"screen",void 0),t([l({context:G})],vt.prototype,"opentokService",void 0),t([l({context:Y})],vt.prototype,"params",void 0),vt=t([e("mq-videocall-provider")],vt);let gt=class PermissionsRequiredErrorView extends i{static{this.styles=o`.img-container{display:flex;justify-content:center}img{width:100%;height:auto;max-width:229px}`}render(){return s`<error-view .title="${y("Acepta los permisos de cámara y micrófono")}" .message="${y("Parece que has denegado los permisos necesarios para entrar a la videollamada. Edita los permisos en tu navegador para entrar. Una vez concedidos, debes refrescar esta pantalla.")}"><div class="img-container" slot="icon"><img src="${`${f.ASSETS_BASE_URL}/wc-videocall/Miccam_asset.png`}" alt="Miccam_asset" width="229" height="166.44"></div></error-view>`}};gt=t([w(),e("permissions-required-error-view")],gt);let bt=class MqVideocall extends i{constructor(){super(...arguments),this._permissionController=new PermissionController(this)}static{this.styles=o`:host{display:block;width:100%;height:100%}.loading-spinner-container{height:100%;display:flex;flex-direction:column;justify-content:center;align-items:center}.permissions-required-error-view-container{height:100%;padding-left:var(--size-4);padding-right:var(--size-4);display:grid;place-items:center}`}render(){return"prompt"===this._permissionController.state?s`<div class="loading-spinner-container">${a({color:"var(--color-primary)"})}</div>`:"denied"===this._permissionController.state?s`<div class="permissions-required-error-view-container"><permissions-required-error-view></permissions-required-error-view></div>`:s`<mq-videocall-provider .appointmentId="${this.appointmentId}" .token="${this.token}" .apiKey="${this.apiKey}"></mq-videocall-provider>`}};t([r({type:String,attribute:"appointment-id"})],bt.prototype,"appointmentId",void 0),t([r({type:String,attribute:"api-key"})],bt.prototype,"apiKey",void 0),t([r({type:String})],bt.prototype,"token",void 0),bt=t([e("mq-videocall")],bt);export{DownloadFileEvent,bt as MqVideocall,ReviewSkippedEvent,ReviewSubmittedEvent,ToggleAudioEvent,ToggleChatEvent,ToggleVideoEvent,ViewDocumentationEvent};
1
+ import{_ as t,t as e}from"./chunks/custom-element-DA9Fxvxd.js";import{a as i,i as o,x as s,E as n}from"./chunks/lit-element-DiWJYFwC.js";import{n as r}from"./chunks/property-scuRaFcM.js";import{spinnerIcon as a}from"./ui/icons/spinner-icon.js";import{e as l}from"./chunks/provide-D2fnEhT2.js";import{h as c}from"./chunks/task-Bj8p7kJX.js";import{l as d,d as h,a as p,b as m,C as u,e as v}from"./chunks/api-chat-client-1Vz6ZOwp.js";import{r as g}from"./chunks/state-LQivXIgA.js";import{n as b}from"./chunks/create-context-DqP79qjF.js";import{env as f}from"./env.js";import{m as y}from"./chunks/runtime-Bg1WXVCx.js";import{l as w}from"./chunks/localized-decorator-BlOuLhym.js";import{t as x,z as k,a as $,A as z,B as E,C as S}from"./chunks/telemetry-client-BLJVs9me.js";import{getLocale as j}from"./i18n.js";import{calendarIcon as T}from"./ui/icons/calendar-icon.js";import"./ui/back-link.js";import"./chunks/professional-overview-CfjgnTw4.js";import{c as _}from"./chunks/consume-CovVqBjI.js";import{MqViewAppointmentsEvent as C}from"./events.js";import{clockIcon as O}from"./ui/icons/clock-icon.js";import"./chunks/documentation-view-geQU8ttU.js";import{l as q}from"./chunks/chunk-S5RWG6G2-DPesx3Od.js";import"./mq-chat-room.js";import{chatbubbleIcon as R}from"./ui/icons/chat-bubble-icon.js";import{micIcon as I}from"./ui/icons/mic-icon.js";import{micOffIcon as V}from"./ui/icons/mic-off-icon.js";import{videoIcon as A}from"./ui/icons/video-icon.js";import{videoOffIcon as N}from"./ui/icons/video-off-icon.js";import"./ui/mq-unread-badge.js";import{Q as U}from"./chunks/query-controller-BlO1Ax65.js";import{g as P}from"./chunks/chunk-GZF3YFSX-DM-GTqxg.js";import{g as W}from"./chunks/get-organization-setup-query-BMbuRi6v.js";import{l as D}from"./chunks/chunk-4FFT6DC2-CVWibomC.js";import"./ui/mq-floating-bubble.js";import{e as M}from"./chunks/query-CeeutdfT.js";import{M as F}from"./chunks/mutation-controller-CR2qcqhH.js";import{alertCircleIcon as L}from"./ui/icons/alert-circle-icon.js";import"./ui/mq-rating.js";import{toast as K}from"./ui/mq-toast.js";import{heartBeatIcon as B}from"./ui/icons/heartbeat-icon.js";import{timeLeftIcon as H}from"./ui/icons/time-left-icon.js";import"./chunks/mq-layout-CGcdxGMQ.js";import"./ui/icons/types.js";import"./chunks/context-provider--AKuwfs9.js";import"./chunks/context-request-event-Dfydf1ub.js";import"./chunks/external-CJj32K_p.js";import"./chunks/parseISO-Dj3qSTG8.js";import"./chunks/format-CRFiCNHw.js";import"./chunks/isBefore-CPpTogxo.js";import"./ui/icons/chevron-left-icon.js";import"./chunks/if-defined-BYeVdwgd.js";import"./ui/mq-text-button.js";import"./chunks/class-map-Co76I6aw.js";import"./chunks/directive-2EDmOukv.js";import"./ui/icons/chevron-down-icon.js";import"./ui/mq-avatar.js";import"./chunks/context-consumer-ESdICVAb.js";import"./ui/icons/info-circle-outine-icon.js";import"./ui/mq-button.js";import"./ui/icons/message-bubble-icon.js";import"./ui/mq-card.js";import"./chunks/index-Bx8TWBsk.js";import"./ui/icons/download-icon.js";import"./chunks/i18n-formats-DYS91YEa.js";import"./theme.js";import"./ui/icons/x-icon.js";import"./ui/mq-skeleton.js";import"./chunks/style-map-CIdqdn7C.js";import"./chunks/chunk-YMQSBQHL-De_r7BNk.js";import"./ui/icons/check-double-icon.js";import"./ui/icons/check-icon.js";import"./chunks/chunk-YTQUGGS3-DmCGIoFy.js";import"./chunks/chunk-RCFIJTXZ-C6Ir0-sM.js";import"./chunks/query-Cjvi4_dT.js";class PermissionController{constructor(t){this.state="prompt",this.host=t,t.addController(this)}async hostConnected(){await this.requestPermissions()}async requestPermissions(){try{const t=await navigator.mediaDevices.getUserMedia({video:!0,audio:!0});for(const e of t.getTracks())e.stop();this.state="granted"}catch{this.state="denied"}finally{this.host.requestUpdate()}}}class InvalidTokenError extends Error{}function Q(t){let e=t.replace(/-/g,"+").replace(/_/g,"/");switch(e.length%4){case 0:break;case 2:e+="==";break;case 3:e+="=";break;default:throw new Error("base64 string is not of the correct length")}try{return function(t){return decodeURIComponent(atob(t).replace(/(.)/g,(t,e)=>{let i=e.charCodeAt(0).toString(16).toUpperCase();return i.length<2&&(i="0"+i),"%"+i}))}(e)}catch(t){return atob(e)}}InvalidTokenError.prototype.name="InvalidTokenError";const G=b(Symbol("opentok-service")),Y=b(Symbol("params"));class OpenTokService{static{this.URL="https://static.opentok.com/v2/js/opentok.min.js"}_ensureLoaded(){if(!window.OT)throw new Error("OpenTok SDK is not loaded");return window.OT}load(){return new Promise((t,e)=>{if(window.OT)return void t();const i=document.createElement("script");i.src=OpenTokService.URL,i.onload=()=>{t()},i.onerror=e,document.head.appendChild(i)})}initSession(t,e){return this._ensureLoaded().initSession(t,e)}initPublisher(t,e,i){return this._ensureLoaded().initPublisher(t,e,i)}subscribe(t,e,i,o,s){return t.subscribe(e,i,o,s)}}const Z="waiting-room",J="videocall",X="documentation",tt="not-time-yet",et="review";class OpenTokController{constructor(t,e,i,o,s){this.isLoading=!0,this.isSessionReady=!1,this.isReconnecting=!1,this.errorMessage="",this.session=null,this.streams=[],this.destroyedStreamIds=new Set,this.openTokService=new OpenTokService,this.session_token=null,this.hasLeftWaitingRoom=!1,this.host=t,t.addController(this),this.appointment=e,this.token=i,this.onCallStarted=o,this.onCallFinished=s,this._loadOpentok()}async _loadOpentok(){try{await this.openTokService.load(),this._initializeSession()}catch{this.isLoading=!1,this.errorMessage="Failed to load OpenTok script",this.host.requestUpdate()}}async _getSessionAndToken(){const t=await p.flash.joinCall({callId:this.appointment.call_id});return this.session_token=t.session_token,[t.session_id,t.session_token]}async _initializeSession(){try{const[t,e]=await this._getSessionAndToken();this.session=this.openTokService.initSession(f.OPENTOK_API_KEY,t),this.session.on("sessionConnected",()=>{this.isLoading=!1,this.isSessionReady=!0,this.host.requestUpdate()}),this.session.on("sessionDisconnected",()=>{this.isSessionReady=!1,this._leaveWaitingRoom(),setTimeout(()=>{this.onCallFinished(),this.host.requestUpdate()},1e3),this.host.requestUpdate()}),this.session.on("sessionReconnecting",()=>{this.isReconnecting=!0,this.host.requestUpdate()}),this.session.on("sessionReconnected",()=>{this.isReconnecting=!1;const t=this.streams.filter(t=>!this.destroyedStreamIds.has(t.streamId));this.streams=[],this.host.requestUpdate(),requestAnimationFrame(()=>{this.streams=t.filter(t=>!this.destroyedStreamIds.has(t.streamId)),this.host.requestUpdate()})}),this.session.on("streamCreated",t=>{this.streams=[...this.streams,t.stream],this.onCallStarted(),this.host.requestUpdate()}),this.session.on("streamDestroyed",t=>{t.stream?.streamId&&this.destroyedStreamIds.add(t.stream.streamId),setTimeout(()=>{this.streams=this.streams.filter(e=>e.streamId!==t.stream?.streamId),this._leaveWaitingRoom(),this.onCallFinished(),this.host.requestUpdate()},1e3)}),this.session.connect(e,t=>{t&&(this.isLoading=!1,this.errorMessage=`Failed to connect to session: ${t.message}`,this.host.requestUpdate())}),p.flash.setReady({professional_hash:this.appointment.from.hash,consultation_id:this.appointment.id,consultation_type:"appointment"})}catch(t){this.isLoading=!1,this.errorMessage=`Error initializing session: ${t instanceof Error?t.message:"Unknown error"}`,this.host.requestUpdate()}}_leaveWaitingRoom(){this.hasLeftWaitingRoom||(this.hasLeftWaitingRoom=!0,p.flash.leaveWaitingRoom({professional_hash:this.appointment.from.hash,consultation_id:this.appointment.id,consultation_type:"appointment"}))}hostDisconnected(){this._leaveWaitingRoom(),this.session&&(this.session.disconnect(),this.session.off("streamCreated"),this.session.off("streamDestroyed"),this.session.off("sessionConnected"),this.session.off("sessionDisconnected"),this.session.off("sessionReconnecting"),this.session.off("sessionReconnected"))}}let it=class NotTimeYetView extends i{static{this.styles=[o`back-link{display:block;margin-bottom:var(--size-3)}.title{font-family:var(--font-titles);font-size:var(--text-2xl);line-height:var(--text-2xl--line-height);color:var(--color-neutrals-text-default);font-weight:var(--font-weight-bold);margin:0;margin-bottom:var(--size-3)}.description{font-family:var(--font-body);font-size:var(--text-sm);line-height:var(--text-sm--line-height);color:var(--color-neutrals-text-default);font-weight:var(--font-weight-normal);margin:0;margin-bottom:var(--size-3)}.details-card{background-color:var(--color-background);border-radius:var(--border-radius-xl);padding:var(--size-6) var(--size-4);display:flex;min-width:0;flex-direction:column;gap:var(--size-6);margin-bottom:var(--size-6)}.details-card-title{padding:14px 0;font-size:var(--text-base);line-height:100%;font-weight:var(--font-weight-medium);color:var(--color-gray-darker);text-align:left}.details-rows{display:flex;flex-direction:column;gap:var(--size-3)}.details-row{display:flex;align-items:center;gap:var(--size-2);font-family:var(--font-body);font-size:var(--text-base);line-height:var(--text-base--line-height);color:var(--color-neutrals-text-default);font-weight:var(--font-weight-semibold)}.details-row span::first-letter{text-transform:uppercase}@media (min-width:768px){.title{font-size:var(--text-5xl);line-height:var(--text-5xl--line-height)}.description{font-size:var(--text-base);line-height:var(--text-base--line-height);margin-bottom:var(--sp-6)}}`]}firstUpdated(){x.track(k(this.loginToken.patient.hash,this.appointment.id??""))}render(){const t=j()?.replace("_","-")??"es-ES",e=this.loginToken.patient.timezone,i=new Intl.DateTimeFormat(t,{dateStyle:"full",...e?{timeZone:e}:{}}),o=new Intl.DateTimeFormat(t,{timeStyle:"short",...e?{timeZone:e}:{}}),n=new Date(this.appointment.start_date),r=$(n,this.appointment.duration),a=e?m(e,n):"";return s`<back-link @mq-back="${t=>{t.stopPropagation(),this.dispatchEvent(new C({tab:"next"}))}}">${y("Salir")}</back-link><h1 class="title">${y("¡Aún no es la hora!")}</h1><p class="description">${y("Cuando falten 10 minutos para tu consulta, podrás acceder a la videoconsulta")}</p><div class="details-card"><professional-overview .name="${this.appointment.from.name??""}" .specialtyName="${this.appointment.from.speciality??""}" .collegiateNumber="${this.appointment.from.collegiate_number??void 0}" .description="${this.appointment.from.description??""}" .languages="${this.appointment.from.languages}" .avatar="${this.appointment.from.avatar??""}"></professional-overview><div class="details-rows"><div class="details-row">${T({size:24})} <span>${i.format(n)}</span></div><div class="details-row">${O({size:24})} <span>${o.format(n)} - ${o.format(r)}${a?` (${a})`:""}</span></div></div></div><chat-cta .consultationId="${this.appointment.id}" .roomId="${Number(this.appointment.room_id)}" .professionalHash="${this.appointment.from.hash}" .text="${y("Utiliza el chat para enviar el motivo de consulta, documentos o imágenes")}" .onOpenChat="${()=>{x.track(z(this.loginToken.patient.hash,this.appointment.id??""))}}"></chat-cta>`}};t([r({type:Object})],it.prototype,"appointment",void 0),t([_({context:q})],it.prototype,"loginToken",void 0),it=t([w(),e("not-time-yet-view")],it);let ot=class PermissionStatusBanner extends i{static{this.styles=o`:host{display:block;padding:var(--size-5) var(--size-6);background-color:#ebf9ff;border-radius:var(--border-radius-lg);text-align:center}span{color:var(--color-neutrals-text-default);font-size:var(--text-sm);line-height:var(--text-sm--line-height);font-weight:var(--font-weight-normal)}`}render(){return s`<span>${y("Espera a ser atendido sin salir de esta pantalla")}</span>`}};ot=t([w(),e("permission-status-banner")],ot);let st=class WaitingRoomLayout extends i{constructor(){super(...arguments),this.isWaitingRoom=!1}static{this.styles=o`.information-container{padding:var(--size-5) var(--size-4);background-color:var(--color-neutrals-background-disabled)}.content{max-width:560px;margin:0 auto}.information-container h2{font-family:var(--font-titles);font-size:var(--text-2xl);line-height:var(--text-2xl--line-height);font-weight:var(--font-weight-bold);color:var(--color-neutrals-text-default);margin:0;margin-bottom:var(--size-4)}.information-container p{font-size:var(--text-sm);line-height:var(--text-sm--line-height);font-weight:var(--font-weight-normal);color:var(--color-neutrals-text-default);margin:0}.video-container{margin-left:auto;margin-right:auto;margin-bottom:var(--size-6);position:relative;max-height:301px;aspect-ratio:9/16;border-radius:16px;overflow:hidden}@media (min-width:768px){.information-container{background-color:transparent;padding:var(--size-6) 0}.video-container{max-height:454px;aspect-ratio:16/9}.information-container h2{font-size:var(--text-4xl);line-height:var(--text-4xl--line-height)}.information-container p{font-size:var(--text-base);line-height:var(--text-base--line-height)}}`}firstUpdated(){this.isWaitingRoom&&x.track(E(this.loginToken.patient.hash,this.appointment.id??""))}render(){if(!this.isWaitingRoom)return s`<slot></slot>`;const t=j()?.replace("_","-")??"es-ES",e=this.loginToken.patient.timezone,i=e?{timeZone:e}:{},o=new Intl.DateTimeFormat(t,{dateStyle:"short",...i}),n=new Intl.DateTimeFormat(t,{timeStyle:"short",...i}),r=new Date(this.appointment.start_date),a=$(r,this.appointment.duration),l=e?m(e,r):"",c=o.format(r),d=`${n.format(r)} - ${n.format(a)}${l?` (${l})`:""}`;return s`<permission-status-banner></permission-status-banner><div class="content"><div class="information-container"><back-link @mq-back="${t=>{t.stopPropagation(),this.dispatchEvent(new C({tab:"next"}))}}">${y("Salir")}</back-link><h2>${y("Sala de espera")}</h2><div class="doctor-info"><p>${this.appointment.from.name}</p><p>${c}</p><p>${d}</p></div></div><div class="video-container"><slot></slot></div><chat-cta .consultationId="${this.appointment.id}" .roomId="${Number(this.appointment.room_id)}" .professionalHash="${this.appointment.from.hash}" .text="${y("Utiliza el chat para enviar el motivo de consulta, documentos o imágenes")}" .onOpenChat="${()=>{x.track(z(this.loginToken.patient.hash,this.appointment.id??""))}}"></chat-cta></div>`}};t([r({type:Object})],st.prototype,"appointment",void 0),t([r({type:Boolean,attribute:"is-waiting-room"})],st.prototype,"isWaitingRoom",void 0),t([_({context:q})],st.prototype,"loginToken",void 0),st=t([e("waiting-room-layout")],st);class AppointmentCounterController{constructor(t,e){this.startsAtGetter=e,this.formattedTime="--:--",this.interval=null,this.host=t,t.addController(this)}async hostConnected(){this.interval=setInterval(()=>{const t=new Date,e=this.startsAtGetter(),i=t.getTime()-e.getTime(),o=Math.floor(i/1e3),s=Math.floor(o/60),n=o%60;this.formattedTime=`${s.toString().padStart(2,"0")}:${n.toString().padStart(2,"0")}`,this.host.requestUpdate()},1e3)}hostDisconnected(){this.interval&&clearInterval(this.interval)}}class ToggleAudioEvent extends Event{static{this.eventName="toggle-audio"}constructor(t){super(ToggleAudioEvent.eventName,{bubbles:!0,composed:!0}),this.isAudioOn=t}}class ToggleVideoEvent extends Event{static{this.eventName="toggle-video"}constructor(t){super(ToggleVideoEvent.eventName,{bubbles:!0,composed:!0}),this.isVideoOn=t}}class ToggleChatEvent extends Event{static{this.eventName="toggle-chat"}constructor(t){super(ToggleChatEvent.eventName,{bubbles:!0,composed:!0}),this.isChatOpen=t}}class ViewDocumentationEvent extends Event{static{this.eventName="view-documentation"}constructor(){super(ViewDocumentationEvent.eventName,{bubbles:!0,composed:!0})}}class DownloadFileEvent extends Event{static{this.eventName="download-file"}constructor(t,e){super(DownloadFileEvent.eventName,{bubbles:!0,composed:!0}),this.url=t,this.filename=e}}let nt=class PublisherControls extends i{constructor(){super(...arguments),this.isAudioOn=!1,this.isVideoOn=!0,this.isChatOpen=!1,this.chatEnabled=!1,this.isWaitingRoom=!1,this.unreadQuery=new U(this,()=>P(p,{roomId:this.roomId}))}static{this.styles=o`:host{display:flex;justify-content:space-between;gap:var(--size-4)}:host([is-waiting-room]){justify-content:center}.left-controls{display:flex;gap:var(--size-4)}.control-button{border:none;cursor:pointer;display:flex;align-items:center;justify-content:center;width:var(--size-10);height:var(--size-10);padding:var(--size-2);border-radius:12.5px;transition:all .2s ease-in-out}@media (min-width:768px){.control-button{width:var(--size-11);height:var(--size-11);padding:var(--size-2);border-radius:16px}}.control-button:hover{background-color:var(--color-gray-light)}.control-button:focus-visible{outline:0;box-shadow:0 0 0 2px var(--color-primary-light)}.control-button--on{background-color:var(--color-white);color:var(--color-primary)}.control-button--off{background-color:var(--color-white);color:var(--color-negative)}`}toggleAudio(){this.dispatchEvent(new ToggleAudioEvent(!this.isAudioOn))}toggleVideo(){this.dispatchEvent(new ToggleVideoEvent(!this.isVideoOn))}toggleChat(){this.dispatchEvent(new ToggleChatEvent(!this.isChatOpen))}render(){return s`<div class="left-controls">${this.isWaitingRoom||!this.chatEnabled?n:s`<button type="button" class="control-button control-button--on" @click="${this.toggleChat}">${R({size:20})} ${(this.unreadQuery.result?.data?.unread_count??0)>0?s`<mq-unread-badge></mq-unread-badge>`:n}</button>`} <button type="button" class="control-button ${this.isAudioOn?"control-button--on":"control-button--off"}" @click="${this.toggleAudio}">${this.isAudioOn?I({size:20}):V({size:20})}</button> <button type="button" class="control-button ${this.isVideoOn?"control-button--on":"control-button--off"}" @click="${this.toggleVideo}">${this.isVideoOn?A({size:20}):N({size:20})}</button></div>`}};t([r({type:Boolean})],nt.prototype,"isAudioOn",void 0),t([r({type:Boolean})],nt.prototype,"isVideoOn",void 0),t([r({type:Boolean})],nt.prototype,"isChatOpen",void 0),t([r({type:Boolean})],nt.prototype,"chatEnabled",void 0),t([r({type:Boolean,reflect:!0,attribute:"is-waiting-room"})],nt.prototype,"isWaitingRoom",void 0),t([r({type:Number})],nt.prototype,"roomId",void 0),nt=t([e("publisher-controls")],nt);let rt=class VideoPublisher extends i{constructor(){super(...arguments),this.isWaitingRoom=!1,this.appointmentCounterController=new AppointmentCounterController(this,()=>new Date(this.startsAt)),this.getOrganizationSetupQuery=new U(this,()=>W(p)),this.isAudioOn=!0,this.isVideoOn=!0,this.isChatOpen=!1,this._handleVisibilityChange=()=>{"visible"===document.visibilityState&&this.publisher&&(this.publisher.publishAudio(!1),this.publisher.publishVideo(!1),setTimeout(()=>{this.publisher?.publishAudio(this.isAudioOn),this.publisher?.publishVideo(this.isVideoOn)},500))}}static{this.styles=o`:host{width:100%;height:100%;display:block}.OT_video-element{width:100%;height:100%;background:var(--color-black)}.OT_mute{display:none}video{border-radius:var(--border-radius-lg)}#video-publisher{width:100%;height:100%;transition:width .5s ease-in-out,height .5s ease-in-out;border-radius:var(--border-radius-lg)}:host(:not([is-waiting-room])) #video-publisher{width:121px;height:200px;z-index:50;border-radius:12px;overflow:hidden}:host([is-waiting-room]) .top-items{position:absolute;inset:0}:host(:not([is-waiting-room])) .top-items{position:absolute;z-index:50;top:var(--size-4);left:var(--size-4);right:var(--size-4);display:flex;justify-content:space-between;gap:var(--size-1)}.meta-container{display:flex;align-items:flex-start;gap:var(--size-1);min-width:0}.meta-item{background-color:var(--color-neutrals-text-default);padding:var(--size-2) var(--size-3);color:var(--color-white);font-size:var(--text-xs);line-height:var(--text-xs--line-height);flex-shrink:0}.meta-item:first-child{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;flex-shrink:1;min-width:0}publisher-controls{position:absolute;z-index:50;bottom:var(--size-4);left:var(--size-4);right:var(--size-4)}mq-chat-room{height:100%}@media (min-width:768px){:host(:not([is-waiting-room])) #video-publisher{width:250px;height:auto;aspect-ratio:16/9}:host(:not([is-waiting-room])) .top-items{top:var(--size-6);left:var(--size-6);right:var(--size-6)}}`}firstUpdated(t){super.firstUpdated(t),this.publisher=this.openTokService.initPublisher(this.publisherEl,{fitMode:"contain",width:"100%",height:"100%",audioFallbackEnabled:!1,insertMode:"append",mirror:!1,publishAudio:this.isAudioOn,publishVideo:this.isVideoOn},t=>{t&&D.error("error initializing publisher",t),this.session.publish(this.publisher)}),document.addEventListener("visibilitychange",this._handleVisibilityChange)}disconnectedCallback(){document.removeEventListener("visibilitychange",this._handleVisibilityChange),super.disconnectedCallback(),this.publisher?.destroy()}async _handleToggleAudioEvent(t){this.isAudioOn=t.isAudioOn,this.publisher.publishAudio(t.isAudioOn)}async _handleToggleVideoEvent(t){this.isVideoOn=t.isVideoOn,this.publisher.publishVideo(t.isVideoOn)}async _handleToggleChatEvent(t){this.isChatOpen=t.isChatOpen}render(){const t=!0===this.getOrganizationSetupQuery.result?.data?.appointments?.has_chat_in_appointment;return s`<div class="top-items">${this.isWaitingRoom?s`<div></div>`:s`<div class="meta-container"><span class="meta-item">${this.professionalName}</span> <span class="meta-item">${this.appointmentCounterController.formattedTime}</span></div>`}<div id="video-publisher"></div></div><publisher-controls .isAudioOn="${this.isAudioOn}" .isVideoOn="${this.isVideoOn}" .isChatOpen="${this.isChatOpen}" .chatEnabled="${t}" .roomId="${Number.parseInt(this.roomId,10)}" ?is-waiting-room="${this.isWaitingRoom}" @toggle-audio="${this._handleToggleAudioEvent}" @toggle-video="${this._handleToggleVideoEvent}" @toggle-chat="${this._handleToggleChatEvent}"></publisher-controls>${t?s`<mq-floating-bubble ?dismissable="${!1}" .open="${this.isChatOpen}" @mq-close="${()=>{this.isChatOpen=!1}}" hideCloseButton>${this.isChatOpen?s`<mq-chat-room slot="content" .consultationId="${this.consultationId}" .consultationType="${u.appointment}" token="${this.loginToken.access_token}" .roomId="${Number.parseInt(this.roomId,10)}" .professionalHash="${this.professionalHash}" @mq-chat-room-close="${()=>{this.isChatOpen=!1}}"></mq-chat-room>`:n}</mq-floating-bubble>`:n}`}};t([r({type:String})],rt.prototype,"consultationId",void 0),t([r({type:String})],rt.prototype,"apiKey",void 0),t([r({type:String})],rt.prototype,"token",void 0),t([r({type:String})],rt.prototype,"roomId",void 0),t([r({type:String})],rt.prototype,"professionalHash",void 0),t([r({type:Object})],rt.prototype,"session",void 0),t([r({type:String})],rt.prototype,"professionalName",void 0),t([r({type:String})],rt.prototype,"startsAt",void 0),t([r({type:Boolean,reflect:!0,attribute:"is-waiting-room"})],rt.prototype,"isWaitingRoom",void 0),t([_({context:G})],rt.prototype,"openTokService",void 0),t([_({context:q})],rt.prototype,"loginToken",void 0),t([M("#video-publisher")],rt.prototype,"publisherEl",void 0),t([g()],rt.prototype,"isAudioOn",void 0),t([g()],rt.prototype,"isVideoOn",void 0),t([g()],rt.prototype,"isChatOpen",void 0),rt=t([e("video-publisher")],rt);let at=class VideoSubscriber extends i{constructor(){super(...arguments),this.isVideoOn=!0,this._subscriberProperties={fitMode:"contain",insertMode:"append",width:"100%",height:"100%"},this._handleVisibilityChange=()=>{"visible"===document.visibilityState&&this.subscriber&&(this.subscriber.subscribeToAudio(!1),this.subscriber.subscribeToVideo(!1),setTimeout(()=>{this.subscriber?.subscribeToAudio(!0),this.subscriber?.subscribeToVideo(!0)},500),setTimeout(()=>this._resubscribe(),600))}}static{this.styles=o`:host{position:absolute;inset:0}.OT_subscriber{width:100%;height:100%;position:absolute;inset:0;background:var(--color-neutrals-background-default)}video{width:100%;height:100%}.video-disabled{position:absolute;inset:0;background:var(--color-gray-dark)}.hidden{display:none}`}firstUpdated(){this._subscribe(),document.addEventListener("visibilitychange",this._handleVisibilityChange)}_subscribe(){this.subscriber=this.openTokService.subscribe(this.session,this.stream,this.subscriberEl,this._subscriberProperties,t=>{}),this._attachSubscriberEvents()}_attachSubscriberEvents(){this.subscriber.on("connected",t=>{this.isVideoOn=t.target.stream?.hasVideo??!0}),this.subscriber.on("videoDisabled",()=>{this.isVideoOn=!1}),this.subscriber.on("videoEnabled",()=>{this.isVideoOn=!0}),this.subscriber.on("disconnected",()=>{this.isVideoOn=!1})}_resubscribe(){if(this.subscriber&&this.session&&this.subscriberEl){try{this.session.unsubscribe(this.subscriber)}catch{}this.subscriberEl.innerHTML="",this._subscribe()}}disconnectedCallback(){if(document.removeEventListener("visibilitychange",this._handleVisibilityChange),this.subscriber&&this.session)try{this.session.unsubscribe(this.subscriber)}catch{}super.disconnectedCallback()}render(){return s`<div id="video-subscriber" class="${this.isVideoOn?"":"hidden"}"></div>${this.isVideoOn?s``:s`<div class="video-disabled"></div>`}`}};t([r({type:Object})],at.prototype,"session",void 0),t([r({type:Object})],at.prototype,"stream",void 0),t([g()],at.prototype,"isVideoOn",void 0),t([_({context:G})],at.prototype,"openTokService",void 0),t([M("#video-subscriber")],at.prototype,"subscriberEl",void 0),at=t([e("video-subscriber")],at);let lt=class VideocallContent extends i{constructor(){super(...arguments),this.streams=[],this.isWaitingRoom=!1,this.isReconnecting=!1}static{this.styles=o`:host{display:block;position:relative;width:100%;height:100%;background:var(--color-gray-darkest);aspect-ratio:16/9}.reconnecting-overlay{position:absolute;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:var(--size-3);background:rgba(0,0,0,.6);z-index:100}.reconnecting-overlay__text{color:var(--color-white);font-size:var(--text-sm);line-height:var(--text-sm--line-height)}.reconnecting-overlay__subtitle{color:var(--color-white);font-size:var(--text-xs);line-height:var(--text-xs--line-height);opacity:.85}`}firstUpdated(){this.isWaitingRoom||x.track(S(this.loginToken.patient.hash,this.appointment.id??""))}updated(t){t.has("isWaitingRoom")&&!0===t.get("isWaitingRoom")&&!this.isWaitingRoom&&x.track(S(this.loginToken.patient.hash,this.appointment.id??""))}render(){return s`<video-publisher .consultationId="${this.appointment.id}" .session="${this.session}" ?is-waiting-room="${this.isWaitingRoom}" .professionalName="${this.appointment.from.name??""}" .professionalHash="${this.appointment.from.hash}" .startsAt="${this.appointment.started_at??(new Date).toISOString()}" .apiKey="${this.apiKey}" .token="${this.token}" .roomId="${this.appointment.room_id}"></video-publisher>${0===this.streams.length?s``:this.streams.map(t=>s`<video-subscriber .session="${this.session}" .stream="${t}"></video-subscriber>`)} ${this.isReconnecting?s`<div class="reconnecting-overlay">${a({color:"var(--color-white)"})} <span class="reconnecting-overlay__text">${y("Reconectando...")} </span><span class="reconnecting-overlay__subtitle">${y("Espere mientras se restablece la conexión")}</span></div>`:""}`}};t([r({type:Object})],lt.prototype,"session",void 0),t([r({type:Array})],lt.prototype,"streams",void 0),t([r({type:String})],lt.prototype,"apiKey",void 0),t([r({type:String})],lt.prototype,"token",void 0),t([r({type:Object})],lt.prototype,"appointment",void 0),t([r({type:Boolean,reflect:!0,attribute:"is-waiting-room"})],lt.prototype,"isWaitingRoom",void 0),t([r({type:Boolean,reflect:!0,attribute:"is-reconnecting"})],lt.prototype,"isReconnecting",void 0),t([_({context:q})],lt.prototype,"loginToken",void 0),lt=t([w(),e("mq-videocall-content")],lt);class ReviewSubmittedEvent extends Event{static{this.eventName="review-submitted"}constructor(){super(ReviewSubmittedEvent.eventName,{bubbles:!0,composed:!0})}}class ReviewSkippedEvent extends Event{static{this.eventName="review-skipped"}constructor(){super(ReviewSkippedEvent.eventName,{bubbles:!0,composed:!0})}}let ct=class ReviewView extends i{constructor(){super(...arguments),this.rating=0,this.comment="",this._reviewMutation=new F(this,{mutationFn:({rating:t,comment:e})=>p.consultations.postReview({consultation_id:this.appointment.id??"",consultation_type:u.appointment,rating:t,comment:e.trim()?e.trim():null}),onSuccess:()=>{this.dispatchEvent(new ReviewSubmittedEvent)},onError:t=>{!function(t){const e=t,i=e?.response?.status;return 400===i&&/already exists/i.test(e?.response?.data?.message??"")}(t)?K.error(y("No se ha podido enviar el cuestionario")):this.dispatchEvent(new ReviewSubmittedEvent)}}),this._reconnectMutation=new F(this,{mutationFn:t=>p.appointments.reconnectAppointment(t),onSuccess:()=>{this.dispatchEvent(new CustomEvent("review-reconnect",{bubbles:!0,composed:!0}))},onError:()=>{K.error(y("No se ha podido volver a la sala de espera"))}}),this.handleSkip=()=>{this.dispatchEvent(new ReviewSkippedEvent)},this.handleSubmit=()=>{this.rating<1||this.rating>5||this._reviewMutation.isPending||this._reviewMutation.run({rating:this.rating,comment:this.comment})}}static{this.styles=o`:host{display:flex;flex-direction:column;align-items:center;justify-content:center;min-height:100%;background-color:var(--color-background);box-sizing:border-box}.container{width:100%;max-width:500px;padding:var(--sp-6);display:flex;flex-direction:column;gap:var(--sp-5);box-sizing:border-box}.title{margin:0;padding:0 var(--sp-6);font-family:var(--font-titles);font-size:var(--text-2xl);line-height:var(--text-2xl--line-height);font-weight:var(--font-weight-normal);color:var(--color-primary);text-align:center}.rating{display:flex;flex-direction:column;align-items:center;gap:var(--sp-2);padding:var(--sp-1) var(--sp-6)}.subtitle{margin:0;font-family:var(--font-body);font-size:var(--text-sm);line-height:var(--text-sm--line-height);color:var(--color-text-icons--secondary);text-align:center}.comment-card{background-color:var(--color-white);border:var(--action-border-width) solid var(--color-border);border-radius:var(--border-radius-lg);box-shadow:0 4px 4px rgba(0,0,0,.05);padding:var(--sp-5);display:flex;flex-direction:column;gap:var(--sp-5)}.comment-header{display:flex;justify-content:space-between;align-items:flex-start;gap:var(--sp-3)}.comment-label{font-family:var(--font-body);font-size:var(--text-sm);line-height:var(--text-sm);font-weight:var(--font-weight-medium);color:var(--color-neutrals-text-default)}.comment-counter{font-family:var(--font-body);font-size:var(--text-sm);line-height:var(--text-sm--line-height);font-weight:var(--font-weight-normal);color:var(--color-text-icons--secondary);white-space:nowrap}.textarea{width:100%;box-sizing:border-box;height:var(--size-44);padding:var(--sp-3) var(--sp-4);background-color:var(--color-gray-lighter);border:var(--action-border-width) solid var(--color-border);border-radius:var(--border-radius-md);font-family:var(--font-body);font-size:var(--text-sm);line-height:var(--text-sm--line-height);color:var(--color-neutrals-text-default);resize:none}.textarea::placeholder{color:var(--color-text-icons--secondary);opacity:.6}.textarea:focus{outline:0;border-color:var(--color-primary)}.actions{display:flex;gap:var(--sp-4)}.btn{flex:1;height:var(--button-height-md);padding:var(--sp-2) var(--sp-4);border-radius:var(--border-radius-md);font-family:var(--font-body);font-size:var(--text-sm);line-height:var(--text-sm--line-height);font-weight:var(--font-weight-medium);cursor:pointer;transition:opacity .15s ease-in-out}.btn:focus-visible{outline:2px solid var(--color-primary);outline-offset:2px}.btn:disabled{cursor:not-allowed}.btn-skip{background:var(--color-white);border:var(--action-border-width) solid var(--color-primary);color:var(--color-primary)}.btn-skip:hover:not(:disabled){background:var(--color-primary-background-extraWeak)}.btn-submit{background:var(--color-primary);border:var(--action-border-width) solid var(--color-primary);color:var(--color-white)}.btn-submit:hover:not(:disabled){background:var(--color-primary-dark)}.btn-submit:disabled{opacity:.5}.waiting-card{background-color:var(--color-background-primary-light);border-radius:var(--border-radius-lg);padding:var(--sp-4);display:flex;flex-direction:column;gap:var(--sp-2)}.waiting-header{display:flex;align-items:center;gap:var(--sp-2);color:var(--color-neutrals-text-default)}.waiting-title{font-family:var(--font-body);font-size:var(--text-xs);line-height:1;font-weight:var(--font-weight-medium);color:var(--color-neutrals-text-default)}.waiting-body{margin:0;font-family:var(--font-body);font-size:var(--text-xs);line-height:var(--text-xs--line-height);color:var(--color-text-icons--secondary)}.waiting-link{background:0 0;border:0;padding:0;cursor:pointer;color:#3c50ec;font:inherit;text-decoration:none}.waiting-link:hover{text-decoration:none}.waiting-link:disabled{cursor:not-allowed;opacity:.6}`}render(){return s`<div class="container"><h1 class="title">${y("¿Qué tal ha ido tu cita?")}</h1><div class="rating"><mq-rating .value="${this.rating}" .label="${y("Valoración de la consulta")}" @mq-rating-change="${t=>{this.rating=t.value}}"></mq-rating><p class="subtitle">${y("(1 es muy malo, 5 es excelente)")}</p></div><div class="comment-card"><div class="comment-header"><span class="comment-label">${y("¿Tienes comentarios sobre la consulta?")}</span> <span class="comment-counter">${this.comment.length}/${240}</span></div><textarea class="textarea" maxlength="${240}" placeholder="${y("Comparte cómo fue la atención o si tuviste algún problema con la videollamada…")}" .value="${this.comment}" @input="${t=>{this.comment=t.target.value}}"></textarea><div class="actions"><button type="button" class="btn btn-skip" ?disabled="${this._reviewMutation.isPending}" @click="${this.handleSkip}">${y("Omitir")}</button> <button type="button" class="btn btn-submit" ?disabled="${this.rating<1||this._reviewMutation.isPending}" @click="${this.handleSubmit}">${y("Enviar")}</button></div></div><div class="waiting-card"><div class="waiting-header">${L({color:"currentColor",size:18})} <span class="waiting-title">${y("¿Ocurrió algún problema?")}</span></div><p class="waiting-body">${y("Si la cita no se ha podido realizar, puedes")} <button type="button" class="waiting-link" ?disabled="${this._reconnectMutation.isPending}" @click="${()=>this._reconnectMutation.run({appointmentId:this.appointment.id})}">${y("volver a la sala de espera.")}</button></p></div></div>`}};t([r({type:Object})],ct.prototype,"appointment",void 0),t([g()],ct.prototype,"rating",void 0),t([g()],ct.prototype,"comment",void 0),ct=t([w(),e("review-view")],ct);let dt=class ErrorView extends i{static{this.styles=o`.container{display:grid;place-items:center;width:100%;max-width:447px;margin:0 auto}.card>:not(:first-child){margin-top:var(--size-8)}.title{font-family:var(--font-titles);color:var(--color-neutrals-text-default);font-size:var(--text-2xl);line-height:var(--text-2xl--line-height);font-weight:var(--font-weight-bold);margin:0;margin-bottom:var(--size-3)}.description{color:var(--color-neutrals-text-default);font-size:var(--text-sm);line-height:var(--text-sm--line-height);font-weight:400}`}render(){return s`<div class="container"><div class="card"><slot name="icon"></slot><div class="content"><h1 class="title">${this.title}</h1><p class="description">${this.message}</p></div></div></div>`}};t([r({type:String})],dt.prototype,"title",void 0),t([r({type:String})],dt.prototype,"message",void 0),dt=t([e("error-view")],dt);let ht=class UnexpectedErrorView extends i{render(){return s`<error-view .title="${y("Error desconocido")}" .message="${y("Ha ocurrido un error al cargar la página. Por favor, intenta nuevamente o contacta al soporte.")}"><div slot="icon">${B()}</div></error-view>`}};ht=t([w(),e("unexpected-error-view")],ht);let pt=class ExpiredAppointmentErrorView extends i{render(){return s`<error-view .title="${y("Consulta caducada")}" .message="${y("Parece que no te hemos encontrado a la hora de tu cita. Puedes programar otra consulta para resolver tus dudas.")}"><div slot="icon">${H()}</div></error-view>`}};pt=t([w(),e("expired-appointment-error-view")],pt);let mt=class NotFoundErrorView extends i{static{this.styles=o`div{display:flex;flex-direction:column;gap:2px}span{font-size:var(--text-xs);line-height:var(--text-xs--line-height);font-weight:400;color:var(--color-gray-medium)}`}render(){return s`<error-view .title="${y("Página no encontrada")}" .message="${y("La página que estás buscando fue removida, renombrada o puede que no exista.")}"><div slot="icon"><span>404</span> ${B()}</div></error-view>`}};function ut(t){try{return function(t,e){if("string"!=typeof t)throw new InvalidTokenError("Invalid token specified: must be a string");e||(e={});const i=!0===e.header?0:1,o=t.split(".")[i];if("string"!=typeof o)throw new InvalidTokenError(`Invalid token specified: missing part #${i+1}`);let s;try{s=Q(o)}catch(t){throw new InvalidTokenError(`Invalid token specified: invalid base64 for part #${i+1} (${t.message})`)}try{return JSON.parse(s)}catch(t){throw new InvalidTokenError(`Invalid token specified: invalid json for part #${i+1} (${t.message})`)}}(t)}catch{return null}}mt=t([w(),e("not-found-error-view")],mt);let vt=class MqVideocallProvider extends i{static{this.styles=o`*{box-sizing:border-box}:host{display:block;margin:0 auto;width:100%;height:100%}.centered{display:grid;place-items:center;height:100%;min-height:var(--mq-container-min-height)}documentation-view{display:block;padding:var(--sp-4)}`}constructor(){super(),this.opentokService=new OpenTokService,this.params={appointmentId:this.appointmentId,token:this.token,apiKey:this.apiKey},this.appointmentTask=new c(this,{task:async([t,,])=>{const[e,i,o]=await Promise.all([p.flash.getAppointment({appointmentId:t}),p.consultations.getReview(t).then(()=>!0).catch(()=>!1),p.organizations.getOrganizationSetup().catch(()=>{})]);return{appointment:e,hasReview:i,hasNps:!0===o?.appointments?.has_nps}},args:()=>[this.appointmentId,this.apiKey,this.token]})}willUpdate(t){if(this.appointmentTask.value&&!this.opentokController){const{appointment:t,hasReview:e,hasNps:i}=this.appointmentTask.value,o=function(t,e){return d(t)?t.status===h.finished||t.status===h.reporting?e?et:X:Z:tt}(t,i);this.screen=o===et&&e?X:o,this.params={appointmentId:this.appointmentId,token:this.token,apiKey:this.apiKey},this.opentokController=new OpenTokController(this,t,this.token,()=>{this.screen=J},()=>{this.screen=!i||e?X:et})}}render(){const t=s`<div class="centered">${a({color:"var(--color-primary)"})}</div>`,e=s`<mq-layout background="transparent"><not-found-error-view></not-found-error-view></mq-layout>`;return this.appointmentTask.render({pending:()=>t,error:t=>{const i=ut(this.token);return i?.exp&&i.exp<Date.now()/1e3?s`<mq-layout background="transparent"><expired-appointment-error-view></expired-appointment-error-view></mq-layout>`:v(t)&&t.response?.status&&t.response.status<500?e:s`<mq-layout background="transparent"><unexpected-error-view></unexpected-error-view></mq-layout>`},complete:({appointment:i,hasNps:o})=>{if(this.opentokController?.isLoading)return t;if(this.opentokController?.errorMessage||!this.opentokController)return e;if(this.screen===tt)return s`<mq-layout background="transparent"><not-time-yet-view .appointment="${i}"></not-time-yet-view></mq-layout>`;if(this.screen===et)return s`<mq-layout background="transparent"><review-view .appointment="${i}" @review-submitted="${()=>{this.screen=X}}" @review-skipped="${()=>{this.screen=X}}" @review-reconnect="${()=>{this.screen=Z}}"></review-view></mq-layout>`;if(this.screen===X)return s`<mq-layout background="transparent"><documentation-view .appointment="${i}" .token="${this.token}" ?can-reconnect="${!o}" @reconnect="${()=>{this.screen=Z}}"></documentation-view></mq-layout>`;if(this.screen===Z||this.screen===J){const e=this.opentokController.session;return e?s`<waiting-room-layout .appointment="${i}" ?is-waiting-room="${this.screen===Z}"><mq-videocall-content .apiKey="${this.apiKey}" .token="${this.token}" .session="${e}" .streams="${this.opentokController?.streams??[]}" ?is-waiting-room="${this.screen===Z}" ?is-reconnecting="${this.opentokController.isReconnecting}" .appointment="${i}"></mq-videocall-content></waiting-room-layout>`:t}return s`<mq-layout background="transparent"><unexpected-error-view></unexpected-error-view></mq-layout>`}})}};t([r({type:String,attribute:"appointment-id"})],vt.prototype,"appointmentId",void 0),t([r({type:String,attribute:"api-key"})],vt.prototype,"apiKey",void 0),t([r({type:String})],vt.prototype,"token",void 0),t([g()],vt.prototype,"screen",void 0),t([l({context:G})],vt.prototype,"opentokService",void 0),t([l({context:Y})],vt.prototype,"params",void 0),vt=t([e("mq-videocall-provider")],vt);let gt=class PermissionsRequiredErrorView extends i{static{this.styles=o`.img-container{display:flex;justify-content:center}img{width:100%;height:auto;max-width:229px}`}render(){return s`<error-view .title="${y("Acepta los permisos de cámara y micrófono")}" .message="${y("Parece que has denegado los permisos necesarios para entrar a la videollamada. Edita los permisos en tu navegador para entrar. Una vez concedidos, debes refrescar esta pantalla.")}"><div class="img-container" slot="icon"><img src="${`${f.ASSETS_BASE_URL}/wc-videocall/Miccam_asset.png`}" alt="Miccam_asset" width="229" height="166.44"></div></error-view>`}};gt=t([w(),e("permissions-required-error-view")],gt);let bt=class MqVideocall extends i{constructor(){super(...arguments),this._permissionController=new PermissionController(this)}static{this.styles=o`:host{display:block;width:100%;height:100%}.loading-spinner-container{height:100%;display:flex;flex-direction:column;justify-content:center;align-items:center}.permissions-required-error-view-container{height:100%;padding-left:var(--size-4);padding-right:var(--size-4);display:grid;place-items:center}`}render(){return"prompt"===this._permissionController.state?s`<div class="loading-spinner-container">${a({color:"var(--color-primary)"})}</div>`:"denied"===this._permissionController.state?s`<div class="permissions-required-error-view-container"><permissions-required-error-view></permissions-required-error-view></div>`:s`<mq-videocall-provider .appointmentId="${this.appointmentId}" .token="${this.token}" .apiKey="${this.apiKey}"></mq-videocall-provider>`}};t([r({type:String,attribute:"appointment-id"})],bt.prototype,"appointmentId",void 0),t([r({type:String,attribute:"api-key"})],bt.prototype,"apiKey",void 0),t([r({type:String})],bt.prototype,"token",void 0),bt=t([e("mq-videocall")],bt);export{DownloadFileEvent,bt as MqVideocall,ReviewSkippedEvent,ReviewSubmittedEvent,ToggleAudioEvent,ToggleChatEvent,ToggleVideoEvent,ViewDocumentationEvent};
@@ -1,15 +1,32 @@
1
- import * as _lit_react from '@lit/react';
2
- import { EventName } from '@lit/react';
1
+ import * as React from 'react';
3
2
  import { MqApplePayCheckout as MqApplePayCheckout$1, ApplePayCheckoutSuccessEvent, ApplePayCheckoutDeniedEvent, ApplePayCheckoutErrorEvent } from '../mq-apple-pay-checkout.js';
4
3
  import 'lit';
5
4
  import '../env.js';
6
5
  import '../i18n.js';
7
6
  import 'zod';
8
7
 
9
- declare const MqApplePayCheckout: _lit_react.ReactWebComponent<MqApplePayCheckout$1, {
10
- onPaymentSuccess: EventName<ApplePayCheckoutSuccessEvent>;
11
- onPaymentDenied: EventName<ApplePayCheckoutDeniedEvent>;
12
- onPaymentError: EventName<ApplePayCheckoutErrorEvent>;
13
- }>;
8
+ interface MqApplePayCheckoutProps {
9
+ apiKey: MqApplePayCheckout$1["apiKey"];
10
+ token: MqApplePayCheckout$1["token"];
11
+ locale: MqApplePayCheckout$1["locale"];
12
+ merchantId: MqApplePayCheckout$1["merchantId"];
13
+ sessionId: MqApplePayCheckout$1["sessionId"];
14
+ amount: MqApplePayCheckout$1["amount"];
15
+ currency: MqApplePayCheckout$1["currency"];
16
+ country: MqApplePayCheckout$1["country"];
17
+ label: MqApplePayCheckout$1["label"];
18
+ env?: MqApplePayCheckout$1["env"];
19
+ /** Payment authorized. */
20
+ onPaymentSuccess?: (event: ApplePayCheckoutSuccessEvent) => void;
21
+ /** Payment rejected by the backend. */
22
+ onPaymentDenied?: (event: ApplePayCheckoutDeniedEvent) => void;
23
+ /** Auth, unsupported device, merchant validation or authorization failure. */
24
+ onPaymentError?: (event: ApplePayCheckoutErrorEvent) => void;
25
+ className?: string;
26
+ style?: React.CSSProperties;
27
+ id?: string;
28
+ }
29
+ declare const MqApplePayCheckout: React.ForwardRefExoticComponent<MqApplePayCheckoutProps & React.RefAttributes<MqApplePayCheckout$1>>;
14
30
 
15
31
  export { MqApplePayCheckout };
32
+ export type { MqApplePayCheckoutProps };
@@ -1,2 +1,2 @@
1
1
  "use client";
2
- import{o as t}from"../chunks/create-component-BB-6Gu6l.js";import*as e from"react";import{MqApplePayCheckout as s}from"../mq-apple-pay-checkout.js";import"../chunks/custom-element-DA9Fxvxd.js";import"../chunks/runtime-Bg1WXVCx.js";import"../chunks/localized-decorator-BlOuLhym.js";import"../chunks/login-token-task-BI-L2zSV.js";import"../chunks/task-Bj8p7kJX.js";import"../chunks/lit-element-DiWJYFwC.js";import"../chunks/chunk-4FFT6DC2-CVWibomC.js";import"../chunks/property-scuRaFcM.js";import"../chunks/state-LQivXIgA.js";import"../env.js";import"../i18n.js";import"../chunks/external-CJj32K_p.js";import"../chunks/api-chat-client-CqMn2JEn.js";import"../chunks/parseISO-Dj3qSTG8.js";import"../chunks/format-CRFiCNHw.js";import"../chunks/isBefore-CPpTogxo.js";import"../chunks/apple-pay-outcomes-CjCnBYOD.js";const o=t({react:e,tagName:"mq-apple-pay-checkout",elementClass:s,events:{onPaymentSuccess:"payment-success",onPaymentDenied:"payment-denied",onPaymentError:"payment-error"}});export{o as MqApplePayCheckout};
2
+ import{o as t}from"../chunks/create-component-BB-6Gu6l.js";import*as e from"react";import{MqApplePayCheckout as s}from"../mq-apple-pay-checkout.js";import"../chunks/custom-element-DA9Fxvxd.js";import"../chunks/runtime-Bg1WXVCx.js";import"../chunks/localized-decorator-BlOuLhym.js";import"../chunks/login-token-task-BI-L2zSV.js";import"../chunks/task-Bj8p7kJX.js";import"../chunks/lit-element-DiWJYFwC.js";import"../chunks/chunk-4FFT6DC2-CVWibomC.js";import"../chunks/property-scuRaFcM.js";import"../chunks/state-LQivXIgA.js";import"../env.js";import"../i18n.js";import"../chunks/external-CJj32K_p.js";import"../chunks/api-chat-client-1Vz6ZOwp.js";import"../chunks/parseISO-Dj3qSTG8.js";import"../chunks/format-CRFiCNHw.js";import"../chunks/isBefore-CPpTogxo.js";import"../chunks/apple-pay-outcomes-0ozxSHyb.js";const o=t({react:e,tagName:"mq-apple-pay-checkout",elementClass:s,events:{onPaymentSuccess:"payment-success",onPaymentDenied:"payment-denied",onPaymentError:"payment-error"}});export{o as MqApplePayCheckout};
@@ -1,8 +1,7 @@
1
- import * as _lit_react from '@lit/react';
2
- import { EventName } from '@lit/react';
1
+ import * as React from 'react';
3
2
  import { MqAppointmentCheckout as MqAppointmentCheckout$1, AppointmentPaidEvent } from '../mq-appointment-checkout.js';
4
3
  import 'lit-html';
5
- import '../chunks/schemas.d-BEA8Pl6w.js';
4
+ import '../chunks/schemas.d-5CaMrfOq.js';
6
5
  import 'zod';
7
6
  import 'lit';
8
7
  import '../env.js';
@@ -10,8 +9,24 @@ import '../i18n.js';
10
9
  import '../mq-checkout.js';
11
10
  import '../ui/mq-skeleton.js';
12
11
 
13
- declare const MqAppointmentCheckout: _lit_react.ReactWebComponent<MqAppointmentCheckout$1, {
14
- onPaymentSuccess: EventName<AppointmentPaidEvent>;
15
- }>;
12
+ interface MqAppointmentCheckoutProps {
13
+ apiKey: MqAppointmentCheckout$1["apiKey"];
14
+ token: MqAppointmentCheckout$1["token"];
15
+ locale: MqAppointmentCheckout$1["locale"];
16
+ slotId: MqAppointmentCheckout$1["slotId"];
17
+ serviceId: MqAppointmentCheckout$1["serviceId"];
18
+ specialtyId: MqAppointmentCheckout$1["specialtyId"];
19
+ env?: MqAppointmentCheckout$1["env"];
20
+ consultationReason?: MqAppointmentCheckout$1["consultationReason"];
21
+ discountCode?: MqAppointmentCheckout$1["discountCode"];
22
+ preconsultationDocuments?: MqAppointmentCheckout$1["preconsultationDocuments"];
23
+ /** Payment confirmed. */
24
+ onPaymentSuccess?: (event: AppointmentPaidEvent) => void;
25
+ className?: string;
26
+ style?: React.CSSProperties;
27
+ id?: string;
28
+ }
29
+ declare const MqAppointmentCheckout: React.ForwardRefExoticComponent<MqAppointmentCheckoutProps & React.RefAttributes<MqAppointmentCheckout$1>>;
16
30
 
17
31
  export { MqAppointmentCheckout };
32
+ export type { MqAppointmentCheckoutProps };
@@ -1,2 +1,2 @@
1
1
  "use client";
2
- import{o as t}from"../chunks/create-component-BB-6Gu6l.js";import*as s from"react";import{MqAppointmentCheckout as e}from"../mq-appointment-checkout.js";import"../chunks/custom-element-DA9Fxvxd.js";import"../chunks/lit-element-DiWJYFwC.js";import"../chunks/property-scuRaFcM.js";import"../chunks/if-defined-BYeVdwgd.js";import"../chunks/api-chat-client-CqMn2JEn.js";import"../chunks/external-CJj32K_p.js";import"../chunks/parseISO-Dj3qSTG8.js";import"../chunks/format-CRFiCNHw.js";import"../chunks/isBefore-CPpTogxo.js";import"../env.js";import"../mq-checkout.js";import"../chunks/runtime-Bg1WXVCx.js";import"../chunks/localized-decorator-BlOuLhym.js";import"../chunks/task-Bj8p7kJX.js";import"../chunks/login-token-task-BI-L2zSV.js";import"../chunks/chunk-4FFT6DC2-CVWibomC.js";import"../chunks/state-LQivXIgA.js";import"../theme.js";import"../i18n.js";import"../ui/mq-skeleton.js";import"../chunks/style-map-CIdqdn7C.js";import"../chunks/directive-2EDmOukv.js";const o=t({react:s,tagName:"mq-appointment-checkout",elementClass:e,events:{onPaymentSuccess:"payment-success"}});export{o as MqAppointmentCheckout};
2
+ import{o as t}from"../chunks/create-component-BB-6Gu6l.js";import*as s from"react";import{MqAppointmentCheckout as e}from"../mq-appointment-checkout.js";import"../chunks/custom-element-DA9Fxvxd.js";import"../chunks/lit-element-DiWJYFwC.js";import"../chunks/property-scuRaFcM.js";import"../chunks/if-defined-BYeVdwgd.js";import"../chunks/api-chat-client-1Vz6ZOwp.js";import"../chunks/external-CJj32K_p.js";import"../chunks/parseISO-Dj3qSTG8.js";import"../chunks/format-CRFiCNHw.js";import"../chunks/isBefore-CPpTogxo.js";import"../env.js";import"../mq-checkout.js";import"../chunks/runtime-Bg1WXVCx.js";import"../chunks/localized-decorator-BlOuLhym.js";import"../chunks/task-Bj8p7kJX.js";import"../chunks/login-token-task-BI-L2zSV.js";import"../chunks/chunk-4FFT6DC2-CVWibomC.js";import"../chunks/state-LQivXIgA.js";import"../theme.js";import"../i18n.js";import"../ui/mq-skeleton.js";import"../chunks/style-map-CIdqdn7C.js";import"../chunks/directive-2EDmOukv.js";const o=t({react:s,tagName:"mq-appointment-checkout",elementClass:e,events:{onPaymentSuccess:"payment-success"}});export{o as MqAppointmentCheckout};
@@ -1,5 +1,4 @@
1
- import * as _lit_react from '@lit/react';
2
- import { EventName } from '@lit/react';
1
+ import * as React from 'react';
3
2
  import { MqAppointmentDocumentation as MqAppointmentDocumentation$1 } from '../mq-appointment-documentation.js';
4
3
  import { DownloadFileEvent, MqViewAppointmentsEvent } from '../events.js';
5
4
  import 'lit-html';
@@ -20,9 +19,21 @@ import '../ui/mq-text-button.js';
20
19
  import '../chunks/index-DNUbmrQl.js';
21
20
  import '../chunks/mq-layout-D8Mak16a.js';
22
21
 
23
- declare const MqAppointmentDocumentation: _lit_react.ReactWebComponent<MqAppointmentDocumentation$1, {
24
- onDownloadFile: EventName<DownloadFileEvent>;
25
- onViewAppointments: EventName<MqViewAppointmentsEvent>;
26
- }>;
22
+ interface MqAppointmentDocumentationProps {
23
+ appointmentId: MqAppointmentDocumentation$1["appointmentId"];
24
+ token: MqAppointmentDocumentation$1["token"];
25
+ apiKey?: MqAppointmentDocumentation$1["apiKey"];
26
+ locale?: MqAppointmentDocumentation$1["locale"];
27
+ env?: MqAppointmentDocumentation$1["env"];
28
+ /** The user asked to download a shared file. */
29
+ onDownloadFile?: (event: DownloadFileEvent) => void;
30
+ /** The user asked to open the appointments list. */
31
+ onViewAppointments?: (event: MqViewAppointmentsEvent) => void;
32
+ className?: string;
33
+ style?: React.CSSProperties;
34
+ id?: string;
35
+ }
36
+ declare const MqAppointmentDocumentation: React.ForwardRefExoticComponent<MqAppointmentDocumentationProps & React.RefAttributes<MqAppointmentDocumentation$1>>;
27
37
 
28
38
  export { MqAppointmentDocumentation };
39
+ export type { MqAppointmentDocumentationProps };
@@ -1,2 +1,2 @@
1
1
  "use client";
2
- import{o as t}from"../chunks/create-component-BB-6Gu6l.js";import*as o from"react";import{MqAppointmentDocumentation as i}from"../mq-appointment-documentation.js";import"../i18n.js";import"../chunks/runtime-Bg1WXVCx.js";import"../chunks/chunk-4FFT6DC2-CVWibomC.js";import"../chunks/external-CJj32K_p.js";import"../chunks/custom-element-DA9Fxvxd.js";import"../chunks/query-controller-BlO1Ax65.js";import"../chunks/chunk-RCFIJTXZ-C6Ir0-sM.js";import"../chunks/create-context-DqP79qjF.js";import"../chunks/context-consumer-ESdICVAb.js";import"../chunks/context-request-event-Dfydf1ub.js";import"../chunks/query-Cjvi4_dT.js";import"../chunks/get-appointment-query-Ck68BEMg.js";import"../chunks/lit-element-DiWJYFwC.js";import"../chunks/property-scuRaFcM.js";import"../env.js";import"../chunks/api-chat-client-CqMn2JEn.js";import"../chunks/parseISO-Dj3qSTG8.js";import"../chunks/format-CRFiCNHw.js";import"../chunks/isBefore-CPpTogxo.js";import"../chunks/documentation-view-fFbvjJqx.js";import"../chunks/localized-decorator-BlOuLhym.js";import"../chunks/task-Bj8p7kJX.js";import"../chunks/telemetry-client-Ca71sobH.js";import"../ui/icons/calendar-icon.js";import"../ui/icons/types.js";import"../ui/icons/clock-icon.js";import"../chunks/state-LQivXIgA.js";import"../ui/icons/info-circle-outine-icon.js";import"../ui/mq-button.js";import"../chunks/class-map-Co76I6aw.js";import"../chunks/directive-2EDmOukv.js";import"../chunks/chunk-S5RWG6G2-DPesx3Od.js";import"../ui/icons/message-bubble-icon.js";import"../mq-chat-room.js";import"../chunks/provide-D2fnEhT2.js";import"../chunks/context-provider--AKuwfs9.js";import"../chunks/consume-CovVqBjI.js";import"../theme.js";import"../ui/icons/x-icon.js";import"../ui/mq-avatar.js";import"../ui/mq-skeleton.js";import"../chunks/style-map-CIdqdn7C.js";import"../chunks/chunk-YMQSBQHL-De_r7BNk.js";import"../chunks/if-defined-BYeVdwgd.js";import"../ui/icons/chevron-left-icon.js";import"../chunks/query-CeeutdfT.js";import"../events.js";import"../chunks/chunk-GZF3YFSX-DM-GTqxg.js";import"../ui/icons/check-double-icon.js";import"../ui/icons/check-icon.js";import"../chunks/chunk-YTQUGGS3-DmCGIoFy.js";import"../chunks/mutation-controller-CR2qcqhH.js";import"../ui/mq-floating-bubble.js";import"../ui/mq-card.js";import"../ui/mq-unread-badge.js";import"../ui/back-link.js";import"../ui/mq-text-button.js";import"../chunks/index-Xcn-xs13.js";import"../ui/icons/download-icon.js";import"../chunks/get-organization-setup-query-BMbuRi6v.js";import"../chunks/i18n-formats-DYS91YEa.js";import"../chunks/mq-layout-CGcdxGMQ.js";const s=t({react:o,tagName:"mq-appointment-documentation",elementClass:i,events:{onDownloadFile:"mq-download-file",onViewAppointments:"mq-view-appointments"}});export{s as MqAppointmentDocumentation};
2
+ import{o as t}from"../chunks/create-component-BB-6Gu6l.js";import*as o from"react";import{MqAppointmentDocumentation as i}from"../mq-appointment-documentation.js";import"../i18n.js";import"../chunks/runtime-Bg1WXVCx.js";import"../chunks/chunk-4FFT6DC2-CVWibomC.js";import"../chunks/external-CJj32K_p.js";import"../chunks/custom-element-DA9Fxvxd.js";import"../chunks/query-controller-BlO1Ax65.js";import"../chunks/chunk-RCFIJTXZ-C6Ir0-sM.js";import"../chunks/create-context-DqP79qjF.js";import"../chunks/context-consumer-ESdICVAb.js";import"../chunks/context-request-event-Dfydf1ub.js";import"../chunks/query-Cjvi4_dT.js";import"../chunks/get-appointment-query-Ck68BEMg.js";import"../chunks/lit-element-DiWJYFwC.js";import"../chunks/property-scuRaFcM.js";import"../env.js";import"../chunks/api-chat-client-1Vz6ZOwp.js";import"../chunks/parseISO-Dj3qSTG8.js";import"../chunks/format-CRFiCNHw.js";import"../chunks/isBefore-CPpTogxo.js";import"../chunks/documentation-view-geQU8ttU.js";import"../chunks/localized-decorator-BlOuLhym.js";import"../chunks/task-Bj8p7kJX.js";import"../chunks/telemetry-client-BLJVs9me.js";import"../ui/icons/calendar-icon.js";import"../ui/icons/types.js";import"../ui/icons/clock-icon.js";import"../chunks/state-LQivXIgA.js";import"../ui/icons/info-circle-outine-icon.js";import"../ui/mq-button.js";import"../chunks/class-map-Co76I6aw.js";import"../chunks/directive-2EDmOukv.js";import"../chunks/chunk-S5RWG6G2-DPesx3Od.js";import"../ui/icons/message-bubble-icon.js";import"../mq-chat-room.js";import"../chunks/provide-D2fnEhT2.js";import"../chunks/context-provider--AKuwfs9.js";import"../chunks/consume-CovVqBjI.js";import"../theme.js";import"../ui/icons/x-icon.js";import"../ui/mq-avatar.js";import"../ui/mq-skeleton.js";import"../chunks/style-map-CIdqdn7C.js";import"../chunks/chunk-YMQSBQHL-De_r7BNk.js";import"../chunks/if-defined-BYeVdwgd.js";import"../ui/icons/chevron-left-icon.js";import"../chunks/query-CeeutdfT.js";import"../events.js";import"../chunks/chunk-GZF3YFSX-DM-GTqxg.js";import"../ui/icons/check-double-icon.js";import"../ui/icons/check-icon.js";import"../chunks/chunk-YTQUGGS3-DmCGIoFy.js";import"../chunks/mutation-controller-CR2qcqhH.js";import"../ui/mq-floating-bubble.js";import"../ui/mq-card.js";import"../ui/mq-unread-badge.js";import"../ui/back-link.js";import"../ui/mq-text-button.js";import"../chunks/index-Bx8TWBsk.js";import"../ui/icons/download-icon.js";import"../chunks/get-organization-setup-query-BMbuRi6v.js";import"../chunks/i18n-formats-DYS91YEa.js";import"../chunks/mq-layout-CGcdxGMQ.js";const s=t({react:o,tagName:"mq-appointment-documentation",elementClass:i,events:{onDownloadFile:"mq-download-file",onViewAppointments:"mq-view-appointments"}});export{s as MqAppointmentDocumentation};
@@ -1,5 +1,4 @@
1
- import * as _lit_react from '@lit/react';
2
- import { EventName } from '@lit/react';
1
+ import * as React from 'react';
3
2
  import { M as MqChatRoom$1 } from '../chunks/mq-chat-room-DuG4RuIp.js';
4
3
  import { MqChatRoomCloseEvent, MqChatRoomProfileEvent } from '../mq-chat-room.js';
5
4
  import { DownloadFileEvent } from '../events.js';
@@ -12,10 +11,34 @@ import 'zod';
12
11
  import '../chunks/appointment.model.d-Dy50gMPg.js';
13
12
  import '@tanstack/query-core';
14
13
 
15
- declare const MqChatRoom: _lit_react.ReactWebComponent<MqChatRoom$1, {
16
- onClose: EventName<MqChatRoomCloseEvent>;
17
- onProfile: EventName<MqChatRoomProfileEvent>;
18
- onDownloadFile: EventName<DownloadFileEvent>;
19
- }>;
14
+ interface MqChatRoomProps {
15
+ /** Already-exchanged access token. Required. */
16
+ token: MqChatRoom$1["token"];
17
+ /** Professional hash for the room. Required. */
18
+ professionalHash: MqChatRoom$1["professionalHash"];
19
+ /** Chat room id. Required. */
20
+ roomId: MqChatRoom$1["roomId"];
21
+ /** Mediquo API key. */
22
+ apiKey?: MqChatRoom$1["apiKey"];
23
+ /** Consultation id backing the room. */
24
+ consultationId?: MqChatRoom$1["consultationId"];
25
+ /** Consultation type backing the room. */
26
+ consultationType?: MqChatRoom$1["consultationType"];
27
+ /** Render the room read-only (no footer/composer). Defaults to `false`. */
28
+ readonly?: MqChatRoom$1["readonly"];
29
+ /** Hide the close button in the header. Defaults to `false`. */
30
+ hideCloseButton?: MqChatRoom$1["hideCloseButton"];
31
+ /** The user closed the chat room. */
32
+ onClose?: (event: MqChatRoomCloseEvent) => void;
33
+ /** The user opened the professional profile. */
34
+ onProfile?: (event: MqChatRoomProfileEvent) => void;
35
+ /** The user asked to download a file. */
36
+ onDownloadFile?: (event: DownloadFileEvent) => void;
37
+ className?: string;
38
+ style?: React.CSSProperties;
39
+ id?: string;
40
+ }
41
+ declare const MqChatRoom: React.ForwardRefExoticComponent<MqChatRoomProps & React.RefAttributes<MqChatRoom$1>>;
20
42
 
21
43
  export { MqChatRoom };
44
+ export type { MqChatRoomProps };
@@ -1,2 +1,2 @@
1
1
  "use client";
2
- import{o}from"../chunks/create-component-BB-6Gu6l.js";import*as s from"react";import{MqChatRoom as t}from"../mq-chat-room.js";import"../chunks/custom-element-DA9Fxvxd.js";import"../chunks/provide-D2fnEhT2.js";import"../chunks/context-provider--AKuwfs9.js";import"../chunks/context-request-event-Dfydf1ub.js";import"../chunks/consume-CovVqBjI.js";import"../chunks/context-consumer-ESdICVAb.js";import"../chunks/localized-decorator-BlOuLhym.js";import"../chunks/runtime-Bg1WXVCx.js";import"../chunks/lit-element-DiWJYFwC.js";import"../chunks/property-scuRaFcM.js";import"../chunks/state-LQivXIgA.js";import"../chunks/create-context-DqP79qjF.js";import"../theme.js";import"../chunks/api-chat-client-CqMn2JEn.js";import"../chunks/external-CJj32K_p.js";import"../chunks/parseISO-Dj3qSTG8.js";import"../chunks/format-CRFiCNHw.js";import"../chunks/isBefore-CPpTogxo.js";import"../env.js";import"../ui/icons/x-icon.js";import"../ui/icons/types.js";import"../ui/mq-avatar.js";import"../chunks/class-map-Co76I6aw.js";import"../chunks/directive-2EDmOukv.js";import"../ui/mq-button.js";import"../ui/mq-skeleton.js";import"../chunks/style-map-CIdqdn7C.js";import"../chunks/query-controller-BlO1Ax65.js";import"../chunks/chunk-RCFIJTXZ-C6Ir0-sM.js";import"../chunks/query-Cjvi4_dT.js";import"../chunks/chunk-YMQSBQHL-De_r7BNk.js";import"../chunks/if-defined-BYeVdwgd.js";import"../ui/icons/chevron-left-icon.js";import"../chunks/query-CeeutdfT.js";import"../chunks/chunk-4FFT6DC2-CVWibomC.js";import"../events.js";import"../chunks/chunk-GZF3YFSX-DM-GTqxg.js";import"../ui/icons/check-double-icon.js";import"../ui/icons/check-icon.js";import"../i18n.js";import"../chunks/chunk-YTQUGGS3-DmCGIoFy.js";import"../chunks/mutation-controller-CR2qcqhH.js";const r=o({react:s,tagName:"mq-chat-room",elementClass:t,events:{onClose:"mq-chat-room-close",onProfile:"mq-chat-room-profile",onDownloadFile:"mq-download-file"}});export{r as MqChatRoom};
2
+ import{o}from"../chunks/create-component-BB-6Gu6l.js";import*as s from"react";import{MqChatRoom as t}from"../mq-chat-room.js";import"../chunks/custom-element-DA9Fxvxd.js";import"../chunks/provide-D2fnEhT2.js";import"../chunks/context-provider--AKuwfs9.js";import"../chunks/context-request-event-Dfydf1ub.js";import"../chunks/consume-CovVqBjI.js";import"../chunks/context-consumer-ESdICVAb.js";import"../chunks/localized-decorator-BlOuLhym.js";import"../chunks/runtime-Bg1WXVCx.js";import"../chunks/lit-element-DiWJYFwC.js";import"../chunks/property-scuRaFcM.js";import"../chunks/state-LQivXIgA.js";import"../chunks/create-context-DqP79qjF.js";import"../theme.js";import"../chunks/api-chat-client-1Vz6ZOwp.js";import"../chunks/external-CJj32K_p.js";import"../chunks/parseISO-Dj3qSTG8.js";import"../chunks/format-CRFiCNHw.js";import"../chunks/isBefore-CPpTogxo.js";import"../env.js";import"../ui/icons/x-icon.js";import"../ui/icons/types.js";import"../ui/mq-avatar.js";import"../chunks/class-map-Co76I6aw.js";import"../chunks/directive-2EDmOukv.js";import"../ui/mq-button.js";import"../ui/mq-skeleton.js";import"../chunks/style-map-CIdqdn7C.js";import"../chunks/query-controller-BlO1Ax65.js";import"../chunks/chunk-RCFIJTXZ-C6Ir0-sM.js";import"../chunks/query-Cjvi4_dT.js";import"../chunks/chunk-YMQSBQHL-De_r7BNk.js";import"../chunks/if-defined-BYeVdwgd.js";import"../ui/icons/chevron-left-icon.js";import"../chunks/query-CeeutdfT.js";import"../chunks/chunk-4FFT6DC2-CVWibomC.js";import"../events.js";import"../chunks/chunk-GZF3YFSX-DM-GTqxg.js";import"../ui/icons/check-double-icon.js";import"../ui/icons/check-icon.js";import"../i18n.js";import"../chunks/chunk-YTQUGGS3-DmCGIoFy.js";import"../chunks/mutation-controller-CR2qcqhH.js";const r=o({react:s,tagName:"mq-chat-room",elementClass:t,events:{onClose:"mq-chat-room-close",onProfile:"mq-chat-room-profile",onDownloadFile:"mq-download-file"}});export{r as MqChatRoom};
@@ -1,5 +1,4 @@
1
- import * as _lit_react from '@lit/react';
2
- import { EventName } from '@lit/react';
1
+ import * as React from 'react';
3
2
  import { MqCheckout as MqCheckout$1, CheckoutSuccessEvent, CheckoutDeniedEvent, CheckoutErrorEvent, CheckoutRetryEvent } from '../mq-checkout.js';
4
3
  import 'lit-html';
5
4
  import 'lit';
@@ -8,11 +7,26 @@ import '../i18n.js';
8
7
  import 'zod';
9
8
  import '../ui/mq-skeleton.js';
10
9
 
11
- declare const MqCheckout: _lit_react.ReactWebComponent<MqCheckout$1, {
12
- onPaymentSuccess: EventName<CheckoutSuccessEvent>;
13
- onPaymentDenied: EventName<CheckoutDeniedEvent>;
14
- onPaymentError: EventName<CheckoutErrorEvent>;
15
- onPaymentRetry: EventName<CheckoutRetryEvent>;
16
- }>;
10
+ interface MqCheckoutProps {
11
+ apiKey: MqCheckout$1["apiKey"];
12
+ token: MqCheckout$1["token"];
13
+ locale: MqCheckout$1["locale"];
14
+ env?: MqCheckout$1["env"];
15
+ /** Async factory returning the payment session. */
16
+ provideSession?: MqCheckout$1["provideSession"];
17
+ /** Payment confirmed. */
18
+ onPaymentSuccess?: (event: CheckoutSuccessEvent) => void;
19
+ /** Payment rejected. */
20
+ onPaymentDenied?: (event: CheckoutDeniedEvent) => void;
21
+ /** Auth, session creation or polling timeout failure. */
22
+ onPaymentError?: (event: CheckoutErrorEvent) => void;
23
+ /** The portal requested a retry (notification only). */
24
+ onPaymentRetry?: (event: CheckoutRetryEvent) => void;
25
+ className?: string;
26
+ style?: React.CSSProperties;
27
+ id?: string;
28
+ }
29
+ declare const MqCheckout: React.ForwardRefExoticComponent<MqCheckoutProps & React.RefAttributes<MqCheckout$1>>;
17
30
 
18
31
  export { MqCheckout };
32
+ export type { MqCheckoutProps };
@@ -1,2 +1,2 @@
1
1
  "use client";
2
- import{o as t}from"../chunks/create-component-BB-6Gu6l.js";import*as e from"react";import{MqCheckout as s}from"../mq-checkout.js";import"../chunks/custom-element-DA9Fxvxd.js";import"../chunks/runtime-Bg1WXVCx.js";import"../chunks/localized-decorator-BlOuLhym.js";import"../chunks/task-Bj8p7kJX.js";import"../chunks/lit-element-DiWJYFwC.js";import"../chunks/api-chat-client-CqMn2JEn.js";import"../chunks/external-CJj32K_p.js";import"../chunks/parseISO-Dj3qSTG8.js";import"../chunks/format-CRFiCNHw.js";import"../chunks/isBefore-CPpTogxo.js";import"../env.js";import"../chunks/login-token-task-BI-L2zSV.js";import"../chunks/chunk-4FFT6DC2-CVWibomC.js";import"../chunks/property-scuRaFcM.js";import"../chunks/state-LQivXIgA.js";import"../theme.js";import"../i18n.js";import"../ui/mq-skeleton.js";import"../chunks/style-map-CIdqdn7C.js";import"../chunks/directive-2EDmOukv.js";const o=t({react:e,tagName:"mq-checkout",elementClass:s,events:{onPaymentSuccess:"payment-success",onPaymentDenied:"payment-denied",onPaymentError:"payment-error",onPaymentRetry:"payment-retry"}});export{o as MqCheckout};
2
+ import{o as t}from"../chunks/create-component-BB-6Gu6l.js";import*as e from"react";import{MqCheckout as s}from"../mq-checkout.js";import"../chunks/custom-element-DA9Fxvxd.js";import"../chunks/runtime-Bg1WXVCx.js";import"../chunks/localized-decorator-BlOuLhym.js";import"../chunks/task-Bj8p7kJX.js";import"../chunks/lit-element-DiWJYFwC.js";import"../chunks/api-chat-client-1Vz6ZOwp.js";import"../chunks/external-CJj32K_p.js";import"../chunks/parseISO-Dj3qSTG8.js";import"../chunks/format-CRFiCNHw.js";import"../chunks/isBefore-CPpTogxo.js";import"../env.js";import"../chunks/login-token-task-BI-L2zSV.js";import"../chunks/chunk-4FFT6DC2-CVWibomC.js";import"../chunks/property-scuRaFcM.js";import"../chunks/state-LQivXIgA.js";import"../theme.js";import"../i18n.js";import"../ui/mq-skeleton.js";import"../chunks/style-map-CIdqdn7C.js";import"../chunks/directive-2EDmOukv.js";const o=t({react:e,tagName:"mq-checkout",elementClass:s,events:{onPaymentSuccess:"payment-success",onPaymentDenied:"payment-denied",onPaymentError:"payment-error",onPaymentRetry:"payment-retry"}});export{o as MqCheckout};