@mediquo/elements 0.12.0 → 0.12.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/chunks/api-chat-client-s45J7LKB.js +1 -0
- package/dist/chunks/{apple-pay-outcomes--uAwZeLE.js → apple-pay-outcomes-SIvDJWN_.js} +1 -1
- package/dist/chunks/{chunk-Y4EKUX25-Bdei04iw.js → chunk-Y4EKUX25-Bix9r5ry.js} +1 -1
- package/dist/chunks/{chunk-YTQUGGS3-sBILRfPo.js → chunk-YTQUGGS3-DH0H7ld7.js} +1 -1
- package/dist/chunks/{documentation-view-BcA4Vbhp.js → documentation-view-CzCDvut1.js} +1 -1
- package/dist/chunks/{external-cM_kgYO_.js → external-JLtsAfi6.js} +1 -1
- package/dist/chunks/{index-CGWd3FWG.js → index-B6OMnYjW.js} +1 -1
- package/dist/chunks/{index-Dw4Aeoyg.js → index-DABvAuIz.js} +1 -1
- package/dist/chunks/{mq-chat-room-BkXGHzrd.js → mq-chat-room-C2EALCSm.js} +1 -1
- package/dist/chunks/{mq-next-appointments-BngkXupq.js → mq-next-appointments-DElOAaYx.js} +1 -1
- package/dist/chunks/{mq-recent-documents-Ee-JRTdl.js → mq-recent-documents-DS5zUnH8.js} +1 -1
- package/dist/chunks/{mq-schedule-DAKftQ3D.js → mq-schedule-CIb5mOTX.js} +1 -1
- package/dist/chunks/{mq-support-chat-Bzj5LYHb.js → mq-support-chat-DYmvYk7b.js} +1 -1
- package/dist/chunks/mq-videocall-vZXvA3t_.js +1 -0
- package/dist/chunks/{next-appointment-card-BE0KW2vv.js → next-appointment-card-BOzfcwjD.js} +1 -1
- package/dist/env.js +1 -1
- package/dist/i18n.js +1 -1
- package/dist/mq-api-client-provider.js +1 -1
- package/dist/mq-apple-pay-checkout.js +1 -1
- package/dist/mq-appointment-checkout.js +1 -1
- package/dist/mq-appointment-documentation.js +1 -1
- package/dist/mq-chat-room.js +1 -1
- package/dist/mq-checkout.js +1 -1
- package/dist/mq-dashboard.js +1 -1
- package/dist/mq-documents.js +1 -1
- package/dist/mq-google-pay-checkout.js +1 -1
- package/dist/mq-immediate-videocall-checkout.js +1 -1
- package/dist/mq-my-appointments.js +1 -1
- package/dist/mq-next-appointments.js +1 -1
- package/dist/mq-payment-poller.js +1 -1
- package/dist/mq-professional-presence-sync.js +1 -1
- package/dist/mq-recent-documents.js +1 -1
- package/dist/mq-schedule-success.js +1 -1
- package/dist/mq-schedule.js +1 -1
- package/dist/mq-socket-provider.js +1 -1
- package/dist/mq-support-chat.js +1 -1
- package/dist/mq-terms-and-conditions.js +1 -1
- package/dist/mq-unread-count-sync.js +1 -1
- package/dist/mq-videocall.js +1 -1
- package/dist/react/mq-api-client-provider.js +1 -1
- package/dist/react/mq-apple-pay-checkout.js +1 -1
- package/dist/react/mq-appointment-checkout.js +1 -1
- package/dist/react/mq-appointment-documentation.js +1 -1
- package/dist/react/mq-chat-room.js +1 -1
- package/dist/react/mq-checkout.js +1 -1
- package/dist/react/mq-dashboard.js +1 -1
- package/dist/react/mq-documents-page.js +1 -1
- package/dist/react/mq-documents.js +1 -1
- package/dist/react/mq-google-pay-checkout.js +1 -1
- package/dist/react/mq-immediate-videocall-checkout.js +1 -1
- package/dist/react/mq-my-appointments.js +1 -1
- package/dist/react/mq-next-appointments.js +1 -1
- package/dist/react/mq-payment-poller.js +1 -1
- package/dist/react/mq-professional-presence-sync.js +1 -1
- package/dist/react/mq-recent-documents.js +1 -1
- package/dist/react/mq-schedule-success.js +1 -1
- package/dist/react/mq-schedule.js +1 -1
- package/dist/react/mq-socket-provider.js +1 -1
- package/dist/react/mq-support-chat.js +1 -1
- package/dist/react/mq-terms-and-conditions.js +1 -1
- package/dist/react/mq-unread-count-sync.js +1 -1
- package/dist/react/mq-videocall.js +1 -1
- package/dist/ui/mq-input.d.ts +1 -0
- package/dist/ui/mq-input.js +1 -1
- package/package.json +2 -2
- package/dist/chunks/api-chat-client-Dx-sFrf2.js +0 -1
- package/dist/chunks/mq-videocall-Cp7LSoDs.js +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
import{_ as t,c as o}from"./custom-element-D2ziPxYE.js";import{e}from"./provide-BwI4DDGF.js";import{c as i}from"./consume-CovVqBjI.js";import{m as a}from"./runtime-Bg1WXVCx.js";import{l as r}from"./localized-decorator-BlOuLhym.js";import{c as s,g as n,n as c}from"./api-chat-client-
|
|
1
|
+
import{_ as t,c as o}from"./custom-element-D2ziPxYE.js";import{e}from"./provide-BwI4DDGF.js";import{c as i}from"./consume-CovVqBjI.js";import{m as a}from"./runtime-Bg1WXVCx.js";import{l as r}from"./localized-decorator-BlOuLhym.js";import{c as s,g as n,n as c}from"./api-chat-client-s45J7LKB.js";import"./chunk-NIAGR3ZC-BDlNUZa1.js";import{Q as p}from"./query-controller-B1byDHlF.js";import{A as l}from"./api-client-context-BXGqBAlO.js";import{M as d}from"./mutation-controller-CR2qcqhH.js";import{g as h}from"./get-organization-setup-query-De7eM6V3.js";import{g as m}from"./chunk-BUV4MGML-CkhBbfUu.js";import{g as u}from"./chunk-Y4EKUX25-Bix9r5ry.js";import{a as v,i as g,E as f,x as y}from"./lit-element-DiWJYFwC.js";import{n as b}from"./property-scuRaFcM.js";import{r as _}from"./state-LQivXIgA.js";import{tokens as w}from"../theme.js";import{annotationQuestionIcon as k}from"../ui/icons/annotation-question-icon.js";import{spinnerIcon as q}from"../ui/icons/spinner-icon.js";import{xIcon as x}from"../ui/icons/x-icon.js";import"./mq-chat-room-C2EALCSm.js";import"../ui/mq-avatar.js";import{S as C,a as z,b as j,c as $,d as R}from"./index-BkDanNQg.js";import{toast as E}from"../ui/mq-toast.js";let I=class MqSupportChat extends v{constructor(){super(...arguments),this.variant="icon",this.open=!1,this._hasOpened=!1,this._lastEmittedUnread=0,this._orgSetupQuery=new p(this,()=>h(this.apiClient)),this._professionalQuery=new p(this,()=>m(this.apiClient,{hash:this._professionalHash??""},{enabled:Boolean(this._professionalHash)})),this._unreadQuery=new p(this,()=>u(this.apiClient,{roomId:this.roomId??0},{enabled:Boolean(this.roomId)})),this._supportRoomMutation=new d(this,{mutationFn:t=>this.apiClient.rooms.createSupportRoom(t),onSuccess:t=>{this.roomId=t.room_id,this.open&&this._markSupportRead()},onError:()=>{this.open&&(this.open=!1,E.error(a("No se ha podido abrir el chat con soporte")))}}),this._readAllMutation=new d(this,{mutationFn:()=>this.apiClient.professionals.readAllMessages({roomId:this.roomId??0}),onSuccess:()=>{const t=this.roomId;t&&this._unreadQuery.queryClient?.invalidateQueries({queryKey:u(this.apiClient,{roomId:t}).queryKey})}}),this.apiClient=s(),this._onUnreadRequest=()=>{this._emitUnreadChange()},this._onToggleRequest=()=>{this._toggle()},this._onKeydown=t=>{t.defaultPrevented||"Escape"===t.key&&this.open&&this._close()}}static{this.styles=[w,g`*{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?n(t):void 0}connectedCallback(){super.connectedCallback(),window.addEventListener("keydown",this._onKeydown),window.addEventListener(C.eventName,this._onToggleRequest),window.addEventListener(z.eventName,this._onUnreadRequest)}disconnectedCallback(){super.disconnectedCallback(),window.removeEventListener("keydown",this._onKeydown),window.removeEventListener(C.eventName,this._onToggleRequest),window.removeEventListener(z.eventName,this._onUnreadRequest)}willUpdate(t){const o=c(t,{apiKey:this.apiKey,token:this.token},this.inheritedApiClient);o&&(this.apiClient=o)}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 j(this.unreadCount))}_markSupportRead(){const t=this.roomId,o=this._unreadQuery.queryClient;t&&o&&(o.setQueryData(u(this.apiClient,{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 $),!this.roomId&&this._supportRoomMutation.isError&&this._supportRoomMutation.reset(),this._ensureRoom(),this._markSupportRead()}_close(){this.open=!1,this.dispatchEvent(new R)}render(){const t=this._professionalHash;if(!t||!this.token)return f;const o=this._professionalQuery.result?.data;if("avatar"===this.variant&&!o)return f;const e=this.unreadCount>0,i="avatar"===this.variant&&Boolean(o);return y`<div class="widget"><div class="panel ${this.open?"open":""}">${this._hasOpened?this.roomId?y`<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>`:y`<div class="panel-loading">${q({color:"var(--color-primary)"})}</div>`:f}</div><button type="button" class="launcher ${this.open?"open":""} ${e?"has-unread":""}" aria-label="${this.label||a("Chat con soporte")}" aria-expanded="${this.open?"true":"false"}" @click="${this._toggle}"><span class="icon-circle ${i?"with-avatar":""}">${this._presence?y`<span class="online-dot" data-presence="${this._presence}"></span>`:f} ${e&&!this.open?y`<span class="badge">${this.unreadCount>99?"99+":this.unreadCount}</span>`:f} <span class="icon icon-chat">${i?y`<mq-avatar class="launcher-avatar" .src="${o?.avatar??void 0}" .fallback="${o?.name}" .alt="${o?.name}"></mq-avatar>`:k({size:24})} </span><span class="icon icon-close">${x({size:24})}</span></span></button></div>`}};t([b({type:String,attribute:"api-key"})],I.prototype,"apiKey",void 0),t([b({type:String,attribute:"token"})],I.prototype,"token",void 0),t([b({type:String,attribute:"label"})],I.prototype,"label",void 0),t([b({type:String,attribute:"variant"})],I.prototype,"variant",void 0),t([_()],I.prototype,"open",void 0),t([_()],I.prototype,"roomId",void 0),t([_()],I.prototype,"_hasOpened",void 0),t([i({context:l,subscribe:!0}),_()],I.prototype,"inheritedApiClient",void 0),t([e({context:l}),_()],I.prototype,"apiClient",void 0),I=t([r(),o("mq-support-chat")],I);export{I as M};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{_ as t,c as e}from"./custom-element-D2ziPxYE.js";import{a as i,i as o,E as s,x as n}from"./lit-element-DiWJYFwC.js";import{n as r}from"./property-scuRaFcM.js";import{spinnerIcon as a}from"../ui/icons/spinner-icon.js";import{e as l}from"./provide-BwI4DDGF.js";import{c as d}from"./consume-CovVqBjI.js";import{h as c}from"./task-CqjSKFwZ.js";import{A as p}from"./api-client-context-BXGqBAlO.js";import{f as h,A as m,C as u,c as v,n as g,i as b}from"./api-chat-client-s45J7LKB.js";import{r as f}from"./state-LQivXIgA.js";import{n as y}from"./create-context-DqP79qjF.js";import{g as w,p as x,a as k}from"./chunk-NIAGR3ZC-BDlNUZa1.js";import{env as $}from"../env.js";import{m as C}from"./runtime-Bg1WXVCx.js";import{l as E}from"./localized-decorator-BlOuLhym.js";import{a as _}from"./addSeconds-fO5orJrt.js";import{getLocale as S}from"../i18n.js";import{calendarIcon as z}from"../ui/icons/calendar-icon.js";import"../ui/mq-page-title.js";import"./professional-overview-Ck_SPivX.js";import{MqViewAppointmentsEvent as T}from"../events.js";import{clockIcon as O}from"../ui/icons/clock-icon.js";import"./documentation-view-CzCDvut1.js";import{l as q}from"./chunk-S5RWG6G2-CQJ38pW6.js";import{t as I,u as j,w as R,x as V,y as A}from"./telemetry-client-DA2_SZBC.js";import"./mq-chat-room-C2EALCSm.js";import{chatbubbleIcon as N}from"../ui/icons/chat-bubble-icon.js";import{micIcon as U}from"../ui/icons/mic-icon.js";import{micOffIcon as W}from"../ui/icons/mic-off-icon.js";import{videoIcon as P}from"../ui/icons/video-icon.js";import{videoOffIcon as M}from"../ui/icons/video-off-icon.js";import"../ui/mq-unread-badge.js";import{Q as D}from"./query-controller-B1byDHlF.js";import{g as L}from"./chunk-Y4EKUX25-Bix9r5ry.js";import{l as K}from"./chunk-FUCSYDW7-Duj5hy8S.js";import"../ui/mq-floating-bubble.js";import{e as F}from"./query-CeeutdfT.js";import{M as B}from"./mutation-controller-CR2qcqhH.js";import{alertCircleIcon as H}from"../ui/icons/alert-circle-icon.js";import"../ui/mq-rating.js";import{toast as G}from"../ui/mq-toast.js";import{heartBeatIcon as Q}from"../ui/icons/heartbeat-icon.js";import{timeLeftIcon as Y}from"../ui/icons/time-left-icon.js";import"./mq-layout-BndHxkbb.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 Z(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 J=y(Symbol("opentok-service")),X=y(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 tt="waiting-room",et="videocall",it="documentation",ot="not-time-yet",st="review";class OpenTokController{constructor(t,e,i,o,s,n){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,this.apiClient=e,t.addController(this),this.appointment=i,this.token=o,this.onCallStarted=s,this.onCallFinished=n,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 this.apiClient.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($.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())}),this.apiClient.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,this.apiClient.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 nt=class NotTimeYetView extends i{static{this.styles=[o`mq-page-title{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){.description{font-size:var(--text-base);line-height:var(--text-base--line-height);margin-bottom:var(--sp-6)}}`]}firstUpdated(){I.track(j(this.loginToken.patient.hash,this.appointment.id??""))}render(){const t=S()?.replace("_","-")??"es-ES",e=w(this.loginToken.patient.timezone),i=new Intl.DateTimeFormat(t,{dateStyle:"full",...e?{timeZone:e}:{}}),o=new Intl.DateTimeFormat(t,{timeStyle:"short",...e?{timeZone:e}:{}}),r=x(this.appointment.start_date),a=_(r,this.appointment.duration),l=e?k(e,r):"";return n`<mq-page-title .title="${C("¡Aún no es la hora!")}" back-label="${C("Salir")}" @mq-back="${t=>{t.stopPropagation(),this.dispatchEvent(new T({tab:"next"}))}}"></mq-page-title><p class="description">${C("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">${z({size:24})} <span>${i.format(r)}</span></div><div class="details-row">${O({size:24})} <span>${o.format(r)} - ${o.format(a)}${l?` (${l})`:""}</span></div></div></div>${!0===this.appointment.has_chat_in_appointment?n`<chat-cta .consultationId="${this.appointment.id}" .roomId="${Number(this.appointment.room_id)}" .professionalHash="${this.appointment.from.hash}" .text="${C("Utiliza el chat para enviar el motivo de consulta, documentos o imágenes")}" .onOpenChat="${()=>{I.track(R(this.loginToken.patient.hash,this.appointment.id??""))}}"></chat-cta>`:s}`}};t([r({type:Object})],nt.prototype,"appointment",void 0),t([d({context:q})],nt.prototype,"loginToken",void 0),nt=t([E(),e("not-time-yet-view")],nt);let rt=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 n`<span>${C("Espera a ser atendido sin salir de esta pantalla")}</span>`}};rt=t([E(),e("permission-status-banner")],rt);let at=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)}mq-page-title{margin-bottom:var(--size-4)}.content{max-width:560px;margin:0 auto}.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 p{font-size:var(--text-base);line-height:var(--text-base--line-height)}}`}firstUpdated(){this.isWaitingRoom&&I.track(V(this.loginToken.patient.hash,this.appointment.id??""))}render(){if(!this.isWaitingRoom)return n`<slot></slot>`;const t=S()?.replace("_","-")??"es-ES",e=w(this.loginToken.patient.timezone),i=e?{timeZone:e}:{},o=new Intl.DateTimeFormat(t,{dateStyle:"short",...i}),r=new Intl.DateTimeFormat(t,{timeStyle:"short",...i}),a=x(this.appointment.start_date),l=_(a,this.appointment.duration),d=e?k(e,a):"",c=o.format(a),p=`${r.format(a)} - ${r.format(l)}${d?` (${d})`:""}`;return n`<permission-status-banner></permission-status-banner><div class="content"><div class="information-container"><mq-page-title .title="${C("Sala de espera")}" back-label="${C("Salir")}" @mq-back="${t=>{t.stopPropagation(),this.dispatchEvent(new T({tab:"next"}))}}"></mq-page-title><div class="doctor-info"><p>${this.appointment.from.name}</p><p>${c}</p><p>${p}</p></div></div><div class="video-container"><slot></slot></div>${!0===this.appointment.has_chat_in_appointment?n`<chat-cta .consultationId="${this.appointment.id}" .roomId="${Number(this.appointment.room_id)}" .professionalHash="${this.appointment.from.hash}" .text="${C("Utiliza el chat para enviar el motivo de consulta, documentos o imágenes")}" .onOpenChat="${()=>{I.track(R(this.loginToken.patient.hash,this.appointment.id??""))}}"></chat-cta>`:s}</div>`}};t([r({type:Object})],at.prototype,"appointment",void 0),t([r({type:Boolean,attribute:"is-waiting-room"})],at.prototype,"isWaitingRoom",void 0),t([d({context:q})],at.prototype,"loginToken",void 0),at=t([e("waiting-room-layout")],at);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 lt=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 D(this,()=>L(this.apiClient,{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 n`<div class="left-controls">${this.isWaitingRoom||!this.chatEnabled?s:n`<button type="button" class="control-button control-button--on" @click="${this.toggleChat}">${N({size:20})} ${(this.unreadQuery.result?.data?.unread_count??0)>0?n`<mq-unread-badge></mq-unread-badge>`:s}</button>`} <button type="button" class="control-button ${this.isAudioOn?"control-button--on":"control-button--off"}" @click="${this.toggleAudio}">${this.isAudioOn?U({size:20}):W({size:20})}</button> <button type="button" class="control-button ${this.isVideoOn?"control-button--on":"control-button--off"}" @click="${this.toggleVideo}">${this.isVideoOn?P({size:20}):M({size:20})}</button></div>`}};t([d({context:p,subscribe:!0})],lt.prototype,"apiClient",void 0),t([r({type:Boolean})],lt.prototype,"isAudioOn",void 0),t([r({type:Boolean})],lt.prototype,"isVideoOn",void 0),t([r({type:Boolean})],lt.prototype,"isChatOpen",void 0),t([r({type:Boolean})],lt.prototype,"chatEnabled",void 0),t([r({type:Boolean,reflect:!0,attribute:"is-waiting-room"})],lt.prototype,"isWaitingRoom",void 0),t([r({type:Number})],lt.prototype,"roomId",void 0),lt=t([e("publisher-controls")],lt);let dt=class VideoPublisher extends i{constructor(){super(...arguments),this.isWaitingRoom=!1,this.hasChatInAppointment=!1,this.appointmentCounterController=new AppointmentCounterController(this,()=>x(this.startsAt)),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%",audioFallback:{subscriber:!1},insertMode:"append",mirror:!1,publishAudio:this.isAudioOn,publishVideo:this.isVideoOn},t=>{t&&K.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(){return n`<div class="top-items">${this.isWaitingRoom?n`<div></div>`:n`<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="${this.hasChatInAppointment}" .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>${this.hasChatInAppointment?n`<mq-floating-bubble ?dismissable="${!1}" .open="${this.isChatOpen}" @mq-close="${()=>{this.isChatOpen=!1}}" hideCloseButton>${this.isChatOpen?n`<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>`:s}</mq-floating-bubble>`:s}`}};t([r({type:String})],dt.prototype,"consultationId",void 0),t([r({type:String})],dt.prototype,"apiKey",void 0),t([r({type:String})],dt.prototype,"token",void 0),t([r({type:String})],dt.prototype,"roomId",void 0),t([r({type:String})],dt.prototype,"professionalHash",void 0),t([r({type:Object})],dt.prototype,"session",void 0),t([r({type:String})],dt.prototype,"professionalName",void 0),t([r({type:String})],dt.prototype,"startsAt",void 0),t([r({type:Boolean,reflect:!0,attribute:"is-waiting-room"})],dt.prototype,"isWaitingRoom",void 0),t([r({type:Boolean})],dt.prototype,"hasChatInAppointment",void 0),t([d({context:J})],dt.prototype,"openTokService",void 0),t([d({context:q})],dt.prototype,"loginToken",void 0),t([F("#video-publisher")],dt.prototype,"publisherEl",void 0),t([f()],dt.prototype,"isAudioOn",void 0),t([f()],dt.prototype,"isVideoOn",void 0),t([f()],dt.prototype,"isChatOpen",void 0),dt=t([e("video-publisher")],dt);let ct=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 n`<div id="video-subscriber" class="${this.isVideoOn?"":"hidden"}"></div>${this.isVideoOn?n``:n`<div class="video-disabled"></div>`}`}};t([r({type:Object})],ct.prototype,"session",void 0),t([r({type:Object})],ct.prototype,"stream",void 0),t([f()],ct.prototype,"isVideoOn",void 0),t([d({context:J})],ct.prototype,"openTokService",void 0),t([F("#video-subscriber")],ct.prototype,"subscriberEl",void 0),ct=t([e("video-subscriber")],ct);let pt=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||I.track(A(this.loginToken.patient.hash,this.appointment.id??""))}updated(t){t.has("isWaitingRoom")&&!0===t.get("isWaitingRoom")&&!this.isWaitingRoom&&I.track(A(this.loginToken.patient.hash,this.appointment.id??""))}render(){return n`<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}" .hasChatInAppointment="${!0===this.appointment.has_chat_in_appointment}"></video-publisher>${0===this.streams.length?n``:this.streams.map(t=>n`<video-subscriber .session="${this.session}" .stream="${t}"></video-subscriber>`)} ${this.isReconnecting?n`<div class="reconnecting-overlay">${a({color:"var(--color-white)"})} <span class="reconnecting-overlay__text">${C("Reconectando...")} </span><span class="reconnecting-overlay__subtitle">${C("Espere mientras se restablece la conexión")}</span></div>`:""}`}};t([r({type:Object})],pt.prototype,"session",void 0),t([r({type:Array})],pt.prototype,"streams",void 0),t([r({type:String})],pt.prototype,"apiKey",void 0),t([r({type:String})],pt.prototype,"token",void 0),t([r({type:Object})],pt.prototype,"appointment",void 0),t([r({type:Boolean,reflect:!0,attribute:"is-waiting-room"})],pt.prototype,"isWaitingRoom",void 0),t([r({type:Boolean,reflect:!0,attribute:"is-reconnecting"})],pt.prototype,"isReconnecting",void 0),t([d({context:q})],pt.prototype,"loginToken",void 0),pt=t([E(),e("mq-videocall-content")],pt);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 ht=class ReviewView extends i{constructor(){super(...arguments),this.rating=0,this.comment="",this._reviewMutation=new B(this,{mutationFn:({rating:t,comment:e})=>this.apiClient.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)?G.error(C("No se ha podido enviar el cuestionario")):this.dispatchEvent(new ReviewSubmittedEvent)}}),this._reconnectMutation=new B(this,{mutationFn:t=>this.apiClient.appointments.reconnectAppointment(t),onSuccess:()=>{this.dispatchEvent(new CustomEvent("review-reconnect",{bubbles:!0,composed:!0}))},onError:()=>{G.error(C("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 n`<div class="container"><h1 class="title">${C("¿Qué tal ha ido tu cita?")}</h1><div class="rating"><mq-rating .value="${this.rating}" .label="${C("Valoración de la consulta")}" @mq-rating-change="${t=>{this.rating=t.value}}"></mq-rating><p class="subtitle">${C("(1 es muy malo, 5 es excelente)")}</p></div><div class="comment-card"><div class="comment-header"><span class="comment-label">${C("¿Tienes comentarios sobre la consulta?")}</span> <span class="comment-counter">${this.comment.length}/${240}</span></div><textarea class="textarea" maxlength="${240}" placeholder="${C("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}">${C("Omitir")}</button> <button type="button" class="btn btn-submit" ?disabled="${this.rating<1||this._reviewMutation.isPending}" @click="${this.handleSubmit}">${C("Enviar")}</button></div></div><div class="waiting-card"><div class="waiting-header">${H({color:"currentColor",size:18})} <span class="waiting-title">${C("¿Ocurrió algún problema?")}</span></div><p class="waiting-body">${C("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})}">${C("volver a la sala de espera.")}</button></p></div></div>`}};t([d({context:p,subscribe:!0})],ht.prototype,"apiClient",void 0),t([r({type:Object})],ht.prototype,"appointment",void 0),t([f()],ht.prototype,"rating",void 0),t([f()],ht.prototype,"comment",void 0),ht=t([E(),e("review-view")],ht);let mt=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 n`<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})],mt.prototype,"title",void 0),t([r({type:String})],mt.prototype,"message",void 0),mt=t([e("error-view")],mt);let ut=class UnexpectedErrorView extends i{render(){return n`<error-view .title="${C("Error desconocido")}" .message="${C("Ha ocurrido un error al cargar la página. Por favor, intenta nuevamente o contacta al soporte.")}"><div slot="icon">${Q()}</div></error-view>`}};ut=t([E(),e("unexpected-error-view")],ut);let vt=class ExpiredAppointmentErrorView extends i{render(){return n`<error-view .title="${C("Consulta caducada")}" .message="${C("Parece que no te hemos encontrado a la hora de tu cita. Puedes programar otra consulta para resolver tus dudas.")}"><div slot="icon">${Y()}</div></error-view>`}};vt=t([E(),e("expired-appointment-error-view")],vt);let gt=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 n`<error-view .title="${C("Página no encontrada")}" .message="${C("La página que estás buscando fue removida, renombrada o puede que no exista.")}"><div slot="icon"><span>404</span> ${Q()}</div></error-view>`}};function bt(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=Z(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}}gt=t([E(),e("not-found-error-view")],gt);let ft=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.apiClient=v(),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([this.apiClient.flash.getAppointment({appointmentId:t}),this.apiClient.consultations.getReview(t).then(()=>!0).catch(()=>!1),this.apiClient.organizations.getOrganizationSetup().catch(()=>{})]);return{appointment:e,hasReview:i,hasNps:!0===o?.appointments?.has_nps}},args:()=>[this.appointmentId,this.apiKey,this.token]})}willUpdate(t){const e=g(t,{apiKey:this.apiKey,token:this.token},this.inheritedApiClient);if(e&&(this.apiClient=e),this.appointmentTask.value&&!this.opentokController){const{appointment:t,hasReview:e,hasNps:i}=this.appointmentTask.value,o=function(t,e){return h(t)?t.status===m.finished||t.status===m.reporting?e?st:it:tt:ot}(t,i);this.screen=o===st&&e?it:o,this.params={appointmentId:this.appointmentId,token:this.token,apiKey:this.apiKey},this.opentokController=new OpenTokController(this,this.apiClient,t,this.token,()=>{this.screen=et},()=>{this.screen=!i||e?it:st})}}render(){const t=n`<div class="centered">${a({color:"var(--color-primary)"})}</div>`,e=n`<mq-layout background="transparent"><not-found-error-view></not-found-error-view></mq-layout>`;return this.appointmentTask.render({pending:()=>t,error:t=>{const i=bt(this.token);return i?.exp&&i.exp<Date.now()/1e3?n`<mq-layout background="transparent"><expired-appointment-error-view></expired-appointment-error-view></mq-layout>`:b(t)&&t.response?.status&&t.response.status<500?e:n`<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===ot)return n`<mq-layout background="transparent"><not-time-yet-view .appointment="${i}"></not-time-yet-view></mq-layout>`;if(this.screen===st)return n`<mq-layout background="transparent"><review-view .appointment="${i}" @review-submitted="${()=>{this.screen=it}}" @review-skipped="${()=>{this.screen=it}}" @review-reconnect="${()=>{this.screen=tt}}"></review-view></mq-layout>`;if(this.screen===it)return n`<mq-layout background="transparent"><documentation-view .appointment="${i}" .token="${this.token}" ?can-reconnect="${!o}" @reconnect="${()=>{this.screen=tt}}"></documentation-view></mq-layout>`;if(this.screen===tt||this.screen===et){const e=this.opentokController.session;return e?n`<waiting-room-layout .appointment="${i}" ?is-waiting-room="${this.screen===tt}"><mq-videocall-content .apiKey="${this.apiKey}" .token="${this.token}" .session="${e}" .streams="${this.opentokController?.streams??[]}" ?is-waiting-room="${this.screen===tt}" ?is-reconnecting="${this.opentokController.isReconnecting}" .appointment="${i}"></mq-videocall-content></waiting-room-layout>`:t}return n`<mq-layout background="transparent"><unexpected-error-view></unexpected-error-view></mq-layout>`}})}};t([r({type:String,attribute:"appointment-id"})],ft.prototype,"appointmentId",void 0),t([r({type:String,attribute:"api-key"})],ft.prototype,"apiKey",void 0),t([r({type:String})],ft.prototype,"token",void 0),t([d({context:p,subscribe:!0}),f()],ft.prototype,"inheritedApiClient",void 0),t([l({context:p}),f()],ft.prototype,"apiClient",void 0),t([f()],ft.prototype,"screen",void 0),t([l({context:J})],ft.prototype,"opentokService",void 0),t([l({context:X})],ft.prototype,"params",void 0),ft=t([e("mq-videocall-provider")],ft);let yt=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 n`<error-view .title="${C("Acepta los permisos de cámara y micrófono")}" .message="${C("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="${`${$.ASSETS_BASE_URL}/wc-videocall/Miccam_asset.png`}" alt="Miccam_asset" width="229" height="166.44"></div></error-view>`}};yt=t([E(),e("permissions-required-error-view")],yt);let wt=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?n`<div class="loading-spinner-container">${a({color:"var(--color-primary)"})}</div>`:"denied"===this._permissionController.state?n`<div class="permissions-required-error-view-container"><permissions-required-error-view></permissions-required-error-view></div>`:n`<mq-videocall-provider .appointmentId="${this.appointmentId}" .token="${this.token}" .apiKey="${this.apiKey}"></mq-videocall-provider>`}};t([r({type:String,attribute:"appointment-id"})],wt.prototype,"appointmentId",void 0),t([r({type:String,attribute:"api-key"})],wt.prototype,"apiKey",void 0),t([r({type:String})],wt.prototype,"token",void 0),wt=t([e("mq-videocall")],wt);export{DownloadFileEvent as D,wt as M,ReviewSkippedEvent as R,ToggleAudioEvent as T,ViewDocumentationEvent as V,ReviewSubmittedEvent as a,ToggleChatEvent as b,ToggleVideoEvent as c};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{s as e}from"./chunk-6CCJWPGL-TiaqZaPV.js";import{D as t}from"./chunk-5EJXDIGT-Bb4_pfDr.js";import{_ as i,c as n}from"./custom-element-D2ziPxYE.js";import{c as o}from"./consume-CovVqBjI.js";import{m as a,s}from"./runtime-Bg1WXVCx.js";import{l as r}from"./localized-decorator-BlOuLhym.js";import{Q as l}from"./query-controller-B1byDHlF.js";import{A as p}from"./api-client-context-BXGqBAlO.js";import{l as c}from"./chunk-S5RWG6G2-CQJ38pW6.js";import{e as d,i as m,d as h}from"./api-chat-client-Dx-sFrf2.js";import{g as u,p as g,a as f}from"./chunk-NIAGR3ZC-BDlNUZa1.js";import{g as v}from"./get-organization-setup-query-De7eM6V3.js";import{g as b,t as y,l as $,n as C,o as w,p as x,a as q}from"./telemetry-client-DA2_SZBC.js";import{g as k}from"./chunk-Y4EKUX25-Bdei04iw.js";import{c as j}from"./refund-cancel-policy-DoMzcLlL.js";import{a as O,i as M,x as z,E}from"./lit-element-DiWJYFwC.js";import{n as S}from"./property-scuRaFcM.js";import{r as D}from"./state-LQivXIgA.js";import{MqAppointmentJoinVideocallEvent as I,MqAppointmentRescheduleEvent as A}from"../events.js";import{getLocale as R}from"../i18n.js";import{dotsHorizontalIcon as _}from"../ui/icons/dots-horizontal-icon.js";import"./mq-chat-room-BkXGHzrd.js";import"../ui/mq-button.js";import"../ui/mq-dialog.js";import{calendarIcon as P}from"../ui/icons/calendar-icon.js";import{messageBubbleIcon as T}from"../ui/icons/message-bubble-icon.js";import{phoneIcon as L}from"../ui/icons/phone-icon.js";import{videoIcon as U}from"../ui/icons/video-icon.js";import{Q as N}from"./chunk-RCFIJTXZ-C6Ir0-sM.js";import{M as Q}from"./mutation-controller-CR2qcqhH.js";import{h as H,f as J}from"./price-DU3YLTpk.js";import"./professional-overview-Ck_SPivX.js";import"../ui/mq-floating-bubble.js";import"../ui/mq-unread-badge.js";import{toast as F}from"../ui/mq-toast.js";function G(i,n){return{queryKey:e(i,"appointments",n),queryFn:()=>i.appointments.getAppointments(n),staleTime:t}}function V(e){const{action:t,refundPolicySeconds:i}=e,n=null!=i&&i<3600,o=Math.ceil((i??0)/60),r=Math.ceil((i??0)/3600);return a(0===(n?o:r)?"modify"===t?"Esta cita ya ha pasado, por lo que no se puede modificar.":"Esta cita ya ha pasado, por lo que no se puede anular.":"modify"===t?n?s`Lo sentimos, como faltan menos de ${o} minutos para tu cita no podemos modificarla.`:s`Lo sentimos, como faltan menos de ${r} horas para tu cita no podemos modificarla.`:n?s`Lo sentimos, como faltan menos de ${o} minutos para tu cita no podemos anularla.`:s`Lo sentimos, como faltan menos de ${r} horas para tu cita no podemos anularla.`)}let K=class AppointmentActionUnavailableDialog extends O{constructor(){super(...arguments),this.open=!1,this.heading="",this.message="",this.handleClose=()=>{this.open=!1,this.dispatchEvent(new CustomEvent("close",{bubbles:!0,composed:!0}))}}static{this.styles=M`:host{display:contents}mq-dialog::part(dialog){max-width:343px;min-width:0}mq-button{flex:1}`}render(){return z`<mq-dialog .open="${this.open}" .closeLabel="${a("Cerrar")}" @mq-close="${this.handleClose}"><h2 slot="heading">${this.heading}</h2><p slot="subheading">${this.message}</p><mq-button slot="footer" variant="primary" fullwidth @click="${this.handleClose}">${a("Volver")}</mq-button></mq-dialog>`}};i([S({type:Boolean,reflect:!0})],K.prototype,"open",void 0),i([S({type:String})],K.prototype,"heading",void 0),i([S({type:String})],K.prototype,"message",void 0),K=i([r(),n("appointment-action-unavailable-dialog")],K);const W=M`:host{display:flex;flex-direction:column;align-items:flex-start;gap:var(--sp-3)}.detail-row{display:inline-flex;align-items:center;gap:var(--sp-2);font-family:var(--font-body);font-size:var(--text-sm);line-height:1.35;font-weight:var(--font-weight-normal)}.detail-row svg{flex-shrink:0}.detail-row span::first-letter{text-transform:uppercase}`;let B=class AppointmentCardDetails extends O{constructor(){super(...arguments),this.startsAt=""}static{this.styles=W}channelIcon(){switch(this.channel){case d.videocall:return U({size:20});case d.phonecall:return L({size:20});default:return T({size:20})}}channelLabel(){switch(this.channel){case d.videocall:return a("Videoconsulta");case d.phonecall:return a("Consulta telefónica");default:return a("Chat")}}formatWhen(){const e=R().replace("_","-"),t=u(this.timezone),i=t?{timeZone:t}:{},n=g(this.startsAt);if(Number.isNaN(n.getTime()))return"";const o=new Intl.DateTimeFormat(e,{weekday:"long",day:"numeric",month:"long",year:"numeric",...i}).format(n),r=new Intl.DateTimeFormat(e,{timeStyle:"short",hourCycle:"h23",...i}).format(n),l=t?f(t,n):"";return a(s`${o}, ${r} h${l?` (${l})`:""}`)}render(){const e=this.formatWhen();return z`${e?z`<div class="detail-row">${P({size:20})} <span>${e}</span></div>`:E}<div class="detail-row">${this.channelIcon()} <span>${this.channelLabel()}</span></div>`}};i([S({type:String})],B.prototype,"startsAt",void 0),i([S({type:String})],B.prototype,"channel",void 0),i([S({type:String})],B.prototype,"timezone",void 0),B=i([r(),n("appointment-card-details")],B);let X=class CancelAppointmentConfirmationDialog extends O{constructor(){super(...arguments),this.open=!1,this.cancelAppointmentMutation=new Q(this,{mutationFn:async e=>this.apiClient.appointments.cancelAppointment(e),onSuccess:()=>{this.queryClientContext?.invalidateQueries({queryKey:e(this.apiClient)}),this.dispatchEvent(new CustomEvent("success",{bubbles:!0,composed:!0}))},onError:t=>{const i=m(t)?t.response?.status:void 0,n=void 0!==i&&i>=400&&i<500&&401!==i;n&&this.queryClientContext?.invalidateQueries({queryKey:e(this.apiClient)}),this.dispatchEvent(new CustomEvent("cancel-failed",{bubbles:!0,composed:!0,detail:{rejected:n}}))}}),this.handleClose=()=>{this.open=!1,this.dispatchEvent(new CustomEvent("cancel",{bubbles:!0,composed:!0}))},this.handleDismissClick=()=>{this.open=!1,this.dispatchEvent(new CustomEvent("cancel",{bubbles:!0,composed:!0}))},this.handleConfirmClick=()=>{this.cancelAppointmentMutation.run({id:this.appointmentId})}}static{this.styles=M`:host{display:contents}.price-rows{display:flex;flex-direction:column;font-family:var(--font-body);font-size:var(--text-sm);font-weight:var(--font-weight-medium);line-height:var(--text-sm--line-height);color:var(--color-card-foreground);width:100%}.price-row{display:flex;align-items:center;justify-content:space-between;min-height:34px;gap:var(--sp-2)}.price-row span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}`}render(){const e=R(),t=this.price,i=H(t),n=this.cancelAppointmentMutation.isPending;if(i){const i=J(t,e),o=`-${i}`;return z`<mq-dialog .open="${this.open}" .dismissable="${!n}" alert .closeLabel="${a("Cerrar")}" @mq-close="${this.handleClose}"><h2 slot="heading">${a("Confirmar cancelación")}</h2><p slot="subheading">${a("¿Seguro que quieres cancelar esta cita? Se te devolverá el importe pagado en un plazo de 5-10 días hábiles.")}</p><div class="price-rows"><div class="price-row"><span>${a("Importe pagado")}</span> <span>${i}</span></div><div class="price-row"><span>${a("Importe a devolver")}</span> <span>${o}</span></div></div><mq-button slot="footer" variant="outline" ?disabled="${n}" @click="${this.handleDismissClick}">${a("Volver")}</mq-button><mq-button slot="footer" variant="primary" ?disabled="${n}" @click="${this.handleConfirmClick}">${a("Confirmar")}</mq-button></mq-dialog>`}return z`<mq-dialog .open="${this.open}" .dismissable="${!n}" alert .closeLabel="${a("Cerrar")}" @mq-close="${this.handleClose}"><h2 slot="heading">${a("Confirmar cancelación")}</h2><p slot="subheading">${a("¿Seguro que quieres cancelar esta cita?")}</p><mq-button slot="footer" variant="outline" ?disabled="${n}" @click="${this.handleDismissClick}">${a("Cancelar")}</mq-button><mq-button slot="footer" variant="primary" ?disabled="${n}" @click="${this.handleConfirmClick}">${a("Confirmar")}</mq-button></mq-dialog>`}};i([o({context:p,subscribe:!0})],X.prototype,"apiClient",void 0),i([S({type:Boolean,reflect:!0})],X.prototype,"open",void 0),i([o({context:N,subscribe:!0})],X.prototype,"queryClientContext",void 0),i([S({type:String})],X.prototype,"appointmentId",void 0),i([S({type:Object})],X.prototype,"price",void 0),X=i([r(),n("cancel-appointment-confirmation-dialog")],X);const Z=M`:host{display:flex;flex-direction:column;justify-content:space-between;gap:var(--sp-6);flex:1;width:100%;min-width:0;box-sizing:border-box;color:var(--color-text-icons--primary,#0a0a22)}professional-overview{--avatar-size-lg:66px;--text-lg--line-height:1.35;display:block}.footer{display:flex;flex-direction:column;gap:var(--sp-4)}.reminder{font-family:var(--font-body);font-size:var(--text-sm);line-height:1.35;font-weight:var(--font-weight-normal);color:var(--color-text-icons--secondary,#6d658b);margin:0}.actions{--button-height-md:2.75rem;display:flex;align-items:stretch;gap:10px}.actions>mq-button{flex:1;min-width:0}.overflow{position:relative;flex:0 0 auto}.chat-label{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.chat-badge{--mq-unread-badge-size:8px;flex-shrink:0}@media (max-width:767px){.actions{flex-wrap:wrap}.actions>mq-button.join{order:1;flex:1 0 100%}}.menu{position:absolute;right:0;bottom:calc(100% + var(--sp-2));z-index:2;display:flex;flex-direction:column;min-width:176px;padding:var(--sp-1);background-color:var(--color-card,#fff);border:1px solid var(--color-border-subtle,#edecf1);border-radius:var(--border-radius-lg);box-shadow:var(--shadow-lg)}.menu-item{display:block;width:100%;background:0 0;border:none;border-radius:var(--border-radius-sm);padding:var(--sp-2) var(--sp-3);cursor:pointer;text-align:left;font-family:var(--font-body);font-size:var(--text-sm);line-height:1.35;color:var(--color-text-icons--primary,#0a0a22)}.menu-item:hover{background-color:var(--color-muted)}.menu-item.negative{color:var(--color-negative)}`;let Y=class NextAppointmentCard extends O{constructor(){super(...arguments),this.token="",this.patientHash="",this.isChatOpen=!1,this.isMenuOpen=!1,this.isCancelDialogOpen=!1,this.openDialog=null,this.getUnreadMessagesQuery=new l(this,()=>({...k(this.apiClient,{roomId:this.appointmentResource?.room?.id}),enabled:!!this.appointmentResource?.room?.id})),this.getOrganizationSetupQuery=new l(this,()=>v(this.apiClient)),this.getOrganizationSpecialtiesQuery=new l(this,()=>b(this.apiClient,{enabled:!!this.appointmentResource?.speciality?.id})),this.closeMenuOnOutsideClick=e=>{e.composedPath().includes(this)||(this.isMenuOpen=!1)},this.closeMenuOnEscape=e=>{"Escape"===e.key&&(this.isMenuOpen=!1)},this.handleJoinVideocall=()=>{y.track($(this.sessionPatientHash,this.appointmentId)),this.dispatchEvent(new I({appointmentId:this.appointmentId}))},this.handleToggleChat=()=>{this.isChatOpen=!this.isChatOpen,this.isChatOpen&&y.track(C(this.sessionPatientHash,this.appointmentId))},this.handleModify=()=>{this.isMenuOpen=!1,this.isModifyUnavailable?this.openDialog="modify":(y.track(w(this.sessionPatientHash,this.appointmentId)),this.dispatchEvent(new A({appointmentId:this.appointmentId})))},this.handleCancel=()=>{this.isMenuOpen=!1,this.isCancelUnavailable?this.openDialog="cancel":(y.track(x(this.sessionPatientHash,this.appointmentId)),this.isCancelDialogOpen=!0)}}static{this.styles=Z}connectedCallback(){super.connectedCallback(),document.addEventListener("click",this.closeMenuOnOutsideClick),document.addEventListener("keydown",this.closeMenuOnEscape)}disconnectedCallback(){document.removeEventListener("click",this.closeMenuOnOutsideClick),document.removeEventListener("keydown",this.closeMenuOnEscape),super.disconnectedCallback()}get appointmentId(){return this.appointmentResource.appointment.id??""}get channel(){return this.appointmentResource.appointment.channel}get sessionToken(){return this.token||this.loginToken?.access_token||""}get sessionPatientHash(){return this.patientHash||this.loginToken?.patient?.hash||""}get sessionTimezone(){return this.timezone??this.loginToken?.patient?.timezone}get unreadCount(){return this.getUnreadMessagesQuery.result?.data?.unread_count??0}get specialtyName(){const e=this.getOrganizationSpecialtiesQuery.result?.data?.find(e=>Number(e.id)===Number(this.appointmentResource.speciality?.id));return q(e?.code??"",R(),e?.name??this.appointmentResource.speciality?.name)}get hasChatSupport(){return this.appointmentResource.appointment.has_chat_in_appointment??this.getOrganizationSetupQuery.result?.data?.appointments?.has_chat_in_appointment??!1}get isExpired(){return h(this.appointmentResource.appointment.expires_at)}get refundPolicySeconds(){return this.getOrganizationSetupQuery.result?.data?.appointments?.seconds_before_start_to_refund_on_cancel}get policyAllowsModifyOrCancel(){return j({startsAtIso:this.appointmentResource.appointment.starts_at,refundPolicySeconds:this.refundPolicySeconds})}get isModifyUnavailable(){return this.isExpired||0===this.appointmentResource.slots.length||!this.policyAllowsModifyOrCancel}get isCancelUnavailable(){return this.isExpired||!this.policyAllowsModifyOrCancel}get modifyUnavailableMessage(){return V({action:"modify",refundPolicySeconds:this.refundPolicySeconds})}get cancelUnavailableMessage(){return V({action:"cancel",refundPolicySeconds:this.refundPolicySeconds})}renderActions(){const e=this.channel===d.videocall;return z`<div class="actions">${this.hasChatSupport?z`<mq-button variant="outline" @click="${this.handleToggleChat}"><span class="chat-label">${a("Ir a chat")}</span> ${this.unreadCount>0?z`<mq-unread-badge class="chat-badge"></mq-unread-badge>`:E}</mq-button>`:E} ${e?z`<mq-button class="join" variant="primary" @click="${this.handleJoinVideocall}">${a("Unirse a la videoconsulta")}</mq-button>`:E}<div class="overflow"><mq-button variant="outline" size="icon-lg" aria-label="${a("Más opciones")}" aria-haspopup="menu" aria-expanded="${this.isMenuOpen}" @click="${()=>{this.isMenuOpen=!this.isMenuOpen}}">${_({size:16})}</mq-button>${this.isMenuOpen?z`<div class="menu" role="menu"><button class="menu-item" type="button" role="menuitem" @click="${this.handleModify}">${a("Modificar cita")}</button> <button class="menu-item negative" type="button" role="menuitem" @click="${this.handleCancel}">${a("Anular cita")}</button></div>`:E}</div></div>`}render(){const{professional:e}=this.appointmentResource;return z`<professional-overview .name="${e.name}" .specialtyName="${this.specialtyName}" .collegiateNumber="${e.collegiate_number??void 0}" .description="${e.description??""}" .languages="${e.languages??[]}" .avatar="${e.avatar??""}"></professional-overview><appointment-card-details .startsAt="${this.appointmentResource.appointment.starts_at}" .channel="${this.channel}" .timezone="${this.sessionTimezone}"></appointment-card-details><div class="footer"><p class="reminder">${a("Recibirás un recordatorio 15 minutos antes de la consulta")}</p>${this.renderActions()}</div><mq-floating-bubble ?dismissable="${!1}" .open="${this.isChatOpen}" hideCloseButton @mq-close="${()=>{this.isChatOpen=!1}}">${this.isChatOpen?z`<mq-chat-room slot="content" .consultationId="${this.appointmentResource.appointment.id}" consultation-type="appointment" token="${this.sessionToken}" .roomId="${this.appointmentResource.room.id}" .professionalHash="${e.hash}" ?readonly="${this.isExpired}" @mq-chat-room-close="${()=>{this.isChatOpen=!1}}"></mq-chat-room>`:E}</mq-floating-bubble><appointment-action-unavailable-dialog .open="${"modify"===this.openDialog}" .heading="${a("Modificar cita")}" .message="${this.modifyUnavailableMessage}" @close="${()=>{this.openDialog=null}}"></appointment-action-unavailable-dialog><appointment-action-unavailable-dialog .open="${"cancel"===this.openDialog}" .heading="${a("Anular cita")}" .message="${this.cancelUnavailableMessage}" @close="${()=>{this.openDialog=null}}"></appointment-action-unavailable-dialog><appointment-action-unavailable-dialog .open="${"cancel-rejected"===this.openDialog}" .heading="${a("Anular cita")}" .message="${a("Lo sentimos, esta cita ya no se puede anular.")}" @close="${()=>{this.openDialog=null}}"></appointment-action-unavailable-dialog><cancel-appointment-confirmation-dialog .appointmentId="${this.appointmentResource.appointment.id}" .price="${this.appointmentResource.price??void 0}" .open="${this.isCancelDialogOpen}" @cancel="${()=>{this.isCancelDialogOpen=!1}}" @cancel-failed="${e=>{this.isCancelDialogOpen=!1,e.detail.rejected?this.openDialog="cancel-rejected":F.error(a("No hemos podido anular la cita. Inténtalo de nuevo."))}}" @success="${()=>{this.isCancelDialogOpen=!1,F.success(a("Consulta anulada correctamente")),this.dispatchEvent(new CustomEvent("appointment-cancel-confirmed",{bubbles:!0,composed:!0,detail:{id:this.appointmentId}}))}}"></cancel-appointment-confirmation-dialog>`}};i([o({context:p,subscribe:!0})],Y.prototype,"apiClient",void 0),i([o({context:c,subscribe:!0})],Y.prototype,"loginToken",void 0),i([S({type:Object})],Y.prototype,"appointmentResource",void 0),i([S({type:String})],Y.prototype,"token",void 0),i([S({type:String})],Y.prototype,"patientHash",void 0),i([S({type:String})],Y.prototype,"timezone",void 0),i([D()],Y.prototype,"isChatOpen",void 0),i([D()],Y.prototype,"isMenuOpen",void 0),i([D()],Y.prototype,"isCancelDialogOpen",void 0),i([D()],Y.prototype,"openDialog",void 0),Y=i([r(),n("next-appointment-card")],Y);export{V as a,G as g};
|
|
1
|
+
import{s as e}from"./chunk-6CCJWPGL-TiaqZaPV.js";import{D as t}from"./chunk-5EJXDIGT-Bb4_pfDr.js";import{_ as i,c as n}from"./custom-element-D2ziPxYE.js";import{c as o}from"./consume-CovVqBjI.js";import{m as a,s}from"./runtime-Bg1WXVCx.js";import{l as r}from"./localized-decorator-BlOuLhym.js";import{Q as l}from"./query-controller-B1byDHlF.js";import{A as p}from"./api-client-context-BXGqBAlO.js";import{l as c}from"./chunk-S5RWG6G2-CQJ38pW6.js";import{e as d,i as m,d as h}from"./api-chat-client-s45J7LKB.js";import{g as u,p as g,a as f}from"./chunk-NIAGR3ZC-BDlNUZa1.js";import{g as v}from"./get-organization-setup-query-De7eM6V3.js";import{g as b,t as y,l as $,n as C,o as w,p as x,a as q}from"./telemetry-client-DA2_SZBC.js";import{g as k}from"./chunk-Y4EKUX25-Bix9r5ry.js";import{c as j}from"./refund-cancel-policy-DoMzcLlL.js";import{a as O,i as M,x as z,E}from"./lit-element-DiWJYFwC.js";import{n as S}from"./property-scuRaFcM.js";import{r as D}from"./state-LQivXIgA.js";import{MqAppointmentJoinVideocallEvent as I,MqAppointmentRescheduleEvent as A}from"../events.js";import{getLocale as R}from"../i18n.js";import{dotsHorizontalIcon as _}from"../ui/icons/dots-horizontal-icon.js";import"./mq-chat-room-C2EALCSm.js";import"../ui/mq-button.js";import"../ui/mq-dialog.js";import{calendarIcon as P}from"../ui/icons/calendar-icon.js";import{messageBubbleIcon as T}from"../ui/icons/message-bubble-icon.js";import{phoneIcon as L}from"../ui/icons/phone-icon.js";import{videoIcon as U}from"../ui/icons/video-icon.js";import{Q as N}from"./chunk-RCFIJTXZ-C6Ir0-sM.js";import{M as Q}from"./mutation-controller-CR2qcqhH.js";import{h as H,f as J}from"./price-DU3YLTpk.js";import"./professional-overview-Ck_SPivX.js";import"../ui/mq-floating-bubble.js";import"../ui/mq-unread-badge.js";import{toast as F}from"../ui/mq-toast.js";function G(i,n){return{queryKey:e(i,"appointments",n),queryFn:()=>i.appointments.getAppointments(n),staleTime:t}}function V(e){const{action:t,refundPolicySeconds:i}=e,n=null!=i&&i<3600,o=Math.ceil((i??0)/60),r=Math.ceil((i??0)/3600);return a(0===(n?o:r)?"modify"===t?"Esta cita ya ha pasado, por lo que no se puede modificar.":"Esta cita ya ha pasado, por lo que no se puede anular.":"modify"===t?n?s`Lo sentimos, como faltan menos de ${o} minutos para tu cita no podemos modificarla.`:s`Lo sentimos, como faltan menos de ${r} horas para tu cita no podemos modificarla.`:n?s`Lo sentimos, como faltan menos de ${o} minutos para tu cita no podemos anularla.`:s`Lo sentimos, como faltan menos de ${r} horas para tu cita no podemos anularla.`)}let K=class AppointmentActionUnavailableDialog extends O{constructor(){super(...arguments),this.open=!1,this.heading="",this.message="",this.handleClose=()=>{this.open=!1,this.dispatchEvent(new CustomEvent("close",{bubbles:!0,composed:!0}))}}static{this.styles=M`:host{display:contents}mq-dialog::part(dialog){max-width:343px;min-width:0}mq-button{flex:1}`}render(){return z`<mq-dialog .open="${this.open}" .closeLabel="${a("Cerrar")}" @mq-close="${this.handleClose}"><h2 slot="heading">${this.heading}</h2><p slot="subheading">${this.message}</p><mq-button slot="footer" variant="primary" fullwidth @click="${this.handleClose}">${a("Volver")}</mq-button></mq-dialog>`}};i([S({type:Boolean,reflect:!0})],K.prototype,"open",void 0),i([S({type:String})],K.prototype,"heading",void 0),i([S({type:String})],K.prototype,"message",void 0),K=i([r(),n("appointment-action-unavailable-dialog")],K);const W=M`:host{display:flex;flex-direction:column;align-items:flex-start;gap:var(--sp-3)}.detail-row{display:inline-flex;align-items:center;gap:var(--sp-2);font-family:var(--font-body);font-size:var(--text-sm);line-height:1.35;font-weight:var(--font-weight-normal)}.detail-row svg{flex-shrink:0}.detail-row span::first-letter{text-transform:uppercase}`;let B=class AppointmentCardDetails extends O{constructor(){super(...arguments),this.startsAt=""}static{this.styles=W}channelIcon(){switch(this.channel){case d.videocall:return U({size:20});case d.phonecall:return L({size:20});default:return T({size:20})}}channelLabel(){switch(this.channel){case d.videocall:return a("Videoconsulta");case d.phonecall:return a("Consulta telefónica");default:return a("Chat")}}formatWhen(){const e=R().replace("_","-"),t=u(this.timezone),i=t?{timeZone:t}:{},n=g(this.startsAt);if(Number.isNaN(n.getTime()))return"";const o=new Intl.DateTimeFormat(e,{weekday:"long",day:"numeric",month:"long",year:"numeric",...i}).format(n),r=new Intl.DateTimeFormat(e,{timeStyle:"short",hourCycle:"h23",...i}).format(n),l=t?f(t,n):"";return a(s`${o}, ${r} h${l?` (${l})`:""}`)}render(){const e=this.formatWhen();return z`${e?z`<div class="detail-row">${P({size:20})} <span>${e}</span></div>`:E}<div class="detail-row">${this.channelIcon()} <span>${this.channelLabel()}</span></div>`}};i([S({type:String})],B.prototype,"startsAt",void 0),i([S({type:String})],B.prototype,"channel",void 0),i([S({type:String})],B.prototype,"timezone",void 0),B=i([r(),n("appointment-card-details")],B);let X=class CancelAppointmentConfirmationDialog extends O{constructor(){super(...arguments),this.open=!1,this.cancelAppointmentMutation=new Q(this,{mutationFn:async e=>this.apiClient.appointments.cancelAppointment(e),onSuccess:()=>{this.queryClientContext?.invalidateQueries({queryKey:e(this.apiClient)}),this.dispatchEvent(new CustomEvent("success",{bubbles:!0,composed:!0}))},onError:t=>{const i=m(t)?t.response?.status:void 0,n=void 0!==i&&i>=400&&i<500&&401!==i;n&&this.queryClientContext?.invalidateQueries({queryKey:e(this.apiClient)}),this.dispatchEvent(new CustomEvent("cancel-failed",{bubbles:!0,composed:!0,detail:{rejected:n}}))}}),this.handleClose=()=>{this.open=!1,this.dispatchEvent(new CustomEvent("cancel",{bubbles:!0,composed:!0}))},this.handleDismissClick=()=>{this.open=!1,this.dispatchEvent(new CustomEvent("cancel",{bubbles:!0,composed:!0}))},this.handleConfirmClick=()=>{this.cancelAppointmentMutation.run({id:this.appointmentId})}}static{this.styles=M`:host{display:contents}.price-rows{display:flex;flex-direction:column;font-family:var(--font-body);font-size:var(--text-sm);font-weight:var(--font-weight-medium);line-height:var(--text-sm--line-height);color:var(--color-card-foreground);width:100%}.price-row{display:flex;align-items:center;justify-content:space-between;min-height:34px;gap:var(--sp-2)}.price-row span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}`}render(){const e=R(),t=this.price,i=H(t),n=this.cancelAppointmentMutation.isPending;if(i){const i=J(t,e),o=`-${i}`;return z`<mq-dialog .open="${this.open}" .dismissable="${!n}" alert .closeLabel="${a("Cerrar")}" @mq-close="${this.handleClose}"><h2 slot="heading">${a("Confirmar cancelación")}</h2><p slot="subheading">${a("¿Seguro que quieres cancelar esta cita? Se te devolverá el importe pagado en un plazo de 5-10 días hábiles.")}</p><div class="price-rows"><div class="price-row"><span>${a("Importe pagado")}</span> <span>${i}</span></div><div class="price-row"><span>${a("Importe a devolver")}</span> <span>${o}</span></div></div><mq-button slot="footer" variant="outline" ?disabled="${n}" @click="${this.handleDismissClick}">${a("Volver")}</mq-button><mq-button slot="footer" variant="primary" ?disabled="${n}" @click="${this.handleConfirmClick}">${a("Confirmar")}</mq-button></mq-dialog>`}return z`<mq-dialog .open="${this.open}" .dismissable="${!n}" alert .closeLabel="${a("Cerrar")}" @mq-close="${this.handleClose}"><h2 slot="heading">${a("Confirmar cancelación")}</h2><p slot="subheading">${a("¿Seguro que quieres cancelar esta cita?")}</p><mq-button slot="footer" variant="outline" ?disabled="${n}" @click="${this.handleDismissClick}">${a("Cancelar")}</mq-button><mq-button slot="footer" variant="primary" ?disabled="${n}" @click="${this.handleConfirmClick}">${a("Confirmar")}</mq-button></mq-dialog>`}};i([o({context:p,subscribe:!0})],X.prototype,"apiClient",void 0),i([S({type:Boolean,reflect:!0})],X.prototype,"open",void 0),i([o({context:N,subscribe:!0})],X.prototype,"queryClientContext",void 0),i([S({type:String})],X.prototype,"appointmentId",void 0),i([S({type:Object})],X.prototype,"price",void 0),X=i([r(),n("cancel-appointment-confirmation-dialog")],X);const Z=M`:host{display:flex;flex-direction:column;justify-content:space-between;gap:var(--sp-6);flex:1;width:100%;min-width:0;box-sizing:border-box;color:var(--color-text-icons--primary,#0a0a22)}professional-overview{--avatar-size-lg:66px;--text-lg--line-height:1.35;display:block}.footer{display:flex;flex-direction:column;gap:var(--sp-4)}.reminder{font-family:var(--font-body);font-size:var(--text-sm);line-height:1.35;font-weight:var(--font-weight-normal);color:var(--color-text-icons--secondary,#6d658b);margin:0}.actions{--button-height-md:2.75rem;display:flex;align-items:stretch;gap:10px}.actions>mq-button{flex:1;min-width:0}.overflow{position:relative;flex:0 0 auto}.chat-label{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.chat-badge{--mq-unread-badge-size:8px;flex-shrink:0}@media (max-width:767px){.actions{flex-wrap:wrap}.actions>mq-button.join{order:1;flex:1 0 100%}}.menu{position:absolute;right:0;bottom:calc(100% + var(--sp-2));z-index:2;display:flex;flex-direction:column;min-width:176px;padding:var(--sp-1);background-color:var(--color-card,#fff);border:1px solid var(--color-border-subtle,#edecf1);border-radius:var(--border-radius-lg);box-shadow:var(--shadow-lg)}.menu-item{display:block;width:100%;background:0 0;border:none;border-radius:var(--border-radius-sm);padding:var(--sp-2) var(--sp-3);cursor:pointer;text-align:left;font-family:var(--font-body);font-size:var(--text-sm);line-height:1.35;color:var(--color-text-icons--primary,#0a0a22)}.menu-item:hover{background-color:var(--color-muted)}.menu-item.negative{color:var(--color-negative)}`;let Y=class NextAppointmentCard extends O{constructor(){super(...arguments),this.token="",this.patientHash="",this.isChatOpen=!1,this.isMenuOpen=!1,this.isCancelDialogOpen=!1,this.openDialog=null,this.getUnreadMessagesQuery=new l(this,()=>({...k(this.apiClient,{roomId:this.appointmentResource?.room?.id}),enabled:!!this.appointmentResource?.room?.id})),this.getOrganizationSetupQuery=new l(this,()=>v(this.apiClient)),this.getOrganizationSpecialtiesQuery=new l(this,()=>b(this.apiClient,{enabled:!!this.appointmentResource?.speciality?.id})),this.closeMenuOnOutsideClick=e=>{e.composedPath().includes(this)||(this.isMenuOpen=!1)},this.closeMenuOnEscape=e=>{"Escape"===e.key&&(this.isMenuOpen=!1)},this.handleJoinVideocall=()=>{y.track($(this.sessionPatientHash,this.appointmentId)),this.dispatchEvent(new I({appointmentId:this.appointmentId}))},this.handleToggleChat=()=>{this.isChatOpen=!this.isChatOpen,this.isChatOpen&&y.track(C(this.sessionPatientHash,this.appointmentId))},this.handleModify=()=>{this.isMenuOpen=!1,this.isModifyUnavailable?this.openDialog="modify":(y.track(w(this.sessionPatientHash,this.appointmentId)),this.dispatchEvent(new A({appointmentId:this.appointmentId})))},this.handleCancel=()=>{this.isMenuOpen=!1,this.isCancelUnavailable?this.openDialog="cancel":(y.track(x(this.sessionPatientHash,this.appointmentId)),this.isCancelDialogOpen=!0)}}static{this.styles=Z}connectedCallback(){super.connectedCallback(),document.addEventListener("click",this.closeMenuOnOutsideClick),document.addEventListener("keydown",this.closeMenuOnEscape)}disconnectedCallback(){document.removeEventListener("click",this.closeMenuOnOutsideClick),document.removeEventListener("keydown",this.closeMenuOnEscape),super.disconnectedCallback()}get appointmentId(){return this.appointmentResource.appointment.id??""}get channel(){return this.appointmentResource.appointment.channel}get sessionToken(){return this.token||this.loginToken?.access_token||""}get sessionPatientHash(){return this.patientHash||this.loginToken?.patient?.hash||""}get sessionTimezone(){return this.timezone??this.loginToken?.patient?.timezone}get unreadCount(){return this.getUnreadMessagesQuery.result?.data?.unread_count??0}get specialtyName(){const e=this.getOrganizationSpecialtiesQuery.result?.data?.find(e=>Number(e.id)===Number(this.appointmentResource.speciality?.id));return q(e?.code??"",R(),e?.name??this.appointmentResource.speciality?.name)}get hasChatSupport(){return this.appointmentResource.appointment.has_chat_in_appointment??this.getOrganizationSetupQuery.result?.data?.appointments?.has_chat_in_appointment??!1}get isExpired(){return h(this.appointmentResource.appointment.expires_at)}get refundPolicySeconds(){return this.getOrganizationSetupQuery.result?.data?.appointments?.seconds_before_start_to_refund_on_cancel}get policyAllowsModifyOrCancel(){return j({startsAtIso:this.appointmentResource.appointment.starts_at,refundPolicySeconds:this.refundPolicySeconds})}get isModifyUnavailable(){return this.isExpired||0===this.appointmentResource.slots.length||!this.policyAllowsModifyOrCancel}get isCancelUnavailable(){return this.isExpired||!this.policyAllowsModifyOrCancel}get modifyUnavailableMessage(){return V({action:"modify",refundPolicySeconds:this.refundPolicySeconds})}get cancelUnavailableMessage(){return V({action:"cancel",refundPolicySeconds:this.refundPolicySeconds})}renderActions(){const e=this.channel===d.videocall;return z`<div class="actions">${this.hasChatSupport?z`<mq-button variant="outline" @click="${this.handleToggleChat}"><span class="chat-label">${a("Ir a chat")}</span> ${this.unreadCount>0?z`<mq-unread-badge class="chat-badge"></mq-unread-badge>`:E}</mq-button>`:E} ${e?z`<mq-button class="join" variant="primary" @click="${this.handleJoinVideocall}">${a("Unirse a la videoconsulta")}</mq-button>`:E}<div class="overflow"><mq-button variant="outline" size="icon-lg" aria-label="${a("Más opciones")}" aria-haspopup="menu" aria-expanded="${this.isMenuOpen}" @click="${()=>{this.isMenuOpen=!this.isMenuOpen}}">${_({size:16})}</mq-button>${this.isMenuOpen?z`<div class="menu" role="menu"><button class="menu-item" type="button" role="menuitem" @click="${this.handleModify}">${a("Modificar cita")}</button> <button class="menu-item negative" type="button" role="menuitem" @click="${this.handleCancel}">${a("Anular cita")}</button></div>`:E}</div></div>`}render(){const{professional:e}=this.appointmentResource;return z`<professional-overview .name="${e.name}" .specialtyName="${this.specialtyName}" .collegiateNumber="${e.collegiate_number??void 0}" .description="${e.description??""}" .languages="${e.languages??[]}" .avatar="${e.avatar??""}"></professional-overview><appointment-card-details .startsAt="${this.appointmentResource.appointment.starts_at}" .channel="${this.channel}" .timezone="${this.sessionTimezone}"></appointment-card-details><div class="footer"><p class="reminder">${a("Recibirás un recordatorio 15 minutos antes de la consulta")}</p>${this.renderActions()}</div><mq-floating-bubble ?dismissable="${!1}" .open="${this.isChatOpen}" hideCloseButton @mq-close="${()=>{this.isChatOpen=!1}}">${this.isChatOpen?z`<mq-chat-room slot="content" .consultationId="${this.appointmentResource.appointment.id}" consultation-type="appointment" token="${this.sessionToken}" .roomId="${this.appointmentResource.room.id}" .professionalHash="${e.hash}" ?readonly="${this.isExpired}" @mq-chat-room-close="${()=>{this.isChatOpen=!1}}"></mq-chat-room>`:E}</mq-floating-bubble><appointment-action-unavailable-dialog .open="${"modify"===this.openDialog}" .heading="${a("Modificar cita")}" .message="${this.modifyUnavailableMessage}" @close="${()=>{this.openDialog=null}}"></appointment-action-unavailable-dialog><appointment-action-unavailable-dialog .open="${"cancel"===this.openDialog}" .heading="${a("Anular cita")}" .message="${this.cancelUnavailableMessage}" @close="${()=>{this.openDialog=null}}"></appointment-action-unavailable-dialog><appointment-action-unavailable-dialog .open="${"cancel-rejected"===this.openDialog}" .heading="${a("Anular cita")}" .message="${a("Lo sentimos, esta cita ya no se puede anular.")}" @close="${()=>{this.openDialog=null}}"></appointment-action-unavailable-dialog><cancel-appointment-confirmation-dialog .appointmentId="${this.appointmentResource.appointment.id}" .price="${this.appointmentResource.price??void 0}" .open="${this.isCancelDialogOpen}" @cancel="${()=>{this.isCancelDialogOpen=!1}}" @cancel-failed="${e=>{this.isCancelDialogOpen=!1,e.detail.rejected?this.openDialog="cancel-rejected":F.error(a("No hemos podido anular la cita. Inténtalo de nuevo."))}}" @success="${()=>{this.isCancelDialogOpen=!1,F.success(a("Consulta anulada correctamente")),this.dispatchEvent(new CustomEvent("appointment-cancel-confirmed",{bubbles:!0,composed:!0,detail:{id:this.appointmentId}}))}}"></cancel-appointment-confirmation-dialog>`}};i([o({context:p,subscribe:!0})],Y.prototype,"apiClient",void 0),i([o({context:c,subscribe:!0})],Y.prototype,"loginToken",void 0),i([S({type:Object})],Y.prototype,"appointmentResource",void 0),i([S({type:String})],Y.prototype,"token",void 0),i([S({type:String})],Y.prototype,"patientHash",void 0),i([S({type:String})],Y.prototype,"timezone",void 0),i([D()],Y.prototype,"isChatOpen",void 0),i([D()],Y.prototype,"isMenuOpen",void 0),i([D()],Y.prototype,"isCancelDialogOpen",void 0),i([D()],Y.prototype,"openDialog",void 0),Y=i([r(),n("next-appointment-card")],Y);export{V as a,G as g};
|
package/dist/env.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
const E="https://mediquo-landing.s3.eu-central-1.amazonaws.com/sdk-web/elements",o="production",e="0.12.
|
|
1
|
+
const E="https://mediquo-landing.s3.eu-central-1.amazonaws.com/sdk-web/elements",o="production",e="0.12.1",n={development:{MODE:"development",MQ_DEFAULT_ENV:o,MQ_ELEMENTS_VERSION:e,OPENTOK_API_KEY:"47836441",ASSETS_BASE_URL:E},production:{MODE:"production",MQ_DEFAULT_ENV:o,MQ_ELEMENTS_VERSION:e,OPENTOK_API_KEY:"46655102",ASSETS_BASE_URL:E}};let t=o;const _=new Proxy({},{get:(E,o)=>n[t??"production"][o]});function S(E){t=E}export{E as ASSETS_BASE_URL,_ as env,S as setEnv};
|
package/dist/i18n.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{c as e}from"./chunks/runtime-Bg1WXVCx.js";import{l as t}from"./chunks/chunk-FUCSYDW7-Duj5hy8S.js";import{z as n}from"./chunks/external-
|
|
1
|
+
import{c as e}from"./chunks/runtime-Bg1WXVCx.js";import{l as t}from"./chunks/chunk-FUCSYDW7-Duj5hy8S.js";import{z as n}from"./chunks/external-JLtsAfi6.js";const c=["ca_ES","de_DE","en_US","pt_PT"],s=n.enum(["en_US","pt_PT","de_DE","es_ES","ca_ES"]);function a(e){return s.safeParse(e).success}const o="__mqElementsLocalization__";function i(){const e=globalThis;return e[o]||(e[o]={initialized:!1}),e[o]}function r(){const n=i();if(!n.initialized){n.initialized=!0;try{const{setLocale:t,getLocale:s}=e({sourceLocale:"es_ES",targetLocales:c,loadLocale:async e=>{switch(e){case"en_US":default:return import("./chunks/en_US-DONnbI9l.js");case"pt_PT":return import("./chunks/pt_PT-dELUeDqB.js");case"de_DE":return import("./chunks/de_DE-Dw0iVZNb.js");case"ca_ES":return import("./chunks/ca_ES-DYhnenv6.js")}}});n.setLocale=t,n.getLocale=s}catch(e){t.warn("Localization was already configured on this page.",e)}}}const u="Localization not initialized yet.";async function l(e){const{setLocale:n}=i();if(n)return n(e);t.warn(u)}function _(){const{getLocale:e}=i();return e?e():(t.warn(u),"es_ES")}export{_ as getLocale,r as initLocalization,a as isValidLocale,l as setLocale};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{_ as t,c as e}from"./chunks/custom-element-D2ziPxYE.js";import{e as o}from"./chunks/provide-BwI4DDGF.js";import{A as i}from"./chunks/api-client-context-BXGqBAlO.js";import{a as s,x as r}from"./chunks/lit-element-DiWJYFwC.js";import{n}from"./chunks/property-scuRaFcM.js";import{r as p}from"./chunks/state-LQivXIgA.js";import{setEnv as c}from"./env.js";import{c as a,n as m}from"./chunks/api-chat-client-
|
|
1
|
+
import{_ as t,c as e}from"./chunks/custom-element-D2ziPxYE.js";import{e as o}from"./chunks/provide-BwI4DDGF.js";import{A as i}from"./chunks/api-client-context-BXGqBAlO.js";import{a as s,x as r}from"./chunks/lit-element-DiWJYFwC.js";import{n}from"./chunks/property-scuRaFcM.js";import{r as p}from"./chunks/state-LQivXIgA.js";import{setEnv as c}from"./env.js";import{c as a,n as m}from"./chunks/api-chat-client-s45J7LKB.js";import{e as u}from"./chunks/ensure-context-root-DbdqwnKB.js";import"./chunks/context-request-event-Dfydf1ub.js";import"./chunks/create-context-DqP79qjF.js";import"./chunks/external-JLtsAfi6.js";import"./chunks/chunk-NIAGR3ZC-BDlNUZa1.js";import"./chunks/parseISO-CEksKisk.js";import"./chunks/isBefore-DBi1CiNR.js";u();let h=class MqApiClientProvider extends s{constructor(){super(...arguments),this.apiClient=a()}willUpdate(t){t.has("env")&&this.env&&c(this.env);const e=m(t,{env:this.env,apiKey:this.apiKey,token:this.token,locale:this.locale});e&&(this.apiClient=e)}render(){return r`<slot></slot>`}};t([n({type:String,attribute:"api-key"})],h.prototype,"apiKey",void 0),t([n({type:String,attribute:"token"})],h.prototype,"token",void 0),t([n({type:String,attribute:"locale"})],h.prototype,"locale",void 0),t([n({type:String,attribute:"env"})],h.prototype,"env",void 0),t([o({context:i}),p()],h.prototype,"apiClient",void 0),h=t([e("mq-api-client-provider")],h);export{h as MqApiClientProvider};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{_ as e,c as t}from"./chunks/custom-element-D2ziPxYE.js";import{e as a}from"./chunks/provide-BwI4DDGF.js";import{c as s}from"./chunks/consume-CovVqBjI.js";import{m as i}from"./chunks/runtime-Bg1WXVCx.js";import{l as n}from"./chunks/localized-decorator-BlOuLhym.js";import{A as o}from"./chunks/api-client-context-BXGqBAlO.js";import{L as r}from"./chunks/login-token-task-NQJ77O_q.js";import{l as p}from"./chunks/chunk-FUCSYDW7-Duj5hy8S.js";import{i as l,a as c,x as h}from"./chunks/lit-element-DiWJYFwC.js";import{n as u}from"./chunks/property-scuRaFcM.js";import{r as y}from"./chunks/state-LQivXIgA.js";import{setEnv as d}from"./env.js";import{initLocalization as m,setLocale as v,isValidLocale as k}from"./i18n.js";import{c as b,n as f}from"./chunks/api-chat-client-
|
|
1
|
+
import{_ as e,c as t}from"./chunks/custom-element-D2ziPxYE.js";import{e as a}from"./chunks/provide-BwI4DDGF.js";import{c as s}from"./chunks/consume-CovVqBjI.js";import{m as i}from"./chunks/runtime-Bg1WXVCx.js";import{l as n}from"./chunks/localized-decorator-BlOuLhym.js";import{A as o}from"./chunks/api-client-context-BXGqBAlO.js";import{L as r}from"./chunks/login-token-task-NQJ77O_q.js";import{l as p}from"./chunks/chunk-FUCSYDW7-Duj5hy8S.js";import{i as l,a as c,x as h}from"./chunks/lit-element-DiWJYFwC.js";import{n as u}from"./chunks/property-scuRaFcM.js";import{r as y}from"./chunks/state-LQivXIgA.js";import{setEnv as d}from"./env.js";import{initLocalization as m,setLocale as v,isValidLocale as k}from"./i18n.js";import{c as b,n as f}from"./chunks/api-chat-client-s45J7LKB.js";import{u as P,s as _,r as E}from"./chunks/apple-pay-outcomes-SIvDJWN_.js";import"./chunks/context-request-event-Dfydf1ub.js";import"./chunks/context-consumer-ESdICVAb.js";import"./chunks/create-context-DqP79qjF.js";import"./chunks/task-CqjSKFwZ.js";import"./chunks/external-JLtsAfi6.js";import"./chunks/chunk-NIAGR3ZC-BDlNUZa1.js";import"./chunks/parseISO-CEksKisk.js";import"./chunks/isBefore-DBi1CiNR.js";function g(){if("undefined"==typeof navigator)return!1;const e=navigator.userAgent;return/Safari/i.test(e)&&!/Chrome|Chromium|Edg|OPR|Firefox|FxiOS/i.test(e)}async function A(e){if("undefined"==typeof window||!window.isSecureContext)return{available:!1,reason:"unsupported"};if(!function(){if("undefined"==typeof window)return!1;const e="undefined"!=typeof ApplePaySession&&"function"==typeof ApplePaySession.canMakePayments,t="undefined"!=typeof customElements&&void 0!==customElements.get("apple-pay-button");return e&&t}())return{available:!1,reason:"sdk-missing"};if(!e.trim())return{available:!1,reason:"merchant-id-missing"};const t=ApplePaySession;if(function(e){return"function"==typeof e.applePayCapabilities}(t))try{return function(e){switch(e){case"applePayUnsupported":return{available:!1,reason:"unsupported"};case"paymentCredentialsUnavailable":case"paymentCredentialsAvailable":case"paymentCredentialStatusUnknown":return{available:!0,usesQrFlow:!g()}}}((await t.applePayCapabilities(e)).paymentCredentialStatus)}catch{return t.canMakePayments()?{available:!0,usesQrFlow:!g()}:{available:!1,reason:"unsupported"}}return t.canMakePayments()?{available:!0,usesQrFlow:!g()}:{available:!1,reason:"unsupported"}}const C={es_ES:"es-ES",en_US:"en-US",pt_PT:"pt-PT",de_DE:"de-DE",ca_ES:"ca-ES"};try{m()}catch{}const S=["visa","masterCard","amex"],w=["supports3DS"],x=l`:host{display:flex;flex-direction:column;align-items:stretch;justify-content:center;gap:12px;width:100%;min-height:48px}.helper{margin:0;text-align:start;font-family:system-ui,sans-serif;font-size:12px;line-height:1.4;color:#6e6e73}.pay-row{display:block;width:100%}.pay-row--paying{opacity:.55;pointer-events:none}apple-pay-button{--apple-pay-button-width:100%;--apple-pay-button-height:48px;--apple-pay-button-border-radius:10px;--apple-pay-button-padding:0;display:block;width:100%;min-height:48px;cursor:pointer}.state{text-align:center;font-family:system-ui,sans-serif;font-size:15px;color:#86868b;margin:0}`;class ApplePayCheckoutSuccessEvent extends Event{static{this.eventName="payment-success"}constructor(e){super(ApplePayCheckoutSuccessEvent.eventName,{bubbles:!0,composed:!0}),this.detail=e}}class ApplePayCheckoutDeniedEvent extends Event{static{this.eventName="payment-denied"}constructor(e){super(ApplePayCheckoutDeniedEvent.eventName,{bubbles:!0,composed:!0}),this.detail=e}}class ApplePayCheckoutErrorEvent extends Event{static{this.eventName="payment-error"}constructor(e){super(ApplePayCheckoutErrorEvent.eventName,{bubbles:!0,composed:!0}),this.detail=e}}function j(e,t){p.warn(e,{error:t instanceof Error?t.message:String(t)})}let T=class MqApplePayCheckout extends c{constructor(){super(...arguments),this._availabilityPhase="checking",this._showQrHelper=!1,this._paying=!1,this._suppressCancelEvent=!1,this._availabilityGeneration=0,this.apiClient=b(),this._loginTokenTask=new r(this,()=>this.apiClient,{args:()=>[this.apiKey,this.token],onComplete:e=>{this._sessionToken=e.access_token,this.apiClient.setAuthToken(e.access_token),this._refreshAvailability()},onError:()=>{this.dispatchEvent(new ApplePayCheckoutErrorEvent({reason:"auth"}))}}),this._onPayClick=()=>{if(this._paying||"ready"!==this._availabilityPhase)return;let e;try{e=new ApplePaySession(3,this._buildPaymentRequest())}catch(e){return j("mq-apple-pay-checkout: failed to create ApplePaySession",e),void this.dispatchEvent(new ApplePayCheckoutErrorEvent({reason:"unsupported"}))}this._paying=!0,this._suppressCancelEvent=!1,e.onvalidatemerchant=async t=>{try{const a=await this.apiClient.payments.validateApplePayMerchant({order_id:this.sessionId,validation_url:t.validationURL});e.completeMerchantValidation(P(a))}catch(t){j("mq-apple-pay-checkout: validate-merchant failed",t),this._suppressCancelEvent=!0,this.dispatchEvent(new ApplePayCheckoutErrorEvent({reason:"merchant"})),e.abort(),this._paying=!1}},e.onpaymentauthorized=async t=>{try{const a=await this.apiClient.payments.authorizeApplePay({order_id:this.sessionId,token:_(t.payment.token)}),{status:s,consultation_id:i}=a.data,n=E(s,i,this.sessionId);switch(n.kind){case"success":e.completePayment(ApplePaySession.STATUS_SUCCESS),this.dispatchEvent(new ApplePayCheckoutSuccessEvent({sessionId:n.sessionId,reference:n.reference}));break;case"denied":e.completePayment(ApplePaySession.STATUS_FAILURE),this.dispatchEvent(new ApplePayCheckoutDeniedEvent({sessionId:n.sessionId}));break;case"error":e.completePayment(ApplePaySession.STATUS_FAILURE),this.dispatchEvent(new ApplePayCheckoutErrorEvent({reason:n.reason}))}}catch(t){j("mq-apple-pay-checkout: authorize failed",t),e.completePayment(ApplePaySession.STATUS_FAILURE),this.dispatchEvent(new ApplePayCheckoutErrorEvent({reason:"authorize"}))}finally{this._paying=!1}},e.oncancel=()=>{this._paying=!1,this._suppressCancelEvent?this._suppressCancelEvent=!1:this.dispatchEvent(new ApplePayCheckoutErrorEvent({reason:"cancelled"}))};try{e.begin()}catch(e){j("mq-apple-pay-checkout: session.begin() failed",e),this._paying=!1,this.dispatchEvent(new ApplePayCheckoutErrorEvent({reason:"unsupported"}))}}}static{this.styles=x}willUpdate(e){e.has("env")&&this.env&&d(this.env),e.has("locale")&&v(k(this.locale)?this.locale:"es_ES");const t=f(e,{env:this.env,apiKey:this.apiKey,token:this._sessionToken,locale:k(this.locale)?this.locale:"es_ES"},this.inheritedApiClient);t&&(this.apiClient=t),e.has("merchantId")&&this._loginTokenTask.value&&this._refreshAvailability()}async _refreshAvailability(){const e=++this._availabilityGeneration;this._availabilityPhase="checking",this._showQrHelper=!1;const t=await A(this.merchantId??"");e===this._availabilityGeneration&&(t.available?(this._availabilityPhase="ready",this._showQrHelper=t.usesQrFlow):this._availabilityPhase="unavailable")}get _resolvedLocale(){return k(this.locale)?this.locale:"es_ES"}_buildPaymentRequest(){return{countryCode:this.country,currencyCode:this.currency,supportedNetworks:[...S],merchantCapabilities:[...w],total:{label:this.label,amount:this.amount}}}_renderUnavailable(){return this.merchantId?.trim()?"undefined"==typeof ApplePaySession?h`<p class="state">${i("No se ha podido cargar Apple Pay. Comprueba la configuración del sitio e inténtalo de nuevo.")}</p>`:h`<p class="state">${i("Apple Pay no está disponible")}</p>`:h`<p class="state">${i("Falta el identificador de comercio de Apple Pay")}</p>`}render(){return this._loginTokenTask.render({pending:()=>h`<p class="state">${i("Preparando Apple Pay…")}</p>`,error:()=>h`<p class="state">${i("No hemos podido iniciar el pago")}</p>`,complete:()=>{return"checking"===this._availabilityPhase?h`<p class="state">${i("Comprobando Apple Pay…")}</p>`:"unavailable"===this._availabilityPhase?this._renderUnavailable():h`<div class="pay-row ${this._paying?"pay-row--paying":""}"><apple-pay-button buttonstyle="black" type="pay" locale="${e=this._resolvedLocale,C[e]??"es-ES"}" aria-label="${i("Pagar con Apple Pay")}" @click="${this._onPayClick}"></apple-pay-button></div>${this._showQrHelper?h`<p class="helper">${i("Para pagar con Apple Pay, escanea el código QR con tu iPhone (iOS 18 o posterior) y confirma el pago.")}</p>`:null}`;var e}})}};e([u({type:String,attribute:"env"})],T.prototype,"env",void 0),e([u({type:String,attribute:"api-key"})],T.prototype,"apiKey",void 0),e([u({type:String,attribute:"token"})],T.prototype,"token",void 0),e([u({type:String,attribute:"locale",reflect:!0})],T.prototype,"locale",void 0),e([u({type:String,attribute:"merchant-id"})],T.prototype,"merchantId",void 0),e([u({type:String,attribute:"session-id"})],T.prototype,"sessionId",void 0),e([u({type:String,attribute:"amount"})],T.prototype,"amount",void 0),e([u({type:String,attribute:"currency"})],T.prototype,"currency",void 0),e([u({type:String,attribute:"country"})],T.prototype,"country",void 0),e([u({type:String,attribute:"label"})],T.prototype,"label",void 0),e([y()],T.prototype,"_availabilityPhase",void 0),e([y()],T.prototype,"_showQrHelper",void 0),e([y()],T.prototype,"_paying",void 0),e([s({context:o,subscribe:!0}),y()],T.prototype,"inheritedApiClient",void 0),e([a({context:o}),y()],T.prototype,"apiClient",void 0),T=e([n(),t("mq-apple-pay-checkout")],T);export{ApplePayCheckoutDeniedEvent,ApplePayCheckoutErrorEvent,ApplePayCheckoutSuccessEvent,T as MqApplePayCheckout};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{_ as t,c as e}from"./chunks/custom-element-D2ziPxYE.js";import{a as o,x as i}from"./chunks/lit-element-DiWJYFwC.js";import{n as s}from"./chunks/property-scuRaFcM.js";import{o as n}from"./chunks/if-defined-BYeVdwgd.js";import"./mq-checkout.js";import"./chunks/provide-BwI4DDGF.js";import"./chunks/context-request-event-Dfydf1ub.js";import"./chunks/consume-CovVqBjI.js";import"./chunks/context-consumer-ESdICVAb.js";import"./chunks/runtime-Bg1WXVCx.js";import"./chunks/localized-decorator-BlOuLhym.js";import"./chunks/task-CqjSKFwZ.js";import"./chunks/api-client-context-BXGqBAlO.js";import"./chunks/create-context-DqP79qjF.js";import"./chunks/login-token-task-NQJ77O_q.js";import"./chunks/state-LQivXIgA.js";import"./chunks/query-CeeutdfT.js";import"./env.js";import"./theme.js";import"./i18n.js";import"./chunks/chunk-FUCSYDW7-Duj5hy8S.js";import"./chunks/external-
|
|
1
|
+
import{_ as t,c as e}from"./chunks/custom-element-D2ziPxYE.js";import{a as o,x as i}from"./chunks/lit-element-DiWJYFwC.js";import{n as s}from"./chunks/property-scuRaFcM.js";import{o as n}from"./chunks/if-defined-BYeVdwgd.js";import"./mq-checkout.js";import"./chunks/provide-BwI4DDGF.js";import"./chunks/context-request-event-Dfydf1ub.js";import"./chunks/consume-CovVqBjI.js";import"./chunks/context-consumer-ESdICVAb.js";import"./chunks/runtime-Bg1WXVCx.js";import"./chunks/localized-decorator-BlOuLhym.js";import"./chunks/task-CqjSKFwZ.js";import"./chunks/api-client-context-BXGqBAlO.js";import"./chunks/create-context-DqP79qjF.js";import"./chunks/login-token-task-NQJ77O_q.js";import"./chunks/state-LQivXIgA.js";import"./chunks/query-CeeutdfT.js";import"./env.js";import"./theme.js";import"./i18n.js";import"./chunks/chunk-FUCSYDW7-Duj5hy8S.js";import"./chunks/external-JLtsAfi6.js";import"./chunks/api-chat-client-s45J7LKB.js";import"./chunks/chunk-NIAGR3ZC-BDlNUZa1.js";import"./chunks/parseISO-CEksKisk.js";import"./chunks/isBefore-DBi1CiNR.js";import"./ui/mq-skeleton.js";import"./chunks/style-map-CIdqdn7C.js";import"./chunks/directive-2EDmOukv.js";import"./chunks/checkout-bridge-BFpVxNww.js";class AppointmentPaidEvent extends Event{static{this.eventName="payment-success"}constructor(t){super(AppointmentPaidEvent.eventName,{bubbles:!0,composed:!0}),this.detail=t}}let r=class MqAppointmentCheckout extends o{constructor(){super(...arguments),this._onSuccess=t=>{t.stopPropagation(),this.dispatchEvent(new AppointmentPaidEvent({appointmentId:t.detail.reference}))}}render(){return i`<mq-checkout env="${n(this.env)}" api-key="${n(this.apiKey)}" token="${n(this.token)}" locale="${n(this.locale)}" payable-reference="${n(this.payableReference)}" discount-code="${n(this.discountCode)}" consultation-reason="${n(this.consultationReason)}" @payment-success="${this._onSuccess}"></mq-checkout>`}};t([s({type:String,attribute:"env"})],r.prototype,"env",void 0),t([s({type:String,attribute:"api-key"})],r.prototype,"apiKey",void 0),t([s({type:String,attribute:"token"})],r.prototype,"token",void 0),t([s({type:String,attribute:"locale",reflect:!0})],r.prototype,"locale",void 0),t([s({type:String,attribute:"slot-id"})],r.prototype,"slotId",void 0),t([s({type:String,attribute:"service-id"})],r.prototype,"serviceId",void 0),t([s({type:String,attribute:"specialty-id"})],r.prototype,"specialtyId",void 0),t([s({type:String,attribute:"consultation-reason"})],r.prototype,"consultationReason",void 0),t([s({type:String,attribute:"discount-code"})],r.prototype,"discountCode",void 0),t([s({type:String,attribute:"payable-reference"})],r.prototype,"payableReference",void 0),t([s({attribute:!1})],r.prototype,"preconsultationDocuments",void 0),r=t([e("mq-appointment-checkout")],r);export{AppointmentPaidEvent,r as MqAppointmentCheckout};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{isValidLocale as t,setLocale as e,initLocalization as i}from"./i18n.js";import{_ as o,c as s}from"./chunks/custom-element-D2ziPxYE.js";import{e as n}from"./chunks/provide-BwI4DDGF.js";import{c as r}from"./chunks/consume-CovVqBjI.js";import{Q as a}from"./chunks/query-controller-B1byDHlF.js";import{A as c}from"./chunks/api-client-context-BXGqBAlO.js";import{g as d}from"./chunks/get-appointment-query-DuHrjd8L.js";import{a as p,i as l,x as m}from"./chunks/lit-element-DiWJYFwC.js";import{n as u}from"./chunks/property-scuRaFcM.js";import{r as h}from"./chunks/state-LQivXIgA.js";import{setEnv as k}from"./env.js";import{c as v,n as b}from"./chunks/api-chat-client-
|
|
1
|
+
import{isValidLocale as t,setLocale as e,initLocalization as i}from"./i18n.js";import{_ as o,c as s}from"./chunks/custom-element-D2ziPxYE.js";import{e as n}from"./chunks/provide-BwI4DDGF.js";import{c as r}from"./chunks/consume-CovVqBjI.js";import{Q as a}from"./chunks/query-controller-B1byDHlF.js";import{A as c}from"./chunks/api-client-context-BXGqBAlO.js";import{g as d}from"./chunks/get-appointment-query-DuHrjd8L.js";import{a as p,i as l,x as m}from"./chunks/lit-element-DiWJYFwC.js";import{n as u}from"./chunks/property-scuRaFcM.js";import{r as h}from"./chunks/state-LQivXIgA.js";import{setEnv as k}from"./env.js";import{c as v,n as b}from"./chunks/api-chat-client-s45J7LKB.js";import"./chunks/documentation-view-CzCDvut1.js";import"./ui/mq-card.js";import"./chunks/mq-layout-BndHxkbb.js";import"./chunks/runtime-Bg1WXVCx.js";import"./chunks/chunk-FUCSYDW7-Duj5hy8S.js";import"./chunks/external-JLtsAfi6.js";import"./chunks/context-request-event-Dfydf1ub.js";import"./chunks/context-consumer-ESdICVAb.js";import"./chunks/chunk-RCFIJTXZ-C6Ir0-sM.js";import"./chunks/create-context-DqP79qjF.js";import"@tanstack/query-core";import"./chunks/chunk-6CCJWPGL-TiaqZaPV.js";import"./chunks/chunk-5EJXDIGT-Bb4_pfDr.js";import"./chunks/chunk-NIAGR3ZC-BDlNUZa1.js";import"./chunks/parseISO-CEksKisk.js";import"./chunks/isBefore-DBi1CiNR.js";import"./chunks/localized-decorator-BlOuLhym.js";import"./chunks/task-CqjSKFwZ.js";import"./chunks/addSeconds-fO5orJrt.js";import"./ui/icons/calendar-icon.js";import"./chunks/if-defined-BYeVdwgd.js";import"./ui/icons/types.js";import"./ui/icons/clock-icon.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-CQJ38pW6.js";import"./ui/icons/message-bubble-icon.js";import"./chunks/mq-chat-room-C2EALCSm.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-BUV4MGML-CkhBbfUu.js";import"./ui/icons/chevron-left-icon.js";import"./chunks/query-CeeutdfT.js";import"./events.js";import"./chunks/chunk-Y4EKUX25-Bix9r5ry.js";import"./ui/icons/check-double-icon.js";import"./ui/icons/check-icon.js";import"./chunks/addDays-CdyO-PRI.js";import"./chunks/chunk-YTQUGGS3-DH0H7ld7.js";import"./chunks/index-Djkwyh_M.js";import"./chunks/mutation-controller-CR2qcqhH.js";import"./ui/mq-floating-bubble.js";import"./ui/mq-unread-badge.js";import"./ui/mq-page-title.js";import"./ui/icons/arrow-narrow-left-icon.js";import"./ui/icons/download-icon.js";import"./chunks/blob-to-base64-CUL1trde.js";import"./chunks/telemetry-client-DA2_SZBC.js";let j=class DocumentationViewSkeleton extends p{static{this.styles=l`.skeleton{border-radius:var(--border-radius-md);background-color:#f0f0f0;animation:skeleton-pulse 1.5s infinite}.page-title-skeleton{display:flex;align-items:center;gap:var(--sp-3);margin-bottom:var(--size-3)}.back-button-skeleton{width:var(--size-10);height:var(--size-10);border-radius:var(--border-radius-full);flex-shrink:0}.title-bar-skeleton{width:120px;height:24px;border-radius:var(--border-radius-sm)}@media (min-width:768px){.page-title-skeleton{gap:var(--sp-6)}.title-bar-skeleton{width:200px;height:32px}}.description-skeleton{width:100%;height:16px;border-radius:var(--border-radius-sm);margin-bottom:var(--size-2)}.description-skeleton:last-of-type{width:70%;margin-bottom:var(--size-5)}.professional-card{padding:var(--size-4);margin-bottom:var(--size-4)}.professional-name-skeleton{width:180px;height:24px;border-radius:var(--border-radius-sm);margin-bottom:var(--size-1)}.professional-speciality-skeleton{width:140px;height:16px;border-radius:var(--border-radius-sm);margin-bottom:var(--size-4)}.description-list{display:flex;flex-direction:column;gap:var(--size-4)}.description-list-item{display:flex;flex-direction:row;align-items:center;gap:var(--size-2);font-family:var(--font-body)}.icon-skeleton{width:20px;height:20px;border-radius:var(--border-radius-sm)}.text-skeleton{width:120px;height:16px;border-radius:var(--border-radius-sm)}.documents-card{padding:var(--size-4);margin-bottom:var(--size-6)}.documents-card .skeleton{background-color:var(--color-muted)}.documents-card-title-skeleton{width:150px;height:24px;border-radius:var(--border-radius-sm);margin-bottom:var(--size-4)}.button-skeleton{width:100%;height:44px;border-radius:var(--border-radius-md);margin-top:var(--size-4)}@keyframes skeleton-pulse{0%{opacity:1}50%{opacity:.6}100%{opacity:1}}`}render(){return m`<div class="page-title-skeleton"><div class="skeleton back-button-skeleton"></div><div class="skeleton title-bar-skeleton"></div></div><div class="skeleton description-skeleton"></div><div class="skeleton description-skeleton"></div><mq-card class="professional-card" roundness="md"><div><div class="skeleton professional-name-skeleton"></div><div class="skeleton professional-speciality-skeleton"></div></div><dl class="description-list"><div class="description-list-item"><div class="skeleton icon-skeleton"></div><div class="skeleton text-skeleton"></div></div><div class="description-list-item"><div class="skeleton icon-skeleton"></div><div class="skeleton text-skeleton"></div></div></dl></mq-card><mq-card class="documents-card" roundness="md"><div class="skeleton documents-card-title-skeleton"></div><div class="skeleton button-skeleton"></div></mq-card>`}};j=o([s("documentation-view-skeleton")],j);let g=class MqAppointmentDocumentation extends p{constructor(){super(...arguments),this.showMediquoBranding=!0,this.getAppointmentQuery=new a(this,()=>d(this.apiClient,{id:this.appointmentId})),this.apiClient=v()}willUpdate(i){i.has("env")&&this.env&&k(this.env),i.has("locale")&&this.locale&&t(this.locale)&&e(this.locale);const o=b(i,{env:this.env,apiKey:this.apiKey,token:this.token,locale:this.locale},this.inheritedApiClient);o&&(this.apiClient=o)}render(){return m`<mq-layout background="transparent" .showMediquoBranding="${this.showMediquoBranding}">${this.getAppointmentQuery.render({complete:t=>m`<documentation-view .token="${this.token}" .appointment="${t}"></documentation-view>`,error:()=>m``,pending:()=>m`<documentation-view-skeleton></documentation-view-skeleton>`})}</mq-layout>`}};o([u({type:String,attribute:"appointment-id"})],g.prototype,"appointmentId",void 0),o([u({type:String,attribute:"token"})],g.prototype,"token",void 0),o([u({type:String,attribute:"api-key"})],g.prototype,"apiKey",void 0),o([u({type:String,attribute:"locale"})],g.prototype,"locale",void 0),o([u({type:String,attribute:"env"})],g.prototype,"env",void 0),o([u({type:Boolean,attribute:"show-mediquo-branding",converter:{fromAttribute:t=>null===t||"false"!==t&&"0"!==t,toAttribute:t=>t?"":"false"}})],g.prototype,"showMediquoBranding",void 0),o([r({context:c,subscribe:!0}),h()],g.prototype,"inheritedApiClient",void 0),o([n({context:c}),h()],g.prototype,"apiClient",void 0),g=o([s("mq-appointment-documentation")],g),i();export{g as MqAppointmentDocumentation};
|
package/dist/mq-chat-room.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export{M as MqChatRoom,a as MqChatRoomCloseEvent,b as MqChatRoomProfileEvent}from"./chunks/mq-chat-room-
|
|
1
|
+
export{M as MqChatRoom,a as MqChatRoomCloseEvent,b as MqChatRoomProfileEvent}from"./chunks/mq-chat-room-C2EALCSm.js";import"./chunks/custom-element-D2ziPxYE.js";import"./chunks/provide-BwI4DDGF.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/api-client-context-BXGqBAlO.js";import"./chunks/create-context-DqP79qjF.js";import"./chunks/lit-element-DiWJYFwC.js";import"./chunks/property-scuRaFcM.js";import"./chunks/state-LQivXIgA.js";import"./theme.js";import"./ui/icons/x-icon.js";import"./chunks/if-defined-BYeVdwgd.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-B1byDHlF.js";import"./chunks/chunk-RCFIJTXZ-C6Ir0-sM.js";import"@tanstack/query-core";import"./chunks/chunk-BUV4MGML-CkhBbfUu.js";import"./chunks/chunk-6CCJWPGL-TiaqZaPV.js";import"./ui/icons/chevron-left-icon.js";import"./chunks/chunk-S5RWG6G2-CQJ38pW6.js";import"./chunks/chunk-NIAGR3ZC-BDlNUZa1.js";import"./chunks/parseISO-CEksKisk.js";import"./chunks/query-CeeutdfT.js";import"./chunks/chunk-FUCSYDW7-Duj5hy8S.js";import"./events.js";import"./chunks/api-chat-client-s45J7LKB.js";import"./chunks/external-JLtsAfi6.js";import"./chunks/isBefore-DBi1CiNR.js";import"./env.js";import"./chunks/chunk-Y4EKUX25-Bix9r5ry.js";import"./ui/icons/check-double-icon.js";import"./ui/icons/check-icon.js";import"./i18n.js";import"./chunks/addDays-CdyO-PRI.js";import"./chunks/chunk-YTQUGGS3-DH0H7ld7.js";import"./chunks/index-Djkwyh_M.js";import"./chunks/mutation-controller-CR2qcqhH.js";
|
package/dist/mq-checkout.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{_ as e,c as t}from"./chunks/custom-element-D2ziPxYE.js";import{e as s}from"./chunks/provide-BwI4DDGF.js";import{c as i}from"./chunks/consume-CovVqBjI.js";import{m as n}from"./chunks/runtime-Bg1WXVCx.js";import{l as o}from"./chunks/localized-decorator-BlOuLhym.js";import{s as r}from"./chunks/task-CqjSKFwZ.js";import{A as a}from"./chunks/api-client-context-BXGqBAlO.js";import{L as c}from"./chunks/login-token-task-NQJ77O_q.js";import{i as h,a as l,x as d}from"./chunks/lit-element-DiWJYFwC.js";import{n as p}from"./chunks/property-scuRaFcM.js";import{r as u}from"./chunks/state-LQivXIgA.js";import{e as m}from"./chunks/query-CeeutdfT.js";import{env as v}from"./env.js";import{tokens as f}from"./theme.js";import{initLocalization as k,setLocale as g,isValidLocale as y}from"./i18n.js";import{c as _,n as b}from"./chunks/api-chat-client-
|
|
1
|
+
import{_ as e,c as t}from"./chunks/custom-element-D2ziPxYE.js";import{e as s}from"./chunks/provide-BwI4DDGF.js";import{c as i}from"./chunks/consume-CovVqBjI.js";import{m as n}from"./chunks/runtime-Bg1WXVCx.js";import{l as o}from"./chunks/localized-decorator-BlOuLhym.js";import{s as r}from"./chunks/task-CqjSKFwZ.js";import{A as a}from"./chunks/api-client-context-BXGqBAlO.js";import{L as c}from"./chunks/login-token-task-NQJ77O_q.js";import{i as h,a as l,x as d}from"./chunks/lit-element-DiWJYFwC.js";import{n as p}from"./chunks/property-scuRaFcM.js";import{r as u}from"./chunks/state-LQivXIgA.js";import{e as m}from"./chunks/query-CeeutdfT.js";import{env as v}from"./env.js";import{tokens as f}from"./theme.js";import{initLocalization as k,setLocale as g,isValidLocale as y}from"./i18n.js";import{c as _,n as b}from"./chunks/api-chat-client-s45J7LKB.js";import"./ui/mq-skeleton.js";import{i as E,p as x,b as C}from"./chunks/checkout-bridge-BFpVxNww.js";import"./chunks/context-request-event-Dfydf1ub.js";import"./chunks/context-consumer-ESdICVAb.js";import"./chunks/create-context-DqP79qjF.js";import"./chunks/chunk-FUCSYDW7-Duj5hy8S.js";import"./chunks/external-JLtsAfi6.js";import"./chunks/chunk-NIAGR3ZC-BDlNUZa1.js";import"./chunks/parseISO-CEksKisk.js";import"./chunks/isBefore-DBi1CiNR.js";import"./chunks/style-map-CIdqdn7C.js";import"./chunks/directive-2EDmOukv.js";try{k()}catch{}const j=h`:host{height:100%;min-height:0;display:flex;flex-direction:column;flex:1}.payment-frame{position:relative;width:100%;min-width:0;display:flex;flex-direction:column;flex:1;min-height:0}.payment-frame iframe:not(.loaded){position:absolute;width:1px;height:1px;opacity:0;pointer-events:none;border:none}.payment-frame iframe.loaded{flex:none;display:block;width:100%;border:none;min-height:400px}.state{display:flex;flex-direction:column;align-items:center;justify-content:center;flex:1;gap:var(--sp-4);padding:var(--sp-8);text-align:center}.state-title{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}.state-message{font-family:var(--font-body);font-size:var(--text-base);line-height:var(--text-base--line-height);color:var(--color-neutrals-text-default);margin:0}`;class CheckoutSuccessEvent extends Event{static{this.eventName="payment-success"}constructor(e){super(CheckoutSuccessEvent.eventName,{bubbles:!0,composed:!0}),this.detail=e}}class CheckoutDeniedEvent extends Event{static{this.eventName="payment-denied"}constructor(e){super(CheckoutDeniedEvent.eventName,{bubbles:!0,composed:!0}),this.detail=e}}class CheckoutGrantedEvent extends Event{static{this.eventName="payment-granted"}constructor(){super(CheckoutGrantedEvent.eventName,{bubbles:!0,composed:!0})}}class CheckoutErrorEvent extends Event{static{this.eventName="payment-error"}constructor(e){super(CheckoutErrorEvent.eventName,{bubbles:!0,composed:!0}),this.detail=e}}let w=class MqCheckout extends l{constructor(){super(...arguments),this.apiClient=_(),this._iframeLoaded=!1,this._iframeHeight=null,this._reportedReason=null,this._renderedUrl=null,this._loginTokenTask=new c(this,()=>this.apiClient,{args:()=>[this._apiKey,this.token]}),this._onMessage=e=>{if(!E(e,this._iframe?.contentWindow))return;const t=x(e.data);switch(t?.type){case"resize":return void(this._iframeHeight=t.height);case"success":return void this.dispatchEvent(new CheckoutSuccessEvent({sessionId:t.sessionId,reference:t.reference}));case"denied":return void this.dispatchEvent(new CheckoutDeniedEvent({sessionId:t.sessionId}));case"granted":return void this.dispatchEvent(new CheckoutGrantedEvent);case"error":return void this.dispatchEvent(new CheckoutErrorEvent({reason:t.reason}))}}}static{this.styles=[f,j]}connectedCallback(){super.connectedCallback(),window.addEventListener("message",this._onMessage)}disconnectedCallback(){window.removeEventListener("message",this._onMessage),super.disconnectedCallback()}willUpdate(e){const t=b(e,{env:this.env,apiKey:this.apiKey},this.inheritedApiClient);t&&(this.apiClient=t),e.has("locale")&&g(y(this.locale)?this.locale:"es_ES"),this._url!==this._renderedUrl&&(this._renderedUrl=this._url,this._iframeLoaded=!1,this._iframeHeight=null)}updated(){const e=this._missingInput;e&&e!==this._reportedReason&&this.dispatchEvent(new CheckoutErrorEvent({reason:e})),this._reportedReason=e}get _apiKey(){return this.apiKey||this.inheritedApiClient?.getApiKey()}get _missingInput(){return this.payableReference?this._apiKey&&this.token?this._loginTokenTask.status===r.ERROR?"auth":null:"auth":"unsupported"}get _url(){const e=this._loginTokenTask.status===r.COMPLETE?this._loginTokenTask.value?.access_token:void 0;return this._missingInput||!e?null:C({apiKey:this._apiKey,token:e,payableReference:this.payableReference,env:this.env??v.MODE,locale:y(this.locale)?this.locale:"es_ES",discountCode:this.discountCode,consultationReason:this.consultationReason,methods:["card"]})}_onIframeLoad(){this._iframeLoaded=!0}_renderState(e,t){return d`<div class="state"><p class="state-title">${e}</p><p class="state-message">${t}</p></div>`}_renderMissingInput(e){return"unsupported"===e?this._renderState(n("Esta consulta no se puede pagar aquí"),n("Por favor, contacta con soporte para poder continuar.")):this._renderState(n("No hemos podido iniciar el pago"),n("Por favor, inténtalo de nuevo más tarde."))}_renderSkeleton(){return d`<mq-skeleton width="100%" height="400px" border-radius="md" role="status" aria-live="polite" aria-label="${n("Cargando portal de pago")}"></mq-skeleton>`}render(){const e=this._missingInput,t=this._url;return e?this._renderMissingInput(e):t?d`<div class="payment-frame">${this._iframeLoaded?null:this._renderSkeleton()}<iframe class="${this._iframeLoaded?"loaded":""}" src="${t}" title="${n("Portal de pago")}" allow="payment" style="${null!==this._iframeHeight?`height: ${this._iframeHeight}px;`:""}" @load="${this._onIframeLoad}"></iframe></div>`:d`<div class="payment-frame">${this._renderSkeleton()}</div>`}};e([p({type:String,attribute:"env"})],w.prototype,"env",void 0),e([p({type:String,attribute:"api-key"})],w.prototype,"apiKey",void 0),e([p({type:String,attribute:"token"})],w.prototype,"token",void 0),e([p({type:String,attribute:"locale",reflect:!0})],w.prototype,"locale",void 0),e([p({type:String,attribute:"payable-reference"})],w.prototype,"payableReference",void 0),e([p({type:String,attribute:"discount-code"})],w.prototype,"discountCode",void 0),e([p({type:String,attribute:"consultation-reason"})],w.prototype,"consultationReason",void 0),e([i({context:a,subscribe:!0}),u()],w.prototype,"inheritedApiClient",void 0),e([s({context:a}),u()],w.prototype,"apiClient",void 0),e([m("iframe")],w.prototype,"_iframe",void 0),e([u()],w.prototype,"_iframeLoaded",void 0),e([u()],w.prototype,"_iframeHeight",void 0),w=e([o(),t("mq-checkout")],w);export{CheckoutDeniedEvent,CheckoutErrorEvent,CheckoutGrantedEvent,CheckoutSuccessEvent,w as MqCheckout};
|
package/dist/mq-dashboard.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{isValidLocale as e,setLocale as t,initLocalization as i}from"./i18n.js";import{_ as o,c as n}from"./chunks/custom-element-D2ziPxYE.js";import{e as r}from"./chunks/provide-BwI4DDGF.js";import{c as a}from"./chunks/consume-CovVqBjI.js";import{l as s}from"./chunks/localized-decorator-BlOuLhym.js";import{m as l}from"./chunks/runtime-Bg1WXVCx.js";import{Q as p}from"./chunks/query-controller-B1byDHlF.js";import{A as c}from"./chunks/api-client-context-BXGqBAlO.js";import{l as h}from"./chunks/chunk-S5RWG6G2-CQJ38pW6.js";import{g as d}from"./chunks/get-organization-setup-query-De7eM6V3.js";import{t as m,m as u,v,h as g}from"./chunks/telemetry-client-DA2_SZBC.js";import{i as b,a as f,E as k,x}from"./chunks/lit-element-DiWJYFwC.js";import{n as w}from"./chunks/property-scuRaFcM.js";import{r as y}from"./chunks/state-LQivXIgA.js";import{setEnv as j}from"./env.js";import{g as q,c as z,n as $}from"./chunks/api-chat-client-Dx-sFrf2.js";import"./chunks/mq-next-appointments-BngkXupq.js";import"./chunks/mq-recent-documents-Ee-JRTdl.js";import"./chunks/mq-layout-BndHxkbb.js";import"./ui/mq-skeleton.js";import"./chunks/chunk-NIAGR3ZC-BDlNUZa1.js";import{g as C}from"./chunks/chunk-BUV4MGML-CkhBbfUu.js";import{b as _,a as S,S as E}from"./chunks/index-BkDanNQg.js";import{messageSquareIcon as B}from"./ui/icons/message-square-icon.js";import"./ui/mq-avatar.js";import"./ui/mq-button.js";import{o as M}from"./chunks/style-map-CIdqdn7C.js";import{MqAppointmentBookEvent as T,MqViewAppointmentsEvent as U}from"./events.js";export{MqAppointmentJoinVideocallEvent,MqAppointmentRescheduleEvent,MqAppointmentViewDocumentationEvent,MqViewDocumentsEvent}from"./events.js";import"./chunks/chunk-FUCSYDW7-Duj5hy8S.js";import"./chunks/external-cM_kgYO_.js";import"./chunks/context-request-event-Dfydf1ub.js";import"./chunks/context-consumer-ESdICVAb.js";import"./chunks/chunk-RCFIJTXZ-C6Ir0-sM.js";import"./chunks/create-context-DqP79qjF.js";import"@tanstack/query-core";import"./chunks/chunk-6CCJWPGL-TiaqZaPV.js";import"./chunks/chunk-5EJXDIGT-Bb4_pfDr.js";import"./chunks/isBefore-DBi1CiNR.js";import"./chunks/parseISO-CEksKisk.js";import"./chunks/next-appointment-card-BE0KW2vv.js";import"./chunks/chunk-Y4EKUX25-Bdei04iw.js";import"./chunks/refund-cancel-policy-DoMzcLlL.js";import"./ui/icons/dots-horizontal-icon.js";import"./chunks/if-defined-BYeVdwgd.js";import"./ui/icons/types.js";import"./chunks/mq-chat-room-BkXGHzrd.js";import"./theme.js";import"./ui/icons/x-icon.js";import"./ui/icons/chevron-left-icon.js";import"./chunks/query-CeeutdfT.js";import"./ui/icons/check-double-icon.js";import"./ui/icons/check-icon.js";import"./chunks/addDays-CdyO-PRI.js";import"./chunks/chunk-YTQUGGS3-sBILRfPo.js";import"./chunks/class-map-Co76I6aw.js";import"./chunks/directive-2EDmOukv.js";import"./chunks/index-Djkwyh_M.js";import"./chunks/mutation-controller-CR2qcqhH.js";import"./ui/mq-dialog.js";import"./chunks/custom-element-CiOhPWP1-DPpsGZrV.js";import"./ui/icons/calendar-icon.js";import"./ui/icons/message-bubble-icon.js";import"./ui/icons/phone-icon.js";import"./ui/icons/video-icon.js";import"./chunks/price-DU3YLTpk.js";import"./chunks/professional-overview-Ck_SPivX.js";import"./ui/icons/chevron-down-icon.js";import"./ui/mq-text-button.js";import"./ui/mq-floating-bubble.js";import"./ui/mq-unread-badge.js";import"./ui/mq-toast.js";import"./chunks/get-patient-profile-query-D9btgcxl.js";import"./chunks/index-D3_2tkC3.js";import"./ui/icons/file-icon.js";import"./chunks/index-MfyXh-qX.js";import"./ui/icons/arrow-right-icon.js";import"./chunks/index-Dw4Aeoyg.js";import"./chunks/blob-to-base64-CUL1trde.js";import"./ui/icons/download-02-icon.js";const A=b`*{box-sizing:border-box}:host{display:block;--color-text-icons--success:#34c759}@keyframes banner-reveal{from{grid-template-rows:0fr}to{grid-template-rows:1fr}}.reveal{display:grid;grid-template-rows:1fr;animation:banner-reveal .4s cubic-bezier(.22,1,.36,1)}@media (prefers-reduced-motion:reduce){.reveal{animation:none}}.clip{min-height:0;overflow:hidden}.banner{position:relative;display:flex;align-items:center;gap:var(--sp-3);width:100%;padding:var(--sp-2) var(--sp-3);background:linear-gradient(105.4deg,color-mix(in srgb,var(--color-primary) 35%,#000) 0,var(--color-primary-dark,color-mix(in srgb,var(--color-primary) 70%,#000)) 30%,var(--color-primary) 65%,color-mix(in srgb,var(--color-primary) 70%,#fff) 100%);font-family:var(--font-body)}.avatar{position:relative;flex-shrink:0;width:var(--size-10);height:var(--size-10);--avatar-size:var(--size-10)}.avatar mq-avatar{width:var(--size-10);height:var(--size-10)}.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-2_5);height:var(--size-2_5);border-radius:var(--border-radius-full);background-color:var(--color-gray-medium);border:2px solid var(--color-white)}.online-dot[data-presence=online]{background-color:var(--color-text-icons--success)}.online-dot[data-presence=absent]{background-color:var(--color-negative)}.mobile-info{display:flex;flex-direction:column;gap:var(--sp-1);min-width:0;flex:1}.mobile-title{margin:0;font-size:var(--text-xs);font-weight:var(--font-weight-semibold);line-height:normal;color:var(--color-white);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.mobile-title .mobile-role{color:#9b90ae}.mobile-welcome{margin:0;font-size:var(--text-xs);font-weight:var(--font-weight-normal);line-height:normal;color:var(--color-white);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.cta-overlay{position:absolute;inset:0;width:100%;height:100%;margin:0;padding:0;border:none;background:0 0;cursor:pointer;font:inherit;color:inherit;z-index:1}.cta-overlay:focus-visible{outline:2px solid var(--color-white);outline-offset:-3px}.cta-mobile{flex-shrink:0;display:inline-grid;place-items:center;width:var(--size-7);height:var(--size-7);color:var(--color-white)}.identity{display:none;flex-direction:column;gap:var(--sp-0_5);flex-shrink:0;min-width:0;max-width:180px}.role{margin:0;font-size:var(--text-xxs);line-height:14px;font-weight:var(--font-weight-bold);letter-spacing:.5px;text-transform:uppercase;color:#9b90ae;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.name{margin:0;font-size:15px;line-height:21px;font-weight:var(--font-weight-bold);color:var(--color-white);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.divider{display:none;flex-shrink:0;width:1px;height:var(--size-8);background-color:#9b90ae}.welcome{display:none;flex:1;min-width:0;margin:0;font-size:var(--text-sm);line-height:19.5px;color:var(--color-white);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.cta-desktop{display:none;flex-shrink:0}.icon-wrap{position:relative;display:inline-grid;place-items:center}.unread-dot{position:absolute;top:-1px;right:-1px;width:6px;height:6px;border-radius:var(--border-radius-full);background-color:var(--color-negative)}@media (min-width:768px){.banner{gap:var(--sp-5);padding:var(--sp-4) var(--sp-10)}.avatar,.avatar mq-avatar{width:var(--size-12);height:var(--size-12)}.avatar{--avatar-size:var(--size-12)}.cta-mobile,.cta-overlay,.mobile-info{display:none}.identity{display:flex}.divider{display:block}.welcome{display:block}.cta-desktop{display:inline-block}}`;let V=class SupportChatBanner extends f{constructor(){super(...arguments),this._unreadCount=0,this._professionalQuery=new p(this,()=>C(this.apiClient,{hash:this.professionalHash??""},{enabled:Boolean(this.professionalHash)})),this._onUnreadChange=e=>{this._unreadCount=e.count??0}}static{this.styles=A}connectedCallback(){super.connectedCallback(),window.addEventListener(_.eventName,this._onUnreadChange),window.dispatchEvent(new S)}disconnectedCallback(){super.disconnectedCallback(),window.removeEventListener(_.eventName,this._onUnreadChange)}get _hasUnread(){return this._unreadCount>0}_toggleSupportChat(){window.dispatchEvent(new E)}_ctaIcon(e=16){return x`<span class="icon-wrap">${B({size:e,color:"currentColor"})} ${this._hasUnread?x`<span class="unread-dot"></span>`:k}</span>`}render(){return this.professionalHash?this._professionalQuery.render({pending:()=>x``,error:()=>x``,complete:e=>{const t=e.title??l("Asesor comercial"),i=q(e);return x`<div class="reveal"><div class="clip"><div class="banner"><button class="cta-overlay" type="button" aria-label="${l("Iniciar chat con asesor comercial")}" @click="${this._toggleSupportChat}"></button> <span class="avatar"><mq-avatar .src="${e.avatar??void 0}" .fallback="${e.name}" .alt="${e.name}"></mq-avatar><span class="online-dot" data-presence="${i}"></span> </span><span class="mobile-info"><p class="mobile-title">${e.title?x`<span class="mobile-role">${e.title}</span> - ${e.name}`:e.name}</p><p class="mobile-welcome">${l("¿Cómo puedo ayudarte?")}</p></span><span class="cta-mobile" aria-hidden="true">${this._ctaIcon(28)} </span><span class="identity"><p class="role">${t}</p><p class="name">${e.name}</p></span><span class="divider" aria-hidden="true"></span><p class="welcome">${l("¿Cómo puedo ayudarte?")}</p><mq-button class="cta-desktop" variant="outline-inverted" size="md" @click="${this._toggleSupportChat}">${l("Chatea conmigo")} ${this._ctaIcon()}</mq-button></div></div></div>`}}):k}};o([a({context:c,subscribe:!0})],V.prototype,"apiClient",void 0),o([w({type:String,attribute:"professional-hash"})],V.prototype,"professionalHash",void 0),o([y()],V.prototype,"_unreadCount",void 0),V=o([s(),n("support-chat-banner")],V);const G=b`:host{padding:var(--size-6) var(--size-4);border-radius:var(--border-radius-md);background-color:var(--color-top-banner-background,transparent);display:block}.banner-inner{display:grid;grid-template-columns:1fr;gap:var(--sp-3);align-items:stretch}.banner-inner:not(.single-column) .top-banner-image{order:-1}.banner-inner.single-column{grid-template-columns:1fr}.top-banner-info{margin:0;text-align:left;display:flex;flex-direction:column;gap:var(--size-4)}.top-banner-info h3{font-family:var(--font-titles);font-size:var(--text-lg);line-height:var(--text-lg--line-height);font-weight:var(--font-weight-bold);color:var(--color-neutrals-text-default);margin:0;margin-bottom:var(--size-2)}.top-banner-info p{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-neutrals-text-default);margin:0}.top-banner-actions{display:flex;flex-direction:column;gap:var(--size-2)}.top-banner-image{background-size:cover;background-position:center;background-repeat:no-repeat;border-radius:8px;min-width:151px;min-height:11rem;position:relative}@media (min-width:768px){:host{padding:var(--sp-6)}.banner-inner{gap:var(--sp-8)}.banner-inner:not(.single-column){grid-template-columns:1fr 1fr}.banner-inner:not(.single-column) .top-banner-image{order:0}.top-banner-image{border-radius:4px;min-height:0}.top-banner-info h3{font-size:var(--text-xl);line-height:var(--text-xl--line-height)}.top-banner-info p{font-size:var(--text-base);line-height:var(--text-base--line-height)}}@media (min-width:1024px){.top-banner-info{width:100%;max-width:364px;margin-left:auto;margin-right:auto}.top-banner-info h3{font-size:var(--text-2xl);line-height:var(--text-2xl--line-height)}}`;let I=class TopBanner extends f{static{this.styles=G}_handleBook(){m.track(u(this.loginToken.patient.hash)),this.dispatchEvent(new T)}_handleViewAppointments(){m.track(v(this.loginToken.patient.hash)),this.dispatchEvent(new U({tab:"next"}))}render(){const e=this.orgSetup.home.title||l("Cita con un especialista en menos de 72 horas"),t=this.orgSetup.home.description||l("Traumatología, ginecología, endocrinología, digestivo o psiquiatría"),i=this.orgSetup.home.image_url;return x`<div class="banner-inner ${i?"":"single-column"}"><div class="top-banner-info"><div>${e?x`<h3>${e}</h3>`:k} ${t?x`<p>${t}</p>`:k}</div><div class="top-banner-actions"><mq-button variant="primary" fullwidth @click="${this._handleBook}">${l("Pedir cita")}</mq-button><mq-button variant="outline" fullwidth @click="${this._handleViewAppointments}">${l("Ver todas mis citas")}</mq-button></div></div>${i?x`<div class="top-banner-image" style="${M({background:`linear-gradient(180deg, rgba(0, 0, 0, 0) 68.17%, rgba(0, 0, 0, 0.2) 100%), url('${i}') lightgray 50% / cover no-repeat`})}"></div>`:k}</div>`}};o([a({context:h})],I.prototype,"loginToken",void 0),o([w({attribute:!1})],I.prototype,"orgSetup",void 0),I=o([s(),n("top-banner")],I);const D=b`:host{display:flex;flex-direction:column;height:100%}.support-banner{display:block;flex-shrink:0;margin-bottom:var(--sp-4)}mq-layout{flex:1 1 auto;min-height:0}.banner-area{margin-top:calc(-1 * var(--sp-4));margin-left:calc(-1 * var(--sp-4));margin-right:calc(-1 * var(--sp-4))}.content{display:flex;flex-direction:column;padding-top:var(--sp-6);gap:var(--sp-6)}mq-next-appointments{width:100%}mq-recent-documents{width:100%}@media (min-width:768px){.banner-area{margin:0 auto}.content{flex-direction:row}mq-next-appointments{width:50%}mq-recent-documents{width:50%}}`;let P=class MqDashboard extends f{constructor(){super(...arguments),this.showMediquoBranding=!0,this._trackedPageView=!1,this.orgSetupQuery=new p(this,()=>d(this.apiClient)),this.apiClient=z()}static{this.styles=D}willUpdate(i){i.has("env")&&this.env&&j(this.env),i.has("locale")&&this.locale&&e(this.locale)&&t(this.locale);const o=$(i,{env:this.env,apiKey:this.apiKey,token:this.token,locale:this.locale},this.inheritedApiClient);o&&(this.apiClient=o)}updated(){!this._trackedPageView&&this.loginToken?.patient.hash&&(this._trackedPageView=!0,m.track(g(this.loginToken.patient.hash)))}render(){return x`${this.orgSetupQuery.render({pending:()=>x``,complete:e=>e.support_professional?.hash?x`<support-chat-banner class="support-banner" professional-hash="${e.support_professional.hash}"></support-chat-banner>`:x``})}<mq-layout background="transparent" variant="wide" .showMediquoBranding="${this.showMediquoBranding}">${this.orgSetupQuery.render({pending:()=>x`<mq-skeleton class="banner-area" width="100%" height="296px" border-radius="none"></mq-skeleton>`,complete:e=>x`<top-banner class="banner-area" .orgSetup="${e}"></top-banner>`})}<div class="content"><mq-next-appointments></mq-next-appointments><mq-recent-documents></mq-recent-documents></div></mq-layout>`}};o([w({type:String,attribute:"api-key"})],P.prototype,"apiKey",void 0),o([w({type:String,attribute:"token"})],P.prototype,"token",void 0),o([w({type:String,attribute:"locale"})],P.prototype,"locale",void 0),o([w({type:String,attribute:"env"})],P.prototype,"env",void 0),o([w({type:Boolean,attribute:"show-mediquo-branding"})],P.prototype,"showMediquoBranding",void 0),o([a({context:h})],P.prototype,"loginToken",void 0),o([a({context:c,subscribe:!0}),y()],P.prototype,"inheritedApiClient",void 0),o([r({context:c}),y()],P.prototype,"apiClient",void 0),P=o([s(),n("mq-dashboard")],P),i();export{T as MqAppointmentBookEvent,P as MqDashboard,U as MqViewAppointmentsEvent};
|
|
1
|
+
import{isValidLocale as e,setLocale as t,initLocalization as i}from"./i18n.js";import{_ as o,c as n}from"./chunks/custom-element-D2ziPxYE.js";import{e as r}from"./chunks/provide-BwI4DDGF.js";import{c as a}from"./chunks/consume-CovVqBjI.js";import{l as s}from"./chunks/localized-decorator-BlOuLhym.js";import{m as l}from"./chunks/runtime-Bg1WXVCx.js";import{Q as p}from"./chunks/query-controller-B1byDHlF.js";import{A as c}from"./chunks/api-client-context-BXGqBAlO.js";import{l as h}from"./chunks/chunk-S5RWG6G2-CQJ38pW6.js";import{g as d}from"./chunks/get-organization-setup-query-De7eM6V3.js";import{t as m,m as u,v,h as g}from"./chunks/telemetry-client-DA2_SZBC.js";import{i as b,a as f,E as k,x}from"./chunks/lit-element-DiWJYFwC.js";import{n as w}from"./chunks/property-scuRaFcM.js";import{r as y}from"./chunks/state-LQivXIgA.js";import{setEnv as j}from"./env.js";import{g as q,c as z,n as $}from"./chunks/api-chat-client-s45J7LKB.js";import"./chunks/mq-next-appointments-DElOAaYx.js";import"./chunks/mq-recent-documents-DS5zUnH8.js";import"./chunks/mq-layout-BndHxkbb.js";import"./ui/mq-skeleton.js";import"./chunks/chunk-NIAGR3ZC-BDlNUZa1.js";import{g as C}from"./chunks/chunk-BUV4MGML-CkhBbfUu.js";import{b as _,a as S,S as E}from"./chunks/index-BkDanNQg.js";import{messageSquareIcon as B}from"./ui/icons/message-square-icon.js";import"./ui/mq-avatar.js";import"./ui/mq-button.js";import{o as M}from"./chunks/style-map-CIdqdn7C.js";import{MqAppointmentBookEvent as T,MqViewAppointmentsEvent as U}from"./events.js";export{MqAppointmentJoinVideocallEvent,MqAppointmentRescheduleEvent,MqAppointmentViewDocumentationEvent,MqViewDocumentsEvent}from"./events.js";import"./chunks/chunk-FUCSYDW7-Duj5hy8S.js";import"./chunks/external-JLtsAfi6.js";import"./chunks/context-request-event-Dfydf1ub.js";import"./chunks/context-consumer-ESdICVAb.js";import"./chunks/chunk-RCFIJTXZ-C6Ir0-sM.js";import"./chunks/create-context-DqP79qjF.js";import"@tanstack/query-core";import"./chunks/chunk-6CCJWPGL-TiaqZaPV.js";import"./chunks/chunk-5EJXDIGT-Bb4_pfDr.js";import"./chunks/isBefore-DBi1CiNR.js";import"./chunks/parseISO-CEksKisk.js";import"./chunks/next-appointment-card-BOzfcwjD.js";import"./chunks/chunk-Y4EKUX25-Bix9r5ry.js";import"./chunks/refund-cancel-policy-DoMzcLlL.js";import"./ui/icons/dots-horizontal-icon.js";import"./chunks/if-defined-BYeVdwgd.js";import"./ui/icons/types.js";import"./chunks/mq-chat-room-C2EALCSm.js";import"./theme.js";import"./ui/icons/x-icon.js";import"./ui/icons/chevron-left-icon.js";import"./chunks/query-CeeutdfT.js";import"./ui/icons/check-double-icon.js";import"./ui/icons/check-icon.js";import"./chunks/addDays-CdyO-PRI.js";import"./chunks/chunk-YTQUGGS3-DH0H7ld7.js";import"./chunks/class-map-Co76I6aw.js";import"./chunks/directive-2EDmOukv.js";import"./chunks/index-Djkwyh_M.js";import"./chunks/mutation-controller-CR2qcqhH.js";import"./ui/mq-dialog.js";import"./chunks/custom-element-CiOhPWP1-DPpsGZrV.js";import"./ui/icons/calendar-icon.js";import"./ui/icons/message-bubble-icon.js";import"./ui/icons/phone-icon.js";import"./ui/icons/video-icon.js";import"./chunks/price-DU3YLTpk.js";import"./chunks/professional-overview-Ck_SPivX.js";import"./ui/icons/chevron-down-icon.js";import"./ui/mq-text-button.js";import"./ui/mq-floating-bubble.js";import"./ui/mq-unread-badge.js";import"./ui/mq-toast.js";import"./chunks/get-patient-profile-query-D9btgcxl.js";import"./chunks/index-D3_2tkC3.js";import"./ui/icons/file-icon.js";import"./chunks/index-MfyXh-qX.js";import"./ui/icons/arrow-right-icon.js";import"./chunks/index-DABvAuIz.js";import"./chunks/blob-to-base64-CUL1trde.js";import"./ui/icons/download-02-icon.js";const A=b`*{box-sizing:border-box}:host{display:block;--color-text-icons--success:#34c759}@keyframes banner-reveal{from{grid-template-rows:0fr}to{grid-template-rows:1fr}}.reveal{display:grid;grid-template-rows:1fr;animation:banner-reveal .4s cubic-bezier(.22,1,.36,1)}@media (prefers-reduced-motion:reduce){.reveal{animation:none}}.clip{min-height:0;overflow:hidden}.banner{position:relative;display:flex;align-items:center;gap:var(--sp-3);width:100%;padding:var(--sp-2) var(--sp-3);background:linear-gradient(105.4deg,color-mix(in srgb,var(--color-primary) 35%,#000) 0,var(--color-primary-dark,color-mix(in srgb,var(--color-primary) 70%,#000)) 30%,var(--color-primary) 65%,color-mix(in srgb,var(--color-primary) 70%,#fff) 100%);font-family:var(--font-body)}.avatar{position:relative;flex-shrink:0;width:var(--size-10);height:var(--size-10);--avatar-size:var(--size-10)}.avatar mq-avatar{width:var(--size-10);height:var(--size-10)}.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-2_5);height:var(--size-2_5);border-radius:var(--border-radius-full);background-color:var(--color-gray-medium);border:2px solid var(--color-white)}.online-dot[data-presence=online]{background-color:var(--color-text-icons--success)}.online-dot[data-presence=absent]{background-color:var(--color-negative)}.mobile-info{display:flex;flex-direction:column;gap:var(--sp-1);min-width:0;flex:1}.mobile-title{margin:0;font-size:var(--text-xs);font-weight:var(--font-weight-semibold);line-height:normal;color:var(--color-white);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.mobile-title .mobile-role{color:#9b90ae}.mobile-welcome{margin:0;font-size:var(--text-xs);font-weight:var(--font-weight-normal);line-height:normal;color:var(--color-white);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.cta-overlay{position:absolute;inset:0;width:100%;height:100%;margin:0;padding:0;border:none;background:0 0;cursor:pointer;font:inherit;color:inherit;z-index:1}.cta-overlay:focus-visible{outline:2px solid var(--color-white);outline-offset:-3px}.cta-mobile{flex-shrink:0;display:inline-grid;place-items:center;width:var(--size-7);height:var(--size-7);color:var(--color-white)}.identity{display:none;flex-direction:column;gap:var(--sp-0_5);flex-shrink:0;min-width:0;max-width:180px}.role{margin:0;font-size:var(--text-xxs);line-height:14px;font-weight:var(--font-weight-bold);letter-spacing:.5px;text-transform:uppercase;color:#9b90ae;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.name{margin:0;font-size:15px;line-height:21px;font-weight:var(--font-weight-bold);color:var(--color-white);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.divider{display:none;flex-shrink:0;width:1px;height:var(--size-8);background-color:#9b90ae}.welcome{display:none;flex:1;min-width:0;margin:0;font-size:var(--text-sm);line-height:19.5px;color:var(--color-white);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.cta-desktop{display:none;flex-shrink:0}.icon-wrap{position:relative;display:inline-grid;place-items:center}.unread-dot{position:absolute;top:-1px;right:-1px;width:6px;height:6px;border-radius:var(--border-radius-full);background-color:var(--color-negative)}@media (min-width:768px){.banner{gap:var(--sp-5);padding:var(--sp-4) var(--sp-10)}.avatar,.avatar mq-avatar{width:var(--size-12);height:var(--size-12)}.avatar{--avatar-size:var(--size-12)}.cta-mobile,.cta-overlay,.mobile-info{display:none}.identity{display:flex}.divider{display:block}.welcome{display:block}.cta-desktop{display:inline-block}}`;let V=class SupportChatBanner extends f{constructor(){super(...arguments),this._unreadCount=0,this._professionalQuery=new p(this,()=>C(this.apiClient,{hash:this.professionalHash??""},{enabled:Boolean(this.professionalHash)})),this._onUnreadChange=e=>{this._unreadCount=e.count??0}}static{this.styles=A}connectedCallback(){super.connectedCallback(),window.addEventListener(_.eventName,this._onUnreadChange),window.dispatchEvent(new S)}disconnectedCallback(){super.disconnectedCallback(),window.removeEventListener(_.eventName,this._onUnreadChange)}get _hasUnread(){return this._unreadCount>0}_toggleSupportChat(){window.dispatchEvent(new E)}_ctaIcon(e=16){return x`<span class="icon-wrap">${B({size:e,color:"currentColor"})} ${this._hasUnread?x`<span class="unread-dot"></span>`:k}</span>`}render(){return this.professionalHash?this._professionalQuery.render({pending:()=>x``,error:()=>x``,complete:e=>{const t=e.title??l("Asesor comercial"),i=q(e);return x`<div class="reveal"><div class="clip"><div class="banner"><button class="cta-overlay" type="button" aria-label="${l("Iniciar chat con asesor comercial")}" @click="${this._toggleSupportChat}"></button> <span class="avatar"><mq-avatar .src="${e.avatar??void 0}" .fallback="${e.name}" .alt="${e.name}"></mq-avatar><span class="online-dot" data-presence="${i}"></span> </span><span class="mobile-info"><p class="mobile-title">${e.title?x`<span class="mobile-role">${e.title}</span> - ${e.name}`:e.name}</p><p class="mobile-welcome">${l("¿Cómo puedo ayudarte?")}</p></span><span class="cta-mobile" aria-hidden="true">${this._ctaIcon(28)} </span><span class="identity"><p class="role">${t}</p><p class="name">${e.name}</p></span><span class="divider" aria-hidden="true"></span><p class="welcome">${l("¿Cómo puedo ayudarte?")}</p><mq-button class="cta-desktop" variant="outline-inverted" size="md" @click="${this._toggleSupportChat}">${l("Chatea conmigo")} ${this._ctaIcon()}</mq-button></div></div></div>`}}):k}};o([a({context:c,subscribe:!0})],V.prototype,"apiClient",void 0),o([w({type:String,attribute:"professional-hash"})],V.prototype,"professionalHash",void 0),o([y()],V.prototype,"_unreadCount",void 0),V=o([s(),n("support-chat-banner")],V);const G=b`:host{padding:var(--size-6) var(--size-4);border-radius:var(--border-radius-md);background-color:var(--color-top-banner-background,transparent);display:block}.banner-inner{display:grid;grid-template-columns:1fr;gap:var(--sp-3);align-items:stretch}.banner-inner:not(.single-column) .top-banner-image{order:-1}.banner-inner.single-column{grid-template-columns:1fr}.top-banner-info{margin:0;text-align:left;display:flex;flex-direction:column;gap:var(--size-4)}.top-banner-info h3{font-family:var(--font-titles);font-size:var(--text-lg);line-height:var(--text-lg--line-height);font-weight:var(--font-weight-bold);color:var(--color-neutrals-text-default);margin:0;margin-bottom:var(--size-2)}.top-banner-info p{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-neutrals-text-default);margin:0}.top-banner-actions{display:flex;flex-direction:column;gap:var(--size-2)}.top-banner-image{background-size:cover;background-position:center;background-repeat:no-repeat;border-radius:8px;min-width:151px;min-height:11rem;position:relative}@media (min-width:768px){:host{padding:var(--sp-6)}.banner-inner{gap:var(--sp-8)}.banner-inner:not(.single-column){grid-template-columns:1fr 1fr}.banner-inner:not(.single-column) .top-banner-image{order:0}.top-banner-image{border-radius:4px;min-height:0}.top-banner-info h3{font-size:var(--text-xl);line-height:var(--text-xl--line-height)}.top-banner-info p{font-size:var(--text-base);line-height:var(--text-base--line-height)}}@media (min-width:1024px){.top-banner-info{width:100%;max-width:364px;margin-left:auto;margin-right:auto}.top-banner-info h3{font-size:var(--text-2xl);line-height:var(--text-2xl--line-height)}}`;let I=class TopBanner extends f{static{this.styles=G}_handleBook(){m.track(u(this.loginToken.patient.hash)),this.dispatchEvent(new T)}_handleViewAppointments(){m.track(v(this.loginToken.patient.hash)),this.dispatchEvent(new U({tab:"next"}))}render(){const e=this.orgSetup.home.title||l("Cita con un especialista en menos de 72 horas"),t=this.orgSetup.home.description||l("Traumatología, ginecología, endocrinología, digestivo o psiquiatría"),i=this.orgSetup.home.image_url;return x`<div class="banner-inner ${i?"":"single-column"}"><div class="top-banner-info"><div>${e?x`<h3>${e}</h3>`:k} ${t?x`<p>${t}</p>`:k}</div><div class="top-banner-actions"><mq-button variant="primary" fullwidth @click="${this._handleBook}">${l("Pedir cita")}</mq-button><mq-button variant="outline" fullwidth @click="${this._handleViewAppointments}">${l("Ver todas mis citas")}</mq-button></div></div>${i?x`<div class="top-banner-image" style="${M({background:`linear-gradient(180deg, rgba(0, 0, 0, 0) 68.17%, rgba(0, 0, 0, 0.2) 100%), url('${i}') lightgray 50% / cover no-repeat`})}"></div>`:k}</div>`}};o([a({context:h})],I.prototype,"loginToken",void 0),o([w({attribute:!1})],I.prototype,"orgSetup",void 0),I=o([s(),n("top-banner")],I);const D=b`:host{display:flex;flex-direction:column;height:100%}.support-banner{display:block;flex-shrink:0;margin-bottom:var(--sp-4)}mq-layout{flex:1 1 auto;min-height:0}.banner-area{margin-top:calc(-1 * var(--sp-4));margin-left:calc(-1 * var(--sp-4));margin-right:calc(-1 * var(--sp-4))}.content{display:flex;flex-direction:column;padding-top:var(--sp-6);gap:var(--sp-6)}mq-next-appointments{width:100%}mq-recent-documents{width:100%}@media (min-width:768px){.banner-area{margin:0 auto}.content{flex-direction:row}mq-next-appointments{width:50%}mq-recent-documents{width:50%}}`;let P=class MqDashboard extends f{constructor(){super(...arguments),this.showMediquoBranding=!0,this._trackedPageView=!1,this.orgSetupQuery=new p(this,()=>d(this.apiClient)),this.apiClient=z()}static{this.styles=D}willUpdate(i){i.has("env")&&this.env&&j(this.env),i.has("locale")&&this.locale&&e(this.locale)&&t(this.locale);const o=$(i,{env:this.env,apiKey:this.apiKey,token:this.token,locale:this.locale},this.inheritedApiClient);o&&(this.apiClient=o)}updated(){!this._trackedPageView&&this.loginToken?.patient.hash&&(this._trackedPageView=!0,m.track(g(this.loginToken.patient.hash)))}render(){return x`${this.orgSetupQuery.render({pending:()=>x``,complete:e=>e.support_professional?.hash?x`<support-chat-banner class="support-banner" professional-hash="${e.support_professional.hash}"></support-chat-banner>`:x``})}<mq-layout background="transparent" variant="wide" .showMediquoBranding="${this.showMediquoBranding}">${this.orgSetupQuery.render({pending:()=>x`<mq-skeleton class="banner-area" width="100%" height="296px" border-radius="none"></mq-skeleton>`,complete:e=>x`<top-banner class="banner-area" .orgSetup="${e}"></top-banner>`})}<div class="content"><mq-next-appointments></mq-next-appointments><mq-recent-documents></mq-recent-documents></div></mq-layout>`}};o([w({type:String,attribute:"api-key"})],P.prototype,"apiKey",void 0),o([w({type:String,attribute:"token"})],P.prototype,"token",void 0),o([w({type:String,attribute:"locale"})],P.prototype,"locale",void 0),o([w({type:String,attribute:"env"})],P.prototype,"env",void 0),o([w({type:Boolean,attribute:"show-mediquo-branding"})],P.prototype,"showMediquoBranding",void 0),o([a({context:h})],P.prototype,"loginToken",void 0),o([a({context:c,subscribe:!0}),y()],P.prototype,"inheritedApiClient",void 0),o([r({context:c}),y()],P.prototype,"apiClient",void 0),P=o([s(),n("mq-dashboard")],P),i();export{T as MqAppointmentBookEvent,P as MqDashboard,U as MqViewAppointmentsEvent};
|