@mediquo/elements 0.6.4 → 0.7.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 (118) hide show
  1. package/dist/chunks/action-unavailable-message-CzRDRmk9.js +1 -0
  2. package/dist/chunks/addSeconds-ofMnxlgT.js +1 -0
  3. package/dist/chunks/api-chat-client-BsiZ3A6g.js +1 -0
  4. package/dist/chunks/{apple-pay-outcomes-CnVRvAVS.js → apple-pay-outcomes-B4dOTOhL.js} +1 -1
  5. package/dist/chunks/{appointment-card-skeleton-1c7552Ln.d.ts → appointment-action-unavailable-dialog-ByWsZP0d.d.ts} +2 -86
  6. package/dist/chunks/appointment-card-skeleton-CwIuoOXV.js +1 -0
  7. package/dist/chunks/appointment-card-skeleton-DRWT9q2U.d.ts +91 -0
  8. package/dist/chunks/appointment-details-D7Rw3Hyl.js +1 -0
  9. package/dist/chunks/blob-to-base64-CUL1trde.js +1 -0
  10. package/dist/chunks/{context-consumer-ESdICVAb.js → chunk-6CCJWPGL-DlOpbEYH.js} +1 -1
  11. package/dist/chunks/chunk-BUV4MGML-Bn3JWCAv.js +1 -0
  12. package/dist/chunks/chunk-Y4EKUX25-CqL3lLdx.js +1 -0
  13. package/dist/chunks/consume-BhoQNO_8.js +1 -0
  14. package/dist/chunks/document.model.d-DIzMiOmd.d.ts +6 -0
  15. package/dist/chunks/documentation-view-Mqdp7yKi.js +1 -0
  16. package/dist/chunks/get-appointment-query-lJe75hGS.js +1 -0
  17. package/dist/chunks/get-organization-setup-query-DxHNY0w8.js +1 -0
  18. package/dist/chunks/get-patient-documents-query-D1SfC_k_.js +1 -0
  19. package/dist/chunks/get-patient-profile-query-DiU2f_QH.js +1 -0
  20. package/dist/chunks/get-schedule-services-query-Ckvz9Fqh.js +1 -0
  21. package/dist/chunks/i18n-formats-EgnwLxKt.js +1 -0
  22. package/dist/chunks/index-63zQSBy4.js +1 -0
  23. package/dist/chunks/index-CDBk7hVW.d.ts +28 -0
  24. package/dist/chunks/{index-DNUbmrQl.d.ts → index-CSJzkkRA.d.ts} +1 -4
  25. package/dist/chunks/index-CatvNhwL.js +1 -0
  26. package/dist/chunks/index-DZjrAnPq.js +1 -0
  27. package/dist/chunks/{index-DhfVmF4C.js → index-m_sTPA-8.js} +1 -1
  28. package/dist/chunks/price-DU3YLTpk.js +1 -0
  29. package/dist/chunks/query-controller-D7jBX4X7.js +1 -0
  30. package/dist/chunks/refund-cancel-policy-qaBi5AHH.js +1 -0
  31. package/dist/chunks/{schemas.d-5LR6aN9I.d.ts → schemas.d-D7bCe24u.d.ts} +20 -20
  32. package/dist/chunks/telemetry-client-Bkbn48Dd.js +1 -0
  33. package/dist/env.js +1 -1
  34. package/dist/mq-apple-pay-checkout.js +1 -1
  35. package/dist/mq-appointment-checkout.js +1 -1
  36. package/dist/mq-appointment-documentation.d.ts +2 -1
  37. package/dist/mq-appointment-documentation.js +1 -1
  38. package/dist/mq-chat-room.js +1 -1
  39. package/dist/mq-checkout.js +1 -1
  40. package/dist/mq-dashboard.d.ts +16 -6
  41. package/dist/mq-dashboard.js +1 -1
  42. package/dist/mq-documents.d.ts +2 -1
  43. package/dist/mq-documents.js +1 -1
  44. package/dist/mq-google-pay-checkout.js +1 -1
  45. package/dist/mq-immediate-videocall-checkout.js +1 -1
  46. package/dist/mq-my-appointments.d.ts +6 -5
  47. package/dist/mq-my-appointments.js +1 -1
  48. package/dist/mq-next-appointments.d.ts +88 -0
  49. package/dist/mq-next-appointments.js +1 -0
  50. package/dist/mq-payment-poller.js +1 -1
  51. package/dist/mq-professional-presence-sync.js +1 -1
  52. package/dist/mq-recent-documents.d.ts +60 -0
  53. package/dist/mq-recent-documents.js +1 -0
  54. package/dist/mq-schedule-success.js +2 -2
  55. package/dist/mq-schedule.d.ts +8 -9
  56. package/dist/mq-schedule.js +1 -1
  57. package/dist/mq-session-provider.d.ts +1 -1
  58. package/dist/mq-support-chat.js +1 -1
  59. package/dist/mq-terms-and-conditions.js +1 -1
  60. package/dist/mq-unread-count-sync.js +1 -1
  61. package/dist/mq-videocall.d.ts +2 -1
  62. package/dist/mq-videocall.js +1 -1
  63. package/dist/react/mq-apple-pay-checkout.js +1 -1
  64. package/dist/react/mq-appointment-checkout.js +1 -1
  65. package/dist/react/mq-appointment-documentation.d.ts +2 -1
  66. package/dist/react/mq-appointment-documentation.js +1 -1
  67. package/dist/react/mq-chat-room.js +1 -1
  68. package/dist/react/mq-checkout.js +1 -1
  69. package/dist/react/mq-dashboard.d.ts +8 -6
  70. package/dist/react/mq-dashboard.js +1 -1
  71. package/dist/react/mq-documents-page.d.ts +2 -1
  72. package/dist/react/mq-documents-page.js +1 -1
  73. package/dist/react/mq-documents.d.ts +2 -1
  74. package/dist/react/mq-documents.js +1 -1
  75. package/dist/react/mq-google-pay-checkout.js +1 -1
  76. package/dist/react/mq-immediate-videocall-checkout.js +1 -1
  77. package/dist/react/mq-my-appointments.d.ts +7 -6
  78. package/dist/react/mq-my-appointments.js +1 -1
  79. package/dist/react/mq-next-appointments.d.ts +38 -0
  80. package/dist/react/mq-next-appointments.js +2 -0
  81. package/dist/react/mq-payment-poller.js +1 -1
  82. package/dist/react/mq-professional-presence-sync.js +1 -1
  83. package/dist/react/mq-recent-documents.d.ts +27 -0
  84. package/dist/react/mq-recent-documents.js +2 -0
  85. package/dist/react/mq-schedule-success.js +1 -1
  86. package/dist/react/mq-schedule.d.ts +3 -3
  87. package/dist/react/mq-schedule.js +1 -1
  88. package/dist/react/mq-session-provider.d.ts +1 -1
  89. package/dist/react/mq-support-chat.js +1 -1
  90. package/dist/react/mq-terms-and-conditions.js +1 -1
  91. package/dist/react/mq-unread-count-sync.js +1 -1
  92. package/dist/react/mq-videocall.d.ts +2 -1
  93. package/dist/react/mq-videocall.js +1 -1
  94. package/dist/theme.d.ts +8 -0
  95. package/dist/theme.js +1 -1
  96. package/dist/ui/icons/arrow-right-icon.d.ts +6 -0
  97. package/dist/ui/icons/arrow-right-icon.js +1 -0
  98. package/dist/ui/icons/dots-horizontal-icon.d.ts +6 -0
  99. package/dist/ui/icons/dots-horizontal-icon.js +1 -0
  100. package/dist/ui/mq-clamped-text.js +1 -1
  101. package/package.json +9 -1
  102. package/dist/chunks/api-chat-client-BBL1U9EQ.js +0 -1
  103. package/dist/chunks/appointment-card-skeleton-C8VERHzq.js +0 -1
  104. package/dist/chunks/chunk-GZF3YFSX-DM-GTqxg.js +0 -1
  105. package/dist/chunks/chunk-YMQSBQHL-De_r7BNk.js +0 -1
  106. package/dist/chunks/consume-CovVqBjI.js +0 -1
  107. package/dist/chunks/documentation-view-DJCr5_MN.js +0 -1
  108. package/dist/chunks/get-appointment-query-Ck68BEMg.js +0 -1
  109. package/dist/chunks/get-organization-setup-query-BMbuRi6v.js +0 -1
  110. package/dist/chunks/get-patient-documents-query-DIQH-TMM.js +0 -1
  111. package/dist/chunks/get-patient-profile-query-B0tUDJmT.js +0 -1
  112. package/dist/chunks/i18n-formats-DYS91YEa.js +0 -1
  113. package/dist/chunks/index-KvIw19qY.js +0 -1
  114. package/dist/chunks/index-ShXzd7UZ.js +0 -1
  115. package/dist/chunks/price-LTnCz9kN.js +0 -1
  116. package/dist/chunks/query-controller-BlO1Ax65.js +0 -1
  117. package/dist/chunks/refund-cancel-policy-CXFTrFfo.js +0 -1
  118. package/dist/chunks/telemetry-client-BLJVs9me.js +0 -1
@@ -1 +1 @@
1
- import{_ as e,c as t}from"./chunks/custom-element-D2ziPxYE.js";import{Q as i}from"./chunks/query-controller-BlO1Ax65.js";import{g as s}from"./chunks/get-appointment-query-Ck68BEMg.js";import{g as a}from"./chunks/get-organization-setup-query-BMbuRi6v.js";import{S as o,b as r,g as n,a as l,c as d,d as c}from"./chunks/i18n-formats-DYS91YEa.js";import{g as p}from"./chunks/get-patient-profile-query-B0tUDJmT.js";import{g as h,c as u}from"./chunks/refund-cancel-policy-CXFTrFfo.js";import{MqPaymentRedirectEvent as m,MqBackEvent as v}from"./events.js";import{a as f,e as g,A as y,g as b,f as w,P as S,S as _,h as x,j as $,k}from"./chunks/api-chat-client-BBL1U9EQ.js";import"./ui/mq-button.js";import{i as C}from"./chunks/context-provider--AKuwfs9.js";import{m as E,s as M}from"./chunks/runtime-Bg1WXVCx.js";import{l as P}from"./chunks/localized-decorator-BlOuLhym.js";import{E as I,i as A,a as F,x as q}from"./chunks/lit-element-DiWJYFwC.js";import{n as D}from"./chunks/property-scuRaFcM.js";import{setEnv as V}from"./env.js";import{getLocale as z,initLocalization as j,isValidLocale as L,setLocale as O}from"./i18n.js";import{n as T}from"./chunks/create-context-DqP79qjF.js";import{M as B}from"./chunks/mutation-controller-CR2qcqhH.js";import{e as N}from"./chunks/class-map-Co76I6aw.js";import{o as U}from"./chunks/if-defined-BYeVdwgd.js";import{z as R}from"./chunks/external-CJj32K_p.js";import"./ui/mq-input.js";import"./ui/mq-callout.js";import{e as Q,t as W}from"./chunks/directive-2EDmOukv.js";import{f as H}from"./chunks/index-ShXzd7UZ.js";import"./ui/mq-page-title.js";import{c as K}from"./chunks/consume-CovVqBjI.js";import"./chunks/professional-overview-C4H_znIJ.js";import{h as G,f as Z,c as J}from"./chunks/price-LTnCz9kN.js";import"./ui/mq-card.js";import{r as X}from"./chunks/state-LQivXIgA.js";import{spinnerIcon as Y}from"./ui/icons/spinner-icon.js";import{tagIcon as ee}from"./ui/icons/tag-icon.js";import{toast as te}from"./ui/mq-toast.js";import{e as ie}from"./chunks/query-CeeutdfT.js";import{fileIcon as se}from"./ui/icons/file-icon.js";import{uploadIcon as ae}from"./ui/icons/upload-icon.js";import{xIcon as oe}from"./ui/icons/x-icon.js";import"./ui/mq-textarea.js";import{l as re}from"./chunks/chunk-4FFT6DC2-CVWibomC.js";import{Q as ne}from"./chunks/chunk-RCFIJTXZ-C6Ir0-sM.js";import{t as le,s as de,q as ce,u as pe,w as he,x as ue,y as me}from"./chunks/telemetry-client-BLJVs9me.js";import"./ui/mq-skeleton.js";import"./ui/mq-text-button.js";import"./ui/mq-select.js";import{i as ve,f as fe}from"./chunks/format-CRFiCNHw.js";import{t as ge,p as ye,s as be}from"./chunks/parseISO-Dj3qSTG8.js";import{i as we,s as Se,e as _e}from"./chunks/index-Ca-l41nB.js";import{calendarIcon as xe}from"./ui/icons/calendar-icon.js";import{y as $e}from"./chunks/query-Cjvi4_dT.js";import{a as ke}from"./chunks/index-m6lXVNW0.js";import{breakpoints as Ce}from"./theme.js";import{i as Ee}from"./chunks/isBefore-CPpTogxo.js";import"./chunks/context-consumer-ESdICVAb.js";import"./chunks/context-request-event-Dfydf1ub.js";import"./ui/icons/types.js";import"./ui/icons/info-circle-outine-icon.js";import"./chunks/style-map-CIdqdn7C.js";import"./ui/icons/arrow-narrow-left-icon.js";import"./ui/icons/chevron-down-icon.js";import"./ui/mq-avatar.js";import"./ui/icons/briefcase-icon.js";import"./ui/icons/clock-icon.js";import"./ui/icons/message-bubble-icon.js";import"./ui/icons/phone-icon.js";import"./ui/icons/chevron-left-icon.js";import"./ui/icons/chevron-right-icon.js";import"./chunks/isSameDay-CuhZMy1T.js";function Me(e,t){const i=+ge(e)-+ge(t);return i<0?-1:i>0?1:i}function Pe(e,t){const i=ge(e,t?.in);return i.setHours(23,59,59,999),i}var Ie=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 Ae=T(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 Fe(e,t){if(!e)return;const i=function(e){if(e)return r[e]??e}(e);return t?.find(t=>t.code===i||String(t.id)===e)?.id}function qe(e,t){if(!e)return;const i=o[e];return i?t?.find(e=>e.channel===i):t?.find(t=>t.code===e||t.id===e)}function De(e){const t=Fe(e.defaultSpecialty,e.specialties),i=qe(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,firstAvailableSlotDate: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 Ve={name:"completeProfile",skipIf:e=>e.profileComplete},ze={name:"payment",skipIf:e=>!e.requiresPayment},je=[{name:"selectProfessional"},{name:"selectSlot"},Ve,{name:"confirm"},ze,{name:"done"}],Le=[{name:"selectSlot"},Ve,{name:"confirm"},ze,{name:"done"}],Oe=[{name:"selectSlot"},Ve,{name:"confirm"},{name:"done"}];function Te(e){return e.totalAmount<=0}class InvalidDiscountCodeError extends Error{constructor(e="Invalid discount code"){super(e),this.name="InvalidDiscountCodeError"}}const Be=new WeakMap,Ne=new WeakMap,Ue={current:[]};let Re=!1,Qe=0;const We=new Set,He=new Map;function Ke(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(Ue.current.includes(e))continue;Ue.current.push(e),e.recompute();const t=Ne.get(e);if(t)for(const e of t){const t=Be.get(e);t&&Ke(t)}}}function Ge(e){const t={prevVal:e.prevState,currentVal:e.state};for(const i of e.listeners)i(t)}function Ze(e){const t={prevVal:e.prevState,currentVal:e.state};for(const i of e.listeners)i(t)}function Je(e){if(Qe>0&&!He.has(e)&&He.set(e,e.prevState),We.add(e),!(Qe>0||Re))try{for(Re=!0;We.size>0;){const e=Array.from(We);We.clear();for(const t of e){const e=He.get(t)??t.prevState;t.prevState=e,Ge(t)}for(const t of e){const e=Be.get(t);e&&(Ue.current.push(t),Ke(e))}for(const t of e){const e=Be.get(t);if(e)for(const t of e)Ze(t)}}}finally{Re=!1,Ue.current=[],He.clear()}}function Xe(e){Qe++;try{e()}finally{if(Qe--,0===Qe){const e=We.values().next().value;e&&Je(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),Je(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=Be.get(t);e||(e=new Set,Be.set(t,e)),e.add(this);let i=Ne.get(this);i||(i=new Set,Ne.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=Be.get(t);e&&e.delete(this);const i=Ne.get(this);i&&i.delete(t)}}}function Ye(e,t){return"function"==typeof e?e(t):e}function et(e,t){return dt(t).reduce((e,t)=>null===e?null:void 0!==e?e[t]:void 0,e)}function tt(e,t,i){const s=dt(t);return function e(t){if(!s.length)return Ye(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 it=/^(\d+)$/gm,st=/\.(\d+)(?=\.)/gm,at=/^(\d+)\./gm,ot=/\.(\d+$)/gm,rt=/\.{2,}/gm,nt="__int__",lt=`${nt}$1`;function dt(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(it,lt).replace(st,`.${lt}.`).replace(at,`${lt}.`).replace(ot,`.${lt}`).replace(rt,".").split(".").map(e=>{if(e.startsWith(nt)){const t=e.substring(nt.length),i=parseInt(t,10);return String(i)===t?i:t}return e})}function ct(e){return!(Array.isArray(e)&&0===e.length)}function pt(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 ht(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 ut=e=>!!e&&"object"==typeof e&&"fields"in e;function mt(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)||!mt(e[a],t[a]))return!1;return!0}const vt=({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},ft=({formLevelError:e,fieldLevelError:t})=>t?{newErrorValue:t,newSource:"field"}:e?{newErrorValue:e,newSource:"form"}:{newErrorValue:void 0,newSource:void 0};function gt(e,t){return null==e?t:{...e,...t}}let yt=256;const bt=[];let wt;for(;yt--;)bt[yt]=(yt+256).toString(16).substring(1);const St=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 _t=(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}},xt={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:_t(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:_t(s.issues,e)}},$t=e=>!!e&&"~standard"in e,kt={isValidating:!1,isTouched:!1,isBlurred:!1,isDirty:!1,isPristine:!0,isValid:!0,isDefaultValue:!0,errors:[],errorMap:{},errorSourceMap:{}};function Ct(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=()=>kt,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 Et=new class FormEventClient extends EventClient{constructor(){super({pluginId:"form-devtools"})}};function Mt(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(),Et.emit("form-unmounted",{id:this._formId})};this.options.listeners?.onMount?.({formApi:this});const{onMount:s}=this.options.validators||{};return Et.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&&!mt(e.defaultValues,t.defaultValues)&&!this.state.isTouched,a=!mt(e.defaultState,t.defaultState)&&!this.state.isTouched;(s||a||i)&&Xe(()=>{this.baseStore.setState(()=>Mt(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(()=>Mt({...this.options.defaultState,values:e??this.options.defaultValues??this.options.defaultState?.values,fieldMetaBase:s}))},this.validateAllFields=async e=>{const t=[];Xe(()=>{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=[];Xe(()=>{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=pt(e,{...this.options,form:this,validationLogic:this.options.validationLogic||St});let i=!1;const s={};return Xe(()=>{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}=Pt(t),r=It(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}=vt({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=It("submit");this.state.errorMap?.[a]&&"submit"!==e&&!i&&this.baseStore.setState(e=>({...e,errorMap:{...e.errorMap,[a]:void 0}}));const o=It("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=ht(e,{...this.options,form:this,validationLogic:this.options.validationLogic||St});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=It(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}=Pt(i);r&&(s=s?{...s,...r}:r);const n=It(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}=vt({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=>et(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]:Ye(t,i.fieldMetaBase[e])}}))},this.resetFieldMeta=e=>Object.keys(e).reduce((e,t)=>(e[t]=kt,e),{}),this.setFieldValue=(e,t,i)=>{const s=i?.dontUpdateMeta??!1,a=i?.dontRunListeners??!1,o=i?.dontValidate??!1;Xe(()=>{s||this.setFieldMeta(e,e=>({...e,isTouched:!0,isDirty:!0,errorMap:{...e?.errorMap,onMount:void 0}})),this.baseStore.setState(i=>({...i,values:tt(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=dt(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)],gt(s,{dontValidate:!0})),await this.validateField(e,"change"),Ct(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),gt(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),gt(i,{dontValidate:!0})),Ct(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 tt(tt(e,`${t}`,a),`${i}`,s)},gt(s,{dontValidate:!0})),Ct(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},gt(s,{dontValidate:!0})),Ct(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,[],gt(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]:kt},values:this.options.defaultValues?tt(t.values,e,et(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=>xt.validate({value:this.state.values,validationSource:"form"},e),this.parseValuesWithSchemaAsync=e=>xt.validateAsync({value:this.state.values,validationSource:"form"},e),this.timeoutIds={validations:{},listeners:{},formListeners:{}},this._formId=e?.formId??function(){let e,t=0,i="";if(!wt||yt+16>256){for(wt=new Array(256),t=256;t--;)wt[t]=256*Math.random()|0;t=0,yt=0}for(;t<16;t++)e=wt[yt+t],i+=6===t?bt[15&e|64]:8===t?bt[63&e|128]:bt[e],1&t&&t>1&&t<11&&(i+="-");return yt++,i}(),this._devtoolsSubmissionOverride=!1,this.baseStore=new Store(Mt({...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=et(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=!ct(c??[]),h=!t.isDirty,u=mt(d,et(this.options.defaultValues,e))||mt(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&&ut(t)?(e.push(t.form),e):(e.push(t),e),[]));const b=0===y.length,w=d&&b,S=this.options.canSubmitWhenInvalid??!1,_=0===o.submissionAttempts&&!c&&!f||!g&&!o.isSubmitting&&w||S;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.isTouched===c&&s.isBlurred===p&&s.isPristine===v&&s.isDefaultValue===h&&s.isDirty===m&&mt(a,o))return s;let $={...o,errorMap:x,fieldMeta:this.fieldMetaDerived.state,errors:y,isFieldsValidating:l,isFieldsValid:d,isFormValid:b,isValid:w,canSubmit:_,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(()=>{Et.emit("form-state-change",{id:this._formId,state:this.store.state,options:this.options})}),Et.on("request-form-state",e=>{e.payload.id===this._formId&&Et.emit("form-state-change",{id:this._formId,state:this.store.state,options:this.options})}),Et.on("request-form-reset",e=>{e.payload.id===this._formId&&this.reset()}),Et.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 $t(e.validate)?xt[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})),Xe(()=>{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 Et.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 Et.emit("form-submission-state-change",{id:this._formId,submissionAttempt:this.state.submissionAttempts,successful:!1,stage:"validate",errors:this.state.errors});Xe(()=>{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})),Xe(()=>{this.baseStore.setState(e=>({...e,isSubmitted:!0,isSubmitSuccessful:!0})),Et.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})),Et.emit("form-submission-state-change",{id:this._formId,submissionAttempt:this.state.submissionAttempts,successful:!1,stage:"inflight",onError:e}),i(),e}}setErrorMap(e){Xe(()=>{Object.entries(e).forEach(([e,t])=>{const i=e;if(ut(t)){const{formError:e,fieldErrors:s}=Pt(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 Pt(e){if(e){if(ut(e)){return{formError:Pt(e.form).formError,fieldErrors:e.fields}}return{formError:e}}return{formError:void 0}}function It(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=et(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,gt(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,gt(t,{dontRunListeners:!0})),t?.dontRunListeners||this.triggerOnChangeListener()},this.insertValue=(e,t,i)=>{this.form.insertFieldValue(this.name,e,t,gt(i,{dontRunListeners:!0})),i?.dontRunListeners||this.triggerOnChangeListener()},this.replaceValue=(e,t,i)=>{this.form.replaceFieldValue(this.name,e,t,gt(i,{dontRunListeners:!0})),i?.dontRunListeners||this.triggerOnChangeListener()},this.removeValue=(e,t)=>{this.form.removeFieldValue(this.name,e,gt(t,{dontRunListeners:!0})),t?.dontRunListeners||this.triggerOnChangeListener()},this.swapValues=(e,t,i)=>{this.form.swapFieldValues(this.name,e,t,gt(i,{dontRunListeners:!0})),i?.dontRunListeners||this.triggerOnChangeListener()},this.moveValue=(e,t,i)=>{this.form.moveFieldValues(this.name,e,t,gt(i,{dontRunListeners:!0})),i?.dontRunListeners||this.triggerOnChangeListener()},this.clearValues=e=>{this.form.clearFieldValues(this.name,gt(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=pt(e,{...this.options,form:this.form,validationLogic:this.form.options.validationLogic||St}),s=this.getLinkedFields(e).reduce((t,i)=>{const s=pt(e,{...i.options,form:i.form,validationLogic:i.form.options.validationLogic||St});return s.forEach(e=>{e.field=i}),t.concat(s)},[]);let a=!1;Xe(()=>{const e=(e,i)=>{const s=Ft(i.cause),o=i.validate?At(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}=ft({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=Ft("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=ht(e,{...this.options,form:this.form,validationLogic:this.form.options.validationLogic||St}),s=await t,a=this.getLinkedFields(e),o=a.reduce((t,i)=>{const s=ht(e,{...i.options,form:i.form,validationLogic:i.form.options.validationLogic||St});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=Ft(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=At(o),l=s[this.name]?.[a],{newErrorValue:d,newSource:c}=ft({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[Ft(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=>xt.validate({value:this.state.value,validationSource:"field"},e),this.parseValueWithSchemaAsync=e=>xt.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)??{...kt,...e.defaultMeta}})}),this.options=e}get state(){return this.store.state}runValidator(e){return $t(e.validate)?xt[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 At(e){if(e)return e}function Ft(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 qt,Dt,Vt,zt,jt,Lt=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},Ot=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){qt.set(this,void 0),Dt.set(this,void 0),this.api=new FormApi(t),Lt(this,qt,e,"f").addController(this)}hostConnected(){Lt(this,Dt,this.api.store.subscribe(()=>{Ot(this,qt,"f").requestUpdate()}),"f")}hostDisconnected(){Ot(this,Dt,"f")?.call(this)}field(e,t){return Tt(this.api,e,t)}}qt=new WeakMap,Dt=new WeakMap;Vt=new WeakMap,zt=new WeakMap,jt=new WeakMap;const Tt=Q(class FieldDirective extends H{constructor(e){if(super(e),Vt.set(this,!1),zt.set(this,void 0),jt.set(this,void 0),e.type!==W.CHILD)throw new Error("The `field` directive must be used in the `child` attribute")}update(e,[t,i,s]){if(!Ot(this,Vt,"f")){if(!Ot(this,zt,"f")){const e={...i,form:t};Lt(this,zt,new FieldApi(e),"f"),Lt(this,jt,Ot(this,zt,"f").mount(),"f")}Lt(this,Vt,!0,"f")}return this.render(t,i,s)}disconnected(){super.disconnected(),Ot(this,jt,"f")?.call(this)}reconnected(){super.reconnected(),Ot(this,zt,"f")&&Lt(this,jt,Ot(this,zt,"f").mount(),"f")}render(e,t,i){return Ot(this,zt,"f")?i(Ot(this,zt,"f")):I}}),Bt=A`.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}`,Nt=R.object({first_name:R.string({required_error:"required"}).min(1,"required"),last_name:R.string({required_error:"required"}).min(1,"required"),email:R.string({required_error:"required"}).email("email_invalid").min(1,"required"),phone:R.string({required_error:"required"}).min(9,"phone_invalid"),birth_date:R.string({required_error:"required"}).min(1,"required"),tax_id:R.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 Ut=class CompleteProfileForm extends F{constructor(){super(...arguments),this.isPending=!1,this.errorMap={required:E("Este campo es obligatorio"),email_invalid:E("El email no es válido"),phone_invalid:E("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:Nt}}),this.getScheduleServicesQuery=new i(this,()=>h(f))}static{this.styles=Bt}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===y.phonecall;return q`<div class="form-container"><form class="form-content" @submit="${e=>{e.preventDefault(),e.stopPropagation(),this.form.api.handleSubmit()}}"><div class="${N({field:!0,hidden:!!this.defaultValues.first_name})}">${this.form.field({name:"first_name"},e=>q`<mq-input label="${E("Nombre")}" id="${U(e.name)}" value="${U(e.state.value)}" name="${U(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?q`<em class="field-error">${this.translateError(e.state.meta.errors[0]?.message||"")}</em>`:I}`)}</div><div class="${N({field:!0,hidden:!!this.defaultValues.last_name})}">${this.form.field({name:"last_name"},e=>q`<mq-input label="${E("Apellidos")}" id="${U(e.name)}" value="${U(e.state.value)}" name="${U(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?q`<em class="field-error">${this.translateError(e.state.meta.errors[0]?.message||"")}</em>`:I}`)}</div><div class="${N({field:!0,hidden:!!this.defaultValues.email})}">${this.form.field({name:"email"},e=>q`<mq-input type="email" label="${E("Email")}" id="${U(e.name)}" value="${U(e.state.value)}" name="${U(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?q`<em class="field-error">${this.translateError(e.state.meta.errors[0]?.message||"")}</em>`:I}`)}</div><div class="${N({field:!0,hidden:!!this.defaultValues.phone})}">${this.form.field({name:"phone"},e=>q`<mq-input type="tel" label="${E("Teléfono")}" id="${U(e.name)}" value="${U(e.state.value)}" name="${U(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?q`<em class="field-error">${this.translateError(e.state.meta.errors[0]?.message||"")}</em>`:I}`)}</div><div class="${N({field:!0,hidden:!!this.defaultValues.birth_date})}">${this.form.field({name:"birth_date"},e=>q`<mq-input type="date" label="${E("Fecha de nacimiento")}" id="${U(e.name)}" value="${U(e.state.value)}" name="${U(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?q`<em class="field-error">${this.translateError(e.state.meta.errors[0]?.message||"")}</em>`:I}`)}</div><div class="${N({field:!0,hidden:!!this.defaultValues.tax_id})}">${this.form.field({name:"tax_id"},e=>q`<mq-input label="${E("DNI/NIE")}" id="${U(e.name)}" value="${U(e.state.value)}" name="${U(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?q`<em class="field-error">${this.translateError(e.state.meta.errors[0]?.message||"")}</em>`:I}`)}</div>${t?q`<mq-callout background="default" variant="info" noPadding>${E("El profesional te llamará al número que indiques en este campo.")}</mq-callout>`:I}<mq-button type="submit" fullwidth size="xl" ?disabled="${this.isPending}">${E("Continuar")}</mq-button></form></div>`}};e([D({type:Boolean})],Ut.prototype,"isPending",void 0),e([D({type:String})],Ut.prototype,"serviceId",void 0),e([D({type:Object})],Ut.prototype,"defaultValues",void 0),Ut=e([P(),t("complete-profile-form")],Ut);const Rt=A`: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 Qt=class DiscountCodeField extends F{constructor(){super(...arguments),this.basePrice=null,this.appliedDiscount=null,this.expanded=!1,this.form=new TanStackFormController(this,{defaultValues:{code:""}})}static{this.styles=Rt}async validateCode(e){const t=e.trim();if(this.basePrice&&""!==t)try{const e=await async function(e){const{basePrice:t}=e,i=e.code.trim();try{const e=await f.payments.getConsultationCoupon(i,t.amount),s=e.percent_off,a=e.after_discount_amount??t.amount-Math.round(t.amount*s/100);return{code:i,percentage:s,discountAmount:t.amount-a,totalAmount:a,currency:t.currency}}catch(e){if(g(e)&&404===e.response?.status)throw new InvalidDiscountCodeError;throw e}}({code:t,basePrice:this.basePrice});return this.dispatchEvent(new DiscountAppliedEvent(e)),this.expanded=!1,void this.form.api.reset()}catch(e){return E(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 q`<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 q`<div class="row"><input class="input ${s?"input--error":""}" type="text" .value="${i.state.value}" ?disabled="${e}" placeholder="${E("Ingresa el código")}" @input="${e=>i.handleChange(e.target.value)}"> <button type="submit" class="btn" ?disabled="${!t.code.trim()||e}">${e?q`${Y({color:"currentColor",size:16})}`:E("Aplicar")}</button></div>${s?q`<p class="error">${s}</p>`:I}`})}</form>`}render(){return this.appliedDiscount&&!this.expanded?q`<div class="applied"><span class="applied__status" role="status">${q`<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>`} ${E("Código de promoción aplicado")} </span><button type="button" class="applied__change" @click="${this.onChangeCode}">${q`<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>`} ${E("Cambiar código")}</button></div>`:q`<button type="button" class="trigger" aria-expanded="${this.expanded}" @click="${this.toggle}">${ee({size:20})} <span class="trigger__label">${E("Añadir código de promoción")}</span> ${e=this.expanded,q`<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([D({type:Object})],Qt.prototype,"basePrice",void 0),e([D({type:Object})],Qt.prototype,"appliedDiscount",void 0),e([X()],Qt.prototype,"expanded",void 0),Qt=e([P(),t("discount-code-field")],Qt);const Wt=A`.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 Ht=class NewAppointmentSummary extends F{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,te.success(E("Código de promoción validado correctamente"))},this.getOrganizationSpecialtiesQuery=new i(this,()=>n(f,{enabled:!!this.professional?.speciality.id})),this.getOrganizationSetupQuery=new i(this,()=>a(f))}static{this.styles=Wt}renderAppointmentDetails(){return q`${this.startsAt&&this.channel&&this.duration?q`<appointment-details .startsAt="${b(this.startsAt).toISOString()}" .duration="${this.duration}" .channel="${this.channel}" .timezone="${this.patient.timezone}" variant="wide"></appointment-details>`:I} ${this.previousStartsAt&&this.previousDuration?q`<hr><span class="previous-starts-at">${E("Cita previa:")}</span><appointment-details .startsAt="${b(this.previousStartsAt).toISOString()}" .duration="${this.previousDuration}" .timezone="${this.patient.timezone}" strike-through variant="wide"></appointment-details>`:I}`}render(){const e=z(),t=this.getOrganizationSpecialtiesQuery.result?.data?.find(e=>e.id===this.professional?.speciality.id),i=l(t?.code??"",e,t?.name),s=this.serviceCode?d(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,n=this.servicePrice;return q`<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()} ${G(n)?q`${this.showPrice?q`${r?q`<discount-code-field .basePrice="${{amount:n.amount,currency:n.currency}}" .appliedDiscount="${this.appliedDiscount}" @discount-applied="${this.onDiscountApplied}"></discount-code-field>`:I}<div class="payment-info">${s?q`<span class="payment-info__name">${s}</span>`:I} <span class="payment-info__price">${Z({amount:n.amount,currency:n.currency},e)}</span></div>${r&&this.appliedDiscount?q`<div class="discount-info"><span>${E("Promoción")} ${this.appliedDiscount.code} (-${this.appliedDiscount.percentage}%)</span> <span>${Z({amount:-this.appliedDiscount.discountAmount,currency:this.appliedDiscount.currency},e)}</span></div><hr><div class="total-info"><span>${E("Total")}</span> <span>${Z({amount:this.appliedDiscount.totalAmount,currency:this.appliedDiscount.currency},e)}</span></div>`:I}`:I} ${o.length>0?q`<hr><mq-clamped-text class="reservation-conditions" .lines="${2}" expand-label="${E("Ver más")}" collapse-label="${E("Ver menos")}"><span class="reservation-conditions__prefix">${E("Condiciones de reserva:")}</span> ${" "} <span class="reservation-conditions__body">${o}</span></mq-clamped-text>`:I}`:I}</mq-card>`}};e([D({type:Object})],Ht.prototype,"professional",void 0),e([D({type:String})],Ht.prototype,"startsAt",void 0),e([D({type:Number})],Ht.prototype,"duration",void 0),e([D({type:String})],Ht.prototype,"channel",void 0),e([D({type:String})],Ht.prototype,"previousStartsAt",void 0),e([D({type:Number})],Ht.prototype,"previousDuration",void 0),e([D({type:String})],Ht.prototype,"serviceCode",void 0),e([D({type:String})],Ht.prototype,"serviceName",void 0),e([D({type:Object})],Ht.prototype,"servicePrice",void 0),e([D({type:Boolean,attribute:"fill-column",reflect:!0})],Ht.prototype,"fillColumn",void 0),e([D({type:Object})],Ht.prototype,"appliedDiscount",void 0),e([D({type:Boolean})],Ht.prototype,"showPrice",void 0),e([K({context:Ae,subscribe:!0})],Ht.prototype,"patient",void 0),Ht=e([P(),t("new-appointment-summary")],Ht);let Kt=class CompleteProfileStep extends F{constructor(){super(...arguments),this.showBack=!0,this.channel=void 0,this.getPatientProfileQuery=new i(this,()=>p(f)),this.updatePatientProfileMutation=new B(this,{mutationFn:async e=>f.flash.updatePatientProfile(e)})}static{this.styles=A`.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=>q`<mq-page-title .title="${E("Petición de cita")}" .showBack="${this.showBack}" @mq-back="${()=>this.dispatchEvent(new CustomEvent("back"))}"></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>${E("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([D({type:String})],Kt.prototype,"serviceId",void 0),e([D({type:Boolean})],Kt.prototype,"showBack",void 0),e([D({type:Object})],Kt.prototype,"scheduleSlot",void 0),e([D({type:Object})],Kt.prototype,"professional",void 0),e([D({type:String})],Kt.prototype,"channel",void 0),Kt=e([P(),t("complete-profile-step")],Kt);const Gt=A`: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 Zt=class FileAttachments extends F{constructor(){super(...arguments),this.uploadedFiles=[],this.uploadingFile=null,this.uploadFileMutation=new B(this,{mutationFn:e=>f.documents.uploadFile({file:e}),throwOnError:!0})}static{this.styles=Gt}handleClickUploadFile(){const e=this.shadowRoot?.querySelector("input[type='file']");e&&e.click()}getErrorMessageFromCode(e){switch(e){case 422:default:return E("Ha ocurrido un error en el envío del archivo");case 413:return E("El archivo supera el tamaño máximo permitido");case 415:return E("Formato de archivo no soportado")}}async handleUploadFile(e){const t=e.target.files?.[0];if(t){if(t.size>314572800)return te.error(E("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(!g(e))return;const t=this.getErrorMessageFromCode(e.response?.status??500);te.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 q`<div class="field"><input type="file" hidden @change="${this.handleUploadFile}"><p class="label">${E("Adjuntar archivos")}</p><p class="hint">${E("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}">${ae()} ${E("Subir archivo")}</mq-button><div class="files">${this.uploadedFiles.map((e,t)=>q`<div class="file"><div class="file-info">${se()} <span class="file-name">${e.file_name}</span></div><div class="file-close"><mq-button size="icon-xs" variant="ghost" @click="${()=>this.handleRemoveFile(t)}">${oe({color:"var(--color-neutrals-text-default)",size:24})}</mq-button></div></div>`)} ${this.uploadingFile?q`<div class="file uploading"><div class="file-info">${q`<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>`}};function Jt(e){return f.appointments.createAppointment(e)}e([D({type:Array})],Zt.prototype,"uploadedFiles",void 0),e([X()],Zt.prototype,"uploadingFile",void 0),e([ie("input[type='file']")],Zt.prototype,"fileInput",void 0),Zt=e([P(),t("file-attachments")],Zt);class ScheduleAppointmentMutationController{constructor(e,t){this.mutation=new B(e,{mutationFn:Jt,onSuccess:async e=>{await(t.getQueryClient()?.invalidateQueries()),await t.onSuccess(e.appointment.id)},onError:async()=>{await(t.getQueryClient()?.invalidateQueries()),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 Xt=A`: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 Yt=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 ei=class ConfirmStep extends F{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,{getQueryClient:()=>this.queryClientContext,onSuccess:e=>{this.dispatchEvent(new Yt({appointmentId:e}))},onError:()=>{this.dispatchEvent(new CustomEvent("error"))}}),this.rescheduleAppointmentMutation=new B(this,{mutationFn:async e=>f.appointments.rescheduleAppointment(e),onSuccess:async()=>{await(this.queryClientContext?.invalidateQueries());const e=this.appointment?.id;if(!e)return re.error("confirm-step: reschedule succeeded but appointment id is missing"),void this.dispatchEvent(new CustomEvent("error"));this.dispatchEvent(new Yt({appointmentId:e}))},onError:async()=>{await(this.queryClientContext?.invalidateQueries()),this.dispatchEvent(new CustomEvent("error"))}}),this.createPaymentLinkMutation=new B(this,{mutationFn:async e=>({result:await f.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()),this.dispatchEvent(new CustomEvent("error"))}})}static{this.styles=Xt}get isPaymentFlow(){return this.requiresPayment&&"schedule"===this.kind&&G(this.service?.price)}get isFullyDiscounted(){return null!=this.appliedDiscount&&Te(this.appliedDiscount)}get ctaLabel(){return this.isFullyDiscounted?E("Confirmar cita"):this.isPaymentFlow?E("Continuar al pago"):E("Continuar")}async handleSubmit(){if(le.track(de(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})}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 q`<mq-page-title .title="${"schedule"===this.kind?E("Petición de cita"):E("Modificar cita")}" .showBack="${this.showBack}" @mq-back="${()=>this.dispatchEvent(new CustomEvent("back"))}"></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">${E("Cuestionario preconsulta")}</p><div class="field"><p class="label">${E("Motivo de consulta")}</p><mq-textarea maxlength="${240}" label="${E("¿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([K({context:Ae,subscribe:!0})],ei.prototype,"patient",void 0),e([D({type:String})],ei.prototype,"kind",void 0),e([D({type:Boolean})],ei.prototype,"showBack",void 0),e([D({type:Boolean})],ei.prototype,"requiresPayment",void 0),e([D({type:Object})],ei.prototype,"scheduleSlot",void 0),e([D({type:Object})],ei.prototype,"professional",void 0),e([D({type:String})],ei.prototype,"startsAt",void 0),e([D({type:Number})],ei.prototype,"duration",void 0),e([D({type:String})],ei.prototype,"channel",void 0),e([D({type:Object})],ei.prototype,"appointment",void 0),e([D({type:String})],ei.prototype,"serviceId",void 0),e([D({type:String})],ei.prototype,"specialityId",void 0),e([D({type:Object})],ei.prototype,"service",void 0),e([D({type:Object})],ei.prototype,"appliedDiscount",void 0),e([D({type:String})],ei.prototype,"returnUrl",void 0),e([X()],ei.prototype,"reason",void 0),e([X()],ei.prototype,"attachedFiles",void 0),e([K({context:ne,subscribe:!0})],ei.prototype,"queryClientContext",void 0),ei=e([P(),t("confirm-step")],ei);class PaymentSuccessEvent extends Event{static{this.eventName="payment-success"}constructor(e){super(PaymentSuccessEvent.eventName,{bubbles:!0,composed:!0}),this.detail=e}}const ti=A`: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 ii=class PaymentPendingStep extends F{constructor(){super(...arguments),this._timedOut=!1,this._remaining=6e4}static{this.styles=ti}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 f.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?q`<p class="error-title">${E("No hemos podido confirmar tu pago")}</p><p class="message">${E("Ha ocurrido un problema al verificar el estado de tu pago. Por favor, contacta con soporte si el cargo se ha realizado.")}</p>`:q`${Y({size:40,color:"var(--color-primary-default)"})}<p class="message">${E("Verificando tu pago...")}</p>`}};e([D({type:String})],ii.prototype,"sessionId",void 0),e([X()],ii.prototype,"_timedOut",void 0),ii=e([P(),t("payment-pending-step")],ii);const si="https://checkout.mediquo.com";function ai(){return q`<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 oi(){return q`<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 ri=A`: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)}.option--disabled,.option--disabled:hover{opacity:.55;cursor:not-allowed}.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 ni=class PaymentMethodSelector extends F{constructor(){super(...arguments),this.showWallets=!0,this._selected=null,this._confirm=()=>{this._selected&&this.dispatchEvent(new PaymentMethodSelectedEvent({method:this._selected}))}}static{this.styles=ri}willUpdate(e){e.has("showWallets")&&!this.showWallets&&(this._selected="card")}_select(e){this._selected=e}_renderRow(e,t,i,{disabled:s=!1}={}){const a=this._selected===e;return q`<button type="button" class="${N({option:!0,"option--selected":a,"option--disabled":s})}" role="radio" aria-checked="${a}" ?disabled="${s}" aria-disabled="${s}" @click="${()=>{s||this._select(e)}}"><span class="lead">${i} <span class="option__label">${t}</span> </span><span class="${N({radio:!0,"radio--checked":a})}"></span></button>`}_renderAction(e){return"google-pay"===this._selected&&e?q`<button type="button" class="wallet wallet--google" aria-label="${E("Pagar con Google Pay")}" @click="${this._confirm}"><span class="wallet__glyph">${ai()}</span> <span class="wallet__pay">Pay</span></button>`:"apple-pay"===this._selected?q`<button type="button" class="wallet wallet--apple" aria-label="${E("Pagar con Apple Pay")}" @click="${this._confirm}"><span class="wallet__glyph">${oi()}</span> <span class="wallet__pay">Pay</span></button>`:q`<mq-button class="confirm" variant="primary" size="md" fullwidth type="button" ?disabled="${null===this._selected}" @click="${this._confirm}">${E("Confirmar y pagar")}</mq-button>`}render(){const e="undefined"!=typeof window&&window.isSecureContext,t="undefined"!=typeof window&&window.isSecureContext;return q`<mq-card class="panel" elevation="none" roundness="lg"><div class="header"><h2 class="title">${E("Método de pago")}</h2><p class="subtitle">${E("Selecciona un método para realizar el pago de la cita")}</p></div><div class="body"><div class="options" role="radiogroup" aria-label="${E("Método de pago")}">${this._renderRow("card",E("Tarjeta"),q`<span class="lead__icon">${q`<svg width="16" height="16" viewBox="0 0 14.3333 10.3333" fill="none" xmlns="http://www.w3.org/2000/svg" aria-hidden="true"><path d="M0.5 3.83333H13.8333M1.83333 0.5H12.5C13.2364 0.5 13.8333 1.09695 13.8333 1.83333V8.5C13.8333 9.23638 13.2364 9.83333 12.5 9.83333H1.83333C1.09695 9.83333 0.5 9.23638 0.5 8.5V1.83333C0.5 1.09695 1.09695 0.5 1.83333 0.5Z" stroke="currentColor" stroke-width="1" stroke-linecap="round" stroke-linejoin="round"/></svg>`}</span>`)} ${this.showWallets?this._renderRow("google-pay",E("Google pay"),q`<span class="mark mark--google"><span class="mark__glyph">${ai()}</span> <span class="mark__pay">Pay</span></span>`,{disabled:!e}):null} ${this.showWallets&&t?this._renderRow("apple-pay",E("Apple pay"),q`<span class="mark mark--apple"><span class="mark__glyph">${oi()}</span> <span class="mark__pay">Pay</span></span>`):null}</div><div class="action">${this._renderAction(e)}</div></div></mq-card>`}};e([D({type:Boolean,attribute:"show-wallets"})],ni.prototype,"showWallets",void 0),e([X()],ni.prototype,"_selected",void 0),ni=e([P(),t("payment-method-selector")],ni);const li=A`: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}.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}}`,di="mediquo:payment:retry",ci="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 pi=class PaymentStep extends F{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._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,{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===w.Stripe){const e=new m({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=()=>"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 di:return void this.dispatchEvent(new PaymentRetryEvent);case ci:return void("number"==typeof e.data.height&&(this._iframeHeight=e.data.height))}}}static{this.styles=li}get isFullyDiscounted(){return null!=this.appliedDiscount&&Te(this.appliedDiscount)}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 J(this._paymentAmountCents()).toFixed(2)}_buildApplePayUrl(){return this.apiKey&&this.userToken?function(e){const t=new URL(`${si}/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.userToken,sessionId:this.sessionId,amount:this._paymentAmountLabel(),currency:this._paymentCurrency(),country:this.countryCode,label:this.service?.name??E("Consulta"),env:this.env,locale:this.locale,successUrl:this.successUrl}):null}_buildGooglePayUrl(){return this.apiKey&&this.userToken?function(e){const t=new URL(`${si}/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.userToken,sessionId:this.sessionId,amount:this._paymentAmountLabel(),currency:this._paymentCurrency(),country:this.countryCode,label:this.service?.name??E("Consulta"),env:this.env,locale:this.locale,successUrl:this.successUrl}):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 f.payments.getPaymentSession(this.sessionId);if(e.status===S.Paid)return this._stopPaymentPolling(),this._walletPopup?.close(),this._walletPopup=null,void this.dispatchEvent(new PaymentSuccessEvent({appointmentId:e.consultation_id}));e.status===S.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?E("No se puede iniciar Google Pay"):E("No se puede iniciar Apple Pay"):"google-pay"===this._walletWaiting?E("Esperando confirmación de Google Pay"):E("Esperando confirmación de Apple Pay")}_walletReopenLabel(){return"google-pay"===this._walletWaiting?E("Abrir Google Pay"):E("Abrir Apple Pay")}_walletReopenLinkLabel(){return"google-pay"===this._walletWaiting?E("Abrir ventana de Google Pay"):E("Abrir ventana de Apple Pay")}_walletReopenAgainLabel(){return"google-pay"===this._walletWaiting?E("Volver a abrir Google Pay"):E("Volver a abrir Apple Pay")}updated(e){super.updated(e),e.has("paymentUrl")&&(this._iframeLoaded=!1,this._iframeHeight=null)}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 q`<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}">${E("Confirmar cita")}</mq-button></div></div></div>`}_renderPaymentColumn(){return this._walletWaiting?this._walletConfigError?q`<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">${E("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}}">${E("Elegir otro método")}</mq-text-button></div></mq-card></div>`:q`<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">${E("No cierres esta página.")}</p>${this._walletPopupBlocked&&this._walletUrl?q`<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>`:q`<mq-text-button type="button" @click="${this._reopenWalletPopup}">${this._walletReopenAgainLabel()}</mq-text-button>`}</div></mq-card></div>`:"select"===this._view?q`<div class="payment-col__inner"><payment-method-selector .showWallets="${this.provider!==w.Stripe}" @payment-method-selected="${this._onPaymentMethodSelected}"></payment-method-selector></div>`:q`<div class="payment-col__inner"><div class="payment-frame">${this._iframeLoaded?null:q`<mq-skeleton width="100%" height="600px" border-radius="md" role="status" aria-live="polite" aria-label="${E("Cargando portal de pago")}"></mq-skeleton>`}<iframe class="${this._iframeLoaded?"loaded":""}" src="${this.paymentUrl}" title="${E("Portal de pago")}" style="${null!==this._iframeHeight?`min-height: ${this._iframeHeight}px; height: ${this._iframeHeight}px;`:""}" @load="${this._onIframeLoad}"></iframe></div></div>`}render(){if(this._timedOut)return q`<div class="error"><p class="error-title">${E("No hemos podido confirmar tu pago")}</p><p class="error-message">${E("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=q`<mq-page-title .title="${E("Petición de cita")}" .showBack="${this.showBack}" @mq-back="${this._onHeaderBack}"></mq-page-title>`;return this.isFullyDiscounted?q`${e}<div class="content content--free">${this._renderSummaryColumn()}<div class="payment-col" .inert="${!0}"></div></div>`:q`${e}<div class="content">${this._renderSummaryColumn()}<div class="payment-col">${this._renderPaymentColumn()}</div></div>`}};e([D({type:String})],pi.prototype,"sessionId",void 0),e([D({type:Boolean})],pi.prototype,"showBack",void 0),e([D({type:String})],pi.prototype,"paymentUrl",void 0),e([D({type:Object})],pi.prototype,"professional",void 0),e([D({type:String})],pi.prototype,"startsAt",void 0),e([D({type:Number})],pi.prototype,"duration",void 0),e([D({type:String})],pi.prototype,"channel",void 0),e([D({type:Object})],pi.prototype,"service",void 0),e([D({type:Object})],pi.prototype,"scheduleSlot",void 0),e([D({type:Object})],pi.prototype,"appliedDiscount",void 0),e([D({type:Object})],pi.prototype,"bookingRequest",void 0),e([D({type:String,attribute:!1})],pi.prototype,"apiKey",void 0),e([D({type:String,attribute:!1})],pi.prototype,"userToken",void 0),e([D({type:String,attribute:!1})],pi.prototype,"env",void 0),e([D({type:String,attribute:!1})],pi.prototype,"locale",void 0),e([D({type:String,attribute:!1})],pi.prototype,"countryCode",void 0),e([D({type:String,attribute:!1})],pi.prototype,"successUrl",void 0),e([D({type:String,attribute:!1})],pi.prototype,"provider",void 0),e([K({context:ne,subscribe:!0})],pi.prototype,"queryClientContext",void 0),e([X()],pi.prototype,"_view",void 0),e([X()],pi.prototype,"_walletWaiting",void 0),e([X()],pi.prototype,"_walletUrl",void 0),e([X()],pi.prototype,"_walletPopupBlocked",void 0),e([X()],pi.prototype,"_walletConfigError",void 0),e([X()],pi.prototype,"_timedOut",void 0),e([X()],pi.prototype,"_iframeLoaded",void 0),e([X()],pi.prototype,"_iframeHeight",void 0),pi=e([P(),t("payment-step")],pi);const hi=A`: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 ui=class ScheduleLoadingBanner extends F{static{this.styles=hi}render(){return q`<div class="banner" role="status" aria-live="polite">${Y({size:24,color:"var(--color-primary-default, var(--color-primary))"})}<p class="label">${E("Cargando")}</p></div>`}};ui=e([P(),t("schedule-loading-banner")],ui);const mi=A`.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}}`,vi=R.object({service:R.string().min(1),specialty:R.string().min(1)});class SearchProfessionalsFormSuccessEvent extends CustomEvent{static{this.eventName="success"}constructor(e){super(SearchProfessionalsFormSuccessEvent.eventName,{bubbles:!0,composed:!0,detail:e})}}let fi=class SearchProfessionalsForm extends F{constructor(){super(...arguments),this.form=new TanStackFormController(this,{defaultValues:this.defaultValues,onSubmit:e=>{const t=e.value;le.track(ce(this.patient.hash,t.specialty??"",t.service??"")),this.dispatchEvent(new SearchProfessionalsFormSuccessEvent(t))},validators:{onSubmit:vi}}),this.getScheduleServicesQuery=new i(this,()=>h(f)),this.getOrganizationSpecialtiesQuery=new i(this,()=>n(f))}static{this.styles=mi}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=z();return q`<mq-select label="${E("Modalidad de la cita")}" id="${U(e)}" value="${U(t)}" name="${U(e)}" size="lg" ?error="${s}" @onvaluechange="${e=>{i(e.value)}}">${a.map(e=>q`<mq-option value="${e.id}">${d(e.code??"",o,e.name)}</mq-option>`)}</mq-select>`}renderOrganizationSpecialties({name:e,value:t,onValueChange:i,error:s},a){const o=z();return q`<mq-select label="${E("Especialidad")}" id="${U(e)}" value="${U(t)}" name="${U(e)}" size="lg" ?error="${s}" @onvaluechange="${e=>{i(e.value)}}">${a.map(e=>q`<mq-option value="${e.id}">${c[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 q`<div class="form-container"><form class="form-content" @submit="${e=>{e.preventDefault(),e.stopPropagation(),this.form.api.handleSubmit()}}">${this.filtersLoading?q`<schedule-loading-banner class="filters-loading-banner"></schedule-loading-banner>`:a?q`<div class="field">${this.form.field({name:"service"},e=>q`<p class="field-title">${E("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=>q`<p class="field-title">${E("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>${E("Buscar disponibilidad")}</mq-button>`:I}</form></div>`}};function gi(e){if(!e)return new Date(Number.NaN);const t=b(e);if(ve(t))return t;const i=ye(e);if(ve(i))return i;const s=new Date(e);return Number.isNaN(s.getTime())?new Date(Number.NaN):s}function yi(e){const t=new Date;let i;for(const s of e){const e=gi(s.starts_at);ve(e)&&(we(e,t)&&(!i||Me(e,i)<0)&&(i=e))}return i?be(i):void 0}function bi(e,t){if(!e.length)return[];const i=e.reduce((e,i)=>{const s=gi(i.starts_at);if(!ve(s))return e;const a=function(e,t){if(!ve(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")}(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)=>Me(e.parsedDate,t.parsedDate)),date:t[0]?.parsedDate??new Date(Number.NaN)})).filter(({date:e})=>ve(e)).sort((e,t)=>Me(e.date,t.date))}e([K({context:Ae,subscribe:!0})],fi.prototype,"patient",void 0),e([D({type:Object})],fi.prototype,"defaultValues",void 0),fi=e([P(),t("search-professionals-form")],fi);const wi=A`: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-muted);flex:1 1 0;min-width:0;height:var(--sp-11);display:flex;align-items:center;justify-content:center;border:1px solid var(--color-border);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-neutrals-text-default);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:var(--color-primary-light)}.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}.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 Si=class ShowFullScheduleEvent extends Event{static{this.eventName="show-full-schedule"}constructor(){super(ShowFullScheduleEvent.eventName,{bubbles:!0,composed:!0})}},_i=class ProfessionalCard extends F{constructor(){super(...arguments),this.serviceId="",this.specialtyId="",this.showSlotUnavailableError=!1,this.getOrganizationSpecialtiesQuery=new i(this,()=>n(f)),this.checkForSlotAvailabilityMutation=new B(this,{mutationFn:e=>f.schedules.getScheduleSlot({slot_id:e,service_id:this.serviceId||void 0,speciality_id:this.specialtyId?Number(this.specialtyId):void 0})})}static{this.styles=wi}get groupedSlots(){const e=this.professional?.slots??[];return 0===e.length?[]:bi(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=z().replace("_","-"),i=new Intl.DateTimeFormat(t,{weekday:"short",...this.timezone?{timeZone:this.timezone}:{}}).format(e).replace(/\.$/,"");return`${i.charAt(0).toUpperCase()}${i.slice(1)}`}formatDate(e){const t=z().replace("_","-"),i=this.timezone?{timeZone:this.timezone}:{},s=new Intl.DateTimeFormat(t,{day:"numeric",...i}).format(e),a=new Intl.DateTimeFormat(t,{month:"short",...i}).format(e).replace(/\.$/,"");return`${s} ${`${a.charAt(0).toUpperCase()}${a.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,z().replace("_","-"),this.timezone)}async handleSlotClick(e){const t=await this.checkForSlotAvailabilityMutation.run(e.id);t.status===_.available?(this.showSlotUnavailableError=!1,le.track(pe(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())}render(){const e=z(),t=this.getOrganizationSpecialtiesQuery.result?.data?.find(e=>e.id===this.professional.speciality.id),i=l(t?.code??"",e,t?.name);return q`<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="${N({"schedules-container":!0,"is-pending":this.checkForSlotAvailabilityMutation.isPending})}">${this.showSlotUnavailableError?q`<p class="error-message">${E("Este horario no está disponible. Por favor, seleccione otro.")}</p>`:I}<div class="schedules">${this.groupedSlots.length>0?this.groupedSlots.map(e=>q`<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})=>q`<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(()=>q`<div class="schedule-slot is-empty">-</div>`)}</div>`):q`<div class="no-slots">${E("Sin huecos disponibles actualmente")}</div>`}</div><mq-button fullwidth @click="${()=>{le.track(he(this.patient.hash,this.professional.id,this.specialtyId,this.serviceId)),this.dispatchEvent(new Si)}}">${xe({size:24})} ${E("Ver agenda completa")}</mq-button></div></mq-card>`}};e([K({context:Ae,subscribe:!0})],_i.prototype,"patient",void 0),e([D({type:Object})],_i.prototype,"professional",void 0),e([D({type:String})],_i.prototype,"serviceId",void 0),e([D({type:String})],_i.prototype,"specialtyId",void 0),e([X()],_i.prototype,"showSlotUnavailableError",void 0),e([K({context:ne,subscribe:!0})],_i.prototype,"queryClientContext",void 0),_i=e([P(),t("professional-card")],_i);const xi=A`: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)}.description{font-size:var(--text-sm);line-height:var(--text-sm--line-height);font-weight:var(--font-weight-normal);margin:0}`;class ShowFullScheduleEvent extends Event{static{this.eventName="show-full-schedule"}constructor(e){super(ShowFullScheduleEvent.eventName,{bubbles:!0,composed:!0}),this.detail=e}}let $i=class ProfessionalsList extends F{constructor(){super(...arguments),this.specialty_id=void 0,this.service_id=void 0,this.getOrganizationSpecialtiesQuery=new i(this,()=>n(f)),this.getScheduleServicesQuery=new i(this,()=>h(f)),this.getProfessionalsBySpecialtyAndServiceQuery=new i(this,()=>{return e=f,{queryKey:["professionals-by-specialty-and-service",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}],queryFn:t.speciality_id&&t.organization_schedule_service_id?()=>e.schedules.getProfessionalsBySpecialtyAndService(t):$e,staleTime:0};var e,t})}static{this.styles=xi}render(){const e=z(),t=this.getOrganizationSpecialtiesQuery.result?.data?.find(e=>e.id===Number(this.specialty_id)),i=this.getScheduleServicesQuery.result?.data?.find(e=>e.id===this.service_id);if(!this.specialty_id||!this.service_id)return I;const s=c[t?.code]?.[e]??t?.name??"",a=d(i?.code??"",e,i?.name);return this.getProfessionalsBySpecialtyAndServiceQuery.render({pending:()=>q`<div id="professionals-results"><schedule-loading-banner></schedule-loading-banner></div>`,complete:e=>{if(0===e.length)return q`<mq-callout background="default" variant="info">${E("No hay profesionales disponibles para la especialidad seleccionada. Por favor, vuelve a intentarlo en otro momento o selecciona otra especialidad.")}</mq-callout>`;const t=e[0],o=t?.slots?.[0];return le.track(ue(this.patient.hash,this.specialty_id??"",this.service_id??"",o?.starts_at??"",t?.id??"",e.length,e.reduce((e,t)=>e+(t.slots?.length??0),0))),q`<div id="professionals-results"><p class="title">${E("Selecciona tu especialista")}</p><p class="description">${E(M`Resultados de citas de ${a} para ${s}`)}</p></div>${e.map(e=>q`<professional-card .professional="${e}" .serviceId="${this.service_id??""}" .specialtyId="${this.specialty_id??""}" @show-full-schedule="${t=>{t.stopPropagation();const s=this.service_id,a=this.specialty_id;void 0!==i&&void 0!==s&&void 0!==a&&this.dispatchEvent(new ShowFullScheduleEvent({professional:e,serviceId:s,service:i,specialtyId:a,firstAvailableSlotDate:yi(e.slots)}))}}"></professional-card>`)}`}})}};e([K({context:Ae,subscribe:!0})],$i.prototype,"patient",void 0),e([D({type:String})],$i.prototype,"specialty_id",void 0),e([D({type:String})],$i.prototype,"service_id",void 0),$i=e([P(),t("professionals-list")],$i);const ki=A`.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 Ci=class SuccessEvent extends Event{static{this.eventName="success"}constructor(e){super(SuccessEvent.eventName,{bubbles:!0,composed:!0}),this.detail=e}},Ei=class SelectProfessionalStep extends F{constructor(){super(...arguments),this.defaultSpecialty=void 0,this.defaultService=void 0,this.showBack=!0,this.formData=void 0,this.getScheduleServicesQuery=new i(this,()=>h(f)),this.getOrganizationSpecialtiesQuery=new i(this,()=>n(f))}static{this.styles=ki}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(),le.track(me(this.patient.hash))}scrollToProfessionalsList(){setTimeout(()=>{this.shadowRoot?.querySelector("professionals-list")?.scrollIntoView({behavior:"smooth"})},0)}render(){return q`<div class="container"><mq-page-title .title="${E("Petición de cita")}" .showBack="${this.showBack}" @mq-back="${()=>this.dispatchEvent(new CustomEvent("back"))}"></mq-page-title><div class="page-container">${this.isScheduleFiltersReady?I:q`<schedule-loading-banner></schedule-loading-banner>`} ${this.isScheduleFiltersReady&&this.showSearchForm?q`<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>`:I} ${this.isScheduleFiltersReady?q`<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 Ci({slot:e.detail.slot,serviceId:t.service_id,service:i,specialtyId:t.specialty_id,professional:e.detail.professional}))}}"></professionals-list>`:I}</div></div>`}};function Mi(e,t){return{queryKey:["schedule-service-professional-slots",t],queryFn:()=>e.schedules.getScheduleServiceProfessionalSlots(t)}}e([K({context:Ae,subscribe:!0})],Ei.prototype,"patient",void 0),e([D({type:String})],Ei.prototype,"defaultSpecialty",void 0),e([D({type:String})],Ei.prototype,"defaultService",void 0),e([D({type:Boolean})],Ei.prototype,"showBack",void 0),e([X()],Ei.prototype,"formData",void 0),Ei=e([P(),t("select-professional-step")],Ei);const Pi=()=>"undefined"!=typeof window&&window.innerWidth>=Ce.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 Ii=A`:host{display:block}.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 Ai=class DaysWindowView extends F{constructor(){super(...arguments),this.specialityId=void 0,this.reschedulingAppointmentId=void 0,this.windowStartDate=be(new Date),this.errorMessage=void 0,this.checkForSlotAvailabilityMutation=new B(this,{mutationFn:e=>f.schedules.getScheduleSlot({slot_id:e,service_id:this.serviceId||void 0,speciality_id:this.specialityId})}),this._visibleDays=Pi(),this.getScheduleServiceProfessionalSlotsQuery=new i(this,()=>{const e=be(Ee(this.windowStartDate,new Date)?new Date:this.windowStartDate),t=Pe(ke(e,this._visibleDays-1));return Mi(f,{service_id:this.serviceId,professional_hash:this.professionalId,starts_at:x(e),finishes_at:x(t),rescheduling_appointment_id:this.reschedulingAppointmentId})})}static{this.styles=Ii}connectedCallback(){super.connectedCallback(),this._resizeHandler=()=>{const e=Pi();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?.isPending,i=this.getScheduleServiceProfessionalSlotsQuery.result?.data?.filter(t=>we(b(t.starts_at),e)&&t.status===_.available),s=i?.map(e=>({key:e.id,date:b(e.starts_at).toISOString()})),a=z().replace("_","-");return q`<mq-card class="card" roundness="md"><mq-button @click="${()=>this.dispatchEvent(new CustomEvent("to-calendar-view"))}">${xe({size:24})} ${E("Elige otra fecha")}</mq-button>${this.errorMessage?q`<p class="error-message">${this.errorMessage}</p>`:I}<mq-time-slot-picker .locale="${a}" .timezone="${this.patient.timezone}" .visibleDays="${this._visibleDays}" .slots="${s??[]}" .windowStartDate="${fe(this.windowStartDate,"yyyy-MM-dd")}" ?is-loading="${t}" @window-change="${e=>{this.windowStartDate=new Date(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===_.available?this.dispatchEvent(new SlotSelectEvent({slot:i})):this.dispatchEvent(new SlotUnavailableEvent)}}"></mq-time-slot-picker></mq-card>`}};e([D({type:String})],Ai.prototype,"professionalId",void 0),e([D({type:String})],Ai.prototype,"serviceId",void 0),e([D({type:Number})],Ai.prototype,"specialityId",void 0),e([D({type:String})],Ai.prototype,"reschedulingAppointmentId",void 0),e([D({type:Object})],Ai.prototype,"windowStartDate",void 0),e([D({type:String,attribute:"error-message"})],Ai.prototype,"errorMessage",void 0),e([K({context:Ae,subscribe:!0})],Ai.prototype,"patient",void 0),Ai=e([P(),t("days-window-view")],Ai);const Fi=A`:host{display:block;max-width:var(--content-max-width);margin:0 auto}`;let qi=class CalendarView extends F{constructor(){super(...arguments),this.reschedulingAppointmentId=void 0,this.initialDate=void 0,this.currentMonth=new Date,this.getScheduleServiceProfessionalSlotsQuery=new i(this,()=>{const e=Se(this.currentMonth),t=be(Ee(e,new Date)?new Date:e),i=Pe(_e(t));return Mi(f,{service_id:this.serviceId,professional_hash:this.professionalId,starts_at:x(t),finishes_at:x(i),rescheduling_appointment_id:this.reschedulingAppointmentId})})}static{this.styles=Fi}connectedCallback(){super.connectedCallback(),this.initialDate&&(this.currentMonth=this.initialDate)}render(){const e=new Date,t=this.getScheduleServiceProfessionalSlotsQuery.result?.isPending,i=this.getScheduleServiceProfessionalSlotsQuery.result?.data?.filter(t=>we(b(t.starts_at),e)&&t.status===_.available),s=i&&i.length>0?Array.from(new Set(i.map(e=>{const t=b(e.starts_at);return be(t).toISOString()}))):void 0,a=z().replace("_","-");return q`<mq-calendar locale="${a}" ?is-loading="${t}" .currentMonth="${this.currentMonth.toISOString()}" .availableDays="${s}" @prev-month="${e=>{this.currentMonth=new Date(e.detail.currentMonth)}}" @next-month="${e=>{this.currentMonth=new Date(e.detail.currentMonth)}}"></mq-calendar>`}};e([D({type:String})],qi.prototype,"professionalId",void 0),e([D({type:String})],qi.prototype,"serviceId",void 0),e([D({type:String})],qi.prototype,"reschedulingAppointmentId",void 0),e([D({type:Object})],qi.prototype,"initialDate",void 0),e([X()],qi.prototype,"currentMonth",void 0),qi=e([t("calendar-view")],qi);class SuccessEvent extends Event{static{this.eventName="success"}constructor(e){super(SuccessEvent.eventName,{bubbles:!0,composed:!0}),this.detail=e}}const Di=A`: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 Vi=class SelectSlotStep extends F{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=f,t=this.serviceId,i={enabled:!!this.serviceId},{queryKey:["schedule-service-specialities",t],queryFn:()=>e.schedules.getScheduleServiceSpecialities(t),...i};var e,t,i}),this.view="days-window",this.windowStartDate=be(new Date)}static{this.styles=Di}connectedCallback(){super.connectedCallback(),this.initialDate&&(this.windowStartDate=be(this.initialDate))}renderView(){return"days-window"===this.view?q`<days-window-view .errorMessage="${this.errorMessage}" .professionalId="${this.professionalId}" .serviceId="${this.serviceId}" .specialityId="${this.professional?.speciality?.id}" .reschedulingAppointmentId="${this.reschedulingAppointmentId}" .windowStartDate="${this.windowStartDate}" @to-calendar-view="${()=>{this.view="calendar"}}" @slot-select="${e=>{this.dispatchEvent(new SuccessEvent({slot:e.detail.slot}))}}" @slot-unavailable="${()=>{this.errorMessage=E("Este horario no está disponible. Por favor, seleccione otro."),this.queryClientContext?.invalidateQueries()}}"></days-window-view>`:q`<calendar-view .professionalId="${this.professionalId}" .serviceId="${this.serviceId}" .reschedulingAppointmentId="${this.reschedulingAppointmentId}" .initialDate="${this.initialDate}" @date-select="${e=>{this.windowStartDate=new Date(e.detail.date),this.view="days-window"}}"></calendar-view>`}render(){const e=this.getScheduleServiceSpecialitiesQuery.result?.data?.find(e=>e.id===this.professional?.speciality?.id)?.price??null;return q`<mq-page-title .title="${"schedule"===this.kind?E("Petición de cita"):E("Modificar cita")}" .showBack="${this.showBack}" @mq-back="${()=>this.dispatchEvent(new CustomEvent("back"))}"></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([D({type:String})],Vi.prototype,"kind",void 0),e([D({type:Boolean})],Vi.prototype,"showBack",void 0),e([D({type:String})],Vi.prototype,"serviceId",void 0),e([D({type:String})],Vi.prototype,"professionalId",void 0),e([D({type:String})],Vi.prototype,"reschedulingAppointmentId",void 0),e([D({type:Object})],Vi.prototype,"professional",void 0),e([D({type:String})],Vi.prototype,"startsAt",void 0),e([D({type:Number})],Vi.prototype,"duration",void 0),e([D({type:String})],Vi.prototype,"channel",void 0),e([D({type:String,attribute:"error-message"})],Vi.prototype,"errorMessage",void 0),e([D({type:Object})],Vi.prototype,"initialDate",void 0),e([D({type:Object})],Vi.prototype,"service",void 0),e([D({type:Object})],Vi.prototype,"appliedDiscount",void 0),e([K({context:ne,subscribe:!0})],Vi.prototype,"queryClientContext",void 0),e([X()],Vi.prototype,"view",void 0),e([X()],Vi.prototype,"windowStartDate",void 0),Vi=e([P(),t("select-slot-step")],Vi);let zi=class SelectSlotStepSkeleton extends F{static{this.styles=A`: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 q`<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><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 ji(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}}zi=e([t("select-slot-step-skeleton")],zi),j();class AppointmentCreatedEvent extends Event{static{this.eventName="appointment-created"}constructor(e){super(AppointmentCreatedEvent.eventName,{bubbles:!0,composed:!0}),this.detail=e}}let Li=class MqSchedule extends F{constructor(){super(...arguments),this.requiresPayment=!0,this.showBackButton=!0,this._patient=new C(this,{context:Ae,initialValue:{hash:"",name:"",timezone:"UTC"}}),this._emittedCreated=!1,this.getAppointmentQuery=new i(this,()=>s(f,{id:this.appointmentId??""},{enabled:!!this.appointmentId})),this.getProfessionalQuery=new i(this,()=>{return e=f,t={hash:this.defaultProfessionalHash??""},i={enabled:!!this.defaultProfessionalHash},{queryKey:["professional-public-profile",t.hash],queryFn:()=>e.profile.getProfessionalPublicProfile(t),...i};var e,t,i}),this.getScheduleSlotQuery=new i(this,()=>{const e=this.getScheduleServicesQuery.result?.data,t=this.getOrganizationSpecialtiesQuery.result?.data;return i=f,s={slot_id:this.defaultSlotId??"",service_id:qe(this.defaultService,e)?.id,speciality_id:Fe(this.defaultSpecialty,t)},a={enabled:!!(this.defaultSlotId&&this.token&&e&&t)},{queryKey:["schedules","slot",s.slot_id,s.service_id,s.speciality_id],queryFn:()=>i.schedules.getScheduleSlot(s),...a};var i,s,a}),this.getPatientProfileQuery=new i(this,()=>p(f,{enabled:!!this.token})),this.getOrganizationSpecialtiesQuery=new i(this,()=>n(f)),this.getScheduleServicesQuery=new i(this,()=>h(f)),this.getOrganizationSetupQuery=new i(this,()=>a(f,{enabled:"reschedule"===this.kind}))}static{this.styles=A`.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&&V(this.env),e.has("apiKey")&&this.apiKey&&f.setApiKey(this.apiKey),e.has("token")&&this.token&&f.setAuthToken(this.token),e.has("locale")&&this.locale&&L(this.locale)&&(O(this.locale),f.setLanguage(this.locale));const t=this.getPatientProfileQuery.result?.data;this._patient.setValue({hash:t?.hash??"",name:$(t),timezone:this.timezone||Intl.DateTimeFormat().resolvedOptions().timeZone})}_initWizard(e,t,i){return this._wizard||(this._wizard=new Ie(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,userToken:this.userToken,env:this.env,locale:this.locale,countryCode:e?.profile.billing.country_code??void 0,successUrl:this.applePaySuccessUrl,returnUrl:this.returnUrl}}_renderStep(e,t){const i=e.canGoBack||this.showBackButton;return function(e,t,i,s,a,o){const r=E("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 q`<select-professional-step .defaultSpecialty="${t.specialty}" .defaultService="${t.service?.id}" .showBack="${d}" @show-full-schedule="${e=>{i.goTo("selectSlot",{service:e.detail.service,specialty:e.detail.specialtyId,professional:ji(e.detail.professional),firstAvailableSlotDate:e.detail.firstAvailableSlotDate,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:ji(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?q`<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>`:I}if(!l)return I;const e=t.service;return e?q`<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.firstAvailableSlotDate}" .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>`:q`<select-slot-step-skeleton></select-slot-step-skeleton>`}if("completeProfile"===e){const e=t.slot;return s?e&&s.service_id&&n?q`<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>`:I:e&&l&&t.service?q`<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>`:I}if("confirm"===e){const e=t.slot;return s?e&&s.service_id&&n?q`<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>`:I:e&&l&&t.service?q`<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>`:I}if("payment"===e){const e=t.paymentSessionId,s=t.paymentUrl,a=l,r=t.slot;return e&&a&&r?q`<payment-step .showBack="${d}" .sessionId="${e}" .paymentUrl="${s??""}" .professional="${a}" .startsAt="${r.starts_at}" .duration="${r.duration}" .channel="${t.service?.channel??r.channel}" .service="${t.service}" .scheduleSlot="${r}" .appliedDiscount="${t.appliedDiscount??null}" .bookingRequest="${t.paymentRequest??null}" .provider="${t.paymentProvider}" .apiKey="${o?.apiKey}" .userToken="${o?.userToken}" .env="${o?.env??"production"}" .locale="${o?.locale??"es_ES"}" .countryCode="${o?.countryCode??"ES"}" .successUrl="${o?.successUrl}" @back="${i.back}" @success="${e=>i.onCreated(e.detail.appointmentId)}" @discount-applied="${async e=>{if(i.update({appliedDiscount:e.detail}),Te(e.detail))return;const s=t.paymentRequest;if(!s)return;const a={...s,discount_code:e.detail.code};try{const e=await f.payments.createPaymentLink(a);i.update({paymentSessionId:e.session_id,paymentUrl:e.payment_link,paymentRequest:a,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 f.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>`:I}return I}(e.current,e.ctx,this._stepHandlers(e),t,{showBack:i,isAuthenticated:!!this.token},this._hostConfig())}renderReschedulePolicyBlocked(){return q`<div class="reschedule-policy-blocked"><p>${E("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"}))}">${E("Volver")}</mq-button></div>`}render(){const e=q`<select-slot-step-skeleton></select-slot-step-skeleton>`;if(this.token&&this.getPatientProfileQuery.result?.isPending)return e;const t=!!this.getPatientProfileQuery.result?.data&&k(this.getPatientProfileQuery.result.data);if("reschedule"===this.kind){const i=this.getAppointmentQuery.result,s=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(!u({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,firstAvailableSlotDate: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(Oe,r);return n.reconcile({profileComplete:t}),this._renderStep(n,a)}if(this.defaultProfessionalHash){const i=this.getProfessionalQuery.result;if(!i||i.isPending)return e;const s=!!this.defaultSlotId&&!!this.token,a=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=De({defaultSpecialty:this.defaultSpecialty,defaultService:this.defaultService,defaultProfessionalHash:this.defaultProfessionalHash,specialties:this.getOrganizationSpecialtiesQuery.result?.data,services:this.getScheduleServicesQuery.result?.data,professional:i.data,profileComplete:t,requiresPayment:this.requiresPayment}),d=this._initWizard(Le,{...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=De({defaultSpecialty:this.defaultSpecialty,defaultService:this.defaultService,defaultProfessionalHash:void 0,specialties:this.getOrganizationSpecialtiesQuery.result?.data,services:this.getScheduleServicesQuery.result?.data,professional:void 0,profileComplete:t,requiresPayment:this.requiresPayment}),s=this._initWizard(je,i);return s.reconcile({profileComplete:t,service:i.service??s.ctx.service,specialty:s.ctx.specialty??i.specialty}),this._renderStep(s,void 0)}};e([D({type:String,attribute:"default-specialty"})],Li.prototype,"defaultSpecialty",void 0),e([D({type:String,attribute:"default-service"})],Li.prototype,"defaultService",void 0),e([D({type:String,attribute:"default-professional-hash"})],Li.prototype,"defaultProfessionalHash",void 0),e([D({type:String,attribute:"default-slot-id"})],Li.prototype,"defaultSlotId",void 0),e([D({type:String,attribute:"kind"})],Li.prototype,"kind",void 0),e([D({type:Boolean,attribute:"requires-payment"})],Li.prototype,"requiresPayment",void 0),e([D({type:String,attribute:"appointment-id"})],Li.prototype,"appointmentId",void 0),e([D({type:Boolean,attribute:"show-back-button",converter:{fromAttribute:e=>null===e||"false"!==e&&"0"!==e,toAttribute:e=>e?"":"false"}})],Li.prototype,"showBackButton",void 0),e([D({type:String,attribute:"api-key"})],Li.prototype,"apiKey",void 0),e([D({type:String,attribute:"token"})],Li.prototype,"token",void 0),e([D({type:String,attribute:"locale"})],Li.prototype,"locale",void 0),e([D({type:String,attribute:"env"})],Li.prototype,"env",void 0),e([D({type:String,attribute:"user-token"})],Li.prototype,"userToken",void 0),e([D({type:String,attribute:"apple-pay-success-url"})],Li.prototype,"applePaySuccessUrl",void 0),e([D({type:String,attribute:"return-url"})],Li.prototype,"returnUrl",void 0),e([D({type:String,attribute:"timezone"})],Li.prototype,"timezone",void 0),Li=e([P(),t("mq-schedule")],Li);export{AppointmentCreatedEvent,AuthRequiredEvent,Li as MqSchedule};
1
+ import{_ as e,c as t}from"./chunks/custom-element-D2ziPxYE.js";import{Q as i}from"./chunks/query-controller-D7jBX4X7.js";import{g as s}from"./chunks/get-appointment-query-lJe75hGS.js";import{g as a}from"./chunks/get-organization-setup-query-DxHNY0w8.js";import{S as o,b as r,g as n,a as l,c as d,d as c}from"./chunks/i18n-formats-EgnwLxKt.js";import{g as p}from"./chunks/get-patient-profile-query-DiU2f_QH.js";import{s as h}from"./chunks/chunk-6CCJWPGL-DlOpbEYH.js";import{g as u}from"./chunks/get-schedule-services-query-Ckvz9Fqh.js";import{c as m}from"./chunks/refund-cancel-policy-qaBi5AHH.js";import{MqPaymentRedirectEvent as v,MqBackEvent as f}from"./events.js";import{a as g,e as y,A as b,b as w,f as _,P as S,S as x,h as $,j as k,k as C}from"./chunks/api-chat-client-BsiZ3A6g.js";import"./ui/mq-button.js";import{i as E}from"./chunks/context-provider--AKuwfs9.js";import{m as M,s as P}from"./chunks/runtime-Bg1WXVCx.js";import{l as I}from"./chunks/localized-decorator-BlOuLhym.js";import{E as A,i as F,a as q,x as D}from"./chunks/lit-element-DiWJYFwC.js";import{n as V}from"./chunks/property-scuRaFcM.js";import{e as z,i as j,t as L}from"./chunks/directive-2EDmOukv.js";import{m as O,f as B}from"./chunks/index-63zQSBy4.js";import{setEnv as T}from"./env.js";import{getLocale as N,initLocalization as U,isValidLocale as R,setLocale as Q}from"./i18n.js";import{n as W}from"./chunks/create-context-DqP79qjF.js";import{M as H}from"./chunks/mutation-controller-CR2qcqhH.js";import{e as K}from"./chunks/class-map-Co76I6aw.js";import{o as G}from"./chunks/if-defined-BYeVdwgd.js";import{z as Z}from"./chunks/external-CJj32K_p.js";import"./ui/mq-input.js";import"./ui/mq-callout.js";import"./ui/mq-page-title.js";import{c as J}from"./chunks/consume-BhoQNO_8.js";import"./chunks/professional-overview-C4H_znIJ.js";import"./chunks/appointment-details-D7Rw3Hyl.js";import"./ui/mq-card.js";import{r as X}from"./chunks/state-LQivXIgA.js";import{spinnerIcon as Y}from"./ui/icons/spinner-icon.js";import{tagIcon as ee}from"./ui/icons/tag-icon.js";import{h as te,f as ie,c as se}from"./chunks/price-DU3YLTpk.js";import{toast as ae}from"./ui/mq-toast.js";import{e as oe}from"./chunks/query-CeeutdfT.js";import{fileIcon as re}from"./ui/icons/file-icon.js";import{uploadIcon as ne}from"./ui/icons/upload-icon.js";import{xIcon as le}from"./ui/icons/x-icon.js";import"./ui/mq-textarea.js";import{l as de}from"./chunks/chunk-4FFT6DC2-CVWibomC.js";import{Q as ce}from"./chunks/chunk-RCFIJTXZ-C6Ir0-sM.js";import{t as pe,s as he,q as ue,u as me,w as ve,x as fe,y as ge}from"./chunks/telemetry-client-Bkbn48Dd.js";import"./ui/mq-skeleton.js";import"./ui/mq-text-button.js";import"./ui/mq-select.js";import{i as ye,f as be}from"./chunks/format-CRFiCNHw.js";import{t as we,p as _e,s as Se}from"./chunks/parseISO-Dj3qSTG8.js";import{i as xe,s as $e,e as ke}from"./chunks/index-Ca-l41nB.js";import{calendarIcon as Ce}from"./ui/icons/calendar-icon.js";import{y as Ee}from"./chunks/query-Cjvi4_dT.js";import{a as Me}from"./chunks/index-m6lXVNW0.js";import{breakpoints as Pe}from"./theme.js";import{i as Ie}from"./chunks/isBefore-CPpTogxo.js";import"./chunks/context-request-event-Dfydf1ub.js";import"./chunks/style-map-CIdqdn7C.js";import"./ui/icons/types.js";import"./ui/icons/info-circle-outine-icon.js";import"./ui/icons/arrow-narrow-left-icon.js";import"./ui/icons/chevron-down-icon.js";import"./ui/mq-avatar.js";import"./chunks/addSeconds-ofMnxlgT.js";import"./ui/icons/briefcase-icon.js";import"./ui/icons/clock-icon.js";import"./ui/icons/message-bubble-icon.js";import"./ui/icons/phone-icon.js";import"./ui/icons/chevron-left-icon.js";import"./ui/icons/chevron-right-icon.js";import"./chunks/isSameDay-CuhZMy1T.js";function Ae(e,t){const i=+we(e)-+we(t);return i<0?-1:i>0?1:i}function Fe(e,t){const i=we(e,t?.in);return i.setHours(23,59,59,999),i}var qe=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 De=z(class extends j{constructor(){super(...arguments),this.key=A}render(e,t){return this.key=e,t}update(e,[t,i]){return t!==this.key&&(O(e),this.key=t),i}}),Ve=W(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 ze(e,t){if(!e)return;const i=function(e){if(e)return r[e]??e}(e);return t?.find(t=>t.code===i||String(t.id)===e)?.id}function je(e,t){if(!e)return;const i=o[e];return i?t?.find(e=>e.channel===i):t?.find(t=>t.code===e||t.id===e)}function Le(e){const t=ze(e.defaultSpecialty,e.specialties),i=je(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,firstAvailableSlotDate: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 Oe={name:"completeProfile",skipIf:e=>e.profileComplete},Be={name:"payment",skipIf:e=>!e.requiresPayment},Te=[{name:"selectProfessional"},{name:"selectSlot"},Oe,{name:"confirm"},Be,{name:"done"}],Ne=[{name:"selectSlot"},Oe,{name:"confirm"},Be,{name:"done"}],Ue=[{name:"selectSlot"},Oe,{name:"confirm"},{name:"done"}];function Re(e){return e.totalAmount<=0}class InvalidDiscountCodeError extends Error{constructor(e="Invalid discount code"){super(e),this.name="InvalidDiscountCodeError"}}function Qe(e,t){t.stopPropagation(),e.dispatchEvent(new CustomEvent("back"))}const We=new WeakMap,He=new WeakMap,Ke={current:[]};let Ge=!1,Ze=0;const Je=new Set,Xe=new Map;function Ye(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(Ke.current.includes(e))continue;Ke.current.push(e),e.recompute();const t=He.get(e);if(t)for(const e of t){const t=We.get(e);t&&Ye(t)}}}function et(e){const t={prevVal:e.prevState,currentVal:e.state};for(const i of e.listeners)i(t)}function tt(e){const t={prevVal:e.prevState,currentVal:e.state};for(const i of e.listeners)i(t)}function it(e){if(Ze>0&&!Xe.has(e)&&Xe.set(e,e.prevState),Je.add(e),!(Ze>0||Ge))try{for(Ge=!0;Je.size>0;){const e=Array.from(Je);Je.clear();for(const t of e){const e=Xe.get(t)??t.prevState;t.prevState=e,et(t)}for(const t of e){const e=We.get(t);e&&(Ke.current.push(t),Ye(e))}for(const t of e){const e=We.get(t);if(e)for(const t of e)tt(t)}}}finally{Ge=!1,Ke.current=[],Xe.clear()}}function st(e){Ze++;try{e()}finally{if(Ze--,0===Ze){const e=Je.values().next().value;e&&it(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),it(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=We.get(t);e||(e=new Set,We.set(t,e)),e.add(this);let i=He.get(this);i||(i=new Set,He.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=We.get(t);e&&e.delete(this);const i=He.get(this);i&&i.delete(t)}}}function at(e,t){return"function"==typeof e?e(t):e}function ot(e,t){return mt(t).reduce((e,t)=>null===e?null:void 0!==e?e[t]:void 0,e)}function rt(e,t,i){const s=mt(t);return function e(t){if(!s.length)return at(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 nt=/^(\d+)$/gm,lt=/\.(\d+)(?=\.)/gm,dt=/^(\d+)\./gm,ct=/\.(\d+$)/gm,pt=/\.{2,}/gm,ht="__int__",ut=`${ht}$1`;function mt(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(nt,ut).replace(lt,`.${ut}.`).replace(dt,`${ut}.`).replace(ct,`.${ut}`).replace(pt,".").split(".").map(e=>{if(e.startsWith(ht)){const t=e.substring(ht.length),i=parseInt(t,10);return String(i)===t?i:t}return e})}function vt(e){return!(Array.isArray(e)&&0===e.length)}function ft(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 gt(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 yt=e=>!!e&&"object"==typeof e&&"fields"in e;function bt(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)||!bt(e[a],t[a]))return!1;return!0}const wt=({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},_t=({formLevelError:e,fieldLevelError:t})=>t?{newErrorValue:t,newSource:"field"}:e?{newErrorValue:e,newSource:"form"}:{newErrorValue:void 0,newSource:void 0};function St(e,t){return null==e?t:{...e,...t}}let xt=256;const $t=[];let kt;for(;xt--;)$t[xt]=(xt+256).toString(16).substring(1);const Ct=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 Et=(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}},Mt={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:Et(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:Et(s.issues,e)}},Pt=e=>!!e&&"~standard"in e,It={isValidating:!1,isTouched:!1,isBlurred:!1,isDirty:!1,isPristine:!0,isValid:!0,isDefaultValue:!0,errors:[],errorMap:{},errorSourceMap:{}};function At(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=()=>It,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 Ft=new class FormEventClient extends EventClient{constructor(){super({pluginId:"form-devtools"})}};function qt(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(),Ft.emit("form-unmounted",{id:this._formId})};this.options.listeners?.onMount?.({formApi:this});const{onMount:s}=this.options.validators||{};return Ft.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&&!bt(e.defaultValues,t.defaultValues)&&!this.state.isTouched,a=!bt(e.defaultState,t.defaultState)&&!this.state.isTouched;(s||a||i)&&st(()=>{this.baseStore.setState(()=>qt(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(()=>qt({...this.options.defaultState,values:e??this.options.defaultValues??this.options.defaultState?.values,fieldMetaBase:s}))},this.validateAllFields=async e=>{const t=[];st(()=>{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=[];st(()=>{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=ft(e,{...this.options,form:this,validationLogic:this.options.validationLogic||Ct});let i=!1;const s={};return st(()=>{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}=Dt(t),r=Vt(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}=wt({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=Vt("submit");this.state.errorMap?.[a]&&"submit"!==e&&!i&&this.baseStore.setState(e=>({...e,errorMap:{...e.errorMap,[a]:void 0}}));const o=Vt("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=gt(e,{...this.options,form:this,validationLogic:this.options.validationLogic||Ct});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=Vt(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}=Dt(i);r&&(s=s?{...s,...r}:r);const n=Vt(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}=wt({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=>ot(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]:at(t,i.fieldMetaBase[e])}}))},this.resetFieldMeta=e=>Object.keys(e).reduce((e,t)=>(e[t]=It,e),{}),this.setFieldValue=(e,t,i)=>{const s=i?.dontUpdateMeta??!1,a=i?.dontRunListeners??!1,o=i?.dontValidate??!1;st(()=>{s||this.setFieldMeta(e,e=>({...e,isTouched:!0,isDirty:!0,errorMap:{...e?.errorMap,onMount:void 0}})),this.baseStore.setState(i=>({...i,values:rt(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=mt(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)],St(s,{dontValidate:!0})),await this.validateField(e,"change"),At(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),St(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),St(i,{dontValidate:!0})),At(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 rt(rt(e,`${t}`,a),`${i}`,s)},St(s,{dontValidate:!0})),At(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},St(s,{dontValidate:!0})),At(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,[],St(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]:It},values:this.options.defaultValues?rt(t.values,e,ot(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=>Mt.validate({value:this.state.values,validationSource:"form"},e),this.parseValuesWithSchemaAsync=e=>Mt.validateAsync({value:this.state.values,validationSource:"form"},e),this.timeoutIds={validations:{},listeners:{},formListeners:{}},this._formId=e?.formId??function(){let e,t=0,i="";if(!kt||xt+16>256){for(kt=new Array(256),t=256;t--;)kt[t]=256*Math.random()|0;t=0,xt=0}for(;t<16;t++)e=kt[xt+t],i+=6===t?$t[15&e|64]:8===t?$t[63&e|128]:$t[e],1&t&&t>1&&t<11&&(i+="-");return xt++,i}(),this._devtoolsSubmissionOverride=!1,this.baseStore=new Store(qt({...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=ot(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=!vt(c??[]),h=!t.isDirty,u=bt(d,ot(this.options.defaultValues,e))||bt(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&&yt(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&&bt(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(()=>{Ft.emit("form-state-change",{id:this._formId,state:this.store.state,options:this.options})}),Ft.on("request-form-state",e=>{e.payload.id===this._formId&&Ft.emit("form-state-change",{id:this._formId,state:this.store.state,options:this.options})}),Ft.on("request-form-reset",e=>{e.payload.id===this._formId&&this.reset()}),Ft.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 Pt(e.validate)?Mt[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})),st(()=>{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 Ft.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 Ft.emit("form-submission-state-change",{id:this._formId,submissionAttempt:this.state.submissionAttempts,successful:!1,stage:"validate",errors:this.state.errors});st(()=>{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})),st(()=>{this.baseStore.setState(e=>({...e,isSubmitted:!0,isSubmitSuccessful:!0})),Ft.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})),Ft.emit("form-submission-state-change",{id:this._formId,submissionAttempt:this.state.submissionAttempts,successful:!1,stage:"inflight",onError:e}),i(),e}}setErrorMap(e){st(()=>{Object.entries(e).forEach(([e,t])=>{const i=e;if(yt(t)){const{formError:e,fieldErrors:s}=Dt(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 Dt(e){if(e){if(yt(e)){return{formError:Dt(e.form).formError,fieldErrors:e.fields}}return{formError:e}}return{formError:void 0}}function Vt(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=ot(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,St(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,St(t,{dontRunListeners:!0})),t?.dontRunListeners||this.triggerOnChangeListener()},this.insertValue=(e,t,i)=>{this.form.insertFieldValue(this.name,e,t,St(i,{dontRunListeners:!0})),i?.dontRunListeners||this.triggerOnChangeListener()},this.replaceValue=(e,t,i)=>{this.form.replaceFieldValue(this.name,e,t,St(i,{dontRunListeners:!0})),i?.dontRunListeners||this.triggerOnChangeListener()},this.removeValue=(e,t)=>{this.form.removeFieldValue(this.name,e,St(t,{dontRunListeners:!0})),t?.dontRunListeners||this.triggerOnChangeListener()},this.swapValues=(e,t,i)=>{this.form.swapFieldValues(this.name,e,t,St(i,{dontRunListeners:!0})),i?.dontRunListeners||this.triggerOnChangeListener()},this.moveValue=(e,t,i)=>{this.form.moveFieldValues(this.name,e,t,St(i,{dontRunListeners:!0})),i?.dontRunListeners||this.triggerOnChangeListener()},this.clearValues=e=>{this.form.clearFieldValues(this.name,St(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=ft(e,{...this.options,form:this.form,validationLogic:this.form.options.validationLogic||Ct}),s=this.getLinkedFields(e).reduce((t,i)=>{const s=ft(e,{...i.options,form:i.form,validationLogic:i.form.options.validationLogic||Ct});return s.forEach(e=>{e.field=i}),t.concat(s)},[]);let a=!1;st(()=>{const e=(e,i)=>{const s=jt(i.cause),o=i.validate?zt(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}=_t({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=jt("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=gt(e,{...this.options,form:this.form,validationLogic:this.form.options.validationLogic||Ct}),s=await t,a=this.getLinkedFields(e),o=a.reduce((t,i)=>{const s=gt(e,{...i.options,form:i.form,validationLogic:i.form.options.validationLogic||Ct});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=jt(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=zt(o),l=s[this.name]?.[a],{newErrorValue:d,newSource:c}=_t({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[jt(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=>Mt.validate({value:this.state.value,validationSource:"field"},e),this.parseValueWithSchemaAsync=e=>Mt.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)??{...It,...e.defaultMeta}})}),this.options=e}get state(){return this.store.state}runValidator(e){return Pt(e.validate)?Mt[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 zt(e){if(e)return e}function jt(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 Lt,Ot,Bt,Tt,Nt,Ut=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},Rt=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){Lt.set(this,void 0),Ot.set(this,void 0),this.api=new FormApi(t),Ut(this,Lt,e,"f").addController(this)}hostConnected(){Ut(this,Ot,this.api.store.subscribe(()=>{Rt(this,Lt,"f").requestUpdate()}),"f")}hostDisconnected(){Rt(this,Ot,"f")?.call(this)}field(e,t){return Qt(this.api,e,t)}}Lt=new WeakMap,Ot=new WeakMap;Bt=new WeakMap,Tt=new WeakMap,Nt=new WeakMap;const Qt=z(class FieldDirective extends B{constructor(e){if(super(e),Bt.set(this,!1),Tt.set(this,void 0),Nt.set(this,void 0),e.type!==L.CHILD)throw new Error("The `field` directive must be used in the `child` attribute")}update(e,[t,i,s]){if(!Rt(this,Bt,"f")){if(!Rt(this,Tt,"f")){const e={...i,form:t};Ut(this,Tt,new FieldApi(e),"f"),Ut(this,Nt,Rt(this,Tt,"f").mount(),"f")}Ut(this,Bt,!0,"f")}return this.render(t,i,s)}disconnected(){super.disconnected(),Rt(this,Nt,"f")?.call(this)}reconnected(){super.reconnected(),Rt(this,Tt,"f")&&Ut(this,Nt,Rt(this,Tt,"f").mount(),"f")}render(e,t,i){return Rt(this,Tt,"f")?i(Rt(this,Tt,"f")):A}}),Wt=F`.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}`,Ht=Z.object({first_name:Z.string({required_error:"required"}).min(1,"required"),last_name:Z.string({required_error:"required"}).min(1,"required"),email:Z.string({required_error:"required"}).email("email_invalid").min(1,"required"),phone:Z.string({required_error:"required"}).min(9,"phone_invalid"),birth_date:Z.string({required_error:"required"}).min(1,"required"),tax_id:Z.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 Kt=class CompleteProfileForm extends q{constructor(){super(...arguments),this.isPending=!1,this.errorMap={required:M("Este campo es obligatorio"),email_invalid:M("El email no es válido"),phone_invalid:M("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:Ht}}),this.getScheduleServicesQuery=new i(this,()=>u(g))}static{this.styles=Wt}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===b.phonecall;return D`<div class="form-container"><form class="form-content" @submit="${e=>{e.preventDefault(),e.stopPropagation(),this.form.api.handleSubmit()}}"><div class="${K({field:!0,hidden:!!this.defaultValues.first_name})}">${this.form.field({name:"first_name"},e=>D`<mq-input label="${M("Nombre")}" id="${G(e.name)}" value="${G(e.state.value)}" name="${G(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?D`<em class="field-error">${this.translateError(e.state.meta.errors[0]?.message||"")}</em>`:A}`)}</div><div class="${K({field:!0,hidden:!!this.defaultValues.last_name})}">${this.form.field({name:"last_name"},e=>D`<mq-input label="${M("Apellidos")}" id="${G(e.name)}" value="${G(e.state.value)}" name="${G(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?D`<em class="field-error">${this.translateError(e.state.meta.errors[0]?.message||"")}</em>`:A}`)}</div><div class="${K({field:!0,hidden:!!this.defaultValues.email})}">${this.form.field({name:"email"},e=>D`<mq-input type="email" label="${M("Email")}" id="${G(e.name)}" value="${G(e.state.value)}" name="${G(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?D`<em class="field-error">${this.translateError(e.state.meta.errors[0]?.message||"")}</em>`:A}`)}</div><div class="${K({field:!0,hidden:!!this.defaultValues.phone})}">${this.form.field({name:"phone"},e=>D`<mq-input type="tel" label="${M("Teléfono")}" id="${G(e.name)}" value="${G(e.state.value)}" name="${G(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?D`<em class="field-error">${this.translateError(e.state.meta.errors[0]?.message||"")}</em>`:A}`)}</div><div class="${K({field:!0,hidden:!!this.defaultValues.birth_date})}">${this.form.field({name:"birth_date"},e=>D`<mq-input type="date" label="${M("Fecha de nacimiento")}" id="${G(e.name)}" value="${G(e.state.value)}" name="${G(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?D`<em class="field-error">${this.translateError(e.state.meta.errors[0]?.message||"")}</em>`:A}`)}</div><div class="${K({field:!0,hidden:!!this.defaultValues.tax_id})}">${this.form.field({name:"tax_id"},e=>D`<mq-input label="${M("DNI/NIE")}" id="${G(e.name)}" value="${G(e.state.value)}" name="${G(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?D`<em class="field-error">${this.translateError(e.state.meta.errors[0]?.message||"")}</em>`:A}`)}</div>${t?D`<mq-callout background="default" variant="info" noPadding>${M("El profesional te llamará al número que indiques en este campo.")}</mq-callout>`:A}<mq-button type="submit" fullwidth size="xl" ?disabled="${this.isPending}">${M("Continuar")}</mq-button></form></div>`}};e([V({type:Boolean})],Kt.prototype,"isPending",void 0),e([V({type:String})],Kt.prototype,"serviceId",void 0),e([V({type:Object})],Kt.prototype,"defaultValues",void 0),Kt=e([I(),t("complete-profile-form")],Kt);const Gt=F`: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 Zt=class DiscountCodeField extends q{constructor(){super(...arguments),this.basePrice=null,this.appliedDiscount=null,this.expanded=!1,this.form=new TanStackFormController(this,{defaultValues:{code:""}})}static{this.styles=Gt}async validateCode(e){const t=e.trim();if(this.basePrice&&""!==t)try{const e=await async function(e){const{basePrice:t}=e,i=e.code.trim();try{const e=await g.payments.getConsultationCoupon(i,t.amount),s=e.percent_off,a=e.after_discount_amount??t.amount-Math.round(t.amount*s/100);return{code:i,percentage:s,discountAmount:t.amount-a,totalAmount:a,currency:t.currency}}catch(e){if(y(e)&&404===e.response?.status)throw new InvalidDiscountCodeError;throw e}}({code:t,basePrice:this.basePrice});return this.dispatchEvent(new DiscountAppliedEvent(e)),this.expanded=!1,void this.form.api.reset()}catch(e){return M(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 D`<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 D`<div class="row"><input class="input ${s?"input--error":""}" type="text" .value="${i.state.value}" ?disabled="${e}" placeholder="${M("Ingresa el código")}" @input="${e=>i.handleChange(e.target.value)}"> <button type="submit" class="btn" ?disabled="${!t.code.trim()||e}">${e?D`${Y({color:"currentColor",size:16})}`:M("Aplicar")}</button></div>${s?D`<p class="error">${s}</p>`:A}`})}</form>`}render(){return this.appliedDiscount&&!this.expanded?D`<div class="applied"><span class="applied__status" role="status">${D`<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>`} ${M("Código de promoción aplicado")} </span><button type="button" class="applied__change" @click="${this.onChangeCode}">${D`<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>`} ${M("Cambiar código")}</button></div>`:D`<button type="button" class="trigger" aria-expanded="${this.expanded}" @click="${this.toggle}">${ee({size:20})} <span class="trigger__label">${M("Añadir código de promoción")}</span> ${e=this.expanded,D`<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([V({type:Object})],Zt.prototype,"basePrice",void 0),e([V({type:Object})],Zt.prototype,"appliedDiscount",void 0),e([X()],Zt.prototype,"expanded",void 0),Zt=e([I(),t("discount-code-field")],Zt);const Jt=F`.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 Xt=class NewAppointmentSummary extends q{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,ae.success(M("Código de promoción validado correctamente"))},this.getOrganizationSpecialtiesQuery=new i(this,()=>n(g,{enabled:!!this.professional?.speciality.id})),this.getOrganizationSetupQuery=new i(this,()=>a(g))}static{this.styles=Jt}renderAppointmentDetails(){return D`${this.startsAt&&this.channel&&this.duration?D`<appointment-details .startsAt="${w(this.startsAt).toISOString()}" .duration="${this.duration}" .channel="${this.channel}" .timezone="${this.patient.timezone}" variant="wide"></appointment-details>`:A} ${this.previousStartsAt&&this.previousDuration?D`<hr><span class="previous-starts-at">${M("Cita previa:")}</span><appointment-details .startsAt="${w(this.previousStartsAt).toISOString()}" .duration="${this.previousDuration}" .timezone="${this.patient.timezone}" strike-through variant="wide"></appointment-details>`:A}`}render(){const e=N(),t=this.getOrganizationSpecialtiesQuery.result?.data?.find(e=>e.id===this.professional?.speciality.id),i=l(t?.code??"",e,t?.name),s=this.serviceCode?d(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!==_.Stripe,n=this.servicePrice;return D`<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()} ${te(n)?D`${this.showPrice?D`${r?D`<discount-code-field .basePrice="${{amount:n.amount,currency:n.currency}}" .appliedDiscount="${this.appliedDiscount}" @discount-applied="${this.onDiscountApplied}"></discount-code-field>`:A}<div class="payment-info">${s?D`<span class="payment-info__name">${s}</span>`:A} <span class="payment-info__price">${ie({amount:n.amount,currency:n.currency},e)}</span></div>${r&&this.appliedDiscount?D`<div class="discount-info"><span>${M("Promoción")} ${this.appliedDiscount.code} (-${this.appliedDiscount.percentage}%)</span> <span>${ie({amount:-this.appliedDiscount.discountAmount,currency:this.appliedDiscount.currency},e)}</span></div><hr><div class="total-info"><span>${M("Total")}</span> <span>${ie({amount:this.appliedDiscount.totalAmount,currency:this.appliedDiscount.currency},e)}</span></div>`:A}`:A} ${o.length>0?D`<hr><mq-clamped-text class="reservation-conditions" .lines="${2}" expand-label="${M("Ver más")}" collapse-label="${M("Ver menos")}"><span class="reservation-conditions__prefix">${M("Condiciones de reserva:")}</span> ${" "} <span class="reservation-conditions__body">${o}</span></mq-clamped-text>`:A}`:A}</mq-card>`}};e([V({type:Object})],Xt.prototype,"professional",void 0),e([V({type:String})],Xt.prototype,"startsAt",void 0),e([V({type:Number})],Xt.prototype,"duration",void 0),e([V({type:String})],Xt.prototype,"channel",void 0),e([V({type:String})],Xt.prototype,"previousStartsAt",void 0),e([V({type:Number})],Xt.prototype,"previousDuration",void 0),e([V({type:String})],Xt.prototype,"serviceCode",void 0),e([V({type:String})],Xt.prototype,"serviceName",void 0),e([V({type:Object})],Xt.prototype,"servicePrice",void 0),e([V({type:Boolean,attribute:"fill-column",reflect:!0})],Xt.prototype,"fillColumn",void 0),e([V({type:Object})],Xt.prototype,"appliedDiscount",void 0),e([V({type:Boolean})],Xt.prototype,"showPrice",void 0),e([J({context:Ve,subscribe:!0})],Xt.prototype,"patient",void 0),Xt=e([I(),t("new-appointment-summary")],Xt);let Yt=class CompleteProfileStep extends q{constructor(){super(...arguments),this.showBack=!0,this.channel=void 0,this.getPatientProfileQuery=new i(this,()=>p(g)),this.updatePatientProfileMutation=new H(this,{mutationFn:async e=>g.flash.updatePatientProfile(e)})}static{this.styles=F`.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=>D`<mq-page-title .title="${M("Petición de cita")}" .showBack="${this.showBack}" @mq-back="${e=>Qe(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>${M("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([V({type:String})],Yt.prototype,"serviceId",void 0),e([V({type:Boolean})],Yt.prototype,"showBack",void 0),e([V({type:Object})],Yt.prototype,"scheduleSlot",void 0),e([V({type:Object})],Yt.prototype,"professional",void 0),e([V({type:String})],Yt.prototype,"channel",void 0),Yt=e([I(),t("complete-profile-step")],Yt);const ei=F`: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 ti=class FileAttachments extends q{constructor(){super(...arguments),this.uploadedFiles=[],this.uploadingFile=null,this.uploadFileMutation=new H(this,{mutationFn:e=>g.documents.uploadFile({file:e}),throwOnError:!0})}static{this.styles=ei}handleClickUploadFile(){const e=this.shadowRoot?.querySelector("input[type='file']");e&&e.click()}getErrorMessageFromCode(e){switch(e){case 422:default:return M("Ha ocurrido un error en el envío del archivo");case 413:return M("El archivo supera el tamaño máximo permitido");case 415:return M("Formato de archivo no soportado")}}async handleUploadFile(e){const t=e.target.files?.[0];if(t){if(t.size>314572800)return ae.error(M("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(!y(e))return;const t=this.getErrorMessageFromCode(e.response?.status??500);ae.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 D`<div class="field"><input type="file" hidden @change="${this.handleUploadFile}"><p class="label">${M("Adjuntar archivos")}</p><p class="hint">${M("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}">${ne()} ${M("Subir archivo")}</mq-button><div class="files">${this.uploadedFiles.map((e,t)=>D`<div class="file"><div class="file-info">${re()} <span class="file-name">${e.file_name}</span></div><div class="file-close"><mq-button size="icon-xs" variant="ghost" @click="${()=>this.handleRemoveFile(t)}">${le({color:"var(--color-neutrals-text-default)",size:24})}</mq-button></div></div>`)} ${this.uploadingFile?D`<div class="file uploading"><div class="file-info">${D`<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>`}};function ii(e){return g.appointments.createAppointment(e)}e([V({type:Array})],ti.prototype,"uploadedFiles",void 0),e([X()],ti.prototype,"uploadingFile",void 0),e([oe("input[type='file']")],ti.prototype,"fileInput",void 0),ti=e([I(),t("file-attachments")],ti);class ScheduleAppointmentMutationController{constructor(e,t){this.mutation=new H(e,{mutationFn:ii,onSuccess:async e=>{await(t.getQueryClient()?.invalidateQueries()),await t.onSuccess(e.appointment.id)},onError:async()=>{await(t.getQueryClient()?.invalidateQueries()),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 si=F`: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 ai=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 oi=class ConfirmStep extends q{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,{getQueryClient:()=>this.queryClientContext,onSuccess:e=>{this.dispatchEvent(new ai({appointmentId:e}))},onError:()=>{this.dispatchEvent(new CustomEvent("error"))}}),this.rescheduleAppointmentMutation=new H(this,{mutationFn:async e=>g.appointments.rescheduleAppointment(e),onSuccess:async()=>{await(this.queryClientContext?.invalidateQueries());const e=this.appointment?.id;if(!e)return de.error("confirm-step: reschedule succeeded but appointment id is missing"),void this.dispatchEvent(new CustomEvent("error"));this.dispatchEvent(new ai({appointmentId:e}))},onError:async()=>{await(this.queryClientContext?.invalidateQueries()),this.dispatchEvent(new CustomEvent("error"))}}),this.createPaymentLinkMutation=new H(this,{mutationFn:async e=>({result:await g.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()),this.dispatchEvent(new CustomEvent("error"))}})}static{this.styles=si}get isPaymentFlow(){return this.requiresPayment&&"schedule"===this.kind&&te(this.service?.price)}get isFullyDiscounted(){return null!=this.appliedDiscount&&Re(this.appliedDiscount)}get ctaLabel(){return this.isFullyDiscounted?M("Confirmar cita"):this.isPaymentFlow?M("Continuar al pago"):M("Continuar")}async handleSubmit(){if(pe.track(he(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})}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 D`<mq-page-title .title="${"schedule"===this.kind?M("Petición de cita"):M("Modificar cita")}" .showBack="${this.showBack}" @mq-back="${e=>Qe(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">${M("Cuestionario preconsulta")}</p><div class="field"><p class="label">${M("Motivo de consulta")}</p><mq-textarea maxlength="${240}" label="${M("¿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([J({context:Ve,subscribe:!0})],oi.prototype,"patient",void 0),e([V({type:String})],oi.prototype,"kind",void 0),e([V({type:Boolean})],oi.prototype,"showBack",void 0),e([V({type:Boolean})],oi.prototype,"requiresPayment",void 0),e([V({type:Object})],oi.prototype,"scheduleSlot",void 0),e([V({type:Object})],oi.prototype,"professional",void 0),e([V({type:String})],oi.prototype,"startsAt",void 0),e([V({type:Number})],oi.prototype,"duration",void 0),e([V({type:String})],oi.prototype,"channel",void 0),e([V({type:Object})],oi.prototype,"appointment",void 0),e([V({type:String})],oi.prototype,"serviceId",void 0),e([V({type:String})],oi.prototype,"specialityId",void 0),e([V({type:Object})],oi.prototype,"service",void 0),e([V({type:Object})],oi.prototype,"appliedDiscount",void 0),e([V({type:String})],oi.prototype,"returnUrl",void 0),e([X()],oi.prototype,"reason",void 0),e([X()],oi.prototype,"attachedFiles",void 0),e([J({context:ce,subscribe:!0})],oi.prototype,"queryClientContext",void 0),oi=e([I(),t("confirm-step")],oi);class PaymentSuccessEvent extends Event{static{this.eventName="payment-success"}constructor(e){super(PaymentSuccessEvent.eventName,{bubbles:!0,composed:!0}),this.detail=e}}const ri=F`: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 ni=class PaymentPendingStep extends q{constructor(){super(...arguments),this._timedOut=!1,this._remaining=6e4}static{this.styles=ri}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 g.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?D`<p class="error-title">${M("No hemos podido confirmar tu pago")}</p><p class="message">${M("Ha ocurrido un problema al verificar el estado de tu pago. Por favor, contacta con soporte si el cargo se ha realizado.")}</p>`:D`${Y({size:40,color:"var(--color-primary-default)"})}<p class="message">${M("Verificando tu pago...")}</p>`}};e([V({type:String})],ni.prototype,"sessionId",void 0),e([X()],ni.prototype,"_timedOut",void 0),ni=e([I(),t("payment-pending-step")],ni);const li="https://checkout.mediquo.com";function di(){return D`<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 ci(){return D`<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 pi=F`: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)}.option--disabled,.option--disabled:hover{opacity:.55;cursor:not-allowed}.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 hi=class PaymentMethodSelector extends q{constructor(){super(...arguments),this.showWallets=!0,this._selected=null,this._confirm=()=>{this._selected&&this.dispatchEvent(new PaymentMethodSelectedEvent({method:this._selected}))}}static{this.styles=pi}willUpdate(e){e.has("showWallets")&&!this.showWallets&&(this._selected="card")}_select(e){this._selected=e}_renderRow(e,t,i,{disabled:s=!1}={}){const a=this._selected===e;return D`<button type="button" class="${K({option:!0,"option--selected":a,"option--disabled":s})}" role="radio" aria-checked="${a}" ?disabled="${s}" aria-disabled="${s}" @click="${()=>{s||this._select(e)}}"><span class="lead">${i} <span class="option__label">${t}</span> </span><span class="${K({radio:!0,"radio--checked":a})}"></span></button>`}_renderAction(e){return"google-pay"===this._selected&&e?D`<button type="button" class="wallet wallet--google" aria-label="${M("Pagar con Google Pay")}" @click="${this._confirm}"><span class="wallet__glyph">${di()}</span> <span class="wallet__pay">Pay</span></button>`:"apple-pay"===this._selected?D`<button type="button" class="wallet wallet--apple" aria-label="${M("Pagar con Apple Pay")}" @click="${this._confirm}"><span class="wallet__glyph">${ci()}</span> <span class="wallet__pay">Pay</span></button>`:D`<mq-button class="confirm" variant="primary" size="md" fullwidth type="button" ?disabled="${null===this._selected}" @click="${this._confirm}">${M("Confirmar y pagar")}</mq-button>`}render(){const e="undefined"!=typeof window&&window.isSecureContext,t="undefined"!=typeof window&&window.isSecureContext;return D`<mq-card class="panel" elevation="none" roundness="lg"><div class="header"><h2 class="title">${M("Método de pago")}</h2><p class="subtitle">${M("Selecciona un método para realizar el pago de la cita")}</p></div><div class="body"><div class="options" role="radiogroup" aria-label="${M("Método de pago")}">${this._renderRow("card",M("Tarjeta"),D`<span class="lead__icon">${D`<svg width="16" height="16" viewBox="0 0 14.3333 10.3333" fill="none" xmlns="http://www.w3.org/2000/svg" aria-hidden="true"><path d="M0.5 3.83333H13.8333M1.83333 0.5H12.5C13.2364 0.5 13.8333 1.09695 13.8333 1.83333V8.5C13.8333 9.23638 13.2364 9.83333 12.5 9.83333H1.83333C1.09695 9.83333 0.5 9.23638 0.5 8.5V1.83333C0.5 1.09695 1.09695 0.5 1.83333 0.5Z" stroke="currentColor" stroke-width="1" stroke-linecap="round" stroke-linejoin="round"/></svg>`}</span>`)} ${this.showWallets?this._renderRow("google-pay",M("Google pay"),D`<span class="mark mark--google"><span class="mark__glyph">${di()}</span> <span class="mark__pay">Pay</span></span>`,{disabled:!e}):null} ${this.showWallets&&t?this._renderRow("apple-pay",M("Apple pay"),D`<span class="mark mark--apple"><span class="mark__glyph">${ci()}</span> <span class="mark__pay">Pay</span></span>`):null}</div><div class="action">${this._renderAction(e)}</div></div></mq-card>`}};e([V({type:Boolean,attribute:"show-wallets"})],hi.prototype,"showWallets",void 0),e([X()],hi.prototype,"_selected",void 0),hi=e([I(),t("payment-method-selector")],hi);const ui=F`: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}.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}}`,mi="mediquo:payment:retry",vi="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 fi=class PaymentStep extends q{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._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,{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===_.Stripe){const e=new v({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(),"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 mi:return void this.dispatchEvent(new PaymentRetryEvent);case vi:return void("number"==typeof e.data.height&&(this._iframeHeight=e.data.height))}}}static{this.styles=ui}get isFullyDiscounted(){return null!=this.appliedDiscount&&Re(this.appliedDiscount)}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 se(this._paymentAmountCents()).toFixed(2)}_buildApplePayUrl(){return this.apiKey&&this.token?function(e){const t=new URL(`${li}/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??M("Consulta"),env:this.env,locale:this.locale,successUrl:this.successUrl}):null}_buildGooglePayUrl(){return this.apiKey&&this.token?function(e){const t=new URL(`${li}/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??M("Consulta"),env:this.env,locale:this.locale,successUrl:this.successUrl}):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 g.payments.getPaymentSession(this.sessionId);if(e.status===S.Paid)return this._stopPaymentPolling(),this._walletPopup?.close(),this._walletPopup=null,void this.dispatchEvent(new PaymentSuccessEvent({appointmentId:e.consultation_id}));e.status===S.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?M("No se puede iniciar Google Pay"):M("No se puede iniciar Apple Pay"):"google-pay"===this._walletWaiting?M("Esperando confirmación de Google Pay"):M("Esperando confirmación de Apple Pay")}_walletReopenLabel(){return"google-pay"===this._walletWaiting?M("Abrir Google Pay"):M("Abrir Apple Pay")}_walletReopenLinkLabel(){return"google-pay"===this._walletWaiting?M("Abrir ventana de Google Pay"):M("Abrir ventana de Apple Pay")}_walletReopenAgainLabel(){return"google-pay"===this._walletWaiting?M("Volver a abrir Google Pay"):M("Volver a abrir Apple Pay")}updated(e){super.updated(e),e.has("paymentUrl")&&(this._iframeLoaded=!1,this._iframeHeight=null)}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 D`<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}">${M("Confirmar cita")}</mq-button></div></div></div>`}_renderPaymentColumn(){return this._walletWaiting?this._walletConfigError?D`<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">${M("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}}">${M("Elegir otro método")}</mq-text-button></div></mq-card></div>`:D`<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">${M("No cierres esta página.")}</p>${this._walletPopupBlocked&&this._walletUrl?D`<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>`:D`<mq-text-button type="button" @click="${this._reopenWalletPopup}">${this._walletReopenAgainLabel()}</mq-text-button>`}</div></mq-card></div>`:"select"===this._view?D`<div class="payment-col__inner"><payment-method-selector .showWallets="${this.provider!==_.Stripe}" @payment-method-selected="${this._onPaymentMethodSelected}"></payment-method-selector></div>`:D`<div class="payment-col__inner"><div class="payment-frame">${this._iframeLoaded?null:D`<mq-skeleton width="100%" height="600px" border-radius="md" role="status" aria-live="polite" aria-label="${M("Cargando portal de pago")}"></mq-skeleton>`}<iframe class="${this._iframeLoaded?"loaded":""}" src="${this.paymentUrl}" title="${M("Portal de pago")}" style="${null!==this._iframeHeight?`min-height: ${this._iframeHeight}px; height: ${this._iframeHeight}px;`:""}" @load="${this._onIframeLoad}"></iframe></div></div>`}render(){if(this._timedOut)return D`<div class="error"><p class="error-title">${M("No hemos podido confirmar tu pago")}</p><p class="error-message">${M("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=D`<mq-page-title .title="${M("Petición de cita")}" .showBack="${this.showBack}" @mq-back="${this._onHeaderBack}"></mq-page-title>`;return this.isFullyDiscounted?D`${e}<div class="content content--free">${this._renderSummaryColumn()}<div class="payment-col" .inert="${!0}"></div></div>`:D`${e}<div class="content">${this._renderSummaryColumn()}<div class="payment-col">${this._renderPaymentColumn()}</div></div>`}};e([V({type:String})],fi.prototype,"sessionId",void 0),e([V({type:Boolean})],fi.prototype,"showBack",void 0),e([V({type:String})],fi.prototype,"paymentUrl",void 0),e([V({type:Object})],fi.prototype,"professional",void 0),e([V({type:String})],fi.prototype,"startsAt",void 0),e([V({type:Number})],fi.prototype,"duration",void 0),e([V({type:String})],fi.prototype,"channel",void 0),e([V({type:Object})],fi.prototype,"service",void 0),e([V({type:Object})],fi.prototype,"scheduleSlot",void 0),e([V({type:Object})],fi.prototype,"appliedDiscount",void 0),e([V({type:Object})],fi.prototype,"bookingRequest",void 0),e([V({type:String,attribute:!1})],fi.prototype,"apiKey",void 0),e([V({type:String,attribute:!1})],fi.prototype,"token",void 0),e([V({type:String,attribute:!1})],fi.prototype,"env",void 0),e([V({type:String,attribute:!1})],fi.prototype,"locale",void 0),e([V({type:String,attribute:!1})],fi.prototype,"countryCode",void 0),e([V({type:String,attribute:!1})],fi.prototype,"successUrl",void 0),e([V({type:String,attribute:!1})],fi.prototype,"provider",void 0),e([J({context:ce,subscribe:!0})],fi.prototype,"queryClientContext",void 0),e([X()],fi.prototype,"_view",void 0),e([X()],fi.prototype,"_walletWaiting",void 0),e([X()],fi.prototype,"_walletUrl",void 0),e([X()],fi.prototype,"_walletPopupBlocked",void 0),e([X()],fi.prototype,"_walletConfigError",void 0),e([X()],fi.prototype,"_timedOut",void 0),e([X()],fi.prototype,"_iframeLoaded",void 0),e([X()],fi.prototype,"_iframeHeight",void 0),fi=e([I(),t("payment-step")],fi);const gi=F`: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 yi=class ScheduleLoadingBanner extends q{static{this.styles=gi}render(){return D`<div class="banner" role="status" aria-live="polite">${Y({size:24,color:"var(--color-primary-default, var(--color-primary))"})}<p class="label">${M("Cargando")}</p></div>`}};yi=e([I(),t("schedule-loading-banner")],yi);const bi=F`.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}}`,wi=Z.object({service:Z.string().min(1),specialty:Z.string().min(1)});class SearchProfessionalsFormSuccessEvent extends CustomEvent{static{this.eventName="success"}constructor(e){super(SearchProfessionalsFormSuccessEvent.eventName,{bubbles:!0,composed:!0,detail:e})}}let _i=class SearchProfessionalsForm extends q{constructor(){super(...arguments),this.form=new TanStackFormController(this,{defaultValues:this.defaultValues,onSubmit:e=>{const t=e.value;pe.track(ue(this.patient.hash,t.specialty??"",t.service??"")),this.dispatchEvent(new SearchProfessionalsFormSuccessEvent(t))},validators:{onSubmit:wi}}),this.getScheduleServicesQuery=new i(this,()=>u(g)),this.getOrganizationSpecialtiesQuery=new i(this,()=>n(g))}static{this.styles=bi}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=N();return D`<mq-select label="${M("Modalidad de la cita")}" id="${G(e)}" value="${G(t)}" name="${G(e)}" size="lg" ?error="${s}" @onvaluechange="${e=>{i(e.value)}}">${a.map(e=>D`<mq-option value="${e.id}">${d(e.code??"",o,e.name)}</mq-option>`)}</mq-select>`}renderOrganizationSpecialties({name:e,value:t,onValueChange:i,error:s},a){const o=N();return D`<mq-select label="${M("Especialidad")}" id="${G(e)}" value="${G(t)}" name="${G(e)}" size="lg" ?error="${s}" @onvaluechange="${e=>{i(e.value)}}">${a.map(e=>D`<mq-option value="${e.id}">${c[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 D`<div class="form-container"><form class="form-content" @submit="${e=>{e.preventDefault(),e.stopPropagation(),this.form.api.handleSubmit()}}">${this.filtersLoading?D`<schedule-loading-banner class="filters-loading-banner"></schedule-loading-banner>`:a?D`<div class="field">${this.form.field({name:"service"},e=>D`<p class="field-title">${M("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=>D`<p class="field-title">${M("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>${M("Buscar disponibilidad")}</mq-button>`:A}</form></div>`}};function Si(e){if(!e)return new Date(Number.NaN);const t=w(e);if(ye(t))return t;const i=_e(e);if(ye(i))return i;const s=new Date(e);return Number.isNaN(s.getTime())?new Date(Number.NaN):s}function xi(e){const t=new Date;let i;for(const s of e){const e=Si(s.starts_at);ye(e)&&(xe(e,t)&&(!i||Ae(e,i)<0)&&(i=e))}return i?Se(i):void 0}function $i(e,t){if(!e.length)return[];const i=e.reduce((e,i)=>{const s=Si(i.starts_at);if(!ye(s))return e;const a=function(e,t){if(!ye(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 be(e,"yyyy-MM-dd")}(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)=>Ae(e.parsedDate,t.parsedDate)),date:t[0]?.parsedDate??new Date(Number.NaN)})).filter(({date:e})=>ye(e)).sort((e,t)=>Ae(e.date,t.date))}e([J({context:Ve,subscribe:!0})],_i.prototype,"patient",void 0),e([V({type:Object})],_i.prototype,"defaultValues",void 0),_i=e([I(),t("search-professionals-form")],_i);const ki=F`: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-muted);flex:1 1 0;min-width:0;height:var(--sp-11);display:flex;align-items:center;justify-content:center;border:1px solid var(--color-border);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-neutrals-text-default);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:var(--color-primary-light)}.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}.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 Ci=class ShowFullScheduleEvent extends Event{static{this.eventName="show-full-schedule"}constructor(){super(ShowFullScheduleEvent.eventName,{bubbles:!0,composed:!0})}},Ei=class ProfessionalCard extends q{constructor(){super(...arguments),this.serviceId="",this.specialtyId="",this.showSlotUnavailableError=!1,this.getOrganizationSpecialtiesQuery=new i(this,()=>n(g)),this.checkForSlotAvailabilityMutation=new H(this,{mutationFn:e=>g.schedules.getScheduleSlot({slot_id:e,service_id:this.serviceId||void 0,speciality_id:this.specialtyId?Number(this.specialtyId):void 0})})}static{this.styles=ki}get groupedSlots(){const e=this.professional?.slots??[];return 0===e.length?[]:$i(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=N().replace("_","-"),i=new Intl.DateTimeFormat(t,{weekday:"short",...this.timezone?{timeZone:this.timezone}:{}}).format(e).replace(/\.$/,"");return`${i.charAt(0).toUpperCase()}${i.slice(1)}`}formatDate(e){const t=N().replace("_","-"),i=this.timezone?{timeZone:this.timezone}:{},s=new Intl.DateTimeFormat(t,{day:"numeric",...i}).format(e),a=new Intl.DateTimeFormat(t,{month:"short",...i}).format(e).replace(/\.$/,"");return`${s} ${`${a.charAt(0).toUpperCase()}${a.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,N().replace("_","-"),this.timezone)}async handleSlotClick(e){const t=await this.checkForSlotAvailabilityMutation.run(e.id);t.status===x.available?(this.showSlotUnavailableError=!1,pe.track(me(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())}render(){const e=N(),t=this.getOrganizationSpecialtiesQuery.result?.data?.find(e=>e.id===this.professional.speciality.id),i=l(t?.code??"",e,t?.name);return D`<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="${K({"schedules-container":!0,"is-pending":this.checkForSlotAvailabilityMutation.isPending})}">${this.showSlotUnavailableError?D`<p class="error-message">${M("Este horario no está disponible. Por favor, seleccione otro.")}</p>`:A}<div class="schedules">${this.groupedSlots.length>0?this.groupedSlots.map(e=>D`<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})=>D`<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(()=>D`<div class="schedule-slot is-empty">-</div>`)}</div>`):D`<div class="no-slots">${M("Sin huecos disponibles actualmente")}</div>`}</div><mq-button fullwidth @click="${()=>{pe.track(ve(this.patient.hash,this.professional.id,this.specialtyId,this.serviceId)),this.dispatchEvent(new Ci)}}">${Ce({size:24})} ${M("Ver agenda completa")}</mq-button></div></mq-card>`}};e([J({context:Ve,subscribe:!0})],Ei.prototype,"patient",void 0),e([V({type:Object})],Ei.prototype,"professional",void 0),e([V({type:String})],Ei.prototype,"serviceId",void 0),e([V({type:String})],Ei.prototype,"specialtyId",void 0),e([X()],Ei.prototype,"showSlotUnavailableError",void 0),e([J({context:ce,subscribe:!0})],Ei.prototype,"queryClientContext",void 0),Ei=e([I(),t("professional-card")],Ei);const Mi=F`: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)}.description{font-size:var(--text-sm);line-height:var(--text-sm--line-height);font-weight:var(--font-weight-normal);margin:0}`;class ShowFullScheduleEvent extends Event{static{this.eventName="show-full-schedule"}constructor(e){super(ShowFullScheduleEvent.eventName,{bubbles:!0,composed:!0}),this.detail=e}}let Pi=class ProfessionalsList extends q{constructor(){super(...arguments),this.specialty_id=void 0,this.service_id=void 0,this.getOrganizationSpecialtiesQuery=new i(this,()=>n(g)),this.getScheduleServicesQuery=new i(this,()=>u(g)),this.getProfessionalsBySpecialtyAndServiceQuery=new i(this,()=>{return e=g,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:h(e,"professionals-by-specialty-and-service",t),queryFn:t.speciality_id&&t.organization_schedule_service_id?()=>e.schedules.getProfessionalsBySpecialtyAndService(t):Ee,staleTime:0};var e,t})}static{this.styles=Mi}render(){const e=N(),t=this.getOrganizationSpecialtiesQuery.result?.data?.find(e=>e.id===Number(this.specialty_id)),i=this.getScheduleServicesQuery.result?.data?.find(e=>e.id===this.service_id);if(!this.specialty_id||!this.service_id)return A;const s=c[t?.code]?.[e]??t?.name??"",a=d(i?.code??"",e,i?.name);return this.getProfessionalsBySpecialtyAndServiceQuery.render({pending:()=>D`<div id="professionals-results"><schedule-loading-banner></schedule-loading-banner></div>`,complete:e=>{if(0===e.length)return D`<mq-callout background="default" variant="info">${M("No hay profesionales disponibles para la especialidad seleccionada. Por favor, vuelve a intentarlo en otro momento o selecciona otra especialidad.")}</mq-callout>`;const t=e[0],o=t?.slots?.[0];return pe.track(fe(this.patient.hash,this.specialty_id??"",this.service_id??"",o?.starts_at??"",t?.id??"",e.length,e.reduce((e,t)=>e+(t.slots?.length??0),0))),D`<div id="professionals-results"><p class="title">${M("Selecciona tu especialista")}</p><p class="description">${M(P`Resultados de citas de ${a} para ${s}`)}</p></div>${e.map(e=>D`<professional-card .professional="${e}" .serviceId="${this.service_id??""}" .specialtyId="${this.specialty_id??""}" @show-full-schedule="${t=>{t.stopPropagation();const s=this.service_id,a=this.specialty_id;void 0!==i&&void 0!==s&&void 0!==a&&this.dispatchEvent(new ShowFullScheduleEvent({professional:e,serviceId:s,service:i,specialtyId:a,firstAvailableSlotDate:xi(e.slots)}))}}"></professional-card>`)}`}})}};e([J({context:Ve,subscribe:!0})],Pi.prototype,"patient",void 0),e([V({type:String})],Pi.prototype,"specialty_id",void 0),e([V({type:String})],Pi.prototype,"service_id",void 0),Pi=e([I(),t("professionals-list")],Pi);const Ii=F`.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 Ai=class SuccessEvent extends Event{static{this.eventName="success"}constructor(e){super(SuccessEvent.eventName,{bubbles:!0,composed:!0}),this.detail=e}},Fi=class SelectProfessionalStep extends q{constructor(){super(...arguments),this.defaultSpecialty=void 0,this.defaultService=void 0,this.showBack=!0,this.formData=void 0,this.getScheduleServicesQuery=new i(this,()=>u(g)),this.getOrganizationSpecialtiesQuery=new i(this,()=>n(g))}static{this.styles=Ii}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(),pe.track(ge(this.patient.hash))}scrollToProfessionalsList(){setTimeout(()=>{this.shadowRoot?.querySelector("professionals-list")?.scrollIntoView({behavior:"smooth"})},0)}render(){return D`<div class="container"><mq-page-title .title="${M("Petición de cita")}" .showBack="${this.showBack}" @mq-back="${e=>Qe(this,e)}"></mq-page-title><div class="page-container">${this.isScheduleFiltersReady?A:D`<schedule-loading-banner></schedule-loading-banner>`} ${this.isScheduleFiltersReady&&this.showSearchForm?D`<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>`:A} ${this.isScheduleFiltersReady?D`<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 Ai({slot:e.detail.slot,serviceId:t.service_id,service:i,specialtyId:t.specialty_id,professional:e.detail.professional}))}}"></professionals-list>`:A}</div></div>`}};function qi(e,t){return{queryKey:h(e,"schedule-service-professional-slots",t),queryFn:()=>e.schedules.getScheduleServiceProfessionalSlots(t)}}e([J({context:Ve,subscribe:!0})],Fi.prototype,"patient",void 0),e([V({type:String})],Fi.prototype,"defaultSpecialty",void 0),e([V({type:String})],Fi.prototype,"defaultService",void 0),e([V({type:Boolean})],Fi.prototype,"showBack",void 0),e([X()],Fi.prototype,"formData",void 0),Fi=e([I(),t("select-professional-step")],Fi);const Di=()=>"undefined"!=typeof window&&window.innerWidth>=Pe.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 Vi=F`:host{display:block}.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 zi=class DaysWindowView extends q{constructor(){super(...arguments),this.specialityId=void 0,this.reschedulingAppointmentId=void 0,this.windowStartDate=Se(new Date),this.errorMessage=void 0,this.checkForSlotAvailabilityMutation=new H(this,{mutationFn:e=>g.schedules.getScheduleSlot({slot_id:e,service_id:this.serviceId||void 0,speciality_id:this.specialityId})}),this._visibleDays=Di(),this.getScheduleServiceProfessionalSlotsQuery=new i(this,()=>{const e=Se(Ie(this.windowStartDate,new Date)?new Date:this.windowStartDate),t=Fe(Me(e,this._visibleDays-1));return qi(g,{service_id:this.serviceId,professional_hash:this.professionalId,starts_at:$(e),finishes_at:$(t),rescheduling_appointment_id:this.reschedulingAppointmentId})})}static{this.styles=Vi}connectedCallback(){super.connectedCallback(),this._resizeHandler=()=>{const e=Di();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?.isPending,i=this.getScheduleServiceProfessionalSlotsQuery.result?.data?.filter(t=>xe(w(t.starts_at),e)&&t.status===x.available),s=i?.map(e=>({key:e.id,date:w(e.starts_at).toISOString()})),a=N().replace("_","-");return D`<mq-card class="card" roundness="md"><mq-button @click="${()=>this.dispatchEvent(new CustomEvent("to-calendar-view"))}">${Ce({size:24})} ${M("Elige otra fecha")}</mq-button>${this.errorMessage?D`<p class="error-message">${this.errorMessage}</p>`:A}<mq-time-slot-picker .locale="${a}" .timezone="${this.patient.timezone}" .visibleDays="${this._visibleDays}" .slots="${s??[]}" .windowStartDate="${be(this.windowStartDate,"yyyy-MM-dd")}" ?is-loading="${t}" @window-change="${e=>{this.windowStartDate=new Date(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===x.available?this.dispatchEvent(new SlotSelectEvent({slot:i})):this.dispatchEvent(new SlotUnavailableEvent)}}"></mq-time-slot-picker></mq-card>`}};e([V({type:String})],zi.prototype,"professionalId",void 0),e([V({type:String})],zi.prototype,"serviceId",void 0),e([V({type:Number})],zi.prototype,"specialityId",void 0),e([V({type:String})],zi.prototype,"reschedulingAppointmentId",void 0),e([V({type:Object})],zi.prototype,"windowStartDate",void 0),e([V({type:String,attribute:"error-message"})],zi.prototype,"errorMessage",void 0),e([J({context:Ve,subscribe:!0})],zi.prototype,"patient",void 0),zi=e([I(),t("days-window-view")],zi);const ji=F`:host{display:block;max-width:var(--content-max-width);margin:0 auto}`;let Li=class CalendarView extends q{constructor(){super(...arguments),this.reschedulingAppointmentId=void 0,this.initialDate=void 0,this.currentMonth=new Date,this.getScheduleServiceProfessionalSlotsQuery=new i(this,()=>{const e=$e(this.currentMonth),t=Se(Ie(e,new Date)?new Date:e),i=Fe(ke(t));return qi(g,{service_id:this.serviceId,professional_hash:this.professionalId,starts_at:$(t),finishes_at:$(i),rescheduling_appointment_id:this.reschedulingAppointmentId})})}static{this.styles=ji}connectedCallback(){super.connectedCallback(),this.initialDate&&(this.currentMonth=this.initialDate)}render(){const e=new Date,t=this.getScheduleServiceProfessionalSlotsQuery.result?.isPending,i=this.getScheduleServiceProfessionalSlotsQuery.result?.data?.filter(t=>xe(w(t.starts_at),e)&&t.status===x.available),s=i&&i.length>0?Array.from(new Set(i.map(e=>{const t=w(e.starts_at);return Se(t).toISOString()}))):void 0,a=N().replace("_","-");return D`<mq-calendar locale="${a}" ?is-loading="${t}" .currentMonth="${this.currentMonth.toISOString()}" .availableDays="${s}" @prev-month="${e=>{this.currentMonth=new Date(e.detail.currentMonth)}}" @next-month="${e=>{this.currentMonth=new Date(e.detail.currentMonth)}}"></mq-calendar>`}};e([V({type:String})],Li.prototype,"professionalId",void 0),e([V({type:String})],Li.prototype,"serviceId",void 0),e([V({type:String})],Li.prototype,"reschedulingAppointmentId",void 0),e([V({type:Object})],Li.prototype,"initialDate",void 0),e([X()],Li.prototype,"currentMonth",void 0),Li=e([t("calendar-view")],Li);class SuccessEvent extends Event{static{this.eventName="success"}constructor(e){super(SuccessEvent.eventName,{bubbles:!0,composed:!0}),this.detail=e}}const Oi=F`: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 Bi=class SelectSlotStep extends q{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=g,t=this.serviceId,i={enabled:!!this.serviceId},{queryKey:h(e,"schedule-service-specialities",t),queryFn:()=>e.schedules.getScheduleServiceSpecialities(t),...i};var e,t,i}),this.view="days-window",this.windowStartDate=Se(new Date)}static{this.styles=Oi}connectedCallback(){super.connectedCallback(),this.initialDate&&(this.windowStartDate=Se(this.initialDate))}renderView(){return"days-window"===this.view?D`<days-window-view .errorMessage="${this.errorMessage}" .professionalId="${this.professionalId}" .serviceId="${this.serviceId}" .specialityId="${this.professional?.speciality?.id}" .reschedulingAppointmentId="${this.reschedulingAppointmentId}" .windowStartDate="${this.windowStartDate}" @to-calendar-view="${()=>{this.view="calendar"}}" @slot-select="${e=>{this.dispatchEvent(new SuccessEvent({slot:e.detail.slot}))}}" @slot-unavailable="${()=>{this.errorMessage=M("Este horario no está disponible. Por favor, seleccione otro."),this.queryClientContext?.invalidateQueries()}}"></days-window-view>`:D`<calendar-view .professionalId="${this.professionalId}" .serviceId="${this.serviceId}" .reschedulingAppointmentId="${this.reschedulingAppointmentId}" .initialDate="${this.initialDate}" @date-select="${e=>{this.windowStartDate=new Date(e.detail.date),this.view="days-window"}}"></calendar-view>`}render(){const e=this.getScheduleServiceSpecialitiesQuery.result?.data?.find(e=>e.id===this.professional?.speciality?.id)?.price??null;return D`<mq-page-title .title="${"schedule"===this.kind?M("Petición de cita"):M("Modificar cita")}" .showBack="${this.showBack}" @mq-back="${e=>Qe(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([V({type:String})],Bi.prototype,"kind",void 0),e([V({type:Boolean})],Bi.prototype,"showBack",void 0),e([V({type:String})],Bi.prototype,"serviceId",void 0),e([V({type:String})],Bi.prototype,"professionalId",void 0),e([V({type:String})],Bi.prototype,"reschedulingAppointmentId",void 0),e([V({type:Object})],Bi.prototype,"professional",void 0),e([V({type:String})],Bi.prototype,"startsAt",void 0),e([V({type:Number})],Bi.prototype,"duration",void 0),e([V({type:String})],Bi.prototype,"channel",void 0),e([V({type:String,attribute:"error-message"})],Bi.prototype,"errorMessage",void 0),e([V({type:Object})],Bi.prototype,"initialDate",void 0),e([V({type:Object})],Bi.prototype,"service",void 0),e([V({type:Object})],Bi.prototype,"appliedDiscount",void 0),e([J({context:ce,subscribe:!0})],Bi.prototype,"queryClientContext",void 0),e([X()],Bi.prototype,"view",void 0),e([X()],Bi.prototype,"windowStartDate",void 0),Bi=e([I(),t("select-slot-step")],Bi);let Ti=class SelectSlotStepSkeleton extends q{static{this.styles=F`: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 D`<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><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 Ni(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}}Ti=e([t("select-slot-step-skeleton")],Ti),U();class AppointmentCreatedEvent extends Event{static{this.eventName="appointment-created"}constructor(e){super(AppointmentCreatedEvent.eventName,{bubbles:!0,composed:!0}),this.detail=e}}let Ui=class MqSchedule extends q{constructor(){super(...arguments),this.requiresPayment=!0,this.showBackButton=!0,this._patient=new E(this,{context:Ve,initialValue:{hash:"",name:"",timezone:"UTC"}}),this._emittedCreated=!1,this._organizationChanged=!1,this.getAppointmentQuery=new i(this,()=>s(g,{id:this.appointmentId??""},{enabled:!!this.appointmentId})),this.getProfessionalQuery=new i(this,()=>{return e=g,t={hash:this.defaultProfessionalHash??""},i={enabled:!!this.defaultProfessionalHash},{queryKey:h(e,"professional-public-profile",t.hash),queryFn:()=>e.profile.getProfessionalPublicProfile(t),...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=g,s={slot_id:this.defaultSlotId??"",service_id:je(this.defaultService,e)?.id,speciality_id:ze(this.defaultSpecialty,t)},a={enabled:!!(this.defaultSlotId&&this.token&&e&&t)},{queryKey:h(i,"schedules","slot",s.slot_id,s.service_id,s.speciality_id),queryFn:()=>i.schedules.getScheduleSlot(s),...a};var i,s,a}),this.getPatientProfileQuery=new i(this,()=>p(g,{enabled:!!this.token})),this.getOrganizationSpecialtiesQuery=new i(this,()=>n(g)),this.getScheduleServicesQuery=new i(this,()=>u(g)),this.getOrganizationSetupQuery=new i(this,()=>a(g,{enabled:"reschedule"===this.kind}))}static{this.styles=F`.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&&T(this.env),e.has("apiKey")&&this.apiKey&&g.setApiKey(this.apiKey);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("token")&&this.token&&g.setAuthToken(this.token),e.has("locale")&&this.locale&&R(this.locale)&&(Q(this.locale),g.setLanguage(this.locale));const i=this.getPatientProfileQuery.result?.data;this._patient.setValue({hash:i?.hash??"",name:k(i),timezone:this.timezone||Intl.DateTimeFormat().resolvedOptions().timeZone})}_current(e){return this._organizationChanged?void 0:e}_initWizard(e,t,i){return this._wizard||(this._wizard=new qe(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 f({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}}_renderStep(e,t){const i=e.canGoBack||this.showBackButton;return De(this.apiKey??"",function(e,t,i,s,a,o){const r=M("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 D`<select-professional-step .defaultSpecialty="${t.specialty}" .defaultService="${t.service?.id}" .showBack="${d}" @show-full-schedule="${e=>{i.goTo("selectSlot",{service:e.detail.service,specialty:e.detail.specialtyId,professional:Ni(e.detail.professional),firstAvailableSlotDate:e.detail.firstAvailableSlotDate,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:Ni(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?D`<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>`:A}if(!l)return A;const e=t.service;return e?D`<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.firstAvailableSlotDate}" .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>`:D`<select-slot-step-skeleton></select-slot-step-skeleton>`}if("completeProfile"===e){const e=t.slot;return s?e&&s.service_id&&n?D`<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>`:A:e&&l&&t.service?D`<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>`:A}if("confirm"===e){const e=t.slot;return s?e&&s.service_id&&n?D`<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>`:A:e&&l&&t.service?D`<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>`:A}if("payment"===e){const e=t.paymentSessionId,s=t.paymentUrl,a=l,r=t.slot;return e&&a&&r?D`<payment-step .showBack="${d}" .sessionId="${e}" .paymentUrl="${s??""}" .professional="${a}" .startsAt="${r.starts_at}" .duration="${r.duration}" .channel="${t.service?.channel??r.channel}" .service="${t.service}" .scheduleSlot="${r}" .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}" @back="${i.back}" @success="${e=>i.onCreated(e.detail.appointmentId)}" @discount-applied="${async e=>{if(i.update({appliedDiscount:e.detail}),Re(e.detail))return;const s=t.paymentRequest;if(!s)return;const a={...s,discount_code:e.detail.code};try{const e=await g.payments.createPaymentLink(a);i.update({paymentSessionId:e.session_id,paymentUrl:e.payment_link,paymentRequest:a,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 g.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>`:A}return A}(e.current,e.ctx,this._stepHandlers(e),t,{showBack:i,isAuthenticated:!!this.token},this._hostConfig()))}renderReschedulePolicyBlocked(){return D`<div class="reschedule-policy-blocked"><p>${M("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 f({source:"mq-schedule"}))}">${M("Volver")}</mq-button></div>`}render(){const e=D`<select-slot-step-skeleton></select-slot-step-skeleton>`;if(this.token&&this.getPatientProfileQuery.result?.isPending)return e;const t=!!this.getPatientProfileQuery.result?.data&&C(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(!m({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,firstAvailableSlotDate: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(Ue,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=Le({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(Ne,{...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=Le({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(Te,i);return s.reconcile({profileComplete:t,service:i.service??s.ctx.service,specialty:s.ctx.specialty??i.specialty}),this._renderStep(s,void 0)}};e([V({type:String,attribute:"default-specialty"})],Ui.prototype,"defaultSpecialty",void 0),e([V({type:String,attribute:"default-service"})],Ui.prototype,"defaultService",void 0),e([V({type:String,attribute:"default-professional-hash"})],Ui.prototype,"defaultProfessionalHash",void 0),e([V({type:String,attribute:"default-slot-id"})],Ui.prototype,"defaultSlotId",void 0),e([V({type:String,attribute:"kind"})],Ui.prototype,"kind",void 0),e([V({type:Boolean,attribute:"requires-payment"})],Ui.prototype,"requiresPayment",void 0),e([V({type:String,attribute:"appointment-id"})],Ui.prototype,"appointmentId",void 0),e([V({type:Boolean,attribute:"show-back-button",converter:{fromAttribute:e=>null===e||"false"!==e&&"0"!==e,toAttribute:e=>e?"":"false"}})],Ui.prototype,"showBackButton",void 0),e([V({type:String,attribute:"api-key"})],Ui.prototype,"apiKey",void 0),e([V({type:String,attribute:"token"})],Ui.prototype,"token",void 0),e([V({type:String,attribute:"locale"})],Ui.prototype,"locale",void 0),e([V({type:String,attribute:"env"})],Ui.prototype,"env",void 0),e([V({type:String,attribute:"apple-pay-success-url"})],Ui.prototype,"applePaySuccessUrl",void 0),e([V({type:String,attribute:"return-url"})],Ui.prototype,"returnUrl",void 0),e([V({type:String,attribute:"timezone"})],Ui.prototype,"timezone",void 0),Ui=e([I(),t("mq-schedule")],Ui);export{AppointmentCreatedEvent,AuthRequiredEvent,Ui as MqSchedule};