@mediquo/elements 0.8.1 → 0.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (170) hide show
  1. package/README.md +36 -1
  2. package/dist/chunks/api-chat-client-CJ1EGJe3.js +1 -0
  3. package/dist/chunks/{apple-pay-outcomes-BONpT54d.js → apple-pay-outcomes-B1LrUXHR.js} +1 -1
  4. package/dist/chunks/{appointment-action-unavailable-dialog-BYse3uIa.d.ts → appointment-action-unavailable-dialog-CTiL4nMo.d.ts} +1 -1
  5. package/dist/chunks/{appointment-card-skeleton-CAQmlCTm.js → appointment-card-skeleton-B_rJNvU9.js} +1 -1
  6. package/dist/chunks/{appointment-card-skeleton-C3mV8Ky1.d.ts → appointment-card-skeleton-C2Sim4nR.d.ts} +3 -3
  7. package/dist/chunks/document.model.d-DIzMiOmd.d.ts +6 -0
  8. package/dist/chunks/{documentation-view-GZI-DC3e.js → documentation-view-DEXxBFrV.js} +1 -1
  9. package/dist/chunks/index-Btj1mwcE.js +1 -0
  10. package/dist/chunks/index-Bw-MbGKw.js +1 -0
  11. package/dist/chunks/{index-PGYfkbm6.js → index-D6Hg-beW.js} +1 -1
  12. package/dist/chunks/{index-CDBk7hVW.d.ts → index-DTEtqjQF.d.ts} +0 -13
  13. package/dist/chunks/{index-KhJ8hC0H.d.ts → index-Dbbpnw8f.d.ts} +1 -1
  14. package/dist/chunks/index-DdkeWQrh.d.ts +53 -0
  15. package/dist/chunks/index-Nf3nZ9O3.d.ts +16 -0
  16. package/dist/chunks/index-iaTXVzFa.js +1 -0
  17. package/dist/chunks/{index.d-Bl682CAX.d.ts → index.d-XSe7Hy-Q.d.ts} +12 -0
  18. package/dist/chunks/{mq-chat-room-t3j3Tq4o.d.ts → mq-chat-room-jeDvIF1Z.d.ts} +1 -1
  19. package/dist/chunks/{mq-layout-L3TlCxI0.js → mq-layout-E5mKSz4A.js} +1 -1
  20. package/dist/chunks/{mq-layout-D1j50tKd.d.ts → mq-layout-TG2K4zRv.d.ts} +2 -5
  21. package/dist/chunks/next-appointment-card-6uXWTDx5.js +1 -0
  22. package/dist/chunks/next-appointment-card-Bc65OZ1_.d.ts +61 -0
  23. package/dist/chunks/{telemetry-client-CoWay8es.js → telemetry-client-BdPx4SXu.js} +1 -1
  24. package/dist/env.js +1 -1
  25. package/dist/mq-api-client-provider.d.ts +1 -1
  26. package/dist/mq-api-client-provider.js +1 -1
  27. package/dist/mq-apple-pay-checkout.d.ts +1 -1
  28. package/dist/mq-apple-pay-checkout.js +1 -1
  29. package/dist/mq-appointment-checkout.d.ts +1 -1
  30. package/dist/mq-appointment-checkout.js +1 -1
  31. package/dist/mq-appointment-documentation.d.ts +4 -3
  32. package/dist/mq-appointment-documentation.js +1 -1
  33. package/dist/mq-chat-room.d.ts +2 -2
  34. package/dist/mq-chat-room.js +1 -1
  35. package/dist/mq-checkout.d.ts +1 -1
  36. package/dist/mq-checkout.js +1 -1
  37. package/dist/mq-dashboard.d.ts +7 -6
  38. package/dist/mq-dashboard.js +1 -1
  39. package/dist/mq-documents.d.ts +13 -13
  40. package/dist/mq-documents.js +1 -1
  41. package/dist/mq-google-pay-checkout.d.ts +1 -1
  42. package/dist/mq-google-pay-checkout.js +1 -1
  43. package/dist/mq-immediate-videocall-checkout.d.ts +1 -1
  44. package/dist/mq-immediate-videocall-checkout.js +1 -1
  45. package/dist/mq-my-appointments.d.ts +6 -6
  46. package/dist/mq-my-appointments.js +1 -1
  47. package/dist/mq-next-appointments.d.ts +10 -48
  48. package/dist/mq-next-appointments.js +1 -1
  49. package/dist/mq-payment-poller.d.ts +1 -1
  50. package/dist/mq-payment-poller.js +1 -1
  51. package/dist/mq-recent-documents.d.ts +10 -6
  52. package/dist/mq-recent-documents.js +1 -1
  53. package/dist/mq-schedule-success.d.ts +2 -2
  54. package/dist/mq-schedule-success.js +1 -1
  55. package/dist/mq-schedule.d.ts +14 -3
  56. package/dist/mq-schedule.js +1 -1
  57. package/dist/mq-support-chat.d.ts +4 -3
  58. package/dist/mq-support-chat.js +1 -1
  59. package/dist/mq-terms-and-conditions.d.ts +2 -2
  60. package/dist/mq-terms-and-conditions.js +1 -1
  61. package/dist/mq-videocall.d.ts +4 -3
  62. package/dist/mq-videocall.js +1 -1
  63. package/dist/react/mq-api-client-provider.d.ts +1 -1
  64. package/dist/react/mq-api-client-provider.js +1 -1
  65. package/dist/react/mq-apple-pay-checkout.d.ts +1 -1
  66. package/dist/react/mq-apple-pay-checkout.js +1 -1
  67. package/dist/react/mq-appointment-checkout.d.ts +1 -1
  68. package/dist/react/mq-appointment-checkout.js +1 -1
  69. package/dist/react/mq-appointment-documentation.d.ts +4 -3
  70. package/dist/react/mq-appointment-documentation.js +1 -1
  71. package/dist/react/mq-chat-room.d.ts +2 -2
  72. package/dist/react/mq-chat-room.js +1 -1
  73. package/dist/react/mq-checkout.d.ts +1 -1
  74. package/dist/react/mq-checkout.js +1 -1
  75. package/dist/react/mq-dashboard.d.ts +6 -5
  76. package/dist/react/mq-dashboard.js +1 -1
  77. package/dist/react/mq-documents-page.d.ts +5 -3
  78. package/dist/react/mq-documents-page.js +1 -1
  79. package/dist/react/mq-documents.d.ts +5 -3
  80. package/dist/react/mq-documents.js +1 -1
  81. package/dist/react/mq-google-pay-checkout.d.ts +1 -1
  82. package/dist/react/mq-google-pay-checkout.js +1 -1
  83. package/dist/react/mq-immediate-videocall-checkout.d.ts +1 -1
  84. package/dist/react/mq-immediate-videocall-checkout.js +1 -1
  85. package/dist/react/mq-my-appointments.d.ts +5 -5
  86. package/dist/react/mq-my-appointments.js +1 -1
  87. package/dist/react/mq-next-appointments.d.ts +7 -4
  88. package/dist/react/mq-next-appointments.js +1 -1
  89. package/dist/react/mq-payment-poller.d.ts +1 -1
  90. package/dist/react/mq-payment-poller.js +1 -1
  91. package/dist/react/mq-recent-documents.d.ts +6 -2
  92. package/dist/react/mq-recent-documents.js +1 -1
  93. package/dist/react/mq-schedule-success.d.ts +2 -2
  94. package/dist/react/mq-schedule-success.js +1 -1
  95. package/dist/react/mq-schedule.d.ts +5 -1
  96. package/dist/react/mq-schedule.js +1 -1
  97. package/dist/react/mq-support-chat.d.ts +5 -2
  98. package/dist/react/mq-support-chat.js +1 -1
  99. package/dist/react/mq-terms-and-conditions.d.ts +2 -2
  100. package/dist/react/mq-terms-and-conditions.js +1 -1
  101. package/dist/react/mq-videocall.d.ts +4 -3
  102. package/dist/react/mq-videocall.js +1 -1
  103. package/dist/theme.d.ts +1 -0
  104. package/dist/theme.js +1 -1
  105. package/dist/ui/icons/alert-circle-icon.js +1 -1
  106. package/dist/ui/icons/annotation-question-icon.d.ts +1 -1
  107. package/dist/ui/icons/annotation-question-icon.js +1 -1
  108. package/dist/ui/icons/arrow-narrow-left-icon.js +1 -1
  109. package/dist/ui/icons/arrow-right-icon.js +1 -1
  110. package/dist/ui/icons/briefcase-icon.d.ts +1 -1
  111. package/dist/ui/icons/briefcase-icon.js +1 -1
  112. package/dist/ui/icons/calendar-icon.d.ts +1 -1
  113. package/dist/ui/icons/calendar-icon.js +1 -1
  114. package/dist/ui/icons/chat-bubble-icon.d.ts +1 -1
  115. package/dist/ui/icons/chat-bubble-icon.js +1 -1
  116. package/dist/ui/icons/check-double-icon.js +1 -1
  117. package/dist/ui/icons/check-icon.js +1 -1
  118. package/dist/ui/icons/chevron-down-icon.js +1 -1
  119. package/dist/ui/icons/chevron-left-icon.js +1 -1
  120. package/dist/ui/icons/chevron-right-icon.js +1 -1
  121. package/dist/ui/icons/clock-icon.d.ts +1 -1
  122. package/dist/ui/icons/clock-icon.js +1 -1
  123. package/dist/ui/icons/dots-horizontal-icon.js +1 -1
  124. package/dist/ui/icons/download-02-icon.d.ts +6 -0
  125. package/dist/ui/icons/download-02-icon.js +1 -0
  126. package/dist/ui/icons/download-icon.d.ts +1 -1
  127. package/dist/ui/icons/download-icon.js +1 -1
  128. package/dist/ui/icons/file-icon.d.ts +1 -1
  129. package/dist/ui/icons/file-icon.js +1 -1
  130. package/dist/ui/icons/heartbeat-icon.js +1 -1
  131. package/dist/ui/icons/info-circle-outine-icon.d.ts +1 -1
  132. package/dist/ui/icons/info-circle-outine-icon.js +1 -1
  133. package/dist/ui/icons/message-bubble-icon.d.ts +1 -1
  134. package/dist/ui/icons/message-bubble-icon.js +1 -1
  135. package/dist/ui/icons/message-square-icon.d.ts +1 -1
  136. package/dist/ui/icons/message-square-icon.js +1 -1
  137. package/dist/ui/icons/mic-icon.d.ts +1 -1
  138. package/dist/ui/icons/mic-icon.js +1 -1
  139. package/dist/ui/icons/mic-off-icon.d.ts +1 -1
  140. package/dist/ui/icons/mic-off-icon.js +1 -1
  141. package/dist/ui/icons/phone-icon.d.ts +1 -1
  142. package/dist/ui/icons/phone-icon.js +1 -1
  143. package/dist/ui/icons/tag-icon.d.ts +1 -1
  144. package/dist/ui/icons/tag-icon.js +1 -1
  145. package/dist/ui/icons/time-left-icon.js +1 -1
  146. package/dist/ui/icons/types.d.ts +2 -1
  147. package/dist/ui/icons/types.js +1 -1
  148. package/dist/ui/icons/upload-icon.d.ts +1 -1
  149. package/dist/ui/icons/upload-icon.js +1 -1
  150. package/dist/ui/icons/video-icon.d.ts +1 -1
  151. package/dist/ui/icons/video-icon.js +1 -1
  152. package/dist/ui/icons/video-off-icon.d.ts +1 -1
  153. package/dist/ui/icons/video-off-icon.js +1 -1
  154. package/dist/ui/icons/x-icon.d.ts +1 -1
  155. package/dist/ui/icons/x-icon.js +1 -1
  156. package/dist/ui/mq-callout.js +1 -1
  157. package/dist/ui/mq-dialog.js +1 -1
  158. package/dist/ui/mq-input.d.ts +1 -1
  159. package/dist/ui/mq-select.d.ts +1 -1
  160. package/dist/ui/mq-tabs.d.ts +27 -7
  161. package/dist/ui/mq-tabs.js +79 -1
  162. package/dist/ui/mq-text-button.js +1 -1
  163. package/dist/ui/mq-textarea.d.ts +1 -1
  164. package/dist/ui/mq-unread-badge.js +1 -1
  165. package/package.json +2 -1
  166. package/dist/chunks/api-chat-client-pGZWREjK.js +0 -1
  167. package/dist/chunks/index-6gxzoTLM.js +0 -1
  168. package/dist/chunks/index-CoZKmhwT.js +0 -1
  169. package/dist/ui/icons/check-circle-icon.d.ts +0 -5
  170. package/dist/ui/icons/check-circle-icon.js +0 -1
@@ -1 +1 @@
1
- import{_ as t,c as e}from"./chunks/custom-element-D2ziPxYE.js";import{e as n}from"./chunks/provide-BwI4DDGF.js";import{c as a}from"./chunks/consume-CovVqBjI.js";import{m as o}from"./chunks/runtime-Bg1WXVCx.js";import{l as i}from"./chunks/localized-decorator-BlOuLhym.js";import{A as s}from"./chunks/api-client-context-V1UAGtKW.js";import{L as r}from"./chunks/login-token-task-Yib__6a9.js";import{l}from"./chunks/chunk-4FFT6DC2-CVWibomC.js";import{i as c,a as h,x as u}from"./chunks/lit-element-DiWJYFwC.js";import{n as p}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 g,isValidLocale as v}from"./i18n.js";import{b,c as k,n as _}from"./chunks/api-chat-client-pGZWREjK.js";import{r as C}from"./chunks/apple-pay-outcomes-BONpT54d.js";import"./chunks/context-request-event-Dfydf1ub.js";import"./chunks/context-consumer-ESdICVAb.js";import"./chunks/create-context-DqP79qjF.js";import"./chunks/task-Bj8p7kJX.js";import"./chunks/external-CJj32K_p.js";import"./chunks/chunk-HN62IQ7S-xbkIy7k_.js";import"./chunks/parseISO-Dj3qSTG8.js";import"./chunks/format-CRFiCNHw.js";import"./chunks/isBefore-CPpTogxo.js";function f(){return"undefined"!=typeof google&&"function"==typeof google.payments?.api?.PaymentsClient}const E=["PAN_ONLY","CRYPTOGRAM_3DS"],w=["VISA","MASTERCARD","AMEX"];function P(t){return{type:"PAYMENT_GATEWAY",parameters:{gateway:"globalpayments",gatewayMerchantId:t}}}function I(t){return{type:"CARD",parameters:{allowedAuthMethods:[...E],allowedCardNetworks:[...w]},tokenizationSpecification:P(t)}}function S(t){return[I(t)]}function G(t,e){return"test"===e?"TEST":"production"===e?"PRODUCTION":"development"===t?"TEST":"PRODUCTION"}function j(t,e){return function(t,e){return{apiVersion:2,apiVersionMinor:0,allowedPaymentMethods:S(t.gatewayMerchantId),merchantInfo:{merchantId:t.merchantId,merchantName:t.merchantName},transactionInfo:{totalPriceStatus:"FINAL",totalPrice:e.amount,currencyCode:e.currencyCode,countryCode:e.countryCode}}}(t,e)}async function T(t,e,n,a={}){if("undefined"==typeof window||!window.isSecureContext)return l.warn("google-pay: unavailable outside a secure context"),{available:!1,reason:"unsupported"};if(!t.trim())return l.warn("google-pay: missing merchant id"),{available:!1,reason:"merchant-id-missing"};if(!e.trim())return l.warn("google-pay: missing gateway merchant id"),{available:!1,reason:"gateway-merchant-id-missing"};if(!await function(t=8e3,e){return f()?Promise.resolve(!0):t<=0||e?.aborted?Promise.resolve(!1):new Promise(n=>{const a=Date.now()+t,o=t=>{clearInterval(s),e?.removeEventListener("abort",i),n(t)},i=()=>o(!1),s=setInterval(()=>{f()?o(!0):Date.now()>=a&&o(!1)},100);e?.addEventListener("abort",i,{once:!0})})}(a.sdkWaitTimeoutMs,a.signal))return l.warn("google-pay: pay.js was not loaded by the host page"),{available:!1,reason:"sdk-missing"};const o=G(n,a.gatewayEnvironment);try{const t=new google.payments.api.PaymentsClient({environment:o}),n=await t.isReadyToPay(function(t){return{apiVersion:2,apiVersionMinor:0,allowedPaymentMethods:S(t)}}(e));return n.result?{available:!0}:(l.warn("google-pay: isReadyToPay returned false",{environment:o}),{available:!1,reason:"unsupported"})}catch(t){return l.warn("google-pay: isReadyToPay threw",{environment:o,error:t instanceof Error?t.message:String(t)}),{available:!1,reason:"unsupported"}}}function A(t,e){return function(t){if(function(t){return"object"==typeof t&&null!==t&&"statusCode"in t&&"string"==typeof t.statusCode}(t)){const e=t.statusCode.toUpperCase();if("CANCELED"===e||"CANCELLED"===e)return!0}if(t instanceof Error){const e=t.message.toLowerCase();return e.includes("cancel")||e.includes("closed")||e.includes("abort")}return!1}(t)?{kind:"cancelled"}:b(t)&&400===t.response?.status?{kind:"denied",sessionId:e}:{kind:"authorize"}}function D(t){if(null!==t&&"object"==typeof t){const e=t.paymentMethodData?.tokenizationData,n=e?.token;if("string"==typeof n&&n.length>0)return n}throw new Error("Invalid Google Pay payment data: missing tokenizationData.token")}try{m()}catch{}const N=c`:host{display:flex;flex-direction:column;align-items:stretch;justify-content:center;gap:12px;width:100%;min-height:48px}.pay-row{display:block;width:100%}.pay-row--paying{opacity:.55;pointer-events:none}::slotted([slot=google-pay-button]){display:block;width:100%;height:var(--mq-google-pay-button-height,48px)}.state{text-align:center;font-family:system-ui,sans-serif;font-size:15px;color:#86868b;margin:0}`;class GooglePayCheckoutSuccessEvent extends Event{static{this.eventName="payment-success"}constructor(t){super(GooglePayCheckoutSuccessEvent.eventName,{bubbles:!0,composed:!0}),this.detail=t}}class GooglePayCheckoutDeniedEvent extends Event{static{this.eventName="payment-denied"}constructor(t){super(GooglePayCheckoutDeniedEvent.eventName,{bubbles:!0,composed:!0}),this.detail=t}}class GooglePayCheckoutErrorEvent extends Event{static{this.eventName="payment-error"}constructor(t){super(GooglePayCheckoutErrorEvent.eventName,{bubbles:!0,composed:!0}),this.detail=t}}const x=new Set(["sdk-missing","unsupported"]);function M(t,e){l.warn(t,{error:e instanceof Error?e.message:String(e)})}let R=class MqGooglePayCheckout extends h{constructor(){super(...arguments),this._availabilityPhase="checking",this._unavailableReason=null,this._paying=!1,this._paymentsClient=null,this._paymentsClientEnvironment=null,this._buttonHost=null,this._availabilityGeneration=0,this._availabilityAbortController=null,this._terminalErrorDispatched=!1,this.apiClient=k(),this._loginTokenTask=new r(this,()=>this.apiClient,{args:()=>[this.apiKey,this.token],onComplete:t=>{this._sessionToken=t.access_token,this.apiClient.setAuthToken(t.access_token),this._refreshAvailability()},onError:()=>{this.dispatchEvent(new GooglePayCheckoutErrorEvent({reason:"auth"}))}}),this._onPayClick=()=>{this._paying||"ready"!==this._availabilityPhase||this._processPayment()}}static{this.styles=N}willUpdate(t){t.has("env")&&(this.env&&d(this.env),this._resetPaymentsClient()),t.has("gatewayEnvironment")&&this._resetPaymentsClient(),t.has("locale")&&g(v(this.locale)?this.locale:"es_ES");const e=_(t,{env:this.env,apiKey:this.apiKey,token:this._sessionToken,locale:v(this.locale)?this.locale:"es_ES"},this.inheritedApiClient);e&&(this.apiClient=e),(t.has("merchantId")||t.has("gatewayMerchantId")||t.has("env")||t.has("gatewayEnvironment"))&&this._loginTokenTask.value&&this._refreshAvailability()}connectedCallback(){super.connectedCallback(),this._availabilityAbortController=new AbortController,this._terminalErrorDispatched=!1}disconnectedCallback(){this._availabilityAbortController?.abort(),this._availabilityAbortController=null,this._resetPaymentsClient(),super.disconnectedCallback()}_dispatchTerminalError(){this._terminalErrorDispatched||(this._terminalErrorDispatched=!0,this.dispatchEvent(new GooglePayCheckoutErrorEvent({reason:"unsupported"})))}_resetPaymentsClient(){this._paymentsClient=null,this._paymentsClientEnvironment=null,this._removeButtonHost()}_getPaymentsClient(){const t=G(this.env,this.gatewayEnvironment);return this._paymentsClient&&this._paymentsClientEnvironment===t||(this._paymentsClient=new google.payments.api.PaymentsClient({environment:t}),this._paymentsClientEnvironment=t,this._buttonHost=null),this._paymentsClient}async _refreshAvailability(){const t=++this._availabilityGeneration;this._availabilityPhase="checking",this._unavailableReason=null,this._removeButtonHost();const e=await T(this.merchantId??"",this.gatewayMerchantId??"",this.env,{signal:this._availabilityAbortController?.signal,gatewayEnvironment:this.gatewayEnvironment});if(t===this._availabilityGeneration&&this.isConnected){if(!e.available)return this._availabilityPhase="unavailable",this._unavailableReason=e.reason,void(x.has(e.reason)&&this._dispatchTerminalError());this._availabilityPhase="ready",this._unavailableReason=null}}_ensureButtonHost(){const t=this.querySelector(':scope > [slot="google-pay-button"]');if(t)return t;const e=document.createElement("div");return e.slot="google-pay-button",this.appendChild(e),e}_removeButtonHost(){this.querySelector(':scope > [slot="google-pay-button"]')?.remove(),this._buttonHost=null}_mountGooglePayButton(){if(this._buttonHost||"ready"!==this._availabilityPhase)return;const t=this._ensureButtonHost();try{const e=this._getPaymentsClient().createButton({onClick:this._onPayClick,buttonColor:"black",buttonType:"pay",buttonSizeMode:"fill"});t.replaceChildren(e),this._buttonHost=t}catch(t){M("mq-google-pay-checkout: failed to create Google Pay button",t),this._removeButtonHost(),this._availabilityPhase="unavailable",this._unavailableReason="unsupported",this._dispatchTerminalError()}}updated(t){super.updated(t),"ready"===this._availabilityPhase&&this._mountGooglePayButton()}async _processPayment(){this._paying=!0;try{const t=await this._getPaymentsClient().loadPaymentData(j({merchantId:this.merchantId,gatewayMerchantId:this.gatewayMerchantId,merchantName:this.merchantName||this.label},{amount:this.amount,currencyCode:this.currency,countryCode:this.country})),e=await this.apiClient.payments.authorizeGooglePay({order_id:this.sessionId,token:D(t)}),{status:n,consultation_id:a}=e.data,o=C(n,a,this.sessionId);switch(o.kind){case"success":this.dispatchEvent(new GooglePayCheckoutSuccessEvent({sessionId:o.sessionId,reference:o.reference}));break;case"denied":this.dispatchEvent(new GooglePayCheckoutDeniedEvent({sessionId:o.sessionId}));break;case"error":this.dispatchEvent(new GooglePayCheckoutErrorEvent({reason:o.reason}))}}catch(t){const e=A(t,this.sessionId);switch(e.kind){case"cancelled":this.dispatchEvent(new GooglePayCheckoutErrorEvent({reason:"cancelled"}));break;case"denied":this.dispatchEvent(new GooglePayCheckoutDeniedEvent({sessionId:e.sessionId}));break;case"authorize":M("mq-google-pay-checkout: authorize failed",t),this.dispatchEvent(new GooglePayCheckoutErrorEvent({reason:"authorize"}))}}finally{this._paying=!1}}_renderUnavailable(){switch(this._unavailableReason){case"merchant-id-missing":return u`<p class="state">${o("Falta el identificador de comercio de Google Pay")}</p>`;case"gateway-merchant-id-missing":return u`<p class="state">${o("Falta el identificador de pasarela de Google Pay")}</p>`;case"sdk-missing":return u`<p class="state">${o("No se ha podido cargar Google Pay. Comprueba la configuración del sitio e inténtalo de nuevo.")}</p>`;default:return u`<p class="state">${o("Google Pay no está disponible. Prueba con tarjeta u otro método de pago.")}</p>`}}render(){return this._loginTokenTask.render({pending:()=>u`<p class="state">${o("Preparando Google Pay…")}</p>`,error:()=>u`<p class="state">${o("No hemos podido iniciar el pago")}</p>`,complete:()=>"checking"===this._availabilityPhase?u`<p class="state">${o("Comprobando Google Pay…")}</p>`:"unavailable"===this._availabilityPhase?this._renderUnavailable():u`<div class="pay-row ${this._paying?"pay-row--paying":""}"><slot name="google-pay-button"></slot></div>`})}};t([p({type:String,attribute:"env"})],R.prototype,"env",void 0),t([p({type:String,attribute:"gateway-environment"})],R.prototype,"gatewayEnvironment",void 0),t([p({type:String,attribute:"api-key"})],R.prototype,"apiKey",void 0),t([p({type:String,attribute:"token"})],R.prototype,"token",void 0),t([p({type:String,attribute:"locale",reflect:!0})],R.prototype,"locale",void 0),t([p({type:String,attribute:"merchant-id"})],R.prototype,"merchantId",void 0),t([p({type:String,attribute:"gateway-merchant-id"})],R.prototype,"gatewayMerchantId",void 0),t([p({type:String,attribute:"merchant-name"})],R.prototype,"merchantName",void 0),t([p({type:String,attribute:"session-id"})],R.prototype,"sessionId",void 0),t([p({type:String,attribute:"amount"})],R.prototype,"amount",void 0),t([p({type:String,attribute:"currency"})],R.prototype,"currency",void 0),t([p({type:String,attribute:"country"})],R.prototype,"country",void 0),t([p({type:String,attribute:"label"})],R.prototype,"label",void 0),t([y()],R.prototype,"_availabilityPhase",void 0),t([y()],R.prototype,"_unavailableReason",void 0),t([y()],R.prototype,"_paying",void 0),t([a({context:s,subscribe:!0}),y()],R.prototype,"inheritedApiClient",void 0),t([n({context:s}),y()],R.prototype,"apiClient",void 0),R=t([i(),e("mq-google-pay-checkout")],R);export{GooglePayCheckoutDeniedEvent,GooglePayCheckoutErrorEvent,GooglePayCheckoutSuccessEvent,R as MqGooglePayCheckout};
1
+ import{_ as t,c as e}from"./chunks/custom-element-D2ziPxYE.js";import{e as n}from"./chunks/provide-BwI4DDGF.js";import{c as a}from"./chunks/consume-CovVqBjI.js";import{m as o}from"./chunks/runtime-Bg1WXVCx.js";import{l as i}from"./chunks/localized-decorator-BlOuLhym.js";import{A as s}from"./chunks/api-client-context-V1UAGtKW.js";import{L as r}from"./chunks/login-token-task-Yib__6a9.js";import{l}from"./chunks/chunk-4FFT6DC2-CVWibomC.js";import{i as c,a as h,x as u}from"./chunks/lit-element-DiWJYFwC.js";import{n as p}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 g,isValidLocale as v}from"./i18n.js";import{b,c as k,n as _}from"./chunks/api-chat-client-CJ1EGJe3.js";import{r as C}from"./chunks/apple-pay-outcomes-B1LrUXHR.js";import"./chunks/context-request-event-Dfydf1ub.js";import"./chunks/context-consumer-ESdICVAb.js";import"./chunks/create-context-DqP79qjF.js";import"./chunks/task-Bj8p7kJX.js";import"./chunks/external-CJj32K_p.js";import"./chunks/chunk-HN62IQ7S-xbkIy7k_.js";import"./chunks/parseISO-Dj3qSTG8.js";import"./chunks/format-CRFiCNHw.js";import"./chunks/isBefore-CPpTogxo.js";function f(){return"undefined"!=typeof google&&"function"==typeof google.payments?.api?.PaymentsClient}const E=["PAN_ONLY","CRYPTOGRAM_3DS"],w=["VISA","MASTERCARD","AMEX"];function P(t){return{type:"PAYMENT_GATEWAY",parameters:{gateway:"globalpayments",gatewayMerchantId:t}}}function I(t){return{type:"CARD",parameters:{allowedAuthMethods:[...E],allowedCardNetworks:[...w]},tokenizationSpecification:P(t)}}function S(t){return[I(t)]}function G(t,e){return"test"===e?"TEST":"production"===e?"PRODUCTION":"development"===t?"TEST":"PRODUCTION"}function j(t,e){return function(t,e){return{apiVersion:2,apiVersionMinor:0,allowedPaymentMethods:S(t.gatewayMerchantId),merchantInfo:{merchantId:t.merchantId,merchantName:t.merchantName},transactionInfo:{totalPriceStatus:"FINAL",totalPrice:e.amount,currencyCode:e.currencyCode,countryCode:e.countryCode}}}(t,e)}async function T(t,e,n,a={}){if("undefined"==typeof window||!window.isSecureContext)return l.warn("google-pay: unavailable outside a secure context"),{available:!1,reason:"unsupported"};if(!t.trim())return l.warn("google-pay: missing merchant id"),{available:!1,reason:"merchant-id-missing"};if(!e.trim())return l.warn("google-pay: missing gateway merchant id"),{available:!1,reason:"gateway-merchant-id-missing"};if(!await function(t=8e3,e){return f()?Promise.resolve(!0):t<=0||e?.aborted?Promise.resolve(!1):new Promise(n=>{const a=Date.now()+t,o=t=>{clearInterval(s),e?.removeEventListener("abort",i),n(t)},i=()=>o(!1),s=setInterval(()=>{f()?o(!0):Date.now()>=a&&o(!1)},100);e?.addEventListener("abort",i,{once:!0})})}(a.sdkWaitTimeoutMs,a.signal))return l.warn("google-pay: pay.js was not loaded by the host page"),{available:!1,reason:"sdk-missing"};const o=G(n,a.gatewayEnvironment);try{const t=new google.payments.api.PaymentsClient({environment:o}),n=await t.isReadyToPay(function(t){return{apiVersion:2,apiVersionMinor:0,allowedPaymentMethods:S(t)}}(e));return n.result?{available:!0}:(l.warn("google-pay: isReadyToPay returned false",{environment:o}),{available:!1,reason:"unsupported"})}catch(t){return l.warn("google-pay: isReadyToPay threw",{environment:o,error:t instanceof Error?t.message:String(t)}),{available:!1,reason:"unsupported"}}}function A(t,e){return function(t){if(function(t){return"object"==typeof t&&null!==t&&"statusCode"in t&&"string"==typeof t.statusCode}(t)){const e=t.statusCode.toUpperCase();if("CANCELED"===e||"CANCELLED"===e)return!0}if(t instanceof Error){const e=t.message.toLowerCase();return e.includes("cancel")||e.includes("closed")||e.includes("abort")}return!1}(t)?{kind:"cancelled"}:b(t)&&400===t.response?.status?{kind:"denied",sessionId:e}:{kind:"authorize"}}function D(t){if(null!==t&&"object"==typeof t){const e=t.paymentMethodData?.tokenizationData,n=e?.token;if("string"==typeof n&&n.length>0)return n}throw new Error("Invalid Google Pay payment data: missing tokenizationData.token")}try{m()}catch{}const N=c`:host{display:flex;flex-direction:column;align-items:stretch;justify-content:center;gap:12px;width:100%;min-height:48px}.pay-row{display:block;width:100%}.pay-row--paying{opacity:.55;pointer-events:none}::slotted([slot=google-pay-button]){display:block;width:100%;height:var(--mq-google-pay-button-height,48px)}.state{text-align:center;font-family:system-ui,sans-serif;font-size:15px;color:#86868b;margin:0}`;class GooglePayCheckoutSuccessEvent extends Event{static{this.eventName="payment-success"}constructor(t){super(GooglePayCheckoutSuccessEvent.eventName,{bubbles:!0,composed:!0}),this.detail=t}}class GooglePayCheckoutDeniedEvent extends Event{static{this.eventName="payment-denied"}constructor(t){super(GooglePayCheckoutDeniedEvent.eventName,{bubbles:!0,composed:!0}),this.detail=t}}class GooglePayCheckoutErrorEvent extends Event{static{this.eventName="payment-error"}constructor(t){super(GooglePayCheckoutErrorEvent.eventName,{bubbles:!0,composed:!0}),this.detail=t}}const x=new Set(["sdk-missing","unsupported"]);function M(t,e){l.warn(t,{error:e instanceof Error?e.message:String(e)})}let R=class MqGooglePayCheckout extends h{constructor(){super(...arguments),this._availabilityPhase="checking",this._unavailableReason=null,this._paying=!1,this._paymentsClient=null,this._paymentsClientEnvironment=null,this._buttonHost=null,this._availabilityGeneration=0,this._availabilityAbortController=null,this._terminalErrorDispatched=!1,this.apiClient=k(),this._loginTokenTask=new r(this,()=>this.apiClient,{args:()=>[this.apiKey,this.token],onComplete:t=>{this._sessionToken=t.access_token,this.apiClient.setAuthToken(t.access_token),this._refreshAvailability()},onError:()=>{this.dispatchEvent(new GooglePayCheckoutErrorEvent({reason:"auth"}))}}),this._onPayClick=()=>{this._paying||"ready"!==this._availabilityPhase||this._processPayment()}}static{this.styles=N}willUpdate(t){t.has("env")&&(this.env&&d(this.env),this._resetPaymentsClient()),t.has("gatewayEnvironment")&&this._resetPaymentsClient(),t.has("locale")&&g(v(this.locale)?this.locale:"es_ES");const e=_(t,{env:this.env,apiKey:this.apiKey,token:this._sessionToken,locale:v(this.locale)?this.locale:"es_ES"},this.inheritedApiClient);e&&(this.apiClient=e),(t.has("merchantId")||t.has("gatewayMerchantId")||t.has("env")||t.has("gatewayEnvironment"))&&this._loginTokenTask.value&&this._refreshAvailability()}connectedCallback(){super.connectedCallback(),this._availabilityAbortController=new AbortController,this._terminalErrorDispatched=!1}disconnectedCallback(){this._availabilityAbortController?.abort(),this._availabilityAbortController=null,this._resetPaymentsClient(),super.disconnectedCallback()}_dispatchTerminalError(){this._terminalErrorDispatched||(this._terminalErrorDispatched=!0,this.dispatchEvent(new GooglePayCheckoutErrorEvent({reason:"unsupported"})))}_resetPaymentsClient(){this._paymentsClient=null,this._paymentsClientEnvironment=null,this._removeButtonHost()}_getPaymentsClient(){const t=G(this.env,this.gatewayEnvironment);return this._paymentsClient&&this._paymentsClientEnvironment===t||(this._paymentsClient=new google.payments.api.PaymentsClient({environment:t}),this._paymentsClientEnvironment=t,this._buttonHost=null),this._paymentsClient}async _refreshAvailability(){const t=++this._availabilityGeneration;this._availabilityPhase="checking",this._unavailableReason=null,this._removeButtonHost();const e=await T(this.merchantId??"",this.gatewayMerchantId??"",this.env,{signal:this._availabilityAbortController?.signal,gatewayEnvironment:this.gatewayEnvironment});if(t===this._availabilityGeneration&&this.isConnected){if(!e.available)return this._availabilityPhase="unavailable",this._unavailableReason=e.reason,void(x.has(e.reason)&&this._dispatchTerminalError());this._availabilityPhase="ready",this._unavailableReason=null}}_ensureButtonHost(){const t=this.querySelector(':scope > [slot="google-pay-button"]');if(t)return t;const e=document.createElement("div");return e.slot="google-pay-button",this.appendChild(e),e}_removeButtonHost(){this.querySelector(':scope > [slot="google-pay-button"]')?.remove(),this._buttonHost=null}_mountGooglePayButton(){if(this._buttonHost||"ready"!==this._availabilityPhase)return;const t=this._ensureButtonHost();try{const e=this._getPaymentsClient().createButton({onClick:this._onPayClick,buttonColor:"black",buttonType:"pay",buttonSizeMode:"fill"});t.replaceChildren(e),this._buttonHost=t}catch(t){M("mq-google-pay-checkout: failed to create Google Pay button",t),this._removeButtonHost(),this._availabilityPhase="unavailable",this._unavailableReason="unsupported",this._dispatchTerminalError()}}updated(t){super.updated(t),"ready"===this._availabilityPhase&&this._mountGooglePayButton()}async _processPayment(){this._paying=!0;try{const t=await this._getPaymentsClient().loadPaymentData(j({merchantId:this.merchantId,gatewayMerchantId:this.gatewayMerchantId,merchantName:this.merchantName||this.label},{amount:this.amount,currencyCode:this.currency,countryCode:this.country})),e=await this.apiClient.payments.authorizeGooglePay({order_id:this.sessionId,token:D(t)}),{status:n,consultation_id:a}=e.data,o=C(n,a,this.sessionId);switch(o.kind){case"success":this.dispatchEvent(new GooglePayCheckoutSuccessEvent({sessionId:o.sessionId,reference:o.reference}));break;case"denied":this.dispatchEvent(new GooglePayCheckoutDeniedEvent({sessionId:o.sessionId}));break;case"error":this.dispatchEvent(new GooglePayCheckoutErrorEvent({reason:o.reason}))}}catch(t){const e=A(t,this.sessionId);switch(e.kind){case"cancelled":this.dispatchEvent(new GooglePayCheckoutErrorEvent({reason:"cancelled"}));break;case"denied":this.dispatchEvent(new GooglePayCheckoutDeniedEvent({sessionId:e.sessionId}));break;case"authorize":M("mq-google-pay-checkout: authorize failed",t),this.dispatchEvent(new GooglePayCheckoutErrorEvent({reason:"authorize"}))}}finally{this._paying=!1}}_renderUnavailable(){switch(this._unavailableReason){case"merchant-id-missing":return u`<p class="state">${o("Falta el identificador de comercio de Google Pay")}</p>`;case"gateway-merchant-id-missing":return u`<p class="state">${o("Falta el identificador de pasarela de Google Pay")}</p>`;case"sdk-missing":return u`<p class="state">${o("No se ha podido cargar Google Pay. Comprueba la configuración del sitio e inténtalo de nuevo.")}</p>`;default:return u`<p class="state">${o("Google Pay no está disponible. Prueba con tarjeta u otro método de pago.")}</p>`}}render(){return this._loginTokenTask.render({pending:()=>u`<p class="state">${o("Preparando Google Pay…")}</p>`,error:()=>u`<p class="state">${o("No hemos podido iniciar el pago")}</p>`,complete:()=>"checking"===this._availabilityPhase?u`<p class="state">${o("Comprobando Google Pay…")}</p>`:"unavailable"===this._availabilityPhase?this._renderUnavailable():u`<div class="pay-row ${this._paying?"pay-row--paying":""}"><slot name="google-pay-button"></slot></div>`})}};t([p({type:String,attribute:"env"})],R.prototype,"env",void 0),t([p({type:String,attribute:"gateway-environment"})],R.prototype,"gatewayEnvironment",void 0),t([p({type:String,attribute:"api-key"})],R.prototype,"apiKey",void 0),t([p({type:String,attribute:"token"})],R.prototype,"token",void 0),t([p({type:String,attribute:"locale",reflect:!0})],R.prototype,"locale",void 0),t([p({type:String,attribute:"merchant-id"})],R.prototype,"merchantId",void 0),t([p({type:String,attribute:"gateway-merchant-id"})],R.prototype,"gatewayMerchantId",void 0),t([p({type:String,attribute:"merchant-name"})],R.prototype,"merchantName",void 0),t([p({type:String,attribute:"session-id"})],R.prototype,"sessionId",void 0),t([p({type:String,attribute:"amount"})],R.prototype,"amount",void 0),t([p({type:String,attribute:"currency"})],R.prototype,"currency",void 0),t([p({type:String,attribute:"country"})],R.prototype,"country",void 0),t([p({type:String,attribute:"label"})],R.prototype,"label",void 0),t([y()],R.prototype,"_availabilityPhase",void 0),t([y()],R.prototype,"_unavailableReason",void 0),t([y()],R.prototype,"_paying",void 0),t([a({context:s,subscribe:!0}),y()],R.prototype,"inheritedApiClient",void 0),t([n({context:s}),y()],R.prototype,"apiClient",void 0),R=t([i(),e("mq-google-pay-checkout")],R);export{GooglePayCheckoutDeniedEvent,GooglePayCheckoutErrorEvent,GooglePayCheckoutSuccessEvent,R as MqGooglePayCheckout};
@@ -4,7 +4,7 @@ import { Env } from './env.js';
4
4
  import { Locale } from './i18n.js';
5
5
  import './mq-checkout.js';
6
6
  import 'zod';
7
- import './chunks/index.d-Bl682CAX.js';
7
+ import './chunks/index.d-XSe7Hy-Q.js';
8
8
  import 'axios';
9
9
  import './chunks/schemas.d-b6_AekBb.js';
10
10
  import './ui/mq-skeleton.js';
@@ -1 +1 @@
1
- import{_ as e,c as t}from"./chunks/custom-element-D2ziPxYE.js";import{a as s,x as i}from"./chunks/lit-element-DiWJYFwC.js";import{n as o}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-Bj8p7kJX.js";import"./chunks/api-chat-client-pGZWREjK.js";import"./chunks/chunk-HN62IQ7S-xbkIy7k_.js";import"./chunks/parseISO-Dj3qSTG8.js";import"./chunks/format-CRFiCNHw.js";import"./chunks/external-CJj32K_p.js";import"./chunks/isBefore-CPpTogxo.js";import"./env.js";import"./chunks/api-client-context-V1UAGtKW.js";import"./chunks/create-context-DqP79qjF.js";import"./chunks/login-token-task-Yib__6a9.js";import"./chunks/chunk-4FFT6DC2-CVWibomC.js";import"./chunks/state-LQivXIgA.js";import"./theme.js";import"./i18n.js";import"./ui/mq-skeleton.js";import"./chunks/style-map-CIdqdn7C.js";import"./chunks/directive-2EDmOukv.js";class ImmediateVideocallPaidEvent extends Event{static{this.eventName="payment-success"}constructor(e){super(ImmediateVideocallPaidEvent.eventName,{bubbles:!0,composed:!0}),this.detail=e}}let c=class MqImmediateVideocallCheckout extends s{constructor(){super(...arguments),this._provideSession=async e=>{const t=await e.payments.createImmediateVideocallPaymentLink({video_call_schedule_id:this.videoCallScheduleId});return{sessionId:t.session_id,paymentUrl:t.payment_link}},this._onSuccess=e=>{e.stopPropagation(),this.dispatchEvent(new ImmediateVideocallPaidEvent({videoCallId:e.detail.reference}))}}render(){return i`<mq-checkout env="${n(this.env)}" api-key="${this.apiKey}" token="${this.token}" locale="${this.locale}" .provideSession="${this._provideSession}" @payment-success="${this._onSuccess}"></mq-checkout>`}};e([o({type:String,attribute:"env"})],c.prototype,"env",void 0),e([o({type:String,attribute:"api-key"})],c.prototype,"apiKey",void 0),e([o({type:String,attribute:"token"})],c.prototype,"token",void 0),e([o({type:String,attribute:"locale",reflect:!0})],c.prototype,"locale",void 0),e([o({type:String,attribute:"video-call-schedule-id"})],c.prototype,"videoCallScheduleId",void 0),c=e([t("mq-immediate-videocall-checkout")],c);export{ImmediateVideocallPaidEvent,c as MqImmediateVideocallCheckout};
1
+ import{_ as e,c as t}from"./chunks/custom-element-D2ziPxYE.js";import{a as s,x as i}from"./chunks/lit-element-DiWJYFwC.js";import{n as o}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-Bj8p7kJX.js";import"./chunks/api-chat-client-CJ1EGJe3.js";import"./chunks/chunk-HN62IQ7S-xbkIy7k_.js";import"./chunks/parseISO-Dj3qSTG8.js";import"./chunks/format-CRFiCNHw.js";import"./chunks/external-CJj32K_p.js";import"./chunks/isBefore-CPpTogxo.js";import"./env.js";import"./chunks/api-client-context-V1UAGtKW.js";import"./chunks/create-context-DqP79qjF.js";import"./chunks/login-token-task-Yib__6a9.js";import"./chunks/chunk-4FFT6DC2-CVWibomC.js";import"./chunks/state-LQivXIgA.js";import"./theme.js";import"./i18n.js";import"./ui/mq-skeleton.js";import"./chunks/style-map-CIdqdn7C.js";import"./chunks/directive-2EDmOukv.js";class ImmediateVideocallPaidEvent extends Event{static{this.eventName="payment-success"}constructor(e){super(ImmediateVideocallPaidEvent.eventName,{bubbles:!0,composed:!0}),this.detail=e}}let c=class MqImmediateVideocallCheckout extends s{constructor(){super(...arguments),this._provideSession=async e=>{const t=await e.payments.createImmediateVideocallPaymentLink({video_call_schedule_id:this.videoCallScheduleId});return{sessionId:t.session_id,paymentUrl:t.payment_link}},this._onSuccess=e=>{e.stopPropagation(),this.dispatchEvent(new ImmediateVideocallPaidEvent({videoCallId:e.detail.reference}))}}render(){return i`<mq-checkout env="${n(this.env)}" api-key="${this.apiKey}" token="${this.token}" locale="${this.locale}" .provideSession="${this._provideSession}" @payment-success="${this._onSuccess}"></mq-checkout>`}};e([o({type:String,attribute:"env"})],c.prototype,"env",void 0),e([o({type:String,attribute:"api-key"})],c.prototype,"apiKey",void 0),e([o({type:String,attribute:"token"})],c.prototype,"token",void 0),e([o({type:String,attribute:"locale",reflect:!0})],c.prototype,"locale",void 0),e([o({type:String,attribute:"video-call-schedule-id"})],c.prototype,"videoCallScheduleId",void 0),c=e([t("mq-immediate-videocall-checkout")],c);export{ImmediateVideocallPaidEvent,c as MqImmediateVideocallCheckout};
@@ -2,23 +2,23 @@ export { A as AppointmentDetails } from './chunks/appointment-details-CVEDe_k0.j
2
2
  import * as lit_html from 'lit-html';
3
3
  import * as lit from 'lit';
4
4
  import { LitElement } from 'lit';
5
- import { z } from 'zod';
6
5
  import { MqTabsSelectEvent } from './ui/mq-tabs.js';
7
- import { M as MediquoApiChatClient } from './chunks/index.d-Bl682CAX.js';
8
- import './chunks/appointment-card-skeleton-C3mV8Ky1.js';
6
+ import { z } from 'zod';
7
+ import { M as MediquoApiChatClient } from './chunks/index.d-XSe7Hy-Q.js';
8
+ import './chunks/appointment-card-skeleton-C2Sim4nR.js';
9
9
  import './ui/mq-button.js';
10
- import './ui/mq-page-title.js';
10
+ import './chunks/next-appointment-card-Bc65OZ1_.js';
11
11
  export { P as ProfessionalOverview } from './chunks/professional-overview-mO3tuMuH.js';
12
12
  import './chunks/appointment.model.d-BWwBLaEL.js';
13
13
  import 'axios';
14
14
  import './chunks/schemas.d-b6_AekBb.js';
15
15
  import './ui/mq-card.js';
16
- import './chunks/mq-chat-room-t3j3Tq4o.js';
16
+ import './chunks/mq-chat-room-jeDvIF1Z.js';
17
17
  import './ui/mq-avatar.js';
18
18
  import './ui/mq-skeleton.js';
19
19
  import '@tanstack/query-core';
20
20
  import './ui/mq-floating-bubble.js';
21
- import './chunks/appointment-action-unavailable-dialog-BYse3uIa.js';
21
+ import './chunks/appointment-action-unavailable-dialog-CTiL4nMo.js';
22
22
  import './chunks/price.d-CwLosdAN.js';
23
23
  import './ui/mq-dialog.js';
24
24
  import './ui/mq-unread-badge.js';
@@ -1 +1 @@
1
- export{A as AppointmentDetails}from"./chunks/appointment-details-DXLBQnPN.js";import{_ as t,c as e}from"./chunks/custom-element-D2ziPxYE.js";import{m as i}from"./chunks/runtime-Bg1WXVCx.js";import{l as s}from"./chunks/localized-decorator-BlOuLhym.js";import{a as n,i as o,x as a}from"./chunks/lit-element-DiWJYFwC.js";import{n as r}from"./chunks/property-scuRaFcM.js";import{e as p}from"./chunks/external-CJj32K_p.js";import{MqHomeEvent as c}from"./events.js";import"./ui/mq-tabs.js";import{c as m}from"./chunks/consume-CovVqBjI.js";import{A as l}from"./chunks/api-client-context-V1UAGtKW.js";import{a as d}from"./chunks/api-chat-client-pGZWREjK.js";import"./chunks/appointment-card-skeleton-CAQmlCTm.js";import"./ui/mq-button.js";import{Q as u}from"./chunks/query-controller-BlO1Ax65.js";import{a as h}from"./chunks/action-unavailable-message-BIgsXk9u.js";import"./ui/mq-page-title.js";export{P as ProfessionalOverview}from"./chunks/professional-overview-C4H_znIJ.js";import"./chunks/chunk-HN62IQ7S-xbkIy7k_.js";import"./chunks/parseISO-Dj3qSTG8.js";import"./chunks/format-CRFiCNHw.js";import"./chunks/addSeconds-ofMnxlgT.js";import"./chunks/class-map-Co76I6aw.js";import"./chunks/directive-2EDmOukv.js";import"./i18n.js";import"./chunks/chunk-4FFT6DC2-CVWibomC.js";import"./ui/icons/briefcase-icon.js";import"./ui/icons/types.js";import"./ui/icons/calendar-icon.js";import"./ui/icons/clock-icon.js";import"./ui/icons/message-bubble-icon.js";import"./ui/icons/phone-icon.js";import"./chunks/context-consumer-ESdICVAb.js";import"./chunks/context-request-event-Dfydf1ub.js";import"./chunks/create-context-DqP79qjF.js";import"./chunks/isBefore-CPpTogxo.js";import"./env.js";import"./chunks/get-organization-setup-query-Dr1cXnHl.js";import"./chunks/chunk-6CCJWPGL-TiaqZaPV.js";import"./chunks/telemetry-client-CoWay8es.js";import"./chunks/get-schedule-services-query-Fzvb9ug9.js";import"./chunks/chunk-Y4EKUX25-QqMl3eiq.js";import"./chunks/state-LQivXIgA.js";import"./ui/mq-card.js";import"./chunks/chunk-S5RWG6G2-DPesx3Od.js";import"./mq-chat-room.js";import"./chunks/provide-BwI4DDGF.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"./chunks/if-defined-BYeVdwgd.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/chunk-YTQUGGS3-DmCGIoFy.js";import"./chunks/chunk-RCFIJTXZ-C6Ir0-sM.js";import"./chunks/mutation-controller-CR2qcqhH.js";import"./chunks/query-Cjvi4_dT.js";import"./ui/mq-floating-bubble.js";import"./ui/icons/video-icon.js";import"./ui/mq-unread-badge.js";import"./chunks/refund-cancel-policy-CcsJ-pMx.js";import"./ui/mq-toast.js";import"./chunks/price-DU3YLTpk.js";import"./ui/mq-dialog.js";import"./ui/icons/arrow-narrow-left-icon.js";import"./ui/icons/chevron-down-icon.js";import"./ui/mq-text-button.js";const v=p(["next","history"]).enum;class MqMyAppointmentsSelectEvent extends Event{static{this.eventName="ontabchange"}constructor(t){super(MqMyAppointmentsSelectEvent.eventName,{bubbles:!0,composed:!0}),this.value=t}}let g=class EmptyState extends n{static{this.styles=o`.container{border-radius:var(--border-radius-md);background-color:var(--color-neutrals-background-weak);padding:var(--sp-10) var(--sp-6)}.card{border-radius:var(--border-radius-md);max-width:512px;margin:0 auto;background-color:var(--color-neutrals-background-extraWeak);padding:var(--sp-6);display:flex;flex-direction:column;align-items:center;gap:var(--sp-3)}.card>*{max-width:323px;margin:0 auto}.title{font-family:var(--font-body);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}.description{font-family:var(--font-body);font-size:var(--text-xs);line-height:var(--text-xs--line-height);font-weight:var(--font-weight-normal);text-align:center;color:var(--color-neutrals-text-default);margin:0}@media (min-width:768px){.container{padding:var(--sp-6)}mq-button{max-width:323px}}`}handleRequestAppointment(){this.dispatchEvent(new CustomEvent("request-appointment",{bubbles:!0,composed:!0}))}render(){return a`<div class="container"><div class="card">${function({color:t="currentColor"}){return a`<svg width="31" height="32" viewBox="0 0 31 32" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M29.6 2.4H23.2V0H21.6V2.4H18.4V0H16.8V2.4H13.6V0H12V2.4H8.8V0H7.2V2.4H0.8C0.587827 2.4 0.384344 2.48429 0.234315 2.63431C0.0842855 2.78434 0 2.98783 0 3.2V31.2C0 31.4122 0.0842855 31.6157 0.234315 31.7657C0.384344 31.9157 0.587827 32 0.8 32H29.6C29.8122 32 30.0157 31.9157 30.1657 31.7657C30.3157 31.6157 30.4 31.4122 30.4 31.2V3.2C30.4 2.98783 30.3157 2.78434 30.1657 2.63431C30.0157 2.48429 29.8122 2.4 29.6 2.4ZM28.8 30.4H1.6V10.4H27.2V8.8H1.6V4H7.2V7.2H8.8V4H12V7.2H13.6V4H16.8V7.2H18.4V4H21.6V7.2H23.2V4H28.8V30.4ZM3.2 19.2H9.6V12.8H3.2V19.2ZM4.8 14.4H8V17.6H4.8V14.4ZM20.8 19.2H27.2V12.8H20.8V19.2ZM22.4 14.4H25.6V17.6H22.4V14.4ZM12 19.2H18.4V12.8H12V19.2ZM13.6 14.4H16.8V17.6H13.6V14.4ZM3.2 28H9.6V21.6H3.2V28ZM4.8 23.2H8V26.4H4.8V23.2ZM20.8 28H27.2V21.6H20.8V28ZM22.4 23.2H25.6V26.4H22.4V23.2ZM12 28H18.4V21.6H12V28ZM13.6 23.2H16.8V26.4H13.6V23.2Z" fill="${t}"/></svg>`}({color:"var(--color-primary)"})}<p class="title">${this.title}</p><p class="description">${this.description}</p><mq-button variant="primary" size="md" fullwidth @click="${this.handleRequestAppointment}">${i("Pedir cita")}</mq-button></div></div>`}};t([r({type:String})],g.prototype,"title",void 0),t([r({type:String})],g.prototype,"description",void 0),g=t([e("empty-state")],g);const b=[d.pending,d.accepted],x=o`.appointments-list{display:grid;grid-template-columns:1fr;gap:var(--sp-6);margin-bottom:var(--sp-6)}@media (min-width:768px){.appointments-list{grid-template-columns:repeat(2,1fr)}}`;let f=class NextAppointmentsTab extends n{constructor(){super(...arguments),this.getAppointmentsQuery=new u(this,()=>h(this.apiClient,{status:b,order:{field:"starts_at",direction:"asc"}}))}static{this.styles=x}render(){return this.getAppointmentsQuery.render({complete:t=>a`${t.data.length>0?a`<div class="appointments-list">${t.data.map(t=>a`<appointment-card .appointmentResource="${t}" .specialtyId="${t.speciality?.id}"></appointment-card>`)}</div>`:a`<empty-state title="${i("No tienes próximas citas")}" description="${i("Agenda una consulta médica cuando la necesites. Aquí verás todos los detalles y podrás gestionar tus próximas citas.")}"></empty-state>`}`,pending:()=>a`<div class="appointments-list"><appointment-card-skeleton></appointment-card-skeleton><appointment-card-skeleton></appointment-card-skeleton><appointment-card-skeleton></appointment-card-skeleton></div>`})}};t([m({context:l,subscribe:!0})],f.prototype,"apiClient",void 0),f=t([s(),e("next-appointments-tab")],f);const k=[d.finished,d.reporting];let y=class AppointmentsHistoryTab extends n{constructor(){super(...arguments),this.getAppointmentsQuery=new u(this,()=>h(this.apiClient,{status:k,order:{field:"starts_at",direction:"desc"}}))}static{this.styles=o`.appointments-list{display:grid;grid-template-columns:1fr;gap:var(--sp-6);margin-bottom:var(--sp-6)}@media (min-width:768px){.appointments-list{grid-template-columns:repeat(2,1fr)}}`}render(){return this.getAppointmentsQuery.render({complete:t=>a`${t.data.length>0?a`<div class="appointments-list">${t.data.map(t=>a`<appointment-card .appointmentResource="${t}" .specialtyId="${t.speciality?.id}" variant="history"></appointment-card>`)}</div>`:a`<empty-state title="${i("No tienes citas en el historial")}" description="${i("Aquí verás todas las citas que has tenido. Puedes acceder a los documentos de cada consulta y reagendar una cita si es necesario.")}"></empty-state>`}`,pending:()=>a`<div class="appointments-list"><appointment-card-skeleton></appointment-card-skeleton><appointment-card-skeleton></appointment-card-skeleton><appointment-card-skeleton></appointment-card-skeleton></div>`})}};t([m({context:l,subscribe:!0})],y.prototype,"apiClient",void 0),y=t([s(),e("appointments-history-tab")],y);const j=o`.container{display:flex;flex-direction:column;gap:var(--size-3)}@media (min-width:768px){mq-tabs-list{max-width:435px}}`;let q=class MqMyAppointments extends n{constructor(){super(...arguments),this.tab=v.next}static{this.styles=j}handleSelect(t){this.dispatchEvent(new MqMyAppointmentsSelectEvent(t.value))}render(){return a`<div class="container"><mq-page-title .title="${i("Mis citas")}" @mq-back="${t=>{t.stopPropagation(),this.dispatchEvent(new c)}}"></mq-page-title><mq-tabs .value="${this.tab}" @onvaluechange="${this.handleSelect}"><mq-tabs-list><mq-tabs-trigger value="${v.next}">${i("Próximas citas")}</mq-tabs-trigger><mq-tabs-trigger value="${v.history}">${i("Histórico")}</mq-tabs-trigger></mq-tabs-list><mq-tabs-content value="${v.next}"><next-appointments-tab></next-appointments-tab></mq-tabs-content><mq-tabs-content value="${v.history}"><appointments-history-tab></appointments-history-tab></mq-tabs-content></mq-tabs></div>`}};t([r({type:String,reflect:!0})],q.prototype,"tab",void 0),q=t([s(),e("mq-my-appointments")],q);const H=o`:host{display:block}.request-appointment-cta{box-sizing:border-box;display:flex;flex-direction:column;align-items:center;justify-content:space-between;padding:var(--sp-12) var(--sp-4);background:var(--color-card);gap:var(--sp-4)}.title-body{display:flex;flex-direction:column;gap:var(--sp-2);flex:1}.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;text-align:center}.subtitle{font-family:var(--font-body);font-size:var(--text-base);line-height:var(--text-base--line-height);font-weight:var(--font-weight-normal);color:var(--color-neutrals-text-default);margin:0;display:none}mq-button{width:100%}.button-text-desktop{display:none}.button-text-mobile{display:inline}@media (min-width:768px){.request-appointment-cta{flex-direction:row;padding:var(--sp-12) var(--sp-20);gap:var(--sp-2)}.title-body{align-items:flex-start;flex:1;max-width:843px}.title{font-size:var(--text-3xl);line-height:var(--text-3xl--line-height);font-weight:var(--font-weight-extrabold);text-align:left}.subtitle{display:block}mq-button{width:auto;flex-shrink:0;--button-height-md:var(--button-height-lg);--text-sm:var(--text-base);--text-sm--line-height:var(--text-base--line-height)}.button-text-desktop{display:inline}.button-text-mobile{display:none}}`;class RequestAppointmentEvent extends Event{static{this.eventName="request-appointment"}constructor(){super(RequestAppointmentEvent.eventName,{bubbles:!0,composed:!0})}}let V=class RequestAppointmentCta extends n{static{this.styles=H}handleRequestAppointment(){this.dispatchEvent(new RequestAppointmentEvent)}render(){return a`<div class="request-appointment-cta"><div class="title-body"><h2 class="title">${i("Nueva cita de especialidades digitales")}</h2><p class="subtitle">${i("Realiza la búsqueda en tu cuadro médico digital")}</p></div><mq-button variant="primary" size="md" fullwidth @click="${this.handleRequestAppointment}"><span class="button-text-mobile">${i("Pedir cita")}</span> <span class="button-text-desktop">${i("Pedir una nueva cita")}</span></mq-button></div>`}};V=t([s(),e("request-appointment-cta")],V);export{q as MqMyAppointments,MqMyAppointmentsSelectEvent,V as RequestAppointmentCta,RequestAppointmentEvent};
1
+ export{A as AppointmentDetails}from"./chunks/appointment-details-DXLBQnPN.js";import{_ as t,c as e}from"./chunks/custom-element-D2ziPxYE.js";import{m as i}from"./chunks/runtime-Bg1WXVCx.js";import{l as s}from"./chunks/localized-decorator-BlOuLhym.js";import{a as n,i as o,x as a}from"./chunks/lit-element-DiWJYFwC.js";import{n as r}from"./chunks/property-scuRaFcM.js";import{e as p}from"./chunks/external-CJj32K_p.js";import"./ui/mq-tabs.js";import{c}from"./chunks/consume-CovVqBjI.js";import{A as l}from"./chunks/api-client-context-V1UAGtKW.js";import{a as m}from"./chunks/api-chat-client-CJ1EGJe3.js";import"./chunks/appointment-card-skeleton-B_rJNvU9.js";import"./ui/mq-button.js";import"./chunks/next-appointment-card-6uXWTDx5.js";import{Q as d}from"./chunks/query-controller-BlO1Ax65.js";import{a as u}from"./chunks/action-unavailable-message-BIgsXk9u.js";export{P as ProfessionalOverview}from"./chunks/professional-overview-C4H_znIJ.js";import"./chunks/chunk-HN62IQ7S-xbkIy7k_.js";import"./chunks/parseISO-Dj3qSTG8.js";import"./chunks/format-CRFiCNHw.js";import"./chunks/addSeconds-ofMnxlgT.js";import"./chunks/class-map-Co76I6aw.js";import"./chunks/directive-2EDmOukv.js";import"./i18n.js";import"./chunks/chunk-4FFT6DC2-CVWibomC.js";import"./ui/icons/briefcase-icon.js";import"./chunks/if-defined-BYeVdwgd.js";import"./ui/icons/types.js";import"./ui/icons/calendar-icon.js";import"./ui/icons/clock-icon.js";import"./ui/icons/message-bubble-icon.js";import"./ui/icons/phone-icon.js";import"./chunks/context-consumer-ESdICVAb.js";import"./chunks/context-request-event-Dfydf1ub.js";import"./chunks/create-context-DqP79qjF.js";import"./chunks/isBefore-CPpTogxo.js";import"./env.js";import"./chunks/get-organization-setup-query-Dr1cXnHl.js";import"./chunks/chunk-6CCJWPGL-TiaqZaPV.js";import"./chunks/telemetry-client-BdPx4SXu.js";import"./chunks/get-schedule-services-query-Fzvb9ug9.js";import"./chunks/chunk-Y4EKUX25-QqMl3eiq.js";import"./chunks/state-LQivXIgA.js";import"./ui/mq-card.js";import"./chunks/chunk-S5RWG6G2-DPesx3Od.js";import"./mq-chat-room.js";import"./chunks/provide-BwI4DDGF.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"./ui/icons/check-double-icon.js";import"./ui/icons/check-icon.js";import"./chunks/chunk-YTQUGGS3-DmCGIoFy.js";import"./chunks/chunk-RCFIJTXZ-C6Ir0-sM.js";import"./chunks/mutation-controller-CR2qcqhH.js";import"./chunks/query-Cjvi4_dT.js";import"./ui/mq-floating-bubble.js";import"./ui/icons/video-icon.js";import"./ui/mq-unread-badge.js";import"./chunks/refund-cancel-policy-CcsJ-pMx.js";import"./ui/mq-toast.js";import"./ui/icons/dots-horizontal-icon.js";import"./chunks/price-DU3YLTpk.js";import"./ui/mq-dialog.js";import"./ui/icons/chevron-down-icon.js";import"./ui/mq-text-button.js";const h=p(["next","history"]).enum;class MqMyAppointmentsSelectEvent extends Event{static{this.eventName="ontabchange"}constructor(t){super(MqMyAppointmentsSelectEvent.eventName,{bubbles:!0,composed:!0}),this.value=t}}let v=class EmptyState extends n{static{this.styles=o`.container{border-radius:var(--border-radius-md);background-color:var(--color-neutrals-background-weak);padding:var(--sp-10) var(--sp-6)}.card{border-radius:var(--border-radius-md);max-width:512px;margin:0 auto;background-color:var(--color-neutrals-background-extraWeak);padding:var(--sp-6);display:flex;flex-direction:column;align-items:center;gap:var(--sp-3)}.card>*{max-width:323px;margin:0 auto}.title{font-family:var(--font-body);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}.description{font-family:var(--font-body);font-size:var(--text-xs);line-height:var(--text-xs--line-height);font-weight:var(--font-weight-normal);text-align:center;color:var(--color-neutrals-text-default);margin:0}@media (min-width:768px){.container{padding:var(--sp-6)}mq-button{max-width:323px}}`}handleRequestAppointment(){this.dispatchEvent(new CustomEvent("request-appointment",{bubbles:!0,composed:!0}))}render(){return a`<div class="container"><div class="card">${function({color:t="currentColor"}){return a`<svg width="31" height="32" viewBox="0 0 31 32" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M29.6 2.4H23.2V0H21.6V2.4H18.4V0H16.8V2.4H13.6V0H12V2.4H8.8V0H7.2V2.4H0.8C0.587827 2.4 0.384344 2.48429 0.234315 2.63431C0.0842855 2.78434 0 2.98783 0 3.2V31.2C0 31.4122 0.0842855 31.6157 0.234315 31.7657C0.384344 31.9157 0.587827 32 0.8 32H29.6C29.8122 32 30.0157 31.9157 30.1657 31.7657C30.3157 31.6157 30.4 31.4122 30.4 31.2V3.2C30.4 2.98783 30.3157 2.78434 30.1657 2.63431C30.0157 2.48429 29.8122 2.4 29.6 2.4ZM28.8 30.4H1.6V10.4H27.2V8.8H1.6V4H7.2V7.2H8.8V4H12V7.2H13.6V4H16.8V7.2H18.4V4H21.6V7.2H23.2V4H28.8V30.4ZM3.2 19.2H9.6V12.8H3.2V19.2ZM4.8 14.4H8V17.6H4.8V14.4ZM20.8 19.2H27.2V12.8H20.8V19.2ZM22.4 14.4H25.6V17.6H22.4V14.4ZM12 19.2H18.4V12.8H12V19.2ZM13.6 14.4H16.8V17.6H13.6V14.4ZM3.2 28H9.6V21.6H3.2V28ZM4.8 23.2H8V26.4H4.8V23.2ZM20.8 28H27.2V21.6H20.8V28ZM22.4 23.2H25.6V26.4H22.4V23.2ZM12 28H18.4V21.6H12V28ZM13.6 23.2H16.8V26.4H13.6V23.2Z" fill="${t}"/></svg>`}({color:"var(--color-primary)"})}<p class="title">${this.title}</p><p class="description">${this.description}</p><mq-button variant="primary" size="md" fullwidth @click="${this.handleRequestAppointment}">${i("Pedir cita")}</mq-button></div></div>`}};t([r({type:String})],v.prototype,"title",void 0),t([r({type:String})],v.prototype,"description",void 0),v=t([e("empty-state")],v);const b=[m.pending,m.accepted],g=o`.appointments-list{display:grid;grid-template-columns:1fr;align-items:start;gap:var(--sp-6);margin-bottom:var(--sp-6)}@media (min-width:768px){.appointments-list{grid-template-columns:repeat(2,1fr)}}.card{display:flex;flex-direction:column;min-width:0;box-sizing:border-box;background-color:var(--color-card,#fff);border:1px solid var(--color-border-subtle,#edecf1);border-radius:12px;padding:var(--sp-6)}`;let x=class NextAppointmentsTab extends n{constructor(){super(...arguments),this.getAppointmentsQuery=new d(this,()=>u(this.apiClient,{status:b,order:{field:"starts_at",direction:"asc"}}))}static{this.styles=g}render(){return this.getAppointmentsQuery.render({complete:t=>a`${t.data.length>0?a`<div class="appointments-list">${t.data.map(t=>a`<div class="card"><next-appointment-card .appointmentResource="${t}"></next-appointment-card></div>`)}</div>`:a`<empty-state title="${i("No tienes próximas citas")}" description="${i("Agenda una consulta médica cuando la necesites. Aquí verás todos los detalles y podrás gestionar tus próximas citas.")}"></empty-state>`}`,pending:()=>a`<div class="appointments-list"><appointment-card-skeleton></appointment-card-skeleton><appointment-card-skeleton></appointment-card-skeleton><appointment-card-skeleton></appointment-card-skeleton></div>`})}};t([c({context:l,subscribe:!0})],x.prototype,"apiClient",void 0),x=t([s(),e("next-appointments-tab")],x);const f=[m.finished,m.reporting];let k=class AppointmentsHistoryTab extends n{constructor(){super(...arguments),this.getAppointmentsQuery=new d(this,()=>u(this.apiClient,{status:f,order:{field:"starts_at",direction:"desc"}}))}static{this.styles=o`.appointments-list{display:grid;grid-template-columns:1fr;gap:var(--sp-6);margin-bottom:var(--sp-6)}@media (min-width:768px){.appointments-list{grid-template-columns:repeat(2,1fr)}}`}render(){return this.getAppointmentsQuery.render({complete:t=>a`${t.data.length>0?a`<div class="appointments-list">${t.data.map(t=>a`<appointment-card .appointmentResource="${t}" .specialtyId="${t.speciality?.id}" variant="history"></appointment-card>`)}</div>`:a`<empty-state title="${i("No tienes citas en el historial")}" description="${i("Aquí verás todas las citas que has tenido. Puedes acceder a los documentos de cada consulta y reagendar una cita si es necesario.")}"></empty-state>`}`,pending:()=>a`<div class="appointments-list"><appointment-card-skeleton></appointment-card-skeleton><appointment-card-skeleton></appointment-card-skeleton><appointment-card-skeleton></appointment-card-skeleton></div>`})}};t([c({context:l,subscribe:!0})],k.prototype,"apiClient",void 0),k=t([s(),e("appointments-history-tab")],k);const y=o`.container{display:flex;flex-direction:column;gap:var(--size-3);padding-top:var(--sp-10)}`;let j=class MqMyAppointments extends n{constructor(){super(...arguments),this.tab=h.next}static{this.styles=y}handleSelect(t){this.dispatchEvent(new MqMyAppointmentsSelectEvent(t.value))}render(){return a`<div class="container"><mq-tabs .value="${this.tab}" @onvaluechange="${this.handleSelect}"><mq-tabs-list label="${i("Mis citas")}"><mq-tabs-trigger value="${h.next}">${i("Próximas citas")}</mq-tabs-trigger><mq-tabs-trigger value="${h.history}">${i("Histórico")}</mq-tabs-trigger></mq-tabs-list><mq-tabs-content value="${h.next}"><next-appointments-tab></next-appointments-tab></mq-tabs-content><mq-tabs-content value="${h.history}"><appointments-history-tab></appointments-history-tab></mq-tabs-content></mq-tabs></div>`}};t([r({type:String,reflect:!0})],j.prototype,"tab",void 0),j=t([s(),e("mq-my-appointments")],j);const q=o`:host{display:block}.request-appointment-cta{box-sizing:border-box;display:flex;flex-direction:column;align-items:center;justify-content:space-between;padding:var(--sp-12) var(--sp-4);background:var(--color-card);gap:var(--sp-4)}.title-body{display:flex;flex-direction:column;gap:var(--sp-2);flex:1}.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;text-align:center}.subtitle{font-family:var(--font-body);font-size:var(--text-base);line-height:var(--text-base--line-height);font-weight:var(--font-weight-normal);color:var(--color-neutrals-text-default);margin:0;display:none}mq-button{width:100%}.button-text-desktop{display:none}.button-text-mobile{display:inline}@media (min-width:768px){.request-appointment-cta{flex-direction:row;padding:var(--sp-12) var(--sp-20);gap:var(--sp-2)}.title-body{align-items:flex-start;flex:1;max-width:843px}.title{font-size:var(--text-3xl);line-height:var(--text-3xl--line-height);font-weight:var(--font-weight-extrabold);text-align:left}.subtitle{display:block}mq-button{width:auto;flex-shrink:0;--button-height-md:var(--button-height-lg);--text-sm:var(--text-base);--text-sm--line-height:var(--text-base--line-height)}.button-text-desktop{display:inline}.button-text-mobile{display:none}}`;class RequestAppointmentEvent extends Event{static{this.eventName="request-appointment"}constructor(){super(RequestAppointmentEvent.eventName,{bubbles:!0,composed:!0})}}let H=class RequestAppointmentCta extends n{static{this.styles=q}handleRequestAppointment(){this.dispatchEvent(new RequestAppointmentEvent)}render(){return a`<div class="request-appointment-cta"><div class="title-body"><h2 class="title">${i("Nueva cita de especialidades digitales")}</h2><p class="subtitle">${i("Realiza la búsqueda en tu cuadro médico digital")}</p></div><mq-button variant="primary" size="md" fullwidth @click="${this.handleRequestAppointment}"><span class="button-text-mobile">${i("Pedir cita")}</span> <span class="button-text-desktop">${i("Pedir una nueva cita")}</span></mq-button></div>`}};H=t([s(),e("request-appointment-cta")],H);export{j as MqMyAppointments,MqMyAppointmentsSelectEvent,H as RequestAppointmentCta,RequestAppointmentEvent};
@@ -1,64 +1,28 @@
1
1
  import * as lit_html from 'lit-html';
2
2
  import * as lit from 'lit';
3
3
  import { LitElement, PropertyValues } from 'lit';
4
- import { G as GetAppointmentsResponse, M as MediquoApiChatClient } from './chunks/index.d-Bl682CAX.js';
4
+ import { M as MediquoApiChatClient } from './chunks/index.d-XSe7Hy-Q.js';
5
5
  import { Env } from './env.js';
6
- import './chunks/index-CDBk7hVW.js';
6
+ import './chunks/index-Nf3nZ9O3.js';
7
+ import './chunks/index-DTEtqjQF.js';
7
8
  import './ui/mq-skeleton.js';
8
- import './chunks/mq-chat-room-t3j3Tq4o.js';
9
- import './chunks/appointment-action-unavailable-dialog-BYse3uIa.js';
10
- import './chunks/professional-overview-mO3tuMuH.js';
11
- import './ui/mq-button.js';
12
- import './ui/mq-floating-bubble.js';
9
+ import './chunks/next-appointment-card-Bc65OZ1_.js';
13
10
  export { MqAppointmentJoinVideocallEvent, MqAppointmentRescheduleEvent, MqViewAppointmentsEvent } from './events.js';
14
11
  import 'axios';
15
12
  import 'zod';
16
13
  import './chunks/schemas.d-b6_AekBb.js';
14
+ import './chunks/mq-chat-room-jeDvIF1Z.js';
17
15
  import './ui/mq-avatar.js';
16
+ import './ui/mq-button.js';
18
17
  import './chunks/appointment.model.d-BWwBLaEL.js';
19
18
  import '@tanstack/query-core';
19
+ import './chunks/appointment-action-unavailable-dialog-CTiL4nMo.js';
20
20
  import './chunks/price.d-CwLosdAN.js';
21
21
  import './ui/mq-dialog.js';
22
+ import './chunks/professional-overview-mO3tuMuH.js';
22
23
  import './ui/mq-text-button.js';
23
-
24
- declare class NextAppointmentCard extends LitElement {
25
- static styles: lit.CSSResult;
26
- appointmentResource: GetAppointmentsResponse["data"][number];
27
- specialtyName: string;
28
- token: string;
29
- patientHash: string;
30
- timezone?: string;
31
- hasChatSupport: boolean;
32
- isExpired: boolean;
33
- isModifyUnavailable: boolean;
34
- isCancelUnavailable: boolean;
35
- modifyUnavailableMessage: string;
36
- cancelUnavailableMessage: string;
37
- private isChatOpen;
38
- private isMenuOpen;
39
- private isCancelDialogOpen;
40
- private openDialog;
41
- private closeMenuOnOutsideClick;
42
- private closeMenuOnEscape;
43
- connectedCallback(): void;
44
- disconnectedCallback(): void;
45
- private get appointmentId();
46
- private get channel();
47
- private channelIcon;
48
- private channelLabel;
49
- private formatWhen;
50
- private handleJoinVideocall;
51
- private handleToggleChat;
52
- private handleModify;
53
- private handleCancel;
54
- private renderActions;
55
- render(): lit_html.TemplateResult<1>;
56
- }
57
- declare global {
58
- interface HTMLElementTagNameMap {
59
- "next-appointment-card": NextAppointmentCard;
60
- }
61
- }
24
+ import './ui/mq-floating-bubble.js';
25
+ import './ui/mq-unread-badge.js';
62
26
 
63
27
  declare class MqNextAppointments extends LitElement {
64
28
  static styles: lit.CSSResult;
@@ -78,8 +42,6 @@ declare class MqNextAppointments extends LitElement {
78
42
  protected willUpdate(changed: PropertyValues<this>): void;
79
43
  private getPatientProfileQuery;
80
44
  private getAppointmentsQuery;
81
- private getOrganizationSetupQuery;
82
- private getOrganizationSpecialtiesQuery;
83
45
  private get patientHash();
84
46
  private get accessToken();
85
47
  private get patientTimezone();
@@ -1 +1 @@
1
- import{getLocale as t,isValidLocale as e,setLocale as i,initLocalization as n}from"./i18n.js";import{_ as o,c as a}from"./chunks/custom-element-D2ziPxYE.js";import{e as s}from"./chunks/provide-BwI4DDGF.js";import{c as r}from"./chunks/consume-CovVqBjI.js";import{m as p,s as c}from"./chunks/runtime-Bg1WXVCx.js";import{l}from"./chunks/localized-decorator-BlOuLhym.js";import{Q as m}from"./chunks/query-controller-BlO1Ax65.js";import{A as h}from"./chunks/api-client-context-V1UAGtKW.js";import{l as d}from"./chunks/chunk-S5RWG6G2-DPesx3Od.js";import{A as u,a as g,c as v,n as f,i as y}from"./chunks/api-chat-client-pGZWREjK.js";import{a as b,g as k}from"./chunks/action-unavailable-message-BIgsXk9u.js";import{g as x}from"./chunks/get-organization-setup-query-Dr1cXnHl.js";import{t as j,j as $,l as C,f as w,h as O,g as M,a as q}from"./chunks/telemetry-client-CoWay8es.js";import{g as z}from"./chunks/get-patient-profile-query-4AO6xvVn.js";import{c as S}from"./chunks/refund-cancel-policy-CcsJ-pMx.js";import{i as I,a as E,E as U,x as A}from"./chunks/lit-element-DiWJYFwC.js";import{n as D}from"./chunks/property-scuRaFcM.js";import{r as T}from"./chunks/state-LQivXIgA.js";import{setEnv as _}from"./env.js";import{MqAppointmentJoinVideocallEvent as N,MqAppointmentRescheduleEvent as R,MqViewAppointmentsEvent as Q}from"./events.js";import"./chunks/index-CoZKmhwT.js";import"./ui/mq-skeleton.js";import{calendarIcon as H}from"./ui/icons/calendar-icon.js";import{dotsHorizontalIcon as P}from"./ui/icons/dots-horizontal-icon.js";import{messageBubbleIcon as V}from"./ui/icons/message-bubble-icon.js";import{phoneIcon as B}from"./ui/icons/phone-icon.js";import{videoIcon as L}from"./ui/icons/video-icon.js";import"./mq-chat-room.js";import"./chunks/professional-overview-C4H_znIJ.js";import"./ui/mq-button.js";import"./ui/mq-floating-bubble.js";import{toast as F}from"./ui/mq-toast.js";import"./chunks/chunk-4FFT6DC2-CVWibomC.js";import"./chunks/external-CJj32K_p.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"./chunks/query-Cjvi4_dT.js";import"./chunks/chunk-HN62IQ7S-xbkIy7k_.js";import"./chunks/parseISO-Dj3qSTG8.js";import"./chunks/format-CRFiCNHw.js";import"./chunks/isBefore-CPpTogxo.js";import"./chunks/chunk-6CCJWPGL-TiaqZaPV.js";import"./chunks/mutation-controller-CR2qcqhH.js";import"./chunks/price-DU3YLTpk.js";import"./ui/mq-dialog.js";import"./ui/icons/x-icon.js";import"./ui/icons/types.js";import"./ui/icons/file-icon.js";import"./ui/icons/arrow-right-icon.js";import"./chunks/if-defined-BYeVdwgd.js";import"./chunks/style-map-CIdqdn7C.js";import"./chunks/directive-2EDmOukv.js";import"./theme.js";import"./ui/mq-avatar.js";import"./chunks/class-map-Co76I6aw.js";import"./chunks/chunk-BUV4MGML-CkhBbfUu.js";import"./ui/icons/chevron-left-icon.js";import"./chunks/query-CeeutdfT.js";import"./chunks/chunk-Y4EKUX25-QqMl3eiq.js";import"./ui/icons/check-double-icon.js";import"./ui/icons/check-icon.js";import"./chunks/chunk-YTQUGGS3-DmCGIoFy.js";import"./ui/icons/chevron-down-icon.js";import"./ui/mq-text-button.js";const G=I`: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;display:block}.details{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}.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}@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 J=class NextAppointmentCard extends E{constructor(){super(...arguments),this.specialtyName="",this.token="",this.patientHash="",this.hasChatSupport=!1,this.isExpired=!1,this.isModifyUnavailable=!1,this.isCancelUnavailable=!1,this.modifyUnavailableMessage="",this.cancelUnavailableMessage="",this.isChatOpen=!1,this.isMenuOpen=!1,this.isCancelDialogOpen=!1,this.openDialog=null,this.closeMenuOnOutsideClick=t=>{t.composedPath().includes(this)||(this.isMenuOpen=!1)},this.closeMenuOnEscape=t=>{"Escape"===t.key&&(this.isMenuOpen=!1)},this.handleJoinVideocall=()=>{j.track($(this.patientHash,this.appointmentId)),this.dispatchEvent(new N({appointmentId:this.appointmentId}))},this.handleToggleChat=()=>{this.isChatOpen=!this.isChatOpen,this.isChatOpen&&j.track(C(this.patientHash,this.appointmentId))},this.handleModify=()=>{this.isMenuOpen=!1,this.isModifyUnavailable?this.openDialog="modify":(j.track(w(this.patientHash,this.appointmentId)),this.dispatchEvent(new R({appointmentId:this.appointmentId})))},this.handleCancel=()=>{this.isMenuOpen=!1,this.isCancelUnavailable?this.openDialog="cancel":(j.track(O(this.patientHash,this.appointmentId)),this.isCancelDialogOpen=!0)}}static{this.styles=G}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}channelIcon(){switch(this.channel){case u.videocall:return L({size:20});case u.phonecall:return B({size:20});default:return V({size:20})}}channelLabel(){switch(this.channel){case u.videocall:return p("Videoconsulta");case u.phonecall:return p("Consulta telefónica");default:return p("Chat")}}formatWhen(){const e=t().replace("_","-"),i=this.timezone?{timeZone:this.timezone}:{},n=new Date(this.appointmentResource.appointment.starts_at);if(Number.isNaN(n.getTime()))return"";const o=new Intl.DateTimeFormat(e,{weekday:"long",day:"numeric",month:"long",year:"numeric",...i}).format(n),a=new Intl.DateTimeFormat(e,{timeStyle:"short",...i}).format(n);return p(c`${o}, ${a} h`)}renderActions(){const t=this.channel===u.videocall;return A`<div class="actions">${this.hasChatSupport?A`<mq-button variant="outline" @click="${this.handleToggleChat}">${p("Ir a chat")}</mq-button>`:U} ${t?A`<mq-button class="join" variant="primary" @click="${this.handleJoinVideocall}">${p("Unirse a la videoconsulta")}</mq-button>`:U}<div class="overflow"><mq-button variant="outline" size="icon-lg" aria-label="${p("Más opciones")}" aria-haspopup="menu" aria-expanded="${this.isMenuOpen}" @click="${()=>{this.isMenuOpen=!this.isMenuOpen}}">${P({size:16})}</mq-button>${this.isMenuOpen?A`<div class="menu" role="menu"><button class="menu-item" type="button" role="menuitem" @click="${this.handleModify}">${p("Modificar cita")}</button> <button class="menu-item negative" type="button" role="menuitem" @click="${this.handleCancel}">${p("Anular cita")}</button></div>`:U}</div></div>`}render(){const{professional:t}=this.appointmentResource,e=this.formatWhen();return A`<professional-overview .name="${t.name}" .specialtyName="${this.specialtyName}" .collegiateNumber="${t.collegiate_number??void 0}" .description="${t.description??""}" .languages="${t.languages??[]}" .avatar="${t.avatar??""}"></professional-overview><div class="details">${e?A`<div class="detail-row">${H({size:20})} <span>${e}</span></div>`:U}<div class="detail-row">${this.channelIcon()} <span>${this.channelLabel()}</span></div></div><div class="footer"><p class="reminder">${p("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?A`<mq-chat-room slot="content" .consultationId="${this.appointmentResource.appointment.id}" consultation-type="appointment" token="${this.token}" .roomId="${this.appointmentResource.room.id}" .professionalHash="${t.hash}" ?readonly="${this.isExpired}" @mq-chat-room-close="${()=>{this.isChatOpen=!1}}"></mq-chat-room>`:U}</mq-floating-bubble><appointment-action-unavailable-dialog .open="${"modify"===this.openDialog}" .heading="${p("Modificar cita")}" .message="${this.modifyUnavailableMessage}" @close="${()=>{this.openDialog=null}}"></appointment-action-unavailable-dialog><appointment-action-unavailable-dialog .open="${"cancel"===this.openDialog}" .heading="${p("Anular cita")}" .message="${this.cancelUnavailableMessage}" @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}}" @success="${()=>{this.isCancelDialogOpen=!1,F.success(p("Consulta anulada correctamente")),this.dispatchEvent(new CustomEvent("appointment-cancel-confirmed",{bubbles:!0,composed:!0,detail:{id:this.appointmentId}}))}}"></cancel-appointment-confirmation-dialog>`}};o([D({type:Object})],J.prototype,"appointmentResource",void 0),o([D({type:String})],J.prototype,"specialtyName",void 0),o([D({type:String})],J.prototype,"token",void 0),o([D({type:String})],J.prototype,"patientHash",void 0),o([D({type:String})],J.prototype,"timezone",void 0),o([D({type:Boolean})],J.prototype,"hasChatSupport",void 0),o([D({type:Boolean})],J.prototype,"isExpired",void 0),o([D({type:Boolean})],J.prototype,"isModifyUnavailable",void 0),o([D({type:Boolean})],J.prototype,"isCancelUnavailable",void 0),o([D({type:String})],J.prototype,"modifyUnavailableMessage",void 0),o([D({type:String})],J.prototype,"cancelUnavailableMessage",void 0),o([T()],J.prototype,"isChatOpen",void 0),o([T()],J.prototype,"isMenuOpen",void 0),o([T()],J.prototype,"isCancelDialogOpen",void 0),o([T()],J.prototype,"openDialog",void 0),J=o([l(),a("next-appointment-card")],J);const K=[g.pending,g.accepted],W=I`:host{display:flex;flex-direction:column;gap:var(--sp-4);width:100%;min-width:0;box-sizing:border-box}:host([empty]){align-self:start}:host([empty]) .card{flex:0 0 auto}.card{display:flex;flex-direction:column;flex:1;min-width:0;box-sizing:border-box;background-color:var(--color-card,#fff);border:1px solid var(--color-border-subtle,#edecf1);border-radius:var(--mq-next-appointments-radius,12px);padding:var(--mq-next-appointments-padding,var(--sp-6))}`;let X=class MqNextAppointments extends E{constructor(){super(...arguments),this.apiClient=v(),this.getPatientProfileQuery=new m(this,()=>z(this.apiClient,{enabled:!this.loginToken})),this.getAppointmentsQuery=new m(this,()=>b(this.apiClient,{status:K,order:{field:"starts_at",direction:"asc"},page:1,per_page:1})),this.getOrganizationSetupQuery=new m(this,()=>x(this.apiClient)),this.getOrganizationSpecialtiesQuery=new m(this,()=>M(this.apiClient)),this.handleViewAll=()=>{this.dispatchEvent(new Q({tab:"next"}))}}static{this.styles=W}willUpdate(t){t.has("env")&&this.env&&_(this.env),t.has("locale")&&this.locale&&e(this.locale)&&i(this.locale);const n=f(t,{env:this.env,apiKey:this.apiKey,token:this.token,locale:this.locale},this.inheritedApiClient);n&&(this.apiClient=n)}get patientHash(){return this.loginToken?.patient.hash??this.getPatientProfileQuery.result?.data?.hash??""}get accessToken(){return this.token||this.loginToken?.access_token||""}get patientTimezone(){return this.timezone??this.loginToken?.patient.timezone}get isEmpty(){const t=this.getAppointmentsQuery.result;return!0===t?.isSuccess&&!t.data?.data?.[0]}updated(){this.toggleAttribute("empty",this.isEmpty)}renderAppointment(){return this.getAppointmentsQuery.render({complete:e=>{const i=e.data?.[0];if(!i)return A`<home-widget-empty-state icon="calendar" heading="${p("No tienes próximas citas")}" description="${p("Cuando agendes una cita, aparecerá aquí para que puedas consultarla, modificarla o cancelarla.")}"></home-widget-empty-state>`;const n=this.getOrganizationSetupQuery.result?.data,o=n?.appointments?.seconds_before_start_to_refund_on_cancel,a=S({startsAtIso:i.appointment.starts_at,refundPolicySeconds:o}),s=y(i.appointment.expires_at),r=0===i.slots.length,c=this.getOrganizationSpecialtiesQuery.result?.data?.find(t=>t.id===i.speciality.id);return A`<next-appointment-card .appointmentResource="${i}" .specialtyName="${q(c?.code??"",t(),c?.name??i.speciality.name)}" .token="${this.accessToken}" .patientHash="${this.patientHash}" .timezone="${this.patientTimezone}" .hasChatSupport="${!0===n?.appointments?.has_chat_in_appointment}" .isExpired="${s}" .isModifyUnavailable="${s||r||!a}" .isCancelUnavailable="${s||!a}" .modifyUnavailableMessage="${k({action:"modify",refundPolicySeconds:o})}" .cancelUnavailableMessage="${k({action:"cancel",refundPolicySeconds:o})}"></next-appointment-card>`},pending:()=>A`<mq-skeleton height="257px"></mq-skeleton>`,error:()=>A`<home-widget-empty-state icon="calendar" heading="${p("No hemos podido cargar tu próxima cita")}" description="${p("Vuelve a intentarlo en unos minutos.")}"></home-widget-empty-state>`})}render(){return A`<section-header heading="${p("Próxima cita")}" action-label="${p("Ver todas")}" @section-action="${this.handleViewAll}"></section-header><div class="card">${this.renderAppointment()}</div>`}};o([D({type:String,attribute:"api-key"})],X.prototype,"apiKey",void 0),o([D({type:String,attribute:"token"})],X.prototype,"token",void 0),o([D({type:String,attribute:"locale"})],X.prototype,"locale",void 0),o([D({type:String,attribute:"env"})],X.prototype,"env",void 0),o([D({type:String,attribute:"timezone"})],X.prototype,"timezone",void 0),o([r({context:d,subscribe:!0})],X.prototype,"loginToken",void 0),o([r({context:h,subscribe:!0}),T()],X.prototype,"inheritedApiClient",void 0),o([s({context:h}),T()],X.prototype,"apiClient",void 0),X=o([l(),a("mq-next-appointments")],X),n();export{N as MqAppointmentJoinVideocallEvent,R as MqAppointmentRescheduleEvent,X as MqNextAppointments,Q as MqViewAppointmentsEvent};
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{m as a}from"./chunks/runtime-Bg1WXVCx.js";import{l as p}from"./chunks/localized-decorator-BlOuLhym.js";import{Q as c}from"./chunks/query-controller-BlO1Ax65.js";import{A as m}from"./chunks/api-client-context-V1UAGtKW.js";import{l as u}from"./chunks/chunk-S5RWG6G2-DPesx3Od.js";import{a as h,c as l,n as d}from"./chunks/api-chat-client-CJ1EGJe3.js";import{a as k}from"./chunks/action-unavailable-message-BIgsXk9u.js";import{g as j}from"./chunks/get-patient-profile-query-4AO6xvVn.js";import{i as g,a as f,x as y}from"./chunks/lit-element-DiWJYFwC.js";import{n as v}from"./chunks/property-scuRaFcM.js";import{r as x}from"./chunks/state-LQivXIgA.js";import{setEnv as b}from"./env.js";import{MqViewAppointmentsEvent as q}from"./events.js";export{MqAppointmentJoinVideocallEvent,MqAppointmentRescheduleEvent}from"./events.js";import"./chunks/index-iaTXVzFa.js";import"./chunks/index-Bw-MbGKw.js";import"./ui/mq-skeleton.js";import"./chunks/next-appointment-card-6uXWTDx5.js";import"./chunks/chunk-4FFT6DC2-CVWibomC.js";import"./chunks/external-CJj32K_p.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"./chunks/query-Cjvi4_dT.js";import"./chunks/chunk-HN62IQ7S-xbkIy7k_.js";import"./chunks/parseISO-Dj3qSTG8.js";import"./chunks/format-CRFiCNHw.js";import"./chunks/isBefore-CPpTogxo.js";import"./chunks/chunk-6CCJWPGL-TiaqZaPV.js";import"./chunks/mutation-controller-CR2qcqhH.js";import"./chunks/price-DU3YLTpk.js";import"./ui/mq-button.js";import"./chunks/class-map-Co76I6aw.js";import"./chunks/directive-2EDmOukv.js";import"./chunks/if-defined-BYeVdwgd.js";import"./ui/mq-dialog.js";import"./ui/icons/x-icon.js";import"./ui/icons/types.js";import"./ui/icons/calendar-icon.js";import"./ui/icons/file-icon.js";import"./ui/icons/arrow-right-icon.js";import"./chunks/style-map-CIdqdn7C.js";import"./chunks/get-organization-setup-query-Dr1cXnHl.js";import"./chunks/telemetry-client-BdPx4SXu.js";import"./chunks/chunk-Y4EKUX25-QqMl3eiq.js";import"./chunks/refund-cancel-policy-CcsJ-pMx.js";import"./ui/icons/dots-horizontal-icon.js";import"./ui/icons/message-bubble-icon.js";import"./ui/icons/phone-icon.js";import"./ui/icons/video-icon.js";import"./mq-chat-room.js";import"./theme.js";import"./ui/mq-avatar.js";import"./chunks/chunk-BUV4MGML-CkhBbfUu.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/chunk-YTQUGGS3-DmCGIoFy.js";import"./chunks/professional-overview-C4H_znIJ.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";const w=[h.pending,h.accepted],A=g`:host{display:flex;flex-direction:column;gap:var(--sp-4);width:100%;min-width:0;box-sizing:border-box}:host([empty]){align-self:start}:host([empty]) .card{flex:0 0 auto}.card{display:flex;flex-direction:column;flex:1;min-width:0;box-sizing:border-box;background-color:var(--color-card,#fff);border:1px solid var(--color-border-subtle,#edecf1);border-radius:var(--mq-next-appointments-radius,12px);padding:var(--mq-next-appointments-padding,var(--sp-6))}`;let C=class MqNextAppointments extends f{constructor(){super(...arguments),this.apiClient=l(),this.getPatientProfileQuery=new c(this,()=>j(this.apiClient,{enabled:!this.loginToken})),this.getAppointmentsQuery=new c(this,()=>k(this.apiClient,{status:w,order:{field:"starts_at",direction:"asc"},page:1,per_page:1})),this.handleViewAll=()=>{this.dispatchEvent(new q({tab:"next"}))}}static{this.styles=A}willUpdate(i){i.has("env")&&this.env&&b(this.env),i.has("locale")&&this.locale&&t(this.locale)&&e(this.locale);const o=d(i,{env:this.env,apiKey:this.apiKey,token:this.token,locale:this.locale},this.inheritedApiClient);o&&(this.apiClient=o)}get patientHash(){return this.loginToken?.patient.hash??this.getPatientProfileQuery.result?.data?.hash??""}get accessToken(){return this.token||this.loginToken?.access_token||""}get patientTimezone(){return this.timezone??this.loginToken?.patient.timezone}get isEmpty(){const t=this.getAppointmentsQuery.result;return!0===t?.isSuccess&&!t.data?.data?.[0]}updated(){this.toggleAttribute("empty",this.isEmpty)}renderAppointment(){return this.getAppointmentsQuery.render({complete:t=>{const e=t.data?.[0];return e?y`<next-appointment-card .appointmentResource="${e}" .token="${this.accessToken}" .patientHash="${this.patientHash}" .timezone="${this.patientTimezone}"></next-appointment-card>`:y`<widget-empty-state icon="calendar" heading="${a("No tienes próximas citas")}" description="${a("Cuando agendes una cita, aparecerá aquí para que puedas consultarla, modificarla o cancelarla.")}"></widget-empty-state>`},pending:()=>y`<mq-skeleton height="257px"></mq-skeleton>`,error:()=>y`<widget-empty-state icon="calendar" heading="${a("No hemos podido cargar tu próxima cita")}" description="${a("Vuelve a intentarlo en unos minutos.")}"></widget-empty-state>`})}render(){return y`<section-header heading="${a("Próxima cita")}" action-label="${a("Ver todas")}" @section-action="${this.handleViewAll}"></section-header><div class="card">${this.renderAppointment()}</div>`}};o([v({type:String,attribute:"api-key"})],C.prototype,"apiKey",void 0),o([v({type:String,attribute:"token"})],C.prototype,"token",void 0),o([v({type:String,attribute:"locale"})],C.prototype,"locale",void 0),o([v({type:String,attribute:"env"})],C.prototype,"env",void 0),o([v({type:String,attribute:"timezone"})],C.prototype,"timezone",void 0),o([r({context:u,subscribe:!0})],C.prototype,"loginToken",void 0),o([r({context:m,subscribe:!0}),x()],C.prototype,"inheritedApiClient",void 0),o([n({context:m}),x()],C.prototype,"apiClient",void 0),C=o([p(),s("mq-next-appointments")],C),i();export{C as MqNextAppointments,q as MqViewAppointmentsEvent};
@@ -1,7 +1,7 @@
1
1
  import * as lit_html from 'lit-html';
2
2
  import * as lit from 'lit';
3
3
  import { LitElement, PropertyValues } from 'lit';
4
- import { M as MediquoApiChatClient } from './chunks/index.d-Bl682CAX.js';
4
+ import { M as MediquoApiChatClient } from './chunks/index.d-XSe7Hy-Q.js';
5
5
  import { Env } from './env.js';
6
6
  import './ui/mq-button.js';
7
7
  export { MqPaymentSucceededEvent } from './events.js';
@@ -1 +1 @@
1
- import{isValidLocale as t,setLocale as e,initLocalization as i}from"./i18n.js";import{_ as s,c as o}from"./chunks/custom-element-D2ziPxYE.js";import{e as r}from"./chunks/provide-BwI4DDGF.js";import{c as n}from"./chunks/consume-CovVqBjI.js";import{m as a}from"./chunks/runtime-Bg1WXVCx.js";import{l}from"./chunks/localized-decorator-BlOuLhym.js";import{c,n as d,P as p}from"./chunks/api-chat-client-pGZWREjK.js";import{A as h}from"./chunks/api-client-context-V1UAGtKW.js";import{i as m,a as u,x as v}from"./chunks/lit-element-DiWJYFwC.js";import{n as f}from"./chunks/property-scuRaFcM.js";import{r as g}from"./chunks/state-LQivXIgA.js";import{setEnv as y}from"./env.js";import{MqBackEvent as _,MqPaymentSucceededEvent as x}from"./events.js";import{spinnerIcon as k}from"./ui/icons/spinner-icon.js";import"./ui/mq-button.js";import"./chunks/chunk-4FFT6DC2-CVWibomC.js";import"./chunks/external-CJj32K_p.js";import"./chunks/context-request-event-Dfydf1ub.js";import"./chunks/context-consumer-ESdICVAb.js";import"./chunks/chunk-HN62IQ7S-xbkIy7k_.js";import"./chunks/parseISO-Dj3qSTG8.js";import"./chunks/format-CRFiCNHw.js";import"./chunks/isBefore-CPpTogxo.js";import"./chunks/create-context-DqP79qjF.js";import"./ui/icons/types.js";import"./chunks/class-map-Co76I6aw.js";import"./chunks/directive-2EDmOukv.js";import"./chunks/if-defined-BYeVdwgd.js";const b="support@mediquo.com",j=m`:host{display:flex;flex-direction:column;align-items:center;justify-content:center;flex:1;min-height:320px;padding:var(--sp-6);box-sizing:border-box}.card{width:100%;max-width:460px;box-sizing:border-box;padding:var(--sp-10);background:var(--color-card);border-radius:var(--border-radius-lg);box-shadow:var(--shadow-lg)}.verifying{display:flex;flex-direction:column;align-items:center;gap:var(--sp-4);text-align:center}.outcome{display:flex;flex-direction:column;gap:var(--sp-4)}.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-negative);margin:0}.verifying .title{font-size:var(--text-lg);line-height:var(--text-lg--line-height);font-weight:var(--font-weight-semibold);color:var(--color-neutrals-text-default)}.message{font-family:var(--font-body);font-size:var(--text-base);line-height:var(--text-base--line-height);color:var(--color-neutrals-text-subtle);margin:0}.support a{color:var(--color-primary-text-link);font-weight:var(--font-weight-medium);text-decoration:none}.support a:hover{text-decoration:underline}.actions{display:flex;flex-direction:column;gap:var(--sp-3);margin-top:var(--sp-2)}`;let w=class MqPaymentPoller extends u{constructor(){super(...arguments),this.timeoutMs=9e4,this._view="verifying",this._deadline=0,this._settled=!1,this.apiClient=c(),this._onRetry=()=>{this._restart()},this._onBack=()=>{this.dispatchEvent(new _({source:"payment-poller"}))}}static{this.styles=j}willUpdate(i){i.has("env")&&this.env&&y(this.env),i.has("locale")&&this.locale&&t(this.locale)&&e(this.locale);const s=d(i,{env:this.env,apiKey:this.apiKey,token:this.token,locale:this.locale},this.inheritedApiClient);s&&(this.apiClient=s)}updated(t){t.has("sessionId")&&this._restart()}disconnectedCallback(){this._stop(),super.disconnectedCallback()}_restart(){this._stop(),this._settled=!1,this._view="verifying",this.sessionId&&(this._deadline=Date.now()+this.timeoutMs,this._pollOnce(),this._intervalId=setInterval(()=>{this._pollOnce()},2e3))}_stop(){void 0!==this._intervalId&&(clearInterval(this._intervalId),this._intervalId=void 0)}_settle(t){this._stop(),this._settled=!0,this._view=t}async _pollOnce(){const t=this.sessionId;if(this._settled||!t)return;if(Date.now()>=this._deadline)return void this._settle("timeout");let e;try{e=await this.apiClient.payments.getPaymentSession(t)}catch{return}return this._settled||t!==this.sessionId?void 0:e.status===p.Paid?(this._stop(),this._settled=!0,void this.dispatchEvent(new x({appointmentId:e.consultation_id,consultationType:e.consultation_type}))):void(e.status===p.Denied&&this._settle("denied"))}_renderVerifying(){return v`<div class="card"><div class="verifying" role="status" aria-live="polite">${k({size:28,color:"var(--color-primary)"})}<p class="title">${a("Confirmando tu pago")}</p><p class="message">${a("No cierres, vuelvas atrás ni actualices la ventana; esto puede tardar unos momentos.")}</p></div></div>`}_renderDenied(){return v`<div class="card"><div class="outcome" role="alert"><p class="title">${a("Tu pago no se ha completado")}</p><p class="message">${a("El pago ha sido rechazado y no hemos creado la cita. No se te ha cobrado nada: vuelve a intentarlo con otro método de pago.")}</p><div class="actions"><mq-button variant="primary" size="lg" fullwidth @click="${this._onBack}">${a("Volver")}</mq-button></div></div></div>`}_renderTimeout(){return v`<div class="card"><div class="outcome" role="alert"><p class="title">${a("Ha ocurrido un error")}</p><p class="message">${a("No hemos podido confirmar tu pago. Por favor, inténtalo de nuevo más tarde.")}</p><p class="message support">${a("Si se te ha cobrado sin una cita confirmada, contacta con nuestro equipo en")} <a href="mailto:${b}">${b}</a></p><div class="actions"><mq-button variant="primary" size="lg" fullwidth @click="${this._onRetry}">${a("Reintentar verificación")}</mq-button><mq-button variant="secondary" size="lg" fullwidth @click="${this._onBack}">${a("Volver")}</mq-button></div></div></div>`}render(){switch(this._view){case"denied":return this._renderDenied();case"timeout":return this._renderTimeout();default:return this._renderVerifying()}}};s([f({type:String,attribute:"session-id"})],w.prototype,"sessionId",void 0),s([f({type:String,attribute:"api-key"})],w.prototype,"apiKey",void 0),s([f({type:String,attribute:"token"})],w.prototype,"token",void 0),s([f({type:String,attribute:"locale"})],w.prototype,"locale",void 0),s([f({type:String,attribute:"env"})],w.prototype,"env",void 0),s([f({type:Number,attribute:"timeout-ms"})],w.prototype,"timeoutMs",void 0),s([g()],w.prototype,"_view",void 0),s([n({context:h,subscribe:!0}),g()],w.prototype,"inheritedApiClient",void 0),s([r({context:h}),g()],w.prototype,"apiClient",void 0),w=s([l(),o("mq-payment-poller")],w),i();export{w as MqPaymentPoller,x as MqPaymentSucceededEvent};
1
+ import{isValidLocale as t,setLocale as e,initLocalization as i}from"./i18n.js";import{_ as s,c as o}from"./chunks/custom-element-D2ziPxYE.js";import{e as r}from"./chunks/provide-BwI4DDGF.js";import{c as n}from"./chunks/consume-CovVqBjI.js";import{m as a}from"./chunks/runtime-Bg1WXVCx.js";import{l}from"./chunks/localized-decorator-BlOuLhym.js";import{c,n as d,P as p}from"./chunks/api-chat-client-CJ1EGJe3.js";import{A as h}from"./chunks/api-client-context-V1UAGtKW.js";import{i as m,a as u,x as v}from"./chunks/lit-element-DiWJYFwC.js";import{n as f}from"./chunks/property-scuRaFcM.js";import{r as g}from"./chunks/state-LQivXIgA.js";import{setEnv as y}from"./env.js";import{MqBackEvent as _,MqPaymentSucceededEvent as x}from"./events.js";import{spinnerIcon as k}from"./ui/icons/spinner-icon.js";import"./ui/mq-button.js";import"./chunks/chunk-4FFT6DC2-CVWibomC.js";import"./chunks/external-CJj32K_p.js";import"./chunks/context-request-event-Dfydf1ub.js";import"./chunks/context-consumer-ESdICVAb.js";import"./chunks/chunk-HN62IQ7S-xbkIy7k_.js";import"./chunks/parseISO-Dj3qSTG8.js";import"./chunks/format-CRFiCNHw.js";import"./chunks/isBefore-CPpTogxo.js";import"./chunks/create-context-DqP79qjF.js";import"./ui/icons/types.js";import"./chunks/class-map-Co76I6aw.js";import"./chunks/directive-2EDmOukv.js";import"./chunks/if-defined-BYeVdwgd.js";const b="support@mediquo.com",j=m`:host{display:flex;flex-direction:column;align-items:center;justify-content:center;flex:1;min-height:320px;padding:var(--sp-6);box-sizing:border-box}.card{width:100%;max-width:460px;box-sizing:border-box;padding:var(--sp-10);background:var(--color-card);border-radius:var(--border-radius-lg);box-shadow:var(--shadow-lg)}.verifying{display:flex;flex-direction:column;align-items:center;gap:var(--sp-4);text-align:center}.outcome{display:flex;flex-direction:column;gap:var(--sp-4)}.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-negative);margin:0}.verifying .title{font-size:var(--text-lg);line-height:var(--text-lg--line-height);font-weight:var(--font-weight-semibold);color:var(--color-neutrals-text-default)}.message{font-family:var(--font-body);font-size:var(--text-base);line-height:var(--text-base--line-height);color:var(--color-neutrals-text-subtle);margin:0}.support a{color:var(--color-primary-text-link);font-weight:var(--font-weight-medium);text-decoration:none}.support a:hover{text-decoration:underline}.actions{display:flex;flex-direction:column;gap:var(--sp-3);margin-top:var(--sp-2)}`;let w=class MqPaymentPoller extends u{constructor(){super(...arguments),this.timeoutMs=9e4,this._view="verifying",this._deadline=0,this._settled=!1,this.apiClient=c(),this._onRetry=()=>{this._restart()},this._onBack=()=>{this.dispatchEvent(new _({source:"payment-poller"}))}}static{this.styles=j}willUpdate(i){i.has("env")&&this.env&&y(this.env),i.has("locale")&&this.locale&&t(this.locale)&&e(this.locale);const s=d(i,{env:this.env,apiKey:this.apiKey,token:this.token,locale:this.locale},this.inheritedApiClient);s&&(this.apiClient=s)}updated(t){t.has("sessionId")&&this._restart()}disconnectedCallback(){this._stop(),super.disconnectedCallback()}_restart(){this._stop(),this._settled=!1,this._view="verifying",this.sessionId&&(this._deadline=Date.now()+this.timeoutMs,this._pollOnce(),this._intervalId=setInterval(()=>{this._pollOnce()},2e3))}_stop(){void 0!==this._intervalId&&(clearInterval(this._intervalId),this._intervalId=void 0)}_settle(t){this._stop(),this._settled=!0,this._view=t}async _pollOnce(){const t=this.sessionId;if(this._settled||!t)return;if(Date.now()>=this._deadline)return void this._settle("timeout");let e;try{e=await this.apiClient.payments.getPaymentSession(t)}catch{return}return this._settled||t!==this.sessionId?void 0:e.status===p.Paid?(this._stop(),this._settled=!0,void this.dispatchEvent(new x({appointmentId:e.consultation_id,consultationType:e.consultation_type}))):void(e.status===p.Denied&&this._settle("denied"))}_renderVerifying(){return v`<div class="card"><div class="verifying" role="status" aria-live="polite">${k({size:28,color:"var(--color-primary)"})}<p class="title">${a("Confirmando tu pago")}</p><p class="message">${a("No cierres, vuelvas atrás ni actualices la ventana; esto puede tardar unos momentos.")}</p></div></div>`}_renderDenied(){return v`<div class="card"><div class="outcome" role="alert"><p class="title">${a("Tu pago no se ha completado")}</p><p class="message">${a("El pago ha sido rechazado y no hemos creado la cita. No se te ha cobrado nada: vuelve a intentarlo con otro método de pago.")}</p><div class="actions"><mq-button variant="primary" size="lg" fullwidth @click="${this._onBack}">${a("Volver")}</mq-button></div></div></div>`}_renderTimeout(){return v`<div class="card"><div class="outcome" role="alert"><p class="title">${a("Ha ocurrido un error")}</p><p class="message">${a("No hemos podido confirmar tu pago. Por favor, inténtalo de nuevo más tarde.")}</p><p class="message support">${a("Si se te ha cobrado sin una cita confirmada, contacta con nuestro equipo en")} <a href="mailto:${b}">${b}</a></p><div class="actions"><mq-button variant="primary" size="lg" fullwidth @click="${this._onRetry}">${a("Reintentar verificación")}</mq-button><mq-button variant="secondary" size="lg" fullwidth @click="${this._onBack}">${a("Volver")}</mq-button></div></div></div>`}render(){switch(this._view){case"denied":return this._renderDenied();case"timeout":return this._renderTimeout();default:return this._renderVerifying()}}};s([f({type:String,attribute:"session-id"})],w.prototype,"sessionId",void 0),s([f({type:String,attribute:"api-key"})],w.prototype,"apiKey",void 0),s([f({type:String,attribute:"token"})],w.prototype,"token",void 0),s([f({type:String,attribute:"locale"})],w.prototype,"locale",void 0),s([f({type:String,attribute:"env"})],w.prototype,"env",void 0),s([f({type:Number,attribute:"timeout-ms"})],w.prototype,"timeoutMs",void 0),s([g()],w.prototype,"_view",void 0),s([n({context:h,subscribe:!0}),g()],w.prototype,"inheritedApiClient",void 0),s([r({context:h}),g()],w.prototype,"apiClient",void 0),w=s([l(),o("mq-payment-poller")],w),i();export{w as MqPaymentPoller,x as MqPaymentSucceededEvent};
@@ -1,14 +1,18 @@
1
1
  import * as lit_html from 'lit-html';
2
2
  import * as lit from 'lit';
3
3
  import { LitElement, PropertyValues } from 'lit';
4
- import { M as MediquoApiChatClient } from './chunks/index.d-Bl682CAX.js';
4
+ import { M as MediquoApiChatClient } from './chunks/index.d-XSe7Hy-Q.js';
5
5
  import { Env } from './env.js';
6
- import './chunks/index-CDBk7hVW.js';
7
- import './ui/mq-skeleton.js';
6
+ import './chunks/index-DdkeWQrh.js';
7
+ import './chunks/index-DTEtqjQF.js';
8
+ import './chunks/index-Nf3nZ9O3.js';
8
9
  export { DownloadFileEvent, MqViewDocumentsEvent } from './events.js';
9
10
  import 'axios';
10
11
  import 'zod';
11
12
  import './chunks/schemas.d-b6_AekBb.js';
13
+ import './chunks/document.model.d-DIzMiOmd.js';
14
+ import './ui/mq-button.js';
15
+ import './ui/mq-skeleton.js';
12
16
 
13
17
  declare class MqRecentDocuments extends LitElement {
14
18
  static styles: lit.CSSResult;
@@ -29,10 +33,10 @@ declare class MqRecentDocuments extends LitElement {
29
33
  private get patientHash();
30
34
  private getPatientDocumentsQuery;
31
35
  private getOrganizationSpecialtiesQuery;
32
- private get isEmpty();
33
- protected updated(): void;
34
- private specialtyNameOf;
35
36
  private handleViewAll;
37
+ private renderEmptyState;
38
+ private renderSkeleton;
39
+ private renderError;
36
40
  private renderDocuments;
37
41
  render(): lit_html.TemplateResult<1>;
38
42
  }
@@ -1 +1 @@
1
- import{isValidLocale as t,setLocale as e,getLocale as i,initLocalization as s}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{m as c}from"./chunks/runtime-Bg1WXVCx.js";import{l as p}from"./chunks/localized-decorator-BlOuLhym.js";import{Q as m}from"./chunks/query-controller-BlO1Ax65.js";import{A as h}from"./chunks/api-client-context-V1UAGtKW.js";import{l as u}from"./chunks/chunk-S5RWG6G2-DPesx3Od.js";import{g as d,t as l,r as k,a as g}from"./chunks/telemetry-client-CoWay8es.js";import{g as f}from"./chunks/get-patient-documents-query-NC9xCa_N.js";import{g as y}from"./chunks/get-patient-profile-query-4AO6xvVn.js";import{i as j,a as v,x as b,E as x}from"./chunks/lit-element-DiWJYFwC.js";import{n as w}from"./chunks/property-scuRaFcM.js";import{r as $}from"./chunks/state-LQivXIgA.js";import{setEnv as q}from"./env.js";import{MqViewDocumentsEvent as C}from"./events.js";export{DownloadFileEvent}from"./events.js";import{c as D,n as S}from"./chunks/api-chat-client-pGZWREjK.js";import"./chunks/index-CoZKmhwT.js";import"./ui/mq-skeleton.js";import{D as A}from"./chunks/index-6gxzoTLM.js";import"./chunks/chunk-4FFT6DC2-CVWibomC.js";import"./chunks/external-CJj32K_p.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"./chunks/query-Cjvi4_dT.js";import"./chunks/chunk-6CCJWPGL-TiaqZaPV.js";import"./chunks/chunk-HN62IQ7S-xbkIy7k_.js";import"./chunks/parseISO-Dj3qSTG8.js";import"./chunks/format-CRFiCNHw.js";import"./chunks/isBefore-CPpTogxo.js";import"./ui/icons/calendar-icon.js";import"./ui/icons/types.js";import"./ui/icons/file-icon.js";import"./ui/icons/arrow-right-icon.js";import"./chunks/if-defined-BYeVdwgd.js";import"./chunks/style-map-CIdqdn7C.js";import"./chunks/directive-2EDmOukv.js";import"./chunks/blob-to-base64-CUL1trde.js";import"./ui/icons/download-icon.js";import"./ui/mq-button.js";import"./chunks/class-map-Co76I6aw.js";import"./ui/mq-toast.js";const Q=j`:host{display:flex;flex-direction:column;gap:var(--sp-4);width:100%;min-width:0;box-sizing:border-box}:host([empty]){align-self:start}:host([empty]) .card{flex:0 0 auto;justify-content:flex-start}.card{display:flex;flex-direction:column;justify-content:center;gap:var(--sp-3);flex:1;min-width:0;box-sizing:border-box;background-color:var(--color-card,#fff);border:1px solid var(--color-border-subtle,#edecf1);border-radius:var(--mq-recent-documents-radius,12px);padding:var(--mq-recent-documents-padding,var(--sp-6))}.divider{height:1px;width:100%;background-color:var(--color-border-subtle,#edecf1);flex-shrink:0}`;let H=class MqRecentDocuments extends v{constructor(){super(...arguments),this.apiClient=D(),this.getPatientProfileQuery=new m(this,()=>y(this.apiClient,{enabled:!this.loginToken})),this.getPatientDocumentsQuery=new m(this,()=>({...f(this.apiClient,{patient_hash:this.patientHash,page:1,per_page:3}),enabled:!!this.patientHash})),this.getOrganizationSpecialtiesQuery=new m(this,()=>d(this.apiClient)),this.handleViewAll=()=>{l.track(k(this.patientHash)),this.dispatchEvent(new C)}}static{this.styles=Q}willUpdate(i){i.has("env")&&this.env&&q(this.env),i.has("locale")&&this.locale&&t(this.locale)&&e(this.locale);const s=S(i,{env:this.env,apiKey:this.apiKey,token:this.token,locale:this.locale},this.inheritedApiClient);s&&(this.apiClient=s)}get patientHash(){return this.loginToken?.patient.hash??this.getPatientProfileQuery.result?.data?.hash??""}get isEmpty(){const t=this.getPatientDocumentsQuery.result;return!0===t?.isSuccess&&0===(t.data?.data?.length??0)}updated(){this.toggleAttribute("empty",this.isEmpty)}specialtyNameOf(t){const e=this.getOrganizationSpecialtiesQuery.result?.data?.find(e=>Number(e.id)===Number(t));return g(e?.code??"",i(),e?.name)}renderDocuments(){return this.getPatientDocumentsQuery.render({complete:t=>0===t.data.length?b`<home-widget-empty-state icon="document" heading="${c("No tienes documentación")}" description="${c("Aquí se mostrarán tus recetas e informes médicos.")}"></home-widget-empty-state>`:b`${t.data.map((e,i)=>b`<document-row documentId="${e.document_id}" kind="${e.document_type}" name="${e.name}" specialty="${this.specialtyNameOf(e.professional.speciality_id)}" date="${e.created_at}" downloadUrl="${e.url}" patientHash="${this.patientHash}"></document-row>${i<t.data.length-1?b`<div class="divider"></div>`:x}`)}`,pending:()=>b`${Array.from({length:3}).map((t,e)=>b`<mq-skeleton height="${A}"></mq-skeleton>${e<2?b`<div class="divider"></div>`:x}`)}`,error:()=>b`<home-widget-empty-state icon="document" heading="${c("No hemos podido cargar tu documentación")}" description="${c("Vuelve a intentarlo en unos minutos.")}"></home-widget-empty-state>`})}render(){return b`<section-header heading="${c("Documentos recientes")}" action-label="${c("Ver todas")}" @section-action="${this.handleViewAll}"></section-header><div class="card">${this.renderDocuments()}</div>`}};o([w({type:String,attribute:"api-key"})],H.prototype,"apiKey",void 0),o([w({type:String,attribute:"token"})],H.prototype,"token",void 0),o([w({type:String,attribute:"locale"})],H.prototype,"locale",void 0),o([w({type:String,attribute:"env"})],H.prototype,"env",void 0),o([a({context:h,subscribe:!0}),$()],H.prototype,"inheritedApiClient",void 0),o([r({context:h}),$()],H.prototype,"apiClient",void 0),o([a({context:u,subscribe:!0})],H.prototype,"loginToken",void 0),H=o([p(),n("mq-recent-documents")],H),s();export{H as MqRecentDocuments,C as MqViewDocumentsEvent};
1
+ import{isValidLocale as t,setLocale as e,getLocale as i,initLocalization as s}from"./i18n.js";import{_ as r,c as n}from"./chunks/custom-element-D2ziPxYE.js";import{e as o}from"./chunks/provide-BwI4DDGF.js";import{c as a}from"./chunks/consume-CovVqBjI.js";import{m as c}from"./chunks/runtime-Bg1WXVCx.js";import{l as p}from"./chunks/localized-decorator-BlOuLhym.js";import{Q as m}from"./chunks/query-controller-BlO1Ax65.js";import{A as h}from"./chunks/api-client-context-V1UAGtKW.js";import{l as u}from"./chunks/chunk-S5RWG6G2-DPesx3Od.js";import{g as l,t as d,r as k}from"./chunks/telemetry-client-BdPx4SXu.js";import{g as j}from"./chunks/get-patient-documents-query-NC9xCa_N.js";import{g}from"./chunks/get-patient-profile-query-4AO6xvVn.js";import{i as f,a as y,x as v}from"./chunks/lit-element-DiWJYFwC.js";import{n as b}from"./chunks/property-scuRaFcM.js";import{r as x}from"./chunks/state-LQivXIgA.js";import{setEnv as w}from"./env.js";import{t as S}from"./chunks/index-Btj1mwcE.js";import{MqViewDocumentsEvent as q}from"./events.js";export{DownloadFileEvent}from"./events.js";import{c as C,n as $}from"./chunks/api-chat-client-CJ1EGJe3.js";import"./chunks/index-Bw-MbGKw.js";import"./chunks/index-iaTXVzFa.js";import"./chunks/chunk-4FFT6DC2-CVWibomC.js";import"./chunks/external-CJj32K_p.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"./chunks/query-Cjvi4_dT.js";import"./chunks/chunk-6CCJWPGL-TiaqZaPV.js";import"./chunks/blob-to-base64-CUL1trde.js";import"./ui/icons/download-02-icon.js";import"./chunks/if-defined-BYeVdwgd.js";import"./ui/icons/types.js";import"./ui/mq-button.js";import"./chunks/class-map-Co76I6aw.js";import"./chunks/directive-2EDmOukv.js";import"./ui/mq-toast.js";import"./ui/mq-skeleton.js";import"./chunks/style-map-CIdqdn7C.js";import"./chunks/chunk-HN62IQ7S-xbkIy7k_.js";import"./chunks/parseISO-Dj3qSTG8.js";import"./chunks/format-CRFiCNHw.js";import"./chunks/isBefore-CPpTogxo.js";import"./ui/icons/arrow-right-icon.js";import"./ui/icons/calendar-icon.js";import"./ui/icons/file-icon.js";const P=f`:host{display:flex;flex-direction:column;align-self:start;gap:var(--sp-4);width:100%;min-width:0;box-sizing:border-box}.card{display:flex;flex-direction:column;gap:var(--sp-3);min-width:0;box-sizing:border-box;background-color:var(--color-card,#fff);border:1px solid var(--color-border-subtle,#edecf1);border-radius:var(--mq-recent-documents-radius,12px);padding:var(--mq-recent-documents-padding,var(--sp-6))}`;let Q=class MqRecentDocuments extends y{constructor(){super(...arguments),this.apiClient=C(),this.getPatientProfileQuery=new m(this,()=>g(this.apiClient,{enabled:!this.loginToken})),this.getPatientDocumentsQuery=new m(this,()=>({...j(this.apiClient,{patient_hash:this.patientHash,page:1,per_page:3}),enabled:!!this.patientHash})),this.getOrganizationSpecialtiesQuery=new m(this,()=>l(this.apiClient)),this.handleViewAll=()=>{d.track(k(this.patientHash)),this.dispatchEvent(new q)}}static{this.styles=P}willUpdate(i){i.has("env")&&this.env&&w(this.env),i.has("locale")&&this.locale&&t(this.locale)&&e(this.locale);const s=$(i,{env:this.env,apiKey:this.apiKey,token:this.token,locale:this.locale},this.inheritedApiClient);s&&(this.apiClient=s)}get patientHash(){return this.loginToken?.patient.hash??this.getPatientProfileQuery.result?.data?.hash??""}renderEmptyState(){return v`<widget-empty-state icon="document" heading="${c("No tienes documentación")}" description="${c("Aquí se mostrarán tus recetas e informes médicos.")}"></widget-empty-state>`}renderSkeleton(){return v`<document-list placeholders="${3}"></document-list>`}renderError(){return v`<widget-empty-state icon="document" heading="${c("No hemos podido cargar tu documentación")}" description="${c("Vuelve a intentarlo en unos minutos.")}"></widget-empty-state>`}renderDocuments(){return this.getPatientDocumentsQuery.render({complete:t=>0===t.data.length?this.renderEmptyState():v`<document-list .documents="${S(t.data,this.getOrganizationSpecialtiesQuery.result?.data,i())}" patientHash="${this.patientHash}"></document-list>`,initial:()=>this.getPatientProfileQuery.result?.isError?this.renderError():this.renderSkeleton(),pending:()=>this.renderSkeleton(),error:()=>this.renderError()})}render(){return v`<section-header heading="${c("Documentos recientes")}" action-label="${c("Ver todas")}" @section-action="${this.handleViewAll}"></section-header><div class="card">${this.renderDocuments()}</div>`}};r([b({type:String,attribute:"api-key"})],Q.prototype,"apiKey",void 0),r([b({type:String,attribute:"token"})],Q.prototype,"token",void 0),r([b({type:String,attribute:"locale"})],Q.prototype,"locale",void 0),r([b({type:String,attribute:"env"})],Q.prototype,"env",void 0),r([a({context:h,subscribe:!0}),x()],Q.prototype,"inheritedApiClient",void 0),r([o({context:h}),x()],Q.prototype,"apiClient",void 0),r([a({context:u,subscribe:!0})],Q.prototype,"loginToken",void 0),Q=r([p(),n("mq-recent-documents")],Q),s();export{Q as MqRecentDocuments,q as MqViewDocumentsEvent};
@@ -1,13 +1,13 @@
1
1
  import * as lit_html from 'lit-html';
2
2
  import * as lit from 'lit';
3
3
  import { LitElement, PropertyValues } from 'lit';
4
- import { M as MediquoApiChatClient } from './chunks/index.d-Bl682CAX.js';
4
+ import { M as MediquoApiChatClient } from './chunks/index.d-XSe7Hy-Q.js';
5
5
  import { Env } from './env.js';
6
6
  import './ui/mq-callout.js';
7
7
  import './ui/mq-button.js';
8
8
  import './chunks/professional-overview-mO3tuMuH.js';
9
9
  import './chunks/appointment-details-CVEDe_k0.js';
10
- import './chunks/mq-chat-room-t3j3Tq4o.js';
10
+ import './chunks/mq-chat-room-jeDvIF1Z.js';
11
11
  import './ui/mq-floating-bubble.js';
12
12
  import './ui/mq-unread-badge.js';
13
13
  import './ui/mq-skeleton.js';
@@ -1,4 +1,4 @@
1
- import{isValidLocale as t,setLocale as e,getLocale as i,initLocalization as o}from"./i18n.js";import{_ as n,c as a}from"./chunks/custom-element-D2ziPxYE.js";import{m as s,s as r}from"./chunks/runtime-Bg1WXVCx.js";import{l as c}from"./chunks/localized-decorator-BlOuLhym.js";import{A as p}from"./chunks/api-client-context-V1UAGtKW.js";import{i as l,a as d,x as m,E as u}from"./chunks/lit-element-DiWJYFwC.js";import{n as h}from"./chunks/property-scuRaFcM.js";import{r as v}from"./chunks/state-LQivXIgA.js";import{setEnv as g}from"./env.js";import{MqViewAppointmentsEvent as f,MqHomeEvent as k}from"./events.js";import{c as b,A as y,n as x,C as j}from"./chunks/api-chat-client-pGZWREjK.js";import{checkIcon as w}from"./ui/icons/check-icon.js";import"./ui/mq-callout.js";import"./ui/mq-button.js";import{e as $}from"./chunks/provide-BwI4DDGF.js";import{c as q}from"./chunks/consume-CovVqBjI.js";import{l as C}from"./chunks/chunk-S5RWG6G2-DPesx3Od.js";import"./chunks/professional-overview-C4H_znIJ.js";import"./chunks/appointment-details-DXLBQnPN.js";import{Q as _}from"./chunks/query-controller-BlO1Ax65.js";import{s as S}from"./chunks/chunk-6CCJWPGL-TiaqZaPV.js";import{g as I}from"./chunks/get-appointment-query-C-gTTuiQ.js";import{g as z}from"./chunks/get-patient-profile-query-4AO6xvVn.js";import{g as A}from"./chunks/chunk-Y4EKUX25-QqMl3eiq.js";import{a as Q}from"./chunks/chunk-HN62IQ7S-xbkIy7k_.js";import{calendarIcon as O}from"./ui/icons/calendar-icon.js";import{chatbubbleIcon as T}from"./ui/icons/chat-bubble-icon.js";import{videoIcon as P}from"./ui/icons/video-icon.js";import"./mq-chat-room.js";import"./ui/mq-floating-bubble.js";import"./ui/mq-unread-badge.js";import{g as E,t as N,m as V,a as H,n as B,o as U,p as F}from"./chunks/telemetry-client-CoWay8es.js";import{f as G}from"./chunks/price-DU3YLTpk.js";import"./ui/mq-skeleton.js";import"./ui/mq-card.js";import{Q as M}from"./chunks/chunk-RCFIJTXZ-C6Ir0-sM.js";import{a as R}from"./chunks/addSeconds-ofMnxlgT.js";import"./chunks/chunk-4FFT6DC2-CVWibomC.js";import"./chunks/external-CJj32K_p.js";import"./chunks/create-context-DqP79qjF.js";import"./chunks/isBefore-CPpTogxo.js";import"./chunks/parseISO-Dj3qSTG8.js";import"./ui/icons/types.js";import"./ui/icons/info-circle-outine-icon.js";import"./chunks/class-map-Co76I6aw.js";import"./chunks/directive-2EDmOukv.js";import"./chunks/if-defined-BYeVdwgd.js";import"./chunks/context-request-event-Dfydf1ub.js";import"./chunks/context-consumer-ESdICVAb.js";import"./ui/icons/chevron-down-icon.js";import"./ui/mq-text-button.js";import"./ui/mq-avatar.js";import"./ui/icons/briefcase-icon.js";import"./ui/icons/clock-icon.js";import"./ui/icons/message-bubble-icon.js";import"./ui/icons/phone-icon.js";import"./chunks/query-Cjvi4_dT.js";import"./chunks/format-CRFiCNHw.js";import"./theme.js";import"./ui/icons/x-icon.js";import"./chunks/chunk-BUV4MGML-CkhBbfUu.js";import"./ui/icons/chevron-left-icon.js";import"./chunks/query-CeeutdfT.js";import"./ui/icons/check-double-icon.js";import"./chunks/chunk-YTQUGGS3-DmCGIoFy.js";import"./chunks/mutation-controller-CR2qcqhH.js";import"./chunks/style-map-CIdqdn7C.js";const K=l`header{padding:var(--sp-6) var(--sp-4);display:flex;align-items:center;gap:var(--sp-2);max-width:var(--content-max-width);margin:0 auto}.summary{padding:var(--sp-6) var(--sp-4);background-color:var(--color-neutrals-background-weak);max-width:var(--content-max-width);margin:0 auto}.summary-content{display:flex;flex-direction:column;gap:var(--sp-4)}.manage-appointment{box-sizing:border-box;max-width:var(--content-max-width);margin:0 auto}`;let L=class MqScheduleSuccessSkeleton extends d{static{this.styles=K}render(){return m`<div><header><mq-skeleton width="220px" height="40px" border-radius="md"></mq-skeleton></header><div class="summary"><div class="summary-content"><mq-skeleton width="280px" height="32px" border-radius="md"></mq-skeleton><mq-skeleton width="100%" height="400px" border-radius="lg"></mq-skeleton><mq-skeleton width="100%" height="80px" border-radius="lg"></mq-skeleton></div></div><div class="manage-appointment"><mq-skeleton width="100%" height="313px" border-radius="lg"></mq-skeleton></div></div>`}};L=n([a("mq-schedule-success-skeleton")],L);const D=l`.success-title{display:flex;align-items:center;gap:var(--sp-2);margin-bottom:var(--sp-4)}header h1{font-family:var(--font-titles);font-size:var(--text-3xl);line-height:var(--text-3xl--line-height);font-weight:var(--font-weight-bold);margin:0}h2{font-family:var(--font-titles);font-size:var(--text-2xl);line-height:var(--text-2xl--line-height);font-weight:var(--font-weight-bold);margin:0;margin-bottom:var(--sp-6)}.summary{padding:var(--sp-6) var(--sp-4)}.professional-card{padding:var(--sp-4)}.appointment-summary{margin-bottom:var(--sp-2);display:flex;flex-direction:column;gap:var(--sp-4)}.add-to-calendar-container{padding-top:var(--sp-4);border-top:1px solid var(--color-neutrals-border-disabled)}.price-breakdown{display:flex;flex-direction:column;gap:var(--sp-2)}.price-row{display:flex;justify-content:space-between;gap:var(--sp-4);font-family:var(--font-body);font-size:var(--text-base);line-height:var(--text-base--line-height);color:var(--color-neutrals-text-default)}.price-row--total{font-weight:var(--font-weight-semibold)}.price-breakdown hr{width:100%;border:none;border-top:1px solid var(--color-neutrals-border-disabled);margin:var(--sp-1) 0}.floating-content{height:100%}.actions{display:flex;flex-direction:column;gap:var(--sp-4)}@media (min-width:768px){.actions{flex-direction:row}}.footer-cta{margin-top:var(--sp-4);padding:var(--sp-6) var(--sp-4)}.footer-cta h2{margin-bottom:var(--sp-2)}.footer-cta .description{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 0 var(--sp-6)}.footer-cta .actions{display:flex;flex-direction:column;gap:var(--sp-3)}`;class OpenVideocallEvent extends Event{static{this.eventName="open-videocall"}constructor(t){super(OpenVideocallEvent.eventName,{bubbles:!0,composed:!0}),this.detail=t}}let W=class MqScheduleSuccess extends d{constructor(){super(...arguments),this.kind="schedule",this.showNavCtas=!1,this._trackedPageView=!1,this.apiClient=b(),this.getPatientProfileQuery=new _(this,()=>z(this.apiClient)),this.getAppointmentQuery=new _(this,()=>I(this.apiClient,{id:this.appointmentId})),this.getCouponQuery=new _(this,()=>{return t=this.apiClient,e={appointmentId:this.appointmentId},i={enabled:!!this.appointmentId},{queryKey:S(t,"appointment-consultation-coupon",e.appointmentId),queryFn:()=>t.payments.getAppointmentConsultationCoupon(e.appointmentId),retry:!1,...i};var t,e,i}),this.getOrganizationSpecialtiesQuery=new _(this,()=>E(this.apiClient)),this.isChatOpen=!1,this.unreadQuery=new _(this,()=>A(this.apiClient,{roomId:Number(this.getAppointmentQuery.result?.data?.room_id)},{enabled:!!this.getAppointmentQuery.result?.data?.room_id})),this._getCalloutText=t=>{switch(t.channel){case y.videocall:return s("Te enviaremos un enlace al email indicado cuando sea el momento de conectarte a la vídeoconsulta. Asegúrate de tener buena conexión a internet y un dispositivo con cámara y micrófono.");case y.phonecall:return s(r`El profesional te llamará al
1
+ import{isValidLocale as t,setLocale as e,getLocale as i,initLocalization as o}from"./i18n.js";import{_ as n,c as a}from"./chunks/custom-element-D2ziPxYE.js";import{m as s,s as r}from"./chunks/runtime-Bg1WXVCx.js";import{l as c}from"./chunks/localized-decorator-BlOuLhym.js";import{A as p}from"./chunks/api-client-context-V1UAGtKW.js";import{i as l,a as d,x as m,E as u}from"./chunks/lit-element-DiWJYFwC.js";import{n as h}from"./chunks/property-scuRaFcM.js";import{r as v}from"./chunks/state-LQivXIgA.js";import{setEnv as g}from"./env.js";import{MqViewAppointmentsEvent as f,MqHomeEvent as k}from"./events.js";import{c as b,A as y,n as x,C as j}from"./chunks/api-chat-client-CJ1EGJe3.js";import{checkIcon as w}from"./ui/icons/check-icon.js";import"./ui/mq-callout.js";import"./ui/mq-button.js";import{e as $}from"./chunks/provide-BwI4DDGF.js";import{c as q}from"./chunks/consume-CovVqBjI.js";import{l as C}from"./chunks/chunk-S5RWG6G2-DPesx3Od.js";import"./chunks/professional-overview-C4H_znIJ.js";import"./chunks/appointment-details-DXLBQnPN.js";import{Q as _}from"./chunks/query-controller-BlO1Ax65.js";import{s as S}from"./chunks/chunk-6CCJWPGL-TiaqZaPV.js";import{g as I}from"./chunks/get-appointment-query-C-gTTuiQ.js";import{g as z}from"./chunks/get-patient-profile-query-4AO6xvVn.js";import{g as A}from"./chunks/chunk-Y4EKUX25-QqMl3eiq.js";import{a as Q}from"./chunks/chunk-HN62IQ7S-xbkIy7k_.js";import{calendarIcon as O}from"./ui/icons/calendar-icon.js";import{chatbubbleIcon as T}from"./ui/icons/chat-bubble-icon.js";import{videoIcon as P}from"./ui/icons/video-icon.js";import"./mq-chat-room.js";import"./ui/mq-floating-bubble.js";import"./ui/mq-unread-badge.js";import{g as E,t as N,m as V,e as H,n as B,o as U,p as F}from"./chunks/telemetry-client-BdPx4SXu.js";import{f as G}from"./chunks/price-DU3YLTpk.js";import"./ui/mq-skeleton.js";import"./ui/mq-card.js";import{Q as M}from"./chunks/chunk-RCFIJTXZ-C6Ir0-sM.js";import{a as R}from"./chunks/addSeconds-ofMnxlgT.js";import"./chunks/chunk-4FFT6DC2-CVWibomC.js";import"./chunks/external-CJj32K_p.js";import"./chunks/create-context-DqP79qjF.js";import"./chunks/isBefore-CPpTogxo.js";import"./chunks/parseISO-Dj3qSTG8.js";import"./chunks/if-defined-BYeVdwgd.js";import"./ui/icons/types.js";import"./ui/icons/info-circle-outine-icon.js";import"./chunks/class-map-Co76I6aw.js";import"./chunks/directive-2EDmOukv.js";import"./chunks/context-request-event-Dfydf1ub.js";import"./chunks/context-consumer-ESdICVAb.js";import"./ui/icons/chevron-down-icon.js";import"./ui/mq-text-button.js";import"./ui/mq-avatar.js";import"./ui/icons/briefcase-icon.js";import"./ui/icons/clock-icon.js";import"./ui/icons/message-bubble-icon.js";import"./ui/icons/phone-icon.js";import"./chunks/query-Cjvi4_dT.js";import"./chunks/format-CRFiCNHw.js";import"./theme.js";import"./ui/icons/x-icon.js";import"./chunks/chunk-BUV4MGML-CkhBbfUu.js";import"./ui/icons/chevron-left-icon.js";import"./chunks/query-CeeutdfT.js";import"./ui/icons/check-double-icon.js";import"./chunks/chunk-YTQUGGS3-DmCGIoFy.js";import"./chunks/mutation-controller-CR2qcqhH.js";import"./chunks/style-map-CIdqdn7C.js";const K=l`header{padding:var(--sp-6) var(--sp-4);display:flex;align-items:center;gap:var(--sp-2);max-width:var(--content-max-width);margin:0 auto}.summary{padding:var(--sp-6) var(--sp-4);background-color:var(--color-neutrals-background-weak);max-width:var(--content-max-width);margin:0 auto}.summary-content{display:flex;flex-direction:column;gap:var(--sp-4)}.manage-appointment{box-sizing:border-box;max-width:var(--content-max-width);margin:0 auto}`;let L=class MqScheduleSuccessSkeleton extends d{static{this.styles=K}render(){return m`<div><header><mq-skeleton width="220px" height="40px" border-radius="md"></mq-skeleton></header><div class="summary"><div class="summary-content"><mq-skeleton width="280px" height="32px" border-radius="md"></mq-skeleton><mq-skeleton width="100%" height="400px" border-radius="lg"></mq-skeleton><mq-skeleton width="100%" height="80px" border-radius="lg"></mq-skeleton></div></div><div class="manage-appointment"><mq-skeleton width="100%" height="313px" border-radius="lg"></mq-skeleton></div></div>`}};L=n([a("mq-schedule-success-skeleton")],L);const D=l`.success-title{display:flex;align-items:center;gap:var(--sp-2);margin-bottom:var(--sp-4)}header h1{font-family:var(--font-titles);font-size:var(--text-3xl);line-height:var(--text-3xl--line-height);font-weight:var(--font-weight-bold);margin:0}h2{font-family:var(--font-titles);font-size:var(--text-2xl);line-height:var(--text-2xl--line-height);font-weight:var(--font-weight-bold);margin:0;margin-bottom:var(--sp-6)}.summary{padding:var(--sp-6) var(--sp-4)}.professional-card{padding:var(--sp-4)}.appointment-summary{margin-bottom:var(--sp-2);display:flex;flex-direction:column;gap:var(--sp-4)}.add-to-calendar-container{padding-top:var(--sp-4);border-top:1px solid var(--color-neutrals-border-disabled)}.price-breakdown{display:flex;flex-direction:column;gap:var(--sp-2)}.price-row{display:flex;justify-content:space-between;gap:var(--sp-4);font-family:var(--font-body);font-size:var(--text-base);line-height:var(--text-base--line-height);color:var(--color-neutrals-text-default)}.price-row--total{font-weight:var(--font-weight-semibold)}.price-breakdown hr{width:100%;border:none;border-top:1px solid var(--color-neutrals-border-disabled);margin:var(--sp-1) 0}.floating-content{height:100%}.actions{display:flex;flex-direction:column;gap:var(--sp-4)}@media (min-width:768px){.actions{flex-direction:row}}.footer-cta{margin-top:var(--sp-4);padding:var(--sp-6) var(--sp-4)}.footer-cta h2{margin-bottom:var(--sp-2)}.footer-cta .description{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 0 var(--sp-6)}.footer-cta .actions{display:flex;flex-direction:column;gap:var(--sp-3)}`;class OpenVideocallEvent extends Event{static{this.eventName="open-videocall"}constructor(t){super(OpenVideocallEvent.eventName,{bubbles:!0,composed:!0}),this.detail=t}}let W=class MqScheduleSuccess extends d{constructor(){super(...arguments),this.kind="schedule",this.showNavCtas=!1,this._trackedPageView=!1,this.apiClient=b(),this.getPatientProfileQuery=new _(this,()=>z(this.apiClient)),this.getAppointmentQuery=new _(this,()=>I(this.apiClient,{id:this.appointmentId})),this.getCouponQuery=new _(this,()=>{return t=this.apiClient,e={appointmentId:this.appointmentId},i={enabled:!!this.appointmentId},{queryKey:S(t,"appointment-consultation-coupon",e.appointmentId),queryFn:()=>t.payments.getAppointmentConsultationCoupon(e.appointmentId),retry:!1,...i};var t,e,i}),this.getOrganizationSpecialtiesQuery=new _(this,()=>E(this.apiClient)),this.isChatOpen=!1,this.unreadQuery=new _(this,()=>A(this.apiClient,{roomId:Number(this.getAppointmentQuery.result?.data?.room_id)},{enabled:!!this.getAppointmentQuery.result?.data?.room_id})),this._getCalloutText=t=>{switch(t.channel){case y.videocall:return s("Te enviaremos un enlace al email indicado cuando sea el momento de conectarte a la vídeoconsulta. Asegúrate de tener buena conexión a internet y un dispositivo con cámara y micrófono.");case y.phonecall:return s(r`El profesional te llamará al
2
2
  ${this.getPatientProfileQuery.result?.data?.profile.phone??""} en el horario
3
3
  seleccionado. Asegúrate de tener buena cobertura y poder atender en
4
4
  el horario elegido.`);case y.chat:return s("El profesional te enviará un mensaje para que podamos coordinar la cita. Asegúrate de tener buena cobertura y poder atender en el horario elegido.");default:return u}}}static{this.styles=D}get _accessToken(){return this.token??this.loginToken?.access_token}get _timezone(){return this.timezone||Intl.DateTimeFormat().resolvedOptions().timeZone||"UTC"}willUpdate(i){i.has("env")&&this.env&&g(this.env),i.has("locale")&&this.locale&&t(this.locale)&&e(this.locale);const o=x(i,{env:this.env,apiKey:this.apiKey,token:this.token,locale:this.locale},this.inheritedApiClient);o&&(this.apiClient=o)}get _patientHash(){return this.getPatientProfileQuery.result?.data?.hash??""}connectedCallback(){super.connectedCallback(),this.queryClientContext?.invalidateQueries()}updated(){!this._trackedPageView&&this._patientHash&&(this._trackedPageView=!0,N.track(V(this._patientHash,this.appointmentId)))}renderPriceBreakdown(t,e,i){const o=t.price;if(null==o||o<=0)return u;const n=t.currency??"EUR",a=t.discount_amount??0,r=a>0,c=o-a,p=this.getCouponQuery.result?.data,l=p?.name??p?.code,d=r?p?.percent_off??Math.round(a/o*100):0,h=l?`${s("Promoción")} ${l}`:s("Promoción");return m`<div class="price-breakdown"><div class="price-row"><span>${i}</span> <span>${G({amount:o,currency:n},e)}</span></div>${r?m`<div class="price-row"><span>${h} (-${d}%)</span> <span>${G({amount:-a,currency:n},e)}</span></div><hr><div class="price-row price-row--total"><span>${s("Total")}</span> <span>${G({amount:c,currency:n},e)}</span></div>`:u}</div>`}render(){return this.getAppointmentQuery.render({pending:()=>m`<mq-schedule-success-skeleton></mq-schedule-success-skeleton>`,complete:t=>{const e=i(),o=Q(t.start_date),n=R(o,t.duration),a=this.getOrganizationSpecialtiesQuery.result?.data?.find(e=>e.id===Number(t.speciality_id)),c=H(a?.code??"",e,a?.name),p=t.channel===y.videocall,l=t.channel===y.phonecall,d=!0===t.has_chat_in_appointment,h=(p||l)&&d,v=this._accessToken;return m`<div><header><div class="success-title">${w()}<h1>${"schedule"===this.kind?s("Cita confirmada"):s("Cita modificada")}</h1></div><h2>${s(r`Resumen de la cita para ${t?.to?.name??""}`)}</h2></header><mq-card class="summary" roundness="md"><div class="appointment-summary"><professional-overview .name="${t.from.name??""}" .specialtyName="${c}" .collegiateNumber="${t.from.collegiate_number??void 0}" .description="${t.from.description??""}" .languages="${t.from.languages??[]}" .avatar="${t.from.avatar??""}" always-expanded-on-desktop></professional-overview><appointment-details .startsAt="${o.toISOString()}" .duration="${t.duration}" .channel="${t.channel}" .timezone="${this._timezone}"></appointment-details>${this.renderPriceBreakdown(t,e,c||s("Consulta"))}<div class="add-to-calendar-container"><mq-text-button fontWeight="bold" size="sm" @click="${()=>{N.track(B(this._patientHash,this.appointmentId));const e=function({title:t,description:e,startsAt:i,endsAt:o}){const n=t=>t.toISOString().replace(/[-:]/g,"").replace(/\.\d{3}/,""),a=n(i),s=n(o);return`https://www.google.com/calendar/render?${new URLSearchParams({action:"TEMPLATE",text:t,dates:`${a}/${s}`,...e&&{details:e}}).toString()}`}({title:s(r`Cita agendada de ${t.from.speciality??""}`),startsAt:o,endsAt:n,description:p&&t.consultation_short_url?s(r`Enlace a la cita: ${t.consultation_short_url}`):void 0});window.open(e,"_blank")}}">${O({size:24})} ${s("Añadir al calendario")}</mq-text-button></div>${h||p?m`<div class="actions">${h?m`<mq-button variant="primary" fullwidth size="md" @click="${()=>{N.track(U(this._patientHash,this.appointmentId)),this.isChatOpen=!this.isChatOpen}}">${T({size:24})} ${s("Chatear con el profesional")} ${(this.unreadQuery.result?.data?.unread_count??0)>0?m`<mq-unread-badge></mq-unread-badge>`:u}</mq-button>`:u} ${p?m`<mq-button variant="outline" fullwidth size="md" @click="${()=>{N.track(F(this._patientHash,this.appointmentId)),this.dispatchEvent(new OpenVideocallEvent({appointmentId:this.appointmentId}))}}">${P({size:24})} ${s("Ir a videollamada")}</mq-button>`:u}</div>`:u}</div><mq-callout background="default" variant="info" ?noPadding="${!(h||p)}">${this._getCalloutText(t)}</mq-callout></mq-card>${this.showNavCtas?m`<mq-card class="footer-cta" roundness="md"><h2>${s("Tus citas")}</h2><p class="description">${s("Accede, modifica o anula tus citas.")}</p><div class="actions"><mq-button variant="primary" size="md" fullwidth @click="${()=>{this.dispatchEvent(new f({tab:"next"}))}}">${s("Ver mis citas")}</mq-button><mq-button variant="outline" size="md" fullwidth @click="${()=>{this.dispatchEvent(new k)}}">${s("Volver al inicio")}</mq-button></div></mq-card>`:u}</div><mq-floating-bubble ?dismissable="${!1}" .open="${this.isChatOpen}" @mq-close="${()=>{this.isChatOpen=!1}}" hideCloseButton>${this.isChatOpen&&v?m`<div slot="content" class="floating-content"><mq-chat-room .consultationId="${t.id}" .consultationType="${j.appointment}" .token="${v}" .roomId="${Number(t.room_id)}" .professionalHash="${t.from.hash}" @mq-chat-room-close="${()=>{this.isChatOpen=!1}}"></mq-chat-room></div>`:u}</mq-floating-bubble>`}})}};n([h({type:String})],W.prototype,"kind",void 0),n([h({type:String})],W.prototype,"appointmentId",void 0),n([h({type:String,attribute:"api-key"})],W.prototype,"apiKey",void 0),n([h({type:String,attribute:"token"})],W.prototype,"token",void 0),n([h({type:String,attribute:"timezone"})],W.prototype,"timezone",void 0),n([h({type:String,attribute:"locale"})],W.prototype,"locale",void 0),n([h({type:String,attribute:"env"})],W.prototype,"env",void 0),n([h({type:Boolean,attribute:"show-nav-ctas"})],W.prototype,"showNavCtas",void 0),n([q({context:M,subscribe:!0})],W.prototype,"queryClientContext",void 0),n([q({context:C})],W.prototype,"loginToken",void 0),n([q({context:p,subscribe:!0}),v()],W.prototype,"inheritedApiClient",void 0),n([$({context:p}),v()],W.prototype,"apiClient",void 0),n([v()],W.prototype,"isChatOpen",void 0),W=n([c(),a("mq-schedule-success")],W),o();export{W as MqScheduleSuccess,OpenVideocallEvent};