@mediquo/elements 0.11.0 → 0.12.0-rc.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 (121) hide show
  1. package/README.md +7 -18
  2. package/dist/chunks/appointment-details-BM8peAHH.js +1 -0
  3. package/dist/chunks/{appointment-details-CVEDe_k0.d.ts → appointment-details-KL9fK6vG.d.ts} +1 -2
  4. package/dist/chunks/ca_ES-DYhnenv6.js +1 -0
  5. package/dist/chunks/checkout-bridge-BFpVxNww.js +1 -0
  6. package/dist/chunks/de_DE-Dw0iVZNb.js +1 -0
  7. package/dist/chunks/{documentation-view-BSt0gtCR.js → documentation-view-CzCDvut1.js} +1 -1
  8. package/dist/chunks/en_US-DONnbI9l.js +1 -0
  9. package/dist/chunks/{index-CUirgiWh.d.ts → index-BEPyJrJL.d.ts} +1 -1
  10. package/dist/chunks/{index-B3rs7SlM.d.ts → index-BKjqWyIs.d.ts} +1 -1
  11. package/dist/chunks/{index-CCWMMqiq.js → index-DABvAuIz.js} +1 -1
  12. package/dist/chunks/index-Djkwyh_M.js +1 -0
  13. package/dist/chunks/{appointment.model.d-BWwBLaEL.d.ts → index-DwlJg2um.d.ts} +13 -0
  14. package/dist/chunks/{index-D2yqKnpP.js → index-VQqG1eyA.js} +1 -1
  15. package/dist/chunks/{index-DFaKhE7Q.d.ts → index-fut7tm1R.d.ts} +1 -1
  16. package/dist/chunks/{index.d-ByhRBSb1.d.ts → index.d-DHMNq1lu.d.ts} +2 -7
  17. package/dist/chunks/{login-token-task-Yib__6a9.js → login-token-task-NQJ77O_q.js} +1 -1
  18. package/dist/chunks/{mq-chat-room-C8wCADp2.d.ts → mq-chat-room-C0dJCvpV.d.ts} +2 -2
  19. package/dist/chunks/mq-chat-room-C2EALCSm.js +1 -0
  20. package/dist/chunks/{mq-next-appointments-CbjNpG1H.js → mq-next-appointments-DElOAaYx.js} +1 -1
  21. package/dist/chunks/{mq-recent-documents-DNqh_8J0.js → mq-recent-documents-DS5zUnH8.js} +1 -1
  22. package/dist/chunks/mq-schedule-CIb5mOTX.js +1 -0
  23. package/dist/chunks/{mq-support-chat-tdev5LC-.js → mq-support-chat-DYmvYk7b.js} +1 -1
  24. package/dist/chunks/{mq-videocall-CwYtlPu6.js → mq-videocall-CMPrGJK6.js} +1 -1
  25. package/dist/chunks/{next-appointment-card-DLU7-wIv.js → next-appointment-card-BOzfcwjD.js} +1 -1
  26. package/dist/chunks/{next-appointment-card-CPg9FuOI.d.ts → next-appointment-card-Z5G1jqtz.d.ts} +4 -4
  27. package/dist/chunks/professional-overview-Ck_SPivX.js +1 -0
  28. package/dist/chunks/{professional-overview-mO3tuMuH.d.ts → professional-overview-QVHl_ITk.d.ts} +1 -0
  29. package/dist/chunks/pt_PT-dELUeDqB.js +1 -0
  30. package/dist/chunks/task-CqjSKFwZ.js +1 -0
  31. package/dist/chunks/{telemetry-client-K37KMdy_.js → telemetry-client-DA2_SZBC.js} +1 -1
  32. package/dist/env.js +1 -1
  33. package/dist/events.d.ts +1 -22
  34. package/dist/events.js +1 -1
  35. package/dist/i18n.js +1 -1
  36. package/dist/index.d.ts +1 -1
  37. package/dist/index.js +1 -1
  38. package/dist/mq-api-client-provider.d.ts +1 -1
  39. package/dist/mq-apple-pay-checkout.d.ts +1 -1
  40. package/dist/mq-apple-pay-checkout.js +1 -1
  41. package/dist/mq-appointment-checkout.d.ts +20 -14
  42. package/dist/mq-appointment-checkout.js +1 -1
  43. package/dist/mq-appointment-documentation.d.ts +4 -4
  44. package/dist/mq-appointment-documentation.js +1 -1
  45. package/dist/mq-chat-room.d.ts +3 -3
  46. package/dist/mq-chat-room.js +1 -1
  47. package/dist/mq-checkout.d.ts +44 -61
  48. package/dist/mq-checkout.js +1 -1
  49. package/dist/mq-dashboard.d.ts +6 -6
  50. package/dist/mq-dashboard.js +1 -1
  51. package/dist/mq-documents.d.ts +2 -2
  52. package/dist/mq-documents.js +1 -1
  53. package/dist/mq-google-pay-checkout.d.ts +1 -1
  54. package/dist/mq-google-pay-checkout.js +1 -1
  55. package/dist/mq-immediate-videocall-checkout.d.ts +10 -9
  56. package/dist/mq-immediate-videocall-checkout.js +1 -1
  57. package/dist/mq-my-appointments.d.ts +6 -6
  58. package/dist/mq-my-appointments.js +1 -1
  59. package/dist/mq-next-appointments.d.ts +5 -5
  60. package/dist/mq-next-appointments.js +1 -1
  61. package/dist/mq-payment-poller.d.ts +2 -2
  62. package/dist/mq-recent-documents.d.ts +2 -2
  63. package/dist/mq-recent-documents.js +1 -1
  64. package/dist/mq-schedule-success.d.ts +5 -5
  65. package/dist/mq-schedule-success.js +2 -2
  66. package/dist/mq-schedule.d.ts +52 -98
  67. package/dist/mq-schedule.js +1 -1
  68. package/dist/mq-support-chat.d.ts +3 -3
  69. package/dist/mq-support-chat.js +1 -1
  70. package/dist/mq-terms-and-conditions.d.ts +2 -2
  71. package/dist/mq-videocall.d.ts +5 -5
  72. package/dist/mq-videocall.js +1 -1
  73. package/dist/react/mq-api-client-provider.d.ts +1 -1
  74. package/dist/react/mq-apple-pay-checkout.d.ts +1 -1
  75. package/dist/react/mq-apple-pay-checkout.js +1 -1
  76. package/dist/react/mq-appointment-checkout.d.ts +12 -8
  77. package/dist/react/mq-appointment-checkout.js +1 -1
  78. package/dist/react/mq-appointment-documentation.d.ts +4 -4
  79. package/dist/react/mq-appointment-documentation.js +1 -1
  80. package/dist/react/mq-chat-room.d.ts +3 -3
  81. package/dist/react/mq-chat-room.js +1 -1
  82. package/dist/react/mq-checkout.d.ts +11 -8
  83. package/dist/react/mq-checkout.js +1 -1
  84. package/dist/react/mq-dashboard.d.ts +6 -6
  85. package/dist/react/mq-dashboard.js +1 -1
  86. package/dist/react/mq-documents-page.d.ts +2 -2
  87. package/dist/react/mq-documents-page.js +1 -1
  88. package/dist/react/mq-documents.d.ts +2 -2
  89. package/dist/react/mq-documents.js +1 -1
  90. package/dist/react/mq-google-pay-checkout.d.ts +1 -1
  91. package/dist/react/mq-google-pay-checkout.js +1 -1
  92. package/dist/react/mq-immediate-videocall-checkout.d.ts +4 -2
  93. package/dist/react/mq-immediate-videocall-checkout.js +1 -1
  94. package/dist/react/mq-my-appointments.d.ts +6 -6
  95. package/dist/react/mq-my-appointments.js +1 -1
  96. package/dist/react/mq-next-appointments.d.ts +5 -5
  97. package/dist/react/mq-next-appointments.js +1 -1
  98. package/dist/react/mq-payment-poller.d.ts +1 -1
  99. package/dist/react/mq-recent-documents.d.ts +2 -2
  100. package/dist/react/mq-recent-documents.js +1 -1
  101. package/dist/react/mq-schedule-success.d.ts +5 -5
  102. package/dist/react/mq-schedule-success.js +1 -1
  103. package/dist/react/mq-schedule.d.ts +4 -14
  104. package/dist/react/mq-schedule.js +1 -1
  105. package/dist/react/mq-support-chat.d.ts +3 -3
  106. package/dist/react/mq-support-chat.js +1 -1
  107. package/dist/react/mq-terms-and-conditions.d.ts +2 -2
  108. package/dist/react/mq-videocall.d.ts +5 -5
  109. package/dist/react/mq-videocall.js +1 -1
  110. package/dist/ui/mq-calendar.js +1 -1
  111. package/dist/ui/mq-tabs.js +49 -22
  112. package/package.json +2 -2
  113. package/dist/chunks/appointment-details-BYGwLfww.js +0 -1
  114. package/dist/chunks/ca_ES-BOvS9ayb.js +0 -1
  115. package/dist/chunks/de_DE-B-4V4SgD.js +0 -1
  116. package/dist/chunks/en_US-CgxjeeCm.js +0 -1
  117. package/dist/chunks/mq-chat-room-B_WgeuXn.js +0 -1
  118. package/dist/chunks/mq-schedule-BfW7y8uG.js +0 -1
  119. package/dist/chunks/professional-overview-B4E05rLd.js +0 -1
  120. package/dist/chunks/pt_PT-Vb6hoo2l.js +0 -1
  121. package/dist/chunks/task-Bj8p7kJX.js +0 -1
@@ -1 +0,0 @@
1
- import{_ as e,c as t}from"./custom-element-D2ziPxYE.js";import{Q as i}from"./query-controller-B1byDHlF.js";import{A as s}from"./api-client-context-BXGqBAlO.js";import{l as a}from"./chunk-S5RWG6G2-CQJ38pW6.js";import{g as o}from"./get-appointment-query-DuHrjd8L.js";import{g as r}from"./get-organization-setup-query-De7eM6V3.js";import{S as n,z as l,g as d,a as c,A as p,t as h,B as u,C as m,D as v,E as f,F as g,G as y,H as b}from"./telemetry-client-K37KMdy_.js";import{g as w}from"./get-patient-profile-query-D9btgcxl.js";import{s as _}from"./chunk-6CCJWPGL-TiaqZaPV.js";import{D as S}from"./chunk-5EJXDIGT-Bb4_pfDr.js";import{g as x}from"./get-schedule-services-query-Io2aQ_7G.js";import{b as $,g as k,a as C,c as P,d as E,e as M,f as I,r as A}from"./chunk-NIAGR3ZC-BDlNUZa1.js";import{c as q}from"./refund-cancel-policy-DoMzcLlL.js";import{MqPaymentRedirectEvent as F,MqBackEvent as V}from"../events.js";import{i as D,e as z,h as L,P as j,S as B,c as O,n as T,j as N,k as U}from"./api-chat-client-s45J7LKB.js";import"../ui/mq-button.js";import{i as R,e as Q}from"./provide-BwI4DDGF.js";import{c as W}from"./consume-CovVqBjI.js";import{m as H,s as K}from"./runtime-Bg1WXVCx.js";import{l as G}from"./localized-decorator-BlOuLhym.js";import{E as Z,i as J,a as X,x as Y}from"./lit-element-DiWJYFwC.js";import{n as ee}from"./property-scuRaFcM.js";import{r as te}from"./state-LQivXIgA.js";import{e as ie,i as se,t as ae}from"./directive-2EDmOukv.js";import{m as oe,f as re}from"./index-C76yAope.js";import{setEnv as ne}from"../env.js";import{getLocale as le,initLocalization as de,isValidLocale as ce,setLocale as pe}from"../i18n.js";import{n as he}from"./create-context-DqP79qjF.js";import{M as ue}from"./mutation-controller-CR2qcqhH.js";import{e as me}from"./class-map-Co76I6aw.js";import{o as ve}from"./if-defined-BYeVdwgd.js";import{z as fe}from"./external-JLtsAfi6.js";import"../ui/mq-input.js";import"../ui/mq-callout.js";import"../ui/mq-page-title.js";import"./professional-overview-B4E05rLd.js";import"./appointment-details-BYGwLfww.js";import"../ui/mq-card.js";import{spinnerIcon as ge}from"../ui/icons/spinner-icon.js";import{tagIcon as ye}from"../ui/icons/tag-icon.js";import{h as be,f as we,c as _e}from"./price-DU3YLTpk.js";import{toast as Se}from"../ui/mq-toast.js";import{e as xe}from"./query-CeeutdfT.js";import{fileIcon as $e}from"../ui/icons/file-icon.js";import{uploadIcon as ke}from"../ui/icons/upload-icon.js";import{xIcon as Ce}from"../ui/icons/x-icon.js";import"../ui/mq-textarea.js";import{l as Pe}from"./chunk-FUCSYDW7-Duj5hy8S.js";import{Q as Ee}from"./chunk-RCFIJTXZ-C6Ir0-sM.js";import"../ui/mq-skeleton.js";import"../ui/mq-text-button.js";import{ICON_STROKE_WIDTH as Me}from"../ui/icons/types.js";import"../ui/mq-select.js";import"../ui/mq-badge.js";import{t as Ie,i as Ae,p as qe,f as Fe}from"./parseISO-CEksKisk.js";import{i as Ve,s as De,e as ze}from"./index-D2yqKnpP.js";import{calendarIcon as Le}from"../ui/icons/calendar-icon.js";import{skipToken as je}from"@tanstack/query-core";import"../ui/mq-time-slot-picker.js";import{breakpoints as Be}from"../theme.js";import{a as Oe}from"./addDays-CdyO-PRI.js";function Te(e,t){const i=+Ie(e)-+Ie(t);return i<0?-1:i>0?1:i}var Ne=class{constructor(e,t,i){this.host=e,this.steps=t,this._history=[],this._ctx=i,this._index=this._skipForward(0),this.host.addController(this)}hostConnected(){}hostDisconnected(){}get current(){const e=this.steps[this._index];if(!e)throw new Error(`WizardController: invalid index ${this._index} for ${this.steps.length}-step wizard`);return e.name}get ctx(){return this._ctx}get canGoBack(){return this._history.length>0}next(e){if(e&&(this._ctx={...this._ctx,...e}),this._index>=this.steps.length-1)return void this.host.requestUpdate();const t=this._skipForward(this._index+1);t!==this._index&&(this._history.push(this._index),this._index=t),this.host.requestUpdate()}goTo(e,t,i={}){t&&(this._ctx={...this._ctx,...t});const s=this.steps.findIndex(t=>t.name===e);if(s<0)throw new Error(`WizardController: unknown step "${e}"`);const a=this._skipForward(s);i.replace?(this._history[this._history.length-1]===a&&this._history.pop(),this._index=a):a!==this._index&&(this._history.push(this._index),this._index=a),this.host.requestUpdate()}back(){const e=this._history.pop();return void 0!==e&&(this._index=e,this.host.requestUpdate(),!0)}reconcile(e){const t={...this._ctx,...e},i=!function(e,t){if(e===t)return!0;const i=Object.keys(e),s=Object.keys(t);if(i.length!==s.length)return!1;for(const s of i)if(e[s]!==t[s])return!1;return!0}(this._ctx,t);this._ctx=t;const s=this._skipForward(this._index),a=s!==this._index;a&&(this._history.push(this._index),this._index=s),(i||a)&&this.host.requestUpdate()}_skipForward(e){let t=e;for(;t<this.steps.length-1;){const e=this.steps[t];if(!e?.skipIf?.(this._ctx))return t;t++}return t}};const Ue=ie(class extends se{constructor(){super(...arguments),this.key=Z}render(e,t){return this.key=e,t}update(e,[t,i]){return t!==this.key&&(oe(e),this.key=t),i}}),Re=he(Symbol.for("mq-schedule:patient"));class DiscountAppliedEvent extends Event{static{this.eventName="discount-applied"}constructor(e){super(DiscountAppliedEvent.eventName,{bubbles:!0,composed:!0}),this.detail=e}}class AuthRequiredEvent extends Event{static{this.eventName="auth-required"}constructor(e){super(AuthRequiredEvent.eventName,{bubbles:!0,composed:!0}),this.detail=e}}function Qe(e,t){if(!e)return;const i=function(e){if(e)return l[e]??e}(e);return t?.find(t=>t.code===i||String(t.id)===e)?.id}function We(e,t){if(!e)return;const i=n[e];return i?t?.find(e=>e.channel===i):t?.find(t=>t.code===e||t.id===e)}function He(e){const t=Qe(e.defaultSpecialty,e.specialties),i=We(e.defaultService,e.services),s=e.defaultProfessionalHash?{avatar:e.professional?.avatar??null,collegiate_number:e.professional?.collegiate_number??null,description:e.professional?.description??null,languages:e.professional?.languages??[],name:e.professional?.name??"",id:e.professional?.hash??"",speciality:{id:t??0}}:void 0;return{service:i,specialty:t?.toString(),slot:void 0,professional:s,firstAvailableSlotDay:void 0,paymentSessionId:void 0,paymentUrl:void 0,paymentProvider:void 0,paymentRequest:void 0,appliedDiscount:void 0,profileComplete:e.profileComplete,requiresPayment:e.requiresPayment,error:!1}}const Ke={name:"completeProfile",skipIf:e=>e.profileComplete},Ge={name:"payment",skipIf:e=>!e.requiresPayment},Ze=[{name:"selectProfessional"},{name:"selectSlot"},Ke,{name:"confirm"},Ge,{name:"done"}],Je=[{name:"selectSlot"},Ke,{name:"confirm"},Ge,{name:"done"}],Xe=[{name:"selectSlot"},Ke,{name:"confirm"},{name:"done"}];function Ye(e){return e.totalAmount<=0}class InvalidDiscountCodeError extends Error{constructor(e="Invalid discount code"){super(e),this.name="InvalidDiscountCodeError"}}function et(e,t){t.stopPropagation(),e.dispatchEvent(new CustomEvent("back"))}const tt=new WeakMap,it=new WeakMap,st={current:[]};let at=!1,ot=0;const rt=new Set,nt=new Map;function lt(e){const t=Array.from(e).sort((e,t)=>e instanceof Derived&&e.options.deps.includes(t)?1:t instanceof Derived&&t.options.deps.includes(e)?-1:0);for(const e of t){if(st.current.includes(e))continue;st.current.push(e),e.recompute();const t=it.get(e);if(t)for(const e of t){const t=tt.get(e);t&&lt(t)}}}function dt(e){const t={prevVal:e.prevState,currentVal:e.state};for(const i of e.listeners)i(t)}function ct(e){const t={prevVal:e.prevState,currentVal:e.state};for(const i of e.listeners)i(t)}function pt(e){if(ot>0&&!nt.has(e)&&nt.set(e,e.prevState),rt.add(e),!(ot>0||at))try{for(at=!0;rt.size>0;){const e=Array.from(rt);rt.clear();for(const t of e){const e=nt.get(t)??t.prevState;t.prevState=e,dt(t)}for(const t of e){const e=tt.get(t);e&&(st.current.push(t),lt(e))}for(const t of e){const e=tt.get(t);if(e)for(const t of e)ct(t)}}}finally{at=!1,st.current=[],nt.clear()}}function ht(e){ot++;try{e()}finally{if(ot--,0===ot){const e=rt.values().next().value;e&&pt(e)}}}class Store{constructor(e,t){this.listeners=new Set,this.subscribe=e=>{var t,i;this.listeners.add(e);const s=null==(i=null==(t=this.options)?void 0:t.onSubscribe)?void 0:i.call(t,e,this);return()=>{this.listeners.delete(e),null==s||s()}},this.prevState=e,this.state=e,this.options=t}setState(e){var t,i,s;this.prevState=this.state,(null==(t=this.options)?void 0:t.updateFn)?this.state=this.options.updateFn(this.prevState)(e):!function(e){return"function"==typeof e}(e)?this.state=e:this.state=e(this.prevState),null==(s=null==(i=this.options)?void 0:i.onUpdate)||s.call(i),pt(this)}}class Derived{constructor(e){this.listeners=new Set,this._subscriptions=[],this.lastSeenDepValues=[],this.getDepVals=()=>{const e=this.options.deps.length,t=new Array(e),i=new Array(e);for(let s=0;s<e;s++){const e=this.options.deps[s];t[s]=e.prevState,i[s]=e.state}return this.lastSeenDepValues=i,{prevDepVals:t,currDepVals:i,prevVal:this.prevState??void 0}},this.recompute=()=>{var e,t;this.prevState=this.state;const i=this.getDepVals();this.state=this.options.fn(i),null==(t=(e=this.options).onUpdate)||t.call(e)},this.checkIfRecalculationNeededDeeply=()=>{for(const e of this.options.deps)e instanceof Derived&&e.checkIfRecalculationNeededDeeply();let e=!1;const t=this.lastSeenDepValues,{currDepVals:i}=this.getDepVals();for(let s=0;s<i.length;s++)if(i[s]!==t[s]){e=!0;break}e&&this.recompute()},this.mount=()=>(this.registerOnGraph(),this.checkIfRecalculationNeededDeeply(),()=>{this.unregisterFromGraph();for(const e of this._subscriptions)e()}),this.subscribe=e=>{var t,i;this.listeners.add(e);const s=null==(i=(t=this.options).onSubscribe)?void 0:i.call(t,e,this);return()=>{this.listeners.delete(e),null==s||s()}},this.options=e,this.state=e.fn({prevDepVals:void 0,prevVal:void 0,currDepVals:this.getDepVals().currDepVals})}registerOnGraph(e=this.options.deps){for(const t of e)if(t instanceof Derived)t.registerOnGraph(),this.registerOnGraph(t.options.deps);else if(t instanceof Store){let e=tt.get(t);e||(e=new Set,tt.set(t,e)),e.add(this);let i=it.get(this);i||(i=new Set,it.set(this,i)),i.add(t)}}unregisterFromGraph(e=this.options.deps){for(const t of e)if(t instanceof Derived)this.unregisterFromGraph(t.options.deps);else if(t instanceof Store){const e=tt.get(t);e&&e.delete(this);const i=it.get(this);i&&i.delete(t)}}}function ut(e,t){return"function"==typeof e?e(t):e}function mt(e,t){return xt(t).reduce((e,t)=>null===e?null:void 0!==e?e[t]:void 0,e)}function vt(e,t,i){const s=xt(t);return function e(t){if(!s.length)return ut(i,t);const a=s.shift();if("string"==typeof a||"number"==typeof a&&!Array.isArray(t))return"object"==typeof t?(null===t&&(t={}),{...t,[a]:e(t[a])}):{[a]:e()};if(Array.isArray(t)&&"number"==typeof a){const i=t.slice(0,a);return[...i.length?i:new Array(a),e(t[a]),...t.slice(a+1)]}return[...new Array(a),e()]}(e)}const ft=/^(\d+)$/gm,gt=/\.(\d+)(?=\.)/gm,yt=/^(\d+)\./gm,bt=/\.(\d+$)/gm,wt=/\.{2,}/gm,_t="__int__",St=`${_t}$1`;function xt(e){if(Array.isArray(e))return[...e];if("string"!=typeof e)throw new Error("Path must be a string.");return e.replace(/(^\[)|]/gm,"").replace(/\[/g,".").replace(ft,St).replace(gt,`.${St}.`).replace(yt,`${St}.`).replace(bt,`.${St}`).replace(wt,".").split(".").map(e=>{if(e.startsWith(_t)){const t=e.substring(_t.length),i=parseInt(t,10);return String(i)===t?i:t}return e})}function $t(e){return!(Array.isArray(e)&&0===e.length)}function kt(e,t){return t.validationLogic({form:t.form,validators:t.validators,event:{type:e,async:!1},runValidation:e=>e.validators.filter(Boolean).map(e=>({cause:e.cause,validate:e.fn}))})}function Ct(e,t){const{asyncDebounceMs:i}=t,{onBlurAsyncDebounceMs:s,onChangeAsyncDebounceMs:a,onDynamicAsyncDebounceMs:o}=t.validators||{},r=i??0;return t.validationLogic({form:t.form,validators:t.validators,event:{type:e,async:!0},runValidation:t=>t.validators.filter(Boolean).map(t=>{const i=t?.cause||e;let n=r;switch(i){case"change":n=a??r;break;case"blur":n=s??r;break;case"dynamic":n=o??r;break;case"submit":n=0}return"submit"===e&&(n=0),{cause:i,validate:t.fn,debounceMs:n}})})}const Pt=e=>!!e&&"object"==typeof e&&"fields"in e;function Et(e,t){if(Object.is(e,t))return!0;if("object"!=typeof e||null===e||"object"!=typeof t||null===t)return!1;if(e instanceof Date&&t instanceof Date)return e.getTime()===t.getTime();if(e instanceof Map&&t instanceof Map){if(e.size!==t.size)return!1;for(const[i,s]of e)if(!t.has(i)||!Object.is(s,t.get(i)))return!1;return!0}if(e instanceof Set&&t instanceof Set){if(e.size!==t.size)return!1;for(const i of e)if(!t.has(i))return!1;return!0}const i=Object.keys(e),s=Object.keys(t);if(i.length!==s.length)return!1;for(const a of i)if(!s.includes(a)||!Et(e[a],t[a]))return!1;return!0}const Mt=({newFormValidatorError:e,isPreviousErrorFromFormValidator:t,previousErrorValue:i})=>e?{newErrorValue:e,newSource:"form"}:t?{newErrorValue:void 0,newSource:void 0}:i?{newErrorValue:i,newSource:"field"}:{newErrorValue:void 0,newSource:void 0},It=({formLevelError:e,fieldLevelError:t})=>t?{newErrorValue:t,newSource:"field"}:e?{newErrorValue:e,newSource:"form"}:{newErrorValue:void 0,newSource:void 0};function At(e,t){return null==e?t:{...e,...t}}let qt=256;const Ft=[];let Vt;for(;qt--;)Ft[qt]=(qt+256).toString(16).substring(1);const Dt=e=>{if(!e.validators)return e.runValidation({validators:[],form:e.form});const t=e.event.async,i=t?void 0:{fn:e.validators.onMount,cause:"mount"},s={fn:t?e.validators.onChangeAsync:e.validators.onChange,cause:"change"},a={fn:t?e.validators.onBlurAsync:e.validators.onBlur,cause:"blur"},o={fn:t?e.validators.onSubmitAsync:e.validators.onSubmit,cause:"submit"},r=t?void 0:{fn:()=>{},cause:"server"};switch(e.event.type){case"mount":return e.runValidation({validators:[i],form:e.form});case"submit":return e.runValidation({validators:[s,a,o,r],form:e.form});case"server":return e.runValidation({validators:[],form:e.form});case"blur":return e.runValidation({validators:[a,r],form:e.form});case"change":return e.runValidation({validators:[s,r],form:e.form});default:throw new Error(`Unknown validation event type: ${e.event.type}`)}};const zt=(e,t)=>{const i=function(e,t){const i=new Map;for(const s of e){const e=s.path??[];let a=t,o="";for(let t=0;t<e.length;t++){const i=e[t];if(void 0===i)continue;const s="object"==typeof i?i.key:i,r=Number(s);Array.isArray(a)&&!Number.isNaN(r)?o+=`[${r}]`:o+=(t>0?".":"")+String(s),a="object"==typeof a&&null!==a?a[s]:void 0}i.set(o,(i.get(o)??[]).concat(s))}return Object.fromEntries(i)}(e,t);return{form:i,fields:i}},Lt={validate({value:e,validationSource:t},i){const s=i["~standard"].validate(e);if(s instanceof Promise)throw new Error("async function passed to sync validator");if(s.issues)return"field"===t?s.issues:zt(s.issues,e)},async validateAsync({value:e,validationSource:t},i){const s=await i["~standard"].validate(e);if(s.issues)return"field"===t?s.issues:zt(s.issues,e)}},jt=e=>!!e&&"~standard"in e,Bt={isValidating:!1,isTouched:!1,isBlurred:!1,isDirty:!1,isPristine:!0,isValid:!0,isDefaultValue:!0,errors:[],errorMap:{},errorSourceMap:{}};function Ot(e){function t(e,t){return`${e}[${t}]`}function i(t,i){("up"===i?t:[...t].reverse()).forEach(t=>{const a=function(e,t){return e.replace(/\[(\d+)\]/,(e,i)=>{const s=parseInt(i,10);return`[${"up"===t?s+1:Math.max(0,s-1)}]`})}(t.toString(),i),o=e.getFieldMeta(a);o?e.setFieldMeta(t,o):e.setFieldMeta(t,s())})}const s=()=>Bt,a=(a,o,r)=>{i(a,"down"),a.forEach(i=>{i.toString().startsWith(t(o,r))&&e.setFieldMeta(i,s())})},o=e=>{i(e,"up")},r=(s,a,o,r)=>{const n=new Map(Object.keys(e.fieldInfo).filter(e=>e.startsWith(t(a,o))).map(t=>[t,e.getFieldMeta(t)]));i(s,o<r?"up":"down"),Object.keys(e.fieldInfo).filter(e=>e.startsWith(t(a,r))).forEach(i=>{const s=i.replace(t(a,r),t(a,o)),l=n.get(s);l&&e.setFieldMeta(i,l)})},n=(i,s,a,o)=>{i.forEach(i=>{if(!i.toString().startsWith(t(s,a)))return;const r=i.toString().replace(t(s,a),t(s,o)),[n,l]=[e.getFieldMeta(i),e.getFieldMeta(r)];n&&e.setFieldMeta(r,n),l&&e.setFieldMeta(i,l)})};return{handleArrayFieldMetaShift:function(i,s,l,d){const c=function(i,s,a,o){const r=[t(i,s)];if("swap"===a)r.push(t(i,o));else if("move"===a){const[e,a]=[Math.min(s,o),Math.max(s,o)];for(let s=e;s<=a;s++)r.push(t(i,s))}else{const a=e.getFieldValue(i),o=Array.isArray(a)?a.length:0;for(let e=s+1;e<o;e++)r.push(t(i,e))}return Object.keys(e.fieldInfo).filter(e=>r.some(t=>e.startsWith(t)))}(i,s,l,d);({insert:()=>a(c,i,s),remove:()=>o(c),swap:()=>void 0!==d&&n(c,i,s,d),move:()=>void 0!==d&&r(c,i,s,d)})[l]()}}}class EventClient{#e;#t;#i;#s;#a;#o;#r;#n=0;#l=5;#d=()=>{this.debugLog("Connected to event bus"),this.#a=!0,this.debugLog("Emitting queued events",this.#s),this.#s.forEach(e=>this.emitEventToBus(e)),this.#s=[],this.stopConnectLoop(),this.#t().removeEventListener("tanstack-connect-success",this.#d)};#c=()=>{if(this.#t().addEventListener("tanstack-connect-success",this.#d),this.#n<this.#l)return this.#n++,void this.dispatchCustomEvent("tanstack-connect",{});this.#t().removeEventListener("tanstack-connect",this.#c),this.debugLog("Max retries reached, giving up on connection"),this.stopConnectLoop()};constructor({pluginId:e,debug:t=!1}){this.#e=e,this.#t=this.getGlobalTarget,this.#i=t,this.debugLog(" Initializing event subscription for plugin",this.#e),this.#s=[],this.#a=!1,this.#o=null,this.#r=500}startConnectLoop(){null!==this.#o||this.#a||(this.debugLog(`Starting connect loop (every ${this.#r}ms)`),this.#o=setInterval(this.#c,this.#r))}stopConnectLoop(){null!==this.#o&&(clearInterval(this.#o),this.#o=null,this.debugLog("Stopped connect loop"))}debugLog(...e){this.#i&&console.log(`🌴 [tanstack-devtools:${this.#e}-plugin]`,...e)}getGlobalTarget(){if("undefined"!=typeof globalThis&&globalThis.__TANSTACK_EVENT_TARGET__)return this.debugLog("Using global event target"),globalThis.__TANSTACK_EVENT_TARGET__;if("undefined"!=typeof window&&void 0!==window.addEventListener)return this.debugLog("Using window as event target"),window;const e="undefined"!=typeof EventTarget?new EventTarget:void 0;return void 0===e||void 0===e.addEventListener?(this.debugLog("No event mechanism available, running in non-web environment"),{addEventListener:()=>{},removeEventListener:()=>{},dispatchEvent:()=>!1}):(this.debugLog("Using new EventTarget as fallback"),e)}getPluginId(){return this.#e}dispatchCustomEventShim(e,t){try{const i=new Event(e,{detail:t});this.#t().dispatchEvent(i)}catch(e){this.debugLog("Failed to dispatch shim event")}}dispatchCustomEvent(e,t){try{this.#t().dispatchEvent(new CustomEvent(e,{detail:t}))}catch(i){this.dispatchCustomEventShim(e,t)}}emitEventToBus(e){this.debugLog("Emitting event to client bus",e),this.dispatchCustomEvent("tanstack-dispatch-event",e)}emit(e,t){return this.#a?this.emitEventToBus({type:`${this.#e}:${e}`,payload:t,pluginId:this.#e}):(this.debugLog("Bus not available, will be pushed as soon as connected"),this.#s.push({type:`${this.#e}:${e}`,payload:t,pluginId:this.#e}),void("undefined"!=typeof CustomEvent&&(this.#c(),this.startConnectLoop())))}on(e,t){const i=`${this.#e}:${e}`,s=e=>{this.debugLog("Received event from bus",e.detail),t(e.detail)};return this.#t().addEventListener(i,s),this.debugLog("Registered event to bus",i),()=>{this.#t().removeEventListener(i,s)}}onAll(e){const t=t=>{const i=t.detail;e(i)};return this.#t().addEventListener("tanstack-devtools-global",t),()=>this.#t().removeEventListener("tanstack-devtools-global",t)}onAllPluginEvents(e){const t=t=>{const i=t.detail;this.#e&&i.pluginId!==this.#e||e(i)};return this.#t().addEventListener("tanstack-devtools-global",t),()=>this.#t().removeEventListener("tanstack-devtools-global",t)}}const Tt=new class FormEventClient extends EventClient{constructor(){super({pluginId:"form-devtools"})}};function Nt(e){return{values:e.values??{},errorMap:e.errorMap??{},fieldMetaBase:e.fieldMetaBase??{},isSubmitted:e.isSubmitted??!1,isSubmitting:e.isSubmitting??!1,isValidating:e.isValidating??!1,submissionAttempts:e.submissionAttempts??0,isSubmitSuccessful:e.isSubmitSuccessful??!1,validationMetaMap:e.validationMetaMap??{onChange:void 0,onBlur:void 0,onSubmit:void 0,onMount:void 0,onServer:void 0,onDynamic:void 0}}}class FormApi{constructor(e){this.options={},this.fieldInfo={},this.prevTransformArray=[],this.mount=()=>{const e=this.fieldMetaDerived.mount(),t=this.store.mount(),i=()=>{e(),t(),Tt.emit("form-unmounted",{id:this._formId})};this.options.listeners?.onMount?.({formApi:this});const{onMount:s}=this.options.validators||{};return Tt.emit("form-state-change",{id:this._formId,state:this.store.state,options:this.options}),s?(this.validateSync("mount"),i):i},this.update=e=>{if(!e)return;const t=this.options;this.options=e;const i=!!e.transform?.deps?.some((e,t)=>e!==this.prevTransformArray[t]),s=e.defaultValues&&!Et(e.defaultValues,t.defaultValues)&&!this.state.isTouched,a=!Et(e.defaultState,t.defaultState)&&!this.state.isTouched;(s||a||i)&&ht(()=>{this.baseStore.setState(()=>Nt(Object.assign({},this.state,a?e.defaultState:{},s?{values:e.defaultValues}:{},i?{_force_re_eval:!this.state._force_re_eval}:{})))})},this.reset=(e,t)=>{const{fieldMeta:i}=this.state,s=this.resetFieldMeta(i);e&&!t?.keepDefaultValues&&(this.options={...this.options,defaultValues:e}),this.baseStore.setState(()=>Nt({...this.options.defaultState,values:e??this.options.defaultValues??this.options.defaultState?.values,fieldMetaBase:s}))},this.validateAllFields=async e=>{const t=[];ht(()=>{Object.values(this.fieldInfo).forEach(i=>{if(!i.instance)return;const s=i.instance;t.push(Promise.resolve().then(()=>s.validate(e,{skipFormValidation:!0}))),i.instance.state.meta.isTouched||i.instance.setMeta(e=>({...e,isTouched:!0}))})});return(await Promise.all(t)).flat()},this.validateArrayFieldsStartingFrom=async(e,t,i)=>{const s=this.getFieldValue(e),a=Array.isArray(s)?Math.max(s.length-1,0):null,o=[`${e}[${t}]`];for(let i=t+1;i<=(a??0);i++)o.push(`${e}[${i}]`);const r=Object.keys(this.fieldInfo).filter(e=>o.some(t=>e.startsWith(t))),n=[];ht(()=>{r.forEach(e=>{n.push(Promise.resolve().then(()=>this.validateField(e,i)))})});return(await Promise.all(n)).flat()},this.validateField=(e,t)=>{const i=this.fieldInfo[e]?.instance;return i?(i.state.meta.isTouched||i.setMeta(e=>({...e,isTouched:!0})),i.validate(t)):[]},this.validateSync=e=>{const t=kt(e,{...this.options,form:this,validationLogic:this.options.validationLogic||Dt});let i=!1;const s={};return ht(()=>{for(const e of t){if(!e.validate)continue;const t=this.runValidator({validate:e.validate,value:{value:this.state.values,formApi:this,validationSource:"form"},type:"validate"}),{formError:a,fieldErrors:o}=Ut(t),r=Rt(e.cause);for(const e of Object.keys(this.state.fieldMeta)){const t=this.getFieldMeta(e);if(!t)continue;const{errorMap:i,errorSourceMap:a}=t,n=o?.[e],{newErrorValue:l,newSource:d}=Mt({newFormValidatorError:n,isPreviousErrorFromFormValidator:"form"===a?.[r],previousErrorValue:i?.[r]});"form"===d&&(s[e]={...s[e],[r]:n}),i?.[r]!==l&&this.setFieldMeta(e,e=>({...e,errorMap:{...e.errorMap,[r]:l},errorSourceMap:{...e.errorSourceMap,[r]:d}}))}this.state.errorMap?.[r]!==a&&this.baseStore.setState(e=>({...e,errorMap:{...e.errorMap,[r]:a}})),(a||o)&&(i=!0)}const a=Rt("submit");this.state.errorMap?.[a]&&"submit"!==e&&!i&&this.baseStore.setState(e=>({...e,errorMap:{...e.errorMap,[a]:void 0}}));const o=Rt("server");this.state.errorMap?.[o]&&"server"!==e&&!i&&this.baseStore.setState(e=>({...e,errorMap:{...e.errorMap,[o]:void 0}}))}),{hasErrored:i,fieldsErrorMap:s}},this.validateAsync=async e=>{const t=Ct(e,{...this.options,form:this,validationLogic:this.options.validationLogic||Dt});this.state.isFormValidating||this.baseStore.setState(e=>({...e,isFormValidating:!0}));const i=[];let s;for(const e of t){if(!e.validate)continue;const t=Rt(e.cause),a=this.state.validationMetaMap[t];a?.lastAbortController.abort();const o=new AbortController;this.state.validationMetaMap[t]={lastAbortController:o},i.push(new Promise(async t=>{let i;try{i=await new Promise((t,i)=>{setTimeout(async()=>{if(o.signal.aborted)return t(void 0);try{t(await this.runValidator({validate:e.validate,value:{value:this.state.values,formApi:this,validationSource:"form",signal:o.signal},type:"validateAsync"}))}catch(e){i(e)}},e.debounceMs)})}catch(e){i=e}const{formError:a,fieldErrors:r}=Ut(i);r&&(s=s?{...s,...r}:r);const n=Rt(e.cause);for(const e of Object.keys(this.state.fieldMeta)){const t=this.getFieldMeta(e);if(!t)continue;const{errorMap:i,errorSourceMap:a}=t,o=s?.[e],{newErrorValue:r,newSource:l}=Mt({newFormValidatorError:o,isPreviousErrorFromFormValidator:"form"===a?.[n],previousErrorValue:i?.[n]});i?.[n]!==r&&this.setFieldMeta(e,e=>({...e,errorMap:{...e.errorMap,[n]:r},errorSourceMap:{...e.errorSourceMap,[n]:l}}))}this.baseStore.setState(e=>({...e,errorMap:{...e.errorMap,[n]:a}})),t(s?{fieldErrors:s,errorMapKey:n}:void 0)}))}let a=[];const o={};if(i.length){a=await Promise.all(i);for(const e of a)if(e?.fieldErrors){const{errorMapKey:t}=e;for(const[i,s]of Object.entries(e.fieldErrors)){const e={...o[i]||{},[t]:s};o[i]=e}}}return this.baseStore.setState(e=>({...e,isFormValidating:!1})),o},this.validate=e=>{const{hasErrored:t,fieldsErrorMap:i}=this.validateSync(e);return t&&!this.options.asyncAlways?i:this.validateAsync(e)},this.getFieldValue=e=>mt(this.state.values,e),this.getFieldMeta=e=>this.state.fieldMeta[e],this.getFieldInfo=e=>this.fieldInfo[e]||={instance:null,validationMetaMap:{onChange:void 0,onBlur:void 0,onSubmit:void 0,onMount:void 0,onServer:void 0,onDynamic:void 0}},this.setFieldMeta=(e,t)=>{this.baseStore.setState(i=>({...i,fieldMetaBase:{...i.fieldMetaBase,[e]:ut(t,i.fieldMetaBase[e])}}))},this.resetFieldMeta=e=>Object.keys(e).reduce((e,t)=>(e[t]=Bt,e),{}),this.setFieldValue=(e,t,i)=>{const s=i?.dontUpdateMeta??!1,a=i?.dontRunListeners??!1,o=i?.dontValidate??!1;ht(()=>{s||this.setFieldMeta(e,e=>({...e,isTouched:!0,isDirty:!0,errorMap:{...e?.errorMap,onMount:void 0}})),this.baseStore.setState(i=>({...i,values:vt(i.values,e,t)}))}),a||this.getFieldInfo(e).instance?.triggerOnChangeListener(),o||this.validateField(e,"change")},this.deleteField=e=>{const t=Object.keys(this.fieldInfo).filter(t=>{const i=e.toString();return t!==i&&t.startsWith(i)}),i=[...t,e];this.baseStore.setState(e=>{const t={...e};return i.forEach(e=>{t.values=function(e,t){const i=xt(t);return function e(t){if(!t)return;if(1===i.length){const e=i[0];if(Array.isArray(t)&&"number"==typeof e)return t.filter((t,i)=>i!==e);const{[e]:s,...a}=t;return a}const s=i.shift();if("string"==typeof s&&"object"==typeof t)return{...t,[s]:e(t[s])};if("number"==typeof s&&Array.isArray(t)){if(s>=t.length)return t;const i=t.slice(0,s);return[...i.length?i:new Array(s),e(t[s]),...t.slice(s+1)]}throw new Error("It seems we have created an infinite loop in deleteBy. ")}(e)}(t.values,e),delete this.fieldInfo[e],delete t.fieldMetaBase[e]}),t})},this.pushFieldValue=(e,t,i)=>{this.setFieldValue(e,e=>[...Array.isArray(e)?e:[],t],i)},this.insertFieldValue=async(e,t,i,s)=>{this.setFieldValue(e,e=>[...e.slice(0,t),i,...e.slice(t)],At(s,{dontValidate:!0})),await this.validateField(e,"change"),Ot(this).handleArrayFieldMetaShift(e,t,"insert"),await this.validateArrayFieldsStartingFrom(e,t,"change")},this.replaceFieldValue=async(e,t,i,s)=>{this.setFieldValue(e,e=>e.map((e,s)=>s===t?i:e),At(s,{dontValidate:!0})),await this.validateField(e,"change"),await this.validateArrayFieldsStartingFrom(e,t,"change")},this.removeFieldValue=async(e,t,i)=>{const s=this.getFieldValue(e),a=Array.isArray(s)?Math.max(s.length-1,0):null;if(this.setFieldValue(e,e=>e.filter((e,i)=>i!==t),At(i,{dontValidate:!0})),Ot(this).handleArrayFieldMetaShift(e,t,"remove"),null!==a){const t=`${e}[${a}]`;this.deleteField(t)}await this.validateField(e,"change"),await this.validateArrayFieldsStartingFrom(e,t,"change")},this.swapFieldValues=(e,t,i,s)=>{this.setFieldValue(e,e=>{const s=e[t],a=e[i];return vt(vt(e,`${t}`,a),`${i}`,s)},At(s,{dontValidate:!0})),Ot(this).handleArrayFieldMetaShift(e,t,"swap",i),this.validateField(e,"change"),this.validateField(`${e}[${t}]`,"change"),this.validateField(`${e}[${i}]`,"change")},this.moveFieldValues=(e,t,i,s)=>{this.setFieldValue(e,e=>{const s=[...e];return s.splice(i,0,s.splice(t,1)[0]),s},At(s,{dontValidate:!0})),Ot(this).handleArrayFieldMetaShift(e,t,"move",i),this.validateField(e,"change"),this.validateField(`${e}[${t}]`,"change"),this.validateField(`${e}[${i}]`,"change")},this.clearFieldValues=(e,t)=>{const i=this.getFieldValue(e),s=Array.isArray(i)?Math.max(i.length-1,0):null;if(this.setFieldValue(e,[],At(t,{dontValidate:!0})),null!==s)for(let t=0;t<=s;t++){const i=`${e}[${t}]`;this.deleteField(i)}this.validateField(e,"change")},this.resetField=e=>{this.baseStore.setState(t=>({...t,fieldMetaBase:{...t.fieldMetaBase,[e]:Bt},values:this.options.defaultValues?vt(t.values,e,mt(this.options.defaultValues,e)):t.values}))},this.getAllErrors=()=>({form:{errors:this.state.errors,errorMap:this.state.errorMap},fields:Object.entries(this.state.fieldMeta).reduce((e,[t,i])=>(Object.keys(i).length&&i.errors.length&&(e[t]={errors:i.errors,errorMap:i.errorMap}),e),{})}),this.parseValuesWithSchema=e=>Lt.validate({value:this.state.values,validationSource:"form"},e),this.parseValuesWithSchemaAsync=e=>Lt.validateAsync({value:this.state.values,validationSource:"form"},e),this.timeoutIds={validations:{},listeners:{},formListeners:{}},this._formId=e?.formId??function(){let e,t=0,i="";if(!Vt||qt+16>256){for(Vt=new Array(256),t=256;t--;)Vt[t]=256*Math.random()|0;t=0,qt=0}for(;t<16;t++)e=Vt[qt+t],i+=6===t?Ft[15&e|64]:8===t?Ft[63&e|128]:Ft[e],1&t&&t>1&&t<11&&(i+="-");return qt++,i}(),this._devtoolsSubmissionOverride=!1,this.baseStore=new Store(Nt({...e?.defaultState,values:e?.defaultValues??e?.defaultState?.values})),this.fieldMetaDerived=new Derived({deps:[this.baseStore],fn:({prevDepVals:e,currDepVals:t,prevVal:i})=>{const s=i,a=e?.[0],o=t[0];let r=0;const n={};for(const e of Object.keys(o.fieldMetaBase)){const t=o.fieldMetaBase[e],i=a?.fieldMetaBase[e],l=s?.[e],d=mt(o.values,e);let c=l?.errors;if(!i||t.errorMap!==i.errorMap){c=Object.values(t.errorMap??{}).filter(e=>void 0!==e);const i=this.getFieldInfo(e)?.instance;i&&!i.options.disableErrorFlat&&(c=c?.flat(1))}const p=!$t(c??[]),h=!t.isDirty,u=Et(d,mt(this.options.defaultValues,e))||Et(d,this.getFieldInfo(e)?.instance?.options.defaultValue);l&&l.isPristine===h&&l.isValid===p&&l.isDefaultValue===u&&l.errors===c&&t===i?(n[e]=l,r++):n[e]={...t,errors:c,isPristine:h,isValid:p,isDefaultValue:u}}return Object.keys(o.fieldMetaBase).length&&s&&r===Object.keys(o.fieldMetaBase).length?s:n}}),this.store=new Derived({deps:[this.baseStore,this.fieldMetaDerived],fn:({prevDepVals:e,currDepVals:t,prevVal:i})=>{const s=i,a=e?.[0],o=t[0],r=t[1],n=Object.values(r).filter(Boolean),l=n.some(e=>e.isValidating),d=n.every(e=>e.isValid),c=n.some(e=>e.isTouched),p=n.some(e=>e.isBlurred),h=n.every(e=>e.isDefaultValue),u=c&&o.errorMap?.onMount,m=n.some(e=>e.isDirty),v=!m,f=Boolean(o.errorMap?.onMount||n.some(e=>e?.errorMap?.onMount)),g=!!l;let y=s?.errors??[];a&&o.errorMap===a.errorMap||(y=Object.values(o.errorMap).reduce((e,t)=>void 0===t?e:t&&Pt(t)?(e.push(t.form),e):(e.push(t),e),[]));const b=0===y.length,w=d&&b,_=this.options.canSubmitWhenInvalid??!1,S=0===o.submissionAttempts&&!c&&!f||!g&&!o.isSubmitting&&w||_;let x=o.errorMap;if(u&&(y=y.filter(e=>e!==o.errorMap.onMount),x=Object.assign(x,{onMount:void 0})),s&&a&&s.errorMap===x&&s.fieldMeta===this.fieldMetaDerived.state&&s.errors===y&&s.isFieldsValidating===l&&s.isFieldsValid===d&&s.isFormValid===b&&s.isValid===w&&s.canSubmit===S&&s.isTouched===c&&s.isBlurred===p&&s.isPristine===v&&s.isDefaultValue===h&&s.isDirty===m&&Et(a,o))return s;let $={...o,errorMap:x,fieldMeta:this.fieldMetaDerived.state,errors:y,isFieldsValidating:l,isFieldsValid:d,isFormValid:b,isValid:w,canSubmit:S,isTouched:c,isBlurred:p,isPristine:v,isDefaultValue:h,isDirty:m};const k=this.options.transform?.deps??[],C=k.length!==this.prevTransformArray.length||k.some((e,t)=>e!==this.prevTransformArray[t]);if(C){const e=Object.assign({},this,{state:$});this.options.transform?.fn(e),$=e.state,this.prevTransformArray=k}return $}}),this.handleSubmit=this.handleSubmit.bind(this),this.update(e||{}),this.store.subscribe(()=>{Tt.emit("form-state-change",{id:this._formId,state:this.store.state,options:this.options})}),Tt.on("request-form-state",e=>{e.payload.id===this._formId&&Tt.emit("form-state-change",{id:this._formId,state:this.store.state,options:this.options})}),Tt.on("request-form-reset",e=>{e.payload.id===this._formId&&this.reset()}),Tt.on("request-form-force-submit",e=>{e.payload.id===this._formId&&(this._devtoolsSubmissionOverride=!0,this.handleSubmit(),this._devtoolsSubmissionOverride=!1)})}get state(){return this.store.state}get formId(){return this._formId}runValidator(e){return jt(e.validate)?Lt[e.type](e.value,e.validate):e.validate(e.value)}async handleSubmit(e){if(this.baseStore.setState(e=>({...e,isSubmitted:!1,submissionAttempts:e.submissionAttempts+1,isSubmitSuccessful:!1})),ht(()=>{Object.values(this.fieldInfo).forEach(e=>{e.instance&&(e.instance.state.meta.isTouched||e.instance.setMeta(e=>({...e,isTouched:!0})))})}),!this.state.canSubmit&&!this._devtoolsSubmissionOverride)return;const t=e??this.options.onSubmitMeta;this.baseStore.setState(e=>({...e,isSubmitting:!0}));const i=()=>{this.baseStore.setState(e=>({...e,isSubmitting:!1}))};if(await this.validateAllFields("submit"),!this.state.isFieldsValid)return i(),this.options.onSubmitInvalid?.({value:this.state.values,formApi:this,meta:t}),void Tt.emit("form-submission-state-change",{id:this._formId,submissionAttempt:this.state.submissionAttempts,successful:!1,stage:"validateAllFields",errors:Object.values(this.state.fieldMeta).map(e=>e.errors).flat()});if(await this.validate("submit"),!this.state.isValid)return i(),this.options.onSubmitInvalid?.({value:this.state.values,formApi:this,meta:t}),void Tt.emit("form-submission-state-change",{id:this._formId,submissionAttempt:this.state.submissionAttempts,successful:!1,stage:"validate",errors:this.state.errors});ht(()=>{Object.values(this.fieldInfo).forEach(e=>{e.instance?.options.listeners?.onSubmit?.({value:e.instance.state.value,fieldApi:e.instance})})}),this.options.listeners?.onSubmit?.({formApi:this,meta:t});try{await(this.options.onSubmit?.({value:this.state.values,formApi:this,meta:t})),ht(()=>{this.baseStore.setState(e=>({...e,isSubmitted:!0,isSubmitSuccessful:!0})),Tt.emit("form-submission-state-change",{id:this._formId,submissionAttempt:this.state.submissionAttempts,successful:!0}),i()})}catch(e){throw this.baseStore.setState(e=>({...e,isSubmitSuccessful:!1})),Tt.emit("form-submission-state-change",{id:this._formId,submissionAttempt:this.state.submissionAttempts,successful:!1,stage:"inflight",onError:e}),i(),e}}setErrorMap(e){ht(()=>{Object.entries(e).forEach(([e,t])=>{const i=e;if(Pt(t)){const{formError:e,fieldErrors:s}=Ut(t);for(const e of Object.keys(this.fieldInfo)){this.getFieldMeta(e)&&this.setFieldMeta(e,t=>({...t,errorMap:{...t.errorMap,[i]:s?.[e]},errorSourceMap:{...t.errorSourceMap,[i]:"form"}}))}this.baseStore.setState(t=>({...t,errorMap:{...t.errorMap,[i]:e}}))}else this.baseStore.setState(e=>({...e,errorMap:{...e.errorMap,[i]:t}}))})})}}function Ut(e){if(e){if(Pt(e)){return{formError:Ut(e.form).formError,fieldErrors:e.fields}}return{formError:e}}return{formError:void 0}}function Rt(e){switch(e){case"submit":return"onSubmit";case"blur":return"onBlur";case"mount":return"onMount";case"server":return"onServer";case"dynamic":return"onDynamic";default:return"onChange"}}class FieldApi{constructor(e){this.options={},this.mount=()=>{const e=this.store.mount();void 0!==this.options.defaultValue&&this.form.setFieldValue(this.name,this.options.defaultValue,{dontUpdateMeta:!0});this.getInfo().instance=this,this.update(this.options);const{onMount:t}=this.options.validators||{};if(t){const e=this.runValidator({validate:t,value:{value:this.state.value,fieldApi:this,validationSource:"field"},type:"validate"});e&&this.setMeta(t=>({...t,errorMap:{...t?.errorMap,onMount:e},errorSourceMap:{...t?.errorSourceMap,onMount:"field"}}))}return this.options.listeners?.onMount?.({value:this.state.value,fieldApi:this}),e},this.update=e=>{this.options=e;const t=this.name!==e.name;if(this.name=e.name,void 0===this.state.value){const i=mt(e.form.options.defaultValues,e.name),s=e.defaultValue??i;t?this.setValue(e=>e||s,{dontUpdateMeta:!0}):void 0!==s&&this.setValue(s,{dontUpdateMeta:!0})}void 0===this.form.getFieldMeta(this.name)&&this.setMeta(this.state.meta)},this.getValue=()=>this.form.getFieldValue(this.name),this.setValue=(e,t)=>{this.form.setFieldValue(this.name,e,At(t,{dontRunListeners:!0,dontValidate:!0})),t?.dontRunListeners||this.triggerOnChangeListener(),t?.dontValidate||this.validate("change")},this.getMeta=()=>this.store.state.meta,this.setMeta=e=>this.form.setFieldMeta(this.name,e),this.getInfo=()=>this.form.getFieldInfo(this.name),this.pushValue=(e,t)=>{this.form.pushFieldValue(this.name,e,At(t,{dontRunListeners:!0})),t?.dontRunListeners||this.triggerOnChangeListener()},this.insertValue=(e,t,i)=>{this.form.insertFieldValue(this.name,e,t,At(i,{dontRunListeners:!0})),i?.dontRunListeners||this.triggerOnChangeListener()},this.replaceValue=(e,t,i)=>{this.form.replaceFieldValue(this.name,e,t,At(i,{dontRunListeners:!0})),i?.dontRunListeners||this.triggerOnChangeListener()},this.removeValue=(e,t)=>{this.form.removeFieldValue(this.name,e,At(t,{dontRunListeners:!0})),t?.dontRunListeners||this.triggerOnChangeListener()},this.swapValues=(e,t,i)=>{this.form.swapFieldValues(this.name,e,t,At(i,{dontRunListeners:!0})),i?.dontRunListeners||this.triggerOnChangeListener()},this.moveValue=(e,t,i)=>{this.form.moveFieldValues(this.name,e,t,At(i,{dontRunListeners:!0})),i?.dontRunListeners||this.triggerOnChangeListener()},this.clearValues=e=>{this.form.clearFieldValues(this.name,At(e,{dontRunListeners:!0})),e?.dontRunListeners||this.triggerOnChangeListener()},this.getLinkedFields=e=>{const t=Object.values(this.form.fieldInfo),i=[];for(const s of t){if(!s.instance)continue;const{onChangeListenTo:t,onBlurListenTo:a}=s.instance.options.validators||{};"change"===e&&t?.includes(this.name)&&i.push(s.instance),"blur"===e&&a?.includes(this.name)&&i.push(s.instance)}return i},this.validateSync=(e,t)=>{const i=kt(e,{...this.options,form:this.form,validationLogic:this.form.options.validationLogic||Dt}),s=this.getLinkedFields(e).reduce((t,i)=>{const s=kt(e,{...i.options,form:i.form,validationLogic:i.form.options.validationLogic||Dt});return s.forEach(e=>{e.field=i}),t.concat(s)},[]);let a=!1;ht(()=>{const e=(e,i)=>{const s=Wt(i.cause),o=i.validate?Qt(e.runValidator({validate:i.validate,value:{value:e.store.state.value,validationSource:"field",fieldApi:e},type:"validate"})):void 0,r=t[s],{newErrorValue:n,newSource:l}=It({formLevelError:r,fieldLevelError:o});e.state.meta.errorMap?.[s]!==n&&e.setMeta(e=>({...e,errorMap:{...e.errorMap,[s]:n},errorSourceMap:{...e.errorSourceMap,[s]:l}})),n&&(a=!0)};for(const t of i)e(this,t);for(const t of s)t.validate&&e(t.field,t)});const o=Wt("submit");return this.state.meta.errorMap?.[o]&&"submit"!==e&&!a&&this.setMeta(e=>({...e,errorMap:{...e.errorMap,[o]:void 0},errorSourceMap:{...e.errorSourceMap,[o]:void 0}})),{hasErrored:a}},this.validateAsync=async(e,t)=>{const i=Ct(e,{...this.options,form:this.form,validationLogic:this.form.options.validationLogic||Dt}),s=await t,a=this.getLinkedFields(e),o=a.reduce((t,i)=>{const s=Ct(e,{...i.options,form:i.form,validationLogic:i.form.options.validationLogic||Dt});return s.forEach(e=>{e.field=i}),t.concat(s)},[]);this.state.meta.isValidating||this.setMeta(e=>({...e,isValidating:!0}));for(const e of a)e.setMeta(e=>({...e,isValidating:!0}));const r=[],n=[],l=(e,t,i)=>{const a=Wt(t.cause),o=e.getInfo().validationMetaMap[a];o?.lastAbortController.abort();const r=new AbortController;this.getInfo().validationMetaMap[a]={lastAbortController:r},i.push(new Promise(async i=>{let o;try{o=await new Promise((i,s)=>{this.timeoutIds.validations[t.cause]&&clearTimeout(this.timeoutIds.validations[t.cause]),this.timeoutIds.validations[t.cause]=setTimeout(async()=>{if(r.signal.aborted)return i(void 0);try{i(await this.runValidator({validate:t.validate,value:{value:e.store.state.value,fieldApi:e,signal:r.signal,validationSource:"field"},type:"validateAsync"}))}catch(e){s(e)}},t.debounceMs)})}catch(e){o=e}if(r.signal.aborted)return i(void 0);const n=Qt(o),l=s[this.name]?.[a],{newErrorValue:d,newSource:c}=It({formLevelError:l,fieldLevelError:n});e.setMeta(e=>({...e,errorMap:{...e?.errorMap,[a]:d},errorSourceMap:{...e.errorSourceMap,[a]:c}})),i(d)}))};for(const e of i)e.validate&&l(this,e,r);for(const e of o)e.validate&&l(e.field,e,n);let d=[];(r.length||n.length)&&(d=await Promise.all(r),await Promise.all(n)),this.setMeta(e=>({...e,isValidating:!1}));for(const e of a)e.setMeta(e=>({...e,isValidating:!1}));return d.filter(Boolean)},this.validate=(e,t)=>{if(!this.state.meta.isTouched)return[];const{fieldsErrorMap:i}=t?.skipFormValidation?{fieldsErrorMap:{}}:this.form.validateSync(e),{hasErrored:s}=this.validateSync(e,i[this.name]??{});if(s&&!this.options.asyncAlways)return this.getInfo().validationMetaMap[Wt(e)]?.lastAbortController.abort(),this.state.meta.errors;const a=t?.skipFormValidation?Promise.resolve({}):this.form.validateAsync(e);return this.validateAsync(e,a)},this.handleChange=e=>{this.setValue(e)},this.handleBlur=()=>{this.state.meta.isTouched||this.setMeta(e=>({...e,isTouched:!0})),this.state.meta.isBlurred||this.setMeta(e=>({...e,isBlurred:!0})),this.validate("blur"),this.triggerOnBlurListener()},this.parseValueWithSchema=e=>Lt.validate({value:this.state.value,validationSource:"field"},e),this.parseValueWithSchemaAsync=e=>Lt.validateAsync({value:this.state.value,validationSource:"field"},e),this.form=e.form,this.name=e.name,this.timeoutIds={validations:{},listeners:{},formListeners:{}},this.store=new Derived({deps:[this.form.store],fn:()=>({value:this.form.getFieldValue(this.name),meta:this.form.getFieldMeta(this.name)??{...Bt,...e.defaultMeta}})}),this.options=e}get state(){return this.store.state}runValidator(e){return jt(e.validate)?Lt[e.type](e.value,e.validate):e.validate(e.value)}setErrorMap(e){this.setMeta(t=>({...t,errorMap:{...t.errorMap,...e}}))}triggerOnBlurListener(){const e=this.form.options.listeners?.onBlurDebounceMs;e&&e>0?(this.timeoutIds.formListeners.blur&&clearTimeout(this.timeoutIds.formListeners.blur),this.timeoutIds.formListeners.blur=setTimeout(()=>{this.form.options.listeners?.onBlur?.({formApi:this.form,fieldApi:this})},e)):this.form.options.listeners?.onBlur?.({formApi:this.form,fieldApi:this});const t=this.options.listeners?.onBlurDebounceMs;t&&t>0?(this.timeoutIds.listeners.blur&&clearTimeout(this.timeoutIds.listeners.blur),this.timeoutIds.listeners.blur=setTimeout(()=>{this.options.listeners?.onBlur?.({value:this.state.value,fieldApi:this})},t)):this.options.listeners?.onBlur?.({value:this.state.value,fieldApi:this})}triggerOnChangeListener(){const e=this.form.options.listeners?.onChangeDebounceMs;e&&e>0?(this.timeoutIds.formListeners.change&&clearTimeout(this.timeoutIds.formListeners.change),this.timeoutIds.formListeners.change=setTimeout(()=>{this.form.options.listeners?.onChange?.({formApi:this.form,fieldApi:this})},e)):this.form.options.listeners?.onChange?.({formApi:this.form,fieldApi:this});const t=this.options.listeners?.onChangeDebounceMs;t&&t>0?(this.timeoutIds.listeners.change&&clearTimeout(this.timeoutIds.listeners.change),this.timeoutIds.listeners.change=setTimeout(()=>{this.options.listeners?.onChange?.({value:this.state.value,fieldApi:this})},t)):this.options.listeners?.onChange?.({value:this.state.value,fieldApi:this})}}function Qt(e){if(e)return e}function Wt(e){switch(e){case"submit":return"onSubmit";case"blur":return"onBlur";case"mount":return"onMount";case"server":return"onServer";case"dynamic":return"onDynamic";default:return"onChange"}}var Ht,Kt,Gt,Zt,Jt,Xt=function(e,t,i,s,a){if("m"===s)throw new TypeError("Private method is not writable");if("a"===s&&!a)throw new TypeError("Private accessor was defined without a setter");if("function"==typeof t?e!==t||!a:!t.has(e))throw new TypeError("Cannot write private member to an object whose class did not declare it");return"a"===s?a.call(e,i):a?a.value=i:t.set(e,i),i},Yt=function(e,t,i,s){if("a"===i&&!s)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof t?e!==t||!s:!t.has(e))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===i?s:"a"===i?s.call(e):s?s.value:t.get(e)};class TanStackFormController{constructor(e,t){Ht.set(this,void 0),Kt.set(this,void 0),this.api=new FormApi(t),Xt(this,Ht,e,"f").addController(this)}hostConnected(){Xt(this,Kt,this.api.store.subscribe(()=>{Yt(this,Ht,"f").requestUpdate()}),"f")}hostDisconnected(){Yt(this,Kt,"f")?.call(this)}field(e,t){return ei(this.api,e,t)}}Ht=new WeakMap,Kt=new WeakMap;Gt=new WeakMap,Zt=new WeakMap,Jt=new WeakMap;const ei=ie(class FieldDirective extends re{constructor(e){if(super(e),Gt.set(this,!1),Zt.set(this,void 0),Jt.set(this,void 0),e.type!==ae.CHILD)throw new Error("The `field` directive must be used in the `child` attribute")}update(e,[t,i,s]){if(!Yt(this,Gt,"f")){if(!Yt(this,Zt,"f")){const e={...i,form:t};Xt(this,Zt,new FieldApi(e),"f"),Xt(this,Jt,Yt(this,Zt,"f").mount(),"f")}Xt(this,Gt,!0,"f")}return this.render(t,i,s)}disconnected(){super.disconnected(),Yt(this,Jt,"f")?.call(this)}reconnected(){super.reconnected(),Yt(this,Zt,"f")&&Xt(this,Jt,Yt(this,Zt,"f").mount(),"f")}render(e,t,i){return Yt(this,Zt,"f")?i(Yt(this,Zt,"f")):Z}}),ti=J`.form-container{display:flex;flex-direction:column;gap:var(--size-4)}.form-content{display:flex;flex-direction:column;gap:var(--size-4);width:100%}.field{display:flex;flex-direction:column;gap:var(--size-2);width:100%}.field-title{font-family:var(--font-body);font-size:var(--text-base);font-weight:var(--font-weight-bold);line-height:22px;color:var(--color-neutrals-text-default);margin:0}.field-error{font-style:normal;color:var(--color-error-text-default);font-size:var(--text-base);line-height:var(--text-base--line-height);font-weight:var(--font-weight-normal)}.field.hidden{display:none}`,ii=fe.object({first_name:fe.string({required_error:"required"}).min(1,"required"),last_name:fe.string({required_error:"required"}).min(1,"required"),email:fe.string({required_error:"required"}).email("email_invalid").min(1,"required"),phone:fe.string({required_error:"required"}).min(9,"phone_invalid"),birth_date:fe.string({required_error:"required"}).min(1,"required"),tax_id:fe.string({required_error:"required"}).min(1,"required")});class CompleteProfileFormSuccessEvent extends CustomEvent{static{this.eventName="success"}constructor(e){super(CompleteProfileFormSuccessEvent.eventName,{bubbles:!0,composed:!0,detail:e})}}let si=class CompleteProfileForm extends X{constructor(){super(...arguments),this.isPending=!1,this.errorMap={required:H("Este campo es obligatorio"),email_invalid:H("El email no es válido"),phone_invalid:H("El teléfono no es válido")},this.form=new TanStackFormController(this,{defaultValues:this.defaultValues,onSubmit:e=>{this.dispatchEvent(new CompleteProfileFormSuccessEvent(e.value))},validators:{onSubmit:ii}}),this.getScheduleServicesQuery=new i(this,()=>x(this.apiClient))}static{this.styles=ti}translateError(e){return this.errorMap[e]||e}willUpdate(e){e.has("defaultValues")&&(this.form.api.setFieldValue("first_name",this.defaultValues.first_name),this.form.api.setFieldValue("last_name",this.defaultValues.last_name),this.form.api.setFieldValue("email",this.defaultValues.email),this.form.api.setFieldValue("phone",this.defaultValues.phone),this.form.api.setFieldValue("birth_date",this.defaultValues.birth_date),this.form.api.setFieldValue("tax_id",this.defaultValues.tax_id))}render(){const e=this.getScheduleServicesQuery.result?.data?.find(e=>e.id===this.serviceId),t=e?.channel===z.phonecall;return Y`<div class="form-container"><form class="form-content" @submit="${e=>{e.preventDefault(),e.stopPropagation(),this.form.api.handleSubmit()}}"><div class="${me({field:!0,hidden:!!this.defaultValues.first_name})}">${this.form.field({name:"first_name"},e=>Y`<mq-input label="${H("Nombre")}" id="${ve(e.name)}" value="${ve(e.state.value)}" name="${ve(e.name)}" required ?error="${!e.state.meta.isValid}" @onvaluechange="${t=>{e.handleChange(t.value)}}"></mq-input>${!e.state.meta.isValid&&e.state.meta.errors.length>0?Y`<em class="field-error">${this.translateError(e.state.meta.errors[0]?.message||"")}</em>`:Z}`)}</div><div class="${me({field:!0,hidden:!!this.defaultValues.last_name})}">${this.form.field({name:"last_name"},e=>Y`<mq-input label="${H("Apellidos")}" id="${ve(e.name)}" value="${ve(e.state.value)}" name="${ve(e.name)}" required ?error="${!e.state.meta.isValid}" @onvaluechange="${t=>{e.handleChange(t.value)}}"></mq-input>${!e.state.meta.isValid&&e.state.meta.errors.length>0?Y`<em class="field-error">${this.translateError(e.state.meta.errors[0]?.message||"")}</em>`:Z}`)}</div><div class="${me({field:!0,hidden:!!this.defaultValues.email})}">${this.form.field({name:"email"},e=>Y`<mq-input type="email" label="${H("Email")}" id="${ve(e.name)}" value="${ve(e.state.value)}" name="${ve(e.name)}" required ?error="${!e.state.meta.isValid}" @onvaluechange="${t=>{e.handleChange(t.value)}}"></mq-input>${!e.state.meta.isValid&&e.state.meta.errors.length>0?Y`<em class="field-error">${this.translateError(e.state.meta.errors[0]?.message||"")}</em>`:Z}`)}</div><div class="${me({field:!0,hidden:!!this.defaultValues.phone})}">${this.form.field({name:"phone"},e=>Y`<mq-input type="tel" label="${H("Teléfono")}" id="${ve(e.name)}" value="${ve(e.state.value)}" name="${ve(e.name)}" required ?error="${!e.state.meta.isValid}" @onvaluechange="${t=>{e.handleChange(t.value)}}"></mq-input>${!e.state.meta.isValid&&e.state.meta.errors.length>0?Y`<em class="field-error">${this.translateError(e.state.meta.errors[0]?.message||"")}</em>`:Z}`)}</div><div class="${me({field:!0,hidden:!!this.defaultValues.birth_date})}">${this.form.field({name:"birth_date"},e=>Y`<mq-input type="date" label="${H("Fecha de nacimiento")}" id="${ve(e.name)}" value="${ve(e.state.value)}" name="${ve(e.name)}" required ?error="${!e.state.meta.isValid}" @onvaluechange="${t=>{e.handleChange(t.value)}}"></mq-input>${!e.state.meta.isValid&&e.state.meta.errors.length>0?Y`<em class="field-error">${this.translateError(e.state.meta.errors[0]?.message||"")}</em>`:Z}`)}</div><div class="${me({field:!0,hidden:!!this.defaultValues.tax_id})}">${this.form.field({name:"tax_id"},e=>Y`<mq-input label="${H("DNI/NIE")}" id="${ve(e.name)}" value="${ve(e.state.value)}" name="${ve(e.name)}" required ?error="${!e.state.meta.isValid}" @onvaluechange="${t=>{e.handleChange(t.value)}}"></mq-input>${!e.state.meta.isValid&&e.state.meta.errors.length>0?Y`<em class="field-error">${this.translateError(e.state.meta.errors[0]?.message||"")}</em>`:Z}`)}</div>${t?Y`<mq-callout background="default" variant="info" noPadding>${H("El profesional te llamará al número que indiques en este campo.")}</mq-callout>`:Z}<mq-button type="submit" fullwidth size="xl" ?disabled="${this.isPending}">${H("Continuar")}</mq-button></form></div>`}};e([W({context:s,subscribe:!0})],si.prototype,"apiClient",void 0),e([ee({type:Boolean})],si.prototype,"isPending",void 0),e([ee({type:String})],si.prototype,"serviceId",void 0),e([ee({type:Object})],si.prototype,"defaultValues",void 0),si=e([G(),t("complete-profile-form")],si);const ai=J`:host{display:block}.trigger{width:100%;display:flex;align-items:center;gap:var(--sp-1);padding:0;border:none;background:0 0;cursor:pointer;font-family:var(--font-titles);font-size:var(--text-sm);line-height:var(--text-sm--line-height);font-weight:var(--font-weight-normal);color:var(--color-primary)}.trigger:focus-visible{outline:2px solid var(--color-primary);outline-offset:2px;border-radius:var(--border-radius-sm)}.trigger__label{flex:1;text-align:left}.chevron{transition:transform .2s ease}.chevron--open{transform:rotate(180deg)}.reveal{display:grid;grid-template-rows:0fr;overflow:hidden;transition:grid-template-rows .2s ease-out}.reveal[data-expanded=true]{grid-template-rows:1fr}.reveal__content{min-height:0;overflow:hidden}.field{display:flex;flex-direction:column;gap:var(--sp-2);margin-top:var(--sp-3)}.row{display:flex;gap:var(--sp-2)}.input{box-sizing:border-box;flex:1;min-width:0;height:var(--size-9);padding:var(--sp-1) var(--sp-3);border:1px solid var(--color-neutrals-border-disabled);border-radius:var(--border-radius-md);background:var(--color-neutrals-background-extraWeak,var(--color-white));font-family:var(--font-body);font-size:var(--text-sm);line-height:var(--text-sm--line-height);color:var(--color-neutrals-text-default);outline:0;transition:border-color .2s ease}.input::placeholder{color:var(--color-text-icons--secondary)}.input:focus{border-color:var(--color-primary)}.input--error{border-color:var(--color-error-text-default)}.error{margin:0;font-family:var(--font-body);font-size:var(--text-sm);line-height:var(--text-sm--line-height);color:var(--color-error-text-default)}.btn{box-sizing:border-box;flex:0 0 auto;height:var(--size-9);display:flex;align-items:center;justify-content:center;gap:var(--sp-2);padding:var(--sp-2) var(--sp-6);border:1px solid var(--color-primary);border-radius:var(--border-radius-md);background:var(--color-primary);color:var(--color-white);font-family:var(--font-titles);font-size:var(--text-xs);line-height:var(--text-sm--line-height);font-weight:var(--font-weight-medium);cursor:pointer;transition:background-color .2s ease,opacity .2s ease}.btn:hover:not(:disabled){background:var(--color-primary-dark);border-color:var(--color-primary-dark)}.btn:focus-visible{outline:2px solid var(--color-primary);outline-offset:2px}.btn:disabled{opacity:.5;cursor:default}.applied{display:flex;flex-direction:column;gap:var(--sp-3)}.applied__status{display:flex;align-items:center;gap:var(--sp-1);font-family:var(--font-titles);font-size:var(--text-sm);line-height:var(--text-sm--line-height);font-weight:var(--font-weight-normal);color:var(--color-text-icons--success-dark,#105b5b)}.applied__change{display:inline-flex;align-items:center;gap:var(--sp-1);align-self:flex-start;padding:0;border:none;background:0 0;cursor:pointer;font-family:var(--font-titles);font-size:var(--text-sm);line-height:var(--text-sm--line-height);font-weight:var(--font-weight-normal);text-decoration:underline;color:var(--color-text-icons--secondary)}.applied__change:focus-visible{outline:2px solid var(--color-primary);outline-offset:2px;border-radius:var(--border-radius-sm)}`;let oi=class DiscountCodeField extends X{constructor(){super(...arguments),this.basePrice=null,this.appliedDiscount=null,this.expanded=!1,this.form=new TanStackFormController(this,{defaultValues:{code:""}})}static{this.styles=ai}async validateCode(e){const t=e.trim();if(this.basePrice&&""!==t)try{const e=await async function(e,t){const{basePrice:i}=t,s=t.code.trim();try{const t=await e.payments.getConsultationCoupon(s,i.amount),a=t.percent_off,o=t.after_discount_amount??i.amount-Math.round(i.amount*a/100);return{code:s,percentage:a,discountAmount:i.amount-o,totalAmount:o,currency:i.currency}}catch(e){if(D(e)&&404===e.response?.status)throw new InvalidDiscountCodeError;throw e}}(this.apiClient,{code:t,basePrice:this.basePrice});return this.dispatchEvent(new DiscountAppliedEvent(e)),this.expanded=!1,void this.form.api.reset()}catch(e){return H(e instanceof InvalidDiscountCodeError?"Este código no es válido.":"No hemos podido validar el código. Inténtalo de nuevo.")}}toggle(){this.expanded=!this.expanded}onChangeCode(){this.form.api.reset(),this.expanded=!0}renderInputForm(){const{isSubmitting:e,values:t}=this.form.api.state;return Y`<form class="field" @submit="${e=>{e.preventDefault(),e.stopPropagation(),this.form.api.handleSubmit()}}">${this.form.field({name:"code",validators:{onSubmitAsync:({value:e})=>this.validateCode(e)}},i=>{const s=i.state.meta.errors[0];return Y`<div class="row"><input class="input ${s?"input--error":""}" type="text" .value="${i.state.value}" ?disabled="${e}" placeholder="${H("Ingresa el código")}" @input="${e=>i.handleChange(e.target.value)}"> <button type="submit" class="btn" ?disabled="${!t.code.trim()||e}">${e?Y`${ge({color:"currentColor",size:16})}`:H("Aplicar")}</button></div>${s?Y`<p class="error">${s}</p>`:Z}`})}</form>`}render(){return this.appliedDiscount&&!this.expanded?Y`<div class="applied"><span class="applied__status" role="status">${Y`<svg width="20" height="20" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M20 6L9 17L4 12" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/></svg>`} ${H("Código de promoción aplicado")} </span><button type="button" class="applied__change" @click="${this.onChangeCode}">${Y`<svg width="20" height="20" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M4 8H20M20 8L16 4M20 8L16 12" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/><path d="M20 16H4M4 16L8 12M4 16L8 20" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/></svg>`} ${H("Cambiar código")}</button></div>`:Y`<button type="button" class="trigger" aria-expanded="${this.expanded}" @click="${this.toggle}">${ye({size:20})} <span class="trigger__label">${H("Añadir código de promoción")}</span> ${e=this.expanded,Y`<svg class="chevron ${e?"chevron--open":""}" width="20" height="20" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M6 9L12 15L18 9" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/></svg>`}</button><div class="reveal" data-expanded="${this.expanded}" .inert="${!this.expanded}"><div class="reveal__content">${this.renderInputForm()}</div></div>`;var e}};e([W({context:s,subscribe:!0})],oi.prototype,"apiClient",void 0),e([ee({type:Object})],oi.prototype,"basePrice",void 0),e([ee({type:Object})],oi.prototype,"appliedDiscount",void 0),e([te()],oi.prototype,"expanded",void 0),oi=e([G(),t("discount-code-field")],oi);const ri=J`.summary{box-sizing:border-box;max-width:var(--content-max-width);margin:0 auto;padding:var(--sp-4);display:flex;flex-direction:column;gap:var(--sp-4)}hr{width:100%;border:none;border-top:1px solid var(--color-neutrals-border-disabled);margin:0}.payment-info{display:flex;justify-content:space-between;color:var(--color-neutrals-text-default);font-size:16px}.payment-info__name{font-weight:600}.payment-info__price{font-weight:500}.discount-info{display:flex;justify-content:space-between;gap:var(--sp-4);color:var(--color-neutrals-text-default);font-size:var(--text-base)}.total-info{display:flex;justify-content:space-between;gap:var(--sp-4);color:var(--color-neutrals-text-default);font-size:var(--text-base);font-weight:600}.previous-starts-at{font-family:var(--font-body);font-size:var(--text-base);line-height:var(--text-base--line-height);color:var(--color-neutrals-text-default)}.reservation-conditions{font-family:var(--font-body);font-size:var(--text-sm);line-height:var(--text-sm--line-height);color:var(--color-text-icons--secondary)}.reservation-conditions__prefix{font-weight:var(--font-weight-semibold)}.reservation-conditions__body{font-weight:var(--font-weight-normal)}:host([fill-column]){width:100%;min-width:0;align-self:flex-start}:host([fill-column]) .summary{max-width:none;margin:0}@media (min-width:768px){.summary{padding:var(--sp-6)}}`;let ni=class NewAppointmentSummary extends X{constructor(){super(...arguments),this.startsAt=void 0,this.duration=void 0,this.channel=void 0,this.previousStartsAt=void 0,this.previousDuration=void 0,this.serviceCode=void 0,this.serviceName=void 0,this.servicePrice=null,this.fillColumn=!1,this.appliedDiscount=null,this.showPrice=!0,this.onDiscountApplied=e=>{this.appliedDiscount=e.detail,Se.success(H("Código de promoción validado correctamente"))},this.getOrganizationSpecialtiesQuery=new i(this,()=>d(this.apiClient,{enabled:!!this.professional?.speciality.id})),this.getOrganizationSetupQuery=new i(this,()=>r(this.apiClient))}static{this.styles=ri}renderAppointmentDetails(){return Y`${this.startsAt&&this.channel&&this.duration?Y`<appointment-details .startsAt="${$(this.startsAt).toISOString()}" .duration="${this.duration}" .channel="${this.channel}" .timezone="${this.patient.timezone}" variant="wide"></appointment-details>`:Z} ${this.previousStartsAt&&this.previousDuration?Y`<hr><span class="previous-starts-at">${H("Cita previa:")}</span><appointment-details .startsAt="${$(this.previousStartsAt).toISOString()}" .duration="${this.previousDuration}" .timezone="${this.patient.timezone}" strike-through variant="wide"></appointment-details>`:Z}`}render(){const e=le(),t=this.getOrganizationSpecialtiesQuery.result?.data?.find(e=>e.id===this.professional?.speciality.id),i=c(t?.code??"",e,t?.name),s=this.serviceCode?p(this.serviceCode,e,this.serviceName):this.serviceName??"",a=this.getOrganizationSetupQuery.result?.data?.appointments,o=a?.reserve_conditions?.trim()??"",r=!0===a?.has_discount_coupons_show&&a?.payment_provider!==L.Stripe,n=this.servicePrice;return Y`<mq-card class="summary" roundness="md"><professional-overview .name="${this.professional.name??""}" .specialtyName="${i??""}" .collegiateNumber="${this.professional.collegiate_number??void 0}" .description="${this.professional.description??""}" .languages="${this.professional.languages}" .avatar="${this.professional.avatar??""}" always-expanded-on-desktop></professional-overview>${this.renderAppointmentDetails()} ${be(n)?Y`${this.showPrice?Y`${r?Y`<discount-code-field .basePrice="${{amount:n.amount,currency:n.currency}}" .appliedDiscount="${this.appliedDiscount}" @discount-applied="${this.onDiscountApplied}"></discount-code-field>`:Z}<div class="payment-info">${s?Y`<span class="payment-info__name">${s}</span>`:Z} <span class="payment-info__price">${we({amount:n.amount,currency:n.currency},e)}</span></div>${r&&this.appliedDiscount?Y`<div class="discount-info"><span>${H("Promoción")} ${this.appliedDiscount.code} (-${this.appliedDiscount.percentage}%)</span> <span>${we({amount:-this.appliedDiscount.discountAmount,currency:this.appliedDiscount.currency},e)}</span></div><hr><div class="total-info"><span>${H("Total")}</span> <span>${we({amount:this.appliedDiscount.totalAmount,currency:this.appliedDiscount.currency},e)}</span></div>`:Z}`:Z} ${o.length>0?Y`<hr><mq-clamped-text class="reservation-conditions" .lines="${2}" expand-label="${H("Ver más")}" collapse-label="${H("Ver menos")}"><span class="reservation-conditions__prefix">${H("Condiciones de reserva:")}</span> ${" "} <span class="reservation-conditions__body">${o}</span></mq-clamped-text>`:Z}`:Z}</mq-card>`}};e([W({context:s,subscribe:!0})],ni.prototype,"apiClient",void 0),e([ee({type:Object})],ni.prototype,"professional",void 0),e([ee({type:String})],ni.prototype,"startsAt",void 0),e([ee({type:Number})],ni.prototype,"duration",void 0),e([ee({type:String})],ni.prototype,"channel",void 0),e([ee({type:String})],ni.prototype,"previousStartsAt",void 0),e([ee({type:Number})],ni.prototype,"previousDuration",void 0),e([ee({type:String})],ni.prototype,"serviceCode",void 0),e([ee({type:String})],ni.prototype,"serviceName",void 0),e([ee({type:Object})],ni.prototype,"servicePrice",void 0),e([ee({type:Boolean,attribute:"fill-column",reflect:!0})],ni.prototype,"fillColumn",void 0),e([ee({type:Object})],ni.prototype,"appliedDiscount",void 0),e([ee({type:Boolean})],ni.prototype,"showPrice",void 0),e([W({context:Re,subscribe:!0})],ni.prototype,"patient",void 0),ni=e([G(),t("new-appointment-summary")],ni);let li=class CompleteProfileStep extends X{constructor(){super(...arguments),this.showBack=!0,this.channel=void 0,this.getPatientProfileQuery=new i(this,()=>w(this.apiClient)),this.updatePatientProfileMutation=new ue(this,{mutationFn:async e=>this.apiClient.flash.updatePatientProfile(e)})}static{this.styles=J`.content{box-sizing:border-box;display:flex;flex-direction:column;gap:var(--sp-6)}.right-side{padding:var(--sp-4);background-color:var(--color-neutrals-background-weak)}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-4)}@media (min-width:768px){.content{flex-direction:row;align-items:start;gap:var(--sp-6)}.right-side{width:50%;padding:var(--sp-6)}new-appointment-summary{width:50%}}`}handleSubmit(e){const t=e.detail;this.updatePatientProfileMutation.run({first_name:t.first_name,last_name:t.last_name,email:t.email,phone:t.phone,birth_date:t.birth_date,phone_prefix:"+34",tax_id:t.tax_id,privacy_accepted:!0,terms_accepted:!0}),this.dispatchEvent(new CustomEvent("success"))}render(){return this.getPatientProfileQuery.render({complete:e=>Y`<mq-page-title .title="${H("Petición de cita")}" .showBack="${this.showBack}" @mq-back="${e=>et(this,e)}"></mq-page-title><div class="content"><new-appointment-summary .professional="${this.professional}" .startsAt="${this.scheduleSlot.starts_at}" .duration="${this.scheduleSlot.duration}" .channel="${this.channel??this.scheduleSlot.channel}"></new-appointment-summary><div class="right-side"><h2>${H("Completa tu perfil")}</h2><complete-profile-form .serviceId="${this.serviceId}" @success="${this.handleSubmit}" .defaultValues="${{first_name:e?.profile.first_name,last_name:e?.profile.last_name,email:e?.profile.email,phone_prefix:e?.profile.phone_prefix,phone:e?.profile.phone,birth_date:e?.profile.birth_date,gender:e?.profile.gender,tax_id:e?.profile.billing.tax_id}}" .isPending="${this.updatePatientProfileMutation.isPending}"></complete-profile-form></div></div>`})}};e([W({context:s,subscribe:!0})],li.prototype,"apiClient",void 0),e([ee({type:String})],li.prototype,"serviceId",void 0),e([ee({type:Boolean})],li.prototype,"showBack",void 0),e([ee({type:Object})],li.prototype,"scheduleSlot",void 0),e([ee({type:Object})],li.prototype,"professional",void 0),e([ee({type:String})],li.prototype,"channel",void 0),li=e([G(),t("complete-profile-step")],li);const di=J`:host{display:block}.field{display:flex;flex-direction:column;gap:var(--sp-4)}.label{font-family:var(--font-body);font-size:var(--text-base);line-height:var(--text-base--line-height);font-weight:var(--font-weight-bold);color:var(--color-neutrals-text-default);margin:0}.hint{font-family:var(--font-body);font-size:var(--text-sm);line-height:var(--text-sm--line-height);font-weight:var(--font-weight-normal);color:var(--color-neutrals-text-default);margin:0}.files{display:flex;flex-direction:column;gap:var(--sp-2)}.file{font-family:var(--font-body);border-radius:var(--border-radius-md);padding:var(--sp-2);display:flex;align-items:center;justify-content:space-between;gap:var(--sp-1);background-color:var(--color-white)}.file.uploading{opacity:.5;pointer-events:none}.file-info{flex:1;display:flex;align-items:center;gap:var(--sp-2);font-size:var(--text-xs);line-height:var(--text-xs--line-height);font-weight:var(--font-weight-bold);color:var(--color-neutrals-text-default);margin:0;min-width:0}.file-info svg{flex-shrink:0}.file-name{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;min-width:0}.file-close{line-height:0;flex-shrink:0}@keyframes animate-spin{from{transform:rotate(0)}to{transform:rotate(360deg)}}.animate-spin{animation:animate-spin 750ms linear infinite}@media (min-width:768px){mq-button{max-width:323px;margin:0 auto}}`;class FileAttachmentsChangeEvent extends CustomEvent{static{this.eventName="onfileschange"}constructor(e){super(FileAttachmentsChangeEvent.eventName,{bubbles:!0,composed:!0,detail:{files:e}})}}let ci=class FileAttachments extends X{constructor(){super(...arguments),this.uploadedFiles=[],this.uploadingFile=null,this.uploadFileMutation=new ue(this,{mutationFn:e=>this.apiClient.documents.uploadFile({file:e}),throwOnError:!0})}static{this.styles=di}handleClickUploadFile(){const e=this.shadowRoot?.querySelector("input[type='file']");e&&e.click()}getErrorMessageFromCode(e){switch(e){case 422:default:return H("Ha ocurrido un error en el envío del archivo");case 413:return H("El archivo supera el tamaño máximo permitido");case 415:return H("Formato de archivo no soportado")}}async handleUploadFile(e){const t=e.target.files?.[0];if(t){if(t.size>314572800)return Se.error(H("El archivo supera el tamaño máximo permitido"),{duration:3e3}),void(this.fileInput.value="");this.uploadingFile=t;try{const e=await this.uploadFileMutation.run(t),i={id:crypto.randomUUID(),file_path:e.url,file_name:t.name},s=[...this.uploadedFiles,i];this.dispatchEvent(new CustomEvent("onfileschange",{bubbles:!0,composed:!0,detail:{files:s,newFile:i}})),this.uploadingFile=null}catch(e){if(!D(e))return;const t=this.getErrorMessageFromCode(e.response?.status??500);Se.error(t,{duration:3e3}),this.uploadingFile=null}finally{this.fileInput.value=""}}}handleRemoveFile(e){const t=this.uploadedFiles.filter((t,i)=>i!==e);this.dispatchEvent(new CustomEvent("onfileschange",{bubbles:!0,composed:!0,detail:{files:t}}))}render(){return Y`<div class="field"><input type="file" hidden @change="${this.handleUploadFile}"><p class="label">${H("Adjuntar archivos")}</p><p class="hint">${H("Puedes adjuntar imágenes o documentación adicional (analíticas, resultados de pruebas, etc.) para que los evalúe el médico")}</p><mq-button size="md" variant="outline" fullwidth @click="${this.handleClickUploadFile}">${ke()} ${H("Subir archivo")}</mq-button><div class="files">${this.uploadedFiles.map((e,t)=>Y`<div class="file"><div class="file-info">${$e()} <span class="file-name">${e.file_name}</span></div><div class="file-close"><mq-button size="icon-xs" variant="ghost" @click="${()=>this.handleRemoveFile(t)}">${Ce({color:"var(--color-neutrals-text-default)",size:24})}</mq-button></div></div>`)} ${this.uploadingFile?Y`<div class="file uploading"><div class="file-info">${Y`<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg" class="animate-spin"><path opacity="0.12" fill-rule="evenodd" clip-rule="evenodd" d="M12 4C9.87827 4 7.84344 4.84285 6.34315 6.34315C4.84285 7.84344 4 9.87827 4 12C4 14.1217 4.84285 16.1566 6.34315 17.6569C7.84344 19.1571 9.87827 20 12 20C14.1217 20 16.1566 19.1571 17.6569 17.6569C19.1571 16.1566 20 14.1217 20 12C20 9.87827 19.1571 7.84344 17.6569 6.34315C16.1566 4.84285 14.1217 4 12 4ZM2 12C2 6.477 6.477 2 12 2C17.523 2 22 6.477 22 12C22 17.523 17.523 22 12 22C6.477 22 2 17.523 2 12Z" fill="#333333"/><path fill-rule="evenodd" clip-rule="evenodd" d="M11.9985 4.00001C9.93591 3.99566 7.9522 4.7923 6.46551 6.22201C6.3707 6.31289 6.25891 6.3842 6.13654 6.43187C6.01417 6.47955 5.8836 6.50265 5.7523 6.49986C5.621 6.49708 5.49153 6.46846 5.37129 6.41564C5.25105 6.36282 5.14239 6.28683 5.05151 6.19201C4.96064 6.0972 4.88933 5.98541 4.84165 5.86304C4.79398 5.74067 4.77088 5.6101 4.77366 5.4788C4.77645 5.3475 4.80507 5.21803 4.85789 5.09779C4.91071 4.97755 4.9867 4.86889 5.08151 4.77801C6.94058 2.99145 9.42015 1.9956 11.9985 2.00001C12.2637 2.00001 12.5181 2.10537 12.7056 2.29291C12.8932 2.48044 12.9985 2.7348 12.9985 3.00001C12.9985 3.26523 12.8932 3.51959 12.7056 3.70712C12.5181 3.89466 12.2637 4.00001 11.9985 4.00001Z" fill="#333333"/></svg>`} <span class="file-name">${this.uploadingFile.name}</span></div></div>`:""}</div></div>`}};async function pi(e){const t=e.getApiClient();t&&await(e.getQueryClient()?.invalidateQueries({queryKey:_(t)}))}e([W({context:s,subscribe:!0})],ci.prototype,"apiClient",void 0),e([ee({type:Array})],ci.prototype,"uploadedFiles",void 0),e([te()],ci.prototype,"uploadingFile",void 0),e([xe("input[type='file']")],ci.prototype,"fileInput",void 0),ci=e([G(),t("file-attachments")],ci);class ScheduleAppointmentMutationController{constructor(e,t){this.mutation=new ue(e,{mutationFn:e=>{const i=t.getApiClient();return i?function(e,t){return e.appointments.createAppointment(t)}(i,e):Promise.reject(new Error("No api client available"))},onSuccess:async e=>{await pi(t),await t.onSuccess(e.appointment.id)},onError:async()=>{await pi(t),await t.onError()}})}run(e){return this.mutation.run(function(e){return{slot_id:e.slotId,service_id:e.serviceId,consultation_reason:e.consultationReason,preconsultation_documents:e.preconsultationDocuments,discount_code:e.discountCode}}(e))}get isPending(){return this.mutation.isPending}get isError(){return this.mutation.isError}get isSuccess(){return this.mutation.isSuccess}get isIdle(){return this.mutation.isIdle}get data(){return this.mutation.data}get error(){return this.mutation.error}reset(){this.mutation.reset()}}const hi=J`:host{height:100%;display:flex;flex-direction:column;gap:var(--sp-4)}.content{display:flex;flex-direction:column;gap:var(--sp-4)}.questionnaire{width:100%;padding:var(--sp-4)}.questionnaire>:not(:last-child){margin-bottom:var(--sp-4)}.questionnaire-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;margin-bottom:var(--sp-4)}.field{display:flex;flex-direction:column;gap:var(--sp-4)}.label{font-family:var(--font-body);font-size:var(--text-base);line-height:var(--text-base--line-height);font-weight:var(--font-weight-bold);color:var(--color-neutrals-text-default);margin:0}@media (min-width:768px){.content{flex-direction:row;gap:var(--sp-6)}new-appointment-summary{width:50%}.questionnaire{width:50%;padding:var(--sp-6)}}`;let ui=class SuccessEvent extends Event{static{this.eventName="success"}constructor(e){super(SuccessEvent.eventName,{bubbles:!0,composed:!0}),this.detail=e}};class PaymentStartedEvent extends Event{static{this.eventName="payment-started"}constructor(e){super(PaymentStartedEvent.eventName,{bubbles:!0,composed:!0}),this.detail=e}}let mi=class ConfirmStep extends X{constructor(){super(...arguments),this.kind="schedule",this.showBack=!0,this.requiresPayment=!0,this.channel=void 0,this.appointment=void 0,this.specialityId="",this.service=void 0,this.appliedDiscount=null,this.reason="",this.attachedFiles=[],this.createScheduleAppointment=new ScheduleAppointmentMutationController(this,{getApiClient:()=>this.apiClient,getQueryClient:()=>this.queryClientContext,onSuccess:e=>{this.dispatchEvent(new ui({appointmentId:e}))},onError:()=>{this.dispatchEvent(new CustomEvent("error"))}}),this.rescheduleAppointmentMutation=new ue(this,{mutationFn:async e=>this.apiClient.appointments.rescheduleAppointment(e),onSuccess:async()=>{await(this.queryClientContext?.invalidateQueries({queryKey:_(this.apiClient)}));const e=this.appointment?.id;if(!e)return Pe.error("confirm-step: reschedule succeeded but appointment id is missing"),void this.dispatchEvent(new CustomEvent("error"));this.dispatchEvent(new ui({appointmentId:e}))},onError:async()=>{await(this.queryClientContext?.invalidateQueries({queryKey:_(this.apiClient)})),this.dispatchEvent(new CustomEvent("error"))}}),this.createPaymentLinkMutation=new ue(this,{mutationFn:async e=>({result:await this.apiClient.payments.createPaymentLink(e),request:e}),onSuccess:({result:e,request:t})=>{this.dispatchEvent(new PaymentStartedEvent({sessionId:e.session_id,paymentUrl:e.payment_link,request:t,provider:e.provider}))},onError:async()=>{await(this.queryClientContext?.invalidateQueries({queryKey:_(this.apiClient)})),this.dispatchEvent(new CustomEvent("error"))}})}static{this.styles=hi}get isPaymentFlow(){return this.requiresPayment&&"schedule"===this.kind&&be(this.service?.price)}get isFullyDiscounted(){return null!=this.appliedDiscount&&Ye(this.appliedDiscount)}get ctaLabel(){return this.isFullyDiscounted?H("Confirmar cita"):this.isPaymentFlow?H("Continuar al pago"):H("Continuar")}async handleSubmit(){if(h.track(u(this.patient.hash,this.professional.id??"",this.startsAt??"",this.specialityId,this.serviceId??"")),!this.isPaymentFlow||this.isFullyDiscounted)if("schedule"===this.kind)this.createScheduleAppointment.run({slotId:this.scheduleSlot.id,serviceId:this.serviceId,consultationReason:this.reason,preconsultationDocuments:this.attachedFiles,discountCode:this.isFullyDiscounted?this.appliedDiscount?.code:void 0});else{const e=this.appointment?.id;if(!e)return void this.dispatchEvent(new CustomEvent("error"));this.rescheduleAppointmentMutation.run({id:e,slot_id:this.scheduleSlot.id,consultation_reason:this.reason,preconsultation_documents:this.attachedFiles})}else this.createPaymentLinkMutation.run({slot_id:this.scheduleSlot.id,service_id:this.serviceId,specialty_id:this.specialityId,consultation_reason:this.reason,preconsultation_documents:this.attachedFiles,discount_code:this.appliedDiscount?.code,return_url:this.returnUrl,payable_reference:this.scheduleSlot.payable_reference??void 0})}handleFilesChange(e){this.attachedFiles=e.detail.files}firstUpdated(){!this.reason&&this.appointment&&(this.reason=this.appointment.consultation_reason??""),!this.attachedFiles.length&&this.appointment&&(this.attachedFiles=this.appointment.preconsultation_documents?.map(e=>({id:e.id,file_path:e.file_path,file_name:e.file_name}))??[])}render(){return Y`<mq-page-title .title="${"schedule"===this.kind?H("Petición de cita"):H("Modificar cita")}" .showBack="${this.showBack}" @mq-back="${e=>et(this,e)}"></mq-page-title><div class="content"><new-appointment-summary .professional="${this.professional}" .startsAt="${this.startsAt}" .duration="${this.duration}" .previousStartsAt="${this.appointment?.start_date}" .previousDuration="${this.appointment?.duration}" .channel="${this.channel??this.appointment?.channel}" .serviceCode="${this.service?.code}" .serviceName="${this.service?.name}" .servicePrice="${this.scheduleSlot?.speciality?.price??null}" .appliedDiscount="${this.appliedDiscount}" .showPrice="${"reschedule"!==this.kind}" @discount-applied="${e=>{this.appliedDiscount=e.detail}}"></new-appointment-summary><mq-card class="questionnaire" roundness="md"><p class="questionnaire-title">${H("Cuestionario preconsulta")}</p><div class="field"><p class="label">${H("Motivo de consulta")}</p><mq-textarea maxlength="${240}" label="${H("¿Por qué necesitas la consulta?")}" rows="${4}" .value="${this.reason}" @onvaluechange="${e=>{this.reason=e.value}}"></mq-textarea></div><file-attachments .uploadedFiles="${this.attachedFiles}" @onfileschange="${this.handleFilesChange}"></file-attachments><mq-button size="xl" type="button" ?disabled="${this.createScheduleAppointment.isPending||this.rescheduleAppointmentMutation.isPending||this.createPaymentLinkMutation.isPending}" @click="${this.handleSubmit}" fullwidth>${this.ctaLabel}</mq-button></mq-card></div>`}};e([W({context:s,subscribe:!0})],mi.prototype,"apiClient",void 0),e([W({context:Re,subscribe:!0})],mi.prototype,"patient",void 0),e([ee({type:String})],mi.prototype,"kind",void 0),e([ee({type:Boolean})],mi.prototype,"showBack",void 0),e([ee({type:Boolean})],mi.prototype,"requiresPayment",void 0),e([ee({type:Object})],mi.prototype,"scheduleSlot",void 0),e([ee({type:Object})],mi.prototype,"professional",void 0),e([ee({type:String})],mi.prototype,"startsAt",void 0),e([ee({type:Number})],mi.prototype,"duration",void 0),e([ee({type:String})],mi.prototype,"channel",void 0),e([ee({type:Object})],mi.prototype,"appointment",void 0),e([ee({type:String})],mi.prototype,"serviceId",void 0),e([ee({type:String})],mi.prototype,"specialityId",void 0),e([ee({type:Object})],mi.prototype,"service",void 0),e([ee({type:Object})],mi.prototype,"appliedDiscount",void 0),e([ee({type:String})],mi.prototype,"returnUrl",void 0),e([te()],mi.prototype,"reason",void 0),e([te()],mi.prototype,"attachedFiles",void 0),e([W({context:Ee,subscribe:!0})],mi.prototype,"queryClientContext",void 0),mi=e([G(),t("confirm-step")],mi);class PaymentSuccessEvent extends Event{static{this.eventName="payment-success"}constructor(e){super(PaymentSuccessEvent.eventName,{bubbles:!0,composed:!0}),this.detail=e}}const vi=J`:host{display:flex;flex-direction:column;align-items:center;justify-content:center;flex:1;gap:var(--sp-4);padding:var(--sp-8);text-align:center}.message{font-family:var(--font-body);font-size:var(--text-base);line-height:var(--text-base--line-height);color:var(--color-neutrals-text-default);margin:0}.error-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}`;let fi=class PaymentPendingStep extends X{constructor(){super(...arguments),this._timedOut=!1,this._remaining=6e4}static{this.styles=vi}connectedCallback(){super.connectedCallback(),this._intervalId=setInterval(async()=>{if(this._remaining-=1e3,this._remaining<=0)return clearInterval(this._intervalId),this._timedOut=!0,void this.dispatchEvent(new CustomEvent("error"));try{const e=await this.apiClient.payments.getPaymentSession(this.sessionId);"paid"===e.status&&(clearInterval(this._intervalId),this.dispatchEvent(new PaymentSuccessEvent({appointmentId:e.consultation_id})))}catch{}},1e3)}disconnectedCallback(){super.disconnectedCallback(),clearInterval(this._intervalId)}render(){return this._timedOut?Y`<p class="error-title">${H("No hemos podido confirmar tu pago")}</p><p class="message">${H("Ha ocurrido un problema al verificar el estado de tu pago. Por favor, contacta con soporte si el cargo se ha realizado.")}</p>`:Y`${ge({size:40,color:"var(--color-primary-default)"})}<p class="message">${H("Verificando tu pago...")}</p>`}};e([W({context:s,subscribe:!0})],fi.prototype,"apiClient",void 0),e([ee({type:String})],fi.prototype,"sessionId",void 0),e([te()],fi.prototype,"_timedOut",void 0),fi=e([G(),t("payment-pending-step")],fi);const gi="https://checkout.mediquo.com";function yi(){return Y`<svg viewBox="0 0 9 9" fill="none" xmlns="http://www.w3.org/2000/svg" aria-hidden="true"><path d="M8.69821 4.46496C8.69821 4.14585 8.66917 3.8405 8.61524 3.54688H4.44141V5.2291L6.8452 5.22961C6.7477 5.78933 6.43393 6.26646 5.95317 6.58456V7.67596H7.38404C8.21953 6.9159 8.69821 5.79239 8.69821 4.46496Z" fill="#4285F4"/><path d="M5.95444 6.58518C5.55614 6.84924 5.04323 7.0037 4.44319 7.0037C3.28408 7.0037 2.30078 6.23599 1.94864 5.20117H0.472656V6.32673C1.20391 7.75305 2.70686 8.7318 4.44319 8.7318C5.64327 8.7318 6.65146 8.34387 7.3853 7.67608L5.95444 6.58518Z" fill="#34A853"/><path d="M1.80945 4.36536C1.80945 4.07479 1.85872 3.79391 1.94844 3.52986V2.4043H0.472459C0.170106 2.99409 0 3.65985 0 4.36536C0 5.07087 0.170624 5.73662 0.472459 6.32642L1.94844 5.20086C1.85872 4.9368 1.80945 4.65592 1.80945 4.36536Z" fill="#FABB05"/><path d="M4.44319 1.7281C5.0982 1.7281 5.68476 1.94985 6.14788 2.38315L7.4159 1.13779C6.64576 0.43279 5.64171 0 4.44319 0C2.70738 0 1.20391 0.978746 0.472656 2.40506L1.94864 3.53062C2.30078 2.4958 3.28408 1.7281 4.44319 1.7281Z" fill="#E94235"/></svg>`}function bi(){return Y`<svg viewBox="0 0 7 8" fill="none" xmlns="http://www.w3.org/2000/svg" aria-hidden="true"><path d="M4.39647 1.24287C4.67047 0.908299 4.8564 0.459064 4.80736 0C4.40627 0.0194706 3.91682 0.258332 3.63345 0.593169C3.37902 0.879905 3.15383 1.34795 3.21253 1.78777C3.66277 1.8259 4.1126 1.56806 4.39647 1.24287Z" fill="currentColor"/><path d="M4.80415 1.87364C4.15029 1.83562 3.59435 2.23593 3.2821 2.23593C2.96968 2.23593 2.49152 1.8928 1.97435 1.90205C1.30122 1.9117 0.676641 2.28326 0.335058 2.87422C-0.36752 4.05642 0.149648 5.81003 0.832868 6.77287C1.16466 7.24922 1.56452 7.77371 2.09139 7.75487C2.5892 7.7358 2.78432 7.44017 3.38943 7.44017C3.9941 7.44017 4.16986 7.75487 4.69682 7.74533C5.2433 7.73579 5.58494 7.26875 5.91672 6.79194C6.29735 6.24893 6.45316 5.72461 6.46296 5.69583C6.45316 5.6863 5.4092 5.29531 5.39952 4.12294C5.38967 3.14129 6.21914 2.67437 6.25818 2.64541C5.78977 1.96906 5.05789 1.8928 4.80415 1.87364Z" fill="currentColor"/></svg>`}class PaymentMethodSelectedEvent extends Event{static{this.eventName="payment-method-selected"}constructor(e){super(PaymentMethodSelectedEvent.eventName,{bubbles:!0,composed:!0}),this.detail=e}}const wi=J`:host{display:block;width:100%}.panel{width:100%;box-sizing:border-box;padding:24px}.header{display:flex;flex-direction:column;gap:6px;margin-bottom:10px}.title{font-family:var(--font-titles);font-size:var(--text-base);line-height:var(--text-base--line-height);font-weight:var(--font-weight-semibold);letter-spacing:-.025em;color:var(--color-neutrals-text-default);margin:0}.subtitle{font-family:var(--font-body);font-size:var(--text-sm);line-height:var(--text-sm--line-height);font-weight:var(--font-weight-normal);color:var(--color-neutrals-text-medium);margin:0}.body{display:flex;flex-direction:column;gap:var(--sp-4)}.options{display:flex;flex-direction:column;gap:var(--sp-4)}.option{display:flex;align-items:center;justify-content:space-between;gap:12px;width:100%;min-height:52px;padding:16px;border:1px solid var(--color-border,#edecf1);border-radius:var(--border-radius-md);background:var(--color-card,#fff);cursor:pointer;text-align:left;font:inherit;color:var(--color-neutrals-text-default);box-sizing:border-box;transition:border-color .15s ease}.option:active:not(:disabled):not(.option--selected),.option:hover:not(:disabled):not(.option--selected){border-color:var(--color-neutrals-border-default)}.option:focus-visible{outline:2px solid var(--color-primary);outline-offset:2px}.option--selected{border-color:var(--color-primary)}.lead{display:inline-flex;align-items:center;gap:12px;min-width:0}.lead__icon{display:flex;align-items:center;justify-content:center;width:16px;height:16px;color:var(--color-neutrals-text-default);flex-shrink:0}.lead__icon svg{display:block;width:100%;height:100%}.option__label{font-family:var(--font-body);font-size:var(--text-sm);line-height:var(--text-sm--line-height);font-weight:var(--font-weight-normal);color:var(--color-neutrals-text-default);margin:0;white-space:nowrap}.mark{display:inline-flex;align-items:center;gap:3px;height:20px;padding:0 6px;border:1px solid #dadce0;border-radius:4px;background:#fff;box-sizing:border-box;flex-shrink:0}.mark__glyph{display:flex;align-items:center}.mark__glyph svg{display:block;width:auto;height:11px}.mark--apple{color:#000;gap:2px;padding:0 5px}.mark__pay{font-family:system-ui,-apple-system,"Segoe UI",Roboto,sans-serif;font-size:11px;line-height:1}.mark--google .mark__pay{color:#5f6368;font-weight:500}.mark--apple .mark__pay{color:#000;font-weight:600}.radio{position:relative;width:16px;height:16px;border-radius:50%;border:2px solid var(--color-neutrals-border-default,#c9c6d4);box-sizing:border-box;flex-shrink:0;transition:border-color .15s ease}.radio--checked{border-color:var(--color-primary)}.radio--checked::after{content:"";position:absolute;inset:2px;border-radius:50%;background:var(--color-primary)}.action{display:block;width:100%}.confirm{display:block;width:100%}.wallet{display:flex;align-items:center;justify-content:center;gap:6px;width:100%;height:var(--button-height-md);padding:0 var(--size-4,16px);border:none;border-radius:var(--border-radius-md);background:#000;color:#fff;cursor:pointer;font:inherit;box-sizing:border-box;transition:background-color .15s ease}.wallet:hover{background-color:#1f1f1f}.wallet:active{background-color:#2e2e2e}.wallet:focus-visible{outline:2px solid var(--color-primary);outline-offset:2px}.wallet__glyph{display:flex;align-items:center}.wallet__glyph svg{display:block;width:auto}.wallet--google .wallet__glyph svg{height:22px}.wallet--apple .wallet__glyph{color:#fff}.wallet--apple .wallet__glyph svg{height:20px}.wallet__pay{font-family:system-ui,-apple-system,"Segoe UI",Roboto,sans-serif;font-size:20px;line-height:1;color:#fff}.wallet--google .wallet__pay{font-weight:500}.wallet--apple .wallet__pay{font-weight:600}`;let _i=class PaymentMethodSelector extends X{constructor(){super(...arguments),this.showWallets=!0,this.showGooglePay=!1,this.showApplePay=!1,this._selected=null,this._confirm=()=>{this._selected&&this.dispatchEvent(new PaymentMethodSelectedEvent({method:this._selected}))}}static{this.styles=wi}get _googlePayVisible(){return this.showWallets&&this.showGooglePay&&"undefined"!=typeof window&&window.isSecureContext}get _applePayVisible(){return this.showWallets&&this.showApplePay&&"undefined"!=typeof window&&window.isSecureContext}willUpdate(e){(e.has("showWallets")||e.has("showGooglePay")||e.has("showApplePay"))&&(this._googlePayVisible||this._applePayVisible||(this._selected="card"))}_select(e){this._selected=e}_renderRow(e,t,i){const s=this._selected===e;return Y`<button type="button" class="${me({option:!0,"option--selected":s})}" role="radio" aria-checked="${s}" @click="${()=>this._select(e)}"><span class="lead">${i} <span class="option__label">${t}</span> </span><span class="${me({radio:!0,"radio--checked":s})}"></span></button>`}_renderAction(){return"google-pay"===this._selected?Y`<button type="button" class="wallet wallet--google" aria-label="${H("Pagar con Google Pay")}" @click="${this._confirm}"><span class="wallet__glyph">${yi()}</span> <span class="wallet__pay">Pay</span></button>`:"apple-pay"===this._selected?Y`<button type="button" class="wallet wallet--apple" aria-label="${H("Pagar con Apple Pay")}" @click="${this._confirm}"><span class="wallet__glyph">${bi()}</span> <span class="wallet__pay">Pay</span></button>`:Y`<mq-button class="confirm" variant="primary" size="md" fullwidth type="button" ?disabled="${null===this._selected}" @click="${this._confirm}">${H("Confirmar y pagar")}</mq-button>`}render(){return Y`<mq-card class="panel" elevation="none" roundness="lg"><div class="header"><h2 class="title">${H("Método de pago")}</h2><p class="subtitle">${H("Selecciona un método para realizar el pago de la cita")}</p></div><div class="body"><div class="options" role="radiogroup" aria-label="${H("Método de pago")}">${this._renderRow("card",H("Tarjeta"),Y`<span class="lead__icon">${Y`<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="${Me}" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><rect x="2.5" y="5" width="19" height="14" rx="2.5"/><path d="M2.5 10h19"/></svg>`}</span>`)} ${this._googlePayVisible?this._renderRow("google-pay",H("Google pay"),Y`<span class="mark mark--google"><span class="mark__glyph">${yi()}</span> <span class="mark__pay">Pay</span></span>`):null} ${this._applePayVisible?this._renderRow("apple-pay",H("Apple pay"),Y`<span class="mark mark--apple"><span class="mark__glyph">${bi()}</span> <span class="mark__pay">Pay</span></span>`):null}</div><div class="action">${this._renderAction()}</div></div></mq-card>`}};e([ee({type:Boolean,attribute:"show-wallets"})],_i.prototype,"showWallets",void 0),e([ee({type:Boolean,attribute:"show-google-pay"})],_i.prototype,"showGooglePay",void 0),e([ee({type:Boolean,attribute:"show-apple-pay"})],_i.prototype,"showApplePay",void 0),e([te()],_i.prototype,"_selected",void 0),_i=e([G(),t("payment-method-selector")],_i);const Si=J`:host{height:100%;min-height:0;display:flex;flex-direction:column;gap:var(--sp-6);flex:1}.content{display:flex;flex-direction:column;flex:1;min-height:0;gap:var(--sp-4)}.summary-col{display:flex;flex-direction:column;gap:var(--sp-4);min-width:0}.confirm-reveal{display:grid;grid-template-rows:0fr;transition:grid-template-rows .25s ease-out}.content--free .confirm-reveal{grid-template-rows:1fr}.confirm-reveal__inner{min-height:0;overflow:hidden}.payment-col{display:grid;grid-template-rows:1fr;overflow:hidden;transition:grid-template-rows .3s ease,opacity .25s ease}.content--free .payment-col{grid-template-rows:0fr;opacity:0}.payment-col__inner{min-height:0;overflow:hidden}.payment-frame{position:relative;width:100%;min-width:0;display:flex;flex-direction:column;flex:0 0 auto;min-height:0;border-radius:var(--border-radius-md);overflow:hidden}.payment-frame iframe:not(.loaded){position:absolute;width:1px;height:1px;opacity:0;pointer-events:none;border:none}.payment-frame iframe.loaded{flex:none;display:block;width:100%;border:none;min-height:1050px}.panel{width:100%;box-sizing:border-box;padding:24px}.wallet-waiting{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:var(--sp-4);text-align:center;min-height:200px}.wallet-waiting__title{font-family:var(--font-titles);font-size:var(--text-lg);line-height:var(--text-lg--line-height);font-weight:var(--font-weight-semibold);color:var(--color-neutrals-text-default);margin:0}.wallet-waiting__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}.error{display:flex;flex-direction:column;align-items:center;justify-content:center;flex:1;gap:var(--sp-4);padding:var(--sp-8);text-align:center}.error-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}.error-message{font-family:var(--font-body);font-size:var(--text-base);line-height:var(--text-base--line-height);color:var(--color-neutrals-text-default);margin:0}@media (min-width:768px){.content{display:grid;grid-template-columns:1fr 1fr;align-items:start;gap:var(--sp-6);transition:grid-template-columns .3s ease}.content--free{grid-template-columns:1fr 0fr}.summary-col{max-width:calc((var(--content-max-width) - var(--sp-6))/ 2)}.content--free .summary-col{margin-inline:auto}.payment-col,.payment-frame{min-width:0}}`,xi="mediquo:payment:retry",$i="mediquo:payment:resize";class PaymentRetryEvent extends Event{static{this.eventName="payment-retry"}constructor(){super(PaymentRetryEvent.eventName,{bubbles:!0,composed:!0})}}class ApplePayOpenedEvent extends Event{static{this.eventName="apple-pay-opened"}constructor(e){super(ApplePayOpenedEvent.eventName,{bubbles:!0,composed:!0,cancelable:!0}),this.detail=e}}class GooglePayOpenedEvent extends Event{static{this.eventName="google-pay-opened"}constructor(e){super(GooglePayOpenedEvent.eventName,{bubbles:!0,composed:!0,cancelable:!0}),this.detail=e}}let ki=class PaymentStep extends X{constructor(){super(...arguments),this.showBack=!0,this.paymentUrl="",this.channel=void 0,this.service=void 0,this.scheduleSlot=void 0,this.appliedDiscount=null,this.bookingRequest=null,this.env="production",this.locale="es_ES",this.countryCode="ES",this.googlePayEnabled=!1,this.applePayEnabled=!1,this.stripeRedirect=!1,this._view="select",this._walletWaiting=null,this._walletUrl=null,this._walletPopupBlocked=!1,this._walletConfigError=!1,this._timedOut=!1,this._iframeLoaded=!1,this._iframeHeight=null,this._walletPopup=null,this._pollDeadline=0,this.createScheduleAppointment=new ScheduleAppointmentMutationController(this,{getApiClient:()=>this.apiClient,getQueryClient:()=>this.queryClientContext,onSuccess:e=>{this.dispatchEvent(new CustomEvent("success",{detail:{appointmentId:e}}))},onError:()=>{this.dispatchEvent(new CustomEvent("error"))}}),this._onPaymentMethodSelected=e=>{const t=e.detail.method;if(this.provider===L.Stripe&&this.stripeRedirect){const e=new F({url:this.paymentUrl,sessionId:this.sessionId});return this.dispatchEvent(e),void(e.defaultPrevented||window.location.assign(this.paymentUrl))}if("card"===t)return this._view="card",this._walletWaiting=null,this._walletConfigError=!1,void this._startPaymentPolling();const i=t,s=this._buildWalletCheckoutUrl(i);if(!s)return this._walletConfigError=!0,this._walletWaiting=i,this._walletUrl=null,void(this._walletPopupBlocked=!1);this._walletUrl=s,this._walletConfigError=!1,this._walletPopupBlocked=!1,this._walletWaiting=i;const a=this._dispatchWalletOpenedEvent(i,s);if(this.dispatchEvent(a),a.defaultPrevented)this._walletPopup=null;else{const e=this._openWalletPopup(i,s);this._walletPopup=e,e||(this._walletPopupBlocked=!0)}this._startPaymentPolling()},this._onHeaderBack=e=>(e.stopPropagation(),this.embedsHostedCheckout?(this._stopPaymentPolling(),void this.dispatchEvent(new CustomEvent("back"))):"card"===this._view?(this._stopPaymentPolling(),this._view="select",this._iframeLoaded=!1,void(this._iframeHeight=null)):this._walletWaiting?(this._stopPaymentPolling(),this._walletWaiting=null,this._walletConfigError=!1,this._walletPopup?.close(),void(this._walletPopup=null)):void this.dispatchEvent(new CustomEvent("back"))),this._onMessage=e=>{if("card"===this._view)switch(e.data?.type){case xi:return void this.dispatchEvent(new PaymentRetryEvent);case $i:return void("number"==typeof e.data.height&&(this._iframeHeight=e.data.height))}}}static{this.styles=Si}get isFullyDiscounted(){return null!=this.appliedDiscount&&Ye(this.appliedDiscount)}get embedsHostedCheckout(){return this.provider===L.Stripe&&!this.stripeRedirect}confirmFree(){const e=this.bookingRequest;e&&this.createScheduleAppointment.run({slotId:e.slot_id,serviceId:e.service_id,consultationReason:e.consultation_reason,preconsultationDocuments:e.preconsultation_documents,discountCode:this.appliedDiscount?.code})}_paymentAmountCents(){return this.appliedDiscount?this.appliedDiscount.totalAmount:this.scheduleSlot?.speciality?.price?.amount??0}_paymentCurrency(){return this.appliedDiscount?.currency??this.scheduleSlot?.speciality?.price?.currency??"EUR"}_paymentAmountLabel(){return _e(this._paymentAmountCents()).toFixed(2)}_buildApplePayUrl(){return this.apiKey&&this.token?function(e){const t=new URL(`${gi}/apple-pay`);return t.searchParams.set("api_key",e.apiKey),t.searchParams.set("session_id",e.sessionId),t.searchParams.set("amount",e.amount),t.searchParams.set("currency",e.currency),t.searchParams.set("country",e.country),t.searchParams.set("label",e.label),t.searchParams.set("env",e.env),t.searchParams.set("locale",e.locale),e.successUrl&&t.searchParams.set("success_url",e.successUrl),t.hash=`token=${encodeURIComponent(e.token)}`,t.toString()}({apiKey:this.apiKey,token:this.token,sessionId:this.sessionId,amount:this._paymentAmountLabel(),currency:this._paymentCurrency(),country:this.countryCode,label:this.service?.name??H("Consulta"),env:this.env,locale:this.locale,successUrl:this.successUrl}):null}_buildGooglePayUrl(){return this.apiKey&&this.token?function(e){const t=new URL(`${gi}/google-pay`);return t.searchParams.set("api_key",e.apiKey),t.searchParams.set("session_id",e.sessionId),t.searchParams.set("amount",e.amount),t.searchParams.set("currency",e.currency),t.searchParams.set("country",e.country),t.searchParams.set("label",e.label),t.searchParams.set("env",e.env),t.searchParams.set("locale",e.locale),e.successUrl&&t.searchParams.set("success_url",e.successUrl),t.hash=`token=${encodeURIComponent(e.token)}`,t.toString()}({apiKey:this.apiKey,token:this.token,sessionId:this.sessionId,amount:this._paymentAmountLabel(),currency:this._paymentCurrency(),country:this.countryCode,label:this.service?.name??H("Consulta"),env:this.env,locale:this.locale,successUrl:this.successUrl}):null}_buildPayUrl(){return this.apiKey&&this.token?function(e){const t=new URL(`${gi}/pay`);t.searchParams.set("api_key",e.apiKey),t.searchParams.set("session_id",e.sessionId),t.searchParams.set("amount",e.amount),t.searchParams.set("currency",e.currency),t.searchParams.set("country",e.country),t.searchParams.set("label",e.label),t.searchParams.set("env",e.env),t.searchParams.set("locale",e.locale);const i=e.payableReference?.trim();return i&&t.searchParams.set("payable_reference",i),t.hash=`token=${encodeURIComponent(e.token)}`,t.toString()}({apiKey:this.apiKey,token:this.token,sessionId:this.sessionId,amount:this._paymentAmountLabel(),currency:this._paymentCurrency(),country:this.countryCode,label:this.service?.name??H("Consulta"),env:this.env,locale:this.locale,payableReference:this.scheduleSlot?.payable_reference??void 0}):null}_buildWalletCheckoutUrl(e){return"apple-pay"===e?this._buildApplePayUrl():this._buildGooglePayUrl()}_stopPaymentPolling(){void 0!==this._pollIntervalId&&(clearInterval(this._pollIntervalId),this._pollIntervalId=void 0),void 0!==this._pollStartTimeoutId&&(clearTimeout(this._pollStartTimeoutId),this._pollStartTimeoutId=void 0)}_startPaymentPolling(){this._stopPaymentPolling(),this._timedOut=!1,this._pollDeadline=Date.now()+6e5,this._pollStartTimeoutId=setTimeout(()=>{this._pollStartTimeoutId=void 0,this._pollOnce(),this._pollIntervalId=setInterval(()=>{this._pollOnce()},3e3)},5e3)}async _pollOnce(){if(Date.now()>=this._pollDeadline)return this._stopPaymentPolling(),this._timedOut=!0,this.requestUpdate(),void this.dispatchEvent(new CustomEvent("error"));try{const e=await this.apiClient.payments.getPaymentSession(this.sessionId);if(e.status===j.Paid)return this._stopPaymentPolling(),this._walletPopup?.close(),this._walletPopup=null,void this.dispatchEvent(new PaymentSuccessEvent({appointmentId:e.consultation_id}));e.status===j.Denied&&(this._stopPaymentPolling(),this._walletPopup?.close(),this._walletPopup=null,this._walletWaiting=null,this.dispatchEvent(new PaymentRetryEvent))}catch{}}_dispatchWalletOpenedEvent(e,t){return"apple-pay"===e?new ApplePayOpenedEvent({url:t,sessionId:this.sessionId}):new GooglePayOpenedEvent({url:t,sessionId:this.sessionId})}_openWalletPopup(e,t){const i="apple-pay"===e?"mediquo-apple-pay":"mediquo-google-pay";return window.open(t,i,["width=480","height=720",`left=${Math.max(0,Math.round((window.screen.availWidth-480)/2))}`,`top=${Math.max(0,Math.round((window.screen.availHeight-720)/2))}`,"menubar=no","toolbar=no","location=yes","status=no","scrollbars=yes","resizable=yes"].join(","))}_reopenWalletPopup(){if(!this._walletUrl||!this._walletWaiting)return;const e=this._openWalletPopup(this._walletWaiting,this._walletUrl);this._walletPopup=e,this._walletPopupBlocked=!e}_walletWaitingTitle(){return this._walletConfigError?"google-pay"===this._walletWaiting?H("No se puede iniciar Google Pay"):H("No se puede iniciar Apple Pay"):"google-pay"===this._walletWaiting?H("Esperando confirmación de Google Pay"):H("Esperando confirmación de Apple Pay")}_walletReopenLabel(){return"google-pay"===this._walletWaiting?H("Abrir Google Pay"):H("Abrir Apple Pay")}_walletReopenLinkLabel(){return"google-pay"===this._walletWaiting?H("Abrir ventana de Google Pay"):H("Abrir ventana de Apple Pay")}_walletReopenAgainLabel(){return"google-pay"===this._walletWaiting?H("Volver a abrir Google Pay"):H("Volver a abrir Apple Pay")}willUpdate(e){super.willUpdate(e),this.embedsHostedCheckout&&"select"===this._view&&(this._view="card")}updated(e){super.updated(e),e.has("paymentUrl")&&(this._iframeLoaded=!1,this._iframeHeight=null),this.embedsHostedCheckout&&"card"===this._view&&this.sessionId&&(e.has("sessionId")||e.has("provider")||e.has("paymentUrl"))&&this._startPaymentPolling()}connectedCallback(){super.connectedCallback(),window.addEventListener("message",this._onMessage)}disconnectedCallback(){window.removeEventListener("message",this._onMessage),this._stopPaymentPolling(),this._walletPopup?.close(),this._walletPopup=null,super.disconnectedCallback()}_onIframeLoad(){this._iframeLoaded=!0}_renderSummaryColumn(){return Y`<div class="summary-col"><new-appointment-summary .professional="${this.professional}" .startsAt="${this.startsAt}" .duration="${this.duration}" .channel="${this.channel}" .serviceCode="${this.service?.code}" .serviceName="${this.service?.name}" .servicePrice="${this.scheduleSlot?.speciality?.price??null}" .appliedDiscount="${this.appliedDiscount}" .fillColumn="${!0}"></new-appointment-summary><div class="confirm-reveal" .inert="${!this.isFullyDiscounted}"><div class="confirm-reveal__inner"><mq-button size="xl" type="button" fullwidth ?disabled="${this.createScheduleAppointment.isPending}" @click="${this.confirmFree}">${H("Confirmar cita")}</mq-button></div></div></div>`}_renderPaymentColumn(){if(this._walletWaiting)return this._walletConfigError?Y`<div class="payment-col__inner"><mq-card class="panel" elevation="none" roundness="lg"><div class="wallet-waiting"><p class="wallet-waiting__title">${this._walletWaitingTitle()}</p><p class="wallet-waiting__message">${H("Faltan credenciales de pago. Vuelve atrás e inténtalo de nuevo, o paga con tarjeta.")}</p><mq-text-button type="button" @click="${()=>{this._walletWaiting=null,this._walletConfigError=!1}}">${H("Elegir otro método")}</mq-text-button></div></mq-card></div>`:Y`<div class="payment-col__inner"><mq-card class="panel" elevation="none" roundness="lg"><div class="wallet-waiting"><p class="wallet-waiting__title">${this._walletWaitingTitle()}</p><p class="wallet-waiting__message">${H("No cierres esta página.")}</p>${this._walletPopupBlocked&&this._walletUrl?Y`<mq-text-button type="button" @click="${this._reopenWalletPopup}">${this._walletReopenLabel()}</mq-text-button><a href="${this._walletUrl}" target="_blank" rel="noopener noreferrer">${this._walletReopenLinkLabel()}</a>`:Y`<mq-text-button type="button" @click="${this._reopenWalletPopup}">${this._walletReopenAgainLabel()}</mq-text-button>`}</div></mq-card></div>`;if("select"===this._view)return Y`<div class="payment-col__inner"><payment-method-selector .showWallets="${this.provider!==L.Stripe}" .showGooglePay="${this.googlePayEnabled}" .showApplePay="${this.applePayEnabled}" @payment-method-selected="${this._onPaymentMethodSelected}"></payment-method-selector></div>`;const e=this.embedsHostedCheckout?this._buildPayUrl():this.paymentUrl;return this.embedsHostedCheckout&&!e?Y`<div class="payment-col__inner"><mq-card class="panel" elevation="none" roundness="lg"><div class="wallet-waiting"><p class="wallet-waiting__title">${H("No se puede iniciar el pago")}</p><p class="wallet-waiting__message">${H("Faltan credenciales de pago. Vuelve atrás e inténtalo de nuevo.")}</p></div></mq-card></div>`:Y`<div class="payment-col__inner"><div class="payment-frame">${this._iframeLoaded?null:Y`<mq-skeleton width="100%" height="600px" border-radius="md" role="status" aria-live="polite" aria-label="${H("Cargando portal de pago")}"></mq-skeleton>`}<iframe class="${this._iframeLoaded?"loaded":""}" src="${e??""}" title="${H("Portal de pago")}" allow="payment" style="${null!==this._iframeHeight?`min-height: ${this._iframeHeight}px; height: ${this._iframeHeight}px;`:""}" @load="${this._onIframeLoad}"></iframe></div></div>`}render(){if(this._timedOut)return Y`<div class="error"><p class="error-title">${H("No hemos podido confirmar tu pago")}</p><p class="error-message">${H("Ha ocurrido un problema al verificar el estado de tu pago. Por favor, contacta con soporte si el cargo se ha realizado.")}</p></div>`;const e=Y`<mq-page-title .title="${H("Petición de cita")}" .showBack="${this.showBack}" @mq-back="${this._onHeaderBack}"></mq-page-title>`;return this.isFullyDiscounted?Y`${e}<div class="content content--free">${this._renderSummaryColumn()}<div class="payment-col" .inert="${!0}"></div></div>`:Y`${e}<div class="content">${this._renderSummaryColumn()}<div class="payment-col">${this._renderPaymentColumn()}</div></div>`}};e([W({context:s,subscribe:!0})],ki.prototype,"apiClient",void 0),e([ee({type:String})],ki.prototype,"sessionId",void 0),e([ee({type:Boolean})],ki.prototype,"showBack",void 0),e([ee({type:String})],ki.prototype,"paymentUrl",void 0),e([ee({type:Object})],ki.prototype,"professional",void 0),e([ee({type:String})],ki.prototype,"startsAt",void 0),e([ee({type:Number})],ki.prototype,"duration",void 0),e([ee({type:String})],ki.prototype,"channel",void 0),e([ee({type:Object})],ki.prototype,"service",void 0),e([ee({type:Object})],ki.prototype,"scheduleSlot",void 0),e([ee({type:Object})],ki.prototype,"appliedDiscount",void 0),e([ee({type:Object})],ki.prototype,"bookingRequest",void 0),e([ee({type:String,attribute:!1})],ki.prototype,"apiKey",void 0),e([ee({type:String,attribute:!1})],ki.prototype,"token",void 0),e([ee({type:String,attribute:!1})],ki.prototype,"env",void 0),e([ee({type:String,attribute:!1})],ki.prototype,"locale",void 0),e([ee({type:String,attribute:!1})],ki.prototype,"countryCode",void 0),e([ee({type:String,attribute:!1})],ki.prototype,"successUrl",void 0),e([ee({type:String,attribute:!1})],ki.prototype,"provider",void 0),e([ee({type:Boolean,attribute:!1})],ki.prototype,"googlePayEnabled",void 0),e([ee({type:Boolean,attribute:!1})],ki.prototype,"applePayEnabled",void 0),e([ee({type:Boolean,attribute:!1})],ki.prototype,"stripeRedirect",void 0),e([W({context:Ee,subscribe:!0})],ki.prototype,"queryClientContext",void 0),e([te()],ki.prototype,"_view",void 0),e([te()],ki.prototype,"_walletWaiting",void 0),e([te()],ki.prototype,"_walletUrl",void 0),e([te()],ki.prototype,"_walletPopupBlocked",void 0),e([te()],ki.prototype,"_walletConfigError",void 0),e([te()],ki.prototype,"_timedOut",void 0),e([te()],ki.prototype,"_iframeLoaded",void 0),e([te()],ki.prototype,"_iframeHeight",void 0),ki=e([G(),t("payment-step")],ki);const Ci=J`:host{display:block;width:100%;box-sizing:border-box}.banner{align-items:center;background-color:var(--color-primary-background-extraWeak);border-radius:var(--border-radius-sm);box-sizing:border-box;color:var(--color-primary-default,var(--color-primary));display:flex;gap:10px;font-family:var(--font-body);font-size:var(--text-sm);font-weight:var(--font-weight-normal);line-height:var(--text-sm--line-height);padding:var(--size-2) var(--size-4);width:100%}.label{margin:0}`;let Pi=class ScheduleLoadingBanner extends X{static{this.styles=Ci}render(){return Y`<div class="banner" role="status" aria-live="polite">${ge({size:24,color:"var(--color-primary-default, var(--color-primary))"})}<p class="label">${H("Cargando")}</p></div>`}};Pi=e([G(),t("schedule-loading-banner")],Pi);const Ei=J`.form-container{display:flex;flex-direction:column;gap:var(--size-4)}.form-content{display:flex;flex-direction:column;gap:var(--size-4);width:100%}.field{display:flex;flex-direction:column;gap:var(--size-2);width:100%}.field-title{font-family:var(--font-body, "Roboto");font-size:var(--text-base,16px);font-weight:var(--font-weight-bold,700);line-height:22px;color:var(--color-neutrals-text-default,#333);margin:0}.action-button{flex-shrink:0;width:100%}.filters-loading-banner{flex-basis:100%;width:100%}@media (min-width:768px){.form-content{flex-direction:row;gap:var(--size-6);align-items:end}.action-button{--button-height-md:var(--button-height-lg);min-width:254px;width:auto}}`,Mi=fe.object({service:fe.string().min(1),specialty:fe.string().min(1)});class SearchProfessionalsFormSuccessEvent extends CustomEvent{static{this.eventName="success"}constructor(e){super(SearchProfessionalsFormSuccessEvent.eventName,{bubbles:!0,composed:!0,detail:e})}}let Ii=class SearchProfessionalsForm extends X{constructor(){super(...arguments),this.form=new TanStackFormController(this,{defaultValues:this.defaultValues,onSubmit:e=>{const t=e.value;h.track(m(this.patient.hash,t.specialty??"",t.service??"")),this.dispatchEvent(new SearchProfessionalsFormSuccessEvent(t))},validators:{onSubmit:Mi}}),this.getScheduleServicesQuery=new i(this,()=>x(this.apiClient)),this.getOrganizationSpecialtiesQuery=new i(this,()=>d(this.apiClient))}static{this.styles=Ei}get filtersLoading(){const e=this.getScheduleServicesQuery.result,t=this.getOrganizationSpecialtiesQuery.result;return(e?.isPending??!0)||(t?.isPending??!0)}willUpdate(e){e.has("defaultValues")&&(this.form.api.setFieldValue("service",this.defaultValues.service),this.form.api.setFieldValue("specialty",this.defaultValues.specialty))}renderScheduleServices({name:e,value:t,onValueChange:i,error:s},a){const o=le();return Y`<mq-select label="${H("Modalidad de la cita")}" id="${ve(e)}" value="${ve(t)}" name="${ve(e)}" size="lg" ?error="${s}" @onvaluechange="${e=>{i(e.value)}}">${a.map(e=>Y`<mq-option value="${e.id}">${p(e.code??"",o,e.name)}</mq-option>`)}</mq-select>`}renderOrganizationSpecialties({name:e,value:t,onValueChange:i,error:s},a){const o=le();return Y`<mq-select label="${H("Especialidad")}" id="${ve(e)}" value="${ve(t)}" name="${ve(e)}" size="lg" ?error="${s}" @onvaluechange="${e=>{i(e.value)}}">${a.map(e=>Y`<mq-option value="${e.id}">${v[e.code]?.[o]??e.name}</mq-option>`)}</mq-select>`}render(){const e=this.getScheduleServicesQuery.result,t=this.getOrganizationSpecialtiesQuery.result,i=e?.data,s=t?.data,a=!0===e?.isSuccess&&!0===t?.isSuccess&&null!=i&&null!=s;return Y`<div class="form-container"><form class="form-content" @submit="${e=>{e.preventDefault(),e.stopPropagation(),this.form.api.handleSubmit()}}">${this.filtersLoading?Y`<schedule-loading-banner class="filters-loading-banner"></schedule-loading-banner>`:a?Y`<div class="field">${this.form.field({name:"service"},e=>Y`<p class="field-title">${H("Modalidad de la cita*")}</p>${this.renderScheduleServices({name:e.name,value:e.state.value,onValueChange:e.handleChange,error:!e.state.meta.isValid},i)}`)}</div><div class="field">${this.form.field({name:"specialty"},e=>Y`<p class="field-title">${H("Especialidad*")}</p>${this.renderOrganizationSpecialties({name:e.name,value:e.state.value,onValueChange:e.handleChange,error:!e.state.meta.isValid},s)}`)}</div><mq-button type="submit" class="action-button" fullwidth>${H("Buscar disponibilidad")}</mq-button>`:Z}</form></div>`}};function Ai(e){if(!e)return new Date(Number.NaN);const t=$(e);if(Ae(t))return t;const i=qe(e);if(Ae(i))return i;const s=new Date(e);return Number.isNaN(s.getTime())?new Date(Number.NaN):s}function qi(e,t){if(!Ae(e))return"";if(t)try{const i=new Intl.DateTimeFormat("en-CA",{timeZone:t,year:"numeric",month:"2-digit",day:"2-digit"}).formatToParts(e),s=e=>i.find(t=>t.type===e)?.value??"";return`${s("year")}-${s("month")}-${s("day")}`}catch{}return Fe(e,"yyyy-MM-dd")}function Fi(e,t){const i=new Date;let s;for(const t of e){const e=Ai(t.starts_at);Ae(e)&&(Ve(e,i)&&(!s||Te(e,s)<0)&&(s=e))}return s?qi(s,t):void 0}e([W({context:s,subscribe:!0})],Ii.prototype,"apiClient",void 0),e([W({context:Re,subscribe:!0})],Ii.prototype,"patient",void 0),e([ee({type:Object})],Ii.prototype,"defaultValues",void 0),Ii=e([G(),t("search-professionals-form")],Ii);const Vi=J`:host{display:block}.card{padding:var(--sp-6) var(--sp-4);display:flex;flex-direction:column;gap:var(--sp-4)}.schedules{display:flex;flex-direction:column;gap:var(--sp-2)}.schedule{align-self:stretch;display:flex;align-items:center;column-gap:var(--sp-2_5);flex-wrap:nowrap;min-width:0;overflow:hidden}.day-slot{box-sizing:border-box;padding:var(--sp-2);width:var(--size-15);height:var(--size-15);display:flex;flex-direction:column;gap:var(--sp-1);align-items:center;justify-content:center}.day-slot-day{font-family:var(--font-body);font-size:var(--text-sm);line-height:var(--text-sm--line-height);font-weight:var(--font-weight-normal)}.day-slot-date{font-family:var(--font-body);font-size:var(--text-sm);line-height:var(--text-sm--line-height);font-weight:var(--font-weight-medium);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.schedules-container{flex:1;display:flex;flex-direction:column;gap:var(--sp-4);transition:opacity .2s}.schedules-container.is-pending{opacity:.5;pointer-events:none}.schedule-slot{box-sizing:border-box;padding:var(--sp-2) var(--sp-1);background:var(--color-primary-background-extraWeak);flex:1 1 0;min-width:0;height:var(--sp-11);display:flex;align-items:center;justify-content:center;border:1px solid color-mix(in srgb,var(--color-primary) 12%,transparent);border-radius:var(--border-radius-md);cursor:pointer;transition:all .2s;font-family:var(--font-body);font-size:var(--text-sm);font-weight:var(--font-weight-medium);color:var(--color-primary-text-link);text-align:center;white-space:nowrap;outline:0;position:relative;--mq-slot-ring-color:var(--color-primary)}.schedule-slot:hover:not(.is-empty){background-color:color-mix(in srgb,var(--color-primary) 12%,var(--color-primary-background-extraWeak));border-color:color-mix(in srgb,var(--color-primary) 24%,transparent)}.schedule-slot:focus-visible{box-shadow:0 0 0 1.5px var(--color-background,#fff),0 0 0 3.5px var(--mq-slot-ring-color,var(--color-primary));z-index:1}.schedule-slot.is-empty{cursor:default;background-color:transparent;border-color:var(--color-border);color:var(--color-neutrals-text-medium)}.schedule-slot.is-empty:focus-visible{box-shadow:none}.schedule-slot:nth-child(n + 5){display:none}.no-slots{font-size:var(--text-sm);line-height:var(--text-sm--line-height);font-weight:var(--font-weight-normal);color:var(--color-neutrals-text-default);text-align:center}.error-message{color:var(--color-error-text-default);font-family:var(--font-body);font-size:var(--text-sm);line-height:var(--text-sm--line-height);margin:0;text-align:center}@media (min-width:768px){.card{flex-direction:row;justify-content:space-between;align-items:center;gap:var(--sp-2);padding:var(--sp-8)}professional-overview{width:100%;max-width:327px;flex-shrink:0}.schedules-container{gap:var(--sp-3)}mq-button{margin:0 auto;max-width:323px}.schedule-slot:nth-child(n + 5){display:flex}.schedule-slot:nth-child(n + 9){display:none}}`;class SelectedSlotEvent extends Event{static{this.eventName="selected-slot"}constructor(e){super(SelectedSlotEvent.eventName,{bubbles:!0,composed:!0}),this.detail=e}}let Di=class ShowFullScheduleEvent extends Event{static{this.eventName="show-full-schedule"}constructor(){super(ShowFullScheduleEvent.eventName,{bubbles:!0,composed:!0})}},zi=class ProfessionalCard extends X{constructor(){super(...arguments),this.serviceId="",this.specialtyId="",this.showSlotUnavailableError=!1,this.getOrganizationSpecialtiesQuery=new i(this,()=>d(this.apiClient)),this.checkForSlotAvailabilityMutation=new ue(this,{mutationFn:e=>this.apiClient.schedules.getScheduleSlot({slot_id:e,service_id:this.serviceId||void 0,speciality_id:this.specialtyId?Number(this.specialtyId):void 0})})}static{this.styles=Vi}get groupedSlots(){const e=this.professional?.slots??[];return 0===e.length?[]:function(e,t){if(!e.length)return[];const i=e.reduce((e,i)=>{const s=Ai(i.starts_at);if(!Ae(s))return e;const a=qi(s,t);if(!a)return e;const o={slot:i,parsedDate:s};if(!e.has(a))return e.set(a,[o]),e;const r=e.get(a);return r?.push(o),e},new Map);return 0===i.size?[]:Array.from(i.entries()).map(([e,t])=>({key:e,slots:t.sort((e,t)=>Te(e.parsedDate,t.parsedDate)),date:t[0]?.parsedDate??new Date(Number.NaN)})).filter(({date:e})=>Ae(e)).sort((e,t)=>Te(e.date,t.date))}(e,this.patient.timezone).map(e=>({key:e.key,dayLabel:this.formatDay(e.date),dateLabel:this.formatDate(e.date),slots:e.slots,date:e.date}))}get timezone(){return this.patient.timezone}formatDay(e){const t=le().replace("_","-"),i=k(this.timezone),s=new Intl.DateTimeFormat(t,{weekday:"short",...i?{timeZone:i}:{}}).format(e).replace(/\.$/,"");return`${s.charAt(0).toUpperCase()}${s.slice(1)}`}formatDate(e){const t=le().replace("_","-"),i=k(this.timezone),s=i?{timeZone:i}:{},a=new Intl.DateTimeFormat(t,{day:"numeric",...s}).format(e),o=new Intl.DateTimeFormat(t,{month:"short",...s}).format(e).replace(/\.$/,"");return`${a} ${`${o.charAt(0).toUpperCase()}${o.slice(1)}`}`}formatTime(e){return function(e,t,i){return new Intl.DateTimeFormat(t,{hour:"2-digit",minute:"2-digit",hour12:!1,...i?{timeZone:i}:{}}).format(e)}(e,le().replace("_","-"),this.timezone)}async handleSlotClick(e){const t=await this.checkForSlotAvailabilityMutation.run(e.id);t.status===B.available?(this.showSlotUnavailableError=!1,h.track(f(this.patient.hash,this.professional.id,e.starts_at,this.specialtyId,this.serviceId)),this.dispatchEvent(new SelectedSlotEvent({slot:t,professional:this.professional}))):(this.showSlotUnavailableError=!0,this.queryClientContext?.invalidateQueries({queryKey:_(this.apiClient)}))}render(){const e=le(),t=this.getOrganizationSpecialtiesQuery.result?.data?.find(e=>e.id===this.professional.speciality.id),i=c(t?.code??"",e,t?.name);return Y`<mq-card class="card" elevation="md" roundness="lg"><professional-overview .name="${this.professional.name}" .specialtyName="${i??""}" .collegiateNumber="${this.professional.collegiate_number??void 0}" .description="${this.professional.description??""}" .languages="${this.professional.languages}" .avatar="${this.professional.avatar??""}"></professional-overview><div class="${me({"schedules-container":!0,"is-pending":this.checkForSlotAvailabilityMutation.isPending})}">${this.showSlotUnavailableError?Y`<p class="error-message">${H("Este horario no está disponible. Por favor, seleccione otro.")}</p>`:Z}<div class="schedules">${this.groupedSlots.length>0?this.groupedSlots.map(e=>Y`<div class="schedule"><div class="day-slot"><span class="day-slot-day">${e.dayLabel}</span> <span class="day-slot-date">${e.dateLabel}</span></div>${e.slots.map(({slot:e,parsedDate:t})=>Y`<button class="schedule-slot" data-slot-id="${e.id}" @click="${()=>this.handleSlotClick(e)}">${this.formatTime(t)}</button>`)} ${Array.from({length:Math.max(0,7-e.slots.length)}).map(()=>Y`<div class="schedule-slot is-empty">-</div>`)}</div>`):Y`<div class="no-slots">${H("Sin huecos disponibles actualmente")}</div>`}</div><mq-button fullwidth @click="${()=>{h.track(g(this.patient.hash,this.professional.id,this.specialtyId,this.serviceId)),this.dispatchEvent(new Di)}}">${Le({size:24})} ${H("Ver agenda completa")}</mq-button></div></mq-card>`}};e([W({context:s,subscribe:!0})],zi.prototype,"apiClient",void 0),e([W({context:Re,subscribe:!0})],zi.prototype,"patient",void 0),e([ee({type:Object})],zi.prototype,"professional",void 0),e([ee({type:String})],zi.prototype,"serviceId",void 0),e([ee({type:String})],zi.prototype,"specialtyId",void 0),e([te()],zi.prototype,"showSlotUnavailableError",void 0),e([W({context:Ee,subscribe:!0})],zi.prototype,"queryClientContext",void 0),zi=e([G(),t("professional-card")],zi);const Li=J`:host{display:block;width:100%}mq-callout{--mq-callout-padding:var(--sp-2)}.message{font-family:var(--font-body);font-size:var(--text-sm);font-weight:var(--font-weight-bold);line-height:var(--text-sm--line-height);margin:0;overflow-wrap:anywhere}`;let ji=class HighDemandCallout extends X{constructor(){super(...arguments),this.specialtyName=void 0}static{this.styles=Li}render(){const e=this.specialtyName?.trim();return e?Y`<mq-callout role="status" background="primary" variant="info"><p class="message">${H(K`La demanda de citas en ${e} es elevada en este momento, por lo que los tiempos de espera pueden ser mayores de lo habitual.`)}</p></mq-callout>`:Z}};e([ee({type:String})],ji.prototype,"specialtyName",void 0),ji=e([G(),t("high-demand-callout")],ji);const Bi=J`:host{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);margin:0;margin-bottom:var(--sp-2)}.applied-filters{align-items:center;display:flex;flex-wrap:wrap;gap:var(--sp-2)}.applied-filters-label{color:var(--color-neutrals-text-default);font-family:var(--font-body);font-size:var(--text-sm);font-weight:var(--font-weight-normal);line-height:var(--text-sm--line-height);margin:0}.applied-filters-values{align-items:center;display:flex;flex-wrap:wrap;gap:var(--sp-2)}#professionals-results high-demand-callout{display:block;margin-top:var(--sp-4)}`;class ShowFullScheduleEvent extends Event{static{this.eventName="show-full-schedule"}constructor(e){super(ShowFullScheduleEvent.eventName,{bubbles:!0,composed:!0}),this.detail=e}}let Oi=class ProfessionalsList extends X{constructor(){super(...arguments),this.specialty_id=void 0,this.service_id=void 0,this.getScheduleServicesQuery=new i(this,()=>x(this.apiClient)),this.getOrganizationSpecialtiesQuery=new i(this,()=>d(this.apiClient)),this.getProfessionalsBySpecialtyAndServiceQuery=new i(this,()=>{return e=this.apiClient,t={closest_slots_days:2,slots_per_day:7,speciality_id:this.specialty_id?Number(this.specialty_id):void 0,organization_schedule_service_id:this.service_id?this.service_id:void 0},{queryKey:_(e,"professionals-by-specialty-and-service",t),queryFn:t.speciality_id&&t.organization_schedule_service_id?()=>e.schedules.getProfessionalsBySpecialtyAndService(t):je,staleTime:0};var e,t})}static{this.styles=Bi}render(){const e=le(),t=this.getScheduleServicesQuery.result?.data?.find(e=>e.id===this.service_id);if(!this.specialty_id||!this.service_id)return Z;const i=p(t?.code??"",e,t?.name),s=this.getOrganizationSpecialtiesQuery.result?.data?.find(e=>String(e.id)===this.specialty_id)?.name;return this.getProfessionalsBySpecialtyAndServiceQuery.render({pending:()=>Y`<div id="professionals-results"><schedule-loading-banner></schedule-loading-banner></div>`,complete:e=>{const a=e?.data??[],o=!0===e?.meta?.high_demand?Y`<high-demand-callout .specialtyName="${s}"></high-demand-callout>`:Z;if(0===a.length)return Y`${o}<mq-callout background="default" variant="info">${H("No hay profesionales disponibles para la especialidad seleccionada. Por favor, vuelve a intentarlo en otro momento o selecciona otra especialidad.")}</mq-callout>`;const r=a[0],n=r?.slots?.[0];h.track(y(this.patient.hash,this.specialty_id??"",this.service_id??"",n?.starts_at??"",r?.id??"",a.length,a.reduce((e,t)=>e+(t.slots?.length??0),0)));const l=function({professionals:e,serviceName:t,timezone:i}){const s=function(e,t){const[i]=e;if(void 0===i)return;const s=t(i);return e.every(e=>t(e)===s)?i:void 0}(e.flatMap(e=>e.slots??[]).filter(e=>e.duration>0).map(e=>Math.round(e.duration/60)),e=>String(e)),a=C(i,new Date);return[t,void 0===s?void 0:H(K`${s} minutos`),a].filter(e=>Boolean(e))}({professionals:a,serviceName:i,timezone:this.patient?.timezone??""});return Y`<div id="professionals-results"><p class="title">${H("Selecciona tu especialista")}</p><div class="applied-filters"><span class="applied-filters-label" id="applied-filters-label">${H("Resultados para:")}</span> <span class="applied-filters-values" role="group" aria-labelledby="applied-filters-label">${l.map(e=>Y`<mq-badge variant="primary">${e}</mq-badge>`)}</span></div>${o}</div>${a.map(e=>Y`<professional-card .professional="${e}" .serviceId="${this.service_id??""}" .specialtyId="${this.specialty_id??""}" @show-full-schedule="${i=>{i.stopPropagation();const s=this.service_id,a=this.specialty_id;void 0!==t&&void 0!==s&&void 0!==a&&this.dispatchEvent(new ShowFullScheduleEvent({professional:e,serviceId:s,service:t,specialtyId:a,firstAvailableSlotDay:Fi(e.slots,this.patient?.timezone)}))}}"></professional-card>`)}`}})}};e([W({context:s,subscribe:!0})],Oi.prototype,"apiClient",void 0),e([W({context:Re,subscribe:!0})],Oi.prototype,"patient",void 0),e([ee({type:String})],Oi.prototype,"specialty_id",void 0),e([ee({type:String})],Oi.prototype,"service_id",void 0),Oi=e([G(),t("professionals-list")],Oi);const Ti=J`.container{display:flex;flex-direction:column;gap:var(--sp-6)}.page-container{width:100%;box-sizing:border-box;display:flex;flex-direction:column;gap:var(--size-4)}.header-background{background-color:var(--color-neutrals-background-weak);display:flex;justify-content:center;width:100%}.header-container{max-width:var(--content-max-width);margin:0 auto;display:flex;flex-direction:column;gap:var(--size-4);width:100%;box-sizing:border-box}.header-nav{display:flex;align-items:center;justify-content:space-between;width:100%}.title-section{display:flex;flex-direction:column;gap:var(--size-1);align-items:center;width:100%}.title-content{display:flex;flex-direction:column;gap:var(--size-1);align-items:flex-start;padding-bottom:var(--size-2);width:100%;box-sizing:border-box}.main-title{font-family:var(--font-titles);font-size:31px;font-weight:var(--font-weight-bold);line-height:normal;color:var(--color-neutrals-text-default);margin:0;white-space:nowrap}.subtitle{font-family:var(--font-body);font-size:var(--text-base);font-weight:var(--font-weight-normal);line-height:22px;color:var(--color-neutrals-text-default);margin:0;white-space:pre-wrap;min-width:100%;width:min-content}.empty-space{height:32px;width:auto}.banner-container{align-items:flex-start;box-sizing:border-box;display:flex;gap:var(--size-2);padding:var(--size-4) var(--size-2);width:100%;background-color:var(--color-neutrals-background-disabled);color:var(--color-neutrals-text-default);font-family:var(--font-body);font-size:var(--text-sm);line-height:var(--text-sm--line-height);border-radius:var(--border-radius-sm)}.banner-icon{flex-shrink:0;display:flex;align-items:center;justify-content:center}.banner-message{margin:0;white-space:pre-wrap}@media (min-width:768px){.page-container{gap:var(--sp-8)}}`;let Ni=class SuccessEvent extends Event{static{this.eventName="success"}constructor(e){super(SuccessEvent.eventName,{bubbles:!0,composed:!0}),this.detail=e}},Ui=class SelectProfessionalStep extends X{constructor(){super(...arguments),this.showBack=!0,this.defaultSpecialty=void 0,this.defaultService=void 0,this.formData=void 0,this.getScheduleServicesQuery=new i(this,()=>x(this.apiClient)),this.getOrganizationSpecialtiesQuery=new i(this,()=>d(this.apiClient))}static{this.styles=Ti}get isScheduleFiltersReady(){const e=this.getScheduleServicesQuery.result?.isSuccess,t=this.getOrganizationSpecialtiesQuery.result?.isSuccess;return!!e&&!!t}get showSearchForm(){const e=this.getScheduleServicesQuery.result?.data,t=this.getOrganizationSpecialtiesQuery.result?.data;if(!e||!t)return!1;const i=e.length>1||t.length>1;return!(1===e.length&&1===t.length&&!this.formData)&&(i||!this.formData)}updated(){if(this.formData)return;if(this.defaultService&&this.defaultSpecialty)return void(this.formData={service_id:this.defaultService,specialty_id:this.defaultSpecialty});const e=this.getScheduleServicesQuery.result?.data,t=this.getOrganizationSpecialtiesQuery.result?.data;if(e?.length&&t?.length&&1===e.length&&1===t.length){const i=e[0],s=t[0];if(!i||!s)return;this.formData={service_id:i.id,specialty_id:String(s.id)}}}connectedCallback(){super.connectedCallback(),h.track(b(this.patient.hash))}scrollToProfessionalsList(){setTimeout(()=>{this.shadowRoot?.querySelector("professionals-list")?.scrollIntoView({behavior:"smooth"})},0)}render(){return Y`<div class="container"><div class="page-container">${this.showBack?Y`<mq-page-title .title="${H("Petición de cita")}" .showBack="${!0}" @mq-back="${e=>et(this,e)}"></mq-page-title>`:Z} ${this.isScheduleFiltersReady?Z:Y`<schedule-loading-banner></schedule-loading-banner>`} ${this.isScheduleFiltersReady&&this.showSearchForm?Y`<search-professionals-form .defaultValues="${{service:this.formData?.service_id??this.defaultService??"",specialty:this.formData?.specialty_id??this.defaultSpecialty??""}}" @success="${e=>{e.stopPropagation(),this.formData={service_id:e.detail.service,specialty_id:e.detail.specialty},this.scrollToProfessionalsList()}}"></search-professionals-form>`:Z} ${this.isScheduleFiltersReady?Y`<professionals-list .specialty_id="${this.formData?.specialty_id}" .service_id="${this.formData?.service_id}" @selected-slot="${e=>{e.stopPropagation();const t=this.formData;if(!t?.service_id||!t.specialty_id)return;const i=this.getScheduleServicesQuery.result?.data?.find(e=>e.id===t.service_id);this.dispatchEvent(new Ni({slot:e.detail.slot,serviceId:t.service_id,service:i,specialtyId:t.specialty_id,professional:e.detail.professional}))}}"></professionals-list>`:Z}</div></div>`}};function Ri(e,t){return{queryKey:_(e,"schedule-service-professional-slots",t),queryFn:()=>e.schedules.getScheduleServiceProfessionalSlots(t),staleTime:S}}e([W({context:s,subscribe:!0})],Ui.prototype,"apiClient",void 0),e([W({context:Re,subscribe:!0})],Ui.prototype,"patient",void 0),e([ee({type:Boolean})],Ui.prototype,"showBack",void 0),e([ee({type:String})],Ui.prototype,"defaultSpecialty",void 0),e([ee({type:String})],Ui.prototype,"defaultService",void 0),e([te()],Ui.prototype,"formData",void 0),Ui=e([G(),t("select-professional-step")],Ui);const Qi=()=>"undefined"!=typeof window&&window.innerWidth>=Be.mobile?6:4;class SlotSelectEvent extends Event{static{this.eventName="slot-select"}constructor(e){super(SlotSelectEvent.eventName,{bubbles:!0,composed:!0}),this.detail=e}}class SlotUnavailableEvent extends Event{static{this.eventName="slot-unavailable"}constructor(){super(SlotUnavailableEvent.eventName,{bubbles:!0,composed:!0})}}const Wi=J`:host{display:flex;flex-direction:column;gap:var(--sp-4)}.card{overflow-x:auto;padding:var(--sp-4);display:flex;flex-direction:column;gap:var(--sp-4)}.error-message{color:var(--color-error-text-default);font-family:var(--font-body);font-size:var(--text-sm);line-height:var(--text-sm--line-height);margin:0;text-align:center}@media (min-width:768px){.card{padding:var(--sp-8) var(--sp-4)}}`;let Hi=class DaysWindowView extends X{constructor(){super(...arguments),this.specialityId=void 0,this.reschedulingAppointmentId=void 0,this.windowStartDate=void 0,this.errorMessage=void 0,this.specialtyName=void 0,this.checkForSlotAvailabilityMutation=new ue(this,{mutationFn:e=>this.apiClient.schedules.getScheduleSlot({slot_id:e,service_id:this.serviceId||void 0,speciality_id:this.specialityId})}),this._visibleDays=Qi(),this.getScheduleServiceProfessionalSlotsQuery=new i(this,()=>{const e=this.patient.timezone,t=P(new Date,e),i=this.windowStartDay<t?t:this.windowStartDay,s=Fe(Oe(qe(i),this._visibleDays-1),"yyyy-MM-dd");return Ri(this.apiClient,{service_id:this.serviceId,professional_hash:this.professionalId,starts_at:E(I(i,e)),finishes_at:E(M(s,e)),rescheduling_appointment_id:this.reschedulingAppointmentId})})}static{this.styles=Wi}get windowStartDay(){return this.windowStartDate??P(new Date,this.patient.timezone)}connectedCallback(){super.connectedCallback(),this._resizeHandler=()=>{const e=Qi();e!==this._visibleDays&&(this._visibleDays=e,this.requestUpdate())},window.addEventListener("resize",this._resizeHandler)}disconnectedCallback(){super.disconnectedCallback(),this._resizeHandler&&window.removeEventListener("resize",this._resizeHandler)}render(){const e=new Date,t=this.getScheduleServiceProfessionalSlotsQuery.result?.data,i=this.getScheduleServiceProfessionalSlotsQuery.result?.isPending,s=!0===t?.meta?.high_demand,a=t?.data?.filter(t=>Ve($(t.starts_at),e)&&t.status===B.available),o=a?.map(e=>({key:e.id,date:$(e.starts_at).toISOString()})),r=le().replace("_","-");return Y`${s?Y`<high-demand-callout .specialtyName="${this.specialtyName}"></high-demand-callout>`:Z}<mq-card class="card" roundness="md"><mq-button @click="${()=>this.dispatchEvent(new CustomEvent("to-calendar-view"))}">${Le({size:24})} ${H("Elige otra fecha")}</mq-button>${this.errorMessage?Y`<p class="error-message">${this.errorMessage}</p>`:Z}<mq-time-slot-picker .locale="${r}" .timezone="${this.patient.timezone}" .visibleDays="${this._visibleDays}" .slots="${o??[]}" .windowStartDate="${this.windowStartDay}" ?is-loading="${i}" @window-change="${e=>{this.windowStartDate=e.detail.windowStartDate}}" .isLoading="${this.checkForSlotAvailabilityMutation.isPending}" @slot-select="${async e=>{e.stopPropagation();const t=e.detail.slot.key,i=await this.checkForSlotAvailabilityMutation.run(t);i.status===B.available?this.dispatchEvent(new SlotSelectEvent({slot:i})):this.dispatchEvent(new SlotUnavailableEvent)}}"></mq-time-slot-picker></mq-card>`}};e([W({context:s,subscribe:!0})],Hi.prototype,"apiClient",void 0),e([ee({type:String})],Hi.prototype,"professionalId",void 0),e([ee({type:String})],Hi.prototype,"serviceId",void 0),e([ee({type:Number})],Hi.prototype,"specialityId",void 0),e([ee({type:String})],Hi.prototype,"reschedulingAppointmentId",void 0),e([ee({type:String})],Hi.prototype,"windowStartDate",void 0),e([ee({type:String,attribute:"error-message"})],Hi.prototype,"errorMessage",void 0),e([ee({type:String})],Hi.prototype,"specialtyName",void 0),e([W({context:Re,subscribe:!0})],Hi.prototype,"patient",void 0),Hi=e([G(),t("days-window-view")],Hi);const Ki=J`:host{display:flex;flex-direction:column;gap:var(--sp-4);max-width:var(--content-max-width);margin:0 auto}`;let Gi=class CalendarView extends X{constructor(){super(...arguments),this.reschedulingAppointmentId=void 0,this.initialDate=void 0,this.specialtyName=void 0,this.currentMonth=void 0,this.getScheduleServiceProfessionalSlotsQuery=new i(this,()=>{const e=this.patient.timezone,t=P(new Date,e),i=Fe(De(this.displayedMonth),"yyyy-MM-dd"),s=i<t?t:i,a=Fe(ze(qe(s)),"yyyy-MM-dd");return Ri(this.apiClient,{service_id:this.serviceId,professional_hash:this.professionalId,starts_at:E(I(s,e)),finishes_at:E(M(a,e)),rescheduling_appointment_id:this.reschedulingAppointmentId})})}static{this.styles=Ki}get displayedMonth(){return this.currentMonth??qe(this.initialDate??P(new Date,this.patient.timezone))}render(){const e=new Date,t=this.getScheduleServiceProfessionalSlotsQuery.result?.data,i=this.getScheduleServiceProfessionalSlotsQuery.result?.isPending,s=!0===t?.meta?.high_demand,a=t?.data?.filter(t=>Ve($(t.starts_at),e)&&t.status===B.available),o=a&&a.length>0?Array.from(new Set(a.map(e=>P($(e.starts_at),this.patient.timezone)))):void 0,r=le().replace("_","-");return Y`${s?Y`<high-demand-callout .specialtyName="${this.specialtyName}"></high-demand-callout>`:Z}<mq-calendar locale="${r}" ?is-loading="${i}" .timezone="${this.patient.timezone}" .currentMonth="${this.displayedMonth.toISOString()}" .availableDays="${o}" @prev-month="${e=>{this.currentMonth=new Date(e.detail.currentMonth)}}" @next-month="${e=>{this.currentMonth=new Date(e.detail.currentMonth)}}"></mq-calendar>`}};e([W({context:s,subscribe:!0})],Gi.prototype,"apiClient",void 0),e([ee({type:String})],Gi.prototype,"professionalId",void 0),e([ee({type:String})],Gi.prototype,"serviceId",void 0),e([ee({type:String})],Gi.prototype,"reschedulingAppointmentId",void 0),e([ee({type:String})],Gi.prototype,"initialDate",void 0),e([ee({type:String})],Gi.prototype,"specialtyName",void 0),e([W({context:Re,subscribe:!0})],Gi.prototype,"patient",void 0),e([te()],Gi.prototype,"currentMonth",void 0),Gi=e([t("calendar-view")],Gi);class SuccessEvent extends Event{static{this.eventName="success"}constructor(e){super(SuccessEvent.eventName,{bubbles:!0,composed:!0}),this.detail=e}}const Zi=J`:host{display:flex;flex-direction:column;gap:var(--sp-6)}.content{display:flex;flex-direction:column;gap:var(--sp-4)}calendar-view{width:100%}days-window-view{width:100%}@media (min-width:768px){.content{flex-direction:row;gap:var(--sp-6)}new-appointment-summary{width:50%}days-window-view{width:50%}calendar-view{width:50%}}`;let Ji=class SelectSlotStep extends X{constructor(){super(...arguments),this.kind="schedule",this.showBack=!0,this.reschedulingAppointmentId=void 0,this.startsAt=void 0,this.duration=void 0,this.channel=void 0,this.errorMessage=void 0,this.initialDate=void 0,this.service=void 0,this.appliedDiscount=null,this.getScheduleServiceSpecialitiesQuery=new i(this,()=>{return e=this.apiClient,t=this.serviceId,i={enabled:!!this.serviceId},{queryKey:_(e,"schedule-service-specialities",t),queryFn:()=>e.schedules.getScheduleServiceSpecialities(t),staleTime:S,...i};var e,t,i}),this.getOrganizationSpecialtiesQuery=new i(this,()=>d(this.apiClient)),this.view="days-window",this.windowStartDate=void 0}static{this.styles=Zi}get specialtyName(){const e=this.professional?.speciality?.id;if(e)return this.getOrganizationSpecialtiesQuery.result?.data?.find(t=>t.id===e)?.name}connectedCallback(){super.connectedCallback(),this.initialDate&&(this.windowStartDate=this.initialDate)}renderView(){return"days-window"===this.view?Y`<days-window-view .errorMessage="${this.errorMessage}" .professionalId="${this.professionalId}" .serviceId="${this.serviceId}" .specialityId="${this.professional?.speciality?.id}" .reschedulingAppointmentId="${this.reschedulingAppointmentId}" .specialtyName="${this.specialtyName}" .windowStartDate="${this.windowStartDate}" @to-calendar-view="${()=>{this.view="calendar"}}" @slot-select="${e=>{this.dispatchEvent(new SuccessEvent({slot:e.detail.slot}))}}" @slot-unavailable="${()=>{this.errorMessage=H("Este horario no está disponible. Por favor, seleccione otro."),this.queryClientContext?.invalidateQueries({queryKey:_(this.apiClient)})}}"></days-window-view>`:Y`<calendar-view .professionalId="${this.professionalId}" .serviceId="${this.serviceId}" .reschedulingAppointmentId="${this.reschedulingAppointmentId}" .specialtyName="${this.specialtyName}" .initialDate="${this.initialDate}" @date-select="${e=>{this.windowStartDate=Fe(new Date(e.detail.date),"yyyy-MM-dd"),this.view="days-window"}}"></calendar-view>`}render(){const e=this.getScheduleServiceSpecialitiesQuery.result?.data?.find(e=>e.id===this.professional?.speciality?.id)?.price??null;return Y`<mq-page-title .title="${"schedule"===this.kind?H("Petición de cita"):H("Modificar cita")}" .showBack="${this.showBack}" @mq-back="${e=>et(this,e)}"></mq-page-title><div class="content"><new-appointment-summary .professional="${this.professional}" .channel="${this.channel}" .startsAt="${this.startsAt}" .duration="${this.duration}" .serviceCode="${this.service?.code}" .serviceName="${this.service?.name}" .servicePrice="${e}" .appliedDiscount="${this.appliedDiscount}" .showPrice="${"reschedule"!==this.kind}"></new-appointment-summary>${this.renderView()}</div>`}};e([W({context:s,subscribe:!0})],Ji.prototype,"apiClient",void 0),e([ee({type:String})],Ji.prototype,"kind",void 0),e([ee({type:Boolean})],Ji.prototype,"showBack",void 0),e([ee({type:String})],Ji.prototype,"serviceId",void 0),e([ee({type:String})],Ji.prototype,"professionalId",void 0),e([ee({type:String})],Ji.prototype,"reschedulingAppointmentId",void 0),e([ee({type:Object})],Ji.prototype,"professional",void 0),e([ee({type:String})],Ji.prototype,"startsAt",void 0),e([ee({type:Number})],Ji.prototype,"duration",void 0),e([ee({type:String})],Ji.prototype,"channel",void 0),e([ee({type:String,attribute:"error-message"})],Ji.prototype,"errorMessage",void 0),e([ee({type:String})],Ji.prototype,"initialDate",void 0),e([ee({type:Object})],Ji.prototype,"service",void 0),e([ee({type:Object})],Ji.prototype,"appliedDiscount",void 0),e([W({context:Ee,subscribe:!0})],Ji.prototype,"queryClientContext",void 0),e([te()],Ji.prototype,"view",void 0),e([te()],Ji.prototype,"windowStartDate",void 0),Ji=e([G(),t("select-slot-step")],Ji);let Xi=class SelectSlotStepSkeleton extends X{constructor(){super(...arguments),this.showTitle=!0}static{this.styles=J`:host{display:flex;flex-direction:column;gap:var(--sp-6)}.page-title-skeleton{display:flex;align-items:center;gap:var(--sp-3);margin-bottom:var(--sp-4)}.content{display:flex;flex-direction:column;gap:var(--sp-4)}.block{width:100%;display:flex;flex-direction:column;gap:var(--sp-4)}@media (min-width:768px){.page-title-skeleton{gap:var(--sp-6)}.content{flex-direction:row;gap:var(--sp-6)}.block{width:50%}}`}render(){return Y`${this.showTitle?Y`<div class="page-title-skeleton"><mq-skeleton width="var(--size-10)" height="var(--size-10)"></mq-skeleton><mq-skeleton width="120px" height="var(--size-6)"></mq-skeleton></div>`:Z}<div class="content"><div class="block"><mq-skeleton width="100%" height="190px"></mq-skeleton></div><div class="block"><mq-skeleton width="100%" height="317px"></mq-skeleton></div></div>`}};function Yi(e){return{id:e.id,name:e.name,avatar:e.avatar,description:e.description,collegiate_number:e.collegiate_number,languages:e.languages,speciality:e.speciality}}e([ee({type:Boolean,attribute:"show-title"})],Xi.prototype,"showTitle",void 0),Xi=e([t("select-slot-step-skeleton")],Xi),de();class AppointmentCreatedEvent extends Event{static{this.eventName="appointment-created"}constructor(e){super(AppointmentCreatedEvent.eventName,{bubbles:!0,composed:!0}),this.detail=e}}let es=class MqSchedule extends X{constructor(){super(...arguments),this.requiresPayment=!0,this.showBackButton=!0,this.googlePayEnabled=!1,this.applePayEnabled=!1,this.stripeRedirect=!1,this._patient=new R(this,{context:Re,initialValue:{hash:"",name:"",timezone:"UTC"}}),this.apiClient=O(),this._emittedCreated=!1,this._organizationChanged=!1,this.getAppointmentQuery=new i(this,()=>o(this.apiClient,{id:this.appointmentId??""},{enabled:!!this.appointmentId})),this.getProfessionalQuery=new i(this,()=>{return e=this.apiClient,t={hash:this.defaultProfessionalHash??""},i={enabled:!!this.defaultProfessionalHash},{queryKey:_(e,"professional-public-profile",t.hash),queryFn:()=>e.profile.getProfessionalPublicProfile(t),staleTime:S,...i};var e,t,i}),this.getScheduleSlotQuery=new i(this,()=>{const e=this._current(this.getScheduleServicesQuery.result)?.data,t=this._current(this.getOrganizationSpecialtiesQuery.result)?.data;return i=this.apiClient,s={slot_id:this.defaultSlotId??"",service_id:We(this.defaultService,e)?.id,speciality_id:Qe(this.defaultSpecialty,t)},a={enabled:!!(this.defaultSlotId&&this.token&&e&&t)},{queryKey:_(i,"schedules","slot",s.slot_id,s.service_id,s.speciality_id),queryFn:()=>i.schedules.getScheduleSlot(s),staleTime:S,...a};var i,s,a}),this.getPatientProfileQuery=new i(this,()=>w(this.apiClient,{enabled:!!this.token})),this.getOrganizationSpecialtiesQuery=new i(this,()=>d(this.apiClient)),this.getScheduleServicesQuery=new i(this,()=>x(this.apiClient)),this.getOrganizationSetupQuery=new i(this,()=>r(this.apiClient,{enabled:"reschedule"===this.kind}))}static{this.styles=J`.reschedule-policy-blocked{padding:var(--sp-6);display:flex;flex-direction:column;gap:var(--sp-4);max-width:36rem;margin:0 auto}.reschedule-policy-blocked p{margin:0;font-family:var(--font-body);font-size:var(--text-sm);line-height:var(--text-sm--line-height)}`}willUpdate(e){e.has("env")&&this.env&&ne(this.env);const t=e.has("apiKey")&&void 0!==e.get("apiKey");t&&(this._wizard&&this.removeController(this._wizard),this._wizard=void 0,this._emittedCreated=!1),this._organizationChanged=t,e.has("locale")&&this.locale&&ce(this.locale)&&pe(this.locale);const i=T(e,{env:this.env,apiKey:this.apiKey,token:this.token,locale:this.locale},this.inheritedApiClient);i&&(this.apiClient=i);const s=this.getPatientProfileQuery.result?.data;this._patient.setValue({hash:s?.hash??"",name:N(s),timezone:A(this.timezone,this.loginToken?.patient?.timezone)})}_current(e){return this._organizationChanged?void 0:e}_initWizard(e,t,i){return this._wizard||(this._wizard=new Ne(this,e,t),i&&this._wizard.goTo(i)),this._wizard}_stepHandlers(e){return{next:t=>e.next(t),goTo:(t,i,s)=>e.goTo(t,i,s),back:()=>{e.back()||this.dispatchEvent(new V({source:"mq-schedule"}))},update:t=>e.reconcile(t),onCreated:e=>{this._emittedCreated||(this._emittedCreated=!0,this.dispatchEvent(new AppointmentCreatedEvent({appointmentId:e})))},onAuthRequired:e=>{this.dispatchEvent(new AuthRequiredEvent(e))}}}_hostConfig(){const e=this.getPatientProfileQuery.result?.data;return{apiKey:this.apiKey,token:this.token,env:this.env,locale:this.locale,countryCode:e?.profile.billing.country_code??void 0,successUrl:this.applePaySuccessUrl,returnUrl:this.returnUrl,googlePayEnabled:this.googlePayEnabled,applePayEnabled:this.applePayEnabled,stripeRedirect:this.stripeRedirect}}_renderStep(e,t){const i=e.canGoBack||this.showBackButton;return Ue(this.apiKey??"",function(e,t,i,s,a,o){const r=H("No se ha podido reservar este horario. Por favor, seleccione otro."),n=s?{id:s.from.hash,name:s.from.name??"",avatar:s.from.avatar,description:s.from.description,collegiate_number:s.from.collegiate_number,languages:s.from.languages,speciality:{id:s.speciality_id??0}}:void 0,l=t.professional??n,{showBack:d,isAuthenticated:c}=a;if("selectProfessional"===e)return Y`<select-professional-step .showBack="${d}" .defaultSpecialty="${t.specialty}" .defaultService="${t.service?.id}" @show-full-schedule="${e=>{i.goTo("selectSlot",{service:e.detail.service,specialty:e.detail.specialtyId,professional:Yi(e.detail.professional),firstAvailableSlotDay:e.detail.firstAvailableSlotDay,appliedDiscount:void 0,error:!1})}}" @back="${i.back}" @success="${e=>{const t=e.detail.service;t&&(c?i.goTo("completeProfile",{slot:e.detail.slot,service:t,specialty:e.detail.specialtyId,professional:Yi(e.detail.professional),appliedDiscount:void 0,error:!1}):i.onAuthRequired({professionalHash:e.detail.professional.id,slotId:e.detail.slot.id,serviceId:t.id,specialtyId:e.detail.specialtyId}))}}"></select-professional-step>`;if("selectSlot"===e){if(s){const e=s.service_id;return e&&n?Y`<select-slot-step kind="reschedule" .showBack="${d}" .errorMessage="${t.error?r:void 0}" .serviceId="${e}" .reschedulingAppointmentId="${s.id}" .professionalId="${s.from.hash}" .professional="${n}" .startsAt="${s.start_date}" .duration="${s.duration}" .channel="${s.channel}" @back="${i.back}" @success="${e=>{i.next({slot:e.detail.slot,appliedDiscount:void 0,error:!1})}}"></select-slot-step>`:Z}if(!l)return Z;const e=t.service;return e?Y`<select-slot-step kind="schedule" .showBack="${d}" .errorMessage="${t.error?r:void 0}" .serviceId="${e.id}" .service="${e}" .professionalId="${l.id}" .professional="${l}" .initialDate="${t.firstAvailableSlotDay}" .appliedDiscount="${t.appliedDiscount??null}" @back="${i.back}" @discount-applied="${e=>i.update({appliedDiscount:e.detail})}" @success="${s=>{c?i.next({slot:s.detail.slot,error:!1}):i.onAuthRequired({professionalHash:l.id,slotId:s.detail.slot.id,serviceId:e.id,specialtyId:t.specialty})}}"></select-slot-step>`:Y`<select-slot-step-skeleton></select-slot-step-skeleton>`}if("completeProfile"===e){const e=t.slot;return s?e&&s.service_id&&n?Y`<complete-profile-step .showBack="${d}" .serviceId="${s.service_id}" .channel="${s.channel}" .scheduleSlot="${e}" .professional="${l??n}" @back="${i.back}" @success="${()=>i.next()}"></complete-profile-step>`:Z:e&&l&&t.service?Y`<complete-profile-step .showBack="${d}" .serviceId="${t.service.id}" .channel="${t.service.channel??t.slot?.channel}" .scheduleSlot="${e}" .professional="${l}" @back="${i.back}" @success="${()=>i.next()}"></complete-profile-step>`:Z}if("confirm"===e){const e=t.slot;return s?e&&s.service_id&&n?Y`<confirm-step kind="reschedule" .showBack="${d}" .scheduleSlot="${e}" .professional="${n}" .serviceId="${s.service_id}" .specialityId="${s.speciality_id?.toString()??""}" .startsAt="${e.starts_at}" .duration="${s.duration}" .appointment="${s}" .requiresPayment="${!1}" @back="${i.back}" @success="${e=>i.onCreated(e.detail.appointmentId)}" @error="${()=>i.goTo("selectSlot",{error:!0},{replace:!0})}"></confirm-step>`:Z:e&&l&&t.service?Y`<confirm-step kind="schedule" .showBack="${d}" .scheduleSlot="${e}" .professional="${l}" .serviceId="${t.service.id}" .specialityId="${t.specialty??""}" .service="${t.service}" .startsAt="${e.starts_at}" .duration="${e.duration}" .channel="${t.service.channel??t.slot?.channel}" .requiresPayment="${t.requiresPayment}" .appliedDiscount="${t.appliedDiscount??null}" .returnUrl="${o?.returnUrl}" @back="${i.back}" @success="${e=>i.onCreated(e.detail.appointmentId)}" @discount-applied="${e=>i.update({appliedDiscount:e.detail})}" @payment-started="${e=>{i.next({paymentSessionId:e.detail.sessionId,paymentUrl:e.detail.paymentUrl,paymentRequest:e.detail.request,paymentProvider:e.detail.provider})}}" @error="${()=>i.goTo("selectSlot",{error:!0},{replace:!0})}"></confirm-step>`:Z}if("payment"===e){const e=t.paymentSessionId,s=t.paymentUrl,r=l,n=t.slot;return e&&r&&n?Y`<payment-step .showBack="${d}" .sessionId="${e}" .paymentUrl="${s??""}" .professional="${r}" .startsAt="${n.starts_at}" .duration="${n.duration}" .channel="${t.service?.channel??n.channel}" .service="${t.service}" .scheduleSlot="${n}" .appliedDiscount="${t.appliedDiscount??null}" .bookingRequest="${t.paymentRequest??null}" .provider="${t.paymentProvider}" .apiKey="${o?.apiKey}" .token="${o?.token}" .env="${o?.env??"production"}" .locale="${o?.locale??"es_ES"}" .countryCode="${o?.countryCode??"ES"}" .successUrl="${o?.successUrl}" .googlePayEnabled="${o?.googlePayEnabled??!1}" .applePayEnabled="${o?.applePayEnabled??!1}" .stripeRedirect="${o?.stripeRedirect??!1}" @back="${i.back}" @success="${e=>i.onCreated(e.detail.appointmentId)}" @discount-applied="${async e=>{if(i.update({appliedDiscount:e.detail}),Ye(e.detail))return;const s=t.paymentRequest;if(!s)return;const o={...s,discount_code:e.detail.code};try{const e=await a.apiClient.payments.createPaymentLink(o);i.update({paymentSessionId:e.session_id,paymentUrl:e.payment_link,paymentRequest:o,paymentProvider:e.provider,error:!1})}catch{i.update({error:!0}),i.back()}}}" @payment-success="${e=>i.onCreated(e.detail.appointmentId)}" @payment-retry="${async e=>{const s=t.paymentRequest;if(!s)return i.update({error:!0}),void i.back();try{const e=await a.apiClient.payments.createPaymentLink(s);i.update({paymentSessionId:e.session_id,paymentUrl:e.payment_link,paymentProvider:e.provider,error:!1})}catch{i.update({error:!0}),i.back()}}}" @error="${()=>{i.update({error:!0}),i.back()}}"></payment-step>`:Z}return Z}(e.current,e.ctx,this._stepHandlers(e),t,{showBack:i,isAuthenticated:!!this.token,apiClient:this.apiClient},this._hostConfig()))}renderReschedulePolicyBlocked(){return Y`<div class="reschedule-policy-blocked"><p>${H("Esta cita ya no se puede modificar ni anular: no queda el tiempo mínimo requerido antes del inicio.")}</p><mq-button variant="primary" @click="${()=>this.dispatchEvent(new V({source:"mq-schedule"}))}">${H("Volver")}</mq-button></div>`}render(){const e=Y`<select-slot-step-skeleton .showTitle="${!1}"></select-slot-step-skeleton>`;if(this.token&&this.getPatientProfileQuery.result?.isPending)return e;const t=!!this.getPatientProfileQuery.result?.data&&U(this.getPatientProfileQuery.result.data);if("reschedule"===this.kind){const i=this._current(this.getAppointmentQuery.result),s=this._current(this.getOrganizationSetupQuery.result);if(i?.isPending||s?.isPending)return e;const a=i?.data;if(!a)return e;const o=s?.data?.appointments?.seconds_before_start_to_refund_on_cancel;if(!q({startsAtIso:a.start_date,refundPolicySeconds:o}))return this.renderReschedulePolicyBlocked();const r=function(e){const{appointment:t}=e,i={id:t.from.hash,name:t.from.name??"",avatar:t.from.avatar,description:t.from.description,collegiate_number:t.from.collegiate_number,languages:t.from.languages,speciality:{id:t.speciality_id??0}};return{service:void 0,specialty:t.speciality_id?.toString(),slot:void 0,professional:i,firstAvailableSlotDay:void 0,paymentSessionId:void 0,paymentUrl:void 0,paymentProvider:void 0,paymentRequest:void 0,appliedDiscount:void 0,profileComplete:e.profileComplete,requiresPayment:!1,error:!1}}({appointment:a,profileComplete:t}),n=this._initWizard(Xe,r);return n.reconcile({profileComplete:t}),this._renderStep(n,a)}if(this.defaultProfessionalHash){const i=this._current(this.getProfessionalQuery.result);if(!i||i.isPending)return e;const s=!!this.defaultSlotId&&!!this.token,a=this._current(this.getScheduleSlotQuery.result);if(s&&(!a||a.isPending))return e;const o=s?a?.data:void 0,r="available"===o?.status,n=s&&r,l=He({defaultSpecialty:this.defaultSpecialty,defaultService:this.defaultService,defaultProfessionalHash:this.defaultProfessionalHash,specialties:this._current(this.getOrganizationSpecialtiesQuery.result)?.data,services:this._current(this.getScheduleServicesQuery.result)?.data,professional:i.data,profileComplete:t,requiresPayment:this.requiresPayment}),d=this._initWizard(Je,{...l,slot:r?o:void 0,error:s&&!r},n?"completeProfile":void 0);return d.reconcile({profileComplete:t,service:l.service??d.ctx.service,professional:l.professional??d.ctx.professional,specialty:d.ctx.specialty??l.specialty,slot:d.ctx.slot??(r?o:void 0)}),this._renderStep(d,void 0)}const i=He({defaultSpecialty:this.defaultSpecialty,defaultService:this.defaultService,defaultProfessionalHash:void 0,specialties:this._current(this.getOrganizationSpecialtiesQuery.result)?.data,services:this._current(this.getScheduleServicesQuery.result)?.data,professional:void 0,profileComplete:t,requiresPayment:this.requiresPayment}),s=this._initWizard(Ze,i);return s.reconcile({profileComplete:t,service:i.service??s.ctx.service,specialty:s.ctx.specialty??i.specialty}),this._renderStep(s,void 0)}};e([ee({type:String,attribute:"default-specialty"})],es.prototype,"defaultSpecialty",void 0),e([ee({type:String,attribute:"default-service"})],es.prototype,"defaultService",void 0),e([ee({type:String,attribute:"default-professional-hash"})],es.prototype,"defaultProfessionalHash",void 0),e([ee({type:String,attribute:"default-slot-id"})],es.prototype,"defaultSlotId",void 0),e([ee({type:String,attribute:"kind"})],es.prototype,"kind",void 0),e([ee({type:Boolean,attribute:"requires-payment"})],es.prototype,"requiresPayment",void 0),e([ee({type:String,attribute:"appointment-id"})],es.prototype,"appointmentId",void 0),e([ee({type:Boolean,attribute:"show-back-button",converter:{fromAttribute:e=>null===e||"false"!==e&&"0"!==e,toAttribute:e=>e?"":"false"}})],es.prototype,"showBackButton",void 0),e([ee({type:String,attribute:"api-key"})],es.prototype,"apiKey",void 0),e([ee({type:String,attribute:"token"})],es.prototype,"token",void 0),e([ee({type:String,attribute:"locale"})],es.prototype,"locale",void 0),e([ee({type:String,attribute:"env"})],es.prototype,"env",void 0),e([ee({type:String,attribute:"apple-pay-success-url"})],es.prototype,"applePaySuccessUrl",void 0),e([ee({type:String,attribute:"return-url"})],es.prototype,"returnUrl",void 0),e([ee({type:Boolean,attribute:"google-pay-enabled"})],es.prototype,"googlePayEnabled",void 0),e([ee({type:Boolean,attribute:"apple-pay-enabled"})],es.prototype,"applePayEnabled",void 0),e([ee({type:Boolean,attribute:"stripe-redirect"})],es.prototype,"stripeRedirect",void 0),e([ee({type:String,attribute:"timezone"})],es.prototype,"timezone",void 0),e([W({context:a,subscribe:!0})],es.prototype,"loginToken",void 0),e([W({context:s,subscribe:!0}),te()],es.prototype,"inheritedApiClient",void 0),e([Q({context:s}),te()],es.prototype,"apiClient",void 0),es=e([G(),t("mq-schedule")],es);export{AppointmentCreatedEvent as A,es as M,AuthRequiredEvent as a};
@@ -1 +0,0 @@
1
- import{_ as t,c as e}from"./custom-element-D2ziPxYE.js";import{m as a,s as i}from"./runtime-Bg1WXVCx.js";import{l as o}from"./localized-decorator-BlOuLhym.js";import{i as s,a as r,x as n,E as l}from"./lit-element-DiWJYFwC.js";import{n as d}from"./property-scuRaFcM.js";import{r as p}from"./state-LQivXIgA.js";import{getLocale as m}from"../i18n.js";import{chevronDownIcon as c}from"../ui/icons/chevron-down-icon.js";import"../ui/mq-text-button.js";import"../ui/mq-avatar.js";const f=s`.header{display:flex;align-items:center;gap:var(--sp-4);margin-bottom:0}.header.expanded{margin-bottom:var(--sp-4)}@media (max-width:768px){.header{--avatar-size-lg:var(--avatar-size-md)}}.professional-info{flex:1}.professional-name{font-family:var(--font-titles);font-size:var(--text-lg);line-height:var(--text-lg--line-height);font-weight:var(--font-weight-bold);color:var(--color-neutrals-text-default);margin:0}.professional-specialty{font-family:var(--font-body);font-size:var(--text-sm);line-height:var(--text-sm--line-height);font-weight:var(--font-weight-normal);color:var(--color-neutrals-text-default);margin:0}.collegiate-number{font-family:var(--font-body);font-size:var(--text-xs);line-height:var(--text-xs--line-height);color:var(--color-neutrals-text-medium);margin:0;text-transform:uppercase}.languages{display:flex;flex-wrap:wrap;gap:var(--sp-3)}.language-pill{display:inline-block;background-color:var(--color-background-light,#f8f7fa);color:var(--color-neutrals-text-medium);font-family:var(--font-body);font-size:var(--text-xs);line-height:var(--text-xs--line-height);font-weight:var(--font-weight-medium);padding:var(--sp-1) var(--sp-2);min-width:64px;text-align:center;border-radius:26px;text-transform:capitalize;letter-spacing:1px}.description{font-family:var(--font-body);font-size:var(--text-sm);line-height:var(--text-sm--line-height);font-weight:var(--font-weight-normal);margin-bottom:0;color:var(--color-neutrals-text-default)}.icon{transition:transform .1s ease-in-out}.rotate-180{transform:rotate(180deg)}.details{display:grid;grid-template-rows:0fr;transition:grid-template-rows .2s ease-out;overflow:hidden}.details[data-expanded=true]{grid-template-rows:1fr}.details-content{overflow:hidden}.details-content>:not(:first-child){margin-top:var(--sp-3)}@media (min-width:769px){:host([always-expanded-on-desktop]) .details{grid-template-rows:1fr}:host([always-expanded-on-desktop]) mq-text-button{display:none}:host([always-expanded-on-desktop]) .header{margin-bottom:var(--sp-4)}}`;let g=class ProfessionalOverview extends r{constructor(){super(...arguments),this.alwaysExpandedOnDesktop=!1,this.detailsExpanded=!1}static{this.styles=f}render(){const t=m().replace("_","-"),e=this.languages.map(e=>n`<span class="language-pill">${new Intl.DisplayNames(t,{type:"language"}).of(e)}</span>`);return n`<div class="header ${this.detailsExpanded?"expanded":""}"><mq-avatar src="${this.avatar}" fallback="${this.name}" alt="${this.name}" size="lg"></mq-avatar><div class="professional-info"><h2 class="professional-name">${this.name}</h2>${this.specialtyName?n`<p class="professional-specialty">${this.specialtyName}</p>`:l}<mq-text-button type="button" size="sm" fontWeight="bold" @click="${()=>{this.detailsExpanded=!this.detailsExpanded}}">${this.detailsExpanded?a("Ocultar detalles"):a("Ver detalles")} ${c({size:24,className:"icon "+(this.detailsExpanded?"rotate-180":"")})}</mq-text-button></div></div><div class="details" data-expanded="${this.detailsExpanded}"><div class="details-content"><div class="languages">${e}</div>${this.collegiateNumber?n`<p class="collegiate-number">${a(i`Nº COL. ${this.collegiateNumber}`)}</p>`:l}<p class="description">${this.description}</p></div></div>`}};t([d({type:String})],g.prototype,"name",void 0),t([d({type:String})],g.prototype,"specialtyName",void 0),t([d({type:String})],g.prototype,"collegiateNumber",void 0),t([d({type:String})],g.prototype,"description",void 0),t([d({type:Array})],g.prototype,"languages",void 0),t([d({type:String})],g.prototype,"avatar",void 0),t([d({type:Boolean,reflect:!0,attribute:"always-expanded-on-desktop"})],g.prototype,"alwaysExpandedOnDesktop",void 0),t([p()],g.prototype,"detailsExpanded",void 0),g=t([o(),e("professional-overview")],g);export{g as P};
@@ -1 +0,0 @@
1
- import{s as a}from"./runtime-Bg1WXVCx.js";const e={s0043fc30b467bc43:"Ocultar detalhes",s00c8bf60a179e056:"O Google Pay não está disponível. Tente com cartão ou outro método de pagamento.",s035706a468d0c40b:"Viernes",s0520ac0a7da193d4:"Não foi possível validar o código. Tente novamente.",s071bd6bbf6c08f34:"Carregando",s08404262212123ef:"Como posso ajudar-te?",s08fe5307b5987c42:"De",s08fe5907b5988674:"Do",s09165307b5ad0e23:"Mi",s09165b07b5ad1bbb:"Ma",s09195307b5af43fa:"Lu",s092e4f07b5c19938:"Ju",s093b3307b5cbf400:"Vi",s09462f07b5d5f4b9:"Sa",s09528d5c26b62213:"Jueves",s0aaec824f7c6b501:"Enviar mensagem",s0b0085a15991b134:"Reconectando...",s0b0955208f737a86:"O arquivo excede o tamanho máximo permitido",s0eb69642cbc19745:"Esta consulta já passou, pelo que não pode ser modificada.",s0fc7c4bfd185800d:"Aqui vai ver as suas receitas e relatórios médicos.",s0fcbdef9dc977231:"Ocorreu um erro ao carregar a página. Por favor, tente novamente ou contacte o suporte.",s11605fc03de64e14:"Escreve aqui...",s12f171594a5379d2:"Tem certeza que deseja cancelar esta consulta?",s132e84f499a23985:"Não há horários disponíveis atualmente",s13317a76a9ed776e:"Repetir",s142eba34d93fe59e:"Descrição",s1513f3687bfcac96:"Domingo",s1a0efa6ac51e8a85:"Página anterior",s1a874fc38d0fcef0:"Ordem médica",s1d318e9d0ccba86b:"Chat",s1ee6d7e6d04932a4:"O email não é válido",s1fe8bb7f6ae07f9b:"Não tens consultas no histórico",s219b833c5ca095b3:"Aqui você verá todas as consultas que você teve. Pode acessar os documentos de cada consulta e reagendar uma consulta se necessário.",s22cf91a84fba4c4e:"Quando você agenda uma consulta, aparecerá aqui para que você possa consultá-la, modificá-la ou cancelá-la.",s238c3ed6d3ecc66a:"Fechar",s24b59d5a129dc0d0:"Não foi possível cancelar a consulta. Tenta novamente.",s255bf4de23c83482:"Condições de reserva:",s256189bafbcd2e34:"O telefone não é válido",s27e462e9f48eb3a6:"Documentação",s2a1d212b3cb5c1a1:"Pode chatear com o profissional até 48 horas após a sua consulta",s2aa2c19d07591438:"Vai receber um lembrete 15 minutos antes da consulta",s2aab27b26a86469f:"Motivo da consulta",s2b9fde9a5739d2a0:"Nome",s2bb20b2162a18938:"Por que precisa da consulta?",s2d6183fa992e10e9:"Este profissional não tem horários disponíveis",s2ebd846b5a30f9d1:"Lamentamos, não foi possível repetir a sua consulta. Por favor, contacte o suporte.",s30c9095a2e07d929:"Sala de espera",s31219c9bdeb7bc3e:"Continuar",s337e34cd11150eb6:"Ver as minhas consultas",s346d488070fe4cc8:"Pedir consulta",s3944638e633d719a:"Consulta",s3b77baf6a4864231:"Erro desconhecido",s3bd87e3e21b07900:"Espere enquanto a conexão é restabelecida",s3dc6584e403858df:"Não conseguimos carregar a sua documentação",s3f55bc3bfec41a5d:"Anexar arquivos",s4177fe7f5d70fd33:"Voltar",s41826ac201c3cd85:"Não foi possível abrir o chat com suporte",s4364d4be7641e15f:"Confirmar consulta",s43e5edcc8801e9a4:"Perfil de profesional",s47afb8f6895a937b:a`A procura de consultas em ${0} é elevada neste momento, pelo que os tempos de espera podem ser superiores ao habitual.`,s4813ee5d305442e5:"Parece que não encontramos-te na hora da sua consulta. Pode programar outra consulta para resolver as suas dúvidas.",s49683919cdaeca83:"Hoje",s4a061033615c8016:"Documentos",s4a8494821c987a17:"Relatório",s4a8f1fcd3f5e5952:"Ainda não é hora!",s4d20157b5a655e70:"Este horário não está disponível. Por favor, selecione outro.",s4de424f531892818:"Ir para videoconferência",s51c461d40f9fb865:"Seleciona o seu especialista",s536a0b4d3d4a5d9f:"Não conseguimos carregar a sua próxima consulta",s53d957dda6cc200b:"Serviço e plataforma prestados por",s53e2497bf900c7fd:"Não tens consultas próximas",s5558a2e389d04223:"Modificar",s55c5126e99bae190:"Buscar disponibilidade",s563dcbfd432eb18f:"Cancelar consulta",s57e65113a89160cf:"Modalidade da consulta",s59612eaa6993aa7e:a`${0} minutos`,s5eef402d73eecbdc:"Anexar arquivo",s5f7956aacb5c6ca2:"A verificar Google Pay…",s5f817b8841b188d2:"Mais opções",s631f73a10d156b22:"Consulta expirada",s63f7af84683dd7c3:"Esta consulta já não pode ser modificada ou cancelada: o tempo mínimo requerido antes do início já passou.",s643155d1b6ee1684:"Tente novamente dentro de alguns minutos.",s64b78a5026d4ce8d:"Não há horários disponíveis",s65bedc0e516977d9:"Sábado",s679be6312356a21c:"Agende uma consulta médica quando você precisar. Aqui você verá todos os detalhes e poderá gerenciar as suas consultas próximas.",s67f30f9f4ea881f3:"Este código não é válido.",s6a50fd7f52263b04:"Não foi possível voltar à sala de espera",s6ab6fcd87fdbf217:"Olá",s6b1c4fb634461e7c:"Mês anterior",s6b6fa877ec1e6968:"Chatear com o profissional",s6c81d42670932f93:"Atualizar",s6e2423db05f36856:"Pedido de consulta",s6ecdc22accc55af7:"Videochamada",s70258a0040dd9e19:"Voltar à sala de espera",s718177442a7447b2:"Consulta com um especialista em menos de 72 horas",s733b3bf647b7b0fa:"Aceita os permissões de câmara e microfone",s73cad78d8a3c39c2:"Prescrição",s74d7a739b6ab651d:"Histórico",s757fef148e0c94c6:"Disponibilidade",s77320b73fdd9cc40:"Sair",s775370fdb0af1546:"Data de nascimento",s77c2b712a9813175:"Pedir uma nova consulta",s77f8e4bee88d44aa:a`${0} de ${1}`,s7907902da8916212:"O profissional vai te ligar no número que indicas neste campo.",s7aa3cd94d51825fc:"Não há profissionais disponíveis para a especialidade selecionada. Por favor, tente novamente em outro momento ou selecione outra especialidade.",s7af26e861bb6f905:"Falta o identificador de gateway do Google Pay",s7fd8da9511b66dd4:"Pode anexar imagens ou documentação adicional (análises, resultados de testes, etc.) para que o médico avalie",s83c6ce869a2bbaa7:"(1 é muito mau, 5 é excelente)",s8447efe79d058943:"Valor pago",s8581adc786786298:"Formato de arquivo não suportado",s862ca980b16911d0:"Chatear com o profissional",s8c18dbf02590a72e:"Código promocional aplicado",s8cce15c931017937:"Voltar ao início",s8e7a6119525dc7c9:a`Lamentamos, como faltam menos de ${0} minutos para a sua consulta não a podemos modificar.`,s9005845c358db9da:"Não conseguimos descarregar o documento.",s92f34d487d1d0355:"Promoção",s94626d2ffd70f075:"Código promocional validado com sucesso",s9536695467bcf9c4:"Esta consulta já passou, pelo que não pode ser cancelada.",s96474eac63a69381:"Ir para o chat",s96ceb408923a7ab1:a`Nº COL. ${0}`,s979ee14368bf1505:"Fala comigo",s9802dd10b2c2f760:"Enviar",s99898f495319cd49:"Este mensagem foi eliminado",s9c309154722f8e06:"Carregando portal de pagamento",s9cabdaf42f04afee:"Introduza o código",s9cbf16425cadadb1:"Por favor, tente novamente mais tarde.",s9d22fa67943fdc4c:"Consulta telefónica",sa00e726e1e7e46a9:"Adicionar código promocional",sa27f38ad9db3bc4f:"Assistente comercial",sa2fe3f3b565f15f4:"Cancelar",sa4186d5e26cab4bb:"Página não encontrada",sa497ebaaeb251035:"Repetir consulta",sa7de4334479674c6:"Modificar consulta",sa82bc40dafbe3256:a`Consulta agendada de ${0}`,sa83d79734eb60ee3:"Aplicar",sa86d729f62b39f99:"Entrar na videochamada",sa87d2c48a52b2617:"Você não tem documentação",sab964c37a0934399:"Não foi possível carregar o Google Pay. Verifique a configuração do site e tente novamente.",sac2728ace11e5f4b:"Especialidade*",sadc5ede25dd6e126:"O profissional vai te enviar uma mensagem para que possamos协调ar a consulta. Certifique-se de ter boa cobertura e poder atender no horário escolhido.",sae8f7ac5552b2af1:"Quando faltarem 10 minutos para a sua consulta, poderás aceder à videoconferência",saf63dc4c8601ec8c:"a",safe333e385f371ff:"Verificando seu pagamento...",saff3019e8a8c5f98:"Lunes",sb01184796ad3832e:"Como correu a tua consulta?",sb410a3509b92a90c:"Tens algum comentário sobre a consulta?",sb49dc4c5edae9d4e:"Avaliação da consulta",sb5387e21dc21422b:"Consulta modificada",sb621415007181c43:"Mês seguinte",sb73394814d122852:"Se o seu médico gerou alguma documentação, poderás ver e descarregar aqui, na secção de documentação, o seu e-mail ou o chat.",sb882f28c9b20052e:"Consulta confirmada",sba98cf8b2a7dfca4:"Ontem",sbbee712c4900abc2:"Não conseguimos iniciar o pagamento",sbc0be90393c87447:a`Resumo da consulta para ${0}`,sbcf081de432a2172:"Ver detalhes",sbcfc05bdb868b383:"Prescrição",sbd07d1f779e482ae:"Não conseguimos confirmar seu pagamento",sbd9803cceb34513a:"Iniciar chat com assistente comercial",sbda1cf7b293e17d2:"Carregar arquivo",sc27e7c4850fc5a34:a`Lamentamos, como faltam menos de ${0} horas para a sua consulta não a podemos cancelar.`,sc3bb7ea72886e4d0:"Documentos recentes",sc3c7734c15d2a045:"Conta-nos como foi o atendimento ou se tiveste algum problema com a videochamada…",sc43929cc6582a185:"Ver agenda completa",sc4edf6a4e0157d4e:"Consultas próximas",sc6f816a96e8578ff:"Lamentamos, esta consulta já não pode ser cancelada.",sc7cf2be40c8614fa:a`Lamentamos, como faltam menos de ${0} minutos para a sua consulta não a podemos cancelar.`,sca0e87aae6bde276:"Ocorreu algum problema?",sca4bd395e3148194:"Confirmar cancelação",sca90bc30758f9082:"A página que estás a procurar foi removida, renomeada ou pode não existir.",scbe4c6673872bda5:"Telefone",sce29e337ebd75277:"Chat com suporte",scf469737e1670fd4:"Página seguinte",scfc7f5c5f41936dc:"Meus consultas",sd1f44f1a8bc20e67:"Email",sd24922a2783f286e:"Miércoles",sd2a8fc66c53c1a27:"Saltar",sd3f7579076c6611c:"Parece que rejeitou os permissões necessárias para entrar na videoconferência. Edita os permissões no seu navegador para entrar. Uma vez concedidos, deves atualizar esta tela.",sd4beaeb9a1b1fed5:"Datas anteriores",sd812eb30f385776d:"Completa o seu perfil",sd853d3bcf5341b59:"Ver mais",sda962b28e9110c82:"Realiza a busca no seu perfil médico digital",sdb7004e477873574:"Consulta cancelada com sucesso",sdd963b1b2ce9a1f5:a`O profissional vai te ligar no ${0} no horário selecionado. Certifique-se de ter boa cobertura e poder atender no horário escolhido.`,sde993da26c048f19:"Traumatologia, ginecologia, endocrinologia, digestivo ou psiquiatria",sdee32ae81ca0d6d8:"Adicionar ao calendário",se00b081edccfae39:"Datas seguintes",se07ea9607704c5ad:"Alterar código",se090f7226b372a4a:"Se a consulta não pôde ser realizada, podes",se0c7cc77f86aa8a0:"Apelidos",se17f2b402ecea2e1:"Valor a devolver",se18fa3ef98e155de:"A preparar Google Pay…",se1cce5af3e9bb6ee:"Ocorreu um erro ao enviar o arquivo",se1cf783f86c53031:"Martes",se45e6f6f3428ad50:a`Link para a consulta: ${0}`,se5a09223256f98db:"Este campo é obrigatório",se5f9264155b99909:"Ocorreu um problema ao verificar o estado do seu pagamento. Por favor, contate o suporte se o pagamento foi realizado.",se92e438da4e7099f:a`Lamentamos, como faltam menos de ${0} horas para a sua consulta não a podemos modificar.`,sea11fd8a12559bc5:"Consulta prévia:",seb6739450e8d9c8d:"Tem certeza que deseja cancelar esta consulta? Você receberá o valor pago em um prazo de 5-10 dias úteis.",seb850e89f9ff58e8:"Próxima consulta",sed750da423170d47:"Resultados para:",sed836a96c3b5d523:"Portal de pagamento",sed8ec5e3c64fa25d:"Total",sed97e90642983578:"Continuar ao pagamento",sedb2092dda465ea1:"DNI/NIE",sedbca9676f07a51f:"Modalidade da consulta*",see7c0a7b5b6ebbc5:"Utiliza o chat para enviar o motivo da consulta, documentos ou imagens",sefc0dd68776c9466:"Questionário pré-consulta",sf0638d3fc50964d2:"Escolhe outra data",sf0695a0a125ae748:"Confirmar",sf09d5e51b63f2b7d:"Pagar com Google Pay",sf199b210440b7c5f:"Consulta finalizada",sf3457daf057bff15:"voltar à sala de espera.",sf484a0e20a7829ac:"Nós enviaremos um e-mail para o e-mail indicado quando for a hora de conectar-se à videoconferência. Certifique-se de ter uma boa conexão com a internet e um dispositivo com câmara e microfone.",sf48d12e7ae207023:"Especialidade",sf5258cfb2fa10bdc:"Aguarde ser atendido sem sair desta tela",sf63a72ff4116c6a9:"Descarregar documento",sf9705e1c4e82c017:"Não foi possível enviar o questionário",sfa6bc28a7faedc92:"Nova consulta de especialidades digitais",sfac5734d03595135:"Ver todas",sfc63af0362cfb78b:"Falta o identificador de comerciante do Google Pay",sfd51ca4e1b145054:"Não foi possível reservar este horário. Por favor, selecione outro.",sff337500b69abf7f:"O médico está a terminar a sua consulta. Atualiza em alguns minutos para ver se tem documentação.",sffbc330c8a19f838:"Ver menos",sc6a6d42245892254:"Falta el identificador de comercio de Apple Pay",s3da77e69fe62cb2a:"No se ha podido cargar Apple Pay. Comprueba la configuración del sitio e inténtalo de nuevo.",se1dd5d211b5b00e4:"Apple Pay no está disponible",s7e8b7a5acbdf83ed:"Preparando Apple Pay…",sc8271ba819299b59:"Comprobando Apple Pay…",s57e95bc3afddfeb0:"Para pagar con Apple Pay, escanea el código QR con tu iPhone (iOS 18 o posterior) y confirma el pago.",sf32cd04f9a848ee2:"Pagar con Apple Pay",s6a796114fe45025d:a`${0}, ${1} h${2}`,s35d601992fe66fed:"Confirmando tu pago",s5370521b92483bf3:"No cierres, vuelvas atrás ni actualices la ventana; esto puede tardar unos momentos.",s77bf41039c589159:"Tu pago no se ha completado",s0e850d0fec6daf7d:"El pago ha sido rechazado y no hemos creado la cita. No se te ha cobrado nada: puedes volver a reservar desde el inicio.",s4007fa55a28f1f73:"Ese horario ya no está disponible",s0089e78f42dfd1a4:"Otro paciente ha reservado esa cita mientras completabas el pago, así que no hemos podido crearla.",saeefd0d6fb204a80:"Te hemos devuelto el importe automáticamente; puede tardar unos días en reflejarse en tu cuenta.",se478d6710916dadf:"No hemos podido devolverte el importe automáticamente. Escríbenos y lo resolvemos:",sf9e6fbadcce256d0:"Ha ocurrido un error",sa24acad3b1338788:"No hemos podido confirmar tu pago. Por favor, inténtalo de nuevo más tarde.",s8bbbd679ddb50d3b:"Si se te ha cobrado sin una cita confirmada, contacta con nuestro equipo en",s67ebdb57fc6ed724:"Confirmar y pagar",sf75ec3d5bb6b65ab:"Método de pago",s0ef2d611972d04af:"Selecciona un método para realizar el pago de la cita",s0569fb3d65e68486:"Tarjeta",sa8771906f4c82494:"Google pay",se2570afbd791e071:"Apple pay",s3a392bf1aa5a8813:"No se puede iniciar Google Pay",sc9c8fbf418b784ac:"No se puede iniciar Apple Pay",s55e29f17a7ab0b80:"Esperando confirmación de Google Pay",s8ff9b86afd460a55:"Esperando confirmación de Apple Pay",s5b8873ddba610f68:"Abrir Google Pay",s9506fb9bc66942ed:"Abrir Apple Pay",s6db69fd67f48404c:"Abrir ventana de Google Pay",s6911c9ad386cc8b9:"Abrir ventana de Apple Pay",s4a9be42496525265:"Volver a abrir Google Pay",s3356a53ef97dcfba:"Volver a abrir Apple Pay",s9ca719e1a40e96e3:"Faltan credenciales de pago. Vuelve atrás e inténtalo de nuevo, o paga con tarjeta.",s0f6deacf5441e291:"Elegir otro método",s275336b3d23d6d9c:"No cierres esta página.",s970d59d6d88e7e6c:"No se puede iniciar el pago",s705f4bd8bc8e04d8:"Faltan credenciales de pago. Vuelve atrás e inténtalo de nuevo.",s1dec877628213eef:"Tus citas",se0c593aac5e172e6:"Accede, modifica o anula tus citas.",s230b0bee447e61a5:"Ver mis citas"};export{e as templates};
@@ -1 +0,0 @@
1
- import{f as t}from"./lit-element-DiWJYFwC.js";const i={PENDING:1},s=Symbol();class h{get taskComplete(){return this.t||(1===this.i?this.t=new Promise((t,i)=>{this.o=t,this.h=i}):3===this.i?this.t=Promise.reject(this.l):this.t=Promise.resolve(this.u)),this.t}constructor(t,i,s){this.p=0,this.i=0,(this._=t).addController(this);const r="object"==typeof i?i:{task:i,args:s};this.v=r.task,this.j=r.args,this.m=r.argsEqual??e,this.k=r.onComplete,this.A=r.onError,this.autoRun=r.autoRun??!0,"initialValue"in r&&(this.u=r.initialValue,this.i=2,this.O=this.T?.())}hostUpdate(){!0===this.autoRun&&this.S()}hostUpdated(){"afterUpdate"===this.autoRun&&this.S()}T(){if(void 0===this.j)return;const t=this.j();if(!Array.isArray(t))throw Error("The args function must return an array");return t}async S(){const t=this.T(),i=this.O;this.O=t,t===i||void 0===t||void 0!==i&&this.m(i,t)||await this.run(t)}async run(t){let i,e;t??=this.T(),this.O=t,1===this.i?this.q?.abort():(this.t=void 0,this.o=void 0,this.h=void 0),this.i=1,"afterUpdate"===this.autoRun?queueMicrotask(()=>this._.requestUpdate()):this._.requestUpdate();const r=++this.p;this.q=new AbortController;let a=!1;try{i=await this.v(t,{signal:this.q.signal})}catch(t){a=!0,e=t}if(this.p===r){if(i===s)this.i=0;else{if(!1===a){try{this.k?.(i)}catch{}this.i=2,this.o?.(i)}else{try{this.A?.(e)}catch{}this.i=3,this.h?.(e)}this.u=i,this.l=e}this._.requestUpdate()}}abort(t){1===this.i&&this.q?.abort(t)}get value(){return this.u}get error(){return this.l}get status(){return this.i}render(t){switch(this.i){case 0:return t.initial?.();case 1:return t.pending?.();case 2:return t.complete?.(this.value);case 3:return t.error?.(this.error);default:throw Error("Unexpected status: "+this.i)}}}const e=(i,s)=>i===s||i.length===s.length&&i.every((i,e)=>!t(i,s[e]));export{h,i as s};